#!/bin/sh
# This script was generated using Makeself 2.1.5

CRCsum="2450492748"
MD5="00000000000000000000000000000000"
TMPROOT=${TMPDIR:=/tmp}

label="MultiValue Application Server"
script="./setup.sh"
scriptargs=""
targetdir="mvapps-1.7.4.8171U"
filesizes="13998080"
keep=n

print_cmd_arg=""
if type printf > /dev/null; then
    print_cmd="printf"
elif test -x /usr/ucb/echo; then
    print_cmd="/usr/ucb/echo"
else
    print_cmd="echo"
fi

unset CDPATH

MS_Printf()
{
    $print_cmd $print_cmd_arg "$1"
}

MS_Progress()
{
    while read a; do
	MS_Printf .
    done
}

MS_diskspace()
{
	(
	if test -d /usr/xpg4/bin; then
		PATH=/usr/xpg4/bin:$PATH
	fi
	df -kP "$1" | tail -1 | awk '{print $4}'
	)
}

MS_dd()
{
    blocks=`expr $3 / 1024`
    bytes=`expr $3 % 1024`
    dd if="$1" ibs=$2 skip=1 obs=1024 conv=sync 2> /dev/null | \
    { test $blocks -gt 0 && dd ibs=1024 obs=1024 count=$blocks ; \
      test $bytes  -gt 0 && dd ibs=1 obs=1024 count=$bytes ; } 2> /dev/null
}

MS_Help()
{
    cat << EOH >&2
Makeself version 2.1.5
 1) Getting help or info about $0 :
  $0 --help   Print this message
  $0 --info   Print embedded info : title, default target directory, embedded script ...
  $0 --lsm    Print embedded lsm entry (or no LSM)
  $0 --list   Print the list of files in the archive
  $0 --check  Checks integrity of the archive
 
 2) Running $0 :
  $0 [options] [--] [additional arguments to embedded script]
  with following options (in that order)
  --confirm             Ask before running embedded script
  --noexec              Do not run embedded script
  --keep                Do not erase target directory after running
			the embedded script
  --nox11               Do not spawn an xterm
  --nochown             Do not give the extracted files to the current user
  --target NewDirectory Extract in NewDirectory
  --tar arg1 [arg2 ...] Access the contents of the archive through the tar command
  --                    Following arguments will be passed to the embedded script
EOH
}

MS_Check()
{
    OLD_PATH="$PATH"
    PATH=${GUESS_MD5_PATH:-"$OLD_PATH:/bin:/usr/bin:/sbin:/usr/local/ssl/bin:/usr/local/bin:/opt/openssl/bin"}
	MD5_ARG=""
    MD5_PATH=`exec <&- 2>&-; which md5sum || type md5sum`
    test -x "$MD5_PATH" || MD5_PATH=`exec <&- 2>&-; which md5 || type md5`
	test -x "$MD5_PATH" || MD5_PATH=`exec <&- 2>&-; which digest || type digest`
    PATH="$OLD_PATH"

    MS_Printf "Verifying archive integrity..."
    offset=`head -n 404 "$1" | wc -c | tr -d " "`
    verb=$2
    i=1
    for s in $filesizes
    do
		crc=`echo $CRCsum | cut -d" " -f$i`
		if test -x "$MD5_PATH"; then
			if test `basename $MD5_PATH` = digest; then
				MD5_ARG="-a md5"
			fi
			md5=`echo $MD5 | cut -d" " -f$i`
			if test $md5 = "00000000000000000000000000000000"; then
				test x$verb = xy && echo " $1 does not contain an embedded MD5 checksum." >&2
			else
				md5sum=`MS_dd "$1" $offset $s | eval "$MD5_PATH $MD5_ARG" | cut -b-32`;
				if test "$md5sum" != "$md5"; then
					echo "Error in MD5 checksums: $md5sum is different from $md5" >&2
					exit 2
				else
					test x$verb = xy && MS_Printf " MD5 checksums are OK." >&2
				fi
				crc="0000000000"; verb=n
			fi
		fi
		if test $crc = "0000000000"; then
			test x$verb = xy && echo " $1 does not contain a CRC checksum." >&2
		else
			sum1=`MS_dd "$1" $offset $s | CMD_ENV=xpg4 cksum | awk '{print $1}'`
			if test "$sum1" = "$crc"; then
				test x$verb = xy && MS_Printf " CRC checksums are OK." >&2
			else
				echo "Error in checksums: $sum1 is different from $crc"
				exit 2;
			fi
		fi
		i=`expr $i + 1`
		offset=`expr $offset + $s`
    done
    echo " All good."
}

UnTAR()
{
    tar $1vf - 2>&1 || { echo Extraction failed. > /dev/tty; kill -15 $$; }
}

finish=true
xterm_loop=
nox11=n
copy=copy
ownership=y
verbose=n

initargs="$@"

while true
do
    case "$1" in
    -h | --help)
	MS_Help
	exit 0
	;;
    --info)
	echo Identification: "$label"
	echo Target directory: "$targetdir"
	echo Uncompressed size: 17416 KB
	echo Compression: none
	echo Date of packaging: Mon Jun 22 09:58:25 PDT 2020
	echo Built with Makeself version 2.1.5 on linux-gnu
	echo Build command was: "/usr/sbin/makeself.sh \\
    \"--nocomp\" \\
    \"--copy\" \\
    \"--nomd5\" \\
    \"/home/mvdashboard/unix/installer/mvapps-1.7.4.8171U\" \\
    \"mvapps-1.7.4.8171U.bin\" \\
    \"MultiValue Application Server\" \\
    \"./setup.sh\""
	if test x$script != x; then
	    echo Script run after extraction:
	    echo "    " $script $scriptargs
	fi
	if test x"" = xcopy; then
		echo "Archive will copy itself to a temporary location"
	fi
	if test x"n" = xy; then
	    echo "directory $targetdir is permanent"
	else
	    echo "$targetdir will be removed after extraction"
	fi
	exit 0
	;;
    --dumpconf)
	echo LABEL=\"$label\"
	echo SCRIPT=\"$script\"
	echo SCRIPTARGS=\"$scriptargs\"
	echo archdirname=\"mvapps-1.7.4.8171U\"
	echo KEEP=n
	echo COMPRESS=none
	echo filesizes=\"$filesizes\"
	echo CRCsum=\"$CRCsum\"
	echo MD5sum=\"$MD5\"
	echo OLDUSIZE=17416
	echo OLDSKIP=405
	exit 0
	;;
    --lsm)
cat << EOLSM
No LSM.
EOLSM
	exit 0
	;;
    --list)
	echo Target directory: $targetdir
	offset=`head -n 404 "$0" | wc -c | tr -d " "`
	for s in $filesizes
	do
	    MS_dd "$0" $offset $s | eval "cat" | UnTAR t
	    offset=`expr $offset + $s`
	done
	exit 0
	;;
	--tar)
	offset=`head -n 404 "$0" | wc -c | tr -d " "`
	arg1="$2"
	shift 2
	for s in $filesizes
	do
	    MS_dd "$0" $offset $s | eval "cat" | tar "$arg1" - $*
	    offset=`expr $offset + $s`
	done
	exit 0
	;;
    --check)
	MS_Check "$0" y
	exit 0
	;;
    --confirm)
	verbose=y
	shift
	;;
	--noexec)
	script=""
	shift
	;;
    --keep)
	keep=y
	shift
	;;
    --target)
	keep=y
	targetdir=${2:-.}
	shift 2
	;;
    --nox11)
	nox11=y
	shift
	;;
    --nochown)
	ownership=n
	shift
	;;
    --xwin)
	finish="echo Press Return to close this window...; read junk"
	xterm_loop=1
	shift
	;;
    --phase2)
	copy=phase2
	shift
	;;
    --)
	shift
	break ;;
    -*)
	echo Unrecognized flag : "$1" >&2
	MS_Help
	exit 1
	;;
    *)
	break ;;
    esac
done

case "$copy" in
copy)
    tmpdir=$TMPROOT/makeself.$RANDOM.`date +"%y%m%d%H%M%S"`.$$
    mkdir "$tmpdir" || {
	echo "Could not create temporary directory $tmpdir" >&2
	exit 1
    }
    SCRIPT_COPY="$tmpdir/makeself"
    echo "Copying to a temporary location..." >&2
    cp "$0" "$SCRIPT_COPY"
    chmod +x "$SCRIPT_COPY"
    cd "$TMPROOT"
    exec "$SCRIPT_COPY" --phase2 -- $initargs
    ;;
phase2)
    finish="$finish ; rm -rf `dirname $0`"
    ;;
esac

if test "$nox11" = "n"; then
    if tty -s; then                 # Do we have a terminal?
	:
    else
        if test x"$DISPLAY" != x -a x"$xterm_loop" = x; then  # No, but do we have X?
            if xset q > /dev/null 2>&1; then # Check for valid DISPLAY variable
                GUESS_XTERMS="xterm rxvt dtterm eterm Eterm kvt konsole aterm"
                for a in $GUESS_XTERMS; do
                    if type $a >/dev/null 2>&1; then
                        XTERM=$a
                        break
                    fi
                done
                chmod a+x $0 || echo Please add execution rights on $0
                if test `echo "$0" | cut -c1` = "/"; then # Spawn a terminal!
                    exec $XTERM -title "$label" -e "$0" --xwin "$initargs"
                else
                    exec $XTERM -title "$label" -e "./$0" --xwin "$initargs"
                fi
            fi
        fi
    fi
fi

if test "$targetdir" = "."; then
    tmpdir="."
else
    if test "$keep" = y; then
	echo "Creating directory $targetdir" >&2
	tmpdir="$targetdir"
	dashp="-p"
    else
	tmpdir="$TMPROOT/selfgz$$$RANDOM"
	dashp=""
    fi
    mkdir $dashp $tmpdir || {
	echo 'Cannot create target directory' $tmpdir >&2
	echo 'You should try option --target OtherDirectory' >&2
	eval $finish
	exit 1
    }
fi

location="`pwd`"
if test x$SETUP_NOCHECK != x1; then
    MS_Check "$0"
fi
offset=`head -n 404 "$0" | wc -c | tr -d " "`

if test x"$verbose" = xy; then
	MS_Printf "About to extract 17416 KB in $tmpdir ... Proceed ? [Y/n] "
	read yn
	if test x"$yn" = xn; then
		eval $finish; exit 1
	fi
fi

MS_Printf "Uncompressing $label"
res=3
if test "$keep" = n; then
    trap 'echo Signal caught, cleaning up >&2; cd $TMPROOT; /bin/rm -rf $tmpdir; eval $finish; exit 15' 1 2 3 15
fi

leftspace=`MS_diskspace $tmpdir`
if test $leftspace -lt 17416; then
    echo
    echo "Not enough space left in "`dirname $tmpdir`" ($leftspace KB) to decompress $0 (17416 KB)" >&2
    if test "$keep" = n; then
        echo "Consider setting TMPDIR to a directory with more free space."
   fi
    eval $finish; exit 1
fi

for s in $filesizes
do
    if MS_dd "$0" $offset $s | eval "cat" | ( cd "$tmpdir"; UnTAR x ) | MS_Progress; then
		if test x"$ownership" = xy; then
			(PATH=/usr/xpg4/bin:$PATH; cd "$tmpdir"; chown -R `id -u` .;  chgrp -R `id -g` .)
		fi
    else
		echo
		echo "Unable to decompress $0" >&2
		eval $finish; exit 1
    fi
    offset=`expr $offset + $s`
done
echo

cd "$tmpdir"
res=0
if test x"$script" != x; then
    if test x"$verbose" = xy; then
		MS_Printf "OK to execute: $script $scriptargs $* ? [Y/n] "
		read yn
		if test x"$yn" = x -o x"$yn" = xy -o x"$yn" = xY; then
			eval $script $scriptargs $*; res=$?;
		fi
    else
		eval $script $scriptargs $*; res=$?
    fi
    if test $res -ne 0; then
		test x"$verbose" = xy && echo "The program '$script' returned an error code ($res)" >&2
    fi
fi
if test "$keep" = n; then
    cd $TMPROOT
    /bin/rm -rf $tmpdir
fi
eval $finish; exit $res
./                                                                                                  0000777 0000000 0000000 00000000000 13364666755 007742  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./Linux/                                                                                            0000755 0000000 0000000 00000000000 12572062126 011013  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./Linux/x86_64/                                                                                     0000755 0000000 0000000 00000000000 13666507151 011760  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./Linux/x86_64/mvappsvr                                                                             0000755 0000000 0000000 00000651560 13666507151 013601  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ELF          >    @     @       pL         @ 8  @         @       @ @     @ @                                      @      @                                          @       @     E     E                   E     Ec     Ec     L      pB                     F      Fc      Fc                                    @     @     D       D              Ptd   '     'C     'C                        Qtd                                                  /lib64/ld-linux-x86-64.so.2          GNU                       GNU vϳԔJur   `          !@`   a   d   )fUa	92                                                  I                     $                     j                     q                     "                                                               .                      x                                                                                                                                  Y                      [                                                                                                                                                      c                     K                      G                     e                                           _                                           |                                                                                                                                 v                     q                                                                                                          +                                                               Q                      
                     ~                     Q                                          }                      c                     2                                          )                                          L                                                                                     i                     =                      F                                                                                     8                                                                                                                                9                                                                                                          `                                                                0                                           ?                     m                                            p                     V                     @                                                                                                            d                     D                                           o    pKc                 HKc            O    i@     8          hKc            v     @Kc                `Kc             libm.so.6 __gmon_start__ _Jv_RegisterClasses ceil libc.so.6 socket fflush execl wordexp htons fopen strncmp wordfree optind pipe connect closedir inet_ntoa strncpy fork putchar select mkdir realloc stdin _exit tolower popen getpid strdup strftime chmod gmtime feof fgetc fgets strlen send memset strstr strcspn __errno_location chdir init_module toupper getopt dup2 stdout fputc recv fputs memcpy fclose strtoul malloc strcasecmp getpeername opendir bzero __ctype_b_loc sscanf optarg getservbyname stderr gethostbyname freopen strncasecmp strncat fileno pclose usleep chown fwrite fread atoi atol localtime difftime strchr fprintf utime fdopen setvbuf memmove strcmp strerror __libc_start_main ferror setenv ntohs snprintf __xstat __fxstat __lxstat GLIBC_2.2.5 GLIBC_2.3                                                                                                                      ui	           3          ii        ui	         Gc                   @Kc        d           HKc        a           `Kc        e           hKc        c           pKc        `           Gc                   Gc                   Gc                   Gc                   Gc                   Gc                   Gc                   Gc                    Hc        	           Hc        
           Hc                   Hc                    Hc                   (Hc                   0Hc                   8Hc                   @Hc                   HHc                   PHc                   XHc                   `Hc                   hHc                   pHc                   xHc                   Hc                   Hc                   Hc                   Hc                   Hc                   Hc                    Hc        !           Hc        "           Hc        #           Hc        $           Hc        %           Hc        &           Hc        '           Hc        (           Hc        )           Hc        *            Ic        +           Ic        ,           Ic        -           Ic        .            Ic        /           (Ic        0           0Ic        1           8Ic        2           @Ic        3           HIc        4           PIc        5           XIc        6           `Ic        7           hIc        8           pIc        9           xIc        :           Ic        ;           Ic        <           Ic        =           Ic        >           Ic        ?           Ic        @           Ic        A           Ic        B           Ic        C           Ic        D           Ic        E           Ic        F           Ic        G           Ic        H           Ic        I           Ic        J            Jc        K           Jc        L           Jc        M           Jc        N            Jc        O           (Jc        P           0Jc        Q           8Jc        R           @Jc        S           HJc        T           PJc        U           XJc        V           `Jc        W           hJc        X           pJc        Y           xJc        Z           Jc        [           Jc        \           Jc        ]           Jc        ^           Jc        _           H    襃 H5-# %-# @ %-# h    %-# h   %-# h   %-# h   %-# h   %-# h   %-# h   %-# h   p%-# h   `%-# h	   P%-# h
   @%-# h   0%-# h    %-# h   %-# h    %-# h   %z-# h   %r-# h   %j-# h   %b-# h   %Z-# h   %R-# h   %J-# h   %B-# h   p%:-# h   `%2-# h   P%*-# h   @%"-# h   0%-# h    %-# h   %
-# h    %-# h   %,# h    %,# h!   %,# h"   %,# h#   %,# h$   %,# h%   %,# h&   %,# h'   p%,# h(   `%,# h)   P%,# h*   @%,# h+   0%,# h,    %,# h-   %,# h.    %,# h/   %z,# h0   %r,# h1   %j,# h2   %b,# h3   %Z,# h4   %R,# h5   %J,# h6   %B,# h7   p%:,# h8   `%2,# h9   P%*,# h:   @%",# h;   0%,# h<    %,# h=   %
,# h>    %,# h?   %+# h@   %+# hA   %+# hB   %+# hC   %+# hD   %+# hE   %+# hF   %+# hG   p%+# hH   `%+# hI   P%+# hJ   @%+# hK   0%+# hL    %+# hM   %+# hN    %+# hO   %z+# hP   %r+# hQ   %j+# hR   %b+# hS   %Z+# hT   %R+# hU   %J+# hV   %B+# hW   p%:+# hX   `%2+# hY   P%*+# hZ   @%"+# h[   0%+# h\    1I^HHPTIA HA Ht @ HH'# HtHÐUHSH=+#  uKEc H+# HEc HHH9s$fD  HH]+# Ec HO+# H9r;+# H[fff.     H=%#  UHt    HtEc ÐUHHp}HuHE       Hw}~HEHHHE   HHju HE   A HluHUEH։oY    HE	   A H<uHUEH։OZ    HE   ǝA HuHUEH։Y    HE   ϝA HuHUEH։[  {  H)#            HTH)#            H6H)# H¹םA ٝA HHw         E?7w{H(A           k`#    OH:)#    Hƿsc s 4H)#    Hƿwc s H)#    Hƿuc s HMEA HΉE}W_# t
A )  wc QHwc </u#A wc H¾   uc     A!+A wc H¾   uc     =A *  u
@c 	      
  u=Z_# t
>A 4)  H%(# H¹םA ٝA HH@c       %  u
@c   HD_# H!  u      u
@c {  HE@   Hƿ$c ;  E}    ^# t1XA ADc $c H¾   @c     $@c j(  HEHE  u,@c    t   A @c q @c   HEH(  u
A   HEDc HF  u.@c    t   ֞A @c q @c   U]# tKA '  ?N#   A $c H¾   @c     @@c '  @c /      UHHH
^#     H]#     H]#     Hq]#     Hv]#     Hs]#     H]#     H]#     H]#     H_]#     H]#     Hi]#     Hf]#     Hc]#     H ]#     H]#        H]#    H\#    qH"]#    `H]#    OH\#    >H\#     -Hv\# l]# f]# `]# Z]#        c         $c @       Dc @       c n@       c ZHK\#        HAH[#        H(A A HEH} u\#     HE@Ap\# j\#     HK\#     HH\#     \#            sc        uc        wc         yc n@       yc Z       8~c F       \c 2$       8c H#R#     H R#     HR#     HRZ#     HOZ#     HLZ#     JZ#        A sc m    A uc m    +A wc m    ?A \c m        Kc n       Oc Z       Sc F       Wc 2       [c        _c 
       cc        gc        kc        oc    AA Sc l    MA Oc l  J#     J#     J#    !#     UHSA mA HǸ    =xA A A A HǸ    A A A ~A tHA j
   UHH   HZ# u(H!# HH   Hc          	        HnX# Ht0HbX# A HE} ~HEX# EHH  H2X# H   H"X# A HtCH
X# A Ht+HW# A HtA $c u0A TzH# A HHǸ      HW# HtxHW# A Hnt0HsW# A HVtH[W# A H>u0(A G# XA HHǸ    /8  ڣA A xA A A xA nA HǸ    A RȥA H(A >XA HǸ    A HǸ    (A xA A HǸ    t A HǸ    bA ȨA A 8A A A 1A ;A DA hA ~A tA @c HtPA HǸ    HA DA :0A 0`A &A լA vA HHHǸ    tA pA A A @A A A XA լA jA xA A |A r    UHH0E   [T# t
A 5  H^T# HtHZT# Hu
    5  H<T#   H:T#   HUHEHƿ   :u~S# t
ůA   EHEH}    HEH=H    HS# HM    HH@g HS# HM   HH%g    zS# t
ܯA T  fS# u9HrS#     A Hf HaS#    A Hf    2 A H¾   @c     @c          UHH  T#    H# HH   HHh  HH  HR# HA   HѺ       H  HR# HA   HѺ       Hm  HR# HA   HѺ       HD  H_R# 1A Ht|HGR# 5A HjtdH/R# :A HRtLHR# ?A H:t4HQ# CA H"tHQ# JA H
  HR# HQ# A   HѺ   ?   H     /HQ# HQ#        HQ#    HQ# HQ# A   HѺ   ?   H*  HQ# H  t:B#   XA H¾   @c     s@c         HHQ# /   H  EEttAH#Q# @   HƿDc )d nHQ# A    $c    /   Hy  HHP# A    $c    /   HS  HP# A@   Dc    /   H/  $c   t    yc $c c Dc t  t@   Dc }A $c 0  Dc M  tj@   yc Dc Nc U@#   HO# H  u0HO# A HH¾   @c     @c G      G   ?j@#   @O# t&A H¾   @c     @c       UHSH  @#   H-O# Hl  tHO#    A Hhb ?# -   =1    HŘA HEA   HEA   HEA   HE A   HE A   HE+A   HE9A w  HEIA j  HEZA ]  HElA P  HErA C  HE|A 6  HE艱A )  HE蓱A   HE覱A   HE貱A   HE迱A    HEбA    HEڱA    HEA    HEA    HEA    HE$A    HE5A    HE>A    HECA    HESA vHEgA lHE耲A bHE薲A XHE譲A NHE˲A DHE޲A :HEA 0HEA &HEA HE$A HE5A HEPA L# tDH5M# =# XA H]HIIؾ   HǸ    -HHn  =# HL# A HMHHǸ    r=#    H  [UHSH(  HE    H# HH   HIHEHA Ha  H(A HE  H}   HH  ƅ H   :   Hf  E؃} yHHE؃} ~XE؍XHHA   Hщھ    Hz  E؍XHHA   HѺ   HN  HH
  HH	  H+A H8u4   H3K# H,K# H   HHM^ qH2A Hu4   NHJ# HJ# H   HH^ %H=A Hu4   HJ# HJ# H   HH] HDA HTu4   H_J# HXJ# H   HHi] HOA HuHH5J# [H^A Hu4   8HI# HI# H   HH\ HkA Hu4   HMI# HFI# H   HH\ HwA H>u#H[I# H   HHd\ HA Hu4   eHH# HH# H   HH\ <HA Hu4   HH# HH# H   HH[ E   H   H¾A $c (     H    H.     H,   H	  EE   gHUHA   ,   H  HHHHu"HHHHR  E    EE;E~} <G# A   HH     H(  [UHH}8#   }uA Kc HǸ    H7# νA HǸ    .Oc 3	  u۽A Oc HǸ    	Sc 	  uA Sc HǸ    Wc   uA Wc HǸ    [c   uA [c HǸ    _c   u!A _c HǸ    ucc z  u.A cc HǸ    P# ~# BA HǸ    ,gc 1  u
XA kc   uA kc HǸ    oc   uA oc HǸ    }tj6# =3  u
A -/E# t
A 	  76#    UHSH  H(HE@       HqD# t
ɾA   HE@   H¾ݾA $c %    HE   A H     A gc  X zD# t
A T  Hp@       HH0@       HH0       HHp@   H¾A $c $  H0@   H¾*A $c $  7A H0HpH0Iؾ   HǸ    NH0HH0H0   H5  =A H0H0   HǸ    _C# tHC# H4  H0H%  HC# H0HH|uC# t
FA      94#   `A H¾   @c     w          H  [ÐUHATSH H}H} u    EHEHE    %HcILeHcHE A$;]|ָ    H [A\UHATSH H}H} u    EHEHE    %HcILeHcHE |A$;]|ָ    H [A\UHH@H}؉UHMDEĈEH} tH} t} 
      E   E    EHcHEȾ    HHEHEE    eEHHE EE:EuECE;Eu Eă;E~0EHHEUEE;E~EHHE      EE;E|    UHH@H}H} u
   p  E    E    HEH@E܃} 
    C  E܃HHmHEHEHEH} u
     E܃HcHMHEHHT E܃EEHHE  m} ~.HEHHE HHH %    uE    a} u5HEHHE HHH %    uE   }uEHHEUHcHUEEE;E|EHHE  E܃HcHMHEHH#S HEH    UHHH}H} u
       HE <'u9HEHHHE <'uHE  HEHHHE  HE <"u9HEHpHHE <"uHE  HEHNHHE      UHH0H}uUHMDEH} tH} t} 
      E    HEHEEHcHEؾ    HE;E}    p} yE    E;E}	EEEE+Eԃ;E~*EHHE؋UHcHUEEE;E~EHHE      UHH H}uH} u    FE    HEH&EE    EHHE ;EuEEE;E|܋EUHH}H} u   HE u       UHSH   HXHPLHX t
HP u
   HXHuEHPHcEE    E       EHHXHP 8uqEU;EcEUpH`]HXA   HщHH`HPHHuEE;LuEEE;EbHĸ   [UHH H}UEH} ugHEHrEE   E    E    4EHHE :EuEU;EEE;EuEEE;E|ĸUHSHXH}HuHUME E    H} tH} t} 
     H} uHEHEE   HEHEHEHEE    EHHHEH} u
     EHHHEH} uHEHC     EHcHEо    HBEHcHEؾ    H+}u HE ȋUHEHZEUHMHEHHEȃ}    HEH+EEU9~E      E   EȍXMHUHEAHщھ    HAEHcHMHEHHM EHcHMHEHHN EUȍuHM؋UHEAHEHcHMHEHHM EHcHMHEHHM H} tHEHH} tHEHEHX[UHH H}ЈMEH} u   IHEHEE    $EHHE :EuEHHEUEE;E|Ը    UHH H}H} u   fHE u    THEHEEHHE <
uEHHE  ЋEHHE <uEHHE  벐    UHSHhH}uHUH} tH} u
    k  HE,   H;EE    :  EXHUHEA   Hщھ,   HHE-   H   HUHEA   HѺ   -   HHUHEA   HѺ   -   HHEHzHEHnHEHEHEHEE;E~sE;E}k} xeEEEHHHE    EE;E~<HEHHEHEE;E}} xEHHHE    EE;E    Hh[UHH}EH} u    UHEHEHEHEHE :EtHEHEHEHE HEuHEHE)UHH H}蹎A HUHEHHǸ    EEUHSHx  HH   HHHHQHEHM躘A H@   HPHH!H=  v1úA HHAؾ   HǸ    
9úɿA HHHIAؾ   HǸ    ۿA sc HHHEH} t4HUHHHHEHHEHHx  [UHSH(  HH       H4HH$tH   uc H H HH   HH H HHtH   uc HG A HHHHEH}   `  H       HxHUH   HH&  HH8H  HHHH<[uhHHH<]uIHHHHA      HuHHj|  <;m  <#^  <%6  HHA   HѺ       HH   A HlXHHA   HѺ HHHHHpHHHHHHCHH4H   A Hru-HHGHHHH)  @  H   A H(u`</uHH  A HHIȹwc    HǸ    HH  H    A H  wc Hwc </u/A HHIȹwc    HǸ    -A HHIȹwc    HǸ    nHH  HHA   HѺ   =   HH   )A H6XHHA   HѺ HHHIHH:HHHHHHHH<;tI<#t>HH_u+HHHHHq   u    \HEHEHEHA   50A HHH¾   @c     @c :    H(  [UHHpH}HuHUHE   RA Hq   HE   [A HSuHE    Hƿyc B HE   jA H#uHE@   Hƿyc QB HE   zA HuHE$   Hƿ8c !B HE   A H  HEHQ.#   HE   A Hu3HUHEHH^1  K  HUHEHH  3  HE
   A HAuHUHEHH2    HE   A HuHUHEHH     HE   A HuHUHEHH      HE   A HuHUHEHHL  nHMHE@   HH
  E}uHUHMHEHH  4A HUHH¾   @c     u@c        UHHH}HuHUHEHH  UHH H}HuH}    H}    8   8HEHE8       HH## Hu78   H## H## 8       HH## HE&H## HEHEH@0HEHEH@0HuHEHUHP0HEHM   HHi? HEHHHE    HHM? HEH@0    UHH H}HuH}    H}    (   0HEHE(       HH"# Hu7(    H"# H"# (       HH"# HE&H"# HEHEH@ HEHEH@ HuHEHUHP HEHM   HHa> HEHHHE   HHE> HEH@     UHH H}HuH}    H}      (HEHE      HH?+# Hu7  H)+# H"+#       HH	+# HE,H*# HEHEH   HEHEH   HuHEHUH   HEHM   HHP= HEH   HE   HH1= HEHǀ       UHH0H}HuHUH} tH} tH} u    kHB*# HEKHUHEHHu%HEH   HUHEHH<    "HEH   HEH} uHE      UHHA HǸ    :A A H)# HEH} tyHEH   HMA HHǸ    CHEH   HEHEHu$HEH   HMA HHǸ    諿HEH   Hu%A HǸ    艿UHH H}HuH}    H}      HEHE      HMH(# Hu7  wH(# H(#       HH(# HE,H(# HEHEH   HEHEH   HuHEHUH   HEHM   HH: HEH   HE   HH: HEHǀ       UHH0H}HuHUH} tH} tH} u    kH'# HEKHUHEHH u%HEH   HUHEHH&:    "HEH   HEH} uHE      UHSHhH}HuH}   H}   h   HEHEh       H蘽H# Hu7h   ¾H# H# h       HbH{# HE&Hn# HEHEH@`HEHEH@`HuHEHUHP`HEHM    HH#9 HEHH HE@   HH9 HEH@`    8~c tHE   Hƿ8~c 8    8~c 蠾HHEH葾HHH=     HE@       Hw,A HMHE@   HǸ    hHE   Hƿ8~c pu5   0A 8~c 8 HE   Hƿ8~c 8 
Hh[UHH5A ^H# HEHEHP HMHA HHǸ    費-HEH@`HEHEHP HMHA HHǸ    胻HEH@`HuUHHPA H{# HEHEHPHMHA HHǸ    6-HEH@0HEHEHPHMHA HHǸ    HEH@0HuUHHdA fH# HEHEHPHMHA HHǸ    躺-HEH@ HEHEHPHMHA HHǸ    苺HEH@ HuUHH0H}HuHUH} tH} tH} u    ^Hu# HEEHUHEHHu"HEHH HUHEHH56    HEH@`HEH} u    UHH0H}HuHUH} tH} tH} u    ^H# HEEHUHEHH|u"HEHHHUHEHH5    HEH@0HEH} u    UHH0  HHHH tH t
H u
    +  HH   HH5 H{A H肽E} tEHƄ H# HE   HEH谺E}~_EHUH<*uKEHcHMHHHTujHEHHHHHHw4    _HUHHHu)HEHHHHHH54    HEH@ HEH} 2    UHH0H}HuHUH}    H}   H}     HEHE      H螷H# Hu7  ȸH# H#       HhH# HE,H# HEHEH   HEHEH   HuHEHUH   HEH   HE   HH3 HEHM   HH3 HEH   HEغ   HH2 HEHǀ       UHH0H}HuHUHMH} tH} tH} tH} u
       H# HEiHUHEHH!uCHEH   HEHHu%HEH   HUHEHH)2    HEH   HEH} u    UHSHA JH3# HE>HEH   HUHEH   A HHǸ    莵HEH   HEH} uH[UHH H}HuH} tH} u    dH# HEKHEH   HEHHuHEH   HMHEHHHEH   HEH} u   UHH H}HuH}    H}    h   HEH}    HEh       H衴HEHM    HH0 HEHH HE@   HH0 HEH@`    H# HuHEH# ;H# HEHEH@`HEHEH@`HuHEHUHP`UHH0H}HuHUH} tH} tH} u    lH<# HESHUHEHH苴u0H} t"H} tHEHH HUHEHH/    HEH@`HEH} u    UHSH   HhH`HXE    H` t
HX u
      H`  HhHtHXH`A H/ HP# HE   HhHu!HUHhHH膳u       EHEHp } tA A HMA HpIId   H߸    qHXHpH`HH. EHEH@`HEH} GEHĨ   [UHH0H}HuHUH} tH} tH} u    oHR# HEVHUHEHH虲u0H} t"H} tHEHH HUHEHH-    HEH   HEH} u    UHH H}HuH}    H}    (  舲HEH}    HE(      H#HEHM    HH#- HEHH HE   HH- HEHǀ       HI# HuHEH9# DH0# HEHEH   HEHEH   HuHEHUH   UHHH# HEH#     #HEH   HEHEH&HEHEH} uÐUHH H}HE
    A Hu    R  E   HE   +A H足u    \  E   HE   8A H芳u    (  E   HE   KA H^u      E]HE
   [A H5u    i  E4hA HUHH¾   @c     ?@c E    } u# =   u
#   EUHH H}HuHE
    A H覲u    $R  E   HE   +A Hzu    r[  E   HE   8A HNu      E   HE   KA H"u      E]HE
   [A Hu    !j  E4A HUHH¾   @c     @c IE    } ur# =   u
a#   EUHHH}uA EHcHEHHǸ    袭   ÐUHH}E} u   L}~}u   9HEHEHE :Eu   HEH} tHE uָ    UHH`H}HuHUMLEHE    HE    E    E    E    H} t
HE     H} u
      H} tHEȾ    HHEE    HEHE4HE HEȉHE} t
EEEEHEHE uE)EEUEH} t	HEUH} tE;E~
      } u#EHcHMHEHH(       HEHEHEHE   HE HEȉH.E} tuHE < u} t+       EE   (HE ȺmA HEо   HǸ    lEHcHMHEHHsEHHEHEHEHEHEHE DHE     UHSH8H}HuHEH觮HEHEHEH} u
      HEHE  HE <%uXH HUHHHH %   t,H HUHHHH %   uHEHEHE  HEH <0uSHEH <at-HEH <dtHEH <AtHEH <DuHEHEHE   HEH </~'HEH <9HEH 0HEH &7HEH </~HEH <9HEH 0HEH ۩7HEHEHEHEHE bHE  H} tHUHEHH)HHHEHHEH8[UHH@H}HuHEHEfE  E HE    HE    sHE <%uQHEHMHE   HH迫HEHMغ   HH觭HEHEHEȈHEHEHEHEȈHEHEHE uÐUHH0H}HuUHE HEH 	ЈEHEH HEH 	ЈEHEH HEH 	ЈEE EHcHMHEHHQ$ UHSHHH}ȉuHUE HE  E    E       EHHE E؃}=uUHMHEHH   E؉ƿJc sHEH}    EHUѺJc (ӉHTЋE܉EEHD E}~E܍P)ȉE܃} u/UHMHEHHoE EӈEE҈EEшEЃEEHHE HEHVHH[UHH0H}HuU܉MHE HJc EHE HEH 	HJc E}~6HEH     HEH 	HJc =   E}~HEH ?HJc =   EE EHcHEHMHH," UHSH8H}؉uHUȉME    E    HE  sE    E    >MEHHEHcTEHHE t
EE
EHD E}~} tMԋUH]HEHHrEHHE yH8[ÐUHH@}HuЉŰEfEHEHHEH} u
             ƧE܃}u_fE EŤfEHEH@H  EHEH   HܥHMEܺ   HΉ&uEUHSH(H}؉uԉUЋEԉE}~	EԃEEHcHEؾ    H趣E    iH]Eй       HމHt<E<
uEHHEUE4EtEHHEUm	EEE;E|EH([UHSH   H($ E           HPHHHʉUE싅 P?HHHP Ѓ?)к   H׉HHHH	HcHP$E䃽$~$E䋅$HcH(    HSH8H蔧HH@E    [   XH@HPIй        HƉ蛢  H]ߋ        HމEHt^E<
u!} uEEHH(U߈   E<~'H8HEHH(U߈E mE   H0H触 u?H8H0HH蒥*f.tY   ޣ:H8H0HHS*f.tEE;EEH   [UHSH8H}ȉuĉUEĉE}~	EăEEHcHEȾ    HvEEfE fE E       H]E       Hމ譡Ht]E<
u} uEEHHEUSE~,EиtA HǸ    EHHEUm	EEE;EjEH8[UHH }HuHUEH։  HEH}    HE(  uHEH`  HE(  uHEH   HE(  uHEH?(  HE(  uHEH$  HE(  t HEH,  xA HHǸ    HEH'  HEH軠
A ?    UHH}HuA     UHH0}HuHUЋEH։,  HEH}    HE  uHEH/  HE  uHEH3  HE  uHE   A H8 HE   A H  HE  t;HEH  xA HHǸ    ʝA HUHHǸ    豝%A HUHHǸ    薝
@A 
    UHH }Hu        +  HEH}    HEǀ      HEǀ     HEǀ     HEHHHE  HH5 HEH    fA H HE  uHEH-  HE  uHEH&2  HE  t,HEH  xA HHǸ    菜
@A     UHSHH  HHHH'E       HHHHʉUEEP?HHHEЃ?)к   H׉HHHH	HcHE܃~E܋HcH    H觛HHHHHǅ    E    K  EXHHIй        HƉ  HM׋E   HΉIE} tWE<
uEHHU׈H   HH;EׄtEHHU׈m
       HH [ u?HHHH*f.t    ]   7:HHHH謞*f.t        EE;EHHH  [UHSH   HHH@HH tHH upA .      HEHhy>_A HPd   HǸ    蟙HPH      HEHyRA HPd   HǸ    QHPHEЉHEԉ>    8  话E} yf豜A HPd   HǸ    HPH2EЉEԉޘEԘEĉʘ      } M  EЉ謘Eĉ袘H@ tH@HY    EE    EE:EU)HcЋEHHH@EHΉ%E} ~EEE;E|Eԉ!} xE;E   } y:蔛A ]HPAؾd   HǸ    ΗHPHE;E}6(A ]MHPAؾd   HǸ    萗HPHE臗      EUA Ιm  Eԉ_EUEЅtoEо    tRƚXA HPd   HǸ    HPHGEЉEĉ   IEЉߖEătpEľ   舖tRNxA HPd   HǸ    莖HPHEЉ腖Eĉ{   їEĉgHHA    HA A A     .y4řA HPd   HǸ    HPHF   \Hĸ   [UHHH}HEHUHHPH}HuHUHMLEE    " ~R" HE؉" HEЉ" HEȉ" HEHE   c H] E       0   oHEE       E8c ujHEHƿ8c  E} uPHEPHE؉HEPHEȉHEP HEHEP$HEЉHEHHHE   HH }8uEd   YE   }~E   } JHEH=EUHH}   UHSH8H}HuH} tH} u
       HEȾA Hߔu   hHEA HÔtHEA H讔u9HuHMHUH]HEIHH uE%   u       H8[UHH EEEE1   HA E      E   |E   sE   jE   aE   XE   OE   FE	   =E
   4E   +E   "E   E   E   EEUHSH(}HuU܋EHcHE    H蟒E=}  =}9=j   =j=tg6  =y  =|        =~      t\   EHcHE྘A H'    EHcHEྨA H    EHcHEA H    EHcHEA H    EHcHEA H    EHcHE0A H mEHcHEPA H TEHcHEpA Hi ;EHcHEྐA HP "A EHc؋MHEHHǸ    $   H([UHSH8H}؉uHUH} t} ~H} u
       EHcHEؾ    H运E    E    )EHHE EEi   EE}~ыE%  )ЉEA EHc؋MHEHHǸ    WHEغ0       Hb   H8[UHSH  HHHE       HHp       H֏H`       H轏HP       H褏H@       H苏H0       HrH        HYHcH    H<H        H#8c I  HuHMHUH]HEIHH7EE=   t0=   =   t==   t;=   t=   t+E   "E   E   E   E   }   HHgHPHA   HѺ'  H HH-H@HA   HѺ'  HƷHPHEH@HESȺA H0   HǸ    ֍RȺA H    HǸ    讍H0H蟐EH H荐EEPEHHEȺA HMHE   HǸ    SHE0       H^EPEHHEкA HMHp   HǸ    Hp0       H
A ߏEEUEHHEغA HMH`   HǸ    褌H`0       H謻A HcH`HpHMHIIHHǸ    NE    E    E   EHH EE}~EЃ)ЉEA MHE   HǸ    UH   H  [ÐUHSH  ,H HE    X  ͌HEH} 4  HE     HEǀ      HEǀ  P   HEǀ(      HEǀ@      HEǀD      HEǀH      HEH      HHEH        HHEH        HΊHEH        H貊HEH        H薊HEH         HzHEH,        H^HEǀL      HEǀP      HEǀT      HEHX  @       HHEH  @       HHEH         HHEHX         HĉHEH          H訉HEH          H茉HEH  @       HpHEHǀ0      HEHǀ8      x"    A  E?72  HA     l      ԉH]"    A HˌuHE       H1"    A H蟌uHE       H"    A Hs   HE        Hչ" HUHJ   HH iH" HUH     HHa EH" HUH     HH= !HEǀ     HEǀH     H ,A HΉE}HEHHȲt/HEǀ(     HEH,     A H L  HEHHHEH  HEHA   HѺ   :   HHEH   2A HlEEpHEHXHA   H?B HİHHzH   4A Hu)HHA   HѺ?B    HoHEH  HA   HѺ   /   HHEH     2A H蠱E}    HEH  H   HH[ HEH  HA   H   :   H褬HHHU  HEH  HA   HѺ   :   H^HEH   7A HE} ~.HEH  HEHXEA   HѺ?B H3HEH  HltHEƀ  /HE   HEH  H<t/HEǀ(     HEH,     @A H'    HEH  H0HH uvA HEH  HH HUH0  HEH0  HtH`HE@  VHEǀ(     HEH,     A H  *HEǀ(     HEH,     A Hb  HEH  [UHHH}A 薄HEA HǸ    HE  A HǸ    ރHEH  A HǸ    HE  A HǸ    袃HEHP1A HHǸ    腃HEH  NA HHǸ    eHEH  kA HHǸ    EHEH  A HHǸ    %HEH  A HHǸ    HE@  A HǸ    HED  A HǸ    ɂHEH0  Ht+HEH0  H膂¸ A HǸ    萂
(A HEH8  Ht+HEH8  HA¸HA HǸ    K
pA 迂A 赂HE(  A HǸ    HEH,  A HHǸ    A mHEL  A HǸ    ρHEP  A HǸ    豁HET   A HǸ    蓁HEHX  HA HHǸ    sHEH  pA HHǸ    SHEH  A HHǸ    3HEHX  A HHǸ    HEH  A HHǸ    HEH  A HHǸ    ӀHEH  8A HHǸ    賀^A )    UHhA A HǸ    臀A A A A A HǸ    \A ҀA Ȁ A 辀PA 贀A 誀A 蠀@A 薀A 茀
   UHSH8H}HEH  HPHEH} uFHEǀ(     HEH  A HMH,  HH¾   H߸                 HUȉD  HEȋD  u/HEǀ(     HEH,     A H`     fE HEȋ  fEHEH@H  EHEH   HHMHEȋD     HΉu*HEǀ(     HEH,     A H      H8[UHSH(  HH      H|~H tt6H  9A H  4H  ?A H  H  EA H  HH  H  HH  H  JA H  HHHHD  H    Hމ襁H      H}HH  UA H  HǸ    p}HHAHHD  H    Hމ+H      H}H  _A H  HH~HHD  H    HމĀH uyH      H|H@  rA H  HǸ    |HHS~HHD  H    Hމ=H      H$|A HA   HǸ    |HH}HHD  H    HމH    pH  Hd}HH0  H   H2}Ht5HH^}HHD  H    HމHHH0  HRr    H(  [UHSHX  H{E      H{  H|H{D  H{   HEH{H|EЃ}u!H{A Hx~u.E    %}uH{A HQ~uE    H{  uUH{H{HH  H{HɩH{H{HH(  } 
E   E    H{H     A H}    H{  Hx{H{D  H{   HEH{H%H{HH{H虫E} uE    E    S  H  HzEԋU)ȉE}   ~E   EHcH{D  H    Hމ_zEЋEEԋUHH{HHs  EEUH{H  E;E   H{  HPzH{D  H{   HzEH{A H8|t\H{ǀ(     {{иA H{H,  AȉH¾   H߸    x       E;E}
} }    H  HyH{D  H      HމyEЋEEUH{H  } ~UHH{HH  } {    HX  [UHHH}HEH8  HtHEH8  HD{HED  #w    UHSHH}HEH  HܡuvA HEH  HHxHUH8  HEH8  HuAHEǀ(     HEH  A HMH,  HH¾   H߸    sv    H[UHH H}HuUHEH8  Hu#H" HEHcHE   Hz"HEH8  EHcHE   Hz    UHH0  HHH  H{wHHA   HѺ   :   H HHA   HѺ   :   HHHӜH   A Hyu*HHX  H@   HH0  Y  H   A Hxu*HH  H@   HH    H   $A Hxu*HH  H   HH    H   1A H<xu*HHX  H   HH[    H   8A Hwu*HH  H    HH  =  H
   JA Hwu*HH  H    HH     H   UA Hgwu*HH  H@   HH     H   cA H wuHHMvHL  tH   jA HvuHHvHP  9H   yA HvuHHuHT      UHH H}u    HEHE苀H     HEH8  H      ZsHã" HwHE苀P     EHxH*HHH	H*XHE苀P  *^* YEHE苀P    H
E
A EHǸ   qA UHǸ    qH" Hv    UHH }HuHE       rHEH}   HEǀ     HEǀ      HEǀ      HEǀ      HEHǀ      HEH        HqHE      HpHEH        HpHEH        Hpݡ"       E?7   HA     !      9qH¡" HUH    HHo     H" HUH    HHH  eHw" HE  HH+  HHEǀ     HEǀ     HEǀ      HEǀ     HEǀ      HMEA HΉpE}HEH  HqE} ~,EHUH  </uEHUHƄ   HEUHSH   HXHX  uIHXH  Ht0HXǀ     HXH    A H  HXHۙt0HXǀ     HXH    A H  HX     HX     HXH  H`HHn  ubx%   = @     HXǀ     HXH  A HXH  HH¾  H߸    
nJHXǀ     HXH  A HXH  HH¾  H߸    mHX     HXH`HH  ujA HXHHnHXH  HXH  HubHXǀ     HXH    A H,  0HXǀ     HXH    0A H      HĨ   [UHHH}WA -mHE  aA HǸ    lHE  ~A HǸ    qlHE  A HǸ    SlHUA HHǸ    :lHEH  A HHǸ    lHEH  A HHǸ    kHEH  Ht+HEH  Hk¸A HǸ    k
8A 5lXA +lHE  [A HǸ    kHEH  xA HHǸ    mkXA kA k    UH帘A A HǸ    7kA kA A A A HǸ    kA k A xkPA nkA dkA Zk
   kUHHH}HEH  HtHEH  Hn    UHSH  HH=  HHHHHHf  uRH u
    @  HHǀ     HHH    A H;    H u
      HP@       HiHH=   v7H  H
=A HP@   HǸ    i'HAA HP@   HǸ    i0t5      HHH9kHH </tgHHH  H$t#HDA HPHHǸ    hHHHHH            HHH  H轓tHOA HHǸ    hHHHHH  u.    gHXA HHǸ    HhHHH  HHѺ      HkE}       Hĸ  [UHH@H}HuHUHEHEHUHEHPHEH@ </t#HEH@ <\u3HEH@HEH@ </tHEH@ <\tHE   HEЉP0HEH   HEHP8HEHd   Ho  HEЉPHEHl   HQ  HEЉPHEHt   H3  HEЉPHEH|   H  HHEHP HEH      H   HUHB(HEHI     H   HUHB@HEHQ     H   HUHBHHEH      H   HEHE    E   HE HEHE} muHEH   HEE   HE H)EHE} muHEH   HEHEH;Eu       UHH}uHE    E    EEHHE E} t+}/~&}7 HEH    HEHH0HEEE;E|HEUHE}/~}7       UHSHA  H8H0H      HeH8HXH0H  xA HIؾ  HǸ    dH@       HdH8H@/   HNEEXH8H@H@A   Hщھ/   HH0H  Hku(H0H  H@HH(h   H0     H8@H8H@H0Hh  u
    6  ~A HHH-eHEH} ueH0ǀ     lg fHH8HPA H0H  IHH¾  H߸    c      E    F  H8H@ Eĉ)ȉE܋E= @  vE @  EԉE?E܉%  )ЉE} t   +EE܉EԋE܉EE܉EԋEԉEH0H  EHcH   H8fE} yWH0ǀ     Yf eH¸A H0H  HH¾  H߸    b      EEH0H  HLu(H0H  H@HH	f   H0  u~EHcHMH   HfE} yWH0ǀ     e dH¸A H0H  HH¾  H߸    a       H0H  H{u$H0H  H@HH8eu9H0  u'H" HEHcH   HeEEHcH8H@ H9H0  u,HEHeH0H8HHH     HA  [UHSH(  HHH  u
      H@HH@HH   u
       H  unH      H`HHXHH  xA HIؾ  HǸ    _HPHH	eHHHHH     H(  [UHSHX  HHH      Ha_HH  xA HHIؾ  HǸ    ;_H/   H豉EE      H      H^UHA HEHUHA      HeE    H  u< ~HHcEH  HcE} tjb t^Hǀ     a aHA HH  HIHH¾  H߸    ^    EE;E   HX  [UHH0H}HuHUHEPHEHHEHaHEPHEH8]    bHEHEH@(HEHUHEHH]   UHH   H    H¾A $c |u-(A H¾   @c     ]@c a    TH    H¾mA $c -u-A H¾   @c     \@c        UHSH   H   H¾A $c ˥u0(A H¾   @c     j\@c 谎    6  </   wc ^Hwc </u/A HHIȹwc    HǸ    \-A HHIȹwc    HǸ    [HH   HH  HH  u:A HHH¾   @c     {[@c     G  H    H¾mA $c 芤u0A H¾   @c     )[@c o      H       HZHH   HH  HH\H</uHH\HƄ H" /   HEE     Hj" HUA   /   Hۀ&A HHHIؾ   HǸ    .ZHH   HH  Eȃ;E   <.u50A HHH¾   @c     Y    e    HH  u5hA HHH¾   @c     Y      Y  EEȃ;EHH HHM  Eԋ%   = @     H       HYH   H¾A $c >HH݃   HHZHHHZHHH=  w7H   A HD  HH   HH&  " t0A HHH¾   @c     NX@c 蔊A HHHmYHEH}   H.   H蔂EHUHA   .   H^~H   Kc H軝Kc 謂t_" t:A HHH¾   @c     W@c ω@c ŉH   HƿKc d  ?" t5A HIйKc H¾   @c     %W@c k}" t
@A WHEHVH H։  Eԋ%   = @  4  } xH0H~H02" HX    [H9}5H HXH	XHEHUظnA HH¾   oc g[ɾ" t
A 裈    o" t
A 腈   w" t
A gH       HUMHUHHѺ     H<YE} ~$H" HEHcH   HOZHEHYtdA HHH¾   @c     wU      KA HHH¾   @c     EU       " t
HA u   H   [UHH H}H} u    4E    HEHVHEH} tE   HEH;YEUHH   HXE    H`HXHH  Ex%   = @  ux%   =   tE   EUHH   @c 蜆H        H#TH    H¾rA $c VH H~t"          P" t
A *<" tH HC" 3  H    Hƿkc    " t
A څ    l" t
A 輅    tA S   ÐUHH"        UHH}  H`@A    HHHHHf
HH
HHH A J   HHHHH
HHH@A "   HHHHH
HH
HHƅ
ƅ.ƅcƅoƅnƅtƅeƅnƅtƅ ƅ{ƅ
ƅ	ƅmƅaƅrƅgƅiƅnƅ-ƅtƅoƅpƅ:ƅ0ƅpƅxƅ;ƅ
ƅ}ƅ
ƅ
ƅ.ƅsƅtƅaƅtƅuƅsƅ ƅ{ƅ
ƅ	ƅpƅaƅdƅdƅiƅnƅgƅ-ƅtƅoƅpƅ:ƅ9ƅpƅxƅ;ƅ
ƅ}ƅ
H``A G   HHHHH
HHf
HHH`A _  HHHHH
HHH A    HHHHH
HH
HHH A    HHHHHf
HH
HHHP A    HHHHH
HHHA 8   HHHHHf
HHHA z   HHHHHf
HH
HHH@A Z!  HHrRƅGƅIƅFƅ8ƅ9ƅaƅƅ ƅƅ ƅƅ ƅ ƅƅƅƅƅƅƅƅƅƅƅƅƅƅƅƅƅƅƅƅ ƅƅƅƅƅƅƅƅƅ	ƅ
ƅ ƅ ƅ ƅ ƅ ƅ ƅ ƅ ƅ ƅ ƅ ƅ ƅ ƅ ƅ ƅ ƅ ƅ ƅ!ƅƅƅ  ƅ! ƅ" ƅ# ƅ$ ƅ%,ƅ& ƅ' ƅ( ƅ) ƅ*ƅ+ ƅ,ƅ- ƅ. ƅ/ƅ0
ƅ1ƅ2!ƅ3@ƅ4ƅ58ƅ6ƅ7ƅ8ƅ9ƅ:ƅ; ƅ<;H B V  HHHHH
HHH'B   HHHHH
HHf
HHH@4B :   HHHHH
HH
HHH 6B   HHHHHf
HHHpTB o   HHHHH
HHf
HHH `XB i   HHHHH
HHf
HH
HHH|" H`IH   A A   H|" H IHT  A A   H|" HIH  A A   Ha|" HIH>   A A   H9|" H`IH>  A A g  H|" H`IH
  A A ?  H{" H IHU  A A   H{" HIH   A A   H{" HPIH   A %A   Hq{" HIH  A .A   HI{" HIH  A 6A w  H!{" H@IHZ!  A @A O  Hz" HIH]   A KA '  Hz" H IH
  A ]A   Hz" HIH  A iA   Hz" HIH  A uA   HYz" HIH  A A   H1z" HpIH~  A A _  H	z" H IHO  A A 7  HE    Hy" HE/HEHHƿDc Iu
HEHEHEH@`HEH} uH}    HE   Kc HHE@Py" i" t
A Cz    BaK" t
A %z   ,iHy" HHE@PHcHEH@X   HBL" u>F"   A Dc H¾   @c     kG@c y    $A y   UHH@H}HuUHMLEȿh   THHEHEh       HFHkx" Hu7h   $HHUx" HNx" h       HFH5x" HE&H(x" HEHEH@`HEHEH@`HuHEHUHP`HEHHHE@   HH  HEHM   HHi  HEU܉PPEHHzGHHEHPXEHcHEH@XHMHHBIHEH@`    UHH0H}HuHUHMH\w" HEbHEHPHEHHFu;HEPPHE؉HEHPXHEHHMHE   HH     HEH@`HEH} u    ÐUHSH  Ha" HG  HQ" &   HoEE      H       HEEXH" HA   Hщھ&   HvkH       HDHHA   HѺ   =   H4kH       HDHHA   HѺ   =   HjHHHH`HHHHGHHHHEE;E   H  [UHSH8  H"     H wB R  HHFHpB   HHHHH  B   HHHHH
HH
HHHpwB   HHHHH
HH
HHHph@B   HHHHH[@C   HHHHHf
HH
HHh   DHOt" HHt" H@`    H9t" @PR  H+t" H HPX[B Ht"    HHF[B Hs" HJ?   HHFHs" h   CHC`Hs" H@`H@`    Hs" H@`@P  Hs" H@`HpHPX[B Hs" H@`   HHDF[B Hhs" HR`HJ?   HH FHIs" HX`h   BHC`H0s" H@`H@`H@`    Hs" H@`H@`@Pl  Hs" H@`H@`H HPX[B Hr" H@`H@`   HHE[B Hr" HR`HR`HJ?   HHtEHr" H@`HX`h   KBHC`Hr" H@`H@`H@`H@`    Her" H@`H@`H@`@P  HKr" H@`H@`H@`HpwHPX[B H(r" H@`H@`H@`   HHD[B H r" HR`HR`HR`HJ?   HHDHq" H@`H@`HX`h   AHC`Hq" H@`H@`H@`H@`H@`    Hq" H@`H@`H@`H@`@P  H{q" H@`H@`H@`H@`HphHPX[B HTq" H@`H@`H@`H@`   HHD \B H(q" HR`HR`HR`HR`HJ?   HHCHp" H@`H@`H@`HX`h   @HC`Hp" H@`H@`H@`H@`H@`H@`    Hp" H@`H@`H@`H@`H@`@P  Hp" H@`H@`H@`H@`H@`H[HPX[B Hhp" H@`H@`H@`H@`H@`   HHC
\B H8p" HR`HR`HR`HR`HR`HJ?   HHBH       Hw>H   Hƿ\B ]}H\B H*Bu(    Y  H@   [B H;    H%\B HAu(    \  H@   [B H     H*\B HAu(    /  H@   [B H軹     H3\B HjAu%      H@    \B H{  `H8\B H-Au%    {]  H@   
\B H>  #    -  H@   [B H  s" t
A\B Mokc gtk   \\B _c      e\B cc ϸ     \B [c 軸      V    ^Hn" HHHf  d   \\B _c x     e\B cc d     \B [c P  ʕ" 3      U    ]\B <" t
\B \n   H8  [UHSHc  E      \B \B g  
   \B \B g  yc =¾yc ]B g  yc }=¾yc ]B eg  8~c b=¾8~c *]B Jg  H0   H荍H0H.=H0Hƿ9]B g  \c =¾\c G]B f  E    H0@      H:H0   H¾S]B Z]B  H0HetE
H0H      H¾^]B Z]B H0H   H~eu/H0H   HPHHk  E}u
EE}   ǅ  ǅ   ǅ  E    H0H      H¾g]B Z]B FH0H,     H¾q]B Z]B "H0H0     H¾|]B Z]B H0H (     H¾]B Z]B ڂu$H0H (     H¾]B Z]B 貂H0H      H¾]B Z]B 莂H0H      H¾]B Z]B jH0H      H¾]B Z]B FH0H4     H¾]B Z]B "H0H      H¾]B Z]B H0H       H¾]B Z]B ځH0H $     H¾]B Z]B 趁H0       HL8H0   H¾]B Z]B H0HcuH0H;H0       H7H0   H¾]B Z]B  H0HbuH0H:H0       H7H0   H¾]B Z]B H0H`buH0H^:H0        Hel  uEEЅtx:5   \B  ^B b  8E       ^B  ^B b  E       ^B  ^B b  } ?  H0H0^B    Hrh  E} d  H0H  H0H   Hka  H0H   H0   HHW  H0H0HD$    HD$    H$    A    A           Hh  H0H5EH0H8h} u@D" tj0^B H0HP   HǸ    5HPHg4X^B H0HP   HǸ    }5HPHgН" t^B gH0HgH0^B HG:HEH} u@E    ^B H0HP   HǸ     5HPHAg  H !       H4H        H4E    " t^B fH        Hp4H        HW4H        H>4HEHR8  HUH       H聗H  v" tH HKfH H A   HѺ   :   HPZH    _B H^XH H A   HѺ H4]H HZH HZH H[\H HL\H HZH HZH 	_B H6u*H H !   HH  E   [H _B H6;H H4HH H4HHH=  	H H]uH    _B H  H H    HH  " t
(_B d}uc   \B I_B ]  H H3H HƿY_B ]  H H3H Hƿq_B ]     E        _B Y_B ]      _B q_B }]     ^B I_B i]  C   _B Y_B S]     _B q_B ?]     ^B I_B +]  E    H        H"1H       H	1HHHHHIHH EE  /  H    _B H[  H    _B HB  H    _B H)  H     `B H  H    ,`B H  H    F`B Hެ  H    Q`B HŬ  H    ]`B H謬  H    _B H蓬  H    h`B Hz  H    `B Ha  H0       H/`B H0   HǸ    |/H0H    HH  H    `B H  H    F`B Hԫ  H    _B H軫  H    `B H被  H    `B H艫  H0       H.=   u9H0   `B H說  H0H    HH,  B`B H0   HǸ    ^.H0H    HH  H    `B HϪ  H    F`B H趪  H    _B H蝪  H    `B H脪  H    `B Hk  H0       H-=   tL=   =      =   t   =   tB=   tV   H0   aB H[  jH0   	aB H@  OH0   aB H%  4H0   aB H
  H0   *aB H  H0H    HHq  H    `B HX  H    F`B H?  H    _B H&  H    8aB H  H    `B H  HH    HH֨  H    `B H轨  H    F`B H褨  H    eaB H苨  H    qaB Hr     \B {aB W     aB aB {W        ^B {aB bW     aB aB NW  H    aB H  k   ^B {aB W  H0E   HΉTH0H,H0HƿaB V  H    aB H藧  H H,H HƿaB V  }u   \B aB V     ^B aB sV     Hc  [UHSH  E   H        HO*H        H6*H        H*H        H*H!       H)HI       H)HI!       H)H`I!       H)HIA       H)Hr        Hn)HR        HU)HPN       H<)HPJ       H#)H    HƿaB 	hH    HƿaB gH    aB H*uE   E    H @      H(H    H¾S]B Z]B qH HStE
H        H_(H H      H¾^]B Z]B qH H   H%Su/H H   HPRHH  E؃}u
EE}   ǅ  ǅ   ǅ  H H      H¾g]B Z]B pH H,     H¾q]B Z]B pH H0     H¾|]B Z]B pH H (     H¾]B Z]B pu$H H (     H¾]B Z]B `pH H      H¾]B Z]B <pH H      H¾]B Z]B pH H      H¾]B Z]B oH H4     H¾]B Z]B oH H      H¾]B Z]B oH H       H¾]B Z]B oH H $     H¾]B Z]B doH        H%H    H¾]B Z]B -oH HPuH H(H        H%H    H¾]B Z]B nH HmPuH Hk(H        H<%H    H¾]B Z]B onH HPuH H(H         HZ  uEH H&H HƿaB P  }   }  H HPRHH蓧  E؃} t8%( L'HbB H    HǸ    [$E    >hR%   =   t,bB H H    HǸ    $E    }  wc %Hwc </u//bB H H Iȹwc    HǸ    #-KbB H H Iȹwc    HǸ    #HRHf%HH HT%HHH=?  w7H HR    HH  HR    _B H՟  " t
hbB iU{" tH HPUH ^B H'HEE    H} z  E    j& %HxbB H    HǸ    "T  HUH   H(    HRHK$HHH9$HHH=?  wEH t7HHR    HHŞ  HR    _B H謞  HHA   HѺ   :   HYHH   _B HLXHHA   HѺ H=KHHHHHHHHdJHHUJHHHHHHHbB H$u#HHI   HH     HbB H$u HHI!   HH֜  qHbB H$u HH`I!   HH螜  9HbB HP$u!HHIA   HHf  HEH_$HIH'Ku&HIHKuH`IHKt E    H    bB H  }  wc !Hwc </u5bB H H Awc Iȹwc    HǸ    3cB H H Awc Iȹwc    HǸ    cHRH4!HH H"!HHH=?  wPHR    _B H  H HR    HH裛  HR    _B H芛  D" t
:cB Q0" tH HQH ^B H#HEE    H}   E    " F!HOcB H    HǸ    U   HUH   Hݍ     HHMHhcB H!uE   HRHHHHHHH=?  wHH t:HHR    HHL  HR    _B H3  HEH!$} u&}u E    H    cB HP  }  E    cB H`IH Iȹwc    HǸ    
H H H    HN  u%E    H    dB H̘    HRHHH H~HHH=?  wPHR    _B H  H HR    HH  HR    _B H  " t
(dB zN" tH HaNH Hg|  H H   HFuzH H   H    HH̗  H H HD$    HD$    H$    A    A           H[N  H HH ^B Hk HEH} u)E    H    @dB H8  X  H       HH       HH       HHEH   HUH      H~H   HHA   HѺ   :   H@H`dB H5uE   HRH+HHHHHH=?  H HHR    HH蝖  HR    _B H脖  } u3E    H HDuH    dB H袕  }  HIHpD  HRHJHH=?  wHR    dB H  H        Hwc Hwc </ufdB HIH`IHPNIIȹwc    HǸ    dB HIHPJIȹwc    HǸ    ddB HIH`IHPNIIȹwc    HǸ    veB HIHPJIȹwc    HǸ    IHRHHHPNHHHH=?  wPHR    eB H觔  HPNHR    HH艔  HR    _B Hp  HRHHHPJHHHH=?  wPHR    #eB H&  HPJHR    HH  HR    _B H  HPJHPNHHH  u E    H    0eB H  }8  HRHHÿuc HH*H=?  wKHR    `eB Hc  HR    uc HJ  HR    _B H1  eB uc HHHEH} tkHEHƿ
   eB HIHEHHǸ    eB HIHEHHǸ    HEH\HEH 6E     HeB H    HǸ    }   eB HIHIH Iؾ   HǸ    H H`H HƿUfB CA  HRH;H4H=?     HR    `fB Hڑ     H H@tH    fB H	  fB H H    HǸ    H HH HƿUfB @     aB UfB z@  E    H H ^B    H?F  uH    dB He    |" t
gB F|" tH H{FH Ht  H H   H>  H H   H    HH  H H HD$    HD$    H$    A    A           HqF  H H5EH HE} u@{" tj0^B H H    HǸ    >H HE4X^B H H    HǸ    H HIEH ^B HHEH} uE    I  H!       HH      HH       HmH       HTH       H;HEHO  HUH      H~uH  HHA   HѺ   :   Hf8H   _B H<XHHA   HѺ HJ;HH 9HH8HHq:HHb:HH8HH8H	_B Hu*HH!   HH  E   tH_B HTHHHHHHHAH=  "H  0gB HH  H        HwH HA   HѺ   ,   H6H H  HH  H  9gB Hό  H        HH HA   HѺ   ,   Hc6H H  HHo  H  9gB HV  H        HH HA   HѺ   ,   H5H H  HH  H  PgB H݋  HH:t`gB gB :  ~HHHHƿgB :  WgB H    HǸ    H HH HƿUfB r:  XhB gB ^:  HRHe9t   aB hB 7:  JhB HRHr    HǸ    7HrHHrHƿhB 9     H  [UHSH(  E    H       HH @      HH        HH        H|H        HcH        HJH!       H1H        HH       HH       HHP       HH@`       HH`!       HH @       Hǅ  ǅ   ǅ  E    H   fB H\  E    E    E    E    E    E   H   HƿaB  KH   aB H   E   H       HH   HƿiB JH   !iB Hu	E   JH   3iB Hu	E   $H   BiB HruE       Z} tvH    HƿTiB JH       H
H   H¾S]B Z]B (THH HHt'E   H    H¾S]B Z]B SH H5)  wc bHwc </t/[iB H H Iȹwc    HǸ    F
-fiB H H Iȹwc    HǸ    
piB H H   HǸ    	HH`HHٌ  Eă} t'iB HH   HǸ    	FHH*=Eă} t	E   %iB HH   HǸ    c	} uE    E    } u.H H      H¾^]B Z]B fRu%} tH H      Hƿ^]B V} u.H H      H¾g]B Z]B Ru%} tH H      Hƿg]B V} u.H H,     H¾q]B Z]B Qu%} tH H,     Hƿq]B -V} u.H H0     H¾|]B Z]B mQu%} tH H0     Hƿ|]B U} t!H H (     Hƿ]B UuH H (     H¾]B Z]B PuMH H (     H¾]B Z]B Pu%} tH H (     Hƿ]B >U} u.H H      H¾]B Z]B ~Pu%} tH H      Hƿ]B T} u.H H      H¾]B Z]B +Pu%} tH H      Hƿ]B T} u6H H      H¾]B Z]B O   }    H H      Hƿ]B =T!H H   H/HƄ  H H   H1u%H H   HH </t} u6H H4     H¾]B Z]B O   }    H H4     Hƿ]B S!H H4  HsHƄ H H4  Ha0u%H H4  H9H</t} u.H H      H¾]B Z]B `Nu%} tH H      Hƿ]B R} u.H H       H¾]B Z]B Nu%} tH H       Hƿ]B zR} u.H H $     H¾]B Z]B Mu%} tH H $     Hƿ]B 'RH       H'} u(H   H¾]B Z]B TMu} tH   Hƿ]B QHH.uHHH       H} u(H   H¾]B Z]B Lu} tH   Hƿ]B ?QHHH.uHHFH       H} u(H   H¾]B Z]B DLu} tH   Hƿ]B PHH-uHHH       H} u(H   H¾jB Z]B Ku} tH   HƿjB /PHH8-uHH6EH H-u}H    HƿjB OH    HƿjB OH    Hƿ)jB OH    Hƿ5jB OH!   HƿAjB zO}   }   wc eHwc </u%MjB Hwc    HǸ    S#hjB Hwc    HǸ    .wc H`HH  Eă} r  jB HHH3HEH}   jB HUHѺ      HfjB HUHѺ      HHjB H HEHHǸ    XjB H H   HEHHǸ    1H H (  H;+u'jB H H (  HEHHǸ    H H   H*u'jB H H   HEHHǸ    H H   H*u'kB H H   HEHHǸ    qH H   H{*u'kB H H   HEHHǸ    1H H   H;*u'3kB H H   HEHHǸ    H H   H)u'JkB H H   HEHHǸ    H H4  H)u'akB H H4  HEHHǸ    qH H    H{)u'xkB H H    HEHHǸ    1H H $  H;)u'kB H H $  HEHHǸ    =  tkB HEHHǸ    =  tkB HEHHǸ    tkB HEHHǸ    oEtUkB HEHHǸ    LH H,  HV(u'lB H H,  HEHHǸ    H H0  H(u'lB H H0  HEHHǸ    0lB HUHѺ      H~HEH nE    d  HJlB H   HǸ    6E    ,  SH`lB H   HǸ    b   aB UfB '(     aB hB (  H     lB HƿlB 7  H     lB HƿlB m7     aB lB '  E  } 
  H H      HƿlB :H H       +   H*H   HƿlB s:t%HH H (     HHcw  H   HƿlB 1:t%HH H      HH!w  H   HƿlB 9t%HH H      HHv  H   HƿlB 9   HH H      HHv  H H       +   H)!H H   H;HƄ  H H   H)%u%H H   HH </tH   HƿlB 8   HH H4     HHu  H H4      +   H(!H H4  HuHƄ H H4  Hc$u%H H4  H;H</tH   HƿlB !8t%HH H      HHu  H   HƿmB 7t%HH H       HHt  H   HƿmB 7t%HH H $     HHt  H   HƿmB [7t%HH H0     HHKt  H   Hƿ!mB 7t(HH#uHHH   Hƿ+mB 6t(HH"uHHH   Hƿ3mB 6t(HH|"uHHzHH    HH|,  E} t7~=  ~ E    H   @mB Hs  } t8~=    ~ E    H   mB Hr  } !  wc Hwc </u%MjB Hwc    HǸ    #hjB Hwc    HǸ    mwc H`HHVy  Eă} r  jB HHHrHEH}   jB HUHѺ      HjB HUHѺ      HjB H HEHHǸ    jB H H   HEHHǸ    pH H (  Hz u'jB H H (  HEHHǸ    0H H   H: u'jB H H   HEHHǸ    H H   Hu'kB H H   HEHHǸ    H H   Hu'kB H H   HEHHǸ    pH H   Hzu'3kB H H   HEHHǸ    0H H   H:u'JkB H H   HEHHǸ    H H4  Hu'akB H H4  HEHHǸ    H H    Hu'xkB H H    HEHHǸ    pH H $  Hzu'kB H H $  HEHHǸ    0=  tkB HEHHǸ    =  tkB HEHHǸ    tkB HEHHǸ    EtUkB HEHHǸ    H H,  Hu'lB H H,  HEHHǸ    KH H0  HUu'lB H H0  HEHHǸ    0lB HUHѺ      HHEH1bE     HJlB H   HǸ    *E    `lB Hwc    HǸ    H     lB HƿlB ,  H     lB HƿlB ,  } t*mB UfB 0  8nB lB   >fB HH   HǸ    HHƿUfB      aB hB   J  }   H    HƿZnB /H     +   HH H}HƄ  H HquH HOH </tH   HƿlB 5/   HH H4     HH!l  H H4      +   H!H H4  HHƄ H H4  Hu%H H4  HH</tH    Hƿ)jB o.H    Hƿ5jB V.H    HƿjB =.H    HƿAjB $.HH    HH=$  E} tMH   HƿenB <t0HH HH A   HHc'  E}   snB  H   nB Huƅ  H HN  E   b  H3      HEnB MH   HǸ    4H3H  HH;  H H H H H3HD$    H H\$H H$II  H)  H H H H H3HD$    H H\$H H$II  H?   H3H3HH@`H!HHH=?  wPH@`   _B Hi  H3H@`   HHi  H@`   _B Hi  CU" tH3HH H   HuzH H   H   HHh  H HHD$    HD$    H$    A    A           H!  HHH3^B H1HEH}       H <       HHUH <      H;OH   H <HHH@`HHHH=?  wTH < tFH <HH <H@`   HH
h  H@`   _B Hg  HEHM(#E    H   nB Hg  E}	} t@H`H !   HH  E} uH   nB Hf  } tL0oB H`H   HǸ    HH_HHƿUfB B  JfB HH   HǸ    BHHHHƿUfB   H@`Ht   aB hB   JhB H@`HP   HǸ    HPHHPHƿhB   H     lB HƿlB $  H     lB HƿlB $  8nB lB 3        aB UfB      aB hB   H Ht*   aB lB      aB lB   <H     lB HƿlB A$  H     lB HƿlB #$     aB lB y  H H   HkH H   HοoB G  H H   H9H H   HοoB   H H4  HH H4  HοoB   H H   HH H   HοoB   H H   HH H   HοoB   H H (  HqH H (  HοoB M  H H   H?H H   Hο pB   H H    HH H    HοpB   H H $  HH H $  HοpB   H H0  HH H0  Hο!pB   `B H   HǸ    HHYHHƿ-pB <  `B H   HǸ    ?HHHHƿ9pB   `B H   HǸ    HHHHƿFpB   H HH HƿPpB   H H}H Hƿ^pB `  H HXH HƿlpB ;  H H3H Hƿ{pB   H HH HƿpB   HnB Hu*   pB pB      aB pB   (   aB pB      pB pB   H @H    HH1H @HƿpB P     H(  [UHSH  E    HE       H/HE       HH       H H   fB H_  HE   HƿpB "HE   HƿpB "HEHb  HEHN  HUHEHH`  wc ^Hwc </u%pB Hwc    HǸ    L#pB Hwc    HǸ    'HHHHf  E}    jB HHH*HEH}    jB HUHѺ      H]qB HUHѺ	      H?qB HUHѺ      H!9qB HUHEHHǸ    4HEHxE       HúQqB HHIؾ   HǸ    T HúQqB HHIؾ   HǸ    H   eqB H]  }uqB UfB |  `fB HH   HǸ    |HHMHHƿUfB 0     aB UfB      H  [UHHH  H`       HH`@      HH`       HH`   qB H\  H`   H¾S]B Z]B )H`H   wc dHwc </t/[iB H`H`Iȹwc    HǸ    H-fiB H`H`Iȹwc    HǸ    H`H`HѺgsB HƿrsB e  H`HƿrsB      UHSHX  H0        HHP       HHE       HpHP       HW0   HEE   E    E    E    H0    HƿzsB HP   HƿsB HE    HƿsB H0   aB H  HP8c H  HUHPHHI]  Eԃ}   H}   HE@  wc QHwc </u%sB H0wc    HǸ    ?#sB H0wc    HǸ    wc HHHa  EЃ}    jB H0HHHEH} tmjB HUHѺ      HVsB HUHѺ      H8sB HPHEHHǸ    HHEH   E     "HJlB H0   HǸ    1}E     H`lB H0   HǸ    EE    HPEԺ@   HΉIsB HPH0   HǸ    }u9HP$   Hƿ8c X     sB kc X  6" 3  JtB H0H0   HǸ    NH0HH0HƿUfB   HE   aB HuEhtB H0   HǸ    H0HH0HƿUfB      aB UfB   HuHMHUH]HEIHHEE܃} tCEHP@   HΉHtB HPHP   HǸ    M  E̅u#uB HP   HǸ    #  HP@       HHP   vuB HW  HP   uB H{W  HP   uB HbW  sB HP8c @   HǸ    HPHP   HH!W  HP   `B HW  HP   uB HV  HP@       HHP   vuB HV  HP   uB HV  HP   uB HV  M`B HP@   HǸ    HPHP   HHLV  HP   `B H3V  HP   uB HV  HP@       HIHP   vuB HU  HP   uB HU  HP   uB HU  M̺`B HP@   HǸ    HPHP   HHwU  HP   `B H^U  HP   uB HEU  HP@       HtE=   tL=   =      =   t   =   tB=   tV   HP@   aB H8T  jHP@   	aB HT  OHP@   aB HT  4HP@   aB HS  HP@   *aB HS  HP   vuB HST  HP   vB H:T  HP   uB H!T  HPHP   HHT  HP   `B HS  HP   uB HS  HP   vuB HS  HP   @vB HS  HP   uB HS  HMHP   HHkS  HP   `B HRS  HP   uB H9S  HPHbHPHƿlvB E  HPH=HPHƿaB    8c ¾8c }vB   HEH   HX  [UHH H}HuHEHE1HEHPHEHHu
HEH@XHEH@`HEH} uȸ    UHSH8H}HuHEHE'HEHPHEHHFtHEH@`HEH} uH} .  HEЋ@PEHpC" HEHE@HEHEH@PHEH} uE܃HHMHEH} u
       E܃HcHE    HE܃HcHEHHXHEHHP  HB" HEGHEH@@Ht.HEHuHEHP@H]MHEHHQHEH@PHEH} uH" HHEH=HHEHپ   HHEH
       H8[UHH0H}HuUܿX   :HEHEX       HH	B" Hu7X   
HA" HA" X       HHA" HE&HA" HEHEH@PHEHEH@PHuHEHUHPPHEHM@   HHkO  HEHHHEHP@}uHEHEHEU܉PHHEH@P       UHSHvB HǸ    vB UvB KHA" HEH} t{HEHHHEHP@H]踷vB HHǸ    DHEH@PHEHEHu(HEHHHEHP@H]踷vB HHǸ    KHEH@PHuvB HǸ    ,H[UHSHX  HHvB jH t& ~HcH    HHH^B    H  u
      HH2  HH   HuzHH   H   HHwM  HHHD$    HD$    H$    A    A           H  HHHH[H^B HHEH} u      H       HH       HH       HHEHC  HUH      H3H   HHA   HѺ   :   HH   _B H8XHHA   HѺ HHHKHH<HHHHHHHH H	_B HSH t+ ~"HcHHHHNK     	    HX  [UHH0H}HuкvB HEHHHHEH} u
       vB HEHHHEH} ui       HEHEHEHt    gHEHuEHUH։BHEHft    .HEHntHEHnHEHb   UHSHHH}uHUHMH} t} ~H} u
       HEH   Ht
       EHcHE    HEHcHEH   HEHHI  EHcHUHEHMHL$HD$    H$    A    A        HH	  HU؋]HEHMHL$HD$    H$    A    A        H   HH[UHSHHH}؉uHUHMLELMH} EH} t} 
      HEH   UHE؉HھoB HHEH   UHE؉HھoB HaHEH4  UHE؉HھoB H=HEH   UHE؉HھoB HHEH (  UHE؉HھoB HHEH   UHE؉HھoB HHEH   UHE؉Hھ pB HHEH    UHE؉HھpB HHEH $  UHE؉HھpB He}    MHUHEؾPpB HCMHUHEؾ^pB H+UHE؉HUlpB HMHUHEؾ{pB HMHUHEؾpB HMHUHEؾvB HMHU HEؾvB H   HH[UHSH8  HHHHH,  H,  HH,  ,   HEE     HH,  HEA   Hщ¾,   HHHH   ^]B Hu"HH   H  +  H	   ]B Hu"HH (  H    H
   ]B HZu"HH   Hp    H
   ]B Hu"HH   H1`  n  H   ]B Hu"HH   H!  /  H
   ]B Hu"HH4  H      H   ]B H^u"HH   Ht      H	   ]B HuHH    H5thyH
   ]B HuHH $  Ht0AH	   ]B HuH,  ~EE;EZE;E~   MH t>H t4HwB HHHIHHǸ    p    H8  [UHSH  HHH@H8H0L(E    H@,   HEE      HUH@A   ,   H_HH;H8HHHHD$    HD$    H$    A    A       HgHHju"HHPHH^I  E} uEE;E@E;E~   MH0 t>H( t40HwB HH(H0AHHǸ        H  [UHSH  H8H0H8 t
H0 u
    	  wB H0H8HIؾ   HǸ    uHH@HH\H     HpHEH}    vB HHHgHEH} t|HEHEH;HEH} tTHMHUHEо   HGHEHEH;Es!HEHUH  HEHHEHEH|HEH    H  [UHH0H}HuHUHME    HUHEHHHEH} t'HMHEHHEHEH} u@HEH
tHE   aB HHMHEHHEUHSHX  HHHHLLH{   H"EE      E   H   {   HEH   }   HE}   E;E  HU]HA   HY  H   [   H/EH   ]   HE}   E;Ex  EU)ȃHcЋEHcHHȾoB HKuHH   HaE(  EU)ȃHcЋEHcHHȾoB HuHH   HE  EU)ȃHcЋEHcHHȾoB HuHH4  HE  EU)ȃHcЋEHcHHȾoB H[uHH   HqE8  EU)ȃHcЋEHcHHȾoB HuHH (  H!E  EU)ȃHcЋEHcHHȾoB HuHH   HE  EU)ȃHcЋEHcHHȾ pB HkuHH   HEH  EU)ȃHcЋEHcHHȾpB HuHH    H1E  EU)ȃHcЋEHcHHȾpB HuHH $  HE  EU)ȃHcЋEHcHHȾPpB H{uHHE^  EU)ȃHcЋEHcHHȾ^pB H1uHHME  EU)ȃHcЋEHcHHȾlpB HuH}	E   EU)ȃHcЋEHcHHȾ{pB HuHEHE   EU)ȃHcЋEHcHHȾpB H\uHHxEBEU)ȃHcЋEHcHHȾvB HuHE H4E} t+HHHѺwB HHbE܋U)ȍXHHA   Hщھ   Hu)HHHHHHzEE;EHX  [ÐUHSHH  HE    E    %" t
C H   H¾C $c tHH4EH"&" H   &" HH:HEH} u(C E      %" HcH%" HEHH8  H%"   UHEЉѺ   HƿbC W'  EHEHh} u
      E؉    cC sC '  u
      H$" HAu,H$" U؉Ѻ   HƿC &  u
    F  H$" Hu,H$" U؉Ѻ   HƿC &  u
      Ht$" Hu,Ha$" U؉Ѻ   HƿC b&  u
      H=$" Hu,H*$" U؉Ѻ   HƿC #&  u
      H$" HEu,H#" U؉Ѻ   HƿC %  u
    J  H#" Hu,H#" U؉Ѻ   HƿC %  u
      H#" Hu,H#" U؉Ѻ   HƿC f%  u
      Hi#" Hu,HV#" U؉Ѻ   HƿC '%  u
      H2#" HIu,H#" U؉Ѻ   HƿC $  u
    N  H"" H
u,H"" U؉Ѻ   HƿC $  u
      H"" Hu,H"" U؉Ѻ   HƿC j$  u
      $c u'E؉    $c C 5$  u
      H`"" HWu,HM"" U؉Ѻ   Hƿ)C #  u
    \  H!" Hu,H!" U؉Ѻ   Hƿ3C #  u
      H       HиR"" @C H   HǸ    輸HHuUHѺ    HƿCC ;#  H       Hbwc HHwc </u%OC Hwc    HǸ    6#^C Hwc    HǸ    HHuUHѺ    HƿnC "  HI!" H   H9!" HE   H   {C H3  HMH   HH44  H_   -   HHHHEH   UHѺ    HH!  HEH   HEHEH   HZc tMHH譹舸H¸C AA؉H¾@   c     迶5 " / " ) " # " Ac c c c c  Ẽ} u,"       C @c U2      g  H       HHE̺   HΉ8#C HHH¾   @c           c t-c @   c %E؉    c C V   "    H!" Hx   E   H   H¾C $c tHHIE" ;E~E"   " C MAȉH¾   @c     @c M    E؉K"  u       HH  [UHHD  H`@      H螴ǅ  ǅ   ǅ   ǅ    " t
0C H`H ,  HLtGH`H ,  @   c HB0  H`H ,  H`H@,  @   H"H`   H¾SC $c 5u0`C H¾   @c     Գ@c       ǅ   H`H`   HH/  H`   H¾C $c t%H`H`H      HHY/  H`   H¾C $c tt%H`H`H       HH/  H`   H¾C $c -t%H`H`H $     HH.  H`   H¾C $c t%H`H`H      HH.  H`   H¾C $c t%H`H`H4     HH=.  H`   H¾C $c Xt%H`H`H      HH-  H`   H¾C $c t'H`H`H (     HH-  GH`   H¾C $c t%H`H`H (     HHf-  H`   H¾C $c t%H`H`H      HH-  H`   H¾C $c :t%H`H`H      HH,  H`   H¾C $c t%H`H`H      HH,  H`   H¾C $c t%H`H`H,     HHJ,  H`   H¾"C $c et%H`H`H0     HH,  H`   H¾,C $c t%H`H`H      HH+  H`   H¾4C $c tCH`H胲ǅ   =    ~
ǅ    H`   H¾?C $c rtH`HH`   H¾IC $c ;t3H`   VC H蝲uǅ   
ǅ    H`   H¾[C $c tH`H蒱
ǅ   H`   H¾C $c tH`HGEH`H   u    rH`H   uF" =   u
"   ~" u
    En" u
    9    3" t
hC    UHHH}HE   @c Hu@c        UHSH4  HXEE    HX@  EHX@  EHE    E    H" H|" b" t4H" C H`   HǸ    ѬH`HHX   C HiE} tE    EEE    " HX,  LLE" HX,  ЅtE} uE   @C MH   HǸ    }   HX@  t#HX@  uC C C HEHEH蔭EHE    }uU" EčP" 9?} u9" HcHo" HMHH(  HY" H9" h  " EEE} tuHH`HXA    IйC    HH^  H`HЬEEEB" tC H`H" ;E}bEHHիHEH} u5C UH¾   @c     y@c       HV" HEHEHEWHA" C" Hcʋ" HcHH)HHHHEH" HE؋" HcHMHEHH)} tCH`HEغ   HH%  HMHEغ   HHh&  HEH蔫HE؋&" EHX,  EE   oE;EuEEHEH;EtEHcHMHEHH荬EHHE؋EHcHMHEHH[EHHE؋EHHEЋE)EEE;E~HE  H} t#H" HʪHEH" E" } *  >" tKHX,  HXH $  @C H`Aؾ   HǸ    薨H`HHX,  HXH $  EHΉE} yAHXH $  xC HH¾   @c     )@c o    j  HXEH։  tKEHXH   C HH¾   @c     Ƨ@c       E     E;Et} t       EH`      H`@C MHp   HǸ    OE    } ȃ} HHpHHX$AIHѺ (  HH0  E    v  } tyL" t
C &HXHEHΉ  t"H`   C H"  E    E   "   #C    } tH\" HHH8HEH7C HHHEH} uDE@C MH`  HǸ    j"    H`H;oK" t{C %HHH`HU]HXH  E} uE} tHEHHEH蚧HX,  ;E~
} n} tHXEH։  } uuC H¾   @c     "@c hH`Hu5H`HC H`HH¾   @c     Ф    } uEE;E   H4  [UHSH   HxHplH`LXDTH       HCH`HDE" t0HxC HH¾   @c     @c Wyc $c 踤tMH`   $c H  H`   C Hj   H`   Dc HQ   H`   Dc H  lHcHpC Hy  lHpѺc DC HlHHpOC HlHpѺ[C dC HlH`HppC HlHXHpvC H}uE    Hx,  E/EPHx,  EHx,  EEHl" HtsT tGHW" HU]A   HlHHp|C HDlHpѺC |C H!lHpѺbC |C H    HĨ   [UHSHh.  HHHLDHcH    Hj} t=HHHHAIHѺ (  HHƅ HHHHu:HC HH¾   @c     @c '    (  HH   H   HH   H   HH  HHHD$    HD$    H$    A    A           H"HHE} u@" tjC HH   HǸ    HH?4C HH   HǸ    ȟHH	HH       Hh.  [UHSHH$  HH       HHHHH0  HH  HH0  ,   HEE   W  HH0  HEA   Hщ¾,   HsHHOHHHD$    HD$    H$    A    A           H}H   =   HE}    }?   EHƄ EEHcHHH    HH  tHH   HH膡x" t: C HHIHH¾   @c     ܝ@c "EE;EHH$  [UHSHX  HHHH       HHHE    E    E    E    E    E    HHNt"   $C r	  HH   H  E蚠 E} uH   bC 4C H}uM-"   6C SC MH   HǸ    蒜HHj  HbC H:tHqC H"uQ" t
C E   H,    " t
C YE     } ^  H   C H蚟=  4" tC } u
  C HHu_HH  E܃} yGH C HH  HǸ    ^" 5  HH(  E   E   HH  HH  i C MH   HǸ    HH9  :"    C MH   HǸ    詚HHU  H C HQtH C H9u?" t
 C  t}uE   E   E      }   ~" t C XHHIHHK  HHtE   C '    } w  HC HstHC H[C  E   7  H   !C H~uHH  H   !C HMuqHHHE} ~}  	E! ]"   (!C MH   HǸ    ̘HHx  H   G!C H这uxHHHH   HH  HH "   `!C HH   HǸ    7HHx  H	   !C H*   < u
   	   HHк!C HH   H߸    HH< u
   	   HHH  HH  ! =   P  !   E  H!C H%Hu}H!C HHudH!C HHuKH"C HڙHu2H:"C HHuHP"C H訙HtWH  "C H  HH!   ! tr"C HHX! t""C HHHHEE
HHu;} t5 t,} u
C C   HHHH  EЃ} u"! t
#C EHX  [UHHH}! u
    خ! u
    ̶<#C HUHHǸ    2UHSHxH}HuUMHE?#C HEV#C HEl#C HE#C HE#C HEbC k! t-#C HUHH¾   @c     ܔ@c "} x}E    E} EEUHcHcHHHHHDŠHEHUH]HEIй        HH7HX! HtHL! H,    EHEHE} HEHEԋEԋU܍E؋! ;E   E   EHcH! HH苘HEH} u5#C U؉H¾   @c     蟓@c        HEHx! E؉w! } u
Hb!   } t[! HcHI! $C H  HEH'u<.! HcH! HMHH  ! HcH! 	$C H  H! HɔE܋! +UH! EHH4H]HEA    HHH}   Hx[UHH0}HE    ! ~H! Hdt
    
  ! EEHH~HEH} u5$C UH¾   @c     "@c h      p! t.z! X$C H¾   @c     @c &H! HB! HcHE   HEEHHE  ! ;Eu7! ta$C UH¾   @c     m@c 4! $C MAȉH¾   @c     7@c }H! !   8%C HԔuUHEѺ   HƿbC H~! HM   HH^HEZ%C H艑uUHEѺ    Hƿ_%C Z0H1! h%C HH¾   @c     肐@c HEH<! ;EUHH0H}uHU؋EE}~	EEEHcHE    HE    \HEHgE}t:EE}
uEHHEU2} tEHHEUm	EEE;E|EUHSH(}HuHEHnHH]ЋEܹ    HމeE}u       H([UHH0}HuHEHHE%C HMHE
   HǸ    E HUEH։\E} tEHUЋEH։=EEUHSHX   HHH        H薎H  HH  HHHHHEHEHHH3HH)HHHEH} tHEHE       HEHH;Eu
HEHEHE    HEHEnHUH    HމYHEH}u%C 4SH} yHEFHUHHHHHEH)EH} HEHEH;ENHHX   [UHH0}HMEܺ   HΉHHEH}tHEE HEH輏UHH0}HuHUHUHMEHΉ3HHEHEUHHP  HHE    HE    HE    E    E    E    HH։Kt
      ! t&C ҾHHþHEH} y
    ?  HEHHqHEHEHHHE    HHMHUЋHΉHEH} yH} tHEH軍        H       H請E    E    E    E    7  EHHE E} Q  }  }   H   4&C HttH   E&C HWu!E    !    X&C d~t! t{&C NHH?HH@JH   C H腎u-#! t
&C HHE   H       HkE    5蝌H UHH % @  tEHUE}
uE    E
t*
toti=   ucE    ZE   Q} t(HHH{&C .HHH       H覉E    }  u<<#C HHHǸ    gH       H^E    EEHH;EHEHHE  HEH;EuHE <0tH} tHEH    HEUHAWAVAUATSH   }HuHE    HE    EE       HEHE    UDmDeD]DUDMDEHEH    HE}HEL   uHEH   HEDu˻&C MHET$xHD$pbC Dl$hHD$`bC Dd$XHD$PbC D\$HHD$@&C DT$8HD$0bC DL$(DD$ HUHT$|$L|$4$LMEHھ   HǸ    HME    HΉHEHEH茉H} uHEHr    H   [A\A]A^A_UHSH8}HuHE    HE    EE      膈HEHE    ]&C MHEAؾ   HǸ    %HM؋E̺    HΉ	HEHEHψH} uHEH赈    H8[UHSHX}HuHUHE    HE    EE      ЇHEHE    ]u&C H}MHE؉$IA   HǸ    aHM؋E̺   HΉEHEHEHH} uHEH    HX[UHH $  HH'C HHH%HEH} 
  8! t4	'C HH   HǸ    觅HHH        Ho   HUHHѺ     H躈E} ~^H! HEHcH   H͉! t0&'C MH   HǸ    HHCHEHeHEH   *?'C HH  HǸ    规    UHH   HhHhHpHHu  uHEUHH@H}HuЉUE    HEHM   HH肆u#EHcHEHHEHH   E   HEH诈EÐUHH}HuHUHEHEHEHEH} t8'HEHEHE HEHEuHmH} uH} u#H} tHE  HE HEuHUHEHH)HHUHH@H}HuHUHEHEHEHEHEHEHEH} HmtHE uHUHEHH)HHEHEHUHH)HHEH} Hmt7HEH袄HEMH} tHEHE؈HEHmHEHE uHE  HUHEHH)HHEÐUHE    EUHH}E    EUHH}HuE    EUH}HuE    EUHH   lE    P'C lHp   HǸ    ݁HpHluE    EUHH   lE    p'C lHp   HǸ    }HpH辳luE    EUHSH   HxHpHE    E    HxHt
  E    'C HxHuHMHUIHHǸ    qt
  EE%   	E	ЉEЋE% E1ЍHOE% E1Ѓ1E% E1Ѓ1%  EԋE;Et
  E%   EEEċEEȋE%  E̋E%? Em  E?EE%  EẺE}tE~} tE}} tE|} Ey}[B  u"E  HE   'C Hr       蛄HE؋EiQ - 
HHEHEHUHH考hHhHEHEHHEHM躟'C HE   HE~ ^~,EfWf.EtEjeHp    Hp     HpUPHp@   HpUPHpHHHE   HHaHpUP HpUP$    uHpHB(EHĘ   [UHH}HuE    EUHH H}HE(   'C HE    EUHH}E    EUHH}HuE    EÐfffff.     Hl$Ld$H-3! L%,! Ll$Lt$L|$H\$H8L)AIHI|Ht1@ LLDAHH9rH\$Hl$Ld$Ll$ Lt$(L|$0H8ÐHH    H   qHH   0UHSHHx! HtEc D  HHHuH[ÐHOH                        http_request unarchive archive readpkg w /dev/null b:l:c:vd?    MV AppServer transaction is initializing. %smv_appsvr.conf %s/mv_appsvr.conf  Could not get peer.       Request using module handler "%s" for resource "%s" Module initialization failed!       Initialization failure in auth_basic! Module execution failed! Module execution is complete. Unsupported handler "%s"   !@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     :"@     U"@     "@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     "@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     n"@     !@     tcp mvappsvr /var/log/mv_appsvr /usr/local/mvappsvr/mv_appsvr.conf /usr/local/mvappsvr 1 MVAppServer close MultiValue AppServer v%s
 1.7.1.8102 %s, (%s@%s)
 zumlabD305 root Fri Jun  5 11:26:48 PDT 2020 
     -v/-?			Display Version and Usage Information   -d			Enable debugging code.  [extra logging]    -l <logfile>		Specify the path to the log file. -b <install_path>	Specify the alternate installation path.  ,; application/json text/json */json api    Content-type: application/problem+json
       {
"status": %d,
"title": "%s"
}
 application/xml text/xml */xml     Content-type: application/problem+xml
        <?xml version="1.0" encoding="UTF-8"?>
<problem xmlns="urn:ietf:rfc:7807">
<status>%d</status>
<title>%s</title>
</problem>
 Content-type: text/html
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">       <html xmlns="http://www.w3.org/1999/xhtml">   <head>        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />     <style type="text/css">         body { background-color:#FFFFFF; font-family:Geneva, Arial, Helvetica, sans-serif; font-size:12px;              line-height:1.6; margin:0; padding:0; color:#990000; }          #error_wrapper { width:800px; margin-left:auto; margin-right:auto; margin-top:20px; }           h1 { margin:0; font-weight:normal; }            #error_wrapper  h1 { color:#777779; font-size:34px; padding:10px 15px; background-color:#f7f7f7;        border:1px solid #990000; -moz-border-radius-topleft: 5px; -moz-border-radius-topright: 5px;            -webkit-borderradius-topleft: 5px; -webkit-borderradius-topright: 5px; }        h1 strong { color:#CF6E01; font-weight:bold; }          #error_content { padding:15px; background-color:white; border:1px solid #990000; border-top:none;               -moz-border-radius-bottomleft: 5px; -moz-border-radius-bottomright: 5px; -webkit-borderradius-bottomleft: 5px;          -webkit-borderradius-bottomright: 5px; }        #error_content h1 {font-size:18px; }            h2 { font-size: 12px; margin:0; font-weight:bold; }             button { cursor: hand; display:block; color:#999999; background-color:white; border:1px solid #999999; -moz-border-radius: 5px; -webkit-border-radius: 5px; padding:2px 10px; float:left; }      </style>     <title>An error has occured.</title>   </head>   <body>     <div id="error_wrapper">              <h1 class="main_heading"><strong>Zumasys MultiValue Dashboard</strong></h1>             <div id="error_content">  (no License Key)                <h2>Welcome to the Zumasys MultiValue Dashboard Application Server</h2>         <p> Your installation has succeeded and you are ready to activate and configure your new software.                  To begin the configuration process, click the button below labeled "Next" to go to the administrative                   configuration screen.<br><br>                   <form><button type="button" onClick="self.location='/config';">Next</button></form>             <br><br>         </p>         <h2>%s </h2>
         <p> The system has encountered an unrecoverable error.  Please see the system log file, and the description                 of the error above for more information.  To continue, please select one of the following options:<br><br>             <ol>               <li><a href="/config">Configure your server</a></li>                    <li><a href="javascript: history.go(0);">Refresh this page</a></li>                     <li><a href="/">Return to your default application</a></li>                     <li>Check that your server has database licenses available for use by the dashboard process.</li>             </ol>       </div>      </div>  </body> </html>     Gathering information about the remote peer. Could not getpeername. getpeernamed. 127.0.0.1 localhost   This program must be executed from inetd/xinetd. GET HEAD POST PUT DELETE OPTIONS       Invalid request URI (Null PATH_INFO) DefaultResource    Unsupported Request Method: %s  Error reading the request line from remote peer
 HTTP/1.1 OK Created Accepted   Non-Authorititative Information No Content Reset Content Partial Content Multiple Choices Moved Permanently Found See Other Not Modified Use Proxy Temporary Redirect Bad Request Unauthroized Payment Required Forbidden Not Found Method Not Allowed Not Acceptable Proxy Authentication Required Request Time-out Conflict Gone Length Required Precondition Failed Request Entity Too Large Request-URI Too Large Unsupported Media Type Request range not satisfiable Expectation Failed Internal Server Error Not Implemented Bad Gateway Service Unavailable Gateway Time-out HTTP Version not supported Unknown Sending HTTP Response, Status: %i (%s), Protocol: %s %s %i %s
 3@     3@     3@     	4@     4@     #4@     04@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     =4@     J4@     W4@     d4@     q4@     ~4@     5@     4@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     4@     4@     4@     4@     4@     4@     4@     4@      5@     5@     5@     '5@     45@     >5@     H5@     R5@     \5@     f5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     5@     p5@     z5@     5@     5@     5@     5@     
 Accept User-Agent Cookie Connection Content-Length Content-Type Remote-User Authorization Referer Host extraHeaders Unsupported Request Header: Content-type: %s
 Status: %i
 Connection: %s
 Server: %s
 Content-Disposition: %s
 Expires: %s
 Pragma: %s
 Cache-Control: %s
 Content-Length: %i
  WWW-Authenticate: Basic realm="AppServer" Location: %s
 Last-Modified: %s
  Sent Response headers to client. Entering auth_basic AuthType Basic true        This handler requires authorization. AuthUsername AuthPassword %s:%s Basic %s Authorization succeeded.  You are not authorized to make this request.
 %x        %b %d %I:%M:%S  %s Inst(%i) - Log msg too long.
 %s Inst(%i) - %s
 a    r   %import %include_file %s/%s %include_config %sconfig/%s %s/config/%s =      Cannot open configuration file %s behavior DefaultHandler DefaultResource licensekey debug handlers mime_types content_types db_platforms db_platform Undefined module/section: %s      <pre> CGI Variables:<br> -------------:<br><br> %s = %s<br>
 </pre> %s< <br> Document Handlers: %s		%s
 Mime-Type Mappings: Content-Type Mappings:  ;   Module Configuration Settings: %s		%s		%s
      <option value="" selected>(select a platform)</option>
  selected       <option value="%s"%s>%s</option>
       mod_static mod_embedded mod_bravoconnector mod_mvconnector mod_config   Cannot locate a valid initialization routine for handler: %s    Cannot locate a valid execute routine for handler: %s   mod_static<br>                           mod_config<br>                           mod_mvconnector<br>                           mod_embedded %%%02x %i
 ERROR: %s
      ERROR: Cannot allocate http client.     ERROR: Archive creation is not supported. extracted listed      
Archive file was %s with errors

      
Archive file was %s successfully

     ERROR: Cannot allocate archive client .pkginfo  popen2: command is NULL!        popen2: error %i creating pipe fd1      popen2: error %i creating pipe fd2 popen2: error %i in fork     popen2: error %i writing to pipe @ %i bytes     popen2: failed writing %i bytes to pipe @ %i r  popen2: error %i in dup2 of fd1 popen2: error %i in dup2 of fd2 -c sh /bin/sh popen2: error %i in execl dbc mod_bravoconnector mod_mvconnector  @     @     Ɔ@     φ@     ؆@     @     @     @     @     ;@     ;@     ;@     ;@     ;@     ;@     ;@     @     @     @      @     )@     2@     Success.        Software is not activated (no License Key). License Key has expired.    License Key is not valid (fmt). License Key is not valid (chk). License Key is not valid (prd). License Key is not valid (typ). License Key is not valid (pwr). License Key is not valid (cnt). Invalid Format (%i) %4X %c %5lX %7lX 7777777 %8lX x%s%s%s %X    post head get shm:u:o:p:v?      URL (-u) is a required parameter. : // /        You must specify a post data input file when selecting the POST method. r       fopen failed, cannot open post data input file. stat failed, cannot open post data input file.  @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     @     ɑ@     @     @     @     @     @     @     httpClient {   request_method    = '%i';
   header_flag       = '%i';
   stat_flag         = '%i';
   http_port         = '%i';
   url               = '%s';
   output_file       = '%s';
   post_data_path    = '%s';
   http_host         = '%s';
   request_line      = '%s';
   post_len          = '%i';
   sockfd            = '%i';
       post_data_ifp     = 'FILE(%i)';
        post_data_ifp     = '[null]';   output_ofp        = 'FILE(%i)';
        output_ofp        = '[null]';      error_flag        = '%i';
   error_string      = '%s';
      response_status            = '%i';
     response_content_length    = '%i';
     response_age               = '%i';
     response_date              = '%s';
     response_expires           = '%s';
     response_content_type      = '%s';
     response_server_string     = '%s';
     response_transfer_encoding = '%s';
     response_connection        = '%s';
     response_last_modified     = '%s';
 };        MultiValue Dashboard AppServer by Zumasys v%s
 1.7.1.8102 HTTP Client mode %s, (%s@%s)
 zumlabD305 root Fri Jun  5 11:26:48 PDT 2020 
  -v/-?			Display Version and Usage Information   -u <url>		The URL that you wish to connect to.  -m <method>	The http request method, one of POST,GET, or HEAD.  -o <file>		Output file.  By default, the results are shown in stanard out.      -p <file>		The system path to a file containing your url-encoded post data if applicable.       -h				If specified, the http headers from the server will be included in the output.    -s				Display a status bar.  Requires the -o flag.      Cannot determine hostname: "%s" Cannot create socket.   Cannot connect to remote host (incorrect port?). POST  HEAD  GET   HTTP/1.1
 Host: %s
 Connection: close
 Content-Length: %i
 User-Agent: mvAppServer/%s

 
 chunked   Protocol Error, expecting chunk terminator but received %i,%i wb        Cannot open output file: '%s'
 Date Expires Content-Type Server Transfer-Encoding Connection Last-Modified Status Content-Length Age    Read %ik of %ik - %.2f%% complete.      File Size Unknown. Read %i bytes.             Y@o:p:i:v?ls      @     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     G@     @     G@     G@     +@     G@     G@     @     @     G@     G@     @     G@     G@     @     -p is a required flag. -i is a required flag. '%s' is not a directory. Cannot stat: '%s' r      fopen failed, cannot open archive file. stat failed, cannot open archive file. tarBall {   extract_flag      = '%i';
   stdout_flag       = '%i';
   list_flag         = '%i';
   input_file        = '%s';
   parent_dir        = '%s';
   only_do_file      = '%s';
    archive_ifp       = 'FILE(%i)';
        archive_ifp       = '[null]';      error_flag        = '%i';
   error_string      = '%s';
 }; MultiValue Dashboard AppServer by Zumasys v%s
 1.7.1.8102 Archive mode %s, (%s@%s)
 zumlabD305 root Fri Jun  5 11:26:48 PDT 2020 
      -v/-?			Display Version and Usage Information   -p <dir>		The parent directory that the archive files will be extracted into.   -i <file>		System path to the archive file.     -l			Only list the contents of the archive, do not extract them.        Invalid Header, aborting extraction. %ik %i f %s (%s)
 d %s
    ? %s
Unsupported file type: %i
 %s/%s wb        Cannot create output file: %s, (%s)
    Incorrect End of File, Aborting with '%s'       Write failed, Aborting with '%s' / mkpath: '%s': %s
    Directory       mod_static.c "Directory" element is missing in module configuration. DefaultMime        mod_static.c "DefaultMime" element is missing in module configuration. %sdocroot/%s %s/docroot/%s       mod_static.c Directory: %s does not exist or is not readable. %s/%s     mod_static.c "%s" begins with a dot (unsupported)       mod_static.c "%s" is not a file or directory (unsupported) DefaultResource /    mod_static.c using "DefaultResource" - "%s" rb  Cannot determine mime type for extension "%s"   Setting content type to "%s" for ".%s". Gathering file information for this resource. %a, %d %b %Y %H:%M:%S GMT Sending the HTTP response String.       Sending the HTTP response headers. Serving File.        mod_static.c %s is a directory (unsupported)    mod_static.c Cannot locate resource at %s       mod_static.c - module execution complete. 404Redirect   404 Redirect per configuration file to:                        gif body-bg.gif png green.png css ie6.css ie7.css info.png js main.js menu-tab.gif menu-tab-left.gif pipe.gif red.png reset.css screen.css shadow-bottom.gif mv-logo.gif mv-logo.png yellow.png license.js license.css ajax-loader.gif  Sending the HTTP response String.       Sending the HTTP response headers.      mod_embedded.c Cannot locate resource at %s module execution complete.  GIF89a    񵵵,       80
%+!Vdihlp,tmx|pH,5@ L ;                             PNG

   IHDR         r|   tEXtSoftware Adobe ImageReadyqe<  IDATxڔkAƟu֜xgDMRh66$!QPk)!$.{;Nlf<ﰩG0\B=It]CQ;=:w<c]z o漷kCH
0Ye	#J8T`U(6MJ<Vj,IoL?A>#8<<`QHD0@s YAOT<=8Mõtv|q@qS%DG1;wfafkǮwwvo]#]%[Eidv>J(A/>nYE#nq"[eN:U\\B*`cl;P-MuIB9 +_gϱ}lGFrv%91a36d@g|!ޛS%4]|:^Gb&4tOF0 L~N    IENDB`            #server_status td.green,
#server_status td.yellow,
#server_status td.red {
	background-color:transparent;
}

#navigation {
	float:right;
	margin-right:10px;
	margin-top:20px;
}

img.logo {
	margin-left:10px;
}

.status {
	margin-top:10px;
}

.left_column {
	margin-left:0px;
}
           PNG

   IHDR         7#   tEXtSoftware Adobe ImageReadyqe<  IDATxb3`G	*,1}|,W~Gp;Z-Wgna,7wqe/+-r1@uڔ@HPՅ/8CTɾOQ8K	<Tc
4^d;I<c/ -AܹfӋ2ڃH-O6=MjP=,̏O<:J]9[R`~+,TeGvF :vLm4KtaN>?Jcz PNI=?nXdvBR' ̘*Xd 6c 0S$dUnvprj!* B4<O L[bHFAɟМ}n9˕9[QÒgi=ǧ҄O?   J;&    IENDB`  //	Author: Dan Piscitiello
/////////////////////////////////////////////////////////////////////////////////////////
//
//	Show help boxes function
//	
//	Make sure to pass the id of the help div and help box it resides in 
//	when calling the function inline from a link
//
/////////////////////////////////////////////////////////////////////////////////////////

var current_help = "";
var current_box = "";

function showHelp(help_id, box_id){
	if(current_help != ""){
		document.getElementById(current_help).style.display = "none";
	}
	if(current_box != ""){
		document.getElementById(current_box).style.visibility = "hidden";
	}
	current_help = help_id;
	current_box = box_id;
	document.getElementById(box_id).style.visibility = "visible";
	document.getElementById(help_id).style.display = "block";
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Password change form validation and submission
//
/////////////////////////////////////////////////////////////////////////////////////////

function validatePass(form){
	if (form.pass1.value == "") {
		alert("Please fill out both fields!");
		form.pass1.focus();
		return (false);
	}
	if (form.pass2.value == "") {
		alert("Please fill out both fields!");
		form.pass2.focus();
		return (false);
	}
	if (form.pass1.value != form.pass2.value) {
		alert("Your passwords do not match!");
		form.pass1.focus();
		return (false);
	}
	// Additional validation here if needed		
	return (true);
} 

function savePass(){
	document.admin_password.action = ""; //server side script location
	if(validatePass(document.admin_password)){
	document.admin_password.submit();
	}
}

function installApp(){
	document.install_app.action = ""; //server side script location
        if (document.install_app.package.value == "") {
          alert("Please enter the package file.");
          document.install_app.package.focus();
        } else { 
	  document.install_app.submit();
	}
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Database page form validation and submission
//
/////////////////////////////////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////////////////////////////////
//
//	function to show and hide the App Installer
//
/////////////////////////////////////////////////////////////////////////////////////////

beenCalled = 0;

function installer(){
	if(!beenCalled){
		document.getElementById("installers").style.display = "block";
		beenCalled = 1;
	} else {
		if(document.getElementById("installers").style.display == "none"){
			document.getElementById("installers").style.display = "block";
		} else {
			document.getElementById("installers").style.display = "none";
		}
	}
}
    GIF89a,!  ???   !   ,    ,!  `'dihlp,tm߳\wpH,Ȥrl:ШtJ.azxL.znpW>z~yu@W۾	 
H&Ç#JHŋ3jȱǏ C!ɓ(S\ɲ˗0cʜI͛8sܹ?%JѣHJpӧPBJꄫXjzUjӪ`!pͪаhzmjLJx`h].{Ry+g]t ǐ#KL˘3k̹ϠCӨS^ͺװc˞M۸s޽Nȓ+_μУKNzسkνËOӫ_Ͼ}˟OϿ (h46F(Bf`j ~a!f8"%^x).""2>X#4@; @)DiH&L6PF)TVYe d Yr	^j)d	fh~jf[)sigm©fgZt&f&(
 VJ{Z:饖F駠)jj
穝nij묰I++ `+k&6F+vҵfv+k覫A+k ,\$7G,Wlgwq($l(,0,4l8,r<@-DsH'L7NG-TWXg\u`-8_@hjSO tv. ;           GIF89a !  ڜ333ĄSSSױ   !   ,     !  hICAIB%+cwY3r	8AXvx7I1
\334! ;                     GIF89aF   ɱۙ         !     ,    F  (8cLNu5M"9-N6w͙$Hv5"б=[IpyQHhE-rVއ4Jfk3y-˞XolGIW7qhtzrxv|bdsyT	 ;    PNG

   IHDR         r|   tEXtSoftware Adobe ImageReadyqe<  dIDATxڜN@ggQ&R"}ށW0<HxOG/ބB-ŲxɽL~3YiFӹȹ_־q
Çgtjݺn&;4^A(KJ[J6Lׇ#	%߿5nt{h	t:1
 "_ 0dǣ&!|HwZOVh#1wx-顝XD<ZQX-.ϘU\&/L4rs02j.]W]||x T8v	/LZGꋀ:o @B    IENDB`                              @charset "UTF-8";

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	font-size: 100%;
	vertical-align: baseline;
	background: transparent;
}
body {
	line-height: 1;
}
ol, ul {
	list-style: none;
}
blockquote, q {
	quotes: none;
}

/* remember to define focus styles! */
:focus {
	outline: 0;
}

/* remember to highlight inserts somehow! */
ins {
	text-decoration: none;
}
del {
	text-decoration: line-through;
}

/* tables still need 'cellspacing="0"' in the markup */
table {
	border-collapse: collapse;
	border-spacing: 0;
}

sub {
	font-size: smaller;
	vertical-align: sub;
}

sup {
	font-size: smaller;
	vertical-align: super;
}             @import url("reset.css");

/**************************************************************
	Global
**************************************************************/

body {
	font-family:Arial, Helvetica, sans-serif;
	font-size:13px;
	line-height:1.5;
	height:100%;
	background-image:url(/embedded/body-bg.gif);
	background-repeat:repeat-y;
	background-position:center;
	margin-bottom:20px;
	color:#999999;
}

a {
	color:#999;
	text-decoration:none;
}

a:hover {
	color:#ff8125;
}

h1 {
	font-size:18px;
	color:#ff8125;
	padding-bottom:30px;
}

h2 {
	color:#ff8125;
	padding-bottom:10px;
	font-size:13px;
}

h3 {
	color:#FF8125;
	font-weight:bold;
	font-size:11px;
}

table th {
	text-align:left;
}

.wrapper {
	margin-left:auto;
	margin-right:auto;
	position:relative;
	width:760px;
}

.header {
	background-color:white;
	padding-bottom:20px;
}

#navigation {
	float:right;
	margin-right:20px;
	margin-top:20px;
}

#navigation li {
	float:left;
	margin-right:1px;
}

#navigation li a {
	display:block;
	background-image:url(/embedded/menu-tab-left.gif);
	background-repeat:no-repeat;
	padding-left:5px;
	background-position:left top;
	font-size:13px;
	color:#666;
}

#navigation a.active {
	color:black;
	font-weight:bold;
}


#navigation li a span {
	display:block;
	padding-right:15px;
	padding-left:10px;
	padding-top:5px;
	padding-bottom:10px;
	background-image:url(/embedded/menu-tab.gif);
	background-repeat:no-repeat;
	background-position:right top;
}

img.logo {
	float:left;
	margin:20px;
	border:none;
}

.status {
	font-size:14px;
	line-height:1.3;
	padding:20px 20px 20px 38px;
	margin:20px 20px 0;
	clear:both;
	border:1px solid black;
	color:black;
	background-color:#CCC;
	background-image:url(/embedded/green.png);
	background-repeat:no-repeat;
	background-position:25px 22px;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
}

.status p {
	margin-left:10px;
}

.status.green {
	border-color:#090;
	background-color:#CF9;
	color:#090;
	background-image:url(/embedded/green.png);
}

.status.red {
	border-color:#900;
	background-color:#FCC;
	color:#900;
	background-image:url(/embedded/red.png);
}

.status.yellow {
	border-color:#FC3;
	background-color:#FFC;
	color:#FC3;
	background-image:url(/embedded/yellow.png);
}

.content {
	padding-top:20px;
	background-image:url(/embedded/shadow-bottom.gif);
	background-repeat:repeat-x;
	background-position:top;
	
}

.left_column {
	float:left;
	clear:left;
	width:232px:
}

.center_column {
	float:left;
	width:350px;
	margin-right:20px;
}

.right_column {
	float:left;
	width:138px;
	position:relative;
}

.clear {
	clear:both;
}

/**************************************************************
	Status Page
**************************************************************/

#message {
	font-size:11px;
	width:150px;
	padding:10px 20px;
	margin:0px 20px;
	background-color:white;
	border:1px solid #333;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	color:#333;
}

.center_column.main_status {
	width:507px;
	margin-right:0px;
}

.center_column table {
	text-align:left;
	width:100%;
	color:#666;
}

table#server_status {
	margin-bottom:20px;
}

#server_status tbody th {
	padding-left:20px;
	font-weight:normal;
}

#server_status td {
	text-indent:-9999px;
	background-repeat:no-repeat;
	background-position:left 8px;
	width:50px;
}

.center_column.main_status th, .center_column.main_status td {
	border-bottom:1px solid #999;
	padding:5px 10px 5px 0px;
}

#server_status td.green {
	background-image:url(/embedded/green.png);
}

#server_status td.yellow {
	background-image:url(/embedded/yellow.png);
}

#server_status td.red {
	background-image:url(/embedded/red.png);
}

.server_info {
	font-size:11px;
	padding:10px 20px 20px;
	background-color:white;
	border:1px solid #999;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
}

.server_info table {
	color:#999;
}

.server_info th {
	width:170px;
}

.server_info tbody th {
	padding-left:20px;
	font-weight:normal;
	text-align:right;
	padding-right:10px;
}

#app_info tbody td, #app_info tbody th {
	border-bottom:none;
}

table#server_info {
	margin-bottom:30px;
}

/**************************************************************
	Security, Database pages
**************************************************************/

.center_column.main th {
	padding-right:10px;
	padding-bottom:15px;
	vertical-align:top;
	font-weight:normal;
	width:118px;
}

.center_column.security td {
}

select {
        background-color:white;
        border:1px solid #999999;
        -moz-border-radius: 5px;
        -webkit-border-radius: 5px;
        color:#666666;
        float:left;
        width:166px;
	height: 24px;
}

input {
	background-color:white;
	border:1px solid #999999;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	padding:3px 7px;
	color:#666666;
	float:left;
	width:150px;
}

input.no_class {
	background-color:none;
	border:inherit;
	padding:0px;
	color:#666666;
	float:none;
	width:auto;
}

a.info {
	display:block;
	float:left;
	margin-left:8px;
	width:19px;
	height:20px;
	background-image:url(/embedded/info.png);
	background-repeat:no-repeat;
	background-position:left top;
	text-indent:-9999px;
}

.help_box {
	visibility:hidden;
	position:absolute;
	top:57px;
	border:1px solid #999999;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	padding:7px;
	font-size:11px;
	background-color:white;
}

#required_help_box {
	top:90px;
}

#optional_help_box {
	top:230px;
}

#install_help_box {
	top:460px;
}

.help {
	display:none;
}

a.save { 
	display:block;
	color:#999999;
	background-color:white;
	border:1px solid #999999;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	padding:2px 10px;
	float:left;
}

a.save:hover {
	color:#ff8125;
}

.pipe {
	margin-bottom:20px;
	padding-bottom:10px;
	background-image:url(/embedded/pipe.gif);
	background-position:left bottom;
	background-repeat:no-repeat;
}

.installer {
	border:1px solid #090;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	overflow:hidden;
	background-color:#CF9;
	color:#090;
	margin:20px 0px;
}

.installer h3 {
	background-color:#090;
	padding:3px 10px;
}

.installer h3 a {
	color:white;
}

#installers {
	display:none;
	padding:10px;
}

.results {
	border:1px solid #999999;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	overflow:hidden;
	background-color:white;
	margin-top:20px;
}

.results h3 {
	background-color:#999999;
	color:white;
	padding:3px 10px;
}

.code_wrapper {
	padding-left: 10px;
	font-size: 10px;

}

.results ol {
	list-style-position:outside;
	list-style-type:decimal-leading-zero;
	font-family:"Courier New", Courier, monospace;
	font-size:10px;
	margin-left:25px;
	padding:10px;
}

#package input {
	margin-top:10px;
	margin-bottom:10px;
}

.database_install {
	display: none;
}

.ok_to_install + .database_install {
	display: block;
}

/**************************************************************
	Documentation page
**************************************************************/

.center_column.main_status.docs {
	width:470px;
}

#docs_index {
	padding-top:20px;
}

#docs_index ol {
	list-style-type:upper-roman;
	list-style-position:inside;
	margin-left:25px;
}

#docs_index ol ol {
	list-style-type:lower-latin;
	margin-left:25px;
}

#docs_content {
	padding-top:30px;
}

#docs_content p {
	margin-bottom:20px;
}


/**************************************************************
	Documentation page
**************************************************************/
.pipe.apps th {
	background-color:#FF8125;
	color:#FFFFFF;
	border: 1px solid #000000;
	padding-left: 3px;
	font-size: 12px;
}
.pipe.apps td {
	color:#FF8125;
	border: 1px solid #000000;
	padding-left: 3px;
	font-size: 12px;
}
.pipe.app_install th {
        padding-right:10px;
        padding-bottom:15px;
        vertical-align:top;
        font-weight:normal;
        width:118px;
}
/***************************************************************
	License Page
***************************************************************/
.center_column.license_screen {
        width:507px;
        margin-right:0px;
}
.license_info {
        padding:10px 20px 20px;
        background-color:white;
        border:1px solid #999;
        -moz-border-radius: 5px;
        -webkit-border-radius: 5px;
}
.license_info th {
        background-color:#FF8125;
        color:#FFFFFF;
        border: 1px solid #000000;
        padding-left: 3px;
        font-size: 12px;
}
.license_info td {
        color:#FF8125;
        border: 1px solid #000000;
        padding-left: 3px;
        font-size: 12px;
}

      GIF89a !   ւ@o! ǡ`󗗘㌌wwybbdP0mmopYɫ﫫XXZ                                                                                  !XMP DataXMP<?xpacket begin="﻿" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5.1 Macintosh" xmpMM:InstanceID="xmp.iid:2EF4A51F5D4111E49D1686E86F8EDADF" xmpMM:DocumentID="xmp.did:2EF4A5205D4111E49D1686E86F8EDADF"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:2EF4A51D5D4111E49D1686E86F8EDADF" stRef:documentID="xmp.did:2EF4A51E5D4111E49D1686E86F8EDADF"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! 
	  !     ,     !  @hHȤB$2p XP
"䡩,G]аKR#Ay{(#l^n{IRh$uGVXWIr^NIdgikGx[InxGRaGgMHH\MG[C  $  # CHk٠yGGEMORYR#Cm$r2@ʝ!#}"5e^8kMgw"")#!9c( Ndd`*$X aAO[0!w?:t*;ckWˇX6BmF$/˕6!29f=FmhD2#Pa$:"%Fb
X-3|bK!\Gi'qx!i)ԷLT"]HfcCe"Ko	Т>gM@Q&hn
le!anc}^9$pMCT'Bw~ITD^IHM$6O[GqRTHsà6K|H8OU\L?CЃ齑2bHϑx {0aSp]J X`) W[)H2"8ɇGG xpAdq'}ZƠyhT4vPA hg"g@h"rTΔzlG3hGZwP@򪀘G$ANP+	w+Gk¯:]NPia D&'	h*o[)	{$ Я$,`o6a%iX{$|+mP@"H@,j/͆ A
(l!J,w" r
]=Wf{((^z% T _hQGMBJD@l	BĂ$aũF7I|AzyZʬ$13k-j$AIc,QN6kړ/@l~j9^+wR*LqD/!"@kh-Bk=u[W|,zKky
G<C,ul\ {{Em< ~@k3 Q0Q҃0IA
a  0L!\P8Bj5  2V P&B	0X!4 ߝ*T֐PЇJ&:PH*ZQ*ǐx.zщ   
 A	ZgٲF}W@ &0÷m`#,	ذq
@4 I')E $,H@&	& @C%	!1Jr  d#H k!F)H`WZ_$ 6B`L 
IR Ю	̓UX*B l_ Dc[rJP2N% Cdj   ;               PNG

   IHDR      !   	   tEXtSoftware Adobe ImageReadyqe<  $iTXtXML:com.adobe.xmp     <?xpacket begin="﻿" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5.1 Macintosh" xmpMM:InstanceID="xmp.iid:32C87AE557C911E4BB5798526BC76546" xmpMM:DocumentID="xmp.did:32C87AE657C911E4BB5798526BC76546"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:32C87AE357C911E4BB5798526BC76546" stRef:documentID="xmp.did:32C87AE457C911E4BB5798526BC76546"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>/  	IDATx[q8=	D RHU
$V ?7=*t+0
B\%DI0R(`.3N_@|݋N;ǯ5WhK3|㿛T~tmXYͯ'dc/	GRwZ`FGZ	ZL9r1Y5b~_Ɂ-,(wHNʘǌe̢-nϑ[ؐ\p3{/r;j!-G{d5ru$HRw4~#pN>eZoaiϽM=8!(7Pa:A|_!gY6A*=.8+G5Wdfsִ/w΍fu6˘qrŊC{rR4s7w衿ʱ&HoTCwK1U:}Wڰ)Ge~&W'CR64wXQ@t޸&A9dsm%1nFUQiGӥz@YfM&`L۳j!0mCiT6qx
f}6S-Ys\>Bۘ^@NT"pf&5لId2L<P,j2~Z98$?-ǮAi/	(mQ>NY;.8mΝٞ܋&]Ψ؅2]XX$-Q8QfEs#0'dwsTrS*ZL,~kòGf!i&!jU3Kz(.Yn[g}PWfsЈ*;qG1[;p]?2K&e!+d\>qOAhc&YdiI~		\}V%{=*"h,IݿO9Iw`A-\Vku>cdNcb7@x:.]Ϥe0FkhW 7W>gW)Rpɗ c^qSn{$_rLH­ԵamOv疸6uzfS/6|b%\rk6i*r_Uc=.h[1:
ə%.>-bJ${K8^{ҦJ	CXi+.'SԕP=L@e)B+~u0X;ۆT6f}sd,(TytD!@Dv/߭sp+BӬg|SDw#A_s3&ME*>78|.T1\!qn8m,q1kF+؀$Tvf&ʱmHvޟ\w/P:T&|:ΜsjΞN'v7Z_M%a)`$³'!ΩRT'4c>(h%e9YJ#YApP^mZNUYٗ8LBS'-GtS
il)ni#%T9$I(کy~GhQT/F=֖m#D5sLd#S[U~aG@!8-xSp'C^%
ь8x.G}*^;S<M8U6ㆂahwsX'"1R]e֩bcĄ80Q;Cvq9$nbѬQk|W}Hh
่dpa眗h_К<-wQ3m~huG%aC@XN>.ZNrDJ#֢cGq(EL<@4P!W))ycd10G;;eQ5 ]#QG]HiI})(ZXDYab4"\)G4;!8-2G<>RǀVQ e	5?{Ρ8Zꍫ(Nri	ާl{kڅ$.e$MN:uc٤<sele9W͙dm	]pl2;?]	WPޙw^"K6mPLflΟWH<TS k''{ߢjtZ"c&LyaPN	G4.Jcg.:q89Z~ )[
F:hP9-q<1r! jbI~Z %uCNj+t @y\%k$Y2powfP&'},+zR^ҷ</ ezMӯp*    IENDB`  PNG

   IHDR         r|   tEXtSoftware Adobe ImageReadyqe<  wIDATxڔRANP_JJ!Ć`b`R\{!wƅ$qc"qebb[}+tfޛ3SusVin٧Lw&n@bHTPHjmWvgQp{Xr,Gt_%5bB==m2I(v?DRbm[T='LoJ@GI~6&!p\񕩐^_:D*>;6\i
@*.K<I8hiu,N2mSrJ&$1f22rx\u3~-.ʋWـi8q[ߛbKM?on*jWM?-{ Ny((+    IENDB`           //	Author: Dan Piscitiello
/////////////////////////////////////////////////////////////////////////////////////////
//
//	AJAX HTTP Request Object
//
/////////////////////////////////////////////////////////////////////////////////////////

function getHTTPObject(){
   if (window.ActiveXObject) 
       return new ActiveXObject("Microsoft.XMLHTTP");
   else if (window.XMLHttpRequest) 
       return new XMLHttpRequest();
   else {
      alert("Your browser does not support AJAX.");
      return null;
   }
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Submit license activation chosen method
//
///////////////////////////////////////////////////////////////////////////////////////// 

function submitLicenseMethod(){
	if (getCheckedValue(document.getElementsByName('activationType')) == ""){
		alert("Please choose an activation method.");
		return;
	}
	document.getElementById("choose_license_method").style.display = "none";
	document.getElementById("loading").style.display = "block";
	httpObject = getHTTPObject();
	if (httpObject != null) {
        httpObject.open("GET", "php/licenseMethod.php?licenseMethod="+getCheckedValue(document.getElementsByName('activationType')), true);
        httpObject.send(null);
		httpObject.onreadystatechange = licenseContinue;    
    }
}

function licenseContinue(){
	if(httpObject.readyState == 4){
		document.getElementById("loading").style.display = "none";
		switch (httpObject.responseText) {
			case "auto":
				document.getElementById('automatic_activation').style.display = "block";
				break;
			case "manual":
				document.getElementById('manual_activation').style.display = "block";
				break;
			default:
				return;
		}
	}
}

function getCheckedValue(radioObj) {
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Automatic Activation
//
/////////////////////////////////////////////////////////////////////////////////////////

function validateEM(form){
	if (form.email_address.value == "") {
		alert("Email address is required for activation.");
		form.email_address.focus();
		return (false);
	}
	if (form.system_id.value == "") {
		alert("System ID is required for activation.");
		form.system_id.focus();
		return (false);
	}
	// Additional validation here if needed		
	return (true);
} 

function submitAutomatic(){
	if(validateEM(document.automatic_activation_form)){
		submitAutomaticLicense();
	}
}

function submitAutomaticLicense(){
	document.getElementById("automatic_activation").style.display = "none";
	document.getElementById("loading").style.display = "block";
	httpObject = getHTTPObject();
	if (httpObject != null) {
        httpObject.open("GET", "php/automatic.php?systemId="+document.automatic_activation_form.system_id.value+"&serialNo="+document.automatic_activation_form.serial_num.value+"&email="+document.automatic_activation_form.email_address.value, true);
        httpObject.send(null);
		httpObject.onreadystatechange = automaticContinue;    
    }
}

function automaticContinue(){
	if(httpObject.readyState == 4){
		document.getElementById("loading").style.display = "none";
		document.getElementById("status_msg").className = ("status green");
		document.getElementById("status_msg").style.display = "block";
		switch (httpObject.responseText) {
			case "success":
				document.getElementById("activation_complete").style.display = "block";
				stripe("system_info");
				break;
			case "failure":
				alert("An error occurred!");
				break;
			default:
				return;
		}
	}
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Manual Activation
//
/////////////////////////////////////////////////////////////////////////////////////////

function validateID(form){
	if (form.man_system_id.value == "") {
		alert("System ID is required for activation.");
		form.man_system_id.focus();
		return (false);
	}	
	// Additional validation here if needed		
	return (true);
} 

function beginManualActivation(){
	if(validateID(document.manual_activation_form)){
		getMachineId();
	}
}

function getMachineId(){
	document.getElementById("manual_step_1").style.display = "none";
	document.getElementById("loading").style.display = "block";
	httpObject = getHTTPObject();
	if (httpObject != null) {
        httpObject.open("GET", "php/getMachineId.php?systemId="+document.manual_activation_form.man_system_id.value+"&serialNo="+document.manual_activation_form.man_serial_num.value, true);
        httpObject.send(null);
		httpObject.onreadystatechange = manualActivationStepTwo;    
    }
}

function manualActivationStepTwo(){
	if(httpObject.readyState == 4){
		document.getElementById("loading").style.display = "none";
		document.getElementById("manual_step_2").style.display = "block"
		document.manual_activation_form.machine_id.value = httpObject.responseText;
	}
}

function validateKeys(form){
	if (form.key1.value == "") {
		alert("Key 1 appears to be incorrect. Both keys are required for activation.");
		form.key1.focus();
		return (false);
	}
	if (form.key2.value == "") {
		alert("Key 2 appears to be incorrect. Both keys are required for activation.");
		form.key2.focus();
		return (false);
	}
	// Additional validation here if needed		
	return (true);
}

function submitManualActivation(){
	if(validateKeys(document.manual_activation_form)){
		submitKeys();
	}	
}

function submitKeys(){
	document.getElementById("manual_step_2").style.display = "none";
	document.getElementById("loading").style.display = "block";
	httpObject = getHTTPObject();
	if (httpObject != null) {
        httpObject.open("GET", "php/submitKeys.php?key1="+document.manual_activation_form.key1.value+"&key2="+document.manual_activation_form.key2.value, true);
        httpObject.send(null);
		httpObject.onreadystatechange = completeManualActivation;    
    }
}

function completeManualActivation(){
	if(httpObject.readyState == 4){
		document.getElementById("loading").style.display = "none";
		document.getElementById("manual_activation").style.display = "none";
		document.getElementById("status_msg").className = ("status green");
		document.getElementById("status_msg").style.display = "block";
		switch (httpObject.responseText) {
			case "success":
				document.getElementById("activation_complete").style.display = "block";
				stripe("system_info");
				break;
			case "failure":
				alert("An error occurred!");
				break;
			default:
				return;
		}
	}
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Table Striping
//
/////////////////////////////////////////////////////////////////////////////////////////

function hasClass(obj) {
	var result = false;
 	if (obj.getAttributeNode("class") != null) {
		result = obj.getAttributeNode("class").value;
 	}
 	return result;
}   

function stripe(id) {
	var even = false;
	var evenColor = arguments[1] ? arguments[1] : "#f3f3f3";
	var oddColor = arguments[2] ? arguments[2] : "#fff";
	var table = document.getElementById(id);
	var tbodies = table.getElementsByTagName("tbody");

	for (var h = 0; h < tbodies.length; h++) {
  		var trs = tbodies[h].getElementsByTagName("tr");
  		for (var i = 0; i < trs.length; i++) {
			if (!hasClass(trs[i]) && !trs[i].style.backgroundColor) {
				var tds = trs[i].getElementsByTagName("td");
				for (var j = 0; j < tds.length; j++) {
					var mytd = tds[j];
					if (!hasClass(mytd) && !mytd.style.backgroundColor) {
						mytd.style.backgroundColor = even ? evenColor : oddColor;
					}
				}
			}
			even =  ! even;
  		}
	}
}
                      
#status_msg,
#loading,
#automatic_activation,
#manual_activation,
#activation_complete,
#manual_step_2 { display:none; }

#loading {
	width:16px;
	height:16px;
	margin-top:50px;
	margin-left:auto;
	margin-right:auto;
}

.wrapper.license th,
.wrapper.license td { border-bottom:none; }

input.read_only {
	background:none;
	border:none;
	padding-left:0px;
}

#choose_license_method table,
#manual_step_2 table { margin-top:15px; }

#choose_license_method th {
	width:160px;
	vertical-align:middle;
}

#choose_license_method input { width:auto; }

#automatic_activation th,
#manual_activation th,
#activation_complete th {
	width:100px;
	vertical-align:middle;
}

#activation_complete h2 {
	margin-top:20px;
	padding-bottom:5px;
}

#system_activations th#name { max-width:65px; }

table#system_info th,
table#system_info td { padding-left:15px; }

table#system_info { border:1px solid #999999; }  GIF89a    ÇՏ㧧                                             !NETSCAPE2.0   !Created with ajaxload.info !	
   ,       P  di0l!*`Ƒ5و[<iP),IZ$bH85&x5k <yB !	
   ,       h  GҌh*ਨ@$E}eh @
LcQGBP5 <5UdQ+"g0Ak#A <P70<	0Y8*	#! !	
   ,       `  #(H*
P	-13
:C1KHH.$ٱy j.WD@Y 0H	,0B
kJU?5w|$k\)! !	
   ,       R  di 1@Ck!B`? #E8zBQXcmv" £``UFrp)f! !	
   ,       `  di@E1m]ǹHІ(4 (,F!aH XSm5bDH ab,
%p3c#'"467P&*X/($! !	
   ,       _  diH@@4 ²A"I`>nI0$K7H,-t*E-``1@C7h/1f\)&! ;                          html documentation.html status.html security.html database.html apps.html activate.html tab security docs database apps activate Sending the HTTP response. no-cache post-check=0, pre-check=0 Mon, 26 Jul 1997 05:00:00 GMT   mod_config.c - module execution complete. green [SERVER_INSTALLED_COLOR] 1.7.1.8102 [SERVER_VERSION] [DEFAULT_HANDLER] [DEFAULT_RESOURCE] [HANDLER_LIST] [MODULE_LIST] [SYSTEM_ID] dbType dbc dbBinary dbCommand dbRequired dbEnvVars dbAccount d3Account dbUsername dbPassword dbWorkingDir dbAcctPath dbVME dbAppName dbHostName dbPortNum dbFails maxRequest [DB_CONFIG_COLOR] red yellow MVAPPS.STATUS      set working dir: chdir("%s") succeeded  set working dir: chdir("%s") failed     Actual database command for MVAPPS.STATUS: r    Database command failed in modconf_tab_status: %s       Results from database command: : INSTALLER-VERSION APP <br>     End of database command results. [MV_SOFT_COLOR] [APP_INSTALLER_VERSION] [INSTALLED_APPS]       Configuration or System problem Database not configured <table cellpadding="0" id="license_info">
   <thead>
     <tr>
       <th scope="row">Server License:</th>
       <td>Activated</td>
     </tr>
   </thead>
   <tbody>
       <th scope="row">Serial #:</td>
       <td> %i </td>
            <th scope="row">Users:</td>
 Unlimited %2i              <th scope="row">Edition:</td>
 SDK Standard Professional Enterprise Evaluation          <th scope="row">Expiration Date:</td>
   </tbody>
 </table>
 [SERVER_LICENSE_COLOR]   [SERVER_LICENSE_ALT] Not Activated 
 [LICENSE_TABLE] [SYSTEM_STATUS_COLOR] package submit_form true [PACKAGE] Package Error: %s Invalid package file '%s'. %sbin/mvappsvr readpkg "%s" %s/bin/mvappsvr readpkg "%s" Reading Package ReadPKG Error: %s TITLE VERSION HANDLER-NAME INSTALL-HANDLER-FILE Incomplete package data file. %sbin/mvappsvr unarchive -i "%s" -p "%sdocroot" %s/bin/mvappsvr unarchive -i "%s" -p "%s/docroot" Un-Archiving Package UnArchive Error: %s      Archive file was extracted successfully Unable to extract archive.  See results window for more information.    MVAPPS.INSTALLER %sdocroot/%s/MV-PACKAGE        Cannot prepare database command Installing MV Package   Cannot execute database command Application Install Complete    MV Package Install Error, See the results window for more information <br>Creating Handler:<br> %sdocroot/%s/%s %sconfig/%s %s/docroot/%s/%s %s/config/%s Source:  Target:      Could not copy the handler configuration file.  Appending to global configuration:<br> a ; %s
 %%include_config "%s"
   Cannot append to configuration: %s      <div class="status green"> <p>Thank you, your package was successfully installed.<br><b>(Package: "%s", Version: "%s")</b></p></div> [PASSFAIL] <br><b>Package Installation is Complete!</b><br><br> Unknown Error      <div class="status red"> <p>An error has occurred, please contact your administrator.<br><b>(%s)</b></p></div> requesting mvapps.status <tr><td> </td><td align=center> </td></tr>      <tr><td align="center" colspan="3"><br><b>No Applications Installed</b><br><br></tr></tr> [APP_TABLE]   <div class="status red"> <p>An error has occurred, please contact your administrator.<br><b>(Database has not been configured)</b></p></div>    <tr><td colspan="3" align="center"><b><br>Database not configured<br><br></b></td></tr> [RESULTS_DIV]   <div class="results"><h3>Results</h3><div class=code_wrapper><code>%s</code></div></div> feature install_dashboard database_setup database_platform dbtype %s/core/%s %score/%s %s/platform.conf        Internal Error: platform configuration file "%s" not found.     Internal Error: platform configuration file "%s" is corrupt. dbVarMode dm_acct_name dm_acct_pass dm_username dm_password dm_behavior %sconfig/dbc_database.conf %s/config/dbc_database.conf w ; configured by mod_config
 [dbc]
   dbType       = "%s"
   dbCommand    = "%s"
   dbAccount    = "%s"
   dbBinary     = "%s"
   dbUsername   = "%s"
   dbPassword   = "%s"
   dbVME        = "%s"
   dbWorkingDir = "%s"
   dbAcctPath   = "%s"
   dbAppName    = "%s"
   dbHostName   = "%s"
   dbPortNum    = "%i"
   maxRequest   = "%i"
   dbFails      = "%i"
   dbVarMode    = "%i"
   dbRequired   = "%s"
   dbEnvVars    = "%s"
   cTypeIsStart = "true"

 System Error fopen:%s System Error (install path ): %s dbconfig.html [DBCONFIG] dbhelp.html [DBHELP] [DBINSTALL] dbbinary dbaccount dbusername dbpassword dbworkingdir dbacctpath dbvme dbappname dbhostname dbenvvars dbportnum dbfails maxrequest   Invalid entry for "DB Retrys", this parameter must be between 1 and 999.        Invalid entry for "Segment Size", this parameter must be between 128 and 8192.  <div class="status green"> <p>Thank you, your changes have been saved.</p></div>        <div class="ok_to_install"></div> db_package install_files Installing database packages. logto install_command%i        Unable to execute installation command, see results window.     Unknown error, see the results window for more information.     <div class="status green"> <p>Thank you, the dashboard software has been successfully installed.<br><b>(Version: %s)</b></p></div> [DBBINARY] [DBWORKINGDIR] [DBACCTPATH] [DBUSERNAME] [DBPASSWORD] [DBACCOUNT] [DBVME] [DBAPPNAME] [DBHOSTNAME] [DBENVVARS] [DBPORTNUM] [MAXREQUEST] [DBFAILS] [DM_USERNAME] [DM_PASSWORD] [DM_ACCT_NAME] [DM_ACCT_PASS] [DB_PACKAGE] SELECTED [DMB_LOGTO] [DMB_PROMPT] [DBPLATFORM_OPTIONS] pass1 pass2 %sconfig/admin_password.conf %s/config/admin_password.conf [config]
   AuthUsername = "admin"
   AuthPassword = "%s"

 System Error: %s,%s Passwords do not match     <div class="status green"> <p>Thank you, your password has been updated.</p></div>      <li id="database_required"><h3 class="docs_sub_item">Required Parameters</h3><p>The "Required Parameters" section includes all of the paramters that must be set for the software to operate correctly.<br><br><u>Platform</u> Select the MultiValue database platform type that you are using with your dashboard. Other required &amp; optional parameters vary depending on the platform selected.</p></li> dbdoc.html [DBDOC] act_submit license_key activate_pass %sconfig/mvdb.conf %s/config/mvdb.conf [behavior]
   licenseKey   = "%s"
 %s     /config?tab=activate&activate_pass=true <div class="status red"> <p>License Key not updated.<br><b>(%s)</b></p></div>   <div class="status green"> <p>Thank you, your License Key was successfully updated.</p></div>   <tr><td colspan="3" align="center"><br><b>%s</b><br><br></td></tr>      <tr><td colspan="3" align="center"><br><b>This software has not been activated.</b><br><br></td></tr>   <tr>
       <td align="left">License Key:</td>
     <td align="left">   </tr>
      <td align="left">Serial #:</td>
        <td align="left"># Users:</td>
         <td align="left">Edition:</td>
         <td align="left">Expiration Date:</td>
 [STATUS_MESSAGE] [LICENSE_KEY] <pre> swap tags:<br> -------------:<br><br> %s = %s (%i)<br>
 </pre> check_app_installer 01
 rb wb [PACKAGE_FOLDER] [DBCMDLINE]      Required parameter %s for platform %s is missing.       File required for software installation is missing or cannot be accessed: "%s"; error code %d. %s/%s                    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<script src="/embedded/main.js" type="text/javascript"></script>

<title>MultiValue Application Server: Documentation</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status"><span>Status</span></a></li>
            <li><a href="/config?tab=security"><span>Security</span></a></li>
            <li><a href="/config?tab=docs" class="active"><span>Docs</span></a></li>
            <li><a href="/config?tab=database"><span>Database</span></a></li>
            <li><a href="/config?tab=apps" ><span>Apps</span></a></li>
            <li><a href="/config?tab=activate"><span>Activate</span></a></li>

        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />

        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">

        <div class="left_column">
        	<div id="message">
        		<h2>Documentation</h2>
                <p>This page contains the documentation describing how to use the configuration interface for the MultiValue dashboard.  Use the table of contents on the right to navigate to the documentation section that you need.  If you cannot find the answer to your question in this section, please contact your Zumasys support representative.

               <br><br>
               <b>Zumasys Support<br>
               support@zumasys.com</b></p>

            </div>
        </div><!--left_column-->
    
    	<div class="center_column main_status docs">
        	
            <h1>Application Server</h1>
            <div id="docs_index">
                <h2>Table of Contents</h2>
                <ol>
                    <li><a href="#getting_started">Getting Started</a>
                    <li><a href="#status">Status</a>
                        <ol>
                            <li><a href="#status_icons">Status Icons</a></li>
                            <li><a href="#status_serverinfo">Server Summary Information</a></li>
                            <li><a href="#status_apps">Installed Applications</a></li>
                        </ol>
                    </li>
                    <li><a href="#security">Security</a>
                        <ol>
                            <li><a href="#security_admin">Admin Password</a></li>
                        </ol>
                    </li>
                    <li><a href="#docs">Docs</a></li>
                    <li><a href="#database">Database</a>
                        <ol>
                            <li><a href="#database_required">Required Parameters</a></li>
                            <li><a href="#database_optional">Optional Parameters</a></li>
                            <li><a href="#database_install">Install Dashboard Software</a></li>
                        </ol>
                    </li>
                    <li><a href="#apps">Apps</a>
                        <ol>
                            <li><a href="#apps_installed">Installed Applications</a></li>
                            <li><a href="#apps_install_new">Install a New Application</a></li>
                        </ol>
                    </li>
                    <li><a href="#activate">Activate</a>
                        <ol>
                            <li><a href="#licensing_information">Licensing Information</a></li>
                        </ol>
                    </li>
                </ol>
            </div>
            
            <div id="docs_content">
          	<ol>
    	       	  <li id="getting_started" class="pipe">
                        <h2>Getting Started</h2>
                        <p> Thank you for installing the MultiValue Application Server!  This page will guide you through
                            the setup and configuration of your new software.  There are four simple steps that are required
                            to complete the installation of your software.
                            <br> <br>
                            <u>Step 1: Run the MV Application Server Installer.</u><br>
                               To begin the installation of the MultiValue Application Server, first download and run the correct installer for your
                               system.  For Windows-based systems the installer will be a single executable file called "mvapps-[version].exe".  For
                               example, the file "mvapps-1.0.0.1234.exe" would contain the installation program for version 1.0.0, build 1234.  On
                               Unix-based machines such as Linux or AIX, the installer will be a single executable file called "mvapps-[version].bin".
                               <br> <br>
                               To begin the installation, execute the installation file.  The installer program will guide you through the remainder
                               of the installation process.
                               <br><br>
                               Once the installation script has completed, you should be able to connect to the application server's configuration
                               interface using your favorite web browser.  To connect, open your web browser and point it to the name or ip address 
                               of your database server.  Make sure to include the TCP port number that you selected when running the installation 
                               script in the address bar.  If you accepted the default port, your web address will be something like:
                               <br><br><b>http://my.pickserver.com:8180/config</b> 

                            <br> <br>
                            <u>Step 2: Configure Your Database Connection.</u><br>
                               Once you are able to connect to the configuration interface, you are ready to configure the system using the "Database"
                               tab.  First, you need to select the MultiValue platform type from the dropdown list at the top of this page.
                               For all installations, you will need to fill out the top section of the database screen labeled "Required
                               Parameters".  In this section, enter the full path to your MultiValue database executable. 
<!--                           For Rocket D3, this typically is /usr/bin/d3 for Unix and Linux, or c:\Program Files\RocketSoftware\d3\D3programs\D3Tcl.exe on Windows. -->
                               Also in this section you can select the name of the account that will be created to house
                               the MultiValue software applications that you install and you will also be able to select a password for the
                               "MVDASHBOARD" user.  This user account will automatically be created and used to access your MV system.
                               <br><br>
                               If necessary for your installation, you may also configure the optional parameters at this time.  For more information
                               and further description of these parameters please see the "Database" section of this help page.

                            <br> <br>
                            <u>Step 3: Install the Base Package.</u><br>
                               After the software has validated your entries in the required parameters section, the database tab will be expanded
                               to allow you to install the core MultiValue database software.  Fill out all of the information requested in this section,
                               and when you are ready, click the "Install" button to complete your base configuration.  If the installation process
                               succeeds, a message will be displayed and the database software version will be displayed.  More information
                               regarding this section is available in the "Database" section of this help page.

                            <br> <br>
                            <u>Step 4: Activate Your New Software.</u><br>
                               To use your new software, it must be activated to ensure that you have access to all of the features that you 
                               have purchased.  To activate your software, click on the "Activate" tab inside the configuration interface
                               and enter in your licensing information.   More information about this function is available in the "Activate" section
                               of this help page.

                            <br>    
                        </p>
                  </li>
    	       	  <li id="status" class="pipe">
                    	<h2>Status</h2>
                    	<p>The "Status" tab is intended to provide the software's administrator a summary of its health and configuration status.  When
                           logging into the configuration interface, this screen is displayed to give a quick, graphical view into the status of the 
                           Application Server.
                        </p>
                        <ol>
                            <li id="status_icons">
                                <h3 class="docs_sub_item">Status Icons</h3>
                                <p>The first section of the Status screen includes five icons, which display the current health of the software. 
                                <br> <br>
                                <u> System Status</u>
                                    This icon displays the overall status of the system.  
                                       A green icon indicates that all of the configuration has been completed and verified.  
                                       A yellow icon indicates that the configuration appears to be complete, but for some reason the configuration 
                                         is broken or invalid.  
                                       A red icon indicates that the system is not fully configured and/or usable.
                                <br><br>
                                <u> Server Installed</u>
                                    This icon displays the status of the basic server software installation as completed by the installation script.
                                      A green icon indicates that the software has been fully installed.
                                      A yellow icon indicates that a problem has been detected with the installation of the software.
                                      A red icon indicates that the software has not been installed.
                                <br><br>
                                <u> Server Activated</u>
                                    This icon displays the activation status of the software.
                                      A green icon indicates that the software has been activated.
                                      A yellow icon indicates that an activation has been completed or started, but it is not valid.
                                      A red icon indicates that the software has not been activated.
                                <br><br>
                                <u> Database Configured</u>
                                    This icon displays the database configuation status.
                                      A green icon indicates that the software has been configured and that the configuration appears to be valid.
                                      A yellow icon indicates that the software has been configured, but a problem was detected.
                                      A red icon indicates that the software has not been configured.
                                <br><br>
                                <u> MV Software Installed</u>
                                    This icon displays the status of the MultiValue software part of the installation.
                                      A green icon indicates that the MultiValue software has been installed and is working correctly.
                                      A yellow icon indicates that there is a problem with the installation, or that the MultiValue software 
                                        cannot be executed.
                                      A red icon indicates that the MultiValue software has not been installed.
                                <br><br>
                                </p>
                            </li>
                            <li id="status_serverinfo">
                                <h3 class="docs_sub_item">Server Summary Information</h3>
                                <p>The second section of the status screen includes some general information regarding the installation of
                                   your application server software.
                                   <br><br>
                                   <u>Server Version </u>
                                      This heading displays the version of the MultiValue Application Server that you are running in the form
                                      [Major].[Minor].[Sub-Minor].[Build_No], indicating the Major Release, Minor and Sub-Minor Revision, and 
                                      Build Number. 
                                   <br><br>
                                   <u>System ID</u>
                                      The system ID is issued by Zumasys and uniquely identifies your installation of the software.

                                   <br><br>
                                   <u>Configured Handlers</u>
                                      The "Configured Handlers" section lists all of the installed URI Handlers.  These handlers are used
                                      internally to map URIs to installed application packages.            
 
                                   <br><br>
                                   <u>Included Modules</u>
                                      The application server software is implemented using a modular design allowing for easy expansion
                                      in the future.  This section includes a list of all of the currently configured modules.

                                   <br><br>
                                   <u>Default Handler</u>
				      The "Default Handler" is used to determine which application is executed by default when no application
                                      handler is defined in the request URI.
                                   <br><br>
                                   <u>Default Resource</u>
                                      The "Default Resource" is used to determine which application program is executed if no application resource
                                      is defined in the request URI.
                                   <br><br>
                                </p>
                            </li>
                            <li id="status_apps">
                                <h3 class="docs_sub_item">Installed Applications</h3>
                                <p>The third section of the status screen includes a list of all of the applications that are currently
                                   installed and configured using the MultiValue Application Server.  To install new applications, use the 
                                   "Apps" tab inside the configuration interface.
                                </p>
                            </li>
                        </ol>
                    </li>

                    <li id="security" class="pipe">
                    	<h2>Security</h2>
                    	<p>The "Security" tab includes all of the configurable parameters related to maintaining the security of the 
                           MultiValue Application Server.
                        </p>
                        <ol>
                            <li>
                                <h3 class="docs_sub_item">Admin Password</h3>
                                <p>The admin password is used to access both the configuration interface at /config, and also any 
                                   MultiValue applications which are accessible using the "sdbc" handler.  You can identify these
                                   applications by looking for /sdbc/ in the request URI.
                                </p>
                            </li>
                        </ol>
                    </li>

                    <li id="docs" class="pipe">
                        <h2>Docs</h2>
                        <p>The "Documentation" tab provides more information about the configuration
                           and setup of the MultiValue Application Server.
                        </p>
                    </li>

                    <li id="database" class="pipe">
                        <h2>Database</h2>
                        <p>The "Database" tab provides an interface to modify all of the parameters specific to your MultiValue
                           database.  These items are required for the operation of your software.
                        </p>
                        <p>The parameters shown on this tab depend on the MultiValue platform type that you have selected.
                           The database configuration parameters are organized into 3 sections: Required Parameters, Optional Parameters
                           and Dashboard Install parameters.
                        </p>
                        <ol>
[DBDOC]
                        </ol>
                    </li>

                    <li id="apps" class="pipe">
                        <h2>Apps</h2>
                        <p>The "Apps" tab is used to view your list of installed applications and to install new applications as necessary.</p>
                        <ol>
                            <li id="apps_installed">
                                <h3 class="docs_sub_item">Installed Applications</h3>
                                <p>The "Installed Applications" section of this tab is used to display the package name, version and handler
                                   name for all of the software packages that you have installed into the application server.
                                </p>
                            </li>
                            <li id="apps_install_new">
                                <h3 class="docs_sub_item">Install a New Application</h3>
                                <p>To install a new application, enter the full system path to the package file that was provided by Zumasys in
                                   the "Package Path" field.  Once the installation has completed, you can access the new software package
                                   using its handler name in the request URI.</p>
                            </li>
                        </ol>
                    </li>


                    <li id="activate" class="pipe">
                        <h2>Activate</h2>
                        <p>The "Activate" tab is used to view and update the license information for your copy of the MultiValue Application
                           server software.
                        </p>
                        <ol>
                            <li id="licensing_information">
                                <h3 class="docs_sub_item">Licensing Information</h3>
                                <p>If you have entered in a valid license, the "Licensing Information" section of the "Activate" tab will display
                                   the information that your license key provides.  If you have not entered in a valid licese, there will be no
                                   licensing information displayed.  You may enter in or update your license anytime by entering it in the "License
                                   Key" text box and clicking on "Update".
                                </p>
                            </li>
                        </ol>
                    </li>






                </ol>
            </div>
            
        </div><!--center_column-->

	</div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
                         <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<title>MultiValue Application Server: Status</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status" class="active"><span>Status</span></a></li>
            <li><a href="/config?tab=security"><span>Security</span></a></li>
            <li><a href="/config?tab=docs"><span>Docs</span></a></li>
            <li><a href="/config?tab=database"><span>Database</span></a></li>
            <li><a href="/config?tab=apps"><span>Apps</span></a></li>
            <li><a href="/config?tab=activate"><span>Activate</span></a></li>

        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />
        
        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">

        <div class="left_column">
        	<div id="message">
        		<h2>Welcome</h2>
                <p>Welcome to the MultiValue Application Server configuration interface.  This interface will help you check on the status and version of your new software, update your configuration, and install new applications.  Use the tabs on the top of this page to navigate the configuration screens. </p>
            </div>
        </div><!--left_column-->
    
    	<div class="center_column main_status">
        
        	<h1>System Status</h1>
        	
            <table id="server_status" cellpadding="0">
            	<thead>
                	<tr>
                    	<th scope="row">System Status:</th>
                        <td class="[SYSTEM_STATUS_COLOR]">Ok</td>
                    </tr>
                </thead>
                <tbody>
               	    <tr>
                    	<th scope="row">Server Installed:</th>
                        <td class="[SERVER_INSTALLED_COLOR]">Ok</td>
                    </tr>
                    <tr>
                        <th scope="row">Server Activated:</th>
                        <td class="[SERVER_LICENSE_COLOR]" alt="[SERVER_LICENSE_ALT]">[SERVER_LICENSE_ALT]</td>
                    </tr>

                    <tr>
                    	<th scope="row">Database Configured:</th>
                        <td class="[DB_CONFIG_COLOR]">Ok</td>
                    </tr>
                    <tr>
                    	<th scope="row">MV Software Installed and Operational:</th>
                        <td class="[MV_SOFT_COLOR]">Ok</td>
                    </tr>
                </tbody>
            </table>
            <div><p>
                Click <a href="javascript:window.location='/'"><b>here</b></a> to launch the Dashboard once everthing is properly installed.
                <hr>
                </p>
            </div>
            <div class="server_info">
            
                <table cellpadding="0" id="server_info">
                    <thead>
                        <tr>
                            <th scope="row">Server Version:</th>
                            <td>[SERVER_VERSION]</td>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <th scope="row">Configured Handlers:</th>
                            <td>[HANDLER_LIST]</td>
                        </tr>
                        <tr>
                            <th scope="row">Included Modules:</th>
                            <td>[MODULE_LIST]</td>
                        </tr>
                        <tr class="alt">
                            <th scope="row">Default Handler:</th>
                            <td>[DEFAULT_HANDLER]</td>
                        </tr>
                        <tr>
                            <th scope="row">Default Resource:</th>
                            <td>[DEFAULT_RESOURCE]</td>
                        </tr>
                    </tbody>
                </table>
                
                <table cellpadding="0" id="app_info">
                    <thead>
                        <tr>
                            <th scope="row">Application Installer Version:</th>
                            <td>[APP_INSTALLER_VERSION]</td>
                        </tr>
                    </thead>
                    <tbody>
                        <tr class="alt">
                            <th scope="row">Installed Applications:</th>
                            <td>[INSTALLED_APPS]</td>
                        </tr>
                    </tbody>
                </table>

<!-- start license info -->
                [LICENSE_TABLE]
<!-- end license info -->
            </div><!--server_info-->
            
        </div><!--center_column-->

	</div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
                         <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<script src="/embedded/main.js" type="text/javascript"></script>

<title>MultiValue Application Server: Security</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status"><span>Status</span></a></li>
            <li><a href="/config?tab=security" class="active"><span>Security</span></a></li>
            <li><a href="/config?tab=docs"><span>Docs</span></a></li>
            <li><a href="/config?tab=database"><span>Database</span></a></li>
            <li><a href="/config?tab=apps"><span>Apps</span></a></li>
            <li><a href="/config?tab=activate"><span>Activate</span></a></li>

        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />

        [PASSFAIL]
        
        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">
        <div class="left_column">
        	<div id="message">
        		<h2>Security</h2>
                <p>This page will help you reset the administrative password for the configuration application.  To reset the password for the "admin" user, enter your new password into the boxes to the right of this message.  Once you have entered your passwords, click on the "Save Changes" button to update the password.  Once you have successfully changed your password in this section, you will need to re-login to the configuration interface to continue.</p>
            </div>
        </div><!--left_column-->
    
    	<div class="center_column main">
        	
            <h1>Security</h1>
            
            <form name="admin_password" id="admin_password" method="get">
              <input type="hidden" name="tab" value="security">
            	<div class="pipe">
                    <table cellpadding="0">
                        <tr>
                            <th>Admin Password:</th>
                            <td><input type="password" name="pass1" id="pass1" /><a href="javascript:showHelp('pass1_help', 'pass_help_box');" class="info">More info</a></td>
                        </tr>
                        <tr>
                            <th>Confirm Password:</th>
                            <td><input type="password" name="pass2" id="pass2" /><a href="javascript:showHelp('pass2_help', 'pass_help_box');" class="info">More info</a></td>
                        </tr>
                    </table>
               	</div>
                <a href="javascript:savePass();" class="save">Save Changes</a>
            </form>
            
        </div><!--center_column-->
        
        <div class="right_column">
        	<div class="help_box" id="pass_help_box">
            	<h3>More Info</h3>
                <div id="pass1_help" class="help">Enter the password that you would like to use for the configuration interface in this box.</div>
                <div id="pass2_help" class="help">Enter the same password as above to confirm.  Entering the password twice helps to ensure that the correct changes are made.</div>
            </div>
        </div>

	</div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
                    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<script src="/embedded/main.js" type="text/javascript"></script>

<title>MultiValue Application Server: Database</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status"><span>Status</span></a></li>
            <li><a href="/config?tab=security"><span>Security</span></a></li>
            <li><a href="/config?tab=docs"><span>Docs</span></a></li>
            <li><a href="/config?tab=database" class="active"><span>Database</span></a></li>
            <li><a href="/config?tab=apps"><span>Apps</span></a></li>
            <li><a href="/config?tab=activate"><span>Activate</span></a></li>

        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />

        [PASSFAIL] 
        
        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">

        <div class="left_column">
            <div id="message">
                <h2>Database</h2>
                <p>The database tab will help you configure your MultiValue Application Server to connect to your MultiValue database.  The most important parameters are the ones listed under the "Required" section.  These items are required to make sure that your software functions correctly.  The parameters listed in the "Optional" section may be required for some installations, but are generally used for performance tuning or other optional settings.  If you have any questions, please contact your MultiValue support representative.

               <br><br>
               <b>MultiValue Support<br>
               support@zumasys.com</b></p>
            </div>
        </div><!--left_column-->
    
        <div class="center_column main">

            <h1>Database Setup</h1>
                            
            <div>
                <h2 class="">Required Parameters</h2>
                <table cellpadding="0">
                    <tr>
                        <th>Platform:</th>
                        <td><select name="dbtype" id="dbtype" 
                            onchange="javascript:location.href='/config?tab=database&feature=database_platform&submit_form=true'+
                            '&dbtype='+this.value;">
                        [DBPLATFORM_OPTIONS]
                        </select>
                        <a href="javascript:showHelp('dbplatform_help', 'platform_help_box');" class="info">More info</a></td>
                    </tr>
                </table>                   
            </div>

[DBCONFIG]

[RESULTS_DIV]
            
        </div><!--center_column-->
        
        <div class="right_column database">
        
        <!-- BEGIN HELPBOXES -->

            <div class="help_box" id="platform_help_box">
                <h3>More Info</h3>
                <div id="dbplatform_help" class="help">In order to install and operate MVDashboard with your MultiValue database, you must specify which MultiValue platform is being used.</div>
            </div>

[DBHELP]

        <!-- END HELPBOXES -->
            
        </div><!--right_column-->

    </div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
                            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<script src="/embedded/main.js" type="text/javascript"></script>

<title>MultiValue Application Server: Applications</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status"><span>Status</span></a></li>
            <li><a href="/config?tab=security"><span>Security</span></a></li>
            <li><a href="/config?tab=docs"><span>Docs</span></a></li>
            <li><a href="/config?tab=database"><span>Database</span></a></li>
            <li><a href="/config?tab=apps" class="active"><span>Apps</span></a></li>
            <li><a href="/config?tab=activate"><span>Activate</span></a></li>
        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />

        [PASSFAIL]
        
        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">

        <div class="left_column">
        	<div id="message">
        		<h2>Applications</h2>
                <p>The Apps area allows you to view the applications that have been installed and also to install new applications. To install a new application package, the package file must be placed on your MultiValue server. Provide the fully-qualified filename of the package file (e.g. /usr/tmp/my.application.bin) on this page to install the application.</p>
            </div>
        </div><!--left_column-->
    
    	<div class="center_column">
            <h1>Applications</h1>
        <div class="clear"></div>
               <div class="pipe apps">
                 <h2 class="">Installed Applications</h2>
                 <table border="0">
                   <tr>
                    <th> Application Name </th>
                    <th> Version </th>
                    <th> Handler </th>
                  </tr>
                 [APP_TABLE]
               </table>
               <br>
             </div><!-- pipe -->
             <div class="pipe app_install">
                <h2 class="">Install New Application</h2>
                <form name="install_app" id="install_app" method="get">
                  <input type="hidden" name="submit_form" value="true">
                  <input type="hidden" name="tab" value="apps">
                   <table cellpadding="0">
                        <tr>
                            <th>Package Path:</th>
                            <td><input type="text" name="package" id="package" value="[PACKAGE]"/><a href="javascript:showHelp('package_help', 'required_help_box');" class="info">More info</a></td>
                        </tr>

                   </table>
<br>

                   <a href="javascript:installApp();" class="save">Install</a>
<br><br>
                </form>
             </div>

            [RESULTS_DIV]

            
        </div><!--center_column-->
        
        <div class="right_column">
        	<div class="help_box" id="required_help_box">
            	<h3>More Info</h3>
                <div id="package_help" class="help">The full path to the storage location of the package (.pkg) file.</div>
            </div>
        </div>

	</div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<script src="/embedded/main.js" type="text/javascript"></script>

<title>MultiValue Application Server: Activation</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status"><span>Status</span></a></li>
            <li><a href="/config?tab=security"><span>Security</span></a></li>
            <li><a href="/config?tab=docs"><span>Docs</span></a></li>
            <li><a href="/config?tab=database"><span>Database</span></a></li>
            <li><a href="/config?tab=apps"><span>Apps</span></a></li>
            <li><a href="/config?tab=activate" class="active"><span>Activate</span></a></li>
        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />

        [PASSFAIL]

        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">

        <div class="left_column">
            <div id="message">
                <h2>Activation</h2>
                <p> The activation tab allows you to view and update license information for MultiValue Dashboard. The license table to your right includes a summary of your current license information. To update your license, enter the appropriate license key and click on the "Update" button.</p>
            </div>
        </div><!--left_column-->
    
        <div class="center_column license_screen">
            <h1>Activation</h1>
            <div class="clear"></div>
            <div id="license_info">
                <h2 class="">Licensing Information</h2>
                <p>Below is the information based on the license key you have provided.</p>
                <table cellspacing="0">
                [LICENSE_TABLE]
                </table>
                <br /><br />
                <form name="license_info" id="license_info" method="get" action="">
                    <input type="hidden" name="act_submit" value="true">
                    <input type="hidden" name="tab" value="activate">
                    <table cellspacing="0">
                        <tr>
                            <th style="vertical-align: top; width: 120px;">License Key:</th>
                            <td style="border:none; text-align: left;"><input style="width: 200px;" type="text" name="license_key" value="[LICENSE_KEY]" id="licensekey1" size="26" /></td>
                        </tr>
                   </table>
                   <a style="margin-top: 20px" href="javascript:document.license_info.submit();" class="save">Update</a>
                </form>
            </div>

        </div><!--center_column-->
    </div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
      mod_mvconnector.c - Running Initialization code. dbVarMode      mod_mvconnector.c - out of memory allocating tmp_qstring!  mod_mvconnector SIMPLEWEB_MODULE REMOTE_ADDR REMOTE_HOST REMOTE_USER REQUEST_METHOD PROTOCOL_VERSION HTTP_REFERER HTTP_USER_AGENT HTTP_HOST HTTP_ACCEPT HTTP_COOKIE HTTP_CONNECTION SIMPLEWEB_HANDLER PATH_INFO CONTENT_TYPE %i SERVER_PORT %sbin/mvappsvr %s/bin/mvappsvr INSTALL_PATH HTTP_ %i%i%i This software is not activated. Activation Error: &nbsp;   %s APPSVR_ID maxContentLength        Request content length %i exceeds maximum length %i (maxContentLength). mod_mvconnector.c Starting request dbType       mod_mvconnector.c "dbType" element is missing in module configuration. dbBinary dbAppName dbHostName dbWorkingDir dbAcctPath dbUsername dbAccount d3Account dbPassword dbVME dbCommand dbRequired dbEnvVars cFilter maxRequest dbPortNum cTypeIsStart TRUE dbFails      mod_mvconnector.c - module execution complete. mod_mvconnector.c New QS: %s OI  
 
 1 Actual database command:        mod_mvconnector.c: cannot allocate anymore memory for query string rebuild. Requested: %i bytes mod_mvconnector.c Creating new socket request to %s:%i  mod_mvconnector.c OI Socket connection failed to %s     mod_mvconnector.c OI Server login failed to log in as '%s'. Calling oe_exec
    mod_mvconnector.c: oe_exec failed! oe_exec is complete r        Database request FAILED, Null Pointer.  Failure number: %i Actual executable command:   mod_mvconnector.c Database connection failed!   Database connection failure: %s Creating command line for %s /  [START.PGM] [DBPROGRAM] [UNIQUEID]-[SEQ]-[CNT] [VAR.STRING] [UNIQUEID] [DBPROGRAM] WDB.INIT [START.PGM] [SEQ] [CNT] [VAR.STRING] %% Cannot handle requests for %s       set working dir: chdir("%s") succeeded  set working dir: chdir("%s") failed     Setting environment variable: %s=%s Breaking at EOF  Breaking on NULL return code fgets error %d 700 WDB-START
 700 WDB-START
 Received start block from DB   Received start header, printing enabled. Content-type:  Received Content-type header from DB    Received start header and Content-type header, printing enabled.        Unable to open content file '%s' Content-length: %d
   Sending Content-length header; length=%d 800 WDB-COMPLETE
 800 WDB-COMPLETE
 Received end block from DB Sending char string from DB: Client-Count:  X-MVDB-STATUS:     X-MVDB-STATUS header found: %d X-MVDB-CONTENT-FILE:     X-MVDB-CONTENT-FILE header found: %s 500 ERROR  Error message from database: %s User limit reached      Licensed # of users has been reached    UniVerse user limit has been reached    Licensed number of users exceeded Too many users        Maximum concurrent licensed user limit exceeded No database licenses available to process request       No database licenses available: Discarding database output (printing not enabled):      DB failure, cannot parse results from host. %s %&=+!"'#$\`;<>@|()~{}  &=+!"'#$\`;<>@|()~{}  !"'#$\`;<>@|()~{}  %&=+ &=+ Appending '%s' to the query string      mod_mvconnector.c Cannot allocate anymore memory for query string. Requested: %i bytes & =      mod_mvconnector.c: out of memory allocating %i bytes for body data.     mod_mvconnector.c: ready to gather %i bytes of body data.       mod_mvconnector.c: succesfully gathered %i bytes from client.   mod_mvconnector.c: failed to read all body data! Requested %i but received %i from client.      application/x-www-form-urlencoded text __body__ mod_mvconnector.c: request body not sent in qstring because %s not text (see content-types config setting)! %08ld       
Communication failure - Engine Server has disconnected
 Sending OI Command String: 800 WDB-COMPLETE 800 WDB-COMPLETE  Received End Block from OI server. Sending char string from OI: Received START Block from OI server.    %i%c%s%c%s%c%s%c2%c%s%c%s%c%s%c%s%c%s%c REVCMD_LISTENER %i%c %i%c%s%c rb sending contents of file: %s wrote %i bytes to socket cannot open '%s' STUBAUTH: Getting %i licenses
  STUBAUTH: Releasing %i licenses
 %d-%d-%d NONE %m/%d/%Y HWID123456           u"A;       ;     c   X@  `            s@  h    X      O  ~(  P  +p  !  !  r"  $ 	  $ 	  $@	  %h	  +	  .	  (.	  0/	  80
  O10
  1P
  2p
  3
  m4
  P6
  6
  H7  78  T8X  8x  Y:  ;  c<  <   Z=   E>@  >`  7@  @  A  B  TC  D(  DH  0Eh  LG  eI  J  J  K  L8  M`  [N  O  Q  R  S  S8  TX  Ux  FX  ~\  \  ]  ^(  ^P  _p  Ha  +b  f  n  q0  ArP  sx  5w  {  T{  {  h|0  P  p    }    s    G@  l`  ی          8  X  J        &      M@  `  V  c    ]   (  .P  p  O    9  F    (  4#P  %$p  =%  '  *  ,  -8  ~.X  4  =  D  D  M  P8  R`  T  \  ]  _  b  b8  cX  cx  d  &e  Ze  Pi   j0  kX  Kl  m  m  hn  o   o   p@  p`  0p  Gp  p  q  Ct  [t(  tH  th  t  t  `u  pu  u             zR x           AC    <   S   AC    \   {    ACv     |   ;   AC              |   ACw       l   AC $      1   ACW      $     B   ACJ3         ,     AC $   L  P   AC`+      $   t  k    ACRT     $     +k    ACRT          n    AC       9   AC          AC     $  4    AC     D  e    AC`     d  ?/    ACj   $     N"   ACf            H    AC  $     V   ACf+           o    ACj       0    AC}  $   4     ACW         \  r    ACm     |  Z.    ACi   $     h@   AC]      $        ACcm           !~   ACy      K$%    AC`      ,  P$   AC    L  8%   AC    l   &   AC      '    AC       '    AC       A(   AC      8)    AC  $     )   ACX         4  p+|    ACw     T  +|    ACw     t  (,|    ACw       ,    AC       ,    AC       d-u   ACp      .H   ACC      /    AC  $   4  0l    ACJ]          \  0    AC     |  21    AC       1    AC  $     {2T   ACn!           3    AC       (4    AC     $  4L    ACG     D  ,58   AC3    d  D6<   AC7      `75    ACp        x7h    ACc       7   AC $     9   ACT            ;    AC     ,  D<    AC  $   L  <8   ACn         t  =    AC  $     >    ACj            4?    AC  $     ?    AC[       $   	  n@}   ACy?      $   ,	  B    AC[          T	  C    AC     t	  hD     AC[      	  hD   AC    	  ]E   AC $   	  DF   AClQ      $   	  H8   AC`         $
  L    ACU      D
  L`   AC[    d
  M    ACJ   $   
  M    ACT          
  cN    AC  $   
  O   ACa      $   
  P    ACW       $     cQl   ACm:      $   D  U|   ACbU         l  \   AC      f`    AC  $     `g   ACVL      $     (b   ACce      $     e   AC[         $  =iG    ACB  $   D  di    ACV          l  io    ACj       0j5   AC0      Em   AC      @n?   AC: $     _p   ACa`           rq   ACl    4  t    AC     T  st6    ACq   $   t  t   ACT           v%   AC       yo    ACj       Sy#    AC^   $     Vy   ACjo      $   $  }   ACg       $   L  ~   ACp         t  cy    ACt           AC  $     L   ACax           P    ACK       e    AC`       7   AC    <  (    ACQ      \     AC    |  6   AC1          AC  $     |r   ACXU      $     Ƙ   ACj      $     r   AC^O      $   4     ACc`      $   \  U)   ACcs)      $     6   AC`           ^   ACY $     	   AC\	           Y    ACT  $        ACWu         <  Q   AC $   \  >    ACR       $        ACa               AC  $        AC[       $     I   ACq      $     y   ACmG      $   D     ACA?     $   l  lK   AC`&               AC  $     M   ACA     $     D   ACa           $   AC    $  +>    ACy   $   D  +   ACii     $   l  4   ACE     $     T71   ACI     $     ]9   ACV      $     ;   ACj           	CO    ACJ  $   ,  8C   ACM]        T  EF   ACA    t  G    AC       vHQ    ACSy     Hz    ACu  $     I_   ACp*           8JF    ACA       ^J4    ACo      <  rJ   AC ,   \  HN   ACwI      $     O    ACl       $     'P    ACp            Pu   ACp      R<    ACw        4Rj    ACe     <  R    AC     \   S    AC     |  S    ACK        S    ACO        S    ACS        S    ACR        S`    AC[       S`    AC[  $   <  T<   ACo         d  3W    ACS        +W.    ACi        9W    ACO        -W    ACS        0W           $     (W    Q_@X      $  W              <  W              T  W                                                                3              @            A     o    `@            0@            @     
                                                 Gc                                       @            P@                   	              o     @     o           o    4@                                                                                                              Fc                     @     @     @     @     @     @     &@     6@     F@     V@     f@     v@     @     @     @     @     @     @     @     @     @     @     &@     6@     F@     V@     f@     v@     @     @     @     @     @     @     @     @     @     @     &@     6@     F@     V@     f@     v@     @     @     @     @     @     @     @     @     @     @     &@     6@     F@     V@     f@     v@     @     @     @     @     @     @     @     @     @     @     &@     6@     F@     V@     f@     v@     @     @     @     @     @     @     @     @     @     @     &@     6@     F@     V@     f@     v@     @                                                             ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/    GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-23) GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-4)  .shstrtab .interp .note.ABI-tag .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .text .fini .rodata .eh_frame_hdr .eh_frame .ctors .dtors .jcr .dynamic .got .got.plt .data .bss .comment                                                                                    @                                                       @                                          !             <@     <      $                              4   o       `@     `      <                             >             @           	                          F             0@     0                                   N   o       4@     4                                  [   o        @            P                            j             P@     P                                  t             @                                     ~             @                                         y             @                                                    @           }                                         A                                                     A                                                     'C     '                                               h-C     h-     l                                          Ec     E                                                Ec     E                                                Ec     E                                                 Fc      F                                             Gc     G                                               Gc     G                                               Jc     J     d                                            @Kc     $K     =                                    0               $K     Y                                                   }K                                                                                                                                                                                   ./Linux/i686/                                                                                       0000755 0000000 0000000 00000000000 13666507151 011516  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./Linux/i686/mvappsvr                                                                               0000755 0000000 0000000 00000624214 13666507151 013333  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ELF              Е4   ,$     4    (      4   44               4  44                                       ?                            H  HHD   D         Ptd ЖЖ<   <         Qtd                          /lib/ld-linux.so.2           GNU                       GNU t.Yyg_Rt   `           @e=`   a   e   )K8	gUa2                3                          G                                                                                                r                                                                                   e             x                                                      O             j                          1                          Z                            h                           V             A                          |                            S                           L              y                                                    r                                                    %             n                                                                  X             `             [                                                                   N                          8             s                          +                          H             `                                                     ,                                                                                            t                            U                                        ?                                        	                                                                                             o             :             .              ~        =               ^  4                       $      libm.so.6 __gmon_start__ _Jv_RegisterClasses ceil libc.so.6 _IO_stdin_used socket fflush execl wordexp htons fopen strncmp wordfree optind pipe connect closedir inet_ntoa strncpy fork putchar select mkdir realloc stdin _exit tolower popen getpid strdup strftime chmod gmtime feof fgetc fgets strlen send memset strstr strcspn __errno_location chdir init_module toupper getopt dup2 stdout fputc recv fputs memcpy fclose strtoul malloc strcasecmp getpeername opendir bzero __ctype_b_loc sscanf optarg getservbyname stderr gethostbyname freopen strncasecmp strncat fileno pclose usleep chown fwrite fread atoi atol localtime difftime strchr fprintf utime fdopen setvbuf memmove strcmp strerror __libc_start_main ferror setenv ntohs snprintf __xstat __fxstat __lxstat GLIBC_2.0 GLIBC_2.3 GLIBC_2.1                                                                                                                          ii           3          ii        ii        ii            e  b  d   `  $f                   	  
       $  (  ,  0  4  8  <  @  D  H  L  P  T  X  \  `  d  h  l   p!  t"  x#  |$  %  &  '  (  )  *  +  ,  -  .  /  0  1  2  3  4  5  ġ6  ȡ7  ̡8  С9  ԡ:  ء;  ܡ<  =  >  ?  @  A  B  C  D   E  F  G  H  I  J  K  L   M  $N  (O  ,P  0Q  4R  8S  <T  @U  DV  HW  LX  PY  TZ  X[  \\  `]  d^  h_  US    [4 t     ܅ X[5%    %h    %h   %h   % h   %h    %h(   %h0   %h8   p%h@   `%hH   P%hP   @% hX   0%$h`    %(hh   %,hp    %0hx   %4h   %8h   %<h   %@h   %Dh   %Hh   %Lh   %Ph   p%Th   `%Xh   P%\h   @%`h   0%dh    %hh   %lh    %ph   %th   %xh  %|h  %h  %h   %h(  %h0  %h8  p%h@  `%hH  P%hP  @%hX  0%h`   %hh  %hp   %hx  %h  %h  %h  %h  %ġh  %ȡh  %̡h  %Сh  p%ԡh  `%ءh  P%ܡh  @%h  0%h   %h  %h   %h  %h   %h  %h  % h  %h   %h(  %h0  %h8  p%h@  `%hH  P%hP  @% hX  0%$h`   %(hh  %,hp   %0hx  %4h  %8h  %<h  %@h  %Dh  %Hh  %Lh  %Ph  p%Th  `%Xh  P%\h  @%`h  0%dh   %hh          1^PTRhhQVhgUS=( u?,9s    ,,9r([]Ít& '    Ut    t	$ÐUĀD$   D$    D$($}~ E D$   D$D$($x D$   D$D$($uED$E$V  w  D$	   D$D$($uED$E$xW  @  D$   D$#D$($OuED$E$(W  	  D$   D$+D$($uED$E$X    D$    D$   D$    $ D$    D$   D$    $35L$T$$d     D$x?7   |  $    >   [$D$   D$$`uv <$D$   D$$`Vv $D$   D$$`7v D$?ED$E$D$x|$xFt$Le*  $``</u'vD$`D$D$   $`%D$`D$D$   $`$+  u$  /  uBt$)  35L$T$$$  e  u$  4$"  u-  u$  D$@   D$8D$$d;  D$||$|   t9D$D$dD$D$   $$(  D$8$lD  u8$"  tD$   D$$Ht $  D$8$  u$  D$D$8$4E  u:$!  tD$   D$*$s $w  ^tU$C%(  GL  aD$dD$D$   $$'  $      U(\    <    $         (    ,    @    X    D    8    T    H    L    P    4    0    $   4$   0$   T$   tX$   c@$   R$$    A D$   D$    $hD$    D$    $dLD$@   D$    $0D$@   D$    $D$@   D$    $0TD$   D$    $4D$   D$    $D$\$`E} u    E@$            p    D$   D$    $`8D$   D$    $`D$   D$    $` D$    D$    $`D$@   D$    $D$   D$    $D$   D$    $D$$   D$    $t                             D$   D$i$`o D$   D$|$`o D$   D$$`zo D$   D$$^o D$   D$    $DD$   D$    $DD$   D$    $DjD$   D$    $DND$   D$    $D2D$   D$    $DD$   D$    $DD$   D$    $DD$   D$    $DD$   D$    $DD$   D$$D*n D$   D$$Dn H    D    L   @    UD$$D$D$D$	$$&$($X$$$
   |U(  pu$D$D$   $xO  	  $      Ht-HD$$E} ~HE  H   HD$$
tJHD$$t1HD$$tD$$du/$ LLML$T$$R  HtzHD$q$ot2HD$$VtHD$$=u/$=LML$T$$k  $>$\$$$$Zx$u$$$$$D$7$x{$o $l$$I$ =$@ 1$| %$?!$L!$u!$!$!$!$!D$"$tZ0"$\$"$"$`#$#|$#p$$d   $UT$$$$$?$$3$%'$ %$d%$%$&$t&$$$&$&$&$&$    U8E   t$&   t	$u
    A     $  UET$D$$   u~t$&.  E$7E}    E$_     D$    UT$$zh $D$   UT$$^h    t$&  uA D$    D$'$h $D$   D$'$ h    5'D$D$   $$<         U8  p   D$D$   $  $[  0D$   D$D$   D$    $  @D$   D$D$   D$    $  4D$   D$D$   D$    $  0D$M'$H   0D$Q'$+th0D$V'$tO0D$['$t60D$_'$t0D$f'$C  X@D$   T$D$   D$?   $  $   \\D$   D$    $R`   \@D$   T$D$   D$?   $  X$\  t=L  p'D$D$   $$        XD$/   $  EEtt$QXD$@   D$$(e    XD$    D$dD$   D$/   $  ZXD$    D$dD$   D$/   $  XD$@   D$D$   D$/   $b  $d>  tD$    D$`$dnd $  t$D$@   D$D$'$d.  $  tsD$@   D$$d VL  0$  u30'T$D$D$   $$*      I   AL  t)'D$D$   $$      US4  Dv  4$  t4D$   D$'$&c L-   =1    *E(  E(  E(  E(u  E8(i  EC(]  EQ(Q  Ea(E  Er(9  E(-  E(!  E(  E(	  E(   E(   E(   E(   E(   E(   E(   E)   E)   E<)   EM)   EV)|E[)sEk)jE)aE)XE)OE)FE)=E)4E*+E*"E(*E<*EM*Eh*tH4Lp*L$ML$T$D$D$   $ $~  L4*]\$L$T$$D   4  []U8  E    D$D$   $ED$&$  D$x/$  }   $)  ƅ D$   D$:   $  E} y$E} ~dEPD$   D$T$D$    $R  EPD$   D$D$   T$$   $
  $
  D${/$u5$   =HHD$   T$$)_ _D$/$^u5$   <<D$   T$$^ D$/$u5$   LLD$   T$$^ D$/$u5$   PPPD$   T$$<^ rD$/$qu$O@D$/$?u5$   ((D$   T$$] D$/$u5$   ,,D$   T$$l] D$/$u$TD$   T$$.] dD$/$cu5$   88D$   T$$\ D$/$u5$   DDD$   T$$\ E   D$   D$D$/$d&     D$    $!     D$,   ${	  EE   pD$   D$ED$D$,   $  D$$u!D$$  E    EE;E~} $/  $     UH  }u0D$D$?L0T$$($D  u+0D$D$$D  u<0D$D$$Dr  uI0D$D$$DM  uc0D$D$$D(  uq0D$D$o$D  u~0D$D$J@~@0T$$*$D  u$0^$D  u0D$D$$D}  u0D$D$}tL=3  u$0t$0  H   U  D$@   D$    E$t$1  D$@   ED$D$-1$d#    D$   D$61E$#  D$   D$<1$DX t$D1&  D$@   D$    x$D$@   D$    8$D$   D$    8$D$@   xD$D$i1$d"  D$@   8D$D$v1$d}"  18T$xT$D$D$   8$8$88L$T$D$   $f1  18T$D$D$   8$tT$  8$  T8T$$ut$1     :L  1D$D$   $          ÐUVS } u    >E$E    ؉uE $;]|ܸ     [^]UVS } u    >E$2E    ؉uE $;]|ܸ     [^]UHEEԃ} t} t} 
      E   E    ED$D$    E$HE$EE    \EE EE:EuE=E;EuE;E~*EEUEE;E~EE      EE;E|    U8} u
   M  E    E    E$E} 
    !  E$EEE} u
      ED$ED$E$T EEEE  m} ~'EE  %    uE    S} u.EE  %    uE   }uEEUUEEE;E|EE  ED$ED$E$T E$    U} u    }E <'u2E$E <'uE  E${E  E <"u2E$]E <"uE  E$?E      U(} t} t} 
      E    E$EED$D$    E$~E;E}    f} yE    E;E}	EEEE$E;E~#EEUUEEE;E~EE      U(} u    BE    E$BEE    EE ;EuEEE;E|ߋEU} u   E u       ]U   } t} u
   E$EE$EE    E       EEE 8ulEU;E^EUPD$   hD$T$ED$E$hD$E$uEE;EuEEE;EqU8EE} ucE$EE   E    E    1EE :EuEU;EEE;EuEEE;E|ǸUXE E    } t} t} 
     } uE׉EE   E$;EE$-EE    E$HE} u
     E$*E} uE$&     ED$D$    E$bED$D$    E$H}u$E U܉T$D$E$EE܉D$ED$E$}E؃}    E$M+EEU9~E      E   E؍PED$ED$T$D$    E$ED$ED$E$&O ED$ED$E$O EUED$ED$ED$T$E$rED$ED$E$HO ED$ED$E$N } tE$} tE$EU8UEUE} u   BE$EE    EE :EuEEUEE;E|ڸ    U(} u   XE u    GE$EEE <
uEE  ׋EE <uEE  뿐    Uh} t} u
    u  D$,   E$EE    B  EPD$   EĉD$T$D$,   E$D$-   Eĉ$   D$   E܉D$D$   D$-   Eĉ$D$   EԉD$D$   D$-   Eĉ$E܉$hEԉ$]E܉$EEԉ$EE;E~iE;E}a} x[EEEE    EE;E~6Eĉ$Eĉ$EE;E}} xEE    EE;E    UEE} u    GEEEEE :EtEEEE EuӋUE)U(1UT$D$E$,EÐUx  }   $3$EEU1T$D$D$@   $,E$=  v4u1D$D$T$D$   $9A2ML$D$D$T$D$   $#2`T$$wE} t1ED$$E$E$ÐU8  D$   D$    $E$t D$   D$`$J D$   ED$$I $tD$   D$`$I (2T$$~E}     D$   D$    $ED$D$   $W  $@  $$<[um$<]uP$D$   T$D$D$   $R$  <;  <#  <%Y  D$   D$D$   D$    $D$   D$*2$PD$   D$D$ T$$$$$$$X$JD$   D$,2$u+$D$$u  a  D$   D$42$uub</u$!  B2T$D$`D$D$   $$|  D$   D$H2$  $`m`</u3X2T$D$`D$D$   $n1d2T$D$`D$D$   $;$&  D$   D$D$   D$=   $D$   D$q2$PD$   D$D$ T$$<$7$)$$r$$<;tJ<#t?$u-D$D$$j   u    ]E$SE$D   8t2T$D$D$   $$    UhD$   D$2E$   D$   D$2E$uD$    ED$$`@D D$   D$2E$UuD$@   ED$$D D$   D$2E$uD$$   ED$$C D$   D$2E$  E$  D$   D$2E$u1ED$E$-  a  ED$E$  J  D$
   D$2E$YuED$E$;    D$   D$2E$#uED$E$     D$   D$2E$uED$E$     D$   D$2E$uED$E$F  uD$@   ED$E$`	  E}uED$ED$E$k  7
3UT$D$D$   $$m       UED$E$F  ÐU(}    }    $4   ED$4   D$    E$u8$4   oD$4   D$    $EE	E@0EE@0uEUP0ED$   UT$$A EPD$    ED$$@ E@0    U(}    }    $$   ED$$   D$    E$u8$$   zD$$   D$    $EE	E@ EE@ uEUP ED$   UT$$@ EPD$   ED$$@ E@     U(}    }    $  ED$  D$    E$
u8$  D$  D$    $E#EE   EE   uEU   ED$   UT$$ ? E   D$   ED$$ ? Eǀ       U(} t} t} u    cEHED$E$u&E   ED$T$E$>    E   E} uE      U((3$c$.3$A3E} tlE   UX3L$T$$<E   EE$u!E   UX3L$T$$E   ue3$U(}    }    $  |ED$  D$    E$οu8$  ID$  D$    $藿E#EE   EE   uEU   ED$   UT$$< E   D$   ED$$< Eǀ       U(} t} t} u    cEHED$E$u&E   ED$T$E$P<    E   E} uE      USd}   }   $d   ED$d   D$    E$Eu8$d   D$d   D$    $EE	E@`EE@`uEUP`ED$    UT$$d; EP D$@   ED$$G; E@`    $t D$   ED$$;    $ËE$贾=     D$@   D$    E$(l3UT$D$D$@   E$D$   ED$$buBD$   D$p3$: D$   ED$$: 
d[]U($u3芿EEH U3L$T$$'E@`EEH U3L$T$$E@`uU($3EEHU3L$T$$觽'E@0EEHU3L$T$$~E@0uU($3谾EEHU3L$T$$:'E@ EEHU3L$T$$E@ uU(} t} t} u    WEBED$E$
u#EP ED$T$E$8    E@`E} u    U(} t} t} u    WEBED$E$蒼u#EPED$T$E$"8    E@0E} u    U(  } t} t} u
      D$   ED$$7 D$3$载E} tEƄ E   E$AE}~YEPE<*uHEET$D$$vu_EPED$T$E$&7    UED$$Zu$EPED$T$E$6    E@ E} C    U(}   }   } 
  $  舻ED$  D$    E$ڸ u8$  U  D$  D$    $裸 E# EE   EE   uEU   E   D$   ED$$5 ED$   UT$$5 E   D$   ED$$5 Eǀ       U(} t} t} t} u    x EcED$E$覹uAE   D$E$苹u&E   ED$T$E$5    E   E} u    US$$3E E:E   UE   3\$T$L$$轸E   E} u$[]U(} t} u    [ EFE   D$E$諸uE   ET$D$E$pE   E} u   U(}    }    $d   E}    D$d   D$    E$1ED$    UT$$3 EP D$@   ED$$3 E@`    u
E/E	E@`EE@`uEUP`U(} t} t} u    cENED$E$au/} t"} tEP ED$T$E$2    E@`E} u    US   E    } t} u
       E  E$@tED$D$3E$2 E   E$
uED$E$蔶u       EEX } t$4.4M04\$D$L$T$D$d   E$ED$ED$E$U2 EE@`E} YEĔ   []U(} t} t} u    fEQED$E$ǵu/} t"} tEP ED$T$E$K1    E   E} u    U(}    }    $$  E}    D$$  D$    E$=ED$    UT$$0 EP D$   ED$$0 Eǀ       u
E8EE   EE   uEU   U(E    E   EE$EE} uÐU(D$
   D$T4E$uN  E   D$   D$_4E$uRX  E   D$   D$l4E$ôuJ  E   D$   D$4E$藴u
  E`D$
   D$4E$nu
e  E74UT$D$D$   $$lE    } uL=   u
L  EU(D$
   D$T4E$uM  E   D$   D$_4E$軳u2W  E   D$   D$l4E$菳u  E   D$   D$4E$cu
\  E`D$
   D$4E$:u
ie  E74UT$D$D$   $س$8E    } uL=   u
L  EU5ET$D$E$胳   UEE} u   F}~}u   3EEE :Eu   E} t
E uڸ    UHE    E    E    E    E    } t	E     } u
      } tD$    E$誮EE    EE3E D$E$E} t
EEEEEE uËE)EEUE} tEU} tE;E~
       } u#ED$ED$E$	,       EE؋EE   E D$E$ZE} tuE < u} t+       EE   ,E и5T$D$D$   Eԉ$yED$EԉD$E܉$EEEE܈EEE IE     US$E$8EEE} u
      EE`  E <%uL5 U %   t& U %   uEEE   E <0uHE <at'E <dtE <AtE <DuEEE   E </~#E <9E 0E $17E </~E <9E 0E $7EEEEE E  } tUE)ȉEE$[]U(EEfE  E E    E    lE <%uOED$   ED$E$蠬ED$   UT$$覬EEEEEEEEEE uÐU(E E 	ЈEE E 	ЈEE E 	ЈEE ED$ED$E$( US4E E  E    E       EE E}=uED$ED$E$)   ED$$轩E}    EUѺ(ӉڈTEEED E}~EP)ȉE} u2ED$ED$E$E EEEEEEEEE E$ت4[]U(E EE E 	E}~0E     E 	=   E}~E ?=   EE UET$UT$$& U(E    E    E  oE    E    3EUUTEE t
EEED E}~ǃ} t ED$ED$ED$E$EE uÐU8EfEE$ԫE} u
   D$    D$   $   蕨E}ubfE E$fEE@  ED$   E$蜪ED$   D$E$BuEU(EE}~	EEED$D$    E$E    iD$    D$   ED$E$葦t6E<
uEEUE1EtEEUm	EEE;E|EUWVS   E            TMUEPHËTEЃ)к   ׉	TEE܃}~	EE܋ED$D$    E$H$QELE    N  EPLD$D$    D$    TD$$誧	  D$    D$   E׉D$E$ tQE<
u} uEEEU׈   E<~ H$裧EEU׈E mE   D$q̣ u=HDT$$=EtW$   :6HDT$$ EtEE;EE؁   [^_]U8EE}~	EEED$D$    E$?EEfE fE E       D$    D$   ED$E$蟣tTE<
u} uEEEUME~&Eи5T$$kEEUm	EEE;EmEÐU(ED$E$H  E}    E(  uE$  E(  uE$  E(  uE$w'  E(  uE$R#  E(  tE,  5T$$茤E$&  E$f$5踥    U$5蟥    U8ED$E$+  E}    E  uE$-  E  uE$1  E  uD$   D$6E$ D$   D$6E$ E  t0E  5T$$膣6UT$$r"<6UT$$\$`6螤    U(D$    $    *  E}    Eǀ      Eǀ     Eǀ     EED$  T$$ E  D$  D$6$ E  uE$,  E  uE$~0  E  t(E  5T$$c$`6襣    ÐUWVS<  E$%Eظ        M܉UE؍PHËE؉Ѓ)к   ׉	EEԃ}~	EEԋED$D$    E$$IEǅ    E    >  E؍PD$D$    D$    D$$蘡   D$   EωD$E؉$֟E} tFE<
uEEUψE   $裡EτtEEUψm
       $oʝ u=T$$;Et    W$   86T$$Et        EE;EE<  [^_]U   } t
E u$6Y    $  E$訡yB6T$D$D$d   t$誡t$      E؉$WyX螜6T$D$D$d   t$Yt$E$E$赟    l  薠E} yn86T$D$D$d   t$t$QE$ZE$OE؉$DE܉$9      } U  E$E܉$} tE$>    EE    EE8EU)ȉEUEL$T$$lE} ~EEE;E|E$藞} xE;E   } y?7ML$T$D$D$d   t$Οt$,E;E};87UT$UT$D$D$d   t$苟t$E؉$      ED$e7$5  E$ŝE؉$躝Et|ED$    $`tZ7h7T$D$D$d   t$t$PE$YE܉$N$   RE$7E܃t}ED$   $ܛtZ貙7T$D$D$d   t$mt$E$ԜE܉$ɜ$   ͚E܉$貜D$    ED$D$7D$7$7臚y87T$D$D$d   t$ٝt$7$   OUE$ÐU(E    ~SEEEED$   D$E$K E       $,   #EE       E$ueED$$& E} uIEPEEPEEP EEP$EED$   D$E$ }8uE$d   _E   }~E   } KE$dEU   ]UH} t} u
       D$7E$vu   qD$7E$XtD$7E$Au>E܉D$ED$ED$ED$E$uE%   u       U8EEE$ЗEE1   7E      E   |E   sE   jE   aE   XE   OE   FE	   =E
   4E   +E   "E   E   E   EEUED$D$    E$E=}"  =}9=j   =j=tjQ  =y*  =|  6     =~     te  ED$D$P8E$,   ED$D$\8E$    ED$D$8E$    ED$D$8E$    ED$D$8E$    ED$D$8E$ vED$D$9E$u ZED$D$$9E$Y >ED$D$D9E$= "d9EML$T$D$E$   U(} t} ~} u
       ED$D$    E$6E    E    'EE $
EEi   EE}~ӋE%  )ЉEx9EML$T$D$E$`D$0   D$    E$   U  D$   D$    E$zD$   D$    E$_D$   D$    v$AD$   D$    p$#D$   D$    j$D$   D$    h$D$   D$    f$ɓED$D$    E$诓D$   D$    f$葓$վM  ED$ED$ED$ED$E$NEȋE=   t0=   =   t==   t;=   t=   t+E   "E   E   E   E   }   E$BD$   pT$D$'  D$E$E$D$   jT$D$'  D$E$谼p$QE荅j$@Esи|9T$D$D$   h$Еrи|9T$D$D$   f$裕h$ՓEf$ēEEčPEEܸ9U܉T$D$D$   E$ID$0   D$    E$EPEEค9UT$D$D$   E$D$0   D$    E$X$9E̋EUẺE丑9UT$D$D$   v$蒔D$0   D$    v$9EvL$ML$ML$T$D$E$AE    E    E   EE EԃE}~EԉЃ)ЉEи9UЉT$D$D$   E$ٓUE   ÐU  E    $P  蜒E}   E     Eǀ      Eǀ  P   Eǀ(      Eǀ8      Eǀ<      Eǀ@      ED$  D$    $芏E  D$  D$    $jE  D$  D$    $JE  D$  D$    $*E  D$  D$    $
E  D$   D$    $E,  D$  D$    $ʎEǀD      EǀH      EǀL      EP  D$@   D$    $胎E  D$@   D$    $cE  D$   D$    $CEP  D$   D$    $#E  D$    D$    $E  D$    D$    $E  D$@   D$    $ÍEǀ0      Eǀ4          B  E?73  :  $    豑$D$   D$9$$uE       $D$   D$9$uE       $D$   D$9$Ə   E        $UD$   D$$a
 g$U  D$   D$$=
 C$U  D$   D$$
 Eǀ     Eǀ@     D$9ED$E$^E}E$st2Eǀ(     E,  D$   D$9$	 u  E$E썐  ED$   T$D$   D$:   $ED$   D$9$EEHEPD$   D$D$?B L$$芵$腳D$   D$9$荎u0D$   D$D$?B D$   $*E  D$   D$D$   D$/   $/E  D$   D$9$E}    E  D$   D$$ E썐  D$   D$D$   D$:   $譱$U쉂  E  D$   D$D$   D$:   $dED$   D$9$VE} ~1E  UD$   D$D$?B ED$$ճE  $t
Eƀ  /E    E  $踴t2Eǀ(     E,  D$   D$9$    E  T$$ uo8:E  T$$kU쉂0  E싀0  tE쉐8  \Eǀ(     E,  D$   D$<:$G -Eǀ(     E,  D$   D$l:$ EU$|;aE;T$$E  ;T$$E@  ;T$$ǉE  ;T$$證EP;T$$薉E  <T$$|E  7<T$$bE  T<T$$HE  q<T$$.E8  <T$$E<  <T$$E0  t$E0  $̅<D$$ˈ$<E4  t$E4  $菅=D$$莈$0=Љ$P=ĉE(  S=T$$ZE,  p=T$$@$P=脉ED  =T$$EH  =T$$ EL  =T$$EP  >T$$̇E  0>T$$貇E  X>T$$蘇EP  >T$$~E  >T$$dE  >T$$JE  >T$$0$?t    U$?D$S?$$^?Fo?D$|?D$?D$?$ц$?$?	$?$@$L@$@ه$@͇$LA$
   uU8E  $|E} uAEǀ(     E  AU,  L$D$D$   $   D$    D$   $   U<  E<  u2Eǀ(     E,  D$   D$A$    fE E  $fEE@  ED$   E$̆UE<  D$   T$$lu-Eǀ(     E,  D$   D$A$      U(  D$  D$    $,E tt"@D$  D$A$ >D$  D$A$  D$  D$A$  E  D$  D$$  D$  D$A$  $σE<  D$    T$T$$6D$  D$    $(E  BT$D$D$  $蜅$NU<  D$    D$D$$跄D$  D$    $詁D$  D$B$  $݂U<  D$    D$D$$FE uD$  D$    $.E8  "BT$D$D$  $袄$TU<  D$    D$D$$轃D$  D$    $诀6BD$S?D$D$  $($ځU<  D$    D$D$$CE    rD$  $ME0  D$D$   $t5$XU<  D$    D$D$$E0  $`u    USTD  E      D$  ӻ$襂E<  D$D$   ӻ$Eӻ$豀E؃}u#D$SBӻ$Bu0E    '}u!D$?ӻ$uE    E  uE؉D$ӻD$E$  ӻ$GӻD$E$  } E   E    E  D$   D$VB$I    D$  ӻ$vE<  D$D$   ӻ$Eӻ$裭ӻ$Nӻ$E} uE    E    S  D$@  Կ$E܋U)ȉE}   ~E   UE<  D$    T$ԿT$$+}E؋EE܋E؉D$ԿD$E$N  EEED$E$  E;E   D$  ӻ$LE<  D$D$   ӻ$ED$SBӻ$ tUEǀ(     Իӻи`B],  L$T$D$D$   $A       E;E}
} }    D$@  Կ$E<  D$    D$@  ԿT$${E؋EEED$E$  } ~E؉D$ԿD$E$   } x    TD  []UE4  tE4  $|E<  $}    UE  $ަukBE  T$$|U4  E4  u<Eǀ(     E  BU,  L$D$D$   $~    UE4  u' ET$D$D$   E$}'E4  ET$D$D$   E$|    U8  D$  $}D$   D$D$   D$:   E$̡D$   D$D$   D$:   E$蟡$cD$   D$BE$|u(EP  D$@   D$$  P  D$   D$BE$|u(E  D$@   D$$@  	  D$   D$BE$P|u(E  D$   D$$    D$   D$BE$	|u(EP  D$   D$$  {  D$   D$BE${u(E  D$    D$$k  4  D$
   D$BE${{u(E  D$    D$$$     D$   D$CE$4{u(E  D$@   D$$     D$   D$CE$zu$yUD  nD$   D$CE$zu$yUH  6D$   D$%CE$}zu${yUL      UH]E@     E4     $   w $wEH  ~lE    EUmEH  EExC]EH    H
E
,CE\$T$L$$}xPCUT$$gx $Zw    ÐU(E    $  yE}   Eǀ     Eǀ      Eǀ      Eǀ      Eǀ      E  D$  D$    $vED$  D$    $uE  D$  D$    $uE  D$  D$    $u       E?7   Ct  $    y$U  D$  D$$     $U  D$  D$$  b$ED$  T$$  CEǀ     Eǀ     Eǀ      Eǀ     Eǀ      D$CED$E$uE}E  $vE} ~&EPE  </uEPEƄ   EUxE  uAE  $蚟t-Eǀ     E  D$  D$lD$  E$^t-Eǀ     E  D$  D$D$}  E     E     E  UT$$K  uME%   = @  tzEǀ     E  DU  L$D$D$  $v<Eǀ     E  DU  L$D$D$  $vE     EUT$$  uYDET$$KtU  E  u\Eǀ     E  D$  D$D$8  -Eǀ     E  D$  D$D$	      U$EPuE  !ET$$sE  >ET$$sE  [ET$$sUxET$$sE  ET$$sE  ET$$jsE  t$E  $<pED$$;s$E}t$FqtE  FT$$sE  4FT$$r$F1t$QF%t    UTFD$F$r$FsFD$FD$FD$F$r$Fs$Fs$Gs$XGs$Gs$
   JpUE  tE  $cq    US     ED$D$$J  uN u
    &  Eǀ     E  D$  D$G$     u
      D$@   D$    $o=   v;  H
¸GT$D$D$@   $s+¸GT$D$D$@   $r0t5      $dp </tXE  $7t!GL$T$$rpED$$<  ux       E  $ߙtGT$$$pED$$  u-    gHL$T$$oE  D$D$   D$   $qE}       Ą  []U(EEUEPE@ </tE@ <\u-E@E@ </tE@ <\tՋE   ЋEPE   EP EdD$   $Z  EPElD$   $<  EPEtD$   $  EPE|D$   $   EPE   D$   $   UBEI  D$   $   UB$EQ  D$   $   UB(E   D$   $   EE    E   E EE} muE   EE   E )EE} muE   EE;Eu       UE    E    <EE E} t%}/~ }7E    E0EEE;E|EUEE}/~}7       USA  D$  D$    $IkEPE  (HT$L$D$D$  $nD$   D$    S$jE@D$/   $ؕEEHE@D$   ST$L$D$/   $E  $u#E  SD$$n   E     E@E@ML$T$$  u
      .HT$$kE؃} uVEǀ     h $iUJ4H]  D$L$T$D$  $fm    p  E      EPEԉ)ȉEE= @  vE @  E܉E?E%  )ЉE} t   +EEE܋EEEE܋E܉EE  E܉T$D$D$   Ӿ$lE} yLEǀ     g $h\HM  D$T$D$  $ql    {  EEԋE  $u#E  SD$$l   E  uyEU؉T$D$D$   Ӿ$jE} yLEǀ     f $CgHM  D$T$D$  $k       E  $CuE  SD$$ku9E  u+ ET$D$D$   Ӿ$iEUԋE@9E  u'E؉$mhED$ED$$     A  []U8  E  u
      E@E@ML$T$$   u
       E  ulD$  D$    $fEPE  (HT$L$D$D$  $2jE@D$$zeED$ED$$     UH  D$  D$    $0fE  (HUT$L$D$D$  $iD$/   $EE   $  D$  D$    $eED$D$H$ED$  D$ED$D$    $蜏E    E  u9} ~ED$$;dED$  $ dE} t_c tSEǀ     c $cHM  D$D$T$D$  $_h    EE;E   U(EPE@T$D$E$gE@D$E$d$    fEE@EED$E$}e   ÐU8  D$   D$D$H$du0HD$D$   $g$    _D$    D$D$I$d贫u0 ID$D$   $*g$芕       US   D$   D$D$H$dIu3HD$D$   $f$      </   $`Nd`</u3gIT$D$`D$D$   $Of1tIT$D$`D$D$   $fD$   D$$  $  u=IT$D$D$   $e$#      D$    D$D$I$du3 ID$D$   $fe$Ɠ    0  D$   D$    $aD$   D$$  $b</u$bƄ XD$/   $ EE     XD$   T$UT$D$/   $RIT$T$D$D$   $WdD$   D$$7  E܃;Et<.u1IT$D$D$   $co    $  u1IT$D$D$   $c,    EE܃;ETT$$  E苅d%   = @     D$   D$    $_D$   D$D$7J$d莧$Ǌ   $`Í$`=  w>D$   D$GJ$F  D$   D$$&  t3LJT$D$D$   $vb$֐xJT$$#`E}   D$.   $艉ED$   D$ED$D$.   $ÅD$   D$D$`$D聉tht?|JT$D$D$   $a$$D$   D$$Dg  Dt;JT$D$DD$D$   $-a$荏t$JxE$\TT$$7  E苅d%   = @  @  } x~@$    i_9}8T@$D`EUKT$D$D$   $D]`t$KĎvt$@K誎$   ~t$cK艎D$   D$    $_\VED$D$  D$   $_E} ~( ET$D$D$   $7^E$]t\tKT$D$D$   $o_   HKT$D$D$   $A_   t$K葍      []U(} u    0E    E$\E} tE   E$G]EUxE    ED$E$;  EE%   = @  uE%   =   tE   EU  $݌D$   D$    $ZD$   D$D$K$d薢$υtL         t$L^t$GL3  D$   D$$D  t$K
-tt$@K$    |$0L\   ÐU0       ]UWVS|}  ]M   t
t
fǉ    ރt4
f4t
	`NT  t
t
fǉ    ރt4
f4t
PE   ׉
ƅ
ƅ.ƅcƅoƅnƅtƅeƅnƅtƅ ƅ{ƅ
ƅ	ƅmƅaƅrƅgƅiƅnƅ-ƅtƅoƅpƅ:ƅ0ƅpƅxƅ;ƅ
ƅ}ƅ
ƅ
ƅ.ƅsƅtƅaƅtƅuƅsƅ ƅ{ƅ
ƅ	ƅpƅaƅdƅdƅiƅnƅgƅ-ƅtƅoƅpƅ:ƅ9ƅpƅxƅ;ƅ
ƅ}ƅ
xQ   ׉f
| T  ׉މ󥍅' _U  t
t
fǉ    ރt4
f4t
<c:   ׉f

d/   ׉މ󥍅@e  t
fǉ    ރt4
f4t
 g  t
t
fǉ    ރt4
f4t
 kZ!  L$T$$$V4`   ׉

  t
t
fǉ    ރt4
f4t
  t
t
fǉ    ރt4
f4t
 u   ׉
f   t
fǉ    ރt4
f4t
   ׉f
@O  t
t
fǉ    ރt4
f4t
0D$]D$D$   D$@L$DL  0D$	D$D$T  D$PL$TLb  0D$D$D$  D$^L$bL3  0D$D$D$>   D$^L$jL  0D$xD$D$>  D$PL$rL  0D$|D$D$
  D${L$~L  0D$'D$D$U  D$@L$Lw  0D$<D$D$   D$@L$LH  0D$D$D$   D$@L$L  0D$D$D$  D$PL$L  0D$D$D$  D$^L$L  0D$D$D$Z!  D$^L$L  0D$4D$D$]   D$@L$L]  0D$D$D$
  D$@L$L.  0D$D$D$  D$PL$L  0D$D$D$  D$PL$L  0D$fD$D$  D${L$ M  0D$D$D$~  D$^L$Mr  0D$D$D$O  D$@L$MC  E    0E+ED$$QuEEE@XE} uσ}    ED$   D$D$E@P@t$(Mπht$LM赀$   p E@PE@TL$T$D$   $PuDNL  pMD$D$D$   $Q$6    $M#   |}  [^_]U($\   PED$\   D$    E$M0u8$\   RP00D$\   D$    $M0E0E	E@XEE@XuEUPXEPD$@   ED$$  ED$   UT$$  EUPPE$OEPTUE@TT$UT$$1NE@X    U(0EYED$E$Nu7EPPEEPTEED$   D$E$;     E@XE} u    ÐU8  \g  \D$&   $JwEE    7  D$   D$    $$LEH\D$   T$L$D$&   $[sD$   D$    $KD$   D$D$   D$=   $sD$   D$    $KD$   D$D$   D$=   $rD$$聟D$$iD$$EE;E   UWVS,        R  L$T$$Kx9"  ׉މ󥍅Nm  t
t
fǉ    ރt4
f4t
w ]  t
fǉ    ރt4
f4t
hk   t
fǉ    ރt4
f4t
[z  t
t
fǉ    ރt4
f4t
$\   K44@X    4@PR  4 PT4D$   T$$_H4D$?   D$$=H4$\   KCX4@X@X    4@X@P  4@XxPT4@XD$   T$$G4RXD$?   D$$G4XX$\   JCX4@X@X@X    4@X@X@Pl  4@X@XPT4@X@XD$   T$$@G4RXRXD$?   D$$G4@XXX$\   ICX4@X@X@X@X    4@X@X@X@P  4@X@X@XwPT4@X@X@XD$   T$$F4RXRXRXD$?   D$$kF4@X@XXX$\   1ICX4@X@X@X@X@X    4@X@X@X@X@P  4@X@X@X@XhPT4@X@X@X@XD$   T$$E4RXRXRXRXD$?   D$$E4@X@X@XXX$\   oHCX4@X@X@X@X@X@X    4@X@X@X@X@X@P  4@X@X@X@X@X[PT4@X@X@X@X@XD$   T$$E4RXRXRXRXRXD$?   D$$DD$   D$    $ED$   D$$襃D$$Hu(a  D$@   D$$R  %  D$$Hu(8e  D$@   D$$     D$
$eHu(4  D$@   D$$     D$$#Hu%  D$@   D$$  bD$$Gu%e  D$@   D$$M  #a  D$@   D$$(  t$!u$Dnt~D$   D$<$D  D$   D$E$D  D$   D$_$D  >]$   @e4D$$dp  {D$   D$<$Di  D$   D$E$DM  D$   D$_$D1  L3  \$    d$}jEt$at   ,  [^_]USc  E   D$   D$$q  D$
   D$$p  $`PCD$D$`$p  $,CD$D$$p  $CD$D$$
zp  D$   L$vL$BD$LD$$<p  $BD$D$$'p  E    D$@  D$    L$	AD$   LD$D$3$:L$%ltE
D$   L   D$D$>$:諈L   $ku-L   D$$  E}u
EE}   ǅ  ǅ   ǅ  E    D$   L   D$D$G$:	D$   L,  D$D$Q$:އD$   L0  D$D$\$:資D$   L (  D$D$f$:與u+D$   L (  D$D$p$:YD$   L   D$D$z$:.D$   L   D$D$$:D$   L   D$D$$:؆D$   L4  D$D$$:譆D$   L   D$D$$:肆D$   L    D$D$$:WD$   L $  D$D$$:,D$   D$    L$>D$   LD$D$$:L$!iuL$?D$   D$    L$=D$   LD$D$$:~L$huL$5?D$   D$    L$1=D$   LD$D$$:L$MhuL$>D$    D$    L$t  uEEtxJED$   D$${k  HE    D$   D$$Vk  #E    D$   D$$1k  }   D$LD$D$   L$p  E}   L$  L   $7g  D$   L   D$L$Z  D$     D$    D$    D$    D$    D$    LD$D$   L$p  L$=EL$Wm} uBtpLT$D$D$   $>$m74LT$D$D$   $z>$lt$XlL$lD$L$c9E} uCE    LT$D$D$   $=$Xl  D$!   D$    +$):D$   D$    +$:E    t$kD$   D$    +$9D$   D$    +$9D$   D$    +$9E$$;  D$   ED$D$   +$軘  t+$DkD$   +D$D$   D$:   +$p`D$   D$+$bdPD$   +D$D$ T$+$b+$`+$`+$0b+$"b+$`+$`D$+$a<u,D$!   +D$+$͵  E   8D$+$<+$U9Í+$E9=  +$cuD$   D$+$ĵ  D$   +D$+$褵  t$ri}uqD$   D$$.f  +$8D$+D$$)f  +$n8D$+D$$Ae     E    D$    D$T$)e  D$    D$T$Ae  D$   D$$~e  [D$   D$t$)`e  D$   D$t$ADe  D$   D$$(e  E    D$   D$    +$6D$   D$    $5D$D$D$ D$$$轛EE|  $  D$   D$+$諳  D$   D$+$荳  D$   D$+$o  D$   D$+$Q  D$   D$+$3  D$   D$+$  D$   D$+$  D$   D$)+$ٲ  D$   D$+$軲  D$   D$4+$蝲  D$   D$Z+$  D$   D$    L$A4eT$D$D$   L$7D$   LD$+$  D$   D$h+$  D$   D$+$ܱ  D$   D$+$辱  D$   D$p+$蠱  D$   D$Z+$肱  D$   D$    L$D3$=   u@D$   D$L$蹰  D$   LD$+$  I$T$D$D$   L$n6D$   LD$+$ΰ  D$   D$h+$谰  D$   D$+$蒰  D$   D$+$t  D$   D$+$V  D$   D$Z+$8  D$   D$    L$1 =   tQ=   =      =   t   =   tL=   te   D$   D$L$>  ~D$   D$L$  ^D$   D$L$  >D$   D$L$ޮ  D$   D$L$辮  D$   LD$+$  D$   D$h+$   D$   D$+$  D$   D$+$Į  D$   D$+$覮  D$   D$Z+$舮  D$   D$+$h  D$   D$h+$J  D$   D$+$,  D$   D$)+$  D$   D$5+$  D$   D$$?^  D$   D$V$X^     D$   D$$?a^  D$   D$m$XE^  D$   D${+$]  D$   D$$?	^  D$   LD$E$×L$T0D$LD$$X]  D$   D${+$ܬ  +$0D$+D$$}~]  }uD$   D$$\]  D$   D$$>]     Ąc  []USt  E   D$   D$    <$.D$   D$    <$-D$   D$    <$-D$   D$    <$-D$!   D$    $-D$   D$    ?J$-D$!   D$    J$c-D$!   D$    I$E-D$A   D$    I$'-D$    D$    s$	-D$    D$    S$,D$   D$    N$,D$   D$    J$,D$   <D$$GkD$   <D$$)kD$   D$<$/uE   E    D$@  D$    <$%,D$   <D$D$3$:t<$AWtE
D$   D$    <$+D$   <   D$D$>$:s<   $Vu-<   RD$$  E}u
EE}   ǅ  ǅ   ǅ  D$   <   D$D$G$:sD$   <,  D$D$Q$:rD$   <0  D$D$\$:rD$   < (  D$D$f$:ru+D$   < (  D$D$p$:^rD$   <   D$D$z$:3rD$   <   D$D$$:rD$   <   D$D$$:qD$   <4  D$D$$:qD$   <   D$D$$:qD$   <    D$D$$:\qD$   < $  D$D$$:1qD$   D$    <$
)D$   <D$D$$:p<$&Tu<$*D$   D$    <$(D$   <D$D$$:p<$Su<$:*D$   D$    <$6(D$   <D$D$$:p<$RSu<$)D$    D$    <$_  uE<$)D$<D$$V  } M  }  <RT$$  E} t;"& $h&D$T$D$   <$*E    BR%   =   t0<T$D$D$   <$*E    }J  $`4(`</u3<T$D$`D$D$   <$5*1<T$D$`D$D$   <$*S$'Í<$'=?  w>D$    <D$S$7  D$    D$S$  t$,Wt<$WD$<$$EE    }   E    W$ $$<D$T$D$   <$
)t  ED$D$   $y  ;  S$&Í$&=?  wK t>D$    D$S$  D$    D$S$  D$   D$D$   D$:   $LD$   D$$OPD$   D$D$ T$$}N$xL$jL$M$M$@L$2LD$N$'u%D$   D$?J$^     D$T$'u"D$!   D$J$  yD$\$w'u"D$!   D$I$  =D$i$;'u#D$A   D$I$觠  E$$?J$3Nu$J$!NuI$Nt%E    D$   D$~<$6  }  $`#`</u;D$`<T$D$`D$D$   <$%9D$`<T$D$`D$D$   <$%S$P#Í<$@#=?  w\D$    D$S$՟  D$    <D$S$赟  D$    D$S$藟  t$nSt<$WSD$<$ EE    }   E     $ D$T$D$   <$$   ED$D$   $     $0PD$($$uE   S$!Í$!=?  wN tAD$    D$S$V  D$    D$S$8  E$!} u+}u%E    D$   D$P<$q  }  E    IT$D$`D$D$   <$/#<D$<D$D$   <$S  u*E    D$   D$<$ܜ    S$ Í<$y =?  w\D$    D$S$  D$    <D$S$  D$    D$S$М  t$Pt<$P<$聁  <   $I   D$   <   D$<$֛  D$     D$    D$    D$    D$    D$    <D$D$   <$qS  <$D$<$E} u.E    D$   D$<$4  v  D$   D$    $mD$   D$    $OD$   D$    $1E$  D$   ED$D$   $]|   D$   D$D$   D$:   $)DD$$ uE   S$Í$=?   D$    D$S$`  D$    D$S$B  } u7E    <$NGuD$   D$<<$|  }  I$G  S$=?  wD$    D$S$覙  D$   D$    <$h$``</unIT$IT$D$`D$D$   N$IT$D$`D$D$   J$lIT$IT$D$`D$D$   N$EIT$D$`D$D$   J$S$ÍN$=?  w\D$    D$S$K  D$    ND$S$+  D$    D$S$  S$?ÍJ$/=?  w\D$    D$S$ė  D$    JD$S$褗  D$    D$S$膗  JD$N$L  u%E    D$   D$<$Ŗ  }B  S$m$`_*=?  wZD$    D$S$  D$    D$`S$֖  D$    D$S$踖  ?`T$$E} tgED$$
   &A?JT$D$E$GIT$D$E$jE$E$9E     $`D$T$D$   <$y}   JT$?JT$D$D$   <$<<$D$<D$$	^F  S$4=?     D$    D$S$Z     <$wBtD$   D$I<$襔  X<T$D$D$   <$|<$.D$<D$$	E  D$   D$V$	E  E    D$<D$D$   <$J  u#D$   D$<$  ^  t$7Ht<$ H<$y  <   $CA  D$   <   D$<$f  D$     D$    D$    D$    D$    D$    <D$D$   <$K  <$(E䍅<$cG} uBtp<T$D$D$   <$<$G74<T$D$D$   <$<$FD$<$E} uE      D$!   D$    $D$  D$    $qD$   D$    $MD$   D$    $/D$   D$    $E$X  D$   ED$D$   $=s.  D$   D$D$   D$:   $	;D$   D$$>PD$   D$D$ T$$=$;$r;$<$<$H;$:;D$$u,D$!   D$$f  E   OD$$-$Í$A=  D$  D$$o  D$   D$    <$1D$   <D$D$   D$,   $i9D$  <D$$  D$  D$$  D$   D$    <$D$   <D$D$   D$,   $8D$  <D$$u  D$  D$$W  D$   D$    <$D$   <D$D$   D$,   $Q8D$  <D$$  D$  D$ $ˎ  ;$;t!D$D$$f^?     $D$D$$f1?  ctD$D$   <$<$xD$<D$$	>  D$D$$f>  S$$;tD$   D$V$\>  QlST$D$D$    s$)s$D$sD$$\K>     t  []US  E    D$   D$    $$D$@  D$    8$D$   D$    8$D$   D$    8$D$   D$    8$D$   D$    8$D$!   D$    $pD$   D$    8$RD$   D$    $4D$   D$    $D$   D$    $D$   D$    `$D$!   D$    `$D$   D$    @$ǅ  ǅ   ǅ  E    D$   D$I$  E    E    E    E    E    E   D$   D$$KD$   D$$U   E   D$   D$    $D$   D$$`KD$   D$$u	E   TD$   D$$u	E   )D$   D$$uE   zY}    D$   8D$$ JD$   D$    $D$   D$D$3$:SD$8$t/E   &D$   8D$D$3$:xS8$6<  $``</t38T$D$`D$D$   8$18T$D$`D$D$   8${8T$D$D$   $RT$$B  Eԃ} t+0T$D$D$   $I$=Eԃ} t	E   )lT$D$D$   $} uE    E    } u5D$   8   D$D$>$:Qu)} t#D$   8   D$$>U} u5D$   8   D$D$G$:Qu)} t#D$   8   D$$G;U} u5D$   8,  D$D$Q$:%Qu)} t#D$   8,  D$$QT} u5D$   80  D$D$\$:Pu)} t#D$   80  D$$\T} t(D$   8 (  D$$fVT   D$   8 (  D$D$f$:APuXD$   8 (  D$D$p$:Pu)} t#D$   8 (  D$$fS} u5D$   8   D$D$z$:Ou)} t#D$   8   D$$zlS} u5D$   8   D$D$$:VOu)} t#D$   8   D$$S} u9D$   8   D$D$$:N   } t|D$   8   D$$R8   $	Ƅ8 8   $1u"8   $8</t} u9D$   84  D$D$$:=N   } t|D$   84  D$$Q84  $NƄ 84  $ 1u"84  $</t} u5D$   8   D$D$$:Mu)} t#D$   8   D$$:Q} u5D$   8    D$D$$:$Mu)} t#D$   8    D$$P} u5D$   8 $  D$D$$:Lu)} t#D$   8 $  D$$~PD$   D$    $r} u0D$   D$D$$:OLu$} tD$   D$$P$`/u$D$   D$    $} u0D$   D$D$$:Ku$} tD$   D$$tO$.u$FD$   D$    $B} u0D$   D$D$$:Ku$} tD$   D$$N$0.u$D$   D$    $} u0D$   D$D$$:Ju$} tD$   D$$DN$-u$Eȍ8$u-   D$   8D$$MD$   8D$$MD$   8D$$MD$   8D$$MD$!   D$$uM}   }   $``</u)D$`D$D$   $'D$`D$D$   $`T$$蚄  Eԃ} D  (T$$>E؃}   *U؉T$D$   D$   $FU؉T$D$   D$   $M8T$D$E؉$d8   T$D$E؉$w8 (  $t+u${8 (  T$D$E؉$<8   $9+u$8   T$D$E؉$8   $*u$8   T$D$E؉$8   $*u$8   T$D$E؉$8   $*u$8   T$D$E؉$P8   $M*u$8   T$D$E؉$84  $*u$84  T$D$E؉$ 8    $)u$8    T$D$E؉$ 8 $  $)u$38 $  T$D$E؉$d =  tJT$D$E؉$9 =  taT$D$E؉$ txT$D$E؉$EȅtUȸT$D$E؉$8,  $(u$8,  T$D$E؉$80  $(u$80  T$D$E؉$MU؉T$D$   D$   $E؉$tE     $D$T$D$   $C 9E    U $D$T$D$   $ D$   D$V$	6+  D$   D$V$\+  D$    D$%8D$$39  D$    D$>8D$$J9  D$   D$V$S*  i  } C  D$   8   D$$_L:D$    D$+   8   $*D$   D$$h:t%D$   D$8 (  $x  D$   D$$r9t%D$   D$8   $x  D$   D$$}}9t%D$   D$8   $>x  D$   D$$69   D$   D$8   $w  D$    D$+   8   $N)8   ${Ƅ8 8   $M%u"8   $F8</tD$   D$$o8   D$   D$84  $,w  D$    D$+   84  $(84  $Ƅ 84  $$u"84  $</tD$   D$$7t%D$   D$8   $iv  D$   D$$a7t%D$   D$8    $"v  D$   D$$7t%D$   D$8 $  $u  D$   D$$6t%D$   D$80  $u  D$   D$$6t&$#u$D$   D$$D6t&$"u$JD$   D$$5t&$"u$D$   D$8$/  EЃ} t<~=  ~%E    D$   D$$Wt  } t=~=    ~%E    D$   D$0$t  }    $``</u)D$`D$D$   $'D$`D$D$   $`T$$y  Eԃ} D  (T$$5E؃}   *U؉T$D$   D$   $FU؉T$D$   D$   $M8T$D$E؉$d8   T$D$E؉$n8 (  $k u${8 (  T$D$E؉$38   $0 u$8   T$D$E؉$8   $u$8   T$D$E؉$8   $u$8   T$D$E؉$8   $u$8   T$D$E؉$G8   $Du$8   T$D$E؉$84  $	u$84  T$D$E؉$8    $u$8    T$D$E؉$8 $  $u$38 $  T$D$E؉$[=  tJT$D$E؉$0=  taT$D$E؉$txT$D$E؉$EȅtUȸT$D$E؉$8,  $u$8,  T$D$E؉$80  $|u$80  T$D$E؉$DU؉T$D$   D$   $E؉$iE     $D$T$D$   $:.E    D$`D$D$   $
D$    D$%8D$$3/  D$    D$>8D$$J.  } t:D$D$$	  D$D$$S  GXT$D$D$   $UD$D$$	  D$   D$V$\e  	  } &  D$   8D$$/D$    D$+   8$N8$Ƅ8 8$Wu8$U8</tD$   D$$~.   D$   D$84  $;m  D$    D$+   84  $84  $Ƅ 84  $u"84  $</tD$   8D$$-D$   8D$$-D$   8D$${-D$    D$$]-D$   D$8$&  EЃ} tYD$   D$$N:t7D$   D$8D$D$8$w)  EЃ} =  $ D$   D$-$Quƅ8 8$P  E     D$  D$    4$3UT$D$D$   $(D$  4D$$V94  D$     8D$8D$8D$8D$8D$8D$D$  4$e+  D$     8D$8D$8D$8D$8D$8D$D$  4$7"  4$Í`$=?  w\D$   D$`$j  D$   4D$`$cj  D$   D$`$Ej  t4$8   $K   D$   8   D$$ni  D$     D$    D$    D$    D$    D$    8D$D$   $	!  $0D$4$*E}       D$   D$    <$*D$   ED$D$   <$iJ   <$OÍ`$?=?  wY< tL<$D$   <D$`$h  D$   D$`$h  E$(E    D$   D$H$g  E}	b} tGD$!   `D$8$  EЃ} uD$   D$$~g  } tS`T$D$D$   $O$D$D$$	q  QXT$D$D$   $$D$D$$	  `$vtD$   D$V$\  Ql`T$D$D$   ${$-D$D$$\  D$    D$%8D$$3K&  D$    D$>8D$$J%&  D$D$$S5     D$   D$V$	  D$   D$V$\  8$Pt:D$   D$V$3  D$   D$V$J  LD$    D$%8D$$3Z%  D$    D$>8D$$J4%  D$   D$V$SD  8   $D$8   D$$C  8   $uD$8   D$$N  84  $CD$84  D$$]  8   $D$8   D$$j|  8   $D$8   D$$wJ  8 (  $D$8 (  D$$  8   ${D$8   D$$  8    $ID$8    D$$  8 $  $D$8 $  D$$  80  $D$80  D$$P  eT$D$D$   $$D$D$$  eT$D$D$   $$>D$D$$  eT$D$D$   $;$D$D$$]  8$D$8D$$5  8$D$8D$$  8$uD$8D$$  8$MD$8D$$  8$%D$8D$$  D$-$u:D$   D$'$0_  D$   D$V$<C  8D$   D$V$0%  D$   D$'$<	  D$   @D$8$-D$@D$$I     Ĥ  []U  E    D$   D$    Eۉ$D$   D$    Eʉ$D$   D$    $oD$   D$I$_  D$   EۉD$$^ D$   EʉD$$d Eۉ$`  Eʉ$M|  EʉD$Eۉ$  $`/`</u)jD$`D$D$   $:'D$`D$D$   $pT$$e  E}    (T$$E}    *UT$D$   D$   $4UT$D$	   D$   $UT$D$   D$   $UۉT$D$E$E$E      E $D$D$T$D$   $\ $MD$D$T$D$   $D$   D$$]  }uD$D$$	  oXT$D$D$   $C$D$D$$	e  D$   D$V$	G     UH  D$   D$    d$/D$@  D$    d$D$   D$    d$D$   D$`d$u\  D$   dD$D$3$:&d$	   $``</t3dT$D$`D$D$   d$1dT$D$`D$D$   d$dD$D$dD$$  D$dD$$     U8  D$    D$    D$D$   D$    d$D$   D$    Eĉ$lD$   D$    d$N$,   EE   E    E    E    D$    DD$$D$   dD$$D$    ED$$D$   D$D$~  D$d$  ED$d$?\  E}   }   E@  $``</u)'D$`D$D$   D$':D$`D$D$   D$`T$$u_  E}    (DT$$E} tv*UT$D$   D$   $NUT$D$   D$   $ZdT$D$E$zE$/   E     $$D$T$D$   D$   E     $D$T$D$   D$SME    D$@   dD$E$NCqdT$D$D$   D$}uFD$$   dD$$W  D$   D$t$DW  L3  QDT$D$D$   D$D$AD$DD$$	  D$   D$E$|uID$D$   D$)D$D$DD$$	K  D$   D$V$	-  EĉD$EЉD$EԉD$E؉D$E܉$?E} tKED$@   dT$$ALdT$D$D$   d$mz  E܅u$D$D$   d$BO  D$@   D$    d$D$   D$d$V  D$   D$ d$cV  D$   D$(d$EV  qD$D$D$@   d$D$   dD$d$U  D$   D$hd$U  D$   D$>d$U  D$@   D$    d$D$   D$d$U  D$   D$Hd$hU  D$   D$(d$JU  UиeT$D$D$@   d$D$   dD$d$U  D$   D$hd$T  D$   D$>d$T  D$@   D$    d$D$   D$d$T  D$   D$pd$nT  D$   D$(d$PT  UܸeT$D$D$@   d$D$   dD$d$
T  D$   D$hd$S  D$   D$>d$S  D$@   D$    d$E=   tQ=   =      =   t   =   tL=   te   D$@   D$d$R  ~D$@   D$d$R  ^D$@   D$d$R  >D$@   D$d$wR  D$@   D$d$WR  D$   D$d$R  D$   D$d$R  D$   D$(d$}R  D$   dD$d$]R  D$   D$hd$?R  D$   D$>d$!R  D$   D$d$R  D$   D$d$Q  D$   D$(d$Q  D$   EĉD$d$Q  D$   D$hd$Q  D$   D$>d$nQ  d$D$dD$$  d$xD$dD$$}  $RD$D$$  E$o   U(EE*ED$E$uE@TE@XE} uи    US$EE"ED$E$OtE@XE} u}   E@PE졀EE@DEE@HE} uE耉$E} u
       E耉D$D$    E$E耉E@TT$D$E$UO  EEE@@t2E$u#EP@EML$T$D$E$IE@HE} u ËE$\$D$D$   E$cE$       $[]U($L   ED$L   D$    E$u8$L   aD$L   D$    $EE	E@HEE@HuEUPHED$@   UT$$N  E$EP@}uE$EEUPDE@H       US$$$	$E} ttEXDEH@U/\$L$T$$r@E@HEE$u(EXDEH@U/\$L$T$$0E@HuA$$[]UH  $HY} t } ~ED$D$    E$'D$ED$D$   $  u
      E$1  E   $)u}E   D$   D$$SL  D$     D$    D$    D$    D$    D$    ED$D$   $  $$V D$$E} u      D$   D$    $D$   D$    $D$   D$    $E$[K  D$   ED$D$   $,!  D$   D$D$   D$:   $D$   D$$PD$   D$D$ T$$:$5$'$~$p$$D$$v} t"} ~ED$D$E$J     	    U(`ET$$E} u
       cET$$E} uf       E$EE$t    cE$zuEUT$$E$t    +E$AtE$E$   U8} t} ~} u
       E   $t
       ED$D$    E$&EU   D$T$E$H  EUT$ D$    D$    D$    D$    D$    UT$D$E$	  ED$ D$    D$    D$    D$    D$    ED$ED$E$   U(} E} t} 
    U  E   ED$T$D$CE$E   ED$T$D$NE$E4  ED$T$D$]E$E   ED$T$D$jE$E (  ED$T$D$E$cE   ED$T$D$wE$<E   ED$T$D$E$E    ED$T$D$E$E $  ED$T$D$E$}    ED$ED$D$E$ED$ED$D$E${ED$E D$D$E$ZED$E$D$D$E$9ED$ED$D$E$ED$ED$D$fE$ED$E(D$D$wE$   U8  E,  $,  E,  D$,   $EE     E,  D$   D$ED$D$,   $$D$   D$>$uE   $  ,  D$	   D$f$uE (  $I    D$
   D$z$uE   $
    D$
   D$$_uE   $a  o  D$   D$$ uE   $"  0  D$
   D$$uE4  $M      D$   D$$uE   $      D$	   D$$cuE    $tizD$
   D$$+uE $  $t1BD$	   D$$uE,  ~EE;EXE;E~   =} t2} t,UT$T$D$ED$E$X    U  E    D$,   E$EE      D$   D$ED$D$,   E$$|D$     D$    D$    D$    D$    ED$ED$D$   $$8u!T$$tG  E} uEE;E7E;E~   A} t6} t0PT$T$D$ED$E$    U  } t} u
       UT$UT$D$D$   $T$$F     E}    `T$$8E} tvEE$@E} tSED$ED$D$   E$EE;EsEU  E$dEE$E$I    U(E    ED$E$E} t(D$ED$E$EE$} uFE$1tD$   D$VE$D$ED$E$EUH  D${   E$~EE      E   D$   D${   E$ED$   D$}   E$E}   E;Ez  D$   D$ED$ED$E$#7  D$   D$[   $(ED$   D$]   $E} Z  E;EN  EU)ȃM썅ȉT$D$C$2uE   $E  EU)ȃM썅ȉT$D$N$uE   $RE  EU)ȃM썅ȉT$D$]$uE4  $Ej  EU)ȃM썅ȉT$D$j$NuE   $E  EU)ȃM썅ȉT$D$$uE (  $nE  EU)ȃM썅ȉT$D$w$uE   $"E  EU)ȃM썅ȉT$D$$juE   $E:  EU)ȃM썅ȉT$D$$uE    $E  EU)ȃM썅ȉT$D$$uE $  $>E  EU)ȃM썅ȉT$D$$uE$E[  EU)ȃM썅ȉT$D$$?uE$E  EU)ȃM썅ȉT$D$$uE $iE   EU)ȃM썅ȉT$D$$豿uE$$"E   EU)ȃM썅ȉT$D$$juE$EBEU)ȃM썅ȉT$D$w$&uE($E} t&ED$D$D$E$eEU)ȍPD$   D$T$D$   $u&ED$D$D$E$EE;E-ÐUST  E    E    t$DD$   D$D$u$dVt$E\${   `$覽E} u$      `¡\T$D$E$x8  \  ED$D$   ED$$'  EE$@} u
    Y  ED$D$    D$$ˇ'  u
    (   $u2 UT$D$   D$$܇u'  u
      $$_u2$UT$D$   D$$2'  u
      ,$u2,UT$D$   D$$&  u
    _  0$u20UT$D$   D$$ &  u
      4$u24UT$D$   D$$i&  u
      8$Su28UT$D$   D$$ &&  u
      <$u2<UT$D$   D$$-%  u
    S  D$u2DUT$D$   D$$=%  u
      H$u2HUT$D$   D$$G]%  u
      L$Gu2LUT$D$   D$$S%  u
      P$u2PUT$D$   D$$_$  u
    G  $du1ED$D$    D$d$o$  u
      X$u2XUT$D$   D$$S$  u
      ($=u2(UT$D$   D$$$  u
      D$   D$    $虶T$D$D$   $$u%ED$D$    D$$#  D$   D$    $$`o`</u)D$`D$D$   $z'D$`D$D$   $Q$u%ED$D$    D$$ƈ"     E   D$   D$ӈ$2  ED$   D$$E3  D$_   D$-   $%$E   ED$D$    T$$"  E   EE   R$0tL$ĳڋوD$\$L$T$D$@   $0D$D$D$D$$E} u3   D$   D$$p1        D$   D$    $訳D$   D$E$L T$D$D$   $    #  $t?D$0D$@   $ED$D$    D$$V      ($A   E   D$   D$D$($dt$芴E;E~KL  <ML$T$D$D$   $$e    E$"  u       T  []UD  D$@  D$    d$ǅ  ǅ   ǅ   ǅ    t$d ,  $tMD$@   D$d ,  $0/  d ,  D$D$@   d@,  $D$   dD$D$$dIu3D$D$   $迴$      ǅ   D$   dD$d$.  D$   dD$D$$dt%D$   dD$d   $0.  D$   dD$D$ $dst%D$   dD$d    $-  D$   dD$D$
$d$t%D$   dD$d $  $-  D$   dD$D$$dt%D$   dD$d   $C-  D$   dD$D$"$dt%D$   dD$d4  $,  D$   dD$D$-$d7t%D$   dD$d   $,  D$   dD$D$8$dt'D$   dD$d (  $V,  OD$   dD$D$B$dt%D$   dD$d (  $,  D$   dD$D$L$dHt%D$   dD$d   $+  D$   dD$D$W$dt%D$   dD$d   $g+  D$   dD$D$]$dt%D$   dD$d   $+  D$   dD$D$g$d[t%D$   dD$d,  $*  D$   dD$D$r$dt%D$   dD$d0  $z*  D$   dD$D$|$dt%D$   dD$d   $+*  D$   dD$D$$dntBd$3ǅ   =    ~
ǅ    D$   dD$D$$dtd$ǭD$   dD$D$$dt8D$   D$d$iuǅ   
ǅ    D$   dD$D$$dbtd$'
ǅ   D$   dD$D$u$dtd$լEd$y   u    ld$   u@L=   u
L  DuHu$        t$~   UD$   D$E$Uu$F       US4  EE    E@  E̋E@  EE    E    \$.t7\T$D$D$   $7$ED$   D$ $>Eȃ} tE    EЉEE    U,  EU,  ЅtE} uE   UT$D$D$   $u}   E@  tE@  uEԋEԉ$EE    }uPE؍P`9<} u6`¡\T$UԉT$$_&  \$蒩?  EEE} twD$    D$D$
D$   D$E$:  $'U؍EEt$$`;E}^E$E܃} u:(UT$D$D$   $$S      \EE܉EG\`ы)ӉڃЉE\ED$ED$E$Ʃ} tED$   D$E$c$  D$   EԉD$E$$  E$EEE,  EE   dE;EuEEE;EtED$ED$E$/EEE؉D$EԉD$E$`EEEEE)EEE;E~E  } t\$虦Eܣ\E`}   tGE,  E $  T$L$D$D$   $=$E,  U $  D$T$Eĉ$^Eă} y@E $  T$D$D$   $ר$7    }  ED$Eĉ$  tKEĉ$ E   T$D$D$   $v$      E     E;Et} t       ED$  D$    $yUT$D$D$   $E    } Ѓ} T$D$D$D$D$ (  D$E$  E      }    t$0ED$D$Eĉ$  t'D$  D$D$6!  E    E   
  $gy   } t\D$$ED${$ E} uGEUT$D$D$  $蝦   $qt$$D$ED$ED$E$  E} uE} tE$_E$ϦE,  ;E~
} d} tED$Eĉ$  } uw،D$D$   $輥$$Ru5$qT$D$D$   $i    } uEE;E   Ĕ4  []U   D$   D$    $tE$IEt0U(T$D$D$   $٤$9D$`$d	t\D$`   D$d$  D$`   D$E$  D$`   D$$  D$`   D$$;  ED$D$HE$!  ED$D$0D$E$9ED$D$D$E$ED$D$D$E$ED$ED$D$E$ED$ED$D$E$}uE    E,  E'EPE,  EE,  EE\t}} tS\D$   T$UT$UT$$ED$D$D$E$FED$D$ɍD$E$"ED$D$D$E$    UH.  ED$D$    E$}  t4ED$ED$ED$D$ (  D$E$ƅ D$ED$ED$E$u:U̍T$D$D$   $ԡ$4    '  E   $^   E   D$   D$$  D$     D$    D$    D$    D$    D$    ED$D$   $"$IE} uBtpT$D$D$   $$L7T$D$D$   $赠$E$       UWS@$         ߉E0  $  E0  D$,   $EE   d  E0  D$   D$ED$D$,   $$D$     D$    D$    D$    D$    D$    ED$D$   $D$   D$=   $CE}    }?   EƄ EU썅D$    T$$  t D$   D$$訟t=8T$T$D$D$   $ޞ$>EE;E@$  [_]UWS@         ߉E    E    E    E    E    E    E$bt@  $\<  ED$D$   $  E; E} u&D$   D$D$l$$}uR  $n7UT$D$D$   $襝$  D$$tD$$ҝuOt$E   E,    t$؎E     } e  D$   D$$?  t$6} u$8$$ZuZ$  E} yC|T$D$D$  E$iQ  E$H  E   E   $  $  UT$D$D$   $$R    UT$D$D$   $賛$t  D$ݏ$tD$$u=t$} t}uE   E   E      }   t$|$n$`  $tE   $;    }   D$$tD$$ \  E   P  D$   D$:$u$  D$   D$I$uq$TE} ~}  EL  \UT$D$D$   $Ǚ$%  D$   D${$VuzD$   D$$o  $B(  T$D$D$   $+$  D$	   D$$躘   < u
   	   кĐD$T$D$   $谘$< u
   	   D$  D$E$l  L=   T  L  I  D$$   D$$ɖuhD$ $诖uND$H$蕖u4D$j${uD$|$atUD$  D$E$  E$L  to$$Tt#$ $$ޔUЉE
$覾u6} t0} t*} u$@   ED$$  E؃} ut$4E؁@  [_]UDuHu$    `UT$$gUSTEcEzEАEԣEبEܺt0UT$D$D$   $$W} x}E    E} EUMȋDȉEED$D$    D$    ED$E$l\t\$1    EE$U} E$EEUE`;E}|E   U\T$$̐E} u:ВUT$D$D$   $ϔ$/       E\E`} u\  } t `¡\T$D$'$  E$u?`¡\T$UT$$  `¡\T$D$)$  \$ڑE`+E\UD$    D$T$ED$E$   T[]UHE    E    ~($\t
    -  EE$xE} u:,UT$D$D$   $[$      t3pT$D$D$   $$u¡T$D$D$   E$EEE  ;Eu;tlUT$D$D$   $蟒$:ML$T$D$D$   $c$(D$!   D$H$ju"ED$D$   ED$$(D$   UT$$D$jE$5u$ED$D$    ED$$oj3(xT$D$D$   $薑$E$;EU(EE}~	EEED$D$    E$蚍E    UE$E}t4EE}
uEEU/} tEEUm	EEE;E|EU(E$~D$    D$ED$E$E}u       U8E$8EUT$D$D$
   E$RE ED$E$mE} tEED$E$MEEU8   D$    D$    $ME  E  HEEEE} tEE       E;EuEEE    EEmED$    D$D$E$iE}u$F} yE;UT$D$E$E)E} EE;E[EU(D$   ED$E$E}tEE E$U(ED$ED$E$EEU8  E    E    E    E    E    E    ED$E$t
      t$%裼E$蘼E$E؃} y
    D  E؃$EE؃D$D$    E$@EU؉T$D$E$E܃} y} tE$譊      }  D$   D$    $ۉE    E    E    E    K  EE E} c  }  }   D$   D$@$Ҍt"D$   D$Q$谌u%E       $d8   t$$$OD$   D$$見u-t$ɺ$诋E   D$   D$    $臈E    0i U % @  tEUE}
uE    E
t*
tttn=   uhE    _E   V} t($$$D$   D$    $E    }  u<`T$$HD$   D$    $zE    EE;EE؃E  E;Eu
E <0t} tE$ԇ    EUWVS   E    E    EE   $   臉EE    U]uEEEEEEEEċE    EEE̋E   E}E   EE̕T$TD$P\$LD$Ht$DD$@UT$<D$8UT$4D$0UT$,UĉT$(UȉT$$ỦT$ UЉT$|$UԉT$D$ED$L$D$   E؉$螉D$    E؉D$E$E܋E؉$v} uE܉$^    Ĝ   [^_]U8E    E    EE   $   EE    UT$UT$D$D$   E$D$    ED$E$5EE$ƅ} uE$讅    U8E    E    EE   $   lEE    MU	L$ML$T$UT$D$D$   E$8D$   ED$E$EE$} uE$    U($  ET$$褅E}   t4UT$D$D$   $蘇$D$    D$    $̃   ED$D$  D$   $"E} ~e ET$D$D$   $衅t42UT$D$D$   $$@E$ɄZE$   (KUT$D$D$  E$茆    UxEUT$$u  uEU(E    ED$   UT$$Fu"UE T$D$E$   E   E$EUEEEE} t1"EEE EEum} u} u} tE  E EuUE)ȃÐU(EEEEEEE} mt
E uUE)ȉEEU)ȉE} mt/E$тE?} tEEEmEE u֋E  UE)EÐUE    EUE    EUE    EUE    EU   E    `UT$D$D$   t$Jt$訲}uE    EU   E    UT$D$D$   t$t$R}uE    EU   E    E    E    E$[t
  E    EML$ML$ML$T$$t
  EE%   	E	ЉE܋E% E1ЍHOE% E1Ѓ1E% E1Ѓ1%  EE;Et
  E%   EEEЋEEԋE%  E؋E%? Em  E?EȋE%  EE؉Eă}tE~} tE}} tE|} Ey}[B  u'E  D$   D$E$   $    蠀EEiQ - 
EEUT$$j]E$}EUT$D$D$   E$vEȖ$C}EfEm]mEtEje} tfE     EUĉPE@   EỦPEPD$   ED$$EUP EUȉP$$    UB(EUE    EU(D$(   D$E$E    EUE    EUE    EÐU]ff.     UWVSO   M z)t$1ED$ED$E$9rރ[^_]Ë$ÐUSE $   D$ED$l{[]ÐUSEé $   D$ED$,[]ÐUSEki $   D$ED${[]ÐUS t fЋu[]ÐUS    [  Y[                 http_request unarchive archive readpkg w /dev/null b:l:c:vd?    MV AppServer transaction is initializing. %smv_appsvr.conf %s/mv_appsvr.conf  Could not get peer.   Request using module handler "%s" for resource "%s" Module initialization failed!   Initialization failure in auth_basic! Module execution failed! Module execution is complete. Unsupported handler "%s"   9uJV9tcp mvappsvr /var/log/mv_appsvr /usr/local/mvappsvr/mv_appsvr.conf /usr/local/mvappsvr 1 MVAppServer close MultiValue AppServer v%s
 1.7.1.8102 %s, (%s@%s)
 zumlabD305 root Fri Jun  5 11:26:48 PDT 2020 
 -v/-?			Display Version and Usage Information   -d			Enable debugging code.  [extra logging]    -l <logfile>		Specify the path to the log file. -b <install_path>	Specify the alternate installation path.  ,; application/json text/json */json api    Content-type: application/problem+json
   {
"status": %d,
"title": "%s"
}
 application/xml text/xml */xml Content-type: application/problem+xml
    <?xml version="1.0" encoding="UTF-8"?>
<problem xmlns="urn:ietf:rfc:7807">
<status>%d</status>
<title>%s</title>
</problem>
 Content-type: text/html
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <html xmlns="http://www.w3.org/1999/xhtml">   <head>        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />     <style type="text/css">         body { background-color:#FFFFFF; font-family:Geneva, Arial, Helvetica, sans-serif; font-size:12px;          line-height:1.6; margin:0; padding:0; color:#990000; }          #error_wrapper { width:800px; margin-left:auto; margin-right:auto; margin-top:20px; }       h1 { margin:0; font-weight:normal; }        #error_wrapper  h1 { color:#777779; font-size:34px; padding:10px 15px; background-color:#f7f7f7;        border:1px solid #990000; -moz-border-radius-topleft: 5px; -moz-border-radius-topright: 5px;        -webkit-borderradius-topleft: 5px; -webkit-borderradius-topright: 5px; }        h1 strong { color:#CF6E01; font-weight:bold; }          #error_content { padding:15px; background-color:white; border:1px solid #990000; border-top:none;           -moz-border-radius-bottomleft: 5px; -moz-border-radius-bottomright: 5px; -webkit-borderradius-bottomleft: 5px;          -webkit-borderradius-bottomright: 5px; }        #error_content h1 {font-size:18px; }        h2 { font-size: 12px; margin:0; font-weight:bold; }         button { cursor: hand; display:block; color:#999999; background-color:white; border:1px solid #999999; -moz-border-radius: 5px; -webkit-border-radius: 5px; padding:2px 10px; float:left; }      </style>     <title>An error has occured.</title>   </head>   <body>     <div id="error_wrapper">          <h1 class="main_heading"><strong>Zumasys MultiValue Dashboard</strong></h1>         <div id="error_content">  (no License Key)            <h2>Welcome to the Zumasys MultiValue Dashboard Application Server</h2>         <p> Your installation has succeeded and you are ready to activate and configure your new software.              To begin the configuration process, click the button below labeled "Next" to go to the administrative               configuration screen.<br><br>               <form><button type="button" onClick="self.location='/config';">Next</button></form>             <br><br>         </p>         <h2>%s </h2>
         <p> The system has encountered an unrecoverable error.  Please see the system log file, and the description             of the error above for more information.  To continue, please select one of the following options:<br><br>             <ol>               <li><a href="/config">Configure your server</a></li>                <li><a href="javascript: history.go(0);">Refresh this page</a></li>                 <li><a href="/">Return to your default application</a></li>                 <li>Check that your server has database licenses available for use by the dashboard process.</li>             </ol>       </div>      </div>  </body> </html>     Gathering information about the remote peer. Could not getpeername. getpeernamed. 127.0.0.1 localhost   This program must be executed from inetd/xinetd. GET HEAD POST PUT DELETE OPTIONS   Invalid request URI (Null PATH_INFO) DefaultResource    Unsupported Request Method: %s  Error reading the request line from remote peer
 HTTP/1.1 OK Created Accepted   Non-Authorititative Information No Content Reset Content Partial Content Multiple Choices Moved Permanently Found See Other Not Modified Use Proxy Temporary Redirect Bad Request Unauthroized Payment Required Forbidden Not Found Method Not Allowed Not Acceptable Proxy Authentication Required Request Time-out Conflict Gone Length Required Precondition Failed Request Entity Too Large Request-URI Too Large Unsupported Media Type Request range not satisfiable Expectation Failed Internal Server Error Not Implemented Bad Gateway Service Unavailable Gateway Time-out HTTP Version not supported Unknown Sending HTTP Response, Status: %i (%s), Protocol: %s %s %i %s
 (~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~4@LXdp~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ĬЬܬ 	$-6?~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~HQZclu
 Accept User-Agent Cookie Connection Content-Length Content-Type Remote-User Authorization Referer Host extraHeaders Unsupported Request Header: Content-type: %s
 Status: %i
 Connection: %s
 Server: %s
 Content-Disposition: %s
 Expires: %s
 Pragma: %s
 Cache-Control: %s
 Content-Length: %i
  WWW-Authenticate: Basic realm="AppServer" Location: %s
 Last-Modified: %s
  Sent Response headers to client. Entering auth_basic AuthType Basic true    This handler requires authorization. AuthUsername AuthPassword %s:%s Basic %s Authorization succeeded.  You are not authorized to make this request.
 %x    %b %d %I:%M:%S  %s Inst(%i) - Log msg too long.
 %s Inst(%i) - %s
 a    r   %import %include_file %s/%s %include_config %sconfig/%s %s/config/%s =  Cannot open configuration file %s behavior DefaultHandler DefaultResource licensekey debug handlers mime_types content_types db_platforms db_platform Undefined module/section: %s  <pre> CGI Variables:<br> -------------:<br><br> %s = %s<br>
 </pre> %s< <br> Document Handlers: %s		%s
 Mime-Type Mappings: Content-Type Mappings:  ;   Module Configuration Settings: %s		%s		%s
  <option value="" selected>(select a platform)</option>
  selected   <option value="%s"%s>%s</option>
   mod_static mod_embedded mod_bravoconnector mod_mvconnector mod_config   Cannot locate a valid initialization routine for handler: %s    Cannot locate a valid execute routine for handler: %s   mod_static<br>                           mod_config<br>                           mod_mvconnector<br>                           mod_embedded %%%02x %i
 ERROR: %s
  ERROR: Cannot allocate http client. ERROR: Archive creation is not supported. extracted listed  
Archive file was %s with errors

  
Archive file was %s successfully

 ERROR: Cannot allocate archive client .pkginfo  popen2: command is NULL!    popen2: error %i creating pipe fd1  popen2: error %i creating pipe fd2 popen2: error %i in fork popen2: error %i writing to pipe @ %i bytes popen2: failed writing %i bytes to pipe @ %i r  popen2: error %i in dup2 of fd1 popen2: error %i in dup2 of fd2 -c sh /bin/sh popen2: error %i in execl dbc mod_bravoconnector mod_mvconnector  sSuccess.    Software is not activated (no License Key). License Key has expired.    License Key is not valid (fmt). License Key is not valid (chk). License Key is not valid (prd). License Key is not valid (typ). License Key is not valid (pwr). License Key is not valid (cnt). Invalid Format (%i) %4X %c %5lX %7lX 7777777 %8lX x%s%s%s %X        post head get shm:u:o:p:v?  URL (-u) is a required parameter. : // /    You must specify a post data input file when selecting the POST method. r   fopen failed, cannot open post data input file. stat failed, cannot open post data input file.  hhttpClient {   request_method    = '%i';
   header_flag       = '%i';
   stat_flag         = '%i';
   http_port         = '%i';
   url               = '%s';
   output_file       = '%s';
   post_data_path    = '%s';
   http_host         = '%s';
   request_line      = '%s';
   post_len          = '%i';
   sockfd            = '%i';
   post_data_ifp     = 'FILE(%i)';
    post_data_ifp     = '[null]';   output_ofp        = 'FILE(%i)';
    output_ofp        = '[null]';      error_flag        = '%i';
   error_string      = '%s';
      response_status            = '%i';
     response_content_length    = '%i';
     response_age               = '%i';
     response_date              = '%s';
     response_expires           = '%s';
     response_content_type      = '%s';
     response_server_string     = '%s';
     response_transfer_encoding = '%s';
     response_connection        = '%s';
     response_last_modified     = '%s';
 };    MultiValue Dashboard AppServer by Zumasys v%s
 1.7.1.8102 HTTP Client mode %s, (%s@%s)
 zumlabD305 root Fri Jun  5 11:26:48 PDT 2020 
  -v/-?			Display Version and Usage Information   -u <url>		The URL that you wish to connect to.  -m <method>	The http request method, one of POST,GET, or HEAD.  -o <file>		Output file.  By default, the results are shown in stanard out.  -p <file>		The system path to a file containing your url-encoded post data if applicable.   -h				If specified, the http headers from the server will be included in the output.    -s				Display a status bar.  Requires the -o flag.  Cannot determine hostname: "%s" Cannot create socket.   Cannot connect to remote host (incorrect port?). POST  HEAD  GET   HTTP/1.1
 Host: %s
 Connection: close
 Content-Length: %i
 User-Agent: mvAppServer/%s

 
 chunked   Protocol Error, expecting chunk terminator but received %i,%i wb    Cannot open output file: '%s'
 Date Expires Content-Type Server Transfer-Encoding Connection Last-Modified Status Content-Length Age    Read %ik of %ik - %.2f%% complete.  File Size Unknown. Read %i bytes.             Y@o:p:i:v?ls  oooooooooooooooooooooooooooooooooooooooooooUoooo,oo-p is a required flag. -i is a required flag. '%s' is not a directory. Cannot stat: '%s' r  fopen failed, cannot open archive file. stat failed, cannot open archive file. tarBall {   extract_flag      = '%i';
   stdout_flag       = '%i';
   list_flag         = '%i';
   input_file        = '%s';
   parent_dir        = '%s';
   only_do_file      = '%s';
    archive_ifp       = 'FILE(%i)';
    archive_ifp       = '[null]';      error_flag        = '%i';
   error_string      = '%s';
 }; MultiValue Dashboard AppServer by Zumasys v%s
 1.7.1.8102 Archive mode %s, (%s@%s)
 zumlabD305 root Fri Jun  5 11:26:48 PDT 2020 
  -v/-?			Display Version and Usage Information   -p <dir>		The parent directory that the archive files will be extracted into.   -i <file>		System path to the archive file. -l			Only list the contents of the archive, do not extract them.    Invalid Header, aborting extraction. %ik %i f %s (%s)
 d %s
    ? %s
Unsupported file type: %i
 %s/%s wb    Cannot create output file: %s, (%s)
    Incorrect End of File, Aborting with '%s'   Write failed, Aborting with '%s' / mkpath: '%s': %s
    Directory   mod_static.c "Directory" element is missing in module configuration. DefaultMime    mod_static.c "DefaultMime" element is missing in module configuration. %sdocroot/%s %s/docroot/%s   mod_static.c Directory: %s does not exist or is not readable. %s/%s mod_static.c "%s" begins with a dot (unsupported)   mod_static.c "%s" is not a file or directory (unsupported) DefaultResource /    mod_static.c using "DefaultResource" - "%s" rb  Cannot determine mime type for extension "%s"   Setting content type to "%s" for ".%s". Gathering file information for this resource. %a, %d %b %Y %H:%M:%S GMT Sending the HTTP response String.   Sending the HTTP response headers. Serving File.    mod_static.c %s is a directory (unsupported)    mod_static.c Cannot locate resource at %s   mod_static.c - module execution complete. 404Redirect   404 Redirect per configuration file to:                gif body-bg.gif png green.png css ie6.css ie7.css info.png js main.js menu-tab.gif menu-tab-left.gif pipe.gif red.png reset.css screen.css shadow-bottom.gif mv-logo.gif mv-logo.png yellow.png license.js license.css ajax-loader.gif  Sending the HTTP response String.   Sending the HTTP response headers.  mod_embedded.c Cannot locate resource at %s module execution complete.          GIF89a    񵵵,       80
%+!Vdihlp,tmx|pH,5@ L ;                             PNG

   IHDR         r|   tEXtSoftware Adobe ImageReadyqe<  IDATxڔkAƟu֜xgDMRh66$!QPk)!$.{;Nlf<ﰩG0\B=It]CQ;=:w<c]z o漷kCH
0Ye	#J8T`U(6MJ<Vj,IoL?A>#8<<`QHD0@s YAOT<=8Mõtv|q@qS%DG1;wfafkǮwwvo]#]%[Eidv>J(A/>nYE#nq"[eN:U\\B*`cl;P-MuIB9 +_gϱ}lGFrv%91a36d@g|!ޛS%4]|:^Gb&4tOF0 L~N    IENDB`            #server_status td.green,
#server_status td.yellow,
#server_status td.red {
	background-color:transparent;
}

#navigation {
	float:right;
	margin-right:10px;
	margin-top:20px;
}

img.logo {
	margin-left:10px;
}

.status {
	margin-top:10px;
}

.left_column {
	margin-left:0px;
}
           PNG

   IHDR         7#   tEXtSoftware Adobe ImageReadyqe<  IDATxb3`G	*,1}|,W~Gp;Z-Wgna,7wqe/+-r1@uڔ@HPՅ/8CTɾOQ8K	<Tc
4^d;I<c/ -AܹfӋ2ڃH-O6=MjP=,̏O<:J]9[R`~+,TeGvF :vLm4KtaN>?Jcz PNI=?nXdvBR' ̘*Xd 6c 0S$dUnvprj!* B4<O L[bHFAɟМ}n9˕9[QÒgi=ǧ҄O?   J;&    IENDB`  //	Author: Dan Piscitiello
/////////////////////////////////////////////////////////////////////////////////////////
//
//	Show help boxes function
//	
//	Make sure to pass the id of the help div and help box it resides in 
//	when calling the function inline from a link
//
/////////////////////////////////////////////////////////////////////////////////////////

var current_help = "";
var current_box = "";

function showHelp(help_id, box_id){
	if(current_help != ""){
		document.getElementById(current_help).style.display = "none";
	}
	if(current_box != ""){
		document.getElementById(current_box).style.visibility = "hidden";
	}
	current_help = help_id;
	current_box = box_id;
	document.getElementById(box_id).style.visibility = "visible";
	document.getElementById(help_id).style.display = "block";
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Password change form validation and submission
//
/////////////////////////////////////////////////////////////////////////////////////////

function validatePass(form){
	if (form.pass1.value == "") {
		alert("Please fill out both fields!");
		form.pass1.focus();
		return (false);
	}
	if (form.pass2.value == "") {
		alert("Please fill out both fields!");
		form.pass2.focus();
		return (false);
	}
	if (form.pass1.value != form.pass2.value) {
		alert("Your passwords do not match!");
		form.pass1.focus();
		return (false);
	}
	// Additional validation here if needed		
	return (true);
} 

function savePass(){
	document.admin_password.action = ""; //server side script location
	if(validatePass(document.admin_password)){
	document.admin_password.submit();
	}
}

function installApp(){
	document.install_app.action = ""; //server side script location
        if (document.install_app.package.value == "") {
          alert("Please enter the package file.");
          document.install_app.package.focus();
        } else { 
	  document.install_app.submit();
	}
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Database page form validation and submission
//
/////////////////////////////////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////////////////////////////////
//
//	function to show and hide the App Installer
//
/////////////////////////////////////////////////////////////////////////////////////////

beenCalled = 0;

function installer(){
	if(!beenCalled){
		document.getElementById("installers").style.display = "block";
		beenCalled = 1;
	} else {
		if(document.getElementById("installers").style.display == "none"){
			document.getElementById("installers").style.display = "block";
		} else {
			document.getElementById("installers").style.display = "none";
		}
	}
}
    GIF89a,!  ???   !   ,    ,!  `'dihlp,tm߳\wpH,Ȥrl:ШtJ.azxL.znpW>z~yu@W۾	 
H&Ç#JHŋ3jȱǏ C!ɓ(S\ɲ˗0cʜI͛8sܹ?%JѣHJpӧPBJꄫXjzUjӪ`!pͪаhzmjLJx`h].{Ry+g]t ǐ#KL˘3k̹ϠCӨS^ͺװc˞M۸s޽Nȓ+_μУKNzسkνËOӫ_Ͼ}˟OϿ (h46F(Bf`j ~a!f8"%^x).""2>X#4@; @)DiH&L6PF)TVYe d Yr	^j)d	fh~jf[)sigm©fgZt&f&(
 VJ{Z:饖F駠)jj
穝nij묰I++ `+k&6F+vҵfv+k覫A+k ,\$7G,Wlgwq($l(,0,4l8,r<@-DsH'L7NG-TWXg\u`-8_@hjSO tv. ;           GIF89a !  ڜ333ĄSSSױ   !   ,     !  hICAIB%+cwY3r	8AXvx7I1
\334! ;                     GIF89aF   ɱۙ         !     ,    F  (8cLNu5M"9-N6w͙$Hv5"б=[IpyQHhE-rVއ4Jfk3y-˞XolGIW7qhtzrxv|bdsyT	 ;    PNG

   IHDR         r|   tEXtSoftware Adobe ImageReadyqe<  dIDATxڜN@ggQ&R"}ށW0<HxOG/ބB-ŲxɽL~3YiFӹȹ_־q
Çgtjݺn&;4^A(KJ[J6Lׇ#	%߿5nt{h	t:1
 "_ 0dǣ&!|HwZOVh#1wx-顝XD<ZQX-.ϘU\&/L4rs02j.]W]||x T8v	/LZGꋀ:o @B    IENDB`                              @charset "UTF-8";

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	font-size: 100%;
	vertical-align: baseline;
	background: transparent;
}
body {
	line-height: 1;
}
ol, ul {
	list-style: none;
}
blockquote, q {
	quotes: none;
}

/* remember to define focus styles! */
:focus {
	outline: 0;
}

/* remember to highlight inserts somehow! */
ins {
	text-decoration: none;
}
del {
	text-decoration: line-through;
}

/* tables still need 'cellspacing="0"' in the markup */
table {
	border-collapse: collapse;
	border-spacing: 0;
}

sub {
	font-size: smaller;
	vertical-align: sub;
}

sup {
	font-size: smaller;
	vertical-align: super;
}             @import url("reset.css");

/**************************************************************
	Global
**************************************************************/

body {
	font-family:Arial, Helvetica, sans-serif;
	font-size:13px;
	line-height:1.5;
	height:100%;
	background-image:url(/embedded/body-bg.gif);
	background-repeat:repeat-y;
	background-position:center;
	margin-bottom:20px;
	color:#999999;
}

a {
	color:#999;
	text-decoration:none;
}

a:hover {
	color:#ff8125;
}

h1 {
	font-size:18px;
	color:#ff8125;
	padding-bottom:30px;
}

h2 {
	color:#ff8125;
	padding-bottom:10px;
	font-size:13px;
}

h3 {
	color:#FF8125;
	font-weight:bold;
	font-size:11px;
}

table th {
	text-align:left;
}

.wrapper {
	margin-left:auto;
	margin-right:auto;
	position:relative;
	width:760px;
}

.header {
	background-color:white;
	padding-bottom:20px;
}

#navigation {
	float:right;
	margin-right:20px;
	margin-top:20px;
}

#navigation li {
	float:left;
	margin-right:1px;
}

#navigation li a {
	display:block;
	background-image:url(/embedded/menu-tab-left.gif);
	background-repeat:no-repeat;
	padding-left:5px;
	background-position:left top;
	font-size:13px;
	color:#666;
}

#navigation a.active {
	color:black;
	font-weight:bold;
}


#navigation li a span {
	display:block;
	padding-right:15px;
	padding-left:10px;
	padding-top:5px;
	padding-bottom:10px;
	background-image:url(/embedded/menu-tab.gif);
	background-repeat:no-repeat;
	background-position:right top;
}

img.logo {
	float:left;
	margin:20px;
	border:none;
}

.status {
	font-size:14px;
	line-height:1.3;
	padding:20px 20px 20px 38px;
	margin:20px 20px 0;
	clear:both;
	border:1px solid black;
	color:black;
	background-color:#CCC;
	background-image:url(/embedded/green.png);
	background-repeat:no-repeat;
	background-position:25px 22px;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
}

.status p {
	margin-left:10px;
}

.status.green {
	border-color:#090;
	background-color:#CF9;
	color:#090;
	background-image:url(/embedded/green.png);
}

.status.red {
	border-color:#900;
	background-color:#FCC;
	color:#900;
	background-image:url(/embedded/red.png);
}

.status.yellow {
	border-color:#FC3;
	background-color:#FFC;
	color:#FC3;
	background-image:url(/embedded/yellow.png);
}

.content {
	padding-top:20px;
	background-image:url(/embedded/shadow-bottom.gif);
	background-repeat:repeat-x;
	background-position:top;
	
}

.left_column {
	float:left;
	clear:left;
	width:232px:
}

.center_column {
	float:left;
	width:350px;
	margin-right:20px;
}

.right_column {
	float:left;
	width:138px;
	position:relative;
}

.clear {
	clear:both;
}

/**************************************************************
	Status Page
**************************************************************/

#message {
	font-size:11px;
	width:150px;
	padding:10px 20px;
	margin:0px 20px;
	background-color:white;
	border:1px solid #333;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	color:#333;
}

.center_column.main_status {
	width:507px;
	margin-right:0px;
}

.center_column table {
	text-align:left;
	width:100%;
	color:#666;
}

table#server_status {
	margin-bottom:20px;
}

#server_status tbody th {
	padding-left:20px;
	font-weight:normal;
}

#server_status td {
	text-indent:-9999px;
	background-repeat:no-repeat;
	background-position:left 8px;
	width:50px;
}

.center_column.main_status th, .center_column.main_status td {
	border-bottom:1px solid #999;
	padding:5px 10px 5px 0px;
}

#server_status td.green {
	background-image:url(/embedded/green.png);
}

#server_status td.yellow {
	background-image:url(/embedded/yellow.png);
}

#server_status td.red {
	background-image:url(/embedded/red.png);
}

.server_info {
	font-size:11px;
	padding:10px 20px 20px;
	background-color:white;
	border:1px solid #999;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
}

.server_info table {
	color:#999;
}

.server_info th {
	width:170px;
}

.server_info tbody th {
	padding-left:20px;
	font-weight:normal;
	text-align:right;
	padding-right:10px;
}

#app_info tbody td, #app_info tbody th {
	border-bottom:none;
}

table#server_info {
	margin-bottom:30px;
}

/**************************************************************
	Security, Database pages
**************************************************************/

.center_column.main th {
	padding-right:10px;
	padding-bottom:15px;
	vertical-align:top;
	font-weight:normal;
	width:118px;
}

.center_column.security td {
}

select {
        background-color:white;
        border:1px solid #999999;
        -moz-border-radius: 5px;
        -webkit-border-radius: 5px;
        color:#666666;
        float:left;
        width:166px;
	height: 24px;
}

input {
	background-color:white;
	border:1px solid #999999;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	padding:3px 7px;
	color:#666666;
	float:left;
	width:150px;
}

input.no_class {
	background-color:none;
	border:inherit;
	padding:0px;
	color:#666666;
	float:none;
	width:auto;
}

a.info {
	display:block;
	float:left;
	margin-left:8px;
	width:19px;
	height:20px;
	background-image:url(/embedded/info.png);
	background-repeat:no-repeat;
	background-position:left top;
	text-indent:-9999px;
}

.help_box {
	visibility:hidden;
	position:absolute;
	top:57px;
	border:1px solid #999999;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	padding:7px;
	font-size:11px;
	background-color:white;
}

#required_help_box {
	top:90px;
}

#optional_help_box {
	top:230px;
}

#install_help_box {
	top:460px;
}

.help {
	display:none;
}

a.save { 
	display:block;
	color:#999999;
	background-color:white;
	border:1px solid #999999;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	padding:2px 10px;
	float:left;
}

a.save:hover {
	color:#ff8125;
}

.pipe {
	margin-bottom:20px;
	padding-bottom:10px;
	background-image:url(/embedded/pipe.gif);
	background-position:left bottom;
	background-repeat:no-repeat;
}

.installer {
	border:1px solid #090;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	overflow:hidden;
	background-color:#CF9;
	color:#090;
	margin:20px 0px;
}

.installer h3 {
	background-color:#090;
	padding:3px 10px;
}

.installer h3 a {
	color:white;
}

#installers {
	display:none;
	padding:10px;
}

.results {
	border:1px solid #999999;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	overflow:hidden;
	background-color:white;
	margin-top:20px;
}

.results h3 {
	background-color:#999999;
	color:white;
	padding:3px 10px;
}

.code_wrapper {
	padding-left: 10px;
	font-size: 10px;

}

.results ol {
	list-style-position:outside;
	list-style-type:decimal-leading-zero;
	font-family:"Courier New", Courier, monospace;
	font-size:10px;
	margin-left:25px;
	padding:10px;
}

#package input {
	margin-top:10px;
	margin-bottom:10px;
}

.database_install {
	display: none;
}

.ok_to_install + .database_install {
	display: block;
}

/**************************************************************
	Documentation page
**************************************************************/

.center_column.main_status.docs {
	width:470px;
}

#docs_index {
	padding-top:20px;
}

#docs_index ol {
	list-style-type:upper-roman;
	list-style-position:inside;
	margin-left:25px;
}

#docs_index ol ol {
	list-style-type:lower-latin;
	margin-left:25px;
}

#docs_content {
	padding-top:30px;
}

#docs_content p {
	margin-bottom:20px;
}


/**************************************************************
	Documentation page
**************************************************************/
.pipe.apps th {
	background-color:#FF8125;
	color:#FFFFFF;
	border: 1px solid #000000;
	padding-left: 3px;
	font-size: 12px;
}
.pipe.apps td {
	color:#FF8125;
	border: 1px solid #000000;
	padding-left: 3px;
	font-size: 12px;
}
.pipe.app_install th {
        padding-right:10px;
        padding-bottom:15px;
        vertical-align:top;
        font-weight:normal;
        width:118px;
}
/***************************************************************
	License Page
***************************************************************/
.center_column.license_screen {
        width:507px;
        margin-right:0px;
}
.license_info {
        padding:10px 20px 20px;
        background-color:white;
        border:1px solid #999;
        -moz-border-radius: 5px;
        -webkit-border-radius: 5px;
}
.license_info th {
        background-color:#FF8125;
        color:#FFFFFF;
        border: 1px solid #000000;
        padding-left: 3px;
        font-size: 12px;
}
.license_info td {
        color:#FF8125;
        border: 1px solid #000000;
        padding-left: 3px;
        font-size: 12px;
}

      GIF89a    ̽ײ                  !     ,       
!@8Ļ ;   GIF89a !   ւ@o! ǡ`󗗘㌌wwybbdP0mmopYɫ﫫XXZ                                                                                  !XMP DataXMP<?xpacket begin="﻿" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5.1 Macintosh" xmpMM:InstanceID="xmp.iid:2EF4A51F5D4111E49D1686E86F8EDADF" xmpMM:DocumentID="xmp.did:2EF4A5205D4111E49D1686E86F8EDADF"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:2EF4A51D5D4111E49D1686E86F8EDADF" stRef:documentID="xmp.did:2EF4A51E5D4111E49D1686E86F8EDADF"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! 
	  !     ,     !  @hHȤB$2p XP
"䡩,G]аKR#Ay{(#l^n{IRh$uGVXWIr^NIdgikGx[InxGRaGgMHH\MG[C  $  # CHk٠yGGEMORYR#Cm$r2@ʝ!#}"5e^8kMgw"")#!9c( Ndd`*$X aAO[0!w?:t*;ckWˇX6BmF$/˕6!29f=FmhD2#Pa$:"%Fb
X-3|bK!\Gi'qx!i)ԷLT"]HfcCe"Ko	Т>gM@Q&hn
le!anc}^9$pMCT'Bw~ITD^IHM$6O[GqRTHsà6K|H8OU\L?CЃ齑2bHϑx {0aSp]J X`) W[)H2"8ɇGG xpAdq'}ZƠyhT4vPA hg"g@h"rTΔzlG3hGZwP@򪀘G$ANP+	w+Gk¯:]NPia D&'	h*o[)	{$ Я$,`o6a%iX{$|+mP@"H@,j/͆ A
(l!J,w" r
]=Wf{((^z% T _hQGMBJD@l	BĂ$aũF7I|AzyZʬ$13k-j$AIc,QN6kړ/@l~j9^+wR*LqD/!"@kh-Bk=u[W|,zKky
G<C,ul\ {{Em< ~@k3 Q0Q҃0IA
a  0L!\P8Bj5  2V P&B	0X!4 ߝ*T֐PЇJ&:PH*ZQ*ǐx.zщ   
 A	ZgٲF}W@ &0÷m`#,	ذq
@4 I')E $,H@&	& @C%	!1Jr  d#H k!F)H`WZ_$ 6B`L 
IR Ю	̓UX*B l_ Dc[rJP2N% Cdj   ;               PNG

   IHDR      !   	   tEXtSoftware Adobe ImageReadyqe<  $iTXtXML:com.adobe.xmp     <?xpacket begin="﻿" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5.1 Macintosh" xmpMM:InstanceID="xmp.iid:32C87AE557C911E4BB5798526BC76546" xmpMM:DocumentID="xmp.did:32C87AE657C911E4BB5798526BC76546"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:32C87AE357C911E4BB5798526BC76546" stRef:documentID="xmp.did:32C87AE457C911E4BB5798526BC76546"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>/  	IDATx[q8=	D RHU
$V ?7=*t+0
B\%DI0R(`.3N_@|݋N;ǯ5WhK3|㿛T~tmXYͯ'dc/	GRwZ`FGZ	ZL9r1Y5b~_Ɂ-,(wHNʘǌe̢-nϑ[ؐ\p3{/r;j!-G{d5ru$HRw4~#pN>eZoaiϽM=8!(7Pa:A|_!gY6A*=.8+G5Wdfsִ/w΍fu6˘qrŊC{rR4s7w衿ʱ&HoTCwK1U:}Wڰ)Ge~&W'CR64wXQ@t޸&A9dsm%1nFUQiGӥz@YfM&`L۳j!0mCiT6qx
f}6S-Ys\>Bۘ^@NT"pf&5لId2L<P,j2~Z98$?-ǮAi/	(mQ>NY;.8mΝٞ܋&]Ψ؅2]XX$-Q8QfEs#0'dwsTrS*ZL,~kòGf!i&!jU3Kz(.Yn[g}PWfsЈ*;qG1[;p]?2K&e!+d\>qOAhc&YdiI~		\}V%{=*"h,IݿO9Iw`A-\Vku>cdNcb7@x:.]Ϥe0FkhW 7W>gW)Rpɗ c^qSn{$_rLH­ԵamOv疸6uzfS/6|b%\rk6i*r_Uc=.h[1:
ə%.>-bJ${K8^{ҦJ	CXi+.'SԕP=L@e)B+~u0X;ۆT6f}sd,(TytD!@Dv/߭sp+BӬg|SDw#A_s3&ME*>78|.T1\!qn8m,q1kF+؀$Tvf&ʱmHvޟ\w/P:T&|:ΜsjΞN'v7Z_M%a)`$³'!ΩRT'4c>(h%e9YJ#YApP^mZNUYٗ8LBS'-GtS
il)ni#%T9$I(کy~GhQT/F=֖m#D5sLd#S[U~aG@!8-xSp'C^%
ь8x.G}*^;S<M8U6ㆂahwsX'"1R]e֩bcĄ80Q;Cvq9$nbѬQk|W}Hh
่dpa眗h_К<-wQ3m~huG%aC@XN>.ZNrDJ#֢cGq(EL<@4P!W))ycd10G;;eQ5 ]#QG]HiI})(ZXDYab4"\)G4;!8-2G<>RǀVQ e	5?{Ρ8Zꍫ(Nri	ާl{kڅ$.e$MN:uc٤<sele9W͙dm	]pl2;?]	WPޙw^"K6mPLflΟWH<TS k''{ߢjtZ"c&LyaPN	G4.Jcg.:q89Z~ )[
F:hP9-q<1r! jbI~Z %uCNj+t @y\%k$Y2powfP&'},+zR^ҷ</ ezMӯp*    IENDB`  PNG

   IHDR         r|   tEXtSoftware Adobe ImageReadyqe<  wIDATxڔRANP_JJ!Ć`b`R\{!wƅ$qc"qebb[}+tfޛ3SusVin٧Lw&n@bHTPHjmWvgQp{Xr,Gt_%5bB==m2I(v?DRbm[T='LoJ@GI~6&!p\񕩐^_:D*>;6\i
@*.K<I8hiu,N2mSrJ&$1f22rx\u3~-.ʋWـi8q[ߛbKM?on*jWM?-{ Ny((+    IENDB`           //	Author: Dan Piscitiello
/////////////////////////////////////////////////////////////////////////////////////////
//
//	AJAX HTTP Request Object
//
/////////////////////////////////////////////////////////////////////////////////////////

function getHTTPObject(){
   if (window.ActiveXObject) 
       return new ActiveXObject("Microsoft.XMLHTTP");
   else if (window.XMLHttpRequest) 
       return new XMLHttpRequest();
   else {
      alert("Your browser does not support AJAX.");
      return null;
   }
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Submit license activation chosen method
//
///////////////////////////////////////////////////////////////////////////////////////// 

function submitLicenseMethod(){
	if (getCheckedValue(document.getElementsByName('activationType')) == ""){
		alert("Please choose an activation method.");
		return;
	}
	document.getElementById("choose_license_method").style.display = "none";
	document.getElementById("loading").style.display = "block";
	httpObject = getHTTPObject();
	if (httpObject != null) {
        httpObject.open("GET", "php/licenseMethod.php?licenseMethod="+getCheckedValue(document.getElementsByName('activationType')), true);
        httpObject.send(null);
		httpObject.onreadystatechange = licenseContinue;    
    }
}

function licenseContinue(){
	if(httpObject.readyState == 4){
		document.getElementById("loading").style.display = "none";
		switch (httpObject.responseText) {
			case "auto":
				document.getElementById('automatic_activation').style.display = "block";
				break;
			case "manual":
				document.getElementById('manual_activation').style.display = "block";
				break;
			default:
				return;
		}
	}
}

function getCheckedValue(radioObj) {
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Automatic Activation
//
/////////////////////////////////////////////////////////////////////////////////////////

function validateEM(form){
	if (form.email_address.value == "") {
		alert("Email address is required for activation.");
		form.email_address.focus();
		return (false);
	}
	if (form.system_id.value == "") {
		alert("System ID is required for activation.");
		form.system_id.focus();
		return (false);
	}
	// Additional validation here if needed		
	return (true);
} 

function submitAutomatic(){
	if(validateEM(document.automatic_activation_form)){
		submitAutomaticLicense();
	}
}

function submitAutomaticLicense(){
	document.getElementById("automatic_activation").style.display = "none";
	document.getElementById("loading").style.display = "block";
	httpObject = getHTTPObject();
	if (httpObject != null) {
        httpObject.open("GET", "php/automatic.php?systemId="+document.automatic_activation_form.system_id.value+"&serialNo="+document.automatic_activation_form.serial_num.value+"&email="+document.automatic_activation_form.email_address.value, true);
        httpObject.send(null);
		httpObject.onreadystatechange = automaticContinue;    
    }
}

function automaticContinue(){
	if(httpObject.readyState == 4){
		document.getElementById("loading").style.display = "none";
		document.getElementById("status_msg").className = ("status green");
		document.getElementById("status_msg").style.display = "block";
		switch (httpObject.responseText) {
			case "success":
				document.getElementById("activation_complete").style.display = "block";
				stripe("system_info");
				break;
			case "failure":
				alert("An error occurred!");
				break;
			default:
				return;
		}
	}
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Manual Activation
//
/////////////////////////////////////////////////////////////////////////////////////////

function validateID(form){
	if (form.man_system_id.value == "") {
		alert("System ID is required for activation.");
		form.man_system_id.focus();
		return (false);
	}	
	// Additional validation here if needed		
	return (true);
} 

function beginManualActivation(){
	if(validateID(document.manual_activation_form)){
		getMachineId();
	}
}

function getMachineId(){
	document.getElementById("manual_step_1").style.display = "none";
	document.getElementById("loading").style.display = "block";
	httpObject = getHTTPObject();
	if (httpObject != null) {
        httpObject.open("GET", "php/getMachineId.php?systemId="+document.manual_activation_form.man_system_id.value+"&serialNo="+document.manual_activation_form.man_serial_num.value, true);
        httpObject.send(null);
		httpObject.onreadystatechange = manualActivationStepTwo;    
    }
}

function manualActivationStepTwo(){
	if(httpObject.readyState == 4){
		document.getElementById("loading").style.display = "none";
		document.getElementById("manual_step_2").style.display = "block"
		document.manual_activation_form.machine_id.value = httpObject.responseText;
	}
}

function validateKeys(form){
	if (form.key1.value == "") {
		alert("Key 1 appears to be incorrect. Both keys are required for activation.");
		form.key1.focus();
		return (false);
	}
	if (form.key2.value == "") {
		alert("Key 2 appears to be incorrect. Both keys are required for activation.");
		form.key2.focus();
		return (false);
	}
	// Additional validation here if needed		
	return (true);
}

function submitManualActivation(){
	if(validateKeys(document.manual_activation_form)){
		submitKeys();
	}	
}

function submitKeys(){
	document.getElementById("manual_step_2").style.display = "none";
	document.getElementById("loading").style.display = "block";
	httpObject = getHTTPObject();
	if (httpObject != null) {
        httpObject.open("GET", "php/submitKeys.php?key1="+document.manual_activation_form.key1.value+"&key2="+document.manual_activation_form.key2.value, true);
        httpObject.send(null);
		httpObject.onreadystatechange = completeManualActivation;    
    }
}

function completeManualActivation(){
	if(httpObject.readyState == 4){
		document.getElementById("loading").style.display = "none";
		document.getElementById("manual_activation").style.display = "none";
		document.getElementById("status_msg").className = ("status green");
		document.getElementById("status_msg").style.display = "block";
		switch (httpObject.responseText) {
			case "success":
				document.getElementById("activation_complete").style.display = "block";
				stripe("system_info");
				break;
			case "failure":
				alert("An error occurred!");
				break;
			default:
				return;
		}
	}
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Table Striping
//
/////////////////////////////////////////////////////////////////////////////////////////

function hasClass(obj) {
	var result = false;
 	if (obj.getAttributeNode("class") != null) {
		result = obj.getAttributeNode("class").value;
 	}
 	return result;
}   

function stripe(id) {
	var even = false;
	var evenColor = arguments[1] ? arguments[1] : "#f3f3f3";
	var oddColor = arguments[2] ? arguments[2] : "#fff";
	var table = document.getElementById(id);
	var tbodies = table.getElementsByTagName("tbody");

	for (var h = 0; h < tbodies.length; h++) {
  		var trs = tbodies[h].getElementsByTagName("tr");
  		for (var i = 0; i < trs.length; i++) {
			if (!hasClass(trs[i]) && !trs[i].style.backgroundColor) {
				var tds = trs[i].getElementsByTagName("td");
				for (var j = 0; j < tds.length; j++) {
					var mytd = tds[j];
					if (!hasClass(mytd) && !mytd.style.backgroundColor) {
						mytd.style.backgroundColor = even ? evenColor : oddColor;
					}
				}
			}
			even =  ! even;
  		}
	}
}
                      
#status_msg,
#loading,
#automatic_activation,
#manual_activation,
#activation_complete,
#manual_step_2 { display:none; }

#loading {
	width:16px;
	height:16px;
	margin-top:50px;
	margin-left:auto;
	margin-right:auto;
}

.wrapper.license th,
.wrapper.license td { border-bottom:none; }

input.read_only {
	background:none;
	border:none;
	padding-left:0px;
}

#choose_license_method table,
#manual_step_2 table { margin-top:15px; }

#choose_license_method th {
	width:160px;
	vertical-align:middle;
}

#choose_license_method input { width:auto; }

#automatic_activation th,
#manual_activation th,
#activation_complete th {
	width:100px;
	vertical-align:middle;
}

#activation_complete h2 {
	margin-top:20px;
	padding-bottom:5px;
}

#system_activations th#name { max-width:65px; }

table#system_info th,
table#system_info td { padding-left:15px; }

table#system_info { border:1px solid #999999; }  GIF89a    ÇՏ㧧                                             !NETSCAPE2.0   !Created with ajaxload.info !	
   ,       P  di0l!*`Ƒ5و[<iP),IZ$bH85&x5k <yB !	
   ,       h  GҌh*ਨ@$E}eh @
LcQGBP5 <5UdQ+"g0Ak#A <P70<	0Y8*	#! !	
   ,       `  #(H*
P	-13
:C1KHH.$ٱy j.WD@Y 0H	,0B
kJU?5w|$k\)! !	
   ,       R  di 1@Ck!B`? #E8zBQXcmv" £``UFrp)f! !	
   ,       `  di@E1m]ǹHІ(4 (,F!aH XSm5bDH ab,
%p3c#'"467P&*X/($! !	
   ,       _  diH@@4 ²A"I`>nI0$K7H,-t*E-``1@C7h/1f\)&! ;                          html documentation.html status.html security.html database.html apps.html activate.html tab security docs database apps activate Sending the HTTP response. no-cache post-check=0, pre-check=0 Mon, 26 Jul 1997 05:00:00 GMT   mod_config.c - module execution complete. green [SERVER_INSTALLED_COLOR] 1.7.1.8102 [SERVER_VERSION] [DEFAULT_HANDLER] [DEFAULT_RESOURCE] [HANDLER_LIST] [MODULE_LIST] [SYSTEM_ID] dbType dbc dbBinary dbCommand dbRequired dbEnvVars dbAccount d3Account dbUsername dbPassword dbWorkingDir dbAcctPath dbVME dbAppName dbHostName dbPortNum dbFails maxRequest [DB_CONFIG_COLOR] red yellow MVAPPS.STATUS  set working dir: chdir("%s") succeeded  set working dir: chdir("%s") failed Actual database command for MVAPPS.STATUS: r    Database command failed in modconf_tab_status: %s   Results from database command: : INSTALLER-VERSION APP <br> End of database command results. [MV_SOFT_COLOR] [APP_INSTALLER_VERSION] [INSTALLED_APPS]   Configuration or System problem Database not configured <table cellpadding="0" id="license_info">
   <thead>
     <tr>
       <th scope="row">Server License:</th>
       <td>Activated</td>
     </tr>
   </thead>
   <tbody>
       <th scope="row">Serial #:</td>
       <td> %i </td>
        <th scope="row">Users:</td>
 Unlimited %2i          <th scope="row">Edition:</td>
 SDK Standard Professional Enterprise Evaluation          <th scope="row">Expiration Date:</td>
   </tbody>
 </table>
 [SERVER_LICENSE_COLOR]   [SERVER_LICENSE_ALT] Not Activated 
 [LICENSE_TABLE] [SYSTEM_STATUS_COLOR] package submit_form true [PACKAGE] Package Error: %s Invalid package file '%s'. %sbin/mvappsvr readpkg "%s" %s/bin/mvappsvr readpkg "%s" Reading Package ReadPKG Error: %s TITLE VERSION HANDLER-NAME INSTALL-HANDLER-FILE Incomplete package data file. %sbin/mvappsvr unarchive -i "%s" -p "%sdocroot" %s/bin/mvappsvr unarchive -i "%s" -p "%s/docroot" Un-Archiving Package UnArchive Error: %s  Archive file was extracted successfully Unable to extract archive.  See results window for more information.    MVAPPS.INSTALLER %sdocroot/%s/MV-PACKAGE    Cannot prepare database command Installing MV Package   Cannot execute database command Application Install Complete    MV Package Install Error, See the results window for more information <br>Creating Handler:<br> %sdocroot/%s/%s %sconfig/%s %s/docroot/%s/%s %s/config/%s Source:  Target:  Could not copy the handler configuration file.  Appending to global configuration:<br> a ; %s
 %%include_config "%s"
   Cannot append to configuration: %s  <div class="status green"> <p>Thank you, your package was successfully installed.<br><b>(Package: "%s", Version: "%s")</b></p></div> [PASSFAIL] <br><b>Package Installation is Complete!</b><br><br> Unknown Error  <div class="status red"> <p>An error has occurred, please contact your administrator.<br><b>(%s)</b></p></div> requesting mvapps.status <tr><td> </td><td align=center> </td></tr>  <tr><td align="center" colspan="3"><br><b>No Applications Installed</b><br><br></tr></tr> [APP_TABLE]   <div class="status red"> <p>An error has occurred, please contact your administrator.<br><b>(Database has not been configured)</b></p></div>    <tr><td colspan="3" align="center"><b><br>Database not configured<br><br></b></td></tr> [RESULTS_DIV]   <div class="results"><h3>Results</h3><div class=code_wrapper><code>%s</code></div></div> feature install_dashboard database_setup database_platform dbtype %s/core/%s %score/%s %s/platform.conf    Internal Error: platform configuration file "%s" not found. Internal Error: platform configuration file "%s" is corrupt. dbVarMode dm_acct_name dm_acct_pass dm_username dm_password dm_behavior %sconfig/dbc_database.conf %s/config/dbc_database.conf w ; configured by mod_config
 [dbc]
   dbType       = "%s"
   dbCommand    = "%s"
   dbAccount    = "%s"
   dbBinary     = "%s"
   dbUsername   = "%s"
   dbPassword   = "%s"
   dbVME        = "%s"
   dbWorkingDir = "%s"
   dbAcctPath   = "%s"
   dbAppName    = "%s"
   dbHostName   = "%s"
   dbPortNum    = "%i"
   maxRequest   = "%i"
   dbFails      = "%i"
   dbVarMode    = "%i"
   dbRequired   = "%s"
   dbEnvVars    = "%s"
   cTypeIsStart = "true"

 System Error fopen:%s System Error (install path ): %s dbconfig.html [DBCONFIG] dbhelp.html [DBHELP] [DBINSTALL] dbbinary dbaccount dbusername dbpassword dbworkingdir dbacctpath dbvme dbappname dbhostname dbenvvars dbportnum dbfails maxrequest   Invalid entry for "DB Retrys", this parameter must be between 1 and 999.    Invalid entry for "Segment Size", this parameter must be between 128 and 8192.  <div class="status green"> <p>Thank you, your changes have been saved.</p></div>    <div class="ok_to_install"></div> db_package install_files Installing database packages. logto install_command%i    Unable to execute installation command, see results window. Unknown error, see the results window for more information. <div class="status green"> <p>Thank you, the dashboard software has been successfully installed.<br><b>(Version: %s)</b></p></div> [DBBINARY] [DBWORKINGDIR] [DBACCTPATH] [DBUSERNAME] [DBPASSWORD] [DBACCOUNT] [DBVME] [DBAPPNAME] [DBHOSTNAME] [DBENVVARS] [DBPORTNUM] [MAXREQUEST] [DBFAILS] [DM_USERNAME] [DM_PASSWORD] [DM_ACCT_NAME] [DM_ACCT_PASS] [DB_PACKAGE] SELECTED [DMB_LOGTO] [DMB_PROMPT] [DBPLATFORM_OPTIONS] pass1 pass2 %sconfig/admin_password.conf %s/config/admin_password.conf [config]
   AuthUsername = "admin"
   AuthPassword = "%s"

 System Error: %s,%s Passwords do not match <div class="status green"> <p>Thank you, your password has been updated.</p></div>  <li id="database_required"><h3 class="docs_sub_item">Required Parameters</h3><p>The "Required Parameters" section includes all of the paramters that must be set for the software to operate correctly.<br><br><u>Platform</u> Select the MultiValue database platform type that you are using with your dashboard. Other required &amp; optional parameters vary depending on the platform selected.</p></li> dbdoc.html [DBDOC] act_submit license_key activate_pass %sconfig/mvdb.conf %s/config/mvdb.conf [behavior]
   licenseKey   = "%s"
 %s /config?tab=activate&activate_pass=true <div class="status red"> <p>License Key not updated.<br><b>(%s)</b></p></div>   <div class="status green"> <p>Thank you, your License Key was successfully updated.</p></div>   <tr><td colspan="3" align="center"><br><b>%s</b><br><br></td></tr>  <tr><td colspan="3" align="center"><br><b>This software has not been activated.</b><br><br></td></tr>   <tr>
       <td align="left">License Key:</td>
     <td align="left">   </tr>
      <td align="left">Serial #:</td>
        <td align="left"># Users:</td>
     <td align="left">Edition:</td>
     <td align="left">Expiration Date:</td>
 [STATUS_MESSAGE] [LICENSE_KEY] <pre> swap tags:<br> -------------:<br><br> %s = %s (%i)<br>
 </pre> check_app_installer 01
 rb wb [PACKAGE_FOLDER] [DBCMDLINE]  Required parameter %s for platform %s is missing.   File required for software installation is missing or cannot be accessed: "%s"; error code %d. %s/%s    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<script src="/embedded/main.js" type="text/javascript"></script>

<title>MultiValue Application Server: Documentation</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status"><span>Status</span></a></li>
            <li><a href="/config?tab=security"><span>Security</span></a></li>
            <li><a href="/config?tab=docs" class="active"><span>Docs</span></a></li>
            <li><a href="/config?tab=database"><span>Database</span></a></li>
            <li><a href="/config?tab=apps" ><span>Apps</span></a></li>
            <li><a href="/config?tab=activate"><span>Activate</span></a></li>

        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />

        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">

        <div class="left_column">
        	<div id="message">
        		<h2>Documentation</h2>
                <p>This page contains the documentation describing how to use the configuration interface for the MultiValue dashboard.  Use the table of contents on the right to navigate to the documentation section that you need.  If you cannot find the answer to your question in this section, please contact your Zumasys support representative.

               <br><br>
               <b>Zumasys Support<br>
               support@zumasys.com</b></p>

            </div>
        </div><!--left_column-->
    
    	<div class="center_column main_status docs">
        	
            <h1>Application Server</h1>
            <div id="docs_index">
                <h2>Table of Contents</h2>
                <ol>
                    <li><a href="#getting_started">Getting Started</a>
                    <li><a href="#status">Status</a>
                        <ol>
                            <li><a href="#status_icons">Status Icons</a></li>
                            <li><a href="#status_serverinfo">Server Summary Information</a></li>
                            <li><a href="#status_apps">Installed Applications</a></li>
                        </ol>
                    </li>
                    <li><a href="#security">Security</a>
                        <ol>
                            <li><a href="#security_admin">Admin Password</a></li>
                        </ol>
                    </li>
                    <li><a href="#docs">Docs</a></li>
                    <li><a href="#database">Database</a>
                        <ol>
                            <li><a href="#database_required">Required Parameters</a></li>
                            <li><a href="#database_optional">Optional Parameters</a></li>
                            <li><a href="#database_install">Install Dashboard Software</a></li>
                        </ol>
                    </li>
                    <li><a href="#apps">Apps</a>
                        <ol>
                            <li><a href="#apps_installed">Installed Applications</a></li>
                            <li><a href="#apps_install_new">Install a New Application</a></li>
                        </ol>
                    </li>
                    <li><a href="#activate">Activate</a>
                        <ol>
                            <li><a href="#licensing_information">Licensing Information</a></li>
                        </ol>
                    </li>
                </ol>
            </div>
            
            <div id="docs_content">
          	<ol>
    	       	  <li id="getting_started" class="pipe">
                        <h2>Getting Started</h2>
                        <p> Thank you for installing the MultiValue Application Server!  This page will guide you through
                            the setup and configuration of your new software.  There are four simple steps that are required
                            to complete the installation of your software.
                            <br> <br>
                            <u>Step 1: Run the MV Application Server Installer.</u><br>
                               To begin the installation of the MultiValue Application Server, first download and run the correct installer for your
                               system.  For Windows-based systems the installer will be a single executable file called "mvapps-[version].exe".  For
                               example, the file "mvapps-1.0.0.1234.exe" would contain the installation program for version 1.0.0, build 1234.  On
                               Unix-based machines such as Linux or AIX, the installer will be a single executable file called "mvapps-[version].bin".
                               <br> <br>
                               To begin the installation, execute the installation file.  The installer program will guide you through the remainder
                               of the installation process.
                               <br><br>
                               Once the installation script has completed, you should be able to connect to the application server's configuration
                               interface using your favorite web browser.  To connect, open your web browser and point it to the name or ip address 
                               of your database server.  Make sure to include the TCP port number that you selected when running the installation 
                               script in the address bar.  If you accepted the default port, your web address will be something like:
                               <br><br><b>http://my.pickserver.com:8180/config</b> 

                            <br> <br>
                            <u>Step 2: Configure Your Database Connection.</u><br>
                               Once you are able to connect to the configuration interface, you are ready to configure the system using the "Database"
                               tab.  First, you need to select the MultiValue platform type from the dropdown list at the top of this page.
                               For all installations, you will need to fill out the top section of the database screen labeled "Required
                               Parameters".  In this section, enter the full path to your MultiValue database executable. 
<!--                           For Rocket D3, this typically is /usr/bin/d3 for Unix and Linux, or c:\Program Files\RocketSoftware\d3\D3programs\D3Tcl.exe on Windows. -->
                               Also in this section you can select the name of the account that will be created to house
                               the MultiValue software applications that you install and you will also be able to select a password for the
                               "MVDASHBOARD" user.  This user account will automatically be created and used to access your MV system.
                               <br><br>
                               If necessary for your installation, you may also configure the optional parameters at this time.  For more information
                               and further description of these parameters please see the "Database" section of this help page.

                            <br> <br>
                            <u>Step 3: Install the Base Package.</u><br>
                               After the software has validated your entries in the required parameters section, the database tab will be expanded
                               to allow you to install the core MultiValue database software.  Fill out all of the information requested in this section,
                               and when you are ready, click the "Install" button to complete your base configuration.  If the installation process
                               succeeds, a message will be displayed and the database software version will be displayed.  More information
                               regarding this section is available in the "Database" section of this help page.

                            <br> <br>
                            <u>Step 4: Activate Your New Software.</u><br>
                               To use your new software, it must be activated to ensure that you have access to all of the features that you 
                               have purchased.  To activate your software, click on the "Activate" tab inside the configuration interface
                               and enter in your licensing information.   More information about this function is available in the "Activate" section
                               of this help page.

                            <br>    
                        </p>
                  </li>
    	       	  <li id="status" class="pipe">
                    	<h2>Status</h2>
                    	<p>The "Status" tab is intended to provide the software's administrator a summary of its health and configuration status.  When
                           logging into the configuration interface, this screen is displayed to give a quick, graphical view into the status of the 
                           Application Server.
                        </p>
                        <ol>
                            <li id="status_icons">
                                <h3 class="docs_sub_item">Status Icons</h3>
                                <p>The first section of the Status screen includes five icons, which display the current health of the software. 
                                <br> <br>
                                <u> System Status</u>
                                    This icon displays the overall status of the system.  
                                       A green icon indicates that all of the configuration has been completed and verified.  
                                       A yellow icon indicates that the configuration appears to be complete, but for some reason the configuration 
                                         is broken or invalid.  
                                       A red icon indicates that the system is not fully configured and/or usable.
                                <br><br>
                                <u> Server Installed</u>
                                    This icon displays the status of the basic server software installation as completed by the installation script.
                                      A green icon indicates that the software has been fully installed.
                                      A yellow icon indicates that a problem has been detected with the installation of the software.
                                      A red icon indicates that the software has not been installed.
                                <br><br>
                                <u> Server Activated</u>
                                    This icon displays the activation status of the software.
                                      A green icon indicates that the software has been activated.
                                      A yellow icon indicates that an activation has been completed or started, but it is not valid.
                                      A red icon indicates that the software has not been activated.
                                <br><br>
                                <u> Database Configured</u>
                                    This icon displays the database configuation status.
                                      A green icon indicates that the software has been configured and that the configuration appears to be valid.
                                      A yellow icon indicates that the software has been configured, but a problem was detected.
                                      A red icon indicates that the software has not been configured.
                                <br><br>
                                <u> MV Software Installed</u>
                                    This icon displays the status of the MultiValue software part of the installation.
                                      A green icon indicates that the MultiValue software has been installed and is working correctly.
                                      A yellow icon indicates that there is a problem with the installation, or that the MultiValue software 
                                        cannot be executed.
                                      A red icon indicates that the MultiValue software has not been installed.
                                <br><br>
                                </p>
                            </li>
                            <li id="status_serverinfo">
                                <h3 class="docs_sub_item">Server Summary Information</h3>
                                <p>The second section of the status screen includes some general information regarding the installation of
                                   your application server software.
                                   <br><br>
                                   <u>Server Version </u>
                                      This heading displays the version of the MultiValue Application Server that you are running in the form
                                      [Major].[Minor].[Sub-Minor].[Build_No], indicating the Major Release, Minor and Sub-Minor Revision, and 
                                      Build Number. 
                                   <br><br>
                                   <u>System ID</u>
                                      The system ID is issued by Zumasys and uniquely identifies your installation of the software.

                                   <br><br>
                                   <u>Configured Handlers</u>
                                      The "Configured Handlers" section lists all of the installed URI Handlers.  These handlers are used
                                      internally to map URIs to installed application packages.            
 
                                   <br><br>
                                   <u>Included Modules</u>
                                      The application server software is implemented using a modular design allowing for easy expansion
                                      in the future.  This section includes a list of all of the currently configured modules.

                                   <br><br>
                                   <u>Default Handler</u>
				      The "Default Handler" is used to determine which application is executed by default when no application
                                      handler is defined in the request URI.
                                   <br><br>
                                   <u>Default Resource</u>
                                      The "Default Resource" is used to determine which application program is executed if no application resource
                                      is defined in the request URI.
                                   <br><br>
                                </p>
                            </li>
                            <li id="status_apps">
                                <h3 class="docs_sub_item">Installed Applications</h3>
                                <p>The third section of the status screen includes a list of all of the applications that are currently
                                   installed and configured using the MultiValue Application Server.  To install new applications, use the 
                                   "Apps" tab inside the configuration interface.
                                </p>
                            </li>
                        </ol>
                    </li>

                    <li id="security" class="pipe">
                    	<h2>Security</h2>
                    	<p>The "Security" tab includes all of the configurable parameters related to maintaining the security of the 
                           MultiValue Application Server.
                        </p>
                        <ol>
                            <li>
                                <h3 class="docs_sub_item">Admin Password</h3>
                                <p>The admin password is used to access both the configuration interface at /config, and also any 
                                   MultiValue applications which are accessible using the "sdbc" handler.  You can identify these
                                   applications by looking for /sdbc/ in the request URI.
                                </p>
                            </li>
                        </ol>
                    </li>

                    <li id="docs" class="pipe">
                        <h2>Docs</h2>
                        <p>The "Documentation" tab provides more information about the configuration
                           and setup of the MultiValue Application Server.
                        </p>
                    </li>

                    <li id="database" class="pipe">
                        <h2>Database</h2>
                        <p>The "Database" tab provides an interface to modify all of the parameters specific to your MultiValue
                           database.  These items are required for the operation of your software.
                        </p>
                        <p>The parameters shown on this tab depend on the MultiValue platform type that you have selected.
                           The database configuration parameters are organized into 3 sections: Required Parameters, Optional Parameters
                           and Dashboard Install parameters.
                        </p>
                        <ol>
[DBDOC]
                        </ol>
                    </li>

                    <li id="apps" class="pipe">
                        <h2>Apps</h2>
                        <p>The "Apps" tab is used to view your list of installed applications and to install new applications as necessary.</p>
                        <ol>
                            <li id="apps_installed">
                                <h3 class="docs_sub_item">Installed Applications</h3>
                                <p>The "Installed Applications" section of this tab is used to display the package name, version and handler
                                   name for all of the software packages that you have installed into the application server.
                                </p>
                            </li>
                            <li id="apps_install_new">
                                <h3 class="docs_sub_item">Install a New Application</h3>
                                <p>To install a new application, enter the full system path to the package file that was provided by Zumasys in
                                   the "Package Path" field.  Once the installation has completed, you can access the new software package
                                   using its handler name in the request URI.</p>
                            </li>
                        </ol>
                    </li>


                    <li id="activate" class="pipe">
                        <h2>Activate</h2>
                        <p>The "Activate" tab is used to view and update the license information for your copy of the MultiValue Application
                           server software.
                        </p>
                        <ol>
                            <li id="licensing_information">
                                <h3 class="docs_sub_item">Licensing Information</h3>
                                <p>If you have entered in a valid license, the "Licensing Information" section of the "Activate" tab will display
                                   the information that your license key provides.  If you have not entered in a valid licese, there will be no
                                   licensing information displayed.  You may enter in or update your license anytime by entering it in the "License
                                   Key" text box and clicking on "Update".
                                </p>
                            </li>
                        </ol>
                    </li>






                </ol>
            </div>
            
        </div><!--center_column-->

	</div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
                         <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<title>MultiValue Application Server: Status</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status" class="active"><span>Status</span></a></li>
            <li><a href="/config?tab=security"><span>Security</span></a></li>
            <li><a href="/config?tab=docs"><span>Docs</span></a></li>
            <li><a href="/config?tab=database"><span>Database</span></a></li>
            <li><a href="/config?tab=apps"><span>Apps</span></a></li>
            <li><a href="/config?tab=activate"><span>Activate</span></a></li>

        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />
        
        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">

        <div class="left_column">
        	<div id="message">
        		<h2>Welcome</h2>
                <p>Welcome to the MultiValue Application Server configuration interface.  This interface will help you check on the status and version of your new software, update your configuration, and install new applications.  Use the tabs on the top of this page to navigate the configuration screens. </p>
            </div>
        </div><!--left_column-->
    
    	<div class="center_column main_status">
        
        	<h1>System Status</h1>
        	
            <table id="server_status" cellpadding="0">
            	<thead>
                	<tr>
                    	<th scope="row">System Status:</th>
                        <td class="[SYSTEM_STATUS_COLOR]">Ok</td>
                    </tr>
                </thead>
                <tbody>
               	    <tr>
                    	<th scope="row">Server Installed:</th>
                        <td class="[SERVER_INSTALLED_COLOR]">Ok</td>
                    </tr>
                    <tr>
                        <th scope="row">Server Activated:</th>
                        <td class="[SERVER_LICENSE_COLOR]" alt="[SERVER_LICENSE_ALT]">[SERVER_LICENSE_ALT]</td>
                    </tr>

                    <tr>
                    	<th scope="row">Database Configured:</th>
                        <td class="[DB_CONFIG_COLOR]">Ok</td>
                    </tr>
                    <tr>
                    	<th scope="row">MV Software Installed and Operational:</th>
                        <td class="[MV_SOFT_COLOR]">Ok</td>
                    </tr>
                </tbody>
            </table>
            <div><p>
                Click <a href="javascript:window.location='/'"><b>here</b></a> to launch the Dashboard once everthing is properly installed.
                <hr>
                </p>
            </div>
            <div class="server_info">
            
                <table cellpadding="0" id="server_info">
                    <thead>
                        <tr>
                            <th scope="row">Server Version:</th>
                            <td>[SERVER_VERSION]</td>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <th scope="row">Configured Handlers:</th>
                            <td>[HANDLER_LIST]</td>
                        </tr>
                        <tr>
                            <th scope="row">Included Modules:</th>
                            <td>[MODULE_LIST]</td>
                        </tr>
                        <tr class="alt">
                            <th scope="row">Default Handler:</th>
                            <td>[DEFAULT_HANDLER]</td>
                        </tr>
                        <tr>
                            <th scope="row">Default Resource:</th>
                            <td>[DEFAULT_RESOURCE]</td>
                        </tr>
                    </tbody>
                </table>
                
                <table cellpadding="0" id="app_info">
                    <thead>
                        <tr>
                            <th scope="row">Application Installer Version:</th>
                            <td>[APP_INSTALLER_VERSION]</td>
                        </tr>
                    </thead>
                    <tbody>
                        <tr class="alt">
                            <th scope="row">Installed Applications:</th>
                            <td>[INSTALLED_APPS]</td>
                        </tr>
                    </tbody>
                </table>

<!-- start license info -->
                [LICENSE_TABLE]
<!-- end license info -->
            </div><!--server_info-->
            
        </div><!--center_column-->

	</div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
                         <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<script src="/embedded/main.js" type="text/javascript"></script>

<title>MultiValue Application Server: Security</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status"><span>Status</span></a></li>
            <li><a href="/config?tab=security" class="active"><span>Security</span></a></li>
            <li><a href="/config?tab=docs"><span>Docs</span></a></li>
            <li><a href="/config?tab=database"><span>Database</span></a></li>
            <li><a href="/config?tab=apps"><span>Apps</span></a></li>
            <li><a href="/config?tab=activate"><span>Activate</span></a></li>

        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />

        [PASSFAIL]
        
        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">
        <div class="left_column">
        	<div id="message">
        		<h2>Security</h2>
                <p>This page will help you reset the administrative password for the configuration application.  To reset the password for the "admin" user, enter your new password into the boxes to the right of this message.  Once you have entered your passwords, click on the "Save Changes" button to update the password.  Once you have successfully changed your password in this section, you will need to re-login to the configuration interface to continue.</p>
            </div>
        </div><!--left_column-->
    
    	<div class="center_column main">
        	
            <h1>Security</h1>
            
            <form name="admin_password" id="admin_password" method="get">
              <input type="hidden" name="tab" value="security">
            	<div class="pipe">
                    <table cellpadding="0">
                        <tr>
                            <th>Admin Password:</th>
                            <td><input type="password" name="pass1" id="pass1" /><a href="javascript:showHelp('pass1_help', 'pass_help_box');" class="info">More info</a></td>
                        </tr>
                        <tr>
                            <th>Confirm Password:</th>
                            <td><input type="password" name="pass2" id="pass2" /><a href="javascript:showHelp('pass2_help', 'pass_help_box');" class="info">More info</a></td>
                        </tr>
                    </table>
               	</div>
                <a href="javascript:savePass();" class="save">Save Changes</a>
            </form>
            
        </div><!--center_column-->
        
        <div class="right_column">
        	<div class="help_box" id="pass_help_box">
            	<h3>More Info</h3>
                <div id="pass1_help" class="help">Enter the password that you would like to use for the configuration interface in this box.</div>
                <div id="pass2_help" class="help">Enter the same password as above to confirm.  Entering the password twice helps to ensure that the correct changes are made.</div>
            </div>
        </div>

	</div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
                    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<script src="/embedded/main.js" type="text/javascript"></script>

<title>MultiValue Application Server: Database</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status"><span>Status</span></a></li>
            <li><a href="/config?tab=security"><span>Security</span></a></li>
            <li><a href="/config?tab=docs"><span>Docs</span></a></li>
            <li><a href="/config?tab=database" class="active"><span>Database</span></a></li>
            <li><a href="/config?tab=apps"><span>Apps</span></a></li>
            <li><a href="/config?tab=activate"><span>Activate</span></a></li>

        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />

        [PASSFAIL] 
        
        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">

        <div class="left_column">
            <div id="message">
                <h2>Database</h2>
                <p>The database tab will help you configure your MultiValue Application Server to connect to your MultiValue database.  The most important parameters are the ones listed under the "Required" section.  These items are required to make sure that your software functions correctly.  The parameters listed in the "Optional" section may be required for some installations, but are generally used for performance tuning or other optional settings.  If you have any questions, please contact your MultiValue support representative.

               <br><br>
               <b>MultiValue Support<br>
               support@zumasys.com</b></p>
            </div>
        </div><!--left_column-->
    
        <div class="center_column main">

            <h1>Database Setup</h1>
                            
            <div>
                <h2 class="">Required Parameters</h2>
                <table cellpadding="0">
                    <tr>
                        <th>Platform:</th>
                        <td><select name="dbtype" id="dbtype" 
                            onchange="javascript:location.href='/config?tab=database&feature=database_platform&submit_form=true'+
                            '&dbtype='+this.value;">
                        [DBPLATFORM_OPTIONS]
                        </select>
                        <a href="javascript:showHelp('dbplatform_help', 'platform_help_box');" class="info">More info</a></td>
                    </tr>
                </table>                   
            </div>

[DBCONFIG]

[RESULTS_DIV]
            
        </div><!--center_column-->
        
        <div class="right_column database">
        
        <!-- BEGIN HELPBOXES -->

            <div class="help_box" id="platform_help_box">
                <h3>More Info</h3>
                <div id="dbplatform_help" class="help">In order to install and operate MVDashboard with your MultiValue database, you must specify which MultiValue platform is being used.</div>
            </div>

[DBHELP]

        <!-- END HELPBOXES -->
            
        </div><!--right_column-->

    </div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
                            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<script src="/embedded/main.js" type="text/javascript"></script>

<title>MultiValue Application Server: Applications</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status"><span>Status</span></a></li>
            <li><a href="/config?tab=security"><span>Security</span></a></li>
            <li><a href="/config?tab=docs"><span>Docs</span></a></li>
            <li><a href="/config?tab=database"><span>Database</span></a></li>
            <li><a href="/config?tab=apps" class="active"><span>Apps</span></a></li>
            <li><a href="/config?tab=activate"><span>Activate</span></a></li>
        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />

        [PASSFAIL]
        
        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">

        <div class="left_column">
        	<div id="message">
        		<h2>Applications</h2>
                <p>The Apps area allows you to view the applications that have been installed and also to install new applications. To install a new application package, the package file must be placed on your MultiValue server. Provide the fully-qualified filename of the package file (e.g. /usr/tmp/my.application.bin) on this page to install the application.</p>
            </div>
        </div><!--left_column-->
    
    	<div class="center_column">
            <h1>Applications</h1>
        <div class="clear"></div>
               <div class="pipe apps">
                 <h2 class="">Installed Applications</h2>
                 <table border="0">
                   <tr>
                    <th> Application Name </th>
                    <th> Version </th>
                    <th> Handler </th>
                  </tr>
                 [APP_TABLE]
               </table>
               <br>
             </div><!-- pipe -->
             <div class="pipe app_install">
                <h2 class="">Install New Application</h2>
                <form name="install_app" id="install_app" method="get">
                  <input type="hidden" name="submit_form" value="true">
                  <input type="hidden" name="tab" value="apps">
                   <table cellpadding="0">
                        <tr>
                            <th>Package Path:</th>
                            <td><input type="text" name="package" id="package" value="[PACKAGE]"/><a href="javascript:showHelp('package_help', 'required_help_box');" class="info">More info</a></td>
                        </tr>

                   </table>
<br>

                   <a href="javascript:installApp();" class="save">Install</a>
<br><br>
                </form>
             </div>

            [RESULTS_DIV]

            
        </div><!--center_column-->
        
        <div class="right_column">
        	<div class="help_box" id="required_help_box">
            	<h3>More Info</h3>
                <div id="package_help" class="help">The full path to the storage location of the package (.pkg) file.</div>
            </div>
        </div>

	</div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<script src="/embedded/main.js" type="text/javascript"></script>

<title>MultiValue Application Server: Activation</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status"><span>Status</span></a></li>
            <li><a href="/config?tab=security"><span>Security</span></a></li>
            <li><a href="/config?tab=docs"><span>Docs</span></a></li>
            <li><a href="/config?tab=database"><span>Database</span></a></li>
            <li><a href="/config?tab=apps"><span>Apps</span></a></li>
            <li><a href="/config?tab=activate" class="active"><span>Activate</span></a></li>
        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />

        [PASSFAIL]

        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">

        <div class="left_column">
            <div id="message">
                <h2>Activation</h2>
                <p> The activation tab allows you to view and update license information for MultiValue Dashboard. The license table to your right includes a summary of your current license information. To update your license, enter the appropriate license key and click on the "Update" button.</p>
            </div>
        </div><!--left_column-->
    
        <div class="center_column license_screen">
            <h1>Activation</h1>
            <div class="clear"></div>
            <div id="license_info">
                <h2 class="">Licensing Information</h2>
                <p>Below is the information based on the license key you have provided.</p>
                <table cellspacing="0">
                [LICENSE_TABLE]
                </table>
                <br /><br />
                <form name="license_info" id="license_info" method="get" action="">
                    <input type="hidden" name="act_submit" value="true">
                    <input type="hidden" name="tab" value="activate">
                    <table cellspacing="0">
                        <tr>
                            <th style="vertical-align: top; width: 120px;">License Key:</th>
                            <td style="border:none; text-align: left;"><input style="width: 200px;" type="text" name="license_key" value="[LICENSE_KEY]" id="licensekey1" size="26" /></td>
                        </tr>
                   </table>
                   <a style="margin-top: 20px" href="javascript:document.license_info.submit();" class="save">Update</a>
                </form>
            </div>

        </div><!--center_column-->
    </div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
  mod_mvconnector.c - Running Initialization code. dbVarMode  mod_mvconnector.c - out of memory allocating tmp_qstring!  mod_mvconnector SIMPLEWEB_MODULE REMOTE_ADDR REMOTE_HOST REMOTE_USER REQUEST_METHOD PROTOCOL_VERSION HTTP_REFERER HTTP_USER_AGENT HTTP_HOST HTTP_ACCEPT HTTP_COOKIE HTTP_CONNECTION SIMPLEWEB_HANDLER PATH_INFO CONTENT_TYPE %i SERVER_PORT %sbin/mvappsvr %s/bin/mvappsvr INSTALL_PATH HTTP_ %i%i%i This software is not activated. Activation Error: &nbsp;   %s APPSVR_ID maxContentLength    Request content length %i exceeds maximum length %i (maxContentLength). mod_mvconnector.c Starting request dbType   mod_mvconnector.c "dbType" element is missing in module configuration. dbBinary dbAppName dbHostName dbWorkingDir dbAcctPath dbUsername dbAccount d3Account dbPassword dbVME dbCommand dbRequired dbEnvVars cFilter maxRequest dbPortNum cTypeIsStart TRUE dbFails  mod_mvconnector.c - module execution complete. mod_mvconnector.c New QS: %s OI  
 
 1 Actual database command:    mod_mvconnector.c: cannot allocate anymore memory for query string rebuild. Requested: %i bytes mod_mvconnector.c Creating new socket request to %s:%i  mod_mvconnector.c OI Socket connection failed to %s mod_mvconnector.c OI Server login failed to log in as '%s'. Calling oe_exec
    mod_mvconnector.c: oe_exec failed! oe_exec is complete r    Database request FAILED, Null Pointer.  Failure number: %i Actual executable command:   mod_mvconnector.c Database connection failed!   Database connection failure: %s Creating command line for %s /  [START.PGM] [DBPROGRAM] [UNIQUEID]-[SEQ]-[CNT] [VAR.STRING] [UNIQUEID] [DBPROGRAM] WDB.INIT [START.PGM] [SEQ] [CNT] [VAR.STRING] %% Cannot handle requests for %s   set working dir: chdir("%s") succeeded  set working dir: chdir("%s") failed Setting environment variable: %s=%s Breaking at EOF  Breaking on NULL return code fgets error %d 700 WDB-START
 700 WDB-START
 Received start block from DB   Received start header, printing enabled. Content-type:  Received Content-type header from DB    Received start header and Content-type header, printing enabled.    Unable to open content file '%s' Content-length: %d
   Sending Content-length header; length=%d 800 WDB-COMPLETE
 800 WDB-COMPLETE
 Received end block from DB Sending char string from DB: Client-Count:  X-MVDB-STATUS:     X-MVDB-STATUS header found: %d X-MVDB-CONTENT-FILE:     X-MVDB-CONTENT-FILE header found: %s 500 ERROR  Error message from database: %s User limit reached  Licensed # of users has been reached    UniVerse user limit has been reached    Licensed number of users exceeded Too many users    Maximum concurrent licensed user limit exceeded No database licenses available to process request   No database licenses available: Discarding database output (printing not enabled):  DB failure, cannot parse results from host. %s %&=+!"'#$\`;<>@|()~{}  &=+!"'#$\`;<>@|()~{}  !"'#$\`;<>@|()~{}  %&=+ &=+ Appending '%s' to the query string  mod_mvconnector.c Cannot allocate anymore memory for query string. Requested: %i bytes & =  mod_mvconnector.c: out of memory allocating %i bytes for body data. mod_mvconnector.c: ready to gather %i bytes of body data.   mod_mvconnector.c: succesfully gathered %i bytes from client.   mod_mvconnector.c: failed to read all body data! Requested %i but received %i from client.  application/x-www-form-urlencoded text __body__ mod_mvconnector.c: request body not sent in qstring because %s not text (see content-types config setting)! %08ld   
Communication failure - Engine Server has disconnected
 Sending OI Command String: 800 WDB-COMPLETE 800 WDB-COMPLETE  Received End Block from OI server. Sending char string from OI: Received START Block from OI server.    %i%c%s%c%s%c%s%c2%c%s%c%s%c%s%c%s%c%s%c REVCMD_LISTENER %i%c %i%c%s%c rb sending contents of file: %s wrote %i bytes to socket cannot open '%s'     STUBAUTH: Getting %i licenses
  STUBAUTH: Releasing %i licenses
 %d-%d-%d NONE %m/%d/%Y HWID123456           u"A;8      }T   }t   ~    ~   `~   ~          zR |        T}    ABA  (   <   D}Z    ABCPAAA   h   r}           |   d}2    ABGfA        }2    ABGfA        }2    ABGfA                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      3         o   <   ́
                                         0         o(o   oX                                                            .>N^n~ΐސ.>N^n~Αޑ.>N^n~Βޒ.>N^n~Γޓ.>N^n~Δޔ.>N^n~                                                    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/    GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-23) GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-4)  .shstrtab .interp .note.ABI-tag .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .text .fini .rodata .eh_frame_hdr .eh_frame .ctors .dtors .jcr .dynamic .got .got.plt .data .bss .comment                                                     44                             HH                     !         hh  $                  4   o     @                >         ́  p              F         <<                   N   o   XX                  [   o   ((  `                j   	        0                s   	                      |           0                  w         ؏                           Е                           ܕ                               Ѐ                          Ж <                                                                                                                                                                                                                                  " d                             " <                        0       " Y                               =#                                                                                                                                                                                                                                                                                                                                                                                                       ./AIX/                                                                                              0000755 0000000 0000000 00000000000 13364666755 010357  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./AIX/mvappsvr                                                                                      0000755 0000000 0000000 00001126436 13364666755 012200  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    [ϩ         x                                  1L                 /      =                                      .text                                                        .data                     /     !                           @    .bss          1      1      =                                       .loader                       [     Q                                                                                                         B H= ,&  2 8 ` h  8A (  A  p  |	S *   ~CxN!A (b 9    x}{x~x  H `    @,  A b DH XA (|      @        __start                            ,   M  H  4N         @           __threads_init         !|A (d    |	D N!A (b ,#  A c   |	C N!A (b  ,#  A tc   |	C N!A (b (,#  A c   |	C N!A (b 0,#  A c   |	C N!A ( 8! p}N  b (,#  AK       A          __threads_init@AF2_1    X                    | !|?x|`x    А  | |x    H -]A (|`x|x!   |N         a       l select   | !|?xH --A (|`x|x!   |N         a    8 getdtablesize| !|?x|`x( 8 |x8  8 H ,`    / @ (?(9) )  8 |x}$Kx8 H ,`   8 |x 8 H -A (|`x/  @ ( | |x(H .`   |`x H 8 |xx8 	H -A (|`x/  @ ( | |x(H 0a`   |`x H 8 |x8 H -aA (|`x/  @ ( | |x(H /`   |`x H |8 |x8 H -A (|`x/  @ ( | |x(H 1Q`   |`x H 4b8  8 8  H ]A (|x8  8 8  H AA (b|xH QA (H `   H ? t9)? ؀ + 7A x	d})	  "| | J|	N      `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  `  $  D     `  `  `  `  `  `  `    `  `  `  `  `  `  `  `  `   H 	M`   8`  H S-A (9"$8  	H  `" 	  8b$|x8 H *`   H  @" 	  b|x8 H )`   H   " 	  b|x8 H )`    | |x(H RA (|`x t? t8   @09"$	x   /  A bH ]`   bH k]A (|ix9)8$})	 x  / /@  b8 0H o)A (H  b8 8H oA (b@H `   |`x/  @ 8b3H `   H Q`   |`x/  @ H9"$	x   /  A b
8H `   b|xH A (8b3H ]`   H !`   |`x/  @ 8b3H =`   9"7	 (|xH ]=`   |`x/  @ $H `   |`x/  @ 8b3H `   8 xb
@|x8 @H `   |`x p p/  A<9"$	x   /  A ,8b38 
H
@
PH mA (8b3H `   8 x|xH q`   |`x/  @ <8b3H \`   |`x/  A 8b38 H '`   8b3H A`   8 x|xH $`   |`x/  @ bH `   8 x|x
PH `   |`x/  @ @8b3H \`   |`x/  A 8b3 8 H '`   8b3H `   H  d9"$	x   /  A Pb(H `   H  @9"9P8 	(8b38 0
@H lA (8b3H `   8b3H ]`   8     |x!   |N         a       main | !q|?x9"78   	 x9"78   	 89"78   	 9"78   	  9"78   	 9"78   	 9"78   	 @9"78   	 p9"78   	 H9"78   	 09"78   	 h9"78   	 P9"78   	 X9"78   	 `9"78   	 (9"78   	  8` H NIA (|`x9"7	 (8` H N1A (|`x9"7	  8` H NA (|`x9"7	 h8` H NA (|`x9"7	 p8` H MA (|`x9"7	 @8` H MA (|`x9"7	 8`  H MA (|`x9"7	  9"78 	 9"78 	9"78 	9"78 	b8  8 H $u`   b
@8  8  H $a`   b
P8  8 @H $M`   b8  8 @H $9`   b8  8 @H $%`   9"7	 h|x8  8 H $	`   9"7	 (|x8  8 H #`   b8@HA (|`x p p/  @ 9"78   	 H  ? p	 | x  9"7	 9"78   	 9"78   	 9"78   	 9"78   	8b$8  8 H #]`   b8  8 H #I`   b8  8 H #5`   b8  8  H #!`   b8  8 @H #`   b	8  8 H "`   bP8  8 H "`   b8  8 $H "`   9"$8   	`9"$8   	h9"$8   	p9"$8   	9"$8   	9"$8   	9"$8   	8b$P8 H "`   bX8 H "q`   b`8 H "]`   bPh8 H "I`   b
8  8 H "`   bp8  8 H "`   bx8  8 H !`   b8  8 H !`   b8  8 H !`   b8  8 H !`   b8  8 H !`   b8  8 H !`   bp8  8 H !y`   b8  8 H !e`   bx8 H !m`   bp8 H !Y`   9"9P8   	(9"9P8   	(9"9P8  Ȑ	(9"9P8   	  !   |N         a   < 
initialize   | !|?xbH fYA (bH fAA (bH fA (bH fA (bH eA (bH eA (bH eA (8` 
H f!A (!   |N         a     
show_usage   | !q|?x9"7	x   /  @ $8 t|x8 H fA (H `   H e`   8`  H `   9"7	 P/  A L9"7	 P|xH aA (|`x p p/  @  9"7) P p| })8   	  9"7	 P/  A 9"7	 P|x H ¹A (|`x/  A L9"7	 P|xH A (|`x/  A (9"7	 P|xH qA (|`x/  @ 4bH d]A (9"9P	(| b |xH deA (H 9"7	 P/  A 9"7	 P|x(H A (|`x/  A L9"7	 P|x0H A (|`x/  A (9"7	 P|x8H A (|`x/  @ 4b@H cA (9"9P	(| bH|xH cA (H hbPH cA (bXH cuA (b`H ciA (bhH c]A (bpH cQA (bxH cEA (bH caA (bH c-A (bH c!A (bH cA (bH c1A (bH c%A (bH bA (bH bA (bH cA (bH bA (bH bA (bH bA (bH bA (bH bA (bH bA (bH bA (b H byA (bH bmA (bH baA (bH bUA (b H bIA (8b3(HqA (|`x/  A \b0H bIA (b8H bA (b@H b	A (bHH aA (bPH aA (bXH aA (b`H aA (H  bhH aA (bpH aA (bxH aA (bH aA (bH aA (bH aA (bH a}A (bH aqA (bH aeA (b`H aYA (bH aMA (bH aAA (bH a5A (bH a)A (8`  H DA (       a       
error_exit   | !Q|?x8   9"$	x   /  A bH M`   9"7	  /  A 9"7	 /  @ 8    H 9"7)  8   	  9"7) 8   	  8 x9? 8` |x}%KxH1A (|`x/  @ 9"$	x   /  A bH `    |xcHA (|`x p p/  A T pH \A (|`x+  A <9"7	  |x p8  H q`   9"7	 |x p8 H U`   8   H  9"$	x   /  A bH `   9"$	x   / @ H9"7	  |x8  H `   9"7	 |x  8 H `   8   H  ,8b38  H _A (8b3H `   8     |x!   |N         a    get_peer | !a|?x9"78  	8 t|x8 H `	A (|`x/  A 8 t|xH U`   9"7)  8 t|x8  8 }&Kx8 H EI`   9"7) @8 t|x8  8 }&Kx8 H E!`   9"7) (8 t|x8  8 }&Kx8 H D`   9"7	  |x H [Q`   |`x/  A 9"7	  |x H [-`   |`x/  A 9"7	  |x  H [	`   |`x/  A p9"7	  |x (H Z`   |`x/  A L9"7	  |x 0H Z`   |`x/  A (9"7	  |x 8H Z`   |`x/  @\9"7	 @9"7) p|x8 ?8 }&Kx8 H C`   8` H @mA (|`x9"7	 x9"7	 x|x8  8 H Q`   9"78  	 9"7	 @9"7) x|x8 ?8 }&Kx8 H C`   9"7	 p|xH L`   |`x/  A <9"9P8 	(8b38  @H \A (8b3H `   8   H 9"7	 p|x8 /H J`   |`x p p/  A / A (H  L9"7	 pb
P|x8 @H }`   H  t9"7	 p|x8 /8 
@8  H B`   H  L9"7	 p|x8 /8 
@8  H B`   9"7	 p|x8 /8 
P8 @H B]`   b
@H J`   |`x/  A b
@8  H `   b
PH J`   |`x/  A b
@ H
P8 @H =`   b
PH J`   |`x/  A b
P8 @H `   8  H  9"9P8 	(9"7	  |xH J5`   |`x/  @ 09"7	  8b38  P|xH [)A (8b3H `   8   H  L9"9P8 	(9"$	x   /  A $8b38  XH ZA (8b3H `   8   |x!   |N         a    get_request  | !a|?x9"9P	(x   / A9"7	 (|xH I1`   |`x/  A  9"7	 (|x `8 H )`   9"9P	(|	9)8?+1Ax	d h})	  " h| | J|	N                                                                                                                                                                                                             (  4  @  L  X    d                                                                                                                                                                                          p  |                             $  0  <                                                                                                                                                                      H  T  `  l  x   p pH  x pH   pH   pH   pH   pH   pH   pH t  pH h  pH \  pH P  pH D  pH 8  pH ,  pH    pH   pH   pH  !  pH  ! pH  ! pH  ! pH  !  pH  !( pH  !0 pH  !8 pH  !@ pH  !H pH  !P pH  x!X pH  l!` pH  `!h pH  T!p pH  H!x pH  <! pH  0! pH  $! pH  ! pH  ! p9"$	x   /  A L9"9P	(|9"7) (8 x|x8 !}f[x p}(KxH RA (8 x|xH |`   9"7i (9"9P	(| b!}d[x|x pH RIA (9"9P8  	(!   |N         a    printResponseString  | !a|?x8    x8 |x8 H SA (|`x x8 |xH N`   |`x/  A8 |x!H N`   |`x/  A x/  A8 |xH H`   8   x  8 |x8 :8 H B`   |`x  /  @ (8 |xH MA (|`xx	  8	 x     /  @ d? 8	|	8 9|x8  }%Kx}f[x8 H =U`   ? 8	 |	8 9|x}$Kx8 }f[x8 H =%`   8|xH 91`   8|xH 9!`   8|x!H 9A (|`x/  @ @8` H 3A (|`x9"7	 P9"7	 P9?|x}$Kx8 H 
`   K48|x!H A (|`x/  @ @8` H 3AA (|`x9"7	 89"7	 89?|x}$Kx8 H 
=`   K8|x!H A (|`x/  @ @8` H 2A (|`x9"7	 X9"7	 X9?|x}$Kx8 H 	`   K|8|x!H %A (|`x/  @ @8` H 2A (|`x9"7	 `9"7	 `9?|x}$Kx8 H 	`   K 8|x!H A (|`x/  @ $8|xH NA (|`x9"7	 K8|x!H A (|`x/  @ @8` H 1A (|`x9"7	 9"7	 9?|x}$Kx8 H `   K8|x!H -A (|`x/  @ @8` H 1A (|`x9"7	 9"7	 9?|x}$Kx8 H `   K(8|x!H A (|`x/  @ (9"7	 h9?|x}$Kx8 H I`   K8|x" H A (|`x/  @ @8` H 0A (|`x9"7	 09"7	 09?|x}$Kx8 H `   K8|x"H 1A (|`x/  @ @8` H 0A (|`x9"7	 H9"7	 H9?|x}$Kx8 H `   K,8   p8b
@"|x8 H `   |`x/  A 8|x8  H G`   |`x/  A 8|x8 ,H ;`   |`x|	x8	  8   H  9? | 9}#Kx8 ,|x}f[x8 H 35`   89?|x}$KxH %A (|`x/  @ (89?|x}$KxH ]`   8    pH   ? 8	   ? H @t p/  A9"$	x   /  Ab"H vA`   8|xH v1`   K8  |x!   |N         a   X get_headers  | !|?x|`x 9"9P	(x   / A( / @ b" 
H K=A (9"9P	(| b"(|xH K!A (bpH :m`   |`x/  @ b"0pH JA (bxH :E`   |`x/  @ b"8xH JA (bH :`   |`x/  @ b"@H JA (bH 9`   |`x/  @ b"HH JA (bH 9`   |`x/  @ b"PH JYA (bH 9`   |`x/  @ b"XH J1A (9"9P	  | /  @  9"9P	  | b"`|xH JA (bH 9M`   |`x/  @ b"hH IA (bpH 9)`   |`x/  @ b"ppH IA (bH 9`   |`x/  @ b"xH IA ( / A 9"9P	(| /3@ b"H I9A (9"$	x   /  A b"H s`   9"9P8  	(!   |N         a      h printResponseHeaders | !|?x	8 p|x8  8 @H `   9"$	x   /  A b"H s`   b
@"8 p|x8 @H `   |`x/  A 8 p|x"8 H +A (|`x/  @b"8 H `   9"$	x   /  A b"H r`   8 |x8  8 @H a`   8 |x8  8 @H I`   80|x8  8 H 1`   8 b
@"|x8 @H `   8 b
@"|x8 @H `   809? 9 |x8 "}&Kx}g[xH GA (;0;080|xH CA (|`x| x8 x|xH`   809?0|x8 "}&KxH GA (9"$	x   /  A (9"7	 h|xH q]`   80|xH qM`   9"7	 h9?0|x}$KxH A (|`x/  @ 09"$	x   /  A b"H q`   8  	0H  D9"9P8 	(8b38 "H FA (8   	0H  8  	0H  8  	0	0|x!   |N         a       
auth_basic    A (  L |	N               A (  L |	N                          H 
      @        memset!|?x     8  0 0/  A pH  T? 	  x  ? 	  ? 	  x  /  |  &T x ? 8	  ? 8	  /  @ ? 08	 0 0/  @ 0/  @ H /  A ? 8   	  ? 	  x  |  x x ? 8	  /  @?  8} HP8	|x!  N         `       strlcpy   A (  L |	N              | !|?x|`x    А  | |x    KA (|`x|x!   |N         a       l select   | !|?xKA (|`x|x!   |N         a    8 getdtablesize| !q|?x|`x Ȑ  | |x H i`   |`x p p/  A ? p	(x   /  @  pH `   ? p	(x   /  @  pH m`   ? p	(x   /  @  pH `   ? p	(x   /  @  pH =`   ? p	(x   /  A ? p8	,b|xH B]A ( pH `    pH ?YA (H  bH BA (8   |x!   |N         a      < mode_http_request| !|?x|`x  bH AA (8   |x!   |N         a       H mode_archive | !a|?x|`x ؐ Ѐ | |x H N`   |`x p p/  A ? p	x   /  @  pH R=`   ? p	x   /  @  pH W`   ? p	x   / @  8 x|xH8 KE`   H  8 x|xP8 K)`   ? p	x   /  A 4? p8	b|xH @A (8 xbX|xH @qA (H  (8 xb`|xH @YA (H  bhH @!A (8   |x!   |N         a      X mode_unarchive   | !q|?x|`x Ȑ 8`  8  H M-`   |`x p p/  A ? p8   	? p8  	? p8  	 p? 9) 	  }c[x|x8K`   ? p8	|xp8K`   ? p	x   /  @  pH Pa`   ? p	x   /  @  pH U`   ? p	x   /  A ,? p8	b|xH >A (H  bhH >A (8   |x!   |N         a      @ mode_readpkg | !|?x|`x    А  | |x    KQA (|`x|x!   |N         a       l select   | !|?xK!A (|`x|x!   |N         a    8 getdtablesize| !|?x|`x		8    x8`XH  A (|`x x x/  A? x8   	  ? x8   	? x8  P	? x8   	(? x8   	@? x8   	D? x8   	H? x8	 |x8  8Ka`   ? x8	|x8  8KE`   ? x8	|x8  8K)`   ? x8	|x8  8K`   ? x8	|x8  8K`   ? x8	|x8  8 K`   ? x8	,|x8  8K`   ? x8   	L? x8   	P? x8   	T? x8	X|x8  8 @Ky`   ? x8	|x8  8 @K]`   ? x8	|x8  8 KA`   ? x8	X|x8  8 K%`   ? x8	|x8  8  K	`   ? x8	|x8  8  K`   ? x8	|x8  8 @K`   ? x8   	0? x8   	8" 8  	  H t? t9)?	@	@+ 7A\	@x	d })	  " | | J|	N      0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0    0  0  0  0     0      0  0  $  0     H 		`   8`  H A (" 	  |x 8 H A (|`x/  @ ? x8  	  H " 	  |x 8 H eA (|`x/  @ ? x8  	  H  " 	  |x 8 H -A (|`x/  @ ? x8   	  H  ? x9i " 	  }c[x|x8 K`   H  p? x9i" 	  }c[x|x8 K`   H  H? x9i" 	  }c[x|x8 Ku`   H   ? x8  	H  ? x8  	H	| |x	 H A (|`x t? t8   @`? x8	 |xH '`   |`x/  A 0? x8  	(? x8	,|x88 K`   H ? x8	 |xH  `   ? x8	 ? x9)|x8 :8 }&Kx8 H `   ? x8	 |x@8 H '`   |`x p? x9i ? p8	 | 9? }c[x|x< `B?}&Kx8 H $M`   8 |xH  Y`   8 |xH8 KAA (|`x/  @ ,8 9?|x8 < `B?}&Kx8 H #`   ? x9)8|x8 /8 }&Kx8 H 	`   ? x8	|x@8 H &`   |`x p p/  @ ? x9)8 |x}$Kx8 Ke`   ? x8	9?|x8 :8 }&Kx8 H `   8|xH 5A (|`x? x	? x9)8 |x8 :8 }&Kx8 H M`   ? x8	 |xP8 H &A`   |`x p p/  @ <? x9i ? x9) p| }c[x|x< `B?}&Kx8 H "`   ? x8	|xH %]`   |`x/  A ? x8  /	? x	  | / @? x8	|xH %`   |`x/  A 0? x8  	(? x8	,|xX8 K	`   H  ? x8	9?|x}$KxH 4A (|`x/  @ x? x8	|xhH 4A (|`x? x	0? x	0/  A 	0| ? x	@H  X? x8  	(? x8	,|xx8 Km`   H  ,? x8  	(? x8	,|x8 KA`    x|x!   |N         a      	 httpClient_initialize| !|?x bH 45A (? 	  | b|xH 4AA (? 	x   b|xH 4%A (? 	Hx   b|xH 4	A (? 	| b|xH 3A (? 8	 b|xH 3A (? 8	b|xH 3A (? 8	b|xH 3A (? 8	b|xH 3A (? 8	b|xH 3uA (? 	@| b|xH 3YA (? 	D| b|xH 3=A (? 	0/  A (? )0	 ,| b|xH 3A (H  b H 2A (? 	8/  A (? )8	 ,| b|xH 2A (H  bH 2A (bH 2A (? 	(x   b |xH 2A (? 8	,b(|xH 2}A (bH 2IA (? 	L| b0|xH 2UA (? 	P| b8|xH 29A (? 	T| b@|xH 2A (? 8	XbH|xH 2A (? 8	bP|xH 1A (? 8	bX|xH 1A (? 8	Xb`|xH 1A (? 8	bh|xH 1A (? 8	bp|xH 1A (? 8	bx|xH 1uA (bH 1AA (8   |x!   |N         a      4 httpClient_dump  | !|?xbH 1A (bH 0A (bH 0A (bH 0A (bH 0A (bH 0A (bH 0A (bH 0yA (bH 0mA (bH 0aA (bH 0UA (8` 
H 0A (!   |N         a     httpClient_show_usage| !a|?x ? 8	|xH 0YA (|`x p p/  @ <? 8  	(? 8	,? 9)|x8 }&KxH 09A (H 8` 8 8  H 0IA (|`x? А	D? Ѐ	D|	8   @ 0? 8  	(? 8	,|x(8 K`   H  8   y? Ѐ	| x   z? p) 	  |	x	   |9? x8	 |x8 H /`   ? Ѐ	D| 9? x|x}$Kx8 H /A (|`x|	x8   @ ,? 8  	(? 8	,|x88 K%`   8   |x!   |N         a       httpClient_connect   | !Q|?x8 p|x8  8K`   ?	  | / A / A $H  <8 p|x@8H +`   H  88 p|xH8H +y`   H  8 p|xP8H +]`   ?9)8 p|x}$Kx8H +=`   8 p|xX8H +%`   ?	D|8 p|xH )A (|ixx8 p|x}%Kx8  H .aA (8 p|x8  8K`   ?9)8 p|x8h}&KxH -}A (?	D|8 p|xH )]A (|ixx8 p|x}%Kx8  H -A (8 p|x8  8K`   8 p|xp8H *A`   ?	D|8 p|xH (A (|ixx8 p|x}%Kx8  H -}A (?	  | / @ 8 p|x8  8K`   ?	@|	8 p|x8x}&KxH ,A (?	D|8 p|xH (aA (|ixx8 p|x}%Kx8  H ,A (8 p|x8  8K`   8 p|x8H ,A (?	D|8 p|xH 'A (|ixx8 p|x}%Kx8  H ,}A (?	  | / @ H  8 p|x8H ,`   ?)08 p|x8 }%KxH ,YA (|`x/  A @?	D|8 p|xH ']A (|ixx8 p|x}%Kx8  H +A (?)0	 4| 4x  x   T /  Ad8   |x!   |N         a       httpClient_send_request  | < ` {@|!j|?x=? i8   H p9? p=) 8	(|x8H *`   = +	D|9? p=) 8	(|x8 }e[xH .`   |`x 9? p=) 8	(|xH &-A (|`x  / @ 89? p=) 8	(|xH &`   |`x/  @ L8    H  @ / @ 49? p=) 8	(|xH &`   |`x/  @ 8    = +	x   / @ 09? p=) 9)( | = k}$Kx|xH `   9? p=) 8	(|xH  %`   9? p=) 8	(=? i|xH `    /  @8   |8    p= +8	|x8 H A (|`x/  @H 9? p=) 8	(|x8H )-`   = +	D|9? p=) 8	(|x8 }e[xH ,M`   |`x 9? p=) 8	(|xH M`   9? p=) 8	(|xH `   9? p=) 8	(|xH #`   |`x x x/  @ 8    |8    H 8 |x8  `H (m`   ? x | HP t t/ @ 8   t= +	D|	 t|8 }#Kx|x}e[x8  H 2EA (|`x ?  |	 9?  | = k}$Kx|xH `    x	   p| J p px   =? i|xH `   ?  x  @ 9? p=) 8	(|x8H '}`   = +	D|9? p=) 8	(|x8 }e[xH *`   |`x 9? p=) 8	(|xH #`   |`x/  A h= +8  	(= +9i,=? 	x  |
x=? 	x  }c[x8 }FSx|xH &eA (9`  =? iH   ? xH @  x/  @ |/  @LH  8 |x8  `H &u`   = +	D| 9? |x}$Kx8  `8  H 0uA (|`x  x	   p| J p px   =? i|xH a`    /  @ (8 ? })= k|x}%KxH `    /  AH9`  =? i=? 	|x!   |N         a       httpClient_process_result| !|?x ? 	8/  A ? 	8|xH 0	A (? 	D| |xH 0A (8   |x!   |N         a       p httpClient_cleanup   | !|?x ? 8	|xH )`   |`x/  @ l? 8	|xH #]A (|`x? 	8? 	8/  @ 8? 8  	(? 8	,? 9)|x8 }&KxH #A (8   |x!   |N         a        httpClient_open_outputfile   | !|?x  |+x ? 	8/  @ , | " 8 |x}&KxH .A (H  , | ? )8 8 |x}&KxH .A (8   |x!   |N         a        httpClient_send_result   | !q|?x8 p|x8H "`   8 :8 8 p|x8 H `   8q8 :8 |x8 H `   8q|xH 
e`   8 H IA (|`x/  @ (?8	X9?q|x}$Kx8 @K`   H X8 H A (|`x/  @ (?8	9?q|x}$Kx8 @K۱`   H 8 H A (|`x/  @ (?8	9?q|x}$Kx8 Km`   H  8 H }A (|`x/  @ (?8	X9?q|x}$Kx8 K)`   H (8 H 9A (|`x/  @ (?8	9?q|x}$Kx8  K`   H H08 
H A (|`x/  @ (?8	9?q|x}$Kx8  Kڡ`   H 88 H A (|`x/  @ (?8	9?q|x}$Kx8 @K]`   H  @8 H mA (|`x/  @ $8q|xH A (|`x?	LH  H8 H -A (|`x/  @ $8q|xH A (|`x?	PH  @P8 H A (|`x/  @  8q|xH iA (|`x?	T8   |x!   |N         a      4 httpClient_parse_header  | !Q|?x |#x X p? 	Hx   / @? 	8/  A"	 4| 4x   T "/  @ ,b"	 4| 4x  x 9  } x| 4 4b (|	8	|  ( (| /  @ 8` |xH *1A (H  b+  8  	  8	   |xH *-A (? 	P| /  @  x       ? 	P| |    ɟ  f $p 2 p T x  ? 	P| | Vp| | ? p pbx}d[x|x}&Kx  H 5A (H   x   b|xH A (|xH )UA (8   |x!   |N         a       httpClient_update_statusbar   A (  L |	N               A (  L |	N               A (  L |	N               A (  L |	N              | !|?x|`x    А  | |x    KA (|`x|x!   |N         a       l select   | !|?xKՙA (|`x|x!   |N         a    8 getdtablesize| !Q|?x  /  @ 8    H   H iA (|`x p9   ? H  T |	x  |	x })	  x  |xH IA (|`xx    ? 8	 |	?  p? H A8     |x!   |N         a        upcase   | !Q|?x  /  @ 8    H   H mA (|`x p9   ? H  T |	x  |	x })	  x  |xH uA (|`xx    ? 8	 |	?  p? H A8     |x!   |N         a        downcase | !Q|?x |#x|+x |;x?    /  A  /  A  /  A 8   H D8   |8    x |  8  |xK	`    H A (|`x p8    H   | |	x })	   t tT	> T >  @ ? |8	  |H   |? H @ H? 8	|	 xH @ h x| |	x }) t	  ? x8	  xH  < |? H @ , x| |	x })8   	  8    H  (? 8	   ? pH A8     |x!   |N         a       field| !A|?x  /  @ 8   H $8    8    x H A (|`x  /  A 8    H ? 8	 | |xK-A (|`x   p p/  @ 8   H ? 8	 |   |xK`   ? 8	 H  , | |	x })8   	  ? 8	  /  @ 8 | |	x })	  x  |xH A (|`x/  @8    H   x/  @ @ | |	x })	  x  |xH A (|`x/  @ 8   x x/ @ D | |	x }i | |	x })	  x    ? 8	  ? 8	   ? H AT | |	x })8   	  ? 8	 |   |xKϝ`    pH -A (8     |x!   |N         a      l trim | !a|?x  /  @ 8    pH  ? Ј	  x  / '@ `? ; H A (|`x}=	  x  / '@ 4? 8   	  ? ; H A (|`x}=8   	  ? Ј	  x  / "@ `? ; H A (|`x}=	  x  / "@ 4? 8   	  ? ; H IA (|`x}=8   	  8    p p|x!   |N         a      < deQuote  | !a|?x |#x|+x |;x? ؑ   /  A  /  A  /  A 8   H 48    t H yA (|`x p |  8  |xK=`   ?    @ 8    H   /  @ 8    ؁? p8	|	 H @ ? p8	  ؐ xH  h? 8	|	 tH @ ` t| |	x }i x| |	x })	  x    ? t8	  t? x8	  x x? H @ t| |	x })8   	  8     |x!   |N         a       substr   | !a|?x |#x  /  @ 8    H  8    x H A (|`x p8    tH  H t| |	x })	  x  |	x H @ ? x8	  x? t8	  t t? pH A x|   |x!   |N         a        dcount   !|?x  /  @ 8   0H  ,? 	  x  /  @ 8   0H  8    0 0|x!  N         `       d isNull   | !|?xPX|+x`P/  A X/  @ 8  H 8PH MA (|`x xXH 9A (|`x t8    p8    |H   || |	xP})	  x ?X	  x    @ ? | t|	|	 xH A ? | t|	|	8	| || 9? P|x}e[x}&Kx8 K8 X|xH I`   |`x/  @ 0? p8	  p? p`  @  ||  H  (? |8	  | |? xH A8   |x!   |N         a       strpos   | !a|?x |#x|+x ؑ?  /  @ 8  H   H 
A (|`x x8   t8    p8    |H   || |	x })	  x	  T >H @ L? | t|	|	 xH A 0? p8	  p? p   @  ||  H  (? |8	  | |? xH At8   |x!   |N         a      $ strCpos  | !A|?x   |3x8    8    p /  A  /  A /  A 8   H  /  @ 8  8    H 	A (|`x | H 	A (|`x x8    t| |xKA (|`x  /  @ 8   H P| |xKA (|`x  /  @  H 	)A (8   H |  8  |xKI`   |  8  |xK-`    |/ @ 4? 	  x	  |  }$Kx|xK1|`x H  $ |   |xKU|`x  9 H @0 H A (|`x|	 || HP|	 x| J|?8	|   @ 8   pH  8   t? 8	|	|  8  }%Kx |xKm|   |xKA`   |   |xH U`   ?  ||	||	|  }d[x}%Kx |xK|   |xH `   |   |xKĵ`   Kl /  A  H 5A ( /  A  H A ( p|   |x!   |N         a      P swap | !a|?x |#x|+x ؙ?  /  @ 8   H   H A (|`x p8    tH  X t| |	x })	  x	  T >H @   t| |	x }) 	  ? t8	  t t? pH A8     |x!   |N         a        convert  | !a|?x  /  @ 8   H  ? Ј	  x  /  @ 8    H   H A (|`xx	  8	x    p p| |	x })	  x  / 
@ $ p| |	x })8   	  K p| |	x })	  x  / @ $ p| |	x })8   	  K\8     |x!   |N         a       chomp| !1|?x |#x /  A /  @ 8    H  8 ,K|`x 8    |H ? |8	 | 9?  8 ,|x}&Kx8 K8 |x8 -K=|`x/  A8 9? |x8 -8 }&Kx8 K8 9? |x8 -8 }&Kx8 Ka8 |xK18 |xK%8 |xH A (|`x t8 |xH A (|`x p? p t  @ Ԁ p?H @ Ā t9 H @  t xH  0 x| x d|	x})8  	  ? x8	  x x? pH @H  h8 |xKm8 |xH A (|`x t? t  @ 4 t9 H @ $ t| x d|	x})8  	  ? |8	  | |? H @<8     |x!   |N         a      T rangeConfigToIntArray!|?x |#x  /  @ 8    @H    0 0 8H  ,? 0	  x	  T >H A ? 08	  0? 	  x  ? 0	  ? 0	  x  |  x x ? 8	  /  @ 0x	   8x   | HPx   |  @ @|x!  N         `        	str_strip| !q|?x  (8 p|xH 5A ( p| |x!   |N         a       P hexToInt  A (  L |	N               A (  L |	N              A (  L |	N              A (  L |	N              A (  L |	N              8c8  ,  |0@A  @  ,  |0@KA A 8`N  8`  N  8` N        @       T strcmp| !Q|?x         xH  ? 8	  ? x8	 x? x8   A ? 	  x  /  @?  | HP p?  p| HP x? x8	 x? x8   @ h KA (|ix p})? H   x/  A 0? 	  x  ? 	  ? 8	  ? x8	 x? 8	  ? 	  x  /  @? 8   	  ?  | HP|	x p})?  |x!   |N         a      p strlcat   A (  L |	N              0A (  L |	N              `A (  L |	N              pA (  L |	N              A (  L |	N              A (  L |	N               A (  L |	N              A (  L |	N              A (  L |	N               A (  L |	N                                  H       @        bzero 0A (  L |	N              `A (  L |	N              A (  L |	N              | !|?x|`x    А  | |x    KIA (|`x|x!   |N         a       l select   | !|?xKA (|`x|x!   |N         a    8 getdtablesize| !|?x      H eA (|`x|x!   |N         a       P poll | !Q|?x|ix |+x?    p K]A (|`x x x/  @ 8  H  8` 8 8  KyA (|`x ? 8   @ 8  H  8    p ? x) 	  |	x	   9? 8	 |x8 KQ`   9?  | |x}$Kx8 KMA (|`x|	x8   @ 8  H   |   |x!   |N         a      < createSocketConnection   | !q|?x |#x|+x ȑ? Ѐ Ȑ p / @ ? 8	 p |  8  |xK`   8    tH  Ѐ | 9? x|x}$Kx8 8  H UA (|`x/  A  xx  / 
@ 4 t| |	x }) xx  	  ? t8	  tH  p xx  /  A ( t| |	x }) xx  	  H  ? t8	 t? t8	  tH  8  tH   t? pH A( t| |x!   |N         a      l sgets| !1|?x! |#x|+x|3x!?!!8    t8 |x8  8  Ka`   !| x т|
xx	$8 p})9) i  !x   x 9  }  6}kxyI$8 p})9) i  ! p!/ @ ?!8	 p!| ! 8  |xK`   8 |xH A (!|  8    tH ?!8	 | 9? 9 |x}$Kx8  8  }g[xK|`x/  A̀!| 9? x|x}$Kx8 8  H A (|`x/  A Ј xx  / 
@ @ t/  @ ? t8	  t t| |	x! }) xx  	  H l xx  + @ @8 |xH A ( t| |	x! }) xx  	  8    xH  ? t8	 t8 |xH iA (" x	  | / A H  p8  tH   ? |x}$KxH UA (!|    ɟ  f  A H  8  H  8` H 9A (H  T ? |x}$KxH A (!|    ɟ  f  A H  8  H  <? t8	  tH  8  H    t? pH A t|   |x!   |N         a      H 	sgetsTime| !a|?x |#x|+x ؑ?  ؐ p / @ ? 8	 p |  8  |xK`     |8   8   8    tH   | 9? x|x}$Kx8 8  H MA (|`x/  A  xx  / 
@ @ t/  @ ? t8	  t t| |	x }) xx  	  H   xx  /  A @ xx  b|xKA ( t| |	x }) xx  	  H  ? t8	 t? t8	  tH  8  tH   t? pH A t| |x!   |N         a       	sgetsPollA (  L |	N              A (  L |	N              A (  L |	N              A (  L |	N              A (  L |	N              A (  L |	N              A (  L |	N               A (  L |	N              `A (  L |	N              hA (  L |	N              | !|?x|`x    А  | |x    KEA (|`x|x!   |N         a       l select   | !|?xKA (|`x|x!   |N         a    8 getdtablesize| !a|?x|`x ؐ 8    x8` KA (|`x x x/  A? x8  	? x8   	? x8   	? x8   	? x8   	? x8	|x8  8Km`    x|x8  8KU`   ? x8	|x8  8K9`   ? x8	|x8  8K`   " 8  	  H ? t9)?  + 7AԀ x	d})	  "| | J|	N                                                                                        D                     h       H `   8`  KA (? x9i" 	  }c[x|x8K`   H  ? x9i" 	  }c[x|x8K`   H  h x" )  |x}$Kx8K`   H  D? x8  	? x8  	? x8   	H  ? x8  	? x8   	 | |x KuA (|`x t? t8   @? x8	|xKA (|`x p p/  @ D? p8	|	 x})	x  / /@  ? p8	|	 x})8   	 x|x!   |N         a       tarBall_initialize   | !|?x`?`	x   / @ L?`8	|xK`   |`x/  A ,?`8  	?`8	|x8K`   `|xKݹ`   |`x/  A ,?`8  	?`8	|x8K`   ?`	x   /  @ ?`	x   / @ ?`8	|x8 p|xKqA (|`x/  @ P x   T &/@ A p?`8  	?`8	?`9)|x8}&KxKA (H  8?`8  	?`8	?`9)|x8}&KxKA (?`	x   /  @ `|x8 p|xKA (|`x/  @ ``|xKA (|`x?`	?`	/  @ X?`8  	?`8	|x8KE`   H  ,?`8  	?`8	|x8K`   8   |x!   |N         a      ` tarBall_check| !|?x bKA (? 	x   b|xK!A (? 	x   b|xKA (? 	x   b |xKA ( b|xKA (? 8	b|xKA (? 8	b|xKA (? 	/  A (? )	 ,| b |xKuA (H  b(K=A (b0K1A (? 	x   b8|xK=A (? 8	b@|xK%A (b0KA (bHKA (8   |x!   |N         a      p tarBall_dump | !|?xbPXKA (b`KuA (bhpxKA (bKQA (bKEA (bK9A (bK-A (bK!A (8` 
KeA (!   |N         a     tarBall_show_usage   | !|?x ? 	/  A ? 	|xKqA (8   |x!   |N         a       X tarBall_cleanup  | !|?xpH h8 t9?x|x}$KxpH `   |`x/  @ X?	  x  /  @ 8   H `?p8  	?p8	|x8Ki`   8 H ,?	  x  /  @ 8   H 8|x8  8 @K	`   + @ 8| | Vp| |	8|x8 @}&KxKA (H  (|	8|x8 @}&KxKA (x   / 0A  / 5A /  A H  ?;|xKqA (|`x}=	  x  / /A l?p8	|xK)`   |`x/  A  9?b|x}%KxKA (8x|xpH `   |`x/  @ 8   H  ?p8	|xK`   |`x/  A b|xKIA (8x|xpH 
`   |`x/  @ 08   H  d?y)  b|x}%KxKA (?p)8 t|x8 8 }&KxH A (|`x p p/ Ah8   |x!   |N         a       tarBall_read_archive | !Q|?x     p ? 	 ? ) 	  x  / /A <? ) 	  x  / \@ TH   ? i   x	 8	 x    ? ) 	  x  / /A? ) 	  x  / \A? 	 x  ? 	 0? 8	 ? 	 8? 8	 d|x8 H I`   |`xx   ? 	 ? 8	 l|x8 H !`   |`xx   ? 	 ? 8	 t|x8 H `   |`xx   ? 	 ? 8	 ||x8 H `   |`x? 	  ? 8	 |x8 H `   |`x? 	 (? 8	I|x8 H `   |`x? 	 @? 8	Q|x8 H e`   |`x? 	 H? 8	 |x8 H A`   |`x 8    8   xH  ,? p	  x  |	x | J ? p8	  p? x8	 x? x8   @? 8	  p8   xH  ,? p	  x  |	x |	 P ? p8	  p? x8	 x? x8   @? 8	  ?    @ 8   H  8     |x!   |N         a        tarBall_process_header   !|?x |#x 8    88    4H  x 4| |	x })	   0 0T >/  A @ 0T >+ /@ 0 0T >+ 7A   8x	$ 0x  })8	 8? 48	  4 4? H A 8|x!  N         `        tarBall_read_octal   !|?x|`x  T >+ /@   T >+ 7A 8   0H  8    0 0|x!  N         `       \ isOctal  | !|?xBB8 |x8  8K`   ?B9i?B) 8 |x8}f[x}'KxKA (8A|x8  8 K`   ?B	 |x8 /Kϕ`   |`x p?Bi ? p8	 | 9?A}c[x8 /|x}&Kx8 K`   ?B8	|xKA`   |`x/  @ ,?B8	9?A|x}$KxK`   |`x/  @ ?B	x   / @ ?Bi ?B	 x   | }c[x|xBH y`   |`x/  @ 8   B H 8 |xKA (|`x  /  @ d?B8  	?B;?B " x	  | |xH mA (|`xx8 x|xKYA (8   B H 8    H ?B	  x	   x   | HPx     x   +@ @ 8 @    H  \? } Np| T H,| HP | |/  A ( |   |	 | J   H       |?B)8|x8 }e[x}&KxH EA (|`x x x/  @ X?B8  	?B;" x	  | |xH -A (|`xx8|xKA (8   B H ?  x|	 ?B8	|xK`   |`x/  @ ,?B8	9?A|x}$KxKۉ`   |`x/  @ ?B	x   / @  |	8|x8 }%Kx KA (|`x t t/  @ X?B8  	?B;" x	  | |xH 5A (|`xx8|xK%A (8   B H  ?B8	|xK`   |`x/  @ ,?B8	9?A|x}$KxKڡ`   |`x/  @ H?B	x   / @ 4 |"8|x8 }e[x}&KxKA (|`x t |?B	   @A8?B	x   / @ ( KA (8 |xBBH %`   8  B B |x!   |N         a      < tarBall_extract_file | !a|?x?؀	x   /  @ 8  H  ?i ?Ѐ	 x   | }c[x|xH 	`   |`x/  @ 8   H  ?؀	x   / @ l8 p|x8  8K`   ?9i?) 8 p|x8}f[x}'KxK	A (?Ѐ	 x	  8 p|x}$KxH A (8 p|xH `   8  |x!   |N         a      8 tarBall_extract_folder   | !A|?x|#x 8 |x8  8K!`   ? 9)8 |x8}&KxKA (8 |x8 /K`   |`x t8   |H d8|x8  8K`   9?  || }#Kx |xK`   |`x x9?  x| 9}#Kx8  |x}f[x8Kƕ`   8    p? 	x   / @ T/  @ ,x	  8|x}$KxH YA (|`x pH   8|x8H 9A (|`x p p/  A t" x	  | / A `? 8  	? ;" x	  | |xH A (|ix8x8(|x}'KxK٥A (8   H  (? |8	  | |? tH @8  |x!   |N         a      ( tarBall_create_folder_path   | !q|?x   ? Ȁ	 x  ? Ȁ	 x    }d[x|xH A (? Ȁ	 x    |xH %A (8`  KiA (|`x p? 	 ( x 8 p|xH A (8  |x!   |N         a        tarBall_update_perms A (  L |	N              A (  L |	N              A (  L |	N              0A (  L |	N              8A (  L |	N              @A (  L |	N              A (  L |	N              A (  L |	N              | !|?x|`x    А  | |x    K5A (|`x|x!   |N         a       l select   | !|?xKA (|`x|x!   |N         a    8 getdtablesize| !!|?x/  A 8|xKA (8|xH 9A (|`x p8|x8 @ pH =A (KѡA (|`x+@ <H EA (|`x|x8 9?|x8 }&Kx}g[xKeA (H  <H A (|`x|x8 9?|x8 }&Kx}g[xK)A (8b$ KQA (|`x x x/  A 08 |x xH  A ( xKA ( xKA (!   |N         a      T logEntry A (  L |	N               A (  L |	N              A (  L |	N              (A (  L |	N              | !|?x|`x    А  | |x    K=A (|`x|x!   |N         a       l select   | !|?xKA (|`x|x!   |N         a    8 getdtablesize| !a|?x8x|x8  8 K`   K`   |`x/  A  8x|x8 K`   H  8x|x8 K`   8x|xKu`   |`x/  A 8x|x8 Kq`   8x|xHKѕA (|`x p p/  AH 8 x|x8  8 K`   8 x|x8  pKA (|`x/  A8 x|xKA (|`x+ @8 x|xKȱ`   8 x|xK`    xx  / [@ 8 x|xKͩA (|ix9)8 p} J	 x  / ]@ `8 x|xKyA (|`xx	  8	x   |	8 x9x|x8 }%Kx}f[x8 KY`   8x|xK`   H Ĉ xx  / ;A xx  / #A xx  / %@L8 x9?x|x8  8 }&Kx8 K1`   8 x|xP8 K)`   |`x|	x8	 |	8 x9x|x}$Kx< `}f[x8 K`   8x|xK`   8x|xK`   8x|xK`   8x|xK`   8x|xKm`   8x|xK]`   8x|xX8 K=A (|`x/  @ 08x|xKU`   8x9?x|x}$KxH !`   H p8x|x`8 KA (|`x/  @ Xxx  / /@ 8x|xKH ,8x9?x|x8 h}'KxKuA (8x|xKMH 8x|xp8 KuA (|`x/  @bK1A (|ix9)8$})	 x  / /@ ,8x9?x|x8 x}'KxKA (H  (8x9?x|x8 }'KxKA (8x|xKH L8 x9?x|x8 =8 }&Kx8 K`   8 x|x8 K`   |`x|	x8	 |	8 x9x|x}$Kx< `}f[x8 KY`   8x|xKe`   8x|xKU`   8x|xK`   8x|xK`   8x|xK%`   8x|xK`   xx  / ;A hxx  / #A X8x|xK`   |`x/  @ <8x9?x9x|x}$Kx}e[xH  `   |`x/  @ 8   H  l? p	 4| 4x  x   T /  A pKyA (8  H  48x8b38 |xKA (8b3K`   8   |x!   |N         a      4 parseConfigFile  | !!|?x  8 KA (|`x/  @ 8 KA (|`x/  @ b8  KQ`   8 KeA (|`x/  @ b8 @K`   8 K1A (|`x/  @ b8 $K`   8 KA (|`x/  @K}A (|`xx   9"$	H  8 KA (|`x/  @ 4H `   |`x/  A\H 2`   H H 
8 
KmA (|`x/  @ H )`   H  
8 K9A (|`x/  @ H *`   H   
 8 KA (|`x/  @ H ?=`   H   
(8 KA (|`x/  @ H D]`   H  x8 t |x8 @H 6A`   |`x p p/ @  H :A`   H  48b38 
0 K-A (8b3K`   8    H  8    |x!   |N         a       loadConfigParam  | !|?x    H =!`   |`x|x!   |N         a       H configCopySection| !|?x|`x    А  | |x    KA (|`x|x!   |N         a       l select   | !|?xKaA (|`x|x!   |N         a    8 getdtablesize| !a|?x     8    p9"7	 | /  @ t9"7	 | ? А	  9"7	| ? ؐ	  9"7	| ? 	  9"7	| ? 	   8 K`   8    xH 48` 0KA (|`x 8    tH  8  xbKm`   |`x/  @ b H `   |`x x x/  @ p? 	 | ? А	  ? 	 | ? 	  ? 	  | ? 	  ? 	 $| ? ؐ	  ? 8	  |x8 K`    x9 8H @  ? t8	  t8` dKA (H  8   p t/ @ 8   p p/  A  K-A ( x| |x!   |N         a       get_activations  !|?x p8  |x!  N         `       $ update_activate_count| !Q|?x   /  A  /  @ 8    H   H #A (|`x/  @ 8   H   H "A (|`x/  A   H "A (|`x/  @ `9? t9 x9_ |9 8 p|x}$Kx}e[x}FSx}CxK|`x/  @  t| x   T (/  @ 8    H  8    |x!   |N         a        is_handler_licensed  | !a|?x|`x Ј x  |xKA (|`x p? p9)ϑ?  + A8 x	d})	  "| | J|	N    X   d   p   |                                               8   tH  8   tH  8   tH  8   tH  8   tH  8   tH  x8   tH  l8   tH  `8  	 tH  T8  
 tH  H8   tH  <8   tH  08   tH  $8   tH  8   tH  8  t t| |x!   |N         a       hexChar  | !q|?x|ix |+x?  Ѐ |  8  |xK|`     p8 }? p  A8 }? p  A \8 j? p  A 8 j? p  A 8 ? p  A H 8 y? p  Al8 |? p  A<H x8 ? p  A 8 ? p  A 8 ~? p  A H D8 ? p  A t p/  A H $ |  |xK{`   H , |  |xK{`   H  |  |xK{m`   H   |  |xK{M`   H  ̀ |  	 |xK{-`   H   |  	|xK{`   H   |  	|xKz`   H  l |  	|xKz`   H  L |  	 |xKz`   H  , |	 |  }$Kx	(|xKA (8  |x!   |N         a      | activateError| !a|?x |#x   /  A  /  @  /  @ 8    H   |  8  |xKy`   8    p8    xH  T x| |	x })	  x  |xK|`x t t  |	 p| J p? x8	  x x/ @? p} fp| T `&| HP p |	 p|  }$Kx	0|xK!A ( 8  8 0K`   8    |x!   |N         a      X generate_activate_checksum   | !|?x`|#xph8 |x8  8 Kx]`   8 |x8  8 KxE`   8 |x8  8 Kx-`   8 |x8  8 Kx`   8|x8  8 Kw`   8
|x8  8 Kw`   8|x8  8 Kw`   h| `8  |xKw`   8|x8  8 Kw`   bK`   |`x/  @8 9? 9 9_ 9 |x}$Kx}e[x}FSx}CxK|`x  | / A T/ A  / A `/ A $H  X/ A ,/ A ,H  <8   H  08   H  $8   H  8   H  8    /  @@pKA (|`xx	  8	x   | 9? p|x8'}&Kx8 K`   pKyA (|`xx	  8	x   | 9?p|x8'}&Kx8 K]`   8 |xKA (|`x |8|xKA (|`x xx  |	x8
|x8 	8}&KxKA ( x  |	x8|x8 	8}&KxKA (8
|xKyA (|`x t8|xKaA (|`x p? 8	 |? |8	 | T :| ||  8 |x8 	@ KQA (8 |x8  8 0K`   ? x8	 |   |	 | |	|  8 |x8 	H KA (8 |x8  8 0K`   b	PKA (|`x ? t p|	|	8	 |	 | I|  8 |x8 	X KA (8 |x8  8 0K9`   h| 9? 9 9_ `|x	`}&Kx}g[x}HSxK9A (8    8    8   H  < | |	x`})	  x  |	x | J ? 8	   / @? } &p| T  6| HP 9? ̀ | }#Kx8 	h|xKA ( x  ?`	  8  |x!   |N         a      D generate_activate_string | !|?x|`x    А  | |x    KryA (|`x|x!   |N         a       l select   | !|?xKrIA (|`x|x!   |N         a    8 getdtablesize!|?x8    0 0| |x!  N         `    , MVDB_Initialize  !|?x 8    0 0| |x!  N         `       0 MVDB_SetServLicPort  !|?x  8    0 0| |x!  N         `       4 MVDB_DeActivate  !|?x|`x  8    0 0| |x!  N         `       8 MVDB_GetEndDate  | !|?x|`x@8    p9? t@| }#Kx8 |xKA (8 t|xK`   @/ @ 8    p p| |x!   |N         a        MVDB_GetLicense  | !|?x|`x@8    p9? t@| }#Kx8  |xKA (8 t|xK`   @/ @ 8    p p| |x!   |N         a        MVDB_ReleaseLicense  | !|?x088    8    0K1`   |`x/  A 8  H @8    8 9? 9 0|x}&Kx}g[xKA (|`x/ A 8  H  | x   x  T @.|	 | x   x  T  6| } x|	 | x   x  } x  | x   T | &p|	 | | p| } x|   |	8	 O| | x   T | &p|	 | | p| } x|   |	8	 | }`x| | x   T | &p|	 | | p| } x|   |	8	 | }`x| T > ?    A 9 ? H  | | p| T >  | | p| T   | | vp| T   | | &p| T   | | &p| T  ? =)8		   | | p| T   | | &p| T >    / A 8 ~  /  A 8 }  /  A 8 |  /  A 8 y  /B[@ (8  8 |x8 Klq`   H  8`  KA (|`x ? <  ` Q|	|	=);8	 |   |x KA (  x8 |xKmA (|`x p8 |x8  pKqA (ɿ x  $  H 1`      9? | Oɿ x  A H  8 j  T @. 8/  A ?88   	  ?8 	 ?88  	 ?8 	 ?88	 9? |x}$Kx8 Kk9`   ?8 	  ?8 	 $8`  KA (|`x?8	 ( |   |x!   |N         a       MVDB_GetInfo !|?x  8    0 0| |x!  N         `       4 MVDB_AutoActivate| !q|?x  8 (Kj5`   8    p p| |x!   |N         a       T MVDB_GetHardwareId   !|?x 8    0 0| |x!  N         `       0 MVDB_Activate!|?x  8    0 0| |x!  N         `       4 MVDB_SetLicServIP            b(@
c         @  a * (@  C  A   *N  # (N  8b  *N        "@         d nearest                                 8` (|} &?   r`     !a  r rH 5A (`~  <` H %`   `}  .  @    @    A ( *@ d,  A 4    |}  8! N  <` H `       |} K8` H 
A (K*(@,  @K8b *Al8` H 
YA (K\8` H 
qA (   @K(      "C      X 	nearbyint         b(@
c         @ L a * (@  C  A   *N  # (N  8b  *N        "@         d trunc b(@
c         @ L La * (@ $C  M  A   *N  # (N  8b ! *N        "@         h floor                               !T  ~!N        "@          fabs          b(@
c         @  La * (@ $C  M  A   *N  # (N  8b  *N        "@         h ceil                              8A (  L |	N                                      |`  c 
 !H IA ( H eA (  H  H yA (8`   8! }N         A        X feupdateenv       |`  c 
 !H A ( H 5A (  H q 8! }N         A        H fesetenv                          |`   !H A (  H 	A ( 8` @H 1A (p d  H A (H -A (8`   8! }N         A        l feholdexcept                  |`   !H MA (  H iA ( 8` @H A ( 8`   8! }N         A        T fegetenv              ,  @ 8`N  Tc >H        @           
fesetround        |! H A (Tc> 8! p}N         A      ( 
fegetround                            |`   !H UA (|`8| 8! }N         A        8 fetestexcept      |T >   t  !qA Wmjc xT~ >x,  @ 9A Tc  H A (H A (T` > 8 8| P|cx|` 4T~8d 8! }N  H mA (T` > 8 8| P|cx|` 4T~8dKc  H eA (9AKp       A         fesetexceptflag                           |! T` >tc  A `  `  H QA ( 8! p}N         A         8 feraiseexcept     |`~  `  `    !H iA (|`88`    `    8! }N         A        P fegetexceptflag           |T > t`  !A 8<`8 xH 	A (H A (8| 8! }H  ,c  H A (H A (8 8! |}N         A         feclearexcept                             |!,  @ 8`8! pN  Tc>H A (8`   8! p}N         A         @ fesetround@AF12_5                      @A (  L |	N              HA (  L |	N              PA (  L |	N              XA (  L |	N              `A (  L |	N              hA (  L |	N              xA (  L |	N              A (  L |	N              A (  L |	N              A (  L |	N              A (  L |	N              A (  L |	N              | !|?x|`x    А  | |x    K[A (|`x|x!   |N         a       l select   | !|?xK[A (|`x|x!   |N         a    8 getdtablesize| !q|?x   /  A /  @ H  8` 8K5A (|`x x x8  8 8K[%`   9"$	`/  @ H8` 8KA (|`x9"$	`9"$	`|x8  8 8KZ`   9"$	` pH  09"$	` pH  ? p	 0 p? p	 0/  @? p x	 0 p|x 8 KZ`   ? p8	 |x 8  KZ`   ? x8   	 0!   |N         a      @ add_mime_type| !q|?x   /  A /  @ H  8` (KA (|`x x x8  8 (KY`   9"$	h/  @ H8` (KA (|`x9"$	h9"$	h|x8  8 (KY}`   9"$	h pH  09"$	h pH  ? p	   p? p	  /  @? p x	   p|x 8 KY9`   ? p8	 |x 8 KY`   ? x8   	  !   |N         a      @ add_content_type | !q|?x   /  A /  @ H  8`KiA (|`x x x8  8KXY`   9"7	 /  @ H8`K1A (|`x9"7	 9"7	 |x8  8KX`   9"7	  pH  09"7	  pH  ? p	  p? p	 /  @? p x	  p|x 8 KW`   ? p8	 |x 8 KW`   ? x8   	 !   |N         a      @ add_cgi_var  | !a|?x    /  A  /  A  /  @ 8    H  9"7	  pH  X p |xKYA (|`x/  @ ,? p8	  |x KV`   8   H  0? p	  p p/  @? 8   	  8     |x!   |N         a        get_cgi_var  | !q|?xb	pKA (b	xKA (b	KA (9"7	  p p/  A  p? p9) b	|x}%KxKuA (H  L? p	  p p|xK`   |`x/  @ $ p? p9) b	|x}%KxK)A (? p	 /  @b	KA (!   |N         a     dump_cgi_vars| !q|?x   /  A /  @ H  8`K}A (|`x x x8  8KT`   9"7	 /  @ H8`K}A (|`x9"7	 9"7	 |x8  8KT`   9"7	  pH  09"7	  pH  ? p	  p? p	 /  @? p x	  p|x 8 KTM`   ? p8	 |x 8 KT1`   ? x8   	 !   |N         a      @ add_hdr_var  | !a|?x    /  A  /  A  /  @ 8    H  9"7	  pH  X p |xKA (|`x/  @ ,? p8	  |x KSQ`   8   H  0? p	  p p/  @? 8   	  8     |x!   |N         a        get_hdr_var  | !!|?x/  A/  @ H 8` hK{iA (|`x x x8  8 hKRY`   9"$	p/  @ H8` hK{1A (|`x9"$	p9"$	p|x8  8 hKR`   9"$	p pH  09"$	p pH  ? p	 ` p? p	 `/  @? p x	 ` p|x8  KQ`   ? p8	  |x8 @KQ`   ? x8   	 `b	K}`   |`x/  A b	8 KQ}`   H  b	KiA (|}xKYA (|`x}=8	 +A 8 |x8  8 @KQ`   8 |x8 @	KA (8 b	|x8 Ka`   |`x|	x8   @ ,b		8 K`   b	8 K`   !   |N         a      0 add_handler  | !q|?xb	KA (9"$	p p p? p9)  b	|x}%KxKA (H  0? p	 ` p p? p9)  b	|x}%KxKA (? p	 `/  @!   |N         a     dump_handlers| !q|?xb	KA (9"$	` p p? p9) b	|x}%KxKA (H  0? p	 0 p p? p9) b	|x}%KxKA (? p	 0/  @!   |N         a     dump_mime_types  | !q|?xb	KAA (9"$	h p p? p9) b	|x}%KxK=A (H  0? p	   p p? p9) b	|x}%KxKA (? p	  /  @!   |N         a     dump_content_types   | !a|?x    /  A  /  A  /  @ 8    H  |9"$	p pH  X p |xK!A (|`x/  @ ,? p8	   |x KM`   8   H  $? p	 ` p p/  @8     |x!   |N         a        get_handler_module   | !a|?x    /  A  /  A  /  @ 8    H  |9"$	` pH  X p |xKA (|`x/  @ ,? p8	  |x KL`   8   H  $? p	 0 p p/  @8     |x!   |N         a        get_mime_type| !a|?x/  A /  A /  @ 8   H |8 |x8 KK`   8 |x	H QA (|`x t t/  A  t|	8 p} J8   	 9"$	h xH   x|xKUA (|`x p p/ @ ? p8	| ? x|	 x  / *@ d x? p8	| |	x8 |x}d[x}%KxKt!A (|`x/  @ x? x8	 |xKJ`   8  H  p? x8 |x}$KxK	A (|`x/  @ ,? x8	 |xKJ`   8  H  $? x	   x x/  @8   |x!   |N         a       get_content_format   | !q|?x    /  A0 /  A$ /  @ H 8`KrA (|`x x x8  8KI`   9"$	/  @ H8`Kr]A (|`x9"$	9"$	|x8  8KIA`   9"$	 pH  09"$	 pH  ? p	  p? p	 /  @? p x	 ? p8	 |x 8 KH`    p|x 8 KH`   ? p8	 |x 8 KH`   ? x8   	 !   |N         a      l add_module_parameter | !a|?x     /  A ( /  A  /  A  /  @ 8    H  9"$	 pH  | p |xKQA (|`x/  @ P? p8	  |xK-A (|`x/  @ ,? p8	  |x KG`   8   H  $? p	  p p/  @8     |x!   |N         a       get_module_parameter | !q|?xb	KuA (9"$	 pH  <? p9i _ p? p8	 b	}d[x}ESx|xKaA (? p	  p p/  @!   |N         a     dump_module_config   | !a|?x   /  A  /  @ 8    H  t9"$	 pH  P? p8	  |xKyA (|`x/  @   p? p9)  |x}%KxK? p	  p p/  @8    |x!   |N         a        copy_module_config   | !q|?x   /  A  /  @ H  8` hKn!A (|`x x x/  A  x8  8 hKE`    x|x 8  KE	`   ? x8	  |x 8 @KD`   ? x8   	 `9"$	/  @ 9"$ x	H  <9"$	 pH  ? p	 ` p? p	 `/  @? p x	 `!   |N         a       add_platform_type| !a|?x    /  A  /  A  /  @ 8    H  9"$	 pH  p p |xK5A (|`x/  @ D /  A , /  A  ? p8	   |x KC`   8   H  $? p	 ` p p/  @8     |x!   |N         a        get_platform_type| !|?xPX`8    xX/  A `/  @ 8   H <?X8   	  PKw`   |`x/  A X	`K`   9"$	 pH  PKwi`   |`x/  @ 0 pP|xKA (|`x/  @ 8   H  8      | p  |/  A 	 H  
  ? p9)  8 |x8 d
  }(KxKA (8 X|x`K`   ? x8	  x? p	 ` p p/  @  x| |x!   |N         a       get_db_platforms | !a|?x    /  A  /  A  /  @ 8    H  9"$	 pH  p p |xKIA (|`x/  @ D /  A , /  A  ? p8	   |x K@`   8   H  $? p	  p p/  @8     |x!   |N         a        get_platform_param   | !q|?x   /  A  /  @ H  8`(KhA (|`x x x/  A  x8  8(K?`    x|x 8  K?`   ? x8	  |x 8 K?`   ? x8   	 9"$	/  @ 9"$ x	H  <9"$	 pH  ? p	  p? p	 /  @? p x	 !   |N         a       add_platform_param   | !q|?x9"$	 x9"$8   	H  $? x	  p xKIA ( p x x/  @!   |N         a    p clear_platform_params	A (  L |	N              | !|?x|`x    А  | |x    K=mA (|`x|x!   |N         a       l select   | !|?xK==A (|`x|x!   |N         a    8 getdtablesize| !q|?x  
X8 
KfMA (|`x/  @ H `   |`x pH   8 KfA (|`x/  @ H `   |`x pH    8 KeA (|`x/  @ H U`   |`x pH   8 KeA (|`x/  @ H !`   |`x pH  d 8 
Ke}A (|`x/  @ H l)`   |`x pH  08b38  KA (8b3K`   8    p p/  @ $9"9P	(| / @ 9"9P8 	( px   |x!   |N         a       init_module  | !q|?x   
X8 
KdA (|`x/  @ H `   |`x pH   8 Kd]A (|`x/  @ H `   |`x pH    8 Kd)A (|`x/  @ H (`   |`x pH   8 KcA (|`x/  @ H (Y`   |`x pH  d 8 
KcA (|`x/  @ H l%`   |`x pH  08b38   KaA (8b3KE`   8    p p/  @ $9"9P	(| / @ 9"9P8 	( px   |x!   |N         a       execute_module   | !|?x |#x  |  |xKA (8  |x!   |N         a       X list_modules | !|?x|`x    А  | |x    K8A (|`x|x!   |N         a       l select   | !|?xK8eA (|`x|x!   |N         a    8 getdtablesize| !Q|?xb
@
`8 p|x8 K`   |`x/  @ 08b38 
hK~)A (8b3K`   8   H  `8pb
@
p|x8  K`   |`x/  @ 08b38 
xK}A (8b3K`   8   H  8  |x!   |N         a     mod_static_init  | !Q|?x8 b
@
`|x8 K`   |`x/  @ 08b38 
hK}!A (8b3K`   8   !H $ x  / /A bKxA (|ix9)8$})	 x  / /@ ,89? |x8 
}'KxK|A (H  (89? |x8 
}'KxK|A (8 9?|x}$Kx8 K6e`   8 |xH `   |`x/  @ 88 8b38 
|xK|-A (8b3K`   8   !H 08b
@
p|x8  K`   |`x/  @ 08b38 
xK{A (8b3K`   8   !H 8|x8  8 K5`   89? |x}$Kx8 K5`   8|xKwyA (|ix9)8 p} J	(x  / /@ ,8|xKwIA (|ix9)8 p} J8   	(9"7	 p|x8 /Ki`   |`x 8   H (9"7) p | 9}#Kx8 /|x}f[x8 Ka-`   89?9|x8 
}&Kx}g[xKzA (89?|x}$Kx8 K4`   ? 8	 |	 H A x  / .@ 488b38 
|xKzQA (H )`   |`x!H X8|xH Q`   |`x/  @ 488b38 
|xKzA (H `   |`x!H ? 8	  ? 8	 |	 H @89? |x}$KxKxA (|`x  x   T &/@ @ 8|x8  8 K3e`   8b
@
|x8 K`   8|xKh5`   |`x/  @ 8|xKu5A (|}x8|xKu!A (|`x}=8	 +A 88|x
8 Kv)`   89?|x}$Kx8 Kv`   9"$	x   /  A ,88b38 
|xKxA (8b3K`   8|x
KwA (|`x x x/  AP8|x8 .KfI`   |`x|	x8	  9? | 9}#Kx8 .|x}f[x8 K^}`   8|x
8 K`   b
Kf`   |`x/  A h9"$	x   /  A 888b38 
|xKwA (8b3K`   8b3K`   8b
|x8 K1`   H  D9"$	x   /  A 088b38 

|xKwaA (8b3KE`   9"$	x   /  A b
K%`   ? x	 ,| 9? |x}$KxH A (|`x  x   T &/@ A 9 H @  !p/  @ !p| 9"9P	  !8`  KyA (|`x  @ 89? 8	 @|xH 5A (|`x b8  K	A (9"$	x   /  A bKM`   K`   9"$	x   /  A b K%`   8` K*1`   9"$	x   /  A b(K`   8|x8  8 K/`   H  \8|x8 8 xKA (|`x p p/  @ , p|"8|x8 }e[x}&KxKA (? x	 4| 4x  x   T /  A9"$	x   /  @ hH  p88b38 0|xKuAA (H `   |`x!H  H88b38 8|xKuA (H `   |`x!H  b@K`   8  !!|x!   |N         a    mod_static_execute   | !a|?x  /  @ 8    H  L8    p H A (|`x x x/  A 8   p xH A ( px     |x!   |N         a        DirectoryExists  | !|?xp8    t8 xp|xH A (|`x p x   T &/@ @ , x   |	xU)&8   `    A 8   t tx   |x!   |N         a        isDirectory  | !q|?x8b3K`   8 p|x8  8 K,`   b
@`8 p|x8 Ke`   8 p|xKa`   |`x/  A 9"9P8 	(8   pH  9"$	x   /  A bhKq`   9"$	x   /  A 8 p|xKM`   9"9P8 3	(bp8 p|x8 K,9`   9"$	x   /  A bK	`   K`   9"$	x   /  A b K`   8`  K%`   bxKq9A (8  pp|x!   |N         a   t Error404 
A (  L |	N               A (  L |	N              HA (  L |	N              PA (  L |	N              XA (  L |	N              | !|?x|`x    А  | |x    K*	A (|`x|x!   |N         a       l select   | !|?xK)A (|`x|x!   |N         a    8 getdtablesize!|?x"8   	  8  |x!  N         `    , mod_embedded_init| !|?x9? 9` }#Kx|x}e[xH 	`   9?9`T}#Kx|x}e[xH 	`   9?W9`}#Kx|x}e[xH 	`   "	  i I 	 lt_|	  i (I 0	 8_	 <9?9`>}#Kx|x}e[xH 	M`   9?9`
}#Kx|x}e[xH 	-`   9?9`U}#Kx|x}e[xH 	`   9?99` }#Kx|x}e[xH `   9?$9` }#Kx|x}e[xH `   9?9`}#Kx|x}e[xH `   9?9`}#Kx|x}e[xH `   9?u9`!Z}#Kx|x}e[xH m`   9?>9` ]}#Kx|x}e[xH M`   9??,9`
}#Kx|x}e[xH -`    9?I9`}#Kx|x}e[xH `   9?V{9`}#Kx|x}e[xH `   9?XP9`}#Kx|x}e[xH `   9?v9`~}#Kx|x}e[xH `    9?zx9`O}#Kx|x}e[xH `   "	  9? b(08 }&Kx|xH `   "	  9?b8@8T}&Kx|xH y`   "	  9?WbHP8}&Kx|xH Q`   "	  9?lbXP8 >}&Kx|xH )`   "	  9?b`@8>}&Kx|xH `   "	  9?bhp8
}&Kx|xH `   "	  9?bx08U}&Kx|xH `   "	  9?9b08 }&Kx|xH `   "	  9?$b08 }&Kx|xH a`   "	  9?b@8}&Kx|xH 9`   "	  9?bP8}&Kx|xH `   "	  9?ubP8!Z}&Kx|xH `   "	  9?>b08 ]}&Kx|xH `   "	  9??,b08
}&Kx|xH `   "	  9?Ib@8}&Kx|xH q`   "	  9?V{b@8}&Kx|xH I`   "	  9?XPbp8}&Kx|xH !`   "	  9?vbP8~}&Kx|xH `   "	  9?zxb08O}&Kx|xH `   8    x"	   pH  @? p8	 b
P|xK1A (|`x/  @  p xH  ? p	 ` p p/  @ x/  A  x|x
8 Ka`   ? x	 P| 9"9P	  9"$	x   /  A bK=`   K`   9"$	x   /  A bK`   8` K!`   ? xi X? x	 P| "}c[x8 |x}&KxKtmA (9"$	x   /  @ DH  L9"9P8 	(8b38 
PKhA (8b3K`   8   }H  bKy`   8  }}|x!   |N         a   8 mod_embedded_execute | !q|?x  |+x   8` hKJA (|`x x x8  8 hK!`   "	  /  @ H8` hKJA (|`x"	  "	  |x8  8 hK!`   "	   pH  0"	   pH  ? p	 ` p? p	 `/  @? p x	 `? p8	 |x 8 @K!A`    p|x 8 K!)`   ? p А	 P | |xKIA (|`x? p	 X? p) X | }#Kx |xH i`   ? x8   	 `!   |N         a       
add_ecitem   | !a|?x    "	   pH  |? p8	  |xKåA (|`x/  @ L? p	 P| ? 	  ? p	 X? 	   p |x8 K `   8   H  $? p	 ` p p/  @8     |x!   |N         a        get_ecmitem                  |fx|#x|3xH       @        bcopy       @        memmove   | !|?x|`x    А  | |x    KyA (|`x|x!   |N         a       l select   | !|?xKIA (|`x|x!   |N         a    8 getdtablesize| !!|?x8    8    9"$	x   /  A bK`   8 b
@|x8 KՅ`   |`x/  A 8 |xKbA (|`x 9"7	 x|xKR`   |`x/  @ 9"7	 | |xKFqA (|`x  /  @ bKi`   8   H 
9"7i x9"7	 |  }d[x|xKE`   9"7) x8   	   | b  8 |xH 1E`   |`x  K_A ( /  @ 8   H 
8 | b(08  |xH 0`   |`x/  @ 8   H 
 9"7	  |xKQ}`   |`x/  @ D9"7)   | b8}$Kx8 |xH 0`   |`x/  @ 8   H 	9"7	 |xKQ`   |`x/  @ D9"7)  | b@}$Kx8 |xH 09`   |`x/  @ 8   H 	@9"7	 |xKP`   |`x/  @ D9"7)  | bH}$Kx8 |xH /`   |`x/  @ 8   H 9"7	  |xKP]`   |`x/  @ D9"7)   | bP}$Kx8 |xH /y`   |`x/  @ 8   H 9"7	 (|xKO`   |`x/  @ D9"7) ( | bX}$Kx8 |xH /`   |`x/  @ 8   H  9"7	 0|xKO`   |`x/  @ D9"7) 0 | b`}$Kx8 |xH .`   |`x/  @ 8   H 9"7	 8|xKO=`   |`x/  @ D9"7) 8 | bh}$Kx8 |xH .Y`   |`x/  @ 8   H `9"7	 H|xKN`   |`x/  @ D9"7) H | bp}$Kx8 |xH -`   |`x/  @ 8   H  9"7	 P|xKN}`   |`x/  @ D9"7) P | bx}$Kx8 |xH -`   |`x/  @ 8   H 9"7	 X|xKN`   |`x/  @ D9"7) X | b}$Kx8 |xH -9`   |`x/  @ 8   H @9"7	 `|xKM`   |`x/  @ D9"7) ` | b}$Kx8 |xH ,`   |`x/  @ 8   H b
@KMe`   |`x/  @ < | b
@8  |xH ,`   |`x/  @ 8   H 9"7	 p|xKM`   |`x/  @ D9"7) p | b}$Kx8 |xH ,)`   |`x/  @ 8   H 09"7	 |xKL`   |`x/  @ D9"7)  | b}$Kx8 |xH +`   |`x/  @ 8   H 8 |x8  8 KM`   9"7	 |	8 |x8 }&KxK]AA (8 |xKL`   |`x/  @ (8 ? })b|x8  }&KxH +1`   8 |x8  8 K`   bKXA (|ix9)8$})	 x  / /@ $8 |x8 K\A (H   8 |x8 K\A (8 |xKKQ`   |`x/  @ (8 ? })b|x8  }&KxH *q`   9"7	 /  A 9"7	  xH  8|x8 K	`   ? x8|x}$Kx8 KY`   8|x8 -8 _KQ`   8|xK@!`   ? x9i 9? | }#Kx}d[x8  |xH )`   ? x	  x? x	 /  @`bKJQ`   |`x/  A T8|xH D1A (|x  |xKA (|`xb8 @xx|xK[A (9"78 	 9"78 	9"78 	9"78 	b K]`   |`x  /  @ T9"7	 | /  @ $8b38 K`   8   H bKIU`   |`x/  @ hH  8 |x8  8 K1`    | 9? |x}$Kx8 KU`   8 8b38  |xKZA (8   H Tb8 @KE`    | b(8  |xH (`   9"7	 | /  @9"7	 |xKH`   |`x/  @ <   p8 b
@0|x8 K	`   |`x/  A 8 |xKXA (|`x p9"7	 |	 pH @ X9"9P8 	(9"7	 |	 p| 8b38 8}&Kx|xKYA (8b3K`   8   H  8 | |xH +-`   |`x/  @ 8   H  8  |x!   |N         a    mod_mvconnector_init | !|?x8 p|x8  8@K!`   8 ,8  ,8  ,8   ,9"$	x   /  A b@K`   8,p|xKF`   |`x/  A 88,p|x8 @K`   8,9?,p|x8 @}%KxKu`   8Ab
@H|x8 K!`   |`x/  @ 08b38 PKWqA (8b3KU`   8   EH d8  ,9?A8 p|x}$Kx8 K5`   8Ab
@X|x8 Kȩ`   |`x/  A  8p9?A|x}$Kx8 K`   8Ab
@`|x8 Ke`   |`x/  A  8 p9?A|x}$Kx8 K`   8Ab
@h|x8 K!`   |`x/  A  8$p9?A|x}$Kx8 Ki`   8Ab
@p|x8 K`   |`x/  A  8p9?A|x}$Kx8 K%`   8Ab
@x|x8 KǙ`   |`x/  A  85 9?A|x}$Kx8 K`   8Ab
@|x8 KU`   |`x/  A  8p9?A|x}$Kx8 K`   8Ab
@|x8 K`   |`x/  A $8(p9?A|x}$Kx8 KY`   H  H8Ab
@|x8 K`   |`x/  A  8(p9?A|x}$Kx8 K`   8Ab
@|x8 Kƅ`   |`x/  A  8p9?A|x}$Kx8 K`   8Ab
@|x8 KA`   |`x/  A  8p9?A|x}$Kx8 K`   8Ab
@|x8 K`   |`x/  A  8p9?A|x}$Kx8 KE`   8Ab
@|x8 KŹ`   |`x/  A  8- 9?A|x}$Kx8 K`   8Ab
@|x8 Ku`   |`x/  A  81 9?A|x}$Kx8 K`   8Ab
@|x8 K1`   |`x/  A  8p9?A|x}$Kx8 Ky`   8Ab
@|x8 K`   |`x/  A P8A|xKRA (|`x,,| / A 8  ,H  ,| /  @ 8   ,8Ab
@|x8 Ky`   |`x/  A 8A|xKQA (|`x,8Ab
@|x8 K9`   |`x/  A <8A|x8 K5A (|`x/  @ 8  ,H  8   ,8Ab
@|x8 K`   |`x/  A 8A|xKPA (|`x,,| /  A 8  ,8Ab
@|x8 KÁ`   |`x/  A 8A|xKPA (|`xA 8 p|xH `   |`x/  @ 8   EH  8 p|xH `   |`x/  @ l9"9P	(| / @ 9"9P8 	(9"9P	(x   /  @ K`   9"9P	(x   /  @ 8`  K5`   8   EH  ,9"$	x   /  A bKz`   8  EE|x!   |N         a    mod_mvconnector_execute  | !q|?x  838 H `   |`x/  @ 8b3Kz]`   8    pH  8   p p|x!   |N         a       t checkReq | !|?x5P8  8    ?5P	@| |	p} x|	 P|  T  ?5P	@| x   T z|	p} x|	 P|  T  8    8    9"7	 x|xKK}A (|`x| 9"7	 9"$	x   /  A 89"7) x8,|x8 }&KxKO9A (8,|xKy`   5P|x8 K29A (|`x/  |  &T   /  A 8      8    9"7	 |?5P	,| |֐ 9"7	 |?5P	,|	} Kx|| I| XP| /  A ? 8	  ̀ /  @ 8   9?(Ѐ | }#Kx8 |xKNAA ( /  Ax?5P	@| x   x / A @?5P	@| x   x / @ 5 H  "?5 5 5H  "?55  KIA (|`x 8     / @ 9"7	 |	 | J|	8	 |9"7	 |   A ` /  @ T9"7i x9"7	 | }c[x |xKJm`   9"7	 x|xKI%A (|`x| 9"7	 H X9"7	 |?  |	| ||	8	  | /  A 809?(5P|x8 }'Kx9   H e`   80|xKHA (|`xx	   x   |	x	   |x   |	x    |9"$	x   /  A  bKvI`   80|xKv9`   9"7	 |	 |H @ | || |xK.A (|`x  /  @ < || 8b38 |xKKA (8b3Ku`   8   4H <9"7	 x   H  h9"7i x9"7	 | }+9i9"7	 | | XP 9"7	 x 9"7	 |	8	 |   |xK`    /  A P80 |x8 K1`     8 KHM`    KGA (|`x|	x | J 9"7	  x?5P	, t8   H  Ȁ ȁ? H @  x t ? H A   t|   |xK%`    t| |	x | J  |   |xK`    | |	x | J  t| |	x | J ? x t| HP x? 8	  Ȁ ȁ? H @0? 8   	   /  A 09"7	 x|xKFuA (9"7 	 x9"7 |	  /  AH9"$	x   /  A H?5P9i$ ?5P	,|	8,|x8 }f[x}'KxKImA (8,|xKsM`   ?5P9i$ ?5P	,|	 | |x}d[x}%KxKKu`   |`x  /  @ <?5P8	$ 8b38 |xKHA (8b3Kr`   8   4H L | |x5PH *`   |`x/  A P | |xKTA (?5P8	 8b38 |xKHA (8b3Krm`   8   4H 8   H  ȁ? H A  /  A 9  ?4H  8   4?4? p8(|x8  8K`   9?(؀ | }#Kx8 |xKGA (8     /  |  &T x   /  |  &T x
  8 9?(9(5P|x8( }&Kx}g[x}ISxH `   8    H  /  A 9"$	x   /  A bKqM`    | 9? |x}$Kx5PH +`   |`x/  A (8(|x8K`   8    H  8   9"$	x   /  AdbKp`   H T /  A ,9"7) x8 |x}$KxH ܽ`   |`x H   8 |x H A (|`x  /  @ \? 8	  9?( | }#Kx8|xKFUA (9"$	x   /  A 8(|xKp!`   H  9"$	x   /  A  bKo`   8 |xKo`    p| 9?(5P|x }&KxH 	u`   |`x  /  @ ? 8	   /  A  H `   H   H A (?5P	,|	 H @  /  A /  A  | |x5PH (`    /  @ x8b38  KE)A (8b3Ko`   8(|xK3`   |`x/  @ 08(|xK;`   8(8b38 (|xKDA (8   4H  4 /  @  ? 8	  Ȁ ȁ? H @@9  ?44|x!   |N         a       exec_request | !|?x! !(|+x!8!@} Cx?!0!H8 ||x8  8 K`   !8KBA (|`x p9"$	x   /  A ,! 8b38 0|xKCA (8b3Km`   b
@K	A (|`x/  A P8 }|x
@8 `K`   8 }|x88 `K@`   8 }|x
P8 `K@`   H  8 }|x
P8 `K=`   !0| !(@|xK!`   !0| !(H|xK5a`   9? }!0| !(P}%Kx|xK5=`   !0| !(X`|xK5`   !0| !(h!8|xK4`   !0| !(p!@|xK4`    p/ @ $8    x?! 	,|	8	 tH  D? p8	|?! 	,| |֐ x?! 	,|	8	|	 x| J t9"7	 x/  A !H/  A d9"7I x x|	 t| 9 |}CSx}$Kx|x}f[x8 K-`   9? |!0| !(x}%Kx|xK3`   H  H!0| !(x|xK3`   H  $!0| !(x |xK3`   8   |x!   |N         a      $ 
set_db_cmd   | !Q|?x..|+x./ } Cx./?/.| .8  |xK`   //  A 08 ?/}).|x8( ./ }(KxK5H  8    .| 9? .|x.}&KxH E`   |`x/  @ 8.8b38 |xK@1A (8b3Kj`   8   .H (?.8	 |xK.`   |`x/  @ ?.9) 8(|x}$Kx8 K`   9?(8    p}#Kx8 .8  8  9   9   9@  H `   8(|xH СA (|`x  /  @ L9"$	x   /  A h8,9?(|x8 }&KxK?MA (8,|xKi-`   H  48,9?(|x8 }&KxK?A (8,|xKh`   .H  Q`   8   ..|x!   |N         a      8 set_comline  | !a|?x$89   |x8  }%KxKe`   ?$8	0|xK-M`   |`x/  @?$8	0|x8 ,K,-`   |`x|	x8	  8   H x?$9)0 | 9 }#Kx8 ,|x}f[x8 K$Q`   8 |xK&`   9? 8    p}#Kx8 $8  8  9   9   9@  H -`   8 |x8 =8 K.`   |`x  /  @ ̀ / ?A  |	8 } J8   	 ? 8	   | |	x8 | J9?|x}$Kx8  H %-`   |`x/  A  8 9?|x}$Kx8 H yA (9"$	x   /  A 48 9?8b38 |x}'KxK<A (8b3Kf`   ? 8	   ? H @!   |N         a        set_db_env_vars  | !A|?x|#x 89  |x8  }%KxK`   8    8    8    8    8    8    |? 	 4| 4x  x   T /  A (9"$	x   /  AxbKe`   H h8 |x8  H 1`   |`x t" x	   x /  @  8 |x 8 K-`    t9 H @ \9"$	x   /  AbKe!`   9? x| }#Kx8 |xK;A (8|xKd`   H 8 |xK7`   |`x/  A $8 |xK7`   |`x/  @ l9"$	x   /  A bKd`   8   ?	,x   / A 9"$	x   /  A bKdM`   8   H Ԁ /  A8 |x8 KUA (|`x/  @x9"$	x   /  A (bKc`    /  @ b Kc`   8|xK(`   |`x/  @ h8|xH !%`   |`x  /  @ D88|xK9A (9"$	x   /  A,Kc]`   H 8   8   8 |xH `   8|xK(`   |`x/  @9?  | }#Kx8 |xK9	A (8 |xH `   9"$	x   /  Ah9? | }#Kx8 |xK8A (8|xKb`   H 08 |x K5]`   |`x/  A $8 |x(K5=`   |`x/  @ \9"$	x   /  A b0Kb=`   /  A  / @ 8   H  8   8    H  / @ 9"$	x   /  A  b8Ka`   8 |xKa`   8 |xH ]`   8 |xK&`   |`x/  A 8   bH -`   H  /  @8 |xK49`   |`x/  A $8 |xK4`   |`x/  @8   H 8 |x@8 KUA (|`x/  @ 8 |xKp`   H 8 |xH8 KA (|`x/  @ 9? 8	 |xK5A (|`x p p/  @  p/A 9"9P p	(9"$	x   /  A9? p| }#Kx8 P|xK6iA (8|xK`I`   H 8 |xX8 KmA (|`x/  @ |9? 9) 8|x}$Kx8 K`   8|xK,`   9"$	x   /  Ap89?|x8 `}&KxK5A (8|xK_`   H <8 |xh8 	KA (|`x/  @ Ȉ x  /  @ 8  
H  9  	?9? })8|x8 p}&KxK5IA (8|xK_)`    x  /  @ 8  
H  9  	?8 ?| J|x8K`   9"9P	(| / @9"9P8 	(H 8 |xxH UA (|`x/  @ 8 |xH 5A (|`x/  @ 8 |xH A (|`x/  @ d8 |xH A (|`x/  @ D8 |xH A (|`x/  @ $8 |xH ҵA (|`x/  A d8K`   K]`   9"9P8 	(9"$	x   /  A bK]`   8 |xK]`   H  d9"$	x   /  A  bK]`   8 |xK]q`   8 |xK/mA (|`xx	   |x   |	x    |K\8|xK"!`   |`x/  @ P /  A D/  A 8 /  @ bH  `   8|xH `   |`x  /  @ $9"$	x   /  A bK\`    | |x!   |N         a      	 process_result   | !|?x 9"9P	(x   /  @ K׽`   9"9P	(x   /  @ 8`  K)`   b K1A (!   |N         a       x send_result  | !|?x08|+x|3x@?H"	  i I 	   _  	  ) ( ? 9"$	x   /  A (8b38 0K1IA (8b3K[-`   @/  A  @/ A @|  H  8    ? Б?@H|p}`x| P|  T HH|@|	 | Jx	$8 p})9)  	   p8  p88  8  |xH `   9"7	 x/  A (9"7	 x|xK,qA (|`x|  H  8    ? ȑ? 0K,EA (|`xx	   | x   |	x	   |p}`x| P|  T | |	x  0K`   |`x/  |  &T x   |x    ?  |	|	8	  9"7	 |	 H @ ? 8	  9"7) x | }#Kx|xH AA (|`x x x/  @ < | 8b38 |xK/MA (8b3KY1`   8    H @9"7 x	 x9"7 	  /  @ 9"7) x8   	   /  A ,9"7i x9"7	 | }c[x|xK+`   0K`   |`x/  @ T9"7i x9"7	 | }c[x0|xK+`   9"7i x9"7	 | }c[x |xK+`   9"7	 x|xK*MA (|`x 9"7) x | }i9"7	 |	 | HP|  p8}e[x|x8  H -`   8    |x!   |N         a        append_to_qstring| !Q|?x|`x 8    9"7	 | /  @ $9"7	 |xKE`   |`x/  A 8    H 9"7	 |	8	  t t| |xKA (|`x x x/  @ < t| 8b38 |xK,A (8b3KV`   8    H (9"$	x   /  A 49"7	 | 8b38 |xK,A (8b3KV`   9"7	 |  x8 |xKT=A (|`x p p| |	x x})8   	  9"7	 |	 pH @ H9"$	x   /  A p p| 8b38 |xK,A (8b3KU`   H  @9"7	 |	 p| 8b38  }&Kx|xK+A (8b3KU`   9"7	 |x(8 !KA (|`x/  @   | b  x8 |xK9"7	 9? |x}$Kx8 K9`   8 |x0KA (|`x/  @ $ | b8 x8  |xKAH  09"7	 8b38 @|xK*A (8b3KT`    xK'uA (9"7	 |	 pH |  &T x     |x!   |N         a       get_post_data| !q|?x |#x А Ȁ Ȑ x / @ ? 8	 x |  8  |xK`   8    |H   H A (|`x p? p8   A  p t tT >/ 
@ $ || |	x }) t	  H  l tT >/  A $ || |	x }) t	  H  ? |8	 |? |8	  |H  8  |H   |? xH A@ || |x!   |N         a      P StreamGetString  | !a|?x|`x ؐ  K$A (|ix | |x }%Kx8  K)UA (|`x p? p8   @ 8   H  8     |x!   |N         a        oe_SendSocket| !Q|?x|`x   K$A (|`x x8 |x8 
H xK'A (8     | 9? |x}$KxK|`x p p/  A  p|  H  , | |x K|`x p p|   |x!   |N         a        oe_SendOurMessage| !A|?x|`x !  8 |x8  8  K`   ? 8   	  ! | nt|   x	l! |	 P  /  A ? 8	  8    xH  ? 9) x  @   H  8      pH   p | 9? |x}$Kx}e[x8  K0A (|`x ? 8   @ bPKP!`   8  H   /  @  |  H  d? 8  |x}%KxH `   ? p | HP p p/  AX? x8	  x x? H A! |   |x!   |N         a       oe_ReceiveSocket | !Q|?x|`x  | 9? x|x}$Kx8 K|`x p p/ A  p H  $8    8 x|xH iA (|`x  |x!   |N         a        oe_ReceiveMessageSize| !q|?x|`x  А  | |x  K-|`x p p|x!   |N         a       ` oe_ReceiveMessageData| !A|?x|ix|+x? 8    8    8    8    8    t8    p| |xKq|`x/  A 8   H 9"$	x   /  A b`KMe`   KMY`   | |xK|`x  /  @ 8   H <? 8	 |xKA (|`x ? 8	  8  |xK`   ? | |x}$Kx KE|`x  /  @ ( /  A  KUA (8   H  / @88 |x8  8 Km`   8    8    t8    p8    |H  || |	x })	   x /  A xT >/ @H p/ @ 8 |xh8 K9A (|`x/  A (8 |xp8 KA (|`x/  @ 08    p9"$	x   /  A bxKK`   H  9"$	x   /  A  bKK}`   8 |xKKm`   8 |xK A (H  `8 |x8 KyA (|`x/  @ <9"$	x   /  A bKK`   8 |xK uA (8   p8 |x8  8 K`   8    tH  H xx  |xH qA (|`x/  A ( t|	8 p} J x	 0? t8	  t xT >/ 
@ 8     xx  / 
A T/ 
A / A 0H  / A / A H  t8    H  h8   H  \ p/  A 08 |xKiA (bKI`   8 |xKI`   8 |x8  8 Kٹ`   8    t t/@ 88 b|xK5A (8 |x8  8 Ky`   8    t? |8	  | ||	   A |	x })9)8   	  ?    @ ? 	  x  / 0A ( /  A  KA (8   H   |x!   |N         a      4 oe_ping_pong |!Aa !|?x|`x8    8    8   8   8` K9A (|`x 8     x ?9I  x ?;  x ?9)   x  x  x  x  x  x  x  | p! x         a   a   A  8 &x}g[x}HSxxxKmA (| |x 8  KA|`x  KA ( /  @ 8  H   KA (8     |x!   |!AaN         a       oe_login | !Q|?x|`x  8    8    x8   t8   p8` KQA (|`x 8    x tx	  p|  8 |x}'KxK=A ( | |x 8  K|`x x KA ( x/  @ 8  H   xKA (8     |x!   |N         a        	oe_logout| !Q|?x|`x   8    8    x8   t8   p8` K1A (|`x 8    x tx	  tx  p|  8 |x}'Kx }i[xKA ( | |x 8 K|`x x K}A ( x/  @ 8  H   xKYA (8     |x!   |N         a       oe_exec  | !a|?x$$$KA (|`x x x/  A89"$	x   /  A 08 |x8 $K	A (8 |xKC`   8 |x8  8  K`   H  8 |x8 8 xKAA (|`x p p/  @ t p|"8 |x8 }e[x}&KxK%	A (9"$	x   /  A 89?  p| }#Kx8 |xKMA (8 |xKC-`   ? x	 4| 4x  x   T /  AD xK$EA (8  $H  $$8$KA (8   $$|x!   |N         a       send_content_file| !|?xpp8 p|xKA (|`x/  @ |  H  8   |x!   |N         a       l get_content_size | !Q|?x  |+x 8    p8 x |x8 H A (|`x/  @ 0? )   |  }$Kx|xKљ`   8   p8 x|xH mA ( p| |x!   |N         a        expand_environment_strings   A (  L |	N              | !|?x|`x    А  | |x    K=A (|`x|x!   |N         a       l select   | !|?xKA (|`x|x!   |N         a    8 getdtablesize| !q|?x9"7	 x/  AX9"7	 x|x8 &K`   |`x p8    tH 8 x|x8  8 Kϝ`   9"7i x? t8	 | 9? x}c[x8 &|x}&Kx8 K`   8x|x8  8 KQ`   8 x9?x|x8 =8 }&Kx8 K`   8x|x8  8 K`   8 x9?x|x8 =8 }&Kx8 Ka`   8x9?x|x}$KxH `   8x9?x|x}$KxH `   8x9?x|x}$KxKu`   ? t8	  t t? pH @8  |x!   |N         a    mod_config_init  | < ` \0|!j|?x9"a`8   	  (9?9`R}#Kx|x}e[xK`   09?WX9`}#Kx|x}e[xK`   89?k9`m}#Kx|x}e[xKm`   @9?y{9`}#Kx|x}e[xKM`   bH9? p=) 8	}i[x9` |x}$Kx}e[xK!`   bP9? p=) 8	}i[x9`|x}$Kx}e[xK`   8` hK1A (|`x"X	  "X)  8   	 `"X)  8 R	 P"X)  8	 X"X	  |x`8 H `   "X)  8	 |xh8 ?H `   "X  8` hKA (|`x `"X)  ) `8   	 `"X)  ) `8 	 P"X)  ) `8WX	 X"X)  	 `|x`8 H M`   "X)  ) `8	 |xp8 ?H )`   "X)   `8` hKA (|`x `"X)  ) `) `8   	 `"X)  ) `) `8 l	 P"X)  ) `) `8k	 X"X)  ) `	 `|x`8 H `   "X)  ) `) `8	 |xx8 ?H u`   "X)  ) ` `8` hKMA (|`x `"X)  ) `) `) `8   	 `"X)  ) `) `) `8 	 P"X)  ) `) `) `8y{	 X"X)  ) `) `	 `|x`8 H `   "X)  ) `) `) `8	 |x8 ?H `   "X)  ) `) ` `8` hK}A (|`x `"X)  ) `) `) `) `8   	 `"X)  ) `) `) `) `8 	 P"X)  ) `) `) `i `9? p=) 8	 X"X)  ) `) `) `	 `|x`8 H `   "X)  ) `) `) `) `8	 |x8 ?H `   "X)  ) `) `) ` `8` hKA (|`x `"X)  ) `) `) `) `) `8   	 `"X)  ) `) `) `) `) `8 	 P"X)  ) `) `) `) `i `9? p=) 8	 X"X)  ) `) `) `) `	 `|x`8 H `   "X)  ) `) `) `) `) `8	 |x8 ?H `   8 p|x8  8 Kȡ`   b8 p|x8 Kq=`   8 p|xKU`   |`x/  @ (H c`   8p|xx8 @Ke`   H 48 p|xK`   |`x/  @ (H g`   8p|xh8 @K!`   H  8 p|xK
`   |`x/  @ (H 5)`   8p|x8 @K`   H  8 p|xK
`   |`x/  @ (H `   8p|x8 @KǙ`   H  h8 p|xK
E`   |`x/  @ (H g`   8p|x8 @KU`   H  $H `   8p|xp8 @K1`   9"$	x   /  A bK7`   bpK`   |`x/  A tb8 K`   b8 K`   b8 Kƽ`   K1`   8` K`   "X)  8p|x}$KxH r]`   H  lb8 Ku`   b8 Ka`   b8 KM`   9"9P8 3	(K`   8`  K5`   b KA (9"$	x   /  A bK5`   8  |x!   |N         a    mod_config_execute   | !|?x8   b8 H s`   b (8 
H s`   bKaA (|`x| b0|xH se`   bK9A (|`x| b8|xH s=`   b	KA (|`x| b@	|xH s`   8A4|x8 K`   8A4|xKA (|`x|	8A4bH|x}%KxH r`   bPKA (|`x| bXP|xH r`   8    8 |x8  8@KQ`   8 b`h|x8 K{`   8 |xK!`   |`x/  A ? 8	 
 9? 8	 b`p|x8 K{`   9? 8	 |xK`   |`x/  @ H9? 8	 9?ax|x}$KxKA (|`x ? 8   @  ? 8	  H  ? 8	   /  @8 - 8  -(8 -,8   A09? 8	 b`x|x8 Kz`   9? 8	,b`|x8 Kz`   9? 8	0b`|x8 Kz`   9? 8	( b`|x8 Kz}`   |`x/  @ $9? 8	( b`|x8 KzQ`   9? 8	 b`|x8 Kz1`   9? 8	 b`|x8 Kz`   9? 8	 b`|x8 Ky`   9? 8	4b`|x8 Ky`   9? 8	 b`|x8 Ky`   9? 8	  b`|x8 Ky`   9? 8	$ b`|x8 Kyq`   8A4|x8  8 K`   8A4b`|x8 Ky=`   8A4|xK}`   |`x/  @ 8A4|xKAA (|`x- 8A4|x8  8 KE`   8A4b`|x8 Kx`   8A4|xK`   |`x/  @ 8A4|xKA (|`x-(8A4|x8  8 K`   8A4b`|x8 Kxm`   8A4|xK`   |`x/  @ 8A4|xKqA (|`x-,8 |x8  8  H {!`   |`x/  @ ? 8	   d8d8/  A  d8/  A Ld8/ A @H  b8 H nQ`   H  @8    b8 H n1`   H   8    b 8 H n`    /  @8E49? |x8 }%KxH u`   |`x  /  A8 |xK`   9? 8	 |xKq`   |`x/  @ 9A49? 8	 }c[x|x8 Ke`   9?A49 8    p}#Kx8 }e[x8  8  9   9   9@  H v`   8A4|xH )A (|`x  /  @ L9"$	x   /  A h8b(9?A4|x8 }&KxKA (8b(|xK.`   H  48b(9?A4|x8  }&KxKA (8b(|xK.`   9"$	x   /  A  b(K.a`   8E4|xK.Q`   8E4|x0H A (|`x  /  @ @8    8b(9?E4|x8 @}&KxKA (8b(|xK-`   H 8I4|x8  8 !K`   8IU|x8  8 K`   8    9"$	x   /  A bHK-`   8UU|x8  8 Kq`   8YU|x8  8 KY`   8]U|x8  8 KA`   ? 	 4| 4x  x   T /  @8UU|x8  8 H `   |`x/  A9"$	x   /  A 8UU|xK,`   8UU9?YU|x8 :8 }&Kx8 K!`   8UU|x8 K`   |`x|	x8	 |	8UU9]U|x}$Kx< `}f[x8 K`   8YU|xK`   8]U|xK`   8YU|xK`   8]U|xK`   8YU|xK]`   8]U|xKM`   8YU|x K`   |`x/  @ ,8I49?]U|x}$Kx8 !K`   8   K48YU|xK`   |`x/  @8IU|xKA (|}x8]U|xKA (|`x}=8	 +A8IU|xKM`   |`x/  @ 8IU|x8 Ky`   8IU9?]U|x}$Kx8 K]`   K9"$	x   /  A bK*`    / @ |b 8 H i`   8I4|xKA (|`x|	8I4b(|x}%KxH h`   8IU|xKA (|`x|	8IUb0|x}%KxH h`   H  8    b(88  H h`   b088  H hq`   b 8 H h]`   H  Hb(@8 H hE`   b0@8 H h1`   b  8 H h`   8    8MU|x8  8 K`   8ah|x8  8 K`   8aX9?a\9a`9_ad9ah|x}$Kx}e[x}FSx}CxK7-`   |`x  /  A H aX| /  @48MU|xH8 K`   8MU|xP8 Kq`   8MU|xX8 KY`   8MU|x`8 KA`   8MU|xh8 K)`   8MU|xp8 K`   8MU|xx8 K`   8MU|x8 K`   8MU|xX8 K`   8MU|x8 K`   8MU|x8 K`   8A4|x8  8 K5`   ad|	8A4|x8 }&KxK-A (8MU9?A4|x}$Kx8 KA`   8MU|x8 K)`   8MU|xp8 K`   8MU|xX8 K`   8MU|x8 K`   8MU|x8 K`   8A4|x8  8 Ke`   aX|	8   `    @ <8A4|x8 KQ`   8MU9?A4|x}$Kx8 Ke`   H  DaX|	8A4|x8 }&KxKA (8MU9?A4|x}$Kx8 K!`   8MU|x8 K	`   8MU|xp8 K`   8MU|xX8 K`   8MU|x8 K`   8MU|x8 K`   8A4|x8  8 KE`   a\| d0d0/ A dd0/ A  d0/ A d0/ A $H  d0/ A Ld0/ A \H  8A4|x8 K`   H  p8A4|x8 K`   H  T8A4|x8 K`   H  88A4|x8 K`   H  8A4|x8 K}`   8MU9?A4|x}$Kx8 K`   8MU|x8 Ky`   8MU|xp8 Ka`   8MU|xX8 KI`   8MU|x8 K1`   8MU|x8 K`   8MU9?ah|x}$Kx8 K`   8MU|x8 K`   8MU|xp8 K`   8MU|x8 K`   8MU|x 8 K`   b8 H bu`   b8 H ba`   H  b8 H bI`   b 8 H b5`   8MU|x(8 K1`   H  b 8 H b`    | 9?A4|x}$Kx8 K6`   8A4|xKA (|`x|	8A4b|x}%KxH a`   8MU|x(8 K`   8MU|xKmA (|`x|	8MUb0|x}%KxH am`    / @ b88 H aM`   H  b88 H a5`   8  |x!   |N         a    modconf_tab_status   | < ` H|!j|?x8   8OD|x8  8 Ku`   8MD|x8  8 K]`   8ED|x8  8 KE`   8AD|x8  8 K-`   8QD|x8  8 !K`   9? =) 8	|x8  8 K`   9? =) 8	|x8  8 !K`   9? =) 8	:|x8  8 !K`   9? =) 8	[|x8  8 AK`   8mf|x8  8  K}`   9? =) 8	|x8  8  K]`   9? =) 8	|x8  8 K=`   9? =) 8	|x8  8 K`   8ADb@|x8 KY`   8EDbH|x8 KY`   8ED|xP8 K!A (|`x/  @ 8   8    8 |x8  8@K`   8 b`h|x8 Kh1`   8 |xKq`   |`x/  A ? 8	 
 8ED|x8  8 KE`   9? 8	 b`p|x8 Kg`   9? 8	 |xK`   |`x/  @ P9? 9i 9? =) 8	}c[x|xKA (|`x ? 8   @  ? 8	  H  ? 8	   /  @8 -08  -88 -<9? 8	 b`x|x8 Kg`   9? 8	,b`|x8 Kf`   9? 8	0b`|x8 Kf`   9? 8	( b`|x8 Kf`   |`x/  @ $9? 8	( b`|x8 Kf`   9? 8	 b`|x8 Kfi`   9? 8	 b`|x8 KfI`   9? 8	 b`|x8 Kf)`   9? 8	4b`|x8 Kf	`   9? 8	 b`|x8 Ke`   9? 8	  b`|x8 Ke`   9? 8	$ b`|x8 Ke`   8ED|x8  8 K`   8EDb`|x8 Keu`   8ED|xK`   |`x/  @ 8ED|xKyA (|`x-08ED|x8  8 K}`   8EDb`|x8 Ke`   8ED|xKM`   |`x/  @ 8ED|xKA (|`x-88ED|x8  8 K`   8EDb`|x8 Kd`   8ED|xK`   |`x/  @ 8ED|xKA (|`x-<8 |x8  8  H gY`   |`x/  @ ? 8	  8AD|xKA (|`x|	8ADbX|x}%KxH Z`    /  @p / @p9AD9? =) 8	}c[x|xKYA (|`x  /  A H" x	  | |xKA (|ix8OD|x8 `}&KxKA (8    H  P=? 	xx   |	xU)&8   `    A ,8OD9?AD|x8 h}&KxKA (8     / @bKA (|ix9)8$})	 x  / /@ ,8ID9?AD|x8 p}'KxKIA (H  (8ID9?AD|x8 x}'KxK!A (9? =) 8	|xKA (|}x8ID|xKA (|`x}=8	 +?A H9? =) 8	9?ID|x}$Kx8  K`   9? =) 8	|x8  K`   9"$	x   /  A bKm`   9"$	x   /  A 8ID|xKI`   8ID|x0H yA (|`x 8     /  @8    " x	  | |xKA (|ix8ED|x8 }&KxKA (H 8af|x8  Ka`   |`x|	x8   A9? =) 8	|xKA (|}x8af|xKA (|`x}=8	 +?A \9?af	  x  /  A H9? =) 8	9?af|x}$Kx8  Kq`   9? =) 8	|x8  KQ`   8af9?ef|x8 :8 }&Kx8 KQ`   8af|x8 KI`   |`x|	x8	 |	8af9if|x}$Kx< `}f[x8 K`   8ef|xK`   8if|xKֽ`   8ef|xK5`   8if|xK%`   8ef|xK֍`   8if|xK}`   8ef|xK`   |`x/  @ ,9? =) 8	9?if|x}$Kx8 K	`   H  8ef|xK`   |`x/  @ ,9? =) 8	9?if|x}$Kx8 !K`   H  8ef|xKm`   |`x/  @ ,9? =) 8	:9?if|x}$Kx8 !Ky`   H  H8ef|xK%`   |`x/  @ (9? =) 8	[9?if|x}$Kx8 AK1`   ? 	 4| 4x  x   T /  A09? =) 8	|xK`   |`x/  @ L9? =) 8	|xK۵`   |`x/  @ (9? =) 8	:|xKۑ`   |`x/  A $8    8OD|x8 K`    / @4bKiA (|ix9)8$})	 x  / /@ 08ID9?AD|x8 }'KxK%A (H  ,8ID9?AD|x8 }'KxKA (9? =) 8	|xKA (|}x8ID|xKA (|`x}=8	 +?A h9? =) 8	|x8  K`   9? =) 8	9?ID|x}$Kx8  K`   9? =) 8	|x8  K`   9"$	x   /  A bK%`   9"$	x   /  A 8ID|xK`   8ID|x0H |1A (|`x 8     /  @D8    " x	  | |xKA (|ix8OD|x8 }&KxKA (H  8af|x8  K`   |`x|	x8   A 8af|xK5`   8af|xK`   |`x/  @ 8   9? =) 8	|xKA (|}x8af|xK	A (|`x}=8	 +?A \9?af	  x  /  A H9? =) 8	9?af|x}$Kx8  K`   9? =) 8	|x8  K`   ? 	 4| 4x  x   T /  A /  @ 0 / @ $8    8OD|x8 KI`    / @8    8ED9? =) 9):|x8 }'KxK	A (8ID9? 9ED|x8 }%Kx}f[xH X`   |`x/  @ (8    8OD|x8 K`   H H9? =) 8	|xKA (|}x8ID|xKA (|`x}=8	 +?A h9? =) 8	|x8  K`   9? =) 8	9?ID|x}$Kx8  Ka`   9? =) 8	|x8  KA`   9"$	x   /  A bK`   9"$	x   /  A 8ID|xK`   8 |xK`   9? 8	 |xK։`   |`x/  @ l9ED9? 8	 }c[x|x8 K}`   9?ED9 8    p}#Kx8 }e[x8  8  9   9   9@  H X`   8ED|xH xAA (8ID|x0H xUA (|`x  /  @ (8    8OD|x 8 K`   H |8af|x8  8 K`   8ef|x8  8 K`   8if|x8  8 K`   ? 	 4| 4x  x   T /  @8af|x8  8 H y`   |`x/  A 8af9?ef|x8 :8 }&Kx8 K̉`   8af|xK`   |`x/  @ 8   9? =) 8	|xKA (|}x8af|xKA (|`x}=8	 +?A9?af	  x  /  A9? =) 8	9?af|x}$Kx8  K`   9? =) 8	|x8  K`   K /  @ @8    8OD|xK-`   |`x/  @ 8OD|x8 K)`    / @9? =) 8	[|xK`   |`x/  @9? =) 8	|xKA (|ix8	 +?A $9? =) 8	|x8  K`   8ID|x8  8 K}`   bKA (|ix9)8$})	 x  / /@ 9? =) 8	9? =) 9i:9? =) 9)[|x8  }g[x}(KxK)A (9? =) 8	9? =) 9)[|x8 (}'KxKA (H  |9? =) 8	9? =) 9i:9? =) 9)[|x8 0}g[x}(KxKA (9? =) 8	9? =) 9)[|x8 8}'KxKyA (9? =) 8	|xK]A (|}x9? =) 8	|xKAA (|`x}=8	 +?A p9? =) 8	|x@8  KA`   9? =) 9i9? =) 8	}c[x|x8  K`   9? =) 8	|x8  K`   9? =) 8	|xKީA (|}x9? =) 8	|xKލA (|`x}=8	 +?A p9? =) 8	|xH8  Kߍ`   9? =) 9i9? =) 8	}c[x|x8  Ka`   9? =) 8	|x8  KA`   9? =) 9i9? =) 8	}c[x|xH P9`   |`x/  @ $8    8OD|xP8 K`    / @p9? =) 8	|xKݕA (|}xbK݅A (|`x}=8	 *+?A d9? =) 8	|xX8  Kޅ`   9? =) 8	|x8  Ke`   9? =) 8	|x8  KE`   b`K=A (|`x  /  A p8` 
 H ~A (9? =) 8	 p|xH ~A (9? =) 8	[ |xH ~A ( KiA ( KA (H  D8    " x	  | |xKYA (|ix8OD|x8 }&KxKEA ( / @ 8MD9? =) 9i9? =) 9)|x8 }f[x}'KxKA (8MD|xKA (|`x|	8MDb|x}%KxH G`   9? =) 8	|xK۵A (|ix8	 4+?A 9? =) 8	|x8  Kܹ`   H  8OD|xKU`   |`x/  A 8OD|x8 KQ`   8MD9?OD|x8 }&KxK1A (8MD|xKA (|`x|	8MDb|x}%KxH G`   H  b8 H G`   8    8ID9? |x8 }%KxH N`   |`x/  @  8OD|x8 K`   H 9"$	x   /  A bKi`   9"$	x   /  A 8ID|xKE`   8 |xK`   8ID|x0H oeA (|`x  /  @ 8    H h8QD|x8  8 !K`   8Qe|x8  8K`   8af|x8  8 K`   8ef|x8  8 K`   8if|x8  8 K}`   ? 	 4| 4x  x   T /  @8af|x8  8 H p	`   |`x/  A8af9?ef|x8 :8 }&Kx8 KÁ`   8af|x8 Ky`   |`x|	x8	 |	8af9if|x}$Kx< `}f[x8 K`   8ef|xK`   8if|xK`   8ef|xKe`   8if|xKU`   8ef|xKĽ`   8if|xKĭ`   8ef|x K-`   |`x/  @ ,8QD9?if|x}$Kx8 !KA`   8   KX8ef|xK`   |`x/  @88Qe|xKA (|}x8if|xKA (|`x}=8	 A+A 8Qe|x8K`   8ED|x8  8 K`   8if9?ED|x8 ,8 }&Kx8 K`   8Qe9?ED|x}$Kx8K؝`   8Qe|x8K؅`   8ED|x8  8 K!`   8if9?ED|x8 ,8 }&Kx8 Km`   8Qe9?ED|x}$Kx8K-`   8Qe|x8K`   8ED|x8  8 K`   8if9?ED|x8 ,8 }&Kx8 K`   8Qe9?ED|x}$Kx8K׽`   8Qe|x8Kץ`   K8Qe|xKA`   |`x/  A b8H B]`   H  8Qe|xK)A (|`x|	8Qeb|x}%KxH B)`   H  `8MD|x8 KA (8MD|xKA (|`x|	8MDb|x}%KxH A`   b8H A`   9? =) 8	|xKu`   |`x/  A b8 H A`   H  \8mf9? =) 9)|x8   }&KxKIA (8mf|xK5A (|`x|	8mfb|x}%KxH A5`   8  |x!   |N         a    modconf_tab_apps |a < ` 3|!j|?x8    8Ui|x8  8 Kq`   8 |x8  8@KY`   8EH|x8  8 KA`   8AH|x8  8 K)`   8MH|x8  8 K`   8QH|x8  8 K`   8UH|x8  8 !K`   8IH|x8  8 K`   8Yi|x8  8 K`   8[i|x8  8 K`   8` |x8  8 K`   9? 8	|x8  8 Ke`   9? =) 8	|x8  8 !KE`   9? =) 8	|x8  8 K%`   b|xK A (8 -48  -<8 -@8   AD8[i|x8 K`   8    8    8    8    8    8   8UibH|x8 K9A`   8Ui|xP8 KA (|`x/  @ 8   8Ui|x8  8 KI`   8Uib|x8 K8`   8Ui|x 8 KeA (|`x/  @ 8   H  `8Ui|x(8 K5A (|`x/  @ 8   H  08Ui|x08 KA (|`x/  @ 8   KP`    /  A 8 b8|x8 K8-`   8Ui|x8  8 Ka`   8Uib`h|x8 KF`   8 9?Ui|x}$KxK`   |`x/  A ,8   H   8 b`h|x8 KF`   8 |xK`   |`x/  @<bKA (|ix9)8$})	 x  / /A ,8IH9? |x8 @}'KxKԩA (H  (8IH9? |x8 H}'KxKԁA (8]i9?IH|x8 P}&KxKaA (8]i9?_p|x}$KxKYA (|`x  /  A (8[i9?]i|x8 X}&KxKA (H  T8]i|xK `   |`x  /  A 8   H  $8[i9?]i|x8 `}&KxKA ( /  @ 8    8     /  @ <9? 8	 b`p|x8 KE	`   |`x/  @ , /  A  9? 8	 bp|x8 KK`    /  @ <9? 8	 b`x|x8 KD`   |`x/  @ , /  A  9? 8	 bx|x8 KK`    /  @ <9? 8	,b`|x8 KDI`   |`x/  @ , /  A  9? 8	,b|x8 KK-`    /  @ <9? 8	0b`|x8 KC`   |`x/  @ , /  A  9? 8	0b|x8 KJ`    /  A $9? 8	( b|x8 KJ`   H  9? 8	( b`|x8 KCi`   |`x/  @ X9? 8	( b`|x8 KC=`   |`x/  @ , /  A  9? 8	( b|x8 KJ!`    /  @ <9? 8	 b`|x8 KB`   |`x/  @ , /  A  9? 8	 b|x8 KI`    /  @ <9? 8	 b`|x8 KB}`   |`x/  @ , /  A  9? 8	 b|x8 KIa`    /  @ <9? 8	 b`|x8 KB`   |`x/  @  /  A 9? 8	 b|x8 KI`   H  09? 8	 |xK=A (|ix9)8 } J8   	49? 8	 |xK`   |`x/  @ 89? 8	 |xKA (|ix9)8 } J	4x  / /A /  @ <9? 8	4b`|x8 KA9`   |`x/  @  /  A 9? 8	4b|x8 KH`   H  09? 8	4|xKYA (|ix9)8 } J8   	49? 8	4|xK`   |`x/  @ 89? 8	4|xKA (|ix9)8 } J	4x  / /A /  @ <9? 8	 b`|x8 K@U`   |`x/  @ , /  A  9? 8	 b|x8 KG9`    /  @ <9? 8	  b`|x8 K?`   |`x/  @ , /  A  9? 8	  b|x8 KF`    /  @ <9? 8	$ b`|x8 K?`   |`x/  @ , /  A  9? 8	$ b|x8 KFy`   8Ui|x8  8 K`    /  @ 88Uib`|x8 K?!`   |`x/  @ ( /  A 8Uib|x8 KF	`   8Ui|xK1`   |`x/  @ 8Ui|xKA (|`x-48Ui|x8  8 K`    /  @ 88Uib`|x8 K>}`   |`x/  @ ( /  A 8Uib|x8 KEe`   8Ui|xK`   |`x/  @ 8Ui|xKQA (|`x-<8Ui|x8  8 KU`    /  @ 88Uib`|x8 K=`   |`x/  @ ( /  A 8Uib|x8 KD`   8Ui|xK`   |`x/  @ 8Ui|xKʭA (|`x-@8Ui|x8  8 K`    /  @ 88Uib`h|x8 K=5`   |`x/  @ ( /  A 8Uibh|x8 KD`   8Ui|xKE`   |`x/  @ 8Ui|xK	A (|`xAD8 |xK`   |`x/  @ |8MHbp|x8 KC`   8QHbx|x8 KC`   8EHb|x8 KC`   8AHb|x8 KCm`   8UHb|x8 !KCU`    /  A /  AbKƅA (|ix9)8$})	 x  / /@ $8]i|x8 KMA (H   8]i|x8 K-A (8_pb|xK)A (|`x  /  @@8]i|xK)A (|`x  /  Ab8 8  KIA (b8 8  K1A (8  |xH gA (9? 8	  |xH gqA (9? 8	( |xKE`   |`x/  @  9? 8	(  |xH g5A (9? 8	 |xK	`   |`x/  @  9? 8	  |xH fA (9? 8	 |xK`   |`x/  @  9? 8	  |xH fA (9? 8	 |xK`   |`x/  @  9? 8	  |xH fA (9? 8	 |xKU`   |`x/  @  9? 8	  |xH fEA (9? 8	 |xK`   |`x/  @  9? 8	  |xH f	A (9? 8	4|xK`   |`x/  @  9? 8	4 |xH eA (9? 8	  |xK`   |`x/  @  9? 8	    |xH eA (9? 8	$ |xKe`   |`x/  @  9? 8	$  |xH eUA (-4| /A  -4|  |xH e)A (-@| /A  -@|  |xH dA (-<| / A  -<|   |xH dA (AD| /  A  AD|  (|xH dA (9? 8	,|xKy`   |`x/  @  9? 8	, 0|xH diA (9? 8	0|xK=`   |`x/  @  9? 8	0 8|xH d-A (b@8 8  KѡA ( KEA (H  8    " x	  | |xKA (|ix8[i|x8 H}&KxKA (H  D8    " x	  | |xKA (|ix8[i|x8 P}&KxKŉA (b8 H -`   b8 H -}`   8IHbX|x`8  H A`   8IHbh|xp8  H A`   bx8 H -1`   H  /  A`9? 8	 b|x8 K'`   9? 8	 |x8 +8  K`   8Uib|x8 K'M`   |`x/  A $9? 8	( 9?Ui|x}$Kx8 K~`   8Uib|x8 K'	`   |`x/  A $9? 8	 9?Ui|x}$Kx8 K~E`   8Uib|x8 K&`   |`x/  A $9? 8	 9?Ui|x}$Kx8 K~`   8Uib|x8 K&`   |`x/  A 9? 8	 9?Ui|x}$Kx8 K}`   9? 8	 |x8 +8  Km`   H  09? 8	 |xKA (|ix9)8 } J8   	49? 8	 |xK=`   |`x/  @ 89? 8	 |xK9A (|ix9)8 } J	4x  / /A8Uib|x8 K%`   |`x/  A 9? 8	49?Ui|x}$Kx8 K|`   9? 8	4|x8 +8  K`   H  09? 8	4|xKA (|ix9)8 } J8   	49? 8	4|xKY`   |`x/  @ 89? 8	4|xKUA (|ix9)8 } J	4x  / /A8Uib|x8 K$`   |`x/  A $9? 8	 9?Ui|x}$Kx8 K{`   8Uib|x8 K$u`   |`x/  A $9? 8	  9?Ui|x}$Kx8 K{`   8Uib|x8 K$1`   |`x/  A $9? 8	$ 9?Ui|x}$Kx8 K{m`   8Uib|x8 K#`   |`x/  A $9? 8	09?Ui|x}$Kx8 K{)`   8Uib|x8 K#`   |`x/  A 88Ui|xK`   |`x/  @ 8Ui|xKA (|`x-48Uib|x8 K#Q`   |`x/  A 88Ui|xK}`   |`x/  @ 8Ui|xKAA (|`x-<8Uib|x8 K"`   |`x/  A 88Ui|xK%`   |`x/  @ 8Ui|xKA (|`x-@8 9?[i|x}$Kx8 H 4`   |`x  /  A D-<| /  @ -<| /@ $8    8[i|x8 Ky`    /  A D-@| / @ -@| /  @ $8    8[i|x8 Kye`    /  AbKIA (|ix9)8$})	 x  / /@ $8]i|x8 KA (H   8]i|x8 KA (8_pb|xKA (|`x  /  @@8]i|xKA (|`x  /  Ab8 8  KA (b8 8  KA (8  |xH \QA (9? 8	  |xH \5A (9? 8	( |xK	`   |`x/  @  9? 8	(  |xH [A (9? 8	 |xK`   |`x/  @  9? 8	  |xH [A (9? 8	 |xK`   |`x/  @  9? 8	  |xH [A (9? 8	 |xKU`   |`x/  @  9? 8	  |xH [EA (9? 8	 |xK`   |`x/  @  9? 8	  |xH [	A (9? 8	 |xK`   |`x/  @  9? 8	  |xH ZA (9? 8	4|xK`   |`x/  @  9? 8	4 |xH ZA (9? 8	  |xKe`   |`x/  @  9? 8	    |xH ZUA (9? 8	$ |xK)`   |`x/  @  9? 8	$  |xH ZA (-4| /A  -4|  |xH YA (-@| /A  -@|  |xH YA (-<| / A  -<|   |xH YA (AD| /  A  AD|  (|xH YiA (9? 8	,|xK=`   |`x/  @  9? 8	, 0|xH Y-A (9? 8	0|xK`   |`x/  @  9? 8	0 8|xH XA (b@8 8  KeA ( K	A (H  l8    " x	  | |xKA (|ix8[i|x8 H}&KxKA (H  (8    8[i|x8 PKiA (8IHbX|x`8  H 6`   8IHbh|xp8  H 6`    /  A 0b8H "-`   bx 8H "`   H  <8Yi9?[i|x8 }&KxKA (8Yib|x8H !`   b8 H !`   H 	 /  A8IHb|x8 K`   8IH|x8 +8  K9`   H  ,8IH|xKUA (|ix9)8 } J8   	H8IH|xK`   |`x/  @ 48IH|xKA (|ix9)8 } J	Hx  / /A8Uib|x8 Ku`   |`x/  A 9? 8	49?Ui|x}$Kx8 Kr`   9? 8	4|x8 +8  Ka`   H  09? 8	4|xKyA (|ix9)8 } J8   	49? 8	4|xK1`   |`x/  @ 89? 8	4|xK-A (|ix9)8 } J	4x  / /A8EHb|x8 K`   8AHb|x8 Ky`   8QHbx|x8 Ka`   8UHb|x8  KI`   8 9?[i|x}$Kx8 H ,%`   |`x  /  A \8Uib|x8 K0`   |`x/  A 88 9?Ui9IH9_[i|x}$Kx}e[x}FSx8 H 0`   |`x  /  AbK`   8UH|x 8 Kr)A (|`x/  @ 8   MH8 |xKx)`   8   H 9? =) 8	|x8  8Kp`   9?Ui | }#Kx8 (|xKA (9Ui9? =) 8	}c[x|x8K/	`   |`x/  A9? =) 9)9 9_IH9EH;AH;MH;QH8    p}#Kx8}e[x}FSx}CxxxjxH 3i`   9? =) 9)9 9_IH9EH;AH;MH;QH8    p}#Kx8}e[x}FSx}CxxxjxH '!`   9? =) 8	|xKA (|}x9? 8	|xKyA (|`x}=8	 +?A d9? 8	|x8 K}`   9? 9i9? =) 8	}c[x|x8 KU`   9? 8	|x8 K9`   9"$	x   /  A 9? =) 8	|xK`   9? 8	 |xK`   |`x/  @ l9Ui9? 8	 }c[x|x8 Kn`   9?Ui9 8    p}#Kx8 }e[x8  8  9   9   9@  H %`   8Ui|xH EaA (9? =) 8	|x0H EmA (|`x  /  A8H 9? =) 8	|x8  8 Km`   9? =) 8	|x8  8 H F`   |`x/  A9? =) 8	|xKA (|}x9? 8	|xKA (|`x}=8	 +?A |9? =) 9)Ĉ	  x  /  A `9? =) 8	|xKI`   9? 9i9? =) 8	}c[x|x8 Ka`   9? 8	|x8 KE`   ? 	 4| 4x  x   T /  AH  $8    8[i|x08 Kl`   ? 8	   / 	@ /  A T9 9? =) 8	}c[x|x8 !H U`   |`x  /  @ 8[i|x88 Kl]`    /  A `8Yi9? =) 9)|x8 @}&KxK)A (8Yi|xKA (|`x|	8Yib|x}%KxH `   H  T8Yi9?[i|x8 }&KxKA (8Yi|xKA (|`x|	8Yib|x}%KxH `   9? 8	|xKq`   |`x/  A b8 H `   H  X8` 9? 9)|x8  }&KxKIA (8` |xK5A (|`x|	8` b|x}%KxH 5`   8IHbX|x`8  H -a`   8IHbh|xp8  H -E`   bx 8H `   H  b8 H `   b8 H `   8 |xKq`   |`x/  A 0bX8 H `   bh8 H y`   H  <8IHbX|x`8  H ,`   8IHbh|xp8  H ,`   bx8 H )`   9? 8	 |xKA (|`x|9? 8	 bH|x}e[xH `   9? 8	 |xKA (|`x|9? 8	 bP|x}e[xH `   9? 8	4|xKA (|`x|9? 8	4bX|x}e[xH `   9? 8	 |xKMA (|`x|9? 8	 b`|x}e[xH I`   9? 8	 |xKA (|`x|9? 8	 bh|x}e[xH `   9? 8	( |xKA (|`x|9? 8	( bp|x}e[xH `   9? 8	 |xKA (|`x|9? 8	 bx|x}e[xH `   9? 8	  |xKmA (|`x|9? 8	  b|x}e[xH i`   9? 8	$ |xK5A (|`x|9? 8	$ b|x}e[xH 1`   9? 8	0|xKA (|`x|9? 8	0b|x}e[xH `   -4|	8Ui|x8 }&KxKA (8Ui|xKA (|`x|	8Uib|x}%KxH `   -@|	8Ui|x8 }&KxKeA (8Ui|xKQA (|`x|	8Uib|x}%KxH Q`   -<|	8Ui|x8 }&KxKA (8Ui|xKA (|`x|	8Uib|x}%KxH `   8EH|xKA (|`x|	8EHb|x}%KxH `   8AH|xKA (|`x|	8AHb|x}%KxH `   8MH|xKmA (|`x|	8MHb|x}%KxH m`   8QH|xK=A (|`x|	8QHb|x}%KxH =`   8IH|xKA (|`x|	8IHb|x}%KxH `   8UH|x K`   |`x/  @ 0b8 H `   b8 H `   H  ,b8 H `   b8 H `   9 9? =) 8	}c[x|x8 K"9`   9? =) 8	b|x8H U`   8  |x!   |aN         a   - modconf_tab_database | !|?x8    |8 |x8  8 Kd`   8 |x8  8 Kd`   8 |x8  8 Kdi`   8|x8 Kdm`   8 b|x8 K`   8 b |x8 K`   8 |xK`   |`x/  @8 |xK`   |`x/  @t8 9? |x}$KxK`   |`x/  @bKA (|ix9)8$})	 x  / /@ $8|x8 KA (H   8|x8 KyA (89?|x}$KxKqA (|`x x x/  @ 8|xKqA (|`x p p/  A |b8 8  pKA (b8 8 	 pKyA (b 8 8  pKaA (8  p(|xH FA ( pKA (8   |H  " x	  | |xKЉA (|kx89?|x8 0}&Kx}g[xKmA (H  `" x	  | |xKEA (|kx89?|x8 0}&Kx}g[xK)A (H  8|x88 Kb`    |/ @ b@8H 	`   H  l8 9?|x8 }&KxKA (8 |xKA (|`x|	8 b|x}%KxH `   H  b8 H `   8  |x!   |N         a    modconf_tab_security | !|?x8E|x8  8 K``   8 p|x8  8@K``   8A|x8  8 K``   8A|xH8 K``   b`h8 p|x8 K=`   8 p|xK}`   |`x/  @ bKA (|ix9)8$})	 x  / /A ,8E|x8 @8 p|xKAA (H  (8E|x8 H8 p|xKA (8E9?AbP|xX}&KxH "]`   H  8AbP|x8H `   8  |x!   |N         a   | modconf_tab_docs | !|?x8|x8  8  K_U`   8|x8  8 K_=`   8 |x8  8 K_%`   8|x8  8 K_`   b|xKA (8` 0KA (|`x x8   8    8    8    8b`|x8  K]`   8bh|x8 KE`   8 bp|x8  K-`   8|xP8 KA (|`x/  @8|xK!`   |`x/  A8|x xK`   |`x  /  @ x/  A? x	 | /  @bKA (|ix9)8$})	 x  / /@ $8,|x8 xKA (H   8,|x8 KA (80b|xKA (|`x  /  @ 8,|xKA (|`x p p/  A \b8 8  pKA (b8 8  pKA (8 p|xH AA ( pK1A (H  8    " x	  | |xKA (|ix8,|x8 H}&KxKA (H  8    " x	  | |xKʉA (|ix8,|x8 P}&KxKuA (H  L8     | 9? |x}$Kx8 @Kq`   8,9? |x8 }&KxK)A ( / @ @8b|x8 $K\`   bp8 K[`   9"9P8 3	(H  T8,9?,|x8 }&KxKA (8,|xKA (|`x|	8,b|x}%KxH 	`   8 |xP8 KA (|`x/  @ P8,|x8 KUA (8,|xKAA (|`x|	8,b|x}%KxH 	A`   H  b8 H 	)`   8 9? 9 9_ 9 |x}$Kx}e[x}FSx}CxKq`   |`x  /  A H | 9? |x}$Kx8 @K`   89? |x8 }&KxKA (H  | /  @  8|x8 K]A (H 8 |x8  8 @KZ%`   8|x8 KY`   8|x8 KA`   8|x8 K)`   8 |x8 @KA (89? |x}$Kx8 K`   8|x8 K`   8|x8 K`   8 |x8  8 @KY]`   8|x8 K`   8|x8 Ky`   8|x8 Ka`    |	8 |x8 @}&KxKA (89? |x}$Kx8 K!`   8|x8 K	`   8|x8 K`   8 |x8  8 @KX`   8|x8 K`   8|x8 K`   8|x8 K`    |	8 |x8 @}&KxK=A (89? |x}$Kx8 KQ`   8|x8 K9`   8|x8 K!`   8 |x8  8 @KW`    | / A d/ A  / A / A $H  / A L/ A \H  8 |x8 @KWe`   H  p8 |x8 @KWI`   H  T8 |x8 @KW-`   H  88 |x8 @KW`   H  8 |x8 @KV`   8|x8 K`   8|x8 K`   8|x8 K`   89? |x}$Kx8 K`   8|x8 K`   8|x8 K`   8|x8 Ky`   8|x 8 Ka`   8|x8 KI`   89? |x}$Kx8 K-`   8|x8 K`   8|x8 K`   8|xKA (|`x|	8b|x}%KxH `   8|xKA (|`x|	8b0|x}%KxH `   bK]A (|`x| b|xH a`    xKA (8  |x!   |N         a   
 modconf_tab_activate | !a|?x    pH  D? p8	  |xKA (|`x/  @ ? p) X? H  $? p	 ` p p/  @8     |x!   |N         a        get_template | !Q|?x    H  4? 8	  |xKUA (|`x/  A ? 	 `  /  @ /  A? 	 P 9"a`	   xH  (? x	 H|	 | J ? x	 P x x/  @ԁ? 8	 | |xK|=A (|`x p p/  @ 8    H ? 8	 |  p8  |xKS	`   ? i X? 8	 |  p}d[x|xKR`   9"a`	   xH  h? x	 @/  A L x|xK`   |`x/  @ 0 x? x) @ |  p}d[x}%Kx|xK`   ? x	 P x x/  @ pKmA (|`x" p8 |x}&KxKA ( pKA (8   H  8     |x!   |N         a      $ print_template   | !q|?x  |+x 8` XKzA (|`x x x8  8 XKQ`   9"a`	  /  @ H8` XKz]A (|`x9"a`	  9"a`	  |x8  8 XKQA`   9"a`	   pH  09"a`	   pH  ? p	 P p? p	 P/  @? p x	 P p|x 8 @KP`    H &EA (|`x? p	 @? 8   @  KA (|`x ? p А	 H? x8   	 P8  |x!   |N         a      ` add_swaptag  | !q|?xbKA (b KA (b(KA (9"a`	   p p/  A  p? pI @? p	 H| b0}d[x}ESx|xKqA (H  \? p	 P p p|xK`   |`x/  @ 4 p? pI @? p	 H| b0}d[x}ESx|xKA (? p	 P/  @b8KA (!   |N         a    dump_swaptags| !Q|?x|+xb@K`   /  A ,/  @  | 8  |xKN`   8|x8 H `   |`x/  @ 8   H KU`   ?8	 |xKe`   |`x/  @ h?9) 8 |x}$Kx8 KNY`   9? 8    p}#Kx8 8  8  9   9   9@  H `   8 |xH %!A (8|xK`   8|x0H %%A (|`x  /  @ 8   H 8|x8  8 KM`   8|x8  8 KM`   8|x8  8 KMm`   ? 	 4| 4x  x   T /  @d8|x8  8 H %`   |`x/  A<89?|x8 :8 }&Kx8 Kyq`   8|x8 Ki`   |`x|	x8	 |	89|x}$Kx< `}f[x8 K~`   8|xKz`   8|xKz`   8|xK}U`   8|xK}E`   8|xKz`   8|xKz`   8|x K`   |`x/  @/  A 0/  @ $|	8|x}%KxKL`   8  H  8   |x!   |N         a      X check_app_installer  | !Q|?x   HKA (|`x  /  @ 8    H  PKA (|`x x x/  @ 8    H   H /QA (|`x p? 	 4| 4x  x   T /  A 8    H  ? 	 4| 4x  x   T /  @  px  |x xH .A (? x	 4| 4x  x   T /  A 8    H  D? 	 4| 4x  x   T /  A@ KA ( xKA (8    |x!   |N         a      | 	copy_file| !a|?x |#x    /  A  /  @  /  @ 8    H  ? 8	 |xK~`   |`x/  A 8    H   |  8  |xKIa`   ? 9)  |  }$Kx|xKIY`    |	  p }$Kx 8  8  9   9   9@  H `    |	  p }$Kx 8  8  9   9   9@  H  ]`   |`x  |x!   |N         a      X prepare_database_command | !a|?x |#x    ? _  |	v} x|	 P|  x  p /  A  /  A 8    H `? 9)  |  H}%Kx|xKU`   ? 9)  |  P}%Kx|xK-`   ? 9)4 |  X}%Kx|xK`   ? 9)  |  `}%Kx|xK`   ? 9)(  |  p}%Kx|xK`   ? 9)  |  h}%Kx|xK`   ? 9)  |  x}%Kx|xKe`   ? 9)   |  }%Kx|xK=`   ? 9)$  |  }%Kx|xK`    p/  A Ā |   |xK~`    |   |xK~`    |   |xK~`    |  |xK~`    |   |xK~i`    |  ` |xK~I`    |  h|xK~)`   8    |x!   |N         a       swap_database_tags   | !a|?x?8	,|xKz%`   |`x/  @?8	,|x8 ,Ky`   |`x|	x8	  p8   tH ?9), t| 9 x}#Kx8 ,|x}f[x8 Kq)`   8 x|xKr`   8 x|xp8 KmA (|`x/  @ (?8	 |xKym`   |`x/  @H |8 x|x8 	KmA (|`x/  @ (?8	( |xKy%`   |`x/  @TH 48 x|x8 
KmEA (|`x/  @ (?8	 |xKx`   |`x/  @H 8 x|x8 
KlA (|`x/  @ (?8	 |xKx`   |`x/  @H 8 x|x8 KlA (|`x/  @ (?8	 |xKxM`   |`x/  @|H \8 x|x8 
KlmA (|`x/  @ (?8	4|xKx`   |`x/  @4H 8 x|x8 Kl%A (|`x/  @ (?8	 |xKw`   |`x/  @ H  8 x|x8 	KkA (|`x/  @ (?8	  |xKwu`   |`x/  @ H  8 x|x8 
KkA (|`x/  @ (?8	$ |xKw-`   |`x/  @ \H  <8 x|x8 	KkMA (|`x/  @ ?Ѐ	,| /  @  ? t8	  t t? pH @ t? pH @ 8  H  H/  A 4/  A (?8 xp|x}'KxKA (8   |x!   |N         a       check_platform_required_params   | !|?x8    8 ,Kt`   |`x|	x8	  8   H   | 9? 8 ,|x}&Kx8 Km`   8 |xKn`   9? 8    p}#Kx8 8  9   9   9@  K8 |xKuA`   |`x/  @ 08 9?|x}$KxKMA (|`x  /  @  ? 8	   ? H @8 ? H @ 8  @H  P/  A </  A 0" x	  |	8 x|x}'KxKA (8   @@|x!   |N         a       check_platform_required_files| !|?x/  A /  @ 8   @H ,8 |x8 KA (8 9?|x}$KxKA (|`x/  @ 8 x x/  A 8 |xHKA (|`x  /  A ? x8	  x xKgUA (|`x  /  A l 8  x KA (|`x p? p x @@ 0? p })8   	   KMA ( @H  $ KA ( K)A (8   @@|x!   |N         a       read_platform_file   | !q|?x    8    x  K|`x p p/  A (  p8Ka|`x x pKA ( x/  @ @ Kq`   |`x/  A  8 KH    8K xx   |x!   |N         a        add_platform_swaptag | !a|?x?	 _	8 {KpA`   |`x 8    H 8   p8 {8 KsI`   |`x 8 }8 Ks-`   |`x | /  AP |? H @@ |	 || 9 }$Kx|x}f[x8 Km`   |`x/  @8 |x8 [8 Kr`   |`x x8 |x8 ]8 Kr`   |`x t x/  @ t? xH @ x| 9 }k? t x| HP|	8	 | }c[xH|xKdAA (|`x/  @ $?8	 |xKo`   |`x pH  x| 9 }k? t x| HP|	8	 | }c[xP|xKcA (|`x/  @ $?8	 |xKoq`   |`x pH  x| 9 }k? t x| HP|	8	 | }c[xX|xKcqA (|`x/  @ $?8	4|xKo	`   |`x pH  x| 9 }k? t x| HP|	8	 | }c[x`|xKc	A (|`x/  @ $?8	 |xKn`   |`x pH H x| 9 }k? t x| HP|	8	 | }c[xp|xKbA (|`x/  @ $?8	( |xKn9`   |`x pH  x| 9 }k? t x| HP|	8	 | }c[xh|xKb9A (|`x/  @ $?8	 |xKm`   |`x pH x x| 9 }k? t x| HP|	8	 | }c[xx|xKaA (|`x/  @ $?8	 |xKmi`   |`x pH  x| 9 }k? t x| HP|	8	 | }c[x|xKaiA (|`x/  @ $?8	  |xKm`   |`x pH  x| 9 }k? t x| HP|	8	 | }c[x|xKaA (|`x/  @ $?8	$ |xKl`   |`x pH @ x| 9 }k? t x| HP|	8	 | }c[x|xK`A (|`x/  @ Kl9`   |`x pH  x| 9 }k? t x| HP|	8	 | }c[x|xK`9A (|`x/  @ Kk`   |`x pH  x| 9 }k? t x| HP|	8	 | }c[x|xK_A (|`x/  @ 	 Kky`   |`x pH   x| 9 }k? t x| HP|	8	 | }c[x|xK_yA (|`x/  @ 	Kk`   |`x pH   x| 9 }k? t x| HP|	8	 | }c[x|xK_A (|`x/  @ Kj`   |`x pH  ` x| 9 }k? t x| HP|	8	 | }c[xh|xK^A (|`x/  @ 	KjY`   |`x p p/  A ,|	8 |x}&KxKm`   H  t? | | HP|	8	|	8 9|x8 }%Kx}f[x8 Kg`   |`x/  @ ,|8 9?|x}%Kx}f[xKm-`   ? 8	   ? H Al!   |N         a       exclude_optional_params  | !|?x|`x    А  | |x    K3A (|`x|x!   |N         a       l select   !|?x |#x  T >/  @ 8   @H   T >+ @  T >+ ~@ 8   @H  l  0H  8? 0	  x	  T >H @ 8   @H  8? 08	  0 0/  A ? 0	  x  /  @8    @ @|x!  N         `        _replace_ischar  | !A|?x   |3x8    8    8    8    |8    p/  A ?8   	   /  @ 8    H  /  A 0 8  H iA (|`x|	v} x|	 P|  x  p8    t  H  d? 	  x   |xK|`x  /  A  ?  |	 ? |8	  |? t8	  t? 8	  ? 	  x  /  @?  || HP ? t |	|	8	  x/  A ? x	   /  A  x?H @ 8    H | |/  @ ,|   |xK1	`   8   H H    H ? 	  x   |xK|`x  /  A ? 	  x  /  @ 8 p/  A 8  + H  9   ?   8   H  0? 	  x  |	x8 |x8  }&KxKvIA ( |	8  |x}%KxK`    | |	x | J H  $? 	  x  ? 	  ? 8	  ? 8	  ? 	  x  /  @? 8   	  8    |x!   |N         a      @ 	urlencode| !A|?x   H A (|`x x x  /  @ 8    H   pH p? p	  x  / %@ T? p9) 	  x  |xH mA (|`x/  A ,? p9) 	  x  |xH EA (|`x/  @ (? p	  x  ? x	  ? x8	  xH ? p9) 	  x  / 0@ ? p9) 	  x  / aA L? p9) 	  x  / dA 4? p9) 	  x  / AA ? p9) 	  x  / D@ (? p	  x  ? x	  ? x8	  xH @? p9) 	  x  + /@ @? p9) 	  x  + 9A (? p9) 	  x  T  6| x   H  <? p9) 	  x  |xKoA (|`xT  6| x	 8	x   ? p9) 	  x  + /@ <? p9) 	  x  + 9A $? p9) 	  x	 8	x   H  4? p9) 	  x  |xKo)A (|`xx	 8	x   ?  |	Zx  ? x	  ? x8	  x? p8	  p? p8	  p? p	  x  /  @? x8   	   /  A ? x | HP? 	     |x!   |N         a      , spc_decode_url   | !a|?x    x8    8    8    p8    H  ? x	  x  / %@ x? x8	  x8 |x x8 K9`   8 9? |x}$Kx8 H 1A (|`x p px  ? И	  ? 8	  ? x8	  xH  0? x	  x  ? И	  ? 8	  ? x8	  x? x	  x  /  @<!   |N         a      $ simple_urldecode A (  L |	N              A (  L |	N              A (  L |	N              A (  L |	N                                      /  T, /  |M  00A HA A , ,   N@  A  ,   N@  A $ ,	  % N@  A    $ ,  ,  /  /   N@  A L N@  A L N@  A L% N@  A L   $ ,  ,  /  /  K B N   B N   B N  % B N        @       strncpy   A (  L |	N              8A (  L |	N              | !|?x|`x    А  | |x    K'A (|`x|x!   |N         a       l select   | !|?xK'A (|`x|x!   |N         a    8 getdtablesize| !|?x      KxA (|`x|x!   |N         a       P poll | !|?x!p|#x!|3x?!x!?!	 , t8 |x8  8  K&`    t| x т|
xx	$8 p})9) xi   tx   x 9  }  6}kxyI$8 p})9) xi  !x x!x/ @ ?!x8	 x!x| !p8  |xK&e`   8 |xKw-A (!|  8    8    |H ? t8	 | 9? 9 |x}$Kx8  8  }g[xK}|`x/  A t| 9? |x}$Kx8 H A (|`x p p/  A  x  / 
@ 0 || |	x!p}) x  	  !p!H l8 |xKvUA ( x  /  A ( || |	x!p}) x  	  H  ? |8	 |8! |xKvA (" x	  | / A H  p8   !H  ! ? |x}$KxKuA (!| !!! ɟ!  f  A H  8   !H  8` KuA (H  T! ? |x}$KxKuA (!| !!! ɟ!  f  A H  8   !H  8? |8	  |H  8   !H   |? xH A!p!!|x!   |N         a      8 	fgetsTime| !|?xPXP/  A ?P	  x  /  @ bXK`   8   H 8 |xH YA (|`x/  @ H" x	  |	8 |x8 dh}&KxKimA (8 |xKM`   8   H @8 |xH A (|`x/  @ p" x	  |	8 |x8 dp}&KxKiA (8 |xK`    | |xKtEA ( | |xKt1A (8   H H A (|`x | |/  @ " x	  |	8 |x8 d}&KxKhA (8 |xKe`    | |xKsA ( | |xKsA ( | |xKsA ( | |xKsA (8   H  |/  @  | |xKsUA ( | |xKsAA (X/  A  XKcA (|`x|  H  8      t8    p p xH  h |
 x| |	xX}i? t x| HP| }CSx}d[x|xH aA (|`x p p/  @ $ x? p| J x x? tH A | |xKrmA ( p/  A  x? tH @ Ā p/  @ H" x	  |9?  x| }#Kx8 d}f[x|xKfA (8 |xK`    x? tH @ D9?  t| x| }#Kx8 d}f[x|xKfeA (8 |xKE`    | |xKqA (8   H $ | |xH MA (|`xH   | |xKqYA ( | |xKqEA ( | /  A  | |x8  H A (|`x/  A p" x	  |	8 |x8 d}&KxKeA (8 |xKm`    | |xKpA ( | |xKpA (8` H A ( | |xKpA ( | / A  | |x8 H eA (|`x/ A p" x	  |	8 |x8 d}&KxKdA (8 |xK`    | |xKpA ( | |xKoA (8` H A ( | |xKoA (bP8  H A (|`x/  @ <" x	  |	8 |x8 d}&KxKd1A (8 |xK`   8` H A (|x!   |N         a       popen2   | !|?x  KnA (|`x|x!   |N         a       @ pclose2  PA (  L |	N              `A (  L |	N              xA (  L |	N              A (  L |	N              A (  L |	N              A (  L |	N              A (  L |	N              A (  L |	N              hA (  L |	N              xA (  L |	N              XA (  L |	N              A (  L |	N              A (  L |	N              A (  L |	N              A (  L |	N                                          T`  0| ,  A TB 0 }@Py=`01kyi}kKx@ & 	}*X8}JX}@XK}JH}JXyA}L tU|`/  T, /  |M  00A HA A , ,   M  B@ $ ,	  & M  B@ D ,
  F M  B@ x  $ D ,  ,  /	  /   M  B@ L M  B@ @& M  B@ 4F M  B@ (  $ D ,  ,  /	  /  K8    N        @      T strncat   XA (  L |	N              A (  L |	N              A (  L |	N              A (  L |	N              HA (  L |	N              A (  L |	N              A (  L |	N              | !q|?x  |+x ? 	  x  T :| |t? 9) 	  x  T >x  | t}`x| tx   p? 9) 	  x  T  6| |t? 9) 	  x  T x  | t}`x| tx   q? 9) 	  x  T 02| |t? 9) 	  x  | t}`x| tx   r8    s |	 8 p|x}%KxKZ`   !   |N         a      , decodeblock  | !a|?x |#x  8    ? 8   	  8    8    |H l || |	x })	  x    / =@ $8 ? })|x }%KxK!H D | 8b|xKA (|`x p p/  A  |
 px	 8x  | HPx 8 p} Ri   xH  ,? x8	 |	8 p} J8   	 ? x8	  x x/ @Ё? 8	 | |	x} p| T :| HP  /  @ L9?  | }#Kx |xK98     x    x    x   ? |8	  | || |	x })	  x  /  @x KWEA (|`x| |x!   |N         a       from64tobits | !a|?x  |+x|3x ? ? Ј	  x  T x  9"|	 x   p? Ј	  x  x   x T  6|? 9) 	  x  x   T 6| &p| }`x| 9"|	 x   q / @ `? 9) 	  x  x   x  T :|? 9) 	  x  x   T 2| 6p| }`x| 9"|	 x   H  8  =   r / @ 0? 9) 	  x  x   x 9"|	 x   H  8  =   s8    t? ؀ |}#Kx8 p|x}e[xKV`   !   |N         a       encodeblock  | !q|?x |#x |3x? Ȑ 8    t8    p? 8   	  H  8    t8    xH   x|
 p| |	x })	  x 8 p} Ri  p| |	x })	  x  /  A  ? t8	  t? p8	  pH   x|	8 p} J8   	 ? x8	  x x/ @d t/  A ,9? | t| | }#Kx }e[x|xK	 p| |	x })	  x  /  @!   |N         a      l to64frombits /  |3x|+x;  A/  AX}j[y|fx}cx}cx|#x@ 0@@8} t/  A   	 @})|6|H6|H6}H6|[xx "x  x` "}Fc}*a}jA})0Py)} x @@ $| *9J @A  @@ 9J| *| Pxk  |c}'a}A|	 Px | [x @@ ,| *8 @A | | |  |8P`   `   y@9`  |xH  *0@@,9`  9   /  }c[x}$KxA $}I }+ +  }DSx|  &T } HP}#KxN  `   `   `   /  @ 8  |c| t/  @H}E0Px  x "9  |cx` "}&a}f!})PPy)} x @@ $| *8 @A  @A`   `   | Pxk  |c}'a}G!|	 Px | [x @@ ,| *8 @A |
 | |  |8P`   `   x}Cx|xK}I t/  @hA  @A9`  9  K`   `   `   }F }% +  }LSx|  &T } HP}+KxK`   `   }D }# ;+  }DSx|  &T } HP}#KxKP`   `   !  @|})|6|6|L6x "|iL6x  }c})xy* "|a|!}`XPyk}@[x @@ (| *9 @A  @@ 9| *`   | Py+  |c}'a}G!|	 Px |	[xH@@ ,})*8H@A H@@ 8})*`   `   y |c6}JHP|xK`   `   `    	 @}$| }J 6}6|6|`6},Sx| 6| 6y "|	Kxy  }+y* "|)|}`XPyk}`Sx @@ ,| b9 @A  @@ 9| b`   `   | Py+  |+}')}G|	 Px | [x @@ ,| b8 @A  @@ | b8`   `   }* Py |x|0 @}1A    9`  |;x@x|` 6@@@l9'9`  K`8| *K       @         __divti3  /  Aa|3x|+x;@  A/  Ap}i[y}cx}cx;a|#x|#x|gx|jx@ @@}	 t/  ;  @Tx "x  y "}*C|	A})9| PPx | [x @@ (| 2 @A  @@ | 2`   `   `   |	 Py  } C}iA})9| Px | Sx @@ | 2 @A  @AD`   |	 P/  |6;     @ @aAaN  )@@ la/  Aa}D }# +  }DSxA|  &T } HP}#Kx!AaN  `   `   `   }+ t/  @XA  @A }(}I9[   Kx`   /  @ 8  |C| t/  @}8Px  x ";  }(#y "|	!})| @Px | [x @@ $| 2 @A  @A`   `   `   |	 Py  } #}i!}	| Px | Sx @@ | 2 @A  @@ | 2| PKp`   `   }F }% +  }LSx|  &T } HP}+KxKt`   `   `   }D }# ;@+  }DSx|  &T } HP}#KxK8`   `   !  @|})|6|6|L6x "|L6x  }K#})xy( "|
!}J}`XPyk} [x @@ (| 2 @A  @@ | 2`   `   `   |
 Py*  } #}i!}	| Px | Sx @@ | 2 @A  @@ | 2} P}6KT`   }= 	 @}6|6|i6|6x "x  |
Kxy "}*C|	A})9| PPx | [x @@K`     @}l|}+`6|j`6} 6|i6}`6|[x|6|`6x "|
Sxx  |;yK "|9}} HPy)} [x @@ (| 28 @A  @@ 8| 2`   | PyK  } ;}(9}H|	 Px | [x @@ | 29 @@ d`   `   }* Px} x} @@| A 0@ A \}@(}hI}@d6}i6}~d6|Kx   K<}C }A}@SxK @@9| 2K| 2K| 2K @A}(KxK       @        \ __modti3  |+y|gx|3x|3x@ @@H| t/  A   	 @})|6|kH6|H6|H6|[xx "x  x "}C},A|l1})8Py)} x @@ $| *9 @A  @@ 9| *| Px  }@C}*A}
1|	 Px | [x @@ ,| *9J @A | | |  }@PP`   `   y9`  }Ix}c[x}$KxN  `   `   *@A<}I t/  @`A  @A$9`  9  }c[x}$KxN  `   `   `   /  @ 8  |3| t/  @|e8Px  x "8 |cx "}'a}G})Py)} x @@ $| *8 @A  @A`   `   |
 Px  } c}(a}H|	 Px | [x @@ ,| *9 @A |
 | |  } @P`   `   x|3x}	x}c[x}$KxN  `   `   9`  9   }c[x}$KxN  `   `   `    	 @}=| }J6}6|6|k6|6}%Sx|i6x "|Kxx  |cxj "|a}}`XPyk}`Sx @@ ,| *8 @A  @@ 8| *`   `   | Pxk  } c}(a|h|	 Px | [x @@ | *9 @@0`   `   |c Px}x|8 @|9A    }	Cx9`  @|6(@@9(9`  K`   `   `   !  @|})|6|6|L6x "|L6x  |c}#xxj "|a}}`XPyk}@[x @@ (| *8 @A  @@ 8| *`   | Pxk  } c}(a}H|	 Px |[x@@ ,|c*9@A @@ 9|c*`   `   x|6|jP}xK, @@| *9K8| *KP       @         	__udivti3 |+y|3xa|3x|#x|#x|gx|jx@ @@(| t/  8`  @x "x  { "}*C|	A})9| PPx | [x @@ | * @A  @@ | *|	 P{  } C}iA})9| Px | Sx @@ | * @A  @A`   |	 P|6;  xxaN  `   +@|#x|~xA}i t/  @A  @A `}K9x}^SxxxaN  `   `   /  @ 8  |3| t/  @ }8Px  x "8`  }(3{ "|	1})!| @Px | [x @@ $| * @A  @A`   `   `   |	 P{  } 3}i1}	!| Px | Sx @@ | * @A  @@ | *| PK`   `   !  @|})|6|6|L6x "}L6x  }K3})xy( "|
1}J!}`XPyk} [x @@ (| * @A  @@ | *`   `   `   |
 Py*  } 3}i1}	!| Px | Sx @@ | * @A  @@ | *} P6K`   }# 	 @|6|6|6|6x "x  |
Kx{ "}*C|	A})9| PPx | [x @@lKP`    	 @}#|}k6|6}6|6|6|6|[x}6x "|
Sxx  |;yK "|9}} HPy)} [x @@ (| *8 @A  @@ 8| *`   | PyK  } ;}(9}H|	 Px | [x @@ | *9 @@ x`   `   }* Px} x} 0@@| 1A D@ A p}@}hI}@6}i6}~6|KxxxaN  }F }A}@SxK @@9| *K| *K\| *KT @A}(KxK       @         	__umodti3 8`  N         @           __udiv_w_sdiv |+y!|3xAa|;x|#x|3x|#x|jx|lx@@@| t/  A  |!$ @|k 6IL6[ 6| 6},[xx "x  {` "|3}%1}E})`Py)} x @@ (| :8 @A  @@ 8| :`   |
 P{k  } 3}(1}H|	 Px |	[xH@Ax}*HP;@  } x/  Hx|xA \}?$6;     }Cx|3x!AaN  +@@ L/  9   8  A y   }Cx|3x!AaN  `   `   }i t/  @8AL @8   @@/  |x9   A  y }Cx|3x!AaN  `   /  @ 8  |3| t/  @ }GPPx  x ";@ |+{` "}&)}f})PPy)} x @@ $| :8 @A  @A`   `   | P{k  } +}()}H|	 Px |	[xH@@ ,}):9H@A H@@ }):9`   `   x}*HP} xK<|!$ @|`6})}@`6}KL6x "IL6x  |+})xy* "|)}}`XPyk}@[x @@ (| :8 @A  @@ 8| :`   | Py+  } +}()}H|	 Px |	[xH@@ ,}):9H@A H@@ 9}):`   `   x{`6}JHP}xK`   `   `   }):9H@A<H@@4}):9K(`   `   `    	 @},|}k`6}J`6}`6|<6|i<6|[x@<6Z`6xf "|
Sxxd  |3yK "|1}!} HPy)} [x @@ (| 8 @A  @@ 8| `   | PyK  } 3}(1}H!|	 Px | [x @@ | 9 @@ `   `   }* Px}x| @|A T  A /  |#x9   A}E}`I}@d6}i86}~d6|Kx   K|}'}a8  };KxK}[(|8}ESxK @@|9| Kp8| :K4(@A} KxKx       @        @ __udivmodti4  9`  9@  `   `     9+ 8c xx `| X6y+  }Jx@D  N         @          < read_uleb128  9@  9   `   `   c  8
 8c yiyi`})P6x
  }Kx@+ ?A y`A 8 | P6|Cx  N         @          X read_sleb128  `   cN         @           _Unwind_GetCFA`   cN         @           _Unwind_GetIP `   N         @           _Unwind_SetIP `   cN         @           _Unwind_GetLanguageSpecificData   cN         @           _Unwind_GetRegionStart[DS]`   `   cN         @           _Unwind_GetDataRelBase[DS]`   `   cN         @           _Unwind_GetTextRelBase[DS]`   `   | !`   `   # /  A (	  A (|dx8` |	i I N!A (8! p |N         A         T _Unwind_DeleteException   `   `   `   |/ !@ 8|/ A l""}i x	@ ,/ x$|c *@ H8! p   |N  `   }#"	/  Ax$8! p|*`    |N  H 65A (       A          _Unwind_SetGR `   `   |/ !@ 8|/ A d""x$}I }k*x	@ $/ @ @8! pk   |N  `   }#"}c[x	/  A8! p |N  H 5}A (       A          _Unwind_GetGR |/ P |~x|#x!a|+x|3xA T`>+ @ H 5A (`   `   b# x }+})Z})N    8  h  \  P   8  <  0  $   8`   E   8e %  e yJx y)Ey| SxE yk})x }KxyJ% }kCxx E}J[x| Sx}+x/  A  Wv/ A {}kA k  8! |   `   |N  `   `   9% 8! y)$ i  8i ||  `   `   N  e 8e Khe  8e K\|+x8 pKEa pKHe  8e K<e  8e K0|+x8 pKa pK`   `   `   xK       A        read_encoded_value_with_base  `   |/  !A HTcv/  A t@ 0/ @A T/ PA (/ 0A lH 2A (`   `   `   /  @ 8! p8`   |N  `   / @K8! p|#x |K8! p|#x |K8! p|#x |K       A          base_of_encoded_value `   `   `   |8c !q8 pH OE`   8   /  A  8! |x |N         A         @ _Unwind_FindEnclosingFunction `   `   `   cx   N         @           _Unwind_GetIPInfo `   |AaA a! @!8   |~x|#x|3x	 |+x|?x@ %	Hx | J@@@ :  ; p;? x:: :	(:	0:_ `   `   `     ; T	2/ @A 0/ A/ A+ /@ H 0A (`   `   `   <	`x | I|	H`   `   `   @@  ;	Hx | J @A!   Aa|!AaN  `   b#@x d}+})Z})N x  $  X  t      D  D  D  x       $  P  l        @  t      $DDDDDDDDDDDDDDDDDDDDDD  h    `   `   x8   y	& p})	 Kxx$x pK% p	X|~x_ x+}	Cx@ 9(y)&8  }Cx})	 @ 9h}*9y`&}<*K8xxK? p|~x+@ 9)y)&8   })	 KxxK~DxK p|~x+}	Cx@ 9(y)&8  }Cx})	 @ 9h yi&|	*K/  A6	 ~ݳxxx8	(}6KxK`   	 K|	 x8	(xK`   	 xKXx~xK$xK? x8  |~x	@<	(K,x~xK8  |~x	@Kx$xK x|~x	(K8  	8x$x	@K} xKxxKe p|jx+}	Cx@ 9(y)&8  }Cx})	 @ 9hy`&$x}\*K! xKtxxK	~dxKa p	X|~x_ +}	Cx@9(Kx~xK~xK)	(|	X9  |~x<	@| Y	(Kx~xK	(<	X|~x| I	(KxxKy$xKq p	X|~x_ x+}	Cx@ 9(y)&8  }Cx})	 @T9hKLxxK%~dxK} p	X|~x_ +}	Cx@9(KxxK p|jx+}	Cx@ 9(y)&8  }Cx})	 @9hK9  9` }i py	$yk&y
&8  }k9 9) }Cx}** pB@Kx~xKe|~xKxxKQ$xKI p	X|~x x+}	Cx@ 9(y)&8  }
Cx})	 @ 9H|YyI&|  |	*KX	pdxxKx~Fx|dxxKE |~x	HK$  <	`; | I|	HK  <	`; | I|	HK  <	`; | I|	HKxxKe$xK8  9   ; pK       a       l execute_cfa_program  `   `   |!Aa !1|#x|yx8  x8	K`   98   /  A|y8xc|i8cH F`   |xyAXx 98 <	Hk P; 	xK)A ( 	|8g / eAT8	`KM8	XK賂 / A 8	h;@  K-8 |~x	q`     / zA ; : xH  ,/ RA / PA / S@ 8  	s  ; /  A / L@̈  ; 	qK܈  ; ;@  	h8 	q`   `     / z@x8 pK! p8  |~x	r CJK\`     ; 	pKt  $xxK8 ~x|dxxK x|~x	PK@/  A ^xx/  8` A Ѐ  Cx%xx|8 K9	p/ A ,T ~/ A@@/ Ax/ A8H 'yA (8`  <	r8 ;  /  @0	q/ A 0$xxK!x8 p|dxxK p|~x/  A  x%xx|8 K8`  8!  !Aa|N   
/ h@ ' ; c  C y)x ykEy| Kx# yJ}kx }[xy)c 8g 	}JCxx E})Sx| Kx}kx|	xK@/  @Љ<	r8` 8 ;  /  Ax8 pKa p|~xK8` K8` KxK8` K       A	        uw_frame_state_for`   | |}x8p!|#x8  ; ; p;xK`   < @ xxx 0K/  A ,;  8!x |N   / A8  N9^9~  9   |	H  ,`   `   `   A 48     9 9J 9k B@ 8}?B	 / /  
  @|.  `   `   ) + K!X > !H`   @> K0       A       @ __frame_state_for `   `   |a!A ! @|#x|+x @	; ; p; ;A x;! : `     8c 9?U >+ @ H #A (b#Hy }+})Z})N   P              |  P  P  p  \  @  ,        L                                                                                                                8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8  8                                                                    0    ؉C   #  c yJx y)Ey| SxC yk})x }KxyJ# 8c }kCxx E}J[x| Sx})x! p`   `   + ?A${$ p9~ })}~	 (@A/  8| Ax $}!8! i !Aa|N  DxK$xKA ~/@ 8
|
/ A|y@$""}	P| *y`A }*|;x	/  @ / @Pg   | pK8x    pK  9# | |i K/  Ac  88c |{$}k})a 	 (/  A|cZK/ @88|T>9> + {$y)$}k})K (	 (Ab#Px}+})Z})N                     (  4  @  T  l      $xK8|
/@KDxK%A ~/@ 8
|
/ A|y@$""}	P| *y`A }*|;x	/  @ / @g  a pK8|
/@K/ @9>9~9^})}k}Jy)$yk$yJ$})}k}J ( (
 (	 ( ( (K</ @<9>9~})}ky)$yk$})}kI ( (	 (K (K #  8|   ! @}) P8c y)$})	 ( pK/ @{$})	  pK/  A8|K/  A{$})	   pK`~xK  pKLxKK@ 8c  pK0  8c  pK   8c |  pK  8c  pK  8c | t|  pK  8c  pK/  A8/ |{$}) ( pA H+ @ (/ #A / A /  @|8 pK/ A  / @/  @h|  pK\g   '  G ykx y)Ey| [xg yJ})x }Kxyk' }JCxx E}kSx| [x})x! pK  8c / A <+ AL/ @   pKxK	 p! | J pK   pK} P8 pK|
C pK|PP pK|
C| A| PP pKp|Q pKd} Sx pKX|R pKL}@@6 pK@}@D6 pK4}@F4 pK(} Rx pK} Rx|  tx т pKP OB|  &T  pKP |  &T  pKP OB|  &T  pKP |  &T  pK} Rx1 |	 pK/ A t/ @G   '  g yJx y)Ey| SxG yk})x }KxyJ' }kCxx E}J[x| Sx})x! pK,8   K\   pK       A	       
< execute_stack_op  `   `   `   |Aa !!|zx|#x8pDx: ~xK`   A@y@A TY9! /  A D/  A Hx	A 8   ف;	@8    / A P/ AH 5A (! /  @"z / @y@a p9a pA !Yk K{	6/A/ Ay@yi$"8 p}X})I @/ @j  	(#:;~x;  ;  : x; p`   `   `   };	 + A b#Xx }+})Z})N      X         X|*|
/
A}@Sx}8	/  A`@ 8
|
/ A@yI$}P})xi A }8R}j[x	/  @ / @K    / @8  }]*  `   ; ; ; ; /	 @	s/  Axz8 x  }kxz (/  @ 0y`U Az@|/ @$+  	  l	A/ (At8!P !Aa|N  `   |~*~ĳxK9 x~x&x|"K  / @; 8  |}*; /	   ; ; @4K`   `   `     }>*/ @`; |	9  ; /	 |*; ?  ; @K`   |~*~ĳxKܙ x~x&x|"Kx	A 8     ; |}*; ; /	 ; @Kx`   `   `   }>*xA 8     ; |	; ; /	 |*; @LK0`   @ 8
|
@x	A }8Ry@$i}7/  @ yI$})) xA 8     ; }=*; ; /	 ; @K8
| K{	88 xK} x~x8  |"K"|yxKtzyk @zK8|K} Z}CSx	/  @<K,}i[x/  @Kx:A 8   8!P8	 ( `    !A|aN         A       h uw_update_context_1   `   `   `   | |#x|+x!8  8p|xKe`   < @ ; xxx xK|hy@XB"
  /  A p
 / @< px	A 8 px	x 9  8  !		K8!
  |N  8  9  9` 
  
  
 
 
 
 
 
 
 
 
 	
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 !
 "
 #
 $
 %
 &
 '
 (
 )
 *
 +
 ,
 -
 .
 /
 0
 1
 2
 3
 4
 5
 6
 7
 8
 9
 :
 ;
 <
 =
 >
 ?
 @
 A
 B
 Cj Lj Dj Ej Fj Gj Hj Ij Jj K* M* N* O* P* Q* R* S* T* U* V* W* X* Y* Z* [* \* ]* ^* _* `* a* b* c* d* e* l
 q* f* g* h* i* j* k
 m
 n
 o
 pKH A (       A        uw_init_context_1 `   `   | |#x|}x!a`   `   Dy@A9d /  A/  A;  ;  H  P`   /  A l""|H/ @  x`   `   `   ! | x#   ; ; / A d}?|~*|*	/  @ }?	/  @/  A/  A A""|H; ; K]`   / @x	A P9= /  A @/  8`  A l8!  |N  | KH A (= K""	 / @y@ pA |8 p K""I < x@ $/ @i  <| XP|`JKd}+Kx/  @K       A        uw_install_context_1  ||#x|x !qKE]	n/@ 8
|
/ A ""yK$|P}*x	@ </ @ d8! h   `   `   `   |N  `   }*}Cx	/  A8!  |N  H A (       A         uw_update_context |px} &!= AAaځڡa) (!Aaہۡ!A a (0!8A@aHPX `h !qaA  j   H A J (|8a p8K9H  A xK-88a pK|`y8a p`/ A @ DA (!`   `   	  i I |	N!A (`8/  8a p/  A8  `a`8!  !A a|}  (} 0!8} A@aHPX`hH +      "C        _Unwind_Backtrace `   | |}x|#x!; pH  l`   !	/  A H	  A (c 8` x|x|	  i I N!A (/ A P/ @ D/  @ `xxKxxK= /  |Jx t{т{dAt8` 8!
 |N  H }A (       A         _Unwind_RaiseException_Phase2 !|} &!Aaځڡ!Aaہ ۡ !A a(08@HP!XA`ahpx= A(aa) (0aPA  `   j   H A J (|8a p8 K8a8 p8pKM`   H  \`   `   `   @L!/  A 4i  A (}i  i I N!A (/ / A @8a8PK8P8aKP88 a8` / /   @a9@  (0AHa |} !A } a(0} 8@HP!XA`ahpx!Aaʁʡ!Aaˁ ˡ8! |!RN  8  K(!Pa8p8 p
x8ai 	 K`   aP8KI/ a@8a p8KA
x|jx0K      "C        _Unwind_RaiseException|Aa ||x!|#x`    c ;A pH  @   A (xx8` hx|	  ~ ^ N!A (xx/  8 
8` / @ tA t!	/  A 4	    i I |	N!A (/ |x/ A <@ 4xDxK9DxxKݝ8 |y/ @L8 
KH; 8!
 x Aa|N         A       0 _Unwind_ForcedUnwind_Phase2   `   `   `   !q|} & !A a(ځ0ڡ8@HP!XA`ahہpۡxpx!Aa!AaaPX`ha /  @ K9@  AaPX`hp|x} !A} a} !Aa !A a(ʁ0ʡ8@HP!XA`ahˁpˡx8!|!RN  `   `   `   A  < A`  (* i    A J (|8a p8K8p8 p8aK	`   a8K/ A H A (8a p8K
x|jxK      "C        _Unwind_Resume_or_Rethrow `   !q|} & !A a(ځ0ڡ8@HP!XA`ahہpۡxpx!Aa!Aa= AaPa) (X`haA  `   j   H A J (|8a p8Ki8a8 p8pK`   !	 /  @ $}#Kx8K/ A  H mA (`   a8K	K88a pK
x|jxAaPX`hp} x} !} Aa!Aa !A a(ʁ0ʡ8@HP!XA`|ahˁpˡx8!|!RN        "C         _Unwind_Resume`   `   `   !q|} & !A a(ځ0ڡ8@HP!XA`ahہpۡxpx!Aa!Aa= AaPa) (X`haA  j   H A J (|8a p8K8 p8p8aKI`   !8	 }#Kx	 K9@  / A ́AaPX`hp|x} !A} a} !Aa !A a(ʁ0ʡ8@HP!XA`ahˁpˡx8!|!RN  8a p8K
x|jxK       "C        _Unwind_ForcedUnwind  "A (  L |	N              9`  9@  `   `     9+ 8c xx `| X6y+  }Jx@D  N         @          < read_uleb128  9   9@  `   `   c  8
 8c yiyi`})P6x
  }Kx@+ ?A y`A 8 | P6|Cx  N         @          X read_sleb128  `   ,#  M    /  M  d b#9@8     D  y@+    $ (  N         @          H __register_frame_info_bases   `   8  8  Kx       @           __register_frame_info `   `   b#< @ 9@  D  x +  d y@  $ (  N         @          8 !__register_frame_info_table_bases 8  8  K       @           __register_frame_info_table   $  8`  @M  A 8`  N  8`N         @          ( fde_unencoded_compare `   `   `   |T<!Aa 9) !Q|;x}?|xx|#x8 |+x@ |3xH  l`   `   A (xx`     |*  Z z |	N!A (W</  9) })H }?Kx@ }<*  |*>  @ l8 {${$|J @z |*x A (`   `   `     Z |	N!A (/  @L{$xK<8!  !Aa|N         A       X frame_downheap`   |!Aa !A|+x|wx|#x;% E {[B{}  8/  A @^;  |P~x; x8%xx|K}?P9)/  @{]  8| /  @ px	$;  9) J`   `     < |P~x; x8%x8   |`     ?  ;K}>P9)/  A8!  !Aa|N         A	       H frame_heapsort`   |/  !A 8Tcv/  A D@  / 0A L/ PA KA (`   /  @ L8! p8`   |N  `   8! pd  |N  8! pd  |N  `   `   / AKA (       A          base_from_object  `   `   |/ P |~x|#x!a|+x|3xA T`>+ @ K)A (`   `   b#x }+})Z})N    8  h  \  P   8  <  0  $   8`   E   8e %  e yJx y)Ey| SxE yk})x }KxyJ% }kCxx E}J[x| Sx}+x/  A  Wv/ A {}kA k  8! |   `   |N  `   `   9% 8! y)$ i  8i ||  `   `   N  e 8e Khe  8e K\|+x8 pKEa pKHe  8e K<e  8e K0|+x8 pKa pK`   `   `   xK       A        read_encoded_value_with_base  `   |Aa |}x|#x!Qx|+xc  xc^ K8 8 p||x}  xxc^ K}  x8 8 xxc^ Ki! p x8`  @A A (8`  8!  Aa|N  8`K       A         fde_single_encoding_compare   `   `   `   ||x !Q`   `    	/ zA $8! 8`   |N  ; 	; xxK]A (x|c8c K8 KY 9# / A xK|ix}#Kxx; 
K|ex 
; p/ R@ H  L@p} 8 / RA 8/ P/ L@e  8  8 xxc`K|ex} / R@8! e   |N         A       ( get_cie_encoding  |/  !A Tc~/ A d@  / A 8/ A KA (`   /  @8` 8! p |N  `   8! p8`  |N  `   `   `   8! p8`  |N  8`  K       A          size_of_encoded_value `   `   |!aA !1|#x||x|dx|+x  x^ xK  |{x/  A0x;@  ; p: xH  X`   `   `    a p/  `     xA ! x|PH@A `   ?  })	 ; /  A  /  A  x	A 48 | P  A $|x|xKx|~xxc K|{x/  Al{ dx8 xxK8  ~x|ex{ KxK8 + A x`$9  }) 68	a p|	X9@,?  })	 ; /  @@;  8! x !Aa|N         A	        linear_search_fdes|!aA |+x!A||x|#x|dx  x^ xK  |{x/  Ax;@  ; pH  P`    /  A (Y  /  A * y+$9) }kR*  ?  })	 ; /  A  /  A  x	A 48 | P  A $|x|xK	x|~xxc K	|{x/  Al{ dx8 xxKxK9 + A x`$9  }) 69) p}+ 9@0?  })	 ; /  @T`   `   8!  !Aa|N         A        add_fdes  |A! a|#x!1|zx:    /  A ? ;`  ;  ;   {9: p`   `   `    /  A 8 {  P A dxKx} Dx||xxK:  |xxy $x  A y ^ x A  } Kx9  y   `   `   `   x8 ~ƳxxKxKy8 + A x`$9  }) 68	a p|	X9A    : X@@ z  `   `   ?  })	 ; /  @8! ~x !Aa|N  } Kxx{  K<       A
        classify_object_over_fdes `   `   ||}x8` 0 !qKսA (8! |dxx |K       A        < __register_frame_table`   `   ||x !`   `     /  @ 8!  |N  `   8` 0K!A (8! |dxx |K<       A        h __register_frame  |a!A!Aa |xx!|#x`     /  Ax	A(}4Kx/  Az$; xKQA (/  |wxa A\;  x K-A (/  a A    x	AD   /  A  ; xxKi 	/  @ /  ~xA    @T  x	A$;(a /  pxAW 8  8  /  AT9`  B# :  ;7 : }; _x A yi$9) J @ ,H `   }9P8   y)$}) 	  A   xx  A (|	^ ~ N!A (/  A: ~x: };  @t9k *x9   8  }i8  H  4j  x$9 8 })i `   `   
 9J 	 B@ Hy	$})	 /  @j  x$9 8 })i `   `   
 9J 	 B  a   `   `    ; })H @exxxK  u /  A yi$ 9) ~J/  ;+W  A }?Z{$xy)$9k 9) ZJH  8`   `   `     /    `   = ;< ;A @x    xExA (;|	^ ~ N!A (/  Ax}?/  :y)$})I A +xK@5   | J ~xKA (!  	  8 9    y     @A   /  @x	@ x	$y)@8x C /  A T9   H  }j[x@@@ @|
BxByi$})  ?  @A| J @A 9 @@A;  8!x !Aa|!AaN  8 y /  A;@  : x: pH  `   `   x@@x|xB{$})  8 |`PKx} x||xxK8 ~Ƴx|dxxK8  ~x|ex{ K! x@A p|	@A ;^ Kxx	A    /  A:  xKa 	~/  @z  H y   Ax ]@x   Kx	@ x~exKa|xK| x8 K9K K|txKx: ~xKx	$y)@ ;@K8 x^ xcxK |xx/  A{z ;  : x: pH  x@@|x~xcxxB{$}) 8 Ke8  ~Ƴx|exCxKQ! p@A x|	@A; K;XK(   /  @  Kp`   `   `    	/  A\x~exK-|yAKDx~xxKKx  KK%A (       A       l search_object |,#   !@ 8! 8`   |N    /  A"#  /  @ H  @9? ( (/  A 0  @ (x	  8!  |N  "#8  /  A }+KxH  4`   `   `   ? 	   A @ (/  A X9 (|x  /  A  @ (x  K (  `   `    KA (xK\KA (       A       ( __deregister_frame_info_bases `   K       @           __deregister_frame_info   `   `   `   | !`   `     /  A KKEA (8! p |N         A         < __deregister_frame`   `   `   |Aa |zx8d !Q|+x|#x |`PKmx} DxxKm8 8 p|dxxK) 8{ |`PK9x} DxxK98 8 x|dxxK! p x8`  @A A (8`  8!  Aa|N  8`K       A         fde_mixed_encoding_compare`   `   `   |Aa b#8|}x!Q|#x`     /  A ,   @A H (  @@ (/  @#;    /  A  (xx  K;  |~x/  A4  	  X@@  H  `   `   `   	  X@A 9I () (/  @/  ? (  A   `   `   ? : `   `     x	x ^ @ x xxKy8 8 p|dxxK5 p 8! x Aa|N  xxK|~yA   `   `   ? : `   `     x	x ^ Ah 8~ |`PK|`xKP/  jx? (  AK       A        _Unwind_Find_FDE  px!Aaʁʡ!AaˁˡN        @       L fres  N         @        __gnat_default_lock   `   N         @        __gnat_default_unlock `   "#` i  N         @           __gnat_install_locks  `   8`  N         @        __gthread_active_p`   |"#` !`   `   I  
  A (|	j J N!A (8! p8`   |N         A         L __gthread_mutex_lock  `   `   |"#` !`   `   I 
  A (|	j J N!A (8! p8`   |N         A         L __gthread_mutex_unlock9`  9@  `   `     9+ 8c xx `| X6y+  }Jx@D  N         @          < read_uleb128  |/ P |x|#x!a|+x|3xA W>|+x+ @ KA (`   b#hx }+})Z})N    8         8  <  0  $   8`   E   8e %  e yJx y)Ey| SxE yk})x }KxyJ% }kCxx E}J[x| Sx}+x/  A  Wv/ A{}kA k  8! }   |N  `   `   `   9% 8! y)$ i  8i |}  `   `   N  e 8e Khe  8e K\9   9`  `   C  8 8c yIyI`})@6x  }kKx@+ ?A$y@A8 | @6|[xKe  8e K e  8e K8 pKa pK`   xK       A       ( read_encoded_value_with_base  `   |/  !A HTcv/  A @ 0/ @A T/ PA (/ 0A KۡA (`   `   `   /  @ 8! p8`   |N  `   / @K|#xKM`   8! p |N  `   `   |#xK`   8! p |N  |#xKM`   8! p |N         A          base_of_encoded_value `   `   `   |/ A!a !|3x|;x8` A @8!  !Aa|N  `   `   x@ <8! 8`  !Aa|N  8   |;x pK`   |yA/  8`  A CxK`   a `   `   `     ; / ADxxKx8 |dxxKa||x  8| /  AP; xK |   x8c ;! x;a ;  K 8 p||xCx| K`    p! |  4T ~x   P`   H@8  @ xKx&x|dxxK 8  ||xxKxfx|dxxK 8  ||xxKxx|dxxKYxK! x ||x})H@@ (! 8  }<KxH@A`K`   `   `    |	 @A $! K,8   ;  Ka K! /  A A~x8 CxK9`   Cx8  8 K%`   CxxKU`   8` K@       A	        __gcc_personality_v0  | !|?xb#p#xKٵ`   !   |N         a    8 	reg_frame| !|?xb#pK`   !   |N         a    4 dereg_frame  | !q|?x"#	  |	8	 | "#	  "#	  | / @ P# pH  4? p8	 p? p)  	  |	A (I i N!A ( p"#H@A!   |N         a     _GLOBAL__FI_mvappsvr | !q|?x"#	  |	8	| "#	  "#	  | /  @ P# pH  4? pi  ? p8	  p  |	A (K k N!A (#? p @A!   |N         a     _GLOBAL__FD_mvappsvr http_request    unarchive       archive readpkg /dev/null       w       b:l:c:vd?       MV AppServer transaction is initializing.       %smv_appsvr.conf        %s/mv_appsvr.conf               Could not get peer.     Request using module handler "%s" for resource "%s"     Module initialization failed!   Initialization failure in auth_basic!   Module execution failed!        Module execution is complete.   Unsupported handler "%s"        mvappsvr        tcp     /var/log/mv_appsvr      /usr/local/mvappsvr/mv_appsvr.conf      /usr/local/mvappsvr     1       MVAppServer     close   MultiValue AppServer v%s
       1.6.3.8073      %s, (%s@%s)
    Tue Oct 23 23:05:51 America/Los_Angeles 2018    root    AIX61   
       -v/-?			Display Version and Usage Information   -d			Enable debugging code.  [extra logging]    -l <logfile>		Specify the path to the log file. -b <install_path>	Specify the alternate installation path.       ,;     application/json        text/json       */json  Content-type: application/problem+json
       {
"status": %d,
"title": "%s"
}
    application/xml text/xml        */xml   Content-type: application/problem+xml
        <?xml version="1.0" encoding="UTF-8"?>
<problem xmlns="urn:ietf:rfc:7807">
<status>%d</status>
<title>%s</title>
</problem>
       Content-type: text/html
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">       <html xmlns="http://www.w3.org/1999/xhtml">       <head>            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />           <style type="text/css">           body { background-color:#FFFFFF; font-family:Geneva, Arial, Helvetica, sans-serif; font-size:12px;              line-height:1.6; margin:0; padding:0; color:#990000; }          #error_wrapper { width:800px; margin-left:auto; margin-right:auto; margin-top:20px; }           h1 { margin:0; font-weight:normal; }            #error_wrapper  h1 { color:#777779; font-size:34px; padding:10px 15px; background-color:#f7f7f7;        border:1px solid #990000; -moz-border-radius-topleft: 5px; -moz-border-radius-topright: 5px;            -webkit-borderradius-topleft: 5px; -webkit-borderradius-topright: 5px; }        h1 strong { color:#CF6E01; font-weight:bold; }          #error_content { padding:15px; background-color:white; border:1px solid #990000; border-top:none;               -moz-border-radius-bottomleft: 5px; -moz-border-radius-bottomright: 5px; -webkit-borderradius-bottomleft: 5px;          -webkit-borderradius-bottomright: 5px; }        #error_content h1 {font-size:18px; }            h2 { font-size: 12px; margin:0; font-weight:bold; }             button { cursor: hand; display:block; color:#999999; background-color:white; border:1px solid #999999; -moz-border-radius: 5px; -webkit-border-radius: 5px; padding:2px 10px; float:left; }           </style>        <title>An error has occured.</title>          </head>         <body>            <div id="error_wrapper">          <h1 class="main_heading"><strong>Zumasys MultiValue Dashboard</strong></h1>             <div id="error_content">  (no License Key)                <h2>Welcome to the Zumasys MultiValue Dashboard Application Server</h2>         <p> Your installation has succeeded and you are ready to activate and configure your new software.                  To begin the configuration process, click the button below labeled "Next" to go to the administrative                   configuration screen.<br><br>                   <form><button type="button" onClick="self.location='/config';">Next</button></form>             <br><br>            </p>            <h2>%s </h2>
           <p> The system has encountered an unrecoverable error.  Please see the system log file, and the description                 of the error above for more information.  To continue, please select one of the following options:<br><br>              <ol>                      <li><a href="/config">Configure your server</a></li>                    <li><a href="javascript: history.go(0);">Refresh this page</a></li>                     <li><a href="/">Return to your default application</a></li>                     <li>Check that your server has database licenses available for use by the dashboard process.</li>             </ol>             </div>        </div>       </body>        </html>         Gathering information about the remote peer.    Could not getpeername.  getpeernamed.   127.0.0.1       localhost       This program must be executed from inetd/xinetd.        GET     HEAD    POST    PUT     DELETE  OPTIONS Invalid request URI (Null PATH_INFO)    DefaultResource Unsupported Request Method: %s  Error reading the request line from remote peer
        HTTP/1.1        OK      Created Accepted        Non-Authorititative Information No Content      Reset Content   Partial Content Multiple Choices        Moved Permanently       Found   See Other       Not Modified    Use Proxy       Temporary Redirect      Bad Request     Unauthroized    Payment Required        Forbidden       Not Found       Method Not Allowed      Not Acceptable  Proxy Authentication Required   Request Time-out        Conflict        Gone    Length Required Precondition Failed     Request Entity Too Large        Request-URI Too Large   Unsupported Media Type  Request range not satisfiable   Expectation Failed      Internal Server Error   Not Implemented Bad Gateway     Service Unavailable     Gateway Time-out        HTTP Version not supported      Unknown Sending HTTP Response, Status: %i (%s), Protocol: %s    %s %i %s
      
      Accept  User-Agent      Cookie  Connection      Content-Length  Content-Type    Remote-User     Authorization   Referer Host    extraHeaders    Unsupported Request Header:     Content-type: %s
      Status: %i
    Connection: %s
        Server: %s
    Content-Disposition: %s
       Expires: %s
   Pragma: %s
    Cache-Control: %s
     Content-Length: %i
    WWW-Authenticate: Basic realm="AppServer"      Location: %s
  Last-Modified: %s
            Sent Response headers to client.        Entering auth_basic     AuthType        Basic   true    This handler requires authorization.    AuthUsername    AuthPassword    %s:%s   Basic %s        Authorization succeeded.        You are not authorized to make this request.
   post    head    get     shm:u:o:p:v?    URL (-u) is a required parameter.       :       //      /       You must specify a post data input file when selecting the POST method. r       fopen failed, cannot open post data input file. stat failed, cannot open post data input file.  httpClient {      request_method    = '%i';
      header_flag       = '%i';
      stat_flag         = '%i';
      http_port         = '%i';
      url               = '%s';
      output_file       = '%s';
      post_data_path    = '%s';
      http_host         = '%s';
      request_line      = '%s';
      post_len          = '%i';
      sockfd            = '%i';
      post_data_ifp     = 'FILE(%i)';
        post_data_ifp     = '[null]';   output_ofp        = 'FILE(%i)';
        output_ofp        = '[null]';           error_flag        = '%i';
      error_string      = '%s';
      response_status            = '%i';
     response_content_length    = '%i';
     response_age               = '%i';
     response_date              = '%s';
     response_expires           = '%s';
     response_content_type      = '%s';
     response_server_string     = '%s';
     response_transfer_encoding = '%s';
     response_connection        = '%s';
     response_last_modified     = '%s';
   };      MultiValue Dashboard AppServer by Zumasys v%s
  1.6.3.8073      HTTP Client mode        %s, (%s@%s)
    Tue Oct 23 23:05:51 America/Los_Angeles 2018    root    AIX61   
       -v/-?			Display Version and Usage Information   -u <url>		The URL that you wish to connect to.  -m <method>	The http request method, one of POST,GET, or HEAD.  -o <file>		Output file.  By default, the results are shown in stanard out.      -p <file>		The system path to a file containing your url-encoded post data if applicable.       -h				If specified, the http headers from the server will be included in the output.    -s				Display a status bar.  Requires the -o flag.      Cannot determine hostname: "%s" Cannot create socket.   Cannot connect to remote host (incorrect port?).        POST    HEAD    GET      HTTP/1.1
      Host: %s
       Connection: close
      Content-Length: %i
     User-Agent: mvAppServer/%s

    
      chunked Protocol Error, expecting chunk terminator but received %i,%i   wb      Cannot open output file: '%s'
  Date    Expires Content-Type    Server  Transfer-Encoding       Connection      Last-Modified   Status  Content-Length  Age     Read %ik of %ik - %.2f%% complete.      File Size Unknown. Read %i bytes.       %x      %i
     ERROR: %s
      ERROR: Cannot allocate http client.     ERROR: Archive creation is not supported.       extracted       listed  
Archive file was %s with errors

      
Archive file was %s successfully

     ERROR: Cannot allocate archive client   .pkginfo        o:p:i:v?ls      -p is a required flag.  -i is a required flag.  '%s' is not a directory.        Cannot stat: '%s'       r       fopen failed, cannot open archive file. stat failed, cannot open archive file.  tarBall {         extract_flag      = '%i';
      stdout_flag       = '%i';
      list_flag         = '%i';
      input_file        = '%s';
      parent_dir        = '%s';
      only_do_file      = '%s';
      archive_ifp       = 'FILE(%i)';
        archive_ifp       = '[null]';           error_flag        = '%i';
      error_string      = '%s';
    };      MultiValue Dashboard AppServer by Zumasys v%s
  1.6.3.8073      Archive mode    %s, (%s@%s)
    Tue Oct 23 23:05:51 America/Los_Angeles 2018    root    AIX61   
       -v/-?			Display Version and Usage Information   -p <dir>		The parent directory that the archive files will be extracted into.   -i <file>		System path to the archive file.     -l			Only list the contents of the archive, do not extract them.        Invalid Header, aborting extraction.    %ik     %i      f %s (%s)
      d %s
   ? %s
Unsupported file type: %i
 %s/%s   wb      Cannot create output file: %s, (%s)
    Incorrect End of File, Aborting with '%s'       Write failed, Aborting with '%s'        /       mkpath: '%s': %s
       %b %d %I:%M:%S  %s Inst(%i) - Log msg too long.
        %s Inst(%i) - %s
       a       r               %import %include_file   %s/%s   %include_config %sconfig/%s     %s/config/%s    =       Cannot open configuration file %s       behavior        DefaultHandler  DefaultResource licensekey      debug   handlers        mime_types      content_types   db_platforms    db_platform     Undefined module/section: %s        STUBAUTH: Getting %i licenses
  STUBAUTH: Releasing %i licenses
        %d-%d-%d        NONE    %m/%d/%Y        HWID123456      F            dbc     mod_bravoconnector      mod_mvconnector Success.        Software is not activated (no License Key).     License Key has expired.        License Key is not valid (fmt). License Key is not valid (chk). License Key is not valid (prd). License Key is not valid (typ). License Key is not valid (pwr). License Key is not valid (cnt). Invalid Format (%i)     %4X     %c      %5lX    %7lX    7777777 %8lX    x%s%s%s %X      <pre>   CGI Variables:<br>      -------------:<br><br>  %s = %s<br>
    </pre>  %s<     <br>    Document Handlers:      %s		%s
 Mime-Type Mappings:     Content-Type Mappings:   ;      Module Configuration Settings:  %s		%s		%s
     <option value="" selected>(select a platform)</option>
  selected               <option value="%s"%s>%s</option>
       mod_static      mod_embedded    mod_bravoconnector      mod_mvconnector mod_config      Cannot locate a valid initialization routine for handler: %s    Cannot locate a valid execute routine for handler: %s   mod_static<br>                           mod_config<br>                           mod_mvconnector<br>                           mod_embedded    Directory       mod_static.c "Directory" element is missing in module configuration.    DefaultMime     mod_static.c "DefaultMime" element is missing in module configuration.  %sdocroot/%s    %s/docroot/%s   mod_static.c Directory: %s does not exist or is not readable.   %s/%s   mod_static.c "%s" begins with a dot (unsupported)       mod_static.c "%s" is not a file or directory (unsupported)      DefaultResource /       mod_static.c using "DefaultResource" - "%s"     rb      Cannot determine mime type for extension "%s"   Setting content type to "%s" for ".%s". Gathering file information for this resource.   %a, %d %b %Y %H:%M:%S GMT       Sending the HTTP response String.       Sending the HTTP response headers.      Serving File.   mod_static.c %s is a directory (unsupported)    mod_static.c Cannot locate resource at %s       mod_static.c - module execution complete.       404Redirect     404 Redirect per configuration file to:        GIF89a    ÇՏ㧧                                             !NETSCAPE2.0   !Created with ajaxload.info !	
   ,       P  di0l!*`Ƒ5و[<iP),IZ$bH85&x5k <yB !	
   ,       h  GҌh*ਨ@$E}eh @
LcQGBP5 <5UdQ+"g0Ak#A <P70<	0Y8*	#! !	
   ,       `  #(H*
P	-13
:C1KHH.$ٱy j.WD@Y 0H	,0B
kJU?5w|$k\)! !	
   ,       R  di 1@Ck!B`? #E8zBQXcmv" £``UFrp)f! !	
   ,       `  di@E1m]ǹHІ(4 (,F!aH XSm5bDH ab,
%p3c#'"467P&*X/($! !	
   ,       _  diH@@4 ²A"I`>nI0$K7H,-t*E-``1@C7h/1f\)&! ;          
#status_msg,
#loading,
#automatic_activation,
#manual_activation,
#activation_complete,
#manual_step_2 { display:none; }

#loading {
	width:16px;
	height:16px;
	margin-top:50px;
	margin-left:auto;
	margin-right:auto;
}

.wrapper.license th,
.wrapper.license td { border-bottom:none; }

input.read_only {
	background:none;
	border:none;
	padding-left:0px;
}

#choose_license_method table,
#manual_step_2 table { margin-top:15px; }

#choose_license_method th {
	width:160px;
	vertical-align:middle;
}

#choose_license_method input { width:auto; }

#automatic_activation th,
#manual_activation th,
#activation_complete th {
	width:100px;
	vertical-align:middle;
}

#activation_complete h2 {
	margin-top:20px;
	padding-bottom:5px;
}

#system_activations th#name { max-width:65px; }

table#system_info th,
table#system_info td { padding-left:15px; }

table#system_info { border:1px solid #999999; }  //	Author: Dan Piscitiello
/////////////////////////////////////////////////////////////////////////////////////////
//
//	AJAX HTTP Request Object
//
/////////////////////////////////////////////////////////////////////////////////////////

function getHTTPObject(){
   if (window.ActiveXObject) 
       return new ActiveXObject("Microsoft.XMLHTTP");
   else if (window.XMLHttpRequest) 
       return new XMLHttpRequest();
   else {
      alert("Your browser does not support AJAX.");
      return null;
   }
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Submit license activation chosen method
//
///////////////////////////////////////////////////////////////////////////////////////// 

function submitLicenseMethod(){
	if (getCheckedValue(document.getElementsByName('activationType')) == ""){
		alert("Please choose an activation method.");
		return;
	}
	document.getElementById("choose_license_method").style.display = "none";
	document.getElementById("loading").style.display = "block";
	httpObject = getHTTPObject();
	if (httpObject != null) {
        httpObject.open("GET", "php/licenseMethod.php?licenseMethod="+getCheckedValue(document.getElementsByName('activationType')), true);
        httpObject.send(null);
		httpObject.onreadystatechange = licenseContinue;    
    }
}

function licenseContinue(){
	if(httpObject.readyState == 4){
		document.getElementById("loading").style.display = "none";
		switch (httpObject.responseText) {
			case "auto":
				document.getElementById('automatic_activation').style.display = "block";
				break;
			case "manual":
				document.getElementById('manual_activation').style.display = "block";
				break;
			default:
				return;
		}
	}
}

function getCheckedValue(radioObj) {
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Automatic Activation
//
/////////////////////////////////////////////////////////////////////////////////////////

function validateEM(form){
	if (form.email_address.value == "") {
		alert("Email address is required for activation.");
		form.email_address.focus();
		return (false);
	}
	if (form.system_id.value == "") {
		alert("System ID is required for activation.");
		form.system_id.focus();
		return (false);
	}
	// Additional validation here if needed		
	return (true);
} 

function submitAutomatic(){
	if(validateEM(document.automatic_activation_form)){
		submitAutomaticLicense();
	}
}

function submitAutomaticLicense(){
	document.getElementById("automatic_activation").style.display = "none";
	document.getElementById("loading").style.display = "block";
	httpObject = getHTTPObject();
	if (httpObject != null) {
        httpObject.open("GET", "php/automatic.php?systemId="+document.automatic_activation_form.system_id.value+"&serialNo="+document.automatic_activation_form.serial_num.value+"&email="+document.automatic_activation_form.email_address.value, true);
        httpObject.send(null);
		httpObject.onreadystatechange = automaticContinue;    
    }
}

function automaticContinue(){
	if(httpObject.readyState == 4){
		document.getElementById("loading").style.display = "none";
		document.getElementById("status_msg").className = ("status green");
		document.getElementById("status_msg").style.display = "block";
		switch (httpObject.responseText) {
			case "success":
				document.getElementById("activation_complete").style.display = "block";
				stripe("system_info");
				break;
			case "failure":
				alert("An error occurred!");
				break;
			default:
				return;
		}
	}
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Manual Activation
//
/////////////////////////////////////////////////////////////////////////////////////////

function validateID(form){
	if (form.man_system_id.value == "") {
		alert("System ID is required for activation.");
		form.man_system_id.focus();
		return (false);
	}	
	// Additional validation here if needed		
	return (true);
} 

function beginManualActivation(){
	if(validateID(document.manual_activation_form)){
		getMachineId();
	}
}

function getMachineId(){
	document.getElementById("manual_step_1").style.display = "none";
	document.getElementById("loading").style.display = "block";
	httpObject = getHTTPObject();
	if (httpObject != null) {
        httpObject.open("GET", "php/getMachineId.php?systemId="+document.manual_activation_form.man_system_id.value+"&serialNo="+document.manual_activation_form.man_serial_num.value, true);
        httpObject.send(null);
		httpObject.onreadystatechange = manualActivationStepTwo;    
    }
}

function manualActivationStepTwo(){
	if(httpObject.readyState == 4){
		document.getElementById("loading").style.display = "none";
		document.getElementById("manual_step_2").style.display = "block"
		document.manual_activation_form.machine_id.value = httpObject.responseText;
	}
}

function validateKeys(form){
	if (form.key1.value == "") {
		alert("Key 1 appears to be incorrect. Both keys are required for activation.");
		form.key1.focus();
		return (false);
	}
	if (form.key2.value == "") {
		alert("Key 2 appears to be incorrect. Both keys are required for activation.");
		form.key2.focus();
		return (false);
	}
	// Additional validation here if needed		
	return (true);
}

function submitManualActivation(){
	if(validateKeys(document.manual_activation_form)){
		submitKeys();
	}	
}

function submitKeys(){
	document.getElementById("manual_step_2").style.display = "none";
	document.getElementById("loading").style.display = "block";
	httpObject = getHTTPObject();
	if (httpObject != null) {
        httpObject.open("GET", "php/submitKeys.php?key1="+document.manual_activation_form.key1.value+"&key2="+document.manual_activation_form.key2.value, true);
        httpObject.send(null);
		httpObject.onreadystatechange = completeManualActivation;    
    }
}

function completeManualActivation(){
	if(httpObject.readyState == 4){
		document.getElementById("loading").style.display = "none";
		document.getElementById("manual_activation").style.display = "none";
		document.getElementById("status_msg").className = ("status green");
		document.getElementById("status_msg").style.display = "block";
		switch (httpObject.responseText) {
			case "success":
				document.getElementById("activation_complete").style.display = "block";
				stripe("system_info");
				break;
			case "failure":
				alert("An error occurred!");
				break;
			default:
				return;
		}
	}
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Table Striping
//
/////////////////////////////////////////////////////////////////////////////////////////

function hasClass(obj) {
	var result = false;
 	if (obj.getAttributeNode("class") != null) {
		result = obj.getAttributeNode("class").value;
 	}
 	return result;
}   

function stripe(id) {
	var even = false;
	var evenColor = arguments[1] ? arguments[1] : "#f3f3f3";
	var oddColor = arguments[2] ? arguments[2] : "#fff";
	var table = document.getElementById(id);
	var tbodies = table.getElementsByTagName("tbody");

	for (var h = 0; h < tbodies.length; h++) {
  		var trs = tbodies[h].getElementsByTagName("tr");
  		for (var i = 0; i < trs.length; i++) {
			if (!hasClass(trs[i]) && !trs[i].style.backgroundColor) {
				var tds = trs[i].getElementsByTagName("td");
				for (var j = 0; j < tds.length; j++) {
					var mytd = tds[j];
					if (!hasClass(mytd) && !mytd.style.backgroundColor) {
						mytd.style.backgroundColor = even ? evenColor : oddColor;
					}
				}
			}
			even =  ! even;
  		}
	}
}
      PNG

   IHDR         r|   tEXtSoftware Adobe ImageReadyqe<  wIDATxڔRANP_JJ!Ć`b`R\{!wƅ$qc"qebb[}+tfޛ3SusVin٧Lw&n@bHTPHjmWvgQp{Xr,Gt_%5bB==m2I(v?DRbm[T='LoJ@GI~6&!p\񕩐^_:D*>;6\i
@*.K<I8hiu,N2mSrJ&$1f22rx\u3~-.ʋWـi8q[ߛbKM?on*jWM?-{ Ny((+    IENDB`   PNG

   IHDR      !   	   tEXtSoftware Adobe ImageReadyqe<  $iTXtXML:com.adobe.xmp     <?xpacket begin="﻿" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5.1 Macintosh" xmpMM:InstanceID="xmp.iid:32C87AE557C911E4BB5798526BC76546" xmpMM:DocumentID="xmp.did:32C87AE657C911E4BB5798526BC76546"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:32C87AE357C911E4BB5798526BC76546" stRef:documentID="xmp.did:32C87AE457C911E4BB5798526BC76546"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>/  	IDATx[q8=	D RHU
$V ?7=*t+0
B\%DI0R(`.3N_@|݋N;ǯ5WhK3|㿛T~tmXYͯ'dc/	GRwZ`FGZ	ZL9r1Y5b~_Ɂ-,(wHNʘǌe̢-nϑ[ؐ\p3{/r;j!-G{d5ru$HRw4~#pN>eZoaiϽM=8!(7Pa:A|_!gY6A*=.8+G5Wdfsִ/w΍fu6˘qrŊC{rR4s7w衿ʱ&HoTCwK1U:}Wڰ)Ge~&W'CR64wXQ@t޸&A9dsm%1nFUQiGӥz@YfM&`L۳j!0mCiT6qx
f}6S-Ys\>Bۘ^@NT"pf&5لId2L<P,j2~Z98$?-ǮAi/	(mQ>NY;.8mΝٞ܋&]Ψ؅2]XX$-Q8QfEs#0'dwsTrS*ZL,~kòGf!i&!jU3Kz(.Yn[g}PWfsЈ*;qG1[;p]?2K&e!+d\>qOAhc&YdiI~		\}V%{=*"h,IݿO9Iw`A-\Vku>cdNcb7@x:.]Ϥe0FkhW 7W>gW)Rpɗ c^qSn{$_rLH­ԵamOv疸6uzfS/6|b%\rk6i*r_Uc=.h[1:
ə%.>-bJ${K8^{ҦJ	CXi+.'SԕP=L@e)B+~u0X;ۆT6f}sd,(TytD!@Dv/߭sp+BӬg|SDw#A_s3&ME*>78|.T1\!qn8m,q1kF+؀$Tvf&ʱmHvޟ\w/P:T&|:ΜsjΞN'v7Z_M%a)`$³'!ΩRT'4c>(h%e9YJ#YApP^mZNUYٗ8LBS'-GtS
il)ni#%T9$I(کy~GhQT/F=֖m#D5sLd#S[U~aG@!8-xSp'C^%
ь8x.G}*^;S<M8U6ㆂahwsX'"1R]e֩bcĄ80Q;Cvq9$nbѬQk|W}Hh
่dpa眗h_К<-wQ3m~huG%aC@XN>.ZNrDJ#֢cGq(EL<@4P!W))ycd10G;;eQ5 ]#QG]HiI})(ZXDYab4"\)G4;!8-2G<>RǀVQ e	5?{Ρ8Zꍫ(Nri	ާl{kڅ$.e$MN:uc٤<sele9W͙dm	]pl2;?]	WPޙw^"K6mPLflΟWH<TS k''{ߢjtZ"c&LyaPN	G4.Jcg.:q89Z~ )[
F:hP9-q<1r! jbI~Z %uCNj+t @y\%k$Y2powfP&'},+zR^ҷ</ ezMӯp*    IENDB`  GIF89a !   ւ@o! ǡ`󗗘㌌wwybbdP0mmopYɫ﫫XXZ                                                                                  !XMP DataXMP<?xpacket begin="﻿" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5.1 Macintosh" xmpMM:InstanceID="xmp.iid:2EF4A51F5D4111E49D1686E86F8EDADF" xmpMM:DocumentID="xmp.did:2EF4A5205D4111E49D1686E86F8EDADF"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:2EF4A51D5D4111E49D1686E86F8EDADF" stRef:documentID="xmp.did:2EF4A51E5D4111E49D1686E86F8EDADF"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! 
	  !     ,     !  @hHȤB$2p XP
"䡩,G]аKR#Ay{(#l^n{IRh$uGVXWIr^NIdgikGx[InxGRaGgMHH\MG[C  $  # CHk٠yGGEMORYR#Cm$r2@ʝ!#}"5e^8kMgw"")#!9c( Ndd`*$X aAO[0!w?:t*;ckWˇX6BmF$/˕6!29f=FmhD2#Pa$:"%Fb
X-3|bK!\Gi'qx!i)ԷLT"]HfcCe"Ko	Т>gM@Q&hn
le!anc}^9$pMCT'Bw~ITD^IHM$6O[GqRTHsà6K|H8OU\L?CЃ齑2bHϑx {0aSp]J X`) W[)H2"8ɇGG xpAdq'}ZƠyhT4vPA hg"g@h"rTΔzlG3hGZwP@򪀘G$ANP+	w+Gk¯:]NPia D&'	h*o[)	{$ Я$,`o6a%iX{$|+mP@"H@,j/͆ A
(l!J,w" r
]=Wf{((^z% T _hQGMBJD@l	BĂ$aũF7I|AzyZʬ$13k-j$AIc,QN6kړ/@l~j9^+wR*LqD/!"@kh-Bk=u[W|,zKky
G<C,ul\ {{Em< ~@k3 Q0Q҃0IA
a  0L!\P8Bj5  2V P&B	0X!4 ߝ*T֐PЇJ&:PH*ZQ*ǐx.zщ   
 A	ZgٲF}W@ &0÷m`#,	ذq
@4 I')E $,H@&	& @C%	!1Jr  d#H k!F)H`WZ_$ 6B`L 
IR Ю	̓UX*B l_ Dc[rJP2N% Cdj   ;       GIF89a    ̽ײ                  !     ,       
!@8Ļ ;   @import url("reset.css");

/**************************************************************
	Global
**************************************************************/

body {
	font-family:Arial, Helvetica, sans-serif;
	font-size:13px;
	line-height:1.5;
	height:100%;
	background-image:url(/embedded/body-bg.gif);
	background-repeat:repeat-y;
	background-position:center;
	margin-bottom:20px;
	color:#999999;
}

a {
	color:#999;
	text-decoration:none;
}

a:hover {
	color:#ff8125;
}

h1 {
	font-size:18px;
	color:#ff8125;
	padding-bottom:30px;
}

h2 {
	color:#ff8125;
	padding-bottom:10px;
	font-size:13px;
}

h3 {
	color:#FF8125;
	font-weight:bold;
	font-size:11px;
}

table th {
	text-align:left;
}

.wrapper {
	margin-left:auto;
	margin-right:auto;
	position:relative;
	width:760px;
}

.header {
	background-color:white;
	padding-bottom:20px;
}

#navigation {
	float:right;
	margin-right:20px;
	margin-top:20px;
}

#navigation li {
	float:left;
	margin-right:1px;
}

#navigation li a {
	display:block;
	background-image:url(/embedded/menu-tab-left.gif);
	background-repeat:no-repeat;
	padding-left:5px;
	background-position:left top;
	font-size:13px;
	color:#666;
}

#navigation a.active {
	color:black;
	font-weight:bold;
}


#navigation li a span {
	display:block;
	padding-right:15px;
	padding-left:10px;
	padding-top:5px;
	padding-bottom:10px;
	background-image:url(/embedded/menu-tab.gif);
	background-repeat:no-repeat;
	background-position:right top;
}

img.logo {
	float:left;
	margin:20px;
	border:none;
}

.status {
	font-size:14px;
	line-height:1.3;
	padding:20px 20px 20px 38px;
	margin:20px 20px 0;
	clear:both;
	border:1px solid black;
	color:black;
	background-color:#CCC;
	background-image:url(/embedded/green.png);
	background-repeat:no-repeat;
	background-position:25px 22px;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
}

.status p {
	margin-left:10px;
}

.status.green {
	border-color:#090;
	background-color:#CF9;
	color:#090;
	background-image:url(/embedded/green.png);
}

.status.red {
	border-color:#900;
	background-color:#FCC;
	color:#900;
	background-image:url(/embedded/red.png);
}

.status.yellow {
	border-color:#FC3;
	background-color:#FFC;
	color:#FC3;
	background-image:url(/embedded/yellow.png);
}

.content {
	padding-top:20px;
	background-image:url(/embedded/shadow-bottom.gif);
	background-repeat:repeat-x;
	background-position:top;
	
}

.left_column {
	float:left;
	clear:left;
	width:232px:
}

.center_column {
	float:left;
	width:350px;
	margin-right:20px;
}

.right_column {
	float:left;
	width:138px;
	position:relative;
}

.clear {
	clear:both;
}

/**************************************************************
	Status Page
**************************************************************/

#message {
	font-size:11px;
	width:150px;
	padding:10px 20px;
	margin:0px 20px;
	background-color:white;
	border:1px solid #333;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	color:#333;
}

.center_column.main_status {
	width:507px;
	margin-right:0px;
}

.center_column table {
	text-align:left;
	width:100%;
	color:#666;
}

table#server_status {
	margin-bottom:20px;
}

#server_status tbody th {
	padding-left:20px;
	font-weight:normal;
}

#server_status td {
	text-indent:-9999px;
	background-repeat:no-repeat;
	background-position:left 8px;
	width:50px;
}

.center_column.main_status th, .center_column.main_status td {
	border-bottom:1px solid #999;
	padding:5px 10px 5px 0px;
}

#server_status td.green {
	background-image:url(/embedded/green.png);
}

#server_status td.yellow {
	background-image:url(/embedded/yellow.png);
}

#server_status td.red {
	background-image:url(/embedded/red.png);
}

.server_info {
	font-size:11px;
	padding:10px 20px 20px;
	background-color:white;
	border:1px solid #999;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
}

.server_info table {
	color:#999;
}

.server_info th {
	width:170px;
}

.server_info tbody th {
	padding-left:20px;
	font-weight:normal;
	text-align:right;
	padding-right:10px;
}

#app_info tbody td, #app_info tbody th {
	border-bottom:none;
}

table#server_info {
	margin-bottom:30px;
}

/**************************************************************
	Security, Database pages
**************************************************************/

.center_column.main th {
	padding-right:10px;
	padding-bottom:15px;
	vertical-align:top;
	font-weight:normal;
	width:118px;
}

.center_column.security td {
}

select {
        background-color:white;
        border:1px solid #999999;
        -moz-border-radius: 5px;
        -webkit-border-radius: 5px;
        color:#666666;
        float:left;
        width:166px;
	height: 24px;
}

input {
	background-color:white;
	border:1px solid #999999;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	padding:3px 7px;
	color:#666666;
	float:left;
	width:150px;
}

input.no_class {
	background-color:none;
	border:inherit;
	padding:0px;
	color:#666666;
	float:none;
	width:auto;
}

a.info {
	display:block;
	float:left;
	margin-left:8px;
	width:19px;
	height:20px;
	background-image:url(/embedded/info.png);
	background-repeat:no-repeat;
	background-position:left top;
	text-indent:-9999px;
}

.help_box {
	visibility:hidden;
	position:absolute;
	top:57px;
	border:1px solid #999999;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	padding:7px;
	font-size:11px;
	background-color:white;
}

#required_help_box {
	top:90px;
}

#optional_help_box {
	top:230px;
}

#install_help_box {
	top:460px;
}

.help {
	display:none;
}

a.save { 
	display:block;
	color:#999999;
	background-color:white;
	border:1px solid #999999;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	padding:2px 10px;
	float:left;
}

a.save:hover {
	color:#ff8125;
}

.pipe {
	margin-bottom:20px;
	padding-bottom:10px;
	background-image:url(/embedded/pipe.gif);
	background-position:left bottom;
	background-repeat:no-repeat;
}

.installer {
	border:1px solid #090;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	overflow:hidden;
	background-color:#CF9;
	color:#090;
	margin:20px 0px;
}

.installer h3 {
	background-color:#090;
	padding:3px 10px;
}

.installer h3 a {
	color:white;
}

#installers {
	display:none;
	padding:10px;
}

.results {
	border:1px solid #999999;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	overflow:hidden;
	background-color:white;
	margin-top:20px;
}

.results h3 {
	background-color:#999999;
	color:white;
	padding:3px 10px;
}

.code_wrapper {
	padding-left: 10px;
	font-size: 10px;

}

.results ol {
	list-style-position:outside;
	list-style-type:decimal-leading-zero;
	font-family:"Courier New", Courier, monospace;
	font-size:10px;
	margin-left:25px;
	padding:10px;
}

#package input {
	margin-top:10px;
	margin-bottom:10px;
}

.database_install {
	display: none;
}

.ok_to_install + .database_install {
	display: block;
}

/**************************************************************
	Documentation page
**************************************************************/

.center_column.main_status.docs {
	width:470px;
}

#docs_index {
	padding-top:20px;
}

#docs_index ol {
	list-style-type:upper-roman;
	list-style-position:inside;
	margin-left:25px;
}

#docs_index ol ol {
	list-style-type:lower-latin;
	margin-left:25px;
}

#docs_content {
	padding-top:30px;
}

#docs_content p {
	margin-bottom:20px;
}


/**************************************************************
	Documentation page
**************************************************************/
.pipe.apps th {
	background-color:#FF8125;
	color:#FFFFFF;
	border: 1px solid #000000;
	padding-left: 3px;
	font-size: 12px;
}
.pipe.apps td {
	color:#FF8125;
	border: 1px solid #000000;
	padding-left: 3px;
	font-size: 12px;
}
.pipe.app_install th {
        padding-right:10px;
        padding-bottom:15px;
        vertical-align:top;
        font-weight:normal;
        width:118px;
}
/***************************************************************
	License Page
***************************************************************/
.center_column.license_screen {
        width:507px;
        margin-right:0px;
}
.license_info {
        padding:10px 20px 20px;
        background-color:white;
        border:1px solid #999;
        -moz-border-radius: 5px;
        -webkit-border-radius: 5px;
}
.license_info th {
        background-color:#FF8125;
        color:#FFFFFF;
        border: 1px solid #000000;
        padding-left: 3px;
        font-size: 12px;
}
.license_info td {
        color:#FF8125;
        border: 1px solid #000000;
        padding-left: 3px;
        font-size: 12px;
}

      @charset "UTF-8";

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	font-size: 100%;
	vertical-align: baseline;
	background: transparent;
}
body {
	line-height: 1;
}
ol, ul {
	list-style: none;
}
blockquote, q {
	quotes: none;
}

/* remember to define focus styles! */
:focus {
	outline: 0;
}

/* remember to highlight inserts somehow! */
ins {
	text-decoration: none;
}
del {
	text-decoration: line-through;
}

/* tables still need 'cellspacing="0"' in the markup */
table {
	border-collapse: collapse;
	border-spacing: 0;
}

sub {
	font-size: smaller;
	vertical-align: sub;
}

sup {
	font-size: smaller;
	vertical-align: super;
}     PNG

   IHDR         r|   tEXtSoftware Adobe ImageReadyqe<  dIDATxڜN@ggQ&R"}ށW0<HxOG/ބB-ŲxɽL~3YiFӹȹ_־q
Çgtjݺn&;4^A(KJ[J6Lׇ#	%߿5nt{h	t:1
 "_ 0dǣ&!|HwZOVh#1wx-顝XD<ZQX-.ϘU\&/L4rs02j.]W]||x T8v	/LZGꋀ:o @B    IENDB`      GIF89aF   ɱۙ         !     ,    F  (8cLNu5M"9-N6w͙$Hv5"б=[IpyQHhE-rVއ4Jfk3y-˞XolGIW7qhtzrxv|bdsyT	 ;    GIF89a !  ڜ333ĄSSSױ   !   ,     !  hICAIB%+cwY3r	8AXvx7I1
\334! ;     GIF89a,!  ???   !   ,    ,!  `'dihlp,tm߳\wpH,Ȥrl:ШtJ.azxL.znpW>z~yu@W۾	 
H&Ç#JHŋ3jȱǏ C!ɓ(S\ɲ˗0cʜI͛8sܹ?%JѣHJpӧPBJꄫXjzUjӪ`!pͪаhzmjLJx`h].{Ry+g]t ǐ#KL˘3k̹ϠCӨS^ͺװc˞M۸s޽Nȓ+_μУKNzسkνËOӫ_Ͼ}˟OϿ (h46F(Bf`j ~a!f8"%^x).""2>X#4@; @)DiH&L6PF)TVYe d Yr	^j)d	fh~jf[)sigm©fgZt&f&(
 VJ{Z:饖F駠)jj
穝nij묰I++ `+k&6F+vҵfv+k覫A+k ,\$7G,Wlgwq($l(,0,4l8,r<@-DsH'L7NG-TWXg\u`-8_@hjSO tv. ;   //	Author: Dan Piscitiello
/////////////////////////////////////////////////////////////////////////////////////////
//
//	Show help boxes function
//	
//	Make sure to pass the id of the help div and help box it resides in 
//	when calling the function inline from a link
//
/////////////////////////////////////////////////////////////////////////////////////////

var current_help = "";
var current_box = "";

function showHelp(help_id, box_id){
	if(current_help != ""){
		document.getElementById(current_help).style.display = "none";
	}
	if(current_box != ""){
		document.getElementById(current_box).style.visibility = "hidden";
	}
	current_help = help_id;
	current_box = box_id;
	document.getElementById(box_id).style.visibility = "visible";
	document.getElementById(help_id).style.display = "block";
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Password change form validation and submission
//
/////////////////////////////////////////////////////////////////////////////////////////

function validatePass(form){
	if (form.pass1.value == "") {
		alert("Please fill out both fields!");
		form.pass1.focus();
		return (false);
	}
	if (form.pass2.value == "") {
		alert("Please fill out both fields!");
		form.pass2.focus();
		return (false);
	}
	if (form.pass1.value != form.pass2.value) {
		alert("Your passwords do not match!");
		form.pass1.focus();
		return (false);
	}
	// Additional validation here if needed		
	return (true);
} 

function savePass(){
	document.admin_password.action = ""; //server side script location
	if(validatePass(document.admin_password)){
	document.admin_password.submit();
	}
}

function installApp(){
	document.install_app.action = ""; //server side script location
        if (document.install_app.package.value == "") {
          alert("Please enter the package file.");
          document.install_app.package.focus();
        } else { 
	  document.install_app.submit();
	}
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//	Database page form validation and submission
//
/////////////////////////////////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////////////////////////////////
//
//	function to show and hide the App Installer
//
/////////////////////////////////////////////////////////////////////////////////////////

beenCalled = 0;

function installer(){
	if(!beenCalled){
		document.getElementById("installers").style.display = "block";
		beenCalled = 1;
	} else {
		if(document.getElementById("installers").style.display == "none"){
			document.getElementById("installers").style.display = "block";
		} else {
			document.getElementById("installers").style.display = "none";
		}
	}
}
    PNG

   IHDR         7#   tEXtSoftware Adobe ImageReadyqe<  IDATxb3`G	*,1}|,W~Gp;Z-Wgna,7wqe/+-r1@uڔ@HPՅ/8CTɾOQ8K	<Tc
4^d;I<c/ -AܹfӋ2ڃH-O6=MjP=,̏O<:J]9[R`~+,TeGvF :vLm4KtaN>?Jcz PNI=?nXdvBR' ̘*Xd 6c 0S$dUnvprj!* B4<O L[bHFAɟМ}n9˕9[QÒgi=ǧ҄O?   J;&    IENDB`  
.content {
	margin-top:0px;
}

.status {
	padding-top:9px;
}
  #server_status td.green,
#server_status td.yellow,
#server_status td.red {
	background-color:transparent;
}

#navigation {
	float:right;
	margin-right:10px;
	margin-top:20px;
}

img.logo {
	margin-left:10px;
}

.status {
	margin-top:10px;
}

.left_column {
	margin-left:0px;
}
   PNG

   IHDR         r|   tEXtSoftware Adobe ImageReadyqe<  IDATxڔkAƟu֜xgDMRh66$!QPk)!$.{;Nlf<ﰩG0\B=It]CQ;=:w<c]z o漷kCH
0Ye	#J8T`U(6MJ<Vj,IoL?A>#8<<`QHD0@s YAOT<=8Mõtv|q@qS%DG1;wfafkǮwwvo]#]%[Eidv>J(A/>nYE#nq"[eN:U\\B*`cl;P-MuIB9 +_gϱ}lGFrv%91a36d@g|!ޛS%4]|:^Gb&4tOF0 L~N    IENDB`    GIF89a    񵵵,       80
%+!Vdihlp,tmx|pH,5@ L ;     body-bg.gif     gif     green.png       png     ie6.css css     ie7.css info.png        main.js js      menu-tab.gif    menu-tab-left.gif       pipe.gif        red.png reset.css       screen.css      shadow-bottom.gif       mv-logo.gif     mv-logo.png     yellow.png      license.js      license.css     ajax-loader.gif Sending the HTTP response String.       Sending the HTTP response headers.      mod_embedded.c Cannot locate resource at %s     module execution complete.      mod_mvconnector.c - Running Initialization code.        dbVarMode       mod_mvconnector.c - out of memory allocating tmp_qstring!               SIMPLEWEB_MODULE        mod_mvconnector REMOTE_ADDR     REMOTE_HOST     REMOTE_USER     REQUEST_METHOD  PROTOCOL_VERSION        HTTP_REFERER    HTTP_USER_AGENT HTTP_HOST       HTTP_ACCEPT     HTTP_COOKIE     HTTP_CONNECTION SIMPLEWEB_HANDLER       PATH_INFO       CONTENT_TYPE    %i      SERVER_PORT     %sbin/mvappsvr  %s/bin/mvappsvr INSTALL_PATH    HTTP_   %i%i%i  This software is not activated. Activation Error: &nbsp;   %s   APPSVR_ID       maxContentLength        Request content length %i exceeds maximum length %i (maxContentLength). mod_mvconnector.c Starting request      dbType  mod_mvconnector.c "dbType" element is missing in module configuration.  dbBinary        dbAppName       dbHostName      dbWorkingDir    dbAcctPath      dbUsername      dbAccount       d3Account       dbPassword      dbVME   dbCommand       dbRequired      dbEnvVars       cFilter maxRequest      dbPortNum       cTypeIsStart    TRUE    dbFails mod_mvconnector.c - module execution complete.  mod_mvconnector.c New QS: %s    OI             
       
      1       Actual database command:        mod_mvconnector.c: cannot allocate anymore memory for query string rebuild. Requested: %i bytes mod_mvconnector.c Creating new socket request to %s:%i  mod_mvconnector.c OI Socket connection failed to %s     mod_mvconnector.c OI Server login failed to log in as '%s'.     Calling oe_exec
        mod_mvconnector.c: oe_exec failed!      oe_exec is complete     r       Database request FAILED, Null Pointer.  Failure number: %i      Actual executable command:      mod_mvconnector.c Database connection failed!   Database connection failure: %s Creating command line for %s    /       [START.PGM] [DBPROGRAM] [UNIQUEID]-[SEQ]-[CNT] [VAR.STRING]     [UNIQUEID]      [DBPROGRAM]     [START.PGM]     WDB.INIT        [SEQ]   [CNT]   [VAR.STRING]    %%      Cannot handle requests for %s   set working dir: chdir("%s") succeeded  set working dir: chdir("%s") failed     Setting environment variable: %s=%s     Breaking at EOF        Breaking on NULL return code    fgets error %d  700 WDB-START
  700 WDB-START
 Received start block from DB    Received start header, printing enabled.        Content-type:   Received Content-type header from DB    Received start header and Content-type header, printing enabled.        Unable to open content file '%s'        Content-length: %d
    Sending Content-length header; length=%d        800 WDB-COMPLETE
       800 WDB-COMPLETE
      Received end block from DB      Sending char string from DB:    Client-Count:   X-MVDB-STATUS:  X-MVDB-STATUS header found: %d  X-MVDB-CONTENT-FILE:    X-MVDB-CONTENT-FILE header found: %s    500 ERROR       Error message from database: %s User limit reached      Licensed # of users has been reached    UniVerse user limit has been reached    Licensed number of users exceeded       Too many users  Maximum concurrent licensed user limit exceeded No database licenses available to process request       No database licenses available: Discarding database output (printing not enabled):      DB failure, cannot parse results from host.     %s      %&=+!"'#$\`;<>@|()~{}   &=+!"'#$\`;<>@|()~{}    !"'#$\`;<>@|()~{}       %&=+    &=+     Appending '%s' to the query string      mod_mvconnector.c Cannot allocate anymore memory for query string. Requested: %i bytes  &       =       mod_mvconnector.c: out of memory allocating %i bytes for body data.     mod_mvconnector.c: ready to gather %i bytes of body data.       mod_mvconnector.c: succesfully gathered %i bytes from client.   mod_mvconnector.c: failed to read all body data! Requested %i but received %i from client.      application/x-www-form-urlencoded       text    __body__        mod_mvconnector.c: request body not sent in qstring because %s not text (see content-types config setting)!     %08ld   
Communication failure - Engine Server has disconnected
        Sending OI Command String:      800 WDB-COMPLETE        800 WDB-COMPLETE       Received End Block from OI server.      Sending char string from OI:    Received START Block from OI server.    %i%c%s%c%s%c%s%c2%c%s%c%s%c%s%c%s%c%s%c REVCMD_LISTENER %i%c    %i%c%s%c        rb      sending contents of file: %s    wrote %i bytes to socket        cannot open '%s'        %%%02x  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<script src="/embedded/main.js" type="text/javascript"></script>

<title>MultiValue Application Server: Activation</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status"><span>Status</span></a></li>
            <li><a href="/config?tab=security"><span>Security</span></a></li>
            <li><a href="/config?tab=docs"><span>Docs</span></a></li>
            <li><a href="/config?tab=database"><span>Database</span></a></li>
            <li><a href="/config?tab=apps"><span>Apps</span></a></li>
            <li><a href="/config?tab=activate" class="active"><span>Activate</span></a></li>
        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />

        [PASSFAIL]

        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">

        <div class="left_column">
            <div id="message">
                <h2>Activation</h2>
                <p> The activation tab allows you to view and update license information for MultiValue Dashboard. The license table to your right includes a summary of your current license information. To update your license, enter the appropriate license key and click on the "Update" button.</p>
            </div>
        </div><!--left_column-->
    
        <div class="center_column license_screen">
            <h1>Activation</h1>
            <div class="clear"></div>
            <div id="license_info">
                <h2 class="">Licensing Information</h2>
                <p>Below is the information based on the license key you have provided.</p>
                <table cellspacing="0">
                [LICENSE_TABLE]
                </table>
                <br /><br />
                <form name="license_info" id="license_info" method="get" action="">
                    <input type="hidden" name="act_submit" value="true">
                    <input type="hidden" name="tab" value="activate">
                    <table cellspacing="0">
                        <tr>
                            <th style="vertical-align: top; width: 120px;">License Key:</th>
                            <td style="border:none; text-align: left;"><input style="width: 200px;" type="text" name="license_key" value="[LICENSE_KEY]" id="licensekey1" size="26" /></td>
                        </tr>
                   </table>
                   <a style="margin-top: 20px" href="javascript:document.license_info.submit();" class="save">Update</a>
                </form>
            </div>

        </div><!--center_column-->
    </div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<script src="/embedded/main.js" type="text/javascript"></script>

<title>MultiValue Application Server: Applications</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status"><span>Status</span></a></li>
            <li><a href="/config?tab=security"><span>Security</span></a></li>
            <li><a href="/config?tab=docs"><span>Docs</span></a></li>
            <li><a href="/config?tab=database"><span>Database</span></a></li>
            <li><a href="/config?tab=apps" class="active"><span>Apps</span></a></li>
            <li><a href="/config?tab=activate"><span>Activate</span></a></li>
        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />

        [PASSFAIL]
        
        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">

        <div class="left_column">
        	<div id="message">
        		<h2>Applications</h2>
                <p>The Apps area allows you to view the applications that have been installed and also to install new applications. To install a new application package, the package file must be placed on your MultiValue server. Provide the fully-qualified filename of the package file (e.g. /usr/tmp/my.application.bin) on this page to install the application.</p>
            </div>
        </div><!--left_column-->
    
    	<div class="center_column">
            <h1>Applications</h1>
        <div class="clear"></div>
               <div class="pipe apps">
                 <h2 class="">Installed Applications</h2>
                 <table border="0">
                   <tr>
                    <th> Application Name </th>
                    <th> Version </th>
                    <th> Handler </th>
                  </tr>
                 [APP_TABLE]
               </table>
               <br>
             </div><!-- pipe -->
             <div class="pipe app_install">
                <h2 class="">Install New Application</h2>
                <form name="install_app" id="install_app" method="get">
                  <input type="hidden" name="submit_form" value="true">
                  <input type="hidden" name="tab" value="apps">
                   <table cellpadding="0">
                        <tr>
                            <th>Package Path:</th>
                            <td><input type="text" name="package" id="package" value="[PACKAGE]"/><a href="javascript:showHelp('package_help', 'required_help_box');" class="info">More info</a></td>
                        </tr>

                   </table>
<br>

                   <a href="javascript:installApp();" class="save">Install</a>
<br><br>
                </form>
             </div>

            [RESULTS_DIV]

            
        </div><!--center_column-->
        
        <div class="right_column">
        	<div class="help_box" id="required_help_box">
            	<h3>More Info</h3>
                <div id="package_help" class="help">The full path to the storage location of the package (.pkg) file.</div>
            </div>
        </div>

	</div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<script src="/embedded/main.js" type="text/javascript"></script>

<title>MultiValue Application Server: Database</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status"><span>Status</span></a></li>
            <li><a href="/config?tab=security"><span>Security</span></a></li>
            <li><a href="/config?tab=docs"><span>Docs</span></a></li>
            <li><a href="/config?tab=database" class="active"><span>Database</span></a></li>
            <li><a href="/config?tab=apps"><span>Apps</span></a></li>
            <li><a href="/config?tab=activate"><span>Activate</span></a></li>

        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />

        [PASSFAIL] 
        
        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">

        <div class="left_column">
            <div id="message">
                <h2>Database</h2>
                <p>The database tab will help you configure your MultiValue Application Server to connect to your MultiValue database.  The most important parameters are the ones listed under the "Required" section.  These items are required to make sure that your software functions correctly.  The parameters listed in the "Optional" section may be required for some installations, but are generally used for performance tuning or other optional settings.  If you have any questions, please contact your MultiValue support representative.

               <br><br>
               <b>MultiValue Support<br>
               support@zumasys.com</b></p>
            </div>
        </div><!--left_column-->
    
        <div class="center_column main">

            <h1>Database Setup</h1>
                            
            <div>
                <h2 class="">Required Parameters</h2>
                <table cellpadding="0">
                    <tr>
                        <th>Platform:</th>
                        <td><select name="dbtype" id="dbtype" 
                            onchange="javascript:location.href='/config?tab=database&feature=database_platform&submit_form=true'+
                            '&dbtype='+this.value;">
                        [DBPLATFORM_OPTIONS]
                        </select>
                        <a href="javascript:showHelp('dbplatform_help', 'platform_help_box');" class="info">More info</a></td>
                    </tr>
                </table>                   
            </div>

[DBCONFIG]

[RESULTS_DIV]
            
        </div><!--center_column-->
        
        <div class="right_column database">
        
        <!-- BEGIN HELPBOXES -->

            <div class="help_box" id="platform_help_box">
                <h3>More Info</h3>
                <div id="dbplatform_help" class="help">In order to install and operate MVDashboard with your MultiValue database, you must specify which MultiValue platform is being used.</div>
            </div>

[DBHELP]

        <!-- END HELPBOXES -->
            
        </div><!--right_column-->

    </div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<script src="/embedded/main.js" type="text/javascript"></script>

<title>MultiValue Application Server: Security</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status"><span>Status</span></a></li>
            <li><a href="/config?tab=security" class="active"><span>Security</span></a></li>
            <li><a href="/config?tab=docs"><span>Docs</span></a></li>
            <li><a href="/config?tab=database"><span>Database</span></a></li>
            <li><a href="/config?tab=apps"><span>Apps</span></a></li>
            <li><a href="/config?tab=activate"><span>Activate</span></a></li>

        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />

        [PASSFAIL]
        
        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">
        <div class="left_column">
        	<div id="message">
        		<h2>Security</h2>
                <p>This page will help you reset the administrative password for the configuration application.  To reset the password for the "admin" user, enter your new password into the boxes to the right of this message.  Once you have entered your passwords, click on the "Save Changes" button to update the password.  Once you have successfully changed your password in this section, you will need to re-login to the configuration interface to continue.</p>
            </div>
        </div><!--left_column-->
    
    	<div class="center_column main">
        	
            <h1>Security</h1>
            
            <form name="admin_password" id="admin_password" method="get">
              <input type="hidden" name="tab" value="security">
            	<div class="pipe">
                    <table cellpadding="0">
                        <tr>
                            <th>Admin Password:</th>
                            <td><input type="password" name="pass1" id="pass1" /><a href="javascript:showHelp('pass1_help', 'pass_help_box');" class="info">More info</a></td>
                        </tr>
                        <tr>
                            <th>Confirm Password:</th>
                            <td><input type="password" name="pass2" id="pass2" /><a href="javascript:showHelp('pass2_help', 'pass_help_box');" class="info">More info</a></td>
                        </tr>
                    </table>
               	</div>
                <a href="javascript:savePass();" class="save">Save Changes</a>
            </form>
            
        </div><!--center_column-->
        
        <div class="right_column">
        	<div class="help_box" id="pass_help_box">
            	<h3>More Info</h3>
                <div id="pass1_help" class="help">Enter the password that you would like to use for the configuration interface in this box.</div>
                <div id="pass2_help" class="help">Enter the same password as above to confirm.  Entering the password twice helps to ensure that the correct changes are made.</div>
            </div>
        </div>

	</div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<title>MultiValue Application Server: Status</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status" class="active"><span>Status</span></a></li>
            <li><a href="/config?tab=security"><span>Security</span></a></li>
            <li><a href="/config?tab=docs"><span>Docs</span></a></li>
            <li><a href="/config?tab=database"><span>Database</span></a></li>
            <li><a href="/config?tab=apps"><span>Apps</span></a></li>
            <li><a href="/config?tab=activate"><span>Activate</span></a></li>

        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />
        
        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">

        <div class="left_column">
        	<div id="message">
        		<h2>Welcome</h2>
                <p>Welcome to the MultiValue Application Server configuration interface.  This interface will help you check on the status and version of your new software, update your configuration, and install new applications.  Use the tabs on the top of this page to navigate the configuration screens. </p>
            </div>
        </div><!--left_column-->
    
    	<div class="center_column main_status">
        
        	<h1>System Status</h1>
        	
            <table id="server_status" cellpadding="0">
            	<thead>
                	<tr>
                    	<th scope="row">System Status:</th>
                        <td class="[SYSTEM_STATUS_COLOR]">Ok</td>
                    </tr>
                </thead>
                <tbody>
               	    <tr>
                    	<th scope="row">Server Installed:</th>
                        <td class="[SERVER_INSTALLED_COLOR]">Ok</td>
                    </tr>
                    <tr>
                        <th scope="row">Server Activated:</th>
                        <td class="[SERVER_LICENSE_COLOR]" alt="[SERVER_LICENSE_ALT]">[SERVER_LICENSE_ALT]</td>
                    </tr>

                    <tr>
                    	<th scope="row">Database Configured:</th>
                        <td class="[DB_CONFIG_COLOR]">Ok</td>
                    </tr>
                    <tr>
                    	<th scope="row">MV Software Installed and Operational:</th>
                        <td class="[MV_SOFT_COLOR]">Ok</td>
                    </tr>
                </tbody>
            </table>
            
            <div class="server_info">
            
                <table cellpadding="0" id="server_info">
                    <thead>
                        <tr>
                            <th scope="row">Server Version:</th>
                            <td>[SERVER_VERSION]</td>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <th scope="row">Configured Handlers:</th>
                            <td>[HANDLER_LIST]</td>
                        </tr>
                        <tr>
                            <th scope="row">Included Modules:</th>
                            <td>[MODULE_LIST]</td>
                        </tr>
                        <tr class="alt">
                            <th scope="row">Default Handler:</th>
                            <td>[DEFAULT_HANDLER]</td>
                        </tr>
                        <tr>
                            <th scope="row">Default Resource:</th>
                            <td>[DEFAULT_RESOURCE]</td>
                        </tr>
                    </tbody>
                </table>
                
                <table cellpadding="0" id="app_info">
                    <thead>
                        <tr>
                            <th scope="row">Application Installer Version:</th>
                            <td>[APP_INSTALLER_VERSION]</td>
                        </tr>
                    </thead>
                    <tbody>
                        <tr class="alt">
                            <th scope="row">Installed Applications:</th>
                            <td>[INSTALLED_APPS]</td>
                        </tr>
                    </tbody>
                </table>

<!-- start license info -->
                [LICENSE_TABLE]
<!-- end license info -->
            </div><!--server_info-->
            
        </div><!--center_column-->

	</div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="/embedded/screen.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]> <link href="/embedded/ie7.css" rel="stylesheet" type="text/css"> <![endif]-->
<!--[if IE 6]> <link href="/embedded/ie6.css" rel="stylesheet" type="text/css"> <![endif]-->

<script src="/embedded/main.js" type="text/javascript"></script>

<title>MultiValue Application Server: Documentation</title>
</head>

<body>

<div class="wrapper">
        
    <div class="header">
    
        <ul id="navigation">
            <li><a href="/config?tab=status"><span>Status</span></a></li>
            <li><a href="/config?tab=security"><span>Security</span></a></li>
            <li><a href="/config?tab=docs" class="active"><span>Docs</span></a></li>
            <li><a href="/config?tab=database"><span>Database</span></a></li>
            <li><a href="/config?tab=apps" ><span>Apps</span></a></li>
            <li><a href="/config?tab=activate"><span>Activate</span></a></li>

        </ul>

        <img class="logo" src="/embedded/mv-logo.gif" alt="MultiValue logo" />

        <div class="clear"></div>
        
    </div><!--header-->
    
    <div class="content">

        <div class="left_column">
        	<div id="message">
        		<h2>Documentation</h2>
                <p>This page contains the documentation describing how to use the configuration interface for the MultiValue dashboard.  Use the table of contents on the right to navigate to the documentation section that you need.  If you cannot find the answer to your question in this section, please contact your Zumasys support representative.

               <br><br>
               <b>Zumasys Support<br>
               support@zumasys.com</b></p>

            </div>
        </div><!--left_column-->
    
    	<div class="center_column main_status docs">
        	
            <h1>Application Server</h1>
            <div id="docs_index">
                <h2>Table of Contents</h2>
                <ol>
                    <li><a href="#getting_started">Getting Started</a>
                    <li><a href="#status">Status</a>
                        <ol>
                            <li><a href="#status_icons">Status Icons</a></li>
                            <li><a href="#status_serverinfo">Server Summary Information</a></li>
                            <li><a href="#status_apps">Installed Applications</a></li>
                        </ol>
                    </li>
                    <li><a href="#security">Security</a>
                        <ol>
                            <li><a href="#security_admin">Admin Password</a></li>
                        </ol>
                    </li>
                    <li><a href="#docs">Docs</a></li>
                    <li><a href="#database">Database</a>
                        <ol>
                            <li><a href="#database_required">Required Parameters</a></li>
                            <li><a href="#database_optional">Optional Parameters</a></li>
                            <li><a href="#database_install">Install Dashboard Software</a></li>
                        </ol>
                    </li>
                    <li><a href="#apps">Apps</a>
                        <ol>
                            <li><a href="#apps_installed">Installed Applications</a></li>
                            <li><a href="#apps_install_new">Install a New Application</a></li>
                        </ol>
                    </li>
                    <li><a href="#activate">Activate</a>
                        <ol>
                            <li><a href="#licensing_information">Licensing Information</a></li>
                        </ol>
                    </li>
                </ol>
            </div>
            
            <div id="docs_content">
          	<ol>
    	       	  <li id="getting_started" class="pipe">
                        <h2>Getting Started</h2>
                        <p> Thank you for installing the MultiValue Application Server!  This page will guide you through
                            the setup and configuration of your new software.  There are four simple steps that are required
                            to complete the installation of your software.
                            <br> <br>
                            <u>Step 1: Run the MV Application Server Installer.</u><br>
                               To begin the installation of the MultiValue Application Server, first download and run the correct installer for your
                               system.  For Windows-based systems the installer will be a single executable file called "mvapps-[version].exe".  For
                               example, the file "mvapps-1.0.0.1234.exe" would contain the installation program for version 1.0.0, build 1234.  On
                               Unix-based machines such as Linux or AIX, the installer will be a single executable file called "mvapps-[version].bin".
                               <br> <br>
                               To begin the installation, execute the installation file.  The installer program will guide you through the remainder
                               of the installation process.
                               <br><br>
                               Once the installation script has completed, you should be able to connect to the application server's configuration
                               interface using your favorite web browser.  To connect, open your web browser and point it to the name or ip address 
                               of your database server.  Make sure to include the TCP port number that you selected when running the installation 
                               script in the address bar.  If you accepted the default port, your web address will be something like:
                               <br><br><b>http://my.pickserver.com:8180/config</b> 

                            <br> <br>
                            <u>Step 2: Configure Your Database Connection.</u><br>
                               Once you are able to connect to the configuration interface, you are ready to configure the system using the "Database"
                               tab.  First, you need to select the MultiValue platform type from the dropdown list at the top of this page.
                               For all installations, you will need to fill out the top section of the database screen labeled "Required
                               Parameters".  In this section, enter the full path to your MultiValue database executable. 
<!--                           For Rocket D3, this typically is /usr/bin/d3 for Unix and Linux, or c:\Program Files\RocketSoftware\d3\D3programs\D3Tcl.exe on Windows. -->
                               Also in this section you can select the name of the account that will be created to house
                               the MultiValue software applications that you install and you will also be able to select a password for the
                               "MVDASHBOARD" user.  This user account will automatically be created and used to access your MV system.
                               <br><br>
                               If necessary for your installation, you may also configure the optional parameters at this time.  For more information
                               and further description of these parameters please see the "Database" section of this help page.

                            <br> <br>
                            <u>Step 3: Install the Base Package.</u><br>
                               After the software has validated your entries in the required parameters section, the database tab will be expanded
                               to allow you to install the core MultiValue database software.  Fill out all of the information requested in this section,
                               and when you are ready, click the "Install" button to complete your base configuration.  If the installation process
                               succeeds, a message will be displayed and the database software version will be displayed.  More information
                               regarding this section is available in the "Database" section of this help page.

                            <br> <br>
                            <u>Step 4: Activate Your New Software.</u><br>
                               To use your new software, it must be activated to ensure that you have access to all of the features that you 
                               have purchased.  To activate your software, click on the "Activate" tab inside the configuration interface
                               and enter in your licensing information.   More information about this function is available in the "Activate" section
                               of this help page.

                            <br>    
                        </p>
                  </li>
    	       	  <li id="status" class="pipe">
                    	<h2>Status</h2>
                    	<p>The "Status" tab is intended to provide the software's administrator a summary of its health and configuration status.  When
                           logging into the configuration interface, this screen is displayed to give a quick, graphical view into the status of the 
                           Application Server.
                        </p>
                        <ol>
                            <li id="status_icons">
                                <h3 class="docs_sub_item">Status Icons</h3>
                                <p>The first section of the Status screen includes five icons, which display the current health of the software. 
                                <br> <br>
                                <u> System Status</u>
                                    This icon displays the overall status of the system.  
                                       A green icon indicates that all of the configuration has been completed and verified.  
                                       A yellow icon indicates that the configuration appears to be complete, but for some reason the configuration 
                                         is broken or invalid.  
                                       A red icon indicates that the system is not fully configured and/or usable.
                                <br><br>
                                <u> Server Installed</u>
                                    This icon displays the status of the basic server software installation as completed by the installation script.
                                      A green icon indicates that the software has been fully installed.
                                      A yellow icon indicates that a problem has been detected with the installation of the software.
                                      A red icon indicates that the software has not been installed.
                                <br><br>
                                <u> Server Activated</u>
                                    This icon displays the activation status of the software.
                                      A green icon indicates that the software has been activated.
                                      A yellow icon indicates that an activation has been completed or started, but it is not valid.
                                      A red icon indicates that the software has not been activated.
                                <br><br>
                                <u> Database Configured</u>
                                    This icon displays the database configuation status.
                                      A green icon indicates that the software has been configured and that the configuration appears to be valid.
                                      A yellow icon indicates that the software has been configured, but a problem was detected.
                                      A red icon indicates that the software has not been configured.
                                <br><br>
                                <u> MV Software Installed</u>
                                    This icon displays the status of the MultiValue software part of the installation.
                                      A green icon indicates that the MultiValue software has been installed and is working correctly.
                                      A yellow icon indicates that there is a problem with the installation, or that the MultiValue software 
                                        cannot be executed.
                                      A red icon indicates that the MultiValue software has not been installed.
                                <br><br>
                                </p>
                            </li>
                            <li id="status_serverinfo">
                                <h3 class="docs_sub_item">Server Summary Information</h3>
                                <p>The second section of the status screen includes some general information regarding the installation of
                                   your application server software.
                                   <br><br>
                                   <u>Server Version </u>
                                      This heading displays the version of the MultiValue Application Server that you are running in the form
                                      [Major].[Minor].[Sub-Minor].[Build_No], indicating the Major Release, Minor and Sub-Minor Revision, and 
                                      Build Number. 
                                   <br><br>
                                   <u>System ID</u>
                                      The system ID is issued by Zumasys and uniquely identifies your installation of the software.

                                   <br><br>
                                   <u>Configured Handlers</u>
                                      The "Configured Handlers" section lists all of the installed URI Handlers.  These handlers are used
                                      internally to map URIs to installed application packages.            
 
                                   <br><br>
                                   <u>Included Modules</u>
                                      The application server software is implemented using a modular design allowing for easy expansion
                                      in the future.  This section includes a list of all of the currently configured modules.

                                   <br><br>
                                   <u>Default Handler</u>
				      The "Default Handler" is used to determine which application is executed by default when no application
                                      handler is defined in the request URI.
                                   <br><br>
                                   <u>Default Resource</u>
                                      The "Default Resource" is used to determine which application program is executed if no application resource
                                      is defined in the request URI.
                                   <br><br>
                                </p>
                            </li>
                            <li id="status_apps">
                                <h3 class="docs_sub_item">Installed Applications</h3>
                                <p>The third section of the status screen includes a list of all of the applications that are currently
                                   installed and configured using the MultiValue Application Server.  To install new applications, use the 
                                   "Apps" tab inside the configuration interface.
                                </p>
                            </li>
                        </ol>
                    </li>

                    <li id="security" class="pipe">
                    	<h2>Security</h2>
                    	<p>The "Security" tab includes all of the configurable parameters related to maintaining the security of the 
                           MultiValue Application Server.
                        </p>
                        <ol>
                            <li>
                                <h3 class="docs_sub_item">Admin Password</h3>
                                <p>The admin password is used to access both the configuration interface at /config, and also any 
                                   MultiValue applications which are accessible using the "sdbc" handler.  You can identify these
                                   applications by looking for /sdbc/ in the request URI.
                                </p>
                            </li>
                        </ol>
                    </li>

                    <li id="docs" class="pipe">
                        <h2>Docs</h2>
                        <p>The "Documentation" tab provides more information about the configuration
                           and setup of the MultiValue Application Server.
                        </p>
                    </li>

                    <li id="database" class="pipe">
                        <h2>Database</h2>
                        <p>The "Database" tab provides an interface to modify all of the parameters specific to your MultiValue
                           database.  These items are required for the operation of your software.
                        </p>
                        <p>The parameters shown on this tab depend on the MultiValue platform type that you have selected.
                           The database configuration parameters are organized into 3 sections: Required Parameters, Optional Parameters
                           and Dashboard Install parameters.
                        </p>
                        <ol>
[DBDOC]
                        </ol>
                    </li>

                    <li id="apps" class="pipe">
                        <h2>Apps</h2>
                        <p>The "Apps" tab is used to view your list of installed applications and to install new applications as necessary.</p>
                        <ol>
                            <li id="apps_installed">
                                <h3 class="docs_sub_item">Installed Applications</h3>
                                <p>The "Installed Applications" section of this tab is used to display the package name, version and handler
                                   name for all of the software packages that you have installed into the application server.
                                </p>
                            </li>
                            <li id="apps_install_new">
                                <h3 class="docs_sub_item">Install a New Application</h3>
                                <p>To install a new application, enter the full system path to the package file that was provided by Zumasys in
                                   the "Package Path" field.  Once the installation has completed, you can access the new software package
                                   using its handler name in the request URI.</p>
                            </li>
                        </ol>
                    </li>


                    <li id="activate" class="pipe">
                        <h2>Activate</h2>
                        <p>The "Activate" tab is used to view and update the license information for your copy of the MultiValue Application
                           server software.
                        </p>
                        <ol>
                            <li id="licensing_information">
                                <h3 class="docs_sub_item">Licensing Information</h3>
                                <p>If you have entered in a valid license, the "Licensing Information" section of the "Activate" tab will display
                                   the information that your license key provides.  If you have not entered in a valid licese, there will be no
                                   licensing information displayed.  You may enter in or update your license anytime by entering it in the "License
                                   Key" text box and clicking on "Update".
                                </p>
                            </li>
                        </ol>
                    </li>






                </ol>
            </div>
            
        </div><!--center_column-->

	</div><!--content-->
    
</div><!--wrapper-->

<div class="clear"></div>

</body>
</html>
 html    documentation.html      status.html     security.html   database.html   apps.html       activate.html   tab     security        docs    database        apps    activate        Sending the HTTP response.      no-cache        post-check=0, pre-check=0       Mon, 26 Jul 1997 05:00:00 GMT          mod_config.c - module execution complete.       [SERVER_INSTALLED_COLOR]        green   [SERVER_VERSION]        1.6.3.8073      [DEFAULT_HANDLER]       [DEFAULT_RESOURCE]      [HANDLER_LIST]  [MODULE_LIST]   [SYSTEM_ID]     dbc     dbType  dbBinary        dbCommand       dbRequired      dbEnvVars       dbAccount       d3Account       dbUsername      dbPassword      dbWorkingDir    dbAcctPath      dbVME   dbAppName       dbHostName      dbPortNum       dbFails maxRequest      [DB_CONFIG_COLOR]       red     yellow  MVAPPS.STATUS   set working dir: chdir("%s") succeeded  set working dir: chdir("%s") failed     Actual database command for MVAPPS.STATUS:      r       Database command failed in modconf_tab_status: %s       Results from database command:  :       INSTALLER-VERSION       APP     <br>    End of database command results.        [MV_SOFT_COLOR] [APP_INSTALLER_VERSION] [INSTALLED_APPS]        Configuration or System problem Database not configured <table cellpadding="0" id="license_info">
        <thead>
          <tr>
             <th scope="row">Server License:</th>
           <td>Activated</td>
           </tr>
        </thead>
       <tbody>
            <th scope="row">Serial #:</td>
         <td>      %i      </td>
        <th scope="row">Users:</td>
      Unlimited       %2i           <th scope="row">Edition:</td>
    SDK     Standard        Professional    Enterprise      Evaluation            <th scope="row">Expiration Date:</td>
      </tbody>
     </table>
       [SERVER_LICENSE_COLOR]  [SERVER_LICENSE_ALT]            Not Activated   
       [LICENSE_TABLE] [SYSTEM_STATUS_COLOR]   package submit_form     true    [PACKAGE]       Package Error: %s       Invalid package file '%s'.      %sbin/mvappsvr readpkg "%s"     %s/bin/mvappsvr readpkg "%s"    Reading Package ReadPKG Error: %s       TITLE   VERSION HANDLER-NAME    INSTALL-HANDLER-FILE    Incomplete package data file.   %sbin/mvappsvr unarchive -i "%s" -p "%sdocroot" %s/bin/mvappsvr unarchive -i "%s" -p "%s/docroot"       Un-Archiving Package    UnArchive Error: %s     Archive file was extracted successfully Unable to extract archive.  See results window for more information.    MVAPPS.INSTALLER %sdocroot/%s/MV-PACKAGE        Cannot prepare database command Installing MV Package   Cannot execute database command Application Install Complete    MV Package Install Error, See the results window for more information   <br>Creating Handler:<br>       %sdocroot/%s/%s %sconfig/%s     %s/docroot/%s/%s        %s/config/%s    Source:         Target:         Could not copy the handler configuration file.  Appending to global configuration:<br>  a       ; %s
   %%include_config "%s"
  Cannot append to configuration: %s      <div class="status green"> <p>Thank you, your package was successfully installed.<br><b>(Package: "%s", Version: "%s")</b></p></div>    [PASSFAIL]      <br><b>Package Installation is Complete!</b><br><br>    Unknown Error   <div class="status red"> <p>An error has occurred, please contact your administrator.<br><b>(%s)</b></p></div>  requesting mvapps.status        <tr><td>        </td><td align=center>  </td></tr>      [APP_TABLE]     <tr><td align="center" colspan="3"><br><b>No Applications Installed</b><br><br></tr></tr>       <div class="status red"> <p>An error has occurred, please contact your administrator.<br><b>(Database has not been configured)</b></p></div>    <tr><td colspan="3" align="center"><b><br>Database not configured<br><br></b></td></tr> [RESULTS_DIV]   <div class="results"><h3>Results</h3><div class=code_wrapper><code>%s</code></div></div>        /dev/null       w       feature install_dashboard       database_setup  database_platform       dbtype  %s/core/%s      %score/%s       %s/platform.conf        Internal Error: platform configuration file "%s" not found.     Internal Error: platform configuration file "%s" is corrupt.    dbVarMode       dm_acct_name    dm_acct_pass    dm_username     dm_password     dm_behavior     %sconfig/dbc_database.conf      %s/config/dbc_database.conf     ; configured by mod_config
     [dbc]
    dbType       = "%s"
    dbCommand    = "%s"
    dbAccount    = "%s"
    dbBinary     = "%s"
    dbUsername   = "%s"
    dbPassword   = "%s"
    dbVME        = "%s"
    dbWorkingDir = "%s"
    dbAcctPath   = "%s"
    dbAppName    = "%s"
    dbHostName   = "%s"
    dbPortNum    = "%i"
    maxRequest   = "%i"
    dbFails      = "%i"
    dbVarMode    = "%i"
    dbRequired   = "%s"
    dbEnvVars    = "%s"
    cTypeIsStart = "true"

       System Error fopen:%s   System Error (install path ): %s        [DBCONFIG]      dbconfig.html   [DBHELP]        dbhelp.html     [DBINSTALL]     dbbinary        dbaccount       dbusername      dbpassword      dbworkingdir    dbacctpath      dbvme   dbappname       dbhostname      dbenvvars       dbportnum       dbfails maxrequest      Invalid entry for "DB Retrys", this parameter must be between 1 and 999.        Invalid entry for "Segment Size", this parameter must be between 128 and 8192.  <div class="status green"> <p>Thank you, your changes have been saved.</p></div>        <div class="ok_to_install"></div>       db_package      install_files   Installing database packages.   logto   install_command%i       Unable to execute installation command, see results window.     Unknown error, see the results window for more information.     <div class="status green"> <p>Thank you, the dashboard software has been successfully installed.<br><b>(Version: %s)</b></p></div>      [DBBINARY]      [DBWORKINGDIR]  [DBACCTPATH]    [DBUSERNAME]    [DBPASSWORD]    [DBACCOUNT]     [DBVME] [DBAPPNAME]     [DBHOSTNAME]    [DBENVVARS]     [DBPORTNUM]     [MAXREQUEST]    [DBFAILS]       [DM_USERNAME]   [DM_PASSWORD]   [DM_ACCT_NAME]  [DM_ACCT_PASS]  [DB_PACKAGE]    [DMB_LOGTO]     SELECTED        [DMB_PROMPT]    [DBPLATFORM_OPTIONS]    pass1   pass2   %sconfig/admin_password.conf    %s/config/admin_password.conf   [config]
         AuthUsername = "admin"
         AuthPassword = "%s"

 System Error: %s,%s     Passwords do not match  <div class="status green"> <p>Thank you, your password has been updated.</p></div>      <li id="database_required"><h3 class="docs_sub_item">Required Parameters</h3><p>The "Required Parameters" section includes all of the paramters that must be set for the software to operate correctly.<br><br><u>Platform</u> Select the MultiValue database platform type that you are using with your dashboard. Other required &amp; optional parameters vary depending on the platform selected.</p></li>  [DBDOC] dbdoc.html      act_submit      license_key     activate_pass   %sconfig/mvdb.conf      %s/config/mvdb.conf     [behavior]
       licenseKey   = "%s"
  %s      /config?tab=activate&activate_pass=true <div class="status red"> <p>License Key not updated.<br><b>(%s)</b></p></div>   <div class="status green"> <p>Thank you, your License Key was successfully updated.</p></div>   <tr><td colspan="3" align="center"><br><b>%s</b><br><br></td></tr>      <tr><td colspan="3" align="center"><br><b>This software has not been activated.</b><br><br></td></tr>     <tr>
     <td align="left">License Key:</td>
     <td align="left">     </tr>
            <td align="left">Serial #:</td>
        <td align="left"># Users:</td>
         <td align="left">Edition:</td>
         <td align="left">Expiration Date:</td>
     [STATUS_MESSAGE]        [LICENSE_KEY]   <pre>   swap tags:<br>  -------------:<br><br>  %s = %s (%i)<br>
       </pre>  check_app_installer 01
 rb      wb      [PACKAGE_FOLDER]        [DBCMDLINE]     Required parameter %s for platform %s is missing.       File required for software installation is missing or cannot be accessed: "%s"; error code %d.  %s/%s           popen2: command is NULL!        popen2: error %i creating pipe fd1      popen2: error %i creating pipe fd2      popen2: error %i in fork        popen2: error %i writing to pipe @ %i bytes     popen2: failed writing %i bytes to pipe @ %i    r       popen2: error %i in dup2 of fd1 popen2: error %i in dup2 of fd2 /bin/sh sh      -c      popen2: error %i in execl                     2                                                                                  @(#)61	1.16  src/bos/usr/ccs/lib/libc/__threads_init.c, libcthrd, bos61B, b2007_33A0 8/2/07 13:09:21                @(#)79  1.10  src/bos/usr/ccs/lib/libm/floor.c, libm, bos610 7/7/04 13:54:29    @(#)08  1.5  src/bos/usr/ccs/lib/libm/fenv.c, libm, bos610 12/26/06 01:00:09        ]    ]    ]    ]    ]    QhABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/                     xA    $                                 %        xA    ,       %      |                      +        xA    $       +                        /        xA    $       /                      4x        xA           4x       ,            4        xA    ,       4      d   $                 :        xA    $       <x          pA~         $   <    A       t   A~        4   d    I         0	A~      ,       N      h   A~      4       _         	A    A~      l      ex         ! !"#$	
FA~     ,  t    gh          A~      |      h         ,   %&'({ !"#$	
FA~     4  $    kx      d    A~          |  \    l      L      %&'({ !"#$	
FA~     |      o8      D      %&'({ !"#$	
FA~     |  \    q      @      %&'({ !"#$	
FA~              s        xA    4       v      |   4A~        4   L    x       l   0	A~      D       @         H	
A~      $             \   A~      $       p       d   pA~         4                A~                            xA    $       4       x   pA~         $   <           x   pA~                  ,      P      h        xA    $                pA~         4   <          4   4	A~               0            @                         X            	      
      p                                  8                X                             m                    _GLOBAL__FI_mvappsvr _GLOBAL__FD_mvappsvr                                                           v@                  |                  d                                                      0                                                                                                                                              `                                                    p                             <                    @            H    P    X                                                                        h                                            (    X            h                                (    H    h                        8    X    `                        @    h                    0    8    h    x                                H            8                                                             8    @    H    P            `    p                                                                                                       X            8    @    H    X    `    x                                        @Y                      (    P     \         0    H    `                                   @    `    À    à                    0    P    X    Ĉ    Ę    Ĩ    ĸ                     0    ŀ    Ű             (    0    @    H            h    p            x    Ơ                                                                                                                             $      2      6      4                                        (    P    h                    (    p    x    ǀ    ǈ    ǘ    Ǡ    ǰ              A                   8           8    0      A8    @    H      E      F                     A"u         @                                                                  H                              (                            0    P            X    p         ɀ    ɐ                      @    `    ʀ    ʠ    ʸ                                             0    @      =8    H    P    X    p    x    ː    ˨            ˰                (    0    X    h    x    Ȉ    Ș    0      F    H      F4    X    ͸                 h    x    Έ                H    X    `    ϐ      G4    Ϙ                      G0              k4         @    h    А    Р                                     0    @      g4    h    h      1    Nx    L     K    J    H    =    90    8@    7    5    1             h            @        p    O     O    O    O(    O0    O8    O@    OH    OX    O`    Oh    Ox    O    O    O    O    O    O    O    P     P    P     P0    P@    Ph    P    P    x    P    Q    Q(    Qh    Qp    Q    Q    Q    Q    Q    Q    Q    R     R    R     R0    R@    RP    Rh    Rx    R    R    R    R    R    R      F            R      F      F      F      F    R      F    S     S     S0    SH    S    S    S    T    T    T(    T8    TH    TX    Th    Tx    T    T    T    T    T    T    T    T    T    U    U    U            b                              o@    p        H    }    n    b      1             8    H    X    h    x                                  [4          _4           W4         @    H    x                                  A\        (    0    8    H    X    h    x                                                 (    @    H    P            `                                                                                     !    !H    !x                    !            !    !    !    !            !    @    H    `    h    p                            @    P    `                                     (    P    `    h                                    (    @    X    `    p    x                                	    	(    	H    	X    	p    	x    	    	    	    	    	    
0    
H    
`    
    
              8    X    x                         (    8    H    x                                        x                @    `    p                                 `    p    x                                     @                                          @    H    `    x                                 8    P    h                                 @    P    `    p                                                (    8    @    P            H    p                            P                        (    8    @    P    `    p                                                  8    @    H    h                             X                          0    H    `    p                    h                 H    `    p                    0    @    H    X    p                                              x         UH    Uh    Up    Ux    U    U    U    U    V    VH    V    V    V    W     W    W     W`            W    W    W    W    W    X8    XH    XX    Xh    Xx    X    X    X    X    X    X            Y    Y8    YH    YP    Yp    Y    Y    Y    Y    Y    Z     Z(    Zp    Z    Z    Z    Z    [    [0    [P    [`    [p    [    [    [    [    \             \    \@    \h    \    \    \    ]    ](    ]`    ]      x    ]            ^    ^p    ^x    ^    ^    _    _H    _    _    _    _    `X    ``            `    `    `    `    a    a8            a    a`    a    a    a    a    a    a                    ̐    ̠    ̰        (                        (    8            @    X              K4      O4      S4      c4                            (    0    8    @    p                    0    @    H    x                                     P    `            @                x        0    h        P                                    8                             0                    H                 x        8    P    `    p                                                @    H    P    X    `    h    p                      d                 0    P    `    p                                              8    H    X    p                                    0    H    h                                    H    X    `    h    x                                            (    8    P    `                                 (    0    X    p                                                1            >      2X    z            2H             8      2h    C    P    Tp    [p      `                2x      2      P      H      P      X      m          m      V`      W)       8      
p      X                         @                    @
                    @
                  %  @
                  -  @
                  5  @
                  =  @
                  E  @
                  L  @
                  U  @
                 d  @                q  @                   @                    @                    @
                    @
                    @
                    @
                    @
                    @
                    @
                    @
                    @
                    @
                    @
                    @
                   @
                   @
                   @
                   @
                 &  @
                 /  @
                 6  @
                 A  @
                 J  @
                 U  @
                 ]  @
                 f  @
                 o  @
                 x  @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                    @
                   @
                   @
                   @
                 "  @
                 .  @
                 7  @
                 ?  @
                 I  @
                 S  @
                 a  @
                 h  @
                 q  @
                 x  @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                 *  @
                 7  @
                 A  @
                 L  @
                 V  @
                 ]  @
                 g  @
                 n  @
                 y  @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                   @
                    @
                   @
                   @                 ,  @                 6  @                 ?  @                 H  @               e !
              p?           ?           ?           ?           ?           L?           x?            ?            ?            ?            ?            ?            ?            ?            8?            X?            ?            ?            ?            ?            ?            8?            P?            p?            ?            ?            ?            ?            H?            x?            ?             ?            P?            ?            ?            ?            	?            	?            	?            	?            
?            
`?            
?            
?            
?            ?            0?            X?            `?           h?           ?            ?            ?            ?           ?            ?           ?           ?           ?            ?           (?           0?           8?           H?           P?           ?            ?           ?            ?           ?            ?            ?            (?           8?            @?           P?            X?           h?            p?           ?            ?           ?            ?           ?            ?           ?            ?           (?     k      0?           8?           @?     j      H?           P?     n      X?           `?     3      h?     L      p?            x?     .      ?           ?     l      ?            ?           ?     m      ?            ?           ?            ?            ?            ?     M      ?           ?     6      ?     +      ?     4      ?            ?           ?            ?     1      ?             ?            (?            0?            8?            @?            H?            P?           X?            `?            h?            p?     N      x?            ?     )      ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?             ?            ?            ?            ?             ?            (?            0?            8?            @?            H?            P?            X?            `?            h?            p?            x?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?     W      ?     a      ?            ?     $       ?           ?            ?     [      ?             ?            (?            0?            8?            @?     Z      H?            P?            X?            `?            h?     0      p?     2      x?     \      ?     #      ?     ]      ?     (      ?            ?            ?            ?            ?           ?           ?            ?            ?           ?     *      ?            ?            ?             ?            ?            ?            ?             ?            (?            0?            @?     &      H?     %      X?            `?            h?            p?            x?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?             ?            ?            ?            ?             ?            (?            0?            8?            @?            H?            P?            X?            `?            h?            p?            x?            ?            ?            ?            ?            ?            ?            ?            ?            ?     5      ?            ?            ?     Q      ?            ?            ?            ?     
       ?            ?            ?           ?            ?     P      (?            0?            8?            @?            H?            P?            X?            `?            h?            p?           x?     O      ?           ?            ?            ?           ?            ?           ?           ?           ?            ?            ?     =      ?            ?     R      ?     "      ?            ?             ?            ?     <      ?            ?             ?            (?            0?            8?            @?            H?            P?            X?            `?            h?            p?           x?            ?            ?            ?           ?            ?           ?            ?           ?            ?            ?           ?           ?            ?            ?            ?            ?            ?            ?           ?     T       ?     d      (?     B      0?     S      8?     f      @?     ,      H?     h      P?            X?     g      `?     e      h?     i      p?           x?     U      ?     V      ?            ?            ?     `      ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?             ?            ?            ?            ?             ?            (?            0?            8?            @?            H?            P?            X?            `?            h?            p?            x?           ?            ?            ?            ?            ?            ?            ?            ?     A      ?            ?            ?            ?            ?            ?            ?            ?             ?            ?            ?            ?             ?           (?            0?           8?            @?            H?            P?            X?            `?            h?            p?            x?            ?            ?            ?            ?            ?            ?            ?           ?            ?            ?            ?     '      ?           ?     >      ?           ?            ?             ?            ?            ?            ?             ?            (?     F      0?     G      8?     ;      @?            H?            P?           X?            `?            h?           p?            x?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?             ?            ?            ?            ?             ?            (?            0?            8?            @?            H?            P?            X?            `?            h?            p?            x?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?             ?            ?            ?            ?             ?            (?            0?            8?            @?            H?            P?            X?            `?            h?            p?            x?            ?            ?            ?            ?            ?            ?            ?            ?           ?     ^      ?            ?           ?           ?           ?           ?            ?            ?            ?            ?            ?             ?            (?            0?            8?            @?            H?            P?            X?            `?            h?            p?            x?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?           ?            ?     8      ?     H      ?     :       ?           ?            ?            ?             ?            (?            0?            8?           @?            H?            P?            X?            `?            h?            p?            x?            ?            ?            ?            ?            ?            ?            ?           ?            ?           ?            ?           ?            ?            ?            ?            ?             ?            ?            ?            ?             ?            (?            0?           8?            @?            H?            P?            X?            `?            h?            p?            x?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?            ?           ?             ?            ?            ?            ?     J       ?            (?            0?     -      8?            @?           H?            P?            X?     C      `?            h?     !      p?            x?            ?            ?     K      ?     E      ?            ?     	      ?            ?            ?            ?            ?     ?      ?            ?            ?            ?            ?            ?              ?             ?             ?             ?              ?             (?             0?             8?             @?             H?             P?             X?             `?             h?             p?             x?             ?             ?             ?             ?             ?             ?             ?             ?             ?             ?             ?             ?             ?             ?             ?             ?            ! ?            !?            !?            !?            ! ?            !(?            !0?            !8?            !@?            !H?            !P?            !X?            !`?            !h?            !p?            !x?            !?            !?            !?            !?            !?            !?            !?            !?            !?            !?            !?            !?            !?            !?            !?            !?            " ?            "?            "?            "?            " ?            "(?            "0?            "8?            "@?            "H?     /      "P?            "X?           "`?            "h?            "p?            "x?            "?            "?            "?            "?            "?            "?            "?            "?            "?            "?            "?            "?            "?            "?            "?            "?            # ?            #?            #?            #?            # ?            #(?            #0?            #8?            #@?            #H?            #P?            #X?            #`?            #h?            #p?            #x?            #?            #?            #?            #?            #?            #?            #?            #?            #?            #?            #?            #?            #?            #?            #?            #?            $ ?            $?            $?            $?            $ ?            $(?            $0?            $8?            $@?            $H?            $P?            $X?            $`?            $h?            $p?            $x?            $?            $?            $?            $?            $?            $?            $?            $?            $?            $?            $?            $?            $?            $?            $?            $?            % ?            %?            %?            %?            % ?            %(?            %0?            %8?            %@?            %H?            %P?            %X?            %`?            %h?            %p?            %x?            %?            %?            %?            %?            %?            %?            %?            %?            %?            %?            %?            %?            %?            %?            %?            %?            & ?            &?            &?            &?            & ?            &(?            &0?            &8?            &@?            &H?            &P?            &X?            &`?            &h?            &p?            &x?            &?            &?            &?            &?            &?            &?            &?            &?            &?            &?            &?            &?            &?            &?            &?            &?            ' ?            '?            '?            '?            ' ?            '(?            '0?            '8?     9      '@?            'H?            'P?            'X?            '`?            'h?            'p?            'x?            '?            '?            '?            '?            '?            '?            '?            '?            '?            '?            '?            '?            '?            '?            '?            '?     I      ( ?            (?            (?            (?            ( ?            ((?            (0?            (8?            (@?            (H?            (P?            (X?            (`?            (h?            (p?            (x?            (?     c      (?            (?            (?            (?            (?            (?            (?            (?            (?            (?            (?            (?            (?            (?            (?            ) ?            )?            )?            )?            ) ?            )(?            )0?            )8?            )@?            )H?            )P?            )X?            )`?     D      )h?            )p?            )x?            )?            )?            )?            )?            )?            )?            )?            )?           )?            )?           )?            )?            )?            )?            )?            )?            * ?            *?            *?            *?            * ?            *(?            *0?            *8?     7      *@?            *H?            *P?            *X?            *`?            *h?            *p?     @      *x?            *?            *?            *?            *?            *?            *?            *?            *?     Y      *?     X      *?            *?            *?            *?            *?            *?            *?            + ?            +?            +?            +?            + ?            +(?     b      +0?            +8?            +@?            +H?            +P?           +X?           +`?           +h?           +p?            +x?            +?            +?            +?            +?            +?            +?            +?            +?            +?            +?            +?            +?            +?            +?            +?            +?            , ?            ,?            ,?            ,?            , ?            ,(?            ,0?            ,8?            ,@?            ,H?            ,P?            ,X?            ,`?            ,h?            ,p?            ,x?            ,?            ,?            ,?            ,?            ,?            ,?            ,?            ,?            ,?            ,?            ,?            ,?            ,?            ,?            ,?            ,?            - ?            -?            -?            -?            - ?            -(?            -0?            -8?            -@?            -H?            -P?            -X?            -`?            -h?            -p?            -x?            -?            -?            -?            -?            -?            -?            -?            -?           -?            -?     _      -?            -?            -?            -?            -?            -?            . ?            .?            .?            .?            . ?            .(?            .0?            .8?            .@?            .H?            .P?            .X?            .`?            .h?            .p?            .x?            .?            .?            .?            .?            .?            .?            .?            .?            .?            .?            .?            .?            .?            .?            .?            .?            / ?            /?            /?            /?            / ?            /(?            /0?            /8?            /@?            /H?            /P?            /X?            /`?            /h?            /p?            /x?            /?            /?            /?            /?            /?            /?            /?            /?            /?            /?            /?            /?            /?            /?            /?            /?            0 ?            0?            0?            0?            0 ?            0(?            00?            08?            0@?            0H?            0P?            0X?            0`?            0h?            0p?            0x?            0?            0?            0?            0?            0?            0?            0?           0?            0?            0?            0?           0?           0?            0?           0?            0?           1 ?           1?           1?           1?           1 ?            1(?            10?            18?            1@?           1H?            1P?           1X?           1`?           1h?           1p?           1x?           1?     /opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.2.0/ppc64:/opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.2.0:/opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.2.0/../../..:/usr/lib:/lib    libc.a shr_64.o  	__rtinit  errno  chdir  chmod  chown  close  _exit  mkdir  pipe  socket  ngetpeername  ___bzero64  ___memset64  ___memmove64  _iob  __mod_init  malloc  free  realloc  exit  strlen  freopen  fopen  fprintf  fclose  strncasecmp  strchr  atoi  abort  stat  write  getpid  time  	snprintf  fflush  	__flsbuf  fstat  usleep  printf  fwrite  tolower  fp_read_rnd  read  strncmp  fputc  fgets  sscanf  
__fd_poll  __fd_select  isspace  fread  toupper  atol  strdup  fgetc  strtoul  lstat  fputs  
localtime  gmtime  execl  isprint  strcspn  fp_set_flag  fork  strstr  dup2  opendir  	closedir  	isxdigit  pclose  popen  fdopen  __fd_getdtablesize  getopt  puts  setvbuf  utime  	strerror  	strftime  fp_raise_xcp  fp_is_enabled  
fp_enable  fp_disable  putchar  	wordfree  wordexp  send  connect  recv  	difftime  ftime  
inet_ntoa  strcasecmp  gethostbyname  getservbyname  setenv  fp_trapstate  fp_disable_all  fp_swap_flag  fp_clr_flag  fp_read_flag  fp_swap_rnd  __n_pthreads  __crt0v  optind  optarg  __malloc_user_defined_name  __start                                                                                                                                                                                                                                   ./useragreement.txt                                                                                 0000644 0000000 0000000 00000026037 13364666755 013355  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   SOFTWARE LICENSE AGREEMENT


      Thank you for selecting the Software offered by Zumasys.  Please read this Agreement carefully.  

      By (1) clicking or otherwise indicating your electronic acceptance, (2) signing this Agreement, or (3) installing, accessing or using the Software, you (either personally or on behalf of an organization) accept all the terms and conditions of this Agreement.  
      
      If you do not agree with any of the provisions of this Agreement, do not indicate your acceptance of this Agreement, do not install or use the Software, and if you paid a license fee for the Software, immediately contact Zumasys in order to return the Software for a refund in accordance with the Return and Refund Policy described in the Zumasys Terms of Use found at http://www.zumasys.com/terms-of-use


1.	Definitions.

"Computer" means a virtual or physical device that accepts information in digital or similar form and manipulates it for a specific result based on a sequence of instructions, including without limitation desktop computers, laptops, tablets, mobile devices, telecommunication devices, thin client terminals, internet-connected devices, and hardware products capable of operating a wide variety of productivity, entertainment, or other software applications.  If a server license is acquired, "Computer" will also refer to a server.

"User Guides" means Zumasys' then current, generally available user guides for the Software, whether in electronic, paper or other form, which can be found on the Zumasys website.

"End User" means the user or users who is/are permitted under a license to use the Software.

"Licensee" means you or the organization on whose behalf you entered into this Agreement.

"Permitted Number" means the permitted number of Computers in which the Software may be installed.  If a Server License is acquired, the Permitted Number means one server and the permitted number of End Users.  The Permitted Number may be found on the invoice, receipt, or by clicking on "About" in the Software.    

"Software" means the Zumasys Software, including content, updates and new releases, for which the Licensee acquired use in accordance with this Agreement.

 "Zumasys" means Zumasys, Inc., a California corporation.

2.	Grant of License.  

      2.1	Subject to continuous compliance with this Agreement, Zumasys grants to Licensee a non-exclusive, revocable, limited right to install the Software in the manner and for the purposes described in the applicable User Guide, and only as applicable to the type of license acquired (e.g., single user, multiple user, or server license).  
      
      2.2	The foregoing license does not convey any rights of ownership in the Software.  Zumasys reserves all rights not expressly granted in Section 2.1.

3.	Restrictions.  

	3.1	Licensee will not exceed the Permitted Number when installing or using the Software.  

      3.2	The Software and this Agreement are transferable by Licensee only in accordance with the applicable User Guide, or with prior written consent signed by an authorized representative of Zumasys.  Any transfer in violation of this restriction will be void and the license to use the Software may be terminated by Zumasys in its sole discretion.

	3.3	The Software is owned by Zumasys and is protected by copyright, trade secret, and other intellectual property laws.  Except as may be expressly permitted in Section 2 above, Licensee will not: (a) modify, adapt, alter, translate or create derivative works of the Software; (b) decompile, dissemble, reverse engineer, or otherwise attempt to derive source code or other non-public features, elements or data, of the Software; (c) probe, test, tamper with, defeat, disable or circumvent, any encryption, security measure, protocol or other protective mechanism related to the Software; (d) sell, sublicense, lease, rent or distribute any portion of the Software, whether for profit or without charge; (e) make the Software accessible to the public or third parties, whether over networks, electronic bulletin boards, websites, service bureaus or otherwise; or (f) enable, encourage or allow anyone to do any of the foregoing.

	3.4	Except as expressly permitted under this Agreement, the copying or reproduction of the Software to any other server, location, or hardware is expressly prohibited.  However, Licensee may make copies of the Software for backup or archival purposes.

	3.5	Licensee will not export the Software, directly or indirectly, in violation of applicable laws or regulations including, without limitation, U.S. export regulations or the laws of any other country from which the Software is shipped.  

	3.6	Licensee will not remove or modify any proprietary markings in or on the Software.

4.	Limited Warranty.  

      4.1	Zumasys warrants to Licensee that the Software will perform substantially in accordance with the applicable User Guide for a period of 90 days after the date of purchase.  All warranty claims must be made within the 90-day warranty period by contacting Zumasys via email at support@zumasys.com or by telephone at 866-986-2797.  
      
      4.2	Despite Section 4.1, if the Software was provided to Licensee free of charge (e.g. the Personal License or a 30-day Trial License), the Software is delivered "AS IS" and with all faults, and without warranty of any kind. 
      
      4.3	OTHER THAN AS EXPRESSLY PROVIDED IN SECTION 4.1, ZUMASYS EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES, WHETHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE, TITLE, MERCHANTABILITY, NON-INFRINGEMENT, ACCURACY, RELIABILITY, SECURITY OR COMPATIBILITY.  ADDITIONALLY, ZUMASYS DOES NOT WARRANT THAT THE SOFTWARE IS FREE FROM BUGS, VIRUSES, INTERRUPTION, ERRORS, THEFT OR DESTRUCTION.  
      
      4.4	The entire liability of Zumasys related to any warranty claim under Section 4, and Licensee's sole and exclusive remedy under any warranty, will be limited to, at Zumasys' option: (a) repair of the Software based on the warranty claim; (b) replacement of the Software; or (c) a refund of the license fee paid by Licensee for the Software.  Replacement of the Software and refunds of the license fee will be subject to Licensee's return of the Software to Zumasys.  The warranty for replacement Software will be 30 days after the date of replacement or for the remainder of the original warranty term, whichever is longer.  

5.	Support and Maintenance.  Any support and maintenance not covered under the warranty described in Section 4 will be performed subject to Licensee's payment at Zumasys' standard rates.  Upgrades, including improvements and updates to the Software, may also be subject to the payment of an additional fee.

6.	Limitation of Liability.  TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE ENTIRE LIABILITY OF ZUMASYS AND ITS AGENTS FOR ALL MATTERS AND CLAIMS RELATING TO THIS AGREEMENT WILL BE LIMITED TO THE AMOUNT THE LICENSEE PAID FOR THE SOFTWARE DURING THE 12 MONTHS PRIOR TO THE DATE THE CLAIM AROSE.  ADDITIONALLY, SUBJECT TO APPLICABLE LAW, ZUMASYS AND ITS AGENTS WILL NOT BE LIABLE, WHETHER IN CONTRACT, TORT, OR OTHERWISE, FOR (A) INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES; OR (B) DAMAGES RELATING TO FAILURES OF TELECOMMUNICATIONS, THE INTERNET, ELECTRONIC COMMUNICATIONS, CORRUPTION, SECURITY, LOSS OR THEFT OF DATA, VIRUSES, SPYWARE, LOSS OF BUSINESS, REVENUE, PROFITS OR INVESTMENT, OR USE OF SOFTWARE OR HARDWARE THAT DOES NOT MEET ZUMASYS SYSTEM REQUIREMENTS.  THE ABOVE LIMITATIONS APPLY REGARDLESS OF WHETHER ZUMASYS OR ITS AGENTS HAD KNOWLEDGE OF THE POSSIBILITY OF THE LOSS OR DAMAGE.  

7.	U.S. Government Users.  If any agency or other division of the U.S. Government is the Licensee, the Software is provided with the license rights and restrictions described in this Agreement and any other legally required provisions of the United States government.

8.	Termination.  Zumasys may immediately terminate this Agreement, including the license to the Software, if Licensee fails to comply with any of the provisions of this Agreement or applicable laws.  Upon any termination, Licensee must immediately stop using, uninstall and destroy all copies of the Software of all End Users and otherwise, except one archival copy may be retained for legal purposes only.  Sections 3, 6, 8, 9 and 10 of this Agreement will survive and remain in effect even if this Agreement is terminated.

9.	Interpretation.  If an ambiguity or question of intent arises, this Agreement will be construed as if drafted jointly by the parties, and no presumption or burden of proof will favor or disfavor either party by virtue of authorship. All references to "including," "such as", or "for example" are intended to be interpreted in the broadest sense and without limitation.

10.	Other Important Provisions.  This Agreement (a) does not create any agency, partnership or joint venture; (b) embodies the entire understanding between the parties pertaining to the subject matter, and any additions or modifications to this Agreement must be made in writing and signed by both parties; (c) will inure to the benefit of and be binding upon the parties, their successors, and permitted assigns; (d) cannot be waived by failure to enforce any provision, except in writing; (e) will be construed according to the laws of the State of California, without giving effect to its conflict of laws provisions, and any action brought regarding this Agreement must be filed exclusively in the state or federal courts located in Orange County, California, U.S.A.; (f) will be construed as severable, so the invalidity or unenforceability of any provision will not affect the validity or enforceability of any other provision of this Agreement; and (g) has been entered into with the authority of Licensee and is legally binding on Licensee.  

11.	European Union Provisions.  Nothing included in this Agreement (including Section 10) will limit any non-waivable right to decompile the Software that may be required under mandatory law.  For example, if Licensee is located in the European Union (EU), Licensee may have the right upon certain conditions under applicable law to decompile the Software if it is necessary to do so in order to achieve interoperability of the Software with another software program, and Licensee has first asked Zumasys in writing to provide the information necessary to achieve such interoperability, and Zumasys has not made the information available.  The decompilation may only be performed by Licensee.  Zumasys has the right to impose reasonable conditions before providing the information.  Any information supplied by Zumasys or obtained by Licensee, as permitted under this Section 11, may only be used by Licensee for the purpose described and may not be disclosed to any third party or used to create any software which is substantially similar to the expression of the Software, or used for any other act which infringes Zumasys or its licensors' copyright.

12.	Contact Information.  If there are questions about this Agreement, please contact Zumasys at:

      Zumasys, Inc.
      1050 Calle Amanecer  Suite A
      San Clemente, CA 92673
      (949) 346-4228

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/                                                                                         0000777 0000000 0000000 00000000000 13364666755 011620  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/logs/                                                                                    0000777 0000000 0000000 00000000000 12534142432 012537  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/                                                                                 0000777 0000000 0000000 00000000000 12534142432 013244  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/                                                                              0000777 0000000 0000000 00000000000 13005675162 013636  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/favicon.ico                                                                   0000666 0000000 0000000 00000002176 12534142432 015760  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                            h     (                                g܈k_ߔ v iF ĹĹ¶
ƻǼ ܇vۇiø¶n;˿#{  ƶ ԰jɹymgbqڄUGM                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/                                                                        0000777 0000000 0000000 00000000000 12534142432 014744  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/basket_error.png                                                        0000777 0000000 0000000 00000001432 12534142432 020137  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥S]HSa~qN45HHeЅxQEw	AA"]d((Rs%:6Qmg;)Q0:<sJ)ǮWx<jO?.k*LB7ptr)嚙 H+p<sӞ
 Hڦ-QA,ķpk$[ٛ
/Tpi|@ jJ1W~]$Z5{Cf<l636t[c"<LE'ؗÎd&N1"Qt(֌<3NsRyyAPxd25E@0D"Ǆ=#[XX،ϫ%]-PƇj!|bArcaBCNZ=Q{eMi⏡WII6e0oDg<#{phRX*6 myfs8gI 	V8@QIJ5I<U? %Ks,^dBMZYArᆎMJHfיA&CC/]HI
q"Ԛ(P)D=.D]c-4#o|Zel b{2	qk)QIQBɊy' };>    IENDB`                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/shape_square_link.png                                                   0000777 0000000 0000000 00000001202 12534142432 021145  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥OSaB5iRhkM.N]/pQQW7mhLCP-
1rq-)gz>yߓ*G!8xޏ"(`"6nN  
(=Xin&0UEODRNDT]-=# 5YTTo=' FrDA<'YJ$a cv'Y]ű,(nOϯ>,J ưޓWnܻ뺜][ӗ0BFBAlۦXWX\wnXxzH"'b6`O\ BOOe xWFlmmjx|kK$zn 5v/@뺨0{zL|:~;33ORO4M2e155mj>p"ȆB2Y59sP6FuG%1    IENDB`                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/report.png                                                              0000777 0000000 0000000 00000001211 12534142432 016763  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍSkQAC(T=
BPlEɫJRE<I[l"&,$-Aݷμl%f7߬{޿Zx*ܵ9mJR۝PW+pgHhUU|>og񣂕Bo P ciiZ$ \ <x,-IDB``Mda g;M r =d ypH@ٌv ZC0uuUx% j 4P* 2D{<Gk'ooI#=nGZ$W1W^Qtz5"CnjEeb8j	nErEJRY"Ƞ[mېd@a/M/O 1N``*%x	Hzh4xU4tV+I5dgJRI-]Nvq`?|>ȶ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/bug.png                                                                 0000777 0000000 0000000 00000001406 12534142432 016233  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˝OSQ\^[تtz%l$***2:
iRp
c0ąKw&&`44(eKɽwwrOX\HiscUQz@;քIdTaˀ)jC'يKT8=ʯ9ނ^zΘ 1OFZ[W-Gz?&%*MGnN!aO>Nc[ɨX·0Nqg*1Sub|{g|fz)̾&\5\	0	3iD;`|0>A?Tx4^`oqs`>ʦ`fCv@mX[r\At.)G[Ì`N1)BWs+:NdsVa*DX.pB&B]H@T3@Pڏڠ	wVP63yp-4Ǽ$H'9{m@U$ZjCX:TgL::?[#{1P=.2F\iA-D77qXIפb4kaAj%
ͼj&Q˫H&s.
`jKLE3*ΫXw6_l=@hߊv,qq    IENDB`                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/application_cascade.png                                                 0000777 0000000 0000000 00000001014 12534142432 021417  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ+Q_\""Yv,R"6%hb5%Z(]kFw¼~gb593nK,σhygOY	k>fm#2y|ĿD+KoGwS Q)uCIfG/Ĥ#jQIe2SK>byZ~9g7z&8\hp$StcXpEhtJ.4 l~duI*|y?<
&y}{".Z|GS:*cz x F@(#pn *;.vBC_?şt.Ѝ/Vl|	m= .d0nSu0ATѣPyw|Tꍉ+#{"Wb    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/sound.png                                                               0000777 0000000 0000000 00000001142 12534142432 016603  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8K`Ncc0V!s8ۘ%iŵY61ad!_ZoZ,Lax/=ͣ0/a\~1XƆ_yr 6TZ۶rǊ-ǱO-k	H3d~ժ|VRyVms/X\x	\DKPVGlja{{fYީn$wZ:ky_tnl6aY0rs|蠷1^3_rlq`6"`OH58QD	٪S j4֡(
(DQD0%Y B3	<~W(Xif
M@ ؤ澞=3H<9rϲbk9<D+!}8wH й\gU^Ue>x+JrolHl>9YN{rJ7*3h|Uo<>    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/page_error.png                                                          0000777 0000000 0000000 00000001431 12534142432 017601  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATKe ?yi 1+ZIH7	"(!*
Emm#\DiэpAV&!RVV86sLɅ#K؄ _.N侘|ms {tC)14LH.{ۋ>5{/rYAib`=vVS"eնizu[{s^?y׳-gDlbBDPA6[P 	((AP"%Bi_^<oԖ+4#ȤBF]RBa0'\m:kWZ(IEPД0Є^#V]xPsقHTDP"%BdC?|MFݣ+*2%Df"=hdl{gO*]
Ԛ2$3?9Qԧ7MPtIVJWjUOoqx;N3͞9kAjjR?IKV~%7l}_?zжcld+vpz6=N;c	=U5:>ݙ:Z4|^D㻏N3',_fGf}'rs(3Ǐl' (sw|i|0"6\ښ)kZeMYk5Kmdw+RO    IENDB`                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/group_link.png                                                          0000777 0000000 0000000 00000001532 12534142432 017627  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ[Lapꢋ誋Nfu9}a@&<P ,/QR4Q,B>CST[cLGM5"Ll*oZ={m _	M{&1QR'UkÏ;X TV55)[)[0Gik8,;1d
]`۬<s#Va/,:YcMi:Q>I>f'FSY+~*[쵒x^C5U8(: %|7 WH娸[jBp#J:5Wܻ'O8⬖E4LƃJbJ<ٸRԕd/!Lb	T&u0UzwnPԗ>)TR0}}<5qWgS%n>Wz.+.- _ )AEe/Wa0033qtuuA̓RKbdl9N#zx]}!t-TڟR	 R%HR:**j;IxŇ>(,Y8ntwwjd.p8~@,1^Vl] i4pF\urt5A<ų9Zod	0a`2P(C^ssN73x shxWC^&H20:d߳$
?lu}<    IENDB`                                                                                                                                                                      ./mvappsvr/docroot/db/icons/bell.png                                                                0000777 0000000 0000000 00000001425 12534142432 016375  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕[Haƅn
m[n-OEB#1HŲfEx*G	KIq(94f5:[6O4OQf]<}>}	?iTrP76(&%JLJnUws"Zؾ91چyM}VӺ b䎪EgO\Z,;[1ەWS<àe|q ||s1}7	p*xp49
e@;ڧXas$̼Ǵ ܚHT'U *KSdwfj^0&c0VvFE	t<^ \x'25b\1ZJ>QJC~1>l- L[a">zC1X1"&삽w1LPw) :W1`4Tb2<aa0hID3j3,u1[# ]dCqK _z3磳f Xd$@ٞ8=dU0q]".$e+tww`AɅ7EҠ+އX(2yЗ%<Jڌn1i'%f	YLISNd>wLοV%`
x0WG\D:IrSJwSh%ɴvq2_Hv    IENDB`                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/folder_add.png                                                          0000777 0000000 0000000 00000001234 12534142432 017540  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  .IDAT͋Ma su;D&n#1FI$SJ)NJbAԐw%/yy~)E6|>F0Myu}e
c~ɐX.6c@d`ߗ~}t@Th\::y p9$gU'3_&Z0HTLi݉A&`jrH.5|K
?t+whR	,ŎC	ENL	ұŎD: s!\leNnzrDm!r!T' #7lVVp#"	\HoVpe"6mn;_޳RT@.ȖQ2ed+\{QeuG7.pt/܊3)6Q+vo'|\҆wn%2f;;ZD!'ߜ߱Cj}1"o"jAn$/cmKfG<!>OIq`PƀΌs-M    IENDB`                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/cup_add.png                                                             0000777 0000000 0000000 00000001313 12534142432 017052  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ]IDAT8˭SKhSAYs.iET]ڊTAŪjZk[.jmhƖ4h^jҐ?$mE !AQA7s} `C
f}>߬VWW%#_;81D-|>/b.d2p\q!8Bt`\=)>-N;IdY8n$2ժ9}T*	*3ng{yyF5.> ?߉3&-$;Q,EIf+jej5+ 9x0La6:::"k Vd8xO
+++LRk	E>6B!b1DQd('p)tznT*HdDBdqo/zh>\93
E; uatTJzO`G*-]f*	_;IdffOVeYZB'Ģ%~\c$h4N6nU/TڇGPYfkXj|(vgL~m݌tGb
Z    IENDB`                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/lock_open.png                                                           0000777 0000000 0000000 00000001327 12534142432 017431  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  iIDAT8ukQ;i
)R5pB7+)
a܈@@Ņʕ4jh>3q\!{8{jzZ{+ccc̽ ^Pi@R!y +++Iպ199Зz|(OJ%h4h6 OTRaNzq)bl6/A Pfgg)
;
T3ưAOsjj:ohXk{ibbbBWWQSXk9sш5IRkuO
9w*Q c(<Tf ip
6Vz,p`=ςXʃ뇁#'FyY8J'`cڵx
]dx5p	vD,4@b5;@9ldy`¾< Vav5x$Įs)Z'TSؿ"x1㔵"O8Ĵk52}ؔ,86O2VND,]W؝Aesz,!~l2/cR8v2c{bmX&KqW.rOX    IENDB`                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/text_superscript.png                                                    0000777 0000000 0000000 00000000645 12534142432 021111  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  7IDAT8c?%a2BZ6ud= Ԩvad{!q)=0@qqiiipuu= Rc_q!lҽ90 j jyHyuѕ kL2.&_pЋ?@###5la֛><w?'wssYh, h _SSs%$$>

4 j6 j> | L 6ca޷    IENDB`                                                                                           ./mvappsvr/docroot/db/icons/folder_find.png                                                         0000777 0000000 0000000 00000001433 12534142432 017731  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}MhTgO3DmhqQ"ZvFhi骥R-Y)h]*vSZn\؅%W'&d̝{;Z΁Á9y(U|wLulţ{C'F j䉞}m[w߿}מ[-]{/!r=q f'j%گW>7jͺXof3;WN/C窕bgLOM>-\^U#{>P*iR#hwNۓonO[J\ӿz	HsSD0`|.GvwYR9c^' ⏘0N2gɭdz-*y Y"ﵫѫ;k_ӗ+X]_$(W33SjGIF>Kqlk}'
Рf]<>7@4k, % 1bZ381FL1.6#ľЈX@jb5Hnm" "
De$ZlE.bj/N	@/@B[gF=fH1Yc0A Z
3D؇"P7C\zz̀B a    IENDB`                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/medal_bronze_delete.png                                                 0000777 0000000 0000000 00000001332 12534142432 021437  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  lIDAT8}kA.Tjq&F#?H#H;Q1XH"	bcB4AQb@T$DKݝݱxK2;FU.*"CC{R.?>f݋gUQ\.Vt0wyTh-Q$4? yZ XK`-!0]]Ĵ:kjbn4ý#8?O@ɉIP{ε٦vB(a$T\xT3 Ã<q+5ӟH*LBs^O.A>ubV	.w,EUӕF당P'z#:0G]Zgu}Q<Qrqpy~blzjc-N w{5D'8ǉRc߹+4wvpC~- Ţ136#g(<8Klؐ+GS*XQt+o"f[_ߟ*B1!	T1moB&5Ïk3Dmt7. ӕi3A"jS)w,NeP,L8#|  q ֤{P5Q(|z"	#$UޱAyxHt    IENDB`                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/drive_burn.png                                                          0000777 0000000 0000000 00000001140 12534142432 017610  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SAkA}IRErH魗RK?_ kC%CSALnRFK6u]3Y^<dcf~ޛa
9TzŢA`>G~ٌVZP#U2lgY4v~RZBg|kY!t]ⅴd2(
DZpu:n6\]KV1D"!MD*Bل8I:y$0DH0t:ETBۭy8 DIK"NԠLiC	ܒ(ʊ(ϋ\.G5eX+}!1?	OXz_RYDb1LO|61{Ǣ\yxHy=`=8'Bk4aE3š}}6tw8K1~6^rpǘw7?&ww-?K W=OnIW`p䆷a`R=    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/tab_add.png                                                             0000777 0000000 0000000 00000000750 12534142432 017035  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  zIDAT8œ;KCA}`BODA[U;ZHc!lb4vJH@0"0$\M|a,;gvc'U`μ;`ɲ}|^  o~:1{qq\L&@b;I&	!XkMGGm@)mp-I@!{E4Z!UJ"J D)1LlsrWvkPt144W̉OFq%~}NS߹A:%fgmfm'ً152l"[ɠ[h3u|!WJY -nsIR]/e-рj& q_l @#P6˯.r    IENDB`                        ./mvappsvr/docroot/db/icons/table_lightning.png                                                     0000777 0000000 0000000 00000001340 12534142432 020605  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  rIDATMluOwݺ5d[mdpjN81f<c49qǋ e'g e[3f۵ݠ]Y&'oT>w#u23@P5QC5DG~i1S{9/inaQ01Le]#~KS	§&M<U1ܜ|tf̦x<ڬS_g(!EIu@uZQ)g8=pȳ%.^{>XLrfXkDMuŎ!2H
X+"Y'\ ͠.v<W/cbtdFbCoS*Im^:;{GR6,>!b&z~hzpEro"
'E6j?kĉUرqw<{+e_<7fyeo'S"f]tgˍ<Sܫgf(
m[1-BǙ??Lv~_>ӶpJ2?Mg:[hUCymUepw6L3wUnuQ(*FPCT?ń"zW5    IENDB`                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/control_fastforward.png                                                 0000777 0000000 0000000 00000001137 12534142432 021541  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SɊ*A詿@DAEуOHDD⾶.(*T2atWFDo?~mjf5snj5VVr* Ȫ rInplFREG/y>	޻ݎLӤ$AP(|^&U6Gk2Cb0z0x&Q¯l6di(ɫՊVz=2P2ԟY($.`~OBX%ݮ)P4kJdN'CXprH$b<Ę ʇ
QMH[3/Jq؀OIFZ(zY.rAi\Wr^MsU,1	!
 #+@Dm鴚JL^V3N2!3DzꏫH$X,ƅ%=g],	"wꯗ)*`P$rt6+>eD1+    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/shape_flip_horizontal.png                                               0000777 0000000 0000000 00000000623 12534142432 022041  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  %IDAT8=JQ31>4-M .z nf@D .BA4)Li)I9`Y;1OJ3ݍma9
 =1! cʓM2y^$&Ak&J)LccJNv#DF- PVʝUkrL	X̔n</'z)*`h,F56*^ZF./DSӉ٘ ڿ(RR	Xq0x 
CA& D/&o~߰    IENDB`                                                                                                             ./mvappsvr/docroot/db/icons/lorry_delete.png                                                        0000777 0000000 0000000 00000001253 12534142432 020147  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  =IDAT8˥SKHa=Q'SJ[ 
P챓M	A"U- A )0j-hqMa5c$~gqI`=O0s@@d9"9uk/f	U@ P&(;	S!2AAe:YYTQ oQ&39꛼wqȢw1\i "=x.Ēk`+ `ˠ4g"#XRԇ8w p.ݓș%;/.,B%8PYqlS
ٌଃ#:REnqyq/Pr8Uq
 9s
Df*kB^OLMbK9/F?ߌí-T%M^M#jB~|Y
g^a_mhh4:  `(\} 	W>ЍJxbjvi̵t)1tj V=V
Kˇ>Xvay`zްv{RcbOН߬Ȉ]\    IENDB`                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/style_go.png                                                            0000777 0000000 0000000 00000001536 12534142432 017307  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅ILaLam(Mj*(A=Abhzh4V\	FCXBYTJ;m$_^{2j4[ffN
agr,Lxx7xa	`K7@Mot[o˾}Af cYFz}nq~B"p0p{un&UdyLܼ+'u\)L։&_WRxvJ|@rl3i9 $(5j uMuW8t9a,OFk݃A-[tv~`$:L]?&(&79gg ﷕Debk<sgWf|~@ĝj<((o_u_rO<.{0ٶHa|@zLwQ[vu.R))ٙg*ഭVD$vz:J乿CZLrJ$#BTc3Ⱦz?utL`1c*(Lо=#uE~D"@%'"qv*_&H;ZYS#1%;by^69
]=3fP<֨iw$@$t |U}5ysh!.
;ɱz(hRN_[X':Dohzn<    IENDB`                                                                                                                                                                  ./mvappsvr/docroot/db/icons/cog_delete.png                                                          0000777 0000000 0000000 00000001517 12534142432 017553  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uSKHQofL$QT0f%Һ1ht(nBtgJC(.E,n`%U`bCIBlbb43
6pg{syoXZ~J_e\Pȁ8M2\3"Y.}Ʀ=l2crZLk{X~w`kkkLAIDJXRbE!}ܷqpzzz=K$䅑l9#慠u"*sW2&iT)Fhn *aP ###qD"yfD=:Ж*,--e,C۹#U$R|@}NSBM"oHN*FNx1L3ٍt:݌cF>W!0w+kNӶi:µ'V()Q`t
XLUlIn)tP-E9Z%{*8;>>V'_ L7 -`saz0bz.<N`aD rZWX[͂e2aCC^$?|ǋP.&9v}0$*\RD+ʟrLF ca|%/3Wx2U9    IENDB`                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/lorry_error.png                                                         0000777 0000000 0000000 00000001343 12534142432 020036  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  uIDAT8˥S]HTA-ׇU7,Clȟ(C$`( ^
,( B$e%Z$\e3WRw{t\zp339ߙQXPa=:apAaeu]H55A0H2Adȸi@F5/rRt,7Z7qj]LU7:f)5Vߋ+G+@$6o9rS_N 8"$ʾbKE.~2,Aד8z quj)eRԬבp7":ۍi/J׹kzLKPE+2.CX?1'f-&/Rμƒ\ U37o>WnDL@iNPl㒥y΍Gw<GKPcCx:i'P|P>FkC5nًPLIl함+ߡ}yS>|^ZY0=SX%Z8<;hiJh=9x/c&E4t~&[6Y[f=i	lm($:?[f)1u=ݫ3#LQ-[ܟ3%    IENDB`                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/ruby_key.png                                                            0000777 0000000 0000000 00000001334 12534142432 017307  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  nIDATkNq#]lD3¨\%)/l\K
/@RKJ%~2$:Dx0l۞==| O{0d1Hd5!b|#   YZto\;}W'.y1t
0$jR^~AZ^ u|6NC[46%ؾOA6Kg"[]MߌJޣAZ>K\(+DQlV5ţ	^=fݯD];z%ITyJ)(( cS1D)cz];['aI%"oݜ/?g//<azc1PQ8mmɐ-pY]k+WFR0u)A9#FD`Լ	eJDlEhsɩp)߂F
Wc(kdh>)D/,m0oTy[Ue-}W"|8TWC\}$yӐH0e+5`UԌx=S@tYS|>bkSsc~l۱Əԋ6y8K4~7qg\+~['73Y    IENDB`                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/sitemap_color.png                                                       0000777 0000000 0000000 00000000626 12534142432 020321  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  (IDAT8˝1K@_Qcq lr!.!ds׶)(R覂M4Rg.m.	l]{ Le\Ԯ^8CEQ KeOWEԢD MSHpA@)=\GZOA0X0ľ1qضM ;, IJ1j_Qice4GeN$X-
~36]#[
F_Ma5i.bթKCڂTe	˱$S 2,    IENDB`                                                                                                          ./mvappsvr/docroot/db/icons/briefcase.png                                                           0000777 0000000 0000000 00000001431 12534142432 017377  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}SMLSAZR-W(m?XSQ'IyѨ	 ]
nDc  BBD{oRqL7^>*:G-n3(|R\Պ
	N,X׭DV^w=6JP`rX5
SV)s\koI
σST@tS	P0-4]
`j,n|_xvz4<L"Jm I~2'?;ۄkP{h6	QiS mXHBFWbz>0Oۄ~|zt]u~t^ 5U	ȳ]/r8V0<52DSSs̵a;1s.lQ'Mvq9E9K6ɰjtWR),|7&	d9Erh+a2`L੬#48'kIgkV=OKI1Z"S-7,[Hhi.Sg`z.u[u#
5altڃ2\y}3Y*YZNg!.7^UnD"\C0Dk=yQ`md{v:֋Cqi
J$2!Hզz8)#0M?B\i    IENDB`                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/font.png                                                                0000777 0000000 0000000 00000001067 12534142432 016427  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%f8ppwks~[n̲*etW/$#^욯,to➗w=߽%~;]ۦskɄMxO+~-\]9MewZ\wmAӺ'r$*,
/*%Ͼ(nڝCfV944SUY7I;{8LG岇]^R:Ć 1su0^q-궟FgD&~Uo8յOK.<J`'X[v+as=.KF'-L~auO_~o6&,2έ/ajUv+dGK"0^Ymt3  %Oc|g    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/feed.png                                                                0000777 0000000 0000000 00000001263 12534142432 016362  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  EIDATku  {sh9.v0n즂CK7Qt/HiqQЅ١NsyU (a586g;9B @HĀb^R	n5b$$5"3z)H1 ׋u!ege{8g9Â2'';11FXxY89n^$+3!QDDw?wyyMW,eKh	qye9K!0,(*D\׹z-xmZpe{h8ÒbDN#ud6K\z?.h{-+rR#$5˧i|L]Lȉ L<;>nE(kr"ݢ~#eX$.Q4&\#+ć')Jv+SV'3w&:;HL21ɞIJ;!{ZٵgC1D%rhZn8?    IENDB`                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/calculator_error.png                                                    0000777 0000000 0000000 00000001333 12534142432 021017  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  mIDAT8˅SKSQ{p[2(#qLHKA )=A/z
zEB"Z#6_rkEZLZ?νsƤs~9eYFw~<&IAξ1'0(Rr&&&nj,ajj-NOOoV0 G_6wnٺ8(<,@]ר~n.IB](X	Fݾ:oZuG|<@g2,,,nc}}D_7=?fafB*`@L4(f<ex+X[["Zں%(C@Od
u+'G[> 𢭑 <XYYA,_]}t e9(h'9em@ӵH$	:qwG		RL(Uw]kiFriI(TeeZ`hVW7ܤ\AXL$T*t:8.2Kx,K3M,gN'OaըsݒCdO>m1TUU,=ju/LWBi    IENDB`                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/text_align_center.png                                                   0000777 0000000 0000000 00000000352 12534142432 021153  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   |IDAT(cπ01PD/0Ű?1&00d9Ǧd3!?x7ghV#P70ClU/?l#ű	 V ,ѕ    IENDB`                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/bricks.png                                                              0000777 0000000 0000000 00000001471 12534142432 016735  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥ORayuΫ6LEkQp*:TJb&s:]\S+us:WM}> _oeDtKZ')(擈`ފXL\*SMHU8D)AIД#Yi*z.T~Zq1kq6.@זatUgZyP]u}>$8FEgcq)
!+lc&0D7#7
sQ% 21}.XGiBiwN'R-8!U|
݁[)8Tbfvwk{;RMvKdD[lds_5739>-`j#~t1+#7@&0
9j~TvGi
{K=QWG=0`aWhw6pL[D.3
4^;2e?|.t O;eț^@hBPgi긶O9'_{Y0C`~w{CgED\:Q]񜜜\0J)PKG7O19/Qߪwh/kGYo=<M<O; q8r칿LeȒYzxWh0ϐc@l|LkhB7-,]nvUgAv:    IENDB`                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/palette.png                                                             0000777 0000000 0000000 00000001530 12534142432 017112  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍSKQS@VT
^(R2%JeDse4MԅѼl˼\NksK2S\MDslj
᧳A=F\|4 0ZQ8Rj]8Ə:b1djaIaP~=9_/(0ƏL23ia5FgXG|fPb4\I?G`j%?&l}tLD,3]$2{pj"XEG2i(R^J#F%)hIt d8̶Q&=?؁6xcy[3k:dx A?|#̨
!Kp6HߴlX||QP,ͰdXlÛp~PKc.^	:Aц97&)\P`,Y61\r>N
`Ru6im:
o$E-ޏ2uHAWfLBIJ!*W/gi:L/9zXk9#-c T\)BqIKPypd0|;3}sHdu{X}2ZaV).EkLǂ(c6$⾇L8Gܩ`|-a`IǴ#
we;FH˝eIĒK1~ )e]CM:nMH31e=w{d |?7b&EQ$Nv_La@\    IENDB`                                                                                                                                                                        ./mvappsvr/docroot/db/icons/bullet_star.png                                                         0000777 0000000 0000000 00000000513 12534142432 017774  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%aRӷsnNdogOd?moq=KQk|@nN"HFzݦr23	p=hJ hB?nf&*~~{ެv]_Agcoz@A^9!HŎĤL +Pe    IENDB`                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/emoticon_evilgrin.png                                                   0000777 0000000 0000000 00000001327 12534142432 021174  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  iIDAT8˥Ka3hXI4AFtE"6jWKM_ AJm2$ȰnD&ТpΏyǨ*S_TiWUfUP}*fiQi(\3h</= yUP͵\
$2<ca!OCw$e7uk.D㧋J<=*,4fIu4 P=wFIIhiͰe4?7rUg$v @6S..fZ-aej'qcIV"
"4F1^?<eq5 {
e
4QH y_<S㽠<ElTE1+R?MbJħ	g׎<	l*v|Hz- v޲K^sA\d3O]#βl1.iٗ=q/=|uӘT02JϯRzٷCffxNU5uVT x^NWYn<}&OfY:Ktm:0K}eJ     IENDB`                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/feed_edit.png                                                           0000777 0000000 0000000 00000001441 12534142432 017365  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATMle  {uBƦl,$
Ɠ.`<͋\1$^L$Do8!%&bDEaqu׮yʛZ3Eb%   Pìd8S4jK%C҄("DD"쯥̷gb%CTRIao\!R@As8[A*M28h yOQ'#)1%SY[$cQ^*Uj		Q焈861E{+M}eX:U, 0+^azc8
=|V|Ϡ&V9{ie?S+UeO~I(Ѳ #a*߽MG?{Gȵ6RI=~EeLS?oWvX@4L3wg)gl)눍{LMK5mMeW!"	L7Cuq!]Xtնrl.&!Рô5t;"T*PYx7;_?-5DAB "ݺtD6-4n#Ԉ%h԰:yk?s	.\_X2R^<Ǎk6if6n߽/k=ǤΧeCk3-9&*/k*(V;5Y{5$11Ԝ    IENDB`                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/shape_handles.png                                                       0000777 0000000 0000000 00000001032 12534142432 020247  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥1QQB\AvI M~""XdIev6h$M$&"o&	F=sν$b`JHJz^on!ιd2^ifڛw72	aont:FZ{u:6GOy~v	9'` LMƠ"*z$1I8D y5
`% t30/,4횋ws7>uYRĝ"p1^NYz * @IxRk`8**DJ<<|WK5ߓx, ,}n,Y\Y\ok_5Նd&I7,]1qvh6_U+Ӊ}E>Jگ5<Ko    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/tux.png                                                                 0000777 0000000 0000000 00000001270 12534142432 016275  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  JIDAT8˕_HSQpɗݹ{GI`FFZ-XE'ʢ$ʠ(
p`kt,ڊdaE3Fz %.A˺cdm8N XVT@:aUA2Xa#dYaraxݮ%T o<0A0!ΌΖ
p+K٢ QR7c28T>#j@( xk0UEy^CUD՛t@OȲ \{d2AK٬>f~Fpndt<pP<u0^\m`()f ^m3 _TD{F>} "Dn@?;mx30Kka~k߸+LSꘂZXx"`("4ʷ>c,6FH逌/>Nhkv[@@B'a|fޜzۥŚ#9 LV*|5l.;SBAr-72W     IENDB`                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/arrow_left.png                                                          0000777 0000000 0000000 00000000531 12534142432 017620  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%B0(=ĻI12$C_?3¿~1`._edj>)*n90_ ѿV\ٿ0aX`ſ4 ܟ@_P303'×^ 4G)1vUMB9i;N@ͺ@Ռ 㡻zZ    IENDB`                                                                                                                                                                       ./mvappsvr/docroot/db/icons/email_edit.png                                                          0000777 0000000 0000000 00000001364 12534142432 017555  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥OHTa{8μFK1"1ڤADAAWEhTPȂZD-DJBDfgG|ZhQ³sWhY={B?4^"N~&N{DZY{[Bϻru._
-َiиWkL{V_(&*1u)(uʼB3D(N?_.\ۗ4R9'O&9(5d#9ևJm<=Ճ[`abbVPtEgP9K%#ǔ/<#(d73b \ )7˽j_c/ƙklkDUQ<MHԄfafߣ?^æ%j	,*	N7}]o9F_ڂ=f"pC;HecfyFQA(ɡQK45~Ev!8hh\.:He,|Mqf7w6|.<4܏JX,d'ǋʉ7m	p7&1FB9Ig*1%Rzʀ
ɀ)41Lia[BvV3wo4X'~y    IENDB`                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/chart_pie.png                                                           0000777 0000000 0000000 00000001626 12534142432 017420  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  (IDAT8˝oUy睦B/LK)3E!R%!5hP!.`.LaǦF+C$H"Uc0i$.@!DʎB4uh^ii;缗I$~OchS-()b.Z^1e<Nf풎֠YPW7?f|U۫#_J\oq;`4]lݗ/&V4wkg@Q@cv# Qق`݇UDk*hHp \ROg.DS	pW`}0
KMx,x @9@mMKp`{rd+Q^F?AG}#APhC &'M.0a=M1t)}52Hvj+1R[5
 &#Nʺ";0?sc'$S}ǖ_;36?^ZXM̇}HeB>Xi.J6߽~K<¥m<ք0`CI*= }mSSm{42_ADqah?%8.9X89לN;2'`e &elQ} `j>o2F&6f)8HxH(Q݄+EБE >>诱nZjhO<P$\IeS*593w١#񅵮_B|Zu8Gs;9)I\ub>gOYTZ=rufOS~Ø    IENDB`                                                                                                          ./mvappsvr/docroot/db/icons/newspaper_add.png                                                       0000777 0000000 0000000 00000001356 12534142432 020276  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ_hRQeHoKADK===+VAT/z	/Sp9m62C3t*ND
uNRaڷ9c~{= 9"*J~_XZZq...*G=@8Vut]rqH[@Ϡ(
v/Z'B*,`σANV,`2F)j
laXfhLxjSX*d
 n$f	J?k+5tk h LGIO
yOj}Anp:MzmN'$Ued%|#0DJbI8DQJ%"V<wwp_}{7CJYI&
wrx}_k3/3:.@am!j!sl6T*q&9#ɏ!O@:=;;O$ױ;2dYKnppf&̌MOO7X8(gjGH֬`PthzjmT՝^'38Xz~ljjj`u,P)Y`% n19Ѻ    IENDB`                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/table_multiple.png                                                      0000777 0000000 0000000 00000001144 12534142432 020457  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥AKQo3:K	A QH _V"\E"AAm)h03N_#9y̌)}3Ĵ_U'Ay	~^w
f'maubKQxi}@ .'4e
9WwDc:{mZu7Z,YVJ'DQ.ˍ/dDQL;ۘ_6Q]w 	5G7;LEUoٗGU꾁@@+Kx/tk\fr4wfZAHL!{M3);ps_:Jd3Q	Tv8v6͑.jI3qY݃*kLfup蛀97v
m":hFLM49 ҈by`9LeŻ@[MU&b>"m"fyPP%	W?CG|    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/style_edit.png                                                          0000777 0000000 0000000 00000001637 12534142432 017631  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  1IDATukh[e ;;NNҙֶI-֒Quӹ9ALdc8U,x
2ġ¬a(^vMeI֮MsrN%́ r*|zZ]RScɴvP$5Űu6 êiJJĬɔdun`<q<9$ o(*!AX +9(Z6HsPJ+\Y52uV/,fLU8ݨE7hוu
TZHYmX5*y(|{3ٷXɔ,T4ݭv,n,VGwߓZ{;1遾/(T^R}w="ҰW
%5ww]݂b>=x=t/8U VSWÛ7zⶬWտ!>ޚ<q%~Lʑ&ds*YzVmy0D7Ajra.z>n,#9ʓ	%e1[txxkw;Qb"܄A.]ZL_3tfB}Q(v\-s쓍?z}o}FspE~d|KMC_ޯ9Pl^~0V?{^wt=?~P˗"5uba13uЖ91?~kPTQ7o{W1H'\b> ;;&¡Jbn6:hg/<n0ư־AZ-
&\$qJT.@    IENDB`                                                                                                 ./mvappsvr/docroot/db/icons/text_heading_4.png                                                      0000777 0000000 0000000 00000000445 12534142432 020346  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(Ͻб0PK4*WDQ!7ܸda dۀ	؀	nr'DXO>՜D3{v	ү!Jk,[\	86/<G7vs `kKH--,/ŒSA|(k[bʧIK d?}OVX˷22tWP    IENDB`                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/telephone.png                                                           0000777 0000000 0000000 00000001427 12534142432 017444  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥kUNg2d>3J'IST1V7
sPЅFBؕׂvFh
E8	Ĥ6$L"mtٳ9p,~xb(<6oxEG%M-Z$%MS\"IL'n.~7q=ӪzT>LQ "~ڥ͑+wq"\፹Vx)Uݸ!._2yh8瞯or2tDl-?]> HjL8U1/.&P	r(;YQ}x8Q*cAY6IKffw{dNpNQ{Ƒc^wc-v<ٹ߽ǝӌG8:<P)/W? /Wu2}7*,VDƛ'ϛx{L	SVmBcչN}\#ߙVlZDb${O1=XbV9$[x@6Hd8QR+XkI,IYY^)AXQ2X9Ee㵈0?q189N2ĸ,176;QCUQ+x΃:[[<;ԼG    IENDB`                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/coins_add.png                                                           0000777 0000000 0000000 00000001425 12534142432 017402  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍMlTe7ӡ3Z2B')5
qʰab\qG$$nXJh5C-TFmvf:sޙ{/k1$gw<9Aʠx*$*:p察ꖶg	WU9֯IVjsj[.Q+Eq<S/!FlvIq5[ubVC7N %;&+HQ
HfSyTS&SC;-lR?]A|? 퀍YH]'ў|`3C:&&~LUyb)c.
 "mr=ljh~q#h>ҝF؍i$]EcS%GV{K7}U'g?<Lq~(~dJ~!r{fıѣXrt5㺘xӜ4oäJV+TSd 
dڌ~iq!^mW	5=˓ 9+x{>7SF'׫w!WûYiD~3P;yxm`D3rDsbuR,Wח 9bٖ|*x9;V0,ޚq{e     IENDB`                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/user_orange.png                                                         0000777 0000000 0000000 00000001323 12534142432 017765  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  eIDAT8˥kHQej!)
҅('0tv1HÙBaI63]{LrƦN6ȉ(6ٜo0d}s.y XurIQNUɂߊ襱%0+_dlLZN_C`j[S"9r.wPIT!sN08*bJS=)D^k!eD9=.}+ 3*]5HsA	AFn	$c+4x.(>s#ށЖAm;6*h_Xġ{aڇ.QcQc^姽HrX6ϷSZ`hzT;TIP0Z2_4da棙l@_BSѕ
AXh++ɰA^N廗K:j=aylCulx@_`/0[+7/;1߲>x1'
l3s&o`@-Le{aMK:bfcXdZ
*aD(-j$TGaT͐8\0i]6aD/WnP    IENDB`                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/chart_line_link.png                                                     0000777 0000000 0000000 00000001355 12534142432 020606  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%,M_|z<l\@_9'KkvrcltƖcGs],	ksN5[;~4y\3NO+9i=5gxמ}a7<{[iƦi
~uDD!4w<osMfuI=7HZgb11G\rqMʏ=+;b2X3?nn i#/[WR߾yi?z͛7WqK֎*Fc&Nŋ޽KWWWyؑ#Gt1]( 9пo,Bj8wm>RSSO4eeHdH-S\K## ?ݻs:tڵk@r @j*ؕ~`S@WW73===Ȁ1Ɂ E	DM ~ժUo׭[WTT 1HH-jjj@'xyyOII3	$ Z|    IENDB`                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/application_osx.png                                                     0000777 0000000 0000000 00000000747 12534142432 020661  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  yIDAT8˥1kAۻD*"j vV6uZN,B`+X)Bhc仝wf-\.ib2̦Z+j±"$Q$JŌZRw_Ǘ^H?{o5%8lstqu]tnp}ʱ_w~vpůkq)|	cr$GoK+5.d) k3gdw`?&xf'	dfODǉ#` vұ5<M~Iv31TsWZl}0XxAqMOBfIre;f6/zSeme>    IENDB`                         ./mvappsvr/docroot/db/icons/control_rewind.png                                                      0000777 0000000 0000000 00000001146 12534142432 020507  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥Ɋ"A #Zj"
/<xD  .k傢btF]t0	A_ o_6zvIӡv[ef6Rդ\,s1[Vp:~80ϡZJ"kps߃ip>BV*m)nX,@UUө|>/ ^/ANXQC&!:7"bV@d2( xl6JhZ*6,`fCF`ہMl6 m6L&ͧX,u2%\n^f LQ0dDg	|M#2buBCnP,!?*
%BfGh4B|b|bCzH\Nfx8eh@  {鴜L&/Iƞ`8w~yDH(`P*QK1m4($    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/shield_delete.png                                                       0000777 0000000 0000000 00000001400 12534142432 020242  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATMhuein6Ժ:7c`q:`N
*vɃЃAy1h:{MJI~!!^/'qU$ј|X2!^Le:,GDW̾iʂMɴџwۘ%*no>G )4ņ?=<=2js}?gqΓվ >
{==[+߷,_ISX' a/2K'z<}2B33sMAPn >	,C!EqJA	X
fxd
RH)
9
)9@O0KJ{k36@AS;W~vR71^o<,E8|F:s%Aq]tfz-,:I\!yQI
[5|~J'`a6⇙칆m[m=*Q7~&Ȗ;lG^*|;$uBy<GL>=?ɦS%@s"N'wޢ`/F~ӛ7ToXTmk7<z+q$uOX}9_Z_]<7b->:\/{
J>    IENDB`                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/camera_edit.png                                                         0000777 0000000 0000000 00000001550 12534142432 017713  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SKhSA=ԤI$MVJՅԀ]Y D)U7Eq!v#/iJUm_З4=EWUWfsK4M,N.
@TZSTHXQ:
===[uhhhYM~l(j8qx#Ax
ӟzeYI&j:㉴[fgg!IֻZbNtlB0#pGVVVvs4kdB$n*FfC "d'y91%-Hxk:MO딱C6	W7͢'5x]ކ()8}8Ʈ3ծZ"P %"tS45q҅/QD:uEm%-PJAU|mY6Q\)d%\=;(MAYUQY$j=QkAg`T~гarE=E	[Q/AYiܓTaӳRj{ln7\xطtC4R^Y/PE. `24Ȥ>6KX7`f5BŴZ3{WjG"6|^Atu_lzY=LgLݱFsB^97`pl5භWҩCW3y/v:    IENDB`                                                                                                                                                        ./mvappsvr/docroot/db/icons/world_edit.png                                                          0000777 0000000 0000000 00000001661 12534142432 017615  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  CIDAT8eoPtuu/wիN1.58=,OPPp	1F?0c 6pjjBWڋϻ}GH6R8r`]%X
eyz~	{((:2<e>1y !=+iޢP܋'>6D?kv3h~~c@SCSf|s>.'}8FDkh}TX_yװ t{K]=!dzmz4*3ZޯM]MSoߝI?Uw=-s]ݷb)wPn 979נv$].RR'h-KbKE/N]v6'QŌIenkɀSbdr4wii``e*J+1+Ix~fuzOȮOܜ3(nFr[,vzH΅jޯYKY@|LFJyW;NTS|vF;'|ڒ>{Y+kR0x]D[D79j%iym%36?r.K{mN80(9Lxx#6sH=R$h⒀.fb7'ǂ"iUn>FOe}>w;#{ĥށ\AP1׷.mp\
,L|I2im|cE4)/=L;mJP"}K+
h;
h'jr}dl}aپWMֵ	!&d?=7+|v@    IENDB`                                                                               ./mvappsvr/docroot/db/icons/lightbulb_add.png                                                       0000777 0000000 0000000 00000001507 12534142432 020244  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}kHQЗ{>EA$
ntJJMHuLCoe%y7ǜs}:fx8/ ^Ei?PjD<RYk3R8ysgCkji&VY.$ؙFXZPsMmn fvNNpkZ"1OZ#!gJO[vy Lv4Ӥl ( gS4t7=!i%dxF&OC *c<k==D+I1ON >ܪ`n[[#%	ֆ >`0TPph0}OsGڛM̊a,=OZDҷce"<],E;ybhre\
7~n3BNpTUAUL_|BL+ceUGɂ<FMeƃϜO8 D]>o(	p>2|7(9q,[iR"oeQuҗGq'= cUCXH> _ A/"ry
Jb_u2-☻-0MVC"mhrIՋ稀3Iԭ+}x,T{;H.]%OI    IENDB`                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/text_widget_icon.png                                                    0000777 0000000 0000000 00000014170 12534142432 021017  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         \rf  ?IDATx	tUoHBDEႈ0GEx0o񍸾1\ ' `8 l*aU$IHȞ_{T'SM}S~U7>16ANqj&>Onc:%_?;>vɉ6µ-mDSLXbB/ܾqK z[#L {sj8cMĤꩡ6`ԅ *}{}v 7;"gRU~qF{baEo'ۉI6{}oA L駟VWȶNGFyyW.Yz111#i?%c8pe/kbb7cbQqŤ_$mz]jj_7o>5S縢"o-[_BT%}95%@n
FXAﾈ7o~pر_ɶE֡Cg=3W\[oe˖8{زeC}P&szzCe͚5Qm̙}뷬wޮDkKeDD2&}#IMSNzĈnݺzB+DU	%C`qVW ֭K0a6HW_VZZڢnO$شiSưaÒ>}S\7yw}HPݘhm|-cILGӧD" _\2eJF*'O
Y=d<If}w޽pJR^	)n
 NT	 z9	_>Bv?8iH8q»effΖ'˗(Ov;GYY8vxd'>|Gϟ?J0tvj'++iĉ=#'Ƅذa#RDVXiLӘ9sƈ_dLnv:Gv߾}۟zGO>J
zM7d :ʇ%f 
%|8p8xqyR\g9ٯvۢε|_%>]9٫dG;^HHxNgEm?~|`;ccc+|Ǐ)}uR"c$&|M7&F2&GyLӦMː1y&(((O{Wz41s+:UIM:5{yG'?ȇr+J h*B 54ω _~eFʓ+*}vڢQAK,yF6*d_pw96nH2Uvty%sNgϞO}ѿƸqz2d~Q{n#&9B++ƄF7Y"mnPr])-6H2)R6*H19xs,K~_tee|ٳg6 	з'
4NqK F@u" $}eƌ_5r$ α駟~Sav;%=|ζ (a֮][/~کaW 2YٳLMM=iLHDX;vBQ%Eqe/YfOc1i'&TAȸf:?/;@Mc'p8ǯZ^z=' *h/
;wva^;mRdoq9_~yrrrvzgOI"2a}衇!Gmx@1?1c;>[n/b2egMxժU3&M*s,RW_)c|7=' %y߾X0@09NX*.@=l,UöA%>S|iwuW&MlC,:ujݺucF$+BK"d$w)lT\AL;e</wn:JD9MdL(yIzzZ)Ŷ͚5نQ˪?eL1I4o߾C'بF䈴lF9aÆ _ u x7o.㏟]h~Ty/F׵k\u۶mO0DR&h";IGШ)g,{;３ԭ[vQo=DL4ॗ^!FNJPϒtqzĈeƎ(|"-xڹsٽzOmcy[&"#&.|HF͔4]t,%"iM*9'Iؤ$[mZ ݻx$x74urDBՄ,9*++5nJ)61t0:}\>ڐֆJTmǂbcc/mѢFRԎYڶmqL(۷oj7Y-&5qKKKUa)))QFWk׮͠ADBBc  A-??iӦ:9	i팶VPG+//qqq:N &yh=7[jF @}P@    `  ;   (  @ v@ 
 PX
S.
 Ok. 4P v@ 
 P@    `  ;   (  @ v@ 
 P`)0`A (  @ v@ 
 P@    `  ;   (  @X
l `  ;   (  @ v@ 
 P@    `  ;  V`)T    `  ;   (  @ v@ 
 P@   X
XfP v@ 
 P@    `  ;   (  @ v@ 
 P`)0`A (  @ v@ 
 P@    `  ;   (  @X
l `  ;   (  @ v@ 
 P@    `  ;  V`)T    `  ;   (  @ v@ 
 P@   X
XfP v@ 
 P@    `  ;   (  @ v@ 
Kx<'&&а@ѓ.
 ﯹ@ X
 X  +  3 ``  @  0 V@ f  
 XR`
,6
  0 V@ f  
 *+PPC f     l    @   ,R`3  P 6@ @ @  `EF  =B .
   l    @    z),_:  P 6@ X
܅Cv!B  `   6@ @ @  `   6@ X
`.
 KKX
̅Cv
 ..Ѐ   @     l @ii@B
D@ 	EL  XD@ 	EL  XDX->Aw* @||<a)څ _L  XD@ 	EL  XD@ 	EL ]8 j@ƍ! =& L ,b"  "& L ,b",p@B+;_а@QQ@B@BBD@ 	EL  XD@ 	EL 8ǻ 4ihX
ЅC橬  дiS@ #ЬY3@ 7мys@ `o 11Ѐ @!Tӵ آE@R {<¡ 9F#}.а]8 "#ȯlժz'e]h@ $_?zIuk: 


\8 agq+ 4  P4
M6 I~C m۶ 4  P/37^z ]l׮a)| kV U W]ux7s= D95 j1}t1n8@[
|KYޫmOwh QIQ]M5 ]C 8w@5YC 
P*   Gm%?mWh̙3ƏJ|   VTTy<y) 	LT%? @]Qs~[ TD \8pc7í
+DffXtf@Xzu! PgUFk 222ĲeR̙P(mT@zzz! P'eFw VXA0@~Xreΐ!C  P8I^'s~ ;wl+~C Էw 	@1g"77ׅC\{ॗ^*}C&MzX
#8໬\8彚,
o_zlUQVtN,\p͌3^_+k  * P1;v(6n(/_VkqNd۷]7x;w?|ǎGY t;  $n	 o/>,RSSΚ5`P1C  T۷jˮ,U`_;`Е?58{[1 Hl{P'N'a. 0 ђ_/v% =ђ%$$]zTN"8,`lV9sƭzN$_]k6w	uڴi*__ @%XsiҥxڵkG'_?*"jcn3.$lyooxNoJg_ש㵢Xd7SL)?C V  T 	vG暼on&MGm"گ58}۱ (v#	-gΝ4?-F{= ])/"~߅b֭b޽bǎϬXF??s  vprA.-$>u=}%ѣG-[|,PTDԩSnD)% 6K.[j;SAqC?6l{Z^JMGO@  q#OzHLL&~\\7~ͦMڵn]m$O	 D-uT{~F,oyyy[ͩJf=˅o~۱ QFxx]䏍&:)9go>5;;{,7B&yxmT&?$h^䧄zet%d[d5GKzJ^oRߨL~m4ȅ ?N0<Оro#ӧsssȑ~ŋ7'wd>XC "  @{]9=]$~AH=4;w҅<=y?+-F׋7pK # )?.C`۷o׎;d٭jo g@ܴiߔdɊxQQQۺu
z[=z>- mrKжƾc}sAd*l<D) C񾭱8N{ B'`&;^-j:`$\# ?9u+C?Jzn
@	 +2TqM4í䲒^? 	PI]u5ؤqS _H|)V#w1L{ cDC|Px>${,YU_    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/page_edit.png                                                           0000777 0000000 0000000 00000001447 12534142432 017404  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATOhu yw9ge&"2&A:uVt.AA]<L::dE<ĚjH3ܜMIa_^"مH !U9O.֍W pg>9롢H낆  Ҋ?/}_'֏jC	E#m*Ưi)LYUھ}ظxq`u#RkRJj4$!dD!iOn9C/im&N{ A	DJD)u\~'ו:nһaK	A I"%wyĖU־zRWO؄wRD(SHIF^<mK|Z}(5oh^?g
dD"%+_Z՚V4Wtnoy{2Ud( WD}k=?3:4B}fFF6lWgCDLԽ𓕼ՋGd-6snޣRͤPg 2?𞗭gĥ/fwc{GճY(T
#KWw<ɱI?+*pbSJ;Vm?{;,=yܣ} *J%T휫SK^&%HKD9)˔:WPJYո뵡Κ(]IJr*OA	){Or= @ @+<ZNXWy    IENDB`                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/page_key.png                                                            0000777 0000000 0000000 00000001441 12534142432 017241  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT_s wΙ2-!I(vaŅ\p"nȕ;qjf$!q眝<zeϣ=\G@Yjϼw@d{_flX4LH'YK޾uZ(M͒5% +]VQ8lj[ֶ?靗|}s"b,3~S
m "Pz
W\9oA;=(D(J4V]4<RMyZLچ2Bچ~J:R5D[FB&6QB +z6vn!VJD&J;Kf#Z?(PGdRLR(U&d]zVzj]ϮyZSf ޹MznVz˵-t.J&J3*IQO2;㿣sMujWa!zĢ:UYb9q_9DQX1seEMݸQ>>NYoN=0|i\ZsЉo:5c>~'k	?~K=ܷsp;,{,F4SybFoݓ^~~ЍmqCʅmy}#sthno?N#=ƙ?    IENDB`                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/controller_delete.png                                                   0000777 0000000 0000000 00000001402 12534142432 021157  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˝_HSqohABA/QSC=P t{hORMQr.n:Ζњm~bXO^^=Q} a_0LKz jRFQT-cJrQ./I$S[^^=OrǵH~X,1_@wR֬SSSU.^]]_YYB!R)J%dteAV+Ϛ/`mmMńbt'ytضO&<N7  GL|^ ԕ#GtBr,_cM˱8h+U	ȓ٬P
WnffFԺd2pݘˁ;-ś?865R)R""#Nt:wjK<*br	Ʈ&&&d$ -K\&E"'*Ssд!::^l6[/D  [RY<54(΍cs-E"qT*e#2Y	,fK`T`W# ٪
wK!)?#v4Ϸ7)v[bl3-**"3 ;    IENDB`                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/folder_feed.png                                                         0000777 0000000 0000000 00000001263 12534142432 017715  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  EIDAT8˥MHTQΝQ!-[,)V},
MAm3vE-`Ľ"hIaw{Ik1m{9%"1ű4׫u0yFTCw
nxPaLt$Hu@!Xv%X Ako/CA|n+ΘL2||p:-,(}]ÏJ)R0,L@i8z݆,^C(UmWJihjX `|} @iq&',x7n:1$؀,TR-`^]{y0%.z BPڇGI>dEY"H ŷg`i!И]l?pp f*Kf$?B^>YrC "Q QJHGAPa/"Q"H%	ҀGąja!a\.XE?`XoXXdPNqi-ىD>`]u@a(]Ԥߡ_F\cϣ    IENDB`                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/html_delete.png                                                         0000777 0000000 0000000 00000001260 12534142432 017742  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  BIDAT8˥Mq{߹w	"	LH|m,4Bd,,%;Y)Y	IXR3fL}?s,fbjͳ99'13ibAT	Aq" \
oA)
!^O!j8 FP%#EbhB `!DeIqX/ڑQe5cN\^u8M56제%X?r±sHEN J%KpAz$+e)KTț"(Y(kdiB3"нA7#q!HZ/+Ei4f$kwVkHv}:O4}fLN$.jss6>Ne*wO r]3o'8]9y/fd$[̓'ƅG:[K֐*HBF5uRu^<~`SsbQZxp `|HR#Jz.;-Ibhdq~ճl>:pűd7w<˿Kv?Q9    IENDB`                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/chart_bar_edit.png                                                      0000777 0000000 0000000 00000001362 12534142432 020411  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATOhu|ք5fEKEC!aI)y'Cu:AiQɜH-=j<+DN^YJ#ϾOQ/Eq|{hMsrp^."hUiGe~Q1Qjb(4P3EbHN<J
B
BSOؐ(F6rol{6pmdၜvUbd$a\$D(ow]{0y
B&7&@cRDoy>,ܹMsi_C۪;<8A .bW߅5iMSuEAY)'^*\et`g&+C<TS1\ x"	t.m:6}}^x J혚%׺B`(8$M	G!@[pؚD:	N%K֗(j~>3x񘺣u!0D˃Ǩ]fr|_N0~%l)#;x $'i:'|Og_L㏅^?#AhTz{yWHEw|.	X<    IENDB`                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/book_go.png                                                             0000777 0000000 0000000 00000001351 12534142432 017074  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  {IDAT8mkTI{&M@GqS/p!+q!\K#JōA`6F@&νUc=PTQWu*qw/;LlswbaySJ;YN>~Lfdӹc^ZL YJ*^0՗.' K+- kp͙j偹1cZb݆
bttew G8EkZ&2b+JV: LHؼ_9(jhDS.GAQ1Fz:$~Mb$x:v܎I`Ez#i_.(dBQc2,L",c-|;e}v,wK}ւHX`wA5pjTWlyaOZ)͵Cs2#MDL_صzl}.5&"G#Yй1E}pGЧ 왽UGhxg	$dd;/5O5vڇg-l҇'	ULQչ>I'oxtysu}r KƏ@IhK    IENDB`                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/folder_user.png                                                         0000777 0000000 0000000 00000001332 12534142432 017765  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  lIDAT}KlLa?s:RmC5),$6Macciװ EDA$U .wV̜}ژP<FUf3rWsLZAAotQPŮuNcm\2]"XU"+-ٽqiUjvJfy&_K9465 u	*\HǨ~liLL(i1q챀
*}N2!T5T~:??c_m<UJxx&aZofZy1qXvxBy
OoŘ4^2OSG7މoz%~s\.H>~=Q),*LCyq^M.A%ĆITCο8<㛮>sŨ '$*S`=?w/eB΃ѓII3c~@@$_ƪd16a	(xK-~;	(	)d1&I<DX 4ge߈K *1@G#5E)δ8ƹ*Q	@ʨP룶ƣa2WC!u@z )Tj@#TC0!81\f2W#PQa*~=]4/    IENDB`                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/arrow_refresh.png                                                       0000777 0000000 0000000 00000001255 12534142432 020330  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ?IDAT8ˍKa3bvВBB9d-Od6_t䡁eŚܡIͱaIF%hea#;]8axo<+ ߺqeZ!;"4U/(/Dv]toUq|͸U!\vt<SOTwC湤ADWB1,h5rHC-޳liLiΏ77|Y;\i֔q]"l0za\9586pM>Pָ#i)8:S.άj[/UvloL3k&~j~MLGJf2Bʔ̘Zf=EfQd֟wLۅȌ#fd&ʝulՓ;xLH֌	ÉȠȠ~+:#hh#5=&N.ehiL(B:* ƑC<!	G[	{1ubxi=:8	\t(#!E)rla,2hTJHK(    IENDB`                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/cd.png                                                                  0000777 0000000 0000000 00000001241 12534142432 016041  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  3IDAT8˅[nPԍtG 2J*H\BC1` 4BLű	wTEϜlZ[Gd	l	"J-Mu9"mٖ>/у
I|O1&'`6|W"+4$K h\F¾<z!oc/.N1g*CxϤLa1IAK
PIי?d)0آ&G&#q3.#l6eS}3{	҈NKHa2cxSM2GQG.;wEo/!^̀裰&?w WU,$,!Kr+xEC4B*:3r#l2&$^D6F \@>ἅ o oAR]$(8Vs)f@Z_Q9 ^#R\~$.Y)ۛGy2etS*e:+wߦu.    IENDB`                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/table.png                                                               0000777 0000000 0000000 00000001066 12534142432 016547  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥S+DQ,4bAYXJ,(JX(d"E)X(3o{odANwsդ38I8c\2! \%ioqp&\όTm !@/\f\RfFY,<Mg_&Zg`Y<afWߒʸWuW%۱_!` JڃXܹ`[=[a ىd: 0rލ0t,Gct@Z#vAեHY߮`r7LcϯHg 6)A8v=SӾ$MMdv7q@W7qD
Qc	yYA3tVf:yp+n Ɯbl'Q1X	b`VB]y>nQjK3 !rgz)EZbُ8L/U>(puM    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/page_green.png                                                          0000777 0000000 0000000 00000001155 12534142432 017553  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT?s~~TI!!bF ,H8b1a5lNQB b`^8MA~y*޿\)(0kJiΆI H q~{СMкOgԪ(2X2s,}O>};x3o}~Wtܠ$SjbjLEMa8y޿ww>JҪ*m*u=g6=W|vjz:@B(%UZ4\1mfj"jAƚ6hT*J	VZJZ$@10PHZ(}
)Be @)zcԊe 02FHd#    W?9</;  C9Axy   轍y3t-;w^t'IWMeС*>Wi ! Gc{sގl6    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/award_star_gold_1.png                                                   0000777 0000000 0000000 00000001361 12534142432 021032  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅_He?wT-"<gn8Zx(c"( 0Ʈetnv.F[ (l?T!puf"zr9}ۅ;rދ|xx5(F}V	;4$y$=ɮ.*Gn"$E[EpKRYWlhcUޘݺX%ط1cyW`2A:,aS)	ߐu;
ׯiW"}hz0[{vO)c$~JUHaZ^>TeG/@P70ZËR"v7种$3 d
";R=F.['.#96Da/U%N#;.qI`ȑFnW$9cj'}U(^2=.o#ּI>8 !79AGNkTT|@m.!+-hx1:^"l.)MP^C36޹hZJ+hkK?V[dAr:;AGŊ,|7z%rnX9l֮YW޲uf>Lwzi^?wS3ro^ioJ\ E    IENDB`                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/image.png                                                               0000777 0000000 0000000 00000001004 12534142432 016532  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT?kSa7*(⦓"▽hYIw?:b#Dj=!{]&È4VV_?I9(rX,xNV޽T.Ep&	$p&D+n?x{Dۻ)/OvKN9N9I9%A0Ȃa=:'3`!DΟ;˅WB"0hew~L9m1G)Րp̐W=`$2K əLI/>cq%iAȔhu@%Ґ
]H	Bv̓ڈ_S%Ґ;69HostwEƄx
]*f"".\00CLoF]W-Hh^Y{we0Ewa8V
    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/mouse_delete.png                                                        0000777 0000000 0000000 00000001345 12534142432 020132  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  wIDAT8˝OhaA"0cu:;Hb-	̐s"PA[aY6mM0pb9?u>/ƨ~~ I;H|FYD"q.F8vRX---sss0F.""ngeeKloo#
bblTnR%I,.. Vuojjjh42vf.ɠjp}B <锤%dkG&af	IRVbrrR+QlQMt|z7&ud"D	R6jIDG,wdwh4x"Y+t[?<}Qn\^ޥ4rRb\_N G	7wOѵWXh~\HoԘ܃/osGRzݬ8=f0J7EFv/"?*ۓ4J.J`ojټ 5t~|!ESk5{cccfPV˂êSHd+>CGYw&"o"    IENDB`                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/brick_link.png                                                          0000777 0000000 0000000 00000001374 12534142432 017571  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mRKQ	-f=?IZTvrpmEDR-*"+RJ,+"ZLR.JŢ>DÔ?R;c}s}Wb{{Jlff`[%nJs.Û/ZA 8>>FP@>5}q$	{_Kx<B!y+qIEauuNS1stppp LMM;99G T/=/LNNaOd2H$8;;9pzzZtxggp^W"bbbBU$A:-"WU9D6nnnJJUUqssd2X,&U]HtF'$fS4x\>CvXZZdjr*^GQR)גct]l6GMr8d0e\SS$immMWp544zzzIpuu^u90_9>^WTT|	P]]:	$AWÃw{5nZZZ&c]5}EP^^`0,˃cccW/"֘kXYj    IENDB`                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/tag_blue.png                                                            0000777 0000000 0000000 00000001112 12534142432 017232  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅يA%6<] dL.3C (((*n=n=.5fl{)qŹ:4unvVfAUU4+ RNqj:JHZaL0d2q!t&RT*0LFz]5MmsV*FF!~˲0m~mcEr##]f3Yc{7(jMs|=KpH)]joČ|\ʦʖw|{<JH$"!R.1#_,;}ր-Q
B+wB|>?|Mނ٦H&^ŢdY>\;$FmaZO/wdT*i	mہe~}SˑH$X,iw@|@F9-X?)
`0I<'Wp
s Z:{)    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/bullet_key.png                                                          0000777 0000000 0000000 00000000664 12534142432 017622  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  FIDAT8c?%appk.ӭW5M;dnL,xs2'?lܜ`pu.-O1(.^?b{DpkIۗ=Qolgܜkp۩;}mFzA^5 <sNo7`|K-f/)ć=xK]svיI;x<N|Mg&Y}KRB:kzuӽV@ fSQ    IENDB`                                                                            ./mvappsvr/docroot/db/icons/script_link.png                                                         0000777 0000000 0000000 00000001554 12534142432 020003  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATMhe 6[ɒj0lf֯
"2BqWRAxNs\TE훦MmzOXk8Gs(a%DI(N\ ; #Tͽ:_  0L}T_=\  I'=CJ !ܗ()I)qO>7O; DDNCA(p#ag[Wq1U  &&%^ oR@*Pf}~i 0aXΏ)Q0HiQ(	
RUt޽>p^ aX+Op}K`AE[Ibqw% 	Z%-B	H@  &xcZt&%	Ab H	1ah8K\)|Z'NwOIn_ߋ[_=``\X|Ss<c}}f+T*ӧZtv$p\>3?eO_0]Pt:z=:T^yqtii&_Ngf ˧o@P`0?`wos|>M=t陱7rG9kҲH.<l0{I8ƆM6{.Wn%?|wzn*LZF\{lƥ"paS?N[)L:-֨Dv|iZX(}q/fzZ    IENDB`                                                                                                                                                    ./mvappsvr/docroot/db/icons/hourglass_delete.png                                                    0000777 0000000 0000000 00000001475 12534142432 021015  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ[HSqCAAR EQIO$ȇ!I7RԮ9iBlsL6LKts7쾝o]ڍ|?_lhLV!	o`z򒃭O3SŶ
Re	C0
`VV:UVF*W
]G!|L`2O"uՖ$yK_X%|ن'PVE԰(5F&8
? =ArlT_?8PQR:q\Dz$
Vn1E۸%Z"U>KNv3 v?fh(RFm"TǷ(0n'l("MoicZO34z
"(n^f:!5ӓ:lL u?Dc&4-J{{+MHwjWMC&Vcv7p]{'xa(휲a |+.t]<Qy<?Y9Wo@z&lX`wmŃ(>kpe BoqaIVht?N%9LU@ }VIt.=,(ߺcbaΉue$Τ0YpḨ69ssK!8t? F(X    IENDB`                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/lock_add.png                                                            0000777 0000000 0000000 00000001470 12534142432 017217  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mRMHTQޛe2:$56NJ5A.EЪ"pI+	lhQТD%BXM$Ӑd8vw{15<<\eM(*)@bBUz`hh#n(L&1G! p9z,#H !INQg)ח
%/\zEQF?i<>sbꮞVpʆmvX:%Rx#6_xwÃOcgDR6CsI`j1ENTuG7N[t8 ,L6tC2HP^1 $x 
PNeAiȦ-}]V %"t~7sMH<$|6ud22,NDKNDb`Ԫa+DsC+h^a*ô݁v҇G{5c˘fh]	RiBTy\"hml&jhq	
hUGdl9u]݇=Dҹ[4(A`#2R2S^X@h~pWd*`=f"x1x&cQaRƍ40Gw$k+YB	ғwY_O	 ɝOC["    IENDB`                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/lightbulb.png                                                           0000777 0000000 0000000 00000001416 12534142432 017433  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕KSq}ћHoLL܋"솒!PRtR&$^22p31RiSy7񶔍m^v6n9~.ZZ;<x" D섥ޥzU/HjxT8Cw4?gx/X!7A(VFU]8Kꔓ~ZG$E;A#wZH~(aW[W){H#R	HR!y\=C6,o
K':iRNB[` M#u
1|XOVdfZ2Y$o03+<^
˕56'HE"ҡLw:^9[e-e`7৫SSX=}&G35ykYJ$amυ^68GKlʗ=-bBaΒJgFM$DvoЖ,Gw0j#,ٙS@:o9=؛e`4ЖPm7ZmlOT!%A!CQ$ʢ;{n/TOkgk,AAN:şʒs\+䔲JeQ%${)PFczz"[0HKtMH8/Jb}5>M    IENDB`                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/world_link.png                                                          0000777 0000000 0000000 00000001675 12534142432 017632  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  OIDATO[e 9m99&`2"S	&d
F	Wdy3/af0c2mW:R8=y)%   c}y䗟}+  "`|aL^Oh`erf+!ܷ@R20 n?{9O԰*+TIC
 Yk}ሗ{֡
 LvםM5PpmUA o;z] /O9sB!
V	#u-~b}k80⧯5_T|A Sn圏>ƫ.$]:~|2!_ξiVOLĄfbnK<j-p)Jvb#`7Ȼ/PVGO(j8"H.Sw`@*(Lpm!wW(D/F;ieg6tcwܧGVhi#fq%~ሿvk̤8;`d=t]mo"^*@6eyyh6nFo=|:ޞ%W賯u:֒:,7Iwn)~3ôm9LN H4 vqô%J144 UnT?c9m޻SO| O(cbbZ t]Gz2t:m*RJ x%l͟#S(D#˱iԄ#ޣ=+RJ  }Ǒ*MQPx\)*(Xf2W`:    IENDB`                                                                   ./mvappsvr/docroot/db/icons/link_go.png                                                             0000777 0000000 0000000 00000001217 12534142432 017100  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  !IDAT8c?%a`ggǝUn޼ykjj}$E1Ȉǧkĉ_xݻ<^uu7o 9r?HH-H CCCW^}OjjI&b@r+VxR҃삮'ON粷wΝСk׮1_| 5  =ptuu3O6$((h/77`b'0߸9  =p4zooUV]nsYO_`?iWd>ZpԘ6򺟒%;;{bM']37mgȈ3~iەsGmi6'oښơ1l3i@l+OMDǺ;4$CMӖzWe.]Ӏ='Juk7ni'-v/_pQ:~j3@l$_U3d`A }    IENDB`                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/arrow_out.png                                                           0000777 0000000 0000000 00000001122 12534142432 017472  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ݓoORaƟoqM
#EDrH<fM$4K\sdOSv3&-tim>Q"uv<}?d1&K3 oIx.0x&
/LBeKX;]k
s|GgqDj~#oъWa-z|2sD>Է?2XhG%ﾣ9_aT	Q3Lk}<8íCAh 6%F 05@z#OsЭ\Έچ"ݚ/h7UFep4=s
6,UDD˓lL&11P㚮eXO肼`pكlYsu͍cN`J{C$k	 A*n:=zZ'_ݘ._qYx@hμp[+ZDKaHrT_=?!ʄnnY>}M~-7    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/text_align_right.png                                                    0000777 0000000 0000000 00000000321 12534142432 021004  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   cIDAT(cπ01PD/0Ű?1&@@P0xhR#یHt^yω6?ݿ3n1`d HLdq    IENDB`                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/script_delete.png                                                       0000777 0000000 0000000 00000001453 12534142432 020306  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATKUe  Ϲwf1(MTHo#*iQ`TԮDТ"j^h-PE%dѢ|8ޙ=BC8|]5[u6m˸E,3+ڦy5^{l WjWӶfy۳=8XMyI'e(D7EE:;M:=ӗETS%Mrjn[eaJo|~ѮIwt6 7F$ƠDQ
AhҒ-:swHUyz6,ƬBVȅK#G%@SU7OuV2E
bF9j34U3wGGTNWY!əf4QDYX'RedI 1Rd?h%4jh!Q3!G'?ÿyi|]XS]R5*#ERYpcS~c硫sN3mJv?ι3~9HmE̊ѧ/L=!@gx^wÖx܅ex?8,:e:VZ^0>;S(ڢh-e{މ7= RNYp槭~c򫗍`y
{޶~zUKZdEZ:*v-dĔ c#6b=cz錏wIUyXJJFp    IENDB`                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/folder_star.png                                                         0000777 0000000 0000000 00000001363 12534142432 017764  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍoa?n[ݦ6hH !qGH\$$.JH\A$		&D"-Үmw}=36"d$3O;3QUeoR龉'k4}/~ϥV8~/ۅ'lW>ͷn2W̟$qs ^6\-GӢP-&7xFpHtŏ:Y9gnox9<lBRjzpiL8yu?Oaّ=)ΚWf1ƐnnCk}뿥2ꗗ{.כCL4@%lӉ1Kv{=tL&qWo!6J2(ҘQxG5"Mku<h$/3HTmɲl_7dW]~l/u|^o:R%UH<BJLwO8ySĪj>9V=M|Tj* K DU$.\"!hRG$UVN9R5X4)l<,CB /FRNEq-!@{P4_XlFQva-3!zg;#)glN    IENDB`                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/folder_page_white.png                                                   0000777 0000000 0000000 00000001177 12534142432 021132  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅;kA[dD RXh
&m?$V)ABƈHfw93^j^9yϙ'9w8q
7"ReafV `4vnl6ef1-k3#ƈQ4MoyI'I,j!^_^vn%=9!I+s!_XWyyq$97O rb?<534TP`EEQn/;sHY	D|}HNݧ#ӌBN5p<ꉳk,ϝd'~>Ξc= ;5Pc!B)PEOauAǆ`1.oʲ6L):CSu#Bި1yfB)9B`sP6T*c{wAlx:BWIe,yi{}qGw-*z2Njl?     IENDB`                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/linear_widget_icon.jpg                                                  0000777 0000000 0000000 00000004212 12534142432 021275  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 		



           C                                                   2                 : 	      !a13AQT"#2SbCRqB               5         acb!Q"#1Aqr23C   ? V5R6:`9CۀZ. '7m +}..Ὼܠ@@AM`U}^MP9R׸,vtY,(31Zj
H0Xو2Y* XN끼/7 @@Ahb|y- 0(/:1]x`am=.cb0ShLu?IEt`QSSHTY,xo'
\[dTTV fw1$[~6AabLU/{i0*HF2rٽ8XV"-ZH2[PSMz./ZL+&]Jڇdp{o4:X&EbJHX_[PKֵ◭&Edsڒfiw߬q	zdVC1ϭs9&iwn>gq!/ZL['Tᯢbf[u KtPqԳG.PfkqJ8|+TpQ]1= uqS L>>Db\]n[Q&}ioYޫZLrjڍRܥ(n^\)Tj($vRȬ6͑6HZ[^9{[P!GkKaȬW9{[P!!֗ymh	zdVvTf`+*{H&q'w4-sx$#z:j(O*6}:ʖ;;4{z&^Tǒ6厶	qvt)2:YQdLeKMnRe"*ʖFߥi?K/C1d6mKc`cDX:ľ)2:YTb41ʧl& ,Cr(ܭLɟ|&T:7#3Kb-ngdQ%4nZڇ3KbgXLKO9k*4u1.>1 &>Ie-u;3q.#ͮe?H=4{bM훲{+?i ?xjs{▁|R9ZjCm}5; \G+s9
*:8x4勎	CSOl:jFY@o_Q	Gf[ 278 {ݢ=K@)h-sV1}SR|VrXsUST~)jU9ߊZNw▥V5mo˞ Rbԕ3 RV,dŵ@ [<Noݧ1 "x./ŉuXt,'D7fZ騡I$e(,h8i<sAL;r<sAL;r<sAL;r<sAL;r<sAL;r<sAL;r<sAL;r<sAL;r<sAL;r<sAL;r<sAL;r<sAL;r*9LUOBo\ P9sn9 71|->? ژcܼ|->? ژcܼ|->? ژcܼ|eߧSw=UN]CE k6<=f kwN3y5~;'A<Ƞ#2h1|3{R|xFXK˞o_hw(                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/newspaper_link.png                                                      0000777 0000000 0000000 00000001423 12534142432 020476  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKqǽhpۿ1v=uQ7y!!F0*{%bQ!"\<~Ph/9sd d
+w{NSب_bVi}}]r8R./,JH\śLV$Il{w<b&\^^B'!455%LNN\ɬt:b<Ώa6!@fI'&"|>	o>@g%& wrB8˟CGn{VAPp _[[ XXX31L&qKe?1{+++T*x<cSfgg122!NCCCUV3===e)X,F`?H sbXyOkkk ;;;D[[A:[ZZ~*w2'333V Q؈@ H$/VbhLa^(
455*h
7DUKo*g0c=}}}9ɫxr딩^?׮j撢ѷRsssyqK|IL    IENDB`                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/error_delete.png                                                        0000777 0000000 0000000 00000001331 12534142432 020126  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  kIDAT8˕[HSa g{ 0*yI|Hkc

*H+(Q),-+ZCi]Ź9wοo#-;w}߹H H[@y{<+Z>J }DNƢD8Mڙ&#8RA:1;|UzCl5zIċt~<"[+}0S3[t|g aQE烽Tι:XT 4)}0?JݒG6mvFQCjXK~U#2wn r=1T h<|mR-U-쯳L9W!<"Ë[c\.:oC0v}vBwt\>=N9C>NHhlRٕ\0q\H^hS.	"fb@xd,lK,=WCO
ɏ执rڴcaKVopF4 9/abWSl<sT&}Qk|(]ԥU|V$]S6l	9o    IENDB`                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/table_add.png                                                           0000777 0000000 0000000 00000001227 12534142432 017356  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  )IDAT8˥OHTQ*ȨTFa4ۤBmMDUWQEDhaDYZb,#j,7%&acλo[]|swϱ1rZhg5AiFA.ق(hvTSDCRҽpAhzJVQTᬿu ߗlWR@D0l{R' 8^y/FĊ]]6ׁ7a2e4>c(syfr_O0X2>h:l:Rz'@r W+9rk<c(sZ)H-$	:FiiO_!: Ƕ< )xhAl!|b{ J	:vFB
sYUt7p&uaʢư{G?~Xos]L5t[>;MS3yyKKN_	Di|(QW!9=A['(\^ܰ6:αm9X 0ֱ`L    IENDB`                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/pencil.png                                                              0000777 0000000 0000000 00000000702 12534142432 016726  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  TIDAT8˭?Hq][p@\hZr0+ʐܲHlHH*$:2,S *A= _B\x7ÖZc<oozڈBЊ"9!B!>gvڀ,;SRNXjD|D62	(8`~vPOoCvs	8 ]|aɄ[ z/Nİ*tuXİ*QT.;kDbՀ̱<ݏy#~=庠q]}fĝZtlT3R%~>#w
-;06m7wU\&    IENDB`                                                              ./mvappsvr/docroot/db/icons/page_white_paint.png                                                    0000777 0000000 0000000 00000001260 12534142432 020763  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  BIDAT8ˍOA/8&b&('ś1$41PK($DiP)VmR
i~l62s=3ym6mAA8`t]VTB5}8NG5	]4,2EE<#JrLnopon
MӐ硨E$It
zþ٫11YApBNXde\.L&c	`>{(Qc~S0'[BnDyiF}]uLKxCSQ	"肞}ԗxҾPg5,Xj,p")W$@&K	:0D$OayW.M;'bDp8ES~|8$a0/*mav_C_ Yx
ӈ=)Hcxn=\[L"ŮP(Pn?@k.u>CK(ZlfZ_
[4S9G_Ѝ턍JA#lco,~Nč3    IENDB`                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/pilcrow.png                                                             0000777 0000000 0000000 00000000551 12534142432 017135  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%B.RXCc$1ÿHpמbx]`ǵJXA_{=A>&%^F͠"G8@60axxpg؎3_W?x@M[?a/}
	jsE?Xg4> ۷\~/V7 g&0D!;/.'&\	qs# ycJ    IENDB`                                                                                                                                                       ./mvappsvr/docroot/db/icons/coins.png                                                               0000777 0000000 0000000 00000001334 12534142432 016571  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  nIDAT8ˍk\us˙IL2i-^hK
P.ܸOƵr?PpU	٨D%ڀN;If93k|۽<;{7Kܨ|cWOxQxr۽q/܏6=toLͦo1 8.N!CrR?8::"\#ϑͿO憊ۯͻq#q:wIV#NW0Oҕe/>-PE:wS| .h`?NWA
< w-Gd
( VR7X1"̋34.Ӟhbh5]~@2m;^D /qz)eWV]SSNuHګ"up /a.M9_|rtw~Q#2%4N({4Fe?"<p6ƽmˤsɖQ'ɗSgi.LAM۪w?O_!¸Q-rffngW N)St&ԾݿY5ᦩPë́S4 /M~C5Qcӄ[ sZŞ    IENDB`                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/chart_organisation.png                                                  0000777 0000000 0000000 00000000674 12534142432 021342  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  NIDAT8˵RJQ=+Z@C@Vl$[Dt˘P`B4z`̙DyNj\3ʀ	-kL"Ҡ 6C4BX$/FL#si> ƴfNrZ]s}ȑec[բ(
xBf<Άd:7CFBHC >~,[뤤p}^Ahvsr)򗹹?[L7̢+B"U	\br\h^[W(T!͂vc|    IENDB`                                                                    ./mvappsvr/docroot/db/icons/shape_flip_vertical.png                                                 0000777 0000000 0000000 00000000642 12534142432 021462  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  4IDAT8˵JQc>EЦE"$XR aXaa	'a` BS4X\73/D9wb bPN_؞Z`羚	{[ vsx[_%l(!P
ag$ Do*v.@Xc;#98p!r#k\9jrK],1˾`6<<aN۵>QtŎ􅋙x+Y8uY u6Ӎp7`lETY'M&k[ NW1t;R    IENDB`                                                                                              ./mvappsvr/docroot/db/icons/page_white_add.png                                                      0000777 0000000 0000000 00000001000 12534142432 020370  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕KP[8V"Apj[JS,889U`(ZRǜKSӷpr/wk `PkRYeUѣ+J^7>,4E(R.C&A<X,I ,#P.QVJ
dY$	(JKthD |dkf&6:Fk96J*Ȳ)=0t:q	A#Z&r!.Bo8
ذwٛ 4_q`ST»ŉ-<VL p[D,Od>_Z?^D(z}=~H@a\a0m4e5eE0<#̕"&`AGya{4)l}O/!&R    IENDB`./mvappsvr/docroot/db/icons/pill_go.png                                                             0000777 0000000 0000000 00000001461 12534142432 017104  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥KLQ*@E^!F DX	QpEB\K]!q#Xq-BD)`$TBKt޹ޙIN&ss
1cWF$RirBȫ>;J8|<p:oIL&,홋O1л3UU(D"翏MLdy?Uy޻^/8 "8Ĩݎ,;o P'w|>i{| FH1`wNfEC|(4B4s;]6h?YSlvN$ET*|XmoQZڕ{& `hWe8:^4Rdq,t[Z`k+iX:50Be*U">~})ÝhKZ%E7DйU4W e:N!EM,FFk{,y8Dv0l7@ӹj8H'QwDMLYvDq#\^fBT( .Avk&
almtGR`rs+**٥MjBcTy+2QYyY|UD1~\GwiVVI@#n$=*Im{,eW(<xezp>biCQ^!EuKiٷ>~	1,;T    IENDB`                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/camera_small.png                                                        0000777 0000000 0000000 00000000751 12534142432 020100  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  {IDAT8S=kP=ψAbX'A$t)
ΝB!ݲt-8vg"t$tiXTL׼@CǽpsνPJqLpd=@/4MsSem[j5RTjB^'ݮZ,NH$jpf]AuJ%I((JF hPX|/C4
%xgy gY<Oc"(ɸHh4t 2	H`hOf=x~	8L8XLnpmcXAEc+t:i< "	a7^eĵk"c{ǽ^20 h4wit]~xxn<soF\Z    IENDB`                       ./mvappsvr/docroot/db/icons/application_view_tile.png                                               0000777 0000000 0000000 00000000721 12534142432 022027  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  cIDAT8˥K`%)CaS	)BDZڇQR4ZaQvIA7]xf"<0^ 8:9/hZpmH(	ĵEL<tɫVXk!z '۱g _g8@ڪЃp4J<QEӨ7-H~(f	s n[Mq ~-cݍFphAP\1Y5r ( URΈtT
~ ?[K֠^[tƮmN
-;)ٖiQ=tr.ˠUt|;|
. c^    IENDB`                                               ./mvappsvr/docroot/db/icons/cursor.png                                                              0000777 0000000 0000000 00000000542 12534142432 016773  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(}1Kq$uzBAib)\(98 `QpPQ"ڥ#Ahw'{O ){m=ʳ<Q1x<0*ŰcHea[P/5p̀6D
II{b@ćъ6	+j\δmBU
ȐfPfd-\({*rtl480=.s~W<D@0T1/    IENDB`                                                                                                                                                              ./mvappsvr/docroot/db/icons/date_magnify.png                                                        0000777 0000000 0000000 00000001307 12534142432 020105  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  YIDAT8ˍ_LRQAg67&裭zsO#/Q@:fJ]1G"]c	Էs.H6:{>w 4JjJ*+\E5tG/8BnG" oIcp:X*t؈](!z$6rzR٬*Օ0ssb`fltw#ىx[`Lr{|mo0fDd` Ѿ>`쭭xԄH2]]81@$D!"IUBGR
şQ*jR,%hs4 ! Jɒ7-<f,QgdՊ,,1Vx+o
h'ag}~^֧<tKڂ@HB<zq3X)A_
Hҏ+X]ӳ?\.oTre&pI%h񘚵 l}&]pCznx<sa9`LSphna{r@V{;~&.P:+R    IENDB`                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/link_edit.png                                                           0000777 0000000 0000000 00000001277 12534142432 017426  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  QIDAT8SMhuVQ;HMZۡ4%ZilԹ;9%!ٚERk#Ő-m37.]lЭxy^/'vww_	F3'*I'Q5co2JH$j@<_`0UĞ
0\GlLJi
r4occD"lJSU[;8r[@6)JAN#,|>!vCYAd7/6g< hK*fv5>?b~lxm(: `+D>!Cz
l[5cd477OƬJ{<8rBd"*l!A̷be3ڥseGHe')W{zzrup;IikjPq}.NQI۰L*cUGaaQۋmkVoೕ=f*]끕Y\pA BPy|GVnBVFLѳN/G6/bdtZ"9    IENDB`                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/layout_link.png                                                         0000777 0000000 0000000 00000001224 12534142432 020006  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  &IDAT8˥kRa]xtӕQ˃y!Er`(.Q!Wh̑b? M b4+yQ'b>p tUDX,>Z
pF~%ZQ,ZHl¿\~Aޥ#MzX: 0^wr]"u0}\w 0˿XǓ@Zr=;6LfנY\PPp31|@1B_p޾2\*""HMXm\~W$8vup(lh !ƽ^P(PZv0_ vT76xh`6Dp8h2VcA$t+ଘu͑@5>l6j|>t:M1#LJ`HrT*Rj	6g1bi3:gotxa,&  nӜeɥ/-6kd#
$qL&Ӯjݓgwa \W    IENDB`                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/application_side_boxes.png                                              0000777 0000000 0000000 00000000736 12534142432 022172  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  pIDATjaZ,CΠKN$48qQ(,bӰCq((Jm)KBu%۬"=x/3o؀%BeddBbk899{aݽ{0X\,:gsWLˌ|<|ޗhG&!obnbnO;;&c۾ɢZ*u72kkJyP'J
5A$Y4
T4ѐeJ%prHASқRT	2I4yuvno()gJɤȅ+nNShDcJ,SR)S
lzWݞ"P@u}@6V0Ds̥dUdV2    IENDB`                                  ./mvappsvr/docroot/db/icons/application_error.png                                                   0000777 0000000 0000000 00000001220 12534142432 021164  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  "IDAT;HayWfXhW$*2%#!\ۚli/[ *ji"KӴr(|S AH;CN9sk3517\sUQ3+sGҞ#=UВc=
EFbCk*U<[\hgNFT503GQ7괵6Dw"	BA	$"!&)wCTIڪ2%
jJ A!$^byn}T>'DFܜU"D" $P.vQ{"3%
f h~oѰ	q-nfFJU"}ys<ĵ71ﳏ*Qp5@Dy-,Ѱ̀J[Y\e`f  Ⳬ4ڏ_V+$q!j&XmsAy~{N$5x4zaK׷'=-/{V?d+h_q37q3p_H.%#    IENDB`                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/award_star_bronze_3.png                                                 0000777 0000000 0000000 00000001362 12534142432 021407  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}KHTQ;s̔ȔBE$UPVDԢm2"Zm
jaE*RzHaj,G|si1*#a?΃}XfFsP)M? h(ٳf	>ak-N*׋5$?=#s?sʹ+9Z	 #0hE!ҙ,"@lG'Xk~&f5,cZI|^A/S$h5HV69M|I{g2QWUXx;[p3vw7G\G<T&jm5ޜ>,0F$k@U#2?rI<crkŇPN;#j7z<Ό`,_`Oc¾CTT^Y-DHfLa,C@RHj%νxϷGWv0Sl&}6C8b
\L)X3(Zv;/-# `L
sC"*@t Yjw0~$]OymׂfqU Vl~^=.lV	@oEӳ~39	#)~O9G`D;n"lG
!g    IENDB`                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/basket_go.png                                                           0000777 0000000 0000000 00000001411 12534142432 017410  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥]HQ 0FFL
!J""4RISYpmk1rksk馴G$ڭVTlb7{<9
 ?RN"' b]yPlM]Y,41+gCw=2V@9ܔ9fNť{zΖQ{%F(D|h;ڠ贿$$	+F?D"*98drjz].'%IR$E2IkS pbPvh4V2>AX\r8cjj`bbKn>1yx```wpWj}@0crrLAXYt3}i
΄+8ޛ6Ftdccc###NeX8&))wQ6k'jmkN=fʭ< 0rA]k$f̪ 6lBf觥5Aa7s9hAbi"Jxx?J><{@Z18-A
r金7 $,T*!pu(WLEzTA..7o6Qt9vQC]x<^_];I7IF}    IENDB`                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/comment_edit.png                                                        0000777 0000000 0000000 00000001204 12534142432 020121  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍOHQڵStSBD,jH	hQFtI۲CdBE,A"HelDݵBumgye}9X=6=P7NKꥱVd">`m+!tQċZ9~MӒ!wA>>?3ᔿ.Ǯ2	eS7#׸4ufC 'h@boU:}punP4
,n^w	B=VcW xC`/C*6c=ш&.ǎ]2nB-KzamZ,0AǺK7OM| yL?1vq `	,pB&qv7=hp1tn!ެ)(^/.ކ[u1pJ73AeLqnBIDlXר[Wt?J)˟DIYAa+F=?\J./E.p?!    IENDB`                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/door_in.png                                                             0000777 0000000 0000000 00000001265 12534142432 017112  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  GIDAT8˕͋a?ϽwfL!o5K2X)Fbo1KYؐ%bGI
BF͌3](N9ro=?⌻2әp򕻭.^sgwgͬ6fJ8E˘rnN~H`fu B3l
$&' NqL&n3(i\	!%~fZ@5&&\NJ]gg7ǖ_3?qu2Ȫ$L@vGbjٶqCMQWĄc.Ⱦ_&KuVRTTT1E2ALuOո@*"}_Y8fjDKTK5jnjnʡ̣ǣ4'cND
\#&TFc1uΨ\~ԨQ7'f8!R
.a2VD0aN1~wM})Z;P;HJl#u)IlK%_  "-מq4~3%䱱1;]ՠZw/5ff{99;;b6A3]nR$NOc    IENDB`                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/error_go.png                                                            0000777 0000000 0000000 00000001336 12534142432 017276  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  pIDAT8ˍS]Ha~}fY*٢Y,,7gDЯ7ݔ0n4B$4HB,S(Q("Ĵ[m..7}EÁ<<103!ܵĊ?2,:ңXqM1皬Vt+Et)a1KþɸIuvohfyʊW ]2QX-bEIb9ZX_Lt߲H2myzO#袉g.oJ˙b`*]SM*pY0@A$@fY&@SS3g0fC\Cm'jY$D1d_۸7ABJd(׃WՈܾnfX[ZjטP $	rb"Dan9"zI?*4m(*Mϯ9  Kń0tCW:QQ}?Fhԭ  fq-	tC*vHRPLLjɷES0VBΰ""$rAq)9Q8w=|FgXƮzchApXj5l1R)_2vD    IENDB`                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/shape_rotate_anticlockwise.png                                          0000777 0000000 0000000 00000001221 12534142432 023046  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  #IDAT8˥MhA$ۦKmXQxMQ<YĂh(K*j"+Z(RZkP#a;_;mMCvf߼<קb\_;YqŦft-sf&W}q
5AP<~M"cbꍶTxm`ŀI3hr<lۼ@AYAkb\Ҏ>h泝G?eQLd

^S6, [PAg}Qh5Cß`x{mq*F? U5Ӱ19-}Kq&@1HW&3Ny KcVɃHW6.#W|~fSL_͠q2a a*.xZ*rnl(z~A=֒Z<o&o ;gv;-  0p"$Ύ᱂8x׸y5,7=7=kG=ߝlh
(ێa'jO_ObV4    IENDB`                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/package_add.png                                                         0000777 0000000 0000000 00000001603 12534142432 017660  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uKh\uGϝ;s'͐IR4(icҤJ*mJ".Ŋnč&V!M[IyiM&$9KUlS!FT#W7YLS7Uڦ#QSX`VE?S#>;)`fVTȎZ'l|;g56ƭy9"_t)FPum-GqAK3:ŽWq\۱q2j̩~oMc[wZNM;nfT	YEw_وωOs;6N>9M@<>ˬ!4||:Nzqc@nŰ6tPUW~}6"9Ū
:!"5ש& KPX$2JvGQ# V;]C~O)L&A9`ʨ5]-8u]awYTbB$_"2j5P5 HHr].,&!"ama(A\0Ep(+dʮG➚f~,]`rí($  
0%P~\lكl
cy<Ҿ91OgG^8kA;
Ȭc[j}O~7o;_;m>1'εcHXVD|5:Dvٳh/)smrOLu*\c/[9>8h}hbf*&Fu39_>֭"'	Ǘs׀>o#)S-    IENDB`                                                                                                                             ./mvappsvr/docroot/db/icons/link_error.png                                                          0000777 0000000 0000000 00000001272 12534142432 017625  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  LIDAT8ݒ_hQƅ`E]I+iE13sEE;WCB,IjMXcM(je:e喹%M`_tYu]^={pD Dظ`0\r:`2&i?m,c Z[[]l  nVk4LX.iyj Tzl6/&VQ*?zaX::mh`` ô̳(|>Z,˗xG<h4S= &02O H.ގgMMMBF[]'0?Շ4&0g0- tT|0fx$JQFAx3jGb&vCKKˌN[6EXQC(}q z}*!Ĺf}#3 햢bzo|9uCu7ኟ;I;Rg(7x1]ܘQWNd;I@=DK=b߳{] mo<Jskbե}هVq`] m/n νV"yq"DxNw GcMQJ    IENDB`                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/cup_key.png                                                             0000777 0000000 0000000 00000001410 12534142432 017110  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˭]HSaO^DtMEf^1Ӌ+PAJImmzWncgnn;l_Ώ噺{ϡuFPx9q^
 /PՀar)NpyfSXVl.va`qqD"dR<H41MӁRрˉ_YYA<˛aL>}xr]Dވ.&FHNXF7BAdUG#Rh233cH9<#KL>ۡYGuZ"+:}WI)4==F)P$A:F6m<aȤfnSSS^{?C(La~pAc?bZ2
ڛ04;POwT*}A،5l%Ԅcښ`ekTaaXA,@  ~/|vpH|0ݑCd\.'+0BX$c[8."nٟy~Eb`2::$FX, |#5>lx1aq6Yqկ?.V;Bv}_!=?W	8g%̽G1&kގ,+ڻcE:.Qc+z	=eP=iͩꢿ~ZQ3; 8C
    IENDB`                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/rss_go.png                                                              0000777 0000000 0000000 00000001173 12534142432 016753  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥KUasL(h$-*
ZscEEDTP@qaBP32?2Z9;L{P3،l60
^A<w X3H!@S?X `uTPjL|1dw쇂f~([}|@|Hl%8ޗ "Emnux A^Y4݃ 53PT%׉./HPA
@jd($E}D@ڋ}}J}LN]ۚh?jF#~7[R#CZztqUd6gZz	("Ȼ'F*2R(:zDO.#2sϯt{N8(TW$Hv6"|_Y`{u=137V"Vox[,jpHđk3wLL
~c`xߜrzy>UC6W(Q3s    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/building_delete.png                                                     0000777 0000000 0000000 00000001171 12534142432 020574  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKQwʒD	~Ӧ"j,Hh}-Q-](m"jBl3Bi1hB&-FLyg=(J:xrs|l̴fmڳMFU.tZ8X9,TZZZZ09v=X,zގH$6( pz|g^
(
TxM	e(pDΣ|>_ pb* "T{8+PQ./VQUNe{=f'Jrln4,^DD 14̾Hlkl:dݧrk("MA,$UZK<ʉlb*'PTw޼c8Z ؕ	Lbs	4Z |w_B$&a1=,{Nu,B|ȴQUz{{"^Js,P_]o,./w7,S)K]iPxt.>f 1(m    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/page_white_width.png                                                    0000777 0000000 0000000 00000000465 12534142432 020775  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(υA0E֕n\xqob♼Rw(gIu2U5S6VXʲJ6YhlOe<Ƥj56S&5 n2 ,be%,r[;zֳ
X`<ƐdzB7|!A/n2=VYro vZd    IENDB`                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/page_paintbrush.png                                                     0000777 0000000 0000000 00000001455 12534142432 020635  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATKe ZYL(	Z).$"ZDTAD(Tavݴ215o3x9?ĝ>d%lBdUWSqڱm} OG/%% ҉v~wg/ohKkGfٯ5% +ì.]ݾb^Xuԛ/޼vX2{rr2i^BDP%#<nѫu=5smPA
JPpW_(V1z?yɳIBFäa$N+Ͽm>~ v$(RJD	dS]y6>?<Y͕=s_%BzMh'y{ϯA}R;2Hd&I3?'Ml0Cw`:5e&IJ0~3{n3~fSƮd}+$+CػO{U6tkZ5w5E K5?-36˖_y"uΕ+|vpOɞSG8w7:fb+V㝬i0hZZ?A5R
Pҡ,жQa #7gfTd2jaWh#ވ1" I"%`}[RY^13    IENDB`                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/shape_rotate_clockwise.png                                              0000777 0000000 0000000 00000001241 12534142432 022174  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  3IDAT8˥OHTQƿ73<ԩ4Tv-e0-܄EE.\XII"	l8
*D{w9-Ɓ, /=w/qD9bmgОn==/SxB@V@5G1Ȯ.+זcуp@/df{77,mWC ƖGs|5^zT,(ߴskeGVY"Bv`k R7婦r(5@F 4H@n63o^`lrGf{7O
:
"N&WvI`oFE+*']Cˣ郡iN[%i "[:ihZ5[|Usduĵ%Ek9HqxF7XTuZ*8(	2| fTJ׶YZ%IVBnyC $ q^A
8yNQĒ[F6R~2`+
Ls/.Og晵#    IENDB`                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/chart_curve_add.png                                                     0000777 0000000 0000000 00000001371 12534142432 020574  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%L=nEKtw9. ~><26:}8?|# V4G:~4>αn60<>zx|{Wro.{ؕW#,"d\׼_˦mnQ0,=4tY!
{Ջnd-&o[]߹LMz,t`Iw`=][ }
'!c?U~!?#&;(!pkt%6gf{?͝-dç)j%78LLK//<f?~qu-WlYugK?GTٱhcG.E=<.7^I߳'tt,ё(՞i^H(ɀSmە9KSA@fmoo`
QXCD[Hޕ}WXsThgnV& _+m	©d$߻+l3a@* O gC8 Yx<qр    IENDB`                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/picture_go.png                                                          0000777 0000000 0000000 00000001366 12534142432 017623  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍkTWsg8ƷAmZ(RqB]UhtJB)?P
.ˊ-Q4ąbiLRcHd2{"/Ňs?/WzX!-7=GnJS࿒	sʃ5`J$9u3N<br;:Ab8} <Gc!
D\4G<Iim'Nz0:6iU @.P*.Uǆ=^$IBӖ*G(V6d-N<A #j{FsJ+Ɣh6*TJ[)"P 2T
x4CVСU֛*~-Db*;Nl;/wZ$=xo!g{ g.'5mx[Av;;RTN&ldp'4&=ŕXU1aPzݯ*	l}Xq-nMY\Tɼ#0U\<^rl=Jݘiԑ}`3J|}x	קV63:sk#sf:_}љ9G;wo0732q}aW>ֻa-zGNtvX70p4:ZuSrQvv    IENDB`                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/bug_edit.png                                                            0000777 0000000 0000000 00000001551 12534142432 017241  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uS/q`S{6eVBVRyvS<S+u!"ͰH)eWNrk_ĶGlЭVyTs&m_)-aM& `Dba1_~PI!n[6<hMẁulxԘSE!R/C{S~gA1Aו[bxpL72ape?oZx\Anj)q1/Pl	M'lJ-`!73YM¹ɍgP:Hݱ75݇+0R"{<edF.FK~.r;!ѐFAL#,(m6>t4	)=
IKR
!,#!E=;.],	V^M.({rG|ijcz0+.(B1"NnBˊp8$J8;U7Gz|z"9bĿԳSjg1Gդ7?htKt.EX8ڐ%܇.(;[_̭&ɵSS6Ԩk)PC,5f}'}0Ra	44;`~rkH0064 RK=I*pBs	뿟IT)R[%uQƌ|2W    IENDB`                                                                                                                                                       ./mvappsvr/docroot/db/icons/money_delete.png                                                        0000777 0000000 0000000 00000001446 12534142432 020133  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕]Lqi-wօ5E뢭nZE3+u}8mi_6ij|6RKPD45$T>DMȯZmE.Z.<9a `Tw|LmGXᑄuFHGtK[n)\[oIDk)
blo|Z"K򻯰* {RL`_6ta ԋjMyԞV@:*XB0Eˬ[`QECʕ:ׂymE;$c[p-뿍&+7ӳ*<RV{Z@`O9#(Z@嫩HhkHbhg
;[G9c8HӞT$D-ɂ:ZY̨!&nݨpA%K;{1Ď N(b=Fq?ͯ6L`T%G:XȌBLlMQ0$T
HSut\~&<sqX!0) 7(ǙAz<mG..|"2|,
~b~(rW7\A;n"Us*B6Hמ95_V2kL{ZF4޼MNO>ΨOgM޽8/7a7ʢ݅Gr;re/L_yJDT;rC    IENDB`                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/ruby_go.png                                                             0000777 0000000 0000000 00000001320 12534142432 017117  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  bIDAT8˥Kq?33:niXAAС(h :[!:]Үm:%rQ1w~k<<=<u̇ d Z*Xm@kTXo!،TFGo9lAS3BN"AJW	hMtF`rϛV p)YAHRHZZfgqbLdHEȒkAVI<\kqi'\]͂Ͻ䷵X!O_5ܱr<q)y&iܘc!mF=y W@⾎ǡB!"(%!𭢰`=Id{:?8?9r4jY8VY_Bya%t_ܗu)WV;gjkjʎA2$/׽Oy7J#ݙTUq_/FDjLfMs7}M41ٓA_(X-by1BnKrV>LsO؜`23#`mA-qEpo7\
?nzE삓{FFmߏGUbه    IENDB`                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/picture_edit.png                                                        0000777 0000000 0000000 00000001472 12534142432 020141  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}KhgO2$	I("mTA7U"KE]7EDp[kWPqB`MZ$)sg2>!jPrx_qƓRgK-M>`H%vo8BIkw_ f}i۶#~)JbLzY$Rtg/]
Rݙ!BC Mqlk_"#ۦe	jjz\ 	|5eP)A2mS
1B"xO%	dD,dL'?U^@9CrLŘzr)ںIz$wf(d3p© Mԛ{䨪ְELTi]kqK,YL2CHSWOQdlWS۾?wJ07@S^ef;S$/	zZf.ܥ_㍞G"dUᴷeCR
 @a>˚.oLg|ǣ=vhy'H9+]@tx{w5EdHgz{X+ҕ"l&$|3vM
C.!\7ĪC)HguwG!vk'^>'GZϖbC/`j\CZLߝd_̸u<}صݞ6֬ȠLae|b߶on;    IENDB`                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/page_white_dvd.png                                                      0000777 0000000 0000000 00000001176 12534142432 020433  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍn@EKJCQo<%A U%R0uT!DI\mdlǹ߯f΀ME~g: X!6t k=.9[Z,1\u:Z-TU1M>υ8[|T*!N#L"Buz=mضTr9O&yJfo$Sр$I<EV	3oy4*.X;\ \.sH^`f)£RDd2 ˲<L.@
z[B<:.*:^9'@`j@. x_1ʻRO3%qnu8=CJ3>t:婜.m $N80,3|!Db(Fa78vc q5jױ_
%D? (z{/=xq\B.Ç!d-@  6#^8rΏ`6 ,48 ݃kt~AZۻX%#? y"CupX    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/money_add.png                                                           0000777 0000000 0000000 00000001420 12534142432 017411  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕R[LQ^zt=zSԥ4lKa"rELRAh02oTCmi:Ok\پ-&1{]"airT`53myʀ@*}" i
 O4xsJPH0OxN8`(̈́
]\vw$P)=PB9.}3.u@gĮekP%kHB\Va,"jlajUG5"q57!!UF~Er0IHF,t޲3,$؇ǨlK!f<$]bj3oV0(X^W7g2O>bDl'sP9Gǫv8;Ũ!ubhΈ!¥EZ'K1*N.萘Z[Lr\ix_;]H	R6&oX36||jѿYta*s6|/ >aiv+@Y9̚MkP8XlwPWLW?9Sf-AzO*r4G1tgNUiUgwo'j@? S    IENDB`                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/database_error.png                                                      0000777 0000000 0000000 00000001252 12534142432 020432  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  <IDAT8˥SMRQi4áD'aj2IfSZᦂ`jjF	#h 	38Z$ry7rE>ν{0ݤi.qΏ=D%O;t,ӭh}G <n7EQtPTh4^b<"@ J=/ˢ1c\H&+VݒB@gB"g&c^,p:jZ"	64Lt%$I@	0ujs{fNA-)yR`Vd̄/1vO/}}E63HLtk~}^0}
':L`U43#:V._Z^$%Gȶ!S=p355̞ [:B IC<o8xkDI:L&-p~Rp{0o4"
|P~*jy~6,8,-\m%"hKE;?Qx694tc\MKbٟVݩO     IENDB`                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/bug_go.png                                                              0000777 0000000 0000000 00000001477 12534142432 016730  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}S[HanB"utwy(Xjyȅ4ticeuR9[˩i%F)YvteA"_!s9x{yyޏ @ag^DT3XI-<k:Shf9Kpb8_'ykBcRNM4S*fR$rmK\q89-'5g"&;CڧT4
\>m~B@2'`"7#PŢ+mO[Т7PaMA"$ZLq[s	}n"3ǃzӂTcw1F	a3G ul޵z,%XHE׌
${TKY]h7{-ՐBc3V?zBp}<{:B~eh{VHQbH"VJY CTq^9 ԍ#ICKb'o۷Ch5"~FA3^rt?o%oO0Y գԎfr5DZ5į]X	Tp.P-пj-$:P'"\qȿGeT+"Z] lrFF 3GýrXAvmrcd_3S
3u{{uFͭb\cg7So]g    IENDB`                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/folder_bell.png                                                         0000777 0000000 0000000 00000001415 12534142432 017727  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕OhTW͛I&vbbBA+" bAԆb,,(*r]X,ݨWE\f"jb;Ih&ɼs{bb{Y9WOugO>dgʧqW/{IҥyVg߿ĐyvD${^xٗq#r}>?v|ݝOOU^4w#4|g۔ar[1a\/ИH%$<R46oެT=7g*[҅)3RR>f6M2crLWmy%<ON`^M03:4Y	m-`5sAG,bWavdڧc[dܧey>[DbWˢ'XIu|4l%f FEш (itq&?$V~`'uAoW1<V88A\@\	ִ"i.Pi\ո#. 6 q\&݀6?ƽײ b\
g@b*b+8@l Ju7>"qK8@l	i:S\Iˀ# !ջ,VkЙ%6Ov,' H	2    IENDB`                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/textfield_add.png                                                       0000777 0000000 0000000 00000000501 12534142432 020251  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%ap`!xa 91\tf>]^j >o2gޯ}q)pb'xmٓO|yOmWG.Mo-I9߻w%oߕ ܾ3߉2 %G 恊;P$ i?5G;    IENDB`                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/dvd_key.png                                                             0000777 0000000 0000000 00000001460 12534142432 017103  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKqPК.JbX,/4,P4K7fD~bR:s6tsNm}}mst
繇us 9bh^?&&&~t:JժF5ңɔJNnab1B!XK3;$w:f -~id40}{<;'8J\À;ANwZIl`j5:7k8mg(D"Nza@4XȆdubnc^۝Vz<(D<3'ahhhP gN5X,	f3v;022d$Ld	16@$9CDB}v{:0Afp^E{]Y䘀uǻf$HHBpM
-@i/u޼XN%^ȇV."L]q	q1SsB$BnuXi v]-۪1GhJg&-@S(sz:op[9K/fgFx<VTl'x5B@ =3d_4Iꙉ:8'o"׃URBe\Ç|H$%MC_LOIFr팧RGb\r)    IENDB`                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/calculator_edit.png                                                     0000777 0000000 0000000 00000001377 12534142432 020623  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅ORam]u\?.ZwnYel-^hZ˺ylB!H*,&ؤXI$!rR6"MdOwf%Yy{<=y x<3d2`6aXK:λjc|>_y~,jz"Ji49 ^Ӽ'&Eչ>T5Z52'.(jc+N05/@L333zinNCCC5ڄ"L	`#|KKXhX,&똥
"mX-pIND	P@ ~>a;H!	)2#`io' 
\`0Hd2&'oc-1ZǮk-28 T*DQD"af1+S+
$X09}/=~psr l6J%|Dmˑ\"|>/4K$ňQ#ofc;j$~I<
rQ(uݎG|L0%X+E|S[D EQ@и"s4,pc@Pz4fߺr Kp1?r)rn*DOծPR#)؛~u8m~^ovfN? }gDI    IENDB`                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/folder_heart.png                                                        0000777 0000000 0000000 00000001345 12534142432 020116  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  wIDATϋe ;;m[!el F$t
;tʂNuPBRtDE]:u
R	rqvvfw" '++GJ;}qA;Uf;yg=U h۷=z?7-f+~qq^Υ_~}ڙϗj _<]{g4bw!mj
pRV SmDaP2!0fQJ [a{<39̘lh<+?|@JXt7XX9%-)sc<R"oYCg[z]<Υ~Ɠɉ<JӛDn:T3g>*=\ǩoxڑfMya9/ߩtM}Ese큃[yIRf0u 9IǮ%2Q5ocdI#L4Ύ FDdͿ_L-ъ2!)  &
 
E4ĜhD<y fQDsDSQEޢLP:M҃RJN%逤B"jy2 uf?_=!   $rGW6S    IENDB`                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/image_delete.png                                                        0000777 0000000 0000000 00000001215 12534142432 020060  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥MHQsoPF2B
UDm hDP07QZE"+藠EDLD?$??i1:E˽sys*U[#)d+2@MXLD|=ATjrPAleL:sXb6g.w"oERY0Ƨe}[wUF1gpn0/rE\|&":Z3xb)RTa<9ϱ$yWe*;JήAJ`lT"2?2y(t\oe/%qƁ;Dƾ|V3	-^MIM?SIxo!Ά<Tֱ.'-s\	W5/69ij&
چ*)$XZHa)`zz ՁwT^840|*{|5g'=+q­}_*s7#_    IENDB`                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/world_delete.png                                                        0000777 0000000 0000000 00000001661 12534142432 020132  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  CIDAT8]Kh\e g1aRSKaZRSHRRDQRvN7Xڍ-[lĖTRCJҘ$df2w;wSK,4ftbd8 Z U>h˟kF'FL`xP$k=AP|B"|'ۼ	6?;Dp4*BP#Mk}tUdl^5Щ06an5'r5DgQz	 r ;2-ԩM'Aa90RE$[BKq3W}ylp{n͈V	&ABdŠYnWgM@.J1 5ǩnSX*2"\ecMq%{5&ΆR	H8fm˝&jK7$bI|OdL)\E3$9K*E{KdmkaBRe˳:#,M?D8!B	Ji [As|cG<ǹd;9|F,Oq,4CEkkuCV}O|E-тiP-N6b
׿sDo^@%ldѿ8vrsg.XGil" ɐKv@,q_5 ran[;č5Z?бSS?pMmlfHջ2=IዓG^DTMM 5}FS_V,;:)=w3%YZL=$q޿0RL4    IENDB`                                                                               ./mvappsvr/docroot/db/icons/resultset_last.png                                                      0000777 0000000 0000000 00000001014 12534142432 020526  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8œkQ7;	*,E/A^TI%XX,,?H6ɨAQL&q>X&_q81)%v]j1W٫G;E)<dZ	JI/X9Ó퇷^|{q^k6P``(%a]BRJlOmTM<CnVU$(A 3p8-Xdr<C|$Xl0J"{d&Q: A[|/8{hdDn;oVv^QI$ₒ8*ADQ|)s8g},=>}z>wOu{G%lj٘=*l__v$>l    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/flag_blue.png                                                           0000777 0000000 0000000 00000001237 12534142432 017400  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  1IDAT8˥]HSap)#rO,UDuQTJR^DEIԤL:1Hkᚉ6-LZJneb88 /ÁsxNDᘭoY.:{$/Tw6
{2FqOTFd`øpk^I$_*= i੫Bр3KUH\~@{1@w|><0¸c:d`A,I`@] ꤗBoC*<CH|g8VE%"[j} pS75<ӊC}lf{	X{~EנzέgOԺ'coh t4FWgn,qdv
@u&'J7PMs;$h"gҦ/WѼS܌X slTmbK)i. )>	
t`A.?@ʄSSVBn)+<&~l9/dg Kp5]-    IENDB`                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/application_delete.png                                                  0000777 0000000 0000000 00000001142 12534142432 021300  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATOhqp-fA)(ɑrB\VkrsB
(O7/Vn,I;gv>VS"PBr#X<h?h+ќk0ۥR{+5_*(ŕc}ԉk-jY
j#@!< #Jx%\Mx8D͒aJLX)f	3
QD"WSN-2B$+nSPjY!Ddf a QDA-©gD"2##zxc? UY$afE	~tW<rսۙ5ϟd_$j`aɌdF0}{x}۳rD cZjα,_L-O~h.݉,BbG4/2I͋˫:lrNVkO]2I[/L,zФ`lo`FbK	    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/font_delete.png                                                         0000777 0000000 0000000 00000001225 12534142432 017745  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  'IDAT8c?%f8ppwks~[n̲*etW/$#^욯,to➗w=߽%~;]ۦskɄMxO+~-\]9MewZ\wmAӺ'r$*,
/*%Ͼ(nڝCfV944SUY7I;{8LG岇]^R:Ć 1su0^q-궟FgD&~Uo8յꍅMmo+# @1 4} A	Klߵ(:[.g\S\q)]Dϭ7:AlaU\w|$oSN{P8.ֿ	4_pWi-mË8wvd^?;Dw?Pӏ2a8.p2Er*YMaחW*sݑp
$ \(    IENDB`                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/layout_add.png                                                          0000777 0000000 0000000 00000001101 12534142432 017573  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%LO>W|_''8S&:ݽ5#0?s5nxsx0$0`0Ƈnc0"Z7/l6# q}u{SW.0X1XmN]'e7/ߢx܀￡`Dum_M(<{+L?oyڎ5褯_픵(,߻[Lٮ7ϖ쁸܀lxy&{ߓ2;؀C`4# >Ն].M 2BݻJ w& v_Hޭ{WX`ٖ%?G ć1?;@ [F	]    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/folder_wrench.png                                                       0000777 0000000 0000000 00000001344 12534142432 020300  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  vIDAToTe{sNkSKW]F阰lX)Ewv,@!n&ĸsEjM,ԯF׽K2Ʈ̌j٧:ӗZޘzmrr2
}1 "-
,,,~OcAD)"R5%"URT!PVOJ%Z!{ݻ3g7}ov/7lllP޳XUgbgs`2p<9޸_}sK+f?He8K7lff[^zÅ!5iΉA
7wK\4W=z#>2~A	q`2_y!ޢ/YQCSkKh6CxJ	ƀ%C:˿bzqkV2Xytgic[;mL;ǯWL$C;`@U|!-3R)5b¤cձРBɑ6XaFC&8^1!Xx)&,40i`&mL34]}yg{#h0&9(<.$̼Ŗ7>,2 wף} dԸW    IENDB`                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/transmit_edit.png                                                       0000777 0000000 0000000 00000001520 12534142432 020321  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅]LedG;Pc"FGxa0$%)ȆXYժԲ
ligEUXJ?AAǐkl|0}z@W# WLzkG2f޹'/:%nv7@ř`Np%-]LhA<CLOb+p6 Ft#Lj>Mt$Sbϥl>ȷn:^V!l'*>ѱv6sGg41$zvݓ\+5ZNJaudekQ2q^"9u:Bt/.t'ԸU硂Չ:S{L6^QDϐܲS9DW.;7w|u,AfƷ/bQ/hAFkCA}
'$ư>7}Yfgx毣Q|`C۝RR)!cSߜk2kb2c>rw\&&T0P{BO֐TddҸ=Zȏu+Ɨ"<m8Ik:?8L[?\f<Ӱʒ
:OVUdz4)ky5	+F̀[w0R`m[v_s:6xFsrr^"pbVVV$?Ց@)    IENDB`                                                                                                                                                                                ./mvappsvr/docroot/db/icons/printer.png                                                             0000777 0000000 0000000 00000001333 12534142432 017140  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  mIDAT8ˍKSa]w8o H*a十x*AKA@u"ՆXK9<y}{[33:8}>y^8 U;O;QGJR-X|OpixH(%,Hs$JHE_xxK
zm)RA3ʮRFZƃ7PO/B%EI_e!|$HLvx|nJ`rr$A~-vP3Eծ^ J^ qP{*ئ^S2[L@gggFq{*,$35$(oUlUt ]%K70>>FӭL&_(YA000,PX__($
q"R5Cϟyg2H$nd~)Jp;;;MLL1v;8`Zzz'шQ6f__VY=nddx؁Ҹ%l:::XvnnжN
X"8:!A9IHgK^TCR)[Sÿ"'kvcxgzȬ[    IENDB`                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/email_add.png                                                           0000777 0000000 0000000 00000001371 12534142432 017356  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SKhQ=e2|&imF,u!UD(E)E\ΥDApӍn܈VЅ֍ڪԸhRjQCԆNi3$y3TPW>8;39w8΢y;)Eo4,jsA60\&fb~~aAH&b󧺣)';?&ͽ[RgUVְl`|р;X,ȗm,(PTÉɀ
h:T	):ȽWa#JbD( AR[h<Mְ<;xhP(D1dmQd" QF%%{G,lMw2-H]q<STlxx: "u,Oٟ
5UcV*22DяBYwQ3	,q
#' 砛rD)qrRFP͸=m3FÇnكoOzR?/}IT%xeTF'ԇFz;}Ъ/X]<wr|\;
Dp|9+1eGcle/O,~ɇb8w/[&۱~HL|~I:}S|!s#7~D"G)W    IENDB`                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/photo.png                                                               0000777 0000000 0000000 00000001115 12534142432 016604  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥kao0bQH СIQUΊ訃( .CmѭAT"X1i:<wy8pι3d_8WɑL`",es3qw
BfH' 4׾lsX`2nx~5Dvߵ%FN;Ld uŭ[Lڨn6d(h#	K$ OjLH`TA
,p,_x;ˀbҮyV 9YQhk5gc:S{(PTv7fLQVG>DĘXX$=ȅ#rӱ!ܝj2'ogEN,K%~]@L	ű2~1s
@ynB8$I0y|uww_dk0_,OB    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/accept.png                                                              0000777 0000000 0000000 00000001415 12534142432 016715  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥KSa;vvl	dD!P{$;ż,Kݽ6cL2r^H)-jsNm֔2qQB̽BatoL#z{q 'r=)La8,u%2Rg>ݾW ϛJ<!GA\lF$THC;
تtxR~^^i2XCLd&3IM	_ؔ=\B@N2Ʋ9USPLB1U T!k0xpܞ#HBb1l5؄
_1O,$O>߸PdmakD|=G	Vn6[Įd 桚(Pm.0Q`'Fb#&ܧ6aP׏Q12[+zi; ]C17оpI9̾jD}?7ayze,hXAK^3*bk@+wQ=!}uXzq:g쯺n=:d+_GTA;ՐJƣ.!P)5!H:epր"݂"Kyw|{H2!i~3z_X;okBZK*
^R:O(jF*^ȰS诿_gЬyc    IENDB`                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/text_indent.png                                                         0000777 0000000 0000000 00000000541 12534142432 020002  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%B@,0Fyy1ǿ~ w^F>FJ -ﮔבmDgΜD1\ukf@E40вn6O3[_NMջNaŕW3ݽ)L랞W`n3[>A·V)j
cǂ|&@TN>|` 	&	2H    IENDB`                                                                                                                                                               ./mvappsvr/docroot/db/icons/chart_bar_add.png                                                       0000777 0000000 0000000 00000001162 12534142432 020212  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥=KaP%D:BC`-}W)".mZK`8Xd%84$o>Ԡ!t3\)̌Q{U9+Q ʳKŉ !*U@r~rC!eӓZNH6BB {xܢ*KBB4|2(ݵLLU)r1\Ȥ=5~\KB!ރ$">)XF1K@p.E[ʌ(ĘH>B> C4[OP_3@|SU{r# .QenLlp}hgv_V8*.\iR|,.*FGȕH4H]'6XNq`Z˝9 M=ʹa0m)"jolS^U^Q-tifv *YI^}^C'}类Y4 }vq    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/folder_palette.png                                                      0000777 0000000 0000000 00000001466 12534142432 020455  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT}KlTU߹yt:3Z+؊T`b(JIԕhb+dJCB4qJwnԘV$$5D@X0ev,sܹsk4>%"+2xd`Jrva???:%"7;ͯ{t󰀔X]QZ[4w_/?5md||5޲ְI`Elgm?&*@ZwNj8γ˓^r;/>ym(k㸎@ÏBJ7}R߲ق/	،GsRߤ/]s{(jٹя|넋f=bc?XsU`%ixZ"l$.8%M.xFܷ{{C.X#o!rG	& V:6zyhf
DКkwJrV,,/`.nP9%&%v
:ʉo~>p9ïD[gUʹ&m"˦sHED$bĄh"6"TĴ%?PfxĈXMW &@lAbv1!(ſy$"
5D7DL 1CĴAl묋Ibn/mgآ#-܊H'c0Q$ؘD[CPԙ+1    IENDB`                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/text_kerning.png                                                        0000777 0000000 0000000 00000000757 12534142432 020167  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%ap2'l@yyy=hNE999qqq`lllkii k6())	ׯʧttBHH//dP\ 4 x~nn}?h9ͷZ@lwwvvvajUTTdddP(,,t :Y@'5ܔ_mUi,,, R+)) 6+N:y|qqq"""`sI(vƽWUNNPVV7%Nv :YPB?|u 677}6669 d,--N:A;W㍫ᧅXXX
@R T    IENDB`                 ./mvappsvr/docroot/db/icons/chart_line_edit.png                                                     0000777 0000000 0000000 00000001316 12534142432 020573  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  `IDAT8c?%,M_|z<l\@_9'KkvrcltƖcGs],	ksN-n,{cs_;;s߿֣\sɜbWO.ORۺؿ?"";V`_vʹɹ]tvy???7Ą?cb~=(7_+9{hWvvwkv9ߞ}qӓF8_ɻ&}`Uw+~;?Z3^u1@	D%N/?Զ|ˡw:}cfOu
}KAۚ%(ۡ'(KnOuvB%);Uy0y@	ɔM?9o/T5^%Pq^o
J6<aCTfjN?ON;+΍5~r]%| :Ş9:    IENDB`                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/sport_tennis.png                                                        0000777 0000000 0000000 00000001564 12534142432 020212  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8UKh\u{LDh:E\Y,T| @".B]mP7*DwB)&(EڤBhҴNgyܹw颴$g}ps2W1fŗꤲ˛_/㇝~q`.V/L9Mxw+*$kY9kd:jm,-Xik8uy,[3/˄_8ZI1tl\U46^sAPt6g3㦧 &mm-Y B/|=zyt(&6/Q/?<6?~NOY^H\d9dATe14ok"G;N4YEjaz۫t#r=T+L8 HF,GK*Xuݺ;5AZvh`8VKTս'N«x}`z,F#
(;N";IiD!O!;<";L#[	I3Kr%dFeIl+FqdVqr/N!:)HӼ>OsmO|O2XjMPZ̺vTP8Bw'bI-1"еkt};Ixv.OW:EP|!fy9+Ӎ()c:z:JX?mT^YEp_ѤŘUJA"fNrߺcd    IENDB`                                                                                                                                            ./mvappsvr/docroot/db/icons/vcard_edit.png                                                          0000777 0000000 0000000 00000001407 12534142432 017563  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥;LSa"Pb1A#!"bta2N:nD:&Z)XUE{S<99NWLR8R%.#J*`1oq.bBsGu܌
lW8krO(icdm3!׺[SI$0p~ qm_!R̯ @{ *wҴ}t֎Nb:)]2ZF]Mk8/y^M-)!jfj/4N$3TMϋ2>ʃU<l¯G +Պ߼tŦdkf,EK)1gMj݋ #tȇ^5. ?00,k2AىoSf.=ۻ"C7h5H$FxijLand{fNQX	)%J,B!W"cQgkS3}ƜYK:i\}e[ݼRJ+e::&_IK+P}mpd㖻tp;ȧ2]=X{}pyky!?ܱjYHο7uUڮ ۊd^8/9tFr;    IENDB`                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/asterisk_orange.png                                                     0000777 0000000 0000000 00000001370 12534142432 020636  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥]HQm,AEb8BRnj
"taTTvQT,YQڏf$'!*`(Kk1]ۜy6Rݼ0y||# gͻ9R'OY#(CUC
,1n ȝ%za\ՌϾ#X@+c⒨_ 4x f!t%N_ewe`[(ma^eٖ
}Ş <I Oq5NR5^*U/@imH4k٨f_:If՗|RQ :gŒ,De鷗L`i5ܵ<̄پs\"GNI9ڸ0sH0T/ٝ|7Nkt̴lӸ)4xw4'YV2LV*}&NѶ6fP4H꧓>!?a^yrI4/5;"O7ё/g$)ɂV
|ɆԿڕ 2훺r!p9/ڽqV&eLk;ɴ{tй:I|st1:b'q켨JZ1uk0\,Uz}ȮN5`<	{B2HZH's]yw;O
DGc    IENDB`                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/area_widget_icon.gif                                                    0000777 0000000 0000000 00000012472 12534142432 020727  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    Uz ~w a0v u?A 茌ۨy)ѽf3̢Ǚf K0v~"v2f C7֤s /Ź`ϼ 2鯺g3{vbUf 䳓Ӗ֟y0ӷ@t s8k՞ ݊Ô},Ss } &+` ʮ
|<ſyAZ檲1ֳx 	i,Wt
~Ӡv¬Ư渍
v:ą˶"k߬X$ Řǿķj߯p7ѯJm2ּ@ˊ[4ʬ̙ ʹ$eʰ
c ˃V	{･IÖѺy#䅧ßZz ݢ慵 } Ŷ9{ }
|,7ﮅ͝l:)n6ē d1f !   ,        	H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0c|@HBM5e
%`51WO
?+zlcQtcZGPUe֘BJ"$EŁC*<XP/0``k/|/1]*l83V>p\DƤ4c\fe3^
lR[m/*{8|I.{ٗvpvMq Vz[0o
|Ab]QcpU%-_w8ԓ~Q _yfPS9i ($h},TLXNZ  -83W$#S4j-NCBBAHVy Q3BLV8z8k)$bRY/POvf^)#_Iי-1i')ޡ$DN(aerP)&R4F=J!*%Jmd9j
$#lrBJv,PE)Y#OtmYj>j5
M6`ؒM9 .b$.'d#6JAfi" S#@9&[ Uט.Vk;-)T+uRdRf0͝PbY0`<Є0|+DDxO1aUyg]XQAa"npD<a 41_0;/a@%iGdw-d~!M7@32!}v	75.([5gC0"z<tc/=z'Pc:ੇax-2S@-׏;֘R8,wnHЧ!,<3#&Hpe<xtGf00C_
Ѕ	CF82yO$'P
)pHԦ4u"8$?:<D$@\GX!i:bhn<m5@En|G).e\T
*BFW*ҁs#p_5-  BfLʻ!Hc%axNQD 7	DE[j=S&hTe[ʳ5o/TpAO@".
sJ\	;t <["*JnЃfy( JX"@
I `;MLME](!,g^Д}+ټLz:b6pIqjY<p0U(ZĤ29 xИW4pӇEBcOnY$QTQ?KmV'T|iLZduh^9jaPHJ5iEeF+L4v5ǜܐ\sꮉED'#^X3ٱ	da3Zu|e>ROY]Yt`NB l	H,X)"z[Ğ.Ձ  _tQ|PAnLKU|9}]𺤪}}-UNpAdJĉ=!'r?'F1^U|XZwŮKjccҘ,NNzȬ=|(;@UX( D*G0T܀D921CKYB$OTd!NnN)1缨Wtd	B@_)%Z(Rl׀E0p@Ҩ4b-Mh!؁>pF5kUÏsV	с`TcbH}Кv8thIeh+&+xgTPv4w]AIՐu58qnN	Yqp`u =!t{Ͷ\xnC3 t6M%Â7&VrMDCpÛlxކxq
zxܲĴ=a+jJy˗#~8ęv@;`K@r߁ r,jrF`:^@oF8.A%ȴrG3x:ޫAht ;wM{-GJ~>O#3KobE3(ΊH[[aQ_?/ ԺjO󨫛ݱ='T#En}I~IRs;XYqGwƸAA_n&`
	v
s{.tv-H@N_ ]q&0
I쐂*	`0utsR 	 }m+{'`pŰ\؅^iɠ ]G7ɇx3xІmxp؃	X|Pv k(D
`
U8  Xh[`	PfX8Xwr	wppxu8׃TgPX`R=pV0V@H 
 ؊ ` 5XgtX(rk؆rl'0S!ְs0	ؐ˸[@wp瀍٘\8 [	Woq	j0I!i000
R2(YU	\ /	nWtÐy	IpiWppȈJ 	P`xIUp@x8h=ɖ?!A	9{s0sI{)00Zb q	`Ih>jITP	{@i	
	
YّY`aKGXr"9:	iyCYiꉛy)ٕ%pЎFvWɖZT.C`P2Zz98:Z)C IwII8I&)Ii=0g	 p00 j*@Y4YǈߙRz|0ACV@ǟjPu"	@  ʰp0Pj3ꦝiTIvYz)4 zY @.PNT?4 jLP#0lʪ0C)z)=P	YXo 
̩ ?#6"* L JfmJji骠v9,;A[ૃ	   r$b°*r:ڭ
lN[ZM o5;p`g"b;6!@gJ*9ڐ ";1;qGjw۪ٙ"Ivy ;K5
 |; 2;
: zHMAp +pBA>qr;wy^g[-+B:e:ۼŠ ,$Ab VjA@	0E˹J;DidPh{+\&8 9	>?Y찟ZFK	ShQ(A1|q"."@; [tS ,╻fL2+
*h1	9p^|%Z1q`#1M2=[`4Lh5%0&.H`ȏpj&셶&8fiæ\!M1cA[Q$ЁE;TOUL[(8Pq>)`3FO1^|$~G	>@>b =]}
-(=]mTw+pg 
h0jQ~p\E1
0qTϏ@qĠ\Z
 h`80 
~p>OM@w&ω8e^[SACM5\0չ2NqN\Ϯ@
 H@`ڜ%|TqmϏkUag6! 6;f`Ъq>i"?1PMi=Hۻۼ܁$ܹMܺ=w!=]}֍1=]ޥ ;                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/report_user.png                                                         0000777 0000000 0000000 00000001421 12534142432 020024  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕[HaM]$tRsvRD:X)I6ff>>u\jS:7k)fI:-Z9S!-H1߾o0{s, s-$>rN,jNl1حammmC!*jh]R!
1YZZj4f4|>
m6,|
`H[%L{sw@s>h-;/1Kla:;;dW<{Af&#0K4JՓ猪9Κҁ_.z
`y( u7Hp@h<&j
,..}@'L?'7u:=J!n
zR9"!!`b`6݂D"G~.H\ǎZv	8) ;3ԍz(PP@H,E	-jЛLx񲖋bz=4@ss3jq6<\ϺAD͎!?~,|	r@ k.d<$D"%ARKmş'Iݜ}r2v1]WӉLOOpurrvV5@T[Nخο59JZ    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/money_euro.png                                                          0000777 0000000 0000000 00000001135 12534142432 017636  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKQO?QE*a+"dz~n`(k![#^%sv5,si;+̟pP;=|{sl)
dwޛf7ŧRh"XN@5q8ΏY	Eo2!OSO	7)t[po5X4de︐Ҽ!9̎uG[$u3TO	V~=9-Ʒ3TU6t˛}18R/Q&Q|{,EW.	C"RXtAPUND쯑ZU9O@X ~r
VZҰZj-(rΫ]
O;i婫ޯg׸ء/QvnܙaU{ְQOH޴Q)|2g;O];1ӃG''Cݝ@w#7]	+?S(ުTC:_r=UnhK    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/emoticon_happy.png                                                      0000777 0000000 0000000 00000001333 12534142432 020473  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  mIDAT8˥KSq+=PbhWd/^,DcdĈ,gY8(Ct,[sMe{ݻ{o~;.jbP?8w?и2DFvK&Qю N6i$A+kh(VIH<#Ӷ }4	FI]Pu
UO!pQVlK.l|wB[mНh1Yh>xˌ9(X 9N kCj: *Dދ16 ,׈!3.T"3wqSe<N.E~,.!J r<}^7b 1,X _'N#	@mXďXf,4\ |J/!.t㧮a14 ҡmמؠA
Zچ5(i]XJ߰AS*!*	wBR3\^R&IJ%<2#;"C<ƪw/eY$}-ة|U0|ۊʗV,Y	e~HEKNpD0s^:|_Œ.    IENDB`                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/drink.png                                                               0000777 0000000 0000000 00000001264 12534142432 016567  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  FIDAT8˥KOQ]E,YWCئv3IUcC
*"3B$ h<Ϳb?s3ws9n )|>fwAK|**&a<cDP(=Ϸx6U JQjT5Muh4PVAr8d0N1nQו"fp70qvv@i˷L&n# 5#bWQCVtm:Rj^v_zjwkz_2}|]/n/ONNU LFz֔O>^ ]?U|a~`Jk+y
)kb^0Q~zT5"zZ պbtO̯NT*y?'(xTvrX,yټk4^hjh@ 4`0PTPqq||NW<<<Ԭ C$Ȳl;Er|c{d ͱHBN~\QCVS5lQY1,.5=qXx    IENDB`                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/key_go.png                                                              0000777 0000000 0000000 00000001350 12534142432 016731  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  zIDAT8ˍ]HaU$E!$42= ~)~v"Lm,ÜsPjV6A9,Kڟ}Z-r_<Q xDMW9(f8V<=8@fb́/u~anZD|m$2-CDLkdM 630ۄ)%|yz1ڋߒ5!H
\H{O`)g5og`C;Ҏ,9C)[<~vR,9ꅸ΅NkR1)[!hM"]6D2p>-{P4D9ۣm,҂6=pqPܞcǈ
*S	kqUnRE"
0;y_|KŐ(BU%H_OsbW%%g7T,χgpXZ(:("L*,;EH߬fEdsJ4!)"Od)F.eB[9H&vQ	f1nP-٥lX^e"YL_p!zj}DהUqH,6Ş `ԙ*f    IENDB`                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/drive_key.png                                                           0000777 0000000 0000000 00000001251 12534142432 017435  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ;IDAT8˥SkQ懆lC6 "E(O\/ě dsLh%MjMMFcfͺuCZcfofweY8q8	Z7M3ea|1ɤ)Qv-E"'MxP*h4l(B!H7NLsل(bDd?Y\v0:!
%2P(Ptꕂ~}ƨ~	UdrJeI &EQ ˲3 
Fawb{!=Au
.dH8n,Bנ48ǜHqJ0JނB8D^>*&x<xW>[0-0NWl
U/7kx
o2tTWۚiZ!_巐;`f_uavdra[܍+w/魧)l{5){N<t?[Cg.x__}Zrűt[:_JsS~tY ׁRVZ    IENDB`                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/cd_delete.png                                                           0000777 0000000 0000000 00000001377 12534142432 017375  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKHTa'ԅ킈6j"
k媢ZDD
Bf(JD63MӚiyst3̙ѹ9sxaL<cL{h;,T!$D	jeYȶ=igXH,C5e[Ͷ7:^-!%jJ!fUe1{b/<k /'~ dxMbOa3A@n	yfk&kx;Ĉ00餉!(A\h[[
p<1^-J@ VFCM}nbZn&Tݩc9Hk%dНPE{D UG`ěTf+#@u#IB s6oIdXG1^7}/u Kh={S0&+sIpǅL,鯫ymyrT6fekG`O0}$̳J		=:Jˉ҅-)$
Aۦt4RFۺ+zwǊmG)O導dhr&K -KjELYqX^ُ%/8g(cYᨽvdO-#+Ȱ    IENDB`                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/database.png                                                            0000777 0000000 0000000 00000000606 12534142432 017223  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATϊaG4&&	O8
I͆sR(Qd,YjĔf<{\   @vWν+zZwfyy#_|;xK*I$I!E, 7 8nC߭Y9%:J4Mhi!(3hPbl@aXuR̠A-͆.C3?١M+d-tР}mゕIl9؆)zT;3C'QӃ tG    IENDB`                                                                                                                          ./mvappsvr/docroot/db/icons/folder_magnify.png                                                      0000777 0000000 0000000 00000001256 12534142432 020446  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  @IDAT8˥OQE$:@$&D'1@BLtrq#1%j1:MҊoK{Zi'<˽9<ϹsU"{󅛱Ѭo$\SP-./$|0}dWvl8!W6hct/쾄>Ɣjʏ?zD2h@CbɖJ'qHRhg8DDFmcZmScC9j橭?aP3H\qrnuS#1aUgu&pb	A6tHܙ{3CuHX%Ɍ̒X+l}X\9}t/,6D^#C2bKX%ck_Ŧ6*"]jˈJ+w^X~7:ѥ\'?PDaZ6+-2uk^"8"q^@8U9"Z~)(2~=ԛ+=Y	y    IENDB`                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/sport_basketball.png                                                    0000777 0000000 0000000 00000001721 12534142432 021011  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  cIDAT8m]L[e @wm)--.܄"a2EEMޜك>,Fgb|W%Q6ӨdƂ! &]irޖKoa<a6RP<g'3u^?q6A<P˯}4Jb{ȶ#_^.27:Q1-ߖ58HP*tY(7HD^[t\ǡ D~sSIG@]/cT{0Sq<-7#9j/ksO:wzgO5="1A[4>y:ԍsk6:=x#򛯆3?Q줐ͰrɴvD1SҵK])*lIͮWi;seSt8x
f`tyhdPI&3,^l$`6h$aMjlJ8'T'W($qwhr_:62zls!L\YT+h/_J-4a	T!l!X&!ӔwU=D!.܀`y_e"\a*"_|QfsP`74$m@,E!ňݕKѢtR\1uC<z37y8K*,aYSZgb4P"&FF~!P^6,Qь3C؎?=I$dg[|5{PJ<W_ǈ8_%Ύk=~K=TN<I3=V?Ng    IENDB`                                               ./mvappsvr/docroot/db/icons/page_code.png                                                           0000777 0000000 0000000 00000001462 12534142432 017366  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT=Khe%!5Jt!dcA.7tBJpĽA7QX`X	iƙIswwNfU8
 K p#d~jL]t=7NʐC;[\K#ߟiEz4ȽyCTܠp#%gSND~_+="!JBE c| g8+ǁJlT@EPTA6wwoDx;Yx1c(-4iΩF\`vFBm	6OC&eC^<f@E Ag6i,(}yJy >UW&kQ##'dQP)?Ym,*yE w}PZwxHZār|Z31^BBJaP.vFbFwgV_E叵6OWT*JP$G/}2R}u+ϾFa0pjIOL98%tM;nrxlބh.tqsϼ1K7/S]98IDzR,y@~\)0q\5!FTXtvjF~]uwmrr&`YEqwd"1
 r;Q\    IENDB`                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/star.png                                                                0000777 0000000 0000000 00000001236 12534142432 016430  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  0IDAT8˕KQƟ{3ΌchT~4ha"mBUh?ЪEmZlQ`% uc͇|BMpts`E7!%0OW@k2cc<'&Wx}g@qqj$9$  5bA^U<|,gedSt?8:;_DBRF_7;$p@C"l -h3-(
a qBتU~jLfpl-$ILRpRh׫  $`eC!nN&]6rUХHjDQBN@ЪU[)vlaRC,=
ʀ@e^MXs;vO<D5@9(LǴv6k>(KqF 
a4J$υhõ^Oo*΂8{?ξ_ܪ(^䯖&쇻۝ Fs")    IENDB`                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/user_add.png                                                            0000777 0000000 0000000 00000001352 12534142432 017244  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  |IDAT8˥HSQ폒"[!BbQbԄ4ۖMh(3e͖:l-|[3CWsd!P!4ԅ+DAЅ=s?yUQ'6HwB/fBȞˈUoH)&<+cC'a(~)=ȭZW`B"<\9Afkf].~;^1իǐ	<'#_ć{M	*0gE|7F|qo?9"wXfKPAcAvL;1?JPؙ?BJ0	Q5V -2r,Ox"5<	E=},:=I/>pO:6%9ɃGP^{ F !KU.ȚOZ%;@"DV	@Sg&~sЯ ZF<ziڥŽfTWĹglTk]W"Z`ފ}}T!8k'!YH$Fς{qkAHiԢRyk1N1 %5jGVAV0ź>	h&yaW{\Ȅ/|9~R?ѹ g.jQf:ӑ/F.Pk?FFP    IENDB`                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/clock_delete.png                                                        0000777 0000000 0000000 00000001670 12534142432 020076  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  JIDAT8]{LSgƏfYL1?FmFc2$&K9]&stF6¸8pu(rAPF)mp>{ωk̾w 3|@(P߇훈tƯedDT׾qC[NnHoκ]lȜQX,2f\t?׬r^r組X:УX<u2y9d\;kg:p25;
}<':S-:/7.d͵=-^kV7!g Op
 *ZP>{ׄ o4KVF5`kZqF2yic_axl觓82)(1 r4{EO<뫬/M=-`2mT(qG[l%Z&XL{EO< 9c	238BpB8Y2^xf^W; x3U=WtPVt=	3$) \&_֍2hp]x*v*Fjl& %רЛo/#ȪX˦T)`]j5ѷt=
Y\<Gx{b(K
͛oJɭ7GH"iWڥ׎ukg/"=10V+tldݑb|_JTX23L/'yK¸dnhhXHpvuORsJOD4yD9)9h'FnIM
(// fEh*siJ^y Gq{$    IENDB`                                                                        ./mvappsvr/docroot/db/icons/arrow_in.png                                                            0000777 0000000 0000000 00000001130 12534142432 017270  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ݑNQyy-4@"b*`ŦkK=$:H()	&e.]/V^V/ UC Cgf	,o^`6`y80#'n4B}!Z"RE<Y4W1t+
(+I<;ahy@V~S!pJJ`Y7دzaK
C`p@<{iw0#V7`3z}֡._nydM$i۶V֨7	JAN;DWxrfO_"~I7
z>j1ETa* <x.;kjt˓#bM7VQT1U	4Y[Kigџf0,-{aPaK!XԠ}iWל&Mmz%ӗ;=`ZUuI$_/.p%    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/css_delete.png                                                          0000777 0000000 0000000 00000001216 12534142432 017567  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8˥SkA]eilA!lVV"A<O=A
(%,))jL$f3;ΛiS<x̏of&& ǀ608[C1Bȥ`s&3aN!4'1(ƱVdV 	w@%Ti!J#=nEYA.wNX]]up-Ϙ8cae'g|JTP*6Z:Ubr2,kz}W]St(dF:soTd2+פaS>LA9TSff
JZtQz_p,>-\*"mHTV`y?'x{;`RiˍQ}D֞#yݽ8;)dUgu	QG$x +`-Jv@Bl?Tֽ(3W3|n<~gƹ!j"{	a>    IENDB`                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/css.png                                                                 0000777 0000000 0000000 00000001014 12534142432 016241  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8SMKBQ=CF7"kE3ЮM-WF\ab ݏYB;s33Ƙ1XK^ygZKPTHО%0GH31FЙH5뎀LO+p 5Ed8fTj6!
]{!	nK)23&,xOOML&(өG@BPO {x|l(Nk#@tkQz(ϓuD$n_m8-BF#$_R XQy0x`p4TzslZIGDwQBd2G+6n{}v#l4yDJh7~=b2    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/user_gray.png                                                           0000777 0000000 0000000 00000001302 12534142432 017451  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  TIDAT8˥[haGPD*"A(a?M2i[sQ͋0]$эqժ@ی§{/pExy ֽ0ڍHG=N
k֬W E;{7U;0>`֑!&!n@9_^ZT6?ވj!Ưh0X#am?m'Fl	T[]|~kXCT秇$JsX.dqhKSjVhJx=~yJ!ɁN'維P**SHRChNq`0x7d2	Պl6L&Ʉax<twwWd2 lH˲H00rX,jlFp\W,5^D8qp8@&3ߏb.-*`1R)NDH%j+" S؏J?4jt:멑W,3鏮.,DEeּҴtl"]"
x!%,6㫯E ~!    IENDB`                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/dvd_add.png                                                             0000777 0000000 0000000 00000001424 12534142432 017043  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKQ}]uYD`Wu!hD#^4s%vn))b6YQsonSx9& )Td0zu:oFQJT=c6x7g~?08$bl6+}\C+gvJ@ >Pl~(z +s&iǁ].(7Vbk'II_V"u
	 lC2fG:aUdxܭߺHěKKK r8DL@ތ 7_aFbX.*((~EΆ#< et:111A:er`^/QYY 2I0	y!b]Tv
.T\Y ;eY(nunHJСDI%- -t}g|a0E6)e_X`*W,B^id2|||(Y{~`9i	[c}mG ߳T*xѮ4痍B`9iw9nm5V-TLmmmyZ44q15&QmF@=*J[KW&yT{677k^S^v1\^Q.-?3Gf&Iټ$d`S    IENDB`                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/table_edit.png                                                          0000777 0000000 0000000 00000001350 12534142432 017550  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  zIDAT8˥YHQeƲ1k26+mq Z^" "|Z AzA_
,*u&\(4BetԱt(AQtss5lkGOk	UR
@(
4B["F*HnPZ
K7>nL0Jt_A(W	\NW)w'2i@܇Uo1+R* |wdmKGm  dG:7CoHn`D^1{Rs61i5m. T(-]?ei0#b#sjk8]oԄؖBj^9H 6􌉁V1wo6&PV`P&ePb/<0W#E,dm55IO2ŉf3l)8WoPq-ӠiWG'Dz^*,f*o̫ S"	2kt/Fߴ]RInb{ưL2.aRM*(%'HGM>Խ)<CwG{ Ji5#H:tjNfW}-9;Y;$1:`w'7/ϰksОc*Kݴ+C    IENDB`                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/arrow_refresh_small.png                                                 0000777 0000000 0000000 00000000772 12534142432 021523  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%}I2w1m@ƎK)e@#i$ޓ?}{C\2
siMV_s7_umW/ْoJ9|7Wo>\?q}A+/ٜgn.ٛ @_v&0CnLVD"пPƵǖX w |gO&;\[T2._+K^ ;ke%LUDUSg4 ߗO?O;DJxY.k77Z)WNR8g { Kdg&<fLUTɍ0 5|    IENDB`      ./mvappsvr/docroot/db/icons/user_delete.png                                                         0000777 0000000 0000000 00000001377 12534142432 017765  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥kHQm
J¾*,D22/SP,IbJC,6VݲY}Q䦨_g Bq?,[LZP&M˶@-@̵E	$8˺%5Q<ܦ܈4DvyUATPWBp3~UUK8$@dqr53?`E^ǨM)wOӤ[QP:tF(zjNW&kb{NTX&d7Py_Ԭ_V ѹ)>}!/<ox?O\w/l`bGR^O@S^g1>h`عᒓjP=
^(		b\+H̴wPcn*`$d[6nַ!vb	N5NèY\?A薰>9>SDj	"j	ԂWvZw#N{*ǔ=PCAGOXB	!+峒neY|>Rn1Wx[0H3!bDs"q.34ne^|d\XŰrm"wfӎftpvvQ{    IENDB`                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/arrow_up.png                                                            0000777 0000000 0000000 00000000564 12534142432 017320  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥?/Qϲhg5j%'F,[
LH	3(vw=fcoN{O~9VM4Q7ܿ)v/WQ=&bpSO^'&^:\˨6eND!& 9꒣_|?\srx,g*,(F#d[O aAA*Pp1O+C$`)*w`A#0$	*?b&NR    IENDB`                                                                                                                                            ./mvappsvr/docroot/db/icons/shape_align_middle.png                                                  0000777 0000000 0000000 00000000636 12534142432 021252  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  0IDAT8˥1JCAEb!VbK\]t]XffBDFP{Z̏!JS̝u٥~=oܐ6'ݟ G`2`˳@6X&)8>!&4JLʔ!vViR"24= {]M7LO#tjB5L\!jQ fn-+%YESX,?jAnO(!	u["խ3Me/5M--ɾ#^BD˭:?~aIWo"ϻ]qĎH    IENDB`                                                                                                  ./mvappsvr/docroot/db/icons/folder_lightbulb.png                                                    0000777 0000000 0000000 00000001345 12534142432 020767  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  wIDAT8}͋Mq?9sKӄ4c.JaÖ,X[YT%$E1{ιsX2,=}߾#l3txPl;\(dev`qk'+z%82`L[Եj_,#Aꚸh}ۣI.3{>*7:׷A IJP\2; `r> f|w/м#<K5Ɛ*.zWZdD?	⦟#DYp^&Ŕ~~3#vm=(2!Hn F2]L\B~1j/\?&>xm8@^#X9$U7P<-5S|2-2y>O \\g}tۏ Tkǹ%>24AY$u%vlHbs	2sļ.d_Y%ߺ*ftj8Ʒ!w$|7 Qת_[jQM@	Y`Uwgkд:D)u1huԅ޴:.k
"DQߛz]<@@0ب6w܂;v{K	2.'    IENDB`                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/database_edit.png                                                       0000777 0000000 0000000 00000001377 12534142432 020236  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅SKLQ=N;'k@J'bdƥHHфDeaVĥ1ƭ]C"!"DRL;ߛ0ěw;c h4ʑຮG?H@B+sDᰆMPB>FK{nt-CE$IdQޞPEH]"LUUcbbuχY  iris42\.80s$AR)B!vWe(^.Q(P,5M3x{hn|)B<w0f#OL@-04͌9%dJ뇧"`(4 X#oA1=AbrRȫ[hw
Jz~$Ps؜e8<upI3im9{gǆ ՝b2
<aB~R!GI5HDsQp7\Fivbs?Yh[f,[FAH<kG1,6ee]600$B,Շw8䬨'Mm,{xzMWH,Wyov:^}l GqL^j}<=²I    IENDB`                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/tag.png                                                                 0000777 0000000 0000000 00000000605 12534142432 016231  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%a`l:{{z,b0ͯ?x/~~$ {B+ܧ`!^+?HNVZED~p~S/!$'=\߁r(6e_c7@~\3Fwf-c\馗g>t7#B?.I#I{O}t$4w\0PL"dpX][kң{+E_2-o)?9)I Gyiԭ    IENDB`                                                                                                                           ./mvappsvr/docroot/db/icons/cart_remove.png                                                         0000777 0000000 0000000 00000001401 12534142432 017757  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕MHaץKFnuE^ᡃBR͗m^ՙ&	s(65`c)z$B|<AZNÏ~E*P빞>ƹoo$_CՖ+hL|`1@dqMMMa||v/Dd48A{1?++n3ޔ){{{Ίppp¸T]G$Fp FJ{x|CCC?x2Kbuu;;;9E|WX+YM @6GooSXYYd\}z㘊M&x{zzD"lnn2[[[FB:]W*<wdn7666hwtwwWB(BX<invvvGzs:T3H
T
BTd!p8N!O$`Za6)ijh4Phoo?&΋mmmhiiYbrnl %ͺvuuA&bhlRTܼMĒ_%d4[5x^FZPD֘Ԣ{Y:RTg&ŒF*Ɵ_r]    IENDB`                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/server_error.png                                                        0000777 0000000 0000000 00000001246 12534142432 020177  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  8IDAT8˥SkAm7M5E5zГEs`īԣP~
'ԄU
VBfbmғ7	!?_`F\^}V
Pe<KPTb7M3%8G.-z	Ǚx<~(Rs.8	0"s]	tx1LFW*%"ݸ8uYї@
PʌDRet !9i,SfJݎHЇͽ{%$HRMaٓ8j{::D*v@9'06]08FAbb< H85>ra4>HjhQ|f~ӻJqǁni?U?amU՗1rƿBza`p0{Ig61
}k80>3m:s}۶M#Z<^4=D.M5f٩Vم>oWko=?CBnnFv~a~fԁW    IENDB`                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/monitor_add.png                                                         0000777 0000000 0000000 00000001264 12534142432 017757  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  FIDAT8ˍMHTQ5(!	\L&2M>ZqmIDp&PBE*RYqZNc
us;s=JD9Xk1d}Zg}KK Xkf}cD 3@D$FR^'}4X׭Sa`	ձc( ?BZ8+0   RTڐXO
,"`G`2gDح@kѧJ)6S'EQ"	pe*ZB(*=<!n 9)(2@"X'}Bx?Gh'VF,/-QT|ammD0([I!@F߭>ʵoZ1|X(uTy;YV;˵{Ƙ泍.pkW\FM|<HGr/Vh>ѐH
QULSm+ />aK0PAC,2D`1&Gh){Ry=W3'[b#|M;m 	?^lj݅n'    IENDB`                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/asterisk_yellow.png                                                     0000777 0000000 0000000 00000001347 12534142432 020702  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  yIDAT8˥KTaƟa-j9ijDETQ@1I&V);D-sD"̏QgRk9w5Z<9/Hb!
ʼp,Ͼ3N?j5G+C.f%L*o3M`)8D{F[l9Z͹U}sud43bQ[RoIvr7ޤq5c\|z*a$][ 
,[RI"l12x'|FjaY/rA*f?LE ELwChP_ c5Pp)9fA7s	9/L~>7dS!{/V?@l*ydLކ
]Gp*{"3tRI}/7KVtV.ۥPc
>o"4TSH{Z6,<9F}pL*f<҆-B]+,I+.~'sl#!lZuZѺl+wx!BNJH/:ePm%𴸗L:%    IENDB`                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/html_add.png                                                            0000777 0000000 0000000 00000001272 12534142432 017233  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  LIDATKa̙aFR&i\vX`a!llea3%IR
6.X1d7yyl5_bfLDLPvG/D'BPQ8F2~Z!jH4A JQ2~6.DQCD	bxQD|0(>(Ռ!fp!X΁:+ViJkK5]4\dEN J%KpASN@Еe̬0-)sUț"(Y(ru4!wpUX[ŀfPȸby$kJWG9~:Mŀf<y]f:#8rCO'Zx3ȝ`'A"ƹ%twre?@}Ǟۦގ9|P(.^']e:(l^[{(r5o߅Gj%jJ訖WKLftM)1J9y~~9H@6VN^}Cb^J<ǣ<h-U0-l߬c[E~^ȽwyPbfef5;pC? a    IENDB`                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/rosette.png                                                             0000777 0000000 0000000 00000001241 12534142432 017140  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  3IDAT8˅KoQOiZF7]P(eT֘hzj(UD@?½Å. 0sIu.̼g|ߜOM=㖈Mإa1zBn^@fsǎC$ od:琹GK=lI	v4d~ Z~-*4D:C?F\G3v*;yX33ɘOȗrk0`k:	X
_F Psw02Ҕ-RBNPD(b,G noeִ,Ц<P5(x03B\I(o݀9[:Qꀪ`|I 2}T.1?QB|2LNp1H8Lod
fr5J>v j$Orn93TCm40n~eU@yzz(⋮&& o3&x<YP-O?c ,q0Cj1V!_95;N% `C^mPNjQŪ],vng_ërܚy4lyC    IENDB`                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/style_add.png                                                           0000777 0000000 0000000 00000001514 12534142432 017426  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?ͺ˓κ=/M;C~|>i0rMon{;μJ.LF(u`ԟps+>ZO(w볋$Ʀ +o~]w_6EՎ&"}Z{M:6i۬Ak.|quwodΘIǟԙrk)Hg^pV9g_\Nu\?N03~{: pk}GzM\Dfl bP3>MW2hD`qySx2eɄ1Km{h{e @zk_t+#0zUOqbƬ{&6K@["g>xa؀ϿO;g_gqcsCoGO?qɓbgkr!ç|at΍'Sg3%ZV67}̺e޻|O7N߿;xty8̾&aޣb'c]o<k@Ϟ{gK$c3mw>x*w"ا+s#MĴٽ'߾}{(1ݻJ knߙ vE@Z{4JA|xQ@ O gC8 唕I    IENDB`                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/bullet_disk.png                                                         0000777 0000000 0000000 00000000743 12534142432 017762  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  uIDAT=kQܹYǍTH+!hK;U~A,D{Q$BRɇ`5̒ٝ;爰ц%GK/6;E8h8e	j|_Ȕ'2.&]ƽoXx؋wCT L9"EYgo/NM%+D'✐ԍxa@y(˒"tSǤx'E 3,UbHPlKChL3%
<QQg2K
p``t}W{Oy"	)ʘg;ebGR1O+bo%ypp<@/BĽS7[.ӟZ#5|Q^aJ̌6-9ZˢVza    IENDB`                             ./mvappsvr/docroot/db/icons/cart_error.png                                                          0000777 0000000 0000000 00000001426 12534142432 017622  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥OaYO*6E7U\yfMQTAAQx^k@A<yX.Wk]lϞ~ ZPTxP |>($1::
^Ͻ-r1^06J+CѼd2YZ"h.,d@4<$N'j"q
׋p8l|"6|OJ?88omm4p݈FT*1 DA9z,qP(ܿFFFP(0114p'Մ6`^g'bli$	1q6͈TXQ.
;Դt:B===FQe(~ڂi"]|ѰΊbGgmՊmd_w58ʒ~V	itvvB# M53tle܁JV9
-T(5N/oc3qg%(rdJ$Jv[ص%`L׌݅'5羙e#Ts')'?E'H:`KPǐ{aĳ#=;N3SİN1*1x
~ `Wž    IENDB`                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/cart_edit.png                                                           0000777 0000000 0000000 00000001425 12534142432 017415  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SKa޿]DEtQjUm(E,mR`.]tmtSSӶٜn$+.4~M#A<y h4PT8>$rt:1>>łah4B׳lD2x^r9d2J֓$0ۣRTx<l"#(&&&D`ZٚAPNRt4FGGnCCC\ohZ.D{|jUg+Y1AVVҙCk@IvV  Czǡ###HӰ`f40mRzȭzO0@ e0l2c`ߋxAmf@qTގ{{{PP*Ws{ߪ@cw%V|loݘWGz5yN9(
#PgZ3I'A:KL^\.T6Tl.~ǼMLؚ{%eQ)/|>#`<-flɮD&.:Y3$	yw 3#L5O.\x<Fk,z~[u&l.:ڮ-']or]R    IENDB`                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/textfield.png                                                           0000777 0000000 0000000 00000000231 12534142432 017441  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   +IDAT(cπ2A!P<DA #_A\  +v*    IENDB`                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/transmit_go.png                                                         0000777 0000000 0000000 00000001512 12534142432 020002  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mkHSqA !$Fa8VdbdxKj&x+SCS-K͉Fe\*C~S}	":]R}+_EI`EcxX+f/F-<.pg05$׃0p]A/X0֦c0%p
_Caaɺ#V<4o'g{t9r<0Ҳ'M=ұFc"e[->s}3_ƍPe:F΍
g	(
`{UЛ=gyliN(!p+c̊=?P/}/#*m46#KQrb%Qoѝ'[V/CDwGk^wdv@J׃,vYLfpzl)AOv5)\{L)6KΏVU~DwFtuܮɹSw,mdGϕ$);DBJjdqfb|6<ϱW}[x
zZGs/kB@YQeѯ,%ڭe |푉r?
)*ec"n]Rfnw <4嫣cVB`$˙@d6X/
أ#5s+;w:VAc/Ԫb%tev{Uo'Y[^`ݒQ6ڋ(^]霌! aO    IENDB`                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/application_get.png                                                     0000777 0000000 0000000 00000001105 12534142432 020614  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT?Ka>OeH *?[iZ!$!"B(l9zM4eD( su]yK!~>B=?d;Ꮉx8aGf;O'3sӱ!vc۳9`H?V?GbK<<n]}BQE8Š5	sX0zFQA$A$
"%!%$C㉪
o27N܃N@RJ`
,9ST6	"H@H  ,p짇x8y(CH	H3t6~7E͙m($y7ɹaldѣcԹ˕WP0 $!@3\v@6Ս~$ёu/ayMiref/d$_~,^{'7pw,g6dlo0=-lQD?:3d>*QDeR%    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/table_row_insert.png                                                    0000777 0000000 0000000 00000001201 12534142432 021011  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SKhQ=MьF\ACjѥ+	gYčHUv!.]*(ҊNAvcui"%NtMN.*yμVnM9k2mh(9ZXLD`zrա=K
-<wVEArZƙko;!^@PkeuT{VeO@4Epd'zK3Yd6n/"LhNH,.x*ѺB	{낛tH]w?wD&,6g=~2
vO%%TO_a"\!Kl͕focgz3:--KJ*\?3]599J"|G06aI/UJk\a[ԡ7?A^~)W%jG`c1(,<`{]6o-
=19Gj]1d.\+|+Yo}QLJ𤎝>翔[ybˆk    IENDB`                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/sound_low.png                                                           0000777 0000000 0000000 00000001014 12534142432 017462  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ӽKap!j5E!H"4358|;7h3ry oBQBD×Y~ ~ӟlƩ(MˎbYUgY>@g
 zk 7 rYQ*qqqf3HC@|1eܢnjh@e
!@(ć@6X8' +.*EA*(t~HD .qN+Sj
xf i|@wbY3GG
$)X,
}fb;o[n
MyHf-cC D"FCaax<nڕxsKA2c4t3`	8cxdRǱqzaӇDWἬBLmL呴I1N3    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/brick_edit.png                                                          0000777 0000000 0000000 00000001407 12534142432 017556  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅SkRQ O=KDDc4Fa,V+CX[!T:lզӡsE?v%N&SS66wjWua0G>8||?9p z86-j)rCLLL4_3v$F ՊP(Zj@ 8k4bĽwZ"lcg\]23X,AHr`ۡr$II0zY"M~_D*<oV9R/W,X,e!6sG76g2A>G6E2du=\G%
XPMLçr9lll`}}tM]4bױ9ۃE]'wJ^VDQDP@&ax<h4Glj%ĥVQae+f7*sz HRlԄwrO
JK/Eyf P*\>stDVWWq!D)މeHc<&z
_R4j?-	6vlƢjHr"<[0
	_\׌RYY'">tTq)Qq?[v
ƫ7Ćm'v&Z/[{)~     IENDB`                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/bullet_yellow.png                                                       0000777 0000000 0000000 00000000437 12534142432 020343  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8=Aq9d1d(Yn]qn<Τp	VYuN$K> ,z]oCvUX&VytL2kуF'm<p mU㼬C⏅yb $**FE2RQ(_θ7i    IENDB`                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/feed_magnify.png                                                        0000777 0000000 0000000 00000001341 12534142432 020071  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  sIDAT]he  }t5aPTIȠAEDeF?E]tD`Bjz@ȜCmvf{<!{ (|isڂǎuL!iSB B$b@B@@][iT9t"1DDH]32F{N
qg;\?m>H߳|uz_2u(
zeNN*"v׸1Ffy4Ͼ,#+3QD~I6CV~fO11C+)JrR}Hh3~g.,tn;0xSk/.=RwpڇybqN,<=5"m$r[X'r#{]Vs#n]p{{#C6`mRānITIirol>l6Y_4Q)eEN
ba怺YC톼eu`wg&'u]`Y5[{}}Ckw׬nݣ$.Q{4Z\!+=W6OЋ5[;=ſy~kuhm{DG{UAQQTyEQQVTrgߠgʐ9i>J#G%rȹy^*k,(    IENDB`                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/telephone_key.png                                                       0000777 0000000 0000000 00000001561 12534142432 020313  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATMhuI&mӴMhڮTP7Edͳ E/IP2u"^d!}a[kڬok皶i|,UpҒioePT0  zxGzV)ml.tz:^h	Q	#bT1F0c0pk^먷;t%2xGpszY&oʑn@[7nLuc3IL9J4bU*ED٪\+` jӀg,ғI`Y֧R;tECGc("!٩022W$6Ϭɦd"NgDbZaG!Qd|K,fg'Σ*Ws:>ÇVU,U~LΝ'vL<sW%R_] v߭M9Zvez&b=mQvrhxq8Nߥ%{0)mGϽTKR!joD`{?Gy3׽CM{Xba}n'ey39BcbaK	&4],\0!U(ecuc)qrS%f|5Uu}0;~+'Iŭ[BCT._y'""	"ԥcM"rǫ_Rc*2qpcklekߝ '>*    IENDB`                                                                                                                                               ./mvappsvr/docroot/db/icons/phone_delete.png                                                        0000777 0000000 0000000 00000001147 12534142432 020113  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ?Hq?yVa"]ߓZ
!?BS45e[4Dr h($9Yj.{)[>}h&U*ek=PUv㭏3ˊHphT=qC\d2B R)N-V*q(`qB@qG #1FDFfD89UEܝ 3QHTS$//XQΖ婍[gz(3do&9-cgO_lYvAP@UY\\X{+fk/r&vk!UZ300ؽJT"NDoo/N߿˛ԪY*eGp|۶Vx=DT:޽kO6bhrrrV!"[[G⇃.Z1l47/@;?    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/spark_widget_icon.gif                                                   0000777 0000000 0000000 00000002446 12534142432 021137  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89ad K    𙙙thV,F|pppx>'뽽j̣ ^^YY//EE  ⼶ttť  捍||p2Ŕ                                                                                                                                                !     ,    d K  OAGF1>1<IB


8	%H6O"(E//$O(O%4-9&҂|aÇ%0$ \ A9p
G` 20F.B^y4Ѡ@	)+ !	r C@
lOA` *B0P O&x8_	8px "d@8ȃDh 膎C">BDN`!)W!-J:pC$xb+tX&-B5-n |p $|bAJ=	&Z_
ϸ_Ͼ˟OϿ (7	݇$&H_@!MThaHra"Z"#"R"p#ĉ č8:4FD8XbH?)K&b$OآG"9We&vYcT*&gryX:i#9fYC$^ Z চc~~*ʉe2wifnzz棅Li"Jɨ穝&jșJhgzn$H
;fl
¬ -ҾIsn)j+Z)bnѦ;n+ȼ!zmH֛{pvpdq .w<nz|.<:|(s
3|9+=kBk [VmX\w`-dmhlp-tmx|_  ;                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/note_go.png                                                             0000777 0000000 0000000 00000001225 12534142432 017107  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  'IDAT8˥AHAߺZ)Rf`D!a!{cDك<vڭCE( 	M*E3MW]o7:J<x*s JzE%A}Š3v>vPr
}vA@*B6 D(Qj= BKHnB-B0h0h   E4A{8Ղ]1!"$Dd̼CO-&O)(CYGA
ǫMnkcRi~eyH<Iv`DQD9Xp)șm:[1pM;>@7Cr	]x	(󜩿ĖsoTE 1De)ZO 7#3 Hp8Lr;~-O}690d_bPc*Gk1:&Ghokbr2ӜQ_OZb&ѿncKoj|̛qh_S[l2q}*;Iz#lH    IENDB`                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/script_palette.png                                                      0000777 0000000 0000000 00000001625 12534142432 020503  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  'IDATMIlU qVj7 MĂjԜ
^zDR3J8 !5@-=TRDrh6݉ǎg#>}>)%.N&Qs<ϣz	m:J纃G;"k,ۋl/^=fCTݢun{Zo($0i(!](h~8+n$?cBSWCɿ?Ũ?dU~5[fUp<O6qׇ;CHD2!dOD۲$;" 77Wlǹ/=Q'@8x|%>$c lT\X ծqok߹82JAu4;><	B{[쨺n^@Ŋ4Q}}X6&P>	Rh WO>I ,po%"˴NEV(
8BPj.PaX<1E-ELgbSO`m>8/٧y׿,2V{):ں	EMJsNURa7ViRO]Mgya^aect*e[K[,3xTX
5\ޠI}xy}.T6;Y/bG~xl5moѤ
9>S/!Hpv	}JXZC86Mp]>K""0tN4@(S*ly@ۓ='g3@+
 -@<д`P#fHL_h	jxE\    IENDB`                                                                                                           ./mvappsvr/docroot/db/icons/text_heading_3.png                                                      0000777 0000000 0000000 00000000462 12534142432 020344  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(Ͻб0qJ:W"*q`O	4&n	Yxe8P|_kYeeS(IbBxzqӱr$Rv_ny
T^af?k)<rf0sA<
w{f`d˅6\AbM>6ᇸ*H% aS͊і]7WMRj    IENDB`                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/style.png                                                               0000777 0000000 0000000 00000001455 12534142432 016622  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%6.OڪG;x7YN˗^P h +;汧}̻kda$hRF	7'.ۋr>hy}Liap%qϿfۄ[/Yk6ߚc{I&wv:YzmBseՒ/<L3:S~?7'{9{k^)N<B 37_gw&xbo?v3b^nSݻ˞>,~@, ]rgiwJ<,w0ooSf߽,p6#fmw/muL^p H/{Kz%t"QϽI3\̘u&{)uhkṖU/,бi_oK@"{{n\vI'.y_,l-X.w/l1й1O^̜}|܇.l:"[sy3z~:?]$d߉g>ahf_Z0'`₞G]*o|Ћ>F` )voWB>Y=(mmp6c>wwoϝ>w]<$grW͍@߫k?( 0cQ:    IENDB`                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/application_side_contract.png                                           0000777 0000000 0000000 00000001043 12534142432 022657  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATKqsʰA\	!I
",*ANMfd74EvCwz_B\6Gpwv"^=svZ{	0.G.fD\]vca6]UUٲ)`h%_lzsB@";sxrOѷ E,D,M&gd6VVLFVN#~4S?^KY8CE=YzL"tqjeHtp9_ch`ҍXvIF%4-|Za2sl7ҐH"eJdjilW}ʻN2dMlwdD'%En.EIl**WR;!#w026;HMfȄ!	K	IȅKHd&k烻NM0D    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/feed_go.png                                                             0000777 0000000 0000000 00000001371 12534142432 017047  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATIh\e  fH`d5HB5CDEGEEo^xxxP,(ƈњHmQkjH4˛}Q&Z    ǒx0#-}	1QD!"D!BUtX1jXZ@(PUt{S. LmxQ#tHIP"\܇\ec"$#OIeοC=>?4OI;d	A@@s'W1.g7JCJdhWtleɚ7d !Y>yi6Vo羗辉)IֱgSi'#+I@ZiriIL]O6<5dgĶX	wRy?JEY(U]uǾ{[O bc@KM+ҕee./3YY\7zֳMcwΊMY$ya@^|mOwկX*GǨ}V8k2=?̕Y?.xw#$'0eۖ1Pdr +[/漷[mv5&5ȑ E9Cj0Pa*Yr$B    IENDB`                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/shape_square_add.png                                                    0000777 0000000 0000000 00000001033 12534142432 020742  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥ka/V͠TDCD
:*&Y\5N.ZK7qp_ DСlR:hcRђ}E2z3prd
p&b^ !,9 J'`,# |M6vn H&:c*DdrcWk	4H
|)[jzT+u i
@kjqQ}@Fg_X8Yr:SyBBZ:Q'0F)D8i\%

t(_	TεȒ춶9 <g o >o:KanY_g|%KoR<t_k,WKS'`Ul`?5sZZǁ>%t]_    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/shape_square_go.png                                                     0000777 0000000 0000000 00000001066 12534142432 020625  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥?kQ"XJPhUqD
_ŒIG-5h1b}Sлss/7f9篶*r3%`f<]* N?#H5&IX:f"HYc/k?$5-tA01(9ʊŽ,6K$is/QgT&1Sg9Bs3|عO1ԟx	1rp٫46;wloj `Dvsa2Sklqq:Smr0dU s^!U$*%{M.A+Ϳ\8%1!Zt(\l7fYZcN,zы7_?v$I9ϵ"XN,%wxa9߾R5Aܮ}ғ\td#+.f?d	    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/bullet_widget_icon.gif                                                  0000777 0000000 0000000 00000001311 12534142432 021274  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a[ F    xqrp2ƃ    !     ,    [ F  I8ͻ`("ah&p,E$'4n8WdRH=`1#(7TxL.贚a|NOWy.{~uSnavxfyWX!ZO\T9F^%<:J;KE,@
 XA*THa%\HChobŏ.̸S\ɲ˗*EL`8s(@ʚoJř@,4gϟI,mJӒIVjO@rzfTc*ȷDj6[ Dz.ފze/ڬ`0by2n1i̹ϠC=ڀӨS^mװc˞۸s}ߦi{㽁+OM9s'_NݹѳOwGC W}z -߿~Wv~x ~ B(1xaiq
He(bmס(ƧphyF-R"9v#v$xA7$8A-Z&>	RHu  ;                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/wrench_orange.png                                                       0000777 0000000 0000000 00000001110 12534142432 020267  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕kSQ8H)N]uA,wjazcbb6&	Qcn^b4b2e	l xW
}$9Xt:$n"0T8J)N!h4ʉF|p8|2X,f[͵`0S~OZ%
}
iz=nHXt:4"BrLRtv_T'-lu&f_uRl6 u]e
5~lޢnz{ejjUiw|}?$&x
r|TN%*4Ç l;'T^ٗG<"pFୌw!yhݔeE6	
ܙצPJ:C\DW^,<<4A	ѹ]s6ޑ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/tag_purple.png                                                          0000777 0000000 0000000 00000001127 12534142432 017620  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅[oaOVÿ ˼6MmkFp$ Np門V9pbnwfgfFZjJrRbx@:R^r܊~/ \ D$z&r^DQP()0"HHu]a2xvHR[:-/U+H!D"&(f._:iM	3>#WEJAt=ǫ-^W@%|F6DQc.Al>WV\v$IȆMO?.BNӍX,	|UmsFp8y)v8s#~%?1y~C@|ӌLQ 
cu\vݲV.~//b    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/transmit.png                                                            0000777 0000000 0000000 00000001355 12534142432 017322  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅]Ha0N=0$ȓ"R@2!Qt1QCSel*2?k,%RvAu˫{?/u?	0miOAg.`m[FS
W
27/UAX>@UyiO<S	fY@{a
ca!|Fk	z{	L54pŌJ|%txa0;vƽ%HY3، w^:br<cH1]+ՉW.	a]t"mVB<4q&xp'"]?"uGԦ4Iwm_;n%kωD"ҵЙMQQw *`'tWb
c5:P	BWNI-iPLmhUH7*xfĶ+$y|[Au%pXFpIHٽlJ0\z߹M?-ɢ7mU||lw|X_##v熆	"wLOJMM?g	^lzQpcEETiiɿiX	...Tm &ٻG]    IENDB`                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/chart_bar_link.png                                                      0000777 0000000 0000000 00000001310 12534142432 020412  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ZIDAT8˥;hTQ5nHD7Y	A"F@b}h#j#X	hh%Xi'6vA!dŨ,"nɮb6{sXJ)sOj^_uVԀBje{gT*ݲ#80hrR+T::ZhĲr@R#$Z0֡˱3]>LQNQ#mUYK=Pp`DųYAG,B[Q1Fö4DQڴzX&@%hÒr(-Jў$Mt:5F'4$1(К$(3x*iHiMSzf6Q\_dߓc|mV
^Ж~;A|ab`(Y?KJ%;%J M!}@Gp>(044n\Ato^#8E10[_&gqoFAZ[lάX/QZ=zt .O'7,࡟Gs/xWF9uJ(7ٞaaarL.B@=LTx29;bq].k2ZP~dRv~~>c6    IENDB`                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/building_go.png                                                         0000777 0000000 0000000 00000001231 12534142432 017734  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  +IDAT8ˍOHAjfg&@BQnS1
:uԽKKPZnbtXLCͥ-msyâ(03o0*[?t|-uU]^R)bai6ƐdH$D"b=+5F UvTx<U1wśY+ *X\<UhND#
jqל8yL&ƀ뺨*a*F@lyP̈+}}/nN YULcG]xb!n$"ܹpseNr.k"-]XXGvy2 "e%_أaU3/#>.x~*M5"c5ԆQO}U
vloR kl5v/D<qx6܋'qմp*zO3Okmeѱ"!@ cgC	`C_8vs|"z/h 6N-Lj_W;    IENDB`                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/text_heading_1.png                                                      0000777 0000000 0000000 00000000424 12534142432 020340  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(Ͻб0PK44TT.UtMH)d6	",5(t(+?NG[8i	&q&xp)G(&kS5Xe9[6<:5Xĕ	czjq[+ kwؘNNTa@.hS_}__S$d1x    IENDB`                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/application_form_edit.png                                               0000777 0000000 0000000 00000001312 12534142432 022005  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  \IDAT8˥KSQU/"/HAL͕bkbmiIbk֦Ӷvcnwwv݊4
s=9(eSM57=@`Ճ\CY4yQo%(nVEdsڑ5lEXN2o;F!~m#oT祹	j0wEXd2ORd-
~mcW"}{-p8FNpK"@7cc)g-%>ǥ(gId^C.D:XuEphe{ib1DX4&euQ!qAT"RӨޛ/gHdSv0ʂOg6apωFKޠN0Bd{gFdr	I@_9Z:s7վG8L 	1ݥ˱>u8	ѐ՛Ln:Uf(aPz')p!Ԩ$'fF$lE[pk\+5ݸuLkެ83k=!;L[    IENDB`                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/application_form_add.png                                                0000777 0000000 0000000 00000001120 12534142432 021605  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥kA֣
PKc[k۠DІD&!-V%*
U(6|%H<Ǚ%mD~<33p -L>\O	]8wܛ1x|w}#l-u:xShnG0`3p%l6a|F:Cl,b[
iȶHL=a@]W(uR7U9рa@?U&CeFFr"yU
IP5c*ux*񙫰?:s0~BR9=Kb-7/E;>ޑSAn4RD(jp`(poDYܸ-jE7Q(		Ŗ^t\X#W .,w'2kQ4zx6ٗwɍ#1%ҘkKnT?"Ei    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/table_error.png                                                         0000777 0000000 0000000 00000001257 12534142432 017762  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  AIDAT8˥KHaRNPg(nD-E[l-&ZDZ+Zy4$Ub}紘rhQtw9QU'|_ϩrҪlZbŊLt/DTk}N_:jm+{#cԚڙ.f>8Wݿ%) zF
pt h,Gko)%ZՁ>b	+*7y.}Op\5]B&0ByQ&A\Ashmp!MǉՑi#رZ#)@`]3K꽧S|'']En1( #*<h-$;4 Z_Fv^	8Y~
`$I\1 ,-wgi cp: Sĩm-EV?
Pjg7T,Bˏ嗐C<8}3 
wmlCr	lͪX,_W/.J"ik:0OP    IENDB`                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/clock_play.png                                                          0000777 0000000 0000000 00000001657 12534142432 017606  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  AIDAT8]kHSaA}g De0KKeeYiuѩjy)IVΙhs.5p.eilE/^<0 jf!&D1OϞ뉀?uơbc{#,\lzudC+Ϣ}܆4;뉥 [65Twю^0[65mIN~'_1cλihAȏw}xd
y;pu~eIufxz23y/̆Ƣl>^t[]qvBy]7J{R"xpa+y|H.IyjBaC/tFN|6	OrJ+ނ'&ܩ1n	R(=9o}v"SWvrvY{1:9):8+)$ZpB+x3kEzK2Ӎ˲>3ghGZ	cb<mOŉzm#z.M)(V	kcuv8BIwu*zAA'xPLHS܍H浾yѱ|D]0:<xF҇+!%i}"s6{<KnrH zeO8הE$hb^fL&^t"9$A> o长hbʾjOdŮT-aEqcVDpj dbYY"+lFnB@H3oPY    IENDB`                                                                                 ./mvappsvr/docroot/db/icons/pill.png                                                                0000777 0000000 0000000 00000001317 12534142432 016417  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  aIDAT8˥KHQ"U.ZE\7b!	,J´%`7%H+ʈmtіB%0q&ɤI!=3ADr{ OL<~[ǣyޝNy!I,trC%# N#H J! V cB8L*EQٙxo'ad,W] x~fo/rZmdHDq"Kp~cg ᩩ
Ea 8Cp|| i2X[_w]<iqY^ 11cc@#'$acslJ`RyǑ˔ٌ8cCAhnn[i_ -Y,Wcܨy7Y]E`@ld>;:%K=eLN\H+*QIGBWvp-fxxW^(-XWS4$M&j!@jj_uBY}6(ĩF_T]˹L%%%V^~w7ŦEEy~m+is    IENDB`                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/plugin_disabled.png                                                     0000777 0000000 0000000 00000000533 12534142432 020603  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDATAJa|$WD[hN6<=Q(Ҡ"   	9I , w}y , mܫ/ h;"҇#~Te)/$Z3`RZq'ڢ( mƭ6u)ol(-Z\9&P"
]k-S(cmuv%VoIi?<ǵ8`ıj`R.EP&w0   *p;U0    IENDB`                                                                                                                                                                     ./mvappsvr/docroot/db/icons/table_link.png                                                          0000777 0000000 0000000 00000001330 12534142432 017556  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  jIDAT8˥KHQ3_: s
W"	Fe/C$] \YPjעPqI6E<GE/>Zr9סgxSkڤVRHB)THRD
TjX^H _!@Hww)vjgmNHp[[]T ,K҉\Ķ ||Jt`o,A|imc/-Jk\.bNq8}ip|&G|Yl=A.ACeI.W!HC5P{	F#DM#ߛKt!_C_̍+ufJ@(8`uz}[7[,H$G<&W`x̩)VrrLT)$`x9	Aw?Emyp@¡<9xya۴PUUE}}=uuuۦ @kK3y25# `fj,=/qB-htá˯#ys[Ξ#+I" v)))ߛXtz?HeeeFQQ4́<m Υ6 zMŒe51iNPrJG    IENDB`                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/image_add.png                                                           0000777 0000000 0000000 00000001215 12534142432 017346  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥KQcY"ZH1;q-rQ@U}lJaD(ʌ-$aH#mr뽧ŌSA.9\ξ[ANN-'?.ð;Ì<qt^DDE-TAu#V\מˉHۅXTa5cgH6)ZHƆ "c!`l<?\/Т-LljDPX H@.Dn@c|[9H/	[a}-jJ|Y,'TSE
at8e+;HLK;W?Ĕ5xpbsB:=47~w#瞲~ҏvtZX+)
=H	8\ćQM-g-ߜb;'$t8{c3l6-|Z4ocS0~V)`gxy,&kKqݴrae$:G.Xgz%1|p    IENDB`                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/flag_yellow.png                                                         0000777 0000000 0000000 00000001237 12534142432 017764  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  1IDAT8˥]HSa@2(0.(/n*H
RfHr>F3Ӝ]hnlX6L6%cM*=wd;`cy./Ϗyy^ M{E-ֽ92mKT.kvh_?.O0b"uD hZ˃rrI'"wٰȺеbw@`s_Ǳ=\G;dQ#7*c#/&3~X $<zY$p@BLtWH?"M#ش>{9
0E+rJtQלqRQ CUU EO!kcme0GyTYxar;.
Z|*m#_	[IHӀN܏Sa:"XuXCTO{js|uʫ;x${MzX0$BŻDNp/+w
dο"zjZ'b}Ñ

}W<_!79>Ja    IENDB`                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/eye.png                                                                 0000777 0000000 0000000 00000001356 12534142432 016244  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8SKOQt:}L!-,@pcTFcT6,L4#\	66ntF+DDn}Qܹ3z[!q|{/߹"QBC=_t}R2|ۀ#S<~/~RWeB`B>۲qu:Fashl]?䷮Ҁ&L DmDX[tģ+ڈflh*a`9ee;iՐ{DOx' 06m`yV&8nC>LɶU[nER*Ѡt 8	)Z,znq-r9EQY|PK
V욃~p)ZmhE3&Q(6lcal0%l2$'ZM6}bh1\SUPa!Fp&۔)A>Zcbfrܟ;S	D#фzT/_lsX0i#`>{nm%FȮ{O=ۏsu#R^j$Są69|Lw< tH.8iNK<#|fUoml`eA    IENDB`                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/bullet_feed.png                                                         0000777 0000000 0000000 00000000406 12534142432 017727  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%a ]{>UԆtt5=JRahPc#3vR 9@w'DB*jLj?RHx}D  aq>    IENDB`                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/shape_move_front.png                                                    0000777 0000000 0000000 00000000663 12534142432 021020  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  EIDAT8}Mj0F (əz{B&IKK.kB1#fFz*NK"f6ݮ`*355$tsYubژS
 ~17!ռx`<=>
"~$GoѿyM;Lr$0	3	Eݸj弴ߞ2|d209]c|$,X5	%M+']'gsmm	eZG0g|зcbE{x<z Z[An9`	 4Gwq~Q
    IENDB`                                                                             ./mvappsvr/docroot/db/icons/package.png                                                             0000777 0000000 0000000 00000001525 12534142432 017053  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}Kh\u{g̝4L)B1>n\F)PADQTWf!"؍`HC0ijC1ͳLfw(v!g}69)wyc/T4"ԳX8ѫ̛vכ*WGU}[E>7&tJiG+*rQE>{	`=9 o/rorgaw=MЪUQVcƏ;}ź;qD>r7jT1aU&m86l7KVio{Ǥ9sVԨ,O"aWūmptk.h-V}֯K*R\M-Юޡ'O'CU0)79Ms&3P# V
'w 'ů 
N,op#LRi4Qjh ]GS\;QƤBH`1@<Ѐd^{9] ! "dlǁD	@|0mp
Qa+kK7
"$ h$?$BrN#&Cif
N7SV[6laL/HbF6tX=ֽɕد}GO|뻗zUC5rh8D>)4Vwͦ|"L\>2FΫ[^yjW?'q{gBio.ȧTctܲ^&    IENDB`                                                                                                                                                                           ./mvappsvr/docroot/db/icons/pill_delete.png                                                         0000777 0000000 0000000 00000001445 12534142432 017743  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥MHTQcfLC
DM`. DiQVᦍ24i	%!B4~D͌38y3wԢûsa0?/od30WM<zrf^{UUYmmmݵ7)ਵp+ťR	뺎 rxuuGEϏKtN DAvk=Fco(BX$w 5m>6F[Ls#R.0}RT(Ʊpx':sb[LEbj.
(JpBa'-.J&DieA,P8:|z%@X])IZO_B$h ˠ㋳/s\IQLRB妧	t0k7:YXKP_VҲYr90In(`Khp(0/+hl8A~P__ߨTQ 8}!˷8iMM[Z|j:N"F{{%LbnHU7PԶA% 9A,[YxR]]{y[ aNnQU+]sj^B<ϦAA;g:`FDp\{v'JvPez6w=xGe8i09ET.͢g4¦j    IENDB`                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/page_white_cd.png                                                       0000777 0000000 0000000 00000001232 12534142432 020235  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ,IDAT8ˍ_kPg?dGJ:bE/du@.ZA7ԭеf]6iҦi=?9ڬ<9yw^)p
rC	q4^D"sÒa$4:6$Izh4H$f6V>O+xiB(vidY˲6b%;v#B6}T$HeEZfyH'4<ֈnI@&px}Y7QEᕈx*TEviPCՃf#:"]y?TU=,+|BbGEbro5ӱ0Q Xxߨ~ٚWPu&O3<r	#̭EG"|g.6\l-x2	V/H@5tFGs5^[.>O/@86-*:/E@0 ~+g"n-dqc3s̝GqFnC9A?\l<anO`I1`    IENDB`                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/attach.png                                                              0000777 0000000 0000000 00000000607 12534142432 016724  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT(cπbZ*=S6MX,VrG[a(X$=č3X$CS0_dƽͭkA(
Oгe~uP!w>
Oy۽iVEjP؎)7D
fNz5azy\gʭ\%ᾘ8Aǌ2䛑<^az嵌k'<h_ƅ)z[UK8a1>3od^Q'X{Mg1.ۚ%F5=',qpk E DR%HO    IENDB`                                                                                                                         ./mvappsvr/docroot/db/icons/bullet_arrow_bottom.png                                                 0000777 0000000 0000000 00000000345 12534142432 021544  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   wIDAT(cπ2&_?o>EV_X["V7,}HZf/>;lWb_}T' I\ ?$W-L    IENDB`                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/control_pause.png                                                       0000777 0000000 0000000 00000001126 12534142432 020332  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥S=kA((r6ՁXhamt^Mig!`k'݁ j!wY͙&Yfo{]c_FQAI^*-hg`yN$tn5f>bXY4 p8TŌ3Mng͆u:n+Fgp
dZyvnR`&FsPJ*WV I2I0AZnoRm~8( a ft~4\s<t:Jl; >[3I].
"/$߃r`A5$1QAQ2dn|1mDDjNAxlA	A{߮r^WP[.ˁ@<X,0LdK|[UH;@1Vn2F4/6	:<    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/newspaper_go.png                                                        0000777 0000000 0000000 00000001413 12534142432 020145  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍS]HSa~<gn'
]ZlQ ӔbQxn΢ ؅MC.ooAHӲ@Kӑh.tn;o$၇s>s麎]HDPUistA<#}	a%}Bp```kF.wv\Y:χP(~ea333(F9y2"Jx<^!ןk4N[͠T"+	r>be&>79"_ rgL<wwq
!N^vufbDEBCM3^-§	KЂ%˲6R)cH鷂GϢΉS^@ f3
l6Pu$:khm-h84+;r9fd2%ˌ=\(YC)/!Ȗ3hO&2FZ$ BQQ'PcaZNbnm	Ͼ
ٯE/2P$`88>NalOItuRSSSqH$"[FI+/D02۷?Ve*jW*ꏟ    IENDB`                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/car_delete.png                                                          0000777 0000000 0000000 00000001261 12534142432 017544  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  CIDAT8S]HSa~sfgj9P(VE`dEE ]zAGtѕ])HbF[%Y&:qf9׾}g",Byyy?IP>~astlcY=˦pɵ777huG{ɖs0ʀ_$6<B[/:}*μ<iDp܃.MDCX@
evRQr!b:PYV=@S{u-l$6ʒeNdyFn٥>"p{B3'T`mjϧs'grdŦkG0	/QɊ\ T`Ʊ69ٚtd?-:PPs1\R%`EشȲ
$K-Dz	ƨZ'q
#XVca6ƨ.KPڪ;riP{¨-Gk<W銈Fw#^:Ւk
1/m6z;*ݭ*e*!!P蕶{}o+Tm8"V7{D/A*    IENDB`                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/lock_break.png                                                          0000777 0000000 0000000 00000001403 12534142432 017547  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8eOhTWfɌdb(1qX\Q!(nMiW,BDĽ"A*p# *1XT,2f23λųݜ̌dMNNUuTDZ9]*YUA011 CTk]gF@:1b?"jf@q]`pwwwow1;;{XD~wq06el;~_.cnn܉ ͣqp|>{y;>C*> _{V^?FùA>~""1)sxpTmO8| %h 6@⫝̸: ^_Ձ: Bu#XL 5J	a3zQyY&j,ׅ`.Ja( l]"MB^"
~>2
 00gTʏ ghETf̾UŜK$p.JDaT#'ۜt{h]jDJL*myHzXXWہIrAk&~°T jި"ľO &on.Ǽ~D$X"] zJ8E    IENDB`                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/zoom_out.png                                                            0000777 0000000 0000000 00000001304 12534142432 017326  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  VIDAT8˥kRQ`A nozѨK?!eMmm9%Mٲñ&5d^lxusnSA/**
խ(6ZDsŵ>9G ׁ5lcf
l"|n^'iṞ![>DQDί'r::;Hjlepg,.\ZqBx5K$b+M,*$GmiQWI2V&ahQQU8Qt)!?D~s	Ht+TZ4Yh,Y9t)>;#(D{k|sG,â\6o7`֧GKD6,8|w#ûUK3A.߮X4w6p^8{x}u6xYWí\O"bKe1!ޱc[	'zf>]"-Sl܃ <^=
ɲ0ۍan2^=D6ܴ`cw)䫠iJ|rR    IENDB`                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/feed_key.png                                                            0000777 0000000 0000000 00000001403 12534142432 017226  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATOhu  ל+߶ǤUF#ѡD:!`;. t
ZdjvphZf#n{o'T -5Xp6pc$9bJ@@Hm<Ըcc$Xb$$,\OA#vq
s%! T5TVe^@IIATDT%1FJG8azܺHENM("<ƫ_9<eg[Vcb)kEETr{SLOtll.e֧?bmI_("`:Sos<r<>=ݻ|NkcUnOI#ֲ#,u4(<vuNWiHM*Ku d8C=ʚɪ+}ԪvkHA1 kqsJlf+BCl{e͆S6'4Yv;xkB{_SV]ص/75|w\*]JϽ4-T=q`Oh$RTs3TmP/u?l魖<+/9o8/(&렅wU>Zh Ed(yk$     IENDB`                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/ruby_gear.png                                                           0000777 0000000 0000000 00000001314 12534142432 017433  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ^IDAT8S[HQzA%
ė()4fMmtlε܊)iH`(B^6<輴=&D/}{9]NAAPyFEAX0J(ɑ9)˞XD~'|rK7
 0? $&¦Ӊ8vl[GBM?vo-ܸ|{05\LLEF*EV,FA$ ~	R=UThӐJ΂rp~WqHݵz^a@.,-׋LG0 b=*|]fX
eiWm}V*~?Bdx>.BGehڳ"9lZ%J1<X,FqA@WeDQ'`QK|>N{Ptbix<\;.8^?EMغxǮfFZH$nӛ/^e022g2D 5umX91ͱP(gN%m2}}}㴍+*
>?WITB `/e~U^    IENDB`                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/sound_none.png                                                          0000777 0000000 0000000 00000000641 12534142432 017625  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  3IDAT8ӱj@pʒ9[%S)%&Ԩ5Z"zDMEAE!Cqck_Lݮ]@7KJ@yV&G<PA XucF I(a<aY!c+=>i$I\.Aa`Y<Rt]ضOL>p|
]ס(
dY$I0M:ѨP(a@D`j6e
J;KVJEA׋o'qlhZg?$k^+)G>w	j    IENDB`                                                                                               ./mvappsvr/docroot/db/icons/line_widget_icon.gif                                                    0000777 0000000 0000000 00000006573 12534142432 020753  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89ad K   VgcȲ͖اVêú򱴩îҼê\噳j춵̵ó۽ʖsۼSӜzpk򲿙жꬼμͥ؈\ĵͼ|Ұŧʶң̣ģz˫ܷʰtɤK¤^ǟٕytėһ°Ǯ⍣rŎkʞŨǭ˲}ܼאʧƨ!     ,    d K   	Hp`~EWÇ#JHqVȱGhdɓm온Yhс֑@Dɳ'Dh	_Ot.^>J] Z48&_kY*Ѣ«*XLՋ	_A?^PV2pFҺ4@h,S*BؿCOsM\9{vmU6kPcB CMmmpS}0ۂDI  AA^
`WŃ ͙ 4V$:VY]`%SHw!BcL?S 14K"b'$ C?]Jfdq4` 0d'8C c#xK0K.H aR'6KLP@=_2O@.bdLl#S\0]@pU@B-L`"U	5(2KFJ5 1NR)H2UPNL@v1*H̂,@:Kd#9K1SE	4.00`28DA0UhK Ђ(x"$MB^`EA @G1s/I<1 A -Ua/ sT"1-2 PN~$܏?-gK8`^(C
b2u4b|
d-k3K H8BK.S 8s,h 0 J-2Y(P_.0TL2*T",<\0E dF4 /&Si`r2| q̱`Ҹ@27EO$2^/ָ=t|#2P}",H'H@?(0-D`  C++/"G, K/D`kD TH-}	8p^c
.$ci"A`D.	Z$!f&
1OB
@ԁ< 2b"   AFh!.$N YB
0\c[-h2䯇-*f]``A0OXO/"ы]oX\  +fXAr Őha@@e'~!ҏ8>0p 2΀X  CLbd F)bC^@H'tAH a`Z<0aGb",z$B%LQ4 XFx{|7) $ 	h-q	DNP$ oZh'@](2Du2b)ê( p> 'xdd
$q{
XFL~< @@L02f-hч @ƀa!rq	Ђs!B-x k ^x5A[ra֩ 0hnn1c L*aZ4 ,Ef^?L -z`(!bؐb=_H8quL!
  d@_¿0fD!Bƨb8T8B*|LSbB+6Fp5}B'\` nBVbƘ	!%hQ C}=V.}j?@>Og ^"(C]PH`(uC0ֺ `! RX,vH1_a @>QGp ؄A=,M|@\!BB ABbKԎ	6x,<4`E f/<-@B @	DYlBa܈sh@8AcF0/|bx5  zlkb()٥**	DfA9
4p8F,T @J1ıfn!FˊސAZ:NVUl	7pv`D`qP
ReE-${^܀&?ORo,M& YrQb$b3:;89;k3b Zz	#b;-(ACOh'GX(`-` ,:BTY8ާO}" Q]`(qv 'c %FBpCsPJNVJAn0	<[BPp6~R~1y @'@`' d;2P3R;_F5$Ňr	Gw!u*71DFƗ
s
cGh~N$HsメW\bbȅdX`07eh(zTC>;ox!>t}Շ~(; 	whXPE(Px؉X8X!>Ȅ	HzPp8Xx؋8Xx ;                                                                                                                                     ./mvappsvr/docroot/db/icons/chart_curve_delete.png                                                  0000777 0000000 0000000 00000001416 12534142432 021306  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%L=nEKtw9. ~><26:}8?|# V4G:~4>αn60<>zx|{Wro.{ؕW#,"d\׼_˦mnQ0,=4tY!
{Ջnd-&o[]߹LMz,t`Iw`=][ }
'!c?U~!?#&;(!pkt%6gjxǉNWGy'Koqf^3-_x2[y|[{EOg̒VQfiF9ta$oS?PXn%:3Kue:0Awvd^?Hb@ֶFn@5<dA4ϏMGw@0?P	 -36km 5A8uR?+W}pe":	 xAA 1v_3    IENDB`                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/photo_link.png                                                          0000777 0000000 0000000 00000001420 12534142432 017620  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥S]Ha=;3:ψ.iDh RBFQ>=C!DTC?&CT$nk:|ӝos9eYF+cI0L`Gðf0wd	Y-c`d؄`w3g_^'岊ro%߂ |E96=CǉX;]3Eh7K-`)g+[g5?KBl	aJ?X]ʴ>H`.PWQ@!!̬Yˁ#Q_+`zu
]24Kk#P۰ZyJ`9DJ?֣:兿RXm~<oN.dF{\LN`d1Ysaߏ8݇ɍL	P)H2y{J1}yNvSBPQFIgpmU	8Y2JWƚˋ
/0Pȣb!הWzs?ak@zA/n744sHOc@j]HiGGGITfL&v
XRUU `0JÊPHi!˝ 0mt+9r;Ŷ    IENDB`                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/chart_line.png                                                          0000777 0000000 0000000 00000001016 12534142432 017563  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%,M_|z<l\@_9'KkvrcltƖcGs],	ksN5[;~4y\3NO+9i=5gxמ}a7<{[iƦi
~uDD!4w<osMfuI=7HZgb11G\rqMʏ=+;b2X3?nn i#/[g|>}u~k^{~		_	ǪSˏ--9	,``7mwpD׺@>пȒ﵍ֿSVI{=N<_*ؕ~`Sn  A    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/cart_add.png                                                            0000777 0000000 0000000 00000001307 12534142432 017217  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  YIDAT8˥R]ka:鴝tv /VN)5?c*L6
D%Ł&AFWT2)b7uu_ϣ gVE.666N!2bױ`0@  ñGGG888d*+,vZNSFZ$I0d2jl6AFd2}D"	B(`/T*mDQassZf	D6͂ހx<b3<R&rR)(
3}C$	p8LJea	Dtn'2~FEVIyii	Rre
T*nJX,4Xh4PeA\S^8Cz"|
ClE)9\~zV u{777GIh4BSҘ]ULX`!BJ=_ 3;;;*GF=Kx_.Zi {,i~];;;<qʳsx#߇Nd]bjPTs[ L'28M1S;y    IENDB`                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/control_play_blue.png                                                   0000777 0000000 0000000 00000001315 12534142432 021171  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  _IDAT8˥MoQXtî.3qcESW%5Ec
a,QL*kZi,Pa``q΅&f<بn,AIYP7ß5Uo
)'$j/GMyy`!|([Y	 J]P.D
8bf'x$NU#DIpDtmH/,3kpUS
und؎L>ez
jm"<98!
Y40hKEPzsvu%pE]w4h0p8ZK`X*hQ1r%9dq4N|@˲Ұ.,_&؁b}Μͤupz&?CJ5;>-HZa0V}302fC!R$ȨV;ErlD"ME	3<\qڱ{FWyz7P$V 3yQw,1Sc"o}M=Y\O܂\Gݦ~LxW%    IENDB`                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/picture_save.png                                                        0000777 0000000 0000000 00000001363 12534142432 020151  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATˋUu s_&#
"e]mZie]EnB6J0	6QLeɌ3<.ss}|_ܸs:=j   @dA#vAJ   &qq ]nQЁU&[Cޚ3GxCڜ@Y7EGY4m>?v3 PBFQ$Uumlډi4ۮ! J(RMVS3ԹfȭH" A}FˢӵyF93w7љ;sz\3%DPlgv/x+_> .][s^"(dY7pǻ &[k"y-mڜ=QY%`f.9:LIUUkeDHxy?|UTS]Kh,Y "fY@ v8ɡjRJ"iQiS;,)	FtSݚ\ ʞvok[+Ͼ^znh mlǇ7޶wQIam7@a`\3 on~=ȁّ0[`c`L2%)"  Sg|#<r﷗nM5AcV7    IENDB`                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/layers.png                                                              0000777 0000000 0000000 00000001125 12534142432 016753  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥?kTQ}{/!vZ:ISX;M&_AAl33X4[̜vIϿݏ02RF48]٧gQFo	2!&dd$X#9?[>I^4Bi<ׂtf 8];
_it&8M8U*J$DMӉ~xQ`p4ٝ_U"\Җ9/F(KX(޺#0YD-Ս*m5tLRx,/\ڎ 454c ZzB	p]ۋs+.Ƅk#*}hfvxX lJ]
48+΀-Iy֞$8j{  g53~'{;ᅵ3AQOz5/HeW@޷J4v'P0    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/chart_bar_delete.png                                                    0000777 0000000 0000000 00000001174 12534142432 020727  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥;hTaAD,Eb1`%JbE	lQH
Zi4Pk-n,87[N]IQ/EqL8ߍ	$&lGeeU1Uah(6(.ids@zlQb
'lHQ:p0~Tb$[I¸HUM4W fxlP
_F2Ą- Η g!a%\PSBLm)K8::D:gX0^S^ǍNp\e{AL(}/P>y7χgС-ƀR/+{bd|Od3g^@#"Q}%:䥿]MZR8:1^}UDѳ=p;lT]oN?INH!BD{#s'1Ў.J抰G(YtJc%-%91/ {
    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/bullet_go.png                                                           0000777 0000000 0000000 00000000632 12534142432 017432  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ,IDAT8c?%ak|su92 yQgh*IЀsM_h7qߚWd~݂<x :s=;q	')xnM634 d];wdoݖasgjj=DԄKO_x@CO??mZWҕ8s?~[vb%+HfƯW3<jV'9N*W_A(\9 ݬ    IENDB`                                                                                                      ./mvappsvr/docroot/db/icons/house.png                                                               0000777 0000000 0000000 00000001446 12534142432 016605  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍORaϫGf%0F3`feQMBà)l#"r^46SP23"v8g9y*EI:q+ΣH$EZ:i[~0"w$)>@`dń:^῝Hħgx	d*)2bC9&J;1"F.-N#xdY25CFxjp*XEpTA:P~+*`zjIo->{jtISKɌ"(me5cX\\2fgTCgwn),J:$|թٟ̣,LqWv]h,@9goziyfn|x7=jrXhxe{pX}aX-̰RJZFii)Fa1݂?FɴBQ3[[[ֆMAL*HmJ$a+**``QSS)
E/'t;/7P;bF	Z̬=xcGAbo:Ѧk	,뽊p8Nۍ:B!hTC;DCDY|wm!8.KxrRhd@fܒ3ٵY_5c4e]vN}vT    IENDB`                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/door_open.png                                                           0000777 0000000 0000000 00000000774 12534142432 017451  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕jAIӯ`J-]DA-ҝ7ҵwFfhKsb2p8g>󾇙lz޾xntTD/vR>wAn3-3gNux{'9q`fZ- RJK=#'ODbpDt*fQFLP#t(ZUni pB2qʘ$rQGRJ:)*V2?85d{DƸfL2߷p=$)%Jɸ
.aHY2@LJu5ED,BJN I\?!)Dۥ/~zGc~~-<{d䑙>tV^_FpO"    IENDB`    ./mvappsvr/docroot/db/icons/medal_silver_3.png                                                      0000777 0000000 0000000 00000001125 12534142432 020344  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}R=oAC(Ǉ	b%J4)!U
R\X*(0m*("!EP$DAB
qYhG2μyv0AǇ/?³o$A K(_0<tMB!pX7_7DʅY%vcbSdo	$"
l`k4~DU jo,ɀ8~ OԤO_s_xI	jl~;Gfá9.
bRضA|T*7c|>_U[tRTD5՘T&5l4yfcJŦ隀
 7gP=זe)OӺ	K0LHm?Fs8JA&x@ɼd2	nw;h稤8N1˩=f:Bm]4ͫFA*v)͐X4CVuczX8,5    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/basket_delete.png                                                       0000777 0000000 0000000 00000001405 12534142432 020250  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥]HSaǟw;sl*[u4CK)]uEQMAtn$ (ٲTnM掶ӶsI	]dByUUF~|FsvmO]Ii~ .J}O=0x>q
(Z}|H?yyBlHdvui
m(Ý7opFP2x䔙%-KI
5? Se
,555Iy,LC=Ne2ϲ,2ARVVf0;v\ix<7u&
9Y`0xTώ?8N/IҵF;؈#|J& "8X^X	U<r2V0VƉbE[=b=+:P8vV^U1ait[4]
L=Dr'rca՜m73!n47冽_W֪ FCnmy W!ƙt|\xn~I/jK?reqh).Uscq!m˷:`e݁
F*Ѻ:R^9Zi!B6s_;+bVBQEc
K\VR^igե9͑Vnr'&>U&E    IENDB`                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/joystick_error.png                                                      0000777 0000000 0000000 00000001307 12534142432 020526  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  YIDAT8ˍMhQ۔5.DCR"7SԞ H"X[HP͋<D*!a	1FҤt9`!<vg~3o8O,Ȳ^$[Eh4V;<	 P(|1;2Pק42jAT*iv 5q@3@(bF4HoChzA"℡kSw .S+"|n.۷V1Hȉdf3O8vҏ,=xׁL].O;G\F4֋gw16ai{8u@EûnL&AR_ON|q:jR#ʓtJTi+3tƛT+ȍO]OuhjU459-g4u2*Vt @88N,*/C"E鰽S/äӊQ|qk\__gb'{W:	H )yQvd{IrG&+Sczƶ WEqSI    IENDB`                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/wrench.png                                                              0000777 0000000 0000000 00000001142 12534142432 016741  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕oQ_[c+W.]хi5 gmJ[Fq#_)qո;,@{;u pLTʙH$(Z XMɤni"\nt:}yD	<ou]q},5QXjP*DޅB!5ɠlX2|XPVQ( IEAXk
ί:lU*h{-PU,n	Y>0\ږIU4(r
HMk̈_4_ziy'"[n1rM_A`b =$Ik_p-qS~=li~3Bv"qZAԧ̸r[G]<&e!'ڸ67	yq$OX!=_~1Gs~EZQx&qWK3!ޤunkzGrjQn    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/database_refresh.png                                                    0000777 0000000 0000000 00000001402 12534142432 020734  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅S]HQ~Mї4+4\!҅DDE]2ʫ../.&Aw276[9+s;Gd2VW	-aԐ&DzBY_"t#IR]YYl6


766L&>^b|eYf2`0yXk0rZNt:RNU"ELӰ%%%XI.kehM,,-uo_`S`u" 9qeA7tOҗ=oZnVf-,(MC >}$~LEXUQQ^TC}ÈP8!80D|{럿jsrh\4v:?]9	ýC9Q4EG؝<Ū9_ǘA&!~AhLLGP~QGR6]Q4v6Q?8,HxfK.>@Pqj&8,<'B.VYY	
Apmڭ\Z]?:k#{H:	nR+gP~=LhOF@OV{£`twws</ꚭo;AM#@#*    IENDB`                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/controller_error.png                                                    0000777 0000000 0000000 00000001457 12534142432 021060  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˝ORaƹh뢫VYezM67k-SX.2&4Kb
:ЅK߱MVk ,D9`$O9֪+s>>ajJjڏXJI.ۥR}wpp?00ph_ @p/x<;9H|"Sw8uR5t ZN{K&\.)rV	UVWVV~,--U^/RJ2E]63JZ-h4u߀UI,c*cXfu\{,o!0l6$2m\.dэmD=]ȄH4^+
HWX$:PdY-j;kL_v`05hܣCd`76TSoQMȐamGyJ.^/%	f[P( Ncqt)T=[܊)||yV9Jgg'X:J'Oi m?ܦm}Mvn9Tb=GùۑeXgggAwdRQ"9\%Ek/#גG<G\ŝz-^#0O*93ۮO1àP(FɘP=|NPM?4Z>-}'`bqzr^Lyg)R"('$xDel=Ǩ{G=?	fd    IENDB`                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/table_widget_icon.jpg                                                   0000777 0000000 0000000 00000005520 12534142432 021115  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF       C 		

	 "" $(4,$&1'-=-157:::#+?D?8C49:7 C


7%%77777777777777777777777777777777777777777777777777  o o"                 G      !1AQa"23RqrSTbBc$D#%4Cs               $        12Q!3Aa   ? Ooc/6?|ޔI8f/&W<)X7DdC]0<bW1W=,Xt{C=#*zSUzSYkhgxK=#*zS
ҞؚIeߴǛeigKҞmWLM$kZb͵!*f}ԬX' FU%c%aPWy+@ZiIPPtðS})7QB2VFJbCjV67,0MާFH\bJ[,TljtoaPmQDҿTG!I@KLv|yS<_t߽{#W*
 G=jDoMdOltOa	̬(|<gHc͵@Aߔѕ9-4BVHͬC>Yҡ#!,B߹TxA?tΎvgd+ceCLm*q@8׈ ip^<T`G\sr)>t!+ƭPgs_FJUoz ήH:=Q1v
X=JLnW+*XدW1QS%ƝGTW!dqz5mT h08MIUr'	}a)o˵uGr⍏ꑟ:ABT,OA4xpJʞ=(dSM'm>ES4v1V/m]TW-W^S82M'.|a<tD$d0U+Py<Uf}">16vUu5%0O\}1feR]*׉Vji	J /bxYx#DeWoX{-&~GgꓽoxjW:=&ؖ:u|8!^vFf*FUiLxn>qn(2:⸹N'(& UE8)Qʢ|c	5!)M*2M2@[_1>vζvrHMF*lb掑&V<ׇD3sO[
qsqe3EdRĥ戼1mƙ匬LD*){R󆕫#]>Zri)R
P7L+^Y,"F;zcDojazAYU6"eδaiU1E,JZ<`ͭZ
vwurFZcj'hէzX8!Q\Dt@
"B=3=&5b8AqI )p|`2` q+&Q_kO+h(UU ќöS%`KCjG	5g4u2od(hI0%.	PMVnYDMb[m4}{bڬSY	I-/20i'zT4U?Yr-ImJ] ܘJ&uoiI]M_H;<ٛk
UL[eHLgNȘaz"Z]a\o#&HwozZ4MHYeT{c8[xE3T^^JʿW9[o:(":|O`+rPWpzE3Oqο
ݚRJ;\\Tis^yڗC^$3{}>V/T*
S"2u"*l[spؼƭENQ0EAt{K.XJ'Car&UU-3m*힋D@,پVBb!vQHQRʩ@bg$cڭ˛v`pLy!}ˆa,|{6ݙ]F	Gx;3opHs=ZjٳS=2&iRJ1M".h=M2II2oZSkOzNMOJ{@MY:
TABTErWvpe]8GZLvJBMrb=(@  :E'e5TPa;\s
ߊqTs2\EQU<#:ֲeD<Rr):9OW'΀#6ɬ*7Iz9OW'.J /IG18k>g|WA)Yʤ|J97)gSmILxm[*cB򎀹t~ʏ8!1JK+@cy<9Gņ-yj3P1lwD:[{Tw`o^?jPf[2'hHVYPM+Fq+5n?M5,?haB3I)Y"#ؽ
CH)q$UWxEk.ɗ!H|'-R^Ҩ                                                                                                                                                                                ./mvappsvr/docroot/db/icons/cd_edit.png                                                             0000777 0000000 0000000 00000001426 12534142432 017053  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uOQxԻ&&&Ĉ^8HB$ȁhыQ$Ab46-`T" `iAKKKmKBnmi]~+
M~6;3ߛf @A>e#	1G!tv??8"26
1 |
	G@->gӂT٘=92 $ɻsRD9
"ChA\ݷDYD~AA%Ⱦxmd3ؤWV0fw;x?F1WX,I:'K]eXh 43ٴE<t<e& BZ!Je1g/-%L hgmN"V_%1tѨ?MBՏuՙCV	>ꑀ\p=6! UpvT;=tkF]OJH,aS	~sۄ;DҀ/pv:Lm.$mz;QT`6aaZv)ߦl)Geo0K?p h-Ej<t{:oPwS06_"T"d-W[s3v0SzXyAտjP6|F[s8EL     IENDB`                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/picture.png                                                             0000777 0000000 0000000 00000001136 12534142432 017131  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥=kTA3޽&a#Q`TFURXH? B,LA@Al6ٹ;s"fnH`kU?)4[57/. dɣ,D$gŎw]>|xNih:c;Io]bFxl"=	c"@a퐖~д-wiDa (``.&w(Å6iҶ9#!zDNKYNB^ϙ1J=L :HvL4NrYBgM~mmS668b{N2ElrE@r>?V#ޓtF5@9Ub"^mhlnz*yR 9䤽GE棤/> rE^}^Ulm<%D{c@/*K+#	=@)wWs33q-\w oړĿ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/compress.png                                                            0000777 0000000 0000000 00000001376 12534142432 017317  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mMhU{)3Ih4-"0
BQAt#݈U+YH].6,.tBJ7""U-b̴I܇3`VT>wGUca^=vujskOmT֘؉cfnŕoS plTc2w@B*fc$s|eU ޼XYǈ8nFV`%Y}dkF=[O?_T ^:oU1/BM|/B8%ZepJo:Ft Rƥ	pI` 03aDDv234< -+\jB<̟͋c,A@ն;Jf]gǖdmˠacGqUa*[ G~ӣHZB,",pjjz1'// na3{nYmHUֿY:~2quSݳg)!үyZ/ao3Ǜկ8TD̐=+ǍW怹3OE3ZnMuP
w{&    IENDB`                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/page_white_edit.png                                                     0000777 0000000 0000000 00000001152 12534142432 020575  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKSaWEDBԅЍ}a? P3B]t+$aA	IX^ns\[sKp;;gɦps6qt	w`԰U]|^)JrL+:Nsb&\.u,Ld2iIYBӗ)v>)iR(D4E!J߰EYyZ,ǽM!a*?fH>>ƧG9Q7&h޳|}+n$jcM}w+U;}92XͶ$jxw?Y=g~Z\-32L>vEdi/ e{;^DtT߈]v5Jh.Az{<N
	̍%S,(9N\ϱ8sl2ji#A*28'ߧ˅E&Q!%{r;d?!n,p    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/tab_delete.png                                                          0000777 0000000 0000000 00000000755 12534142432 017554  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%B0;V 6'R= .LLL)..02I(AC،_U:}T n?ãG/~\,,,`=p/@ #333߿ኑAd3Fff433f4 $avd9ïg^J0J&20Λ7ￂ,6<ٵٍ/bvd/}n]L|Scj)O000ag8}:(/{X;?2x_/$BL[e7e1P'`13<#*)s	ϽzП?8>12p)#01FU|},/<E@]wi w    IENDB`                   ./mvappsvr/docroot/db/icons/chart_curve_link.png                                                    0000777 0000000 0000000 00000001475 12534142432 021006  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥]LRaIʭ.ll+gTf$'*"rt"K>)Ũ7օjEͲFS$/`.-o^DE%$x:i~պw}w	 HہxdA]-X~y_0`>	?B	crn{ܻ([.8%enN&'P36,Hk\R^~ğ]+yE9~>f"`jG!p`˴Yy2#'z$fvT72zC Y0X+HeE/n4zBǴGɣ+lxRe4}ĤЙw=U%z63ݺ&\fc#u-(&˰H9<!h%ol6;FR5wttl6еeDVw݋I%!HY>$
===0;;nFFFͫKzߗI"s::K2Ao<:^j] UADPb^h u	Ai!39n9ҭH`4A`ԝgZeT:rC<$	Q&,}ER#˯Z
R+{HrLwqs 
t:1LnDS[~B!צ|oMM͒Ze2Y%N>>/Puxo<    IENDB`                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/weather_rain.png                                                        0000777 0000000 0000000 00000001162 12534142432 020125  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˽Sk@>Yul]p$u!dRܭkD=@'{(k菱8DK,A)8NTIN?Gߩnp3zNwwdǭ: vO|GπOzt~ +tBx<FFtA]>`Z*n'IdYV( ryEP3"ahf?̥R)߫j	6M}^`G؝Nc|E7WѶmTTbi>z!Ȯ$DD-'	rb4r=m,	E	C$l6F8 AXWx4+;@<@cHaa]cƙ29&)0%\ql&V>Qu\MT/lڸAxׅ*@޼#e7`'\4`Pgr (}wr\=VX^R#
+Kyhem}#<ګ__omV9π    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/server_go.png                                                           0000777 0000000 0000000 00000001302 12534142432 017444  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  TIDAT8˥SkA%IHRS]AhKQAAEBAoXT$'OR=*)i_ID[bm;M661xo8L|]7c]קc]A
MD~L&ot$(<
I@?r|:
>euMp	TU\b1kPB+V	DݨVMeȘnE@0ĥ;ʆ.E&vtl6kqj5:Plپ&CɭՆM4mZaeYi(:@x
cky6IAࣾNbj_㳡ۿd@4ǞHaY@&Fn &сsePہլ\(f|:DU!Miqr6Ae~@n8C "	\o,aV]Ym=NO<܋D"gK'`u

9ӨF
㼔e,=T1?:T* YQ1qX[(kj|]Ǟ]7d*۫    IENDB`                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/page_white_text.png                                                     0000777 0000000 0000000 00000000526 12534142432 020640  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT1nSAǞ4A(ISp.KPp"QA7%1Ӣ; +Z######DWk=C?|Xj9昇SekMs9NNVG@kD)4hn.Q@nJ)1]:; 1@T: ti: I$fM  -+g  ]^Lv    IENDB`                                                                                                                                                                          ./mvappsvr/docroot/db/icons/ipod_cast_add.png                                                       0000777 0000000 0000000 00000001434 12534142432 020234  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uKSqOE?BҕaXx^vQAE.2{T%%[).G榛{qnN\ga9@2:#Zm/?y'.ӎe[#|qxX8˨p	o,F X_^uItc\aA]g-`h+.ёiUxKQt7;˒/EQ6Kvo˄I^*fcץ!O!]a,	hϧ*XiV.SRZ9FRo]t>'1
!ݏgV%n-\5Y2	`hZBUit-S7cyB_yquF߿Ȑ2Cݤp[YYVqq,d|gh.07KxWir׊ZN@!Y~pH L3V !ά\ >y2Ż ¼N1Qa`~$:;KP.	 'fNVgapJ}R#  x<"`~~b${{|˵}g[rv]oZ&	===-س*hSQ,Q    IENDB`                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/table_delete.png                                                        0000777 0000000 0000000 00000001224 12534142432 020065  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  &IDAT8˥OHUA}/Iʲ I-
!J!AV [DvR``)I&="ML/	?ygδwswXk<yZZ""#h#Y`ň8[ ֦xa_*?۝Q`D =_EoΜw&' yuU_\ڄ# tNľbV	t 2p@y&םiW* )~D)ǉ$nRH%M`O94Kdlxlje+n Mrqh%uEǁ4D[Jh[޽Ed/5-TdcCh&J G)/;v:x^<p(R$]	g%Ζke11+3T)O.{y%`a^aSW׺Y5RkFԗ7RxN8OEXL̸"w骶Ź817G?/3Ah.    IENDB`                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/database_key.png                                                        0000777 0000000 0000000 00000001374 12534142432 020076  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅OLAƿ?-mF@)$d@MI/jbbxPo=x!%APIJbD)lXlannיK
B|ɷ3f޼a4MC8<r|H}BUØcdҰ=`<(xcc\Dt#]mP(4i8m/+JZ4FFF)R,V__N8u*l6V+fELdMMM=&	l,@E}v^83p8x<pz1-XEYUP'^uOmhDR,]*Leh0v'_sxm[0PlE4yZNRn(MnTF7 FW9lBV:ʈn +3*?rk`,Uk,"RLt=*rJ IV-2¾ZRD%C
NVs̜pfp%~~::m9̼$SnExlQyyxii"DArd.z|m8;OH_^91Q@8I-<<P#};5էy;}zt'f
R,sqlty ?+~    IENDB`                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/ruby_delete.png                                                         0000777 0000000 0000000 00000001300 12534142432 017752  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  RIDAT8͓]Han/L(	*k$Zl?1:+Jo~Hw "JR)VZ4GMnzg]ssyyy^h(MB*X
E5Z^_"|Eӆ$Hx醁&'	=gws3KMMx<Ѐn%gRK	oi|0:
pY,)
na558K']aXZ,Pv6sz=_23.1jDyHQPU%tt<,JGxqL_UG;BR`pQBÛB]39|$f3H_Nnz܁7)	}=^e>MP{tO`ȕt};jkyWd7+V{S"6rbꞥSgkR|7%PW%E=ZZJ'U;ׄ	!w&<:ߟr*f$ĬEޒUCʾ-7TiomӼ[!;N+L 5<    IENDB`                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/ipod.png                                                                0000777 0000000 0000000 00000000717 12534142432 016415  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  aIDAT8ˍRQJ@֦B T~x	5<@>{ =A_i`BoYtNf7;czL<_RHi6=B$³,[{5wPg@.HiRQ;^XDajFʎj2̙X|Vk]ק Q݀MZ^- u[f;epQ'U;7EJ @KA&p8?[Պ6GQDqSFBqYn3DtN8zw)@ 1鵦(W.d21]] 04!,G4M.Dk=RHӥ%i    IENDB`                                                 ./mvappsvr/docroot/db/icons/page_white_copy.png                                                     0000777 0000000 0000000 00000000465 12534142432 020630  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(uMn0E9GBꂫtPkBH$4]8&瑟J&ѨF%@ds3W$q&гݨyFz\<jURUwN|qDkG2HǼg'	7=Bp{Kq=1,=ФonY( U<B*D2uMx#> MM    IENDB`                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/map_edit.png                                                            0000777 0000000 0000000 00000001554 12534142432 017244  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT]oewޙ.v
mj(6 ƃREDo5AńbbL$11h$Ԩm@)2mqvgggwfյM4>9B0⿄m$ioB0yǈ!$	F#q ZF&M)	]Cʧҙs{:s3/r.7}iQEqDc
?jS	K	5 @34Uaf=^H"-@0mWd7z(&/POsl0B&|'Pu%8s-txqjPl^@"yڅ+w;0y%1y?1F$/iIAʀyl143g1Ah DDSLQO@tnz|}8ZÖ&90mlǭ.mֱAo^CUCxC/X{⓹CVkAR_X-o.cOLQ"{#lܴ(V1vhWVðbAMs(bh3֚%fV89{8CֿF)wv0egh34&c;؋+gGHZ%nKW&뢳 i3@1Hk~ɬ\?07"0$%MS/ۗxʭy<ÄQ6P$MWN],z^R	/, 0^ ڄIR~XuI;    IENDB`                                                                                                                                                    ./mvappsvr/docroot/db/icons/weather_snow.png                                                        0000777 0000000 0000000 00000000525 12534142432 020164  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(cπ2ޙ;ly~j,
89s_$ǥ7쿺gDRpP_d wW%-W?¥?@ln8?$?,̄uR+\]pui'=}йuGUpobO/GL@h!]D& +K    IENDB`                                                                                                                                                                           ./mvappsvr/docroot/db/icons/medal_gold_2.png                                                        0000777 0000000 0000000 00000001201 12534142432 017757  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8u?hA?$E qq"d.*  8":t( .B)t))VFSK.wsHBҦ>8w%fF?nfO_`"*=)Q#gUx;~M!=,*D^8\#fD ]jwv 2Ë#yg
x	x	E6NsW)u
P5'%8_c6Zc8u{Sm3o`Ay1\Lc,paٲhCI$	4W5\*_`[,iczJOLS
'o6Ց'h3XaBo2cSHTdmNOn q M@F`o#C{́F[h`vYwM}ܒl$ٝ-io~`i 꽚-0$	Ku2?2 8wtb5֞/)3/ oiߠB\KYa~UwB&e    IENDB`                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/text_indent_remove.png                                                  0000777 0000000 0000000 00000000537 12534142432 021364  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%B@,0Fyy1ǿ~ w^F>FJÀӺݕj!;66:̙3pk*Hac;HfFλb4%M%HaXy]SRc-7ǿى`/xzz^O0o=|PׁVgW`&CȱĂ|&@TN>|` :);    IENDB`                                                                                                                                                                 ./mvappsvr/docroot/db/icons/paintbrush.png                                                          0000777 0000000 0000000 00000001044 12534142432 017633  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%,MGf
J%{x4>X݃wv'U,PO~6?h}gUKyž?^?PsQԬ
:DPƭ>hؒ<9VlZ;yӚ9gIk4yno@͂XP#㦵sy7Ui͌f}~skXca ߀U&%+V'ԼuӚy?6oҚ;t@8Sbe8oOO<?TIwK.?mוvOrҚE-.Wƛ/]0{wr=W.{\>A`fi/fȒs&N;k[l s,YmZװi~Ħy|%c  ƽ?    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/vcard_add.png                                                           0000777 0000000 0000000 00000001225 12534142432 017364  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  'IDAT8˥KTa3F3i"u00VAծܵpp-ha" HaL鎌}-lFZ8s|;{'{=x<H)QJ!S!?s v#fH$"tr9%HY,|Jon样3/|>+Xv
k3eypчBwVmE|Ïhot:͵HY@ 5mt]M%NLL-o[3	1lpoUvJ<Yڍ_cw2o{;9Evu֘],GVs {ͦT. <蚣ˠÌLP+ڷWsYE2Dq6p9óC-<yF$	*++ill$\XphSynEB|B:::PHb_̬"bNKB4Fs޻Mm|$mclz@)0 F/L|Ê    IENDB`                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/shape_group.png                                                         0000777 0000000 0000000 00000001051 12534142432 017766  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ1SQ(av*6qBT¦v1BV.JBEBVpؘޛ3C20Ǚh8Kڕt:`4'yZt@8{8_%y2L]~;:Z$ N  hG  Gvj@I/~:@ѪyByC$a9a3ᇕnި@>/*	$ :7`$^܍.)0,pgJP]pH
_%;`A6w d $ \,t.8$?JTOp)o$n
{ìP43
7;r3&YuhTLtE${$ HqRh#`F8~|^nk6lJFxZj'I|>7f	%`o    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/brick_add.png                                                           0000777 0000000 0000000 00000001331 12534142432 017355  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  kIDAT8uSKkQ?7K.\*(wՈ4&4%<1I*Ye&)̓&NJIyϥ-:>Ιs R7nn2Y#1E1rLc2S2r!c8b0 }=q	{oJÁucG=Nt:r\xA{~L&Y\\Ld2T*I]N%	B!tn;;;FT;N>P(qihZQl`{{{Vn<?R0r[F#R9(EB^th429#'D@jZlhrbGITu(\u=8L/T*{l{V 9 ,^ˆx=mܙ	lLZZZ*Rw&6o&}\p?̯NAן?<Fq`0fI89}_7sFI?^kf#:qEy@b7٨)X**:%>wF0_)XCl?g(UuO    IENDB`                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/shape_ungroup.png                                                       0000777 0000000 0000000 00000001232 12534142432 020332  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ,IDAT8˥S1la~G[
4m5hFuppHL.,$0$L:!qspQ1ehl^k|BOwbYfr9<V*
L&闦i^B|.O$zbX.cۅX,JyV]r-MY	d]Rדȃ&{$prZ7ϋ._WЏ bhl#/&tFoa[ֶڰg<ѭ^d2KpLb;X,)',Uv؁#C$DBrΟ=U["7N$\~HN<&v YX22Eؐ4O`_B K1)8		>"ƱPVG?m<^3ƏhB!{܋ܸHބ/oiZ8`|f'meeJp1|U+4MkLTU}(
~Eim    IENDB`                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/controller.png                                                          0000777 0000000 0000000 00000001232 12534142432 017636  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ,IDAT8˝͋Ra*Z	Zh)
~`~;~P
&FG*";)o:3^x.ܗ=T p @"=tgvA |YVdk4-Z}P(b\T*GRirL&C'ɧ
+Htp821_PߏŶHDjeƯZ-0a,<[oOs  ͦr' ŷ0z`>r<l#@>h`l?sX,`ZqB85;gi{u: UdQ锫nRJ%R=`2@6t:d1_Z,^g$	Px\Yhr1TUHRy F wVT4Bh4zG#z{2lh)JS:rmS@0N*F"NH&fP(̕`^()0	6 oOqn6|Zm0ŧ    IENDB`                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/application_go.png                                                      0000777 0000000 0000000 00000001172 12534142432 020446  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT͋Nq;4Èfbx)2XXHYb(Ijac$aa#/%R3ϋs~5gbor]&aݲu{G"p"ȝ;S7+[k9D׀S+uO2SZ)\?:|=R
Uv("Bxg
*ˇ4J$P2dH0K9V"eN#y8"0,A`VQpnN܌FxH
1͌F)Ea)\xp7RNp23I)SEʙEVjx#6{FX4\L3 I9*v9+pG-e{/A 3
W䨩	6,dʈ/)fr왡p\X8w:NZh;#**zbj6Ge\>$/֞K}^T;>_+$Yk{}?~4{<,Lp    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/monitor_error.png                                                       0000777 0000000 0000000 00000001312 12534142432 020352  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  \IDAT8ˍMHTQ7of5%?wr٢@DWm{kӪJMDEZ"BQy{Ocp..ν15Zk<k~*gDu67AD@D="TT31 'b</w%7P	S_]LaAgPbq  (eY3?RҎF<-gDkYe+aġ8D0h0 F50Yv5)J魸O50 ׂeYYǋhmz3u	 -/yޖ/4tQVAsu%A{? 
rIB$qJbg4@%7==՝7erb'B#uݯJ|K5J(H7@z==X;1::ZZm;Jtg0lyPXcyp㜮%QUAt{LfF=bLN=ec؁e?繟I'X? x;Թ&DbL^_1Gfu>U    IENDB`                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/font_add.png                                                            0000777 0000000 0000000 00000001172 12534142432 017234  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%f8ppwks~[n̲*etW/$#^욯,to➗w=߽%~;]ۦskɄMxO+~-\]9MewZ\wmAӺ'r$*,
/*%Ͼ(nڝCfV944SUY7I;{8LG岇]^R:Ć 1su0^q-궟FgD&~Uo8յꍊyN?g^K.<J`6h\˕/<w~ْ=`1R[ot4isM={RI0o*;Pߣ{xOmWG.M@\z̑޽+	. 
[{4JA|xiH9Jw$"?2    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/lightning_delete.png                                                    0000777 0000000 0000000 00000001351 12534142432 020762  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  {IDAT8˥SKHTQ;w&s,u6:**Z$d""m$*hodJ1zZ#|̨=)::sN:8Ms$!g)m)*88Y3n"n`lCtkp
kIv9WM2#+=m3:own?	}v$s%y{GE,ȹ)EK<#Y(=JQÃXpધai)HUɪ{U|npYP<Zt'SVs-_)[uUCWGְJ B%M0t48KC/uvԚ:oi3l}Dm{,ymp,46V^-)M@oޮSՊZHYycQFEM#}ėwXpb͖1Ep#4
߅@r";{!u g%DIڵ*C806Bb{/Pe	KJ9v(e-SC<)}OD;$S/`H	\9Ew@|B	yڎ;^+x߼ڋZyx^+_7 F    IENDB`                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/drive_magnify.png                                                       0000777 0000000 0000000 00000001201 12534142432 020272  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥S=A~fw#{r+$MP;AL?`e*m$@$!X
Wpg4abbv㼣Y7<;;Lg|/(J CVA$}v^Q#2i|>6@p85R x˲DZF#lmm<"=۬*\.t\B1躮A&A`0qb'䕂lVXo*9c,KT*zNLD5hDB4|!Nq\
T:m(IZR5MūHvq7t|tcҶF@֠=籿Ʃ~*1{;"MSuI/j&|4~Xl#\}O
	,Pba XEW#=+y%ˎ͍,*70+\2G\V >3Id.г8˚$`:1?af/o-eu~~|_ya%zh)l    IENDB`                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/page_white_visualstudio.png                                             0000777 0000000 0000000 00000001276 12534142432 022412  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  PIDAT8ˍoHqǗ8	-7FDhBȔJ0ތeь\zFQ"V
^ LbcsMvw]Om~Щ(IQj*"Ac:$If2C9yT,)p*˲y$HD,$A%U<A
0(
x\p!>$'ޖ =kneTM,nɒOz
㗏D\d	V\o|gܣx$S6YT?@	s7v"nFZcha$D xg%zEL@R²D6,3a{O邠g̹zxxK`/a20AUAxGf5@.y}4NA	cV0m
+m/{ʊ<Ď!Wǝ >ؚ0T 	f`J).]*Pか??	^~V Z!Z03	^`!F 7HLgYkAy~eX`=aѶH`V%Xy    IENDB`                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/folder_key.png                                                          0000777 0000000 0000000 00000001320 12534142432 017574  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  bIDAT8ˍMQw^S _IQ$BIlPLSkRZv4	FRL1ry9tO<zۤI?.|y ii_Zw:dH9ٹ5EՊ\ŞC]IlSz7Zx?h~Nun<]}̢eD+Kvm鰵B%3SRC(]=Nu:N;۞g+H2O3Aca2"EaD46^>(ѽw^kSJ4(EխU퇕*A=7˧p;J7{gR(23+L<tl`uA7yw߷g>$J78ӎx}f}JMJw3aq(Ld$bj$2a	m [Q|p:hM0"o{+!2dDD\6
blHɜ#->J- " #p=+,6mb+Mߴs b|u$j6!"ŀAtTH	/C؋"oP^-׌    IENDB`                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/css_valid.png                                                           0000777 0000000 0000000 00000001225 12534142432 017424  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  'IDAT8˝KTQǿo|0ZѐB1ZA.l pղM
nX!ʡUH*	z{0/\Ι{9s!ݕJ-'{-{Cg{|ABRK):30}wz{	Τ~}K1Lb1K0&miAPJӖ}PVq2D^/!7m<_jW-in+?bKN8?e-0Xm{>ޏGPZAk	)QXFFQ_:X[{ɛrEϕ
=
(?ZƮqpLEx.J>]4%LL!Lb|kB1cܓMx.7l)vv>q+V~p+_kCY`iBHn?U*{}~meX]}ўG+󟰶5*ADGi.5m	V! k߃$\@d]Q?F^=?=    IENDB`                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/monitor_delete.png                                                      0000777 0000000 0000000 00000001263 12534142432 020470  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  EIDAT8ˍKTQ?7j4$EA֢ EKu$T"E\m?P	R+Rԑy8-F1r/r9sι^%"LLLsZc
xjC ZYd@D@D
kDH&+ XY]QGO;E1f#$4(/!U4 mڂxaqB x Z|Rlΐ^ɑ-"`Gh>"l@kO)ReNB*1sl  qy*GH;%1 TRdC$K g(<~kX,<݈K$y1Ca-e =Sʪoc_Քgڎ_J[yȠ<6WƘ'O>H${BwW&`$*Y
402Z/zFC:H<Qe{[ҝoߩ}[ aR)/bADjȎE&e|ܶ?j_8ZxY[4LVwF4sӷ2+y&kH    IENDB`                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/folder_picture.png                                                      0000777 0000000 0000000 00000001311 12534142432 020457  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  [IDAT}=\U{83+&e-XIPA,0b%ZhBʭm,%VXb0.uc2sν]a$[>I⿜/36,9M8{[^߸gYzg	ʊn׷&\_TmASl'0cNz_Q10pƴj5YsfnU3pgw׆gΘ#:[+Lkg֓xX1=S+^13GfƋӧ??'ń 3j6|CnWb6 W{#Wږ׉1r+HV[r\=ZŝK{1+z@R0yZ0͟PXu")`Ec
_b Slngs4o9?Ww_#()xu\]E#1cg(W @	Q*3P5Hs<MQZ(Ei)k9HRPT R| zhQ -Vdr]K7,g7}9ī PmRزp    IENDB`                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/folder_camera.png                                                       0000777 0000000 0000000 00000001331 12534142432 020236  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  kIDAT8˥KTQ?͛G-釐
.ha"*Jie _`(ѦEm0D.2RS+Ĳrf{GdѦ/p8_%"!ʶ5JN000 ,,,PT$Kwtf뉢w$aff6jkkٛOLN XYY!A?cQ< cC=O{@>]]]؈1&+4UJ@-
O=J*<
JZk("c4'KMl!rQX[[#ÿKIq:\I\}Ξׇ|T4"F4ũL53YL&I,=$	c>/`Uw:FU9 h`SSSS >FDƅ/%QJp!"PhafggcD\3_t
H
#!6eĖA]SNDI!M$2bKqG c զ+⊞H\dV	m,Vkſt<t8B?_O "ɽmI;s-z    IENDB`                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/thumb_down.png                                                          0000777 0000000 0000000 00000001131 12534142432 017617  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍka' ASt,
.E,B\*(ĠDSc#rx\p!)w/\LC/Ko>x~oHJ8hwNN߉2Q40O8.X-01ünGy6:D#Da	0n`ZP73/EUϓh"P.%[#@@B?fMК*PmCɄSC.lt.4de!v$,v~ ^<^b[T{Wva5'jW|)/RF	8L9y1,^i@ Wi)	)(!rׅwa)3!jrMLGh)YXAןqxtUjp{-ҥs9b=4F/`ӟ.WR7<LV    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/script_lightning.png                                                    0000777 0000000 0000000 00000001557 12534142432 021034  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8MMhu <iM-kqY)Ɇ8D񠨗DeLxQ2/(=us0'DQ7MؗiӼzj~.?Zoǀ;iH42+*P4 >}p[w`sma0IcM
	Z㛁`zY8Q2xK,ۓ\ߩߪn cXnhCVK s	pW
:̯~7-2RaB.$+OҭW*+Ujc$sgƴqsX[|+䟡B[0LTSqį]Zm^xas49Oya񭋱y|7ZʼwaU2H6~B2sɣ/`*MRi *EH>Q0Oiu4Wi!nTDjMQ@5J޾v+169TF-#:50s/[)*g?x'.8gzY\ޣ4EZs~ࣱ!f~~0c[6a6OX!t%x
8ZgyңPjZ7mcA?  ^,Pq7 ڂ _ꠥonV83PR,QE$|.D>,. R\819׻$A&Pe)bݘ	rDլL    IENDB`                                                                                                                                                 ./mvappsvr/docroot/db/icons/cup_error.png                                                           0000777 0000000 0000000 00000001426 12534142432 017460  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥S=LSQmk@Q VFi1]uq0q$N:(qKL0j@@	4ڿ>1.ssc1} pwOR[7?X\.WhCD2~\uXVBv~r[Ldbqo}$!lV>	r|j
$Xlmi0.Y5xVhoGT4^wlmmMp8p9^W`AyðEeT9DBraK\wh"B\x~420uv!w$MSvAŐJfQ
&ajvB~V*Z
='
j|^}]N >	Ks#9?liʂ39 4L5+WL|sc	$ڏy.xTeEtS$)xRz&"r`
8⹋8PɌwüd2J1ı%uCl^E8}~oI@VT["z_Z+yENh %|y6g2H`0Nn\
]㳐Yi8#:OHL$h=	&~?v5    IENDB`                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/text_heading_2.png                                                      0000777 0000000 0000000 00000000460 12534142432 020341  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(Ͻб0Г(h"*\Dt\Y4,!
${LLo	 ]G+]0:oa'%\CG7P*ԓ<"@!(gM=wͨGHitlcD!Ma5JIN\4	hvfPo[; `
vk    IENDB`                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/book.png                                                                0000777 0000000 0000000 00000001121 12534142432 016402  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ujUAޛE,(HM(> v>(QEݙ,DcwaXv~}3${"`qY	Avxo?0^#87^^ln!%A
n)Upu\[]`UUV?~xWn ґ>~accE {*$bs{.e`4%Μ8;HAp
OM6vHucf	i )%n^<SWuHϔ!*(x1[}"\Fp4"[}ԉ  BP;K3B+	"٧cc>V8PLSAITq{hSPrXl{PBR5BHds,%7Q)9b/P/e"0̄YVnBږVQ.EQ}7lHv& |Ֆ:    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/folder_error.png                                                        0000777 0000000 0000000 00000001327 12534142432 020144  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  iIDAT8˥MHaϻnڊ)f_ԡUCDBAKP]-CԭA.JkV&F;A90̏?1jczomk3#M G?8Qeˁ5aU;rWFtKԪFdqyI Į	~"1j1&|k	T@1^[ρ T,MHBkj!Et˅*ۖ5/-<Sgn%mg%Rx"/zēdZO/(1?/TH	(U U*HiШY$a0kݸ/I5p
S!6-1;#!C4CîLH,v`Unfvt	LBc~*Zq鹰WJ$$]WBBT|sEe\}Cc[;zRzJYĎ" S.pgqfC뱛M;D>T-}eow+&ywҤt軱tGbOPd#̒<Pէ>]VQT*u"6Z1^R    IENDB`                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/database_table.png                                                      0000777 0000000 0000000 00000001326 12534142432 020372  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  hIDAT8˅YOaFQ^b41.	QBHZF4Ѕ:K]@ZB;tk|I$O&'9wc]vNp8,*m6q ̿`<>LP(lnC$iX,
fggZj# =l6CFܟ:O5̸\\\3A@0DT`@>T6<bx<N!5>>U!FCxۏ}p
fzz
VWW PHi4VD2nSA"|>~?R0zsBUQ0VUjZHR0bTFk ە _q̄\$(%Is5X" O6s)2*`FQN;¤ł1&	c&*ʡ	%]V{Di]	nO<&.wTBN`Y$ZܿQQ40).艉(ڝzu*/r.W}4ve+	l	FzB܀(ձUAIWgJt .(}:W++/,Spf8
ñxTW]    IENDB`                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/mouse_add.png                                                           0000777 0000000 0000000 00000001331 12534142432 017413  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  kIDAT8˝kRq ? )UDt]t3l%t ؈B'8/|a4_7]~ϏIuÏsxy8G v"u\jelH$gb>A$]Jcx
8>>rPǶ\"T*>FƟɣht7~I&`ZyB &aiZ}ZIT$)dYt:!<R	f3qR9ZD)2
6 M:ZFM9NEdQd	22(h4h!ίj@ CDS.u:7.I T*vZS&MDcm	z{]oޭ}LCwA($QOƖ!\`,^KOD Ӈ*<\%`;aq4D* m
*-1Kd@JG~<ޭyMɕJ7
=`I*f'"HUvfƳh4\.db8wp&tyRUuF(|*q    IENDB`                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/application_edit.png                                                    0000777 0000000 0000000 00000001277 12534142432 020774  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  QIDATkqw~X0$֢Q"BJ1I-QJqA;jv\x(yQvlVc%f]X&kq3@SũPS9sʄX#uDfEͩhQ+/b,⿲pe3?<挆msݍ=|3%/805bNW0\>%2*;|'	&yC3׉>j;Y=䭦SGL"*jD
ro[A]1S2ɕ	!fx#?\o3B$Y\Su!" Br&1g-C/"ѯDK[+,"!/y쇛$n`(u/Ia;Sj88gN	E D~([&"1#70Tl:OQL!@W[3)Tz_fRYt=KR4BjFOuԟ9)Km>H6UV/ō5<TQ%013F;gQphWxy=]?SJWmo/nUhm?s}oE(ΖS    IENDB`                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/arrow_redo.png                                                          0000777 0000000 0000000 00000001161 12534142432 017617  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥OHQ7Zcf9UԢت	fdPlQ
RȕnE"à6e-r#apd6Yc|lDe{yDQؿ<>3;uDٖ47KgAg)g$ujUO
2kp
s܍{	t?<(7YՔLX]`$7id?<? ]R.ݟ8nރe@z<ZoFX q InoJWId?CSkhܕ$'\*бs[1v|Aٱk<<-Dd׺HUW!@/иJ
k8  &!7ɁMAbX";`̱G "}69ԲKKE~!Df?k8+TUZz;-XW_?(,CH*P6GڡM2)&
rnR hY    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/chart_organisation_delete.png                                           0000777 0000000 0000000 00000001063 12534142432 022655  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥?hSQƿTۘ
 (8Bkk@`At ͭ"HXUPKPܿ{ݢ)=9ü8Jc*H(<]fm11\-b!eQnI JX;hj|<PxYA)!#MSp{Fj]38W{rQoXֶsW ym56e9?Ukx"gbt3gn #STDi㸰j·w`/pb5V0#D g< Ri&Bj\
ǀ~?0N	Bh
9V7[R1XE ZB H ǃB0[Zȟ,>.0m#i}/L'_avtU(?<Tmۧ x	9X    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/disk.png                                                                0000777 0000000 0000000 00000001154 12534142432 016410  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT=]Uе;C`DD
Ve h*B"6VV"c
vba"NBޙ{~jo|x&,K*o=]߻_v<}tu.R[Ҝ9Xsy|o~ |u_Bk6Yf7bQڴ^Й<T::֊Ǧ7Uݕuwٞ
,6}4'kٞF%*T⏿NHZ'}&NGۯ_鋾ﴌ*UD:tHُZkƦ/F% 8A#хJpFQ$Q5:H0'	QEDDK$e]t4IJDUS*!BxK    Oƈ5Hu   p9Qpҫ    j'ɬ4n   x93W3j7   ˜oO$*yHI$H=m?!|nm    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/chart_pie_add.png                                                       0000777 0000000 0000000 00000001717 12534142432 020231  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  aIDAT8}Ou s~c99(!ѐ1mssUuE^pn5Vs4lc.PǦs2TD!T""9>s棹L[9%%hBZrDHWx})×&z'YYٓŭU^_Yͦp=8?}2nOV_|xC{6kN"R+gZ|qx0)=;Tۙx?Jc25YanͥuuP; <%gʜI{CϙQﱫRdl0 	]n?4*gQѩ+ψܗ|G6*0]BBn4'x,?7&FOT"BXђB.Ϛqצ6ǒ
gS<|;7MZ:zxQ߹㉥U͇i8|(!b?>l	dU׌<m>svk7Ҳ1Maؔsk)D`Ͽ8d>5ok6{'A)mrᢋ(bEkD	=)e+Օ8ol˴XM}G8<Bcm??5wF>3X;T
13cm,iL}MÖzlM}sZm- ox-;iC:
irab-$JHE ~:@̍oqNb۔RR+N|a |jmn[UjMn.WN.L6wFީz͖Vb\[Kϭ>_͝u +-uմy]
    IENDB`                                                 ./mvappsvr/docroot/db/icons/folder_go.png                                                           0000777 0000000 0000000 00000001266 12534142432 017422  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  HIDAT8˥KasfK)y)hQenpS._PhZ2 $2
,C9ܾ｝^[ᜇ߹)a;
ئb ώ'+ە״. JP8 MJ)bZoe-
Pqf!?:$ˣqJJ?K}"񀠂ک |iS'0B<YbkD,`I%oc(Iz[BAt[!Kmu V.mL@lڮm$
`3/sKvul ".'E\YF\lІ4ִqudGW"0[Hx,~bޢnj<Ƚ- -pb3X9ы0Msy]wM0hlK;M>§88|_x+Q#Mɛ"WatgzR'9)&lz\v|JerРLZ\5kB_h;'_LhKD@xLG99;(zү/)y_Zf7    IENDB`                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/text_heading_5.png                                                      0000777 0000000 0000000 00000000460 12534142432 020344  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(Ͻб	0."C ܩs%Ҩ7.@hm	nLEnGNʥB=>+|q+EC	fx`D⢍&.@хFrPi{*0pdtxV(Ua!OTo`SĩPu`8{츼    IENDB`                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/shape_align_left.png                                                    0000777 0000000 0000000 00000000622 12534142432 020741  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  $IDAT8˭;NCAEϋB)ftc-4ˠt)yfky$J(h||mk`Lӝ) ]p (L`=<6 M#,7߮k R*EETk0{Я*~\][ 6ANAN"eq{}^ NP	sa6²x|7 wadж-jYȽ. ڶ %ڒSSL\v9տ}Y@sn    IENDB`                                                                                                              ./mvappsvr/docroot/db/icons/page_excel.png                                                          0000777 0000000 0000000 00000001461 12534142432 017553  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATMUU  {S#
r -MRTڄK
EaBD!ѢH!jM dI ecｙw9}_9[,G?ȁ)v|8\|؞ !w&}%1YB g.^w⊿Mw{OA	b19䤮NVQ:.xWv!9碯H("E dp36(>ԎgS5Be㏻|o~+UФںeKZUݝ齓WU%N[;?~S'S۲njvG2j|ӎ4mm-5DlyаEwSA^nw\[ּoxhD_EBM'{_Ld`ݢkwZ2+
2Jn.]Mq璻M&㐲*2e5&7nzZjrG<k%nՉ<kLA"UDl#8}/gЙn|r#O=gdl7/֕2R&*zw͉ξ/^/rbI!D#7"U 7@	uh Fڲv7  ^꩔2    @YT7zP_1G圣L g(*MC	!kBXA ,tSJhY+X    IENDB`                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/style_delete.png                                                        0000777 0000000 0000000 00000001541 12534142432 020140  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍRyHaVO9gNDc$J*vHPyy:eT6J4\-/%#Ke	WmlN<֦<f7ꃇ{5  GRg9<Wީ]XN~3%:)sw{'<(㢼wN=*=\b w|'JL/>ۭJFYxr?fS9C(TD ]bK!䏿:CS
JvBEwḀ9#:窇"">Um{SZ!j+&NjҬ5f5Z'6(f|]b
u+tF]-.嫐P|{ IYI$! ZPBXV谉]"Z	TK)/ADIZ|\(Bѩѵ*JiQTe|}z'ՕՊT@r ]+AF09I6(.lV	4:Nh3Gy1!sʔT7h뢫I8Eƍ{2kh
}|͡)Ԉݖ>`}Oq~kl(nZ?D`|FGP
ePڧ!ZU8#HTذ#|1v\=%j3BKR ^?fvC1fm-q]cyYyhH)tb8f20d74FoQlٲO    IENDB`                                                                                                                                                               ./mvappsvr/docroot/db/icons/telephone_add.png                                                       0000777 0000000 0000000 00000001534 12534142432 020253  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATOheM%iډKVQVBCPE]MBAI ]8(l˲unmfI}[~>Z>ƩL*q)*x^@u5Sl
ןp{:[rv`X6#c#cF,1;<ޑlΤ"\Y^EùCfpمTݝ#ܕi#}W)kFŊPՊR|;1XF<ccLO-R
5('RcXD@AVūl˸?䗟ϦX9Ng"FUXZ#r>ʭlZ˶'>}hl_m&v:{75~sS!Bg}+ٞx+7h_R-,,oў$H'#'Ty2GZ*V9~,M/wɨղ9F_GOX<#9?v>9⬬ormu/LZGG<sh9˟3t0KW<A@`_kFV@RQWv w	}Zͧ;Հ.b-b5F4?8:!c_@<@yBZ6oFFD`hKd4Unr;Cez1eg.6    IENDB`                                                                                                                                                                    ./mvappsvr/docroot/db/icons/text_align_justify.png                                                  0000777 0000000 0000000 00000000321 12534142432 021364  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   cIDAT(cπ01PD/0Ű?1&3DfE	酘hD`' 	?Ę@0 ]Uvxi    IENDB`                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/arrow_inout.png                                                         0000777 0000000 0000000 00000001047 12534142432 020027  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAToq Hj#iy@Ht0RhB,	X$bAԑD'.qK/WG9yK/΅UIHB_OfATjVuLgCOfi:PIHBgak{-4ަ8[1PPc~ϛ7Wؽq(aj>FZ#twy5HmB)y`M
Kgַ~6pٙĠA%k7+qhʝUY5Yfhun?8,AU=d,6`&ǧH?KˮݨhS[D[?η_Y^Y"T_~}a8Ui&޿DEXZ^1g|\@)6j>=K!F"T~XH&ĐJ|    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/mouse.png                                                               0000777 0000000 0000000 00000001172 12534142432 016606  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥kQGB)_}g$ "dfU\8J|>	[Opi.gfs~s/ sKw>$I?PT^J%W>fqzp8rN&	}rD~bUjJ\/7Vv;`ZB(RIznfd4|(
EQ`^vXTU^>\.בl#u~mͫ
0M^tJE(8NȢ>,6&h6@Aۅ|Nq~q	d2Fdqel6s21>CabV5	$rX,#
#ɕbƷ@RGl4 "P&qw uGz~dB@ ȕYsW4t@Ay`=)$oz=&_&? &S
J    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/page_white_delete.png                                                   0000777 0000000 0000000 00000001030 12534142432 021105  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕;KBaգnBCMMBh("Zڂ38PC.(8TK 4u∷=^#~y
Qa$CCUM`$)Y**r`rZ%Hl6QR)$	aY
|!ϣP(O" L"Ȃ\.:v˒6H@t:h4Rm&&kީoX,&W"BwA+/hP;4$ Ţ<['^f2~^PH!9Ǜ݄)^׻lV|fN_:iCϾ4fmQP6qd/*2[|VGsl"2}ݜ 9GdO56mkIz]˥a	T_#>U)ے    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/cog_edit.png                                                            0000777 0000000 0000000 00000001541 12534142432 017233  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uOaƙ[vZ9N:0b6XLMW, 5!i~ff4c	4`"( ~7]Jf/WƦݳ=~ Qkjjk6'ǝK8ԙd"N"UB!HuJT*e2Y "&bfQ&)ESXXX R
"aZ,w' 0 ZmvC.ǈx8EQPDC ZGz1F0?? X,1WЂhleOOOjb||===gǧrW:ή!IN|h4hjj2v#PZ>6]UlЋ.f1T&Abpp---{[Q҉;EXdt0dԧ/EwcUⳘכ2*JiX\!Lɡ+9;RDEӕA˳HJ$^ѯbEpzD"y<0X]=K\
^&qPUU+//?Ɓ!<s޶Q©~ ;KE;q!&gЀ\a=hll쮮Gf [ʇ$/p,-Op8TNNf|L|3m{X[1Rq
s#IzkdVg5欍W-/%lڤ    IENDB`                                                                                                                                                               ./mvappsvr/docroot/db/icons/medal_bronze_3.png                                                      0000777 0000000 0000000 00000001206 12534142432 020337  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}kSa&M1(vhĭS8PT:TNu ]ſAJKQ

Uh]bMnᐶ$&xpy9[WQ5TSCĨMgem+wcHO*f#PS""'ۂvDBQI2!׾rB+P]:aޅM.6 Wwf0).2QoVO<~T(MZ%%O5Nꀀ1ѻ|I5XIxHq!<1N񣝭Tڃj&4iyci4HMɹ@nRSXJcEG `#xH1qta͏Dhb7:I8~z4%5my#
-0.Y7A1@zcYnV
q'>cW8J(ģ`kC wF*c7n塇?:UeT	>퍺Ixvuou @0=k-Y X<@=jnxo['+&&    IENDB`                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/folder_link.png                                                         0000777 0000000 0000000 00000001421 12534142432 017743  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˭ORaꮋĹ
i8qaPӋ1BgJt*VkkVyf"']zs *gw~/y@ٿP_fVK{/98D8XИ,-y
,)MfmJC䋞ۘ|y|Q0*	9~XZ2!WB.A-gw<	,wɰŇUl}n7f;_udg%a)e`l`ӣ:Ɗ; ˸`8/?&@.% 5#%R4 Gt,#XeA&]v$CB{d<=էxꄹÁn=7 2DV̙{1u6+6)'<b "AsbnrrRQ*4p4c^t	7:~ܻJfXVz1VdЉVSŵ@dC]2Scbb>^.47kS`JD"PA}}xMMP(PWW'Bc5*%QTfq:nvmmmhooc5C{Kjkk#dju#4Gkaa    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/bullet_green.png                                                        0000777 0000000 0000000 00000000447 12534142432 020131  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%a 8첒W7[\]k`Df_УwI-6m6˫?g:/D`;[wztior'_|efp~*^g(e1]OQU"D9єH# "    IENDB`                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/text_subscript.png                                                      0000777 0000000 0000000 00000000646 12534142432 020545  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  8IDAT8c?%aP^^~@nn
 h Ps P󇔔@@b@@lllfٌ3Ξ?f , hxȔ
_ho@6C Ԝ t		o jTjа6 9 h@%zx!eޣd%$ka]0Ϲd@EW-0ɸ `|A/Ix<>YMad& c8\    IENDB`                                                                                          ./mvappsvr/docroot/db/icons/plugin_link.png                                                         0000777 0000000 0000000 00000001367 12534142432 017777  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥ORaݺ$bq8Бᘜ&KiZe֦-ӣB$׭9\ZyOWMx>>y}߷@DAQp[޵XeO|l9@ȸ/
k&wG1F[7𬸎&rD6p-3yM3Պ'lc@6m:Mk^ic<ˍ`";ۃ\Gc:tX<)g,V8-
$Nѵ⑷4MXFeހY*ʠS&:DF6a_j@hčZk%|
zRLzF}n4La5Cֺ]բ<(9ipb~PC<ߎ>vr;L&zd Lj} ˹܄Ai(4p8弼^C , zƈdRYK){F)\.U@Ei$	b1(	@cʀnн`V;T*T*TUUArXּ{YI-* A/p255u0==H$S'D#`0h4ٿ^tKjl>lRtF)JH*    IENDB`                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/application.png                                                         0000777 0000000 0000000 00000000720 12534142432 017757  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  bIDAT!nQ{!M`IXBb

HФIA۩$UtH9̝07(	~||&	`rǤ
'yx8yur=;w:.fIP4F*|yCz43ݯE8;MP1^<B	PB,ZRC*CwcaZL\L=Rf&Fv$Hh@$H
D@ݝ.a{Ih@$<İq;ƺ,HH$VBc5:P	MaZiԁ%A$=]"6Sla=bKzgr4n~]_~8[N]Te6NTpLllKh<_;    IENDB`                                                ./mvappsvr/docroot/db/icons/chart_curve_error.png                                                   0000777 0000000 0000000 00000001505 12534142432 021174  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%L=nEKtw9. ~><26:}8?|# V4G:~4>αn60<>zx|{Wro.{ؕW#,"d\׼_˦mnQ0,=4thҊV=7cˢ;#(: 6ෘҟ2mv}J|07!|={{{{z@~jnAyjcx?Syms/w__ZS!*?d;n.Ǐ[xݭ//ti;oqpvEo%n\:zyvV
n^sD56wM˙d?_-NC?,޶X];9тnn%:3Kuٔ=8{`}PʄN˨a@ֶFnǦ<<`ۿގzL6:ب6@;s26;z\{sw{xW?_ĒVca@9npCͺ߀6};Pm7o{+U-WL0 _-    IENDB`                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/lock_go.png                                                             0000777 0000000 0000000 00000001475 12534142432 017101  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mRKSaX9ZjI"IDPA$]qAH/wt覿@@o	,R"G~L;X9{{N{2|<eYZCCC>4{8A
PR񰻻;KlC~MӐdD.N@>TWWWC:FP!2]L&(K[ H$R:UUҷK]ĮĶ3Ń^T
Ŕm5J__EQhԮ@LNDN5Ķ/7T#<pZ:,n26B9lSY\7[S2Ӑy=鄸nAEWO &B3$G  O&ṔCc	5ę(f&In),F#4UpDPzs" BETpB	6_'0J.5ȳ&_~Kݢ)Bk4n?-f7+?硛ЩfuIaiTV$G@A`r0XjYF 0*|(x,ljCh=(R/q<6ஹ	A'$>v:	K*N=
A&)2Gz`{a_}3oa;U\{~)վ:    IENDB`                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/calculator.png                                                          0000777 0000000 0000000 00000001037 12534142432 017607  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥S=kP/QA~ͯѹ//::uAF\U(hnEMKIv܄w=$9D+}&N$)UU1F090>SR%wZc[VWL&󟒛Wh4zZAQ830\ëVٰA3
U 7@JiB˲4-z'tNZs ݟNn!|>^Gk]45HmaB/r950?J7DD"`~_p4A :)fv<ˉb&4|>l'a\Cx<M]סj+	V`Z 3X֞,@o?^4PzϥvrionoCAh1    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/clock_link.png                                                          0000777 0000000 0000000 00000001701 12534142432 017564  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  SIDAT8MmLSWo%۲oYAiI%FZFpNKZjي0-
"j|)-XB UJVZR9qnys{r9 \AI>Cz߯	9y+N{ڑ)d{,8y2F݄ϙ pM[(~k37}q%lf/q,xOC]C=0X'7Om=c/aYεY/$ڸmS)ϠlDsM8MlYlC9 _Dvx_)u|48eS7vmQu͇w$;WבL"ZX^ q5=f>VA/"]^
YUO_<c7,dމI/C(!5k'[G37LV5^uݣ4АhDC oаL#~P4rss?fN@yGچpZaBGbrzN͈D"5|#7|M.@QUχQ\\D^ZVE"JRBg͒r^IFg6fX,[SJZ
\.WNa	p .,,Dii#*(//gɁNiZһjZڊJ԰f3Zm|3&0ٹ"`YYYbRRR#)9yCT.
Cyyy_J    IENDB`                                                               ./mvappsvr/docroot/db/icons/status_busy.png                                                         0000777 0000000 0000000 00000001357 12534142432 020050  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅]HSa_"$@Ґ!dfEĮB"ALJad	AKdP-96fLlNqyvΆ{&,2i/<w{_ 96/l3ńF^70BᨿG؆'|$p"Yhb0
&0"<GYٖ1sd@Ƅ_eN}AZ$-m0̈64LvkqxeD|*>8"f {'j߶X:/ɵ3C[I}N7o+x1'"x1f6)lo9pq ;A&Y^LAwHP}lD{	) ӝoZ||5lQc[{kKt ~B\a	gELtW NUWzI	֊E!`	 a?cIרL_)YI>60K~J:8	n`V< ĔۍTFC #oÐ#[0V~	ՈU#\v^r&_i0BvH)mҞy!C:(ӻ5Cf=Fg|27䤍T[\Xq^d    IENDB`                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/note_edit.png                                                           0000777 0000000 0000000 00000001333 12534142432 017427  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  mIDAT8˥KQ83Zj2+(3
Z	BPPZ MA馕ʒТOFm=-4ʏVŹprs 2rOL"1>ш_|Eg> 0D]D
 0ub^62ĺ]D, !8bwx1X=ѳ`bb]bb?'[[M."{xa 3<ojsx?SUwXMZ?@>`hCrT[@Ơ.2C:UZnKP8`zHP;4Mt]0=iN8"'(|Ǌ؂"RVNIa軟hu.ݎM}z+>8n!F(sI>~Z>|(]ؕ{okAOvR\5gDR}l>׿ WKf(klHTģZ2O{_bg2hç}^chQs݅o=oRSZ/JqÚ5HukrX    IENDB`                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/shape_move_backwards.png                                                0000777 0000000 0000000 00000000546 12534142432 021631  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8œ1N@Ch54\ ʑ8
tq(%+4ob6d3XiRXS5q 0%a>$Arsﺮ*$i)$1J溮.Hh .$<@2HkA@4q)̢5`byr@۶K/~]++`!WVYE/S%@J ʀDT)B )8?mX
 &I,+=\    IENDB`                                                                                                                                                          ./mvappsvr/docroot/db/icons/world_go.png                                                            0000777 0000000 0000000 00000001660 12534142432 017274  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  BIDATO[u iO)-P(C0&LH.ꃉ2cLf{0&&F{1{:87wŅmѴch  >-	Zs_}  `j~7_Ϝ&B-T,<%!U7~0LO?}#'3/Q8,Wt%Ŗs7'օ >=26HQx>!|Du vr=:ޏ (e-jԔ`ώPtTlnRV	&
,Ƀ\^{#_L2!|>Ze[Ol{G8,yU,I5g|?l2cX&z(mۮOi*M3,p4"H6px7@d۱;qJx;E^siWgR		E\ZשVLOr/>ֲj6'4=5!aJn7hUKݜ EOj]HʦtW8oΟA(Z!D,ѿ='><W|Yi6($pԊ\!˿%V
+dx&<{o_=?:řY^L7(la#X;XN-4湶rò\b&x\ޝsj#ymp9rˁd/Ý';7ǕY',{fkW~9*<q^xrݑMd
>d§O:ե޻pfiZ  0rf)R~%U ('"PS2}V 8ݸ;Y}    IENDB`                                                                                ./mvappsvr/docroot/db/icons/email_error.png                                                         0000777 0000000 0000000 00000001430 12534142432 017753  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SMOSA=ǣ}VhjD	A%hX?W\W.$@%1&Zԅ"HK-}8EܙΙsϙKc%J[Bl@9!
o(ggybFm(+=>`w)5+z
MJ5d
:J"SnPmR+*a٢kXj:,T5b^M籱eGd"SŲ9Z}hj6(;le:Wh\t@[?j!l'TU&/G[m#(-C	O~ߨ6VMc&X <PE6`WYY躉\v'A9Dj+ 3D/AXNd"V89E2K=3H=JULA]yí48 eBqu,걸Zn%XՖbX\h@._R˿Kݤ5~ҥx<K$Wuy(>;L܎)P=ݳgfk3kf])ޯ駳|73{FOe/'bfj?Q>ܷ/~ׄsxtGvfYSO\    IENDB`                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/control_start_blue.png                                                  0000777 0000000 0000000 00000001320 12534142432 021355  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  bIDAT8˥KoQ|Xt3bESWNqјBf(MkHMH[4:P@[Pp\&dqqݰNAQ@q5M'	%ba}af```IJ:W=ZC|C_NS;z4sr\څQS%{~(,; ec9_iAF8lGkCÞ2X6.8=l	=r3@z`|O3Z!` &u@ RF.
,gыqTa$0M}+V|)*
skup ͨ[O}`N ҂2+G 㗃[[PS:PĐT- 9yhsԂK1|z= ;t?#
½DnvŀQU2!^$`x|B	RZvˋU=?EEO~YI`!bxNWps4~!jս)		ˊG`^g-᫬iyn[ai]\033{Lߏ/?	-    IENDB`                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/photo_delete.png                                                        0000777 0000000 0000000 00000001277 12534142432 020137  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  QIDAT8˥KHa7tQHAD.BҮMB qQUk&4XJP1JK9-)Bͷxy33/njNŉ$ۚQ0B`fNQT#F<Ė6GJ 01	Č`m2%E>;QB P.C;dqD''aMb7)c^&;
N 9͞(IDU<A^pa8sZ=OV.@UuLs|I^_l2C2jzXԢ.LZf'Jk/Vƨ쥥LQkGt'㷈.CT$Qj
PSJ,@	LMaң|};Huz߉bDK|I xd`v}Ll/+gwc#sE̣6BrP&&R6:(A|lol>{>?E9Rj"L 6-~hE2m;Ka%l3Nh)mo    IENDB`                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/exclamation.png                                                         0000777 0000000 0000000 00000001275 12534142432 017766  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  OIDAT8˥Ka	SAoc6.PDCDբ@Zxh1N"CN:vf}󶰾6uvyy1=!4ИvCv$	HS8d*P.M`+Sذnv~cHVr}ފO KW55Bb`l `yj`yk1AjE@EoqS2F E 6 4(l=$6#1![? @Dw$-WfW&D$Fn> SRJu  ZNWc#di@%b_sRۆ^t&:?!DmSQeJWeJÈqMT
'DB:RE_as3ȯC2Vz9W[9ŢwU *B4!B|zPJfVcdEmZVw!Opřzp!MuS>x9f0Uއx8GHv=}uʡGBy=-KaJ8K+${? `vLЉ37ӿѯLj    IENDB`                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/tab_edit.png                                                            0000777 0000000 0000000 00000001104 12534142432 017224  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8͓KSq/t]^DtE	7BJJvc2[D!&6z!V ًEu8ǽۘ7O͜Nǳc&eAEߏ<X?,8:Gŉ=`ee)|qvJ{p5g< HiqM|ė6}Kei$0IlEwl%0p<u-x<B$ӉWc9x.6߂jb5l#qҷ&n
"(ln7X/5܌l:z-"V'H&c|^dYfr*FٓV>NbT2f3;J P7smL\#4o"?IvF#rڶeAxe./VD@m%PLDQ0'dqdڪ)7))Q1r~5ppݲoku`S[9]    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/page_attach.png                                                         0000777 0000000 0000000 00000001432 12534142432 017715  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATKe 7{'PeDIFa&F	QDjEt127!#($oٽ02-%ǙΉt{O=TLB@Yu;{:?<w˪qL+7ӓF	:_.G.۷eEh4q`LM J?K&^7ͭsZ)YY{~"b(3(ASh@5cxЪ3̾7H
JP"%BPpfMmkd6j?)mivjhK-dhH)%MaRCTZHTDB"ECT	P;2d&(5M̜n{
Ԛ2$3H SǏڻs{M]aBOR$ɯ?7͛1=y`K5sA_vݬEvM_uk<jGߺnv]3cx+ߏjV?M8
'#X;+O.՚}FNwm⯟=l[Vwykȶ&6W<s,Ο;=v׷ɽs"O7"nN9 l4s^;w[侱ZI?	N    IENDB`                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/drive_network.png                                                       0000777 0000000 0000000 00000001111 12534142432 020331  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uRQXQ)$O`qA<C`'V#HWP6&"(\%U,uss,wÙ93̜9#\%`:ǩ^W'rz^O $?bqXL"a4h^ךPǥڱ,-E"'Bl6L&T*rl롘L&x|\(h߫X.B4MU7MZV5]NFpu'8oG*4:vd۶Gp ([ud2ʏUTfU&	PK 2\Uu|>OIC>|)6|˩g	`sG bT8RU*/`s0~.{nnl$o)N)}_FgYe˭u]  -b5KcAajX,bͯ;1/	[|ud>!hǯcPNV2d{    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/monitor_lightning.png                                                   0000777 0000000 0000000 00000001400 12534142432 021202  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˝SKQSj~m>=XXII=DKPCE BCjBFCP 꺸Fl܏̮Z/8gfߙ{9i@3`Rj0#ȘX0Iˊx66Yэ{{V躾C`pDGql2*z!FW#]es#J	ԯ[iUrpX^B9! Ita)
F^QX|NlTQ9W˝OtKȕ,8K9/tmENamyc6&N$>Ӳ8?`y6MpTAX2JUt8ac:TA*2
-EBWK.zՎnAPCG4</`6:_lv[FwafeE9bpv$ :uyY2-Hۓ844tMOka_^,ɊK{ErEѷj~TNOIϞj"ￛ;PYHc3-֤zIC!s	(E-05)ۻ';ہHvvנ%,`&D"zORk>oZ-mmɟP9m    IENDB`                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/key.png                                                                 0000777 0000000 0000000 00000001144 12534142432 016245  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKOQMYpKBрW bRhH"4%RR.Zi;s
m'y73yrΔ (ɗéNEw$aՇT9:$Ih^U8?A80?OZ~ԁlN2#71ɭ2Y$#@{ve+﯄,Mx 4ߡ;/ @buP=|FҲb3{!˭8\OǤ3}W9Mp*-LvԆ=h=8GFyGڞb¼P޴TxJT2A렇9sOnDZk)W9JZB"c@ kw6m~RA\vev[lWएп;
bb#YX3Ԑ~~!yC,AuBvNq,fX}ۦxQ3/׼*ݨD̆k    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/email_open.png                                                          0000777 0000000 0000000 00000001417 12534142432 017570  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍOA_"7Əx5\4H$ň""BP$e=H	!%o# !ZAieiݶϙLf}w&/;0'#0nީg0|a-t&"H,(tϜ*x;}
vK
g)Ȉd3?D]U^..b^e	({olxضDv:aTux&vI&A%y#1vuS2:Te_;IT7dvV!5p*+FlZV	QIes8&÷'acg(n^Ǝ9+tETI""h`5̡y,!PM6&X	跉hw	S4j6:'gґV<8tt|^P<hsb#cҕe
2zXïb>&=uSW%\6YIX,;!
zI!A+[:nHώ9
<M؊uTIi) ؗP{)# ieIES9DeݶM-laDΝLnŸW9WYKVJʹvnZF^ȍէ_y=~O`е%    IENDB`                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/text_italic.png                                                         0000777 0000000 0000000 00000000337 12534142432 017771  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   qIDAT(cπ2P[AvCꇄ4!A&Ǌ	AQm N^m>F(x`_+ 3qI$78.0! `;c    IENDB`                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/status_online.png                                                       0000777 0000000 0000000 00000001322 12534142432 020342  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  dIDAT8˅RKa~f̎ӺiamъP%Cv$PAA جClFDTZ6iŶ3|_tGf}~JB4kϧёxTM[cr.3x~co`;p!>MQ&fF	삛U?*6iqD{7֝:0XDI+l0GqhUpd3*. jya+6B-PRCVVf^v$d?OߝZ喃paUf1LdŮ蔒<2`c4d"-<ʮ^>xuKzvpt4I\>ٖl([)rrcb_%\|col-uXj7EǠՍI XDt.v"yg]-a~mR)o!$|]2ު h)K>W*uUǍocFqkYQwyv`YL(o	Ά2#p&4wqD\2żsA75I,	CćeT
5t&?>:xgmԃItD2t
n>x7wz;p_ǹXa\M/ZrYlW4.<    IENDB`                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/picture_key.png                                                         0000777 0000000 0000000 00000001432 12534142432 020000  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}kTg֩Ƙ`ɢ*B7]UɪP
nqBqt[)*'$%1d<s.]c_x/x޻8ƈ	Sśf׆ܱ/>@+}6,1Uε_VAHX!*uyu5,.G?jž_Beq\3C_,z@i{JLV7P;0fmU #HWciN2P6&4=r5 VR<%3
m cF:kX
Oc]dJq@_b0D~w-I 8 nL7BV	̓eJNuŻ OXx/^UiyM6ljk}w^PYA6zz1@uAq[tsc~J-*Z0zX K4(PC^qNq&/SWuUGEtT<Y1KbW*xeyDc]{APzda)2Msm'ˇ_?UezὡOl4R1>ٻO?uɵl\cqɷ};mxebb7g^]O70/`/    IENDB`                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/text_smallcaps.png                                                      0000777 0000000 0000000 00000000404 12534142432 020476  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(cπ2IAr-3]puPP!!8PV7;D*`Ah
MSA0 M[?+\AbS`8;A D[    IENDB`                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/picture_link.png                                                        0000777 0000000 0000000 00000001503 12534142432 020144  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}Mh\ewL8S!?:h'H	DBIYh7]B]*b\v%ݹ]AZP[d4u;ߏ 9=⳯~Y2Fю)ۯ /!:rovd<=q&)gO a_8NG@4m%Bz#$sJq">-"!V
eC<#R,' !.6bF:k{[u X\"F$^LH"#X!8F$K;xBhf# Ȏ q3OSLbM25ָ<Gژ≃;Σk$}\6R ##NIvO]镕Z O_B+_@ÐQ~9Gq=*t-J^WVs%~Jp4\.SYxFj쬬T*-L
/h=?эLNN2334qKgBl6ɤ_|yދ?7U2ѮxRJ...N?}{[j111qbllRdG&kkkxB' (b1y^p\FQkVgBI`    IENDB`                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/text_strikethrough.png                                                  0000777 0000000 0000000 00000000415 12534142432 021423  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(cπ2PSA`򄙑*{U#cQ?fBK!3}3ػ`"rwmϘ*(/-mK Am}+albw1ئׇ"CI;3i4 [:?9w    IENDB`                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/drive_rename.png                                                        0000777 0000000 0000000 00000000756 12534142432 020125  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8SjQ=7E?*MKV'B,X,DPf^֐@"s̜y\.GSBc2|N88ZnG;U[pH1Cp8q0ϫi[%Nc\"jb@2DP`іh$3V]BR
`P'	qضtZz*^Ť
fYnp^vbyB^tFрeY7̈́%T<ۧЅS&)YZ+.
?bIS,,tl<QୱT*lV?	s^}W$n"[tw/+    IENDB`                  ./mvappsvr/docroot/db/icons/award_star_bronze_1.png                                                 0000777 0000000 0000000 00000001335 12534142432 021405  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  oIDAT8˅MHTQ7yc3Id1"iIҢUDQ[W*hӢVDJʲpQ-
ͤKǙ4CXgs=rνP}5 55AϟXaARXD~!T"TZmb~>R]#C6?Ikd~jY@>nE޽%KؘCV~k]BPFȎ# 6}"h8Qoz{/ˡ֎a*U" r79g-&[Me`e'L.UDx*cf&P3?14@Vx	6
SoGC:_UljS&BfK$4iʍMLs:;=`<ė)2biWhvQ v\Zt ؑ"ߺ"TV6rEm͋w!>%1Oz||5=Zu`q6{utm7od+WcC<R"(oO<IK|S+hv,D~wYP02    IENDB`                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/keyboard_add.png                                                        0000777 0000000 0000000 00000001253 12534142432 020066  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  =IDAT8˥S_HSQȇfBfYjeQi&^4
z"2"k!A{JefO+.6H.՜;w5!_9~Ha`=f:	5M rB!/\.F"ʲVwGdsd2E&k)Al@ufBt0MJibLVK~D鲢։/tM1<X[0*%mF(B{KIt3D ygU H<k*(R27ZX)tP'](:zPP94CIGHpi|ylCz<K`LD^*2ЈFPa5NaŤVx2ƹ+F7pgA8Ћw3ƳaXU8>O`[f9%)Iq)x^~Ud[ށdz*{TVl$i5uqӹ}#h@S̥nK}$Ot`'78yO هn    IENDB`                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/bin.png                                                                 0000777 0000000 0000000 00000000734 12534142432 016231  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  nIDATKTq  {^ʝE5TDd DmFmT[4;Zh	 $N8=}w޷'  ֞Lt^U[ٻ7׫(-ō7~( ?>}}îO #2v5m]|q>VoPUJ8+U*a:ԳjáD0"s*ūӎXm\27iT-ʑ/ڵk_iS2HSd2=BtsY/]=JR@:[574+WH>/PUfsh;T<ܝm*Vb=y))$,>_v ȅ^    IENDB`                                    ./mvappsvr/docroot/db/icons/package_go.png                                                          0000777 0000000 0000000 00000001602 12534142432 017534  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mKh\u;g4$M$MKդԦT!E¢"݈@
.D('I LLcgIژy޹?]hms,UeL7"hTEފ}_@bh"'7eF*xhfMH@U_R}ZC1;I TC.9?OU䬊|3x CP`ˮcA9naj7S--43Ɯwb'kvW6m{ˬ.`"n)KȪڹj&XLNQ^IW#/8trc'T^ϒ_žO	DA)XmS ӿ?Wb!T6VO},B27ʷ)r5R`	m'b&b@XSޙj@0*Opσ^qZyV?b{.MqNͦ8j~5P5 .Hʛ߃8xc;`xy~oGW/ "xT F#Aɬ. EC|$a0Cm& ̀ss0*ኇ'.qWl:H-sO9\X_#o0!۳GNZofc]L/\~Ã)OYENGlϡq7v1y
&ϔ=ig\o9"o}K'Cc)Gx,3ΚogT]D*vK#5M1ܐz{<k    IENDB`                                                                                                                              ./mvappsvr/docroot/db/icons/table_row_delete.png                                                    0000777 0000000 0000000 00000001165 12534142432 020760  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥KQ?AYRF-$(3?*0E?p"QM۠!\"Eh(J"Cftf3޽:{s;}bz@U"jx5KoǞ+B5ڼXv؁~WSWwgzpN ,kxcC왜y)i  $6p.
k
 @l]l`|֖Rw1WށE+``,AEEx G	0cKGk( g,-XCެx=6[VONYU33̌auM<@< 4ZDH*3GQq5nwو t~Yk"rylD`,Eqt4]TVNXU{ˬQp	{*w<ͱsSݾ)[X/ffnrc|#MEB'qv,D4ml8+Iy^}Q2>n*ns^p^8Qu͔\͎?%c܏m    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/bullet_toggle_plus.png                                                  0000777 0000000 0000000 00000000321 12534142432 021344  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   cIDAT(cπ2Q+/ދEp,
 %ćO`PoǦ`1	BrC6uo_?$
 }J Ʀg    IENDB`                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/cut_red.png                                                             0000777 0000000 0000000 00000001212 12534142432 017076  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?.=йnBI03vEf3Db'r"'Lb# U^.8Y &6Mǻain^S)S6,9:yVh__sSb}>wՇ)&e@pƖsWHZЭ7^kZYMt lM<xWDB72o}?w~,\Mz.3se;3g>sk HNSl3t=7? jIS'24`3n'qXMdayVgHg4఍ћzAR3/8/]|5ԿB~7/VZ;iot꡻^hdrѧ6.҂'	q(`5`$q[灊Vko jآVN2Sڙc}lj]܌ lܽnrcпe}N`Lɠ +?Tr    IENDB`                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/magnifier.png                                                           0000777 0000000 0000000 00000001147 12534142432 017421  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥kaǿ$F?P*BEpԭ 8TwݺM;TE!"AVD1
&oysV$yg>jص֖9bC cxfz<m	AƮe(®|W BC|+> ̶3aBhw#2IdST ".N:0ZcݓTOtE<AkEQ
X~W !2:Yc 4 ?G-[.H'=~Hűi씗>|CC>)qWDk6'w. zkJpQ0toIO^>o?u(gOĵM?2gV\g6W'ghz"Qh}+FDjދ%7.mI  s33\r(~ J72ˡ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/map_add.png                                                             0000777 0000000 0000000 00000001504 12534142432 017042  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATˋUu  ws;;hR!u$HmrY6_u(	-ڴ(PLJ R45I<3>}3R    qc1'( B!V?EPbX(><zd..Jr%ZUݼyKZJf( IV$G֙4M%vSkԠ	a u}kߟTޜ6amVR$.H[!tD@$4mo&:9PYj53nKu[B(@0>>C71^+/oP(WRR)kzX%@ӕ-j9Y:_;ivt԰	 `ttBA-F?8/ΟqMgmSȒ^R8 I&MȽ~d3Nܴp0x3WKmv;*b!O<auurW659Ѿ`道kyj}߿"(/wuVt:iI]n<z`](kë{,ZRW2j|bKيrzc{Ⱦ㞞٩0J>jmZcƅ;{vJ+=w^"\6MA A؊WǉWNٳ%'~b$_єYC]73Z#  x8oCXìhq M
W    IENDB`                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/building_key.png                                                        0000777 0000000 0000000 00000001301 12534142432 020115  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  SIDAT8ˍMHAj~$!X
aMv$(tKtH3,Hu5@ꪸ3t7p`a<3 "/46Jۛ֔qKD`0(ZkRlJ)0###~hiixwjx@  NXDhnnFDJ 	PJ1u2-1hkp]$"!oo\>FlU49kp<kO<I	 ԗ.ʮ"3k˷YhA|]$qDOhd5E9C i95y[$`U "<NnM}#%tl26Mh;mH\Coo/mcYG),bQsa3I ƘJ;Cp'rp!e+Mc$Y;L=mNnx:FnZp AR9?sK/3>h}l t2]146@mI+X:Û/g򼢚{>z[Q|*EC 	8g"RV#>Ѳ3l߻gŖzSw5    IENDB`                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/printer_add.png                                                         0000777 0000000 0000000 00000001416 12534142432 017752  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKQw	EU]xEdjv1ǅi$b36VܲD7Ammږb,$N$r89+  l&ztH;j&W};k)TrW$odM!aZ|D]B+asRf"YYIٮ*+f`KSi8?rlO2xZ]T79mܯi`ıNF;$IQ4K	qXX#rGDcl>AҨt..T@zqǍy	9'I
%Fgnp8 Q^^^|d!BT|Duu/,x?q\خommT*8L&a*' ?wD`nW!`b0
`x``8ǻ6jz0mmmlN@  RDSA]}9`6)zM(
---4Z1Fs(iL&F*_|7r =JhsEBm"TW[[FF"au7z
XkAgm7_~_\Q/0zO
4P&!ތc 'nc|    IENDB`                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/rss_valid.png                                                           0000777 0000000 0000000 00000001224 12534142432 017442  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  &IDAT8˝Ma{%+FIWbg3>J>4J, vXHfJE)\Ӱqe;1Ss'Gݗ<wߒ7us{,EYDE,}3M/Tk_;2eYoeZG*"zkNGP sP7,SLw<mm|ﴩS=gY?9|dR,GN JJK&Ca  V#)/fKcn8R}pD UPp(M "Y}s`Nu;r%@H+F(~_?Gu YxYC!W6(vʍUkvs|LaU$J=}Bo8=+XK*!
*H~VT0#3})2 Bbe
inP0Ho$$ h 
ѣwn-Ma-    IENDB`                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/medal_silver_add.png                                                    0000777 0000000 0000000 00000001327 12534142432 020736  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  iIDAT8}ROQvm"V$=(@&=xԃKjH<411+8hU,`h0#	Hk-my/],{;Vp̬NN1M80`7}(7|J@AkRh{7Il]ɜfv C@*Fo/,FB`ު!jA^_vjHBFWJEr$Xwh-l6\=U<R@`I+++CiNBk'`E^#l>H$>ҀFMvuuEdYi[CUU~"4Mrg&Sٝ%V	VfVOOX,yZ4p9|/~UhJE-?yxA&z7^ZϢ$~HvL~:<px!U3;;1K0K00|"K̳nV_h$\=y7s>B|Mχ@ KA 7JoSǱz&''100hT$I\uߏtE_%>,AOwwfTjIqB'L_FZuB|F//jGx    IENDB`                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/calendar_view_week.png                                                  0000777 0000000 0000000 00000000740 12534142432 021274  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  rIDAT8˥=kTa.XH@lmEk[FRD6j#D{g{ov +mgά06xnͥNJ)Q%J&K^T6o]81}ѵ|0}vlDtﶁh	D`qPv!D 5Az
|D*! = }9Ͻm3g|ᛷMf%:06
FC˪ɢ9 JXKB)Ud9 4 M 2n1uQ6^͈*Jͧ_82>Gյp1{2Z/$ә4,"J%@ +=9|5    IENDB`                                ./mvappsvr/docroot/db/icons/paintcan.png                                                            0000777 0000000 0000000 00000001303 12534142432 017247  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  UIDAT8˕Kaw n"eU	·$kULBl%C؆aһC[Ţ!S]"-ŗ~~ V{3[<3e>&?C7-@;	)Nt-mJΈ"mExvS[ w )\àʏGl	nK/D"vLv2XԯE>ae:F^Ǩ?3r7Fea+s+Yz]bEsLbJR%؜q1;<\f$9F
,3FzOn8NȔKO<U&]WY-򛭭-TUbggɄаT*D" h (M	ܚ F:jd2H&T*D"o(t6h4BC>gb1ȤP(dތ%:ZVxP,AE7jґI@p'? T*:}DB|'\.WbOj hkPbj    IENDB`                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/report_link.png                                                         0000777 0000000 0000000 00000001362 12534142432 020007  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍOha=uۥSǢiEԜ6:1tNAm\͖c7l5fK6:(.!D;}Ka/<}~e`EQ^pf
X,3"i߷CIB!Ч|q*JKJb3|GGGǀV?6th@)
jRl!}hڵTLE4:6XDZ!K4\LIcq3sU__KqI=uiTMA\sڽ: h<
	9<;irfEsb0!Apvkfػ=(O@C6W?NdNna;^/f3N'F#b5˅;M̗hyV+R$ ,8B!f/,BEdgSSS
H$ljt-)DTNb= 20χH$`0.K_#0j̴rt:p hȚR4OT*եpa?*VVV`ۡP(kRst|>E~go\~YϨeLV5fX^9s]"5rg˺f    IENDB`                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/table_gear.png                                                          0000777 0000000 0000000 00000001312 12534142432 017537  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  \IDAT8˥OaƟo}k>[A\9qp<RxU=L(SДdh۵uν Dё~sxk:TT
*&eݻs`x~E610ǖ/6ޫO_tϸzIҒô841*0r<YB?}xx@jNfL$j<[ 4\B+qԩ`};3G[yzp8hu|9f˰qU*V)cB W7aiZC s[8dvB-|>`0\.5x<d2(
d˔^A
~(W8t:
T
RIֈP2pξ*R9ju(p\_m!ۍB ^gBfYBTOct9ҌFdmv:D"DzpoZESNPua4	[k4LF b%1bJ2n>Mg$JW1HdEJki<ynD"_(Y8F*S    IENDB`                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/html.png                                                                0000777 0000000 0000000 00000001102 12534142432 016413  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8œ;kTasrvϪ((HR""Vb+"[Q `%X؈ `g}sڥpa`޹Ljh{.{;;"NVE)+YTN`}u@=0z@4wDQG)<:- =Q̙bd:Y"AV4ߐ:#|f,ƕ].,qzaSq
a틇gcOBUuڦ"jFU9<ԑKCkNjz#tYi7/]V"q6a}u zqƽ1)Fz\T/PԙN ]oXo?Nx5!T3gˆ{?v^xrg'rP].-gɲT]5{|e%ca4GTB@BF<u0NBɻoOJHى8Xor?#-A    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/medal_bronze_add.png                                                    0000777 0000000 0000000 00000001353 12534142432 020730  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  }IDAT8}SKHTQx<|j'sQD"hBjfh2hѦMK!)Q .2yuΝ|`~s;{zA29lByW^lM@׳O}#, 4D:jc(DuAZ[!lGQ;$379n!v"	I]	BT酛yH]Al"K	|RvGU0wM*%!%(}V8Ku9%ԇpm
ln:Q&Jzh~PSZP,@ȸed	{b0F>QS:je_>vd,DnH㣓BS'?wѪ&KWYB-oU(4u8:ςnZ2N9T:X+0I%η_oyGt-*pĐi$6BfT)@9L-Obh? zݏ߳tp`p:}*Bm#f'V>010>"9Kt	%AE$`RSmU*
*F.'^븮`    IENDB`                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/page_find.png                                                           0000777 0000000 0000000 00000001557 12534142432 017401  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATKhU;g&d&MhK&hZ Huݍ.U ^6"(؂!B"bjBm$3d&M:̜s>GTW?VK&y  p!mo~r`@Tß_C *Rduuzp; 0V'"cfkD@@x8Ԛ{yшˡܪowFw_w./,7_t?=Sϋ)fʊE~jήO::5I`.;þX<JMzʞ6=IO}NO[-Ws$?GlY!a7ׄˋ7$cDƙgת(߹K&ήݴ"bkH&,%Q<v=/#CTVt%(7s[!6B֒P=2n-X2a
y^<r"
 s.';;jR17QX@D!2T)b~zF>;\fY])V.T

(xg8`O­U|v	* `hwLs; 
k'M}9CP
^ ((
08w \OE 5	BIp> Yt@#  tD BK,b+[ޅ* Ϝk"򤢭  ((( ( 4L    IENDB`                                                                                                                                                 ./mvappsvr/docroot/db/icons/photos.png                                                              0000777 0000000 0000000 00000001207 12534142432 016771  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥KTQ{Ii@	AXfIUD]˶&.ZVAJ*!PDPDPԛN9wZL3eiÅ9c-ǻsyUE!:D&Wtw X`ToI@}c_^5A ⌉<pU棘%.Ӈ@ZLI}uC*^5qw
rŪ5	S]mC,yk*3E$+E׻g:ˤ	֑mc
Ɛ:5yhSGxD6Y%gCT ؔkl``xs;|b{l	7~եwXQ2u XV+:*6R٣w-d'_h6j(I#ba<ֿ@[1ko~HyAFǎtQ#ϑ$imFp̃ܲ+h:Һo#{ó	^$R
@#Dӡ壪|qs|_<K    IENDB`                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/computer_go.png                                                         0000777 0000000 0000000 00000001411 12534142432 017775  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}SKSa~1ɹYFk`хBѲ%	.Š˺6/)/*"$]XfJY6w~~M0o{<!=˲Lȃ40WE066VA>w:8	08'wnLGwG8D$`Вɤn2y(}:S2D䠽S18
ciiYFRH=D^FoR2j_)Pl++q頌8xVQ?B!SL |Yjz'.ky|c=K1T`ڣ
\]zN<e"71cy
ISd_a:T}B0bһ5UMXe3+@-y2?zscG(<X3q14y/lVG!~MRc&VUnƚhT[A!x<9;˶&-~, P^K?Mw
:t56ލS`t+Og'꞉X,VI-[hiiCClCsDDkj1Z3z'm\&Hn`ACq#/&Xwм#r    IENDB`                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/film_edit.png                                                           0000777 0000000 0000000 00000001527 12534142432 017416  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ukHSagۙ9]J(]ʔ.],+)10؅."/ǢFi.f7GnV:k7u9YI~}r"H*᪬4cS\\AE$Iƌk*Ry6G 
T$!tBUĀI2X8t@V$|KTa\	
ADg5$L ċ,W^"lͽ]^+; Qn6pRjrcdhRt\6%+Vx.4?:4d4Ci qrNMư'?w!:x|j5H ۙY2P`eF0cl~ܽ	C|<h~tJJA=dF֛01X×OCg(8JAU&B6qp4{`d^O/D{8^@=5'?)WGK/Bh

^m
z{@'h
Erbvy-`CPeLSŧ;HsHH[oHߑI\2AFȽ _[B%]~oߔH<i:7i>z5G%-费Ws32"x<o긞C{<Y0=v~,O%k.2Vd :w&    IENDB`                                                                                                                                                                         ./mvappsvr/docroot/db/icons/contrast_increase.png                                                   0000777 0000000 0000000 00000001315 12534142432 021163  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  _IDAT8˥SMRQ>?2Le:-F0&\BՈ$Hh@@ڹi6- Ԧ4b'1yGMqw~{e18L&8Exgr2\?	B?2ok4]ө3T*dFDdDf`0`Ǳp6kZxb^D$k]rz  LS@ 4MrPVaX<z.q8*
P|>M4DQt`06EL&>W
f"LR	z=pH
F'`RsxxKl	l2:9J}0AOߠQR@F  )`iHzj(Tw`Yy3|ؗqPJ-+bμl.[s`]Fno\S71;AVP,R-
*Ξ1mLS8ߎ'WoYO
RV]?UOp46?~>π{t0uGn~9{ݣӿ掋dt9;	~Yh,-    IENDB`                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/html_valid.png                                                          0000777 0000000 0000000 00000001300 12534142432 017572  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  RIDAT8˝kAǿIT$XAE*bAh`AEo^<{AX(*`z$c*jdIK.ovf>}ߛZ'.*'9|uRԹcqO*%{TϤcJ;;2Kڦ
OU˕,J>$n>50AjҪTCRus="aeQhՉln4F;7ĴIjZ-W8.rb #VCX%0}˯]BoA-<u0~	c1_ӷ>L|ACDh#峂!3_Q<*9l]Σx4h=^9އl 6)k!& A#H${7oH)}\
P	pmA,L"D1aъFNŽu\^A&Cqnq=;RBWń
ժKP?Z;ԟEdWI*2CA	<iZ@!\ͩkb6(MN^>%迩W!;_7@    IENDB`                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/television.png                                                          0000777 0000000 0000000 00000001270 12534142432 017636  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  JIDAT8uMHTQfiXA_ZSmܹZZDHBE.BJV-#lOd0"!"'}Lօ=p{bfݝH<LJZ8>қҵͧϵ綶lcX$fP'yNI.^y#W(ˋg;2oE 5;OS˘5,/.\9+J察g;>L ǩ9saLw
ۥҷ/ӻz13 23%xY__W3PU
.0^$/{×4QR0X0 455I!pƏc5 @%hLBQ!ˑy"$
9VcHc]X&HDQDݝSb
"F xx'PUV{)P^'5C)6W<0b'up5-vXAPL*gleee%pΑNY)zzz$Zbf[kk+f=lL&#Ij{@^տ*88    IENDB`                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/user_green.png                                                          0000777 0000000 0000000 00000001322 12534142432 017611  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  dIDAT8˥[Ha(nҍmJZQQDIV:ME,\gtӜRç[njiI&۬p6IômڜIz ==d']¼¼ݜ1GjN"Pm>g|MC[YD5zL&I03p
Vf"VЖ͘z^l}P/on7vYaڠKAFjxGHW.܋E]|0'O߮ݼ MIoQ1肴4N1,uS-.܎|
ABNkcwzmhx'D1Ox3ǳ2w!D؜X%H+,Nj:a)xsPg(_@~wCQ1I?	r.+]St{ϡPwuE"tUG	7?\WW}V-C*	ƐU W\FI$O8_y6}.hSJ1'.ݤҪK.	S~"xj'D',t)C., %)
 p_k<Ҫ2    IENDB`                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/server_connect.png                                                      0000777 0000000 0000000 00000001363 12534142432 020477  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SKQvgv]ӝ]u5QD"B	
"襗^}굷 Z$`Sv1|qٝ{gL^D܁s;;7>Spu<Gy(">
P(yi"/AfDBLp|~T':|ۀ`<q BL&#eŋyd<x#SCutww23ﱋS0VRM9;űh a``PJ/s<28`ҕ_
8'ZւO˛HTdP޾}_7Ӧmq;ca@	xP~5t ^!)R
&wG)	$@դp j)Z&KχNcC{X-mJ-R@9m[|2M~jQ'i;FRQG ?Gs{2
0@)5_&Mia\]k+%iE&vFܥPˆUmCbH5`}cvVՆ]%h\G2W%%RUs6F?7P,SuMK.#gʽ/g}I]{4̫-kEo?sQ'Q)    IENDB`                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/dvd_error.png                                                           0000777 0000000 0000000 00000001526 12534142432 017447  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅KSQQa/h)"FE#24B17(%TT,unnt$܋Ӎ9[)х}sZ+˅SSSÁAD"_=^GdXD6"B=ݯ"~PО<iZNFH|>$I
4e|z ;m{ffN$`[,AV6둊D/_V_$Naa%0`ƓI]EQ\Ekkk`b2Xn@G@'oơT*Q^^.dggJ@  ͆%V`6RBLr`6.C7 [+Ra۱
.c1&k4H@-Џ܅V;yFKnm0م*hCl~8;EkDAMvE99D<ˇ4Z3!50;
nsK/>Ӏsm9:M`6Sy/I 
<A+BobIZ ٸj-";r \I6O5@M\1;{dKJ8˶{
idexzW=y|V3yxK9gUUeE5'%oN˚ΤeS)ً,Zx"F j1j(5]wD lr    IENDB`                                                                                                                                                                          ./mvappsvr/docroot/db/icons/bullet_wrench.png                                                       0000777 0000000 0000000 00000000700 12534142432 020307  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  RIDAT8Kp pПөC(!?Ȉ(@$&A`ioCe&4"B^]?{. 5s@4]YGXL
4mAQN!$edY^,@š F$9;Fn4Qm8~+
B$͉xYVAAR!R	,vl2Q(¶mr9躎x<a:~37~ʖ%8N!,n4(j~ltM4G 3<1j؇y5@	Vi`b`n:H-cyj{c_j;́oO=5    IENDB`                                                                ./mvappsvr/docroot/db/icons/server_compressed.png                                                   0000777 0000000 0000000 00000001321 12534142432 021204  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  cIDAT8˥SkA}M!)M%Pso^,
{C!"
^`bH"
jI 0|3}o	!?qxSV<*庮Oz=FGx<C 6R89GzvjH$f"6 @ "D8hty5Nm}-uiኲ1@zB,ߙs?2*̜@^).(¦%&iﴦ-PD`>{hNbk"aŮ}jx+>^Ln-I֬.ןwuIjH$Ap&`NQՕd+7d8Q'-uM).46&eT9]ו`_c<bޭI s鎯&HJNh4q3L C -:bN z茏		(L/JWiT*;A,6zoB4z{/7_bӧgnleW~d_cPX $k]X}.E(+{_+D:(_`yhsβnܤYH    IENDB`                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/text_list_numbers.png                                                   0000777 0000000 0000000 00000000545 12534142432 021233  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%Ld L0C`l _RR򿠠vv			###EIwUqgy?b=]{OwKuGss游숈;;;obb_WWj q5P /{tŋfKH3FFFUTT/$$?;;fff@ia+tD մm/-    IENDB`                                                                                                                                                           ./mvappsvr/docroot/db/icons/report_key.png                                                          0000777 0000000 0000000 00000001370 12534142432 017641  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKSqwPIWmEySb/HFBHSs/Md,(@ȲLJ85u͵tNDdg;gs<\y?~G@p8rƟ0pD3 >nق1#
^VJLe$B@ @4MFa(lIi%&0ܒ Tu.@ݱ{vTPBSB	"]E;Gq#h*`_/v_^WKN0gA1@D
oi.+#w'1R뇅*h| эl|ƚIwI.>?3 g"ԂVc<-|0yi!]ᛨC]S[	f̯XgWГ{H8KCX6]L?>*sf~uN冼n͆/c.s{@
>^LE<o۹o`f:&D1y{@QTjg1>Rr`P U^e]	
ɔD7S{"adRmq>YLv    IENDB`                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/tag_green.png                                                           0000777 0000000 0000000 00000001145 12534142432 017411  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅IaOUÿ {bFcN4FMtn-=6c li4BH!(dX՗.U>BZERA\FTBXDP }!r^C2^@I`&tl$ɝ,S3MD.'	90NCӴY6)F?2m$	b@WH<Nt͐xjD"5v1of^gVfI.lfhě9<VOC|8i4>C8%JlGk8z#SmȉrXZ\@{x<.`^orŌBx<^'j}U1}QWhT]"kL|snێ#~ߢK\}bx'BQ'{i^oPȲz].c)weSL|iW(S    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/error_add.png                                                           0000777 0000000 0000000 00000001306 12534142432 017416  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  XIDAT8˕]HSazݐ ʾ#5rwEAP\eb.0&(#QhIͦqn馳>Z/x99ƲuG	ˊ=)v{=ޅ{	HK	#t\ckoV,N	uK7(i7BF5%	H3)!Bۍ m&ca4$bix& BvKlQ|& XJpKWC.Bl,Y"f1я9fjһ]Hh^I*tucAVrgoVP& *.DXAކbDLgl;f\R<զSlIgV)4o)yu:_\ VWAU2㞙VcG|If	.ABkzf(_@Mq|G3Aډ[|L:{>RY}Ys6KO`o7Lw¨z%V(6ja;ʹ٢i+Ri~<\{P $Ds'ywgRq    IENDB`                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/cup_delete.png                                                          0000777 0000000 0000000 00000001333 12534142432 017566  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  mIDAT8˭SKHQ2"j	v
Bih%D	
\Xȴ6AiA!B1PqfL;y?b3e51[A]?wsν *ʡ]]]|>x<n[r+++Mm	fr|^LF JtFGd'˅BD_4:WE~`8!NcqqQ^XXPmȕJE;Ɔv>Ȳ*y4xХȉO($tx2DTBZ{\ g/@ %4~.ƻ7@v,7O0777ۏ(~pP4ʸx ݘU)a	nLm`=;FEFvހJoBMKpŌS*yV	DH$$d<_9;dc"B"zGV%IBd[^z_Wa`f4?#c[f8LuӨ귐j,I߮09"
LMc~~fUQ0{J5XR+u6!;B1    IENDB`                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/folder_delete.png                                                       0000777 0000000 0000000 00000001232 12534142432 020250  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ,IDAT8˥KTQ?7S{Aj	 !6-E Z 	]mSnTd
	6㯙q~w=-_Flp|Ͻ(,pF;3X:u7?Y
╻KPu})@j(\J'_ˁ7hg%@KUS	[#X9cjh)Gl	lQ1Ma+Aoh@}(.@"Q~~sAÇ
;WGņbr!z1cPN DTZ#:2ɁΒJ,LisX<C@v!:{pϐN,SX\*/zñgE{Eکwa}.WhXLOW3 nCT@. J86\zjJ{(ޭ+%US% b\6iqac"4u6ks~L&ȸ::zU|m\=t2eg    IENDB`                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/note_delete.png                                                         0000777 0000000 0000000 00000001167 12534142432 017751  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  	IDAT8˥=HQ}zӬ#J>hh\KBmEK9A*jA b^x=Oý~ÁQ"^*bY?Gq%DRY[ĥK5xg^Tn(.J_j}"HЕ"P5 Vh9B+~ VB0H0H"rO bb2C	ܿJmΚL!芉+o0?Fp4ٶ`AB7zg@ (A|Lax$D@`24ʁwQJnKS4tD012dR])͝?sCcxgn%%7*h:w=O{d[/`ȶv!]kl8X "ROstvݢ@(LΐWGZ\&Q\tbo<V/=b|,yWSP4h    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/sport_8ball.png                                                         0000777 0000000 0000000 00000000752 12534142432 017712  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  |IDATM 78O¢k5j6)'-9|C!NR88Unۜ2y""*wSRD$"gUkpϜg\nZVDN3rM5Cx/ڮxkvH%プZ0s46));7GGsf0qMk}29xe}Yʼ_zlʤ=I?EڞkwNKh圦&3juӦ5LpԘFK')3qquuՌi2HIΤc9jUHtUe-6Yk!馐H+ܰ!J!餗~饓RD?@6c4/M    IENDB`                      ./mvappsvr/docroot/db/icons/report_picture.png                                                      0000777 0000000 0000000 00000001335 12534142432 020525  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  oIDAT8ˍ?LSQ}ZQ#qQÄ1BࠉIghp0FC"HF``b{qR0&|=D#4VVjddd5>o7:9jU hz{{վϤB"bH$ G`wwr}drH~A>~Vpsڴ_oN2/1Snx_~<|R¢#L1>izmޝQ,	2u"H$bp_%8"cX&8A<#RD\OuR!H*x~7Q@dEXvLռdQ/lʪ> 8,{.2uW"oN.-8KE B|5QD1F5#BpJ)֧br?bYZS	Τly:n}l Ex̾&1*0L^:8b!Crj̂1fW˛1Ksy\l6yDQTo4ؚ?[8wF    IENDB`                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/drive_go.png                                                            0000777 0000000 0000000 00000001225 12534142432 017253  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  'IDAT8˥SjQfrh,L-$RId) yB] ^ 0.좊!1"i*M;frLH?}\$p&-wvqض˲ft:(EIT	z:meB!躎^WT*+n%ICD"hH`D"L&C|!5MJ0OإR(IPb4n$uNҦh4*WwBu]|>V$%000)cg@)9("\Ai@ ^,	e^oSJBTV
" /\_k5*֖n4KQ d5ˉpw|/18o1˱0ڥ8~cwA~ZV+ͽ2ʹ	۱q1 v>a`;\f.Ç;oF}N>+Sg g4-%XN{ߝ&_r    IENDB`                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/pyramid_widget_icon.jpg                                                 0000777 0000000 0000000 00000012341 12534142432 021472  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 		



           C                                                                      E     !1"2AQBRaq#Tb$34Dr%C               3       !12"AQaqB3CbS   ? JxRm	6t;oyenk;<Lh@y@@@@@@@@@@@@@AƱ
3~SgzB^<ϳLEFH\ǎ`X;cIpVݕư*Sb>+w;lb-gfc}&\)`beK!7j7--P>dԜ)#~,=^GI1$ZƟ-s(*ŗHʻ;yyih)3*PD	x͵s?+QFꊓ3xnS`RLxllq#O;A6SaqN8s{˚y 9`\QFsuJz[^.WƲ9NF.q}r7jUF:3330p62b^k_Ӳ8jS;寫_]"9{3C<Tvt$rլrAe>*e
:(+i%R԰IZpjX䷉u*uS$GM/9A_DCOv{;ha5G6Cw]7:}Ł  1,=3Lr	Nsk],O|u1k H'҂i+#$lMMm[; RVCƤ{kl H8HSҾe"+r.g0wi0_#4?3eí0zg':lDǜW>}ob	䟃]/p}?%|AVe#9Z6
xĚ&[kuFõϒ2\&QD#/d>d4Y84҉eI.p]kh(`4R4tqXmV 쳗w(.@^ט	.;Dlv'CvtjwApmE%5$սf{7Ytbgz;o6<D_SKsHޯE1BTju;]gq}Q?7G6WQKADd^%9N*"\_O5ƍL,}6WCuڷTSoòk:t=smW^hxaMw;Os^]QWH               1nRrSo(>rwsJG(!q*aQT3wZ?Ȧa2g[f4v$F/O)Pz3Exxʘumis$dx>sY{yO7Aby'dN՟ *U#&fЂʯ3Rϕ:>l.=	qAfjAj6gоq-A;C`fÁ&Ý;3І͎g40>ўɝFȀo-$rpRxv{ޗY\2JǱѵu3/G۞H$fgEX%]kkkM$,]Q4Gñ1ߜmGJ>*k/4SeS#d>7uS11''TLNצ\=xel2yiY3͊Si#ÛmZopp6Z{_.bU%^'D?0jA,#ȝ0U1LS41+[؀K fPזϹd@nϚ-*qϋf|~FɈTGlho@UӚbi>,U?_[sfa* mz=ci(q^j'w]Vx;qpUV~_w)2<tӿ۟و 4\>+"8cO_%4Q3<1yڗw3K;DNl];u{y;_q?3ux>as[nYKlӕcaSQI#kOI#]f꼣1S6wތzKTs2hKR=;MR23J	;oL9\  dhԸ#cu	GPF9{^Y ݦEFjps̞H%׿f NN5.qF&_ntяǁ2'<2^h&D-gHp*jj^dg̸6y(cH
K.-xgWe,c>G?4݌hGd{[^jM|?oOzMߒض$(#]kp<b'q1llUEq4h٦M\`xMQq-դ.;cm;.5x[p1C'
TV6i\j
4G)1<G6^i(%?2qyf\l[{ߖpy;x|`t0ې y r~ 5Χ%võbMk}O&T+̏~S{rAR<&kL* ҳ {gtK9d⾟§PַUA@A,nGF\@e"YLktKbW^atN#hwZ9}tܷ:-ã?qoۏ=v -gk%D{ݾwx=TΞ-,m\;8E2ڪҼts<ݲd=go{0G칏wί`.ٛt 2~e],47ܯamY)V]]}S}=˗#Xm{v](95t]c>AJuz8,e0v[Aofist|1qP]בnH"fE3w#ujSF`. M#7vn~wcKKFbP2>8ݭ= J,vp(X>~. kgu_-Wy~UT(snU`<їa\|3{*G/{3s^L!<7
&'x]11A$'}>G~'*5*2S^}?U$Nv 5UOfmqoUSOL/^Vgqjg?:2 =E=;5#bg5M1St5`NT 1g*ٽz|K;9Eʺ.Lpf\2\:|_mXMKnoXqϒ&ewLoL~ة>T>7AoWz7ʚ2uv}mF\/c{Mgbܸ ɀ6?B6K95Y)%f!Ӿ'Xf,FLXH:ZMISt{¶WAuIWMYMM,	E㑦ࠧ7~P5^O$76X|<^.O1~:@'^kiQ;kUuvjg̬WDN1-%p5dIV;U4ψSÒnTtU4W,yͬ7geߒWQUɨѰPlp>ǒYIU^oQ{2qq<( 5GG0ssLF43:FgƥQ e]{5G/,Wjv]qYpV}^ӿ `fjl0STO;#yI?uVtƑ#OMQS3`LfEKOfb9F}
t1v`NKF t<Z`7b ݚגafkqkxe`pG)h(f%S!wxu2QKn,`51`nD]ݪ`ݍ4_mPNi)Hyi̠}ss9\(&T|N'>'k_[tQ0G&Xo{PN䜫< =Kq<l.aLR`wMX57b?a}63?iz5ΘWa:A[̖_OQT.lfn}֚ű*#C=Kݿk]hs5SΙ.6B_ymNm{O-}P)-qyUuS3?XJګީen4mLh9`.q4nJS~"H a7cVlU*~zϳeO7.Rh2RR57C.HҤS55.̫x]=mb87{ҤSDG%=Ew:e^D`&cڝ_'?R̹jLk0TՂ앛G蹱OÜcTpaeB\em8w+OqRs[\_?DMqwT;ң6}<o꫿OO厎rFWh9 OTmrSݻ3-{F                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/application_home.png                                                    0000777 0000000 0000000 00000001255 12534142432 020773  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ?IDAT]hqyļ\䥔\F\H.P(/2[/7KȍKJF,Yl6<=jV|3c"{^6PPTL5DP3LQeJwtt|pfEWl*^G<\EWI-ˆima$KIâd%r&Ɖ-&xw|}r:OGYZ8م)H&yk3JUjWaVvG	OTB0CQ@)Q`ɪmYov
y9QjuT#?ƴsH+؄^>Lf(SQ<gj	G5m1ܾW@iPƨ
^*T4!hll$0#rx.KSW/x,_Fm\KP`R~o)-6N]̦F4s&wuJ@._%}TU\,9I;1U<x-NP/cj8<m2Quwt)a*jwQ1!V8db/    IENDB`                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/plugin_add.png                                                          0000777 0000000 0000000 00000001263 12534142432 017565  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  EIDAT8˥_h??{v&]IVQP{P^RdQV&Z+t'̟{=<	)ԩ9|9?V̉&TU&4a$ZZ5QM%SP,yB pwΌt3Eвƶ@L$!K4PS075n<x{Uu^q#₹
*0sօc dY¬m<ZQS%Raϵ]."(wplǛd3抸4TYS31Gp`(hbb3y"n#wE5+P3J^*kbQw+ظukb~C-B+'V*ě$$"):)dH)Atf# %%L$BU|SԱ}? ǻ.?ܪf$"ID\~{헺Pyn#z]w`5  ATY\aŨǆ-QT( bnoB\j%F    IENDB`                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/drive_delete.png                                                        0000777 0000000 0000000 00000001164 12534142432 020112  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SMkQ=ofL`Kd기/BH@?@\ŕPOЕUCi\0LԤDR6$}S7zr߻s=yf3\$\hZ[<8mdx<X/JE1F&EZpP(0trxSLD$AA .$t]'/]gFiXuN.B@dYDXjv;IYHUU=t:h4B>GPi8Et^h(
8WI
ԝ6T%KtNhif)(Jrj@?HLcH\.K&0{<|~_kYb\>|P`%S-c(މV+ZQC:p+b	M(?W\|ĉ;d|GBiշOίQрcG]9kφG˖]yPo֜W x/~Ѿ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/webcam_add.png                                                          0000777 0000000 0000000 00000001422 12534142432 017522  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKQ7v[/Ů$FX!.l/]&1a07,Bn\fKfY]&9i?VTBtߝs6F<y> |sR'{P(b&	&	~yy;aoop||SX,"N#}>_?$#EgggEr9[VN RyQQ.Yw
V38"
 RT&RHRAt3˨C67"hH&bjA	$0eW(|V7TUlll0%F Db"Q`qcdh4
R)Â[[[#O݇/0rH0556y;348NNNT$VWWP(&vl6-,,`vvN6-j<~{W7+_] x<v~
D"XZZb\`
*.Yn'QGWWRVڊ}3A|5.cL'Pe 棳L&X,yyq68>&)|:'5B< ^/&&&pC{}B'+u^Tݍ<a477C.2Wex#<dN< $T｟o8;    IENDB`                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/page_white_horizontal.png                                               0000777 0000000 0000000 00000000450 12534142432 022041  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(} `9jtg[GܲDN0-C?#DXl2BY|氍Dg:J+8P؍DRhP7=N3	I Dx %gG02 c	(fW.hlǠԝ}ewqCC=QYe,N!VNPL=T    IENDB`                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/page_white_wrench.png                                                   0000777 0000000 0000000 00000001145 12534142432 021140  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍOkQ~Rt@"ZmUHCVSL8F"c2(R6Yw~ޝ0Gb<"t3{^}8^F#[xcKdnZhrE  C4QUNӀw@.j|>2,B*t:!.2èT*pݐ$	@ Xl%4B`0EQx`ۑH$`Xx%'#NS'IXVޞIN[CȲh4ʳ*l65M4'v/O!c{+d2FdʇB$M ,mߟuD~؊kXyLFD 03o/] ]ǧ_Unk0py*tw<~kFUT,m@_"g7J%\_^q9c!6S4BsY@mZm5rqF
OźX    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/feed_delete.png                                                         0000777 0000000 0000000 00000001352 12534142432 017703  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  |IDATku  {xl_Nh)I]d7}BIuy'EAnMM]7XQ&bPleJYrks<~DWiT@D@ 4q|;iiU}I2bJ@@H(ZZdJ*UշzB	V~b$$M>z)H2b9n@Q p{])K\d"dOb8 hPkIEW?"H(1CG9͍sԛu-jDc!г[,\ B(:&&9QNzFxe8E 38pb5/LfcGަrNLg5iIEHZa+yfگ6~.+vH
ƏUXgq%l#g|fA,ˮ1zF0kpeMc7g^1;iN [+46:XI￀|A: =qrM.So2=g^umpV[6Z"MHNǸ;)U{GW1
13EdÿP\W߄~Um4QC54YdIag,.r    IENDB`                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/note.png                                                                0000777 0000000 0000000 00000000764 12534142432 016431  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8œjTAs&b ba#Z)),
y[AlB+J5,YsgΙYۥ3ϙ&H$q:їWOYA eT3D,BI\$T
-EyY	yl$/CVQKF0Ço=xFxBG\~	À!O2	y24,q`9{DDhk"gȨ鐵	wP>vWڃzTSs $ʏަ;P27:[)=&o,OH-L%Jǹ[O/{ʥ]#Ppdw%#KD,~:%2E*W):\    IENDB`            ./mvappsvr/docroot/db/icons/award_star_silver_1.png                                                 0000777 0000000 0000000 00000001312 12534142432 021405  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  \IDAT8}R;hQ>/*vPA	%В6dB2f)t( ]\QԹ8t-E
u*V4HO|ܛbR̅ù}I@>+4;`H "HDN w~`8'Ef@66p$SN]_L\ 1Ff..ApUnm_iR \	YH`ZYN5HrXGpÐy.l6ǇO/_ضѠZO_\\TZIYdA^fIn?cDh4Y;$n
fp:RȇPT>#)JECbj5}
G!6ǘL&BךxJXbxBT( [ ,'`@jQ$؏A8N-#9o0hZwgLJͥhT<lPV!2̻l6N`XR?1t-Ba/]~$no-lD"Iw/N^69ئ(    IENDB`                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/award_star_add.png                                                      0000777 0000000 0000000 00000001525 12534142432 020417  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}ohu_npiFѶHBDVBHB">i!>AB4$3G	eϔ!Ҷum6sSHes<oӃ1}Ç(ݣҼM`Zc.
m(8'̚15մd>C,<.j^\EsO
KcLg?4S[54^w?,B$>ȍ?[,_|#^cNuc	Tл:&'!'p}.]]i	YT9x厱 jҊ)MAUlҗCt=Nk]l+Jo&2-.մ r8[/k /M~;rr@vU,u۫CGy"b
P-)S_xQ5wm*b[38o$׳**oFw'PKTKC@,C#4z-XF'JW4C09
'{%lKۧXd&.91T^C	&RaeUS3Mq}C[NO͔ hR5΃_J2דǤ᭛TЗN`{WjLgi=)@-IyϭpIV
@[ߗOk^    IENDB`                                                                                                                                                                           ./mvappsvr/docroot/db/icons/new.png                                                                 0000777 0000000 0000000 00000000572 12534142432 016252  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ݒJQ/|#z6=ZUMbNW$YH P$,h6Nb_3c超sp ܹ DBQHj¾O9ZOc=т^Jp74<eLO}x
58ɳ3x}0k[WMBol	^*h	.cA]S9\ipUA'ȶٮ㉭	/Vg)f[M~j<bmm%    IENDB`                                                                                                                                      ./mvappsvr/docroot/db/icons/bomb.png                                                                0000777 0000000 0000000 00000001431 12534142432 016373  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8eOQǿۮmmjCpzpkozĿވ1z0<hPcP&RR
/Җ{luɼ}oc)%LrQ;6{hJ2,bZ$u<%ɛ²	  䋐bc@m+C5ȓBiGD7)AʳՆ,4[ng7j{Huh7z 4eΆ?6/<3T|%pς[Uf#U}DPpqֿGLAT!J@Wlw^ݻ-[7>DցD"q~wgT^!,ƅrɠh6h٥UE\э;lTUk T}>bhcccz۰\b\N1 z_ߏp8Z-T*i4hf hpRPJeC`AV3 T G@y!,o1fCT✌q1(WgG.;;;<[@'>f[ mnmr9ztb̤HM&%nQUUdVgH%%h2	ƃ`1k.rLA:A*K!SS㲧4    IENDB`                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/emoticon_wink.png                                                       0000777 0000000 0000000 00000001310 12534142432 020315  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ZIDAT8˥OHUQs MF%etB\U+kV\E&̄BqHTTDYi{9gifY73QU'ҿ'܀ɪҬ1jUA'"p%wB7NL
7LEKעPF$έoU o4_/ք/"b0HvL6n>K o62;+7|\ ;1fx<@]%-5|:?/M9 P9ٚ$)u]9q|ҽY4/(:|<Q>Am̡_DmpsPEZ$&L:AAX9v	S4
8;Eʏ84]<lT!*l S4cLP46@B~	+P[3$Yx:Fq9$ũ^hA&ۄFtǜLo>ڙhn)>zΑUh/c}UVeZYUKeq 1>K_ xwd"1uEp',5L? _Ty    IENDB`                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/page_white_code.png                                                     0000777 0000000 0000000 00000001133 12534142432 020561  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ=OP)C0[!k_@ @

&~@[%C
*UAVJ;dB,@l_رo}nqHP=<>. ]D\cn?/ 8FNq$ɷAIP0Hɦi²,0iDQdAJ|mTU&2t]$ILPT@IMIP[5AJ(Je%6O(~0[dāa(*yUtOлM̾_
^I
P%4UUoVNcc_E{v_B|NuXתA"*kfB"_0-K?6љc.oal7.`Z:g|)bbܬ*āG
å2Da.a<gɏ^f$VuZAm{ToY7AA{:;r{ЁK_p-pdQ>2A$tC ʘ?    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/pill_add.png                                                            0000777 0000000 0000000 00000001435 12534142432 017230  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥]HSa'!~	F(yQza`I f":5bE3`]Ry(f279nǶ1ǆ{)˨0{sz c{8VW:vjz`^Zz,onfMan " " XL_šP0yf{IG`PZH '悹η7u`%@  ǋ=58MN-84:;i0iPil<l/GG~ 21BRlig 
B!7q<jx1;;ԄqJD]*jX,x
㋸9p7yXN1\026᫭SY	oYbh%YCD꺏d!yfE-V,tE@F>npP믠[/ [Ըyy\%P./n48*ۅ~~F{94DNF,@@T
)?GIxqǸg;kԤxXPm[n6=,	T^PKw̝7?v||&1Q(9Y0)Z	Vpe?U+١(Z"    IENDB`                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/color_wheel.png                                                         0000777 0000000 0000000 00000001574 12534142432 017766  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8UMhe oٝov+/4	`
PE^O) x"DЋz(XEi)H 5g&ٝ<H{{
UGxDtyZX3SF4{Tߜz_~!āXy>8-=g69!	:}gV{L@1;_ο0|q$.6C-ş+eIQx״gcsGm"JǱ#Ģ\G-DE+,(#"Wp!G6!!6.2z.io/e42<gdV>iB$B "4`z0rxѪ^5il>6b E` t~w]Wmr<i$
60(Pԡ_\T#Ah]
:
^VA=|dߓźMSn6K:eA ;J~]3 A$kŐ)oAI5ɚguhJva@GA#H7Pk#֋ܩ@+M]2wOh" ԋP݂&+GM+E:{u	@+݉?g/FhA8^.UuuG)O9*ٔoو7_>wf34H&\_3fu!|Dp@Tܞ4PS#*P<uyI.<9Uvz    IENDB`                                                                                                                                    ./mvappsvr/docroot/db/icons/page_red.png                                                            0000777 0000000 0000000 00000001201 12534142432 017215  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATs>מ*v"6iD@"DLb5Dh2HDDIY$⥪<uUϼsc^@!Eg*ǯ9=F @\qW?|ϟ݃TmFE5mYn/ʑמz;>;ހ:dNf0`*
ԱrvcP00QeTUF1鞣9Q^}NfzfyT52Ol3t5{ѽy,0CB0(4[FIjFA֒$`t"DY#	!@R*̃0ڬ!M6AiX0C/щo"W*Ҁ
|`˲ZWw{4*%	*qpk3,{Kw׍o
-*5bG/k/0t_od}g	;Jow]W*? ! y !!    IENDB`                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/money.png                                                               0000777 0000000 0000000 00000001342 12534142432 016604  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  tIDAT8˕OQǹ[.ukZ@MM˲rъ٤i" hZH ?Ip%	%kmu~v~?W˩]<gg}s/㭌nVn_-a)%CxU3}>`^0)PZ.@2cI00k0[[=Z_0^<0ǒRLf=PHWmDP	BU¾hAg]h	q~iL鵞"m[1vm82,%]T?zZbZb~MCSbZfFP9.ڄ8cS"z9ɊVpYXTnáF63̡) B'Z2wa4hleu=50<ԀJEd-a_43
;	Pe'A;	M#pS+4jUegN4Q;$ԂXmL^rC?׎b T#9;ol^u³_Ȉ8]d?o<wbQ%[M[L w\ (1"
-E{;Ըo&~Jլ2[i>Qk+IT78K=s    IENDB`                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/application_form_magnify.png                                            0000777 0000000 0000000 00000001144 12534142432 022515  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT?Hq?*zǫ!(ũnhoAZEDZZk(*hjqihiZ
,0HQO|?|^0>8U>p]K#nq3LX>l{xb!66+veJEUo<5b4k{Cs 횞B*rrp >,//##T;f:<9KR7Z%F*2r;GwZ
PHE.G&B 3<<ۏD,[X\C2Rɐ!JDZGHN+g$!`_7̀$RQǘ3ϾdTy@>#i%ȡ8(KI܄$$R$rRQH" Αr6cFwG9Q&?8]#gKNN03$aqL.a¶V~cw]Y]zN^N]5PBJ:~0gfZ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/flag_pink.png                                                           0000777 0000000 0000000 00000001213 12534142432 017404  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥_HSq_HhC=FH&(EFPRCOj"3h"Q=t̹M]{(e?3rvX3pq>{e X2ߋӲ,cZN{uy,MU90P	MD7@g360,G8 ϕq3E6YaV+  0KT֑~L)	屆TB:P U6~?.D:n,hۏ#G\Dm[	Pݭd_t2ҝ>?PV F:<MΠ{3m#}GUAM	pG@p΁똖Jb1=U᭗[%%6e'Jxb3/{p6 O31I}	͟tyjw&'}WwBRMfC$0ƞP;HEh=>iNQͭ+/`9	/Cw 1ع.1    IENDB`                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/page_white_key.png                                                      0000777 0000000 0000000 00000001150 12534142432 020436  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍkASPςHɭЊՃz*XA=!E!EI)ziQRJj	]kQRd5&>t&5.}fް/ "P%<";8ZZ$#L>hn2	˲4JBT* A mOa`T* 9ht:Cv duryW;h zAUUȲЬ0D~fzyx2q쾑 _s(e'`kPx|~q Qp8$X64Z联07?a篃 u b?
KХ!S7aaw\Wl9N4ogcXI˽~޽͗!ayj<׏}Ƚk0V#OGg	cLkpXyݳ ^=t$\ݹ[SG'b'n5U Mu+    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/book_link.png                                                           0000777 0000000 0000000 00000001425 12534142432 017426  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uRMHTQ~gN0Bi/wABd-
$0h.m"\E*ڤhRsǩfy3u{d{;9pԵ'd_@.t5wu;	S_zvrC;n>} 9%H\' *-ܑ=h(dn@E9`yCJk?M"+R6ǻvVT0K$"4kpȣywM᭰mxYfۦM4/G6"`!hF2<P^Q#K	\HuM|_ۯ0_S`mZD1?)(°nH`0M?7  @/^h 0-fX,ACȠ1\o46@41iEooo_"XS@FICrtmupE33z.t:x<~;L֮+!G'w>~}O.(;HҀXׯz1u>*F[N%nB!
dY<x8ً	jpT:9󣯼, VRm4cvvV[- AFd2LLL@$DQaKTjcC=&s/<*Q&H `"v~1tD,)k{    IENDB`                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/table_sort.png                                                          0000777 0000000 0000000 00000001246 12534142432 017616  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  8IDAT8˕RMhAvwb~b1iH	F?A7Cz-"x(


EZME	тf;4K>y7c}㆔*?>p兊%8tX<v>7½w3.^~:s7t]? W)ɖV׷-b8?.HW\8DgO^|)j5|4Q*{yD@BYg,V6&D*F1~jV
Jf86gLgsbH!LjCP8'36M t]]9Œ
E[jQS1YA}1z=wzMk@+:bC&?w	L}L߅/߻87
{!-,߹/^(ҞvsmN&v Jes&A<GDZmZ'-bՈ3Nf(˨sPĄ%Y*Z!󏃹_H{&t    IENDB`                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/keyboard.png                                                            0000777 0000000 0000000 00000001072 12534142432 017255  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8SMKQ=##FX[*H"E6Z(q%!t[[iRŕAII	CD1x>zt
73cp#f=B١hz*S9a0GJ5+me*LZA觮߉h6Gp -Ґ6< =Ay_<Fvќص"䚟)mMTz.LFQ<w
xB0r*.1t>cBH8{)hXv-3G1&`'eIK17tVc8Bce!Nkf&y8~&?νv%씩6vXѶi|ZM`6r+&6 SZ	hXvJ׌\ׯU?`JMٽνxa~tP    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/chart_pie_error.png                                                     0000777 0000000 0000000 00000001735 12534142432 020632  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  oIDAT8U[lSuǿtmunmA`xILa<c!i"!h`c5DS:;fZ؅9˹}{$߇$2~2Q_4P@O5קu@ZfcaH
<g|0sn8y_ǛC\o	Yg Ws'5TcNf^r (2);ETz1=uFyE{܁7U/>'  &ғM|9 :q}jP>s̋	@U>?Ov07*jF,}`JGdO憍YCQ}Ond	$DMhفBoJaG IQR FtRjm}kc81lr1f/qP ]'zDn5;ydJӜ-';ny%e[]\Ha!8#'4mCc`ӌ{(/ؒBޖ{;ϗ;׿I`{ PґB''N,#\۲Rվ*!v<IM# ")R5ū*@ð5ݯa{aezQjbכ;) 8ҭ8`n	([	-`	)4wUK{~k+%8EzLBpįA?{(l{:bhkэ/gɎsXџgH*2=e?%la+NaBl%$    IENDB`                                   ./mvappsvr/docroot/db/icons/key_add.png                                                             0000777 0000000 0000000 00000001277 12534142432 017064  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  QIDAT8ˍkQGE8Fl=F>%aE+z>=-Rb)ؤgM22K꜓cV:pqxs} 543j&BI?T	osƋ|.
gdyAB@U@9U#4mW,^BM"/U"~1
iN )-2mX̽q#VO '	+Aҿqo9Cj+DFe$& C6tP]Նmۅ<x+>RIvPԼTLs:#>)B׈+yЂEuǯ퇬wbۅ]PRvR)3׫r|&8Ch<VW'JEHvBkMt_l1ށ	\9H8.ۉnӘ{x@M(tWHa{	pg	ZQ(̬|ڱ lQdaL#ٍ[_-{P'~U3f=iO̽1n34mSVz\d(Icf]	eX~Ԓ    IENDB`                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/computer_link.png                                                       0000777 0000000 0000000 00000001430 12534142432 020326  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}SKSaݻ.$MT\C+1(zq2AA|_^%1bKT܋`-flmn{;;ޝ9'X,VWU<;88`T@"Pj1T(	M96-9_䎎V	@*
d2Yf2[&|>dry1tpyOn`0~!N,xP|o.Fa$&<[QE>V}FCKeVCeHdrwn@<Ȭ	@d:br1c:QPPmG%]x.|crOQ.ք
7K`6*6-hG}')eGMd YVmeڂZ%AUU "4 ZZܟ  4 f|\]EwwE׍alll@!3p2-..:nywoP*f1;;Q-Ԫ{X,8r^31|gjJy8H)ǙcLOO#]Ӵx<q:Xtkkkv˅Nmnnper4ݾPvfYLpwwwvX|BeT*Kn5b    IENDB`                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/email_link.png                                                          0000777 0000000 0000000 00000001465 12534142432 017567  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥KQ"Ter!W`M6p}If3S,mNӵb9|/smns3w<J溯w s1<ꛝ=vrKe'7UHEw͑띳ӯ|Ȧ՚}$IF=҄&2`3R?P +@8E
,1M/=ЎMppx Z`#a;a?XֱEI,i`yQh?aMrY$?4w"`<E``a`~$X8zscB#@|N ?fBP<ntkEkOe)# ۹^Mlԇ$$t|?ě ,fV JPToAX掠nz4xkr\q)sw?s	&A̯ӫZ2f3=jh}X\tj2kd`*^zwc)Lp&<ljcabTUUAѠQQ~=aoʻ=>[)}Fr4@ӁB!L&,q.)dܚ0秋 HњzG48/.R6!NTfrrrND+$/ޣ w    IENDB`                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/shape_align_right.png                                                   0000777 0000000 0000000 00000000621 12534142432 021123  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  #IDAT8S;N@D+J\[p :B{P1b;!ƞOPH$R`z$3af
W<%$ Kݬ0(vq^ e &$9xyNuZ^əOG>m,r㉘Z4J:8/a: p{6Qe9$x2u]O;ܜ$tQ}^縼 sZ+`|-j>`Cz'%8u~/bs|eɊl@sP    IENDB`                                                                                                               ./mvappsvr/docroot/db/icons/help.png                                                                0000777 0000000 0000000 00000001422 12534142432 016404  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥Oa[Ohjj8'rt,)53
j꜊o"&ʗ b"_DxU5Z{ۮg c#Z@'U4Ş6$S=:!O;4A*g;G hhh!9U@8rk2ه.s~ƜYG#
W'?ElqNdkr5XpP˄:	1XcHP`%:I]`t)*\C8h3G?~sAjMG]Njf}s!t&6QcBU
4P۶A3-nSXxm$vJ,h<c.u].iQAo<
Z]+zסI;"b-ZTk`Ǒߤ>HVbv(y;6*P(GtFOw>B1 #C6K#G#O4P$ꃄsfV36
h7eo%cGY')O4˹@tmA,Yi<CiBejCSWPƹl2G;7aѹ.<ibs1x4ʾV5"R1L^R\)ul<_/8W5+?ׯM    IENDB`                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/emoticon_unhappy.png                                                    0000777 0000000 0000000 00000001323 12534142432 021035  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  eIDAT8˥MHaϻ뮛V!Xz
ovɎ/}\
NE +}QD
ł,JWwy&jN0?Q{͘**OTx"´
W6p}Y͘ֱv؇&s-ߞ/047 \i`0ٌ_{D_PWSGPׁDvFV6or'zne%(++P_ŤZIzX=<_ FYMDp' 1@l+Gt^Ȋg  a4#ʨXLbQo906-=q7\"ՀꐊE]gnQ#QU($|L\9JBG}@&QPE/$	WͿeGwqX-i?Z \)cksU"L=Ac+ڷtR_[F|;[{I4R.cc+X{u9m"$|\G$Q߁zYxx9U@i]admDQVjA3r3.nx兛xw't yViv,]?zuϘ',OeY_%%v7]i    IENDB`                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/telephone_link.png                                                      0000777 0000000 0000000 00000001615 12534142432 020460  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SIhSQ=/'i3I&;`jETAu ѥܸ`BD] (BjC週M0?I4ɟ}VQ\qs4󱝧pnF MB*A Q+Jbo>#.zDujP҃)('B!6 OC#i[X+-,{;`:=O3!ZTQ	J_KҍU 	\	YUA39uuH3e(5b`~e3RU e!E	d쫉G;rX2jOEe2]s,$ؾuZښ#}u%㱾{.op,ʽ7T#`d8r٣u}=wjl^"d3Ǝw<5.m`ˉĦ
BTE/^dN|]]]pTцiF?/^fzFmILp~v$?sN477TZɤQUC*/Yp$>O|9\v Ht\%^eJݭR,fq%6<@D,ރt:_S@VU?hHEPezސ"q*`2" l6#b$ ={ i۴ISLe*<g)x    IENDB`                                                                                                                   ./mvappsvr/docroot/db/icons/film_save.png                                                           0000777 0000000 0000000 00000001446 12534142432 017427  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8m_HSaƟllgi4[ba*Zt#D#)%WytݤQD]]20!-2$BbH%9lgs8<ӖeJZZZ>^iF,YsS4͇bkkπbrlcM^|Jhڊoa8wyMqٻ@=Mf^wՔJjA5Pj'Se@a4P~	Ի!UY:D54O|:3X [HhQ̬;[Yh "43)(aZ3ٯ*}.X*4'@CPȕ5@c\W\3=<x$F}*q,ţ(ͽgIc|1A;
@ҌIpT覅:f$, >l6dJBT~
^YB&k3FqNmOf.A";S8ΓvnYӀK̇O8:ePKR~(Xf+B"օLa{fsrڬVp,~$S9j{?:esS̊W?y	Af!a1m|"ӃR7NuۀGjQHdJuS(D!yїJՃE"`:eQ`i|a!74)t0һ     IENDB`                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/server_chart.png                                                        0000777 0000000 0000000 00000001241 12534142432 020142  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  3IDAT8˥SkSQݛۛiL-A,KgbA1ɮ@6\,ZQ4>BcXJ)9{t:o8q;ADE:T*xW bXIRx#E촪t:OvhpTr88.Ta8*X}"qk)c,u](F]FӁfҗ@u0KOvJ˚`qiը\	=G̉mHIv_DBz)Xm&_ր,pqGŦ!Fۨ-$eq`͸ űWٖ=a)R."	N!}g*$) .h6<24mebJ;&5LL{fZ7.ҮWP.CIi r	 Q4@[۔z{I]K%. Qo'#D¥X>Iyge)p:s]8d ޯҩ    IENDB`                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/key_delete.png                                                          0000777 0000000 0000000 00000001324 12534142432 017567  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  fIDAT8ˍ]HSaW[mwyL$Rj:*HΫ.B"$(Pȏ`EPMnfTZSs_f뜳ο=*R?y_ F)j%Z/8QɿaхD!R!RVT_p¾@Lay&.tyxd]ªUTxiD)´m/O $	Fp'r^LwL:?仈H	jao޽FF*H7ŤyD\G!2*<UoK9k8yҗ[{Zgexwn:OoMժAOK:N9rf~B侚

/Iu+C$rbBN=bS!6c|5=(z%n1PhB|>C"IAłC\BFYާ1IlEFjq7E+$;	 i_蹕m[w.^(^O俠k]	98_yF͌`oJwԍN-Ve!pmX7jkjܭ̯[^s&}46MDaZ	ee*0    IENDB`                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/application_put.png                                                     0000777 0000000 0000000 00000001111 12534142432 020642  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥?kTAGϝ"+X(ZXlj?T*`Pim+	cIf޽kŁ0{~\qwgɵ/]<{0PSsU1w\5ȁ^|w.tVjLԸ*@,:31-* Tpsp5CKʍΩaԴPA 8bBH@D,}+k ̜!HF.hM`?@"ꘀ̲
00T6c ˅wI$D&^|YeʔF }&.g2u:KXqbPPQis
5~o?֙9xa9󻤼 ޳`)a~xbCE5k)_~/nǧ{f?aJV΍iذ]    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/joystick_delete.png                                                     0000777 0000000 0000000 00000001237 12534142432 020641  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  1IDAT8˕AQYs\Pw6,աK$=EP *jAKF-1:D`KEx(fPmPG79l||{?b&&#LzB߇iE&	yun7,@R	d;@yEp\h6A^[ mF<'Z.]xg #ȮTb1
zg"R!"N'J^6֊,CT;qfUiy84 Θ.]ѻWF?FזR{L'H0r8,
*;8q%(սemj}ye J#OhZlo0SV
M-vS"X&b:n܅@
(lwDc6<t:|s7$h
?o<Z|סku[[`	&I4xh3$9k]gx{9il]2kpw:\nV_>    IENDB`                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/thumb_up.png                                                            0000777 0000000 0000000 00000001153 12534142432 017300  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕AkQ9( DAbb-JڛCA
mj6ˆv]v}K6R?om573o楀ԑq5zn-F]i[=͟ !f'@
%nQB8	 3*lk6jp?7Oaf!zЍ	>x〺	ρ8RuAD`;7(7 dՁZM/q( %рb]PUgkP*ד0 xmx aSoң&bە,.2(l\V+]$Y}pqˆ%XSp4P=$kǖoԶ?5*
?B"E"hÀ+;
`R	2L!YbH3_6oVyO}O}dMƟ]_+}lrr~LIyv$    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/server_add.png                                                          0000777 0000000 0000000 00000001244 12534142432 017574  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  6IDAT8˥SMhA6ij\L51JA-iK"(!/Ax`EA^=zJ$`iP$V"of|3ɆRS\xy3]OkڹjFUT*|-	L'NgoD@tbzz}IH$Jq8Hg>As.'"FdruT<vJ	U5戀7;~Lђ@hِʌaRu:̌@HEZ7R^	U,	=BӁIH2MOc2{|U]T\|0rR8(C@Z3OeNkW^"f)=|[jKFn^v6[SZueWP 9`./VŨgLB/Z^G"E躎v:"b{a&sYzERPh.nӰnwvv#_bai bג6q
y>$16t;ݗ7c:wWLtB(P<=XP(")R    IENDB`                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/control_eject_blue.png                                                  0000777 0000000 0000000 00000001327 12534142432 021321  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  iIDAT8˥SKoQ;`;7&lL\4uV*dŴimI65"4MR@0000@9ι||s# 02sQSW`C?Y?L<@{M>bpCa~k7¾v%qGو5X@|Q/U@Z>T2de솸ɡ7l~܁^A!g$Ö/ ZW(%FXCRJ&dMUd}\c;9&Guh.ub"c^(EYG']0v߫?tzN	߱EC`aa\,82ca m`
}
KeDEFFWLKтWN&T6!gq'K}?e6m#Τ%v8\'0<Sxmu5:D-{Ѹq|7A\tֈA\q7?_[bk,6H|trPIԉD	c2vq^Hë<mQC:_!3)AqWy1x2NXcffXjf&+;ar2טȿ<ͽ	?}'    IENDB`                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/information.png                                                         0000777 0000000 0000000 00000001412 12534142432 020000  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥kW?wLdL&1
6Ѩ(hR,M!R;TA.\tm\
>VtZ΢043$BH|=/_>8U}T!su4-WNV8(wOo^uŕr#ɞF֮`!rpzyeHnVZԜგ[C*³2??\S+K;EСzrc%5*cb]3_槻i4|vQ@hԎdÅ"@IzSlՒ,Ѿ1AֆFޟXq	AǏd'bβE.r`o+)ȶ6P)G!wG CqnfGSJy8ux8q8+g ~jnBs14({^&xqXxXƘ0
`~Mqrd;;?ln]-G "8:Z&V#_M_G_8T-y/LZOr_wnYf	.m[/-q_1rdߪr^LJ&KӼ~-<]0(1n+iU'	4`)7r珁s?w?{Y!    IENDB`                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/link_delete.png                                                         0000777 0000000 0000000 00000001130 12534142432 017727  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8RAha6~ bBz]4S0R;t
4DNsy#;Yx7)Ҡ52wY/< (`0x<'xD:>,ehG/ZD*Bۅ,˨jFpn5t@ jNb\.iB!L
B9 Lm٦FjfzRhGҒgj~6}p8M&)g8ڑ`Gd_,er9~x^ӧ/L6&coCI^DŻ~.0$+Yx}vzQP[ocfFZ V/s(
YPo8fAKǣ{ 3cOވWI}^×dzTYx5n<Ԉ$rE5    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/basket_remove.png                                                       0000777 0000000 0000000 00000001342 12534142432 020303  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  tIDAT8˕[HQǿtVgon,J)[Z!&o==CdKB= =!i%l+I%mF?}络sursT߄ma;ڮSKщ^}V tVX嶶pkI/6ՒVC+?(I4:7H/J6mVj(_ɂq%Г}[D_[_V/tI2d04+OS[(.x`i|N&\y
Og#+t\J3~;^Mʃ2|zBk(w&N6*R9EQjFtz̃+<s`eESphhd
qPhqbX1`Xq'@.f4dY~d|Z`G Ѐl~m=`٘6nw0yXeh	# ̲9`N"mΦ
&YeEU$i&iF%0}*8ӅCg^n\ȼ\˾Dl	8ӯ+ʂMYu)N?/~z9;>    IENDB`                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/computer.png                                                            0000777 0000000 0000000 00000001233 12534142432 017312  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  -IDAT8}S;lA}w8؎7RD  
!ACIDh)kQ 
H(4 $I}ٳEP={ovf1GQt#C<ȋ}N fs\n!I )X,`i-%.<V 'Ab2	,V+8K&2w%P/?''[vÏaF?޼~kQ9ON)aUR7KZCLb+3'ݤgY}8[L3VЫIZ LˣCvy[9˸6#Q! <p
8gDCj*w!)Y@& hG l/Jd2.<&	0dJHiebL(
(|)NH]S: 흐frm:{9+勧O|f]Fk ZmJkn<F=6pMՍj:m^&!ĠSO]8    IENDB`                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/camera_error.png                                                        0000777 0000000 0000000 00000001503 12534142432 020115  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SOSQG_"BKDwC
1 `@2p1q`q2q1N(>	qE|DTZ
M[bis8y}qB5;;{P(xJA$X,jV,3:N4/)Ԭ23335ǥn754@E\=#L`D8LRwi@HZZZ===F͆h4x<44u6B}?a5ƲN׃y&4k Zp\ł`0EL&x<$	i'
c2lF	w+3>$T~J%0nʕt:,HX5Z*t8%nHYJv[EVbimG`TT*PXYCe5>vbݍ:ؔ[!8T@;
-Qi2lnGTk!ewʥZB@apPoik8/q6@T!{{{xLT#f_Qg4\ǅx=p#68e>0+j}`)L9=A߅YUz|G;/ޫo3Ь^TKς F#	g6]9vfO]CGkhGb7G}rQ	HB+cB    IENDB`                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/page_white_text_width.png                                               0000777 0000000 0000000 00000000473 12534142432 022040  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(υM
0'ZqJ[A=q/ܺtc+Z[t|I[l?<x_SӇW\J,涘&6JYciscE/<	r,,1YX JEaYҶ
#CI;w{\_XrM9_oغrueK]uY     IENDB`                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/computer_edit.png                                                       0000777 0000000 0000000 00000001430 12534142432 020316  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}S]HQggsuYM[,"$(~ ߊz	z=Y#zbR
#4V%W}p7vdgg+=wfs.g67b+4{t]~ۏ {`v9.hM0>;{E`Yk˱
ݲlXEliV($blSI&l_dŎKHuPYt>6Ui3/$&>߾AӉc
(+?m8ŉyjiG(5
}>O@NF}J<mtM	hx-X:
5	!!.?;x$N <"-sDq7:\fo$e)`$HOM'
˟*|Egc+ȯL8ICvvHoImq kÄc4ke!)V0[Cu@e?!H6j=_#xPTER˾FצτdîAz)|	!&cu]őLa5ۮ?Gn}H-[k19wi¹DH#uGn>u7	/W>}I!ar,~/g    IENDB`                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/arrow_turn_left.png                                                     0000777 0000000 0000000 00000001004 12534142432 020664  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥KacTO(P-(Y/N:(vjJ\EtV,(Z~@v`JJ	yO[)Kx=Ïױ>6P23YR{8*D}kUuA*(p[4\  75Wq Z"'9deD4F׿R 5@
(Ab>Ǉ@0"#OX{cAʆW$ឹ!B!4=xR ^܃dg㌻7ly߽beVyrK12wb5ju5tT<lm*qlM: /&/0Uu^4@@#^ O؀*MW
"R7-    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/control_fastforward_blue.png                                            0000777 0000000 0000000 00000001340 12534142432 022544  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  rIDAT8˥SKoQ;`Vkҝ6&.1Bf,QL*	ڦT P(Ps.&ޜ;;	 ǵeШЩЫ@?x?NB{hp38ƝN@0,E7$3k0c<8MGPk!W(ȯ%(HFK͖xv*RVIr}~ɲE-@_X6f(hCG4׀\5;w7
hG:w`xJbn<b		j\H)7IL$y oQ=cHUHY
|"I 6ʰC.
OB6\̈XS*@9a%lX7@`O$+N;}rX]{=RjB|2''	p2lhudAguƙt@$"9Q	&쓩`c;|	e0j枭dp>^I ǉq5:qH 
~`jR2Y&VhIsίE_%Zo^=SXWY߫<J^2O8YxfbE3:[LߟO>_gt    IENDB`                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/basket.png                                                              0000777 0000000 0000000 00000001235 12534142432 016727  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  /IDAT8˥OQuD֘JqIdY:HTJl-D`Ce:[ХCE<!0e֮SNQ::j߷ԡ)d+#[\JP,%-_Q-7\d{{k$ψb?6Ғed^=? y͌[O	9be/ߚ-pߞWy/u⓭ӱIZ/0{Ȕ3T*7-:H@ cs2u]'ƉR.ku:7iDQ,WA|Ejg%I"j̞1fȲhWCPEP(SJ_7](`}v	hx֡;*"b0.4o=ñGGw:Kt(Lhƶd;xl t7tM jd ?yp	ʬ*nMx<%Ǡ/P$u|%R.Ӆ^PEKd>W4ICuI{`/حD"!0Mӝ}6:d    IENDB`                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/textfield_delete.png                                                    0000777 0000000 0000000 00000000517 12534142432 020772  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%ap`!xa 91x=άF B/k;]QL+3L!G))"qe˿gG%ĉ2`+/sjQ?`BåN~VU%)\Et?.[> 4:>#    IENDB`                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/email_open_image.png                                                    0000777 0000000 0000000 00000001453 12534142432 020732  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mOh\e{ߛ?͌IiH V(?JUq%HuPэiwDPqŅv#̢ЍAĖ6d${uiHH.ܻ8.{DU٩rԆ@(vxn?Ժ:}?hNmo%:ةvD/Y_ݼ}Byh3_JtzQ#R?k~}{#|[~wOss*>Q8牝#vA#I's}}+?63-N<;ȾBq"$n]ĩ/¡{oN|S~GJXcGaoǟd6l@ iָxJ.H&&o=|R rI;_!_(L%zJAC}MChALO69Ȟ4V0z_c7D65Lat8gW Fr>n	c6Q~6Jtq̍:{8дȱXkP7O*nCS[i8*muDeNb!O6
	ݕSidA?ȕ?+1ӓ$"[\|2o#W*6Z΍tϦ6B`ِEQ{uNuf?j
.    IENDB`                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/bell_add.png                                                            0000777 0000000 0000000 00000001460 12534142432 017204  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕{HQƅ-P7۾R#ZIم`FHNR#K,\t~N77&jsޝM25	DC:px<9N GÍ'e/etANqa"}ak: c3QF'dׄ B6R> Qx,ZX(1ۙ kc0ސ2Rij;[.~X뺀7!8tK(u LuJwLX4WbNw_l-a%YZv FHMzcyVLشah`U^0K<aR(O-}6y,M>`4z*#5>&kL)N>1 +Xƛ7Ox,-~U*l:M t<t<LafC]ȴ hAG	3Jo苙xYGQ-̣d.n/";\M|IFK':]Q[hzT!J[/C>h1M"c&/6rB[bKP},j@4@́$+[q'{"~
)0]7h3wa8|{Tא⭚s-q[8<	D
"_u}37H]ǺK],8tlJg~:)p    IENDB`                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/table_save.png                                                          0000777 0000000 0000000 00000001323 12534142432 017561  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  eIDAT8˕IkA'ǉD"("HET\-1(\.""9x(@PAC "*}	5hdb&3_wWyDM=]oQ*E(DQ(v$%<9V pzWެ}vQ	EBx	g4c[z>( V'*"3( 'Hg `o{Wٳuڃa6ģsCzcX c0(_ir$B> j+Mr&K=*tk]8V.*"bZpIO+JU(H1F>J&ds}3Q(	B	jDRkbb7^p(ٌRk DA*(2!z`aǚ&\R J5!Ԣj!cª%y|dY}xٓ15BqJuTi>D| S~3\xvb#7ǒ\Mqgh9}_.8h[~T27gFU:-GhDLW2RZ>J    IENDB`                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/ipod_sound.png                                                          0000777 0000000 0000000 00000001246 12534142432 017623  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  8IDAT8˅SkQ$,nhB[Q/~*^DH "
97!
59I-RJLXcf?|3nKYfgxovk4}Qy|\./C7]ZVQm_ed`L EWKsHT^|z쫵_Ru۝1(a]L&оy
}llKLJ)"7c{\H1 W~dp.q5rU`l>$ ~j$SVhɤLvu^:ּ|uZB]ǁnl6| aAam  )񲪪B<Nv@r`yʣ"菽p0P,J(n\O#;`3Wa`٫Yh3ٜ?a}WN0n$v
L `NT[(v{Or@|pTP(A58j2hyi#ub-    IENDB`                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/report_delete.png                                                       0000777 0000000 0000000 00000001331 12534142432 020310  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  kIDAT8ˍ]HSqOț6%>&$
ʱ9âRלI}`-4S\nmdb"Xc;p_odG^8x.w) 81H)]9>)J@Qԑuvv6y4LN_
Fcu]Ӆb<(XHRKWKWJrD"$|{uRcJD"ss݀~}>h8P XJCo4U]5>wbo'_yp e4>-"O!I8
!\eZ̴0|jnzCCW=/~ c/ .s)`B^ sXۮR`
z%*{
(cOnBm#]ُgyvPK-bĸ0'}><{٠E	srGk-lSvL'rs(.Rr/ohD{1t0Dx<pp\p:k,4ڀBtns&H}RU-1"6w<TN    IENDB`                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/page_white_paste.png                                                    0000777 0000000 0000000 00000001154 12534142432 020766  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8u;hTQ{qF%ш ]*k_r]!IJ+!AX)6.I@Hv̙#Ks3qf7ƣhpBn rzGkt۟'xl-71u4W̌`f,^g7ocKi~ *47`m85{!1Hs
9 4`"L̜E`hwvZ=ι`40UT=V{k!h<[YY;vscDqADޓ)Je5cjZ}"T<&isEQ I*0 cA1QTEQ?ONNt!`YUE%`jX#w"2}D1	-d3!A=zgPXυ-NτBɷozxa{{ ;K' B] 89pd0sa,    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/application_add.png                                                     0000777 0000000 0000000 00000001153 12534142432 020570  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥=hTQEb,4.i0QXaI
R&`XUXJ1 !ERXEVc|;3ϑӗ/ܨֽ0PSsU1w\5cduq|ቸ0Po˵ݹn_80ϖ% bW}-ΕIn 7503GІƺ:ݝi
 A 8bBH@Dȉ,7 MR \"0s" !uljY@c.@"R@3BSIBlI^?BHXIFq #"Ћ7Ox_Qvrs)oϲDd.$A >Їo*	C #F>3mo߿&8u" Og^\\^Z~|N2lIaTk+,Tf06YrV_m,uu;HO>}}>/nf׹8/pone7|K    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/arrow_rotate_clockwise.png                                              0000777 0000000 0000000 00000001132 12534142432 022225  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˵NZQy8DFNJ5XBр/DiEmAD0@Դ8Ҵ%Y@41_go, 9'(ٹ-;5C c-^؊֐X>څտN~1ՅW
v\N)i7mp-$t+@UVlf0˼߂|@%#ZDD>U㮤##Lz(27 ύ > YAW 
_yyǳr7<B8WEeSO`<!lM &iJxMnWͮ/x>J\''A9-K0BFg} 5Հ#
w
!zBq7˅+đ6s۔CeTH`9ܷyhvע)DH&TiHH9KI$mֵL\ i9    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/page_link.png                                                           0000777 0000000 0000000 00000001476 12534142432 017416  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT_he }o;ͣ-cZFTV$D"QWfPB$hn
$`EA $DНT7e )ѝMIlsyRD/6vd-@	[?7Ǐ鿙wܱ "rڇsN˂J lW4u}믳'hCJjٹ(vNϓ,ڢ(͌OigH)-2uTv[`ddDNINININI֍V-xd8y;U}PDPW$I}=,Rl!չ5DSB $!
Qe%)2))$@*@R/
"J
"䌒U $B 5"`}۹?x!SW[NK;|]C~14;X۬W#ֈY/mnn˗6UוVj(P"1]Ҟ]sN{
ZWu))ׯ7iK.l^o~c׮]6l`۶mnV7K6jKytuth\z5M077'bʕ+5t{jk_|v4O|ԋci.h4VZeddDĉSɩao'X^^},KF3s;ݴ(,?)n/Vkz̖0F[v`    IENDB`                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/application_split.png                                                   0000777 0000000 0000000 00000001010 12534142432 021163  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATjTQ(No&6b%B ^UJ	BHL`	\G<~ᣍۀ%RedLdLRzzp0}v`czU.req|UUVzy>W!Mof9$,a$9LZ,ܻ{T4Qq	&D"LB?FC)# 3(@2DGaF)bhd2awg{1{̧2O9)O7A ffzLgŲ伺yWZA ̊Ma: mJfMMi"K,X%q)`%uu4iuS(Ef"IJFhƬmpMq2    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/bullet_blue.png                                                         0000777 0000000 0000000 00000000441 12534142432 017752  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8=Aq:dR2_	%eH2-\ORHn:ހM6Y?ufTiJAQ(jIn œBK(Us0ڿgifH@jsebb wLsuDBve =${
P޸/G_B    IENDB`                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/email_attach.png                                                        0000777 0000000 0000000 00000001431 12534142432 020067  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SMHTQ=͛7?o:8E
⪐
MPdDA2h]F$"h
(0
FgƟ7Ƣxsyw/b;6Ðn̈JEr:3Bci^ohINLM7r#)m昔EI%]ĥZYɓb&#1##-Rd
fe{rA܁HW4brX+yA,o 9k2zAfzKi6BMЃ4EU.$
Lk'ȉ9Jj.qV&Kv!wۤI0n,$:W
Ųª**켎a^q\A3~x.=
>.i0ȲŜHA"ĚyP#~hbxZ.!ܸ~P)-Ig9nw%}n?،}ͧqOb!5~!77-Ꞇq98B8հNqxڃHMܙZaRḴ}~YϪɱYJp %:
kwF-ͱ8FGȴDriz;?tttPAX,fC<&˻"y`OV6ǝNd[[F=cxQ`    IENDB`                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/package_green.png                                                       0000777 0000000 0000000 00000001600 12534142432 020225  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}Ih\7t&REԋX6j
B񠂞RA0b/VSOզ%ҪIdM'2yd3TXl7"hHE>=3X=W{5-N~ձ~\{fp罪[:/Lt
M,<NbszME͞{'m踀YZ_tUvB6vxt|aRg乷'oFdu0J/3QLW#`eHEO_֣~QJ#\\*Jj#Bx f%jSQ3wV^HV1*|PQyʪ*
 :8>" 5Ifu#Y%)ǋ?B21n0r~$J`*Q7 "euN=ڂ¬?`Z$Kil3!{VZx]8vόE?!Zl"t~`YR'᠎GE\}4:is6p""A[`̤dpxeCc}ͧf:_]\zG͝6kbڳ'YB|¸MOEԑӭx#~ZܧWMq
D޽#rɔgz^E>PGm<qbAEt~PkD<Ov#URK[F>[*:_~ݯ"!SN]^}]/E(ٟ    IENDB`                                                                                                                                ./mvappsvr/docroot/db/icons/application_form_delete.png                                             0000777 0000000 0000000 00000001135 12534142432 022325  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATKq]"JChí" hA9,[
%Q#k~@4XXCJzV{_E~IG/6ߞ-++sC.\p	alƊGG2TM.ʱRE6j9VL\;SFuN$G"!oFGMM	3w5;I
~eqqp9\O7'ɅY!"3??:p7nUcdt{=Deݵ|8ETč{3m!Q(HL0W|ljȳn'<>^w@$ܝzǧ&[!c"w]  R	|/MmXu%>*O>1nXDKf'巏my2%)Iֺ͋٫vU(5
3izĿxٺl|B*
NTn .    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/dvd_go.png                                                              0000777 0000000 0000000 00000001526 12534142432 016723  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍkHSaG%eҗ(͢4*BeQZ1+J2p)a"yFe4tKntN{hIЁ?><yV
"L&JZX,'_J%2(d2jbnnlP!|* ̭z+++XZZFLMMvcŽע/QR!/,x
 o&f	\.fggicqax9"@=v6Fw]Xiఫ.NM	fPfZ-m"3$;m@EMT<Mu\.0X,Wlxffl6PTtACC]Lq:O@ܨN(,h )y.T@wh9?@Di;,dTY-ۅO87a/(EY oVW2uc1$8Zyרyi[ZSߒ^Tv!.sG.XfOiİq q'W܄;0{eiw&EJKKys;߉a!B)߃Sv"d;Q(3}~#.cϺWMtK7ԍ! VV\?	-CnW\njHb	؋ȘpkxY&ެؑ[[3ʋR=F    IENDB`                                                                                                                                                                          ./mvappsvr/docroot/db/icons/sport_football.png                                                      0000777 0000000 0000000 00000001553 12534142432 020512  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8u}0q_.EWqq'S%WSSE،y.gZFnڭPalj#E[K|
 Q0:]],z`ZV(UpZc$mF3BWf3ZdLl;6z CWi17n_s覝tgJh[Dlxҡ-[4eS+D mSßG[z$Q{
}54?m73;<;2RU}BL+aRۏn<3E+
95]_W	i~O=$&K"G4d%'	PWm+N~O-r،q\B%kǻhTmO6i@G$ZNR}$1Q}xh(Lg򇪪h~|e!#TCdvF,R1V?0]4'.,wK~@5Rs%%<ɴ&6$	O@dJ%`)݆$9G!w4Lp<p9̌SA[cҳ@QZk 8kooC;tx`߿\Z!4B.*\갆`/jaRW||z,FE/}!m'Zz"`wJ67v&[UhnYxkC4m<U9	Yjφ缆    IENDB`                                                                                                                                                     ./mvappsvr/docroot/db/icons/database_save.png                                                       0000777 0000000 0000000 00000001363 12534142432 020242  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅SMkQ=L'`L bZ4Vp+AM.;.\WB;A\P .\hLI;dI--^8sÿ0Q(.Ap ʟ(#FFF|l
1;;;HT*x<4h6(˨jf/Y..\b0t9L&H :SZE,C4af6:*
 躎FqԽy,VK=ږhf'utG{a=vEhL[
Payrr+ҰTB`vpz .u٠eCjfn7=y]uѡjKm
΀ǑR@p{lDԡfc0:!ᐋ .xD4HVWE_zH{ФAVu5J"pIMfg2x__"!6*j;MdmJ5snMZMNNYXX^*R]/A4Xkm#5CfvGGGP^YY9) ęc艤%'=qf>"r*@c38!;.X>ac3~Z.~V'1    IENDB`                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/plugin_delete.png                                                       0000777 0000000 0000000 00000001264 12534142432 020300  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  FIDAT8˥Klq?6JãU׮TJB.6$qBB$qs$.D*K/$J$vUUKw[JZ\&%33?3/@&QݸPsN]Lsd3Bsn褛)泷D1a(5YDUUDG0PS075bձn<}:?DUE07_0mq)B9D/G(+Si5oǿJeI%tADl
Hc1F>f+↺RVae*H=D(h>L%kJ2Yp^(E9噘"f=K)]@ޣ,bn
9y59JD̍MOS>cI5?a2uU{E2BUTSu,3+Y:ANP3╭tn ۮlly	S<S"9cA}ч23o`VU{ڊńC| ~㗃=G{Vό';Bj:\%~ u    IENDB`                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/door_out.png                                                            0000777 0000000 0000000 00000001260 12534142432 017306  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  BIDAT8˕kAfIDh AP+-?NAXYW4>(dgc,VYltrÙsӗ.ƙw6XY)z ƲglEOd
ʺM6g^ Y}}} Z4; yL"9;"JLﭘfk\_B:f Մ`pM@ R	}ʖ鱵8bWUqI&o+0:4kp'⊘p&u6)|ѡjK\*AI*"]?];O[iES;؛o={LJTTKDK"u\#&눩Ň#eTf0uL7'1cILxKK{Z#L#!qwTSSd-!$6qIP'vj@
=
 L	yzz֣gEI[ş5>y-w8u0a3r\9j~Mw{ͽ    IENDB`                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/email_delete.png                                                        0000777 0000000 0000000 00000001364 12534142432 020072  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SKhAfvlGۘEz(̓X^z<xA)xhoŒZDQzHkinqvSq*tcAcϢo=~7/E㕆mrC.ܝ]0ǲەJ Sa1"1i[-wSnL%(VLhZEQu墼Bi0T4֫&(TNgQpH(@G8A	
AT&_o"Gg2{M-c1ְ>1ȅ
:@vG5igƐNE0P	QxrD"	Qk۲!.y`xVAAپߙύiTfdU	V~gSH||
m!Rzg/'`3^[T99-#,)`+ >O+AS_q՘oiXBVI;a}iuXH"A[tDs볩!<O*Pޛk=o DaʟF.Gh@5VVQ0E:2OYzu!JP(_uF5ucLpȠ#gMw!    IENDB`                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/page_white_picture.png                                                  0000777 0000000 0000000 00000001212 12534142432 021320  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍOSasZbMJPAqh$?p1ͅفфEcTĄE+h^n8Pj$7ssDUPUz&4mcVSU26ƸvNVFCժZku{{[&2ëRxNFb8 xMq2Ygeek^,uq˟^AVBP(ʏ]>m<c$3lqw^@fk-JH5Fre<]|AՓYKE9bʮ*{IF#Mqڡm$)B	AD~`p𕰗z6.MBq+c #K <OZfN$"Ȍ7aH	T￞ba-sd1""xDl)c8P$]}myn
q1q,cM/pQR;f\889'L_`FgS    IENDB`                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/award_star_bronze_2.png                                                 0000777 0000000 0000000 00000001363 12534142432 021407  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}MHTQoތoFGOM4EVXLHZDmڹ ڴA(Qɢ
2+LK3Esly~-%sιZ`T냛BjTrB	Jrtg7L8RIR۶X,`GJl)	sWl ]IplE:ˋ#{''.FL>Ǳ|eU
a~f0EtE %矞&FB1`adn	%0A:[o._1ṗ,BcjjY[jG3^?Z@\/#iB.MMb)x?\(ٴt 6+>\\s~Yx" *>FZ:&TټB-jgeQGèx=EK},z/,b`t gs{{#Zt"=nOCغ|ABJ31v\# Bf'SkFpB,+xkj@.8 k~k#Q@˶N,sQ >#:BoHgl<uT΂ F"SyA~٧hP;uE} )],`+0    IENDB`                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/bullet_white.png                                                        0000777 0000000 0000000 00000000311 12534142432 020137  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   [IDAT(1 DQi[HkۗL2[_Y.oL&IlNcNAArG	z._I;k9    IENDB`                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/hourglass.png                                                           0000777 0000000 0000000 00000001350 12534142432 017463  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  zIDAT8ˍOSa;28ĕ8J1&FxO"P(-
ZiK
G^h^i)(^jb|>|	 GEM$m$!a]w`_«ˬ3q<d[M``h;Y x1Ė"t'<v70"Xx\MN2y?Jнƺ9 q)W`Z
mElieXS>ƲW@l>iiU00,lup	l2bC:WZ k0:Y=9nWBy(oa"`=ZM?v1DYNcyڑY~3A*7k><`?ʥd`g!G	Xa6P+j(4SEtYk][/TSOZ/Q7Qr-:xŵ:Qjޝv\E,<)hˍkTͻحe|cElAǘn%ly#p2Ya4?}pl!zyzх2ׅÀDa()̻@f)$ B    IENDB`                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/css_add.png                                                             0000777 0000000 0000000 00000001232 12534142432 017053  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ,IDAT8˥SMhQ6Y61U"`(m$V!KAիIWx^<yʥԃlBNMI&FcҘt9)
ǛoݧI)эyХuMRql¦EgeApx⠐w"L1Kf	n/UdARr	\f~qGYEEzulnZmۄǶf..2أNѨ $5	kHRxN`KJժbl
J>ΠVr)76A^Xx/vPoֱgS:`BR&'o*ivPs
.O12@\md6oq}n#p,SH,4MQ/`==юڙjOfq/
A3Rm.)MRyܝ&b}7`x}jüȱSiy'U|+i}D@6!H%<<.˟	>h    IENDB`                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/female.png                                                              0000777 0000000 0000000 00000001116 12534142432 016705  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍn@'ɋPU !DnBEX T T(e@4Nl'NSO9u@nXissYԊvt~?m=y_}g&%3M1"u.@d&ܛa~tPjp?XP7|.jS2n}Ac 	|YмY:K8ow
FE)ol1Ptnh0thfM+nU07E瞐0wTuW:>H1i
?h#DY"$ॆQga:|j	,9.oϘAw7~H#tVuo#gUACTŵoMZ;\
PsOtg{!3DIt@ @Z?ʬ.Dg9Rog:{W2%9&Zs?    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/computer_key.png                                                        0000777 0000000 0000000 00000001403 12534142432 020161  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}SKHTQ;>LqAe-B&ZJhMвmqFlѦtS!BЦq|QhjNQyϙQЬsw9
tmw,R	A(4M/d %Bە>ׅM9pCPKd2"9r%"À:==m8SA!'iAX_׈EJx
ŅK.C&" AS.IU$?I4BMM<wN*?A=~fɁ*Tp1(YpECi/	"`x<QDp2مc,tɁU^)ꞺDQ@QO(.! sB,!8MeO]O*ǎCݥ&$7J\ٯh 6OyrTDE (^;O,n+VAx]$[ 217w8Tm0|unlabP(C%8}g>8zrЋ6gP &FtNƠ6~;T*FKjo#~?^ųOeSÿ~_z;`:WgE)Ukhٵλ;x Ӫ}    IENDB`                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/table_key.png                                                           0000777 0000000 0000000 00000001352 12534142432 017415  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  |IDAT8˕YHQb٘%c*d%mQBP(CPSԃOa	#-FE+2-R9]zss=pkUR
@(
4B&B#zX`+rsʻeT )pnK1vlE#+' h v-OǒWH  hy'|#b C;VCUfc']+JklXI0	搨i(t_2 R2[6vn`V9U]MSmMEa6!R;czFb}QW+ZkYP]>.ٵsL-قw3hM$o2:ao*`ZGL0cs g[ʲ{z3$!Ff.Mr ]i;w
~&XPC W
!La%$R"-A-~xmYZɮB"o 4cSyu'ͥO	U0w\P@k=}i~
5X`~~ze입c쿭נ;/3qtﹷc~Lxww    IENDB`                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/page_white_h.png                                                        0000777 0000000 0000000 00000001133 12534142432 020076  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKKPǵ|R7B7nD0BR:tDG) υ}hT&1ɤyg{n%H=w9p id41!ȋJUVk`$i(*
y|ض4*(L&#$ar=	(X,\.7.,˂i\l6W
ZRRj-/$8t]I(xb$5i1Ëxa+BW"m}m=s;&fs&L,$T	0x_Y/iZ+@ZE%̈́DF_yW*>S{'.,V<H@P5BКLH>H/H/<y+dL`JՔyt蘖1A<;kh:yhn{WEU;]{õHـ|:O2uF	cCh YSMn    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/group_key.png                                                           0000777 0000000 0000000 00000001455 12534142432 017466  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍYHCCJfbk $^KrsZ\KPA9k^sVGS<Ӆ6AJO[)3y% n%k$~ufl̥lb?Wc>}R46[5;vهDMЪ"@tgB+wǢ
v?HOfTX,yN	[іrYs( nXճFl78]d|_ lc^!	CD/b̿~]s:q%? %嵕M'cwJ- C̅2-4(ȻPvsr0MᢚC(iJhyCrfC?GFn.@b0&S,>RQ>xPKO	F밡aC_a9>Ws	q{
s>GEgA|iB1EE?D@:^(ohz9Jdm QPCk~0adl|T*<`|*1W  v]Lqѫ2u I-pטB
`*Am.r
vTA+!irniSF{`(.KB';o(DWjI/<5ȼDwQ 	Eq^4~oRn=    IENDB`                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/xhtml_delete.png                                                        0000777 0000000 0000000 00000001270 12534142432 020133  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  JIDAT]hqsγslö)d.%/qpKWJi
wF,m\1s!ʲysg~ȍDfL䘡3Q{ŉ=bNp^H3#J
16,+!j`/W{Ë⃒31TjBP5$(Y0(^L'N+-13mǚFzlYD-p8{)"i54'վ/h9jNiṇ
u9,P*D\񞎶+KW$&B.q7	qu#&]TaT
8$L+x2TaԜr(T@W3Бe,-.#H3|0+[ҀL:H\ װGt?D}JW4<djD[ΕmfFW((NL}}0s-ĕfb.#|!%W%@qA':oqBx,\?yCb`^1 S,([-^ޣ1\PҿpzQqnW|Sv&23ŧG!y5W. ~p~5    IENDB`                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/script_error.png                                                        0000777 0000000 0000000 00000001535 12534142432 020176  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8MMh\U9L&әIfWmm:-VD̢҅+;DŅ;s\8XA,MERk`$=sϽ.l<n<JD X]>\yph`y'^@ԀO'{&_=Sdw::lwY`f7P% uGB)&TBs81Z0P9f>3{(	 вFփ%&G3`0Mj:!t`hQt{}R>mhb`4h01֚!_.T)4BXցjBfl#vz7H9c(U)&Ho|a ӗqq2X<'}R7tjtR
_-_P~E~ElڛӲ8xF+PRUJCg3ԣ#~ޫffOf)Ysl+êNvoq=
d/}00N{^{gĭj8!GNLao$SǓ_.pQto\xj7M\0_ɩs,ވ.x{3S>79WkE,wXoig^F8@e
=0J!#=ټmIU.\) 3DZ(xwhqVyEd?P<hD    IENDB`                                                                                                                                                                   ./mvappsvr/docroot/db/icons/date.png                                                                0000777 0000000 0000000 00000001162 12534142432 016372  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕RmkA~ԋK$5X% ǂ!#?P@PZ(*EA#ܹۙw:0;3ϼ@J	f?WoL`
OZ+M<ww
^IśKZRjFNV0+vE8q +bF"vs;4t >9cktyx	D7гm\PSt]Io@#/ د)[f^ѻ#dHkbG"uݿq\.Xc8YhH|r}/!FsRB(]jT5V?ZxYl6sd2QgwpdC2p8A厊*X,¢<}"W
8s"jR--tiM1eK
lT*=L/F#C7~-:MW1    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/drive_link.png                                                          0000777 0000000 0000000 00000001247 12534142432 017607  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  9IDAT8˥S9ZQ"
џbB6\)R,lߑW*QBqG	5ghw`sor^DN|>YtxpT*>%Rb2u/S"@R`Iebt:f nMFhv#{\&XtQ
6rbj5(J(J"<#uԊErB@gr~`0vGnłLYxgARKx&(D Iuv{<V|6ɰX,APvZ9V+bL}@#F#b1xV@2$#)up@Ѡw0r9,0lf DQ3GKbRVHW8zF
T\D"Y,|muV3C&wǅ:叓d6Bqa,ޠannٌ2Cҳ>OlZfXr13ۙ// 'O    IENDB`                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/basket_put.png                                                          0000777 0000000 0000000 00000001335 12534142432 017620  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  oIDAT8˅]Ha3זpclb
)9BHFE#"(
o&&dYĚM,-?jcǶ(pv}ssJBٵG+bI|TTS<v]bIV;Kjb*0"q'nGVrZM2#M3(&o[&&^j2L
ُaO:ىVln	jlsJw}][&h2f~hFxFS)<:;$˲{<pl\hU.xpo}$KIE~Wab\HUFâ諎fՑ7)Ho^!Bv:cs\p6JEh3	hڴ cl6 0oQN;~dzp-`)`w	
m>o9	`?ZTGSBCC^l6|%!{$"AL?Av~Nh	;hB]b xXӯ+ 6׍CRj[pO&)hh4    IENDB`                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/keyboard_delete.png                                                     0000777 0000000 0000000 00000001251 12534142432 020576  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ;IDAT8˥SkA}ljMӚVEKV'CPTx
ғWT/B%Dd,HR45Mliݙ]g6ty͛LN; MņjCQ*CZUoc$~x6!Dlf`Y0iAX(|L  @
ShuωZ;.q(rW1aZsʘ|3},d׺.\(JXi C\ؐG#[\#^kWiBbIc4QJ23ӊ'{0i*lK8>'}W(Fj,=ABGy3s*R!<s7+@g<zsWkx$xst;U6YF7;`9	s&L.At0k~Rua(.^!4RJ?;pfrz_BK	4vH{<טgz\w"U;U眊Iki;n.]'?bO    IENDB`                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/script_edit.png                                                         0000777 0000000 0000000 00000001560 12534142432 017770  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8MMh\U9ޙNf29:qLZ%Vb-Tt+ʅ ]]nBA-7֦(jMvڑ&1d2wι^IlxGA _i1\>u}痀

ρ+6=u=5'O]Si4sU[;nz!@n-!HRa%%;#&g-~, u<jCE	J֛Pr7ЀNGy鲷!I	5 ,KS槙"KzRã2 `۝&;   d}5k׈N"=4}c[f_2&b$h\&IxXG*axrĶd(H1H   µ)/$Gh.}IEm
n+,@nD T&%	w)ZE_^ܬbcK !1H$vŽ)ѨìLCOȃcR'N\[1H~r|+,Gd3[FCoYg^,<!ܵMBQ*H|q|=.ٷ&^b5|R1Z7zvyĹmٙ<ꯋ/p~6* 1xT'0
G]bS|nHNhxecϽ+YR    IENDB`                                                                                                                                                ./mvappsvr/docroot/db/icons/plugin_edit.png                                                         0000777 0000000 0000000 00000001352 12534142432 017761  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  |IDAT8˥Kh\;ɴ<fGSN43j5hխАЕda\BPpap%J(A!j`R4ElS:&i&!3ssytДx6?QSw'̴j}q w`yr͹@Tw`#*T
"2 pw>)nf,̍jBDr)GrcBJ]q7֧5>Iei yuan̮b%\A\0wAfK{+"}<}?xn VK8QYdKM<?D45?Dé`u/(f+^k$2s_S+,LVYCj+(ꊨ"&?|ӄ$llħxoE4jF1y K8e)_|Q2
"J1ӁLݠ+jt'On>OQ_fx{ (,Y ]#|[G9䷈H,ŃO)R8/L]2C?3q[mg~AT^'-X],k\kj+/ueOtdƯžhIó    IENDB`                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/page_white_cplusplus.png                                                0000777 0000000 0000000 00000001155 12534142432 021705  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍkQū]w%R.ZV (HWJەJQqFnHSBmPA7EII$wdFځüown0vAq\
j6[V!$$	Zbٶ4*ȲQcH t}a$uaY4MzH6!C2s*2s
fjq 8]wX59q}=5QP	 RqZ^}GVT*6(峋]z?.h}۩QVۀY7YCƓʴ3\7xMRx!copBpcrWIvpTJ3@ɼsX^sxC"K1ѫ+8s|)0S7q^˫6Yu6^;<pV,c:Qy hP >Xlv:lWW {sE[10+G{	fg]>	@/A0Αh{ =ҧ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/page_white_powerpoint.png                                               0000777 0000000 0000000 00000001114 12534142432 022054  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍSA?b.Hl,m^BZZhaPH
5-^c؄$B;{;c葠va|gvƨ* Ƙ-,o U5  W,;缈*ϲL["`U`9өidHz=t:n) ^QQ+O Oh4(nwja~<p$`'V){)ݾhHxLl`	 gy!=;8&I*
ju%LVC3}:,rGEc0̛^BQόv	"PAfbY
+/	yP84s6
YGQvp#P	m6,8AU%l<_9>ǲM;7,!a03i&"a=q_R xa`_|~vM,|N    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/server_key.png                                                          0000777 0000000 0000000 00000001352 12534142432 017634  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  |IDAT8˥KLQyji)j 5w!qaP;bbL4n\.taab	aQJLEMښ#AT{*ܜ;Νat]\΍X,TePeDh,Ih*8\i0Np,yOR V+AkMHJ`(Vn$n [ʫFE d2!+*Zڍtػ:dh=j=%Q5w8F7+.a/YF2y;%4w^9sdFyA	`@He*5zaoCn1=Z[
]mbKX=8
z w 'XzՀ=j8)}2mAw&0\&cE-S8طJ$.ZV6 ]H>KHfR	>u7hA^Q07sn0H^d~)Y qruzP62y;dLFЛ}WcryEuο1н3-IQ_̅l΁-3{kCk|:zXzRO&ekd    IENDB`                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/calculator_add.png                                                      0000777 0000000 0000000 00000001224 12534142432 020415  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  &IDAT8ˍkQotu7]uM"(nƚժ+RL7~6)*H0'#ԑo8/AD(;ϖi<<d	ÈD"Fٞ~?PPXob
b {S ;5&%SL=VaQ%H,Ĳ[>3|Tl~p`v6`<Z\.X,"#!" NQ&o0PTh;70f":Z:j)JB@w nX,шvMnx'X(^'`XV}z=t]r@fF[N$X2\]^M F D xf@x kŗ$G͟ǥ3:hu:C`0ah+#!]>~@Rv2T*rwtheAJZ-8\~r=ԬZ847uO.,d	D3Gc_ɚںGVf    IENDB`                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/calendar.png                                                            0000777 0000000 0000000 00000001243 12534142432 017226  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  5IDAT8˥KQQs4B$[U;i6h&h["jբMBFQ&2"!!2l{NWY	/=}*;9![\v*D'`EpNpX'UpVq"Sw.Djw7{|$W@q`Lt/d~W[%BH	L	l>/`xl
xD$"q[d (o
FjeUU}.ExtoJU5"0NU V	U M2r7P3.&"ZP <O	}ЙƇi|/0pd&	*b:d.C{+d>JT S=EݤqB=kJV"x \.F@D],#X=ZycIgڒTt[<_~H%Q
qQmXAKu1|/M@!F>"<DT>>9Qv7aY8:]X9u#BZ=p    IENDB`                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/database_go.png                                                         0000777 0000000 0000000 00000001272 12534142432 017710  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  LIDAT8˥SkA}$$$U!$$ĂiIA
z rѓ^<T]RI"V$5mbȖMd<8o8LX,zHcSZ4	JyBl$?$	nZVDtnyGPXV9jhfV*3ϯ<Bp8Ϟ(ȵ#w@AKlv[~QQבH$ܑ.{{{e뺎NEQ3ݓdYf0|8v9'r𘢫&yyS#[	,dTCXq?tEwD3Wgn0fN#m%֥B !eNeQ8wj=/*uOD #||Ȇ%+6Zary2b1t+erNb|%m۲;K'kr$tx<?1X|0
zLl6{ȧ	.#iQ47`F璹ef^?    IENDB`                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/camera_add.png                                                          0000777 0000000 0000000 00000001440 12534142432 017514  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥S_HSQ{kst+Rp(?0ꡠ-(z^"꥚`=hO0B(jl,ԩsss۝\Qz+|}0]?KԽrVuZU*(f5McEFyHӛ,E1_cP\ײc"\z#]]]v˅T*UlllӁ+DOi0ưrY,ː$3u=jD:
(p:FBp8HrFN,;.ĵ5466Z9Y	g[a/H~\%'&	nߊ"Z[[1MEE f5_1dUUA䀹xrvLD@E6U7&dyPUK׵]2P*?W@¬aG!	*P!\CnX.VpGZ1[)8~Gb6PyTRj6$ޝwqdhk3r~8ĉ?ZC{~ĠϏd|uM&I-..2^{kĬyPvg)MlLF1o(W.wv?ěE^)4]{DJFg3:ٿ>[n
Ʌ'㉦:    IENDB`                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/arrow_switch.png                                                        0000777 0000000 0000000 00000001253 12534142432 020171  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  =IDAT8˥AKadMIwKMK̓iDx0C@tKt/)*5BJ-5w rM7SV$yF(E`>0a`7O9f܈⣦e׀oNϼ[\{gն^#gHt[f6ss$&cϮV]pacl.B [3SrX^^9|FW7sX_KmI-4
7 !+oq0r;ƓgNAEHL܊blߐ-F+ڎD%:QwF5d?ގ8c1%E?^_utN Fp(-d1HY8ʾR&H$8@2484h\2D))j\<qw.PXU,oū}>zt]/,*,.-̧')bE@Ý3N`|AUDbO<m#ϧ$Coc35P#*ڥb'Sga~5ڭF+Qll#4~    IENDB`                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/page.png                                                                0000777 0000000 0000000 00000001173 12534142432 016373  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATs>{SG3;1Ј.bc#61lIAKD"$X$TDyUIޥwO69DBכY}o*>'o{t:& ﱋoGgpfS=3Og~jUiִe[ǫ;kҏxOT$4ls1w}؝>``ʨ2*c*u˽=v̝* 	D)ke{Oy,0CB0(4;.ݓ 3*J	4	PC%#	0C/$4
I2O!E6k3tGB T%`YCam)6Ӱl0C/щ*ER4\g˲ZW7{谆$$|u̰u/ٮ+Jt(<W/k/0t׻o awSf֥Uŷ/RUODNA8o"D8V5j    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/group_error.png                                                         0000777 0000000 0000000 00000001512 12534142432 020021  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍi0qՋ^4EDH2z2%rֆm\0#gt`m,E
jA2uKڿc61^|73Q{)% /U[ma8n?iXwyt_)A.y7s
T(x6);lM	XRmBֳn+[$lJ`w*c|ob
(L8jk@ɢez؂IR:63#<*㠬F]N ,Lvm(XK^zh{!AC'6$09Tpf}Ul^
c +B		L\@^қHi	s.+akZd:sz%eVslAo	9~F)h^4L|?A_cLzZ.ba()ǰ4Ek	!NQcc9(p%ye`$c@"}&a~04e5fة]S_UսDP$jTbFSP}qMfk`t$Zl>d!@Xr֦aq4[;]Y\r?J&dQpB j@yd?EXt0Y.7!4߲;ܱrbWXmL?Iq,!3[ƙw%ч	MQ>.\/|^pm    IENDB`                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/tick.png                                                                0000777 0000000 0000000 00000001031 12534142432 016402  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˽.Ca{8bnSBT')E)VCJǥj ZՆg/hݿk n^k[ꝿ2P6c=XH*G`?xԅ{77VԨپ%VHyqNtn[J2^53X,S-OƜoDXx2Oܵ	r]L`}Z࿳TU(SiP/a:6͖,A`%S=[
b[a='LaW{xD[u9JBGqzfGN0os6"ffhZR".2H-[{(7h@`%E[IWu3e+ lGQ&' k|<R
H    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/rss.png                                                                 0000777 0000000 0000000 00000001022 12534142432 016257  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8œϋQ?7W!IRV&I̔$XMcA(Y,llF]&;DSS,heqΝ2oΏ<I84,LC8:ʙÀ4 `VbuQ }wUD	!TAv~Gnڭ{%>*mREOo@Tph/Hnl䣗A~"O9t]]^dD
r[+3uE"iWE" U^ Va=%)}\1SZh/!MLÏtf۱w{t&ϠOoV@9ouUB!Q
`Fi= B.iY>١c/JqmW YXpì6 aCq?    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/disk_multiple.png                                                       0000777 0000000 0000000 00000001263 12534142432 020324  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  EIDAT8˥KTaLGA	Jh%")%	B jUH/h'1h!Vmč!m"PpՌ43}[XZg}<1p Ccuq(!jcl*ڤ6bLx?eb3]Wm%t1Off{/kXLqgݘdV9PJkq7s_kCJHDLZ^grj.s3i=ѐȬdV? 6xQR
f2.8bsR!e/vT^Bу|GDWW!ԚIiv Q ۶hiR@M,I)zïVQaё 0tv(lSjr/eb)B0Fң w/o3A#67;ǀM1rNG\jr#`ᠩ{Eg(=o@zo'NnIC	&NՄ$c`TONkk>o a 1Z,-+?+rw!/-F    IENDB`                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/ruby_get.png                                                            0000777 0000000 0000000 00000001264 12534142432 017300  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  FIDAT8͓o,q=ꡭ=qHE%"ץRn6tp8"FMV̦)ehGCX_\~e=黽~^y 4B_5yǐ%ffH+i%.EZNLΞ\jixܜ1:@$9~<}\k+曛q4f6cTB|hX7alO~>6i{J
Z-U*UWcA
e\S7X}}xjJ>Uh2"LR8v$@USV
03FÜ(t#&*>$Nw*laENN^-(E֥(̚L|ߠ	=]FJ86 8fOY7;6≓bJXmQ-?Υ񷔖p(reCNcS\(74XHDdm-L#r%>ν!3u/MdK@Y+#<XثB7u2W_Y1ylee9>c˱p    IENDB`                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/database_add.png                                                        0000777 0000000 0000000 00000001222 12534142432 020026  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  $IDAT8˥SMRQSQ4)"20a,rj'C(ffԮL0h6-aѪ BY6|1E{sƃIZtssUl,(J^#\,k&iD(e2SrYi(JE"~^0h4n付fbR9=iF#ZڅB䩲2NFAI.9i|zx<tl6EDۍn` x]17U@rD̠6MӜ\K("XTU\W6k|U_;o_xyw}q 3(~.=ΝMV^(kڝT Cfg,uNMMTML>9ôkWEBk({0!sLlrRyL&XL
c*[e>ƽ\"@q|>Y^~NfRgƇU+voIs\tW	AAx5By    IENDB`                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/control_repeat_blue.png                                                 0000777 0000000 0000000 00000001356 12534142432 021511  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SKOQ;`҅]A7Lܘt1j&$##DK@)PSIPEږR:}P-i.t79sw~@M5.uNQC9w?j[&]n7$? -dOC]{fFT2i!- q{/DĭTjIn*|	t	RJ	SVu2D&̀T">8Q>^:D*̻;C"c :Ql:=sq\q"CCZCb_HKFO=ST9$j\a7ì'rô<iɠѻ.Ѱ"3T]t!ۈDZfNqIFg,޺Ef}R??}i%ZB.eā_}8+&pML8j[9#v"rLuQQų32%(1% s>D#ӵ"HrMj!Ecߢ2+ѪwnvϞH1y|֥cFL4LT9O:4[&-R*Vqa(Pρ-	S.-BS燿W32wҋNNjg`~i    IENDB`                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/donut_widget_icon.jpg                                                   0000777 0000000 0000000 00000023750 12534142432 021164  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  ` `   C 		

		 C			                 	 E     !1"A#2QRaqBCb$3S4r&5c            	 E 
    1!AQaq"2RB#$3SbCDTr4s   ?  P
@( P
@( P
@( P
@(]FS{yiE^~IWw ?e2G^޵tEcr}Јm5D] R7vcHaܩlr6;MGi@Yird
{][CiZ-%˸K91w&J5ڛP~I#ڂ> [7]'6R(Zq%z7΀i׵^5}CS>G(JGp;qqVٜnLy!̌}QE/"@&THqQ$cab7\9mW	usmH=>;w'/\g[{wlI@( P
@( ?ӗ-^Q]ۆj䇨(%ݔ@,&&nku>JlA_[SA&PPQ\p4dn6y6ٯįv$X ɢ]e0[T@_#޵mNگWPoԬ(JFOĐUI2$(YM{M+Wj?no>Sl6ԦUxDϕB+3wEv1tkVaD(AQe^BrITzhjJ|9Fw7!^Ҕ^z2ifx4VI"o0.V}/gE\녲z}KOģ"Y]f5m<x<)&Xu9Rdi[k?vH͵KyuR$ӧDC>{@W$>}S ݽk( WIZhYElbxzNpw{eU(
n[`YNLo ~&>˔"nqRζ| /]O%g(;N{:-eekSt^mΆBCL( P
@X%?.=_'I~+#y۶:•k+c~|[ݖdڎ8M eI|uݘn)ŋ4m vl3˂wyT*T؛~Dviɧ,;h*)"EWc|ed2Ԉ8eI:**P]Q4[zʹsM$A\dVJ+6{[ԯ5NO9;=uωJo!^H1ʄ*"/sZ[JRO,biQJw~4ߺwyIWuSf]U$s:rdc)8.QWֲzӺݓzy|=RR{%Y)2tɾc8IQ19KҗQfNZ2?F{H cDK?"FENNZ>&W{*D؎/7^w>Ԅyk(<RTwhJ~ZK\xu;<AI<"$W]T_7RAZy^R4+51tDfi;NI*ڶsMT%(2S̐W"Lhb3;9 5Ac(2,!4fNlMŵ:(eŐwؓef$.tϑStL>B|\iDqבepT-mL]
@( rB̸Zznրg
o؀*}h%y:en~mͶN@loi.ǷN3J*aʒCP`yEE$(JiӖ{mqJ+.BJuoFZ@lAL%{P8kS~\#ٴ#7'kLB̦{~MJ1ry# Zxu'֬痌#]et7?駕=Up1
rs2{kh8 }k?Y[iõ2 b"u?5/Uz]7	)-QsmN攨YiId<<堗lQwgL,*a!5۸s#rgU~R]뾢>_z%b^_?e%ULȭCH̰3}Da'\3ҕ)Um2m tfWgZ8m^T)򯯯ݸݭ\fj/ʏGKۣ'tjms&ϫ Ӡ1mNV4\?
/WV4F'	,DN9S4y;ܤu$ʸ~!$!u$k *&H(t>/\=Y^.J1!qitd"Dh:b;r5k`)4)1}92.Sv	r{wKtw#B$@E]'
@(.SZrn6UN[Qzp}f|kk/[[dcgy8WalD.#5.Nk~ũj(:L`;!ǑAyn"̫]Fk/jC]LR8%Grr">&\E2e"mD
lBv=9vܰ2:,tE;eWxB^XWv҆Yk͹:9b"ge{'٭ɶr\2N9淺 iSvxI"t̢z2CZ҆Bap/'?_* Ӵa8¸O/Rz԰[MA<oWto5Miij6]&l(yw} w|iž~U+]ZINdYro-l{<e2}I??r Іj-_7{F*e|@tȧ_Ee/Mtq"c8ӋQm#RƾqOni;}1UfvZsOvD޵pZ>(oK^=/Ʈd_XpSQ+;Y|p[ʙ0_kgaQ_̸56;׻t&( P
@( wVJMS#$ƭݘ1r`UORD׍xЧ*+79IᕣJkƯY,xW[Rmפ_r\wU+:59U8֡=__ԙxy}?/S\7lSnVZ?a9ÅeZHnODArO-/aJJKkWz^m(^'[?ҢNMpw8\^Ǡ՝*+-GmiE+Ќ***"TZW{3]{su4f˜hhzN>7jmG** ћ<杵ּ3{~f&ҷмA] |XDY;1nm։fG˵\J`[=Ս[*n-5,bK$k/+;xר|~ޮOaz:7;?景2R溟2RR
뮴o߲đ.|h$f4`{C%KKEoX.7IoqZ.cn8<Bײ.3@{U˔v7،m-JAb4Տ?TeUǯLwn%nfkSPU*=H~e?(NP
@B&oPudi7J)"ɜ
^rJSĽ,͎FCmnuX3'D*9EX:g@I
\[cY@edynj/7'5n
D&8^W4GDҋ&0J7EƿGy/oɴYDoEl,6.6"fOS9Y5sVb)m\_k>)^<m
j6r 4ݩeLͺܻTGL .DA둩,wSmkg_3aFCbXm1N JN
@(JҜSDhfv1A"2?_8P7s:4,"|olmKJqg$ogك2e_<v2t'/:~<z#7A}wu]QWj"S*=Zig>]ރe7&[ <rRr~^cGY>YFŵ[a@KTH#D (҉|ȣwg{SW0#b4(Dm6Ҁrdyh4fj [=O6Ϣ"v>Ӻ~W3ج9ӏs"[DYy}e0i4E0BPv/j>{r|(kHmF鄠(FWUsOO)VEPLST\$)kԁړ x [;wAL>@UO@F8w(qgs U\b+>x;I]tJsEsjtQ;mRQ"T3n׹v^_io͹#qM+<r~!qS5FH
@(кI,39f7U-O9p:
Q˗#w<^8n$̧s'h~пҴOl6 E TX?/b<?͵Q"MG$	DvnL^}J\~7Cw$.<{%C	n\3חsknk P
@( )<'<	r#M )-FvߦjerIeQOj!9 ky*qN6q܏H6hԞ,	OiӚ~v>&a$V *o5	V^:N4Tov>>-J]Wn?hS2 }nJrŊZ}2xԋ˻jaMZʾ^T6VQh-< ^\SWM%|3L>Ԧu .2BLFK<9uu<ZzMݡ]G݆)T*;W4d\$Vj+d.*Щ<䖩}:j+{C\)PјåTs+6}yFFp'z_EW8]<rU;O[H@( ^(g#&oL;|wRU9L#N}7/EձxGznYɰFչ2Y}'w/Dڋ,~		p Jn$"88/juqiX0@螤elb>n1!Wvˍ=Aaʰ{5D^FUNɷ˴NLnCd+qh>J55y*UjrpMChMVnn{L`ZU(ԎY:ִKX1Ǻ[bD\tV47WވsV4iEryF+z$MХB=m(0,{I2N͑t$FvW:j|\䏪,#pSH-`&&Rmt֌mBm\"TT?QUUѼmiKޜ.GoB	X"7z1^]\^j:)Eq}f4;IuZΚ[ {~5e&i߷i"9fKjWT*S2Yd
zU)IKFO֍sEp:{2 HOm_Ʃ/isL6}q"|*N=$|ky22IUm3rbN(mpaҨGd1L:64eM䞰}K-qoUIEf֒]|N놐,\;6GW{\Tybʎ͇	"~-^#BiHVV*s&mq	\u`^tXa	ZImHnOTd<tKT},sl̅!^yBiy/'*,neyͱ"v%fRyC=
a%rZ4vóFr֨
v<k -l[ H2h	CC샏Uܭ
)@UP
@DnruDMAؤDFlabO;(U{v⳷;[.%2"ܔws-V^fЄT-`(l!su^w0&FbvLaZÆGXjUIp۬7YOl!2"7qsE$/"Dq~zڜB㆔[krˮ,#-,'%%UO'\TdqTU|~+%mX+d?Av=Cmļm$pD;znY(j]X׿{x9՛1ZK1o^̢ESbtO*~D5Gm>Tgh-9vwfx8gozT.T z˖Q27
W0 lkrF?{+\b#c8Jo_ګ߉1эp]^%mӹڊ:byn7mMd7:nr\_/5VN,91f6U:U-3oa6v}ˆZvFK^qoV^ I[F1qo
xEoU-aV{'8ˇga-[7gJJ7&a,ҚJWh&8DèjC+C>-)ۅJovQzN:N@<6	Pir^h{5,3}oaq~}ꞋZ=l:e漨K{VMjQ8V»SUϭu_.ڡ#?Hd=3:0j8&n"}WӥARV˿eX~_K?;uP\( P
@YI6k$yCv6s&>RO-ER]nȳ!1Dl3"M-gwkO`Us.6:=`2cb="y)ej칔NcysIV?S(z
J&R@n:m֜4Tt:΀w(aMHZbuhܴommM7nǔ>*1jq$S[Q5v2Y	ox_A?	΋"]Wb*y.:]o؉N9]M\^MKZ֑ěxU*#ei蟚Vw9s^7:]%:*"E	qt OUsZt%S>^׿VM5Il9ԗW{Ow*>6<ٷ{%!v_yJl . Uaboz!:[Y,VWK?*~	,G0^%~?/K!8ݯC_yi.>d7z+O*/GoiumNӘ'BKz^2˭gdh0(bwt?YN9qDaftƜ"*^f.ċNھYµN*Qu:*;gԪu[kលp#@62,EBzM8>ryII,QE P
@( 15gvYL"ۨυpLsSjQ -6s5{v=%QIPiH剶Xms k:ru[dN[湹T|0 dLjF`Ka5෺W= }!϶5ѵrhD cGj9!zs9^kSzNW'M=TkDE.}i[p,삏*'%eiZz |1^ז}}lᾥԂ֥˷-91-&_k6Jy^?	?B{MrN&{]nWrmj?!Kt*{~En-]*z>%og*~+S^|i>-Jbę,)N.W7΍5EC˖ĳF۾J-qYܖL AkN7J+AOuF
j]PrH*)aESˇ[e_s/l:>şNf>^z܉~Wt!EF+$KK7Qv6p|^Z-Dq!,
eTA1Y~drrQh1ӗ3/vQ%Xm>6D	R%smr{YܡugT<unW7X 1av|[l.w/ʠd-/bd#WqsATLP*@( \qҀzAdES+2+ɹb"]U6IWphq~Ql&"nE&ѐG)bU,F\n	gYx@iR@䩸0* Ju,JApع<k^`ja2׺Z4ReQ!7xa?G/z&xծ{">B 븤%	kθUVRڦX4 V^qp+99Q=sR<7dXR-S۽;"w<=IQ[Cegg5Ǳ3Ѹ_c|QޯK:1䤗߇}a?xڶbuwq_:#F6!ծBH \{i'L6qE2QQhu1-ӳMFQn2<L Ad8>.2T
}rZdl2`ZsAq.tvb(ؐ8?@¶qM-ri[JzkxZig5&d`Ģ@Sq1Z^e2;7涨6zgGPq2 P
@( PNCV7Sc].l,$Bi\/
ɂm3]*`e{{q#^aGu`1j@$C\o)
@Rޏ!7s[<\C&D)+a ZzD$ef?qk<&!eS^-rcm8S#k3qUQQ ^}ggWWĹ nϐm͋ks]~[~MK#.\O]T$Jr8QD]@RC\Ej(j:-YdeH!* *2 F/QnP_ಮ:f-:#P
@( P
@( P
@( P
@(                        ./mvappsvr/docroot/db/icons/bullet_error.png                                                        0000777 0000000 0000000 00000000706 12534142432 020160  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  XIDAT8c?%B@,$_\"_H>YoM>IC??'__`J6h50A\/E_x4 hӟ*E~c8h)w??~ A6q	
~c>fPt(fgI8ЍhKÿoz33n&u8 ڞ*mg)ÿDj~gj	?L|@fIp{9\nmnj
bǹ߁	H?f K qg& Lة    IENDB`                                                          ./mvappsvr/docroot/db/icons/cog_add.png                                                             0000777 0000000 0000000 00000001456 12534142432 017043  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uK[Aƃ,.jRpQh5J`ARP4($bHjJM
 `L(F3>4G/

-zP0w7su t7͵5Rjaa!EsER''';O$%xt||F {H*tZ?77 $Tb@Ȉ:00Sd2}\\\`oo$<r&&&4_3(Ix^{@U[W!,k ,&E^__
$IB8F?;YQ
-Q333;;;edN3hhmm5 wwvdճ3a+SB{{Jww2 kTݱztt$z\GWWWHD8ȭ8o2T]L.777sMB!C -x^v>Sguw(B$.
R+=$	rAdI>!F-u0S?/+A;'/@t\.ơqwȅgGO]]jX=AvypK5B\Szj677|jjTX4ndy}!fmm:UYY2?ey1B0_    IENDB`                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/bullet_delete.png                                                       0000777 0000000 0000000 00000000464 12534142432 020272  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%a 8p˿̏h˕_,}kvl?Yr2`o@'_.]2 gG%ĉs+/sjQ?`BåN~VU%)\E|,V mǸ4&e D    IENDB`                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/shape_square_key.png                                                    0000777 0000000 0000000 00000001137 12534142432 021007  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥kSQ<R4A*E((.,q)v;ntĠ(wJqSB[mӤ1ɽ3a~f月Èo7M5 TQP£H}])`jJu+a
3GTUCmZ	1Cnj4Ehh
Q)3I,wn!PP1DѴ,Mr:ʉ2Ǿu@E\-P'7rKM3pGDo
Kesmhv>Tޟ&Kx@U>XHԣ+QZzqn	|ѽ۫B-_k#07d}{"U1͑6Xu?qJFqx>Ss^<?̿gqrs}eԼ5~|aɭvy_oOOl^ˈ[    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/dvd_edit.png                                                            0000777 0000000 0000000 00000001514 12534142432 017240  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKOQeҵE%5 BԖ;#+6.ޅvzufB'y3|9s39 ΦrļT*=<<I$QXtjJbn>.
D/"mzߔK0L$fFGu^sScMڙ0'FAKCzW0>ڋebZ@ɶc^<-ljh>!"LNؽ7ӒHXhZAEufJdq("jV/]|ęLJMM#OUXzxlp.S37Bj5z=
hzW!" ԢDIP5*A̯t[_ˠb.Ta3 `){
\Le[w8;vU6\\j[P|=܎~ċY$-'۞A`AKNXEilVLKy>ZűgXW÷ZJZ	&]`fp;vn"c?H0kжa 0YӉn0YtƮQY}Q)CpC7afJɛp0&]DO5dM	;R\IRgpH8m?dpMU    IENDB`                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/bullet_add.png                                                          0000777 0000000 0000000 00000000436 12534142432 017557  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%a Oɛ)d'
lh\˕/<w~ْ=D}	7^zߓ2;QTvedT22G{w&R6h0ğ@ΆI7 ?;#K2    IENDB`                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/bell_go.png                                                             0000777 0000000 0000000 00000001504 12534142432 017060  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕[HTQsˌqF6bY QYi/\P]@*BR	=>Ed	F#q<s>gﶂBEe?}^cs}^QY}Eb	(RNE˾$!`/`#-&bU̣2-!4B]*؜ G@39LT_tɹiUXyTy
DL9@9&wh4Ғr	
אF[@eZftItE)3mM)B$`D\X QZ|_':DÇ8XfF<ZmI05pّ.ThsY !"!!+B	꤀vj-y<!3ًheyQ ,Ė[v;i{r4Pv0δ<AiB:(BA$%fTOwSW|Kpj(		Ř'⇡ְwbhydm\GjB5n%]#mhl\PY}[[D(
Kxكv4}{R5ƾ
m9Aم5dP=܍;^@poUa5KaP8P\rOMgv6?    IENDB`                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/ruby.png                                                                0000777 0000000 0000000 00000001120 12534142432 016430  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8͓KQ&*z(	z24r!\e77V"x!bT7R*c<||:[WAD>9{Li'v%IID=z/;"\k޸)ku9x]2$W0=$QH>}F|`n6ϜϤkN7>9LL(,.}>ּ^OMM|%꿏:/T]F$6VW))t5FKòQq"rf y_Oa|	pHJ*MTX8[^Dr-||[v(33!.44Ǌebʡrטu͚d+@ S[Ko~TKrjkoraPDPy5@Y?i܅Sg@'˼Zj_M5̻w.;'5ڿ_    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/css_go.png                                                              0000777 0000000 0000000 00000001217 12534142432 016733  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  !IDAT8˥=HaW/)W2!QԨւvp #$h~?}|4zih<p8pq9'*8f.)f1" !@,twmahf+33o @m{IA"=Ѿ'UWB1$d#9F6:kkrg1LO*iޱY@$B$lKK)g{7--wsj 
U]P lnXXS,6@MM=7"4732~H)"%fETU뛸bb[~}ЙaT#!D	1!Asꆚb8+t5_d;.2<9>"^1SS/QuǟA~.O(,PUUϷ%)!*<CLQ7
6i%ϗt1"tG8olR[LIbN5tp
39?`m''*3*vrqiugZGR;jiQ_e6x+     IENDB`                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/clock_go.png                                                            0000777 0000000 0000000 00000001677 12534142432 017250  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  QIDAT8]OL[u ?ﵥ}TʠsJŃF=lIij7=%\܈FwA=ed̘9eh4`	@}y1|%!ڨ$@`ݑdڨ[b@ p<xwvs7?۫*?X' 5="+=o~PZS!3}/tVQ.aXƁ^}wa|nAoe"K͕[ۋKt'%jQk(X'«J_]g)I-ݶnSJNu}{jHU?ױC>"3<\PHB>>y_
5@[ʆfh85rlho~4=	{A `(*ir~lzԜ!?j  u8jzՅ0]A$2c'>15LC ,CCmt (
g8Jp׷"KIװȬ鸒̗#5FMWŞ%Q8w}

^	Tǳx~\z.5KGep^׾c~ Z-ח'e6=ǳ]YD7%[Ln C_P2f6q\ƪGU5Hu+_.fZ\- Ɩ;0|p e,ʎE>Eg\^fx^A1i 644TukugyInܿ'_UBqN[fN}z:p\})a
#\y |,e    IENDB`                                                                 ./mvappsvr/docroot/db/icons/note_add.png                                                            0000777 0000000 0000000 00000001201 12534142432 017224  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥MHAњ!&RDZD,RtQ$]j;uSB^ѡK]"$tY)&%bk3twуsyQ"V*~o	"6DL>k4b<5MZkNAT@ z~7E8@!1Hz\\0)~#wӈӈض.,m@`} NP5X#b`felF9]!yeo==3@Vo)+;XռZ^t:8\0GqvՌ9=J֛;UL>}NB9}Odljv2ƓGU_stJ`#
IeQuvfWZX(,Uqͳ8	ʁ&>b4zPB!`:a"1C5 hiL4tw3d&|Wmv!c{CԪv5    IENDB`                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/award_star_silver_3.png                                                 0000777 0000000 0000000 00000001342 12534142432 021412  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  tIDAT8}RMhSA^אI$UR,ԓ"YA[SRK@*b
XbԴH̷u4胅ĭ>Z%0MKE&k7nhZi²8MqhIaBL45t6'	#(b{B*N*ΝrbR"v`oW~;.-qa)EOM}cn߰)w#_!N;dv0ڽ+CeRPW_^xFf(KuDnPV*666@EX#q-RHLCh^nVi|T*G^rY9>˲L&MʋDч822J]fܦn 6&\`+QBj{{[+"IH=]S-%y<ٲϴ'/$qR7{{{H$V-..T*c-	|IO>D&2L0g=G8,KNMM=?p"}t    IENDB`                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/feed_error.png                                                          0000777 0000000 0000000 00000001402 12534142432 017566  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATku  gL7;bBJ[E^AJWQw]uS 𦐺-*Ah]D/:ʦNe;dw   :>+|v9!B,#dd2dȐj:?69 gj?9p{9@JYi7@>Dh((:=2RB-	"ݛ\a}M<uWO  ,T!{&d4{6M,9ŀOC@~^lsoKtw4ݏ{TAC噷x$^J%eM  ?=.b}ȽQ#m޶y]W  R<rgE;UxK7-~EQSD>l{/\>#\8VܟJUS@HLa~&fqڪ5+!EE;_:}uYS
eE5W)Ş7vEGyu*Bc=kμfmCUDēAGwt-S#lax,.0}eC;n{Ah?iF>e)'Li0:b(($$($X~!*h    IENDB`                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/add.png                                                                 0000777 0000000 0000000 00000001335 12534142432 016207  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  oIDAT8˥Ka[/Y()%X(olNۖskn.-h;8fEP"jïMGˈ}yພ羹$ I.tulu	AX:𼂒ZHh1DnZJOJB{Z?`2`S=N$ő=;a&jwqJG#<"N2h8޵`6xցn_+~Zto}`x%XЛ͈	hXѿƻ/}BJ_G&|Qr-6AރEL⬡\U3:WUh[C6+	6.f *K͸ܝFqou4܄?d|XҥMvD`*_[#A20liR|xq`4w=\uQ	m+G|%$5Թ5RO*YGMUOGqj4ְ(X&
s1c˭(LVfRdjQ	'-1ATA>U	j4,pV"4L$e@.ArBY a~my Y])Q8tNLܞt2"I	o=CSd)__AF (    IENDB`                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/chart_curve_go.png                                                      0000777 0000000 0000000 00000001467 12534142432 020457  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥kLa_Lt3 9IsiЉ3̉Xy)VF(˕ff5]}k«kyɔ yO4{v=g v0!Ӑ!Kݖ zZkgyބ.	N~|
(+Qe"nV'pfSqp?!kё踆j<74M^IL^Y<_OJJ'd{|SYtXĪAkTWkej,`Ni+3abϧD/U)4PuV͐ɷ%F~ROudLKgdGw"t
duӈZ
m\CZ6g_Clw6v;#iD 5(f{B-Q0jAE^'QKm	_Xg((ecy=,LÃ6(ABam,>Mq1	
{ac'<pm֗e	J.64AE391;+c8ZGD itMۑ[lg)teS-F ܟifn[S2\R 	)@FW"߂`x?ןI+1ENܱg%,So$*sv!?U<@@&CAVO<xU:9`kUpDH_oK    IENDB`                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/server_uncompressed.png                                                 0000777 0000000 0000000 00000001235 12534142432 021553  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  /IDAT8˥SMRQ~uBAaaa0H7IRP;-\A~"ň\d
du}@A=<>{RJ9T*WrC\,ߤg[	øD	`Z׽S,J))$V99
]|;eIX""	v>j1ΰ	X|zll%`n`]4q{.7չU&%1K7(jj(p6%O{%XWR%0]^Fd2Ap8D$d	Lӫ@PenqcZMF_'!p5	4M@u~uX&qpsȍcr8qsFoVmJ\.U29ٲJWge
4RT*a4!sQ(U~hB5D ghL&l6œw7o\d
qv7uzߒ
)	k):|A~L$"I0cR!9
nޣ[b/;v
35    IENDB`                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/controller_add.png                                                      0000777 0000000 0000000 00000001367 12534142432 020457  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˝KQ߫ nF(n.*dRF5$mL}%5an27R[۷Zps9\.t F@n3d2iýGzzzfZ\{{Q[XX0W~EQI_ )mY,/`0? )Ǎ?H$"///ZZZBF>VZźķ3
+oVVVč~)-7D*y_ypH&<nvv(8-dfPU&f2h"\.BEp+_Xq*8h*e	Z!,U(j4dYAϧ/o?\EӋx+Kh4xEFJ7Jaqq^*NMJW`~\kattt*OFp:::f0wʞO6x>ACy #k+	ÝtwX{kJiLP;	g[C:5P,aʵON요{0(ly$Iz
]XXrL3پkcn4K~K:.tYIF(!0d    IENDB`                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/page_white_error.png                                                    0000777 0000000 0000000 00000001157 12534142432 021006  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕OAW5F"wxT#Ab!jژ&a"I5Qh]v?gFH'y2ϼN @c')GX #B,6MpiDYq^mۻT*R% 쑰l<όZ˲*8vH4}V,`VPViھH;wұG@cn`k[Duw"V\\(ma^cU g^H%@:kAy
wȧ7H{hv0R4BØ0r#i8-ʿG5Otm&Lzq]Wq'(av0*%ۙ9)xvvF㳓GGr\9}xgb>G߀WN_}$GbBpIĳ&{-aI?@>L'n"$>Z?zL^    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/sitemap.png                                                             0000777 0000000 0000000 00000000426 12534142432 017121  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(c 
f`f?4o0P{
~_V@|6-GEû_a>/ FaDb_Y)9?)xc((Peƀ<@af6XX
 1vu˲    IENDB`                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/zoom.png                                                                0000777 0000000 0000000 00000001264 12534142432 016444  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  FIDAT8ˍKHA̪-KC=CmfuP)DB"K$A
etJZyum0}f~3#s L|!!|g-V9Q鎺c`TC8*5bF'R!DЋkb^sP! Locgע≣.=^u֘[65޶FG ! P%wN5\q=(t@ȀѶ(t2)է"L?B2uXcYV$&a]ct<* Q1}E	)hYҁ갎6`DXr<:=UR̞O98*}V&b==hցqف+;˜JT< A!C:̼}nAH~0bM36+/痗sIĢ̾Ek J{v!=_MyKb] öa{6W03<U=c @_@,/fgkMq?)+H    IENDB`                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/film_delete.png                                                         0000777 0000000 0000000 00000001332 12534142432 017725  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  lIDAT8˥]HSaΙ$e:H ftuD &&/ I0rGk=\M]~r9YC4`(Tu]H)G;;;/P0H$R-
gi#ꀂuOS,9 a<7h<cp=# ný]tsy5'_KzB>SP܀ͨDW g!	Io?B
	t"A`wi1fD35HΆ0<o*Ko sBk&q_,	v^o·;b[&[[H0Gt$	YQiZh=WO鱐%
ȮO(o3P(-|#tWaq ƻtUS<J	gg1΀W1TF`9eRbf[(Ih\ de#)|(Yfq;X<oFfqiS`(PViڃXԲ/NWaWTOKM1Âu~`08Drb`ddnD|CaXrֆf9)    IENDB`                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/vector_add.png                                                          0000777 0000000 0000000 00000001150 12534142432 017564  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?>\XXX @46y"xl뚚6f >B,ds6 fcog^jkݯl{4keaLk{khoo^T\cMM`b@z~Դ{w
irS3/Lgeq+̻g+kx~
mK=ذ%\~jxC׭KUmxjڰmtS"kD|Jɣª͡*FJk\^矑5g64N߿;xl^'-}|f~5Ŷ|xy&=a@'|߳FĻ+s#M$w{k	L2G{w&v0j7=3Ǌ+l 1R6h(ރa 0j*W=SK0q r6  h>j    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/drive_edit.png                                                          0000777 0000000 0000000 00000001312 12534142432 017570  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  \IDAT8˥SkQnvm~i&buKŔR UHV5xP x</
^UhHҴF&m֝X|7fvcvi"NnooMV4Jb,Q&(.+i5)82T̪Tx(
$Ijfp\eD1J,u׋bG
cymO;QxML&g@	TWm܏Z
Kh[>WHl*JQrV]&E;k	z48GGLwIddq_׺-􎣲6!vUCF+9ԝƆx΢&|pWsfɀ *9
Y78/wZQl?bAs*|)waEŁKV,>62l$>xvhk<TFŦ9Lo!=}9H=Cv?5xSzIѵ n?ϲ1vDzoa9u=qM/jwY^V    IENDB`                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/group_go.png                                                            0000777 0000000 0000000 00000001512 12534142432 017275  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍiHqVԋzcTZ22<150t[f6kJNS(ۜw&cyM瑉xWZ"uћ01(%dF%x^| UGXVjLQKyžo	Mi3*\alNal[b|l|Ƽs(-?[?Ҋn#J,}݂m	op&}T&tw!	Cb.-ȃ CiAz-oKqg٧[bCt<VeTlNTd扐$oʑ.غ̖|@ʰzquIaBͧCL!Ԯ`!} 5oK!cXԼoU&
pHn	z`&}_O}TU:Ula=9C20_[!G'(,R0	P:X9 eYS":lVZ<BTA?m<dF"&$ϹPt <⭠yKSH@HXtU2Td; N	8j/PD'aK:_`Ys\1Mzn $RyLDS;qM q8m 5iOb [o,"w@2pCɍ	O};y? ^h^    IENDB`                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/sport_shuttlecock.png                                                   0000777 0000000 0000000 00000001253 12534142432 021235  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  =IDAT8ˍ;hSQS`AqҡDDꠈPDNvvtT,[hf!EA56ռ߹1oަ%M+6%ßs}(]ȲϕJXAG@jz\.O|>'չ	䗹\a&HRx<~*j-J f_h4o}|؛@H&~VVV>B{^vOwAPFn;D&Hv-\oc /)>i7dgm~~"nZ,˃ Y0z<0Kq^l6 NqZU$GݾeD/!0
9k2FIׁĦ<[%)>\dMP 9ίnq\28 6b`efN39ol{^Z".uxUFe]̴574>S*z5\q;~XjMN*-^ߺĞhs#|$_64*1~"^8	Hg꾟4HՋO܊	4 -S    IENDB`                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/building.png                                                            0000777 0000000 0000000 00000001054 12534142432 017252  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˝MKQLtZ
lӺU-
Zj$mڴ)!Jh1ه:h!s(ﴯO;츯J<*\udY~B!q5A85 B3j1(g"`y0 4eX  ҰJXS3Ƒ#_
GqkϥFFo.z^|΀\r5
_eHRPU5Hbqho4:Wne5MDd,Z֎m r>ᬔEbj_ ĤK64L|V9s286$}VwE\8?%l=zٓ*(
JŒ_2ק2&̀mzJ94    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/font_go.png                                                             0000777 0000000 0000000 00000001274 12534142432 017114  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  NIDAT8˥Oa}m@Q[Anb`(J%89#1:@'&0T)"Q `ޫ		g<<hإϙa\s5!^t~,lEBz[z|OsyX)!1Ir#-@2=4§B+S	/mE=qDEYcәԫn%҂|rFr[WYby&@qh#g+ZcpZ7>%kEKJmv棥ˉE>!mB[RH R%*\!T^/6	H)4\HR%ggbᲶ ĭa)p8}=;ݏ0MVJBA#63H}jML
Lѥ"  R+,M+8X Xڈ$O[Cα"5AO"Hrb_>B
䕡0z2-Ƨf'ەS)**)%ϾGD(&@P_vf7a6]a'LoFɬ_g9*1    IENDB`                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/group_edit.png                                                          0000777 0000000 0000000 00000001421 12534142432 017614  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ[HaWvT#jlmu"&3g-3E9yCy*ۖHP	m:̙Pm!x\}~$ MV8,Ǳ	:}OG=A=ֶc؝`#*6u2\e)`m?	]Ur2Fǈ[OΙ%q-?׵
x*8uIǺ+C82eI.fZ"HaWd[oU Mhe,̎:M8A4PYMLX6XQ`<pm-roF+	@u
X:nJUa{qm@4_aHqV&ahNd&YޅY3mV{y6KE </Tt_agاaܟ{ 77w1z1(PB,Bח-D|_bb;IFvoHy=nz@Ҏ^}bX&pX<VLq"L~Wv@G1/XKÀ( #0P@Ƽ
F2WD3 {cRlNT`qCP%)̯CsJdo^(1ZQC_tEIY\S?/}/g    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/script_save.png                                                         0000777 0000000 0000000 00000001444 12534142432 020002  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATMe  }ofvgQR\HEBW/^"	
	v:TDP:X*ݙug{'m|uk̜WɸJL46&3|~_ vʴ8.9XVlWq.HuV<:ѡ^Ũq|:]Ê>l;ם82癥ξ=Nδc#ˈ $fMWׇs,g3Im\bleY$2QᣵF8e1j|]=em|!2<M~aДŞk^Y}ҩN? >^ݬ:QE`Z3*U
!P^ d-U\<{\J&2I?O0)ДE?#YtiQ˛bn$-ڶI]^է3jhPVԲA+hնI]Wʲ7eyvIaѪ	oR6$3yׇ_{0ڑ7Uuξ{ ?t$\}R 7.fRTՍ;>_f0?k0c0דYvA ]c/-V{;~beOgԩRF
c_wwTLs,xB    IENDB`                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/book_next.png                                                           0000777 0000000 0000000 00000001276 12534142432 017453  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  PIDAT8˥SMhA~MSbd-D!U\OL=TV$(H=xQ^<zAD,
"ZPijJZB6zI;39x0{a6lHM-˂'fR(و^i&z6Sj"}nz(1\5pzPA0{$ckp%?xh!Kx<P] 9;QIL(t퐂mm^!C6^V\UUKibd\'
:yP ܝ%2[KZ),i_fIR&f<ڏUC_T-䙩-F0XaTrzd.mV궱n0<w^A[\j/R8b(.~$
BО2=8ٗoM̫H.Ȳn~$It:L /1'1v鱘>u O)t(Ģn|J|:L4B]Hid4AlWJ$e_^I6:ο9r\E    IENDB`                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/phone.png                                                               0000777 0000000 0000000 00000000750 12534142432 016570  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  zIDAT8ˍK@ǿ4%]
p7ݺuuprh7R 8	Q
K1uJKВx{wn+ @};,0[E(EBc<RsO}z˲Q6T*szbf1N_ke3WtU&LօeHe 01
VLCwJd OmţLo+xMFz}6\-MjdF(Wx<v2̳l`qT6	
Fsض8aTaW@PQ`0h.K#IBhCkT    IENDB`                        ./mvappsvr/docroot/db/icons/sum.png                                                                 0000777 0000000 0000000 00000000441 12534142432 016260  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(cπ2ѡ3GrÄ)ɘ;CAA	s XPP?<L9?d	fT#v?6p]Ƴ6 8iLh
|޻q77_ݛ	[7o_w~~R 8zB)    IENDB`                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/cog_go.png                                                              0000777 0000000 0000000 00000001533 12534142432 016714  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mSKSq>6'zG5|icŠ%d>, oB~!G}~?d5_Ĳ1t95v9%/1~<ys/*\bAYc IRw>,ښ{Xl_ZZ566Z̀d'؏ulJ`j5DQL`A9x<anF&%,j*
(BIl6MNNd3yhbx'EmooC8V?A4ojj\Pt:uuup8@irNh
8hb	VX*z@[cn.Cpd%dH$N'X,j766 J|yhy[
5	SSS
Oii
5ROU-/ep@`ue
FJSL_d"$3nuz`;,Õ]$Ξ87776JJ(g S(BFa5AFUzmP=onn#MI&v>		$&Zn_RYT5@pRfj
2rن`)dO+O-`8Yԓt~0,Qjok!BxAPk>aZC+Ǹigggsnpn}s Xk<x\.7@+8.+\2WVP哾C1;    IENDB`                                                                                                                                                                     ./mvappsvr/docroot/db/icons/medal_gold_delete.png                                                   0000777 0000000 0000000 00000001324 12534142432 021066  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  fIDAT8}oQ?QF2B.,6$,$hWM#BKA,,X M!Zwu:Ǳi;*snr|M 3lqoȓn<}lQ$UZ$6,y([[Y;W' ApQ"\Fe2b	8ۓ~<:5''wH{1(:ȳRj"2;ͼ?`6Ex@VZx;	vqiP
!6bO?@irZ+\	q>E|Ԗi%C(H#7Sk1xW	ėGy9h{FRX1>e; A,xt@aK,jAMW٫BP^MF,^~2ԍwذ:%q/+!]9ۉ"t#\߽c=W _z"q'xU)zZS.!5Uʲ='ɺ͠\<^
f_H̌Yhi |ӴYMԙtI]&\7To	jps^Kȗ'    IENDB`                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/link_break.png                                                          0000777 0000000 0000000 00000001221 12534142432 017552  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  #IDAT8c?%tcpW]u϶k 52^Oy]v7d'wLpYπk[㭨EO캷&t⃃x`ggǝUn޼ykjj&_H wA y:zFFFl>>>]'Nŋw@
ݼyHȑ#A@Az껈mRSSO4) ???ɯX!H=H]MMM'OTޞc޽Ν )8tڵk9j@' u  }`tuu3O6$((h/77A
>Ƀԁԃ__뽽WZvݺuOl@EEɃԁԃPSSc:~JJʗ@3<<< !9:	$Ù<otȻF/g@{!NW&NS7쌦Q	!n>Q<F 'zm_=Q~Ǚ{ւ9    IENDB`                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/report_disk.png                                                         0000777 0000000 0000000 00000001370 12534142432 020003  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKhSA&&1("">ҕ"..@֥ R 6(Aŷ"ࣵŦfцXMI͝9ִō8p?QZ>p_r,[ҽ3Vc^HPb_<k^&mnn>x/l,A0QDNx(Ҳs^Rh:yqDV+j5hϽ	 NB,4F`f+zYesc}_0RWW7XyycS졒gᮣoBLU_@nH̭3V/'U'!rcMsbI\#d2\.w,
ZojE?(%=؇fQǘ
B`mkXŒ}x
;)Xġ(F#XHD&AS߁R
-h\'X&_,
ZTzdJ Lr@Dym*
BK7Д!_s8(ch/1#f<aVrM+Q!5U>qüdtc^\Yu֥%VO'MGKAY2} uDG+    IENDB`                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/vector.png                                                              0000777 0000000 0000000 00000000741 12534142432 016761  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  sIDAT8c?>\XXX @46y"xl뚚6f >B,ds6 fcog^jkݯl{4keaLk{khoo^T\cMM`b@z~Դ{w
irS3/Lgeq+̻g+kx~
mK=ذ%\~jxC׭KUmxjڰmBT}Uء*FJk\^	 ¶0>>3aǋ@c@'|߳FYxl[K2 5훞[c6 FP媧*V=@B  R7    IENDB`                               ./mvappsvr/docroot/db/icons/shape_square_delete.png                                                 0000777 0000000 0000000 00000001031 12534142432 021452  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥=kTawaW+QVAX[X
FP[A0DA!e9b~[2sΙa2J !Cpx 8z`c,0``y1 lB ])@L4DhYF*^fhPk 	BLi 	FPkݫĠA=]Dj;I )A:!P[z~.sz˵st \luNm`UNfCO.ݳU:0F	"ܺJf߻G<s//QY~X7zAmSXa\>W#W6ٳ[Y#`rT]`ONf;73FWoKri_y4vw~;3>{ZDnxxx0Xvu    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/html_go.png                                                             0000777 0000000 0000000 00000001264 12534142432 017111  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  FIDATKhUWFIބJ3/ԶQmCKQP8tDꬠBgՉ DPP
P5)&Z{-3:@B,PU~jUNJ%$#bEQsrv͎#f8d#qk*ޙ*@lNR#j&Hb*BG)gt(6hsx
1L_҉nXʨѪ
ޒ7)
+FzYŅ_25mLjҨ-8s,tb512M(3U'81!篿RqnLeE{5뗍3&,&h"ܡ;tB_bCd7e>OSe7]!+838=e"SlcG;H7_|M5;!KԠYYdLve>Xu7Aqq,cbMJ$K4X5mc{y<[??~xR;ozgvd|ʼyc':[`yl?坷BUO:    IENDB`                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/comments_add.png                                                        0000777 0000000 0000000 00000001210 12534142432 020104  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅MhQܺЅЅ.\J\FMUPWXSC)b7v#Ei+1Z[D(IL2IN}(xsg'Bm$LMxFΒ gTqUge"Y*Vbݍf1X_vﲫeGeKZ<)`S*/Z,VU`dlWYKx:ʘNYY琂Oܒ`$GմX:_)2p4XuV`.`.`.vT:/d9kz"h`.`.`.-9z'CćIWg|so&O̸2ssq"WArb."aWd'Yd.zu!\}Ĺt9C1Z7FI>bGљ>|JL^n_>&#Uq}ѹ{~y y.DcvSs{r~ Osl(*7 K-Ny!3š7],yh]SwU<76\_{|f-Q&    IENDB`                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/cancel.png                                                              0000777 0000000 0000000 00000001113 12534142432 016676  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥kkAkH !)4^cƘ4eJKi(̇\ ĕή;OgV7U/þϙ3`

Fe`݇[:WnF{2 28dA2I>w&B;6Y$
ZŽ=DUemӁfZ/Rm	Cz/
tB ̛NJ	a;rdN,XX' >Kry88 x__Y7ͫʹZȋ==tajD_RA#(Uxf84ݹ9n2$b'C{M9Hj9,=ݫR,2Z˾u0(fԘycRݵt#]畸ݿ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/world.png                                                               0000777 0000000 0000000 00000001633 12534142432 016607  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  -IDAT8UKk\e s3d2I&JSڦ15B
(`$B6n"4U)
BKj)$iRB0iK.fƙɜdΜM+|yxx7bg&GG#@0*0"uӑvc	L _3,ۈ_Rȟo~&G-/^l|)J$pY16}KطoP-h3|ku!t"KoST-J>`G0*'>~gϫƂNz$}ǃZ;SBKym/Wnļ14z]C4#.@)l=۫D
v"~SbTHw[LH9wb\gBIw(,E+Msw&`6]໤vT"YKQ[(o6Ll*4MA;(r_!Z"@WMte뤶FpVC<	eP
!fJn5IşehM=Kx7!H[47v6
TjUCiȱV$V>&d%ױ4lcymwd]ZN&c
KSغdr+@/r(ϙ_.(K湅{zZs(.qim[XUҍ??%f~3s {~O<yaCR饯_gsTx3yo";PMhK;lg53>qǇ^B~ e(w3srF    IENDB`                                                                                                     ./mvappsvr/docroot/db/icons/music.png                                                               0000777 0000000 0000000 00000000601 12534142432 016572  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT}1KBQގ$aM-AKkruƆ]+A$POq<g>Cp (1{888:q(yE13W|KL L EL""bx1Euh:)m~%NKE^C84)E#iuQ`厇4u"3z4yIZHG%tf0aD'*&rn#mQ 'I$Y=37Q0`ܽ    IENDB`                                                                                                                               ./mvappsvr/docroot/db/icons/funnel_widget_icon.gif                                                  0000777 0000000 0000000 00000005311 12534142432 021300  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89ad K   ~ҩۻͪb{<ҩֱ͝jy`ȕőœoܫnbPݵu빁ѥƝ^DΤ˜uVs5֮VЭԫ9ޝ^زҚbz΢漩dעdfԬ`ƔڶOΠuɄմ׺Фlɢdq^Qxѱʥ4پ^rIp뾉Mf鉻I̧ZAhĎЦB-ТXjΌth֬ʠʘխDěڴIjسװصZԮ~>lʛpĎvkʚٴFNAXʗȘGZͮjh鄶Cfڶ̠Ùo`^}۷ll꾃Ԩx9ҧΑ˛λٶڳ̢||z댾Jsrqii[\]]]ӴSǠ\ƙs껅fҥfw=u7ԧٳ_热PeG_֯۴?PׯTϢԵ֡ɚոɚD4~@ϥ|뾅Үq!     ,    d K   	H )#'\YGE*MqsG5B@1#Wpbƅ8
 98H͛!p*MJѣHgf^I@͘PIׯ`2E7@#h"4۷ni@pJnfT8~BrX#@`1S[uW˶RQı``#n]sh-,X8t)DFUQ#C,IJp\yKP 5fhh,ذ,=
G7]"Irϋ 4H s@(|=`AW{¼gS؂@5DJMчL`+Аb㑇Xh ̔A0-tb8}005rːI^nc$eZ$KoX)Jp.+~D uH'?trXsN Q4$EwPaK6=df,,xI)tigjz#L#J[oЀB?,}@! d)qhYnSdmU. 
>B  ?
$JȒZ0ץ0t0qXc"礂&縉>L(FA-2Gu5߀.؂
,"D[
+[	22E!0gxJX5ǔ6cs;aAxpBlx6`&˄`ֻзb.l,H0I2-xC-0q@HrsD/;05˻r]8(7b
9h3r-|*B!rav@:6b<ozL?/-0q,m`hֳ	MLkzˇ `#
 x[CV`uX'YEA2L.sTzp'(DRT	x pG@*U繡bNY`YRq=(7P0e!,P'\6	V7"@^!XC VPo1 h29-BB@	8/| )|@|>I#[`
Epa&` u@Vgs ЯX嫼SX`@uT	7[Щ ]iH`.$vXR8MqJՁ 31[ l @YPuU81~@⡉Y( !2
s,|x@8iI.s.!0zg$-0 A':CHIXRuz OO`51HW03b=@Y%	?0'V W;%gu""`#lepE6h d	`č&( <n`E*`x!EbL`"6حXA
У	
BlQB0c#6AUH.nTwZ0Wl kh By{	0 e3t6Hi(	* `ԣ|`>8ª@1*@ȃ|4Ä0@	Ht Ŏ %1_b@Fe@c#C`QB7"7KxyRȅ"+iF.`%63w x!vH(ܡy0" EH!0|` HC`xPDM}Jz pb?f%J`_tJ,OxMj[ζn{Mrc-  ;                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/chart_pie_delete.png                                                    0000777 0000000 0000000 00000001727 12534142432 020744  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  iIDAT8}oSu e֕uPdf$fIjxaB"\Eab0͸Qy.jוҕv[{~o?Qxܱa[		l2*6wGHy?⛍1UTlTWb*"ʗIaZ=B{Nm)ೱup`5fCSP//߿.m-&.77у!&X^r-Ă?{0q@n`]/T܇U:(;pZYRdbX37~?7QOb gUxѸ&3B]ۋd9aqTt4Wp:hu\;޲6
A@f& l h\9{#g:D6q:_M)o! cFSh 4Z[i=-pC?T|bB
<}PdkP@qAhwF˥?9Z-+$ڥ=`!԰^̃2GA8~XE[2J6RRf#>uۧ`,".liIh$Q8m$	8ሤFg4سC^m.,S*7zDct2Ǡpl3)_ٍeӃU]/N;%cr+LYؔ¦2K3Ā@op( +o١cN
0HEQ2z8PZRa+Ons#MZVsM!9	>[ʡ4ojL~];`T[ڪ@C֑݆i    IENDB`                                         ./mvappsvr/docroot/db/icons/mouse_error.png                                                         0000777 0000000 0000000 00000001426 12534142432 020021  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˝KaD(>N"A:XV6I4AI#DW6\ڪ[-+'M֚n=tWƆG>pu* U;w$RVvr9bҤS[Rh4iZtP(T*H$
Nvvvv<L&FMs<σRsKSƕJeT*]VӅ6-P()I$HPTP(M"ir5W`P@f͖<ϦE҉|f333e*Z2r~P2}MSvL&fC,2bBpgXuۇ&|LA"+!*Bfd^@vup?S=9W-X10NLDY.Ya,z[ sߞ7>=sb`X,]"$"^E_)H:<<Q'xŢto/FA5__:-.iDO oxO|KKFJcGsEiEzB% ?ຏ2;|H#\cvuX+smq"[#DǷKRGc?ŋǈQ~$BGA "#z^N"mk    IENDB`                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/medal_gold_1.png                                                        0000777 0000000 0000000 00000001165 12534142432 017767  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}kAߗDjkE2HA.Kdł8*t(JCEJhj|wILT_x;wݽ/}˸pň!2?YcJa5:FÖQˇ }"`===4ɱO",XYءrI/Z_6gc<FJ9Ih{)um{/wf0^2fhlBI$	7)Rf$9}fXczPӌs7ka4KX{rvt$!cvTjiĂ(@,e>(M-n ACi[?FQtZ ı޼P1"&$(Iy>=3G `qrCK*ճ3h}bF8̞
  )ZԣcV"uhu^t_ -<	$    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/application_xp.png                                                      0000777 0000000 0000000 00000000652 12534142432 020472  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  <IDAT8˥S=KQӧ	hc'kDTl% 6bg#VjN4B~83K.,;3o_bwt57՗w7m ,h2d$d$(a~v1]0Z?UemץXsC+=zi,؆|kd#Qɰ`+	ez`Y@]  N.R*%6k{  
r-]1d΀b `4$ MB1FUzd#$.b05]_&I    IENDB`                                                                                      ./mvappsvr/docroot/db/icons/link.png                                                                0000777 0000000 0000000 00000000527 12534142432 016416  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(cπ2IwViykHܝ]V7TO/C7>]Fl`~'S{ضaC?	]M'sC59QXnfi%A;BvN+I	V{O_Hm{뚚`j^Sd){jI  J=U    IENDB`                                                                                                                                                                         ./mvappsvr/docroot/db/icons/shape_align_top.png                                                     0000777 0000000 0000000 00000000626 12534142432 020615  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  (IDAT8˭1JAE߈E<kll635ADDpgߠgvD.Uݝm ̥g\X,6V|)|tB ps%t}^W0qaXpHN`C2Ե~%VHo7	 s<7YA2"ʄ;AP*QL9DZ[LOTFn>+LSRu<$QES$+JRU2gݶVP]jSj0z#w?|lg$#!    IENDB`                                                                                                          ./mvappsvr/docroot/db/icons/report_edit.png                                                         0000777 0000000 0000000 00000001372 12534142432 020000  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍmHq B߫/ѧM"((RQA6QԂԘsZDikHe6sN/ݖ-R|܋_wg^Ax|= ertg%@ "Bv|bHd73'QT(EoU.AQT@ ~buuu]Y`N%ؐl
"trár ZJB>	'l/Z/Ɓiv1,k-^C/Ϣ2Ox/hghIqvw}QW|x[ OGOi;邈; V(SF
AO7aP{Nlwa)y?ډvڊ	+èFGUHOR" r<z,Fg;&	C6oTFI,79sq:(,;nbJ˗~A3vz%m5)Cp*dc;fggg.EmjtO0ӟ!ƫ-x_z:1VNn2w}W=
 ӎH4YŧPMkw3v;l6f3V+H\"Lюw*L==0#!DTtο*%ԱC    IENDB`                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/emoticon_grin.png                                                       0000777 0000000 0000000 00000001312 12534142432 020306  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  \IDAT8˥KQqQB$ȐJVaIEiUZ
n}(* e(0`T3k0A?lt7sZV<p8U*k=7qUzUCT!In7/pM
L}_IvP	i.T nĜd`<Z1˨˃)#(k؀uQ`GL*3{q	4oQŔ)mŬ;J BoH%/,n>Hžxz zL$F]˱X[vfQ	Qŭ&܋xz*Bi[em5_QE
k!XS5TY_x*"D~^Ics!Fe<Gb{3Ad<	*ņLo]	Q١]V 4-0T13hD?r'.=n}Hd'\|Ia&]<uCWthLAYi|e^ssc	"xLJmׇYyύʖX~ B_r&.>YƝ%,%LRS]n1    IENDB`                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/xhtml_add.png                                                           0000777 0000000 0000000 00000001277 12534142432 017430  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  QIDATkqmȔӒ,Q2ʁ?qrBQNv&NE$͢hKI2۞L)'33C13Q{ŉ=bNp^#J)w5B0D	ëEA)D9s)MԄ jHP`xQ(N7(WVR2m
C0^\cOw3cлFٻyNs'v"Ԝ\IPY"n|"^|Ϣ:Viocq[=W4	d[:Ǩ/EJDT]TaF~
8,VscOSN\dS3Ȧ#y&|B
	u]y	.T`fd.A$-ֱpnw1<-^]|(Dq(Dq4i/{vl$f׊GB˷'&4'4Nh*'4WZ*	?_(Ev8/=gXI{͏7)Vs
łlã>жK}2/_Ȇ΍t<{}?,8	IC?]y    IENDB`                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/monitor.png                                                             0000777 0000000 0000000 00000001144 12534142432 017144  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˝kTA]Լ`>4],EHQh
 i"
&*,`iG3A%彙ݱxC]fw~33̌zn!Bxޣm]"֓.3886A̬}ƌlnmq+EWϓeo\p4]TC4 X04 <L9GcGC#z#@{#n|GC	ғQ0,W43O&R)"r (!9G#w O!2RϟZR\:(ܽyr*Iq̌ol~> <XZzye}"bhh膪"^ʧ n|E/^<˓Ǐzgzz~=~Y9C߉xu*Ir,/9;;UKcJk*fEcgY_Tի `jjꝈdj/b&    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/page_add.png                                                            0000777 0000000 0000000 00000001343 12534142432 017202  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  uIDATMU =ߙ;cYA!Y؟H*FEnZ)U-KTrYbj?DVN){<f&*a= A6~[<_^:g 2Ӷ׏ʤ dB:{i:gT(]>ʅt% }6q2=V}.vǅw}z᷶/bPfvf`ǆY:LI@A	JD(JΜ#w
o^7=	 BFh}RBdq\ֆX=)jCL5QB ZBP!AD6&:@ч,!dLP
Z]ABP$)H ~bԜ/G&FdHВ:}soUkZq7+qj^a(d4'?/g:x#m;+ǽgvf}7->hgߞ1+<Y#;*Z^|gEJZrҿNGu7<cFW/Ngf4˪}96ߵ܉Q0i΃;ǣ|<"M@HiP*}k'!1f    IENDB`                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/chart_curve_edit.png                                                    0000777 0000000 0000000 00000001466 12534142432 020776  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥i0a7LM4SL˒{gMɱ%20Jr6Wҡe4QMTm荳(ǟ24fdm[Ǭ1Ƌ= `Nh(/NJ!\ܺx[&04K[n;?m0cwv^J۴)ԵFǏ(jB[D1/sdeutyᬕom˟<e/!W	@=oOpoa0,$?B)+cyᄖdXP>?xN{0V2`vShI_]jBս"3-DϰvJכq%M5Ft= e늕U$v$S\DB
-c%bA#kgvC[ ذ
[Mʟ1ق~/#<)CWQ)JN"􃜱OQKaOwǠkI3ݪ4pdFegEĂzC=rNz,c;йTpmUf=:<ꌹ!گkϪ4&3A{HY-X>[e
!	5jhz`;Gn,XC6m]@gB][r!lBk +h~(ͷHƊ@gSEU߶UeX֕FP l    IENDB`                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/creditcards.png                                                         0000777 0000000 0000000 00000001265 12534142432 017750  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  GIDAT8}OkSQѶԧ4Ui)T(.D Ap/]67ХkSp!7⢋@(HSiAHZk^l6/qba.̝s;ֳؓۊ b 1#K_ߣеCu+kA>jiCD
4M[$=:]?0Vv8C뤆,~0q XYQuKD 9by{䖶X#H|B7&Fl`/_s|o㠊ŢR) T*DQl>ADVRP(<mCN#˳iBJ)"cDpp8,, V*=}bP
e;/ Rlkw\Z[K茍%U5T;aۧ\UBA&66 V0Kį2 Nd=e͈uL=]ۿI06Һq> 7} X	SSxdk܄b è	\ץ5l9:B<l(yIc^'eYGĢ    IENDB`                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/page_white_excel.png                                                    0000777 0000000 0000000 00000001227 12534142432 020753  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  )IDAT8ˍOHTQ;D:L&DD)-7AQZb3c8o޻6T|;)@)H>WP	E5ȿv4 QR$rY^^E1!jpWֲ9'u8'8+Xpaq$a#ˍepW6R)
d\/-$4E%Ȥq"91R) ֎&-JC4cyZZʋ~>|4¼Мf5W}hb0|3Y=jK<~ ~TT$՚F021LW'$d0( } m+gHliZÞ>Ͼ珄Q "(p5}iap!i|gVSMƘbsrZ^P8kmp֮VV]:{L`/G*_>    IENDB`                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/picture_empty.png                                                       0000777 0000000 0000000 00000000717 12534142432 020353  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  aIDAT8˥1n@7J$.@CWHR:(RpT N Dk-+ڕwW޼7m3z??d!M]Î_??zwa$ux$ {>2^\^~?J1cfd,L&Ӝ? ":SM^Mhri,		, 7DdBUo֝k^2NQºD,-8!Vi&V`MSpu&k6acߦnSEgJ#hA&iWe^q邼~#1Nnz}Cy}Sm=E?z02    IENDB`                                                 ./mvappsvr/docroot/db/icons/dvd_delete.png                                                          0000777 0000000 0000000 00000001440 12534142432 017553  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ[HQz_7}2)e
a>XSDZe tCX[0,mMCnvΡ~p pJR)QL$J$I@,E"ɱZ#f!1'~?vvvD
0ij\889*<mXd@!v>tt
x֫~;Ss2T
tm64 a/_a}awwAn7h>N!2 ֳ.D]-{8,t:2DLA,NC%FI	(J4779%%%8Pp jECCoj0L+bl^f:^/|@&
l>;lXԚvUnPe=g/Әw#GȂ=T_#4I_"FS~+3c]'%fx@)`[!uI O^ξU/,1X/f?O`3,1 w bp'`2ǵ<yє̈AV,j(mX[Oo!6rai<ote#~q-mjWuExQZжNjۡY    IENDB`                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/control_rewind_blue.png                                                 0000777 0000000 0000000 00000001351 12534142432 021514  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  {IDAT8˥MoQXtC#jQ&nLؘhZ#1Zcbڴ6PIJG((Ps.RuMLysΝs `hPgf@&I!I)IՕ'3~xJ|MYmO}QzgwC7LHP#֢c0k>mqf58+ *52"Afv59"&x6=~δA /,3Geuȕl<߇;9lG Aaكf{<<Eq`)"@ڎ3:åNp [&a%^;,V ?K |v.W{;V!ǰh^bK @ 
&\Å p2&th>@e+DTxҬ6$;Oz!vP#&.d0ŨT 6yc:@2OԠjh(k9R9=[20;ffkĈOL/0om@cr*	,UERp0s4](k͂θ1HLPg YfDQL_&/VyN)vBgGu6&e̄	<:.    IENDB`                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/text_padding_top.png                                                    0000777 0000000 0000000 00000000354 12534142432 021013  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   ~IDAT(ϥQ	0#9_N~RV̑B<G+}T ٟ`Kdm+!J:Ya#VB
N<`Cvx%CxEVI    IENDB`                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/bell_link.png                                                           0000777 0000000 0000000 00000001522 12534142432 017410  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕kHQƅ՗Omo3J+d6o'AKa2CTRQ̄,4s2M:/#/(eZ^/4ҁw  V8cz?S@6S1k-  {;O	yYT(YЕ@&b9tۮn8;6(њpd޿g{=^.<kXy>h8:a .Y21ۈXX2;U0m$dp{D
p\b[4fðĂ<Ee :f{*vO9'-[#z9F`Y(>k6dJB˽y`9cqݞu_I(̐rvDb8pw%b)w5 Nc2Yf>sOGEuuuP25*K^ybC$C4*h`!˓dCRpn
V1i{U^<hVI֑IKP(ZFqq1]R0Q5?y%tT.oXHljE__t:9=>-?@XXXnN
pGF.	N
8I	R}jbV]<@āp.%++[^^V~hWvG~쒽mjP_hGd    IENDB`                                                                                                                                                                              ./mvappsvr/docroot/db/icons/award_star_delete.png                                                   0000777 0000000 0000000 00000001521 12534142432 021125  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}_Hu?yYhMe*؂!
AE6b|C+UhXk$sK&Vs-]yz4s^W"ˁZ3k:q<~b%g-	FhV5j`V9ٴńqZ,iCTkLp87Jm4|:EvDDS<U;]5Q~v{o*h{=D32sW8)8ȭ ĉСuHWב~G$sեLӞ 28'" ""' yDй4pZ.IiyE|z]zn$pa`KUw$oMacP"Ba@:胻ۼ{^D눹bW@yMXOj_ZzcL%pe2,_@j/NVvrg.^B[nx͈."
BX^/>&۷x䰿q%BUɝ(A/]#Ќnl^nsyj;!uP8!YjZ{u	J羥X/\6\yRgNfly=943_Ow9Nѫ"WV}󟪗Yԫjs%-]Qd^g B<6N%    IENDB`                                                                                                                                                                               ./mvappsvr/docroot/db/icons/clock.png                                                               0000777 0000000 0000000 00000001562 12534142432 016554  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8]kHSq}}(
EAAЇnAXVdYդtv<Z.czt{zCGuwxxy? 7M#ԄxGLgٜɽHs@LXZ^+f?~;tgo%
<\FȚ<06o{)CA:`߇N29R_ 8ww>l6׌t7M}پ	7EF܏&MszJf-KS0\uI!}ًf>Ʌ]zd&."^õJ,.42I3(PdEىzG˅מ=M'QH;ePQxt5/ހG0/vT\}`gDhc8	/jRTp
ex+JP/)T;ƥ0o8ާx^+e/<6iFہ ~G
[app@ NyY&^tRE]"taC
T%}N+BŨyY&^xrk᪾6W ݇$+ΪU0L`#ZyÙZ}<nYz<sce#dU IM&~bRP*-+liB)0	ttwf3ោi5¢(ĂxAUUL#+OAD ߟ    IENDB`                                                                                                                                              ./mvappsvr/docroot/db/icons/house_link.png                                                          0000777 0000000 0000000 00000001544 12534142432 017621  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}QKa/	Yf& -cCܜ"rALWN6]9#ee~P\=_B/x8ye`퇫է[qu WqC>+Sr{R@C!K_*&lLw)i0ݭAY"ԧ܆tP5OD>U#К9/neVZѭO?VP{u&)!أE w8x?3͠tpYq3)~-1aQt@@K>N=j!<xױYtji{OUa-[kȐ2hz8So,4W样LpbYt|%}.A¿cL84]== uicmFhjP]]pH6kt2|V\.,:::`4뱼F{a\^f10[vX\\(L&?77p~V˒뽗.=m JKK 2I;쿁ڑJ*0՛zNN^/&&&Ӄlu^5d y䂝%Ø<ZvAII	\.x<b1Rs!b -ܓqD6mkt2oWTOpG4D &&HVVVBnnT*((
lF8#f'Q0    IENDB`                                                                                                                                                            ./mvappsvr/docroot/db/icons/image_edit.png                                                          0000777 0000000 0000000 00000001417 12534142432 017547  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥YHQ~73cm-oTD-ITB{PHE$eKA=Td-PBf&Z863woSF=p{ZkG&@ő[g܄qӆb9Ƨ^2\vp8oq !L4SZcM8쮼H\;^cj~pҏ$C
)̉BZ&EәWCh0A!Rbx6m;4oz/cs/Zt؎qq'J<:
BBi$Kq
TB)7M_(B\%Pe փQ1/;IϞgǇU
gN֌ľ]|il#2t1|Aa'LHE[3>.~X2`mw%vU#8t:`q$V
>ZMs|hbt=Xs)2$fr֒vznЊy|k>Ġh8mTn8)R	2jaʽ؝h{a?lĿlr}q,`[B&ƞUѐiCUDzTm*s4hFlv!ڊp'J@5^q    IENDB`                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/spellcheck.png                                                          0000777 0000000 0000000 00000001133 12534142432 017570  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%*8vĶﱎrͪlu.^fvjq31 iˮȦ"޲Ⱥnq5.pw赞	\bn>Ӳ$޶Y.jIJJ35O`<>~]jm3&?oP֠Z)ZS?Go`<?uIqLMuR!\NR)J]#Q}Jw07|x\Ў<+P'o~a=7obzGO3^`yX#0Ԓ\C9bgN'J?g0=(3!5V3>WO/j^Ԝ>fLbϳ r>ls2/c/ATRf< zOW?ϐz6^	ПENgH>AqYAso,~Tɍ w}F#T    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/page_white_camera.png                                                   0000777 0000000 0000000 00000001220 12534142432 021074  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  "IDAT8ˍ=ZA߹*Ic4)$A,
kf!Xw&&**qר\?W3G909`y()LQܑn'	jZ6ncA<J}(;l!1JHt 1L Ăr")FIbbl6+!,H|7FE""$IqPd20͗
Qo"|>TUEP/OJ%b18N8DQP5GnGXD B(_-W|@لjE\bt<(~|}ܝBXqVx!!R<eɡf÷.0f9.D.d,]]@ r4v邛S=P4zO48JܢZJ!'rrg}鬪;2QTh4Ղs^WV# K@NSj3^f< H5sƎ*'麾1]PsVY9]<@    IENDB`                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/application_view_list.png                                               0000777 0000000 0000000 00000000731 12534142432 022046  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  kIDAT8˥JcQ\El/#(!E6Bl$ VV>.bmHL#bak8g泸QQ6d``΁9S,QYܬ=U w䎹!.Gf0w~̇ۇ_'imv<PM~.LE\}1p_T&6>'sMFHpO	ePLᴙ#wLS= %5e013bo*&HQϲh|:yBY_U11ˏ
[??DbarQ&>!B	!|BCj n?BQpw;ln:n%ܐ{NyPufW:* -    IENDB`                                       ./mvappsvr/docroot/db/icons/xhtml_go.png                                                            0000777 0000000 0000000 00000001271 12534142432 017277  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  KIDAT8˥MaqGh)LI-Ii`'%Q);e7VBǤdGd&dĸw{<yαQjS/NbfLGi׾Dr1r' ȂB
iI_VCԈqrJ4A Jo JMʔIqX/en)%N%صĝl_U\\y<ξ947&d(^~10\ж8Q<Pp"Ԝ2TDf4}1$\^gۛȃPȜ}nԐpoi1"d.R¶e_,Åe[yճ9ԓ(W#Xкeg6<i9h<k&fPu+MQ/QV-Bn&ˤjwQuWFp`hʧ*BTkmj'L6	M!!0|YF)_#-u04xsCb^l}xݶ<yWdObNƕg
نޖ>{es@$Zl5v&~]    IENDB`                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/webcam_delete.png                                                       0000777 0000000 0000000 00000001445 12534142432 020241  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uS=LSQ^J)W` t(hjHlBL.E#10v284LR-ZϽm|ɽ79f_6t:\:Fz(JB8/߿ ¼`	V8::B*Z*OgggW[5eooO"y7`DGVldΉșYz/$:;;Q.ArLfU'.Jgپ%X[]J'b>*ys%~;}m5STaۙJXV(2֦\1DFM@M9Ld h ,$.N"P(Upe\.vvv6 r7D{<eܜvu%h46Cm{(g- PHh>V{@ΏXlitt?22{eo݃qЃFȣȴA
uc榛*XY̓Xõ0ƀn)
H櫡!0$IJ9NX,i>S`r3@?K,?k(}~뛻3(Q\C#/8@2D$KĢgNѽ  و_OkBoRUVņ/`    IENDB`                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/arrow_join.png                                                          0000777 0000000 0000000 00000001162 12534142432 017626  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥RKq~fkr[[	I.˓%];'"ک? F}+XMw<q~>V)Q}yep|'87>;z{.-E$nǺ:Fz-{@%3J𺽠}tp?dw6֊ҏٱWZy#ʣT\73'|nG'1qTLL<{(huK%$ZS[wH޿;A["D`G
93G(o	l&޻pR!k _ϋDvG]\(bJ(}4UcA
j"%\|k g璙l@0V;HJRһ]C)NT}*ŉ\Ά@@(ZC(BNɗK][v@
YDbF"$aM\3~TZ4r>~'Kg>    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/wand.png                                                                0000777 0000000 0000000 00000001072 12534142432 016406  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕K"aƿS!bteY!!):ME][HZeATʶ,5}3o&ڋ/{ޗ! S(g1ln iXgۆ1KTzd8"P$'ZRK=/MVJA(8١'Mع/VQ^CdGVu$GX~k
db8LUPס*&Qh>BF(7dT%H NX,\.hgɟuq.-x7dǃ@ x<<;ц;arMK|n7~?,umgcrC> dB}>8(a|	D"=#L
`\.^Gd2hp:BCjJQ07Vв?Pv    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/shield_go.png                                                           0000777 0000000 0000000 00000001407 12534142432 017414  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT_hus-;K8ZHH%dW %]tXADn2"I(Fy0]j&ǜkϞ~O\H7^NG#婹=$jJ&$4(\շI4oEoeLVkoIbaOM\O6VՀFvB6wpaOC.ErV]ZsXX@Z~RהbaPd'X}$[ d)ò[ Wy#/L#	ZRdEV3l(PPPAT&466E	̣X,+p9vJ-9IXX4%M&<2BA!:P-)mYN41/!q3=y6}G`my^{hCTgy%~fMgǒ)m}&ޝfQEyAp(),KyOBhRh?KJd!# "QƝ֮y9~v:I<Ɨ[${dǛ'-Lk>BuDĿqN>㛆tfP}g=yZ$˕khܙֱnbinD Y    IENDB`                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/page_paste.png                                                          0000777 0000000 0000000 00000001277 12534142432 017574  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  QIDAT1e }AW`^ Eh6\CNm-
E)RXADVY_~ .  (^zQ]w{፳ :ó޺ҩ`g^9o{2Smt>KGO̵ο,.W1޶;d"]wW EuVei-Cp-^}1[|nm{hg?67[1ila}>:2΍鏍uivC;?Ҥ[6OD:ƹM/&}8\vN^|b:bq.k-RX$bq\7My|CgsQAT}%E$;z+ &M&j# EdLE)E&ԱjcDKCGW:.0a@f UM&kHТb   (\ޞNOڷ*kN  Tx/?ݍ p,2JQ
Pww  rnܢ AQJdYZ?5I83    IENDB`                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/group_delete.png                                                        0000777 0000000 0000000 00000001473 12534142432 020140  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ[HQgA|(ʊK{H%KABp:t7̵fR:Z^fޚbk*=-"G[$jj۷Af/9 T?K޴zeh[Vrg254RiMyPy	R#tj>6kqŒfdC	?+&6@`q\llo$d3sXQB+AV{?k^)cE ܊ڍJD1?-,݃=}e_R9	m%q,y؛x _GBEnO/V]r=EkffSQ'@DY'*'R!&y$4#A('bW қ(Hap5Bd$H4C'|_X~b(-4Eb{zbT0[N230͗0Ϊސ{ |/ĵ!-Ь~7 B
φ7!.iA /Iм89rf0w \f0jZw-g"M^BF(TT7N< )J-*:m977^(v pgyT}1ķNDg>5t[EMtQeS9JǄ0ҧL:	מkK3Gb;cO>{1    IENDB`                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/joystick_add.png                                                        0000777 0000000 0000000 00000001235 12534142432 020125  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  /IDAT8ˍۋRQ7zf >aQLqL,DI#1eAH'C!f&'ʗTC>[j\TZr9iDo>OhaPxv1Q,a2x{{dT`01.NW phZd2h4^wt:l6T* >.˨*b
pb/$J|j?mc<{#l4$qٌ|>Xz^4~º0S ZL䮧) z=d2$	|̸Lã7`^@ū
o!;elߊ;g'Ʉ7-͂eYB!x<8F0<&f
R!h&sϻo0[Ro#"?tl68J7<bm;N+ZjPt`T*!!J!!v1|g!A.I|0=L#    IENDB`                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/text_bold.png                                                           0000777 0000000 0000000 00000000460 12534142432 017441  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(cπ2PKAyBS',aBq} V^1֧O+CAz}h_n-c(H|ߧX|Q,a2yy4
/@SVjh
l=']=KTz\ JZz_    IENDB`                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/weather_lightning.png                                                   0000777 0000000 0000000 00000001201 12534142432 021151  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕͋RaƇohڹqeW`W.!u.ߎ̯EAxuqil>jxºᅗsy ,HDgrvaXR<a>:JL&`4咀x<<
^wDĭVJr  `08$hVzhۨ(
HRH$(:j+s@ vjsBD8 ֐dŠh98xf$T%
vfVs !@:qN!n|fLR;Zflx6t_1y&OdEe[ǫOJ%P(V$5ǜe-|x>'^007/aQ`ڸ+JF)zpvVG~2D>m؍wg潅bɯLb4}[x3<ua;Jwa*H(	ކ~P:-OX$>*    IENDB`                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/arrow_turn_right.png                                                    0000777 0000000 0000000 00000000751 12534142432 021057  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  {IDAT8˥?KaO^Zj@c!o\;(8dp(d] .*]T-rϹO4Cw|rTʛW}hk{j1/i'EeepN֨}\Zrr2OG~Ft~گۃO ߇_d&
c1߈tB.xFr QsPReAL9~6	puS[-U? 5=<AӚ4nm `cﺶ ȳb\6. 3q(BQoԱSj_/v@0-6EA0\Oktcw{6    IENDB`                       ./mvappsvr/docroot/db/icons/page_white_ruby.png                                                     0000777 0000000 0000000 00000001162 12534142432 020632  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍOOABHV&&$$Hmr3"'.I?v	f~̼N0*#bVB 6Y%qA?7MضaժT*
H_u]x'FeYuZMDQ.jɝ(}KK/ZX;SwO\IԄdQgo_A?mVh<\y0:|+PUDkk@vI`cf&ߒj:ss('S݇iA9|a:8}d{,#	_0M#hdd.ghf*E9ctn"rN	.'׽B~F'!pXXqw>k%Q"42&ۙ}\MvlwqI)Yz;B	I|"a7&<6vj    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/transmit_error.png                                                      0000777 0000000 0000000 00000001563 12534142432 020534  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8][h\Us$=83IMk/X5(mM}eJоQ/U|1/"'%Gb NNL3$}9gC@:`Z뷌1=D
7gtM 7:JMǍ6u:|>lMub,.ԗ@p6Aj,JⷁR|]!V{]dߴ.j7R+7E]=X2>B]pDHx+@=ŋ
c{ C "
՛~գH(R|m;,v'nB$2}G}iH=Z+HO1bj	x^2` o(qz/HXӽ)RdneDLjR`a	7hBqlDc R?}lMƒA7|I 1)DUoxl fgg7x:_ggWgx7eD~gzlxXc	}F'NCկѨy2#'/oxx߫s{c̐/~{v+-x :(<w_$Xvt]P[GWVrch{(}!>۱t*/]DUV8AW~>/iť#hhZ+s{1p    IENDB`                                                                                                                                             ./mvappsvr/docroot/db/icons/lightning_go.png                                                        0000777 0000000 0000000 00000001343 12534142432 020126  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  uIDAT8˥RKa~fYJ51["JE7FQRTD7vEM	DbE$hhj唠75i:osr:<&"qfc傈@¼OBesE ұ5w]ޠs6`!J#wWXB|=^PD w
*BL\~v {l'J}p?X`-AɡќBL
b̟ 燡kW`=TpPvWi#ODw(\3bq"x~)$.ni8 d  0hwK}ո3r.CA p
;9ݕɺ1
!l/	KV
}Qor}ċ=5A &03(w&2ęk1B\oD<54i,foa$u;`v0߻V,CE&0~&&QRXЏv)5#BKB4
QlwQӭŹ~&K+]KfjS6&OgcJ1[ex%IFVe٨TC@E7AԘ:    IENDB`                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/application_key.png                                                     0000777 0000000 0000000 00000001236 12534142432 020632  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  0IDAT8˥KTa44PAE"BZ$̢E!A-QE"Em
ZJmADHbV5:3νbFkaows~Č	9}G
2T1UzL5żG0%a-UL5Ncs yٖ.ߝ0 *{05b^_LѼzqaN01DG'8En-o "'@ <!ζ̽F*u?Y9t!(NQ'M~f soLUT `Lr=[[O#$5xtR	q@ 3CD@Ax3.".O.+|
TDX]lDn!r?bqǾ)gaili=E_bl0T"	zo3qzz{cD°%z0؋DMl]}?4w]ס[ίUOg_~5ŉLfA_FM    IENDB`                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/control_equalizer_blue.png                                              0000777 0000000 0000000 00000001374 12534142432 022232  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SNQ~/&h4&_LI}0H`l0A!3`B
A1)jIlK)3X
:}Jk9INZ{=Tĩ.t00xxg_)<bϸҲQx17'!ow9,
T-Aa7Et+3dR2&O3yЧePsueٝe15Qmc2fŦ%ŽaĒYgaDt} FȠfDSx#m;ip׺XGlIKzTq]N
~3MPI屝;Z -<K2+cDkwhm3nXl !1O^.a)8i9BR`Wc6g%t+ѽAh3Lp=	(Pph¡?Զ
DS09<DC隓d8evGdIheI@Hm.[XZ$2ޥEbr/DLT9@mPm~-R*9,QijLa3+2]^q=RC盿W1]}bny<ηw	#w؄Ǝ/1s	MÜ    IENDB`                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/folder_explore.png                                                      0000777 0000000 0000000 00000001247 12534142432 020472  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  9IDAT=HUa {{W$AAP-mMP-XsPS45E4`jT]-n>FwOv2&/f>g:Ĭg1rc5
J;o1 ~.O^,-K=XVI[Yc"
"a{&OȒyW>6矑/R	QB -w+$MP -NQ	@	vCXZ,imJ3	\	Ӌ|XdaH{[MuC%⛯PrU|ZaRczP'{9*v7H|OA%6-g8cֈ-D2d-"WE%䖨$a; v`s8YJ|5t0Gzh˓i΋_dhj|mQ!D#ZH.j3ab~գK_y|H_?8f93ˍػj3kS/I-~aHݝ({{n$?T6L    IENDB`                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/control_equalizer.png                                                   0000777 0000000 0000000 00000000660 12534142432 021220  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  BIDAT(}JAl

Z

MQm
"fIRpaNIop3yLYiklJ?1d蠆 A@m)]cfn"8D!\dTݵX氁WV8WH됲oP`Hwj<>ZjXg`>*u@@%/beP#>u
(=F$U	T~TXe[#	qcZt]F7b+y4X*W#X<1I9;Dg=mF_W|*IuuR    IENDB`                                                                                ./mvappsvr/docroot/db/icons/pencil_delete.png                                                       0000777 0000000 0000000 00000001133 12534142432 020247  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥_HSag]tTza$"ތ 50?#HR(Jh)qF+NHC'+쬝ܯs1= p\rä1?[[93`vq_zO(_
ylQc|HN#HC<oD8XSM,/"HvkN(\4ka,^so[MUUi.-`)H_kQx}63p iYb*rfvbIyՄW15DjB
sZ_oX4U_ׂ8_z,oJ^ڱ^/mCf=Ň,}>X؄mR:L,TN/8j1k	:y-Re̟_OeCvsn&\0Fwv;BR57SQ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/date_previous.png                                                       0000777 0000000 0000000 00000001320 12534142432 020322  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  bIDAT8˅SMOa~vK(B 4@i<M	?/^xD̓TCCBLt	v?^g^<wߙy㝅%+
2}Z.S,߳qTVVpenuxÉ-|@aAB(BNF$#1
!:682c3tMN):<"i=4WױSJNx1ʾ99ziʞT
qtp#!4j+Ha@pcY CZ!D!ҠR$'lnW8c5\ ea{{tFC~ttyQ/"ཽ=gggJFADAo?xznƛg7j/KR-YsIMr&a*4Mx4y><<gFP',<E83vvvhed2#xƫqʬX2xV	<zZy}تh`\=G}hXsyjj
^OzX\F"i/'.zɶtݵ[%Yj\v+?+r3A    IENDB`                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/comment_delete.png                                                      0000777 0000000 0000000 00000001044 12534142432 020440  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˭I(aGƔ(E]&˅pqHl%98(L,%dcƒdyg̘}~yO@MQp^9p'ґ`ovo	ґsvO8wO%ׄ}&\Kw3oΥ-Mп"	>`#ao2s.oAUF	o_H`xM'{Qb|3*qήye-H*DZN@ͯ%]ՙX-Xh[so1Q?
nj<%P%e@m8qS*9䊹hVmU0&yݭ>;r ^Je0qN=1"Y!syQЗP\L%Q;_ל:ӯTHX9T    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/emoticon_waii.png                                                       0000777 0000000 0000000 00000001341 12534142432 020302  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  sIDAT8˥KHTq3c*c%bD=TqHRbT]qe˖M[!p٪ (Z".TPS$F_νsڄiF:ˏÏ>GU*]*=*PFERс[ vZTxT:	4RjQ?/BwY~;Z=څfor]Wx+:+o)Wk[$4xT"^	';ijtPǭ鋙
E,n4I""1p)kF?uhJ@4l^DѰ)sioӈn@уL/reGK-Zjw *rxV=*(K!+9Cv3XMCd5s#LQq?b[-*,N[1 ce5i(59p
> Uկy2|&89ͣG\B3h䧇ic`P֩)@:،*GEA7'\y-nem-~{gsXF*]d3,>w ԉWvkIy|F҃_h\$6W    IENDB`                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/comments_delete.png                                                     0000777 0000000 0000000 00000001236 12534142432 020626  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  0IDAT8˅kQ#iAYDQ.mE|A)
].t6"MjL*TQTjKcLId<|ӉD1q{;~.2H6"; 8C*c^#F,5WmdL)'se-x♒Z֋yHˊUĚ-**p`g<S(;Kq鏑wG/3Dެ+MI~b0dV,t4:f.hk`.`.`.v\<cATybq֤)b:Xb͚}$ɼtfx;0kmro2h}$\\h80g"'5	LVc.(O0sv70}b'7K`3Nsq0,=Ƈ(g/>y׿M]7JwaP;@&ύv.44M2Lt:E-frR8>PTv I9osl#^u7V3vŅuP-6զ#~|QAp    IENDB`                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/link_add.png                                                            0000777 0000000 0000000 00000001072 12534142432 017222  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8RKBqvAD"6PQ=RE(T%61g%\WQޕڌ.~{]{ @$Il^|dnjq4#ivJQQP(x.\.WZ>W*@Ғ Fv}R5{Jd2!tzhJHKx^.C*>yeEd2G3Ґ< afY:n_&rh'f!-y}|`0xNo,l6Gm`}̬i`އp3@(++KdX8/z~ċgk
1]:0Cb0`:"
:d)k)@atk8Fmn57naOn^4E0glL'=By<_2Q;<x"r    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/text_allcaps.png                                                        0000777 0000000 0000000 00000000434 12534142432 020141  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(ϽС0M*cS7f5*E`
:@F^^zQOh?tH8S?oX˱ֶ.3(|dY32o托A>:	Ҭ]ЛB*ne Y+lbij&zVCg>G^~    IENDB`                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/clock_edit.png                                                          0000777 0000000 0000000 00000001707 12534142432 017562  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  YIDAT8U{LSgOLc2cbBf"3S01..FM2BX4yA@b$(*K--;\B-RlRW۟il'yN{Ka 0sO%0=gBPyH^32f)q}7}<2UמQy*j|9e7x٣ɧgIKӨuL oiFan=\7@~b)xݓ]
ѢC̄&<x1qw08|Bdm-mX}#]5Vʆ^?sؽ=.`l2?EESXkVo&XP6c9Vy1u`XB^ۯơ3G<"/Y	/sl'f۠/3qmykF̄bDM29ɀ$BءS}NcZpY@I;>Q Ibpx|Zv٘y]X@SpƐ$83SqpmB6uZ
E~tZ=xOv"3\bA=3烫ه+}@x\x(+z3t(Z0Efٛ;>}] sU*B,
;]-aUZj0uAЖ(<H	BYl>YS*~ӟ0v8{-n%?Hp!/.Nqv1e*tפB)ڎrti:]zoZq5kJ;`SМcNBY,PoX(hll\NVJ}Q}~sG2wW|!&Bbg;    IENDB`                                                         ./mvappsvr/docroot/db/icons/bin_empty.png                                                           0000777 0000000 0000000 00000000733 12534142432 017446  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  mIDAT=oMa  {jݞ 	A"bc6ؤbDT?@b1&IIAry{Ij   @ |-6I`a8^)=wF~?~} Ս}όFkk7sڭ/he҆	C~x:-e:rZx<[6ɔwL!8gxnC֭DTZ@ZkM/7cܪc:ji2M][mjB- 2sT']=T*ADZ<rZØrQc8eܬr|[%x^7JZlp씛" _|    IENDB`                                     ./mvappsvr/docroot/db/icons/application_side_tree.png                                               0000777 0000000 0000000 00000000743 12534142432 022007  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  uIDATjTAߜj;lżMK+k1b
ma
HUwG\~_.ң=xxh&(G!B		.NO^|zwp\Gse36sn yՇoΓ7EfZuVQ(\oi
MuZBJN"QF4ù=MKR$$܂&<hL!rISke*'0ːKb/gg{R1A6(,WDДq2el$qiLL}ϔ))(D|>U9%?9ӄDSξ8yz8;ၻ0BBE(P4'l%IK
    IENDB`                             ./mvappsvr/docroot/db/icons/ruby_link.png                                                           0000777 0000000 0000000 00000001377 12534142432 017463  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8͑KQǅ*Nۏ֦bCH_ܐi"n`^$(
"^H)5Lν']M};gw| _ R'c*$DpHJ.M$5:rHUJ PC  Btp'_FgJb'Eo	`dX_Q.f39цVc6;NSOS} {{HYW*]Rlz@o}}'v0> KKHFBJ|>>@n7

2~ܔlm5褼
F<_`̎<zlG6Okg'6[l;IzQJW3 rJӃCB!x"|J<GR3 b$UTۋtT*z~A	qX.*.,ʒ333?;
Lvh0 f D"Qd@M$r9ZmZ,f9Vc  ңV7 ?<<|<66>vtr<̛ɹDG,P(ŬVk꼶',jün'߀    IENDB`                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/award_star_gold_2.png                                                   0000777 0000000 0000000 00000001402 12534142432 021027  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}ku?lggNĆÜGB(WAdQ`R(AD"ÁbozYP RafjKDGՋ:7}]FٝzK A">z6ġ?=<'Gy8Āqk}-dHBO/`Ç\-.'O#<OWJ (	g_o֯w*&Hoa05e}
y7}ck{d3ta8/ZnMAJJP;VWZYI=1tWI	1*m6ۆعJI(e34AreBeaafoITNpܪmȎ= T@L[J#d}Afʟ8Yvk1}%dGFe`/b*A(VAC3W{-lӔ),9%d EP2,F S$.n9I}3+ۯ3kdB[e(%.)vX9mO Wɽ;6tow;cga]ܼk=nЩR_ER    IENDB`                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/clock_red.png                                                           0000777 0000000 0000000 00000001571 12534142432 017406  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8][HQƇHz)Ba7!Ӡ(LHCQHQ$fY-ՖV+sS34Z*-B"sٙqv:3Xw8|CB%a0D9$$)!@}m=*; \B-.*Eb-`|g⛂Ԩ!D p:˓_X|lGv7ƫ/!^ FD ѽ%$P?<T9?lc^hXpwuBv9B+>rpi:`Ƹ:ٕ#dS3ٝp-۵xmw(4ԘW-ul8纹6w@8N;Gwmi^i̔s\D&B`ohd/jQkAQ_LQkk+dY6}}}`C:Q.-kImnhyوO+nGww7***044a Ȇt4 İwEbIt:Ȉ&ihi6J4k x#+9acXQ@3~H@W^~
#|Y0gWcgkB`VVҁiS>k fDGǠiAṫpi	8C(qMi#ki?;<΀+%?<]Dl5̆w`5TRPn$^>kdv?===	8z?f"["7{IXzY>dV!$mmm	c<9[I%z!*    IENDB`                                                                                                                                       ./mvappsvr/docroot/db/icons/page_white_stack.png                                                    0000777 0000000 0000000 00000000475 12534142432 020764  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(uM
0FG=RP3:E#qC("ڟ9i
y0x4!
TBA}LkZ݉6G
7(L{P أoX#bxG@)yxp0X,X <4i0Hȧ<.m{b4 O:a"נJF@zt7uNxx?,?X.Yw    IENDB`                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/arrow_merge.png                                                         0000777 0000000 0000000 00000000744 12534142432 017773  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  vIDAT8˕+ahHI/%
GRvΔXcFBll'bHSJ3c9>(Mynn=}Zrڹ&ThdUTKl3]5h@U`wx}jl/B9];劔>o^&7v?x&_4?U􈆏h<BD@K8mVWb97.׬-."BmVOtDgޤ A?a,F`JnR%2G|Q,04Kа/@T01:D2;| % D%+BDSb90.AK*!*=BZ3HH\^^A(ВKMJ!    IENDB`                            ./mvappsvr/docroot/db/icons/text_letter_omega.png                                                   0000777 0000000 0000000 00000001035 12534142432 021167  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8œJQ}(&((@g*NPTH!1Ff,4;P
]YRaCM:3HG]hЌtn6{}{k $P\
;wg[_HD+A൛T)3x.'(}es˜yfe\z1j ]~`pFм"zg|.h
kIF@B/vpbT% )Cw@ݯQOTi nZLD?d>R56/hBnbiy$CH1hjph|?+G!W`wqttXOmd/ϒpK*M4 Ǒ	P&K#"YD߶<nl<    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/chart_bar.png                                                           0000777 0000000 0000000 00000001035 12534142432 017401  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥jVQF׉'j$`BWbv
vv>`SAwRnqDH$)ff*.SYW+2QD=O><.M.ndG%cQl]'B/+fR9허
jp?v !!x$e߿ܽqS%ov@tHs0@
IbQ_Kr<-SGհncvarLMْ[O"KwN6*fcn5aڲ3f3rt-0WN	bB_vƚN2P+J@\hԕ6	cN'?p^XĊE]Ylna+҄JsJ,x
@
*nIxd$e=O    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/drive_error.png                                                         0000777 0000000 0000000 00000001301 12534142432 017772  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  SIDAT8˥SoAfwp	P&%iX76'ɤ6QEŃ6FBiI8P9QeyӀI|{3̲,gI8RFjv8&9`)2LxJvš2m6"z*x_44M810F^HD+BnK1YB>GVK)N֩V:H]N&LDC<GRYVHjQ3)2KvhPn[IR"eI:Y@1Aw@8&NR"U@	Fov0l;[x"Dc(fg#03mtnS8K	J@	MnDdUN,˽\;t0лB6T{z20dW;_n`ϳIiGsNZtlDzL>8Ói^b#~k-,K{t?yse3Z&o?XG;    IENDB`                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/basket_edit.png                                                         0000777 0000000 0000000 00000001453 12534142432 017736  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥[HQ$AHOD+"Z4e&]HL)ie2Jed6ۅ]֜9/mN-s*ih9~O"
Ģ~9 Ğ###ICCC	PLѷ	̡{ʷ0k >-g@Ʌ
!>hkv4]dFz'׫<`7Bef8{dHhS,L[ȯaTrN
RYD&^LOOv$AҸ@}^[pbi~ױn  x<Ts\jV+/U}b#Fhm*ݝt:m6xXѐ
w+6."T1ܔG
<;v D5jGGjulF*f1X3DiXcFJYҷԣlp8-K^OVTd\~BP3яX)p8; D% P*T F][β9%$%WbuB>rl,8Z[[ɲ|:gb}HSbJT~fX4:d2bk/+s݄748ϣ	.&	 fu1Ks:ɧ~ݓ]Dk]O⮧[ɣ{Ȝ`Iȷ    IENDB`                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/report_word.png                                                         0000777 0000000 0000000 00000001333 12534142432 020023  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  mIDAT8ˍMHA<JB P#JKN,xb::${%!<Dehkۮ;n)?/7Zn-Ƙ6ȗwrӮnBP<O466v}靖Al;hED=`@IӃ	O!E<0`Xmс6RD&*cRmu\jZ[[1=WiV_A)F7~e5o8Qvp d2ٵ8gJ)
}!"*D7HasWp&3Tˀ/L,s>錡X9ޮ#x쇧 `
~mUJ15gprv*.0 ds.2XcXΞK*}Y}58.P4̥P)v
q,"[>w@ \o?\Ŵ_|`+ȋrGr92kAE
*Զ$:<k-O*X,VR(]Z?}"033uJq
bVI:D4'o˓ՆG    IENDB`                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/shape_move_back.png                                                     0000777 0000000 0000000 00000000613 12534142432 020563  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ1NAEl6H&JI8 wp4)& P.@o$nh-l{zIG~:&NX)htFD 06 {n.I݀vqXt5H#!gx&H)wBWgW>^aX4^&g#r9L>};9ه	'F @ uTXp_Ə٭u;d\>o"0z5 Y|;%TﺭV@[#lFѥ+ }/~eD*    IENDB`                                                                                                                     ./mvappsvr/docroot/db/icons/drive_cd.png                                                            0000777 0000000 0000000 00000001336 12534142432 017237  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  pIDAT8˥SMkQ=䓤X
	$	Z4pB\u-E?V
r)HfaQ%!ecɤ$ɌM0E\9pysg&\.GQZuPNhWs\83~-H`8URJ%Ȳ_$&^$^##LZ.*'IL Xbv.#rmUB(jYE-|N',~T*UQUv`m$؞cc111a9diVYQz#	"s)
G9Nv}X;͖ǅ_e}\=D힁3S_ Uz9)&eSht&<gຈ~nb[ѱ4wv>mt.=o~bruxO}Db{n\IM\pab:_pAphh誴=ӅZ<&'?;8q#>Մr` sQ<:MFHeuξ$"Napp6.B^|Y1C"o@ap 5NX!y~`'
    IENDB`                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/error.png                                                               0000777 0000000 0000000 00000001232 12534142432 016604  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ,IDAT8˥SKHkTC[RL5o=ck)c.$BDP,,NY(FFfkaf>o1Hb=fU~Ϣ=USl.ZkP(9X(>H3kR x_Oqg覆8t]tiXas_j'{Љ_袺I~}^OTj5՟羇}vM悥]b7(Vl9o XoCn%M+ciѐ+Ci@IzW^5
@Ee6dVK>@dW2U/zWѳ'BOlYxoT3#Yd(,aPG+_Rr\:m;gS o * 0>N  @aΣ5;5 0?kkz65ß}	/qoI0- R`ZUކ1̌U rj1BCeqƊ@޳H\):xu4E3'ǃxǃ8>!@}X;Lc٧S/    IENDB`                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/film_link.png                                                           0000777 0000000 0000000 00000001476 12534142432 017431  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8m]HSamǣhmkn$9)	A>hB(&RHR(&AP""RFȔ9u6s眝
݁y}ޗioo+"z{{+P$Ie4$rĕ|!t'7iHg]tE,QCTV}5$%6$ BFH	lUV!
`Q
Hh$j	٤'y1ԀDL	S!Ҧ,zא^c)u6Pc[hQ0>a)rdLI
#(b`o!#qnߌK-j[1Fe}MA";>ORb@:('NA#tSqؗ'fƛiF}:'x<pnCh4vF\pN=18W(<cX#BxEqn!	ϧ8NӃٜ`ikk;533sUm	5^mzzo/)i7f3$I{hRHd2i':Y8u۫"1BIIZ&˲<UӯSk$]ĄVm_Ҳ22mG$p\q&9& ^/G壌t6qEX\\lUZV56,TQ_Mq^@    IENDB`                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/images.png                                                              0000777 0000000 0000000 00000001225 12534142432 016722  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  'IDAT8˅kPW	V,톕"es[СkL݊6MV&bQ+QM	Nڏ4sNa9{rI7#bsRԎ pςXa2*6~1L:GZ :_7a|aUEwl|,.,2cuyA+oaCLMXxx>En5P!k.J1|))e98'	ވ%Zko+#ϧk,GA$?ʚ	ǹ}pO0;_t*ęE|
J+Pw2K=E7׿˯o*e|v`H,Ј 	҇Eo;ȏP,7$xiahZ~MH-|3~R.̶X6S.4peB]C:;r']{]ki[t29DO
P]t{PFP%M}IikS!    IENDB`                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/xhtml_valid.png                                                         0000777 0000000 0000000 00000001316 12534142432 017771  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  `IDAT8˝SKkSA4IRM$
RRAUqE]qB$>.PD0jlTlǽwfg&J.9;;g056OL):|y|buD~\ڑc) n>3."In^oo9"C
_
EK&AvJPZAE
PDG/ЩOd},_CbIޓZSC*MA(	Xj|b8l~"֣|I-QY2'rcٛ|ִBБ QYlcr4䐊3(,|,TK)@P)RriT>}ݐo #()PǮ$A=$/xá-xdÕy\NY	~lo֖^3%#lUs4<r4cbP×l*p+xUmu5vH0H	 *%PMTBp4d77{no{GzK	=ZBՖiN'H$ҖdA3*{/_}lk"#7{B#s?W]H0~    IENDB`                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/time_go.png                                                             0000777 0000000 0000000 00000001562 12534142432 017104  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥kHQV$}EQ$A}2HC$.daYfi!͹tڼN4s[h:lyi霖͹9z+)ҁs^{y	 hݦ0i}g9us5YniO
?!@*tRWTdѨǷnt߼85O@S!+M- B5mH|JIhT2Tf?u?tF"/XSHxרziQj4_Qa̍XGV9H&Ff uF|[e	dVѢ076@Cqm5%+/ya<Le4@:`DR=bd56@=?pɠDS`Т+CX$6QMrm,%<Fc9<{f*[D,GaSz(<h8؜A"W	(	>Qr4P.-u7\vحX^&12 %*3XȊ(⠸嚱vOx(rÉ8գ1vvDN\h~y>DUHCٯ՜R *}U~ȔvE+k}d1o⯣v9by}v6D1+<04bGeDadQ˸g* .ù]pI/38Q'pPS)-ԽœKZ.U֘M*>i.,脜4o4n$ʺI#yDbq    IENDB`                                                                                                                                              ./mvappsvr/docroot/db/icons/telephone_go.png                                                        0000777 0000000 0000000 00000001541 12534142432 020126  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT]HuNw:4qEZͱڮ)""궂u+]ݮ"	]Fm.75ѩ;kSS7_	|<3_|])KM<y`!qLqLa+HP$*]X;lv4K%jb"jF,?9ƪl&d6uelbCbeu1<<E۾fDl-ֽ灚QXV
Σ eb~CDQKQI蕳vgl=NWK"	5Dg#*GT5TTnᢘ[fڪd&mIWzKs9Vֈ 'y]:?5ř]oa#/vuPN9?qxԧL͜ן$AɋX~%H$ÿ.&յǸ7^ZzKPS10x3G9羚[O>1xf.ȉ{mN30Ƀ"
r&U\\+7.Χ$4|.;aC!4&pCmO8SX9fn"jeN-58Ĕ{7hH2V4QDִq>jƭՐ/.~Bx ]3rm湗oM,N^)^-Bš$3\D3jL/%*]fo5?33wduC[便Űp    IENDB`                                                                                                                                                               ./mvappsvr/docroot/db/icons/layout_content.png                                                      0000777 0000000 0000000 00000001007 12534142432 020522  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATϋaBB~.+J)fm([Y(lbb7K)FeAbj9g{ߞ'faj4וlb+^plLBiMI(Xڔpd\x4a˷^2?q~ZRd*yڹ*%ݗ!UnRxuz8"Qd
˙bzbR*SXNן1aY;GCDDxj+2%o3v33U7lcsTL<ZÎ*B$uTRG)D5 -$lDTV21#6u] md
*d Q<]d7iۖ%IeSdsw.ڃKY*döO":ؠeh)m6*0S    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/led_widget_icon.jpg                                                     0000777 0000000 0000000 00000004411 12534142432 020570  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 		



           C                                                   2                 E  		       !12"3AB45Qrs$Raq#CD              3       1a2AQBRbq34r!   ?  j+fXƄL=[fTDR&CרuvycoWd5)Zg+<'g1VKWG>>OYy{Új>L0}qoy%=sGX/y$~>~	i:q5y*UjIW5e57cgm͑\E4utcvJN(`=EA?'Gd⬦=~F1#B+ٯwA`SHgo$=d+DVaZh7{-Y	1⑮y$	Yfj}N8Rݡ1jAgZ<Vuσ%VVjR.@g>#:f՛-dr[H+WVi 9"_Y؀ON՚E̟X/9% ]YȀOMPIiZmn)0F22<Ny{:ٲF   k	 0CSK: ?.vNzjqJZȌ1eVa	V,u6?վ?-oy`vyF*e'XW៳	G;\@Rx1'TCVþZуc!Y!$R wncwts   k	 0CSK: ?.vNzjqJZȌ1eVa	V,u6?վ?-oy`vyF*e'XW៳	G;\@Rx1'TCVþZуc!Y!$R wncwts   vJS}#Gd;/HADbkZ"=8,[^34 V+-R+Kwm)TJ]ig^ϕ<i[t~.oO
TJ]iH׶O1RƮ,M԰UZI׶ޔ2GE)%$dyDq[j-);\:FWWgזb[-~~$iN:uZW?!}jeS3YK)ZPl#ί{^ncº!mRIm*DXȊ&fa6>{ܓi3rlN{S67O^{ܩvy^> #U摩ί{VzR;4kZR<SĪe/S,<u5rֻ+RJ5*j33~?hǫ͋.R۾8IУIo2.ZsVVTWGIu3R~.ZRvUWGIu0KۅޒNmPW>ҩ5Y7גNeŇrGUELlna0 ˥wwqC-ùږx IT&	! k#)ԗDgG> H3T+JJQi#y$2  !SrX E)[7i&n<cGi$,3h	BR6"i)R4^   cQhv3rn!NNPWWu(#JxվSC}goN-/݈+5\sx"ex,N[%  եaN
!PL9;ʋY.x@[MT#݈jEաx+;2#Qb)dS  zfݛۻ$de0$5_ӿhI^BQ)(FG9R@*5PmJSKq'sdҕ!dSTR            %/+GHa!p*miRd_u&hTq1AD.臘s+n	Y                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/text_signature.png                                                      0000777 0000000 0000000 00000001014 12534142432 020516  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˽+qǿEa<IgGml''yzNha"faRd$lr@4FiEaL<+z>| ?+yojR !0%d	41>M	>3ꁃ[-s]1mrN#j標f9j標ˑ4Wl)9j;7QNZ.vKִz[i	7{	_bFSpU
(("_/YG22DЊLnP,]"G NtHF͸ڪGc-,Xpm'u:ܜoaG՗V96GJ](D`윎`˲4kr]K)20oSJ5>i"    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/application_view_detail.png                                             0000777 0000000 0000000 00000001100 12534142432 022324  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥KQ/RV)TjPH"H S 4YcĘ)>--wYtɁa39& FdjN)'=OBkǰ1CXcp'/7}mqO:86N*S<W晝
z733 #x.prfH&(jU$	\u(Y9ӑhD2H
:t\ȗqvFi<L&T*X,ƀh4I9}4a W*TsB U8!7NT_eoto^s8B EK>^l0rr=* yDeh jLU>HG"
dn.N-v{4(-Howf~.Gbʛ<6Vk/vH,AԐ$4< oQAY    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/report_go.png                                                           0000777 0000000 0000000 00000001364 12534142432 017461  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKHQ'BĨM&aQ\PE-}AAЪU,*aEAc"cc{n/gx..sXM=ܦƇP	D?T3ܠ~%^A3v(Sv b555=ѢRy9"1&}uZKRր"?ٶdޖee32 5h9Ζ!X؀c)&<@v ZDKcLVB ##1~lnбC?փ1&Ir`;B,AhBs6oh6f(Wp,V_=hA1pnLk),XEj)"͜vq^ ݕh#hAm;Ms4ao{eY6xPiDţ,Ѣ2*ҊE%(h#L*ZLKzG>2l#Եդ]W\eex=[V+qn4=aJRUz1vA,;H| NKU~%ȚEvÊS<)kuϮo    IENDB`                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/flag_purple.png                                                         0000777 0000000 0000000 00000001220 12534142432 017750  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  "IDAT8˥]HSap鶋.*#,:aU,J
!!q!mr6/j<3jmv,s~sY4wS嬥5y|^Uی5@$)_2ҀV{	S:QUYˈ:eY+tyL-]B:	dS@@	暭8.-'k]rc.`|"  /Ia }u)ƹVVn@ܩlrA1a`db<3kKsTb(Ѡ	bn2g=} fa_Z<<k0?j$M̷xM"l(0 ݪ	'ru zCpK"jsx։';)pM<Ln8)iw aSe$||$j5\c^kqe
q]`2R,
.t'Hc8Ϳ"d/*ԫ

vPn5@߿L?    IENDB`                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/cd_go.png                                                               0000777 0000000 0000000 00000001431 12534142432 016527  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}[HSqbCXtzXPv1^ "#,|!)͔Hbi:KV$i^rv"S'yܙ̹?N	 ⓺D>vI*V_n$8IoAaч1_X̏B%!si s ˍ^7:>xI Xiv!d!c!م)]5P'!"`qщ0Z/"!`^j}`WW+َ&;	@gtf
h(9Mϯ	FI
*=/u	lmfx4F1MƱ9-XzPHWi8b<<7K%gaq1@(k@~]CǣKPe#Np6\A&11F ~Ԫ8~ص8yۇ0
`vɚ9TecyʆTuyGLZ
-nF=6͗ק .kYsYPВ+pAv@\]Jh;Aݞo9r,$jOcwF3:M([A|+؎3/"NOjp͙HēyDֽ+^&~DO1p07
'+}d\vFԲ۸uf;#Ɔ4Śp?q    IENDB`                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/page_white_magnify.png                                                  0000777 0000000 0000000 00000001052 12534142432 021301  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍIK@C7/=ŋIm\E*q[A\jU64S:_4U1	dg2. .1TR!gin{\b):cr9d2qK(
<7	
0P('i,%E^%!	(*JgRM j|NwmWIRNdY[PW	#N;fP5&1_/L}~`7
]cVi3$QA4)°+E8!	_j8C=L=pUU^X}Lwr	}u=RY8yƂ8]cw!6iMwֶwA}LL6xG)>_o$qp-7Z7Z    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/coins_delete.png                                                        0000777 0000000 0000000 00000001407 12534142432 020114  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍkTw5w&IHLTWEp#uӅ.A7Սt#-taEp!Bk$TLǽ3})xqTIg'U**⩐<µo+0V-|UTۏUӚݯ6o}zD[0u6盷=bA
Nv qf<PlHFA0b#n8F0%,#A5TyUS/6vظEa`or4<	YHG2^X5،^ /Ex<ia3z(XH6h$v0FM*6:A/@)s#hIW6Us4X{ qτNgvjO&\)NP+b2%Gn.]eSr=f~%;4]!;IEkzS%8q]HufN}àep;o7^??ΑtVCNǻCS77xYZVeA;|/nyuSNbI?k1̉i:xt{T(!"Ҡ=؟;|Θ+[=    IENDB`                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/pictures.png                                                            0000777 0000000 0000000 00000001300 12534142432 017305  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  RIDAT8˥=ha%?J"FK*A(hc)	XlQ
xlB/΁y_Uƃ#U;Պ,"%X$~>>ZPSWy;E&#ʞ˓ߛ_3uE[qzrcSiGkD́0zv(Ja-.[.$ihurz<ʪ*~+*Gw ":l&HW
Enf]v\>}ײ rz Z #=n*6.eO9GFĕ5"(Y<)"=mXRlVUV N.UqUX2ZIB&%HAUk(J^L+Cij(lX_b+MDþ;wvԫJAk!8O'D䏅NDQl>sU12ٻcpk/Lcrh&Vbnz)OY!lj?}矪Kc{Z    IENDB`                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/cart.png                                                                0000777 0000000 0000000 00000000645 12534142432 016413  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  7IDAT(υ_+qG|>V_fKۢʹ;66Fj&9D[K纟~YB.Ҥ9#	qoV/zy#6yE#NWB `_%Dd5T8$)#N\ؚ;9",R+#LElbjkc;drpB,07cgJy5``38q`gAzAZtɩTdV:?os:6FB4~L&gK?߬lSAx    IENDB`                                                                                           ./mvappsvr/docroot/db/icons/application_link.png                                                    0000777 0000000 0000000 00000001275 12534142432 021002  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  OIDAT8˥kRaƅ>}/Pj "A*dֲCK	$3TF2i5I
$5?Q+*%ox깟غ\u~9sqGL%xp5\"~sB'AUpnl0. 51Q?SĞ)htzlջX[O_kMNlè rA]YAGRA][m	Mjntyz
ݦ3Bԡ0PVQPohJ<s@G;;1I}vA!g*@y@jwxN#
!H b\Fmsƅ0t:aT
`d,DPVQT|<RĽB[Ksu6χ
ffl6DQx<ޓ`38o p333 IF#2"<RhF /ҿte'wrIE;> E=y'N_ ^gaŖmR=Ln.//#rv<Q Z^?j2~ONN2I(Cٿզ|i    IENDB`                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/control_stop.png                                                        0000777 0000000 0000000 00000000623 12534142432 020203  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  %IDAT(}MKAP}I!
B]u)C(AHeÚ:֒쬔le39#ڪ؆U"#tdD`^1D\1O1.]M.67	`ˌyEsᅖ28Q^hmQ$r1S0G<PzǾB50`{pg\)[$,`	>>Y4xx>PE.Yfʭ`ȂES7Ǳ:D*r媏塩sD]hTLIf@me˶7UYzͿ(yv-|H    IENDB`                                                                                                             ./mvappsvr/docroot/db/icons/cart_put.png                                                            0000777 0000000 0000000 00000001373 12534142432 017302  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕_HSq=dORO=KD׈zIz
B(lئp:pn69+9Cen:s@}IlD QP:Ԉgx<NtE:Y+&_ނlG"~C FFFv4h,..baaj>]><U/<	r`Y6/ZZZBR0||lB'9x5B [[[p8l6\J2vwwꭇ&\Oġf2U+D000t H`yy333L2D4e !A_b</h47X,b~~Yo;OLL`mm\bJ@H3x:1t\b*Ɖ5B]6EP onn"ccc6~?rjq%B&	zh4G<ZyJ{Ud<㡤aaZ)ihkk.KU,:NvW*BC*Ti!-keenhZ1|>pƤbx&,=1L&SI$*Ɵ_LɝU    IENDB`                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/map.png                                                                 0000777 0000000 0000000 00000001444 12534142432 016235  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATˏu  יve jWMhbċ79jz'AjD1&#cTδ3/;ƙգQ   ?9%4r>@jdA]7ZQKl|R_\L?skk[vw{(Ficfi ۆODvoIr[$BqA1dcIb2Iy*98 3oY߳WgvŤ<7iEq%r!@0%h4_:٬HdԬyjZdBASˆ=cm+{
L5-#V8bDA y^Hp44^<xU1V>ILT&T A @w9_^ͷସ:`_F֖䚨8 THyǍYî'O]y<+F1`ma5n~JצMNw^;`_bנ;q}AKn*ubڹW]ؼ\S"9J7j[mdeji:}y1]yݾ[Vvv{ҴALBCϲIȴе=͉/QL|f,+UUU!Z 8B4-DH5U%yw;^1    l:?k6    IENDB`                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/page_white_star.png                                                     0000777 0000000 0000000 00000001065 12534142432 020624  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKQX?Tpib$Kq.JEMQ

.J7dMq)n}7""hq	E|5{ofDt0y7瞙;`$R	| 97}߿
 $#|!: If۶8NnNz Zl6aN,ih(뺠rw l:v#QZJRVo n.,;O{74ώA(	nurNZ/w8vX:!8Ovy|<\c	/q<S<~_BTR{Xa", ֏gϙ
Xe8yklMn_?_nu~_= oۃ !Ӳ ,Zj{58AΡhǯ#f*    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/magnifier_zoom_in.png                                                   0000777 0000000 0000000 00000001250 12534142432 021146  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  :IDAT8˥[hqƇ]D]YhXtUXZjHc!$D LkXk[+ۚ}n$sjtI}/oɯ3<!t.p&/loT9J<s( ;CZ4Q9_CrQzwҠ8gS0SIxkkPJJQ0-8)7QO"':0:'/J~2Og8uVC(oĮ<6Ehx8[VnµӸq1l#O2E߸ X1d{kߏ}q@Z͢2	KSy1D
sSlebS;rIDV)cb ad;ʛakci\EICi\ĥ.'%pdll*e3Bn@%~tjMo/>kݦ%4(0~
_<=qfz!xWAԮl4seUjbHk]Y͝˗:te%k~ I    IENDB`                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/page_white_tux.png                                                      0000777 0000000 0000000 00000001234 12534142432 020471  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  .IDAT8ˍORQƧV
ZrEXd rjmJF")hDE!r
Ǭ!		BS'{<|Źw;c ƨH$ ]D:`jn0J$P(4\q\.~T*TUv
D-DTƾ68iE&A^,(l6h4D~C Qwn91t:
jJ҆'z@Y܇#(~r)+߳Eah'\n4 \` ,<|P?$I8l4Elf<k: gf
 5`njplQ{H$`4J@Ο>pF\	5n`˸X(C»˻zoÛV})&vl'Ɖ@Xz{{`aJ8ސwxqˌl43-yK7w0;#v Cx͏ڍO9IRhoˤ/&wl{u :oѤbu    IENDB`                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/ipod_cast_delete.png                                                    0000777 0000000 0000000 00000001451 12534142432 020745  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mQHSaM-°誋
kfA!QIV&-2DKͦkfSZh4"2#>g|GyUQ*xqWTc좹Xr,Qz5s4C[Ϗc
*#ioA)x/"8ZꈋJע<FUB7jYQ2<<R/`P[x&⽭eYq%hk3;xt@h*qgJ].خ"$ZJ^B, Mψ31ҡx,	w-3eEB{(KKTŸ-[puoj$;_l&^3g.WO::;;|>Edz"S>L=G$;IжOMM\OVGᚑh~Jb!tǅn_i.VB}wb5V[[ e`4-MrL71fUFڜ~2;s
ETȉx7ު <O0888Orӯm,E'v!y{G֗2-]1ݧ^U|Ήާђ6B dV+L&ÓԘ1M[Q+k q3>i    IENDB`                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/layout_edit.png                                                         0000777 0000000 0000000 00000001314 12534142432 017776  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ^IDAT8˥KHQ;hhH{D**[EAPТPn
4J@EFiqt3Dg{~s?e8{ ( vB¢@kY?s]hjqBD8S^)XB߂Ϗoc#%q1=> 7 D$je.9lYMD־R].XԖZZXs
{v<= P %1FT0vzK=K2!ϾmIԵ;GZIԃcDD)t1=P\K #_9s>8fl?D&-n@Lӏ `q5c#7jd́2/S<_ze9xS;	و/[)=Hb{rTtil)@pf:qd;fdd&tMIiC\|[mc/3^PH=^ 9ݑ`ݓ7^7>-`?U'L'Iq	    IENDB`                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/calendar_delete.png                                                     0000777 0000000 0000000 00000001346 12534142432 020554  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  xIDAT8˥]hq?fΘb$]%EPʕrAbW7rD=&/6%)adoX9vI~|*sBmݩ9bLy~x뼺@Twm}X
.Upā1=cm1n1f(D2`2` cݸIN$D$"@"@6'|_iTUsTUW:mǞF	JŎ!Ra W>xGW!Ă)dMD@xl/!ab>+W.KD_ke}ޕY(O[U%|ܡKZOE,)\h-TTbQ4ż{\Lok.|R qu]NmaJe*
QOw V-XY+j~L^i3M3	ī@N3I\I&=/`G<~iIc
	YK723	#IKϠv77Wpbm{7@uF    IENDB`                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/package_delete.png                                                      0000777 0000000 0000000 00000001573 12534142432 020400  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uKh\uw;ILIcjӖ$5ZӊD`j!B
E""b`ADD\t!5	!&c:ӤL2y>,4ǁsl^AsGg9ܪ-	SYf5}߫|KU="{I"N(wx	HCcmmxyBu;r,(nN11u{O?5dOԊUc/xk:q$)kw=Z~abfq9}K$V4ZJa哴隣=jHICJuM	M1bo*WpwAl(n"Noi).	UR^_'% ~``@` p${@6`8RAH-@Vc)Vo$~ee"ʵ9uBEi}B`
⁩N:B-qvP~8SA}!s%IKGqgF~>Fh6b̫[S͝O8)JY6'l!O)OlFjj G~*ӟ}3R?wj%K(ܚa?gv@HEuxҪ,v-eQ|LO|HTEzzͰv.(|t#X    IENDB`                                                                                                                                     ./mvappsvr/docroot/db/icons/page_white_office.png                                                   0000777 0000000 0000000 00000001413 12534142432 021103  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKSQGg$TCaYQhEHY eIŌ( !)Ji~1
_p]~1uv{wv݋~;^.|~:r Pr)y`+eS.Mi8=dJlgKy1WuĦ,!#BEx^&yIa2s;O*~PU@$B!ߒoǲr\>~!^FZD#D72gcV~YBB|ܢe/.Yf@;'&:m<»+*#ƽx NȓbȽ-PF:y_pCSDIfȲ(-ㅙwi!QcBd&"|ªBI
4q:b(0Ua-y
OU-	>RJ4ȟaoKd5 J;y2zo{hWDa.u6 FfP`ea7W؝.@&w<:OjntuN~a(=+h
	D@?5&H[}4~eJ/wi]@__
8Op    IENDB`                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/building_link.png                                                       0000777 0000000 0000000 00000001234 12534142432 020267  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  .IDAT8ˍkA?1n4Xj ě\ZiCZB^-)OГPZ+K[{m;1D0oہaXfacK&NjjB:fNRǃ@ X,f1_M&~qh4*l>S0sZaBjPx@h40E;6):*YvJm4z _㔯W?MV!P2<y8^99p8tZDр@F$f'1t:WQJ=My'ƙH$0l6Q(`a6jr%ٺ PJxRF(l6ba<ץLY.e~_G@G<L" _5
LVUxI`]~.vMd2iz0^/,ڬZ$ra**⏹WY!1Ǻ.2J=`Vq:9foqUU;,A{w2    IENDB`                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/film_add.png                                                            0000777 0000000 0000000 00000001343 12534142432 017215  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  uIDAT8˥Ka 3E57p,͵mdgnzZidTֻ0b`S5YKsU|>{ Ikk+ofūwL&ӚH@m|>8#QUU5VE?<Of'-c=h4fZBEED׻L[Eqn6|4N/c#IyhjVTHv.ktH3\Sg 8psWJ\.ONx3V5{ą(΍@`$!rmxم"2ӗ PAA'jeIǶPTT糹ib	h ,:6ܫ쮩Cu@`6a$t;zA-Ax	Oz}r$-jxB <(~&InrC(oV"w^VVB1O$>KgRײuYu2e\{pKLII	E$
Ocq=YHL^^Q"Yܧh<+l[Ѱ7	 K8tO    IENDB`                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/calculator_link.png                                                     0000777 0000000 0000000 00000001323 12534142432 020622  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  eIDAT8˅ka1访c"y93pS9SeA]ԺTZzᘓ	!D-ño9}{s>9o>]XXh'	!J!NJ_^^F,{?>>ΏX;D"z ]*O/'J yd?֗M+%aox, z|;ៀ'NNNFZJ-J%
r+b{{+++zܵV?yNnch6^WUy4 f&A0	K& 0:\ǃr
B鏣$%3&Uj!vp)W,fhh 666`QgBNC(fX4AV?'b 
cccp:x	Ll67AWIGJP*	099y ԔFsr9)SJ z׉^&d7İWWW?Ch eVcPoWj/FHuWErG5Tfj?̰    IENDB`                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/user_suit.png                                                           0000777 0000000 0000000 00000001354 12534142432 017502  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ~IDAT8˥]HQǅ.t~UW]D]w2KTcМj(?^mkL:KMmLSdPDE`B{{/̢<Naͫ%PPB eFBWXTN!1z
/2vA%4n+ .Ģ
*&C=Yl8kRۀq" b0ʮ37-ڂEύn(/bzV<6,y;>FNW`=xY0vhmElx]7[+`]{0/2<~hZ(@oV<DD3U3/?/o0\;,\ud#CtM`Jz1KInȕwIV]q8<Hкӹ!a6#	iH ̉T0\=DUԯ%myIwÖUn1Ui8
I$J1Y̩ɕ-5xԿ %%xo@BYZ<6LˇĊ>)>L;4q%5єule?=՟=,EfJc6n+|n2$Ƙ7̋\.ir;Xr;y,Ǵ&VO|27H>V9    IENDB`                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/camera.png                                                              0000777 0000000 0000000 00000001231 12534142432 016702  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  +IDAT8SˎA=ИI*CF0	,f&lXO_`ܸҰ`OЍ1M &<yɫBf?+u9uϽUq\d(x*JOuv^,Kl6jrm[n7B	Sr/Q,UUd2HkT0'Fnj?/	%cgj"R)$AAp8|m:!EQtMl6ѩI׋zp8t:P(FJ@ l6~d"c Gx~)`S~pk~%6ѨX,"s+>8h$a
Rcߖ*4j._AA`5{Xy8L$
,Ks>=.(܎&C9ȍө)I8k2=3Dj׽#h'p{1Ύeq8`NgbdRx<.e1rC|.OpooVwؔUD    IENDB`                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/application_view_icons.png                                              0000777 0000000 0000000 00000000734 12534142432 022211  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  nIDAT8˥K`(胢Ca3)BD
"JFEQ}	t]x7=uE7<0{s8 \iŻC{ 2 m!U+/O`*#b 'nXGpbDs*!rm ;w@N~@'Yi^E3L!ͦL%`D00w&aϞp~]NX)89q>uT4#g@X{jlHsd/9Z%8,QU*=j54'_.(+7g.^pslǴ(O(!QH6: -@h    IENDB`                                    ./mvappsvr/docroot/db/icons/medal_bronze_2.png                                                      0000777 0000000 0000000 00000001216 12534142432 020337  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8uR=kTA=W
X,RDXXJH)""[,RMEDA,SZ(H!M6ox&a9s8sk7\Vgb
Q@ʸzk/{w̉1TL|XT!0?0HdH$wFFHAA$bM:d?1uFsi]o@[g
_{x$MH"gpb[;{Kno^^[ ZTM#e0+Xrl?ifhMW\]HȉFo.źJs,DSnPu?̉ &(y(s@VQ rN03T\o4	d9=02j}y 
qBq\@%X_DI%>+ֳvRDI	P	 3U	Omhel  <F+/ֳVOJ1qxkϭ*  Y҂	҆A 3QƺN$+~CZ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/computer_delete.png                                                     0000777 0000000 0000000 00000001407 12534142432 020637  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}SKHTac8]͢EVFX
,h-
j)qqSvYd6R$Z4:3/?_r]xeYLTɃ5]ҿ 
)C@J@DSN8Կ%'c\RRR
0>1fwÀ:::jض'A9S1?" TN./@: ]~\V
DQ/?CUNF8I$Ix"n_-jKOTfpQ1dYD&g:cv{ z' 39y16tT%HEUs	yڱ
oM~oH^ju5ퟅc젮Hm6G]jB R>}TTܺC4-,/B2\,6cۙFb((Աc	TםX.wPi$Ij 9hʫR[J?.5ȩ={4O<Z??|b}9_K+I,SlfQAb<hFjl}!l4:6TE&лK3[ZږbKUId,L|WlsսL$}}OOދ]S-+V?|RStnS    IENDB`                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/text_padding_right.png                                                  0000777 0000000 0000000 00000000417 12534142432 021326  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(cπ01PD7ۥvfd!&«@b&#6#L?>"B,eĦI$W3_XLl=	`<'ّI`W0|yFc j\<bS    IENDB`                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/basket_add.png                                                          0000777 0000000 0000000 00000001360 12534142432 017536  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥ILQ9<'	ƃ'MLA nUF6JYZ*-&Ŗn(eSz&AB4D_2f~3yE goz977mfff?mrN>OdZCKkw]*o2$ހٗX_,htf::ȼ1Qkܳ	6x)\5Ai2$k=Й,? \FbI|&yNܘ6?Q,|KKK^Te TJfŲD^WD`/@R.1L&{WDUNOOc||4Gъ`0NJ8ݽSӕr H$C9	yU	Bl"8QU;svj^`xxx$b-p8V1ѸB?ߡ
\AlyFг`ppPH \.a bf3XlcM\!qol|/$Vl.#h4JsB<8O,0dH,X @bĂT*ŉudMG[qV-VNf_oKWYrw+    IENDB`                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/camera_link.png                                                         0000777 0000000 0000000 00000001507 12534142432 017725  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥S=LSQORRKK[P@'j&VԐjeЁhԚhL)5)
y%}ɹ|W4,..>9==VUS^岮T*yo4`l333S?>>ҁpEQA0}{{QI=zx^Bo*]]]~4 5n!IvvvdY6F*[*X,Fp:V@p auuv`8<<9xܧrb&AKKf(X ~I`;>&k`L$hkkʼEttt͏
ʚB/.Y R`rR[D'U&H"MH9yyU~4q"2"K8999`@B(A	.;~4Awss@@L㦦&l͈/j`}n8VV&	0d2	O?::S	
_<Zf0??T*ՊP(tVNZ__Ftz^ZٙhBlp<e7ԕ0}p	۞ҫl{gnnNg6EQ7پ>Rn^|z^둑VEjDt)<Q=9)O'.)L#ڷɭ˴H:i%FcUz}$    IENDB`                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/award_star_silver_2.png                                                 0000777 0000000 0000000 00000001336 12534142432 021414  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  pIDAT8}R]hQ~>u|)i?+~ꪈ/l7"EÛ@E,2JpQHmhȂeS$/<=a	z(FCӵС*..Gy/t9,UQ^R`'@E֐PS$˴Wj{_@! $bD!`	A4`3	o8*p:85/9dmưgG$\O^P,m)̊W[g8hmm><͜:`uYATϯHG"<X&	NZvF&#N%Id-Z-loo`?`@ (R$ެ}H\n^yޠj':vӻfD>#
,kl6s&@Wda]?S$@^s˂ pc3L-\.޲n.7)#OQ|>*2J>X(l6c}|vR)N0?
X/
'T*b';*    IENDB`                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/application_form.png                                                    0000777 0000000 0000000 00000000723 12534142432 021005  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  eIDATNam>IF4H:aa189HJ 
uS(	2:}~!$@6W6/'ڀ%RedLdLRba{9i_,u;+Ḳ{9}LZw&cu43	UmLe0c|cTRl2/n|yJ4hT%GJQ(EXz=..b L RR)s-1˳u$Qiے|͍
U4vJUB{o}2%"	ɀ\[]]c4aTчvS(Ef"l[$!+qYXB:b&l:L    IENDB`                                             ./mvappsvr/docroot/db/icons/ruby_put.png                                                            0000777 0000000 0000000 00000001266 12534142432 017333  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  HIDAT8͓]HP}Qm.͒J4)1-5-G·K"EPB(5-bh@	mr:~],9\?_.i%>IxMkڹl1Ī^/VO	wZ,OZp=04cc`$ǏXhmbs3κzke,<ZLxN]過Q[\='YNǋDVUa/Dg񕘞+AgpZͬJǄ>KLGG󦢂ic"d3pfs26[^07V+>ItJg|<S0"{;[/-a'X\qq̛|dgpؔcbO׸5i}or(Vjj8:2е,Hzz*v֪q8۫mu6زHKc/?d[5d׭PuZMDFlD$ַܸx.rgf
r9PmUO%K˶{,#U^BX"?;/-OLhQ><,zW*ʭ    IENDB`                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/cake.png                                                                0000777 0000000 0000000 00000001244 12534142432 016361  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  6IDAT8˅SkRQzO%衿`oQA{	
F3
!5jAmY ԥp]gC&OܼgWݽz7QCO{7mB>s>^& ~HV.7{ЪÈkѣ?w=#<9&B"418[gs8>SE3ش׷-L~C4P(V㣌I2FWdɢ	Zg<K	6aJ2FAP4/*7,dx%g+eaq(	V^ǿGMX_0k6eﶆQV,D<
z΢99X1,ESUo>(CBmQcr90qL+J /eVaf](L@IEM5PAKA^E$)(C^BM7hOi!/e_aR
!:hOi!/e_'p}=LwcVC%~Z27=q589aps$8m$iݙ?_tap    IENDB`                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/feed_add.png                                                            0000777 0000000 0000000 00000001373 12534142432 017174  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT_Hu  J=[e2i[`A*jK꥚TP^me=VqKi\mRnSvw:}  :-z3W31=$yb5Xy199cJ{&`7Vg$" Db=96ImI7g@!p<-W$j"($loxF 4RQ#'"E:@Gwdv3'֩UIT""zy};͏8~*:iQmt0$Ff;m6E\`s|+wFZqBS6ebq!ocn|㹒o66/JkF=1&Y٣tP,<)-{O|:JVČl{/&YCjĆkF5Bjd]>lo2rj kC#σpS.Ԑw8G¯W^ҴWGzSZ-
Y&y_+F\OHCG1m/mZNڵ6,kLuTPCyGm1hmfF.Wy}.[G    IENDB`                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/chart_curve.png                                                         0000777 0000000 0000000 00000001306 12534142432 017762  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  XIDAT8c?%L=nEKtw9. ~><26:}8?|# V4G:~4>αn60<>zx|{Wro.{ؕW#,"d\׼_˦mnQ0,=4tY!
{Ջnd-&o[]߹LMz,t`Iw`=][ }
'!c?U~!?#&;(!pkt%6g<Xu[l7跸yd`	"S5cYf[uke yk?GTٱhcG.E=<0q~I1ҁn%:3Kue:hҹg֢=Հm243,]485
kx
:FRQ:<p3_+cou5@8e-Pq;    IENDB`                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/hourglass_add.png                                                       0000777 0000000 0000000 00000001456 12534142432 020302  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍILSQdN7lLCJu,XM"DaDbVJE&	2 v@B)muSy7v'PJ'	!1x1J]vZ/d*HaͪalB8ֿkSP"(`.Ty8"P
vfBF| ĺF,uUA\j٩s9}F=&,`JX1N c
eIs8}W@_VknhX@A]̺ 2Iw»!'3d3Na	RfI4Ј[	<W2~&A4TΚ)LJ͊?{¡Y)A"#Sio08 gyTpWXk}*N'Pn{&5g9H<	_('
~_+a`AMH1rq$ǄvوރoHQ'ȳDӋk!1ԁ^ћтkDީaܰ/ƄIxq|r)-`z7/` kJf+ 9B&<|Ùix&G˄9ܟ-ߺPͽlQ<`Lw3TQa	Rap+85FMlRJ    IENDB`                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/flag_green.png                                                          0000777 0000000 0000000 00000001240 12534142432 017543  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  2IDAT8˥]LRapmuE71KOb]Y*rK3G\@IǊ$!A*Ԍ\NmP8Z[[YyΨ-/}ߞs 2/
oSO>TֹU|&8cP罈`r'L_Ck_Lz 8T!x$m-`ruCI	/n>e躾. r	e@r.zJ
G|ec~GWVh),t' ު]h߻cF$mR#xt`j7^GaiO*j.7>\[JX:'<d
c>L(6pĆݯ- UP#2
ߒLjk¬a,#2NyV޸7F+Qp4f;,pD%dC3qmO	sQ(
ִs<3"tv3QȻ[./\'K.Rwn82AoH NZ@
o
s@@2Ի/BR*    IENDB`                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/medal_gold_3.png                                                        0000777 0000000 0000000 00000001172 12534142432 017767  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}=hqoiĂҊNvTDI\;dPE(8J""bcߝC&i7={{ƥI>QD{<qg|Zt<9zJEP5k}o{CZӜL=]@/¦xaJh&7<{mGuTЍRugyz=A㩙0z8r#g02Fkl=nsx%Y S|TA`bC8\.]
wK;-M~c?}䶩@}ZΎ6q[I[1M%3rR-4Mڊ)A(M;ӥK>^j꘹=.E&.6pld6~Ҭ4 ƛc1i'A	r|j2#m<	f1W8t8a>D:u֟F!/lq_ TZc)&8dIW?سɯ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/script.png                                                              0000777 0000000 0000000 00000001354 12534142432 016764  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ~IDAT1lTe  ߻^w@J`4:Mٸ0:b4qb6QtpȊ\ۻB)\E|ҥE[vx]lkX]ʋg] `"ݣ|67ك'~{ }׭O<zBP :7*^:;te_6> m'+5]~
f-OfG̎>促>Х+?58]];>,ƠFU+*AFSZ+΢)b,HAURk|q=\ίOfGE* S)<Ⱥ]v"@N3ӑy*B
ADD B)tM#&CWUQYTPdHDtz
Q
I7?R BNrWG@avl nR~s6lȥ/1Yf{oKi)w~{a)\4m^{})֦S}템@wxa\hs:ayBnm:Ofu걱ɒՕ0{׍jvw}yI	Ldelu? {;,E    IENDB`                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/picture_delete.png                                                      0000777 0000000 0000000 00000001350 12534142432 020451  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  zIDAT8ˍ;haӤ&V%iAQ/P(Ut(,N:-jqBBV^CS4i8Dik-p{{Ľni-NVj$eV~]|gp=Z}BKUJyb Ty/Qe#;a4|O16\:Fi!~C˲Ԭ,xoRIϣ3DxWv hrX$PUjR"M(aaY1%	TXԴDi@1ZXcVN0iT`p	"
!BKQMضF`LBnc*#dD.$ıĪ8f9]Ϧ.&N#­CO3K͞CiҚ-A}401c$I7'3weM 4,-3a][N_Kogq$c8F^U8
	Z	<`ϩ^C𲟦Xva:+zl熽 / xoLыKZlvBxhpb_MƬ}Ds3+b
PQ6j^w#R	8$kV_ y[e)g䍟yo<x    IENDB`                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/table_refresh.png                                                       0000777 0000000 0000000 00000001433 12534142432 020263  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕ohu??λ{URp.^V{E)
_ɨ"Q(|01h%c6Mk~9__7&xpxsNp٬
fGQn\ 6;Wfs<A}Xr ]ÇDgS31S W.՟Ҳ!wN'ky ѳIٿ?A "8eN@Ip[3 BW `y3(wRnlc6^]\M̮fWN8sDQ*O>Ǯ*B\DqYP@?'ﻗǱ?R
9wyri+G$'7UA"x̊y]D9>xe'[yGO tbxIDzf)kII~9LW	1
N08R"D`ߩLLNpy]~<'WC 59>fvmݻD	坯_b/RbXl"'g2%2,LCIv{lZPS,jFb^,˙^=l=t8}v8QTF"QjHE4\W<|b5]x>+n{x}    IENDB`                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/page_gear.png                                                           0000777 0000000 0000000 00000001501 12534142432 017364  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATMhe ~|ϗHF!E^
"<:tAt)."#{@"R+Tmn9=>`E^t!HD.XN7owtY^_amiqP	 " \5qCoOuLO߆r謫rJ$Dn3-_˵(K|v҂:#S'LH,X=0^4+$ȉ\%WOku}ɛO.UuT/CA]$9+:#g,̖RfmgT6ANY(DM]s
AH@ы&G.XQ]:Zȡ6-J
0qի4}VeŊçܫ՞={zj(%DA =}588ۺuLMMͫOv:)4ABS8eRrYvo+˖-޽{%JBI옘PU~VG)ZI.]ry5ۍa[Y	/|!k֬oKfJcccҪ}v)1H\nB+]khh133z{{UanYݱƗ:por	6=94,76)"luhW{.v FFFz}r"s/0Wjk;vU    IENDB`                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/keyboard_magnify.png                                                    0000777 0000000 0000000 00000001213 12534142432 020764  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SKkSQͽ$vaͣҠōEq? .Yv#.ݸTJ]-]HՕH!5m"j9'ZAW̹g7}188Yz~'!~y;䯪*
ҏ V*GcO0mJ@ǡ`l47gܝu &ns#f,(Ʊ:3QR 2g9Gj+j1B)\}BQ;sZ秳v0Wf= B)'"c}7	hu].TGFnv$.Ӱ:}'-}pf.LF#-^.ƕ"qXZBG3rCH`t]g"Y/71YZ
$?B2iL~JIfTP[Zˋ#AW޶GjshJZd\LROaE1!{gf4IϑI%DITbO0jf`\y\0[j
n֮T?91k|qov?5{irgs~rwnPX	8    IENDB`                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/book_add.png                                                            0000777 0000000 0000000 00000001312 12534142432 017214  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  \IDAT8mkq_߯y2kL<[#Bn\'7ĝ]]H\BHHP4&$ʔǆqq}6NΧO:s:Z6``FlUM|q~5@1U	f )}P+P ;mMɮ&V5U5|qu8_ ̖ۛ
Ψ0>9E<sIT`fZ"f!b*Q,p q|RZ$2D#(K,[X T(sujGAEB$Jop!ŐD>CC+XZCR,Bjh*^HC$D!f,
Y\(8/g|tuw\煿\ËE4ֿa.V.]]_?}qq:st|\T~<bN$:"Ip"Y".(YB\*?PL)  31.䞅sʷ
c}xy?>΀4eKW$Qdxd{O))@_bf<wՌϛTAH<Bτ)<    IENDB`                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/lorry_go.png                                                            0000777 0000000 0000000 00000001273 12534142432 017314  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  MIDAT8˥KHa蚩i))QjPQQ-DEUhS1PKk	3{H⪛Ù&
!0b􈪖)G#f{k;Թ7U--ܶF0L	*
AnLT0ı`rp]_qUAZ#c?[^ 2?u8E"ikK"^p)OqU˷xĲ.~fM[vLqljʊg}u)dեP.|'Ǌ*Z;wntV ǹLI6BǙ&)_MUfS\؄Y #63##LckPSy1CO5$ΣѫLTnd]=cQv84CoXqg)#0 )p[?"h0>MyW4D{W+,vgX5і=w>	7kʚ+huFC9ohJ-;7eZ9n    IENDB`                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/book_edit.png                                                           0000777 0000000 0000000 00000001455 12534142432 017421  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mMhTWe>t2DFQ''ZZ)"b]JQu҅vDD؈"4*]j$mC,1hy{9.{\^QCVU@xg0a$TP,2K/b!TD ;5ާkȯ,1QJ\}Yc̢;v; T;uoר RU2_yMFoZKL{RUADqNq"XQ嫃(	R~ 0a8o#LQHsvu2|G`r_u3aȞmXʝ}lK?gqr[/g5	X0X8+`Ϧ2̎MʋaZ!2H@4^2	:gi\C8uTcbhD/CX,qX''>_wȵL$#?:د)p	qƱ|ɵL4DnD1r/X%>RJXif}~ta"밡Y?iUL=<jv\[tQF9
:@3<tw~#LyfɃd2KQ(PU}wh|h?~=CM6a
a*?ݧEY8[[ѵNL3Q~*ZL     IENDB`                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/resultset_first.png                                                     0000777 0000000 0000000 00000001012 12534142432 020710  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8S;HBQoWaT8.9DmBju(ѥZh
@DWwB4.8p|1Pj:=h9s@_muW#rlqP!UT̢V"тE8PƁ-d<aOE;[P	@ȲMn$]ޥL
9X1aG>siǄ"[?*PHxMr=Mȗ(Z\@-@bn3hSYmu>)( _@:Gקx	;2(U"ϩ'4{u>f0Yl1{{Z!m
r0}A3bMIR*\O-Bܮʺ,(    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/drive_add.png                                                           0000777 0000000 0000000 00000001157 12534142432 017402  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SkA}!9hJ !=DoRs"?ěBs/޴^*ZPj\A$bK j$J12֋<}}3;lX,C&?:k
fidBQ.c'_3I&"nSu8^WT*+>0M3 ŐdHt/7XD]j1*ԣ(":nQ#uNReYR=섢p]\v{]#xp(H&aRsFsM`۶pI
T&[E9@J"/J*J/瞃#.EI$R6,ֻPc?QZcEiq#>.@7 ەՃ-ܺ
Op|	{^`%Wkj/;tf]QAq/[X,ݾyݚZ)6vRM<ۮzL:l0vr896ze1    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/gantt_widget_icon.gif                                                   0000777 0000000 0000000 00000004320 12534142432 021125  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89ad K   ePKm ˮB"~లw޽x!*ɴ%{ֶӡƻ_iX¢ҹҪܰ2-$뜹~ƻ9Ⱥnߏ唽"fͱ⦾^iSսF˞z~JMе3ࡾKܘ>T09堷^c3h ǧv=4.*5Ѷ=z!^ݣ결{ϴ{۳ ᅰ
ģ}T¹A>̭Ýc$*Ɇ"&̪ùôߺťȳ+8ȣǤcՋХֶlJxT}6ƺv;Y!     ,    d K   	H`*\ȰÇ	Hŋ3VƱ0UHdL[Ĳ˗0Ȝ" KTiYTɤOEѣH*-o?6ߌXjʵ՞XJ@\h]˶mVϤtRV4˷߿])v'Jفǐ#Kx
jEϠCM34F_x$yx DsͻT`nT(_μНCɼq4;Ë֯+h˟O~P2̣~@+'A+c1DBfӆD(VhTy BQ@p䐇#ޕbT(P.dB0h#D54*TM@)Di9
  TViXR	 3PzL*C
-ihhC	M ĝx|4$袌6裍
梡馜v駠z:j(1)t"d꫰*+Q@Khh+[
4
F+VkS* jAr$Ӌk覫Xa$=kr
눆G'7?2ww w \i=0,4<jm8@-D-#3P1(:*5A(
f
^5P#ch?P9xو}BI$v#!!%nrn1$T~
!$s;c"$#Q-d3  f@${:~#3I`#J"\ nP1Pw}sa,P觯~h &2 _`}AE2G  c`Z,,:6P/@GG_h" GM`H:/$`$ B~Q"Db(D"̂H&0&:P"h(
p+H.z`ܢ 	b5|p^$b _ :u#)1	b9BёE8Q@"HFF!dH&IJZ(	&B@E]rt)p[H*WSr!,gIZڲ#@4pGBi%B  }H2yo|Ct>j@jZt.wn+D,Y)ЀtH:׹Nt"@@zG8i(uXA@MBBħD%E!x $:l@(VҖԥY %NwӞtJ{!`	HMR jDJժZXͪVU>`XJֲhMZֶp\J׺b ;                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/emoticon_smile.png                                                      0000777 0000000 0000000 00000001325 12534142432 020464  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  gIDAT8˥Ka?omm})#(.bDQœ(x":`m}״`mѡ20OpMJNQFDPs_;o*pM
7L}gΠZPrQwYkZthn	*H"
#0Zw^{K ;hjU3q!ꋫQLy=|a6 lJi$̂`_$!>I{R  D8kjbuT,TbQoijΣ6[yNY.sv-`/iĭT,"G?j	s@4 *;>eꢷ?rP_
<Ylsy7^2;Lv7dӘ 2lDH"DrM=b,xKҐTL(KFθcDxjGԅyF%wbҧ1,;] UEh6qtt#&V(A|3N,F<ǜΆ}=_߲0ܝuK`ISޓq8ˈ8KyS    IENDB`                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/control_play.png                                                        0000777 0000000 0000000 00000001120 12534142432 020154  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥˪@C 8<"ƍ*kxAQ$"s80EB|nw:1fZ-ljz]V2zLCtbAZU*KOؼ^p 4ro-fT>fhR>'0hDt]glVxu:?)	x\J4[C:N<@D"vۀY^ȸZ8rjJLn7F-$P `Uu{Ԯ"ц+O&1pHp)|.UE4~SX`02U*
`!"+Ìv2NMѮ	!A_^d2)q[-cdGgbR(kpHw7kFF?EE    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/calendar_add.png                                                        0000777 0000000 0000000 00000001323 12534142432 020035  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  eIDAT8˥[ha?lNvY(rE"n\(ڸ(MQ+\9E9̙!PkImlkmL.[O>o Y1{{$zD3fxox!fOoYcC9	Y)ȳu O<8<GC3!9*ҬL& ?xo ڻ@e$~P
 8|CN'}$Eta֟y[2CO%)#p08:s-\xɃ{ސE3a+KʉCX_[NQkk	Yg+MO2C'x|EH"~0h}}C'	I~$#p!T0m `2&SY|u멪J؋n<B6u Qpe7 m>М3T^=ƯyKĮ=\$֫Lot#Z\?^$NEG +	s}iH- 4]Bkgga`U.Sy#)%ide\zuaAw kW6uh;pp{/NZ    IENDB`                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/car_add.png                                                             0000777 0000000 0000000 00000001245 12534142432 017034  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  7IDAT8ݒKSaЧ E"(#
.2k3˨(zlB2*9HL˚.͹-Ed͹iC}>s"v߿z
 /#@IShw7Pɽdes~g)lUywޱ$|c^-C" Je	vtfPԍj*09ϫo uN߃5C)c@q)E6rD7nn $Ź&<$Un̂4qߍ}=qth'Al,J bWxr!*iʃw䜂3(*[#д$*qSb"mq㋰v<eC/tgRUᙰ͜*f!%+:BP(3 69eqTwwh"?_u_~I40j p%z'ڐ:E RBDψvj7,[|jp>U`yEߕ
c,ɹ?OyOb?f^<
dw݁    IENDB`                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/database_gear.png                                                       0000777 0000000 0000000 00000000724 12534142432 020222  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  fIDATkq O*E8:!)Y$("aVxՊ̙2])u>2; Lgfk%}4>$I$E܌hg| 1[%-f*ӊU3R3@UDxQ#ʡWϷhjƂbĨcۚs"zz}4n_nEֈ6E[LvcQG?kQzmμ7_'۫u3ᇮ_5O/nŭrjs'hĴκ<Љ~xy{{ѓ"""""NH""nưqv~    IENDB`                                            ./mvappsvr/docroot/db/icons/page_white_link.png                                                     0000777 0000000 0000000 00000001146 12534142432 020610  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕;bA	Y5DQl3ED1QEM|
тo~gl8v% $l|`zdz>1IFr:+<d=D<Qjz~|>l6p8~T*uqG ڰn\.!Fl6O2 X`X`<ߴԷd2'z%NB~L\B@ AH˕Jh\HN{ k2
,8.:_CfczVp8 łD"AnpbB@kZTUZ-4
pp:Vh`4hN1&jo3syz|lhP.Q,NrxbR]vJ_d2Wv̞l8T*\.wbt?JOB
>    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/overlays.png                                                            0000777 0000000 0000000 00000001314 12534142432 017320  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ^IDAT8˥KHQ;hhH{D**[EAPТPn
4J@EFiqt3Dg{~s?e8{ ( vB¢@kY?s]hjqBD8S^)XB߂Ϗoc#%q1=> 7 D$je.9lYMD־R].XԖZZXs
{v<= P %1FT0vzK=K2!ϾmIԵ;GZIԃcDD)t1=P\K #_9s>8fl?D&-n@Lӏ `q5c#7jd́2/S<_ze9xS;	و/[)=Hb{rTtil)@pf:qd;fdd&tMIiC\|[mc/3^PH=^ 9ݑ`ݓ7^7>-`?U'L'Iq	    IENDB`                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/user_red.png                                                            0000777 0000000 0000000 00000001315 12534142432 017265  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  _IDAT8˥kHSaǥ~(˧>DQE!qmZr]l6NZj%EW*f!gQ60br￳E~/ ^f*eE0uBd%PRT,"`(CPU)г\:.}#]Lh2#tV|."vvDvׂ=]뾎kab1cD_ݡРjj۸	Ξ[|afT]ykǓL{j077\#UQ(';DT1chSu+C31b}"r"7~0hTT1}2H+|a *KB-ˀGw|pATZ#p:( Tw	?d䮈>q>N ,E>, ;P+VJ,+'z/xg&O Jnr.H<]uA4AtG&t!gj3Gv3`4dfLsӬWlU5M" +'C4!,2r;A1ʦYXˑ    IENDB`                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/page_delete.png                                                         0000777 0000000 0000000 00000001344 12534142432 017715  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  vIDATKe ol4xFAEAhFRh.uPWh`j"ATDJQ	6xΜ{{L~gJ؆)d͸3W.B\{F vlXtLH-{+Ο^?/k<gJwj?A>8--&;T߶řlw^~p=,+2tD]"(669]f߅I@A	JD(JwɆ^߹V7=	 BFh}RBd4jc<yR2
$j)%@6+(-I(B!lLt(YRC&Pɤ!P$$7Bk)3IR@GY>S1Xe
}O $hɍ#N}ྦྷ3K?}bB8L	A##=}-`xU6o_
qu]ђ>郖[6 ༮
akrԋoZ%Wλ1G_4\::]*,/_w4E +;}V	IL}oG)g $[?/`/} -%nQP`    IENDB`                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/bullet_orange.png                                                       0000777 0000000 0000000 00000000433 12534142432 020277  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT81q_ɦxe:%2\(etW'9[%bRF^K6ó~ꩯ | \5ӒfR89E/cb.<mQɁYQ{p@Іh):90kNKv`?ZO
߆hj/[GK}UDbKȮ,NG    IENDB`                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/calendar_link.png                                                       0000777 0000000 0000000 00000001433 12534142432 020244  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥OQz޷t+fea8!!xKTʖ"+SATXv|sγ=I G1
)՞~D ڞxMD-P=C/Px }Ν`$[˱#5aB70 :@#h@t}<ax^<OB^	4% NП:I@+\Ya'h!5	&~{l^9@?:`a5	l  DRMZ~|v.Ѝb l	q	Z߃dLLk{I l߱9&l3`KWd2FsYfTZ]HII9I~cja~?|>N'0wRvLFFC>
hm%3$p"MMMPj(a]
P?a *h( !˃jw0T(-c;^3$R
U(prINUPPP2GwIR$[kyT
LFk3Zu'RSSOX,lsͰٿbiT    IENDB`                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/tag_blue_edit.png                                                       0000777 0000000 0000000 00000001354 12534142432 020247  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ~IDAT8}OQ_pDMƄaF.(Ɲ ƅ!DQl@cP6E~LZfNAP
s{*ab1DQD"aB! E4$Ir2|;B(Y,8DpB(9,Ʌ@ *EQ@BɮD\&YA+-'IRp\l[ ZB/I;/]L&<O#2z'MJSRGkb8YLwc%(f+f^KdF~yyYyQqY`$mLմEAɌ|.S "B$)DwvU̾"#sڡ2Nl8wIc5ыIX&_`0ߴQej,[pg񛹉QYRnZW}$']˞
I2kzU.E J(DzuĞ$nVӘ>{xpib"n$Q?0tNS5|]΃mU?4"}L !&. |    IENDB`                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/bug_add.png                                                             0000777 0000000 0000000 00000001446 12534142432 017047  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}SOQ(,QTJLjbY$(&4mjC֦Vse}vyyν/ n/ֱyY1譃gx^HۏE.NKOZJgT~_yד,- {'JI "c'	nvbC0AJ5V>9Q+DuHR8f""+b?|Y;PΦ]8AV$6H{I;q>_umNFW.j]r0aPJAs	Yd!wd7f
v#$2[&/a\҃,%?Y%LlCl_y:4Đr;R[ F{XmpGf͂n6	cNŝVTd`2IPuNH%~:XNn*sɸ6et⿝g5ъO6z(-3u@7 IyjpskFa^	^155i5'1-rDm*QЙwݘ|tJJ(CXf50pT
*R#xm HtSHEϠK@Q[[F(Ene*R|yv⸇Lؤ;ߗ5y	~.9    IENDB`                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/text_uppercase.png                                                      0000777 0000000 0000000 00000001353 12534142432 020512  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  }IDAT8ˍKSa
"JB"t(2&ͷ$ߖ:u.M7
D%]EZ{9n/97m{ 9c,)Gy]"ĭSEX ;^(e(I	'jeގ'qˮj5V6aÌ;o(NZ"jh#Py{7t/f88pkS9;ʊP{ꞩ͇ = @ӄ 5#a]X>B-S@o#4FS(0y5RjԂwS8a)nFycv>]CG '@jޘ~;8f,nK\l4yrSwa֖r:I4olaO%26ؙf_uV@d|S*iV*Nao@L*+]A肎2ߪ`Q~bO k5б:RkRc\qRhCSG@G~]P@=R^NzUCkjXa_&4t/Q&qa(&E=}];kX"	,wUJj	t14L    IENDB`                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/report_magnify.png                                                      0000777 0000000 0000000 00000001342 12534142432 020502  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  tIDAT8ˍkSQH4MMV"R
BA|-bW>qҥ7(G}TVQT[QR&isf\\
⁳o~sQUvnn
v:3>p&a<smg_W~CG_
aITuNJ"SҶ{}."ǎĂ1AYo>Ӧ QK㈀BT  6bx۝Y)
 ڹ|KVQYUN#b<p]W 8=ܗћ	&5ʵIV1&Q,ӫLkĩ`6'<&)j<~[bS{K~#8x/v1=D`u<ex1\P(yA0T(<bGTI&+(3unO.Z+0u/6!A=DtB6r܇mv-8L*I*KN໨x3iFDZ3AJ+~df1<A0dYՍwMR1EX;7_KcLuZ6s~ֳjaײB%|ԳmK8j~ Tx}D    IENDB`                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/shape_square.png                                                        0000777 0000000 0000000 00000000541 12534142432 020135  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8œ1N@DNJ13$$\r;]^kl4Ngv'{wR(Q ˴3 x~zDĀ&	|^hTtDI%¥V9X$ p1lĠR47/u6!ͣAZtl3֠*kFrKzW9P`XquguB`~#NH>k$X =o7oWem,O    IENDB`                                                                                                                                                               ./mvappsvr/docroot/db/icons/map_magnify.png                                                         0000777 0000000 0000000 00000001435 12534142432 017747  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATu  3+wĘpAPAKW*v+Fɿ`o%
"6
A#L$&{hvfvvgfϼ~n>>E    g.jQ  2E4-͢Ѩ}xSqEjP~%}r[gX\+٧o%G;(n
nH Iv$Ow즩4M4OSi*2!,0єG꾵j1Q_'ji^aIHӉ}שr'r,Bbp4$=c';hۍ;m|]1LBhLkq_MU8UҪ FHoΆ_v,䅧kwbܣģ[?Z'0I2i:C{.[o{ecyKUԚxr
Y.%\+mњ\v;zahiw@MM]E!M3((fE@1-41*U奡b6ӓ%=<h4+EVRq &o`rzгʦÿ\Au9#Z/֥&⪪u	cx!frҎk9ryFx߮c   +i<(B    IENDB`                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/comment.png                                                             0000777 0000000 0000000 00000000635 12534142432 017123  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  /IDAT8c?%jD@XW-'lp ߿ӿ>Ϳ_A! 3 XP?j~P_ĀUgAxc5)PwPͯ
P'{@[&P_jdN C5,
7`>P2hĆ
<;{gnIJ@J@|S  "j    IENDB`                                                                                                   ./mvappsvr/docroot/db/icons/telephone_delete.png                                                    0000777 0000000 0000000 00000001530 12534142432 020761  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATKh\e?L2I&ɤ38dJISK^"n**⺨X],tYѭ`] #ZmB4m\KCΙsP>QU|懖ƺ"j@K(!IjDE0UCOۺU9QDs9%q3#7VƃrMBυYsC14|{&l(]=8'[)tnlQ%ք5T\J. @dX\XTlÊ`z6x>͸'E-A!El0}
~/~]8"uXpNH|6߾I&VGgVWՃG?}Jfw=K9NΑ\6#v_f&iHeoǛ_pi˾rGhIc+Ez>ï}ĝRcT>=ូכ[Uʝ<9CkGt01~N'οPSśYXfr(1juB8vHOؚ\*356IH[k8Q)
-k7Hw})ؿ_LO@M5	Ø|=*k-)~~(8通+#&*7R&YDIjc*?R5)V-W<UQUt}kizLz]㧏ρ)    IENDB`                                                                                                                                                                        ./mvappsvr/docroot/db/icons/angle_widget_icon.jpg                                                   0000777 0000000 0000000 00000007737 12534142432 021130  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 

		"""""""""" C             !      !!!   !!!!!!!!"""""""""""""""                   B 	
      !1A"QRSq27ETat#Bb$3Cr              6       !1AQ2Ba"3Rq#br   ?                             뵠)xCC8,.3zm]w|]6.8m\gۼ !xAqA7xKw=cw=cw3qA7xCcwcw3q7Q	#we֯`ԺGNHŃn*;O?U+es^V)22t"eο;ŉ#qw9Vw%(qwH+VH/Aq<V$E2~v-IUtJ.a"79#"$De;yZ"9'o+;yX$LFV	yAk[>OXm)Q-,ς9^o48wrÄ/حพoY>)*"(+RDFu7-IAX%DnZtUGY5\Uph'bi5{j4%f^+mH.c-kgڴN3fMؤas-.Mםo͐֠0AM=Ʋй#F*.c Ḟ$.PIdn6su^QϼS1G6M%mʑPN0orH,E+屯(RDFV	C	Q~Ϝ!}Ooz9IWO6ܰAZ3`jJ),t[O{v4fc>}ߙ_%Onw=\ښ]Wp7?ٟ"kviM3ҌrEڽfCX4LuWso"?d~DE1ұH/ÄEoMc-KprmGҖjC=m5%/Q%,<0w4f%m$꒺fkKhX֑lBᎾ F:iV:nUuU"de^~F8mcKܲr,"2$EX%Gx->X7>p?7c%]<#r$EM UI{hnm<i(TdAS
k;oӭkm[)0O3.̟."Z4~+wi\ϡh-O;UŬ͙k< ..ebmb/|N)0t~Ҕ1̮h}	G1C֮ŕ]LT>QiՈ܉JV^嵣cjl;CࠄRh6ZI4slsUgJ,h~(<籼Z[dN=h묘5Tm\25#v@h#j[3X_fӾẢ2Lí,HqX7EX%Gx->X7>p?7c%]<#r$Ehbfl[&&tRY#_sꚭMWc*	s2^"Vu庉^UK*,1;lm+ĭ^w̗?("5Ѥr3X.{dv JFJDF>AAU'L29|e+fn{ ~Sontu?b[}%\!De`9`o` ?V\O7ݏCthvEQkvsҸȷ CjNURW_6*^apԑ)R)ԙԦH:9@oy- sھXRLVq4oڷu#dn#IC !,|.leWr(/#1eYȻuщM$cm@anūNV=5ibϫ#j6P^8cU,۸\0׌0E;?OHqQYQ$Ӗ*m1yΑLLi5k]Ub9M"/ܡoG+MM97TG/sqlblJH[}7Ȱn|+x.'nǏJyPV,U͊ƥ۵yEWRMXL$).ofAD$gijH-{?'5k߰4c)Umq\[(k]=dE(0vӣQ߼GLNv/`2$B
z驣t382(/s@ɣ{tX"EKZW ڹ 6>pr.ML5NlJKB$#lYfQ@\[gWEژlF2$$ʯ:v*IJ5U"hiP,eNqv_sn^EX%Gx->X7>p?7c%]<>3Ccgq?Mm|zʬ,<QF6)B9o}.w<6?1 g<eA}einWAZ.sZ19ѤuڵdGAɶNb5kh]3t9KNϬsi],/:I']VSrmݝSFSx2vCպNwV7ͫɀZFlS6ZibvUMK0q$WG|\ byfx'
Fa|/;{V
ŭW/#!#SҗtE0Qsi$b1TɟVJ>hZC|GlSF/JXRe&OF45*dFrO8m;-:o2J_{agR(7ؖ*F<#Ά.28۠D4:6w7>4в(+ٞԮuy-lh[O*)W#VJ;?.(A'd{FW7J⤋Xgi(ru)Od\Ze*buk =QN\[hY計jSQ0s

g҆7.b-~˒)Ch|CN۵ostw^fܻcv}]MWHx8]ɹY&p:czt;Gg2=ǛT*"u%gS'qə>WF:N3.EF)y2EUIr27Tjr#u_̻U*E[KwdnO(uwౙ*2T2h`C-5lk+2Xk2SUB(Ґ8șqՠe^4#_%kYK঺+K#uh{4M[(K(6u}7%#reδ} i4 JOfھQXP(YV61,\FQ.	-a&"[\RYtaWќ斸^Pf4]D}f4]D}f4]L}Ѐf4]L}Ѐf4]L}Ѐf4]L}Ѐf4]L}Ѐf4}L}ЀfT}L}ЀfT}L}ЀfT}L}ЀfT}L}ЀfT}L}ЀfT}L}ЀfT}L}ЀfT}L}ЀfTL}Ѐ @P @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @                                 ./mvappsvr/docroot/db/icons/therm_widget_icon.jpg                                                   0000777 0000000 0000000 00000004750 12534142432 021151  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 

		"""""""""" C             !      !!!   !!!!!!!!"""""""""""""""   2              H  	       !1At2456Qau"3BsVeq#$ERcf             /        23q!1RarABQ"#   ?                                           "jDJe㞒ϔzc˲yFC#oQlOcA#`=u0r}C:9lO`>o#	DCRLZmfܰ#TEz>ԅ^rӌ5Fd ԥJ;*! ?~L}6,|:H[R֑K$ʧd?ЗH_nE-;{2H,vV	uM)mdWf 94wOieFTz%Df""Ϛӓ=(&%o[x+-)AkdKc+6"ku7
Y)vM$ʣd7/"󖝃>Q$V7kuby.6ՒuqjdFU*%>mzNmFIysF𠯉K.B&Sp"dALBpc~pԅ^rӰgѪ3$|qCo7&ӲsZr݊WڥTTPNy-)R$iDY
~6WnXCY,&
eOj/"󖝃>Q$V7kuby.6֐ԑ^ETU%>mz|ːR!VTs
*&!D=jKE.ɣĂSlR"CRۑyN3Ecq>fV!귛i9)=Wn%˕;F	DO^.i>DIePTȂI@ a#C֪nRG2H_nE-8TfI%&]#?b+[%D4:4'(rDTr
Z_?Pn vgʓԥ,UyǒeȂ
n[RΑK $ʗoGH_nE-8TfIqJnV0m[17K|0l"D>[DJ\ɣ1>IS+܎~"ҔJ^UQ҇1ʥ_"zMt\i TS5=xjBr/9i2L0CSƺZُپj_ꊉP%7U|t3.My\f';	F^[Kr#kEũqRćJ'h)kHƑ
eI͢_V'RۑyN(3$8;\kn590k!_Y䝄?<)gߤ2]YͣFMzX8'CnR
eG]H_nE-8F̓qaֶcoË3+5>a䝄?<Y	ڶrH-C?;Abndb{M+M4TBAL뻵:!܋Zq@Q&=D4HA>iMڟ۠|&216\G7ÂwL4&eBt3^L<pL ʽ|t\cm$_DPgR6HbvBy}t"kU7
X)qQcڽH_nE-8Q,i֤KNȳťԲKAym$$C:Bs];e\Zͅ^Rn'Ou38N]G,ErlO2QX=SdF>fXE=-bAL-~Gņ/"PCTfNqk2KKוC[6z{ԬX+7vAj@tIܪJr!3f5CXܪ/Ed}I#8̍)=͉ۜ'7zj(E֪nR
eCl>05!}2 6Y.8Ci٩j:sa5*tQje5XѮ)Yc7ީN[=ۓOoDXT)_IM($)n@زhYRkus!qG'^rlJBi~g$EQ9or^㼗j3  a{GZ_G-z;zʓ<q?hř)禴b*e&wwba\C                                                                  ./mvappsvr/docroot/db/icons/status_away.png                                                         0000777 0000000 0000000 00000001432 12534142432 020021  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅_HSq=EѣTF3F}P(LL?
-45ΦM77ז۝ι[ÜKwwYf-*is~| ,'J*DnOEB)٪vK@_2c^si[ΓrsL.zgrseruR@cl'44g)6ZɤnIG0aC0LPeȯ#
Mj5<AS{/u؞י|]5E+=:H~r?e7p.DChxqzgcANzrfK~Х6U,8G1-}^몆N &U'U? :lrVªmnj*
~v<=:}DPdwۃPZHY)ga?1SYX,"*ݴx㻎1}*d ͗٫	 CT,Ca	nWJѭYX~cfqH r\b}ZbnAn&q:e*|
DXq3S8&շ51mL]
4I$x>D@<0vQ8i3ii7wx)o 9D4.tk<F}qzb^9ȾX)I+]    IENDB`                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/cog.png                                                                 0000777 0000000 0000000 00000001000 12534142432 016214  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT(UQMKa^	tT2
.EQС:EeQPR麖QRq%!O^wm!c333To^%ۚ\Y|gz),{b,پ 7g|	fʨ'TǂLGUMW0FDNC	\`BASJk4$0SrI ZHd(cO:/B&69I#M:X61đ|hK5AJTȐ9Zf)
9+<OQ
**4KrHk?WDj
L>c!i9BL%^0n9ֈs>i֓i붻k>Gj	]    IENDB`./mvappsvr/docroot/db/icons/clock_error.png                                                         0000777 0000000 0000000 00000001671 12534142432 017766  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  KIDAT8UkLSwO%_DDelYn&E͒öheEgXD@ۊ0KkˡT:mPjK+[^8Sѓa 0+}
wڦ7&"mYau+IX7Gبt(R؜1u3eɹbO
cԇۖ¹u"¶*.futc:TDšec'3gGq4Ѯu<AkWja9TdGᖝ\΍nzt"1#+pDCڵ'1Ѽ)is2AV]+oCMP8sY n]蝨8f@x7K6p`&si8GFa4E0ؽ=+ho
B($]\UctaWdVl1AfL,E&k]|wމ&T"+hG*:Tua<-퍦yD	z/=4Y%wD߈-#jd)P2u
$|TPsAԊ!h~|NPElmKRB՟">]_ޟ5Ok:/<@4-X/8IZ1\Wh<`٠ձ.T`GrtΙO+e^WvoˈjF"t:T/|`
ɐ%`I{ّN<."H$$ջx$^[.זoKk.妵5?:]    IENDB`                                                                       ./mvappsvr/docroot/db/icons/page_white_code_red.png                                                 0000777 0000000 0000000 00000001113 12534142432 021411  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍOkAk//9ւG/"!GEԆ4M[ҮD!@??='%n6I97&.<,̻ggޙ0GdER%:6Gf!h6@ }xn$ijiIC "qބ1X~v=dCp
	(9mSKR=IAuA@z)㨙t:IǋS Xh@ fBp]yKo$*&K*h/C=!5_=Fo8ܶo'^޼W+a
%!v泈{pMW?33eJG\:=8+˝
U$58j{$QPxJ@|~z_U_SEw8\2%Hҿ9n3ւ?lPHۄBތ`$)t~{Ff:    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/package_link.png                                                        0000777 0000000 0000000 00000001653 12534142432 020072  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  =IDAT8uKSaDA@/zY/мlKwADm9)+jv,.s4.v!+FtyL=sΚsy6۳R=_P p=c.^V%?_&2ץ2CĒiJ]OebU4	,<>?$f)Uh8bqp,¾"`/FȭǢMgIX컿d|J`?a{soCzuGE\Ѝ-*LY{1X ~0\&+UK+LbW!,O`z<R
L֊y38~cfbҝ,e9̮.a FW&fhEkIOs*|`) dWxX$۝$w;XhKC,kG!fInt߻Q#B`ДE`%GmHu׊o&jU|#/²(++B[[sSfx(OX*G4eB뻗zE 
i1d2Z-rsst\"@%#p*/íWB$Lhbl` !--@TD$kS3R.y! H	Vӎm 222|dIRcuByy9rrrP(>zFiھ.666:99Lz*-\͖eJIRψ'XیF    IENDB`                                                                                     ./mvappsvr/docroot/db/icons/calendar_view_day.png                                                   0000777 0000000 0000000 00000001074 12534142432 021117  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥kTAw &X!!`@ZD[+Q?A	B=Pl DL#QE X{w°2|f^VmwQ3Cjht+#9ߘ?0?<2Sf D9 
oBDjGKHR@ U+o[RbhCC : {\>߭s!~7SҳOt֖zn?Wx#ŠQ$@@  C:k Q	bh; QߒKu@4ܝ}T;8ͧLDkMtl$'&89Y%c,Y%@x)ijU1i޾ṋ݅ճA-Qh4DqW ^<4&.    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/hourglass_link.png                                                      0000777 0000000 0000000 00000001547 12534142432 020510  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ[Haw)e7՝EW҅TJtMy@iqn'̥E7-M>y}.~/^<,}UERMDCn)nƸkd
YȹN X4,j<$ÊkNT2REU!LsA1Y+ 
9pkM(ʱ4\s@f@ߐmYTY! /CdtS[W)0"CA*e]@i4Ti]C@?}3cX۶aЎ};?1eèqh׬Bi>;4w5l?y>f)MdUݥME~$a8d(Tg$.S?21Z1j؆ۨ?CVQI7	Ms;QYYԴ$-
DmxgAKkhϕ"??$Ib`` s*_Adժ%en^Bht:ÁD"@ `j_6IKX=:A37!́H$b;{^h4T*$Z¤İ
19<<<pw MZr7Oӈ"`@	rEEEgjTWcޤg<gmqn]_p9$*IdEآxV_G7u    IENDB`                                                                                                                                                         ./mvappsvr/docroot/db/icons/database_delete.png                                                     0000777 0000000 0000000 00000001223 12534142432 020541  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  %IDAT8˥S=AfH"1+B֖h!46	\o% 1(6{s	H$$c7^.X8f޼?C\ %<GXp]ك~&B'I_a8>f&@(mt]T*4仐J۶_e>Λ6FW*l6_
-#?kFCl9ez`0@  ]ץlZ"ة	4MC`0xNp(طc&UUfP2l&;3]$!}lS'0x`xXO0s7gSڭp0\[̏"_@lwڽ
roЉ~y	'fUOx0^"jVMZ3ռ{bnKBq"0,˒(0^ð_C*OņL&FnRþ:|G1Ʒ1;]D>@p/n67իi{:!]    IENDB`                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/group.png                                                               0000777 0000000 0000000 00000001361 12534142432 016612  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍMLqpЖ:ud֋9X@BLɡ"d[?Z)Rm{XkC
ݚ9k2<<߾={~Q v{X<o[Y<nǶ'㱜sakZe]mr_"||2uf]$@}`ƅQ3OҴC]LVu>-8&P{K+Dd{0IT~
|꿋#-7p:3I bg7SB U:w(Άj$hOZ(NDoWWu.5:<9l2yRԺ%b&O8Dmd0uun%t%=Q"<xV4BCa&B)!ː+T&Uyزq[J IG&.>k{ݒ{u3pv
Jߡ4-aJ5髣hO>6@  bj<cא9}^#/ cBj<kif S`_[S
v׀U B," YQ̳9K&΅2zJ7藟`_A |A    IENDB`                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/transmit_add.png                                                        0000777 0000000 0000000 00000001443 12534142432 020130  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mmHSq0"IA8ؗ^,2TRIKEfjPP6ΕEPA՗ИX7U,..~Mh6xKi-
^p4CLo>0drIa;`=y[[1/zp3V"S.Fk^rf3ՊzԑŞB92|δ0jYDLP/(Dt=ӏ=͈59[Br*BH#&363z
BΛi9tBgo5~TWm҈{w빣ne$:uȐ1Tr0bo5_UAqMMM|HG(:r$`.{$IWŚ~pJ^M	gDW+޻~q>`эQ+atņƤI5;K 5 k?;e^xZ0_֝ʓY3_<ԍdXE!t@,%p
_)Wƌ]=SM{ٻ	Gl}6w(V?-j{^uw2gRIWlo p.^ߗK5<7V&o[5n8ncٻԼ<w,    IENDB`                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/page_world.png                                                          0000777 0000000 0000000 00000001607 12534142432 017604  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATKh\U9;w$4M[ԶƔ4BK*TMTpBe-
V\ąBY!A]$jbRZͳә&3{~ ^tSB@ Q |(v铱 ^|b}h<  D ntZ%7wu`  hO
&V
D
qŧ90
uN>  (4WPM,4zMꇕp׮O^J~'9W8}Z3t7;)PFՌl0ݫg.yn|nsTlrb1xɵHwg??
-ynos Ha>чJ&b]%	K93ԣtP,/My"`gGi#cZR/me	GDA8Hݝ)®:Һ-,f.޺Fe-)(>$Vй*8
*&%<Lp Wy7/?RhYՈAW>V;ٞq HO\s/^ｼyDCMEVygD@mZ	qb wvA(Y9s:TD+SM5  .n[hh(Kh I; D +I+k6!A  @  ι;FQx-1    IENDB`                                                                                                                         ./mvappsvr/docroot/db/icons/sound_delete.png                                                        0000777 0000000 0000000 00000001307 12534142432 020130  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  YIDAT8˵_HSQoz B( (!f&ݻ?d6t{ӱJAK`^A!>PiqK۹7#:~9 _7@2ke_RDBJeD|GZɤLOU__B7_  %_Qt
\l?1::q#&@a\Xns~J%LMMX,B$
BqK#FNXCfH9ΊkH$e=== V<E+bQkm9\T>?aa6a0ykebj&`cD,&"djVvx<f͇o?4Df^󶕧A1]]Daj
q:4SL[OǾ|I|.`D:zvay1DQ 9TfB3vj%A/6<Uù2Uu^J|:(QUzͫzTīԇ)[j/=}ux{~+-o6\ю/J"ŬԿj(Osk    IENDB`                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/computer_error.png                                                      0000777 0000000 0000000 00000001420 12534142432 020521  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}S]HSa~ϴ97wl0IL(2
."˺]Ĥ".T("$pmX,HPɩt;;}MŨ~>;EH$8˝7MS2,ʿ bXy%Pl4ï8vq\.$m[6	XdeYEкLΩTOXXH#Gw:;$28QnapM-
oEE=kymSXmՉy,YQBPkKp=
45APD*+gPiږP)]0$-嵤`*t}]fRC]kߖ֤
	75;JybA1
Z.+VwS-] ȍJgACē~tE+_Po*p8tܹ[c9djn#MIӆ5!>Dn_^uBvԉ!xNS*Z{`gg͕@ x+?a_J C~CEeX'Hn/c}pC3p8\Auttbu4܃NԔEv;09 PH#㤠52U<expݛ
ЙSO    IENDB`                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/arrow_down.png                                                          0000777 0000000 0000000 00000000573 12534142432 017643  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥?KQi
H*.EA!XX	vc!v{;,ӻ\}Ï7Ibc0u2B^h
gw`4+@jɥ  s5"H hPǁh"H.EBFݜ&
5EɃZn+;l8r9~c$	h>*k>hLLjƳRwUd:<$hݸ    IENDB`                                                                                                                                     ./mvappsvr/docroot/db/icons/page_white_put.png                                                      0000777 0000000 0000000 00000001013 12534142432 020454  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕KKaE"!hQAIe1-J\
jBA	Rh-\HhA(::ۜ309g82 2P	h0,0@	YU8.U**rv%@C\.eki$ID"Qx$tI@
Ţx',RѨ(0#JZ 2bXKKՙBL}KqP(YL*y$jfB\HB-*vױ}o9ӭBT%h(L<ѧǨvdx:ٿ{Њ7'\;TS;s`ۄ#\0?vaV2+:.ŷw	-ZeR:ؕߓֱ+(\Ҵph    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/application_osx_terminal.png                                            0000777 0000000 0000000 00000001015 12534142432 022541  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SJAI+!.QN,DۤUB* 4AnvN𘙻7ovwDE%^^VWmQB(PJA ?@Ǒ_KIOn"G~ Ŭݼ{\R:|v\2dv&s
DXE*,2k;{ 0L&~GRچd\,!/T8nh|Hli.VARjjbq&36 d|`Z-vtL´d[6>HW&8D+e%0Y1-fqqiXI-2?Ofc+K#&="u W*R#a'{	CDÄaFk\SPs&;ߑR\    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/pencil_go.png                                                           0000777 0000000 0000000 00000001232 12534142432 017412  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ,IDAT8˥]HSa(b~\6-Cf4)lHvF#wJlm	Өk۱"0eXuamٹKNtܼ}}	 Sv7q1a++o-;
ޛR4^N>@80WAxHAӽQ\Eht`_>%^1]A5
~7%%Xs
z
&Xĸ8<iچ!VR9Pver^\|xvڀn.6	b<--
>m
.3}ZZi:X^4GՄ=ZkRpc8bA7
8hz\+(f@Kw#	"뚷).nKr_y3^c%UhsiPN ]MMVX%XǼφa]А酌D)؇FGOR	݂RNtvisg,yHm Xx?Fs) T__Υ=    IENDB`                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/text_align_left.png                                                     0000777 0000000 0000000 00000000321 12534142432 020621  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   cIDAT(cπ01PD/0Ű?1&Ű8R#یvC_hzo4`>Ll@F L.U    IENDB`                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/script_code_red.png                                                     0000777 0000000 0000000 00000001544 12534142432 020611  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8UMhu컻뚐Xz9
R<xP\hKPɗC/-zhRAXQZI56ҭ}z08Z WJOJ42@csFG=1)ۑfo ;B~[;	R˽)'w -ed"p$t:AAi ^?{Jm #Gi*'gc O76"@km.8:]]♜7@:alxt?Eҏ}iF'ՎbG4a_4cCUčgR}r]3}ig8.B_x~瞹Rb-8FX&.obo5p$&wQ{ƹX>SIHC ً<{ĵ|ʫ3`(xmÕsSŨXl,pŐh4qq NB`!4׷MUo?89NzO.-ĿZQBllZ~^^=-tʠXKX䥧G
B4|'ʼq E(u>t{!ZN`f32|R!M)KqG6I*\Mw-m(uvyevye7pfwnVL'}?)2
Y~Za_Hښm    IENDB`                                                                                                                                                            ./mvappsvr/docroot/db/icons/control_start.png                                                       0000777 0000000 0000000 00000001134 12534142432 020351  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥;"AGpu:DAEqDD|)fZdYmtuuνꅈ^'zJ:kh6hhZM ĪrIn@*T*ꗀy>	޻ݎLӤ$ -fTR V!|>oAc<)@A;:rz뺓\)Nk@V  (cya)^)H0jfCvN%I9F 0NBh԰ M 1fK{	0L,HGg٤`6IWx,;3(?R~NooW C^T,)>(
ݰ}H1<l6f2m~/Eh-.S<ʩTJ\$+ g]Bxo/S,SB7^!Dvkb6kL(1X|c    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/house_go.png                                                            0000777 0000000 0000000 00000001535 12534142432 017271  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍo,qMyZMIΟɅ,d]p"vrvs::?eZQZju
~2փﾯ}% +IZcXkҝȭm	y&q'yQ}Ԩu#KNq iФ0ޔ)ЗГ@Hd:AxLgc:
=L&In*d8|j,ӡVbo*0"@"-|O^AЛBj])"WF_ꋷo&O	*]!RU].alGVr
/G^`zzzM>hɭ$4\,A'<2=ic1ÿz^Cgq,*.{#ei˺h'V>}Z>O#%l&'.a,0RW&&7CZgGtn2l( ;^Uu)CY"pUpX.3D۬6bd2.]K&A(B5D㍃y<,l$a4(J}ݤ% ^łm<C//x!"F6T_.xɬWUBpa'ځ 8@g/$ϋ
~H$J{Aqq1\P6r]0A\ F@a|f
s,`	    IENDB`                                                                                                                                                                   ./mvappsvr/docroot/db/icons/user_go.png                                                             0000777 0000000 0000000 00000001431 12534142432 017117  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥kH?0[.ˉ1a834btyϜĭ4mms
i:_B L'{܏(JpC  ?{ 3en54SmHFPBE~u
42p͟7ⶂ}`Kt\c #)A,hkMYa-̯+aqHbzl);>0Z^HzAx-W*w;x'7R}+fJ<t+*`(֜Ü>L_&;03o$F.县I`[̜-s@4Aj'O_9:VLYU}hfsd}Dy	#O&MHi>'5x6cRH28,PɆG	RhaAL8P]C\	🚐@ICiw
;QБ@!bKSb'BO
.DM:A3*r/%MJ!(@Ɂx{HD%4"#3I\u6*!Vቚyof5򳭈¬:"c:9ӯ+un[cjUb9rrc X9;&Mq3ȑ	kmЮ    IENDB`                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/date_delete.png                                                         0000777 0000000 0000000 00000001314 12534142432 017713  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ^IDAT8˅]HSa7TDEgh3`^En>bR7݌ɋ	`nB'̍پR+pBmX+q#־m,yy~# "!V*S:ίP(.{*j`0xhݫџY<Dxe!UD7-ZUiAXd08hj%#.hVPqwhD$͞DVp54wvbmd/`DX.^?v{{C@v,`E*E8:Hd1>"F`aPB}}J\p|>*Jrh=:s,   LB&I8P( Ht
yXD>=
Uqf͆8n~c@UU =!>i&3σZyadgNPvg%XfgC؟ +@t:-78Gi&Y^ {LR(Ϥ,W[ kDHE1o@pr5|w!>;%c5D hZ7qjn`)b[ƻXh    IENDB`                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/script_go.png                                                           0000777 0000000 0000000 00000001507 12534142432 017451  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATKUe  <<80L"{@$!E-6]%DD(U`F::xy9Nߗ4M}9'w_jkUk`|s:ON1 ZCke=؍erݼ뫇q<CI܃$,ڛT+~[#NϿĪl焚2ѩxP鲰+yfmrXU#{R(M94#j$qɅ.vsXCzV4Ҵ1dY&sgpK86>64d16dyb+
ek ,MZ-IJ$RH#>:G
(Ĳ'COo+UFRjZԨ5P镏w[YPKC(ʱvOPCӇ5uPA-sbPC,yGX'B]:bSuTkw<1yJO]o#gFqb#[^jܼRljRA+U,v?tJ:3ǲ|/\:cq=R4
1*QljvfL<wSwH} 'KP1};xkʹ?~^-C4WXU3u|v~Ã}۽N=z{Ryw$ii=vjW Cbɩ׶a36c6akV~GC1 uǶ    IENDB`                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/arrow_branch.png                                                        0000777 0000000 0000000 00000001106 12534142432 020122  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕RKTq[(IV߶桂"0i):DJҥ@2tX%=T`J^p%޳".徙Ϸ*>sa9^Mnw4 twft=scl&wl߼ӏ/:}XdOLd@HeH=]?>Ax6=֊n!
9)w #W
\:r@ف@BqwF`,f-[;kbud_ ~P,Ig!!Ds܍bܞ]3W4C.}L*0W`3Hb5U'"އ"B@27g/"@Ȅf/"F>z~ }~W^UW`,XCKi>xwrW A( CDa?֬./    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/textfield_rename.png                                                    0000777 0000000 0000000 00000000421 12534142432 020771  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8A
0EslV#wH%u9DM-K`>f6C o ? 0 cJ)H) g'ι-x 
[@(űGqn,'4j'kɱyYrdB$sޭ8؟    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/time_add.png                                                            0000777 0000000 0000000 00000001473 12534142432 017230  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥OSA7|yј/&nI5XaKؤPPL)H[Ҕ
P҅ۖ\{s`'2gΙ͙3 t,0$)xlMqR'M]W5vw9WVVPmVsc\s XY4ì>~[ZG$nq՝͠Uiǔm.eP/z2HZ*\/oúGڎ#N+Hd Y*yq2/kإ|Z#ɍ~q:jr2Ub樓CGB4A{{TBk#PneB:. 4I>
L!;>~΃Kg<$Xr{sz7X
D JJÛF3<K"܎4d~:b2FR^P¹7@BGeqRД#r7Y#!%W(O@tiK<Q4&iy3ohAre0"H#"[trKsU*xx|Z^,ƪ14a@hOF^n$3>4-ȽW˹bJ&DD
Bx$/le&M50-vJUr
Hϙ|J#r4F0ȯ    IENDB`                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/bell_error.png                                                          0000777 0000000 0000000 00000001455 12534142432 017611  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕o+YfM|R݂hԌă p`!hԃ		7G%3uն0mgϯ$S|Uotf-~d?@4XIz/ܟ 
T·!hJe_F?Kv~wFc8s\-Jљ%.;&͎DԪԗP#Mvd1aRtT闬$]1{"J~r߯8_G!}#G#Wpq]MM/3L**C4]z=;?FlϢ&uId;gfHXoRA¶,^MH]f`vɍNarB3\0eMm;s+ZBf4[ b~;Y>Q+ݻvwv~f:7asIg\(SIv NUTJ\SV^D';xUP!G_<MyfOX `;gYqOR2;B7PqyfA;ƏB? pLH۪*1~Y"0Vk9?1?šy׀RK7S|Җ[=?9񔫢H\#**_ bW/    IENDB`                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/page_copy.png                                                           0000777 0000000 0000000 00000001227 12534142432 017425  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  )IDAT8u=hTAlnvB0I%VAQJA0(Z`!N'Qei$ƸwL3c332v|t& *jyTz6?5^CG^m 'gazaō77n=Pm`HOveK#y=fOcdHN'0
b2VX!1ln'\ D 
j3.>qkKENݯ_4K'S5 XcZ*JJ#~0[@jӲ^~1<zcSv"@DYUVcvj3݌eřNU0b
V@I׬Kg&s]7jHo-'Z6%j_5%r'jm×͝l貈(f|Q#HFT	ATD]x) ,1@ULk7Kqk=]CLO֥6H0:m!Қ^jۀw޿FVڴX%hR.?)z    IENDB`                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/script_code.png                                                         0000777 0000000 0000000 00000001533 12534142432 017755  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATMKh\U {<3LRj"[[lEP,UU7W
D(BPN"vbV(ebv4y?3<qy9\(><O:b#tkZ@V2sоOqrCZ#4BzN$1٘Ǟrx_B<,><d.]8K:+qzʣBg4vao-,s	eˏU^;Z]X9e*!= vTc*DBF0rdRvZa@GhmkZzaIMÙ#Yp`%ϯzb:p'?];mc1O@!%91O{\0Ī2&~=y'O.G{XꐗUC[K04F.cb7Jubq6ٔSSR%@bBUs1XʯiB7u<5s$c>8HIAUa	|nuxȽ~zJf<H>|Ȧ`<(UeBZN ~-mڕCP{(alD\WvcUƄZyGowu(8RT u	iڮwrD~*I> Kɤbc^'.a	͕+30LD,l:I>⏿7rp{"V    IENDB`                                                                                                                                                                     ./mvappsvr/docroot/db/icons/server_lightning.png                                                    0000777 0000000 0000000 00000001331 12534142432 021024  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  kIDAT8˥SKTq=o>yEfYVFR-(HH-U2h1E-BjS2>d1<{"\p6sݫI)/ۃYظy!b+C	2L3	q-!zMD	4!(x7@F!z)H8Ub?(MSKHZ!BaphXj;a< +@ ΋.}F26+g}
U[W	
H|=bց FuP"9<aB&*sUssJ5W2q#wA2<LxU3h*p=+v^(R$gP),CS0wrY
rLa]a!,Ic,ɶKp+X0V`V5d*oc>i6Wk8>ȯBM<?s7ĿqaApuYeYm!Py=,<iscWoӰ,#jʈRS=O=><IR#ligtEk[ߖn8555D;1aI9Pce    IENDB`                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/tag_orange.png                                                          0000777 0000000 0000000 00000001112 12534142432 017556  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅jQ%r[C&<GgM*PQ< "FE=^;8xźY{=knNvVfFzZv@TeYl6r|3	өtL&z"
YB2QZ7Ǒ}J%dٓ\x+"Omۆkʳx|>L&sQyu]_?!F@2<(bF^n'๟CJ]=RT>jz<53A@,I)-7܂?AD*yףD"W,\N3bq<y?a 
}<xQ1N|> ;;s-ۼW*RMd2kyڞ8G<DB4&?1E@|@-X?)Fp8H|'Wps~6    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/brick_delete.png                                                        0000777 0000000 0000000 00000001351 12534142432 020071  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  {IDAT8uSMha=1#:tjF۠NZuE_	2StsH~0S'JNufY?Q^>+ >RhMA{O~j=7Pcup8L&vtkޣD\vbf㵾Dm.`MH$ܑt:1??AkQIA`NDɽ9Jz$&*
,rsHRphZV@@^GPqCqȕHDAi5H(bjR 'RdJFIHj(lZ8<<D\|>L&GI94|.bz

-X,7E~^PΌ7%W+x?5E`c:.ǤlPwPx3IwFƻq`0;ګp_I4l4_lnnrݔ3փ#8C^ka#x<x,~"Px$kLVa*ʫT*ɫ3>#;q
)sSl.A    IENDB`                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/server_database.png                                                     0000777 0000000 0000000 00000001232 12534142432 020605  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ,IDAT8˥nQ5HĦXhb\ФK^'R.+M	J!-ws0NrrWmn/ryX,|AY4M
«Vu
񂮇1"XD)ڊ%4ͧ\H$#.-ˆe[67@OS,⯭XxrL Y)<y,Uw6
7Ve%y$IT!?(|"
l1`gw_F4|>h4x<N{`n9
X2A3иĵ"@lQÇX	̥)z=C}Pg渷%YN~}BZX:t>h`0X,& 17x^gnŮU;|L&0N7PZn߫k}(NyR8?AhȤ F:yr6#
	nRtHc]1eYr9V}r)(GofA    IENDB`                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/find.png                                                                0000777 0000000 0000000 00000001223 12534142432 016373  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  %IDAT8c?%4ydÞ'/XfƦ"ʀGvi QTo@5 )%k;o4 7Y%uZbVTyE,Xݣo6ةm=x)k?"eKZ帹yLe?	'?e}KjmѹÓ.dfay6 \Vo]Z9մ6\K/ bĬ`
*YBc~Z:
ola_[S1qIbR/*.?##;L@	:
]_@$e;@1/x%|W4 |F=c 9WA1 2 5zaN?(8 SSQEQBZ(`?֎nx% P`_IU
 P,aj (X@K*п9} ce&R1 2hZ<u    IENDB`                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/bullet_toggle_minus.png                                                 0000777 0000000 0000000 00000000317 12534142432 021521  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   aIDAT(cπ2Q+/ދEp,
 %ւ)XC۱)XdB=6PMu][z+_70!I ȓzS5    IENDB`                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/image_link.png                                                          0000777 0000000 0000000 00000001405 12534142432 017554  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATMu λV3ڎfR^Z4XYSJ}Q<t	)"CtC^BuwMrٝy_ϓ"       c \_[ @ qʡ^lr@"@(y8Õkel4K?ڼ^QQY"˒Zvۇ^/SWȲܝ[owjYMDIII2Ye
BQYK    9@jOwDT(UU&!"Ri,DpyKK@WIU׻KD .). ȡBYmeZn%Kãn(9@Qܽ=vCNc_$~cǖ}+y1:y{_q;={$~MkػwI333O?2-rX7-U~98UY:zzݮ
8nGRDxSs韅{^ip;wNQmܸrow~g ۶mMӭVYEso41RnZehQ    IENDB`                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/folder_edit.png                                                         0000777 0000000 0000000 00000001335 12534142432 017737  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  oIDAT8˥9hTQfeLL̸&ш""Xh% "j+E¥7Ecqa&31,o[L)8?s09Qs$mIg֬QWN ͥ i$8:R e3Jaў32{H8*N$0`uEXBdPm,"X#<Ij]?vt)G&.b&eTz	HY ٕJe5>3DST>HPHRYop:y9jڎD,Vwa4杄[O=D$^G)L"REeUאjbG)j?=P-DlTVRxFWmC0r''WPzMm!۟E"1JK<]B	W'(=fm0IfѴ[=7$*aTK,ȹ|{H[@D' /]ہ;~N29뱥~Y2 i(kN9ĉypO;ko75/JvDRsX:|P;	6    IENDB`                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/male.png                                                                0000777 0000000 0000000 00000001165 12534142432 016376  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SMkQ}3qFSH$Pԅ"T$KEJ$;Ae.piQ7.,U%U4Z!Ԓɐf0(ƈ>=sÐ25<zudPBܿu66 K	ZMI㧛%T  
@_ܹ>{_ԽB	AO"Z*)RxE]P0snֹ|<nsoiԐ>ҫ&LRiVwL]pϮΟȧS	.	bf(N[,v[}	%QH7C$ה;p!tt{Wwl8#%3-~3͚m<F@Jc@x&8+3blhl>I+*$9u_ch(85Tzȧ&`)pcdy$H^^tj:7zo6>߃ԗG@!2#UF?&NH    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/text_underline.png                                                      0000777 0000000 0000000 00000000421 12534142432 020503  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(cπ2<}~/q}4#cXQ??`
rg )pT?IH
1DDRc  ׏MyC2|EHU/? "ny    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/lock_edit.png                                                           0000777 0000000 0000000 00000001535 12534142432 017416  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8e]HSaڜrtM[eF^T^FD]TA ^z#tQ7ADN03AiZN[N<;9&^x{>2!;lv*Dq!Yﶷod~].neY74bfi|WWW? %hEh<맃88N`08Mk,xJ$B* G㪭pjm JhZ șHNfm+pxꑘau,TלL&\篷{.^ԀxxBN؊&2p]
f14I)24Y&QTǞS?`[
RZ\IG9/Bi@eȝmHņI"=l<[R|~KcǛh3al)aT<G=XE_I^&T(,D&ϠB/L2|5RjHeh"^,,	$͍/AW	||ˀ+C ^@ 0G? lWqL|ִSZz_ hH+}fxjQP@N/\ gCTU=Dh?@JXKh#~B(tS$ʐ%w߀h!N`&
P$)Pʦ_[ 1N,}Co5ۼXӾǝZ    IENDB`                                                                                                                                                                   ./mvappsvr/docroot/db/icons/status_offline.png                                                      0000777 0000000 0000000 00000000646 12534142432 020510  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  8IDAT(eKKQo.6B*A\DD!D@Ӳ,43Stfcm奆ow:9N9}^W'mu4b;oT.pX(D:5tT$Tv`_TxEB<aKD
?9uZNB焿<40RA&h#el4,LtJd(rGꂳ-*5HH'R!PkdY쁰y!Eބw|e/JG҄}yԪem7C@{fsd͹kB    IENDB`                                                                                          ./mvappsvr/docroot/db/icons/bin_closed.png                                                          0000777 0000000 0000000 00000000553 12534142432 017561  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDATK.CQ  s_STL0@"V`6`a$f6	*A"r_uNH   };ZC:>z	e{as~vs RMhmkpc<Bӹ7m	9 ѪD[d xVkxDd  
 @D@)*%2 >ՐI#ury5dԄq^!`b3TJy?8   єY
    IENDB`                                                                                                                                                     ./mvappsvr/docroot/db/icons/bullet_black.png                                                        0000777 0000000 0000000 00000000323 12534142432 020076  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   eIDAT(cπ2.RWe7JaWА\X]?XH^?
73`[*60HڐsV    IENDB`                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/server_delete.png                                                       0000777 0000000 0000000 00000001234 12534142432 020305  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  .IDAT8˥SMhAƆ`⥡ (rhKOCn=TՓ'	M)!zŴjjjlvgƙI7-5cg7Oa>AX|8M۶5f)\:H`ffBPZ׻aq(U0?JD~!S@DYչb^oWN@v%et$5z^TVfBЗ8-ه*̄Dn'2]VUA%$"3i^	bGt_\G65N;&9=KOj%idF7sп-­ЍR?pg@LAUVTȷ.ހoG#6*x^(@  ߑrvW;{BJJfC|hq$ߚĹT
QUVPVnc&Irn2zaZ'lW}Q`]m(q2GMB w<b    IENDB`                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/lightbulb_delete.png                                                    0000777 0000000 0000000 00000001531 12534142432 020753  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mYHTaG".."nn\ZT즍
$MgB	}mRYθ̙qFsygI/?|} cf4utay4fT#atK/< /o`?[kK<oj-튀 FmcF5FwAtt<	'%gjHk4VށR[ە (7֒D~T
`$G`#1k
xPn{ٔ6FzgȤYH.1-yhMG DM开ϝ";j{1tõ)	À`iO4:	pdBl_V'6pT&ѹ;/Sm#q-
SIM\NA40}N8dSdz,!.	{!2XY	uQJ<mhzud`:4zB%Zn4*7 27Ԗ?+	q2DS0|\[HF0I?&4|6_͎ᅯb>(<ޤB͵]`b7:"B|zTeP*PT\BbAǖ;Җ {=-0i>j% 1>X"}A@m	h)ώq
"]\qG9?;n"eBcoږ}렒Lu&6 ZK%,    IENDB`                                                                                                                                                                       ./mvappsvr/docroot/db/icons/time.png                                                                0000777 0000000 0000000 00000001431 12534142432 016412  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥O zS/=Y.k[nZ$K,̮fP
r5/D%L@+Fk9[Ἔ9ۀm?MW/K:|nYx0ϖT\9ڥXx6?C$FC|<ʨGW6ze^g?Ls@eGM^F<:jϠSK:_ʤТ5Gk7!cep=3^[|vG
xT12&(2u$bPʋ"WS@w94qu,"UZ,ئD44RRd8,&$«UZۑ_S`L0+Xy8:kN'CfP\$(7C~M5J;8C4Qw9r?73fFcr7-2@T?@C2>Ϧ'l]Q=ECpD!? zhdM)EGze%,KHnau'2b-"'-Y<!ըN(aA'ź~.Na-)gn:e5X{U#V5	O(i{ܴKǊ<ĮUD,- _#;d,7k~怡:    IENDB`                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/paste_word.png                                                          0000777 0000000 0000000 00000001275 12534142432 017631  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  OIDAT8ˍOHTQ888ShŔ6!QQN)h**jeADtE-U! P(%#Ɯ޽3'OUxF2C޽K;@*[Ôo hh>TJK 'kq`䙳4fv
UŅ% T}9.T_X=U@[%XygH=B q툳92Qiq AEL3._#f	"K:ێ
2N
(κ? X"΁o+^#7u.#n}X`.s'%Bt]L*lg'8+8(JB=rI~m8AU ơ'FШd= z'&|ۀok qRuտPZv1=V 8E VPPHATP9u$KvkdءF2	)qॉކ9T
u1pTG6>.Vˉbh0br2_ BPV!6R<]|9
lhà3)R[TTss9    IENDB`                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/comment_add.png                                                         0000777 0000000 0000000 00000001022 12534142432 017722  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˭O(awRMA.D98@h(vpT8jDS94iځpPÐm6l^O^==~>=
/QVISL`[w!4}\⦤ȠD$pbgAF&*⯂eM~yE'$]I8.H* <o\QIn  |깕pL᥄}.Ȃ-.P'm"|_	MLOu#\>k@Pt]=?^$x./EB8DvԘPґeTM6'^_z8"WcloシTp.KuewlΉoYܳpZ6(4C/4ʰ~QЇjc>LFޙ|؃$%ˎt\;    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/tab.png                                                                 0000777 0000000 0000000 00000000503 12534142432 016221  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%B0;V 6'R= .LLL)..02I(AC،_U:}T n?ãG/~\,,,`=p/@ #333߿ኑAd3Fff433f4 $KP`7oY==mx!GAK=`L` =.߉    IENDB`                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/text_horizontalrule.png                                                 0000777 0000000 0000000 00000000475 12534142432 021610  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8R1
@h)`!V~.#OhooBIs0%hq\Xf9vgfZ 5Ee"B]ר
RJeY,cZi_gI/Ī''A?a1]D(FHxh|fnx6n1d nБ:(~:O+&xo	vx    IENDB`                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/monitor_go.png                                                          0000777 0000000 0000000 00000001270 12534142432 017631  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  JIDAT8ˍKHA{-+i"ޢK*DV$[ArٮFn
ZXIB!A&"K+3%v8ŵ5[xb;ߙ "!/+䶶6!P[["B~*
ja*t}}O ( t{#Xk ՒPEyi	2nIs^z1 s./0ưXbU+p!1hLEYd2A$De#@%0E6`PVZB"|5@E1yư椝iwy_ZD|US^E%$. %Jqg<*+=4e)ݙbUsD+pɦsefjF&Ԝi}ѭ/0#N<^.8muM<硐,>S圛>xvn߅@P5:9iYp&u`V,9ohXדC|x6c=]:Bggܡ`]>߭<ݥ&n&WrDo	.-늂K,,    IENDB`                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/money_pound.png                                                         0000777 0000000 0000000 00000001065 12534142432 020013  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥NP`/KW.4Ft$_1PNԨ)%jƉ`ED!P--Kxmw&ʸ6'{3b`p^&[[R1KqOrpǊ,#sTC،oMB~Xt-Z4Ds:,mX3e^R5ٖxZ3	=*0`/tD̴>0|RLa]5
yH^AVj{Vxhh3]Xa'wlBe2FS]M\#( ։c[T+x? X=Al/*:GCL/qt%M*<T>0gOP@N;GnR0-9<p^Ic#NCЬX~F"ul7so?	.ߢ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/page_white_database.png                                                 0000777 0000000 0000000 00000001103 12534142432 021410  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍj"AMbV	22/bP$jlu!q'FkN.\qƺd]GSUg\Vvv;LNNb\xXrTN4	RnqT$e2u!sL&`
[zш5)h4H$`6`0Izŵ
ojPi&(p'N |'mjZT( 
	Є	
kal6eR0l4!p tipgj*R$*ff<Fc: fsyx^   :߱Q%Xr, !@(>Oqftׇ|p;*Ji vqD"sNh:x/xO_OW7On)sy9 xΦ_ K<    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/map_delete.png                                                          0000777 0000000 0000000 00000001503 12534142432 017553  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT;e  ߝ۽!+ނvh4vXHE"b`B9Brԃ〽ݹWV     `X{/?9!T  AP*beYQJw0V
Ca%SgR+wh~ג]阘hQj֒[ZTUtVuS8KXfDno{wR?2knFQmDfBT's׋AKAʳD?OPݞlt~ԧ6vW՚ۍիj#5ݴ5Ȳ\:kd_TJ,Q 4D7vj;/*e檬ѳyE}dEw[( DH\\ZϠb¾-N\P/?c&7Y.iˇC'gs?Pޕ,?c
eo~qVeY&qtvw{1zW׌Sv?*
Hb>4hhS;M-2v1@f,P1Ra,4mRϭ\8-ޑU1pX(l! K̆ >X8mSQ2t{jqr?n}Z@  <ܲEY"pөM(C    IENDB`                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/shape_square_edit.png                                                   0000777 0000000 0000000 00000001224 12534142432 021141  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  &IDAT8˥MHTq3ڔAE$TRVq"EVmDjQkEPIRD1GM~D:̻xϗsNXY'5 TQQµS% )`j-"Q
3oA0xD!,1C[\m+M>TSbk6ueVajh}-|GAP{[褮;уL~%HMQ@E|y.+PyV ñ>2Tr__׷@TCVN2;Lfv~osǀ$GCTQ1';8RFR2|a<5%8Njz)n =.c#"WOEGCx~Ċ|%d	#4rD0r8JGm쨻OEY[8Ctvf."(^<bxL ʴ䡼dMоX|wrי?{
])    IENDB`                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/database_link.png                                                       0000777 0000000 0000000 00000001247 12534142432 020242  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  9IDAT8˥S;ZQcňUH0Lma"M0j)VDQnf%903sgf.'ϑ;lVޞNx?A穎?e~QDXWl6ZJ}>rv;`
),|kZNtPTd2ETyf29fl`!F#P*P(@.ft
^N'˽ `6vepbwww
 $JJ&ùl*>PXqKc2-
t@׳nSՠlp84bznth5t]HP-v0pR#x/T*cR77PVDx&	uպW<Ьb4 0t:XVBH$p8bjޡdy\4
Lth$jT.|>b˝Hn>Bq4/-h0av b,r .KjX<ؑ9c1Pa`0QT~?FFY36    IENDB`                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/page_white_lightning.png                                                0000777 0000000 0000000 00000001235 12534142432 021635  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  /IDAT8ˍkQ;tWh+A[>t&5*&BPEiAX-Z[-i4iiLf&yf?ｚijZ}s.@|[U	mΕJr %Ղ&6i:
EQ <`0H*u;ڳӐ8/>>B XZ$
PA_\OD'dP (O BMKl&Tɳq6c9?i/f(>Idqܒ@߿13v}h0~v!jr^Qil,/	Q+qhs~wM0?8qawqDr3L>=#[P^ߜ@jG!N"o(lGwurT 74r|6Z)
Ҳ!gbyǐxhR"Wڐ|qT=	WS#_1 eo]Ku)K#+Edҋɿ:*A=a+կ_ZMHyB    IENDB`                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/comments.png                                                            0000777 0000000 0000000 00000001055 12534142432 017303  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍOPYML܌&.]$$κHA<–CXG((GIK^9Y:pV8y~h"+j).UP"Km:ruS(Qr?рOeb
նUZ"[n_絖)TyXywe-~ , BhX)7oȅ0i=]!B.mV}a~v$;Ř0!B.\]}r́N.Z|*[\r> 0#B.8CQu]mKO<a0	
ȅVO](G^ZAg0
Cx.2[AOy)`3&@t@$yl6x\hY:71n]	z<    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/page_white_zip.png                                                      0000777 0000000 0000000 00000000602 12534142432 020451  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT(]MJ +"/$BׂQBT)"VtD*ǦI%	$117	tAȎ&鰲Or/7"olܐ_jPCMU5<jE! +55Nc钯<xJ0!mAYO]]VrP$ 5'ΙȢ^6Є9slRJd@ݽ,
glqF(Iuݻ~Ü>(M_Ǚr
L[n    IENDB`                                                                                                                              ./mvappsvr/docroot/db/icons/medal_gold_add.png                                                      0000777 0000000 0000000 00000001335 12534142432 020356  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  oIDAT8}KTQ$)>0ZD M'1+(	JATEEb"
tjf9{};sx"=wFضߏXWvs?}1a!uA18cR13s $cXǸ81V)V\$$
HWIhqNU7YM7#KGܭuos`[!ܥ7/&) 6B	_m	k/%X`kUuExqMLa^g❈)#NץW_m"Ԟ6`ߩ1Ժ	BĄ<;jj;,^=r-u`>}U<-4r^Z7ݥC_^f2?`K9STd]X߲kٿ Հ2bp*MDyc[p6	'|=dr֝਄|$ =O2:@ ͝2l"^O&eBf%G/g {G0@7>%%
Ff:U"nXYǁ@=V-*0E    IENDB`                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/picture_error.png                                                       0000777 0000000 0000000 00000001363 12534142432 020344  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8};hanΘ)F	6j!>jFllDF|ElĨ!
"J4T41^v#Fi~?r9W%,C^
Km<5lh$ͻÇ9@)s^
̘Z)
_CQkI914[p@|"4~T4M,)gEG#o2ԧ?U
@ 1D:N+2Y"J*buBCE	`j(RjD,D SE%!T ͠xDcҴT\%A? a·OT&QԚLΰk;qwpš"%?ʝ,n2}~PDUx9qDDhBG'SSTO2}ea/bsORB]Pdm9Ż496ϭ`$G<̒.)!|{Dn	ڧZ 'Ru+=-}HH*e6F+:w86ϊBhǉۢ-fBo<Mk1nx|0`|}jEmp5߾Fq0xo?+"j;3S`    IENDB`                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/cart_go.png                                                             0000777 0000000 0000000 00000001373 12534142432 017077  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SKOQ
FJ_GiDKqAҸitN0q-nYКhhb0фV"LEǝ;b$1Iw_xiJ)x!%ISauP ~cmmSSSqp8l
UU199Yd2̬Y2V+
<,|>ooo`=|tZb	K$kjjF j5(
2C,rlRduBYx577D0l6"9#Ntwwr`0(J5NOORX0pX_~\CCCҾ\҃T*9pnzco頑&&&Xm]i0CjPq뽌7\ إJݻ?7'ލMaYzs^c!Tm48>>~H٥Wh\j4]O|li;2+z4 ,?`P2NqNጽqvI$3_vT8,{zӞM\*YOͫ2Waʡ~gqR'Wq·wݨo5o    IENDB`                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/page_white_freehand.png                                                 0000777 0000000 0000000 00000001177 12534142432 021433  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍkSaƛ8bAcJE':tp!KEpiC6iC6چބ4779Mzsx bM,v}`aY:<;'	sلiuj5e)JzH<hZt:H7xJ4M,˂4|! 1uLoIXr :ߍ2~m=on>|'T*5IX<l7([XE'y4x-ɣZh%>r_s
wG]C@d0hLKW1<H1E pWt]@DÀx5Bs<&U iNezf|5h)@$! w%	tU6{X%V3:D#_p${7m5N PB}`YGRx <u28.dJ4[C^`\ ?7³W    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/monitor_link.png                                                        0000777 0000000 0000000 00000001340 12534142432 020157  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  rIDAT8ˍRMkSA=|aZ҆m6`K6Ji6 !%݈_p]R +)"TR,GҤTI^>{'&&v7Μ{(B۶ò,9La q
s8"DIjΓ>?{Vv=07+.ôaXԈ0g!lN#*؏I(
Zs%K$L`4Z&lсáA7-tC$aK4Mz0,$fKdEQEo]*OTM}[R@Kbe&mgQ.Z:B!L X_N&spKuj8R)4Md>fdrrC}w_$77'U*YDQjRdڊ:vߞ?D"5b1lllMq1u;	|>3odކ5[RUգiZ'''KKKVWW=`Gr9VP(@ OgPPlNG"F1M~ڤs'4wv5)h[[    IENDB`                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/cup_link.png                                                            0000777 0000000 0000000 00000001370 12534142432 017262  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˭SKq#<D.%30w"Fxlm
-<FF$e֦L3
sni0>=SR_><* _vvvm{$ommnnnΆaƆ}}}~->JL&(b@\(XMt:8޽rbfKc<xFXxn.CWVV\vѤWxF8==RyEI8F5,k]xt_Bd2iiyyp8>'	dYyyr9W'PۈFzQebb_KrbI0m
fBs.&LMMall631<<,MNNRg=d2bHFδ(\8'ﵵJII-)T(xݍ`8ա³\OOtvvf:WXdff&ߏ!h4q[܆Fuu5,0889*%ծ`{{JlWVVt:hmmM_j{f.ӰZ^9әJKK/Vn|lnn֖%|ohhh">a؇} ޶Ŭ    IENDB`                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/page_white_acrobat.png                                                  0000777 0000000 0000000 00000001117 12534142432 021264  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKQeVJqҕ`QX>b%BB	*t!ЕBiU| Qd&d+3Diνs9U 0Oƨq
es]>G99|>BIuE	ÀT
$q(	&]05wLӄiHӈb\d:X`6߸TUE</)X@;mknD"3}@3GH(,˕+!::?	C=!QE8/0/a fyHBؒP/HvAmn)+/ 8ĿB"nƆ@Z[)j~Uh^N3QOR6]n^SݑI1Oc
c4esKxCA	fw5>V<ch[$9ȶ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/chart_pie_edit.png                                                      0000777 0000000 0000000 00000001732 12534142432 020423  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  lIDAT8ukLgśEseK&ss*!U̟-R,R*\
hZh\R9" CAB/@ATTRKKrlyp{~9P P+[uFZ4EV0jf.d{ᑩKjNE	t⊶&)p."
|>dt%UtᎥeWq\Q*jK;#Kqp/> DɋOO%`RH[!a_f׎Aa Qphiv w_LTG!xMdZ>Baٛ:;QQMy@|KdgQDs8+U	jo[g+ZcL<!DW?ta:h 硲E$KwuT*'Q\]flZ|I}53S¯mj\<fmn<KJ}%}5ur{0Y.|wnKqXb4[h{V2rV#sp=^Y҃3꼠(~T!Wth(I$u>fzs&	scj	Di 	CĢ7ǎX,k 2XednX9xeLB$~;ߌ7G8KݑI{a>&xv*	h*ܱ[4G`z l$= `ֳGK$T>4lt%Bw;OT23`:G94ߝ6-5=`պCU? "͉ ͮ?P^_=&&VsKRB%܆C+Ȇ5k?5~Q0usgg~o[ۦ    IENDB`                                      ./mvappsvr/docroot/db/icons/database_connect.png                                                    0000777 0000000 0000000 00000001373 12534142432 020736  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥kSAƿMH+1IcDqQnbեfMMԥPRQ4HKܛ~ę\x0Ù~s?pZR H}?K4	dJG$y;/ܓh4z%##
t:PUFVkN _g2ى	pwmuQVQV	0Y{2)cD܄iE:6&RmF{vU{$	r\mEQ`YA`>`/qAK8>dDyT@4{F0qr!	9XA$RWeTxl >8JϷiE!TÈD&v)8#)c{{D	:qv,Ej&j{m_>
n_ j:[
[r4"
J<'3;-pi2~(,zDP5noFׄٵ0$geQSXT'ᠫˁxO{{m!3A0w}d˯m:DiRcRå}npu5wY*`Oyqq:zW.%u    IENDB`                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/layout_delete.png                                                       0000777 0000000 0000000 00000001140 12534142432 020310  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥KhSQ{GZŘE}BPA|"R$+]EŅ nU|P]AiQjK\=3.IqΙoΌQU'\^I`+TQbA,c+߀(2*G.ިF
m 7rźɒ_h_r c'A[Z3~KSk,@ԭIk5
s =9·ɩX b }6mn!
 (W-*?lXk^~|w {#bAN0zuASk^e|'"s~dd.0 `n&d7jtP0 sO©I:R/"@t Oe4C׽:Ir7}
U݄BTPlIg$u:qʟCƧce:-;X8X~R'<]ۼB    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/application_view_gallery.png                                            0000777 0000000 0000000 00000001053 12534142432 022530  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATKq|̎h(Znhk$p~:hc-GBCDP^KH?> $̭kWڪH;rܐ#3\Bf;ӡ֨5r4Xf7*kmkӡUj[Q%n}"	(=ygڡ'o{ki4I@}η싧cDsGJKdYF⅑s/[D97qm0/$nN䢣6Cb-iopD\ZWH܍$I^ND*BE$jH$`Y<I9W$.WY4J;<ý)sSw1rgm#,hxG7pw,F2r;,2IE=3H    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/shield_add.png                                                          0000777 0000000 0000000 00000001366 12534142432 017543  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥Kq?８11<[$3+,WdR$Laۄ771k\yyDqN}ΧUmh~FUi]*.AtU՝UPU:oU䮊JXEnj7FU~ҨyUDqpKjɯX	9cA?¤/Q0em@Eӱ~6Ǜ	'wvPKIʚ?7(m|/ $n$ /(uŮ1(uw"PѬA0 lg<P*&3zV@Gmq,`MxY#k+fT x(jz
AF DビxˣxO	ס637WpaB0yҞ)ay{vq5LPݾS UO}3q
wۯ,[u,&nA=V:1qP6;K2cY?o? W]`Ƥ_%2duoU?nx- Ϳrq)ȹ7z%E%5˘U]/	GZ-oO`q3Mrÿ ˆl    IENDB`                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/cd_add.png                                                              0000777 0000000 0000000 00000001366 12534142432 016661  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍOQ+7.\abܰhXЕsaXc@ąH	TVK@3m!5tJ;-GI~sg|s@G;Wtsg1M,'L,=0yW_x (X<dH{G"&-DbLôMrhWSK9XمAo4@f@Z$SԪT\%>KA E
CUAjs>GRixc@0
22e@$JV<x!2a"11AaY@Iq&*<36b4	J~F&k&	+m{N+220-0:Rs$uK,̀緳0.$wTKv1əqԏ#}:|#3%hU "9S/Q[o|~';xoBG?+	| P6\{tާZw܂q=ǔC)MҀ
,B	3N]8rcy?{
W/x݀גu
J26_p7@3;geyb ;p{    IENDB`                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/layout_error.png                                                        0000777 0000000 0000000 00000001232 12534142432 020201  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ,IDAT8˥MHTQsg?rßI\%i]$hQ-ڴuEZ&B-"@CEȱALS}-N!Q,;1(p@-p *A2XDYmCMQ.n7*Mt?J+Uլ @|`On͹B YY  U-UM|vyf Y[O+_FYjW;hִ/@ۥ8"½ˇJ-8Ī[HNbUQW +{vT1o{A 8-f!S/lϗ*i7P; 1T6`5ه0?n;;P%#L0zb6Qo5Aޫ&{yfBY,S<Fݡv>>AĤ I@?$lXMHzxk(Af/c |$󮣼>ƃs!))C`BI 8	*;rUUݦ);[I.BV6f_>#qϬ;sK"yKTu^2    IENDB`                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/bell_delete.png                                                         0000777 0000000 0000000 00000001470 12534142432 017717  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕[hu{h9!5J^/y
 OPp*8p7x Y1ETT<TY:f[LĦ]w͛yՂ&y4J1_\)X͠xsGWa=P*<DmsaR4$$\H@VR<S'?&%ܵG<5WZ?a?͒H߆]?Ek-Jzrڟ[O|(,}}}c\=F|!Fnμ0
|SOiɉGp7m%/e+LOG8+x6t6,a&50LTQ=`h0`">>jkh7tq\~kjYw^lpNZ[b?r;Kh"{eR8>ra7鮏0sϓrb/9\]Vy}ٛ%E^uq"g5$,?/c`1TUsK{}12J9ӯ
2c>{Ï>`mn*zkɷPTLzkRh5\Gy;hi!O!_bX    IENDB`                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/cart_delete.png                                                         0000777 0000000 0000000 00000001346 12534142432 017734  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  xIDAT8˥KRQǿVT͌-Ml,\S\!BT.M0>@a|\Q2_974g899G03x*H&l6|hO
b LB.#Nrt
TmԵZ1
arZPVj5uj^J&	$lBT<v|0dB"xLv:vmh4Pp~" 1Y,$&d2b\.'V+a-%ϘdR9(R$}J"B!b diX,``fR)KV($<Av;X/D",k٩~	AF|!g'ry*u%N==(vJ7e.6`s/@ ^TPN^߿FKH	A~@?=ppBϦŞ"sFrrq-l߽;v'
0΅r3wDW>\73ӂ9wl<#I{K:PHvn戣XI    IENDB`                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/ruby_add.png                                                            0000777 0000000 0000000 00000001263 12534142432 017250  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  EIDAT8͒KQ(H*_28f!n+k8'X`ͭ6/zixL%7JR8k`̔F\`RM|y8| Ev˩RN9]dZ'^ FMҭ$u$dAIS4@F`~X^~C+DE|dt8ݏՉx)	x'IVV @NCPAaUP]c#>w 9@	ۣ]d-&f:67TX/FZUXeAJch{h9C?r0V.G($&!`2᳒DJKQz`azIM>Ɣ\Oʚ2= :De%RV+tel=	Z^͂{uHN;>A;N%{	aybu\͊'n$k2V~~KvpF5	1}0u=qu_Vaݖis;ElEf9ϝw.3U+7s? 6    IENDB`                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/sound_add.png                                                           0000777 0000000 0000000 00000001254 12534142432 017417  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  >IDAT8˵kAW Tq{H1zH-!bԘld_MI ZˆdM=1X"Eלыh@xh}]mQڂ"|y3ya(.Y5T*bIQ}IqEDL񄋜6JTTSZbifyt@BS=13r	zjU6<@	<_Mp jͷt:uV$Q`d@8'D@d9 wzV>(e|T&`w̽C܂uE;aAZh,@x^8l6b*x J# rY,..  nb0Bjtu(?t m3t	Z1-G	8/uřf<˭yL©]0l0gc2xg<ʭ*?Ս5Ԏ ȩGBL ]ul|7 '?Q
3@(}';8NtC=Λhi^_G7ƂәyW    IENDB`                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/drive.png                                                               0000777 0000000 0000000 00000000532 12534142432 016566  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(ϥ=JA^{@3o0xO	dFSeнVPI׌}`XkD #5a5ϑɓym;w+CSf5|8#Z{Y_Ԇ`%ܦ^So>1JH$sABY"Dő
fEIܐH`Nٿ]?0!HgZ/6L    IENDB`                                                                                                                                                                      ./mvappsvr/docroot/db/icons/ipod_cast.png                                                           0000777 0000000 0000000 00000001307 12534142432 017423  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  YIDAT8˅KHTqq^3ihIP-,*KhY:(\.ZVBD
E#1,l1:fGp4ۜ;?2P-:ǐ?!Wt<]o* wPdH, e\L͕g+ayC:EUr.}p"B&!enm !V 7Z8mw-.u[bV&JAx{
Q|ˣtXPXr|@xOQ~I}CfH"t(΂WjG߉%(!TL1߉gP~;cwQ݅9/ۄk~4B>>⻊u;$R*p@P_=m9KZNZk^~FԶշ=~$B EP^P'OY7y64X	Q\05ڈWp!N ؾwqr
KZ	 ڋCb` R`|"qK@ژS)*fRMwmM7UX˲J`6ll6m[`H&	FJt:nSJ՗`֟7 RJR    IENDB`                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/text_lowercase.png                                                      0000777 0000000 0000000 00000001305 12534142432 020504  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  WIDAT8˕KSaAHJ"	dLGi4fmMܚbMj[NwkRR+hBm^nm{za>H&Ch huﯯ	aTla -Co
P!P?d[+(Æ@"ªA94!ۯqP/JjwejwtH$P>Mئ}kgm/Q)"wTE9b'[ɔ%=b6.ϠY;:?6
XV|F=.V8,hcKwhNױ¤ܭQލAg%.P2g{Nj8ZhBbAe\r.'\{GVN@bte3w4ѕvGS=^EV$])&%d6ӯ6.#nJ˸4d)TWWz#Gq9"l[Ba	rKOvEYR  v4~ Ce5:^D ֥H/H    IENDB`                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/folder.png                                                              0000777 0000000 0000000 00000001031 12534142432 016723  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8œA[EtQg7wALCWA0P017p2=:A3cb2'pܪ$Vme@
ݬ2OTO1W/`z8%;O;9P#9B}^nO;Ǫo~d~Edpɳ__ j<w	;L==`rNvTy .Y8@~J=olS
uI 	3oޞ
B
!
CF(N߃J,$k(!TAF*$X(}fR/xQ
Eqx!i3,mf?OԓnAQ tI$Z ޓۈ8]YۚN    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/transmit_delete.png                                                     0000777 0000000 0000000 00000001473 12534142432 020645  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mmHSqo̤!(*>TQ""Lle++e14f!|a)Ęe~(J$Ƞuӹ/yιWqQ-eMG߮+'<f)/<onh/ ,䀎pڝtz;HWh:Vh΅ИwHD`=W	h]N7q4SW^ܙ`ah+aF-xE)g"D@t;ĵ]8Q)LV(ܷQEϮiΧGE͂[}*(>bYB(XmSD5՟0n󈮇TM.]c(Zor_(;LlٓD7;5UUW86HJg#"èUvT(om.5dtQl5ݠ膋n]<{x<TGB9,e,d]GE7]9-^oHܾoˏZ1#=3Ik|ꁏZv!(0%},ŧM6W	<wv\T鄞6%o.8<$3|: <Y]CD8N~(e^~Wڲ(NOm4ćiwr\)pT{QSuG][:a-N    IENDB`                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/page_white_go.png                                                       0000777 0000000 0000000 00000001144 12534142432 020256  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕KQ(RJ}B.FSkJ7-"RQUPFQHP4UĂTJqBJB^s֯h1so0 |ܠTXPD"o<?J$(9z,T!I|><vl6S-!#WJ P(zhs B ~8s-%8@w%jFI{Hj-8Pb\kD="#XrѿK:-?JǗs+zڍ>viQ|,;-=|z;֚1s[x
w߱DZeoqoq5fnC}RX
<-A.ӷQ5W@Y2dU,OiI1vM(5y@(
lYPR49T}vs    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/flag_orange.png                                                         0000777 0000000 0000000 00000001235 12534142432 017722  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  /IDAT8˥]HSaqHW,UDuQTJR^TVҊJkK YFmi-\jlHdR&,[9䅻ao-9N.?r4:j}Nrb1!9#B3%" t+O.[;ś?7o7w^t0	#FU7<Pv"N@Aʪќ!xt"Z)$ ZG-eF@Y"&@m&E=Ⳟaq5]{JGWТ$U9wՈ]YlF7̘<Vy/X355nXjZ+36	p/Jܺa;<:w@1].K@v͏x)4B[BG%BCHN^aeL..Sc%`S(tCY`f>=gN]0~&Ă-Ӗ	 vqCH(>$@.+Iֳ$dkBi5`8s-m    IENDB`                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/user.png                                                                0000777 0000000 0000000 00000001345 12534142432 016436  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  wIDAT8˥mHQ*ֶVj)_OХ9]m*Y떩e-h-QJiLF2LJE8\9r~ s)k­PiP.I$"EwDtR][)t$ҐB
4BtTPMjq1sM*nFj4#/8A>PSPΞ	S}|뺆y=9{sܔ:`;3evq/#	;usfEfq<^ք(ss7(`%|<ǗiXD%/X`a6.05	V);nǁ d N>*^?aW+jza)Zq\M9=Y[	ZR(mDV2Jb 26TD]HCpލC<^28;+Cuf5
7n:eF`Q(
>%C%s2٥hid3@ A+YaU,Z1<@UZ%ձc_9]f'ɳ;fMj<WU7 Fߩ,    IENDB`                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/medal_silver_2.png                                                      0000777 0000000 0000000 00000001130 12534142432 020337  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uR=k"Q3?b&n)M@
"`e+,le$4	[0Qqyo콣/̘y{ޙar\:=@;ç\~~oM$@qL\?|%o PD(m؞.
C7Q47,4rPةd/XBsyW㷱{n1[Lzk{zWZIh49|>_X,Z"`F~l6Jc
<σ $ ~T*j,D$uF'	Rl\B*tPe~ȲX@]x%߷s:ܜ@ݥ}94-rHC?%-=˲`2AL UiL&2^"n@=hstrkv!D{t:Nߪ5h4EإLŢbZ~\@7^    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/text_padding_left.png                                                   0000777 0000000 0000000 00000000417 12534142432 021143  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(ϥ1
1E_dlW_=WX]/`#xA'q-fʼ8͘
T G,V=/ D:_SeBҺvAD"VJOk3%C'+'q# ڲ!\$GS g Y}kp0a%'    IENDB`                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/box.png                                                                 0000777 0000000 0000000 00000001053 12534142432 016244  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥jQ[Ƅ	F5;, m,,DJlPgw3MXe`8y8gc.iM˘)6ld?@gYR:hE2ܤD~|qݮͫ*_޿~4LFff43sڅ~ϝ*nE!	!S"[fgήz׆E֯D!VHIF((>Q	-wB&)Il	d.IVDM!Դ65f*FA 'ղ=#P$9,a97p
58+ɄQ\ՊQ9]}BP9lMqg&!8r@kVk3c:<$ρU+a/Q߄01    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/folder_table.png                                                        0000777 0000000 0000000 00000001243 12534142432 020077  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  5IDAT8˅MHUQz>¯"ZTTl碕!Ңh-ۇA .,!Z 6m	B[GC}޽iRQ39g83cF߯6㺘UUi BkCT'bjHn<9[ m /FHJ}/ 4 ^Jo% Q j!Bu|sgsN2Ƚr_ezH8N{s΁jF\+8L90##Md^	YC jF:`O{f7A.2͐SC+Jf)M(poo1gy.ϢYyZu2([Y9@c4Gč
fL~[f;OU,C$ԓk	`kU73I$&똔88y4`&&e_b#o93_z)X K1-c&%pn[df/,UMwa&[&h  ,ߡoBd-aUO	$f$?hG 7t;s֧+    IENDB`                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/date_error.png                                                          0000777 0000000 0000000 00000001361 12534142432 017604  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uSKOQf:SJ!Q,i%+&.\Ŀ;ЅCnL%%`;PԴJ@f:Is99HX,vwjjj)ޣ"|-(TV&9׮s$"kf$,8z΢72ccN
,$_0۶ue*vwCmZeCUJ%'F$F((Ni߸ ݞúa`nTP,l..3iC`$5рEILѰۍ(i`iEnY֙зyy1?w5V)Rב:rl>CW8l{9`mmJ
@w_9@t#h;nʨn p![C쬼igwp{ŗ\B;8)]@#>;pMClAeޢ":]0_8
f|";\2[xQtv=W@}s&GϔNy<4ʽ4\w":\al.C{39TTՏ|f;esfZM8csS\bV?|Jy    IENDB`                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/paste_plain.png                                                         0000777 0000000 0000000 00000001135 12534142432 017754  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ?hSQ//&%h?IDH ., .\B7ApN.:H:b'KEjim޻|ɋi{n$	s私OFT* V:z;z-/A@Xz晱R$a] $1sqHXidgAĖP8!
\n#<𴃧 '">`bPw
|?2MZrw3R$$8m6K} !E(8nt:HY_	!ׁ9[PV^ PpxR1.;,;ہ!( >$D;x&)BSDVgwxvu\yv*)DQ4q6;;33;0Ezdk7    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/magifier_zoom_out.png                                                   0000777 0000000 0000000 00000001221 12534142432 021167  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  #IDAT8˥oHae^'",ZD(z^XًQFT(ˎgednn?Ά9w^6fv݊`E֋<o>{x T?Nj^fZ&la
σBIFx"Ȥ@%d0)	LRԗ<i&g.;pDddfD<lY	ֱ/hbRT 7%`8*|1ZD؊uߘ2*\n:ym|nێZ6U:!#ʭC;ێdwx}3֋HԬDIN?ɂTd2OzsQ^.C1H"勻-)>El4:DoknH(_L@qw4W4M.LXznzG,iˏBlSopN㋷荔x
0[;Z[M[Ol6wYá_TXmXcBzXP@V}npt[c⚲|mE    IENDB`                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/heart.png                                                               0000777 0000000 0000000 00000001355 12534142432 016564  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥Kq9fh9"̸EL3Y[IJY!VNJB13EiF3.28\[|є[oϳxyxJ$ӳ;[;E}+voR (9ևRC]]W =ݽ;wt0B%LL&ZWDuSN׊+<|D5SjW^譾.\@F`Әaj_~tZZ׷@a|'RbhLjr_	XK]s}$t!׿=%,2zƂp^&(7	ZǙ9(,&Y2kgq`4D뢷vZ`5.6ZpR!!N0A=*e u`J0[RCԉʇOO#жQ"*WjT
ԅv1rWD{OeنlI˗`	Arz
m{OŘwNlG[cp˰v5oޟEḇO_vX:<wYw2rhkj&QzOvΌ7D}}Cmzٹ_eW-    IENDB`                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/server.png                                                              0000777 0000000 0000000 00000001022 12534142432 016756  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥?O@_TXFCNJH~&|?;to@46脋A|+%%{]cBHFlۦyg&V9![]O#l۞Gz:=sHͪl6N鷁eY$rL/@ fDBAE|<GH1JALtPD`ݶ2Ni^	]P=	iBMB ZX<kDBn%DǭF)$	?q) ܟ]Ղ~lo`L1DjoF\j	K5)Z[Y;VQx|LTi?5/ol¨}a    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/page_white_coldfusion.png                                               0000777 0000000 0000000 00000001120 12534142432 022010  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ_OPo?}"Je&^xO h? WqdR0BvvsԕnM~iӞwz `E+Cr!eY8=G<7Pՠ*J
$@V%ό4rY
&xd2Kn(K^cIn-#׊jUV` x~ nO+'.+GZLf?}Y(y,{0?h3}㹋b^_
~n7/!0 V&4|.:&dɔ[#B?X%N5[å@gTP|{±FL۶%ea(Y1*xFU7	vqs4hʳ)YG)ZE}/ܣ~p0	Xr܆?V^֫T    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/film_go.png                                                             0000777 0000000 0000000 00000001455 12534142432 017076  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8m]HSaln9]͉i&jRP9).+aIED^%}ЕWMPPuSWՅT if(N眞#;y}
UU&&=HTTTɲljj_]3R0OQJ-:uı5#Iu|h
\rG8sHa?c@`HjbRD-IR^&MHD#ѽ
~ےc>=6@l!;["LX2%eU.xcpީ_%w\VG]8rMϠ
23!v\E333EC-{Ww0G
|{=h
lP^Vտ;žr,/F%F:Y	r	CG
x1B8JޕaC~^c9ZznkꂤbF{2)8ES
Th0s?lQ"slB}#fs5=D*uȘ[GqADKuZ§ZZx\
+ueٟHvk:F6:8(|d2=qOu Nc }B	
O7344K4FI7x`=<hZq1E5XU=Y-2    IENDB`                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/map_widget_icon.jpg                                                     0000777 0000000 0000000 00000016255 12534142432 020612  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky     P   Adobe d     		

					                 	                   !1AQa"2qB3R#bU     !1AQaq"2RB#3br   ? D%(DJ"QD%(DJ"QD%(DJ"QD%(DJ"QD%(DJ"QED/DY%(DJ"QD%(DJ"G+x]J@-{(=bjQD$ʉ7qŶoWr۶8$Ih  j1`05̌pk[{<v*gWL8CSeAm%`G#Z<6ӟJ"]ikn!̀7UGُ;?1J.
H˟'Jqҫtu6/kǍDXéZLp//xe ITm4O A=kFӕ?*t`Ӱv^+Ūj.IGԶ(pO:~AgNOgrnIxiDJ".8-+[D%	I <iEWKhDJ"6:EB#Ib/cBWR"nu֜Ǹ)ؾAZҫJTjҎ\WsԖJ »Ɵ.v.P;=ˎhLX.1/B\8}ArtI7kPm:qǵSmP1h{mModjK8fW5̢Rۈq.Pqd,o*kO9񊇳mwmA5ƣΡuX\sfbtW&w4 JEGt ~]tËK).fOz}c3k@n;2D'y5S"6sO- &áC>9o,;@*BvnNаY~-ǙR~JQ*B
A$Ve}>rK?5o7rPtc`ȟ)GmN8+jk\h:14/L'ZԵRth[%EM 멽id{h(@.[ev|iBKpl<IfKt1ں]]lO?r]W]XuNnPHI"5s[9#`y]p+wSBPҳVk0r=F洠~-|kqq{g*O-n}Qup>UZf<tY7?ll6 kwQp4ƌT1lagؾ.VU5yE OR |:xUt~Jd0cn멭kǵXL_Wj>^*Vl,8m`,RIH'"r
?pNmNcMS:+?j!!m9BEQGndva^nۏHx?Mz^/)RŀPAhѺzAW;Sbw5o>ms>6iXj 0U(tBʊ	zs@*[Q*c@hz z~=Tz?Rm󽪯Ci.*[tꨧ>
{m<aeeK+<>"zZ澙u[1֘6nZI.2]&,̴ʣ*0ht TrMF`OfUҧ)He9
-$IGX9mׅۤlN1
.:s?{2}CXqqYM~rRa^AӁ@Q<{d9'Y'.#STeަLVއe1:r#J^A9[\Bx	rӧ`lt (0;xQm-ۥ R#)}k#Œ7η%J_o)WON],kxmnd>]uڝs#^9]3F,Jq=YL|]N>HIq(IA{*5Vֱ۷K<WbŌ9,lx	9
i¤H <o~U@!Qҫ>=~ݝ`lpïYù5NAJfKa-ۥֱ-lfJ\N+;xZ 2eC{W}ҔR)PC䛂AV`vj-pQ*=MK^tYpꈱkoe
"e2.>%JQ蔤u)d,/yB
ݯ{!#9η)2$<( -֡[nܼ6#Sǅ>5K25Vߍ>0ϕd"5*KHbS'dЎ%!B]~#TQ	(AEolGA:?u~g>ׇkq;ozjOWկU~O-)Nec#lqmHRj"v3/Gdf%⒟:E[δ
R. *m{U&mcrv}8H ˊ5uJ"2Gcc9(W u7R7F̞?%e\UgmFc*,|kM<Y Tš)V޷{Ict. -\>,ոa:[QC9n7oh7%\%ΐhBQ餷`E_m6G} 6
q+%ē^_/b.V<șԙ1SZRҀnVI-bck@#QG	x{,޸\%fz"98xe[.aW%ƫ&
/Kt|n=s{NCX#d!C__Yq
.	P7=oXkp'ioxmmcm͹SH#FS$6X6BP Tqq$UZ ɮ)DZﭣm25pKҚ7\>ɵuSvipxg×C%c1!%<)#P"VH׀A6䴝ŕ,p4)Ugr,9*tȭ!N9%-~Tn}kF/{AHWVBB}#aFͶ9hHR@QXoqnnOEmA~ʖFAOʯY/皎˯,!N<~@
 I\ ^TO4}oqnIs㧥1SJmdP)'y p}:Ѱ#au2T>n/]c6eN@^?#+%I4p ,*!}bl/ej	ǰDpcB>>*v6~ˢK6R9%*UAV]p3VhFcy!̭*G]xؑ0?(J-՘k\9|sUķM)5v^iz%+d;Ld6h9IB,t6:xvҡ-Lk^+SZ4DV\vRj,|k3ȿ6BaF)#A\wCCCEzqWV6<Ē{ԑPTԢ%bEV;&vخ:>:,]S3(׿JJI{y\֋gތ1% T[& >=Vw;kviL81R&ŶWJBD\MLMw1Hujp g^?E8{!$wf|jt.{Xғ(/&m
.p
P񢺒mI\Fn<y;JW-fїj\62H-rn6}M08t(. !Z?m۲I
9ctqGWUXWD_ݷĘ)Ǿa
O@\J'I	ΊICx><3OԶ=sN]	x\IlX_zKƷ=WpkN?.
Awgjg'!n8̄%*W l:_Kt75 9^QWVl*C(a+ 7۠^Mߡ7M]~쒈=O=>A o?<-2P5-ijR,G E|/]g.nmԚؽ\>#_Yfc oyE+l ڔz$ްۛ$GN\;VokX2k񢕭Uz(DJ"ŨW0826w{!)\A
BkHHgC^^12F=:˱fW*Wqy-sS
,y\7`zҭ1AxN]!sI
iSh?#3VMo#zC~bC smZ7R%HRY?
vm{hff! :8`lBtUvJ*:(ݭcءE┹/.(m9ot$lmЏTݫq6R8>9({8d~9gWr쟴Buٌeju`@(B.<ɵj];Ph*{+6݆h;v%$AyTP(xb*EU3ZH<= ~Upbn79*,Li:B#R	J@SX_pO^U[262NtB\Ji麇>)UI)=<ǭThqiEiuh˖h~UrJo	:6;ND7Dy4ҖR)ą) \j^p+@tэ0T;Fۭs?gt^(MZ_BJJbҞ#JEZylL}X6SCk{(=qʽxUY^l-3ߖxXJya,ky֊mZ倢qcTrD&ov^t) %(,P@YNa<]Q[FRD%~2#)m/Gښ}uJRIi.P&{<mI[:o+ZȃɗX-hI ]|}'me@ j~XB;¬Tmu홭Nz<\TTʂ$90,'ԷB( Vgӆ鋏ʋA/s"ՊZy=l>MCLÌ_y8 ֢l:ھ$s`uܸ3/+@a]rTtJ?q >`Sn18C86kk	ȵ:vYFYRSE>@A|Ki#c^@㸎G95-l-DQNo13akyʄ1Uɱ&4^i xu>Fj+\; kHK\s1V~k]">;.$OM#)߬R8JGXl^BtqgEc pv;c9͉테3AgAqJKqb* [W9é W7\=IuA<^eQƎK[!JvJRZ saXwiEhr+D%(~`~@p# g} S;|"Ե[f̓6de[[$zuB.~UA9 5#X3%zϣX5^qct?1n\uАjR+w;T};fRuJQ:xN1i/JaEmf[nz	Ŧ?Wgy둄:DLR3̙!ju+-$X毈5ܗ"iiˑ^H`;
svbl29,Uʎ%!Py'|k=nm>n6p$MTU(+l{Sȁ-2ƩHҔ<%I ^uc4:0QUsqm44^_ct5FKep}Rf5ť7I=:}Kcpk<²WZ@Zl<IA^N}hVk`.n`Z馦Ak[Wݱ|=Oױ"럧^ J黑ʽc:w]t]҈D*GC>I-K]okr_µN
d_jZ(*FǟĬ(3IiH'{KŤw+?TT(DZ~٠`'k3N-kr uN#Smh<ERm&W5+z2]+cF@mSa^2H\I<׬q6Pt]hD_6ki%֜.6
TB>  jU}%)JBRRdt pPd|>sydD)FJ<nm{UwY 0Ƨ5TiĜ w
l=k˘]nnϘȼ"c!A Ki>*Q*inٝxkF$ĩS&Z\N'Q 0 k{?s~?o^[W/Sz4RjV>pP /2 <:J"Q'tȪ`dp=K:䴎u՞׸'J
]Zj<T-Ge6Ya	m8)HR  
$R _pJ"QD%(DJ"-DY%(DJ"Ũ4D%(DJ"QD%(DJ"QD%(DJ"QD%(DJ"QD%(DJ"QD%(DJ"QD%(DJ"QD%(DJ"QD%(DJ"Q                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/page_white_actionscript.png                                             0000777 0000000 0000000 00000001230 12534142432 022347  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  *IDAT8ˍ͋RQƧ6H*)ZSE$ZDЕĕ .Р 1
Ez<LsqpϽ缿9)rٸfC\M.cl80I|^(d0C@UUK$V	HZ @4Ma޼t]u$~2`#vU/@e4=%	OB2;RͦIR1V~ Ƴ2#hZhKW.xkwBL&#Od6ݐP<ba*B\;>D{;  XL"
uS2dƻ07>,D<G6iBF YUs0uOcR	dB8V(}X	u	WmY$Hn1) t|?>76'@XG"r9-y8 ]"L?y[ӿحYQ    IENDB`                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/printer_error.png                                                       0000777 0000000 0000000 00000001526 12534142432 020355  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mS[Ha~?ls*.b%a^TFdU^TFބIetUu+)*(BkMLqkR?\<wx(
vFˆ\]aJPH[+Cg0{Nz[`45,97UcY",o\d>[.x/'C@Q^$dqH!X=_~ jKSQ<d2 Bǳ`8F6dPr5+Խ1D)z
҈d2ѣMi3/
6#(QT'0bĳsppGE644#po}5Ej1	V5\.nkN'l6[f-C5ru*AEEE+8I
6BV+PqRLN&^CLCX3DE,,,hP@F>,קϑGV҇y.KX\\<b1T
F91R[0\-^M+4 &)7s6ȩ%^m}%,G"M@MƁTִ +'Ed1KOȐ^X@~4Gp8fgg.ܸЄXЖd *,#T3Z˶ ?<=5^8Z7J%6ml):WCn+&    IENDB`                                                                                                                                                                          ./mvappsvr/docroot/db/icons/bullet_picture.png                                                      0000777 0000000 0000000 00000000726 12534142432 020504  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  hIDAT8Փ1HQYל..DTTi"6bhiace#hi@,Ub-6yޤ0^pAʩf|UshZσ7մCD!TKȋXm닀旦=ϗgaéf߇ˀ8y^V/'nHruc|@M
%<tǒaߕZD4(RQ%Or4TMm
T
 ܧ'l鄪I-bB`-`1aa뢀K@A9XA`avm=zaez:mj0ƀj\HtwsqA Ti@P4~}O    IENDB`                                          ./mvappsvr/docroot/db/icons/dvd.png                                                                 0000777 0000000 0000000 00000001374 12534142432 016237  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕KSa̿ŏMB*HOcMĲV"/T[zΙ;t܋l:CGr~snw~ [bh~dF;TJfdAb1! LvaSqXgjʎ<b F(!sLǋlˎ Ĝ@QA޽^/fqvp}e |Jv!NSC*p8eALE6Isf[
ɬqDz&&% #zWa6:Eyy9Ud6ֶJnCbC92Xߏ@ H$("D D$'cR6.4_= ͥ +#`v#;E5\'ZA$0c^}GƑkӏok>,	qUէEh4:ՊHB:\
}X,`u`"Qk_n&*Nl率B`3%nBX?CottIJ<3(>?.'L_5	W?Am]mNVd137]oe._kjn543Ò7sH)    IENDB`                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/tab_go.png                                                              0000777 0000000 0000000 00000001050 12534142432 016704  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8SM(DQ{OɈWOH"bia!ҬXX+VRHY@b4f,3~ԔS=uι]9_Ly]#y1yJQg2 ̊CtsXb6M Ia8_q@uU(d,;/ưp4,bY\$꺑B*g%>щČR@jut6#`3U[؄3Л3/KRHj;`jJZD_1D\u
EZPE;%DmiL@~7$LA]߇.~d''Fݯ=sT"fSTUZ-l
rUIzR֗g{A St<$|uXm@<O `    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/page_go.png                                                             0000777 0000000 0000000 00000001413 12534142432 017055  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATKVe ΙGm$d7fe"EIѢUPmMv"ڹ+6.v]2»68fޞ'2Ӷw>>1J	1d+y M}xώ@d>8z77-%' 䍡'tfȞsBiѶYۿA>K3n:9?SϾ?|~@D,f)F
m "P㩕lX
$%(JD(Mߌ{=4|vH2 !d'%YSc-I"DJ6QJ6R!
(D(J0҄8ώn6@ڑIE"3JDh溡UJ_jMIv+Π\\}A}OR]kګ֭҅`O{hvfz灐j:}/а6w1?Gf[^߳rbĆEM\;&^3.\٣y:gZZsЋc{5ҭncl7fZOGd|rS??p`Yκ,/`x^{(&Orv<-Doz)"H9@HsS_]}rm
aS/    IENDB`                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/html_widget_icon.png                                                    0000777 0000000 0000000 00000035067 12534142432 021007  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         >a  9IDATx}ŵ<9krD	HG0IX =<dcdaEB	6$l@"+,6js=sWf6άgj{ϽBߥd9.t(k׮q7nL01>9vC ˗/sg/psmkkky{{
S___j Α]t ~|G1 
T, H$@ݛY2PJYTf|=H
 <7xㅷzB՚
_#1C G=GeeeYaaajosss+NZ%==  @m5ȡ%K\yvB׏!8p#9+
=*ˋJ\SLiJMMm柶sqr( ­19oO>KHɷ{ n ~4E0/m kΕ7*=弿wӦMsL=k|ĸ+`u{G&Mt*T-> to@a:⍏^- =?(e555{X6mZ}yyy˱g ~ t( Τmk^ޙ{jr?дEc0/>X{666l*, [n7y~GFFK>t8k kC γ:اz锔PݴNȠڲ 	:v[BwtwmB{QP_t}ѕ /̭"K*  Gϭ\.9Ύk4	)33#p8k2dȟ%
 H[pOϟ
*T@,m2Z>6x<j<2@k?𳜜  'xWg}|m0OVu\*  AΙ=dwO м<.Ajfee@sAxLZ̜ϥ.:}p}3/@m !0iݝNQPz#9~fk1~M QFcI
PѪud_  r0Ц @x9t8䓧<XP#  7yqSm zc2+   'ܼqw  s=Gyq~<¦#CXȒDPRhf~~(**ɖ"`A	; (AZ}(c$33۹\.t7խ}˖-W_}2v8+ SN9.T
&Q'D83 AD Aq yz*ނp fQ)\(ڿ
 ˖-'0-í*_ 1v#9X0aY"O
9a>{nnhnƌеh{+p156PC9V`/: ;*^ykCVlT8r
WD \߉6;v,2 A9˸N 	S`0  |C ;:PW-NZ\tB'j^Ժ'Pq=\]]sЪ!x"jjj2uB>},(-Rʚ3 `yl x8p$6==N~1fW\q,lo%اW-HollT*U@ A0P /c^ ܹSUw6PMMT4~ӴiԳK1֪D<Tt? x)17e*RrK LVmk:% 38c.U[RRBvj6mR[rQG)!m޼Y	LlhF"wR)
HǏW֮]KvR% P yGS+++>
uO`!O<Q1r]ҙkD%"*( #) ?,? 1C
 {l;\iyhIÆS-J	EҨl]\_(U=@  ;v(A T#QԳD@hx@O 	x&~1'g}6> Ab,Av h( 4I-9gggS? 03f8] H1G}Z  M@ 5kPyyy2`<H  *GA7L Ae( !O<
 ٳG݃  - N!P!N]0 0<G>5k92`
 b bҢ   v)d!u?i۶mJ#C   a^X( Zρ2e
7l٢~~wԵv  3g*]ES" ^rs2* eyy	£eJ'N{w5   f@)  =L\}vegΜqF/)|M6p!2 0i$Ux鱁DG!Ppݳ1'!0&eRC. 8e-_?  к  s-A  䑠GI'|2۷z-A@8Pvl?S%ɓ'+CК֯_+d޼y$
$og9!@I ܼ{7SMA iv9x8   JuR2Z&/T `B^{MzkIx9DVfժUS    0dQ *QXiǑOsml
a24'4&Ow~?F:  `pqC v?T/	 P^PچpJ Z8+;24(+^< qܹt)tt ]&L OY#)G؜}QXX|#kw(A ^  &5k"{ߔ.wGVV
!G y睧 PA)aA38  X6s΁-E, F\@guV}ΠDj!hG-J!3 +`@23qroxf;~G}zOO@i] b!@^o s=W]rJ%d 't"WV< 0ar pt7@Ac 0 QJU>H  $!iF&Jґ"|ECSE
b =\w dc ,VFٳg(vN  ;ο3<S	 As9ʜ,_\D >Z5 .   _W +]2@ Ѕ3 D TԺ: #6@Uqqu>UOrH aU/u)W* j-!1Bq x	K.U 0a!| }Aak>133` *eX94@2"hhCD `f( o| ,..5)/Uُ5?H #/*L.*8 @	up-~?yV1  CK? 8PaA-$xV!<H&
N >$3 xond=qSQ_(?"ؘ+~'Ƃ?ݬ8¢FQx!Erw|	C08Mi`pBp_ޡrdul`Qn$4 N:PI4F	1p1._<5srI r*ne.DPBH(8Ȣ"q^\0}|T<Cy^zP5Z;ʈ{CKÄO *KILM|v) jt!0K(hY(F$KX 2'?\i#	,tt&\P	PKUGl !g3iҤ[BKzz|}g^z%r-4/> 
?xD$ZE~,eP`iQ/eBܢu9a: _A6!㸌&B0
%\##3  2?+$R|puέ%p,W;Urh"u.fYL̉YfWN'ce̔ =XwL䵝uDmk׮Ō"p^LİAlGv(WdN(X?isνI0z8 y T0I}q뺻GwsJKK7ϛ7&v?CǊ#ݙZ `@!fֈ{Ξ=6Z,ҵDOV PA4# Qȟ:q,ViEˏ.ؕ߼XrCSL9;a;KX&~계e$0oLl<
M612MF_ kkҵ^[v1\@ی3=3+ӻB{3'!$ u$@/ŋ2dTF5MTf?hY-!pr('A٩NJq7aI` `Am 3gΩ<ɕ/3}z\O@![	 zPҙ-/M-mմSMdR3b%3BNkQ(
B-ajkːoL7gzTOlt {w/|Gr}8/ s=^ÕɚA2.c@K$ Kc66?D9EYTL6p"A,.ȕǪdս&9My)f?0r>DΘ.no ?/qc{)" @6kO=\pdc
'k~Ud->LiT8RSԑ_J6Ա*;~gjNa؉y.'k7mt8i7+}4	ũgX[[n]n;|\s? `eЊ+=zIhx	NX1{V}urGPn~tVJm'kK±T Rmvu,fYD-WjrmEMkQ40/M	@uX.֭[?n۹s:>N x≓,Y5鏗NBgn AfP0&G95?rwHVPkFrF(BDj
[UUZ'ɞ!:5쟵3*'7MtTvgߙF﮾ꪫ_χ( Kgw}r᳄  $_Z@!j uHB^H_Y@|UMuT<HxF͉ jT S%Dm.VNv3Wp;zMMѸPf4RNzؤbl`S .Z蚋/v.C|O~GAcE ECbaEUgЀQlށP4Ѿr)j7x+@4sÚ(;u6r02ҩ՟xːCjiz̎ >v.zz * ,0X?s̋Y n/@%ilj՟7*?BQYR;(ùAj#tEm5*mfmN+i+*M`Jj:eR r=]w}  QF^lٓ#F){tEtX0ZiJz:BSFR: n5@g+f%0㷥}=bG;y2Y٨y2͗eF&
#ۘosR(ջNBY%B7y  |
 ^D" wqy晕iii#M6iuP*'.J+j/j:~4ER= qo$¡5VdQMUk.OD%ZyM2z @#Pߺp183=Nh#e	Z:o>Ox Ľ`5k֩=S+˹6=ܙb"H3Hd~2'qij>+<r)b@0(EQWˮnڞʷ~͔_RO}.jjJ5l{~+Z#
 !xRMstrI֐4͜yׯ߰a~Ӕ_b7ܰ["{z	>#eO,3 mSE+76}aƤ,Ī3 |Je\a/ˣ*fRFA3B5{G[}'- ʿcqS<ZQ٪K6k@]g V O<{똸Č Փ^gBOKg>QQAJ `hvV5'wzHɶ~{
Ungy)Mvj(Ϡ7ZbF&Z@fq>efX̡L:[Xҗ> %;;	ӧOK~O½ؚj=&VG@ ~/Wqd|#d2-mL~
R׮L֘ /@jhݡLM|:G3t,''r} efPOuĉ KjOd?@W@>0ƎdOoCn${)O[UPٚ-øByQ?9XWnM@hR,د	xNٙt@xj.t|D<ͻ>70OJ& 'pK.]/1Dh1CX!]}W< EṘE;@.() th #"v޶۠,ִ8rtۨB&}%Lϛ<Uf5^@e>kV_B:rlz&-)P7o޼]v}Z]< py晧=ɉ+M_@R0~qșEϪ}'j7$BoL><f @]퐏2Ki?nO)dw9bfn!x۪?:JHqFnv&SOHAG)2([]o+W_}=hx q/ pA/;aQh}?`zg*P$NL5VBJ6 CGT4Rsn   B2j\\>G` BTSLmdsh1E3餉jΣx~nOOvmrCN} |.6.xFH22D2@}=oܺ~Q#m(6u|d{3@aVgѵl8HVRhMRPRզlٝ
!dH>f<`QGYG	_zŋE=>l*Y a}rV,o@DSܿ7h;l#+g	\AZ7
VE #τv*PI#Ɇ`NSƚگjG.FL?<Z=GpNHg߀cOjߕW^yǫ2Ap `e-_S~6XBʌ5R'B @}}jv22lhWo%;h%|"[hAGQ6b+l9<2iC{8;\ 	A6%j$oѰcӏN:BUUU[Ν{W_}>} }@ `3f̰+V,4hѲba׷ݍ  X7`׻iO$( 	, OEvPH\n
\V3 BL'wSBjIakDzpl`)C4yt{9q8) 0lذc n۽{dx mcڴiY,c26Fun?FGDWuv?lTjieT^ *~ЙՎpRXKCvBv,G!l
.Mҽ{+TyB4v3rAM 6^{W]u=X+!J 'tұ)WŌEdk;sIeR _oMUO[0|( [Hf PFTcPͮ 1^Bj0ʷg00,]| .uD#0d#mcպ ?cO`bea]d=k֬EMh3/<ϐ ЖՕUK*+ 퓀O~ TC9&xt)kckQdۣ}?)+lVj:Jɦ`8
 yu>ʙVNJ)7u8M3W r-,==%s@u]w7߼]zt/Rz^@"@hFvWD;l7if!CKz7sEݿ<*c.n%[_6)3e/Pk4}x~XaK/ws&p }ѢEqvNT 콝lQ]C-mFGE4 p̒r*:mʵBz>VM!\[MP{sĸ?e}weNC%y%45?p( P__kע !@ `a{Ūs9g
"x6x{Id-*z*od7 d5	AΩ#+ɪ&?	۝1Vή_[ElɥX7W#eCC
ᙓiС*'}/.䒛lقy 	  fO?}z\a;F^	yە7`ހɲV+fnk­Q~ "Zbgi9f@z5 Rދ^ZHU;U4:.CL'5Q-m.a@?|s0PQ ⣎:lPpfP̓Hz#*MV`{s>Qs3zZQS בhH<9z9,2zd . #idL8[MUAM=a3MW>&aAWZ5\s9 ?O= '9zr^I,QЇ. @ocM/7^G SZ@ɕ_IEjՈ.1C6?#PF?k|ڝAuճɁ nrg:c2Aǻ8?O뮻wE	x2 `?~Dه"a c=2/,ݻV~Bm-Zׯ!=ZA9r)a+>hQ(h[桺4е @IM#gS4YZMQO<Q@裏&`9*LȈ5OW݅{qTVVІ{%Oy dPLk6OL4+`
yV b#XX9TS }^00	Iq'ҙGV"
E+믿A<
( px3q/#1{fRU_AwV @Y^zRzn5Z=l7 0}  L)T4GeUZA̠4M< T[ƧѼSJhAKޛMז./< O?mɒ%sɕ0pմ	½  AX-\ 0ؽ^XSA4.aH@7A`SΘ2.
G|Htgd@F4廌;oLYN-ɇRaZ lܸ/;v|F} Hau57Q=lI|Y_3-  !ܶ_5@ )lFtҶ4SZ3zkXZ\Tk@!azaQ{o3YŹvhf.͘Pn1}h{1o޼kkkTB?( -X`W_}76WWB_RO55rM-sc @tDpUk DqǜA+\$"fu6& eGdqH/Q@/sW^yoO{&p  ˸*Vni6swo<d/ B kjmP QZQ%+had@3tR\У, c1lt>C2@_؂{G馛`m& ً/sϽ*Pf'{"yX hZ(@O.d Ա9R>/l֏K+)̜0kT*|a-ߪt|!N:8@u"/SSùwqzW\' L^y=S~ ȋ@F"{",`Yt
pS%GUZzcm3krJQljmK{Ba5
,taY4$_}hOuV7O⺊{1_{hgw;"{թ$5B`EPVYKl5i[5E@i[RSeЅ6cчx `>IGҨٔ*?_E+eVc-Uӟ_~1 ^`РAC O5x dOX 0|^_;@  Wko[=>^FiD"2ǢuuCeYil\lg(T~4{P1]|E⣏>z\?`<yؕ+W.c6x\wr!6 B0	 4L^*k մ	pň1&iP(+B2Tl7d(a#'sD͒ /++/_~0( ps1WX,u~OlRƇ/s$wZ[Ch2@SO`(:"N.C0n*f*5˺Ty- ܴiӚs޸m6n:9s汬KJGPy0~3cA"2Yۧ9zdR>j!7Ao@k֬yK.U, xfϞ}ree 2( X̿1u#X x4/e7/bݭȠ	^.NTko}T}8.s%4~1!P.+Jӽ \X+ߘU|W(/+NJp( H_`e{ήwEbD@.gcQ}|nUrjm{=|.Ƅ	% \Y.I/ٍ1@O0{ 
ɩAĬ9b	'|Zoŋn\nD6$ @8ͬYiݾ@dV2A38 7-'\(``h˗/:餓~XҦHYfݙ}	cw	q1n9>!7|?lÐ	& g}ɓ'4y) @Μu`t64VQo'5)B#_F(//WCLyS!!^32KH `ܸq# K\kP,Fv@CE-j0|L еRryy+.zՔ0p`>}{QXOZw@g̀AE?L)]y#}I{t(\>  q <*4+0Q_oh#1:=bʣf$Zjuˠ	H4 s̙C=ҒNu&辐=9f6[-[:H/`W]v} _sJB?@)~pKPb鱈D}?V_@cjPݓ{Ȉ'u͛7 l۶h `,ͻ.Ať5L򐺚*$s_Mu_4c0FGP>{I/JKKdɒ8 KE!xbCTr#s@Zet1o]Y>LT/!{طoOxGP"e
 .>#f1 Ux?HXCŐ1Fh4!35ഫrvUv\2Yciѣr_+]z=H ذ2UV P"~O\G}zkޘ@ 137s-)daUJ	Z(Y p`$?,&#2S ]i߭fP=; K>|UWFBg' O?+V<60N,ߓ`O!I촌]C#W 'nhO`BJ W\qŜ{<Ǆ;+3a$HsN>>1o`6O$mwo	h xƌ3iƌg1<&?s*{_Nax<͢fU
lX<axAIY
hn >0;=;rn馛n}>  3%𶄷n~1vܜSŤpN+,,Lg0hR؋H\V\?;WbHp@Skcu;R{.- L.V\Bz	 r93ry/f4
@808I $'<]tdRyK͛ٿh<w_~e,D@@`
ߦۣ@9;}(  p$$5RY:4$Q\\ms8"xOs.D2TL<?}ߠ$& {VNYlӶfH=wh ;== Hc 6,<xpktn]1Z аp(I=@om 1%: p`_$:(ѭ-2kk#MI:k,& Ő!CYd¼0x\h5tP.@oF}YhΜ9W[n-%xUXB8T$ ҙd .nenUN
lRF=bĈÇ !\,	f %࿣]I	+_9 	8:4DGfA8{?x`Fdd0a`(جdpkY`}F@aÆ?|
NȷI":Lc Z\Vpe>Ǝ?r\9,$1줙XIg@  ֬Y\ˊ
|$)=z&i
30tP0:@m|2(A<Ǐf$`Α=W5Z)2րX}0ի䦖|$)ARߥo'30tSXhV
pY3`JF"G>`1Xxnʋ/Wmmm)	S.<u=a&}*#;;;'E.#cРAW^y[ouOʔ0K}O:؆f7եm.!,#[kkk1%HJG$u][fDK:|D |I	._2{%zK֒Gv@HZ]:4O.E~w 7O$ON    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/plugin_error.png                                                        0000777 0000000 0000000 00000001276 12534142432 020172  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  PIDAT8˥;H߽EVz}UZi70*DCcȡ
rqhɠAFAKCCef&Σ!PҁÁwlBɫ[{4jOS7,/TǩZJ<Ǝ&BM "=KwZe7STxK &t-{fԭ0wwHM+ƫӣN$Rc J" Qz3ĖRz?&3+jJԳTasqLtt程"ʓgA=u3{+HQSB	U%0۩8Xd2""	1)B:h8KufSEDg[8E"ԌC̍Y*a-?"uґ4_P@DIS^XX?m[QɮXœXv T)f .~g]EܦrQddsf,݆QɚC*(] æX[͆-/sQEDh{NA\~GW=};2q933ܽ~}X$    IENDB`                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/computer_add.png                                                        0000777 0000000 0000000 00000001415 12534142432 020124  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}SMhQvIq͏Q@bՊ
EI!/҃zR<-ւH[\Ei/ڦ?d]g&_7f=ɲ,o%.0.麮yakkkIHR^J|2hӄ߇PL&#wx<L̂Mӂid@`A
LdfKBLԉo
'WT$-Y/ĉߋgW}HBrI$Mxen<*%`.
X*r?,C"`6c#*@fN 2/&=/n3Ω\8IPuvlΏc* o.+%!dj漓"ahWLE :پ|\lN`&7Sǻ6өFGjB2,?@͞
rx5ك9uddD預Zd2s}SڄBQNFJRڮU+UՇ'M+1)Es-//cM-Ŷ[,9{*
AU=hhhܘ磆ߊ3$tzD<>\:{1Y{m==pP)|7/O6    IENDB`                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/book_error.png                                                          0000777 0000000 0000000 00000001336 12534142432 017623  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  pIDAT8moMQsz[6E&}D*ZAC&LHDb b``D"<b@a5zDDnBD<r{ڳk-rWۏ3%aIwwϝȑ54X_舾~+c6=L1/[ mhiU-Muظ 7J* :Sc|bĥ,jr{|DLQ5DQ%1x.]W	`(NPW$	ޥUkh;5  T vg3uX^
(Ab{ F,	ۚg# 4 %T9DySI4Қ8^	 >!	8/$AH/2JCs2q}lm{MU\I(=o7$;w)dul )rQDüIԽS6cWة3 5#Bpԧ4uB'_`:p/~aKκCRyۏ3H]w,gWIe(<#q̚uX1.-'nlwθ/k#'wn=<chyg`ji$E3[UCϓw    IENDB`                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/world_add.png                                                           0000777 0000000 0000000 00000001654 12534142432 017422  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  >IDATO\U }̓N>Z FmGbn4&pװp?`ҘS0QI4j7+Qڦ6jP29}R
  A<d (T.}6   R
a|-w&eltlq}sLH!
!* Rpsa9\<-k(fӝ`vcvN޺RS)H_B*؄)k&;xų91/٤J5T7@~LiHz.O_cgZ5z>cS8(2::hȡqkE̢DCNTo=Du0 Xp*uYU?r"%"w\<v
&7kX7vmV$b@]ơ)m#ܻDT$bI|OL)\E3$b	69S%YZqR!4S`yVK"dmCM13"!'Y2cS EP2/~_)<h9q$F߱QFp"M;A[vHQn,\az~Zt\)%2:)iS4ED70+jD΃gO_it_rysolKuFD@]XRvH\-BZ׏pS@H]_w\sm=LFݦX.1ŅC \) x/Ͼ?d"(G5;8=IL'R
  zߐB/e  jӽ 
K7>Úrn    IENDB`                                                                                    ./mvappsvr/docroot/db/icons/telephone_edit.png                                                      0000777 0000000 0000000 00000001575 12534142432 020455  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥ke /iӦ63it$90@T@Q+v:@
T^2YauŚ95-i~^tN?yGۗ
x<<`Y`e4Vm^yBOIb ۍP3
<HHɯrNQ&=>+RKpequn͎qRaTܓkDb/4ۊ+H?͎T(O&%4;$\B ޹0i<D-;TpU%Q:n}/?__%{}h"EiHv%+R_PZ<|pAZkiN'_`GOOꔿh^/<Asu}g?7uf4E%lj^&2~<EGch?=֔02X7B-7s<YTCo~dSG#"[R)~A-;_$|y?>F;;c̆^gHL[iz.5D~fc%O>]0<h Hl.\dIr#&8k:n&h`c6#C],MOtaQ}(Em6wntL}}ԑٮ5X]Xb&*x(0mĿxL8[FvsWoם"Gg    IENDB`                                                                                                                                   ./mvappsvr/docroot/db/icons/control_stop_blue.png                                                   0000777 0000000 0000000 00000001267 12534142432 021217  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IIDAT8˥MoQXtC&FMܘ1qѴ!n\4KӦJ&ԶI#i,SJ>,С03Ps0#jƛ; S6]]N]c9w?'+sodW)?1G'J"=]h͞8)@:}EcMp*M4 *t{Cr}O$VM ²1	7>դTŞe؎a;e>mvdg@4h}23j7mz,ˍ.%7d`:yt,చ1#РtBvkuYbpȦpEZPU",IAKլ^1+AC^&W<]6a4,̊`ցl>۴h{lv	N)_fm g>_r3DeݑQ@Y2a\E?R[ir	j(œy(2	.	eaZf^te6tq/-<YOCg.L8u    IENDB`                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/application_tile_horizontal.png                                         0000777 0000000 0000000 00000000660 12534142432 023250  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  BIDAT8˥SJA\I~AB[I%b%X[F*
FĈy}o,Ly̛y[!YګN12SXU6WKk_?li`jۻhj$ 	Gc5Jwj<'4)$R
r  G/a9m^$"Q.ȉZ @$R"ͽ@ʦpQq7P6Ŗ9pށ1E&,nPGPBaz{qb8(oR8@eaFe,#$c    IENDB`                                                                                ./mvappsvr/docroot/db/icons/flag_red.png                                                            0000777 0000000 0000000 00000001231 12534142432 017215  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  +IDAT8˥_HSaqQ.,-a[
jaHAQFe[ATaj)2-3cԅ&E,XcnobXz|<o6wèKl&׾ըگM]G!掘ݳÅCOZ61'J-2"ԭK^"1baW[FNK0$TK{[jĵ.<}]e1Hi7/d@lP|Ģ>7?ZSNg4] 2#^99Y{ ]G=<[`deXg`*`1Pyp,Lhv܇{ʾ;%Wʭgst.7~?ïOrd| _lx`-Z1vV:k³}{}~n<UTI@ZhL^g}T.>U;b͜	@Wy|:H -(K ?0 d	8=J{ B%˄    IENDB`                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/heart_add.png                                                           0000777 0000000 0000000 00000001464 12534142432 017375  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥]HQwEvuEuS $]؅H QEK,E	Զ馛-ʅ=uهi~)~S1*yy{#dWs>gccj]]rUURy\aivR99/.%0llkeRǂ=WPw`3fVj|&:C02f3z}aGAH13LJ٪lu?
/AS#PS#ֽzqv
Roܺ7oBQp>}phl{dP'j>hQ

 ۀIodX_܃P/P~L&c:)OrrQQlر9٢4rjZzۓ17 =T*:/n(^=]iQJ%Br\$XƤJAok^ޞKP$AqMSֈVU$sOs!$TGцgZL'SS{3qIWU#
p 
)gI<G#	hNp8fn'㷏]=?o,fqB$.pM k=5RX߅9sT ۠Do,#[ٞ/	x:rvjmm5*{[a`~2mk, 5RFaMC    IENDB`                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/lightning.png                                                           0000777 0000000 0000000 00000001172 12534142432 017441  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SKkQNftZb҂
VqQQ$?"+k]nh3)>1mFLs뙛Mk
ޙI(?|qW
1"5ΒLE|W>IDPyi}%"P@*}	,l7MnDG O:uK/ $n&XxsrjWDh:qU^\]͜kIqEk5GHZ~̌N?kBP~eCX q͊k s@qÆm)7V1Äis}K "BwߕUW-LrVOB*0xڤW#n~@Ȱv7W(]_/$~}zy羳ÆXe&N⺤+Y-5/OM٣x/&;vPɕR׊L|4 ޼5+=j BJdt%    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/shape_move_forwards.png                                                 0000777 0000000 0000000 00000000575 12534142432 021521  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8œ;NPDOEˡa7"B
	V@c;SQp^s[$/X}Me(!,#)XP%^ ;@l>BϺ^!Ή@ p{ 9uLBUn ʔZAt}lczXTyv;sbz"	vj\s۱C	$4g@iy:Byf@_:? BmFRt8&UU6ṀtHBܾ_-mvn	`zNt    IENDB`                                                                                                                                   ./mvappsvr/docroot/db/icons/date_add.png                                                            0000777 0000000 0000000 00000001277 12534142432 017211  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  QIDAT8˅]Haǝ??PBQHwE
tDtE7[IMB՚BP0XkM&*	5scᆌ}{γ)=yy߷
@D&t,ZERB1ݴd7F᝟q"_Xxټ4PVW˅H$o̯`kE"A`ihJP`@(8;nn33G ^ׇ^luwgg'6Ԅz,"&:H0bCC%#`~l1&MlmŶTzzQ,UP@&"59JvaaoT*@Fwrbp8<fx<a"f͆wvRP=Ŕahv]1Uaa]j
ǻ)͉ nC55/0砱݂v ) d@AϘH$v0it:sO&J^<AypAyƅ1\&Lb~P.$&`^ws;xD    IENDB`                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/page_white_swoosh.png                                                   0000777 0000000 0000000 00000001172 12534142432 021174  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍjAG	QD+QKK;B/@/@$waag#5,DPDpp~gw8'D80L1/3$ p;/* B.~朽2i$ \9ښG^nR5;;;4C6!HZ+JbP"In޺ 6cv&ip2w>W,1-`Nc&6Yo4*D#1zN#h!D@ B`@'F6~'z*BDF25bd@%|<[SYu(1 hp 4M6.V3u]T	\
n1|IP35}te}(U\;r̶12Qka&
}\^h]cCrkު6 eŦTěnePB*z*,H;s=v7 m|rx΁~P%S!ӂ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/email.png                                                               0000777 0000000 0000000 00000001201 12534142432 016536  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATNa@9T)Xk\{nݺ3q!;M.0ݳlRJ;әb<0'\!8:ũ✒:%uJTt:<rx`MUrY	WG7ՇOf8yӡՋEa8gι*2Mݏy(2rEd3u9R+	|O[0fkʍ,W\Nf7JlrNY*|0cv,-h֋r͌&)3փjjWZrNrB?yE\Z$oˌ	3"Lrֱ^KvoB7.zO1[Qqp<i|?Cgl6&1^R5@P^FNi,sPR`} PlǮWNh ky)捈I13W+j~}d㋓`af=xgX@k&q<>?|oUe9I{ȱ[    IENDB`                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/folder_bug.png                                                          0000777 0000000 0000000 00000001475 12534142432 017574  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅ohu?gsW
Ήi9M6_`텊zᛤE#_Q,H06HFnnw>>szq[+zˁssPUםpݢOM<$6wwnr7ofm*NUJ^a7=	#s3}|RtnyF[ҳ1v} GacC6!͹S3:Xu8y@)+lGg?d~>27]{v^S1f9t:^a~;G=:Sm	_&߶&:NUc@cLj6V`-\wOS.8Ժfa*HØ>o.mWx޴`#w"4	8AE7d_iNCc\<KgzOg7Yȥ|??ڏUO0'`'piL/]j7 ,VrmGUTlEc;O4/Y٫ T5'F;R"=ǣsUd2I?'Q	h4Y8h\F"m0?cb4*уiXdq˨xh 3>;,դTB$} @l1O<ϣ!ţBs1@Ԗ0    IENDB`                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/text_columns.png                                                        0000777 0000000 0000000 00000000366 12534142432 020206  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(cπ01PD320DcB?@= /<C	mͰn-MԣoD7,PP?}&?3 	?Ę@0 #:O"2    IENDB`                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/application_tile_vertical.png                                           0000777 0000000 0000000 00000000754 12534142432 022674  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ~IDAT8˝jTA{wcXlba D뀍T	Vl6>C
 (kl{YI\<03̙ǜ)";_=~}<$7IS0O~@noiP,AD@D; Ev0MQN"- rKOnh|wD0+# :PU+EPPPH k2op4z_
\$s܅rL0?[r.0>SY&H=R01%6nhvˌFd9]VwpsjϷfn'Rj~_]#oa"Y?o\u    IENDB`                    ./mvappsvr/docroot/db/icons/chart_organisation_add.png                                              0000777 0000000 0000000 00000001047 12534142432 022145  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥k Aۥ@ġJ'غv.XT:ŢP5RDщ7=RHDhG O
~3/
^W6OW~^\\\Fwg-?2ֈj+<<q,ˢ'ha6iRT0]rd2TUEe\ץ׳$380=ԏ0<s, 3O&Pz4d}+HXO8ح2SKqn+t#ǻL._F_p -8A)8EdZD`vP8\ bl,vje$ED1#hO;٭ngO0\K"Ŵ>LmLїi}HI"v$E/d2#    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/date_next.png                                                           0000777 0000000 0000000 00000001260 12534142432 017427  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  BIDAT8˅RKkZQ7>bLŶDvS쾛7/EeЬX,mBhZ5>tTB~0̽gf33l%H<_slaZ:~\(>s-G[Q::T
Sعvs#R	}

n7 ,˂/ĆÁJ)Eelcsk7tMCݖIf60`:j3 ;@ww#4J003M|%&cHxPBB0)f#2u:'C\骋b(LӼDϸk5\ljh4V%gf'_A.d2H$yeK: 'K:,RT@75çAl_2%>l<o?^Խau2-`LpЍ'6~zuICL^zZ04U`g݉rCzGXW'A:`Xc"Zу9$AdJ4aOyF/;YN#W8v7>T@:Y    IENDB`                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/book_key.png                                                            0000777 0000000 0000000 00000001413 12534142432 017256  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mML\Uc (Z `;$$Z{.4&.ޥ.MIMZD"@u3x3(InNrs*>P
(/)*JpX~ 
O;Z)LPnFF
Ws'׆NّCSVz{K#/G >bo
T PEE)*&Q@e#VUAD^"8Qbg%aqcMtߑ!@=z /8o1s=T_x`Ϯ2Y)_C>]c+	!73%#qWg	$AH 7FysGt֚u;8/X/լtҒ{_YqbEp+.X$Uȟ[ 	2هWdXI
p$Nhs?%MMmB)B؄ڄk+J|Tyq+XD+chrxP$FWק{Z=CD580_oFlݻԑg$y~Wd	2dYW	v_ĬݥXqsٙ߿J;OYw\/ _טgB    IENDB`                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/hourglass_go.png                                                        0000777 0000000 0000000 00000001542 12534142432 020153  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅[HaPARRIBYօ$uPP2I-AH*OӜt5NaΙ:χȦN4<lӷ?94.}~XLHH$2%+n}~],:-3 rHU&PtaLb\	E#%!@ @?'k0-%yII631"Hht>;`w nT\oU9+Dq. gQdy[ $bo"'=*k@j15fְauM9:&V&_5g^9,( K*YVj11U"2W%[ ::eeK˕s*,olI.Wmx	L\sΩgc_@qӴsL	)5g,;U46\ÅyBU!]B oÏ}^y(w~+)I{Ͷ 8SӺ!
d3QN[`|
[?3kmbvѤgZhu '@$Q|/T"KzBSE5=܆	bq.kux %MCdbý
HJq0]fQ",fF\K=,dG桔6ӝd;T1B<vI7hЙ(,#
++L@V"|Fo;E,\    IENDB`                                                                                                                                                              ./mvappsvr/docroot/db/icons/control_repeat.png                                                      0000777 0000000 0000000 00000000646 12534142432 020503  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  8IDAT(}MKAQ]v~AFBm(jMA,"K*?	MQ_%)tWBl.<s"(56oԕ`ЧPG\C>Y8r06ZThs(WF
Qyj+씐R週Q\/xfI|Da-,6٬Ҟ:3CZwRlў$y2U'װI|^dZQU<`E3>ԁly18ɱjY/ٸ~/}wu4L͒    IENDB`                                                                                          ./mvappsvr/docroot/db/icons/page_white_compressed.png                                               0000777 0000000 0000000 00000001324 12534142432 022015  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  fIDAT8˅MKQ̼3NNba`TB65M_jS֢HD~V̌;眧699p澹 g"" ar8r$9'8eddhiMWUjT*R*d~~^s2;;+gP<(ӛf拉Š5@ZMkn)
B`ll5ޑ:_Z
$hB CC(MfXk\>*tv33G͓/39v	>!2eB8\($Yazeӵ@&JQ`ZceEl\&- 81hQJ67f7wn	 	u[^?1֓5BPJ`iVP+~|&V:͙k1sK]>#JXm\_MeKsf\O?Ż:|5K*DMrp{*KQkΉxzɗxiWz/M0YYZZTٜbN: Τ#6/ ֵH^0d A#~9NXF~{TB|v9    IENDB`                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/page_white_php.png                                                      0000777 0000000 0000000 00000001032 12534142432 020434  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKKQ[զ}mJ"&zl4EiE$nfԔytϭwsO 8\?:FjRh5MP(d%Ś,(P(DÖ,C&TU0 IE*T*?8GlqRe4d)5!In,@<&ѫ'<	v3DW8/P.m;>%X߸ w(6A6&f2Ek*lƳ
0A|{-XV0Jpl<p|^pOFg|~VVOm>$|=HD7A=@J&ֱb(:w~⭞)    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/col_widget_icon.jpg                                                     0000777 0000000 0000000 00000003572 12534142432 020610  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky     <   Adobe d     		



  K d                            	      !1AQq2sBr$4t6aR#S%"b3Eu'        1q23!QrBAa"R#4   ? oIhDn7PU[$J jdB=)-=$䱈6ZyaFSM>TY$w}fN{5۞2ti}9ǍMsŰ4sw縂Gq 7i?FB}QapwyJ?|meEYWMdw/OYnYXj=1pXw-h1^4 h)si$Pyn()?gOJ/ԧo*/RLZ%3ֵS1z4̂=7
fZ^ G?uPb2LVmXci9r+w0/-ML#1/QiҞ$yxAP=R&T^}!NZ}pG˽js\B0T;_H5t8WO,mjs(//K94̴Ol+æ$+ٖse9ezpEB1"%SiҞ7wxARG]RSɕ_Hw2*zF=/
 \.}59pEþ[^p^ʺ̯N}kICE;#N4d0şJz@ UכK;#뮅)SeeE
[+Sz*zF=/Ok/1s-6= /wu_&]^[]\wimDHAlYܮ+=ӍU6]3v"d>[ ŬkT*#6U\۴&yEJz@ Uכ?a܈* ɕқTނяwx{O>MpMNb81ŧ];vuɗWz9͋mZFlx>O ӉQw/ϮjdZ6>M:SHe HIA	b҆f|
yap<R*lzv*}ty$i%FE~1jSQxܤv<3Z-?V]cǹC{۫~^-=ЂGz߳*Lzh9Mԧt.-ӏ.Pv$]LIᐕFl>QS?{FFl<NёTgKaS?4mRc7n!'5.*_IJaPWW!!N(%ۙivW6i$i<Dq:nV/ҽ A5[iheU/}RvnakJhiy57l܅ۈ_Ne˜**"^LD/[S㣺?G4l F֌CAUldqs.qi$6'?M?l|cg6ݠ"\œ%88q60t8F9chnA#-V	SC6T @  @                                                                                                                                       ./mvappsvr/docroot/db/icons/cup.png                                                                 0000777 0000000 0000000 00000001171 12534142432 016244  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˭S;aUۉl b-@,sm%VZL+Y$wBC/yk@sl~p=o @PrKPKZ(|>N٬dt:Rݿ*[zD0N:ggg Q$V""ۉlf3zm|^<c`8"Xζu&k)|uڹ8}b!"HDWO0!o| qt[|	sR(8`0rfjZ`0XS[fpZ(<!ӤvB*&x2ܑӧ"nswhvUZ7LfRӑ",,~71Z,Anb	^nWV"("@2.ESpW>X?N"K+@fkpGy
9']LhtЌAǳs/j)=<    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/rss_add.png                                                             0000777 0000000 0000000 00000001211 12534142432 017067  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥_da?:?d$'-Y"ź.%bt](u]MM3EMY4[i7-RiJ4.~<z%",'4ˌeBGLKP! Ϭ_΃sIm\A ˂+>qEIzckR[! hJ!S;NpRiHe)MT92ޅjr1-po@AQ짉Ƙt[d~ԉ?yZWBHOyȇ!(=jCEoke_|i&4u!{]LUcom5F3%T	;#L\1b9|z!@?&0OjSB`	e-T-*\YGAAH$	41dGlKӓPK5\nCfC=3se|Z:7Wu2 L&bw    IENDB`                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/vector_delete.png                                                       0000777 0000000 0000000 00000001173 12534142432 020303  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?>\XXX @46y"xl뚚6f >B,ds6 fcog^jkݯl{4keaLk{khoo^T\cMM`b@z~Դ{w
irS3/Lgeq+̻g+kx~
mK=ذ%\~jxC׭KUmxjڰmtG"*=o+MWT1RZg:6?9\b[{EOg̖ĢL?Я0.w5m_w90 ~惍vr#&r#Axl[K.pe~en@M?O0 Fw?zXq$v8\dg_U/˟U Fr?-H
$ U      IENDB`                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/shading.png                                                             0000777 0000000 0000000 00000000341 12534142432 017070  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   sIDAT8c?Cά@|n@b8Y$jAٞ !a @f8" W0Pp/zJ^( 9WTMZ0/x1C5@|	. '|B    IENDB`                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/bullet_purple.png                                                       0000777 0000000 0000000 00000000446 12534142432 020337  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8ҿ
Aa:Εg8n1-8aAl/`HxpGSO}A=`J2,O ˓{2긫qtZI,U`
W'Ai"Nb.t3^:/5RXI3E_іL_⏀,}xH    IENDB`                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/bullet_arrow_up.png                                                     0000777 0000000 0000000 00000000311 12534142432 020655  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   [IDAT(cπ29%V^$SzeWSU
(uW_y,
_?oC,$	Шi^    IENDB`                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/bug_error.png                                                           0000777 0000000 0000000 00000001511 12534142432 017441  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}3a}:j>Ed0erHycF#]gjLL4(TQ٫w5Z}yw= ,g/<N~ska'6Θ_+AK6M%UnAjsJ|_5i "=:$otO^32	η!((M4Ƚ&b݇<Ք}Q2}[DyNŧX`<&=ؠ9iNR>"3ɝV`AZ6h:XM12{;19rÅpȱ ԺQ!炜@FwH_HjEoہHZ+	fͦ]uܡG\ChS ,FAu7e:iL7ƓZ	gJH{#PცL^a%XTF}~SBvO
bwA$bgĄqZh2d
TR|Tc{UheNϥ`}KeıLrHgj818otpOIK:	R9M9s٥fLʒq%Z7}KwFl/5YLz0,,
?0Vt/9+/dh'QLga-E7Q4kJ F k<:M    IENDB`                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/page_white_vector.png                                                   0000777 0000000 0000000 00000001204 12534142432 021150  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅OoQšF.ąw5{;w~ao 1! EBZW@iպP	Qa@0Ϳz|wZȔ:ټ{\ I|ׄVVBK3bȶ#qHh4BU2O&Vh@efO 9i`P(@4u(hI&ǐy 骥R	MlUl6ϴf2,Jw-s#7$i1@d`0Ϟ#!ˑ,Z֚-@UkraeSDode0=XzZ,f_G|Zq-3,h!<dndهTD~Qx¼0f=7`z!nPk\.d2t6EST.!Q. ?j>S٫YO$WZlv-`s^5-*f⼙8p-BҩbNL^y/]04 q `    IENDB`                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/brick_go.png                                                            0000777 0000000 0000000 00000001426 12534142432 017237  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uS]HQ>D$xxceW *Ho$Srm~oY2lmssdT`:>s)2y}! H:\.3,mٜa0 m^?#0UKQcccHRH&1v8e_ߪ633nAci9AOOP+2x^XVt:g1&H`dd,GV	UJLLL#pE6tnCR%'aaaSSS~`` lhooh+++X^^,6{TP{_p8۶65H%b1D"Js\3O-qKy
>.T*%Bg;cuuh'aQ
9x&TCtAZ[[׉(6֐9^#a(S@OkFso#JD?ߏWo<i} dݝ"zYr4|)E"XZw;p	In>IVhly<QG3!6ByAIAExY$vltEC~S.<{ڋ;kP!DW3;~
].ieYE"4䮿q7PU{qdm$E    IENDB`                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/bullet_arrow_top.png                                                    0000777 0000000 0000000 00000000346 12534142432 021043  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   xIDAT(͐
0E&/3۪	CabFȃi}$LHYҤHCqfCuM@=7qkeG[JH !!A~L(>)    IENDB`                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/bug_delete.png                                                          0000777 0000000 0000000 00000001504 12534142432 017554  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅SkLQA_yGŠPT4B%S)ɦ-o,%PHiGtU49>2-;9>sα`S{8~zߕlI.scʪtwy>wu4s~%$T][5y|Վ >bS6:p5>(abֈBu2Dޗ uuBI,DC`xՌ7m~VM$DkǪr:ٵX$unh'uZt\t!	L(0@POMhUR'xZ?myBnBR	]1n@X5'HLf/kQܟ>I #qw1VQL]I[,pnhdY:c"K!'qg6 *4x].81S罜iIq%Bdi#!iCke8aXH`en(RxuWîV3pݬ@\>%4"4B[9s!t6cqt5*;i-sp*{ޘAF(N|#Cf}&rm6yu֙lJbDHn4yH>RS*@Y
𕌏>m|aRvSinkNWŻ=x"f^/-W/-d6<k+g!wKf1G    IENDB`                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/page_white_find.png                                                     0000777 0000000 0000000 00000001244 12534142432 020572  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  6IDAT8ˍkaW@%t\#
&jPɉlkhkE$XZl:2X#0Z/v]=zgh/\/sx $d3I]L_@\VFcl9^VH+@JbR$(! sH, pzZG5e~`pxCKT*(
fH$P.AEo3nqϺf@s?AΈsx4y$FLL[alb
#ZLҚ`w=[h0J*,//$CS: 枾<iY14nBPtzgΎ@7A@PA>qt!4?eB 2.qKLp,Fl<NzZCH`U}mCx
lo?&Hԍ 0Xyu8䪣_nö;: /@RQ5
!+<DzrB0J MRvZs=h
Jt3[dG_ٝ]<W=    IENDB`                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/page_white_word.png                                                     0000777 0000000 0000000 00000001213 12534142432 020621  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍkQ}ɢ7.ĤScR+SY`+"6_F,]fǽ3Y7Q[̜{cT ci`p7U Tȅ,˺eY,tii50XUC`,˸~^NG[lH{B7zuNB ACZ(VVV,..y2ȡln	!qo?"7L$qڗ]biJED!P\IИ',hTiJ$Vb{+k]Bh|^p6(9xId_ {,s.Fi$*Zs#

`sJr$S1 ڃ On,q [1Ts?>
,ܨx)}y6>ۘAT5#3fK!Up4J1 9Jsq@8#:/ny    IENDB`                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/control_pause_blue.png                                                  0000777 0000000 0000000 00000001321 12534142432 021336  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  cIDAT8˥KoaXt;ݰ1qԕhBӦJ&UH[b(S@aPs>/;'yyw qsIEUHњqM/%[1O3C!&ݽb'GO6 #Y_lf9&@=5Z](Ucͬku0M}S}=45;}&+]؍dBsal쬛R*?Cn8	 غr'\w%HR@#4z`9bpf ]B[l@k$,,@ vkmI6\gI:盛]K q  ꑱPm{AJ/z X?|N2܁;,OU pcdE(fB"4_X2^?OIhڂ('Hm$t-8ќѺ;,sW1z|IM1М.34~Q2P%'8s2/F(s7|UL7mO7G%wafc?sq"    IENDB`                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/date_edit.png                                                           0000777 0000000 0000000 00000001437 12534142432 017404  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8u_HSQ7SD5}0L_"͇!)2z,%zTV*Ô4	!297.w[:unm?̫8vuN#=s|?w. ȨHW*R2s!Enkk:яȠVvƶh|pPBt0u,Z-\.fH4EF!iB.ErtDn0 xJ
IIp$$}7G0D%#lV23aOOǯTX	H11菎T`=9\TOA\ΆȖ[I&fc0&R<`0x"t3\~`}	^.
0|06k~-W/<?^`cAPbZ<@*Jy=1v6X>0~˧Pa.M?!`BCxujB[7j}qр%sf5Ut
7}_e
 jh03PoMXWkzKt:Fq,~*|y~X0zõ'kݫX3m(JG1221(Ž_wObTYi;Б7h@=aBВgkg|Xw
#²,`    IENDB`                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/note_error.png                                                          0000777 0000000 0000000 00000001250 12534142432 017631  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  :IDAT8˥kQoj&6ҪŏnuKHG'I 8SKtpR5HbA+5}{qH	sx~< doDD	 GhhBE߹i`4"owV kLNp"밂`]#4**zl8 
$\5b]" VhXIaXU/S\-c*QWh3 DcTX]VyJ Е	&I"ƥ^,3xMQ@<0+!Z(])Le-/Dw@G&	K(DQZП *GvzDËUpV8/!:E,!{hf[^EHr݁VƝ{rԮXwcilXlmCWoS;ZO>1<A8_ϋG;S#߇&fvD#ˈ.6Bth<ϏX|zqWj?yb_ZDd/}hwE    IENDB`                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/book_open.png                                                           0000777 0000000 0000000 00000001156 12534142432 017433  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8˥SkQM\h~(ZMSђ=DoR
A*=yO fCARzRK*1䒘B7۷$OxټfvV.b?/K!}r?<%C=];V}zAR(9~q:{>yGy%"~Kt.%԰-* zQai~\7''S43ZƱ~Or[f 4MW˲jX,m1ֱmraȄ5`:fU ˅
0L=&(<m~ŅBn 'f JdS
|J0 :
@ սpFX2+ALt]IZ(Ltq};0%Y.v>*ȭC=^^Db0PodǕS׹Reo\>=?Ď3ٓWpE?3F0`    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/drive_disk.png                                                          0000777 0000000 0000000 00000001267 12534142432 017606  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IIDAT8˥S=Q=oH
+b
1V²na (]H%"@A_`a#B1!A1kL651Gw9Dːǡ^E
xu8<lYTJl4MkrПcѦhZZ֌-]1E !2<ޠt:{6i
! rĞNL&h4K
tʇx[HaJ×mG*1FnYg*4L`FT f 'py9gy䮺<nx_(A78wnbj>ko΁m6`l:d-¬앃pgI"TCpL@J8s$YzPw=	(<JPҗP)pY86l߃,)A,Q/,ܲhg
Kixs뙘|9R./_2΃Go@(`L?釴SoG8v8tjشp0!$WkwF$9C6\*ba	2m
`    IENDB`                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/cup_edit.png                                                            0000777 0000000 0000000 00000001412 12534142432 017247  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˭KLQY1.L4B6JdQI(,F_c(T"FQ#bj((ONm)m0AA-m#.$9 _W"b^/+v[].W+`v;;00`hh(C~ӈFTXHjrr
Z@*b8"c#X_J5^j*ɝ0+[,{P1'IzTm>?
؟쇵F!qfdYF@>UA{9A>aSc	$w6â9,3Zvtbb$!JsqqJIF?MlBL(BncT|aH 6N@un9<l	`~PCQw4"_AZ`N,4RY|t#62_Ẃ@ p6RB|t;(4 $RGN`$;)j">wWok0W@!R?G$$?*5&YWf>:l=zȫ=չsJlu+.[{XӠbNo׮U)^X{txsPy kPoݸ6 ͸5#    IENDB`                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/pie_widget_icon.jpg                                                     0000777 0000000 0000000 00000014604 12534142432 020606  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  ` `   C  C                  	 D 		     !"1A#Qa2Bq$3CRbrSst            	 G 
     !1"AQaq#2RbBS$CTs3r   ?  P
@( P
@( P
@( P
@( jJs^mDxnDNj*>BWB[W@()Zf/D,2-Ƌ&'y;;WfяIP)ZvӒ1C,scu˥3ڸhi$̈́P
@( P
@( P
@( P;rQIQ4tj:4P
@( P8%2Cobkrp>$Mgȶ7<iGe}GCrhXeĽ[0M8F; NaB-
*v,V;}u(kM%v]b+חS/&ERhL,9IMȈBMQAU(f}sN,1lV۵ш|U4^UVJQQqOx1I˲~4_.d+k{d>N_Pƒ8ZGΖDwZr4$A_qFjtyZlGDPDբpEG-}j>+R2πx$kfY-]ԹͬaSz]|M vR[ROU|/j.ɒ-2HGu63#QMEƅdL([C1SŴhQ1d3-@+e=P9$iD|na<0SSNځ7;xwؕ{I/[mI*'1z7j{,2ufīN,B+l8|.) ̑M( P
@( !op͑=h.옓\Bs_ɗ ~:&d*cf14qpm#$S7#:'l70$!/*"3|zmb1A{G:i*˶:˱9NbղKMʛTW3s0nO̅hR2u7NIf.sϽk袃%Bu(G̗K))$fs0#ʅlTqMEj+ZM;ܢe]AO>;1*1yS^,VOl1ut;kHFDTOPj,-[+V$En<ÇuZZ9^6/OiʚkfiV/s[Vy5!oFmŴ4zMD:a4knݹl9wnK2u_j\ ~3 V%ULy')
ݐBٷ3:_{7i.-Uc7:1gUm̋d%|-k>f6)?&{OjяЍHQO}1Yn/^3"c95dD;^N㍣Q٢TZ;;p(¬TY<f֢Q:yymډ\P
@( P
@(.|F~)=۟48mqv ˸^s:hc>rt֮husf6o.b<Fe)\)9<<\6I44 l+u}5kqf早Fͣ=O"} i±tTՖ׉M!yދrSk--Xwhʭw-[|#C,G?yr\^pUT}7o6Dx|ĺֿP)ԎYlusi}RYo2o_8N.1֫s**?䵢Jy=܌cq׍ʿ\ӽV֐EIoW9Hjqm=(fEdY,c]7"$I
Mx-͖z*_fڹlge2o$o24Wu<c(ǼIK\YwJڛې@!)n"H(]4]KKc&G>jwm&)rPhzdUE9DNH>m	<ڈm=SD5րh P
@(p\rV[ĕE]5qS~jZ.G[>-E.&yT	12a2.7>K5:[s
UURRKvZrP1 1@hHEJ2dޞƺڋSC&22[q
	WU~7VlS. +)o)qE9tHcڿWɼGQWԪyPE#mЩmz.^)RIF1[)<KeJ)m%ǌBQwt:Q+T9F$g.%Vڳi$z8MtX': 뗌MH٭]mA-/#DyQ^a<OtZqMdQ3׸ٽ8N	udFQ̽n5AJnq{!RAIneӯP
@( P
@(x:`xkd+cyNOln6m]QF[ʽ̪If Ǵa48u8OFmEj+8,u4k~tp`378-8_L^3Ȗ1kH@T5l}`^7g.K[&何F{ΟR{K?pS/Ĕs"eГOMU4OW\p[ߔy]0?L%KI-QIh=]CdmQ$Guaw"O׾nkj'U$MJ,{S˄,U2.,h/2B_FûL%G
i:;C\&{
\z+-BO_
 eMYո[uTꤞK|#nO{[,6u<|:9P"6+]D }muZYfkpIĘEuKԕ~_ƴ\v߃5>}\psm3FxP
@( P
@(.W7/@p0E0I_યr|*b?Vha!' E!!0"
B$Ud1j,u|[Uz	g:^<|WvF&WlxwgȬn~'\N&'ǐ\s3Cү-U?FT+gV|\dɩ5ɮI5.qyK=-YV[jqwnP91Ϟ>z%q4H4
^˒
۝G
sϱ0gţ._	l锖GDhym4-
h) Z<loOΓOۋbuUs,G2]	lB8P
a%qmvyO%wZΐCѲh:fM7A@( P
@( ;Bq;UHSRB6iנ2N[m+HTg +tT_/QS#v+۽pE\Xn!j,ƻ/.i^RFa{J2["哜c'OgG'	rNJ26ⵟ7% D@
*"'EEz-Cֈ_թߍd U>1bIc+1_Kj~a ,,C>}cDoY?OX}Ɖ-/
d[kί<M]mc7"+_Ů]KF`֒iE¢&9o|P2-P
@( P
@j݀aol,r-Nj6*'?*u}yŝ.g pJyfP<5Oƥg9@(<-uq׵$%dFqN_1]`ap|?rK7+*o TVI"PSv%fJ~zrH//MUBZҾ]ΝYK?DWKP
@( P
@cGkHwZXثc)rD!%~( W+7؏yO{ʪ|qWDwQ}@BEN/EYU)x,JjP>WٕbLw+WZP	%OsOzܘAK:ܡw5B dAg5i~9M`c[IE 47_VVmDo*bʔh@'yQkw]Rِ11ýnL_n"5Q#p MET!N9#BrCFfpW٬@( P
@( 8TEEEꊚ*P9{)L!>ɦ,86kū(A$rn/ISCt42/z6,* Kkp0$ETרuhLCP
@z{Y1涢LKȎJ%^"-b"'i;zۥ\]^kZ5<OeԙrE^n}|WD#DM-D~J8_eƏc\]vмU㳝r\Έks8v65mt%,O %Jܧ?|Y\ 1~glF%-ZM TUAPt'^8 ItB~ʳ+cסNĥZUQ1˹[|##)ΎD ީ@RQo7!]wP>TgFkАҙ"YT =NUٯ Asj8[ZrNrrFP$t-UTX DdMyedwa6l HW@.V+rw[W8dX":BڹodMP@
@( P
κڭtU#(6M$%.XŦM5Wn9V(Wτ-G+כ^'k?
}DjH4?zeNEnBۯqex]rhu:/qt5J-1J5dlT!5d1&i_${|*t!Ss4'W˒E.+x;uѨpp Z|F-ɭJkCZ:L[q)6N42qvmpA=31)B9?\ۆ	dW#6y<ŖatО|.r'DDJRRrmd P
@( e1r߽#s;-{ o|?
w./&TVn[ uqJ6N"M2]mJNsW',E\$37XKjscu}_2$cHl\U]@8ɶ\&yV,cB:#JH1][ӱNr;Ɓ"bn#%;{H4xOk[Gu &;b-Q-Kq%~J7G]uuF#%TM˧|upCG`1Le@"~iJn=[7N⼌FȻBGwnUUҜ'5O|/[M_Sexh2 bj	Ahϕd~P s}d>COQMuE?k:N/x1Y<^ݒ2#cdE0X.n^uj9{;}J*x3 iYliM
DJ<@( P
@( P
@( P
@( P
@( P
@( P
@( P
@(                                                                                                                            ./mvappsvr/docroot/db/icons/picture_add.png                                                         0000777 0000000 0000000 00000001351 12534142432 017740  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  {IDAT8ˍOHTQFFR1-T\Y-څPТrQ.MBEwᢍծEI-(V.$Q38{3B&+8?s>LV~vֶ|5 Ki~XeBS OL_ 6 _9GoWX&%*JNh0Q
t8WTBZ 5*LO q1;SHQ]Y 
0WI'G6tqHa7-@^ೞɪ  C+eΟT$~ "D:!*4b{7"D̽|YX$SPhbĢXضK
wSnbn|H!%Wʾv"ng`jR)h܏fy֍(Tn?x^ޝ豴a`'ȤqSAK)bW-CTddYin-6"Ic)r4׷\\[$QhcY3?"p OgC?ܵBxdh%+uT":a">LW /'^򞊪ֆi8#M`\v )^tLH    IENDB`                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/folder_brick.png                                                        0000777 0000000 0000000 00000001337 12534142432 020106  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  qIDAT8}kQ#}H"bLAkqk;].@֢`Gi2d9.Up5ʿRռb0@>o]kJs033sR܏0)ˈX__pH 9::L%d2LNN222BѸiZ
ÐEDj
AБCq(JRY]]EDt:yřĄ1nS݇"ah4p]uuN/=c@{1YYY\.Z,J٤j}H5B#l31y\ۅUjT*')
>_ԵDG8*	6ɢ&{;Do9Vs`b:ќ{$!n'O0;p_ˣx. OڞE!jTBr{GWUmPBDAdj;A *)AV4MtI}` Q5X4Xꣶs7}@i᷁n'Gj$Z@m$Ʊ(RM$D΢\ŐQ&N:wxB}q    IENDB`                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/money_dollar.png                                                        0000777 0000000 0000000 00000001166 12534142432 020145  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕ORqQl#W0/Ͱ&S\r
(Lź [!Lkl>om\Ňr~g9s~ ^h7ESG~­VQ{N$l,`&o+4}Ps +^
ߟ֑>D%C>iCUZ;X,ysE/:FkMU=71l# ƥ1gR&j,eXesMlvm/lKBd CFoN%ވB)bp- %\Gs8n/7i]RY+d&'c tø1'G;3pP#fEН19U7/"dNOϏB?oݖc[nCt~w*`G=DzPxR%JBysU]3\_Q4^*#1Eɋ񴥩]L]FpcYpnݲZ?p     IENDB`                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/shape_square_error.png                                                  0000777 0000000 0000000 00000001072 12534142432 021346  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥MKUQUzHO	GYFlD5J
"P`dBHϽjpfzfn5Yϻ- pacGE6b!*QpV `0X`22xDϛ
ؙMdb;gSEl?QB)4
= Q&@YIMi3\(((+mC|o,Opt`FL[W[O4HX@j bzMh,hRJA 1Rg{k,qdL]FMR
`չ:5ZruBugX]K*#9RO($,WFfۙcm\zqzDұït!vMtg3O:6,4[]ꖱzE&rDHW    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/text_letterspacing.png                                                  0000777 0000000 0000000 00000000767 12534142432 021377  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%999懅)mll
kii	k6(** |YArss秧5(xzz$`
@':9 Nb+***HJJ`, bk?+'`Ą9edd4 d%Ne+cD#0N. :9 
P:d\\\,,,8AȔB_"p=jsI fݮ:ݯxc۫͛[YڼG=1%8~Z	/{J74&/  V c2K    IENDB`         ./mvappsvr/docroot/db/icons/transmit_blue.png                                                       0000777 0000000 0000000 00000001456 12534142432 020333  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅]HSaH@@.*2Co.؅h!h6k.M'K9EI+6+sHqpnlmg~lNXX'.{2D쮮P*J.4<<]oY<ߏFghhv?mubV},HY>Ra 9d'bf:+<)"Pu=W[݉U~yr+ @WRvy%{UOe=^bξ05-	@Y 	JNMwxzORΝ"mv	^rBv#iY>JTWRrXJʺ}$S^}|)AhY]@NIϓ̋kX$]^ʩuQz^+8˃.A7;
]f˶Zi_itQ9]5pRc2nVU*F+9RgbV̀)WpJng&:n"tOD`w}I#z^B} T voB mlxV.0O3Z >"-xy,T{>ǯod/%%% xW3EEE? |/"`y~~T*= `u{-YO<J    IENDB`                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/building_edit.png                                                       0000777 0000000 0000000 00000001333 12534142432 020257  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  mIDAT8ˍkSQWkզ6I_XhBKF q!((V\iU%`B*>5Z&ޓs83p93s:;eETT*%Zk,dp8L,#[J%( E.D
 Zk ;3W\#[5BDhkC(=ybQ/+pE
f}l?N0x  gB}H[XZ8ԈAC	FL$Pg11򆒭f텟 y3g]^xFo`,=yO@_JmqlwomeN?au]8R8<g_p]7{IǨhv:ހ`[9ׂ!>x}a(r_T=zd(qưK0=~/12]^mz]v[&󄷷xџ䁻ZB0:l{҂U{4]";ΒN1Zw"VU5562׸mul ~gh[h_[#wJ(    IENDB`                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/text_heading_6.png                                                      0000777 0000000 0000000 00000000466 12534142432 020353  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(Ͻб09pp`8E+.P̑p`l`+
T+Ttl#`&Oly%J
7?s-+y(
:ٴopw+o78?SHn247n9	/ߴP\kV8Ф
EE"CVOC?AE܃7݌tTedL8?zۏ    IENDB`                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/feed_link.png                                                           0000777 0000000 0000000 00000001446 12534142432 017402  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT_hUu  ٜwyDCl_hPT`(4@(z+[/( (e`ZhVPN'׮{mˍH  @jqҹ܈J;	QD!"D!oqRFҘĸ.q@ FszdKwXߧYD9"Nӵ6AQ
We*~W "˨g44H~cݛ,Xs|kH4Ru.f&87ޥ4$k hCL}yvwc_`y3u~Vmҳ5;74H@~s\IW*.s^=,s_N,R,=g&D"\wj)Juߩzm~qT*lӷƅɆv?0`ڵ&͹xi[Wlۻ b_/)
zƙ?EժG*??zJ472p
jffE;٪zA)?i\j-6ml2VKT244UƯ<җvѯj19ۛu/yRǼ.=w~0sl.(Һ{3vcCDc    IENDB`                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/tag_blue_add.png                                                        0000777 0000000 0000000 00000001237 12534142432 020052  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  1IDAT8}ϋRQ?16E6-Z%H#-ZfԢEThc:tT4}=AQW:xOQD45[%=ɧ{d:>8\|s$I(rfd2HHRk U
h6*$pLFCU31D"GB8LɤFd2(zNX,`04a Zp8@  Hyjy4>~Z9z{4fʆ>ވ;	;T*r3pDQvjRfP!r\tFGIş
1!ĐHT"k^B(<d:zy:<1o`ww܋ ȭVky znq<L4=f\<k}>LHA.Yxg5
:LmNպn& W+MgriK4`N-V;l6yô+SxTi7?VbgzUOQz n    IENDB`                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/user_edit.png                                                           0000777 0000000 0000000 00000001501 12534142432 017435  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥},`GOjmi^bHsaY:qEC^#6/KKr\5vɽ$t1޷lF[|g<?= z_QY$I\Jq?2J CThKD;15[]ej"[+eS~CD1qŎk qʒ1g*Nƈu=MqV੿c2dN=	=e16/s4[m431m"Ufhiԭ"_X ~Na^<̖|ҰlT-~+UP˚u7@wiL)6ƺ!Pdcwv	2I^hLўMU7T70OǺ0H*3"sqCL<1<B$+h}@V 
i"6B(C=A0
Q)%ZV{Իr1@j)  /cQYb#"S^a0bcjB@X+AvK{Pð2IFJ.`%8˵eQA@D2:+C+b~&S17 IK1ߙ~f+ 'CCCx{X?t1~.~U3)+Z'}G7RFǽyi6Xc}ΨjrŖѩƹ4߁XC^wycؘ4ο ѷ3{4w    IENDB`                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/sport_soccer.png                                                        0000777 0000000 0000000 00000001005 12534142432 020156  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATϋLq  {3~Q.V%NqXE"XM" &9`f73|09vm-J柵n~D9>ಲJ̈́D땱y?5c_^^X~q/%jzl^*OlN-T68,_2LG[ꗪީ8ltt供Tn+Mum9Wx#j:ޫK+i@Ksb-铆AÖ)I} TTE^=FMAi^K"5HzŦ+hx8҉rvoh(١e˧Gppx%/VCSVvg[    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/brick_error.png                                                         0000777 0000000 0000000 00000001436 12534142432 017764  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mSkA}h~YMDbZL-^*E "ЃW-J+	H,imM%!֘$CLcMvF[؁oٙ7{>F0#?T*7岗].w1>44t?0h=55-&''x>2.VSdld!N)0Ϲ"l|ވD"i֢@{*I h6`P,aۡi<t]G:&5ـ-\j`l`ŰP(+V+:NJ+"c|>tttnvf9EbjUU3fn,0ͨV<aTB.Ѯas`鞸]2)Nb@+9E_x`EEPHeA@u#Nhf{Z2)xH$d2LM`ñff}s8܄Tf\$D\(nb/d3Sۄ,7쎌qcǇB˿hl,mᰛﰸ;g ٜR0C:؏bVD!~pvdaTh}Lccc<p@I1*z H@O~^5=,^IbFL=ڵ+BR(r4b>ʋCzM6 =(02    IENDB`                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/contrast_decrease.png                                                   0000777 0000000 0000000 00000001267 12534142432 021153  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IIDAT8˥S͋RQ?75 9-@0AMMkrZjfB&YOo>zhх={MR{ݐ]{Q(&H2 nŢ%IpjuX,^&ɒbLr\\.rI	!tZdB1fTE`dh<kF`p|>00	 @e@ F#T*`ټbI$=V0 ZM/NtbySyV(NRV8cu<YtAt&,f4`1j0̈́E.
ftT0S66V=;l*hB؃` 6MOH"#8؃Zn5oH"dr%ft:o&t:&=`wam? y-C7?D>l=h4zw8g͛D(ۅ[p9P	jWunDH$B[
c!]lϳ&bO_LZׇe"fȢY]    IENDB`                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/sound_mute.png                                                          0000777 0000000 0000000 00000000732 12534142432 017641  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  lIDAT8œKaצf'ɻ(==R""Ǧ!8!NDR!A-AAxy|>/78LP(䃲,=X'K"$i,LhZɥi1ŢfSGsהRIEVEZFRFvlO>%0gygzv0!s3tW>E,8`ۉ8lK:!0<2.^l`/h48+F(X[8hx7tF>z;B"o,²%BɤL&h4<[@^R.ڦSQ>,SF&>4>pG}    IENDB`                                      ./mvappsvr/docroot/db/icons/connect.png                                                             0000777 0000000 0000000 00000001354 12534142432 017111  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ~IDATKHa |δk(")С<ŃT`5:EP%FPdtJ""-Bh~츻_{؃B~15ч>JD+Rq%Aޤvj'5bcipk%O	029\	^)T#D<m	l# !mK4BI%&U(x5]%Q%vJ!(Dmb9]-~y5EȔH	zIL+^qN@Aqːe:ד9ie9'᯻Lӳ2jmh36A.7@C
ULȮc"U832rrt `a!4jԅu
!AĦWA<l{sE-dE	5*oG$B*ñbhk>K2?30wqIeWs*'+ԕBvBH*2	(a[&13IEUqjn< b^c\Bm25XE.>4qp ϾMƓD e.agO|Eq >Oۚ:fǦ[Dc^UZ	΍Q)Lh(oM?c+RF*!ЇQ    IENDB`                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/newspaper.png                                                           0000777 0000000 0000000 00000001222 12534142432 017456  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  $IDAT8ˍkQųtK.1PQkoHRQiM8hmXsѡ+NKD>qpXh4
BB |>QTJXV p.A;8!h Apvvp$m6ۓdRJw0AqX,D'3L0 6.;ľ~l5%^lSYRx*K^/H&~wK|Aj_,1t:ET>5?Cl9{#
n|0N&n$b^Fq7ڕHp}t:yf2.R<wԲPp}}vV%:`_]]Z"BR$ QYr,~4l6EkR]0XPeNs[(ģc/Ku<K.n[)ۍ!˝!FMֱ`@ʻd/ptcjzD?] G`B    IENDB`                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/zoom_in.png                                                             0000777 0000000 0000000 00000001325 12534142432 017130  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  gIDAT8˥KqzäqV(uD).Vۚ:nWS$#aKkz+mmL36v"=>>}1:/8y>o ??#TX|M-Rv,n1O1Eirf&F@lN.`9QXһ
pg\{?~+E4 @[ˤ:!9%)ʅx.D F8]ND3deH']\ӍNtqP|PSt jʙЈ2A>"eƍ헮?F>3eh=,RA$!d8«Y97'@77DQf5֧@x&_mj<UP;C=K#OA ?̺v:rmT/k5G5c
#x~h
QeRl=ѫõBrPó}gK=Eo|ag>n-̶/=e,ZbT\yGu+{!V%E[&ת+C0o2AQ{`:Nپ:ZpۅHy;{`dSTyWF CT>;/좓    IENDB`                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/page_white_csharp.png                                                   0000777 0000000 0000000 00000001274 12534142432 021135  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  NIDAT8ˍkAƫ@"G_,>X,5RxMچ4i4!RTkђ
ňmsivlS?g6&3f9s QHE4%) ZVh6ۭVDaXLJ0@͒$\.wU,!2I`wQ =PVQ噪T*P(8PT@/ZmnyL9re 5QwWQ	,[99nn=79ؗ1琀20¸8_#m6c,j|zo
ZgcOMGqv23Lȳr8xb2M#Mϲ08&0jp.[0"CLa!L0V>m; ,JOG#:dgfqн98zcC3Õ5&A(a%f,f0\,'e<j/LEQW
Wmm,HɼN#
U\&f5F!@#_/bH
-e/~A/\;1%{~
A;wD['V~.m    IENDB`                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/lorry.png                                                               0000777 0000000 0000000 00000001106 12534142432 016622  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8œKa(F}")UD!6@A BQP.BZTza@HBi_-u
Zn=yfFrz3LPTSEӧ0ޮc#DaNn)aTwe"a&ԄkbSNtq05LTttfVDw?jS\=?yP[Zm5d
M%C׬lAEI+3͇qqKe
}[jCtnX́]e$	Mz1(ARIV'%LmݍĵH޵؀*hD]*
@vpܝ'
JDf_?J/|yQzS]}#t>§mS/>g/3e@T*a`KE?*{7lߏi?lC    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/television_delete.png                                                   0000777 0000000 0000000 00000001452 12534142432 021162  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mOlTUt:`*.cܸl"čҍhPBLX)$6JB1Ƅ`mLi@ebh՛ܛ~9ǦoI=9c)$}ifaؾ*s{]OjFkqavpӱ&ɏ?Iޡ݃zZ<38g1@G OSŁG0KOO/x
0㏕f+3.3 {_=ʕ'=?MPqT_k6y0\bfu_ffd@US.03Tzđh8\x=@7|SÛMw8 d2n/qX:/hǧt}[(nJ%{B "*smp[Ziw̳B B`t@بR@1`I?"U.Q1FۯzOy2 F@aOq]_7ͅoqq=] IFkgWfB	G^|23s;&vB}pH5xΖ9B/;#n*Y^^صk8(\cg+_Xoަhȭr*JR!sƕ#(v'z91::jx;6gj0	}A>-cp.    IENDB`                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/page_white_world.png                                                    0000777 0000000 0000000 00000001336 12534142432 021003  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  pIDAT8ˍORaǭ#+/ڢ 2+u6SQHeUV"5LKsa	ž=)>;}{+PB!B%xV> P*/(kkkd2dx+++$CpB'W3N:Ӌɻz,,H$DXA6V)ZD+ި`O`<{+:quLI[鐨nW)^}[)GcAt[1مh4$
	`FaгKv/jlq{>OIRl=bضdF؀$O?9q
* v~L#:fE|w}@og!qی:>Q!1r+l-<ǘ Py͎C*;Ιpz+T@M?a_pC/zNWfƀ6wAEܠc|y5FNԡ2Hw '(AFle7>ųI\H"^LiEn5ۙ`t;'%G
;-?|f'(XtK <PU̗    IENDB`                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/rss_delete.png                                                          0000777 0000000 0000000 00000001171 12534142432 017606  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥KAwn)W+(ITIH-m#Q}A@tZԦ$@ I}QÈi1W a3~%"2l^4x灢@
]}̭/^- rKCgZ9pݐe4w2{SǗG2ȷ`m	\&2W}C=(`/o}[h TApp$Ԗ̱[DR/D}! qj;ЭW{ژi!yř&kmM}*Ri!@胝A-71Vq{ɿbb)PDI8¯sN|0L>*?lS((_Z.-VG;v`vAJgwV:/P\gbi|죳hZqw]u=¬ۂh{mܙī:ȴ@됻ҫ8*Ph    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/emoticon_tongue.png                                                     0000777 0000000 0000000 00000001327 12534142432 020656  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  iIDAT8˥;hTQE}&3DX`D~b& 6hiHml6"Q,Q!")D0jF'y{9B,tbsFUSReP"
"p|Xfptu>4 hR'^TD8~Dp戶
:OHu)fM%z{	`M*¶%	i2ԧ!b6果Eذ~ T64*S<bcs|-% "2{-X[Ǩdq6#CK_J$S+--9Br̒.zEXQ2{	B.99yVUD{ʂ*"~8TI/DnG]ϕwEMS">fY~6P9,Q'kh$lNRbs x.5^\qeh=A%Ѵe3us?܉3Bl3.Xv`(pRLXPų{_1753 +z[	<ӯd,gwӱ?v`)gHrp	gs]R7+~ٖ    IENDB`                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/group_add.png                                                           0000777 0000000 0000000 00000001447 12534142432 017427  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ[HqW=CO=R4Qjs[McM}h:ee0%胆өK=[obB:O×?{8$ $>ΞV{-η}qf^Iݱ憝KyX􇭗Õ邱= 裕vs/TX3?{'z_gÝiXc+=	Jv" CŢ%}aO]r1X 8{>G0P0Gu<;(A^'A"R>y4godKOofh@0(M
CYU24% 
g~´d$@h:rFS 9U(bB|}PP%`{8xF*̇n]
(a!{MTiyPRF-#(_r}k]3\#@֗TU{x-^1: 8#@ е 1DRcR  MI:࿲0nq RD44em'ք:J27`q&pǕ|(ܖzҘyٵ]o'@JܜSDGAΛrjd$BM*J,Hz%W߻/d/NV    IENDB`                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/phone_add.png                                                           0000777 0000000 0000000 00000001155 12534142432 017400  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKq?<no,YR_E!]*"YB:D)HYZ0)C*Q(_.btXi%{]~3dН|>33r$	R4?zTyiM"#jfOOTj{U%íJ&^vDJE05v~(#q C= jq MH`"!ʳYTu<=08`$ɓJ8{ɫHײW,Y]N~￼b>.zg3cr<Os7s뗥
T̌oo9yx:[.F ׃+9 s*?M ܺ#: 3*qLT"N+1W}J 6 DdR#sq̅#&LX"|hlv`jjwmmk͆@븾}d    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/contrast.png                                                            0000777 0000000 0000000 00000000662 12534142432 017316  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  DIDATKq C#nhhUhp@hm{i({C!3}   @˪\^m<<DڛaSS3A^_G9˿L;'9yy+؜|wc*y`?6zwf*]cԕ*Ek|7/+Ҭ(FŬD(jd *MvfP_Ѩ&ҦrY14PETݡM}:QE~
^,_qMgNL}O+`}-sfƎy5V Y2o;[G@+   Q    IENDB`                                                                              ./mvappsvr/docroot/db/icons/money_yen.png                                                           0000777 0000000 0000000 00000001062 12534142432 017456  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%]r\:OqU`s{[<	ȹ?DžQ4OrP il߾˦@}K@mLur[߱8 K*܀]uUn4 h Ĺy@w؟2~xm-h}oK5  .TʡI{uXv`4?/p馢
o?M߲Y-yӀI~||%xuȹ{[Cƪɋ;6:4)>sVf^as	{_I]nmn. =гASXWZ5X[6XZۆegݷ$Fr1 ,    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/television_add.png                                                      0000777 0000000 0000000 00000001451 12534142432 020447  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mMheyX
](,tiVo9)xR"ABЊ"*RJZcڦ&Z&f7{w֨sfF̌COǒ;?;_?~=<;֭FNO&>;l|?kԉC$GR6[d¹o }COlrٳ8\';U[vӥs߼3 ?JfH;T9M[TW3߽_̌gefF> TjfJ|~||X-?hf!`ɃGc`ppP	NwX{= Dǰ\7nbwNRj-""J_k>'?VX`}A)i &gĨ'
"	ʧ$2$W8Ag}|w7l .5Үz{nLXYxvAp ] u+4;Fcc-o	&Ww6f8 OR~7@.fԾ8/_pJSS,dfNs,@=BynREUjE\XabvǗ^##1/|DfSggic@'    IENDB`                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/text_padding_bottom.png                                                 0000777 0000000 0000000 00000000355 12534142432 021516  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(ϥQA@@'yWxy7d-]'YId;3mBGԕZ*f V!ΡlU)AkbxC`'i$ G@t!sIܤq    IENDB`                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/plugin_go.png                                                           0000777 0000000 0000000 00000001266 12534142432 017445  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  HIDAT8˥KqBfaF)kDZEBhPLB-kѢ E (vSJ*Hj)Ciw.-FkI8ps7rwʗ^|v慙UUΥL	KOc[״IEY%w|K$<"2@t=?fmkGbYUUEGo]⁚R0wwh_^Ǉ7QUQ7̍$3s'0s֦=<JME-ՍA]K8^ª̽e>)0oBDQn 2QϾ+Qn.,T	B2=(ꊨR-f	n{QsoZɾ.ԭC-Poξgg>Ck/Pw(ƻA{~OMOYn4AQ
5[3f'_KAH@~¥7/X%akCLaoDvSDADNWz@+P?<c}3s/|!ʫ.6}bqFKQ    IENDB`                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/calendar_edit.png                                                       0000777 0000000 0000000 00000001411 12534142432 020230  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥KlQߥkgHMDUb6E"h*4BbX!  Xt%JKAS7j+.A%.c3Ue,~F#'rټ󽆈?з_JtHkiROQP~tdܰEvso	9 ;AZT$]p]j(_>@{~S$	nzJ|NhDkD3ȧyyXùGVD7}ؕ""R+%&k$ZG:kE"JZN hl[XqljZ$.fz^)'L'k̉- 5	և>CEL*\C2zgWɞEi`P$AkqB:<&)c$r>pw6}G5"BK Cl>spI}YN Lr>X,^G*V|`I?gx{`:r'Ɠ gtͣ%檓rZL~oa,:+|c>6򺦉[<POjh-z IKoJz^ˬE+BW7a:}#?i%p,$#<Ol+=oivAd    IENDB`                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/disconnect.png                                                          0000777 0000000 0000000 00000001434 12534142432 017610  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕KQ:ypVAD)?EB0p2I	JK0MF5q绝| :nG	:ӶNTW Bd1sx<pJ 9NH}{zS	DY}	l>vUń@	v-Wcm禺_窨դ#E"r֬GvxC&Vx4>*zcZoggG`~܌GULl	pe,iT?/nEÀپ3OqLFkcVa!`07EuyˎCiPf|7}~~c|EVLd3ʚMLr9h5&Д+&]6N?7梳+h+eq=FAaTPɖ>7b#mK~q)L,p1n@rAiɹ7Ł2=443.n*TZp]	2V	~?͸hwk۱XE9~ E@W9ma z^IjsX۰{28ИR.gA6tC/o}E${"1-0A?/do^    IENDB`                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/pencil_add.png                                                          0000777 0000000 0000000 00000001115 12534142432 017535  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%hOvs^䀿'&4W%DpsEKxǧP:bm?0~{<Z_/c''J/Fɉ";	\s]g[b7ՌՀԉ֌aNêyDyS">lqYW7`FHXyAՉ\³]wgo-6`rOO&4Hso6}	7^=7'0uYEJLgjۮ6]
2 H'Wz~7W?9߻w%oߕ ܾ3DTkm9p
[{4JA|x;P$  =K̴    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/bulb_widget_icon.jpg                                                    0000777 0000000 0000000 00000004244 12534142432 020754  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 

		"""""""""" C             !      !!!   !!!!!!!!"""""""""""""""  d d               C  
      !1ASr"#4BQRas$%25q3Eb               -        !1a23AQR"q   ? d2٤%UQe˲Toa^&WI Romzoa^4j/m#_X5j/m#_X5jh/kF"x_<W#H?NxM1"
ns47W,sS>SZޅ=mF99gD6#IVeU&}׿ȯ?}x#G_8_it-(3NK)w5Qb"! EnaFdRg'<$y#"ڌڶVq*%_xS 6>Xێ!Ί7LHuF*MYܮdRL'ZT	wR診YK{*bF_g:1W=9G9yqM'ch>~梷 4kQ;}I~
<D~ql؏9 ꚞmcwGAGݖ_Z2Jj֑U(	1eChS)o.·[_upɹIl nQ~M^||͌۹(>|2/N`I~
<D5mH-3d<Sɾy髵hJj2
c^*k,+@e8s6zZ
r|\>Cϣ^M>AEnJaF\2Hy+>V9+UrQn/cFB9iK	K+[vQZS;A좩NըQ^Ȕ\7Td=OK >^K|5o(lN1?Gbrw\ٱjGA?#{c'/Άo<icmD#G(y(z^!	;˖!2$YDsq||e3= XpvRkScW6KrS9[FlS~e
sT0[QZvrN'aG,~A~6=Ere4Aޭ'/11;OS[vxnlٝCcvKO	gO=ܻVԴ{EUqNe>zNV?{uy1^Q7sx5U(|ѝDc((QBT;VT1S?,hkvciজ:Aǜҙx+?zO!<\Vh]-+ICxm#2ܟJu-RT[7-uItHt}6nkfE{GyzXGDhQ+N""+G6gu|5Ud5N?S?>e
3(@T3e}_[F֍ᘴǇ?/٥>~,4Ʈ^fzRG'_q3e(8bUiZLXGu7{ykᰬTP|5U|ѝDm?SP
j5P@}J\9Eċj{hN(O)r,Xź>)o_&LMq[TJV:d!4޴]J%ԚZ\ysQTPx5Ud;NZ!D\r:Jڟτ3Npa@!"v3N 0t Α;D 'hC:DgH a@ x9DP4gQ;DIp.#&$ hQ@&$ hQ@&$ hQ@&$ hQ@&$ hQ@&$                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/email_go.png                                                            0000777 0000000 0000000 00000001362 12534142432 017233  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥kanݐF؀(FPFFTll	6*ZNP5">Q]и1d1H.Q.p;}ܖjw4B6c-ZYW"twY<yx]>HşXHH;JRqYkJ00hKi5$nαЌ\OqiFZyֈ.$]A$=jKtγ+ V (esBS:$=HЙOaM`b.tdz LriA-}w(dxl/ XÃ]z3Sx[Pa'FIz?ZR*9}4
#lN69{c-WO
V6VbOL:xmh
vѐm^,ܳ^S$C8B8D[tQ(똥(`sq7dc~z;ݩ\Gr8zJ+z(0>^U\o=K%J4PIF
w_KŶ1M9g~ҰsvJ&(ڸ	̪iVG5    IENDB`                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/printer_empty.png                                                       0000777 0000000 0000000 00000000536 12534142432 020362  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(ϥѡKa_jQ@v 8&`~\0L,x
A_SOz9HHЧGD%К	#b/حMurUYGt9a{"O39`.e0wQ_P0G

Z_rsKΨ$q8zq_CRR.x3RRKE9IuVY2`Q+NYcmU,b0aM[7reJ\W    IENDB`                                                                                                                                                                  ./mvappsvr/docroot/db/icons/lorry_add.png                                                           0000777 0000000 0000000 00000001261 12534142432 017434  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  CIDAT8˥KHQR4J|fEeEbBmЦD7AHѢ2zB%m&PÙp[\C!z({ν-		w8	,X`ESrUA"b1hA_фWwsWũUxu{?'8'L*88Cnm8UUr2~i_GDPR{࿻jo7ա3u*jˋ@F&QQdFgyMY>b#uEl^]ĕ kg8<ϬpdKUr|lǩ(ˬ56:1#bŊ#96EcQ1dy'aKA:{1!Z8Bpp&9>ý'Z[BJEz?ǧo<}Ǣzdkk"j;#?rM5,eci#X74 )N$m@ŚIy̮ځyd2~o>ez(<m*NKZcG19.{N	"<ZÕ
IZ<0y=X     IENDB`                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/resultset_previous.png                                                  0000777 0000000 0000000 00000000605 12534142432 021444  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%.d~؞:Hy=i'ـw=?k^7I3 jyK;_B7.x ܶMk'΀Λ>?uǋ/ZxSOgcõSg_ɘcUpE=kkV>6 -%c-?ouKz4y]d}[Ev'+!	[nY`俰d'eA̄ ЊO    IENDB`                                                                                                                           ./mvappsvr/docroot/db/icons/report_add.png                                                          0000777 0000000 0000000 00000001312 12534142432 017575  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  \IDAT8ˍKQB@!]6(C"N(QTTTLeb2ҙhkt:5X,KX7]!}e|qx8~s8 s|CNU$I6̕n;uyߖ]ZL&-!Fq0){tRx<.R4E$t: &^% S8F*8hmDםUWqS}m+0p"
!@ X ?/G2E f	_>DXx9N<3wŲ	F( wM9
amm-<b
ַ+h~zh/蟱:Xsr9\L|MONAHv>եH]P"\vUcOz\ǁw"7G0(J$jx
ghuNka֡F_Vc֢| MNܭk5FMS	"/#QgN%o6O)A:P#a~>,dk
<vjɴә3I)Y{jI-ߥ)u+/UKM;;i<߁J?    IENDB`                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/door.png                                                                0000777 0000000 0000000 00000000634 12534142432 016423  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  .IDAT8˥=JAkAeEbd1<W#ob12dhtޫ*gWYa4;ue
չ%&HB*̮W;>LX$Xnps70'$ln#1a11!V~(ef90@D/A+E"49?Rbg8Ȍ~j-t*}:\As['hf!2Z!=d`)2(#؂T	|U1L\5	&Gg x\U~/G}?    IENDB`                                                                                                    ./mvappsvr/docroot/db/icons/text_list_bullets.png                                                   0000777 0000000 0000000 00000000530 12534142432 021224  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%*\0u ,@D@AAGFFO]| |Tй僐ymK_)8#""濉]]jjjqd׆j _*vu% ܿekkkWQQ/''_\\Qd3E. `?ۢ    IENDB`                                                                                                                                                                        ./mvappsvr/docroot/db/icons/page_white_get.png                                                      0000777 0000000 0000000 00000001004 12534142432 020423  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕MKQM!Z M	[.PladdFqѢ@Â
ms5?0ssaka`0%0Xl4f#%Hj
۔J%
iYJ
:$$Z$ORX,"A@D"Y#	(P.f{ZjD!`m7;JdA7j	UBjfB	z.υ$ĿT	C]	(@Np>]P8c6#֍+ޥ/>?>/'nqgջ7lQ+LGՂAsXzߋkf껰Ȇĳ}/bg<7G!Z#ɠlrs`%Co4tQЛ1    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/tag_yellow.png                                                          0000777 0000000 0000000 00000001112 12534142432 017616  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅يQ%6<Ynr!<+;
+.qFG;^Lӧ^s6K.ꢫc)}t]t:mZ-4M4+ ҥz9|. j"D$PUULVŅP@T:254JfeY"OJ|>"]#p˪a0#Ӣ6P, MYm$gtJ.N ߑkd&LO`702Lj;#4M4m:x擙2"J\lZB9#v¿CrP(tR(d#[.ǐ`wx]ñ-"L"=xQfb؃|~x16b~d29J1WH_X+OG"cK$Y E4ft`""{ #<]T/9W4:h    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/cross.png                                                               0000777 0000000 0000000 00000001217 12534142432 016607  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  !IDAT8˕NQɉϠVȑB[(&^M6M|Dްҙv:官J-%Nd LB>w_3:*WrlNC/-좕B'{ u_a46ҽbߡE%D47;ٻƩ;8ˣ}>6[ӕS@*Z	Qk>~͵hB\9uxZvYb	JCيٽ?BYvn&kft$,d9Zap\^Y7 QJF 9=Q4؜Io
SBps I) Fv(@yՎވc\@%%Z2h'@d(<|áaJuM@O⤁LGjd!X8Af	5J i
K->w62ƾWH}:mP]XB0QX=ib_g=!Fttclr    IENDB`                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/film.png                                                                0000777 0000000 0000000 00000001215 12534142432 016403  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥OhAnRK%JzQAP4 KOyd^*DQT4"RKmNZIcgotד?v7aZ`|j8q\yRИ}>9[TbۢY3CG:1AN0]efB 8pA'/h|GWMa:h(⋐R.{!2I{=p?q4Ot\"M'gS
m9?hubָ nlÁ1ҫRb=`g\9niܦ5ZFͦ7~ynHt*s)^d+Gt?`_A`Sw37Sk#`ƿ#Sk؅逅%Q~9NfXY5ͳASdhhJܻPjbKq[myzkd@lhZpwIΚbX(d>_M2hYVhrЂ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/delete.png                                                              0000777 0000000 0000000 00000001313 12534142432 016715  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ]IDAT8˥KSa[nQP2wܦγL[,biaA\Cv_2MlZFjסNMjmkʷ`&.#z<ϓ bVPT3%I{GqRivȅ
tz#E6EddJ`DR2<]N;4Ѿ;m>78ɀQe6LIt殷cq!z|vj/Xi@%1|hl !|!Y#uUNw]˼H3u	t]E>k%IfoRD:0`~|(r
on3oG0!$V*[W0_-+ dW&2ZfMFVJpiF&B>Rg- ~	CmڴERឫ p5ްy+21Kawh` #aZ񽞆TZoLѓ`"(?'ˎJvKކ|:G9[aw82Jwf'ymzsӘTsw__ιIr    IENDB`                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/phone_sound.png                                                         0000777 0000000 0000000 00000001277 12534142432 020005  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  QIDAT8˅SMhQfGS֪<d'/"*Io<(`A<#(x@*^zЃr^Bl04%6m6ufCmx;y3u]l6Z-d2/8(
er'Q!:nL&!p 4oiamb@ ;hW&/c|T_?[(8~Qفp.FCjovH~;GU͋;36bOK$IeYHŀppDpy%ڝj _S8AJ>,hdjM|ξ"1=P ,K6{lw >Js'J%mR2dbǻcc#n,AjTyg/#{ik[NP_
1;eOW*Y4/b"9KgD5j؁9D">]i}~FfjBD"h4 _ͅV_u=,yXs4CgZ>z!6nhtn3?;i(ٕE(}    IENDB`                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/stop.png                                                                0000777 0000000 0000000 00000001274 12534142432 016446  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  NIDAT8˥=OTAݻ	zAPITJ:c?5FH@J~VaȢ| DCv3sgbC-'99'9DO).zF]%V<Z?x(X|yjHS]q,kҴ=wg&W/:k*<@@H8ZIXo.uo XxYRU9T~D٘eyJjCE5a]?vc(@qzOĝӰ@s.槉}HeS<q=?F!,raRȼ)`6Iq #D/	(}`P{ ?~@H{|
Rb lmey`4VR(d±㰵	lA6_}P{%5z{{ Pݫcн AAǤӘzU/kkien_sEcaf
ʐPی|ɉm/  S]姛ϟV
cLn~ Ho}*DJSvI$6њ5%cy:1#
tg    IENDB`                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/application_lightning.png                                               0000777 0000000 0000000 00000001220 12534142432 022016  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  "IDATka~ͱ60[JI-7\lWRS,\p@qG[n.pJ-IjL~`<'\z93v_R"*jfJ]_8xkW/$Da$}mW򖔾,ReĸJș)Q%g?c0Q4(&xQt["Q.ɑSA枰f=i:}}5PUh  DNT@Gn"w!2C(i1\CbJDAXzHumgpK~x-g7BRMTȩ
Q(Rt}X m1u{Gn>Ò:mGPU"'ZIu6WhPkZ@d3/_as/ZCș(QI(OCK+|PF4MR&4T6f_ߥ4$o=ԌM}7pQTwc?mk<}0,p jJ427x(pm߯^d3rੱ;˄z9z|%;986    IENDB`                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/table_go.png                                                            0000777 0000000 0000000 00000001253 12534142432 017232  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  =IDAT8˥KAVj7\))kcQB-e䲕$dmL
RDhg(4̯Ι3-;a8p3 /9PU
UXݶ-VVufIm@\^~T`U o&:
Fcievcm-ew5}%-U S\%u 	^r!334KsV<T`g0{x7:G,TC&6>Aԃku	&R 8Caы&@Dw*p
QލYBBPZp`*y s,.̣olѐ巰NjQ?Ls0&*3&jFE 딩q
ckKTa٬a! B~N198|0I#/(|jH͖QQ|Ϗ5:jH !xuF"T{[>?$7=^ZobnV+ fx1ƿP	+ ~d[dŪ/6z&7OB    IENDB`                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/building_add.png                                                        0000777 0000000 0000000 00000001167 12534142432 020067  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  	IDAT8ˍOHa?[K@Bm*j!TA֥W$AХnXA"9t+"Q傅mstxyxx>} "FFdĎq%"L&#lx5|T*E0$
FV`+XDFdrm 5 ˍcxBSVwj5Dpן	Xm(i*Js ߻j0#`MbMah?|c</kf.MO$֒H$p-9Z{rn,G:]zٖp<؜Dkms?#"xG8&+8q3|rp;um5Z<<aǧ;~;:<  6F[Y)/v.J)
5VX\gj9o&- %"qiH?ۛct`S§yߋ-S3@<M?YOpY     IENDB`                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/contrast_low.png                                                        0000777 0000000 0000000 00000000645 12534142432 020200  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  7IDAT(}Jap%t=a69sFm@BhSm*M
VSN 	b9>/zB	%ptƬ֭Z] N5Px<k%I1foFܱXK>}^)X-{\RP@D0]nE&3zTA'F0::hlqבW#1Fxpj͐ɇؓl$nƦd,
>Q
y4trRD/EON9r&SP~TҒe?IW
    IENDB`                                                                                           ./mvappsvr/docroot/db/icons/time_delete.png                                                         0000777 0000000 0000000 00000001525 12534142432 017740  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥[Hq襗!! ,$AI}>oՖYSt^fټ˘6Ӝoss}͇t9r
G[坌lZޕEKVDI. TmzkZlVPK*<n6I#`,a56Xq@24JУ
QtWŁÌI; 5\uҖU=$
Zm06^Waf=>b=etϓu:xJQ-r*4*㦠"'O\6ct]*nDQx٤D3>.ajYBa.VI q>G8(q,Q}+c,kZsXt#eǳWE
@fX03~tک`"6it@n.jac vMg)jf`T9f0+}TόN^2ğ^HT??_$5+Gc/P7 p8iG$48`.o*
bf28cH/AJtlF	evNdn%㖣>&LfMעQlV? H;V"C?D!K}$-mMCyj+AEj,ǔ@hc@+絕d޲i&{?^s    IENDB`                                                                                                                                                                           ./mvappsvr/docroot/db/icons/page_white_c.png                                                        0000777 0000000 0000000 00000001113 12534142432 020067  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKK`
I]t^RYU8LV7*ځʠ0^tJEQT*RIS&~S/\'+PBaTA9㣓s	<lVB/Cn[PEd2T*H$idYI #H@d2XiupA:{ksƷ,÷V{:P0bg-]z򍰦baE(XKoUUy%HQ,_lܺٿHB<I+a⻻ ktlK	A/	(*j:^|D.%	&!/T6w;s9*H@P5w1?CqȄ00}+<HP[5.Ω0Z+^baU~vS$;ZQ)/
Ż	A(E7fϚ|e$yr_vNk)7F    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/car.png                                                                 0000777 0000000 0000000 00000001142 12534142432 016220  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8œKTq?4	QD2P),R(0!jHZE_`ֵh᪠V	a0a揑TGf{-dʝ\8s9p/Z}Os-!4;}|[4 R#Xh&b[ A<Ĝ^N,r1~٩	|mX]JջdS#lel
Dꨈvm6IMCWQk߳(1lKMU-< c]{<-zB{u|ѧ2|baO3KZy3t.(ZΞRp%%}ov|gyElcjV:d0*3}:ߏ҂Xbrt`(̯}BxVו;Fm7Fm\D*m#"Eӄ̪tttd{zz;|:}ys0L&Pi7	ah<    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/lock_delete.png                                                         0000777 0000000 0000000 00000001457 12534142432 017736  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mSKHTQyiÔ4&yGZQH	"hQPRt2p1-*PIVXN8$L8N:6V~9|wcCCC5i^5b(~R>^B;nCCvCEbT
qt7 5ǖH&rtȲkE"i+XF4ht&*4󩩩9L$%XJ\.b1P`0H$EQst9Ύ5̾:b8-!14]^lG2:,$'}@|`YQ^Zo#:BVNM jL=?* "L~{زϑA1\v ͒uD[c(vB|ꢌݧoCa"/G1Quzḛ.|wBtEB	#IfAie2٪@rSѬxrbM~k &=$um!ȇEby.I0$̭p	Ƴp6Il+&L]uFz'd
ٔi==iya=m%կCFfv_9}!CwJew    IENDB`                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/page_lightning.png                                                      0000777 0000000 0000000 00000001507 12534142432 020437  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATKhU9ߙ[&IzPR5Ġ.Z+fƅFp!" BwݹЅp!`ml%hSm &:|3}'	'Zr;&* pȈf}붷޺xf$.~63ynH!   ڝٟ[,vtf  |!};dd("q bk}^zW  84-Ɗd(%,D8rljrR\4 l&LJ}/}ݨ^N5Xe7˛9cR`##\<赬Tv|KN/~rḲ6R>GJ8a
.[<O(2e0'XJGAsȚP\{_Q*r
h}Wn"/ ('ՑGy,`̡]p$d-w.FݡC|<ȼZr($ x|vfھpj~nV)@wdB7=߽	  E>&07|Y?K6F +Qt  p}Χ[|U{ 	@_W#2Qt" `Πk!9! &p;9Bp  \}ѫK  $aNі$ N?=;" @ ]0?c|5$#    IENDB`                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/lock.png                                                                0000777 0000000 0000000 00000001355 12534142432 016411  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8mRAkA}I54JMhAA[==AySP@Ns"zZF4(&Ivvf}kڵ:13|ߛތa6ciiiD)5'adbYb.7 B
d,z н <Ït:c&j:@ D©+]^XXorynRC]R`L$ARd٪Gj5߬VT*`Lkmz#C4;]Ccy摽R^|*--ؖBHXꘚnUL?`9A~	HӲ}.v_!apǙVdw(k,l E(}{<k^diL\E:N-L/pdؤ _p(Ⱦħ0&`"Dbj jTy,Ă)jYmWRN!Ѩ??r &>Ŕ`CkI[C.=`: 
@yDQnh	>OK(J3vT'Q? l.Ϲ^8G	`s?Zqr͇oE    IENDB`                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/lorry_link.png                                                          0000777 0000000 0000000 00000001407 12534142432 017643  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SKQiR$"hBPƺP°.QA-^B0s_xxs}<=GB`'_v$c{9g`̤0`2j69ߜ;#A0MH2Adx%y>y
'l䲖@I]Dm<񞶐S	W{kqzr-Ip"90IXﳁt;pggpGfi۲A}Yjc$yKYZ0tUN6Шe!ɑHQ"WU]/WuʉKe$Hjb5#سIx[ef:q΁cg0t,
}xjqj`XYYAuoۯ+*p8^,vaSBPdNa1::h4*MMM}t:M91;;!ϗݍH$>r9&䞦&*D"Nhgg%R@ eqllbp&T*UV~ʁ{ڸε5,,,jл07kblz!RRnY䋥GR4urtYŠ=<    IENDB`                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/medal_bronze_1.png                                                      0000777 0000000 0000000 00000001200 12534142432 020327  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}=kTAݻYM6)RXN],R&"bcci+Q B@BLp3XMظÙy38MdcRBcD1[Z>|;ejQF@)"X_Q0{T9[&T	yss$QIޓ7?,8q4niݭC:<wH^>B\@R/,)U0)piVݽt0ʸ*؛;g|h/8bI WtL}}%ڃ$ȵG3^ZG
%h1E~(fg8uƒh*}FI@ }@MUXQ)" yAPF+HQ<Ԏ\샦ŗyPq)nz{ZpzrhH`s@j;˩dMPR'0jhgԾluM+kc} ^?FX3E2I9Ĝ>[m} @ѹz[!ꢚ&;RaSڥW߷GT~r    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/text_dropcaps.png                                                       0000777 0000000 0000000 00000000472 12534142432 020337  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%Ba@D4 v! ,b3xATT_~1D޽{Ara H1v]Q鱇T5BPs0|T 5){@D+X65܃At nݺ xDFFb؂a ?Nex{{'d;23]`kkϟXAqŹ 8ѳ    IENDB`                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/lightbulb_off.png                                                       0000777 0000000 0000000 00000001274 12534142432 020267  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  NIDAT8˕OPƽ?tW{rf좭V.nb˙EZ+Դ2 KKL$OTDDRAD^< ,9;{s %rό-|r}ˉdjvLz\.7j+1cIDHsօ6s 5vFH&7iP*<4Ҏ]v&RXŚHg32)x$ӝy@ݸݹP|kkDwt#<@7=ōC ˎ+,AIA&f ze#1Ыwƍ/*Za2hJf,vHpmwq;	Юrb8^)qE~G'y 5P~QСҠsP)jD3oMI:߳eo?7Za
9/ZE_"4( ^~k5u?n*ME'1'jx*;nPv%T/jesU-V6RF]}=xebE+==XB
%U'eKK%cG$՗A
(>hE    IENDB`                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/script_add.png                                                          0000777 0000000 0000000 00000001453 12534142432 017574  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATˋUe  sј`LGdfi*D0-kaZڢM-j"TB/,HI̽s9;__9_ۃwׯ[Ub	7y|%@4ڸj'7 ^Nvra6W5Ke_\m#\tBPNe4*b)ؽyܦɉ8VHuziYn!+-'pUO}gC	z#QoHo(
bA!(-BZ4sy/W%@Bwf1fE$@.X:ߋ8\4UuzuGw5)R3QI퟾ح֍zU"E"" drj'/82ډDYF@@)Y,B	Ͱ011&ZȄ@L\t_?_0Ew|T('F"EG_{m^{s>	3_?MkGNoĞ[\_̮Hn-%.]RLvu@
;TURZfuʆuP5&U%pt{.>+S]?Svh/ H:eUǻ.wg_4V ظ=S/ծ-,ku1)}ۦW7Z=<v:GSH36FYI3<@ߞyg.S    IENDB`                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/control_end.png                                                         0000777 0000000 0000000 00000001155 12534142432 017765  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥ˊ@Ny &:EЍEQsA[{Y~/(*jp9NH_Uo ?BݮtH(Z$FCj &V+8NpyGPViR|{߃p>B^*/O)V_l@4B\N0 ^a݂jB`f8>~l X*,+yX.`n81 VKf`FD$[,p^!hpb3'I0$P@p;e`cVt4NhB|xǃg$'	EQ]n7(^MdsTU(zNF8Q<QLY_R63cC'Áf||(FL{^ۣJX,FYIv	֌sgnF`0(~4ǣ1q\2z5~Hs0Jxx    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/folder_page.png                                                         0000777 0000000 0000000 00000001260 12534142432 017723  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  BIDATAUe wahMQKًPFiU6ABZ6>d\YDdQBPi#N{={{L  p\ahΣhݻo?]}{	  p??pÃ&2Ʀv|*  8GTJZ|u1-o]  Yeڅif'sgNp1ӵ   D0A¬{yԢ޾~VD@J
+Z։啗9n@MLkZ!jȅ֯-\1eSs~J-0eUlʖ?]:fhBUswv[d@ʤp ZjU睼p	L9z)dk`Z6jB{	hE?\F~0_XŻ{lc^-e@&mesmt)Pԛō˯#H-is9@r| jGaB9ɶAdDO X}   H?i!<))    IENDB`                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/award_star_gold_3.png                                                   0000777 0000000 0000000 00000001415 12534142432 021034  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}KhW;L'Ƥ"F$ZEZ	.QHCHBq]M.TB"+U*I|H*cƎ&ǯPs5_-1'8}@yW<cX/A7{z7	|)B5qo~=Y	.ZU'anvu޿8Ik:5DMgXR1=
{C9֗Fn;EӜQ.e$U)jPP_\j9geHȑ;I	B'?z`$Syr	$ 5@*d [Nዏ`-FfKFMV&Dq?!<"ȁIbUg)%?8r4"9Z!ZMPD9H1?{ꏕ%ͺӛ !͠01Dz,ogh72~["(`0 Bߪ17jŘ$r8SVK"UMjҕyaoq&hQ+190pjFuځ6}h*Wg&Ne^lǼ}~+;'ͥqI\3m(č    IENDB`                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/arrow_rotate_anticlockwise.png                                          0000777 0000000 0000000 00000001140 12534142432 023100  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˵ORq;Es~Vh7Di)%FW;y֋lENɜ&UgWZAd:{>sΑd`˚囒}06HWz*``ܶ+z>"Y 	HE#]|zE^`%bŢvq<ߎ!l;;qOud_W!D0_"-Ĳx-tn$%!?[ؕҲגm8UޜBHÝu{N*Aƍck쿞&rPPz>2 I)3A.uFk4KܖA.qsjw߈`LwЃK$H  wh5G0zg'hcA`1?1mR"@Qɩ`h70ɒpGZupvUO$Mc'qCGHL+@Tk?FEkҼ갺|    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/user_comment.png                                                        0000777 0000000 0000000 00000001347 12534142432 020162  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  yIDAT8}mHSQǧFH/}2J(Af-pjA&bΔԙ0sөs
DMs6gRL:,p;w"{9QOAkS	vF{4+
{Q!"_&,|^$d%\``^K{fm_hp;iF, {4w	GzvKl&3CT	(CbJDy:Gǫk5<;5QD@xw@||'Ѓŕ*%c3F쩞1<Ԅ/_%P#d*F*ucl'EgɕADcYoLZ_NDZ+&p/Nސ^@uq6TD]
u
srs.7yKkB6@Rma 1dw?QT)805-ύ> W	r$0S0[xR$h5UaObJLeS`V Tڇ. ({8ׁ1Q)05$_D6dfZ^vk.U.=lj ވtL%*    IENDB`                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/contrast_high.png                                                       0000777 0000000 0000000 00000000663 12534142432 020316  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  EIDAT(υ+q_w.NA$#%uYt%Õ+ELN(+edGWD/yu#gy'$O1ݫ@f5 B|j{TSPYBpT59UUEjKkI
Xq>0<ғ(VbkC&7$A|bF,8& #0!Z	u0|rdI#xpagɳ=Qa+aAlE*!q#B1<^f/L3;/.m~Q(QP2+?i8eV    IENDB`                                                                             ./mvappsvr/docroot/db/icons/vcard_delete.png                                                        0000777 0000000 0000000 00000001213 12534142432 020073  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥OHTq?onTnDB".N]T'AtСK:D.E"ղ$[Ru]]Eu]] 80|;Ì(rd 2
\<5Uc3#N---&}ْH$Diͪ*Ƅhg_kjA$atr;_-b^܌ ":ص#',Ŭq&.y DU
 \_1+	,'NMMU,oppp@D](ACS \ h{uMkY^>r,O&_#u.ܻϠ~ ^06?<^%)k1nP>$əmKdRwwwWg6BLyN#|`M!aaeYd2BՕeբ=C/pjs%"x<#":JU^_s_ݦ2qqo7֏
JRlg]WMqqw>=K28#^ʤP>I?    IENDB`                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/application_xp_terminal.png                                             0000777 0000000 0000000 00000000773 12534142432 022371  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥S=KAE@sv
ib#RF<
),Ԁ v邠GLvy]\Yfgw͛UL,}|t5;"${FL촑h1;-~?O[e}O/K^JvO75utlI.j{FhǗ'ۤ* m֡ jT`ǩoW*.t:jZ P0th4ZR^wvE;_N6m$IzvCF1M Zt3G| I@tFM-~"{de9}= kZL2#0y4V<j{E %rF]l~լiꆶ    IENDB`     ./mvappsvr/docroot/db/icons/table_relationship.png                                                  0000777 0000000 0000000 00000001227 12534142432 021327  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  )IDAT8˥ORaϟZuYkaU8Yfc14XjDc5I1PHf\"([9+|/}>yߗ @,G#ZA30AZ^>2[FOb8]0 2(VYV
`,|+}mzxHp5g_~UW=yQh7<%	03B>o{/DJEyvQU!VTDdR9}rEi+:܂VmT j,
xo>sL X+*Y~jr?UrFb'x1j\d%mv4c-NSIg"lZR%K``.2o 6Vkԫd|v{$3iϋzB#YU7T-mY)H|{|$4
Uk#+d CܠsI-?-H*O7^`2 @vu>%8jE<t2O,"tD֋bsRR#Cpfߥ)ԟa2X     IENDB`                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/resultset_next.png                                                      0000777 0000000 0000000 00000000613 12534142432 020545  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?%4~nv
xf%e@gמx}Ë	Sl@ނGWK<rmI$M7'mStv	j|awǵRIes˵>_%<\dD`Z~'UKX#꺝([m/ػ@J:t6%y]Dr4JDo]x濨d%$1ED* 뿀    IENDB`                                                                                                                     ./mvappsvr/docroot/db/icons/page_white_medal.png                                                    0000777 0000000 0000000 00000001302 12534142432 020727  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  TIDAT8˅KTQ?8O3J@Z[7]HX	B~mF
A@EBE.*(yj8E{| O	(z {"z7u8H=­fx qG^(6pΑ)B-VVV/ 2~rF8)t^BJ! a233sssKk*1G:HbMR7uR,J)-L&C.cvvv֘Q9x!ω<QyWo6q4RJRd2*
QQ*ZP~sUYO9Oq]P]Xks0	l,gF&EKf^MKɏC)Ռ!D35 ӵk+ظ]Ⱦ	v>>iVRA҃U5u")ym}/.::;fd it8[uwZ[)R	T3@f"sÏOoɏ^myhY0XE\w)]:z	]m|R ΋6N$IZ)>tZ6.0ܨ~XXҡ3    IENDB`                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/clock_pause.png                                                         0000777 0000000 0000000 00000001637 12534142432 017754  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  1IDAT8M]heNf'%MMmbb5B)"QA\
F"RBQ0)MFFӘ&lMfg7;y1|Ck7ni$ @oh.rꄞ0_ M?Ϯ_+@~jikēM̾0pR//8e|:|kiqt\KTC{}XT3@ӰY9gK^ȭGK6۫VQupXа?]7;fI#la`Ímv.Fj<z؞N֚]|?pf<{R|Z[ h||W)x>~S&j⾮&M"`o).&~ ӵ7pUQ8^wER4)b<S;`V	wID)a{-GVnݸFveYg69sws0U*cī,fD	E}LL&CWWlBL&COO"kcu_H$!e%xaRT#JPJ!"5w]gzfi\1ǹ9nlbHRjwEv"Ro\y+UM%DBJ)Ck? Wݬbtzflư1cOk01ڟ)j4p!Nmv~薽fAh!ZkRZkFFF
J0'-zP(w/7I:P    IENDB`                                                                                                 ./mvappsvr/docroot/db/icons/shield.png                                                              0000777 0000000 0000000 00000001276 12534142432 016733  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  PIDAT8˥Kq|g.2	(4L.Yd!${YRK@1		9C%&1ǜ}0l<޷N_7{ڗsDrɄEfɴJҶHbd$2u9InSmZ*<Ad	2cCiSQ#Ooӓԅ 2A|?i=IzΒB- Oa7hlo HHW- aG3< 22{~?LU\eRjUb'@KOq8Š,yy?	T%RP#"#C޲#r o J!% @F-??E8~1.;	:\FRe;qlM|srYj'o Iq !͇zu'Q,o
(\'۸d(u^c-wz}e~sͫ_CrM<.ՉySmG6FO*[[|;3MfMI%{Gf,    IENDB`                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/textfield_key.png                                                       0000777 0000000 0000000 00000000707 12534142432 020321  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  YIDAT8ݓ=KBaAP--5X'&Ajj({ɏ2<e	UDŏp76[õ=\0 Z`Z`!(R#(+*|!b]A|qzAn@̡"	9K"W,
	#nV%0V&"T"GWBU}YGڷ?,?}'CRR<O0O"e! S ,C-n@͖a߶!:d^e=VҴAk&3AΌN8~&])KI>5IJ?4R/xJ{S̓A#;R
    IENDB`                                                         ./mvappsvr/docroot/db/icons/server_edit.png                                                         0000777 0000000 0000000 00000001355 12534142432 017774  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥_HSQǿnQ0]VCQBeKa`È!
zmK=D=ԃ§EeXvHs3b,{3Ks~s,c۹055uX,:i"H瞀D"ᡂ^q8*RLuy188p~H~r!n&1)0UUNn|Ax:1Ify\|'("r\)a9|G'[Yf_t݂8,J0AElk
>ٿ*o'x!$zjEfE1k	sXECeAkm Lߝv}+,&%QT"ϖeQ*8ZjuxA<Uawc_az&='Yf)(Yu*~
]b%>aȅTs B)hЖz!z=v[&FFF籑GI8&laytgE<}fnn2|8E;Hkgde뮃dy߹+j@~t6dUkq25pBztSĮ?Vnw<<S    IENDB`                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/page_save.png                                                           0000777 0000000 0000000 00000001406 12534142432 017410  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATMVe 78bDfai*QT@h妍P;]B@hQTP6Rd%XAT(T0sxM(a6/AV]-_c  gNʞ| #[/?_8s|q  mibGm)%deUץOl]z^té ̦m "PmYܻٶ'׵s3@I
JD(J.][s}÷h& L8)me4ZkR6DE'.X?갳a+k>+4;uʚ/~{=ov:_	 >rIqԎL*2V#nt +"֜L I)IFءjMFnVnaG5^n(#e?y?Wu\%2dzjnl<f܄n-88{!ƝL 5eV]72vnPkWkKD-!
IF5EWWnjG^3YTS1Z/8U(Vtp[)6"=}#Koڶgoxr>-[6әF  :;=2?9oՑUXU/F/ˮ    IENDB`                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/weather_sun.png                                                         0000777 0000000 0000000 00000001157 12534142432 020005  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥KQǽ2~;C.i/Z7%FHH` @.i⤜Օ]T^|ܫlsFAY.s<pN❹Rݷ7fAG$?E8_My5a:6Քl3$S CwBO.1nB	%kvA۠/܀Ctcm̄}-Hd"߅m4C/S\cc#R.ILdTZ 5yh޳rg23OB̵A.P#/Rd%ނsaH0=NO`[O{iCJKv5I?4X~@Ml	w
[ EC%Od^zO#%.1;?   {K$oR1tB@/iZA*MY~:e}rJ6o     IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/control_end_blue.png                                                    0000777 0000000 0000000 00000001341 12534142432 020771  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  sIDAT8˥KoQ|XtN|$_1ac⢩+'Ec QL*	ՠBjE:ihrs;oܜI]2BJZHѝIIʇu}ك!
GƓbflU-`o՛BIP vw> j4;+V7Ǝ!cwӇ^YOہ`v!DI fn	?:P!WmːMw(\'^x(f͜#<)6?^}ߎXKEӕ^IX!˷$T]7{PE/~`P[p&՝TZêeG/+=!c! SnIUtaiPٍ5G2+JE	 px"L&W H&dA$BM:L5
<DkY8ޒ7iN4'+-S|C߆('PJjg=RM$9lfi篇4,jd
u29?'?ӽWiK̸\:3;37ؿ?|oz_5    IENDB`                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/sport_golf.png                                                          0000777 0000000 0000000 00000000770 12534142432 017637  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT(=QMKQ}R?$t_"UDBRnmZ[ˊ"?MPFT RiWeEELws=>0DGcɰzJ{#:J::J8\]c	?Ed`D0ܯPQ&E5|$ܙZ}:fpYK[qwP*xv'+bJE-*iJU*>Ɯo[GIilG(l)ΐX KPw<)TI"ѵʤi3ܤwQ{2U1@qs?WiN(p\Fߩ6_m1ˣ~dWe\.TE@;    IENDB`        ./mvappsvr/docroot/db/icons/chart_pie_link.png                                                      0000777 0000000 0000000 00000001775 12534142432 020442  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8Uk[u \x6MzI]n*&eu1,(PcvcVQqP	V"Uf+]o1xImms~wbyHma'qfB1A[`R&Sľw=vv᥀G[yF\	W+j!2R29?SǓ"=#Dg]~~s[7}XŸ9Ŗߵ_ɚ3▞muyĿс@~	_ڊfzfRqBCol//V[  [v7{Z]Q:ikVLzx@hLWIo,?@(,DHvawFnk^jq+"@dҧQv T.e!CBITib,:yߠ7|N܉XHd38 jъ҂)q]D\:+scz}t>kT!"y<P!(S,߿n7)BpК~¶架ƞj8s,+q dBp} 77.}}CĚ(gE{?e6`i7jvO.cg}UWv=mfZP+`%Na,*H$ǟǶ)kCMuLo)xƋW^ňyaȍfz?D2 |kO,,42{Ћ= K0Muvv"mmm0Mb# Ś
 g{IT =nȜ@u  !,@"`ңohլWU}`e"R)D"hP(
dٵx<./>+~QA04MS +++/Hppsdrae    IENDB`   ./mvappsvr/docroot/db/icons/chart_line_delete.png                                                   0000777 0000000 0000000 00000001243 12534142432 021107  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  5IDAT8c?%,M_|z<l\@_9'KkvrcltƖcGs],	ksN5[;~4y\3NO+9i=5gxמ}a7<{[iƦi
~uDD!4w<osMfuI=7HZgb11G\rqMʏ=+;b2X3?nn i#/[g|>}u~k^P|8+P_	ǪSˏ--9	,``7m[v/[k;]Qt],u
}K]^h;5ٿ|j?rrӅS\K\	r#AJ?)_ ?Pӏ2aRp)+Un
,v2WV m  q BbgDR    IENDB`                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/page_white_paintbrush.png                                               0000777 0000000 0000000 00000001152 12534142432 022027  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍkQ.qEǪuƝ+7Ս.,؅E[(XhUS@P/DH(}aEJؚF8ɴ${.$1sf F?cTՔdb|P(lvVJBdhh4
EQDe8.&Z+Ёt:l6˯D"@,C8T*z.iÊn
(l@
qD"Oъ:xWk3 SF)"t q٨؁:tO])b*02GsPī޳;OME`!;E\p˝(8TAZоfMkD8	˞)x>*vo_֗n,@(q5f]=(;^Ĩg&}>y(r5<Ρ7@׃%{}SxߧIlX@~!/\bf    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/text_replace.png                                                        0000777 0000000 0000000 00000001263 12534142432 020136  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  EIDAT8˕KSas銤I4B,5Hc1q!.~LvjijBjWY4ե޴Kͳ<giaHF9ÄxT*cAY*=[1)olzP@m)=DXRq uM;Ρi\DKV	Odw/;[~Va	gڷa1@Q*Ԃ5M?s,xqeϫ'p,,A9>!'r/9J*5R0FC߹gM80L\y}|<YǶZw|8,S
g4!dr3ٞ+TQ-7cscGyQQ3F氄}(Zw7=kI#n:6)kK&HTT'uK=tUn$K4ݨ.5ݕ`HeH`zwFHt8404S0ݓ[9Ce\V94ؗPwkiuU$Kuk|E7֢XR    IENDB`                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/application_view_columns.png                                            0000777 0000000 0000000 00000000755 12534142432 022561  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥K`}RTD"$KQP#(RLkitcɜalEA }nǸ=. A^awN7R@BO`?~/};xoI Z-uzque n ;jB0vV_?PUz,S,"A qT?̅9uX۶LuRo4XPV!I,ˢP( SZXWW%?zD$uEQHR\.X,Rf02Տ=0u0(ـD/4R)$Ib1 O\wԁǢ؅+4DP-_Т""FC<FvTfa%qP/4C,    IENDB`                   ./mvappsvr/docroot/db/icons/camera_go.png                                                           0000777 0000000 0000000 00000001451 12534142432 017373  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SKOSA=sGjhKKJF+&4] +عRtJC"]Lx(
DlhFATJ_ܶ5ʄIww!af3(JiD$KѰSubdrrrr反c3<ϗ(
0#A@:/JO(AICP";^/,</jqvhrv;A j@v8H$x<D"N$Ir!awwrIRgX(vhQ%Щ>JOZOdL&gʱME~"C28-44΂w?L`X4,|$nqq7'Tbci?DC,TXY2 @9zT=?$p:
U@W8@0jMGCK#ZIce\FiFM5S"s	r+RJ?VRqJ5H%3b
U
MAUJF ЙNlmm=Jldyy0[M
#@Ilޅ7 ,Z zL7&5W0CAr18OۋM*L丯1|/bsٟnSDtkyxmPk    IENDB`                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/webcam_error.png                                                        0000777 0000000 0000000 00000001465 12534142432 020132  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8m]HajֲNk,)E^[UtmW^*"h)݆sb9Lmn}0{~9G<ZO24b/qSFAz)Jl6vZDH$Jr@jBXl)=7}DS(\
fFZR	ߟ[XX0H^D"Dv_ƕ	hZe`2<{{{ަT*SBIWL\1P}ՅL&3E\ʀ?ze$Z8	]$>m7hP(ʂ`4}ԠB "FDD
 L>˲ ¥QYY+Cy:(ՃiuD
 Ew0s*t~2mt: @$7ϐA6FmXUS ʻ@'VVVAҢXF_YW3~2yC{@ ˁ'8BYW&r`71zk| VUa6cng+}!e86p(p; QT$`J"C6M
\e{q&yia|>%w_C 2ıucPڐ+ѿLcGg9$}NeJZr&    IENDB`                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/folder_image.png                                                        0000777 0000000 0000000 00000001245 12534142432 020074  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  7IDAT8};hTA{w	h
T,Di'`%"FB)(,Q#"*AQbB;{,WN1g8g?0N©+A,@gnm4p.E@n+jĐqHt5z_ņ_z޾~Lb)}ױe.
{*10	::j:Y	MlQ[ysfTC>ʱHƵ{nT[sćw'U|QPRuY~)	@024x#CHɝeĬLX7n70Tf`XvW:C4Rjdsl|zcTXzιb,''bL=ig/6$$0f5ˇ1.ݽ?.8K-l%(N0AY=	aԧPsMJ6lm ,`(
0QQ*)@{>ДLrD卿̦盭U(07֕TXK:6!_jIZ܁؇@{aS\RUs2    IENDB`                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/arrow_right.png                                                         0000777 0000000 0000000 00000000535 12534142432 020007  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%B0k_WAPz"e_~ ¿~1d7۷.j3Jؖ?7@&˗zZYj'Me7Xo!o+] r{:g0ARRoܽp{=x
-YXPAku1ba 7l    IENDB`                                                                                                                                                                   ./mvappsvr/docroot/db/icons/page_white.png                                                          0000777 0000000 0000000 00000000446 12534142432 017575  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(u[ E&}O(@_֖9a.і?v9\	bBWҴJ/\Y+DIO)n,T(pbeF8D`ñ_9υN8s]蔊d!4i/&~<EOKEK.:'	1%u;Š/2[yO    IENDB`                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/cut.png                                                                 0000777 0000000 0000000 00000001210 12534142432 016242  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8c?.5Sˮz<I03zYfODb'p"'Lb" 纕ys\t?LL)}O뺭D޸d݉{eSʁ	'o$}mDӲgRyM ʀ-6=Ӈ=6͚@y}E9Dm8#ujr);F!4)̹6^ɘ$}|?qQF9I 5NXuȼS7?s׍_޹ne#^欉[zow'gӷYϴxuXFyӦmxdѩ׍rзwe_<9ҴyԒk/MY9k^N=$VVPE4V?eL%L3V<_pYV-x}pƂkG7X'E7Hʍ<^솉ۗmn 8ם    IENDB`                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/xhtml.png                                                               0000777 0000000 0000000 00000001123 12534142432 016606  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT;kTQ\FHADha!^Rm,
ZlDPHg"ha*;c9sf"b7SIb5#QY1EdNEcA:]6/!J00ك[_)K0E y!HdMuiNMON6(}ʅ+&׸tr7ɃK߈֨;Nu6z7PW}dn8{z>]DMri8o29VqN~*hR!Nᗍa!YAM4_sxd$hxχC2Z",ө+$'GM* hr!7>clu~q%QGf=-H$كA<0V+C`[NӓXŤU؄p0VD)$w兆#eG(ȁJ UIb5#	iM    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/medal_silver_1.png                                                      0000777 0000000 0000000 00000001115 12534142432 020341  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}R=OA3H,l5ZP
**z QbIgGA@)8{9oLfo͛7oWb_%Cp.0qNOAXb
}:vĒ5H|
p/o!OŰ`PL}%bN4t5f4
IA+zCO}HѨnυ]6ͱr("b ȲRJ-g2l60 C<PMyDHuv;'[,L&6<m;M`^wGz/X{
z}<rC\>K($6ONbY<xLj{8WED"u&dYN3B;j.PIUӴ?3T3Ln*Fv+z!If\,b0jfM    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/clock_stop.png                                                          0000777 0000000 0000000 00000001632 12534142432 017617  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ,IDAT8]kHa 2ZX$a%IEE?C?*Q.YYMLKkR+4km^5]qLG|Y4o0:rC >ā6"92qC33~[rKk'E}G6M~1IHM-=(h'[RǍ6VPmzEN^%1FitKz{^fs |E&ߑΌ%]}S]r_9]eӕ3&ܵ5d+! :jPy{!6'Xm7|D#McW0FCK~P͐JŻq(`gvې]xĵ.d'dEռ|)(ݍ/BhX/sd
b
8RG=8	gXž,X/sVz.n˵AoGRH?Ndd	ǀ=`H>_{}a%޹hFT<$Jx9}z3tn1^"B-,~HC0RLD`xd5#%[ic=dڇpPDejt\	i2uؿw*=WH, )J;ӬMd8s&ОѣX$Ӊ7f/qW.f6`^4M\mSed&&*:\RRCnEiGxBo34ћo(PPPE=ĴesԨ:6bHM_5ӡ    IENDB`                                                                                                      ./mvappsvr/docroot/db/icons/sport_raquet.png                                                        0000777 0000000 0000000 00000001317 12534142432 020207  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  aIDAT8c?>|9'Of9rdwܙy梵k
j>{'.>|8~Ϟ=);vߴiS5k-]pj>s_;vhHד'Oz=zӧ6l;wӧ`|i&Ɖ:iǏ7=hn ;hW&=zTu*oݺU԰hH@<|p['f~I^Z*k^|aVӴǲeJa65quٕuXhsՎ/ٻw/(߿g
o۶MVQQVZ6+ەl=gΜv_zuϮ]a7m4ׅXAnB)gf]oMgK&->Viîz]Zz~8z{s⬤ɵ)s:[:u]-@?x6'!+,..cBw1hijٲe߸q	؀V>|LӳOw"%%h(a雘Nf ~]    IENDB`                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/application_side_expand.png                                             0000777 0000000 0000000 00000001105 12534142432 022320  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATKUqU_P$?mh!
)!ZnAKZIH?
z=yWj'N$C#g)sC.\p	a.c剬Tvt B}v
ĕ) Z__y={'?F"/U-V_%27! AV3'ѷRƮ#
$9EQp0$n-MJ͉\$l!h6^zѰ:AJiJnDA.!kS&wֹ;Q($j,,/ps6?}$!!+(Ir0frlqvp4$!;QDBDrQzhCD.%C#Je713s2r;ѳɱD;ءC    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/page_refresh.png                                                        0000777 0000000 0000000 00000001532 12534142432 020110  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATmheu?9|b*VI+R$he!A!AeSB?D-!}r$sJZf6u;<}]~ǽoJu۝X  )Au|;3S   yrѝuN   cL^UYR>^ .>i|ĉ)DSB0Yx3S<{Zp"̒|9D@(Jy+gmsK#  @ N'%¿U,̘N&% x 3	Ѹ1\0	ia5Y~	 /0`6︯~	/mGMQT*n/\ifo" `Y
&%KMWCdJg003\bN-gN{)nMW	GX 𪆙a Xw3Pポl[+9'9ȹOW|T  AS_q:v\O
`/
	#!M|4Yxi-۷ȟ!DbU; {K6-X:E"W+_!T-{!,BW׵݋7dپִhf mwܙ+"h!E}ȓ ``&19ky&w %ńevq    IENDB`                                                                                                                                                                      ./mvappsvr/docroot/db/icons/page_word.png                                                           0000777 0000000 0000000 00000001411 12534142432 017421  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATMUe ιuqIWh"(²l6Ԧ(Eh]dlآEhSZQ34%-glc{9_O^n!HDєk]މ#Co~ 4TGz?+gO[ÑԐ[WgrJ$F4Ψn,kl_~ͯg} CJi""nu2uTɮ=s6mϠE3}ܱ3Ӷ̮sDשmzxֱz/fL9~i0<kš~`גߟ_TRȊ_nWҲZW6gMVƺnGȤhmUvᎏd-z?:c)Km9D uʸ`)eez5ISҢ{7) AHB[Ch:ʃd8*nI"sRdMbJtf\J@	"ѩf؀:iz&Nvq̾Y%*S(Fv~0]_^[n;   @0Zm@fPJSJ     u.M[a;ޭF0կANҩҭ)C)GO{|5 @ j)T'	J    IENDB`                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/photo_add.png                                                           0000777 0000000 0000000 00000001303 12534142432 017413  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  UIDAT8˥KHaL42!dBGAV"PhNpe!Ѣr!	!)-)%uF;'k}p6}?yt
!j8QD's(DE3b	:EEP5P0LT6ʡ0\Ĉm0|f ÷:\(=9^PT
;]<a70($ޮF{8Q,Agk.	$8SMac"*Z %QADxDy_D`nun/>'P5<UCi)Kn'Nkfu\·l%PFNHO8IuHQk<3vyw|<uD|DuR^l5P3ʈά\cycLsGHt`;XQ$(D饾ޅ~<'''Uʫw^
dq ww3	y'P#rLGǙCP+irmᇥ{ՍTղSc,/wzm&l] ag    IENDB`                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/rainbow.png                                                             0000777 0000000 0000000 00000001217 12534142432 017117  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  !IDAT8ˍKSqύA^3!Yb)DQACBFV4uBt!!i 	)04D:dg笶Nss>}uZhIYrpR&-lN_#J廎C/r>'jƏ?H_l.va]Ə4Y #<+*mDṅBJ6h͜ŷ`&_opt.F~
[P|sf/W߹zAghW0>xmӃ+$Z0~Gځ)kלMF{.ww_6782}tg>uadgmJ̇H1#fT=u0kәp]@ߓ8$fxVfΌ`t&%^COH'lV9`cI3y0kәwtkɆKty0kә f=R`T=Ruv;(`U=a,	sfT}0өP_f=09ҶVٮ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/anchor.png                                                              0000777 0000000 0000000 00000001013 12534142432 016722  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥S1k@]
?Cҭ[QN
N
 (v\[ڡd)8

vSPD0KI~W}ݽﻗw/Զmz^4ʹa<H~ 1\.E
n8sf^y{=Fb1D
xH&[ňw,ƾknt:6#R)t]_$IHAZF~mBa[[(!Ebog2rQ,#\#,bsuN,띕Gl6<.JlX	o&IoL/H$RE,PyFրTbbzCllhEaBIaD)MN	S`hXT!v8?-(7/>.    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/cd_eject.png                                                            0000777 0000000 0000000 00000001422 12534142432 017214  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uKQGnJ+/JɂD1"&),]e6rGm,u[{ئsIz>STK-aD
"SŮMBE )?3cVqTRSYfpvF8/I|GwSr"**4J䯁C<Og^(d(\/M%)b<oSDS@ǔ*8%㩢XT[}Yַ`§1);G6jrNH@R)%s|'e
t$WIskJp%INcAj+[fN2&b~R%x^0*J2pz8<GxY/7x<90<	Ŭ+P{<A,V\.~?eE&aaaKM'!=Saff,xH$B4Euqss3WmKkңu0!kexxv;ܾ}lAҤ]a$yy39fY\O&|A~fM`eAltuuNkk+jjje
~7vc&6774!˯|Shii? 
O    IENDB`                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/telephone_error.png                                                     0000777 0000000 0000000 00000001564 12534142432 020657  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATMhu$m$͒IKV\ӺMrUztA) L<г^_!X'+SF-+lM]mmUڴYLAX~d'C"ڞG-Pb|}.bӤ{{}iu2\v-N+si*("Qb_RHw,A`5dJp5xqB_c!2N-DΞ,s+#xtZT),zY[11Zbkǈ`Dpyܽ*uN4y=nG;hdsX&~[
7ظNt'Np#ryUKU9{|:`G)emHpĲ,n2_<8ٹŦ[_v'rn<Q[3=LY
	x#>疳S;?؟`ID,xwoRLՓԧ(<yg#أN}gup,LY1"tY'ēZbFW:y0-MO7i=]#,T;`?2o'^jŦ%}|#xAM79ߑFWQq{xD*=1cش4=(tPDH,P%ڵUB 4+d&WB?=<~来ܽH1/>dkh(	uϞT=7F*"* (6    IENDB`                                                                                                                                            ./mvappsvr/docroot/db/icons/layout.png                                                              0000777 0000000 0000000 00000000740 12534142432 016773  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  rIDAT;kTA'G8SAV+ĔN|V/`g!VڥBF`!(=93wЅE7IFĭ<|s8\.@̰L.cI,?xXwrD~Y=YdLoua_[\0ⷳ'RTQW"NR{A(瀋8"nual'S-}<w_w??,ST8Qv\xab^SkjƔ2Eb0tmbRE$DQEvLuE	1&#?I",{$\e&gُ-\lΫsbv,YF@!	PIO(!    IENDB`                                ./mvappsvr/docroot/db/icons/bullet_pink.png                                                         0000777 0000000 0000000 00000000436 12534142432 017770  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8;
@#:nk`# >
E+PDA!&1Ǹ !"v)~p$_2*P"!1"'n ϙ4yBxERh>ֽqhq,xPROMŨ0B.)8p!Áv9¤3GNΰ6Ƣˬ>OQ&*;    IENDB`                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/script_gear.png                                                         0000777 0000000 0000000 00000001535 12534142432 017763  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATMh  mޜsoRH$(Cݼ(X`W/
Y:"=ĺZ%m[ɶ{~,Kp@X;-BZu,#*V-~,{ȶc_ 6Nj'MRֻ?yb"˚={8 魄0T84ZT>OC<M1Yzh<갲F.^XC]1@{B]6;0Ĉ"H 
(k~^uaq'IQ2n)KQHH)PF׺>`b,I6+ZR%QKl=E&9!$ᣗwk3)!QIf~UvT{{wiɛ34	eYzO8
]8nT}l6ahvvqEQcȺɮz*($t,//P8p@V׿:sL;<
qH{4M߿{GFFF߿˗sׇp{,fs*VKEͦa*}e`}}ܜiq$owgn64/A#TPn+++ܹ%.y~j|	 %׾Gth4^V{?tfaͻW{5\z5Eeӭ[YݼqF:ye;;jORVݳ_8y)Rn}    IENDB`                                                                                                                                                                   ./mvappsvr/docroot/db/icons/lightning_add.png                                                       0000777 0000000 0000000 00000001352 12534142432 020251  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  |IDAT8˥RKSa>¶!QL!yQZE&VPQ#N헔]Xh%5'HDsin͹휭Cv/<>ϗ ò1gȆw`a[<_=p o>ת1_bK//>Gt	~:7X,
\)ê|pBĮT %;"Řgn5Eƈ0t9\d)q	3ļ-O k:Mp*xpie&YራD.BcfҽXZ0g,"Ƽ

9y$;5{yGw?׵Om;7)H@11mN/qa
YIU*m>~]#2R<eS<9x^X"T4Jc!+sؓwz9{$+r5Sxy	ZK3Lnl׷8>=E EUZMA4xܣ/[W {.-kygY NvtK0יrn>ƶh\$ibb*OwAW&vvԌDXA]%0    IENDB`                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/database_lightning.png                                                  0000777 0000000 0000000 00000001407 12534142432 021266  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SMHTQ޼7?36SY"Qj!m]`-2jQBDv(0HƚJ	9o׹Zp/9{R
y;L$QJ)hL;aa=t 
aA{BkkkXXX@6}Ag":;;(V6dT^~{rP	5Y}߄r&L߮*V7QN|{΂L-CcMBFBMp/x<>zF9?Xmx<՞˯OԒKCu )w240t^1w-Jn,}(GtJYqm!4PrUT(.'-=G(ډދAUPgbWP4MU@?*~{\qh_)(WP<x&FMdlp|>=P^Q/FI	ՃJ%O|QhTXHdtzSVTBbzZu-ruV.ɐNW	!'k#=w\.rƿ~穩:SPƯ[Lh-OE    IENDB`                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/layout_sidebar.png                                                      0000777 0000000 0000000 00000000737 12534142432 020472  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  qIDAT8˥KVQ? XX("8d'8:X?"({9o}z-8<s9OMb20<	dY  	%NZ'ȼ}ڧ׾fݱJq--Lei^<9|0: @/ S ۃWW2).@nu]5y@ XzͫyyrV  (
FQe<4Xu	</@dP+(۠rcq΃vc=5n] E)&?aN<UVjZ IL[ؼ?KO?1isnÔHR+aEpڠ3vM/uU    IENDB`                                 ./mvappsvr/docroot/db/icons/application_side_list.png                                               0000777 0000000 0000000 00000000776 12534142432 022031  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATjTaQA[m-EqJ-&"&VĔZb
4ށBA,	(nDVrwnuypK#nq3Ldg+u4:/.p'<9<~	_}y'Gua#}i!Sǿα19/d;ag5fRIH)	PMFhۖhTɐS&XA&Bu9agfJ	ȉBP%#,{%MӰT*!($Bږr NNNڎPD	ksttS9%.\"TIO֘UR"* wB=}wٮ03$am˭ǟ;.͑3̜~+Q    IENDB`  ./mvappsvr/docroot/db/icons/printer_delete.png                                                      0000777 0000000 0000000 00000001430 12534142432 020460  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ]HSaO7AwBAxSuBvwalL#,Db6Jc.B+ ZLqn")K9ﳏ=$8<<ˡ P;QH:fa%@s$J[L?]Cv:N`#D(p@KuO]{﯂J-c0!`t>d:@w/LiBkKp)"b
j\g14?
Z[[+cVmf%̳1=l޶20G@2B6#ȵo)CC,GD".;/K4NQBDp
\r'p`0Z_p4Mz0LNpl6755F0<}}}wz0XVa|zT
JR|>X,F1(A¨;;؋p^?yQP
fGd2r$U@AkOt?(2F#^9RF|ؽ6oLS^^_~L"Dk'd3<,J&=u@#``D =_9@K1)PUlrޑ<z/xѥ~aLA|	    IENDB`                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/weather_cloudy.png                                                      0000777 0000000 0000000 00000001266 12534142432 020500  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  HIDAT8˥kRaYu	;o*覟9ЅY`д"1m``ӳrs]GS-c.W}{_Uxx~sG@bߊ~=/֋lo̱>Yg_?th#
,Kf'P{W*v5Yn*z]HL)&*
·ۋN[h.@cT s`lK@bA8Jatϣ:v^G>|[ޖvlYD/ǰ{5^)%dd?eyY`	
_ƫd2jVHw.K)Y1
A
Eir94Jzd2	1.O0L\Jϑ^g\FTfnX<&iK✷: b+Q$`0x#P(@ӢXbj隒Oqݑ^nT
D{35Fh4zGn7t:y<vkZf9k4z>jjڣRe;Fv2    IENDB`                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/script_key.png                                                          0000777 0000000 0000000 00000001525 12534142432 017634  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT]h  n:4(a"L(zRz9(z^SzXI9#ͻnw~,Kȕ)y6Mݴha	ȱc"˶ݿakG@')ݤh,$e[XvBg' Eʭ\%Q@%41P%A5Vp=&+XJ[}Z=Z=nr8t{UFc<M׬:}:\bDaD$~ܺI1idR0D!R̷9w{b,I&WzJ<ȉpsM[fӛ!@'74tR!qݞWV^1<8
PB%J%r_];u.ӦG_\!'zMP@I
%_5%U[7_uCYg@yUqH",tqN-(~tu?u|^Vi{T-41<IǮ][Ҽ%1U9i _籾rHz+f{y>cC 7ZsӒo3M'w<M/Xh9#׌?Q-/2SU qe͜93;X۞k=lmpkW~;/|?dNTk    IENDB`                                                                                                                                                                           ./mvappsvr/docroot/db/icons/tag_blue_delete.png                                                     0000777 0000000 0000000 00000001275 12534142432 020566  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  OIDAT8˅͋RQo-E{AiٴYDDL	e(*z_WQGSǨ͵9WIy缇ELT
dDx  `-&NOj@TCiARQBcZTѨn8B!xC!UO$JA3tR*eY-cck'2+<!=JVKIv <:
Nsa"<Qj6JRS>ɎC<uͦ@J0ԒF$eTC/@ =r9evԋӒz>yK /^ naSp?tvDIZZ6ëM$Σ|A֍OwuQfԷ'eY$RH sH1^,kZ๢*:].Kp8$:Bm~>:zpv9iw$~	 k{UϢ:YVlx*"+oks}0/+/e!j45L`}&ZLy~=    IENDB`                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/control_eject.png                                                       0000777 0000000 0000000 00000001133 12534142432 020305  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥Sɪ"A|t/QPxQ Qr9xp_[ms*
17ST]YAD?~_zJU;Zl6z.(2'zMtbAZUU[Y^p8t\DJE/mfwm[Z.Wi\"B ^8`G1n/ `0l6Y*aU4fhwj
m͂]t2$*ʀFDB3 j2-#+MSE<4G !+2Erd2%*|>EK1wFw*JDMs"CǂHoNfҗ\.c8x<|..2C`0({3J/I4=A͘;<ĉ?>d2)EQ%PH'>O__71O0    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/icons/group_gear.png                                                          0000777 0000000 0000000 00000001470 12534142432 017611  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍ[Lũ졭nJCٺk91EbL-ȚNxArU
R5Kti*9ۊ6M[s>;# 	|V^5܊;9՜p2~9Կrۥ"	<*YlĒX2bQ
:=ɇ=W7>\ )v[]6d;\&x]5A	gYV$
w}ZİIO/Bx:p9"* fx9뺿6jɅTYnfZي!8;]v<$.-0<j!nGoo/!<3T#h~GaVӰlpݘbBEEf䉻6btBg/cͿW6^/D"!b~~Ay_!=7jFt177JCqʐ\._R)4J5uNQ؃@H}rEO&-wuu٪ YkM
iZG~TjzL<'hh4p8A rrrfqKmeA#
	L x$p+ASSiOm<ҧ8 5E>Eh1|լQzEjj*}-;    IENDB`                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/drive_web.png                                                           0000777 0000000 0000000 00000001256 12534142432 017427  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  @IDAT8˅kpǿY}/u[
hvpP/ē첣<`/ `Z/\uj4K/Ń|?KB؟33IBXYo5?ʬ0_>so={ݣ~(Ս cvy76ug"^[Z3ٳS<Z
{>O@vb2NdMK7wʽZg_ժPT?E:H8j8|@?C껿B0)P<p8dW<YE&DW97[~=dYt.KFPUun#<>P^E]Fxz}y(}Ay7c:Ȇ`LQh˲ vQe%b$3⭱zH$j"IDQ,ˣ$Mo;rfn Ҥ2iLg].:MF0H̪v1!Q̝ U&#u"^*̖#Yc똖^3y,9M    IENDB`                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/icons/user_female.png                                                         0000777 0000000 0000000 00000001227 12534142432 017746  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  )IDAT8˥]hRaA1=SgwHl ((<YA5vD;6Mi2Ӧ5afcb]4-?_/2Ѣ/<</5 jE@J]Z
dBn+^!sX_L+v8/Vtk$QՂQ$qQ
gUKSѮcx\셣_; 0_}XⰜҫ0R	ކ( 5Czv@ߦH%8ꄊ+хٕbu"֦ȼTLI&v[n|¸X?} ڷD ;8o0m@.­#,Cnp q$CTc֒	Evt	g-alY7
^hC! #݇9ڍ3ukɉ~w;mC'R̒MW v/Mn|5\`"`IoG7/?gO͑.d=%o0 
4Lo>A]0*7Å*'    IENDB`                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/medal_silver_delete.png                                                 0000777 0000000 0000000 00000001312 12534142432 021442  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  \IDAT8}SkAf5KxHS.9Pl驈"$bZzŋWD[A-4DɏnfMӖ:x3}{ߛeseݸqb4-av<u^1o3ćmqk0[ם`Hxw?r4  d[6=[QL?ƊiW	AezW7ocީrU&&:۶O`'Y3եC LU*iH$mS^ $	>ϱRb:p@	VUUa	 FqDdHA)DT6nuaXE  1Hi\.[XLN4?Ы;d^,}<8Y}WMGK!VyW_:-I{m<řKP,q3~sؠ15()`lIɝ枢(4`P? (IU-vG=]#&+d2NEcOHU&d @l6$"	q&ܟҮR [,NR֣/4#=    IENDB`                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/folder_database.png                                                     0000777 0000000 0000000 00000001257 12534142432 020561  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  AIDAT8˅ұkA]I&v$bSN Epuwq78TS$-JbmӼy8$m`qp=gTҨ>"rED!5Bx3;;jun||t:z~g w&'')
G8 p{O٤T*!"4j! JqcT*j(T*# bezژ-%k}pNxQ;5q]d_|ŏzx8scI )
ϗ[2ŋS4Z8&I("" , =cUŨ(ݤjR`tdÕ>`(Klkq	9w߂{m1tqAK~?TQita͈xR`~~9 T5HRGH* ]$܉QPQG$*	:o)NPBnc̷Ѱ*)m2x>NdgwU@ʠch nl H^ݿrCf!p&kr    IENDB`                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/film_key.png                                                            0000777 0000000 0000000 00000001503 12534142432 017253  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8u]HSqƟsv6=vf#ԶX[,(40
$>0>n샠D[j2WF6DE:9<555iVB|immu"_˲TeL KUKĮ@ g3 AQ=u&0Jra}):.<@݁'+	T6"|VLqE]aDIcC"OڈJB/љB'
}}!e309r31b2C4dq~0vK`A	g2q24NF;cT]*nȍ5\MMcq,Vz{{"[ȓۗ	3$;pXqLd`Th9<*ϊb]0OsO/yq.nBHx	҃rVȩ7ȵA*X9m	͔BLoS"4&?gL5aj/^aOa[SZ)	sA~L1,&q-Q^[8X)L箨9uݷc|3qBÉ}uW7,<vE NfrL\I\|\.]eƎM
u@y~!pa"4M}{zs v=9(c    IENDB`                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/page_white_gear.png                                                     0000777 0000000 0000000 00000000622 12534142432 020567  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  $IDAT(m=KB[#.54PQC5h8BEI1aEZ=sn#ų^piDA}h !$Uv.XtYĤ'<!OK:u)S¥FhDS㋷+uIwJ<yAwm!,%NrO? -+E.aeR뻐4>x@ӠD9"N49pd<	
)M+$EY5Y;_!oƐ\H    IENDB`                                                                                                              ./mvappsvr/docroot/db/icons/newspaper_delete.png                                                    0000777 0000000 0000000 00000001407 12534142432 021005  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKLQ1m4h\`tƭ.;V.Hĸ(1 2)4%%-R@Z#@B#6"$Pim'A|g9o px<rw8ĄGqfqfYz$)dpessrL&nddnd23(A/^(v13bX,NZ-700 =*td9r<':4MMVU*Չ:Le	,&"C㋢%B__ar *K̞-_3[Q9V9koXukk$(fg0cvvdXo<w	\/`jR)q~fH$»7)Z$ujYXYY6DH$ӣ+(QxQ>K{ 
Ѩ(
u	8	lW5nH>4YC5GZ/JX]]ڒ^ŮӴ/ՏQ5Xfv,CeP~W! d5gY~V`OONww3//t4!DD1my[$OeR٨P(vd`T{Bń    IENDB`                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/shape_align_bottom.png                                                  0000777 0000000 0000000 00000000616 12534142432 021316  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8˭1JD1'b!VbV^[x-v"(E"c47_&_
: \!	?b VJSۯpۀp}yELeX) "DP(5lHUh*"ZLODde"Ӕ OeMj-ja F$Q[u )J5u.AL=cHuxl&/I/"4O_W4\Ja}0y/u#gQ&z    IENDB`                                                                                                                  ./mvappsvr/docroot/db/icons/server_link.png                                                         0000777 0000000 0000000 00000001302 12534142432 017774  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  TIDAT8˥SkRQk^IEݰ@J!z'{h!A{?b85FPМ29}\/8=ϯ9gL4ccc#urrib:
=IP(xiB|=AU!K݆tz%L_{v8WL&vVꪪAT"ҠYWnOυic$g4heEP~su
hU:fW(fu>t@2ް~ꙺ.J_𣽏q'[h8twT*jVZ}$o!=AI\Zsb}=" {.[(S|
tj,_m\.!cwwWX,ob4<:foEf-x6<0B;h4L&z>D%*h4z3HT*%"7j;n+Gt$IM}8;~UכiHFzRIdx<^푘.|I9@D$Gl6 V@E=	"Kמ    IENDB`                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/arrow_undo.png                                                          0000777 0000000 0000000 00000001167 12534142432 017641  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  	IDAT8˥S=hQ=RBIqՂ(E*(HqppRZB'A$CP",N`iJ sCI4Vps^9͔MVqzę@e4
+,RXPܣ'.Ԑ0;? s9:FԤ`)XWgZ$2AMA#kCv%k^џl@%
S
A%T	
ߞ@;CDܑLK/ L6Bα	s(ɐ[7f\ȟ+hTFut@DLD
%#Tt}TtZDLH]3].TJP
-K'o:W(D<@*BxKyX\EMݡ؅X/=4*<zPFiSkh]U!&0fajX	V1ßT0[xX$zQi__9PW*THf>6\O_ٿ눊>    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/color_swatch.png                                                        0000777 0000000 0000000 00000000321 12534142432 020140  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   cIDAT8c?%j`Up5?R(7a?L6Ã  joξj7ig&r1 sK$cB    IENDB`                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/building_error.png                                                      0000777 0000000 0000000 00000001215 12534142432 020462  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍMHQqRa,4uT$!
!\MHDցMi&Bw"`,%\3bVͽ4pTnݮ_.c۾OUd2Z1lVctD"A]]hX,ۜSHrD" 
Joo/J</RP0 0>2`Dk硪=`bQȆJ;M#qqv :cB_;+p]U>*F17Jg8N7) E`DU9ِTC354Tr"'fJ nL4ͅޣ#,OuYp|8BEhx- i.)\EU,~w4Κݙ%K[z-	 T:׊x_ٻ7EBwBz,3oCy ezqRT4Rx_n*Zh'.=_@|cѡGE˴oweJ":q6'    IENDB`                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/drive_user.png                                                          0000777 0000000 0000000 00000001310 12534142432 017617  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  ZIDAT8˥S͋RQ=gDqj$Sn"qցP-snPm[/ȂYDHͱIәQyƆ?Fzb9p8ww~IG4h"`Yv}8^7nK1Hhbv&ejb1J%0
d<CՎA@ZW*L&\."]?GL&m6?rR؍F#z=0
_ET:iC:8LP[OU|>d1Z-Dpj&ů"|y$BhxnܹǪDɒX
ş	ݰf1ԅ<r/"VJN	)N\~F.T^C;j`$e|حa3Ǚ%s#%pR?N@эN]DtfUŃY4%-Bod-W&nBWh8wQHoܴǴ6]Y:r"bqddPjf`q0Dy3&cJ5-du~o5J$-L*|}ca8f+4K    IENDB`                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/camera_delete.png                                                       0000777 0000000 0000000 00000001435 12534142432 020232  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SMOQ=of )2"T4@ʂD&5DQw.%npIW4,XG1$DBRKj ֖Rtėw'{=\b&XTjNuMQ;ˆaQ5Y_>ONNFs@ LXYz׎C[p{fQwvv{{{eۍx<T*L&Vo7f-Ʃs  Lp'JAHP8/Ю0\.~?S@D"t"bss\ΪF]+LhnnF'j'.\,R+`*0XOU*ގ/Tdas6|`-iuۊ_yuZD襙v	Y}l)`,{옦$#(V
PGa7P3$plB
;yGD/">=
hc)*Hl#28>=@ǷXC`Y6g6~2-Rgt_iu}CutL$tx}}1U"6552aPt\gF=gF{/	񳃷6^AUR(Hpٸz=<?[KVPm|K~NΟJ;?o:y3AQ/.O;L    IENDB`                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/icons/calendar_view_month.png                                                 0000777 0000000 0000000 00000001123 12534142432 021462  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥SJA=cQA(d#tfq+QB,l	6F'$BIhw=SU:U15β3 rR
:$д'':zpf~'9XxpKR[m`g	$j"[StXءEH4Lf j	i1O*|0JdɘL?$ r(fg7
7zyb鼢~UP2sE`qP`g	8^zN1Jãݱ4(#i8ܝc[BU	XQ%'f#¥Bhw-q?q'"!+֣}VAW%[Rك2Dγu%םI $|ǧT-Η=ӀZLS^$}qWOD|xH%0G<Ipvy7W?jA'    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/plugin.png                                                              0000777 0000000 0000000 00000001117 12534142432 016753  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥=Hqf~\?,yoX{KC7PcM54EkS$8V*wJB%{s^1㪋g99IDp8ラ%w%I=@]mvbS?|b~?GժilT70p,@ۙܘ^Y3$ՙO<oa x8A܉BW!!JBx8K?Y\z܃S<fRDKCPf' hafWãIn]BW)䎇p!GosAMNX	0eY[raBAmh=ڊI#͘061;Ū3Q@se
pk_;+?R15S_?q9*H3ɞ`!w2/L .\cIeصf|Ĕb`M ow=_m6EX    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/cup_go.png                                                              0000777 0000000 0000000 00000001414 12534142432 016731  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˭}HSQƏ`B!$
,"(Q4RI0RLIrP!ݤLiIcnU1Ǧm~sOEuǁ{}{ /j0==Ov`لɞ	a||\Vk/#
fffYZZ,,,b̙Tn@*-//o;iM]tWqzKiaqd2Fxccl|6buuz8_j5Bdl4gJ HdCǝ)KL
ż 9,Yٞ_Z6\.t:455ubhÍc/QwW[N
CCCRv>lұtXyEB2
Ǒ,TWi%Kc0FNOĳp(cmF.|iB:Xt|c5;HdddIqZ/?(FB硲/ѪAODRXsDQ=^PAnh@By =e$HHeV?2 .ln<܉hV"WHGlSF2}###A:cPC(NbmĖy*>׷F|v.0φ    IENDB`                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/lorry_flatbed.png                                                       0000777 0000000 0000000 00000000702 12534142432 020304  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  TIDAT8c?%a po>ߵa+v.ޒF.u{/>Y$P_|wO@'?u[7q)Ā7\ܴ'&?Wה_^"x_y_#z gW?ͭc\yw]|_%lĀx_V=Gs1?^?k>kZװn_RRR"LL8
f'e &<    IENDB`                                                              ./mvappsvr/docroot/db/icons/book_previous.png                                                       0000777 0000000 0000000 00000001250 12534142432 020341  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  :IDAT8˥SMhSA^bJ5UL*&1URV(QAhz<X

V,BBk=4$6oMMtafgfwVV;9}>nYVȉw>F)
q np.\1	\pEQܜv
x\rk#)=wd8{o)Wd2lwu+6Z	"W &Ei (K
$20^
	-Abr?T012YPiJ]*.dS1("@2dfG"{Pprre߂,~seI3^}~y$
=#NrrlyiS/0U+!\DH@@ ="K{Wfp\nGM]p866SG6mf"(%v5b
6fVVրrcΦݜ3.3f
Ŧ
}^XJ?ʽ'rlm耶Ewd    IENDB`                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/tag_pink.png                                                            0000777 0000000 0000000 00000001103 12534142432 017244  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅[P'!N;S+wo(^:I'uHDV>b:>s';BCEFBD@^GV *`ߟ|>r|"3	fwNX

"S3AZ˲9KE@F&޲ȳzQYd|>L&sٶmzB&|cJd2y،iqg^o|*FhԁJT7#;<*^KCJP(!R,E6);Ƚx}J@ p̒D6)I9ĿğG/Cx<E|b:6?ȗgh2ԧgl[mR)1H26=)7#z./-G,#Ix$f' p8f/m҂ `0&=*wen&p/~>&E    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/feed_disk.png                                                           0000777 0000000 0000000 00000001342 12534142432 017372  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  tIDATKh\U  s{3Ij#GИ4+A] h׺RtťR
e. n?ශh-2DmCbf潹sBJ]   `絲=]hKB B$b@A@@}5R2U
ubbfk-bR7>b9#p/:BI?Wgy-ÚfȐRD*1PFY|<r+XjV#)EḒh.~}{&6O	񔉱Bƙ^`z?g&|->  bj*'~v{k?abgw(#92ئ9[߉"S7/I)(dc%UU;*%3/ӚίaU{?@3J(9k%%8FQ-dHANYIԆF	}Zcn?J>ICD29$w{;P"7%ZGmWZ_256/v:*WC[Vm~5B'ۅsN{iDvo)C'M\6+!/UM5SޭIGRw^
a    IENDB`                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/chart_bar_error.png                                                     0000777 0000000 0000000 00000001237 12534142432 020616  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  1IDAT8˥Ka>0#q1#2%Jv+mNRRŌk(S}vs,>iʤ)NwS13Z8Ų*Q g%D9gNe\-*j ٸ882~.)1+_~)&5Qs:~@	QFh.dl*KB9?!>ÏPTL%g~>R.dRɏ8*/h@aI@`Ps2*YJ7_fuJ4}[I 	?₲&s`e{zw$!Q>#1>zmKt,ٶvB7@q2+WX}>˔6|zq(WZ6\ZWf'鈴hx 79kVQvucLwtۘvW
-k ٷ\LKWLA{ E3ΥHp$X,e,eg41NlAӤ.>?}ș'ǖ-j3QEip    IENDB`                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/dvd_link.png                                                            0000777 0000000 0000000 00000001463 12534142432 017253  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKZaǅ]ןѵW1A-!5為JP\u?1
ŖhJ)E
ZFkU`F.2'4e}_ffs~}yy xkx<cɹWf1;ŐH$NJn5n)tC wwwQVA!hxrJ!xVf`>={Z+SsXJs89.qF>}xS) 曤J6eL& GGG8T/Kȥ8AEN{@n 4B3=S	)cg^/JAgCd{{{d_ `ggd~xxFDSLBj5v}K ̂Cu`bbl,X__Gcc#,CVY0zNZjȐF;5B?Ch4omA,C(BPph4\DtcAt:]HIWj>6VWW6n7,W`20<<\g4<zGhmm%6HR4oiiD"S Wi``NޕVG_b=\.hZSHl3xh644D\.ԪJ"ΡD^VHɻl{{{2τX    IENDB`                                                                                                                                                                                                             ./mvappsvr/docroot/db/icons/cd_burn.png                                                             0000777 0000000 0000000 00000001364 12534142432 017075  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅]HSqG	уKz^Ǟ} z
zM@̏i~979ffi~c= x[+4	N!&$Ьb,lBΚe3'ߡ@9ގ!APS)ϥgٓb*GK6H0?inNrlW!X%6S ?
E<GW+%L<ADr*C	ּ{36e(;eDEK+ҙؔ`OjtKQD;u:GVTBXnGZ666*)w"ŭ"U0$.D2P~$M]4;"4Z=*po5z2!ę; ]O`sbj:G|,5a`@}f`(v00J	U:.:Ds9YMTv0|CJOY7>@{Vaub0"}<]uDZta}Qfvw$-]Ux>7o29uYVٺk!1qFf+Z@Ə
#tBxZkkVbrz	go    IENDB`                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/heart_delete.png                                                        0000777 0000000 0000000 00000001467 12534142432 020112  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥S[KTQqQf
IIb|詠B>TDcB(fBLE4ӘL Ak4M|ƍS)J&Y,RtzméfETAxkLWvw$]MN8*I	Lr۶J$8>S"Ɣ,4L^RD1j))kvpp8Eh|⾑qe;tPEpf0<BTSXa;vW$ـy*ʀF;sr*`%*$ AHRdŗTY%dj$L @e:) 2` ~yfp( TTNS_@׺g,&"n`r
XneSwmbwp6̌ǳ˸O(68yiҩ)0]EFř^lDN!~F&F+kiӛHVj޽6bhMo c>ͳ0PMDŅw$Mo;^U<4LDr,eSG_d,y $Cd,Vߦq,+w
FȚUNx6q~{9]Vp
~?"    IENDB`                                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/book_delete.png                                                         0000777 0000000 0000000 00000001317 12534142432 017733  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  aIDAT8uka?=6B،ɘy+R)ęHINđr@pyK-ڔi'HL$lk{^\uw}}#wm~agdɧi $_^޹ &{pڡ}Cc44<Td0~NPNjd ۾aeoJs˺Z}ZjK1{/ ۚx## 67$$evT-ŘhYR*ff9J޹ uhb@R!$)bٽ'.YTW L@$ђzP*OA4Gg{ :*Q(I% #s5D3#ՈT T$(FP~k>>` %;rmF!	$A3;UHkcv%}<CMsݼs0m! 4(un1J{n!xjaRQ$`3T`JAJKЅhTM5`!8cLYO&<ؾsE:U{Ec<|aa`0RǯOzu:Ys_~o=4`wo얫 AiE$    IENDB`                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/bar_widget_icon.gif                                                     0000777 0000000 0000000 00000000663 12534142432 020562  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89ad K   n1q/q6q2Ɣ n2Ô   !     ,    d K  Ik8ͻ udi߈l۩n,l]<VY@@,*ȤRlŨtJtZ%v˼:ͬ6W{:|7~z8u:|rh  Ǣ͞ѝ֝	ʮæ裫m?Ms^@`@*\Ȑ#J!ŋ%Zȱc`C^)dE'M\HrK(_ʄio̖6K>4 "o莢FoK*$@PJJիX:}+ӯ`ÊKٳhӪ]˶۷pʝ{% ;                                                                             ./mvappsvr/docroot/db/icons/film_error.png                                                          0000777 0000000 0000000 00000001440 12534142432 017614  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8m]HSagq;}j\AWzV.iA`!D#n"ȋDuAHVvYPjnMw>{F*s(J>1zDQ,$iǙNY}>I@$mD5DE{Sd!H*`ol:
W
`qhTƅ,'/11VD%!YA}B4sAI%@$´@En6,݈ hO~B$iV{j"d1FH(Dl6W,e<ϗ^O뀞ՠ6'o9Q=I@taq.2 PCl`E`00{Qwp6_,~LƂ<
EN#>frB񥣎M.aN	I0E}O:m]"!T<`]c`QrPa@U /
#%Lk|&zh7y(a."9_#eoO2Eh* ]Aڮ@Y	¾;rBq?p(*OZ1יέZM4z4rL"9ݲiUVRJ
䨪 8g    IENDB`                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/tag_red.png                                                             0000777 0000000 0000000 00000001120 12534142432 017054  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅nA%|M[ |V,cbǱ+7V@fB q{݌~wuĒC]jjl^VZR\.T*PNh4`^c	'!
u&h4á	pL&se:L(Q,˚s.rH&!
u╰<Z.Xꏬi$=B75H^,%_dD"fB@c3nz 2!^\ P(|3/vqp|>	l6.!VW[%X".v\񜙳R)ŲO}0됋p8yF|j<'?Ǝ?zӶsbj$i%u6bi1/rB!5贉'&(~UܴNPx^Ip8,WUt
ch3串ܛ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/icons/bullet_arrow_down.png                                                   0000777 0000000 0000000 00000000311 12534142432 021200  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   [IDAT(cπ2)_w'Pќ(X-ˊ_P&Kt~[NGVIΔ!	 
QP:    IENDB`                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/icons/cylinder_widget_icon.jpg                                                0000777 0000000 0000000 00000003576 12534142432 021650  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 		



           C                                                   x Z                8       !"123Aaq#BQR$r5CS                                     ? {.B(5F D
ϸ>6Ak)o=>%pn>(2@ 쏇KwCq&?jFaD-lwg^3s(j*gA-o6NS۽b;rp&^GM!V>jX`K.9gVESzl#jjj1_k:4;X[9qùX$5A7,kJ"5k$;y?<<"oA@ᓆ166?.,ldPREwc렒^Hz0uX	Z*Y{de}˗_ A?ȠGA$ܐ)"h;D>COMG,r6mcl|J2罥h])74;rSF 9t~7廬|Ah:gBGտ0:E$\恨$ 3hœQEҢHUa3[/	A`@ GQ?Ƞ5YRNh!(3h2J-E40&9eqݒ@*ĝVBjd~Clm$a	63g1]]1{Av((4A$|P)!0v,M6y৚ gtňTV	*@k/v[yAcRxf.s#&:Zq	PLlFvC4jVK(nwa%k9=&9ڔ	LR7VbpRi5M1Şz	$r1 qf2 @ +v-S09U.f}[G3p=t@̌ua z0	*8ws:Vf5lfn0 I
1\nTaSO$͆P,qkuV\jr^ǇCXHjZK;)sEã$r8y4ls[3Cxk U n0Ϣ_.MTuBIO0L6#iD˴vٻMZ {O
r\9֞ZG'RK]L"BI6~rnn:np@ s|-7Op< OFAdA bYt@ Kkf6'GZW4zasꨨu4[;_@n:ϑ$u,Ep"v1hAfU1{9Yjf Ymi  IxR;g+J1񿉨+*fi-$e ; AؘOt&c7ٜ8:GOnM $ @ +SAIZ̀(<aU0RIO+j7f8:8]Zۅv5oepu<%;7ֳ)\}[T @                                                                                                                                   ./mvappsvr/docroot/db/icons/cog_error.png                                                           0000777 0000000 0000000 00000001545 12534142432 017443  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uSOQf{[EvM7n96´.ZDtZ֜@:R@@!|BUr/O-y~;G @p\XXx<S333SdT^fuuUTHB"hL悑B$<;gnwd("."D ۑG"HRB =͖`||MMMQUYJB`'K@>`vv2,[WWȳr4"011Ntwwӊ@lpꍍ%qݞ^__bJrKҲu=8>iVohh
˥$HAVQdeTȀU32ZW"pcnssHImmm<A\QQ0C"XǺAWUUqokkk+̓t:{W^pg_Za(;iH///B$mҐ zWݠq.WʈeU++Ly`0(kkk<2ULl
Nm	bR|1ru^#DШU{F;|?3tXy>l{Ja=9[WUF`a8m;g>!¹nIA4Y=lӆcy$cW_T9Ra	NVIotS_    IENDB`                                                                                                                                                           ./mvappsvr/docroot/db/icons/drink_empty.png                                                         0000777 0000000 0000000 00000000661 12534142432 020005  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  CIDAT(}KJB3p#܊p	w"bOL̲Ybb=.%+|ef>va 78A 9KqT3if<Ƕ$\RBGG[4rQAӤL.(QE0 tx<PF@Iϥ2=:{|a! IӣEnN@yCk<j5j*O$j}gcg -sN mYeSVs+%ضE{dHP'J?64 #<	+*gT1dYL)rey|Uo֣me%bw    IENDB`                                                                               ./mvappsvr/docroot/db/icons/application_double.png                                                  0000777 0000000 0000000 00000001025 12534142432 021310  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˝SA{w	Ac%NX[^rAp*eHbmܛMB?wsN;G釣G,U:8谉:YR>aS&׏oo̈́ 9 l|:~7~_<z<{]TFӗ% 1xsapu2jfJs @U?yYEx90쎹cYȩM\(-5"P%"!G<t<w:qep
$
Ae bj^|!IJf47"%I:d$I^}Yߪ6#E	1?Sx,sl=`:\'w'-͏tCf+aВEU-Q    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/layout_header.png                                                       0000777 0000000 0000000 00000000764 12534142432 020311  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥;kUQ}r"U$!ZA-`ZKVi"lDFфg-s'\_d`ߞf&0Xy6\΁ITUJ 	;8}yd\;͇?m n^˄$"
"IO; <d~5onl1,@Ι_V o ӕv_!%dX_v'>^Z8 T5}e.{fgZW n?6{1844`0rW\<Ot Td <J'W0g -`G3gwOپt\*`aV7uz?TG)g     IENDB`            ./mvappsvr/docroot/db/icons/date_link.png                                                           0000777 0000000 0000000 00000001374 12534142432 017414  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8uSMOa~XVED bhE"IKDOxc<&^4M$&$CTTngN2y}gyff:XI>a[淡ʡP(H$Ro8q)zveOOml	۔c8;Co}]<n$dQXl6L4a$fr1[693cfYF\NbtfgљlF.\0c	l<(I*~Y&}iH%@	׃JN+tH{<踊t:}I(qxA.,<J~{{"ZV|0(XG@*G~}}<uWWWX\\@dp8n)a3 d2qqr%T
f\25ht~{J_67'\.u ZkDQTկ>$Cv~~e{{[TI`Hkkkbш"*vH(5Ɉ>88JFL
... nha~vONE闗(*,,,`nnm#%bZM7}
5&IdVKT44>u+    IENDB`                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/icons/timeline_marker.png                                                     0000777 0000000 0000000 00000000507 12534142432 020626  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDATAna+`Lm؀7Mciyӳ p{yq+ }783ֈx.G<,sG>FVTPo XQEE,*
F
֮AT`TP
V 1ر] 
ֈQAԠ*XQAT0
30~	 `+   ?p    IENDB`                                                                                                                                                                                         ./mvappsvr/docroot/db/icons/shape_align_center.png                                                  0000777 0000000 0000000 00000000600 12534142432 021263  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˵1N@E!Prn|n9 cPӂDav Jj[H_bPf
 Vċ'[L @~'*Oǀ^.$'FYмs뗑[tpVUsIf.w0'ZXKFXGt*F.O{ 0_M0'܉w@	#'[B!9Pj(W]V.w|A](.o<f|IX,    IENDB`                                                                                                                                ./mvappsvr/docroot/db/icons/page_white_cup.png                                                      0000777 0000000 0000000 00000001177 12534142432 020446  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍkSQk.Wq:΍݋\!X%Ym7A.B"Đ@@9y!SyϱyMb|ws{{7 l.lrݚ`k:rEyh4wu6cH$3h4XRՠje	jM4E$A8F0d 4"&	hNGb2|l6zjKU*q\..}-_?o3
>,i6Vgшp>G.çOm5~}Byt:3f9'L\ەinh4eIRÁrZ.C"q*b(Db/N~
/J铠nl6|6q@RŽL&
ڥHB$z=*>'5RyWb1hZ,	Bp:Z!NOBKXVgd	h >=Yp*%h2#kM\:{F`k    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/bug_link.png                                                            0000777 0000000 0000000 00000001517 12534142432 017253  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8}ORaC4IM!8NiEUH6(L'
1t:dՒ8MIn,?4ׇ6t+aˢeg뾟k羞 s!吴g+sY=1gϟ!;=+Mdjcs[_!ϓuM.䆹bD 9;MFWLplph#e
rȴddĎ[ _ȅQy7	rx:qޞsHPNTTΈx,Ve3;	0Q9B~T#*'2ne_̕蓣t$jc`ib"pFox?Gl	꽅("+*<z	fk
ŘĚ7 d'}Y:%OpqXQjFJI3u	`܌JPu	֮v\.4[q1i@s{stfٶz}CbUudvzޮ@?677wEPtHҞҥjAc(D*VljD+ub4wb,VjAj]:$#WOGZ ɼiH]	!P(Ek$J"1ddv}l~8NLg1 qJ f:L7v1{*{>='*on    IENDB`                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/bullet_red.png                                                          0000777 0000000 0000000 00000000437 12534142432 017602  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8-P GYZD
\Ƣb,Eaf]ĬFe0/L0©xA%҂M(m@]	p/>&*00x,Q!w0Ta P|Fn^1Bưy<рir
#[Xj[M U,O|ދds)    IENDB`                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/joystick.png                                                            0000777 0000000 0000000 00000001057 12534142432 017317  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˕S=hP4At࠴d)t nصEpή"B77[D`Hт/} Al=8{w14qhb1nj^X,?4C0@ x< ]׃N睧.'drh4l6h4
9a	8lz=A\.M ˲1A`Mwt:m|>E
oNDq(IjO뀃MQ4(~PooٱrAv2w10ĝd+.&RR	JFrZ`0@Ps+WPj50R"H.CU<#%r6#ɜ Xr>zrdn'e.]T*XUD>ę9Hh@	u8 pG_kP|6 qs^ۢ9tKTD`O?c     IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/page_white_flash.png                                                    0000777 0000000 0000000 00000001106 12534142432 020744  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKQƵE
]74mZ Q A|E)d?F(RhtӢ.Dj2;;{f6s;|$.z& !˲jh'qt:Ȭ:cEAZEP|>L&AN4a6oamPP,%0Pl6{i>8vn*	r
T*If
paμ_[13\.Nr= am'HBPJ==9z/bBk&AmO	#a͔782 6QesX @]Ȁ |ės4 }"UDOށ~y -BW{iJlx&U@?oqQ6>ǘ]MnMGsSv/    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/icons/monitor_edit.png                                                        0000777 0000000 0000000 00000001401 12534142432 020145  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍKHQ:jLAo"*\DEh6AV$TXDAQm[uRﶘ>ý{9{Zk88R
RʴwO۶ӾQxR215ZCjh@k^5ytt ȅ.4Ʋ )寐P*#''4'/I[cK[;v4i` ضJBOJF'M ƒLњض3!8$/ۇp4tgeA6>}ivR$,e;dTg=cKa{	V,g"RCë \)`m1f{"wV19eA/PdƋ/*`Zm#h?$ښZ}^Z-C)#66FgP0Aj~/vd[Ouv>eMe]$/a$T#oԽO.njbiw"9YJXXsPhn@kk9_SEt_'9bP`{c檹(7w?B0)8ܼ}	'8;Exv&Rʷmmmu4n(H뭫@̗-=ko`1    IENDB`                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/icons/calculator_delete.png                                                   0000777 0000000 0000000 00000001264 12534142432 021133  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  FIDAT8ˍkaPGtA'A@GQ,O:haI[lu`-wnj~!jA)"C]5&WPVU7\{?{/n^ D"QG @0jd2}L7f67 NHr).) $S@ULjpu/0cxIH9a &96%/р^b|>l6t:T*d2D"x<sCyZB RIA(>n;z6^ZbmmRrTL޹m0[,0
AբV4|>T*M`6[FZ&MC@JrD@Q@$`p8^OAQfofCoޣcDNn3C'vDS 0ݕD@xHӛrsARiN.0
(XXE|8+<|T]~NZw#%>ݘ1<Ηyeub&#}    IENDB`                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/icons/clock_add.png                                                           0000777 0000000 0000000 00000001635 12534142432 017365  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  /IDAT8]mHSQ/}(?7J"^,+deThAjfii6s9ueΥf\ٖnK->ϹϽT0b0'Br3~!L	"4D}]Zx9Uj3s'I0[0p3I^oÎ
7*¹Zn78q o]hQ,{?r5ϔvG2Qbꁜ,e2JrWjؠt|hCO̚)E4mPjm{rEy56IaLk&˯}jFN
}>~$p]u'tV\T8"^tgqde88yp#|)VZ	Jg"y3>29ȣohdX"e^@7q* ZK5m)/ܱxb2Ǉ나5whtOƋOt2-$MxcǣRW.QDN4bolǞ+))08PY	HUXK1KCRLh {ue7S*ZFh[lW0~p~1iPfNGY{UG :J~GGם{Wbx"Y$-A\LLjٌj-;*.OXy"4)/݁ZNV+T{%"t7e顈/;sq]sXXsS	a2^}2x|m[4]ޝ    IENDB`                                                                                                   ./mvappsvr/docroot/db/icons/text_linespacing.png                                                    0000777 0000000 0000000 00000000553 12534142432 021020  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT8c?%2. 5uxDe@f|DKJJ?!!ddl^ o+hn@zzCBBwss׀5(sA܇(2 j==<<;::odd_[[99XH2/DOG7eߣU修55%%%ӚNh@f O1}    IENDB`                                                                                                                                                     ./mvappsvr/docroot/db/icons/emoticon_surprised.png                                                  0000777 0000000 0000000 00000001345 12534142432 021375  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  wIDAT8˥kQ%5MbT,JbOZ.EQuqMBA]DEP)]J+ࢶКiL{px8kTԤTP=#*\Ny|p;MMh-ė^MD8;~QsL}u*|}A]L+Af>!*>;~J7vԬVe:}+%A_/]B\(%Ocg+"l8
ơ&@o>A<b+k|֡x  \/R/ᕨX[UPP[-$݂x4Ua-`qEɦKi	lT'|LԆuN&\% UD<Sր*/+%YK2^JKkPi`$؈?xdWDNS-Q-1;9N6YgvP5e,3"|HH}K%"XN
<mL UeӮ:4ms"5bK|muuL<M,&JoSz7rrʳ7MxmLN" qmǆr~Ec >]7)p{z\eYFex勵_;s(Q    IENDB`                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/drive_cd_empty.png                                                      0000777 0000000 0000000 00000000525 12534142432 020454  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(ϵJQN01$`K"A eIagDJޙ;rNs~s	jnbhƽ刦l2;,xk.t9	u-OyAq3籒8=!RХ)Ns'y'a$DpCѲLlD,`!#Q֭H@P$rx3g"qvsk4f-vw79XO['    IENDB`                                                                                                                                                                           ./mvappsvr/docroot/db/icons/arrow_divide.png                                                        0000777 0000000 0000000 00000001245 12534142432 020135  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  7IDAT8˥MHqƟuU}_)
#<)H.iQJ:`y5
(:54CJ62wFfDp8a3<b-2JzU"l78e+ng㍽@Lq6o$B1U9U%Si$Tճ*ZTFLBB@Uf#р
uv*}[+`kA+#=U>r.) 8UȝвZCHJP	cBB,A avJ\]_ @ HY0sP^Z~uwP*@%fR)3 X2RCͤTTb
oރQXPALMOB9:q  |sf$ٺ|[R
>	m9>X{.ڱ.7ob1x&kx>2}K.b`V  }fU(4/`CC#Jo]    IENDB`                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/brick.png                                                               0000777 0000000 0000000 00000000704 12534142432 016550  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  VIDAT?HT ݝ^ٟ
juɥpOhi/8ԩ!p*0Ў;}E ,tnM2|13 "byK$i^NFDЙ;4eZ|Uj|jf^$ig)kYbIuKWPcJ'U>4MKB݆eSJtO9iԄʆn#2u`  *_
R4+*BuϘMYU׷oAaLG۽kE|"2w9m[yGwSB3{er~㫹<{@   %@    IENDB`                                                            ./mvappsvr/docroot/db/icons/book_addresses.png                                                      0000777 0000000 0000000 00000001402 12534142432 020441  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATou {-(UJZ+Qa\LY&L՘hq56&l)PJ]zys=17???MJ 93ۛvt:zFaM@ ;!"@N<̙3) M.l?~#ўt%PN@A`;'RwiEV3;;3)!E	kAQePz9R=^e;"{@	a4zc?{֭h=}MYVg|p2"{?=ӱ7p{;G;X_Q0eLm|Ep6n]Q/[|߻&&gTɀZ䜍F#+@JR'"ى2"UUoq1f<[Z)'^_Shtxz᥷]O?"Hqf[jOٙ?=QF*+)U~~I2' M)!"D4ih}m(h Qd[!%ܜfk"# (BD9%&^}qn{>+ˈ.<ޕ @p힇w8    IENDB`                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/icons/chart_line_error.png                                                    0000777 0000000 0000000 00000001345 12534142432 021001  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  wIDAT8˥R]Ha>ۧlꦔW@YL#]]xlhQ"EEA%YD0(͔Ek/<?缏JE-(q!.&9ܨٷǈnRG۹+F$bm^<LZ	ާc.3vv!	2|Ϙң"{RA˝e}c[TYBfott->MVqNqJQ\Y&mwǓfKbuCzHS-(uu=
ɯP-ڛh(̧,יͺ5aӌ^s6sv
EGcJƟ˛ܚ63z6;UXT@S^R(uļ)Q$.]<mJ|0p Pcrh%sVזmЮY8} ÁxFyTu͈Fu<sڔˡ+T9[<0 Xf44?$[*6P9'>OL+}A%+1êt#M2TwJH0?fx-݋&i|AGT!R~jޕ-    IENDB`                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/vcard.png                                                               0000777 0000000 0000000 00000001025 12534142432 016552  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8S=OP=#0]0HE'dH''6G$1`~%B	Z(m}0xnywhQ̂md RIܢhuEQbr|,퇱uPP8VW
Z'>N_̄1 |H!J-%G<erF._TBM{e{ㄾݔED/[ڒ6g7(YfL&; Vq^] }r᪵ZMD"ancP/=b&c.Kc^|>7DSP=SAjHTθ^+׸v`gsEfLvnw|ZE0:AP,Dt @@(3\N6}R)&h]9w̿?6\0Z    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/webcam.png                                                              0000777 0000000 0000000 00000001330 12534142432 016710  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  jIDAT8˝SKkZa=W$/Ы4hНI	-؝/]7dY]w*!ҍhXQPRĈՙ^|9gΜo4pVJ
Mx<Q`4eY:K	Ith	noo(JarQ͓K-//ęLFp8
\.WX^  !Z-:3Ixш^RT*9N=O~`0[tU<C(݃۾jl<'0 ?cL&V	^N[P@.X>t
dPZ5d"`"ȴmQDׅ{Oiz]ԕJ%#@@9"O$Рwp`SA,
,y0B8)o<On\tF}`cLɂ*%lx<睝lnnbkk^DvMo)|>R+͞hZj52lVTcP,F I߶Ȳvt:\\\*lDOK 	"6.wy6Df'FDsNq.3    IENDB`                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/icons/weather_clouds.png                                                      0000777 0000000 0000000 00000001105 12534142432 020462  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8͓MP3-]oq=kwu%~-b@b1t:5'0PJi腗py{Nn8 ߈g EQ$ItyKR
O&-(:,36̄,H$n	ez[ץ5I2!	|:AN&$kC	Hp*mjRf/ FXƬ6duЁ@8ڳǩTeP;%bvnzvX,34,c4R݀ɁmX.rdp5`| FL. $4MDD0	@l6gǟ/ zl6s)  }t`7UZ459r/t:}
BX,&1iH9T? WbIj    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/icons/chart_line_add.png                                                      0000777 0000000 0000000 00000001217 12534142432 020376  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  !IDAT8c?%,M_|z<l\@_9'KkvrcltƖcGs],	ksN5[;~4y\3NO+9i=5gxמ}a7<{[iƦi
~uDD!4w<osMfuI=7HZgb11G\rqMʏ=+;b2X3?nn i#/[g|>}u~k^ky_xKޔOi}#[>yVՠ"пUٗ[j[rXoڔb5N߿;xl׺@>п.zmV?/Oڤ г't<_Njۮ6]
2?Cl22G{w& \@L*l	߻+l3a@l* O gC8 	;_yBj    IENDB`                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/icons/map_go.png                                                              0000777 0000000 0000000 00000001512 12534142432 016716  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDATMTu  >vwfg]kBD:$DRadh!nw"%uJ(%214H,+mq֭f͛7oG_{3s3*    o~wJ# A@<eEYJVV2a=[9`t~iy՚tkZG굪
@mL7ħ(='DHP @rdӼ|Ys7hd[Zƪ(N0DPN#zufF^(FHcä/B(AݞjO<wVe7>;77[3^U)*$C(v&rn%9q]'*gNߗG(Ҿ J 4S3y:gvj,4;ma6nsRjE}˩+~f[m_/{~5!͆~cuYztyYȋ\YctV,_ݥ?k6[$d,,jTdbdt=;7?(U|d|iіSI"?M7]\+P#e 5)Ͻ"-RI{v]w=/>>Z<qz3$!*/{6N-O}|j   L븴,=?dBKVnO	f<oN\    IENDB`                                                                                                                                                                                      ./mvappsvr/docroot/db/icons/date_go.png                                                             0000777 0000000 0000000 00000001361 12534142432 017060  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˅kHQ7/SC!ql䅒r}JDT$a^VEE^`\0#!-g)`-BׅdQ}<{r X,nP*nPDrKSSS#QT%}#A1ܗ}LLmhLYlĒ͆@ w$IOzZE6Kv;Sk ﳳ1cZkXk.ӣ[5w|ìH 2b|,!'"#A\_Pm->UV"@`kX%ٕ:7r!T,C4eDH$ǃn8\಺?cY1777
:V^{+NN 5lC:GIh{tp]w
S%:@b/js-<`NhriqH.v~J%<0Ӂۦv4G}Vܘ7Xq(S 1pV%Z]h^1jEۄRJlF8F!>W
pɝ|W\Q++c$/ ,VkJU`'	J6r/Utg+L.SCŽ(#    IENDB`                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/javascripts/                                                                  0000777 0000000 0000000 00000000000 13005675162 016167  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/javascripts/initAdminTemplate.js                                              0000755 0000000 0000000 00000062472 13005675162 022147  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   
//jQuery.noConflict();


//GLOBALS VARS

WIDGET_STATE = null;
DELETE_CONFIRM = false;
DELETE_CALLBACK = null;
SAVE_NEW = false;

/**
 * Used in Users admin tab
 */
function deleteConfirm(type) {
	$("#delete-confirm").dialog('option', 'title', 'Delete ' + type)
			    .dialog('open');
}

function editUser(userId, username, dashboard, role, opt_logo)
{
    $("#new-userid").val(userId);
    $("#username").val(username);
    
    SAVE_NEW = false;
    // Set role
    $("select#user-role option[value='" + role + "']").attr("selected", "selected");
    // Reset dashboard
    $("#default-dashboard-container select option:first").attr("selected", "selected");
   
    // Set default dashboard if found
    $("#default-dashboard-container select option[value=" + dashboard + "]").attr("selected", "selected");
    
    // Set the optional logo
    $("#opt_logo_path").val(opt_logo || "");
    
    $("#new-user").dialog('option', 'title', 'Edit User')
	          .dialog("open");

}

function deleteUser(userid) {
	if (confirm('Do you want to delete ' + userid + '?')) {
		$("#new-userid").remove();
		$("#new-user-form").append("<input type='hidden' name='save_userid' value='" + userid + "' />");
		$("#new-user-form").append("<input type='hidden' name='delete_user' value='Delete User' />")
                           .submit();
	}
}
/**
 * End functions used in user's tab
 */
 

/************************************************************************************
 * Functions used in Widgets tab
 ***********************************************************************************/ 
function populateInputs(name, desc, sub, users) {
    $("#save_widgetid").val(name);
    $("#widget_desc").val(desc);
    $("#widget_sub").val(sub);
    $("#widget_users").val(users);
}

function editWidget(name, desc, sub, users, target) {
   // Need to hide the new widget field and show just the name
    //$("#widget_id").hide().before("<span>" + name + "</span>");
    $("#new_widget_id").remove();
    $("#widget_id").val(name);
    $("#widget_id").hide().before('<input id="new_widget_id" type="text" value="'+name+'" name="new_widget_name" />');
    populateInputs(name, desc, sub, users);
    // MVDB.SUBS
    if (!target) {
	target = "_blank";
    } 
    $("#edit-sub-link").attr({
	'target' : target, 
	'href'   : sub
    });

    $("#new-widget").dialog('option', 'title', 'Edit Widget').dialog('open');
}

function copyWidget(name, desc, sub, users) {
    $("#widget_action").val("copy_widget");
    $("#widget_id").val(name);
    populateInputs(name, desc, sub, users);
    $(".add-widget:first").trigger('click');
    $("#new-widget").dialog("option", "title", "Copy Widget");
}

function closeWidget() {
    $(".ui-dialog .ui-dialog-buttonpane .ui-state-default:last").children("img").remove();
    $("#new-widget").dialog('close');
    $("#widget-messages").text("");
    $("#new-widget-form :text").val('').removeClass("required-field");
    $("#save_widgetid").val("");
    $("#widget_id").siblings("span").remove();
    $("#widget_action").val("save_widget");
    WIDGET_STATE = null;
}

function deleteWidget(name, desc, sub, users) {
  
    if (confirm('Do you want to delete ' + name + '?')) {
        $("#new-widget-form").append("<input type='hidden' value='Delete Widget' name='delete_widget' />");
        $("#widget_id").remove();
        populateInputs(name, desc, sub, users);
        $("#save_widget").remove(); 
        $("#new-widget-form").submit();
    }
}

function saveWidget() {
     
     var valid = true;
     var widgetNames = $('.widget-name');
     var widgets = new Array();
     oldName = $('#widget_id').val();
     newName = $('#new_widget_id').val();
     for(i=0;i<widgetNames.length;i++){
         widgets[i] = widgetNames[i].innerHTML;
     }
     for(i = 0; i <widgets.length; i++){
             if(widgets[i] == newName && widgets[i] !=oldName){
                valid = false
                $("#widget-messages").text("A widget with that name already exists");
                $('#new_widget_id').addClass("required-field");
             }
          }
     if ( WIDGET_STATE == 'new' && (!($("#widget_id").val()) || !($("#widget_sub").val()))) {
          $("#widget-messages").text("Please fill in all the fields!");
          var inputs = new Array('widget_id', 'widget_sub');
          for (var i in inputs) {
              var el = inputs[i];
              if (!$('#' + el).val()) {
                  $('#' + el).addClass("required-field");
              }
          }
	  valid = false; 
     } else {
         if (WIDGET_STATE == 'new') {
             $("#new-widget-form").append("<input type='hidden' name='newwidget' value='1' />");
         }
     }
     return valid;
}

/**
 * Initialization for Widgets and Dashboard tab
 */
jQuery().ready(function(){ 
	if (window.location.search.match(/newwidget=1/)) {
		window.location.search = '?action=widgets';
 	}
  var action = (jQuery.url.param('action')) ? jQuery.url.param('action') : 'users';


  $("#delete-confirm").dialog({
	'buttons': {
	    'Cancel': function() {
		$(this).dialog('close');
		DELETE_CONFIRM = false;
	     },
	    'Delete' : function() {
		DELETE_CONFIRM = true;
		$(this).dialog('close');
		deleteItem();
	     }
	}

   });
  
   /**
    * Massive switch statement to initialize events based on the action parameter
    */ 
  switch (action) {
	  
	  case 'widgets':
	  case 'save_widget':
	  case 'copy_widget': 
	  /**
	   * Initialize widgets tab events
	   */

        jQuery("#new-widget").dialog({
            autoOpen: false,
            height: 280,
            width: 310,
            zIndex: 1000,
            modal: true,
            buttons: {
                'Cancel': function() {
                        closeWidget();
                },
                'Save': function() {
                        if (saveWidget()) {
                            $("#new-widget-form").submit();
                        }
                },
                'Save & Edit Sub': function() {
                        // Open subroutine
                        if (saveWidget()) {
                            var sub = $("#widget_sub").val();
                            var target =  $("#edit-sub-link").attr('target');
                            if (WIDGET_STATE == 'new' || !target) {
                                target = '_blank';
                            }
                            if (sub) {
				   $("#new-widget-form").submit();
                                  window.open("/dbc/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=" + sub, target);
                            }
                            WIDGET_STATE = null;
                        }
                }
            }
        });

        $("#new-widget").parent().find(".ui-dialog-titlebar-close .ui-icon").click(function() {
                closeWidget();
        });

   	
		switch(action) {
		    case 'widgets':
		    case 'copy_widget':
		    case 'save_widget':
			$("#main a[href=/dbc/MVDB.ADMIN?action=addwidget]").addClass("add-widget");
	
			/**
			 * Add widget event
			 */
			$(".add-widget").click(function() {
			    $("#new-widget").dialog('option', 'title', 'Save Widget').dialog('open');
			    
			    $(":input[name=action]").val("save_widget");
			    $("#widget_id").show().siblings("span").remove();
			    WIDGET_STATE = 'new';
			    return false;
			});
	
		    break;
		}
	/* End functions and initialization used in Widgets tab */		
	break;
   case 'edit':
	/**
	 * Initialize file/item tab section
	 */	
	$("#main table td a[href=/dbc/MVPKG.MAIN?action=addfile]").addClass('add-file');
	$("#main .add-file").click(function(){
		SAVE_NEW = true;
		$("#new-file").dialog("open");
		return false;
	});	
	jQuery("#new-file").dialog({
	autoOpen: false,
	height: 360,
	zIndex: 1000,
	width: 324,
	modal: true,
	buttons: {
		'Cancel': function() {
			$("#new-file-form :text").val('');
			$("#new-file").dialog('close');
			$("#new-file-form input.required-field").removeClass("required-field");
		},
		'Save': function() {
			var valid = true;
			$("#new-file-form input.required-field").removeClass("required-field");
			$("#new-file-messages").text("");
			var inputList = "#file-name";	
			$(inputList).each(function(e) {
				if (!$(this).val()) {
					$(this).addClass("required-field");
					valid = false;
				}
			});
			if (!valid) {
				$("#new-file-messages").append("Please fill in all required fields.");
			}
			if (valid) {
				$("#new-file-form").submit();
			}
		}
	}
	});
	$("#new-file").prev(".ui-dialog-titlebar").children(".ui-dialog-titlebar-close").click(function(){
	$("#new-file").siblings(".ui-dialog-buttonpane").children("button:first").click();
	});	
         //end add file/time section
     break;
   case 'users':
   case 'save_user':
	/**
	 * Initialize users tab section
	 */	
		$("#main table td a[href=/dbc/MVDB.ADMIN?action=adduser]").addClass('add-user');
	        $("#main .add-user").click(function(){
			SAVE_NEW = true;
			$("#new-user").dialog("open");
			return false;
		});	
	    jQuery("#new-user").dialog({
	        autoOpen: false,
	        height: 360,
	        zIndex: 1000,
	    	width: 324,
	        modal: true,
	     	buttons: {
	            'Cancel': function() {
			        $("#new-user-form :text").val('');
					$("#default-dashboard-container select option:first").attr("selected","selected");
					$("#new-user").dialog('close');
					$("#new-user-form input.required-field").removeClass("required-field");
				},
				'Save': function() {
					var valid = true;
					$("#new-user-form input.required-field").removeClass("required-field");
					$("#new-user-messages").text("");
			
					var inputList = "#new-userid, #username";	
			
					if (SAVE_NEW) {
					    inputList += ",#user-password, #confirm-password";
					}
			
					$(inputList).each(function(e) {
						if (!$(this).val()) {
						    $(this).addClass("required-field");
						    valid = false;
						}
					});
					if (!valid) {
					    $("#new-user-messages").append("Please fill in all required fields.");
					}
			
					if ($("#user-password").val() != $("#confirm-password").val()) {
					    valid = false;
					    $("#user-password,  #confirm-password").addClass("required-field");
					    $("#new-user-messages").append("Your password confirmation did not match your password.");
					}
			
					if (valid) {
					    if (SAVE_NEW) {
					    $("#new-user-form").append("<input type='hidden' value='Save' name='save_user'/>" + 
								       "<input type='hidden' value='1' name='newuser' />" + 
								       "<input type='hidden' value='1' name='save_userid' />");
					    } else {
						$("#new-user-form").append("<input type='hidden' value='" + $("#new-userid").val() +"' name='save_userid' />");
					    }
			
					    $("#new-user-form").submit();
					}
				}
	    	}
		});

		if (typeof dashboardList != 'undefined') {
		    var defaultDb = "<select name='default_dashboard'><option value=''>--Select Dashboard--</option>";
		    for (var i in dashboardList) {
		        var db = dashboardList[i];
		        defaultDb += ('<option value="' + db + '">' + db + '</option>');
		    }
		    defaultDb += "</select>";
		    $("#default-dashboard-container").html(defaultDb);
        }

		$("#new-user").prev(".ui-dialog-titlebar").children(".ui-dialog-titlebar-close").click(function(){
			$("#new-user").siblings(".ui-dialog-buttonpane").children("button:first").click();
		});	
		
	/** End User's tab section **/
	break;
	
   case 'dashboards':
	break;

   case 'adddb':
   case 'editdb':


	/***************************************************************************************
	 * Initialize dashboard add and edit tab
	 ***************************************************************************************/
    
	 /** Initialize dashboard properties panel **/
        $("#change-layout-message").dialog({
            autoOpen: false,
            height: 200,
            width: 240,
            option: 'hide',
            buttons: {
                'Cancel': function() {
                        $(this).dialog('close');
                },
                'Change': function() {
                        var layout = $("#db_layout").attr("selected_layout");
                        if (layout) {
                            var layoutCols = new Array();
                            layoutCols[1] = '.one-column';
                            layoutCols[2] = '.two-column';
                            layoutCols[3] = '.three-column';
                            var selected = layoutCols[layout];
                            $("#layout-body div.active .area div").appendTo("#layout-body " + selected + " .area:first");
                            $("#layout-body div.active").removeClass("active");
                            $("#layout-body " + layoutCols[layout]).addClass("active");
                            $(".db-layout li.active").removeClass("active");
                            $(".db-layout li img[alt=" + layout + "]").parent().addClass("active");
			    $("#db_layout").val(layout);
                        }
                        $(this).dialog('close');
                }
            }
        });

        $(".ui-accordion-header").click(function(){
                var content = $(this).next();
                if (content.css("display") == 'none') {
                    content.css("display", "block");
                } else {
                    content.css("display", "none");
                }

                    $(this).children(".ui-icon").toggleClass("ui-icon-triangle-1-s");
                    $(this).children(".ui-icon").toggleClass("ui-icon-triangle-1-e");

        });

        $("#mainWrapper").css({"margin": "0px 10px", "width": "100%"});
        $("#main").css("width", "750px");
		$("#widget-toolbox").appendTo("#mainWrapper"); 
	
		/** Event to handle when user's changes layout columns for dashboard **/
        $(".db-layout li").click(function() {
            var layout = $(this).children("img:first").attr("alt");

            // If there are widgets in layout body, then we need to confirm layout switch
            if ($("#layout-body .area:has(div.ui-draggable)").length > 0) {
                // Store temp state of selected layout so we can grab it elsewhere
                $("#db_layout").attr("selected_layout", layout);
                $("#change-layout-message").dialog('open');
            } else {
               // If there are no widgets in layout body, then just switch layouts
               $(".db-layout li.active").removeClass("active");
               $(this).addClass("active");
               if (layout != $("#db_layout").val()) {
                   var layoutCols = new Array();
                   layoutCols[1] = '.one-column';
                   layoutCols[2] = '.two-column';
                   layoutCols[3] = '.three-column';

                   $("#layout-body").children("div.active").removeClass("active");
                   $("#layout-body " + layoutCols[layout]).addClass("active");
               }
               $("#db_layout").val(layout);

            }
        });

	// Initialize default layout when loading a dashboard
	if (typeof defaultLayout != 'undefined') {
	    $("ul.db-layout .active").removeClass('active');
	    $("ul.db-layout li img[alt=" + defaultLayout + "]").parent().addClass('active');
	    $("#db_layout").val(defaultLayout);
	    if (defaultLayout == 2) {
		$("#layout-body").children(".active").removeClass("active");
		$("#layout-body").children(".two-column").addClass('active');
	    } else if(defaultLayout == 3) {
                $("#layout-body").children(".active").removeClass("active");
                $("#layout-body").children(".three-column").addClass('active');
	    }
	    $("#layout-body").children("div:not(.active)").find(".area div").remove();
	}

	// Not sure if needed...
    $.ui.plugin.add("draggable", "widget", {
		start: function(event, ui) {
		// var inst = $(this).data('draggable'), o = inst.options;
		// inst.helperProportions.width = 190;
		}
    });

    /** 
     * Adding a droppable placeholder to be used when user reorders widgets around.  
     * This div will show where the widget will be dropped. 
     */
    $("#dashboard-content").append("<div id='droppable-pos' class='layout-widget'>&nbsp;</div>");
    $("#droppable-pos").hide();

   // Drag initialization function
	
   // Initialize variables
	lastInterstectedElement = null;
    lastY    = 0;
    move     = null;	
    lastArea = false;   
    // Callback function when dragging a widget,
    // Check for intersection and adds the 
	dragCallBack = function (el, event, ui)	
	{
	    if (!lastArea) {
			lastArea = $(el).parent('.area');
	    } 
	    
	    move = (event.pageY > lastY) ? 'down' : 'up';	
        var inst = $(el).data('draggable'), o = inst.options;	  
        var intersect = false; 
        
	    $("#dashboard-content .layout-widget:not(.ui-draggable-dragging, #droppable-pos)").each(function(e) {					
			var widget = {
				'offset' : {
				    'left' : $(this).offset().left,
				    'top'  : $(this).offset().top
				},
				'proportions' : {
				    'height' : $(this).height(),
				    'width'  : $(this).width()
				}
			};
			if ($.ui.intersect(inst, widget, 'touch') && lastY != 0) {
		
				if (move == 'down') {
				    $("#droppable-pos").insertAfter(this).show();		    
				} else {
				    $("#droppable-pos").insertBefore(this).show();
				}
			    lastIntersectedElement = this;
			    intersect = true;
			}				
	    });	
        
	    if (intersect) {
            // Fixes situation when drag intersection is occuring in the wrong drop location
		    if ( !($("#droppable-pos").parent().hasClass("light-up")) ) {
                $("#droppable-pos").appendTo(".light-up");
            }
	    }	
        
	    lastY = event.pageY; 
	}		     

	stopCallBack = function(el, event, ui) {

	    // Check to see when it moves from one area to another.
	    $(el).show();
        $("#droppable-pos").appendTo("#mainWrapper").hide();

	}
        
    /**
     * Initialize events for widgets in dashboard areas i.e. the columns
     */
    $("#dashboard-content .area").children("div").each(function() {
		$(this).addClass('layout-widget');
		$(this).children('span').addClass("widget-id").attr("name", $(this).attr("name"));
	
		$(this).append("<a class='delete-widget' href='delete-widget'>close</a>");
		$(this).children('a').click(function(){
	            $(this).parent().remove();
	            return false;
	    });
	    
	    // Initialize variables
	    var lastInterstectedElement = null;
		var lastY    = 0;
	    var move     = null;	
		var lastArea = false;
		
		// Initialize draggable for #dashboard-content .area widgets
		var drag = $(this).draggable({
	        scope: 'widgets',
	        zIndex: 10001,
	        helper: 'clone',
//			widget: true,
	        opacity: 0.8,
	        cursor: 'move',
            revert: 'invalid',
            snap: true,
	        snapMode : 'inner',
	        
			start: function(event, ui) {
			    var inst = $(this).data('draggable'), o = inst.options;
			    $(inst.helper).css("width", 190);	
			    inst._cacheHelperProportions();
			    $(this).hide();
			},
			
			drag: function(event, ui) {
				dragCallBack(this, event, ui); 
			},
			stop: function(event, ui) {
				stopCallBack(this, event, ui);
                
			}			
        }); // End draggable initialization
        
    });     // End initialization of dashboard widgets

    // function to initialize draggable elements
    function initDraggables(elements) {
        $(elements).draggable({
		    scope       : 'widgets',            
		    zIndex	    : 10000,            
		    helper      : 'clone',
            
		    opacity     : 0.8,                        
		    cursor      : 'move',
            revert      : 'invalid',                        
		    snap        : true,
		    snapMode    : 'inner',

		    containment : 'document',

		    'start'	      : function(event, ui) {
		    // Show the layout droppables if needed
		        if ($("#dashboard-properties").css("display") != "none") {
			    	$("#dashboard-properties-header").trigger("click");
	        	}
		        if ($("#dashboard-content").css("display") == "none") {
			    	$("#dashboard-content").prev("h3").trigger("click");
		        }
		    },
			drag: function(event, ui) {
				dragCallBack(this, event, ui); 
			},
			stop: function(event, ui) {
				stopCallBack(this, event, ui);
                
			}			
        });
    }


   // Initialize save and delete functionality
   $("#save-dashboard").click(function(){
		var widgets = "";
		var area = 1;
		$("#layout-header, #layout-body .active .area, #layout-footer").each(function(){
		    // Order is area,order,widget name
	            var num = $(this).children(".layout-widget").length;
		    if ($(this).attr("id") == 'layout-footer') {
			area = 5;
		    }
	            if (num > 0) {
	 	            var current = $(this).children(".layout-widget:first");
    			    var name = current.attr("name") ?  current.attr("name") :  current.children("span").attr('name');
	                widgets += (area + ",1," + name.replace(/,/,'') + "\r");
	
	                for (var i = 2; i <= num; i++) {
	                    current = $(current).next(".layout-widget");
		        	    var name = current.attr("name") ?  current.attr("name") :  current.children("span").attr('name');
	                    widgets += (area + "," + i + "," + name.replace(/,/,'') + "\r");
	                }
	            }
		    area++;
	
		});
		
		var valid = true;
		var errorText = "Please fill in all the required fields.";
		$("#edit_dbid, #db_layout, #db_id").each(function() {
			if (!$(this).val()) {
			    if ($("#dashboard-properties").css('display') == 'none') {
				$("#dashboard-properties-header").click();
			    }
			    valid = false;
			    $(this).addClass("required-field");
			}
		});
		old_dbid = $('#old_dbid').val();
		new_dbid = $('#db_id').val();
		for(i=0;i<dashboard_ids.length;i++){
			if(dashboard_ids[i] == new_dbid){
				if(dashboard_ids[i] != old_dbid){
					$('#db_id').addClass("required-field");
					errorText = "The Dashboard id is already being used by another dashboard";
					valid=false;
				}
			}
		}
		
		if (valid) {
			$("#new-dashboard-form").append("<input type='hidden' name='widgets' value='" + widgets + "' />")
					.submit();
		} else {
		   $("#dashboard-messages").text(errorText);
		}	
   }); 
   // End save and delete functionality

    
    if ($("#edit_dbid").length != 0) {
		$("#delete-dashboard").remove();	
    }

    $("#delete-dashboard").click(function(){
		if (confirm("Do you want to delete this dashboard?")) {
                    window.location = "/dbc/MVDB.ADMIN?action=save_db&delete_db=1&save_dbid=" + $("#db_id").val();

		}
	
    });

    // Initialize wigdgets in right-sidebar
    initDraggables("#widget-icons div");
    
    var layoutHeight = null;

    $("#dashboard-content .area").droppable({
        tolerance  : 'intersect',
        scope      : 'widgets',
        hoverClass : 'light-up',
        activeClass : 'active-drag',
        drop        : function(event, ui) {

	        // Handle case where widget is already in dashboard area
		    if ($(ui.draggable).hasClass("layout-widget")) 
		    {

                if ($("#droppable-pos").css("display") != "none") {

                  $(ui.draggable).insertBefore("#droppable-pos").show();
                    
                } else {
                
    				$(ui.draggable).appendTo(this).show();                    
                }

		   	    if (typeof lastIntersectedElement != 'undefined' && (lastIntersectedElement) && ($("#droppable-pos").css("display") != "none")) {		 	      
		 	      $("#droppable-pos").appendTo("#dashboard-content").hide();
	    		}				
		    } 		    
		    else  		    
		    {
			    // These droppables are from widget toolbox
			    var clone = $(ui.draggable).clone();
			    var widget = clone.children(".widget-id");
			   
		        clone.addClass("layout-widget")
		             .append('<a href="delete-widget" class="delete-widget">close</a>');
			    
			    clone.children('.delete-widget').click(function(){
					$(this).parent().remove();
					return false;
			    });
			    
		   	    if (typeof lastIntersectedElement != 'undefined' && (lastIntersectedElement) && ($("#droppable-pos").css("display") != "none")) {
		 	      $(clone).insertAfter("#droppable-pos").show();
		 	      $("#droppable-pos").appendTo("#dashboard-content").hide();
	    		} else {
		    		$(this).append(clone);
	    		}	
	    		lastIntersectedElement = null;
	    		

		        //$(this).append(clone);
			    clone.draggable({
			        scope: 'widgets',
			        zIndex: 10002,
                    revert: 'invalid',
			        helper: 'clone',
					widget: true,
			        opacity: 0.8,
			        cursor: 'move',
			        snapMode : 'inner',
					start: function(event, ui) {
			            var inst = $(this).data('draggable'), o = inst.options;
			            $(inst.helper).css("width", 190);
			            inst._cacheHelperProportions();
					},
					drag: function(event, ui) {
						dragCallBack(this, event, ui); 
					},
			        out  : function (event, ui) {
				        $("#droppable-pos").appendTo("#dashboard-content").hide();
			        },					
					stop: function(event, ui) {
						stopCallBack(this, event, ui);
					}							
			    });
		    }


        },
        out  : function (event, ui) {
	        $("#droppable-pos").appendTo("#dashboard-content").hide();
        },
        over : function(event, ui) {
	        var id = $(this).attr("id");
            
            $("#droppable-pos").appendTo(this).show();
        	$(this).addClass('light-up');
        	
        }
        
    });
    	
    break;
 }
 /**
  * End switch statement for admin template actions
  */ 

});

                                                                                                                                                                                                      ./mvappsvr/docroot/db/javascripts/builder.js                                                        0000777 0000000 0000000 00000011036 12534142432 020152  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   // script.aculo.us builder.js v1.7.0, Fri Jan 19 19:16:36 CET 2007

// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

var Builder = {
  NODEMAP: {
    AREA: 'map',
    CAPTION: 'table',
    COL: 'table',
    COLGROUP: 'table',
    LEGEND: 'fieldset',
    OPTGROUP: 'select',
    OPTION: 'select',
    PARAM: 'object',
    TBODY: 'table',
    TD: 'table',
    TFOOT: 'table',
    TH: 'table',
    THEAD: 'table',
    TR: 'table'
  },
  // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
  //       due to a Firefox bug
  node: function(elementName) {
    elementName = elementName.toUpperCase();
    
    // try innerHTML approach
    var parentTag = this.NODEMAP[elementName] || 'div';
    var parentElement = document.createElement(parentTag);
    try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
      parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
    } catch(e) {}
    var element = parentElement.firstChild || null;
      
    // see if browser added wrapping tags
    if(element && (element.tagName.toUpperCase() != elementName))
      element = element.getElementsByTagName(elementName)[0];
    
    // fallback to createElement approach
    if(!element) element = document.createElement(elementName);
    
    // abort if nothing could be created
    if(!element) return;

    // attributes (or text)
    if(arguments[1])
      if(this._isStringOrNumber(arguments[1]) ||
        (arguments[1] instanceof Array)) {
          this._children(element, arguments[1]);
        } else {
          var attrs = this._attributes(arguments[1]);
          if(attrs.length) {
            try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
              parentElement.innerHTML = "<" +elementName + " " +
                attrs + "></" + elementName + ">";
            } catch(e) {}
            element = parentElement.firstChild || null;
            // workaround firefox 1.0.X bug
            if(!element) {
              element = document.createElement(elementName);
              for(attr in arguments[1]) 
                element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
            }
            if(element.tagName.toUpperCase() != elementName)
              element = parentElement.getElementsByTagName(elementName)[0];
            }
        } 

    // text, or array of children
    if(arguments[2])
      this._children(element, arguments[2]);

     return element;
  },
  _text: function(text) {
     return document.createTextNode(text);
  },

  ATTR_MAP: {
    'className': 'class',
    'htmlFor': 'for'
  },

  _attributes: function(attributes) {
    var attrs = [];
    for(attribute in attributes)
      attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
          '="' + attributes[attribute].toString().escapeHTML() + '"');
    return attrs.join(" ");
  },
  _children: function(element, children) {
    if(typeof children=='object') { // array can hold nodes and text
      children.flatten().each( function(e) {
        if(typeof e=='object')
          element.appendChild(e)
        else
          if(Builder._isStringOrNumber(e))
            element.appendChild(Builder._text(e));
      });
    } else
      if(Builder._isStringOrNumber(children)) 
         element.appendChild(Builder._text(children));
  },
  _isStringOrNumber: function(param) {
    return(typeof param=='string' || typeof param=='number');
  },
  build: function(html) {
    var element = this.node('div');
    $(element).update(html.strip());
    return element.down();
  },
  dump: function(scope) { 
    if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope 
  
    var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
      "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
      "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
      "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
      "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
      "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
  
    tags.each( function(tag){ 
      scope[tag] = function() { 
        return Builder.node.apply(Builder, [tag].concat($A(arguments)));  
      } 
    });
  }
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/javascripts/edit_area_full.js                                                 0000777 0000000 0000000 00000337643 12534142432 021502  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    function EAL(){var t=this;t.version="0.8.1.1";date=new Date();t.start_time=date.getTime();t.win="loading";t.error=false;t.baseURL="";t.template="";t.lang={};t.load_syntax={};t.syntax={};t.loadedFiles=[];t.waiting_loading={};t.scripts_to_load=[];t.sub_scripts_to_load=[];t.resize=[];t.hidden={};t.default_settings={debug:false,smooth_selection:true,font_size:"10",font_family:"monospace",start_highlight:false,toolbar:"search,go_to_line,fullscreen,|,undo,redo,|,select_font,|,change_smooth_selection,highlight,reset_highlight,word_wrap,|,help",begin_toolbar:"",end_toolbar:"",is_multi_files:false,allow_resize:"both",show_line_colors:false,min_width:400,min_height:125,replace_tab_by_spaces:false,allow_toggle:true,language:"en",syntax:"",syntax_selection_allow:"basic,brainfuck,c,coldfusion,cpp,css,html,java,js,pas,perl,php,python,ruby,robotstxt,sql,tsql,vb,xml",display:"onload",max_undo:30,browsers:"known",plugins:"",gecko_spellcheck:false,fullscreen:false,is_editable:true,cursor_position:"begin",word_wrap:false,autocompletion:false,load_callback:"",save_callback:"",change_callback:"",submit_callback:"",EA_init_callback:"",EA_delete_callback:"",EA_load_callback:"",EA_unload_callback:"",EA_toggle_on_callback:"",EA_toggle_off_callback:"",EA_file_switch_on_callback:"",EA_file_switch_off_callback:"",EA_file_close_callback:""};t.advanced_buttons=[ ['new_document','newdocument.gif','new_document',false],['search','search.gif','show_search',false],['go_to_line','go_to_line.gif','go_to_line',false],['undo','undo.gif','undo',true],['redo','redo.gif','redo',true],['change_smooth_selection','smooth_selection.gif','change_smooth_selection_mode',true],['reset_highlight','reset_highlight.gif','resync_highlight',true],['highlight','highlight.gif','change_highlight',true],['help','help.gif','show_help',false],['save','save.gif','save',false],['load','load.gif','load',false],['fullscreen','fullscreen.gif','toggle_full_screen',false],['word_wrap','word_wrap.gif','toggle_word_wrap',true],['autocompletion','autocompletion.gif','toggle_autocompletion',true] ];t.set_browser_infos(t);if(t.isIE>=6||t.isGecko||(t.isWebKit&&!t.isSafari<3)||t.isOpera>=9||t.isCamino)t.isValidBrowser=true;
else t.isValidBrowser=false;t.set_base_url();for(var i=0;i<t.scripts_to_load.length;i++){setTimeout("eAL.load_script('"+t.baseURL+t.scripts_to_load[i]+".js');",1);t.waiting_loading[t.scripts_to_load[i]+".js"]=false;}t.add_event(window,"load",EAL.prototype.window_loaded);};EAL.prototype={has_error:function(){this.error=true;for(var i in EAL.prototype){EAL.prototype[i]=function(){};}},set_browser_infos:function(o){ua=navigator.userAgent;o.isWebKit=/WebKit/.test(ua);o.isGecko=!o.isWebKit&&/Gecko/.test(ua);o.isMac=/Mac/.test(ua);o.isIE=(navigator.appName=="Microsoft Internet Explorer");if(o.isIE){o.isIE=ua.replace(/^.*?MSIE\s+([0-9\.]+).*$/,"$1");if(o.isIE<6)o.has_error();}if(o.isOpera=(ua.indexOf('Opera')!=-1)){o.isOpera=ua.replace(/^.*?Opera.*?([0-9\.]+).*$/i,"$1");if(o.isOpera<9)o.has_error();o.isIE=false;}if(o.isFirefox=(ua.indexOf('Firefox')!=-1))o.isFirefox=ua.replace(/^.*?Firefox.*?([0-9\.]+).*$/i,"$1");if(ua.indexOf('Iceweasel')!=-1)o.isFirefox=ua.replace(/^.*?Iceweasel.*?([0-9\.]+).*$/i,"$1");if(ua.indexOf('GranParadiso')!=-1)o.isFirefox=ua.replace(/^.*?GranParadiso.*?([0-9\.]+).*$/i,"$1");if(ua.indexOf('BonEcho')!=-1)o.isFirefox=ua.replace(/^.*?BonEcho.*?([0-9\.]+).*$/i,"$1");if(ua.indexOf('SeaMonkey')!=-1)o.isFirefox=(ua.replace(/^.*?SeaMonkey.*?([0-9\.]+).*$/i,"$1"))+1;if(o.isCamino=(ua.indexOf('Camino')!=-1))o.isCamino=ua.replace(/^.*?Camino.*?([0-9\.]+).*$/i,"$1");if(o.isSafari=(ua.indexOf('Safari')!=-1))o.isSafari=ua.replace(/^.*?Version\/([0-9]+\.[0-9]+).*$/i,"$1");if(o.isChrome=(ua.indexOf('Chrome')!=-1)){o.isChrome=ua.replace(/^.*?Chrome.*?([0-9\.]+).*$/i,"$1");o.isSafari=false;}},window_loaded:function(){eAL.win="loaded";if(document.forms){for(var i=0;i<document.forms.length;i++){var form=document.forms[i];form.edit_area_replaced_submit=null;try{form.edit_area_replaced_submit=form.onsubmit;form.onsubmit="";}catch(e){}eAL.add_event(form,"submit",EAL.prototype.submit);eAL.add_event(form,"reset",EAL.prototype.reset);}}eAL.add_event(window,"unload",function(){for(var i in eAs){eAL.delete_instance(i);}});},init_ie_textarea:function(id){var a=document.getElementById(id);try{if(a&&typeof(a.focused)=="undefined"){a.focus();a.focused=true;a.selectionStart=a.selectionEnd=0;get_IE_selection(a);eAL.add_event(a,"focus",IE_textarea_focus);eAL.add_event(a,"blur",IE_textarea_blur);}}catch(ex){}},init:function(settings){var t=this,s=settings,i;if(!s["id"])t.has_error();if(t.error)return;if(eAs[s["id"]])t.delete_instance(s["id"]);for(i in t.default_settings){if(typeof(s[i])=="undefined")s[i]=t.default_settings[i];}if(s["browsers"]=="known"&&t.isValidBrowser==false){return;}if(s["begin_toolbar"].length>0)s["toolbar"]=s["begin_toolbar"]+","+s["toolbar"];if(s["end_toolbar"].length>0)s["toolbar"]=s["toolbar"]+","+s["end_toolbar"];s["tab_toolbar"]=s["toolbar"].replace(/ /g,"").split(",");s["plugins"]=s["plugins"].replace(/ /g,"").split(",");for(i=0;i<s["plugins"].length;i++){if(s["plugins"][i].length==0)s["plugins"].splice(i,1);}t.get_template();t.load_script(t.baseURL+"langs/"+s["language"]+".js");if(s["syntax"].length>0){s["syntax"]=s["syntax"].toLowerCase();t.load_script(t.baseURL+"reg_syntax/"+s["syntax"]+".js");}eAs[s["id"]]={"settings":s};eAs[s["id"]]["displayed"]=false;eAs[s["id"]]["hidden"]=false;t.start(s["id"]);},delete_instance:function(id){var d=document,fs=window.frames,span,iframe;eAL.execCommand(id,"EA_delete");if(fs["frame_"+id]&&fs["frame_"+id].editArea){if(eAs[id]["displayed"])eAL.toggle(id,"off");fs["frame_"+id].editArea.execCommand("EA_unload");}span=d.getElementById("EditAreaArroundInfos_"+id);if(span)span.parentNode.removeChild(span);iframe=d.getElementById("frame_"+id);if(iframe){iframe.parentNode.removeChild(iframe);try{delete fs["frame_"+id];}catch(e){}}delete eAs[id];},start:function(id){var t=this,d=document,f,span,father,next,html='',html_toolbar_content='',template,content,i;if(t.win!="loaded"){setTimeout("eAL.start('"+id+"');",50);return;}for(i in t.waiting_loading){if(t.waiting_loading[i]!="loaded"&&typeof(t.waiting_loading[i])!="function"){setTimeout("eAL.start('"+id+"');",50);return;}}if(!t.lang[eAs[id]["settings"]["language"]]||(eAs[id]["settings"]["syntax"].length>0&&!t.load_syntax[eAs[id]["settings"]["syntax"]])){setTimeout("eAL.start('"+id+"');",50);return;}if(eAs[id]["settings"]["syntax"].length>0)t.init_syntax_regexp();if(!d.getElementById("EditAreaArroundInfos_"+id)&&(eAs[id]["settings"]["debug"]||eAs[id]["settings"]["allow_toggle"])){span=d.createElement("span");span.id="EditAreaArroundInfos_"+id;if(eAs[id]["settings"]["allow_toggle"]){checked=(eAs[id]["settings"]["display"]=="onload")?"checked='checked'":"";html+="<div id='edit_area_toggle_"+i+"'>";html+="<input id='edit_area_toggle_checkbox_"+id+"' class='toggle_"+id+"' type='checkbox' onclick='eAL.toggle(\""+id+"\");' accesskey='e' "+checked+" />";html+="<label for='edit_area_toggle_checkbox_"+id+"'>{$toggle}</label></div>";}if(eAs[id]["settings"]["debug"])html+="<textarea id='edit_area_debug_"+id+"' spellcheck='off' style='z-index:20;width:100%;height:120px;overflow:auto;border:solid black 1px;'></textarea><br />";html=t.translate(html,eAs[id]["settings"]["language"]);span.innerHTML=html;father=d.getElementById(id).parentNode;next=d.getElementById(id).nextSibling;if(next==null)father.appendChild(span);
else father.insertBefore(span,next);}if(!eAs[id]["initialized"]){t.execCommand(id,"EA_init");if(eAs[id]["settings"]["display"]=="later"){eAs[id]["initialized"]=true;return;}}if(t.isIE){t.init_ie_textarea(id);}area=eAs[id];for(i=0;i<area["settings"]["tab_toolbar"].length;i++){html_toolbar_content+=t.get_control_html(area["settings"]["tab_toolbar"][i],area["settings"]["language"]);}html_toolbar_content=t.translate(html_toolbar_content,area["settings"]["language"],"template");if(!t.iframe_script){t.iframe_script="";for(i=0;i<t.sub_scripts_to_load.length;i++)t.iframe_script+='<script language="javascript" type="text/javascript" src="'+t.baseURL+t.sub_scripts_to_load[i]+'.js"></script>';}for(i=0;i<area["settings"]["plugins"].length;i++){if(!t.all_plugins_loaded)t.iframe_script+='<script language="javascript" type="text/javascript" src="'+t.baseURL+'plugins/'+area["settings"]["plugins"][i]+'/'+area["settings"]["plugins"][i]+'.js"></script>';t.iframe_script+='<script language="javascript" type="text/javascript" src="'+t.baseURL+'plugins/'+area["settings"]["plugins"][i]+'/langs/'+area["settings"]["language"]+'.js"></script>';}if(!t.iframe_css){t.iframe_css="<link href='"+t.baseURL+"edit_area.css' rel='stylesheet' type='text/css' />";}template=t.template.replace(/\[__BASEURL__\]/g,t.baseURL);template=template.replace("[__TOOLBAR__]",html_toolbar_content);template=t.translate(template,area["settings"]["language"],"template");template=template.replace("[__CSSRULES__]",t.iframe_css);template=template.replace("[__JSCODE__]",t.iframe_script);template=template.replace("[__EA_VERSION__]",t.version);area.textarea=d.getElementById(area["settings"]["id"]);eAs[area["settings"]["id"]]["textarea"]=area.textarea;if(typeof(window.frames["frame_"+area["settings"]["id"]])!='undefined')delete window.frames["frame_"+area["settings"]["id"]];father=area.textarea.parentNode;content=d.createElement("iframe");content.name="frame_"+area["settings"]["id"];content.id="frame_"+area["settings"]["id"];content.style.borderWidth="0px";setAttribute(content,"frameBorder","0");content.style.overflow="hidden";content.style.display="none";next=area.textarea.nextSibling;if(next==null)father.appendChild(content);
else father.insertBefore(content,next);f=window.frames["frame_"+area["settings"]["id"]];f.document.open();f.eAs=eAs;f.area_id=area["settings"]["id"];f.document.area_id=area["settings"]["id"];f.document.write(template);f.document.close();},toggle:function(id,toggle_to){if(!toggle_to)toggle_to=(eAs[id]["displayed"]==true)?"off":"on";if(eAs[id]["displayed"]==true&&toggle_to=="off"){this.toggle_off(id);}
else if(eAs[id]["displayed"]==false&&toggle_to=="on"){this.toggle_on(id);}return false;},toggle_off:function(id){var fs=window.frames,f,t,parNod,nxtSib,selStart,selEnd,scrollTop,scrollLeft;if(fs["frame_"+id]){f=fs["frame_"+id];t=eAs[id]["textarea"];if(f.editArea.fullscreen['isFull'])f.editArea.toggle_full_screen(false);eAs[id]["displayed"]=false;t.wrap="off";setAttribute(t,"wrap","off");parNod=t.parentNode;nxtSib=t.nextSibling;parNod.removeChild(t);parNod.insertBefore(t,nxtSib);t.value=f.editArea.textarea.value;selStart=f.editArea.last_selection["selectionStart"];selEnd=f.editArea.last_selection["selectionEnd"];scrollTop=f.document.getElementById("result").scrollTop;scrollLeft=f.document.getElementById("result").scrollLeft;document.getElementById("frame_"+id).style.display='none';t.style.display="inline";try{t.focus();}catch(e){};if(this.isIE){t.selectionStart=selStart;t.selectionEnd=selEnd;t.focused=true;set_IE_selection(t);}
else{if(this.isOpera&&this.isOpera < 9.6){t.setSelectionRange(0,0);}try{t.setSelectionRange(selStart,selEnd);}catch(e){};}t.scrollTop=scrollTop;t.scrollLeft=scrollLeft;f.editArea.execCommand("toggle_off");}},toggle_on:function(id){var fs=window.frames,f,t,selStart=0,selEnd=0,scrollTop=0,scrollLeft=0,curPos,elem;if(fs["frame_"+id]){f=fs["frame_"+id];t=eAs[id]["textarea"];area=f.editArea;area.textarea.value=t.value;curPos=eAs[id]["settings"]["cursor_position"];if(t.use_last==true){selStart=t.last_selectionStart;selEnd=t.last_selectionEnd;scrollTop=t.last_scrollTop;scrollLeft=t.last_scrollLeft;t.use_last=false;}
else if(curPos=="auto"){try{selStart=t.selectionStart;selEnd=t.selectionEnd;scrollTop=t.scrollTop;scrollLeft=t.scrollLeft;}catch(ex){}}this.set_editarea_size_from_textarea(id,document.getElementById("frame_"+id));t.style.display="none";document.getElementById("frame_"+id).style.display="inline";area.execCommand("focus");eAs[id]["displayed"]=true;area.execCommand("update_size");f.document.getElementById("result").scrollTop=scrollTop;f.document.getElementById("result").scrollLeft=scrollLeft;area.area_select(selStart,selEnd-selStart);area.execCommand("toggle_on");}
else{elem=document.getElementById(id);elem.last_selectionStart=elem.selectionStart;elem.last_selectionEnd=elem.selectionEnd;elem.last_scrollTop=elem.scrollTop;elem.last_scrollLeft=elem.scrollLeft;elem.use_last=true;eAL.start(id);}},set_editarea_size_from_textarea:function(id,frame){var elem,width,height;elem=document.getElementById(id);width=Math.max(eAs[id]["settings"]["min_width"],elem.offsetWidth)+"px";height=Math.max(eAs[id]["settings"]["min_height"],elem.offsetHeight)+"px";if(elem.style.width.indexOf("%")!=-1)width=elem.style.width;if(elem.style.height.indexOf("%")!=-1)height=elem.style.height;frame.style.width=width;frame.style.height=height;},set_base_url:function(){var t=this,elems,i,docBasePath;if(!this.baseURL){elems=document.getElementsByTagName('script');for(i=0;i<elems.length;i++){if(elems[i].src&&elems[i].src.match(/edit_area_[^\\\/]*$/i)){var src=elems[i].src;src=src.substring(0,src.lastIndexOf('/'));this.baseURL=src;this.file_name=elems[i].src.substr(elems[i].src.lastIndexOf("/")+1);break;}}}docBasePath=document.location.href;if(docBasePath.indexOf('?')!=-1)docBasePath=docBasePath.substring(0,docBasePath.indexOf('?'));docBasePath=docBasePath.substring(0,docBasePath.lastIndexOf('/'));if(t.baseURL.indexOf('://')==-1&&t.baseURL.charAt(0)!='/'){t.baseURL=docBasePath+"/"+t.baseURL;}t.baseURL+="/";},get_button_html:function(id,img,exec,isFileSpecific,baseURL){var cmd,html;if(!baseURL)baseURL=this.baseURL;cmd='editArea.execCommand(\''+exec+'\')';html='<a id="a_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+';return false;" onmousedown="return false;" target="_self" fileSpecific="'+(isFileSpecific?'yes':'no')+'">';html+='<img id="'+id+'" src="'+baseURL+'images/'+img+'" title="{$'+id+'}" width="20" height="20" class="editAreaButtonNormal" onmouseover="editArea.switchClass(this,\'editAreaButtonOver\');" onmouseout="editArea.restoreClass(this);" onmousedown="editArea.restoreAndSwitchClass(this,\'editAreaButtonDown\');" /></a>';return html;},get_control_html:function(button_name,lang){var t=this,i,but,html,si;for(i=0;i<t.advanced_buttons.length;i++){but=t.advanced_buttons[i];if(but[0]==button_name){return t.get_button_html(but[0],but[1],but[2],but[3]);}}switch(button_name){case "*":case "return":return "<br />";case "|":case "separator":return '<img src="'+t.baseURL+'images/spacer.gif" width="1" height="15" class="editAreaSeparatorLine">';case "select_font":html="<select id='area_font_size' onchange='javascript:editArea.execCommand(\"change_font_size\")' fileSpecific='yes'>";html+="<option value='-1'>{$font_size}</option>";si=[8,9,10,11,12,14];for(i=0;i<si.length;i++){html+="<option value='"+si[i]+"'>"+si[i]+" pt</option>";}html+="</select>";return html;case "syntax_selection":html="<select id='syntax_selection' onchange='javascript:editArea.execCommand(\"change_syntax\",this.value)' fileSpecific='yes'>";html+="<option value='-1'>{$syntax_selection}</option>";html+="</select>";return html;}return "<span id='tmp_tool_"+button_name+"'>["+button_name+"]</span>";},get_template:function(){if(this.template==""){var xhr_object=null;if(window.XMLHttpRequest)xhr_object=new XMLHttpRequest();
else if(window.ActiveXObject)xhr_object=new ActiveXObject("Microsoft.XMLHTTP");
else{alert("XMLHTTPRequest not supported. EditArea not loaded");return;}xhr_object.open("GET",this.baseURL+"template.html",false);xhr_object.send(null);if(xhr_object.readyState==4)this.template=xhr_object.responseText;
else this.has_error();}},translate:function(text,lang,mode){if(mode=="word")text=eAL.get_word_translation(text,lang);
else if(mode="template"){eAL.current_language=lang;text=text.replace(/\{\$([^\}]+)\}/gm,eAL.translate_template);}return text;},translate_template:function(){return eAL.get_word_translation(EAL.prototype.translate_template.arguments[1],eAL.current_language);},get_word_translation:function(val,lang){var i;for(i in eAL.lang[lang]){if(i==val)return eAL.lang[lang][i];}return "_"+val;},load_script:function(url){var t=this,d=document,script,head;if(t.loadedFiles[url])return;try{script=d.createElement("script");script.type="text/javascript";script.src=url;script.charset="UTF-8";d.getElementsByTagName("head")[0].appendChild(script);}catch(e){d.write('<sc'+'ript language="javascript" type="text/javascript" src="'+url+'" charset="UTF-8"></sc'+'ript>');}t.loadedFiles[url]=true;},add_event:function(obj,name,handler){try{if(obj.attachEvent){obj.attachEvent("on"+name,handler);}
else{obj.addEventListener(name,handler,false);}}catch(e){}},remove_event:function(obj,name,handler){try{if(obj.detachEvent)obj.detachEvent("on"+name,handler);
else obj.removeEventListener(name,handler,false);}catch(e){}},reset:function(e){var formObj,is_child,i,x;formObj=eAL.isIE ? window.event.srcElement:e.target;if(formObj.tagName!='FORM')formObj=formObj.form;for(i in eAs){is_child=false;for(x=0;x<formObj.elements.length;x++){if(formObj.elements[x].id==i)is_child=true;}if(window.frames["frame_"+i]&&is_child&&eAs[i]["displayed"]==true){var exec='window.frames["frame_'+i+'"].editArea.textarea.value=document.getElementById("'+i+'").value;';exec+='window.frames["frame_'+i+'"].editArea.execCommand("focus");';exec+='window.frames["frame_'+i+'"].editArea.check_line_selection();';exec+='window.frames["frame_'+i+'"].editArea.execCommand("reset");';window.setTimeout(exec,10);}}return;},submit:function(e){var formObj,is_child,fs=window.frames,i,x;formObj=eAL.isIE ? window.event.srcElement:e.target;if(formObj.tagName!='FORM')formObj=formObj.form;for(i in eAs){is_child=false;for(x=0;x<formObj.elements.length;x++){if(formObj.elements[x].id==i)is_child=true;}if(is_child){if(fs["frame_"+i]&&eAs[i]["displayed"]==true)document.getElementById(i).value=fs["frame_"+i].editArea.textarea.value;eAL.execCommand(i,"EA_submit");}}if(typeof(formObj.edit_area_replaced_submit)=="function"){res=formObj.edit_area_replaced_submit();if(res==false){if(eAL.isIE)return false;
else e.preventDefault();}}return;},getValue:function(id){if(window.frames["frame_"+id]&&eAs[id]["displayed"]==true){return window.frames["frame_"+id].editArea.textarea.value;}
else if(elem=document.getElementById(id)){return elem.value;}return false;},setValue:function(id,new_val){var fs=window.frames;if((f=fs["frame_"+id])&&eAs[id]["displayed"]==true){f.editArea.textarea.value=new_val;f.editArea.execCommand("focus");f.editArea.check_line_selection(false);f.editArea.execCommand("onchange");}
else if(elem=document.getElementById(id)){elem.value=new_val;}},getSelectionRange:function(id){var sel,eA,fs=window.frames;sel={"start":0,"end":0};if(fs["frame_"+id]&&eAs[id]["displayed"]==true){eA=fs["frame_"+id].editArea;sel["start"]=eA.textarea.selectionStart;sel["end"]=eA.textarea.selectionEnd;}
else if(elem=document.getElementById(id)){sel=getSelectionRange(elem);}return sel;},setSelectionRange:function(id,new_start,new_end){var fs=window.frames;if(fs["frame_"+id]&&eAs[id]["displayed"]==true){fs["frame_"+id].editArea.area_select(new_start,new_end-new_start);if(!this.isIE){fs["frame_"+id].editArea.check_line_selection(false);fs["frame_"+id].editArea.scroll_to_view();}}
else if(elem=document.getElementById(id)){setSelectionRange(elem,new_start,new_end);}},getSelectedText:function(id){var sel=this.getSelectionRange(id);return this.getValue(id).substring(sel["start"],sel["end"]);},setSelectedText:function(id,new_val){var fs=window.frames,d=document,sel,text,scrollTop,scrollLeft,new_sel_end;new_val=new_val.replace(/\r/g,"");sel=this.getSelectionRange(id);text=this.getValue(id);if(fs["frame_"+id]&&eAs[id]["displayed"]==true){scrollTop=fs["frame_"+id].document.getElementById("result").scrollTop;scrollLeft=fs["frame_"+id].document.getElementById("result").scrollLeft;}
else{scrollTop=d.getElementById(id).scrollTop;scrollLeft=d.getElementById(id).scrollLeft;}text=text.substring(0,sel["start"])+new_val+text.substring(sel["end"]);this.setValue(id,text);new_sel_end=sel["start"]+new_val.length;this.setSelectionRange(id,sel["start"],new_sel_end);if(new_val !=this.getSelectedText(id).replace(/\r/g,"")){this.setSelectionRange(id,sel["start"],new_sel_end+new_val.split("\n").length-1);}if(fs["frame_"+id]&&eAs[id]["displayed"]==true){fs["frame_"+id].document.getElementById("result").scrollTop=scrollTop;fs["frame_"+id].document.getElementById("result").scrollLeft=scrollLeft;fs["frame_"+id].editArea.execCommand("onchange");}
else{d.getElementById(id).scrollTop=scrollTop;d.getElementById(id).scrollLeft=scrollLeft;}},insertTags:function(id,open_tag,close_tag){var old_sel,new_sel;old_sel=this.getSelectionRange(id);text=open_tag+this.getSelectedText(id)+close_tag;eAL.setSelectedText(id,text);new_sel=this.getSelectionRange(id);if(old_sel["end"] > old_sel["start"])this.setSelectionRange(id,new_sel["end"],new_sel["end"]);
else this.setSelectionRange(id,old_sel["start"]+open_tag.length,old_sel["start"]+open_tag.length);},hide:function(id){var fs=window.frames,d=document,t=this,scrollTop,scrollLeft,span;if(d.getElementById(id)&&!t.hidden[id]){t.hidden[id]={};t.hidden[id]["selectionRange"]=t.getSelectionRange(id);if(d.getElementById(id).style.display!="none"){t.hidden[id]["scrollTop"]=d.getElementById(id).scrollTop;t.hidden[id]["scrollLeft"]=d.getElementById(id).scrollLeft;}if(fs["frame_"+id]){t.hidden[id]["toggle"]=eAs[id]["displayed"];if(fs["frame_"+id]&&eAs[id]["displayed"]==true){scrollTop=fs["frame_"+id].document.getElementById("result").scrollTop;scrollLeft=fs["frame_"+id].document.getElementById("result").scrollLeft;}
else{scrollTop=d.getElementById(id).scrollTop;scrollLeft=d.getElementById(id).scrollLeft;}t.hidden[id]["scrollTop"]=scrollTop;t.hidden[id]["scrollLeft"]=scrollLeft;if(eAs[id]["displayed"]==true)eAL.toggle_off(id);}span=d.getElementById("EditAreaArroundInfos_"+id);if(span){span.style.display='none';}d.getElementById(id).style.display="none";}},show:function(id){var fs=window.frames,d=document,t=this,span;if((elem=d.getElementById(id))&&t.hidden[id]){elem.style.display="inline";elem.scrollTop=t.hidden[id]["scrollTop"];elem.scrollLeft=t.hidden[id]["scrollLeft"];span=d.getElementById("EditAreaArroundInfos_"+id);if(span){span.style.display='inline';}if(fs["frame_"+id]){elem.style.display="inline";if(t.hidden[id]["toggle"]==true)eAL.toggle_on(id);scrollTop=t.hidden[id]["scrollTop"];scrollLeft=t.hidden[id]["scrollLeft"];if(fs["frame_"+id]&&eAs[id]["displayed"]==true){fs["frame_"+id].document.getElementById("result").scrollTop=scrollTop;fs["frame_"+id].document.getElementById("result").scrollLeft=scrollLeft;}
else{elem.scrollTop=scrollTop;elem.scrollLeft=scrollLeft;}}sel=t.hidden[id]["selectionRange"];t.setSelectionRange(id,sel["start"],sel["end"]);delete t.hidden[id];}},getCurrentFile:function(id){return this.execCommand(id,'get_file',this.execCommand(id,'curr_file'));},getFile:function(id,file_id){return this.execCommand(id,'get_file',file_id);},getAllFiles:function(id){return this.execCommand(id,'get_all_files()');},openFile:function(id,file_infos){return this.execCommand(id,'open_file',file_infos);},closeFile:function(id,file_id){return this.execCommand(id,'close_file',file_id);},setFileEditedMode:function(id,file_id,to){var reg1,reg2;reg1=new RegExp('\\\\','g');reg2=new RegExp('"','g');return this.execCommand(id,'set_file_edited_mode("'+file_id.replace(reg1,'\\\\').replace(reg2,'\\"')+'",'+to+')');},execCommand:function(id,cmd,fct_param){switch(cmd){case "EA_init":if(eAs[id]['settings']["EA_init_callback"].length>0)eval(eAs[id]['settings']["EA_init_callback"]+"('"+id+"');");break;case "EA_delete":if(eAs[id]['settings']["EA_delete_callback"].length>0)eval(eAs[id]['settings']["EA_delete_callback"]+"('"+id+"');");break;case "EA_submit":if(eAs[id]['settings']["submit_callback"].length>0)eval(eAs[id]['settings']["submit_callback"]+"('"+id+"');");break;}if(window.frames["frame_"+id]&&window.frames["frame_"+id].editArea){if(fct_param!=undefined)return eval('window.frames["frame_'+id+'"].editArea.'+cmd+'(fct_param);');
else return eval('window.frames["frame_'+id+'"].editArea.'+cmd+';');}return false;}};var eAL=new EAL();var eAs={}; function getAttribute(elm,aName){var aValue,taName,i;try{aValue=elm.getAttribute(aName);}catch(exept){}if(! aValue){for(i=0;i < elm.attributes.length;i++){taName=elm.attributes[i] .name.toLowerCase();if(taName==aName){aValue=elm.attributes[i] .value;return aValue;}}}return aValue;};function setAttribute(elm,attr,val){if(attr=="class"){elm.setAttribute("className",val);elm.setAttribute("class",val);}
else{elm.setAttribute(attr,val);}};function getChildren(elem,elem_type,elem_attribute,elem_attribute_match,option,depth){if(!option)var option="single";if(!depth)var depth=-1;if(elem){var children=elem.childNodes;var result=null;var results=[];for(var x=0;x<children.length;x++){strTagName=new String(children[x].tagName);children_class="?";if(strTagName!="undefined"){child_attribute=getAttribute(children[x],elem_attribute);if((strTagName.toLowerCase()==elem_type.toLowerCase()||elem_type=="")&&(elem_attribute==""||child_attribute==elem_attribute_match)){if(option=="all"){results.push(children[x]);}
else{return children[x];}}if(depth!=0){result=getChildren(children[x],elem_type,elem_attribute,elem_attribute_match,option,depth-1);if(option=="all"){if(result.length>0){results=results.concat(result);}}
else if(result!=null){return result;}}}}if(option=="all")return results;}return null;};function isChildOf(elem,parent){if(elem){if(elem==parent)return true;while(elem.parentNode !='undefined'){return isChildOf(elem.parentNode,parent);}}return false;};function getMouseX(e){if(e!=null&&typeof(e.pageX)!="undefined"){return e.pageX;}
else{return(e!=null?e.x:event.x)+document.documentElement.scrollLeft;}};function getMouseY(e){if(e!=null&&typeof(e.pageY)!="undefined"){return e.pageY;}
else{return(e!=null?e.y:event.y)+document.documentElement.scrollTop;}};function calculeOffsetLeft(r){return calculeOffset(r,"offsetLeft")};function calculeOffsetTop(r){return calculeOffset(r,"offsetTop")};function calculeOffset(element,attr){var offset=0;while(element){offset+=element[attr];element=element.offsetParent}return offset;};function get_css_property(elem,prop){if(document.defaultView){return document.defaultView.getComputedStyle(elem,null).getPropertyValue(prop);}
else if(elem.currentStyle){var prop=prop.replace(/-\D/gi,function(sMatch){return sMatch.charAt(sMatch.length-1).toUpperCase();});return elem.currentStyle[prop];}
else return null;}var _mCE;function start_move_element(e,id,frame){var elem_id=(e.target||e.srcElement).id;if(id)elem_id=id;if(!frame)frame=window;if(frame.event)e=frame.event;_mCE=frame.document.getElementById(elem_id);_mCE.frame=frame;frame.document.onmousemove=move_element;frame.document.onmouseup=end_move_element;mouse_x=getMouseX(e);mouse_y=getMouseY(e);_mCE.start_pos_x=mouse_x-(_mCE.style.left.replace("px","")||calculeOffsetLeft(_mCE));_mCE.start_pos_y=mouse_y-(_mCE.style.top.replace("px","")||calculeOffsetTop(_mCE));return false;};function end_move_element(e){_mCE.frame.document.onmousemove="";_mCE.frame.document.onmouseup="";_mCE=null;};function move_element(e){var newTop,newLeft,maxLeft;if(_mCE.frame&&_mCE.frame.event)e=_mCE.frame.event;newTop=getMouseY(e)-_mCE.start_pos_y;newLeft=getMouseX(e)-_mCE.start_pos_x;maxLeft=_mCE.frame.document.body.offsetWidth-_mCE.offsetWidth;max_top=_mCE.frame.document.body.offsetHeight-_mCE.offsetHeight;newTop=Math.min(Math.max(0,newTop),max_top);newLeft=Math.min(Math.max(0,newLeft),maxLeft);_mCE.style.top=newTop+"px";_mCE.style.left=newLeft+"px";return false;};var nav=eAL.nav;function getSelectionRange(textarea){return{"start":textarea.selectionStart,"end":textarea.selectionEnd};};function setSelectionRange(t,start,end){t.focus();start=Math.max(0,Math.min(t.value.length,start));end=Math.max(start,Math.min(t.value.length,end));if(this.isOpera&&this.isOpera < 9.6){t.selectionEnd=1;t.selectionStart=0;t.selectionEnd=1;t.selectionStart=0;}t.selectionStart=start;t.selectionEnd=end;if(isIE)set_IE_selection(t);};function get_IE_selection(t){var d=document,div,range,stored_range,elem,scrollTop,relative_top,line_start,line_nb,range_start,range_end,tab;if(t&&t.focused){if(!t.ea_line_height){div=d.createElement("div");div.style.fontFamily=get_css_property(t,"font-family");div.style.fontSize=get_css_property(t,"font-size");div.style.visibility="hidden";div.innerHTML="0";d.body.appendChild(div);t.ea_line_height=div.offsetHeight;d.body.removeChild(div);}range=d.selection.createRange();try{stored_range=range.duplicate();stored_range.moveToElementText(t);stored_range.setEndPoint('EndToEnd',range);if(stored_range.parentElement()==t){elem=t;scrollTop=0;while(elem.parentNode){scrollTop+=elem.scrollTop;elem=elem.parentNode;}relative_top=range.offsetTop-calculeOffsetTop(t)+scrollTop;line_start=Math.round((relative_top / t.ea_line_height)+1);line_nb=Math.round(range.boundingHeight / t.ea_line_height);range_start=stored_range.text.length-range.text.length;tab=t.value.substr(0,range_start).split("\n");range_start+=(line_start-tab.length)*2;t.selectionStart=range_start;range_end=t.selectionStart+range.text.length;tab=t.value.substr(0,range_start+range.text.length).split("\n");range_end+=(line_start+line_nb-1-tab.length)*2;t.selectionEnd=range_end;}}catch(e){}}setTimeout("get_IE_selection(document.getElementById('"+t.id+"'));",50);};function IE_textarea_focus(){event.srcElement.focused=true;}function IE_textarea_blur(){event.srcElement.focused=false;}function set_IE_selection(t){var nbLineStart,nbLineStart,nbLineEnd,range;if(!window.closed){nbLineStart=t.value.substr(0,t.selectionStart).split("\n").length-1;nbLineEnd=t.value.substr(0,t.selectionEnd).split("\n").length-1;try{range=document.selection.createRange();range.moveToElementText(t);range.setEndPoint('EndToStart',range);range.moveStart('character',t.selectionStart-nbLineStart);range.moveEnd('character',t.selectionEnd-nbLineEnd-(t.selectionStart-nbLineStart));range.select();}catch(e){}}};eAL.waiting_loading["elements_functions.js"]="loaded";
 EAL.prototype.start_resize_area=function(){var d=document,a,div,width,height,father;d.onmouseup=eAL.end_resize_area;d.onmousemove=eAL.resize_area;eAL.toggle(eAL.resize["id"]);a=eAs[eAL.resize["id"]]["textarea"];div=d.getElementById("edit_area_resize");if(!div){div=d.createElement("div");div.id="edit_area_resize";div.style.border="dashed #888888 1px";}width=a.offsetWidth-2;height=a.offsetHeight-2;div.style.display="block";div.style.width=width+"px";div.style.height=height+"px";father=a.parentNode;father.insertBefore(div,a);a.style.display="none";eAL.resize["start_top"]=calculeOffsetTop(div);eAL.resize["start_left"]=calculeOffsetLeft(div);};EAL.prototype.end_resize_area=function(e){var d=document,div,a,width,height;d.onmouseup="";d.onmousemove="";div=d.getElementById("edit_area_resize");a=eAs[eAL.resize["id"]]["textarea"];width=Math.max(eAs[eAL.resize["id"]]["settings"]["min_width"],div.offsetWidth-4);height=Math.max(eAs[eAL.resize["id"]]["settings"]["min_height"],div.offsetHeight-4);if(eAL.isIE==6){width-=2;height-=2;}a.style.width=width+"px";a.style.height=height+"px";div.style.display="none";a.style.display="inline";a.selectionStart=eAL.resize["selectionStart"];a.selectionEnd=eAL.resize["selectionEnd"];eAL.toggle(eAL.resize["id"]);return false;};EAL.prototype.resize_area=function(e){var allow,newHeight,newWidth;allow=eAs[eAL.resize["id"]]["settings"]["allow_resize"];if(allow=="both"||allow=="y"){newHeight=Math.max(20,getMouseY(e)-eAL.resize["start_top"]);document.getElementById("edit_area_resize").style.height=newHeight+"px";}if(allow=="both"||allow=="x"){newWidth=Math.max(20,getMouseX(e)-eAL.resize["start_left"]);document.getElementById("edit_area_resize").style.width=newWidth+"px";}return false;};eAL.waiting_loading["resize_area.js"]="loaded";
	EAL.prototype.get_regexp=function(text_array){res="(\\b)(";for(i=0;i<text_array.length;i++){if(i>0)res+="|";res+=this.get_escaped_regexp(text_array[i]);}res+=")(\\b)";reg=new RegExp(res);return res;};EAL.prototype.get_escaped_regexp=function(str){return str.toString().replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\}|\{|\$|\^|\|)/g,"\\$1");};EAL.prototype.init_syntax_regexp=function(){var lang_style={};for(var lang in this.load_syntax){if(!this.syntax[lang]){this.syntax[lang]={};this.syntax[lang]["keywords_reg_exp"]={};this.keywords_reg_exp_nb=0;if(this.load_syntax[lang]['KEYWORDS']){param="g";if(this.load_syntax[lang]['KEYWORD_CASE_SENSITIVE']===false)param+="i";for(var i in this.load_syntax[lang]['KEYWORDS']){if(typeof(this.load_syntax[lang]['KEYWORDS'][i])=="function")continue;this.syntax[lang]["keywords_reg_exp"][i]=new RegExp(this.get_regexp(this.load_syntax[lang]['KEYWORDS'][i]),param);this.keywords_reg_exp_nb++;}}if(this.load_syntax[lang]['OPERATORS']){var str="";var nb=0;for(var i in this.load_syntax[lang]['OPERATORS']){if(typeof(this.load_syntax[lang]['OPERATORS'][i])=="function")continue;if(nb>0)str+="|";str+=this.get_escaped_regexp(this.load_syntax[lang]['OPERATORS'][i]);nb++;}if(str.length>0)this.syntax[lang]["operators_reg_exp"]=new RegExp("("+str+")","g");}if(this.load_syntax[lang]['DELIMITERS']){var str="";var nb=0;for(var i in this.load_syntax[lang]['DELIMITERS']){if(typeof(this.load_syntax[lang]['DELIMITERS'][i])=="function")continue;if(nb>0)str+="|";str+=this.get_escaped_regexp(this.load_syntax[lang]['DELIMITERS'][i]);nb++;}if(str.length>0)this.syntax[lang]["delimiters_reg_exp"]=new RegExp("("+str+")","g");}var syntax_trace=[];this.syntax[lang]["quotes"]={};var quote_tab=[];if(this.load_syntax[lang]['QUOTEMARKS']){for(var i in this.load_syntax[lang]['QUOTEMARKS']){if(typeof(this.load_syntax[lang]['QUOTEMARKS'][i])=="function")continue;var x=this.get_escaped_regexp(this.load_syntax[lang]['QUOTEMARKS'][i]);this.syntax[lang]["quotes"][x]=x;quote_tab[quote_tab.length]="("+x+"(\\\\.|[^"+x+"])*(?:"+x+"|$))";syntax_trace.push(x);}}this.syntax[lang]["comments"]={};if(this.load_syntax[lang]['COMMENT_SINGLE']){for(var i in this.load_syntax[lang]['COMMENT_SINGLE']){if(typeof(this.load_syntax[lang]['COMMENT_SINGLE'][i])=="function")continue;var x=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_SINGLE'][i]);quote_tab[quote_tab.length]="("+x+"(.|\\r|\\t)*(\\n|$))";syntax_trace.push(x);this.syntax[lang]["comments"][x]="\n";}}if(this.load_syntax[lang]['COMMENT_MULTI']){for(var i in this.load_syntax[lang]['COMMENT_MULTI']){if(typeof(this.load_syntax[lang]['COMMENT_MULTI'][i])=="function")continue;var start=this.get_escaped_regexp(i);var end=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_MULTI'][i]);quote_tab[quote_tab.length]="("+start+"(.|\\n|\\r)*?("+end+"|$))";syntax_trace.push(start);syntax_trace.push(end);this.syntax[lang]["comments"][i]=this.load_syntax[lang]['COMMENT_MULTI'][i];}}if(quote_tab.length>0)this.syntax[lang]["comment_or_quote_reg_exp"]=new RegExp("("+quote_tab.join("|")+")","gi");if(syntax_trace.length>0)this.syntax[lang]["syntax_trace_regexp"]=new RegExp("((.|\n)*?)(\\\\*("+syntax_trace.join("|")+"|$))","gmi");if(this.load_syntax[lang]['SCRIPT_DELIMITERS']){this.syntax[lang]["script_delimiters"]={};for(var i in this.load_syntax[lang]['SCRIPT_DELIMITERS']){if(typeof(this.load_syntax[lang]['SCRIPT_DELIMITERS'][i])=="function")continue;this.syntax[lang]["script_delimiters"][i]=this.load_syntax[lang]['SCRIPT_DELIMITERS'];}}this.syntax[lang]["custom_regexp"]={};if(this.load_syntax[lang]['REGEXPS']){for(var i in this.load_syntax[lang]['REGEXPS']){if(typeof(this.load_syntax[lang]['REGEXPS'][i])=="function")continue;var val=this.load_syntax[lang]['REGEXPS'][i];if(!this.syntax[lang]["custom_regexp"][val['execute']])this.syntax[lang]["custom_regexp"][val['execute']]={};this.syntax[lang]["custom_regexp"][val['execute']][i]={'regexp':new RegExp(val['search'],val['modifiers']),'class':val['class']};}}if(this.load_syntax[lang]['STYLES']){lang_style[lang]={};for(var i in this.load_syntax[lang]['STYLES']){if(typeof(this.load_syntax[lang]['STYLES'][i])=="function")continue;if(typeof(this.load_syntax[lang]['STYLES'][i])!="string"){for(var j in this.load_syntax[lang]['STYLES'][i]){lang_style[lang][j]=this.load_syntax[lang]['STYLES'][i][j];}}
else{lang_style[lang][i]=this.load_syntax[lang]['STYLES'][i];}}}var style="";for(var i in lang_style[lang]){if(lang_style[lang][i].length>0){style+="."+lang+" ."+i.toLowerCase()+" span{"+lang_style[lang][i]+"}\n";style+="."+lang+" ."+i.toLowerCase()+"{"+lang_style[lang][i]+"}\n";}}this.syntax[lang]["styles"]=style;}}};eAL.waiting_loading["reg_syntax.js"]="loaded";
var editAreaLoader= eAL;var editAreas=eAs;EditAreaLoader=EAL;editAreaLoader.iframe_script= "<script type='text/javascript'> Ã EA(){var t=Á;t.error=Ì;t.inlinePopup=[{popup_id:\"area_search_replace\",icon_id:\"search\"},{popup_id:\"edit_area_help\",icon_id:\"help\"}];t.plugins={};t.line_number=0;È.eAL.set_browser_infos(t);if(t.isIE >=8)t.isIE=7;t.É={};t.last_text_to_highlight=\"\";t.last_hightlighted_text=\"\";t.syntax_list=[];t.allready_used_syntax={};t.check_line_selection_timer=50;t.ÂFocused=Ì;t.highlight_selection_line=null;t.previous=[];t.next=[];t.last_undo=\"\";t.files={};t.filesIdAssoc={};t.curr_file='';t.assocBracket={};t.revertAssocBracket={};t.assocBracket[\"(\"]=\")\";t.assocBracket[\"{\"]=\"}\";t.assocBracket[\"[\"]=\"]\";for(var index in t.assocBracket){t.revertAssocBracket[t.assocBracket[index]]=index;}t.is_editable=Ë;t.lineHeight=16;t.tab_nb_char=8;if(t.isOpera)t.tab_nb_char=6;t.is_tabbing=Ì;t.fullscreen={'isFull':Ì};t.isResizing=Ì;t.id=area_id;t.Å=eAs[t.id][\"Å\"];if((\"\"+t.Å['replace_tab_by_spaces']).match(/^[0-9]+$/)){t.tab_nb_char=t.Å['replace_tab_by_spaces'];t.tabulation=\"\";for(var i=0;i<t.tab_nb_char;i++)t.tabulation+=\" \";}\nelse{t.tabulation=\"\t\";}if(t.Å[\"syntax_selection_allow\"]&&t.Å[\"syntax_selection_allow\"].Æ>0)t.syntax_list=t.Å[\"syntax_selection_allow\"].replace(/ /g,\"\").split(\",\");if(t.Å['syntax'])t.allready_used_syntax[t.Å['syntax']]=Ë;};EA.Ä.init=Ã(){var t=Á,a,s=t.Å;t.Â=_$(\"Â\");t.container=_$(\"container\");t.result=_$(\"result\");t.content_highlight=_$(\"content_highlight\");t.selection_field=_$(\"selection_field\");t.selection_field_text=_$(\"selection_field_text\");t.processing_screen=_$(\"processing\");t.editor_area=_$(\"editor\");t.tab_browsing_area=_$(\"tab_browsing_area\");t.test_font_size=_$(\"test_font_size\");a=t.Â;if(!s['is_editable'])t.set_editable(Ì);t.set_show_line_colors(s['show_line_colors']);if(syntax_selec=_$(\"syntax_selection\")){for(var i=0;i<t.syntax_list.Æ;i++){var syntax=t.syntax_list[i];var option=document.createElement(\"option\");option.Ê=syntax;if(syntax==s['syntax'])option.selected=\"selected\";option.innerHTML=t.get_translation(\"syntax_\"+syntax,\"word\");syntax_selec.appendChild(option);}}spans=È.getChildren(_$(\"toolbar_1\"),\"span\",\"\",\"\",\"all\",-1);for(var i=0;i<spans.Æ;i++){id=spans[i].id.replace(/tmp_tool_(.*)/,\"$1\");if(id!=spans[i].id){for(var j in t.plugins){if(typeof(t.plugins[j].get_control_html)==\"Ã\"){html=t.plugins[j].get_control_html(id);if(html!=Ì){html=t.get_translation(html,\"template\");var new_span=document.createElement(\"span\");new_span.innerHTML=html;var father=spans[i].ÈNode;spans[i].ÈNode.replaceChild(new_span,spans[i]);break;}}}}}if(s[\"debug\"]){t.debug=È.document.getElementById(\"edit_area_debug_\"+t.id);}if(_$(\"redo\")!=null)t.switchClassSticky(_$(\"redo\"),'editAreaButtonDisabled',Ë);if(typeof(È.eAL.syntax[s[\"syntax\"]])!=\"undefined\"){for(var i in È.eAL.syntax){if(typeof(È.eAL.syntax[i][\"Çs\"])!=\"undefined\"){t.add_Ç(È.eAL.syntax[i][\"Çs\"]);}}}if(t.isOpera)_$(\"editor\").onkeypress=keyDown;\nelse _$(\"editor\").onkeydown=keyDown;for(var i=0;i<t.inlinePopup.Æ;i++){if(t.isOpera)_$(t.inlinePopup[i][\"popup_id\"]).onkeypress=keyDown;\nelse _$(t.inlinePopup[i][\"popup_id\"]).onkeydown=keyDown;}if(s[\"allow_resize\"]==\"both\"||s[\"allow_resize\"]==\"x\"||s[\"allow_resize\"]==\"y\")t.allow_resize(Ë);È.eAL.toggle(t.id,\"on\");t.change_smooth_selection_mode(eA.smooth_selection);t.execCommand(\"change_highlight\",s[\"start_highlight\"]);t.set_font(eA.Å[\"font_family\"],eA.Å[\"font_size\"]);children=È.getChildren(document.body,\"\",\"selec\",\"none\",\"all\",-1);for(var i=0;i<children.Æ;i++){if(t.isIE)children[i].unselectable=Ë;\nelse children[i].onmousedown=Ã(){return Ì};}a.spellcheck=s[\"gecko_spellcheck\"];if(t.isFirefox >='3'){t.content_highlight.Ç.paddingLeft=\"1px\";t.selection_field.Ç.paddingLeft=\"1px\";t.selection_field_text.Ç.paddingLeft=\"1px\";}if(t.isIE&&t.isIE < 8){a.Ç.marginTop=\"-1px\";}if(t.isSafari){t.editor_area.Ç.position=\"absolute\";a.Ç.marginLeft=\"-3px\";if(t.isSafari < 3.2)a.Ç.marginTop=\"1px\";}È.eAL.add_event(t.result,\"click\",Ã(e){if((e.target||e.srcElement)==eA.result){eA.area_select(eA.Â.Ê.Æ,0);}});if(s['is_multi_files']!=Ì)t.open_file({'id':t.curr_file,'text':''});t.set_word_wrap(s['word_wrap']);setTimeout(\"eA.focus();eA.manage_size();eA.execCommand('EA_load');\",10);t.check_undo();t.check_line_selection(Ë);t.scroll_to_view();for(var i in t.plugins){if(typeof(t.plugins[i].onload)==\"Ã\")t.plugins[i].onload();}if(s['fullscreen']==Ë)t.toggle_full_screen(Ë);È.eAL.add_event(window,\"resize\",eA.update_size);È.eAL.add_event(È.window,\"resize\",eA.update_size);È.eAL.add_event(top.window,\"resize\",eA.update_size);È.eAL.add_event(window,\"unload\",Ã(){if(È.eAL){È.eAL.remove_event(È.window,\"resize\",eA.update_size);È.eAL.remove_event(top.window,\"resize\",eA.update_size);}if(eAs[eA.id]&&eAs[eA.id][\"displayed\"]){eA.execCommand(\"EA_unload\");}});};EA.Ä.update_size=Ã(){var d=document,pd=È.document,height,width,popup,maxLeft,maxTop;if(typeof eAs !='undefined'&&eAs[eA.id]&&eAs[eA.id][\"displayed\"]==Ë){if(eA.fullscreen['isFull']){pd.getElementById(\"frame_\"+eA.id).Ç.width=pd.getElementsByTagName(\"html\")[0].clientWidth+\"px\";pd.getElementById(\"frame_\"+eA.id).Ç.height=pd.getElementsByTagName(\"html\")[0].clientHeight+\"px\";}if(eA.tab_browsing_area.Ç.display=='block'&&(!eA.isIE||eA.isIE >=8)){eA.tab_browsing_area.Ç.height=\"0px\";eA.tab_browsing_area.Ç.height=(eA.result.offsetTop-eA.tab_browsing_area.offsetTop-1)+\"px\";}height=d.body.offsetHeight-eA.get_all_toolbar_height()-4;eA.result.Ç.height=height+\"px\";width=d.body.offsetWidth-2;eA.result.Ç.width=width+\"px\";for(i=0;i < eA.inlinePopup.Æ;i++){popup=_$(eA.inlinePopup[i][\"popup_id\"]);maxLeft=d.body.offsetWidth-popup.offsetWidth;maxTop=d.body.offsetHeight-popup.offsetHeight;if(popup.offsetTop > maxTop)popup.Ç.top=maxTop+\"px\";if(popup.offsetLeft > maxLeft)popup.Ç.left=maxLeft+\"px\";}eA.manage_size(Ë);eA.fixLinesHeight(eA.Â.Ê,0,-1);}};EA.Ä.manage_size=Ã(onlyOneTime){if(!eAs[Á.id])return Ì;if(eAs[Á.id][\"displayed\"]==Ë&&Á.ÂFocused){var area_height,resized=Ì;if(!Á.Å['word_wrap']){var area_width=Á.Â.scrollWidth;area_height=Á.Â.scrollHeight;if(Á.isOpera&&Á.isOpera < 9.6){area_width=10000;}if(Á.Â.previous_scrollWidth!=area_width){Á.container.Ç.width=area_width+\"px\";Á.Â.Ç.width=area_width+\"px\";Á.content_highlight.Ç.width=area_width+\"px\";Á.Â.previous_scrollWidth=area_width;resized=Ë;}}if(Á.Å['word_wrap']){newW=Á.Â.offsetWidth;if(Á.isFirefox||Á.isIE)newW-=2;if(Á.isSafari)newW-=6;Á.content_highlight.Ç.width=Á.selection_field_text.Ç.width=Á.selection_field.Ç.width=Á.test_font_size.Ç.width=newW+\"px\";}if(Á.isOpera||Á.isFirefox||Á.isSafari){area_height=Á.getLinePosTop(Á.É[\"nb_line\"]+1);}\nelse{area_height=Á.Â.scrollHeight;}if(Á.Â.previous_scrollHeight!=area_height){Á.container.Ç.height=(area_height+2)+\"px\";Á.Â.Ç.height=area_height+\"px\";Á.content_highlight.Ç.height=area_height+\"px\";Á.Â.previous_scrollHeight=area_height;resized=Ë;}if(Á.É[\"nb_line\"] >=Á.line_number){var newLines='',destDiv=_$(\"line_number\"),start=Á.line_number,end=Á.É[\"nb_line\"]+100;for(i=start+1;i < end;i++){newLines+='<div id=\"line_'+i+'\">'+i+\"</div>\";Á.line_number++;}destDiv.innerHTML=destDiv.innerHTML+newLines;Á.fixLinesHeight(Á.Â.Ê,start,-1);}Á.Â.scrollTop=\"0px\";Á.Â.scrollLeft=\"0px\";if(resized==Ë){Á.scroll_to_view();}}if(!onlyOneTime)setTimeout(\"eA.manage_size();\",100);};EA.Ä.execCommand=Ã(cmd,param){for(var i in Á.plugins){if(typeof(Á.plugins[i].execCommand)==\"Ã\"){if(!Á.plugins[i].execCommand(cmd,param))return;}}switch(cmd){case \"save\":if(Á.Å[\"save_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"save_callback\"]+\"('\"+Á.id+\"',eA.Â.Ê);\");break;case \"load\":if(Á.Å[\"load_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"load_callback\"]+\"('\"+Á.id+\"');\");break;case \"onchange\":if(Á.Å[\"change_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"change_callback\"]+\"('\"+Á.id+\"');\");break;case \"EA_load\":if(Á.Å[\"EA_load_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_load_callback\"]+\"('\"+Á.id+\"');\");break;case \"EA_unload\":if(Á.Å[\"EA_unload_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_unload_callback\"]+\"('\"+Á.id+\"');\");break;case \"toggle_on\":if(Á.Å[\"EA_toggle_on_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_toggle_on_callback\"]+\"('\"+Á.id+\"');\");break;case \"toggle_off\":if(Á.Å[\"EA_toggle_off_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_toggle_off_callback\"]+\"('\"+Á.id+\"');\");break;case \"re_sync\":if(!Á.do_highlight)break;case \"file_switch_on\":if(Á.Å[\"EA_file_switch_on_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_file_switch_on_callback\"]+\"(param);\");break;case \"file_switch_off\":if(Á.Å[\"EA_file_switch_off_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_file_switch_off_callback\"]+\"(param);\");break;case \"file_close\":if(Á.Å[\"EA_file_close_callback\"].Æ>0)return eval(\"È.\"+Á.Å[\"EA_file_close_callback\"]+\"(param);\");break;default:if(typeof(eval(\"eA.\"+cmd))==\"Ã\"){if(Á.Å[\"debug\"])eval(\"eA.\"+cmd+\"(param);\");\nelse try{eval(\"eA.\"+cmd+\"(param);\");}catch(e){};}}};EA.Ä.get_translation=Ã(word,mode){if(mode==\"template\")return È.eAL.translate(word,Á.Å[\"language\"],mode);\nelse return È.eAL.get_word_translation(word,Á.Å[\"language\"]);};EA.Ä.add_plugin=Ã(plug_name,plug_obj){for(var i=0;i<Á.Å[\"plugins\"].Æ;i++){if(Á.Å[\"plugins\"][i]==plug_name){Á.plugins[plug_name]=plug_obj;plug_obj.baseURL=È.eAL.baseURL+\"plugins/\"+plug_name+\"/\";if(typeof(plug_obj.init)==\"Ã\")plug_obj.init();}}};EA.Ä.load_css=Ã(url){try{link=document.createElement(\"link\");link.type=\"text/css\";link.rel=\"Çsheet\";link.media=\"all\";link.href=url;head=document.getElementsByTagName(\"head\");head[0].appendChild(link);}catch(e){document.write(\"<link href='\"+url+\"' rel='Çsheet' type='text/css' />\");}};EA.Ä.load_script=Ã(url){try{script=document.createElement(\"script\");script.type=\"text/javascript\";script.src=url;script.charset=\"UTF-8\";head=document.getElementsByTagName(\"head\");head[0].appendChild(script);}catch(e){document.write(\"<script type='text/javascript' src='\"+url+\"' charset=\\\"UTF-8\\\"><\"+\"/script>\");}};EA.Ä.add_lang=Ã(language,Ês){if(!È.eAL.lang[language])È.eAL.lang[language]={};for(var i in Ês)È.eAL.lang[language][i]=Ês[i];};Ã _$(id){return document.getElementById(id);};var eA=new EA();È.eAL.add_event(window,\"load\",init);Ã init(){setTimeout(\"eA.init();\",10);};	EA.Ä.focus=Ã(){Á.Â.focus();Á.ÂFocused=Ë;};EA.Ä.check_line_selection=Ã(timer_checkup){var changes,infos,new_top,new_width,i;var t1=t2=t2_1=t3=tLines=tend=new Date().getTime();if(!eAs[Á.id])return Ì;if(!Á.smooth_selection&&!Á.do_highlight){}\nelse if(Á.ÂFocused&&eAs[Á.id][\"displayed\"]==Ë&&Á.isResizing==Ì){infos=Á.get_selection_infos();changes=Á.checkTextEvolution(typeof(Á.É['full_text'])=='undefined' ? '':Á.É['full_text'],infos['full_text']);t2=new Date().getTime();if(Á.É[\"line_start\"] !=infos[\"line_start\"]||Á.É[\"line_nb\"] !=infos[\"line_nb\"]||infos[\"full_text\"] !=Á.É[\"full_text\"]||Á.reload_highlight||Á.É[\"selectionStart\"] !=infos[\"selectionStart\"]||Á.É[\"selectionEnd\"] !=infos[\"selectionEnd\"]||!timer_checkup){new_top=Á.getLinePosTop(infos[\"line_start\"]);new_width=Math.max(Á.Â.scrollWidth,Á.container.clientWidth-50);Á.selection_field.Ç.top=Á.selection_field_text.Ç.top=new_top+\"px\";if(!Á.Å['word_wrap']){Á.selection_field.Ç.width=Á.selection_field_text.Ç.width=Á.test_font_size.Ç.width=new_width+\"px\";}if(Á.do_highlight==Ë){var curr_text=infos[\"full_text\"].split(\"\\n\");var content=\"\";var start=Math.max(0,infos[\"line_start\"]-1);var end=Math.min(curr_text.Æ,infos[\"line_start\"]+infos[\"line_nb\"]-1);for(i=start;i< end;i++){content+=curr_text[i]+\"\\n\";}selLength=infos['selectionEnd']-infos['selectionStart'];content=content.substr(0,infos[\"curr_pos\"]-1)+\"\\r\\r\"+content.substr(infos[\"curr_pos\"]-1,selLength)+\"\\r\\r\"+content.substr(infos[\"curr_pos\"]-1+selLength);content='<span>'+content.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(\"\\r\\r\",'</span><strong>').replace(\"\\r\\r\",'</strong><span>')+'</span>';if(Á.isIE||(Á.isOpera&&Á.isOpera < 9.6)){Á.selection_field.innerHTML=\"<pre>\"+content.replace(/^\\r?\\n/,\"<br>\")+\"</pre>\";}\nelse{Á.selection_field.innerHTML=content;}Á.selection_field_text.innerHTML=Á.selection_field.innerHTML;t2_1=new Date().getTime();if(Á.reload_highlight||(infos[\"full_text\"] !=Á.last_text_to_highlight&&(Á.É[\"line_start\"]!=infos[\"line_start\"]||Á.show_line_colors||Á.Å['word_wrap']||Á.É[\"line_nb\"]!=infos[\"line_nb\"]||Á.É[\"nb_line\"]!=infos[\"nb_line\"]))){Á.maj_highlight(infos);}}}t3=new Date().getTime();if(Á.Å['word_wrap']&&infos[\"full_text\"] !=Á.É[\"full_text\"]){if(changes.newText.split(\"\\n\").Æ==1&&Á.É['nb_line']&&infos['nb_line']==Á.É['nb_line']){Á.fixLinesHeight(infos['full_text'],changes.lineStart,changes.lineStart);}\nelse{Á.fixLinesHeight(infos['full_text'],changes.lineStart,-1);}}tLines=new Date().getTime();if(infos[\"line_start\"] !=Á.É[\"line_start\"]||infos[\"curr_pos\"] !=Á.É[\"curr_pos\"]||infos[\"full_text\"].Æ!=Á.É[\"full_text\"].Æ||Á.reload_highlight||!timer_checkup){var selec_char=infos[\"curr_line\"].charAt(infos[\"curr_pos\"]-1);var no_real_move=Ë;if(infos[\"line_nb\"]==1&&(Á.assocBracket[selec_char]||Á.revertAssocBracket[selec_char])){no_real_move=Ì;if(Á.findEndBracket(infos,selec_char)===Ë){_$(\"end_bracket\").Ç.visibility=\"visible\";_$(\"cursor_pos\").Ç.visibility=\"visible\";_$(\"cursor_pos\").innerHTML=selec_char;_$(\"end_bracket\").innerHTML=(Á.assocBracket[selec_char]||Á.revertAssocBracket[selec_char]);}\nelse{_$(\"end_bracket\").Ç.visibility=\"hidden\";_$(\"cursor_pos\").Ç.visibility=\"hidden\";}}\nelse{_$(\"cursor_pos\").Ç.visibility=\"hidden\";_$(\"end_bracket\").Ç.visibility=\"hidden\";}Á.displayToCursorPosition(\"cursor_pos\",infos[\"line_start\"],infos[\"curr_pos\"]-1,infos[\"curr_line\"],no_real_move);if(infos[\"line_nb\"]==1&&infos[\"line_start\"]!=Á.É[\"line_start\"])Á.scroll_to_view();}Á.É=infos;}tend=new Date().getTime();if(timer_checkup){setTimeout(\"eA.check_line_selection(Ë)\",Á.check_line_selection_timer);}};EA.Ä.get_selection_infos=Ã(){var sel={},start,end,len,str;Á.getIESelection();start=Á.Â.selectionStart;end=Á.Â.selectionEnd;if(Á.É[\"selectionStart\"]==start&&Á.É[\"selectionEnd\"]==end&&Á.É[\"full_text\"]==Á.Â.Ê){return Á.É;}if(Á.tabulation!=\"\t\"&&Á.Â.Ê.indexOf(\"\t\")!=-1){len=Á.Â.Ê.Æ;Á.Â.Ê=Á.replace_tab(Á.Â.Ê);start=end=start+(Á.Â.Ê.Æ-len);Á.area_select(start,0);}sel[\"selectionStart\"]=start;sel[\"selectionEnd\"]=end;sel[\"full_text\"]=Á.Â.Ê;sel[\"line_start\"]=1;sel[\"line_nb\"]=1;sel[\"curr_pos\"]=0;sel[\"curr_line\"]=\"\";sel[\"indexOfCursor\"]=0;sel[\"selec_direction\"]=Á.É[\"selec_direction\"];var splitTab=sel[\"full_text\"].split(\"\\n\");var nbLine=Math.max(0,splitTab.Æ);var nbChar=Math.max(0,sel[\"full_text\"].Æ-(nbLine-1));if(sel[\"full_text\"].indexOf(\"\\r\")!=-1)nbChar=nbChar-(nbLine-1);sel[\"nb_line\"]=nbLine;sel[\"nb_char\"]=nbChar;if(start>0){str=sel[\"full_text\"].substr(0,start);sel[\"curr_pos\"]=start-str.lastIndexOf(\"\\n\");sel[\"line_start\"]=Math.max(1,str.split(\"\\n\").Æ);}\nelse{sel[\"curr_pos\"]=1;}if(end>start){sel[\"line_nb\"]=sel[\"full_text\"].substring(start,end).split(\"\\n\").Æ;}sel[\"indexOfCursor\"]=start;sel[\"curr_line\"]=splitTab[Math.max(0,sel[\"line_start\"]-1)];if(sel[\"selectionStart\"]==Á.É[\"selectionStart\"]){if(sel[\"selectionEnd\"]>Á.É[\"selectionEnd\"])sel[\"selec_direction\"]=\"down\";\nelse if(sel[\"selectionEnd\"]==Á.É[\"selectionStart\"])sel[\"selec_direction\"]=Á.É[\"selec_direction\"];}\nelse if(sel[\"selectionStart\"]==Á.É[\"selectionEnd\"]&&sel[\"selectionEnd\"]>Á.É[\"selectionEnd\"]){sel[\"selec_direction\"]=\"down\";}\nelse{sel[\"selec_direction\"]=\"up\";}_$(\"nbLine\").innerHTML=nbLine;_$(\"nbChar\").innerHTML=nbChar;_$(\"linePos\").innerHTML=sel[\"line_start\"];_$(\"currPos\").innerHTML=sel[\"curr_pos\"];return sel;};EA.Ä.getIESelection=Ã(){var selectionStart,selectionEnd,range,stored_range;if(!Á.isIE)return Ì;if(Á.Å['word_wrap'])Á.Â.wrap='off';try{range=document.selection.createRange();stored_range=range.duplicate();stored_range.moveToElementText(Á.Â);stored_range.setEndPoint('EndToEnd',range);if(stored_range.ÈElement()!=Á.Â)throw \"invalid focus\";var scrollTop=Á.result.scrollTop+document.body.scrollTop;var relative_top=range.offsetTop-È.calculeOffsetTop(Á.Â)+scrollTop;var line_start=Math.round((relative_top / Á.lineHeight)+1);var line_nb=Math.round(range.boundingHeight / Á.lineHeight);selectionStart=stored_range.text.Æ-range.text.Æ;selectionStart+=(line_start-Á.Â.Ê.substr(0,selectionStart).split(\"\\n\").Æ)*2;selectionStart-=(line_start-Á.Â.Ê.substr(0,selectionStart).split(\"\\n\").Æ)* 2;selectionEnd=selectionStart+range.text.Æ;selectionEnd+=(line_start+line_nb-1-Á.Â.Ê.substr(0,selectionEnd).split(\"\\n\").Æ)*2;Á.Â.selectionStart=selectionStart;Á.Â.selectionEnd=selectionEnd;}catch(e){}if(Á.Å['word_wrap'])Á.Â.wrap='soft';};EA.Ä.setIESelection=Ã(){var a=Á.Â,nbLineStart,nbLineEnd,range;if(!Á.isIE)return Ì;nbLineStart=a.Ê.substr(0,a.selectionStart).split(\"\\n\").Æ-1;nbLineEnd=a.Ê.substr(0,a.selectionEnd).split(\"\\n\").Æ-1;range=document.selection.createRange();range.moveToElementText(a);range.setEndPoint('EndToStart',range);range.moveStart('character',a.selectionStart-nbLineStart);range.moveEnd('character',a.selectionEnd-nbLineEnd-(a.selectionStart-nbLineStart));range.select();};EA.Ä.checkTextEvolution=Ã(lastText,newText){var ch={},baseStep=200,cpt=0,end,step,tStart=new Date().getTime();end=Math.min(newText.Æ,lastText.Æ);step=baseStep;while(cpt<end&&step>=1){if(lastText.substr(cpt,step)==newText.substr(cpt,step)){cpt+=step;}\nelse{step=Math.floor(step/2);}}ch.posStart=cpt;ch.lineStart=newText.substr(0,ch.posStart).split(\"\\n\").Æ-1;cpt_last=lastText.Æ;cpt=newText.Æ;step=baseStep;while(cpt>=0&&cpt_last>=0&&step>=1){if(lastText.substr(cpt_last-step,step)==newText.substr(cpt-step,step)){cpt-=step;cpt_last-=step;}\nelse{step=Math.floor(step/2);}}ch.posNewEnd=cpt;ch.posLastEnd=cpt_last;if(ch.posNewEnd<=ch.posStart){if(lastText.Æ < newText.Æ){ch.posNewEnd=ch.posStart+newText.Æ-lastText.Æ;ch.posLastEnd=ch.posStart;}\nelse{ch.posLastEnd=ch.posStart+lastText.Æ-newText.Æ;ch.posNewEnd=ch.posStart;}}ch.newText=newText.substring(ch.posStart,ch.posNewEnd);ch.lastText=lastText.substring(ch.posStart,ch.posLastEnd);ch.lineNewEnd=newText.substr(0,ch.posNewEnd).split(\"\\n\").Æ-1;ch.lineLastEnd=lastText.substr(0,ch.posLastEnd).split(\"\\n\").Æ-1;ch.newTextLine=newText.split(\"\\n\").slice(ch.lineStart,ch.lineNewEnd+1).join(\"\\n\");ch.lastTextLine=lastText.split(\"\\n\").slice(ch.lineStart,ch.lineLastEnd+1).join(\"\\n\");return ch;};EA.Ä.tab_selection=Ã(){if(Á.is_tabbing)return;Á.is_tabbing=Ë;Á.getIESelection();var start=Á.Â.selectionStart;var end=Á.Â.selectionEnd;var insText=Á.Â.Ê.substring(start,end);var pos_start=start;var pos_end=end;if(insText.Æ==0){Á.Â.Ê=Á.Â.Ê.substr(0,start)+Á.tabulation+Á.Â.Ê.substr(end);pos_start=start+Á.tabulation.Æ;pos_end=pos_start;}\nelse{start=Math.max(0,Á.Â.Ê.substr(0,start).lastIndexOf(\"\\n\")+1);endText=Á.Â.Ê.substr(end);startText=Á.Â.Ê.substr(0,start);tmp=Á.Â.Ê.substring(start,end).split(\"\\n\");insText=Á.tabulation+tmp.join(\"\\n\"+Á.tabulation);Á.Â.Ê=startText+insText+endText;pos_start=start;pos_end=Á.Â.Ê.indexOf(\"\\n\",startText.Æ+insText.Æ);if(pos_end==-1)pos_end=Á.Â.Ê.Æ;}Á.Â.selectionStart=pos_start;Á.Â.selectionEnd=pos_end;if(Á.isIE){Á.setIESelection();setTimeout(\"eA.is_tabbing=Ì;\",100);}\nelse{Á.is_tabbing=Ì;}};EA.Ä.invert_tab_selection=Ã(){var t=Á,a=Á.Â;if(t.is_tabbing)return;t.is_tabbing=Ë;t.getIESelection();var start=a.selectionStart;var end=a.selectionEnd;var insText=a.Ê.substring(start,end);var pos_start=start;var pos_end=end;if(insText.Æ==0){if(a.Ê.substring(start-t.tabulation.Æ,start)==t.tabulation){a.Ê=a.Ê.substr(0,start-t.tabulation.Æ)+a.Ê.substr(end);pos_start=Math.max(0,start-t.tabulation.Æ);pos_end=pos_start;}}\nelse{start=a.Ê.substr(0,start).lastIndexOf(\"\\n\")+1;endText=a.Ê.substr(end);startText=a.Ê.substr(0,start);tmp=a.Ê.substring(start,end).split(\"\\n\");insText=\"\";for(i=0;i<tmp.Æ;i++){for(j=0;j<t.tab_nb_char;j++){if(tmp[i].charAt(0)==\"\t\"){tmp[i]=tmp[i].substr(1);j=t.tab_nb_char;}\nelse if(tmp[i].charAt(0)==\" \")tmp[i]=tmp[i].substr(1);}insText+=tmp[i];if(i<tmp.Æ-1)insText+=\"\\n\";}a.Ê=startText+insText+endText;pos_start=start;pos_end=a.Ê.indexOf(\"\\n\",startText.Æ+insText.Æ);if(pos_end==-1)pos_end=a.Ê.Æ;}a.selectionStart=pos_start;a.selectionEnd=pos_end;if(t.isIE){t.setIESelection();setTimeout(\"eA.is_tabbing=Ì;\",100);}\nelse t.is_tabbing=Ì;};EA.Ä.press_enter=Ã(){if(!Á.smooth_selection)return Ì;Á.getIESelection();var scrollTop=Á.result.scrollTop;var scrollLeft=Á.result.scrollLeft;var start=Á.Â.selectionStart;var end=Á.Â.selectionEnd;var start_last_line=Math.max(0,Á.Â.Ê.substring(0,start).lastIndexOf(\"\\n\")+1);var begin_line=Á.Â.Ê.substring(start_last_line,start).replace(/^([ \t]*).*/gm,\"$1\");var lineStart=Á.Â.Ê.substring(0,start).split(\"\\n\").Æ;if(begin_line==\"\\n\"||begin_line==\"\\r\"||begin_line.Æ==0){return Ì;}if(Á.isIE||(Á.isOpera&&Á.isOpera < 9.6)){begin_line=\"\\r\\n\"+begin_line;}\nelse{begin_line=\"\\n\"+begin_line;}Á.Â.Ê=Á.Â.Ê.substring(0,start)+begin_line+Á.Â.Ê.substring(end);Á.area_select(start+begin_line.Æ,0);if(Á.isIE){Á.result.scrollTop=scrollTop;Á.result.scrollLeft=scrollLeft;}return Ë;};EA.Ä.findEndBracket=Ã(infos,bracket){var start=infos[\"indexOfCursor\"];var normal_order=Ë;if(Á.assocBracket[bracket])endBracket=Á.assocBracket[bracket];\nelse if(Á.revertAssocBracket[bracket]){endBracket=Á.revertAssocBracket[bracket];normal_order=Ì;}var end=-1;var nbBracketOpen=0;for(var i=start;i<infos[\"full_text\"].Æ&&i>=0;){if(infos[\"full_text\"].charAt(i)==endBracket){nbBracketOpen--;if(nbBracketOpen<=0){end=i;break;}}\nelse if(infos[\"full_text\"].charAt(i)==bracket)nbBracketOpen++;if(normal_order)i++;\nelse i--;}if(end==-1)return Ì;var endLastLine=infos[\"full_text\"].substr(0,end).lastIndexOf(\"\\n\");if(endLastLine==-1)line=1;\nelse line=infos[\"full_text\"].substr(0,endLastLine).split(\"\\n\").Æ+1;var curPos=end-endLastLine-1;var endLineLength=infos[\"full_text\"].substring(end).split(\"\\n\")[0].Æ;Á.displayToCursorPosition(\"end_bracket\",line,curPos,infos[\"full_text\"].substring(endLastLine+1,end+endLineLength));return Ë;};EA.Ä.displayToCursorPosition=Ã(id,start_line,cur_pos,lineContent,no_real_move){var elem,dest,content,posLeft=0,posTop,fixPadding,topOffset,endElem;elem=Á.test_font_size;dest=_$(id);content=\"<span id='test_font_size_inner'>\"+lineContent.substr(0,cur_pos).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\")+\"</span><span id='endTestFont'>\"+lineContent.substr(cur_pos).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\")+\"</span>\";if(Á.isIE||(Á.isOpera&&Á.isOpera < 9.6)){elem.innerHTML=\"<pre>\"+content.replace(/^\\r?\\n/,\"<br>\")+\"</pre>\";}\nelse{elem.innerHTML=content;}endElem=_$('endTestFont');topOffset=endElem.offsetTop;fixPadding=parseInt(Á.content_highlight.Ç.paddingLeft.replace(\"px\",\"\"));posLeft=45+endElem.offsetLeft+(!isNaN(fixPadding)&&topOffset > 0 ? fixPadding:0);posTop=Á.getLinePosTop(start_line)+topOffset;if(Á.isIE&&cur_pos > 0&&endElem.offsetLeft==0){posTop+=Á.lineHeight;}if(no_real_move!=Ë){dest.Ç.top=posTop+\"px\";dest.Ç.left=posLeft+\"px\";}dest.cursor_top=posTop;dest.cursor_left=posLeft;};EA.Ä.getLinePosTop=Ã(start_line){var elem=_$('line_'+start_line),posTop=0;if(elem)posTop=elem.offsetTop;\nelse posTop=Á.lineHeight *(start_line-1);return posTop;};EA.Ä.getTextHeight=Ã(text){var t=Á,elem,height;elem=t.test_font_size;content=text.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\");if(t.isIE||(Á.isOpera&&Á.isOpera < 9.6)){elem.innerHTML=\"<pre>\"+content.replace(/^\\r?\\n/,\"<br>\")+\"</pre>\";}\nelse{elem.innerHTML=content;}height=elem.offsetHeight;height=Math.max(1,Math.floor(elem.offsetHeight / Á.lineHeight))* Á.lineHeight;return height;};EA.Ä.fixLinesHeight=Ã(textValue,lineStart,lineEnd){var aText=textValue.split(\"\\n\");if(lineEnd==-1)lineEnd=aText.Æ-1;for(var i=Math.max(0,lineStart);i <=lineEnd;i++){if(elem=_$('line_'+(i+1))){elem.Ç.height=typeof(aText[i])!=\"undefined\" ? Á.getTextHeight(aText[i])+\"px\":Á.lineHeight;}}};EA.Ä.area_select=Ã(start,Æ){Á.Â.focus();start=Math.max(0,Math.min(Á.Â.Ê.Æ,start));end=Math.max(start,Math.min(Á.Â.Ê.Æ,start+Æ));if(Á.isIE){Á.Â.selectionStart=start;Á.Â.selectionEnd=end;Á.setIESelection();}\nelse{if(Á.isOpera&&Á.isOpera < 9.6){Á.Â.setSelectionRange(0,0);}Á.Â.setSelectionRange(start,end);}Á.check_line_selection();};EA.Ä.area_get_selection=Ã(){var text=\"\";if(document.selection){var range=document.selection.createRange();text=range.text;}\nelse{text=Á.Â.Ê.substring(Á.Â.selectionStart,Á.Â.selectionEnd);}return text;}; EA.Ä.replace_tab=Ã(text){return text.replace(/((\\n?)([^\t\\n]*)\t)/gi,eA.smartTab);};EA.Ä.smartTab=Ã(){val=\"                   \";return EA.Ä.smartTab.arguments[2]+EA.Ä.smartTab.arguments[3]+val.substr(0,eA.tab_nb_char-(EA.Ä.smartTab.arguments[3].Æ)%eA.tab_nb_char);};EA.Ä.show_waiting_screen=Ã(){width=Á.editor_area.offsetWidth;height=Á.editor_area.offsetHeight;if(!(Á.isIE&&Á.isIE<6)){width-=2;height-=2;}Á.processing_screen.Ç.display=\"block\";Á.processing_screen.Ç.width=width+\"px\";Á.processing_screen.Ç.height=height+\"px\";Á.waiting_screen_displayed=Ë;};EA.Ä.hide_waiting_screen=Ã(){Á.processing_screen.Ç.display=\"none\";Á.waiting_screen_displayed=Ì;};EA.Ä.add_Ç=Ã(Çs){if(Çs.Æ>0){newcss=document.createElement(\"Ç\");newcss.type=\"text/css\";newcss.media=\"all\";if(newcss.ÇSheet){newcss.ÇSheet.cssText=Çs;}\nelse{newcss.appendChild(document.createTextNode(Çs));}document.getElementsByTagName(\"head\")[0].appendChild(newcss);}};EA.Ä.set_font=Ã(family,size){var t=Á,a=Á.Â,s=Á.Å,elem_font,i,elem;var elems=[\"Â\",\"content_highlight\",\"cursor_pos\",\"end_bracket\",\"selection_field\",\"selection_field_text\",\"line_number\"];if(family&&family!=\"\")s[\"font_family\"]=family;if(size&&size>0)s[\"font_size\"]=size;if(t.isOpera&&t.isOpera < 9.6)s['font_family']=\"monospace\";if(elem_font=_$(\"area_font_size\")){for(i=0;i < elem_font.Æ;i++){if(elem_font.options[i].Ê&&elem_font.options[i].Ê==s[\"font_size\"])elem_font.options[i].selected=Ë;}}if(t.isFirefox){var nbTry=3;do{var div1=document.createElement('div'),text1=document.createElement('Â');var Çs={width:'40px',overflow:'scroll',zIndex:50,visibility:'hidden',fontFamily:s[\"font_family\"],fontSize:s[\"font_size\"]+\"pt\",lineHeight:t.lineHeight+\"px\",padding:'0',margin:'0',border:'none',whiteSpace:'nowrap'};var diff,changed=Ì;for(i in Çs){div1.Ç[ i ]=Çs[i];text1.Ç[ i ]=Çs[i];}text1.wrap='off';text1.setAttribute('wrap','off');t.container.appendChild(div1);t.container.appendChild(text1);div1.innerHTML=text1.Ê='azertyuiopqsdfghjklm';div1.innerHTML=text1.Ê=text1.Ê+'wxcvbn^p*ù$!:;,,';diff=text1.scrollWidth-div1.scrollWidth;if(Math.abs(diff)>=2){s[\"font_size\"]++;changed=Ë;}t.container.removeChild(div1);t.container.removeChild(text1);nbTry--;}while(changed&&nbTry > 0);}elem=t.test_font_size;elem.Ç.fontFamily=\"\"+s[\"font_family\"];elem.Ç.fontSize=s[\"font_size\"]+\"pt\";elem.innerHTML=\"0\";t.lineHeight=elem.offsetHeight;for(i=0;i<elems.Æ;i++){elem=_$(elems[i]);elem.Ç.fontFamily=s[\"font_family\"];elem.Ç.fontSize=s[\"font_size\"]+\"pt\";elem.Ç.lineHeight=t.lineHeight+\"px\";}t.add_Ç(\"pre{font-family:\"+s[\"font_family\"]+\"}\");if((t.isOpera&&t.isOpera < 9.6)||t.isIE >=8){var parNod=a.ÈNode,nxtSib=a.nextSibling,start=a.selectionStart,end=a.selectionEnd;parNod.removeChild(a);parNod.insertBefore(a,nxtSib);t.area_select(start,end-start);}Á.focus();Á.update_size();Á.check_line_selection();};EA.Ä.change_font_size=Ã(){var size=_$(\"area_font_size\").Ê;if(size>0)Á.set_font(\"\",size);};EA.Ä.open_inline_popup=Ã(popup_id){Á.close_all_inline_popup();var popup=_$(popup_id);var editor=_$(\"editor\");for(var i=0;i<Á.inlinePopup.Æ;i++){if(Á.inlinePopup[i][\"popup_id\"]==popup_id){var icon=_$(Á.inlinePopup[i][\"icon_id\"]);if(icon){Á.switchClassSticky(icon,'editAreaButtonSelected',Ë);break;}}}popup.Ç.height=\"auto\";popup.Ç.overflow=\"visible\";if(document.body.offsetHeight< popup.offsetHeight){popup.Ç.height=(document.body.offsetHeight-10)+\"px\";popup.Ç.overflow=\"auto\";}if(!popup.positionned){var new_left=editor.offsetWidth /2-popup.offsetWidth /2;var new_top=editor.offsetHeight /2-popup.offsetHeight /2;popup.Ç.left=new_left+\"px\";popup.Ç.top=new_top+\"px\";popup.positionned=Ë;}popup.Ç.visibility=\"visible\";};EA.Ä.close_inline_popup=Ã(popup_id){var popup=_$(popup_id);for(var i=0;i<Á.inlinePopup.Æ;i++){if(Á.inlinePopup[i][\"popup_id\"]==popup_id){var icon=_$(Á.inlinePopup[i][\"icon_id\"]);if(icon){Á.switchClassSticky(icon,'editAreaButtonNormal',Ì);break;}}}popup.Ç.visibility=\"hidden\";};EA.Ä.close_all_inline_popup=Ã(e){for(var i=0;i<Á.inlinePopup.Æ;i++){Á.close_inline_popup(Á.inlinePopup[i][\"popup_id\"]);}Á.Â.focus();};EA.Ä.show_help=Ã(){Á.open_inline_popup(\"edit_area_help\");};EA.Ä.new_document=Ã(){Á.Â.Ê=\"\";Á.area_select(0,0);};EA.Ä.get_all_toolbar_height=Ã(){var area=_$(\"editor\");var results=È.getChildren(area,\"div\",\"class\",\"area_toolbar\",\"all\",\"0\");var height=0;for(var i=0;i<results.Æ;i++){height+=results[i].offsetHeight;}return height;};EA.Ä.go_to_line=Ã(line){if(!line){var icon=_$(\"go_to_line\");if(icon !=null){Á.restoreClass(icon);Á.switchClassSticky(icon,'editAreaButtonSelected',Ë);}line=prompt(Á.get_translation(\"go_to_line_prompt\"));if(icon !=null)Á.switchClassSticky(icon,'editAreaButtonNormal',Ì);}if(line&&line!=null&&line.search(/^[0-9]+$/)!=-1){var start=0;var lines=Á.Â.Ê.split(\"\\n\");if(line > lines.Æ)start=Á.Â.Ê.Æ;\nelse{for(var i=0;i<Math.min(line-1,lines.Æ);i++)start+=lines[i].Æ+1;}Á.area_select(start,0);}};EA.Ä.change_smooth_selection_mode=Ã(setTo){if(Á.do_highlight)return;if(setTo !=null){if(setTo===Ì)Á.smooth_selection=Ë;\nelse Á.smooth_selection=Ì;}var icon=_$(\"change_smooth_selection\");Á.Â.focus();if(Á.smooth_selection===Ë){Á.switchClassSticky(icon,'editAreaButtonNormal',Ì);Á.smooth_selection=Ì;Á.selection_field.Ç.display=\"none\";_$(\"cursor_pos\").Ç.display=\"none\";_$(\"end_bracket\").Ç.display=\"none\";}\nelse{Á.switchClassSticky(icon,'editAreaButtonSelected',Ì);Á.smooth_selection=Ë;Á.selection_field.Ç.display=\"block\";_$(\"cursor_pos\").Ç.display=\"block\";_$(\"end_bracket\").Ç.display=\"block\";}};EA.Ä.scroll_to_view=Ã(show){var zone,lineElem;if(!Á.smooth_selection)return;zone=_$(\"result\");var cursor_pos_top=_$(\"cursor_pos\").cursor_top;if(show==\"bottom\"){cursor_pos_top+=Á.getLinePosTop(Á.É['line_start']+Á.É['line_nb']-1);}var max_height_visible=zone.clientHeight+zone.scrollTop;var miss_top=cursor_pos_top+Á.lineHeight-max_height_visible;if(miss_top>0){zone.scrollTop=zone.scrollTop+miss_top;}\nelse if(zone.scrollTop > cursor_pos_top){zone.scrollTop=cursor_pos_top;}var cursor_pos_left=_$(\"cursor_pos\").cursor_left;var max_width_visible=zone.clientWidth+zone.scrollLeft;var miss_left=cursor_pos_left+10-max_width_visible;if(miss_left>0){zone.scrollLeft=zone.scrollLeft+miss_left+50;}\nelse if(zone.scrollLeft > cursor_pos_left){zone.scrollLeft=cursor_pos_left;}\nelse if(zone.scrollLeft==45){zone.scrollLeft=0;}};EA.Ä.check_undo=Ã(only_once){if(!eAs[Á.id])return Ì;if(Á.ÂFocused&&eAs[Á.id][\"displayed\"]==Ë){var text=Á.Â.Ê;if(Á.previous.Æ<=1)Á.switchClassSticky(_$(\"undo\"),'editAreaButtonDisabled',Ë);if(!Á.previous[Á.previous.Æ-1]||Á.previous[Á.previous.Æ-1][\"text\"] !=text){Á.previous.push({\"text\":text,\"selStart\":Á.Â.selectionStart,\"selEnd\":Á.Â.selectionEnd});if(Á.previous.Æ > Á.Å[\"max_undo\"]+1)Á.previous.shift();}if(Á.previous.Æ >=2)Á.switchClassSticky(_$(\"undo\"),'editAreaButtonNormal',Ì);}if(!only_once)setTimeout(\"eA.check_undo()\",3000);};EA.Ä.undo=Ã(){if(Á.previous.Æ > 0){Á.getIESelection();Á.next.push({\"text\":Á.Â.Ê,\"selStart\":Á.Â.selectionStart,\"selEnd\":Á.Â.selectionEnd});var prev=Á.previous.pop();if(prev[\"text\"]==Á.Â.Ê&&Á.previous.Æ > 0)prev=Á.previous.pop();Á.Â.Ê=prev[\"text\"];Á.last_undo=prev[\"text\"];Á.area_select(prev[\"selStart\"],prev[\"selEnd\"]-prev[\"selStart\"]);Á.switchClassSticky(_$(\"redo\"),'editAreaButtonNormal',Ì);Á.resync_highlight(Ë);Á.check_file_changes();}};EA.Ä.redo=Ã(){if(Á.next.Æ > 0){var next=Á.next.pop();Á.previous.push(next);Á.Â.Ê=next[\"text\"];Á.last_undo=next[\"text\"];Á.area_select(next[\"selStart\"],next[\"selEnd\"]-next[\"selStart\"]);Á.switchClassSticky(_$(\"undo\"),'editAreaButtonNormal',Ì);Á.resync_highlight(Ë);Á.check_file_changes();}if(Á.next.Æ==0)Á.switchClassSticky(_$(\"redo\"),'editAreaButtonDisabled',Ë);};EA.Ä.check_redo=Ã(){if(eA.next.Æ==0||eA.Â.Ê!=eA.last_undo){eA.next=[];eA.switchClassSticky(_$(\"redo\"),'editAreaButtonDisabled',Ë);}\nelse{Á.switchClassSticky(_$(\"redo\"),'editAreaButtonNormal',Ì);}};EA.Ä.switchClass=Ã(element,class_name,lock_state){var lockChanged=Ì;if(typeof(lock_state)!=\"undefined\"&&element !=null){element.classLock=lock_state;lockChanged=Ë;}if(element !=null&&(lockChanged||!element.classLock)){element.oldClassName=element.className;element.className=class_name;}};EA.Ä.restoreAndSwitchClass=Ã(element,class_name){if(element !=null&&!element.classLock){Á.restoreClass(element);Á.switchClass(element,class_name);}};EA.Ä.restoreClass=Ã(element){if(element !=null&&element.oldClassName&&!element.classLock){element.className=element.oldClassName;element.oldClassName=null;}};EA.Ä.setClassLock=Ã(element,lock_state){if(element !=null)element.classLock=lock_state;};EA.Ä.switchClassSticky=Ã(element,class_name,lock_state){var lockChanged=Ì;if(typeof(lock_state)!=\"undefined\"&&element !=null){element.classLock=lock_state;lockChanged=Ë;}if(element !=null&&(lockChanged||!element.classLock)){element.className=class_name;element.oldClassName=class_name;}};EA.Ä.scroll_page=Ã(params){var dir=params[\"dir\"],shift_pressed=params[\"shift\"];var lines=Á.Â.Ê.split(\"\\n\");var new_pos=0,Æ=0,char_left=0,line_nb=0,curLine=0;var toScrollAmount=_$(\"result\").clientHeight-30;var nbLineToScroll=0,diff=0;if(dir==\"up\"){nbLineToScroll=Math.ceil(toScrollAmount / Á.lineHeight);for(i=Á.É[\"line_start\"];i-diff > Á.É[\"line_start\"]-nbLineToScroll;i--){if(elem=_$('line_'+i)){diff+=Math.floor((elem.offsetHeight-1)/ Á.lineHeight);}}nbLineToScroll-=diff;if(Á.É[\"selec_direction\"]==\"up\"){for(line_nb=0;line_nb< Math.min(Á.É[\"line_start\"]-nbLineToScroll,lines.Æ);line_nb++){new_pos+=lines[line_nb].Æ+1;}char_left=Math.min(lines[Math.min(lines.Æ-1,line_nb)].Æ,Á.É[\"curr_pos\"]-1);if(shift_pressed)Æ=Á.É[\"selectionEnd\"]-new_pos-char_left;Á.area_select(new_pos+char_left,Æ);view=\"top\";}\nelse{view=\"bottom\";for(line_nb=0;line_nb< Math.min(Á.É[\"line_start\"]+Á.É[\"line_nb\"]-1-nbLineToScroll,lines.Æ);line_nb++){new_pos+=lines[line_nb].Æ+1;}char_left=Math.min(lines[Math.min(lines.Æ-1,line_nb)].Æ,Á.É[\"curr_pos\"]-1);if(shift_pressed){start=Math.min(Á.É[\"selectionStart\"],new_pos+char_left);Æ=Math.max(new_pos+char_left,Á.É[\"selectionStart\"])-start;if(new_pos+char_left < Á.É[\"selectionStart\"])view=\"top\";}\nelse start=new_pos+char_left;Á.area_select(start,Æ);}}\nelse{var nbLineToScroll=Math.floor(toScrollAmount / Á.lineHeight);for(i=Á.É[\"line_start\"];i+diff < Á.É[\"line_start\"]+nbLineToScroll;i++){if(elem=_$('line_'+i)){diff+=Math.floor((elem.offsetHeight-1)/ Á.lineHeight);}}nbLineToScroll-=diff;if(Á.É[\"selec_direction\"]==\"down\"){view=\"bottom\";for(line_nb=0;line_nb< Math.min(Á.É[\"line_start\"]+Á.É[\"line_nb\"]-2+nbLineToScroll,lines.Æ);line_nb++){if(line_nb==Á.É[\"line_start\"]-1)char_left=Á.É[\"selectionStart\"]-new_pos;new_pos+=lines[line_nb].Æ+1;}if(shift_pressed){Æ=Math.abs(Á.É[\"selectionStart\"]-new_pos);Æ+=Math.min(lines[Math.min(lines.Æ-1,line_nb)].Æ,Á.É[\"curr_pos\"]);Á.area_select(Math.min(Á.É[\"selectionStart\"],new_pos),Æ);}\nelse{Á.area_select(new_pos+char_left,0);}}\nelse{view=\"top\";for(line_nb=0;line_nb< Math.min(Á.É[\"line_start\"]+nbLineToScroll-1,lines.Æ,lines.Æ);line_nb++){if(line_nb==Á.É[\"line_start\"]-1)char_left=Á.É[\"selectionStart\"]-new_pos;new_pos+=lines[line_nb].Æ+1;}if(shift_pressed){Æ=Math.abs(Á.É[\"selectionEnd\"]-new_pos-char_left);Æ+=Math.min(lines[Math.min(lines.Æ-1,line_nb)].Æ,Á.É[\"curr_pos\"])-char_left-1;Á.area_select(Math.min(Á.É[\"selectionEnd\"],new_pos+char_left),Æ);if(new_pos+char_left > Á.É[\"selectionEnd\"])view=\"bottom\";}\nelse{Á.area_select(new_pos+char_left,0);}}}Á.check_line_selection();Á.scroll_to_view(view);};EA.Ä.start_resize=Ã(e){È.eAL.resize[\"id\"]=eA.id;È.eAL.resize[\"start_x\"]=(e)? e.pageX:event.x+document.body.scrollLeft;È.eAL.resize[\"start_y\"]=(e)? e.pageY:event.y+document.body.scrollTop;if(eA.isIE){eA.Â.focus();eA.getIESelection();}È.eAL.resize[\"selectionStart\"]=eA.Â.selectionStart;È.eAL.resize[\"selectionEnd\"]=eA.Â.selectionEnd;È.eAL.start_resize_area();};EA.Ä.toggle_full_screen=Ã(to){var t=Á,p=È,a=t.Â,html,frame,selStart,selEnd,old,icon;if(typeof(to)==\"undefined\")to=!t.fullscreen['isFull'];old=t.fullscreen['isFull'];t.fullscreen['isFull']=to;icon=_$(\"fullscreen\");selStart=t.Â.selectionStart;selEnd=t.Â.selectionEnd;html=p.document.getElementsByTagName(\"html\")[0];frame=p.document.getElementById(\"frame_\"+t.id);if(to&&to!=old){t.fullscreen['old_overflow']=p.get_css_property(html,\"overflow\");t.fullscreen['old_height']=p.get_css_property(html,\"height\");t.fullscreen['old_width']=p.get_css_property(html,\"width\");t.fullscreen['old_scrollTop']=html.scrollTop;t.fullscreen['old_scrollLeft']=html.scrollLeft;t.fullscreen['old_zIndex']=p.get_css_property(frame,\"z-index\");if(t.isOpera){html.Ç.height=\"100%\";html.Ç.width=\"100%\";}html.Ç.overflow=\"hidden\";html.scrollTop=0;html.scrollLeft=0;frame.Ç.position=\"absolute\";frame.Ç.width=html.clientWidth+\"px\";frame.Ç.height=html.clientHeight+\"px\";frame.Ç.display=\"block\";frame.Ç.zIndex=\"999999\";frame.Ç.top=\"0px\";frame.Ç.left=\"0px\";frame.Ç.top=\"-\"+p.calculeOffsetTop(frame)+\"px\";frame.Ç.left=\"-\"+p.calculeOffsetLeft(frame)+\"px\";t.switchClassSticky(icon,'editAreaButtonSelected',Ì);t.fullscreen['allow_resize']=t.resize_allowed;t.allow_resize(Ì);if(t.isFirefox){parent.eAL.execCommand(t.id,\"update_size();\");t.area_select(selStart,selEnd-selStart);t.scroll_to_view();t.focus();}\nelse{setTimeout(\"pare.eAL.execCommand('\"+t.id+\"','update_size();');eA.focus();\",10);}}\nelse if(to!=old){frame.Ç.position=\"static\";frame.Ç.zIndex=t.fullscreen['old_zIndex'];if(t.isOpera){html.Ç.height=\"auto\";html.Ç.width=\"auto\";html.Ç.overflow=\"auto\";}\nelse if(t.isIE&&p!=top){html.Ç.overflow=\"auto\";}\nelse{html.Ç.overflow=t.fullscreen['old_overflow'];}html.scrollTop=t.fullscreen['old_scrollTop'];html.scrollLeft=t.fullscreen['old_scrollLeft'];p.eAL.hide(t.id);p.eAL.show(t.id);t.switchClassSticky(icon,'editAreaButtonNormal',Ì);if(t.fullscreen['allow_resize'])t.allow_resize(t.fullscreen['allow_resize']);if(t.isFirefox){t.area_select(selStart,selEnd-selStart);setTimeout(\"eA.scroll_to_view();\",10);}}};EA.Ä.allow_resize=Ã(allow){var resize=_$(\"resize_area\");if(allow){resize.Ç.visibility=\"visible\";È.eAL.add_event(resize,\"mouseup\",eA.start_resize);}\nelse{resize.Ç.visibility=\"hidden\";È.eAL.remove_event(resize,\"mouseup\",eA.start_resize);}Á.resize_allowed=allow;};EA.Ä.change_syntax=Ã(new_syntax,is_waiting){if(new_syntax==Á.Å['syntax'])return Ë;var founded=Ì;for(var i=0;i<Á.syntax_list.Æ;i++){if(Á.syntax_list[i]==new_syntax)founded=Ë;}if(founded==Ë){if(!È.eAL.load_syntax[new_syntax]){if(!is_waiting)È.eAL.load_script(È.eAL.baseURL+\"reg_syntax/\"+new_syntax+\".js\");setTimeout(\"eA.change_syntax('\"+new_syntax+\"',Ë);\",100);Á.show_waiting_screen();}\nelse{if(!Á.allready_used_syntax[new_syntax]){È.eAL.init_syntax_regexp();Á.add_Ç(È.eAL.syntax[new_syntax][\"Çs\"]);Á.allready_used_syntax[new_syntax]=Ë;}var sel=_$(\"syntax_selection\");if(sel&&sel.Ê!=new_syntax){for(var i=0;i<sel.Æ;i++){if(sel.options[i].Ê&&sel.options[i].Ê==new_syntax)sel.options[i].selected=Ë;}}Á.Å['syntax']=new_syntax;Á.resync_highlight(Ë);Á.hide_waiting_screen();return Ë;}}return Ì;};EA.Ä.set_editable=Ã(is_editable){if(is_editable){document.body.className=\"\";Á.Â.readOnly=Ì;Á.is_editable=Ë;}\nelse{document.body.className=\"non_editable\";Á.Â.readOnly=Ë;Á.is_editable=Ì;}if(eAs[Á.id][\"displayed\"]==Ë)Á.update_size();};EA.Ä.toggle_word_wrap=Ã(){Á.set_word_wrap(!Á.Å['word_wrap']);};EA.Ä.set_word_wrap=Ã(to){var t=Á,a=t.Â;if(t.isOpera){Á.Å['word_wrap']=Ì;t.switchClassSticky(_$(\"word_wrap\"),'editAreaButtonDisabled',Ë);return Ì;}if(to){wrap_mode='soft';Á.container.className+=' word_wrap';Á.container.Ç.width=\"\";Á.content_highlight.Ç.width=\"\";a.Ç.width=\"100%\";if(t.isIE&&t.isIE < 7){a.Ç.width=(a.offsetWidth-5)+\"px\";}t.switchClassSticky(_$(\"word_wrap\"),'editAreaButtonSelected',Ì);}\nelse{wrap_mode='off';Á.container.className=Á.container.className.replace(/word_wrap/g,'');t.switchClassSticky(_$(\"word_wrap\"),'editAreaButtonNormal',Ë);}Á.Â.previous_scrollWidth='';Á.Â.previous_scrollHeight='';a.wrap=wrap_mode;a.setAttribute('wrap',wrap_mode);if(!Á.isIE){var start=a.selectionStart,end=a.selectionEnd;var parNod=a.ÈNode,nxtSib=a.nextSibling;parNod.removeChild(a);parNod.insertBefore(a,nxtSib);Á.area_select(start,end-start);}Á.Å['word_wrap']=to;Á.focus();Á.update_size();Á.check_line_selection();};EA.Ä.open_file=Ã(Å){if(Å['id']!=\"undefined\"){var id=Å['id'];var new_file={};new_file['id']=id;new_file['title']=id;new_file['text']=\"\";new_file['É']=\"\";new_file['last_text_to_highlight']=\"\";new_file['last_hightlighted_text']=\"\";new_file['previous']=[];new_file['next']=[];new_file['last_undo']=\"\";new_file['smooth_selection']=Á.Å['smooth_selection'];new_file['do_highlight']=Á.Å['start_highlight'];new_file['syntax']=Á.Å['syntax'];new_file['scroll_top']=0;new_file['scroll_left']=0;new_file['selection_start']=0;new_file['selection_end']=0;new_file['edited']=Ì;new_file['font_size']=Á.Å[\"font_size\"];new_file['font_family']=Á.Å[\"font_family\"];new_file['word_wrap']=Á.Å[\"word_wrap\"];new_file['toolbar']={'links':{},'selects':{}};new_file['compare_edited_text']=new_file['text'];Á.files[id]=new_file;Á.update_file(id,Å);Á.files[id]['compare_edited_text']=Á.files[id]['text'];var html_id='tab_file_'+encodeURIComponent(id);Á.filesIdAssoc[html_id]=id;Á.files[id]['html_id']=html_id;if(!_$(Á.files[id]['html_id'])&&id!=\"\"){Á.tab_browsing_area.Ç.display=\"block\";var elem=document.createElement('li');elem.id=Á.files[id]['html_id'];var close=\"<img src=\\\"\"+È.eAL.baseURL+\"images/close.gif\\\" title=\\\"\"+Á.get_translation('close_tab','word')+\"\\\" onclick=\\\"eA.execCommand('close_file',eA.filesIdAssoc['\"+html_id+\"']);return Ì;\\\" class=\\\"hidden\\\" onmouseover=\\\"Á.className=''\\\" onmouseout=\\\"Á.className='hidden'\\\" />\";elem.innerHTML=\"<a onclick=\\\"javascript:eA.execCommand('switch_to_file',eA.filesIdAssoc['\"+html_id+\"']);\\\" selec=\\\"none\\\"><b><span><strong class=\\\"edited\\\">*</strong>\"+Á.files[id]['title']+close+\"</span></b></a>\";_$('tab_browsing_list').appendChild(elem);var elem=document.createElement('text');Á.update_size();}if(id!=\"\")Á.execCommand('file_open',Á.files[id]);Á.switch_to_file(id,Ë);return Ë;}\nelse return Ì;};EA.Ä.close_file=Ã(id){if(Á.files[id]){Á.save_file(id);if(Á.execCommand('file_close',Á.files[id])!==Ì){var li=_$(Á.files[id]['html_id']);li.ÈNode.removeChild(li);if(id==Á.curr_file){var next_file=\"\";var is_next=Ì;for(var i in Á.files){if(is_next){next_file=i;break;}\nelse if(i==id)is_next=Ë;\nelse next_file=i;}Á.switch_to_file(next_file);}delete(Á.files[id]);Á.update_size();}}};EA.Ä.save_file=Ã(id){var t=Á,save,a_links,a_selects,save_butt,img,i;if(t.files[id]){var save=t.files[id];save['É']=t.É;save['last_text_to_highlight']=t.last_text_to_highlight;save['last_hightlighted_text']=t.last_hightlighted_text;save['previous']=t.previous;save['next']=t.next;save['last_undo']=t.last_undo;save['smooth_selection']=t.smooth_selection;save['do_highlight']=t.do_highlight;save['syntax']=t.Å['syntax'];save['text']=t.Â.Ê;save['scroll_top']=t.result.scrollTop;save['scroll_left']=t.result.scrollLeft;save['selection_start']=t.É[\"selectionStart\"];save['selection_end']=t.É[\"selectionEnd\"];save['font_size']=t.Å[\"font_size\"];save['font_family']=t.Å[\"font_family\"];save['word_wrap']=t.Å[\"word_wrap\"];save['toolbar']={'links':{},'selects':{}};a_links=_$(\"toolbar_1\").getElementsByTagName(\"a\");for(i=0;i<a_links.Æ;i++){if(a_links[i].getAttribute('fileSpecific')=='yes'){save_butt={};img=a_links[i].getElementsByTagName('img')[0];save_butt['classLock']=img.classLock;save_butt['className']=img.className;save_butt['oldClassName']=img.oldClassName;save['toolbar']['links'][a_links[i].id]=save_butt;}}a_selects=_$(\"toolbar_1\").getElementsByTagName(\"select\");for(i=0;i<a_selects.Æ;i++){if(a_selects[i].getAttribute('fileSpecific')=='yes'){save['toolbar']['selects'][a_selects[i].id]=a_selects[i].Ê;}}t.files[id]=save;return save;}return Ì;};EA.Ä.update_file=Ã(id,new_Ês){for(var i in new_Ês){Á.files[id][i]=new_Ês[i];}};EA.Ä.display_file=Ã(id){var t=Á,a=t.Â,new_file,a_lis,a_selects,a_links,a_options,i,j;if(id==''){a.readOnly=Ë;t.tab_browsing_area.Ç.display=\"none\";_$(\"no_file_selected\").Ç.display=\"block\";t.result.className=\"empty\";if(!t.files['']){t.open_file({id:''});}}\nelse if(typeof(t.files[id])=='undefined'){return Ì;}\nelse{t.result.className=\"\";a.readOnly=!t.is_editable;_$(\"no_file_selected\").Ç.display=\"none\";t.tab_browsing_area.Ç.display=\"block\";}t.check_redo(Ë);t.check_undo(Ë);t.curr_file=id;a_lis=t.tab_browsing_area.getElementsByTagName('li');for(i=0;i<a_lis.Æ;i++){if(a_lis[i].id==t.files[id]['html_id'])a_lis[i].className='selected';\nelse a_lis[i].className='';}new_file=t.files[id];a.Ê=new_file['text'];t.set_font(new_file['font_family'],new_file['font_size']);t.area_select(new_file['É']['selection_start'],new_file['É']['selection_end']-new_file['É']['selection_start']);t.manage_size(Ë);t.result.scrollTop=new_file['scroll_top'];t.result.scrollLeft=new_file['scroll_left'];t.previous=new_file['previous'];t.next=new_file['next'];t.last_undo=new_file['last_undo'];t.check_redo(Ë);t.check_undo(Ë);t.execCommand(\"change_highlight\",new_file['do_highlight']);t.execCommand(\"change_syntax\",new_file['syntax']);t.execCommand(\"change_smooth_selection_mode\",new_file['smooth_selection']);t.execCommand(\"set_word_wrap\",new_file['word_wrap']);a_links=new_file['toolbar']['links'];for(i in a_links){if(img=_$(i).getElementsByTagName('img')[0]){img.classLock=a_links[i]['classLock'];img.className=a_links[i]['className'];img.oldClassName=a_links[i]['oldClassName'];}}a_selects=new_file['toolbar']['selects'];for(i in a_selects){a_options=_$(i).options;for(j=0;j<a_options.Æ;j++){if(a_options[j].Ê==a_selects[i])_$(i).options[j].selected=Ë;}}};EA.Ä.switch_to_file=Ã(file_to_show,force_refresh){if(file_to_show!=Á.curr_file||force_refresh){Á.save_file(Á.curr_file);if(Á.curr_file!='')Á.execCommand('file_switch_off',Á.files[Á.curr_file]);Á.display_file(file_to_show);if(file_to_show!='')Á.execCommand('file_switch_on',Á.files[file_to_show]);}};EA.Ä.get_file=Ã(id){if(id==Á.curr_file)Á.save_file(id);return Á.files[id];};EA.Ä.get_all_files=Ã(){tmp_files=Á.files;Á.save_file(Á.curr_file);if(tmp_files[''])delete(Á.files['']);return tmp_files;};EA.Ä.check_file_changes=Ã(){var id=Á.curr_file;if(Á.files[id]&&Á.files[id]['compare_edited_text']!=undefined){if(Á.files[id]['compare_edited_text'].Æ==Á.Â.Ê.Æ&&Á.files[id]['compare_edited_text']==Á.Â.Ê){if(Á.files[id]['edited']!=Ì)Á.set_file_edited_mode(id,Ì);}\nelse{if(Á.files[id]['edited']!=Ë)Á.set_file_edited_mode(id,Ë);}}};EA.Ä.set_file_edited_mode=Ã(id,to){if(Á.files[id]&&_$(Á.files[id]['html_id'])){var link=_$(Á.files[id]['html_id']).getElementsByTagName('a')[0];if(to==Ë){link.className='edited';}\nelse{link.className='';if(id==Á.curr_file)text=Á.Â.Ê;\nelse text=Á.files[id]['text'];Á.files[id]['compare_edited_text']=text;}Á.files[id]['edited']=to;}};EA.Ä.set_show_line_colors=Ã(new_Ê){Á.show_line_colors=new_Ê;if(new_Ê)Á.selection_field.className+=' show_colors';\nelse Á.selection_field.className=Á.selection_field.className.replace(/ show_colors/g,'');};var EA_keys={8:\"Retour arriere\",9:\"Tabulation\",12:\"Milieu(pave numerique)\",13:\"Entrer\",16:\"Shift\",17:\"Ctrl\",18:\"Alt\",19:\"Pause\",20:\"Verr Maj\",27:\"Esc\",32:\"Space\",33:\"Page up\",34:\"Page down\",35:\"End\",36:\"Begin\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"Impr ecran\",45:\"Inser\",46:\"Suppr\",91:\"Menu Demarrer Windows / touche pomme Mac\",92:\"Menu Demarrer Windows\",93:\"Menu contextuel Windows\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"Verr Num\",145:\"Arret defil\"};Ã keyDown(e){if(!e){e=event;}for(var i in eA.plugins){if(typeof(eA.plugins[i].onkeydown)==\"Ã\"){if(eA.plugins[i].onkeydown(e)===Ì){if(eA.isIE)e.keyCode=0;return Ì;}}}var target_id=(e.target||e.srcElement).id;var use=Ì;if(EA_keys[e.keyCode])letter=EA_keys[e.keyCode];\nelse letter=String.fromCharCode(e.keyCode);var low_letter=letter.toLowerCase();if(letter==\"Page up\"&&!eA.isOpera){eA.execCommand(\"scroll_page\",{\"dir\":\"up\",\"shift\":ShiftPressed(e)});use=Ë;}\nelse if(letter==\"Page down\"&&!eA.isOpera){eA.execCommand(\"scroll_page\",{\"dir\":\"down\",\"shift\":ShiftPressed(e)});use=Ë;}\nelse if(eA.is_editable==Ì){return Ë;}\nelse if(letter==\"Tabulation\"&&target_id==\"Â\"&&!CtrlPressed(e)&&!AltPressed(e)){if(ShiftPressed(e))eA.execCommand(\"invert_tab_selection\");\nelse eA.execCommand(\"tab_selection\");use=Ë;if(eA.isOpera||(eA.isFirefox&&eA.isMac))setTimeout(\"eA.execCommand('focus');\",1);}\nelse if(letter==\"Entrer\"&&target_id==\"Â\"){if(eA.press_enter())use=Ë;}\nelse if(letter==\"Entrer\"&&target_id==\"area_search\"){eA.execCommand(\"area_search\");use=Ë;}\nelse  if(letter==\"Esc\"){eA.execCommand(\"close_all_inline_popup\",e);use=Ë;}\nelse if(CtrlPressed(e)&&!AltPressed(e)&&!ShiftPressed(e)){switch(low_letter){case \"f\":eA.execCommand(\"area_search\");use=Ë;break;case \"r\":eA.execCommand(\"area_replace\");use=Ë;break;case \"q\":eA.execCommand(\"close_all_inline_popup\",e);use=Ë;break;case \"h\":eA.execCommand(\"change_highlight\");use=Ë;break;case \"g\":setTimeout(\"eA.execCommand('go_to_line');\",5);use=Ë;break;case \"e\":eA.execCommand(\"show_help\");use=Ë;break;case \"z\":use=Ë;eA.execCommand(\"undo\");break;case \"y\":use=Ë;eA.execCommand(\"redo\");break;default:break;}}if(eA.next.Æ > 0){setTimeout(\"eA.check_redo();\",10);}setTimeout(\"eA.check_file_changes();\",10);if(use){if(eA.isIE)e.keyCode=0;return Ì;}return Ë;};Ã AltPressed(e){if(window.event){return(window.event.altKey);}\nelse{if(e.modifiers)return(e.altKey||(e.modifiers % 2));\nelse return e.altKey;}};Ã CtrlPressed(e){if(window.event){return(window.event.ctrlKey);}\nelse{return(e.ctrlKey||(e.modifiers==2)||(e.modifiers==3)||(e.modifiers>5));}};Ã ShiftPressed(e){if(window.event){return(window.event.shiftKey);}\nelse{return(e.shiftKey||(e.modifiers>3));}};	EA.Ä.show_search=Ã(){if(_$(\"area_search_replace\").Ç.visibility==\"visible\"){Á.hidden_search();}\nelse{Á.open_inline_popup(\"area_search_replace\");var text=Á.area_get_selection();var search=text.split(\"\\n\")[0];_$(\"area_search\").Ê=search;_$(\"area_search\").focus();}};EA.Ä.hidden_search=Ã(){Á.close_inline_popup(\"area_search_replace\");};EA.Ä.area_search=Ã(mode){if(!mode)mode=\"search\";_$(\"area_search_msg\").innerHTML=\"\";var search=_$(\"area_search\").Ê;Á.Â.focus();Á.Â.ÂFocused=Ë;var infos=Á.get_selection_infos();var start=infos[\"selectionStart\"];var pos=-1;var pos_begin=-1;var Æ=search.Æ;if(_$(\"area_search_replace\").Ç.visibility!=\"visible\"){Á.show_search();return;}if(search.Æ==0){_$(\"area_search_msg\").innerHTML=Á.get_translation(\"search_field_empty\");return;}if(mode!=\"replace\"){if(_$(\"area_search_reg_exp\").checked)start++;\nelse start+=search.Æ;}if(_$(\"area_search_reg_exp\").checked){var opt=\"m\";if(!_$(\"area_search_match_case\").checked)opt+=\"i\";var reg=new RegExp(search,opt);pos=infos[\"full_text\"].substr(start).search(reg);pos_begin=infos[\"full_text\"].search(reg);if(pos!=-1){pos+=start;Æ=infos[\"full_text\"].substr(start).match(reg)[0].Æ;}\nelse if(pos_begin!=-1){Æ=infos[\"full_text\"].match(reg)[0].Æ;}}\nelse{if(_$(\"area_search_match_case\").checked){pos=infos[\"full_text\"].indexOf(search,start);pos_begin=infos[\"full_text\"].indexOf(search);}\nelse{pos=infos[\"full_text\"].toLowerCase().indexOf(search.toLowerCase(),start);pos_begin=infos[\"full_text\"].toLowerCase().indexOf(search.toLowerCase());}}if(pos==-1&&pos_begin==-1){_$(\"area_search_msg\").innerHTML=\"<strong>\"+search+\"</strong> \"+Á.get_translation(\"not_found\");return;}\nelse if(pos==-1&&pos_begin !=-1){begin=pos_begin;_$(\"area_search_msg\").innerHTML=Á.get_translation(\"restart_search_at_begin\");}\nelse begin=pos;if(mode==\"replace\"&&pos==infos[\"indexOfCursor\"]){var replace=_$(\"area_replace\").Ê;var new_text=\"\";if(_$(\"area_search_reg_exp\").checked){var opt=\"m\";if(!_$(\"area_search_match_case\").checked)opt+=\"i\";var reg=new RegExp(search,opt);new_text=infos[\"full_text\"].substr(0,begin)+infos[\"full_text\"].substr(start).replace(reg,replace);}\nelse{new_text=infos[\"full_text\"].substr(0,begin)+replace+infos[\"full_text\"].substr(begin+Æ);}Á.Â.Ê=new_text;Á.area_select(begin,Æ);Á.area_search();}\nelse Á.area_select(begin,Æ);};EA.Ä.area_replace=Ã(){Á.area_search(\"replace\");};EA.Ä.area_replace_all=Ã(){var base_text=Á.Â.Ê;var search=_$(\"area_search\").Ê;var replace=_$(\"area_replace\").Ê;if(search.Æ==0){_$(\"area_search_msg\").innerHTML=Á.get_translation(\"search_field_empty\");return;}var new_text=\"\";var nb_change=0;if(_$(\"area_search_reg_exp\").checked){var opt=\"mg\";if(!_$(\"area_search_match_case\").checked)opt+=\"i\";var reg=new RegExp(search,opt);nb_change=infos[\"full_text\"].match(reg).Æ;new_text=infos[\"full_text\"].replace(reg,replace);}\nelse{if(_$(\"area_search_match_case\").checked){var tmp_tab=base_text.split(search);nb_change=tmp_tab.Æ-1;new_text=tmp_tab.join(replace);}\nelse{var lower_Ê=base_text.toLowerCase();var lower_search=search.toLowerCase();var start=0;var pos=lower_Ê.indexOf(lower_search);while(pos!=-1){nb_change++;new_text+=Á.Â.Ê.substring(start,pos)+replace;start=pos+search.Æ;pos=lower_Ê.indexOf(lower_search,pos+1);}new_text+=Á.Â.Ê.substring(start);}}if(new_text==base_text){_$(\"area_search_msg\").innerHTML=\"<strong>\"+search+\"</strong> \"+Á.get_translation(\"not_found\");}\nelse{Á.Â.Ê=new_text;_$(\"area_search_msg\").innerHTML=\"<strong>\"+nb_change+\"</strong> \"+Á.get_translation(\"occurrence_replaced\");setTimeout(\"eA.Â.focus();eA.Â.ÂFocused=Ë;\",100);}}; EA.Ä.change_highlight=Ã(change_to){if(Á.Å[\"syntax\"].Æ==0&&change_to==Ì){Á.switchClassSticky(_$(\"highlight\"),'editAreaButtonDisabled',Ë);Á.switchClassSticky(_$(\"reset_highlight\"),'editAreaButtonDisabled',Ë);return Ì;}if(Á.do_highlight==change_to)return Ì;Á.getIESelection();var pos_start=Á.Â.selectionStart;var pos_end=Á.Â.selectionEnd;if(Á.do_highlight===Ë||change_to==Ì)Á.disable_highlight();\nelse Á.enable_highlight();Á.Â.focus();Á.Â.selectionStart=pos_start;Á.Â.selectionEnd=pos_end;Á.setIESelection();};EA.Ä.disable_highlight=Ã(displayOnly){var t=Á,a=t.Â,new_Obj,old_class,new_class;t.selection_field.innerHTML=\"\";t.selection_field_text.innerHTML=\"\";t.content_highlight.Ç.visibility=\"hidden\";new_Obj=t.content_highlight.cloneNode(Ì);new_Obj.innerHTML=\"\";t.content_highlight.ÈNode.insertBefore(new_Obj,t.content_highlight);t.content_highlight.ÈNode.removeChild(t.content_highlight);t.content_highlight=new_Obj;old_class=È.getAttribute(a,\"class\");if(old_class){new_class=old_class.replace(\"hidden\",\"\");È.setAttribute(a,\"class\",new_class);}a.Ç.backgroundColor=\"transÈ\";t.switchClassSticky(_$(\"highlight\"),'editAreaButtonNormal',Ë);t.switchClassSticky(_$(\"reset_highlight\"),'editAreaButtonDisabled',Ë);t.do_highlight=Ì;t.switchClassSticky(_$(\"change_smooth_selection\"),'editAreaButtonSelected',Ë);if(typeof(t.smooth_selection_before_highlight)!=\"undefined\"&&t.smooth_selection_before_highlight===Ì){t.change_smooth_selection_mode(Ì);}};EA.Ä.enable_highlight=Ã(){var t=Á,a=t.Â,new_class;t.show_waiting_screen();t.content_highlight.Ç.visibility=\"visible\";new_class=È.getAttribute(a,\"class\")+\" hidden\";È.setAttribute(a,\"class\",new_class);if(t.isIE)a.Ç.backgroundColor=\"#FFFFFF\";t.switchClassSticky(_$(\"highlight\"),'editAreaButtonSelected',Ì);t.switchClassSticky(_$(\"reset_highlight\"),'editAreaButtonNormal',Ì);t.smooth_selection_before_highlight=t.smooth_selection;if(!t.smooth_selection)t.change_smooth_selection_mode(Ë);t.switchClassSticky(_$(\"change_smooth_selection\"),'editAreaButtonDisabled',Ë);t.do_highlight=Ë;t.resync_highlight();t.hide_waiting_screen();};EA.Ä.maj_highlight=Ã(infos){var debug_opti=\"\",tps_start=new Date().getTime(),tps_middle_opti=new Date().getTime();var t=Á,hightlighted_text,updated_highlight;var textToHighlight=infos[\"full_text\"],doSyntaxOpti=Ì,doHtmlOpti=Ì,stay_begin=\"\",stay_end=\"\",trace_new,trace_last;if(t.last_text_to_highlight==infos[\"full_text\"]&&t.resync_highlight!==Ë)return;if(t.reload_highlight===Ë){t.reload_highlight=Ì;}\nelse if(textToHighlight.Æ==0){textToHighlight=\"\\n \";}\nelse{changes=t.checkTextEvolution(t.last_text_to_highlight,textToHighlight);trace_new=t.get_syntax_trace(changes.newTextLine).replace(/\\r/g,'');trace_last=t.get_syntax_trace(changes.lastTextLine).replace(/\\r/g,'');doSyntaxOpti=(trace_new==trace_last);if(!doSyntaxOpti&&trace_new==\"\\n\"+trace_last&&/^[ \t\s]*\\n[ \t\s]*$/.test(changes.newText.replace(/\\r/g,''))&&changes.lastText==\"\"){doSyntaxOpti=Ë;}if(doSyntaxOpti){tps_middle_opti=new Date().getTime();stay_begin=t.last_hightlighted_text.split(\"\\n\").slice(0,changes.lineStart).join(\"\\n\");if(changes.lineStart>0)stay_begin+=\"\\n\";stay_end=t.last_hightlighted_text.split(\"\\n\").slice(changes.lineLastEnd+1).join(\"\\n\");if(stay_end.Æ>0)stay_end=\"\\n\"+stay_end;if(stay_begin.split('<span').Æ !=stay_begin.split('</span').Æ||stay_end.split('<span').Æ !=stay_end.split('</span').Æ){doSyntaxOpti=Ì;stay_end='';stay_begin='';}\nelse{if(stay_begin.Æ==0&&changes.posLastEnd==-1)changes.newTextLine+=\"\\n\";textToHighlight=changes.newTextLine;}}if(t.Å[\"debug\"]){var ch=changes;debug_opti=(doSyntaxOpti?\"Optimisation\":\"No optimisation\")+\" start:\"+ch.posStart+\"(\"+ch.lineStart+\")\"+\" end_new:\"+ch.posNewEnd+\"(\"+ch.lineNewEnd+\")\"+\" end_last:\"+ch.posLastEnd+\"(\"+ch.lineLastEnd+\")\"+\"\\nchanged_text:\"+ch.newText+\"=> trace:\"+trace_new+\"\\nchanged_last_text:\"+ch.lastText+\"=> trace:\"+trace_last+\"\\nchanged_line:\"+ch.newTextLine+\"\\nlast_changed_line:\"+ch.lastTextLine+\"\\nstay_begin:\"+stay_begin.slice(-100)+\"\\nstay_end:\"+stay_end.substr(0,100);+\"\\n\";}}tps_end_opti=new Date().getTime();updated_highlight=t.colorize_text(textToHighlight);tpsAfterReg=new Date().getTime();if(doSyntaxOpti){try{var replacedBloc,i,nbStart='',nbEnd='',newHtml,ÆOld,ÆNew;replacedBloc=t.last_hightlighted_text.substring(stay_begin.Æ,t.last_hightlighted_text.Æ-stay_end.Æ);ÆOld=replacedBloc.Æ;ÆNew=updated_highlight.Æ;for(i=0;i < ÆOld&&i < ÆNew&&replacedBloc.charAt(i)==updated_highlight.charAt(i);i++){}nbStart=i;for(i=0;i+nbStart < ÆOld&&i+nbStart < ÆNew&&replacedBloc.charAt(ÆOld-i-1)==updated_highlight.charAt(ÆNew-i-1);i++){}nbEnd=i;lastHtml=replacedBloc.substring(nbStart,ÆOld-nbEnd);newHtml=updated_highlight.substring(nbStart,ÆNew-nbEnd);if(newHtml.indexOf('<span')==-1&&newHtml.indexOf('</span')==-1&&lastHtml.indexOf('<span')==-1&&lastHtml.indexOf('</span')==-1){var beginStr,nbOpendedSpan,nbClosedSpan,nbUnchangedChars,span,textNode;doHtmlOpti=Ë;beginStr=t.last_hightlighted_text.substr(0,stay_begin.Æ+nbStart);nbOpendedSpan=beginStr.split('<span').Æ-1;nbClosedSpan=beginStr.split('</span').Æ-1;span=t.content_highlight.getElementsByTagName('span')[ nbOpendedSpan ];ÈSpan=span;maxStartOffset=maxEndOffset=0;if(nbOpendedSpan==nbClosedSpan){while(ÈSpan.ÈNode !=t.content_highlight&&ÈSpan.ÈNode.tagName !='PRE'){ÈSpan=ÈSpan.ÈNode;}}\nelse{maxStartOffset=maxEndOffset=beginStr.Æ+1;nbClosed=beginStr.substr(Math.max(0,beginStr.lastIndexOf('<span',maxStartOffset-1))).split('</span').Æ-1;while(nbClosed > 0){nbClosed--;ÈSpan=ÈSpan.ÈNode;}while(ÈSpan.ÈNode !=t.content_highlight&&ÈSpan.ÈNode.tagName !='PRE'&&(tmpMaxStartOffset=Math.max(0,beginStr.lastIndexOf('<span',maxStartOffset-1)))<(tmpMaxEndOffset=Math.max(0,beginStr.lastIndexOf('</span',maxEndOffset-1)))){maxStartOffset=tmpMaxStartOffset;maxEndOffset=tmpMaxEndOffset;}}if(ÈSpan.ÈNode==t.content_highlight||ÈSpan.ÈNode.tagName=='PRE'){maxStartOffset=Math.max(0,beginStr.indexOf('<span'));}if(maxStartOffset==beginStr.Æ){nbSubSpanBefore=0;}\nelse{lastEndPos=Math.max(0,beginStr.lastIndexOf('>',maxStartOffset));nbSubSpanBefore=beginStr.substr(lastEndPos).split('<span').Æ-1;}if(nbSubSpanBefore==0){textNode=ÈSpan.firstChild;}\nelse{lastSubSpan=ÈSpan.getElementsByTagName('span')[ nbSubSpanBefore-1 ];while(lastSubSpan.ÈNode !=ÈSpan){lastSubSpan=lastSubSpan.ÈNode;}if(lastSubSpan.nextSibling==null||lastSubSpan.nextSibling.nodeType !=3){textNode=document.createTextNode('');lastSubSpan.ÈNode.insertBefore(textNode,lastSubSpan.nextSibling);}\nelse{textNode=lastSubSpan.nextSibling;}}nbUnchangedChars=beginStr.Æ-Math.max(0,beginStr.lastIndexOf('>')+1);if(t.isIE){nbUnchangedChars-=(beginStr.substr(beginStr.Æ-nbUnchangedChars).split(\"\\n\").Æ-1);textNode.replaceData(nbUnchangedChars,lastHtml.replace(/\\n/g,'').Æ,newHtml.replace(/\\n/g,''));}\nelse{textNode.replaceData(nbUnchangedChars,lastHtml.Æ,newHtml);}}}catch(e){doHtmlOpti=Ì;}}tpsAfterOpti2=new Date().getTime();hightlighted_text=stay_begin+updated_highlight+stay_end;if(!doHtmlOpti){var new_Obj=t.content_highlight.cloneNode(Ì);if((t.isIE&&t.isIE < 8)||(t.isOpera&&t.isOpera < 9.6))new_Obj.innerHTML=\"<pre><span class='\"+t.Å[\"syntax\"]+\"'>\"+hightlighted_text+\"</span></pre>\";\nelse new_Obj.innerHTML=\"<span class='\"+t.Å[\"syntax\"]+\"'>\"+hightlighted_text+\"</span>\";t.content_highlight.ÈNode.replaceChild(new_Obj,t.content_highlight);t.content_highlight=new_Obj;}t.last_text_to_highlight=infos[\"full_text\"];t.last_hightlighted_text=hightlighted_text;tps3=new Date().getTime();if(t.Å[\"debug\"]){t.debug.Ê=\"Tps optimisation \"+(tps_end_opti-tps_start)+\" | tps reg exp:\"+(tpsAfterReg-tps_end_opti)+\" | tps opti HTML:\"+(tpsAfterOpti2-tpsAfterReg)+' '+(doHtmlOpti ? 'yes':'no')+\" | tps update highlight content:\"+(tps3-tpsAfterOpti2)+\" | tpsTotal:\"+(tps3-tps_start)+\"(\"+tps3+\")\\n\"+debug_opti;}};EA.Ä.resync_highlight=Ã(reload_now){Á.reload_highlight=Ë;Á.last_text_to_highlight=\"\";Á.focus();if(reload_now)Á.check_line_selection(Ì);}; EA.Ä.comment_or_quote=Ã(){var new_class=\"\",close_tag=\"\",sy,arg,i;sy=È.eAL.syntax[eA.current_code_lang];arg=EA.Ä.comment_or_quote.arguments[0];for(i in sy[\"quotes\"]){if(arg.indexOf(i)==0){new_class=\"quotesmarks\";close_tag=sy[\"quotes\"][i];}}if(new_class.Æ==0){for(var i in sy[\"comments\"]){if(arg.indexOf(i)==0){new_class=\"comments\";close_tag=sy[\"comments\"][i];}}}if(close_tag==\"\\n\"){return \"µ__\"+new_class+\"__µ\"+arg.replace(/(\\r?\\n)?$/m,\"µ_END_µ$1\");}\nelse{reg=new RegExp(È.eAL.get_escaped_regexp(close_tag)+\"$\",\"m\");if(arg.search(reg)!=-1)return \"µ__\"+new_class+\"__µ\"+arg+\"µ_END_µ\";\nelse return \"µ__\"+new_class+\"__µ\"+arg;}};EA.Ä.get_syntax_trace=Ã(text){if(Á.Å[\"syntax\"].Æ>0&&È.eAL.syntax[Á.Å[\"syntax\"]][\"syntax_trace_regexp\"])return text.replace(È.eAL.syntax[Á.Å[\"syntax\"]][\"syntax_trace_regexp\"],\"$3\");};EA.Ä.colorize_text=Ã(text){text=\" \"+text;if(Á.Å[\"syntax\"].Æ>0)text=Á.apply_syntax(text,Á.Å[\"syntax\"]);return text.substr(1).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/µ_END_µ/g,\"</span>\").replace(/µ__([a-zA-Z0-9]+)__µ/g,\"<span class='$1'>\");};EA.Ä.apply_syntax=Ã(text,lang){var sy;Á.current_code_lang=lang;if(!È.eAL.syntax[lang])return text;sy=È.eAL.syntax[lang];if(sy[\"custom_regexp\"]['before']){for(var i in sy[\"custom_regexp\"]['before']){var convert=\"$1µ__\"+sy[\"custom_regexp\"]['before'][i]['class']+\"__µ$2µ_END_µ$3\";text=text.replace(sy[\"custom_regexp\"]['before'][i]['regexp'],convert);}}if(sy[\"comment_or_quote_reg_exp\"]){text=text.replace(sy[\"comment_or_quote_reg_exp\"],Á.comment_or_quote);}if(sy[\"keywords_reg_exp\"]){for(var i in sy[\"keywords_reg_exp\"]){text=text.replace(sy[\"keywords_reg_exp\"][i],'µ__'+i+'__µ$2µ_END_µ');}}if(sy[\"delimiters_reg_exp\"]){text=text.replace(sy[\"delimiters_reg_exp\"],'µ__delimiters__µ$1µ_END_µ');}if(sy[\"operators_reg_exp\"]){text=text.replace(sy[\"operators_reg_exp\"],'µ__operators__µ$1µ_END_µ');}if(sy[\"custom_regexp\"]['after']){for(var i in sy[\"custom_regexp\"]['after']){var convert=\"$1µ__\"+sy[\"custom_regexp\"]['after'][i]['class']+\"__µ$2µ_END_µ$3\";text=text.replace(sy[\"custom_regexp\"]['after'][i]['regexp'],convert);}}return text;};var editArea= eA;EditArea=EA;</script>".replace(/Á/g,'this').replace(/Â/g,'textarea').replace(/Ã/g,'function').replace(/Ä/g,'prototype').replace(/Å/g,'settings').replace(/Æ/g,'length').replace(/Ç/g,'style').replace(/È/g,'parent').replace(/É/g,'last_selection').replace(/Ê/g,'value').replace(/Ë/g,'true').replace(/Ì/g,'false');
editAreaLoader.template= "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"> <html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" > <head> <title>EditArea</title> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /> <meta http-equiv=\"X-UA-Compatible\" content=\"IE=EmulateIE7\"/> [__CSSRULES__] [__JSCODE__] </head> <body> <div id='editor'> <div class='area_toolbar' id='toolbar_1'>[__TOOLBAR__]</div> <div class='area_toolbar' id='tab_browsing_area'><ul id='tab_browsing_list' class='menu'> <li> </li> </ul></div> <div id='result'> <div id='no_file_selected'></div> <div id='container'> <div id='cursor_pos' class='edit_area_cursor'>&nbsp;</div> <div id='end_bracket' class='edit_area_cursor'>&nbsp;</div> <div id='selection_field'></div> <div id='line_number' selec='none'></div> <div id='content_highlight'></div> <div id='test_font_size'></div> <div id='selection_field_text'></div> <textarea id='textarea' wrap='off' onchange='editArea.execCommand(\"onchange\");' onfocus='javascript:editArea.textareaFocused=true;' onblur='javascript:editArea.textareaFocused=false;'> </textarea> </div> </div> <div class='area_toolbar' id='toolbar_2'> <table class='statusbar' cellspacing='0' cellpadding='0'> <tr> <td class='total' selec='none'>{$position}:</td> <td class='infos' selec='none'> {$line_abbr} <span  id='linePos'>0</span>, {$char_abbr} <span id='currPos'>0</span> </td> <td class='total' selec='none'>{$total}:</td> <td class='infos' selec='none'> {$line_abbr} <span id='nbLine'>0</span>, {$char_abbr} <span id='nbChar'>0</span> </td> <td class='resize'> <span id='resize_area'><img src='[__BASEURL__]images/statusbar_resize.gif' alt='resize' selec='none'></span> </td> </tr> </table> </div> </div> <div id='processing'> <div id='processing_text'> {$processing} </div> </div> <div id='area_search_replace' class='editarea_popup'> <table cellspacing='2' cellpadding='0' style='width: 100%'> <tr> <td selec='none'>{$search}</td> <td><input type='text' id='area_search' /></td> <td id='close_area_search_replace'> <a onclick='Javascript:editArea.execCommand(\"hidden_search\")'><img selec='none' src='[__BASEURL__]images/close.gif' alt='{$close_popup}' title='{$close_popup}' /></a><br /> </tr><tr> <td selec='none'>{$replace}</td> <td><input type='text' id='area_replace' /></td> <td><img id='move_area_search_replace' onmousedown='return parent.start_move_element(event,\"area_search_replace\", parent.frames[\"frame_\"+editArea.id]);'  src='[__BASEURL__]images/move.gif' alt='{$move_popup}' title='{$move_popup}' /></td> </tr> </table> <div class='button'> <input type='checkbox' id='area_search_match_case' /><label for='area_search_match_case' selec='none'>{$match_case}</label> <input type='checkbox' id='area_search_reg_exp' /><label for='area_search_reg_exp' selec='none'>{$reg_exp}</label> <br /> <a onclick='Javascript:editArea.execCommand(\"area_search\")' selec='none'>{$find_next}</a> <a onclick='Javascript:editArea.execCommand(\"area_replace\")' selec='none'>{$replace}</a> <a onclick='Javascript:editArea.execCommand(\"area_replace_all\")' selec='none'>{$replace_all}</a><br /> </div> <div id='area_search_msg' selec='none'></div> </div> <div id='edit_area_help' class='editarea_popup'> <div class='close_popup'> <a onclick='Javascript:editArea.execCommand(\"close_all_inline_popup\")'><img src='[__BASEURL__]images/close.gif' alt='{$close_popup}' title='{$close_popup}' /></a> </div> <div><h2>Editarea [__EA_VERSION__]</h2><br /> <h3>{$shortcuts}:</h3> {$tab}: {$add_tab}<br /> {$shift}+{$tab}: {$remove_tab}<br /> {$ctrl}+f: {$search_command}<br /> {$ctrl}+r: {$replace_command}<br /> {$ctrl}+h: {$highlight}<br /> {$ctrl}+g: {$go_to_line}<br /> {$ctrl}+z: {$undo}<br /> {$ctrl}+y: {$redo}<br /> {$ctrl}+e: {$help}<br /> {$ctrl}+q, {$esc}: {$close_popup}<br /> {$accesskey} E: {$toggle}<br /> <br /> <em>{$about_notice}</em> <br /><div class='copyright'>&copy; Christophe Dolivet 2007-2009</div> </div> </div> </body> </html> ";
editAreaLoader.iframe_css= "<style>body,html{margin:0;padding:0;height:100%;border:none;overflow:hidden;background-color:#FFF;}body,html,table,form,textarea{font:12px monospace,sans-serif;}#editor{border:solid #888 1px;overflow:hidden;}#result{z-index:4;overflow-x:auto;overflow-y:scroll;border-top:solid #888 1px;border-bottom:solid #888 1px;position:relative;clear:both;}#result.empty{overflow:hidden;}#container{overflow:hidden;border:solid blue 0;position:relative;z-index:10;padding:0 5px 0 45px;}#textarea{position:relative;top:0;left:0;margin:0;padding:0;width:100%;height:100%;overflow:hidden;z-index:7;border-width:0;background-color:transparent;resize:none;}#textarea,#textarea:hover{outline:none;}#content_highlight{white-space:pre;margin:0;padding:0;position:absolute;z-index:4;overflow:visible;}#selection_field,#selection_field_text{margin:0;background-color:#E1F2F9;position:absolute;z-index:5;top:-100px;padding:0;white-space:pre;overflow:hidden;}#selection_field.show_colors {z-index:3;background-color:#EDF9FC;}#selection_field strong{font-weight:normal;}#selection_field.show_colors *,#selection_field_text * {visibility:hidden;}#selection_field_text{background-color:transparent;}#selection_field_text strong{font-weight:normal;background-color:#3399FE;color:#FFF;visibility:visible;}#container.word_wrap #content_highlight,#container.word_wrap #selection_field,#container.word_wrap #selection_field_text,#container.word_wrap #test_font_size{white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;width:99%;}#line_number{position:absolute;overflow:hidden;border-right:solid black 1px;z-index:8;width:38px;padding:0 5px 0 0;margin:0 0 0 -45px;text-align:right;color:#AAAAAA;}#test_font_size{padding:0;margin:0;visibility:hidden;position:absolute;white-space:pre;}pre{margin:0;padding:0;}.hidden{opacity:0.2;filter:alpha(opacity=20);}#result .edit_area_cursor{position:absolute;z-index:6;background-color:#FF6633;top:-100px;margin:0;}#result .edit_area_selection_field .overline{background-color:#996600;}.editarea_popup{border:solid 1px #888888;background-color:#ECE9D8;width:250px;padding:4px;position:absolute;visibility:hidden;z-index:15;top:-500px;}.editarea_popup,.editarea_popup table{font-family:sans-serif;font-size:10pt;}.editarea_popup img{border:0;}.editarea_popup .close_popup{float:right;line-height:16px;border:0;padding:0;}.editarea_popup h1,.editarea_popup h2,.editarea_popup h3,.editarea_popup h4,.editarea_popup h5,.editarea_popup h6{margin:0;padding:0;}.editarea_popup .copyright{text-align:right;}div#area_search_replace{}div#area_search_replace img{border:0;}div#area_search_replace div.button{text-align:center;line-height:1.7em;}div#area_search_replace .button a{cursor:pointer;border:solid 1px #888888;background-color:#DEDEDE;text-decoration:none;padding:0 2px;color:#000000;white-space:nowrap;}div#area_search_replace a:hover{background-color:#EDEDED;}div#area_search_replace  #move_area_search_replace{cursor:move;border:solid 1px #888;}div#area_search_replace  #close_area_search_replace{text-align:right;vertical-align:top;white-space:nowrap;}div#area_search_replace  #area_search_msg{height:18px;overflow:hidden;border-top:solid 1px #888;margin-top:3px;}#edit_area_help{width:350px;}#edit_area_help div.close_popup{float:right;}.area_toolbar{width:100%;margin:0;padding:0;background-color:#ECE9D8;text-align:center;}.area_toolbar,.area_toolbar table{font:11px sans-serif;}.area_toolbar img{border:0;vertical-align:middle;}.area_toolbar input{margin:0;padding:0;}.area_toolbar select{font-family:'MS Sans Serif',sans-serif,Verdana,Arial;font-size:7pt;font-weight:normal;margin:2px 0 0 0 ;padding:0;vertical-align:top;background-color:#F0F0EE;}table.statusbar{width:100%;}.area_toolbar td.infos{text-align:center;width:130px;border-right:solid 1px #888;border-width:0 1px 0 0;padding:0;}.area_toolbar td.total{text-align:right;width:50px;padding:0;}.area_toolbar td.resize{text-align:right;}.area_toolbar span#resize_area{cursor:nw-resize;visibility:hidden;}.editAreaButtonNormal,.editAreaButtonOver,.editAreaButtonDown,.editAreaSeparator,.editAreaSeparatorLine,.editAreaButtonDisabled,.editAreaButtonSelected {border:0; margin:0; padding:0; background:transparent;margin-top:0;margin-left:1px;padding:0;}.editAreaButtonNormal {border:1px solid #ECE9D8 !important;cursor:pointer;}.editAreaButtonOver {border:1px solid #0A246A !important;cursor:pointer;background-color:#B6BDD2;}.editAreaButtonDown {cursor:pointer;border:1px solid #0A246A !important;background-color:#8592B5;}.editAreaButtonSelected {border:1px solid #C0C0BB !important;cursor:pointer;background-color:#F4F2E8;}.editAreaButtonDisabled {filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);-moz-opacity:0.3;opacity:0.3;border:1px solid #F0F0EE !important;cursor:pointer;}.editAreaSeparatorLine {margin:1px 2px;background-color:#C0C0BB;width:2px;height:18px;}#processing{display:none;background-color:#ECE9D8;border:solid #888 1px;position:absolute;top:0;left:0;width:100%;height:100%;z-index:100;text-align:center;}#processing_text{position:absolute;left:50%;top:50%;width:200px;height:20px;margin-left:-100px;margin-top:-10px;text-align:center;}#tab_browsing_area{display:none;background-color:#CCC9A8;border-top:1px solid #888;text-align:left;margin:0;}#tab_browsing_list {padding:0;margin:0;list-style-type:none;white-space:nowrap;}#tab_browsing_list li {float:left;margin:-1px;}#tab_browsing_list a {position:relative;display:block;text-decoration:none;float:left;cursor:pointer;line-height:14px;}#tab_browsing_list a span {display:block;color:#000;background:#ECE9D8;border:1px solid #888;border-width:1px 1px 0;text-align:center;padding:2px 2px 1px 4px;position:relative;}#tab_browsing_list a b {display:block;border-bottom:2px solid #617994;}#tab_browsing_list a .edited {display:none;}#tab_browsing_list a.edited .edited {display:inline;}#tab_browsing_list a img{margin-left:7px;}#tab_browsing_list a.edited img{margin-left:3px;}#tab_browsing_list a:hover span {background:#F4F2E8;border-color:#0A246A;}#tab_browsing_list .selected a span{background:#046380;color:#FFF;}#no_file_selected{height:100%;width:150%;background:#CCC;display:none;z-index:20;position:absolute;}.non_editable #editor{border-width:0 1px;}.non_editable .area_toolbar{display:none;}#auto_completion_area{background:#FFF;border:solid 1px #888;position:absolute;z-index:15;width:280px;height:180px;overflow:auto;display:none;}#auto_completion_area a,#auto_completion_area a:visited{display:block;padding:0 2px 1px;color:#000;text-decoration:none;}#auto_completion_area a:hover,#auto_completion_area a:focus,#auto_completion_area a.focus{background:#D6E1FE;text-decoration:none;}#auto_completion_area ul{margin:0;padding:0;list-style:none inside;}#auto_completion_area li{padding:0;}#auto_completion_area .prefix{font-style:italic;padding:0 3px;}</style>";
                                                                                             ./mvappsvr/docroot/db/javascripts/scriptaculous.js                                                  0000777 0000000 0000000 00000004544 12534142432 021432  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   // script.aculo.us scriptaculous.js v1.7.0, Fri Jan 19 19:16:36 CET 2007

// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// 
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
// 
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// For details, see the script.aculo.us web site: http://script.aculo.us/

var Scriptaculous = {
  Version: '1.7.0',
  require: function(libraryName) {
    // inserting via DOM fails in Safari 2.0, so brute force approach
    document.write('<script type="text/javascript" src="'+libraryName+'"></script>');
  },
  load: function() {
    if((typeof Prototype=='undefined') || 
       (typeof Element == 'undefined') || 
       (typeof Element.Methods=='undefined') ||
       parseFloat(Prototype.Version.split(".")[0] + "." +
                  Prototype.Version.split(".")[1]) < 1.5)
       throw("script.aculo.us requires the Prototype JavaScript framework >= 1.5.0");
    
    $A(document.getElementsByTagName("script")).findAll( function(s) {
      return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))
    }).each( function(s) {
      var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,'');
      var includes = s.src.match(/\?.*load=([a-z,]*)/);
      (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider').split(',').each(
       function(include) { Scriptaculous.require(path+include+'.js') });
    });
  }
}

Scriptaculous.load();                                                                                                                                                            ./mvappsvr/docroot/db/javascripts/shortcut.js                                                       0000777 0000000 0000000 00000013244 12534142432 020402  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /**
 * http://www.openjs.com/scripts/events/keyboard_shortcuts/
 * Version : 2.01.B
 * By Binny V A
 * License : BSD
 */
shortcut = {
	'all_shortcuts':{},//All the shortcuts are stored in this array
	'add': function(shortcut_combination,callback,opt) {
		//Provide a set of default options
		var default_options = {
			'type':'keydown',
			'propagate':false,
			'disable_in_input':false,
			'target':document,
			'keycode':false
		}
		if(!opt) opt = default_options;
		else {
			for(var dfo in default_options) {
				if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo];
			}
		}

		var ele = opt.target;
		if(typeof opt.target == 'string') ele = document.getElementById(opt.target);
		var ths = this;
		shortcut_combination = shortcut_combination.toLowerCase();

		//The function to be called at keypress
		var func = function(e) {
			e = e || window.event;
			
			if(opt['disable_in_input']) { //Don't enable shortcut keys in Input, Textarea fields
				var element;
				if(e.target) element=e.target;
				else if(e.srcElement) element=e.srcElement;
				if(element.nodeType==3) element=element.parentNode;

				if(element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return;
			}
	
			//Find Which key is pressed
			if (e.keyCode) code = e.keyCode;
			else if (e.which) code = e.which;
			var character = String.fromCharCode(code).toLowerCase();
			
			if(code == 188) character=","; //If the user presses , when the type is onkeydown
			if(code == 190) character="."; //If the user presses , when the type is onkeydown

			var keys = shortcut_combination.split("+");
			//Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked
			var kp = 0;
			
			//Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken
			var shift_nums = {
				"`":"~",
				"1":"!",
				"2":"@",
				"3":"#",
				"4":"$",
				"5":"%",
				"6":"^",
				"7":"&",
				"8":"*",
				"9":"(",
				"0":")",
				"-":"_",
				"=":"+",
				";":":",
				"'":"\"",
				",":"<",
				".":">",
				"/":"?",
				"\\":"|"
			}
			//Special Keys - and their codes
			var special_keys = {
				'esc':27,
				'escape':27,
				'tab':9,
				'space':32,
				'return':13,
				'enter':13,
				'backspace':8,
	
				'scrolllock':145,
				'scroll_lock':145,
				'scroll':145,
				'capslock':20,
				'caps_lock':20,
				'caps':20,
				'numlock':144,
				'num_lock':144,
				'num':144,
				
				'pause':19,
				'break':19,
				
				'insert':45,
				'home':36,
				'delete':46,
				'end':35,
				
				'pageup':33,
				'page_up':33,
				'pu':33,
	
				'pagedown':34,
				'page_down':34,
				'pd':34,
	
				'left':37,
				'up':38,
				'right':39,
				'down':40,
	
				'f1':112,
				'f2':113,
				'f3':114,
				'f4':115,
				'f5':116,
				'f6':117,
				'f7':118,
				'f8':119,
				'f9':120,
				'f10':121,
				'f11':122,
				'f12':123
			}
	
			var modifiers = { 
				shift: { wanted:false, pressed:false},
				ctrl : { wanted:false, pressed:false},
				alt  : { wanted:false, pressed:false},
				meta : { wanted:false, pressed:false}	//Meta is Mac specific
			};
                        
			if(e.ctrlKey)	modifiers.ctrl.pressed = true;
			if(e.shiftKey)	modifiers.shift.pressed = true;
			if(e.altKey)	modifiers.alt.pressed = true;
			if(e.metaKey)   modifiers.meta.pressed = true;
                        
			for(var i=0; k=keys[i],i<keys.length; i++) {
				//Modifiers
				if(k == 'ctrl' || k == 'control') {
					kp++;
					modifiers.ctrl.wanted = true;

				} else if(k == 'shift') {
					kp++;
					modifiers.shift.wanted = true;

				} else if(k == 'alt') {
					kp++;
					modifiers.alt.wanted = true;
				} else if(k == 'meta') {
					kp++;
					modifiers.meta.wanted = true;
				} else if(k.length > 1) { //If it is a special key
					if(special_keys[k] == code) kp++;
					
				} else if(opt['keycode']) {
					if(opt['keycode'] == code) kp++;

				} else { //The special keys did not match
					if(character == k) kp++;
					else {
						if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase
							character = shift_nums[character]; 
							if(character == k) kp++;
						}
					}
				}
			}
			
			if(kp == keys.length && 
						modifiers.ctrl.pressed == modifiers.ctrl.wanted &&
						modifiers.shift.pressed == modifiers.shift.wanted &&
						modifiers.alt.pressed == modifiers.alt.wanted &&
						modifiers.meta.pressed == modifiers.meta.wanted) {
				callback(e);
	
				if(!opt['propagate']) { //Stop the event
					//e.cancelBubble is supported by IE - this will kill the bubbling process.
					e.cancelBubble = true;
					e.returnValue = false;
	
					//e.stopPropagation works in Firefox.
					if (e.stopPropagation) {
						e.stopPropagation();
						e.preventDefault();
					}
					return false;
				}
			}
		}
		this.all_shortcuts[shortcut_combination] = {
			'callback':func, 
			'target':ele, 
			'event': opt['type']
		};
		//Attach the function with the event
		if(ele.addEventListener) ele.addEventListener(opt['type'], func, false);
		else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func);
		else ele['on'+opt['type']] = func;
	},

	//Remove the shortcut - just specify the shortcut and I will remove the binding
	'remove':function(shortcut_combination) {
		shortcut_combination = shortcut_combination.toLowerCase();
		var binding = this.all_shortcuts[shortcut_combination];
		delete(this.all_shortcuts[shortcut_combination])
		if(!binding) return;
		var type = binding['event'];
		var ele = binding['target'];
		var callback = binding['callback'];

		if(ele.detachEvent) ele.detachEvent('on'+type, callback);
		else if(ele.removeEventListener) ele.removeEventListener(type, callback, false);
		else ele['on'+type] = false;
	}
}                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/javascripts/edit_area_init.js                                                 0000777 0000000 0000000 00000041013 12534142432 021462  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /**
 * Added by Sierra Bravo for event initialization
 */
COMPILE = false;

function closeActiveTab() {
    $("#frame_file_1").contents().find("#toolbar_2 .active-panel").click();
}

/**
* Processes output of the server compilation response.
* 
* @param {object} $document Jquery DOM object containing the response. 
*                 Example: <div id="compile_output">success!</div> <div id="last_compile">5:30PM</div>)
*
* @returns {object} Hash containing parsed output. 
                    Example: { "compile_output": "success!", "last_compile": "5:30PM" }
*/
function processOutput($document)
{
    var tags = $document.find("div");
    var data = {};
    
    tags.each(function(i) {
        var id = $(this).attr("id");
        if (id != null && id != "") {
            data[id] = $(this).html();
        }
    });
    
    return data;
}   

function saveCompileItem(id, content)
{
    //alert("saveCompileItem");

    var compile_state = $("#frame_file_1").contents().find('#compile-state');
    if (COMPILE || compile_state.val() == 'on') {
        compile_state.val('off'); 
        $("#ed_form :input[name=action]").val("compile");
        COMPILE = false;

        var options = {
            success: function(formData, jqForm, options) {
                var contents = $("#frame_file_1").contents();
                var compileWin = contents.find("#compile-content");
                var data = processOutput(formData);
                compileWin.html("<pre>" + data['last_compile'] + data['compile_output'] + "</pre>");

                if (contents.find("#compile-container").css("display") != "block") {
                   contents.find("#compile-tab").trigger("click");
                }
                contents.find("#save_flag").html("&nbsp;");
                contents.find("#spinner").css('visibility', 'hidden');
                contents.find("#last-compiled").html("<pre>" + data['last_compile'] + "</pre>");
            }
        };

    } else {
        $("#ed_form :input[name=action]").val("save");
        var options = {
            success: function(formData, jqForm, options) {
               //alert("Success!");
               var contents = $("#frame_file_1").contents();
               contents.find("#save_flag").html("&nbsp;");
               contents.find("#spinner").css('visibility', 'hidden');
            }
        };
    }
    $("#frame_file_1").contents().find("#spinner").css('visibility', 'visible');
    $("#file_1").val(content);
    
    //alert("hidden frame submit");
    
    //$("#ed_form").ajaxSubmit(options);
    hiddenFrameSubmit($("#ed_form"), options);
    
    return false;
}

/**
* Posts via AJAX always uses utf-8 encoding.
* To get around this and use the correct character enoding based on the browser's encoding settings, we must use alternatively create a new hidden iframe in which to submit the data.
* It is best to create a new iframe each time data is submitted in order to avoid unpredicatble concurrency issues.
*/
function hiddenFrameSubmit($form, options) 
{
    //create a unique name for this frame
    var hiddenFrameName = "hidden-frame-" + new Date().getTime();
    var initialURL = "about:blank"; //blank.html //to avoid http/https mixed-content browser warnings

    //create a new hidden iframe
    $('<iframe name="' + hiddenFrameName + '">') //as attr("name") doesn't work properly in IE, gets around this bug
                 .attr("id", hiddenFrameName) 
                 .attr("src", initialURL) //explicitly set the initial url
                 .css("display", "none") //iframe will be invisible
                 .unbind("load")
                 .bind("load", 
                    { 
                        $form: $form, 
                        options: options, 
                        initialURL: initialURL, 
                        hiddenFrameName: hiddenFrameName 
                    }, hiddenFrameCallback)
                 .appendTo(document.body);
    
    //alert("creating hidden frame");
    
    //set the target of the form so that it will submit to the hidden frame
    $form.attr("target", hiddenFrameName);
    $form.submit();
}

/**
* After hidden frame has loaded completely, thsi will call the callback function with the contents of the iframe as a Jquery DOM object.
*/
function hiddenFrameCallback(e) { 
    var $form = e.data.$form;
    var options = e.data.options;        
    var initialURL = e.data.initialURL;
    var hiddenFrameName = e.data.hiddenFrameName;
    
    var $document = $(this).contents();

    //there is a chance that the default (empty) location will load before the actual content. In this case, just return immediately.
    
    if ($document.attr("location").href.indexOf(initialURL) >= 0) { 
        return; 
    }
    else {
        //the contents of the iframe will contain the server response.
        //call the callback function, passing in the entire DOM tree of the iframe.
        if (options.success != null) {
            options.success($document, $form, options);
        }
        
        //remove the target attribute of the form
        $form.removeAttr("target");        
        
        //remove the iframe element when finished
        window.setTimeout(function() { 
            $("#" + hiddenFrameName).remove(); 
        } , 0);
    }
}

function openItem(id)
{
    $("#messages").text("");
    $("#open-item-container").dialog('open');
}

function openEditDialog(){

    $().ready(function(){
    $("#open-item-container").dialog('open');
    });
}
function initCodeAssist(menuItems) 
{
    var editor = document.getElementById('frame_file_1');
    
    var contents = $("#frame_file_1").contents();
    var statusBar = contents.find("#toolbar_2 .statusbar .resize");
    var winContent = '';
    for (var id in menuItems) {
        
    var item = menuItems[id];
        statusBar.append("<a id='" + id + "-tab' winid='" + id + "' class='panel-tab' href='#'>" + item.title + "</a>");
    
    var browserClass = '';
    if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {
        browserClass = 'info-win-chrome';
    } else if(navigator.userAgent.toLowerCase().indexOf('safari') > -1){
        browserClass = 'info-win-safari';
    }
        winContent += ("<div id='" + id + "-container' class='info-window " + browserClass + "' style='display: none;'><a href='#' winid='" + id + "' class='" + id + "-bar info-bar'>" + item.title + "</a>" + 
               "<a href='maximize' class='maximize'>&nbsp;</a>" +
               "<div id='" + id + "-content' class='win-content'>" + item.content + "</div></div>");
    }
    
    contents.find("#toolbar_2").append(winContent);
}

function checkEditorChange()
{
    var saveFlag = $("#frame_file_1").contents().find("#save_flag");
    if (saveFlag.css('visibility') != 'visible' && 
        (e.which == 32 || (65 <= e.which && e.which <= 65 + 25)
                        || (97 <= e.which && e.which <= 97 + 25))) {
        saveFlag.html("*").css('visibility','visible');
    }
}

function initEditorIframe(){
       var menu = { 
                   'compile' : {
             "title"    : "Compile Output",
             "content"  : "Code not compiled since load."
           },
                   "calls" : {
                         "content"  : CALLS_CONTENT,
             "title"    : 'Calls(' + CALLS + ')' 
                   },
                   "includes" : {
                         "title"    : 'Includes (' + INCLUDES + ')',
                         "content"  : INCLUDES_CONTENT
                   },
                   "files" : {
                         "content"  : FILES_CONTENT,
             "title"    : 'Files (' + FILES + ')' 
                   },
           "archive" : {
            "title" : "Archive (" + ARCHIVES + ")",
            "content" : ARCHIVE_CONTENT
           }
                };

    /// Menu initialization 
        initCodeAssist(menu);

        var contents = $("#frame_file_1").contents();
        var selectedText = contents.find("#selection_field");

    contents.find(".maximize").click(function(){
        if ($(this).css("height") == '8px') {
            $(this).parent().css("height", "600px");
            $(this).css("height", "2px");
        $(this).siblings(".win-content").css("height", "550px");
        } else {
        $(this).css("height", "8px");
        $(this).parent().css("height", "200px");
        $(this).siblings(".win-content").css("height", "150px");
        }
        return false;
    });
    var iframe = $("#frame_file_1").contents();

    var toolbar = null;
    var toolbar2 = null;
    if (toolbar = iframe.find("#toolbar_1")) {
        var itemName = $("#ed_form :input[name=ed_item]").val();
        toolbar.prepend("<input type='hidden' value='off' id='compile-state' name='compile-state' /><strong style='margin-right: 10px; float: left;'>" + 
                "<img id='spinner' style='visibility: hidden; margin-right: 5px;' src='/db/images/spinner.gif' />" + itemName + "<span id='save_flag' style='color: red; font-size: 14px; margin-right: 2px; visibility: hidden;'></span></strong>");
                
        iframe.find("#a_save").after('<a id="save-compile" filespecific="no" target="_self" onmousedown="return false;" href="#" id="a_save"><img width="20" height="20" onmousedown="editArea.restoreAndSwitchClass(this,\'editAreaButtonDown\');" onmouseout="editArea.restoreClass(this);" onmouseover="editArea.switchClass(this,\'editAreaButtonOver\');" class="editAreaButtonNormal" title="compile" src="/db/images/icon_gear.png" id="compile-image"/></a>');

            $("#frame_file_1").contents().find("#save-compile").bind("click", function() {
            COMPILE = true;
        var contents = $("#frame_file_1").contents();
            contents.find("#a_save").trigger("click");
        return false;
            });
    } 
    if(toolbar2 = iframe.find("#toolbar_2")) {

        $("#frame_file_1").contents().find(".info-bar, a.panel-tab").bind('click', function(){
                var infoLink = $(this); 
                var id = infoLink.attr("winid");
        var contents =  $("#frame_file_1").contents();	
        var infoWin = contents.find("." + id + "-container");
        var activePanel = contents.find("#toolbar_2 .active-panel");

        if (activePanel.length > 0) {
                    activePanel.removeClass("active-panel");
                    contents.find(".info-window").css("display", "none");
        }

        if (activePanel.attr("winid") != id) {
            contents.find("#" + id + "-tab").addClass("active-panel"); 
            contents.find("#" + id + "-container").css("display", "block");
        }

        return false;
        });
        
       if (typeof LAST_COMPILE == 'undefined' || (!LAST_COMPILE)) {
        LAST_COMPILE = '&nbsp;';
       }
       toolbar2.find(".statusbar .resize").append("<div id='last-compiled' style='margin: 5px 10px; float: right;'>" + LAST_COMPILE + "</div>");
    }

    var isCtrl = false;
    var isShift = false;
    var isAlt = false;
    var isCmd = false;
    iframe.keyup(function(e){
        switch (e.which) {
            case 16:
            isShift = false;
            break;
            case 17:
            isCtrl = false;
            break;
                    case 18:
            isAlt = false;
            break;
             case 91:
                        if ($.browser.safari) {
                            isCmd = false;
                        }
            break;
            case 224:
            isCmd = false;
            break;
        }
    }).keydown(function(e) {
                switch (e.which) {
                    case 16:
                        isShift = true;
                        break;
                    case 17:
                        isCtrl = true;
                        break;
                    case 18:
                        isAlt = true;
                        break;
            case 91:
            if ($.browser.safari) {
                isCmd = true;
            }
                break;
            case 224:
            isCmd = true;
            break;
                }
        if (!isShift && !isCtrl && !isAlt && !isCmd) {
            if(e.which == 32 || (65 <= e.which && e.which <= 65 + 25)
            || e.which == 8 || e.which == 46 || e.which == 13 
                        || (97 <= e.which && e.which <= 97 + 25)) { 
            $("#frame_file_1").contents().find("#save_flag").html("*").css('visibility','visible');	
            }
        }
        //alert(isCmd + " : " + e.which);
    });
     }

function editAreaLoadComplete() {
    if (typeof NEW_PROGRAM_DIALOG != 'undefined' && (NEW_PROGRAM_DIALOG) && (typeof widgetTypes != 'undefined' && (widgetTypes))) {
        var templateCode = "<div id='template_loader' title='Select template to use'><div class='messages'></div><form id='template-loader-form' action='MVDB.WEB.ED' method='post'></form><ul>";
        for (var i in widgetTypes) {
            var type = widgetTypes[i];
            templateCode += ("<li id='" + i + "' class='" + type[1] + "'>" + type[0] + "</li>");
        }

        templateCode += "</ul></div>";
        $("#ed_form").after(templateCode);
        $("#template_loader").dialog({
            modal: true,
            autoOpen: false,
            zIndex: 1000,
            height: 500,
            width: 800,
            open: function(){
                $("#frame_file_1").css("z-index", '100');
            },
            buttons: {
                'Cancel': function() {
                    $(this).dialog('close');
                }
            }
        });
        
        $("#template_loader ul li").click(function() {
            $("#template_loader ul li.selected-template").removeClass("selected-template");
            $(this).addClass("selected-template");
        
            var id = $("#template_loader li.selected-template").attr('id');
            $("#template-loader-form").append("<input type='hidden' value='" + id + "' name='template' /><input type='hidden' name='action' value='code_template' />");

            var options = {
                success: function(responseText, statusText){
                                var originalText = editAreaLoader.getValue('file_1');
                                editAreaLoader.setValue('file_1', originalText + responseText);
                                $("#template_loader").dialog('close');
                            }
            };
            
            $("#template-loader-form").ajaxSubmit(options);
        });

        $("#template_loader").dialog('open');
    }
    
    initEditorIframe();
}

//alert($("#frame_file_1").length);
//$("#frame_file_1").bind("load", function() { initEditorIframe });

$().ready(function(){   
        $("#open-item-container").dialog({
            autoOpen: false,
            height: 350,
            zIndex: 1000,
            modal: true,
        open: function() {
         $("#frame_file_1").css("z-index", '100');
        },
            buttons: {
                'Cancel': function() {
                        $(".ui-dialog .ui-dialog-buttonpane .ui-state-default:last").children("img").remove();
                        $(this).dialog('close');
                },
                'Open': function() {
                        var valid = true;
                        if ( !($("#ed_acct").val()) || !($("#ed_file").val()) || !($("#ed_item").val())) {
                            $("#messages").text("Please fill in all the fields!");
                        } else {
                            $("#messages").text("");
                            var options = {
                                beforeSubmit: function(formData, jqForm, options) {
                                    var code = $("#file_1").val();
                                    $("#open-action").val("open");
                                    $(".ui-dialog .ui-dialog-buttonpane .ui-state-default:last").children("img").remove();
                    $(".ui-dialog .ui-dialog-buttonpane .ui-state-default:last").append("<img style='margin: 0px 4px' src='/db/images/spinner.gif' />");
                                },
                                success: function(formData, jqForm, options) {
                                    var id = "#file_1";
                                    var data = processOutput(formData);
                                    $(".ui-dialog .ui-dialog-buttonpane .ui-state-default:last").children("img").remove();
                                    editAreaLoader.setValue(id, data['compile_output']);
                                }
                            };
                            $("#open-item-form").submit();
                        }

                        //$(this).dialog('close');
                }
            }
        });
        
        //setTimeout('initEditorIframe()', 1000);
});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/javascripts/jquery.form.js                                                    0000777 0000000 0000000 00000055370 12534142432 021016  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
 * jQuery Form Plugin
 * version: 2.28 (10-MAY-2009)
 * @requires jQuery v1.2.2 or later
 *
 * Examples and documentation at: http://malsup.com/jquery/form/
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */
;(function($) {

/*
    Usage Note:
    -----------
    Do not use both ajaxSubmit and ajaxForm on the same form.  These
    functions are intended to be exclusive.  Use ajaxSubmit if you want
    to bind your own submit handler to the form.  For example,

    $(document).ready(function() {
        $('#myForm').bind('submit', function() {
            $(this).ajaxSubmit({
                target: '#output'
            });
            return false; // <-- important!
        });
    });

    Use ajaxForm when you want the plugin to manage all the event binding
    for you.  For example,

    $(document).ready(function() {
        $('#myForm').ajaxForm({
            target: '#output'
        });
    });

    When using ajaxForm, the ajaxSubmit function will be invoked for you
    at the appropriate time.
*/

/**
 * ajaxSubmit() provides a mechanism for immediately submitting
 * an HTML form using AJAX.
 */
$.fn.ajaxSubmit = function(options) {
    // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
    if (!this.length) {
        log('ajaxSubmit: skipping submit process - no element selected');
        return this;
    }

    if (typeof options == 'function')
        options = { success: options };

    var url = $.trim(this.attr('action'));
    if (url) {
	    // clean url (don't include hash vaue)
	    url = (url.match(/^([^#]+)/)||[])[1];
   	}
   	url = url || window.location.href || ''

    options = $.extend({
        url:  url,
        type: this.attr('method') || 'GET'
    }, options || {});

    // hook for manipulating the form data before it is extracted;
    // convenient for use with rich editors like tinyMCE or FCKEditor
    var veto = {};
    this.trigger('form-pre-serialize', [this, options, veto]);
    if (veto.veto) {
        log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
        return this;
    }

    // provide opportunity to alter form data before it is serialized
    if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
        log('ajaxSubmit: submit aborted via beforeSerialize callback');
        return this;
    }

    var a = this.formToArray(options.semantic);
    if (options.data) {
        options.extraData = options.data;
        for (var n in options.data) {
          if(options.data[n] instanceof Array) {
            for (var k in options.data[n])
              a.push( { name: n, value: options.data[n][k] } );
          }
          else
             a.push( { name: n, value: options.data[n] } );
        }
    }

    // give pre-submit callback an opportunity to abort the submit
    if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
        log('ajaxSubmit: submit aborted via beforeSubmit callback');
        return this;
    }

    // fire vetoable 'validate' event
    this.trigger('form-submit-validate', [a, this, options, veto]);
    if (veto.veto) {
        log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
        return this;
    }

    var q = $.param(a);

    if (options.type.toUpperCase() == 'GET') {
        options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
        options.data = null;  // data is null for 'get'
    }
    else
        options.data = q; // data is the query string for 'post'

    var $form = this, callbacks = [];
    if (options.resetForm) callbacks.push(function() { $form.resetForm(); });
    if (options.clearForm) callbacks.push(function() { $form.clearForm(); });

    // perform a load on the target only if dataType is not provided
    if (!options.dataType && options.target) {
        var oldSuccess = options.success || function(){};
        callbacks.push(function(data) {
            $(options.target).html(data).each(oldSuccess, arguments);
        });
    }
    else if (options.success)
        callbacks.push(options.success);

    options.success = function(data, status) {
        for (var i=0, max=callbacks.length; i < max; i++)
            callbacks[i].apply(options, [data, status, $form]);
    };

    // are there files to upload?
    var files = $('input:file', this).fieldValue();
    var found = false;
    for (var j=0; j < files.length; j++)
        if (files[j])
            found = true;

	var multipart = false;
//	var mp = 'multipart/form-data';
//	multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);

    // options.iframe allows user to force iframe mode
   if (options.iframe || found || multipart) {
       // hack to fix Safari hang (thanks to Tim Molendijk for this)
       // see:  http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
       if (options.closeKeepAlive)
           $.get(options.closeKeepAlive, fileUpload);
       else
           fileUpload();
       }
   else
       $.ajax(options);

    // fire 'notify' event
    this.trigger('form-submit-notify', [this, options]);
    return this;


    // private function for handling file uploads (hat tip to YAHOO!)
    function fileUpload() {
        var form = $form[0];

        if ($(':input[name=submit]', form).length) {
            alert('Error: Form elements must not be named "submit".');
            return;
        }

        var opts = $.extend({}, $.ajaxSettings, options);
		var s = $.extend(true, {}, $.extend(true, {}, $.ajaxSettings), opts);

        var id = 'jqFormIO' + (new Date().getTime());
        var $io = $('<iframe id="' + id + '" name="' + id + '" src="about:blank" />');
        var io = $io[0];

        $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });

        var xhr = { // mock object
            aborted: 0,
            responseText: null,
            responseXML: null,
            status: 0,
            statusText: 'n/a',
            getAllResponseHeaders: function() {},
            getResponseHeader: function() {},
            setRequestHeader: function() {},
            abort: function() {
                this.aborted = 1;
                $io.attr('src','about:blank'); // abort op in progress
            }
        };

        var g = opts.global;
        // trigger ajax global events so that activity/block indicators work like normal
        if (g && ! $.active++) $.event.trigger("ajaxStart");
        if (g) $.event.trigger("ajaxSend", [xhr, opts]);

		if (s.beforeSend && s.beforeSend(xhr, s) === false) {
			s.global && $.active--;
			return;
        }
        if (xhr.aborted)
            return;

        var cbInvoked = 0;
        var timedOut = 0;

        // add submitting element to data if we know it
        var sub = form.clk;
        if (sub) {
            var n = sub.name;
            if (n && !sub.disabled) {
                options.extraData = options.extraData || {};
                options.extraData[n] = sub.value;
                if (sub.type == "image") {
                    options.extraData[name+'.x'] = form.clk_x;
                    options.extraData[name+'.y'] = form.clk_y;
                }
            }
        }

        // take a breath so that pending repaints get some cpu time before the upload starts
        setTimeout(function() {
            // make sure form attrs are set
            var t = $form.attr('target'), a = $form.attr('action');

			// update form attrs in IE friendly way
			form.setAttribute('target',id);
			if (form.getAttribute('method') != 'POST')
				form.setAttribute('method', 'POST');
			if (form.getAttribute('action') != opts.url)
				form.setAttribute('action', opts.url);

            // ie borks in some cases when setting encoding
            if (! options.skipEncodingOverride) {
                $form.attr({
                    encoding: 'multipart/form-data',
                    enctype:  'multipart/form-data'
                });
            }

            // support timout
            if (opts.timeout)
                setTimeout(function() { timedOut = true; cb(); }, opts.timeout);

            // add "extra" data to form if provided in options
            var extraInputs = [];
            try {
                if (options.extraData)
                    for (var n in options.extraData)
                        extraInputs.push(
                            $('<input type="hidden" name="'+n+'" value="'+options.extraData[n]+'" />')
                                .appendTo(form)[0]);

                // add iframe to doc and submit the form
                $io.appendTo('body');
                io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
                form.submit();
            }
            finally {
                // reset attrs and remove "extra" input elements
				form.setAttribute('action',a);
                t ? form.setAttribute('target', t) : $form.removeAttr('target');
                $(extraInputs).remove();
            }
        }, 10);

        var nullCheckFlag = 0;

        function cb() {
            if (cbInvoked++) return;

            io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);

            var ok = true;
            try {
                if (timedOut) throw 'timeout';
                // extract the server response from the iframe
                var data, doc;

                doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;

                if ((doc.body == null || doc.body.innerHTML == '') && !nullCheckFlag) {
                    // in some browsers (cough, Opera 9.2.x) the iframe DOM is not always traversable when
                    // the onload callback fires, so we give them a 2nd chance
                    nullCheckFlag = 1;
                    cbInvoked--;
                    setTimeout(cb, 100);
                    return;
                }

                xhr.responseText = doc.body ? doc.body.innerHTML : null;
                xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
                xhr.getResponseHeader = function(header){
                    var headers = {'content-type': opts.dataType};
                    return headers[header];
                };

                if (opts.dataType == 'json' || opts.dataType == 'script') {
                    var ta = doc.getElementsByTagName('textarea')[0];
                    xhr.responseText = ta ? ta.value : xhr.responseText;
                }
                else if (opts.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
                    xhr.responseXML = toXml(xhr.responseText);
                }
                data = $.httpData(xhr, opts.dataType);
            }
            catch(e){
                ok = false;
                $.handleError(opts, xhr, 'error', e);
            }

            // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
            if (ok) {
                opts.success(data, 'success');
                if (g) $.event.trigger("ajaxSuccess", [xhr, opts]);
            }
            if (g) $.event.trigger("ajaxComplete", [xhr, opts]);
            if (g && ! --$.active) $.event.trigger("ajaxStop");
            if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');

            // clean up
            setTimeout(function() {
                $io.remove();
                xhr.responseXML = null;
            }, 100);
        };

        function toXml(s, doc) {
            if (window.ActiveXObject) {
                doc = new ActiveXObject('Microsoft.XMLDOM');
                doc.async = 'false';
                doc.loadXML(s);
            }
            else
                doc = (new DOMParser()).parseFromString(s, 'text/xml');
            return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null;
        };
    };
};

/**
 * ajaxForm() provides a mechanism for fully automating form submission.
 *
 * The advantages of using this method instead of ajaxSubmit() are:
 *
 * 1: This method will include coordinates for <input type="image" /> elements (if the element
 *    is used to submit the form).
 * 2. This method will include the submit element's name/value data (for the element that was
 *    used to submit the form).
 * 3. This method binds the submit() method to the form for you.
 *
 * The options argument for ajaxForm works exactly as it does for ajaxSubmit.  ajaxForm merely
 * passes the options argument along after properly binding events for submit elements and
 * the form itself.
 */
$.fn.ajaxForm = function(options) {
    return this.ajaxFormUnbind().bind('submit.form-plugin',function() {
        $(this).ajaxSubmit(options);
        return false;
    }).each(function() {
        // store options in hash
        $(":submit,input:image", this).bind('click.form-plugin',function(e) {
            var form = this.form;
            form.clk = this;
            if (this.type == 'image') {
                if (e.offsetX != undefined) {
                    form.clk_x = e.offsetX;
                    form.clk_y = e.offsetY;
                } else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
                    var offset = $(this).offset();
                    form.clk_x = e.pageX - offset.left;
                    form.clk_y = e.pageY - offset.top;
                } else {
                    form.clk_x = e.pageX - this.offsetLeft;
                    form.clk_y = e.pageY - this.offsetTop;
                }
            }
            // clear form vars
            setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 10);
        });
    });
};

// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
$.fn.ajaxFormUnbind = function() {
    this.unbind('submit.form-plugin');
    return this.each(function() {
        $(":submit,input:image", this).unbind('click.form-plugin');
    });

};

/**
 * formToArray() gathers form element data into an array of objects that can
 * be passed to any of the following ajax functions: $.get, $.post, or load.
 * Each object in the array has both a 'name' and 'value' property.  An example of
 * an array for a simple login form might be:
 *
 * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
 *
 * It is this array that is passed to pre-submit callback functions provided to the
 * ajaxSubmit() and ajaxForm() methods.
 */
$.fn.formToArray = function(semantic) {
    var a = [];
    if (this.length == 0) return a;

    var form = this[0];
    var els = semantic ? form.getElementsByTagName('*') : form.elements;
    if (!els) return a;
    for(var i=0, max=els.length; i < max; i++) {
        var el = els[i];
        var n = el.name;
        if (!n) continue;

        if (semantic && form.clk && el.type == "image") {
            // handle image inputs on the fly when semantic == true
            if(!el.disabled && form.clk == el) {
            	a.push({name: n, value: $(el).val()});
                a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
            }
            continue;
        }

        var v = $.fieldValue(el, true);
        if (v && v.constructor == Array) {
            for(var j=0, jmax=v.length; j < jmax; j++)
                a.push({name: n, value: v[j]});
        }
        else if (v !== null && typeof v != 'undefined')
            a.push({name: n, value: v});
    }

    if (!semantic && form.clk) {
        // input type=='image' are not found in elements array! handle it here
        var $input = $(form.clk), input = $input[0], n = input.name;
        if (n && !input.disabled && input.type == 'image') {
        	a.push({name: n, value: $input.val()});
            a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
        }
    }
    return a;
};

/**
 * Serializes form data into a 'submittable' string. This method will return a string
 * in the format: name1=value1&amp;name2=value2
 */
$.fn.formSerialize = function(semantic) {
    //hand off to jQuery.param for proper encoding
    return $.param(this.formToArray(semantic));
};

/**
 * Serializes all field elements in the jQuery object into a query string.
 * This method will return a string in the format: name1=value1&amp;name2=value2
 */
$.fn.fieldSerialize = function(successful) {
    var a = [];
    this.each(function() {
        var n = this.name;
        if (!n) return;
        var v = $.fieldValue(this, successful);
        if (v && v.constructor == Array) {
            for (var i=0,max=v.length; i < max; i++)
                a.push({name: n, value: v[i]});
        }
        else if (v !== null && typeof v != 'undefined')
            a.push({name: this.name, value: v});
    });
    //hand off to jQuery.param for proper encoding
    return $.param(a);
};

/**
 * Returns the value(s) of the element in the matched set.  For example, consider the following form:
 *
 *  <form><fieldset>
 *      <input name="A" type="text" />
 *      <input name="A" type="text" />
 *      <input name="B" type="checkbox" value="B1" />
 *      <input name="B" type="checkbox" value="B2"/>
 *      <input name="C" type="radio" value="C1" />
 *      <input name="C" type="radio" value="C2" />
 *  </fieldset></form>
 *
 *  var v = $(':text').fieldValue();
 *  // if no values are entered into the text inputs
 *  v == ['','']
 *  // if values entered into the text inputs are 'foo' and 'bar'
 *  v == ['foo','bar']
 *
 *  var v = $(':checkbox').fieldValue();
 *  // if neither checkbox is checked
 *  v === undefined
 *  // if both checkboxes are checked
 *  v == ['B1', 'B2']
 *
 *  var v = $(':radio').fieldValue();
 *  // if neither radio is checked
 *  v === undefined
 *  // if first radio is checked
 *  v == ['C1']
 *
 * The successful argument controls whether or not the field element must be 'successful'
 * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
 * The default value of the successful argument is true.  If this value is false the value(s)
 * for each element is returned.
 *
 * Note: This method *always* returns an array.  If no valid value can be determined the
 *       array will be empty, otherwise it will contain one or more values.
 */
$.fn.fieldValue = function(successful) {
    for (var val=[], i=0, max=this.length; i < max; i++) {
        var el = this[i];
        var v = $.fieldValue(el, successful);
        if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length))
            continue;
        v.constructor == Array ? $.merge(val, v) : val.push(v);
    }
    return val;
};

/**
 * Returns the value of the field element.
 */
$.fieldValue = function(el, successful) {
    var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
    if (typeof successful == 'undefined') successful = true;

    if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
        (t == 'checkbox' || t == 'radio') && !el.checked ||
        (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
        tag == 'select' && el.selectedIndex == -1))
            return null;

    if (tag == 'select') {
        var index = el.selectedIndex;
        if (index < 0) return null;
        var a = [], ops = el.options;
        var one = (t == 'select-one');
        var max = (one ? index+1 : ops.length);
        for(var i=(one ? index : 0); i < max; i++) {
            var op = ops[i];
            if (op.selected) {
				var v = op.value;
				if (!v) // extra pain for IE...
                	v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
                if (one) return v;
                a.push(v);
            }
        }
        return a;
    }
    return el.value;
};

/**
 * Clears the form data.  Takes the following actions on the form's input fields:
 *  - input text fields will have their 'value' property set to the empty string
 *  - select elements will have their 'selectedIndex' property set to -1
 *  - checkbox and radio inputs will have their 'checked' property set to false
 *  - inputs of type submit, button, reset, and hidden will *not* be effected
 *  - button elements will *not* be effected
 */
$.fn.clearForm = function() {
    return this.each(function() {
        $('input,select,textarea', this).clearFields();
    });
};

/**
 * Clears the selected form elements.
 */
$.fn.clearFields = $.fn.clearInputs = function() {
    return this.each(function() {
        var t = this.type, tag = this.tagName.toLowerCase();
        if (t == 'text' || t == 'password' || tag == 'textarea')
            this.value = '';
        else if (t == 'checkbox' || t == 'radio')
            this.checked = false;
        else if (tag == 'select')
            this.selectedIndex = -1;
    });
};

/**
 * Resets the form data.  Causes all form elements to be reset to their original value.
 */
$.fn.resetForm = function() {
    return this.each(function() {
        // guard against an input with the name of 'reset'
        // note that IE reports the reset function as an 'object'
        if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType))
            this.reset();
    });
};

/**
 * Enables or disables any matching elements.
 */
$.fn.enable = function(b) {
    if (b == undefined) b = true;
    return this.each(function() {
        this.disabled = !b;
    });
};

/**
 * Checks/unchecks any matching checkboxes or radio buttons and
 * selects/deselects and matching option elements.
 */
$.fn.selected = function(select) {
    if (select == undefined) select = true;
    return this.each(function() {
        var t = this.type;
        if (t == 'checkbox' || t == 'radio')
            this.checked = select;
        else if (this.tagName.toLowerCase() == 'option') {
            var $sel = $(this).parent('select');
            if (select && $sel[0] && $sel[0].type == 'select-one') {
                // deselect all other options
                $sel.find('option').selected(false);
            }
            this.selected = select;
        }
    });
};

// helper fn for console logging
// set $.fn.ajaxSubmit.debug to true to enable debug logging
function log() {
    if ($.fn.ajaxSubmit.debug && window.console && window.console.log)
        window.console.log('[jquery.form] ' + Array.prototype.join.call(arguments,''));
};

})(jQuery);
                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/javascripts/jquery.tools.min.js                                               0000666 0000000 0000000 00000203314 12534142432 021763  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
 * jquery.tools 1.1.2 - The missing UI library for the Web
 * 
 * [tools.tabs-1.0.4, tools.tabs.history-1.0.2, tools.overlay-1.1.2, tools.expose-1.0.5]
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 * 
 * -----
 * 
 * jQuery JavaScript Library v1.3.2
 * http://jquery.com/
 *
 * Copyright (c) 2009 John Resig
 * Dual licensed under the MIT and GPL licenses.
 * http://docs.jquery.com/License
 *
 * Sizzle CSS Selector Engine - v0.9.3
 * Copyright 2009, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 * More information: http://sizzlejs.com/
 * 
 * -----
 * 
 * File generated: Thu Jan 07 16:37:55 GMT 2010
 */
(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
(function(d){d.tools=d.tools||{};d.tools.tabs={version:"1.0.4",conf:{tabs:"a",current:"current",onBeforeClick:null,onClick:null,effect:"default",initialIndex:0,event:"click",api:false,rotate:false},addEffect:function(e,f){c[e]=f}};var c={"default":function(f,e){this.getPanes().hide().eq(f).show();e.call()},fade:function(g,e){var f=this.getConf(),j=f.fadeOutSpeed,h=this.getPanes();if(j){h.fadeOut(j)}else{h.hide()}h.eq(g).fadeIn(f.fadeInSpeed,e)},slide:function(f,e){this.getPanes().slideUp(200);this.getPanes().eq(f).slideDown(400,e)},ajax:function(f,e){this.getPanes().eq(0).load(this.getTabs().eq(f).attr("href"),e)}};var b;d.tools.tabs.addEffect("horizontal",function(f,e){if(!b){b=this.getPanes().eq(0).width()}this.getCurrentPane().animate({width:0},function(){d(this).hide()});this.getPanes().eq(f).animate({width:b},function(){d(this).show();e.call()})});function a(g,h,f){var e=this,j=d(this),i;d.each(f,function(k,l){if(d.isFunction(l)){j.bind(k,l)}});d.extend(this,{click:function(k,n){var o=e.getCurrentPane();var l=g.eq(k);if(typeof k=="string"&&k.replace("#","")){l=g.filter("[href*="+k.replace("#","")+"]");k=Math.max(g.index(l),0)}if(f.rotate){var m=g.length-1;if(k<0){return e.click(m,n)}if(k>m){return e.click(0,n)}}if(!l.length){if(i>=0){return e}k=f.initialIndex;l=g.eq(k)}if(k===i){return e}n=n||d.Event();n.type="onBeforeClick";j.trigger(n,[k]);if(n.isDefaultPrevented()){return}c[f.effect].call(e,k,function(){n.type="onClick";j.trigger(n,[k])});n.type="onStart";j.trigger(n,[k]);if(n.isDefaultPrevented()){return}i=k;g.removeClass(f.current);l.addClass(f.current);return e},getConf:function(){return f},getTabs:function(){return g},getPanes:function(){return h},getCurrentPane:function(){return h.eq(i)},getCurrentTab:function(){return g.eq(i)},getIndex:function(){return i},next:function(){return e.click(i+1)},prev:function(){return e.click(i-1)},bind:function(k,l){j.bind(k,l);return e},onBeforeClick:function(k){return this.bind("onBeforeClick",k)},onClick:function(k){return this.bind("onClick",k)},unbind:function(k){j.unbind(k);return e}});g.each(function(k){d(this).bind(f.event,function(l){e.click(k,l);return false})});if(location.hash){e.click(location.hash)}else{if(f.initialIndex===0||f.initialIndex>0){e.click(f.initialIndex)}}h.find("a[href^=#]").click(function(k){e.click(d(this).attr("href"),k)})}d.fn.tabs=function(i,f){var g=this.eq(typeof f=="number"?f:0).data("tabs");if(g){return g}if(d.isFunction(f)){f={onBeforeClick:f}}var h=d.extend({},d.tools.tabs.conf),e=this.length;f=d.extend(h,f);this.each(function(l){var j=d(this);var k=j.find(f.tabs);if(!k.length){k=j.children()}var m=i.jquery?i:j.children(i);if(!m.length){m=e==1?d(i):j.parent().find(i)}g=new a(k,m,f);j.data("tabs",g)});return f.api?g:this}})(jQuery);
(function(d){var a=d.tools.tabs;a.plugins=a.plugins||{};a.plugins.history={version:"1.0.2",conf:{api:false}};var e,b;function c(f){if(f){var g=b.contentWindow.document;g.open().close();g.location.hash=f}}d.fn.onHash=function(g){var f=this;if(d.browser.msie&&d.browser.version<"8"){if(!b){b=d("<iframe/>").attr("src","javascript:false;").hide().get(0);d("body").append(b);setInterval(function(){var i=b.contentWindow.document,j=i.location.hash;if(e!==j){d.event.trigger("hash",j);e=j}},100);c(location.hash||"#")}f.bind("click.hash",function(h){c(d(this).attr("href"))})}else{setInterval(function(){var j=location.hash;var i=f.filter("[href$="+j+"]");if(!i.length){j=j.replace("#","");i=f.filter("[href$="+j+"]")}if(i.length&&j!==e){e=j;d.event.trigger("hash",j)}},100)}d(window).bind("hash",g);return this};d.fn.history=function(g){var h=d.extend({},a.plugins.history.conf),f;g=d.extend(h,g);this.each(function(){var j=d(this).tabs(),i=j.getTabs();if(j){f=j}i.onHash(function(k,l){if(!l||l=="#"){l=j.getConf().initialIndex}j.click(l)});i.click(function(k){location.hash=d(this).attr("href").replace("#","")})});return g.api?f:this}})(jQuery);
(function(c){c.tools=c.tools||{};c.tools.overlay={version:"1.1.2",addEffect:function(e,f,g){b[e]=[f,g]},conf:{top:"10%",left:"center",absolute:false,speed:"normal",closeSpeed:"fast",effect:"default",close:null,oneInstance:true,closeOnClick:true,closeOnEsc:true,api:false,expose:null,target:null}};var b={};c.tools.overlay.addEffect("default",function(e){this.getOverlay().fadeIn(this.getConf().speed,e)},function(e){this.getOverlay().fadeOut(this.getConf().closeSpeed,e)});var d=[];function a(g,k){var o=this,m=c(this),n=c(window),j,i,h,e=k.expose&&c.tools.expose.version;var f=k.target||g.attr("rel");i=f?c(f):null||g;if(!i.length){throw"Could not find Overlay: "+f}if(g&&g.index(i)==-1){g.click(function(p){o.load(p);return p.preventDefault()})}c.each(k,function(p,q){if(c.isFunction(q)){m.bind(p,q)}});c.extend(o,{load:function(u){if(o.isOpened()){return o}var r=b[k.effect];if(!r){throw'Overlay: cannot find effect : "'+k.effect+'"'}if(k.oneInstance){c.each(d,function(){this.close(u)})}u=u||c.Event();u.type="onBeforeLoad";m.trigger(u);if(u.isDefaultPrevented()){return o}h=true;if(e){i.expose().load(u)}var t=k.top;var s=k.left;var p=i.outerWidth({margin:true});var q=i.outerHeight({margin:true});if(typeof t=="string"){t=t=="center"?Math.max((n.height()-q)/2,0):parseInt(t,10)/100*n.height()}if(s=="center"){s=Math.max((n.width()-p)/2,0)}if(!k.absolute){t+=n.scrollTop();s+=n.scrollLeft()}i.css({top:t,left:s,position:"absolute"});u.type="onStart";m.trigger(u);r[0].call(o,function(){if(h){u.type="onLoad";m.trigger(u)}});if(k.closeOnClick){c(document).bind("click.overlay",function(w){if(!o.isOpened()){return}var v=c(w.target);if(v.parents(i).length>1){return}c.each(d,function(){this.close(w)})})}if(k.closeOnEsc){c(document).unbind("keydown.overlay").bind("keydown.overlay",function(v){if(v.keyCode==27){c.each(d,function(){this.close(v)})}})}return o},close:function(q){if(!o.isOpened()){return o}q=q||c.Event();q.type="onBeforeClose";m.trigger(q);if(q.isDefaultPrevented()){return}h=false;b[k.effect][1].call(o,function(){q.type="onClose";m.trigger(q)});var p=true;c.each(d,function(){if(this.isOpened()){p=false}});if(p){c(document).unbind("click.overlay").unbind("keydown.overlay")}return o},getContent:function(){return i},getOverlay:function(){return i},getTrigger:function(){return g},getClosers:function(){return j},isOpened:function(){return h},getConf:function(){return k},bind:function(p,q){m.bind(p,q);return o},unbind:function(p){m.unbind(p);return o}});c.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(p,q){o[q]=function(r){return o.bind(q,r)}});if(e){if(typeof k.expose=="string"){k.expose={color:k.expose}}c.extend(k.expose,{api:true,closeOnClick:k.closeOnClick,closeOnEsc:false});var l=i.expose(k.expose);l.onBeforeClose(function(p){o.close(p)});o.onClose(function(p){l.close(p)})}j=i.find(k.close||".close");if(!j.length&&!k.close){j=c('<div class="close"></div>');i.prepend(j)}j.click(function(p){o.close(p)})}c.fn.overlay=function(e){var f=this.eq(typeof e=="number"?e:0).data("overlay");if(f){return f}if(c.isFunction(e)){e={onBeforeLoad:e}}var g=c.extend({},c.tools.overlay.conf);e=c.extend(true,g,e);this.each(function(){f=new a(c(this),e);d.push(f);c(this).data("overlay",f)});return e.api?f:this}})(jQuery);
(function(b){b.tools=b.tools||{};b.tools.expose={version:"1.0.5",conf:{maskId:null,loadSpeed:"slow",closeSpeed:"fast",closeOnClick:true,closeOnEsc:true,zIndex:9998,opacity:0.8,color:"#456",api:false}};function a(){if(b.browser.msie){var f=b(document).height(),e=b(window).height();return[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,f-e<20?e:f]}return[b(window).width(),b(document).height()]}function c(h,g){var e=this,j=b(this),d=null,f=false,i=0;b.each(g,function(k,l){if(b.isFunction(l)){j.bind(k,l)}});b(window).resize(function(){e.fit()});b.extend(this,{getMask:function(){return d},getExposed:function(){return h},getConf:function(){return g},isLoaded:function(){return f},load:function(n){if(f){return e}i=h.eq(0).css("zIndex");if(g.maskId){d=b("#"+g.maskId)}if(!d||!d.length){var l=a();d=b("<div/>").css({position:"absolute",top:0,left:0,width:l[0],height:l[1],display:"none",opacity:0,zIndex:g.zIndex});if(g.maskId){d.attr("id",g.maskId)}b("body").append(d);var k=d.css("backgroundColor");if(!k||k=="transparent"||k=="rgba(0, 0, 0, 0)"){d.css("backgroundColor",g.color)}if(g.closeOnEsc){b(document).bind("keydown.unexpose",function(o){if(o.keyCode==27){e.close()}})}if(g.closeOnClick){d.bind("click.unexpose",function(o){e.close(o)})}}n=n||b.Event();n.type="onBeforeLoad";j.trigger(n);if(n.isDefaultPrevented()){return e}b.each(h,function(){var o=b(this);if(!/relative|absolute|fixed/i.test(o.css("position"))){o.css("position","relative")}});h.css({zIndex:Math.max(g.zIndex+1,i=="auto"?0:i)});var m=d.height();if(!this.isLoaded()){d.css({opacity:0,display:"block"}).fadeTo(g.loadSpeed,g.opacity,function(){if(d.height()!=m){d.css("height",m)}n.type="onLoad";j.trigger(n)})}f=true;return e},close:function(k){if(!f){return e}k=k||b.Event();k.type="onBeforeClose";j.trigger(k);if(k.isDefaultPrevented()){return e}d.fadeOut(g.closeSpeed,function(){k.type="onClose";j.trigger(k);h.css({zIndex:b.browser.msie?i:null})});f=false;return e},fit:function(){if(d){var k=a();d.css({width:k[0],height:k[1]})}},bind:function(k,l){j.bind(k,l);return e},unbind:function(k){j.unbind(k);return e}});b.each("onBeforeLoad,onLoad,onBeforeClose,onClose".split(","),function(k,l){e[l]=function(m){return e.bind(l,m)}})}b.fn.expose=function(d){var e=this.eq(typeof d=="number"?d:0).data("expose");if(e){return e}if(typeof d=="string"){d={color:d}}var f=b.extend({},b.tools.expose.conf);d=b.extend(f,d);this.each(function(){e=new c(b(this),d);b(this).data("expose",e)});return d.api?e:this}})(jQuery);
                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/javascripts/jquery.include.js                                                 0000777 0000000 0000000 00000005371 12534142432 021472  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   

/** 
 * $.include - script inclusion jQuery plugin 
 * Based on idea from http://www.gnucitizen.org/projects/jquery-include/ 
 * @author Tobiasz Cudnik 
 * @link http://meta20.net/.include_script_inclusion_jQuery_plugin 
 * @license MIT 
 */  
// overload jquery's onDomReady  
if ( jQuery.browser.mozilla || jQuery.browser.opera ) {  
    document.removeEventListener( "DOMContentLoaded", jQuery.ready, false );  
    document.addEventListener( "DOMContentLoaded", function(){ jQuery.ready(); }, false );  
}  
jQuery.event.remove( window, "load", jQuery.ready );  
jQuery.event.add( window, "load", function(){ jQuery.ready(); } );  
jQuery.extend({  
    includeStates: {},  
    include: function(url, callback, dependency){  
        if ( typeof callback != 'function' && ! dependency ) {  
            dependency = callback;  
            callback = null;  
        }  
        url = url.replace('\n', '');  
        jQuery.includeStates[url] = false;  
        var script = document.createElement('script');  
        script.type = 'text/javascript';  
        script.onload = function () {  
            jQuery.includeStates[url] = true;  
            if ( callback )  
                callback.call(script);  
        };  
        script.onreadystatechange = function () {  
            if ( this.readyState != "complete" && this.readyState != "loaded" ) return;  
            jQuery.includeStates[url] = true;  
            if ( callback )  
                callback.call(script);  
        };  
        script.src = url;  
        if ( dependency ) {  
            if ( dependency.constructor != Array )  
                dependency = [dependency];  
            setTimeout(function(){  
                var valid = true;  
                $.each(dependency, function(k, v){  
                    if (! v() ) {  
                        valid = false;  
                        return false;  
                    }  
                })  
                if ( valid )  
                    document.getElementsByTagName('head')[0].appendChild(script);  
                else  
                    setTimeout(arguments.callee, 10);  
            }, 10);  
        }  
        else  
            document.getElementsByTagName('head')[0].appendChild(script);  
        return function(){  
            return jQuery.includeStates[url];  
        }  
    },  
    readyOld: jQuery.ready,  
    ready: function () {  
        if (jQuery.isReady) return;  
        imReady = true;  
        $.each(jQuery.includeStates, function(url, state) {  
            if (! state)  
                return imReady = false;  
        });  
        if (imReady) {  
            jQuery.readyOld.apply(jQuery, arguments);  
        } else {  
            setTimeout(arguments.callee, 10);  
        }  
    }  
});  
                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/javascripts/prototype-1.6.1.js                                                0000666 0000000 0000000 00000421116 12534142432 021233  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*  Prototype JavaScript framework, version 1.6.1
 *  (c) 2005-2009 Sam Stephenson
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://www.prototypejs.org/
 *
 *--------------------------------------------------------------------------*/

var Prototype = {
  Version: '1.6.1',

  Browser: (function(){
    var ua = navigator.userAgent;
    var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
    return {
      IE:             !!window.attachEvent && !isOpera,
      Opera:          isOpera,
      WebKit:         ua.indexOf('AppleWebKit/') > -1,
      Gecko:          ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
      MobileSafari:   /Apple.*Mobile.*Safari/.test(ua)
    }
  })(),

  BrowserFeatures: {
    XPath: !!document.evaluate,
    SelectorsAPI: !!document.querySelector,
    ElementExtensions: (function() {
      var constructor = window.Element || window.HTMLElement;
      return !!(constructor && constructor.prototype);
    })(),
    SpecificElementExtensions: (function() {
      if (typeof window.HTMLDivElement !== 'undefined')
        return true;

      var div = document.createElement('div');
      var form = document.createElement('form');
      var isSupported = false;

      if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) {
        isSupported = true;
      }

      div = form = null;

      return isSupported;
    })()
  },

  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,

  emptyFunction: function() { },
  K: function(x) { return x }
};

if (Prototype.Browser.MobileSafari)
  Prototype.BrowserFeatures.SpecificElementExtensions = false;


var Abstract = { };


var Try = {
  these: function() {
    var returnValue;

    for (var i = 0, length = arguments.length; i < length; i++) {
      var lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) { }
    }

    return returnValue;
  }
};

/* Based on Alex Arnell's inheritance implementation. */

var Class = (function() {
  function subclass() {};
  function create() {
    var parent = null, properties = $A(arguments);
    if (Object.isFunction(properties[0]))
      parent = properties.shift();

    function klass() {
      this.initialize.apply(this, arguments);
    }

    Object.extend(klass, Class.Methods);
    klass.superclass = parent;
    klass.subclasses = [];

    if (parent) {
      subclass.prototype = parent.prototype;
      klass.prototype = new subclass;
      parent.subclasses.push(klass);
    }

    for (var i = 0; i < properties.length; i++)
      klass.addMethods(properties[i]);

    if (!klass.prototype.initialize)
      klass.prototype.initialize = Prototype.emptyFunction;

    klass.prototype.constructor = klass;
    return klass;
  }

  function addMethods(source) {
    var ancestor   = this.superclass && this.superclass.prototype;
    var properties = Object.keys(source);

    if (!Object.keys({ toString: true }).length) {
      if (source.toString != Object.prototype.toString)
        properties.push("toString");
      if (source.valueOf != Object.prototype.valueOf)
        properties.push("valueOf");
    }

    for (var i = 0, length = properties.length; i < length; i++) {
      var property = properties[i], value = source[property];
      if (ancestor && Object.isFunction(value) &&
          value.argumentNames().first() == "$super") {
        var method = value;
        value = (function(m) {
          return function() { return ancestor[m].apply(this, arguments); };
        })(property).wrap(method);

        value.valueOf = method.valueOf.bind(method);
        value.toString = method.toString.bind(method);
      }
      this.prototype[property] = value;
    }

    return this;
  }

  return {
    create: create,
    Methods: {
      addMethods: addMethods
    }
  };
})();
(function() {

  var _toString = Object.prototype.toString;

  function extend(destination, source) {
    for (var property in source)
      destination[property] = source[property];
    return destination;
  }

  function inspect(object) {
    try {
      if (isUndefined(object)) return 'undefined';
      if (object === null) return 'null';
      return object.inspect ? object.inspect() : String(object);
    } catch (e) {
      if (e instanceof RangeError) return '...';
      throw e;
    }
  }

  function toJSON(object) {
    var type = typeof object;
    switch (type) {
      case 'undefined':
      case 'function':
      case 'unknown': return;
      case 'boolean': return object.toString();
    }

    if (object === null) return 'null';
    if (object.toJSON) return object.toJSON();
    if (isElement(object)) return;

    var results = [];
    for (var property in object) {
      var value = toJSON(object[property]);
      if (!isUndefined(value))
        results.push(property.toJSON() + ': ' + value);
    }

    return '{' + results.join(', ') + '}';
  }

  function toQueryString(object) {
    return $H(object).toQueryString();
  }

  function toHTML(object) {
    return object && object.toHTML ? object.toHTML() : String.interpret(object);
  }

  function keys(object) {
    var results = [];
    for (var property in object)
      results.push(property);
    return results;
  }

  function values(object) {
    var results = [];
    for (var property in object)
      results.push(object[property]);
    return results;
  }

  function clone(object) {
    return extend({ }, object);
  }

  function isElement(object) {
    return !!(object && object.nodeType == 1);
  }

  function isArray(object) {
    return _toString.call(object) == "[object Array]";
  }


  function isHash(object) {
    return object instanceof Hash;
  }

  function isFunction(object) {
    return typeof object === "function";
  }

  function isString(object) {
    return _toString.call(object) == "[object String]";
  }

  function isNumber(object) {
    return _toString.call(object) == "[object Number]";
  }

  function isUndefined(object) {
    return typeof object === "undefined";
  }

  extend(Object, {
    extend:        extend,
    inspect:       inspect,
    toJSON:        toJSON,
    toQueryString: toQueryString,
    toHTML:        toHTML,
    keys:          keys,
    values:        values,
    clone:         clone,
    isElement:     isElement,
    isArray:       isArray,
    isHash:        isHash,
    isFunction:    isFunction,
    isString:      isString,
    isNumber:      isNumber,
    isUndefined:   isUndefined
  });
})();
Object.extend(Function.prototype, (function() {
  var slice = Array.prototype.slice;

  function update(array, args) {
    var arrayLength = array.length, length = args.length;
    while (length--) array[arrayLength + length] = args[length];
    return array;
  }

  function merge(array, args) {
    array = slice.call(array, 0);
    return update(array, args);
  }

  function argumentNames() {
    var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
      .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
      .replace(/\s+/g, '').split(',');
    return names.length == 1 && !names[0] ? [] : names;
  }

  function bind(context) {
    if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
    var __method = this, args = slice.call(arguments, 1);
    return function() {
      var a = merge(args, arguments);
      return __method.apply(context, a);
    }
  }

  function bindAsEventListener(context) {
    var __method = this, args = slice.call(arguments, 1);
    return function(event) {
      var a = update([event || window.event], args);
      return __method.apply(context, a);
    }
  }

  function curry() {
    if (!arguments.length) return this;
    var __method = this, args = slice.call(arguments, 0);
    return function() {
      var a = merge(args, arguments);
      return __method.apply(this, a);
    }
  }

  function delay(timeout) {
    var __method = this, args = slice.call(arguments, 1);
    timeout = timeout * 1000
    return window.setTimeout(function() {
      return __method.apply(__method, args);
    }, timeout);
  }

  function defer() {
    var args = update([0.01], arguments);
    return this.delay.apply(this, args);
  }

  function wrap(wrapper) {
    var __method = this;
    return function() {
      var a = update([__method.bind(this)], arguments);
      return wrapper.apply(this, a);
    }
  }

  function methodize() {
    if (this._methodized) return this._methodized;
    var __method = this;
    return this._methodized = function() {
      var a = update([this], arguments);
      return __method.apply(null, a);
    };
  }

  return {
    argumentNames:       argumentNames,
    bind:                bind,
    bindAsEventListener: bindAsEventListener,
    curry:               curry,
    delay:               delay,
    defer:               defer,
    wrap:                wrap,
    methodize:           methodize
  }
})());


Date.prototype.toJSON = function() {
  return '"' + this.getUTCFullYear() + '-' +
    (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
    this.getUTCDate().toPaddedString(2) + 'T' +
    this.getUTCHours().toPaddedString(2) + ':' +
    this.getUTCMinutes().toPaddedString(2) + ':' +
    this.getUTCSeconds().toPaddedString(2) + 'Z"';
};


RegExp.prototype.match = RegExp.prototype.test;

RegExp.escape = function(str) {
  return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
};
var PeriodicalExecuter = Class.create({
  initialize: function(callback, frequency) {
    this.callback = callback;
    this.frequency = frequency;
    this.currentlyExecuting = false;

    this.registerCallback();
  },

  registerCallback: function() {
    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  execute: function() {
    this.callback(this);
  },

  stop: function() {
    if (!this.timer) return;
    clearInterval(this.timer);
    this.timer = null;
  },

  onTimerEvent: function() {
    if (!this.currentlyExecuting) {
      try {
        this.currentlyExecuting = true;
        this.execute();
        this.currentlyExecuting = false;
      } catch(e) {
        this.currentlyExecuting = false;
        throw e;
      }
    }
  }
});
Object.extend(String, {
  interpret: function(value) {
    return value == null ? '' : String(value);
  },
  specialChar: {
    '\b': '\\b',
    '\t': '\\t',
    '\n': '\\n',
    '\f': '\\f',
    '\r': '\\r',
    '\\': '\\\\'
  }
});

Object.extend(String.prototype, (function() {

  function prepareReplacement(replacement) {
    if (Object.isFunction(replacement)) return replacement;
    var template = new Template(replacement);
    return function(match) { return template.evaluate(match) };
  }

  function gsub(pattern, replacement) {
    var result = '', source = this, match;
    replacement = prepareReplacement(replacement);

    if (Object.isString(pattern))
      pattern = RegExp.escape(pattern);

    if (!(pattern.length || pattern.source)) {
      replacement = replacement('');
      return replacement + source.split('').join(replacement) + replacement;
    }

    while (source.length > 0) {
      if (match = source.match(pattern)) {
        result += source.slice(0, match.index);
        result += String.interpret(replacement(match));
        source  = source.slice(match.index + match[0].length);
      } else {
        result += source, source = '';
      }
    }
    return result;
  }

  function sub(pattern, replacement, count) {
    replacement = prepareReplacement(replacement);
    count = Object.isUndefined(count) ? 1 : count;

    return this.gsub(pattern, function(match) {
      if (--count < 0) return match[0];
      return replacement(match);
    });
  }

  function scan(pattern, iterator) {
    this.gsub(pattern, iterator);
    return String(this);
  }

  function truncate(length, truncation) {
    length = length || 30;
    truncation = Object.isUndefined(truncation) ? '...' : truncation;
    return this.length > length ?
      this.slice(0, length - truncation.length) + truncation : String(this);
  }

  function strip() {
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
  }

  function stripTags() {
    return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, '');
  }

  function stripScripts() {
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
  }

  function extractScripts() {
    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  }

  function evalScripts() {
    return this.extractScripts().map(function(script) { return eval(script) });
  }

  function escapeHTML() {
    return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
  }

  function unescapeHTML() {
    return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
  }


  function toQueryParams(separator) {
    var match = this.strip().match(/([^?#]*)(#.*)?$/);
    if (!match) return { };

    return match[1].split(separator || '&').inject({ }, function(hash, pair) {
      if ((pair = pair.split('='))[0]) {
        var key = decodeURIComponent(pair.shift());
        var value = pair.length > 1 ? pair.join('=') : pair[0];
        if (value != undefined) value = decodeURIComponent(value);

        if (key in hash) {
          if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
          hash[key].push(value);
        }
        else hash[key] = value;
      }
      return hash;
    });
  }

  function toArray() {
    return this.split('');
  }

  function succ() {
    return this.slice(0, this.length - 1) +
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
  }

  function times(count) {
    return count < 1 ? '' : new Array(count + 1).join(this);
  }

  function camelize() {
    var parts = this.split('-'), len = parts.length;
    if (len == 1) return parts[0];

    var camelized = this.charAt(0) == '-'
      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
      : parts[0];

    for (var i = 1; i < len; i++)
      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);

    return camelized;
  }

  function capitalize() {
    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
  }

  function underscore() {
    return this.replace(/::/g, '/')
               .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
               .replace(/([a-z\d])([A-Z])/g, '$1_$2')
               .replace(/-/g, '_')
               .toLowerCase();
  }

  function dasherize() {
    return this.replace(/_/g, '-');
  }

  function inspect(useDoubleQuotes) {
    var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) {
      if (character in String.specialChar) {
        return String.specialChar[character];
      }
      return '\\u00' + character.charCodeAt().toPaddedString(2, 16);
    });
    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
    return "'" + escapedString.replace(/'/g, '\\\'') + "'";
  }

  function toJSON() {
    return this.inspect(true);
  }

  function unfilterJSON(filter) {
    return this.replace(filter || Prototype.JSONFilter, '$1');
  }

  function isJSON() {
    var str = this;
    if (str.blank()) return false;
    str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
  }

  function evalJSON(sanitize) {
    var json = this.unfilterJSON();
    try {
      if (!sanitize || json.isJSON()) return eval('(' + json + ')');
    } catch (e) { }
    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
  }

  function include(pattern) {
    return this.indexOf(pattern) > -1;
  }

  function startsWith(pattern) {
    return this.indexOf(pattern) === 0;
  }

  function endsWith(pattern) {
    var d = this.length - pattern.length;
    return d >= 0 && this.lastIndexOf(pattern) === d;
  }

  function empty() {
    return this == '';
  }

  function blank() {
    return /^\s*$/.test(this);
  }

  function interpolate(object, pattern) {
    return new Template(this, pattern).evaluate(object);
  }

  return {
    gsub:           gsub,
    sub:            sub,
    scan:           scan,
    truncate:       truncate,
    strip:          String.prototype.trim ? String.prototype.trim : strip,
    stripTags:      stripTags,
    stripScripts:   stripScripts,
    extractScripts: extractScripts,
    evalScripts:    evalScripts,
    escapeHTML:     escapeHTML,
    unescapeHTML:   unescapeHTML,
    toQueryParams:  toQueryParams,
    parseQuery:     toQueryParams,
    toArray:        toArray,
    succ:           succ,
    times:          times,
    camelize:       camelize,
    capitalize:     capitalize,
    underscore:     underscore,
    dasherize:      dasherize,
    inspect:        inspect,
    toJSON:         toJSON,
    unfilterJSON:   unfilterJSON,
    isJSON:         isJSON,
    evalJSON:       evalJSON,
    include:        include,
    startsWith:     startsWith,
    endsWith:       endsWith,
    empty:          empty,
    blank:          blank,
    interpolate:    interpolate
  };
})());

var Template = Class.create({
  initialize: function(template, pattern) {
    this.template = template.toString();
    this.pattern = pattern || Template.Pattern;
  },

  evaluate: function(object) {
    if (object && Object.isFunction(object.toTemplateReplacements))
      object = object.toTemplateReplacements();

    return this.template.gsub(this.pattern, function(match) {
      if (object == null) return (match[1] + '');

      var before = match[1] || '';
      if (before == '\\') return match[2];

      var ctx = object, expr = match[3];
      var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
      match = pattern.exec(expr);
      if (match == null) return before;

      while (match != null) {
        var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1];
        ctx = ctx[comp];
        if (null == ctx || '' == match[3]) break;
        expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
        match = pattern.exec(expr);
      }

      return before + String.interpret(ctx);
    });
  }
});
Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;

var $break = { };

var Enumerable = (function() {
  function each(iterator, context) {
    var index = 0;
    try {
      this._each(function(value) {
        iterator.call(context, value, index++);
      });
    } catch (e) {
      if (e != $break) throw e;
    }
    return this;
  }

  function eachSlice(number, iterator, context) {
    var index = -number, slices = [], array = this.toArray();
    if (number < 1) return array;
    while ((index += number) < array.length)
      slices.push(array.slice(index, index+number));
    return slices.collect(iterator, context);
  }

  function all(iterator, context) {
    iterator = iterator || Prototype.K;
    var result = true;
    this.each(function(value, index) {
      result = result && !!iterator.call(context, value, index);
      if (!result) throw $break;
    });
    return result;
  }

  function any(iterator, context) {
    iterator = iterator || Prototype.K;
    var result = false;
    this.each(function(value, index) {
      if (result = !!iterator.call(context, value, index))
        throw $break;
    });
    return result;
  }

  function collect(iterator, context) {
    iterator = iterator || Prototype.K;
    var results = [];
    this.each(function(value, index) {
      results.push(iterator.call(context, value, index));
    });
    return results;
  }

  function detect(iterator, context) {
    var result;
    this.each(function(value, index) {
      if (iterator.call(context, value, index)) {
        result = value;
        throw $break;
      }
    });
    return result;
  }

  function findAll(iterator, context) {
    var results = [];
    this.each(function(value, index) {
      if (iterator.call(context, value, index))
        results.push(value);
    });
    return results;
  }

  function grep(filter, iterator, context) {
    iterator = iterator || Prototype.K;
    var results = [];

    if (Object.isString(filter))
      filter = new RegExp(RegExp.escape(filter));

    this.each(function(value, index) {
      if (filter.match(value))
        results.push(iterator.call(context, value, index));
    });
    return results;
  }

  function include(object) {
    if (Object.isFunction(this.indexOf))
      if (this.indexOf(object) != -1) return true;

    var found = false;
    this.each(function(value) {
      if (value == object) {
        found = true;
        throw $break;
      }
    });
    return found;
  }

  function inGroupsOf(number, fillWith) {
    fillWith = Object.isUndefined(fillWith) ? null : fillWith;
    return this.eachSlice(number, function(slice) {
      while(slice.length < number) slice.push(fillWith);
      return slice;
    });
  }

  function inject(memo, iterator, context) {
    this.each(function(value, index) {
      memo = iterator.call(context, memo, value, index);
    });
    return memo;
  }

  function invoke(method) {
    var args = $A(arguments).slice(1);
    return this.map(function(value) {
      return value[method].apply(value, args);
    });
  }

  function max(iterator, context) {
    iterator = iterator || Prototype.K;
    var result;
    this.each(function(value, index) {
      value = iterator.call(context, value, index);
      if (result == null || value >= result)
        result = value;
    });
    return result;
  }

  function min(iterator, context) {
    iterator = iterator || Prototype.K;
    var result;
    this.each(function(value, index) {
      value = iterator.call(context, value, index);
      if (result == null || value < result)
        result = value;
    });
    return result;
  }

  function partition(iterator, context) {
    iterator = iterator || Prototype.K;
    var trues = [], falses = [];
    this.each(function(value, index) {
      (iterator.call(context, value, index) ?
        trues : falses).push(value);
    });
    return [trues, falses];
  }

  function pluck(property) {
    var results = [];
    this.each(function(value) {
      results.push(value[property]);
    });
    return results;
  }

  function reject(iterator, context) {
    var results = [];
    this.each(function(value, index) {
      if (!iterator.call(context, value, index))
        results.push(value);
    });
    return results;
  }

  function sortBy(iterator, context) {
    return this.map(function(value, index) {
      return {
        value: value,
        criteria: iterator.call(context, value, index)
      };
    }).sort(function(left, right) {
      var a = left.criteria, b = right.criteria;
      return a < b ? -1 : a > b ? 1 : 0;
    }).pluck('value');
  }

  function toArray() {
    return this.map();
  }

  function zip() {
    var iterator = Prototype.K, args = $A(arguments);
    if (Object.isFunction(args.last()))
      iterator = args.pop();

    var collections = [this].concat(args).map($A);
    return this.map(function(value, index) {
      return iterator(collections.pluck(index));
    });
  }

  function size() {
    return this.toArray().length;
  }

  function inspect() {
    return '#<Enumerable:' + this.toArray().inspect() + '>';
  }









  return {
    each:       each,
    eachSlice:  eachSlice,
    all:        all,
    every:      all,
    any:        any,
    some:       any,
    collect:    collect,
    map:        collect,
    detect:     detect,
    findAll:    findAll,
    select:     findAll,
    filter:     findAll,
    grep:       grep,
    include:    include,
    member:     include,
    inGroupsOf: inGroupsOf,
    inject:     inject,
    invoke:     invoke,
    max:        max,
    min:        min,
    partition:  partition,
    pluck:      pluck,
    reject:     reject,
    sortBy:     sortBy,
    toArray:    toArray,
    entries:    toArray,
    zip:        zip,
    size:       size,
    inspect:    inspect,
    find:       detect
  };
})();
function $A(iterable) {
  if (!iterable) return [];
  if ('toArray' in Object(iterable)) return iterable.toArray();
  var length = iterable.length || 0, results = new Array(length);
  while (length--) results[length] = iterable[length];
  return results;
}

function $w(string) {
  if (!Object.isString(string)) return [];
  string = string.strip();
  return string ? string.split(/\s+/) : [];
}

Array.from = $A;


(function() {
  var arrayProto = Array.prototype,
      slice = arrayProto.slice,
      _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available

  function each(iterator) {
    for (var i = 0, length = this.length; i < length; i++)
      iterator(this[i]);
  }
  if (!_each) _each = each;

  function clear() {
    this.length = 0;
    return this;
  }

  function first() {
    return this[0];
  }

  function last() {
    return this[this.length - 1];
  }

  function compact() {
    return this.select(function(value) {
      return value != null;
    });
  }

  function flatten() {
    return this.inject([], function(array, value) {
      if (Object.isArray(value))
        return array.concat(value.flatten());
      array.push(value);
      return array;
    });
  }

  function without() {
    var values = slice.call(arguments, 0);
    return this.select(function(value) {
      return !values.include(value);
    });
  }

  function reverse(inline) {
    return (inline !== false ? this : this.toArray())._reverse();
  }

  function uniq(sorted) {
    return this.inject([], function(array, value, index) {
      if (0 == index || (sorted ? array.last() != value : !array.include(value)))
        array.push(value);
      return array;
    });
  }

  function intersect(array) {
    return this.uniq().findAll(function(item) {
      return array.detect(function(value) { return item === value });
    });
  }


  function clone() {
    return slice.call(this, 0);
  }

  function size() {
    return this.length;
  }

  function inspect() {
    return '[' + this.map(Object.inspect).join(', ') + ']';
  }

  function toJSON() {
    var results = [];
    this.each(function(object) {
      var value = Object.toJSON(object);
      if (!Object.isUndefined(value)) results.push(value);
    });
    return '[' + results.join(', ') + ']';
  }

  function indexOf(item, i) {
    i || (i = 0);
    var length = this.length;
    if (i < 0) i = length + i;
    for (; i < length; i++)
      if (this[i] === item) return i;
    return -1;
  }

  function lastIndexOf(item, i) {
    i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
    var n = this.slice(0, i).reverse().indexOf(item);
    return (n < 0) ? n : i - n - 1;
  }

  function concat() {
    var array = slice.call(this, 0), item;
    for (var i = 0, length = arguments.length; i < length; i++) {
      item = arguments[i];
      if (Object.isArray(item) && !('callee' in item)) {
        for (var j = 0, arrayLength = item.length; j < arrayLength; j++)
          array.push(item[j]);
      } else {
        array.push(item);
      }
    }
    return array;
  }

  Object.extend(arrayProto, Enumerable);

  if (!arrayProto._reverse)
    arrayProto._reverse = arrayProto.reverse;

  Object.extend(arrayProto, {
    _each:     _each,
    clear:     clear,
    first:     first,
    last:      last,
    compact:   compact,
    flatten:   flatten,
    without:   without,
    reverse:   reverse,
    uniq:      uniq,
    intersect: intersect,
    clone:     clone,
    toArray:   clone,
    size:      size,
    inspect:   inspect,
    toJSON:    toJSON
  });

  var CONCAT_ARGUMENTS_BUGGY = (function() {
    return [].concat(arguments)[0][0] !== 1;
  })(1,2)

  if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat;

  if (!arrayProto.indexOf) arrayProto.indexOf = indexOf;
  if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf;
})();
function $H(object) {
  return new Hash(object);
};

var Hash = Class.create(Enumerable, (function() {
  function initialize(object) {
    this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
  }

  function _each(iterator) {
    for (var key in this._object) {
      var value = this._object[key], pair = [key, value];
      pair.key = key;
      pair.value = value;
      iterator(pair);
    }
  }

  function set(key, value) {
    return this._object[key] = value;
  }

  function get(key) {
    if (this._object[key] !== Object.prototype[key])
      return this._object[key];
  }

  function unset(key) {
    var value = this._object[key];
    delete this._object[key];
    return value;
  }

  function toObject() {
    return Object.clone(this._object);
  }

  function keys() {
    return this.pluck('key');
  }

  function values() {
    return this.pluck('value');
  }

  function index(value) {
    var match = this.detect(function(pair) {
      return pair.value === value;
    });
    return match && match.key;
  }

  function merge(object) {
    return this.clone().update(object);
  }

  function update(object) {
    return new Hash(object).inject(this, function(result, pair) {
      result.set(pair.key, pair.value);
      return result;
    });
  }

  function toQueryPair(key, value) {
    if (Object.isUndefined(value)) return key;
    return key + '=' + encodeURIComponent(String.interpret(value));
  }

  function toQueryString() {
    return this.inject([], function(results, pair) {
      var key = encodeURIComponent(pair.key), values = pair.value;

      if (values && typeof values == 'object') {
        if (Object.isArray(values))
          return results.concat(values.map(toQueryPair.curry(key)));
      } else results.push(toQueryPair(key, values));
      return results;
    }).join('&');
  }

  function inspect() {
    return '#<Hash:{' + this.map(function(pair) {
      return pair.map(Object.inspect).join(': ');
    }).join(', ') + '}>';
  }

  function toJSON() {
    return Object.toJSON(this.toObject());
  }

  function clone() {
    return new Hash(this);
  }

  return {
    initialize:             initialize,
    _each:                  _each,
    set:                    set,
    get:                    get,
    unset:                  unset,
    toObject:               toObject,
    toTemplateReplacements: toObject,
    keys:                   keys,
    values:                 values,
    index:                  index,
    merge:                  merge,
    update:                 update,
    toQueryString:          toQueryString,
    inspect:                inspect,
    toJSON:                 toJSON,
    clone:                  clone
  };
})());

Hash.from = $H;
Object.extend(Number.prototype, (function() {
  function toColorPart() {
    return this.toPaddedString(2, 16);
  }

  function succ() {
    return this + 1;
  }

  function times(iterator, context) {
    $R(0, this, true).each(iterator, context);
    return this;
  }

  function toPaddedString(length, radix) {
    var string = this.toString(radix || 10);
    return '0'.times(length - string.length) + string;
  }

  function toJSON() {
    return isFinite(this) ? this.toString() : 'null';
  }

  function abs() {
    return Math.abs(this);
  }

  function round() {
    return Math.round(this);
  }

  function ceil() {
    return Math.ceil(this);
  }

  function floor() {
    return Math.floor(this);
  }

  return {
    toColorPart:    toColorPart,
    succ:           succ,
    times:          times,
    toPaddedString: toPaddedString,
    toJSON:         toJSON,
    abs:            abs,
    round:          round,
    ceil:           ceil,
    floor:          floor
  };
})());

function $R(start, end, exclusive) {
  return new ObjectRange(start, end, exclusive);
}

var ObjectRange = Class.create(Enumerable, (function() {
  function initialize(start, end, exclusive) {
    this.start = start;
    this.end = end;
    this.exclusive = exclusive;
  }

  function _each(iterator) {
    var value = this.start;
    while (this.include(value)) {
      iterator(value);
      value = value.succ();
    }
  }

  function include(value) {
    if (value < this.start)
      return false;
    if (this.exclusive)
      return value < this.end;
    return value <= this.end;
  }

  return {
    initialize: initialize,
    _each:      _each,
    include:    include
  };
})());



var Ajax = {
  getTransport: function() {
    return Try.these(
      function() {return new XMLHttpRequest()},
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
    ) || false;
  },

  activeRequestCount: 0
};

Ajax.Responders = {
  responders: [],

  _each: function(iterator) {
    this.responders._each(iterator);
  },

  register: function(responder) {
    if (!this.include(responder))
      this.responders.push(responder);
  },

  unregister: function(responder) {
    this.responders = this.responders.without(responder);
  },

  dispatch: function(callback, request, transport, json) {
    this.each(function(responder) {
      if (Object.isFunction(responder[callback])) {
        try {
          responder[callback].apply(responder, [request, transport, json]);
        } catch (e) { }
      }
    });
  }
};

Object.extend(Ajax.Responders, Enumerable);

Ajax.Responders.register({
  onCreate:   function() { Ajax.activeRequestCount++ },
  onComplete: function() { Ajax.activeRequestCount-- }
});
Ajax.Base = Class.create({
  initialize: function(options) {
    this.options = {
      method:       'post',
      asynchronous: true,
      contentType:  'application/x-www-form-urlencoded',
      encoding:     'UTF-8',
      parameters:   '',
      evalJSON:     true,
      evalJS:       true
    };
    Object.extend(this.options, options || { });

    this.options.method = this.options.method.toLowerCase();

    if (Object.isString(this.options.parameters))
      this.options.parameters = this.options.parameters.toQueryParams();
    else if (Object.isHash(this.options.parameters))
      this.options.parameters = this.options.parameters.toObject();
  }
});
Ajax.Request = Class.create(Ajax.Base, {
  _complete: false,

  initialize: function($super, url, options) {
    $super(options);
    this.transport = Ajax.getTransport();
    this.request(url);
  },

  request: function(url) {
    this.url = url;
    this.method = this.options.method;
    var params = Object.clone(this.options.parameters);

    if (!['get', 'post'].include(this.method)) {
      params['_method'] = this.method;
      this.method = 'post';
    }

    this.parameters = params;

    if (params = Object.toQueryString(params)) {
      if (this.method == 'get')
        this.url += (this.url.include('?') ? '&' : '?') + params;
      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
        params += '&_=';
    }

    try {
      var response = new Ajax.Response(this);
      if (this.options.onCreate) this.options.onCreate(response);
      Ajax.Responders.dispatch('onCreate', this, response);

      this.transport.open(this.method.toUpperCase(), this.url,
        this.options.asynchronous);

      if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);

      this.transport.onreadystatechange = this.onStateChange.bind(this);
      this.setRequestHeaders();

      this.body = this.method == 'post' ? (this.options.postBody || params) : null;
      this.transport.send(this.body);

      /* Force Firefox to handle ready state 4 for synchronous requests */
      if (!this.options.asynchronous && this.transport.overrideMimeType)
        this.onStateChange();

    }
    catch (e) {
      this.dispatchException(e);
    }
  },

  onStateChange: function() {
    var readyState = this.transport.readyState;
    if (readyState > 1 && !((readyState == 4) && this._complete))
      this.respondToReadyState(this.transport.readyState);
  },

  setRequestHeaders: function() {
    var headers = {
      'X-Requested-With': 'XMLHttpRequest',
      'X-Prototype-Version': Prototype.Version,
      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
    };

    if (this.method == 'post') {
      headers['Content-type'] = this.options.contentType +
        (this.options.encoding ? '; charset=' + this.options.encoding : '');

      /* Force "Connection: close" for older Mozilla browsers to work
       * around a bug where XMLHttpRequest sends an incorrect
       * Content-length header. See Mozilla Bugzilla #246651.
       */
      if (this.transport.overrideMimeType &&
          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
            headers['Connection'] = 'close';
    }

    if (typeof this.options.requestHeaders == 'object') {
      var extras = this.options.requestHeaders;

      if (Object.isFunction(extras.push))
        for (var i = 0, length = extras.length; i < length; i += 2)
          headers[extras[i]] = extras[i+1];
      else
        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
    }

    for (var name in headers)
      this.transport.setRequestHeader(name, headers[name]);
  },

  success: function() {
    var status = this.getStatus();
    return !status || (status >= 200 && status < 300);
  },

  getStatus: function() {
    try {
      return this.transport.status || 0;
    } catch (e) { return 0 }
  },

  respondToReadyState: function(readyState) {
    var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);

    if (state == 'Complete') {
      try {
        this._complete = true;
        (this.options['on' + response.status]
         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
         || Prototype.emptyFunction)(response, response.headerJSON);
      } catch (e) {
        this.dispatchException(e);
      }

      var contentType = response.getHeader('Content-type');
      if (this.options.evalJS == 'force'
          || (this.options.evalJS && this.isSameOrigin() && contentType
          && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
        this.evalResponse();
    }

    try {
      (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
      Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
    } catch (e) {
      this.dispatchException(e);
    }

    if (state == 'Complete') {
      this.transport.onreadystatechange = Prototype.emptyFunction;
    }
  },

  isSameOrigin: function() {
    var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
    return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
      protocol: location.protocol,
      domain: document.domain,
      port: location.port ? ':' + location.port : ''
    }));
  },

  getHeader: function(name) {
    try {
      return this.transport.getResponseHeader(name) || null;
    } catch (e) { return null; }
  },

  evalResponse: function() {
    try {
      return eval((this.transport.responseText || '').unfilterJSON());
    } catch (e) {
      this.dispatchException(e);
    }
  },

  dispatchException: function(exception) {
    (this.options.onException || Prototype.emptyFunction)(this, exception);
    Ajax.Responders.dispatch('onException', this, exception);
  }
});

Ajax.Request.Events =
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];








Ajax.Response = Class.create({
  initialize: function(request){
    this.request = request;
    var transport  = this.transport  = request.transport,
        readyState = this.readyState = transport.readyState;

    if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
      this.status       = this.getStatus();
      this.statusText   = this.getStatusText();
      this.responseText = String.interpret(transport.responseText);
      this.headerJSON   = this._getHeaderJSON();
    }

    if(readyState == 4) {
      var xml = transport.responseXML;
      this.responseXML  = Object.isUndefined(xml) ? null : xml;
      this.responseJSON = this._getResponseJSON();
    }
  },

  status:      0,

  statusText: '',

  getStatus: Ajax.Request.prototype.getStatus,

  getStatusText: function() {
    try {
      return this.transport.statusText || '';
    } catch (e) { return '' }
  },

  getHeader: Ajax.Request.prototype.getHeader,

  getAllHeaders: function() {
    try {
      return this.getAllResponseHeaders();
    } catch (e) { return null }
  },

  getResponseHeader: function(name) {
    return this.transport.getResponseHeader(name);
  },

  getAllResponseHeaders: function() {
    return this.transport.getAllResponseHeaders();
  },

  _getHeaderJSON: function() {
    var json = this.getHeader('X-JSON');
    if (!json) return null;
    json = decodeURIComponent(escape(json));
    try {
      return json.evalJSON(this.request.options.sanitizeJSON ||
        !this.request.isSameOrigin());
    } catch (e) {
      this.request.dispatchException(e);
    }
  },

  _getResponseJSON: function() {
    var options = this.request.options;
    if (!options.evalJSON || (options.evalJSON != 'force' &&
      !(this.getHeader('Content-type') || '').include('application/json')) ||
        this.responseText.blank())
          return null;
    try {
      return this.responseText.evalJSON(options.sanitizeJSON ||
        !this.request.isSameOrigin());
    } catch (e) {
      this.request.dispatchException(e);
    }
  }
});

Ajax.Updater = Class.create(Ajax.Request, {
  initialize: function($super, container, url, options) {
    this.container = {
      success: (container.success || container),
      failure: (container.failure || (container.success ? null : container))
    };

    options = Object.clone(options);
    var onComplete = options.onComplete;
    options.onComplete = (function(response, json) {
      this.updateContent(response.responseText);
      if (Object.isFunction(onComplete)) onComplete(response, json);
    }).bind(this);

    $super(url, options);
  },

  updateContent: function(responseText) {
    var receiver = this.container[this.success() ? 'success' : 'failure'],
        options = this.options;

    if (!options.evalScripts) responseText = responseText.stripScripts();

    if (receiver = $(receiver)) {
      if (options.insertion) {
        if (Object.isString(options.insertion)) {
          var insertion = { }; insertion[options.insertion] = responseText;
          receiver.insert(insertion);
        }
        else options.insertion(receiver, responseText);
      }
      else receiver.update(responseText);
    }
  }
});

Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
  initialize: function($super, container, url, options) {
    $super(options);
    this.onComplete = this.options.onComplete;

    this.frequency = (this.options.frequency || 2);
    this.decay = (this.options.decay || 1);

    this.updater = { };
    this.container = container;
    this.url = url;

    this.start();
  },

  start: function() {
    this.options.onComplete = this.updateComplete.bind(this);
    this.onTimerEvent();
  },

  stop: function() {
    this.updater.options.onComplete = undefined;
    clearTimeout(this.timer);
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
  },

  updateComplete: function(response) {
    if (this.options.decay) {
      this.decay = (response.responseText == this.lastText ?
        this.decay * this.options.decay : 1);

      this.lastText = response.responseText;
    }
    this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
  },

  onTimerEvent: function() {
    this.updater = new Ajax.Updater(this.container, this.url, this.options);
  }
});



function $(element) {
  if (arguments.length > 1) {
    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
      elements.push($(arguments[i]));
    return elements;
  }
  if (Object.isString(element))
    element = document.getElementById(element);
  return Element.extend(element);
}

if (Prototype.BrowserFeatures.XPath) {
  document._getElementsByXPath = function(expression, parentElement) {
    var results = [];
    var query = document.evaluate(expression, $(parentElement) || document,
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var i = 0, length = query.snapshotLength; i < length; i++)
      results.push(Element.extend(query.snapshotItem(i)));
    return results;
  };
}

/*--------------------------------------------------------------------------*/

if (!window.Node) var Node = { };

if (!Node.ELEMENT_NODE) {
  Object.extend(Node, {
    ELEMENT_NODE: 1,
    ATTRIBUTE_NODE: 2,
    TEXT_NODE: 3,
    CDATA_SECTION_NODE: 4,
    ENTITY_REFERENCE_NODE: 5,
    ENTITY_NODE: 6,
    PROCESSING_INSTRUCTION_NODE: 7,
    COMMENT_NODE: 8,
    DOCUMENT_NODE: 9,
    DOCUMENT_TYPE_NODE: 10,
    DOCUMENT_FRAGMENT_NODE: 11,
    NOTATION_NODE: 12
  });
}


(function(global) {

  var SETATTRIBUTE_IGNORES_NAME = (function(){
    var elForm = document.createElement("form");
    var elInput = document.createElement("input");
    var root = document.documentElement;
    elInput.setAttribute("name", "test");
    elForm.appendChild(elInput);
    root.appendChild(elForm);
    var isBuggy = elForm.elements
      ? (typeof elForm.elements.test == "undefined")
      : null;
    root.removeChild(elForm);
    elForm = elInput = null;
    return isBuggy;
  })();

  var element = global.Element;
  global.Element = function(tagName, attributes) {
    attributes = attributes || { };
    tagName = tagName.toLowerCase();
    var cache = Element.cache;
    if (SETATTRIBUTE_IGNORES_NAME && attributes.name) {
      tagName = '<' + tagName + ' name="' + attributes.name + '">';
      delete attributes.name;
      return Element.writeAttribute(document.createElement(tagName), attributes);
    }
    if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
    return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
  };
  Object.extend(global.Element, element || { });
  if (element) global.Element.prototype = element.prototype;
})(this);

Element.cache = { };
Element.idCounter = 1;

Element.Methods = {
  visible: function(element) {
    return $(element).style.display != 'none';
  },

  toggle: function(element) {
    element = $(element);
    Element[Element.visible(element) ? 'hide' : 'show'](element);
    return element;
  },


  hide: function(element) {
    element = $(element);
    element.style.display = 'none';
    return element;
  },

  show: function(element) {
    element = $(element);
    element.style.display = '';
    return element;
  },

  remove: function(element) {
    element = $(element);
    element.parentNode.removeChild(element);
    return element;
  },

  update: (function(){

    var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){
      var el = document.createElement("select"),
          isBuggy = true;
      el.innerHTML = "<option value=\"test\">test</option>";
      if (el.options && el.options[0]) {
        isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION";
      }
      el = null;
      return isBuggy;
    })();

    var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){
      try {
        var el = document.createElement("table");
        if (el && el.tBodies) {
          el.innerHTML = "<tbody><tr><td>test</td></tr></tbody>";
          var isBuggy = typeof el.tBodies[0] == "undefined";
          el = null;
          return isBuggy;
        }
      } catch (e) {
        return true;
      }
    })();

    var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () {
      var s = document.createElement("script"),
          isBuggy = false;
      try {
        s.appendChild(document.createTextNode(""));
        isBuggy = !s.firstChild ||
          s.firstChild && s.firstChild.nodeType !== 3;
      } catch (e) {
        isBuggy = true;
      }
      s = null;
      return isBuggy;
    })();

    function update(element, content) {
      element = $(element);

      if (content && content.toElement)
        content = content.toElement();

      if (Object.isElement(content))
        return element.update().insert(content);

      content = Object.toHTML(content);

      var tagName = element.tagName.toUpperCase();

      if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) {
        element.text = content;
        return element;
      }

      if (SELECT_ELEMENT_INNERHTML_BUGGY || TABLE_ELEMENT_INNERHTML_BUGGY) {
        if (tagName in Element._insertionTranslations.tags) {
          while (element.firstChild) {
            element.removeChild(element.firstChild);
          }
          Element._getContentFromAnonymousElement(tagName, content.stripScripts())
            .each(function(node) {
              element.appendChild(node)
            });
        }
        else {
          element.innerHTML = content.stripScripts();
        }
      }
      else {
        element.innerHTML = content.stripScripts();
      }

      content.evalScripts.bind(content).defer();
      return element;
    }

    return update;
  })(),

  replace: function(element, content) {
    element = $(element);
    if (content && content.toElement) content = content.toElement();
    else if (!Object.isElement(content)) {
      content = Object.toHTML(content);
      var range = element.ownerDocument.createRange();
      range.selectNode(element);
      content.evalScripts.bind(content).defer();
      content = range.createContextualFragment(content.stripScripts());
    }
    element.parentNode.replaceChild(content, element);
    return element;
  },

  insert: function(element, insertions) {
    element = $(element);

    if (Object.isString(insertions) || Object.isNumber(insertions) ||
        Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
          insertions = {bottom:insertions};

    var content, insert, tagName, childNodes;

    for (var position in insertions) {
      content  = insertions[position];
      position = position.toLowerCase();
      insert = Element._insertionTranslations[position];

      if (content && content.toElement) content = content.toElement();
      if (Object.isElement(content)) {
        insert(element, content);
        continue;
      }

      content = Object.toHTML(content);

      tagName = ((position == 'before' || position == 'after')
        ? element.parentNode : element).tagName.toUpperCase();

      childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());

      if (position == 'top' || position == 'after') childNodes.reverse();
      childNodes.each(insert.curry(element));

      content.evalScripts.bind(content).defer();
    }

    return element;
  },

  wrap: function(element, wrapper, attributes) {
    element = $(element);
    if (Object.isElement(wrapper))
      $(wrapper).writeAttribute(attributes || { });
    else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
    else wrapper = new Element('div', wrapper);
    if (element.parentNode)
      element.parentNode.replaceChild(wrapper, element);
    wrapper.appendChild(element);
    return wrapper;
  },

  inspect: function(element) {
    element = $(element);
    var result = '<' + element.tagName.toLowerCase();
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
      var property = pair.first(), attribute = pair.last();
      var value = (element[property] || '').toString();
      if (value) result += ' ' + attribute + '=' + value.inspect(true);
    });
    return result + '>';
  },

  recursivelyCollect: function(element, property) {
    element = $(element);
    var elements = [];
    while (element = element[property])
      if (element.nodeType == 1)
        elements.push(Element.extend(element));
    return elements;
  },

  ancestors: function(element) {
    return Element.recursivelyCollect(element, 'parentNode');
  },

  descendants: function(element) {
    return Element.select(element, "*");
  },

  firstDescendant: function(element) {
    element = $(element).firstChild;
    while (element && element.nodeType != 1) element = element.nextSibling;
    return $(element);
  },

  immediateDescendants: function(element) {
    if (!(element = $(element).firstChild)) return [];
    while (element && element.nodeType != 1) element = element.nextSibling;
    if (element) return [element].concat($(element).nextSiblings());
    return [];
  },

  previousSiblings: function(element) {
    return Element.recursivelyCollect(element, 'previousSibling');
  },

  nextSiblings: function(element) {
    return Element.recursivelyCollect(element, 'nextSibling');
  },

  siblings: function(element) {
    element = $(element);
    return Element.previousSiblings(element).reverse()
      .concat(Element.nextSiblings(element));
  },

  match: function(element, selector) {
    if (Object.isString(selector))
      selector = new Selector(selector);
    return selector.match($(element));
  },

  up: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return $(element.parentNode);
    var ancestors = Element.ancestors(element);
    return Object.isNumber(expression) ? ancestors[expression] :
      Selector.findElement(ancestors, expression, index);
  },

  down: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return Element.firstDescendant(element);
    return Object.isNumber(expression) ? Element.descendants(element)[expression] :
      Element.select(element, expression)[index || 0];
  },

  previous: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
    var previousSiblings = Element.previousSiblings(element);
    return Object.isNumber(expression) ? previousSiblings[expression] :
      Selector.findElement(previousSiblings, expression, index);
  },

  next: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
    var nextSiblings = Element.nextSiblings(element);
    return Object.isNumber(expression) ? nextSiblings[expression] :
      Selector.findElement(nextSiblings, expression, index);
  },


  select: function(element) {
    var args = Array.prototype.slice.call(arguments, 1);
    return Selector.findChildElements(element, args);
  },

  adjacent: function(element) {
    var args = Array.prototype.slice.call(arguments, 1);
    return Selector.findChildElements(element.parentNode, args).without(element);
  },

  identify: function(element) {
    element = $(element);
    var id = Element.readAttribute(element, 'id');
    if (id) return id;
    do { id = 'anonymous_element_' + Element.idCounter++ } while ($(id));
    Element.writeAttribute(element, 'id', id);
    return id;
  },

  readAttribute: function(element, name) {
    element = $(element);
    if (Prototype.Browser.IE) {
      var t = Element._attributeTranslations.read;
      if (t.values[name]) return t.values[name](element, name);
      if (t.names[name]) name = t.names[name];
      if (name.include(':')) {
        return (!element.attributes || !element.attributes[name]) ? null :
         element.attributes[name].value;
      }
    }
    return element.getAttribute(name);
  },

  writeAttribute: function(element, name, value) {
    element = $(element);
    var attributes = { }, t = Element._attributeTranslations.write;

    if (typeof name == 'object') attributes = name;
    else attributes[name] = Object.isUndefined(value) ? true : value;

    for (var attr in attributes) {
      name = t.names[attr] || attr;
      value = attributes[attr];
      if (t.values[attr]) name = t.values[attr](element, value);
      if (value === false || value === null)
        element.removeAttribute(name);
      else if (value === true)
        element.setAttribute(name, name);
      else element.setAttribute(name, value);
    }
    return element;
  },

  getHeight: function(element) {
    return Element.getDimensions(element).height;
  },

  getWidth: function(element) {
    return Element.getDimensions(element).width;
  },

  classNames: function(element) {
    return new Element.ClassNames(element);
  },

  hasClassName: function(element, className) {
    if (!(element = $(element))) return;
    var elementClassName = element.className;
    return (elementClassName.length > 0 && (elementClassName == className ||
      new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
  },

  addClassName: function(element, className) {
    if (!(element = $(element))) return;
    if (!Element.hasClassName(element, className))
      element.className += (element.className ? ' ' : '') + className;
    return element;
  },

  removeClassName: function(element, className) {
    if (!(element = $(element))) return;
    element.className = element.className.replace(
      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
    return element;
  },

  toggleClassName: function(element, className) {
    if (!(element = $(element))) return;
    return Element[Element.hasClassName(element, className) ?
      'removeClassName' : 'addClassName'](element, className);
  },

  cleanWhitespace: function(element) {
    element = $(element);
    var node = element.firstChild;
    while (node) {
      var nextNode = node.nextSibling;
      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
        element.removeChild(node);
      node = nextNode;
    }
    return element;
  },

  empty: function(element) {
    return $(element).innerHTML.blank();
  },

  descendantOf: function(element, ancestor) {
    element = $(element), ancestor = $(ancestor);

    if (element.compareDocumentPosition)
      return (element.compareDocumentPosition(ancestor) & 8) === 8;

    if (ancestor.contains)
      return ancestor.contains(element) && ancestor !== element;

    while (element = element.parentNode)
      if (element == ancestor) return true;

    return false;
  },

  scrollTo: function(element) {
    element = $(element);
    var pos = Element.cumulativeOffset(element);
    window.scrollTo(pos[0], pos[1]);
    return element;
  },

  getStyle: function(element, style) {
    element = $(element);
    style = style == 'float' ? 'cssFloat' : style.camelize();
    var value = element.style[style];
    if (!value || value == 'auto') {
      var css = document.defaultView.getComputedStyle(element, null);
      value = css ? css[style] : null;
    }
    if (style == 'opacity') return value ? parseFloat(value) : 1.0;
    return value == 'auto' ? null : value;
  },

  getOpacity: function(element) {
    return $(element).getStyle('opacity');
  },

  setStyle: function(element, styles) {
    element = $(element);
    var elementStyle = element.style, match;
    if (Object.isString(styles)) {
      element.style.cssText += ';' + styles;
      return styles.include('opacity') ?
        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
    }
    for (var property in styles)
      if (property == 'opacity') element.setOpacity(styles[property]);
      else
        elementStyle[(property == 'float' || property == 'cssFloat') ?
          (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
            property] = styles[property];

    return element;
  },

  setOpacity: function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1 || value === '') ? '' :
      (value < 0.00001) ? 0 : value;
    return element;
  },

  getDimensions: function(element) {
    element = $(element);
    var display = Element.getStyle(element, 'display');
    if (display != 'none' && display != null) // Safari bug
      return {width: element.offsetWidth, height: element.offsetHeight};

    var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    var originalDisplay = els.display;
    els.visibility = 'hidden';
    if (originalPosition != 'fixed') // Switching fixed to absolute causes issues in Safari
      els.position = 'absolute';
    els.display = 'block';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
    els.display = originalDisplay;
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
  },

  makePositioned: function(element) {
    element = $(element);
    var pos = Element.getStyle(element, 'position');
    if (pos == 'static' || !pos) {
      element._madePositioned = true;
      element.style.position = 'relative';
      if (Prototype.Browser.Opera) {
        element.style.top = 0;
        element.style.left = 0;
      }
    }
    return element;
  },

  undoPositioned: function(element) {
    element = $(element);
    if (element._madePositioned) {
      element._madePositioned = undefined;
      element.style.position =
        element.style.top =
        element.style.left =
        element.style.bottom =
        element.style.right = '';
    }
    return element;
  },

  makeClipping: function(element) {
    element = $(element);
    if (element._overflow) return element;
    element._overflow = Element.getStyle(element, 'overflow') || 'auto';
    if (element._overflow !== 'hidden')
      element.style.overflow = 'hidden';
    return element;
  },

  undoClipping: function(element) {
    element = $(element);
    if (!element._overflow) return element;
    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
    element._overflow = null;
    return element;
  },

  cumulativeOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
    } while (element);
    return Element._returnOffset(valueL, valueT);
  },

  positionedOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
      if (element) {
        if (element.tagName.toUpperCase() == 'BODY') break;
        var p = Element.getStyle(element, 'position');
        if (p !== 'static') break;
      }
    } while (element);
    return Element._returnOffset(valueL, valueT);
  },

  absolutize: function(element) {
    element = $(element);
    if (Element.getStyle(element, 'position') == 'absolute') return element;

    var offsets = Element.positionedOffset(element);
    var top     = offsets[1];
    var left    = offsets[0];
    var width   = element.clientWidth;
    var height  = element.clientHeight;

    element._originalLeft   = left - parseFloat(element.style.left  || 0);
    element._originalTop    = top  - parseFloat(element.style.top || 0);
    element._originalWidth  = element.style.width;
    element._originalHeight = element.style.height;

    element.style.position = 'absolute';
    element.style.top    = top + 'px';
    element.style.left   = left + 'px';
    element.style.width  = width + 'px';
    element.style.height = height + 'px';
    return element;
  },

  relativize: function(element) {
    element = $(element);
    if (Element.getStyle(element, 'position') == 'relative') return element;

    element.style.position = 'relative';
    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);

    element.style.top    = top + 'px';
    element.style.left   = left + 'px';
    element.style.height = element._originalHeight;
    element.style.width  = element._originalWidth;
    return element;
  },

  cumulativeScrollOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.scrollTop  || 0;
      valueL += element.scrollLeft || 0;
      element = element.parentNode;
    } while (element);
    return Element._returnOffset(valueL, valueT);
  },

  getOffsetParent: function(element) {
    if (element.offsetParent) return $(element.offsetParent);
    if (element == document.body) return $(element);

    while ((element = element.parentNode) && element != document.body)
      if (Element.getStyle(element, 'position') != 'static')
        return $(element);

    return $(document.body);
  },

  viewportOffset: function(forElement) {
    var valueT = 0, valueL = 0;

    var element = forElement;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;

      if (element.offsetParent == document.body &&
        Element.getStyle(element, 'position') == 'absolute') break;

    } while (element = element.offsetParent);

    element = forElement;
    do {
      if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) {
        valueT -= element.scrollTop  || 0;
        valueL -= element.scrollLeft || 0;
      }
    } while (element = element.parentNode);

    return Element._returnOffset(valueL, valueT);
  },

  clonePosition: function(element, source) {
    var options = Object.extend({
      setLeft:    true,
      setTop:     true,
      setWidth:   true,
      setHeight:  true,
      offsetTop:  0,
      offsetLeft: 0
    }, arguments[2] || { });

    source = $(source);
    var p = Element.viewportOffset(source);

    element = $(element);
    var delta = [0, 0];
    var parent = null;
    if (Element.getStyle(element, 'position') == 'absolute') {
      parent = Element.getOffsetParent(element);
      delta = Element.viewportOffset(parent);
    }

    if (parent == document.body) {
      delta[0] -= document.body.offsetLeft;
      delta[1] -= document.body.offsetTop;
    }

    if (options.setLeft)   element.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
    if (options.setTop)    element.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
    if (options.setWidth)  element.style.width = source.offsetWidth + 'px';
    if (options.setHeight) element.style.height = source.offsetHeight + 'px';
    return element;
  }
};

Object.extend(Element.Methods, {
  getElementsBySelector: Element.Methods.select,

  childElements: Element.Methods.immediateDescendants
});

Element._attributeTranslations = {
  write: {
    names: {
      className: 'class',
      htmlFor:   'for'
    },
    values: { }
  }
};

if (Prototype.Browser.Opera) {
  Element.Methods.getStyle = Element.Methods.getStyle.wrap(
    function(proceed, element, style) {
      switch (style) {
        case 'left': case 'top': case 'right': case 'bottom':
          if (proceed(element, 'position') === 'static') return null;
        case 'height': case 'width':
          if (!Element.visible(element)) return null;

          var dim = parseInt(proceed(element, style), 10);

          if (dim !== element['offset' + style.capitalize()])
            return dim + 'px';

          var properties;
          if (style === 'height') {
            properties = ['border-top-width', 'padding-top',
             'padding-bottom', 'border-bottom-width'];
          }
          else {
            properties = ['border-left-width', 'padding-left',
             'padding-right', 'border-right-width'];
          }
          return properties.inject(dim, function(memo, property) {
            var val = proceed(element, property);
            return val === null ? memo : memo - parseInt(val, 10);
          }) + 'px';
        default: return proceed(element, style);
      }
    }
  );

  Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
    function(proceed, element, attribute) {
      if (attribute === 'title') return element.title;
      return proceed(element, attribute);
    }
  );
}

else if (Prototype.Browser.IE) {
  Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
    function(proceed, element) {
      element = $(element);
      try { element.offsetParent }
      catch(e) { return $(document.body) }
      var position = element.getStyle('position');
      if (position !== 'static') return proceed(element);
      element.setStyle({ position: 'relative' });
      var value = proceed(element);
      element.setStyle({ position: position });
      return value;
    }
  );

  $w('positionedOffset viewportOffset').each(function(method) {
    Element.Methods[method] = Element.Methods[method].wrap(
      function(proceed, element) {
        element = $(element);
        try { element.offsetParent }
        catch(e) { return Element._returnOffset(0,0) }
        var position = element.getStyle('position');
        if (position !== 'static') return proceed(element);
        var offsetParent = element.getOffsetParent();
        if (offsetParent && offsetParent.getStyle('position') === 'fixed')
          offsetParent.setStyle({ zoom: 1 });
        element.setStyle({ position: 'relative' });
        var value = proceed(element);
        element.setStyle({ position: position });
        return value;
      }
    );
  });

  Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
    function(proceed, element) {
      try { element.offsetParent }
      catch(e) { return Element._returnOffset(0,0) }
      return proceed(element);
    }
  );

  Element.Methods.getStyle = function(element, style) {
    element = $(element);
    style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
    var value = element.style[style];
    if (!value && element.currentStyle) value = element.currentStyle[style];

    if (style == 'opacity') {
      if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
        if (value[1]) return parseFloat(value[1]) / 100;
      return 1.0;
    }

    if (value == 'auto') {
      if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
        return element['offset' + style.capitalize()] + 'px';
      return null;
    }
    return value;
  };

  Element.Methods.setOpacity = function(element, value) {
    function stripAlpha(filter){
      return filter.replace(/alpha\([^\)]*\)/gi,'');
    }
    element = $(element);
    var currentStyle = element.currentStyle;
    if ((currentStyle && !currentStyle.hasLayout) ||
      (!currentStyle && element.style.zoom == 'normal'))
        element.style.zoom = 1;

    var filter = element.getStyle('filter'), style = element.style;
    if (value == 1 || value === '') {
      (filter = stripAlpha(filter)) ?
        style.filter = filter : style.removeAttribute('filter');
      return element;
    } else if (value < 0.00001) value = 0;
    style.filter = stripAlpha(filter) +
      'alpha(opacity=' + (value * 100) + ')';
    return element;
  };

  Element._attributeTranslations = (function(){

    var classProp = 'className';
    var forProp = 'for';

    var el = document.createElement('div');

    el.setAttribute(classProp, 'x');

    if (el.className !== 'x') {
      el.setAttribute('class', 'x');
      if (el.className === 'x') {
        classProp = 'class';
      }
    }
    el = null;

    el = document.createElement('label');
    el.setAttribute(forProp, 'x');
    if (el.htmlFor !== 'x') {
      el.setAttribute('htmlFor', 'x');
      if (el.htmlFor === 'x') {
        forProp = 'htmlFor';
      }
    }
    el = null;

    return {
      read: {
        names: {
          'class':      classProp,
          'className':  classProp,
          'for':        forProp,
          'htmlFor':    forProp
        },
        values: {
          _getAttr: function(element, attribute) {
            return element.getAttribute(attribute);
          },
          _getAttr2: function(element, attribute) {
            return element.getAttribute(attribute, 2);
          },
          _getAttrNode: function(element, attribute) {
            var node = element.getAttributeNode(attribute);
            return node ? node.value : "";
          },
          _getEv: (function(){

            var el = document.createElement('div');
            el.onclick = Prototype.emptyFunction;
            var value = el.getAttribute('onclick');
            var f;

            if (String(value).indexOf('{') > -1) {
              f = function(element, attribute) {
                attribute = element.getAttribute(attribute);
                if (!attribute) return null;
                attribute = attribute.toString();
                attribute = attribute.split('{')[1];
                attribute = attribute.split('}')[0];
                return attribute.strip();
              };
            }
            else if (value === '') {
              f = function(element, attribute) {
                attribute = element.getAttribute(attribute);
                if (!attribute) return null;
                return attribute.strip();
              };
            }
            el = null;
            return f;
          })(),
          _flag: function(element, attribute) {
            return $(element).hasAttribute(attribute) ? attribute : null;
          },
          style: function(element) {
            return element.style.cssText.toLowerCase();
          },
          title: function(element) {
            return element.title;
          }
        }
      }
    }
  })();

  Element._attributeTranslations.write = {
    names: Object.extend({
      cellpadding: 'cellPadding',
      cellspacing: 'cellSpacing'
    }, Element._attributeTranslations.read.names),
    values: {
      checked: function(element, value) {
        element.checked = !!value;
      },

      style: function(element, value) {
        element.style.cssText = value ? value : '';
      }
    }
  };

  Element._attributeTranslations.has = {};

  $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
      'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
    Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
    Element._attributeTranslations.has[attr.toLowerCase()] = attr;
  });

  (function(v) {
    Object.extend(v, {
      href:        v._getAttr2,
      src:         v._getAttr2,
      type:        v._getAttr,
      action:      v._getAttrNode,
      disabled:    v._flag,
      checked:     v._flag,
      readonly:    v._flag,
      multiple:    v._flag,
      onload:      v._getEv,
      onunload:    v._getEv,
      onclick:     v._getEv,
      ondblclick:  v._getEv,
      onmousedown: v._getEv,
      onmouseup:   v._getEv,
      onmouseover: v._getEv,
      onmousemove: v._getEv,
      onmouseout:  v._getEv,
      onfocus:     v._getEv,
      onblur:      v._getEv,
      onkeypress:  v._getEv,
      onkeydown:   v._getEv,
      onkeyup:     v._getEv,
      onsubmit:    v._getEv,
      onreset:     v._getEv,
      onselect:    v._getEv,
      onchange:    v._getEv
    });
  })(Element._attributeTranslations.read.values);

  if (Prototype.BrowserFeatures.ElementExtensions) {
    (function() {
      function _descendants(element) {
        var nodes = element.getElementsByTagName('*'), results = [];
        for (var i = 0, node; node = nodes[i]; i++)
          if (node.tagName !== "!") // Filter out comment nodes.
            results.push(node);
        return results;
      }

      Element.Methods.down = function(element, expression, index) {
        element = $(element);
        if (arguments.length == 1) return element.firstDescendant();
        return Object.isNumber(expression) ? _descendants(element)[expression] :
          Element.select(element, expression)[index || 0];
      }
    })();
  }

}

else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
  Element.Methods.setOpacity = function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1) ? 0.999999 :
      (value === '') ? '' : (value < 0.00001) ? 0 : value;
    return element;
  };
}

else if (Prototype.Browser.WebKit) {
  Element.Methods.setOpacity = function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1 || value === '') ? '' :
      (value < 0.00001) ? 0 : value;

    if (value == 1)
      if(element.tagName.toUpperCase() == 'IMG' && element.width) {
        element.width++; element.width--;
      } else try {
        var n = document.createTextNode(' ');
        element.appendChild(n);
        element.removeChild(n);
      } catch (e) { }

    return element;
  };

  Element.Methods.cumulativeOffset = function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      if (element.offsetParent == document.body)
        if (Element.getStyle(element, 'position') == 'absolute') break;

      element = element.offsetParent;
    } while (element);

    return Element._returnOffset(valueL, valueT);
  };
}

if ('outerHTML' in document.documentElement) {
  Element.Methods.replace = function(element, content) {
    element = $(element);

    if (content && content.toElement) content = content.toElement();
    if (Object.isElement(content)) {
      element.parentNode.replaceChild(content, element);
      return element;
    }

    content = Object.toHTML(content);
    var parent = element.parentNode, tagName = parent.tagName.toUpperCase();

    if (Element._insertionTranslations.tags[tagName]) {
      var nextSibling = element.next();
      var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
      parent.removeChild(element);
      if (nextSibling)
        fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
      else
        fragments.each(function(node) { parent.appendChild(node) });
    }
    else element.outerHTML = content.stripScripts();

    content.evalScripts.bind(content).defer();
    return element;
  };
}

Element._returnOffset = function(l, t) {
  var result = [l, t];
  result.left = l;
  result.top = t;
  return result;
};

Element._getContentFromAnonymousElement = function(tagName, html) {
  var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
  if (t) {
    div.innerHTML = t[0] + html + t[1];
    t[2].times(function() { div = div.firstChild });
  } else div.innerHTML = html;
  return $A(div.childNodes);
};

Element._insertionTranslations = {
  before: function(element, node) {
    element.parentNode.insertBefore(node, element);
  },
  top: function(element, node) {
    element.insertBefore(node, element.firstChild);
  },
  bottom: function(element, node) {
    element.appendChild(node);
  },
  after: function(element, node) {
    element.parentNode.insertBefore(node, element.nextSibling);
  },
  tags: {
    TABLE:  ['<table>',                '</table>',                   1],
    TBODY:  ['<table><tbody>',         '</tbody></table>',           2],
    TR:     ['<table><tbody><tr>',     '</tr></tbody></table>',      3],
    TD:     ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
    SELECT: ['<select>',               '</select>',                  1]
  }
};

(function() {
  var tags = Element._insertionTranslations.tags;
  Object.extend(tags, {
    THEAD: tags.TBODY,
    TFOOT: tags.TBODY,
    TH:    tags.TD
  });
})();

Element.Methods.Simulated = {
  hasAttribute: function(element, attribute) {
    attribute = Element._attributeTranslations.has[attribute] || attribute;
    var node = $(element).getAttributeNode(attribute);
    return !!(node && node.specified);
  }
};

Element.Methods.ByTag = { };

Object.extend(Element, Element.Methods);

(function(div) {

  if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) {
    window.HTMLElement = { };
    window.HTMLElement.prototype = div['__proto__'];
    Prototype.BrowserFeatures.ElementExtensions = true;
  }

  div = null;

})(document.createElement('div'))

Element.extend = (function() {

  function checkDeficiency(tagName) {
    if (typeof window.Element != 'undefined') {
      var proto = window.Element.prototype;
      if (proto) {
        var id = '_' + (Math.random()+'').slice(2);
        var el = document.createElement(tagName);
        proto[id] = 'x';
        var isBuggy = (el[id] !== 'x');
        delete proto[id];
        el = null;
        return isBuggy;
      }
    }
    return false;
  }

  function extendElementWith(element, methods) {
    for (var property in methods) {
      var value = methods[property];
      if (Object.isFunction(value) && !(property in element))
        element[property] = value.methodize();
    }
  }

  var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object');

  if (Prototype.BrowserFeatures.SpecificElementExtensions) {
    if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) {
      return function(element) {
        if (element && typeof element._extendedByPrototype == 'undefined') {
          var t = element.tagName;
          if (t && (/^(?:object|applet|embed)$/i.test(t))) {
            extendElementWith(element, Element.Methods);
            extendElementWith(element, Element.Methods.Simulated);
            extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]);
          }
        }
        return element;
      }
    }
    return Prototype.K;
  }

  var Methods = { }, ByTag = Element.Methods.ByTag;

  var extend = Object.extend(function(element) {
    if (!element || typeof element._extendedByPrototype != 'undefined' ||
        element.nodeType != 1 || element == window) return element;

    var methods = Object.clone(Methods),
        tagName = element.tagName.toUpperCase();

    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);

    extendElementWith(element, methods);

    element._extendedByPrototype = Prototype.emptyFunction;
    return element;

  }, {
    refresh: function() {
      if (!Prototype.BrowserFeatures.ElementExtensions) {
        Object.extend(Methods, Element.Methods);
        Object.extend(Methods, Element.Methods.Simulated);
      }
    }
  });

  extend.refresh();
  return extend;
})();

Element.hasAttribute = function(element, attribute) {
  if (element.hasAttribute) return element.hasAttribute(attribute);
  return Element.Methods.Simulated.hasAttribute(element, attribute);
};

Element.addMethods = function(methods) {
  var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;

  if (!methods) {
    Object.extend(Form, Form.Methods);
    Object.extend(Form.Element, Form.Element.Methods);
    Object.extend(Element.Methods.ByTag, {
      "FORM":     Object.clone(Form.Methods),
      "INPUT":    Object.clone(Form.Element.Methods),
      "SELECT":   Object.clone(Form.Element.Methods),
      "TEXTAREA": Object.clone(Form.Element.Methods)
    });
  }

  if (arguments.length == 2) {
    var tagName = methods;
    methods = arguments[1];
  }

  if (!tagName) Object.extend(Element.Methods, methods || { });
  else {
    if (Object.isArray(tagName)) tagName.each(extend);
    else extend(tagName);
  }

  function extend(tagName) {
    tagName = tagName.toUpperCase();
    if (!Element.Methods.ByTag[tagName])
      Element.Methods.ByTag[tagName] = { };
    Object.extend(Element.Methods.ByTag[tagName], methods);
  }

  function copy(methods, destination, onlyIfAbsent) {
    onlyIfAbsent = onlyIfAbsent || false;
    for (var property in methods) {
      var value = methods[property];
      if (!Object.isFunction(value)) continue;
      if (!onlyIfAbsent || !(property in destination))
        destination[property] = value.methodize();
    }
  }

  function findDOMClass(tagName) {
    var klass;
    var trans = {
      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
      "FrameSet", "IFRAME": "IFrame"
    };
    if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
    if (window[klass]) return window[klass];
    klass = 'HTML' + tagName + 'Element';
    if (window[klass]) return window[klass];
    klass = 'HTML' + tagName.capitalize() + 'Element';
    if (window[klass]) return window[klass];

    var element = document.createElement(tagName);
    var proto = element['__proto__'] || element.constructor.prototype;
    element = null;
    return proto;
  }

  var elementPrototype = window.HTMLElement ? HTMLElement.prototype :
   Element.prototype;

  if (F.ElementExtensions) {
    copy(Element.Methods, elementPrototype);
    copy(Element.Methods.Simulated, elementPrototype, true);
  }

  if (F.SpecificElementExtensions) {
    for (var tag in Element.Methods.ByTag) {
      var klass = findDOMClass(tag);
      if (Object.isUndefined(klass)) continue;
      copy(T[tag], klass.prototype);
    }
  }

  Object.extend(Element, Element.Methods);
  delete Element.ByTag;

  if (Element.extend.refresh) Element.extend.refresh();
  Element.cache = { };
};


document.viewport = {

  getDimensions: function() {
    return { width: this.getWidth(), height: this.getHeight() };
  },

  getScrollOffsets: function() {
    return Element._returnOffset(
      window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
      window.pageYOffset || document.documentElement.scrollTop  || document.body.scrollTop);
  }
};

(function(viewport) {
  var B = Prototype.Browser, doc = document, element, property = {};

  function getRootElement() {
    if (B.WebKit && !doc.evaluate)
      return document;

    if (B.Opera && window.parseFloat(window.opera.version()) < 9.5)
      return document.body;

    return document.documentElement;
  }

  function define(D) {
    if (!element) element = getRootElement();

    property[D] = 'client' + D;

    viewport['get' + D] = function() { return element[property[D]] };
    return viewport['get' + D]();
  }

  viewport.getWidth  = define.curry('Width');

  viewport.getHeight = define.curry('Height');
})(document.viewport);


Element.Storage = {
  UID: 1
};

Element.addMethods({
  getStorage: function(element) {
    if (!(element = $(element))) return;

    var uid;
    if (element === window) {
      uid = 0;
    } else {
      if (typeof element._prototypeUID === "undefined")
        element._prototypeUID = [Element.Storage.UID++];
      uid = element._prototypeUID[0];
    }

    if (!Element.Storage[uid])
      Element.Storage[uid] = $H();

    return Element.Storage[uid];
  },

  store: function(element, key, value) {
    if (!(element = $(element))) return;

    if (arguments.length === 2) {
      Element.getStorage(element).update(key);
    } else {
      Element.getStorage(element).set(key, value);
    }

    return element;
  },

  retrieve: function(element, key, defaultValue) {
    if (!(element = $(element))) return;
    var hash = Element.getStorage(element), value = hash.get(key);

    if (Object.isUndefined(value)) {
      hash.set(key, defaultValue);
      value = defaultValue;
    }

    return value;
  },

  clone: function(element, deep) {
    if (!(element = $(element))) return;
    var clone = element.cloneNode(deep);
    clone._prototypeUID = void 0;
    if (deep) {
      var descendants = Element.select(clone, '*'),
          i = descendants.length;
      while (i--) {
        descendants[i]._prototypeUID = void 0;
      }
    }
    return Element.extend(clone);
  }
});
/* Portions of the Selector class are derived from Jack Slocum's DomQuery,
 * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
 * license.  Please see http://www.yui-ext.com/ for more information. */

var Selector = Class.create({
  initialize: function(expression) {
    this.expression = expression.strip();

    if (this.shouldUseSelectorsAPI()) {
      this.mode = 'selectorsAPI';
    } else if (this.shouldUseXPath()) {
      this.mode = 'xpath';
      this.compileXPathMatcher();
    } else {
      this.mode = "normal";
      this.compileMatcher();
    }

  },

  shouldUseXPath: (function() {

    var IS_DESCENDANT_SELECTOR_BUGGY = (function(){
      var isBuggy = false;
      if (document.evaluate && window.XPathResult) {
        var el = document.createElement('div');
        el.innerHTML = '<ul><li></li></ul><div><ul><li></li></ul></div>';

        var xpath = ".//*[local-name()='ul' or local-name()='UL']" +
          "//*[local-name()='li' or local-name()='LI']";

        var result = document.evaluate(xpath, el, null,
          XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

        isBuggy = (result.snapshotLength !== 2);
        el = null;
      }
      return isBuggy;
    })();

    return function() {
      if (!Prototype.BrowserFeatures.XPath) return false;

      var e = this.expression;

      if (Prototype.Browser.WebKit &&
       (e.include("-of-type") || e.include(":empty")))
        return false;

      if ((/(\[[\w-]*?:|:checked)/).test(e))
        return false;

      if (IS_DESCENDANT_SELECTOR_BUGGY) return false;

      return true;
    }

  })(),

  shouldUseSelectorsAPI: function() {
    if (!Prototype.BrowserFeatures.SelectorsAPI) return false;

    if (Selector.CASE_INSENSITIVE_CLASS_NAMES) return false;

    if (!Selector._div) Selector._div = new Element('div');

    try {
      Selector._div.querySelector(this.expression);
    } catch(e) {
      return false;
    }

    return true;
  },

  compileMatcher: function() {
    var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
        c = Selector.criteria, le, p, m, len = ps.length, name;

    if (Selector._cache[e]) {
      this.matcher = Selector._cache[e];
      return;
    }

    this.matcher = ["this.matcher = function(root) {",
                    "var r = root, h = Selector.handlers, c = false, n;"];

    while (e && le != e && (/\S/).test(e)) {
      le = e;
      for (var i = 0; i<len; i++) {
        p = ps[i].re;
        name = ps[i].name;
        if (m = e.match(p)) {
          this.matcher.push(Object.isFunction(c[name]) ? c[name](m) :
            new Template(c[name]).evaluate(m));
          e = e.replace(m[0], '');
          break;
        }
      }
    }

    this.matcher.push("return h.unique(n);\n}");
    eval(this.matcher.join('\n'));
    Selector._cache[this.expression] = this.matcher;
  },

  compileXPathMatcher: function() {
    var e = this.expression, ps = Selector.patterns,
        x = Selector.xpath, le, m, len = ps.length, name;

    if (Selector._cache[e]) {
      this.xpath = Selector._cache[e]; return;
    }

    this.matcher = ['.//*'];
    while (e && le != e && (/\S/).test(e)) {
      le = e;
      for (var i = 0; i<len; i++) {
        name = ps[i].name;
        if (m = e.match(ps[i].re)) {
          this.matcher.push(Object.isFunction(x[name]) ? x[name](m) :
            new Template(x[name]).evaluate(m));
          e = e.replace(m[0], '');
          break;
        }
      }
    }

    this.xpath = this.matcher.join('');
    Selector._cache[this.expression] = this.xpath;
  },

  findElements: function(root) {
    root = root || document;
    var e = this.expression, results;

    switch (this.mode) {
      case 'selectorsAPI':
        if (root !== document) {
          var oldId = root.id, id = $(root).identify();
          id = id.replace(/([\.:])/g, "\\$1");
          e = "#" + id + " " + e;
        }

        results = $A(root.querySelectorAll(e)).map(Element.extend);
        root.id = oldId;

        return results;
      case 'xpath':
        return document._getElementsByXPath(this.xpath, root);
      default:
       return this.matcher(root);
    }
  },

  match: function(element) {
    this.tokens = [];

    var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
    var le, p, m, len = ps.length, name;

    while (e && le !== e && (/\S/).test(e)) {
      le = e;
      for (var i = 0; i<len; i++) {
        p = ps[i].re;
        name = ps[i].name;
        if (m = e.match(p)) {
          if (as[name]) {
            this.tokens.push([name, Object.clone(m)]);
            e = e.replace(m[0], '');
          } else {
            return this.findElements(document).include(element);
          }
        }
      }
    }

    var match = true, name, matches;
    for (var i = 0, token; token = this.tokens[i]; i++) {
      name = token[0], matches = token[1];
      if (!Selector.assertions[name](element, matches)) {
        match = false; break;
      }
    }

    return match;
  },

  toString: function() {
    return this.expression;
  },

  inspect: function() {
    return "#<Selector:" + this.expression.inspect() + ">";
  }
});

if (Prototype.BrowserFeatures.SelectorsAPI &&
 document.compatMode === 'BackCompat') {
  Selector.CASE_INSENSITIVE_CLASS_NAMES = (function(){
    var div = document.createElement('div'),
     span = document.createElement('span');

    div.id = "prototype_test_id";
    span.className = 'Test';
    div.appendChild(span);
    var isIgnored = (div.querySelector('#prototype_test_id .test') !== null);
    div = span = null;
    return isIgnored;
  })();
}

Object.extend(Selector, {
  _cache: { },

  xpath: {
    descendant:   "//*",
    child:        "/*",
    adjacent:     "/following-sibling::*[1]",
    laterSibling: '/following-sibling::*',
    tagName:      function(m) {
      if (m[1] == '*') return '';
      return "[local-name()='" + m[1].toLowerCase() +
             "' or local-name()='" + m[1].toUpperCase() + "']";
    },
    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",
    id:           "[@id='#{1}']",
    attrPresence: function(m) {
      m[1] = m[1].toLowerCase();
      return new Template("[@#{1}]").evaluate(m);
    },
    attr: function(m) {
      m[1] = m[1].toLowerCase();
      m[3] = m[5] || m[6];
      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
    },
    pseudo: function(m) {
      var h = Selector.xpath.pseudos[m[1]];
      if (!h) return '';
      if (Object.isFunction(h)) return h(m);
      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
    },
    operators: {
      '=':  "[@#{1}='#{3}']",
      '!=': "[@#{1}!='#{3}']",
      '^=': "[starts-with(@#{1}, '#{3}')]",
      '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
      '*=': "[contains(@#{1}, '#{3}')]",
      '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
      '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
    },
    pseudos: {
      'first-child': '[not(preceding-sibling::*)]',
      'last-child':  '[not(following-sibling::*)]',
      'only-child':  '[not(preceding-sibling::* or following-sibling::*)]',
      'empty':       "[count(*) = 0 and (count(text()) = 0)]",
      'checked':     "[@checked]",
      'disabled':    "[(@disabled) and (@type!='hidden')]",
      'enabled':     "[not(@disabled) and (@type!='hidden')]",
      'not': function(m) {
        var e = m[6], p = Selector.patterns,
            x = Selector.xpath, le, v, len = p.length, name;

        var exclusion = [];
        while (e && le != e && (/\S/).test(e)) {
          le = e;
          for (var i = 0; i<len; i++) {
            name = p[i].name
            if (m = e.match(p[i].re)) {
              v = Object.isFunction(x[name]) ? x[name](m) : new Template(x[name]).evaluate(m);
              exclusion.push("(" + v.substring(1, v.length - 1) + ")");
              e = e.replace(m[0], '');
              break;
            }
          }
        }
        return "[not(" + exclusion.join(" and ") + ")]";
      },
      'nth-child':      function(m) {
        return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
      },
      'nth-last-child': function(m) {
        return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
      },
      'nth-of-type':    function(m) {
        return Selector.xpath.pseudos.nth("position() ", m);
      },
      'nth-last-of-type': function(m) {
        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
      },
      'first-of-type':  function(m) {
        m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
      },
      'last-of-type':   function(m) {
        m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
      },
      'only-of-type':   function(m) {
        var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
      },
      nth: function(fragment, m) {
        var mm, formula = m[6], predicate;
        if (formula == 'even') formula = '2n+0';
        if (formula == 'odd')  formula = '2n+1';
        if (mm = formula.match(/^(\d+)$/)) // digit only
          return '[' + fragment + "= " + mm[1] + ']';
        if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
          if (mm[1] == "-") mm[1] = -1;
          var a = mm[1] ? Number(mm[1]) : 1;
          var b = mm[2] ? Number(mm[2]) : 0;
          predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
          "((#{fragment} - #{b}) div #{a} >= 0)]";
          return new Template(predicate).evaluate({
            fragment: fragment, a: a, b: b });
        }
      }
    }
  },

  criteria: {
    tagName:      'n = h.tagName(n, r, "#{1}", c);      c = false;',
    className:    'n = h.className(n, r, "#{1}", c);    c = false;',
    id:           'n = h.id(n, r, "#{1}", c);           c = false;',
    attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
    attr: function(m) {
      m[3] = (m[5] || m[6]);
      return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
    },
    pseudo: function(m) {
      if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
      return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
    },
    descendant:   'c = "descendant";',
    child:        'c = "child";',
    adjacent:     'c = "adjacent";',
    laterSibling: 'c = "laterSibling";'
  },

  patterns: [
    { name: 'laterSibling', re: /^\s*~\s*/ },
    { name: 'child',        re: /^\s*>\s*/ },
    { name: 'adjacent',     re: /^\s*\+\s*/ },
    { name: 'descendant',   re: /^\s/ },

    { name: 'tagName',      re: /^\s*(\*|[\w\-]+)(\b|$)?/ },
    { name: 'id',           re: /^#([\w\-\*]+)(\b|$)/ },
    { name: 'className',    re: /^\.([\w\-\*]+)(\b|$)/ },
    { name: 'pseudo',       re: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/ },
    { name: 'attrPresence', re: /^\[((?:[\w-]+:)?[\w-]+)\]/ },
    { name: 'attr',         re: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ }
  ],

  assertions: {
    tagName: function(element, matches) {
      return matches[1].toUpperCase() == element.tagName.toUpperCase();
    },

    className: function(element, matches) {
      return Element.hasClassName(element, matches[1]);
    },

    id: function(element, matches) {
      return element.id === matches[1];
    },

    attrPresence: function(element, matches) {
      return Element.hasAttribute(element, matches[1]);
    },

    attr: function(element, matches) {
      var nodeValue = Element.readAttribute(element, matches[1]);
      return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
    }
  },

  handlers: {
    concat: function(a, b) {
      for (var i = 0, node; node = b[i]; i++)
        a.push(node);
      return a;
    },

    mark: function(nodes) {
      var _true = Prototype.emptyFunction;
      for (var i = 0, node; node = nodes[i]; i++)
        node._countedByPrototype = _true;
      return nodes;
    },

    unmark: (function(){

      var PROPERTIES_ATTRIBUTES_MAP = (function(){
        var el = document.createElement('div'),
            isBuggy = false,
            propName = '_countedByPrototype',
            value = 'x'
        el[propName] = value;
        isBuggy = (el.getAttribute(propName) === value);
        el = null;
        return isBuggy;
      })();

      return PROPERTIES_ATTRIBUTES_MAP ?
        function(nodes) {
          for (var i = 0, node; node = nodes[i]; i++)
            node.removeAttribute('_countedByPrototype');
          return nodes;
        } :
        function(nodes) {
          for (var i = 0, node; node = nodes[i]; i++)
            node._countedByPrototype = void 0;
          return nodes;
        }
    })(),

    index: function(parentNode, reverse, ofType) {
      parentNode._countedByPrototype = Prototype.emptyFunction;
      if (reverse) {
        for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
          var node = nodes[i];
          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
        }
      } else {
        for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
      }
    },

    unique: function(nodes) {
      if (nodes.length == 0) return nodes;
      var results = [], n;
      for (var i = 0, l = nodes.length; i < l; i++)
        if (typeof (n = nodes[i])._countedByPrototype == 'undefined') {
          n._countedByPrototype = Prototype.emptyFunction;
          results.push(Element.extend(n));
        }
      return Selector.handlers.unmark(results);
    },

    descendant: function(nodes) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        h.concat(results, node.getElementsByTagName('*'));
      return results;
    },

    child: function(nodes) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        for (var j = 0, child; child = node.childNodes[j]; j++)
          if (child.nodeType == 1 && child.tagName != '!') results.push(child);
      }
      return results;
    },

    adjacent: function(nodes) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        var next = this.nextElementSibling(node);
        if (next) results.push(next);
      }
      return results;
    },

    laterSibling: function(nodes) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        h.concat(results, Element.nextSiblings(node));
      return results;
    },

    nextElementSibling: function(node) {
      while (node = node.nextSibling)
        if (node.nodeType == 1) return node;
      return null;
    },

    previousElementSibling: function(node) {
      while (node = node.previousSibling)
        if (node.nodeType == 1) return node;
      return null;
    },

    tagName: function(nodes, root, tagName, combinator) {
      var uTagName = tagName.toUpperCase();
      var results = [], h = Selector.handlers;
      if (nodes) {
        if (combinator) {
          if (combinator == "descendant") {
            for (var i = 0, node; node = nodes[i]; i++)
              h.concat(results, node.getElementsByTagName(tagName));
            return results;
          } else nodes = this[combinator](nodes);
          if (tagName == "*") return nodes;
        }
        for (var i = 0, node; node = nodes[i]; i++)
          if (node.tagName.toUpperCase() === uTagName) results.push(node);
        return results;
      } else return root.getElementsByTagName(tagName);
    },

    id: function(nodes, root, id, combinator) {
      var targetNode = $(id), h = Selector.handlers;

      if (root == document) {
        if (!targetNode) return [];
        if (!nodes) return [targetNode];
      } else {
        if (!root.sourceIndex || root.sourceIndex < 1) {
          var nodes = root.getElementsByTagName('*');
          for (var j = 0, node; node = nodes[j]; j++) {
            if (node.id === id) return [node];
          }
        }
      }

      if (nodes) {
        if (combinator) {
          if (combinator == 'child') {
            for (var i = 0, node; node = nodes[i]; i++)
              if (targetNode.parentNode == node) return [targetNode];
          } else if (combinator == 'descendant') {
            for (var i = 0, node; node = nodes[i]; i++)
              if (Element.descendantOf(targetNode, node)) return [targetNode];
          } else if (combinator == 'adjacent') {
            for (var i = 0, node; node = nodes[i]; i++)
              if (Selector.handlers.previousElementSibling(targetNode) == node)
                return [targetNode];
          } else nodes = h[combinator](nodes);
        }
        for (var i = 0, node; node = nodes[i]; i++)
          if (node == targetNode) return [targetNode];
        return [];
      }
      return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
    },

    className: function(nodes, root, className, combinator) {
      if (nodes && combinator) nodes = this[combinator](nodes);
      return Selector.handlers.byClassName(nodes, root, className);
    },

    byClassName: function(nodes, root, className) {
      if (!nodes) nodes = Selector.handlers.descendant([root]);
      var needle = ' ' + className + ' ';
      for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
        nodeClassName = node.className;
        if (nodeClassName.length == 0) continue;
        if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
          results.push(node);
      }
      return results;
    },

    attrPresence: function(nodes, root, attr, combinator) {
      if (!nodes) nodes = root.getElementsByTagName("*");
      if (nodes && combinator) nodes = this[combinator](nodes);
      var results = [];
      for (var i = 0, node; node = nodes[i]; i++)
        if (Element.hasAttribute(node, attr)) results.push(node);
      return results;
    },

    attr: function(nodes, root, attr, value, operator, combinator) {
      if (!nodes) nodes = root.getElementsByTagName("*");
      if (nodes && combinator) nodes = this[combinator](nodes);
      var handler = Selector.operators[operator], results = [];
      for (var i = 0, node; node = nodes[i]; i++) {
        var nodeValue = Element.readAttribute(node, attr);
        if (nodeValue === null) continue;
        if (handler(nodeValue, value)) results.push(node);
      }
      return results;
    },

    pseudo: function(nodes, name, value, root, combinator) {
      if (nodes && combinator) nodes = this[combinator](nodes);
      if (!nodes) nodes = root.getElementsByTagName("*");
      return Selector.pseudos[name](nodes, value, root);
    }
  },

  pseudos: {
    'first-child': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        if (Selector.handlers.previousElementSibling(node)) continue;
          results.push(node);
      }
      return results;
    },
    'last-child': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        if (Selector.handlers.nextElementSibling(node)) continue;
          results.push(node);
      }
      return results;
    },
    'only-child': function(nodes, value, root) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
          results.push(node);
      return results;
    },
    'nth-child':        function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root);
    },
    'nth-last-child':   function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, true);
    },
    'nth-of-type':      function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, false, true);
    },
    'nth-last-of-type': function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, true, true);
    },
    'first-of-type':    function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, "1", root, false, true);
    },
    'last-of-type':     function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, "1", root, true, true);
    },
    'only-of-type':     function(nodes, formula, root) {
      var p = Selector.pseudos;
      return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
    },

    getIndices: function(a, b, total) {
      if (a == 0) return b > 0 ? [b] : [];
      return $R(1, total).inject([], function(memo, i) {
        if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
        return memo;
      });
    },

    nth: function(nodes, formula, root, reverse, ofType) {
      if (nodes.length == 0) return [];
      if (formula == 'even') formula = '2n+0';
      if (formula == 'odd')  formula = '2n+1';
      var h = Selector.handlers, results = [], indexed = [], m;
      h.mark(nodes);
      for (var i = 0, node; node = nodes[i]; i++) {
        if (!node.parentNode._countedByPrototype) {
          h.index(node.parentNode, reverse, ofType);
          indexed.push(node.parentNode);
        }
      }
      if (formula.match(/^\d+$/)) { // just a number
        formula = Number(formula);
        for (var i = 0, node; node = nodes[i]; i++)
          if (node.nodeIndex == formula) results.push(node);
      } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
        if (m[1] == "-") m[1] = -1;
        var a = m[1] ? Number(m[1]) : 1;
        var b = m[2] ? Number(m[2]) : 0;
        var indices = Selector.pseudos.getIndices(a, b, nodes.length);
        for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
          for (var j = 0; j < l; j++)
            if (node.nodeIndex == indices[j]) results.push(node);
        }
      }
      h.unmark(nodes);
      h.unmark(indexed);
      return results;
    },

    'empty': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        if (node.tagName == '!' || node.firstChild) continue;
        results.push(node);
      }
      return results;
    },

    'not': function(nodes, selector, root) {
      var h = Selector.handlers, selectorType, m;
      var exclusions = new Selector(selector).findElements(root);
      h.mark(exclusions);
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (!node._countedByPrototype) results.push(node);
      h.unmark(exclusions);
      return results;
    },

    'enabled': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (!node.disabled && (!node.type || node.type !== 'hidden'))
          results.push(node);
      return results;
    },

    'disabled': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (node.disabled) results.push(node);
      return results;
    },

    'checked': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (node.checked) results.push(node);
      return results;
    }
  },

  operators: {
    '=':  function(nv, v) { return nv == v; },
    '!=': function(nv, v) { return nv != v; },
    '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); },
    '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); },
    '*=': function(nv, v) { return nv == v || nv && nv.include(v); },
    '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
    '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() +
     '-').include('-' + (v || "").toUpperCase() + '-'); }
  },

  split: function(expression) {
    var expressions = [];
    expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
      expressions.push(m[1].strip());
    });
    return expressions;
  },

  matchElements: function(elements, expression) {
    var matches = $$(expression), h = Selector.handlers;
    h.mark(matches);
    for (var i = 0, results = [], element; element = elements[i]; i++)
      if (element._countedByPrototype) results.push(element);
    h.unmark(matches);
    return results;
  },

  findElement: function(elements, expression, index) {
    if (Object.isNumber(expression)) {
      index = expression; expression = false;
    }
    return Selector.matchElements(elements, expression || '*')[index || 0];
  },

  findChildElements: function(element, expressions) {
    expressions = Selector.split(expressions.join(','));
    var results = [], h = Selector.handlers;
    for (var i = 0, l = expressions.length, selector; i < l; i++) {
      selector = new Selector(expressions[i].strip());
      h.concat(results, selector.findElements(element));
    }
    return (l > 1) ? h.unique(results) : results;
  }
});

if (Prototype.Browser.IE) {
  Object.extend(Selector.handlers, {
    concat: function(a, b) {
      for (var i = 0, node; node = b[i]; i++)
        if (node.tagName !== "!") a.push(node);
      return a;
    }
  });
}

function $$() {
  return Selector.findChildElements(document, $A(arguments));
}

var Form = {
  reset: function(form) {
    form = $(form);
    form.reset();
    return form;
  },

  serializeElements: function(elements, options) {
    if (typeof options != 'object') options = { hash: !!options };
    else if (Object.isUndefined(options.hash)) options.hash = true;
    var key, value, submitted = false, submit = options.submit;

    var data = elements.inject({ }, function(result, element) {
      if (!element.disabled && element.name) {
        key = element.name; value = $(element).getValue();
        if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
            submit !== false && (!submit || key == submit) && (submitted = true)))) {
          if (key in result) {
            if (!Object.isArray(result[key])) result[key] = [result[key]];
            result[key].push(value);
          }
          else result[key] = value;
        }
      }
      return result;
    });

    return options.hash ? data : Object.toQueryString(data);
  }
};

Form.Methods = {
  serialize: function(form, options) {
    return Form.serializeElements(Form.getElements(form), options);
  },

  getElements: function(form) {
    var elements = $(form).getElementsByTagName('*'),
        element,
        arr = [ ],
        serializers = Form.Element.Serializers;
    for (var i = 0; element = elements[i]; i++) {
      arr.push(element);
    }
    return arr.inject([], function(elements, child) {
      if (serializers[child.tagName.toLowerCase()])
        elements.push(Element.extend(child));
      return elements;
    })
  },

  getInputs: function(form, typeName, name) {
    form = $(form);
    var inputs = form.getElementsByTagName('input');

    if (!typeName && !name) return $A(inputs).map(Element.extend);

    for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
      var input = inputs[i];
      if ((typeName && input.type != typeName) || (name && input.name != name))
        continue;
      matchingInputs.push(Element.extend(input));
    }

    return matchingInputs;
  },

  disable: function(form) {
    form = $(form);
    Form.getElements(form).invoke('disable');
    return form;
  },

  enable: function(form) {
    form = $(form);
    Form.getElements(form).invoke('enable');
    return form;
  },

  findFirstElement: function(form) {
    var elements = $(form).getElements().findAll(function(element) {
      return 'hidden' != element.type && !element.disabled;
    });
    var firstByIndex = elements.findAll(function(element) {
      return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
    }).sortBy(function(element) { return element.tabIndex }).first();

    return firstByIndex ? firstByIndex : elements.find(function(element) {
      return /^(?:input|select|textarea)$/i.test(element.tagName);
    });
  },

  focusFirstElement: function(form) {
    form = $(form);
    form.findFirstElement().activate();
    return form;
  },

  request: function(form, options) {
    form = $(form), options = Object.clone(options || { });

    var params = options.parameters, action = form.readAttribute('action') || '';
    if (action.blank()) action = window.location.href;
    options.parameters = form.serialize(true);

    if (params) {
      if (Object.isString(params)) params = params.toQueryParams();
      Object.extend(options.parameters, params);
    }

    if (form.hasAttribute('method') && !options.method)
      options.method = form.method;

    return new Ajax.Request(action, options);
  }
};

/*--------------------------------------------------------------------------*/


Form.Element = {
  focus: function(element) {
    $(element).focus();
    return element;
  },

  select: function(element) {
    $(element).select();
    return element;
  }
};

Form.Element.Methods = {

  serialize: function(element) {
    element = $(element);
    if (!element.disabled && element.name) {
      var value = element.getValue();
      if (value != undefined) {
        var pair = { };
        pair[element.name] = value;
        return Object.toQueryString(pair);
      }
    }
    return '';
  },

  getValue: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    return Form.Element.Serializers[method](element);
  },

  setValue: function(element, value) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    Form.Element.Serializers[method](element, value);
    return element;
  },

  clear: function(element) {
    $(element).value = '';
    return element;
  },

  present: function(element) {
    return $(element).value != '';
  },

  activate: function(element) {
    element = $(element);
    try {
      element.focus();
      if (element.select && (element.tagName.toLowerCase() != 'input' ||
          !(/^(?:button|reset|submit)$/i.test(element.type))))
        element.select();
    } catch (e) { }
    return element;
  },

  disable: function(element) {
    element = $(element);
    element.disabled = true;
    return element;
  },

  enable: function(element) {
    element = $(element);
    element.disabled = false;
    return element;
  }
};

/*--------------------------------------------------------------------------*/

var Field = Form.Element;

var $F = Form.Element.Methods.getValue;

/*--------------------------------------------------------------------------*/

Form.Element.Serializers = {
  input: function(element, value) {
    switch (element.type.toLowerCase()) {
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element, value);
      default:
        return Form.Element.Serializers.textarea(element, value);
    }
  },

  inputSelector: function(element, value) {
    if (Object.isUndefined(value)) return element.checked ? element.value : null;
    else element.checked = !!value;
  },

  textarea: function(element, value) {
    if (Object.isUndefined(value)) return element.value;
    else element.value = value;
  },

  select: function(element, value) {
    if (Object.isUndefined(value))
      return this[element.type == 'select-one' ?
        'selectOne' : 'selectMany'](element);
    else {
      var opt, currentValue, single = !Object.isArray(value);
      for (var i = 0, length = element.length; i < length; i++) {
        opt = element.options[i];
        currentValue = this.optionValue(opt);
        if (single) {
          if (currentValue == value) {
            opt.selected = true;
            return;
          }
        }
        else opt.selected = value.include(currentValue);
      }
    }
  },

  selectOne: function(element) {
    var index = element.selectedIndex;
    return index >= 0 ? this.optionValue(element.options[index]) : null;
  },

  selectMany: function(element) {
    var values, length = element.length;
    if (!length) return null;

    for (var i = 0, values = []; i < length; i++) {
      var opt = element.options[i];
      if (opt.selected) values.push(this.optionValue(opt));
    }
    return values;
  },

  optionValue: function(opt) {
    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
  }
};

/*--------------------------------------------------------------------------*/


Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
  initialize: function($super, element, frequency, callback) {
    $super(callback, frequency);
    this.element   = $(element);
    this.lastValue = this.getValue();
  },

  execute: function() {
    var value = this.getValue();
    if (Object.isString(this.lastValue) && Object.isString(value) ?
        this.lastValue != value : String(this.lastValue) != String(value)) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  }
});

Form.Element.Observer = Class.create(Abstract.TimedObserver, {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.Observer = Class.create(Abstract.TimedObserver, {
  getValue: function() {
    return Form.serialize(this.element);
  }
});

/*--------------------------------------------------------------------------*/

Abstract.EventObserver = Class.create({
  initialize: function(element, callback) {
    this.element  = $(element);
    this.callback = callback;

    this.lastValue = this.getValue();
    if (this.element.tagName.toLowerCase() == 'form')
      this.registerFormCallbacks();
    else
      this.registerCallback(this.element);
  },

  onElementEvent: function() {
    var value = this.getValue();
    if (this.lastValue != value) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  },

  registerFormCallbacks: function() {
    Form.getElements(this.element).each(this.registerCallback, this);
  },

  registerCallback: function(element) {
    if (element.type) {
      switch (element.type.toLowerCase()) {
        case 'checkbox':
        case 'radio':
          Event.observe(element, 'click', this.onElementEvent.bind(this));
          break;
        default:
          Event.observe(element, 'change', this.onElementEvent.bind(this));
          break;
      }
    }
  }
});

Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.EventObserver = Class.create(Abstract.EventObserver, {
  getValue: function() {
    return Form.serialize(this.element);
  }
});
(function() {

  var Event = {
    KEY_BACKSPACE: 8,
    KEY_TAB:       9,
    KEY_RETURN:   13,
    KEY_ESC:      27,
    KEY_LEFT:     37,
    KEY_UP:       38,
    KEY_RIGHT:    39,
    KEY_DOWN:     40,
    KEY_DELETE:   46,
    KEY_HOME:     36,
    KEY_END:      35,
    KEY_PAGEUP:   33,
    KEY_PAGEDOWN: 34,
    KEY_INSERT:   45,

    cache: {}
  };

  var docEl = document.documentElement;
  var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl
    && 'onmouseleave' in docEl;

  var _isButton;
  if (Prototype.Browser.IE) {
    var buttonMap = { 0: 1, 1: 4, 2: 2 };
    _isButton = function(event, code) {
      return event.button === buttonMap[code];
    };
  } else if (Prototype.Browser.WebKit) {
    _isButton = function(event, code) {
      switch (code) {
        case 0: return event.which == 1 && !event.metaKey;
        case 1: return event.which == 1 && event.metaKey;
        default: return false;
      }
    };
  } else {
    _isButton = function(event, code) {
      return event.which ? (event.which === code + 1) : (event.button === code);
    };
  }

  function isLeftClick(event)   { return _isButton(event, 0) }

  function isMiddleClick(event) { return _isButton(event, 1) }

  function isRightClick(event)  { return _isButton(event, 2) }

  function element(event) {
    event = Event.extend(event);

    var node = event.target, type = event.type,
     currentTarget = event.currentTarget;

    if (currentTarget && currentTarget.tagName) {
      if (type === 'load' || type === 'error' ||
        (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
          && currentTarget.type === 'radio'))
            node = currentTarget;
    }

    if (node.nodeType == Node.TEXT_NODE)
      node = node.parentNode;

    return Element.extend(node);
  }

  function findElement(event, expression) {
    var element = Event.element(event);
    if (!expression) return element;
    var elements = [element].concat(element.ancestors());
    return Selector.findElement(elements, expression, 0);
  }

  function pointer(event) {
    return { x: pointerX(event), y: pointerY(event) };
  }

  function pointerX(event) {
    var docElement = document.documentElement,
     body = document.body || { scrollLeft: 0 };

    return event.pageX || (event.clientX +
      (docElement.scrollLeft || body.scrollLeft) -
      (docElement.clientLeft || 0));
  }

  function pointerY(event) {
    var docElement = document.documentElement,
     body = document.body || { scrollTop: 0 };

    return  event.pageY || (event.clientY +
       (docElement.scrollTop || body.scrollTop) -
       (docElement.clientTop || 0));
  }


  function stop(event) {
    Event.extend(event);
    event.preventDefault();
    event.stopPropagation();

    event.stopped = true;
  }

  Event.Methods = {
    isLeftClick: isLeftClick,
    isMiddleClick: isMiddleClick,
    isRightClick: isRightClick,

    element: element,
    findElement: findElement,

    pointer: pointer,
    pointerX: pointerX,
    pointerY: pointerY,

    stop: stop
  };


  var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
    m[name] = Event.Methods[name].methodize();
    return m;
  });

  if (Prototype.Browser.IE) {
    function _relatedTarget(event) {
      var element;
      switch (event.type) {
        case 'mouseover': element = event.fromElement; break;
        case 'mouseout':  element = event.toElement;   break;
        default: return null;
      }
      return Element.extend(element);
    }

    Object.extend(methods, {
      stopPropagation: function() { this.cancelBubble = true },
      preventDefault:  function() { this.returnValue = false },
      inspect: function() { return '[object Event]' }
    });

    Event.extend = function(event, element) {
      if (!event) return false;
      if (event._extendedByPrototype) return event;

      event._extendedByPrototype = Prototype.emptyFunction;
      var pointer = Event.pointer(event);

      Object.extend(event, {
        target: event.srcElement || element,
        relatedTarget: _relatedTarget(event),
        pageX:  pointer.x,
        pageY:  pointer.y
      });

      return Object.extend(event, methods);
    };
  } else {
    Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__;
    Object.extend(Event.prototype, methods);
    Event.extend = Prototype.K;
  }

  function _createResponder(element, eventName, handler) {
    var registry = Element.retrieve(element, 'prototype_event_registry');

    if (Object.isUndefined(registry)) {
      CACHE.push(element);
      registry = Element.retrieve(element, 'prototype_event_registry', $H());
    }

    var respondersForEvent = registry.get(eventName);
    if (Object.isUndefined(respondersForEvent)) {
      respondersForEvent = [];
      registry.set(eventName, respondersForEvent);
    }

    if (respondersForEvent.pluck('handler').include(handler)) return false;

    var responder;
    if (eventName.include(":")) {
      responder = function(event) {
        if (Object.isUndefined(event.eventName))
          return false;

        if (event.eventName !== eventName)
          return false;

        Event.extend(event, element);
        handler.call(element, event);
      };
    } else {
      if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED &&
       (eventName === "mouseenter" || eventName === "mouseleave")) {
        if (eventName === "mouseenter" || eventName === "mouseleave") {
          responder = function(event) {
            Event.extend(event, element);

            var parent = event.relatedTarget;
            while (parent && parent !== element) {
              try { parent = parent.parentNode; }
              catch(e) { parent = element; }
            }

            if (parent === element) return;

            handler.call(element, event);
          };
        }
      } else {
        responder = function(event) {
          Event.extend(event, element);
          handler.call(element, event);
        };
      }
    }

    responder.handler = handler;
    respondersForEvent.push(responder);
    return responder;
  }

  function _destroyCache() {
    for (var i = 0, length = CACHE.length; i < length; i++) {
      Event.stopObserving(CACHE[i]);
      CACHE[i] = null;
    }
  }

  var CACHE = [];

  if (Prototype.Browser.IE)
    window.attachEvent('onunload', _destroyCache);

  if (Prototype.Browser.WebKit)
    window.addEventListener('unload', Prototype.emptyFunction, false);


  var _getDOMEventName = Prototype.K;

  if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) {
    _getDOMEventName = function(eventName) {
      var translations = { mouseenter: "mouseover", mouseleave: "mouseout" };
      return eventName in translations ? translations[eventName] : eventName;
    };
  }

  function observe(element, eventName, handler) {
    element = $(element);

    var responder = _createResponder(element, eventName, handler);

    if (!responder) return element;

    if (eventName.include(':')) {
      if (element.addEventListener)
        element.addEventListener("dataavailable", responder, false);
      else {
        element.attachEvent("ondataavailable", responder);
        element.attachEvent("onfilterchange", responder);
      }
    } else {
      var actualEventName = _getDOMEventName(eventName);

      if (element.addEventListener)
        element.addEventListener(actualEventName, responder, false);
      else
        element.attachEvent("on" + actualEventName, responder);
    }

    return element;
  }

  function stopObserving(element, eventName, handler) {
    element = $(element);

    var registry = Element.retrieve(element, 'prototype_event_registry');

    if (Object.isUndefined(registry)) return element;

    if (eventName && !handler) {
      var responders = registry.get(eventName);

      if (Object.isUndefined(responders)) return element;

      responders.each( function(r) {
        Element.stopObserving(element, eventName, r.handler);
      });
      return element;
    } else if (!eventName) {
      registry.each( function(pair) {
        var eventName = pair.key, responders = pair.value;

        responders.each( function(r) {
          Element.stopObserving(element, eventName, r.handler);
        });
      });
      return element;
    }

    var responders = registry.get(eventName);

    if (!responders) return;

    var responder = responders.find( function(r) { return r.handler === handler; });
    if (!responder) return element;

    var actualEventName = _getDOMEventName(eventName);

    if (eventName.include(':')) {
      if (element.removeEventListener)
        element.removeEventListener("dataavailable", responder, false);
      else {
        element.detachEvent("ondataavailable", responder);
        element.detachEvent("onfilterchange",  responder);
      }
    } else {
      if (element.removeEventListener)
        element.removeEventListener(actualEventName, responder, false);
      else
        element.detachEvent('on' + actualEventName, responder);
    }

    registry.set(eventName, responders.without(responder));

    return element;
  }

  function fire(element, eventName, memo, bubble) {
    element = $(element);

    if (Object.isUndefined(bubble))
      bubble = true;

    if (element == document && document.createEvent && !element.dispatchEvent)
      element = document.documentElement;

    var event;
    if (document.createEvent) {
      event = document.createEvent('HTMLEvents');
      event.initEvent('dataavailable', true, true);
    } else {
      event = document.createEventObject();
      event.eventType = bubble ? 'ondataavailable' : 'onfilterchange';
    }

    event.eventName = eventName;
    event.memo = memo || { };

    if (document.createEvent)
      element.dispatchEvent(event);
    else
      element.fireEvent(event.eventType, event);

    return Event.extend(event);
  }


  Object.extend(Event, Event.Methods);

  Object.extend(Event, {
    fire:          fire,
    observe:       observe,
    stopObserving: stopObserving
  });

  Element.addMethods({
    fire:          fire,

    observe:       observe,

    stopObserving: stopObserving
  });

  Object.extend(document, {
    fire:          fire.methodize(),

    observe:       observe.methodize(),

    stopObserving: stopObserving.methodize(),

    loaded:        false
  });

  if (window.Event) Object.extend(window.Event, Event);
  else window.Event = Event;
})();

(function() {
  /* Support for the DOMContentLoaded event is based on work by Dan Webb,
     Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */

  var timer;

  function fireContentLoadedEvent() {
    if (document.loaded) return;
    if (timer) window.clearTimeout(timer);
    document.loaded = true;
    document.fire('dom:loaded');
  }

  function checkReadyState() {
    if (document.readyState === 'complete') {
      document.stopObserving('readystatechange', checkReadyState);
      fireContentLoadedEvent();
    }
  }

  function pollDoScroll() {
    try { document.documentElement.doScroll('left'); }
    catch(e) {
      timer = pollDoScroll.defer();
      return;
    }
    fireContentLoadedEvent();
  }

  if (document.addEventListener) {
    document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);
  } else {
    document.observe('readystatechange', checkReadyState);
    if (window == top)
      timer = pollDoScroll.defer();
  }

  Event.observe(window, 'load', fireContentLoadedEvent);
})();

Element.addMethods();

/*------------------------------- DEPRECATED -------------------------------*/

Hash.toQueryString = Object.toQueryString;

var Toggle = { display: Element.toggle };

Element.Methods.childOf = Element.Methods.descendantOf;

var Insertion = {
  Before: function(element, content) {
    return Element.insert(element, {before:content});
  },

  Top: function(element, content) {
    return Element.insert(element, {top:content});
  },

  Bottom: function(element, content) {
    return Element.insert(element, {bottom:content});
  },

  After: function(element, content) {
    return Element.insert(element, {after:content});
  }
};

var $continue = new Error('"throw $continue" is deprecated, use "return" instead');

var Position = {
  includeScrollOffsets: false,

  prepare: function() {
    this.deltaX =  window.pageXOffset
                || document.documentElement.scrollLeft
                || document.body.scrollLeft
                || 0;
    this.deltaY =  window.pageYOffset
                || document.documentElement.scrollTop
                || document.body.scrollTop
                || 0;
  },

  within: function(element, x, y) {
    if (this.includeScrollOffsets)
      return this.withinIncludingScrolloffsets(element, x, y);
    this.xcomp = x;
    this.ycomp = y;
    this.offset = Element.cumulativeOffset(element);

    return (y >= this.offset[1] &&
            y <  this.offset[1] + element.offsetHeight &&
            x >= this.offset[0] &&
            x <  this.offset[0] + element.offsetWidth);
  },

  withinIncludingScrolloffsets: function(element, x, y) {
    var offsetcache = Element.cumulativeScrollOffset(element);

    this.xcomp = x + offsetcache[0] - this.deltaX;
    this.ycomp = y + offsetcache[1] - this.deltaY;
    this.offset = Element.cumulativeOffset(element);

    return (this.ycomp >= this.offset[1] &&
            this.ycomp <  this.offset[1] + element.offsetHeight &&
            this.xcomp >= this.offset[0] &&
            this.xcomp <  this.offset[0] + element.offsetWidth);
  },

  overlap: function(mode, element) {
    if (!mode) return 0;
    if (mode == 'vertical')
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
        element.offsetHeight;
    if (mode == 'horizontal')
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
        element.offsetWidth;
  },


  cumulativeOffset: Element.Methods.cumulativeOffset,

  positionedOffset: Element.Methods.positionedOffset,

  absolutize: function(element) {
    Position.prepare();
    return Element.absolutize(element);
  },

  relativize: function(element) {
    Position.prepare();
    return Element.relativize(element);
  },

  realOffset: Element.Methods.cumulativeScrollOffset,

  offsetParent: Element.Methods.getOffsetParent,

  page: Element.Methods.viewportOffset,

  clone: function(source, target, options) {
    options = options || { };
    return Element.clonePosition(target, source, options);
  }
};

/*--------------------------------------------------------------------------*/

if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
  function iter(name) {
    return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
  }

  instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
  function(element, className) {
    className = className.toString().strip();
    var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
    return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
  } : function(element, className) {
    className = className.toString().strip();
    var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
    if (!classNames && !className) return elements;

    var nodes = $(element).getElementsByTagName('*');
    className = ' ' + className + ' ';

    for (var i = 0, child, cn; child = nodes[i]; i++) {
      if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
          (classNames && classNames.all(function(name) {
            return !name.toString().blank() && cn.include(' ' + name + ' ');
          }))))
        elements.push(Element.extend(child));
    }
    return elements;
  };

  return function(className, parentElement) {
    return $(parentElement || document.body).getElementsByClassName(className);
  };
}(Element.Methods);

/*--------------------------------------------------------------------------*/

Element.ClassNames = Class.create();
Element.ClassNames.prototype = {
  initialize: function(element) {
    this.element = $(element);
  },

  _each: function(iterator) {
    this.element.className.split(/\s+/).select(function(name) {
      return name.length > 0;
    })._each(iterator);
  },

  set: function(className) {
    this.element.className = className;
  },

  add: function(classNameToAdd) {
    if (this.include(classNameToAdd)) return;
    this.set($A(this).concat(classNameToAdd).join(' '));
  },

  remove: function(classNameToRemove) {
    if (!this.include(classNameToRemove)) return;
    this.set($A(this).without(classNameToRemove).join(' '));
  },

  toString: function() {
    return $A(this).join(' ');
  }
};

Object.extend(Element.ClassNames.prototype, Enumerable);

/*--------------------------------------------------------------------------*/
                                                                                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/javascripts/jquery-ui-1.8.custom.min.js                                       0000666 0000000 0000000 00000644773 12534142432 023076  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*!
 * jQuery UI 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI
 *//*
 * jQuery UI 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI
 */
jQuery.ui||(function(a){a.ui={version:"1.8",plugin:{add:function(c,d,f){var e=a.ui[c].prototype;for(var b in f){e.plugins[b]=e.plugins[b]||[];e.plugins[b].push([d,f[b]])}},call:function(b,d,c){var f=b.plugins[d];if(!f||!b.element[0].parentNode){return}for(var e=0;e<f.length;e++){if(b.options[f[e][0]]){f[e][1].apply(b.element,c)}}}},contains:function(d,c){return document.compareDocumentPosition?d.compareDocumentPosition(c)&16:d!==c&&d.contains(c)},hasScroll:function(e,c){if(a(e).css("overflow")=="hidden"){return false}var b=(c&&c=="left")?"scrollLeft":"scrollTop",d=false;if(e[b]>0){return true}e[b]=1;d=(e[b]>0);e[b]=0;return d},isOverAxis:function(c,b,d){return(c>b)&&(c<(b+d))},isOver:function(g,c,f,e,b,d){return a.ui.isOverAxis(g,f,b)&&a.ui.isOverAxis(c,e,d)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};a.fn.extend({_focus:a.fn.focus,focus:function(b,c){return typeof b==="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus();(c&&c.call(d))},b)}):this._focus.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var b;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){b=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{b=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!b.length?a(document):b},zIndex:function(e){if(e!==undefined){return this.css("zIndex",e)}if(this.length){var c=a(this[0]),b,d;while(c.length&&c[0]!==document){b=c.css("position");if(b=="absolute"||b=="relative"||b=="fixed"){d=parseInt(c.css("zIndex"));if(!isNaN(d)&&d!=0){return d}}c=c.parent()}}return 0}});a.extend(a.expr[":"],{data:function(d,c,b){return !!a.data(d,b[3])},focusable:function(c){var d=c.nodeName.toLowerCase(),b=a.attr(c,"tabindex");return(/input|select|textarea|button|object/.test(d)?!c.disabled:"a"==d||"area"==d?c.href||!isNaN(b):!isNaN(b))&&!a(c)["area"==d?"parents":"closest"](":hidden").length},tabbable:function(c){var b=a.attr(c,"tabindex");return(isNaN(b)||b>=0)&&a(c).is(":focusable")}})})(jQuery);;/*!
 * jQuery UI Widget 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Widget
 *//*
 * jQuery UI Widget 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Widget
 */
(function(b){var a=b.fn.remove;b.fn.remove=function(c,d){return this.each(function(){if(!d){if(!c||b.filter(c,[this]).length){b("*",this).add(this).each(function(){b(this).triggerHandler("remove")})}}return a.call(b(this),c,d)})};b.widget=function(d,f,c){var e=d.split(".")[0],h;d=d.split(".")[1];h=e+"-"+d;if(!c){c=f;f=b.Widget}b.expr[":"][h]=function(i){return !!b.data(i,d)};b[e]=b[e]||{};b[e][d]=function(i,j){if(arguments.length){this._createWidget(i,j)}};var g=new f();g.options=b.extend({},g.options);b[e][d].prototype=b.extend(true,g,{namespace:e,widgetName:d,widgetEventPrefix:b[e][d].prototype.widgetEventPrefix||d,widgetBaseClass:h},c);b.widget.bridge(d,b[e][d])};b.widget.bridge=function(d,c){b.fn[d]=function(g){var e=typeof g==="string",f=Array.prototype.slice.call(arguments,1),h=this;g=!e&&f.length?b.extend.apply(null,[true,g].concat(f)):g;if(e&&g.substring(0,1)==="_"){return h}if(e){this.each(function(){var i=b.data(this,d),j=i&&b.isFunction(i[g])?i[g].apply(i,f):i;if(j!==i&&j!==undefined){h=j;return false}})}else{this.each(function(){var i=b.data(this,d);if(i){if(g){i.option(g)}i._init()}else{b.data(this,d,new c(g,this))}})}return h}};b.Widget=function(c,d){if(arguments.length){this._createWidget(c,d)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(d,e){this.element=b(e).data(this.widgetName,this);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(e)[this.widgetName],d);var c=this;this.element.bind("remove."+this.widgetName,function(){c.destroy()});this._create();this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled")},widget:function(){return this.element},option:function(e,f){var d=e,c=this;if(arguments.length===0){return b.extend({},c.options)}if(typeof e==="string"){if(f===undefined){return this.options[e]}d={};d[e]=f}b.each(d,function(g,h){c._setOption(g,h)});return c},_setOption:function(c,d){this.options[c]=d;if(c==="disabled"){this.widget()[d?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",d)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(d,e,f){var h=this.options[d];e=b.Event(e);e.type=(d===this.widgetEventPrefix?d:this.widgetEventPrefix+d).toLowerCase();f=f||{};if(e.originalEvent){for(var c=b.event.props.length,g;c;){g=b.event.props[--c];e[g]=e.originalEvent[g]}}this.element.trigger(e,f);return !(b.isFunction(h)&&h.call(this.element[0],e,f)===false||e.isDefaultPrevented())}}})(jQuery);;/*!
 * jQuery UI Mouse 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Mouse
 *
 * Depends:
 *	jquery.ui.widget.js
 *//*
 * jQuery UI Mouse 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Mouse
 *
 * Depends:
 *	jquery.ui.widget.js
 */
(function(a){a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(c){return b._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(b._preventClickEvent){b._preventClickEvent=false;c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(d){d.originalEvent=d.originalEvent||{};if(d.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(d));this._mouseDownEvent=d;var c=this,e=(d.which==1),b=(typeof this.options.cancel=="string"?a(d.target).parents().add(d.target).filter(this.options.cancel).length:false);if(!e||b||!this._mouseCapture(d)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(d)!==false);if(!this._mouseStarted){d.preventDefault();return true}}this._mouseMoveDelegate=function(f){return c._mouseMove(f)};this._mouseUpDelegate=function(f){return c._mouseUp(f)};a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(a.browser.safari||d.preventDefault());d.originalEvent.mouseHandled=true;return true},_mouseMove:function(b){if(a.browser.msie&&!b.button){return this._mouseUp(b)}if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,b)!==false);(this._mouseStarted?this._mouseDrag(b):this._mouseUp(b))}return !this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(b.target==this._mouseDownEvent.target);this._mouseStop(b)}return false},_mouseDistanceMet:function(b){return(Math.max(Math.abs(this._mouseDownEvent.pageX-b.pageX),Math.abs(this._mouseDownEvent.pageY-b.pageY))>=this.options.distance)},_mouseDelayMet:function(b){return this.mouseDelayMet},_mouseStart:function(b){},_mouseDrag:function(b){},_mouseStop:function(b){},_mouseCapture:function(b){return true}})})(jQuery);;/*
 * jQuery UI Position 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Position
 */(function(f){f.ui=f.ui||{};var c=/left|center|right/,e="center",d=/top|center|bottom/,g="center",a=f.fn.position,b=f.fn.offset;f.fn.position=function(i){if(!i||!i.of){return a.apply(this,arguments)}i=f.extend({},i);var l=f(i.of),n=(i.collision||"flip").split(" "),m=i.offset?i.offset.split(" "):[0,0],k,h,j;if(i.of.nodeType===9){k=l.width();h=l.height();j={top:0,left:0}}else{if(i.of.scrollTo&&i.of.document){k=l.width();h=l.height();j={top:l.scrollTop(),left:l.scrollLeft()}}else{if(i.of.preventDefault){i.at="left top";k=h=0;j={top:i.of.pageY,left:i.of.pageX}}else{k=l.outerWidth();h=l.outerHeight();j=l.offset()}}}f.each(["my","at"],function(){var o=(i[this]||"").split(" ");if(o.length===1){o=c.test(o[0])?o.concat([g]):d.test(o[0])?[e].concat(o):[e,g]}o[0]=c.test(o[0])?o[0]:e;o[1]=d.test(o[1])?o[1]:g;i[this]=o});if(n.length===1){n[1]=n[0]}m[0]=parseInt(m[0],10)||0;if(m.length===1){m[1]=m[0]}m[1]=parseInt(m[1],10)||0;if(i.at[0]==="right"){j.left+=k}else{if(i.at[0]===e){j.left+=k/2}}if(i.at[1]==="bottom"){j.top+=h}else{if(i.at[1]===g){j.top+=h/2}}j.left+=m[0];j.top+=m[1];return this.each(function(){var r=f(this),q=r.outerWidth(),p=r.outerHeight(),o=f.extend({},j);if(i.my[0]==="right"){o.left-=q}else{if(i.my[0]===e){o.left-=q/2}}if(i.my[1]==="bottom"){o.top-=p}else{if(i.my[1]===g){o.top-=p/2}}f.each(["left","top"],function(t,s){if(f.ui.position[n[t]]){f.ui.position[n[t]][s](o,{targetWidth:k,targetHeight:h,elemWidth:q,elemHeight:p,offset:m,my:i.my,at:i.at})}});if(f.fn.bgiframe){r.bgiframe()}r.offset(f.extend(o,{using:i.using}))})};f.ui.position={fit:{left:function(h,i){var k=f(window),j=h.left+i.elemWidth-k.width()-k.scrollLeft();h.left=j>0?h.left-j:Math.max(0,h.left)},top:function(h,i){var k=f(window),j=h.top+i.elemHeight-k.height()-k.scrollTop();h.top=j>0?h.top-j:Math.max(0,h.top)}},flip:{left:function(i,j){if(j.at[0]==="center"){return}var l=f(window),k=i.left+j.elemWidth-l.width()-l.scrollLeft(),h=j.my[0]==="left"?-j.elemWidth:j.my[0]==="right"?j.elemWidth:0,m=-2*j.offset[0];i.left+=i.left<0?h+j.targetWidth+m:k>0?h-j.targetWidth+m:0},top:function(i,k){if(k.at[1]==="center"){return}var m=f(window),l=i.top+k.elemHeight-m.height()-m.scrollTop(),h=k.my[1]==="top"?-k.elemHeight:k.my[1]==="bottom"?k.elemHeight:0,j=k.at[1]==="top"?k.targetHeight:-k.targetHeight,n=-2*k.offset[1];i.top+=i.top<0?h+k.targetHeight+n:l>0?h+j+n:0}}};if(!f.offset.setOffset){f.offset.setOffset=function(l,i){if(/static/.test(f.curCSS(l,"position"))){l.style.position="relative"}var k=f(l),n=k.offset(),h=parseInt(f.curCSS(l,"top",true),10)||0,m=parseInt(f.curCSS(l,"left",true),10)||0,j={top:(i.top-n.top)+h,left:(i.left-n.left)+m};if("using" in i){i.using.call(l,j)}else{k.css(j)}};f.fn.offset=function(h){var i=this[0];if(!i||!i.ownerDocument){return null}if(h){return this.each(function(){f.offset.setOffset(this,h)})}return b.call(this)}}}(jQuery));;/*
 * jQuery UI Draggable 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Draggables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */(function(a){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper=="original"&&!(/^(?:r|a|f)/).test(this.element.css("position"))){this.element[0].style.position="relative"}(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit()},destroy:function(){if(!this.element.data("draggable")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);this._cacheHelperProportions();if(a.ui.ddmanager){a.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;(c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt));if(c.containment){this._setContainment()}if(this._trigger("start",b)===false){this._clear();return false}this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();if(this._trigger("drag",b,c)===false){this._mouseUp({});return false}this.position=c.position}if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if(!this.element[0]||!this.element[0].parentNode){return false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){if(b._trigger("stop",c)!==false){b._clear()}})}else{if(this._trigger("stop",c)!==false){this._clear()}}return false},cancel:function(){if(this.helper.is(".ui-draggable-dragging")){this._mouseUp({})}else{this._clear()}return this},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(typeof b=="string"){b=b.split(" ")}if(a.isArray(b)){b={left:+b[0],top:+b[1]||0}}if("left" in b){this.offset.click.left=b.left+this.margins.left}if("right" in b){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if("top" in b){this.offset.click.top=b.top+this.margins.top}if("bottom" in b){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval){this.helper.remove()}this.helper=null;this.cancelHelperRemoval=false},_trigger:function(b,c,d){d=d||this._uiHash();a.ui.plugin.call(this,b,[c,d]);if(b=="drag"){this.positionAbs=this._convertPositionTo("absolute")}return a.Widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(b){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});a.extend(a.ui.draggable,{version:"1.8"});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,e){var d=a(this).data("draggable"),f=d.options,b=a.extend({},e,{item:d.element});d.sortables=[];a(f.connectToSortable).each(function(){var g=a.data(this,"sortable");if(g&&!g.options.disabled){d.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",c,b)}})},stop:function(c,e){var d=a(this).data("draggable"),b=a.extend({},e,{item:d.element});a.each(d.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;d.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert){this.instance.options.revert=true}this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;if(d.options.helper=="original"){this.instance.currentItem.css({top:"auto",left:"auto"})}}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",c,b)}})},drag:function(c,f){var e=a(this).data("draggable"),b=this;var d=function(i){var n=this.offset.click.top,m=this.offset.click.left;var g=this.positionAbs.top,k=this.positionAbs.left;var j=i.height,l=i.width;var p=i.top,h=i.left;return a.ui.isOver(g+n,k+m,p,h,j,l)};a.each(e.sortables,function(g){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(b).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return f.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}if(this.instance.currentItem){this.instance._mouseDrag(c)}}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder){this.instance.placeholder.remove()}e._trigger("fromSortable",c);e.dropped=false}}})}});a.ui.plugin.add("draggable","cursor",{start:function(c,d){var b=a("body"),e=a(this).data("draggable").options;if(b.css("cursor")){e._cursor=b.css("cursor")}b.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._cursor){a("body").css("cursor",d._cursor)}}});a.ui.plugin.add("draggable","iframeFix",{start:function(b,c){var d=a(this).data("draggable").options;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop+f.scrollSpeed}else{if(d.pageY-c.overflowOffset.top<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop-f.scrollSpeed}}}if(!f.axis||f.axis!="y"){if((c.overflowOffset.left+c.scrollParent[0].offsetWidth)-d.pageX<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft+f.scrollSpeed}else{if(d.pageX-c.overflowOffset.left<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft-f.scrollSpeed}}}}else{if(!f.axis||f.axis!="x"){if(d.pageY-a(document).scrollTop()<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-f.scrollSpeed)}else{if(a(window).height()-(d.pageY-a(document).scrollTop())<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+f.scrollSpeed)}}}if(!f.axis||f.axis!="y"){if(d.pageX-a(document).scrollLeft()<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-f.scrollSpeed)}else{if(a(window).width()-(d.pageX-a(document).scrollLeft())<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+f.scrollSpeed)}}}}if(b!==false&&a.ui.ddmanager&&!f.dropBehaviour){a.ui.ddmanager.prepareOffsets(c,d)}}});a.ui.plugin.add("draggable","snap",{start:function(c,d){var b=a(this).data("draggable"),e=b.options;b.snapElements=[];a(e.snap.constructor!=String?(e.snap.items||":data(draggable)"):e.snap).each(function(){var g=a(this);var f=g.offset();if(this!=b.element[0]){b.snapElements.push({item:this,width:g.outerWidth(),height:g.outerHeight(),top:f.top,left:f.left})}})},drag:function(u,p){var g=a(this).data("draggable"),q=g.options;var y=q.snapTolerance;var x=p.offset.left,w=x+g.helperProportions.width,f=p.offset.top,e=f+g.helperProportions.height;for(var v=g.snapElements.length-1;v>=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y<x&&x<n+y&&m-y<f&&f<A+y)||(s-y<x&&x<n+y&&m-y<e&&e<A+y)||(s-y<w&&w<n+y&&m-y<f&&f<A+y)||(s-y<w&&w<n+y&&m-y<e&&e<A+y))){if(g.snapElements[v].snapping){(g.options.snap.release&&g.options.snap.release.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=false;continue}if(q.snapMode!="inner"){var c=Math.abs(m-e)<=y;var z=Math.abs(A-f)<=y;var j=Math.abs(s-w)<=y;var k=Math.abs(n-x)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m-g.helperProportions.height,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s-g.helperProportions.width}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n}).left-g.margins.left}}var h=(c||z||j||k);if(q.snapMode!="outer"){var c=Math.abs(m-f)<=y;var z=Math.abs(A-e)<=y;var j=Math.abs(s-x)<=y;var k=Math.abs(n-w)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A-g.helperProportions.height,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n-g.helperProportions.width}).left-g.margins.left}}if(!g.snapElements[v].snapping&&(c||z||j||k||h)){(g.options.snap.snap&&g.options.snap.snap.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=(c||z||j||k||h)}}});a.ui.plugin.add("draggable","stack",{start:function(c,d){var f=a(this).data("draggable").options;var e=a.makeArray(a(f.stack)).sort(function(h,g){return(parseInt(a(h).css("zIndex"),10)||0)-(parseInt(a(g).css("zIndex"),10)||0)});if(!e.length){return}var b=parseInt(e[0].style.zIndex)||0;a(e).each(function(g){this.style.zIndex=b+g});this[0].style.zIndex=b+e.length}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("zIndex")){e._zIndex=b.css("zIndex")}b.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._zIndex){a(c.helper).css("zIndex",d._zIndex)}}})})(jQuery);;/*
 * jQuery UI Droppable 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Droppables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 *	jquery.ui.mouse.js
 *	jquery.ui.draggable.js
 */(function(a){a.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var c=this.options,b=c.accept;this.isover=0;this.isout=1;this.accept=a.isFunction(b)?b:function(e){return e.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[c.scope]=a.ui.ddmanager.droppables[c.scope]||[];a.ui.ddmanager.droppables[c.scope].push(this);(c.addClasses&&this.element.addClass("ui-droppable"))},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++){if(b[c]==this){b.splice(c,1)}}this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(b,c){if(b=="accept"){this.accept=a.isFunction(c)?c:function(e){return e.is(c)}}a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.addClass(this.options.activeClass)}(b&&this._trigger("activate",c,this.ui(b)))},_deactivate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}(b&&this._trigger("deactivate",c,this.ui(b)))},_over:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.addClass(this.options.hoverClass)}this._trigger("over",c,this.ui(b))}},_out:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("out",c,this.ui(b))}},_drop:function(c,d){var b=d||a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return false}var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var f=a.data(this,"droppable");if(f.options.greedy&&!f.options.disabled&&f.options.scope==b.options.scope&&f.accept.call(f.element[0],(b.currentItem||b.element))&&a.ui.intersect(b,a.extend(f,{offset:f.element.offset()}),f.options.tolerance)){e=true;return false}});if(e){return false}if(this.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("drop",c,this.ui(b));return this.element}return false},ui:function(b){return{draggable:(b.currentItem||b.element),helper:b.helper,position:b.position,offset:b.positionAbs}}});a.extend(a.ui.droppable,{version:"1.8"});a.ui.intersect=function(q,j,o){if(!j.offset){return false}var e=(q.positionAbs||q.position.absolute).left,d=e+q.helperProportions.width,n=(q.positionAbs||q.position.absolute).top,m=n+q.helperProportions.height;var g=j.offset.left,c=g+j.proportions.width,p=j.offset.top,k=p+j.proportions.height;switch(o){case"fit":return(g<e&&d<c&&p<n&&m<k);break;case"intersect":return(g<e+(q.helperProportions.width/2)&&d-(q.helperProportions.width/2)<c&&p<n+(q.helperProportions.height/2)&&m-(q.helperProportions.height/2)<k);break;case"pointer":var h=((q.positionAbs||q.position.absolute).left+(q.clickOffset||q.offset.click).left),i=((q.positionAbs||q.position.absolute).top+(q.clickOffset||q.offset.click).top),f=a.ui.isOver(i,h,p,g,j.proportions.height,j.proportions.width);return f;break;case"touch":return((n>=p&&n<=k)||(m>=p&&m<=k)||(n<p&&m>k))&&((e>=g&&e<=c)||(d>=g&&d<=c)||(e<g&&d>c));break;default:return false;break}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,g){var b=a.ui.ddmanager.droppables[e.options.scope]||[];var f=g?g.type:null;var h=(e.currentItem||e.element).find(":data(droppable)").andSelf();droppablesLoop:for(var d=0;d<b.length;d++){if(b[d].options.disabled||(e&&!b[d].accept.call(b[d].element[0],(e.currentItem||e.element)))){continue}for(var c=0;c<h.length;c++){if(h[c]==b[d].element[0]){b[d].proportions.height=0;continue droppablesLoop}}b[d].visible=b[d].element.css("display")!="none";if(!b[d].visible){continue}b[d].offset=b[d].element.offset();b[d].proportions={width:b[d].element[0].offsetWidth,height:b[d].element[0].offsetHeight};if(f=="mousedown"){b[d]._activate.call(b[d],g)}}},drop:function(b,c){var d=false;a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){if(!this.options){return}if(!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)){d=d||this._drop.call(this,c)}if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],(b.currentItem||b.element))){this.isout=1;this.isover=0;this._deactivate.call(this,c)}});return d},drag:function(b,c){if(b.options.refreshPositions){a.ui.ddmanager.prepareOffsets(b,c)}a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){if(this.options.disabled||this.greedyChild||!this.visible){return}var e=a.ui.intersect(b,this,this.options.tolerance);var g=!e&&this.isover==1?"isout":(e&&this.isover==0?"isover":null);if(!g){return}var f;if(this.options.greedy){var d=this.element.parents(":data(droppable):eq(0)");if(d.length){f=a.data(d[0],"droppable");f.greedyChild=(g=="isover"?1:0)}}if(f&&g=="isover"){f.isover=0;f.isout=1;f._out.call(f,c)}this[g]=1;this[g=="isout"?"isover":"isout"]=0;this[g=="isover"?"_over":"_out"].call(this,c);if(f&&g=="isout"){f.isout=0;f.isover=1;f._over.call(f,c)}})}}})(jQuery);;/*
 * jQuery UI Resizable 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Resizables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */(function(c){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.after(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement);return this},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return !this.options.disabled&&f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8"});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),h=d.options;var g=function(i){c(i).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(h.alsoResize)=="object"&&!h.alsoResize.parentNode){if(h.alsoResize.length){h.alsoResize=h.alsoResize[0];g(h.alsoResize)}else{c.each(h.alsoResize,function(i,j){g(i)})}}else{g(h.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;/*
 * jQuery UI Selectable 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Selectables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */(function(a){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var b=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]);c.each(function(){var d=a(this);var e=d.offset();a.data(this,"selectable-item",{element:this,$element:d,left:e.left,top:e.top,right:e.left+d.outerWidth(),bottom:e.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a(document.createElement("div")).css({border:"1px dotted black"}).addClass("ui-selectable-helper")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(d){var b=this;this.opos=[d.pageX,d.pageY];if(this.options.disabled){return}var c=this.options;this.selectees=a(c.filter,this.element[0]);this._trigger("start",d);a(c.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:d.clientX,top:d.clientY,width:0,height:0});if(c.autoRefresh){this.refresh()}this.selectees.filter(".ui-selected").each(function(){var e=a.data(this,"selectable-item");e.startselected=true;if(!d.metaKey){e.$element.removeClass("ui-selected");e.selected=false;e.$element.addClass("ui-unselecting");e.unselecting=true;b._trigger("unselecting",d,{unselecting:e.element})}});a(d.target).parents().andSelf().each(function(){var e=a.data(this,"selectable-item");if(e){e.$element.removeClass("ui-unselecting").addClass("ui-selecting");e.unselecting=false;e.selecting=true;e.selected=true;b._trigger("selecting",d,{selecting:e.element});return false}})},_mouseDrag:function(i){var c=this;this.dragged=true;if(this.options.disabled){return}var e=this.options;var d=this.opos[0],h=this.opos[1],b=i.pageX,g=i.pageY;if(d>b){var f=b;b=d;d=f}if(h>g){var f=g;g=h;h=f}this.helper.css({left:d,top:h,width:b-d,height:g-h});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!j||j.element==c.element[0]){return}var k=false;if(e.tolerance=="touch"){k=(!(j.left>b||j.right<d||j.top>g||j.bottom<h))}else{if(e.tolerance=="fit"){k=(j.left>d&&j.right<b&&j.top>h&&j.bottom<g)}}if(k){if(j.selected){j.$element.removeClass("ui-selected");j.selected=false}if(j.unselecting){j.$element.removeClass("ui-unselecting");j.unselecting=false}if(!j.selecting){j.$element.addClass("ui-selecting");j.selecting=true;c._trigger("selecting",i,{selecting:j.element})}}else{if(j.selecting){if(i.metaKey&&j.startselected){j.$element.removeClass("ui-selecting");j.selecting=false;j.$element.addClass("ui-selected");j.selected=true}else{j.$element.removeClass("ui-selecting");j.selecting=false;if(j.startselected){j.$element.addClass("ui-unselecting");j.unselecting=true}c._trigger("unselecting",i,{unselecting:j.element})}}if(j.selected){if(!i.metaKey&&!j.startselected){j.$element.removeClass("ui-selected");j.selected=false;j.$element.addClass("ui-unselecting");j.unselecting=true;c._trigger("unselecting",i,{unselecting:j.element})}}}});return false},_mouseStop:function(d){var b=this;this.dragged=false;var c=this.options;a(".ui-unselecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-unselecting");e.unselecting=false;e.startselected=false;b._trigger("unselected",d,{unselected:e.element})});a(".ui-selecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-selecting").addClass("ui-selected");e.selecting=false;e.selected=true;e.startselected=true;b._trigger("selected",d,{selected:e.element})});this._trigger("stop",d);this.helper.remove();return false}});a.extend(a.ui.selectable,{version:"1.8"})})(jQuery);;/*
 * jQuery UI Sortable 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Sortables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */(function(a){a.widget("ui.sortable",a.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1000},_create:function(){var b=this.options;this.containerCache={};this.element.addClass("ui-sortable");this.refresh();this.floating=this.items.length?(/left|right/).test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--){this.items[b].item.removeData("sortable-item")}return this},_mouseCapture:function(e,f){if(this.reverting){return false}if(this.options.disabled||this.options.type=="static"){return false}this._refreshItems(e);var d=null,c=this,b=a(e.target).parents().each(function(){if(a.data(this,"sortable-item")==c){d=a(this);return false}});if(a.data(e.target,"sortable-item")==c){d=a(e.target)}if(!d){return false}if(this.options.handle&&!f){var g=false;a(this.options.handle,d).find("*").andSelf().each(function(){if(this==e.target){g=true}});if(!g){return false}}this.currentItem=d;this._removeCurrentsFromItems();return true},_mouseStart:function(e,f,b){var g=this.options,c=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(e);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(e);this.originalPageX=e.pageX;this.originalPageY=e.pageY;(g.cursorAt&&this._adjustOffsetFromHelper(g.cursorAt));this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};if(this.helper[0]!=this.currentItem[0]){this.currentItem.hide()}this._createPlaceholder();if(g.containment){this._setContainment()}if(g.cursor){if(a("body").css("cursor")){this._storedCursor=a("body").css("cursor")}a("body").css("cursor",g.cursor)}if(g.opacity){if(this.helper.css("opacity")){this._storedOpacity=this.helper.css("opacity")}this.helper.css("opacity",g.opacity)}if(g.zIndex){if(this.helper.css("zIndex")){this._storedZIndex=this.helper.css("zIndex")}this.helper.css("zIndex",g.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){this.overflowOffset=this.scrollParent.offset()}this._trigger("start",e,this._uiHash());if(!this._preserveHelperProportions){this._cacheHelperProportions()}if(!b){for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("activate",e,c._uiHash(this))}}if(a.ui.ddmanager){a.ui.ddmanager.current=this}if(a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,e)}this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(e);return true},_mouseDrag:function(f){this.position=this._generatePosition(f);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs}if(this.options.scroll){var g=this.options,b=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-f.pageY<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop+g.scrollSpeed}else{if(f.pageY-this.overflowOffset.top<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop-g.scrollSpeed}}if((this.overflowOffset.left+this.scrollParent[0].offsetWidth)-f.pageX<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft+g.scrollSpeed}else{if(f.pageX-this.overflowOffset.left<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft-g.scrollSpeed}}}else{if(f.pageY-a(document).scrollTop()<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-g.scrollSpeed)}else{if(a(window).height()-(f.pageY-a(document).scrollTop())<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+g.scrollSpeed)}}if(f.pageX-a(document).scrollLeft()<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-g.scrollSpeed)}else{if(a(window).width()-(f.pageX-a(document).scrollLeft())<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+g.scrollSpeed)}}}if(b!==false&&a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,f)}}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d],c=e.item[0],h=this._intersectsWithPointer(e);if(!h){continue}if(c!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=c&&!a.ui.contains(this.placeholder[0],c)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],c):true)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e)){this._rearrange(f,e)}else{break}this._trigger("change",f,this._uiHash());break}}this._contactContainers(f);if(a.ui.ddmanager){a.ui.ddmanager.drag(this,f)}this._trigger("sort",f,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(!c){return}if(a.ui.ddmanager&&!this.options.dropBehaviour){a.ui.ddmanager.drop(this,c)}if(this.options.revert){var b=this;var e=b.placeholder.offset();b.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-b.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-b.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){b._clear(c)})}else{this._clear(c,d)}return false},cancel:function(){var b=this;if(this.dragging){this._mouseUp();if(this.options.helper=="original"){this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,b._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,b._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder[0].parentNode){this.placeholder[0].parentNode.removeChild(this.placeholder[0])}if(this.options.helper!="original"&&this.helper&&this.helper[0].parentNode){this.helper.remove()}a.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});if(this.domPosition.prev){a(this.domPosition.prev).after(this.currentItem)}else{a(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};a(b).each(function(){var e=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||(/(.+)[-=_](.+)/));if(e){c.push((d.key||e[1]+"[]")+"="+(d.key&&d.expression?e[1]:e[2]))}});return c.join("&")},toArray:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};b.each(function(){c.push(a(d.item||this).attr(d.attribute||"id")||"")});return c},_intersectsWith:function(m){var e=this.positionAbs.left,d=e+this.helperProportions.width,k=this.positionAbs.top,j=k+this.helperProportions.height;var f=m.left,c=f+m.width,n=m.top,i=n+m.height;var o=this.offset.click.top,h=this.offset.click.left;var g=(k+o)>n&&(k+o)<i&&(e+h)>f&&(e+h)<c;if(this.options.tolerance=="pointer"||this.options.forcePointerForContainers||(this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>m[this.floating?"width":"height"])){return g}else{return(f<e+(this.helperProportions.width/2)&&d-(this.helperProportions.width/2)<c&&n<k+(this.helperProportions.height/2)&&j-(this.helperProportions.height/2)<i)}},_intersectsWithPointer:function(d){var e=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top,d.height),c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left,d.width),g=e&&c,b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(!g){return false}return this.floating?(((f&&f=="right")||b=="down")?2:1):(b&&(b=="down"?2:1))},_intersectsWithSides:function(e){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+(e.height/2),e.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+(e.width/2),e.width),b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(this.floating&&f){return((f=="right"&&d)||(f=="left"&&!d))}else{return b&&((b=="down"&&c)||(b=="up"&&!c))}},_getDragVerticalDirection:function(){var b=this.positionAbs.top-this.lastPositionAbs.top;return b!=0&&(b>0?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-this.lastPositionAbs.left;return b!=0&&(b>0?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions();return this},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(b){var l=this;var g=[];var e=[];var h=this._connectWith();if(h&&b){for(var d=h.length-1;d>=0;d--){var k=a(h[d]);for(var c=k.length-1;c>=0;c--){var f=a.data(k[c],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element):a(f.options.items,f.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),f])}}}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(var d=e.length-1;d>=0;d--){e[d][0].each(function(){g.push(this)})}return a(g)},_removeCurrentsFromItems:function(){var d=this.currentItem.find(":data(sortable-item)");for(var c=0;c<this.items.length;c++){for(var b=0;b<d.length;b++){if(d[b]==this.items[c].item[0]){this.items.splice(c,1)}}}},_refreshItems:function(b){this.items=[];this.containers=[this];var h=this.items;var p=this;var f=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]];var l=this._connectWith();if(l){for(var e=l.length-1;e>=0;e--){var m=a(l[e]);for(var d=m.length-1;d>=0;d--){var g=a.data(m[d],"sortable");if(g&&g!=this&&!g.options.disabled){f.push([a.isFunction(g.options.items)?g.options.items.call(g.element[0],b,{item:this.currentItem}):a(g.options.items,g.element),g]);this.containers.push(g)}}}}for(var e=f.length-1;e>=0;e--){var k=f[e][1];var c=f[e][0];for(var d=0,n=c.length;d<n;d++){var o=a(c[d]);o.data("sortable-item",k);h.push({item:o,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){if(this.offsetParent&&this.helper){this.offset.parent=this._getParentOffset()}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d];var c=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!b){e.width=c.outerWidth();e.height=c.outerHeight()}var f=c.offset();e.left=f.left;e.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this)}else{for(var d=this.containers.length-1;d>=0;d--){var f=this.containers[d].element.offset();this.containers[d].containerCache.left=f.left;this.containers[d].containerCache.top=f.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}}return this},_createPlaceholder:function(d){var b=d||this,e=b.options;if(!e.placeholder||e.placeholder.constructor==String){var c=e.placeholder;e.placeholder={element:function(){var f=a(document.createElement(b.currentItem[0].nodeName)).addClass(c||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!c){f.style.visibility="hidden"}return f},update:function(f,g){if(c&&!e.forcePlaceholderSize){return}if(!g.height()){g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10))}if(!g.width()){g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=a(e.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);e.placeholder.update(b,b.placeholder)},_contactContainers:function(b){var d=null,k=null;for(var f=this.containers.length-1;f>=0;f--){if(a.ui.contains(this.currentItem[0],this.containers[f].element[0])){continue}if(this._intersectsWith(this.containers[f].containerCache)){if(d&&a.ui.contains(this.containers[f].element[0],d.element[0])){continue}d=this.containers[f];k=f}else{if(this.containers[f].containerCache.over){this.containers[f]._trigger("out",b,this._uiHash(this));this.containers[f].containerCache.over=0}}}if(!d){return}if(this.containers.length===1){this.containers[k]._trigger("over",b,this._uiHash(this));this.containers[k].containerCache.over=1}else{if(this.currentContainer!=this.containers[k]){var h=10000;var g=null;var c=this.positionAbs[this.containers[k].floating?"left":"top"];for(var e=this.items.length-1;e>=0;e--){if(!a.ui.contains(this.containers[k].element[0],this.items[e].item[0])){continue}var l=this.items[e][this.containers[k].floating?"left":"top"];if(Math.abs(l-c)<h){h=Math.abs(l-c);g=this.items[e]}}if(!g&&!this.options.dropOnEmpty){return}this.currentContainer=this.containers[k];g?this._rearrange(b,g,null,true):this._rearrange(b,null,this.containers[k].element,true);this._trigger("change",b,this._uiHash());this.containers[k]._trigger("change",b,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[k]._trigger("over",b,this._uiHash(this));this.containers[k].containerCache.over=1}}},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c,this.currentItem])):(d.helper=="clone"?this.currentItem.clone():this.currentItem);if(!b.parents("body").length){a(d.appendTo!="parent"?d.appendTo:this.currentItem[0].parentNode)[0].appendChild(b[0])}if(b[0]==this.currentItem[0]){this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}}if(b[0].style.width==""||d.forceHelperSize){b.width(this.currentItem.width())}if(b[0].style.height==""||d.forceHelperSize){b.height(this.currentItem.height())}return b},_adjustOffsetFromHelper:function(b){if(typeof b=="string"){b=b.split(" ")}if(a.isArray(b)){b={left:+b[0],top:+b[1]||0}}if("left" in b){this.offset.click.left=b.left+this.margins.left}if("right" in b){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if("top" in b){this.offset.click.top=b.top+this.margins.top}if("bottom" in b){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.currentItem.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.currentItem.css("marginLeft"),10)||0),top:(parseInt(this.currentItem.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)){var c=a(e.containment)[0];var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_rearrange:function(g,f,c,e){c?c[0].appendChild(this.placeholder[0]):f.item[0].parentNode.insertBefore(this.placeholder[0],(this.direction=="down"?f.item[0]:f.item[0].nextSibling));this.counter=this.counter?++this.counter:1;var d=this,b=this.counter;window.setTimeout(function(){if(b==d.counter){d.refreshPositions(!e)}},0)},_clear:function(d,e){this.reverting=false;var f=[],b=this;if(!this._noFinalSort&&this.currentItem[0].parentNode){this.placeholder.before(this.currentItem)}this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var c in this._storedCSS){if(this._storedCSS[c]=="auto"||this._storedCSS[c]=="static"){this._storedCSS[c]=""}}this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}if(this.fromOutside&&!e){f.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))})}if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!e){f.push(function(g){this._trigger("update",g,this._uiHash())})}if(!a.ui.contains(this.element[0],this.currentItem[0])){if(!e){f.push(function(g){this._trigger("remove",g,this._uiHash())})}for(var c=this.containers.length-1;c>=0;c--){if(a.ui.contains(this.containers[c].element[0],this.currentItem[0])&&!e){f.push((function(g){return function(h){g._trigger("receive",h,this._uiHash(this))}}).call(this,this.containers[c]));f.push((function(g){return function(h){g._trigger("update",h,this._uiHash(this))}}).call(this,this.containers[c]))}}}for(var c=this.containers.length-1;c>=0;c--){if(!e){f.push((function(g){return function(h){g._trigger("deactivate",h,this._uiHash(this))}}).call(this,this.containers[c]))}if(this.containers[c].containerCache.over){f.push((function(g){return function(h){g._trigger("out",h,this._uiHash(this))}}).call(this,this.containers[c]));this.containers[c].containerCache.over=0}}if(this._storedCursor){a("body").css("cursor",this._storedCursor)}if(this._storedOpacity){this.helper.css("opacity",this._storedOpacity)}if(this._storedZIndex){this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex)}this.dragging=false;if(this.cancelHelperRemoval){if(!e){this._trigger("beforeStop",d,this._uiHash());for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}return false}if(!e){this._trigger("beforeStop",d,this._uiHash())}this.placeholder[0].parentNode.removeChild(this.placeholder[0]);if(this.helper[0]!=this.currentItem[0]){this.helper.remove()}this.helper=null;if(!e){for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){if(a.Widget.prototype._trigger.apply(this,arguments)===false){this.cancel()}},_uiHash:function(c){var b=c||this;return{helper:b.helper,placeholder:b.placeholder||a([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:c?c.element:null}}});a.extend(a.ui.sortable,{version:"1.8"})})(jQuery);;/*
 * jQuery UI Accordion 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Accordion
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 */(function(a){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()==location.href.toLowerCase()}},_create:function(){var d=this.options,b=this;this.running=0;this.element.addClass("ui-accordion ui-widget ui-helper-reset");if(this.element[0].nodeName=="UL"){this.element.children("li").addClass("ui-accordion-li-fix")}this.headers=this.element.find(d.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){a(this).removeClass("ui-state-focus")});this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(d.navigation){var c=this.element.find("a").filter(d.navigationFilter);if(c.length){var e=c.closest(".ui-accordion-header");if(e.length){this.active=e}else{this.active=c.closest(".ui-accordion-content").prev()}}}this.active=this._findActive(this.active||d.active).toggleClass("ui-state-default").toggleClass("ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");this.active.next().addClass("ui-accordion-content-active");this._createIcons();if(a.browser.msie){this.element.find("a").css("zoom","1")}this.resize();this.element.attr("role","tablist");this.headers.attr("role","tab").bind("keydown",function(f){return b._keydown(f)}).next().attr("role","tabpanel");this.headers.not(this.active||"").attr("aria-expanded","false").attr("tabIndex","-1").next().hide();if(!this.active.length){this.headers.eq(0).attr("tabIndex","0")}else{this.active.attr("aria-expanded","true").attr("tabIndex","0")}if(!a.browser.safari){this.headers.find("a").attr("tabIndex","-1")}if(d.event){this.headers.bind((d.event)+".accordion",function(f){b._clickHandler.call(b,f,this);f.preventDefault()})}},_createIcons:function(){var b=this.options;if(b.icons){a("<span/>").addClass("ui-icon "+b.icons.header).prependTo(this.headers);this.active.find(".ui-icon").toggleClass(b.icons.header).toggleClass(b.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var c=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role").unbind(".accordion").removeData("accordion");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabindex");this.headers.find("a").removeAttr("tabindex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active");if(c.autoHeight||c.fillHeight){b.css("height","")}return this},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);if(b=="active"){this.activate(c)}if(b=="icons"){this._destroyIcons();if(c){this._createIcons()}}},_keydown:function(e){var g=this.options,f=a.ui.keyCode;if(g.disabled||e.altKey||e.ctrlKey){return}var d=this.headers.length;var b=this.headers.index(e.target);var c=false;switch(e.keyCode){case f.RIGHT:case f.DOWN:c=this.headers[(b+1)%d];break;case f.LEFT:case f.UP:c=this.headers[(b-1+d)%d];break;case f.SPACE:case f.ENTER:this._clickHandler({target:e.target},e.target);e.preventDefault()}if(c){a(e.target).attr("tabIndex","-1");a(c).attr("tabIndex","0");c.focus();return false}return true},resize:function(){var d=this.options,c;if(d.fillSpace){if(a.browser.msie){var b=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height();if(a.browser.msie){this.element.parent().css("overflow",b)}this.headers.each(function(){c-=a(this).outerHeight(true)});this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")}else{if(d.autoHeight){c=0;this.headers.next().each(function(){c=Math.max(c,a(this).height())}).height(c)}}return this},activate:function(b){this.options.active=b;var c=this._findActive(b)[0];this._clickHandler({target:c},c);return this},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,f){var d=this.options;if(d.disabled){return}if(!b.target){if(!d.collapsible){return}this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var h=this.active.next(),e={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:h},c=(this.active=a([]));this._toggle(c,h,e);return}var g=a(b.currentTarget||f);var i=g[0]==this.active[0];d.active=d.collapsible&&i?false:a(".ui-accordion-header",this.element).index(g);if(this.running||(!d.collapsible&&i)){return}this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);if(!i){g.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").find(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);g.next().addClass("ui-accordion-content-active")}var c=g.next(),h=this.active.next(),e={options:d,newHeader:i&&d.collapsible?a([]):g,oldHeader:this.active,newContent:i&&d.collapsible?a([]):c,oldContent:h},j=this.headers.index(this.active[0])>this.headers.index(g[0]);this.active=i?a([]):g;this._toggle(c,h,e,i,j);return},_toggle:function(b,i,g,j,k){var d=this.options,m=this;this.toShow=b;this.toHide=i;this.data=g;var c=function(){if(!m){return}return m._completed.apply(m,arguments)};this._trigger("changestart",null,this.data);this.running=i.size()===0?b.size():i.size();if(d.animated){var f={};if(d.collapsible&&j){f={toShow:a([]),toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}else{f={toShow:b,toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}if(!d.proxied){d.proxied=d.animated}if(!d.proxiedDuration){d.proxiedDuration=d.duration}d.animated=a.isFunction(d.proxied)?d.proxied(f):d.proxied;d.duration=a.isFunction(d.proxiedDuration)?d.proxiedDuration(f):d.proxiedDuration;var l=a.ui.accordion.animations,e=d.duration,h=d.animated;if(h&&!l[h]&&!a.easing[h]){h="slide"}if(!l[h]){l[h]=function(n){this.slide(n,{easing:h,duration:e||700})}}l[h](f)}else{if(d.collapsible&&j){b.toggle()}else{i.hide();b.show()}c(true)}i.prev().attr("aria-expanded","false").attr("tabIndex","-1").blur();b.prev().attr("aria-expanded","true").attr("tabIndex","0").focus()},_completed:function(b){var c=this.options;this.running=b?0:--this.running;if(this.running){return}if(c.clearStyle){this.toShow.add(this.toHide).css({height:"",overflow:""})}this.toHide.removeClass("ui-accordion-content-active");this._trigger("change",null,this.data)}});a.extend(a.ui.accordion,{version:"1.8",animations:{slide:function(j,h){j=a.extend({easing:"swing",duration:300},j,h);if(!j.toHide.size()){j.toShow.animate({height:"show"},j);return}if(!j.toShow.size()){j.toHide.animate({height:"hide"},j);return}var c=j.toShow.css("overflow"),g=0,d={},f={},e=["height","paddingTop","paddingBottom"],b;var i=j.toShow;b=i[0].style.width;i.width(parseInt(i.parent().width(),10)-parseInt(i.css("paddingLeft"),10)-parseInt(i.css("paddingRight"),10)-(parseInt(i.css("borderLeftWidth"),10)||0)-(parseInt(i.css("borderRightWidth"),10)||0));a.each(e,function(k,m){f[m]="hide";var l=(""+a.css(j.toShow[0],m)).match(/^([\d+-.]+)(.*)$/);d[m]={value:l[1],unit:l[2]||"px"}});j.toShow.css({height:0,overflow:"hidden"}).show();j.toHide.filter(":hidden").each(j.complete).end().filter(":visible").animate(f,{step:function(k,l){if(l.prop=="height"){g=(l.end-l.start===0)?0:(l.now-l.start)/(l.end-l.start)}j.toShow[0].style[l.prop]=(g*d[l.prop].value)+d[l.prop].unit},duration:j.duration,easing:j.easing,complete:function(){if(!j.autoHeight){j.toShow.css("height","")}j.toShow.css("width",b);j.toShow.css({overflow:c});j.complete()}})},bounceslide:function(b){this.slide(b,{easing:b.down?"easeOutBounce":"swing",duration:b.down?1000:200})}}})})(jQuery);;/*
 * jQuery UI Autocomplete 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Autocomplete
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 *	jquery.ui.position.js
 */(function(a){a.widget("ui.autocomplete",{options:{minLength:1,delay:300},_create:function(){var b=this,c=this.element[0].ownerDocument;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(d){var e=a.ui.keyCode;switch(d.keyCode){case e.PAGE_UP:b._move("previousPage",d);break;case e.PAGE_DOWN:b._move("nextPage",d);break;case e.UP:b._move("previous",d);d.preventDefault();break;case e.DOWN:b._move("next",d);d.preventDefault();break;case e.ENTER:if(b.menu.active){d.preventDefault()}case e.TAB:if(!b.menu.active){return}b.menu.select();break;case e.ESCAPE:b.element.val(b.term);b.close(d);break;case e.SHIFT:case e.CONTROL:case 18:break;default:clearTimeout(b.searching);b.searching=setTimeout(function(){b.search(null,d)},b.options.delay);break}}).bind("focus.autocomplete",function(){b.previous=b.element.val()}).bind("blur.autocomplete",function(d){clearTimeout(b.searching);b.closing=setTimeout(function(){b.close(d)},150)});this._initSource();this.response=function(){return b._response.apply(b,arguments)};this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo("body",c).menu({focus:function(e,f){var d=f.item.data("item.autocomplete");if(false!==b._trigger("focus",null,{item:d})){b.element.val(d.value)}},selected:function(e,f){var d=f.item.data("item.autocomplete");if(false!==b._trigger("select",e,{item:d})){b.element.val(d.value)}b.close(e);b.previous=b.element.val();if(b.element[0]!==c.activeElement){b.element.focus()}},blur:function(d,e){if(b.menu.element.is(":visible")){b.element.val(b.term)}}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");if(a.fn.bgiframe){this.menu.element.bgiframe()}},destroy:function(){this.element.removeClass("ui-autocomplete-input ui-widget ui-widget-content").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();a.Widget.prototype.destroy.call(this)},_setOption:function(b){a.Widget.prototype._setOption.apply(this,arguments);if(b==="source"){this._initSource()}},_initSource:function(){var c,b;if(a.isArray(this.options.source)){c=this.options.source;this.source=function(e,d){var f=new RegExp(a.ui.autocomplete.escapeRegex(e.term),"i");d(a.grep(c,function(g){return f.test(g.label||g.value||g)}))}}else{if(typeof this.options.source==="string"){b=this.options.source;this.source=function(e,d){a.getJSON(b,e,d)}}else{this.source=this.options.source}}},search:function(c,b){c=c!=null?c:this.element.val();if(c.length<this.options.minLength){return this.close(b)}clearTimeout(this.closing);if(this._trigger("search")===false){return}return this._search(c)},_search:function(b){this.term=this.element.addClass("ui-autocomplete-loading").val();this.source({term:b},this.response)},_response:function(b){if(b.length){b=this._normalize(b);this._suggest(b);this._trigger("open")}else{this.close()}this.element.removeClass("ui-autocomplete-loading")},close:function(b){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this._trigger("close",b);this.menu.element.hide();this.menu.deactivate()}if(this.previous!==this.element.val()){this._trigger("change",b)}},_normalize:function(b){if(b.length&&b[0].label&&b[0].value){return b}return a.map(b,function(c){if(typeof c==="string"){return{label:c,value:c}}return a.extend({label:c.label||c.value,value:c.value||c.label},c)})},_suggest:function(b){var c=this.menu.element.empty().zIndex(this.element.zIndex()+1),d,e;this._renderMenu(c,b);this.menu.deactivate();this.menu.refresh();this.menu.element.show().position({my:"left top",at:"left bottom",of:this.element,collision:"none"});d=c.width("").width();e=this.element.width();c.width(Math.max(d,e))},_renderMenu:function(d,c){var b=this;a.each(c,function(e,f){b._renderItem(d,f)})},_renderItem:function(b,c){return a("<li></li>").data("item.autocomplete",c).append("<a>"+c.label+"</a>").appendTo(b)},_move:function(c,b){if(!this.menu.element.is(":visible")){this.search(null,b);return}if(this.menu.first()&&/^previous/.test(c)||this.menu.last()&&/^next/.test(c)){this.element.val(this.term);this.menu.deactivate();return}this.menu[c]()},widget:function(){return this.menu.element}});a.extend(a.ui.autocomplete,{escapeRegex:function(b){return b.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")}})}(jQuery));(function(a){a.widget("ui.menu",{_create:function(){var b=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){c.preventDefault();b.select()});this.refresh()},refresh:function(){var c=this;var b=this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem");b.children("a").addClass("ui-corner-all").attr("tabindex",-1).mouseenter(function(){c.activate(a(this).parent())}).mouseleave(function(){c.deactivate()})},activate:function(d){this.deactivate();if(this.hasScroll()){var e=d.offset().top-this.element.offset().top,b=this.element.attr("scrollTop"),c=this.element.height();if(e<0){this.element.attr("scrollTop",b+e)}else{if(e>c){this.element.attr("scrollTop",b+e-c+d.height())}}}this.active=d.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",null,{item:d})},deactivate:function(){if(!this.active){return}this.active.children("a").removeClass("ui-state-hover").removeAttr("id");this._trigger("blur");this.active=null},next:function(){this.move("next","li:first")},previous:function(){this.move("prev","li:last")},first:function(){return this.active&&!this.active.prev().length},last:function(){return this.active&&!this.active.next().length},move:function(d,c){if(!this.active){this.activate(this.element.children(c));return}var b=this.active[d]();if(b.length){this.activate(b)}else{this.activate(this.element.children(c))}},nextPage:function(){if(this.hasScroll()){if(!this.active||this.last()){this.activate(this.element.children(":first"));return}var d=this.active.offset().top,c=this.element.height(),b=this.element.children("li").filter(function(){var e=a(this).offset().top-d-c+a(this).height();return e<10&&e>-10});if(!b.length){b=this.element.children(":last")}this.activate(b)}else{this.activate(this.element.children(!this.active||this.last()?":first":":last"))}},previousPage:function(){if(this.hasScroll()){if(!this.active||this.first()){this.activate(this.element.children(":last"));return}var c=this.active.offset().top,b=this.element.height();result=this.element.children("li").filter(function(){var d=a(this).offset().top-c+b-a(this).height();return d<10&&d>-10});if(!result.length){result=this.element.children(":first")}this.activate(result)}else{this.activate(this.element.children(!this.active||this.first()?":last":":first"))}},hasScroll:function(){return this.element.height()<this.element.attr("scrollHeight")},select:function(){this._trigger("selected",null,{item:this.active})}})}(jQuery));;/*
 * jQuery UI Button 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Button
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 */(function(f){var d,c="ui-button ui-widget ui-state-default ui-corner-all",b="ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon ui-button-text-only",e=function(g){f(":ui-button",g.target.form).each(function(){var h=f(this).data("button");setTimeout(function(){h.refresh()},1)})},a=function(h){var g=h.name,i=h.form,j=f([]);if(g){if(i){j=f(i).find("[name='"+g+"']")}else{j=f("[name='"+g+"']",h.ownerDocument).filter(function(){return !this.form})}}return j};f.widget("ui.button",{options:{text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",e);this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var g=this,i=this.options,j=this.type==="checkbox"||this.type==="radio",k="ui-state-hover"+(!j?" ui-state-active":""),h="ui-state-focus";if(i.label===null){i.label=this.buttonElement.html()}if(this.element.is(":disabled")){i.disabled=true}this.buttonElement.addClass(c).attr("role","button").bind("mouseenter.button",function(){if(i.disabled){return}f(this).addClass("ui-state-hover");if(this===d){f(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){if(i.disabled){return}f(this).removeClass(k)}).bind("focus.button",function(){f(this).addClass(h)}).bind("blur.button",function(){f(this).removeClass(h)});if(j){this.element.bind("change.button",function(){g.refresh()})}if(this.type==="checkbox"){this.buttonElement.bind("click.button",function(){if(i.disabled){return false}f(this).toggleClass("ui-state-active");g.buttonElement.attr("aria-pressed",g.element[0].checked)})}else{if(this.type==="radio"){this.buttonElement.bind("click.button",function(){if(i.disabled){return false}f(this).addClass("ui-state-active");g.buttonElement.attr("aria-pressed",true);var l=g.element[0];a(l).not(l).map(function(){return f(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)})}else{this.buttonElement.bind("mousedown.button",function(){if(i.disabled){return false}f(this).addClass("ui-state-active");d=this;f(document).one("mouseup",function(){d=null})}).bind("mouseup.button",function(){if(i.disabled){return false}f(this).removeClass("ui-state-active")}).bind("keydown.button",function(l){if(i.disabled){return false}if(l.keyCode==f.ui.keyCode.SPACE||l.keyCode==f.ui.keyCode.ENTER){f(this).addClass("ui-state-active")}}).bind("keyup.button",function(){f(this).removeClass("ui-state-active")});if(this.buttonElement.is("a")){this.buttonElement.keyup(function(l){if(l.keyCode===f.ui.keyCode.SPACE){f(this).click()}})}}}this._setOption("disabled",i.disabled)},_determineButtonType:function(){if(this.element.is(":checkbox")){this.type="checkbox"}else{if(this.element.is(":radio")){this.type="radio"}else{if(this.element.is("input")){this.type="input"}else{this.type="button"}}}if(this.type==="checkbox"||this.type==="radio"){this.buttonElement=this.element.parents().last().find("[for="+this.element.attr("id")+"]");this.element.addClass("ui-helper-hidden-accessible");var g=this.element.is(":checked");if(g){this.buttonElement.addClass("ui-state-active")}this.buttonElement.attr("aria-pressed",g)}else{this.buttonElement=this.element}},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass(c+" "+b).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());if(!this.hasTitle){this.buttonElement.removeAttr("title")}f.Widget.prototype.destroy.call(this)},_setOption:function(g,h){f.Widget.prototype._setOption.apply(this,arguments);if(g==="disabled"){if(h){this.element.attr("disabled",true)}else{this.element.removeAttr("disabled")}}this._resetButton()},refresh:function(){var g=this.element.is(":disabled");if(g!==this.options.disabled){this._setOption("disabled",g)}if(this.type==="radio"){a(this.element[0]).each(function(){if(f(this).is(":checked")){f(this).button("widget").addClass("ui-state-active").attr("aria-pressed",true)}else{f(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",false)}})}else{if(this.type==="checkbox"){if(this.element.is(":checked")){this.buttonElement.addClass("ui-state-active").attr("aria-pressed",true)}else{this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",false)}}}},_resetButton:function(){if(this.type==="input"){if(this.options.label){this.element.val(this.options.label)}return}var j=this.buttonElement,i=f("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(j.empty()).text(),h=this.options.icons,g=h.primary&&h.secondary;if(h.primary||h.secondary){j.addClass("ui-button-text-icon"+(g?"s":""));if(h.primary){j.prepend("<span class='ui-button-icon-primary ui-icon "+h.primary+"'></span>")}if(h.secondary){j.append("<span class='ui-button-icon-secondary ui-icon "+h.secondary+"'></span>")}if(!this.options.text){j.addClass(g?"ui-button-icons-only":"ui-button-icon-only").removeClass("ui-button-text-icons ui-button-text-icon");if(!this.hasTitle){j.attr("title",i)}}}else{j.addClass("ui-button-text-only")}}});f.widget("ui.buttonset",{_create:function(){this.element.addClass("ui-buttonset");this._init()},_init:function(){this.refresh()},_setOption:function(g,h){if(g==="disabled"){this.buttons.button("option",g,h)}f.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(":button, :submit, :reset, :checkbox, :radio, a, :data(button)").filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return f(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return f(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");f.Widget.prototype.destroy.call(this)}})}(jQuery));;/*
 * jQuery UI Dialog 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Dialog
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 *  jquery.ui.button.js
 *	jquery.ui.draggable.js
 *	jquery.ui.mouse.js
 *	jquery.ui.position.js
 *	jquery.ui.resizable.js
 */(function(b){var a="ui-dialog ui-widget ui-widget-content ui-corner-all ";b.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:"center",resizable:true,show:null,stack:true,title:"",width:300,zIndex:1000},_create:function(){this.originalTitle=this.element.attr("title");var k=this,l=k.options,i=l.title||k.originalTitle||"&#160;",d=b.ui.dialog.getTitleId(k.element),j=(k.uiDialog=b("<div></div>")).appendTo(document.body).hide().addClass(a+l.dialogClass).css({zIndex:l.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(m){if(l.closeOnEscape&&m.keyCode&&m.keyCode===b.ui.keyCode.ESCAPE){k.close(m);m.preventDefault()}}).attr({role:"dialog","aria-labelledby":d}).mousedown(function(m){k.moveToTop(false,m)}),f=k.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(j),e=(k.uiDialogTitlebar=b("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(j),h=b('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(m){k.close(m);return false}).appendTo(e),g=(k.uiDialogTitlebarCloseText=b("<span></span>")).addClass("ui-icon ui-icon-closethick").text(l.closeText).appendTo(h),c=b("<span></span>").addClass("ui-dialog-title").attr("id",d).html(i).prependTo(e);if(b.isFunction(l.beforeclose)&&!b.isFunction(l.beforeClose)){l.beforeClose=l.beforeclose}e.find("*").add(e).disableSelection();if(l.draggable&&b.fn.draggable){k._makeDraggable()}if(l.resizable&&b.fn.resizable){k._makeResizable()}k._createButtons(l.buttons);k._isOpen=false;if(b.fn.bgiframe){j.bgiframe()}},_init:function(){if(this.options.autoOpen){this.open()}},destroy:function(){var c=this;if(c.overlay){c.overlay.destroy()}c.uiDialog.hide();c.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");c.uiDialog.remove();if(c.originalTitle){c.element.attr("title",c.originalTitle)}return c},widget:function(){return this.uiDialog},close:function(e){var c=this,d;if(false===c._trigger("beforeClose",e)){return}if(c.overlay){c.overlay.destroy()}c.uiDialog.unbind("keypress.ui-dialog");c._isOpen=false;if(c.options.hide){c.uiDialog.hide(c.options.hide,function(){c._trigger("close",e)})}else{c.uiDialog.hide();c._trigger("close",e)}b.ui.dialog.overlay.resize();if(c.options.modal){d=0;b(".ui-dialog").each(function(){if(this!==c.uiDialog[0]){d=Math.max(d,b(this).css("z-index"))}});b.ui.dialog.maxZ=d}return c},isOpen:function(){return this._isOpen},moveToTop:function(g,f){var c=this,e=c.options,d;if((e.modal&&!g)||(!e.stack&&!e.modal)){return c._trigger("focus",f)}if(e.zIndex>b.ui.dialog.maxZ){b.ui.dialog.maxZ=e.zIndex}if(c.overlay){b.ui.dialog.maxZ+=1;c.overlay.$el.css("z-index",b.ui.dialog.overlay.maxZ=b.ui.dialog.maxZ)}d={scrollTop:c.element.attr("scrollTop"),scrollLeft:c.element.attr("scrollLeft")};b.ui.dialog.maxZ+=1;c.uiDialog.css("z-index",b.ui.dialog.maxZ);c.element.attr(d);c._trigger("focus",f);return c},open:function(){if(this._isOpen){return}var d=this,e=d.options,c=d.uiDialog;d.overlay=e.modal?new b.ui.dialog.overlay(d):null;if(c.next().length){c.appendTo("body")}d._size();d._position(e.position);c.show(e.show);d.moveToTop(true);if(e.modal){c.bind("keypress.ui-dialog",function(h){if(h.keyCode!==b.ui.keyCode.TAB){return}var g=b(":tabbable",this),i=g.filter(":first"),f=g.filter(":last");if(h.target===f[0]&&!h.shiftKey){i.focus(1);return false}else{if(h.target===i[0]&&h.shiftKey){f.focus(1);return false}}})}b([]).add(c.find(".ui-dialog-content :tabbable:first")).add(c.find(".ui-dialog-buttonpane :tabbable:first")).add(c).filter(":first").focus();d._trigger("open");d._isOpen=true;return d},_createButtons:function(f){var e=this,c=false,d=b("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");e.uiDialog.find(".ui-dialog-buttonpane").remove();if(typeof f==="object"&&f!==null){b.each(f,function(){return !(c=true)})}if(c){b.each(f,function(g,i){var h=b('<button type="button"></button>').text(g).click(function(){i.apply(e.element[0],arguments)}).appendTo(d);if(b.fn.button){h.button()}});d.appendTo(e.uiDialog)}},_makeDraggable:function(){var c=this,f=c.options,g=b(document),e;function d(h){return{position:h.position,offset:h.offset}}c.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(h,i){e=f.height==="auto"?"auto":b(this).height();b(this).height(b(this).height()).addClass("ui-dialog-dragging");c._trigger("dragStart",h,d(i))},drag:function(h,i){c._trigger("drag",h,d(i))},stop:function(h,i){f.position=[i.position.left-g.scrollLeft(),i.position.top-g.scrollTop()];b(this).removeClass("ui-dialog-dragging").height(e);c._trigger("dragStop",h,d(i));b.ui.dialog.overlay.resize()}})},_makeResizable:function(h){h=(h===undefined?this.options.resizable:h);var d=this,g=d.options,c=d.uiDialog.css("position"),f=(typeof h==="string"?h:"n,e,s,w,se,sw,ne,nw");function e(i){return{originalPosition:i.originalPosition,originalSize:i.originalSize,position:i.position,size:i.size}}d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:g.maxWidth,maxHeight:g.maxHeight,minWidth:g.minWidth,minHeight:d._minHeight(),handles:f,start:function(i,j){b(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",i,e(j))},resize:function(i,j){d._trigger("resize",i,e(j))},stop:function(i,j){b(this).removeClass("ui-dialog-resizing");g.height=b(this).height();g.width=b(this).width();d._trigger("resizeStop",i,e(j));b.ui.dialog.overlay.resize()}}).css("position",c).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var c=this.options;if(c.height==="auto"){return c.minHeight}else{return Math.min(c.minHeight,c.height)}},_position:function(d){var e=[],f=[0,0],c;d=d||b.ui.dialog.prototype.options.position;if(typeof d==="string"||(typeof d==="object"&&"0" in d)){e=d.split?d.split(" "):[d[0],d[1]];if(e.length===1){e[1]=e[0]}b.each(["left","top"],function(h,g){if(+e[h]===e[h]){f[h]=e[h];e[h]=g}})}else{if(typeof d==="object"){if("left" in d){e[0]="left";f[0]=d.left}else{if("right" in d){e[0]="right";f[0]=-d.right}}if("top" in d){e[1]="top";f[1]=d.top}else{if("bottom" in d){e[1]="bottom";f[1]=-d.bottom}}}}c=this.uiDialog.is(":visible");if(!c){this.uiDialog.show()}this.uiDialog.css({top:0,left:0}).position({my:e.join(" "),at:e.join(" "),offset:f.join(" "),of:window,collision:"fit",using:function(h){var g=b(this).css(h).offset().top;if(g<0){b(this).css("top",h.top-g)}}});if(!c){this.uiDialog.hide()}},_setOption:function(f,g){var d=this,c=d.uiDialog,h=c.is(":data(resizable)"),e=false;switch(f){case"beforeclose":f="beforeClose";break;case"buttons":d._createButtons(g);break;case"closeText":d.uiDialogTitlebarCloseText.text(""+g);break;case"dialogClass":c.removeClass(d.options.dialogClass).addClass(a+g);break;case"disabled":if(g){c.addClass("ui-dialog-disabled")}else{c.removeClass("ui-dialog-disabled")}break;case"draggable":if(g){d._makeDraggable()}else{c.draggable("destroy")}break;case"height":e=true;break;case"maxHeight":if(h){c.resizable("option","maxHeight",g)}e=true;break;case"maxWidth":if(h){c.resizable("option","maxWidth",g)}e=true;break;case"minHeight":if(h){c.resizable("option","minHeight",g)}e=true;break;case"minWidth":if(h){c.resizable("option","minWidth",g)}e=true;break;case"position":d._position(g);break;case"resizable":if(h&&!g){c.resizable("destroy")}if(h&&typeof g==="string"){c.resizable("option","handles",g)}if(!h&&g!==false){d._makeResizable(g)}break;case"title":b(".ui-dialog-title",d.uiDialogTitlebar).html(""+(g||"&#160;"));break;case"width":e=true;break}b.Widget.prototype._setOption.apply(d,arguments);if(e){d._size()}},_size:function(){var d=this.options,c;this.element.css("width","auto").hide();c=this.uiDialog.css({height:"auto",width:d.width}).height();this.element.css(d.height==="auto"?{minHeight:Math.max(d.minHeight-c,0),height:"auto"}:{minHeight:0,height:Math.max(d.height-c,0)}).show();if(this.uiDialog.is(":data(resizable)")){this.uiDialog.resizable("option","minHeight",this._minHeight())}}});b.extend(b.ui.dialog,{version:"1.8",uuid:0,maxZ:0,getTitleId:function(c){var d=c.attr("id");if(!d){this.uuid+=1;d=this.uuid}return"ui-dialog-title-"+d},overlay:function(c){this.$el=b.ui.dialog.overlay.create(c)}});b.extend(b.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:b.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(c){return c+".dialog-overlay"}).join(" "),create:function(d){if(this.instances.length===0){setTimeout(function(){if(b.ui.dialog.overlay.instances.length){b(document).bind(b.ui.dialog.overlay.events,function(e){return(b(e.target).zIndex()>=b.ui.dialog.overlay.maxZ)})}},1);b(document).bind("keydown.dialog-overlay",function(e){if(d.options.closeOnEscape&&e.keyCode&&e.keyCode===b.ui.keyCode.ESCAPE){d.close(e);e.preventDefault()}});b(window).bind("resize.dialog-overlay",b.ui.dialog.overlay.resize)}var c=(this.oldInstances.pop()||b("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});if(b.fn.bgiframe){c.bgiframe()}this.instances.push(c);return c},destroy:function(c){this.oldInstances.push(this.instances.splice(b.inArray(c,this.instances),1)[0]);if(this.instances.length===0){b([document,window]).unbind(".dialog-overlay")}c.remove();var d=0;b.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var d,c;if(b.browser.msie&&b.browser.version<7){d=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);c=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);if(d<c){return b(window).height()+"px"}else{return d+"px"}}else{return b(document).height()+"px"}},width:function(){var c,d;if(b.browser.msie&&b.browser.version<7){c=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);d=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);if(c<d){return b(window).width()+"px"}else{return c+"px"}}else{return b(document).width()+"px"}},resize:function(){var c=b([]);b.each(b.ui.dialog.overlay.instances,function(){c=c.add(this)});c.css({width:0,height:0}).css({width:b.ui.dialog.overlay.width(),height:b.ui.dialog.overlay.height()})}});b.extend(b.ui.dialog.overlay.prototype,{destroy:function(){b.ui.dialog.overlay.destroy(this.$el)}})}(jQuery));;/*
 * jQuery UI Slider 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Slider
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */(function(b){var a=5;b.widget("ui.slider",b.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var c=this,d=this.options;this._keySliding=false;this._mouseSliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");if(d.disabled){this.element.addClass("ui-slider-disabled ui-disabled")}this.range=b([]);if(d.range){if(d.range===true){this.range=b("<div></div>");if(!d.values){d.values=[this._valueMin(),this._valueMin()]}if(d.values.length&&d.values.length!=2){d.values=[d.values[0],d.values[0]]}}else{this.range=b("<div></div>")}this.range.appendTo(this.element).addClass("ui-slider-range");if(d.range=="min"||d.range=="max"){this.range.addClass("ui-slider-range-"+d.range)}this.range.addClass("ui-widget-header")}if(b(".ui-slider-handle",this.element).length==0){b('<a href="#"></a>').appendTo(this.element).addClass("ui-slider-handle")}if(d.values&&d.values.length){while(b(".ui-slider-handle",this.element).length<d.values.length){b('<a href="#"></a>').appendTo(this.element).addClass("ui-slider-handle")}}this.handles=b(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(e){e.preventDefault()}).hover(function(){if(!d.disabled){b(this).addClass("ui-state-hover")}},function(){b(this).removeClass("ui-state-hover")}).focus(function(){if(!d.disabled){b(".ui-slider .ui-state-focus").removeClass("ui-state-focus");b(this).addClass("ui-state-focus")}else{b(this).blur()}}).blur(function(){b(this).removeClass("ui-state-focus")});this.handles.each(function(e){b(this).data("index.ui-slider-handle",e)});this.handles.keydown(function(j){var g=true;var f=b(this).data("index.ui-slider-handle");if(c.options.disabled){return}switch(j.keyCode){case b.ui.keyCode.HOME:case b.ui.keyCode.END:case b.ui.keyCode.PAGE_UP:case b.ui.keyCode.PAGE_DOWN:case b.ui.keyCode.UP:case b.ui.keyCode.RIGHT:case b.ui.keyCode.DOWN:case b.ui.keyCode.LEFT:g=false;if(!c._keySliding){c._keySliding=true;b(this).addClass("ui-state-active");c._start(j,f)}break}var h,e,i=c._step();if(c.options.values&&c.options.values.length){h=e=c.values(f)}else{h=e=c.value()}switch(j.keyCode){case b.ui.keyCode.HOME:e=c._valueMin();break;case b.ui.keyCode.END:e=c._valueMax();break;case b.ui.keyCode.PAGE_UP:e=h+((c._valueMax()-c._valueMin())/a);break;case b.ui.keyCode.PAGE_DOWN:e=h-((c._valueMax()-c._valueMin())/a);break;case b.ui.keyCode.UP:case b.ui.keyCode.RIGHT:if(h==c._valueMax()){return}e=h+i;break;case b.ui.keyCode.DOWN:case b.ui.keyCode.LEFT:if(h==c._valueMin()){return}e=h-i;break}c._slide(j,f,e);return g}).keyup(function(f){var e=b(this).data("index.ui-slider-handle");if(c._keySliding){c._keySliding=false;c._stop(f,e);c._change(f,e);b(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();return this},_mouseCapture:function(e){var f=this.options;if(f.disabled){return false}this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();var i={x:e.pageX,y:e.pageY};var k=this._normValueFromMouse(i);var d=this._valueMax()-this._valueMin()+1,g;var l=this,j;this.handles.each(function(m){var n=Math.abs(k-l.values(m));if(d>n){d=n;g=b(this);j=m}});if(f.range==true&&this.values(1)==f.min){g=b(this.handles[++j])}this._start(e,j);this._mouseSliding=true;l._handleIndex=j;g.addClass("ui-state-active").focus();var h=g.offset();var c=!b(e.target).parents().andSelf().is(".ui-slider-handle");this._clickOffset=c?{left:0,top:0}:{left:e.pageX-h.left-(g.width()/2),top:e.pageY-h.top-(g.height()/2)-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)};k=this._normValueFromMouse(i);this._slide(e,j,k);this._animateOff=true;return true},_mouseStart:function(c){return true},_mouseDrag:function(e){var c={x:e.pageX,y:e.pageY};var d=this._normValueFromMouse(c);this._slide(e,this._handleIndex,d);return false},_mouseStop:function(c){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(c,this._handleIndex);this._change(c,this._handleIndex);this._handleIndex=null;this._clickOffset=null;this._animateOff=false;return false},_detectOrientation:function(){this.orientation=this.options.orientation=="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(e){var d,i;if("horizontal"==this.orientation){d=this.elementSize.width;i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{d=this.elementSize.height;i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}var g=(i/d);if(g>1){g=1}if(g<0){g=0}if("vertical"==this.orientation){g=1-g}var f=this._valueMax()-this._valueMin(),j=g*f,c=j%this.options.step,h=this._valueMin()+j-c;if(c>(this.options.step/2)){h+=this.options.step}return parseFloat(h.toFixed(5))},_start:function(e,d){var c={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(d);c.values=this.values()}this._trigger("start",e,c)},_slide:function(g,f,e){var h=this.handles[f];if(this.options.values&&this.options.values.length){var c=this.values(f?0:1);if((this.options.values.length==2&&this.options.range===true)&&((f==0&&e>c)||(f==1&&e<c))){e=c}if(e!=this.values(f)){var d=this.values();d[f]=e;var i=this._trigger("slide",g,{handle:this.handles[f],value:e,values:d});var c=this.values(f?0:1);if(i!==false){this.values(f,e,true)}}}else{if(e!=this.value()){var i=this._trigger("slide",g,{handle:this.handles[f],value:e});if(i!==false){this.value(e)}}}},_stop:function(e,d){var c={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(d);c.values=this.values()}this._trigger("stop",e,c)},_change:function(e,d){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(d);c.values=this.values()}this._trigger("change",e,c)}},value:function(c){if(arguments.length){this.options.value=this._trimValue(c);this._refreshValue();this._change(null,0)}return this._value()},values:function(e,h){if(arguments.length>1){this.options.values[e]=this._trimValue(h);this._refreshValue();this._change(null,e)}if(arguments.length){if(b.isArray(arguments[0])){var g=this.options.values,d=arguments[0];for(var f=0,c=g.length;f<c;f++){g[f]=this._trimValue(d[f]);this._change(null,f)}this._refreshValue()}else{if(this.options.values&&this.options.values.length){return this._values(e)}else{return this.value()}}}else{return this._values()}},_setOption:function(d,e){var c,f=0;if(jQuery.isArray(this.options.values)){f=this.options.values.length}b.Widget.prototype._setOption.apply(this,arguments);switch(d){case"disabled":if(e){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}case"orientation":this._detectOrientation();this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case"value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case"values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c++){this._change(null,c)}this._animateOff=false;break}},_step:function(){var c=this.options.step;return c},_value:function(){var c=this.options.value;c=this._trimValue(c);return c},_values:function(d){if(arguments.length){var g=this.options.values[d];g=this._trimValue(g);return g}else{var f=this.options.values.slice();for(var e=0,c=f.length;e<c;e++){f[e]=this._trimValue(f[e])}return f}},_trimValue:function(c){if(c<this._valueMin()){c=this._valueMin()}if(c>this._valueMax()){c=this._valueMax()}return c},_valueMin:function(){var c=this.options.min;return c},_valueMax:function(){var c=this.options.max;return c},_refreshValue:function(){var g=this.options.range,e=this.options,m=this;var d=(!this._animateOff)?e.animate:false;if(this.options.values&&this.options.values.length){var j,i;this.handles.each(function(q,o){var p=(m.values(q)-m._valueMin())/(m._valueMax()-m._valueMin())*100;var n={};n[m.orientation=="horizontal"?"left":"bottom"]=p+"%";b(this).stop(1,1)[d?"animate":"css"](n,e.animate);if(m.options.range===true){if(m.orientation=="horizontal"){(q==0)&&m.range.stop(1,1)[d?"animate":"css"]({left:p+"%"},e.animate);(q==1)&&m.range[d?"animate":"css"]({width:(p-lastValPercent)+"%"},{queue:false,duration:e.animate})}else{(q==0)&&m.range.stop(1,1)[d?"animate":"css"]({bottom:(p)+"%"},e.animate);(q==1)&&m.range[d?"animate":"css"]({height:(p-lastValPercent)+"%"},{queue:false,duration:e.animate})}}lastValPercent=p})}else{var k=this.value(),h=this._valueMin(),l=this._valueMax(),f=l!=h?(k-h)/(l-h)*100:0;var c={};c[m.orientation=="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[d?"animate":"css"](c,e.animate);(g=="min")&&(this.orientation=="horizontal")&&this.range.stop(1,1)[d?"animate":"css"]({width:f+"%"},e.animate);(g=="max")&&(this.orientation=="horizontal")&&this.range[d?"animate":"css"]({width:(100-f)+"%"},{queue:false,duration:e.animate});(g=="min")&&(this.orientation=="vertical")&&this.range.stop(1,1)[d?"animate":"css"]({height:f+"%"},e.animate);(g=="max")&&(this.orientation=="vertical")&&this.range[d?"animate":"css"]({height:(100-f)+"%"},{queue:false,duration:e.animate})}}});b.extend(b.ui.slider,{version:"1.8"})})(jQuery);;/*
 * jQuery UI Tabs 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Tabs
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 */(function(c){var b=0,a=0;c.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:'<li><a href="#{href}"><span>#{label}</span></a></li>'},_create:function(){this._tabify(true)},_setOption:function(d,e){if(d=="selected"){if(this.options.collapsible&&e==this.options.selected){return}this.select(e)}else{this.options[d]=e;this._tabify()}},_tabId:function(d){return d.title&&d.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+(++b)},_sanitizeSelector:function(d){return d.replace(/:/g,"\\:")},_cookie:function(){var d=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+(++a));return c.cookie.apply(null,[d].concat(c.makeArray(arguments)))},_ui:function(e,d){return{tab:e,panel:d,index:this.anchors.index(e)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var d=c(this);d.html(d.data("label.tabs")).removeData("label.tabs")})},_tabify:function(q){this.list=this.element.find("ol,ul").eq(0);this.lis=c("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return c("a",this)[0]});this.panels=c([]);var r=this,f=this.options;var e=/^#.+/;this.anchors.each(function(u,o){var s=c(o).attr("href");var v=s.split("#")[0],w;if(v&&(v===location.toString().split("#")[0]||(w=c("base")[0])&&v===w.href)){s=o.hash;o.href=s}if(e.test(s)){r.panels=r.panels.add(r._sanitizeSelector(s))}else{if(s!="#"){c.data(o,"href.tabs",s);c.data(o,"load.tabs",s.replace(/#.*$/,""));var y=r._tabId(o);o.href="#"+y;var x=c("#"+y);if(!x.length){x=c(f.panelTemplate).attr("id",y).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(r.panels[u-1]||r.list);x.data("destroy.tabs",true)}r.panels=r.panels.add(x)}else{f.disabled.push(u)}}});if(q){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(f.selected===undefined){if(location.hash){this.anchors.each(function(s,o){if(o.hash==location.hash){f.selected=s;return false}})}if(typeof f.selected!="number"&&f.cookie){f.selected=parseInt(r._cookie(),10)}if(typeof f.selected!="number"&&this.lis.filter(".ui-tabs-selected").length){f.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}f.selected=f.selected||(this.lis.length?0:-1)}else{if(f.selected===null){f.selected=-1}}f.selected=((f.selected>=0&&this.anchors[f.selected])||f.selected<0)?f.selected:0;f.disabled=c.unique(f.disabled.concat(c.map(this.lis.filter(".ui-state-disabled"),function(s,o){return r.lis.index(s)}))).sort();if(c.inArray(f.selected,f.disabled)!=-1){f.disabled.splice(c.inArray(f.selected,f.disabled),1)}this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");if(f.selected>=0&&this.anchors.length){this.panels.eq(f.selected).removeClass("ui-tabs-hide");this.lis.eq(f.selected).addClass("ui-tabs-selected ui-state-active");r.element.queue("tabs",function(){r._trigger("show",null,r._ui(r.anchors[f.selected],r.panels[f.selected]))});this.load(f.selected)}c(window).bind("unload",function(){r.lis.add(r.anchors).unbind(".tabs");r.lis=r.anchors=r.panels=null})}else{f.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}this.element[f.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");if(f.cookie){this._cookie(f.selected,f.cookie)}for(var j=0,p;(p=this.lis[j]);j++){c(p)[c.inArray(j,f.disabled)!=-1&&!c(p).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled")}if(f.cache===false){this.anchors.removeData("cache.tabs")}this.lis.add(this.anchors).unbind(".tabs");if(f.event!="mouseover"){var h=function(o,i){if(i.is(":not(.ui-state-disabled)")){i.addClass("ui-state-"+o)}};var l=function(o,i){i.removeClass("ui-state-"+o)};this.lis.bind("mouseover.tabs",function(){h("hover",c(this))});this.lis.bind("mouseout.tabs",function(){l("hover",c(this))});this.anchors.bind("focus.tabs",function(){h("focus",c(this).closest("li"))});this.anchors.bind("blur.tabs",function(){l("focus",c(this).closest("li"))})}var d,k;if(f.fx){if(c.isArray(f.fx)){d=f.fx[0];k=f.fx[1]}else{d=k=f.fx}}function g(i,o){i.css({display:""});if(!c.support.opacity&&o.opacity){i[0].style.removeAttribute("filter")}}var m=k?function(i,o){c(i).closest("li").addClass("ui-tabs-selected ui-state-active");o.hide().removeClass("ui-tabs-hide").animate(k,k.duration||"normal",function(){g(o,k);r._trigger("show",null,r._ui(i,o[0]))})}:function(i,o){c(i).closest("li").addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");r._trigger("show",null,r._ui(i,o[0]))};var n=d?function(o,i){i.animate(d,d.duration||"normal",function(){r.lis.removeClass("ui-tabs-selected ui-state-active");i.addClass("ui-tabs-hide");g(i,d);r.element.dequeue("tabs")})}:function(o,i,s){r.lis.removeClass("ui-tabs-selected ui-state-active");i.addClass("ui-tabs-hide");r.element.dequeue("tabs")};this.anchors.bind(f.event+".tabs",function(){var o=this,u=c(this).closest("li"),i=r.panels.filter(":not(.ui-tabs-hide)"),s=c(r._sanitizeSelector(this.hash));if((u.hasClass("ui-tabs-selected")&&!f.collapsible)||u.hasClass("ui-state-disabled")||u.hasClass("ui-state-processing")||r._trigger("select",null,r._ui(this,s[0]))===false){this.blur();return false}f.selected=r.anchors.index(this);r.abort();if(f.collapsible){if(u.hasClass("ui-tabs-selected")){f.selected=-1;if(f.cookie){r._cookie(f.selected,f.cookie)}r.element.queue("tabs",function(){n(o,i)}).dequeue("tabs");this.blur();return false}else{if(!i.length){if(f.cookie){r._cookie(f.selected,f.cookie)}r.element.queue("tabs",function(){m(o,s)});r.load(r.anchors.index(this));this.blur();return false}}}if(f.cookie){r._cookie(f.selected,f.cookie)}if(s.length){if(i.length){r.element.queue("tabs",function(){n(o,i)})}r.element.queue("tabs",function(){m(o,s)});r.load(r.anchors.index(this))}else{throw"jQuery UI Tabs: Mismatching fragment identifier."}if(c.browser.msie){this.blur()}});this.anchors.bind("click.tabs",function(){return false})},destroy:function(){var d=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=c.data(this,"href.tabs");if(e){this.href=e}var f=c(this).unbind(".tabs");c.each(["href","load","cache"],function(g,h){f.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){if(c.data(this,"destroy.tabs")){c(this).remove()}else{c(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}});if(d.cookie){this._cookie(null,d.cookie)}return this},add:function(g,f,e){if(e===undefined){e=this.anchors.length}var d=this,i=this.options,k=c(i.tabTemplate.replace(/#\{href\}/g,g).replace(/#\{label\}/g,f)),j=!g.indexOf("#")?g.replace("#",""):this._tabId(c("a",k)[0]);k.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var h=c("#"+j);if(!h.length){h=c(i.panelTemplate).attr("id",j).data("destroy.tabs",true)}h.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(e>=this.lis.length){k.appendTo(this.list);h.appendTo(this.list[0].parentNode)}else{k.insertBefore(this.lis[e]);h.insertBefore(this.panels[e])}i.disabled=c.map(i.disabled,function(m,l){return m>=e?++m:m});this._tabify();if(this.anchors.length==1){i.selected=0;k.addClass("ui-tabs-selected ui-state-active");h.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){d._trigger("show",null,d._ui(d.anchors[0],d.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[e],this.panels[e]));return this},remove:function(d){var f=this.options,g=this.lis.eq(d).remove(),e=this.panels.eq(d).remove();if(g.hasClass("ui-tabs-selected")&&this.anchors.length>1){this.select(d+(d+1<this.anchors.length?1:-1))}f.disabled=c.map(c.grep(f.disabled,function(j,h){return j!=d}),function(j,h){return j>=d?--j:j});this._tabify();this._trigger("remove",null,this._ui(g.find("a")[0],e[0]));return this},enable:function(d){var e=this.options;if(c.inArray(d,e.disabled)==-1){return}this.lis.eq(d).removeClass("ui-state-disabled");e.disabled=c.grep(e.disabled,function(g,f){return g!=d});this._trigger("enable",null,this._ui(this.anchors[d],this.panels[d]));return this},disable:function(e){var d=this,f=this.options;if(e!=f.selected){this.lis.eq(e).addClass("ui-state-disabled");f.disabled.push(e);f.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[e],this.panels[e]))}return this},select:function(d){if(typeof d=="string"){d=this.anchors.index(this.anchors.filter("[href$="+d+"]"))}else{if(d===null){d=-1}}if(d==-1&&this.options.collapsible){d=this.options.selected}this.anchors.eq(d).trigger(this.options.event+".tabs");return this},load:function(g){var e=this,i=this.options,d=this.anchors.eq(g)[0],f=c.data(d,"load.tabs");this.abort();if(!f||this.element.queue("tabs").length!==0&&c.data(d,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(g).addClass("ui-state-processing");if(i.spinner){var h=c("span",d);h.data("label.tabs",h.html()).html(i.spinner)}this.xhr=c.ajax(c.extend({},i.ajaxOptions,{url:f,success:function(k,j){c(e._sanitizeSelector(d.hash)).html(k);e._cleanup();if(i.cache){c.data(d,"cache.tabs",true)}e._trigger("load",null,e._ui(e.anchors[g],e.panels[g]));try{i.ajaxOptions.success(k,j)}catch(l){}},error:function(l,j,k){e._cleanup();e._trigger("load",null,e._ui(e.anchors[g],e.panels[g]));try{i.ajaxOptions.error(l,j,g,d)}catch(k){}}}));e.element.dequeue("tabs");return this},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(e,d){this.anchors.eq(e).removeData("cache.tabs").data("load.tabs",d);return this},length:function(){return this.anchors.length}});c.extend(c.ui.tabs,{version:"1.8"});c.extend(c.ui.tabs.prototype,{rotation:null,rotate:function(f,h){var d=this,i=this.options;var e=d._rotate||(d._rotate=function(j){clearTimeout(d.rotation);d.rotation=setTimeout(function(){var k=i.selected;d.select(++k<d.anchors.length?k:0)},f);if(j){j.stopPropagation()}});var g=d._unrotate||(d._unrotate=!h?function(j){if(j.clientX){d.rotate(null)}}:function(j){t=i.selected;e()});if(f){this.element.bind("tabsshow",e);this.anchors.bind(i.event+".tabs",g);e()}else{clearTimeout(d.rotation);this.element.unbind("tabsshow",e);this.anchors.unbind(i.event+".tabs",g);delete this._rotate;delete this._unrotate}return this}})})(jQuery);;/*
 * jQuery UI Datepicker 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Datepicker
 *
 * Depends:
 *	jquery.ui.core.js
 */(function($){$.extend($.ui,{datepicker:{version:"1.8"}});var PROP_NAME="datepicker";var dpuuid=new Date().getTime();function Datepicker(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._datepickerShowing=false;this._inDialog=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass="ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"show",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"_default",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};$.extend(this._defaults,this.regional[""]);this.dpDiv=$('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>')}$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",log:function(){if(this.debug){console.log.apply("",arguments)}},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([^A-Za-z0-9_])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(target,inst){var input=$(target);inst.append=$([]);inst.trigger=$([]);if(input.hasClass(this.markerClassName)){return}this._attachments(input,inst);input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});this._autoSize(inst);$.data(target,PROP_NAME,inst)},_attachments:function(input,inst){var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(inst.append){inst.append.remove()}if(appendText){inst.append=$('<span class="'+this._appendClass+'">'+appendText+"</span>");input[isRTL?"before":"after"](inst.append)}input.unbind("focus",this._showDatepicker);if(inst.trigger){inst.trigger.remove()}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");inst.trigger=$(this._get(inst,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('<button type="button"></button>').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("<img/>").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](inst.trigger);inst.trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==input[0]){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(input[0])}return false})}},_autoSize:function(inst){if(this._get(inst,"autoSize")&&!inst.inline){var date=new Date(2009,12-1,20);var dateFormat=this._get(inst,"dateFormat");if(dateFormat.match(/[DM]/)){var findMax=function(names){var max=0;var maxI=0;for(var i=0;i<names.length;i++){if(names[i].length>max){max=names[i].length;maxI=i}}return maxI};date.setMonth(findMax(this._get(inst,(dateFormat.match(/MM/)?"monthNames":"monthNamesShort"))));date.setDate(findMax(this._get(inst,(dateFormat.match(/DD/)?"dayNames":"dayNamesShort")))+20-date.getDay())}inst.input.attr("size",this._formatDate(inst,date).length)}},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst),true);this._updateDatepicker(inst);this._updateAlternate(inst)},_dialogDatepicker:function(input,date,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id="dp"+(++this.uuid);this._dialogInput=$('<input type="text" id="'+id+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);$("body").append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst)}extendRemove(inst.settings,settings||{});date=(date&&date.constructor==Date?this._formatDate(inst,date):date);this._dialogInput.val(date);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=document.documentElement.clientWidth;var browserHeight=document.documentElement.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",(this._pos[0]+20)+"px").css("top",this._pos[1]+"px");inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){inst.append.remove();inst.trigger.remove();$target.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;inst.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().removeClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;inst.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().addClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i<this._disabledInputs.length;i++){if(this._disabledInputs[i]==target){return true}}return false},_getInst:function(target){try{return $.data(target,PROP_NAME)}catch(err){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(target,name,value){var inst=this._getInst(target);if(arguments.length==2&&typeof name=="string"){return(name=="defaults"?$.extend({},$.datepicker._defaults):(inst?(name=="all"?$.extend({},inst.settings):this._get(inst,name)):null))}var settings=name||{};if(typeof name=="string"){settings={};settings[name]=value}if(inst){if(this._curInst==inst){this._hideDatepicker()}var date=this._getDateDatepicker(target,true);extendRemove(inst.settings,settings);this._attachments($(target),inst);this._autoSize(inst);this._setDateDatepicker(target,date);this._updateDatepicker(inst)}},_changeDatepicker:function(target,name,value){this._optionDatepicker(target,name,value)},_refreshDatepicker:function(target){var inst=this._getInst(target);if(inst){this._updateDatepicker(inst)}},_setDateDatepicker:function(target,date){var inst=this._getInst(target);if(inst){this._setDate(inst,date);this._updateDatepicker(inst);this._updateAlternate(inst)}},_getDateDatepicker:function(target,noDefault){var inst=this._getInst(target);if(inst&&!inst.inline){this._setDateFromField(inst,noDefault)}return(inst?this._getDate(inst):null)},_doKeyDown:function(event){var inst=$.datepicker._getInst(event.target);var handled=true;var isRTL=inst.dpDiv.is(".ui-datepicker-rtl");inst._keyEvent=true;if($.datepicker._datepickerShowing){switch(event.keyCode){case 9:$.datepicker._hideDatepicker();handled=false;break;case 13:var sel=$("td."+$.datepicker._dayOverClass,inst.dpDiv).add($("td."+$.datepicker._currentClass,inst.dpDiv));if(sel[0]){$.datepicker._selectDay(event.target,inst.selectedMonth,inst.selectedYear,sel[0])}else{$.datepicker._hideDatepicker()}return false;break;case 27:$.datepicker._hideDatepicker();break;case 33:$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M");break;case 34:$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M");break;case 35:if(event.ctrlKey||event.metaKey){$.datepicker._clearDate(event.target)}handled=event.ctrlKey||event.metaKey;break;case 36:if(event.ctrlKey||event.metaKey){$.datepicker._gotoToday(event.target)}handled=event.ctrlKey||event.metaKey;break;case 37:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,(isRTL?+1:-1),"D")}handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey){$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M")}break;case 38:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,-7,"D")}handled=event.ctrlKey||event.metaKey;break;case 39:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,(isRTL?-1:+1),"D")}handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey){$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M")}break;case 40:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,+7,"D")}handled=event.ctrlKey||event.metaKey;break;default:handled=false}}else{if(event.keyCode==36&&event.ctrlKey){$.datepicker._showDatepicker(this)}else{handled=false}}if(handled){event.preventDefault();event.stopPropagation()}},_doKeyPress:function(event){var inst=$.datepicker._getInst(event.target);if($.datepicker._get(inst,"constrainInput")){var chars=$.datepicker._possibleChars($.datepicker._get(inst,"dateFormat"));var chr=String.fromCharCode(event.charCode==undefined?event.keyCode:event.charCode);return event.ctrlKey||(chr<" "||!chars||chars.indexOf(chr)>-1)}},_doKeyUp:function(event){var inst=$.datepicker._getInst(event.target);if(inst.input.val()!=inst.lastVal){try{var date=$.datepicker.parseDate($.datepicker._get(inst,"dateFormat"),(inst.input?inst.input.val():null),$.datepicker._getFormatConfig(inst));if(date){$.datepicker._setDateFromField(inst);$.datepicker._updateAlternate(inst);$.datepicker._updateDatepicker(inst)}}catch(event){$.datepicker.log(event)}}return true},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);if($.datepicker._curInst&&$.datepicker._curInst!=inst){$.datepicker._curInst.dpDiv.stop(true,true)}var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));inst.lastVal=null;$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return !isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim");var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;var borders=$.datepicker._getBorders(inst.dpDiv);inst.dpDiv.find("iframe.ui-datepicker-cover").css({left:-borders[0],top:-borders[1],width:inst.dpDiv.outerWidth(),height:inst.dpDiv.outerHeight()})};inst.dpDiv.zIndex($(input).zIndex()+1);if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim||"show"]((showAnim?duration:null),postProcess)}if(!showAnim||!duration){postProcess()}if(inst.input.is(":visible")&&!inst.input.is(":disabled")){inst.input.focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var self=this;var borders=$.datepicker._getBorders(inst.dpDiv);inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({left:-borders[0],top:-borders[1],width:inst.dpDiv.outerWidth(),height:inst.dpDiv.outerHeight()}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){$(this).removeClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).removeClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).removeClass("ui-datepicker-next-hover")}}).bind("mouseover",function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");$(this).addClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).addClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).addClass("ui-datepicker-next-hover")}}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass("ui-datepicker-multi-"+cols).css("width",(width*cols)+"em")}else{inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("")}inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst==$.datepicker._curInst&&$.datepicker._datepickerShowing&&inst.input&&inst.input.is(":visible")&&!inst.input.is(":disabled")){inst.input.focus()}},_getBorders:function(elem){var convert=function(value){return{thin:1,medium:2,thick:3}[value]||value};return[parseFloat(convert(elem.css("border-left-width"))),parseFloat(convert(elem.css("border-top-width")))]},_checkOffset:function(inst,offset,isFixed){var dpWidth=inst.dpDiv.outerWidth();var dpHeight=inst.dpDiv.outerHeight();var inputWidth=inst.input?inst.input.outerWidth():0;var inputHeight=inst.input?inst.input.outerHeight():0;var viewWidth=document.documentElement.clientWidth+$(document).scrollLeft();var viewHeight=document.documentElement.clientHeight+$(document).scrollTop();offset.left-=(this._get(inst,"isRTL")?(dpWidth-inputWidth):0);offset.left-=(isFixed&&offset.left==inst.input.offset().left)?$(document).scrollLeft():0;offset.top-=(isFixed&&offset.top==(inst.input.offset().top+inputHeight))?$(document).scrollTop():0;offset.left-=Math.min(offset.left,(offset.left+dpWidth>viewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0);offset.top-=Math.min(offset.top,(offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(dpHeight+inputHeight):0);return offset},_findPos:function(obj){var inst=this._getInst(obj);var isRTL=this._get(inst,"isRTL");while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj[isRTL?"previousSibling":"nextSibling"]}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}if(this._datepickerShowing){var showAnim=this._get(inst,"showAnim");var duration=this._get(inst,"duration");var postProcess=function(){$.datepicker._tidyDialog(inst);this._curInst=null};if($.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide"))]((showAnim?duration:null),postProcess)}if(!showAnim){postProcess()}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if($target[0].id!=$.datepicker._mainDivId&&$target.parents("#"+$.datepicker._mainDivId).length==0&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker()}},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return}this._adjustInstDate(inst,offset+(period=="M"?this._get(inst,"showCurrentAtPos"):0),period);this._updateDatepicker(inst)},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"gotoCurrent")&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear}else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear()}this._notifyChange(inst);this._adjustDate(target)},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input.focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return}var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);this._selectDate(target,"")},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst);var onSelect=this._get(inst,"onSelect");if(onSelect){onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst])}else{if(inst.input){inst.input.trigger("change")}}if(inst.inline){this._updateDatepicker(inst)}else{this._hideDatepicker();this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input.focus()}this._lastInput=null}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat")||this._get(inst,"dateFormat");var date=this._getDate(inst);var dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getTime());checkDate.setDate(checkDate.getDate()+4-(checkDate.getDay()||7));var time=checkDate.getTime();checkDate.setMonth(0);checkDate.setDate(1);return Math.floor(Math.round((time-checkDate)/86400000)/7)+1},parseDate:function(format,value,settings){if(format==null||value==null){throw"Invalid arguments"}value=(typeof value=="object"?value.toString():value+"");if(value==""){return null}var shortYearCutoff=(settings?settings.shortYearCutoff:null)||this._defaults.shortYearCutoff;var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var year=-1;var month=-1;var day=-1;var doy=-1;var literal=false;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var getNumber=function(match){lookAhead(match);var size=(match=="@"?14:(match=="!"?20:(match=="y"?4:(match=="o"?3:2))));var digits=new RegExp("^\\d{1,"+size+"}");var num=value.substring(iValue).match(digits);if(!num){throw"Missing number at position "+iValue}iValue+=num[0].length;return parseInt(num[0],10)};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);for(var i=0;i<names.length;i++){if(value.substr(iValue,names[i].length)==names[i]){iValue+=names[i].length;return i+1}}throw"Unknown name at position "+iValue};var checkLiteral=function(){if(value.charAt(iValue)!=format.charAt(iFormat)){throw"Unexpected literal at position "+iValue}iValue++};var iValue=0;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{checkLiteral()}}else{switch(format.charAt(iFormat)){case"d":day=getNumber("d");break;case"D":getName("D",dayNamesShort,dayNames);break;case"o":doy=getNumber("o");break;case"m":month=getNumber("m");break;case"M":month=getName("M",monthNamesShort,monthNames);break;case"y":year=getNumber("y");break;case"@":var date=new Date(getNumber("@"));year=date.getFullYear();month=date.getMonth()+1;day=date.getDate();break;case"!":var date=new Date((getNumber("!")-this._ticksTo1970)/10000);year=date.getFullYear();month=date.getMonth()+1;day=date.getDate();break;case"'":if(lookAhead("'")){checkLiteral()}else{literal=true}break;default:checkLiteral()}}}if(year==-1){year=new Date().getFullYear()}else{if(year<100){year+=new Date().getFullYear()-new Date().getFullYear()%100+(year<=shortYearCutoff?0:-100)}}if(doy>-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(((1970-1)*365+Math.floor(1970/4)-Math.floor(1970/100)+Math.floor(1970/400))*24*60*60*10000000),formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var formatNumber=function(match,value,len){var num=""+value;if(lookAhead(match)){while(num.length<len){num="0"+num}}return num};var formatName=function(match,value,shortNames,longNames){return(lookAhead(match)?longNames[value]:shortNames[value])};var output="";var literal=false;if(date){for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{output+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":output+=formatNumber("d",date.getDate(),2);break;case"D":output+=formatName("D",date.getDay(),dayNamesShort,dayNames);break;case"o":output+=formatNumber("o",(date.getTime()-new Date(date.getFullYear(),0,0).getTime())/86400000,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"!":output+=date.getTime()*10000+this._ticksTo1970;break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{chars+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":case"m":case"y":case"@":chars+="0123456789";break;case"D":case"M":return null;case"'":if(lookAhead("'")){chars+="'"}else{literal=true}break;default:chars+=format.charAt(iFormat)}}}return chars},_get:function(inst,name){return inst.settings[name]!==undefined?inst.settings[name]:this._defaults[name]},_setDateFromField:function(inst,noDefault){if(inst.input.val()==inst.lastVal){return}var dateFormat=this._get(inst,"dateFormat");var dates=inst.lastVal=inst.input?inst.input.val():null;var date,defaultDate;date=defaultDate=this._getDefaultDate(inst);var settings=this._getFormatConfig(inst);try{date=this.parseDate(dateFormat,dates,settings)||defaultDate}catch(event){this.log(event);dates=(noDefault?"":dates)}inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();inst.currentDay=(dates?date.getDate():0);inst.currentMonth=(dates?date.getMonth():0);inst.currentYear=(dates?date.getFullYear():0);this._adjustInstDate(inst)},_getDefaultDate:function(inst){return this._restrictMinMax(inst,this._determineDate(inst,this._get(inst,"defaultDate"),new Date()))},_determineDate:function(inst,date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date};var offsetString=function(offset){try{return $.datepicker.parseDate($.datepicker._get(inst,"dateFormat"),offset,$.datepicker._getFormatConfig(inst))}catch(e){}var date=(offset.toLowerCase().match(/^c/)?$.datepicker._getDate(inst):null)||new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,$.datepicker._getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,$.datepicker._getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=="Invalid Date"?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return this._daylightSavingAdjust(date)},_daylightSavingAdjust:function(date){if(!date){return null}date.setHours(date.getHours()>12?date.getHours()+2:0);return date},_setDate:function(inst,date,noChange){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._restrictMinMax(inst,this._determineDate(inst,date,new Date()));inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if((origMonth!=inst.selectedMonth||origYear!=inst.selectedYear)&&!noChange){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,"isRTL");var showButtonPanel=this._get(inst,"showButtonPanel");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,"min");var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-(numMonths[0]*numMonths[1])+1,maxDate.getDate()));maxDraw=(minDate&&maxDraw<minDate?minDate:maxDraw);while(this._daylightSavingAdjust(new Date(drawYear,drawMonth,1))>maxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}inst.drawMonth=drawMonth;inst.drawYear=drawYear;var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._adjustDate('#"+inst.id+"', -"+stepMonths+", 'M');\" title=\""+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"e":"w")+'">'+prevText+"</span></a>":(hideIfNoPrevNext?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"e":"w")+'">'+prevText+"</span></a>"));var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._adjustDate('#"+inst.id+"', +"+stepMonths+", 'M');\" title=\""+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"w":"e")+'">'+nextText+"</span></a>":(hideIfNoPrevNext?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"w":"e")+'">'+nextText+"</span></a>"));var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls=(!inst.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+dpuuid+'.datepicker._hideDatepicker();">'+this._get(inst,"closeText")+"</button>":"");var buttonPanel=(showButtonPanel)?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(isRTL?controls:"")+(this._isInRange(inst,gotoDate)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._gotoToday('#"+inst.id+"');\">"+currentText+"</button>":"")+(isRTL?"":controls)+"</div>":"";var firstDay=parseInt(this._get(inst,"firstDay"),10);firstDay=(isNaN(firstDay)?0:firstDay);var showWeek=this._get(inst,"showWeek");var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var monthNamesShort=this._get(inst,"monthNamesShort");var beforeShowDay=this._get(inst,"beforeShowDay");var showOtherMonths=this._get(inst,"showOtherMonths");var selectOtherMonths=this._get(inst,"selectOtherMonths");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var defaultDate=this._getDefaultDate(inst);var html="";for(var row=0;row<numMonths[0];row++){var group="";for(var col=0;col<numMonths[1];col++){var selectedDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,inst.selectedDay));var cornerClass=" ui-corner-all";var calender="";if(isMultiMonth){calender+='<div class="ui-datepicker-group';if(numMonths[1]>1){switch(col){case 0:calender+=" ui-datepicker-group-first";cornerClass=" ui-corner-"+(isRTL?"right":"left");break;case numMonths[1]-1:calender+=" ui-datepicker-group-last";cornerClass=" ui-corner-"+(isRTL?"left":"right");break;default:calender+=" ui-datepicker-group-middle";cornerClass="";break}}calender+='">'}calender+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+cornerClass+'">'+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):"")+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):"")+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,row>0||col>0,monthNames,monthNamesShort)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var thead=(showWeek?'<th class="ui-datepicker-week-col">'+this._get(inst,"weekHeader")+"</th>":"");for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+="<th"+((dow+firstDay+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+dayNames[day]+'">'+dayNamesMin[day]+"</span></th>"}calender+=thead+"</tr></thead><tbody>";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow<numRows;dRow++){calender+="<tr>";var tbody=(!showWeek?"":'<td class="ui-datepicker-week-col">'+this._get(inst,"calculateWeek")(printDate)+"</td>");for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=(otherMonth&&!selectOtherMonths)||!daySettings[0]||(minDate&&printDate<minDate)||(maxDate&&printDate>maxDate);tbody+='<td class="'+((dow+firstDay+6)%7>=5?" ui-datepicker-week-end":"")+(otherMonth?" ui-datepicker-other-month":"")+((printDate.getTime()==selectedDate.getTime()&&drawMonth==inst.selectedMonth&&inst._keyEvent)||(defaultDate.getTime()==printDate.getTime()&&defaultDate.getTime()==selectedDate.getTime())?" "+this._dayOverClass:"")+(unselectable?" "+this._unselectableClass+" ui-state-disabled":"")+(otherMonth&&!showOtherMonths?"":" "+daySettings[1]+(printDate.getTime()==currentDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?"":' onclick="DP_jQuery_'+dpuuid+".datepicker._selectDay('#"+inst.id+"',"+printDate.getMonth()+","+printDate.getFullYear()+', this);return false;"')+">"+(otherMonth&&!showOtherMonths?"&#xa0;":(unselectable?'<span class="ui-state-default">'+printDate.getDate()+"</span>":'<a class="ui-state-default'+(printDate.getTime()==today.getTime()?" ui-state-highlight":"")+(printDate.getTime()==currentDate.getTime()?" ui-state-active":"")+(otherMonth?" ui-priority-secondary":"")+'" href="#">'+printDate.getDate()+"</a>"))+"</td>";printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate)}calender+=tbody+"</tr>"}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}calender+="</tbody></table>"+(isMultiMonth?"</div>"+((numMonths[0]>0&&col==numMonths[1]-1)?'<div class="ui-datepicker-row-break"></div>':""):"");group+=calender}html+=group}html+=buttonPanel+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");inst._keyEvent=false;return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,secondary,monthNames,monthNamesShort){var changeMonth=this._get(inst,"changeMonth");var changeYear=this._get(inst,"changeYear");var showMonthAfterYear=this._get(inst,"showMonthAfterYear");var html='<div class="ui-datepicker-title">';var monthHtml="";if(secondary||!changeMonth){monthHtml+='<span class="ui-datepicker-month">'+monthNames[drawMonth]+"</span>"}else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+dpuuid+".datepicker._selectMonthYear('#"+inst.id+"', this, 'M');\" onclick=\"DP_jQuery_"+dpuuid+".datepicker._clickMonthYear('#"+inst.id+"');\">";for(var month=0;month<12;month++){if((!inMinYear||month>=minDate.getMonth())&&(!inMaxYear||month<=maxDate.getMonth())){monthHtml+='<option value="'+month+'"'+(month==drawMonth?' selected="selected"':"")+">"+monthNamesShort[month]+"</option>"}}monthHtml+="</select>"}if(!showMonthAfterYear){html+=monthHtml+(secondary||!(changeMonth&&changeYear)?"&#xa0;":"")}if(secondary||!changeYear){html+='<span class="ui-datepicker-year">'+drawYear+"</span>"}else{var years=this._get(inst,"yearRange").split(":");var thisYear=new Date().getFullYear();var determineYear=function(value){var year=(value.match(/c[+-].*/)?drawYear+parseInt(value.substring(1),10):(value.match(/[+-].*/)?thisYear+parseInt(value,10):parseInt(value,10)));return(isNaN(year)?thisYear:year)};var year=determineYear(years[0]);var endYear=Math.max(year,determineYear(years[1]||""));year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+dpuuid+".datepicker._selectMonthYear('#"+inst.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+dpuuid+".datepicker._clickMonthYear('#"+inst.id+"');\">";for(;year<=endYear;year++){html+='<option value="'+year+'"'+(year==drawYear?' selected="selected"':"")+">"+year+"</option>"}html+="</select>"}html+=this._get(inst,"yearSuffix");if(showMonthAfterYear){html+=(secondary||!(changeMonth&&changeYear)?"&#xa0;":"")+monthHtml}html+="</div>";return html},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=this._restrictMinMax(inst,this._daylightSavingAdjust(new Date(year,month,day)));inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}},_restrictMinMax:function(inst,date){var minDate=this._getMinMaxDate(inst,"min");var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);return date},_notifyChange:function(inst){var onChange=this._get(inst,"onChangeMonthYear");if(onChange){onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst])}},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax){return this._determineDate(inst,this._get(inst,minMax+"Date"),null)},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[0]*numMonths[1]),1));if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var minDate=this._getMinMaxDate(inst,"min");var maxDate=this._getMinMaxDate(inst,"max");return((!minDate||date.getTime()>=minDate.getTime())&&(!maxDate||date.getTime()<=maxDate.getTime()))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate"||options=="widget")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}if(options=="option"&&arguments.length==2&&typeof arguments[1]=="string"){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.8";window["DP_jQuery_"+dpuuid]=$})(jQuery);;/*
 * jQuery UI Progressbar 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Progressbar
 *
 * Depends:
 *   jquery.ui.core.js
 *   jquery.ui.widget.js
 */(function(a){a.widget("ui.progressbar",{options:{value:0},_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this._valueMin(),"aria-valuemax":this._valueMax(),"aria-valuenow":this._value()});this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");this.valueDiv.remove();a.Widget.prototype.destroy.apply(this,arguments)},value:function(b){if(b===undefined){return this._value()}this._setOption("value",b);return this},_setOption:function(b,c){switch(b){case"value":this.options.value=c;this._refreshValue();this._trigger("change");break}a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var b=this.options.value;if(typeof b!=="number"){b=0}if(b<this._valueMin()){b=this._valueMin()}if(b>this._valueMax()){b=this._valueMax()}return b},_valueMin:function(){return 0},_valueMax:function(){return 100},_refreshValue:function(){var b=this.value();this.valueDiv[b===this._valueMax()?"addClass":"removeClass"]("ui-corner-right").width(b+"%");this.element.attr("aria-valuenow",b)}});a.extend(a.ui.progressbar,{version:"1.8"})})(jQuery);;/*
 * jQuery UI Effects 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/
 */jQuery.effects||(function(g){g.effects={};g.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(l,k){g.fx.step[k]=function(m){if(!m.colorInit){m.start=j(m.elem,k);m.end=i(m.end);m.colorInit=true}m.elem.style[k]="rgb("+Math.max(Math.min(parseInt((m.pos*(m.end[0]-m.start[0]))+m.start[0],10),255),0)+","+Math.max(Math.min(parseInt((m.pos*(m.end[1]-m.start[1]))+m.start[1],10),255),0)+","+Math.max(Math.min(parseInt((m.pos*(m.end[2]-m.start[2]))+m.start[2],10),255),0)+")"}});function i(l){var k;if(l&&l.constructor==Array&&l.length==3){return l}if(k=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(l)){return[parseInt(k[1],10),parseInt(k[2],10),parseInt(k[3],10)]}if(k=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(l)){return[parseFloat(k[1])*2.55,parseFloat(k[2])*2.55,parseFloat(k[3])*2.55]}if(k=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(l)){return[parseInt(k[1],16),parseInt(k[2],16),parseInt(k[3],16)]}if(k=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(l)){return[parseInt(k[1]+k[1],16),parseInt(k[2]+k[2],16),parseInt(k[3]+k[3],16)]}if(k=/rgba\(0, 0, 0, 0\)/.exec(l)){return a.transparent}return a[g.trim(l).toLowerCase()]}function j(m,k){var l;do{l=g.curCSS(m,k);if(l!=""&&l!="transparent"||g.nodeName(m,"body")){break}k="backgroundColor"}while(m=m.parentNode);return i(l)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};var e=["add","remove","toggle"],c={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};function f(){var n=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,o={},l,m;if(n&&n.length&&n[0]&&n[n[0]]){var k=n.length;while(k--){l=n[k];if(typeof n[l]=="string"){m=l.replace(/\-(\w)/g,function(p,q){return q.toUpperCase()});o[m]=n[l]}}}else{for(l in n){if(typeof n[l]==="string"){o[l]=n[l]}}}return o}function b(l){var k,m;for(k in l){m=l[k];if(m==null||g.isFunction(m)||k in c||(/scrollbar/).test(k)||(!(/color/i).test(k)&&isNaN(parseFloat(m)))){delete l[k]}}return l}function h(k,m){var n={_:0},l;for(l in m){if(k[l]!=m[l]){n[l]=m[l]}}return n}g.effects.animateClass=function(k,l,n,m){if(g.isFunction(n)){m=n;n=null}return this.each(function(){var r=g(this),o=r.attr("style")||" ",s=b(f.call(this)),q,p=r.attr("className");g.each(e,function(t,u){if(k[u]){r[u+"Class"](k[u])}});q=b(f.call(this));r.attr("className",p);r.animate(h(s,q),l,n,function(){g.each(e,function(t,u){if(k[u]){r[u+"Class"](k[u])}});if(typeof r.attr("style")=="object"){r.attr("style").cssText="";r.attr("style").cssText=o}else{r.attr("style",o)}if(m){m.apply(this,arguments)}})})};g.fn.extend({_addClass:g.fn.addClass,addClass:function(l,k,n,m){return k?g.effects.animateClass.apply(this,[{add:l},k,n,m]):this._addClass(l)},_removeClass:g.fn.removeClass,removeClass:function(l,k,n,m){return k?g.effects.animateClass.apply(this,[{remove:l},k,n,m]):this._removeClass(l)},_toggleClass:g.fn.toggleClass,toggleClass:function(m,l,k,o,n){if(typeof l=="boolean"||l===undefined){if(!k){return this._toggleClass(m,l)}else{return g.effects.animateClass.apply(this,[(l?{add:m}:{remove:m}),k,o,n])}}else{return g.effects.animateClass.apply(this,[{toggle:m},l,k,o])}},switchClass:function(k,m,l,o,n){return g.effects.animateClass.apply(this,[{add:m,remove:k},l,o,n])}});g.extend(g.effects,{version:"1.8",save:function(l,m){for(var k=0;k<m.length;k++){if(m[k]!==null){l.data("ec.storage."+m[k],l[0].style[m[k]])}}},restore:function(l,m){for(var k=0;k<m.length;k++){if(m[k]!==null){l.css(m[k],l.data("ec.storage."+m[k]))}}},setMode:function(k,l){if(l=="toggle"){l=k.is(":hidden")?"show":"hide"}return l},getBaseline:function(l,m){var n,k;switch(l[0]){case"top":n=0;break;case"middle":n=0.5;break;case"bottom":n=1;break;default:n=l[0]/m.height}switch(l[1]){case"left":k=0;break;case"center":k=0.5;break;case"right":k=1;break;default:k=l[1]/m.width}return{x:k,y:n}},createWrapper:function(k){if(k.parent().is(".ui-effects-wrapper")){return k.parent()}var l={width:k.outerWidth(true),height:k.outerHeight(true),"float":k.css("float")},m=g("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});k.wrap(m);m=k.parent();if(k.css("position")=="static"){m.css({position:"relative"});k.css({position:"relative"})}else{g.extend(l,{position:k.css("position"),zIndex:k.css("z-index")});g.each(["top","left","bottom","right"],function(n,o){l[o]=k.css(o);if(isNaN(parseInt(l[o],10))){l[o]="auto"}});k.css({position:"relative",top:0,left:0})}return m.css(l).show()},removeWrapper:function(k){if(k.parent().is(".ui-effects-wrapper")){return k.parent().replaceWith(k)}return k},setTransition:function(l,n,k,m){m=m||{};g.each(n,function(p,o){unit=l.cssUnit(o);if(unit[0]>0){m[o]=unit[0]*k+unit[1]}});return m}});function d(l,k,m,n){if(typeof l=="object"){n=k;m=null;k=l;l=k.effect}if(g.isFunction(k)){n=k;m=null;k={}}if(g.isFunction(m)){n=m;m=null}if(typeof k=="number"||g.fx.speeds[k]){n=m;m=k;k={}}k=k||{};m=m||k.duration;m=g.fx.off?0:typeof m=="number"?m:g.fx.speeds[m]||g.fx.speeds._default;n=n||k.complete;return[l,k,m,n]}g.fn.extend({effect:function(n,m,p,q){var l=d.apply(this,arguments),o={options:l[1],duration:l[2],callback:l[3]},k=g.effects[n];return k&&!g.fx.off?k.call(this,o):this},_show:g.fn.show,show:function(l){if(!l||typeof l=="number"||g.fx.speeds[l]){return this._show.apply(this,arguments)}else{var k=d.apply(this,arguments);k[1].mode="show";return this.effect.apply(this,k)}},_hide:g.fn.hide,hide:function(l){if(!l||typeof l=="number"||g.fx.speeds[l]){return this._hide.apply(this,arguments)}else{var k=d.apply(this,arguments);k[1].mode="hide";return this.effect.apply(this,k)}},__toggle:g.fn.toggle,toggle:function(l){if(!l||typeof l=="number"||g.fx.speeds[l]||typeof l=="boolean"||g.isFunction(l)){return this.__toggle.apply(this,arguments)}else{var k=d.apply(this,arguments);k[1].mode="toggle";return this.effect.apply(this,k)}},cssUnit:function(k){var l=this.css(k),m=[];g.each(["em","px","%","pt"],function(n,o){if(l.indexOf(o)>0){m=[parseFloat(l),o]}});return m}});g.easing.jswing=g.easing.swing;g.extend(g.easing,{def:"easeOutQuad",swing:function(l,m,k,o,n){return g.easing[g.easing.def](l,m,k,o,n)},easeInQuad:function(l,m,k,o,n){return o*(m/=n)*m+k},easeOutQuad:function(l,m,k,o,n){return -o*(m/=n)*(m-2)+k},easeInOutQuad:function(l,m,k,o,n){if((m/=n/2)<1){return o/2*m*m+k}return -o/2*((--m)*(m-2)-1)+k},easeInCubic:function(l,m,k,o,n){return o*(m/=n)*m*m+k},easeOutCubic:function(l,m,k,o,n){return o*((m=m/n-1)*m*m+1)+k},easeInOutCubic:function(l,m,k,o,n){if((m/=n/2)<1){return o/2*m*m*m+k}return o/2*((m-=2)*m*m+2)+k},easeInQuart:function(l,m,k,o,n){return o*(m/=n)*m*m*m+k},easeOutQuart:function(l,m,k,o,n){return -o*((m=m/n-1)*m*m*m-1)+k},easeInOutQuart:function(l,m,k,o,n){if((m/=n/2)<1){return o/2*m*m*m*m+k}return -o/2*((m-=2)*m*m*m-2)+k},easeInQuint:function(l,m,k,o,n){return o*(m/=n)*m*m*m*m+k},easeOutQuint:function(l,m,k,o,n){return o*((m=m/n-1)*m*m*m*m+1)+k},easeInOutQuint:function(l,m,k,o,n){if((m/=n/2)<1){return o/2*m*m*m*m*m+k}return o/2*((m-=2)*m*m*m*m+2)+k},easeInSine:function(l,m,k,o,n){return -o*Math.cos(m/n*(Math.PI/2))+o+k},easeOutSine:function(l,m,k,o,n){return o*Math.sin(m/n*(Math.PI/2))+k},easeInOutSine:function(l,m,k,o,n){return -o/2*(Math.cos(Math.PI*m/n)-1)+k},easeInExpo:function(l,m,k,o,n){return(m==0)?k:o*Math.pow(2,10*(m/n-1))+k},easeOutExpo:function(l,m,k,o,n){return(m==n)?k+o:o*(-Math.pow(2,-10*m/n)+1)+k},easeInOutExpo:function(l,m,k,o,n){if(m==0){return k}if(m==n){return k+o}if((m/=n/2)<1){return o/2*Math.pow(2,10*(m-1))+k}return o/2*(-Math.pow(2,-10*--m)+2)+k},easeInCirc:function(l,m,k,o,n){return -o*(Math.sqrt(1-(m/=n)*m)-1)+k},easeOutCirc:function(l,m,k,o,n){return o*Math.sqrt(1-(m=m/n-1)*m)+k},easeInOutCirc:function(l,m,k,o,n){if((m/=n/2)<1){return -o/2*(Math.sqrt(1-m*m)-1)+k}return o/2*(Math.sqrt(1-(m-=2)*m)+1)+k},easeInElastic:function(l,n,k,u,r){var o=1.70158;var q=0;var m=u;if(n==0){return k}if((n/=r)==1){return k+u}if(!q){q=r*0.3}if(m<Math.abs(u)){m=u;var o=q/4}else{var o=q/(2*Math.PI)*Math.asin(u/m)}return -(m*Math.pow(2,10*(n-=1))*Math.sin((n*r-o)*(2*Math.PI)/q))+k},easeOutElastic:function(l,n,k,u,r){var o=1.70158;var q=0;var m=u;if(n==0){return k}if((n/=r)==1){return k+u}if(!q){q=r*0.3}if(m<Math.abs(u)){m=u;var o=q/4}else{var o=q/(2*Math.PI)*Math.asin(u/m)}return m*Math.pow(2,-10*n)*Math.sin((n*r-o)*(2*Math.PI)/q)+u+k},easeInOutElastic:function(l,n,k,u,r){var o=1.70158;var q=0;var m=u;if(n==0){return k}if((n/=r/2)==2){return k+u}if(!q){q=r*(0.3*1.5)}if(m<Math.abs(u)){m=u;var o=q/4}else{var o=q/(2*Math.PI)*Math.asin(u/m)}if(n<1){return -0.5*(m*Math.pow(2,10*(n-=1))*Math.sin((n*r-o)*(2*Math.PI)/q))+k}return m*Math.pow(2,-10*(n-=1))*Math.sin((n*r-o)*(2*Math.PI)/q)*0.5+u+k},easeInBack:function(l,m,k,p,o,n){if(n==undefined){n=1.70158}return p*(m/=o)*m*((n+1)*m-n)+k},easeOutBack:function(l,m,k,p,o,n){if(n==undefined){n=1.70158}return p*((m=m/o-1)*m*((n+1)*m+n)+1)+k},easeInOutBack:function(l,m,k,p,o,n){if(n==undefined){n=1.70158}if((m/=o/2)<1){return p/2*(m*m*(((n*=(1.525))+1)*m-n))+k}return p/2*((m-=2)*m*(((n*=(1.525))+1)*m+n)+2)+k},easeInBounce:function(l,m,k,o,n){return o-g.easing.easeOutBounce(l,n-m,0,o,n)+k},easeOutBounce:function(l,m,k,o,n){if((m/=n)<(1/2.75)){return o*(7.5625*m*m)+k}else{if(m<(2/2.75)){return o*(7.5625*(m-=(1.5/2.75))*m+0.75)+k}else{if(m<(2.5/2.75)){return o*(7.5625*(m-=(2.25/2.75))*m+0.9375)+k}else{return o*(7.5625*(m-=(2.625/2.75))*m+0.984375)+k}}}},easeInOutBounce:function(l,m,k,o,n){if(m<n/2){return g.easing.easeInBounce(l,m*2,0,o,n)*0.5+k}return g.easing.easeOutBounce(l,m*2-n,0,o,n)*0.5+o*0.5+k}})})(jQuery);;/*
 * jQuery UI Effects Blind 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Blind
 *
 * Depends:
 *	jquery.effects.core.js
 */(function(a){a.effects.blind=function(b){return this.queue(function(){var d=a(this),c=["position","top","left"];var h=a.effects.setMode(d,b.options.mode||"hide");var g=b.options.direction||"vertical";a.effects.save(d,c);d.show();var j=a.effects.createWrapper(d).css({overflow:"hidden"});var e=(g=="vertical")?"height":"width";var i=(g=="vertical")?j.height():j.width();if(h=="show"){j.css(e,0)}var f={};f[e]=h=="show"?i:0;j.animate(f,b.duration,b.options.easing,function(){if(h=="hide"){d.hide()}a.effects.restore(d,c);a.effects.removeWrapper(d);if(b.callback){b.callback.apply(d[0],arguments)}d.dequeue()})})}})(jQuery);;/*
 * jQuery UI Effects Bounce 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Bounce
 *
 * Depends:
 *	jquery.effects.core.js
 */(function(a){a.effects.bounce=function(b){return this.queue(function(){var e=a(this),l=["position","top","left"];var k=a.effects.setMode(e,b.options.mode||"effect");var n=b.options.direction||"up";var c=b.options.distance||20;var d=b.options.times||5;var g=b.duration||250;if(/show|hide/.test(k)){l.push("opacity")}a.effects.save(e,l);e.show();a.effects.createWrapper(e);var f=(n=="up"||n=="down")?"top":"left";var p=(n=="up"||n=="left")?"pos":"neg";var c=b.options.distance||(f=="top"?e.outerHeight({margin:true})/3:e.outerWidth({margin:true})/3);if(k=="show"){e.css("opacity",0).css(f,p=="pos"?-c:c)}if(k=="hide"){c=c/(d*2)}if(k!="hide"){d--}if(k=="show"){var h={opacity:1};h[f]=(p=="pos"?"+=":"-=")+c;e.animate(h,g/2,b.options.easing);c=c/2;d--}for(var j=0;j<d;j++){var o={},m={};o[f]=(p=="pos"?"-=":"+=")+c;m[f]=(p=="pos"?"+=":"-=")+c;e.animate(o,g/2,b.options.easing).animate(m,g/2,b.options.easing);c=(k=="hide")?c*2:c/2}if(k=="hide"){var h={opacity:0};h[f]=(p=="pos"?"-=":"+=")+c;e.animate(h,g/2,b.options.easing,function(){e.hide();a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}})}else{var o={},m={};o[f]=(p=="pos"?"-=":"+=")+c;m[f]=(p=="pos"?"+=":"-=")+c;e.animate(o,g/2,b.options.easing).animate(m,g/2,b.options.easing,function(){a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}})}e.queue("fx",function(){e.dequeue()});e.dequeue()})}})(jQuery);;/*
 * jQuery UI Effects Clip 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Clip
 *
 * Depends:
 *	jquery.effects.core.js
 */(function(a){a.effects.clip=function(b){return this.queue(function(){var f=a(this),j=["position","top","left","height","width"];var i=a.effects.setMode(f,b.options.mode||"hide");var k=b.options.direction||"vertical";a.effects.save(f,j);f.show();var c=a.effects.createWrapper(f).css({overflow:"hidden"});var e=f[0].tagName=="IMG"?c:f;var g={size:(k=="vertical")?"height":"width",position:(k=="vertical")?"top":"left"};var d=(k=="vertical")?e.height():e.width();if(i=="show"){e.css(g.size,0);e.css(g.position,d/2)}var h={};h[g.size]=i=="show"?d:0;h[g.position]=i=="show"?0:d/2;e.animate(h,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){f.hide()}a.effects.restore(f,j);a.effects.removeWrapper(f);if(b.callback){b.callback.apply(f[0],arguments)}f.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Drop 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Drop
 *
 * Depends:
 *	jquery.effects.core.js
 */(function(a){a.effects.drop=function(b){return this.queue(function(){var e=a(this),d=["position","top","left","opacity"];var i=a.effects.setMode(e,b.options.mode||"hide");var h=b.options.direction||"left";a.effects.save(e,d);e.show();a.effects.createWrapper(e);var f=(h=="up"||h=="down")?"top":"left";var c=(h=="up"||h=="left")?"pos":"neg";var j=b.options.distance||(f=="top"?e.outerHeight({margin:true})/2:e.outerWidth({margin:true})/2);if(i=="show"){e.css("opacity",0).css(f,c=="pos"?-j:j)}var g={opacity:i=="show"?1:0};g[f]=(i=="show"?(c=="pos"?"+=":"-="):(c=="pos"?"-=":"+="))+j;e.animate(g,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){e.hide()}a.effects.restore(e,d);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Explode 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Explode
 *
 * Depends:
 *	jquery.effects.core.js
 */(function(a){a.effects.explode=function(b){return this.queue(function(){var k=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;var e=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;b.options.mode=b.options.mode=="toggle"?(a(this).is(":visible")?"hide":"show"):b.options.mode;var h=a(this).show().css("visibility","hidden");var l=h.offset();l.top-=parseInt(h.css("marginTop"),10)||0;l.left-=parseInt(h.css("marginLeft"),10)||0;var g=h.outerWidth(true);var c=h.outerHeight(true);for(var f=0;f<k;f++){for(var d=0;d<e;d++){h.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-d*(g/e),top:-f*(c/k)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/e,height:c/k,left:l.left+d*(g/e)+(b.options.mode=="show"?(d-Math.floor(e/2))*(g/e):0),top:l.top+f*(c/k)+(b.options.mode=="show"?(f-Math.floor(k/2))*(c/k):0),opacity:b.options.mode=="show"?0:1}).animate({left:l.left+d*(g/e)+(b.options.mode=="show"?0:(d-Math.floor(e/2))*(g/e)),top:l.top+f*(c/k)+(b.options.mode=="show"?0:(f-Math.floor(k/2))*(c/k)),opacity:b.options.mode=="show"?1:0},b.duration||500)}}setTimeout(function(){b.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();if(b.callback){b.callback.apply(h[0])}h.dequeue();a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);;/*
 * jQuery UI Effects Fold 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Fold
 *
 * Depends:
 *	jquery.effects.core.js
 */(function(a){a.effects.fold=function(b){return this.queue(function(){var e=a(this),k=["position","top","left"];var h=a.effects.setMode(e,b.options.mode||"hide");var o=b.options.size||15;var n=!(!b.options.horizFirst);var g=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(e,k);e.show();var d=a.effects.createWrapper(e).css({overflow:"hidden"});var i=((h=="show")!=n);var f=i?["width","height"]:["height","width"];var c=i?[d.width(),d.height()]:[d.height(),d.width()];var j=/([0-9]+)%/.exec(o);if(j){o=parseInt(j[1],10)/100*c[h=="hide"?0:1]}if(h=="show"){d.css(n?{height:0,width:o}:{height:o,width:0})}var m={},l={};m[f[0]]=h=="show"?c[0]:o;l[f[1]]=h=="show"?c[1]:0;d.animate(m,g,b.options.easing).animate(l,g,b.options.easing,function(){if(h=="hide"){e.hide()}a.effects.restore(e,k);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(e[0],arguments)}e.dequeue()})})}})(jQuery);;/*
 * jQuery UI Effects Highlight 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Highlight
 *
 * Depends:
 *	jquery.effects.core.js
 */(function(a){a.effects.highlight=function(b){return this.queue(function(){var d=a(this),c=["backgroundImage","backgroundColor","opacity"],f=a.effects.setMode(d,b.options.mode||"show"),e={backgroundColor:d.css("backgroundColor")};if(f=="hide"){e.opacity=0}a.effects.save(d,c);d.show().css({backgroundImage:"none",backgroundColor:b.options.color||"#ffff99"}).animate(e,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){(f=="hide"&&d.hide());a.effects.restore(d,c);(f=="show"&&!a.support.opacity&&this.style.removeAttribute("filter"));(b.callback&&b.callback.apply(this,arguments));d.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Pulsate 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Pulsate
 *
 * Depends:
 *	jquery.effects.core.js
 */(function(a){a.effects.pulsate=function(b){return this.queue(function(){var d=a(this),e=a.effects.setMode(d,b.options.mode||"show");times=((b.options.times||5)*2)-1;duration=b.duration?b.duration/2:a.fx.speeds._default/2,isVisible=d.is(":visible"),animateTo=0;if(!isVisible){d.css("opacity",0).show();animateTo=1}if((e=="hide"&&isVisible)||(e=="show"&&!isVisible)){times--}for(var c=0;c<times;c++){d.animate({opacity:animateTo},duration,b.options.easing);animateTo=(animateTo+1)%2}d.animate({opacity:animateTo},duration,b.options.easing,function(){if(animateTo==0){d.hide()}(b.callback&&b.callback.apply(this,arguments))});d.queue("fx",function(){d.dequeue()}).dequeue()})}})(jQuery);;/*
 * jQuery UI Effects Scale 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Scale
 *
 * Depends:
 *	jquery.effects.core.js
 */(function(a){a.effects.puff=function(b){return this.queue(function(){var f=a(this),g=a.effects.setMode(f,b.options.mode||"hide"),e=parseInt(b.options.percent,10)||150,d=e/100,c={height:f.height(),width:f.width()};a.extend(b.options,{fade:true,mode:g,percent:g=="hide"?e:100,from:g=="hide"?c:{height:c.height*d,width:c.width*d}});f.effect("scale",b.options,b.duration,b.callback);f.dequeue()})};a.effects.scale=function(b){return this.queue(function(){var g=a(this);var d=a.extend(true,{},b.options);var j=a.effects.setMode(g,b.options.mode||"effect");var h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:(j=="hide"?0:100));var i=b.options.direction||"both";var c=b.options.origin;if(j!="effect"){d.origin=c||["middle","center"];d.restore=true}var f={height:g.height(),width:g.width()};g.from=b.options.from||(j=="show"?{height:0,width:0}:f);var e={y:i!="horizontal"?(h/100):1,x:i!="vertical"?(h/100):1};g.to={height:f.height*e.y,width:f.width*e.x};if(b.options.fade){if(j=="show"){g.from.opacity=0;g.to.opacity=1}if(j=="hide"){g.from.opacity=1;g.to.opacity=0}}d.from=g.from;d.to=g.to;d.mode=j;g.effect("size",d,b.duration,b.callback);g.dequeue()})};a.effects.size=function(b){return this.queue(function(){var c=a(this),n=["position","top","left","width","height","overflow","opacity"];var m=["position","top","left","overflow","opacity"];var j=["width","height","overflow"];var p=["fontSize"];var k=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"];var f=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"];var g=a.effects.setMode(c,b.options.mode||"effect");var i=b.options.restore||false;var e=b.options.scale||"both";var o=b.options.origin;var d={height:c.height(),width:c.width()};c.from=b.options.from||d;c.to=b.options.to||d;if(o){var h=a.effects.getBaseline(o,d);c.from.top=(d.height-c.from.height)*h.y;c.from.left=(d.width-c.from.width)*h.x;c.to.top=(d.height-c.to.height)*h.y;c.to.left=(d.width-c.to.width)*h.x}var l={from:{y:c.from.height/d.height,x:c.from.width/d.width},to:{y:c.to.height/d.height,x:c.to.width/d.width}};if(e=="box"||e=="both"){if(l.from.y!=l.to.y){n=n.concat(k);c.from=a.effects.setTransition(c,k,l.from.y,c.from);c.to=a.effects.setTransition(c,k,l.to.y,c.to)}if(l.from.x!=l.to.x){n=n.concat(f);c.from=a.effects.setTransition(c,f,l.from.x,c.from);c.to=a.effects.setTransition(c,f,l.to.x,c.to)}}if(e=="content"||e=="both"){if(l.from.y!=l.to.y){n=n.concat(p);c.from=a.effects.setTransition(c,p,l.from.y,c.from);c.to=a.effects.setTransition(c,p,l.to.y,c.to)}}a.effects.save(c,i?n:m);c.show();a.effects.createWrapper(c);c.css("overflow","hidden").css(c.from);if(e=="content"||e=="both"){k=k.concat(["marginTop","marginBottom"]).concat(p);f=f.concat(["marginLeft","marginRight"]);j=n.concat(k).concat(f);c.find("*[width]").each(function(){child=a(this);if(i){a.effects.save(child,j)}var q={height:child.height(),width:child.width()};child.from={height:q.height*l.from.y,width:q.width*l.from.x};child.to={height:q.height*l.to.y,width:q.width*l.to.x};if(l.from.y!=l.to.y){child.from=a.effects.setTransition(child,k,l.from.y,child.from);child.to=a.effects.setTransition(child,k,l.to.y,child.to)}if(l.from.x!=l.to.x){child.from=a.effects.setTransition(child,f,l.from.x,child.from);child.to=a.effects.setTransition(child,f,l.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){if(i){a.effects.restore(child,j)}})})}c.animate(c.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(c.to.opacity===0){c.css("opacity",c.from.opacity)}if(g=="hide"){c.hide()}a.effects.restore(c,i?n:m);a.effects.removeWrapper(c);if(b.callback){b.callback.apply(this,arguments)}c.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Shake 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Shake
 *
 * Depends:
 *	jquery.effects.core.js
 */(function(a){a.effects.shake=function(b){return this.queue(function(){var e=a(this),l=["position","top","left"];var k=a.effects.setMode(e,b.options.mode||"effect");var n=b.options.direction||"left";var c=b.options.distance||20;var d=b.options.times||3;var g=b.duration||b.options.duration||140;a.effects.save(e,l);e.show();a.effects.createWrapper(e);var f=(n=="up"||n=="down")?"top":"left";var p=(n=="up"||n=="left")?"pos":"neg";var h={},o={},m={};h[f]=(p=="pos"?"-=":"+=")+c;o[f]=(p=="pos"?"+=":"-=")+c*2;m[f]=(p=="pos"?"-=":"+=")+c*2;e.animate(h,g,b.options.easing);for(var j=1;j<d;j++){e.animate(o,g,b.options.easing).animate(m,g,b.options.easing)}e.animate(o,g,b.options.easing).animate(h,g/2,b.options.easing,function(){a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}});e.queue("fx",function(){e.dequeue()});e.dequeue()})}})(jQuery);;/*
 * jQuery UI Effects Slide 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Slide
 *
 * Depends:
 *	jquery.effects.core.js
 */(function(a){a.effects.slide=function(b){return this.queue(function(){var e=a(this),d=["position","top","left"];var i=a.effects.setMode(e,b.options.mode||"show");var h=b.options.direction||"left";a.effects.save(e,d);e.show();a.effects.createWrapper(e).css({overflow:"hidden"});var f=(h=="up"||h=="down")?"top":"left";var c=(h=="up"||h=="left")?"pos":"neg";var j=b.options.distance||(f=="top"?e.outerHeight({margin:true}):e.outerWidth({margin:true}));if(i=="show"){e.css(f,c=="pos"?-j:j)}var g={};g[f]=(i=="show"?(c=="pos"?"+=":"-="):(c=="pos"?"-=":"+="))+j;e.animate(g,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){e.hide()}a.effects.restore(e,d);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Transfer 1.8
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Transfer
 *
 * Depends:
 *	jquery.effects.core.js
 */(function(a){a.effects.transfer=function(b){return this.queue(function(){var f=a(this),h=a(b.options.to),e=h.offset(),g={top:e.top,left:e.left,height:h.innerHeight(),width:h.innerWidth()},d=f.offset(),c=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(b.options.className).css({top:d.top,left:d.left,height:f.innerHeight(),width:f.innerWidth(),position:"absolute"}).animate(g,b.duration,b.options.easing,function(){c.remove();(b.callback&&b.callback.apply(f[0],arguments));f.dequeue()})})}})(jQuery);;     ./mvappsvr/docroot/db/javascripts/printing.js                                                       0000666 0000000 0000000 00000006161 12534142432 020356  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   jQuery.noConflict();
jQuery(document).ready(function() {

	jQuery('.widget_controls a.DansClass').live("click",
		function() {
			jQuery('.widget').not('#printFrame .widget').addClass('noprint');
			var widget = jQuery(this).parents('.widget');
			var printFrame = jQuery('#printFrame');

			printFrame.html("");
			if (widget.find('object, embed').length != 0) {
				var title = widget.find('h3.title').html();
				printFrame.prepend("<h3 class='title'>" + title + "</h3><div id='printFrameFlash'></div>");
				PrintFlash.init(widget);
			} else {
				widget.addClass('printme').clone().appendTo(printFrame);
				window.print();
			}
			return false;
		}	
	);
});

var PrintFlash = {
	source: "",
	chartXML: "",
	chartClass: "",
	oWidth: "",
	oHeight: "",
	printWidth: "",
	printHeight: "",
	maxWidth: "",
	maxHeight: "",
	widget: "",
	init: function(widget) {
		this.resetVars();
		this.widget = widget;
		this.setPrintVars();
	},
	resetVars: function() {
		this.source = "";
		this.chartXML = "";
		this.chartclass = "";
		this.oWidth = "";
		this.oHeight = "";
		this.printHeight = "";
		this.maxWidth = "620";
		this.printWidth = this.maxWidth;
		this.maxHeight = "800";
		this.widget = "";
	},
	setPrintVars: function() {
		var widget = this.widget;
		var embedObj = "";
		
		if (widget.find('object').length != 0) {
			embedObj = widget.find('object');
		} else if (widget.find('embed').length != 0) {
			embedObj = widget.find('embed');
		} else {
			return false;
		}
		
		this.oWidth = embedObj.attr('width');
                this.oHeight = embedObj.attr('height');
		this.source = widget.find('input.chartSource').val();
		this.chartClass = widget.find('input.chartClass').val();
		this.chartXML = widget.find('input.chartXML').val();
		var moreXML = this.chartXML.slice(6, this.chartXML.length);

		switch (this.chartClass) {
			case "fcmap":
				this.chartXML = "<map animation='0' defaultAnimation='0' " + moreXML;
				break;
			case "fw":
				this.chartXML = "<chart animation='0' defaultAnimation='0' " + moreXML;
				break;
			case "fcf":
				this.chartXML = "<graph animation='0'" + moreXML;
				break;
			default:
				break;
		}

		this.printHeight = Math.floor((this.oHeight * this.maxWidth) / this.oWidth);
		if (this.printHeight > this.maxHeight) {
			this.printHeight = this.maxHeight;
			this.printWidth = Math.floor((this.oWidth * this.maxHeight) / this.oHeight);
		}

		this.renderChart();
	},
	renderChart: function() {
		switch (this.chartClass) {
			case "fcf":
			case "fw":
				var chart = new FusionCharts(this.source, "printChart", this.printWidth, this.printHeight, "0", "1");
                		chart.setDataXML(this.chartXML);
		                chart.render("printFrameFlash");
				break;
			case "fcmap":
				var map = new FusionMaps(this.source, "printChart", this.printWidth, this.printHeight, "0", "1");
		   		map.setDataXML(this.chartXML);		   
		   		map.render("printFrameFlash");
				break;
			default:
				return false;
				break;
		}
		if (this.chartClass == "fcf") {
			setTimeout(printWindow, 1000);
		}
	}
}

function FC_Rendered(DOMId) {
	if (DOMId=="printChart") {
		printWindow();
	}
}

printWindow = function() {
	window.print();
}
                                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/javascripts/edit_area.css                                                     0000777 0000000 0000000 00000021663 12534142432 020624  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   body, html{
	margin: 0; 
	padding: 0;
	height: 100%;
	border: none;
	overflow: hidden;
	background-color: #FFF;
}

body, html, table, form, textarea{
	font: 12px monospace, sans-serif;
}

#editor{
	border: solid #888 1px;
	overflow: hidden;
}

#result{
	z-index: 4; 
	overflow-x: auto;
	overflow-y: scroll;
	border-top: solid #888 1px;
	border-bottom: solid #888 1px;
	position: relative;
	clear: both;
}

#result.empty{
	overflow: hidden;
}

#container{
	overflow: hidden;
	border: solid blue 0;
	position: relative; 
	z-index: 10;
	padding: 0 5px 0 45px;
	/*padding-right: 5px;*/ 
}

#textarea{
	position: relative; 
	top: 0; 
	left: 0;
	margin: 0;
	padding: 0;
	width: 100%;
	height: 100%; 
	overflow: hidden;  
	z-index: 7; 
	border-width: 0;
	background-color: transparent;
	resize: none;
}

#textarea, #textarea:hover{
	outline: none;	/* safari outline fix */
}

#content_highlight{
	white-space: pre;
	margin: 0;
	padding: 0;
	position : absolute; 
	z-index: 4; 
	overflow: visible;
}


#selection_field, #selection_field_text{
	margin: 0; 
	background-color: #E1F2F9; 
/*	height: 1px; */  
	position: absolute;
	z-index: 5;
	top: -100px;
	padding: 0;
	white-space: pre;
	overflow: hidden;
}

#selection_field.show_colors {
	z-index: 3;
	background-color:#EDF9FC;
	
}

#selection_field strong{
	font-weight:normal;
}

#selection_field.show_colors *, #selection_field_text * {
	visibility: hidden;
}

#selection_field_text{
	background-color:transparent;
}

#selection_field_text strong{
	font-weight:normal;
	background-color:#3399FE;
	color: #FFF;
	visibility:visible;
}

#container.word_wrap #content_highlight,
#container.word_wrap #selection_field,
#container.word_wrap #selection_field_text,
#container.word_wrap #test_font_size{
	white-space: pre-wrap;       /* css-3 */
	white-space: -moz-pre-wrap !important;  /* Mozilla, since 1999 */
	white-space: -pre-wrap;      /* Opera 4-6 */
	white-space: -o-pre-wrap;    /* Opera 7 */
	word-wrap: break-word;       /* Internet Explorer 5.5+ */
	width: 99%;
}

#line_number{
	position: absolute;
	overflow: hidden;
	border-right: solid black 1px;
	z-index:8;
	width: 38px;
	padding: 0 5px 0 0;
	margin: 0 0 0 -45px;
	text-align: right;
	color: #AAAAAA;
}

#test_font_size{
	padding: 0; 
	margin: 0; 
	visibility: hidden;
	position: absolute;
	white-space: pre;
}

pre{
	margin: 0;
	padding: 0;
}

.hidden{
	opacity: 0.2; 
	filter:alpha(opacity=20);
}

#result .edit_area_cursor{
	position: absolute; 
	z-index:6; 
	background-color: #FF6633;
	top: -100px;
	margin: 0;
}

#result .edit_area_selection_field .overline{
	background-color: #996600;
}


/* area popup */
.editarea_popup{
	border: solid 1px #888888;
	background-color: #ECE9D8; 
	width: 250px; 
	padding: 4px; 
	position: absolute;
	visibility: hidden; 
	z-index: 15;
	top: -500px;
}

.editarea_popup, .editarea_popup table{
	font-family: sans-serif;
	font-size: 10pt;
}

.editarea_popup img{
	border: 0;
}

.editarea_popup .close_popup{
	float: right; 
	line-height: 16px; 
	border: 0; 
	padding: 0;
}

.editarea_popup h1,.editarea_popup h2,.editarea_popup h3,.editarea_popup h4,.editarea_popup h5,.editarea_popup h6{
	margin: 0;
	padding: 0;
}

.editarea_popup .copyright{
	text-align: right;
}	

/* Area_search */
div#area_search_replace{
	/*width: 250px;*/
}

div#area_search_replace img{
	border: 0;
}

div#area_search_replace div.button{
	text-align: center;
	line-height: 1.7em;
}

div#area_search_replace .button a{
	cursor: pointer;
	border: solid 1px #888888;
	background-color: #DEDEDE;
	text-decoration: none;
	padding: 0 2px;
	color: #000000;	
	white-space: nowrap;
}

div#area_search_replace a:hover{	
	/*border: solid 1px #888888;*/
	background-color: #EDEDED;
}

div#area_search_replace  #move_area_search_replace{
	cursor: move; 
	border: solid 1px #888;
}

div#area_search_replace  #close_area_search_replace{
	text-align: right; 
	vertical-align: top; 
	white-space: nowrap;
}

div#area_search_replace  #area_search_msg{
	height: 18px; 
	overflow: hidden; 
	border-top: solid 1px #888; 
	margin-top: 3px;
}

/* area help */
#edit_area_help{
	width: 350px;
}

#edit_area_help div.close_popup{
	float: right;
}

/* area_toolbar */
.area_toolbar{
	/*font: 11px sans-serif;*/
	width: 100%; 
	/*height: 21px; */
	margin: 0; 
	padding: 0;
	background-color: #ECE9D8;
	text-align: center;
}

.area_toolbar, .area_toolbar table{
	font: 11px sans-serif;
}

.area_toolbar img{
	border: 0;
	vertical-align: middle;
}

.area_toolbar input{
	margin: 0;
	padding: 0;
}

.area_toolbar select{
    font-family: 'MS Sans Serif',sans-serif,Verdana,Arial;
    font-size: 7pt;
    font-weight: normal;
    margin: 2px 0 0 0 ;
    padding: 0;
    vertical-align: top;
    background-color: #F0F0EE;
}

table.statusbar{
	width: 100%;
}

.area_toolbar td.infos{
	text-align: center;
	width: 130px;
	border-right: solid 1px #888;
	border-width: 0 1px 0 0;
	padding: 0;
}

.area_toolbar td.total{
	text-align: right;
	width: 50px;
	padding: 0;
}

.area_toolbar td.resize{
	text-align: right;
}
/*
.area_toolbar span{
	line-height: 1px;
	padding: 0;
	margin: 0;
}*/

.area_toolbar span#resize_area{
	cursor: nw-resize;
	visibility: hidden;
}

/* toolbar buttons */
.editAreaButtonNormal, .editAreaButtonOver, .editAreaButtonDown, .editAreaSeparator, .editAreaSeparatorLine, .editAreaButtonDisabled, .editAreaButtonSelected {
	border: 0; margin: 0; padding: 0; background: transparent;
	margin-top: 0;
	margin-left: 1px;
	padding: 0;
}

.editAreaButtonNormal {
	border: 1px solid #ECE9D8 !important;
	cursor: pointer;
}

.editAreaButtonOver {
	border: 1px solid #0A246A !important;
	cursor: pointer;
	background-color: #B6BDD2;
}

.editAreaButtonDown {
	cursor: pointer;
	border: 1px solid #0A246A !important;
	background-color: #8592B5;
}

.editAreaButtonSelected {
	border: 1px solid #C0C0BB !important;
	cursor: pointer;
	background-color: #F4F2E8;
}

.editAreaButtonDisabled {
	filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);
	-moz-opacity:0.3;
	opacity: 0.3;
	border: 1px solid #F0F0EE !important;
	cursor: pointer;
}

.editAreaSeparatorLine {
	margin: 1px 2px;
	background-color: #C0C0BB;
	width: 2px;
	height: 18px;
}

/* waiting screen */
#processing{
	display: none; 
	background-color:#ECE9D8; 
	border: solid #888 1px;
	position: absolute; 
	top: 0; 
	left: 0;
	width: 100%; 
	height: 100%; 
	z-index: 100; 
	text-align: center;
}

#processing_text{
	position:absolute;
	left: 50%;
	top: 50%;
	width: 200px;
	height: 20px; 
	margin-left: -100px;
	margin-top: -10px;
	text-align: center;
}
/* end */


/**** tab browsing area ****/
#tab_browsing_area{
	display: none;
	background-color: #CCC9A8;
	border-top: 1px solid #888;
	text-align: left;
	margin: 0;
}

#tab_browsing_list {
	padding: 0; 
	margin: 0; 
	list-style-type: none;
	white-space: nowrap;
}
#tab_browsing_list li {
	float: left;
	margin: -1px;
}
#tab_browsing_list a {
	position: relative;
	display: block; 
	text-decoration: none; 
	float: left; 
	cursor: pointer;
	line-height:14px;
}

#tab_browsing_list a span {
	display: block; 
	color: #000; 
	background: #ECE9D8; 
	border:	1px solid #888; 
	border-width: 1px 1px 0; 
	text-align: center; 
	padding: 2px 2px 1px 4px; 
	position: relative;	/*IE 6 hack */
}

#tab_browsing_list a b {
	display: block; 
	border-bottom: 2px solid #617994;
}

#tab_browsing_list a .edited {
	display: none;
}

#tab_browsing_list a.edited .edited {
	display: inline;
}

#tab_browsing_list a img{
	margin-left: 7px;
}

#tab_browsing_list a.edited img{
	margin-left: 3px;
}

#tab_browsing_list a:hover span {
	background: #F4F2E8;
	border-color: #0A246A;
}

#tab_browsing_list .selected a span{
	background: #046380;
	color: #FFF;
}


#no_file_selected{
	height: 100%;
	width: 150%; /* Opera need more than 100% */
	background: #CCC;
	display: none;
	z-index: 20;
	position: absolute;
}


/*** Non-editable mode ***/
.non_editable #editor
{
	border-width: 0 1px;
}

.non_editable .area_toolbar
{
	display: none;
}

/*** Auto completion ***/
#auto_completion_area
{
	background:	#FFF;
	border:		solid 1px #888;
	position:	absolute;
	z-index:	15;
	width:	280px;
	height:	180px;
	overflow: auto;
	display:none;
}

#auto_completion_area a, #auto_completion_area a:visited
{
	display:	block;
	padding:	0 2px 1px;
	color:		#000;
	text-decoration:none;
}

#auto_completion_area a:hover, #auto_completion_area a:focus, #auto_completion_area a.focus
{
	background:	#D6E1FE;
	text-decoration:none;
}

#auto_completion_area ul
{
	margin:	0;
	padding: 0;
	list-style: none inside;
}
#auto_completion_area li
{
	padding:	0;
}
#auto_completion_area .prefix
{
	font-style: italic;
	padding: 0 3px;
}                                                                             ./mvappsvr/docroot/db/javascripts/global.js                                                         0000666 0000000 0000000 00000000660 12534142432 017762  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   $(document).ready(function() {

	// perform JavaScript after the document is scriptable.
	$(function() {
		// setup ul.tabs to work as tabs for each div directly under div.panes
		$("ul.tabs").tabs("div.panes > div.pane");
	});
	
	var triggers = $("button.edit").overlay({
	
		// some expose tweaks suitable for modal dialogs
		expose: {
			color: '#000000',
			loadSpeed: 200,
			opacity: 0.9
		},
	
		closeOnClick: false
	});

});                                                                                ./mvappsvr/docroot/db/javascripts/tablesort.js                                                      0000777 0000000 0000000 00000013746 12534142432 020535  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /**
 * @author Manish Shrestha
 * For SierraBravo Corporations
 */

      (function($) {

        // This plugin should be able to take a table, and make the rows sortable, editable and customizable
        
		$.fn.tablesort = function(options) {

          // build main options before element iteration
          var opts = $.extend({}, $.fn.tablesort.defaults, options);

          // iterate and reformat each matched element
          return this.each(function() {
            $this = $(this);
           
			$.fn.makeSortable($this);
			
			//Initializing all functionalities of widget
			
			//If add and delete buttons
			if($this.hasClass('addButtons')){
				$.fn.addButtons($this);
			}
			
			//Making columns editable if applicable
			$.fn.makeEditable($this);
			
          });

        };

        // Plugin defaults
        $.fn.tablesort.defaults = {
			image_path : "/db/images/",
			image_up : "arrow-up.gif",
			image_down : "arrow-down.gif",
			image_none : "arrow-none.gif",
			europeandate : true,
			alternate_row_colors : true
  
        };
		///////////////////////////////////////
		//  PRIVATE METHODS
		///////////////////////////////////////
		
		//Sortable function
		$.fn.makeSortable = function(t) {
			
			var o = $.fn.tablesort.defaults;
			var rows = t.children('tbody').children('tr');
			
			if (rows && rows.length > 0) {
				tHead = t.children('tHead');
				tHeadRows = tHead.children('tr');
				if (tHead && tHeadRows.length > 0) {
					var firstRow = tHeadRows[tHeadRows.length-1];
					thead = true;
				} else {
					var firstRow = t.children('tr')[0];
				}
			}
			//Cancel if no rows exist
			if (!firstRow) return;
			
			if(t.hasClass('addButtons')){
				
				for(i=0; i<rows.length; i++){
					
					$(rows[i]).bind('click',{row:rows[i]}, function(e){
						if($(this).hasClass('selected')){
							$(this).removeClass('selected');
						}else{
							$(this).addClass('selected');

							$($(this).parent('tbody').parent('table').parent('.widget_content_padding').children('.tDiv').children('.fbutton')[1]).children('div').children('.delete').removeClass('hidden');
						}
					});
				}
			}
			
			// We have a first row: assume it's the header, and make its contents clickable links
			var titles = new Array();
			for (var i=0;i<firstRow.cells.length;i++) {
				var cell = firstRow.cells[i];
				var txt = $(cell).text();
				titles.push(txt);
				if (!$(cell).hasClass('unsortable')) {
					
					cell.innerHTML = '<a href="#" class="sortheader">'+txt+'<span class="sortarrow">&nbsp;&nbsp;<img src="'+ o.image_path + o.image_none + '" alt="&darr;"/></span></a>';
					
					$(cell).bind("click", {index:i}, function(e){
						
						ts_resortTable(e.target, e.data.index)
						return false;
					})
					
				}
			}
			var footer = t.children('tfoot').children('tr').children('td');
			
			for(i=0;i<footer.length;i++){
				$(footer[i]).html('<input type="text" name="'+titles[i]+'" id="'+titles[i]+'" />')
				if(i == (footer.length-1)){
					$(footer[i]).html('<input type="text" name="'+titles[i]+'" id="'+titles[i]+'" /><input type="button" value="submit" onclick="submitTable(this);"/>')
				}
			}
			t.children('tfoot').hide();
			if (o.alternate_row_colors) {
				$.fn.alternate(t);
			}
			
		}
		
		// Method to add even and odd classes to rows
		$.fn.alternate = function(t) {
			t.children('tbody').children('tr:even').addClass('even');
			t.children('tbody').children('tr:odd').addClass('odd');
		}
		
		// Method to add top add and delete buttons
		$.fn.addButtons = function(t) {
			tableWidth = t.width();
			t.before('<div class="tDiv" style="width:'+tableWidth+'px"><div class="fbutton"><div><span style="padding-left: 20px;" class="add" onclick="openFooter(this);">Add</span></div></div><div class="fbutton"><div><span style="padding-left: 20px;" class="delete hidden" onclick="deleteRows(this);">Delete</span></div></div><div class="btnseparator"></div></div><div style="clear: both;"></div>');
			t.css('margin-top', 0);
			
		}
		
		// Method to make cells editable
		$.fn.makeEditable = function(t){
			var tableHead = t.children('thead').children('tr').children('th');
			
			var rows = t.children('tbody').children('tr');
			rows.each(function() {
            	$this = $(this);
				var columns = $(this).children('td');
				for(i=0;i<columns.length;i++){
					if($(tableHead[i]).hasClass('editable')){
						$(columns[i]).bind("dblclick", function(e){
							var text = $(e.target).text();
							var button =  document.createElement('input');
							button.setAttribute("type", "button");
						    button.setAttribute("value", "submit");
						    button.setAttribute("name", "submit");
							$(button).bind("click", function(e){
								tableRow = $(e.target).parent();
								
								inputBox = tableRow.children("input[type='text']");
								tableRow.text(inputBox.val());
								
							});
							$(e.target).html('<input type="text" value="'+text+'" />');
							$(e.target).append(button);
						});
					}
				}
				
				
				
			});
		}
		
      // end of closure
      })(jQuery);

function openFooter(e){
	t = jQuery(e).parent('div').parent('div').parent('div').next().next();
	t.children('tfoot').show();
}
function submitTable(e){
	t= jQuery(e).parent('td').parent('tr').parent('tfoot').parent('table');
	tbody = t.children('tbody');
	tfoot = t.children('tfoot');
	
	var columns = tfoot.children('tr').children('td');
	
	var sometextEntered = false;
	newRow = "<tr>";
	
	for(i=0;i<columns.length;i++){
		
			newRow += "<td align='left'>"+jQuery(columns[i]).children("input[type='text']").val()+"</td>";
			if(jQuery(columns[i]).children("input[type='text']").val != ''){
				sometextEntered = true;
			}
			jQuery(columns[i]).children("input[type='text']").val('');
			
	}
	newRow += "</tr>";
	if(sometextEntered){
		tbody.append(newRow);
	}
	tfoot.hide();
	
	
}
function deleteRows(e){
	t = jQuery(e).parent('div').parent('div').parent('div').next().next();
	rows = t.children('tbody').children('tr');
	for(i=0;i<rows.length;i++){
		if(jQuery(rows[i]).hasClass('selected')){
			jQuery(rows[i]).remove();
		}
	}
}

                          ./mvappsvr/docroot/db/javascripts/rss_admin.js                                                      0000777 0000000 0000000 00000005227 12534142432 020510  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   
SAVE_FEED = false;

function editFeed(feedId, name, desc, select_sub, select_sub_target,  item_sub, item_sub_target, modes) {
    $("#feed_id").val(feedId);
    $("#new_id").hide().before("<span>" + feedId + "</span>");
    
    $("#feed_name").val(name);
    $("#feed_desc").val(desc);
    $("#select_sub").val(select_sub);
    $("#edit-sub-link").attr("target", select_sub_target);
    $("#item_sub").val(item_sub);
    $("#edit-item-link").attr("target", item_sub_target);
    $("#feed_modes").val(modes);
    $("#rss-dialog").dialog('option', 'title', 'Edit feed')
 	            .dialog('open');
}

function closeFeed()
{
     $("#rss-dialog").dialog('close');
     $("#rss-message").text('');
     $("#rss-form :text, #rss-form textarea").val("");
     $("#rss-form :text.required-field").removeClass("required-field");
     $("#new_id").show().siblings("span").remove();
     $("#edit-sub-link, #edit-item-link").attr('target', '');
}


jQuery().ready(function(){
	$("#rss-dialog").dialog({
	    width: 603,
	    autoOpen: false,
	    'buttons': {
		'Cancel': function() {
			closeFeed();
			SAVE_FEED = false;
		},
		'Save': function() {
		    var validate = true;
	            $("#rss-form :text.required-field").removeClass("required-field");			
		    $("#feed_id, #feed_name").each(function(){
			    if (!$(this).val()) {
				$(this).addClass('required-field');
				validate = false;
			    } 
		    });
		    if (SAVE_FEED) {
			$("#feed_id").val("NEW");
		    }
		    if (validate) {
	  	        $('#rss-form').submit();
		    } else {
                       $("#rss-messages").text("You must fill in the required fields highlighted below.");
		    }
		}
	    }
	});


	function initSubLinks() {
	    $("#edit-sub-link, #edit-item-link").each(function() { 
		$(this).attr("base_url", $(this).attr("href")); 
	    });

	    $("#edit-sub-link, #edit-item-link").click(function(e) {
		var url = $(this).attr("href");
		if (!$(this).attr("target")) {
		    $(this).attr('target', '_blank');
		}
		var sub = $(this).prev("input").val();
		if (sub) {
		   $(this).unbind("click");
		   $(this).attr("href", $(this).attr("base_url") + sub);
		} else {
		   return false;
		}	
  	    });
	}

	initSubLinks();

	// Initialize feed close event
        $("#rss-dialog").parent().find(".ui-dialog-titlebar-close .ui-icon").click(function(){
	    closeFeed();
	});
	
	$("#mainWrapper table td a").each(function() {
	    if ($(this).text() == 'Add Feed') {
		$(this).addClass('add-feed');
	    }
	});

	$("#mainWrapper table a[href=/dbc/RSS.MAINT?action=add]").addClass('add-feed');
	$(".add-feed").click(function() {
	   SAVE_FEED = true;
	   $('#rss-dialog').dialog('open');
           return false;
	});
});
                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/javascripts/application.js                                                    0000777 0000000 0000000 00000001161 12534142432 021025  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   sorts = $A([$("column1"),$("column2"),$("column3"),$("library")])

sorts.each(function(value,index){  
	Sortable.create(value.id, {tag:"div",only:"box",containment:sorts,constraint:"",dropOnEmpty:true,onUpdate:setOrder});
})

function setOrder(obj) {
	var value = ""
	value+= "Column 1 contains: "+Sortable.serialize("column1",{name:"box"})+"<br/>"
	value+= "Column 2 contains: "+Sortable.serialize("column2",{name:"box"})+"<br/>"
	value+= "Column 3 contains: "+Sortable.serialize("column3",{name:"box"})+"<br/>"
	value+= "Library contains: "+Sortable.serialize("library",{name:"box"})+"<br/>"			
	$('status').update(value)
}                                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/javascripts/init-jquery-sheet.js                                              0000666 0000000 0000000 00000000577 12534142432 022117  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   jQuery().ready(function(){
	jQuery(".gridtable").sheet({
		title: 'Gridtable',
		urlSave: '/db/mytest',
		inlineMenu: jQuery('#inlineMenu').html(),		
		fnSave: saveGridTable,
		buildSheet: true
	});
	
	jQuery("span[title='Add a spreadsheet']").remove();
	
	function saveGridTable()
	{
		$("#jSheet0 th, #jSheet0 td").each(function(){
			document.write($(this).text());	
		});
	}
});
                                                                                                                                 ./mvappsvr/docroot/db/javascripts/sortable.js                                                       0000777 0000000 0000000 00000022452 12534142432 020343  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
Table sorting script  by Joost de Valk, check it out at http://www.joostdevalk.nl/code/sortable-table/.
Based on a script from http://www.kryogenix.org/code/browser/sorttable/.
Distributed under the MIT license: http://www.kryogenix.org/code/browser/licence.html .

Copyright (c) 1997-2007 Stuart Langridge, Joost de Valk.

Version 1.5.7
*/

/* You can change these values */
var image_path = "/db/images/";
var image_up = "arrow-up.gif";
var image_down = "arrow-down.gif";
var image_none = "arrow-none.gif";
var europeandate = true;
var alternate_row_colors = true;

/* Don't change anything below this unless you know what you're doing */
addEvent(window, "load", sortables_init);

var SORT_COLUMN_INDEX;
var thead = false;

function sortables_init() {
	// Find all tables with class sortable and make them sortable
	if (!document.getElementsByTagName) return;
	tbls = document.getElementsByTagName("table");
	for (ti=0;ti<tbls.length;ti++) {
		thisTbl = tbls[ti];
		if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id)) {
			//ts_makeSortable(thisTbl);
		}
	}
}

function ts_makeSortable(t) {
	if (t.rows && t.rows.length > 0) {
		if (t.tHead && t.tHead.rows.length > 0) {
			var firstRow = t.tHead.rows[t.tHead.rows.length-1];
			thead = true;
		} else {
			var firstRow = t.rows[0];
		}
	}
	if (!firstRow) return;
	
	// We have a first row: assume it's the header, and make its contents clickable links
	for (var i=0;i<firstRow.cells.length;i++) {
		var cell = firstRow.cells[i];
		var txt = ts_getInnerText(cell);
		if (cell.className != "unsortable" && cell.className.indexOf("unsortable") == -1) {
			cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this, '+i+');return false;">'+txt+'<span class="sortarrow">&nbsp;&nbsp;<img src="'+ image_path + image_none + '" alt="&darr;"/></span></a>';
		}
	}
	if (alternate_row_colors) {
		alternate(t);
	}
}

function ts_getInnerText(el) {
	if (typeof el == "string") return el;
	if (typeof el == "undefined") { return el };
	if (el.innerText) return el.innerText;	//Not needed but it is faster
	var str = "";
	
	var cs = el.childNodes;
	var l = cs.length;
	for (var i = 0; i < l; i++) {
		switch (cs[i].nodeType) {
			case 1: //ELEMENT_NODE
				str += ts_getInnerText(cs[i]);
				break;
			case 3:	//TEXT_NODE
				str += cs[i].nodeValue;
				break;
		}
	}
	return str;
}

function ts_resortTable(lnk, clid) {
	var span;
	for (var ci=0;ci<lnk.childNodes.length;ci++) {
		if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];
	}
	var spantext = ts_getInnerText(span);
	var td = lnk.parentNode;
	var column = clid || td.cellIndex;
	var t = getParent(td,'TABLE');
	// Work out a type for the column
	if (t.rows.length <= 1) return;
	var itm = "";
	var i = 0;
	while (itm == "" && i < t.tBodies[0].rows.length) {
		var itm = ts_getInnerText(t.tBodies[0].rows[i].cells[column]);
		itm = trim(itm);
		if (itm.substr(0,4) == "<!--" || itm.length == 0) {
			itm = "";
		}
		i++;
	}
	if (itm == "") return; 
	sortfn = ts_sort_caseinsensitive;
	if (itm.match(/^\d\d[\/\.-][a-zA-z][a-zA-Z][a-zA-Z][\/\.-]\d\d\d\d$/)) sortfn = ts_sort_date;
	if (itm.match(/^\d\d[\/\.-]\d\d[\/\.-]\d\d\d{2}?$/)) sortfn = ts_sort_date;
	if (itm.match(/^-?[$ۢ]\d/)) sortfn = ts_sort_numeric;
	if (itm.match(/^-?(\d+[,\.]?)+(E[-+][\d]+)?%?$/)) sortfn = ts_sort_numeric;
	SORT_COLUMN_INDEX = column;
	var firstRow = new Array();
	var newRows = new Array();
	for (k=0;k<t.tBodies.length;k++) {
		for (i=0;i<t.tBodies[k].rows[0].length;i++) { 
			firstRow[i] = t.tBodies[k].rows[0][i]; 
		}
	}
	for (k=0;k<t.tBodies.length;k++) {
		if (!thead) {
			// Skip the first row
			for (j=1;j<t.tBodies[k].rows.length;j++) { 
				newRows[j-1] = t.tBodies[k].rows[j];
			}
		} else {
			// Do NOT skip the first row
			for (j=0;j<t.tBodies[k].rows.length;j++) { 
				newRows[j] = t.tBodies[k].rows[j];
			}
		}
	}
	newRows.sort(sortfn);
	if (span.getAttribute("sortdir") == 'down') {
			ARROW = '&nbsp;&nbsp;<img src="'+ image_path + image_down + '" alt="&darr;"/>';
			newRows.reverse();
			span.setAttribute('sortdir','up');
	} else {
			ARROW = '&nbsp;&nbsp;<img src="'+ image_path + image_up + '" alt="&uarr;"/>';
			span.setAttribute('sortdir','down');
	} 
    // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
    // don't do sortbottom rows
    for (i=0; i<newRows.length; i++) { 
		if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) {
			t.tBodies[0].appendChild(newRows[i]);
		}
	}
    // do sortbottom rows only
    for (i=0; i<newRows.length; i++) {
		if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) 
			t.tBodies[0].appendChild(newRows[i]);
	}
	// Delete any other arrows there may be showing
	var allspans = document.getElementsByTagName("span");
	for (var ci=0;ci<allspans.length;ci++) {
		if (allspans[ci].className == 'sortarrow') {
			if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?
				allspans[ci].innerHTML = '&nbsp;&nbsp;<img src="'+ image_path + image_none + '" alt="&darr;"/>';
			}
		}
	}		
	span.innerHTML = ARROW;
	alternate(t);
}

function getParent(el, pTagName) {
	if (el == null) {
		return null;
	} else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) {
		return el;
	} else {
		return getParent(el.parentNode, pTagName);
	}
}

function sort_date(date) {	
	// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
	dt = "00000000";
	if (date.length == 11) {
		mtstr = date.substr(3,3);
		mtstr = mtstr.toLowerCase();
		switch(mtstr) {
			case "jan": var mt = "01"; break;
			case "feb": var mt = "02"; break;
			case "mar": var mt = "03"; break;
			case "apr": var mt = "04"; break;
			case "may": var mt = "05"; break;
			case "jun": var mt = "06"; break;
			case "jul": var mt = "07"; break;
			case "aug": var mt = "08"; break;
			case "sep": var mt = "09"; break;
			case "oct": var mt = "10"; break;
			case "nov": var mt = "11"; break;
			case "dec": var mt = "12"; break;
			// default: var mt = "00";
		}
		dt = date.substr(7,4)+mt+date.substr(0,2);
		return dt;
	} else if (date.length == 10) {
		if (europeandate == false) {
			dt = date.substr(6,4)+date.substr(0,2)+date.substr(3,2);
			return dt;
		} else {
			dt = date.substr(6,4)+date.substr(3,2)+date.substr(0,2);
			return dt;
		}
	} else if (date.length == 8) {
		yr = date.substr(6,2);
		if (parseInt(yr) < 50) { 
			yr = '20'+yr; 
		} else { 
			yr = '19'+yr; 
		}
		if (europeandate == true) {
			dt = yr+date.substr(3,2)+date.substr(0,2);
			return dt;
		} else {
			dt = yr+date.substr(0,2)+date.substr(3,2);
			return dt;
		}
	}
	return dt;
}

function ts_sort_date(a,b) {
	dt1 = sort_date(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
	dt2 = sort_date(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
	
	if (dt1==dt2) {
		return 0;
	}
	if (dt1<dt2) { 
		return -1;
	}
	return 1;
}
function ts_sort_numeric(a,b) {
	var aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
	aa = clean_num(aa);
	var bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
	bb = clean_num(bb);
	return compare_numeric(aa,bb);
}
function compare_numeric(a,b) {
	var a = parseFloat(a);
	a = (isNaN(a) ? 0 : a);
	var b = parseFloat(b);
	b = (isNaN(b) ? 0 : b);
	return a - b;
}
function ts_sort_caseinsensitive(a,b) {
	aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
	bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
	if (aa==bb) {
		return 0;
	}
	if (aa<bb) {
		return -1;
	}
	return 1;
}
function ts_sort_default(a,b) {
	aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
	bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
	if (aa==bb) {
		return 0;
	}
	if (aa<bb) {
		return -1;
	}
	return 1;
}
function addEvent(elm, evType, fn, useCapture)
// addEvent and removeEvent
// cross-browser event handling for IE5+,	NS6 and Mozilla
// By Scott Andrew
{
	if (elm.addEventListener){
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent){
		var r = elm.attachEvent("on"+evType, fn);
		return r;
	} else {
		alert("Handler could not be removed");
	}
}
function clean_num(str) {
	str = str.replace(new RegExp(/[^-?0-9.]/g),"");
	return str;
}
function trim(s) {
	return s.replace(/^\s+|\s+$/g, "");
}
function alternate(table) {
	// Take object table and get all it's tbodies.
	var tableBodies = table.getElementsByTagName("tbody");
	// Loop through these tbodies
	for (var i = 0; i < tableBodies.length; i++) {
		// Take the tbody, and get all it's rows
		var tableRows = tableBodies[i].getElementsByTagName("tr");
		// Loop through these rows
		// Start at 1 because we want to leave the heading row untouched
		for (var j = 0; j < tableRows.length; j++) {
			// Check if j is even, and apply classes for both possible results
			if ( (j % 2) == 0  ) {
				if ( !(tableRows[j].className.indexOf('odd') == -1) ) {
					tableRows[j].className = tableRows[j].className.replace('odd', 'even');
				} else {
					if ( tableRows[j].className.indexOf('even') == -1 ) {
						tableRows[j].className += " even";
					}
				}
			} else {
				if ( !(tableRows[j].className.indexOf('even') == -1) ) {
					tableRows[j].className = tableRows[j].className.replace('even', 'odd');
				} else {
					if ( tableRows[j].className.indexOf('odd') == -1 ) {
						tableRows[j].className += " odd";
					}
				}
			} 
		}
	}
}
                                                                                                                                                                                                                      ./mvappsvr/docroot/db/javascripts/controls.js                                                       0000777 0000000 0000000 00000070464 12534142432 020401  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   // script.aculo.us controls.js v1.7.0, Fri Jan 19 19:16:36 CET 2007

// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//           (c) 2005, 2006 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
//           (c) 2005, 2006 Jon Tirsen (http://www.tirsen.com)
// Contributors:
//  Richard Livsey
//  Rahul Bhargava
//  Rob Wills
// 
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

// Autocompleter.Base handles all the autocompletion functionality 
// that's independent of the data source for autocompletion. This
// includes drawing the autocompletion menu, observing keyboard
// and mouse events, and similar.
//
// Specific autocompleters need to provide, at the very least, 
// a getUpdatedChoices function that will be invoked every time
// the text inside the monitored textbox changes. This method 
// should get the text for which to provide autocompletion by
// invoking this.getToken(), NOT by directly accessing
// this.element.value. This is to allow incremental tokenized
// autocompletion. Specific auto-completion logic (AJAX, etc)
// belongs in getUpdatedChoices.
//
// Tokenized incremental autocompletion is enabled automatically
// when an autocompleter is instantiated with the 'tokens' option
// in the options parameter, e.g.:
// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
// will incrementally autocomplete with a comma as the token.
// Additionally, ',' in the above example can be replaced with
// a token array, e.g. { tokens: [',', '\n'] } which
// enables autocompletion on multiple tokens. This is most 
// useful when one of the tokens is \n (a newline), as it 
// allows smart autocompletion after linebreaks.

if(typeof Effect == 'undefined')
  throw("controls.js requires including script.aculo.us' effects.js library");

var Autocompleter = {}
Autocompleter.Base = function() {};
Autocompleter.Base.prototype = {
  baseInitialize: function(element, update, options) {
    this.element     = $(element); 
    this.update      = $(update);  
    this.hasFocus    = false; 
    this.changed     = false; 
    this.active      = false; 
    this.index       = 0;     
    this.entryCount  = 0;

    if(this.setOptions)
      this.setOptions(options);
    else
      this.options = options || {};

    this.options.paramName    = this.options.paramName || this.element.name;
    this.options.tokens       = this.options.tokens || [];
    this.options.frequency    = this.options.frequency || 0.4;
    this.options.minChars     = this.options.minChars || 1;
    this.options.onShow       = this.options.onShow || 
      function(element, update){ 
        if(!update.style.position || update.style.position=='absolute') {
          update.style.position = 'absolute';
          Position.clone(element, update, {
            setHeight: false, 
            offsetTop: element.offsetHeight
          });
        }
        Effect.Appear(update,{duration:0.15});
      };
    this.options.onHide = this.options.onHide || 
      function(element, update){ new Effect.Fade(update,{duration:0.15}) };

    if(typeof(this.options.tokens) == 'string') 
      this.options.tokens = new Array(this.options.tokens);

    this.observer = null;
    
    this.element.setAttribute('autocomplete','off');

    Element.hide(this.update);

    Event.observe(this.element, "blur", this.onBlur.bindAsEventListener(this));
    Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this));
  },

  show: function() {
    if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
    if(!this.iefix && 
      (navigator.appVersion.indexOf('MSIE')>0) &&
      (navigator.userAgent.indexOf('Opera')<0) &&
      (Element.getStyle(this.update, 'position')=='absolute')) {
      new Insertion.After(this.update, 
       '<iframe id="' + this.update.id + '_iefix" '+
       'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
       'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
      this.iefix = $(this.update.id+'_iefix');
    }
    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
  },
  
  fixIEOverlapping: function() {
    Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
    this.iefix.style.zIndex = 1;
    this.update.style.zIndex = 2;
    Element.show(this.iefix);
  },

  hide: function() {
    this.stopIndicator();
    if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
    if(this.iefix) Element.hide(this.iefix);
  },

  startIndicator: function() {
    if(this.options.indicator) Element.show(this.options.indicator);
  },

  stopIndicator: function() {
    if(this.options.indicator) Element.hide(this.options.indicator);
  },

  onKeyPress: function(event) {
    if(this.active)
      switch(event.keyCode) {
       case Event.KEY_TAB:
       case Event.KEY_RETURN:
         this.selectEntry();
         Event.stop(event);
       case Event.KEY_ESC:
         this.hide();
         this.active = false;
         Event.stop(event);
         return;
       case Event.KEY_LEFT:
       case Event.KEY_RIGHT:
         return;
       case Event.KEY_UP:
         this.markPrevious();
         this.render();
         if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
         return;
       case Event.KEY_DOWN:
         this.markNext();
         this.render();
         if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
         return;
      }
     else 
       if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN || 
         (navigator.appVersion.indexOf('AppleWebKit') > 0 && event.keyCode == 0)) return;

    this.changed = true;
    this.hasFocus = true;

    if(this.observer) clearTimeout(this.observer);
      this.observer = 
        setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
  },

  activate: function() {
    this.changed = false;
    this.hasFocus = true;
    this.getUpdatedChoices();
  },

  onHover: function(event) {
    var element = Event.findElement(event, 'LI');
    if(this.index != element.autocompleteIndex) 
    {
        this.index = element.autocompleteIndex;
        this.render();
    }
    Event.stop(event);
  },
  
  onClick: function(event) {
    var element = Event.findElement(event, 'LI');
    this.index = element.autocompleteIndex;
    this.selectEntry();
    this.hide();
  },
  
  onBlur: function(event) {
    // needed to make click events working
    setTimeout(this.hide.bind(this), 250);
    this.hasFocus = false;
    this.active = false;     
  }, 
  
  render: function() {
    if(this.entryCount > 0) {
      for (var i = 0; i < this.entryCount; i++)
        this.index==i ? 
          Element.addClassName(this.getEntry(i),"selected") : 
          Element.removeClassName(this.getEntry(i),"selected");
        
      if(this.hasFocus) { 
        this.show();
        this.active = true;
      }
    } else {
      this.active = false;
      this.hide();
    }
  },
  
  markPrevious: function() {
    if(this.index > 0) this.index--
      else this.index = this.entryCount-1;
    this.getEntry(this.index).scrollIntoView(true);
  },
  
  markNext: function() {
    if(this.index < this.entryCount-1) this.index++
      else this.index = 0;
    this.getEntry(this.index).scrollIntoView(false);
  },
  
  getEntry: function(index) {
    return this.update.firstChild.childNodes[index];
  },
  
  getCurrentEntry: function() {
    return this.getEntry(this.index);
  },
  
  selectEntry: function() {
    this.active = false;
    this.updateElement(this.getCurrentEntry());
  },

  updateElement: function(selectedElement) {
    if (this.options.updateElement) {
      this.options.updateElement(selectedElement);
      return;
    }
    var value = '';
    if (this.options.select) {
      var nodes = document.getElementsByClassName(this.options.select, selectedElement) || [];
      if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
    } else
      value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
    
    var lastTokenPos = this.findLastToken();
    if (lastTokenPos != -1) {
      var newValue = this.element.value.substr(0, lastTokenPos + 1);
      var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/);
      if (whitespace)
        newValue += whitespace[0];
      this.element.value = newValue + value;
    } else {
      this.element.value = value;
    }
    this.element.focus();
    
    if (this.options.afterUpdateElement)
      this.options.afterUpdateElement(this.element, selectedElement);
  },

  updateChoices: function(choices) {
    if(!this.changed && this.hasFocus) {
      this.update.innerHTML = choices;
      Element.cleanWhitespace(this.update);
      Element.cleanWhitespace(this.update.down());

      if(this.update.firstChild && this.update.down().childNodes) {
        this.entryCount = 
          this.update.down().childNodes.length;
        for (var i = 0; i < this.entryCount; i++) {
          var entry = this.getEntry(i);
          entry.autocompleteIndex = i;
          this.addObservers(entry);
        }
      } else { 
        this.entryCount = 0;
      }

      this.stopIndicator();
      this.index = 0;
      
      if(this.entryCount==1 && this.options.autoSelect) {
        this.selectEntry();
        this.hide();
      } else {
        this.render();
      }
    }
  },

  addObservers: function(element) {
    Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
    Event.observe(element, "click", this.onClick.bindAsEventListener(this));
  },

  onObserverEvent: function() {
    this.changed = false;   
    if(this.getToken().length>=this.options.minChars) {
      this.startIndicator();
      this.getUpdatedChoices();
    } else {
      this.active = false;
      this.hide();
    }
  },

  getToken: function() {
    var tokenPos = this.findLastToken();
    if (tokenPos != -1)
      var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/,'').replace(/\s+$/,'');
    else
      var ret = this.element.value;

    return /\n/.test(ret) ? '' : ret;
  },

  findLastToken: function() {
    var lastTokenPos = -1;

    for (var i=0; i<this.options.tokens.length; i++) {
      var thisTokenPos = this.element.value.lastIndexOf(this.options.tokens[i]);
      if (thisTokenPos > lastTokenPos)
        lastTokenPos = thisTokenPos;
    }
    return lastTokenPos;
  }
}

Ajax.Autocompleter = Class.create();
Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {
  initialize: function(element, update, url, options) {
    this.baseInitialize(element, update, options);
    this.options.asynchronous  = true;
    this.options.onComplete    = this.onComplete.bind(this);
    this.options.defaultParams = this.options.parameters || null;
    this.url                   = url;
  },

  getUpdatedChoices: function() {
    entry = encodeURIComponent(this.options.paramName) + '=' + 
      encodeURIComponent(this.getToken());

    this.options.parameters = this.options.callback ?
      this.options.callback(this.element, entry) : entry;

    if(this.options.defaultParams) 
      this.options.parameters += '&' + this.options.defaultParams;

    new Ajax.Request(this.url, this.options);
  },

  onComplete: function(request) {
    this.updateChoices(request.responseText);
  }

});

// The local array autocompleter. Used when you'd prefer to
// inject an array of autocompletion options into the page, rather
// than sending out Ajax queries, which can be quite slow sometimes.
//
// The constructor takes four parameters. The first two are, as usual,
// the id of the monitored textbox, and id of the autocompletion menu.
// The third is the array you want to autocomplete from, and the fourth
// is the options block.
//
// Extra local autocompletion options:
// - choices - How many autocompletion choices to offer
//
// - partialSearch - If false, the autocompleter will match entered
//                    text only at the beginning of strings in the 
//                    autocomplete array. Defaults to true, which will
//                    match text at the beginning of any *word* in the
//                    strings in the autocomplete array. If you want to
//                    search anywhere in the string, additionally set
//                    the option fullSearch to true (default: off).
//
// - fullSsearch - Search anywhere in autocomplete array strings.
//
// - partialChars - How many characters to enter before triggering
//                   a partial match (unlike minChars, which defines
//                   how many characters are required to do any match
//                   at all). Defaults to 2.
//
// - ignoreCase - Whether to ignore case when autocompleting.
//                 Defaults to true.
//
// It's possible to pass in a custom function as the 'selector' 
// option, if you prefer to write your own autocompletion logic.
// In that case, the other options above will not apply unless
// you support them.

Autocompleter.Local = Class.create();
Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {
  initialize: function(element, update, array, options) {
    this.baseInitialize(element, update, options);
    this.options.array = array;
  },

  getUpdatedChoices: function() {
    this.updateChoices(this.options.selector(this));
  },

  setOptions: function(options) {
    this.options = Object.extend({
      choices: 10,
      partialSearch: true,
      partialChars: 2,
      ignoreCase: true,
      fullSearch: false,
      selector: function(instance) {
        var ret       = []; // Beginning matches
        var partial   = []; // Inside matches
        var entry     = instance.getToken();
        var count     = 0;

        for (var i = 0; i < instance.options.array.length &&  
          ret.length < instance.options.choices ; i++) { 

          var elem = instance.options.array[i];
          var foundPos = instance.options.ignoreCase ? 
            elem.toLowerCase().indexOf(entry.toLowerCase()) : 
            elem.indexOf(entry);

          while (foundPos != -1) {
            if (foundPos == 0 && elem.length != entry.length) { 
              ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" + 
                elem.substr(entry.length) + "</li>");
              break;
            } else if (entry.length >= instance.options.partialChars && 
              instance.options.partialSearch && foundPos != -1) {
              if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
                partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
                  elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
                  foundPos + entry.length) + "</li>");
                break;
              }
            }

            foundPos = instance.options.ignoreCase ? 
              elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : 
              elem.indexOf(entry, foundPos + 1);

          }
        }
        if (partial.length)
          ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))
        return "<ul>" + ret.join('') + "</ul>";
      }
    }, options || {});
  }
});

// AJAX in-place editor
//
// see documentation on http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor

// Use this if you notice weird scrolling problems on some browsers,
// the DOM might be a bit confused when this gets called so do this
// waits 1 ms (with setTimeout) until it does the activation
Field.scrollFreeActivate = function(field) {
  setTimeout(function() {
    Field.activate(field);
  }, 1);
}

Ajax.InPlaceEditor = Class.create();
Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99";
Ajax.InPlaceEditor.prototype = {
  initialize: function(element, url, options) {
    this.url = url;
    this.element = $(element);

    this.options = Object.extend({
      paramName: "value",
      okButton: true,
      okText: "ok",
      cancelLink: true,
      cancelText: "cancel",
      savingText: "Saving...",
      clickToEditText: "Click to edit",
      okText: "ok",
      rows: 1,
      onComplete: function(transport, element) {
        new Effect.Highlight(element, {startcolor: this.options.highlightcolor});
      },
      onFailure: function(transport) {
        alert("Error communicating with the server: " + transport.responseText.stripTags());
      },
      callback: function(form) {
        return Form.serialize(form);
      },
      handleLineBreaks: true,
      loadingText: 'Loading...',
      savingClassName: 'inplaceeditor-saving',
      loadingClassName: 'inplaceeditor-loading',
      formClassName: 'inplaceeditor-form',
      highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor,
      highlightendcolor: "#FFFFFF",
      externalControl: null,
      submitOnBlur: false,
      ajaxOptions: {},
      evalScripts: false
    }, options || {});

    if(!this.options.formId && this.element.id) {
      this.options.formId = this.element.id + "-inplaceeditor";
      if ($(this.options.formId)) {
        // there's already a form with that name, don't specify an id
        this.options.formId = null;
      }
    }
    
    if (this.options.externalControl) {
      this.options.externalControl = $(this.options.externalControl);
    }
    
    this.originalBackground = Element.getStyle(this.element, 'background-color');
    if (!this.originalBackground) {
      this.originalBackground = "transparent";
    }
    
    this.element.title = this.options.clickToEditText;
    
    this.onclickListener = this.enterEditMode.bindAsEventListener(this);
    this.mouseoverListener = this.enterHover.bindAsEventListener(this);
    this.mouseoutListener = this.leaveHover.bindAsEventListener(this);
    Event.observe(this.element, 'click', this.onclickListener);
    Event.observe(this.element, 'mouseover', this.mouseoverListener);
    Event.observe(this.element, 'mouseout', this.mouseoutListener);
    if (this.options.externalControl) {
      Event.observe(this.options.externalControl, 'click', this.onclickListener);
      Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener);
      Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener);
    }
  },
  enterEditMode: function(evt) {
    if (this.saving) return;
    if (this.editing) return;
    this.editing = true;
    this.onEnterEditMode();
    if (this.options.externalControl) {
      Element.hide(this.options.externalControl);
    }
    Element.hide(this.element);
    this.createForm();
    this.element.parentNode.insertBefore(this.form, this.element);
    if (!this.options.loadTextURL) Field.scrollFreeActivate(this.editField);
    // stop the event to avoid a page refresh in Safari
    if (evt) {
      Event.stop(evt);
    }
    return false;
  },
  createForm: function() {
    this.form = document.createElement("form");
    this.form.id = this.options.formId;
    Element.addClassName(this.form, this.options.formClassName)
    this.form.onsubmit = this.onSubmit.bind(this);

    this.createEditField();

    if (this.options.textarea) {
      var br = document.createElement("br");
      this.form.appendChild(br);
    }

    if (this.options.okButton) {
      okButton = document.createElement("input");
      okButton.type = "submit";
      okButton.value = this.options.okText;
      okButton.className = 'editor_ok_button';
      this.form.appendChild(okButton);
    }

    if (this.options.cancelLink) {
      cancelLink = document.createElement("a");
      cancelLink.href = "#";
      cancelLink.appendChild(document.createTextNode(this.options.cancelText));
      cancelLink.onclick = this.onclickCancel.bind(this);
      cancelLink.className = 'editor_cancel';      
      this.form.appendChild(cancelLink);
    }
  },
  hasHTMLLineBreaks: function(string) {
    if (!this.options.handleLineBreaks) return false;
    return string.match(/<br/i) || string.match(/<p>/i);
  },
  convertHTMLLineBreaks: function(string) {
    return string.replace(/<br>/gi, "\n").replace(/<br\/>/gi, "\n").replace(/<\/p>/gi, "\n").replace(/<p>/gi, "");
  },
  createEditField: function() {
    var text;
    if(this.options.loadTextURL) {
      text = this.options.loadingText;
    } else {
      text = this.getText();
    }

    var obj = this;
    
    if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) {
      this.options.textarea = false;
      var textField = document.createElement("input");
      textField.obj = this;
      textField.type = "text";
      textField.name = this.options.paramName;
      textField.value = text;
      textField.style.backgroundColor = this.options.highlightcolor;
      textField.className = 'editor_field';
      var size = this.options.size || this.options.cols || 0;
      if (size != 0) textField.size = size;
      if (this.options.submitOnBlur)
        textField.onblur = this.onSubmit.bind(this);
      this.editField = textField;
    } else {
      this.options.textarea = true;
      var textArea = document.createElement("textarea");
      textArea.obj = this;
      textArea.name = this.options.paramName;
      textArea.value = this.convertHTMLLineBreaks(text);
      textArea.rows = this.options.rows;
      textArea.cols = this.options.cols || 40;
      textArea.className = 'editor_field';      
      if (this.options.submitOnBlur)
        textArea.onblur = this.onSubmit.bind(this);
      this.editField = textArea;
    }
    
    if(this.options.loadTextURL) {
      this.loadExternalText();
    }
    this.form.appendChild(this.editField);
  },
  getText: function() {
    return this.element.innerHTML;
  },
  loadExternalText: function() {
    Element.addClassName(this.form, this.options.loadingClassName);
    this.editField.disabled = true;
    new Ajax.Request(
      this.options.loadTextURL,
      Object.extend({
        asynchronous: true,
        onComplete: this.onLoadedExternalText.bind(this)
      }, this.options.ajaxOptions)
    );
  },
  onLoadedExternalText: function(transport) {
    Element.removeClassName(this.form, this.options.loadingClassName);
    this.editField.disabled = false;
    this.editField.value = transport.responseText.stripTags();
    Field.scrollFreeActivate(this.editField);
  },
  onclickCancel: function() {
    this.onComplete();
    this.leaveEditMode();
    return false;
  },
  onFailure: function(transport) {
    this.options.onFailure(transport);
    if (this.oldInnerHTML) {
      this.element.innerHTML = this.oldInnerHTML;
      this.oldInnerHTML = null;
    }
    return false;
  },
  onSubmit: function() {
    // onLoading resets these so we need to save them away for the Ajax call
    var form = this.form;
    var value = this.editField.value;
    
    // do this first, sometimes the ajax call returns before we get a chance to switch on Saving...
    // which means this will actually switch on Saving... *after* we've left edit mode causing Saving...
    // to be displayed indefinitely
    this.onLoading();
    
    if (this.options.evalScripts) {
      new Ajax.Request(
        this.url, Object.extend({
          parameters: this.options.callback(form, value),
          onComplete: this.onComplete.bind(this),
          onFailure: this.onFailure.bind(this),
          asynchronous:true, 
          evalScripts:true
        }, this.options.ajaxOptions));
    } else  {
      new Ajax.Updater(
        { success: this.element,
          // don't update on failure (this could be an option)
          failure: null }, 
        this.url, Object.extend({
          parameters: this.options.callback(form, value),
          onComplete: this.onComplete.bind(this),
          onFailure: this.onFailure.bind(this)
        }, this.options.ajaxOptions));
    }
    // stop the event to avoid a page refresh in Safari
    if (arguments.length > 1) {
      Event.stop(arguments[0]);
    }
    return false;
  },
  onLoading: function() {
    this.saving = true;
    this.removeForm();
    this.leaveHover();
    this.showSaving();
  },
  showSaving: function() {
    this.oldInnerHTML = this.element.innerHTML;
    this.element.innerHTML = this.options.savingText;
    Element.addClassName(this.element, this.options.savingClassName);
    this.element.style.backgroundColor = this.originalBackground;
    Element.show(this.element);
  },
  removeForm: function() {
    if(this.form) {
      if (this.form.parentNode) Element.remove(this.form);
      this.form = null;
    }
  },
  enterHover: function() {
    if (this.saving) return;
    this.element.style.backgroundColor = this.options.highlightcolor;
    if (this.effect) {
      this.effect.cancel();
    }
    Element.addClassName(this.element, this.options.hoverClassName)
  },
  leaveHover: function() {
    if (this.options.backgroundColor) {
      this.element.style.backgroundColor = this.oldBackground;
    }
    Element.removeClassName(this.element, this.options.hoverClassName)
    if (this.saving) return;
    this.effect = new Effect.Highlight(this.element, {
      startcolor: this.options.highlightcolor,
      endcolor: this.options.highlightendcolor,
      restorecolor: this.originalBackground
    });
  },
  leaveEditMode: function() {
    Element.removeClassName(this.element, this.options.savingClassName);
    this.removeForm();
    this.leaveHover();
    this.element.style.backgroundColor = this.originalBackground;
    Element.show(this.element);
    if (this.options.externalControl) {
      Element.show(this.options.externalControl);
    }
    this.editing = false;
    this.saving = false;
    this.oldInnerHTML = null;
    this.onLeaveEditMode();
  },
  onComplete: function(transport) {
    this.leaveEditMode();
    this.options.onComplete.bind(this)(transport, this.element);
  },
  onEnterEditMode: function() {},
  onLeaveEditMode: function() {},
  dispose: function() {
    if (this.oldInnerHTML) {
      this.element.innerHTML = this.oldInnerHTML;
    }
    this.leaveEditMode();
    Event.stopObserving(this.element, 'click', this.onclickListener);
    Event.stopObserving(this.element, 'mouseover', this.mouseoverListener);
    Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);
    if (this.options.externalControl) {
      Event.stopObserving(this.options.externalControl, 'click', this.onclickListener);
      Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener);
      Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener);
    }
  }
};

Ajax.InPlaceCollectionEditor = Class.create();
Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype);
Object.extend(Ajax.InPlaceCollectionEditor.prototype, {
  createEditField: function() {
    if (!this.cached_selectTag) {
      var selectTag = document.createElement("select");
      var collection = this.options.collection || [];
      var optionTag;
      collection.each(function(e,i) {
        optionTag = document.createElement("option");
        optionTag.value = (e instanceof Array) ? e[0] : e;
        if((typeof this.options.value == 'undefined') && 
          ((e instanceof Array) ? this.element.innerHTML == e[1] : e == optionTag.value)) optionTag.selected = true;
        if(this.options.value==optionTag.value) optionTag.selected = true;
        optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e));
        selectTag.appendChild(optionTag);
      }.bind(this));
      this.cached_selectTag = selectTag;
    }

    this.editField = this.cached_selectTag;
    if(this.options.loadTextURL) this.loadExternalText();
    this.form.appendChild(this.editField);
    this.options.callback = function(form, value) {
      return "value=" + encodeURIComponent(value);
    }
  }
});

// Delayed observer, like Form.Element.Observer, 
// but waits for delay after last key input
// Ideal for live-search fields

Form.Element.DelayedObserver = Class.create();
Form.Element.DelayedObserver.prototype = {
  initialize: function(element, delay, callback) {
    this.delay     = delay || 0.5;
    this.element   = $(element);
    this.callback  = callback;
    this.timer     = null;
    this.lastValue = $F(this.element); 
    Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
  },
  delayedListener: function(event) {
    if(this.lastValue == $F(this.element)) return;
    if(this.timer) clearTimeout(this.timer);
    this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
    this.lastValue = $F(this.element);
  },
  onTimerEvent: function() {
    this.timer = null;
    this.callback(this.element, $F(this.element));
  }
};
                                                                                                                                                                                                            ./mvappsvr/docroot/db/javascripts/jquery-1.3.2.min.js                                               0000777 0000000 0000000 00000157646 12534142432 021306  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
 * jQuery JavaScript Library v1.3.2
 * http://jquery.com/
 *
 * Copyright (c) 2009 John Resig
 * Dual licensed under the MIT and GPL licenses.
 * http://docs.jquery.com/License
 *
 * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
 * Revision: 6246
 */
(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
/*
 * Sizzle CSS Selector Engine - v0.9.3
 *  Copyright 2009, The Dojo Foundation
 *  Released under the MIT, BSD, and GPL Licenses.
 *  More information: http://sizzlejs.com/
 */
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();                                                                                          ./mvappsvr/docroot/db/javascripts/effects.js                                                        0000777 0000000 0000000 00000111760 12534142432 020150  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   // script.aculo.us effects.js v1.7.0, Fri Jan 19 19:16:36 CET 2007

// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// Contributors:
//  Justin Palmer (http://encytemedia.com/)
//  Mark Pilgrim (http://diveintomark.org/)
//  Martin Bialasinki
// 
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/ 

// converts rgb() and #xxx to #xxxxxx format,  
// returns self (or first argument) if not convertable  
String.prototype.parseColor = function() {  
  var color = '#';
  if(this.slice(0,4) == 'rgb(') {  
    var cols = this.slice(4,this.length-1).split(',');  
    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  
  } else {  
    if(this.slice(0,1) == '#') {  
      if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  
      if(this.length==7) color = this.toLowerCase();  
    }  
  }  
  return(color.length==7 ? color : (arguments[0] || this));  
}

/*--------------------------------------------------------------------------*/

Element.collectTextNodes = function(element) {  
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue : 
      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
  }).flatten().join('');
}

Element.collectTextNodesIgnoreClass = function(element, className) {  
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue : 
      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? 
        Element.collectTextNodesIgnoreClass(node, className) : ''));
  }).flatten().join('');
}

Element.setContentZoom = function(element, percent) {
  element = $(element);  
  element.setStyle({fontSize: (percent/100) + 'em'});   
  if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
  return element;
}

Element.getOpacity = function(element){
  return $(element).getStyle('opacity');
}

Element.setOpacity = function(element, value){
  return $(element).setStyle({opacity:value});
}

Element.getInlineOpacity = function(element){
  return $(element).style.opacity || '';
}

Element.forceRerendering = function(element) {
  try {
    element = $(element);
    var n = document.createTextNode(' ');
    element.appendChild(n);
    element.removeChild(n);
  } catch(e) { }
};

/*--------------------------------------------------------------------------*/

Array.prototype.call = function() {
  var args = arguments;
  this.each(function(f){ f.apply(this, args) });
}

/*--------------------------------------------------------------------------*/

var Effect = {
  _elementDoesNotExistError: {
    name: 'ElementDoesNotExistError',
    message: 'The specified DOM element does not exist, but is required for this effect to operate'
  },
  tagifyText: function(element) {
    if(typeof Builder == 'undefined')
      throw("Effect.tagifyText requires including script.aculo.us' builder.js library");
      
    var tagifyStyle = 'position:relative';
    if(/MSIE/.test(navigator.userAgent) && !window.opera) tagifyStyle += ';zoom:1';
    
    element = $(element);
    $A(element.childNodes).each( function(child) {
      if(child.nodeType==3) {
        child.nodeValue.toArray().each( function(character) {
          element.insertBefore(
            Builder.node('span',{style: tagifyStyle},
              character == ' ' ? String.fromCharCode(160) : character), 
              child);
        });
        Element.remove(child);
      }
    });
  },
  multiple: function(element, effect) {
    var elements;
    if(((typeof element == 'object') || 
        (typeof element == 'function')) && 
       (element.length))
      elements = element;
    else
      elements = $(element).childNodes;
      
    var options = Object.extend({
      speed: 0.1,
      delay: 0.0
    }, arguments[2] || {});
    var masterDelay = options.delay;

    $A(elements).each( function(element, index) {
      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
    });
  },
  PAIRS: {
    'slide':  ['SlideDown','SlideUp'],
    'blind':  ['BlindDown','BlindUp'],
    'appear': ['Appear','Fade']
  },
  toggle: function(element, effect) {
    element = $(element);
    effect = (effect || 'appear').toLowerCase();
    var options = Object.extend({
      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
    }, arguments[2] || {});
    Effect[element.visible() ? 
      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
  }
};

var Effect2 = Effect; // deprecated

/* ------------- transitions ------------- */

Effect.Transitions = {
  linear: Prototype.K,
  sinoidal: function(pos) {
    return (-Math.cos(pos*Math.PI)/2) + 0.5;
  },
  reverse: function(pos) {
    return 1-pos;
  },
  flicker: function(pos) {
    return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
  },
  wobble: function(pos) {
    return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
  },
  pulse: function(pos, pulses) { 
    pulses = pulses || 5; 
    return (
      Math.round((pos % (1/pulses)) * pulses) == 0 ? 
            ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) : 
        1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2))
      );
  },
  none: function(pos) {
    return 0;
  },
  full: function(pos) {
    return 1;
  }
};

/* ------------- core effects ------------- */

Effect.ScopedQueue = Class.create();
Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {
  initialize: function() {
    this.effects  = [];
    this.interval = null;
  },
  _each: function(iterator) {
    this.effects._each(iterator);
  },
  add: function(effect) {
    var timestamp = new Date().getTime();
    
    var position = (typeof effect.options.queue == 'string') ? 
      effect.options.queue : effect.options.queue.position;
    
    switch(position) {
      case 'front':
        // move unstarted effects after this effect  
        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
            e.startOn  += effect.finishOn;
            e.finishOn += effect.finishOn;
          });
        break;
      case 'with-last':
        timestamp = this.effects.pluck('startOn').max() || timestamp;
        break;
      case 'end':
        // start effect after last queued effect has finished
        timestamp = this.effects.pluck('finishOn').max() || timestamp;
        break;
    }
    
    effect.startOn  += timestamp;
    effect.finishOn += timestamp;

    if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
      this.effects.push(effect);
    
    if(!this.interval) 
      this.interval = setInterval(this.loop.bind(this), 15);
  },
  remove: function(effect) {
    this.effects = this.effects.reject(function(e) { return e==effect });
    if(this.effects.length == 0) {
      clearInterval(this.interval);
      this.interval = null;
    }
  },
  loop: function() {
    var timePos = new Date().getTime();
    for(var i=0, len=this.effects.length;i<len;i++) 
      if(this.effects[i]) this.effects[i].loop(timePos);
  }
});

Effect.Queues = {
  instances: $H(),
  get: function(queueName) {
    if(typeof queueName != 'string') return queueName;
    
    if(!this.instances[queueName])
      this.instances[queueName] = new Effect.ScopedQueue();
      
    return this.instances[queueName];
  }
}
Effect.Queue = Effect.Queues.get('global');

Effect.DefaultOptions = {
  transition: Effect.Transitions.sinoidal,
  duration:   1.0,   // seconds
  fps:        60.0,  // max. 60fps due to Effect.Queue implementation
  sync:       false, // true for combining
  from:       0.0,
  to:         1.0,
  delay:      0.0,
  queue:      'parallel'
}

Effect.Base = function() {};
Effect.Base.prototype = {
  position: null,
  start: function(options) {
    this.options      = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});
    this.currentFrame = 0;
    this.state        = 'idle';
    this.startOn      = this.options.delay*1000;
    this.finishOn     = this.startOn + (this.options.duration*1000);
    this.event('beforeStart');
    if(!this.options.sync)
      Effect.Queues.get(typeof this.options.queue == 'string' ? 
        'global' : this.options.queue.scope).add(this);
  },
  loop: function(timePos) {
    if(timePos >= this.startOn) {
      if(timePos >= this.finishOn) {
        this.render(1.0);
        this.cancel();
        this.event('beforeFinish');
        if(this.finish) this.finish(); 
        this.event('afterFinish');
        return;  
      }
      var pos   = (timePos - this.startOn) / (this.finishOn - this.startOn);
      var frame = Math.round(pos * this.options.fps * this.options.duration);
      if(frame > this.currentFrame) {
        this.render(pos);
        this.currentFrame = frame;
      }
    }
  },
  render: function(pos) {
    if(this.state == 'idle') {
      this.state = 'running';
      this.event('beforeSetup');
      if(this.setup) this.setup();
      this.event('afterSetup');
    }
    if(this.state == 'running') {
      if(this.options.transition) pos = this.options.transition(pos);
      pos *= (this.options.to-this.options.from);
      pos += this.options.from;
      this.position = pos;
      this.event('beforeUpdate');
      if(this.update) this.update(pos);
      this.event('afterUpdate');
    }
  },
  cancel: function() {
    if(!this.options.sync)
      Effect.Queues.get(typeof this.options.queue == 'string' ? 
        'global' : this.options.queue.scope).remove(this);
    this.state = 'finished';
  },
  event: function(eventName) {
    if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
    if(this.options[eventName]) this.options[eventName](this);
  },
  inspect: function() {
    var data = $H();
    for(property in this)
      if(typeof this[property] != 'function') data[property] = this[property];
    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
  }
}

Effect.Parallel = Class.create();
Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {
  initialize: function(effects) {
    this.effects = effects || [];
    this.start(arguments[1]);
  },
  update: function(position) {
    this.effects.invoke('render', position);
  },
  finish: function(position) {
    this.effects.each( function(effect) {
      effect.render(1.0);
      effect.cancel();
      effect.event('beforeFinish');
      if(effect.finish) effect.finish(position);
      effect.event('afterFinish');
    });
  }
});

Effect.Event = Class.create();
Object.extend(Object.extend(Effect.Event.prototype, Effect.Base.prototype), {
  initialize: function() {
    var options = Object.extend({
      duration: 0
    }, arguments[0] || {});
    this.start(options);
  },
  update: Prototype.emptyFunction
});

Effect.Opacity = Class.create();
Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    // make this work on IE on elements without 'layout'
    if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout))
      this.element.setStyle({zoom: 1});
    var options = Object.extend({
      from: this.element.getOpacity() || 0.0,
      to:   1.0
    }, arguments[1] || {});
    this.start(options);
  },
  update: function(position) {
    this.element.setOpacity(position);
  }
});

Effect.Move = Class.create();
Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      x:    0,
      y:    0,
      mode: 'relative'
    }, arguments[1] || {});
    this.start(options);
  },
  setup: function() {
    // Bug in Opera: Opera returns the "real" position of a static element or
    // relative element that does not have top/left explicitly set.
    // ==> Always set top and left for position relative elements in your stylesheets 
    // (to 0 if you do not need them) 
    this.element.makePositioned();
    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
    if(this.options.mode == 'absolute') {
      // absolute movement, so we need to calc deltaX and deltaY
      this.options.x = this.options.x - this.originalLeft;
      this.options.y = this.options.y - this.originalTop;
    }
  },
  update: function(position) {
    this.element.setStyle({
      left: Math.round(this.options.x  * position + this.originalLeft) + 'px',
      top:  Math.round(this.options.y  * position + this.originalTop)  + 'px'
    });
  }
});

// for backwards compatibility
Effect.MoveBy = function(element, toTop, toLeft) {
  return new Effect.Move(element, 
    Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));
};

Effect.Scale = Class.create();
Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
  initialize: function(element, percent) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      scaleX: true,
      scaleY: true,
      scaleContent: true,
      scaleFromCenter: false,
      scaleMode: 'box',        // 'box' or 'contents' or {} with provided values
      scaleFrom: 100.0,
      scaleTo:   percent
    }, arguments[2] || {});
    this.start(options);
  },
  setup: function() {
    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
    this.elementPositioning = this.element.getStyle('position');
    
    this.originalStyle = {};
    ['top','left','width','height','fontSize'].each( function(k) {
      this.originalStyle[k] = this.element.style[k];
    }.bind(this));
      
    this.originalTop  = this.element.offsetTop;
    this.originalLeft = this.element.offsetLeft;
    
    var fontSize = this.element.getStyle('font-size') || '100%';
    ['em','px','%','pt'].each( function(fontSizeType) {
      if(fontSize.indexOf(fontSizeType)>0) {
        this.fontSize     = parseFloat(fontSize);
        this.fontSizeType = fontSizeType;
      }
    }.bind(this));
    
    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
    
    this.dims = null;
    if(this.options.scaleMode=='box')
      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
    if(/^content/.test(this.options.scaleMode))
      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
    if(!this.dims)
      this.dims = [this.options.scaleMode.originalHeight,
                   this.options.scaleMode.originalWidth];
  },
  update: function(position) {
    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
    if(this.options.scaleContent && this.fontSize)
      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
  },
  finish: function(position) {
    if(this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
  },
  setDimensions: function(height, width) {
    var d = {};
    if(this.options.scaleX) d.width = Math.round(width) + 'px';
    if(this.options.scaleY) d.height = Math.round(height) + 'px';
    if(this.options.scaleFromCenter) {
      var topd  = (height - this.dims[0])/2;
      var leftd = (width  - this.dims[1])/2;
      if(this.elementPositioning == 'absolute') {
        if(this.options.scaleY) d.top = this.originalTop-topd + 'px';
        if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
      } else {
        if(this.options.scaleY) d.top = -topd + 'px';
        if(this.options.scaleX) d.left = -leftd + 'px';
      }
    }
    this.element.setStyle(d);
  }
});

Effect.Highlight = Class.create();
Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});
    this.start(options);
  },
  setup: function() {
    // Prevent executing on elements not in the layout flow
    if(this.element.getStyle('display')=='none') { this.cancel(); return; }
    // Disable background image during the effect
    this.oldStyle = {};
    if (!this.options.keepBackgroundImage) {
      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
      this.element.setStyle({backgroundImage: 'none'});
    }
    if(!this.options.endcolor)
      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
    if(!this.options.restorecolor)
      this.options.restorecolor = this.element.getStyle('background-color');
    // init color calculations
    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
  },
  update: function(position) {
    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
      return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });
  },
  finish: function() {
    this.element.setStyle(Object.extend(this.oldStyle, {
      backgroundColor: this.options.restorecolor
    }));
  }
});

Effect.ScrollTo = Class.create();
Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    this.start(arguments[1] || {});
  },
  setup: function() {
    Position.prepare();
    var offsets = Position.cumulativeOffset(this.element);
    if(this.options.offset) offsets[1] += this.options.offset;
    var max = window.innerHeight ? 
      window.height - window.innerHeight :
      document.body.scrollHeight - 
        (document.documentElement.clientHeight ? 
          document.documentElement.clientHeight : document.body.clientHeight);
    this.scrollStart = Position.deltaY;
    this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;
  },
  update: function(position) {
    Position.prepare();
    window.scrollTo(Position.deltaX, 
      this.scrollStart + (position*this.delta));
  }
});

/* ------------- combination effects ------------- */

Effect.Fade = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  var options = Object.extend({
  from: element.getOpacity() || 1.0,
  to:   0.0,
  afterFinishInternal: function(effect) { 
    if(effect.options.to!=0) return;
    effect.element.hide().setStyle({opacity: oldOpacity}); 
  }}, arguments[1] || {});
  return new Effect.Opacity(element,options);
}

Effect.Appear = function(element) {
  element = $(element);
  var options = Object.extend({
  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
  to:   1.0,
  // force Safari to render floated elements properly
  afterFinishInternal: function(effect) {
    effect.element.forceRerendering();
  },
  beforeSetup: function(effect) {
    effect.element.setOpacity(effect.options.from).show(); 
  }}, arguments[1] || {});
  return new Effect.Opacity(element,options);
}

Effect.Puff = function(element) {
  element = $(element);
  var oldStyle = { 
    opacity: element.getInlineOpacity(), 
    position: element.getStyle('position'),
    top:  element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height
  };
  return new Effect.Parallel(
   [ new Effect.Scale(element, 200, 
      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), 
     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], 
     Object.extend({ duration: 1.0, 
      beforeSetupInternal: function(effect) {
        Position.absolutize(effect.effects[0].element)
      },
      afterFinishInternal: function(effect) {
         effect.effects[0].element.hide().setStyle(oldStyle); }
     }, arguments[1] || {})
   );
}

Effect.BlindUp = function(element) {
  element = $(element);
  element.makeClipping();
  return new Effect.Scale(element, 0,
    Object.extend({ scaleContent: false, 
      scaleX: false, 
      restoreAfterFinish: true,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping();
      } 
    }, arguments[1] || {})
  );
}

Effect.BlindDown = function(element) {
  element = $(element);
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false,
    scaleFrom: 0,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
    },  
    afterFinishInternal: function(effect) {
      effect.element.undoClipping();
    }
  }, arguments[1] || {}));
}

Effect.SwitchOff = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  return new Effect.Appear(element, Object.extend({
    duration: 0.4,
    from: 0,
    transition: Effect.Transitions.flicker,
    afterFinishInternal: function(effect) {
      new Effect.Scale(effect.element, 1, { 
        duration: 0.3, scaleFromCenter: true,
        scaleX: false, scaleContent: false, restoreAfterFinish: true,
        beforeSetup: function(effect) { 
          effect.element.makePositioned().makeClipping();
        },
        afterFinishInternal: function(effect) {
          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
        }
      })
    }
  }, arguments[1] || {}));
}

Effect.DropOut = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left'),
    opacity: element.getInlineOpacity() };
  return new Effect.Parallel(
    [ new Effect.Move(element, {x: 0, y: 100, sync: true }), 
      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
    Object.extend(
      { duration: 0.5,
        beforeSetup: function(effect) {
          effect.effects[0].element.makePositioned(); 
        },
        afterFinishInternal: function(effect) {
          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
        } 
      }, arguments[1] || {}));
}

Effect.Shake = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left') };
    return new Effect.Move(element, 
      { x:  20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
        effect.element.undoPositioned().setStyle(oldStyle);
  }}) }}) }}) }}) }}) }});
}

Effect.SlideDown = function(element) {
  element = $(element).cleanWhitespace();
  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false, 
    scaleFrom: window.opera ? 0 : 1,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if(window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
    },
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' }); 
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
    }, arguments[1] || {})
  );
}

Effect.SlideUp = function(element) {
  element = $(element).cleanWhitespace();
  var oldInnerBottom = element.down().getStyle('bottom');
  return new Effect.Scale(element, window.opera ? 0 : 1,
   Object.extend({ scaleContent: false, 
    scaleX: false, 
    scaleMode: 'box',
    scaleFrom: 100,
    restoreAfterFinish: true,
    beforeStartInternal: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if(window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().show();
    },  
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' });
    },
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom});
      effect.element.down().undoPositioned();
    }
   }, arguments[1] || {})
  );
}

// Bug in opera makes the TD containing this element expand for a instance after finish 
Effect.Squish = function(element) {
  return new Effect.Scale(element, window.opera ? 1 : 0, { 
    restoreAfterFinish: true,
    beforeSetup: function(effect) {
      effect.element.makeClipping(); 
    },  
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping(); 
    }
  });
}

Effect.Grow = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.full
  }, arguments[1] || {});
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();    
  var initialMoveX, initialMoveY;
  var moveX, moveY;
  
  switch (options.direction) {
    case 'top-left':
      initialMoveX = initialMoveY = moveX = moveY = 0; 
      break;
    case 'top-right':
      initialMoveX = dims.width;
      initialMoveY = moveY = 0;
      moveX = -dims.width;
      break;
    case 'bottom-left':
      initialMoveX = moveX = 0;
      initialMoveY = dims.height;
      moveY = -dims.height;
      break;
    case 'bottom-right':
      initialMoveX = dims.width;
      initialMoveY = dims.height;
      moveX = -dims.width;
      moveY = -dims.height;
      break;
    case 'center':
      initialMoveX = dims.width / 2;
      initialMoveY = dims.height / 2;
      moveX = -dims.width / 2;
      moveY = -dims.height / 2;
      break;
  }
  
  return new Effect.Move(element, {
    x: initialMoveX,
    y: initialMoveY,
    duration: 0.01, 
    beforeSetup: function(effect) {
      effect.element.hide().makeClipping().makePositioned();
    },
    afterFinishInternal: function(effect) {
      new Effect.Parallel(
        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
          new Effect.Scale(effect.element, 100, {
            scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, 
            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
        ], Object.extend({
             beforeSetup: function(effect) {
               effect.effects[0].element.setStyle({height: '0px'}).show(); 
             },
             afterFinishInternal: function(effect) {
               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); 
             }
           }, options)
      )
    }
  });
}

Effect.Shrink = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.none
  }, arguments[1] || {});
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();
  var moveX, moveY;
  
  switch (options.direction) {
    case 'top-left':
      moveX = moveY = 0;
      break;
    case 'top-right':
      moveX = dims.width;
      moveY = 0;
      break;
    case 'bottom-left':
      moveX = 0;
      moveY = dims.height;
      break;
    case 'bottom-right':
      moveX = dims.width;
      moveY = dims.height;
      break;
    case 'center':  
      moveX = dims.width / 2;
      moveY = dims.height / 2;
      break;
  }
  
  return new Effect.Parallel(
    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
    ], Object.extend({            
         beforeStartInternal: function(effect) {
           effect.effects[0].element.makePositioned().makeClipping(); 
         },
         afterFinishInternal: function(effect) {
           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
       }, options)
  );
}

Effect.Pulsate = function(element) {
  element = $(element);
  var options    = arguments[1] || {};
  var oldOpacity = element.getInlineOpacity();
  var transition = options.transition || Effect.Transitions.sinoidal;
  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
  reverser.bind(transition);
  return new Effect.Opacity(element, 
    Object.extend(Object.extend({  duration: 2.0, from: 0,
      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
    }, options), {transition: reverser}));
}

Effect.Fold = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height };
  element.makeClipping();
  return new Effect.Scale(element, 5, Object.extend({   
    scaleContent: false,
    scaleX: false,
    afterFinishInternal: function(effect) {
    new Effect.Scale(element, 1, { 
      scaleContent: false, 
      scaleY: false,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping().setStyle(oldStyle);
      } });
  }}, arguments[1] || {}));
};

Effect.Morph = Class.create();
Object.extend(Object.extend(Effect.Morph.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      style: {}
    }, arguments[1] || {});
    if (typeof options.style == 'string') {
      if(options.style.indexOf(':') == -1) {
        var cssText = '', selector = '.' + options.style;
        $A(document.styleSheets).reverse().each(function(styleSheet) {
          if (styleSheet.cssRules) cssRules = styleSheet.cssRules;
          else if (styleSheet.rules) cssRules = styleSheet.rules;
          $A(cssRules).reverse().each(function(rule) {
            if (selector == rule.selectorText) {
              cssText = rule.style.cssText;
              throw $break;
            }
          });
          if (cssText) throw $break;
        });
        this.style = cssText.parseStyle();
        options.afterFinishInternal = function(effect){
          effect.element.addClassName(effect.options.style);
          effect.transforms.each(function(transform) {
            if(transform.style != 'opacity')
              effect.element.style[transform.style.camelize()] = '';
          });
        }
      } else this.style = options.style.parseStyle();
    } else this.style = $H(options.style)
    this.start(options);
  },
  setup: function(){
    function parseColor(color){
      if(!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
      color = color.parseColor();
      return $R(0,2).map(function(i){
        return parseInt( color.slice(i*2+1,i*2+3), 16 ) 
      });
    }
    this.transforms = this.style.map(function(pair){
      var property = pair[0].underscore().dasherize(), value = pair[1], unit = null;

      if(value.parseColor('#zzzzzz') != '#zzzzzz') {
        value = value.parseColor();
        unit  = 'color';
      } else if(property == 'opacity') {
        value = parseFloat(value);
        if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout))
          this.element.setStyle({zoom: 1});
      } else if(Element.CSS_LENGTH.test(value)) 
        var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/),
          value = parseFloat(components[1]), unit = (components.length == 3) ? components[2] : null;

      var originalValue = this.element.getStyle(property);
      return $H({ 
        style: property, 
        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), 
        targetValue: unit=='color' ? parseColor(value) : value,
        unit: unit
      });
    }.bind(this)).reject(function(transform){
      return (
        (transform.originalValue == transform.targetValue) ||
        (
          transform.unit != 'color' &&
          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
        )
      )
    });
  },
  update: function(position) {
    var style = $H(), value = null;
    this.transforms.each(function(transform){
      value = transform.unit=='color' ?
        $R(0,2).inject('#',function(m,v,i){
          return m+(Math.round(transform.originalValue[i]+
            (transform.targetValue[i] - transform.originalValue[i])*position)).toColorPart() }) : 
        transform.originalValue + Math.round(
          ((transform.targetValue - transform.originalValue) * position) * 1000)/1000 + transform.unit;
      style[transform.style] = value;
    });
    this.element.setStyle(style);
  }
});

Effect.Transform = Class.create();
Object.extend(Effect.Transform.prototype, {
  initialize: function(tracks){
    this.tracks  = [];
    this.options = arguments[1] || {};
    this.addTracks(tracks);
  },
  addTracks: function(tracks){
    tracks.each(function(track){
      var data = $H(track).values().first();
      this.tracks.push($H({
        ids:     $H(track).keys().first(),
        effect:  Effect.Morph,
        options: { style: data }
      }));
    }.bind(this));
    return this;
  },
  play: function(){
    return new Effect.Parallel(
      this.tracks.map(function(track){
        var elements = [$(track.ids) || $$(track.ids)].flatten();
        return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) });
      }).flatten(),
      this.options
    );
  }
});

Element.CSS_PROPERTIES = $w(
  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
  'fontSize fontWeight height left letterSpacing lineHeight ' +
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
  'right textIndent top width wordSpacing zIndex');
  
Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;

String.prototype.parseStyle = function(){
  var element = Element.extend(document.createElement('div'));
  element.innerHTML = '<div style="' + this + '"></div>';
  var style = element.down().style, styleRules = $H();
  
  Element.CSS_PROPERTIES.each(function(property){
    if(style[property]) styleRules[property] = style[property]; 
  });
  if(/MSIE/.test(navigator.userAgent) && !window.opera && this.indexOf('opacity') > -1) {
    styleRules.opacity = this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1];
  }
  return styleRules;
};

Element.morph = function(element, style) {
  new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || {}));
  return element;
};

['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setContentZoom',
 'collectTextNodes','collectTextNodesIgnoreClass','morph'].each( 
  function(f) { Element.Methods[f] = Element[f]; }
);

Element.Methods.visualEffect = function(element, effect, options) {
  s = effect.gsub(/_/, '-').camelize();
  effect_class = s.charAt(0).toUpperCase() + s.substring(1);
  new Effect[effect_class](element, options);
  return $(element);
};

Element.addMethods();                ./mvappsvr/docroot/db/javascripts/jquery.sheet.js                                                   0000666 0000000 0000000 00000276623 12534142432 021166  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
jQuery.sheet() Spreadsheet with Calculations Plugin
Version: 1.01
http://code.google.com/p/jquerysheet/
		
Copyright (C) 2010 Robert Plummer
Dual licensed under the LGPL and GPL licenses.
http://www.gnu.org/licenses/
*/

/*
	Dimensions Info:
		When dealing with size, it seems that outerHeight is generally the most stable cross browser
		attribute to use for bar sizing.  We try to use this as much as possible.  But because col's
		don't have boarders, we subtract or add jS.attrH.boxModelCorrection() for those browsers.
	tr/td column and row Index VS cell/column/row index
		DOM elements are all 0 based (tr/td/table)
		Spreadsheet elements are all 1 based (A1, A1:B4, TABLE2:A1, TABLE2:A1:B4)
		Column/Row/Cell
	sheet import and export methods structure (jS.importSheet.xml(obj), jS.importSheet.json(obj), jS.exportSheet.xml(), jS.exportSheet.json());
		xml structure:
			//xml
			<documents>
				<document> //repeats
					<metadata>
						<columns>{Column_Count}</columns>
						<rows>{Row_Count}</rows>
						<title></title>
					</metadata>
					<data>
						<r{Row_Index}> //repeats
							<c{Column_Index}></c{Column_Index}> //repeats
						</r{Row_Index}>
					</data>
				</document>
			</documents>
		json structure:
			var documents = [
				document: { //repeats
					metadata: {
						columns: Column_Count,
						rows: Row_Count,
						title: ''
					},
					data: {
						r{Row_Index}: { //repeats
							c{Column_Index}: '' //repeats
						}
					}
				}
			];
	DOCTYPE:
		It is recommended to use STRICT doc types on the viewing page when using sheet to ensure that the heights/widths of bars and sheet rows show up correctly
		Example of recommended doc type: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
*/

jQuery.fn.extend({
	sheet: function(settings) {
		settings = jQuery.extend({
			urlGet: 		"documentation.html", 			//local url, if you want to get a sheet from a url
			urlSave: 		"save.html", 					//local url, for use only with the default save for sheet
			editable: 		true, 							//bool, Makes the jSheetControls_formula & jSheetControls_fx appear
			urlMenu: 		"menu.html", 					//local url, for the menu to the right of title
			newColumnWidth: 120, 							//int, the width of new columns or columns that have no width assigned
			title: 			null, 							//html, general title of the sheet group
			inlineMenu:		null, 							//html, menu for editing sheet
			buildSheet: 	false,							//bool, string, or object
																//bool true - build sheet inside of parent
																//bool false - use urlGet from local url
																//string  - '{number_of_cols}x{number_of_rows} (5x100)
																//object - table
			calcOff: 		false, 							//bool, turns calculationEngine off (no spreadsheet, just grid)
			log: 			false, 							//bool, turns some debugging logs on (jS.log('msg'))
			lockFormulas: 	false, 							//bool, turns the ability to edit any formula off
			parent: 		this, 							//object, sheet's parent, DON'T CHANGE
			colMargin: 		18, 							//int, the height and the width of all bar items, and new rows
			fnBefore: 		function() {}, 					//fn, fires just before jQuery.sheet loads
			fnAfter: 			function() {}, 				//fn, fires just after all sheets load
			fnSave: 		function() { jS.saveSheet(); }, //fn, default save function, more of a proof of concept
			fnOpen: 		function() { 					//fn, by default allows you to paste table html into a javascript prompt for you to see what it looks likes if you where to use sheet
				var t = prompt('Paste your table html here');
				if (t) {
					jS.openSheet(t);
				}
			},
			fnClose: 		function() {}, //fn, default clase function, more of a proof of concept
			joinedResizing: false, //bool, this joins the column/row with the resize bar
			boxModelCorrection: 2 //int, attempts to correct the differences found in heights and widths of different browsers, if you mess with this, get ready for the must upsetting and delacate js ever
		}, settings);
		jQuery.fn.sheet.settings = jS.s = settings;
		jS.s.fnBefore();
		
		var obj;
		if (jS.s.buildSheet) {//override urlGet, this has some effect on how the topbar is sized
			if (typeof(jS.s.buildSheet) == 'object') {
				obj = jS.s.buildSheet;
			} else if (jS.s.buildSheet == true || jS.s.buildSheet == 'true') {
				obj = jQuery(jQuery(this).html());
			} else if (jS.s.buildSheet.match(/x/i)) {
				obj = jS.controlFactory.sheet(jS.s.buildSheet);
			}
		}
		
		//We need to take the sheet out of the parent in order to get an accurate reading of it's height and width
		//jQuery(this).html(jS.s.loading);
		jQuery(this).html('');
		
		jS.s.width = jQuery(this).width();
		jS.s.height = jQuery(this).height();
		
		if (jS.s.log) {
			jQuery(jS.s.parent).after('<textarea id="' + jS.id.log + '" />');
		} else {
			jS.log = function() {}; //save time in recursion
		}
		
		if (!jQuery.scrollTo) {
			jS.followMe = function() {};
		}
		
		jS.log('Startup');
		

		//Make functions upper and lower case compatible
		for (var k in cE.fn) {
			var kLower = k.toLowerCase();
			if (kLower != k) {
				cE.fn[kLower] = cE.fn[k];
			}
		}
		
		jQuery(window).resize(function() {
			jS.s.width = jQuery(jS.s.parent).width();
			jS.s.height = jQuery(jS.s.parent).height();
			jS.sheetSyncSize();
		});
		
		jS.openSheet(obj);		
	}
});

var jS = jQuery.sheet = {
	version: '1.01',
	i: 0,
	sheetCount: 0,
	s: {},//s = settings object, used for shorthand, populated from jQuery.sheet
	obj: {//obj = object references
		parent: 			function() { return jQuery(jS.s.parent); },
		ui:					function() { return jQuery('#' + jS.id.ui); },
		sheet: 				function() { return jQuery('#' + jS.id.sheet + jS.i); },
		sheetAll: 			function() { return jQuery('.' + jS.cl.sheet); },
		barTop: 			function() { return jQuery('#' + jS.id.barTop + jS.i); },
		barTopAll:			function() { return jQuery('.' + jS.cl.barTop); },
		barTopParent: 		function() { return jQuery('#' + jS.id.barTopParent + jS.i); },
		barTopParentAll:	function() { return jQuery('.' + jS.cl.barTopParent); },
		barLeft: 			function() { return jQuery('#' + jS.id.barLeft + jS.i); },
		barLeftAll:			function() { return jQuery('.' + jS.cl.barLeft); },
		barLeftParent: 		function() { return jQuery('#' + jS.id.barLeftParent + jS.i); },
		barLeftParentAll:	function() { return jQuery('.' + jS.cl.barLeftParent); },
		barCorner:			function() { return jQuery('#' + jS.id.barCorner + jS.i); },
		barCornerAll:		function() { return jQuery('.' + jS.cl.barCorner); },
		barCornerParent:	function() { return jQuery('#' + jS.id.barCornerParent + jS.i); },
		barCornerParentAll: function() { return jQuery('.' + jS.cl.barCornerParent); },
		barSelected:		function() { return jQuery('.' + jS.cl.barSelected); },
		cell: 				function() { return jQuery('.' + jS.cl.cell); },
		controls:			function() { return jQuery('#' + jS.id.controls); },
		formula: 			function() { return jQuery('#' + jS.id.formula); },
		label: 				function() { return jQuery('#' + jS.id.label); },
		fx:					function() { return jQuery('#' + jS.id.fx); },
		pane: 				function() { return jQuery('#' + jS.id.pane + jS.i); },
		paneAll:			function() { return jQuery('.' + jS.cl.pane); },
		log: 				function() { return jQuery('#' + jS.id.log); },
		menu:				function() { return jQuery('#' + jS.id.menu); },
		uiDefault:			function() { return jQuery('.' + jS.cl.uiDefault); },
		uiActive:			function() { return jQuery('.' + jS.cl.uiActive); },
		uiBase:				function() { return jQuery('.' + jS.cl.uiBase); },
		uiCell:				function() { return jQuery('.' + jS.cl.uiCell); },
		toggle:				function() { return jQuery('.' + jS.cl.toggle); },
		tableBody: 			function() { return document.getElementById(jS.id.sheet + jS.i); },
		tableControl:		function() { return jQuery('#' + jS.id.tableControl + jS.i); },
		tableControlAll:	function() { return jQuery('.' + jS.cl.tableControl); },
		tab:				function() { return jQuery('#' + jS.id.tab + jS.i); },
		tabAll:				function() { return jQuery('.' + jS.cl.tab); },
		tabContainer:		function() { return jQuery('#' + jS.id.tabContainer); }
	},
	id: {//id = id's references
		sheet: 			'jSheet',//This con probably be just about any value as long as it's not a duplicated id
		ui:				'jSheetUI',
		barTop: 		'jSheetBarTop',
		barTopParent: 	'jSheetBarTopParent',
		barLeft: 		'jSheetBarLeft',
		barLeftParent: 	'jSheetBarLeftParent',
		barCorner:		'jSheetBarCorner',
		barCornerParent:'jSheetBarCornerParent',
		controls:		'jSheetControls',
		formula: 		'jSheetControls_formula',
		label: 			'jSheetControls_loc',
		fx:				'jSheetControls_fx',
		pane: 			'jSheetEditPane',
		log: 			'jSheetLog',
		menu:			'jSheetMenu',
		tableControl:	'tableControl',
		tab:			'jSheetTab',
		tabContainer:	'jSheetTabContainer'
	},
	cl: {//cl = class references
		sheet: 			'jSheet',
		barTop: 		'jSheetBarTop',
		barTopParent: 	'jSheetBarTopParent',
		barLeft: 		'jSheetBarLeft',
		barLeftParent: 	'jSheetBarLeftParent',
		barCorner:		'jSheetBarCorner',
		barCornerParent:'jSheetBarCornerParent',
		pane: 			'jSheetEditPane',
		cell: 			'jSheetCellActive',
		barSelected: 	'jSheetBarItemSelected',
		uiDefault:		'ui-state-default',
		uiActive:		'ui-state-active',
		uiBase:			'ui-widget-content',
		uiParent: 		'ui-widget-content ui-corner-all',
		uiSheet:		'ui-widget-content',
		uiBar: 			'ui-widget-header',
		uiPane: 		'ui-widget-content',
		uiMenuUl: 		'ui-widget-header',
		uiMenuLi: 		'ui-widget-header',
		uiMenuHighlighted: 'ui-state-highlight',
		uiControl: 		'ui-widget-header ui-corner-top',
		uiControlTextBox:'ui-widget-content',
		uiCell:			'themeRoller_activeCell',
		uiCellHighlighted: 'ui-state-highlight',
		tableControl:	'tableControl',
		toggle:			'cellStyleToggle',
		tab:			'jSheetTab',
		barTopTd:		'barTop',
		barLeftTd:		'barLeft',
		sheetPaneTd:	'sheetPane'
	},
	controlFactory: {
		addRowMulti: function(qty) {
			if (!qty) {
				qty = prompt('How many rows would you like to add?');
			}
			if (qty) {
				for (var i = 0; i <= qty; i++) {
					jS.controlFactory.addRow();
				}
			}
			jS.setTdIds();
		},
		addColumnMulti: function(qty) {
			if (!qty) {
				qty = prompt('How many columns would you like to add?');
			}
			if (qty) {
				for (var i = 0; i <= qty; i++) {
					jS.controlFactory.addColumn();
				}
			}
			jS.setTdIds();
		},
		addRow: function(atRow, insertBefore, atRowQ) {
			if (!atRowQ) {
				if (!atRow && jS.rowLast > -1) {
					atRowQ = ':eq(' + jS.rowLast + ')';
				} else if (!atRow || jS.cellLast.row < 1) {
					//if atRow has no value, lets just add it to the end.
					atRowQ = ':last';
					atRow = false;
				} else if (atRow === true) {//if atRow is boolean, then lets add it just after the currently selected row.
					atRowQ = ':eq(' + (jS.cellLast.row - 1) + ')';
				} else {
					//If atRow is a number, lets add it at that row
					atRowQ = ':eq(' + (atRow - 1) + ')';
				}
			}
			
			jS.evt.cellEditAbandon();
			var currentRow = jS.obj.sheet().find('tr' + atRowQ);
			var newRow = currentRow.clone();
			newRow.find('td').andSelf().height(jS.attrH.height(currentRow.find('td:first'), true));
			
			jQuery(newRow).find('td')
				.html('')
				.attr('class', '')
				.removeAttr('formula')
				.keydown(function(e) {
					return jS.evt.formulaKeyDown(e, true);
				});
			if (insertBefore) {
				newRow.insertBefore(currentRow);
			} else {
				newRow.insertAfter(currentRow);
			}
			
			var currentBar = jS.obj.barLeft().find('div' + atRowQ);
			var newBar = currentBar.clone();
			
			jS.themeRoller.newBar(newBar);
			
			newBar
				.html(parseInt(currentBar.text()) + 1)
				.removeClass(jS.cl.uiActive)
				.height(jS.attrH.height(newRow));
			
			//jS.log('New row at: ' + (parseInt(currentBar.text()) + 1));
			
			if (insertBefore) {
				newBar.insertBefore(currentBar);
			} else {
				newBar.insertAfter(currentBar);
			}
			
			if (atRow || atRowQ) {//If atRow equals anything it means that we inserted at a point, because of this we need to update the labels
				jS.obj.barLeft().find('div').each(function(i) {
					jQuery(this).text(i + 1);
				});
			}

			jS.setTdIds();
			jS.obj.pane().scroll();
		},
		addColumn: function(atColumn, insertBefore, atColumnQ) {
			if (!atColumnQ) {
				if (!atColumn && jS.colLast > -1) {
					atColumn = ':eq(' + jS.colLast + ')';
				} else if (!atColumn || jS.cellLast.col < 1) {
					//if atColumn has no value, lets just add it to the end.
					atColumn = ':last';
				} else if (atColumn === true) {
					//if atColumn is boolean, then lets add it just after the currently selected row.
					atColumn = ':eq(' + (jS.cellLast.col - 1) + ')';
				} else {
					//If atColumn is a number, lets add it at that row
					atColumn = ':eq(' + (atColumn - 1) + ')';
				}
			} else {
				atColumn = atColumnQ;
			}

			jS.evt.cellEditAbandon();
			
			//there are 3 obj that need managed here div, col, and each tr's td
			//Lets get the current div & col, then later we go through each row
			var currentBar = jS.obj.barTop().find('div' + atColumn);
			var currentCol = jS.obj.sheet().find('col' + atColumn);
			
			//Lets create our new bar, cell, and col
			var newBar = currentBar.clone().width(jS.s.newColumnWidth - jS.attrH.boxModelCorrection());
			var newCol = currentCol.clone().width(jS.s.newColumnWidth);
			var newCell = jQuery('<td></td>');
			
			//This is just to get the new label
			var currentIndex = cE.columnLabelIndex(currentBar.text());
			var newLabel = cE.columnLabelString(currentIndex + 1);
			jS.log('New Column: ' + currentIndex + ', ' + newLabel);
			
			if (insertBefore) {
				currentCol.before(newCol);
				currentBar.before(newBar);
			} else {
				currentCol.after(newCol);
				currentBar.after(newBar);
			}
				
			//Add new spreadsheet column to top
			
			var j = 0;
			var addNewCellFn;
			if (insertBefore) {
				addNewCellFn = function(obj) {
					jQuery(obj).find('td' + atColumn).before(
						newCell.clone()
					);
				};
			} else {
				addNewCellFn = function(obj) {
					jQuery(obj).find('td' + atColumn).after(
						newCell.clone()
					);
				};
			}
			
			jS.obj.sheet().find('tr').each(function(i) {
				addNewCellFn(this);
				j++;
			});
			
			//jS.log('Sheet length: ' + j);		
			
			if (atColumn) {//If atColumn equals anything it means that we inserted at a point, because of this we need to update the labels
				jS.obj.barTop().find('div').each(function(i) {
					jQuery(this).text(cE.columnLabelString(i + 1));
				});
			}
			
			jS.attrH.syncSheetWidthFromTds();
			
			jS.setTdIds();
			jS.obj.pane().scroll();
		},
		barLeft: function(reload, o) {//Works great!
			jS.obj.barLeft().remove();
			var barLeft = jQuery('<div border="1px" id="' + jS.id.barLeft + jS.i + '" class="' + jS.id.barLeft + '" />').height('10000px');
			var heightFn;
			if (reload) { //This is our standard way of detecting height when a sheet loads from a url
				heightFn = function(i, objSource, objBar) {
					objBar.height(parseInt(objSource.outerHeight()) - jS.attrH.boxModelCorrection());
				};
			} else { //This way of detecting height is used becuase the object has some problems getting
					//height because both tr and td have height set
					//This corrects the problem
					//This is only used when a sheet is already loaded in the pane
				heightFn = function(i, objSource, objBar) {
					objBar.height(parseInt(objSource.css('height').replace('px','')) - jS.attrH.boxModelCorrection());
				};
			}
			
			jS.evt.barMouseDown.height(barLeft);
			
			o.find('tr').each(function(i) {
				var child = jQuery('<div>' + (i + 1) + '</div>');
				jQuery(barLeft).append(child);
				heightFn(i, jQuery(this), child);
			});
			barLeft.appendTo(jS.obj.barLeftParent());
		},
		barTop: function(reload, o) { //Works great!
			jS.obj.barTop().remove();
			var barTop = jQuery('<div id="' + jS.id.barTop + jS.i + '" class="' + jS.id.barTop + '" />').width('10000px');
			barTop.height(jS.s.colMargin);
			
			var parents;
			var widthFn;
			
			if (reload) {
				parents = o.find('tr:first td');
				widthFn = function(obj) {
					return jS.attrH.width(obj);
				};
			} else {
				parents = o.find('col');
				widthFn = function(obj) {
					return parseInt(jQuery(obj).css('width').replace('px','')) - jS.attrH.boxModelCorrection();
				};
			}
			
			jS.evt.barMouseDown.width(barTop);
			
			parents.each(function(i) {
				var v = cE.columnLabelString(i + 1);
				var w = widthFn(this);
				
				var child = jQuery("<div>" + v + "</div>")
					.width(w)
					.height(jS.s.colMargin);
				barTop.append(child);
			});
			
			// Prepend one colgroup/col element that covers the new row headers.
			//jS.attrH.syncSheetWidthFromTds();
			
			jS.obj.barTopParent().append(barTop);
		},
		header: function() {
			jS.obj.controls().remove();
			jS.obj.tabContainer().remove();
			
			var header = jQuery('<div id="' + jS.id.controls + '"></div>');
			
			var firstRow = jQuery('<table cellpadding="0" cellspacing="0" border="0"><tr /></table>').prependTo(header);
			var firstRowTr = jQuery('<tr />');
			
			if (jS.s.title) {
				firstRowTr.append(jQuery('<td style="width: auto;text-align: center;" />').html(jS.s.title));
			}
			
			if (jS.s.inlineMenu && jS.s.editable) {
				firstRowTr.append(jQuery('<td style="text-align: center;" />').html(jS.s.inlineMenu));
			}
			
			if (jS.s.editable) {
				//Page Menu Control	
				if (jQuery.mbMenu) {
					jQuery('<div />').load(jS.s.urlMenu, function(o) {
						jQuery('<td style="width: 50px; text-align: center;" id="' + jS.id.menu + '" class="rootVoices ui-corner-tl" />')
							.html(o)
							.prependTo(firstRowTr)
							.buildMenu({
								menuWidth:		100,
								openOnRight:	false,
								containment: 	jS.s.parent.id,
								hasImages:		false,
								fadeInTime:		0,
								fadeOutTime:	0,
								adjustLeft:		2,
								minZindex:		"auto",
								adjustTop:		10,
								opacity:		.95,
								shadow:			false,
								closeOnMouseOut:true,
								closeAfter:		1000
							})
							.hover(function() {
								jQuery(this).addClass('ui-state-highlight');
							}, function() {
								jQuery(this).removeClass('ui-state-highlight');
							});
					})
					.hover(function() {
						jQuery(this).addClass('ui-state-highlight');
					}, function() {});
				}
				
				//Edit box menu
				var secondRow = jQuery('<table cellpadding="0" cellspacing="0" border="0">' +
						'<tr>' +
							'<td style="width: 35px; text-align: right;" id="' + jS.id.label + '"></td>' +
							'<td style="width: 10px;" id="' + jS.id.fx + '">fx</td>' + 
							'<td>' +
								'<textarea id="' + jS.id.formula + '"></textarea>' +
							'</td>' +
						'</tr>' +
					'</table>').appendTo(header);
					
				secondRow.keydown(function(e) {
					return jS.evt.formulaKeyDown(e);
				});
			}
			
			firstRowTr.appendTo(firstRow);
			
			var tabParent = jQuery('<div id="' + jS.id.tabContainer + '">' + 
							(jS.s.editable ? '<span class="ui-widget-header ui-corner-bottom" title="Add a spreadsheet" i="-1">+</span>' : '<span />') + 
						'</div>')
					.mousedown(jS.evt.tabOnMouseDown);

			jS.obj.parent()
				.html('')
				.append(header) //add controls header
				.append('<div id="' + jS.id.ui + '" class="' + jS.id.ui + '">') //add spreadsheet control
				.after(tabParent);
		},
		sheet: function(size) {
			if (!size) {
				size = jS.s.buildSheet;
			}
			size = size.toLowerCase().split('x');

			var columnsCount = parseInt(size[0]);
			var rowsCount = parseInt(size[1]);
			
			//Create elements before loop to make it faster.
			var newSheet = jQuery('<table border="1px" class="' + jS.cl.sheet + '" id="' + jS.id.sheet + jS.i + '"></table>');
			var standardTd = '<td> </td>';
			var tds = '';
			
			//Using -- is many times faster than ++
			for (var i = columnsCount; i >= 1; i--) {
				tds += standardTd;
			}

			var standardTr = '<tr height="' + jS.s.colMargin + '" style="height: ' + jS.s.colMarg + ';">' + tds + '</tr>';
			var trs = '';
			for (var i = rowsCount; i >= 1; i--) {
				trs += standardTr;
			}
			
			newSheet.html('<tbody>' + trs + '</tbody>');
			
			newSheet.width(columnsCount * jS.s.newColumnWidth);
			//jS.attrH.syncSheetWidthFromTds(newSheet);
			
			return newSheet;
		},
		sheetUI: function(obj, i, fn, reloadBars) {
			if (!i) {
				jQuery('.tableControl').remove();
				jS.sheetCount = 0;
				jS.i = 0;
			} else {
				jS.sheetCount++;
				jS.i = jS.sheetCount;
				i = jS.i;
			}
			
			var objContainer = jS.controlFactory.table(true).appendTo(jS.obj.ui());
			jS.obj.pane().html(obj);
					
			jS.tuneTableForSheetUse(obj);
						
			jS.sheetDecorate(obj);
			
			jS.controlFactory.barTop(reloadBars, obj);
			jS.controlFactory.barLeft(reloadBars, obj);
		
			jS.sheetTab(true);
			
			if (jS.s.editable) {
				obj
					.mousedown(jS.evt.cellOnMouseDown)
					.click(jS.s.lockFormulas ? jS.evt.cellOnClickLocked : jS.evt.cellOnClickReg);
			}
			
			jS.themeRoller.start(i);

			jS.setTdIds(obj);
			
			jS.evt.scrollBars();
			
			jS.addTab();
			
			if (fn) {
				fn();
			}
			
			jS.log('Sheet Initialized');
			
			jS.s.fnAfter();
			
			return objContainer;
		},
		table: function() {
			return jQuery('<table cellpadding="0" cellspacing="0" border="0" id="' + jS.id.tableControl + jS.i + '" class="' + jS.cl.tableControl + ' ui-corner-bottom">' +
				'<tbody>' +
					'<tr>' + 
						'<td id="' + jS.id.barCornerParent + jS.i + '" class="' + jS.cl.barCornerParent + '">' + //corner
							'<div style="height: ' + jS.s.colMargin + '; width: ' + jS.s.colMargin + ';" id="' + jS.id.barCorner + jS.i + '" class="' + jS.cl.barCorner +'" onClick="jS.cellSetActiveAll();" title="Select All">&nbsp;</div>' +
						'</td>' + 
						'<td class="' + jS.cl.barTopTd + '">' + //barTop
							'<div id="' + jS.id.barTopParent + jS.i + '" class="' + jS.cl.barTopParent + '"></div>' +
						'</td>' +
					'</tr>' +
					'<tr>' +
						'<td class="' + jS.cl.barLeftTd + '">' + //barLeft
							'<div style="width: ' + jS.s.colMargin + ';" id="' + jS.id.barLeftParent + jS.i + '" class="' + jS.cl.barLeftParent + '"></div>' +
						'</td>' +
						'<td class="' + jS.cl.sheetPaneTd + '">' + //pane
							'<div id="' + jS.id.pane + jS.i + '" class="' + jS.cl.pane + '"></div>' +
						'</td>' +
					'</tr>' +
				'</tbody>' +
			'</table>');
		},
		chart: function(type, data, legend, axisLabels, w, h, row) {
			if (jGCharts) {
				var api = new jGCharts.Api();
				function refine(v) {
					var refinedV = new Array();
					jQuery(v).each(function(i) {
						refinedV[i] = jS.manageHtmlToText(v[i] + '');
					});
					return refinedV;
				}
				var o = {};
				
				if (type) {
					o.type = type;
				}
				
				if (data) {
					data = data.filter(function(v) { return (v ? v : 0); }); //remove nulls
					o.data = data;
				}
				
				if (legend) {
					o.legend = refine(legend);
				}
				
				if (axisLabels) {
					o.axis_labels = refine(axisLabels);
				}
				
				if (w || h) {
					o.size = w + 'x' + h;
				}
				
				return jS.controlFactory.safeImg(api.make(o), row);
			} else {
				return jQuery('<div>Charts are not enabled</div>');
			}
		},
		safeImg: function(src, row) {
			return jQuery('<img />')
				.hide()
				.load(function() { //prevent the image from being too big for the row
					jQuery(this).fadeIn(function() {
						jQuery(this).addClass('safeImg');
						jS.attrH.setHeight(parseInt(row), 'cell', false);
					});
				})
				.attr('src', src);
		}
	},
	sizeSync: {
	
	},
	evt: {
		keyDownHandler: {
			enterOnTextArea: function(e) {
				if (!e.shiftKey) {
					return jS.evt.cellClick(key.DOWN);
				} else {
					return true;
				}
			},
			enter: function(e) {
				if (!jS.cellLast.isEdit && !e.ctrlKey) {
					return jS.evt.cellClick();
				} else {
					return jS.evt.cellClick(key.DOWN);
				}
			},
			tab: function(e) {
				if (e.shiftKey) {
					return jS.evt.cellClick(key.LEFT);
				} else {
					return jS.evt.cellClick(key.RIGHT);
				}
			},
			textAreaKeyDown: function(e) {
				switch (e.keyCode) {
					case key.ENTER: 	return jS.evt.keyDownHandler.enterOnTextArea(e);
						break;
					case key.TAB: 		return jS.evt.keyDownHandler.tab(e);
						break;
				}
			},
			formulaKeyDown: function(e) {
				switch (e.keyCode) {
					case key.ESCAPE: 	jS.evt.cellEditAbandon();					break;
					case key.TAB: 		return jS.evt.keyDownHandler.tab(e);		break;
					case key.ENTER: 	return jS.evt.keyDownHandler.enter(e);	break;
					case key.LEFT:
					case key.UP:
					case key.RIGHT:
					case key.DOWN:		return jS.evt.cellClick(e.keyCode);		break;
					default: 			jS.cellLast.isEdit = true;
				}
			}
		},
		formulaKeyDown: function(e, isTextArea) {
			//Switch is much faster than if statements
			//I found that it's much easier to go from the origin key (up, down, left, right, tab, enter) and then detect if the ctrl key or shift keys are down.
			//It's just difficult to look at later on and it's probably faster overall
			return (isTextArea ? jS.evt.keyDownHandler.textAreaKeyDown(e) : jS.evt.keyDownHandler.formulaKeyDown(e));
		},
		cellEditDone: function(bsheetClearActive) {
			switch (jS.cellLast.isEdit) {
				case true:
					// Any changes to the input controls are stored back into the table, with a recalc.
					var td = jS.cellLast.td;
					var recalc = false;
					
					//Lets ensure that the cell being edited is actually active
					if (td && td.hasClass(jS.cl.cell)) { 
						//This should return either a val from textbox or formula, but if fails it tries once more from formula.
						var v = jS.cellTextArea(td, true);

						//inputFormula.value;
						var noEditFormula = false;
						var noEditNumber = false;
						var noEditNull = false;
						var editedFormulaToFormula = false;
						var editedFormulaToReg = false;
						var editedRegToFormula = false;
						var editedRegToReg = false;
						var editedToNull = false;
						var editedNumberToNumber = false;
						var editedNullToNumber = false;
						
						var tdFormula = td.attr('formula');
						var tdPrevVal = td.attr('prevVal');

						if (v) {
							if (v.charAt(0) == '=') { //This is now a formula
								if (v != tdFormula) { //Didn't have a formula before but now does
									editedFormulaToFormula = true;
									jS.log('edit, new formula, possibly had formula');
								} else if (tdFormula) { //Updated using inline edit
									noEditFormula = true;
									jS.log('no edit, has formula');
								} else {
									jS.log('no edit, has formula, unknown action');
								}
							} else if (tdFormula) { //Updated out of formula
								editedRegToFormula = true;
								jS.log('edit, new value, had formula');
							} else if (!isNaN(parseInt(v))) {
								if ((v != tdPrevVal && v != jS.obj.formula().val()) || (td.text() != v)) {
									editedNumberToNumber = true;
									jS.log('edit, from number to number, possibly in function');
								} else {
									noEditNumber = true;
									jS.log('no edit, is a number');
								}
							} else { //Didn't have a formula before of after edit
								editedRegToReg = true;
								jS.log('possible edit from textarea, has value');
							}
						} else { //No length value
							if (td.html().length > 0 && tdFormula) {
								editedFormulaToReg = true;
								jS.log('edit, null value from formula');
							} else if (td.html().length > 0 && tdFormula) {
								editedToNull = true;
								jS.log('edit, null value from formula');
							
							} else {
								noEditNull = true;
								jS.log('no edit, null value');
							}
						}
						
						td.removeAttr('prevVal');
						var vHTML = jS.manageTextToHtml(v);
						if (noEditFormula) {
							td.html(tdPrevVal);
						} else if (editedFormulaToFormula) {
							recalc = true;
							td.attr('formula', v.replace(/\n/g, ' ')).html('');
						} else if (editedFormulaToReg) {
							recalc = true;
							td.removeAttr('formula').html(vHTML);
						} else if (editedRegToFormula) {
							recalc = true;
							td.removeAttr('formula').html(vHTML);
						} else if (editedRegToReg) {
							td.html(vHTML);
						} else if (noEditNumber) {
							td.html(vHTML); 
						} else if (noEditNull) {
							td.html(vHTML);
						} else if (editedNumberToNumber) {
							recalc = true;
							td.html(vHTML);
						} else if (editedToNull) {
							recalc = true;
							td.removeAttr('formula').html('');
						}
						
						if (recalc) {
							jS.calc(jS.i);
						}
						
						if (bsheetClearActive != false) {
							// Treats null == true.
							jS.sheetClearActive();
						}
						
						jS.attrH.setHeight(jS.cellLast.row, 'cell');
						
						jS.obj.formula().focus().select();
						jS.cellLast.isEdit = false;
					}
					break;
				default:
					jS.attrH.setHeight(jS.cellLast.row, 'cell', false);
					jS.sheetClearActive();
			}
		},
		cellEditAbandon: function(skipCalc) {
			jS.themeRoller.clearCell();
			jS.themeRoller.clearBar();
			if (!skipCalc) {
				var v = jS.cellTextArea(jS.cellLast.td, true);
				if (v) {
					jS.cellLast.td.html(jS.manageTextToHtml(v));
					jS.sheetClearActive();
					if (v.charAt(0) == '=') {
						jS.calc(jS.i);
					}
				} else { //Even if the cell is blank, that doesn't mean it's not active
					jS.sheetClearActive();
					jS.calc(jS.i);
				}
			}
			
			jS.cellLast.td = jS.obj.sheet().find('td:first');
			jS.cellLast.row = jS.cellLast.col = 0;
			0;
			jS.rowLast = jS.colLast = -1;
			
			jS.fxUpdate('', true);

			return false;
		},
		cellClick: function(keyCode) { //invoces a click on next/prev cell
			var h = 0;
			var v = 0;
			switch (keyCode) {
				case key.UP: 		v--; break;
				case key.DOWN: 		v++; break;
				case key.LEFT: 		h--; break;
				case key.RIGHT: 	h++; break;
			}
			jQuery(jS.getTd(jS.i, jS.cellLast.row + v, jS.cellLast.col + h)).click();
			
			return false;
		},
		cellOnMouseDown: function(e) {
			if (e.altKey) {
				jS.cellSetActiveMulti(e);
				jQuery(document).mouseup(function() {
					jQuery(this).unbind('mouseup');
					var v = jS.obj.formula().val();
					jS.obj.formula().val(v + jS.getTdRange());
				});
			} else {
				return jS.cellSetActiveMulti(e);
			}			
		},
		cellOnClickLocked: function(e) {
			if (!isNaN(e.target.cellIndex)) {
				if (!jQuery(e.target).attr('formula')) {
					jS.evt.cellOnClickManage(jQuery(e.target));
				}
			} else {
				jS.evt.cellEditAbandon();
				jS.obj.formula().focus().select();
			}
		},
		cellOnClickReg: function(e) {
			if (!isNaN(e.target.cellIndex)) {		
				jS.evt.cellOnClickManage(jQuery(e.target));
			} else { //this won't be a cell
				var clickable = jQuery(e.target).hasClass('clickable');
				if (!clickable) {
					jS.obj.formula().focus().select();
				} else { //this is an inline control
					//jS.cellEditAbandon(true);
				}
			}
		},
		cellOnClickManage: function(td) {
			if (!td.hasClass(jS.cl.cell)) { //initial click
				jS.cellEdit(td);
				jS.log('click cell');
			} else { //inline edit, 2nd click
				jS.cellLast.isEdit = jS.isSheetEdit = true;
				jS.cellTextArea(td, false, true);
				jS.themeRoller.cell(td);
				jS.log('click, textarea over table activated');
			}
			jS.followMe(td);
		},
		tabOnMouseDown: function(e) {
			var i = jQuery(e.target).attr('i');
			
			if (i != '-1' && i != jS.i) {
				jS.setActiveSheet(jQuery('#' + jS.id.tableControl + i), i); jS.calc(i);
			} else if (i != '-1' && jS.i == i) {
				jS.sheetTab();
			} else {
				jS.addSheet();
			}
			return false;
		},
		resizeBar: function(e, o) {
			//Resize Column & Row & Prototype functions are private under class jSheet		
			var target = jQuery(e.target);
			var resizeBar = {
				start: function(e) {
					
					jS.log('start resize');
					//I never had any problems with the numbers not being ints but I used the parse method
					//to ensuev non-breakage
					o.offset = target.offset();
					o.tdPageXY = [o.offset.left, o.offset.top][o.xyDimension];
					o.startXY = [e.pageX, e.pageY][o.xyDimension];
					o.i = o.getIndex(target);
					o.srcBarSize = o.getSize(target);
					o.edgeDelta = o.startXY - (o.tdPageXY + o.srcBarSize);
					o.min = 10;
					
					if (jS.s.joinedResizing) {
						o.resizeFn = function(size) {
							o.setDesinationSize(size);
							o.setSize(target, size);
						};
					} else {
						o.resizeFn = function(size) {
							o.setSize(target, size);
						};
					}
					
					//We start the drag sequence
					if (Math.abs(o.edgeDelta) <= o.min) {
						//some ui enhancements, lets the user know he's resizing
						jQuery(e.target).parent().css('cursor', o.cursor);
						
						jQuery(document)
							.mousemove(resizeBar.drag)
							.mouseup(resizeBar.stop);
						
						return true; //is resizing
					} else {
						return false; //isn't resizing
					}
				},
				drag: function(e) {
					var newSize = o.min;

					var v = o.srcBarSize + ([e.pageX, e.pageY][o.xyDimension] - o.startXY);
					if (v > 0) {// A non-zero minimum size saves many headaches.
						newSize = Math.max(v, o.min);
					}

					o.resizeFn(newSize);
					return false;
				},
				stop: function(e) {	
					o.setDesinationSize(o.getSize(target));
					
					jQuery(document)
						.unbind('mousemove')
						.unbind('mouseup');

					jS.obj.formula()
						.focus()
						.select();
					
					target.parent().css('cursor', 'pointer');
					
					jS.log('stop resizing');
				}
			};
			
			return resizeBar.start(e);
		},
		scrollBars: function(killTimer) {
			var o = { //cut down on recursion, grabe them once
				pane: jS.obj.pane(), 
				barLeft: jS.obj.barLeftParent(), 
				barTop: jS.obj.barTopParent()
			};
			
			jS.obj.pane().scroll(function() {
				o.barTop.scrollLeft(o.pane.scrollLeft());//2 lines of beautiful jQuery js
				o.barLeft.scrollTop(o.pane.scrollTop());
			});
		},
		barMouseDown: {
			select: function(o, e, selectFn, resizeFn) {
				var isResizing = jS.evt.resizeBar(e, resizeFn);
						
				if (!isResizing) {
					selectFn(e.target);
					o
						.unbind('mouseover')
						.mouseover(function(e) {
							selectFn(e.target, true);
						})
						.mouseup(function() {
							o
								.unbind('mouseover')
								.unbind('mouseup');
						});
				}
				
				return false;
			},
			first: 0,
			last: 0,
			height: function(o) {			
				var selectRow = function () {};
				
				o //let any user resize
					.unbind('mousedown')
					.mousedown(function(e) {
						jS.evt.barMouseDown.first = jS.evt.barMouseDown.last = jS.rowLast = jS.getBarLeftIndex(e.target);
						jS.evt.barMouseDown.select(o, e, selectRow, jS.rowResizer);
						
						return false;
					});
				if (jS.s.editable) { //only let editable select
					selectRow = function(o, keepCurrent) {
						if (!keepCurrent) { 
							jS.themeRoller.clearCell();
							jS.themeRoller.clearBar();
						}
						
						var i = jS.getBarLeftIndex(o);
						
						jS.rowLast = i; //keep track of last row for inserting new rows
						
						jS.evt.barMouseDown.last = (i > jS.evt.barMouseDown.last ? i : jS.evt.barMouseDown.last);
						
						jS.fxUpdate((jS.evt.barMouseDown.first + 1) + ':' + (jS.evt.barMouseDown.last + 1), true);
						
						jS.cellSetActiveMultiRow(jS.evt.barMouseDown.last);
					};
				}
			},
			width: function(o) {
				var selectColumn = function() {};
				
				o //let any user resize
					.unbind('mousedown')
					.mousedown(function(e) {
						jS.evt.barMouseDown.first = jS.evt.barMouseDown.last = jS.colLast = jS.getBarTopIndex(e.target);
						jS.evt.barMouseDown.select(o, e, selectColumn, jS.columnResizer);
						
						return false;
					});
				if (jS.s.editable) { //only let editable select
					selectColumn = function(o, keepCurrent) {
						if (!keepCurrent) { 
							jS.themeRoller.clearCell();
							jS.themeRoller.clearBar();
						}
						var i = jS.getBarTopIndex(o);
						
						jS.colLast = i; //keep track of last column for inserting new columns
						
						jS.evt.barMouseDown.last = (i > jS.evt.barMouseDown.last ? i : jS.evt.barMouseDown.last);
						
						jS.fxUpdate(cE.columnLabelString(jS.evt.barMouseDown.first + 1) + ':' + cE.columnLabelString(jS.evt.barMouseDown.last + 1), true);
						
						jS.cellSetActiveMultiColumn(jS.evt.barMouseDown.last);
					};
				}
			}
		}
	},
	tuneTableForSheetUse: function(obj) {
		obj
			.addClass(jS.cl.sheet)
			.attr('id', jS.id.sheet + jS.i)
			.attr('border', '1px');
		obj.find('.' + jS.cl.uiCell).removeClass(jS.cl.uiCell);
		obj.find('td')
			.css('background-color', '')
			.css('color', '')
			.css('height', '')
			.attr('height', '');
	},
	attrH: {//Attribute Helpers
	//I created this object so I could see, quickly, which attribute was most stable.
	//As it turns out, all browsers are different, thus this has evolved to a much uglier beast
		width: function(obj, skipCorrection) {
			return jQuery(obj).outerWidth() - jS.attrH.boxModelCorrection(skipCorrection);
		},
		widthReverse: function(obj, skipCorrection) {
			return jQuery(obj).outerWidth() + jS.attrH.boxModelCorrection(skipCorrection);
		},
		height: function(obj, skipCorrection) {
			return jQuery(obj).outerHeight() - jS.attrH.boxModelCorrection(skipCorrection);
		},
		heightReverse: function(obj, skipCorrection) {
			return jQuery(obj).outerHeight() + jS.attrH.boxModelCorrection(skipCorrection);
		},
		syncSheetWidthFromTds: function(obj) {
			var entireWidth = 0;
			obj = (obj ? obj : jS.obj.sheet());
			obj.find('tr:first').find('td').each(function() {
				entireWidth += jQuery(this).width();
			});
			obj.width(entireWidth);
		},
		boxModelCorrection: function(skipCorrection) {
			var correction = 0;
			if (jQuery.support.boxModel && !skipCorrection) {
				correction = jS.s.boxModelCorrection;
			}
			return correction;
		},
		setHeight: function(i, from, skipCorrection, obj) {
			var correction = 0;
			var h = 0;
			var fn;
			
			switch(from) {
				case 'cell':
					obj = (obj ? obj : jS.obj.barLeft().find('div').eq(i));
					h = jS.attrH.height(jQuery(jS.getTd(jS.i, i, 0)).parent().andSelf(), skipCorrection);
					break;
				case 'bar':
					obj = (obj ? obj : jQuery(jS.getTd(jS.i, i, 0)).parent().andSelf());
					h = jS.attrH.heightReverse(jS.obj.barLeft().find('div').eq(i), skipCorrection);
					break;
			}
			
			if (h) {
				jQuery(obj)
					.height(h)
					.css('height', h)
					.attr('height', h);
			}

			return obj;
		}
	},
	setTdIds: function(o) {
		o = (o ? o : jS.obj.sheet());
		o.find('tr').each(function(row) {
			jQuery(this).find('td').each(function(col) {
				jQuery(this).attr('id', jS.getTdId(jS.i, row, col));
			});
		});
	},
	setControlIds: function() {
		var resetIds = function(o, id) {
			o.each(function(i) {
				jQuery(this).attr('id', id + i);
			});
		}
		
		resetIds(jS.obj.sheetAll().each(function() {
			jS.setTdIds(jQuery(this));
		}), jS.id.sheet);
		
		resetIds(jS.obj.barTopAll(), jS.id.barTop);
		resetIds(jS.obj.barTopParentAll(), jS.id.barTopParent);
		resetIds(jS.obj.barLeftAll(), jS.id.barLeft);
		resetIds(jS.obj.barLeftParentAll(), jS.id.barLeftParent);
		resetIds(jS.obj.barCornerAll(), jS.id.barCorner);
		resetIds(jS.obj.barCornerParentAll(), jS.id.barCornerParent);
		resetIds(jS.obj.tableControlAll(), jS.id.tableControl);
		resetIds(jS.obj.paneAll(), jS.id.pane);
		resetIds(jS.obj.tabAll().each(function(j) {
			jQuery(this).attr('i', j);
		}), jS.id.tab);
	},
	columnResizer: {
		xyDimension: 0,
		getIndex: function(td) {
			return jS.getBarTopIndex(td);
		},
		getSize: function(o) {
			return jS.attrH.width(o, true);
		},
		setSize: function(o, v) {
			o.width(v);
		},
		setDesinationSize: function(w) {
			jS.sheetSyncSizeToDivs();
			
			jS.obj.sheet().find('col').eq(this.i)
				.width(w)
				.css('width', w)
				.attr('width', w);
			
			jS.obj.pane().scroll();
		},
		cursor: 'w-resize'
	},
	rowResizer: {
		xyDimension: 1,
			getIndex: function(o) {
				return jS.getBarLeftIndex(o);
			},
			getSize: function(o) {
				return jS.attrH.height(o, true);
			},
			setSize: function(o, v) {
				if (v) {
				o
					.height(v)
					.css('height', v)
					.attr('height', v);
				}
				return jS.attrH.height(o);
			},
			setDesinationSize: function() {
				//Set the cell height
				jS.attrH.setHeight(this.i, 'bar', true);
				
				//Reset the bar height if the resized row don't match
				jS.attrH.setHeight(this.i, 'cell', false);
				
				jS.obj.pane().scroll();
			},
			cursor: 's-resize'
	},
	toggleHide: {//These are not ready for prime time
		row: function(i) {
			if (!i) {//If i is empty, lets get the current row
				i = jS.obj.cell().parent().attr('rowIndex');
			}
			if (i) {//Make sure that i equals something
				var o = jS.obj.barLeft().find('div').eq(i);
				if (o.is(':visible')) {//This hides the current row
					o.hide();
					jS.obj.sheet().find('tr').eq(i).hide();
				} else {//This unhides
					//This unhides the currently selected row
					o.show();
					jS.obj.sheet().find('tr').eq(i).show();
				}
			} else {
				alert('No row selected.');
			}
		},
		rowAll: function() {
			jS.obj.sheet().find('tr').show();
			jS.obj.barLeft().find('div').show();
		},
		column: function(i) {
			if (!i) {
				i = jS.obj.cell().attr('cellIndex');
			}
			if (i) {
				//We need to hide both the col and td of the same i
				var o = jS.obj.barTop().find('div').eq(i);
				if (o.is(':visible')) {
					jS.obj.sheet().find('tbody tr').each(function() {
						jQuery(this).find('td').eq(i).hide();
					});
					o.hide();
					jS.obj.sheet().find('colgroup col').eq(i).hide();
					jS.toggleHide.columnSizeManage();
				}
			} else {
				alert('Now column selected.');
			}
		},
		columnAll: function() {
		
		},
		columnSizeManage: function() {
			var w = jS.obj.barTop().width();
			var newW = 0;
			var newW = 0;
			jS.obj.barTop().find('div').each(function() {
				var o = jQuery(this);
				if (o.is(':hidden')) {
					newW += o.width();
				}
			});
			jS.obj.barTop().width(w);
			jS.obj.sheet().width(w);
		}
	},
	addTab: function() {
		jQuery('<span class="ui-corner-bottom ui-widget-header">' + 
				'<a class="' + jS.cl.tab + '" id="' + jS.id.tab + jS.i + '" i="' + jS.i + '">' + jS.sheetTab(true) + '</a>' + 
			'</span>')
				.insertBefore(
					jS.obj.tabContainer().find('span:last')
				);
	},
	sheetDecorate: function(o) {	
		jS.formatSheet(o);
		jS.sheetSyncSizeToCols(o);
		jS.sheetDecorateRemove();
	},
	formatSheet: function(o) {
		if (o.find('tbody').length < 1) {
			o.wrapInner('<tbody />');
		}
		
		if (o.find('colgroup').length < 1 || o.find('col').length < 1) {
			o.remove('colgroup');
			var colgroup = jQuery('<colgroup />');
			o.find('tr:first').find('td').each(function() {
				//var w = jQuery(this).width();
				//jQuery(this)
				//	.width(w)
				//	.css('width', w)
				//	.attr('width', w);
				jQuery('<col />')
					.width(jS.s.newColumnWidth)
					.css('width', jS.s.newColumnWidth + 'px')
					.attr('width', jS.s.newColumnWidth + 'px')
					.appendTo(colgroup);
			});
			o.find('tr').each(function() {
				jQuery(this)
					.height(jS.s.colMargin)
					.css('height', jS.s.colMargin + 'px')
					.attr('height', jS.s.colMargin + 'px');
			});
			colgroup.prependTo(o);
		}
	},
	themeRoller: {
		start: function() {
			//Style sheet			
			jS.obj.parent().addClass(jS.cl.uiParent);
			jS.obj.sheet().addClass(jS.cl.uiSheet);
			//Style bars
			jS.obj.barLeft().find('div').addClass(jS.cl.uiBar);
			jS.obj.barTop().find('div').addClass(jS.cl.uiBar);
			jS.obj.barCornerParent().addClass(jS.cl.uiBar);
			
			jS.obj.controls().addClass(jS.cl.uiControl);
			jS.obj.fx().addClass(jS.cl.uiControl);
			jS.obj.label().addClass(jS.cl.uiControl);
			jS.obj.formula().addClass(jS.cl.uiControlTextBox);
		},
		cell: function(td) {
			jS.themeRoller.clearCell();
			if (td) {
				jQuery(td)
					.addClass(jS.cl.uiCellHighlighted)
					.addClass(jS.cl.uiCell);;
			}
		},
		clearCell: function() {
			jS.obj.uiActive().removeClass(jS.cl.uiActive);
			jS.obj.uiCell()
				.removeAttr('style')
				.removeClass(jS.cl.uiCellHighlighted)
				.removeClass(jS.cl.uiCell);
		},
		newBar: function(obj) {//This is for a tr
			jQuery(obj).addClass(jS.cl.uiBar);
		},
		barTop: function(i) {
			jS.obj.barTop().find('div').eq(i).addClass(jS.cl.uiActive);
		},
		barLeft: function(i) {
			jS.obj.barLeft().find('div').eq(i).addClass(jS.cl.uiActive);
		},
		barObj: function(obj) {
			jQuery(obj).addClass(jS.cl.uiActive);
		},
		clearBar: function() {
			jS.obj.barTop().find('.' + jS.cl.uiActive).removeClass(jS.cl.uiActive);
			jS.obj.barLeft().find('.' + jS.cl.uiActive).removeClass(jS.cl.uiActive);
		},
		resize: function() {
			// add resizable jquery.ui if available
			if (jQuery.ui) {
				// resizable container div
				var o;
				var barTop;
				var barLeft;
				var controlsHeight;
				var parent = jQuery(jS.s.parent);
				
				parent.resizable('destroy').resizable({
					minWidth: jS.s.width * 0.5,
					minHeight: jS.s.height * 0.5,
					ghost: true,
					stop: function() {						
						jS.s.width = parent.width();
						jS.s.height = parent.height();
						jS.sheetSyncSize();
					}
				});
				// resizable formula area - a bit hard to grab the handle but is there!
				var formulaResizeParent = jQuery('<span />');
				jS.obj.formula().wrap(formulaResizeParent).parent().resizable({
					minHeight: jS.obj.formula().height(), 
					maxHeight: 78,
					handles: 's',
					resize: function(e, ui) {
						jS.obj.formula().height(ui.size.height);
						jS.sheetSyncSize();
					}
				});
			}
		}
	},
	manageHtmlToText: function(v) {
		v = jQuery.trim(v);
		if (v.charAt(0) != "=") {
			v = v.replace(/&nbsp;/g, ' ')
				.replace(/&gt;/g, '>')
				.replace(/&lt;/g, '<')
				.replace(/\t/g, '')
				.replace(/\n/g, '')
				.replace(/<br>/g, '\r')
				.replace(/<BR>/g, '\n');

			//jS.log("from html to text");
		}
		return v;
	},
	manageTextToHtml: function(v) {	
		v = jQuery.trim(v);
		if (v.charAt(0) != "=") {
			v = v.replace(/\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;')
				.replace(/ /g, '&nbsp;')
				.replace(/>/g, '&gt;')
				.replace(/</g, '&lt;')
				.replace(/\n/g, '<br>')
				.replace(/\r/g, '<br>');
			
			//jS.log("from text to html");
		}
		return v;
	},
	sheetDecorateRemove: function(makeClone) {
		var obj = (makeClone ? jS.obj.sheetAll().clone() : jS.obj.sheetAll());
		
		//remove class jSheetCellActive
		jQuery(obj).find('.' + jS.cl.cell).removeClass(jS.cl.cell);
		//remove class ui-state-highlight
		jQuery(obj).find('.' + jS.cl.uiCellHighlighted).removeClass(jS.cl.uiCellHighlighted);
		//remove class themeRoller_activeCell
		
		jQuery(obj).find('.' + jS.cl.uiCell).removeClass(jS.cl.uiCell);
		//IE Bug, match width with css width
		jQuery(obj).find('col').each(function(i) {
			var v = jQuery(this).css('width');
			v = ((v + '').match('px') ? v : v + 'px');
			jQuery(obj).find('col').eq(i).attr('width', v);
		});
		
		return obj;
	},
	fxUpdate: function(v, setDirect) {
		if (!setDirect) {
			jS.obj.label().html(cE.columnLabelString(v[1] + 1) + (v[0] + 1));
		} else {
			jS.obj.label().html(v);
		}
	},
	cellEdit: function(td) {
		//This finished up the edit of the last cell
		jS.evt.cellEditDone();
		var loc = jS.getTdLocation(td);
		
		//Show where we are to the user
		jS.fxUpdate(loc);
		
		var v = td.attr('formula');
		if (!v) {
			v = jS.manageHtmlToText(td.html());
		}
		
		jS.obj.formula()
			.val(v)
			.focus()
			.select();
		jS.cellSetActive(td, loc);
	},
	cellSetActive: function(td, loc) {
		jS.cellLast.td = td; //save the current cell/td
		jS.cellLast.row = jS.rowLast = loc[0];
		jS.cellLast.col = jS.colLast = loc[1];
		
		jS.themeRoller.cell(td); //themeroll the cell and bars
		jS.themeRoller.barLeft(jS.cellLast.row);
		jS.themeRoller.barTop(jS.cellLast.col);
		
		td.addClass(jS.cl.cell); //add classes
		jS.obj.barLeft().find('div').eq(jS.cellLast.row).addClass(jS.cl.barSelected);
		jS.obj.barTop().find('div').eq(jS.cellLast.col).addClass(jS.cl.barSelected);
	},
	colLast: -1,
	rowLast: -1,
	cellLast: {
		td: null,
		row: null,
		col: null,
		isEdit: false
	},
	cellStyleToggle: function(setClass, removeClass) {
		//Lets check to remove any style classes
		if (removeClass) {
			removeClass = removeClass.split(',');
			
			jQuery(removeClass).each(function() {
				jS.obj.uiCell().removeClass(this);
			});
		}
		//Now lets add some style
		if (jS.obj.uiCell().hasClass(setClass)) {
			jS.obj.uiCell().removeClass(setClass);
		} else {
			jS.obj.uiCell().addClass(setClass);
		}
		jS.obj.formula()
			.focus()
			.select();
		return false;
	},
	context: {},
	calc: function(tableI, fuel) {
		jS.log('Calculation Started');
		if (!jS.s.calcOff) {
			cE.calc(new jS.tableCellProvider(tableI), jS.context, fuel);
			jS.isSheetEdit = false;
		}
		jS.log('Calculation Ended');
	},
	cellTextArea: function(td, returnVal, makeEdit, setVal) {
		//Remove Textarea and transfer value.
		var v;
		if (td) {
			if (!makeEdit) {
				var textArea = td.find('textarea');
				var textAreaVal = textArea.val();
				if (textAreaVal || jS.obj.formula().attr('disabled')) {
					jS.log('Textarea value used');
					v = textAreaVal;
					textArea.remove();
					//td
					//	.css('text-align', '')
					//	.css('vertical-align', '');
				} else {
					jS.log('Formula value used');
					v = jS.obj.formula().val();
				}
				jS.obj.formula().removeAttr('disabled');
			} else {
				if (setVal) {
					v = setVal;
				} else {
					v = jS.obj.formula().val();
				}
				
				jS.obj.formula().attr('disabled', 'true');
				
				var textArea = jQuery('<textarea id="tempText" class="clickable" />');
				var h = jS.attrH.height(td);
				
				//There was an error in some browsers where they would mess this up.
				td.parent().height(h + jS.attrH.boxModelCorrection());
				//create text area.  Agian, strings are faster than DOM.
				textArea
					.height(h < 75 ? 75 : h)
					.val(v)
					.click(function(){
						return false;
					})
					.keydown(function(e) {
						return jS.evt.formulaKeyDown(e, true);
					});
				
				//Se we can look at the past value after edit.
				if (td.attr('formula')) {
					td.attr('prevVal', td.text()).removeAttr('formula');
				}
				//add it to cell
				td.html(textArea);
				//focus textarea
				textArea
					.focus()
					.select();
			}
			if (returnVal) {
				return v;
			}
		}
	},
	refreshLabelsColumns: function(){
		var w = 0;
		jS.obj.barTop().find('div').each(function(i) {
			jQuery(this).text(cE.columnLabelString(i+1));
			w += jQuery(this).width();
		});
		return w;
	},
	refreshLabelsRows: function(){
		jS.obj.barLeft().find('div').each(function(i) {
			jQuery(this).text((i + 1));
		});
	},
	addSheet: function(size) {
		size = (size ? size : prompt(jS.newSheetDialog));
		if (size) {
			jS.evt.cellEditAbandon();
			jS.setDirty(true);
			var newSheetControl = jS.controlFactory.sheetUI(jS.controlFactory.sheet(size), jS.sheetCount + 1, function() { 
				jS.setActiveSheet(newSheetControl, jS.sheetCount + 1);
			}, true);
		}
	},
	deleteSheet: function() {
		jS.obj.tableControl().remove();
		jS.obj.tabContainer().children().eq(jS.i).remove();
		jS.i = 0;
		jS.sheetCount--;
		
		jS.setControlIds();
		
		jS.setActiveSheet(jS.obj.tableControl(), jS.i);
	},
	deleteRow: function() {
		var v = confirm("Are you sure that you want to delete that row? Fomulas will not be updated.");
		if (v) {
			jS.obj.barLeft().find('div').eq(jS.rowLast).remove();
			jS.obj.sheet().find('tr').eq(jS.rowLast).remove();
			
			jS.evt.cellEditAbandon();
			
			jS.setTdIds();
			jS.refreshLabelsRows();
			jS.obj.pane().scroll();
			
			jS.rowLast = -1;
		}		
	},
	deleteColumn: function() {
		var v = confirm("Are you sure that you want to delete that column? Fomulas will not be updated.");
		if (v) {
			jS.obj.barTop().find('div').eq(jS.colLast).remove();
			jS.obj.sheet().find('colgroup col').eq(jS.colLast).remove();
			jS.obj.sheet().find('tr').each(function(i) {
					jQuery(this).find('td').eq(jS.colLast).remove();
			});
			
			jS.evt.cellEditAbandon();
			
			var w = jS.refreshLabelsColumns();
			jS.setTdIds();
			jS.obj.sheet().width(w);
			jS.obj.pane().scroll();
			
			jS.colLast = -1;
		}		
	},
	sheetTab: function(get) {
		var sheetTab = '';
		if (get) {
			sheetTab = jS.obj.sheet().attr('title');
			sheetTab = (sheetTab ? sheetTab : 'Spreadsheet ' + (jS.i + 1));
		} else {
			var newTitle = prompt("What would you like the sheet's title to be?", jS.sheetTab(true));
			if (!newTitle) { //The user didn't set the new tab name
				sheetTab = jS.obj.sheet().attr('title');
				newTitle = (sheetTab ? sheetTab : 'Spreadsheet' + (jS.i + 1));
			} else {
				jS.setDirty(true);
				jS.obj.sheet().attr('title', newTitle);
				jS.obj.tab().html(newTitle);
				
				sheetTab = newTitle;
			}
		}
		return sheetTab;
	},
	print: function(o) {
		var w = window.open();
		w.document.write("<html><body><xmp>" + o + "\n</xmp></body></html>");
		w.document.close();
	},
	viewSource: function(pretty) {
		var sheetClone = jS.sheetDecorateRemove(true);
		
		var s = "";
		if (pretty) {
			jQuery(sheetClone).each(function() {
				s += jS.HTMLtoPrettySource(this);
			});
		} else {
			s += jQuery('<div />').html(sheetClone).html();
		}
		
		jS.print(s);
		
		return false;
	},
	saveSheet: function() {
		var v = jS.sheetDecorateRemove(true);
		var s = jQuery('<div />').html(v).html();

		jQuery.ajax({
			url: jS.s.urlSave,
			type: 'POST',
			data: 's=' + s,
			dataType: 'html',
			success: function(data) {
				jS.setDirty(false);
				alert('Success! - ' + data);
			}
		});
	},
	HTMLtoCompactSource: function(node) {
		var result = "";
		if (node.nodeType == 1) {
			// ELEMENT_NODE
			result += "<" + node.tagName;
			hasClass = false;
			
			var n = node.attributes.length;
			for (var i = 0, hasClass = false; i < n; i++) {
				var key = node.attributes[i].name;
				var val = node.getAttribute(key);
				if (val) {
					if (key == "contentEditable" && val == "inherit") {
						continue;
						// IE hack.
					}
					if (key == "class") {
						hasClass = true;
						jQuery(val).removeClass(jS.cl.cell);
					}
					
					if (typeof(val) == "string") {
						result += " " + key + '="' + val.replace(/"/g, "'") + '"';
					} else if (key == "style" && val.cssText) {
						result += ' style="' + val.cssText + '"';
					}
				}
			}

			if (node.tagName == "TABLE" && !hasClass) {
				// IE hack, where class doesn't appear in attributes.
				result += ' class="jSheet"';
			}
			if (node.tagName == "COL") {
				// IE hack, which doesn't like <COL..></COL>.
				result += '/>';
			} else {
				result += ">";
				var childResult = "";
				jQuery(node.childNodes).each(function() {
					childResult += jS.HTMLtoCompactSource(this);
				});
				result += childResult;
				result += "</" + node.tagName + ">";
			}

		} else if (node.nodeType == 3) {
			// TEXT_NODE
			result += node.data.replace(/^\s*(.*)\s*$/g, "$1");
		}
		return result;
	},
	HTMLtoPrettySource: function(node, prefix) {
		if (!prefix) {
			prefix = "";
		}
		var result = "";
		if (node.nodeType == 1) {
			// ELEMENT_NODE
			result += "\n" + prefix + "<" + node.tagName;
			var n = node.attributes.length;
			for (var i = 0; i < n; i++) {
				var key = node.attributes[i].name;
				var val = node.getAttribute(key);
				if (val) {
					if (key == "contentEditable" && val == "inherit") {
						continue; // IE hack.
					}
					if (typeof(val) == "string") {
						result += " " + key + '="' + val.replace(/"/g, "'") + '"';
					} else if (key == "style" && val.cssText) {
						result += ' style="' + val.cssText + '"';
					}
				}
			}
			if (node.childNodes.length <= 0) {
				result += "/>";
			} else {
				result += ">";
				var childResult = "";
				var n = node.childNodes.length;
				for (var i = 0; i < n; i++) {
					childResult += jS.HTMLtoPrettySource(node.childNodes[i], prefix + "  ");
				}
				result += childResult;
				if (childResult.indexOf('\n') >= 0) {
					result += "\n" + prefix;
				}
				result += "</" + node.tagName + ">";
			}
		} else if (node.nodeType == 3) {
			// TEXT_NODE
			result += node.data.replace(/^\s*(.*)\s*$/g, "$1");
		}
		return result;
	},
	followMe: function(td) {
		jS.obj.pane().stop().scrollTo(td, {
			margin: true,
			axis: 'xy',
			duration: 100,
			offset: {
				top: - jS.s.height / 3,
				left: - jS.s.width / 5
			}
		});
	},
	count: {
		rows: function() {
			return jS.getBarLeftIndex(jS.obj.barLeft().find('div:last').text());
		},
		columns: function() {
			return jS.getBarTopLocatoin(jS.obj.barTop().find('div:last').text());
		}
	},
	isRowHeightSync: [],
	setActiveSheet: function(o, i) {
		if (o) {
			o.show().siblings().hide();
			jS.obj.tabContainer().find('.ui-state-highlight').removeClass('ui-state-highlight');
			jS.i = i;
			jS.obj.tab().parent().addClass('ui-state-highlight');
			
		} else {
			i = 0;
			jS.obj.tableControl().siblings().not('div').hide();
			jS.obj.tabContainer().find('.ui-state-highlight').removeClass('ui-state-highlight');
			jS.obj.tab().parent().addClass('ui-state-highlight');
		}
		
		if (!jS.isRowHeightSync[i]) { //this makes it only run once, no need to have it run every time a user changes a sheet
			jS.isRowHeightSync[i] = true;
			jS.obj.sheet().find('tr').each(function(j) {
				jS.attrH.setHeight(j, 'cell');
				/*
				fixes a wired bug with height in chrome and ie
				It seems that at some point during the sheet's initializtion the height for each
				row isn't yet clearly defined, this ensures that the heights for barLeft match 
				that of each row in the currently active sheet when a user uses a non strict doc type.
				*/
			});
		}
		
		jS.sheetSyncSize();
		jS.replaceWithSafeImg(jS.obj.sheet().find('img'));
	},
	openSheetURL: function ( url ) {
		jS.s.urlGet = url;
		return jS.openSheet();
	},
	openSheet: function(o) {
		if (!jS.isDirty ? true : confirm("Are you sure you want to open a different sheet?  All unsaved changes will be lost.")) {
			jS.controlFactory.header();
			
			var fnAfter = function(i, l) {
				if (i == (l - 1)) {
					jS.i = 0;
					jS.setActiveSheet();
					jS.themeRoller.resize();
					for (var i = 0; i <= jS.sheetCount; i++) {
						jS.calc(i);
					}
				}
			};
			
			if (!o) {
				jQuery('<div />').load(jS.s.urlGet, function() {
					var sheets = jQuery(this).find('table');
					sheets.each(function(i) {
						jS.controlFactory.sheetUI(jQuery(this), i, function() { 
							fnAfter(i, sheets.length);
						}, true);
					});
				});
			} else {
				var sheets = jQuery('<div />').html(o).find('table');
				sheets.each(function(i) {
					jS.controlFactory.sheetUI(jQuery(this), i,  function() { 
						fnAfter(i, sheets.length);
					}, false);
				});
			}
			return true;
		} else {
			return false;
		}
	},
	newSheetDialog: "What size would you like to make your spreadsheet? Example: '5x10' creates a sheet that is 5 columns by 10 rows.",
	newSheet: function() {
		var size = prompt(jS.newSheetDialog);
		if (size) {
			jS.openSheet(jS.controlFactory.sheet(size));
		}
	},
	importRow: function(rowArray) {
		jS.controlFactory.addRow(null, null, ':last');

		var error = "";
		jS.obj.sheet().find('tr:last td').each(function(i) {
			jQuery(this).removeAttr('formula');
			try {
				//To test this, we need to first make sure it's a string, so converting is done by adding an empty character.
				if ((rowArray[i] + '').charAt(0) == "=") {
					jQuery(this).attr('formula', rowArray[i]);					
				} else {
					jQuery(this).html(rowArray[i]);
				}
			} catch(e) {
				//We want to make sure that is something bad happens, we let the user know
				error += e + ';\n';
			}
		});
		
		if (error) {//Show them the errors
			alert(error);
		}
		//Let's recalculate the sheet just in case
		jS.setTdIds();
		jS.calc(jS.i);
	},
	importColumn: function(columnArray) {
		jS.controlFactory.addColumn();

		var error = "";
		jS.obj.sheet().find('tr').each(function(i) {
			var o = jQuery(this).find('td:last');
			try {
				//To test this, we need to first make sure it's a string, so converting is done by adding an empty character.
				if ((columnArray[i] + '').charAt(0) == "=") {
					o.attr('formula', columnArray[i]);					
				} else {
					o.html(columnArray[i]);
				}
			} catch(e) {
				//We want to make sure that is something bad happens, we let the user know
				error += e + ';\n';
			}
		});
		
		if (error) {//Show them the errors
			alert(error);
		}
		//Let's recalculate the sheet just in case
		jS.setTdIds();
		jS.calc(jS.i);
	},
	importSheet: {
		xml: function (data) { //Will not accept CDATA tags
			var table = jQuery('<table />');
			var tbody = jQuery('<tbody />').appendTo(table);
			
			jQuery(data).find('document').each(function() { //document
				var metaData = jQuery(this).find('metadata');
				var columnCount = metaData.find('columns').text();
				var rowCount = metaData.find('rows').text();
				var title = metaData.find('title').html();
				jQuery(this).find('data').children().each(function(i) { //rows
					var thisRow = jQuery('<tr />');
					jQuery(this).children().each(function(j) { //columns
						var o = jQuery(this).html();
						if (o.charAt(0) == '=') {
							thisRow.append('<td formula="' + o + '" />');
						} else {
							thisRow.append('<td>' + o + '</td>');
						}
					});
					tbody.append(thisRow);
				});
			});
			
			return table;
		},
		json: function(data) {
			jS.i = jS.sheetCount + 1;
			sheet = eval('(' + data + ')');
			size_c = sheet["metadata"]["columns"] * 1 + 5;
			size_r = sheet["metadata"]["rows"] * 1 + 1;
			title = sheet["metadata"]["title"];
			title = (title ? title : "");
			
			var table = jQuery("<table id='" + jS.id.sheet + jS.i + "' class='" + jS.cl.sheet + "' title='" + title + "' />");
			
			var cur_row;
			for(var x = 1; x <= size_r; x++)
			{
				cur_row = jQuery('<tr height="' + jS.s.colMargin + 'px" />').appendTo(table);
				
				for(var y = 1; y <= size_c; y++)
				{
					cur_row.append('<td id="' + 'table' + jS.i + '_' + 'cell_c' + y + '_r' + x + '" />');
				}
			}
			
			for (row in sheet["data"])
			{
				for (column in sheet["data"][row])
				{
					cur_val = sheet["data"][row][column];
					cur_column = table.find('table' + jS.i + '_' + 'cell_' + column + '_r' + row).text(cur_val);
					
					if (cur_val.charAt(0) == '=')
					{
						cur_column.attr("formula", cur_val);
					}
				}
			}
			
			return table;
		}
	},
	exportSheet: {
		xml: function (skipCData) {
			var sheetClone = jS.sheetDecorateRemove(true);			
			var result = "";
			
			var cdata = ['<![CDATA[',']]>'];
			
			if (skipCData) {
				cdata = ['',''];
			}
			
			jQuery(sheetClone).each(function() {
				var x = '';
				var title = jQuery(this).attr('title');
				
				var count = 0;
				var cur_column = cur_row = '';
				var max_column = max_row = 0;
				jQuery(this).find('tr').each(function(i){
					count = 0;
					max_row = i;
					jQuery(this).find('td').each(function(){
						count++;
						
						var id = jQuery(this).attr('id');
						var txt = jQuery.trim(jQuery(this).text());
						var pos = id.search(/cell_c/i);
						var pos2 = id.search(/_r/i);
						
						if (txt != '' && pos != -1 && pos2 != -1) {
							cur_column = id.substr(pos+6, pos2-(pos+6));
							cur_row = id.substr(pos2+2);
							
							if (max_column < cur_column) max_column = cur_column;
							
							if (max_row < cur_row) max_row = cur_row;
							
							if (count == 1) x += '<r'+cur_row+'>';
							
							var formula = jQuery(this).attr('formula');
							if (formula)
							{
								txt = formula;
							}
							
							x += '<c' + cur_column + '>' + cdata[0] + txt + cdata[1] + '</c' + cur_column + '>';
						}
					});
					
					if (cur_row != '')
						x += '</r'+cur_row+'>';
					cur_column = cur_row = '';
				});
				
				result += '<document>' + 
							'<metadata>' + 
								'<columns>' + (parseInt(max_column) + 1) + '</columns>' +  //length is 1 based, index is 0 based
								'<rows>' + (parseInt(max_row) + 1) + '</rows>' +  //length is 1 based, index is 0 based
								'<title>' + title + '</title>' + 
							'</metadata>' + 
							'<data>' + x + '</data>' + 
						'</document>';
			});
			
			return '<documents>' + result + '</documents>';
		},
		json: function() {
			var sheetClone = jS.sheetDecorateRemove(true);
			var docs = []; //documents
			
			jQuery(sheetClone).each(function() {
				var doc = {
					metadata:{},
					data:{}
				};
				
				var count = 0;
				var cur_column = cur_row = '';
				var max_column = max_row = 0;
				jQuery(this).find('tr').each(function(){
					count = 0;
					jQuery(this).find('td').each(function(){
						count++;
						
						var id = jQuery(this).attr('id');
						var txt = jQuery.trim(jQuery(this).text());
						var pos = id.search(/cell_c/i);
						var pos2 = id.search(/_r/i);
						
						if (txt != '' && pos != -1 && pos2 != -1) {
							cur_column = id.substr(pos+6, pos2-(pos+6));
							cur_row = id.substr(pos2+2);
							
							if (max_column < cur_column) max_column = cur_column;
							
							if (max_row < cur_row) max_row = cur_row;
							
							if (count == 1) doc['data']['r' + cur_row] = {};
							
							var formula = jQuery(this).attr('formula');
							if (formula)
							{
								txt = formula;
							}
							try {
								doc['data']['r'+cur_row]['c'+cur_column] = txt;
							} catch (e) {}
						}
					});
					
					
					cur_column = cur_row = '';
				});
				doc['metadata'] = {
					"columns": parseInt(max_column) + 1, //length is 1 based, index is 0 based
					"rows": parseInt(max_row) + 1, //length is 1 based, index is 0 based
					"title": jQuery(this).attr('title')
				};
				docs.push(doc); //append to documents
			});
			return docs;
		},
		html: function() {
			return jS.sheetDecorateRemove(true);
		}
	},
	sheetSyncSizeToDivs: function() {
		var newSheetWidth = 0;
		jS.obj.barTop().find('div').each(function() {
			newSheetWidth += parseInt(jQuery(this).outerWidth());
		});
		jS.obj.sheet().width(newSheetWidth);
	},
	sheetSyncSizeToCols: function(o) {
		var newSheetWidth = 0;
		o.find('colgroup col').each(function() {
			newSheetWidth += jQuery(this).width();
		});
		o.width(newSheetWidth);
	},
	sheetSyncSize: function() {
		var h = jS.s.height;
		if (!h) {
			h = 400; //Height really needs to be set by the parent
		} else if (h < 200) {
			h = 200;
		}
		
		jS.obj.parent().height(h);
		
		var w = jS.s.width - jS.attrH.width(jS.obj.barLeftParent()) - (jS.attrH.boxModelCorrection());
		
		h = h - jS.attrH.height(jS.obj.controls()) - jS.attrH.height(jS.obj.barTopParent()) - (jS.attrH.boxModelCorrection() * 2);
		
		jS.obj.pane()
			.height(h)
			.width(w)
			.parent()
				.width(w);
		
		jS.obj.ui()
			.width(w + jS.attrH.width(jS.obj.barLeftParent()));
				
		jS.obj.barLeftParent()
			.height(h);
		
		jS.obj.barTopParent()
			.width(w)
			.parent()
				.width(w);
	},
	cellFind: function(v) {
		if(!v) {
			v = prompt("What are you looking for in this spreadsheet?");
		}
		if (v) {//We just do a simple uppercase/lowercase search.
			var obj = jS.obj.sheet().find('td:contains("' + v + '")');
			
			if (obj.length < 1) {
				obj = jS.obj.sheet().find('td:contains("' + v.toLowerCase() + '")');
			}
			
			if (obj.length < 1) {
				obj = jS.obj.sheet().find('td:contains("' + v.toUpperCase() + '")');
			}
			
			obj = obj.eq(0);
			if (obj.length > 0) {
				obj.click();
			} else {
				alert('No results found.');
			}
		}
	},
	cellSetActiveMulti: function(e) {	
		var o = {
			startRow: e.target.parentNode.rowIndex,
			startColumn: e.target.cellIndex
		};//These are the events used to selected multiple rows.
		jS.obj.sheet()
			.mousemove(function(e) {
				o.endRow = e.target.parentNode.rowIndex;
				o.endColumn = e.target.cellIndex;
				for (var i = o.startRow; i <= o.endRow; i++) {
					for (var j = o.startColumn; j <= o.endColumn; j++) {
						var td = jS.getTd(jS.i, i, j);
						jQuery(td)
							.addClass(jS.cl.uiCell)
							.addClass(jS.cl.uiCellHighlighted);
					}
				}
			})
			.mouseup(function() {
				jS.obj.sheet()
					.unbind('mousemove')
					.unbind('mouseup');
			});
			
			//this helps with multi select so that when you are selecting cells you don't select the text within them
			if (e.target != jS.cellLast.td && jQuery(e.target).hasClass('clickable') == false) {
				jS.themeRoller.clearCell();
				jS.themeRoller.clearBar();
				return false;
			}
	},
	cellSetActiveAll: function() {
		if (jS.s.editable) {
			var rowCount = 0;
			var colCount = 0;
			
			jS.obj.barLeft().find('div').each(function(i) {
				jS.cellSetActiveMultiRow(i);
				rowCount++;
			});
			jS.obj.barTop().find('div').each(function(i) {
				jS.themeRoller.barTop(i);
				colCount++;
			});
			
			jS.fxUpdate('A1:' + cE.columnLabelString(colCount) + rowCount, true);
		}
	},
	cellSetActiveMultiColumn: function(i) {
		jS.obj.sheet().find('tr').each(function() {
			var o = jQuery(this).find('td').eq(i);
			o
				.addClass(jS.cl.uiCell)
				.addClass(jS.cl.uiCellHighlighted);
		});
		
		jS.themeRoller.barTop(i);
	},
	cellSetActiveMultiRow: function(i) {
		jS.obj.sheet().find('tr').eq(i).find('td')
			.addClass(jS.cl.uiCell)
			.addClass(jS.cl.uiCellHighlighted);
		
		jS.themeRoller.barLeft(i);
	},
	sheetClearActive: function() {
		jS.obj.formula().val('');
		jS.obj.cell().removeClass(jS.cl.cell);
		jS.obj.barSelected().removeClass(jS.cl.barSelected);
	},
	getTdRange: function() {
		//three steps here,
		//Get td's
		//Get locations
		//Get labels for locationa and return them
		
		var cells = jS.obj.uiCell().not('.' + jS.cl.cell);
		
		if (cells.length) {
			var loc = { //tr/td column and row index
				first: jS.getTdLocation(cells.first()),
				last: jS.getTdLocation(cells.last())
			};
			
			//Adjust 0 based tr/td to cell/column/row index
			loc.first[0]++;
			loc.first[1]++;
			loc.last[0]++;
			loc.last[1]++;
			
			var label = {
				first: cE.columnLabelString(loc.first[1]) + loc.first[0],
				last: cE.columnLabelString(loc.last[1]) + loc.last[0]
			};
			
			return label.first + ":" + label.last;
		} else {
			return '';
		}
	},
	getTdId: function(tableI, row, col) {
		return 'table' + tableI + '_cell_c' + col + '_r' + row;
	},
	getTd: function(tableI, row, col) {
		return document.getElementById(jS.getTdId(tableI, row, col));
	},
	getTdLocation: function(td) {
		var col = parseInt(td[0].cellIndex);
		var row = parseInt(td[0].parentNode.rowIndex);
		return [row, col];
		// The row and col are 1-based.
	},
	getBarLeftIndex: function(o) {
		var i = jQuery.trim(jQuery(o).text());
		return parseInt(i) - 1;
	},
	getBarTopIndex: function(o) {
		var i = cE.columnLabelIndex(jQuery.trim(jQuery(o).text()));
		return parseInt(i) - 1;
	},
	tableCellProvider: function(tableI) {
		this.tableBodyId = 'jSheet' + tableI;
		this.tableI = tableI;
		this.cells = {};
	},
	tableCell: function(tableI, row, col) {
		this.tableBodyId = 'jSheet' + tableI;
		this.tableI = tableI;
		this.row = row;
		this.col = col;
		this.value = jS.EMPTY_VALUE;
		
		//this.prototype = new cE.cell();
	},
	EMPTY_VALUE: {},
	time: {
		now: new Date(),
		last: new Date(),
		diff: function() {
			return Math.abs(Math.ceil(this.last.getTime() - this.now.getTime()) / 1000).toFixed(5);
		},
		set: function() {
			this.last = this.now;
			this.now = new Date();
		},
		get: function() {
			return this.now.getHours() + ':' + this.now.getMinutes() + ':' + this.now.getSeconds();
		}
	},
	log: function(msg) {  //The log prints: {Current Time}, {Seconds from last log};{msg}
		jS.time.set();
		jS.obj.log().prepend(jS.time.get() + ', ' + jS.time.diff() + '; ' + msg + '<br />\n');
	},
	replaceWithSafeImg: function(o) {  //ensures all pictures will load and keep their respective bar the same size.
		o.each(function() {			
			var src = jQuery(this).attr('src');
			jQuery(this).replaceWith(jS.controlFactory.safeImg(src, jS.getTdLocation(jQuery(this).parent())[0]));
		});
	},
	
	isDirty:  false,
	setDirty: function(dirty) { jS.isDirty = dirty; },
	appendToFormula: function(v, o) {
		var formula = jS.obj.formula();
		if (formula.attr('disabled')) {
			formula = jS.cellLast.td.find('textarea');
		}
		
		var fV = formula.val();
		
		if (fV.charAt(0) != '=') {
			fV = '=' + fV;
		}
		
		formula.val(fV + v);
	}
};

jS.tableCellProvider.prototype = {
	getCell: function(tableI, row, col) {
		if (typeof(col) == "string") {
			col = cE.columnLabelIndex(col);
		}
		var key = tableI + "," + row + "," + col;
		var cell = this.cells[key];
		if (!cell) {
			var td = jS.getTd(tableI, row - 1, col - 1);
			if (td) {
				cell = this.cells[key] = new jS.tableCell(tableI, row, col);
			}
		}
		return cell;
	},
	getNumberOfColumns: function(row) {
		var tableBody = document.getElementById(this.tableBodyId);
		if (tableBody) {
			var tr = tableBody.rows[row];
			if (tr) {
				return tr.cells.length;
			}
		}
		return 0;
	},
	toString: function() {
		result = "";
		jQuery('#' + (this.tableBodyId) + ' tr').each(function() {
			result += this.innerHTML.replace(/\n/g, "") + "\n";
		});
		return result;
	}
};

jS.tableCell.prototype = {
	getTd: function() {
		return document.getElementById(jS.getTdId(this.tableI, this.row - 1, this.col - 1));
	},
	setValue: function(v, e) {
		this.error = e;
		this.value = v;
		jQuery(this.getTd()).html(v ? v: ""); //I know this is slower than innerHTML = '', but sometimes stability just rules!
	},
	getValue: function() {
		var v = this.value;
		if (v === jS.EMPTY_VALUE && !this.getFormula()) {
			v = this.getTd().innerHTML;
			v = this.value = (v.length > 0 ? cE.parseFormulaStatic(v) : null);

		}
		return (v === jS.EMPTY_VALUE ? null: v);
	},
	getFormat: function() {
		return jQuery(this.getTd()).attr("format");
	},
	setFormat: function(v) {
		jQuery(this.getTd()).attr("format", v);
	},
	getFormulaFunc: function() {
		return this.formulaFunc;
	},
	setFormulaFunc: function(v) {
		this.formulaFunc = v;
	},
	getFormula: function() {
		return jQuery(this.getTd()).attr('formula');
	},
	setFormula: function(v) {
		if (v && v.length > 0) {
			jQuery(this.getTd()).attr('formula', v);
		} else {
			jQuery(this.getTd()).removeAttr('formula');
		}
	}
};

var key = {
	BACKSPACE: 			8,
	CAPS_LOCK: 			20,
	COMMA: 				188,
	CONTROL: 			17,
	DELETE: 			46,
	DOWN: 				40,
	END: 				35,
	ENTER: 				13,
	ESCAPE: 			27,
	HOME: 				36,
	INSERT: 			45,
	LEFT: 				37,
	NUMPAD_ADD: 		107,
	NUMPAD_DECIMAL: 	110,
	NUMPAD_DIVIDE: 		111,
	NUMPAD_ENTER: 		108,
	NUMPAD_MULTIPLY: 	106,
	NUMPAD_SUBTRACT: 	109,
	PAGE_DOWN: 			34,
	PAGE_UP: 			33,
	PERIOD: 			190,
	RIGHT: 				39,
	SHIFT: 				16,
	SPACE: 				32,
	TAB: 				9,
	UP: 				38
};

var cE = jQuery.calculationEngine = {
	TEST: {},
	ERROR: "#VALUE!",
	cFN: {//cFN = compiler functions, usually mathmatical
		sum: 	function(x, y) { return x + y; },
		max: 	function(x, y) { return x > y ? x: y; },
		min: 	function(x, y) { return x < y ? x: y; },
		count: 	function(x, y) { return (y != null) ? x + 1: x; },
		clean: function(v) {
			if (typeof(v) == 'string') {
				v = v.replace(cE.regEx.amp, '&')
						.replace(cE.regEx.nbsp, ' ')
						.replace(/\n/g,'')
						.replace(/\r/g,'');
			}
			return v;
		},
		input: {
			select: {
				obj: function() { return jQuery('<select style="width: 100%;" onchange="cE.cFN.input.setValue(jQuery(this).val(), jQuery(this).parent());" class="clickable" />'); }
			},
			radio: {
				obj: function(v) {
					var radio = jQuery('<span class="clickable" />');
					var name = cE.cFN.input.radio.name();
					for (var i = 0; i < (v.length <= 25 ? v.length : 25); i++) {
						if (v[i]) {
							radio.append('<input onchange="cE.cFN.input.setValue(jQuery(this).val(), jQuery(this).parent().parent());" type="radio" value="' + v[i] + '" name="' + name + '" />' + v[i] + '<br />');
						}
					}
					return radio;
				},
				name: function() {
					return 'table' + cE.thisCell.tableI + '_cell_c' + (cE.thisCell.col - 1) + '_r' + (cE.thisCell.row - 1) + 'radio';
				}
			},
			checkbox: {
				obj: function(v) {
					return jQuery('<input onclick="cE.cFN.input.setValue(jQuery(this).is(\':checked\') + \'\', jQuery(this).parent());" type="checkbox" value="' + v + '" />' + v + '<br />');
				}
			},
			setValue: function(v, p) {
				p.attr('selectedvalue', v);
				jS.calc(cE.calcState.i);
			},
			getValue: function() {
				return jQuery(jS.getTd(cE.thisCell.tableI, cE.thisCell.row - 1, cE.thisCell.col - 1)).attr('selectedvalue');
			}
		}
	},
	fn: {//fn = standard functions used in cells
		HTML: function(v) {
			return jQuery(v);
		},
		IMG: function(v) {
			return jS.controlFactory.safeImg(v, cE.calcState.row, cE.calcState.col);
		},
		AVERAGE:	function(values) { 
			var arr = cE.foldPrepare(values, arguments);
			return cE.fn.SUM(arr) / cE.fn.COUNT(arr); 
		},
		AVG: 		function(values) { 
			return cE.fn.AVERAGE(values);
		},
		COUNT: 		function(values) { return cE.fold(cE.foldPrepare(values, arguments), cE.cFN.count, 0); },
		SUM: 		function(values) { return cE.fold(cE.foldPrepare(values, arguments), cE.cFN.sum, 0, true); },
		MAX: 		function(values) { return cE.fold(cE.foldPrepare(values, arguments), cE.cFN.max, Number.MIN_VALUE, true); },
		MIN: 		function(values) { return cE.fold(cE.foldPrepare(values, arguments), cE.cFN.min, Number.MAX_VALUE, true); },
		ABS	: 		function(v) { return Math.abs(cE.fn.N(v)); },
		CEILING: 	function(v) { return Math.ceil(cE.fn.N(v)); },
		FLOOR: 		function(v) { return Math.floor(cE.fn.N(v)); },
		INT: 		function(v) { return Math.floor(cE.fn.N(v)); },
		ROUND: 		function(v, decimals) {
			return cE.fn.FIXED(v, (decimals ? decimals : 0), false);
		},
		RAND: 		function(v) { return Math.random(); },
		RND: 		function(v) { return Math.random(); },
		TRUE: 		function() { return 'TRUE'; },
		FALSE: 		function() { return 'FALSE'; },
		NOW: 		function() { return new Date ( ); },
		TODAY: 		function() { return Date( Math.floor( new Date ( ) ) ); },
		DAYSFROM: 	function(year, month, day) { 
			return Math.floor( (new Date() - new Date (year, (month - 1), day)) / 86400000);
		},
		IF:			function(v, t, f){
			t = cE.cFN.clean(t);
			f = cE.cFN.clean(f);
			
			try { v = eval(v); } catch(e) {};
			try { t = eval(t); } catch(e) {};
			try { t = eval(t); } catch(e) {};

			if (v == 'true' || v == true || v > 0 || v == 'TRUE') {
				return t;
			} else {
				return f;
			}
		},
		FIXED: 		function(v, decimals, noCommas) { 
			if (decimals == null) {
				decimals = 2;
			}
			var x = Math.pow(10, decimals);
			var s = String(Math.round(cE.fn.N(v) * x) / x); 
			var p = s.indexOf('.');
			if (p < 0) {
				p = s.length;
				s += '.';
			}
			for (var i = s.length - p - 1; i < decimals; i++) {
				s += '0';
			}
			if (noCommas == true) {// Treats null as false.
				return s;
			}
			var arr	= s.replace('-', '').split('.');
			var result = [];
			var first  = true;
			while (arr[0].length > 0) { // LHS of decimal point.
				if (!first) {
					result.unshift(',');
				}
				result.unshift(arr[0].slice(-3));
				arr[0] = arr[0].slice(0, -3);
				first = false;
			}
			if (decimals > 0) {
				result.push('.');
				var first = true;
				while (arr[1].length > 0) { // RHS of decimal point.
					if (!first) {
						result.push(',');
					}
					result.push(arr[1].slice(0, 3));
					arr[1] = arr[1].slice(3);
					first = false;
				}
			}
			if (v < 0) {
				return '-' + result.join('');
			}
			return result.join('');
		},
		TRIM:		function(v) { 
			if (typeof(v) == 'string') {
				v = jQuery.trim(v);
			}
			return v;
		},
		HYPERLINK: function(link, name) {
			name = (name ? name : 'LINK');
			return jQuery('<a href="' + link + '" target="_new" class="clickable">' + name + '</a>');
		},
		DOLLAR: 	function(v, decimals, symbol) { 
			if (decimals == null) {
				decimals = 2;
			}
			
			if (symbol == null) {
				symbol = '$';
			}
			
			var r = cE.fn.FIXED(v, decimals, false);
			
			if (v >= 0) {
				return symbol + r; 
			} else {
				return '-' + symbol + r.slice(1);
			}
		},
		VALUE: 		function(v) { return parseFloat(v); },
		N: 			function(v) { if (v == null) {return 0;}
						  if (v instanceof Date) {return v.getTime();}
						  if (typeof(v) == 'object') {v = v.toString();}
						  if (typeof(v) == 'string') {v = parseFloat(v.replace(cE.regEx.n, ''));}
						  if (isNaN(v))		   {return 0;}
						  if (typeof(v) == 'number') {return v;}
						  if (v == true)			 {return 1;}
						  return 0; },
		PI: 		function() { return Math.PI; },
		POWER: 		function(x, y) {
			return Math.pow(x, y);
		},
		
		//Note, form objects are experimental, they don't work always as expected
		INPUT: {
			SELECT:	function(v, noBlank) {
				v = cE.foldPrepare(v, arguments);
				
				var selectObj = cE.cFN.input.select.obj();
				
				if (!noBlank) {
					selectObj.append('<option value="">Select a value</option>');
				}
				
				for (var i = 0; i < (v.length <= 50 ? v.length : 50); i++) {
					if (v[i]) {
						selectObj.append('<option value="' + v[i] + '">' + v[i] + '</option>');
					}
				}
				
				selectObj.val(cE.cFN.input.getValue());
				
				return selectObj;
			},
			SELECTVAL:	function(v) {
				return jQuery(v).val();
			},
			RADIO: function(v) {
				v = cE.foldPrepare(v, arguments);
				var o = cE.cFN.input.radio.obj(v);
				
				o.find('input[value="' + cE.cFN.input.getValue() + '"]').attr('CHECKED', 'true');
				
				return o;
			},
			RADIOVAL: function(v) {
				v = cE.foldPrepare(v, arguments);
				return jQuery(v).find('input:checked').val();
			},
			CHECKBOX: function(v) {
				v = cE.foldPrepare(v, arguments)[0];
				var o = cE.cFN.input.checkbox.obj(v);
				var checked = cE.cFN.input.getValue();
				if (checked == 'true' || checked == true) {
					o.attr('CHECKED', 'TRUE');
				} else {
					o.removeAttr('CHECKED');
				}
				return o;
			},
			CHECKBOXVAL: function(v) {
				v = cE.foldPrepare(v, arguments);
				return jQuery(v).val();
			},
			ISCHECKED:		function(v) {
				var checked = jQuery(v).is(":checked");
				if (checked) {
					return 'TRUE';
				} else {
					return 'FALSE';
				}
			}
		},
		CHART: {
			BAR:	function(v, legend, axisLabels, w, h) {
				return jS.controlFactory.chart(null, cE.foldPrepare(v, arguments), legend, axisLabels, w, h, cE.calcState.row - 1);
			},
			BARH:	function(v, legend, axisLabels, w, h) {
				return jS.controlFactory.chart('bhg', cE.foldPrepare(v, arguments), legend, axisLabels, w, h, cE.calcState.row - 1);
			},
			SBAR:	function(v, legend, axisLabels, w, h) {
				return jS.controlFactory.chart('bvs', cE.foldPrepare(v, arguments), legend, axisLabels, w, h, cE.calcState.row - 1);
			},
			SBARH:	function(v, legend, axisLabels, w, h) {
				return jS.controlFactory.chart('bhs', cE.foldPrepare(v, arguments), legend, axisLabels, w, h, cE.calcState.row - 1);
			},
			LINE:	function(v, legend, axisLabels, w, h) {
				return jS.controlFactory.chart('lc', cE.foldPrepare(v, arguments), legend, axisLabels, w, h, cE.calcState.row - 1);
			},
			PIE:	function(v, legend, axisLabels, w, h) {
				return jS.controlFactory.chart('p', cE.foldPrepare(v, arguments), legend, axisLabels, w, h, cE.calcState.row - 1);
			},
			PIETHREED:	function(v, legend, axisLabels, w, h) {
				return jS.controlFactory.chart('p3', cE.foldPrepare(v, arguments), legend, axisLabels, w, h, cE.calcState.row - 1);
			},
			CUSTOM:	function(type, v, legend, axisLabels, w, h) {
				return jS.controlFactory.chart(type, cE.foldPrepare(v, arguments), legend, axisLabels,  w, h, cE.calcState.row - 1);
			}
		}
	},
	calcState: {},
	calc: function(cellProvider, context, startFuel) {
		// Returns null if all done with a complete calc() run.
		// Else, returns a non-null continuation function if we ran out of fuel.  
		// The continuation function can then be later invoked with more fuel value.
		// The fuelStart is either null (which forces a complete calc() to the finish) 
		// or is an integer > 0 to slice up long calc() runs.  A fuelStart number
		// is roughly matches the number of cells to visit per calc() run.
		cE.calcState = { 
			cellProvider:	cellProvider, 
			context: 		(context != null ? context: {}),
			row: 			1, 
			col: 			1,
			i:				cellProvider.tableI,
			done:			false,
			stack:			[],
			calcMore: 		function(moreFuel) {
								cE.calcState.fuel = moreFuel;
								return cE.calcLoop();
							}
		};
		return cE.calcState.calcMore(startFuel);
	},
	cell: function() {
		prototype: {// Cells don't know their coordinates, to make shifting easier.
			getError = 			function()	 { return this.error; },
			getValue = 			function()	 { return this.value; },
			setValue = 			function(v, e) { this.value = v; this.error = e; },
			getFormula	 = 		function()  { return this.formula; },	 // Like "=1+2+3" or "'hello" or "1234.5"
			setFormula	 = 		function(v) { this.formula = v; },
			getFormulaFunc = 	function()  { return this.formulaFunc; },
			setFormulaFunc = 	function(v) { this.formulaFunc = v; },
			toString = 			function() { return "Cell:[" + this.getFormula() + ": " + this.getValue() + ": " + this.getError() + "]"; };
		}
	}, // Prototype setup is later.
	columnLabelIndex: function(str) {
		// Converts A to 1, B to 2, Z to 26, AA to 27.
		var num = 0;
		for (var i = 0; i < str.length; i++) {
			var digit = str.charCodeAt(i) - 65 + 1;	   // 65 == 'A'.
			num = (num * 26) + digit;
		}
		return num;
	},
	parseLocation: function(locStr) { // With input of "A1", "B4", "F20",
		if (locStr != null &&								  // will return [1,1], [4,2], [20,6].
			locStr.length > 0 &&
			locStr != "&nbsp;") {
			for (var firstNum = 0; firstNum < locStr.length; firstNum++) {
				if (locStr.charCodeAt(firstNum) <= 57) {// 57 == '9'
					break;
				}
			}
			return [ parseInt(locStr.substring(firstNum)),
					 cE.columnLabelIndex(locStr.substring(0, firstNum)) ];
		} else {
			return null;
		}
	},
	columnLabelString: function(index) {
		// The index is 1 based.  Convert 1 to A, 2 to B, 25 to Y, 26 to Z, 27 to AA, 28 to AB.
		// TODO: Got a bug when index > 676.  675==YZ.  676==YZ.  677== AAA, which skips ZA series.
		//	   In the spirit of billg, who needs more than 676 columns anyways?
		var b = (index - 1).toString(26).toUpperCase();   // Radix is 26.
		var c = [];
		for (var i = 0; i < b.length; i++) {
			var x = b.charCodeAt(i);
			if (i <= 0 && b.length > 1) {				   // Leftmost digit is special, where 1 is A.
				x = x - 1;
			}
			if (x <= 57) {								  // x <= '9'.
				c.push(String.fromCharCode(x - 48 + 65)); // x - '0' + 'A'.
			} else {
				c.push(String.fromCharCode(x + 10));
			}
		}
		return c.join("");
	},
	regEx: {
		n: 					/[\$,\s]/g,
		cell: 				/\$?([a-zA-Z]+)\$?([0-9]+)/g, //A1
		range: 				/\$?([a-zA-Z]+)\$?([0-9]+):\$?([a-zA-Z]+)\$?([0-9]+)/g, //A1:B4
		remoteCell:			/\$?(SHEET+)\$?([0-9]+):\$?([a-zA-Z]+)\$?([0-9]+)/g, //SHEET1:A1
		remoteCellRange: 	/\$?(SHEET+)\$?([0-9]+):\$?([a-zA-Z]+)\$?([0-9]+):\$?([a-zA-Z]+)\$?([0-9]+)/g, //SHEET1:A1:B4
		amp: 				/&/g,
		gt: 				/</g,
		lt: 				/>/g,
		nbsp: 				/&nbsp;/g
	},
	str: {
		amp: 	'&amp;',
		lt: 	'&lt;',
		gt: 	'&gt;',
		nbsp: 	'&nbps;'
	},
	parseFormula: function(formula, dependencies, thisTableI) { // Parse formula (without "=" prefix) like "123+SUM(A1:A6)/D5" into JavaScript expression string.
		var nrows = null;
		var ncols = null;
		if (cE.calcState.cellProvider != null) {
			nrows = cE.calcState.cellProvider.nrows;
			ncols = cE.calcState.cellProvider.ncols;
		}
		
		//Cell References Range - Other Tables
		formula = formula.replace(cE.regEx.remoteCellRange, 
			function(ignored, TableStr, tableI, startColStr, startRowStr, endColStr, endRowStr) {
				var res = [];
				var startCol = cE.columnLabelIndex(startColStr);
				var startRow = parseInt(startRowStr);
				var endCol   = cE.columnLabelIndex(endColStr);
				var endRow   = parseInt(endRowStr);
				if (ncols != null) {
					endCol = Math.min(endCol, ncols);
				}
				if (nrows != null) {
					endRow = Math.min(endRow, nrows);
				}
				for (var r = startRow; r <= endRow; r++) {
					for (var c = startCol; c <= endCol; c++) {
						res.push("SHEET" + (tableI) + ":" + cE.columnLabelString(c) + r);
					}
				}
				return "[" + res.join(",") + "]";
			}
		);
		
		//Cell References Fixed - Other Tables
		formula = formula.replace(cE.regEx.remoteCell, 
			function(ignored, tableStr, tableI, colStr, rowStr) {
				tableI = parseInt(tableI) - 1;
				colStr = colStr.toUpperCase();
				if (dependencies != null) {
					dependencies['SHEET' + (tableI) + ':' + colStr + rowStr] = [parseInt(rowStr), cE.columnLabelIndex(colStr), tableI];
				}
				return "(cE.calcState.cellProvider.getCell((" + (tableI) + "),(" + (rowStr) + "),\"" + (colStr) + "\").getValue())";
			}
		);
		
		//Cell References Range
		formula = formula.replace(cE.regEx.range, 
			function(ignored, startColStr, startRowStr, endColStr, endRowStr) {
				var res = [];
				var startCol = cE.columnLabelIndex(startColStr);
				var startRow = parseInt(startRowStr);
				var endCol   = cE.columnLabelIndex(endColStr);
				var endRow   = parseInt(endRowStr);
				if (ncols != null) {
					endCol = Math.min(endCol, ncols);
				}
				if (nrows != null) {
					endRow = Math.min(endRow, nrows);
				}
				for (var r = startRow; r <= endRow; r++) {
					for (var c = startCol; c <= endCol; c++) {
						res.push(cE.columnLabelString(c) + r);
					}
				}
				return "[" + res.join(",") + "]";
			}
		);
		
		//Cell References Fixed
		formula = formula.replace(cE.regEx.cell, 
			function(ignored, colStr, rowStr) {
				colStr = colStr.toUpperCase();
				if (dependencies != null) {
					dependencies['SHEET' + thisTableI + ':' + colStr + rowStr] = [parseInt(rowStr), cE.columnLabelIndex(colStr), thisTableI];
				}
				return "(cE.calcState.cellProvider.getCell((" + thisTableI + "),(" + (rowStr) + "),\"" + (colStr) + "\").getValue())";
			}
		);
		return formula;
	},	
	parseFormulaStatic: function(formula) { // Parse static formula value like "123.0" or "hello" or "'hello world" into JavaScript value.
		if (formula == null) {
			return null;
		} else {
			var formulaNum = formula.replace(cE.regEx.n, '');
			var value = parseFloat(formulaNum);
			if (isNaN(value)) {
				value = parseInt(formulaNum);
			}
			if (isNaN(value)) {
				value = (formula.charAt(0) == "\'" ? formula.substring(1): formula);
			}
			return value;
		}
	},
	calcLoop: function() {
		if (cE.calcState.done == true) {
			return null;
		} else {
			while (cE.calcState.fuel == null || cE.calcState.fuel > 0) {
				if (cE.calcState.stack.length > 0) {
					var workFunc = cE.calcState.stack.pop();
					if (workFunc != null) {
						workFunc(cE.calcState);
					}
				} else if (cE.calcState.cellProvider.formulaCells != null) {
					if (cE.calcState.cellProvider.formulaCells.length > 0) {
						var loc = cE.calcState.cellProvider.formulaCells.shift();
						cE.visitCell(cE.calcState.i, loc[0], loc[1]);
					} else {
						cE.calcState.done = true;
						return null;
					}
				} else {
					if (cE.visitCell(cE.calcState.i, cE.calcState.row, cE.calcState.col) == true) {
						cE.calcState.done = true;
						return null;
					}

					if (cE.calcState.col >= cE.calcState.cellProvider.getNumberOfColumns(cE.calcState.row - 1)) {
						cE.calcState.row++;
						cE.calcState.col =  1;
					} else {
						cE.calcState.col++; // Sweep through columns first.
					}
				}
				
				if (cE.calcState.fuel != null) {
					cE.calcState.fuel -= 1;
				}
			}
			return cE.calcState.calcMore;
		}
	},
	formula: null,
	formulaFunc: null,
	visitCell: function(tableI, r, c) { // Returns true if done with all cells.
		var cell = cE.calcState.cellProvider.getCell(tableI, r, c);
		if (cell == null) {
			return true;
		} else {
			var value = cell.getValue();
			if (value == null) {
				this.formula = cell.getFormula();
				if (this.formula) {
					if (this.formula.charAt(0) == '=') {
						this.formulaFunc = cell.getFormulaFunc();
						if (this.formulaFunc == null ||
							this.formulaFunc.formula != this.formula) {
							this.formulaFunc = null;
							try {
								var dependencies = {};
								var body = cE.parseFormula(this.formula.substring(1), dependencies, tableI);
								this.formulaFunc = function() {
									with (cE.fn) {
										return eval(body);
									}
								};
								
								this.formulaFunc.formula = this.formula;
								this.formulaFunc.dependencies = dependencies;
								cell.setFormulaFunc(this.formulaFunc);
							} catch (e) {
								cell.setValue(cE.ERROR + ': ' + e);
							}
						}
						if (this.formulaFunc) {
							cE.calcState.stack.push(cE.makeFormulaEval(cell, r, c, this.formulaFunc));

							// Push the cell's dependencies, first checking for any cycles. 
							var dependencies = this.formulaFunc.dependencies;
							for (var k in dependencies) {
								if (dependencies[k] instanceof Array &&
									(cE.checkCycles(dependencies[k][0], dependencies[k][1], dependencies[k][2]) == true) //same cell on same sheet
								) {
									cell.setValue(cE.ERROR + ': cycle detected');
									cE.calcState.stack.pop();
									return false;
								}
							}
							for (var k in dependencies) {
								if (dependencies[k] instanceof Array) {
									cE.calcState.stack.push(cE.makeCellVisit(dependencies[k][2], dependencies[k][0], dependencies[k][1]));
								}
							}
						}
					} else {
						cell.setValue(cE.parseFormulaStatic(this.formula));
					}
				}
			}
			return false;
		}
	},
	makeCellVisit: function(tableI, row, col) {
		var fn = function() { 
			return cE.visitCell(tableI, row, col);
		};
		fn.row = row;
		fn.col = col;
		return fn;
	},
	thisCell: null,
	makeFormulaEval: function(cell, row, col, formulaFunc) {
		cE.thisCell = cell;
		var fn = function() {
			try {
				var v = formulaFunc();

				switch(typeof(v)) {
					case "string":
						v = v
							.replace(cE.regEx.amp, cE.str.amp)
							.replace(cE.regEx.lt, cE.str.lt)
							.replace(cE.regEx.gt, cE.str.gt)
							.replace(cE.regEx.nbsp, cE.str.nbsp);
				}

				cell.setValue(v);
				
			} catch (e) {
				//This shouldn't need to be used, usually throws an error when a cell is empty
				//cell.setValue(cE.ERROR + ': ' + e);
			}
		};
		fn.row = row;
		fn.col = col;
		return fn;
	},
	checkCycles: function(row, col, tableI) {
		for (var i = 0; i < cE.calcState.stack.length; i++) {
			var item = cE.calcState.stack[i];
			if (item.row != null && 
				item.col != null &&
				item.row == row  &&
				item.col == col &&
				tableI == cE.calcState.i
			) {
				return true;
			}
		}
		return false;
	},
	foldPrepare: function(firstArg, theArguments) { // Computes the best array-like arguments for calling fold().
		if (firstArg != null &&
			firstArg instanceof Object &&
			firstArg["length"] != null) {
			return firstArg;
		} else {
			return theArguments;
		}
	},
	fold: function(arr, funcOfTwoArgs, result, castToN) {
		for (var i = 0; i < arr.length; i++) {
			result = funcOfTwoArgs(result, (castToN == true ? cE.fn.N(arr[i]): arr[i]));
		}
		return result;
	}
};                                                                                                             ./mvappsvr/docroot/db/javascripts/FusionMaps.js                                                     0000777 0000000 0000000 00000032563 12534142432 020620  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /**
 * FusionMaps: Flash Player detection and Map embedding.
 * Version: 1.3.2 (2nd March, 2009) - Added fix for map with % width/height.
 * Version: 1.3.1 (3rd December 2008) - Added fix for % and & characters, fixes to properly handle double quotes and single quotes in setDataXML() function. Fixes in setDataXML() and setDataURL() functions.
 * Version: 1.3 (2nd April, 2007) - Added setting up Transparent/opaque mode, added fix for % scaled dimensions
 * Version: 1.2 (1st November, 2007) - FORM fix for IE 
 * Version: 1.1 (29th June, 2007) - Added Player detection, New conditional fixes for IE
 *
 * Morphed from SWFObject (http://blog.deconcept.com/swfobject/) under MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 */
if(typeof infosoftglobal == "undefined") var infosoftglobal = new Object();
if(typeof infosoftglobal.FusionMapsUtil == "undefined") infosoftglobal.FusionMapsUtil = new Object();
infosoftglobal.FusionMaps = function(swf, id, w, h, debugMode, registerWithJS, c, scaleMode, lang, detectFlashVersion, autoInstallRedirect){
	if (!document.getElementById) { return; }
	
	//Flag to see whether data has been set initially
	this.initialDataSet = false;
	
	//Create container objects
	this.params = new Object();
	this.variables = new Object();
	this.attributes = new Array();
	
	//Set attributes for the SWF
	if(swf) { this.setAttribute('swf', swf); }
	if(id) { this.setAttribute('id', id); }
	
	w=w.toString().replace(/\%/,"%25");
	if(w) { this.setAttribute('width', w); }
	h=h.toString().replace(/\%/,"%25");
	if(h) { this.setAttribute('height', h); }
	
	//Set background color
	if(c) { this.addParam('bgcolor', c); }
	
	//Set Quality	
	this.addParam('quality', 'high');
	
	//Add scripting access parameter
	this.addParam('allowScriptAccess', 'always');
	
	//Pass width and height to be appended as mapWidth and mapHeight
	this.addVariable('mapWidth', w);
	this.addVariable('mapHeight', h);

	//Whether in debug mode
	debugMode = debugMode ? debugMode : 0;
	this.addVariable('debugMode', debugMode);
	//Pass DOM ID to Map
	this.addVariable('DOMId', id);
	//Whether to registed with JavaScript
	registerWithJS = registerWithJS ? registerWithJS : 0;
	this.addVariable('registerWithJS', registerWithJS);
	
	//Scale Mode of Map
	scaleMode = scaleMode ? scaleMode : 'noScale';
	this.addVariable('scaleMode', scaleMode);
	
	//Application Message Language
	lang = lang ? lang : 'EN';
	this.addVariable('lang', lang);
	
	//Whether to auto detect and re-direct to Flash Player installation
	this.detectFlashVersion = detectFlashVersion?detectFlashVersion:1;
	this.autoInstallRedirect = autoInstallRedirect?autoInstallRedirect:1;
	
	//Ger Flash Player version 
	this.installedVer = infosoftglobal.FusionMapsUtil.getPlayerVersion();
	
	if (!window.opera && document.all && this.installedVer.major > 7) {
		// Only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE
		infosoftglobal.FusionMaps.doPrepUnload = true;
	}
}

infosoftglobal.FusionMaps.prototype = {
	setAttribute: function(name, value){
		this.attributes[name] = value;
	},
	getAttribute: function(name){
		return this.attributes[name];
	},
	addParam: function(name, value){
		this.params[name] = value;
	},
	getParams: function(){
		return this.params;
	},
	addVariable: function(name, value){
		this.variables[name] = value;
	},
	getVariable: function(name){
		return this.variables[name];
	},
	getVariables: function(){
		return this.variables;
	},
	getVariablePairs: function(){
		var variablePairs = new Array();
		var key;
		var variables = this.getVariables();
		for(key in variables){
			variablePairs.push(key +"="+ variables[key]);
		}
		return variablePairs;
	},
	getSWFHTML: function() {
		var swfNode = "";
		if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { 
			// netscape plugin architecture			
			swfNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'"  ';
			swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';
			var params = this.getParams();
			 for(var key in params){ swfNode += [key] +'="'+ params[key] +'" '; }
			var pairs = this.getVariablePairs().join("&");
			 if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; }
			swfNode += '/>';
		} else { // PC IE			
			swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'">';
			swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';
			var params = this.getParams();
			for(var key in params) {
			 swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />';
			}
			var pairs = this.getVariablePairs().join("&");			
			if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';}
			swfNode += "</object>";
		}
		return swfNode;
	},
	setDataURL: function(strDataURL){
		//This method sets the data URL for the Map.
		//If being set initially
		if (this.initialDataSet==false){
			this.addVariable('dataURL',strDataURL);
			//Update flag
			this.initialDataSet = true;
		}else{
			//Else, we update the Map data using External Interface
			//Get reference to map object
			var mapObj = infosoftglobal.FusionMapsUtil.getMapObject(this.getAttribute('id'));
			if (!mapObj.setDataURL)
			{
				__flash__addCallback(mapObj, "setDataURL");
			}
			
			mapObj.setDataURL(strDataURL);
		}
	},
	
	//This function :
	//fixes the double quoted attributes to single quotes
	//Encodes all quotes inside attribute values
	//Encodes % to %25 and & to %26;
	encodeDataXML: function(strDataXML){
		
			var regExpReservedCharacters=["\\$","\\+"];
			var arrDQAtt=strDataXML.match(/=\s*\".*?\"/g);
			if (arrDQAtt){
				for(var i=0;i<arrDQAtt.length;i++){
					var repStr=arrDQAtt[i].replace(/^=\s*\"|\"$/g,"");
					repStr=repStr.replace(/\'/g,"%26apos;");
					var strTo=strDataXML.indexOf(arrDQAtt[i]);
					var repStrr="='"+repStr+"'";
					var strStart=strDataXML.substring(0,strTo);
					var strEnd=strDataXML.substring(strTo+arrDQAtt[i].length);
					var strDataXML=strStart+repStrr+strEnd;
				}
			}
			
			strDataXML=strDataXML.replace(/\"/g,"%26quot;");
			strDataXML=strDataXML.replace(/%(?![\da-f]{2}|[\da-f]{4})/ig,"%25");
			strDataXML=strDataXML.replace(/\&/g,"%26");

			return strDataXML;

	},
	
	setDataXML: function(strDataXML){
		//If being set initially
		if (this.initialDataSet==false){
			//This method sets the data XML for the map INITIALLY.
			this.addVariable('dataXML',this.encodeDataXML(strDataXML));
			//Update flag
			this.initialDataSet = true;
		}else{
			//Else, we update the map data using External Interface
			//Get reference to map object
			var mapObj = infosoftglobal.FusionMapsUtil.getMapObject(this.getAttribute('id'));
			
			if (!mapObj.setDataXML)
			{
				__flash__addCallback(mapObj, "setDataXML");
			}
			mapObj.setDataXML(strDataXML);
		}
	},
	setTransparent: function(isTransparent){
		//Sets map to transparent mode when isTransparent is true (default)
		//When no parameter is passed, we assume transparent to be true.
		if(typeof isTransparent=="undefined") {
			isTransparent=true;
		}			
		//Set the property
		if(isTransparent)
			this.addParam('WMode', 'transparent');
		else
			this.addParam('WMode', 'Opaque');
	},
	
	render: function(elementId){
	
		//First check for installed version of Flash Player - we need a minimum of 8
		if( (this.detectFlashVersion==1) && (this.installedVer.major < 8) ) {
			if( this.autoInstallRedirect==1 ) {
			
				//If we can auto redirect to install the player?
				var installationConfirm = window.confirm("You need Adobe Flash Player 8 (or above) to view the maps. It is a free and lightweight installation from Adobe.com. Please click on Ok to install the same.");
				
				if( installationConfirm ) {
					window.location = "http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash";
				}
				else {
					return false;
				}

			}else{
				//Else, do not take an action. It means the developer has specified a message in the DIV (and probably a link).
				//So, expect the developers to provide a course of way to their end users.
				return false;
			}			
		}
		else {
		
		
		
			//Render the map
			var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;
			
			if(  this.getVariable('scaleMode').search(/noscale/i)>=0 &&  
		         ( this.getAttribute('width').search("%")>0 || 
        		    this.getAttribute('height').search("%")>0) ) {
					
				//store current object reference
				var obj=this;
				if(window.addEventListener) {
					//add onload event on firefox                                 
			        window.addEventListener("load",function() { n.innerHTML = obj.getSWFHTML(); }, false );
				} else if(window.attachEvent) {
					//add onload event on IE
					window.attachEvent("onload", function() { n.innerHTML = obj.getSWFHTML(); } );
				} else { 
					// if all onload fails fails
					n.innerHTML = this.getSWFHTML();		
				}
			} else {
				//Normal case. Instantly load the map
				n.innerHTML = this.getSWFHTML();
			}
			
			
			//Added <FORM> compatibility
			//Check if it's added in Mozilla embed array or if already exits 
			if(!document.embeds[this.getAttribute('id')] && !window[this.getAttribute('id')]) {
		      	window[this.getAttribute('id')]=document.getElementById(this.getAttribute('id')); 
			}
			//or else document.forms[formName/formIndex][cmapId]		
			return true;		
		}
	}
}

/* ---- detection functions ---- */
infosoftglobal.FusionMapsUtil.getPlayerVersion = function(){
	var PlayerVersion = new infosoftglobal.PlayerVersion([0,0,0]);
	if(navigator.plugins && navigator.mimeTypes.length){
		var x = navigator.plugins["Shockwave Flash"];
		if(x && x.description) {
			PlayerVersion = new infosoftglobal.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
		}
	}else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0){ 
		//If Windows CE
		var axo = 1;
		var counter = 3;
		while(axo) {
			try {
				counter++;
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter);
				PlayerVersion = new infosoftglobal.PlayerVersion([counter,0,0]);
			} catch (e) {
				axo = null;
			}
		}
	} else { 
		// Win IE (non mobile)
		// Do minor version lookup in IE, but avoid Flash Player 6 crashing issues
		try{
			var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		}catch(e){
			try {
				var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
				PlayerVersion = new infosoftglobal.PlayerVersion([6,0,21]);
				axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)
			} catch(e) {

				if (PlayerVersion.major == 6) {
					return PlayerVersion;
				}
			}
			try {
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			} catch(e) {}
		}
		if (axo != null) {
			PlayerVersion = new infosoftglobal.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
		}
	}
	return PlayerVersion;
}
infosoftglobal.PlayerVersion = function(arrVersion){
	this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0;
	this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0;
	this.rev = arrVersion[2] != null ? parseInt(arrVersion[2]) : 0;
}
// ------------ Fix for Out of Memory Bug in IE in FP9 ---------------//
/* Fix for video streaming bug */
infosoftglobal.FusionMapsUtil.cleanupSWFs = function() {
	var objects = document.getElementsByTagName("OBJECT");
	for (var i = objects.length - 1; i >= 0; i--) {
		objects[i].style.display = 'none';
		for (var x in objects[i]) {
			if (typeof objects[i][x] == 'function') {
				objects[i][x] = function(){};
			}
		}
	}
}
// Fixes bug in fp9
if (infosoftglobal.FusionMaps.doPrepUnload) {
	if (!infosoftglobal.unloadSet) {
		infosoftglobal.FusionMapsUtil.prepUnload = function() {
			__flash_unloadHandler = function(){};
			__flash_savedUnloadHandler = function(){};
			window.attachEvent("onunload", infosoftglobal.FusionMapsUtil.cleanupSWFs);
		}
		window.attachEvent("onbeforeunload", infosoftglobal.FusionMapsUtil.prepUnload);
		infosoftglobal.unloadSet = true;
	}
}
/* Add document.getElementById if needed (mobile IE < 5) */
if (!document.getElementById && document.all) { document.getElementById = function(id) { return document.all[id]; }}
/* Add Array.push if needed (ie5) */
if (Array.prototype.push == null) { Array.prototype.push = function(item) { this[this.length] = item; return this.length; }}

/* Function to return Flash Object from ID */
infosoftglobal.FusionMapsUtil.getMapObject = function(id)
{
  var mapRef=null;
  if (navigator.appName.indexOf("Microsoft Internet")==-1) {
    if (document.embeds && document.embeds[id])
      mapRef = document.embeds[id]; 
	else
	mapRef  = window.document[id];
  }
  else {
   	mapRef = window[id];
  }
  if (!mapRef)
	mapRef  = document.getElementById(id);
  
  return mapRef;
}
/* Aliases for easy usage */
var getMapFromId = infosoftglobal.FusionMapsUtil.getMapObject;
var FusionMaps = infosoftglobal.FusionMaps;
                                                                                                                                             ./mvappsvr/docroot/db/javascripts/sheet_row_add.png                                                 0000666 0000000 0000000 00000000620 12534142432 021475  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         (-S   tEXtSoftware Adobe ImageReadyqe<   uPLTE{|{ѥqqr}}~٢A}Vcan:P,
   'tRNS V   ~IDATx\͋0ЂⲛYNTED!݊*\	s
!|Pp8 0_ZhpTw1\ 
 (g ?Ne1)|Șm?u7 O L g    IENDB`                                                                                                                ./mvappsvr/docroot/db/javascripts/jquery-ui-1.7.2.custom.min.js                                     0000777 0000000 0000000 00000570164 12534142432 023230  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
 * jQuery UI 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI
 */
jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/*
 * jQuery UI Draggable 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Draggables
 *
 * Depends:
 *	ui.core.js
 */
(function(a){a.widget("ui.draggable",a.extend({},a.ui.mouse,{_init:function(){if(this.options.helper=="original"&&!(/^(?:r|a|f)/).test(this.element.css("position"))){this.element[0].style.position="relative"}(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit()},destroy:function(){if(!this.element.data("draggable")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy()},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);this._cacheHelperProportions();if(a.ui.ddmanager){a.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;if(c.cursorAt){this._adjustOffsetFromHelper(c.cursorAt)}if(c.containment){this._setContainment()}this._trigger("start",b);this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();this._trigger("drag",b,c);this.position=c.position}if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){b._trigger("stop",c);b._clear()})}else{this._trigger("stop",c);this._clear()}return false},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval){this.helper.remove()}this.helper=null;this.cancelHelperRemoval=false},_trigger:function(b,c,d){d=d||this._uiHash();a.ui.plugin.call(this,b,[c,d]);if(b=="drag"){this.positionAbs=this._convertPositionTo("absolute")}return a.widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(b){return{helper:this.helper,position:this.position,absolutePosition:this.positionAbs,offset:this.positionAbs}}}));a.extend(a.ui.draggable,{version:"1.7.2",eventPrefix:"drag",defaults:{addClasses:true,appendTo:"parent",axis:false,cancel:":input,option",connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false}});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,e){var d=a(this).data("draggable"),f=d.options,b=a.extend({},e,{item:d.element});d.sortables=[];a(f.connectToSortable).each(function(){var g=a.data(this,"sortable");if(g&&!g.options.disabled){d.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",c,b)}})},stop:function(c,e){var d=a(this).data("draggable"),b=a.extend({},e,{item:d.element});a.each(d.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;d.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert){this.instance.options.revert=true}this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;if(d.options.helper=="original"){this.instance.currentItem.css({top:"auto",left:"auto"})}}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",c,b)}})},drag:function(c,f){var e=a(this).data("draggable"),b=this;var d=function(i){var n=this.offset.click.top,m=this.offset.click.left;var g=this.positionAbs.top,k=this.positionAbs.left;var j=i.height,l=i.width;var p=i.top,h=i.left;return a.ui.isOver(g+n,k+m,p,h,j,l)};a.each(e.sortables,function(g){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(b).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return f.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}if(this.instance.currentItem){this.instance._mouseDrag(c)}}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder){this.instance.placeholder.remove()}e._trigger("fromSortable",c);e.dropped=false}}})}});a.ui.plugin.add("draggable","cursor",{start:function(c,d){var b=a("body"),e=a(this).data("draggable").options;if(b.css("cursor")){e._cursor=b.css("cursor")}b.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._cursor){a("body").css("cursor",d._cursor)}}});a.ui.plugin.add("draggable","iframeFix",{start:function(b,c){var d=a(this).data("draggable").options;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop+f.scrollSpeed}else{if(d.pageY-c.overflowOffset.top<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop-f.scrollSpeed}}}if(!f.axis||f.axis!="y"){if((c.overflowOffset.left+c.scrollParent[0].offsetWidth)-d.pageX<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft+f.scrollSpeed}else{if(d.pageX-c.overflowOffset.left<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft-f.scrollSpeed}}}}else{if(!f.axis||f.axis!="x"){if(d.pageY-a(document).scrollTop()<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-f.scrollSpeed)}else{if(a(window).height()-(d.pageY-a(document).scrollTop())<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+f.scrollSpeed)}}}if(!f.axis||f.axis!="y"){if(d.pageX-a(document).scrollLeft()<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-f.scrollSpeed)}else{if(a(window).width()-(d.pageX-a(document).scrollLeft())<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+f.scrollSpeed)}}}}if(b!==false&&a.ui.ddmanager&&!f.dropBehaviour){a.ui.ddmanager.prepareOffsets(c,d)}}});a.ui.plugin.add("draggable","snap",{start:function(c,d){var b=a(this).data("draggable"),e=b.options;b.snapElements=[];a(e.snap.constructor!=String?(e.snap.items||":data(draggable)"):e.snap).each(function(){var g=a(this);var f=g.offset();if(this!=b.element[0]){b.snapElements.push({item:this,width:g.outerWidth(),height:g.outerHeight(),top:f.top,left:f.left})}})},drag:function(u,p){var g=a(this).data("draggable"),q=g.options;var y=q.snapTolerance;var x=p.offset.left,w=x+g.helperProportions.width,f=p.offset.top,e=f+g.helperProportions.height;for(var v=g.snapElements.length-1;v>=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y<x&&x<n+y&&m-y<f&&f<A+y)||(s-y<x&&x<n+y&&m-y<e&&e<A+y)||(s-y<w&&w<n+y&&m-y<f&&f<A+y)||(s-y<w&&w<n+y&&m-y<e&&e<A+y))){if(g.snapElements[v].snapping){(g.options.snap.release&&g.options.snap.release.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=false;continue}if(q.snapMode!="inner"){var c=Math.abs(m-e)<=y;var z=Math.abs(A-f)<=y;var j=Math.abs(s-w)<=y;var k=Math.abs(n-x)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m-g.helperProportions.height,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s-g.helperProportions.width}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n}).left-g.margins.left}}var h=(c||z||j||k);if(q.snapMode!="outer"){var c=Math.abs(m-f)<=y;var z=Math.abs(A-e)<=y;var j=Math.abs(s-x)<=y;var k=Math.abs(n-w)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A-g.helperProportions.height,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n-g.helperProportions.width}).left-g.margins.left}}if(!g.snapElements[v].snapping&&(c||z||j||k||h)){(g.options.snap.snap&&g.options.snap.snap.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=(c||z||j||k||h)}}});a.ui.plugin.add("draggable","stack",{start:function(b,c){var e=a(this).data("draggable").options;var d=a.makeArray(a(e.stack.group)).sort(function(g,f){return(parseInt(a(g).css("zIndex"),10)||e.stack.min)-(parseInt(a(f).css("zIndex"),10)||e.stack.min)});a(d).each(function(f){this.style.zIndex=e.stack.min+f});this[0].style.zIndex=e.stack.min+d.length}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("zIndex")){e._zIndex=b.css("zIndex")}b.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._zIndex){a(c.helper).css("zIndex",d._zIndex)}}})})(jQuery);;/*
 * jQuery UI Droppable 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Droppables
 *
 * Depends:
 *	ui.core.js
 *	ui.draggable.js
 */
(function(a){a.widget("ui.droppable",{_init:function(){var c=this.options,b=c.accept;this.isover=0;this.isout=1;this.options.accept=this.options.accept&&a.isFunction(this.options.accept)?this.options.accept:function(e){return e.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[this.options.scope]=a.ui.ddmanager.droppables[this.options.scope]||[];a.ui.ddmanager.droppables[this.options.scope].push(this);(this.options.addClasses&&this.element.addClass("ui-droppable"))},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++){if(b[c]==this){b.splice(c,1)}}this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable")},_setData:function(b,c){if(b=="accept"){this.options.accept=c&&a.isFunction(c)?c:function(e){return e.is(c)}}else{a.widget.prototype._setData.apply(this,arguments)}},_activate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.addClass(this.options.activeClass)}(b&&this._trigger("activate",c,this.ui(b)))},_deactivate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}(b&&this._trigger("deactivate",c,this.ui(b)))},_over:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.addClass(this.options.hoverClass)}this._trigger("over",c,this.ui(b))}},_out:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("out",c,this.ui(b))}},_drop:function(c,d){var b=d||a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return false}var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var f=a.data(this,"droppable");if(f.options.greedy&&a.ui.intersect(b,a.extend(f,{offset:f.element.offset()}),f.options.tolerance)){e=true;return false}});if(e){return false}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("drop",c,this.ui(b));return this.element}return false},ui:function(b){return{draggable:(b.currentItem||b.element),helper:b.helper,position:b.position,absolutePosition:b.positionAbs,offset:b.positionAbs}}});a.extend(a.ui.droppable,{version:"1.7.2",eventPrefix:"drop",defaults:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"}});a.ui.intersect=function(q,j,o){if(!j.offset){return false}var e=(q.positionAbs||q.position.absolute).left,d=e+q.helperProportions.width,n=(q.positionAbs||q.position.absolute).top,m=n+q.helperProportions.height;var g=j.offset.left,c=g+j.proportions.width,p=j.offset.top,k=p+j.proportions.height;switch(o){case"fit":return(g<e&&d<c&&p<n&&m<k);break;case"intersect":return(g<e+(q.helperProportions.width/2)&&d-(q.helperProportions.width/2)<c&&p<n+(q.helperProportions.height/2)&&m-(q.helperProportions.height/2)<k);break;case"pointer":var h=((q.positionAbs||q.position.absolute).left+(q.clickOffset||q.offset.click).left),i=((q.positionAbs||q.position.absolute).top+(q.clickOffset||q.offset.click).top),f=a.ui.isOver(i,h,p,g,j.proportions.height,j.proportions.width);return f;break;case"touch":return((n>=p&&n<=k)||(m>=p&&m<=k)||(n<p&&m>k))&&((e>=g&&e<=c)||(d>=g&&d<=c)||(e<g&&d>c));break;default:return false;break}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,g){var b=a.ui.ddmanager.droppables[e.options.scope];var f=g?g.type:null;var h=(e.currentItem||e.element).find(":data(droppable)").andSelf();droppablesLoop:for(var d=0;d<b.length;d++){if(b[d].options.disabled||(e&&!b[d].options.accept.call(b[d].element[0],(e.currentItem||e.element)))){continue}for(var c=0;c<h.length;c++){if(h[c]==b[d].element[0]){b[d].proportions.height=0;continue droppablesLoop}}b[d].visible=b[d].element.css("display")!="none";if(!b[d].visible){continue}b[d].offset=b[d].element.offset();b[d].proportions={width:b[d].element[0].offsetWidth,height:b[d].element[0].offsetHeight};if(f=="mousedown"){b[d]._activate.call(b[d],g)}}},drop:function(b,c){var d=false;a.each(a.ui.ddmanager.droppables[b.options.scope],function(){if(!this.options){return}if(!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)){d=this._drop.call(this,c)}if(!this.options.disabled&&this.visible&&this.options.accept.call(this.element[0],(b.currentItem||b.element))){this.isout=1;this.isover=0;this._deactivate.call(this,c)}});return d},drag:function(b,c){if(b.options.refreshPositions){a.ui.ddmanager.prepareOffsets(b,c)}a.each(a.ui.ddmanager.droppables[b.options.scope],function(){if(this.options.disabled||this.greedyChild||!this.visible){return}var e=a.ui.intersect(b,this,this.options.tolerance);var g=!e&&this.isover==1?"isout":(e&&this.isover==0?"isover":null);if(!g){return}var f;if(this.options.greedy){var d=this.element.parents(":data(droppable):eq(0)");if(d.length){f=a.data(d[0],"droppable");f.greedyChild=(g=="isover"?1:0)}}if(f&&g=="isover"){f.isover=0;f.isout=1;f._out.call(f,c)}this[g]=1;this[g=="isout"?"isover":"isout"]=0;this[g=="isover"?"_over":"_out"].call(this,c);if(f&&g=="isout"){f.isout=0;f.isover=1;f._over.call(f,c)}})}}})(jQuery);;/*
 * jQuery UI Resizable 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Resizables
 *
 * Depends:
 *	ui.core.js
 */
(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;/*
 * jQuery UI Selectable 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Selectables
 *
 * Depends:
 *	ui.core.js
 */
(function(a){a.widget("ui.selectable",a.extend({},a.ui.mouse,{_init:function(){var b=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]);c.each(function(){var d=a(this);var e=d.offset();a.data(this,"selectable-item",{element:this,$element:d,left:e.left,top:e.top,right:e.left+d.outerWidth(),bottom:e.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a(document.createElement("div")).css({border:"1px dotted black"}).addClass("ui-selectable-helper")},destroy:function(){this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy()},_mouseStart:function(d){var b=this;this.opos=[d.pageX,d.pageY];if(this.options.disabled){return}var c=this.options;this.selectees=a(c.filter,this.element[0]);this._trigger("start",d);a(c.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:d.clientX,top:d.clientY,width:0,height:0});if(c.autoRefresh){this.refresh()}this.selectees.filter(".ui-selected").each(function(){var e=a.data(this,"selectable-item");e.startselected=true;if(!d.metaKey){e.$element.removeClass("ui-selected");e.selected=false;e.$element.addClass("ui-unselecting");e.unselecting=true;b._trigger("unselecting",d,{unselecting:e.element})}});a(d.target).parents().andSelf().each(function(){var e=a.data(this,"selectable-item");if(e){e.$element.removeClass("ui-unselecting").addClass("ui-selecting");e.unselecting=false;e.selecting=true;e.selected=true;b._trigger("selecting",d,{selecting:e.element});return false}})},_mouseDrag:function(i){var c=this;this.dragged=true;if(this.options.disabled){return}var e=this.options;var d=this.opos[0],h=this.opos[1],b=i.pageX,g=i.pageY;if(d>b){var f=b;b=d;d=f}if(h>g){var f=g;g=h;h=f}this.helper.css({left:d,top:h,width:b-d,height:g-h});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!j||j.element==c.element[0]){return}var k=false;if(e.tolerance=="touch"){k=(!(j.left>b||j.right<d||j.top>g||j.bottom<h))}else{if(e.tolerance=="fit"){k=(j.left>d&&j.right<b&&j.top>h&&j.bottom<g)}}if(k){if(j.selected){j.$element.removeClass("ui-selected");j.selected=false}if(j.unselecting){j.$element.removeClass("ui-unselecting");j.unselecting=false}if(!j.selecting){j.$element.addClass("ui-selecting");j.selecting=true;c._trigger("selecting",i,{selecting:j.element})}}else{if(j.selecting){if(i.metaKey&&j.startselected){j.$element.removeClass("ui-selecting");j.selecting=false;j.$element.addClass("ui-selected");j.selected=true}else{j.$element.removeClass("ui-selecting");j.selecting=false;if(j.startselected){j.$element.addClass("ui-unselecting");j.unselecting=true}c._trigger("unselecting",i,{unselecting:j.element})}}if(j.selected){if(!i.metaKey&&!j.startselected){j.$element.removeClass("ui-selected");j.selected=false;j.$element.addClass("ui-unselecting");j.unselecting=true;c._trigger("unselecting",i,{unselecting:j.element})}}}});return false},_mouseStop:function(d){var b=this;this.dragged=false;var c=this.options;a(".ui-unselecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-unselecting");e.unselecting=false;e.startselected=false;b._trigger("unselected",d,{unselected:e.element})});a(".ui-selecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-selecting").addClass("ui-selected");e.selecting=false;e.selected=true;e.startselected=true;b._trigger("selected",d,{selected:e.element})});this._trigger("stop",d);this.helper.remove();return false}}));a.extend(a.ui.selectable,{version:"1.7.2",defaults:{appendTo:"body",autoRefresh:true,cancel:":input,option",delay:0,distance:0,filter:"*",tolerance:"touch"}})})(jQuery);;/*
 * jQuery UI Sortable 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Sortables
 *
 * Depends:
 *	ui.core.js
 */
(function(a){a.widget("ui.sortable",a.extend({},a.ui.mouse,{_init:function(){var b=this.options;this.containerCache={};this.element.addClass("ui-sortable");this.refresh();this.floating=this.items.length?(/left|right/).test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--){this.items[b].item.removeData("sortable-item")}},_mouseCapture:function(e,f){if(this.reverting){return false}if(this.options.disabled||this.options.type=="static"){return false}this._refreshItems(e);var d=null,c=this,b=a(e.target).parents().each(function(){if(a.data(this,"sortable-item")==c){d=a(this);return false}});if(a.data(e.target,"sortable-item")==c){d=a(e.target)}if(!d){return false}if(this.options.handle&&!f){var g=false;a(this.options.handle,d).find("*").andSelf().each(function(){if(this==e.target){g=true}});if(!g){return false}}this.currentItem=d;this._removeCurrentsFromItems();return true},_mouseStart:function(e,f,b){var g=this.options,c=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(e);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(e);this.originalPageX=e.pageX;this.originalPageY=e.pageY;if(g.cursorAt){this._adjustOffsetFromHelper(g.cursorAt)}this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};if(this.helper[0]!=this.currentItem[0]){this.currentItem.hide()}this._createPlaceholder();if(g.containment){this._setContainment()}if(g.cursor){if(a("body").css("cursor")){this._storedCursor=a("body").css("cursor")}a("body").css("cursor",g.cursor)}if(g.opacity){if(this.helper.css("opacity")){this._storedOpacity=this.helper.css("opacity")}this.helper.css("opacity",g.opacity)}if(g.zIndex){if(this.helper.css("zIndex")){this._storedZIndex=this.helper.css("zIndex")}this.helper.css("zIndex",g.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){this.overflowOffset=this.scrollParent.offset()}this._trigger("start",e,this._uiHash());if(!this._preserveHelperProportions){this._cacheHelperProportions()}if(!b){for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("activate",e,c._uiHash(this))}}if(a.ui.ddmanager){a.ui.ddmanager.current=this}if(a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,e)}this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(e);return true},_mouseDrag:function(f){this.position=this._generatePosition(f);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs}if(this.options.scroll){var g=this.options,b=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-f.pageY<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop+g.scrollSpeed}else{if(f.pageY-this.overflowOffset.top<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop-g.scrollSpeed}}if((this.overflowOffset.left+this.scrollParent[0].offsetWidth)-f.pageX<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft+g.scrollSpeed}else{if(f.pageX-this.overflowOffset.left<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft-g.scrollSpeed}}}else{if(f.pageY-a(document).scrollTop()<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-g.scrollSpeed)}else{if(a(window).height()-(f.pageY-a(document).scrollTop())<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+g.scrollSpeed)}}if(f.pageX-a(document).scrollLeft()<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-g.scrollSpeed)}else{if(a(window).width()-(f.pageX-a(document).scrollLeft())<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+g.scrollSpeed)}}}if(b!==false&&a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,f)}}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d],c=e.item[0],h=this._intersectsWithPointer(e);if(!h){continue}if(c!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=c&&!a.ui.contains(this.placeholder[0],c)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],c):true)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e)){this._rearrange(f,e)}else{break}this._trigger("change",f,this._uiHash());break}}this._contactContainers(f);if(a.ui.ddmanager){a.ui.ddmanager.drag(this,f)}this._trigger("sort",f,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(!c){return}if(a.ui.ddmanager&&!this.options.dropBehaviour){a.ui.ddmanager.drop(this,c)}if(this.options.revert){var b=this;var e=b.placeholder.offset();b.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-b.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-b.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){b._clear(c)})}else{this._clear(c,d)}return false},cancel:function(){var b=this;if(this.dragging){this._mouseUp();if(this.options.helper=="original"){this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,b._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,b._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder[0].parentNode){this.placeholder[0].parentNode.removeChild(this.placeholder[0])}if(this.options.helper!="original"&&this.helper&&this.helper[0].parentNode){this.helper.remove()}a.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});if(this.domPosition.prev){a(this.domPosition.prev).after(this.currentItem)}else{a(this.domPosition.parent).prepend(this.currentItem)}return true},serialize:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};a(b).each(function(){var e=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||(/(.+)[-=_](.+)/));if(e){c.push((d.key||e[1]+"[]")+"="+(d.key&&d.expression?e[1]:e[2]))}});return c.join("&")},toArray:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};b.each(function(){c.push(a(d.item||this).attr(d.attribute||"id")||"")});return c},_intersectsWith:function(m){var e=this.positionAbs.left,d=e+this.helperProportions.width,k=this.positionAbs.top,j=k+this.helperProportions.height;var f=m.left,c=f+m.width,n=m.top,i=n+m.height;var o=this.offset.click.top,h=this.offset.click.left;var g=(k+o)>n&&(k+o)<i&&(e+h)>f&&(e+h)<c;if(this.options.tolerance=="pointer"||this.options.forcePointerForContainers||(this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>m[this.floating?"width":"height"])){return g}else{return(f<e+(this.helperProportions.width/2)&&d-(this.helperProportions.width/2)<c&&n<k+(this.helperProportions.height/2)&&j-(this.helperProportions.height/2)<i)}},_intersectsWithPointer:function(d){var e=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top,d.height),c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left,d.width),g=e&&c,b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(!g){return false}return this.floating?(((f&&f=="right")||b=="down")?2:1):(b&&(b=="down"?2:1))},_intersectsWithSides:function(e){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+(e.height/2),e.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+(e.width/2),e.width),b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(this.floating&&f){return((f=="right"&&d)||(f=="left"&&!d))}else{return b&&((b=="down"&&c)||(b=="up"&&!c))}},_getDragVerticalDirection:function(){var b=this.positionAbs.top-this.lastPositionAbs.top;return b!=0&&(b>0?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-this.lastPositionAbs.left;return b!=0&&(b>0?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions()},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(b){var l=this;var g=[];var e=[];var h=this._connectWith();if(h&&b){for(var d=h.length-1;d>=0;d--){var k=a(h[d]);for(var c=k.length-1;c>=0;c--){var f=a.data(k[c],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element):a(f.options.items,f.element).not(".ui-sortable-helper"),f])}}}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper"),this]);for(var d=e.length-1;d>=0;d--){e[d][0].each(function(){g.push(this)})}return a(g)},_removeCurrentsFromItems:function(){var d=this.currentItem.find(":data(sortable-item)");for(var c=0;c<this.items.length;c++){for(var b=0;b<d.length;b++){if(d[b]==this.items[c].item[0]){this.items.splice(c,1)}}}},_refreshItems:function(b){this.items=[];this.containers=[this];var h=this.items;var p=this;var f=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]];var l=this._connectWith();if(l){for(var e=l.length-1;e>=0;e--){var m=a(l[e]);for(var d=m.length-1;d>=0;d--){var g=a.data(m[d],"sortable");if(g&&g!=this&&!g.options.disabled){f.push([a.isFunction(g.options.items)?g.options.items.call(g.element[0],b,{item:this.currentItem}):a(g.options.items,g.element),g]);this.containers.push(g)}}}}for(var e=f.length-1;e>=0;e--){var k=f[e][1];var c=f[e][0];for(var d=0,n=c.length;d<n;d++){var o=a(c[d]);o.data("sortable-item",k);h.push({item:o,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){if(this.offsetParent&&this.helper){this.offset.parent=this._getParentOffset()}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d];if(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0]){continue}var c=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!b){e.width=c.outerWidth();e.height=c.outerHeight()}var f=c.offset();e.left=f.left;e.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this)}else{for(var d=this.containers.length-1;d>=0;d--){var f=this.containers[d].element.offset();this.containers[d].containerCache.left=f.left;this.containers[d].containerCache.top=f.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}}},_createPlaceholder:function(d){var b=d||this,e=b.options;if(!e.placeholder||e.placeholder.constructor==String){var c=e.placeholder;e.placeholder={element:function(){var f=a(document.createElement(b.currentItem[0].nodeName)).addClass(c||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!c){f.style.visibility="hidden"}return f},update:function(f,g){if(c&&!e.forcePlaceholderSize){return}if(!g.height()){g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10))}if(!g.width()){g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=a(e.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);e.placeholder.update(b,b.placeholder)},_contactContainers:function(d){for(var c=this.containers.length-1;c>=0;c--){if(this._intersectsWith(this.containers[c].containerCache)){if(!this.containers[c].containerCache.over){if(this.currentContainer!=this.containers[c]){var h=10000;var g=null;var e=this.positionAbs[this.containers[c].floating?"left":"top"];for(var b=this.items.length-1;b>=0;b--){if(!a.ui.contains(this.containers[c].element[0],this.items[b].item[0])){continue}var f=this.items[b][this.containers[c].floating?"left":"top"];if(Math.abs(f-e)<h){h=Math.abs(f-e);g=this.items[b]}}if(!g&&!this.options.dropOnEmpty){continue}this.currentContainer=this.containers[c];g?this._rearrange(d,g,null,true):this._rearrange(d,null,this.containers[c].element,true);this._trigger("change",d,this._uiHash());this.containers[c]._trigger("change",d,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder)}this.containers[c]._trigger("over",d,this._uiHash(this));this.containers[c].containerCache.over=1}}else{if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",d,this._uiHash(this));this.containers[c].containerCache.over=0}}}},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c,this.currentItem])):(d.helper=="clone"?this.currentItem.clone():this.currentItem);if(!b.parents("body").length){a(d.appendTo!="parent"?d.appendTo:this.currentItem[0].parentNode)[0].appendChild(b[0])}if(b[0]==this.currentItem[0]){this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}}if(b[0].style.width==""||d.forceHelperSize){b.width(this.currentItem.width())}if(b[0].style.height==""||d.forceHelperSize){b.height(this.currentItem.height())}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.currentItem.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.currentItem.css("marginLeft"),10)||0),top:(parseInt(this.currentItem.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)){var c=a(e.containment)[0];var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_rearrange:function(g,f,c,e){c?c[0].appendChild(this.placeholder[0]):f.item[0].parentNode.insertBefore(this.placeholder[0],(this.direction=="down"?f.item[0]:f.item[0].nextSibling));this.counter=this.counter?++this.counter:1;var d=this,b=this.counter;window.setTimeout(function(){if(b==d.counter){d.refreshPositions(!e)}},0)},_clear:function(d,e){this.reverting=false;var f=[],b=this;if(!this._noFinalSort&&this.currentItem[0].parentNode){this.placeholder.before(this.currentItem)}this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var c in this._storedCSS){if(this._storedCSS[c]=="auto"||this._storedCSS[c]=="static"){this._storedCSS[c]=""}}this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}if(this.fromOutside&&!e){f.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))})}if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!e){f.push(function(g){this._trigger("update",g,this._uiHash())})}if(!a.ui.contains(this.element[0],this.currentItem[0])){if(!e){f.push(function(g){this._trigger("remove",g,this._uiHash())})}for(var c=this.containers.length-1;c>=0;c--){if(a.ui.contains(this.containers[c].element[0],this.currentItem[0])&&!e){f.push((function(g){return function(h){g._trigger("receive",h,this._uiHash(this))}}).call(this,this.containers[c]));f.push((function(g){return function(h){g._trigger("update",h,this._uiHash(this))}}).call(this,this.containers[c]))}}}for(var c=this.containers.length-1;c>=0;c--){if(!e){f.push((function(g){return function(h){g._trigger("deactivate",h,this._uiHash(this))}}).call(this,this.containers[c]))}if(this.containers[c].containerCache.over){f.push((function(g){return function(h){g._trigger("out",h,this._uiHash(this))}}).call(this,this.containers[c]));this.containers[c].containerCache.over=0}}if(this._storedCursor){a("body").css("cursor",this._storedCursor)}if(this._storedOpacity){this.helper.css("opacity",this._storedOpacity)}if(this._storedZIndex){this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex)}this.dragging=false;if(this.cancelHelperRemoval){if(!e){this._trigger("beforeStop",d,this._uiHash());for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}return false}if(!e){this._trigger("beforeStop",d,this._uiHash())}this.placeholder[0].parentNode.removeChild(this.placeholder[0]);if(this.helper[0]!=this.currentItem[0]){this.helper.remove()}this.helper=null;if(!e){for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){if(a.widget.prototype._trigger.apply(this,arguments)===false){this.cancel()}},_uiHash:function(c){var b=c||this;return{helper:b.helper,placeholder:b.placeholder||a([]),position:b.position,absolutePosition:b.positionAbs,offset:b.positionAbs,item:b.currentItem,sender:c?c.element:null}}}));a.extend(a.ui.sortable,{getter:"serialize toArray",version:"1.7.2",eventPrefix:"sort",defaults:{appendTo:"parent",axis:false,cancel:":input,option",connectWith:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1000}})})(jQuery);;/*
 * jQuery UI Accordion 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Accordion
 *
 * Depends:
 *	ui.core.js
 */
(function(a){a.widget("ui.accordion",{_init:function(){var d=this.options,b=this;this.running=0;if(d.collapsible==a.ui.accordion.defaults.collapsible&&d.alwaysOpen!=a.ui.accordion.defaults.alwaysOpen){d.collapsible=!d.alwaysOpen}if(d.navigation){var c=this.element.find("a").filter(d.navigationFilter);if(c.length){if(c.filter(d.header).length){this.active=c}else{this.active=c.parent().parent().prev();c.addClass("ui-accordion-content-active")}}}this.element.addClass("ui-accordion ui-widget ui-helper-reset");if(this.element[0].nodeName=="UL"){this.element.children("li").addClass("ui-accordion-li-fix")}this.headers=this.element.find(d.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){a(this).removeClass("ui-state-focus")});this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");this.active=this._findActive(this.active||d.active).toggleClass("ui-state-default").toggleClass("ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");this.active.next().addClass("ui-accordion-content-active");a("<span/>").addClass("ui-icon "+d.icons.header).prependTo(this.headers);this.active.find(".ui-icon").toggleClass(d.icons.header).toggleClass(d.icons.headerSelected);if(a.browser.msie){this.element.find("a").css("zoom","1")}this.resize();this.element.attr("role","tablist");this.headers.attr("role","tab").bind("keydown",function(e){return b._keydown(e)}).next().attr("role","tabpanel");this.headers.not(this.active||"").attr("aria-expanded","false").attr("tabIndex","-1").next().hide();if(!this.active.length){this.headers.eq(0).attr("tabIndex","0")}else{this.active.attr("aria-expanded","true").attr("tabIndex","0")}if(!a.browser.safari){this.headers.find("a").attr("tabIndex","-1")}if(d.event){this.headers.bind((d.event)+".accordion",function(e){return b._clickHandler.call(b,e,this)})}},destroy:function(){var c=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role").unbind(".accordion").removeData("accordion");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabindex");this.headers.find("a").removeAttr("tabindex");this.headers.children(".ui-icon").remove();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active");if(c.autoHeight||c.fillHeight){b.css("height","")}},_setData:function(b,c){if(b=="alwaysOpen"){b="collapsible";c=!c}a.widget.prototype._setData.apply(this,arguments)},_keydown:function(e){var g=this.options,f=a.ui.keyCode;if(g.disabled||e.altKey||e.ctrlKey){return}var d=this.headers.length;var b=this.headers.index(e.target);var c=false;switch(e.keyCode){case f.RIGHT:case f.DOWN:c=this.headers[(b+1)%d];break;case f.LEFT:case f.UP:c=this.headers[(b-1+d)%d];break;case f.SPACE:case f.ENTER:return this._clickHandler({target:e.target},e.target)}if(c){a(e.target).attr("tabIndex","-1");a(c).attr("tabIndex","0");c.focus();return false}return true},resize:function(){var e=this.options,d;if(e.fillSpace){if(a.browser.msie){var b=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}d=this.element.parent().height();if(a.browser.msie){this.element.parent().css("overflow",b)}this.headers.each(function(){d-=a(this).outerHeight()});var c=0;this.headers.next().each(function(){c=Math.max(c,a(this).innerHeight()-a(this).height())}).height(Math.max(0,d-c)).css("overflow","auto")}else{if(e.autoHeight){d=0;this.headers.next().each(function(){d=Math.max(d,a(this).outerHeight())}).height(d)}}},activate:function(b){var c=this._findActive(b)[0];this._clickHandler({target:c},c)},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,f){var d=this.options;if(d.disabled){return false}if(!b.target&&d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var h=this.active.next(),e={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:h},c=(this.active=a([]));this._toggle(c,h,e);return false}var g=a(b.currentTarget||f);var i=g[0]==this.active[0];if(this.running||(!d.collapsible&&i)){return false}this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");if(!i){g.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").find(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);g.next().addClass("ui-accordion-content-active")}var c=g.next(),h=this.active.next(),e={options:d,newHeader:i&&d.collapsible?a([]):g,oldHeader:this.active,newContent:i&&d.collapsible?a([]):c.find("> *"),oldContent:h.find("> *")},j=this.headers.index(this.active[0])>this.headers.index(g[0]);this.active=i?a([]):g;this._toggle(c,h,e,i,j);return false},_toggle:function(b,i,g,j,k){var d=this.options,m=this;this.toShow=b;this.toHide=i;this.data=g;var c=function(){if(!m){return}return m._completed.apply(m,arguments)};this._trigger("changestart",null,this.data);this.running=i.size()===0?b.size():i.size();if(d.animated){var f={};if(d.collapsible&&j){f={toShow:a([]),toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}else{f={toShow:b,toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}if(!d.proxied){d.proxied=d.animated}if(!d.proxiedDuration){d.proxiedDuration=d.duration}d.animated=a.isFunction(d.proxied)?d.proxied(f):d.proxied;d.duration=a.isFunction(d.proxiedDuration)?d.proxiedDuration(f):d.proxiedDuration;var l=a.ui.accordion.animations,e=d.duration,h=d.animated;if(!l[h]){l[h]=function(n){this.slide(n,{easing:h,duration:e||700})}}l[h](f)}else{if(d.collapsible&&j){b.toggle()}else{i.hide();b.show()}c(true)}i.prev().attr("aria-expanded","false").attr("tabIndex","-1").blur();b.prev().attr("aria-expanded","true").attr("tabIndex","0").focus()},_completed:function(b){var c=this.options;this.running=b?0:--this.running;if(this.running){return}if(c.clearStyle){this.toShow.add(this.toHide).css({height:"",overflow:""})}this._trigger("change",null,this.data)}});a.extend(a.ui.accordion,{version:"1.7.2",defaults:{active:null,alwaysOpen:true,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()==location.href.toLowerCase()}},animations:{slide:function(j,h){j=a.extend({easing:"swing",duration:300},j,h);if(!j.toHide.size()){j.toShow.animate({height:"show"},j);return}if(!j.toShow.size()){j.toHide.animate({height:"hide"},j);return}var c=j.toShow.css("overflow"),g,d={},f={},e=["height","paddingTop","paddingBottom"],b;var i=j.toShow;b=i[0].style.width;i.width(parseInt(i.parent().width(),10)-parseInt(i.css("paddingLeft"),10)-parseInt(i.css("paddingRight"),10)-(parseInt(i.css("borderLeftWidth"),10)||0)-(parseInt(i.css("borderRightWidth"),10)||0));a.each(e,function(k,m){f[m]="hide";var l=(""+a.css(j.toShow[0],m)).match(/^([\d+-.]+)(.*)$/);d[m]={value:l[1],unit:l[2]||"px"}});j.toShow.css({height:0,overflow:"hidden"}).show();j.toHide.filter(":hidden").each(j.complete).end().filter(":visible").animate(f,{step:function(k,l){if(l.prop=="height"){g=(l.now-l.start)/(l.end-l.start)}j.toShow[0].style[l.prop]=(g*d[l.prop].value)+d[l.prop].unit},duration:j.duration,easing:j.easing,complete:function(){if(!j.autoHeight){j.toShow.css("height","")}j.toShow.css("width",b);j.toShow.css({overflow:c});j.complete()}})},bounceslide:function(b){this.slide(b,{easing:b.down?"easeOutBounce":"swing",duration:b.down?1000:200})},easeslide:function(b){this.slide(b,{easing:"easeinout",duration:700})}}})})(jQuery);;/*
 * jQuery UI Dialog 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Dialog
 *
 * Depends:
 *	ui.core.js
 *	ui.draggable.js
 *	ui.resizable.js
 */
(function(c){var b={dragStart:"start.draggable",drag:"drag.draggable",dragStop:"stop.draggable",maxHeight:"maxHeight.resizable",minHeight:"minHeight.resizable",maxWidth:"maxWidth.resizable",minWidth:"minWidth.resizable",resizeStart:"start.resizable",resize:"drag.resizable",resizeStop:"stop.resizable"},a="ui-dialog ui-widget ui-widget-content ui-corner-all ";c.widget("ui.dialog",{_init:function(){this.originalTitle=this.element.attr("title");var l=this,m=this.options,j=m.title||this.originalTitle||"&nbsp;",e=c.ui.dialog.getTitleId(this.element),k=(this.uiDialog=c("<div/>")).appendTo(document.body).hide().addClass(a+m.dialogClass).css({position:"absolute",overflow:"hidden",zIndex:m.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){(m.closeOnEscape&&n.keyCode&&n.keyCode==c.ui.keyCode.ESCAPE&&l.close(n))}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(n){l.moveToTop(false,n)}),g=this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(k),f=(this.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(k),i=c('<a href="#"/>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){i.addClass("ui-state-hover")},function(){i.removeClass("ui-state-hover")}).focus(function(){i.addClass("ui-state-focus")}).blur(function(){i.removeClass("ui-state-focus")}).mousedown(function(n){n.stopPropagation()}).click(function(n){l.close(n);return false}).appendTo(f),h=(this.uiDialogTitlebarCloseText=c("<span/>")).addClass("ui-icon ui-icon-closethick").text(m.closeText).appendTo(i),d=c("<span/>").addClass("ui-dialog-title").attr("id",e).html(j).prependTo(f);f.find("*").add(f).disableSelection();(m.draggable&&c.fn.draggable&&this._makeDraggable());(m.resizable&&c.fn.resizable&&this._makeResizable());this._createButtons(m.buttons);this._isOpen=false;(m.bgiframe&&c.fn.bgiframe&&k.bgiframe());(m.autoOpen&&this.open())},destroy:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide();this.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");this.uiDialog.remove();(this.originalTitle&&this.element.attr("title",this.originalTitle))},close:function(f){var d=this;if(false===d._trigger("beforeclose",f)){return}(d.overlay&&d.overlay.destroy());d.uiDialog.unbind("keypress.ui-dialog");(d.options.hide?d.uiDialog.hide(d.options.hide,function(){d._trigger("close",f)}):d.uiDialog.hide()&&d._trigger("close",f));c.ui.dialog.overlay.resize();d._isOpen=false;if(d.options.modal){var e=0;c(".ui-dialog").each(function(){if(this!=d.uiDialog[0]){e=Math.max(e,c(this).css("z-index"))}});c.ui.dialog.maxZ=e}},isOpen:function(){return this._isOpen},moveToTop:function(f,e){if((this.options.modal&&!f)||(!this.options.stack&&!this.options.modal)){return this._trigger("focus",e)}if(this.options.zIndex>c.ui.dialog.maxZ){c.ui.dialog.maxZ=this.options.zIndex}(this.overlay&&this.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=++c.ui.dialog.maxZ));var d={scrollTop:this.element.attr("scrollTop"),scrollLeft:this.element.attr("scrollLeft")};this.uiDialog.css("z-index",++c.ui.dialog.maxZ);this.element.attr(d);this._trigger("focus",e)},open:function(){if(this._isOpen){return}var e=this.options,d=this.uiDialog;this.overlay=e.modal?new c.ui.dialog.overlay(this):null;(d.next().length&&d.appendTo("body"));this._size();this._position(e.position);d.show(e.show);this.moveToTop(true);(e.modal&&d.bind("keypress.ui-dialog",function(h){if(h.keyCode!=c.ui.keyCode.TAB){return}var g=c(":tabbable",this),i=g.filter(":first")[0],f=g.filter(":last")[0];if(h.target==f&&!h.shiftKey){setTimeout(function(){i.focus()},1)}else{if(h.target==i&&h.shiftKey){setTimeout(function(){f.focus()},1)}}}));c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();this._trigger("open");this._isOpen=true},_createButtons:function(g){var f=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");this.uiDialog.find(".ui-dialog-buttonpane").remove();(typeof g=="object"&&g!==null&&c.each(g,function(){return !(d=true)}));if(d){c.each(g,function(h,i){c('<button type="button"></button>').addClass("ui-state-default ui-corner-all").text(h).click(function(){i.apply(f.element[0],arguments)}).hover(function(){c(this).addClass("ui-state-hover")},function(){c(this).removeClass("ui-state-hover")}).focus(function(){c(this).addClass("ui-state-focus")}).blur(function(){c(this).removeClass("ui-state-focus")}).appendTo(e)});e.appendTo(this.uiDialog)}},_makeDraggable:function(){var d=this,f=this.options,e;this.uiDialog.draggable({cancel:".ui-dialog-content",handle:".ui-dialog-titlebar",containment:"document",start:function(){e=f.height;c(this).height(c(this).height()).addClass("ui-dialog-dragging");(f.dragStart&&f.dragStart.apply(d.element[0],arguments))},drag:function(){(f.drag&&f.drag.apply(d.element[0],arguments))},stop:function(){c(this).removeClass("ui-dialog-dragging").height(e);(f.dragStop&&f.dragStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}})},_makeResizable:function(g){g=(g===undefined?this.options.resizable:g);var d=this,f=this.options,e=typeof g=="string"?g:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",alsoResize:this.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:f.minHeight,start:function(){c(this).addClass("ui-dialog-resizing");(f.resizeStart&&f.resizeStart.apply(d.element[0],arguments))},resize:function(){(f.resize&&f.resize.apply(d.element[0],arguments))},handles:e,stop:function(){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();(f.resizeStop&&f.resizeStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}}).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_position:function(i){var e=c(window),f=c(document),g=f.scrollTop(),d=f.scrollLeft(),h=g;if(c.inArray(i,["center","top","right","bottom","left"])>=0){i=[i=="right"||i=="left"?i:"center",i=="top"||i=="bottom"?i:"middle"]}if(i.constructor!=Array){i=["center","middle"]}if(i[0].constructor==Number){d+=i[0]}else{switch(i[0]){case"left":d+=0;break;case"right":d+=e.width()-this.uiDialog.outerWidth();break;default:case"center":d+=(e.width()-this.uiDialog.outerWidth())/2}}if(i[1].constructor==Number){g+=i[1]}else{switch(i[1]){case"top":g+=0;break;case"bottom":g+=e.height()-this.uiDialog.outerHeight();break;default:case"middle":g+=(e.height()-this.uiDialog.outerHeight())/2}}g=Math.max(g,h);this.uiDialog.css({top:g,left:d})},_setData:function(e,f){(b[e]&&this.uiDialog.data(b[e],f));switch(e){case"buttons":this._createButtons(f);break;case"closeText":this.uiDialogTitlebarCloseText.text(f);break;case"dialogClass":this.uiDialog.removeClass(this.options.dialogClass).addClass(a+f);break;case"draggable":(f?this._makeDraggable():this.uiDialog.draggable("destroy"));break;case"height":this.uiDialog.height(f);break;case"position":this._position(f);break;case"resizable":var d=this.uiDialog,g=this.uiDialog.is(":data(resizable)");(g&&!f&&d.resizable("destroy"));(g&&typeof f=="string"&&d.resizable("option","handles",f));(g||this._makeResizable(f));break;case"title":c(".ui-dialog-title",this.uiDialogTitlebar).html(f||"&nbsp;");break;case"width":this.uiDialog.width(f);break}c.widget.prototype._setData.apply(this,arguments)},_size:function(){var e=this.options;this.element.css({height:0,minHeight:0,width:"auto"});var d=this.uiDialog.css({height:"auto",width:e.width}).height();this.element.css({minHeight:Math.max(e.minHeight-d,0),height:e.height=="auto"?"auto":Math.max(e.height-d,0)})}});c.extend(c.ui.dialog,{version:"1.7.2",defaults:{autoOpen:true,bgiframe:false,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:"center",resizable:true,show:null,stack:true,title:"",width:300,zIndex:1000},getter:"isOpen",uuid:0,maxZ:0,getTitleId:function(d){return"ui-dialog-title-"+(d.attr("id")||++this.uuid)},overlay:function(d){this.$el=c.ui.dialog.overlay.create(d)}});c.extend(c.ui.dialog.overlay,{instances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(d){return d+".dialog-overlay"}).join(" "),create:function(e){if(this.instances.length===0){setTimeout(function(){if(c.ui.dialog.overlay.instances.length){c(document).bind(c.ui.dialog.overlay.events,function(f){var g=c(f.target).parents(".ui-dialog").css("zIndex")||0;return(g>c.ui.dialog.overlay.maxZ)})}},1);c(document).bind("keydown.dialog-overlay",function(f){(e.options.closeOnEscape&&f.keyCode&&f.keyCode==c.ui.keyCode.ESCAPE&&e.close(f))});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var d=c("<div></div>").appendTo(document.body).addClass("ui-widget-overlay").css({width:this.width(),height:this.height()});(e.options.bgiframe&&c.fn.bgiframe&&d.bgiframe());this.instances.push(d);return d},destroy:function(d){this.instances.splice(c.inArray(this.instances,d),1);if(this.instances.length===0){c([document,window]).unbind(".dialog-overlay")}d.remove();var e=0;c.each(this.instances,function(){e=Math.max(e,this.css("z-index"))});this.maxZ=e},height:function(){if(c.browser.msie&&c.browser.version<7){var e=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);var d=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);if(e<d){return c(window).height()+"px"}else{return e+"px"}}else{return c(document).height()+"px"}},width:function(){if(c.browser.msie&&c.browser.version<7){var d=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);var e=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);if(d<e){return c(window).width()+"px"}else{return d+"px"}}else{return c(document).width()+"px"}},resize:function(){var d=c([]);c.each(c.ui.dialog.overlay.instances,function(){d=d.add(this)});d.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);;/*
 * jQuery UI Slider 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Slider
 *
 * Depends:
 *	ui.core.js
 */
(function(a){a.widget("ui.slider",a.extend({},a.ui.mouse,{_init:function(){var b=this,c=this.options;this._keySliding=false;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");this.range=a([]);if(c.range){if(c.range===true){this.range=a("<div></div>");if(!c.values){c.values=[this._valueMin(),this._valueMin()]}if(c.values.length&&c.values.length!=2){c.values=[c.values[0],c.values[0]]}}else{this.range=a("<div></div>")}this.range.appendTo(this.element).addClass("ui-slider-range");if(c.range=="min"||c.range=="max"){this.range.addClass("ui-slider-range-"+c.range)}this.range.addClass("ui-widget-header")}if(a(".ui-slider-handle",this.element).length==0){a('<a href="#"></a>').appendTo(this.element).addClass("ui-slider-handle")}if(c.values&&c.values.length){while(a(".ui-slider-handle",this.element).length<c.values.length){a('<a href="#"></a>').appendTo(this.element).addClass("ui-slider-handle")}}this.handles=a(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(d){d.preventDefault()}).hover(function(){if(!c.disabled){a(this).addClass("ui-state-hover")}},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(!c.disabled){a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}else{a(this).blur()}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(d){a(this).data("index.ui-slider-handle",d)});this.handles.keydown(function(i){var f=true;var e=a(this).data("index.ui-slider-handle");if(b.options.disabled){return}switch(i.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!b._keySliding){b._keySliding=true;a(this).addClass("ui-state-active");b._start(i,e)}break}var g,d,h=b._step();if(b.options.values&&b.options.values.length){g=d=b.values(e)}else{g=d=b.value()}switch(i.keyCode){case a.ui.keyCode.HOME:d=b._valueMin();break;case a.ui.keyCode.END:d=b._valueMax();break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g==b._valueMax()){return}d=g+h;break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g==b._valueMin()){return}d=g-h;break}b._slide(i,e,d);return f}).keyup(function(e){var d=a(this).data("index.ui-slider-handle");if(b._keySliding){b._stop(e,d);b._change(e,d);b._keySliding=false;a(this).removeClass("ui-state-active")}});this._refreshValue()},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy()},_mouseCapture:function(d){var e=this.options;if(e.disabled){return false}this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();var h={x:d.pageX,y:d.pageY};var j=this._normValueFromMouse(h);var c=this._valueMax()-this._valueMin()+1,f;var k=this,i;this.handles.each(function(l){var m=Math.abs(j-k.values(l));if(c>m){c=m;f=a(this);i=l}});if(e.range==true&&this.values(1)==e.min){f=a(this.handles[++i])}this._start(d,i);k._handleIndex=i;f.addClass("ui-state-active").focus();var g=f.offset();var b=!a(d.target).parents().andSelf().is(".ui-slider-handle");this._clickOffset=b?{left:0,top:0}:{left:d.pageX-g.left-(f.width()/2),top:d.pageY-g.top-(f.height()/2)-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};j=this._normValueFromMouse(h);this._slide(d,i,j);return true},_mouseStart:function(b){return true},_mouseDrag:function(d){var b={x:d.pageX,y:d.pageY};var c=this._normValueFromMouse(b);this._slide(d,this._handleIndex,c);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._handleIndex=null;this._clickOffset=null;return false},_detectOrientation:function(){this.orientation=this.options.orientation=="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(d){var c,h;if("horizontal"==this.orientation){c=this.elementSize.width;h=d.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{c=this.elementSize.height;h=d.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}var f=(h/c);if(f>1){f=1}if(f<0){f=0}if("vertical"==this.orientation){f=1-f}var e=this._valueMax()-this._valueMin(),i=f*e,b=i%this.options.step,g=this._valueMin()+i-b;if(b>(this.options.step/2)){g+=this.options.step}return parseFloat(g.toFixed(5))},_start:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("start",d,b)},_slide:function(f,e,d){var g=this.handles[e];if(this.options.values&&this.options.values.length){var b=this.values(e?0:1);if((this.options.values.length==2&&this.options.range===true)&&((e==0&&d>b)||(e==1&&d<b))){d=b}if(d!=this.values(e)){var c=this.values();c[e]=d;var h=this._trigger("slide",f,{handle:this.handles[e],value:d,values:c});var b=this.values(e?0:1);if(h!==false){this.values(e,d,(f.type=="mousedown"&&this.options.animate),true)}}}else{if(d!=this.value()){var h=this._trigger("slide",f,{handle:this.handles[e],value:d});if(h!==false){this._setData("value",d,(f.type=="mousedown"&&this.options.animate))}}}},_stop:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("stop",d,b)},_change:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("change",d,b)},value:function(b){if(arguments.length){this._setData("value",b);this._change(null,0)}return this._value()},values:function(b,e,c,d){if(arguments.length>1){this.options.values[b]=e;this._refreshValue(c);if(!d){this._change(null,b)}}if(arguments.length){if(this.options.values&&this.options.values.length){return this._values(b)}else{return this.value()}}else{return this._values()}},_setData:function(b,d,c){a.widget.prototype._setData.apply(this,arguments);switch(b){case"disabled":if(d){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled")}else{this.handles.removeAttr("disabled")}case"orientation":this._detectOrientation();this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue(c);break;case"value":this._refreshValue(c);break}},_step:function(){var b=this.options.step;return b},_value:function(){var b=this.options.value;if(b<this._valueMin()){b=this._valueMin()}if(b>this._valueMax()){b=this._valueMax()}return b},_values:function(b){if(arguments.length){var c=this.options.values[b];if(c<this._valueMin()){c=this._valueMin()}if(c>this._valueMax()){c=this._valueMax()}return c}else{return this.options.values}},_valueMin:function(){var b=this.options.min;return b},_valueMax:function(){var b=this.options.max;return b},_refreshValue:function(c){var f=this.options.range,d=this.options,l=this;if(this.options.values&&this.options.values.length){var i,h;this.handles.each(function(p,n){var o=(l.values(p)-l._valueMin())/(l._valueMax()-l._valueMin())*100;var m={};m[l.orientation=="horizontal"?"left":"bottom"]=o+"%";a(this).stop(1,1)[c?"animate":"css"](m,d.animate);if(l.options.range===true){if(l.orientation=="horizontal"){(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({left:o+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({width:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}else{(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({bottom:(o)+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({height:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}}lastValPercent=o})}else{var j=this.value(),g=this._valueMin(),k=this._valueMax(),e=k!=g?(j-g)/(k-g)*100:0;var b={};b[l.orientation=="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[c?"animate":"css"](b,d.animate);(f=="min")&&(this.orientation=="horizontal")&&this.range.stop(1,1)[c?"animate":"css"]({width:e+"%"},d.animate);(f=="max")&&(this.orientation=="horizontal")&&this.range[c?"animate":"css"]({width:(100-e)+"%"},{queue:false,duration:d.animate});(f=="min")&&(this.orientation=="vertical")&&this.range.stop(1,1)[c?"animate":"css"]({height:e+"%"},d.animate);(f=="max")&&(this.orientation=="vertical")&&this.range[c?"animate":"css"]({height:(100-e)+"%"},{queue:false,duration:d.animate})}}}));a.extend(a.ui.slider,{getter:"value values",version:"1.7.2",eventPrefix:"slide",defaults:{animate:false,delay:0,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null}})})(jQuery);;/*
 * jQuery UI Tabs 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Tabs
 *
 * Depends:
 *	ui.core.js
 */
(function(a){a.widget("ui.tabs",{_init:function(){if(this.options.deselectable!==undefined){this.options.collapsible=this.options.deselectable}this._tabify(true)},_setData:function(b,c){if(b=="selected"){if(this.options.collapsible&&c==this.options.selected){return}this.select(c)}else{this.options[b]=c;if(b=="deselectable"){this.options.collapsible=c}this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+a.data(b)},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+a.data(this.list[0]));return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(c,b){return{tab:c,panel:b,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(n){this.list=this.element.children("ul:first");this.lis=a("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);var p=this,d=this.options;var c=/^#.+/;this.anchors.each(function(r,o){var q=a(o).attr("href");var s=q.split("#")[0],u;if(s&&(s===location.toString().split("#")[0]||(u=a("base")[0])&&s===u.href)){q=o.hash;o.href=q}if(c.test(q)){p.panels=p.panels.add(p._sanitizeSelector(q))}else{if(q!="#"){a.data(o,"href.tabs",q);a.data(o,"load.tabs",q.replace(/#.*$/,""));var w=p._tabId(o);o.href="#"+w;var v=a("#"+w);if(!v.length){v=a(d.panelTemplate).attr("id",w).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(p.panels[r-1]||p.list);v.data("destroy.tabs",true)}p.panels=p.panels.add(v)}else{d.disabled.push(r)}}});if(n){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(d.selected===undefined){if(location.hash){this.anchors.each(function(q,o){if(o.hash==location.hash){d.selected=q;return false}})}if(typeof d.selected!="number"&&d.cookie){d.selected=parseInt(p._cookie(),10)}if(typeof d.selected!="number"&&this.lis.filter(".ui-tabs-selected").length){d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}d.selected=d.selected||0}else{if(d.selected===null){d.selected=-1}}d.selected=((d.selected>=0&&this.anchors[d.selected])||d.selected<0)?d.selected:0;d.disabled=a.unique(d.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(q,o){return p.lis.index(q)}))).sort();if(a.inArray(d.selected,d.disabled)!=-1){d.disabled.splice(a.inArray(d.selected,d.disabled),1)}this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");if(d.selected>=0&&this.anchors.length){this.panels.eq(d.selected).removeClass("ui-tabs-hide");this.lis.eq(d.selected).addClass("ui-tabs-selected ui-state-active");p.element.queue("tabs",function(){p._trigger("show",null,p._ui(p.anchors[d.selected],p.panels[d.selected]))});this.load(d.selected)}a(window).bind("unload",function(){p.lis.add(p.anchors).unbind(".tabs");p.lis=p.anchors=p.panels=null})}else{d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}this.element[d.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");if(d.cookie){this._cookie(d.selected,d.cookie)}for(var g=0,m;(m=this.lis[g]);g++){a(m)[a.inArray(g,d.disabled)!=-1&&!a(m).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled")}if(d.cache===false){this.anchors.removeData("cache.tabs")}this.lis.add(this.anchors).unbind(".tabs");if(d.event!="mouseover"){var f=function(o,i){if(i.is(":not(.ui-state-disabled)")){i.addClass("ui-state-"+o)}};var j=function(o,i){i.removeClass("ui-state-"+o)};this.lis.bind("mouseover.tabs",function(){f("hover",a(this))});this.lis.bind("mouseout.tabs",function(){j("hover",a(this))});this.anchors.bind("focus.tabs",function(){f("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var b,h;if(d.fx){if(a.isArray(d.fx)){b=d.fx[0];h=d.fx[1]}else{b=h=d.fx}}function e(i,o){i.css({display:""});if(a.browser.msie&&o.opacity){i[0].style.removeAttribute("filter")}}var k=h?function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.hide().removeClass("ui-tabs-hide").animate(h,h.duration||"normal",function(){e(o,h);p._trigger("show",null,p._ui(i,o[0]))})}:function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");p._trigger("show",null,p._ui(i,o[0]))};var l=b?function(o,i){i.animate(b,b.duration||"normal",function(){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");e(i,b);p.element.dequeue("tabs")})}:function(o,i,q){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");p.element.dequeue("tabs")};this.anchors.bind(d.event+".tabs",function(){var o=this,r=a(this).closest("li"),i=p.panels.filter(":not(.ui-tabs-hide)"),q=a(p._sanitizeSelector(this.hash));if((r.hasClass("ui-tabs-selected")&&!d.collapsible)||r.hasClass("ui-state-disabled")||r.hasClass("ui-state-processing")||p._trigger("select",null,p._ui(this,q[0]))===false){this.blur();return false}d.selected=p.anchors.index(this);p.abort();if(d.collapsible){if(r.hasClass("ui-tabs-selected")){d.selected=-1;if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){l(o,i)}).dequeue("tabs");this.blur();return false}else{if(!i.length){if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this));this.blur();return false}}}if(d.cookie){p._cookie(d.selected,d.cookie)}if(q.length){if(i.length){p.element.queue("tabs",function(){l(o,i)})}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this))}else{throw"jQuery UI Tabs: Mismatching fragment identifier."}if(a.browser.msie){this.blur()}});this.anchors.bind("click.tabs",function(){return false})},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var c=a.data(this,"href.tabs");if(c){this.href=c}var d=a(this).unbind(".tabs");a.each(["href","load","cache"],function(e,f){d.removeData(f+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){if(a.data(this,"destroy.tabs")){a(this).remove()}else{a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}});if(b.cookie){this._cookie(null,b.cookie)}},add:function(e,d,c){if(c===undefined){c=this.anchors.length}var b=this,g=this.options,i=a(g.tabTemplate.replace(/#\{href\}/g,e).replace(/#\{label\}/g,d)),h=!e.indexOf("#")?e.replace("#",""):this._tabId(a("a",i)[0]);i.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var f=a("#"+h);if(!f.length){f=a(g.panelTemplate).attr("id",h).data("destroy.tabs",true)}f.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(c>=this.lis.length){i.appendTo(this.list);f.appendTo(this.list[0].parentNode)}else{i.insertBefore(this.lis[c]);f.insertBefore(this.panels[c])}g.disabled=a.map(g.disabled,function(k,j){return k>=c?++k:k});this._tabify();if(this.anchors.length==1){i.addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[c],this.panels[c]))},remove:function(b){var d=this.options,e=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();if(e.hasClass("ui-tabs-selected")&&this.anchors.length>1){this.select(b+(b+1<this.anchors.length?1:-1))}d.disabled=a.map(a.grep(d.disabled,function(g,f){return g!=b}),function(g,f){return g>=b?--g:g});this._tabify();this._trigger("remove",null,this._ui(e.find("a")[0],c[0]))},enable:function(b){var c=this.options;if(a.inArray(b,c.disabled)==-1){return}this.lis.eq(b).removeClass("ui-state-disabled");c.disabled=a.grep(c.disabled,function(e,d){return e!=b});this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]))},disable:function(c){var b=this,d=this.options;if(c!=d.selected){this.lis.eq(c).addClass("ui-state-disabled");d.disabled.push(c);d.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}},select:function(b){if(typeof b=="string"){b=this.anchors.index(this.anchors.filter("[href$="+b+"]"))}else{if(b===null){b=-1}}if(b==-1&&this.options.collapsible){b=this.options.selected}this.anchors.eq(b).trigger(this.options.event+".tabs")},load:function(e){var c=this,g=this.options,b=this.anchors.eq(e)[0],d=a.data(b,"load.tabs");this.abort();if(!d||this.element.queue("tabs").length!==0&&a.data(b,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(e).addClass("ui-state-processing");if(g.spinner){var f=a("span",b);f.data("label.tabs",f.html()).html(g.spinner)}this.xhr=a.ajax(a.extend({},g.ajaxOptions,{url:d,success:function(i,h){a(c._sanitizeSelector(b.hash)).html(i);c._cleanup();if(g.cache){a.data(b,"cache.tabs",true)}c._trigger("load",null,c._ui(c.anchors[e],c.panels[e]));try{g.ajaxOptions.success(i,h)}catch(j){}c.element.dequeue("tabs")}}))},abort:function(){this.element.queue([]);this.panels.stop(false,true);if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup()},url:function(c,b){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",b)},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.7.2",getter:"length",defaults:{ajaxOptions:null,cache:false,cookie:null,collapsible:false,disabled:[],event:"click",fx:null,idPrefix:"ui-tabs-",panelTemplate:"<div></div>",spinner:"<em>Loading&#8230;</em>",tabTemplate:'<li><a href="#{href}"><span>#{label}</span></a></li>'}});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(d,f){var b=this,g=this.options;var c=b._rotate||(b._rotate=function(h){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var i=g.selected;b.select(++i<b.anchors.length?i:0)},d);if(h){h.stopPropagation()}});var e=b._unrotate||(b._unrotate=!f?function(h){if(h.clientX){b.rotate(null)}}:function(h){t=g.selected;c()});if(d){this.element.bind("tabsshow",c);this.anchors.bind(g.event+".tabs",e);c()}else{clearTimeout(b.rotation);this.element.unbind("tabsshow",c);this.anchors.unbind(g.event+".tabs",e);delete this._rotate;delete this._unrotate}}})})(jQuery);;/*
 * jQuery UI Datepicker 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Datepicker
 *
 * Depends:
 *	ui.core.js
 */
(function($){$.extend($.ui,{datepicker:{version:"1.7.2"}});var PROP_NAME="datepicker";function Datepicker(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._datepickerShowing=false;this._inDialog=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass="ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],dateFormat:"mm/dd/yy",firstDay:0,isRTL:false};this._defaults={showOn:"focus",showAnim:"show",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,showMonthAfterYear:false,yearRange:"-10:+10",showOtherMonths:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"normal",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false};$.extend(this._defaults,this.regional[""]);this.dpDiv=$('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>')}$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",log:function(){if(this.debug){console.log.apply("",arguments)}},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(target,inst){var input=$(target);inst.append=$([]);inst.trigger=$([]);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){inst.append=$('<span class="'+this._appendClass+'">'+appendText+"</span>");input[isRTL?"before":"after"](inst.append)}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");inst.trigger=$(this._get(inst,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('<button type="button"></button>').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("<img/>").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](inst.trigger);inst.trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);this._updateAlternate(inst)},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id="dp"+(++this.uuid);this._dialogInput=$('<input type="text" id="'+id+'" size="1" style="position: absolute; top: -100px;"/>');this._dialogInput.keydown(this._doKeyDown);$("body").append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst)}extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px");inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){inst.append.remove();inst.trigger.remove();$target.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;inst.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().removeClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;inst.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().addClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i<this._disabledInputs.length;i++){if(this._disabledInputs[i]==target){return true}}return false},_getInst:function(target){try{return $.data(target,PROP_NAME)}catch(err){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(target,name,value){var inst=this._getInst(target);if(arguments.length==2&&typeof name=="string"){return(name=="defaults"?$.extend({},$.datepicker._defaults):(inst?(name=="all"?$.extend({},inst.settings):this._get(inst,name)):null))}var settings=name||{};if(typeof name=="string"){settings={};settings[name]=value}if(inst){if(this._curInst==inst){this._hideDatepicker(null)}var date=this._getDateDatepicker(target);extendRemove(inst.settings,settings);this._setDateDatepicker(target,date);this._updateDatepicker(inst)}},_changeDatepicker:function(target,name,value){this._optionDatepicker(target,name,value)},_refreshDatepicker:function(target){var inst=this._getInst(target);if(inst){this._updateDatepicker(inst)}},_setDateDatepicker:function(target,date,endDate){var inst=this._getInst(target);if(inst){this._setDate(inst,date,endDate);this._updateDatepicker(inst);this._updateAlternate(inst)}},_getDateDatepicker:function(target){var inst=this._getInst(target);if(inst&&!inst.inline){this._setDateFromField(inst)}return(inst?this._getDate(inst):null)},_doKeyDown:function(event){var inst=$.datepicker._getInst(event.target);var handled=true;var isRTL=inst.dpDiv.is(".ui-datepicker-rtl");inst._keyEvent=true;if($.datepicker._datepickerShowing){switch(event.keyCode){case 9:$.datepicker._hideDatepicker(null,"");break;case 13:var sel=$("td."+$.datepicker._dayOverClass+", td."+$.datepicker._currentClass,inst.dpDiv);if(sel[0]){$.datepicker._selectDay(event.target,inst.selectedMonth,inst.selectedYear,sel[0])}else{$.datepicker._hideDatepicker(null,$.datepicker._get(inst,"duration"))}return false;break;case 27:$.datepicker._hideDatepicker(null,$.datepicker._get(inst,"duration"));break;case 33:$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M");break;case 34:$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M");break;case 35:if(event.ctrlKey||event.metaKey){$.datepicker._clearDate(event.target)}handled=event.ctrlKey||event.metaKey;break;case 36:if(event.ctrlKey||event.metaKey){$.datepicker._gotoToday(event.target)}handled=event.ctrlKey||event.metaKey;break;case 37:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,(isRTL?+1:-1),"D")}handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey){$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M")}break;case 38:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,-7,"D")}handled=event.ctrlKey||event.metaKey;break;case 39:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,(isRTL?-1:+1),"D")}handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey){$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M")}break;case 40:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,+7,"D")}handled=event.ctrlKey||event.metaKey;break;default:handled=false}}else{if(event.keyCode==36&&event.ctrlKey){$.datepicker._showDatepicker(this)}else{handled=false}}if(handled){event.preventDefault();event.stopPropagation()}},_doKeyPress:function(event){var inst=$.datepicker._getInst(event.target);if($.datepicker._get(inst,"constrainInput")){var chars=$.datepicker._possibleChars($.datepicker._get(inst,"dateFormat"));var chr=String.fromCharCode(event.charCode==undefined?event.keyCode:event.charCode);return event.ctrlKey||(chr<" "||!chars||chars.indexOf(chr)>-1)}},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return !isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};var self=this;inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){$(this).removeClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).removeClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).removeClass("ui-datepicker-next-hover")}}).bind("mouseover",function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");$(this).addClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).addClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).addClass("ui-datepicker-next-hover")}}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass("ui-datepicker-multi-"+cols).css("width",(width*cols)+"em")}else{inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("")}inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"&&inst==$.datepicker._curInst){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var dpWidth=inst.dpDiv.outerWidth();var dpHeight=inst.dpDiv.outerHeight();var inputWidth=inst.input?inst.input.outerWidth():0;var inputHeight=inst.input?inst.input.outerHeight():0;var viewWidth=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)+$(document).scrollLeft();var viewHeight=(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)+$(document).scrollTop();offset.left-=(this._get(inst,"isRTL")?(dpWidth-inputWidth):0);offset.left-=(isFixed&&offset.left==inst.input.offset().left)?$(document).scrollLeft():0;offset.top-=(isFixed&&offset.top==(inst.input.offset().top+inputHeight))?$(document).scrollTop():0;offset.left-=(offset.left+dpWidth>viewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0;offset.top-=(offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(offset.top+dpHeight+inputHeight*2-viewHeight):0;return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}if(inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return}this._adjustInstDate(inst,offset+(period=="M"?this._get(inst,"showCurrentAtPos"):0),period);this._updateDatepicker(inst)},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"gotoCurrent")&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear}else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear()}this._notifyChange(inst);this._adjustDate(target)},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return}var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst)}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst);var onSelect=this._get(inst,"onSelect");if(onSelect){onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst])}else{if(inst.input){inst.input.trigger("change")}}if(inst.inline){this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat")||this._get(inst,"dateFormat");var date=this._getDate(inst);dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDate<firstMon){checkDate.setDate(checkDate.getDate()-3);return $.datepicker.iso8601Week(checkDate)}else{if(checkDate>new Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)<firstDay-3){return 1}}}return Math.floor(((checkDate-firstMon)/86400000)/7)+1},parseDate:function(format,value,settings){if(format==null||value==null){throw"Invalid arguments"}value=(typeof value=="object"?value.toString():value+"");if(value==""){return null}var shortYearCutoff=(settings?settings.shortYearCutoff:null)||this._defaults.shortYearCutoff;var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var year=-1;var month=-1;var day=-1;var doy=-1;var literal=false;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var getNumber=function(match){lookAhead(match);var origSize=(match=="@"?14:(match=="y"?4:(match=="o"?3:2)));var size=origSize;var num=0;while(size>0&&iValue<value.length&&value.charAt(iValue)>="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j<names.length;j++){size=Math.max(size,names[j].length)}var name="";var iInit=iValue;while(size>0&&iValue<value.length){name+=value.charAt(iValue++);for(var i=0;i<names.length;i++){if(name==names[i]){return i+1}}size--}throw"Unknown name at position "+iInit};var checkLiteral=function(){if(value.charAt(iValue)!=format.charAt(iFormat)){throw"Unexpected literal at position "+iValue}iValue++};var iValue=0;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{checkLiteral()}}else{switch(format.charAt(iFormat)){case"d":day=getNumber("d");break;case"D":getName("D",dayNamesShort,dayNames);break;case"o":doy=getNumber("o");break;case"m":month=getNumber("m");break;case"M":month=getName("M",monthNamesShort,monthNames);break;case"y":year=getNumber("y");break;case"@":var date=new Date(getNumber("@"));year=date.getFullYear();month=date.getMonth()+1;day=date.getDate();break;case"'":if(lookAhead("'")){checkLiteral()}else{literal=true}break;default:checkLiteral()}}}if(year==-1){year=new Date().getFullYear()}else{if(year<100){year+=new Date().getFullYear()-new Date().getFullYear()%100+(year<=shortYearCutoff?0:-100)}}if(doy>-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var formatNumber=function(match,value,len){var num=""+value;if(lookAhead(match)){while(num.length<len){num="0"+num}}return num};var formatName=function(match,value,shortNames,longNames){return(lookAhead(match)?longNames[value]:shortNames[value])};var output="";var literal=false;if(date){for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{output+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":output+=formatNumber("d",date.getDate(),2);break;case"D":output+=formatName("D",date.getDay(),dayNamesShort,dayNames);break;case"o":var doy=date.getDate();for(var m=date.getMonth()-1;m>=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{chars+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":case"m":case"y":case"@":chars+="0123456789";break;case"D":case"M":return null;case"'":if(lookAhead("'")){chars+="'"}else{literal=true}break;default:chars+=format.charAt(iFormat)}}}return chars},_get:function(inst,name){return inst.settings[name]!==undefined?inst.settings[name]:this._defaults[name]},_setDateFromField:function(inst){var dateFormat=this._get(inst,"dateFormat");var dates=inst.input?inst.input.val():null;inst.endDay=inst.endMonth=inst.endYear=null;var date=defaultDate=this._getDefaultDate(inst);var settings=this._getFormatConfig(inst);try{date=this.parseDate(dateFormat,dates,settings)||defaultDate}catch(event){this.log(event);date=defaultDate}inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();inst.currentDay=(dates?date.getDate():0);inst.currentMonth=(dates?date.getMonth():0);inst.currentYear=(dates?date.getFullYear():0);this._adjustInstDate(inst)},_getDefaultDate:function(inst){var date=this._determineDate(this._get(inst,"defaultDate"),new Date());var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=="Invalid Date"?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return this._daylightSavingAdjust(date)},_daylightSavingAdjust:function(date){if(!date){return null}date.setHours(date.getHours()>12?date.getHours()+2:0);return date},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,"isRTL");var showButtonPanel=this._get(inst,"showButtonPanel");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate()));maxDraw=(minDate&&maxDraw<minDate?minDate:maxDraw);while(this._daylightSavingAdjust(new Date(drawYear,drawMonth,1))>maxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}inst.drawMonth=drawMonth;inst.drawYear=drawYear;var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#'+inst.id+"', -"+stepMonths+", 'M');\" title=\""+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"e":"w")+'">'+prevText+"</span></a>":(hideIfNoPrevNext?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"e":"w")+'">'+prevText+"</span></a>"));var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#'+inst.id+"', +"+stepMonths+", 'M');\" title=\""+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"w":"e")+'">'+nextText+"</span></a>":(hideIfNoPrevNext?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"w":"e")+'">'+nextText+"</span></a>"));var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls=(!inst.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery.datepicker._hideDatepicker();">'+this._get(inst,"closeText")+"</button>":"");var buttonPanel=(showButtonPanel)?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(isRTL?controls:"")+(this._isInRange(inst,gotoDate)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery.datepicker._gotoToday(\'#'+inst.id+"');\">"+currentText+"</button>":"")+(isRTL?"":controls)+"</div>":"";var firstDay=parseInt(this._get(inst,"firstDay"),10);firstDay=(isNaN(firstDay)?0:firstDay);var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var monthNamesShort=this._get(inst,"monthNamesShort");var beforeShowDay=this._get(inst,"beforeShowDay");var showOtherMonths=this._get(inst,"showOtherMonths");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var endDate=inst.endDay?this._daylightSavingAdjust(new Date(inst.endYear,inst.endMonth,inst.endDay)):currentDate;var defaultDate=this._getDefaultDate(inst);var html="";for(var row=0;row<numMonths[0];row++){var group="";for(var col=0;col<numMonths[1];col++){var selectedDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,inst.selectedDay));var cornerClass=" ui-corner-all";var calender="";if(isMultiMonth){calender+='<div class="ui-datepicker-group ui-datepicker-group-';switch(col){case 0:calender+="first";cornerClass=" ui-corner-"+(isRTL?"right":"left");break;case numMonths[1]-1:calender+="last";cornerClass=" ui-corner-"+(isRTL?"left":"right");break;default:calender+="middle";cornerClass="";break}calender+='">'}calender+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+cornerClass+'">'+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):"")+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):"")+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,monthNames,monthNamesShort)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var thead="";for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+="<th"+((dow+firstDay+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+dayNames[day]+'">'+dayNamesMin[day]+"</span></th>"}calender+=thead+"</tr></thead><tbody>";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow<numRows;dRow++){calender+="<tr>";var tbody="";for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDate<minDate)||(maxDate&&printDate>maxDate);tbody+='<td class="'+((dow+firstDay+6)%7>=5?" ui-datepicker-week-end":"")+(otherMonth?" ui-datepicker-other-month":"")+((printDate.getTime()==selectedDate.getTime()&&drawMonth==inst.selectedMonth&&inst._keyEvent)||(defaultDate.getTime()==printDate.getTime()&&defaultDate.getTime()==selectedDate.getTime())?" "+this._dayOverClass:"")+(unselectable?" "+this._unselectableClass+" ui-state-disabled":"")+(otherMonth&&!showOtherMonths?"":" "+daySettings[1]+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?"":" onclick=\"DP_jQuery.datepicker._selectDay('#"+inst.id+"',"+drawMonth+","+drawYear+', this);return false;"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():"&#xa0;"):(unselectable?'<span class="ui-state-default">'+printDate.getDate()+"</span>":'<a class="ui-state-default'+(printDate.getTime()==today.getTime()?" ui-state-highlight":"")+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" ui-state-active":"")+'" href="#">'+printDate.getDate()+"</a>"))+"</td>";printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate)}calender+=tbody+"</tr>"}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}calender+="</tbody></table>"+(isMultiMonth?"</div>"+((numMonths[0]>0&&col==numMonths[1]-1)?'<div class="ui-datepicker-row-break"></div>':""):"");group+=calender}html+=group}html+=buttonPanel+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");inst._keyEvent=false;return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,monthNames,monthNamesShort){minDate=(inst.rangeStart&&minDate&&selectedDate<minDate?selectedDate:minDate);var changeMonth=this._get(inst,"changeMonth");var changeYear=this._get(inst,"changeYear");var showMonthAfterYear=this._get(inst,"showMonthAfterYear");var html='<div class="ui-datepicker-title">';var monthHtml="";if(secondary||!changeMonth){monthHtml+='<span class="ui-datepicker-month">'+monthNames[drawMonth]+"</span> "}else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='<select class="ui-datepicker-month" onchange="DP_jQuery.datepicker._selectMonthYear(\'#'+inst.id+"', this, 'M');\" onclick=\"DP_jQuery.datepicker._clickMonthYear('#"+inst.id+"');\">";for(var month=0;month<12;month++){if((!inMinYear||month>=minDate.getMonth())&&(!inMaxYear||month<=maxDate.getMonth())){monthHtml+='<option value="'+month+'"'+(month==drawMonth?' selected="selected"':"")+">"+monthNamesShort[month]+"</option>"}}monthHtml+="</select>"}if(!showMonthAfterYear){html+=monthHtml+((secondary||changeMonth||changeYear)&&(!(changeMonth&&changeYear))?"&#xa0;":"")}if(secondary||!changeYear){html+='<span class="ui-datepicker-year">'+drawYear+"</span>"}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=drawYear+parseInt(years[0],10);endYear=drawYear+parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='<select class="ui-datepicker-year" onchange="DP_jQuery.datepicker._selectMonthYear(\'#'+inst.id+"', this, 'Y');\" onclick=\"DP_jQuery.datepicker._clickMonthYear('#"+inst.id+"');\">";for(;year<=endYear;year++){html+='<option value="'+year+'"'+(year==drawYear?' selected="selected"':"")+">"+year+"</option>"}html+="</select>"}if(showMonthAfterYear){html+=(secondary||changeMonth||changeYear?"&#xa0;":"")+monthHtml}html+="</div>";return html},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=this._daylightSavingAdjust(new Date(year,month,day));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}},_notifyChange:function(inst){var onChange=this._get(inst,"onChangeMonthYear");if(onChange){onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst])}},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1));if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:this._daylightSavingAdjust(new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay)));newMinDate=(newMinDate&&inst.rangeStart<newMinDate?inst.rangeStart:newMinDate);var minDate=newMinDate||this._getMinMaxDate(inst,"min");var maxDate=this._getMinMaxDate(inst,"max");return((!minDate||date>=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}if(options=="option"&&arguments.length==2&&typeof arguments[1]=="string"){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.7.2";window.DP_jQuery=$})(jQuery);;/*
 * jQuery UI Progressbar 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Progressbar
 *
 * Depends:
 *   ui.core.js
 */
(function(a){a.widget("ui.progressbar",{_init:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this._valueMin(),"aria-valuemax":this._valueMax(),"aria-valuenow":this._value()});this.valueDiv=a('<div class="ui-progressbar-value ui-widget-header ui-corner-left"></div>').appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow").removeData("progressbar").unbind(".progressbar");this.valueDiv.remove();a.widget.prototype.destroy.apply(this,arguments)},value:function(b){if(b===undefined){return this._value()}this._setData("value",b);return this},_setData:function(b,c){switch(b){case"value":this.options.value=c;this._refreshValue();this._trigger("change",null,{});break}a.widget.prototype._setData.apply(this,arguments)},_value:function(){var b=this.options.value;if(b<this._valueMin()){b=this._valueMin()}if(b>this._valueMax()){b=this._valueMax()}return b},_valueMin:function(){var b=0;return b},_valueMax:function(){var b=100;return b},_refreshValue:function(){var b=this.value();this.valueDiv[b==this._valueMax()?"addClass":"removeClass"]("ui-corner-right");this.valueDiv.width(b+"%");this.element.attr("aria-valuenow",b)}});a.extend(a.ui.progressbar,{version:"1.7.2",defaults:{value:0}})})(jQuery);;/*
 * jQuery UI Effects 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/
 */
jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(var f=0;f<h.length;f++){if(h[f]!==null){g.data("ec.storage."+h[f],g[0].style[h[f]])}}},restore:function(g,h){for(var f=0;f<h.length;f++){if(h[f]!==null){g.css(h[f],g.data("ec.storage."+h[f]))}}},setMode:function(f,g){if(g=="toggle"){g=f.is(":hidden")?"show":"hide"}return g},getBaseline:function(g,h){var i,f;switch(g[0]){case"top":i=0;break;case"middle":i=0.5;break;case"bottom":i=1;break;default:i=g[0]/h.height}switch(g[1]){case"left":f=0;break;case"center":f=0.5;break;case"right":f=1;break;default:f=g[1]/h.width}return{x:f,y:i}},createWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent()}var g={width:f.outerWidth(true),height:f.outerHeight(true),"float":f.css("float")};f.wrap('<div class="ui-effects-wrapper" style="font-size:100%;background:transparent;border:none;margin:0;padding:0"></div>');var j=f.parent();if(f.css("position")=="static"){j.css({position:"relative"});f.css({position:"relative"})}else{var i=f.css("top");if(isNaN(parseInt(i,10))){i="auto"}var h=f.css("left");if(isNaN(parseInt(h,10))){h="auto"}j.css({position:f.css("position"),top:i,left:h,zIndex:f.css("z-index")}).show();f.css({position:"relative",top:0,left:0})}j.css(g);return j},removeWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent().replaceWith(f)}return f},setTransition:function(g,i,f,h){h=h||{};d.each(i,function(k,j){unit=g.cssUnit(j);if(unit[0]>0){h[j]=unit[0]*f+unit[1]}});return h},animateClass:function(h,i,k,j){var f=(typeof k=="function"?k:(j?j:null));var g=(typeof k=="string"?k:null);return this.each(function(){var q={};var o=d(this);var p=o.attr("style")||"";if(typeof p=="object"){p=p.cssText}if(h.toggle){o.hasClass(h.toggle)?h.remove=h.toggle:h.add=h.toggle}var l=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.addClass(h.add)}if(h.remove){o.removeClass(h.remove)}var m=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.removeClass(h.add)}if(h.remove){o.addClass(h.remove)}for(var r in m){if(typeof m[r]!="function"&&m[r]&&r.indexOf("Moz")==-1&&r.indexOf("length")==-1&&m[r]!=l[r]&&(r.match(/color/i)||(!r.match(/color/i)&&!isNaN(parseInt(m[r],10))))&&(l.position!="static"||(l.position=="static"&&!r.match(/left|top|bottom|right/)))){q[r]=m[r]}}o.animate(q,i,g,function(){if(typeof d(this).attr("style")=="object"){d(this).attr("style")["cssText"]="";d(this).attr("style")["cssText"]=p}else{d(this).attr("style",p)}if(h.add){d(this).addClass(h.add)}if(h.remove){d(this).removeClass(h.remove)}if(f){f.apply(this,arguments)}})})}};function c(g,f){var i=g[1]&&g[1].constructor==Object?g[1]:{};if(f){i.mode=f}var h=g[1]&&g[1].constructor!=Object?g[1]:(i.duration?i.duration:g[2]);h=d.fx.off?0:typeof h==="number"?h:d.fx.speeds[h]||d.fx.speeds._default;var j=i.callback||(d.isFunction(g[1])&&g[1])||(d.isFunction(g[2])&&g[2])||(d.isFunction(g[3])&&g[3]);return[g[0],i,h,j]}d.fn.extend({_show:d.fn.show,_hide:d.fn.hide,__toggle:d.fn.toggle,_addClass:d.fn.addClass,_removeClass:d.fn.removeClass,_toggleClass:d.fn.toggleClass,effect:function(g,f,h,i){return d.effects[g]?d.effects[g].call(this,{method:g,options:f||{},duration:h,callback:i}):null},show:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._show.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"show"))}},hide:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._hide.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"hide"))}},toggle:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))||(d.isFunction(arguments[0])||typeof arguments[0]=="boolean")){return this.__toggle.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"toggle"))}},addClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{add:g},f,i,h]):this._addClass(g)},removeClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{remove:g},f,i,h]):this._removeClass(g)},toggleClass:function(g,f,i,h){return((typeof f!=="boolean")&&f)?d.effects.animateClass.apply(this,[{toggle:g},f,i,h]):this._toggleClass(g,f)},morph:function(f,h,g,j,i){return d.effects.animateClass.apply(this,[{add:h,remove:f},g,j,i])},switchClass:function(){return this.morph.apply(this,arguments)},cssUnit:function(f){var g=this.css(f),h=[];d.each(["em","px","%","pt"],function(j,k){if(g.indexOf(k)>0){h=[parseFloat(g),k]}});return h}});d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(g,f){d.fx.step[f]=function(h){if(h.state==0){h.start=e(h.elem,f);h.end=b(h.end)}h.elem.style[f]="rgb("+[Math.max(Math.min(parseInt((h.pos*(h.end[0]-h.start[0]))+h.start[0],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[1]-h.start[1]))+h.start[1],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[2]-h.start[2]))+h.start[2],10),255),0)].join(",")+")"}});function b(g){var f;if(g&&g.constructor==Array&&g.length==3){return g}if(f=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(g)){return[parseInt(f[1],10),parseInt(f[2],10),parseInt(f[3],10)]}if(f=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(g)){return[parseFloat(f[1])*2.55,parseFloat(f[2])*2.55,parseFloat(f[3])*2.55]}if(f=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(g)){return[parseInt(f[1],16),parseInt(f[2],16),parseInt(f[3],16)]}if(f=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(g)){return[parseInt(f[1]+f[1],16),parseInt(f[2]+f[2],16),parseInt(f[3]+f[3],16)]}if(f=/rgba\(0, 0, 0, 0\)/.exec(g)){return a.transparent}return a[d.trim(g).toLowerCase()]}function e(h,f){var g;do{g=d.curCSS(h,f);if(g!=""&&g!="transparent"||d.nodeName(h,"body")){break}f="backgroundColor"}while(h=h.parentNode);return b(g)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};d.easing.jswing=d.easing.swing;d.extend(d.easing,{def:"easeOutQuad",swing:function(g,h,f,j,i){return d.easing[d.easing.def](g,h,f,j,i)},easeInQuad:function(g,h,f,j,i){return j*(h/=i)*h+f},easeOutQuad:function(g,h,f,j,i){return -j*(h/=i)*(h-2)+f},easeInOutQuad:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h+f}return -j/2*((--h)*(h-2)-1)+f},easeInCubic:function(g,h,f,j,i){return j*(h/=i)*h*h+f},easeOutCubic:function(g,h,f,j,i){return j*((h=h/i-1)*h*h+1)+f},easeInOutCubic:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h+f}return j/2*((h-=2)*h*h+2)+f},easeInQuart:function(g,h,f,j,i){return j*(h/=i)*h*h*h+f},easeOutQuart:function(g,h,f,j,i){return -j*((h=h/i-1)*h*h*h-1)+f},easeInOutQuart:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h+f}return -j/2*((h-=2)*h*h*h-2)+f},easeInQuint:function(g,h,f,j,i){return j*(h/=i)*h*h*h*h+f},easeOutQuint:function(g,h,f,j,i){return j*((h=h/i-1)*h*h*h*h+1)+f},easeInOutQuint:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h*h+f}return j/2*((h-=2)*h*h*h*h+2)+f},easeInSine:function(g,h,f,j,i){return -j*Math.cos(h/i*(Math.PI/2))+j+f},easeOutSine:function(g,h,f,j,i){return j*Math.sin(h/i*(Math.PI/2))+f},easeInOutSine:function(g,h,f,j,i){return -j/2*(Math.cos(Math.PI*h/i)-1)+f},easeInExpo:function(g,h,f,j,i){return(h==0)?f:j*Math.pow(2,10*(h/i-1))+f},easeOutExpo:function(g,h,f,j,i){return(h==i)?f+j:j*(-Math.pow(2,-10*h/i)+1)+f},easeInOutExpo:function(g,h,f,j,i){if(h==0){return f}if(h==i){return f+j}if((h/=i/2)<1){return j/2*Math.pow(2,10*(h-1))+f}return j/2*(-Math.pow(2,-10*--h)+2)+f},easeInCirc:function(g,h,f,j,i){return -j*(Math.sqrt(1-(h/=i)*h)-1)+f},easeOutCirc:function(g,h,f,j,i){return j*Math.sqrt(1-(h=h/i-1)*h)+f},easeInOutCirc:function(g,h,f,j,i){if((h/=i/2)<1){return -j/2*(Math.sqrt(1-h*h)-1)+f}return j/2*(Math.sqrt(1-(h-=2)*h)+1)+f},easeInElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}return -(h*Math.pow(2,10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k))+f},easeOutElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}return h*Math.pow(2,-10*i)*Math.sin((i*l-j)*(2*Math.PI)/k)+m+f},easeInOutElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l/2)==2){return f+m}if(!k){k=l*(0.3*1.5)}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}if(i<1){return -0.5*(h*Math.pow(2,10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k))+f}return h*Math.pow(2,-10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k)*0.5+m+f},easeInBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}return k*(h/=j)*h*((i+1)*h-i)+f},easeOutBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}return k*((h=h/j-1)*h*((i+1)*h+i)+1)+f},easeInOutBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}if((h/=j/2)<1){return k/2*(h*h*(((i*=(1.525))+1)*h-i))+f}return k/2*((h-=2)*h*(((i*=(1.525))+1)*h+i)+2)+f},easeInBounce:function(g,h,f,j,i){return j-d.easing.easeOutBounce(g,i-h,0,j,i)+f},easeOutBounce:function(g,h,f,j,i){if((h/=i)<(1/2.75)){return j*(7.5625*h*h)+f}else{if(h<(2/2.75)){return j*(7.5625*(h-=(1.5/2.75))*h+0.75)+f}else{if(h<(2.5/2.75)){return j*(7.5625*(h-=(2.25/2.75))*h+0.9375)+f}else{return j*(7.5625*(h-=(2.625/2.75))*h+0.984375)+f}}}},easeInOutBounce:function(g,h,f,j,i){if(h<i/2){return d.easing.easeInBounce(g,h*2,0,j,i)*0.5+f}return d.easing.easeOutBounce(g,h*2-i,0,j,i)*0.5+j*0.5+f}})})(jQuery);;/*
 * jQuery UI Effects Blind 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Blind
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.blind=function(b){return this.queue(function(){var d=a(this),c=["position","top","left"];var h=a.effects.setMode(d,b.options.mode||"hide");var g=b.options.direction||"vertical";a.effects.save(d,c);d.show();var j=a.effects.createWrapper(d).css({overflow:"hidden"});var e=(g=="vertical")?"height":"width";var i=(g=="vertical")?j.height():j.width();if(h=="show"){j.css(e,0)}var f={};f[e]=h=="show"?i:0;j.animate(f,b.duration,b.options.easing,function(){if(h=="hide"){d.hide()}a.effects.restore(d,c);a.effects.removeWrapper(d);if(b.callback){b.callback.apply(d[0],arguments)}d.dequeue()})})}})(jQuery);;/*
 * jQuery UI Effects Bounce 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Bounce
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.bounce=function(b){return this.queue(function(){var e=a(this),l=["position","top","left"];var k=a.effects.setMode(e,b.options.mode||"effect");var n=b.options.direction||"up";var c=b.options.distance||20;var d=b.options.times||5;var g=b.duration||250;if(/show|hide/.test(k)){l.push("opacity")}a.effects.save(e,l);e.show();a.effects.createWrapper(e);var f=(n=="up"||n=="down")?"top":"left";var p=(n=="up"||n=="left")?"pos":"neg";var c=b.options.distance||(f=="top"?e.outerHeight({margin:true})/3:e.outerWidth({margin:true})/3);if(k=="show"){e.css("opacity",0).css(f,p=="pos"?-c:c)}if(k=="hide"){c=c/(d*2)}if(k!="hide"){d--}if(k=="show"){var h={opacity:1};h[f]=(p=="pos"?"+=":"-=")+c;e.animate(h,g/2,b.options.easing);c=c/2;d--}for(var j=0;j<d;j++){var o={},m={};o[f]=(p=="pos"?"-=":"+=")+c;m[f]=(p=="pos"?"+=":"-=")+c;e.animate(o,g/2,b.options.easing).animate(m,g/2,b.options.easing);c=(k=="hide")?c*2:c/2}if(k=="hide"){var h={opacity:0};h[f]=(p=="pos"?"-=":"+=")+c;e.animate(h,g/2,b.options.easing,function(){e.hide();a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}})}else{var o={},m={};o[f]=(p=="pos"?"-=":"+=")+c;m[f]=(p=="pos"?"+=":"-=")+c;e.animate(o,g/2,b.options.easing).animate(m,g/2,b.options.easing,function(){a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}})}e.queue("fx",function(){e.dequeue()});e.dequeue()})}})(jQuery);;/*
 * jQuery UI Effects Clip 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Clip
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.clip=function(b){return this.queue(function(){var f=a(this),j=["position","top","left","height","width"];var i=a.effects.setMode(f,b.options.mode||"hide");var k=b.options.direction||"vertical";a.effects.save(f,j);f.show();var c=a.effects.createWrapper(f).css({overflow:"hidden"});var e=f[0].tagName=="IMG"?c:f;var g={size:(k=="vertical")?"height":"width",position:(k=="vertical")?"top":"left"};var d=(k=="vertical")?e.height():e.width();if(i=="show"){e.css(g.size,0);e.css(g.position,d/2)}var h={};h[g.size]=i=="show"?d:0;h[g.position]=i=="show"?0:d/2;e.animate(h,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){f.hide()}a.effects.restore(f,j);a.effects.removeWrapper(f);if(b.callback){b.callback.apply(f[0],arguments)}f.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Drop 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Drop
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.drop=function(b){return this.queue(function(){var e=a(this),d=["position","top","left","opacity"];var i=a.effects.setMode(e,b.options.mode||"hide");var h=b.options.direction||"left";a.effects.save(e,d);e.show();a.effects.createWrapper(e);var f=(h=="up"||h=="down")?"top":"left";var c=(h=="up"||h=="left")?"pos":"neg";var j=b.options.distance||(f=="top"?e.outerHeight({margin:true})/2:e.outerWidth({margin:true})/2);if(i=="show"){e.css("opacity",0).css(f,c=="pos"?-j:j)}var g={opacity:i=="show"?1:0};g[f]=(i=="show"?(c=="pos"?"+=":"-="):(c=="pos"?"-=":"+="))+j;e.animate(g,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){e.hide()}a.effects.restore(e,d);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Explode 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Explode
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.explode=function(b){return this.queue(function(){var k=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;var e=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;b.options.mode=b.options.mode=="toggle"?(a(this).is(":visible")?"hide":"show"):b.options.mode;var h=a(this).show().css("visibility","hidden");var l=h.offset();l.top-=parseInt(h.css("marginTop"),10)||0;l.left-=parseInt(h.css("marginLeft"),10)||0;var g=h.outerWidth(true);var c=h.outerHeight(true);for(var f=0;f<k;f++){for(var d=0;d<e;d++){h.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-d*(g/e),top:-f*(c/k)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/e,height:c/k,left:l.left+d*(g/e)+(b.options.mode=="show"?(d-Math.floor(e/2))*(g/e):0),top:l.top+f*(c/k)+(b.options.mode=="show"?(f-Math.floor(k/2))*(c/k):0),opacity:b.options.mode=="show"?0:1}).animate({left:l.left+d*(g/e)+(b.options.mode=="show"?0:(d-Math.floor(e/2))*(g/e)),top:l.top+f*(c/k)+(b.options.mode=="show"?0:(f-Math.floor(k/2))*(c/k)),opacity:b.options.mode=="show"?1:0},b.duration||500)}}setTimeout(function(){b.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();if(b.callback){b.callback.apply(h[0])}h.dequeue();a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);;/*
 * jQuery UI Effects Fold 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Fold
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.fold=function(b){return this.queue(function(){var e=a(this),k=["position","top","left"];var h=a.effects.setMode(e,b.options.mode||"hide");var o=b.options.size||15;var n=!(!b.options.horizFirst);var g=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(e,k);e.show();var d=a.effects.createWrapper(e).css({overflow:"hidden"});var i=((h=="show")!=n);var f=i?["width","height"]:["height","width"];var c=i?[d.width(),d.height()]:[d.height(),d.width()];var j=/([0-9]+)%/.exec(o);if(j){o=parseInt(j[1],10)/100*c[h=="hide"?0:1]}if(h=="show"){d.css(n?{height:0,width:o}:{height:o,width:0})}var m={},l={};m[f[0]]=h=="show"?c[0]:o;l[f[1]]=h=="show"?c[1]:0;d.animate(m,g,b.options.easing).animate(l,g,b.options.easing,function(){if(h=="hide"){e.hide()}a.effects.restore(e,k);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(e[0],arguments)}e.dequeue()})})}})(jQuery);;/*
 * jQuery UI Effects Highlight 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Highlight
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.highlight=function(b){return this.queue(function(){var e=a(this),d=["backgroundImage","backgroundColor","opacity"];var h=a.effects.setMode(e,b.options.mode||"show");var c=b.options.color||"#ffff99";var g=e.css("backgroundColor");a.effects.save(e,d);e.show();e.css({backgroundImage:"none",backgroundColor:c});var f={backgroundColor:g};if(h=="hide"){f.opacity=0}e.animate(f,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(h=="hide"){e.hide()}a.effects.restore(e,d);if(h=="show"&&a.browser.msie){this.style.removeAttribute("filter")}if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Pulsate 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Pulsate
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.pulsate=function(b){return this.queue(function(){var d=a(this);var g=a.effects.setMode(d,b.options.mode||"show");var f=b.options.times||5;var e=b.duration?b.duration/2:a.fx.speeds._default/2;if(g=="hide"){f--}if(d.is(":hidden")){d.css("opacity",0);d.show();d.animate({opacity:1},e,b.options.easing);f=f-2}for(var c=0;c<f;c++){d.animate({opacity:0},e,b.options.easing).animate({opacity:1},e,b.options.easing)}if(g=="hide"){d.animate({opacity:0},e,b.options.easing,function(){d.hide();if(b.callback){b.callback.apply(this,arguments)}})}else{d.animate({opacity:0},e,b.options.easing).animate({opacity:1},e,b.options.easing,function(){if(b.callback){b.callback.apply(this,arguments)}})}d.queue("fx",function(){d.dequeue()});d.dequeue()})}})(jQuery);;/*
 * jQuery UI Effects Scale 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Scale
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.puff=function(b){return this.queue(function(){var f=a(this);var c=a.extend(true,{},b.options);var h=a.effects.setMode(f,b.options.mode||"hide");var g=parseInt(b.options.percent,10)||150;c.fade=true;var e={height:f.height(),width:f.width()};var d=g/100;f.from=(h=="hide")?e:{height:e.height*d,width:e.width*d};c.from=f.from;c.percent=(h=="hide")?g:100;c.mode=h;f.effect("scale",c,b.duration,b.callback);f.dequeue()})};a.effects.scale=function(b){return this.queue(function(){var g=a(this);var d=a.extend(true,{},b.options);var j=a.effects.setMode(g,b.options.mode||"effect");var h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:(j=="hide"?0:100));var i=b.options.direction||"both";var c=b.options.origin;if(j!="effect"){d.origin=c||["middle","center"];d.restore=true}var f={height:g.height(),width:g.width()};g.from=b.options.from||(j=="show"?{height:0,width:0}:f);var e={y:i!="horizontal"?(h/100):1,x:i!="vertical"?(h/100):1};g.to={height:f.height*e.y,width:f.width*e.x};if(b.options.fade){if(j=="show"){g.from.opacity=0;g.to.opacity=1}if(j=="hide"){g.from.opacity=1;g.to.opacity=0}}d.from=g.from;d.to=g.to;d.mode=j;g.effect("size",d,b.duration,b.callback);g.dequeue()})};a.effects.size=function(b){return this.queue(function(){var c=a(this),n=["position","top","left","width","height","overflow","opacity"];var m=["position","top","left","overflow","opacity"];var j=["width","height","overflow"];var p=["fontSize"];var k=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"];var f=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"];var g=a.effects.setMode(c,b.options.mode||"effect");var i=b.options.restore||false;var e=b.options.scale||"both";var o=b.options.origin;var d={height:c.height(),width:c.width()};c.from=b.options.from||d;c.to=b.options.to||d;if(o){var h=a.effects.getBaseline(o,d);c.from.top=(d.height-c.from.height)*h.y;c.from.left=(d.width-c.from.width)*h.x;c.to.top=(d.height-c.to.height)*h.y;c.to.left=(d.width-c.to.width)*h.x}var l={from:{y:c.from.height/d.height,x:c.from.width/d.width},to:{y:c.to.height/d.height,x:c.to.width/d.width}};if(e=="box"||e=="both"){if(l.from.y!=l.to.y){n=n.concat(k);c.from=a.effects.setTransition(c,k,l.from.y,c.from);c.to=a.effects.setTransition(c,k,l.to.y,c.to)}if(l.from.x!=l.to.x){n=n.concat(f);c.from=a.effects.setTransition(c,f,l.from.x,c.from);c.to=a.effects.setTransition(c,f,l.to.x,c.to)}}if(e=="content"||e=="both"){if(l.from.y!=l.to.y){n=n.concat(p);c.from=a.effects.setTransition(c,p,l.from.y,c.from);c.to=a.effects.setTransition(c,p,l.to.y,c.to)}}a.effects.save(c,i?n:m);c.show();a.effects.createWrapper(c);c.css("overflow","hidden").css(c.from);if(e=="content"||e=="both"){k=k.concat(["marginTop","marginBottom"]).concat(p);f=f.concat(["marginLeft","marginRight"]);j=n.concat(k).concat(f);c.find("*[width]").each(function(){child=a(this);if(i){a.effects.save(child,j)}var q={height:child.height(),width:child.width()};child.from={height:q.height*l.from.y,width:q.width*l.from.x};child.to={height:q.height*l.to.y,width:q.width*l.to.x};if(l.from.y!=l.to.y){child.from=a.effects.setTransition(child,k,l.from.y,child.from);child.to=a.effects.setTransition(child,k,l.to.y,child.to)}if(l.from.x!=l.to.x){child.from=a.effects.setTransition(child,f,l.from.x,child.from);child.to=a.effects.setTransition(child,f,l.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){if(i){a.effects.restore(child,j)}})})}c.animate(c.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(g=="hide"){c.hide()}a.effects.restore(c,i?n:m);a.effects.removeWrapper(c);if(b.callback){b.callback.apply(this,arguments)}c.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Shake 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Shake
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.shake=function(b){return this.queue(function(){var e=a(this),l=["position","top","left"];var k=a.effects.setMode(e,b.options.mode||"effect");var n=b.options.direction||"left";var c=b.options.distance||20;var d=b.options.times||3;var g=b.duration||b.options.duration||140;a.effects.save(e,l);e.show();a.effects.createWrapper(e);var f=(n=="up"||n=="down")?"top":"left";var p=(n=="up"||n=="left")?"pos":"neg";var h={},o={},m={};h[f]=(p=="pos"?"-=":"+=")+c;o[f]=(p=="pos"?"+=":"-=")+c*2;m[f]=(p=="pos"?"-=":"+=")+c*2;e.animate(h,g,b.options.easing);for(var j=1;j<d;j++){e.animate(o,g,b.options.easing).animate(m,g,b.options.easing)}e.animate(o,g,b.options.easing).animate(h,g/2,b.options.easing,function(){a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}});e.queue("fx",function(){e.dequeue()});e.dequeue()})}})(jQuery);;/*
 * jQuery UI Effects Slide 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Slide
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.slide=function(b){return this.queue(function(){var e=a(this),d=["position","top","left"];var i=a.effects.setMode(e,b.options.mode||"show");var h=b.options.direction||"left";a.effects.save(e,d);e.show();a.effects.createWrapper(e).css({overflow:"hidden"});var f=(h=="up"||h=="down")?"top":"left";var c=(h=="up"||h=="left")?"pos":"neg";var j=b.options.distance||(f=="top"?e.outerHeight({margin:true}):e.outerWidth({margin:true}));if(i=="show"){e.css(f,c=="pos"?-j:j)}var g={};g[f]=(i=="show"?(c=="pos"?"+=":"-="):(c=="pos"?"-=":"+="))+j;e.animate(g,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){e.hide()}a.effects.restore(e,d);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Transfer 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Transfer
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.transfer=function(b){return this.queue(function(){var f=a(this),h=a(b.options.to),e=h.offset(),g={top:e.top,left:e.left,height:h.innerHeight(),width:h.innerWidth()},d=f.offset(),c=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(b.options.className).css({top:d.top,left:d.left,height:f.innerHeight(),width:f.innerWidth(),position:"absolute"}).animate(g,b.duration,b.options.easing,function(){c.remove();(b.callback&&b.callback.apply(f[0],arguments));f.dequeue()})})}})(jQuery);;                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/javascripts/jquery.sheet.min.js                                               0000666 0000000 0000000 00000154527 12534142432 021746  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
jQuery.sheet() Spreadsheet with Calculations Plugin
Version: 1.01
http://code.google.com/p/jquerysheet/
		
Copyright (C) 2010 Robert Plummer
Dual licensed under the LGPL and GPL licenses.
http://www.gnu.org/licenses/
*/
jQuery.fn.extend({sheet:function(c){c=jQuery.extend({urlGet:"documentation.html",urlSave:"save.html",editable:true,urlMenu:"menu.html",newColumnWidth:120,title:null,inlineMenu:null,buildSheet:false,calcOff:false,log:false,lockFormulas:false,parent:this,colMargin:18,fnBefore:function(){},fnAfter:function(){},fnSave:function(){jS.saveSheet()},fnOpen:function(){var e=prompt("Paste your table html here");if(e){jS.openSheet(e)}},fnClose:function(){},joinedResizing:false,boxModelCorrection:2},c);jQuery.fn.sheet.settings=jS.s=c;jS.s.fnBefore();var d;if(jS.s.buildSheet){if(typeof(jS.s.buildSheet)=="object"){d=jS.s.buildSheet}else{if(jS.s.buildSheet==true||jS.s.buildSheet=="true"){d=jQuery(jQuery(this).html())}else{if(jS.s.buildSheet.match(/x/i)){d=jS.controlFactory.sheet(jS.s.buildSheet)}}}}jQuery(this).html("");jS.s.width=jQuery(this).width();jS.s.height=jQuery(this).height();if(jS.s.log){jQuery(jS.s.parent).after('<textarea id="'+jS.id.log+'" />')}else{jS.log=function(){}}if(!jQuery.scrollTo){jS.followMe=function(){}}jS.log("Startup");for(var a in cE.fn){var b=a.toLowerCase();if(b!=a){cE.fn[b]=cE.fn[a]}}jQuery(window).resize(function(){jS.s.width=jQuery(jS.s.parent).width();jS.s.height=jQuery(jS.s.parent).height();jS.sheetSyncSize()});jS.openSheet(d)}});var jS=jQuery.sheet={version:"1.01",i:0,sheetCount:0,s:{},obj:{parent:function(){return jQuery(jS.s.parent)},ui:function(){return jQuery("#"+jS.id.ui)},sheet:function(){return jQuery("#"+jS.id.sheet+jS.i)},sheetAll:function(){return jQuery("."+jS.cl.sheet)},barTop:function(){return jQuery("#"+jS.id.barTop+jS.i)},barTopAll:function(){return jQuery("."+jS.cl.barTop)},barTopParent:function(){return jQuery("#"+jS.id.barTopParent+jS.i)},barTopParentAll:function(){return jQuery("."+jS.cl.barTopParent)},barLeft:function(){return jQuery("#"+jS.id.barLeft+jS.i)},barLeftAll:function(){return jQuery("."+jS.cl.barLeft)},barLeftParent:function(){return jQuery("#"+jS.id.barLeftParent+jS.i)},barLeftParentAll:function(){return jQuery("."+jS.cl.barLeftParent)},barCorner:function(){return jQuery("#"+jS.id.barCorner+jS.i)},barCornerAll:function(){return jQuery("."+jS.cl.barCorner)},barCornerParent:function(){return jQuery("#"+jS.id.barCornerParent+jS.i)},barCornerParentAll:function(){return jQuery("."+jS.cl.barCornerParent)},barSelected:function(){return jQuery("."+jS.cl.barSelected)},cell:function(){return jQuery("."+jS.cl.cell)},controls:function(){return jQuery("#"+jS.id.controls)},formula:function(){return jQuery("#"+jS.id.formula)},label:function(){return jQuery("#"+jS.id.label)},fx:function(){return jQuery("#"+jS.id.fx)},pane:function(){return jQuery("#"+jS.id.pane+jS.i)},paneAll:function(){return jQuery("."+jS.cl.pane)},log:function(){return jQuery("#"+jS.id.log)},menu:function(){return jQuery("#"+jS.id.menu)},uiDefault:function(){return jQuery("."+jS.cl.uiDefault)},uiActive:function(){return jQuery("."+jS.cl.uiActive)},uiBase:function(){return jQuery("."+jS.cl.uiBase)},uiCell:function(){return jQuery("."+jS.cl.uiCell)},toggle:function(){return jQuery("."+jS.cl.toggle)},tableBody:function(){return document.getElementById(jS.id.sheet+jS.i)},tableControl:function(){return jQuery("#"+jS.id.tableControl+jS.i)},tableControlAll:function(){return jQuery("."+jS.cl.tableControl)},tab:function(){return jQuery("#"+jS.id.tab+jS.i)},tabAll:function(){return jQuery("."+jS.cl.tab)},tabContainer:function(){return jQuery("#"+jS.id.tabContainer)}},id:{sheet:"jSheet",ui:"jSheetUI",barTop:"jSheetBarTop",barTopParent:"jSheetBarTopParent",barLeft:"jSheetBarLeft",barLeftParent:"jSheetBarLeftParent",barCorner:"jSheetBarCorner",barCornerParent:"jSheetBarCornerParent",controls:"jSheetControls",formula:"jSheetControls_formula",label:"jSheetControls_loc",fx:"jSheetControls_fx",pane:"jSheetEditPane",log:"jSheetLog",menu:"jSheetMenu",tableControl:"tableControl",tab:"jSheetTab",tabContainer:"jSheetTabContainer"},cl:{sheet:"jSheet",barTop:"jSheetBarTop",barTopParent:"jSheetBarTopParent",barLeft:"jSheetBarLeft",barLeftParent:"jSheetBarLeftParent",barCorner:"jSheetBarCorner",barCornerParent:"jSheetBarCornerParent",pane:"jSheetEditPane",cell:"jSheetCellActive",barSelected:"jSheetBarItemSelected",uiDefault:"ui-state-default",uiActive:"ui-state-active",uiBase:"ui-widget-content",uiParent:"ui-widget-content ui-corner-all",uiSheet:"ui-widget-content",uiBar:"ui-widget-header",uiPane:"ui-widget-content",uiMenuUl:"ui-widget-header",uiMenuLi:"ui-widget-header",uiMenuHighlighted:"ui-state-highlight",uiControl:"ui-widget-header ui-corner-top",uiControlTextBox:"ui-widget-content",uiCell:"themeRoller_activeCell",uiCellHighlighted:"ui-state-highlight",tableControl:"tableControl",toggle:"cellStyleToggle",tab:"jSheetTab",barTopTd:"barTop",barLeftTd:"barLeft",sheetPaneTd:"sheetPane"},controlFactory:{addRowMulti:function(b){if(!b){b=prompt("How many rows would you like to add?")}if(b){for(var a=0;a<=b;a++){jS.controlFactory.addRow()}}jS.setTdIds()},addColumnMulti:function(b){if(!b){b=prompt("How many columns would you like to add?")}if(b){for(var a=0;a<=b;a++){jS.controlFactory.addColumn()}}jS.setTdIds()},addRow:function(g,f,c){if(!c){if(!g&&jS.rowLast>-1){c=":eq("+jS.rowLast+")"}else{if(!g||jS.cellLast.row<1){c=":last";g=false}else{if(g===true){c=":eq("+(jS.cellLast.row-1)+")"}else{c=":eq("+(g-1)+")"}}}}jS.evt.cellEditAbandon();var e=jS.obj.sheet().find("tr"+c);var d=e.clone();d.find("td").andSelf().height(jS.attrH.height(e.find("td:first"),true));jQuery(d).find("td").html("").attr("class","").removeAttr("formula").keydown(function(h){return jS.evt.formulaKeyDown(h,true)});if(f){d.insertBefore(e)}else{d.insertAfter(e)}var b=jS.obj.barLeft().find("div"+c);var a=b.clone();jS.themeRoller.newBar(a);a.html(parseInt(b.text())+1).removeClass(jS.cl.uiActive).height(jS.attrH.height(d));if(f){a.insertBefore(b)}else{a.insertAfter(b)}if(g||c){jS.obj.barLeft().find("div").each(function(h){jQuery(this).text(h+1)})}jS.setTdIds();jS.obj.pane().scroll()},addColumn:function(m,h,f){if(!f){if(!m&&jS.colLast>-1){m=":eq("+jS.colLast+")"}else{if(!m||jS.cellLast.col<1){m=":last"}else{if(m===true){m=":eq("+(jS.cellLast.col-1)+")"}else{m=":eq("+(m-1)+")"}}}}else{m=f}jS.evt.cellEditAbandon();var g=jS.obj.barTop().find("div"+m);var b=jS.obj.sheet().find("col"+m);var i=g.clone().width(jS.s.newColumnWidth-jS.attrH.boxModelCorrection());var c=b.clone().width(jS.s.newColumnWidth);var e=jQuery("<td></td>");var k=cE.columnLabelIndex(g.text());var a=cE.columnLabelString(k+1);jS.log("New Column: "+k+", "+a);if(h){b.before(c);g.before(i)}else{b.after(c);g.after(i)}var d=0;var l;if(h){l=function(j){jQuery(j).find("td"+m).before(e.clone())}}else{l=function(j){jQuery(j).find("td"+m).after(e.clone())}}jS.obj.sheet().find("tr").each(function(j){l(this);d++});if(m){jS.obj.barTop().find("div").each(function(j){jQuery(this).text(cE.columnLabelString(j+1))})}jS.attrH.syncSheetWidthFromTds();jS.setTdIds();jS.obj.pane().scroll()},barLeft:function(c,d){jS.obj.barLeft().remove();var a=jQuery('<div border="1px" id="'+jS.id.barLeft+jS.i+'" class="'+jS.id.barLeft+'" />').height("10000px");var b;if(c){b=function(e,f,g){g.height(parseInt(f.outerHeight())-jS.attrH.boxModelCorrection())}}else{b=function(e,f,g){g.height(parseInt(f.css("height").replace("px",""))-jS.attrH.boxModelCorrection())}}jS.evt.barMouseDown.height(a);d.find("tr").each(function(e){var f=jQuery("<div>"+(e+1)+"</div>");jQuery(a).append(f);b(e,jQuery(this),f)});a.appendTo(jS.obj.barLeftParent())},barTop:function(c,d){jS.obj.barTop().remove();var b=jQuery('<div id="'+jS.id.barTop+jS.i+'" class="'+jS.id.barTop+'" />').width("10000px");b.height(jS.s.colMargin);var a;var e;if(c){a=d.find("tr:first td");e=function(f){return jS.attrH.width(f)}}else{a=d.find("col");e=function(f){return parseInt(jQuery(f).css("width").replace("px",""))-jS.attrH.boxModelCorrection()}}jS.evt.barMouseDown.width(b);a.each(function(h){var g=cE.columnLabelString(h+1);var f=e(this);var j=jQuery("<div>"+g+"</div>").width(f).height(jS.s.colMargin);b.append(j)});jS.obj.barTopParent().append(b)},header:function(){jS.obj.controls().remove();jS.obj.tabContainer().remove();var e=jQuery('<div id="'+jS.id.controls+'"></div>');var c=jQuery('<table cellpadding="0" cellspacing="0" border="0"><tr /></table>').prependTo(e);var b=jQuery("<tr />");if(jS.s.title){b.append(jQuery('<td style="width: auto;text-align: center;" />').html(jS.s.title))}if(jS.s.inlineMenu&&jS.s.editable){b.append(jQuery('<td style="text-align: center;" />').html(jS.s.inlineMenu))}if(jS.s.editable){if(jQuery.mbMenu){jQuery("<div />").load(jS.s.urlMenu,function(f){jQuery('<td style="width: 50px; text-align: center;" id="'+jS.id.menu+'" class="rootVoices ui-corner-tl" />').html(f).prependTo(b).buildMenu({menuWidth:100,openOnRight:false,containment:jS.s.parent.id,hasImages:false,fadeInTime:0,fadeOutTime:0,adjustLeft:2,minZindex:"auto",adjustTop:10,opacity:0.95,shadow:false,closeOnMouseOut:true,closeAfter:1000}).hover(function(){jQuery(this).addClass("ui-state-highlight")},function(){jQuery(this).removeClass("ui-state-highlight")})}).hover(function(){jQuery(this).addClass("ui-state-highlight")},function(){})}var a=jQuery('<table cellpadding="0" cellspacing="0" border="0"><tr><td style="width: 35px; text-align: right;" id="'+jS.id.label+'"></td><td style="width: 10px;" id="'+jS.id.fx+'">fx</td><td><textarea id="'+jS.id.formula+'"></textarea></td></tr></table>').appendTo(e);a.keydown(function(f){return jS.evt.formulaKeyDown(f)})}b.appendTo(c);var d=jQuery('<div id="'+jS.id.tabContainer+'">'+(jS.s.editable?'<span class="ui-widget-header ui-corner-bottom" title="Add a spreadsheet" i="-1">+</span>':"<span />")+"</div>").mousedown(jS.evt.tabOnMouseDown);jS.obj.parent().html("").append(e).append('<div id="'+jS.id.ui+'" class="'+jS.id.ui+'">').after(d)},sheet:function(j){if(!j){j=jS.s.buildSheet}j=j.toLowerCase().split("x");var b=parseInt(j[0]);var e=parseInt(j[1]);var h=jQuery('<table border="1px" class="'+jS.cl.sheet+'" id="'+jS.id.sheet+jS.i+'"></table>');var a="<td> </td>";var c="";for(var d=b;d>=1;d--){c+=a}var g='<tr height="'+jS.s.colMargin+'" style="height: '+jS.s.colMarg+';">'+c+"</tr>";var f="";for(var d=e;d>=1;d--){f+=g}h.html("<tbody>"+f+"</tbody>");h.width(b*jS.s.newColumnWidth);return h},sheetUI:function(d,b,c,e){if(!b){jQuery(".tableControl").remove();jS.sheetCount=0;jS.i=0}else{jS.sheetCount++;jS.i=jS.sheetCount;b=jS.i}var a=jS.controlFactory.table(true).appendTo(jS.obj.ui());jS.obj.pane().html(d);jS.tuneTableForSheetUse(d);jS.sheetDecorate(d);jS.controlFactory.barTop(e,d);jS.controlFactory.barLeft(e,d);jS.sheetTab(true);if(jS.s.editable){d.mousedown(jS.evt.cellOnMouseDown).click(jS.s.lockFormulas?jS.evt.cellOnClickLocked:jS.evt.cellOnClickReg)}jS.themeRoller.start(b);jS.setTdIds(d);jS.evt.scrollBars();jS.addTab();if(c){c()}jS.log("Sheet Initialized");jS.s.fnAfter();return a},table:function(){return jQuery('<table cellpadding="0" cellspacing="0" border="0" id="'+jS.id.tableControl+jS.i+'" class="'+jS.cl.tableControl+' ui-corner-bottom"><tbody><tr><td id="'+jS.id.barCornerParent+jS.i+'" class="'+jS.cl.barCornerParent+'"><div style="height: '+jS.s.colMargin+"; width: "+jS.s.colMargin+';" id="'+jS.id.barCorner+jS.i+'" class="'+jS.cl.barCorner+'" onClick="jS.cellSetActiveAll();" title="Select All">&nbsp;</div></td><td class="'+jS.cl.barTopTd+'"><div id="'+jS.id.barTopParent+jS.i+'" class="'+jS.cl.barTopParent+'"></div></td></tr><tr><td class="'+jS.cl.barLeftTd+'"><div style="width: '+jS.s.colMargin+';" id="'+jS.id.barLeftParent+jS.i+'" class="'+jS.cl.barLeftParent+'"></div></td><td class="'+jS.cl.sheetPaneTd+'"><div id="'+jS.id.pane+jS.i+'" class="'+jS.cl.pane+'"></div></td></tr></tbody></table>')},chart:function(e,b,g,j,i,c,k){if(jGCharts){var d=new jGCharts.Api();function f(h){var l=new Array();jQuery(h).each(function(m){l[m]=jS.manageHtmlToText(h[m]+"")});return l}var a={};if(e){a.type=e}if(b){b=b.filter(function(h){return(h?h:0)});a.data=b}if(g){a.legend=f(g)}if(j){a.axis_labels=f(j)}if(i||c){a.size=i+"x"+c}return jS.controlFactory.safeImg(d.make(a),k)}else{return jQuery("<div>Charts are not enabled</div>")}},safeImg:function(b,a){return jQuery("<img />").hide().load(function(){jQuery(this).fadeIn(function(){jQuery(this).addClass("safeImg");jS.attrH.setHeight(parseInt(a),"cell",false)})}).attr("src",b)}},sizeSync:{},evt:{keyDownHandler:{enterOnTextArea:function(a){if(!a.shiftKey){return jS.evt.cellClick(key.DOWN)}else{return true}},enter:function(a){if(!jS.cellLast.isEdit&&!a.ctrlKey){return jS.evt.cellClick()}else{return jS.evt.cellClick(key.DOWN)}},tab:function(a){if(a.shiftKey){return jS.evt.cellClick(key.LEFT)}else{return jS.evt.cellClick(key.RIGHT)}},textAreaKeyDown:function(a){switch(a.keyCode){case key.ENTER:return jS.evt.keyDownHandler.enterOnTextArea(a);break;case key.TAB:return jS.evt.keyDownHandler.tab(a);break}},formulaKeyDown:function(a){switch(a.keyCode){case key.ESCAPE:jS.evt.cellEditAbandon();break;case key.TAB:return jS.evt.keyDownHandler.tab(a);break;case key.ENTER:return jS.evt.keyDownHandler.enter(a);break;case key.LEFT:case key.UP:case key.RIGHT:case key.DOWN:return jS.evt.cellClick(a.keyCode);break;default:jS.cellLast.isEdit=true}}},formulaKeyDown:function(b,a){return(a?jS.evt.keyDownHandler.textAreaKeyDown(b):jS.evt.keyDownHandler.formulaKeyDown(b))},cellEditDone:function(h){switch(jS.cellLast.isEdit){case true:var e=jS.cellLast.td;var m=false;if(e&&e.hasClass(jS.cl.cell)){var q=jS.cellTextArea(e,true);var p=false;var j=false;var b=false;var a=false;var o=false;var i=false;var d=false;var l=false;var k=false;var n=false;var g=e.attr("formula");var f=e.attr("prevVal");if(q){if(q.charAt(0)=="="){if(q!=g){a=true;jS.log("edit, new formula, possibly had formula")}else{if(g){p=true;jS.log("no edit, has formula")}else{jS.log("no edit, has formula, unknown action")}}}else{if(g){i=true;jS.log("edit, new value, had formula")}else{if(!isNaN(parseInt(q))){if((q!=f&&q!=jS.obj.formula().val())||(e.text()!=q)){k=true;jS.log("edit, from number to number, possibly in function")}else{j=true;jS.log("no edit, is a number")}}else{d=true;jS.log("possible edit from textarea, has value")}}}}else{if(e.html().length>0&&g){o=true;jS.log("edit, null value from formula")}else{if(e.html().length>0&&g){l=true;jS.log("edit, null value from formula")}else{b=true;jS.log("no edit, null value")}}}e.removeAttr("prevVal");var c=jS.manageTextToHtml(q);if(p){e.html(f)}else{if(a){m=true;e.attr("formula",q.replace(/\n/g," ")).html("")}else{if(o){m=true;e.removeAttr("formula").html(c)}else{if(i){m=true;e.removeAttr("formula").html(c)}else{if(d){e.html(c)}else{if(j){e.html(c)}else{if(b){e.html(c)}else{if(k){m=true;e.html(c)}else{if(l){m=true;e.removeAttr("formula").html("")}}}}}}}}}if(m){jS.calc(jS.i)}if(h!=false){jS.sheetClearActive()}jS.attrH.setHeight(jS.cellLast.row,"cell");jS.obj.formula().focus().select();jS.cellLast.isEdit=false}break;default:jS.attrH.setHeight(jS.cellLast.row,"cell",false);jS.sheetClearActive()}},cellEditAbandon:function(b){jS.themeRoller.clearCell();jS.themeRoller.clearBar();if(!b){var a=jS.cellTextArea(jS.cellLast.td,true);if(a){jS.cellLast.td.html(jS.manageTextToHtml(a));jS.sheetClearActive();if(a.charAt(0)=="="){jS.calc(jS.i)}}else{jS.sheetClearActive();jS.calc(jS.i)}}jS.cellLast.td=jS.obj.sheet().find("td:first");jS.cellLast.row=jS.cellLast.col=0;0;jS.rowLast=jS.colLast=-1;jS.fxUpdate("",true);return false},cellClick:function(c){var b=0;var a=0;switch(c){case key.UP:a--;break;case key.DOWN:a++;break;case key.LEFT:b--;break;case key.RIGHT:b++;break}jQuery(jS.getTd(jS.i,jS.cellLast.row+a,jS.cellLast.col+b)).click();return false},cellOnMouseDown:function(a){if(a.altKey){jS.cellSetActiveMulti(a);jQuery(document).mouseup(function(){jQuery(this).unbind("mouseup");var b=jS.obj.formula().val();jS.obj.formula().val(b+jS.getTdRange())})}else{return jS.cellSetActiveMulti(a)}},cellOnClickLocked:function(a){if(!isNaN(a.target.cellIndex)){if(!jQuery(a.target).attr("formula")){jS.evt.cellOnClickManage(jQuery(a.target))}}else{jS.evt.cellEditAbandon();jS.obj.formula().focus().select()}},cellOnClickReg:function(b){if(!isNaN(b.target.cellIndex)){jS.evt.cellOnClickManage(jQuery(b.target))}else{var a=jQuery(b.target).hasClass("clickable");if(!a){jS.obj.formula().focus().select()}else{}}},cellOnClickManage:function(a){if(!a.hasClass(jS.cl.cell)){jS.cellEdit(a);jS.log("click cell")}else{jS.cellLast.isEdit=jS.isSheetEdit=true;jS.cellTextArea(a,false,true);jS.themeRoller.cell(a);jS.log("click, textarea over table activated")}jS.followMe(a)},tabOnMouseDown:function(b){var a=jQuery(b.target).attr("i");if(a!="-1"&&a!=jS.i){jS.setActiveSheet(jQuery("#"+jS.id.tableControl+a),a);jS.calc(a)}else{if(a!="-1"&&jS.i==a){jS.sheetTab()}else{jS.addSheet()}}return false},resizeBar:function(c,d){var b=jQuery(c.target);var a={start:function(f){jS.log("start resize");d.offset=b.offset();d.tdPageXY=[d.offset.left,d.offset.top][d.xyDimension];d.startXY=[f.pageX,f.pageY][d.xyDimension];d.i=d.getIndex(b);d.srcBarSize=d.getSize(b);d.edgeDelta=d.startXY-(d.tdPageXY+d.srcBarSize);d.min=10;if(jS.s.joinedResizing){d.resizeFn=function(e){d.setDesinationSize(e);d.setSize(b,e)}}else{d.resizeFn=function(e){d.setSize(b,e)}}if(Math.abs(d.edgeDelta)<=d.min){jQuery(f.target).parent().css("cursor",d.cursor);jQuery(document).mousemove(a.drag).mouseup(a.stop);return true}else{return false}},drag:function(h){var g=d.min;var f=d.srcBarSize+([h.pageX,h.pageY][d.xyDimension]-d.startXY);if(f>0){g=Math.max(f,d.min)}d.resizeFn(g);return false},stop:function(f){d.setDesinationSize(d.getSize(b));jQuery(document).unbind("mousemove").unbind("mouseup");jS.obj.formula().focus().select();b.parent().css("cursor","pointer");jS.log("stop resizing")}};return a.start(c)},scrollBars:function(a){var b={pane:jS.obj.pane(),barLeft:jS.obj.barLeftParent(),barTop:jS.obj.barTopParent()};jS.obj.pane().scroll(function(){b.barTop.scrollLeft(b.pane.scrollLeft());b.barLeft.scrollTop(b.pane.scrollTop())})},barMouseDown:{select:function(c,b,f,a){var d=jS.evt.resizeBar(b,a);if(!d){f(b.target);c.unbind("mouseover").mouseover(function(g){f(g.target,true)}).mouseup(function(){c.unbind("mouseover").unbind("mouseup")})}return false},first:0,last:0,height:function(b){var a=function(){};b.unbind("mousedown").mousedown(function(c){jS.evt.barMouseDown.first=jS.evt.barMouseDown.last=jS.rowLast=jS.getBarLeftIndex(c.target);jS.evt.barMouseDown.select(b,c,a,jS.rowResizer);return false});if(jS.s.editable){a=function(e,c){if(!c){jS.themeRoller.clearCell();jS.themeRoller.clearBar()}var d=jS.getBarLeftIndex(e);jS.rowLast=d;jS.evt.barMouseDown.last=(d>jS.evt.barMouseDown.last?d:jS.evt.barMouseDown.last);jS.fxUpdate((jS.evt.barMouseDown.first+1)+":"+(jS.evt.barMouseDown.last+1),true);jS.cellSetActiveMultiRow(jS.evt.barMouseDown.last)}}},width:function(b){var a=function(){};b.unbind("mousedown").mousedown(function(c){jS.evt.barMouseDown.first=jS.evt.barMouseDown.last=jS.colLast=jS.getBarTopIndex(c.target);jS.evt.barMouseDown.select(b,c,a,jS.columnResizer);return false});if(jS.s.editable){a=function(e,c){if(!c){jS.themeRoller.clearCell();jS.themeRoller.clearBar()}var d=jS.getBarTopIndex(e);jS.colLast=d;jS.evt.barMouseDown.last=(d>jS.evt.barMouseDown.last?d:jS.evt.barMouseDown.last);jS.fxUpdate(cE.columnLabelString(jS.evt.barMouseDown.first+1)+":"+cE.columnLabelString(jS.evt.barMouseDown.last+1),true);jS.cellSetActiveMultiColumn(jS.evt.barMouseDown.last)}}}}},tuneTableForSheetUse:function(a){a.addClass(jS.cl.sheet).attr("id",jS.id.sheet+jS.i).attr("border","1px");a.find("."+jS.cl.uiCell).removeClass(jS.cl.uiCell);a.find("td").css("background-color","").css("color","").css("height","").attr("height","")},attrH:{width:function(b,a){return jQuery(b).outerWidth()-jS.attrH.boxModelCorrection(a)},widthReverse:function(b,a){return jQuery(b).outerWidth()+jS.attrH.boxModelCorrection(a)},height:function(b,a){return jQuery(b).outerHeight()-jS.attrH.boxModelCorrection(a)},heightReverse:function(b,a){return jQuery(b).outerHeight()+jS.attrH.boxModelCorrection(a)},syncSheetWidthFromTds:function(b){var a=0;b=(b?b:jS.obj.sheet());b.find("tr:first").find("td").each(function(){a+=jQuery(this).width()});b.width(a)},boxModelCorrection:function(b){var a=0;if(jQuery.support.boxModel&&!b){a=jS.s.boxModelCorrection}return a},setHeight:function(b,g,e,f){var a=0;var d=0;var c;switch(g){case"cell":f=(f?f:jS.obj.barLeft().find("div").eq(b));d=jS.attrH.height(jQuery(jS.getTd(jS.i,b,0)).parent().andSelf(),e);break;case"bar":f=(f?f:jQuery(jS.getTd(jS.i,b,0)).parent().andSelf());d=jS.attrH.heightReverse(jS.obj.barLeft().find("div").eq(b),e);break}if(d){jQuery(f).height(d).css("height",d).attr("height",d)}return f}},setTdIds:function(a){a=(a?a:jS.obj.sheet());a.find("tr").each(function(b){jQuery(this).find("td").each(function(c){jQuery(this).attr("id",jS.getTdId(jS.i,b,c))})})},setControlIds:function(){var a=function(b,c){b.each(function(d){jQuery(this).attr("id",c+d)})};a(jS.obj.sheetAll().each(function(){jS.setTdIds(jQuery(this))}),jS.id.sheet);a(jS.obj.barTopAll(),jS.id.barTop);a(jS.obj.barTopParentAll(),jS.id.barTopParent);a(jS.obj.barLeftAll(),jS.id.barLeft);a(jS.obj.barLeftParentAll(),jS.id.barLeftParent);a(jS.obj.barCornerAll(),jS.id.barCorner);a(jS.obj.barCornerParentAll(),jS.id.barCornerParent);a(jS.obj.tableControlAll(),jS.id.tableControl);a(jS.obj.paneAll(),jS.id.pane);a(jS.obj.tabAll().each(function(b){jQuery(this).attr("i",b)}),jS.id.tab)},columnResizer:{xyDimension:0,getIndex:function(a){return jS.getBarTopIndex(a)},getSize:function(a){return jS.attrH.width(a,true)},setSize:function(b,a){b.width(a)},setDesinationSize:function(a){jS.sheetSyncSizeToDivs();jS.obj.sheet().find("col").eq(this.i).width(a).css("width",a).attr("width",a);jS.obj.pane().scroll()},cursor:"w-resize"},rowResizer:{xyDimension:1,getIndex:function(a){return jS.getBarLeftIndex(a)},getSize:function(a){return jS.attrH.height(a,true)},setSize:function(b,a){if(a){b.height(a).css("height",a).attr("height",a)}return jS.attrH.height(b)},setDesinationSize:function(){jS.attrH.setHeight(this.i,"bar",true);jS.attrH.setHeight(this.i,"cell",false);jS.obj.pane().scroll()},cursor:"s-resize"},toggleHide:{row:function(a){if(!a){a=jS.obj.cell().parent().attr("rowIndex")}if(a){var b=jS.obj.barLeft().find("div").eq(a);if(b.is(":visible")){b.hide();jS.obj.sheet().find("tr").eq(a).hide()}else{b.show();jS.obj.sheet().find("tr").eq(a).show()}}else{alert("No row selected.")}},rowAll:function(){jS.obj.sheet().find("tr").show();jS.obj.barLeft().find("div").show()},column:function(a){if(!a){a=jS.obj.cell().attr("cellIndex")}if(a){var b=jS.obj.barTop().find("div").eq(a);if(b.is(":visible")){jS.obj.sheet().find("tbody tr").each(function(){jQuery(this).find("td").eq(a).hide()});b.hide();jS.obj.sheet().find("colgroup col").eq(a).hide();jS.toggleHide.columnSizeManage()}}else{alert("Now column selected.")}},columnAll:function(){},columnSizeManage:function(){var a=jS.obj.barTop().width();var b=0;var b=0;jS.obj.barTop().find("div").each(function(){var c=jQuery(this);if(c.is(":hidden")){b+=c.width()}});jS.obj.barTop().width(a);jS.obj.sheet().width(a)}},addTab:function(){jQuery('<span class="ui-corner-bottom ui-widget-header"><a class="'+jS.cl.tab+'" id="'+jS.id.tab+jS.i+'" i="'+jS.i+'">'+jS.sheetTab(true)+"</a></span>").insertBefore(jS.obj.tabContainer().find("span:last"))},sheetDecorate:function(a){jS.formatSheet(a);jS.sheetSyncSizeToCols(a);jS.sheetDecorateRemove()},formatSheet:function(b){if(b.find("tbody").length<1){b.wrapInner("<tbody />")}if(b.find("colgroup").length<1||b.find("col").length<1){b.remove("colgroup");var a=jQuery("<colgroup />");b.find("tr:first").find("td").each(function(){jQuery("<col />").width(jS.s.newColumnWidth).css("width",jS.s.newColumnWidth+"px").attr("width",jS.s.newColumnWidth+"px").appendTo(a)});b.find("tr").each(function(){jQuery(this).height(jS.s.colMargin).css("height",jS.s.colMargin+"px").attr("height",jS.s.colMargin+"px")});a.prependTo(b)}},themeRoller:{start:function(){jS.obj.parent().addClass(jS.cl.uiParent);jS.obj.sheet().addClass(jS.cl.uiSheet);jS.obj.barLeft().find("div").addClass(jS.cl.uiBar);jS.obj.barTop().find("div").addClass(jS.cl.uiBar);jS.obj.barCornerParent().addClass(jS.cl.uiBar);jS.obj.controls().addClass(jS.cl.uiControl);jS.obj.fx().addClass(jS.cl.uiControl);jS.obj.label().addClass(jS.cl.uiControl);jS.obj.formula().addClass(jS.cl.uiControlTextBox)},cell:function(a){jS.themeRoller.clearCell();if(a){jQuery(a).addClass(jS.cl.uiCellHighlighted).addClass(jS.cl.uiCell)}},clearCell:function(){jS.obj.uiActive().removeClass(jS.cl.uiActive);jS.obj.uiCell().removeAttr("style").removeClass(jS.cl.uiCellHighlighted).removeClass(jS.cl.uiCell)},newBar:function(a){jQuery(a).addClass(jS.cl.uiBar)},barTop:function(a){jS.obj.barTop().find("div").eq(a).addClass(jS.cl.uiActive)},barLeft:function(a){jS.obj.barLeft().find("div").eq(a).addClass(jS.cl.uiActive)},barObj:function(a){jQuery(a).addClass(jS.cl.uiActive)},clearBar:function(){jS.obj.barTop().find("."+jS.cl.uiActive).removeClass(jS.cl.uiActive);jS.obj.barLeft().find("."+jS.cl.uiActive).removeClass(jS.cl.uiActive)},resize:function(){if(jQuery.ui){var f;var e;var b;var c;var d=jQuery(jS.s.parent);d.resizable("destroy").resizable({minWidth:jS.s.width*0.5,minHeight:jS.s.height*0.5,ghost:true,stop:function(){jS.s.width=d.width();jS.s.height=d.height();jS.sheetSyncSize()}});var a=jQuery("<span />");jS.obj.formula().wrap(a).parent().resizable({minHeight:jS.obj.formula().height(),maxHeight:78,handles:"s",resize:function(h,g){jS.obj.formula().height(g.size.height);jS.sheetSyncSize()}})}}},manageHtmlToText:function(a){a=jQuery.trim(a);if(a.charAt(0)!="="){a=a.replace(/&nbsp;/g," ").replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/\t/g,"").replace(/\n/g,"").replace(/<br>/g,"\r").replace(/<BR>/g,"\n")}return a},manageTextToHtml:function(a){a=jQuery.trim(a);if(a.charAt(0)!="="){a=a.replace(/\t/g,"&nbsp;&nbsp;&nbsp;&nbsp;").replace(/ /g,"&nbsp;").replace(/>/g,"&gt;").replace(/</g,"&lt;").replace(/\n/g,"<br>").replace(/\r/g,"<br>")}return a},sheetDecorateRemove:function(b){var a=(b?jS.obj.sheetAll().clone():jS.obj.sheetAll());jQuery(a).find("."+jS.cl.cell).removeClass(jS.cl.cell);jQuery(a).find("."+jS.cl.uiCellHighlighted).removeClass(jS.cl.uiCellHighlighted);jQuery(a).find("."+jS.cl.uiCell).removeClass(jS.cl.uiCell);jQuery(a).find("col").each(function(d){var c=jQuery(this).css("width");c=((c+"").match("px")?c:c+"px");jQuery(a).find("col").eq(d).attr("width",c)});return a},fxUpdate:function(b,a){if(!a){jS.obj.label().html(cE.columnLabelString(b[1]+1)+(b[0]+1))}else{jS.obj.label().html(b)}},cellEdit:function(c){jS.evt.cellEditDone();var b=jS.getTdLocation(c);jS.fxUpdate(b);var a=c.attr("formula");if(!a){a=jS.manageHtmlToText(c.html())}jS.obj.formula().val(a).focus().select();jS.cellSetActive(c,b)},cellSetActive:function(b,a){jS.cellLast.td=b;jS.cellLast.row=jS.rowLast=a[0];jS.cellLast.col=jS.colLast=a[1];jS.themeRoller.cell(b);jS.themeRoller.barLeft(jS.cellLast.row);jS.themeRoller.barTop(jS.cellLast.col);b.addClass(jS.cl.cell);jS.obj.barLeft().find("div").eq(jS.cellLast.row).addClass(jS.cl.barSelected);jS.obj.barTop().find("div").eq(jS.cellLast.col).addClass(jS.cl.barSelected)},colLast:-1,rowLast:-1,cellLast:{td:null,row:null,col:null,isEdit:false},cellStyleToggle:function(b,a){if(a){a=a.split(",");jQuery(a).each(function(){jS.obj.uiCell().removeClass(this)})}if(jS.obj.uiCell().hasClass(b)){jS.obj.uiCell().removeClass(b)}else{jS.obj.uiCell().addClass(b)}jS.obj.formula().focus().select();return false},context:{},calc:function(b,a){jS.log("Calculation Started");if(!jS.s.calcOff){cE.calc(new jS.tableCellProvider(b),jS.context,a);jS.isSheetEdit=false}jS.log("Calculation Ended")},cellTextArea:function(i,d,a,e){var b;if(i){if(!a){var g=i.find("textarea");var f=g.val();if(f||jS.obj.formula().attr("disabled")){jS.log("Textarea value used");b=f;g.remove()}else{jS.log("Formula value used");b=jS.obj.formula().val()}jS.obj.formula().removeAttr("disabled")}else{if(e){b=e}else{b=jS.obj.formula().val()}jS.obj.formula().attr("disabled","true");var g=jQuery('<textarea id="tempText" class="clickable" />');var c=jS.attrH.height(i);i.parent().height(c+jS.attrH.boxModelCorrection());g.height(c<75?75:c).val(b).click(function(){return false}).keydown(function(h){return jS.evt.formulaKeyDown(h,true)});if(i.attr("formula")){i.attr("prevVal",i.text()).removeAttr("formula")}i.html(g);g.focus().select()}if(d){return b}}},refreshLabelsColumns:function(){var a=0;jS.obj.barTop().find("div").each(function(b){jQuery(this).text(cE.columnLabelString(b+1));a+=jQuery(this).width()});return a},refreshLabelsRows:function(){jS.obj.barLeft().find("div").each(function(a){jQuery(this).text((a+1))})},addSheet:function(a){a=(a?a:prompt(jS.newSheetDialog));if(a){jS.evt.cellEditAbandon();jS.setDirty(true);var b=jS.controlFactory.sheetUI(jS.controlFactory.sheet(a),jS.sheetCount+1,function(){jS.setActiveSheet(b,jS.sheetCount+1)},true)}},deleteSheet:function(){jS.obj.tableControl().remove();jS.obj.tabContainer().children().eq(jS.i).remove();jS.i=0;jS.sheetCount--;jS.setControlIds();jS.setActiveSheet(jS.obj.tableControl(),jS.i)},deleteRow:function(){var a=confirm("Are you sure that you want to delete that row? Fomulas will not be updated.");if(a){jS.obj.barLeft().find("div").eq(jS.rowLast).remove();jS.obj.sheet().find("tr").eq(jS.rowLast).remove();jS.evt.cellEditAbandon();jS.setTdIds();jS.refreshLabelsRows();jS.obj.pane().scroll();jS.rowLast=-1}},deleteColumn:function(){var b=confirm("Are you sure that you want to delete that column? Fomulas will not be updated.");if(b){jS.obj.barTop().find("div").eq(jS.colLast).remove();jS.obj.sheet().find("colgroup col").eq(jS.colLast).remove();jS.obj.sheet().find("tr").each(function(c){jQuery(this).find("td").eq(jS.colLast).remove()});jS.evt.cellEditAbandon();var a=jS.refreshLabelsColumns();jS.setTdIds();jS.obj.sheet().width(a);jS.obj.pane().scroll();jS.colLast=-1}},sheetTab:function(b){var a="";if(b){a=jS.obj.sheet().attr("title");a=(a?a:"Spreadsheet "+(jS.i+1))}else{var c=prompt("What would you like the sheet's title to be?",jS.sheetTab(true));if(!c){a=jS.obj.sheet().attr("title");c=(a?a:"Spreadsheet"+(jS.i+1))}else{jS.setDirty(true);jS.obj.sheet().attr("title",c);jS.obj.tab().html(c);a=c}}return a},print:function(b){var a=window.open();a.document.write("<html><body><xmp>"+b+"\n</xmp></body></html>");a.document.close()},viewSource:function(b){var c=jS.sheetDecorateRemove(true);var a="";if(b){jQuery(c).each(function(){a+=jS.HTMLtoPrettySource(this)})}else{a+=jQuery("<div />").html(c).html()}jS.print(a);return false},saveSheet:function(){var a=jS.sheetDecorateRemove(true);var b=jQuery("<div />").html(a).html();jQuery.ajax({url:jS.s.urlSave,type:"POST",data:"s="+b,dataType:"html",success:function(c){jS.setDirty(false);alert("Success! - "+c)}})},HTMLtoCompactSource:function(f){var b="";if(f.nodeType==1){b+="<"+f.tagName;d=false;var h=f.attributes.length;for(var e=0,d=false;e<h;e++){var c=f.attributes[e].name;var g=f.getAttribute(c);if(g){if(c=="contentEditable"&&g=="inherit"){continue}if(c=="class"){d=true;jQuery(g).removeClass(jS.cl.cell)}if(typeof(g)=="string"){b+=" "+c+'="'+g.replace(/"/g,"'")+'"'}else{if(c=="style"&&g.cssText){b+=' style="'+g.cssText+'"'}}}}if(f.tagName=="TABLE"&&!d){b+=' class="jSheet"'}if(f.tagName=="COL"){b+="/>"}else{b+=">";var a="";jQuery(f.childNodes).each(function(){a+=jS.HTMLtoCompactSource(this)});b+=a;b+="</"+f.tagName+">"}}else{if(f.nodeType==3){b+=f.data.replace(/^\s*(.*)\s*$/g,"$1")}}return b},HTMLtoPrettySource:function(e,f){if(!f){f=""}var b="";if(e.nodeType==1){b+="\n"+f+"<"+e.tagName;var h=e.attributes.length;for(var d=0;d<h;d++){var c=e.attributes[d].name;var g=e.getAttribute(c);if(g){if(c=="contentEditable"&&g=="inherit"){continue}if(typeof(g)=="string"){b+=" "+c+'="'+g.replace(/"/g,"'")+'"'}else{if(c=="style"&&g.cssText){b+=' style="'+g.cssText+'"'}}}}if(e.childNodes.length<=0){b+="/>"}else{b+=">";var a="";var h=e.childNodes.length;for(var d=0;d<h;d++){a+=jS.HTMLtoPrettySource(e.childNodes[d],f+"  ")}b+=a;if(a.indexOf("\n")>=0){b+="\n"+f}b+="</"+e.tagName+">"}}else{if(e.nodeType==3){b+=e.data.replace(/^\s*(.*)\s*$/g,"$1")}}return b},followMe:function(a){jS.obj.pane().stop().scrollTo(a,{margin:true,axis:"xy",duration:100,offset:{top:-jS.s.height/3,left:-jS.s.width/5}})},count:{rows:function(){return jS.getBarLeftIndex(jS.obj.barLeft().find("div:last").text())},columns:function(){return jS.getBarTopLocatoin(jS.obj.barTop().find("div:last").text())}},isRowHeightSync:[],setActiveSheet:function(b,a){if(b){b.show().siblings().hide();jS.obj.tabContainer().find(".ui-state-highlight").removeClass("ui-state-highlight");jS.i=a;jS.obj.tab().parent().addClass("ui-state-highlight")}else{a=0;jS.obj.tableControl().siblings().not("div").hide();jS.obj.tabContainer().find(".ui-state-highlight").removeClass("ui-state-highlight");jS.obj.tab().parent().addClass("ui-state-highlight")}if(!jS.isRowHeightSync[a]){jS.isRowHeightSync[a]=true;jS.obj.sheet().find("tr").each(function(c){jS.attrH.setHeight(c,"cell")})}jS.sheetSyncSize();jS.replaceWithSafeImg(jS.obj.sheet().find("img"))},openSheetURL:function(a){jS.s.urlGet=a;return jS.openSheet()},openSheet:function(c){if(!jS.isDirty?true:confirm("Are you sure you want to open a different sheet?  All unsaved changes will be lost.")){jS.controlFactory.header();var b=function(e,d){if(e==(d-1)){jS.i=0;jS.setActiveSheet();jS.themeRoller.resize();for(var e=0;e<=jS.sheetCount;e++){jS.calc(e)}}};if(!c){jQuery("<div />").load(jS.s.urlGet,function(){var d=jQuery(this).find("table");d.each(function(e){jS.controlFactory.sheetUI(jQuery(this),e,function(){b(e,d.length)},true)})})}else{var a=jQuery("<div />").html(c).find("table");a.each(function(d){jS.controlFactory.sheetUI(jQuery(this),d,function(){b(d,a.length)},false)})}return true}else{return false}},newSheetDialog:"What size would you like to make your spreadsheet? Example: '5x10' creates a sheet that is 5 columns by 10 rows.",newSheet:function(){var a=prompt(jS.newSheetDialog);if(a){jS.openSheet(jS.controlFactory.sheet(a))}},importRow:function(b){jS.controlFactory.addRow(null,null,":last");var a="";jS.obj.sheet().find("tr:last td").each(function(c){jQuery(this).removeAttr("formula");try{if((b[c]+"").charAt(0)=="="){jQuery(this).attr("formula",b[c])}else{jQuery(this).html(b[c])}}catch(d){a+=d+";\n"}});if(a){alert(a)}jS.setTdIds();jS.calc(jS.i)},importColumn:function(a){jS.controlFactory.addColumn();var b="";jS.obj.sheet().find("tr").each(function(c){var f=jQuery(this).find("td:last");try{if((a[c]+"").charAt(0)=="="){f.attr("formula",a[c])}else{f.html(a[c])}}catch(d){b+=d+";\n"}});if(b){alert(b)}jS.setTdIds();jS.calc(jS.i)},importSheet:{xml:function(c){var b=jQuery("<table />");var a=jQuery("<tbody />").appendTo(b);jQuery(c).find("document").each(function(){var d=jQuery(this).find("metadata");var f=d.find("columns").text();var e=d.find("rows").text();var g=d.find("title").html();jQuery(this).find("data").children().each(function(h){var j=jQuery("<tr />");jQuery(this).children().each(function(i){var k=jQuery(this).html();if(k.charAt(0)=="="){j.append('<td formula="'+k+'" />')}else{j.append("<td>"+k+"</td>")}});a.append(j)})});return b},json:function(data){jS.i=jS.sheetCount+1;sheet=eval("("+data+")");size_c=sheet.metadata["columns"]*1+5;size_r=sheet.metadata["rows"]*1+1;title=sheet.metadata["title"];title=(title?title:"");var table=jQuery("<table id='"+jS.id.sheet+jS.i+"' class='"+jS.cl.sheet+"' title='"+title+"' />");var cur_row;for(var x=1;x<=size_r;x++){cur_row=jQuery('<tr height="'+jS.s.colMargin+'px" />').appendTo(table);for(var y=1;y<=size_c;y++){cur_row.append('<td id="table'+jS.i+"_cell_c"+y+"_r"+x+'" />')}}for(row in sheet.data){for(column in sheet.data[row]){cur_val=sheet.data[row][column];cur_column=table.find("table"+jS.i+"_cell_"+column+"_r"+row).text(cur_val);if(cur_val.charAt(0)=="="){cur_column.attr("formula",cur_val)}}}return table}},exportSheet:{xml:function(b){var d=jS.sheetDecorateRemove(true);var a="";var c=["<![CDATA[","]]>"];if(b){c=["",""]}jQuery(d).each(function(){var f="";var i=jQuery(this).attr("title");var g=0;var e=cur_row="";var h=max_row=0;jQuery(this).find("tr").each(function(j){g=0;max_row=j;jQuery(this).find("td").each(function(){g++;var o=jQuery(this).attr("id");var k=jQuery.trim(jQuery(this).text());var n=o.search(/cell_c/i);var l=o.search(/_r/i);if(k!=""&&n!=-1&&l!=-1){e=o.substr(n+6,l-(n+6));cur_row=o.substr(l+2);if(h<e){h=e}if(max_row<cur_row){max_row=cur_row}if(g==1){f+="<r"+cur_row+">"}var m=jQuery(this).attr("formula");if(m){k=m}f+="<c"+e+">"+c[0]+k+c[1]+"</c"+e+">"}});if(cur_row!=""){f+="</r"+cur_row+">"}e=cur_row=""});a+="<document><metadata><columns>"+(parseInt(h)+1)+"</columns><rows>"+(parseInt(max_row)+1)+"</rows><title>"+i+"</title></metadata><data>"+f+"</data></document>"});return"<documents>"+a+"</documents>"},json:function(){var a=jS.sheetDecorateRemove(true);var b=[];jQuery(a).each(function(){var e={metadata:{},data:{}};var d=0;var c=cur_row="";var f=max_row=0;jQuery(this).find("tr").each(function(){d=0;jQuery(this).find("td").each(function(){d++;var l=jQuery(this).attr("id");var g=jQuery.trim(jQuery(this).text());var k=l.search(/cell_c/i);var h=l.search(/_r/i);if(g!=""&&k!=-1&&h!=-1){c=l.substr(k+6,h-(k+6));cur_row=l.substr(h+2);if(f<c){f=c}if(max_row<cur_row){max_row=cur_row}if(d==1){e.data["r"+cur_row]={}}var j=jQuery(this).attr("formula");if(j){g=j}try{e.data["r"+cur_row]["c"+c]=g}catch(i){}}});c=cur_row=""});e.metadata={columns:parseInt(f)+1,rows:parseInt(max_row)+1,title:jQuery(this).attr("title")};b.push(e)});return b},html:function(){return jS.sheetDecorateRemove(true)}},sheetSyncSizeToDivs:function(){var a=0;jS.obj.barTop().find("div").each(function(){a+=parseInt(jQuery(this).outerWidth())});jS.obj.sheet().width(a)},sheetSyncSizeToCols:function(a){var b=0;a.find("colgroup col").each(function(){b+=jQuery(this).width()});a.width(b)},sheetSyncSize:function(){var b=jS.s.height;if(!b){b=400}else{if(b<200){b=200}}jS.obj.parent().height(b);var a=jS.s.width-jS.attrH.width(jS.obj.barLeftParent())-(jS.attrH.boxModelCorrection());b=b-jS.attrH.height(jS.obj.controls())-jS.attrH.height(jS.obj.barTopParent())-(jS.attrH.boxModelCorrection()*2);jS.obj.pane().height(b).width(a).parent().width(a);jS.obj.ui().width(a+jS.attrH.width(jS.obj.barLeftParent()));jS.obj.barLeftParent().height(b);jS.obj.barTopParent().width(a).parent().width(a)},cellFind:function(a){if(!a){a=prompt("What are you looking for in this spreadsheet?")}if(a){var b=jS.obj.sheet().find('td:contains("'+a+'")');if(b.length<1){b=jS.obj.sheet().find('td:contains("'+a.toLowerCase()+'")')}if(b.length<1){b=jS.obj.sheet().find('td:contains("'+a.toUpperCase()+'")')}b=b.eq(0);if(b.length>0){b.click()}else{alert("No results found.")}}},cellSetActiveMulti:function(a){var b={startRow:a.target.parentNode.rowIndex,startColumn:a.target.cellIndex};jS.obj.sheet().mousemove(function(f){b.endRow=f.target.parentNode.rowIndex;b.endColumn=f.target.cellIndex;for(var d=b.startRow;d<=b.endRow;d++){for(var c=b.startColumn;c<=b.endColumn;c++){var g=jS.getTd(jS.i,d,c);jQuery(g).addClass(jS.cl.uiCell).addClass(jS.cl.uiCellHighlighted)}}}).mouseup(function(){jS.obj.sheet().unbind("mousemove").unbind("mouseup")});if(a.target!=jS.cellLast.td&&jQuery(a.target).hasClass("clickable")==false){jS.themeRoller.clearCell();jS.themeRoller.clearBar();return false}},cellSetActiveAll:function(){if(jS.s.editable){var a=0;var b=0;jS.obj.barLeft().find("div").each(function(c){jS.cellSetActiveMultiRow(c);a++});jS.obj.barTop().find("div").each(function(c){jS.themeRoller.barTop(c);b++});jS.fxUpdate("A1:"+cE.columnLabelString(b)+a,true)}},cellSetActiveMultiColumn:function(a){jS.obj.sheet().find("tr").each(function(){var b=jQuery(this).find("td").eq(a);b.addClass(jS.cl.uiCell).addClass(jS.cl.uiCellHighlighted)});jS.themeRoller.barTop(a)},cellSetActiveMultiRow:function(a){jS.obj.sheet().find("tr").eq(a).find("td").addClass(jS.cl.uiCell).addClass(jS.cl.uiCellHighlighted);jS.themeRoller.barLeft(a)},sheetClearActive:function(){jS.obj.formula().val("");jS.obj.cell().removeClass(jS.cl.cell);jS.obj.barSelected().removeClass(jS.cl.barSelected)},getTdRange:function(){var b=jS.obj.uiCell().not("."+jS.cl.cell);if(b.length){var c={first:jS.getTdLocation(b.first()),last:jS.getTdLocation(b.last())};c.first[0]++;c.first[1]++;c.last[0]++;c.last[1]++;var a={first:cE.columnLabelString(c.first[1])+c.first[0],last:cE.columnLabelString(c.last[1])+c.last[0]};return a.first+":"+a.last}else{return""}},getTdId:function(a,c,b){return"table"+a+"_cell_c"+b+"_r"+c},getTd:function(a,c,b){return document.getElementById(jS.getTdId(a,c,b))},getTdLocation:function(c){var a=parseInt(c[0].cellIndex);var b=parseInt(c[0].parentNode.rowIndex);return[b,a]},getBarLeftIndex:function(b){var a=jQuery.trim(jQuery(b).text());return parseInt(a)-1},getBarTopIndex:function(b){var a=cE.columnLabelIndex(jQuery.trim(jQuery(b).text()));return parseInt(a)-1},tableCellProvider:function(a){this.tableBodyId="jSheet"+a;this.tableI=a;this.cells={}},tableCell:function(a,c,b){this.tableBodyId="jSheet"+a;this.tableI=a;this.row=c;this.col=b;this.value=jS.EMPTY_VALUE},EMPTY_VALUE:{},time:{now:new Date(),last:new Date(),diff:function(){return Math.abs(Math.ceil(this.last.getTime()-this.now.getTime())/1000).toFixed(5)},set:function(){this.last=this.now;this.now=new Date()},get:function(){return this.now.getHours()+":"+this.now.getMinutes()+":"+this.now.getSeconds()}},log:function(a){jS.time.set();jS.obj.log().prepend(jS.time.get()+", "+jS.time.diff()+"; "+a+"<br />\n")},replaceWithSafeImg:function(a){a.each(function(){var b=jQuery(this).attr("src");jQuery(this).replaceWith(jS.controlFactory.safeImg(b,jS.getTdLocation(jQuery(this).parent())[0]))})},isDirty:false,setDirty:function(a){jS.isDirty=a},appendToFormula:function(a,c){var d=jS.obj.formula();if(d.attr("disabled")){d=jS.cellLast.td.find("textarea")}var b=d.val();if(b.charAt(0)!="="){b="="+b}d.val(b+a)}};jS.tableCellProvider.prototype={getCell:function(b,e,c){if(typeof(c)=="string"){c=cE.columnLabelIndex(c)}var d=b+","+e+","+c;var a=this.cells[d];if(!a){var f=jS.getTd(b,e-1,c-1);if(f){a=this.cells[d]=new jS.tableCell(b,e,c)}}return a},getNumberOfColumns:function(b){var c=document.getElementById(this.tableBodyId);if(c){var a=c.rows[b];if(a){return a.cells.length}}return 0},toString:function(){result="";jQuery("#"+(this.tableBodyId)+" tr").each(function(){result+=this.innerHTML.replace(/\n/g,"")+"\n"});return result}};jS.tableCell.prototype={getTd:function(){return document.getElementById(jS.getTdId(this.tableI,this.row-1,this.col-1))},setValue:function(a,b){this.error=b;this.value=a;jQuery(this.getTd()).html(a?a:"")},getValue:function(){var a=this.value;if(a===jS.EMPTY_VALUE&&!this.getFormula()){a=this.getTd().innerHTML;a=this.value=(a.length>0?cE.parseFormulaStatic(a):null)}return(a===jS.EMPTY_VALUE?null:a)},getFormat:function(){return jQuery(this.getTd()).attr("format")},setFormat:function(a){jQuery(this.getTd()).attr("format",a)},getFormulaFunc:function(){return this.formulaFunc},setFormulaFunc:function(a){this.formulaFunc=a},getFormula:function(){return jQuery(this.getTd()).attr("formula")},setFormula:function(a){if(a&&a.length>0){jQuery(this.getTd()).attr("formula",a)}else{jQuery(this.getTd()).removeAttr("formula")}}};var key={BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38};var cE=jQuery.calculationEngine={TEST:{},ERROR:"#VALUE!",cFN:{sum:function(a,b){return a+b},max:function(a,b){return a>b?a:b},min:function(a,b){return a<b?a:b},count:function(a,b){return(b!=null)?a+1:a},clean:function(a){if(typeof(a)=="string"){a=a.replace(cE.regEx.amp,"&").replace(cE.regEx.nbsp," ").replace(/\n/g,"").replace(/\r/g,"")}return a},input:{select:{obj:function(){return jQuery('<select style="width: 100%;" onchange="cE.cFN.input.setValue(jQuery(this).val(), jQuery(this).parent());" class="clickable" />')}},radio:{obj:function(a){var c=jQuery('<span class="clickable" />');var b=cE.cFN.input.radio.name();for(var d=0;d<(a.length<=25?a.length:25);d++){if(a[d]){c.append('<input onchange="cE.cFN.input.setValue(jQuery(this).val(), jQuery(this).parent().parent());" type="radio" value="'+a[d]+'" name="'+b+'" />'+a[d]+"<br />")}}return c},name:function(){return"table"+cE.thisCell.tableI+"_cell_c"+(cE.thisCell.col-1)+"_r"+(cE.thisCell.row-1)+"radio"}},checkbox:{obj:function(a){return jQuery('<input onclick="cE.cFN.input.setValue(jQuery(this).is(\':checked\') + \'\', jQuery(this).parent());" type="checkbox" value="'+a+'" />'+a+"<br />")}},setValue:function(a,b){b.attr("selectedvalue",a);jS.calc(cE.calcState.i)},getValue:function(){return jQuery(jS.getTd(cE.thisCell.tableI,cE.thisCell.row-1,cE.thisCell.col-1)).attr("selectedvalue")}}},fn:{HTML:function(a){return jQuery(a)},IMG:function(a){return jS.controlFactory.safeImg(a,cE.calcState.row,cE.calcState.col)},AVERAGE:function(b){var a=cE.foldPrepare(b,arguments);return cE.fn.SUM(a)/cE.fn.COUNT(a)},AVG:function(a){return cE.fn.AVERAGE(a)},COUNT:function(a){return cE.fold(cE.foldPrepare(a,arguments),cE.cFN.count,0)},SUM:function(a){return cE.fold(cE.foldPrepare(a,arguments),cE.cFN.sum,0,true)},MAX:function(a){return cE.fold(cE.foldPrepare(a,arguments),cE.cFN.max,Number.MIN_VALUE,true)},MIN:function(a){return cE.fold(cE.foldPrepare(a,arguments),cE.cFN.min,Number.MAX_VALUE,true)},ABS:function(a){return Math.abs(cE.fn.N(a))},CEILING:function(a){return Math.ceil(cE.fn.N(a))},FLOOR:function(a){return Math.floor(cE.fn.N(a))},INT:function(a){return Math.floor(cE.fn.N(a))},ROUND:function(b,a){return cE.fn.FIXED(b,(a?a:0),false)},RAND:function(a){return Math.random()},RND:function(a){return Math.random()},TRUE:function(){return"TRUE"},FALSE:function(){return"FALSE"},NOW:function(){return new Date()},TODAY:function(){return Date(Math.floor(new Date()))},DAYSFROM:function(b,c,a){return Math.floor((new Date()-new Date(b,(c-1),a))/86400000)},IF:function(v,t,f){t=cE.cFN.clean(t);f=cE.cFN.clean(f);try{v=eval(v)}catch(e){}try{t=eval(t)}catch(e){}try{t=eval(t)}catch(e){}if(v=="true"||v==true||v>0||v=="TRUE"){return t}else{return f}},FIXED:function(g,b,h){if(b==null){b=2}var f=Math.pow(10,b);var k=String(Math.round(cE.fn.N(g)*f)/f);var a=k.indexOf(".");if(a<0){a=k.length;k+="."}for(var c=k.length-a-1;c<b;c++){k+="0"}if(h==true){return k}var e=k.replace("-","").split(".");var j=[];var d=true;while(e[0].length>0){if(!d){j.unshift(",")}j.unshift(e[0].slice(-3));e[0]=e[0].slice(0,-3);d=false}if(b>0){j.push(".");var d=true;while(e[1].length>0){if(!d){j.push(",")}j.push(e[1].slice(0,3));e[1]=e[1].slice(3);d=false}}if(g<0){return"-"+j.join("")}return j.join("")},TRIM:function(a){if(typeof(a)=="string"){a=jQuery.trim(a)}return a},HYPERLINK:function(b,a){a=(a?a:"LINK");return jQuery('<a href="'+b+'" target="_new" class="clickable">'+a+"</a>")},DOLLAR:function(b,a,d){if(a==null){a=2}if(d==null){d="$"}var c=cE.fn.FIXED(b,a,false);if(b>=0){return d+c}else{return"-"+d+c.slice(1)}},VALUE:function(a){return parseFloat(a)},N:function(a){if(a==null){return 0}if(a instanceof Date){return a.getTime()}if(typeof(a)=="object"){a=a.toString()}if(typeof(a)=="string"){a=parseFloat(a.replace(cE.regEx.n,""))}if(isNaN(a)){return 0}if(typeof(a)=="number"){return a}if(a==true){return 1}return 0},PI:function(){return Math.PI},POWER:function(a,b){return Math.pow(a,b)},INPUT:{SELECT:function(a,c){a=cE.foldPrepare(a,arguments);var d=cE.cFN.input.select.obj();if(!c){d.append('<option value="">Select a value</option>')}for(var b=0;b<(a.length<=50?a.length:50);b++){if(a[b]){d.append('<option value="'+a[b]+'">'+a[b]+"</option>")}}d.val(cE.cFN.input.getValue());return d},SELECTVAL:function(a){return jQuery(a).val()},RADIO:function(a){a=cE.foldPrepare(a,arguments);var b=cE.cFN.input.radio.obj(a);b.find('input[value="'+cE.cFN.input.getValue()+'"]').attr("CHECKED","true");return b},RADIOVAL:function(a){a=cE.foldPrepare(a,arguments);return jQuery(a).find("input:checked").val()},CHECKBOX:function(a){a=cE.foldPrepare(a,arguments)[0];var c=cE.cFN.input.checkbox.obj(a);var b=cE.cFN.input.getValue();if(b=="true"||b==true){c.attr("CHECKED","TRUE")}else{c.removeAttr("CHECKED")}return c},CHECKBOXVAL:function(a){a=cE.foldPrepare(a,arguments);return jQuery(a).val()},ISCHECKED:function(a){var b=jQuery(a).is(":checked");if(b){return"TRUE"}else{return"FALSE"}}},CHART:{BAR:function(b,e,c,a,d){return jS.controlFactory.chart(null,cE.foldPrepare(b,arguments),e,c,a,d,cE.calcState.row-1)},BARH:function(b,e,c,a,d){return jS.controlFactory.chart("bhg",cE.foldPrepare(b,arguments),e,c,a,d,cE.calcState.row-1)},SBAR:function(b,e,c,a,d){return jS.controlFactory.chart("bvs",cE.foldPrepare(b,arguments),e,c,a,d,cE.calcState.row-1)},SBARH:function(b,e,c,a,d){return jS.controlFactory.chart("bhs",cE.foldPrepare(b,arguments),e,c,a,d,cE.calcState.row-1)},LINE:function(b,e,c,a,d){return jS.controlFactory.chart("lc",cE.foldPrepare(b,arguments),e,c,a,d,cE.calcState.row-1)},PIE:function(b,e,c,a,d){return jS.controlFactory.chart("p",cE.foldPrepare(b,arguments),e,c,a,d,cE.calcState.row-1)},PIETHREED:function(b,e,c,a,d){return jS.controlFactory.chart("p3",cE.foldPrepare(b,arguments),e,c,a,d,cE.calcState.row-1)},CUSTOM:function(f,b,e,c,a,d){return jS.controlFactory.chart(f,cE.foldPrepare(b,arguments),e,c,a,d,cE.calcState.row-1)}}},calcState:{},calc:function(c,a,b){cE.calcState={cellProvider:c,context:(a!=null?a:{}),row:1,col:1,i:c.tableI,done:false,stack:[],calcMore:function(d){cE.calcState.fuel=d;return cE.calcLoop()}};return cE.calcState.calcMore(b)},cell:function(){prototype:{getError=function(){return this.error},getValue=function(){return this.value},setValue=function(a,b){this.value=a;this.error=b},getFormula=function(){return this.formula},setFormula=function(a){this.formula=a},getFormulaFunc=function(){return this.formulaFunc},setFormulaFunc=function(a){this.formulaFunc=a},toString=function(){return"Cell:["+this.getFormula()+": "+this.getValue()+": "+this.getError()+"]"}}},columnLabelIndex:function(c){var a=0;for(var b=0;b<c.length;b++){var d=c.charCodeAt(b)-65+1;a=(a*26)+d}return a},parseLocation:function(b){if(b!=null&&b.length>0&&b!="&nbsp;"){for(var a=0;a<b.length;a++){if(b.charCodeAt(a)<=57){break}}return[parseInt(b.substring(a)),cE.columnLabelIndex(b.substring(0,a))]}else{return null}},columnLabelString:function(e){var d=(e-1).toString(26).toUpperCase();var g=[];for(var f=0;f<d.length;f++){var a=d.charCodeAt(f);if(f<=0&&d.length>1){a=a-1}if(a<=57){g.push(String.fromCharCode(a-48+65))}else{g.push(String.fromCharCode(a+10))}}return g.join("")},regEx:{n:/[\$,\s]/g,cell:/\$?([a-zA-Z]+)\$?([0-9]+)/g,range:/\$?([a-zA-Z]+)\$?([0-9]+):\$?([a-zA-Z]+)\$?([0-9]+)/g,remoteCell:/\$?(SHEET+)\$?([0-9]+):\$?([a-zA-Z]+)\$?([0-9]+)/g,remoteCellRange:/\$?(SHEET+)\$?([0-9]+):\$?([a-zA-Z]+)\$?([0-9]+):\$?([a-zA-Z]+)\$?([0-9]+)/g,amp:/&/g,gt:/</g,lt:/>/g,nbsp:/&nbsp;/g},str:{amp:"&amp;",lt:"&lt;",gt:"&gt;",nbsp:"&nbps;"},parseFormula:function(e,c,a){var b=null;var d=null;if(cE.calcState.cellProvider!=null){b=cE.calcState.cellProvider.nrows;d=cE.calcState.cellProvider.ncols}e=e.replace(cE.regEx.remoteCellRange,function(i,m,s,k,h,o,j){var p=[];var g=cE.columnLabelIndex(k);var t=parseInt(h);var n=cE.columnLabelIndex(o);var l=parseInt(j);if(d!=null){n=Math.min(n,d)}if(b!=null){l=Math.min(l,b)}for(var f=t;f<=l;f++){for(var q=g;q<=n;q++){p.push("SHEET"+(s)+":"+cE.columnLabelString(q)+f)}}return"["+p.join(",")+"]"});e=e.replace(cE.regEx.remoteCell,function(h,f,g,j,i){g=parseInt(g)-1;j=j.toUpperCase();if(c!=null){c["SHEET"+(g)+":"+j+i]=[parseInt(i),cE.columnLabelIndex(j),g]}return"(cE.calcState.cellProvider.getCell(("+(g)+"),("+(i)+'),"'+(j)+'").getValue())'});e=e.replace(cE.regEx.range,function(i,k,h,n,j){var o=[];var g=cE.columnLabelIndex(k);var q=parseInt(h);var m=cE.columnLabelIndex(n);var l=parseInt(j);if(d!=null){m=Math.min(m,d)}if(b!=null){l=Math.min(l,b)}for(var f=q;f<=l;f++){for(var p=g;p<=m;p++){o.push(cE.columnLabelString(p)+f)}}return"["+o.join(",")+"]"});e=e.replace(cE.regEx.cell,function(f,h,g){h=h.toUpperCase();if(c!=null){c["SHEET"+a+":"+h+g]=[parseInt(g),cE.columnLabelIndex(h),a]}return"(cE.calcState.cellProvider.getCell(("+a+"),("+(g)+'),"'+(h)+'").getValue())'});return e},parseFormulaStatic:function(c){if(c==null){return null}else{var b=c.replace(cE.regEx.n,"");var a=parseFloat(b);if(isNaN(a)){a=parseInt(b)}if(isNaN(a)){a=(c.charAt(0)=="'"?c.substring(1):c)}return a}},calcLoop:function(){if(cE.calcState.done==true){return null}else{while(cE.calcState.fuel==null||cE.calcState.fuel>0){if(cE.calcState.stack.length>0){var a=cE.calcState.stack.pop();if(a!=null){a(cE.calcState)}}else{if(cE.calcState.cellProvider.formulaCells!=null){if(cE.calcState.cellProvider.formulaCells.length>0){var b=cE.calcState.cellProvider.formulaCells.shift();cE.visitCell(cE.calcState.i,b[0],b[1])}else{cE.calcState.done=true;return null}}else{if(cE.visitCell(cE.calcState.i,cE.calcState.row,cE.calcState.col)==true){cE.calcState.done=true;return null}if(cE.calcState.col>=cE.calcState.cellProvider.getNumberOfColumns(cE.calcState.row-1)){cE.calcState.row++;cE.calcState.col=1}else{cE.calcState.col++}}}if(cE.calcState.fuel!=null){cE.calcState.fuel-=1}}return cE.calcState.calcMore}},formula:null,formulaFunc:null,visitCell:function(tableI,r,c){var cell=cE.calcState.cellProvider.getCell(tableI,r,c);if(cell==null){return true}else{var value=cell.getValue();if(value==null){this.formula=cell.getFormula();if(this.formula){if(this.formula.charAt(0)=="="){this.formulaFunc=cell.getFormulaFunc();if(this.formulaFunc==null||this.formulaFunc.formula!=this.formula){this.formulaFunc=null;try{var dependencies={};var body=cE.parseFormula(this.formula.substring(1),dependencies,tableI);this.formulaFunc=function(){with(cE.fn){return eval(body)}};this.formulaFunc.formula=this.formula;this.formulaFunc.dependencies=dependencies;cell.setFormulaFunc(this.formulaFunc)}catch(e){cell.setValue(cE.ERROR+": "+e)}}if(this.formulaFunc){cE.calcState.stack.push(cE.makeFormulaEval(cell,r,c,this.formulaFunc));var dependencies=this.formulaFunc.dependencies;for(var k in dependencies){if(dependencies[k] instanceof Array&&(cE.checkCycles(dependencies[k][0],dependencies[k][1],dependencies[k][2])==true)){cell.setValue(cE.ERROR+": cycle detected");cE.calcState.stack.pop();return false}}for(var k in dependencies){if(dependencies[k] instanceof Array){cE.calcState.stack.push(cE.makeCellVisit(dependencies[k][2],dependencies[k][0],dependencies[k][1]))}}}}else{cell.setValue(cE.parseFormulaStatic(this.formula))}}}return false}},makeCellVisit:function(a,d,b){var c=function(){return cE.visitCell(a,d,b)};c.row=d;c.col=b;return c},thisCell:null,makeFormulaEval:function(a,e,b,d){cE.thisCell=a;var c=function(){try{var f=d();switch(typeof(f)){case"string":f=f.replace(cE.regEx.amp,cE.str.amp).replace(cE.regEx.lt,cE.str.lt).replace(cE.regEx.gt,cE.str.gt).replace(cE.regEx.nbsp,cE.str.nbsp)}a.setValue(f)}catch(g){}};c.row=e;c.col=b;return c},checkCycles:function(e,b,a){for(var c=0;c<cE.calcState.stack.length;c++){var d=cE.calcState.stack[c];if(d.row!=null&&d.col!=null&&d.row==e&&d.col==b&&a==cE.calcState.i){return true}}return false},foldPrepare:function(a,b){if(a!=null&&a instanceof Object&&a.length!=null){return a}else{return b}},fold:function(b,e,a,d){for(var c=0;c<b.length;c++){a=e(a,(d==true?cE.fn.N(b[c]):b[c]))}return a}};                                                                                                                                                                         ./mvappsvr/docroot/db/javascripts/resize_area.js                                                    0000777 0000000 0000000 00000004564 12534142432 021025  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   	
	EditAreaLoader.prototype.start_resize_area= function(){
		var d=document,a,div,width,height,father;
		
		d.onmouseup= editAreaLoader.end_resize_area;
		d.onmousemove= editAreaLoader.resize_area;
		editAreaLoader.toggle(editAreaLoader.resize["id"]);		
		
		a	= editAreas[editAreaLoader.resize["id"]]["textarea"];
		div	= d.getElementById("edit_area_resize");
		if(!div){
			div= d.createElement("div");
			div.id="edit_area_resize";
			div.style.border="dashed #888888 1px";
		}
		width	= a.offsetWidth -2;
		height	= a.offsetHeight -2;
		
		div.style.display	= "block";
		div.style.width		= width+"px";
		div.style.height	= height+"px";
		father= a.parentNode;
		father.insertBefore(div, a);
		
		a.style.display="none";
				
		editAreaLoader.resize["start_top"]= calculeOffsetTop(div);
		editAreaLoader.resize["start_left"]= calculeOffsetLeft(div);		
	};
	
	EditAreaLoader.prototype.end_resize_area= function(e){
		var d=document,div,a,width,height;
		
		d.onmouseup="";
		d.onmousemove="";		
		
		div		= d.getElementById("edit_area_resize");		
		a= editAreas[editAreaLoader.resize["id"]]["textarea"];
		width	= Math.max(editAreas[editAreaLoader.resize["id"]]["settings"]["min_width"], div.offsetWidth-4);
		height	= Math.max(editAreas[editAreaLoader.resize["id"]]["settings"]["min_height"], div.offsetHeight-4);
		if(editAreaLoader.isIE==6){
			width-=2;
			height-=2;	
		}
		a.style.width		= width+"px";
		a.style.height		= height+"px";
		div.style.display	= "none";
		a.style.display		= "inline";
		a.selectionStart	= editAreaLoader.resize["selectionStart"];
		a.selectionEnd		= editAreaLoader.resize["selectionEnd"];
		editAreaLoader.toggle(editAreaLoader.resize["id"]);
		
		return false;
	};
	
	EditAreaLoader.prototype.resize_area= function(e){		
		var allow,newHeight,newWidth;
		allow	= editAreas[editAreaLoader.resize["id"]]["settings"]["allow_resize"];
		if(allow=="both" || allow=="y")
		{
			newHeight	= Math.max(20, getMouseY(e)- editAreaLoader.resize["start_top"]);
			document.getElementById("edit_area_resize").style.height= newHeight+"px";
		}
		if(allow=="both" || allow=="x")
		{
			newWidth= Math.max(20, getMouseX(e)- editAreaLoader.resize["start_left"]);
			document.getElementById("edit_area_resize").style.width= newWidth+"px";
		}
		
		return false;
	};
	
	editAreaLoader.waiting_loading["resize_area.js"]= "loaded";
                                                                                                                                            ./mvappsvr/docroot/db/javascripts/prototype.js                                                      0000777 0000000 0000000 00000213135 12534142432 020575  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*  Prototype JavaScript framework, version 1.5.0
 *  (c) 2005-2007 Sam Stephenson
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://prototype.conio.net/
 *
/*--------------------------------------------------------------------------*/

var Prototype = {
  Version: '1.5.0',
  BrowserFeatures: {
    XPath: !!document.evaluate
  },

  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',
  emptyFunction: function() {},
  K: function(x) { return x }
}

var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}

var Abstract = new Object();

Object.extend = function(destination, source) {
  for (var property in source) {
    destination[property] = source[property];
  }
  return destination;
}

Object.extend(Object, {
  inspect: function(object) {
    try {
      if (object === undefined) return 'undefined';
      if (object === null) return 'null';
      return object.inspect ? object.inspect() : object.toString();
    } catch (e) {
      if (e instanceof RangeError) return '...';
      throw e;
    }
  },

  keys: function(object) {
    var keys = [];
    for (var property in object)
      keys.push(property);
    return keys;
  },

  values: function(object) {
    var values = [];
    for (var property in object)
      values.push(object[property]);
    return values;
  },

  clone: function(object) {
    return Object.extend({}, object);
  }
});

Function.prototype.bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
}

Function.prototype.bindAsEventListener = function(object) {
  var __method = this, args = $A(arguments), object = args.shift();
  return function(event) {
    return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments)));
  }
}

Object.extend(Number.prototype, {
  toColorPart: function() {
    var digits = this.toString(16);
    if (this < 16) return '0' + digits;
    return digits;
  },

  succ: function() {
    return this + 1;
  },

  times: function(iterator) {
    $R(0, this, true).each(iterator);
    return this;
  }
});

var Try = {
  these: function() {
    var returnValue;

    for (var i = 0, length = arguments.length; i < length; i++) {
      var lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) {}
    }

    return returnValue;
  }
}

/*--------------------------------------------------------------------------*/

var PeriodicalExecuter = Class.create();
PeriodicalExecuter.prototype = {
  initialize: function(callback, frequency) {
    this.callback = callback;
    this.frequency = frequency;
    this.currentlyExecuting = false;

    this.registerCallback();
  },

  registerCallback: function() {
    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  stop: function() {
    if (!this.timer) return;
    clearInterval(this.timer);
    this.timer = null;
  },

  onTimerEvent: function() {
    if (!this.currentlyExecuting) {
      try {
        this.currentlyExecuting = true;
        this.callback(this);
      } finally {
        this.currentlyExecuting = false;
      }
    }
  }
}
String.interpret = function(value){
  return value == null ? '' : String(value);
}

Object.extend(String.prototype, {
  gsub: function(pattern, replacement) {
    var result = '', source = this, match;
    replacement = arguments.callee.prepareReplacement(replacement);

    while (source.length > 0) {
      if (match = source.match(pattern)) {
        result += source.slice(0, match.index);
        result += String.interpret(replacement(match));
        source  = source.slice(match.index + match[0].length);
      } else {
        result += source, source = '';
      }
    }
    return result;
  },

  sub: function(pattern, replacement, count) {
    replacement = this.gsub.prepareReplacement(replacement);
    count = count === undefined ? 1 : count;

    return this.gsub(pattern, function(match) {
      if (--count < 0) return match[0];
      return replacement(match);
    });
  },

  scan: function(pattern, iterator) {
    this.gsub(pattern, iterator);
    return this;
  },

  truncate: function(length, truncation) {
    length = length || 30;
    truncation = truncation === undefined ? '...' : truncation;
    return this.length > length ?
      this.slice(0, length - truncation.length) + truncation : this;
  },

  strip: function() {
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
  },

  stripTags: function() {
    return this.replace(/<\/?[^>]+>/gi, '');
  },

  stripScripts: function() {
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
  },

  extractScripts: function() {
    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  },

  evalScripts: function() {
    return this.extractScripts().map(function(script) { return eval(script) });
  },

  escapeHTML: function() {
    var div = document.createElement('div');
    var text = document.createTextNode(this);
    div.appendChild(text);
    return div.innerHTML;
  },

  unescapeHTML: function() {
    var div = document.createElement('div');
    div.innerHTML = this.stripTags();
    return div.childNodes[0] ? (div.childNodes.length > 1 ?
      $A(div.childNodes).inject('',function(memo,node){ return memo+node.nodeValue }) :
      div.childNodes[0].nodeValue) : '';
  },

  toQueryParams: function(separator) {
    var match = this.strip().match(/([^?#]*)(#.*)?$/);
    if (!match) return {};

    return match[1].split(separator || '&').inject({}, function(hash, pair) {
      if ((pair = pair.split('='))[0]) {
        var name = decodeURIComponent(pair[0]);
        var value = pair[1] ? decodeURIComponent(pair[1]) : undefined;

        if (hash[name] !== undefined) {
          if (hash[name].constructor != Array)
            hash[name] = [hash[name]];
          if (value) hash[name].push(value);
        }
        else hash[name] = value;
      }
      return hash;
    });
  },

  toArray: function() {
    return this.split('');
  },

  succ: function() {
    return this.slice(0, this.length - 1) +
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
  },

  camelize: function() {
    var parts = this.split('-'), len = parts.length;
    if (len == 1) return parts[0];

    var camelized = this.charAt(0) == '-'
      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
      : parts[0];

    for (var i = 1; i < len; i++)
      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);

    return camelized;
  },

  capitalize: function(){
    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
  },

  underscore: function() {
    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
  },

  dasherize: function() {
    return this.gsub(/_/,'-');
  },

  inspect: function(useDoubleQuotes) {
    var escapedString = this.replace(/\\/g, '\\\\');
    if (useDoubleQuotes)
      return '"' + escapedString.replace(/"/g, '\\"') + '"';
    else
      return "'" + escapedString.replace(/'/g, '\\\'') + "'";
  }
});

String.prototype.gsub.prepareReplacement = function(replacement) {
  if (typeof replacement == 'function') return replacement;
  var template = new Template(replacement);
  return function(match) { return template.evaluate(match) };
}

String.prototype.parseQuery = String.prototype.toQueryParams;

var Template = Class.create();
Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
Template.prototype = {
  initialize: function(template, pattern) {
    this.template = template.toString();
    this.pattern  = pattern || Template.Pattern;
  },

  evaluate: function(object) {
    return this.template.gsub(this.pattern, function(match) {
      var before = match[1];
      if (before == '\\') return match[2];
      return before + String.interpret(object[match[3]]);
    });
  }
}

var $break    = new Object();
var $continue = new Object();

var Enumerable = {
  each: function(iterator) {
    var index = 0;
    try {
      this._each(function(value) {
        try {
          iterator(value, index++);
        } catch (e) {
          if (e != $continue) throw e;
        }
      });
    } catch (e) {
      if (e != $break) throw e;
    }
    return this;
  },

  eachSlice: function(number, iterator) {
    var index = -number, slices = [], array = this.toArray();
    while ((index += number) < array.length)
      slices.push(array.slice(index, index+number));
    return slices.map(iterator);
  },

  all: function(iterator) {
    var result = true;
    this.each(function(value, index) {
      result = result && !!(iterator || Prototype.K)(value, index);
      if (!result) throw $break;
    });
    return result;
  },

  any: function(iterator) {
    var result = false;
    this.each(function(value, index) {
      if (result = !!(iterator || Prototype.K)(value, index))
        throw $break;
    });
    return result;
  },

  collect: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      results.push((iterator || Prototype.K)(value, index));
    });
    return results;
  },

  detect: function(iterator) {
    var result;
    this.each(function(value, index) {
      if (iterator(value, index)) {
        result = value;
        throw $break;
      }
    });
    return result;
  },

  findAll: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      if (iterator(value, index))
        results.push(value);
    });
    return results;
  },

  grep: function(pattern, iterator) {
    var results = [];
    this.each(function(value, index) {
      var stringValue = value.toString();
      if (stringValue.match(pattern))
        results.push((iterator || Prototype.K)(value, index));
    })
    return results;
  },

  include: function(object) {
    var found = false;
    this.each(function(value) {
      if (value == object) {
        found = true;
        throw $break;
      }
    });
    return found;
  },

  inGroupsOf: function(number, fillWith) {
    fillWith = fillWith === undefined ? null : fillWith;
    return this.eachSlice(number, function(slice) {
      while(slice.length < number) slice.push(fillWith);
      return slice;
    });
  },

  inject: function(memo, iterator) {
    this.each(function(value, index) {
      memo = iterator(memo, value, index);
    });
    return memo;
  },

  invoke: function(method) {
    var args = $A(arguments).slice(1);
    return this.map(function(value) {
      return value[method].apply(value, args);
    });
  },

  max: function(iterator) {
    var result;
    this.each(function(value, index) {
      value = (iterator || Prototype.K)(value, index);
      if (result == undefined || value >= result)
        result = value;
    });
    return result;
  },

  min: function(iterator) {
    var result;
    this.each(function(value, index) {
      value = (iterator || Prototype.K)(value, index);
      if (result == undefined || value < result)
        result = value;
    });
    return result;
  },

  partition: function(iterator) {
    var trues = [], falses = [];
    this.each(function(value, index) {
      ((iterator || Prototype.K)(value, index) ?
        trues : falses).push(value);
    });
    return [trues, falses];
  },

  pluck: function(property) {
    var results = [];
    this.each(function(value, index) {
      results.push(value[property]);
    });
    return results;
  },

  reject: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      if (!iterator(value, index))
        results.push(value);
    });
    return results;
  },

  sortBy: function(iterator) {
    return this.map(function(value, index) {
      return {value: value, criteria: iterator(value, index)};
    }).sort(function(left, right) {
      var a = left.criteria, b = right.criteria;
      return a < b ? -1 : a > b ? 1 : 0;
    }).pluck('value');
  },

  toArray: function() {
    return this.map();
  },

  zip: function() {
    var iterator = Prototype.K, args = $A(arguments);
    if (typeof args.last() == 'function')
      iterator = args.pop();

    var collections = [this].concat(args).map($A);
    return this.map(function(value, index) {
      return iterator(collections.pluck(index));
    });
  },

  size: function() {
    return this.toArray().length;
  },

  inspect: function() {
    return '#<Enumerable:' + this.toArray().inspect() + '>';
  }
}

Object.extend(Enumerable, {
  map:     Enumerable.collect,
  find:    Enumerable.detect,
  select:  Enumerable.findAll,
  member:  Enumerable.include,
  entries: Enumerable.toArray
});
var $A = Array.from = function(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0, length = iterable.length; i < length; i++)
      results.push(iterable[i]);
    return results;
  }
}

Object.extend(Array.prototype, Enumerable);

if (!Array.prototype._reverse)
  Array.prototype._reverse = Array.prototype.reverse;

Object.extend(Array.prototype, {
  _each: function(iterator) {
    for (var i = 0, length = this.length; i < length; i++)
      iterator(this[i]);
  },

  clear: function() {
    this.length = 0;
    return this;
  },

  first: function() {
    return this[0];
  },

  last: function() {
    return this[this.length - 1];
  },

  compact: function() {
    return this.select(function(value) {
      return value != null;
    });
  },

  flatten: function() {
    return this.inject([], function(array, value) {
      return array.concat(value && value.constructor == Array ?
        value.flatten() : [value]);
    });
  },

  without: function() {
    var values = $A(arguments);
    return this.select(function(value) {
      return !values.include(value);
    });
  },

  indexOf: function(object) {
    for (var i = 0, length = this.length; i < length; i++)
      if (this[i] == object) return i;
    return -1;
  },

  reverse: function(inline) {
    return (inline !== false ? this : this.toArray())._reverse();
  },

  reduce: function() {
    return this.length > 1 ? this : this[0];
  },

  uniq: function() {
    return this.inject([], function(array, value) {
      return array.include(value) ? array : array.concat([value]);
    });
  },

  clone: function() {
    return [].concat(this);
  },

  size: function() {
    return this.length;
  },

  inspect: function() {
    return '[' + this.map(Object.inspect).join(', ') + ']';
  }
});

Array.prototype.toArray = Array.prototype.clone;

function $w(string){
  string = string.strip();
  return string ? string.split(/\s+/) : [];
}

if(window.opera){
  Array.prototype.concat = function(){
    var array = [];
    for(var i = 0, length = this.length; i < length; i++) array.push(this[i]);
    for(var i = 0, length = arguments.length; i < length; i++) {
      if(arguments[i].constructor == Array) {
        for(var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
          array.push(arguments[i][j]);
      } else {
        array.push(arguments[i]);
      }
    }
    return array;
  }
}
var Hash = function(obj) {
  Object.extend(this, obj || {});
};

Object.extend(Hash, {
  toQueryString: function(obj) {
    var parts = [];

	  this.prototype._each.call(obj, function(pair) {
      if (!pair.key) return;

      if (pair.value && pair.value.constructor == Array) {
        var values = pair.value.compact();
        if (values.length < 2) pair.value = values.reduce();
        else {
        	key = encodeURIComponent(pair.key);
          values.each(function(value) {
            value = value != undefined ? encodeURIComponent(value) : '';
            parts.push(key + '=' + encodeURIComponent(value));
          });
          return;
        }
      }
      if (pair.value == undefined) pair[1] = '';
      parts.push(pair.map(encodeURIComponent).join('='));
	  });

    return parts.join('&');
  }
});

Object.extend(Hash.prototype, Enumerable);
Object.extend(Hash.prototype, {
  _each: function(iterator) {
    for (var key in this) {
      var value = this[key];
      if (value && value == Hash.prototype[key]) continue;

      var pair = [key, value];
      pair.key = key;
      pair.value = value;
      iterator(pair);
    }
  },

  keys: function() {
    return this.pluck('key');
  },

  values: function() {
    return this.pluck('value');
  },

  merge: function(hash) {
    return $H(hash).inject(this, function(mergedHash, pair) {
      mergedHash[pair.key] = pair.value;
      return mergedHash;
    });
  },

  remove: function() {
    var result;
    for(var i = 0, length = arguments.length; i < length; i++) {
      var value = this[arguments[i]];
      if (value !== undefined){
        if (result === undefined) result = value;
        else {
          if (result.constructor != Array) result = [result];
          result.push(value)
        }
      }
      delete this[arguments[i]];
    }
    return result;
  },

  toQueryString: function() {
    return Hash.toQueryString(this);
  },

  inspect: function() {
    return '#<Hash:{' + this.map(function(pair) {
      return pair.map(Object.inspect).join(': ');
    }).join(', ') + '}>';
  }
});

function $H(object) {
  if (object && object.constructor == Hash) return object;
  return new Hash(object);
};
ObjectRange = Class.create();
Object.extend(ObjectRange.prototype, Enumerable);
Object.extend(ObjectRange.prototype, {
  initialize: function(start, end, exclusive) {
    this.start = start;
    this.end = end;
    this.exclusive = exclusive;
  },

  _each: function(iterator) {
    var value = this.start;
    while (this.include(value)) {
      iterator(value);
      value = value.succ();
    }
  },

  include: function(value) {
    if (value < this.start)
      return false;
    if (this.exclusive)
      return value < this.end;
    return value <= this.end;
  }
});

var $R = function(start, end, exclusive) {
  return new ObjectRange(start, end, exclusive);
}

var Ajax = {
  getTransport: function() {
    return Try.these(
      function() {return new XMLHttpRequest()},
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
    ) || false;
  },

  activeRequestCount: 0
}

Ajax.Responders = {
  responders: [],

  _each: function(iterator) {
    this.responders._each(iterator);
  },

  register: function(responder) {
    if (!this.include(responder))
      this.responders.push(responder);
  },

  unregister: function(responder) {
    this.responders = this.responders.without(responder);
  },

  dispatch: function(callback, request, transport, json) {
    this.each(function(responder) {
      if (typeof responder[callback] == 'function') {
        try {
          responder[callback].apply(responder, [request, transport, json]);
        } catch (e) {}
      }
    });
  }
};

Object.extend(Ajax.Responders, Enumerable);

Ajax.Responders.register({
  onCreate: function() {
    Ajax.activeRequestCount++;
  },
  onComplete: function() {
    Ajax.activeRequestCount--;
  }
});

Ajax.Base = function() {};
Ajax.Base.prototype = {
  setOptions: function(options) {
    this.options = {
      method:       'post',
      asynchronous: true,
      contentType:  'application/x-www-form-urlencoded',
      encoding:     'UTF-8',
      parameters:   ''
    }
    Object.extend(this.options, options || {});

    this.options.method = this.options.method.toLowerCase();
    if (typeof this.options.parameters == 'string')
      this.options.parameters = this.options.parameters.toQueryParams();
  }
}

Ajax.Request = Class.create();
Ajax.Request.Events =
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];

Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
  _complete: false,

  initialize: function(url, options) {
    this.transport = Ajax.getTransport();
    this.setOptions(options);
    this.request(url);
  },

  request: function(url) {
    this.url = url;
    this.method = this.options.method;
    var params = this.options.parameters;

    if (!['get', 'post'].include(this.method)) {
      // simulate other verbs over post
      params['_method'] = this.method;
      this.method = 'post';
    }

    params = Hash.toQueryString(params);
    if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) params += '&_='

    // when GET, append parameters to URL
    if (this.method == 'get' && params)
      this.url += (this.url.indexOf('?') > -1 ? '&' : '?') + params;

    try {
      Ajax.Responders.dispatch('onCreate', this, this.transport);

      this.transport.open(this.method.toUpperCase(), this.url,
        this.options.asynchronous);

      if (this.options.asynchronous)
        setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10);

      this.transport.onreadystatechange = this.onStateChange.bind(this);
      this.setRequestHeaders();

      var body = this.method == 'post' ? (this.options.postBody || params) : null;

      this.transport.send(body);

      /* Force Firefox to handle ready state 4 for synchronous requests */
      if (!this.options.asynchronous && this.transport.overrideMimeType)
        this.onStateChange();

    }
    catch (e) {
      this.dispatchException(e);
    }
  },

  onStateChange: function() {
    var readyState = this.transport.readyState;
    if (readyState > 1 && !((readyState == 4) && this._complete))
      this.respondToReadyState(this.transport.readyState);
  },

  setRequestHeaders: function() {
    var headers = {
      'X-Requested-With': 'XMLHttpRequest',
      'X-Prototype-Version': Prototype.Version,
      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
    };

    if (this.method == 'post') {
      headers['Content-type'] = this.options.contentType +
        (this.options.encoding ? '; charset=' + this.options.encoding : '');

      /* Force "Connection: close" for older Mozilla browsers to work
       * around a bug where XMLHttpRequest sends an incorrect
       * Content-length header. See Mozilla Bugzilla #246651.
       */
      if (this.transport.overrideMimeType &&
          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
            headers['Connection'] = 'close';
    }

    // user-defined headers
    if (typeof this.options.requestHeaders == 'object') {
      var extras = this.options.requestHeaders;

      if (typeof extras.push == 'function')
        for (var i = 0, length = extras.length; i < length; i += 2)
          headers[extras[i]] = extras[i+1];
      else
        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
    }

    for (var name in headers)
      this.transport.setRequestHeader(name, headers[name]);
  },

  success: function() {
    return !this.transport.status
        || (this.transport.status >= 200 && this.transport.status < 300);
  },

  respondToReadyState: function(readyState) {
    var state = Ajax.Request.Events[readyState];
    var transport = this.transport, json = this.evalJSON();

    if (state == 'Complete') {
      try {
        this._complete = true;
        (this.options['on' + this.transport.status]
         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
         || Prototype.emptyFunction)(transport, json);
      } catch (e) {
        this.dispatchException(e);
      }

      if ((this.getHeader('Content-type') || 'text/javascript').strip().
        match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))
          this.evalResponse();
    }

    try {
      (this.options['on' + state] || Prototype.emptyFunction)(transport, json);
      Ajax.Responders.dispatch('on' + state, this, transport, json);
    } catch (e) {
      this.dispatchException(e);
    }

    if (state == 'Complete') {
      // avoid memory leak in MSIE: clean up
      this.transport.onreadystatechange = Prototype.emptyFunction;
    }
  },

  getHeader: function(name) {
    try {
      return this.transport.getResponseHeader(name);
    } catch (e) { return null }
  },

  evalJSON: function() {
    try {
      var json = this.getHeader('X-JSON');
      return json ? eval('(' + json + ')') : null;
    } catch (e) { return null }
  },

  evalResponse: function() {
    try {
      return eval(this.transport.responseText);
    } catch (e) {
      this.dispatchException(e);
    }
  },

  dispatchException: function(exception) {
    (this.options.onException || Prototype.emptyFunction)(this, exception);
    Ajax.Responders.dispatch('onException', this, exception);
  }
});

Ajax.Updater = Class.create();

Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
  initialize: function(container, url, options) {
    this.container = {
      success: (container.success || container),
      failure: (container.failure || (container.success ? null : container))
    }

    this.transport = Ajax.getTransport();
    this.setOptions(options);

    var onComplete = this.options.onComplete || Prototype.emptyFunction;
    this.options.onComplete = (function(transport, param) {
      this.updateContent();
      onComplete(transport, param);
    }).bind(this);

    this.request(url);
  },

  updateContent: function() {
    var receiver = this.container[this.success() ? 'success' : 'failure'];
    var response = this.transport.responseText;

    if (!this.options.evalScripts) response = response.stripScripts();

    if (receiver = $(receiver)) {
      if (this.options.insertion)
        new this.options.insertion(receiver, response);
      else
        receiver.update(response);
    }

    if (this.success()) {
      if (this.onComplete)
        setTimeout(this.onComplete.bind(this), 10);
    }
  }
});

Ajax.PeriodicalUpdater = Class.create();
Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
  initialize: function(container, url, options) {
    this.setOptions(options);
    this.onComplete = this.options.onComplete;

    this.frequency = (this.options.frequency || 2);
    this.decay = (this.options.decay || 1);

    this.updater = {};
    this.container = container;
    this.url = url;

    this.start();
  },

  start: function() {
    this.options.onComplete = this.updateComplete.bind(this);
    this.onTimerEvent();
  },

  stop: function() {
    this.updater.options.onComplete = undefined;
    clearTimeout(this.timer);
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
  },

  updateComplete: function(request) {
    if (this.options.decay) {
      this.decay = (request.responseText == this.lastText ?
        this.decay * this.options.decay : 1);

      this.lastText = request.responseText;
    }
    this.timer = setTimeout(this.onTimerEvent.bind(this),
      this.decay * this.frequency * 1000);
  },

  onTimerEvent: function() {
    this.updater = new Ajax.Updater(this.container, this.url, this.options);
  }
});
function $(element) {
  if (arguments.length > 1) {
    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
      elements.push($(arguments[i]));
    return elements;
  }
  if (typeof element == 'string')
    element = document.getElementById(element);
  return Element.extend(element);
}

if (Prototype.BrowserFeatures.XPath) {
  document._getElementsByXPath = function(expression, parentElement) {
    var results = [];
    var query = document.evaluate(expression, $(parentElement) || document,
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var i = 0, length = query.snapshotLength; i < length; i++)
      results.push(query.snapshotItem(i));
    return results;
  };
}

document.getElementsByClassName = function(className, parentElement) {
  if (Prototype.BrowserFeatures.XPath) {
    var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
    return document._getElementsByXPath(q, parentElement);
  } else {
    var children = ($(parentElement) || document.body).getElementsByTagName('*');
    var elements = [], child;
    for (var i = 0, length = children.length; i < length; i++) {
      child = children[i];
      if (Element.hasClassName(child, className))
        elements.push(Element.extend(child));
    }
    return elements;
  }
};

/*--------------------------------------------------------------------------*/

if (!window.Element)
  var Element = new Object();

Element.extend = function(element) {
  if (!element || _nativeExtensions || element.nodeType == 3) return element;

  if (!element._extended && element.tagName && element != window) {
    var methods = Object.clone(Element.Methods), cache = Element.extend.cache;

    if (element.tagName == 'FORM')
      Object.extend(methods, Form.Methods);
    if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName))
      Object.extend(methods, Form.Element.Methods);

    Object.extend(methods, Element.Methods.Simulated);

    for (var property in methods) {
      var value = methods[property];
      if (typeof value == 'function' && !(property in element))
        element[property] = cache.findOrStore(value);
    }
  }

  element._extended = true;
  return element;
};

Element.extend.cache = {
  findOrStore: function(value) {
    return this[value] = this[value] || function() {
      return value.apply(null, [this].concat($A(arguments)));
    }
  }
};

Element.Methods = {
  visible: function(element) {
    return $(element).style.display != 'none';
  },

  toggle: function(element) {
    element = $(element);
    Element[Element.visible(element) ? 'hide' : 'show'](element);
    return element;
  },

  hide: function(element) {
    $(element).style.display = 'none';
    return element;
  },

  show: function(element) {
    $(element).style.display = '';
    return element;
  },

  remove: function(element) {
    element = $(element);
    element.parentNode.removeChild(element);
    return element;
  },

  update: function(element, html) {
    html = typeof html == 'undefined' ? '' : html.toString();
    $(element).innerHTML = html.stripScripts();
    setTimeout(function() {html.evalScripts()}, 10);
    return element;
  },

  replace: function(element, html) {
    element = $(element);
    html = typeof html == 'undefined' ? '' : html.toString();
    if (element.outerHTML) {
      element.outerHTML = html.stripScripts();
    } else {
      var range = element.ownerDocument.createRange();
      range.selectNodeContents(element);
      element.parentNode.replaceChild(
        range.createContextualFragment(html.stripScripts()), element);
    }
    setTimeout(function() {html.evalScripts()}, 10);
    return element;
  },

  inspect: function(element) {
    element = $(element);
    var result = '<' + element.tagName.toLowerCase();
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
      var property = pair.first(), attribute = pair.last();
      var value = (element[property] || '').toString();
      if (value) result += ' ' + attribute + '=' + value.inspect(true);
    });
    return result + '>';
  },

  recursivelyCollect: function(element, property) {
    element = $(element);
    var elements = [];
    while (element = element[property])
      if (element.nodeType == 1)
        elements.push(Element.extend(element));
    return elements;
  },

  ancestors: function(element) {
    return $(element).recursivelyCollect('parentNode');
  },

  descendants: function(element) {
    return $A($(element).getElementsByTagName('*'));
  },

  immediateDescendants: function(element) {
    if (!(element = $(element).firstChild)) return [];
    while (element && element.nodeType != 1) element = element.nextSibling;
    if (element) return [element].concat($(element).nextSiblings());
    return [];
  },

  previousSiblings: function(element) {
    return $(element).recursivelyCollect('previousSibling');
  },

  nextSiblings: function(element) {
    return $(element).recursivelyCollect('nextSibling');
  },

  siblings: function(element) {
    element = $(element);
    return element.previousSiblings().reverse().concat(element.nextSiblings());
  },

  match: function(element, selector) {
    if (typeof selector == 'string')
      selector = new Selector(selector);
    return selector.match($(element));
  },

  up: function(element, expression, index) {
    return Selector.findElement($(element).ancestors(), expression, index);
  },

  down: function(element, expression, index) {
    return Selector.findElement($(element).descendants(), expression, index);
  },

  previous: function(element, expression, index) {
    return Selector.findElement($(element).previousSiblings(), expression, index);
  },

  next: function(element, expression, index) {
    return Selector.findElement($(element).nextSiblings(), expression, index);
  },

  getElementsBySelector: function() {
    var args = $A(arguments), element = $(args.shift());
    return Selector.findChildElements(element, args);
  },

  getElementsByClassName: function(element, className) {
    return document.getElementsByClassName(className, element);
  },

  readAttribute: function(element, name) {
    element = $(element);
    if (document.all && !window.opera) {
      var t = Element._attributeTranslations;
      if (t.values[name]) return t.values[name](element, name);
      if (t.names[name])  name = t.names[name];
      var attribute = element.attributes[name];
      if(attribute) return attribute.nodeValue;
    }
    return element.getAttribute(name);
  },

  getHeight: function(element) {
    return $(element).getDimensions().height;
  },

  getWidth: function(element) {
    return $(element).getDimensions().width;
  },

  classNames: function(element) {
    return new Element.ClassNames(element);
  },

  hasClassName: function(element, className) {
    if (!(element = $(element))) return;
    var elementClassName = element.className;
    if (elementClassName.length == 0) return false;
    if (elementClassName == className ||
        elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
      return true;
    return false;
  },

  addClassName: function(element, className) {
    if (!(element = $(element))) return;
    Element.classNames(element).add(className);
    return element;
  },

  removeClassName: function(element, className) {
    if (!(element = $(element))) return;
    Element.classNames(element).remove(className);
    return element;
  },

  toggleClassName: function(element, className) {
    if (!(element = $(element))) return;
    Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className);
    return element;
  },

  observe: function() {
    Event.observe.apply(Event, arguments);
    return $A(arguments).first();
  },

  stopObserving: function() {
    Event.stopObserving.apply(Event, arguments);
    return $A(arguments).first();
  },

  // removes whitespace-only text node children
  cleanWhitespace: function(element) {
    element = $(element);
    var node = element.firstChild;
    while (node) {
      var nextNode = node.nextSibling;
      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
        element.removeChild(node);
      node = nextNode;
    }
    return element;
  },

  empty: function(element) {
    return $(element).innerHTML.match(/^\s*$/);
  },

  descendantOf: function(element, ancestor) {
    element = $(element), ancestor = $(ancestor);
    while (element = element.parentNode)
      if (element == ancestor) return true;
    return false;
  },

  scrollTo: function(element) {
    element = $(element);
    var pos = Position.cumulativeOffset(element);
    window.scrollTo(pos[0], pos[1]);
    return element;
  },

  getStyle: function(element, style) {
    element = $(element);
    if (['float','cssFloat'].include(style))
      style = (typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat');
    style = style.camelize();
    var value = element.style[style];
    if (!value) {
      if (document.defaultView && document.defaultView.getComputedStyle) {
        var css = document.defaultView.getComputedStyle(element, null);
        value = css ? css[style] : null;
      } else if (element.currentStyle) {
        value = element.currentStyle[style];
      }
    }

    if((value == 'auto') && ['width','height'].include(style) && (element.getStyle('display') != 'none'))
      value = element['offset'+style.capitalize()] + 'px';

    if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
      if (Element.getStyle(element, 'position') == 'static') value = 'auto';
    if(style == 'opacity') {
      if(value) return parseFloat(value);
      if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
        if(value[1]) return parseFloat(value[1]) / 100;
      return 1.0;
    }
    return value == 'auto' ? null : value;
  },

  setStyle: function(element, style) {
    element = $(element);
    for (var name in style) {
      var value = style[name];
      if(name == 'opacity') {
        if (value == 1) {
          value = (/Gecko/.test(navigator.userAgent) &&
            !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0;
          if(/MSIE/.test(navigator.userAgent) && !window.opera)
            element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');
        } else if(value === '') {
          if(/MSIE/.test(navigator.userAgent) && !window.opera)
            element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');
        } else {
          if(value < 0.00001) value = 0;
          if(/MSIE/.test(navigator.userAgent) && !window.opera)
            element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') +
              'alpha(opacity='+value*100+')';
        }
      } else if(['float','cssFloat'].include(name)) name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat';
      element.style[name.camelize()] = value;
    }
    return element;
  },

  getDimensions: function(element) {
    element = $(element);
    var display = $(element).getStyle('display');
    if (display != 'none' && display != null) // Safari bug
      return {width: element.offsetWidth, height: element.offsetHeight};

    // All *Width and *Height properties give 0 on elements with display none,
    // so enable the element temporarily
    var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    var originalDisplay = els.display;
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = 'block';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
    els.display = originalDisplay;
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
  },

  makePositioned: function(element) {
    element = $(element);
    var pos = Element.getStyle(element, 'position');
    if (pos == 'static' || !pos) {
      element._madePositioned = true;
      element.style.position = 'relative';
      // Opera returns the offset relative to the positioning context, when an
      // element is position relative but top and left have not been defined
      if (window.opera) {
        element.style.top = 0;
        element.style.left = 0;
      }
    }
    return element;
  },

  undoPositioned: function(element) {
    element = $(element);
    if (element._madePositioned) {
      element._madePositioned = undefined;
      element.style.position =
        element.style.top =
        element.style.left =
        element.style.bottom =
        element.style.right = '';
    }
    return element;
  },

  makeClipping: function(element) {
    element = $(element);
    if (element._overflow) return element;
    element._overflow = element.style.overflow || 'auto';
    if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
      element.style.overflow = 'hidden';
    return element;
  },

  undoClipping: function(element) {
    element = $(element);
    if (!element._overflow) return element;
    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
    element._overflow = null;
    return element;
  }
};

Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf});

Element._attributeTranslations = {};

Element._attributeTranslations.names = {
  colspan:   "colSpan",
  rowspan:   "rowSpan",
  valign:    "vAlign",
  datetime:  "dateTime",
  accesskey: "accessKey",
  tabindex:  "tabIndex",
  enctype:   "encType",
  maxlength: "maxLength",
  readonly:  "readOnly",
  longdesc:  "longDesc"
};

Element._attributeTranslations.values = {
  _getAttr: function(element, attribute) {
    return element.getAttribute(attribute, 2);
  },

  _flag: function(element, attribute) {
    return $(element).hasAttribute(attribute) ? attribute : null;
  },

  style: function(element) {
    return element.style.cssText.toLowerCase();
  },

  title: function(element) {
    var node = element.getAttributeNode('title');
    return node.specified ? node.nodeValue : null;
  }
};

Object.extend(Element._attributeTranslations.values, {
  href: Element._attributeTranslations.values._getAttr,
  src:  Element._attributeTranslations.values._getAttr,
  disabled: Element._attributeTranslations.values._flag,
  checked:  Element._attributeTranslations.values._flag,
  readonly: Element._attributeTranslations.values._flag,
  multiple: Element._attributeTranslations.values._flag
});

Element.Methods.Simulated = {
  hasAttribute: function(element, attribute) {
    var t = Element._attributeTranslations;
    attribute = t.names[attribute] || attribute;
    return $(element).getAttributeNode(attribute).specified;
  }
};

// IE is missing .innerHTML support for TABLE-related elements
if (document.all && !window.opera){
  Element.Methods.update = function(element, html) {
    element = $(element);
    html = typeof html == 'undefined' ? '' : html.toString();
    var tagName = element.tagName.toUpperCase();
    if (['THEAD','TBODY','TR','TD'].include(tagName)) {
      var div = document.createElement('div');
      switch (tagName) {
        case 'THEAD':
        case 'TBODY':
          div.innerHTML = '<table><tbody>' +  html.stripScripts() + '</tbody></table>';
          depth = 2;
          break;
        case 'TR':
          div.innerHTML = '<table><tbody><tr>' +  html.stripScripts() + '</tr></tbody></table>';
          depth = 3;
          break;
        case 'TD':
          div.innerHTML = '<table><tbody><tr><td>' +  html.stripScripts() + '</td></tr></tbody></table>';
          depth = 4;
      }
      $A(element.childNodes).each(function(node){
        element.removeChild(node)
      });
      depth.times(function(){ div = div.firstChild });

      $A(div.childNodes).each(
        function(node){ element.appendChild(node) });
    } else {
      element.innerHTML = html.stripScripts();
    }
    setTimeout(function() {html.evalScripts()}, 10);
    return element;
  }
};

Object.extend(Element, Element.Methods);

var _nativeExtensions = false;

if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))
  ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) {
    var className = 'HTML' + tag + 'Element';
    if(window[className]) return;
    var klass = window[className] = {};
    klass.prototype = document.createElement(tag ? tag.toLowerCase() : 'div').__proto__;
  });

Element.addMethods = function(methods) {
  Object.extend(Element.Methods, methods || {});

  function copy(methods, destination, onlyIfAbsent) {
    onlyIfAbsent = onlyIfAbsent || false;
    var cache = Element.extend.cache;
    for (var property in methods) {
      var value = methods[property];
      if (!onlyIfAbsent || !(property in destination))
        destination[property] = cache.findOrStore(value);
    }
  }

  if (typeof HTMLElement != 'undefined') {
    copy(Element.Methods, HTMLElement.prototype);
    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
    copy(Form.Methods, HTMLFormElement.prototype);
    [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(function(klass) {
      copy(Form.Element.Methods, klass.prototype);
    });
    _nativeExtensions = true;
  }
}

var Toggle = new Object();
Toggle.display = Element.toggle;

/*--------------------------------------------------------------------------*/

Abstract.Insertion = function(adjacency) {
  this.adjacency = adjacency;
}

Abstract.Insertion.prototype = {
  initialize: function(element, content) {
    this.element = $(element);
    this.content = content.stripScripts();

    if (this.adjacency && this.element.insertAdjacentHTML) {
      try {
        this.element.insertAdjacentHTML(this.adjacency, this.content);
      } catch (e) {
        var tagName = this.element.tagName.toUpperCase();
        if (['TBODY', 'TR'].include(tagName)) {
          this.insertContent(this.contentFromAnonymousTable());
        } else {
          throw e;
        }
      }
    } else {
      this.range = this.element.ownerDocument.createRange();
      if (this.initializeRange) this.initializeRange();
      this.insertContent([this.range.createContextualFragment(this.content)]);
    }

    setTimeout(function() {content.evalScripts()}, 10);
  },

  contentFromAnonymousTable: function() {
    var div = document.createElement('div');
    div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
    return $A(div.childNodes[0].childNodes[0].childNodes);
  }
}

var Insertion = new Object();

Insertion.Before = Class.create();
Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
  initializeRange: function() {
    this.range.setStartBefore(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.parentNode.insertBefore(fragment, this.element);
    }).bind(this));
  }
});

Insertion.Top = Class.create();
Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
  initializeRange: function() {
    this.range.selectNodeContents(this.element);
    this.range.collapse(true);
  },

  insertContent: function(fragments) {
    fragments.reverse(false).each((function(fragment) {
      this.element.insertBefore(fragment, this.element.firstChild);
    }).bind(this));
  }
});

Insertion.Bottom = Class.create();
Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
  initializeRange: function() {
    this.range.selectNodeContents(this.element);
    this.range.collapse(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.appendChild(fragment);
    }).bind(this));
  }
});

Insertion.After = Class.create();
Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
  initializeRange: function() {
    this.range.setStartAfter(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.parentNode.insertBefore(fragment,
        this.element.nextSibling);
    }).bind(this));
  }
});

/*--------------------------------------------------------------------------*/

Element.ClassNames = Class.create();
Element.ClassNames.prototype = {
  initialize: function(element) {
    this.element = $(element);
  },

  _each: function(iterator) {
    this.element.className.split(/\s+/).select(function(name) {
      return name.length > 0;
    })._each(iterator);
  },

  set: function(className) {
    this.element.className = className;
  },

  add: function(classNameToAdd) {
    if (this.include(classNameToAdd)) return;
    this.set($A(this).concat(classNameToAdd).join(' '));
  },

  remove: function(classNameToRemove) {
    if (!this.include(classNameToRemove)) return;
    this.set($A(this).without(classNameToRemove).join(' '));
  },

  toString: function() {
    return $A(this).join(' ');
  }
};

Object.extend(Element.ClassNames.prototype, Enumerable);
var Selector = Class.create();
Selector.prototype = {
  initialize: function(expression) {
    this.params = {classNames: []};
    this.expression = expression.toString().strip();
    this.parseExpression();
    this.compileMatcher();
  },

  parseExpression: function() {
    function abort(message) { throw 'Parse error in selector: ' + message; }

    if (this.expression == '')  abort('empty expression');

    var params = this.params, expr = this.expression, match, modifier, clause, rest;
    while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) {
      params.attributes = params.attributes || [];
      params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''});
      expr = match[1];
    }

    if (expr == '*') return this.params.wildcard = true;

    while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {
      modifier = match[1], clause = match[2], rest = match[3];
      switch (modifier) {
        case '#':       params.id = clause; break;
        case '.':       params.classNames.push(clause); break;
        case '':
        case undefined: params.tagName = clause.toUpperCase(); break;
        default:        abort(expr.inspect());
      }
      expr = rest;
    }

    if (expr.length > 0) abort(expr.inspect());
  },

  buildMatchExpression: function() {
    var params = this.params, conditions = [], clause;

    if (params.wildcard)
      conditions.push('true');
    if (clause = params.id)
      conditions.push('element.readAttribute("id") == ' + clause.inspect());
    if (clause = params.tagName)
      conditions.push('element.tagName.toUpperCase() == ' + clause.inspect());
    if ((clause = params.classNames).length > 0)
      for (var i = 0, length = clause.length; i < length; i++)
        conditions.push('element.hasClassName(' + clause[i].inspect() + ')');
    if (clause = params.attributes) {
      clause.each(function(attribute) {
        var value = 'element.readAttribute(' + attribute.name.inspect() + ')';
        var splitValueBy = function(delimiter) {
          return value + ' && ' + value + '.split(' + delimiter.inspect() + ')';
        }

        switch (attribute.operator) {
          case '=':       conditions.push(value + ' == ' + attribute.value.inspect()); break;
          case '~=':      conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break;
          case '|=':      conditions.push(
                            splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect()
                          ); break;
          case '!=':      conditions.push(value + ' != ' + attribute.value.inspect()); break;
          case '':
          case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break;
          default:        throw 'Unknown operator ' + attribute.operator + ' in selector';
        }
      });
    }

    return conditions.join(' && ');
  },

  compileMatcher: function() {
    this.match = new Function('element', 'if (!element.tagName) return false; \
      element = $(element); \
      return ' + this.buildMatchExpression());
  },

  findElements: function(scope) {
    var element;

    if (element = $(this.params.id))
      if (this.match(element))
        if (!scope || Element.childOf(element, scope))
          return [element];

    scope = (scope || document).getElementsByTagName(this.params.tagName || '*');

    var results = [];
    for (var i = 0, length = scope.length; i < length; i++)
      if (this.match(element = scope[i]))
        results.push(Element.extend(element));

    return results;
  },

  toString: function() {
    return this.expression;
  }
}

Object.extend(Selector, {
  matchElements: function(elements, expression) {
    var selector = new Selector(expression);
    return elements.select(selector.match.bind(selector)).map(Element.extend);
  },

  findElement: function(elements, expression, index) {
    if (typeof expression == 'number') index = expression, expression = false;
    return Selector.matchElements(elements, expression || '*')[index || 0];
  },

  findChildElements: function(element, expressions) {
    return expressions.map(function(expression) {
      return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) {
        var selector = new Selector(expr);
        return results.inject([], function(elements, result) {
          return elements.concat(selector.findElements(result || element));
        });
      });
    }).flatten();
  }
});

function $$() {
  return Selector.findChildElements(document, $A(arguments));
}
var Form = {
  reset: function(form) {
    $(form).reset();
    return form;
  },

  serializeElements: function(elements, getHash) {
    var data = elements.inject({}, function(result, element) {
      if (!element.disabled && element.name) {
        var key = element.name, value = $(element).getValue();
        if (value != undefined) {
          if (result[key]) {
            if (result[key].constructor != Array) result[key] = [result[key]];
            result[key].push(value);
          }
          else result[key] = value;
        }
      }
      return result;
    });

    return getHash ? data : Hash.toQueryString(data);
  }
};

Form.Methods = {
  serialize: function(form, getHash) {
    return Form.serializeElements(Form.getElements(form), getHash);
  },

  getElements: function(form) {
    return $A($(form).getElementsByTagName('*')).inject([],
      function(elements, child) {
        if (Form.Element.Serializers[child.tagName.toLowerCase()])
          elements.push(Element.extend(child));
        return elements;
      }
    );
  },

  getInputs: function(form, typeName, name) {
    form = $(form);
    var inputs = form.getElementsByTagName('input');

    if (!typeName && !name) return $A(inputs).map(Element.extend);

    for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
      var input = inputs[i];
      if ((typeName && input.type != typeName) || (name && input.name != name))
        continue;
      matchingInputs.push(Element.extend(input));
    }

    return matchingInputs;
  },

  disable: function(form) {
    form = $(form);
    form.getElements().each(function(element) {
      element.blur();
      element.disabled = 'true';
    });
    return form;
  },

  enable: function(form) {
    form = $(form);
    form.getElements().each(function(element) {
      element.disabled = '';
    });
    return form;
  },

  findFirstElement: function(form) {
    return $(form).getElements().find(function(element) {
      return element.type != 'hidden' && !element.disabled &&
        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
    });
  },

  focusFirstElement: function(form) {
    form = $(form);
    form.findFirstElement().activate();
    return form;
  }
}

Object.extend(Form, Form.Methods);

/*--------------------------------------------------------------------------*/

Form.Element = {
  focus: function(element) {
    $(element).focus();
    return element;
  },

  select: function(element) {
    $(element).select();
    return element;
  }
}

Form.Element.Methods = {
  serialize: function(element) {
    element = $(element);
    if (!element.disabled && element.name) {
      var value = element.getValue();
      if (value != undefined) {
        var pair = {};
        pair[element.name] = value;
        return Hash.toQueryString(pair);
      }
    }
    return '';
  },

  getValue: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    return Form.Element.Serializers[method](element);
  },

  clear: function(element) {
    $(element).value = '';
    return element;
  },

  present: function(element) {
    return $(element).value != '';
  },

  activate: function(element) {
    element = $(element);
    element.focus();
    if (element.select && ( element.tagName.toLowerCase() != 'input' ||
      !['button', 'reset', 'submit'].include(element.type) ) )
      element.select();
    return element;
  },

  disable: function(element) {
    element = $(element);
    element.disabled = true;
    return element;
  },

  enable: function(element) {
    element = $(element);
    element.blur();
    element.disabled = false;
    return element;
  }
}

Object.extend(Form.Element, Form.Element.Methods);
var Field = Form.Element;
var $F = Form.Element.getValue;

/*--------------------------------------------------------------------------*/

Form.Element.Serializers = {
  input: function(element) {
    switch (element.type.toLowerCase()) {
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element);
      default:
        return Form.Element.Serializers.textarea(element);
    }
  },

  inputSelector: function(element) {
    return element.checked ? element.value : null;
  },

  textarea: function(element) {
    return element.value;
  },

  select: function(element) {
    return this[element.type == 'select-one' ?
      'selectOne' : 'selectMany'](element);
  },

  selectOne: function(element) {
    var index = element.selectedIndex;
    return index >= 0 ? this.optionValue(element.options[index]) : null;
  },

  selectMany: function(element) {
    var values, length = element.length;
    if (!length) return null;

    for (var i = 0, values = []; i < length; i++) {
      var opt = element.options[i];
      if (opt.selected) values.push(this.optionValue(opt));
    }
    return values;
  },

  optionValue: function(opt) {
    // extend element because hasAttribute may not be native
    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
  }
}

/*--------------------------------------------------------------------------*/

Abstract.TimedObserver = function() {}
Abstract.TimedObserver.prototype = {
  initialize: function(element, frequency, callback) {
    this.frequency = frequency;
    this.element   = $(element);
    this.callback  = callback;

    this.lastValue = this.getValue();
    this.registerCallback();
  },

  registerCallback: function() {
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  onTimerEvent: function() {
    var value = this.getValue();
    var changed = ('string' == typeof this.lastValue && 'string' == typeof value
      ? this.lastValue != value : String(this.lastValue) != String(value));
    if (changed) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  }
}

Form.Element.Observer = Class.create();
Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.Observer = Class.create();
Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
  getValue: function() {
    return Form.serialize(this.element);
  }
});

/*--------------------------------------------------------------------------*/

Abstract.EventObserver = function() {}
Abstract.EventObserver.prototype = {
  initialize: function(element, callback) {
    this.element  = $(element);
    this.callback = callback;

    this.lastValue = this.getValue();
    if (this.element.tagName.toLowerCase() == 'form')
      this.registerFormCallbacks();
    else
      this.registerCallback(this.element);
  },

  onElementEvent: function() {
    var value = this.getValue();
    if (this.lastValue != value) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  },

  registerFormCallbacks: function() {
    Form.getElements(this.element).each(this.registerCallback.bind(this));
  },

  registerCallback: function(element) {
    if (element.type) {
      switch (element.type.toLowerCase()) {
        case 'checkbox':
        case 'radio':
          Event.observe(element, 'click', this.onElementEvent.bind(this));
          break;
        default:
          Event.observe(element, 'change', this.onElementEvent.bind(this));
          break;
      }
    }
  }
}

Form.Element.EventObserver = Class.create();
Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.EventObserver = Class.create();
Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
  getValue: function() {
    return Form.serialize(this.element);
  }
});
if (!window.Event) {
  var Event = new Object();
}

Object.extend(Event, {
  KEY_BACKSPACE: 8,
  KEY_TAB:       9,
  KEY_RETURN:   13,
  KEY_ESC:      27,
  KEY_LEFT:     37,
  KEY_UP:       38,
  KEY_RIGHT:    39,
  KEY_DOWN:     40,
  KEY_DELETE:   46,
  KEY_HOME:     36,
  KEY_END:      35,
  KEY_PAGEUP:   33,
  KEY_PAGEDOWN: 34,

  element: function(event) {
    return event.target || event.srcElement;
  },

  isLeftClick: function(event) {
    return (((event.which) && (event.which == 1)) ||
            ((event.button) && (event.button == 1)));
  },

  pointerX: function(event) {
    return event.pageX || (event.clientX +
      (document.documentElement.scrollLeft || document.body.scrollLeft));
  },

  pointerY: function(event) {
    return event.pageY || (event.clientY +
      (document.documentElement.scrollTop || document.body.scrollTop));
  },

  stop: function(event) {
    if (event.preventDefault) {
      event.preventDefault();
      event.stopPropagation();
    } else {
      event.returnValue = false;
      event.cancelBubble = true;
    }
  },

  // find the first node with the given tagName, starting from the
  // node the event was triggered on; traverses the DOM upwards
  findElement: function(event, tagName) {
    var element = Event.element(event);
    while (element.parentNode && (!element.tagName ||
        (element.tagName.toUpperCase() != tagName.toUpperCase())))
      element = element.parentNode;
    return element;
  },

  observers: false,

  _observeAndCache: function(element, name, observer, useCapture) {
    if (!this.observers) this.observers = [];
    if (element.addEventListener) {
      this.observers.push([element, name, observer, useCapture]);
      element.addEventListener(name, observer, useCapture);
    } else if (element.attachEvent) {
      this.observers.push([element, name, observer, useCapture]);
      element.attachEvent('on' + name, observer);
    }
  },

  unloadCache: function() {
    if (!Event.observers) return;
    for (var i = 0, length = Event.observers.length; i < length; i++) {
      Event.stopObserving.apply(this, Event.observers[i]);
      Event.observers[i][0] = null;
    }
    Event.observers = false;
  },

  observe: function(element, name, observer, useCapture) {
    element = $(element);
    useCapture = useCapture || false;

    if (name == 'keypress' &&
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
        || element.attachEvent))
      name = 'keydown';

    Event._observeAndCache(element, name, observer, useCapture);
  },

  stopObserving: function(element, name, observer, useCapture) {
    element = $(element);
    useCapture = useCapture || false;

    if (name == 'keypress' &&
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
        || element.detachEvent))
      name = 'keydown';

    if (element.removeEventListener) {
      element.removeEventListener(name, observer, useCapture);
    } else if (element.detachEvent) {
      try {
        element.detachEvent('on' + name, observer);
      } catch (e) {}
    }
  }
});

/* prevent memory leaks in IE */
if (navigator.appVersion.match(/\bMSIE\b/))
  Event.observe(window, 'unload', Event.unloadCache, false);
var Position = {
  // set to true if needed, warning: firefox performance problems
  // NOT neeeded for page scrolling, only if draggable contained in
  // scrollable elements
  includeScrollOffsets: false,

  // must be called before calling withinIncludingScrolloffset, every time the
  // page is scrolled
  prepare: function() {
    this.deltaX =  window.pageXOffset
                || document.documentElement.scrollLeft
                || document.body.scrollLeft
                || 0;
    this.deltaY =  window.pageYOffset
                || document.documentElement.scrollTop
                || document.body.scrollTop
                || 0;
  },

  realOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.scrollTop  || 0;
      valueL += element.scrollLeft || 0;
      element = element.parentNode;
    } while (element);
    return [valueL, valueT];
  },

  cumulativeOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
    } while (element);
    return [valueL, valueT];
  },

  positionedOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
      if (element) {
        if(element.tagName=='BODY') break;
        var p = Element.getStyle(element, 'position');
        if (p == 'relative' || p == 'absolute') break;
      }
    } while (element);
    return [valueL, valueT];
  },

  offsetParent: function(element) {
    if (element.offsetParent) return element.offsetParent;
    if (element == document.body) return element;

    while ((element = element.parentNode) && element != document.body)
      if (Element.getStyle(element, 'position') != 'static')
        return element;

    return document.body;
  },

  // caches x/y coordinate pair to use with overlap
  within: function(element, x, y) {
    if (this.includeScrollOffsets)
      return this.withinIncludingScrolloffsets(element, x, y);
    this.xcomp = x;
    this.ycomp = y;
    this.offset = this.cumulativeOffset(element);

    return (y >= this.offset[1] &&
            y <  this.offset[1] + element.offsetHeight &&
            x >= this.offset[0] &&
            x <  this.offset[0] + element.offsetWidth);
  },

  withinIncludingScrolloffsets: function(element, x, y) {
    var offsetcache = this.realOffset(element);

    this.xcomp = x + offsetcache[0] - this.deltaX;
    this.ycomp = y + offsetcache[1] - this.deltaY;
    this.offset = this.cumulativeOffset(element);

    return (this.ycomp >= this.offset[1] &&
            this.ycomp <  this.offset[1] + element.offsetHeight &&
            this.xcomp >= this.offset[0] &&
            this.xcomp <  this.offset[0] + element.offsetWidth);
  },

  // within must be called directly before
  overlap: function(mode, element) {
    if (!mode) return 0;
    if (mode == 'vertical')
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
        element.offsetHeight;
    if (mode == 'horizontal')
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
        element.offsetWidth;
  },

  page: function(forElement) {
    var valueT = 0, valueL = 0;

    var element = forElement;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;

      // Safari fix
      if (element.offsetParent==document.body)
        if (Element.getStyle(element,'position')=='absolute') break;

    } while (element = element.offsetParent);

    element = forElement;
    do {
      if (!window.opera || element.tagName=='BODY') {
        valueT -= element.scrollTop  || 0;
        valueL -= element.scrollLeft || 0;
      }
    } while (element = element.parentNode);

    return [valueL, valueT];
  },

  clone: function(source, target) {
    var options = Object.extend({
      setLeft:    true,
      setTop:     true,
      setWidth:   true,
      setHeight:  true,
      offsetTop:  0,
      offsetLeft: 0
    }, arguments[2] || {})

    // find page position of source
    source = $(source);
    var p = Position.page(source);

    // find coordinate system to use
    target = $(target);
    var delta = [0, 0];
    var parent = null;
    // delta [0,0] will do fine with position: fixed elements,
    // position:absolute needs offsetParent deltas
    if (Element.getStyle(target,'position') == 'absolute') {
      parent = Position.offsetParent(target);
      delta = Position.page(parent);
    }

    // correct by body offsets (fixes Safari)
    if (parent == document.body) {
      delta[0] -= document.body.offsetLeft;
      delta[1] -= document.body.offsetTop;
    }

    // set position
    if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
    if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
    if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
    if(options.setHeight) target.style.height = source.offsetHeight + 'px';
  },

  absolutize: function(element) {
    element = $(element);
    if (element.style.position == 'absolute') return;
    Position.prepare();

    var offsets = Position.positionedOffset(element);
    var top     = offsets[1];
    var left    = offsets[0];
    var width   = element.clientWidth;
    var height  = element.clientHeight;

    element._originalLeft   = left - parseFloat(element.style.left  || 0);
    element._originalTop    = top  - parseFloat(element.style.top || 0);
    element._originalWidth  = element.style.width;
    element._originalHeight = element.style.height;

    element.style.position = 'absolute';
    element.style.top    = top + 'px';
    element.style.left   = left + 'px';
    element.style.width  = width + 'px';
    element.style.height = height + 'px';
  },

  relativize: function(element) {
    element = $(element);
    if (element.style.position == 'relative') return;
    Position.prepare();

    element.style.position = 'relative';
    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);

    element.style.top    = top + 'px';
    element.style.left   = left + 'px';
    element.style.height = element._originalHeight;
    element.style.width  = element._originalWidth;
  }
}

// Safari returns margins on body which is incorrect if the child is absolutely
// positioned.  For performance reasons, redefine Position.cumulativeOffset for
// KHTML/WebKit only.
if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
  Position.cumulativeOffset = function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      if (element.offsetParent == document.body)
        if (Element.getStyle(element, 'position') == 'absolute') break;

      element = element.offsetParent;
    } while (element);

    return [valueL, valueT];
  }
}

Element.addMethods();                                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/javascripts/jquery-1.4.2.min.js                                               0000666 0000000 0000000 00000214756 12534142432 021300  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*!
 * jQuery JavaScript Library v1.4.2
 * http://jquery.com/
 *
 * Copyright 2010, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2010, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Sat Feb 13 22:33:48 2010 -0500
 */
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
                  ./mvappsvr/docroot/db/javascripts/jquery.url.js                                                     0000777 0000000 0000000 00000014264 12534142432 020652  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /* ===========================================================================
 *
 * JQuery URL Parser
 * Version 1.0
 * Parses URLs and provides easy access to information within them.
 *
 * Author: Mark Perkins
 * Author email: mark@allmarkedup.com
 *
 * For full documentation and more go to http://projects.allmarkedup.com/jquery_url_parser/
 *
 * ---------------------------------------------------------------------------
 *
 * CREDITS:
 *
 * Parser based on the Regex-based URI parser by Steven Levithan.
 * For more information (including a detailed explaination of the differences
 * between the 'loose' and 'strict' pasing modes) visit http://blog.stevenlevithan.com/archives/parseuri
 *
 * ---------------------------------------------------------------------------
 *
 * LICENCE:
 *
 * Released under a MIT Licence. See licence.txt that should have been supplied with this file,
 * or visit http://projects.allmarkedup.com/jquery_url_parser/licence.txt
 *
 * ---------------------------------------------------------------------------
 * 
 * EXAMPLES OF USE:
 *
 * Get the domain name (host) from the current page URL
 * jQuery.url.attr("host")
 *
 * Get the query string value for 'item' for the current page
 * jQuery.url.param("item") // null if it doesn't exist
 *
 * Get the second segment of the URI of the current page
 * jQuery.url.segment(2) // null if it doesn't exist
 *
 * Get the protocol of a manually passed in URL
 * jQuery.url.setUrl("http://allmarkedup.com/").attr("protocol") // returns 'http'
 *
 */

jQuery.url = function()
{
	var segments = {};
	
	var parsed = {};
	
	/**
    * Options object. Only the URI and strictMode values can be changed via the setters below.
    */
  	var options = {
	
		url : window.location, // default URI is the page in which the script is running
		
		strictMode: false, // 'loose' parsing by default
	
		key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], // keys available to query 
		
		q: {
			name: "queryKey",
			parser: /(?:^|&)([^&=]*)=?([^&]*)/g
		},
		
		parser: {
			strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,  //less intuitive, more accurate to the specs
			loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ // more intuitive, fails on relative paths and deviates from specs
		}
		
	};
	
    /**
     * Deals with the parsing of the URI according to the regex above.
 	 * Written by Steven Levithan - see credits at top.
     */		
	var parseUri = function()
	{
		str = decodeURI( options.url );
		
		var m = options.parser[ options.strictMode ? "strict" : "loose" ].exec( str );
		var uri = {};
		var i = 14;

		while ( i-- ) {
			uri[ options.key[i] ] = m[i] || "";
		}

		uri[ options.q.name ] = {};
		uri[ options.key[12] ].replace( options.q.parser, function ( $0, $1, $2 ) {
			if ($1) {
				uri[options.q.name][$1] = $2;
			}
		});

		return uri;
	};

    /**
     * Returns the value of the passed in key from the parsed URI.
  	 * 
	 * @param string key The key whose value is required
     */		
	var key = function( key )
	{
		if ( ! parsed.length )
		{
			setUp(); // if the URI has not been parsed yet then do this first...	
		} 
		if ( key == "base" )
		{
			if ( parsed.port !== null && parsed.port !== "" )
			{
				return parsed.protocol+"://"+parsed.host+":"+parsed.port+"/";	
			}
			else
			{
				return parsed.protocol+"://"+parsed.host+"/";
			}
		}
	
		return ( parsed[key] === "" ) ? null : parsed[key];
	};
	
	/**
     * Returns the value of the required query string parameter.
  	 * 
	 * @param string item The parameter whose value is required
     */		
	var param = function( item )
	{
		if ( ! parsed.length )
		{
			setUp(); // if the URI has not been parsed yet then do this first...	
		}
		return ( parsed.queryKey[item] === null ) ? null : parsed.queryKey[item];
	};

    /**
     * 'Constructor' (not really!) function.
     *  Called whenever the URI changes to kick off re-parsing of the URI and splitting it up into segments. 
     */	
	var setUp = function()
	{
		parsed = parseUri();
		
		getSegments();	
	};
	
    /**
     * Splits up the body of the URI into segments (i.e. sections delimited by '/')
     */
	var getSegments = function()
	{
		var p = parsed.path;
		segments = []; // clear out segments array
		segments = parsed.path.length == 1 ? {} : ( p.charAt( p.length - 1 ) == "/" ? p.substring( 1, p.length - 1 ) : path = p.substring( 1 ) ).split("/");
	};
	
	return {
		
	    /**
	     * Sets the parsing mode - either strict or loose. Set to loose by default.
	     *
	     * @param string mode The mode to set the parser to. Anything apart from a value of 'strict' will set it to loose!
	     */
		setMode : function( mode )
		{
			strictMode = mode == "strict" ? true : false;
			return this;
		},
		
		/**
	     * Sets URI to parse if you don't want to to parse the current page's URI.
		 * Calling the function with no value for newUri resets it to the current page's URI.
	     *
	     * @param string newUri The URI to parse.
	     */		
		setUrl : function( newUri )
		{
			options.url = newUri === undefined ? window.location : newUri;
			setUp();
			return this;
		},		
		
		/**
	     * Returns the value of the specified URI segment. Segments are numbered from 1 to the number of segments.
		 * For example the URI http://test.com/about/company/ segment(1) would return 'about'.
		 *
		 * If no integer is passed into the function it returns the number of segments in the URI.
	     *
	     * @param int pos The position of the segment to return. Can be empty.
	     */	
		segment : function( pos )
		{
			if ( ! parsed.length )
			{
				setUp(); // if the URI has not been parsed yet then do this first...	
			} 
			if ( pos === undefined )
			{
				return segments.length;
			}
			return ( segments[pos] === "" || segments[pos] === undefined ) ? null : segments[pos];
		},
		
		attr : key, // provides public access to private 'key' function - see above
		
		param : param // provides public access to private 'param' function - see above
		
	};
	
}();                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/javascripts/unittest.js                                                       0000777 0000000 0000000 00000047117 12534142432 020414  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   // script.aculo.us unittest.js v1.7.0, Fri Jan 19 19:16:36 CET 2007

// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//           (c) 2005, 2006 Jon Tirsen (http://www.tirsen.com)
//           (c) 2005, 2006 Michael Schuerig (http://www.schuerig.de/michael/)
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

// experimental, Firefox-only
Event.simulateMouse = function(element, eventName) {
  var options = Object.extend({
    pointerX: 0,
    pointerY: 0,
    buttons:  0,
    ctrlKey:  false,
    altKey:   false,
    shiftKey: false,
    metaKey:  false
  }, arguments[2] || {});
  var oEvent = document.createEvent("MouseEvents");
  oEvent.initMouseEvent(eventName, true, true, document.defaultView, 
    options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY, 
    options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, 0, $(element));
  
  if(this.mark) Element.remove(this.mark);
  this.mark = document.createElement('div');
  this.mark.appendChild(document.createTextNode(" "));
  document.body.appendChild(this.mark);
  this.mark.style.position = 'absolute';
  this.mark.style.top = options.pointerY + "px";
  this.mark.style.left = options.pointerX + "px";
  this.mark.style.width = "5px";
  this.mark.style.height = "5px;";
  this.mark.style.borderTop = "1px solid red;"
  this.mark.style.borderLeft = "1px solid red;"
  
  if(this.step)
    alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options));
  
  $(element).dispatchEvent(oEvent);
};

// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2.
// You need to downgrade to 1.0.4 for now to get this working
// See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much
Event.simulateKey = function(element, eventName) {
  var options = Object.extend({
    ctrlKey: false,
    altKey: false,
    shiftKey: false,
    metaKey: false,
    keyCode: 0,
    charCode: 0
  }, arguments[2] || {});

  var oEvent = document.createEvent("KeyEvents");
  oEvent.initKeyEvent(eventName, true, true, window, 
    options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
    options.keyCode, options.charCode );
  $(element).dispatchEvent(oEvent);
};

Event.simulateKeys = function(element, command) {
  for(var i=0; i<command.length; i++) {
    Event.simulateKey(element,'keypress',{charCode:command.charCodeAt(i)});
  }
};

var Test = {}
Test.Unit = {};

// security exception workaround
Test.Unit.inspect = Object.inspect;

Test.Unit.Logger = Class.create();
Test.Unit.Logger.prototype = {
  initialize: function(log) {
    this.log = $(log);
    if (this.log) {
      this._createLogTable();
    }
  },
  start: function(testName) {
    if (!this.log) return;
    this.testName = testName;
    this.lastLogLine = document.createElement('tr');
    this.statusCell = document.createElement('td');
    this.nameCell = document.createElement('td');
    this.nameCell.className = "nameCell";
    this.nameCell.appendChild(document.createTextNode(testName));
    this.messageCell = document.createElement('td');
    this.lastLogLine.appendChild(this.statusCell);
    this.lastLogLine.appendChild(this.nameCell);
    this.lastLogLine.appendChild(this.messageCell);
    this.loglines.appendChild(this.lastLogLine);
  },
  finish: function(status, summary) {
    if (!this.log) return;
    this.lastLogLine.className = status;
    this.statusCell.innerHTML = status;
    this.messageCell.innerHTML = this._toHTML(summary);
    this.addLinksToResults();
  },
  message: function(message) {
    if (!this.log) return;
    this.messageCell.innerHTML = this._toHTML(message);
  },
  summary: function(summary) {
    if (!this.log) return;
    this.logsummary.innerHTML = this._toHTML(summary);
  },
  _createLogTable: function() {
    this.log.innerHTML =
    '<div id="logsummary"></div>' +
    '<table id="logtable">' +
    '<thead><tr><th>Status</th><th>Test</th><th>Message</th></tr></thead>' +
    '<tbody id="loglines"></tbody>' +
    '</table>';
    this.logsummary = $('logsummary')
    this.loglines = $('loglines');
  },
  _toHTML: function(txt) {
    return txt.escapeHTML().replace(/\n/g,"<br/>");
  },
  addLinksToResults: function(){ 
    $$("tr.failed .nameCell").each( function(td){ // todo: limit to children of this.log
      td.title = "Run only this test"
      Event.observe(td, 'click', function(){ window.location.search = "?tests=" + td.innerHTML;});
    });
    $$("tr.passed .nameCell").each( function(td){ // todo: limit to children of this.log
      td.title = "Run all tests"
      Event.observe(td, 'click', function(){ window.location.search = "";});
    });
  }
}

Test.Unit.Runner = Class.create();
Test.Unit.Runner.prototype = {
  initialize: function(testcases) {
    this.options = Object.extend({
      testLog: 'testlog'
    }, arguments[1] || {});
    this.options.resultsURL = this.parseResultsURLQueryParameter();
    this.options.tests      = this.parseTestsQueryParameter();
    if (this.options.testLog) {
      this.options.testLog = $(this.options.testLog) || null;
    }
    if(this.options.tests) {
      this.tests = [];
      for(var i = 0; i < this.options.tests.length; i++) {
        if(/^test/.test(this.options.tests[i])) {
          this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"]));
        }
      }
    } else {
      if (this.options.test) {
        this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])];
      } else {
        this.tests = [];
        for(var testcase in testcases) {
          if(/^test/.test(testcase)) {
            this.tests.push(
               new Test.Unit.Testcase(
                 this.options.context ? ' -> ' + this.options.titles[testcase] : testcase, 
                 testcases[testcase], testcases["setup"], testcases["teardown"]
               ));
          }
        }
      }
    }
    this.currentTest = 0;
    this.logger = new Test.Unit.Logger(this.options.testLog);
    setTimeout(this.runTests.bind(this), 1000);
  },
  parseResultsURLQueryParameter: function() {
    return window.location.search.parseQuery()["resultsURL"];
  },
  parseTestsQueryParameter: function(){
    if (window.location.search.parseQuery()["tests"]){
        return window.location.search.parseQuery()["tests"].split(',');
    };
  },
  // Returns:
  //  "ERROR" if there was an error,
  //  "FAILURE" if there was a failure, or
  //  "SUCCESS" if there was neither
  getResult: function() {
    var hasFailure = false;
    for(var i=0;i<this.tests.length;i++) {
      if (this.tests[i].errors > 0) {
        return "ERROR";
      }
      if (this.tests[i].failures > 0) {
        hasFailure = true;
      }
    }
    if (hasFailure) {
      return "FAILURE";
    } else {
      return "SUCCESS";
    }
  },
  postResults: function() {
    if (this.options.resultsURL) {
      new Ajax.Request(this.options.resultsURL, 
        { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false });
    }
  },
  runTests: function() {
    var test = this.tests[this.currentTest];
    if (!test) {
      // finished!
      this.postResults();
      this.logger.summary(this.summary());
      return;
    }
    if(!test.isWaiting) {
      this.logger.start(test.name);
    }
    test.run();
    if(test.isWaiting) {
      this.logger.message("Waiting for " + test.timeToWait + "ms");
      setTimeout(this.runTests.bind(this), test.timeToWait || 1000);
    } else {
      this.logger.finish(test.status(), test.summary());
      this.currentTest++;
      // tail recursive, hopefully the browser will skip the stackframe
      this.runTests();
    }
  },
  summary: function() {
    var assertions = 0;
    var failures = 0;
    var errors = 0;
    var messages = [];
    for(var i=0;i<this.tests.length;i++) {
      assertions +=   this.tests[i].assertions;
      failures   +=   this.tests[i].failures;
      errors     +=   this.tests[i].errors;
    }
    return (
      (this.options.context ? this.options.context + ': ': '') + 
      this.tests.length + " tests, " + 
      assertions + " assertions, " + 
      failures   + " failures, " +
      errors     + " errors");
  }
}

Test.Unit.Assertions = Class.create();
Test.Unit.Assertions.prototype = {
  initialize: function() {
    this.assertions = 0;
    this.failures   = 0;
    this.errors     = 0;
    this.messages   = [];
  },
  summary: function() {
    return (
      this.assertions + " assertions, " + 
      this.failures   + " failures, " +
      this.errors     + " errors" + "\n" +
      this.messages.join("\n"));
  },
  pass: function() {
    this.assertions++;
  },
  fail: function(message) {
    this.failures++;
    this.messages.push("Failure: " + message);
  },
  info: function(message) {
    this.messages.push("Info: " + message);
  },
  error: function(error) {
    this.errors++;
    this.messages.push(error.name + ": "+ error.message + "(" + Test.Unit.inspect(error) +")");
  },
  status: function() {
    if (this.failures > 0) return 'failed';
    if (this.errors > 0) return 'error';
    return 'passed';
  },
  assert: function(expression) {
    var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"';
    try { expression ? this.pass() : 
      this.fail(message); }
    catch(e) { this.error(e); }
  },
  assertEqual: function(expected, actual) {
    var message = arguments[2] || "assertEqual";
    try { (expected == actual) ? this.pass() :
      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + 
        '", actual "' + Test.Unit.inspect(actual) + '"'); }
    catch(e) { this.error(e); }
  },
  assertInspect: function(expected, actual) {
    var message = arguments[2] || "assertInspect";
    try { (expected == actual.inspect()) ? this.pass() :
      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + 
        '", actual "' + Test.Unit.inspect(actual) + '"'); }
    catch(e) { this.error(e); }
  },
  assertEnumEqual: function(expected, actual) {
    var message = arguments[2] || "assertEnumEqual";
    try { $A(expected).length == $A(actual).length && 
      expected.zip(actual).all(function(pair) { return pair[0] == pair[1] }) ?
        this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) + 
          ', actual ' + Test.Unit.inspect(actual)); }
    catch(e) { this.error(e); }
  },
  assertNotEqual: function(expected, actual) {
    var message = arguments[2] || "assertNotEqual";
    try { (expected != actual) ? this.pass() : 
      this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); }
    catch(e) { this.error(e); }
  },
  assertIdentical: function(expected, actual) { 
    var message = arguments[2] || "assertIdentical"; 
    try { (expected === actual) ? this.pass() : 
      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
        '", actual "' + Test.Unit.inspect(actual) + '"'); } 
    catch(e) { this.error(e); } 
  },
  assertNotIdentical: function(expected, actual) { 
    var message = arguments[2] || "assertNotIdentical"; 
    try { !(expected === actual) ? this.pass() : 
      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
        '", actual "' + Test.Unit.inspect(actual) + '"'); } 
    catch(e) { this.error(e); } 
  },
  assertNull: function(obj) {
    var message = arguments[1] || 'assertNull'
    try { (obj==null) ? this.pass() : 
      this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); }
    catch(e) { this.error(e); }
  },
  assertMatch: function(expected, actual) {
    var message = arguments[2] || 'assertMatch';
    var regex = new RegExp(expected);
    try { (regex.exec(actual)) ? this.pass() :
      this.fail(message + ' : regex: "' +  Test.Unit.inspect(expected) + ' did not match: ' + Test.Unit.inspect(actual) + '"'); }
    catch(e) { this.error(e); }
  },
  assertHidden: function(element) {
    var message = arguments[1] || 'assertHidden';
    this.assertEqual("none", element.style.display, message);
  },
  assertNotNull: function(object) {
    var message = arguments[1] || 'assertNotNull';
    this.assert(object != null, message);
  },
  assertType: function(expected, actual) {
    var message = arguments[2] || 'assertType';
    try { 
      (actual.constructor == expected) ? this.pass() : 
      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
        '", actual "' + (actual.constructor) + '"'); }
    catch(e) { this.error(e); }
  },
  assertNotOfType: function(expected, actual) {
    var message = arguments[2] || 'assertNotOfType';
    try { 
      (actual.constructor != expected) ? this.pass() : 
      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
        '", actual "' + (actual.constructor) + '"'); }
    catch(e) { this.error(e); }
  },
  assertInstanceOf: function(expected, actual) {
    var message = arguments[2] || 'assertInstanceOf';
    try { 
      (actual instanceof expected) ? this.pass() : 
      this.fail(message + ": object was not an instance of the expected type"); }
    catch(e) { this.error(e); } 
  },
  assertNotInstanceOf: function(expected, actual) {
    var message = arguments[2] || 'assertNotInstanceOf';
    try { 
      !(actual instanceof expected) ? this.pass() : 
      this.fail(message + ": object was an instance of the not expected type"); }
    catch(e) { this.error(e); } 
  },
  assertRespondsTo: function(method, obj) {
    var message = arguments[2] || 'assertRespondsTo';
    try {
      (obj[method] && typeof obj[method] == 'function') ? this.pass() : 
      this.fail(message + ": object doesn't respond to [" + method + "]"); }
    catch(e) { this.error(e); }
  },
  assertReturnsTrue: function(method, obj) {
    var message = arguments[2] || 'assertReturnsTrue';
    try {
      var m = obj[method];
      if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
      m() ? this.pass() : 
      this.fail(message + ": method returned false"); }
    catch(e) { this.error(e); }
  },
  assertReturnsFalse: function(method, obj) {
    var message = arguments[2] || 'assertReturnsFalse';
    try {
      var m = obj[method];
      if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
      !m() ? this.pass() : 
      this.fail(message + ": method returned true"); }
    catch(e) { this.error(e); }
  },
  assertRaise: function(exceptionName, method) {
    var message = arguments[2] || 'assertRaise';
    try { 
      method();
      this.fail(message + ": exception expected but none was raised"); }
    catch(e) {
      ((exceptionName == null) || (e.name==exceptionName)) ? this.pass() : this.error(e); 
    }
  },
  assertElementsMatch: function() {
    var expressions = $A(arguments), elements = $A(expressions.shift());
    if (elements.length != expressions.length) {
      this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions');
      return false;
    }
    elements.zip(expressions).all(function(pair, index) {
      var element = $(pair.first()), expression = pair.last();
      if (element.match(expression)) return true;
      this.fail('assertElementsMatch: (in index ' + index + ') expected ' + expression.inspect() + ' but got ' + element.inspect());
    }.bind(this)) && this.pass();
  },
  assertElementMatches: function(element, expression) {
    this.assertElementsMatch([element], expression);
  },
  benchmark: function(operation, iterations) {
    var startAt = new Date();
    (iterations || 1).times(operation);
    var timeTaken = ((new Date())-startAt);
    this.info((arguments[2] || 'Operation') + ' finished ' + 
       iterations + ' iterations in ' + (timeTaken/1000)+'s' );
    return timeTaken;
  },
  _isVisible: function(element) {
    element = $(element);
    if(!element.parentNode) return true;
    this.assertNotNull(element);
    if(element.style && Element.getStyle(element, 'display') == 'none')
      return false;
    
    return this._isVisible(element.parentNode);
  },
  assertNotVisible: function(element) {
    this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1]));
  },
  assertVisible: function(element) {
    this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1]));
  },
  benchmark: function(operation, iterations) {
    var startAt = new Date();
    (iterations || 1).times(operation);
    var timeTaken = ((new Date())-startAt);
    this.info((arguments[2] || 'Operation') + ' finished ' + 
       iterations + ' iterations in ' + (timeTaken/1000)+'s' );
    return timeTaken;
  }
}

Test.Unit.Testcase = Class.create();
Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), {
  initialize: function(name, test, setup, teardown) {
    Test.Unit.Assertions.prototype.initialize.bind(this)();
    this.name           = name;
    
    if(typeof test == 'string') {
      test = test.gsub(/(\.should[^\(]+\()/,'#{0}this,');
      test = test.gsub(/(\.should[^\(]+)\(this,\)/,'#{1}(this)');
      this.test = function() {
        eval('with(this){'+test+'}');
      }
    } else {
      this.test = test || function() {};
    }
    
    this.setup          = setup || function() {};
    this.teardown       = teardown || function() {};
    this.isWaiting      = false;
    this.timeToWait     = 1000;
  },
  wait: function(time, nextPart) {
    this.isWaiting = true;
    this.test = nextPart;
    this.timeToWait = time;
  },
  run: function() {
    try {
      try {
        if (!this.isWaiting) this.setup.bind(this)();
        this.isWaiting = false;
        this.test.bind(this)();
      } finally {
        if(!this.isWaiting) {
          this.teardown.bind(this)();
        }
      }
    }
    catch(e) { this.error(e); }
  }
});

// *EXPERIMENTAL* BDD-style testing to please non-technical folk
// This draws many ideas from RSpec http://rspec.rubyforge.org/

Test.setupBDDExtensionMethods = function(){
  var METHODMAP = {
    shouldEqual:     'assertEqual',
    shouldNotEqual:  'assertNotEqual',
    shouldEqualEnum: 'assertEnumEqual',
    shouldBeA:       'assertType',
    shouldNotBeA:    'assertNotOfType',
    shouldBeAn:      'assertType',
    shouldNotBeAn:   'assertNotOfType',
    shouldBeNull:    'assertNull',
    shouldNotBeNull: 'assertNotNull',
    
    shouldBe:        'assertReturnsTrue',
    shouldNotBe:     'assertReturnsFalse',
    shouldRespondTo: 'assertRespondsTo'
  };
  Test.BDDMethods = {};
  for(m in METHODMAP) {
    Test.BDDMethods[m] = eval(
      'function(){'+
      'var args = $A(arguments);'+
      'var scope = args.shift();'+
      'scope.'+METHODMAP[m]+'.apply(scope,(args || []).concat([this])); }');
  }
  [Array.prototype, String.prototype, Number.prototype].each(
    function(p){ Object.extend(p, Test.BDDMethods) }
  );
}

Test.context = function(name, spec, log){
  Test.setupBDDExtensionMethods();
  
  var compiledSpec = {};
  var titles = {};
  for(specName in spec) {
    switch(specName){
      case "setup":
      case "teardown":
        compiledSpec[specName] = spec[specName];
        break;
      default:
        var testName = 'test'+specName.gsub(/\s+/,'-').camelize();
        var body = spec[specName].toString().split('\n').slice(1);
        if(/^\{/.test(body[0])) body = body.slice(1);
        body.pop();
        body = body.map(function(statement){ 
          return statement.strip()
        });
        compiledSpec[testName] = body.join('\n');
        titles[testName] = specName;
    }
  }
  new Test.Unit.Runner(compiledSpec, { titles: titles, testLog: log || 'testlog', context: name });
};                                                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/javascripts/grid-widget.js                                                    0000666 0000000 0000000 00000004537 12534142432 020737  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   jQuery().ready(function()
{
    jQuery('#gridWidget tbody tr').each(function() {
        jQuery(this).find('td').each(function() {
            jQuery(this).dblclick(editCell);
        });
        jQuery(this).append('<td class="save-row disabled"><a href="#">Save Row</a></td>');
        jQuery(this).find('td:last-child > a').click(saveRow);
    });
    jQuery('#gridWidget thead tr').each(function() {
        jQuery(this).append('<th>Save</th>');
    });
});

function editCell(event)
{
    var cell = jQuery(event.target);
    cell.addClass('unsaved');
    var value = cell.text();
    var name = cell.id + '_input';
    cell.html('<input type="text" value="'+value+'" name="'+name+'" id="'+name+'"/>');
    cell.find('input').focus();
    jQuery('#' + name).blur(blurCell);
    cell.parent().find('td:last-child').removeClass('disabled');
}

function blurCell(event)
{
    var input = jQuery(event.target);
    var cell = input.parent();
    var value = input.val();
    input.remove();
    cell.text(value);
}

function saveRow(event)
{
    element = jQuery(event.target);
    row = element.parent().parent();
    if (!element.parent().hasClass('disabled')) {
        var values = {};
        var editedCells = row.find('td.unsaved');
        editedCells.each(function (index, element) {
            var cellName  = jQuery(element).attr('id');
            var value = jQuery(element).text();
            values[cellName] = value;
        });
        jQuery.get(saveUrl, values, function() {
            editedCells.removeClass('unsaved');
            element.parent().addClass('disabled');
        });
    }
    return false;
}

function addRow()
{
    var newRow = jQuery('#gridWidget tbody tr:last').clone();
    firstCell = newRow.find('th');
    var nextNumber = parseInt(firstCell.text()) + 1;
    firstCell.text(nextNumber);
    newRow.find('td').each(function(index, element) {
        element = jQuery(element);
        if(!jQuery(element).hasClass('save-row')) {
            var newId = element.attr('id').replace(/_y\d+/, '_y' + nextNumber);
            element.attr('id', newId);
            element.text('');
            element.dblclick(editCell);
            element.removeClass('unsaved');
        } else {
            element.find('a:first').click(saveRow);
            element.addClass('disabled');
        }
    });
    jQuery('#gridWidget tbody').append(newRow);
    
    
}                                                                                                                                                                 ./mvappsvr/docroot/db/javascripts/slider.js                                                         0000777 0000000 0000000 00000024243 12534142432 020012  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   // script.aculo.us slider.js v1.7.0, Fri Jan 19 19:16:36 CET 2007

// Copyright (c) 2005, 2006 Marty Haught, Thomas Fuchs 
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

if(!Control) var Control = {};
Control.Slider = Class.create();

// options:
//  axis: 'vertical', or 'horizontal' (default)
//
// callbacks:
//  onChange(value)
//  onSlide(value)
Control.Slider.prototype = {
  initialize: function(handle, track, options) {
    var slider = this;
    
    if(handle instanceof Array) {
      this.handles = handle.collect( function(e) { return $(e) });
    } else {
      this.handles = [$(handle)];
    }
    
    this.track   = $(track);
    this.options = options || {};

    this.axis      = this.options.axis || 'horizontal';
    this.increment = this.options.increment || 1;
    this.step      = parseInt(this.options.step || '1');
    this.range     = this.options.range || $R(0,1);
    
    this.value     = 0; // assure backwards compat
    this.values    = this.handles.map( function() { return 0 });
    this.spans     = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false;
    this.options.startSpan = $(this.options.startSpan || null);
    this.options.endSpan   = $(this.options.endSpan || null);

    this.restricted = this.options.restricted || false;

    this.maximum   = this.options.maximum || this.range.end;
    this.minimum   = this.options.minimum || this.range.start;

    // Will be used to align the handle onto the track, if necessary
    this.alignX = parseInt(this.options.alignX || '0');
    this.alignY = parseInt(this.options.alignY || '0');
    
    this.trackLength = this.maximumOffset() - this.minimumOffset();

    this.handleLength = this.isVertical() ? 
      (this.handles[0].offsetHeight != 0 ? 
        this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) : 
      (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth : 
        this.handles[0].style.width.replace(/px$/,""));

    this.active   = false;
    this.dragging = false;
    this.disabled = false;

    if(this.options.disabled) this.setDisabled();

    // Allowed values array
    this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
    if(this.allowedValues) {
      this.minimum = this.allowedValues.min();
      this.maximum = this.allowedValues.max();
    }

    this.eventMouseDown = this.startDrag.bindAsEventListener(this);
    this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
    this.eventMouseMove = this.update.bindAsEventListener(this);

    // Initialize handles in reverse (make sure first handle is active)
    this.handles.each( function(h,i) {
      i = slider.handles.length-1-i;
      slider.setValue(parseFloat(
        (slider.options.sliderValue instanceof Array ? 
          slider.options.sliderValue[i] : slider.options.sliderValue) || 
         slider.range.start), i);
      Element.makePositioned(h); // fix IE
      Event.observe(h, "mousedown", slider.eventMouseDown);
    });
    
    Event.observe(this.track, "mousedown", this.eventMouseDown);
    Event.observe(document, "mouseup", this.eventMouseUp);
    Event.observe(document, "mousemove", this.eventMouseMove);
    
    this.initialized = true;
  },
  dispose: function() {
    var slider = this;    
    Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
    Event.stopObserving(document, "mouseup", this.eventMouseUp);
    Event.stopObserving(document, "mousemove", this.eventMouseMove);
    this.handles.each( function(h) {
      Event.stopObserving(h, "mousedown", slider.eventMouseDown);
    });
  },
  setDisabled: function(){
    this.disabled = true;
  },
  setEnabled: function(){
    this.disabled = false;
  },  
  getNearestValue: function(value){
    if(this.allowedValues){
      if(value >= this.allowedValues.max()) return(this.allowedValues.max());
      if(value <= this.allowedValues.min()) return(this.allowedValues.min());
      
      var offset = Math.abs(this.allowedValues[0] - value);
      var newValue = this.allowedValues[0];
      this.allowedValues.each( function(v) {
        var currentOffset = Math.abs(v - value);
        if(currentOffset <= offset){
          newValue = v;
          offset = currentOffset;
        } 
      });
      return newValue;
    }
    if(value > this.range.end) return this.range.end;
    if(value < this.range.start) return this.range.start;
    return value;
  },
  setValue: function(sliderValue, handleIdx){
    if(!this.active) {
      this.activeHandleIdx = handleIdx || 0;
      this.activeHandle    = this.handles[this.activeHandleIdx];
      this.updateStyles();
    }
    handleIdx = handleIdx || this.activeHandleIdx || 0;
    if(this.initialized && this.restricted) {
      if((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
        sliderValue = this.values[handleIdx-1];
      if((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
        sliderValue = this.values[handleIdx+1];
    }
    sliderValue = this.getNearestValue(sliderValue);
    this.values[handleIdx] = sliderValue;
    this.value = this.values[0]; // assure backwards compat
    
    this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] = 
      this.translateToPx(sliderValue);
    
    this.drawSpans();
    if(!this.dragging || !this.event) this.updateFinished();
  },
  setValueBy: function(delta, handleIdx) {
    this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta, 
      handleIdx || this.activeHandleIdx || 0);
  },
  translateToPx: function(value) {
    return Math.round(
      ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) * 
      (value - this.range.start)) + "px";
  },
  translateToValue: function(offset) {
    return ((offset/(this.trackLength-this.handleLength) * 
      (this.range.end-this.range.start)) + this.range.start);
  },
  getRange: function(range) {
    var v = this.values.sortBy(Prototype.K); 
    range = range || 0;
    return $R(v[range],v[range+1]);
  },
  minimumOffset: function(){
    return(this.isVertical() ? this.alignY : this.alignX);
  },
  maximumOffset: function(){
    return(this.isVertical() ? 
      (this.track.offsetHeight != 0 ? this.track.offsetHeight :
        this.track.style.height.replace(/px$/,"")) - this.alignY : 
      (this.track.offsetWidth != 0 ? this.track.offsetWidth : 
        this.track.style.width.replace(/px$/,"")) - this.alignY);
  },  
  isVertical:  function(){
    return (this.axis == 'vertical');
  },
  drawSpans: function() {
    var slider = this;
    if(this.spans)
      $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
    if(this.options.startSpan)
      this.setSpan(this.options.startSpan,
        $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
    if(this.options.endSpan)
      this.setSpan(this.options.endSpan, 
        $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
  },
  setSpan: function(span, range) {
    if(this.isVertical()) {
      span.style.top = this.translateToPx(range.start);
      span.style.height = this.translateToPx(range.end - range.start + this.range.start);
    } else {
      span.style.left = this.translateToPx(range.start);
      span.style.width = this.translateToPx(range.end - range.start + this.range.start);
    }
  },
  updateStyles: function() {
    this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
    Element.addClassName(this.activeHandle, 'selected');
  },
  startDrag: function(event) {
    if(Event.isLeftClick(event)) {
      if(!this.disabled){
        this.active = true;
        
        var handle = Event.element(event);
        var pointer  = [Event.pointerX(event), Event.pointerY(event)];
        var track = handle;
        if(track==this.track) {
          var offsets  = Position.cumulativeOffset(this.track); 
          this.event = event;
          this.setValue(this.translateToValue( 
           (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
          ));
          var offsets  = Position.cumulativeOffset(this.activeHandle);
          this.offsetX = (pointer[0] - offsets[0]);
          this.offsetY = (pointer[1] - offsets[1]);
        } else {
          // find the handle (prevents issues with Safari)
          while((this.handles.indexOf(handle) == -1) && handle.parentNode) 
            handle = handle.parentNode;
            
          if(this.handles.indexOf(handle)!=-1) {
            this.activeHandle    = handle;
            this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
            this.updateStyles();
            
            var offsets  = Position.cumulativeOffset(this.activeHandle);
            this.offsetX = (pointer[0] - offsets[0]);
            this.offsetY = (pointer[1] - offsets[1]);
          }
        }
      }
      Event.stop(event);
    }
  },
  update: function(event) {
   if(this.active) {
      if(!this.dragging) this.dragging = true;
      this.draw(event);
      // fix AppleWebKit rendering
      if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
      Event.stop(event);
   }
  },
  draw: function(event) {
    var pointer = [Event.pointerX(event), Event.pointerY(event)];
    var offsets = Position.cumulativeOffset(this.track);
    pointer[0] -= this.offsetX + offsets[0];
    pointer[1] -= this.offsetY + offsets[1];
    this.event = event;
    this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
    if(this.initialized && this.options.onSlide)
      this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
  },
  endDrag: function(event) {
    if(this.active && this.dragging) {
      this.finishDrag(event, true);
      Event.stop(event);
    }
    this.active = false;
    this.dragging = false;
  },  
  finishDrag: function(event, success) {
    this.active = false;
    this.dragging = false;
    this.updateFinished();
  },
  updateFinished: function() {
    if(this.initialized && this.options.onChange) 
      this.options.onChange(this.values.length>1 ? this.values : this.value, this);
    this.event = null;
  }
}                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/javascripts/dragdrop.js                                                       0000777 0000000 0000000 00000073665 12534142432 020346  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   // script.aculo.us dragdrop.js v1.7.0, Fri Jan 19 19:16:36 CET 2007

// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//           (c) 2005, 2006 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
// 
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

if(typeof Effect == 'undefined')
  throw("dragdrop.js requires including script.aculo.us' effects.js library");

var Droppables = {
  drops: [],

  remove: function(element) {
    this.drops = this.drops.reject(function(d) { return d.element==$(element) });
  },

  add: function(element) {
    element = $(element);
    var options = Object.extend({
      greedy:     true,
      hoverclass: null,
      tree:       false
    }, arguments[1] || {});

    // cache containers
    if(options.containment) {
      options._containers = [];
      var containment = options.containment;
      if((typeof containment == 'object') && 
        (containment.constructor == Array)) {
        containment.each( function(c) { options._containers.push($(c)) });
      } else {
        options._containers.push($(containment));
      }
    }
    
    if(options.accept) options.accept = [options.accept].flatten();

    Element.makePositioned(element); // fix IE
    options.element = element;

    this.drops.push(options);
  },
  
  findDeepestChild: function(drops) {
    deepest = drops[0];
      
    for (i = 1; i < drops.length; ++i)
      if (Element.isParent(drops[i].element, deepest.element))
        deepest = drops[i];
    
    return deepest;
  },

  isContained: function(element, drop) {
    var containmentNode;
    if(drop.tree) {
      containmentNode = element.treeNode; 
    } else {
      containmentNode = element.parentNode;
    }
    return drop._containers.detect(function(c) { return containmentNode == c });
  },
  
  isAffected: function(point, element, drop) {
    return (
      (drop.element!=element) &&
      ((!drop._containers) ||
        this.isContained(element, drop)) &&
      ((!drop.accept) ||
        (Element.classNames(element).detect( 
          function(v) { return drop.accept.include(v) } ) )) &&
      Position.within(drop.element, point[0], point[1]) );
  },

  deactivate: function(drop) {
    if(drop.hoverclass)
      Element.removeClassName(drop.element, drop.hoverclass);
    this.last_active = null;
  },

  activate: function(drop) {
    if(drop.hoverclass)
      Element.addClassName(drop.element, drop.hoverclass);
    this.last_active = drop;
  },

  show: function(point, element) {
    if(!this.drops.length) return;
    var affected = [];
    
    if(this.last_active) this.deactivate(this.last_active);
    this.drops.each( function(drop) {
      if(Droppables.isAffected(point, element, drop))
        affected.push(drop);
    });
        
    if(affected.length>0) {
      drop = Droppables.findDeepestChild(affected);
      Position.within(drop.element, point[0], point[1]);
      if(drop.onHover)
        drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
      
      Droppables.activate(drop);
    }
  },

  fire: function(event, element) {
    if(!this.last_active) return;
    Position.prepare();

    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
      if (this.last_active.onDrop) 
        this.last_active.onDrop(element, this.last_active.element, event);
  },

  reset: function() {
    if(this.last_active)
      this.deactivate(this.last_active);
  }
}

var Draggables = {
  drags: [],
  observers: [],
  
  register: function(draggable) {
    if(this.drags.length == 0) {
      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
      this.eventKeypress  = this.keyPress.bindAsEventListener(this);
      
      Event.observe(document, "mouseup", this.eventMouseUp);
      Event.observe(document, "mousemove", this.eventMouseMove);
      Event.observe(document, "keypress", this.eventKeypress);
    }
    this.drags.push(draggable);
  },
  
  unregister: function(draggable) {
    this.drags = this.drags.reject(function(d) { return d==draggable });
    if(this.drags.length == 0) {
      Event.stopObserving(document, "mouseup", this.eventMouseUp);
      Event.stopObserving(document, "mousemove", this.eventMouseMove);
      Event.stopObserving(document, "keypress", this.eventKeypress);
    }
  },
  
  activate: function(draggable) {
    if(draggable.options.delay) { 
      this._timeout = setTimeout(function() { 
        Draggables._timeout = null; 
        window.focus(); 
        Draggables.activeDraggable = draggable; 
      }.bind(this), draggable.options.delay); 
    } else {
      window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
      this.activeDraggable = draggable;
    }
  },
  
  deactivate: function() {
    this.activeDraggable = null;
  },
  
  updateDrag: function(event) {
    if(!this.activeDraggable) return;
    var pointer = [Event.pointerX(event), Event.pointerY(event)];
    // Mozilla-based browsers fire successive mousemove events with
    // the same coordinates, prevent needless redrawing (moz bug?)
    if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
    this._lastPointer = pointer;
    
    this.activeDraggable.updateDrag(event, pointer);
  },
  
  endDrag: function(event) {
    if(this._timeout) { 
      clearTimeout(this._timeout); 
      this._timeout = null; 
    }
    if(!this.activeDraggable) return;
    this._lastPointer = null;
    this.activeDraggable.endDrag(event);
    this.activeDraggable = null;
  },
  
  keyPress: function(event) {
    if(this.activeDraggable)
      this.activeDraggable.keyPress(event);
  },
  
  addObserver: function(observer) {
    this.observers.push(observer);
    this._cacheObserverCallbacks();
  },
  
  removeObserver: function(element) {  // element instead of observer fixes mem leaks
    this.observers = this.observers.reject( function(o) { return o.element==element });
    this._cacheObserverCallbacks();
  },
  
  notify: function(eventName, draggable, event) {  // 'onStart', 'onEnd', 'onDrag'
    if(this[eventName+'Count'] > 0)
      this.observers.each( function(o) {
        if(o[eventName]) o[eventName](eventName, draggable, event);
      });
    if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
  },
  
  _cacheObserverCallbacks: function() {
    ['onStart','onEnd','onDrag'].each( function(eventName) {
      Draggables[eventName+'Count'] = Draggables.observers.select(
        function(o) { return o[eventName]; }
      ).length;
    });
  }
}

/*--------------------------------------------------------------------------*/

var Draggable = Class.create();
Draggable._dragging    = {};

Draggable.prototype = {
  initialize: function(element) {
    var defaults = {
      handle: false,
      reverteffect: function(element, top_offset, left_offset) {
        var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
        new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
          queue: {scope:'_draggable', position:'end'}
        });
      },
      endeffect: function(element) {
        var toOpacity = typeof element._opacity == 'number' ? element._opacity : 1.0;
        new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity, 
          queue: {scope:'_draggable', position:'end'},
          afterFinish: function(){ 
            Draggable._dragging[element] = false 
          }
        }); 
      },
      zindex: 1000,
      revert: false,
      scroll: false,
      scrollSensitivity: 20,
      scrollSpeed: 15,
      snap: false,  // false, or xy or [x,y] or function(x,y){ return [x,y] }
      delay: 0
    };
    
    if(!arguments[1] || typeof arguments[1].endeffect == 'undefined')
      Object.extend(defaults, {
        starteffect: function(element) {
          element._opacity = Element.getOpacity(element);
          Draggable._dragging[element] = true;
          new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); 
        }
      });
    
    var options = Object.extend(defaults, arguments[1] || {});

    this.element = $(element);
    
    if(options.handle && (typeof options.handle == 'string'))
      this.handle = this.element.down('.'+options.handle, 0);
    
    if(!this.handle) this.handle = $(options.handle);
    if(!this.handle) this.handle = this.element;
    
    if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
      options.scroll = $(options.scroll);
      this._isScrollChild = Element.childOf(this.element, options.scroll);
    }

    Element.makePositioned(this.element); // fix IE    

    this.delta    = this.currentDelta();
    this.options  = options;
    this.dragging = false;   

    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
    Event.observe(this.handle, "mousedown", this.eventMouseDown);
    
    Draggables.register(this);
  },
  
  destroy: function() {
    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
    Draggables.unregister(this);
  },
  
  currentDelta: function() {
    return([
      parseInt(Element.getStyle(this.element,'left') || '0'),
      parseInt(Element.getStyle(this.element,'top') || '0')]);
  },
  
  initDrag: function(event) {
    if(typeof Draggable._dragging[this.element] != 'undefined' &&
      Draggable._dragging[this.element]) return;
    if(Event.isLeftClick(event)) {    
      // abort on form elements, fixes a Firefox issue
      var src = Event.element(event);
      if((tag_name = src.tagName.toUpperCase()) && (
        tag_name=='INPUT' ||
        tag_name=='SELECT' ||
        tag_name=='OPTION' ||
        tag_name=='BUTTON' ||
        tag_name=='TEXTAREA')) return;
        
      var pointer = [Event.pointerX(event), Event.pointerY(event)];
      var pos     = Position.cumulativeOffset(this.element);
      this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
      
      Draggables.activate(this);
      Event.stop(event);
    }
  },
  
  startDrag: function(event) {
    this.dragging = true;
    
    if(this.options.zindex) {
      this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
      this.element.style.zIndex = this.options.zindex;
    }
    
    if(this.options.ghosting) {
      this._clone = this.element.cloneNode(true);
      Position.absolutize(this.element);
      this.element.parentNode.insertBefore(this._clone, this.element);
    }
    
    if(this.options.scroll) {
      if (this.options.scroll == window) {
        var where = this._getWindowScroll(this.options.scroll);
        this.originalScrollLeft = where.left;
        this.originalScrollTop = where.top;
      } else {
        this.originalScrollLeft = this.options.scroll.scrollLeft;
        this.originalScrollTop = this.options.scroll.scrollTop;
      }
    }
    
    Draggables.notify('onStart', this, event);
        
    if(this.options.starteffect) this.options.starteffect(this.element);
  },
  
  updateDrag: function(event, pointer) {
    if(!this.dragging) this.startDrag(event);
    Position.prepare();
    Droppables.show(pointer, this.element);
    Draggables.notify('onDrag', this, event);
    
    this.draw(pointer);
    if(this.options.change) this.options.change(this);
    
    if(this.options.scroll) {
      this.stopScrolling();
      
      var p;
      if (this.options.scroll == window) {
        with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
      } else {
        p = Position.page(this.options.scroll);
        p[0] += this.options.scroll.scrollLeft + Position.deltaX;
        p[1] += this.options.scroll.scrollTop + Position.deltaY;
        p.push(p[0]+this.options.scroll.offsetWidth);
        p.push(p[1]+this.options.scroll.offsetHeight);
      }
      var speed = [0,0];
      if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
      if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
      if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
      if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
      this.startScrolling(speed);
    }
    
    // fix AppleWebKit rendering
    if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
    
    Event.stop(event);
  },
  
  finishDrag: function(event, success) {
    this.dragging = false;

    if(this.options.ghosting) {
      Position.relativize(this.element);
      Element.remove(this._clone);
      this._clone = null;
    }

    if(success) Droppables.fire(event, this.element);
    Draggables.notify('onEnd', this, event);

    var revert = this.options.revert;
    if(revert && typeof revert == 'function') revert = revert(this.element);
    
    var d = this.currentDelta();
    if(revert && this.options.reverteffect) {
      this.options.reverteffect(this.element, 
        d[1]-this.delta[1], d[0]-this.delta[0]);
    } else {
      this.delta = d;
    }

    if(this.options.zindex)
      this.element.style.zIndex = this.originalZ;

    if(this.options.endeffect) 
      this.options.endeffect(this.element);
      
    Draggables.deactivate(this);
    Droppables.reset();
  },
  
  keyPress: function(event) {
    if(event.keyCode!=Event.KEY_ESC) return;
    this.finishDrag(event, false);
    Event.stop(event);
  },
  
  endDrag: function(event) {
    if(!this.dragging) return;
    this.stopScrolling();
    this.finishDrag(event, true);
    Event.stop(event);
  },
  
  draw: function(point) {
    var pos = Position.cumulativeOffset(this.element);
    if(this.options.ghosting) {
      var r   = Position.realOffset(this.element);
      pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
    }
    
    var d = this.currentDelta();
    pos[0] -= d[0]; pos[1] -= d[1];
    
    if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
      pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
      pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
    }
    
    var p = [0,1].map(function(i){ 
      return (point[i]-pos[i]-this.offset[i]) 
    }.bind(this));
    
    if(this.options.snap) {
      if(typeof this.options.snap == 'function') {
        p = this.options.snap(p[0],p[1],this);
      } else {
      if(this.options.snap instanceof Array) {
        p = p.map( function(v, i) {
          return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this))
      } else {
        p = p.map( function(v) {
          return Math.round(v/this.options.snap)*this.options.snap }.bind(this))
      }
    }}
    
    var style = this.element.style;
    if((!this.options.constraint) || (this.options.constraint=='horizontal'))
      style.left = p[0] + "px";
    if((!this.options.constraint) || (this.options.constraint=='vertical'))
      style.top  = p[1] + "px";
    
    if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
  },
  
  stopScrolling: function() {
    if(this.scrollInterval) {
      clearInterval(this.scrollInterval);
      this.scrollInterval = null;
      Draggables._lastScrollPointer = null;
    }
  },
  
  startScrolling: function(speed) {
    if(!(speed[0] || speed[1])) return;
    this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
    this.lastScrolled = new Date();
    this.scrollInterval = setInterval(this.scroll.bind(this), 10);
  },
  
  scroll: function() {
    var current = new Date();
    var delta = current - this.lastScrolled;
    this.lastScrolled = current;
    if(this.options.scroll == window) {
      with (this._getWindowScroll(this.options.scroll)) {
        if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
          var d = delta / 1000;
          this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
        }
      }
    } else {
      this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
      this.options.scroll.scrollTop  += this.scrollSpeed[1] * delta / 1000;
    }
    
    Position.prepare();
    Droppables.show(Draggables._lastPointer, this.element);
    Draggables.notify('onDrag', this);
    if (this._isScrollChild) {
      Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
      Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
      Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
      if (Draggables._lastScrollPointer[0] < 0)
        Draggables._lastScrollPointer[0] = 0;
      if (Draggables._lastScrollPointer[1] < 0)
        Draggables._lastScrollPointer[1] = 0;
      this.draw(Draggables._lastScrollPointer);
    }
    
    if(this.options.change) this.options.change(this);
  },
  
  _getWindowScroll: function(w) {
    var T, L, W, H;
    with (w.document) {
      if (w.document.documentElement && documentElement.scrollTop) {
        T = documentElement.scrollTop;
        L = documentElement.scrollLeft;
      } else if (w.document.body) {
        T = body.scrollTop;
        L = body.scrollLeft;
      }
      if (w.innerWidth) {
        W = w.innerWidth;
        H = w.innerHeight;
      } else if (w.document.documentElement && documentElement.clientWidth) {
        W = documentElement.clientWidth;
        H = documentElement.clientHeight;
      } else {
        W = body.offsetWidth;
        H = body.offsetHeight
      }
    }
    return { top: T, left: L, width: W, height: H };
  }
}

/*--------------------------------------------------------------------------*/

var SortableObserver = Class.create();
SortableObserver.prototype = {
  initialize: function(element, observer) {
    this.element   = $(element);
    this.observer  = observer;
    this.lastValue = Sortable.serialize(this.element);
  },
  
  onStart: function() {
    this.lastValue = Sortable.serialize(this.element);
  },
  
  onEnd: function() {
    Sortable.unmark();
    if(this.lastValue != Sortable.serialize(this.element))
      this.observer(this.element)
  }
}

var Sortable = {
  SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
  
  sortables: {},
  
  _findRootElement: function(element) {
    while (element.tagName.toUpperCase() != "BODY") {  
      if(element.id && Sortable.sortables[element.id]) return element;
      element = element.parentNode;
    }
  },

  options: function(element) {
    element = Sortable._findRootElement($(element));
    if(!element) return;
    return Sortable.sortables[element.id];
  },
  
  destroy: function(element){
    var s = Sortable.options(element);
    
    if(s) {
      Draggables.removeObserver(s.element);
      s.droppables.each(function(d){ Droppables.remove(d) });
      s.draggables.invoke('destroy');
      
      delete Sortable.sortables[s.element.id];
    }
  },

  create: function(element) {
    element = $(element);
    var options = Object.extend({ 
      element:     element,
      tag:         'li',       // assumes li children, override with tag: 'tagname'
      dropOnEmpty: false,
      tree:        false,
      treeTag:     'ul',
      overlap:     'vertical', // one of 'vertical', 'horizontal'
      constraint:  'vertical', // one of 'vertical', 'horizontal', false
      containment: element,    // also takes array of elements (or id's); or false
      handle:      false,      // or a CSS class
      only:        false,
      delay:       0,
      hoverclass:  null,
      ghosting:    false,
      scroll:      false,
      scrollSensitivity: 20,
      scrollSpeed: 15,
      format:      this.SERIALIZE_RULE,
      onChange:    Prototype.emptyFunction,
      onUpdate:    Prototype.emptyFunction
    }, arguments[1] || {});

    // clear any old sortable with same element
    this.destroy(element);

    // build options for the draggables
    var options_for_draggable = {
      revert:      true,
      scroll:      options.scroll,
      scrollSpeed: options.scrollSpeed,
      scrollSensitivity: options.scrollSensitivity,
      delay:       options.delay,
      ghosting:    options.ghosting,
      constraint:  options.constraint,
      handle:      options.handle };

    if(options.starteffect)
      options_for_draggable.starteffect = options.starteffect;

    if(options.reverteffect)
      options_for_draggable.reverteffect = options.reverteffect;
    else
      if(options.ghosting) options_for_draggable.reverteffect = function(element) {
        element.style.top  = 0;
        element.style.left = 0;
      };

    if(options.endeffect)
      options_for_draggable.endeffect = options.endeffect;

    if(options.zindex)
      options_for_draggable.zindex = options.zindex;

    // build options for the droppables  
    var options_for_droppable = {
      overlap:     options.overlap,
      containment: options.containment,
      tree:        options.tree,
      hoverclass:  options.hoverclass,
      onHover:     Sortable.onHover
    }
    
    var options_for_tree = {
      onHover:      Sortable.onEmptyHover,
      overlap:      options.overlap,
      containment:  options.containment,
      hoverclass:   options.hoverclass
    }

    // fix for gecko engine
    Element.cleanWhitespace(element); 

    options.draggables = [];
    options.droppables = [];

    // drop on empty handling
    if(options.dropOnEmpty || options.tree) {
      Droppables.add(element, options_for_tree);
      options.droppables.push(element);
    }

    (this.findElements(element, options) || []).each( function(e) {
      // handles are per-draggable
      var handle = options.handle ? 
        $(e).down('.'+options.handle,0) : e;    
      options.draggables.push(
        new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
      Droppables.add(e, options_for_droppable);
      if(options.tree) e.treeNode = element;
      options.droppables.push(e);      
    });
    
    if(options.tree) {
      (Sortable.findTreeElements(element, options) || []).each( function(e) {
        Droppables.add(e, options_for_tree);
        e.treeNode = element;
        options.droppables.push(e);
      });
    }

    // keep reference
    this.sortables[element.id] = options;

    // for onupdate
    Draggables.addObserver(new SortableObserver(element, options.onUpdate));

  },

  // return all suitable-for-sortable elements in a guaranteed order
  findElements: function(element, options) {
    return Element.findChildren(
      element, options.only, options.tree ? true : false, options.tag);
  },
  
  findTreeElements: function(element, options) {
    return Element.findChildren(
      element, options.only, options.tree ? true : false, options.treeTag);
  },

  onHover: function(element, dropon, overlap) {
    if(Element.isParent(dropon, element)) return;

    if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
      return;
    } else if(overlap>0.5) {
      Sortable.mark(dropon, 'before');
      if(dropon.previousSibling != element) {
        var oldParentNode = element.parentNode;
        element.style.visibility = "hidden"; // fix gecko rendering
        dropon.parentNode.insertBefore(element, dropon);
        if(dropon.parentNode!=oldParentNode) 
          Sortable.options(oldParentNode).onChange(element);
        Sortable.options(dropon.parentNode).onChange(element);
      }
    } else {
      Sortable.mark(dropon, 'after');
      var nextElement = dropon.nextSibling || null;
      if(nextElement != element) {
        var oldParentNode = element.parentNode;
        element.style.visibility = "hidden"; // fix gecko rendering
        dropon.parentNode.insertBefore(element, nextElement);
        if(dropon.parentNode!=oldParentNode) 
          Sortable.options(oldParentNode).onChange(element);
        Sortable.options(dropon.parentNode).onChange(element);
      }
    }
  },
  
  onEmptyHover: function(element, dropon, overlap) {
    var oldParentNode = element.parentNode;
    var droponOptions = Sortable.options(dropon);
        
    if(!Element.isParent(dropon, element)) {
      var index;
      
      var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
      var child = null;
            
      if(children) {
        var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
        
        for (index = 0; index < children.length; index += 1) {
          if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
            offset -= Element.offsetSize (children[index], droponOptions.overlap);
          } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
            child = index + 1 < children.length ? children[index + 1] : null;
            break;
          } else {
            child = children[index];
            break;
          }
        }
      }
      
      dropon.insertBefore(element, child);
      
      Sortable.options(oldParentNode).onChange(element);
      droponOptions.onChange(element);
    }
  },

  unmark: function() {
    if(Sortable._marker) Sortable._marker.hide();
  },

  mark: function(dropon, position) {
    // mark on ghosting only
    var sortable = Sortable.options(dropon.parentNode);
    if(sortable && !sortable.ghosting) return; 

    if(!Sortable._marker) {
      Sortable._marker = 
        ($('dropmarker') || Element.extend(document.createElement('DIV'))).
          hide().addClassName('dropmarker').setStyle({position:'absolute'});
      document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
    }    
    var offsets = Position.cumulativeOffset(dropon);
    Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
    
    if(position=='after')
      if(sortable.overlap == 'horizontal') 
        Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
      else
        Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
    
    Sortable._marker.show();
  },
  
  _tree: function(element, options, parent) {
    var children = Sortable.findElements(element, options) || [];
  
    for (var i = 0; i < children.length; ++i) {
      var match = children[i].id.match(options.format);

      if (!match) continue;
      
      var child = {
        id: encodeURIComponent(match ? match[1] : null),
        element: element,
        parent: parent,
        children: [],
        position: parent.children.length,
        container: $(children[i]).down(options.treeTag)
      }
      
      /* Get the element containing the children and recurse over it */
      if (child.container)
        this._tree(child.container, options, child)
      
      parent.children.push (child);
    }

    return parent; 
  },

  tree: function(element) {
    element = $(element);
    var sortableOptions = this.options(element);
    var options = Object.extend({
      tag: sortableOptions.tag,
      treeTag: sortableOptions.treeTag,
      only: sortableOptions.only,
      name: element.id,
      format: sortableOptions.format
    }, arguments[1] || {});
    
    var root = {
      id: null,
      parent: null,
      children: [],
      container: element,
      position: 0
    }
    
    return Sortable._tree(element, options, root);
  },

  /* Construct a [i] index for a particular node */
  _constructIndex: function(node) {
    var index = '';
    do {
      if (node.id) index = '[' + node.position + ']' + index;
    } while ((node = node.parent) != null);
    return index;
  },

  sequence: function(element) {
    element = $(element);
    var options = Object.extend(this.options(element), arguments[1] || {});
    
    return $(this.findElements(element, options) || []).map( function(item) {
      return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
    });
  },

  setSequence: function(element, new_sequence) {
    element = $(element);
    var options = Object.extend(this.options(element), arguments[2] || {});
    
    var nodeMap = {};
    this.findElements(element, options).each( function(n) {
        if (n.id.match(options.format))
            nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
        n.parentNode.removeChild(n);
    });
   
    new_sequence.each(function(ident) {
      var n = nodeMap[ident];
      if (n) {
        n[1].appendChild(n[0]);
        delete nodeMap[ident];
      }
    });
  },
  
  serialize: function(element) {
    element = $(element);
    var options = Object.extend(Sortable.options(element), arguments[1] || {});
    var name = encodeURIComponent(
      (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
    
    if (options.tree) {
      return Sortable.tree(element, arguments[1]).children.map( function (item) {
        return [name + Sortable._constructIndex(item) + "[id]=" + 
                encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
      }).flatten().join('&');
    } else {
      return Sortable.sequence(element, arguments[1]).map( function(item) {
        return name + "[]=" + encodeURIComponent(item);
      }).join('&');
    }
  }
}

// Returns true if child is contained within element
Element.isParent = function(child, element) {
  if (!child.parentNode || child == element) return false;
  if (child.parentNode == element) return true;
  return Element.isParent(child.parentNode, element);
}

Element.findChildren = function(element, only, recursive, tagName) {    
  if(!element.hasChildNodes()) return null;
  tagName = tagName.toUpperCase();
  if(only) only = [only].flatten();
  var elements = [];
  $A(element.childNodes).each( function(e) {
    if(e.tagName && e.tagName.toUpperCase()==tagName &&
      (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
        elements.push(e);
    if(recursive) {
      var grandchildren = Element.findChildren(e, only, recursive, tagName);
      if(grandchildren) elements.push(grandchildren);
    }
  });

  return (elements.length>0 ? elements.flatten() : []);
}

Element.offsetSize = function (element, type) {
  return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
}
                                                                           ./mvappsvr/docroot/db/themes/                                                                       0000777 0000000 0000000 00000000000 12534142432 015116  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/themes/theme4.css                                                             0000666 0000000 0000000 00000002003 12534142432 017011  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   html,body {
/*background-color: #333;*/
}

.widget_input {
   background-color: #747E80;		
}

.widget_controls {
 margin: 5px;
}

table th {
background-color: #C2C9CF;
}

.widget_content {
    background-color: #EFEFEF;
}

h3.title {
    font-weight: bold;
    padding: 5px;
    background: #2B3E42;
    color: #fff;
}

#dashboardWrapper {
background: none;
}

#logo {
background-color: #FFF;
padding: 10px;
}

#trackWrapper {
background: none;
background-color: #D5E1DD;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}

#dashboard_nav {
background: url("/db/images/bg_dashboard_nav.png") no-repeat scroll 0 0 transparent;
}

a:link, a:visited {
    color: #F2583E;
}
a:hover {
    text-decoration: none;
}
.widget_content_header, .widget_content_footer {
background-color: #77BED2;

}

#main, #mainWrapper{
background-color: #EFEFEF;
}

.widget_control label {
color: #FFFFFF;
}

ol.dashboard_list li.db_active a, ol.dashboard_list li.db_active a:hover {
    background:#747E80;
}

tr:hover {
    background: #77BED2;
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/themes/theme1.css                                                             0000666 0000000 0000000 00000001627 12534142432 017021  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   html,body {
/*background-color: #3F3E37;*/
}

.widget_input {
   background-color: #ccc;		
}

.widget_controls {
 margin: 5px;
}

table th {
background-color: #ccc;
}

.widget_content {
    background-color: #fefefe;
}

h3.title {
    font-weight: bold;
    padding: 5px;
    background: #CE0000;
    color: #fff;
}

#dashboardWrapper {
background: none;
}

#logo {
    padding: 10px;
}

#trackWrapper {
background: none;
background-color: #ccc;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}

#dashboard_nav {
background: url("/db/images/bg_dashboard_nav.png") no-repeat scroll 0 0 transparent;
}

a:link, a:visited {
color: #333333;

}
.widget_content_header, .widget_content_footer {
/*background-color: #E5E2C6;*/

}

#main, #mainWrapper{
background-color: #FFFBDC;
}

ol.dashboard_list li.db_active a, ol.dashboard_list li.db_active a:hover {
    background: #CE0000;
}

tr:hover {
    background: #eee;
}
                                                                                                         ./mvappsvr/docroot/db/themes/theme2.css                                                             0000666 0000000 0000000 00000001753 12534142432 017022  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   html,body {
/*background-color: #004460;*/
}

.widget_input {
   background-color: #fcf8f0;		
}

.widget_controls {
 margin: 5px;
}

table th {
background-color: #6D98AB;
color: #fff;
}

.widget_content {
    background-color: #F2f2f2;
}

h3.title {
/*font-weight: bold;
padding: 10px;
background: url("/db/images/bg_widget_header_ocean.gif") repeat-x scroll 0 0 #80AAC3;*/
}

#dashboardWrapper {
background: none;
}

#trackWrapper {
background: none;
background-color: #00275E;
color: #fff;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;

}

#dashboard_nav {
background: url("/db/images/bg_dashboard_nav.png") no-repeat scroll 0 0 transparent;
}

a:link, a:visited {
color: #333333;

}
.widget_content_header, .widget_content_footer {
background-color: #ccc;

}

#main, #mainWrapper {
background-color: #80AAC3;
}

ol.dashboard_list li.db_active a, ol.dashboard_list li.db_active a:hover {
    background:none repeat scroll 0 0 #FEB729;
    color:#333333;
}

tr:hover {
    background: #fcf8f0;
}                     ./mvappsvr/docroot/db/themes/theme3.css                                                             0000666 0000000 0000000 00000001725 12534142432 017022  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   html,body {
/*background-color: #001A2E;*/
}

.widget_input {
   background-color: #A5A162;		
}

.widget_controls {
 margin: 5px;
}

table th {
background-color: #E5E2C6;
}

.widget_content {
    background-color: #FFF;
}

h3.title {
    font-weight: bold;
    padding: 5px;
    background: #656868;
    color: #fff;
    border-bottom: 1px solid #999;
}

#dashboardWrapper {
background: none;
}

#logo {
background-color: #FFF;
padding: 10px;
}

#trackWrapper {
background: none;
background-color: #E5E2C6;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}

#dashboard_nav {
background: url("/db/images/bg_dashboard_nav.png") no-repeat scroll 0 0 transparent;
}

a:link, a:visited {
color: #333333;

}
.widget_content_header, .widget_content_footer {
background-color: #E5E2C6;

}

#main, #mainWrapper{
background-color: #FFFFFF;
}

.widget_control label {
color: #FFFFFF;
}

ol.dashboard_list li.db_active a, ol.dashboard_list li.db_active a:hover {
    background:#A5A162;
}                                           ./mvappsvr/docroot/db/edit_area/                                                                    0000777 0000000 0000000 00000000000 12534142432 015546  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/langs/                                                              0000777 0000000 0000000 00000000000 12534142432 016652  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/langs/pl.js                                                         0000777 0000000 0000000 00000004072 12534142432 017631  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["pl"]={
new_document: "nowy dokument",
search_button: "znajdź i zamień",
search_command: "znajdź następny",
search: "znajdź",
replace: "zamień",
replace_command: "zamień",
find_next: "następny",
replace_all: "zamień wszystko",
reg_exp: "wyrażenie regularne",
match_case: "uwzględnij wielkość liter<br />",
not_found: "nie znaleziono.",
occurrence_replaced: "wystąpień zamieniono.",
search_field_empty: "Nie wprowadzono tekstu",
restart_search_at_begin: "Koniec dokumentu. Wyszukiwanie od początku.",
move_popup: "przesuń okienko wyszukiwania",
font_size: "Rozmiar",
go_to_line: "idź do linii",
go_to_line_prompt: "numer linii:",
undo: "cofnij",
redo: "przywróć",
change_smooth_selection: "włącz/wyłącz niektóre opcje wyglądu (zaawansowane opcje wyglądu obciążają procesor)",
highlight: "włącz/wyłącz podświetlanie składni",
reset_highlight: "odśwież podświetlanie składni (jeśli rozsynchronizowało się z tekstem)",
word_wrap: "toggle word wrapping mode",
help: "o programie",
save: "zapisz",
load: "otwórz",
line_abbr: "Ln",
char_abbr: "Zn",
position: "Pozycja",
total: "W sumie",
close_popup: "zamknij okienko",
shortcuts: "Skróty klawiaturowe",
add_tab: "dodaj wcięcie do zaznaczonego tekstu",
remove_tab: "usuń wcięcie",
about_notice: "Uwaga: podświetlanie składni nie jest zalecane dla długich tekstów",
toggle: "Włącz/wyłącz edytor",
accesskey: "Alt+",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Przetwarzanie...",
fullscreen: "fullscreen",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/edit_area/langs/de.js                                                         0000777 0000000 0000000 00000004304 12534142432 017604  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["de"]={
new_document: "Neues Dokument",
search_button: "Suchen und Ersetzen",
search_command: "Weitersuchen / &ouml;ffne Suchfeld",
search: "Suchen",
replace: "Ersetzen",
replace_command: "Ersetzen / &ouml;ffne Suchfeld",
find_next: "Weitersuchen",
replace_all: "Ersetze alle Treffer",
reg_exp: "regul&auml;re Ausdr&uuml;cke",
match_case: "passt auf den Begriff<br />",
not_found: "Nicht gefunden.",
occurrence_replaced: "Die Vorkommen wurden ersetzt.",
search_field_empty: "Leeres Suchfeld",
restart_search_at_begin: "Ende des zu durchsuchenden Bereiches erreicht. Es wird die Suche von Anfang an fortgesetzt.", //find a shorter translation
move_popup: "Suchfenster bewegen",
font_size: "--Schriftgr&ouml;&szlig;e--",
go_to_line: "Gehe zu Zeile",
go_to_line_prompt: "Gehe zu Zeilennummmer:",
undo: "R&uuml;ckg&auml;ngig",
redo: "Wiederherstellen",
change_smooth_selection: "Aktiviere/Deaktiviere einige Features (weniger Bildschirmnutzung aber mehr CPU-Belastung)",
highlight: "Syntax Highlighting an- und ausschalten",
reset_highlight: "Highlighting zur&uuml;cksetzen (falls mit Text nicht konform)",
word_wrap: "Toggle word wrapping mode",
help: "Info",
save: "Speichern",
load: "&Ouml;ffnen",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Position",
total: "Gesamt",
close_popup: "Popup schlie&szlig;en",
shortcuts: "Shortcuts",
add_tab: "Tab zum Text hinzuf&uuml;gen",
remove_tab: "Tab aus Text entfernen",
about_notice: "Bemerkung: Syntax Highlighting ist nur f&uuml;r kurze Texte",
toggle: "Editor an- und ausschalten",
accesskey: "Accesskey",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "In Bearbeitung...",
fullscreen: "Full-Screen",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/edit_area/langs/dk.js                                                         0000777 0000000 0000000 00000004113 12534142432 017610  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["dk"]={
new_document: "nyt tomt dokument",
search_button: "s&oslash;g og erstat",
search_command: "find n&aelig;ste / &aring;ben s&oslash;gefelt",
search: "s&oslash;g",
replace: "erstat",
replace_command: "erstat / &aring;ben s&oslash;gefelt",
find_next: "find n&aelig;ste",
replace_all: "erstat alle",
reg_exp: "regular expressions",
match_case: "forskel på store/sm&aring; bogstaver<br />",
not_found: "not found.",
occurrence_replaced: "occurences replaced.",
search_field_empty: "Search field empty",
restart_search_at_begin: "End of area reached. Restart at begin.",
move_popup: "flyt søgepopup",
font_size: "--Skriftstørrelse--",
go_to_line: "g&aring; til linie",
go_to_line_prompt: "gå til linienummer:",
undo: "fortryd",
redo: "gentag",
change_smooth_selection: "sl&aring; display funktioner til/fra (smartere display men mere CPU kr&aelig;vende)",
highlight: "sl&aring; syntax highlight til/fra",
reset_highlight: "nulstil highlight (hvis den er desynkroniseret fra teksten)",
word_wrap: "toggle word wrapping mode",
help: "om",
save: "gem",
load: "hent",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Position",
total: "Total",
close_popup: "luk popup",
shortcuts: "Genveje",
add_tab: "tilf&oslash;j tabulation til tekst",
remove_tab: "fjern tabulation fra tekst",
about_notice: "Husk: syntax highlight funktionen b&oslash;r kun bruge til sm&aring; tekster",
toggle: "Sl&aring; editor til / fra",
accesskey: "Accesskey",
tab: "Tab",
shift: "Skift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Processing...",
fullscreen: "fullscreen",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/edit_area/langs/cs.js                                                         0000777 0000000 0000000 00000004232 12534142432 017621  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["cs"]={
new_document: "Nový dokument",
search_button: "Najdi a nahraď",
search_command: "Hledej další / otevři vyhledávací pole",
search: "Hledej",
replace: "Nahraď",
replace_command: "Nahraď / otevři vyhledávací pole",
find_next: "Najdi další",
replace_all: "Nahraď vše",
reg_exp: "platné výrazy",
match_case: "vyhodnocené výrazy",
not_found: "nenalezené.",
occurrence_replaced: "výskyty nahrazené.",
search_field_empty: "Pole vyhledávání je prázdné",
restart_search_at_begin: "Dosažen konec souboru, začínám od začátku.",
move_popup: "Přesuň vyhledávací okno",
font_size: "--Velikost textu--",
go_to_line: "Přejdi na řádek",
go_to_line_prompt: "Přejdi na řádek:",
undo: "krok zpět",
redo: "znovu",
change_smooth_selection: "Povolit nebo zakázat některé ze zobrazených funkcí (účelnější zobrazení požaduje větší zatížení procesoru)",
highlight: "Zvýrazňování syntaxe zap./vyp.",
reset_highlight: "Obnovit zvýraznění (v případě nesrovnalostí)",
word_wrap: "toggle word wrapping mode",
help: "O programu",
save: "Uložit",
load: "Otevřít",
line_abbr: "Ř.",
char_abbr: "S.",
position: "Pozice",
total: "Celkem",
close_popup: "Zavřít okno",
shortcuts: "Zkratky",
add_tab: "Přidat tabulování textu",
remove_tab: "Odtsranit tabulování textu",
about_notice: "Upozornění! Funkce zvýrazňování textu je k dispozici pouze pro malý text",
toggle: "Přepnout editor",
accesskey: "Přístupová klávesa",
tab: "Záložka",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Zpracovávám ...",
fullscreen: "Celá obrazovka",
syntax_selection: "--vyber zvýrazňovač--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/edit_area/langs/fr.js                                                         0000777 0000000 0000000 00000004555 12534142432 017633  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["fr"]={
new_document: "nouveau document (efface le contenu)",
search_button: "rechercher / remplacer",
search_command: "rechercher suivant / ouvrir la fen&ecirc;tre de recherche",
search: "rechercher",
replace: "remplacer",
replace_command: "remplacer / ouvrir la fen&ecirc;tre de recherche",
find_next: "rechercher",
replace_all: "tout remplacer",
reg_exp: "expr. r&eacute;guli&egrave;re",
match_case: "respecter la casse",
not_found: "pas trouv&eacute;.",
occurrence_replaced: "remplacements &eacute;ffectu&eacute;s.",
search_field_empty: "Le champ de recherche est vide.",
restart_search_at_begin: "Fin du texte atteint, poursuite au d&eacute;but.",
move_popup: "d&eacute;placer la fen&ecirc;tre de recherche",
font_size: "--Taille police--",
go_to_line: "aller &agrave; la ligne",
go_to_line_prompt: "aller a la ligne numero:",
undo: "annuler",
redo: "refaire",
change_smooth_selection: "activer/d&eacute;sactiver des fonctions d'affichage (meilleur affichage mais plus de charge processeur)",
highlight: "activer/d&eacute;sactiver la coloration syntaxique",
reset_highlight: "r&eacute;initialiser la coloration syntaxique (si d&eacute;syncronis&eacute;e du texte)",
word_wrap: "activer/d&eacute;sactiver les retours &agrave; la ligne automatiques",
help: "&agrave; propos",
save: "sauvegarder",
load: "charger",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Position",
total: "Total",
close_popup: "fermer le popup",
shortcuts: "Racourcis clavier",
add_tab: "ajouter une tabulation dans le texte",
remove_tab: "retirer une tabulation dans le texte",
about_notice: "Note: la coloration syntaxique n'est pr&eacute;vue que pour de courts textes.",
toggle: "basculer l'&eacute;diteur",
accesskey: "Accesskey",
tab: "Tab",
shift: "Maj",
ctrl: "Ctrl",
esc: "Esc",
processing: "chargement...",
fullscreen: "plein &eacute;cran",
syntax_selection: "--Syntaxe--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Fermer le fichier"
};
                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/langs/hr.js                                                         0000777 0000000 0000000 00000003701 12534142432 017625  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["hr"]={
new_document: "Novi dokument",
search_button: "Traži i izmijeni",
search_command: "Traži dalje / Otvori prozor za traženje",
search: "Traži",
replace: "Izmijeni",
replace_command: "Izmijeni / Otvori prozor za traženje",
find_next: "Traži dalje",
replace_all: "Izmjeni sve",
reg_exp: "Regularni izrazi",
match_case: "Bitna vel. slova",
not_found: "nije naðeno.",
occurrence_replaced: "izmjenjenih.",
search_field_empty: "Prazno polje za traženje!",
restart_search_at_begin: "Došao do kraja. Poèeo od poèetka.",
move_popup: "Pomakni prozor",
font_size: "--Velièina teksta--",
go_to_line: "Odi na redak",
go_to_line_prompt: "Odi na redak:",
undo: "Vrati natrag",
redo: "Napravi ponovo",
change_smooth_selection: "Ukljuèi/iskljuèi neke moguænosti prikaza (pametniji prikaz, ali zagušeniji CPU)",
highlight: "Ukljuèi/iskljuèi bojanje sintakse",
reset_highlight: "Ponovi kolorizaciju (ako je nesinkronizirana s tekstom)",
word_wrap: "toggle word wrapping mode",
help: "O edit_area",
save: "Spremi",
load: "Uèitaj",
line_abbr: "Ln",
char_abbr: "Zn",
position: "Pozicija",
total: "Ukupno",
close_popup: "Zatvori prozor",
shortcuts: "Kratice",
add_tab: "Dodaj tabulaciju",
remove_tab: "Makni tabulaciju",
about_notice: "Napomena: koloriziranje sintakse je samo za kratke kodove",
toggle: "Prebaci naèin ureðivanja",
accesskey: "Accesskey",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Procesiram...",
fullscreen: "Cijeli prozor",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                               ./mvappsvr/docroot/db/edit_area/langs/ru.js                                                         0000777 0000000 0000000 00000005547 12534142432 017654  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["ru"]={
new_document: "новый пустой документ",
search_button: "поиск и замена",
search_command: "искать следующий / открыть панель поиска",
search: "поиск",
replace: "замена",
replace_command: "заменить / открыть панель поиска",
find_next: "найти следующее",
replace_all: "заменить все",
reg_exp: "регулярное выражение",
match_case: "учитывать регистр",
not_found: "не найдено.",
occurrence_replaced: "вхождение заменено.",
search_field_empty: "Поле поиска пустое",
restart_search_at_begin: "Достигнут конец документа. Начинаю с начала.",
move_popup: "переместить окно поиска",
font_size: "--Размер шрифта--",
go_to_line: "перейти к строке",
go_to_line_prompt: "перейти к строке номер:",
undo: "отменить",
redo: "вернуть",
change_smooth_selection: "включить/отключить некоторые функции просмотра (более красиво, но больше использует процессор)",
highlight: "переключить подсветку синтаксиса включена/выключена",
reset_highlight: "восстановить подсветку (если разсинхронизирована от текста)",
word_wrap: "toggle word wrapping mode",
help: "о программе",
save: "сохранить",
load: "загрузить",
line_abbr: "Стр",
char_abbr: "Стлб",
position: "Позиция",
total: "Всего",
close_popup: "закрыть всплывающее окно",
shortcuts: "Горячие клавиши",
add_tab: "добавить табуляцию в текст",
remove_tab: "убрать табуляцию из текста",
about_notice: "Внимание: функция подсветки синтаксиса только для небольших текстов",
toggle: "Переключить редактор",
accesskey: "Горячая клавиша",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Обработка...",
fullscreen: "полный экран",
syntax_selection: "--Синтакс--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Закрыть файл"
};
                                                                                                                                                         ./mvappsvr/docroot/db/edit_area/langs/nl.js                                                         0000777 0000000 0000000 00000003762 12534142432 017634  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["nl"]={
new_document: "nieuw leeg document",
search_button: "zoek en vervang",
search_command: "zoek volgende / zoekscherm openen",
search: "zoek",
replace: "vervang",
replace_command: "vervang / zoekscherm openen",
find_next: "volgende vinden",
replace_all: "alles vervangen",
reg_exp: "reguliere expressies",
match_case: "hoofdletter gevoelig",
not_found: "niet gevonden.",
occurrence_replaced: "object vervangen.",
search_field_empty: "Zoek veld leeg",
restart_search_at_begin: "Niet meer instanties gevonden, begin opnieuw",
move_popup: "versleep zoek scherm",
font_size: "--Letter grootte--",
go_to_line: "Ga naar regel",
go_to_line_prompt: "Ga naar regel nummer:",
undo: "Ongedaan maken",
redo: "Opnieuw doen",
change_smooth_selection: "zet wat schermopties aan/uit (kan langzamer zijn)",
highlight: "zet syntax highlight aan/uit",
reset_highlight: "reset highlight (indien gedesynchronizeerd)",
word_wrap: "toggle word wrapping mode",
help: "informatie",
save: "opslaan",
load: "laden",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Positie",
total: "Totaal",
close_popup: "Popup sluiten",
shortcuts: "Snelkoppelingen",
add_tab: "voeg tabs toe in tekst",
remove_tab: "verwijder tabs uit tekst",
about_notice: "Notitie: syntax highlight functie is alleen voor kleine tekst",
toggle: "geavanceerde bewerkingsopties",
accesskey: "Accessknop",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Verwerken...",
fullscreen: "fullscreen",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
              ./mvappsvr/docroot/db/edit_area/langs/en.js                                                         0000777 0000000 0000000 00000003661 12534142432 017623  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["en"]={
new_document: "new empty document",
search_button: "search and replace",
search_command: "search next / open search area",
search: "search",
replace: "replace",
replace_command: "replace / open search area",
find_next: "find next",
replace_all: "replace all",
reg_exp: "regular expressions",
match_case: "match case",
not_found: "not found.",
occurrence_replaced: "occurences replaced.",
search_field_empty: "Search field empty",
restart_search_at_begin: "End of area reached. Restart at begin.",
move_popup: "move search popup",
font_size: "--Font size--",
go_to_line: "go to line",
go_to_line_prompt: "go to line number:",
undo: "undo",
redo: "redo",
change_smooth_selection: "enable/disable some display features (smarter display but more CPU charge)",
highlight: "toggle syntax highlight on/off",
reset_highlight: "reset highlight (if desyncronized from text)",
word_wrap: "toggle word wrapping mode",
help: "about",
save: "save",
load: "load",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Position",
total: "Total",
close_popup: "close popup",
shortcuts: "Shortcuts",
add_tab: "add tabulation to text",
remove_tab: "remove tabulation to text",
about_notice: "Notice: syntax highlight function is only for small text",
toggle: "Toggle editor",
accesskey: "Accesskey",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Processing...",
fullscreen: "fullscreen",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                               ./mvappsvr/docroot/db/edit_area/langs/ja.js                                                         0000777 0000000 0000000 00000004173 12534142432 017612  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["ja"]={
new_document: "新規作成",
search_button: "検索・置換",
search_command: "次を検索 / 検索窓を表示",
search: "検索",
replace: "置換",
replace_command: "置換 / 置換窓を表示",
find_next: "次を検索",
replace_all: "全置換",
reg_exp: "正規表現",
match_case: "大文字小文字の区別",
not_found: "見つかりません。",
occurrence_replaced: "置換しました。",
search_field_empty: "検索対象文字列が空です。",
restart_search_at_begin: "終端に達しました、始めに戻ります",
move_popup: "検索窓を移動",
font_size: "--フォントサイズ--",
go_to_line: "指定行へ移動",
go_to_line_prompt: "指定行へ移動します:",
undo: "元に戻す",
redo: "やり直し",
change_smooth_selection: "スムース表示の切り替え（CPUを使います）",
highlight: "構文強調表示の切り替え",
reset_highlight: "構文強調表示のリセット",
word_wrap: "toggle word wrapping mode",
help: "ヘルプを表示",
save: "保存",
load: "読み込み",
line_abbr: "行",
char_abbr: "文字",
position: "位置",
total: "合計",
close_popup: "ポップアップを閉じる",
shortcuts: "ショートカット",
add_tab: "タブを挿入する",
remove_tab: "タブを削除する",
about_notice: "注意：構文強調表示は短いテキストでしか有効に機能しません。",
toggle: "テキストエリアとeditAreaの切り替え",
accesskey: "アクセスキー",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "処理中です...",
fullscreen: "fullscreen",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/edit_area/langs/mk.js                                                         0000777 0000000 0000000 00000005401 12534142432 017622  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["mk"]={
new_document: "Нов документ",
search_button: "Најди и замени",
search_command: "Барај следно / Отвори нов прозорец за пребарување",
search: "Барај",
replace: "Замени",
replace_command: "Замени / Отвори прозорец за пребарување",
find_next: "најди следно",
replace_all: "Замени ги сите",
reg_exp: "Регуларни изрази",
match_case: "Битна е големината на буквите",
not_found: "не е пронајдено.",
occurrence_replaced: "замени.",
search_field_empty: "Полето за пребарување е празно",
restart_search_at_begin: "Крај на областа. Стартувај од почеток.",
move_popup: "Помести го прозорецот",
font_size: "--Големина на текстот--",
go_to_line: "Оди на линија",
go_to_line_prompt: "Оди на линија со број:",
undo: "Врати",
redo: "Повтори",
change_smooth_selection: "Вклучи/исклучи некои карактеристики за приказ (попаметен приказ, но поголемо оптеретување за процесорот)",
highlight: "Вклучи/исклучи осветлување на синтакса",
reset_highlight: "Ресетирај го осветлувањето на синтакса (доколку е десинхронизиранo со текстот)",
word_wrap: "toggle word wrapping mode",
help: "За",
save: "Зачувај",
load: "Вчитај",
line_abbr: "Лн",
char_abbr: "Зн",
position: "Позиција",
total: "Вкупно",
close_popup: "Затвори го прозорецот",
shortcuts: "Кратенки",
add_tab: "Додај табулација на текстот",
remove_tab: "Отстрани ја табулацијата",
about_notice: "Напомена: Осветлувањето на синтанса е само за краток текст",
toggle: "Смени начин на уредување",
accesskey: "Accesskey",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Обработувам...",
fullscreen: "Цел прозорец",
syntax_selection: "--Синтакса--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Избери датотека"
};
                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/edit_area/langs/pt.js                                                         0000777 0000000 0000000 00000003621 12534142432 017640  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["pt"]={
new_document: "Novo documento",
search_button: "Localizar e substituir",
search_command: "Localizar próximo",
search: "Localizar",
replace: "Substituir",
replace_command: "Substituir",
find_next: "Localizar",
replace_all: "Subst. tudo",
reg_exp: "Expressões regulares",
match_case: "Diferenciar maiúsculas e minúsculas",
not_found: "Não encontrado.",
occurrence_replaced: "Ocorrências substituidas",
search_field_empty: "Campo localizar vazio.",
restart_search_at_begin: "Fim das ocorrências. Recomeçar do inicio.",
move_popup: "Mover janela",
font_size: "--Tamanho da fonte--",
go_to_line: "Ir para linha",
go_to_line_prompt: "Ir para a linha:",
undo: "Desfazer",
redo: "Refazer",
change_smooth_selection: "Opções visuais",
highlight: "Cores de sintaxe",
reset_highlight: "Resetar cores (se não sincronizado)",
word_wrap: "toggle word wrapping mode",
help: "Sobre",
save: "Salvar",
load: "Carregar",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Posição",
total: "Total",
close_popup: "Fechar",
shortcuts: "Shortcuts",
add_tab: "Adicionar tabulação",
remove_tab: "Remover tabulação",
about_notice: "Atenção: Cores de sintaxe são indicados somente para textos pequenos",
toggle: "Exibir editor",
accesskey: "Accesskey",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Processando...",
fullscreen: "fullscreen",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                               ./mvappsvr/docroot/db/edit_area/langs/bg.js                                                         0000777 0000000 0000000 00000006074 12534142432 017612  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
 *	Bulgarian translation
 *	Author:		Valentin Hristov
 *	Company:	SOFTKIT Bulgarian
 *	Site:		http://www.softkit-bg.com
 */
editAreaLoader.lang["bg"]={
new_document: "нов документ",
search_button: "търсене и замяна",
search_command: "търси следващия / отвори прозорец с търсачка",
search: "търсене",
replace: "замяна",
replace_command: "замяна / отвори прозорец с търсачка",
find_next: "намери следващия",
replace_all: "замени всички",
reg_exp: "реголярни изрази",
match_case: "чуствителен към регистъра",
not_found: "няма резултат.",
occurrence_replaced: "замяната е осъществена.",
search_field_empty: "Полето за търсене е празно",
restart_search_at_begin: "До края на документа. Почни с началото.",
move_popup: "премести прозореца с търсачката",
font_size: "--Размер на шрифта--",
go_to_line: "премени към реда",
go_to_line_prompt: "премени към номера на реда:",
undo: "отмени",
redo: "върни",
change_smooth_selection: "включи/изключи някой от функциите за преглед (по красиво, но повече натоварва)",
highlight: "превключване на оцветяване на синтаксиса включена/изключена",
reset_highlight: "въстанови оцветяване на синтаксиса (ако не е синхронизиран с текста)",
word_wrap: "режим на пренасяне на дълги редове",
help: "за програмата",
save: "съхрани",
load: "зареди",
line_abbr: "Стр",
char_abbr: "Стлб",
position: "Позиция",
total: "Всичко",
close_popup: "затвори прозореца",
shortcuts: "Бързи клавиши",
add_tab: "добави табулация в текста",
remove_tab: "премахни табулацията в текста",
about_notice: "Внимание: използвайте функцията оцветяване на синтаксиса само за малки текстове",
toggle: "Превключи редактор",
accesskey: "Бърз клавиш",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Зареждане...",
fullscreen: "на цял екран",
syntax_selection: "--Синтаксис--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "PHP",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "XML",
syntax_c: "C",
syntax_cpp: "C++",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Затвори файла"
};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/edit_area/langs/zh.js                                                         0000777 0000000 0000000 00000003751 12534142432 017642  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["zh"]={
new_document: "新建空白文档",
search_button: "查找与替换",
search_command: "查找下一个 / 打开查找框",
search: "查找",
replace: "替换",
replace_command: "替换 / 打开查找框",
find_next: "查找下一个",
replace_all: "全部替换",
reg_exp: "正则表达式",
match_case: "匹配大小写",
not_found: "未找到.",
occurrence_replaced: "处被替换.",
search_field_empty: "查找框没有内容",
restart_search_at_begin: "已到到文档末尾. 从头重新查找.",
move_popup: "移动查找对话框",
font_size: "--字体大小--",
go_to_line: "转到行",
go_to_line_prompt: "转到行:",
undo: "恢复",
redo: "重做",
change_smooth_selection: "启用/禁止一些显示特性(更好看但更耗费资源)",
highlight: "启用/禁止语法高亮",
reset_highlight: "重置语法高亮(当文本显示不同步时)",
word_wrap: "toggle word wrapping mode",
help: "关于",
save: "保存",
load: "加载",
line_abbr: "行",
char_abbr: "字符",
position: "位置",
total: "总计",
close_popup: "关闭对话框",
shortcuts: "快捷键",
add_tab: "添加制表符(Tab)",
remove_tab: "移除制表符(Tab)",
about_notice: "注意：语法高亮功能仅用于较少内容的文本(文件内容太大会导致浏览器反应慢)",
toggle: "切换编辑器",
accesskey: "快捷键",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "正在处理中...",
fullscreen: "全屏编辑",
syntax_selection: "--语法--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "关闭文件"
};
                       ./mvappsvr/docroot/db/edit_area/langs/eo.js                                                         0000777 0000000 0000000 00000004352 12534142432 017622  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["eo"]={
new_document: "nova dokumento (vakigas la enhavon)",
search_button: "ser&#265;i / anstata&#365;igi",
search_command: "pluser&#265;i / malfermi la ser&#265;o-fenestron",
search: "ser&#265;i",
replace: "anstata&#365;igi",
replace_command: "anstata&#365;igi / malfermi la ser&#265;o-fenestron",
find_next: "ser&#265;i",
replace_all: "anstata&#365;igi &#265;ion",
reg_exp: "regula esprimo",
match_case: "respekti la usklecon",
not_found: "ne trovita.",
occurrence_replaced: "anstata&#365;igoj plenumitaj.",
search_field_empty: "La kampo estas malplena.",
restart_search_at_begin: "Fino de teksto &#285;isrirata, &#265;u da&#365;rigi el la komenco?",
move_popup: "movi la ser&#265;o-fenestron",
font_size: "--Tipara grando--",
go_to_line: "iri al la linio",
go_to_line_prompt: "iri al la linio numero:",
undo: "rezigni",
redo: "refari",
change_smooth_selection: "ebligi/malebligi la funkcioj de vidigo (pli bona vidigo, sed pli da &#349;ar&#285;o de la &#265;eforgano)",
highlight: "ebligi/malebligi la sintaksan kolorigon",
reset_highlight: "repravalorizi la sintaksan kolorigon (se malsinkronigon de la teksto)",
word_wrap: "toggle word wrapping mode",
help: "pri",
save: "registri",
load: "&#349;ar&#285;i",
line_abbr: "Ln",
char_abbr: "Sg",
position: "Pozicio",
total: "Sumo",
close_popup: "fermi la &#349;prucfenestron",
shortcuts: "Fulmoklavo",
add_tab: "aldoni tabon en la tekston",
remove_tab: "forigi tablon el la teksto",
about_notice: "Noto: la sintaksa kolorigo estas nur prikalkulita por mallongaj tekstoj.",
toggle: "baskuligi la redaktilon",
accesskey: "Fulmoklavo",
tab: "Tab",
shift: "Maj",
ctrl: "Ktrl",
esc: "Esk",
processing: "&#349;argante...",
fullscreen: "plenekrane",
syntax_selection: "--Sintakso--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Pitono",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Fermi la dosieron"
};                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/edit_area/langs/es.js                                                         0000777 0000000 0000000 00000004142 12534142432 017623  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["es"]={
new_document: "nuevo documento vacío",
search_button: "buscar y reemplazar",
search_command: "buscar siguiente / abrir área de búsqueda",
search: "buscar",
replace: "reemplazar",
replace_command: "reemplazar / abrir área de búsqueda",
find_next: "encontrar siguiente",
replace_all: "reemplazar todos",
reg_exp: "expresiones regulares",
match_case: "coincidir capitalización",
not_found: "no encontrado.",
occurrence_replaced: "ocurrencias reemplazadas.",
search_field_empty: "Campo de búsqueda vacío",
restart_search_at_begin: "Se ha llegado al final del área. Se va a seguir desde el principio.",
move_popup: "mover la ventana de búsqueda",
font_size: "--Tamaño de la fuente--",
go_to_line: "ir a la línea",
go_to_line_prompt: "ir a la línea número:",
undo: "deshacer",
redo: "rehacer",
change_smooth_selection: "activar/desactivar algunas características de visualización (visualización más inteligente pero más carga de CPU)",
highlight: "intercambiar resaltado de sintaxis",
reset_highlight: "reinicializar resaltado (si no esta sincronizado con el texto)",
word_wrap: "toggle word wrapping mode",
help: "acerca",
save: "guardar",
load: "cargar",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Posición",
total: "Total",
close_popup: "recuadro de cierre",
shortcuts: "Atajos",
add_tab: "añadir tabulado al texto",
remove_tab: "borrar tabulado del texto",
about_notice: "Aviso: el resaltado de sintaxis sólo funciona para texto pequeño",
toggle: "Cambiar editor",
accesskey: "Tecla de acceso",
tab: "Tab",
shift: "Mayúsc",
ctrl: "Ctrl",
esc: "Esc",
processing: "Procesando...",
fullscreen: "pantalla completa",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/edit_area/langs/fi.js                                                         0000777 0000000 0000000 00000004116 12534142432 017613  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["fi"]={
new_document: "uusi tyhjä dokumentti",
search_button: "etsi ja korvaa",
search_command: "etsi seuraava / avaa etsintävalikko",
search: "etsi",
replace: "korvaa",
replace_command: "korvaa / avaa etsintävalikko",
find_next: "etsi seuraava",
replace_all: "korvaa kaikki",
reg_exp: "säännölliset lausekkeet",
match_case: "täsmää kirjainkokoon",
not_found: "ei löytynyt.",
occurrence_replaced: "esiintymää korvattu.",
search_field_empty: "Haettava merkkijono on tyhjä",
restart_search_at_begin: "Alueen loppu saavutettiin. Aloitetaan alusta.",
move_popup: "siirrä etsintävalikkoa",
font_size: "--Fontin koko--",
go_to_line: "siirry riville",
go_to_line_prompt: "mene riville:",
undo: "peruuta",
redo: "tee uudelleen",
change_smooth_selection: "kytke/sammuta joitakin näyttötoimintoja (Älykkäämpi toiminta, mutta suurempi CPU kuormitus)",
highlight: "kytke syntaksikorostus päälle/pois",
reset_highlight: "resetoi syntaksikorostus (jos teksti ei ole synkassa korostuksen kanssa)",
word_wrap: "toggle word wrapping mode",
help: "tietoja",
save: "tallenna",
load: "lataa",
line_abbr: "Rv",
char_abbr: "Pos",
position: "Paikka",
total: "Yhteensä",
close_popup: "sulje valikko",
shortcuts: "Pikatoiminnot",
add_tab: "lisää sisennys tekstiin",
remove_tab: "poista sisennys tekstistä",
about_notice: "Huomautus: syntaksinkorostus toimii vain pienelle tekstille",
toggle: "Kytke editori",
accesskey: "Pikanäppäin",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Odota...",
fullscreen: "koko ruutu",
syntax_selection: "--Syntaksi--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Sulje tiedosto"
};                                                                                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/edit_area/langs/sk.js                                                         0000777 0000000 0000000 00000004243 12534142432 017633  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["sk"]={
new_document: "nový prázdy dokument",
search_button: "vyhľadaj a nahraď",
search_command: "hľadaj ďalsšie / otvor vyhľadávacie pole",
search: "hľadaj",
replace: "nahraď",
replace_command: "nahraď / otvor vyhľadávacie pole",
find_next: "nájdi ďalšie",
replace_all: "nahraď všetko",
reg_exp: "platné výrazy",
match_case: "zhodujúce sa výrazy",
not_found: "nenájdené.",
occurrence_replaced: "výskyty nahradené.",
search_field_empty: "Pole vyhľadávanie je prádzne",
restart_search_at_begin: "End of area reached. Restart at begin.",
move_popup: "presuň vyhľadávacie okno",
font_size: "--Veľkosť textu--",
go_to_line: "prejdi na riadok",
go_to_line_prompt: "prejdi na riadok:",
undo: "krok späť",
redo: "prepracovať",
change_smooth_selection: "povoliť/zamietnúť niektoré zo zobrazených funkcií (účelnejšie zobrazenie vyžaduje  väčšie zaťaženie procesora CPU)",
highlight: "prepnúť zvýrazňovanie syntaxe zap/vyp",
reset_highlight: "zrušiť zvýrazňovanie (ak je nesynchronizované s textom)",
word_wrap: "toggle word wrapping mode",
help: "o programe",
save: "uložiť",
load: "načítať",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Pozícia",
total: "Spolu",
close_popup: "zavrieť okno",
shortcuts: "Skratky",
add_tab: "pridať tabulovanie textu",
remove_tab: "odstrániť tabulovanie textu",
about_notice: "Upozornenie: funkcia zvýrazňovania syntaxe je dostupná iba pre malý text",
toggle: "Prepnúť editor",
accesskey: "Accesskey",
tab: "Záložka",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Spracúvam...",
fullscreen: "cel=a obrazovka",
syntax_selection: "--Vyber Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/edit_area/langs/it.js                                                         0000777 0000000 0000000 00000004101 12534142432 017623  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["it"]={
new_document: "nuovo documento vuoto",
search_button: "cerca e sostituisci",
search_command: "trova successivo / apri finestra di ricerca",
search: "cerca",
replace: "sostituisci",
replace_command: "sostituisci / apri finestra di ricerca",
find_next: "trova successivo",
replace_all: "sostituisci tutti",
reg_exp: "espressioni regolari",
match_case: "confronta maiuscole/minuscole<br />",
not_found: "non trovato.",
occurrence_replaced: "occorrenze sostituite.",
search_field_empty: "Campo ricerca vuoto",
restart_search_at_begin: "Fine del testo raggiunta. Ricomincio dall'inizio.",
move_popup: "sposta popup di ricerca",
font_size: "-- Dimensione --",
go_to_line: "vai alla linea",
go_to_line_prompt: "vai alla linea numero:",
undo: "annulla",
redo: "ripeti",
change_smooth_selection: "abilita/disabilita alcune caratteristiche della visualizzazione",
highlight: "abilita/disabilita colorazione della sintassi",
reset_highlight: "aggiorna colorazione (se non sincronizzata)",
word_wrap: "toggle word wrapping mode",
help: "informazioni su...",
save: "salva",
load: "carica",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Posizione",
total: "Totale",
close_popup: "chiudi popup",
shortcuts: "Scorciatoie",
add_tab: "aggiungi tabulazione",
remove_tab: "rimuovi tabulazione",
about_notice: "Avviso: la colorazione della sintassi vale solo con testo piccolo",
toggle: "Abilita/disabilita editor",
accesskey: "Accesskey",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "In corso...",
fullscreen: "fullscreen",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/edit_area/elements_functions.js                                               0000777 0000000 0000000 00000023375 12534142432 022025  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /****
 * This page contains some general usefull functions for javascript
 *
 ****/  
	
	
	// need to redefine this functiondue to IE problem
	function getAttribute( elm, aName ) {
		var aValue,taName,i;
		try{
			aValue = elm.getAttribute( aName );
		}catch(exept){}
		
		if( ! aValue ){
			for( i = 0; i < elm.attributes.length; i ++ ) {
				taName = elm.attributes[i] .name.toLowerCase();
				if( taName == aName ) {
					aValue = elm.attributes[i] .value;
					return aValue;
				}
			}
		}
		return aValue;
	};
	
	// need to redefine this function due to IE problem
	function setAttribute( elm, attr, val ) {
		if(attr=="class"){
			elm.setAttribute("className", val);
			elm.setAttribute("class", val);
		}else{
			elm.setAttribute(attr, val);
		}
	};
	
	/* return a child element
		elem: element we are searching in
		elem_type: type of the eleemnt we are searching (DIV, A, etc...)
		elem_attribute: attribute of the searched element that must match
		elem_attribute_match: value that elem_attribute must match
		option: "all" if must return an array of all children, otherwise return the first match element
		depth: depth of search (-1 or no set => unlimited)
	*/
	function getChildren(elem, elem_type, elem_attribute, elem_attribute_match, option, depth)
	{           
		if(!option)
			var option="single";
		if(!depth)
			var depth=-1;
		if(elem){
			var children= elem.childNodes;
			var result=null;
			var results= [];
			for (var x=0;x<children.length;x++) {
				strTagName = new String(children[x].tagName);
				children_class="?";
				if(strTagName!= "undefined"){
					child_attribute= getAttribute(children[x],elem_attribute);
					if((strTagName.toLowerCase()==elem_type.toLowerCase() || elem_type=="") && (elem_attribute=="" || child_attribute==elem_attribute_match)){
						if(option=="all"){
							results.push(children[x]);
						}else{
							return children[x];
						}
					}
					if(depth!=0){
						result=getChildren(children[x], elem_type, elem_attribute, elem_attribute_match, option, depth-1);
						if(option=="all"){
							if(result.length>0){
								results= results.concat(result);
							}
						}else if(result!=null){                                                                          
							return result;
						}
					}
				}
			}
			if(option=="all")
			   return results;
		}
		return null;
	};       
	
	function isChildOf(elem, parent){
		if(elem){
			if(elem==parent)
				return true;
			while(elem.parentNode != 'undefined'){
				return isChildOf(elem.parentNode, parent);
			}
		}
		return false;
	};
	
	function getMouseX(e){

		if(e!=null && typeof(e.pageX)!="undefined"){
			return e.pageX;
		}else{
			return (e!=null?e.x:event.x)+ document.documentElement.scrollLeft;
		}
	};
	
	function getMouseY(e){
		if(e!=null && typeof(e.pageY)!="undefined"){
			return e.pageY;
		}else{
			return (e!=null?e.y:event.y)+ document.documentElement.scrollTop;
		}
	};
	
	function calculeOffsetLeft(r){
		return calculeOffset(r,"offsetLeft")
	};
	
	function calculeOffsetTop(r){
		return calculeOffset(r,"offsetTop")
	};
	
	function calculeOffset(element,attr){
		var offset=0;
		while(element){
			offset+=element[attr];
			element=element.offsetParent
		}
		return offset;
	};
	
	/** return the computed style
	 *	@param: elem: the reference to the element
	 *	@param: prop: the name of the css property	 
	 */
	function get_css_property(elem, prop)
	{
		if(document.defaultView)
		{
			return document.defaultView.getComputedStyle(elem, null).getPropertyValue(prop);
		}
		else if(elem.currentStyle)
		{
			var prop = prop.replace(/-\D/gi, function(sMatch)
			{
				return sMatch.charAt(sMatch.length - 1).toUpperCase();
			});
			return elem.currentStyle[prop];
		}
		else return null;
	}
	
/****
 * Moving an element 
 ***/  
	
	var _mCE;	// currently moving element
	
	/* allow to move an element in a window
		e: the event
		id: the id of the element
		frame: the frame of the element 
		ex of use:
			in html:	<img id='move_area_search_replace' onmousedown='return parent.start_move_element(event,"area_search_replace", parent.frames["this_frame_id"]);' .../>  
		or
			in javascript: document.getElementById("my_div").onmousedown= start_move_element
	*/
	function start_move_element(e, id, frame){
		var elem_id=(e.target || e.srcElement).id;
		if(id)
			elem_id=id;		
		if(!frame)
			frame=window;
		if(frame.event)
			e=frame.event;
			
		_mCE= frame.document.getElementById(elem_id);
		_mCE.frame=frame;
		frame.document.onmousemove= move_element;
		frame.document.onmouseup= end_move_element;
		/*_mCE.onmousemove= move_element;
		_mCE.onmouseup= end_move_element;*/
		
		//alert(_mCE.frame.document.body.offsetHeight);
		
		mouse_x= getMouseX(e);
		mouse_y= getMouseY(e);
		//window.status=frame+ " elem: "+elem_id+" elem: "+ _mCE + " mouse_x: "+mouse_x;
		_mCE.start_pos_x = mouse_x - (_mCE.style.left.replace("px","") || calculeOffsetLeft(_mCE));
		_mCE.start_pos_y = mouse_y - (_mCE.style.top.replace("px","") || calculeOffsetTop(_mCE));
		return false;
	};
	
	function end_move_element(e){
		_mCE.frame.document.onmousemove= "";
		_mCE.frame.document.onmouseup= "";		
		_mCE=null;
	};
	
	function move_element(e){
		var newTop,newLeft,maxLeft;

		if( _mCE.frame && _mCE.frame.event )
			e=_mCE.frame.event;
		newTop	= getMouseY(e) - _mCE.start_pos_y;
		newLeft	= getMouseX(e) - _mCE.start_pos_x;
		
		maxLeft	= _mCE.frame.document.body.offsetWidth- _mCE.offsetWidth;
		max_top	= _mCE.frame.document.body.offsetHeight- _mCE.offsetHeight;
		newTop	= Math.min(Math.max(0, newTop), max_top);
		newLeft	= Math.min(Math.max(0, newLeft), maxLeft);
		
		_mCE.style.top	= newTop+"px";
		_mCE.style.left	= newLeft+"px";		
		return false;
	};
	
/***
 * Managing a textarea (this part need the navigator infos from editAreaLoader
 ***/ 
	
	var nav= editAreaLoader.nav;
	
	// allow to get infos on the selection: array(start, end)
	function getSelectionRange(textarea){
		return {"start": textarea.selectionStart, "end": textarea.selectionEnd};
	};
	
	// allow to set the selection
	function setSelectionRange(t, start, end){
		t.focus();
		
		start	= Math.max(0, Math.min(t.value.length, start));
		end		= Math.max(start, Math.min(t.value.length, end));
	
		if( this.isOpera && this.isOpera < 9.6 ){	// Opera bug when moving selection start and selection end
			t.selectionEnd = 1;	
			t.selectionStart = 0;			
			t.selectionEnd = 1;	
			t.selectionStart = 0;		
		}
		t.selectionStart	= start;
		t.selectionEnd		= end;		
		//textarea.setSelectionRange(start, end);
		
		if(isIE)
			set_IE_selection(t);
	};

	
	// set IE position in Firefox mode (textarea.selectionStart and textarea.selectionEnd). should work as a repeated task
	function get_IE_selection(t){
		var d=document,div,range,stored_range,elem,scrollTop,relative_top,line_start,line_nb,range_start,range_end,tab;
		if(t && t.focused)
		{	
			if(!t.ea_line_height)
			{	// calculate the lineHeight
				div= d.createElement("div");
				div.style.fontFamily= get_css_property(t, "font-family");
				div.style.fontSize= get_css_property(t, "font-size");
				div.style.visibility= "hidden";			
				div.innerHTML="0";
				d.body.appendChild(div);
				t.ea_line_height= div.offsetHeight;
				d.body.removeChild(div);
			}
			//t.focus();
			range = d.selection.createRange();
			try
			{
				stored_range = range.duplicate();
				stored_range.moveToElementText( t );
				stored_range.setEndPoint( 'EndToEnd', range );
				if(stored_range.parentElement() == t){
					// the range don't take care of empty lines in the end of the selection
					elem		= t;
					scrollTop	= 0;
					while(elem.parentNode){
						scrollTop+= elem.scrollTop;
						elem	= elem.parentNode;
					}
				
				//	var scrollTop= t.scrollTop + document.body.scrollTop;
					
				//	var relative_top= range.offsetTop - calculeOffsetTop(t) + scrollTop;
					relative_top= range.offsetTop - calculeOffsetTop(t)+ scrollTop;
				//	alert("rangeoffset: "+ range.offsetTop +"\ncalcoffsetTop: "+ calculeOffsetTop(t) +"\nrelativeTop: "+ relative_top);
					line_start	= Math.round((relative_top / t.ea_line_height) +1);
					
					line_nb		= Math.round(range.boundingHeight / t.ea_line_height);
					
					range_start	= stored_range.text.length - range.text.length;
					tab	= t.value.substr(0, range_start).split("\n");			
					range_start	+= (line_start - tab.length)*2;		// add missing empty lines to the selection
					t.selectionStart = range_start;
					
					range_end	= t.selectionStart + range.text.length;
					tab	= t.value.substr(0, range_start + range.text.length).split("\n");			
					range_end	+= (line_start + line_nb - 1 - tab.length)*2;
					t.selectionEnd = range_end;
				}
			}
			catch(e){}
		}
		setTimeout("get_IE_selection(document.getElementById('"+ t.id +"'));", 50);
	};
	
	function IE_textarea_focus(){
		event.srcElement.focused= true;
	}
	
	function IE_textarea_blur(){
		event.srcElement.focused= false;
	}
	
	// select the text for IE (take into account the \r difference)
	function set_IE_selection( t ){
		var nbLineStart,nbLineStart,nbLineEnd,range;
		if(!window.closed){ 
			nbLineStart=t.value.substr(0, t.selectionStart).split("\n").length - 1;
			nbLineEnd=t.value.substr(0, t.selectionEnd).split("\n").length - 1;
			try
			{
				range = document.selection.createRange();
				range.moveToElementText( t );
				range.setEndPoint( 'EndToStart', range );
				range.moveStart('character', t.selectionStart - nbLineStart);
				range.moveEnd('character', t.selectionEnd - nbLineEnd - (t.selectionStart - nbLineStart)  );
				range.select();
			}
			catch(e){}
		}
	};
	
	
	editAreaLoader.waiting_loading["elements_functions.js"]= "loaded";
                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/langs_mk.js                                                         0000777 0000000 0000000 00000005401 12534142432 017702  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["mk"]={
new_document: "Нов документ",
search_button: "Најди и замени",
search_command: "Барај следно / Отвори нов прозорец за пребарување",
search: "Барај",
replace: "Замени",
replace_command: "Замени / Отвори прозорец за пребарување",
find_next: "најди следно",
replace_all: "Замени ги сите",
reg_exp: "Регуларни изрази",
match_case: "Битна е големината на буквите",
not_found: "не е пронајдено.",
occurrence_replaced: "замени.",
search_field_empty: "Полето за пребарување е празно",
restart_search_at_begin: "Крај на областа. Стартувај од почеток.",
move_popup: "Помести го прозорецот",
font_size: "--Големина на текстот--",
go_to_line: "Оди на линија",
go_to_line_prompt: "Оди на линија со број:",
undo: "Врати",
redo: "Повтори",
change_smooth_selection: "Вклучи/исклучи некои карактеристики за приказ (попаметен приказ, но поголемо оптеретување за процесорот)",
highlight: "Вклучи/исклучи осветлување на синтакса",
reset_highlight: "Ресетирај го осветлувањето на синтакса (доколку е десинхронизиранo со текстот)",
word_wrap: "toggle word wrapping mode",
help: "За",
save: "Зачувај",
load: "Вчитај",
line_abbr: "Лн",
char_abbr: "Зн",
position: "Позиција",
total: "Вкупно",
close_popup: "Затвори го прозорецот",
shortcuts: "Кратенки",
add_tab: "Додај табулација на текстот",
remove_tab: "Отстрани ја табулацијата",
about_notice: "Напомена: Осветлувањето на синтанса е само за краток текст",
toggle: "Смени начин на уредување",
accesskey: "Accesskey",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Обработувам...",
fullscreen: "Цел прозорец",
syntax_selection: "--Синтакса--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Избери датотека"
};
                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/edit_area/images_statusbar_resize.gif                                         0000777 0000000 0000000 00000000117 12534142432 023155  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a      !   ,        
- f:eA!%riyKj ;                                                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/edit_area/images_highlight.gif                                                0000777 0000000 0000000 00000000400 12534142432 021526  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   F<&zB|rgc[Ϭ¸geB:ªBԴnn~FNRȖݢbҺbܒtbLNg2ܱ   !   ,       }'dih(;2ʆ8총p)!(
c4 Ċ,"H*GTlχHp<-p
mDuUdv ' ,22#'! ;                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/edit_area/images_move.gif                                                     0000777 0000000 0000000 00000000401 12534142432 020526  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   			


                                    !   ,       ~ %4I&f`$N$H$'NHNd2b"o#"͒H(F$"M!kD@pb@<ZX'0:P< Z <
Z2bbC%	6Q[H;&7Cc2! ;                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/edit_area/reg_syntax_basic.js                                                 0000777 0000000 0000000 00000007272 12534142432 021443  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.load_syntax["basic"] = {
	'COMMENT_SINGLE' : {1 : "!" }
	,'COMMENT_MULTI' : { ";*" : "\n" }
	,'QUOTEMARKS' : {1: '"', 2: "'"}
	,'KEYWORD_CASE_SENSITIVE' : false
	,'KEYWORDS' : {
		'statements' : [
'abort', 'aux', 'begin case', 'break', 'break off', 'break on', 'call', 'capturing', 
'case', 'casing', 'casing off', 'casing on', 'chain', 'chap', 'clear', 'cleardata', 
'clearfile', 'clearselect', 'close', 'com', 'commit transaction', 'commit work', 'common', 
'compare', 'convert', 'crt', 'data', 'debug', 'del', 'delete', 'dim', 'dimension', 'do', 
'echr ', 'echo off', 'echo on', 'else', 'end', 'end case', 'enter', 'equ', 'equate', 
'error', 'execute', 'exit', 'file', 'filelock', 'fileunlock', 'footing', 'for', 'next', 
'until', 'while', 'get', 'gosub', 'goto', 'heading', 'hush', 'if', 'ifr', 'in', 'include', 
'input', 'input ctrl', 'inputclear', 'inputerr', 'inputnull', 'inputparity', 'inputtrap gosub', 
'inputtrap goto', 'ins', 'insert', 'key', 'let', 'locate', 'lock', 'loop', 'mat', 'matbuild', 
'matparse', 'matread', 'matreadu', 'matwrite', 'matwriteu', 'next', 'null', 'on gosub', 'on goto', 
'open', 'out', 'page', 'perform', 'precision', 'print', 'printchar', 'printer', 'printer off', 
'procread', 'procwrite', 'program', 'prompt', 'read', 'readnext', 'readt', 'readtl', 'readtx', 
'readu', 'readv', 'readvu', 'release', 'rem', 'remove', 'repeat', 'replace', 'return', 'rewind', 
'rollback transaction', 'rollback work', 'root', 'rqm', 'select', 'send', 'sleep', 'spoolq', 'stop', 
'subroutine', 'ta', 'tcl', 'tclread', 'then', 'transaction', 'transaction abort', 'transaction cache', 
'transaction commit', 'transaction flush', 'transaction rollback', 'unlock', 'until', 'weof', 'while', 
'write', 'writet', 'writeu', 'writev', 'writevu'
		]
		,'keywords' : [ 'return to', 'on', 'from', 'to' ]
		,'functions' : [
'%accept(', '%alarm(', '%bind(', '%chdir(', '%chmod(', '%chown(', '%close(', '%connect(', '%creat(', '%dup(', '%fclose(', '%fdopen(', '%fgetc(', '%fgets(', '%fopen(', '%fprintf(', '%fputc(', '%fputs(', '%free(', '%freopen(', '%fsize(', '%getenv(', '%gethostid(', '%getpgrp(', '%getpid(', '%getppid(', '%ioctl(', '%kill(', '%listen(', '%lseek(', '%malloc(', '%memccpy(', '%memcpy(', '%memxcpy(', '%open(', '%pause(', '%pclose(', '%pgetpid(', '%popen(', '%putenv(', '%rdhex(', '%read(', '%semctl(', '%semget(', '%semop(', '%setflush(', '%shmat(', '%shmdt(', '%shmget(', '%socket(', '%ttyname(', '%unlink(', '%wait(', '%whex(', '%write(', '@(', 'abs(', 'access(', 'alpha(', 'ASCII(', 'assigned(', 'change(', 'char(', 'col1(', 'col2(', 'convert(', 'cos(', 'count(', 'date(', 'dcount(', 'delete(', 'dquote(', 'dtx(', 'ebcdic(', 'ereplace(', 'error(', 'exchange(', 'exp(', 'extract(', 'field(', 'fmt(', 'fold(', 'iconv(', 'index(', 'inmat(', 'insert(', 'int(', 'len(', 'ln(', 'maximum(', 'minimum(', 'mod(', 'not(', 'num(', 'occurs(', 'oconv(', 'pwr(', 'rem(', 'replace(', 'rnd(', 'scan(', 'sentence(', 'seq(', 'sin(', 'sort(', 'soundex(', 'space(', 'spooler(', 'sqrt(', 'squote(', 'status(', 'str(', 'sum(', 'summation(', 'swap(', 'system(', 'tan(', 'time(', 'timedate(', 'trim(', 'trimb(', 'trimf(', 'xtd('
		]
		,'operators' : [
			'and', 'eqv', 'imp', 'not', 'or', 'xor', 'matches', 'ge', 'le', 'eq', 'ne'
		]
	}
	,'OPERATORS' :[
		'+', '-', '/', '=', '*', '<', '>', '!', '&', '+=', '*=', '/=', '-=', '>=', '<='
	]
	,'DELIMITERS' :[
		'(', ')'
	]
	,'STYLES' : {
		'COMMENTS': 'color: #AAAAAA'
		,'QUOTESMARKS': 'color: #333399;'
		,'KEYWORDS' : {
			'keywords' : 'color: #3366FF;'
			,'functions' : 'color: #0000FF;'
			,'statements' : 'color: #3366FF;'
			,'operators' : 'color: #FF0000;'
			}
		,'OPERATORS' : 'color: #FF0000;'
		,'DELIMITERS' : 'color: #0000FF;'
	}
};
                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/edit_area/edit_area_full.js                                                   0000777 0000000 0000000 00000343103 12534142432 021052  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    function EAL(){var t=this;t.version="0.8.1.1";date=new Date();t.start_time=date.getTime();t.win="loading";t.error=false;t.baseURL="";t.template="";t.lang={};t.load_syntax={};t.syntax={};t.loadedFiles=[];t.waiting_loading={};t.scripts_to_load=[];t.sub_scripts_to_load=[];t.resize=[];t.hidden={};t.default_settings={debug:false,smooth_selection:true,font_size:"10",font_family:"monospace",start_highlight:false,toolbar:"search,go_to_line,fullscreen,|,undo,redo,|,select_font,|,change_smooth_selection,highlight,reset_highlight,word_wrap,|,help",begin_toolbar:"",end_toolbar:"",is_multi_files:false,allow_resize:"both",show_line_colors:false,min_width:400,min_height:125,replace_tab_by_spaces:false,allow_toggle:true,language:"en",syntax:"",syntax_selection_allow:"basic,brainfuck,c,coldfusion,cpp,css,html,java,js,pas,perl,php,python,ruby,robotstxt,sql,tsql,vb,xml",display:"onload",max_undo:30,browsers:"known",plugins:"",gecko_spellcheck:false,fullscreen:false,is_editable:true,cursor_position:"begin",word_wrap:false,autocompletion:false,load_callback:"",save_callback:"",change_callback:"",submit_callback:"",EA_init_callback:"",EA_delete_callback:"",EA_load_callback:"",EA_unload_callback:"",EA_toggle_on_callback:"",EA_toggle_off_callback:"",EA_file_switch_on_callback:"",EA_file_switch_off_callback:"",EA_file_close_callback:""};t.advanced_buttons=[ ['new_document','newdocument.gif','new_document',false],['search','search.gif','show_search',false],['go_to_line','go_to_line.gif','go_to_line',false],['undo','undo.gif','undo',true],['redo','redo.gif','redo',true],['change_smooth_selection','smooth_selection.gif','change_smooth_selection_mode',true],['reset_highlight','reset_highlight.gif','resync_highlight',true],['highlight','highlight.gif','change_highlight',true],['help','help.gif','show_help',false],['save','save.gif','save',false],['load','load.gif','load',false],['fullscreen','fullscreen.gif','toggle_full_screen',false],['word_wrap','word_wrap.gif','toggle_word_wrap',true],['autocompletion','autocompletion.gif','toggle_autocompletion',true] ];t.set_browser_infos(t);if(t.isIE>=6||t.isGecko||(t.isWebKit&&!t.isSafari<3)||t.isOpera>=9||t.isCamino)t.isValidBrowser=true;
else t.isValidBrowser=false;t.set_base_url();for(var i=0;i<t.scripts_to_load.length;i++){setTimeout("eAL.load_script('"+t.baseURL+t.scripts_to_load[i]+".js');",1);t.waiting_loading[t.scripts_to_load[i]+".js"]=false;}t.add_event(window,"load",EAL.prototype.window_loaded);};EAL.prototype={has_error:function(){this.error=true;for(var i in EAL.prototype){EAL.prototype[i]=function(){};}},set_browser_infos:function(o){ua=navigator.userAgent;o.isWebKit=/WebKit/.test(ua);o.isGecko=!o.isWebKit&&/Gecko/.test(ua);o.isMac=/Mac/.test(ua);o.isIE=(navigator.appName=="Microsoft Internet Explorer");if(o.isIE){o.isIE=ua.replace(/^.*?MSIE\s+([0-9\.]+).*$/,"$1");if(o.isIE<6)o.has_error();}if(o.isOpera=(ua.indexOf('Opera')!=-1)){o.isOpera=ua.replace(/^.*?Opera.*?([0-9\.]+).*$/i,"$1");if(o.isOpera<9)o.has_error();o.isIE=false;}if(o.isFirefox=(ua.indexOf('Firefox')!=-1))o.isFirefox=ua.replace(/^.*?Firefox.*?([0-9\.]+).*$/i,"$1");if(ua.indexOf('Iceweasel')!=-1)o.isFirefox=ua.replace(/^.*?Iceweasel.*?([0-9\.]+).*$/i,"$1");if(ua.indexOf('GranParadiso')!=-1)o.isFirefox=ua.replace(/^.*?GranParadiso.*?([0-9\.]+).*$/i,"$1");if(ua.indexOf('BonEcho')!=-1)o.isFirefox=ua.replace(/^.*?BonEcho.*?([0-9\.]+).*$/i,"$1");if(ua.indexOf('SeaMonkey')!=-1)o.isFirefox=(ua.replace(/^.*?SeaMonkey.*?([0-9\.]+).*$/i,"$1"))+1;if(o.isCamino=(ua.indexOf('Camino')!=-1))o.isCamino=ua.replace(/^.*?Camino.*?([0-9\.]+).*$/i,"$1");if(o.isSafari=(ua.indexOf('Safari')!=-1))o.isSafari=ua.replace(/^.*?Version\/([0-9]+\.[0-9]+).*$/i,"$1");if(o.isChrome=(ua.indexOf('Chrome')!=-1)){o.isChrome=ua.replace(/^.*?Chrome.*?([0-9\.]+).*$/i,"$1");o.isSafari=false;}},window_loaded:function(){eAL.win="loaded";if(document.forms){for(var i=0;i<document.forms.length;i++){var form=document.forms[i];form.edit_area_replaced_submit=null;try{form.edit_area_replaced_submit=form.onsubmit;form.onsubmit="";}catch(e){}eAL.add_event(form,"submit",EAL.prototype.submit);eAL.add_event(form,"reset",EAL.prototype.reset);}}eAL.add_event(window,"unload",function(){for(var i in eAs){eAL.delete_instance(i);}});},init_ie_textarea:function(id){var a=document.getElementById(id);try{if(a&&typeof(a.focused)=="undefined"){a.focus();a.focused=true;a.selectionStart=a.selectionEnd=0;get_IE_selection(a);eAL.add_event(a,"focus",IE_textarea_focus);eAL.add_event(a,"blur",IE_textarea_blur);}}catch(ex){}},init:function(settings){var t=this,s=settings,i;if(!s["id"])t.has_error();if(t.error)return;if(eAs[s["id"]])t.delete_instance(s["id"]);for(i in t.default_settings){if(typeof(s[i])=="undefined")s[i]=t.default_settings[i];}if(s["browsers"]=="known"&&t.isValidBrowser==false){return;}if(s["begin_toolbar"].length>0)s["toolbar"]=s["begin_toolbar"]+","+s["toolbar"];if(s["end_toolbar"].length>0)s["toolbar"]=s["toolbar"]+","+s["end_toolbar"];s["tab_toolbar"]=s["toolbar"].replace(/ /g,"").split(",");s["plugins"]=s["plugins"].replace(/ /g,"").split(",");for(i=0;i<s["plugins"].length;i++){if(s["plugins"][i].length==0)s["plugins"].splice(i,1);}t.get_template();t.load_script(t.baseURL+"langs_"+s["language"]+".js");if(s["syntax"].length>0){s["syntax"]=s["syntax"].toLowerCase();t.load_script(t.baseURL+"reg_syntax_"+s["syntax"]+".js");}eAs[s["id"]]={"settings":s};eAs[s["id"]]["displayed"]=false;eAs[s["id"]]["hidden"]=false;t.start(s["id"]);},delete_instance:function(id){var d=document,fs=window.frames,span,iframe;eAL.execCommand(id,"EA_delete");if(fs["frame_"+id]&&fs["frame_"+id].editArea){if(eAs[id]["displayed"])eAL.toggle(id,"off");fs["frame_"+id].editArea.execCommand("EA_unload");}span=d.getElementById("EditAreaArroundInfos_"+id);if(span)span.parentNode.removeChild(span);iframe=d.getElementById("frame_"+id);if(iframe){iframe.parentNode.removeChild(iframe);try{delete fs["frame_"+id];}catch(e){}}delete eAs[id];},start:function(id){var t=this,d=document,f,span,father,next,html='',html_toolbar_content='',template,content,i;if(t.win!="loaded"){setTimeout("eAL.start('"+id+"');",50);return;}for(i in t.waiting_loading){if(t.waiting_loading[i]!="loaded"&&typeof(t.waiting_loading[i])!="function"){setTimeout("eAL.start('"+id+"');",50);return;}}if(!t.lang[eAs[id]["settings"]["language"]]||(eAs[id]["settings"]["syntax"].length>0&&!t.load_syntax[eAs[id]["settings"]["syntax"]])){setTimeout("eAL.start('"+id+"');",50);return;}if(eAs[id]["settings"]["syntax"].length>0)t.init_syntax_regexp();if(!d.getElementById("EditAreaArroundInfos_"+id)&&(eAs[id]["settings"]["debug"]||eAs[id]["settings"]["allow_toggle"])){span=d.createElement("span");span.id="EditAreaArroundInfos_"+id;if(eAs[id]["settings"]["allow_toggle"]){checked=(eAs[id]["settings"]["display"]=="onload")?"checked='checked'":"";html+="<div id='edit_area_toggle_"+i+"'>";html+="<input id='edit_area_toggle_checkbox_"+id+"' class='toggle_"+id+"' type='checkbox' onclick='eAL.toggle(\""+id+"\");' accesskey='e' "+checked+" />";html+="<label for='edit_area_toggle_checkbox_"+id+"'>{$toggle}</label></div>";}if(eAs[id]["settings"]["debug"])html+="<textarea id='edit_area_debug_"+id+"' spellcheck='off' style='z-index:20;width:100%;height:120px;overflow:auto;border:solid black 1px;'></textarea><br />";html=t.translate(html,eAs[id]["settings"]["language"]);span.innerHTML=html;father=d.getElementById(id).parentNode;next=d.getElementById(id).nextSibling;if(next==null)father.appendChild(span);
else father.insertBefore(span,next);}if(!eAs[id]["initialized"]){t.execCommand(id,"EA_init");if(eAs[id]["settings"]["display"]=="later"){eAs[id]["initialized"]=true;return;}}if(t.isIE){t.init_ie_textarea(id);}area=eAs[id];for(i=0;i<area["settings"]["tab_toolbar"].length;i++){html_toolbar_content+=t.get_control_html(area["settings"]["tab_toolbar"][i],area["settings"]["language"]);}html_toolbar_content=t.translate(html_toolbar_content,area["settings"]["language"],"template");if(!t.iframe_script){t.iframe_script="";for(i=0;i<t.sub_scripts_to_load.length;i++)t.iframe_script+='<script language="javascript" type="text/javascript" src="'+t.baseURL+t.sub_scripts_to_load[i]+'.js"></script>';}for(i=0;i<area["settings"]["plugins"].length;i++){if(!t.all_plugins_loaded)t.iframe_script+='<script language="javascript" type="text/javascript" src="'+t.baseURL+'plugins/'+area["settings"]["plugins"][i]+'/'+area["settings"]["plugins"][i]+'.js"></script>';t.iframe_script+='<script language="javascript" type="text/javascript" src="'+t.baseURL+'plugins/'+area["settings"]["plugins"][i]+'/langs_'+area["settings"]["language"]+'.js"></script>';}if(!t.iframe_css){t.iframe_css="<link href='"+t.baseURL+"edit_area.css' rel='stylesheet' type='text/css' />";}template=t.template.replace(/\[__BASEURL__\]/g,t.baseURL);template=template.replace("[__TOOLBAR__]",html_toolbar_content);template=t.translate(template,area["settings"]["language"],"template");template=template.replace("[__CSSRULES__]",t.iframe_css);template=template.replace("[__JSCODE__]",t.iframe_script);template=template.replace("[__EA_VERSION__]",t.version);area.textarea=d.getElementById(area["settings"]["id"]);eAs[area["settings"]["id"]]["textarea"]=area.textarea;if(typeof(window.frames["frame_"+area["settings"]["id"]])!='undefined')delete window.frames["frame_"+area["settings"]["id"]];father=area.textarea.parentNode;content=d.createElement("iframe");content.name="frame_"+area["settings"]["id"];content.id="frame_"+area["settings"]["id"];content.style.borderWidth="0px";setAttribute(content,"frameBorder","0");content.style.overflow="hidden";content.style.display="none";next=area.textarea.nextSibling;if(next==null)father.appendChild(content);
else father.insertBefore(content,next);f=window.frames["frame_"+area["settings"]["id"]];f.document.open();f.eAs=eAs;f.area_id=area["settings"]["id"];f.document.area_id=area["settings"]["id"];f.document.write(template);f.document.close();},toggle:function(id,toggle_to){if(!toggle_to)toggle_to=(eAs[id]["displayed"]==true)?"off":"on";if(eAs[id]["displayed"]==true&&toggle_to=="off"){this.toggle_off(id);}
else if(eAs[id]["displayed"]==false&&toggle_to=="on"){this.toggle_on(id);}return false;},toggle_off:function(id){var fs=window.frames,f,t,parNod,nxtSib,selStart,selEnd,scrollTop,scrollLeft;if(fs["frame_"+id]){f=fs["frame_"+id];t=eAs[id]["textarea"];if(f.editArea.fullscreen['isFull'])f.editArea.toggle_full_screen(false);eAs[id]["displayed"]=false;t.wrap="off";setAttribute(t,"wrap","off");parNod=t.parentNode;nxtSib=t.nextSibling;parNod.removeChild(t);parNod.insertBefore(t,nxtSib);t.value=f.editArea.textarea.value;selStart=f.editArea.last_selection["selectionStart"];selEnd=f.editArea.last_selection["selectionEnd"];scrollTop=f.document.getElementById("result").scrollTop;scrollLeft=f.document.getElementById("result").scrollLeft;document.getElementById("frame_"+id).style.display='none';t.style.display="inline";try{t.focus();}catch(e){};if(this.isIE){t.selectionStart=selStart;t.selectionEnd=selEnd;t.focused=true;set_IE_selection(t);}
else{if(this.isOpera&&this.isOpera < 9.6){t.setSelectionRange(0,0);}try{t.setSelectionRange(selStart,selEnd);}catch(e){};}t.scrollTop=scrollTop;t.scrollLeft=scrollLeft;f.editArea.execCommand("toggle_off");}},toggle_on:function(id){var fs=window.frames,f,t,selStart=0,selEnd=0,scrollTop=0,scrollLeft=0,curPos,elem;if(fs["frame_"+id]){f=fs["frame_"+id];t=eAs[id]["textarea"];area=f.editArea;area.textarea.value=t.value;curPos=eAs[id]["settings"]["cursor_position"];if(t.use_last==true){selStart=t.last_selectionStart;selEnd=t.last_selectionEnd;scrollTop=t.last_scrollTop;scrollLeft=t.last_scrollLeft;t.use_last=false;}
else if(curPos=="auto"){try{selStart=t.selectionStart;selEnd=t.selectionEnd;scrollTop=t.scrollTop;scrollLeft=t.scrollLeft;}catch(ex){}}this.set_editarea_size_from_textarea(id,document.getElementById("frame_"+id));t.style.display="none";document.getElementById("frame_"+id).style.display="inline";area.execCommand("focus");eAs[id]["displayed"]=true;area.execCommand("update_size");f.document.getElementById("result").scrollTop=scrollTop;f.document.getElementById("result").scrollLeft=scrollLeft;area.area_select(selStart,selEnd-selStart);area.execCommand("toggle_on");}
else{elem=document.getElementById(id);elem.last_selectionStart=elem.selectionStart;elem.last_selectionEnd=elem.selectionEnd;elem.last_scrollTop=elem.scrollTop;elem.last_scrollLeft=elem.scrollLeft;elem.use_last=true;eAL.start(id);}},set_editarea_size_from_textarea:function(id,frame){var elem,width,height;elem=document.getElementById(id);width=Math.max(eAs[id]["settings"]["min_width"],elem.offsetWidth)+"px";height=Math.max(eAs[id]["settings"]["min_height"],elem.offsetHeight)+"px";if(elem.style.width.indexOf("%")!=-1)width=elem.style.width;if(elem.style.height.indexOf("%")!=-1)height=elem.style.height;frame.style.width=width;frame.style.height=height;},set_base_url:function(){var t=this,elems,i,docBasePath;if(!this.baseURL){elems=document.getElementsByTagName('script');for(i=0;i<elems.length;i++){if(elems[i].src&&elems[i].src.match(/edit_area_[^\\\/]*$/i)){var src=elems[i].src;src=src.substring(0,src.lastIndexOf('/'));this.baseURL=src;this.file_name=elems[i].src.substr(elems[i].src.lastIndexOf("/")+1);break;}}}docBasePath=document.location.href;if(docBasePath.indexOf('?')!=-1)docBasePath=docBasePath.substring(0,docBasePath.indexOf('?'));docBasePath=docBasePath.substring(0,docBasePath.lastIndexOf('/'));if(t.baseURL.indexOf('://')==-1&&t.baseURL.charAt(0)!='/'){t.baseURL=docBasePath+"/"+t.baseURL;}t.baseURL+="/";},get_button_html:function(id,img,exec,isFileSpecific,baseURL){var cmd,html;if(!baseURL)baseURL=this.baseURL;cmd='editArea.execCommand(\''+exec+'\')';html='<a id="a_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+';return false;" onmousedown="return false;" target="_self" fileSpecific="'+(isFileSpecific?'yes':'no')+'">';html+='<img id="'+id+'" src="'+baseURL+'images_'+img+'" title="{$'+id+'}" width="20" height="20" class="editAreaButtonNormal" onmouseover="editArea.switchClass(this,\'editAreaButtonOver\');" onmouseout="editArea.restoreClass(this);" onmousedown="editArea.restoreAndSwitchClass(this,\'editAreaButtonDown\');" /></a>';return html;},get_control_html:function(button_name,lang){var t=this,i,but,html,si;for(i=0;i<t.advanced_buttons.length;i++){but=t.advanced_buttons[i];if(but[0]==button_name){return t.get_button_html(but[0],but[1],but[2],but[3]);}}switch(button_name){case "*":case "return":return "<br />";case "|":case "separator":return '<img src="'+t.baseURL+'images_spacer.gif" width="1" height="15" class="editAreaSeparatorLine">';case "select_font":html="<select id='area_font_size' onchange='javascript:editArea.execCommand(\"change_font_size\")' fileSpecific='yes'>";html+="<option value='-1'>{$font_size}</option>";si=[8,9,10,11,12,14];for(i=0;i<si.length;i++){html+="<option value='"+si[i]+"'>"+si[i]+" pt</option>";}html+="</select>";return html;case "syntax_selection":html="<select id='syntax_selection' onchange='javascript:editArea.execCommand(\"change_syntax\",this.value)' fileSpecific='yes'>";html+="<option value='-1'>{$syntax_selection}</option>";html+="</select>";return html;}return "<span id='tmp_tool_"+button_name+"'>["+button_name+"]</span>";},get_template:function(){if(this.template==""){var xhr_object=null;if(window.XMLHttpRequest)xhr_object=new XMLHttpRequest();
else if(window.ActiveXObject)xhr_object=new ActiveXObject("Microsoft.XMLHTTP");
else{alert("XMLHTTPRequest not supported. EditArea not loaded");return;}xhr_object.open("GET",this.baseURL+"template.html",false);xhr_object.send(null);if(xhr_object.readyState==4)this.template=xhr_object.responseText;
else this.has_error();}},translate:function(text,lang,mode){if(mode=="word")text=eAL.get_word_translation(text,lang);
else if(mode="template"){eAL.current_language=lang;text=text.replace(/\{\$([^\}]+)\}/gm,eAL.translate_template);}return text;},translate_template:function(){return eAL.get_word_translation(EAL.prototype.translate_template.arguments[1],eAL.current_language);},get_word_translation:function(val,lang){var i;for(i in eAL.lang[lang]){if(i==val)return eAL.lang[lang][i];}return "_"+val;},load_script:function(url){var t=this,d=document,script,head;if(t.loadedFiles[url])return;try{script=d.createElement("script");script.type="text/javascript";script.src=url;script.charset="UTF-8";d.getElementsByTagName("head")[0].appendChild(script);}catch(e){d.write('<sc'+'ript language="javascript" type="text/javascript" src="'+url+'" charset="UTF-8"></sc'+'ript>');}t.loadedFiles[url]=true;},add_event:function(obj,name,handler){try{if(obj.attachEvent){obj.attachEvent("on"+name,handler);}
else{obj.addEventListener(name,handler,false);}}catch(e){}},remove_event:function(obj,name,handler){try{if(obj.detachEvent)obj.detachEvent("on"+name,handler);
else obj.removeEventListener(name,handler,false);}catch(e){}},reset:function(e){var formObj,is_child,i,x;formObj=eAL.isIE ? window.event.srcElement:e.target;if(formObj.tagName!='FORM')formObj=formObj.form;for(i in eAs){is_child=false;for(x=0;x<formObj.elements.length;x++){if(formObj.elements[x].id==i)is_child=true;}if(window.frames["frame_"+i]&&is_child&&eAs[i]["displayed"]==true){var exec='window.frames["frame_'+i+'"].editArea.textarea.value=document.getElementById("'+i+'").value;';exec+='window.frames["frame_'+i+'"].editArea.execCommand("focus");';exec+='window.frames["frame_'+i+'"].editArea.check_line_selection();';exec+='window.frames["frame_'+i+'"].editArea.execCommand("reset");';window.setTimeout(exec,10);}}return;},submit:function(e){var formObj,is_child,fs=window.frames,i,x;formObj=eAL.isIE ? window.event.srcElement:e.target;if(formObj.tagName!='FORM')formObj=formObj.form;for(i in eAs){is_child=false;for(x=0;x<formObj.elements.length;x++){if(formObj.elements[x].id==i)is_child=true;}if(is_child){if(fs["frame_"+i]&&eAs[i]["displayed"]==true)document.getElementById(i).value=fs["frame_"+i].editArea.textarea.value;eAL.execCommand(i,"EA_submit");}}if(typeof(formObj.edit_area_replaced_submit)=="function"){res=formObj.edit_area_replaced_submit();if(res==false){if(eAL.isIE)return false;
else e.preventDefault();}}return;},getValue:function(id){if(window.frames["frame_"+id]&&eAs[id]["displayed"]==true){return window.frames["frame_"+id].editArea.textarea.value;}
else if(elem=document.getElementById(id)){return elem.value;}return false;},setValue:function(id,new_val){var fs=window.frames;if((f=fs["frame_"+id])&&eAs[id]["displayed"]==true){f.editArea.textarea.value=new_val;f.editArea.execCommand("focus");f.editArea.check_line_selection(false);f.editArea.execCommand("onchange");}
else if(elem=document.getElementById(id)){elem.value=new_val;}},getSelectionRange:function(id){var sel,eA,fs=window.frames;sel={"start":0,"end":0};if(fs["frame_"+id]&&eAs[id]["displayed"]==true){eA=fs["frame_"+id].editArea;sel["start"]=eA.textarea.selectionStart;sel["end"]=eA.textarea.selectionEnd;}
else if(elem=document.getElementById(id)){sel=getSelectionRange(elem);}return sel;},setSelectionRange:function(id,new_start,new_end){var fs=window.frames;if(fs["frame_"+id]&&eAs[id]["displayed"]==true){fs["frame_"+id].editArea.area_select(new_start,new_end-new_start);if(!this.isIE){fs["frame_"+id].editArea.check_line_selection(false);fs["frame_"+id].editArea.scroll_to_view();}}
else if(elem=document.getElementById(id)){setSelectionRange(elem,new_start,new_end);}},getSelectedText:function(id){var sel=this.getSelectionRange(id);return this.getValue(id).substring(sel["start"],sel["end"]);},setSelectedText:function(id,new_val){var fs=window.frames,d=document,sel,text,scrollTop,scrollLeft,new_sel_end;new_val=new_val.replace(/\r/g,"");sel=this.getSelectionRange(id);text=this.getValue(id);if(fs["frame_"+id]&&eAs[id]["displayed"]==true){scrollTop=fs["frame_"+id].document.getElementById("result").scrollTop;scrollLeft=fs["frame_"+id].document.getElementById("result").scrollLeft;}
else{scrollTop=d.getElementById(id).scrollTop;scrollLeft=d.getElementById(id).scrollLeft;}text=text.substring(0,sel["start"])+new_val+text.substring(sel["end"]);this.setValue(id,text);new_sel_end=sel["start"]+new_val.length;this.setSelectionRange(id,sel["start"],new_sel_end);if(new_val !=this.getSelectedText(id).replace(/\r/g,"")){this.setSelectionRange(id,sel["start"],new_sel_end+new_val.split("\n").length-1);}if(fs["frame_"+id]&&eAs[id]["displayed"]==true){fs["frame_"+id].document.getElementById("result").scrollTop=scrollTop;fs["frame_"+id].document.getElementById("result").scrollLeft=scrollLeft;fs["frame_"+id].editArea.execCommand("onchange");}
else{d.getElementById(id).scrollTop=scrollTop;d.getElementById(id).scrollLeft=scrollLeft;}},insertTags:function(id,open_tag,close_tag){var old_sel,new_sel;old_sel=this.getSelectionRange(id);text=open_tag+this.getSelectedText(id)+close_tag;eAL.setSelectedText(id,text);new_sel=this.getSelectionRange(id);if(old_sel["end"] > old_sel["start"])this.setSelectionRange(id,new_sel["end"],new_sel["end"]);
else this.setSelectionRange(id,old_sel["start"]+open_tag.length,old_sel["start"]+open_tag.length);},hide:function(id){var fs=window.frames,d=document,t=this,scrollTop,scrollLeft,span;if(d.getElementById(id)&&!t.hidden[id]){t.hidden[id]={};t.hidden[id]["selectionRange"]=t.getSelectionRange(id);if(d.getElementById(id).style.display!="none"){t.hidden[id]["scrollTop"]=d.getElementById(id).scrollTop;t.hidden[id]["scrollLeft"]=d.getElementById(id).scrollLeft;}if(fs["frame_"+id]){t.hidden[id]["toggle"]=eAs[id]["displayed"];if(fs["frame_"+id]&&eAs[id]["displayed"]==true){scrollTop=fs["frame_"+id].document.getElementById("result").scrollTop;scrollLeft=fs["frame_"+id].document.getElementById("result").scrollLeft;}
else{scrollTop=d.getElementById(id).scrollTop;scrollLeft=d.getElementById(id).scrollLeft;}t.hidden[id]["scrollTop"]=scrollTop;t.hidden[id]["scrollLeft"]=scrollLeft;if(eAs[id]["displayed"]==true)eAL.toggle_off(id);}span=d.getElementById("EditAreaArroundInfos_"+id);if(span){span.style.display='none';}d.getElementById(id).style.display="none";}},show:function(id){var fs=window.frames,d=document,t=this,span;if((elem=d.getElementById(id))&&t.hidden[id]){elem.style.display="inline";elem.scrollTop=t.hidden[id]["scrollTop"];elem.scrollLeft=t.hidden[id]["scrollLeft"];span=d.getElementById("EditAreaArroundInfos_"+id);if(span){span.style.display='inline';}if(fs["frame_"+id]){elem.style.display="inline";if(t.hidden[id]["toggle"]==true)eAL.toggle_on(id);scrollTop=t.hidden[id]["scrollTop"];scrollLeft=t.hidden[id]["scrollLeft"];if(fs["frame_"+id]&&eAs[id]["displayed"]==true){fs["frame_"+id].document.getElementById("result").scrollTop=scrollTop;fs["frame_"+id].document.getElementById("result").scrollLeft=scrollLeft;}
else{elem.scrollTop=scrollTop;elem.scrollLeft=scrollLeft;}}sel=t.hidden[id]["selectionRange"];t.setSelectionRange(id,sel["start"],sel["end"]);delete t.hidden[id];}},getCurrentFile:function(id){return this.execCommand(id,'get_file',this.execCommand(id,'curr_file'));},getFile:function(id,file_id){return this.execCommand(id,'get_file',file_id);},getAllFiles:function(id){return this.execCommand(id,'get_all_files()');},openFile:function(id,file_infos){return this.execCommand(id,'open_file',file_infos);},closeFile:function(id,file_id){return this.execCommand(id,'close_file',file_id);},setFileEditedMode:function(id,file_id,to){var reg1,reg2;reg1=new RegExp('\\\\','g');reg2=new RegExp('"','g');return this.execCommand(id,'set_file_edited_mode("'+file_id.replace(reg1,'\\\\').replace(reg2,'\\"')+'",'+to+')');},execCommand:function(id,cmd,fct_param){switch(cmd){case "EA_init":if(eAs[id]['settings']["EA_init_callback"].length>0)eval(eAs[id]['settings']["EA_init_callback"]+"('"+id+"');");break;case "EA_delete":if(eAs[id]['settings']["EA_delete_callback"].length>0)eval(eAs[id]['settings']["EA_delete_callback"]+"('"+id+"');");break;case "EA_submit":if(eAs[id]['settings']["submit_callback"].length>0)eval(eAs[id]['settings']["submit_callback"]+"('"+id+"');");break;}if(window.frames["frame_"+id]&&window.frames["frame_"+id].editArea){if(fct_param!=undefined)return eval('window.frames["frame_'+id+'"].editArea.'+cmd+'(fct_param);');
else return eval('window.frames["frame_'+id+'"].editArea.'+cmd+';');}return false;}};var eAL=new EAL();var eAs={}; function getAttribute(elm,aName){var aValue,taName,i;try{aValue=elm.getAttribute(aName);}catch(exept){}if(! aValue){for(i=0;i < elm.attributes.length;i++){taName=elm.attributes[i] .name.toLowerCase();if(taName==aName){aValue=elm.attributes[i] .value;return aValue;}}}return aValue;};function setAttribute(elm,attr,val){if(attr=="class"){elm.setAttribute("className",val);elm.setAttribute("class",val);}
else{elm.setAttribute(attr,val);}};function getChildren(elem,elem_type,elem_attribute,elem_attribute_match,option,depth){if(!option)var option="single";if(!depth)var depth=-1;if(elem){var children=elem.childNodes;var result=null;var results=[];for(var x=0;x<children.length;x++){strTagName=new String(children[x].tagName);children_class="?";if(strTagName!="undefined"){child_attribute=getAttribute(children[x],elem_attribute);if((strTagName.toLowerCase()==elem_type.toLowerCase()||elem_type=="")&&(elem_attribute==""||child_attribute==elem_attribute_match)){if(option=="all"){results.push(children[x]);}
else{return children[x];}}if(depth!=0){result=getChildren(children[x],elem_type,elem_attribute,elem_attribute_match,option,depth-1);if(option=="all"){if(result.length>0){results=results.concat(result);}}
else if(result!=null){return result;}}}}if(option=="all")return results;}return null;};function isChildOf(elem,parent){if(elem){if(elem==parent)return true;while(elem.parentNode !='undefined'){return isChildOf(elem.parentNode,parent);}}return false;};function getMouseX(e){if(e!=null&&typeof(e.pageX)!="undefined"){return e.pageX;}
else{return(e!=null?e.x:event.x)+document.documentElement.scrollLeft;}};function getMouseY(e){if(e!=null&&typeof(e.pageY)!="undefined"){return e.pageY;}
else{return(e!=null?e.y:event.y)+document.documentElement.scrollTop;}};function calculeOffsetLeft(r){return calculeOffset(r,"offsetLeft")};function calculeOffsetTop(r){return calculeOffset(r,"offsetTop")};function calculeOffset(element,attr){var offset=0;while(element){offset+=element[attr];element=element.offsetParent}return offset;};function get_css_property(elem,prop){if(document.defaultView){return document.defaultView.getComputedStyle(elem,null).getPropertyValue(prop);}
else if(elem.currentStyle){var prop=prop.replace(/-\D/gi,function(sMatch){return sMatch.charAt(sMatch.length-1).toUpperCase();});return elem.currentStyle[prop];}
else return null;}var _mCE;function start_move_element(e,id,frame){var elem_id=(e.target||e.srcElement).id;if(id)elem_id=id;if(!frame)frame=window;if(frame.event)e=frame.event;_mCE=frame.document.getElementById(elem_id);_mCE.frame=frame;frame.document.onmousemove=move_element;frame.document.onmouseup=end_move_element;mouse_x=getMouseX(e);mouse_y=getMouseY(e);_mCE.start_pos_x=mouse_x-(_mCE.style.left.replace("px","")||calculeOffsetLeft(_mCE));_mCE.start_pos_y=mouse_y-(_mCE.style.top.replace("px","")||calculeOffsetTop(_mCE));return false;};function end_move_element(e){_mCE.frame.document.onmousemove="";_mCE.frame.document.onmouseup="";_mCE=null;};function move_element(e){var newTop,newLeft,maxLeft;if(_mCE.frame&&_mCE.frame.event)e=_mCE.frame.event;newTop=getMouseY(e)-_mCE.start_pos_y;newLeft=getMouseX(e)-_mCE.start_pos_x;maxLeft=_mCE.frame.document.body.offsetWidth-_mCE.offsetWidth;max_top=_mCE.frame.document.body.offsetHeight-_mCE.offsetHeight;newTop=Math.min(Math.max(0,newTop),max_top);newLeft=Math.min(Math.max(0,newLeft),maxLeft);_mCE.style.top=newTop+"px";_mCE.style.left=newLeft+"px";return false;};var nav=eAL.nav;function getSelectionRange(textarea){return{"start":textarea.selectionStart,"end":textarea.selectionEnd};};function setSelectionRange(t,start,end){t.focus();start=Math.max(0,Math.min(t.value.length,start));end=Math.max(start,Math.min(t.value.length,end));if(this.isOpera&&this.isOpera < 9.6){t.selectionEnd=1;t.selectionStart=0;t.selectionEnd=1;t.selectionStart=0;}t.selectionStart=start;t.selectionEnd=end;if(isIE)set_IE_selection(t);};function get_IE_selection(t){var d=document,div,range,stored_range,elem,scrollTop,relative_top,line_start,line_nb,range_start,range_end,tab;if(t&&t.focused){if(!t.ea_line_height){div=d.createElement("div");div.style.fontFamily=get_css_property(t,"font-family");div.style.fontSize=get_css_property(t,"font-size");div.style.visibility="hidden";div.innerHTML="0";d.body.appendChild(div);t.ea_line_height=div.offsetHeight;d.body.removeChild(div);}range=d.selection.createRange();try{stored_range=range.duplicate();stored_range.moveToElementText(t);stored_range.setEndPoint('EndToEnd',range);if(stored_range.parentElement()==t){elem=t;scrollTop=0;while(elem.parentNode){scrollTop+=elem.scrollTop;elem=elem.parentNode;}relative_top=range.offsetTop-calculeOffsetTop(t)+scrollTop;line_start=Math.round((relative_top / t.ea_line_height)+1);line_nb=Math.round(range.boundingHeight / t.ea_line_height);range_start=stored_range.text.length-range.text.length;tab=t.value.substr(0,range_start).split("\n");range_start+=(line_start-tab.length)*2;t.selectionStart=range_start;range_end=t.selectionStart+range.text.length;tab=t.value.substr(0,range_start+range.text.length).split("\n");range_end+=(line_start+line_nb-1-tab.length)*2;t.selectionEnd=range_end;}}catch(e){}}setTimeout("get_IE_selection(document.getElementById('"+t.id+"'));",50);};function IE_textarea_focus(){event.srcElement.focused=true;}function IE_textarea_blur(){event.srcElement.focused=false;}function set_IE_selection(t){var nbLineStart,nbLineStart,nbLineEnd,range;if(!window.closed){nbLineStart=t.value.substr(0,t.selectionStart).split("\n").length-1;nbLineEnd=t.value.substr(0,t.selectionEnd).split("\n").length-1;try{range=document.selection.createRange();range.moveToElementText(t);range.setEndPoint('EndToStart',range);range.moveStart('character',t.selectionStart-nbLineStart);range.moveEnd('character',t.selectionEnd-nbLineEnd-(t.selectionStart-nbLineStart));range.select();}catch(e){}}};eAL.waiting_loading["elements_functions.js"]="loaded";
 EAL.prototype.start_resize_area=function(){var d=document,a,div,width,height,father;d.onmouseup=eAL.end_resize_area;d.onmousemove=eAL.resize_area;eAL.toggle(eAL.resize["id"]);a=eAs[eAL.resize["id"]]["textarea"];div=d.getElementById("edit_area_resize");if(!div){div=d.createElement("div");div.id="edit_area_resize";div.style.border="dashed #888888 1px";}width=a.offsetWidth-2;height=a.offsetHeight-2;div.style.display="block";div.style.width=width+"px";div.style.height=height+"px";father=a.parentNode;father.insertBefore(div,a);a.style.display="none";eAL.resize["start_top"]=calculeOffsetTop(div);eAL.resize["start_left"]=calculeOffsetLeft(div);};EAL.prototype.end_resize_area=function(e){var d=document,div,a,width,height;d.onmouseup="";d.onmousemove="";div=d.getElementById("edit_area_resize");a=eAs[eAL.resize["id"]]["textarea"];width=Math.max(eAs[eAL.resize["id"]]["settings"]["min_width"],div.offsetWidth-4);height=Math.max(eAs[eAL.resize["id"]]["settings"]["min_height"],div.offsetHeight-4);if(eAL.isIE==6){width-=2;height-=2;}a.style.width=width+"px";a.style.height=height+"px";div.style.display="none";a.style.display="inline";a.selectionStart=eAL.resize["selectionStart"];a.selectionEnd=eAL.resize["selectionEnd"];eAL.toggle(eAL.resize["id"]);return false;};EAL.prototype.resize_area=function(e){var allow,newHeight,newWidth;allow=eAs[eAL.resize["id"]]["settings"]["allow_resize"];if(allow=="both"||allow=="y"){newHeight=Math.max(20,getMouseY(e)-eAL.resize["start_top"]);document.getElementById("edit_area_resize").style.height=newHeight+"px";}if(allow=="both"||allow=="x"){newWidth=Math.max(20,getMouseX(e)-eAL.resize["start_left"]);document.getElementById("edit_area_resize").style.width=newWidth+"px";}return false;};eAL.waiting_loading["resize_area.js"]="loaded";
	EAL.prototype.get_regexp=function(text_array){res="(\\b)(";for(i=0;i<text_array.length;i++){if(i>0)res+="|";res+=this.get_escaped_regexp(text_array[i]);}res+=")(\\b)";reg=new RegExp(res);return res;};EAL.prototype.get_escaped_regexp=function(str){return str.toString().replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\}|\{|\$|\^|\|)/g,"\\$1");};EAL.prototype.init_syntax_regexp=function(){var lang_style={};for(var lang in this.load_syntax){if(!this.syntax[lang]){this.syntax[lang]={};this.syntax[lang]["keywords_reg_exp"]={};this.keywords_reg_exp_nb=0;if(this.load_syntax[lang]['KEYWORDS']){param="g";if(this.load_syntax[lang]['KEYWORD_CASE_SENSITIVE']===false)param+="i";for(var i in this.load_syntax[lang]['KEYWORDS']){if(typeof(this.load_syntax[lang]['KEYWORDS'][i])=="function")continue;this.syntax[lang]["keywords_reg_exp"][i]=new RegExp(this.get_regexp(this.load_syntax[lang]['KEYWORDS'][i]),param);this.keywords_reg_exp_nb++;}}if(this.load_syntax[lang]['OPERATORS']){var str="";var nb=0;for(var i in this.load_syntax[lang]['OPERATORS']){if(typeof(this.load_syntax[lang]['OPERATORS'][i])=="function")continue;if(nb>0)str+="|";str+=this.get_escaped_regexp(this.load_syntax[lang]['OPERATORS'][i]);nb++;}if(str.length>0)this.syntax[lang]["operators_reg_exp"]=new RegExp("("+str+")","g");}if(this.load_syntax[lang]['DELIMITERS']){var str="";var nb=0;for(var i in this.load_syntax[lang]['DELIMITERS']){if(typeof(this.load_syntax[lang]['DELIMITERS'][i])=="function")continue;if(nb>0)str+="|";str+=this.get_escaped_regexp(this.load_syntax[lang]['DELIMITERS'][i]);nb++;}if(str.length>0)this.syntax[lang]["delimiters_reg_exp"]=new RegExp("("+str+")","g");}var syntax_trace=[];this.syntax[lang]["quotes"]={};var quote_tab=[];if(this.load_syntax[lang]['QUOTEMARKS']){for(var i in this.load_syntax[lang]['QUOTEMARKS']){if(typeof(this.load_syntax[lang]['QUOTEMARKS'][i])=="function")continue;var x=this.get_escaped_regexp(this.load_syntax[lang]['QUOTEMARKS'][i]);this.syntax[lang]["quotes"][x]=x;quote_tab[quote_tab.length]="("+x+"(\\\\.|[^"+x+"])*(?:"+x+"|$))";syntax_trace.push(x);}}this.syntax[lang]["comments"]={};if(this.load_syntax[lang]['COMMENT_SINGLE']){for(var i in this.load_syntax[lang]['COMMENT_SINGLE']){if(typeof(this.load_syntax[lang]['COMMENT_SINGLE'][i])=="function")continue;var x=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_SINGLE'][i]);quote_tab[quote_tab.length]="("+x+"(.|\\r|\\t)*(\\n|$))";syntax_trace.push(x);this.syntax[lang]["comments"][x]="\n";}}if(this.load_syntax[lang]['COMMENT_MULTI']){for(var i in this.load_syntax[lang]['COMMENT_MULTI']){if(typeof(this.load_syntax[lang]['COMMENT_MULTI'][i])=="function")continue;var start=this.get_escaped_regexp(i);var end=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_MULTI'][i]);quote_tab[quote_tab.length]="("+start+"(.|\\n|\\r)*?("+end+"|$))";syntax_trace.push(start);syntax_trace.push(end);this.syntax[lang]["comments"][i]=this.load_syntax[lang]['COMMENT_MULTI'][i];}}if(quote_tab.length>0)this.syntax[lang]["comment_or_quote_reg_exp"]=new RegExp("("+quote_tab.join("|")+")","gi");if(syntax_trace.length>0)this.syntax[lang]["syntax_trace_regexp"]=new RegExp("((.|\n)*?)(\\\\*("+syntax_trace.join("|")+"|$))","gmi");if(this.load_syntax[lang]['SCRIPT_DELIMITERS']){this.syntax[lang]["script_delimiters"]={};for(var i in this.load_syntax[lang]['SCRIPT_DELIMITERS']){if(typeof(this.load_syntax[lang]['SCRIPT_DELIMITERS'][i])=="function")continue;this.syntax[lang]["script_delimiters"][i]=this.load_syntax[lang]['SCRIPT_DELIMITERS'];}}this.syntax[lang]["custom_regexp"]={};if(this.load_syntax[lang]['REGEXPS']){for(var i in this.load_syntax[lang]['REGEXPS']){if(typeof(this.load_syntax[lang]['REGEXPS'][i])=="function")continue;var val=this.load_syntax[lang]['REGEXPS'][i];if(!this.syntax[lang]["custom_regexp"][val['execute']])this.syntax[lang]["custom_regexp"][val['execute']]={};this.syntax[lang]["custom_regexp"][val['execute']][i]={'regexp':new RegExp(val['search'],val['modifiers']),'class':val['class']};}}if(this.load_syntax[lang]['STYLES']){lang_style[lang]={};for(var i in this.load_syntax[lang]['STYLES']){if(typeof(this.load_syntax[lang]['STYLES'][i])=="function")continue;if(typeof(this.load_syntax[lang]['STYLES'][i])!="string"){for(var j in this.load_syntax[lang]['STYLES'][i]){lang_style[lang][j]=this.load_syntax[lang]['STYLES'][i][j];}}
else{lang_style[lang][i]=this.load_syntax[lang]['STYLES'][i];}}}var style="";for(var i in lang_style[lang]){if(lang_style[lang][i].length>0){style+="."+lang+" ."+i.toLowerCase()+" span{"+lang_style[lang][i]+"}\n";style+="."+lang+" ."+i.toLowerCase()+"{"+lang_style[lang][i]+"}\n";}}this.syntax[lang]["styles"]=style;}}};eAL.waiting_loading["reg_syntax.js"]="loaded";
var editAreaLoader= eAL;var editAreas=eAs;EditAreaLoader=EAL;editAreaLoader.iframe_script= "<script type='text/javascript'> Ã EA(){var t=Á;t.error=Ì;t.inlinePopup=[{popup_id:\"area_search_replace\",icon_id:\"search\"},{popup_id:\"edit_area_help\",icon_id:\"help\"}];t.plugins={};t.line_number=0;È.eAL.set_browser_infos(t);if(t.isIE >=8)t.isIE=7;t.É={};t.last_text_to_highlight=\"\";t.last_hightlighted_text=\"\";t.syntax_list=[];t.allready_used_syntax={};t.check_line_selection_timer=50;t.ÂFocused=Ì;t.highlight_selection_line=null;t.previous=[];t.next=[];t.last_undo=\"\";t.files={};t.filesIdAssoc={};t.curr_file='';t.assocBracket={};t.revertAssocBracket={};t.assocBracket[\"(\"]=\")\";t.assocBracket[\"{\"]=\"}\";t.assocBracket[\"[\"]=\"]\";for(var index in t.assocBracket){t.revertAssocBracket[t.assocBracket[index]]=index;}t.is_editable=Ë;t.lineHeight=16;t.tab_nb_char=8;if(t.isOpera)t.tab_nb_char=6;t.is_tabbing=Ì;t.fullscreen={'isFull':Ì};t.isResizing=Ì;t.id=area_id;t.Å=eAs[t.id][\"Å\"];if((\"\"+t.Å['replace_tab_by_spaces']).match(/^[0-9]+$/)){t.tab_nb_char=t.Å['replace_tab_by_spaces'];t.tabulation=\"\";for(var i=0;i<t.tab_nb_char;i++)t.tabulation+=\" \";}\nelse{t.tabulation=\"\t\";}if(t.Å[\"syntax_selection_allow\"]&&t.Å[\"syntax_selection_allow\"].Æ>0)t.syntax_list=t.Å[\"syntax_selection_allow\"].replace(/ /g,\"\").split(\",\");if(t.Å['syntax'])t.allready_used_syntax[t.Å['syntax']]=Ë;};EA.Ä.init=Ã(){var t=Á,a,s=t.Å;t.Â=_$(\"Â\");t.container=_$(\"container\");t.result=_$(\"result\");t.content_highlight=_$(\"content_highlight\");t.selection_field=_$(\"selection_field\");t.selection_field_text=_$(\"selection_field_text\");t.processing_screen=_$(\"processing\");t.editor_area=_$(\"editor\");t.tab_browsing_area=_$(\"tab_browsing_area\");t.test_font_size=_$(\"test_font_size\");a=t.Â;if(!s['is_editable'])t.set_editable(Ì);t.set_show_line_colors(s['show_line_colors']);if(syntax_selec=_$(\"syntax_selection\")){for(var i=0;i<t.syntax_list.Æ;i++){var syntax=t.syntax_list[i];var option=document.createElement(\"option\");option.Ê=syntax;if(syntax==s['syntax'])option.selected=\"selected\";option.innerHTML=t.get_translation(\"syntax_\"+syntax,\"word\");syntax_selec.appendChild(option);}}spans=È.getChildren(_$(\"toolbar_1\"),\"span\",\"\",\"\",\"all\",-1);for(var i=0;i<spans.Æ;i++){id=spans[i].id.replace(/tmp_tool_(.*)/,\"$1\");if(id!=spans[i].id){for(var j in t.plugins){if(typeof(t.plugins[j].get_control_html)==\"Ã\"){html=t.plugins[j].get_control_html(id);if(html!=Ì){html=t.get_translation(html,\"template\");var new_span=document.createElement(\"span\");new_span.innerHTML=html;var father=spans[i].ÈNode;spans[i].ÈNode.replaceChild(new_span,spans[i]);break;}}}}}if(s[\"debug\"]){t.debug=È.document.getElementById(\"edit_area_debug_\"+t.id);}if(_$(\"redo\")!=null)t.switchClassSticky(_$(\"redo\"),'editAreaButtonDisabled',Ë);if(typeof(È.eAL.syntax[s[\"syntax\"]])!=\"undefined\"){for(var i in È.eAL.syntax){if(typeof(È.eAL.syntax[i][\"Çs\"])!=\"undefined\"){t.add_Ç(È.eAL.syntax[i][\"Çs\"]);}}}if(t.isOpera)_$(\"editor\").onkeypress=keyDown;\nelse _$(\"editor\").onkeydown=keyDown;for(var i=0;i<t.inlinePopup.Æ;i++){if(t.isOpera)_$(t.inlinePopup[i][\"popup_id\"]).onkeypress=keyDown;\nelse _$(t.inlinePopup[i][\"popup_id\"]).onkeydown=keyDown;}if(s[\"allow_resize\"]==\"both\"||s[\"allow_resize\"]==\"x\"||s[\"allow_resize\"]==\"y\")t.allow_resize(Ë);È.eAL.toggle(t.id,\"on\");t.change_smooth_selection_mode(eA.smooth_selection);t.execCommand(\"change_highlight\",s[\"start_highlight\"]);t.set_font(eA.Å[\"font_family\"],eA.Å[\"font_size\"]);children=È.getChildren(document.body,\"\",\"selec\",\"none\",\"all\",-1);for(var i=0;i<children.Æ;i++){if(t.isIE)children[i].unselectable=Ë;\nelse children[i].onmousedown=Ã(){return Ì};}a.spellcheck=s[\"gecko_spellcheck\"];if(t.isFirefox >='3'){t.content_highlight.Ç.paddingLeft=\"1px\";t.selection_field.Ç.paddingLeft=\"1px\";t.selection_field_text.Ç.paddingLeft=\"1px\";}if(t.isIE&&t.isIE < 8){a.Ç.marginTop=\"-1px\";}if(t.isSafari){t.editor_area.Ç.position=\"absolute\";a.Ç.marginLeft=\"-3px\";if(t.isSafari < 3.2)a.Ç.marginTop=\"1px\";}È.eAL.add_event(t.result,\"click\",Ã(e){if((e.target||e.srcElement)==eA.result){eA.area_select(eA.Â.Ê.Æ,0);}});if(s['is_multi_files']!=Ì)t.open_file({'id':t.curr_file,'text':''});t.set_word_wrap(s['word_wrap']);setTimeout(\"eA.focus();eA.manage_size();eA.execCommand('EA_load');\",10);t.check_undo();t.check_line_selection(Ë);t.scroll_to_view();for(var i in t.plugins){if(typeof(t.plugins[i].onload)==\"Ã\")t.plugins[i].onload();}if(s['fullscreen']==Ë)t.toggle_full_screen(Ë);È.eAL.add_event(window,\"resize\",eA.update_size);È.eAL.add_event(È.window,\"resize\",eA.update_size);È.eAL.add_event(top.window,\"resize\",eA.update_size);È.eAL.add_event(window,\"unload\",Ã(){if(È.eAL){È.eAL.remove_event(È.window,\"resize\",eA.update_size);È.eAL.remove_event(top.window,\"resize\",eA.update_size);}if(eAs[eA.id]&&eAs[eA.id][\"displayed\"]){eA.execCommand(\"EA_unload\");}});};EA.Ä.update_size=Ã(){var d=document,pd=È.document,height,width,popup,maxLeft,maxTop;if(typeof eAs !='undefined'&&eAs[eA.id]&&eAs[eA.id][\"displayed\"]==Ë){if(eA.fullscreen['isFull']){pd.getElementById(\"frame_\"+eA.id).Ç.width=pd.getElementsByTagName(\"html\")[0].clientWidth+\"px\";pd.getElementById(\"frame_\"+eA.id).Ç.height=pd.getElementsByTagName(\"html\")[0].clientHeight+\"px\";}if(eA.tab_browsing_area.Ç.display=='block'&&(!eA.isIE||eA.isIE >=8)){eA.tab_browsing_area.Ç.height=\"0px\";eA.tab_browsing_area.Ç.height=(eA.result.offsetTop-eA.tab_browsing_area.offsetTop-1)+\"px\";}height=d.body.offsetHeight-eA.get_all_toolbar_height()-4;eA.result.Ç.height=height+\"px\";width=d.body.offsetWidth-2;eA.result.Ç.width=width+\"px\";for(i=0;i < eA.inlinePopup.Æ;i++){popup=_$(eA.inlinePopup[i][\"popup_id\"]);maxLeft=d.body.offsetWidth-popup.offsetWidth;maxTop=d.body.offsetHeight-popup.offsetHeight;if(popup.offsetTop > maxTop)popup.Ç.top=maxTop+\"px\";if(popup.offsetLeft > maxLeft)popup.Ç.left=maxLeft+\"px\";}eA.manage_size(Ë);eA.fixLinesHeight(eA.Â.Ê,0,-1);}};EA.Ä.manage_size=Ã(onlyOneTime){if(!eAs[Á.id])return Ì;if(eAs[Á.id][\"displayed\"]==Ë&&Á.ÂFocused){var area_height,resized=Ì;if(!Á.Å['word_wrap']){var area_width=Á.Â.scrollWidth;area_height=Á.Â.scrollHeight;if(Á.isOpera&&Á.isOpera < 9.6){area_width=10000;}if(Á.Â.previous_scrollWidth!=area_width){Á.container.Ç.width=area_width+\"px\";Á.Â.Ç.width=area_width+\"px\";Á.content_highlight.Ç.width=area_width+\"px\";Á.Â.previous_scrollWidth=area_width;resized=Ë;}}if(Á.Å['word_wrap']){newW=Á.Â.offsetWidth;if(Á.isFirefox||Á.isIE)newW-=2;if(Á.isSafari)newW-=6;Á.content_highlight.Ç.width=Á.selection_field_text.Ç.width=Á.selection_field.Ç.width=Á.test_font_size.Ç.width=newW+\"px\";}if(Á.isOpera||Á.isFirefox||Á.isSafari){area_height=Á.getLinePosTop(Á.É[\"nb_line\"]+1);}\nelse{area_height=Á.Â.scrollHeight;}if(Á.Â.previous_scrollHeight!=area_height){Á.container.Ç.height=(area_height+2)+\"px\";Á.Â.Ç.height=area_height+\"px\";Á.content_highlight.Ç.height=area_height+\"px\";Á.Â.previous_scrollHeight=area_height;resized=Ë;}if(Á.É[\"nb_line\"] >=Á.line_number){var newLines='',destDiv=_$(\"line_number\"),start=Á.line_number,end=Á.É[\"nb_line\"]+100;for(i=start+1;i < end;i++){newLines+='<div id=\"line_'+i+'\">'+i+\"</div>\";Á.line_number++;}destDiv.innerHTML=destDiv.innerHTML+newLines;Á.fixLinesHeight(Á.Â.Ê,start,-1);}Á.Â.scrollTop=\"0px\";Á.Â.scrollLeft=\"0px\";if(resized==Ë){Á.scroll_to_view();}}if(!onlyOneTime)setTimeout(\"eA.manage_size();\",100);};EA.Ä.execCommand=Ã(cmd,param){for(var i in Á.plugins){if(typeof(Á.plugins[i].execCommand)==\"Ã\"){if(!Á.plugins[i].execCommand(cmd,param))return;}}switch(cmd){case \"save\":if(Á.Å[\"save_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"save_callback\"]+\"('\"+Á.id+\"',eA.Â.Ê);\");break;case \"load\":if(Á.Å[\"load_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"load_callback\"]+\"('\"+Á.id+\"');\");break;case \"onchange\":if(Á.Å[\"change_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"change_callback\"]+\"('\"+Á.id+\"');\");break;case \"EA_load\":if(Á.Å[\"EA_load_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_load_callback\"]+\"('\"+Á.id+\"');\");break;case \"EA_unload\":if(Á.Å[\"EA_unload_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_unload_callback\"]+\"('\"+Á.id+\"');\");break;case \"toggle_on\":if(Á.Å[\"EA_toggle_on_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_toggle_on_callback\"]+\"('\"+Á.id+\"');\");break;case \"toggle_off\":if(Á.Å[\"EA_toggle_off_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_toggle_off_callback\"]+\"('\"+Á.id+\"');\");break;case \"re_sync\":if(!Á.do_highlight)break;case \"file_switch_on\":if(Á.Å[\"EA_file_switch_on_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_file_switch_on_callback\"]+\"(param);\");break;case \"file_switch_off\":if(Á.Å[\"EA_file_switch_off_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_file_switch_off_callback\"]+\"(param);\");break;case \"file_close\":if(Á.Å[\"EA_file_close_callback\"].Æ>0)return eval(\"È.\"+Á.Å[\"EA_file_close_callback\"]+\"(param);\");break;default:if(typeof(eval(\"eA.\"+cmd))==\"Ã\"){if(Á.Å[\"debug\"])eval(\"eA.\"+cmd+\"(param);\");\nelse try{eval(\"eA.\"+cmd+\"(param);\");}catch(e){};}}};EA.Ä.get_translation=Ã(word,mode){if(mode==\"template\")return È.eAL.translate(word,Á.Å[\"language\"],mode);\nelse return È.eAL.get_word_translation(word,Á.Å[\"language\"]);};EA.Ä.add_plugin=Ã(plug_name,plug_obj){for(var i=0;i<Á.Å[\"plugins\"].Æ;i++){if(Á.Å[\"plugins\"][i]==plug_name){Á.plugins[plug_name]=plug_obj;plug_obj.baseURL=È.eAL.baseURL+\"plugins/\"+plug_name+\"/\";if(typeof(plug_obj.init)==\"Ã\")plug_obj.init();}}};EA.Ä.load_css=Ã(url){try{link=document.createElement(\"link\");link.type=\"text/css\";link.rel=\"Çsheet\";link.media=\"all\";link.href=url;head=document.getElementsByTagName(\"head\");head[0].appendChild(link);}catch(e){document.write(\"<link href='\"+url+\"' rel='Çsheet' type='text/css' />\");}};EA.Ä.load_script=Ã(url){try{script=document.createElement(\"script\");script.type=\"text/javascript\";script.src=url;script.charset=\"UTF-8\";head=document.getElementsByTagName(\"head\");head[0].appendChild(script);}catch(e){document.write(\"<script type='text/javascript' src='\"+url+\"' charset=\\\"UTF-8\\\"><\"+\"/script>\");}};EA.Ä.add_lang=Ã(language,Ês){if(!È.eAL.lang[language])È.eAL.lang[language]={};for(var i in Ês)È.eAL.lang[language][i]=Ês[i];};Ã _$(id){return document.getElementById(id);};var eA=new EA();È.eAL.add_event(window,\"load\",init);Ã init(){setTimeout(\"eA.init();\",10);};	EA.Ä.focus=Ã(){Á.Â.focus();Á.ÂFocused=Ë;};EA.Ä.check_line_selection=Ã(timer_checkup){var changes,infos,new_top,new_width,i;var t1=t2=t2_1=t3=tLines=tend=new Date().getTime();if(!eAs[Á.id])return Ì;if(!Á.smooth_selection&&!Á.do_highlight){}\nelse if(Á.ÂFocused&&eAs[Á.id][\"displayed\"]==Ë&&Á.isResizing==Ì){infos=Á.get_selection_infos();changes=Á.checkTextEvolution(typeof(Á.É['full_text'])=='undefined' ? '':Á.É['full_text'],infos['full_text']);t2=new Date().getTime();if(Á.É[\"line_start\"] !=infos[\"line_start\"]||Á.É[\"line_nb\"] !=infos[\"line_nb\"]||infos[\"full_text\"] !=Á.É[\"full_text\"]||Á.reload_highlight||Á.É[\"selectionStart\"] !=infos[\"selectionStart\"]||Á.É[\"selectionEnd\"] !=infos[\"selectionEnd\"]||!timer_checkup){new_top=Á.getLinePosTop(infos[\"line_start\"]);new_width=Math.max(Á.Â.scrollWidth,Á.container.clientWidth-50);Á.selection_field.Ç.top=Á.selection_field_text.Ç.top=new_top+\"px\";if(!Á.Å['word_wrap']){Á.selection_field.Ç.width=Á.selection_field_text.Ç.width=Á.test_font_size.Ç.width=new_width+\"px\";}if(Á.do_highlight==Ë){var curr_text=infos[\"full_text\"].split(\"\\n\");var content=\"\";var start=Math.max(0,infos[\"line_start\"]-1);var end=Math.min(curr_text.Æ,infos[\"line_start\"]+infos[\"line_nb\"]-1);for(i=start;i< end;i++){content+=curr_text[i]+\"\\n\";}selLength=infos['selectionEnd']-infos['selectionStart'];content=content.substr(0,infos[\"curr_pos\"]-1)+\"\\r\\r\"+content.substr(infos[\"curr_pos\"]-1,selLength)+\"\\r\\r\"+content.substr(infos[\"curr_pos\"]-1+selLength);content='<span>'+content.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(\"\\r\\r\",'</span><strong>').replace(\"\\r\\r\",'</strong><span>')+'</span>';if(Á.isIE||(Á.isOpera&&Á.isOpera < 9.6)){Á.selection_field.innerHTML=\"<pre>\"+content.replace(/^\\r?\\n/,\"<br>\")+\"</pre>\";}\nelse{Á.selection_field.innerHTML=content;}Á.selection_field_text.innerHTML=Á.selection_field.innerHTML;t2_1=new Date().getTime();if(Á.reload_highlight||(infos[\"full_text\"] !=Á.last_text_to_highlight&&(Á.É[\"line_start\"]!=infos[\"line_start\"]||Á.show_line_colors||Á.Å['word_wrap']||Á.É[\"line_nb\"]!=infos[\"line_nb\"]||Á.É[\"nb_line\"]!=infos[\"nb_line\"]))){Á.maj_highlight(infos);}}}t3=new Date().getTime();if(Á.Å['word_wrap']&&infos[\"full_text\"] !=Á.É[\"full_text\"]){if(changes.newText.split(\"\\n\").Æ==1&&Á.É['nb_line']&&infos['nb_line']==Á.É['nb_line']){Á.fixLinesHeight(infos['full_text'],changes.lineStart,changes.lineStart);}\nelse{Á.fixLinesHeight(infos['full_text'],changes.lineStart,-1);}}tLines=new Date().getTime();if(infos[\"line_start\"] !=Á.É[\"line_start\"]||infos[\"curr_pos\"] !=Á.É[\"curr_pos\"]||infos[\"full_text\"].Æ!=Á.É[\"full_text\"].Æ||Á.reload_highlight||!timer_checkup){var selec_char=infos[\"curr_line\"].charAt(infos[\"curr_pos\"]-1);var no_real_move=Ë;if(infos[\"line_nb\"]==1&&(Á.assocBracket[selec_char]||Á.revertAssocBracket[selec_char])){no_real_move=Ì;if(Á.findEndBracket(infos,selec_char)===Ë){_$(\"end_bracket\").Ç.visibility=\"visible\";_$(\"cursor_pos\").Ç.visibility=\"visible\";_$(\"cursor_pos\").innerHTML=selec_char;_$(\"end_bracket\").innerHTML=(Á.assocBracket[selec_char]||Á.revertAssocBracket[selec_char]);}\nelse{_$(\"end_bracket\").Ç.visibility=\"hidden\";_$(\"cursor_pos\").Ç.visibility=\"hidden\";}}\nelse{_$(\"cursor_pos\").Ç.visibility=\"hidden\";_$(\"end_bracket\").Ç.visibility=\"hidden\";}Á.displayToCursorPosition(\"cursor_pos\",infos[\"line_start\"],infos[\"curr_pos\"]-1,infos[\"curr_line\"],no_real_move);if(infos[\"line_nb\"]==1&&infos[\"line_start\"]!=Á.É[\"line_start\"])Á.scroll_to_view();}Á.É=infos;}tend=new Date().getTime();if(timer_checkup){setTimeout(\"eA.check_line_selection(Ë)\",Á.check_line_selection_timer);}};EA.Ä.get_selection_infos=Ã(){var sel={},start,end,len,str;Á.getIESelection();start=Á.Â.selectionStart;end=Á.Â.selectionEnd;if(Á.É[\"selectionStart\"]==start&&Á.É[\"selectionEnd\"]==end&&Á.É[\"full_text\"]==Á.Â.Ê){return Á.É;}if(Á.tabulation!=\"\t\"&&Á.Â.Ê.indexOf(\"\t\")!=-1){len=Á.Â.Ê.Æ;Á.Â.Ê=Á.replace_tab(Á.Â.Ê);start=end=start+(Á.Â.Ê.Æ-len);Á.area_select(start,0);}sel[\"selectionStart\"]=start;sel[\"selectionEnd\"]=end;sel[\"full_text\"]=Á.Â.Ê;sel[\"line_start\"]=1;sel[\"line_nb\"]=1;sel[\"curr_pos\"]=0;sel[\"curr_line\"]=\"\";sel[\"indexOfCursor\"]=0;sel[\"selec_direction\"]=Á.É[\"selec_direction\"];var splitTab=sel[\"full_text\"].split(\"\\n\");var nbLine=Math.max(0,splitTab.Æ);var nbChar=Math.max(0,sel[\"full_text\"].Æ-(nbLine-1));if(sel[\"full_text\"].indexOf(\"\\r\")!=-1)nbChar=nbChar-(nbLine-1);sel[\"nb_line\"]=nbLine;sel[\"nb_char\"]=nbChar;if(start>0){str=sel[\"full_text\"].substr(0,start);sel[\"curr_pos\"]=start-str.lastIndexOf(\"\\n\");sel[\"line_start\"]=Math.max(1,str.split(\"\\n\").Æ);}\nelse{sel[\"curr_pos\"]=1;}if(end>start){sel[\"line_nb\"]=sel[\"full_text\"].substring(start,end).split(\"\\n\").Æ;}sel[\"indexOfCursor\"]=start;sel[\"curr_line\"]=splitTab[Math.max(0,sel[\"line_start\"]-1)];if(sel[\"selectionStart\"]==Á.É[\"selectionStart\"]){if(sel[\"selectionEnd\"]>Á.É[\"selectionEnd\"])sel[\"selec_direction\"]=\"down\";\nelse if(sel[\"selectionEnd\"]==Á.É[\"selectionStart\"])sel[\"selec_direction\"]=Á.É[\"selec_direction\"];}\nelse if(sel[\"selectionStart\"]==Á.É[\"selectionEnd\"]&&sel[\"selectionEnd\"]>Á.É[\"selectionEnd\"]){sel[\"selec_direction\"]=\"down\";}\nelse{sel[\"selec_direction\"]=\"up\";}_$(\"nbLine\").innerHTML=nbLine;_$(\"nbChar\").innerHTML=nbChar;_$(\"linePos\").innerHTML=sel[\"line_start\"];_$(\"currPos\").innerHTML=sel[\"curr_pos\"];return sel;};EA.Ä.getIESelection=Ã(){var selectionStart,selectionEnd,range,stored_range;if(!Á.isIE)return Ì;if(Á.Å['word_wrap'])Á.Â.wrap='off';try{range=document.selection.createRange();stored_range=range.duplicate();stored_range.moveToElementText(Á.Â);stored_range.setEndPoint('EndToEnd',range);if(stored_range.ÈElement()!=Á.Â)throw \"invalid focus\";var scrollTop=Á.result.scrollTop+document.body.scrollTop;var relative_top=range.offsetTop-È.calculeOffsetTop(Á.Â)+scrollTop;var line_start=Math.round((relative_top / Á.lineHeight)+1);var line_nb=Math.round(range.boundingHeight / Á.lineHeight);selectionStart=stored_range.text.Æ-range.text.Æ;selectionStart+=(line_start-Á.Â.Ê.substr(0,selectionStart).split(\"\\n\").Æ)*2;selectionStart-=(line_start-Á.Â.Ê.substr(0,selectionStart).split(\"\\n\").Æ)* 2;selectionEnd=selectionStart+range.text.Æ;selectionEnd+=(line_start+line_nb-1-Á.Â.Ê.substr(0,selectionEnd).split(\"\\n\").Æ)*2;Á.Â.selectionStart=selectionStart;Á.Â.selectionEnd=selectionEnd;}catch(e){}if(Á.Å['word_wrap'])Á.Â.wrap='soft';};EA.Ä.setIESelection=Ã(){var a=Á.Â,nbLineStart,nbLineEnd,range;if(!Á.isIE)return Ì;nbLineStart=a.Ê.substr(0,a.selectionStart).split(\"\\n\").Æ-1;nbLineEnd=a.Ê.substr(0,a.selectionEnd).split(\"\\n\").Æ-1;range=document.selection.createRange();range.moveToElementText(a);range.setEndPoint('EndToStart',range);range.moveStart('character',a.selectionStart-nbLineStart);range.moveEnd('character',a.selectionEnd-nbLineEnd-(a.selectionStart-nbLineStart));range.select();};EA.Ä.checkTextEvolution=Ã(lastText,newText){var ch={},baseStep=200,cpt=0,end,step,tStart=new Date().getTime();end=Math.min(newText.Æ,lastText.Æ);step=baseStep;while(cpt<end&&step>=1){if(lastText.substr(cpt,step)==newText.substr(cpt,step)){cpt+=step;}\nelse{step=Math.floor(step/2);}}ch.posStart=cpt;ch.lineStart=newText.substr(0,ch.posStart).split(\"\\n\").Æ-1;cpt_last=lastText.Æ;cpt=newText.Æ;step=baseStep;while(cpt>=0&&cpt_last>=0&&step>=1){if(lastText.substr(cpt_last-step,step)==newText.substr(cpt-step,step)){cpt-=step;cpt_last-=step;}\nelse{step=Math.floor(step/2);}}ch.posNewEnd=cpt;ch.posLastEnd=cpt_last;if(ch.posNewEnd<=ch.posStart){if(lastText.Æ < newText.Æ){ch.posNewEnd=ch.posStart+newText.Æ-lastText.Æ;ch.posLastEnd=ch.posStart;}\nelse{ch.posLastEnd=ch.posStart+lastText.Æ-newText.Æ;ch.posNewEnd=ch.posStart;}}ch.newText=newText.substring(ch.posStart,ch.posNewEnd);ch.lastText=lastText.substring(ch.posStart,ch.posLastEnd);ch.lineNewEnd=newText.substr(0,ch.posNewEnd).split(\"\\n\").Æ-1;ch.lineLastEnd=lastText.substr(0,ch.posLastEnd).split(\"\\n\").Æ-1;ch.newTextLine=newText.split(\"\\n\").slice(ch.lineStart,ch.lineNewEnd+1).join(\"\\n\");ch.lastTextLine=lastText.split(\"\\n\").slice(ch.lineStart,ch.lineLastEnd+1).join(\"\\n\");return ch;};EA.Ä.tab_selection=Ã(){if(Á.is_tabbing)return;Á.is_tabbing=Ë;Á.getIESelection();var start=Á.Â.selectionStart;var end=Á.Â.selectionEnd;var insText=Á.Â.Ê.substring(start,end);var pos_start=start;var pos_end=end;if(insText.Æ==0){Á.Â.Ê=Á.Â.Ê.substr(0,start)+Á.tabulation+Á.Â.Ê.substr(end);pos_start=start+Á.tabulation.Æ;pos_end=pos_start;}\nelse{start=Math.max(0,Á.Â.Ê.substr(0,start).lastIndexOf(\"\\n\")+1);endText=Á.Â.Ê.substr(end);startText=Á.Â.Ê.substr(0,start);tmp=Á.Â.Ê.substring(start,end).split(\"\\n\");insText=Á.tabulation+tmp.join(\"\\n\"+Á.tabulation);Á.Â.Ê=startText+insText+endText;pos_start=start;pos_end=Á.Â.Ê.indexOf(\"\\n\",startText.Æ+insText.Æ);if(pos_end==-1)pos_end=Á.Â.Ê.Æ;}Á.Â.selectionStart=pos_start;Á.Â.selectionEnd=pos_end;if(Á.isIE){Á.setIESelection();setTimeout(\"eA.is_tabbing=Ì;\",100);}\nelse{Á.is_tabbing=Ì;}};EA.Ä.invert_tab_selection=Ã(){var t=Á,a=Á.Â;if(t.is_tabbing)return;t.is_tabbing=Ë;t.getIESelection();var start=a.selectionStart;var end=a.selectionEnd;var insText=a.Ê.substring(start,end);var pos_start=start;var pos_end=end;if(insText.Æ==0){if(a.Ê.substring(start-t.tabulation.Æ,start)==t.tabulation){a.Ê=a.Ê.substr(0,start-t.tabulation.Æ)+a.Ê.substr(end);pos_start=Math.max(0,start-t.tabulation.Æ);pos_end=pos_start;}}\nelse{start=a.Ê.substr(0,start).lastIndexOf(\"\\n\")+1;endText=a.Ê.substr(end);startText=a.Ê.substr(0,start);tmp=a.Ê.substring(start,end).split(\"\\n\");insText=\"\";for(i=0;i<tmp.Æ;i++){for(j=0;j<t.tab_nb_char;j++){if(tmp[i].charAt(0)==\"\t\"){tmp[i]=tmp[i].substr(1);j=t.tab_nb_char;}\nelse if(tmp[i].charAt(0)==\" \")tmp[i]=tmp[i].substr(1);}insText+=tmp[i];if(i<tmp.Æ-1)insText+=\"\\n\";}a.Ê=startText+insText+endText;pos_start=start;pos_end=a.Ê.indexOf(\"\\n\",startText.Æ+insText.Æ);if(pos_end==-1)pos_end=a.Ê.Æ;}a.selectionStart=pos_start;a.selectionEnd=pos_end;if(t.isIE){t.setIESelection();setTimeout(\"eA.is_tabbing=Ì;\",100);}\nelse t.is_tabbing=Ì;};EA.Ä.press_enter=Ã(){if(!Á.smooth_selection)return Ì;Á.getIESelection();var scrollTop=Á.result.scrollTop;var scrollLeft=Á.result.scrollLeft;var start=Á.Â.selectionStart;var end=Á.Â.selectionEnd;var start_last_line=Math.max(0,Á.Â.Ê.substring(0,start).lastIndexOf(\"\\n\")+1);var begin_line=Á.Â.Ê.substring(start_last_line,start).replace(/^([ \t]*).*/gm,\"$1\");var lineStart=Á.Â.Ê.substring(0,start).split(\"\\n\").Æ;if(begin_line==\"\\n\"||begin_line==\"\\r\"||begin_line.Æ==0){return Ì;}if(Á.isIE||(Á.isOpera&&Á.isOpera < 9.6)){begin_line=\"\\r\\n\"+begin_line;}\nelse{begin_line=\"\\n\"+begin_line;}Á.Â.Ê=Á.Â.Ê.substring(0,start)+begin_line+Á.Â.Ê.substring(end);Á.area_select(start+begin_line.Æ,0);if(Á.isIE){Á.result.scrollTop=scrollTop;Á.result.scrollLeft=scrollLeft;}return Ë;};EA.Ä.findEndBracket=Ã(infos,bracket){var start=infos[\"indexOfCursor\"];var normal_order=Ë;if(Á.assocBracket[bracket])endBracket=Á.assocBracket[bracket];\nelse if(Á.revertAssocBracket[bracket]){endBracket=Á.revertAssocBracket[bracket];normal_order=Ì;}var end=-1;var nbBracketOpen=0;for(var i=start;i<infos[\"full_text\"].Æ&&i>=0;){if(infos[\"full_text\"].charAt(i)==endBracket){nbBracketOpen--;if(nbBracketOpen<=0){end=i;break;}}\nelse if(infos[\"full_text\"].charAt(i)==bracket)nbBracketOpen++;if(normal_order)i++;\nelse i--;}if(end==-1)return Ì;var endLastLine=infos[\"full_text\"].substr(0,end).lastIndexOf(\"\\n\");if(endLastLine==-1)line=1;\nelse line=infos[\"full_text\"].substr(0,endLastLine).split(\"\\n\").Æ+1;var curPos=end-endLastLine-1;var endLineLength=infos[\"full_text\"].substring(end).split(\"\\n\")[0].Æ;Á.displayToCursorPosition(\"end_bracket\",line,curPos,infos[\"full_text\"].substring(endLastLine+1,end+endLineLength));return Ë;};EA.Ä.displayToCursorPosition=Ã(id,start_line,cur_pos,lineContent,no_real_move){var elem,dest,content,posLeft=0,posTop,fixPadding,topOffset,endElem;elem=Á.test_font_size;dest=_$(id);content=\"<span id='test_font_size_inner'>\"+lineContent.substr(0,cur_pos).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\")+\"</span><span id='endTestFont'>\"+lineContent.substr(cur_pos).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\")+\"</span>\";if(Á.isIE||(Á.isOpera&&Á.isOpera < 9.6)){elem.innerHTML=\"<pre>\"+content.replace(/^\\r?\\n/,\"<br>\")+\"</pre>\";}\nelse{elem.innerHTML=content;}endElem=_$('endTestFont');topOffset=endElem.offsetTop;fixPadding=parseInt(Á.content_highlight.Ç.paddingLeft.replace(\"px\",\"\"));posLeft=45+endElem.offsetLeft+(!isNaN(fixPadding)&&topOffset > 0 ? fixPadding:0);posTop=Á.getLinePosTop(start_line)+topOffset;if(Á.isIE&&cur_pos > 0&&endElem.offsetLeft==0){posTop+=Á.lineHeight;}if(no_real_move!=Ë){dest.Ç.top=posTop+\"px\";dest.Ç.left=posLeft+\"px\";}dest.cursor_top=posTop;dest.cursor_left=posLeft;};EA.Ä.getLinePosTop=Ã(start_line){var elem=_$('line_'+start_line),posTop=0;if(elem)posTop=elem.offsetTop;\nelse posTop=Á.lineHeight *(start_line-1);return posTop;};EA.Ä.getTextHeight=Ã(text){var t=Á,elem,height;elem=t.test_font_size;content=text.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\");if(t.isIE||(Á.isOpera&&Á.isOpera < 9.6)){elem.innerHTML=\"<pre>\"+content.replace(/^\\r?\\n/,\"<br>\")+\"</pre>\";}\nelse{elem.innerHTML=content;}height=elem.offsetHeight;height=Math.max(1,Math.floor(elem.offsetHeight / Á.lineHeight))* Á.lineHeight;return height;};EA.Ä.fixLinesHeight=Ã(textValue,lineStart,lineEnd){var aText=textValue.split(\"\\n\");if(lineEnd==-1)lineEnd=aText.Æ-1;for(var i=Math.max(0,lineStart);i <=lineEnd;i++){if(elem=_$('line_'+(i+1))){elem.Ç.height=typeof(aText[i])!=\"undefined\" ? Á.getTextHeight(aText[i])+\"px\":Á.lineHeight;}}};EA.Ä.area_select=Ã(start,Æ){Á.Â.focus();start=Math.max(0,Math.min(Á.Â.Ê.Æ,start));end=Math.max(start,Math.min(Á.Â.Ê.Æ,start+Æ));if(Á.isIE){Á.Â.selectionStart=start;Á.Â.selectionEnd=end;Á.setIESelection();}\nelse{if(Á.isOpera&&Á.isOpera < 9.6){Á.Â.setSelectionRange(0,0);}Á.Â.setSelectionRange(start,end);}Á.check_line_selection();};EA.Ä.area_get_selection=Ã(){var text=\"\";if(document.selection){var range=document.selection.createRange();text=range.text;}\nelse{text=Á.Â.Ê.substring(Á.Â.selectionStart,Á.Â.selectionEnd);}return text;}; EA.Ä.replace_tab=Ã(text){return text.replace(/((\\n?)([^\t\\n]*)\t)/gi,eA.smartTab);};EA.Ä.smartTab=Ã(){val=\"                   \";return EA.Ä.smartTab.arguments[2]+EA.Ä.smartTab.arguments[3]+val.substr(0,eA.tab_nb_char-(EA.Ä.smartTab.arguments[3].Æ)%eA.tab_nb_char);};EA.Ä.show_waiting_screen=Ã(){width=Á.editor_area.offsetWidth;height=Á.editor_area.offsetHeight;if(!(Á.isIE&&Á.isIE<6)){width-=2;height-=2;}Á.processing_screen.Ç.display=\"block\";Á.processing_screen.Ç.width=width+\"px\";Á.processing_screen.Ç.height=height+\"px\";Á.waiting_screen_displayed=Ë;};EA.Ä.hide_waiting_screen=Ã(){Á.processing_screen.Ç.display=\"none\";Á.waiting_screen_displayed=Ì;};EA.Ä.add_Ç=Ã(Çs){if(Çs.Æ>0){newcss=document.createElement(\"Ç\");newcss.type=\"text/css\";newcss.media=\"all\";if(newcss.ÇSheet){newcss.ÇSheet.cssText=Çs;}\nelse{newcss.appendChild(document.createTextNode(Çs));}document.getElementsByTagName(\"head\")[0].appendChild(newcss);}};EA.Ä.set_font=Ã(family,size){var t=Á,a=Á.Â,s=Á.Å,elem_font,i,elem;var elems=[\"Â\",\"content_highlight\",\"cursor_pos\",\"end_bracket\",\"selection_field\",\"selection_field_text\",\"line_number\"];if(family&&family!=\"\")s[\"font_family\"]=family;if(size&&size>0)s[\"font_size\"]=size;if(t.isOpera&&t.isOpera < 9.6)s['font_family']=\"monospace\";if(elem_font=_$(\"area_font_size\")){for(i=0;i < elem_font.Æ;i++){if(elem_font.options[i].Ê&&elem_font.options[i].Ê==s[\"font_size\"])elem_font.options[i].selected=Ë;}}if(t.isFirefox){var nbTry=3;do{var div1=document.createElement('div'),text1=document.createElement('Â');var Çs={width:'40px',overflow:'scroll',zIndex:50,visibility:'hidden',fontFamily:s[\"font_family\"],fontSize:s[\"font_size\"]+\"pt\",lineHeight:t.lineHeight+\"px\",padding:'0',margin:'0',border:'none',whiteSpace:'nowrap'};var diff,changed=Ì;for(i in Çs){div1.Ç[ i ]=Çs[i];text1.Ç[ i ]=Çs[i];}text1.wrap='off';text1.setAttribute('wrap','off');t.container.appendChild(div1);t.container.appendChild(text1);div1.innerHTML=text1.Ê='azertyuiopqsdfghjklm';div1.innerHTML=text1.Ê=text1.Ê+'wxcvbn^p*ù$!:;,,';diff=text1.scrollWidth-div1.scrollWidth;if(Math.abs(diff)>=2){s[\"font_size\"]++;changed=Ë;}t.container.removeChild(div1);t.container.removeChild(text1);nbTry--;}while(changed&&nbTry > 0);}elem=t.test_font_size;elem.Ç.fontFamily=\"\"+s[\"font_family\"];elem.Ç.fontSize=s[\"font_size\"]+\"pt\";elem.innerHTML=\"0\";t.lineHeight=elem.offsetHeight;for(i=0;i<elems.Æ;i++){elem=_$(elems[i]);elem.Ç.fontFamily=s[\"font_family\"];elem.Ç.fontSize=s[\"font_size\"]+\"pt\";elem.Ç.lineHeight=t.lineHeight+\"px\";}t.add_Ç(\"pre{font-family:\"+s[\"font_family\"]+\"}\");if((t.isOpera&&t.isOpera < 9.6)||t.isIE >=8){var parNod=a.ÈNode,nxtSib=a.nextSibling,start=a.selectionStart,end=a.selectionEnd;parNod.removeChild(a);parNod.insertBefore(a,nxtSib);t.area_select(start,end-start);}Á.focus();Á.update_size();Á.check_line_selection();};EA.Ä.change_font_size=Ã(){var size=_$(\"area_font_size\").Ê;if(size>0)Á.set_font(\"\",size);};EA.Ä.open_inline_popup=Ã(popup_id){Á.close_all_inline_popup();var popup=_$(popup_id);var editor=_$(\"editor\");for(var i=0;i<Á.inlinePopup.Æ;i++){if(Á.inlinePopup[i][\"popup_id\"]==popup_id){var icon=_$(Á.inlinePopup[i][\"icon_id\"]);if(icon){Á.switchClassSticky(icon,'editAreaButtonSelected',Ë);break;}}}popup.Ç.height=\"auto\";popup.Ç.overflow=\"visible\";if(document.body.offsetHeight< popup.offsetHeight){popup.Ç.height=(document.body.offsetHeight-10)+\"px\";popup.Ç.overflow=\"auto\";}if(!popup.positionned){var new_left=editor.offsetWidth /2-popup.offsetWidth /2;var new_top=editor.offsetHeight /2-popup.offsetHeight /2;popup.Ç.left=new_left+\"px\";popup.Ç.top=new_top+\"px\";popup.positionned=Ë;}popup.Ç.visibility=\"visible\";};EA.Ä.close_inline_popup=Ã(popup_id){var popup=_$(popup_id);for(var i=0;i<Á.inlinePopup.Æ;i++){if(Á.inlinePopup[i][\"popup_id\"]==popup_id){var icon=_$(Á.inlinePopup[i][\"icon_id\"]);if(icon){Á.switchClassSticky(icon,'editAreaButtonNormal',Ì);break;}}}popup.Ç.visibility=\"hidden\";};EA.Ä.close_all_inline_popup=Ã(e){for(var i=0;i<Á.inlinePopup.Æ;i++){Á.close_inline_popup(Á.inlinePopup[i][\"popup_id\"]);}Á.Â.focus();};EA.Ä.show_help=Ã(){Á.open_inline_popup(\"edit_area_help\");};EA.Ä.new_document=Ã(){Á.Â.Ê=\"\";Á.area_select(0,0);};EA.Ä.get_all_toolbar_height=Ã(){var area=_$(\"editor\");var results=È.getChildren(area,\"div\",\"class\",\"area_toolbar\",\"all\",\"0\");var height=0;for(var i=0;i<results.Æ;i++){height+=results[i].offsetHeight;}return height;};EA.Ä.go_to_line=Ã(line){if(!line){var icon=_$(\"go_to_line\");if(icon !=null){Á.restoreClass(icon);Á.switchClassSticky(icon,'editAreaButtonSelected',Ë);}line=prompt(Á.get_translation(\"go_to_line_prompt\"));if(icon !=null)Á.switchClassSticky(icon,'editAreaButtonNormal',Ì);}if(line&&line!=null&&line.search(/^[0-9]+$/)!=-1){var start=0;var lines=Á.Â.Ê.split(\"\\n\");if(line > lines.Æ)start=Á.Â.Ê.Æ;\nelse{for(var i=0;i<Math.min(line-1,lines.Æ);i++)start+=lines[i].Æ+1;}Á.area_select(start,0);}};EA.Ä.change_smooth_selection_mode=Ã(setTo){if(Á.do_highlight)return;if(setTo !=null){if(setTo===Ì)Á.smooth_selection=Ë;\nelse Á.smooth_selection=Ì;}var icon=_$(\"change_smooth_selection\");Á.Â.focus();if(Á.smooth_selection===Ë){Á.switchClassSticky(icon,'editAreaButtonNormal',Ì);Á.smooth_selection=Ì;Á.selection_field.Ç.display=\"none\";_$(\"cursor_pos\").Ç.display=\"none\";_$(\"end_bracket\").Ç.display=\"none\";}\nelse{Á.switchClassSticky(icon,'editAreaButtonSelected',Ì);Á.smooth_selection=Ë;Á.selection_field.Ç.display=\"block\";_$(\"cursor_pos\").Ç.display=\"block\";_$(\"end_bracket\").Ç.display=\"block\";}};EA.Ä.scroll_to_view=Ã(show){var zone,lineElem;if(!Á.smooth_selection)return;zone=_$(\"result\");var cursor_pos_top=_$(\"cursor_pos\").cursor_top;if(show==\"bottom\"){cursor_pos_top+=Á.getLinePosTop(Á.É['line_start']+Á.É['line_nb']-1);}var max_height_visible=zone.clientHeight+zone.scrollTop;var miss_top=cursor_pos_top+Á.lineHeight-max_height_visible;if(miss_top>0){zone.scrollTop=zone.scrollTop+miss_top;}\nelse if(zone.scrollTop > cursor_pos_top){zone.scrollTop=cursor_pos_top;}var cursor_pos_left=_$(\"cursor_pos\").cursor_left;var max_width_visible=zone.clientWidth+zone.scrollLeft;var miss_left=cursor_pos_left+10-max_width_visible;if(miss_left>0){zone.scrollLeft=zone.scrollLeft+miss_left+50;}\nelse if(zone.scrollLeft > cursor_pos_left){zone.scrollLeft=cursor_pos_left;}\nelse if(zone.scrollLeft==45){zone.scrollLeft=0;}};EA.Ä.check_undo=Ã(only_once){if(!eAs[Á.id])return Ì;if(Á.ÂFocused&&eAs[Á.id][\"displayed\"]==Ë){var text=Á.Â.Ê;if(Á.previous.Æ<=1)Á.switchClassSticky(_$(\"undo\"),'editAreaButtonDisabled',Ë);if(!Á.previous[Á.previous.Æ-1]||Á.previous[Á.previous.Æ-1][\"text\"] !=text){Á.previous.push({\"text\":text,\"selStart\":Á.Â.selectionStart,\"selEnd\":Á.Â.selectionEnd});if(Á.previous.Æ > Á.Å[\"max_undo\"]+1)Á.previous.shift();}if(Á.previous.Æ >=2)Á.switchClassSticky(_$(\"undo\"),'editAreaButtonNormal',Ì);}if(!only_once)setTimeout(\"eA.check_undo()\",3000);};EA.Ä.undo=Ã(){if(Á.previous.Æ > 0){Á.getIESelection();Á.next.push({\"text\":Á.Â.Ê,\"selStart\":Á.Â.selectionStart,\"selEnd\":Á.Â.selectionEnd});var prev=Á.previous.pop();if(prev[\"text\"]==Á.Â.Ê&&Á.previous.Æ > 0)prev=Á.previous.pop();Á.Â.Ê=prev[\"text\"];Á.last_undo=prev[\"text\"];Á.area_select(prev[\"selStart\"],prev[\"selEnd\"]-prev[\"selStart\"]);Á.switchClassSticky(_$(\"redo\"),'editAreaButtonNormal',Ì);Á.resync_highlight(Ë);Á.check_file_changes();}};EA.Ä.redo=Ã(){if(Á.next.Æ > 0){var next=Á.next.pop();Á.previous.push(next);Á.Â.Ê=next[\"text\"];Á.last_undo=next[\"text\"];Á.area_select(next[\"selStart\"],next[\"selEnd\"]-next[\"selStart\"]);Á.switchClassSticky(_$(\"undo\"),'editAreaButtonNormal',Ì);Á.resync_highlight(Ë);Á.check_file_changes();}if(Á.next.Æ==0)Á.switchClassSticky(_$(\"redo\"),'editAreaButtonDisabled',Ë);};EA.Ä.check_redo=Ã(){if(eA.next.Æ==0||eA.Â.Ê!=eA.last_undo){eA.next=[];eA.switchClassSticky(_$(\"redo\"),'editAreaButtonDisabled',Ë);}\nelse{Á.switchClassSticky(_$(\"redo\"),'editAreaButtonNormal',Ì);}};EA.Ä.switchClass=Ã(element,class_name,lock_state){var lockChanged=Ì;if(typeof(lock_state)!=\"undefined\"&&element !=null){element.classLock=lock_state;lockChanged=Ë;}if(element !=null&&(lockChanged||!element.classLock)){element.oldClassName=element.className;element.className=class_name;}};EA.Ä.restoreAndSwitchClass=Ã(element,class_name){if(element !=null&&!element.classLock){Á.restoreClass(element);Á.switchClass(element,class_name);}};EA.Ä.restoreClass=Ã(element){if(element !=null&&element.oldClassName&&!element.classLock){element.className=element.oldClassName;element.oldClassName=null;}};EA.Ä.setClassLock=Ã(element,lock_state){if(element !=null)element.classLock=lock_state;};EA.Ä.switchClassSticky=Ã(element,class_name,lock_state){var lockChanged=Ì;if(typeof(lock_state)!=\"undefined\"&&element !=null){element.classLock=lock_state;lockChanged=Ë;}if(element !=null&&(lockChanged||!element.classLock)){element.className=class_name;element.oldClassName=class_name;}};EA.Ä.scroll_page=Ã(params){var dir=params[\"dir\"],shift_pressed=params[\"shift\"];var lines=Á.Â.Ê.split(\"\\n\");var new_pos=0,Æ=0,char_left=0,line_nb=0,curLine=0;var toScrollAmount=_$(\"result\").clientHeight-30;var nbLineToScroll=0,diff=0;if(dir==\"up\"){nbLineToScroll=Math.ceil(toScrollAmount / Á.lineHeight);for(i=Á.É[\"line_start\"];i-diff > Á.É[\"line_start\"]-nbLineToScroll;i--){if(elem=_$('line_'+i)){diff+=Math.floor((elem.offsetHeight-1)/ Á.lineHeight);}}nbLineToScroll-=diff;if(Á.É[\"selec_direction\"]==\"up\"){for(line_nb=0;line_nb< Math.min(Á.É[\"line_start\"]-nbLineToScroll,lines.Æ);line_nb++){new_pos+=lines[line_nb].Æ+1;}char_left=Math.min(lines[Math.min(lines.Æ-1,line_nb)].Æ,Á.É[\"curr_pos\"]-1);if(shift_pressed)Æ=Á.É[\"selectionEnd\"]-new_pos-char_left;Á.area_select(new_pos+char_left,Æ);view=\"top\";}\nelse{view=\"bottom\";for(line_nb=0;line_nb< Math.min(Á.É[\"line_start\"]+Á.É[\"line_nb\"]-1-nbLineToScroll,lines.Æ);line_nb++){new_pos+=lines[line_nb].Æ+1;}char_left=Math.min(lines[Math.min(lines.Æ-1,line_nb)].Æ,Á.É[\"curr_pos\"]-1);if(shift_pressed){start=Math.min(Á.É[\"selectionStart\"],new_pos+char_left);Æ=Math.max(new_pos+char_left,Á.É[\"selectionStart\"])-start;if(new_pos+char_left < Á.É[\"selectionStart\"])view=\"top\";}\nelse start=new_pos+char_left;Á.area_select(start,Æ);}}\nelse{var nbLineToScroll=Math.floor(toScrollAmount / Á.lineHeight);for(i=Á.É[\"line_start\"];i+diff < Á.É[\"line_start\"]+nbLineToScroll;i++){if(elem=_$('line_'+i)){diff+=Math.floor((elem.offsetHeight-1)/ Á.lineHeight);}}nbLineToScroll-=diff;if(Á.É[\"selec_direction\"]==\"down\"){view=\"bottom\";for(line_nb=0;line_nb< Math.min(Á.É[\"line_start\"]+Á.É[\"line_nb\"]-2+nbLineToScroll,lines.Æ);line_nb++){if(line_nb==Á.É[\"line_start\"]-1)char_left=Á.É[\"selectionStart\"]-new_pos;new_pos+=lines[line_nb].Æ+1;}if(shift_pressed){Æ=Math.abs(Á.É[\"selectionStart\"]-new_pos);Æ+=Math.min(lines[Math.min(lines.Æ-1,line_nb)].Æ,Á.É[\"curr_pos\"]);Á.area_select(Math.min(Á.É[\"selectionStart\"],new_pos),Æ);}\nelse{Á.area_select(new_pos+char_left,0);}}\nelse{view=\"top\";for(line_nb=0;line_nb< Math.min(Á.É[\"line_start\"]+nbLineToScroll-1,lines.Æ,lines.Æ);line_nb++){if(line_nb==Á.É[\"line_start\"]-1)char_left=Á.É[\"selectionStart\"]-new_pos;new_pos+=lines[line_nb].Æ+1;}if(shift_pressed){Æ=Math.abs(Á.É[\"selectionEnd\"]-new_pos-char_left);Æ+=Math.min(lines[Math.min(lines.Æ-1,line_nb)].Æ,Á.É[\"curr_pos\"])-char_left-1;Á.area_select(Math.min(Á.É[\"selectionEnd\"],new_pos+char_left),Æ);if(new_pos+char_left > Á.É[\"selectionEnd\"])view=\"bottom\";}\nelse{Á.area_select(new_pos+char_left,0);}}}Á.check_line_selection();Á.scroll_to_view(view);};EA.Ä.start_resize=Ã(e){È.eAL.resize[\"id\"]=eA.id;È.eAL.resize[\"start_x\"]=(e)? e.pageX:event.x+document.body.scrollLeft;È.eAL.resize[\"start_y\"]=(e)? e.pageY:event.y+document.body.scrollTop;if(eA.isIE){eA.Â.focus();eA.getIESelection();}È.eAL.resize[\"selectionStart\"]=eA.Â.selectionStart;È.eAL.resize[\"selectionEnd\"]=eA.Â.selectionEnd;È.eAL.start_resize_area();};EA.Ä.toggle_full_screen=Ã(to){var t=Á,p=È,a=t.Â,html,frame,selStart,selEnd,old,icon;if(typeof(to)==\"undefined\")to=!t.fullscreen['isFull'];old=t.fullscreen['isFull'];t.fullscreen['isFull']=to;icon=_$(\"fullscreen\");selStart=t.Â.selectionStart;selEnd=t.Â.selectionEnd;html=p.document.getElementsByTagName(\"html\")[0];frame=p.document.getElementById(\"frame_\"+t.id);if(to&&to!=old){t.fullscreen['old_overflow']=p.get_css_property(html,\"overflow\");t.fullscreen['old_height']=p.get_css_property(html,\"height\");t.fullscreen['old_width']=p.get_css_property(html,\"width\");t.fullscreen['old_scrollTop']=html.scrollTop;t.fullscreen['old_scrollLeft']=html.scrollLeft;t.fullscreen['old_zIndex']=p.get_css_property(frame,\"z-index\");if(t.isOpera){html.Ç.height=\"100%\";html.Ç.width=\"100%\";}html.Ç.overflow=\"hidden\";html.scrollTop=0;html.scrollLeft=0;frame.Ç.position=\"absolute\";frame.Ç.width=html.clientWidth+\"px\";frame.Ç.height=html.clientHeight+\"px\";frame.Ç.display=\"block\";frame.Ç.zIndex=\"999999\";frame.Ç.top=\"0px\";frame.Ç.left=\"0px\";frame.Ç.top=\"-\"+p.calculeOffsetTop(frame)+\"px\";frame.Ç.left=\"-\"+p.calculeOffsetLeft(frame)+\"px\";t.switchClassSticky(icon,'editAreaButtonSelected',Ì);t.fullscreen['allow_resize']=t.resize_allowed;t.allow_resize(Ì);if(t.isFirefox){p.eAL.execCommand(t.id,\"update_size();\");t.area_select(selStart,selEnd-selStart);t.scroll_to_view();t.focus();}\nelse{setTimeout(\"parent.eAL.execCommand('\"+t.id+\"','update_size();');eA.focus();\",10);}}\nelse if(to!=old){frame.Ç.position=\"static\";frame.Ç.zIndex=t.fullscreen['old_zIndex'];if(t.isOpera){html.Ç.height=\"auto\";html.Ç.width=\"auto\";html.Ç.overflow=\"auto\";}\nelse if(t.isIE&&p!=top){html.Ç.overflow=\"auto\";}\nelse{html.Ç.overflow=t.fullscreen['old_overflow'];}html.scrollTop=t.fullscreen['old_scrollTop'];html.scrollLeft=t.fullscreen['old_scrollLeft'];p.eAL.hide(t.id);p.eAL.show(t.id);t.switchClassSticky(icon,'editAreaButtonNormal',Ì);if(t.fullscreen['allow_resize'])t.allow_resize(t.fullscreen['allow_resize']);if(t.isFirefox){t.area_select(selStart,selEnd-selStart);setTimeout(\"eA.scroll_to_view();\",10);}}};EA.Ä.allow_resize=Ã(allow){var resize=_$(\"resize_area\");if(allow){resize.Ç.visibility=\"visible\";È.eAL.add_event(resize,\"mouseup\",eA.start_resize);}\nelse{resize.Ç.visibility=\"hidden\";È.eAL.remove_event(resize,\"mouseup\",eA.start_resize);}Á.resize_allowed=allow;};EA.Ä.change_syntax=Ã(new_syntax,is_waiting){if(new_syntax==Á.Å['syntax'])return Ë;var founded=Ì;for(var i=0;i<Á.syntax_list.Æ;i++){if(Á.syntax_list[i]==new_syntax)founded=Ë;}if(founded==Ë){if(!È.eAL.load_syntax[new_syntax]){if(!is_waiting)È.eAL.load_script(È.eAL.baseURL+\"reg_syntax_\"+new_syntax+\".js\");setTimeout(\"eA.change_syntax('\"+new_syntax+\"',Ë);\",100);Á.show_waiting_screen();}\nelse{if(!Á.allready_used_syntax[new_syntax]){È.eAL.init_syntax_regexp();Á.add_Ç(È.eAL.syntax[new_syntax][\"Çs\"]);Á.allready_used_syntax[new_syntax]=Ë;}var sel=_$(\"syntax_selection\");if(sel&&sel.Ê!=new_syntax){for(var i=0;i<sel.Æ;i++){if(sel.options[i].Ê&&sel.options[i].Ê==new_syntax)sel.options[i].selected=Ë;}}Á.Å['syntax']=new_syntax;Á.resync_highlight(Ë);Á.hide_waiting_screen();return Ë;}}return Ì;};EA.Ä.set_editable=Ã(is_editable){if(is_editable){document.body.className=\"\";Á.Â.readOnly=Ì;Á.is_editable=Ë;}\nelse{document.body.className=\"non_editable\";Á.Â.readOnly=Ë;Á.is_editable=Ì;}if(eAs[Á.id][\"displayed\"]==Ë)Á.update_size();};EA.Ä.toggle_word_wrap=Ã(){Á.set_word_wrap(!Á.Å['word_wrap']);};EA.Ä.set_word_wrap=Ã(to){var t=Á,a=t.Â;if(t.isOpera){Á.Å['word_wrap']=Ì;t.switchClassSticky(_$(\"word_wrap\"),'editAreaButtonDisabled',Ë);return Ì;}if(to){wrap_mode='soft';Á.container.className+=' word_wrap';Á.container.Ç.width=\"\";Á.content_highlight.Ç.width=\"\";a.Ç.width=\"100%\";if(t.isIE&&t.isIE < 7){a.Ç.width=(a.offsetWidth-5)+\"px\";}t.switchClassSticky(_$(\"word_wrap\"),'editAreaButtonSelected',Ì);}\nelse{wrap_mode='off';Á.container.className=Á.container.className.replace(/word_wrap/g,'');t.switchClassSticky(_$(\"word_wrap\"),'editAreaButtonNormal',Ë);}Á.Â.previous_scrollWidth='';Á.Â.previous_scrollHeight='';a.wrap=wrap_mode;a.setAttribute('wrap',wrap_mode);if(!Á.isIE){var start=a.selectionStart,end=a.selectionEnd;var parNod=a.ÈNode,nxtSib=a.nextSibling;parNod.removeChild(a);parNod.insertBefore(a,nxtSib);Á.area_select(start,end-start);}Á.Å['word_wrap']=to;Á.focus();Á.update_size();Á.check_line_selection();};EA.Ä.open_file=Ã(Å){if(Å['id']!=\"undefined\"){var id=Å['id'];var new_file={};new_file['id']=id;new_file['title']=id;new_file['text']=\"\";new_file['É']=\"\";new_file['last_text_to_highlight']=\"\";new_file['last_hightlighted_text']=\"\";new_file['previous']=[];new_file['next']=[];new_file['last_undo']=\"\";new_file['smooth_selection']=Á.Å['smooth_selection'];new_file['do_highlight']=Á.Å['start_highlight'];new_file['syntax']=Á.Å['syntax'];new_file['scroll_top']=0;new_file['scroll_left']=0;new_file['selection_start']=0;new_file['selection_end']=0;new_file['edited']=Ì;new_file['font_size']=Á.Å[\"font_size\"];new_file['font_family']=Á.Å[\"font_family\"];new_file['word_wrap']=Á.Å[\"word_wrap\"];new_file['toolbar']={'links':{},'selects':{}};new_file['compare_edited_text']=new_file['text'];Á.files[id]=new_file;Á.update_file(id,Å);Á.files[id]['compare_edited_text']=Á.files[id]['text'];var html_id='tab_file_'+encodeURIComponent(id);Á.filesIdAssoc[html_id]=id;Á.files[id]['html_id']=html_id;if(!_$(Á.files[id]['html_id'])&&id!=\"\"){Á.tab_browsing_area.Ç.display=\"block\";var elem=document.createElement('li');elem.id=Á.files[id]['html_id'];var close=\"<img src=\\\"\"+È.eAL.baseURL+\"images_close.gif\\\" title=\\\"\"+Á.get_translation('close_tab','word')+\"\\\" onclick=\\\"eA.execCommand('close_file',eA.filesIdAssoc['\"+html_id+\"']);return Ì;\\\" class=\\\"hidden\\\" onmouseover=\\\"Á.className=''\\\" onmouseout=\\\"Á.className='hidden'\\\" />\";elem.innerHTML=\"<a onclick=\\\"javascript:eA.execCommand('switch_to_file',eA.filesIdAssoc['\"+html_id+\"']);\\\" selec=\\\"none\\\"><b><span><strong class=\\\"edited\\\">*</strong>\"+Á.files[id]['title']+close+\"</span></b></a>\";_$('tab_browsing_list').appendChild(elem);var elem=document.createElement('text');Á.update_size();}if(id!=\"\")Á.execCommand('file_open',Á.files[id]);Á.switch_to_file(id,Ë);return Ë;}\nelse return Ì;};EA.Ä.close_file=Ã(id){if(Á.files[id]){Á.save_file(id);if(Á.execCommand('file_close',Á.files[id])!==Ì){var li=_$(Á.files[id]['html_id']);li.ÈNode.removeChild(li);if(id==Á.curr_file){var next_file=\"\";var is_next=Ì;for(var i in Á.files){if(is_next){next_file=i;break;}\nelse if(i==id)is_next=Ë;\nelse next_file=i;}Á.switch_to_file(next_file);}delete(Á.files[id]);Á.update_size();}}};EA.Ä.save_file=Ã(id){var t=Á,save,a_links,a_selects,save_butt,img,i;if(t.files[id]){var save=t.files[id];save['É']=t.É;save['last_text_to_highlight']=t.last_text_to_highlight;save['last_hightlighted_text']=t.last_hightlighted_text;save['previous']=t.previous;save['next']=t.next;save['last_undo']=t.last_undo;save['smooth_selection']=t.smooth_selection;save['do_highlight']=t.do_highlight;save['syntax']=t.Å['syntax'];save['text']=t.Â.Ê;save['scroll_top']=t.result.scrollTop;save['scroll_left']=t.result.scrollLeft;save['selection_start']=t.É[\"selectionStart\"];save['selection_end']=t.É[\"selectionEnd\"];save['font_size']=t.Å[\"font_size\"];save['font_family']=t.Å[\"font_family\"];save['word_wrap']=t.Å[\"word_wrap\"];save['toolbar']={'links':{},'selects':{}};a_links=_$(\"toolbar_1\").getElementsByTagName(\"a\");for(i=0;i<a_links.Æ;i++){if(a_links[i].getAttribute('fileSpecific')=='yes'){save_butt={};img=a_links[i].getElementsByTagName('img')[0];save_butt['classLock']=img.classLock;save_butt['className']=img.className;save_butt['oldClassName']=img.oldClassName;save['toolbar']['links'][a_links[i].id]=save_butt;}}a_selects=_$(\"toolbar_1\").getElementsByTagName(\"select\");for(i=0;i<a_selects.Æ;i++){if(a_selects[i].getAttribute('fileSpecific')=='yes'){save['toolbar']['selects'][a_selects[i].id]=a_selects[i].Ê;}}t.files[id]=save;return save;}return Ì;};EA.Ä.update_file=Ã(id,new_Ês){for(var i in new_Ês){Á.files[id][i]=new_Ês[i];}};EA.Ä.display_file=Ã(id){var t=Á,a=t.Â,new_file,a_lis,a_selects,a_links,a_options,i,j;if(id==''){a.readOnly=Ë;t.tab_browsing_area.Ç.display=\"none\";_$(\"no_file_selected\").Ç.display=\"block\";t.result.className=\"empty\";if(!t.files['']){t.open_file({id:''});}}\nelse if(typeof(t.files[id])=='undefined'){return Ì;}\nelse{t.result.className=\"\";a.readOnly=!t.is_editable;_$(\"no_file_selected\").Ç.display=\"none\";t.tab_browsing_area.Ç.display=\"block\";}t.check_redo(Ë);t.check_undo(Ë);t.curr_file=id;a_lis=t.tab_browsing_area.getElementsByTagName('li');for(i=0;i<a_lis.Æ;i++){if(a_lis[i].id==t.files[id]['html_id'])a_lis[i].className='selected';\nelse a_lis[i].className='';}new_file=t.files[id];a.Ê=new_file['text'];t.set_font(new_file['font_family'],new_file['font_size']);t.area_select(new_file['É']['selection_start'],new_file['É']['selection_end']-new_file['É']['selection_start']);t.manage_size(Ë);t.result.scrollTop=new_file['scroll_top'];t.result.scrollLeft=new_file['scroll_left'];t.previous=new_file['previous'];t.next=new_file['next'];t.last_undo=new_file['last_undo'];t.check_redo(Ë);t.check_undo(Ë);t.execCommand(\"change_highlight\",new_file['do_highlight']);t.execCommand(\"change_syntax\",new_file['syntax']);t.execCommand(\"change_smooth_selection_mode\",new_file['smooth_selection']);t.execCommand(\"set_word_wrap\",new_file['word_wrap']);a_links=new_file['toolbar']['links'];for(i in a_links){if(img=_$(i).getElementsByTagName('img')[0]){img.classLock=a_links[i]['classLock'];img.className=a_links[i]['className'];img.oldClassName=a_links[i]['oldClassName'];}}a_selects=new_file['toolbar']['selects'];for(i in a_selects){a_options=_$(i).options;for(j=0;j<a_options.Æ;j++){if(a_options[j].Ê==a_selects[i])_$(i).options[j].selected=Ë;}}};EA.Ä.switch_to_file=Ã(file_to_show,force_refresh){if(file_to_show!=Á.curr_file||force_refresh){Á.save_file(Á.curr_file);if(Á.curr_file!='')Á.execCommand('file_switch_off',Á.files[Á.curr_file]);Á.display_file(file_to_show);if(file_to_show!='')Á.execCommand('file_switch_on',Á.files[file_to_show]);}};EA.Ä.get_file=Ã(id){if(id==Á.curr_file)Á.save_file(id);return Á.files[id];};EA.Ä.get_all_files=Ã(){tmp_files=Á.files;Á.save_file(Á.curr_file);if(tmp_files[''])delete(Á.files['']);return tmp_files;};EA.Ä.check_file_changes=Ã(){var id=Á.curr_file;if(Á.files[id]&&Á.files[id]['compare_edited_text']!=undefined){if(Á.files[id]['compare_edited_text'].Æ==Á.Â.Ê.Æ&&Á.files[id]['compare_edited_text']==Á.Â.Ê){if(Á.files[id]['edited']!=Ì)Á.set_file_edited_mode(id,Ì);}\nelse{if(Á.files[id]['edited']!=Ë)Á.set_file_edited_mode(id,Ë);}}};EA.Ä.set_file_edited_mode=Ã(id,to){if(Á.files[id]&&_$(Á.files[id]['html_id'])){var link=_$(Á.files[id]['html_id']).getElementsByTagName('a')[0];if(to==Ë){link.className='edited';}\nelse{link.className='';if(id==Á.curr_file)text=Á.Â.Ê;\nelse text=Á.files[id]['text'];Á.files[id]['compare_edited_text']=text;}Á.files[id]['edited']=to;}};EA.Ä.set_show_line_colors=Ã(new_Ê){Á.show_line_colors=new_Ê;if(new_Ê)Á.selection_field.className+=' show_colors';\nelse Á.selection_field.className=Á.selection_field.className.replace(/ show_colors/g,'');};var EA_keys={8:\"Retour arriere\",9:\"Tabulation\",12:\"Milieu(pave numerique)\",13:\"Entrer\",16:\"Shift\",17:\"Ctrl\",18:\"Alt\",19:\"Pause\",20:\"Verr Maj\",27:\"Esc\",32:\"Space\",33:\"Page up\",34:\"Page down\",35:\"End\",36:\"Begin\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"Impr ecran\",45:\"Inser\",46:\"Suppr\",91:\"Menu Demarrer Windows / touche pomme Mac\",92:\"Menu Demarrer Windows\",93:\"Menu contextuel Windows\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"Verr Num\",145:\"Arret defil\"};Ã keyDown(e){if(!e){e=event;}for(var i in eA.plugins){if(typeof(eA.plugins[i].onkeydown)==\"Ã\"){if(eA.plugins[i].onkeydown(e)===Ì){if(eA.isIE)e.keyCode=0;return Ì;}}}var target_id=(e.target||e.srcElement).id;var use=Ì;if(EA_keys[e.keyCode])letter=EA_keys[e.keyCode];\nelse letter=String.fromCharCode(e.keyCode);var low_letter=letter.toLowerCase();if(letter==\"Page up\"&&!eA.isOpera){eA.execCommand(\"scroll_page\",{\"dir\":\"up\",\"shift\":ShiftPressed(e)});use=Ë;}\nelse if(letter==\"Page down\"&&!eA.isOpera){eA.execCommand(\"scroll_page\",{\"dir\":\"down\",\"shift\":ShiftPressed(e)});use=Ë;}\nelse if(eA.is_editable==Ì){return Ë;}\nelse if(letter==\"Tabulation\"&&target_id==\"Â\"&&!CtrlPressed(e)&&!AltPressed(e)){if(ShiftPressed(e))eA.execCommand(\"invert_tab_selection\");\nelse eA.execCommand(\"tab_selection\");use=Ë;if(eA.isOpera||(eA.isFirefox&&eA.isMac))setTimeout(\"eA.execCommand('focus');\",1);}\nelse if(letter==\"Entrer\"&&target_id==\"Â\"){if(eA.press_enter())use=Ë;}\nelse if(letter==\"Entrer\"&&target_id==\"area_search\"){eA.execCommand(\"area_search\");use=Ë;}\nelse  if(letter==\"Esc\"){eA.execCommand(\"close_all_inline_popup\",e);use=Ë;eval(\"parent.closeActiveTab();\"); }else if(CtrlPressed(e)&&!AltPressed(e)&&!ShiftPressed(e)){switch(low_letter){case \"f\":eA.execCommand(\"area_search\");use=Ë;break;case \"r\":eA.execCommand(\"area_replace\");use=Ë;break;case \"q\":eA.execCommand(\"close_all_inline_popup\",e);use=Ë;break;case \"h\":eA.execCommand(\"change_highlight\");use=Ë;break;case \"g\":setTimeout(\"eA.execCommand('go_to_line');\",5);use=Ë;break;case \"e\":eA.execCommand(\"show_help\");use=Ë;break;case \"z\":use=Ë;eA.execCommand(\"undo\");break;case \"y\":use=Ë;eA.execCommand(\"redo\");break; case \"s\": editArea.execCommand('save'); use=true;break; case \"b\":use=true; editArea.editor_area.children.toolbar_1.children['compile-state'].value = 'on';editArea.execCommand('save'); break; default:break;}}if(eA.next.Æ > 0){setTimeout(\"eA.check_redo();\",10);}setTimeout(\"eA.check_file_changes();\",10);if(use){if(eA.isIE)e.keyCode=0;return Ì;}return Ë;};Ã AltPressed(e){if(window.event){return(window.event.altKey);}\nelse{if(e.modifiers)return(e.altKey||(e.modifiers % 2));\nelse return e.altKey;}};Ã CtrlPressed(e){if(window.event){return(window.event.ctrlKey);}\nelse{return(e.ctrlKey||(e.modifiers==2)||(e.modifiers==3)||(e.modifiers>5));}};Ã ShiftPressed(e){if(window.event){return(window.event.shiftKey);}\nelse{return(e.shiftKey||(e.modifiers>3));}};	EA.Ä.show_search=Ã(){if(_$(\"area_search_replace\").Ç.visibility==\"visible\"){Á.hidden_search();}\nelse{Á.open_inline_popup(\"area_search_replace\");var text=Á.area_get_selection();var search=text.split(\"\\n\")[0];_$(\"area_search\").Ê=search;_$(\"area_search\").focus();}};EA.Ä.hidden_search=Ã(){Á.close_inline_popup(\"area_search_replace\");};EA.Ä.area_search=Ã(mode){if(!mode)mode=\"search\";_$(\"area_search_msg\").innerHTML=\"\";var search=_$(\"area_search\").Ê;Á.Â.focus();Á.Â.ÂFocused=Ë;var infos=Á.get_selection_infos();var start=infos[\"selectionStart\"];var pos=-1;var pos_begin=-1;var Æ=search.Æ;if(_$(\"area_search_replace\").Ç.visibility!=\"visible\"){Á.show_search();return;}if(search.Æ==0){_$(\"area_search_msg\").innerHTML=Á.get_translation(\"search_field_empty\");return;}if(mode!=\"replace\"){if(_$(\"area_search_reg_exp\").checked)start++;\nelse start+=search.Æ;}if(_$(\"area_search_reg_exp\").checked){var opt=\"m\";if(!_$(\"area_search_match_case\").checked)opt+=\"i\";var reg=new RegExp(search,opt);pos=infos[\"full_text\"].substr(start).search(reg);pos_begin=infos[\"full_text\"].search(reg);if(pos!=-1){pos+=start;Æ=infos[\"full_text\"].substr(start).match(reg)[0].Æ;}\nelse if(pos_begin!=-1){Æ=infos[\"full_text\"].match(reg)[0].Æ;}}\nelse{if(_$(\"area_search_match_case\").checked){pos=infos[\"full_text\"].indexOf(search,start);pos_begin=infos[\"full_text\"].indexOf(search);}\nelse{pos=infos[\"full_text\"].toLowerCase().indexOf(search.toLowerCase(),start);pos_begin=infos[\"full_text\"].toLowerCase().indexOf(search.toLowerCase());}}if(pos==-1&&pos_begin==-1){_$(\"area_search_msg\").innerHTML=\"<strong>\"+search+\"</strong> \"+Á.get_translation(\"not_found\");return;}\nelse if(pos==-1&&pos_begin !=-1){begin=pos_begin;_$(\"area_search_msg\").innerHTML=Á.get_translation(\"restart_search_at_begin\");}\nelse begin=pos;if(mode==\"replace\"&&pos==infos[\"indexOfCursor\"]){var replace=_$(\"area_replace\").Ê;var new_text=\"\";if(_$(\"area_search_reg_exp\").checked){var opt=\"m\";if(!_$(\"area_search_match_case\").checked)opt+=\"i\";var reg=new RegExp(search,opt);new_text=infos[\"full_text\"].substr(0,begin)+infos[\"full_text\"].substr(start).replace(reg,replace);}\nelse{new_text=infos[\"full_text\"].substr(0,begin)+replace+infos[\"full_text\"].substr(begin+Æ);}Á.Â.Ê=new_text;Á.area_select(begin,Æ);Á.area_search();}\nelse Á.area_select(begin,Æ);};EA.Ä.area_replace=Ã(){Á.area_search(\"replace\");};EA.Ä.area_replace_all=Ã(){var base_text=Á.Â.Ê;var search=_$(\"area_search\").Ê;var replace=_$(\"area_replace\").Ê;if(search.Æ==0){_$(\"area_search_msg\").innerHTML=Á.get_translation(\"search_field_empty\");return;}var new_text=\"\";var nb_change=0;if(_$(\"area_search_reg_exp\").checked){var opt=\"mg\";if(!_$(\"area_search_match_case\").checked)opt+=\"i\";var reg=new RegExp(search,opt);nb_change=infos[\"full_text\"].match(reg).Æ;new_text=infos[\"full_text\"].replace(reg,replace);}\nelse{if(_$(\"area_search_match_case\").checked){var tmp_tab=base_text.split(search);nb_change=tmp_tab.Æ-1;new_text=tmp_tab.join(replace);}\nelse{var lower_Ê=base_text.toLowerCase();var lower_search=search.toLowerCase();var start=0;var pos=lower_Ê.indexOf(lower_search);while(pos!=-1){nb_change++;new_text+=Á.Â.Ê.substring(start,pos)+replace;start=pos+search.Æ;pos=lower_Ê.indexOf(lower_search,pos+1);}new_text+=Á.Â.Ê.substring(start);}}if(new_text==base_text){_$(\"area_search_msg\").innerHTML=\"<strong>\"+search+\"</strong> \"+Á.get_translation(\"not_found\");}\nelse{Á.Â.Ê=new_text;_$(\"area_search_msg\").innerHTML=\"<strong>\"+nb_change+\"</strong> \"+Á.get_translation(\"occurrence_replaced\");setTimeout(\"eA.Â.focus();eA.Â.ÂFocused=Ë;\",100);}}; EA.Ä.change_highlight=Ã(change_to){if(Á.Å[\"syntax\"].Æ==0&&change_to==Ì){Á.switchClassSticky(_$(\"highlight\"),'editAreaButtonDisabled',Ë);Á.switchClassSticky(_$(\"reset_highlight\"),'editAreaButtonDisabled',Ë);return Ì;}if(Á.do_highlight==change_to)return Ì;Á.getIESelection();var pos_start=Á.Â.selectionStart;var pos_end=Á.Â.selectionEnd;if(Á.do_highlight===Ë||change_to==Ì)Á.disable_highlight();\nelse Á.enable_highlight();Á.Â.focus();Á.Â.selectionStart=pos_start;Á.Â.selectionEnd=pos_end;Á.setIESelection();};EA.Ä.disable_highlight=Ã(displayOnly){var t=Á,a=t.Â,new_Obj,old_class,new_class;t.selection_field.innerHTML=\"\";t.selection_field_text.innerHTML=\"\";t.content_highlight.Ç.visibility=\"hidden\";new_Obj=t.content_highlight.cloneNode(Ì);new_Obj.innerHTML=\"\";t.content_highlight.ÈNode.insertBefore(new_Obj,t.content_highlight);t.content_highlight.ÈNode.removeChild(t.content_highlight);t.content_highlight=new_Obj;old_class=È.getAttribute(a,\"class\");if(old_class){new_class=old_class.replace(\"hidden\",\"\");È.setAttribute(a,\"class\",new_class);}a.Ç.backgroundColor=\"transÈ\";t.switchClassSticky(_$(\"highlight\"),'editAreaButtonNormal',Ë);t.switchClassSticky(_$(\"reset_highlight\"),'editAreaButtonDisabled',Ë);t.do_highlight=Ì;t.switchClassSticky(_$(\"change_smooth_selection\"),'editAreaButtonSelected',Ë);if(typeof(t.smooth_selection_before_highlight)!=\"undefined\"&&t.smooth_selection_before_highlight===Ì){t.change_smooth_selection_mode(Ì);}};EA.Ä.enable_highlight=Ã(){var t=Á,a=t.Â,new_class;t.show_waiting_screen();t.content_highlight.Ç.visibility=\"visible\";new_class=È.getAttribute(a,\"class\")+\" hidden\";È.setAttribute(a,\"class\",new_class);if(t.isIE)a.Ç.backgroundColor=\"#FFFFFF\";t.switchClassSticky(_$(\"highlight\"),'editAreaButtonSelected',Ì);t.switchClassSticky(_$(\"reset_highlight\"),'editAreaButtonNormal',Ì);t.smooth_selection_before_highlight=t.smooth_selection;if(!t.smooth_selection)t.change_smooth_selection_mode(Ë);t.switchClassSticky(_$(\"change_smooth_selection\"),'editAreaButtonDisabled',Ë);t.do_highlight=Ë;t.resync_highlight();t.hide_waiting_screen();};EA.Ä.maj_highlight=Ã(infos){var debug_opti=\"\",tps_start=new Date().getTime(),tps_middle_opti=new Date().getTime();var t=Á,hightlighted_text,updated_highlight;var textToHighlight=infos[\"full_text\"],doSyntaxOpti=Ì,doHtmlOpti=Ì,stay_begin=\"\",stay_end=\"\",trace_new,trace_last;if(t.last_text_to_highlight==infos[\"full_text\"]&&t.resync_highlight!==Ë)return;if(t.reload_highlight===Ë){t.reload_highlight=Ì;}\nelse if(textToHighlight.Æ==0){textToHighlight=\"\\n \";}\nelse{changes=t.checkTextEvolution(t.last_text_to_highlight,textToHighlight);trace_new=t.get_syntax_trace(changes.newTextLine).replace(/\\r/g,'');trace_last=t.get_syntax_trace(changes.lastTextLine).replace(/\\r/g,'');doSyntaxOpti=(trace_new==trace_last);if(!doSyntaxOpti&&trace_new==\"\\n\"+trace_last&&/^[ \t\s]*\\n[ \t\s]*$/.test(changes.newText.replace(/\\r/g,''))&&changes.lastText==\"\"){doSyntaxOpti=Ë;}if(doSyntaxOpti){tps_middle_opti=new Date().getTime();stay_begin=t.last_hightlighted_text.split(\"\\n\").slice(0,changes.lineStart).join(\"\\n\");if(changes.lineStart>0)stay_begin+=\"\\n\";stay_end=t.last_hightlighted_text.split(\"\\n\").slice(changes.lineLastEnd+1).join(\"\\n\");if(stay_end.Æ>0)stay_end=\"\\n\"+stay_end;if(stay_begin.split('<span').Æ !=stay_begin.split('</span').Æ||stay_end.split('<span').Æ !=stay_end.split('</span').Æ){doSyntaxOpti=Ì;stay_end='';stay_begin='';}\nelse{if(stay_begin.Æ==0&&changes.posLastEnd==-1)changes.newTextLine+=\"\\n\";textToHighlight=changes.newTextLine;}}if(t.Å[\"debug\"]){var ch=changes;debug_opti=(doSyntaxOpti?\"Optimisation\":\"No optimisation\")+\" start:\"+ch.posStart+\"(\"+ch.lineStart+\")\"+\" end_new:\"+ch.posNewEnd+\"(\"+ch.lineNewEnd+\")\"+\" end_last:\"+ch.posLastEnd+\"(\"+ch.lineLastEnd+\")\"+\"\\nchanged_text:\"+ch.newText+\"=> trace:\"+trace_new+\"\\nchanged_last_text:\"+ch.lastText+\"=> trace:\"+trace_last+\"\\nchanged_line:\"+ch.newTextLine+\"\\nlast_changed_line:\"+ch.lastTextLine+\"\\nstay_begin:\"+stay_begin.slice(-100)+\"\\nstay_end:\"+stay_end.substr(0,100);+\"\\n\";}}tps_end_opti=new Date().getTime();updated_highlight=t.colorize_text(textToHighlight);tpsAfterReg=new Date().getTime();if(doSyntaxOpti){try{var replacedBloc,i,nbStart='',nbEnd='',newHtml,ÆOld,ÆNew;replacedBloc=t.last_hightlighted_text.substring(stay_begin.Æ,t.last_hightlighted_text.Æ-stay_end.Æ);ÆOld=replacedBloc.Æ;ÆNew=updated_highlight.Æ;for(i=0;i < ÆOld&&i < ÆNew&&replacedBloc.charAt(i)==updated_highlight.charAt(i);i++){}nbStart=i;for(i=0;i+nbStart < ÆOld&&i+nbStart < ÆNew&&replacedBloc.charAt(ÆOld-i-1)==updated_highlight.charAt(ÆNew-i-1);i++){}nbEnd=i;lastHtml=replacedBloc.substring(nbStart,ÆOld-nbEnd);newHtml=updated_highlight.substring(nbStart,ÆNew-nbEnd);if(newHtml.indexOf('<span')==-1&&newHtml.indexOf('</span')==-1&&lastHtml.indexOf('<span')==-1&&lastHtml.indexOf('</span')==-1){var beginStr,nbOpendedSpan,nbClosedSpan,nbUnchangedChars,span,textNode;doHtmlOpti=Ë;beginStr=t.last_hightlighted_text.substr(0,stay_begin.Æ+nbStart);nbOpendedSpan=beginStr.split('<span').Æ-1;nbClosedSpan=beginStr.split('</span').Æ-1;span=t.content_highlight.getElementsByTagName('span')[ nbOpendedSpan ];ÈSpan=span;maxStartOffset=maxEndOffset=0;if(nbOpendedSpan==nbClosedSpan){while(ÈSpan.ÈNode !=t.content_highlight&&ÈSpan.ÈNode.tagName !='PRE'){ÈSpan=ÈSpan.ÈNode;}}\nelse{maxStartOffset=maxEndOffset=beginStr.Æ+1;nbClosed=beginStr.substr(Math.max(0,beginStr.lastIndexOf('<span',maxStartOffset-1))).split('</span').Æ-1;while(nbClosed > 0){nbClosed--;ÈSpan=ÈSpan.ÈNode;}while(ÈSpan.ÈNode !=t.content_highlight&&ÈSpan.ÈNode.tagName !='PRE'&&(tmpMaxStartOffset=Math.max(0,beginStr.lastIndexOf('<span',maxStartOffset-1)))<(tmpMaxEndOffset=Math.max(0,beginStr.lastIndexOf('</span',maxEndOffset-1)))){maxStartOffset=tmpMaxStartOffset;maxEndOffset=tmpMaxEndOffset;}}if(ÈSpan.ÈNode==t.content_highlight||ÈSpan.ÈNode.tagName=='PRE'){maxStartOffset=Math.max(0,beginStr.indexOf('<span'));}if(maxStartOffset==beginStr.Æ){nbSubSpanBefore=0;}\nelse{lastEndPos=Math.max(0,beginStr.lastIndexOf('>',maxStartOffset));nbSubSpanBefore=beginStr.substr(lastEndPos).split('<span').Æ-1;}if(nbSubSpanBefore==0){textNode=ÈSpan.firstChild;}\nelse{lastSubSpan=ÈSpan.getElementsByTagName('span')[ nbSubSpanBefore-1 ];while(lastSubSpan.ÈNode !=ÈSpan){lastSubSpan=lastSubSpan.ÈNode;}if(lastSubSpan.nextSibling==null||lastSubSpan.nextSibling.nodeType !=3){textNode=document.createTextNode('');lastSubSpan.ÈNode.insertBefore(textNode,lastSubSpan.nextSibling);}\nelse{textNode=lastSubSpan.nextSibling;}}nbUnchangedChars=beginStr.Æ-Math.max(0,beginStr.lastIndexOf('>')+1);if(t.isIE){nbUnchangedChars-=(beginStr.substr(beginStr.Æ-nbUnchangedChars).split(\"\\n\").Æ-1);textNode.replaceData(nbUnchangedChars,lastHtml.replace(/\\n/g,'').Æ,newHtml.replace(/\\n/g,''));}\nelse{textNode.replaceData(nbUnchangedChars,lastHtml.Æ,newHtml);}}}catch(e){doHtmlOpti=Ì;}}tpsAfterOpti2=new Date().getTime();hightlighted_text=stay_begin+updated_highlight+stay_end;if(!doHtmlOpti){var new_Obj=t.content_highlight.cloneNode(Ì);if((t.isIE&&t.isIE < 8)||(t.isOpera&&t.isOpera < 9.6))new_Obj.innerHTML=\"<pre><span class='\"+t.Å[\"syntax\"]+\"'>\"+hightlighted_text+\"</span></pre>\";\nelse new_Obj.innerHTML=\"<span class='\"+t.Å[\"syntax\"]+\"'>\"+hightlighted_text+\"</span>\";t.content_highlight.ÈNode.replaceChild(new_Obj,t.content_highlight);t.content_highlight=new_Obj;}t.last_text_to_highlight=infos[\"full_text\"];t.last_hightlighted_text=hightlighted_text;tps3=new Date().getTime();if(t.Å[\"debug\"]){t.debug.Ê=\"Tps optimisation \"+(tps_end_opti-tps_start)+\" | tps reg exp:\"+(tpsAfterReg-tps_end_opti)+\" | tps opti HTML:\"+(tpsAfterOpti2-tpsAfterReg)+' '+(doHtmlOpti ? 'yes':'no')+\" | tps update highlight content:\"+(tps3-tpsAfterOpti2)+\" | tpsTotal:\"+(tps3-tps_start)+\"(\"+tps3+\")\\n\"+debug_opti;}};EA.Ä.resync_highlight=Ã(reload_now){Á.reload_highlight=Ë;Á.last_text_to_highlight=\"\";Á.focus();if(reload_now)Á.check_line_selection(Ì);}; EA.Ä.comment_or_quote=Ã(){var new_class=\"\",close_tag=\"\",sy,arg,i;sy=È.eAL.syntax[eA.current_code_lang];arg=EA.Ä.comment_or_quote.arguments[0];for(i in sy[\"quotes\"]){if(arg.indexOf(i)==0){new_class=\"quotesmarks\";close_tag=sy[\"quotes\"][i];}}if(new_class.Æ==0){for(var i in sy[\"comments\"]){if(arg.indexOf(i)==0){new_class=\"comments\";close_tag=sy[\"comments\"][i];}}}if(close_tag==\"\\n\"){return \"µ__\"+new_class+\"__µ\"+arg.replace(/(\\r?\\n)?$/m,\"µ_END_µ$1\");}\nelse{reg=new RegExp(È.eAL.get_escaped_regexp(close_tag)+\"$\",\"m\");if(arg.search(reg)!=-1)return \"µ__\"+new_class+\"__µ\"+arg+\"µ_END_µ\";\nelse return \"µ__\"+new_class+\"__µ\"+arg;}};EA.Ä.get_syntax_trace=Ã(text){if(Á.Å[\"syntax\"].Æ>0&&È.eAL.syntax[Á.Å[\"syntax\"]][\"syntax_trace_regexp\"])return text.replace(È.eAL.syntax[Á.Å[\"syntax\"]][\"syntax_trace_regexp\"],\"$3\");};EA.Ä.colorize_text=Ã(text){text=\" \"+text;if(Á.Å[\"syntax\"].Æ>0)text=Á.apply_syntax(text,Á.Å[\"syntax\"]);return text.substr(1).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/µ_END_µ/g,\"</span>\").replace(/µ__([a-zA-Z0-9]+)__µ/g,\"<span class='$1'>\");};EA.Ä.apply_syntax=Ã(text,lang){var sy;Á.current_code_lang=lang;if(!È.eAL.syntax[lang])return text;sy=È.eAL.syntax[lang];if(sy[\"custom_regexp\"]['before']){for(var i in sy[\"custom_regexp\"]['before']){var convert=\"$1µ__\"+sy[\"custom_regexp\"]['before'][i]['class']+\"__µ$2µ_END_µ$3\";text=text.replace(sy[\"custom_regexp\"]['before'][i]['regexp'],convert);}}if(sy[\"comment_or_quote_reg_exp\"]){text=text.replace(sy[\"comment_or_quote_reg_exp\"],Á.comment_or_quote);}if(sy[\"keywords_reg_exp\"]){for(var i in sy[\"keywords_reg_exp\"]){text=text.replace(sy[\"keywords_reg_exp\"][i],'µ__'+i+'__µ$2µ_END_µ');}}if(sy[\"delimiters_reg_exp\"]){text=text.replace(sy[\"delimiters_reg_exp\"],'µ__delimiters__µ$1µ_END_µ');}if(sy[\"operators_reg_exp\"]){text=text.replace(sy[\"operators_reg_exp\"],'µ__operators__µ$1µ_END_µ');}if(sy[\"custom_regexp\"]['after']){for(var i in sy[\"custom_regexp\"]['after']){var convert=\"$1µ__\"+sy[\"custom_regexp\"]['after'][i]['class']+\"__µ$2µ_END_µ$3\";text=text.replace(sy[\"custom_regexp\"]['after'][i]['regexp'],convert);}}return text;};var editArea= eA;EditArea=EA;</script>".replace(/Á/g,'this').replace(/Â/g,'textarea').replace(/Ã/g,'function').replace(/Ä/g,'prototype').replace(/Å/g,'settings').replace(/Æ/g,'length').replace(/Ç/g,'style').replace(/È/g,'parent').replace(/É/g,'last_selection').replace(/Ê/g,'value').replace(/Ë/g,'true').replace(/Ì/g,'false');
editAreaLoader.template= "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"> <html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" > <head> <title>EditArea</title> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /> <meta http-equiv=\"X-UA-Compatible\" content=\"IE=EmulateIE7\"/> [__CSSRULES__] [__JSCODE__] <!--[if lte IE 8]><link rel='Stylesheet' href='/db/css/ie.css' media='screen' type='text/css' /><![endif]--></head> <body> <div id='editor'> <div class='area_toolbar' id='toolbar_1'>[__TOOLBAR__]</div> <div class='area_toolbar' id='tab_browsing_area'><ul id='tab_browsing_list' class='menu'> <li> </li> </ul></div> <div id='result'> <div id='no_file_selected'></div> <div id='container'> <div id='cursor_pos' class='edit_area_cursor'>&nbsp;</div> <div id='end_bracket' class='edit_area_cursor'>&nbsp;</div> <div id='selection_field'></div> <div id='line_number' selec='none'></div> <div id='content_highlight'></div> <div id='test_font_size'></div> <div id='selection_field_text'></div> <textarea id='textarea' wrap='off' onchange='editArea.execCommand(\"onchange\");' onfocus='javascript:editArea.textareaFocused=true;' onblur='javascript:editArea.textareaFocused=false;'> </textarea> </div> </div> <div class='area_toolbar' id='toolbar_2'> <table class='statusbar' cellspacing='0' cellpadding='0'> <tr> <td class='total' selec='none'>{$position}:</td> <td class='infos' selec='none'> {$line_abbr} <span  id='linePos'>0</span>, {$char_abbr} <span id='currPos'>0</span> </td> <td class='total' selec='none'>{$total}:</td> <td class='infos' selec='none'> {$line_abbr} <span id='nbLine'>0</span>, {$char_abbr} <span id='nbChar'>0</span> </td> <td class='resize'> <span id='resize_area'><img src='[__BASEURL__]images_statusbar_resize.gif' alt='click once and drag to resize' selec='none'></span> </td> </tr> </table> </div> </div> <div id='processing'> <div id='processing_text'> {$processing} </div> </div> <div id='area_search_replace' class='editarea_popup'> <table cellspacing='2' cellpadding='0' style='width: 100%'> <tr> <td selec='none'>{$search}</td> <td><input type='text' id='area_search' /></td> <td id='close_area_search_replace'> <a onclick='Javascript:editArea.execCommand(\"hidden_search\")'><img selec='none' src='[__BASEURL__]images_close.gif' alt='{$close_popup}' title='{$close_popup}' /></a><br /> </tr><tr> <td selec='none'>{$replace}</td> <td><input type='text' id='area_replace' /></td> <td><img id='move_area_search_replace' onmousedown='return parent.start_move_element(event,\"area_search_replace\", parent.frames[\"frame_\"+editArea.id]);'  src='[__BASEURL__]images_move.gif' alt='{$move_popup}' title='{$move_popup}' /></td> </tr> </table> <div class='button'> <input type='checkbox' id='area_search_match_case' /><label for='area_search_match_case' selec='none'>{$match_case}</label> <input type='checkbox' id='area_search_reg_exp' /><label for='area_search_reg_exp' selec='none'>{$reg_exp}</label> <br /> <a onclick='Javascript:editArea.execCommand(\"area_search\")' selec='none'>{$find_next}</a> <a onclick='Javascript:editArea.execCommand(\"area_replace\")' selec='none'>{$replace}</a> <a onclick='Javascript:editArea.execCommand(\"area_replace_all\")' selec='none'>{$replace_all}</a><br /> </div> <div id='area_search_msg' selec='none'></div> </div> <div id='edit_area_help' class='editarea_popup'> <div class='close_popup'> <a onclick='Javascript:editArea.execCommand(\"close_all_inline_popup\")'><img src='[__BASEURL__]images_close.gif' alt='{$close_popup}' title='{$close_popup}' /></a> </div> <div><h2>Editarea [__EA_VERSION__]</h2><br /> <h3>{$shortcuts}:</h3> {$tab}: {$add_tab}<br /> {$shift}+{$tab}: {$remove_tab}<br /> {$ctrl}+f: {$search_command}<br /> {$ctrl}+r: {$replace_command}<br /> {$ctrl}+h: {$highlight}<br /> {$ctrl}+g: {$go_to_line}<br /> {$ctrl}+z: {$undo}<br /> {$ctrl}+y: {$redo}<br /> {$ctrl}+e: {$help}<br /> {$ctrl}+q, {$esc}: {$close_popup}<br /> {$accesskey} E: {$toggle}<br /> {$ctrl}+B: {$compile}<br /> <br /> <em>{$about_notice}</em> <br /><div class='copyright'>&copy; Christophe Dolivet 2007-2009</div> </div> </div> </body> </html> ";
editAreaLoader.iframe_css= "<style>body,html{margin:0;padding:0;height:100%;border:none;overflow:hidden;background-color:#FFF;}body,html,table,form,textarea{font:12px monospace,sans-serif;}#editor{border:solid #888 1px;overflow:hidden;}#result{z-index:4;overflow-x:auto;overflow-y:scroll;border-top:solid #888 1px;border-bottom:solid #888 1px;position:relative;clear:both;}#result.empty{overflow:hidden;}#container{overflow:hidden;border:solid blue 0;position:relative;z-index:10;padding:0 5px 0 45px;}#textarea{position:relative;top:0;left:0;margin:0;padding:0;width:100%;height:100%;overflow:hidden;z-index:7;border-width:0;background-color:transparent;resize:none;}#textarea,#textarea:hover{outline:none;}#content_highlight{white-space:pre;margin:0;padding:0;position:absolute;z-index:4;overflow:visible;}#selection_field,#selection_field_text{margin:0;background-color:#E1F2F9;position:absolute;z-index:5;top:-100px;padding:0;white-space:pre;overflow:hidden;}#selection_field.show_colors {z-index:3;background-color:#EDF9FC;}#selection_field strong{font-weight:normal;}#selection_field.show_colors *,#selection_field_text * {visibility:hidden;}#selection_field_text{background-color:transparent;}#selection_field_text strong{font-weight:normal;background-color:#3399FE;color:#FFF;visibility:visible;}#container.word_wrap #content_highlight,#container.word_wrap #selection_field,#container.word_wrap #selection_field_text,#container.word_wrap #test_font_size{white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;width:99%;}#line_number{position:absolute;overflow:hidden;border-right:solid black 1px;z-index:8;width:38px;padding:0 5px 0 0;margin:0 0 0 -45px;text-align:right;color:#AAAAAA;}#test_font_size{padding:0;margin:0;visibility:hidden;position:absolute;white-space:pre;}pre{margin:0;padding:0;}.hidden{opacity:0.6;filter:alpha(opacity=20);}#result .edit_area_cursor{position:absolute;z-index:6;background-color:#000000;top:-100px;margin:0;}#result .edit_area_selection_field .overline{background-color:#996600;}.editarea_popup{border:solid 1px #888888;background-color:#ECE9D8;width:250px;padding:4px;position:absolute;visibility:hidden;z-index:15;top:-500px;}.editarea_popup,.editarea_popup table{font-family:sans-serif;font-size:10pt;}.editarea_popup img{border:0;}.editarea_popup .close_popup{float:right;line-height:16px;border:0;padding:0;}.editarea_popup h1,.editarea_popup h2,.editarea_popup h3,.editarea_popup h4,.editarea_popup h5,.editarea_popup h6{margin:0;padding:0;}.editarea_popup .copyright{text-align:right;}div#area_search_replace{}div#area_search_replace img{border:0;}div#area_search_replace div.button{text-align:center;line-height:1.7em;}div#area_search_replace .button a{cursor:pointer;border:solid 1px #888888;background-color:#DEDEDE;text-decoration:none;padding:0 2px;color:#000000;white-space:nowrap;}div#area_search_replace a:hover{background-color:#EDEDED;}div#area_search_replace  #move_area_search_replace{cursor:move;border:solid 1px #888;}div#area_search_replace  #close_area_search_replace{text-align:right;vertical-align:top;white-space:nowrap;}div#area_search_replace  #area_search_msg{height:18px;overflow:hidden;border-top:solid 1px #888;margin-top:3px;}#edit_area_help{width:350px;}#edit_area_help div.close_popup{float:right;}.area_toolbar{width:100%;margin:0;padding:0;background-color:#ECE9D8;text-align:center;}.area_toolbar,.area_toolbar table{font:11px sans-serif;}.area_toolbar img{border:0;vertical-align:middle;}.area_toolbar input{margin:0;padding:0;}.area_toolbar select{font-family:'MS Sans Serif',sans-serif,Verdana,Arial;font-size:7pt;font-weight:normal;margin:2px 0 0 0 ;padding:0;vertical-align:top;background-color:#F0F0EE;}table.statusbar{width:100%;}.area_toolbar td.infos{text-align:center;width:130px;border-right:solid 1px #888;border-width:0 1px 0 0;padding:0;}.area_toolbar td.total{text-align:right;width:50px;padding:0;}.area_toolbar td.resize{text-align:right;}.area_toolbar span#resize_area{cursor:nw-resize;visibility:hidden;}.editAreaButtonNormal,.editAreaButtonOver,.editAreaButtonDown,.editAreaSeparator,.editAreaSeparatorLine,.editAreaButtonDisabled,.editAreaButtonSelected {border:0; margin:0; padding:0; background:transparent;margin-top:0;margin-left:1px;padding:0;}.editAreaButtonNormal {border:1px solid #ECE9D8 !important;cursor:pointer;}.editAreaButtonOver {border:1px solid #0A246A !important;cursor:pointer;background-color:#B6BDD2;}.editAreaButtonDown {cursor:pointer;border:1px solid #0A246A !important;background-color:#8592B5;}.editAreaButtonSelected {border:1px solid #C0C0BB !important;cursor:pointer;background-color:#F4F2E8;}.editAreaButtonDisabled {filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);-moz-opacity:0.3;opacity:0.3;border:1px solid #F0F0EE !important;cursor:pointer;}.editAreaSeparatorLine {margin:1px 2px;background-color:#C0C0BB;width:2px;height:18px;}#processing{display:none;background-color:#ECE9D8;border:solid #888 1px;position:absolute;top:0;left:0;width:100%;height:100%;z-index:100;text-align:center;}#processing_text{position:absolute;left:50%;top:50%;width:200px;height:20px;margin-left:-100px;margin-top:-10px;text-align:center;}#tab_browsing_area{display:none;background-color:#CCC9A8;border-top:1px solid #888;text-align:left;margin:0;}#tab_browsing_list {padding:0;margin:0;list-style-type:none;white-space:nowrap;}#tab_browsing_list li {float:left;margin:-1px;}#tab_browsing_list a {position:relative;display:block;text-decoration:none;float:left;cursor:pointer;line-height:14px;}#tab_browsing_list a span {display:block;color:#000;background:#ECE9D8;border:1px solid #888;border-width:1px 1px 0;text-align:center;padding:2px 2px 1px 4px;position:relative;}#tab_browsing_list a b {display:block;border-bottom:2px solid #617994;}#tab_browsing_list a .edited {display:none;}#tab_browsing_list a.edited .edited {display:inline;}#tab_browsing_list a img{margin-left:7px;}#tab_browsing_list a.edited img{margin-left:3px;}#tab_browsing_list a:hover span {background:#F4F2E8;border-color:#0A246A;}#tab_browsing_list .selected a span{background:#046380;color:#FFF;}#no_file_selected{height:100%;width:150%;background:#CCC;display:none;z-index:20;position:absolute;}.non_editable #editor{border-width:0 1px;}.non_editable .area_toolbar{display:none;}#auto_completion_area{background:#FFF;border:solid 1px #888;position:absolute;z-index:15;width:280px;height:180px;overflow:auto;display:none;}#auto_completion_area a,#auto_completion_area a:visited{display:block;padding:0 2px 1px;color:#000;text-decoration:none;}#auto_completion_area a:hover,#auto_completion_area a:focus,#auto_completion_area a.focus{background:#D6E1FE;text-decoration:none;}#auto_completion_area ul{margin:0;padding:0;list-style:none inside;}#auto_completion_area li{padding:0;}#auto_completion_area .prefix{font-style:italic;padding:0 3px;}.info-window {margin-left: 362px; text-align: left; border: thin solid #999999;  padding: 0px; width: 65.5%; z-index: 1000000; background-color: rgb(240, 238, 227); position: fixed; height: 200px; bottom: 31px; display: none;} .info-window tr {padding: 5px; } .info-bar{text-align: left; display: block; text-decoration: none; border-bottom: 1px solid #999999; background: #ECE9D8 url(/images/down-arrow.gif) no-repeat center 5px; overflow: auto; text-indent: 20px; overflow: hidden;} #toolbar_1 span.show {visibility: visible;} a.panel-tab { -webkit-border-radius: 0px 0px 10px 10px; -moz-border-radius: 0px 0px 10px 10px; float: left; margin: 3px; border: 1px solid #999999; position: relative; z-index: 10000001; background-color: #F0EEE3; padding: 4px 8px; text-decoration: none;} a.panel-tab:hover {background-color: #cccccc; } a.panel-tab:focus {outline: none} a.active-panel {margin-top: -1px; border-top: none; } .maximize {border: 2px solid #aaaaaa; width: 10px; height: 8px; position: absolute; margin-top: -14px; right: 5px; text-decoration: none;} .maximize:focus{outline: none} .maximize:hover {background-color: #cccccc;} div.info-win-safari {bottom: 31px;} .info-win-chrome{bottom: 38px;} .win-content {padding: 10px 20px; overflow: auto; height: 150px;} #widgets-pane .widget-icon{float: left;}</style>";
                                                                                                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/edit_area/langs_hr.js                                                         0000777 0000000 0000000 00000003701 12534142432 017705  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["hr"]={
new_document: "Novi dokument",
search_button: "Traži i izmijeni",
search_command: "Traži dalje / Otvori prozor za traženje",
search: "Traži",
replace: "Izmijeni",
replace_command: "Izmijeni / Otvori prozor za traženje",
find_next: "Traži dalje",
replace_all: "Izmjeni sve",
reg_exp: "Regularni izrazi",
match_case: "Bitna vel. slova",
not_found: "nije naðeno.",
occurrence_replaced: "izmjenjenih.",
search_field_empty: "Prazno polje za traženje!",
restart_search_at_begin: "Došao do kraja. Poèeo od poèetka.",
move_popup: "Pomakni prozor",
font_size: "--Velièina teksta--",
go_to_line: "Odi na redak",
go_to_line_prompt: "Odi na redak:",
undo: "Vrati natrag",
redo: "Napravi ponovo",
change_smooth_selection: "Ukljuèi/iskljuèi neke moguænosti prikaza (pametniji prikaz, ali zagušeniji CPU)",
highlight: "Ukljuèi/iskljuèi bojanje sintakse",
reset_highlight: "Ponovi kolorizaciju (ako je nesinkronizirana s tekstom)",
word_wrap: "toggle word wrapping mode",
help: "O edit_area",
save: "Spremi",
load: "Uèitaj",
line_abbr: "Ln",
char_abbr: "Zn",
position: "Pozicija",
total: "Ukupno",
close_popup: "Zatvori prozor",
shortcuts: "Kratice",
add_tab: "Dodaj tabulaciju",
remove_tab: "Makni tabulaciju",
about_notice: "Napomena: koloriziranje sintakse je samo za kratke kodove",
toggle: "Prebaci naèin ureðivanja",
accesskey: "Accesskey",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Procesiram...",
fullscreen: "Cijeli prozor",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                               ./mvappsvr/docroot/db/edit_area/images_autocompletion.gif                                           0000777 0000000 0000000 00000000547 12534142432 022635  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    @|WWW@BBB===̃*ܾgf333ͯYsHSKKKޖJـfff0l[JM݂3$                     ! 8 ,       @pH,,"C6q$1j 4Il&85HsU>T$4, !1I.#
6"J#e!|I	 (1&I QBHC/JWB#8#+*	JA ;                                                                                                                                                         ./mvappsvr/docroot/db/edit_area/images_close.gif                                                    0000777 0000000 0000000 00000000146 12534142432 020673  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    @@@Ȁ            ,       3")ǣ8Z	vIP
~Sr5[Y"`H,ȤrL  ;                                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/edit_area/edit_area_loader.js                                                 0000777 0000000 0000000 00000112133 12534142432 021353  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /******
 *
 *	EditArea 
 * 	Developped by Christophe Dolivet
 *	Released under LGPL, Apache and BSD licenses (use the one you want)
 *
******/

function EditAreaLoader(){
	var t=this;
	t.version= "0.8.1.1";
	date= new Date();
	t.start_time=date.getTime();
	t.win= "loading";	// window loading state
	t.error= false;	// to know if load is interrrupt
	t.baseURL="";
	//t.suffix="";
	t.template="";
	t.lang= {};	// array of loaded speech language
	t.load_syntax= {};	// array of loaded syntax language for highlight mode
	t.syntax= {};	// array of initilized syntax language for highlight mode
	t.loadedFiles= [];
	t.waiting_loading= {}; 	// files that must be loaded in order to allow the script to really start
	// scripts that must be loaded in the iframe
	t.scripts_to_load= ["elements_functions", "resize_area", "reg_syntax"];
	t.sub_scripts_to_load= ["edit_area", "manage_area" ,"edit_area_functions", "keyboard", "search_replace", "highlight", "regexp"];
	
	t.resize= []; // contain resizing datas
	t.hidden= {};	// store datas of the hidden textareas
	
	t.default_settings= {
		//id: "src"	// id of the textarea to transform
		debug: false
		,smooth_selection: true
		,font_size: "10"		// not for IE
		,font_family: "monospace"	// can be "verdana,monospace". Allow non monospace font but Firefox get smaller tabulation with non monospace fonts. IE doesn't change the tabulation width and Opera doesn't take this option into account... 
		,start_highlight: false	// if start with highlight
		,toolbar: "search, go_to_line, fullscreen, |, undo, redo, |, select_font,|, change_smooth_selection, highlight, reset_highlight, word_wrap, |, help"
		,begin_toolbar: ""		//  "new_document, save, load, |"
		,end_toolbar: ""		// or end_toolbar
		,is_multi_files: false		// enable the multi file mode (the textarea content is ignored)
		,allow_resize: "both"	// possible values: "no", "both", "x", "y"
		,show_line_colors: false	// if the highlight is disabled for the line currently beeing edited (if enabled => heavy CPU use)
		,min_width: 400
		,min_height: 125
		,replace_tab_by_spaces: false
		,allow_toggle: true		// true or false
		,language: "en"
		,syntax: ""
		,syntax_selection_allow: "basic,brainfuck,c,coldfusion,cpp,css,html,java,js,pas,perl,php,python,ruby,robotstxt,sql,tsql,vb,xml"
		,display: "onload" 		// onload or later
		,max_undo: 30
		,browsers: "known"	// all or known
		,plugins: "" // comma separated plugin list
		,gecko_spellcheck: false	// enable/disable by default the gecko_spellcheck
		,fullscreen: false
		,is_editable: true
		,cursor_position: "begin"
		,word_wrap: false		// define if the text is wrapped of not in the textarea
		,autocompletion: false	// NOT IMPLEMENTED			
		,load_callback: ""		// click on load button (function name)
		,save_callback: ""		// click on save button (function name)
		,change_callback: ""	// textarea onchange trigger (function name)
		,submit_callback: ""	// form submited (function name)
		,EA_init_callback: ""	// EditArea initiliazed (function name)
		,EA_delete_callback: ""	// EditArea deleted (function name)
		,EA_load_callback: ""	// EditArea fully loaded and displayed (function name)
		,EA_unload_callback: ""	// EditArea delete while being displayed (function name)
		,EA_toggle_on_callback: ""	// EditArea toggled on (function name)
		,EA_toggle_off_callback: ""	// EditArea toggled off (function name)
		,EA_file_switch_on_callback: ""	// a new tab is selected (called for the newly selected file)
		,EA_file_switch_off_callback: ""	// a new tab is selected (called for the previously selected file)
		,EA_file_close_callback: ""		// close a tab
	};
	
	t.advanced_buttons = [
			// id, button img, command (it will try to find the translation of "id"), is_file_specific
			['new_document', 'newdocument.gif', 'new_document', false],
			['search', 'search.gif', 'show_search', false],
			['go_to_line', 'go_to_line.gif', 'go_to_line', false],
			['undo', 'undo.gif', 'undo', true],
			['redo', 'redo.gif', 'redo', true],
			['change_smooth_selection', 'smooth_selection.gif', 'change_smooth_selection_mode', true],
			['reset_highlight', 'reset_highlight.gif', 'resync_highlight', true],
			['highlight', 'highlight.gif','change_highlight', true],
			['help', 'help.gif', 'show_help', false],
			['save', 'save.gif', 'save', false],
			['load', 'load.gif', 'load', false],
			['fullscreen', 'fullscreen.gif', 'toggle_full_screen', false],
			['word_wrap', 'word_wrap.gif', 'toggle_word_wrap', true],
			['autocompletion', 'autocompletion.gif', 'toggle_autocompletion', true]
		];
			
	// navigator identification
	t.set_browser_infos(t);

	if(t.isIE>=6 || t.isGecko || ( t.isWebKit && !t.isSafari<3 ) || t.isOpera>=9  || t.isCamino )
		t.isValidBrowser=true;
	else
		t.isValidBrowser=false;

	t.set_base_url();		
	
	for(var i=0; i<t.scripts_to_load.length; i++){
		setTimeout("editAreaLoader.load_script('"+t.baseURL + t.scripts_to_load[i]+ ".js');", 1);	// let the time to Object editAreaLoader to be created before loading additionnal scripts
		t.waiting_loading[t.scripts_to_load[i]+ ".js"]= false;
	}
	t.add_event(window, "load", EditAreaLoader.prototype.window_loaded);
};
	
EditAreaLoader.prototype ={
	has_error : function(){
		this.error= true;
		// set to empty all EditAreaLoader functions
		for(var i in EditAreaLoader.prototype){
			EditAreaLoader.prototype[i]=function(){};		
		}
	},
	
	// add browser informations to the object passed in parameter
	set_browser_infos : function(o){
		ua= navigator.userAgent;
		
		// general detection
		o.isWebKit	= /WebKit/.test(ua);
		o.isGecko	= !o.isWebKit && /Gecko/.test(ua);
		o.isMac		= /Mac/.test(ua);
		
		o.isIE	= (navigator.appName == "Microsoft Internet Explorer");
		if(o.isIE){
			o.isIE = ua.replace(/^.*?MSIE\s+([0-9\.]+).*$/, "$1");
			if(o.isIE<6)
				o.has_error();
		}

		if(o.isOpera = (ua.indexOf('Opera') != -1)){	
			o.isOpera= ua.replace(/^.*?Opera.*?([0-9\.]+).*$/i, "$1");
			if(o.isOpera<9)
				o.has_error();
			o.isIE=false;			
		}

		if(o.isFirefox =(ua.indexOf('Firefox') != -1))
			o.isFirefox = ua.replace(/^.*?Firefox.*?([0-9\.]+).*$/i, "$1");
		// Firefox clones 	
		if( ua.indexOf('Iceweasel') != -1 )
			o.isFirefox	= ua.replace(/^.*?Iceweasel.*?([0-9\.]+).*$/i, "$1");
		if( ua.indexOf('GranParadiso') != -1 )
			o.isFirefox	= ua.replace(/^.*?GranParadiso.*?([0-9\.]+).*$/i, "$1");
		if( ua.indexOf('BonEcho') != -1 )
			o.isFirefox	= ua.replace(/^.*?BonEcho.*?([0-9\.]+).*$/i, "$1");
		if( ua.indexOf('SeaMonkey') != -1)
			o.isFirefox = (ua.replace(/^.*?SeaMonkey.*?([0-9\.]+).*$/i, "$1") ) + 1;
			
		if(o.isCamino =(ua.indexOf('Camino') != -1))
			o.isCamino = ua.replace(/^.*?Camino.*?([0-9\.]+).*$/i, "$1");
			
		if(o.isSafari =(ua.indexOf('Safari') != -1))
			o.isSafari= ua.replace(/^.*?Version\/([0-9]+\.[0-9]+).*$/i, "$1");
	
		if(o.isChrome =(ua.indexOf('Chrome') != -1)) {
			o.isChrome = ua.replace(/^.*?Chrome.*?([0-9\.]+).*$/i, "$1");
			o.isSafari	= false;
		}
		
	},
	
	window_loaded : function(){
		editAreaLoader.win="loaded";
		
		// add events on forms
		if (document.forms) {
			for (var i=0; i<document.forms.length; i++) {
				var form = document.forms[i];
				form.edit_area_replaced_submit=null;
				try {
					
					form.edit_area_replaced_submit = form.onsubmit;
					form.onsubmit="";
				} catch (e) {// Do nothing
				}
				editAreaLoader.add_event(form, "submit", EditAreaLoader.prototype.submit);
				editAreaLoader.add_event(form, "reset", EditAreaLoader.prototype.reset);
			}
		}
		editAreaLoader.add_event(window, "unload", function(){for(var i in editAreas){editAreaLoader.delete_instance(i);}});	// ini callback
	},
	
	// init the checkup of the selection of the IE textarea
	init_ie_textarea : function(id){
		var a=document.getElementById(id);
		try{
			if(a && typeof(a.focused)=="undefined"){
				a.focus();
				a.focused=true;
				a.selectionStart= a.selectionEnd= 0;			
				get_IE_selection(a);
				editAreaLoader.add_event(a, "focus", IE_textarea_focus);
				editAreaLoader.add_event(a, "blur", IE_textarea_blur);
				
			}
		}catch(ex){}
	},
		
	init : function(settings){
		var t=this,s=settings,i;
		
		if(!s["id"])
			t.has_error();
		if(t.error)
			return;
		// if an instance of the editor already exists for this textarea => delete the previous one
		if(editAreas[s["id"]])
			t.delete_instance(s["id"]);
	
		// init settings
		for(i in t.default_settings){
			if(typeof(s[i])=="undefined")
				s[i]=t.default_settings[i];
		}
		
		if(s["browsers"]=="known" && t.isValidBrowser==false){
			return;
		}
		
		if(s["begin_toolbar"].length>0)
			s["toolbar"]= s["begin_toolbar"] +","+ s["toolbar"];
		if(s["end_toolbar"].length>0)
			s["toolbar"]= s["toolbar"] +","+ s["end_toolbar"];
		s["tab_toolbar"]= s["toolbar"].replace(/ /g,"").split(",");
		
		s["plugins"]= s["plugins"].replace(/ /g,"").split(",");
		for(i=0; i<s["plugins"].length; i++){
			if(s["plugins"][i].length==0)
				s["plugins"].splice(i,1);
		}
	//	alert(settings["plugins"].length+": "+ settings["plugins"].join(","));
		t.get_template();
// ljb		t.load_script(t.baseURL + "langs/"+ s["language"] + ".js");
		t.load_script(t.baseURL + "langs_"+ s["language"] + ".js");
		
		if(s["syntax"].length>0){
			s["syntax"]=s["syntax"].toLowerCase();
// ljb			t.load_script(t.baseURL + "reg_syntax/"+ s["syntax"] + ".js");
			t.load_script(t.baseURL + "reg_syntax_"+ s["syntax"] + ".js");
		}
		//alert(this.template);
		
		editAreas[s["id"]]= {"settings": s};
		editAreas[s["id"]]["displayed"]=false;
		editAreas[s["id"]]["hidden"]=false;
		
		//if(settings["display"]=="onload")
		t.start(s["id"]);
	},
	
	// delete an instance of an EditArea
	delete_instance : function(id){
		var d=document,fs=window.frames,span,iframe;
		editAreaLoader.execCommand(id, "EA_delete");
		if(fs["frame_"+id] && fs["frame_"+id].editArea)
		{
			if(editAreas[id]["displayed"])
				editAreaLoader.toggle(id, "off");
			fs["frame_"+id].editArea.execCommand("EA_unload");
		}

		// remove toggle infos and debug textarea
		span= d.getElementById("EditAreaArroundInfos_"+id);
		if(span)
			span.parentNode.removeChild(span);

		// remove the iframe
		iframe= d.getElementById("frame_"+id);
		if(iframe){
			iframe.parentNode.removeChild(iframe);
			//delete iframe;
			try {
				delete fs["frame_"+id];
			} catch (e) {// Do nothing
			}
		}	

		delete editAreas[id];
	},

	
	start : function(id){
		var t=this,d=document,f,span,father,next,html='',html_toolbar_content='',template,content,i;
		
		// check that the window is loaded
		if(t.win!="loaded"){
			setTimeout("editAreaLoader.start('"+id+"');", 50);
			return;
		}
		
		// check that all needed scripts are loaded
		for( i in t.waiting_loading){
			if(t.waiting_loading[i]!="loaded" && typeof(t.waiting_loading[i])!="function"){
				setTimeout("editAreaLoader.start('"+id+"');", 50);
				return;
			}
		}
		
		// wait until language and syntax files are loaded
		if(!t.lang[editAreas[id]["settings"]["language"]] || (editAreas[id]["settings"]["syntax"].length>0 && !t.load_syntax[editAreas[id]["settings"]["syntax"]]) ){
			setTimeout("editAreaLoader.start('"+id+"');", 50);
			return;
		}
		// init the regexp for syntax highlight
		if(editAreas[id]["settings"]["syntax"].length>0)
			t.init_syntax_regexp();
		
			
		// display toggle option and debug area
		if(!d.getElementById("EditAreaArroundInfos_"+id) && (editAreas[id]["settings"]["debug"] || editAreas[id]["settings"]["allow_toggle"]))
		{
			span= d.createElement("span");
			span.id= "EditAreaArroundInfos_"+id;
			if(editAreas[id]["settings"]["allow_toggle"]){
				checked=(editAreas[id]["settings"]["display"]=="onload")?"checked='checked'":"";
				html+="<div id='edit_area_toggle_"+i+"'>";
				html+="<input id='edit_area_toggle_checkbox_"+ id +"' class='toggle_"+ id +"' type='checkbox' onclick='editAreaLoader.toggle(\""+ id +"\");' accesskey='e' "+checked+" />";
				html+="<label for='edit_area_toggle_checkbox_"+ id +"'>{$toggle}</label></div>";	
			}
			if(editAreas[id]["settings"]["debug"])
				html+="<textarea id='edit_area_debug_"+ id +"' spellcheck='off' style='z-index: 20; width: 100%; height: 120px;overflow: auto; border: solid black 1px;'></textarea><br />";				
			html= t.translate(html, editAreas[id]["settings"]["language"]);				
			span.innerHTML= html;				
			father= d.getElementById(id).parentNode;
			next= d.getElementById(id).nextSibling;
			if(next==null)
				father.appendChild(span);
			else
				father.insertBefore(span, next);
		}
		
		if(!editAreas[id]["initialized"])
		{
			t.execCommand(id, "EA_init");	// ini callback
			if(editAreas[id]["settings"]["display"]=="later"){
				editAreas[id]["initialized"]= true;
				return;
			}
		}
		
		if(t.isIE){	// launch IE selection checkup
			t.init_ie_textarea(id);
		}
				
		// get toolbar content
		area=editAreas[id];
		
		for(i=0; i<area["settings"]["tab_toolbar"].length; i++){
		//	alert(this.tab_toolbar[i]+"\n"+ this.get_control_html(this.tab_toolbar[i]));
			html_toolbar_content+= t.get_control_html(area["settings"]["tab_toolbar"][i], area["settings"]["language"]);
		}
		// translate toolbar text here for chrome 2
		html_toolbar_content = t.translate(html_toolbar_content, area["settings"]["language"], "template"); 
		
		
		// create javascript import rules for the iframe if the javascript has not been already loaded by the compressor
		if(!t.iframe_script){
			t.iframe_script="";
			for(i=0; i<t.sub_scripts_to_load.length; i++)
				t.iframe_script+='<script language="javascript" type="text/javascript" src="'+ t.baseURL + t.sub_scripts_to_load[i] +'.js"></script>';
		}
		
		// add plugins scripts if not already loaded by the compressor (but need to load language in all the case)
		for(i=0; i<area["settings"]["plugins"].length; i++){
			//if(typeof(area["settings"]["plugins"][i])=="function") continue;
			if(!t.all_plugins_loaded)
				t.iframe_script+='<script language="javascript" type="text/javascript" src="'+ t.baseURL + 'plugins/' + area["settings"]["plugins"][i] + '/' + area["settings"]["plugins"][i] +'.js"></script>';
			t.iframe_script+='<script language="javascript" type="text/javascript" src="'+ t.baseURL + 'plugins/' + area["settings"]["plugins"][i] + '/langs/' + area["settings"]["language"] +'.js"></script>';
		}
	
		
		// create css link for the iframe if the whole css text has not been already loaded by the compressor
		if(!t.iframe_css){
			t.iframe_css="<link href='"+ t.baseURL +"edit_area.css' rel='stylesheet' type='text/css' />";
		}
		
		
		// create template
		template= t.template.replace(/\[__BASEURL__\]/g, t.baseURL);
		template= template.replace("[__TOOLBAR__]",html_toolbar_content);
			
		
		// fill template with good language sentences
		template= t.translate(template, area["settings"]["language"], "template");
		
		// add css_code
		template= template.replace("[__CSSRULES__]", t.iframe_css);				
		// add js_code
		template= template.replace("[__JSCODE__]", t.iframe_script);
		
		// add version_code
		template= template.replace("[__EA_VERSION__]", t.version);
		//template=template.replace(/\{\$([^\}]+)\}/gm, this.traduc_template);
		
		//editAreas[area["settings"]["id"]]["template"]= template;
		
		area.textarea=d.getElementById(area["settings"]["id"]);
		editAreas[area["settings"]["id"]]["textarea"]=area.textarea;
	
		// if removing previous instances from DOM before (fix from Marcin)
		if(typeof(window.frames["frame_"+area["settings"]["id"]])!='undefined') 
			delete window.frames["frame_"+area["settings"]["id"]];
		
		// insert template in the document after the textarea
		father= area.textarea.parentNode;
	/*	var container= document.createElement("div");
		container.id= "EditArea_frame_container_"+area["settings"]["id"];
	*/	
		content= d.createElement("iframe");
		content.name= "frame_"+area["settings"]["id"];
		content.id= "frame_"+area["settings"]["id"];
		content.style.borderWidth= "0px";
		setAttribute(content, "frameBorder", "0"); // IE
		content.style.overflow="hidden";
		content.style.display="none";

		
		next= area.textarea.nextSibling;
		if(next==null)
			father.appendChild(content);
		else
			father.insertBefore(content, next) ;		
		f=window.frames["frame_"+area["settings"]["id"]];
		f.document.open();
		f.editAreas=editAreas;
		f.area_id= area["settings"]["id"];	
		f.document.area_id= area["settings"]["id"];	
		f.document.write(template);
		f.document.close();

	//	frame.editAreaLoader=this;
		//editAreas[area["settings"]["id"]]["displayed"]=true;
		
	},
	
	toggle : function(id, toggle_to){

	/*	if((editAreas[id]["displayed"]==true  && toggle_to!="on") || toggle_to=="off"){
			this.toggle_off(id);
		}else if((editAreas[id]["displayed"]==false  && toggle_to!="off") || toggle_to=="on"){
			this.toggle_on(id);
		}*/
		if(!toggle_to)
			toggle_to= (editAreas[id]["displayed"]==true)?"off":"on";
		if(editAreas[id]["displayed"]==true  && toggle_to=="off"){
			this.toggle_off(id);
		}else if(editAreas[id]["displayed"]==false  && toggle_to=="on"){
			this.toggle_on(id);
		}
	
		return false;
	},
	
	// static function
	toggle_off : function(id){
		var fs=window.frames,f,t,parNod,nxtSib,selStart,selEnd,scrollTop,scrollLeft;
		if(fs["frame_"+id])
		{	
			f	= fs["frame_"+id];
			t	= editAreas[id]["textarea"];
			if(f.editArea.fullscreen['isFull'])
				f.editArea.toggle_full_screen(false);
			editAreas[id]["displayed"]=false;
			
			// set wrap to off to keep same display mode (some browser get problem with this, so it need more complex operation		
			t.wrap = "off";	// for IE
			setAttribute(t, "wrap", "off");	// for Firefox	
			parNod = t.parentNode;
			nxtSib = t.nextSibling;
			parNod.removeChild(t); 
			parNod.insertBefore(t, nxtSib);
			
			// restore values
			t.value= f.editArea.textarea.value;
			selStart	= f.editArea.last_selection["selectionStart"];
			selEnd		= f.editArea.last_selection["selectionEnd"];
			scrollTop	= f.document.getElementById("result").scrollTop;
			scrollLeft	= f.document.getElementById("result").scrollLeft;
			
			
			document.getElementById("frame_"+id).style.display='none';
		
			t.style.display="inline";

			try{	// IE will give an error when trying to focus an invisible or disabled textarea
				t.focus();
			} catch(e){};
			if(this.isIE){
				t.selectionStart= selStart;
				t.selectionEnd	= selEnd;
				t.focused		= true;
				set_IE_selection(t);
			}else{
				if(this.isOpera && this.isOpera < 9.6 ){	// Opera bug when moving selection start and selection end
					t.setSelectionRange(0, 0);
				}
				try{
					t.setSelectionRange(selStart, selEnd);
				} catch(e) {};
			}
			t.scrollTop= scrollTop;
			t.scrollLeft= scrollLeft;
			f.editArea.execCommand("toggle_off");

		}
	},	
	
	// static function
	toggle_on : function(id){
		var fs=window.frames,f,t,selStart=0,selEnd=0,scrollTop=0,scrollLeft=0,curPos,elem;
			
		if(fs["frame_"+id])
		{
			f	= fs["frame_"+id];
			t	= editAreas[id]["textarea"];
			area= f.editArea;
			area.textarea.value= t.value;
			
			// store display values;
			curPos	= editAreas[id]["settings"]["cursor_position"];

			if(t.use_last==true)
			{
				selStart	= t.last_selectionStart;
				selEnd		= t.last_selectionEnd;
				scrollTop	= t.last_scrollTop;
				scrollLeft	= t.last_scrollLeft;
				t.use_last=false;
			}
			else if( curPos == "auto" )
			{
				try{
					selStart	= t.selectionStart;
					selEnd		= t.selectionEnd;
					scrollTop	= t.scrollTop;
					scrollLeft	= t.scrollLeft;
					//alert(scrollTop);
				}catch(ex){}
			}
			
			// set to good size
			this.set_editarea_size_from_textarea(id, document.getElementById("frame_"+id));
			t.style.display="none";			
			document.getElementById("frame_"+id).style.display="inline";
			area.execCommand("focus"); // without this focus opera doesn't manage well the iframe body height
			
			
			// restore display values
			editAreas[id]["displayed"]=true;
			area.execCommand("update_size");
			
			f.document.getElementById("result").scrollTop= scrollTop;
			f.document.getElementById("result").scrollLeft= scrollLeft;
			area.area_select(selStart, selEnd-selStart);
			area.execCommand("toggle_on");

			
		}
		else
		{
		/*	if(this.isIE)
				get_IE_selection(document.getElementById(id));	*/	
			elem= document.getElementById(id);	
			elem.last_selectionStart= elem.selectionStart;
			elem.last_selectionEnd= elem.selectionEnd;
			elem.last_scrollTop= elem.scrollTop;
			elem.last_scrollLeft= elem.scrollLeft;
			elem.use_last=true;
			editAreaLoader.start(id);
		}
	},	
	
	set_editarea_size_from_textarea : function(id, frame){	
		var elem,width,height;
		elem	= document.getElementById(id);
		
		width	= Math.max(editAreas[id]["settings"]["min_width"], elem.offsetWidth)+"px";
		height	= Math.max(editAreas[id]["settings"]["min_height"], elem.offsetHeight)+"px";
		if(elem.style.width.indexOf("%")!=-1)
			width	= elem.style.width;
		if(elem.style.height.indexOf("%")!=-1)
			height	= elem.style.height;
		//alert("h: "+height+" w: "+width);
	
		frame.style.width= width;
		frame.style.height= height;
	},
		
	set_base_url : function(){
		var t=this,elems,i,docBasePath;

		if( !this.baseURL ){
			elems = document.getElementsByTagName('script');
	
			for( i=0; i<elems.length; i++ ){
				if (elems[i].src && elems[i].src.match(/edit_area_[^\\\/]*$/i) ) {
					var src = elems[i].src;
					src = src.substring(0, src.lastIndexOf('/'));
					this.baseURL = src;
					this.file_name= elems[i].src.substr(elems[i].src.lastIndexOf("/")+1);
					break;
				}
			}
		}
		
		docBasePath	= document.location.href;
		if (docBasePath.indexOf('?') != -1)
			docBasePath	= docBasePath.substring(0, docBasePath.indexOf('?'));
		docBasePath	= docBasePath.substring(0, docBasePath.lastIndexOf('/'));
	
		// If not HTTP absolute
		if (t.baseURL.indexOf('://') == -1 && t.baseURL.charAt(0) != '/') {
			// If site absolute
			t.baseURL = docBasePath + "/" + t.baseURL;
		}
		t.baseURL	+="/";	
	},
	
	get_button_html : function(id, img, exec, isFileSpecific, baseURL) {
		var cmd,html;
		if(!baseURL)
			baseURL= this.baseURL;
		cmd	= 'editArea.execCommand(\'' + exec + '\')';
		html	= '<a id="a_'+ id +'" href="javascript:' + cmd + '" onclick="' + cmd + ';return false;" onmousedown="return false;" target="_self" fileSpecific="'+ (isFileSpecific?'yes':'no') +'">';
// ljb		html	+= '<img id="' + id + '" src="'+ baseURL +'images/' + img + '" title="{$' + id + '}" width="20" height="20" class="editAreaButtonNormal" onmouseover="editArea.switchClass(this,\'editAreaButtonOver\');" onmouseout="editArea.restoreClass(this);" onmousedown="editArea.restoreAndSwitchClass(this,\'editAreaButtonDown\');" /></a>';
		html	+= '<img id="' + id + '" src="'+ baseURL +'images_' + img + '" title="{$' + id + '}" width="20" height="20" class="editAreaButtonNormal" onmouseover="editArea.switchClass(this,\'editAreaButtonOver\');" onmouseout="editArea.restoreClass(this);" onmousedown="editArea.restoreAndSwitchClass(this,\'editAreaButtonDown\');" /></a>';
		return html;
	},

	get_control_html : function(button_name, lang) {		
		var t=this,i,but,html,si;
		for (i=0; i<t.advanced_buttons.length; i++)
		{
			but = t.advanced_buttons[i];			
			if (but[0] == button_name)
			{
				return t.get_button_html(but[0], but[1], but[2], but[3]);
			}	
		}		
				
		switch (button_name){
			case "*":
			case "return":
				return "<br />";
			case "|":
		  	case "separator":
// ljb				return '<img src="'+ t.baseURL +'images/spacer.gif" width="1" height="15" class="editAreaSeparatorLine">';
				return '<img src="'+ t.baseURL +'images_spacer.gif" width="1" height="15" class="editAreaSeparatorLine">';
			case "select_font":
				html= "<select id='area_font_size' onchange='javascript:editArea.execCommand(\"change_font_size\")' fileSpecific='yes'>";
				html+="<option value='-1'>{$font_size}</option>";
				si=[8,9,10,11,12,14];
				for( i=0;i<si.length;i++){
					html+="<option value='"+si[i]+"'>"+si[i]+" pt</option>";
				}
				html+="</select>";
				return html;
			case "syntax_selection":
				html= "<select id='syntax_selection' onchange='javascript:editArea.execCommand(\"change_syntax\", this.value)' fileSpecific='yes'>";
				html+="<option value='-1'>{$syntax_selection}</option>";
				html+="</select>";
				return html;
		}
		
		return "<span id='tmp_tool_"+button_name+"'>["+button_name+"]</span>";		
	},
	
	
	get_template : function(){
		if(this.template=="")
		{
			var xhr_object = null; 
			if(window.XMLHttpRequest) // Firefox 
				xhr_object = new XMLHttpRequest(); 
			else if(window.ActiveXObject) // Internet Explorer 
				xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
			else { // XMLHttpRequest not supported
				alert("XMLHTTPRequest not supported. EditArea not loaded"); 
				return; 
			} 
			 
			xhr_object.open("GET", this.baseURL+"template.html", false); 
			xhr_object.send(null); 
			if(xhr_object.readyState == 4) 
				this.template=xhr_object.responseText;
			else
				this.has_error();
		}
	},
	
	// translate text
	translate : function(text, lang, mode){
		if(mode=="word")
			text=editAreaLoader.get_word_translation(text, lang);
		else if(mode="template"){
			editAreaLoader.current_language= lang;
			text=text.replace(/\{\$([^\}]+)\}/gm, editAreaLoader.translate_template);
		}
		return text;
	},
	
	translate_template : function(){
		return editAreaLoader.get_word_translation(EditAreaLoader.prototype.translate_template.arguments[1], editAreaLoader.current_language);
	},
	
	get_word_translation : function(val, lang){
		var i;
		
		for( i in editAreaLoader.lang[lang]){
			if(i == val)
				return editAreaLoader.lang[lang][i];
		}
		return "_"+val;
	},
	
	load_script : function(url){
		var t=this,d=document,script,head;
		
		if( t.loadedFiles[url] )
			return;	
		//alert("load: "+url);
		try{
			script= d.createElement("script");
			script.type= "text/javascript";
			script.src= url;
			script.charset= "UTF-8";
			d.getElementsByTagName("head")[0].appendChild(script);
		}catch(e){
			d.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '" charset="UTF-8"></sc'+'ript>');
		}
		
		t.loadedFiles[url] = true;
	},
	
	add_event : function(obj, name, handler) {
		try{
			if (obj.attachEvent) {
				obj.attachEvent("on" + name, handler);
			} else{
				obj.addEventListener(name, handler, false);
			}
		}catch(e){}
	},
	
	remove_event : function(obj, name, handler){
		try{
			if (obj.detachEvent)
				obj.detachEvent("on" + name, handler);
			else
				obj.removeEventListener(name, handler, false);
		}catch(e){}
	},


	// reset all the editareas in the form that have been reseted
	reset : function(e){
		var formObj,is_child,i,x;
		
		formObj = editAreaLoader.isIE ? window.event.srcElement : e.target;
		if(formObj.tagName!='FORM')
			formObj= formObj.form;
		
		for( i in editAreas ){			
			is_child= false;
			for( x=0;x<formObj.elements.length;x++ ) {
				if(formObj.elements[x].id == i)
					is_child=true;
			}
			
			if(window.frames["frame_"+i] && is_child && editAreas[i]["displayed"]==true){
			
				var exec= 'window.frames["frame_'+ i +'"].editArea.textarea.value= document.getElementById("'+ i +'").value;';
				exec+= 'window.frames["frame_'+ i +'"].editArea.execCommand("focus");';
				exec+= 'window.frames["frame_'+ i +'"].editArea.check_line_selection();';
				exec+= 'window.frames["frame_'+ i +'"].editArea.execCommand("reset");';
				window.setTimeout(exec, 10);
			}
		}		
		return;
	},
	
	
	// prepare all the textarea replaced by an editarea to be submited
	submit : function(e){		
		var formObj,is_child,fs=window.frames,i,x;
		formObj = editAreaLoader.isIE ? window.event.srcElement : e.target;
		if(formObj.tagName!='FORM')
			formObj= formObj.form;
		
		for( i in editAreas){
			is_child= false;
			for( x=0;x<formObj.elements.length;x++ ) {
				if(formObj.elements[x].id == i)
					is_child=true;
			}
		
			if(is_child)
			{
				if(fs["frame_"+i] && editAreas[i]["displayed"]==true)
					document.getElementById(i).value= fs["frame_"+ i].editArea.textarea.value;
				editAreaLoader.execCommand(i,"EA_submit");
			}
		}				
		if( typeof(formObj.edit_area_replaced_submit) == "function" ){
			res= formObj.edit_area_replaced_submit();
			if(res==false){
				if(editAreaLoader.isIE)
					return false;
				else
					e.preventDefault();
			}
		}
		return;
	},
	
	// allow to get the value of the editarea
	getValue : function(id){
        if(window.frames["frame_"+id] && editAreas[id]["displayed"]==true){
            return window.frames["frame_"+ id].editArea.textarea.value;       
        }else if(elem=document.getElementById(id)){
        	return elem.value;
        }
        return false;
    },
    
    // allow to set the value of the editarea
    setValue : function(id, new_val){
    	var fs=window.frames;
    	
        if( ( f=fs["frame_"+id] ) && editAreas[id]["displayed"]==true){
			f.editArea.textarea.value= new_val;     
			f.editArea.execCommand("focus"); 
			f.editArea.check_line_selection(false);  
			f.editArea.execCommand("onchange");
        }else if(elem=document.getElementById(id)){
        	elem.value= new_val;
        }
    },
	    
    // allow to get infos on the selection: array(start, end)
    getSelectionRange : function(id){
    	var sel,eA,fs=window.frames;
    	
    	sel= {"start": 0, "end": 0};
        if(fs["frame_"+id] && editAreas[id]["displayed"]==true){
        	eA= fs["frame_"+ id].editArea;

			sel["start"]	= eA.textarea.selectionStart;
			sel["end"]		= eA.textarea.selectionEnd;
		
        }else if( elem=document.getElementById(id) ){
        	sel= getSelectionRange(elem);
        }
        return sel;
    },
    
    // allow to set the selection with the given start and end positions
    setSelectionRange : function(id, new_start, new_end){
    	var fs=window.frames;
    	
        if(fs["frame_"+id] && editAreas[id]["displayed"]==true){
            fs["frame_"+ id].editArea.area_select(new_start, new_end-new_start);  
			// make an auto-scroll to the selection
			if(!this.isIE){
				fs["frame_"+ id].editArea.check_line_selection(false); 
				fs["frame_"+ id].editArea.scroll_to_view();
			}   
        }else if(elem=document.getElementById(id)){
        	setSelectionRange(elem, new_start, new_end);
        }
    },
    
    getSelectedText : function(id){
    	var sel= this.getSelectionRange(id);
    	
        return this.getValue(id).substring(sel["start"], sel["end"]);
    },
	
	setSelectedText : function(id, new_val){
		var fs=window.frames,d=document,sel,text,scrollTop,scrollLeft,new_sel_end;
		
		new_val	= new_val.replace(/\r/g, ""); 
		sel		= this.getSelectionRange(id);
		text	= this.getValue(id);
		if(fs["frame_"+id] && editAreas[id]["displayed"]==true){
			scrollTop	= fs["frame_"+ id].document.getElementById("result").scrollTop;
			scrollLeft	= fs["frame_"+ id].document.getElementById("result").scrollLeft;
		}else{
			scrollTop	= d.getElementById(id).scrollTop;
			scrollLeft	= d.getElementById(id).scrollLeft;
		}
		
		text	= text.substring(0, sel["start"])+ new_val +text.substring(sel["end"]);
		this.setValue(id, text);
		new_sel_end	= sel["start"]+ new_val.length;
		this.setSelectionRange(id, sel["start"], new_sel_end);
		
		
		// fix \r problem for selection length count on IE & Opera
		if(new_val != this.getSelectedText(id).replace(/\r/g, "")){
			this.setSelectionRange(id, sel["start"], new_sel_end+ new_val.split("\n").length -1);
		}
		// restore scrolling position
		if(fs["frame_"+id] && editAreas[id]["displayed"]==true){
			fs["frame_"+ id].document.getElementById("result").scrollTop= scrollTop;
			fs["frame_"+ id].document.getElementById("result").scrollLeft= scrollLeft;
			fs["frame_"+ id].editArea.execCommand("onchange");
		}else{
			d.getElementById(id).scrollTop= scrollTop;
			d.getElementById(id).scrollLeft= scrollLeft;
		}
    },
    
    insertTags : function(id, open_tag, close_tag){
    	var old_sel,new_sel;
    	
    	old_sel	= this.getSelectionRange(id);
    	text	= open_tag + this.getSelectedText(id) + close_tag;
    	 
		editAreaLoader.setSelectedText(id, text);
		
    	new_sel	= this.getSelectionRange(id);
    	if(old_sel["end"] > old_sel["start"])	// if text was selected, cursor at the end
    		this.setSelectionRange(id, new_sel["end"], new_sel["end"]);
    	else // cursor in the middle
    		this.setSelectionRange(id, old_sel["start"]+open_tag.length, old_sel["start"]+open_tag.length);
    },
    
    // hide both EditArea and normal textarea
	hide : function(id){
		var fs= window.frames,d=document,t=this,scrollTop,scrollLeft,span;
		if(d.getElementById(id) && !t.hidden[id])
		{
			t.hidden[id]= {};
			t.hidden[id]["selectionRange"]= t.getSelectionRange(id);
			if(d.getElementById(id).style.display!="none")
			{
				t.hidden[id]["scrollTop"]= d.getElementById(id).scrollTop;
				t.hidden[id]["scrollLeft"]= d.getElementById(id).scrollLeft;
			}
					
			if(fs["frame_"+id])
			{
				t.hidden[id]["toggle"]= editAreas[id]["displayed"];
				
				if(fs["frame_"+id] && editAreas[id]["displayed"]==true){
					scrollTop	= fs["frame_"+ id].document.getElementById("result").scrollTop;
					scrollLeft	= fs["frame_"+ id].document.getElementById("result").scrollLeft;
				}else{
					scrollTop	= d.getElementById(id).scrollTop;
					scrollLeft	= d.getElementById(id).scrollLeft;
				}
				t.hidden[id]["scrollTop"]= scrollTop;
				t.hidden[id]["scrollLeft"]= scrollLeft;
				
				if(editAreas[id]["displayed"]==true)
					editAreaLoader.toggle_off(id);
			}
			
			// hide toggle button and debug box
			span= d.getElementById("EditAreaArroundInfos_"+id);
			if(span){
				span.style.display='none';
			}
			
			// hide textarea
			d.getElementById(id).style.display= "none";
		}
	},
	
	// restore hidden EditArea and normal textarea
	show : function(id){
		var fs= window.frames,d=document,t=this,span;
		if((elem=d.getElementById(id)) && t.hidden[id])
		{
			elem.style.display= "inline";
			elem.scrollTop= t.hidden[id]["scrollTop"];
			elem.scrollLeft= t.hidden[id]["scrollLeft"];
			span= d.getElementById("EditAreaArroundInfos_"+id);
			if(span){
				span.style.display='inline';
			}
			
			if(fs["frame_"+id])
			{
								
				// restore toggle button and debug box
			
				
				// restore textarea
				elem.style.display= "inline";
				
				// restore EditArea
				if(t.hidden[id]["toggle"]==true)
					editAreaLoader.toggle_on(id);
				
				scrollTop	= t.hidden[id]["scrollTop"];
				scrollLeft	= t.hidden[id]["scrollLeft"];
				
				if(fs["frame_"+id] && editAreas[id]["displayed"]==true){
					fs["frame_"+ id].document.getElementById("result").scrollTop	= scrollTop;
					fs["frame_"+ id].document.getElementById("result").scrollLeft	= scrollLeft;
				}else{
					elem.scrollTop	= scrollTop;
					elem.scrollLeft	= scrollLeft;
				}
			
			}
			// restore selection
			sel	= t.hidden[id]["selectionRange"];
			t.setSelectionRange(id, sel["start"], sel["end"]);
			delete t.hidden[id];	
		}
	},
	
	// get the current file datas (for multi file editing mode)
	getCurrentFile : function(id){
		return this.execCommand(id, 'get_file', this.execCommand(id, 'curr_file'));
	},
	
	// get the given file datas (for multi file editing mode)
	getFile : function(id, file_id){
		return this.execCommand(id, 'get_file', file_id);
	},
	
	// get all the openned files datas (for multi file editing mode)
	getAllFiles : function(id){
		return this.execCommand(id, 'get_all_files()');
	},
	
	// open a file (for multi file editing mode)
	openFile : function(id, file_infos){
		return this.execCommand(id, 'open_file', file_infos);
	},
	
	// close the given file (for multi file editing mode)
	closeFile : function(id, file_id){
		return this.execCommand(id, 'close_file', file_id);
	},
	
	// close the given file (for multi file editing mode)
	setFileEditedMode : function(id, file_id, to){
		var reg1,reg2;
		reg1	= new RegExp('\\\\', 'g');
		reg2	= new RegExp('"', 'g');
		return this.execCommand(id, 'set_file_edited_mode("'+ file_id.replace(reg1, '\\\\').replace(reg2, '\\"') +'", '+ to +')');
	},
	
	
	// allow to access to editarea functions and datas (for advanced users only)
	execCommand : function(id, cmd, fct_param){
		switch(cmd){
			case "EA_init":
				if(editAreas[id]['settings']["EA_init_callback"].length>0)
					eval(editAreas[id]['settings']["EA_init_callback"]+"('"+ id +"');");
				break;
			case "EA_delete":
				if(editAreas[id]['settings']["EA_delete_callback"].length>0)
					eval(editAreas[id]['settings']["EA_delete_callback"]+"('"+ id +"');");
				break;
			case "EA_submit":
				if(editAreas[id]['settings']["submit_callback"].length>0)
					eval(editAreas[id]['settings']["submit_callback"]+"('"+ id +"');");
				break;
		}
        if(window.frames["frame_"+id] && window.frames["frame_"+ id].editArea){
			if(fct_param!=undefined)
				return eval('window.frames["frame_'+ id +'"].editArea.'+ cmd +'(fct_param);');
			else
				return eval('window.frames["frame_'+ id +'"].editArea.'+ cmd +';');       
        }
        return false;
    }
};
	
	var editAreaLoader= new EditAreaLoader();
	var editAreas= {};

                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/edit_area/images_help.gif                                                     0000777 0000000 0000000 00000000447 12534142432 020522  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   O^u"Zr9ZBzrýP5nSVMp_ܑ̰"X"g   !   ,       'dihHY_fUNTFfD"TX$b1pLJ%px$GaIt%qH d8&bmz^ ~%u
 & &  '}(Q*44! ;                                                                                                                                                                                                                         ./mvappsvr/docroot/db/edit_area/images_save.gif                                                     0000777 0000000 0000000 00000000435 12534142432 020525  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   NX2:R
BFHzr֦RRRrz-:?UU"Brbcbn*BBJB:RZr*J   !   ,       'dihM`bFb.<\CA`	03'$1hgZ)XAtED< V%.56?~$	0?& %#f@+! ;                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/langs_ja.js                                                         0000777 0000000 0000000 00000004173 12534142432 017672  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["ja"]={
new_document: "新規作成",
search_button: "検索・置換",
search_command: "次を検索 / 検索窓を表示",
search: "検索",
replace: "置換",
replace_command: "置換 / 置換窓を表示",
find_next: "次を検索",
replace_all: "全置換",
reg_exp: "正規表現",
match_case: "大文字小文字の区別",
not_found: "見つかりません。",
occurrence_replaced: "置換しました。",
search_field_empty: "検索対象文字列が空です。",
restart_search_at_begin: "終端に達しました、始めに戻ります",
move_popup: "検索窓を移動",
font_size: "--フォントサイズ--",
go_to_line: "指定行へ移動",
go_to_line_prompt: "指定行へ移動します:",
undo: "元に戻す",
redo: "やり直し",
change_smooth_selection: "スムース表示の切り替え（CPUを使います）",
highlight: "構文強調表示の切り替え",
reset_highlight: "構文強調表示のリセット",
word_wrap: "toggle word wrapping mode",
help: "ヘルプを表示",
save: "保存",
load: "読み込み",
line_abbr: "行",
char_abbr: "文字",
position: "位置",
total: "合計",
close_popup: "ポップアップを閉じる",
shortcuts: "ショートカット",
add_tab: "タブを挿入する",
remove_tab: "タブを削除する",
about_notice: "注意：構文強調表示は短いテキストでしか有効に機能しません。",
toggle: "テキストエリアとeditAreaの切り替え",
accesskey: "アクセスキー",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "処理中です...",
fullscreen: "fullscreen",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/edit_area/license_apache.txt                                                  0000777 0000000 0000000 00000001061 12534142432 021233  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   Copyright 2008 Christophe Dolivet

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

	http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/edit_area/langs_it.js                                                         0000777 0000000 0000000 00000004101 12534142432 017703  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["it"]={
new_document: "nuovo documento vuoto",
search_button: "cerca e sostituisci",
search_command: "trova successivo / apri finestra di ricerca",
search: "cerca",
replace: "sostituisci",
replace_command: "sostituisci / apri finestra di ricerca",
find_next: "trova successivo",
replace_all: "sostituisci tutti",
reg_exp: "espressioni regolari",
match_case: "confronta maiuscole/minuscole<br />",
not_found: "non trovato.",
occurrence_replaced: "occorrenze sostituite.",
search_field_empty: "Campo ricerca vuoto",
restart_search_at_begin: "Fine del testo raggiunta. Ricomincio dall'inizio.",
move_popup: "sposta popup di ricerca",
font_size: "-- Dimensione --",
go_to_line: "vai alla linea",
go_to_line_prompt: "vai alla linea numero:",
undo: "annulla",
redo: "ripeti",
change_smooth_selection: "abilita/disabilita alcune caratteristiche della visualizzazione",
highlight: "abilita/disabilita colorazione della sintassi",
reset_highlight: "aggiorna colorazione (se non sincronizzata)",
word_wrap: "toggle word wrapping mode",
help: "informazioni su...",
save: "salva",
load: "carica",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Posizione",
total: "Totale",
close_popup: "chiudi popup",
shortcuts: "Scorciatoie",
add_tab: "aggiungi tabulazione",
remove_tab: "rimuovi tabulazione",
about_notice: "Avviso: la colorazione della sintassi vale solo con testo piccolo",
toggle: "Abilita/disabilita editor",
accesskey: "Accesskey",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "In corso...",
fullscreen: "fullscreen",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/edit_area/plugins/                                                            0000777 0000000 0000000 00000000000 12534142432 017227  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/plugins/test/                                                       0000777 0000000 0000000 00000000000 12534142432 020206  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/plugins/test/langs/                                                 0000777 0000000 0000000 00000000000 12534434113 021312  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/plugins/test/langs/pl.js                                            0000777 0000000 0000000 00000000116 12534142432 022264  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("pl",{
test_select: "wybierz tag",
test_but: "test"
});
                                                                                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/edit_area/plugins/test/langs/de.js                                            0000777 0000000 0000000 00000000134 12534142432 022241  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("de",{
test_select: "Tag ausw&auml;hlen",
test_but: "Test Button"
});
                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/edit_area/plugins/test/langs/dk.js                                            0000777 0000000 0000000 00000000124 12534142432 022246  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("dk",{
test_select: "select tag",
test_but: "test button"
});
                                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/edit_area/plugins/test/langs/cs.js                                            0000777 0000000 0000000 00000000124 12534142432 022255  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("cs",{
test_select: "select tag",
test_but: "test button"
});
                                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/edit_area/plugins/test/langs/fr.js                                            0000777 0000000 0000000 00000000130 12534142432 022254  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("fr",{
test_select:"choix balise",
test_but: "bouton de test"
});
                                                                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/edit_area/plugins/test/langs/hr.js                                            0000777 0000000 0000000 00000000126 12534142432 022263  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("hr",{
test_select: "Odaberi tag",
test_but: "Probna tipka"
});
                                                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/edit_area/plugins/test/langs/ru.js                                            0000777 0000000 0000000 00000000167 12534142432 022305  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("ru",{
test_select: "выбрать тэг",
test_but: "тестировать кнопку"
});
                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/edit_area/plugins/test/langs/nl.js                                            0000777 0000000 0000000 00000000124 12534142432 022261  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("nl",{
test_select: "select tag",
test_but: "test button"
});
                                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/edit_area/plugins/test/langs/en.js                                            0000777 0000000 0000000 00000000124 12534142432 022252  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("en",{
test_select: "select tag",
test_but: "test button"
});
                                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/edit_area/plugins/test/langs/ja.js                                            0000777 0000000 0000000 00000000124 12534142432 022242  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("ja",{
test_select: "select tag",
test_but: "test button"
});
                                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/edit_area/plugins/test/langs/mk.js                                            0000777 0000000 0000000 00000000124 12534142432 022257  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("mk",{
test_select: "select tag",
test_but: "test button"
});
                                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/edit_area/plugins/test/langs/pt.js                                            0000777 0000000 0000000 00000000124 12534142432 022273  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("pt",{
test_select: "select tag",
test_but: "test button"
});
                                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/edit_area/plugins/test/langs/bg.js                                            0000777 0000000 0000000 00000000364 12534142432 022246  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
 *	Bulgarian translation
 *	Author:		Valentin Hristov
 *	Company:	SOFTKIT Bulgarian
 *	Site:		http://www.softkit-bg.com
 */
editArea.add_lang("bg",{
test_select: "избери таг",
test_but: "тествай копието"
});
                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/edit_area/plugins/test/langs/zh.js                                            0000777 0000000 0000000 00000000127 12534142432 022274  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("zh",{
test_select: "选择标签",
test_but: "测试按钮"
});
                                                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/edit_area/plugins/test/langs/eo.js                                            0000777 0000000 0000000 00000000131 12534142432 022251  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("eo",{
test_select:"elekto de marko",
test_but: "provo-butono"
});
                                                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/edit_area/plugins/test/langs/es.js                                            0000777 0000000 0000000 00000000124 12534142432 022257  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("es",{
test_select: "select tag",
test_but: "test button"
});
                                                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/edit_area/plugins/test/langs/sk.js                                            0000777 0000000 0000000 00000000134 12534142432 022266  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("sk",{
test_select: "vyber tag",
test_but: "testovacie tlačidlo"
});
                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/edit_area/plugins/test/langs/it.js                                            0000777 0000000 0000000 00000000134 12534142432 022265  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("it",{
test_select: "seleziona tag",
test_but: "pulsante di test"
});
                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/edit_area/plugins/test/test.js                                                0000777 0000000 0000000 00000007157 12534142432 021540  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /**
 * Plugin designed for test prupose. It add a button (that manage an alert) and a select (that allow to insert tags) in the toolbar.
 * This plugin also disable the "f" key in the editarea, and load a CSS and a JS file
 */  
var EditArea_test= {
	/**
	 * Get called once this file is loaded (editArea still not initialized)
	 *
	 * @return nothing	 
	 */	 	 	
	init: function(){	
		//	alert("test init: "+ this._someInternalFunction(2, 3));
		editArea.load_css(this.baseURL+"css/test.css");
		editArea.load_script(this.baseURL+"test2.js");
	}
	/**
	 * Returns the HTML code for a specific control string or false if this plugin doesn't have that control.
	 * A control can be a button, select list or any other HTML item to present in the EditArea user interface.
	 * Language variables such as {$lang_somekey} will also be replaced with contents from
	 * the language packs.
	 * 
	 * @param {string} ctrl_name: the name of the control to add	  
	 * @return HTML code for a specific control or false.
	 * @type string	or boolean
	 */	
	,get_control_html: function(ctrl_name){
		switch(ctrl_name){
			case "test_but":
				// Control id, button img, command
				return parent.editAreaLoader.get_button_html('test_but', 'test.gif', 'test_cmd', false, this.baseURL);
			case "test_select":
				html= "<select id='test_select' onchange='javascript:editArea.execCommand(\"test_select_change\")' fileSpecific='no'>"
					+"			<option value='-1'>{$test_select}</option>"
					+"			<option value='h1'>h1</option>"
					+"			<option value='h2'>h2</option>"
					+"			<option value='h3'>h3</option>"
					+"			<option value='h4'>h4</option>"
					+"			<option value='h5'>h5</option>"
					+"			<option value='h6'>h6</option>"
					+"		</select>";
				return html;
		}
		return false;
	}
	/**
	 * Get called once EditArea is fully loaded and initialised
	 *	 
	 * @return nothing
	 */	 	 	
	,onload: function(){ 
		alert("test load");
	}
	
	/**
	 * Is called each time the user touch a keyboard key.
	 *	 
	 * @param (event) e: the keydown event
	 * @return true - pass to next handler in chain, false - stop chain execution
	 * @type boolean	 
	 */
	,onkeydown: function(e){
		var str= String.fromCharCode(e.keyCode);
		// desactivate the "f" character
		if(str.toLowerCase()=="f"){
			return true;
		}
		return false;
	}
	
	/**
	 * Executes a specific command, this function handles plugin commands.
	 *
	 * @param {string} cmd: the name of the command being executed
	 * @param {unknown} param: the parameter of the command	 
	 * @return true - pass to next handler in chain, false - stop chain execution
	 * @type boolean	
	 */
	,execCommand: function(cmd, param){
		// Handle commands
		switch(cmd){
			case "test_select_change":
				var val= document.getElementById("test_select").value;
				if(val!=-1)
					parent.editAreaLoader.insertTags(editArea.id, "<"+val+">", "</"+val+">");
				document.getElementById("test_select").options[0].selected=true; 
				return false;
			case "test_cmd":
				alert("user clicked on test_cmd");
				return false;
		}
		// Pass to next handler in chain
		return true;
	}
	
	/**
	 * This is just an internal plugin method, prefix all internal methods with a _ character.
	 * The prefix is needed so they doesn't collide with future EditArea callback functions.
	 *
	 * @param {string} a Some arg1.
	 * @param {string} b Some arg2.
	 * @return Some return.
	 * @type unknown
	 */
	,_someInternalFunction : function(a, b) {
		return a+b;
	}
};

// Adds the plugin class to the list of available EditArea plugins
editArea.add_plugin("test", EditArea_test);
                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/edit_area/plugins/test/images/                                                0000777 0000000 0000000 00000000000 12534434125 021456  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/plugins/test/images/test.gif                                        0000777 0000000 0000000 00000000127 12534142432 023124  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a      !   ,       .Ok̺}qQ(̞5(`Db ;                                                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/edit_area/plugins/test/test2.js                                               0000777 0000000 0000000 00000000057 12534142432 021612  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   alert("test2.js is loaded from test plugin");
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/edit_area/plugins/test/css/                                                   0000777 0000000 0000000 00000000000 12534434134 021001  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/plugins/test/css/test.css                                           0000777 0000000 0000000 00000000065 12534142432 022473  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   select#test_select{
	background-color: #FF0000;
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/edit_area/plugins/charmap/                                                    0000777 0000000 0000000 00000000000 12534142432 020642  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/                                              0000777 0000000 0000000 00000000000 12534142432 021746  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/pl.js                                         0000777 0000000 0000000 00000000300 12534142432 022713  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ﻿editArea.add_lang("pl",{
charmap_but: "Klawiatura ekranowa",
charmap_title: "Klawiatura ekranowa",
charmap_choose_block: "wybierz grupę znaków",
charmap_insert:"wstaw ten znak"
});
                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/de.js                                         0000777 0000000 0000000 00000000300 12534142432 022670  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("de",{
charmap_but: "Sonderzeichen",
charmap_title: "Sonderzeichen",
charmap_choose_block: "Bereich ausw&auml;hlen",
charmap_insert: "dieses Zeichen einf&uuml;gen"
});
                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/dk.js                                         0000777 0000000 0000000 00000000273 12534142432 022707  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("dk",{
charmap_but: "Visual keyboard",
charmap_title: "Visual keyboard",
charmap_choose_block: "select language block",
charmap_insert:"insert this character"
});
                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/cs.js                                         0000777 0000000 0000000 00000000273 12534142432 022716  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("cs",{
charmap_but: "Visual keyboard",
charmap_title: "Visual keyboard",
charmap_choose_block: "select language block",
charmap_insert:"insert this character"
});
                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/fr.js                                         0000777 0000000 0000000 00000000302 12534142432 022711  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("fr",{
charmap_but: "Clavier visuel",
charmap_title: "Clavier visuel",
charmap_choose_block: "choix du language",
charmap_insert:"ins&eacute;rer ce caract&egrave;re"
});
                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/hr.js                                         0000777 0000000 0000000 00000000277 12534142432 022726  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("hr",{
charmap_but: "Virtualna tipkovnica",
charmap_title: "Virtualna tipkovnica",
charmap_choose_block: "Odaberi blok s jezikom",
charmap_insert:"Ubaci taj znak"
});
                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/ru.js                                         0000777 0000000 0000000 00000000423 12534142432 022734  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("ru",{
charmap_but: "Визуальная клавиатура",
charmap_title: "Визуальная клавиатура",
charmap_choose_block: "выбрать языковой блок",
charmap_insert:"вставить этот символ"
});
                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/nl.js                                         0000777 0000000 0000000 00000000276 12534142432 022725  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("nl",{
charmap_but: "Visueel toetsenbord",
charmap_title: "Visueel toetsenbord",
charmap_choose_block: "Kies een taal blok",
charmap_insert:"Voeg dit symbool in"
});
                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/en.js                                         0000777 0000000 0000000 00000000273 12534142432 022713  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("en",{
charmap_but: "Visual keyboard",
charmap_title: "Visual keyboard",
charmap_choose_block: "select language block",
charmap_insert:"insert this character"
});
                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/ja.js                                         0000777 0000000 0000000 00000000273 12534142432 022703  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("ja",{
charmap_but: "Visual keyboard",
charmap_title: "Visual keyboard",
charmap_choose_block: "select language block",
charmap_insert:"insert this character"
});
                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/mk.js                                         0000777 0000000 0000000 00000000274 12534142432 022721  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("mkn",{
charmap_but: "Visual keyboard",
charmap_title: "Visual keyboard",
charmap_choose_block: "select language block",
charmap_insert:"insert this character"
});
                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/pt.js                                         0000777 0000000 0000000 00000000273 12534142432 022734  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("pt",{
charmap_but: "Visual keyboard",
charmap_title: "Visual keyboard",
charmap_choose_block: "select language block",
charmap_insert:"insert this character"
});
                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/bg.js                                         0000777 0000000 0000000 00000000614 12534142432 022700  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
 *	Bulgarian translation
 *	Author:		Valentin Hristov
 *	Company:	SOFTKIT Bulgarian
 *	Site:		http://www.softkit-bg.com
 */
editArea.add_lang("bg",{
charmap_but: "Виртуална клавиатура",
charmap_title: "Виртуална клавиатура",
charmap_choose_block: "избери езиков блок",
charmap_insert:"постави този символ"
});
                                                                                                                    ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/zh.js                                         0000777 0000000 0000000 00000000251 12534142432 022726  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("zh",{
charmap_but: "软键盘",
charmap_title: "软键盘",
charmap_choose_block: "选择一个语言块",
charmap_insert:"插入此字符"
});
                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/eo.js                                         0000777 0000000 0000000 00000000257 12534142432 022716  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("eo",{
charmap_but: "Ekranklavaro",
charmap_title: "Ekranklavaro",
charmap_choose_block: "Elekto de lingvo",
charmap_insert:"enmeti tiun signaron"
});
                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/es.js                                         0000777 0000000 0000000 00000000273 12534142432 022720  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("es",{
charmap_but: "Visual keyboard",
charmap_title: "Visual keyboard",
charmap_choose_block: "select language block",
charmap_insert:"insert this character"
});
                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/sk.js                                         0000777 0000000 0000000 00000000302 12534142432 022717  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("sk",{
charmap_but: "Vizuálna klávesnica",
charmap_title: "Vizuálna klávesnica",
charmap_choose_block: "vyber jazykový blok",
charmap_insert: "vlož tento znak"
});
                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/edit_area/plugins/charmap/langs/it.js                                         0000777 0000000 0000000 00000000275 12534142432 022727  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editArea.add_lang("it",{
charmap_but: "Tastiera visuale",
charmap_title: "Tastiera visuale",
charmap_choose_block: "seleziona blocco",
charmap_insert:"inserisci questo carattere"
});
                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/plugins/charmap/charmap.js                                          0000777 0000000 0000000 00000005367 12534142432 022631  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /**
 * Charmap plugin
 * by Christophe Dolivet
 * v0.1 (2006/09/22)
 * 
 *    
 * This plugin allow to use a visual keyboard allowing to insert any UTF-8 characters in the text.
 * 
 * - plugin name to add to the plugin list: "charmap"
 * - plugin name to add to the toolbar list: "charmap" 
 * - possible parameters to add to EditAreaLoader.init(): 
 * 		"charmap_default": (String) define the name of the default character range displayed on popup display
 * 							(default: "arrows")
 * 
 * 
 */
   
var EditArea_charmap= {
	/**
	 * Get called once this file is loaded (editArea still not initialized)
	 *
	 * @return nothing	 
	 */	 	 	
	init: function(){	
		this.default_language="Arrows";
	}
	
	/**
	 * Returns the HTML code for a specific control string or false if this plugin doesn't have that control.
	 * A control can be a button, select list or any other HTML item to present in the EditArea user interface.
	 * Language variables such as {$lang_somekey} will also be replaced with contents from
	 * the language packs.
	 * 
	 * @param {string} ctrl_name: the name of the control to add	  
	 * @return HTML code for a specific control or false.
	 * @type string	or boolean
	 */	
	,get_control_html: function(ctrl_name){
		switch(ctrl_name){
			case "charmap":
				// Control id, button img, command
				return parent.editAreaLoader.get_button_html('charmap_but', 'charmap.gif', 'charmap_press', false, this.baseURL);
		}
		return false;
	}
	/**
	 * Get called once EditArea is fully loaded and initialised
	 *	 
	 * @return nothing
	 */	 	 	
	,onload: function(){ 
		if(editArea.settings["charmap_default"] && editArea.settings["charmap_default"].length>0)
			this.default_language= editArea.settings["charmap_default"];
	}
	
	/**
	 * Is called each time the user touch a keyboard key.
	 *	 
	 * @param (event) e: the keydown event
	 * @return true - pass to next handler in chain, false - stop chain execution
	 * @type boolean	 
	 */
	,onkeydown: function(e){
		
	}
	
	/**
	 * Executes a specific command, this function handles plugin commands.
	 *
	 * @param {string} cmd: the name of the command being executed
	 * @param {unknown} param: the parameter of the command	 
	 * @return true - pass to next handler in chain, false - stop chain execution
	 * @type boolean	
	 */
	,execCommand: function(cmd, param){
		// Handle commands
		switch(cmd){
			case "charmap_press":
				win= window.open(this.baseURL+"popup.html", "charmap", "width=500,height=270,scrollbars=yes,resizable=yes");
				win.focus();
				return false;
		}
		// Pass to next handler in chain
		return true;
	}
	
};

// Adds the plugin class to the list of available EditArea plugins
editArea.add_plugin("charmap", EditArea_charmap);
                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/edit_area/plugins/charmap/images/                                             0000777 0000000 0000000 00000000000 12534142432 022107  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/plugins/charmap/images/charmap.gif                                  0000777 0000000 0000000 00000000365 12534142432 024220  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   &J"{js\.Obb7A=s`z$bFRRrЖʼ䞿6M8~;bǢFRFXvnz   !   ,       r'dihTqOBw$IPlPJ!sr\&apz4&)DhN  r<Q RF%,# `# &#-(! ;                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/edit_area/plugins/charmap/jscripts/                                           0000777 0000000 0000000 00000000000 12534142432 022503  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/plugins/charmap/jscripts/map.js                                     0000777 0000000 0000000 00000027106 12534142432 023627  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   var editArea;


/**
 *  UTF-8 list taken from http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=dec 
 */  
 

/*
var char_range_list={
"Basic Latin":"0021,007F",
"Latin-1 Supplement":"0080,00FF",
"Latin Extended-A":"0100,017F",
"Latin Extended-B":"0180,024F",
"IPA Extensions":"0250,02AF",
"Spacing Modifier Letters":"02B0,02FF",

"Combining Diacritical Marks":"0300,036F",
"Greek and Coptic":"0370,03FF",
"Cyrillic":"0400,04FF",
"Cyrillic Supplement":"0500,052F",
"Armenian":"0530,058F",
"Hebrew":"0590,05FF",
"Arabic":"0600,06FF",
"Syriac":"0700,074F",
"Arabic Supplement":"0750,077F",

"Thaana":"0780,07BF",
"Devanagari":"0900,097F",
"Bengali":"0980,09FF",
"Gurmukhi":"0A00,0A7F",
"Gujarati":"0A80,0AFF",
"Oriya":"0B00,0B7F",
"Tamil":"0B80,0BFF",
"Telugu":"0C00,0C7F",
"Kannada":"0C80,0CFF",

"Malayalam":"0D00,0D7F",
"Sinhala":"0D80,0DFF",
"Thai":"0E00,0E7F",
"Lao":"0E80,0EFF",
"Tibetan":"0F00,0FFF",
"Myanmar":"1000,109F",
"Georgian":"10A0,10FF",
"Hangul Jamo":"1100,11FF",
"Ethiopic":"1200,137F",

"Ethiopic Supplement":"1380,139F",
"Cherokee":"13A0,13FF",
"Unified Canadian Aboriginal Syllabics":"1400,167F",
"Ogham":"1680,169F",
"Runic":"16A0,16FF",
"Tagalog":"1700,171F",
"Hanunoo":"1720,173F",
"Buhid":"1740,175F",
"Tagbanwa":"1760,177F",

"Khmer":"1780,17FF",
"Mongolian":"1800,18AF",
"Limbu":"1900,194F",
"Tai Le":"1950,197F",
"New Tai Lue":"1980,19DF",
"Khmer Symbols":"19E0,19FF",
"Buginese":"1A00,1A1F",
"Phonetic Extensions":"1D00,1D7F",
"Phonetic Extensions Supplement":"1D80,1DBF",

"Combining Diacritical Marks Supplement":"1DC0,1DFF",
"Latin Extended Additional":"1E00,1EFF",
"Greek Extended":"1F00,1FFF",
"General Punctuation":"2000,206F",
"Superscripts and Subscripts":"2070,209F",
"Currency Symbols":"20A0,20CF",
"Combining Diacritical Marks for Symbols":"20D0,20FF",
"Letterlike Symbols":"2100,214F",
"Number Forms":"2150,218F",

"Arrows":"2190,21FF",
"Mathematical Operators":"2200,22FF",
"Miscellaneous Technical":"2300,23FF",
"Control Pictures":"2400,243F",
"Optical Character Recognition":"2440,245F",
"Enclosed Alphanumerics":"2460,24FF",
"Box Drawing":"2500,257F",
"Block Elements":"2580,259F",
"Geometric Shapes":"25A0,25FF",

"Miscellaneous Symbols":"2600,26FF",
"Dingbats":"2700,27BF",
"Miscellaneous Mathematical Symbols-A":"27C0,27EF",
"Supplemental Arrows-A":"27F0,27FF",
"Braille Patterns":"2800,28FF",
"Supplemental Arrows-B":"2900,297F",
"Miscellaneous Mathematical Symbols-B":"2980,29FF",
"Supplemental Mathematical Operators":"2A00,2AFF",
"Miscellaneous Symbols and Arrows":"2B00,2BFF",

"Glagolitic":"2C00,2C5F",
"Coptic":"2C80,2CFF",
"Georgian Supplement":"2D00,2D2F",
"Tifinagh":"2D30,2D7F",
"Ethiopic Extended":"2D80,2DDF",
"Supplemental Punctuation":"2E00,2E7F",
"CJK Radicals Supplement":"2E80,2EFF",
"Kangxi Radicals":"2F00,2FDF",
"Ideographic Description Characters":"2FF0,2FFF",

"CJK Symbols and Punctuation":"3000,303F",
"Hiragana":"3040,309F",
"Katakana":"30A0,30FF",
"Bopomofo":"3100,312F",
"Hangul Compatibility Jamo":"3130,318F",
"Kanbun":"3190,319F",
"Bopomofo Extended":"31A0,31BF",
"CJK Strokes":"31C0,31EF",
"Katakana Phonetic Extensions":"31F0,31FF",

"Enclosed CJK Letters and Months":"3200,32FF",
"CJK Compatibility":"3300,33FF",
"CJK Unified Ideographs Extension A":"3400,4DBF",
"Yijing Hexagram Symbols":"4DC0,4DFF",
"CJK Unified Ideographs":"4E00,9FFF",
"Yi Syllables":"A000,A48F",
"Yi Radicals":"A490,A4CF",
"Modifier Tone Letters":"A700,A71F",
"Syloti Nagri":"A800,A82F",

"Hangul Syllables":"AC00,D7AF",
"High Surrogates":"D800,DB7F",
"High Private Use Surrogates":"DB80,DBFF",
"Low Surrogates":"DC00,DFFF",
"Private Use Area":"E000,F8FF",
"CJK Compatibility Ideographs":"F900,FAFF",
"Alphabetic Presentation Forms":"FB00,FB4F",
"Arabic Presentation Forms-A":"FB50,FDFF",
"Variation Selectors":"FE00,FE0F",

"Vertical Forms":"FE10,FE1F",
"Combining Half Marks":"FE20,FE2F",
"CJK Compatibility Forms":"FE30,FE4F",
"Small Form Variants":"FE50,FE6F",
"Arabic Presentation Forms-B":"FE70,FEFF",
"Halfwidth and Fullwidth Forms":"FF00,FFEF",
"Specials":"FFF0,FFFF",
"Linear B Syllabary":"10000,1007F",
"Linear B Ideograms":"10080,100FF",

"Aegean Numbers":"10100,1013F",
"Ancient Greek Numbers":"10140,1018F",
"Old Italic":"10300,1032F",
"Gothic":"10330,1034F",
"Ugaritic":"10380,1039F",
"Old Persian":"103A0,103DF",
"Deseret":"10400,1044F",
"Shavian":"10450,1047F",
"Osmanya":"10480,104AF",

"Cypriot Syllabary":"10800,1083F",
"Kharoshthi":"10A00,10A5F",
"Byzantine Musical Symbols":"1D000,1D0FF",
"Musical Symbols":"1D100,1D1FF",
"Ancient Greek Musical Notation":"1D200,1D24F",
"Tai Xuan Jing Symbols":"1D300,1D35F",
"Mathematical Alphanumeric Symbols":"1D400,1D7FF",
"CJK Unified Ideographs Extension B":"20000,2A6DF",
"CJK Compatibility Ideographs Supplement":"2F800,2FA1F",
"Tags":"E0000,E007F",
"Variation Selectors Supplement":"E0100,E01EF"
};
*/
var char_range_list={
"Aegean Numbers":"10100,1013F",
"Alphabetic Presentation Forms":"FB00,FB4F",
"Ancient Greek Musical Notation":"1D200,1D24F",
"Ancient Greek Numbers":"10140,1018F",
"Arabic":"0600,06FF",
"Arabic Presentation Forms-A":"FB50,FDFF",
"Arabic Presentation Forms-B":"FE70,FEFF",
"Arabic Supplement":"0750,077F",
"Armenian":"0530,058F",
"Arrows":"2190,21FF",
"Basic Latin":"0020,007F",
"Bengali":"0980,09FF",
"Block Elements":"2580,259F",
"Bopomofo Extended":"31A0,31BF",
"Bopomofo":"3100,312F",
"Box Drawing":"2500,257F",
"Braille Patterns":"2800,28FF",
"Buginese":"1A00,1A1F",
"Buhid":"1740,175F",
"Byzantine Musical Symbols":"1D000,1D0FF",
"CJK Compatibility Forms":"FE30,FE4F",
"CJK Compatibility Ideographs Supplement":"2F800,2FA1F",
"CJK Compatibility Ideographs":"F900,FAFF",
"CJK Compatibility":"3300,33FF",
"CJK Radicals Supplement":"2E80,2EFF",
"CJK Strokes":"31C0,31EF",
"CJK Symbols and Punctuation":"3000,303F",
"CJK Unified Ideographs Extension A":"3400,4DBF",
"CJK Unified Ideographs Extension B":"20000,2A6DF",
"CJK Unified Ideographs":"4E00,9FFF",
"Cherokee":"13A0,13FF",
"Combining Diacritical Marks Supplement":"1DC0,1DFF",
"Combining Diacritical Marks for Symbols":"20D0,20FF",
"Combining Diacritical Marks":"0300,036F",
"Combining Half Marks":"FE20,FE2F",
"Control Pictures":"2400,243F",
"Coptic":"2C80,2CFF",
"Currency Symbols":"20A0,20CF",
"Cypriot Syllabary":"10800,1083F",
"Cyrillic Supplement":"0500,052F",
"Cyrillic":"0400,04FF",
"Deseret":"10400,1044F",
"Devanagari":"0900,097F",
"Dingbats":"2700,27BF",
"Enclosed Alphanumerics":"2460,24FF",
"Enclosed CJK Letters and Months":"3200,32FF",
"Ethiopic Extended":"2D80,2DDF",
"Ethiopic Supplement":"1380,139F",
"Ethiopic":"1200,137F",
"General Punctuation":"2000,206F",
"Geometric Shapes":"25A0,25FF",
"Georgian Supplement":"2D00,2D2F",
"Georgian":"10A0,10FF",
"Glagolitic":"2C00,2C5F",
"Gothic":"10330,1034F",
"Greek Extended":"1F00,1FFF",
"Greek and Coptic":"0370,03FF",
"Gujarati":"0A80,0AFF",
"Gurmukhi":"0A00,0A7F",
"Halfwidth and Fullwidth Forms":"FF00,FFEF",
"Hangul Compatibility Jamo":"3130,318F",
"Hangul Jamo":"1100,11FF",
"Hangul Syllables":"AC00,D7AF",
"Hanunoo":"1720,173F",
"Hebrew":"0590,05FF",
"High Private Use Surrogates":"DB80,DBFF",
"High Surrogates":"D800,DB7F",
"Hiragana":"3040,309F",
"IPA Extensions":"0250,02AF",
"Ideographic Description Characters":"2FF0,2FFF",
"Kanbun":"3190,319F",
"Kangxi Radicals":"2F00,2FDF",
"Kannada":"0C80,0CFF",
"Katakana Phonetic Extensions":"31F0,31FF",
"Katakana":"30A0,30FF",
"Kharoshthi":"10A00,10A5F",
"Khmer Symbols":"19E0,19FF",
"Khmer":"1780,17FF",
"Lao":"0E80,0EFF",
"Latin Extended Additional":"1E00,1EFF",
"Latin Extended-A":"0100,017F",
"Latin Extended-B":"0180,024F",
"Latin-1 Supplement":"0080,00FF",
"Letterlike Symbols":"2100,214F",
"Limbu":"1900,194F",
"Linear B Ideograms":"10080,100FF",
"Linear B Syllabary":"10000,1007F",
"Low Surrogates":"DC00,DFFF",
"Malayalam":"0D00,0D7F",
"Mathematical Alphanumeric Symbols":"1D400,1D7FF",
"Mathematical Operators":"2200,22FF",
"Miscellaneous Mathematical Symbols-A":"27C0,27EF",
"Miscellaneous Mathematical Symbols-B":"2980,29FF",
"Miscellaneous Symbols and Arrows":"2B00,2BFF",
"Miscellaneous Symbols":"2600,26FF",
"Miscellaneous Technical":"2300,23FF",
"Modifier Tone Letters":"A700,A71F",
"Mongolian":"1800,18AF",
"Musical Symbols":"1D100,1D1FF",
"Myanmar":"1000,109F",
"New Tai Lue":"1980,19DF",
"Number Forms":"2150,218F",
"Ogham":"1680,169F",
"Old Italic":"10300,1032F",
"Old Persian":"103A0,103DF",
"Optical Character Recognition":"2440,245F",
"Oriya":"0B00,0B7F",
"Osmanya":"10480,104AF",
"Phonetic Extensions Supplement":"1D80,1DBF",
"Phonetic Extensions":"1D00,1D7F",
"Private Use Area":"E000,F8FF",
"Runic":"16A0,16FF",
"Shavian":"10450,1047F",
"Sinhala":"0D80,0DFF",
"Small Form Variants":"FE50,FE6F",
"Spacing Modifier Letters":"02B0,02FF",
"Specials":"FFF0,FFFF",
"Superscripts and Subscripts":"2070,209F",
"Supplemental Arrows-A":"27F0,27FF",
"Supplemental Arrows-B":"2900,297F",
"Supplemental Mathematical Operators":"2A00,2AFF",
"Supplemental Punctuation":"2E00,2E7F",
"Syloti Nagri":"A800,A82F",
"Syriac":"0700,074F",
"Tagalog":"1700,171F",
"Tagbanwa":"1760,177F",
"Tags":"E0000,E007F",
"Tai Le":"1950,197F",
"Tai Xuan Jing Symbols":"1D300,1D35F",
"Tamil":"0B80,0BFF",
"Telugu":"0C00,0C7F",
"Thaana":"0780,07BF",
"Thai":"0E00,0E7F",
"Tibetan":"0F00,0FFF",
"Tifinagh":"2D30,2D7F",
"Ugaritic":"10380,1039F",
"Unified Canadian Aboriginal Syllabics":"1400,167F",
"Variation Selectors Supplement":"E0100,E01EF",
"Variation Selectors":"FE00,FE0F",
"Vertical Forms":"FE10,FE1F",
"Yi Radicals":"A490,A4CF",
"Yi Syllables":"A000,A48F",
"Yijing Hexagram Symbols":"4DC0,4DFF"
};

var insert="charmap_insert";

function map_load(){
	editArea=opener.editArea;
	// translate the document
	insert= editArea.get_translation(insert, "word");
	//alert(document.title);
	document.title= editArea.get_translation(document.title, "template");
	document.body.innerHTML= editArea.get_translation(document.body.innerHTML, "template");
	//document.title= editArea.get_translation(document.getElementBytitle, "template");
	
	var selected_lang=opener.EditArea_charmap.default_language.toLowerCase();
	var selected=0;
	
	var select= document.getElementById("select_range")
	for(var i in char_range_list){
		if(i.toLowerCase()==selected_lang)
			selected=select.options.length;
		select.options[select.options.length]=new Option(i, char_range_list[i]);
	}
	select.options[selected].selected=true;
/*	start=0;
	end=127;
	content="";
	for(var i=start; i<end; i++){
		content+="&#"+i+"; ";
	}
	document.getElementById("char_list").innerHTML=content;*/
	renderCharMapHTML();
}


function renderCharMapHTML() {
	range= document.getElementById("select_range").value.split(",");

	start= parseInt(range[0],16);
	end= parseInt(range[1],16);
	var charsPerRow = 20, tdWidth=20, tdHeight=20;
	html="";
	for (var i=start; i<end; i++) {
		html+="<a class='char' onmouseover='previewChar(\""+ i + "\");' onclick='insertChar(\""+ i + "\");' title='"+ insert +"'>"+ String.fromCharCode(i) +"</a>";
	}
	document.getElementById("char_list").innerHTML= html;
	document.getElementById("preview_char").innerHTML="";
}

function previewChar(i){
	document.getElementById("preview_char").innerHTML= String.fromCharCode(i);
	document.getElementById("preview_code").innerHTML= "&amp;#"+ i +";";
}

function insertChar(i){
	opener.parent.editAreaLoader.setSelectedText(editArea.id, String.fromCharCode( i));
	range= opener.parent.editAreaLoader.getSelectionRange(editArea.id);
	opener.parent.editAreaLoader.setSelectionRange(editArea.id, range["end"], range["end"]);
	window.focus();
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/edit_area/plugins/charmap/css/                                                0000777 0000000 0000000 00000000000 12534142432 021432  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/plugins/charmap/css/charmap.css                                     0000777 0000000 0000000 00000001671 12534142432 023567  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   body{
	background-color: #F0F0EE; 
	font: 12px monospace, sans-serif;
}

select{
	background-color: #F9F9F9;
	border: solid 1px #888888;
}

h1, h2, h3, h4, h5, h6{
	margin: 0;
	padding: 0;
	color: #2B6FB6;
}

h1{
	font-size: 1.5em;
}

div#char_list{
	height: 200px;
	overflow: auto;
	padding: 1px;
	border: 1px solid #0A246A;
	background-color: #F9F9F9;
	clear: both;
	margin-top: 5px;
}

a.char{
	display: block;
	float: left;
	width: 20px;
	height: 20px;
	line-height: 20px;
	margin: 1px;
	border: solid 1px #888888;
	text-align: center;
	cursor: pointer;
}

a.char:hover{
	background-color: #CCCCCC;
}

.preview{
	border: solid 1px #888888;
	width: 50px;
	padding: 2px 5px;
	height: 35px;
	line-height: 35px;
	text-align:center;	 
	background-color: #CCCCCC;
	font-size: 2em;
	float: right;
	font-weight: bold;
	margin: 0 0 5px 5px;
}

#preview_code{
	font-size: 1.1em;
	width: 70px;
}
                                                                       ./mvappsvr/docroot/db/edit_area/plugins/charmap/popup.html                                          0000777 0000000 0000000 00000001416 12534142432 022700  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
<head>
<title>{$charmap_title}</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="css/charmap.css" />
<script language="Javascript" type="text/javascript" src="jscripts/map.js">
</script>
</head>
<body onload='map_load()'>
<div id='preview_code' class='preview'></div>
<div id='preview_char' class='preview'></div>
<h1>{$charmap_title}:</h1>
<select id='select_range' onchange='renderCharMapHTML()' title='{$charmap_choose_block}'>
</select>
<div id='char_list'>

</div>



</body>
</html>
                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/edit_area/edit_area_all.js                                                    0000777 0000000 0000000 00000221120 12534142432 020652  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /******
 *
 *	EditArea 
 * 	Developped by Christophe Dolivet
 *	Released under LGPL, Apache and BSD licenses (use the one you want)
 *
******/

function EditAreaLoader(){
	var t=this;
	t.version= "0.8.1.1";
	date= new Date();
	t.start_time=date.getTime();
	t.win= "loading";	// window loading state
	t.error= false;	// to know if load is interrrupt
	t.baseURL="";
	//t.suffix="";
	t.template="";
	t.lang= {};	// array of loaded speech language
	t.load_syntax= {};	// array of loaded syntax language for highlight mode
	t.syntax= {};	// array of initilized syntax language for highlight mode
	t.loadedFiles= [];
	t.waiting_loading= {}; 	// files that must be loaded in order to allow the script to really start
	// scripts that must be loaded in the iframe
	t.scripts_to_load= ["elements_functions", "resize_area", "reg_syntax"];
	t.sub_scripts_to_load= ["edit_area", "manage_area" ,"edit_area_functions", "keyboard", "search_replace", "highlight", "regexp"];
	
	t.resize= []; // contain resizing datas
	t.hidden= {};	// store datas of the hidden textareas
	
	t.default_settings= {
		//id: "src"	// id of the textarea to transform
		debug: false
		,smooth_selection: true
		,font_size: "10"		// not for IE
		,font_family: "monospace"	// can be "verdana,monospace". Allow non monospace font but Firefox get smaller tabulation with non monospace fonts. IE doesn't change the tabulation width and Opera doesn't take this option into account... 
		,start_highlight: false	// if start with highlight
		,toolbar: "search, go_to_line, fullscreen, |, undo, redo, |, select_font,|, change_smooth_selection, highlight, reset_highlight, word_wrap, |, help"
		,begin_toolbar: ""		//  "new_document, save, load, |"
		,end_toolbar: ""		// or end_toolbar
		,is_multi_files: false		// enable the multi file mode (the textarea content is ignored)
		,allow_resize: "both"	// possible values: "no", "both", "x", "y"
		,show_line_colors: false	// if the highlight is disabled for the line currently beeing edited (if enabled => heavy CPU use)
		,min_width: 400
		,min_height: 125
		,replace_tab_by_spaces: false
		,allow_toggle: true		// true or false
		,language: "en"
		,syntax: ""
		,syntax_selection_allow: "basic,brainfuck,c,coldfusion,cpp,css,html,java,js,pas,perl,php,python,ruby,robotstxt,sql,tsql,vb,xml"
		,display: "onload" 		// onload or later
		,max_undo: 30
		,browsers: "known"	// all or known
		,plugins: "" // comma separated plugin list
		,gecko_spellcheck: false	// enable/disable by default the gecko_spellcheck
		,fullscreen: false
		,is_editable: true
		,cursor_position: "begin"
		,word_wrap: false		// define if the text is wrapped of not in the textarea
		,autocompletion: false	// NOT IMPLEMENTED			
		,load_callback: ""		// click on load button (function name)
		,save_callback: ""		// click on save button (function name)
		,change_callback: ""	// textarea onchange trigger (function name)
		,submit_callback: ""	// form submited (function name)
		,EA_init_callback: ""	// EditArea initiliazed (function name)
		,EA_delete_callback: ""	// EditArea deleted (function name)
		,EA_load_callback: ""	// EditArea fully loaded and displayed (function name)
		,EA_unload_callback: ""	// EditArea delete while being displayed (function name)
		,EA_toggle_on_callback: ""	// EditArea toggled on (function name)
		,EA_toggle_off_callback: ""	// EditArea toggled off (function name)
		,EA_file_switch_on_callback: ""	// a new tab is selected (called for the newly selected file)
		,EA_file_switch_off_callback: ""	// a new tab is selected (called for the previously selected file)
		,EA_file_close_callback: ""		// close a tab
	};
	
	t.advanced_buttons = [
			// id, button img, command (it will try to find the translation of "id"), is_file_specific
			['new_document', 'newdocument.gif', 'new_document', false],
			['search', 'search.gif', 'show_search', false],
			['go_to_line', 'go_to_line.gif', 'go_to_line', false],
			['undo', 'undo.gif', 'undo', true],
			['redo', 'redo.gif', 'redo', true],
			['change_smooth_selection', 'smooth_selection.gif', 'change_smooth_selection_mode', true],
			['reset_highlight', 'reset_highlight.gif', 'resync_highlight', true],
			['highlight', 'highlight.gif','change_highlight', true],
			['help', 'help.gif', 'show_help', false],
			['save', 'save.gif', 'save', false],
			['load', 'load.gif', 'load', false],
			['fullscreen', 'fullscreen.gif', 'toggle_full_screen', false],
			['word_wrap', 'word_wrap.gif', 'toggle_word_wrap', true],
			['autocompletion', 'autocompletion.gif', 'toggle_autocompletion', true]
		];
			
	// navigator identification
	t.set_browser_infos(t);

	if(t.isIE>=6 || t.isGecko || ( t.isWebKit && !t.isSafari<3 ) || t.isOpera>=9  || t.isCamino )
		t.isValidBrowser=true;
	else
		t.isValidBrowser=false;

	t.set_base_url();		
	
	for(var i=0; i<t.scripts_to_load.length; i++){
		setTimeout("editAreaLoader.load_script('"+t.baseURL + t.scripts_to_load[i]+ ".js');", 1);	// let the time to Object editAreaLoader to be created before loading additionnal scripts
		t.waiting_loading[t.scripts_to_load[i]+ ".js"]= false;
	}
	t.add_event(window, "load", EditAreaLoader.prototype.window_loaded);
};
	
EditAreaLoader.prototype ={
	has_error : function(){
		this.error= true;
		// set to empty all EditAreaLoader functions
		for(var i in EditAreaLoader.prototype){
			EditAreaLoader.prototype[i]=function(){};		
		}
	},
	
	// add browser informations to the object passed in parameter
	set_browser_infos : function(o){
		ua= navigator.userAgent;
		
		// general detection
		o.isWebKit	= /WebKit/.test(ua);
		o.isGecko	= !o.isWebKit && /Gecko/.test(ua);
		o.isMac		= /Mac/.test(ua);
		
		o.isIE	= (navigator.appName == "Microsoft Internet Explorer");
		if(o.isIE){
			o.isIE = ua.replace(/^.*?MSIE\s+([0-9\.]+).*$/, "$1");
			if(o.isIE<6)
				o.has_error();
		}

		if(o.isOpera = (ua.indexOf('Opera') != -1)){	
			o.isOpera= ua.replace(/^.*?Opera.*?([0-9\.]+).*$/i, "$1");
			if(o.isOpera<9)
				o.has_error();
			o.isIE=false;			
		}

		if(o.isFirefox =(ua.indexOf('Firefox') != -1))
			o.isFirefox = ua.replace(/^.*?Firefox.*?([0-9\.]+).*$/i, "$1");
		// Firefox clones 	
		if( ua.indexOf('Iceweasel') != -1 )
			o.isFirefox	= ua.replace(/^.*?Iceweasel.*?([0-9\.]+).*$/i, "$1");
		if( ua.indexOf('GranParadiso') != -1 )
			o.isFirefox	= ua.replace(/^.*?GranParadiso.*?([0-9\.]+).*$/i, "$1");
		if( ua.indexOf('BonEcho') != -1 )
			o.isFirefox	= ua.replace(/^.*?BonEcho.*?([0-9\.]+).*$/i, "$1");
		if( ua.indexOf('SeaMonkey') != -1)
			o.isFirefox = (ua.replace(/^.*?SeaMonkey.*?([0-9\.]+).*$/i, "$1") ) + 1;
			
		if(o.isCamino =(ua.indexOf('Camino') != -1))
			o.isCamino = ua.replace(/^.*?Camino.*?([0-9\.]+).*$/i, "$1");
			
		if(o.isSafari =(ua.indexOf('Safari') != -1))
			o.isSafari= ua.replace(/^.*?Version\/([0-9]+\.[0-9]+).*$/i, "$1");
	
		if(o.isChrome =(ua.indexOf('Chrome') != -1)) {
			o.isChrome = ua.replace(/^.*?Chrome.*?([0-9\.]+).*$/i, "$1");
			o.isSafari	= false;
		}
		
	},
	
	window_loaded : function(){
		editAreaLoader.win="loaded";
		
		// add events on forms
		if (document.forms) {
			for (var i=0; i<document.forms.length; i++) {
				var form = document.forms[i];
				form.edit_area_replaced_submit=null;
				try {
					
					form.edit_area_replaced_submit = form.onsubmit;
					form.onsubmit="";
				} catch (e) {// Do nothing
				}
				editAreaLoader.add_event(form, "submit", EditAreaLoader.prototype.submit);
				editAreaLoader.add_event(form, "reset", EditAreaLoader.prototype.reset);
			}
		}
		editAreaLoader.add_event(window, "unload", function(){for(var i in editAreas){editAreaLoader.delete_instance(i);}});	// ini callback
	},
	
	// init the checkup of the selection of the IE textarea
	init_ie_textarea : function(id){
		var a=document.getElementById(id);
		try{
			if(a && typeof(a.focused)=="undefined"){
				a.focus();
				a.focused=true;
				a.selectionStart= a.selectionEnd= 0;			
				get_IE_selection(a);
				editAreaLoader.add_event(a, "focus", IE_textarea_focus);
				editAreaLoader.add_event(a, "blur", IE_textarea_blur);
				
			}
		}catch(ex){}
	},
		
	init : function(settings){
		var t=this,s=settings,i;
		
		if(!s["id"])
			t.has_error();
		if(t.error)
			return;
		// if an instance of the editor already exists for this textarea => delete the previous one
		if(editAreas[s["id"]])
			t.delete_instance(s["id"]);
	
		// init settings
		for(i in t.default_settings){
			if(typeof(s[i])=="undefined")
				s[i]=t.default_settings[i];
		}
		
		if(s["browsers"]=="known" && t.isValidBrowser==false){
			return;
		}
		
		if(s["begin_toolbar"].length>0)
			s["toolbar"]= s["begin_toolbar"] +","+ s["toolbar"];
		if(s["end_toolbar"].length>0)
			s["toolbar"]= s["toolbar"] +","+ s["end_toolbar"];
		s["tab_toolbar"]= s["toolbar"].replace(/ /g,"").split(",");
		
		s["plugins"]= s["plugins"].replace(/ /g,"").split(",");
		for(i=0; i<s["plugins"].length; i++){
			if(s["plugins"][i].length==0)
				s["plugins"].splice(i,1);
		}
	//	alert(settings["plugins"].length+": "+ settings["plugins"].join(","));
		t.get_template();
// ljb		t.load_script(t.baseURL + "langs/"+ s["language"] + ".js");
		t.load_script(t.baseURL + "langs_"+ s["language"] + ".js");
		
		if(s["syntax"].length>0){
			s["syntax"]=s["syntax"].toLowerCase();
// ljb			t.load_script(t.baseURL + "reg_syntax/"+ s["syntax"] + ".js");
			t.load_script(t.baseURL + "reg_syntax_"+ s["syntax"] + ".js");
		}
		//alert(this.template);
		
		editAreas[s["id"]]= {"settings": s};
		editAreas[s["id"]]["displayed"]=false;
		editAreas[s["id"]]["hidden"]=false;
		
		//if(settings["display"]=="onload")
		t.start(s["id"]);
	},
	
	// delete an instance of an EditArea
	delete_instance : function(id){
		var d=document,fs=window.frames,span,iframe;
		editAreaLoader.execCommand(id, "EA_delete");
		if(fs["frame_"+id] && fs["frame_"+id].editArea)
		{
			if(editAreas[id]["displayed"])
				editAreaLoader.toggle(id, "off");
			fs["frame_"+id].editArea.execCommand("EA_unload");
		}

		// remove toggle infos and debug textarea
		span= d.getElementById("EditAreaArroundInfos_"+id);
		if(span)
			span.parentNode.removeChild(span);

		// remove the iframe
		iframe= d.getElementById("frame_"+id);
		if(iframe){
			iframe.parentNode.removeChild(iframe);
			//delete iframe;
			try {
				delete fs["frame_"+id];
			} catch (e) {// Do nothing
			}
		}	

		delete editAreas[id];
	},

	
	start : function(id){
		var t=this,d=document,f,span,father,next,html='',html_toolbar_content='',template,content,i;
		
		// check that the window is loaded
		if(t.win!="loaded"){
			setTimeout("editAreaLoader.start('"+id+"');", 50);
			return;
		}
		
		// check that all needed scripts are loaded
		for( i in t.waiting_loading){
			if(t.waiting_loading[i]!="loaded" && typeof(t.waiting_loading[i])!="function"){
				setTimeout("editAreaLoader.start('"+id+"');", 50);
				return;
			}
		}
		
		// wait until language and syntax files are loaded
		if(!t.lang[editAreas[id]["settings"]["language"]] || (editAreas[id]["settings"]["syntax"].length>0 && !t.load_syntax[editAreas[id]["settings"]["syntax"]]) ){
			setTimeout("editAreaLoader.start('"+id+"');", 50);
			return;
		}
		// init the regexp for syntax highlight
		if(editAreas[id]["settings"]["syntax"].length>0)
			t.init_syntax_regexp();
		
			
		// display toggle option and debug area
		if(!d.getElementById("EditAreaArroundInfos_"+id) && (editAreas[id]["settings"]["debug"] || editAreas[id]["settings"]["allow_toggle"]))
		{
			span= d.createElement("span");
			span.id= "EditAreaArroundInfos_"+id;
			if(editAreas[id]["settings"]["allow_toggle"]){
				checked=(editAreas[id]["settings"]["display"]=="onload")?"checked='checked'":"";
				html+="<div id='edit_area_toggle_"+i+"'>";
				html+="<input id='edit_area_toggle_checkbox_"+ id +"' class='toggle_"+ id +"' type='checkbox' onclick='editAreaLoader.toggle(\""+ id +"\");' accesskey='e' "+checked+" />";
				html+="<label for='edit_area_toggle_checkbox_"+ id +"'>{$toggle}</label></div>";	
			}
			if(editAreas[id]["settings"]["debug"])
				html+="<textarea id='edit_area_debug_"+ id +"' spellcheck='off' style='z-index: 20; width: 100%; height: 120px;overflow: auto; border: solid black 1px;'></textarea><br />";				
			html= t.translate(html, editAreas[id]["settings"]["language"]);				
			span.innerHTML= html;				
			father= d.getElementById(id).parentNode;
			next= d.getElementById(id).nextSibling;
			if(next==null)
				father.appendChild(span);
			else
				father.insertBefore(span, next);
		}
		
		if(!editAreas[id]["initialized"])
		{
			t.execCommand(id, "EA_init");	// ini callback
			if(editAreas[id]["settings"]["display"]=="later"){
				editAreas[id]["initialized"]= true;
				return;
			}
		}
		
		if(t.isIE){	// launch IE selection checkup
			t.init_ie_textarea(id);
		}
				
		// get toolbar content
		area=editAreas[id];
		
		for(i=0; i<area["settings"]["tab_toolbar"].length; i++){
		//	alert(this.tab_toolbar[i]+"\n"+ this.get_control_html(this.tab_toolbar[i]));
			html_toolbar_content+= t.get_control_html(area["settings"]["tab_toolbar"][i], area["settings"]["language"]);
		}
		// translate toolbar text here for chrome 2
		html_toolbar_content = t.translate(html_toolbar_content, area["settings"]["language"], "template"); 
		
		
		// create javascript import rules for the iframe if the javascript has not been already loaded by the compressor
		if(!t.iframe_script){
			t.iframe_script="";
			for(i=0; i<t.sub_scripts_to_load.length; i++)
				t.iframe_script+='<script language="javascript" type="text/javascript" src="'+ t.baseURL + t.sub_scripts_to_load[i] +'.js"></script>';
		}
		
		// add plugins scripts if not already loaded by the compressor (but need to load language in all the case)
		for(i=0; i<area["settings"]["plugins"].length; i++){
			//if(typeof(area["settings"]["plugins"][i])=="function") continue;
			if(!t.all_plugins_loaded)
				t.iframe_script+='<script language="javascript" type="text/javascript" src="'+ t.baseURL + 'plugins/' + area["settings"]["plugins"][i] + '/' + area["settings"]["plugins"][i] +'.js"></script>';
			t.iframe_script+='<script language="javascript" type="text/javascript" src="'+ t.baseURL + 'plugins/' + area["settings"]["plugins"][i] + '/langs/' + area["settings"]["language"] +'.js"></script>';
		}
	
		
		// create css link for the iframe if the whole css text has not been already loaded by the compressor
		if(!t.iframe_css){
			t.iframe_css="<link href='"+ t.baseURL +"edit_area.css' rel='stylesheet' type='text/css' />";
		}
		
		
		// create template
		template= t.template.replace(/\[__BASEURL__\]/g, t.baseURL);
		template= template.replace("[__TOOLBAR__]",html_toolbar_content);
			
		
		// fill template with good language sentences
		template= t.translate(template, area["settings"]["language"], "template");
		
		// add css_code
		template= template.replace("[__CSSRULES__]", t.iframe_css);				
		// add js_code
		template= template.replace("[__JSCODE__]", t.iframe_script);
		
		// add version_code
		template= template.replace("[__EA_VERSION__]", t.version);
		//template=template.replace(/\{\$([^\}]+)\}/gm, this.traduc_template);
		
		//editAreas[area["settings"]["id"]]["template"]= template;
		
		area.textarea=d.getElementById(area["settings"]["id"]);
		editAreas[area["settings"]["id"]]["textarea"]=area.textarea;
	
		// if removing previous instances from DOM before (fix from Marcin)
		if(typeof(window.frames["frame_"+area["settings"]["id"]])!='undefined') 
			delete window.frames["frame_"+area["settings"]["id"]];
		
		// insert template in the document after the textarea
		father= area.textarea.parentNode;
	/*	var container= document.createElement("div");
		container.id= "EditArea_frame_container_"+area["settings"]["id"];
	*/	
		content= d.createElement("iframe");
		content.name= "frame_"+area["settings"]["id"];
		content.id= "frame_"+area["settings"]["id"];
		content.style.borderWidth= "0px";
		setAttribute(content, "frameBorder", "0"); // IE
		content.style.overflow="hidden";
		content.style.display="none";

		
		next= area.textarea.nextSibling;
		if(next==null)
			father.appendChild(content);
		else
			father.insertBefore(content, next) ;		
		f=window.frames["frame_"+area["settings"]["id"]];
		f.document.open();
		f.editAreas=editAreas;
		f.area_id= area["settings"]["id"];	
		f.document.area_id= area["settings"]["id"];	
		f.document.write(template);
		f.document.close();

	//	frame.editAreaLoader=this;
		//editAreas[area["settings"]["id"]]["displayed"]=true;
		
	},
	
	toggle : function(id, toggle_to){

	/*	if((editAreas[id]["displayed"]==true  && toggle_to!="on") || toggle_to=="off"){
			this.toggle_off(id);
		}else if((editAreas[id]["displayed"]==false  && toggle_to!="off") || toggle_to=="on"){
			this.toggle_on(id);
		}*/
		if(!toggle_to)
			toggle_to= (editAreas[id]["displayed"]==true)?"off":"on";
		if(editAreas[id]["displayed"]==true  && toggle_to=="off"){
			this.toggle_off(id);
		}else if(editAreas[id]["displayed"]==false  && toggle_to=="on"){
			this.toggle_on(id);
		}
	
		return false;
	},
	
	// static function
	toggle_off : function(id){
		var fs=window.frames,f,t,parNod,nxtSib,selStart,selEnd,scrollTop,scrollLeft;
		if(fs["frame_"+id])
		{	
			f	= fs["frame_"+id];
			t	= editAreas[id]["textarea"];
			if(f.editArea.fullscreen['isFull'])
				f.editArea.toggle_full_screen(false);
			editAreas[id]["displayed"]=false;
			
			// set wrap to off to keep same display mode (some browser get problem with this, so it need more complex operation		
			t.wrap = "off";	// for IE
			setAttribute(t, "wrap", "off");	// for Firefox	
			parNod = t.parentNode;
			nxtSib = t.nextSibling;
			parNod.removeChild(t); 
			parNod.insertBefore(t, nxtSib);
			
			// restore values
			t.value= f.editArea.textarea.value;
			selStart	= f.editArea.last_selection["selectionStart"];
			selEnd		= f.editArea.last_selection["selectionEnd"];
			scrollTop	= f.document.getElementById("result").scrollTop;
			scrollLeft	= f.document.getElementById("result").scrollLeft;
			
			
			document.getElementById("frame_"+id).style.display='none';
		
			t.style.display="inline";

			try{	// IE will give an error when trying to focus an invisible or disabled textarea
				t.focus();
			} catch(e){};
			if(this.isIE){
				t.selectionStart= selStart;
				t.selectionEnd	= selEnd;
				t.focused		= true;
				set_IE_selection(t);
			}else{
				if(this.isOpera && this.isOpera < 9.6 ){	// Opera bug when moving selection start and selection end
					t.setSelectionRange(0, 0);
				}
				try{
					t.setSelectionRange(selStart, selEnd);
				} catch(e) {};
			}
			t.scrollTop= scrollTop;
			t.scrollLeft= scrollLeft;
			f.editArea.execCommand("toggle_off");

		}
	},	
	
	// static function
	toggle_on : function(id){
		var fs=window.frames,f,t,selStart=0,selEnd=0,scrollTop=0,scrollLeft=0,curPos,elem;
			
		if(fs["frame_"+id])
		{
			f	= fs["frame_"+id];
			t	= editAreas[id]["textarea"];
			area= f.editArea;
			area.textarea.value= t.value;
			
			// store display values;
			curPos	= editAreas[id]["settings"]["cursor_position"];

			if(t.use_last==true)
			{
				selStart	= t.last_selectionStart;
				selEnd		= t.last_selectionEnd;
				scrollTop	= t.last_scrollTop;
				scrollLeft	= t.last_scrollLeft;
				t.use_last=false;
			}
			else if( curPos == "auto" )
			{
				try{
					selStart	= t.selectionStart;
					selEnd		= t.selectionEnd;
					scrollTop	= t.scrollTop;
					scrollLeft	= t.scrollLeft;
					//alert(scrollTop);
				}catch(ex){}
			}
			
			// set to good size
			this.set_editarea_size_from_textarea(id, document.getElementById("frame_"+id));
			t.style.display="none";			
			document.getElementById("frame_"+id).style.display="inline";
			area.execCommand("focus"); // without this focus opera doesn't manage well the iframe body height
			
			
			// restore display values
			editAreas[id]["displayed"]=true;
			area.execCommand("update_size");
			
			f.document.getElementById("result").scrollTop= scrollTop;
			f.document.getElementById("result").scrollLeft= scrollLeft;
			area.area_select(selStart, selEnd-selStart);
			area.execCommand("toggle_on");

			
		}
		else
		{
		/*	if(this.isIE)
				get_IE_selection(document.getElementById(id));	*/	
			elem= document.getElementById(id);	
			elem.last_selectionStart= elem.selectionStart;
			elem.last_selectionEnd= elem.selectionEnd;
			elem.last_scrollTop= elem.scrollTop;
			elem.last_scrollLeft= elem.scrollLeft;
			elem.use_last=true;
			editAreaLoader.start(id);
		}
	},	
	
	set_editarea_size_from_textarea : function(id, frame){	
		var elem,width,height;
		elem	= document.getElementById(id);
		
		width	= Math.max(editAreas[id]["settings"]["min_width"], elem.offsetWidth)+"px";
		height	= Math.max(editAreas[id]["settings"]["min_height"], elem.offsetHeight)+"px";
		if(elem.style.width.indexOf("%")!=-1)
			width	= elem.style.width;
		if(elem.style.height.indexOf("%")!=-1)
			height	= elem.style.height;
		//alert("h: "+height+" w: "+width);
	
		frame.style.width= width;
		frame.style.height= height;
	},
		
	set_base_url : function(){
		var t=this,elems,i,docBasePath;

		if( !this.baseURL ){
			elems = document.getElementsByTagName('script');
	
			for( i=0; i<elems.length; i++ ){
				if (elems[i].src && elems[i].src.match(/edit_area_[^\\\/]*$/i) ) {
					var src = elems[i].src;
					src = src.substring(0, src.lastIndexOf('/'));
					this.baseURL = src;
					this.file_name= elems[i].src.substr(elems[i].src.lastIndexOf("/")+1);
					break;
				}
			}
		}
		
		docBasePath	= document.location.href;
		if (docBasePath.indexOf('?') != -1)
			docBasePath	= docBasePath.substring(0, docBasePath.indexOf('?'));
		docBasePath	= docBasePath.substring(0, docBasePath.lastIndexOf('/'));
	
		// If not HTTP absolute
		if (t.baseURL.indexOf('://') == -1 && t.baseURL.charAt(0) != '/') {
			// If site absolute
			t.baseURL = docBasePath + "/" + t.baseURL;
		}
		t.baseURL	+="/";	
	},
	
	get_button_html : function(id, img, exec, isFileSpecific, baseURL) {
		var cmd,html;
		if(!baseURL)
			baseURL= this.baseURL;
		cmd	= 'editArea.execCommand(\'' + exec + '\')';
		html	= '<a id="a_'+ id +'" href="javascript:' + cmd + '" onclick="' + cmd + ';return false;" onmousedown="return false;" target="_self" fileSpecific="'+ (isFileSpecific?'yes':'no') +'">';
// ljb		html	+= '<img id="' + id + '" src="'+ baseURL +'images/' + img + '" title="{$' + id + '}" width="20" height="20" class="editAreaButtonNormal" onmouseover="editArea.switchClass(this,\'editAreaButtonOver\');" onmouseout="editArea.restoreClass(this);" onmousedown="editArea.restoreAndSwitchClass(this,\'editAreaButtonDown\');" /></a>';
		html	+= '<img id="' + id + '" src="'+ baseURL +'images_' + img + '" title="{$' + id + '}" width="20" height="20" class="editAreaButtonNormal" onmouseover="editArea.switchClass(this,\'editAreaButtonOver\');" onmouseout="editArea.restoreClass(this);" onmousedown="editArea.restoreAndSwitchClass(this,\'editAreaButtonDown\');" /></a>';
		return html;
	},

	get_control_html : function(button_name, lang) {		
		var t=this,i,but,html,si;
		for (i=0; i<t.advanced_buttons.length; i++)
		{
			but = t.advanced_buttons[i];			
			if (but[0] == button_name)
			{
				return t.get_button_html(but[0], but[1], but[2], but[3]);
			}	
		}		
				
		switch (button_name){
			case "*":
			case "return":
				return "<br />";
			case "|":
		  	case "separator":
// ljb				return '<img src="'+ t.baseURL +'images/spacer.gif" width="1" height="15" class="editAreaSeparatorLine">';
				return '<img src="'+ t.baseURL +'images_spacer.gif" width="1" height="15" class="editAreaSeparatorLine">';
			case "select_font":
				html= "<select id='area_font_size' onchange='javascript:editArea.execCommand(\"change_font_size\")' fileSpecific='yes'>";
				html+="<option value='-1'>{$font_size}</option>";
				si=[8,9,10,11,12,14];
				for( i=0;i<si.length;i++){
					html+="<option value='"+si[i]+"'>"+si[i]+" pt</option>";
				}
				html+="</select>";
				return html;
			case "syntax_selection":
				html= "<select id='syntax_selection' onchange='javascript:editArea.execCommand(\"change_syntax\", this.value)' fileSpecific='yes'>";
				html+="<option value='-1'>{$syntax_selection}</option>";
				html+="</select>";
				return html;
		}
		
		return "<span id='tmp_tool_"+button_name+"'>["+button_name+"]</span>";		
	},
	
	
	get_template : function(){
		if(this.template=="")
		{
			var xhr_object = null; 
			if(window.XMLHttpRequest) // Firefox 
				xhr_object = new XMLHttpRequest(); 
			else if(window.ActiveXObject) // Internet Explorer 
				xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
			else { // XMLHttpRequest not supported
				alert("XMLHTTPRequest not supported. EditArea not loaded"); 
				return; 
			} 
			 
			xhr_object.open("GET", this.baseURL+"template.html", false); 
			xhr_object.send(null); 
			if(xhr_object.readyState == 4) 
				this.template=xhr_object.responseText;
			else
				this.has_error();
		}
	},
	
	// translate text
	translate : function(text, lang, mode){
		if(mode=="word")
			text=editAreaLoader.get_word_translation(text, lang);
		else if(mode="template"){
			editAreaLoader.current_language= lang;
			text=text.replace(/\{\$([^\}]+)\}/gm, editAreaLoader.translate_template);
		}
		return text;
	},
	
	translate_template : function(){
		return editAreaLoader.get_word_translation(EditAreaLoader.prototype.translate_template.arguments[1], editAreaLoader.current_language);
	},
	
	get_word_translation : function(val, lang){
		var i;
		
		for( i in editAreaLoader.lang[lang]){
			if(i == val)
				return editAreaLoader.lang[lang][i];
		}
		return "_"+val;
	},
	
	load_script : function(url){
		var t=this,d=document,script,head;
		
		if( t.loadedFiles[url] )
			return;	
		//alert("load: "+url);
		try{
			script= d.createElement("script");
			script.type= "text/javascript";
			script.src= url;
			script.charset= "UTF-8";
			d.getElementsByTagName("head")[0].appendChild(script);
		}catch(e){
			d.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '" charset="UTF-8"></sc'+'ript>');
		}
		
		t.loadedFiles[url] = true;
	},
	
	add_event : function(obj, name, handler) {
		try{
			if (obj.attachEvent) {
				obj.attachEvent("on" + name, handler);
			} else{
				obj.addEventListener(name, handler, false);
			}
		}catch(e){}
	},
	
	remove_event : function(obj, name, handler){
		try{
			if (obj.detachEvent)
				obj.detachEvent("on" + name, handler);
			else
				obj.removeEventListener(name, handler, false);
		}catch(e){}
	},


	// reset all the editareas in the form that have been reseted
	reset : function(e){
		var formObj,is_child,i,x;
		
		formObj = editAreaLoader.isIE ? window.event.srcElement : e.target;
		if(formObj.tagName!='FORM')
			formObj= formObj.form;
		
		for( i in editAreas ){			
			is_child= false;
			for( x=0;x<formObj.elements.length;x++ ) {
				if(formObj.elements[x].id == i)
					is_child=true;
			}
			
			if(window.frames["frame_"+i] && is_child && editAreas[i]["displayed"]==true){
			
				var exec= 'window.frames["frame_'+ i +'"].editArea.textarea.value= document.getElementById("'+ i +'").value;';
				exec+= 'window.frames["frame_'+ i +'"].editArea.execCommand("focus");';
				exec+= 'window.frames["frame_'+ i +'"].editArea.check_line_selection();';
				exec+= 'window.frames["frame_'+ i +'"].editArea.execCommand("reset");';
				window.setTimeout(exec, 10);
			}
		}		
		return;
	},
	
	
	// prepare all the textarea replaced by an editarea to be submited
	submit : function(e){		
		var formObj,is_child,fs=window.frames,i,x;
		formObj = editAreaLoader.isIE ? window.event.srcElement : e.target;
		if(formObj.tagName!='FORM')
			formObj= formObj.form;
		
		for( i in editAreas){
			is_child= false;
			for( x=0;x<formObj.elements.length;x++ ) {
				if(formObj.elements[x].id == i)
					is_child=true;
			}
		
			if(is_child)
			{
				if(fs["frame_"+i] && editAreas[i]["displayed"]==true)
					document.getElementById(i).value= fs["frame_"+ i].editArea.textarea.value;
				editAreaLoader.execCommand(i,"EA_submit");
			}
		}				
		if( typeof(formObj.edit_area_replaced_submit) == "function" ){
			res= formObj.edit_area_replaced_submit();
			if(res==false){
				if(editAreaLoader.isIE)
					return false;
				else
					e.preventDefault();
			}
		}
		return;
	},
	
	// allow to get the value of the editarea
	getValue : function(id){
        if(window.frames["frame_"+id] && editAreas[id]["displayed"]==true){
            return window.frames["frame_"+ id].editArea.textarea.value;       
        }else if(elem=document.getElementById(id)){
        	return elem.value;
        }
        return false;
    },
    
    // allow to set the value of the editarea
    setValue : function(id, new_val){
    	var fs=window.frames;
    	
        if( ( f=fs["frame_"+id] ) && editAreas[id]["displayed"]==true){
			f.editArea.textarea.value= new_val;     
			f.editArea.execCommand("focus"); 
			f.editArea.check_line_selection(false);  
			f.editArea.execCommand("onchange");
        }else if(elem=document.getElementById(id)){
        	elem.value= new_val;
        }
    },
	    
    // allow to get infos on the selection: array(start, end)
    getSelectionRange : function(id){
    	var sel,eA,fs=window.frames;
    	
    	sel= {"start": 0, "end": 0};
        if(fs["frame_"+id] && editAreas[id]["displayed"]==true){
        	eA= fs["frame_"+ id].editArea;

			sel["start"]	= eA.textarea.selectionStart;
			sel["end"]		= eA.textarea.selectionEnd;
		
        }else if( elem=document.getElementById(id) ){
        	sel= getSelectionRange(elem);
        }
        return sel;
    },
    
    // allow to set the selection with the given start and end positions
    setSelectionRange : function(id, new_start, new_end){
    	var fs=window.frames;
    	
        if(fs["frame_"+id] && editAreas[id]["displayed"]==true){
            fs["frame_"+ id].editArea.area_select(new_start, new_end-new_start);  
			// make an auto-scroll to the selection
			if(!this.isIE){
				fs["frame_"+ id].editArea.check_line_selection(false); 
				fs["frame_"+ id].editArea.scroll_to_view();
			}   
        }else if(elem=document.getElementById(id)){
        	setSelectionRange(elem, new_start, new_end);
        }
    },
    
    getSelectedText : function(id){
    	var sel= this.getSelectionRange(id);
    	
        return this.getValue(id).substring(sel["start"], sel["end"]);
    },
	
	setSelectedText : function(id, new_val){
		var fs=window.frames,d=document,sel,text,scrollTop,scrollLeft,new_sel_end;
		
		new_val	= new_val.replace(/\r/g, ""); 
		sel		= this.getSelectionRange(id);
		text	= this.getValue(id);
		if(fs["frame_"+id] && editAreas[id]["displayed"]==true){
			scrollTop	= fs["frame_"+ id].document.getElementById("result").scrollTop;
			scrollLeft	= fs["frame_"+ id].document.getElementById("result").scrollLeft;
		}else{
			scrollTop	= d.getElementById(id).scrollTop;
			scrollLeft	= d.getElementById(id).scrollLeft;
		}
		
		text	= text.substring(0, sel["start"])+ new_val +text.substring(sel["end"]);
		this.setValue(id, text);
		new_sel_end	= sel["start"]+ new_val.length;
		this.setSelectionRange(id, sel["start"], new_sel_end);
		
		
		// fix \r problem for selection length count on IE & Opera
		if(new_val != this.getSelectedText(id).replace(/\r/g, "")){
			this.setSelectionRange(id, sel["start"], new_sel_end+ new_val.split("\n").length -1);
		}
		// restore scrolling position
		if(fs["frame_"+id] && editAreas[id]["displayed"]==true){
			fs["frame_"+ id].document.getElementById("result").scrollTop= scrollTop;
			fs["frame_"+ id].document.getElementById("result").scrollLeft= scrollLeft;
			fs["frame_"+ id].editArea.execCommand("onchange");
		}else{
			d.getElementById(id).scrollTop= scrollTop;
			d.getElementById(id).scrollLeft= scrollLeft;
		}
    },
    
    insertTags : function(id, open_tag, close_tag){
    	var old_sel,new_sel;
    	
    	old_sel	= this.getSelectionRange(id);
    	text	= open_tag + this.getSelectedText(id) + close_tag;
    	 
		editAreaLoader.setSelectedText(id, text);
		
    	new_sel	= this.getSelectionRange(id);
    	if(old_sel["end"] > old_sel["start"])	// if text was selected, cursor at the end
    		this.setSelectionRange(id, new_sel["end"], new_sel["end"]);
    	else // cursor in the middle
    		this.setSelectionRange(id, old_sel["start"]+open_tag.length, old_sel["start"]+open_tag.length);
    },
    
    // hide both EditArea and normal textarea
	hide : function(id){
		var fs= window.frames,d=document,t=this,scrollTop,scrollLeft,span;
		if(d.getElementById(id) && !t.hidden[id])
		{
			t.hidden[id]= {};
			t.hidden[id]["selectionRange"]= t.getSelectionRange(id);
			if(d.getElementById(id).style.display!="none")
			{
				t.hidden[id]["scrollTop"]= d.getElementById(id).scrollTop;
				t.hidden[id]["scrollLeft"]= d.getElementById(id).scrollLeft;
			}
					
			if(fs["frame_"+id])
			{
				t.hidden[id]["toggle"]= editAreas[id]["displayed"];
				
				if(fs["frame_"+id] && editAreas[id]["displayed"]==true){
					scrollTop	= fs["frame_"+ id].document.getElementById("result").scrollTop;
					scrollLeft	= fs["frame_"+ id].document.getElementById("result").scrollLeft;
				}else{
					scrollTop	= d.getElementById(id).scrollTop;
					scrollLeft	= d.getElementById(id).scrollLeft;
				}
				t.hidden[id]["scrollTop"]= scrollTop;
				t.hidden[id]["scrollLeft"]= scrollLeft;
				
				if(editAreas[id]["displayed"]==true)
					editAreaLoader.toggle_off(id);
			}
			
			// hide toggle button and debug box
			span= d.getElementById("EditAreaArroundInfos_"+id);
			if(span){
				span.style.display='none';
			}
			
			// hide textarea
			d.getElementById(id).style.display= "none";
		}
	},
	
	// restore hidden EditArea and normal textarea
	show : function(id){
		var fs= window.frames,d=document,t=this,span;
		if((elem=d.getElementById(id)) && t.hidden[id])
		{
			elem.style.display= "inline";
			elem.scrollTop= t.hidden[id]["scrollTop"];
			elem.scrollLeft= t.hidden[id]["scrollLeft"];
			span= d.getElementById("EditAreaArroundInfos_"+id);
			if(span){
				span.style.display='inline';
			}
			
			if(fs["frame_"+id])
			{
								
				// restore toggle button and debug box
			
				
				// restore textarea
				elem.style.display= "inline";
				
				// restore EditArea
				if(t.hidden[id]["toggle"]==true)
					editAreaLoader.toggle_on(id);
				
				scrollTop	= t.hidden[id]["scrollTop"];
				scrollLeft	= t.hidden[id]["scrollLeft"];
				
				if(fs["frame_"+id] && editAreas[id]["displayed"]==true){
					fs["frame_"+ id].document.getElementById("result").scrollTop	= scrollTop;
					fs["frame_"+ id].document.getElementById("result").scrollLeft	= scrollLeft;
				}else{
					elem.scrollTop	= scrollTop;
					elem.scrollLeft	= scrollLeft;
				}
			
			}
			// restore selection
			sel	= t.hidden[id]["selectionRange"];
			t.setSelectionRange(id, sel["start"], sel["end"]);
			delete t.hidden[id];	
		}
	},
	
	// get the current file datas (for multi file editing mode)
	getCurrentFile : function(id){
		return this.execCommand(id, 'get_file', this.execCommand(id, 'curr_file'));
	},
	
	// get the given file datas (for multi file editing mode)
	getFile : function(id, file_id){
		return this.execCommand(id, 'get_file', file_id);
	},
	
	// get all the openned files datas (for multi file editing mode)
	getAllFiles : function(id){
		return this.execCommand(id, 'get_all_files()');
	},
	
	// open a file (for multi file editing mode)
	openFile : function(id, file_infos){
		return this.execCommand(id, 'open_file', file_infos);
	},
	
	// close the given file (for multi file editing mode)
	closeFile : function(id, file_id){
		return this.execCommand(id, 'close_file', file_id);
	},
	
	// close the given file (for multi file editing mode)
	setFileEditedMode : function(id, file_id, to){
		var reg1,reg2;
		reg1	= new RegExp('\\\\', 'g');
		reg2	= new RegExp('"', 'g');
		return this.execCommand(id, 'set_file_edited_mode("'+ file_id.replace(reg1, '\\\\').replace(reg2, '\\"') +'", '+ to +')');
	},
	
	
	// allow to access to editarea functions and datas (for advanced users only)
	execCommand : function(id, cmd, fct_param){
		switch(cmd){
			case "EA_init":
				if(editAreas[id]['settings']["EA_init_callback"].length>0)
					eval(editAreas[id]['settings']["EA_init_callback"]+"('"+ id +"');");
				break;
			case "EA_delete":
				if(editAreas[id]['settings']["EA_delete_callback"].length>0)
					eval(editAreas[id]['settings']["EA_delete_callback"]+"('"+ id +"');");
				break;
			case "EA_submit":
				if(editAreas[id]['settings']["submit_callback"].length>0)
					eval(editAreas[id]['settings']["submit_callback"]+"('"+ id +"');");
				break;
		}
        if(window.frames["frame_"+id] && window.frames["frame_"+ id].editArea){
			if(fct_param!=undefined)
				return eval('window.frames["frame_'+ id +'"].editArea.'+ cmd +'(fct_param);');
			else
				return eval('window.frames["frame_'+ id +'"].editArea.'+ cmd +';');       
        }
        return false;
    }
};
	
	var editAreaLoader= new EditAreaLoader();
	var editAreas= {};

// resize_area.js

	
	EditAreaLoader.prototype.start_resize_area= function(){
		var d=document,a,div,width,height,father;
		
		d.onmouseup= editAreaLoader.end_resize_area;
		d.onmousemove= editAreaLoader.resize_area;
		editAreaLoader.toggle(editAreaLoader.resize["id"]);		
		
		a	= editAreas[editAreaLoader.resize["id"]]["textarea"];
		div	= d.getElementById("edit_area_resize");
		if(!div){
			div= d.createElement("div");
			div.id="edit_area_resize";
			div.style.border="dashed #888888 1px";
		}
		width	= a.offsetWidth -2;
		height	= a.offsetHeight -2;
		
		div.style.display	= "block";
		div.style.width		= width+"px";
		div.style.height	= height+"px";
		father= a.parentNode;
		father.insertBefore(div, a);
		
		a.style.display="none";
				
		editAreaLoader.resize["start_top"]= calculeOffsetTop(div);
		editAreaLoader.resize["start_left"]= calculeOffsetLeft(div);		
	};
	
	EditAreaLoader.prototype.end_resize_area= function(e){
		var d=document,div,a,width,height;
		
		d.onmouseup="";
		d.onmousemove="";		
		
		div		= d.getElementById("edit_area_resize");		
		a= editAreas[editAreaLoader.resize["id"]]["textarea"];
		width	= Math.max(editAreas[editAreaLoader.resize["id"]]["settings"]["min_width"], div.offsetWidth-4);
		height	= Math.max(editAreas[editAreaLoader.resize["id"]]["settings"]["min_height"], div.offsetHeight-4);
		if(editAreaLoader.isIE==6){
			width-=2;
			height-=2;	
		}
		a.style.width		= width+"px";
		a.style.height		= height+"px";
		div.style.display	= "none";
		a.style.display		= "inline";
		a.selectionStart	= editAreaLoader.resize["selectionStart"];
		a.selectionEnd		= editAreaLoader.resize["selectionEnd"];
		editAreaLoader.toggle(editAreaLoader.resize["id"]);
		
		return false;
	};
	
	EditAreaLoader.prototype.resize_area= function(e){		
		var allow,newHeight,newWidth;
		allow	= editAreas[editAreaLoader.resize["id"]]["settings"]["allow_resize"];
		if(allow=="both" || allow=="y")
		{
			newHeight	= Math.max(20, getMouseY(e)- editAreaLoader.resize["start_top"]);
			document.getElementById("edit_area_resize").style.height= newHeight+"px";
		}
		if(allow=="both" || allow=="x")
		{
			newWidth= Math.max(20, getMouseX(e)- editAreaLoader.resize["start_left"]);
			document.getElementById("edit_area_resize").style.width= newWidth+"px";
		}
		
		return false;
	};
	
	editAreaLoader.waiting_loading["resize_area.js"]= "loaded";

// edit_area.js

/******
 *
 *	EditArea 
 * 	Developped by Christophe Dolivet
 *	Released under LGPL, Apache and BSD licenses (use the one you want)
 *
******/

	function EditArea(){
		var t=this;
		t.error= false;	// to know if load is interrrupt
		
		t.inlinePopup= [{popup_id: "area_search_replace", icon_id: "search"},
									{popup_id: "edit_area_help", icon_id: "help"}];
		t.plugins= {};
	
		t.line_number=0;
		
		parent.editAreaLoader.set_browser_infos(t); 	// navigator identification
		// fix IE8 detection as we run in IE7 emulate mode through X-UA <meta> tag
		if( t.isIE >= 8 )
			t.isIE	= 7;
		
		t.last_selection={};		
		t.last_text_to_highlight="";
		t.last_hightlighted_text= "";
		t.syntax_list= [];
		t.allready_used_syntax= {};
		t.check_line_selection_timer= 50;	// the timer delay for modification and/or selection change detection
		
		t.textareaFocused= false;
		t.highlight_selection_line= null;
		t.previous= [];
		t.next= [];
		t.last_undo="";
		t.files= {};
		t.filesIdAssoc= {};
		t.curr_file= '';
		//t.loaded= false;
		t.assocBracket={};
		t.revertAssocBracket= {};		
		// bracket selection init 
		t.assocBracket["("]=")";
		t.assocBracket["{"]="}";
		t.assocBracket["["]="]";		
		for(var index in t.assocBracket){
			t.revertAssocBracket[t.assocBracket[index]]=index;
		}
		t.is_editable= true;
		
		
		/*t.textarea="";	
		
		t.state="declare";
		t.code = []; // store highlight syntax for languagues*/
		// font datas
		t.lineHeight= 16;
		/*t.default_font_family= "monospace";
		t.default_font_size= 10;*/
		t.tab_nb_char= 8;	//nb of white spaces corresponding to a tabulation
		if(t.isOpera)
			t.tab_nb_char= 6;

		t.is_tabbing= false;
		
		t.fullscreen= {'isFull': false};
		
		t.isResizing=false;	// resize var
		
		// init with settings and ID (area_id is a global var defined by editAreaLoader on iframe creation
		t.id= area_id;
		t.settings= editAreas[t.id]["settings"];
		
		if((""+t.settings['replace_tab_by_spaces']).match(/^[0-9]+$/))
		{
			t.tab_nb_char= t.settings['replace_tab_by_spaces'];
			t.tabulation="";
			for(var i=0; i<t.tab_nb_char; i++)
				t.tabulation+=" ";
		}else{
			t.tabulation="\t";
		}
			
		// retrieve the init parameter for syntax
		if(t.settings["syntax_selection_allow"] && t.settings["syntax_selection_allow"].length>0)
			t.syntax_list= t.settings["syntax_selection_allow"].replace(/ /g,"").split(",");
		
		if(t.settings['syntax'])
			t.allready_used_syntax[t.settings['syntax']]=true;
		
		
	};
	EditArea.prototype.init= function(){
		var t=this, a, s=t.settings;
		t.textarea			= _$("textarea");
		t.container			= _$("container");
		t.result			= _$("result");
		t.content_highlight	= _$("content_highlight");
		t.selection_field	= _$("selection_field");
		t.selection_field_text= _$("selection_field_text");
		t.processing_screen	= _$("processing");
		t.editor_area		= _$("editor");
		t.tab_browsing_area	= _$("tab_browsing_area");
		t.test_font_size	= _$("test_font_size");
		a = t.textarea;
		
		if(!s['is_editable'])
			t.set_editable(false);
		
		t.set_show_line_colors( s['show_line_colors'] );
		
		if(syntax_selec= _$("syntax_selection"))
		{
			// set up syntax selection lsit in the toolbar
			for(var i=0; i<t.syntax_list.length; i++) {
				var syntax= t.syntax_list[i];
				var option= document.createElement("option");
				option.value= syntax;
				if(syntax==s['syntax'])
					option.selected= "selected";
				option.innerHTML= t.get_translation("syntax_" + syntax, "word");
				syntax_selec.appendChild(option);
			}
		}
		
		// add plugins buttons in the toolbar
		spans= parent.getChildren(_$("toolbar_1"), "span", "", "", "all", -1);
		
		for(var i=0; i<spans.length; i++){
		
			id=spans[i].id.replace(/tmp_tool_(.*)/, "$1");
			if(id!= spans[i].id){
				for(var j in t.plugins){
					if(typeof(t.plugins[j].get_control_html)=="function" ){
						html=t.plugins[j].get_control_html(id);
						if(html!=false){
							html= t.get_translation(html, "template");
							var new_span= document.createElement("span");
							new_span.innerHTML= html;				
							var father= spans[i].parentNode;
							spans[i].parentNode.replaceChild(new_span, spans[i]);	
							break; // exit the for loop					
						}
					}
				}
			}
		}
		
		// init datas
		//a.value	= 'a';//editAreas[t.id]["textarea"].value;
	
		if(s["debug"])
		{
			t.debug=parent.document.getElementById("edit_area_debug_"+t.id);
		}
		// init size		
		//this.update_size();
		
		if(_$("redo") != null)
			t.switchClassSticky(_$("redo"), 'editAreaButtonDisabled', true);
		
		// insert css rules for highlight mode		
		if(typeof(parent.editAreaLoader.syntax[s["syntax"]])!="undefined"){
			for(var i in parent.editAreaLoader.syntax){
				if (typeof(parent.editAreaLoader.syntax[i]["styles"]) != "undefined"){
					t.add_style(parent.editAreaLoader.syntax[i]["styles"]);
				}
			}
		}
	
		// init key events
		if(t.isOpera)
			_$("editor").onkeypress	= keyDown;
		else
			_$("editor").onkeydown	= keyDown;

		for(var i=0; i<t.inlinePopup.length; i++){
			if(t.isOpera)
				_$(t.inlinePopup[i]["popup_id"]).onkeypress	= keyDown;
			else
				_$(t.inlinePopup[i]["popup_id"]).onkeydown	= keyDown;
		}
		
		if(s["allow_resize"]=="both" || s["allow_resize"]=="x" || s["allow_resize"]=="y")
			t.allow_resize(true);
		
		parent.editAreaLoader.toggle(t.id, "on");
		//a.focus();
		// line selection init
		t.change_smooth_selection_mode(editArea.smooth_selection);
		// highlight
		t.execCommand("change_highlight", s["start_highlight"]);
	
		// get font size datas		
		t.set_font(editArea.settings["font_family"], editArea.settings["font_size"]);
		
		// set unselectable text
		children= parent.getChildren(document.body, "", "selec", "none", "all", -1);
		for(var i=0; i<children.length; i++){
			if(t.isIE)
				children[i].unselectable = true; // IE
			else
				children[i].onmousedown= function(){return false};
		/*	children[i].style.MozUserSelect = "none"; // Moz
			children[i].style.KhtmlUserSelect = "none";  // Konqueror/Safari*/
		}
		
		a.spellcheck= s["gecko_spellcheck"];
	
		/** Browser specific style fixes **/
		
		// fix rendering bug for highlighted lines beginning with no tabs
		if( t.isFirefox >= '3' ) {
			t.content_highlight.style.paddingLeft= "1px";
			t.selection_field.style.paddingLeft= "1px";
			t.selection_field_text.style.paddingLeft= "1px";
		}
		
		if(t.isIE && t.isIE < 8 ){
			a.style.marginTop= "-1px";
		}
		/*
		if(t.isOpera){
			t.editor_area.style.position= "absolute";
		}*/
		
		if( t.isSafari ){
			t.editor_area.style.position	= "absolute";
			a.style.marginLeft		="-3px";
			if( t.isSafari < 3.2 ) // Safari 3.0 (3.1?)
				a.style.marginTop	="1px";
		}
		
		// si le textarea n'est pas grand, un click sous le textarea doit provoquer un focus sur le textarea
		parent.editAreaLoader.add_event(t.result, "click", function(e){ if((e.target || e.srcElement)==editArea.result) { editArea.area_select(editArea.textarea.value.length, 0);}  });
		
		if(s['is_multi_files']!=false)
			t.open_file({'id': t.curr_file, 'text': ''});
	
		t.set_word_wrap( s['word_wrap'] );
		
		setTimeout("editArea.focus();editArea.manage_size();editArea.execCommand('EA_load');", 10);		
		//start checkup routine
		t.check_undo();
		t.check_line_selection(true);
		t.scroll_to_view();
		
		for(var i in t.plugins){
			if(typeof(t.plugins[i].onload)=="function")
				t.plugins[i].onload();
		}
		if(s['fullscreen']==true)
			t.toggle_full_screen(true);
	
		parent.editAreaLoader.add_event(window, "resize", editArea.update_size);
		parent.editAreaLoader.add_event(parent.window, "resize", editArea.update_size);
		parent.editAreaLoader.add_event(top.window, "resize", editArea.update_size);
		parent.editAreaLoader.add_event(window, "unload", function(){
			// in case where editAreaLoader have been already cleaned
			if( parent.editAreaLoader )
			{
				parent.editAreaLoader.remove_event(parent.window, "resize", editArea.update_size);
		  		parent.editAreaLoader.remove_event(top.window, "resize", editArea.update_size);
			}
			if(editAreas[editArea.id] && editAreas[editArea.id]["displayed"]){
				editArea.execCommand("EA_unload");
			}
		});
		
		
		/*date= new Date();
		alert(date.getTime()- parent.editAreaLoader.start_time);*/
	};
	
	
	
	//called by the toggle_on
	EditArea.prototype.update_size= function(){
		var d=document,pd=parent.document,height,width,popup,maxLeft,maxTop;
		
		if( typeof editAreas != 'undefined' && editAreas[editArea.id] && editAreas[editArea.id]["displayed"]==true){
			if(editArea.fullscreen['isFull']){	
				pd.getElementById("frame_"+editArea.id).style.width		= pd.getElementsByTagName("html")[0].clientWidth + "px";
				pd.getElementById("frame_"+editArea.id).style.height	= pd.getElementsByTagName("html")[0].clientHeight + "px";
			}
			
			if(editArea.tab_browsing_area.style.display=='block' && ( !editArea.isIE || editArea.isIE >= 8 ) )
			{
				editArea.tab_browsing_area.style.height	= "0px";
				editArea.tab_browsing_area.style.height	= (editArea.result.offsetTop - editArea.tab_browsing_area.offsetTop -1)+"px";
			}
			
			height	= d.body.offsetHeight - editArea.get_all_toolbar_height() - 4;
			editArea.result.style.height	= height +"px";
			
			width	= d.body.offsetWidth -2;
			editArea.result.style.width		= width+"px";
			//alert("result h: "+ height+" w: "+width+"\ntoolbar h: "+this.get_all_toolbar_height()+"\nbody_h: "+document.body.offsetHeight);
			
			// check that the popups don't get out of the screen
			for( i=0; i < editArea.inlinePopup.length; i++ )
			{
				popup	= _$(editArea.inlinePopup[i]["popup_id"]);
				maxLeft	= d.body.offsetWidth - popup.offsetWidth;
				maxTop	= d.body.offsetHeight - popup.offsetHeight;
				if( popup.offsetTop > maxTop )
					popup.style.top		= maxTop+"px";
				if( popup.offsetLeft > maxLeft )
					popup.style.left	= maxLeft+"px";
			}
			
			editArea.manage_size( true );
			editArea.fixLinesHeight( editArea.textarea.value, 0,-1);
		}		
	};
	
	
	EditArea.prototype.manage_size= function(onlyOneTime){
		if(!editAreas[this.id])
			return false;
			
		if(editAreas[this.id]["displayed"]==true && this.textareaFocused)
		{
			var area_height,resized= false;
			
			//1) Manage display width
			//1.1) Calc the new width to use for display
			if( !this.settings['word_wrap'] )
			{
				var area_width= this.textarea.scrollWidth;
				area_height= this.textarea.scrollHeight;
				// bug on old opera versions
				if(this.isOpera && this.isOpera < 9.6 ){
					area_width=10000; 								
				}
				//1.2) the width is not the same, we must resize elements
				if(this.textarea.previous_scrollWidth!=area_width)
				{	
					this.container.style.width= area_width+"px";
					this.textarea.style.width= area_width+"px";
					this.content_highlight.style.width= area_width+"px";	
					this.textarea.previous_scrollWidth=area_width;
					resized=true;
				}
			}
			// manage wrap width
			if( this.settings['word_wrap'] )
			{
				newW=this.textarea.offsetWidth;
				if( this.isFirefox || this.isIE )
					newW-=2;
				if( this.isSafari )
					newW-=6;
				this.content_highlight.style.width=this.selection_field_text.style.width=this.selection_field.style.width=this.test_font_size.style.width=newW+"px";
			}
			
			//2) Manage display height
			//2.1) Calc the new height to use for display
			if( this.isOpera || this.isFirefox || this.isSafari ) { 
				area_height= this.getLinePosTop( this.last_selection["nb_line"] + 1 );
			} else {
				area_height = this.textarea.scrollHeight;
			}	
			//2.2) the width is not the same, we must resize elements 
			if(this.textarea.previous_scrollHeight!=area_height)	
			{	
				this.container.style.height= (area_height+2)+"px";
				this.textarea.style.height= area_height+"px";
				this.content_highlight.style.height= area_height+"px";	
				this.textarea.previous_scrollHeight= area_height;
				resized=true;
			}
		
			//3) if there is new lines, we add new line numbers in the line numeration area
			if(this.last_selection["nb_line"] >= this.line_number)
			{
				var newLines= '', destDiv=_$("line_number"), start=this.line_number, end=this.last_selection["nb_line"]+100;
				for( i = start+1; i < end; i++ )
				{
					newLines+='<div id="line_'+ i +'">'+i+"</div>";
					this.line_number++;
				}
				destDiv.innerHTML= destDiv.innerHTML + newLines;
				
				this.fixLinesHeight( this.textarea.value, start, -1 );
			}
		
			//4) be sure the text is well displayed
			this.textarea.scrollTop="0px";
			this.textarea.scrollLeft="0px";
			if(resized==true){
				this.scroll_to_view();
			}
		}
		
		if(!onlyOneTime)
			setTimeout("editArea.manage_size();", 100);
	};
	
	EditArea.prototype.execCommand= function(cmd, param){
		
		for(var i in this.plugins){
			if(typeof(this.plugins[i].execCommand)=="function"){
				if(!this.plugins[i].execCommand(cmd, param))
					return;
			}
		}
		switch(cmd){
			case "save":
				if(this.settings["save_callback"].length>0)
					eval("parent."+this.settings["save_callback"]+"('"+ this.id +"', editArea.textarea.value);");
				break;
			case "load":
				if(this.settings["load_callback"].length>0)
					eval("parent."+this.settings["load_callback"]+"('"+ this.id +"');");
				break;
			case "onchange":
				if(this.settings["change_callback"].length>0)
					eval("parent."+this.settings["change_callback"]+"('"+ this.id +"');");
				break;		
			case "EA_load":
				if(this.settings["EA_load_callback"].length>0)
					eval("parent."+this.settings["EA_load_callback"]+"('"+ this.id +"');");
				break;
			case "EA_unload":
				if(this.settings["EA_unload_callback"].length>0)
					eval("parent."+this.settings["EA_unload_callback"]+"('"+ this.id +"');");
				break;
			case "toggle_on":
				if(this.settings["EA_toggle_on_callback"].length>0)
					eval("parent."+this.settings["EA_toggle_on_callback"]+"('"+ this.id +"');");
				break;
			case "toggle_off":
				if(this.settings["EA_toggle_off_callback"].length>0)
					eval("parent."+this.settings["EA_toggle_off_callback"]+"('"+ this.id +"');");
				break;
			case "re_sync":
				if(!this.do_highlight)
					break;
			case "file_switch_on":
				if(this.settings["EA_file_switch_on_callback"].length>0)
					eval("parent."+this.settings["EA_file_switch_on_callback"]+"(param);");
				break;
			case "file_switch_off":
				if(this.settings["EA_file_switch_off_callback"].length>0)
					eval("parent."+this.settings["EA_file_switch_off_callback"]+"(param);");
				break;
			case "file_close":
				if(this.settings["EA_file_close_callback"].length>0)
					return eval("parent."+this.settings["EA_file_close_callback"]+"(param);");
				break;
			
			default:
				if(typeof(eval("editArea."+cmd))=="function")
				{
					if(this.settings["debug"])
						eval("editArea."+ cmd +"(param);");
					else
						try{eval("editArea."+ cmd +"(param);");}catch(e){};
				}
		}
	};
	
	EditArea.prototype.get_translation= function(word, mode){
		if(mode=="template")
			return parent.editAreaLoader.translate(word, this.settings["language"], mode);
		else
			return parent.editAreaLoader.get_word_translation(word, this.settings["language"]);
	};
	
	EditArea.prototype.add_plugin= function(plug_name, plug_obj){
		for(var i=0; i<this.settings["plugins"].length; i++){
			if(this.settings["plugins"][i]==plug_name){
				this.plugins[plug_name]=plug_obj;
				plug_obj.baseURL=parent.editAreaLoader.baseURL + "plugins/" + plug_name + "/";
				if( typeof(plug_obj.init)=="function" )
					plug_obj.init();
			}
		}
	};
	
	EditArea.prototype.load_css= function(url){
		try{
			link = document.createElement("link");
			link.type = "text/css";
			link.rel= "stylesheet";
			link.media="all";
			link.href = url;
			head = document.getElementsByTagName("head");
			head[0].appendChild(link);
		}catch(e){
			document.write("<link href='"+ url +"' rel='stylesheet' type='text/css' />");
		}
	};
	
	EditArea.prototype.load_script= function(url){
		try{
			script = document.createElement("script");
			script.type = "text/javascript";
			script.src  = url;
			script.charset= "UTF-8";
			head = document.getElementsByTagName("head");
			head[0].appendChild(script);
		}catch(e){
			document.write("<script type='text/javascript' src='" + url + "' charset=\"UTF-8\"><"+"/script>");
		}
	};
	
	// add plugin translation to language translation array
	EditArea.prototype.add_lang= function(language, values){
		if(!parent.editAreaLoader.lang[language])
			parent.editAreaLoader.lang[language]={};
		for(var i in values)
			parent.editAreaLoader.lang[language][i]= values[i];
	};
	
	// short cut for document.getElementById()
	function _$(id){return document.getElementById( id );};

	var editArea = new EditArea();	
	parent.editAreaLoader.add_event(window, "load", init);
	
	function init(){		
		setTimeout("editArea.init();  ", 10);
	};

// elements_functions.js

/****
 * This page contains some general usefull functions for javascript
 *
 ****/  
	
	
	// need to redefine this functiondue to IE problem
	function getAttribute( elm, aName ) {
		var aValue,taName,i;
		try{
			aValue = elm.getAttribute( aName );
		}catch(exept){}
		
		if( ! aValue ){
			for( i = 0; i < elm.attributes.length; i ++ ) {
				taName = elm.attributes[i] .name.toLowerCase();
				if( taName == aName ) {
					aValue = elm.attributes[i] .value;
					return aValue;
				}
			}
		}
		return aValue;
	};
	
	// need to redefine this function due to IE problem
	function setAttribute( elm, attr, val ) {
		if(attr=="class"){
			elm.setAttribute("className", val);
			elm.setAttribute("class", val);
		}else{
			elm.setAttribute(attr, val);
		}
	};
	
	/* return a child element
		elem: element we are searching in
		elem_type: type of the eleemnt we are searching (DIV, A, etc...)
		elem_attribute: attribute of the searched element that must match
		elem_attribute_match: value that elem_attribute must match
		option: "all" if must return an array of all children, otherwise return the first match element
		depth: depth of search (-1 or no set => unlimited)
	*/
	function getChildren(elem, elem_type, elem_attribute, elem_attribute_match, option, depth)
	{           
		if(!option)
			var option="single";
		if(!depth)
			var depth=-1;
		if(elem){
			var children= elem.childNodes;
			var result=null;
			var results= [];
			for (var x=0;x<children.length;x++) {
				strTagName = new String(children[x].tagName);
				children_class="?";
				if(strTagName!= "undefined"){
					child_attribute= getAttribute(children[x],elem_attribute);
					if((strTagName.toLowerCase()==elem_type.toLowerCase() || elem_type=="") && (elem_attribute=="" || child_attribute==elem_attribute_match)){
						if(option=="all"){
							results.push(children[x]);
						}else{
							return children[x];
						}
					}
					if(depth!=0){
						result=getChildren(children[x], elem_type, elem_attribute, elem_attribute_match, option, depth-1);
						if(option=="all"){
							if(result.length>0){
								results= results.concat(result);
							}
						}else if(result!=null){                                                                          
							return result;
						}
					}
				}
			}
			if(option=="all")
			   return results;
		}
		return null;
	};       
	
	function isChildOf(elem, parent){
		if(elem){
			if(elem==parent)
				return true;
			while(elem.parentNode != 'undefined'){
				return isChildOf(elem.parentNode, parent);
			}
		}
		return false;
	};
	
	function getMouseX(e){

		if(e!=null && typeof(e.pageX)!="undefined"){
			return e.pageX;
		}else{
			return (e!=null?e.x:event.x)+ document.documentElement.scrollLeft;
		}
	};
	
	function getMouseY(e){
		if(e!=null && typeof(e.pageY)!="undefined"){
			return e.pageY;
		}else{
			return (e!=null?e.y:event.y)+ document.documentElement.scrollTop;
		}
	};
	
	function calculeOffsetLeft(r){
		return calculeOffset(r,"offsetLeft")
	};
	
	function calculeOffsetTop(r){
		return calculeOffset(r,"offsetTop")
	};
	
	function calculeOffset(element,attr){
		var offset=0;
		while(element){
			offset+=element[attr];
			element=element.offsetParent
		}
		return offset;
	};
	
	/** return the computed style
	 *	@param: elem: the reference to the element
	 *	@param: prop: the name of the css property	 
	 */
	function get_css_property(elem, prop)
	{
		if(document.defaultView)
		{
			return document.defaultView.getComputedStyle(elem, null).getPropertyValue(prop);
		}
		else if(elem.currentStyle)
		{
			var prop = prop.replace(/-\D/gi, function(sMatch)
			{
				return sMatch.charAt(sMatch.length - 1).toUpperCase();
			});
			return elem.currentStyle[prop];
		}
		else return null;
	}
	
/****
 * Moving an element 
 ***/  
	
	var _mCE;	// currently moving element
	
	/* allow to move an element in a window
		e: the event
		id: the id of the element
		frame: the frame of the element 
		ex of use:
			in html:	<img id='move_area_search_replace' onmousedown='return parent.start_move_element(event,"area_search_replace", parent.frames["this_frame_id"]);' .../>  
		or
			in javascript: document.getElementById("my_div").onmousedown= start_move_element
	*/
	function start_move_element(e, id, frame){
		var elem_id=(e.target || e.srcElement).id;
		if(id)
			elem_id=id;		
		if(!frame)
			frame=window;
		if(frame.event)
			e=frame.event;
			
		_mCE= frame.document.getElementById(elem_id);
		_mCE.frame=frame;
		frame.document.onmousemove= move_element;
		frame.document.onmouseup= end_move_element;
		/*_mCE.onmousemove= move_element;
		_mCE.onmouseup= end_move_element;*/
		
		//alert(_mCE.frame.document.body.offsetHeight);
		
		mouse_x= getMouseX(e);
		mouse_y= getMouseY(e);
		//window.status=frame+ " elem: "+elem_id+" elem: "+ _mCE + " mouse_x: "+mouse_x;
		_mCE.start_pos_x = mouse_x - (_mCE.style.left.replace("px","") || calculeOffsetLeft(_mCE));
		_mCE.start_pos_y = mouse_y - (_mCE.style.top.replace("px","") || calculeOffsetTop(_mCE));
		return false;
	};
	
	function end_move_element(e){
		_mCE.frame.document.onmousemove= "";
		_mCE.frame.document.onmouseup= "";		
		_mCE=null;
	};
	
	function move_element(e){
		var newTop,newLeft,maxLeft;

		if( _mCE.frame && _mCE.frame.event )
			e=_mCE.frame.event;
		newTop	= getMouseY(e) - _mCE.start_pos_y;
		newLeft	= getMouseX(e) - _mCE.start_pos_x;
		
		maxLeft	= _mCE.frame.document.body.offsetWidth- _mCE.offsetWidth;
		max_top	= _mCE.frame.document.body.offsetHeight- _mCE.offsetHeight;
		newTop	= Math.min(Math.max(0, newTop), max_top);
		newLeft	= Math.min(Math.max(0, newLeft), maxLeft);
		
		_mCE.style.top	= newTop+"px";
		_mCE.style.left	= newLeft+"px";		
		return false;
	};
	
/***
 * Managing a textarea (this part need the navigator infos from editAreaLoader
 ***/ 
	
	var nav= editAreaLoader.nav;
	
	// allow to get infos on the selection: array(start, end)
	function getSelectionRange(textarea){
		return {"start": textarea.selectionStart, "end": textarea.selectionEnd};
	};
	
	// allow to set the selection
	function setSelectionRange(t, start, end){
		t.focus();
		
		start	= Math.max(0, Math.min(t.value.length, start));
		end		= Math.max(start, Math.min(t.value.length, end));
	
		if( this.isOpera && this.isOpera < 9.6 ){	// Opera bug when moving selection start and selection end
			t.selectionEnd = 1;	
			t.selectionStart = 0;			
			t.selectionEnd = 1;	
			t.selectionStart = 0;		
		}
		t.selectionStart	= start;
		t.selectionEnd		= end;		
		//textarea.setSelectionRange(start, end);
		
		if(isIE)
			set_IE_selection(t);
	};

	
	// set IE position in Firefox mode (textarea.selectionStart and textarea.selectionEnd). should work as a repeated task
	function get_IE_selection(t){
		var d=document,div,range,stored_range,elem,scrollTop,relative_top,line_start,line_nb,range_start,range_end,tab;
		if(t && t.focused)
		{	
			if(!t.ea_line_height)
			{	// calculate the lineHeight
				div= d.createElement("div");
				div.style.fontFamily= get_css_property(t, "font-family");
				div.style.fontSize= get_css_property(t, "font-size");
				div.style.visibility= "hidden";			
				div.innerHTML="0";
				d.body.appendChild(div);
				t.ea_line_height= div.offsetHeight;
				d.body.removeChild(div);
			}
			//t.focus();
			range = d.selection.createRange();
			try
			{
				stored_range = range.duplicate();
				stored_range.moveToElementText( t );
				stored_range.setEndPoint( 'EndToEnd', range );
				if(stored_range.parentElement() == t){
					// the range don't take care of empty lines in the end of the selection
					elem		= t;
					scrollTop	= 0;
					while(elem.parentNode){
						scrollTop+= elem.scrollTop;
						elem	= elem.parentNode;
					}
				
				//	var scrollTop= t.scrollTop + document.body.scrollTop;
					
				//	var relative_top= range.offsetTop - calculeOffsetTop(t) + scrollTop;
					relative_top= range.offsetTop - calculeOffsetTop(t)+ scrollTop;
				//	alert("rangeoffset: "+ range.offsetTop +"\ncalcoffsetTop: "+ calculeOffsetTop(t) +"\nrelativeTop: "+ relative_top);
					line_start	= Math.round((relative_top / t.ea_line_height) +1);
					
					line_nb		= Math.round(range.boundingHeight / t.ea_line_height);
					
					range_start	= stored_range.text.length - range.text.length;
					tab	= t.value.substr(0, range_start).split("\n");			
					range_start	+= (line_start - tab.length)*2;		// add missing empty lines to the selection
					t.selectionStart = range_start;
					
					range_end	= t.selectionStart + range.text.length;
					tab	= t.value.substr(0, range_start + range.text.length).split("\n");			
					range_end	+= (line_start + line_nb - 1 - tab.length)*2;
					t.selectionEnd = range_end;
				}
			}
			catch(e){}
		}
		setTimeout("get_IE_selection(document.getElementById('"+ t.id +"'));", 50);
	};
	
	function IE_textarea_focus(){
		event.srcElement.focused= true;
	}
	
	function IE_textarea_blur(){
		event.srcElement.focused= false;
	}
	
	// select the text for IE (take into account the \r difference)
	function set_IE_selection( t ){
		var nbLineStart,nbLineStart,nbLineEnd,range;
		if(!window.closed){ 
			nbLineStart=t.value.substr(0, t.selectionStart).split("\n").length - 1;
			nbLineEnd=t.value.substr(0, t.selectionEnd).split("\n").length - 1;
			try
			{
				range = document.selection.createRange();
				range.moveToElementText( t );
				range.setEndPoint( 'EndToStart', range );
				range.moveStart('character', t.selectionStart - nbLineStart);
				range.moveEnd('character', t.selectionEnd - nbLineEnd - (t.selectionStart - nbLineStart)  );
				range.select();
			}
			catch(e){}
		}
	};
	
	
	editAreaLoader.waiting_loading["elements_functions.js"]= "loaded";
// reg_syntax.js
	EditAreaLoader.prototype.get_regexp= function(text_array){
		//res="( |=|\\n|\\r|\\[|\\(|µ|)(";
		res="(\\b)(";
		for(i=0; i<text_array.length; i++){
			if(i>0)
				res+="|";
			//res+="("+ tab_text[i] +")";
			//res+=tab_text[i].replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\{|\})/g, "\\$1");
			res+=this.get_escaped_regexp(text_array[i]);
		}
		//res+=")( |\\.|:|\\{|\\(|\\)|\\[|\\]|\'|\"|\\r|\\n|\\t|$)";
		res+=")(\\b)";
		reg= new RegExp(res);
		
		return res;
	};
	
	
	EditAreaLoader.prototype.get_escaped_regexp= function(str){
		return str.toString().replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\}|\{|\$|\^|\|)/g, "\\$1");
	};
	
	EditAreaLoader.prototype.init_syntax_regexp= function(){
		var lang_style= {};	
		for(var lang in this.load_syntax){
			if(!this.syntax[lang])	// init the regexp if not already initialized
			{
				this.syntax[lang]= {};
				this.syntax[lang]["keywords_reg_exp"]= {};
				this.keywords_reg_exp_nb=0;
			
				if(this.load_syntax[lang]['KEYWORDS']){
					param="g";
					if(this.load_syntax[lang]['KEYWORD_CASE_SENSITIVE']===false)
						param+="i";
					for(var i in this.load_syntax[lang]['KEYWORDS']){
						if(typeof(this.load_syntax[lang]['KEYWORDS'][i])=="function") continue;
						this.syntax[lang]["keywords_reg_exp"][i]= new RegExp(this.get_regexp( this.load_syntax[lang]['KEYWORDS'][i] ), param);
						this.keywords_reg_exp_nb++;
					}
				}
				
				if(this.load_syntax[lang]['OPERATORS']){
					var str="";
					var nb=0;
					for(var i in this.load_syntax[lang]['OPERATORS']){
						if(typeof(this.load_syntax[lang]['OPERATORS'][i])=="function") continue;
						if(nb>0)
							str+="|";				
						str+=this.get_escaped_regexp(this.load_syntax[lang]['OPERATORS'][i]);
						nb++;
					}
					if(str.length>0)
						this.syntax[lang]["operators_reg_exp"]= new RegExp("("+str+")","g");
				}
				
				if(this.load_syntax[lang]['DELIMITERS']){
					var str="";
					var nb=0;
					for(var i in this.load_syntax[lang]['DELIMITERS']){
						if(typeof(this.load_syntax[lang]['DELIMITERS'][i])=="function") continue;
						if(nb>0)
							str+="|";
						str+=this.get_escaped_regexp(this.load_syntax[lang]['DELIMITERS'][i]);
						nb++;
					}
					if(str.length>0)
						this.syntax[lang]["delimiters_reg_exp"]= new RegExp("("+str+")","g");
				}
				
				
		//		/(("(\\"|[^"])*"?)|('(\\'|[^'])*'?)|(//(.|\r|\t)*\n)|(/\*(.|\n|\r|\t)*\*/)|(<!--(.|\n|\r|\t)*-->))/gi
				var syntax_trace=[];
				
		//		/("(?:[^"\\]*(\\\\)*(\\"?)?)*("|$))/g
				
				this.syntax[lang]["quotes"]={};
				var quote_tab= [];
				if(this.load_syntax[lang]['QUOTEMARKS']){
					for(var i in this.load_syntax[lang]['QUOTEMARKS']){	
						if(typeof(this.load_syntax[lang]['QUOTEMARKS'][i])=="function") continue;			
						var x=this.get_escaped_regexp(this.load_syntax[lang]['QUOTEMARKS'][i]);
						this.syntax[lang]["quotes"][x]=x;
						//quote_tab[quote_tab.length]="("+x+"(?:\\\\"+x+"|[^"+x+"])*("+x+"|$))";
						//previous working : quote_tab[quote_tab.length]="("+x+"(?:[^"+x+"\\\\]*(\\\\\\\\)*(\\\\"+x+"?)?)*("+x+"|$))";
						quote_tab[quote_tab.length]="("+ x +"(\\\\.|[^"+ x +"])*(?:"+ x +"|$))";
						
						syntax_trace.push(x);			
					}			
				}
						
				this.syntax[lang]["comments"]={};
				if(this.load_syntax[lang]['COMMENT_SINGLE']){
					for(var i in this.load_syntax[lang]['COMMENT_SINGLE']){	
						if(typeof(this.load_syntax[lang]['COMMENT_SINGLE'][i])=="function") continue;						
						var x=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_SINGLE'][i]);
						quote_tab[quote_tab.length]="("+x+"(.|\\r|\\t)*(\\n|$))";
						syntax_trace.push(x);
						this.syntax[lang]["comments"][x]="\n";
					}			
				}		
				// (/\*(.|[\r\n])*?\*/)
				if(this.load_syntax[lang]['COMMENT_MULTI']){
					for(var i in this.load_syntax[lang]['COMMENT_MULTI']){
						if(typeof(this.load_syntax[lang]['COMMENT_MULTI'][i])=="function") continue;							
						var start=this.get_escaped_regexp(i);
						var end=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_MULTI'][i]);
						quote_tab[quote_tab.length]="("+start+"(.|\\n|\\r)*?("+end+"|$))";
						syntax_trace.push(start);
						syntax_trace.push(end);
						this.syntax[lang]["comments"][i]=this.load_syntax[lang]['COMMENT_MULTI'][i];
					}			
				}		
				if(quote_tab.length>0)
					this.syntax[lang]["comment_or_quote_reg_exp"]= new RegExp("("+quote_tab.join("|")+")","gi");
				
				if(syntax_trace.length>0) //   /((.|\n)*?)(\\*("|'|\/\*|\*\/|\/\/|$))/g
					this.syntax[lang]["syntax_trace_regexp"]= new RegExp("((.|\n)*?)(\\\\*("+ syntax_trace.join("|") +"|$))", "gmi");
				
				if(this.load_syntax[lang]['SCRIPT_DELIMITERS']){
					this.syntax[lang]["script_delimiters"]= {};
					for(var i in this.load_syntax[lang]['SCRIPT_DELIMITERS']){
						if(typeof(this.load_syntax[lang]['SCRIPT_DELIMITERS'][i])=="function") continue;							
						this.syntax[lang]["script_delimiters"][i]= this.load_syntax[lang]['SCRIPT_DELIMITERS'];
					}			
				}
				
				this.syntax[lang]["custom_regexp"]= {};
				if(this.load_syntax[lang]['REGEXPS']){
					for(var i in this.load_syntax[lang]['REGEXPS']){
						if(typeof(this.load_syntax[lang]['REGEXPS'][i])=="function") continue;
						var val= this.load_syntax[lang]['REGEXPS'][i];
						if(!this.syntax[lang]["custom_regexp"][val['execute']])
							this.syntax[lang]["custom_regexp"][val['execute']]= {};
						this.syntax[lang]["custom_regexp"][val['execute']][i]={'regexp' : new RegExp(val['search'], val['modifiers'])
																			, 'class' : val['class']};
					}
				}
				
				if(this.load_syntax[lang]['STYLES']){							
					lang_style[lang]= {};
					for(var i in this.load_syntax[lang]['STYLES']){
						if(typeof(this.load_syntax[lang]['STYLES'][i])=="function") continue;
						if(typeof(this.load_syntax[lang]['STYLES'][i]) != "string"){
							for(var j in this.load_syntax[lang]['STYLES'][i]){							
								lang_style[lang][j]= this.load_syntax[lang]['STYLES'][i][j];
							}
						}else{
							lang_style[lang][i]= this.load_syntax[lang]['STYLES'][i];
						}
					}
				}
				// build style string
				var style="";		
				for(var i in lang_style[lang]){
					if(lang_style[lang][i].length>0){
						style+= "."+ lang +" ."+ i.toLowerCase() +" span{"+lang_style[lang][i]+"}\n";
						style+= "."+ lang +" ."+ i.toLowerCase() +"{"+lang_style[lang][i]+"}\n";				
					}
				}
				this.syntax[lang]["styles"]=style;
			}
		}				
	};
	
	editAreaLoader.waiting_loading["reg_syntax.js"]= "loaded";
                                                                                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/edit_area/langs_pt.js                                                         0000777 0000000 0000000 00000003621 12534142432 017720  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["pt"]={
new_document: "Novo documento",
search_button: "Localizar e substituir",
search_command: "Localizar próximo",
search: "Localizar",
replace: "Substituir",
replace_command: "Substituir",
find_next: "Localizar",
replace_all: "Subst. tudo",
reg_exp: "Expressões regulares",
match_case: "Diferenciar maiúsculas e minúsculas",
not_found: "Não encontrado.",
occurrence_replaced: "Ocorrências substituidas",
search_field_empty: "Campo localizar vazio.",
restart_search_at_begin: "Fim das ocorrências. Recomeçar do inicio.",
move_popup: "Mover janela",
font_size: "--Tamanho da fonte--",
go_to_line: "Ir para linha",
go_to_line_prompt: "Ir para a linha:",
undo: "Desfazer",
redo: "Refazer",
change_smooth_selection: "Opções visuais",
highlight: "Cores de sintaxe",
reset_highlight: "Resetar cores (se não sincronizado)",
word_wrap: "toggle word wrapping mode",
help: "Sobre",
save: "Salvar",
load: "Carregar",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Posição",
total: "Total",
close_popup: "Fechar",
shortcuts: "Shortcuts",
add_tab: "Adicionar tabulação",
remove_tab: "Remover tabulação",
about_notice: "Atenção: Cores de sintaxe são indicados somente para textos pequenos",
toggle: "Exibir editor",
accesskey: "Accesskey",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Processando...",
fullscreen: "fullscreen",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                               ./mvappsvr/docroot/db/edit_area/langs_nl.js                                                         0000777 0000000 0000000 00000003762 12534142432 017714  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["nl"]={
new_document: "nieuw leeg document",
search_button: "zoek en vervang",
search_command: "zoek volgende / zoekscherm openen",
search: "zoek",
replace: "vervang",
replace_command: "vervang / zoekscherm openen",
find_next: "volgende vinden",
replace_all: "alles vervangen",
reg_exp: "reguliere expressies",
match_case: "hoofdletter gevoelig",
not_found: "niet gevonden.",
occurrence_replaced: "object vervangen.",
search_field_empty: "Zoek veld leeg",
restart_search_at_begin: "Niet meer instanties gevonden, begin opnieuw",
move_popup: "versleep zoek scherm",
font_size: "--Letter grootte--",
go_to_line: "Ga naar regel",
go_to_line_prompt: "Ga naar regel nummer:",
undo: "Ongedaan maken",
redo: "Opnieuw doen",
change_smooth_selection: "zet wat schermopties aan/uit (kan langzamer zijn)",
highlight: "zet syntax highlight aan/uit",
reset_highlight: "reset highlight (indien gedesynchronizeerd)",
word_wrap: "toggle word wrapping mode",
help: "informatie",
save: "opslaan",
load: "laden",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Positie",
total: "Totaal",
close_popup: "Popup sluiten",
shortcuts: "Snelkoppelingen",
add_tab: "voeg tabs toe in tekst",
remove_tab: "verwijder tabs uit tekst",
about_notice: "Notitie: syntax highlight functie is alleen voor kleine tekst",
toggle: "geavanceerde bewerkingsopties",
accesskey: "Accessknop",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Verwerken...",
fullscreen: "fullscreen",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
              ./mvappsvr/docroot/db/edit_area/edit_area_functions.js                                              0000777 0000000 0000000 00000116243 12534142432 022123  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   	//replace tabulation by the good number of white spaces
	EditArea.prototype.replace_tab= function(text){
		return text.replace(/((\n?)([^\t\n]*)\t)/gi, editArea.smartTab);		// slower than simple replace...	
	};
	
	// call by the replace_tab function
	EditArea.prototype.smartTab= function(){
		val="                   ";
		return EditArea.prototype.smartTab.arguments[2] + EditArea.prototype.smartTab.arguments[3] + val.substr(0, editArea.tab_nb_char - (EditArea.prototype.smartTab.arguments[3].length)%editArea.tab_nb_char);
	};
	
	EditArea.prototype.show_waiting_screen= function(){
		width	= this.editor_area.offsetWidth;
		height	= this.editor_area.offsetHeight;
		if( !(this.isIE && this.isIE<6) )
		{
			width	-= 2;
			height	-= 2;
		}
		this.processing_screen.style.display= "block";
		this.processing_screen.style.width	= width+"px";
		this.processing_screen.style.height	= height+"px";
		this.waiting_screen_displayed		= true;
	};
	
	EditArea.prototype.hide_waiting_screen= function(){
		this.processing_screen.style.display="none";
		this.waiting_screen_displayed= false;
	};
	
	EditArea.prototype.add_style= function(styles){
		if(styles.length>0){
			newcss = document.createElement("style");
			newcss.type="text/css";
			newcss.media="all";
			if(newcss.styleSheet){ // IE
				newcss.styleSheet.cssText = styles;
			} else { // W3C
				newcss.appendChild(document.createTextNode(styles));
			}
			document.getElementsByTagName("head")[0].appendChild(newcss);
		}
	};
	
	EditArea.prototype.set_font= function(family, size){
		var t=this, a=this.textarea, s=this.settings, elem_font, i, elem;
		// list all elements concerned by font changes
		var elems= ["textarea", "content_highlight", "cursor_pos", "end_bracket", "selection_field", "selection_field_text", "line_number"];
		
		if(family && family!="")
			s["font_family"]= family;
		if(size && size>0)
			s["font_size"]	= size;
		if( t.isOpera && t.isOpera < 9.6 )	// opera<9.6 can't manage non monospace font
			s['font_family']="monospace";
			
		// update the select tag
		if( elem_font = _$("area_font_size") )
		{	
			for( i = 0; i < elem_font.length; i++ )
			{
				if( elem_font.options[i].value && elem_font.options[i].value == s["font_size"] )
					elem_font.options[i].selected=true;
			}
		}
		
		/*
		 * somethimes firefox has rendering mistake with non-monospace font for text width in textarea vs in div for changing font size (eg: verdana change between 11pt to 12pt)
		 * => looks like a browser internal random bug as text width can change while content_highlight is updated
		 * we'll check if the font-size produce the same text width inside textarea and div and if not, we'll increment the font-size
		 * 
		 * This is an ugly fix 
		 */ 
		if( t.isFirefox )
		{
			var nbTry = 3;
			do {
				var div1 = document.createElement( 'div' ), text1 = document.createElement( 'textarea' );
				var styles = {
					width:		'40px',
					overflow:	'scroll',
					zIndex: 	50,
					visibility:	'hidden',
					fontFamily:	s["font_family"],
					fontSize:	s["font_size"]+"pt",
					lineHeight:	t.lineHeight+"px",
					padding:	'0',
					margin:		'0',
					border:		'none',
					whiteSpace:	'nowrap'
				};
				var diff, changed = false;
				for( i in styles )
				{
					div1.style[ i ]		= styles[i];
					text1.style[ i ]	= styles[i];
				}
				// no wrap for this text
				text1.wrap = 'off';
				text1.setAttribute('wrap', 'off');
				t.container.appendChild( div1 );
				t.container.appendChild( text1 );
				// try to make FF to bug
				div1.innerHTML 		= text1.value	= 'azertyuiopqsdfghjklm';
				div1.innerHTML 		= text1.value	= text1.value+'wxcvbn^p*ù$!:;,,';
				diff	=  text1.scrollWidth - div1.scrollWidth;
				
				// firefox return here a diff of 1 px between equals scrollWidth (can't explain)
				if( Math.abs( diff ) >= 2 )
				{
					s["font_size"]++;
					changed	= true;
				}
				t.container.removeChild( div1 );
				t.container.removeChild( text1 );
				nbTry--;
			}while( changed && nbTry > 0 );
		}
		
		
		// calc line height
		elem					= t.test_font_size;
		elem.style.fontFamily	= ""+s["font_family"];
		elem.style.fontSize		= s["font_size"]+"pt";				
		elem.innerHTML			= "0";		
		t.lineHeight			= elem.offsetHeight;

		// update font for all concerned elements
		for( i=0; i<elems.length; i++)
		{
			elem	= _$(elems[i]);	
			elem.style.fontFamily	= s["font_family"];
			elem.style.fontSize		= s["font_size"]+"pt";
			elem.style.lineHeight	= t.lineHeight+"px";
		}
		// define a css for <pre> tags
		t.add_style("pre{font-family:"+s["font_family"]+"}");
		
		// old opera and IE>=8 doesn't update font changes to the textarea
		if( ( t.isOpera && t.isOpera < 9.6 ) || t.isIE >= 8 )
		{
			var parNod = a.parentNode, nxtSib = a.nextSibling, start= a.selectionStart, end= a.selectionEnd;
			parNod.removeChild(a);
			parNod.insertBefore(a, nxtSib);
			t.area_select(start, end-start);
		}
		
		// force update of selection field
		this.focus();
		this.update_size();
		this.check_line_selection();
	};
	
	EditArea.prototype.change_font_size= function(){
		var size=_$("area_font_size").value;
		if(size>0)
			this.set_font("", size);			
	};
	
	
	EditArea.prototype.open_inline_popup= function(popup_id){
		this.close_all_inline_popup();
		var popup= _$(popup_id);		
		var editor= _$("editor");
		
		// search matching icon
		for(var i=0; i<this.inlinePopup.length; i++){
			if(this.inlinePopup[i]["popup_id"]==popup_id){
				var icon= _$(this.inlinePopup[i]["icon_id"]);
				if(icon){
					this.switchClassSticky(icon, 'editAreaButtonSelected', true);			
					break;
				}
			}
		}
		// check size
		popup.style.height="auto";
		popup.style.overflow= "visible";
			
		if(document.body.offsetHeight< popup.offsetHeight){
			popup.style.height= (document.body.offsetHeight-10)+"px";
			popup.style.overflow= "auto";
		}
		
		if(!popup.positionned){
			var new_left= editor.offsetWidth /2 - popup.offsetWidth /2;
			var new_top= editor.offsetHeight /2 - popup.offsetHeight /2;
			//var new_top= area.offsetHeight /2 - popup.offsetHeight /2;
			//var new_left= area.offsetWidth /2 - popup.offsetWidth /2;
			//alert("new_top: ("+new_top+") = calculeOffsetTop(area) ("+calculeOffsetTop(area)+") + area.offsetHeight /2("+ area.offsetHeight /2+") - popup.offsetHeight /2("+popup.offsetHeight /2+") - scrollTop: "+document.body.scrollTop);
			popup.style.left= new_left+"px";
			popup.style.top= new_top+"px";
			popup.positionned=true;
		}
		popup.style.visibility="visible";
		
		//popup.style.display="block";
	};

	EditArea.prototype.close_inline_popup= function(popup_id){
		var popup= _$(popup_id);		
		// search matching icon
		for(var i=0; i<this.inlinePopup.length; i++){
			if(this.inlinePopup[i]["popup_id"]==popup_id){
				var icon= _$(this.inlinePopup[i]["icon_id"]);
				if(icon){
					this.switchClassSticky(icon, 'editAreaButtonNormal', false);			
					break;
				}
			}
		}
		
		popup.style.visibility="hidden";	
	};
	
	EditArea.prototype.close_all_inline_popup= function(e){
		for(var i=0; i<this.inlinePopup.length; i++){
			this.close_inline_popup(this.inlinePopup[i]["popup_id"]);		
		}
		this.textarea.focus();
	};
	
	EditArea.prototype.show_help= function(){
		
		this.open_inline_popup("edit_area_help");
		
	};
			
	EditArea.prototype.new_document= function(){
		this.textarea.value="";
		this.area_select(0,0);
	};
	
	EditArea.prototype.get_all_toolbar_height= function(){
		var area= _$("editor");
		var results= parent.getChildren(area, "div", "class", "area_toolbar", "all", "0");	// search only direct children
		//results= results.concat(getChildren(area, "table", "class", "area_toolbar", "all", "0"));
		var height=0;
		for(var i=0; i<results.length; i++){			
			height+= results[i].offsetHeight;
		}
		//alert("toolbar height: "+height);
		return height;
	};
	
	EditArea.prototype.go_to_line= function(line){	
		if(!line)
		{	
			var icon= _$("go_to_line");
			if(icon != null){
				this.restoreClass(icon);
				this.switchClassSticky(icon, 'editAreaButtonSelected', true);
			}
			
			line= prompt(this.get_translation("go_to_line_prompt"));
			if(icon != null)
				this.switchClassSticky(icon, 'editAreaButtonNormal', false);
		}
		if(line && line!=null && line.search(/^[0-9]+$/)!=-1){
			var start=0;
			var lines= this.textarea.value.split("\n");
			if(line > lines.length)
				start= this.textarea.value.length;
			else{
				for(var i=0; i<Math.min(line-1, lines.length); i++)
					start+= lines[i].length + 1;
			}
			this.area_select(start, 0);
		}
		
		
	};
	
	
	EditArea.prototype.change_smooth_selection_mode= function(setTo){
		//alert("setTo: "+setTo);
		if(this.do_highlight)
			return;
			
		if(setTo != null){
			if(setTo === false)
				this.smooth_selection=true;
			else
				this.smooth_selection=false;
		}
		var icon= _$("change_smooth_selection");
		this.textarea.focus();
		if(this.smooth_selection===true){
			//setAttribute(icon, "class", getAttribute(icon, "class").replace(/ selected/g, "") );
			/*setAttribute(icon, "oldClassName", "editAreaButtonNormal" );
			setAttribute(icon, "className", "editAreaButtonNormal" );*/
			//this.restoreClass(icon);
			//this.restoreAndSwitchClass(icon,'editAreaButtonNormal');
			this.switchClassSticky(icon, 'editAreaButtonNormal', false);
			
			this.smooth_selection=false;
			this.selection_field.style.display= "none";
			_$("cursor_pos").style.display= "none";
			_$("end_bracket").style.display= "none";
		}else{
			//setAttribute(icon, "class", getAttribute(icon, "class") + " selected");
			//this.switchClass(icon,'editAreaButtonSelected');
			this.switchClassSticky(icon, 'editAreaButtonSelected', false);
			this.smooth_selection=true;
			this.selection_field.style.display= "block";
			_$("cursor_pos").style.display= "block";
			_$("end_bracket").style.display= "block";
		}	
	};
	
	// the auto scroll of the textarea has some lacks when it have to show cursor in the visible area when the textarea size change
	// show specifiy whereas it is the "top" or "bottom" of the selection that is showned
	EditArea.prototype.scroll_to_view= function(show){
		var zone, lineElem;
		if(!this.smooth_selection)
			return;
		zone= _$("result");
		
		// manage height scroll
		var cursor_pos_top= _$("cursor_pos").cursor_top;
		if(show=="bottom")
		{
			//cursor_pos_top+=  (this.last_selection["line_nb"]-1)* this.lineHeight;
			cursor_pos_top+= this.getLinePosTop( this.last_selection['line_start'] + this.last_selection['line_nb'] - 1 );
		}
			
		var max_height_visible= zone.clientHeight + zone.scrollTop;
		var miss_top	= cursor_pos_top + this.lineHeight - max_height_visible;
		if(miss_top>0){
			//alert(miss_top);
			zone.scrollTop=  zone.scrollTop + miss_top;
		}else if( zone.scrollTop > cursor_pos_top){
			// when erase all the content -> does'nt scroll back to the top
			//alert("else: "+cursor_pos_top);
			zone.scrollTop= cursor_pos_top;	 
		}
		
		// manage left scroll
		//var cursor_pos_left= parseInt(_$("cursor_pos").style.left.replace("px",""));
		var cursor_pos_left= _$("cursor_pos").cursor_left;
		var max_width_visible= zone.clientWidth + zone.scrollLeft;
		var miss_left= cursor_pos_left + 10 - max_width_visible;
		if(miss_left>0){			
			zone.scrollLeft= zone.scrollLeft + miss_left + 50;
		}else if( zone.scrollLeft > cursor_pos_left){
			zone.scrollLeft= cursor_pos_left ;
		}else if( zone.scrollLeft == 45){
			// show the line numbers if textarea align to it's left
			zone.scrollLeft=0;
		}
	};
	
	EditArea.prototype.check_undo= function(only_once){
		if(!editAreas[this.id])
			return false;
		if(this.textareaFocused && editAreas[this.id]["displayed"]==true){
			var text=this.textarea.value;
			if(this.previous.length<=1)
				this.switchClassSticky(_$("undo"), 'editAreaButtonDisabled', true);
		
			if(!this.previous[this.previous.length-1] || this.previous[this.previous.length-1]["text"] != text){
				this.previous.push({"text": text, "selStart": this.textarea.selectionStart, "selEnd": this.textarea.selectionEnd});
				if(this.previous.length > this.settings["max_undo"]+1)
					this.previous.shift();
				
			}
			if(this.previous.length >= 2)
				this.switchClassSticky(_$("undo"), 'editAreaButtonNormal', false);		
		}

		if(!only_once)
			setTimeout("editArea.check_undo()", 3000);
	};
	
	EditArea.prototype.undo= function(){
		//alert("undo"+this.previous.length);
		if(this.previous.length > 0)
		{
			this.getIESelection();
		//	var pos_cursor=this.textarea.selectionStart;
			this.next.push( { "text": this.textarea.value, "selStart": this.textarea.selectionStart, "selEnd": this.textarea.selectionEnd } );
			var prev= this.previous.pop();
			if( prev["text"] == this.textarea.value && this.previous.length > 0 )
				prev	=this.previous.pop();						
			this.textarea.value	= prev["text"];
			this.last_undo		= prev["text"];
			this.area_select(prev["selStart"], prev["selEnd"]-prev["selStart"]);
			this.switchClassSticky(_$("redo"), 'editAreaButtonNormal', false);
			this.resync_highlight(true);
			//alert("undo"+this.previous.length);
			this.check_file_changes();
		}
	};
	
	EditArea.prototype.redo= function(){
		if(this.next.length > 0)
		{
			/*this.getIESelection();*/
			//var pos_cursor=this.textarea.selectionStart;
			var next= this.next.pop();
			this.previous.push(next);
			this.textarea.value= next["text"];
			this.last_undo= next["text"];
			this.area_select(next["selStart"], next["selEnd"]-next["selStart"]);
			this.switchClassSticky(_$("undo"), 'editAreaButtonNormal', false);
			this.resync_highlight(true);
			this.check_file_changes();
		}
		if(	this.next.length == 0)
			this.switchClassSticky(_$("redo"), 'editAreaButtonDisabled', true);
	};
	
	EditArea.prototype.check_redo= function(){
		if(editArea.next.length == 0 || editArea.textarea.value!=editArea.last_undo){
			editArea.next= [];	// undo the ability to use "redo" button
			editArea.switchClassSticky(_$("redo"), 'editAreaButtonDisabled', true);
		}
		else
		{
			this.switchClassSticky(_$("redo"), 'editAreaButtonNormal', false);
		}
	};
	
	
	// functions that manage icons roll over, disabled, etc...
	EditArea.prototype.switchClass = function(element, class_name, lock_state) {
		var lockChanged = false;
	
		if (typeof(lock_state) != "undefined" && element != null) {
			element.classLock = lock_state;
			lockChanged = true;
		}
	
		if (element != null && (lockChanged || !element.classLock)) {
			element.oldClassName = element.className;
			element.className = class_name;
		}
	};
	
	EditArea.prototype.restoreAndSwitchClass = function(element, class_name) {
		if (element != null && !element.classLock) {
			this.restoreClass(element);
			this.switchClass(element, class_name);
		}
	};
	
	EditArea.prototype.restoreClass = function(element) {
		if (element != null && element.oldClassName && !element.classLock) {
			element.className = element.oldClassName;
			element.oldClassName = null;
		}
	};
	
	EditArea.prototype.setClassLock = function(element, lock_state) {
		if (element != null)
			element.classLock = lock_state;
	};
	
	EditArea.prototype.switchClassSticky = function(element, class_name, lock_state) {
		var lockChanged = false;
		if (typeof(lock_state) != "undefined" && element != null) {
			element.classLock = lock_state;
			lockChanged = true;
		}
	
		if (element != null && (lockChanged || !element.classLock)) {
			element.className = class_name;
			element.oldClassName = class_name;
		}
	};
	
	//make the "page up" and "page down" buttons works correctly
	EditArea.prototype.scroll_page= function(params){
		var dir= params["dir"], shift_pressed= params["shift"];
		var lines= this.textarea.value.split("\n");		
		var new_pos=0, length=0, char_left=0, line_nb=0, curLine=0;
		var toScrollAmount	= _$("result").clientHeight -30;
		var nbLineToScroll	= 0, diff= 0;
		
		if(dir=="up"){
			nbLineToScroll	= Math.ceil( toScrollAmount / this.lineHeight );
			
			// fix number of line to scroll
			for( i = this.last_selection["line_start"]; i - diff > this.last_selection["line_start"] - nbLineToScroll ; i-- )
			{
				if( elem = _$('line_'+ i) )
				{
					diff +=  Math.floor( ( elem.offsetHeight - 1 ) / this.lineHeight );
				}
			}
			nbLineToScroll	-= diff;
			
			if(this.last_selection["selec_direction"]=="up"){
				for(line_nb=0; line_nb< Math.min(this.last_selection["line_start"]-nbLineToScroll, lines.length); line_nb++){
					new_pos+= lines[line_nb].length + 1;
				}
				char_left=Math.min(lines[Math.min(lines.length-1, line_nb)].length, this.last_selection["curr_pos"]-1);
				if(shift_pressed)
					length=this.last_selection["selectionEnd"]-new_pos-char_left;	
				this.area_select(new_pos+char_left, length);
				view="top";
			}else{			
				view="bottom";
				for(line_nb=0; line_nb< Math.min(this.last_selection["line_start"]+this.last_selection["line_nb"]-1-nbLineToScroll, lines.length); line_nb++){
					new_pos+= lines[line_nb].length + 1;
				}
				char_left=Math.min(lines[Math.min(lines.length-1, line_nb)].length, this.last_selection["curr_pos"]-1);
				if(shift_pressed){
					//length=this.last_selection["selectionEnd"]-new_pos-char_left;	
					start= Math.min(this.last_selection["selectionStart"], new_pos+char_left);
					length= Math.max(new_pos+char_left, this.last_selection["selectionStart"] )- start ;
					if(new_pos+char_left < this.last_selection["selectionStart"])
						view="top";
				}else
					start=new_pos+char_left;
				this.area_select(start, length);
				
			}
		}
		else
		{
			var nbLineToScroll= Math.floor( toScrollAmount / this.lineHeight );
			// fix number of line to scroll
			for( i = this.last_selection["line_start"]; i + diff < this.last_selection["line_start"] + nbLineToScroll ; i++ )
			{
				if( elem = _$('line_'+ i) )
				{
					diff +=  Math.floor( ( elem.offsetHeight - 1 ) / this.lineHeight );
				}
			}
			nbLineToScroll	-= diff;
				
			if(this.last_selection["selec_direction"]=="down"){
				view="bottom";
				for(line_nb=0; line_nb< Math.min(this.last_selection["line_start"]+this.last_selection["line_nb"]-2+nbLineToScroll, lines.length); line_nb++){
					if(line_nb==this.last_selection["line_start"]-1)
						char_left= this.last_selection["selectionStart"] -new_pos;
					new_pos+= lines[line_nb].length + 1;
									
				}
				if(shift_pressed){
					length=Math.abs(this.last_selection["selectionStart"]-new_pos);	
					length+=Math.min(lines[Math.min(lines.length-1, line_nb)].length, this.last_selection["curr_pos"]);
					//length+=Math.min(lines[Math.min(lines.length-1, line_nb)].length, char_left);
					this.area_select(Math.min(this.last_selection["selectionStart"], new_pos), length);
				}else{
					this.area_select(new_pos+char_left, 0);
				}
				
			}else{
				view="top";
				for(line_nb=0; line_nb< Math.min(this.last_selection["line_start"]+nbLineToScroll-1, lines.length, lines.length); line_nb++){
					if(line_nb==this.last_selection["line_start"]-1)
						char_left= this.last_selection["selectionStart"] -new_pos;
					new_pos+= lines[line_nb].length + 1;									
				}
				if(shift_pressed){
					length=Math.abs(this.last_selection["selectionEnd"]-new_pos-char_left);	
					length+=Math.min(lines[Math.min(lines.length-1, line_nb)].length, this.last_selection["curr_pos"])- char_left-1;
					//length+=Math.min(lines[Math.min(lines.length-1, line_nb)].length, char_left);
					this.area_select(Math.min(this.last_selection["selectionEnd"], new_pos+char_left), length);
					if(new_pos+char_left > this.last_selection["selectionEnd"])
						view="bottom";
				}else{
					this.area_select(new_pos+char_left, 0);
				}
				
			}
		}
		//console.log( new_pos, char_left, length, nbLineToScroll, toScrollAmount, _$("result").clientHeigh );
		this.check_line_selection();
		this.scroll_to_view(view);
	};
	
	EditArea.prototype.start_resize= function(e){
		parent.editAreaLoader.resize["id"]		= editArea.id;		
		parent.editAreaLoader.resize["start_x"]	= (e)? e.pageX : event.x + document.body.scrollLeft;		
		parent.editAreaLoader.resize["start_y"]	= (e)? e.pageY : event.y + document.body.scrollTop;
		if(editArea.isIE)
		{
			editArea.textarea.focus();
			editArea.getIESelection();
		}
		parent.editAreaLoader.resize["selectionStart"]	= editArea.textarea.selectionStart;
		parent.editAreaLoader.resize["selectionEnd"]	= editArea.textarea.selectionEnd;
		parent.editAreaLoader.start_resize_area();
	};
	
	EditArea.prototype.toggle_full_screen= function(to){
		var t=this, p=parent, a=t.textarea, html, frame, selStart, selEnd, old, icon;
		if (!parent) parent = window.parent;
		if(typeof(to)=="undefined")
			to= !t.fullscreen['isFull'];
		old			= t.fullscreen['isFull'];
		t.fullscreen['isFull']= to;
		icon		= _$("fullscreen");
		selStart	= t.textarea.selectionStart;
		selEnd		= t.textarea.selectionEnd;
		html		= p.document.getElementsByTagName("html")[0];
		frame		= p.document.getElementById("frame_"+t.id);
		
		if(to && to!=old)
		{	// toogle on fullscreen		
			
			t.fullscreen['old_overflow']	= p.get_css_property(html, "overflow");
			t.fullscreen['old_height']		= p.get_css_property(html, "height");
			t.fullscreen['old_width']		= p.get_css_property(html, "width");
			t.fullscreen['old_scrollTop']	= html.scrollTop;
			t.fullscreen['old_scrollLeft']	= html.scrollLeft;
			t.fullscreen['old_zIndex']		= p.get_css_property(frame, "z-index");
			if(t.isOpera){
				html.style.height	= "100%";
				html.style.width	= "100%";	
			}
			html.style.overflow	= "hidden";
			html.scrollTop		= 0;
			html.scrollLeft		= 0;
			
			frame.style.position	= "absolute";
			frame.style.width		= html.clientWidth+"px";
			frame.style.height		= html.clientHeight+"px";
			frame.style.display		= "block";
			frame.style.zIndex		= "999999";
			frame.style.top			= "0px";
			frame.style.left		= "0px";
			
			// if the iframe was in a div with position absolute, the top and left are the one of the div, 
			// so I fix it by seeing at witch position the iframe start and correcting it
			frame.style.top			= "-"+p.calculeOffsetTop(frame)+"px";
			frame.style.left		= "-"+p.calculeOffsetLeft(frame)+"px";
			
		//	parent.editAreaLoader.execCommand(t.id, "update_size();");
		//	var body=parent.document.getElementsByTagName("body")[0];
		//	body.appendChild(frame);
			
			t.switchClassSticky(icon, 'editAreaButtonSelected', false);
			t.fullscreen['allow_resize']= t.resize_allowed;
			t.allow_resize(false);
	
			//t.area_select(selStart, selEnd-selStart);
			
		
			// opera can't manage to do a direct size update
			if(t.isFirefox){
				p.editAreaLoader.execCommand(t.id, "update_size();");
				t.area_select(selStart, selEnd-selStart);
				t.scroll_to_view();
				t.focus();
			}else{
				setTimeout("p.editAreaLoader.execCommand('"+ t.id +"', 'update_size();');editArea.focus();", 10);
			}	
			
	
		}
		else if(to!=old)
		{	// toogle off fullscreen
			frame.style.position="static";
			frame.style.zIndex= t.fullscreen['old_zIndex'];
		
			if(t.isOpera)
			{
				html.style.height	= "auto"; 
				html.style.width	= "auto";
				html.style.overflow	= "auto";
			}
			else if(t.isIE && p!=top)
			{	// IE doesn't manage html overflow in frames like in normal page... 
				html.style.overflow	= "auto";
			}
			else
			{
				html.style.overflow	= t.fullscreen['old_overflow'];
			}
			html.scrollTop	= t.fullscreen['old_scrollTop'];
			html.scrollLeft	= t.fullscreen['old_scrollLeft'];
		
			p.editAreaLoader.hide(t.id);
			p.editAreaLoader.show(t.id);
			
			t.switchClassSticky(icon, 'editAreaButtonNormal', false);
			if(t.fullscreen['allow_resize'])
				t.allow_resize(t.fullscreen['allow_resize']);
			if(t.isFirefox){
				t.area_select(selStart, selEnd-selStart);
				setTimeout("editArea.scroll_to_view();", 10);
			}			
			
			//p.editAreaLoader.remove_event(p.window, "resize", editArea.update_size);
		}
		
	};
	
	EditArea.prototype.allow_resize= function(allow){
		var resize= _$("resize_area");
		if(allow){
			
			resize.style.visibility="visible";
			parent.editAreaLoader.add_event(resize, "mouseup", editArea.start_resize);
		}else{
			resize.style.visibility="hidden";
			parent.editAreaLoader.remove_event(resize, "mouseup", editArea.start_resize);
		}
		this.resize_allowed= allow;
	};
	
	
	EditArea.prototype.change_syntax= function(new_syntax, is_waiting){
	//	alert("cahnge to "+new_syntax);
		// the syntax is the same
		if(new_syntax==this.settings['syntax'])
			return true;
		
		// check that the syntax is one allowed
		var founded= false;
		for(var i=0; i<this.syntax_list.length; i++)
		{
			if(this.syntax_list[i]==new_syntax)
				founded= true;
		}
		
		if(founded==true)
		{
			// the reg syntax file is not loaded
			if(!parent.editAreaLoader.load_syntax[new_syntax])
			{
				// load the syntax file and wait for file loading
				if(!is_waiting)
// ljb					parent.editAreaLoader.load_script(parent.editAreaLoader.baseURL + "reg_syntax/" + new_syntax + ".js");
					parent.editAreaLoader.load_script(parent.editAreaLoader.baseURL + "reg_syntax_" + new_syntax + ".js");
				setTimeout("editArea.change_syntax('"+ new_syntax +"', true);", 100);
				this.show_waiting_screen();
			}
			else
			{
				if(!this.allready_used_syntax[new_syntax])
				{	// the syntax has still not been used
					// rebuild syntax definition for new languages
					parent.editAreaLoader.init_syntax_regexp();
					// add style to the new list
					this.add_style(parent.editAreaLoader.syntax[new_syntax]["styles"]);
					this.allready_used_syntax[new_syntax]=true;
				}
				// be sure that the select option is correctly updated
				var sel= _$("syntax_selection");
				if(sel && sel.value!=new_syntax)
				{
					for(var i=0; i<sel.length; i++){
						if(sel.options[i].value && sel.options[i].value == new_syntax)
							sel.options[i].selected=true;
					}
				}
				
			/*	if(this.settings['syntax'].length==0)
				{
					this.switchClassSticky(_$("highlight"), 'editAreaButtonNormal', false);
					this.switchClassSticky(_$("reset_highlight"), 'editAreaButtonNormal', false);
					this.change_highlight(true);
				}
				*/
				this.settings['syntax']= new_syntax;
				this.resync_highlight(true);
				this.hide_waiting_screen();
				return true;
			}
		}
		return false;
	};
	
	
	// check if the file has changed
	EditArea.prototype.set_editable= function(is_editable){
		if(is_editable)
		{
			document.body.className= "";
			this.textarea.readOnly= false;
			this.is_editable= true;
		}
		else
		{
			document.body.className= "non_editable";
			this.textarea.readOnly= true;
			this.is_editable= false;
		}
		
		if(editAreas[this.id]["displayed"]==true)
			this.update_size();
	};
	
	/***** Wrap mode *****/
	
	// toggling function for set_wrap_mode
	EditArea.prototype.toggle_word_wrap= function(){
		this.set_word_wrap( !this.settings['word_wrap'] );
	};
	
	
	// open a new tab for the given file
	EditArea.prototype.set_word_wrap= function(to){
		var t=this, a= t.textarea;
		
		if( t.isOpera )
		{
			this.settings['word_wrap']= false;
			t.switchClassSticky( _$("word_wrap"), 'editAreaButtonDisabled', true );
			return false;
		}
		
		if( to )
		{
			wrap_mode = 'soft';
			this.container.className+= ' word_wrap';
			this.container.style.width="";
			this.content_highlight.style.width="";
			a.style.width="100%";
			if( t.isIE && t.isIE < 7 )	// IE 6 count 50 px too much
			{
				a.style.width	= ( a.offsetWidth-5 )+"px";
			}
			
			t.switchClassSticky( _$("word_wrap"), 'editAreaButtonSelected', false );
		}
		else
		{
			wrap_mode = 'off';
			this.container.className	= this.container.className.replace(/word_wrap/g, '');
			t.switchClassSticky( _$("word_wrap"), 'editAreaButtonNormal', true );
		}
		this.textarea.previous_scrollWidth = '';
		this.textarea.previous_scrollHeight = '';
		
		a.wrap= wrap_mode;
		a.setAttribute('wrap', wrap_mode);
		// only IE can change wrap mode on the fly without element reloading
		if(!this.isIE)
		{
			var start=a.selectionStart, end= a.selectionEnd;
			var parNod = a.parentNode, nxtSib = a.nextSibling;
			parNod.removeChild(a);
			parNod.insertBefore(a, nxtSib);
			this.area_select(start, end-start);
		}
		// reset some optimisation
		this.settings['word_wrap']	= to;
		this.focus();
		this.update_size();
		this.check_line_selection();
	};	
	/***** tabbed files managing functions *****/
	
	// open a new tab for the given file
	EditArea.prototype.open_file= function(settings){
		
		if(settings['id']!="undefined")
		{
			var id= settings['id'];
			// create a new file object with defautl values
			var new_file= {};
			new_file['id']			= id;
			new_file['title']		= id;
			new_file['text']		= "";
			new_file['last_selection']	= "";		
			new_file['last_text_to_highlight']	= "";
			new_file['last_hightlighted_text']	= "";
			new_file['previous']	= [];
			new_file['next']		= [];
			new_file['last_undo']	= "";
			new_file['smooth_selection']	= this.settings['smooth_selection'];
			new_file['do_highlight']= this.settings['start_highlight'];
			new_file['syntax']		= this.settings['syntax'];
			new_file['scroll_top']	= 0;
			new_file['scroll_left']	= 0;
			new_file['selection_start']= 0;
			new_file['selection_end']= 0;
			new_file['edited']		= false;
			new_file['font_size']	= this.settings["font_size"];
			new_file['font_family']	= this.settings["font_family"];
			new_file['word_wrap']	= this.settings["word_wrap"];
			new_file['toolbar']		= {'links':{}, 'selects': {}};
			new_file['compare_edited_text']= new_file['text'];
			
			
			this.files[id]= new_file;
			this.update_file(id, settings);
			this.files[id]['compare_edited_text']= this.files[id]['text'];
			
			
			var html_id= 'tab_file_'+encodeURIComponent(id);
			this.filesIdAssoc[html_id]= id;
			this.files[id]['html_id']= html_id;
		
			if(!_$(this.files[id]['html_id']) && id!="")
			{
				// be sure the tab browsing area is displayed
				this.tab_browsing_area.style.display= "block";
				var elem= document.createElement('li');
				elem.id= this.files[id]['html_id'];
// ljb				var close= "<img src=\""+ parent.editAreaLoader.baseURL +"images/close.gif\" title=\""+ this.get_translation('close_tab', 'word') +"\" onclick=\"editArea.execCommand('close_file', editArea.filesIdAssoc['"+ html_id +"']);return false;\" class=\"hidden\" onmouseover=\"this.className=''\" onmouseout=\"this.className='hidden'\" />";
				var close= "<img src=\""+ parent.editAreaLoader.baseURL +"images_close.gif\" title=\""+ this.get_translation('close_tab', 'word') +"\" onclick=\"editArea.execCommand('close_file', editArea.filesIdAssoc['"+ html_id +"']);return false;\" class=\"hidden\" onmouseover=\"this.className=''\" onmouseout=\"this.className='hidden'\" />";
				elem.innerHTML= "<a onclick=\"javascript:editArea.execCommand('switch_to_file', editArea.filesIdAssoc['"+ html_id +"']);\" selec=\"none\"><b><span><strong class=\"edited\">*</strong>"+ this.files[id]['title'] + close +"</span></b></a>";
				_$('tab_browsing_list').appendChild(elem);
				var elem= document.createElement('text');
				this.update_size();
			}
			
			// open file callback (for plugin)
			if(id!="")
				this.execCommand('file_open', this.files[id]);
			
			this.switch_to_file(id, true);
			return true;
		}
		else
			return false;
	};
	
	// close the given file
	EditArea.prototype.close_file= function(id){
		if(this.files[id])
		{
			this.save_file(id);
			
			// close file callback
			if(this.execCommand('file_close', this.files[id])!==false)
			{
				// remove the tab in the toolbar
				var li= _$(this.files[id]['html_id']);
				li.parentNode.removeChild(li);
				// select a new file
				if(id== this.curr_file)
				{
					var next_file= "";
					var is_next= false;
					for(var i in this.files)
					{
						if( is_next )
						{
							next_file	= i;
							break;
						}
						else if( i == id )
							is_next		= true;
						else
							next_file	= i;
					}
					// display the next file
					this.switch_to_file(next_file);
				}
				// clear datas
				delete (this.files[id]);
				this.update_size();
			}	
		}
	};
	
	// backup current file datas
	EditArea.prototype.save_file= function(id){
		var t= this, save, a_links, a_selects, save_butt, img, i;
		if(t.files[id])
		{
			var save= t.files[id];
			save['last_selection']			= t.last_selection;		
			save['last_text_to_highlight']	= t.last_text_to_highlight;
			save['last_hightlighted_text']	= t.last_hightlighted_text;
			save['previous']				= t.previous;
			save['next']					= t.next;
			save['last_undo']				= t.last_undo;
			save['smooth_selection']		= t.smooth_selection;
			save['do_highlight']			= t.do_highlight;
			save['syntax']					= t.settings['syntax'];
			save['text']					= t.textarea.value;
			save['scroll_top']				= t.result.scrollTop;
			save['scroll_left']				= t.result.scrollLeft;
			save['selection_start']			= t.last_selection["selectionStart"];
			save['selection_end']			= t.last_selection["selectionEnd"];
			save['font_size']				= t.settings["font_size"];
			save['font_family']				= t.settings["font_family"];
			save['word_wrap']				= t.settings["word_wrap"];
			save['toolbar']					= {'links':{}, 'selects': {}};
			
			// save toolbar buttons state for fileSpecific buttons
			a_links= _$("toolbar_1").getElementsByTagName("a");
			for( i=0; i<a_links.length; i++ )
			{
				if( a_links[i].getAttribute('fileSpecific') == 'yes' )
				{
					save_butt	= {};
					img			= a_links[i].getElementsByTagName('img')[0];
					save_butt['classLock']		= img.classLock;
					save_butt['className']		= img.className;
					save_butt['oldClassName']	= img.oldClassName;
					
					save['toolbar']['links'][a_links[i].id]= save_butt;
				}
			}
			
			// save toolbar select state for fileSpecific buttons
			a_selects= _$("toolbar_1").getElementsByTagName("select");
			for( i=0; i<a_selects.length; i++)
			{
				if(a_selects[i].getAttribute('fileSpecific')=='yes')
				{
					save['toolbar']['selects'][a_selects[i].id]= a_selects[i].value;
				}
			}
				
			t.files[id]= save;
			
			return save;
		}
		
		return false;
	};
	
	// update file_datas
	EditArea.prototype.update_file= function(id, new_values){
		for(var i in new_values)
		{
			this.files[id][i]= new_values[i];
		}
	};
	
	// display file datas
	EditArea.prototype.display_file= function(id){
		var t = this, a= t.textarea, new_file, a_lis, a_selects, a_links, a_options, i, j;
		
		// we're showing the empty file
		if(id=='')
		{
			a.readOnly= true;
			t.tab_browsing_area.style.display= "none";
			_$("no_file_selected").style.display= "block";
			t.result.className= "empty";
			// clear current datas
			if(!t.files[''])
			{
				t.open_file({id: ''});
			}
		}
		// we try to show a non existent file, so we left
		else if( typeof( t.files[id] ) == 'undefined' )
		{
			return false;
		}
		// display a normal file
		else
		{
			t.result.className= "";
			a.readOnly= !t.is_editable;
			_$("no_file_selected").style.display= "none";
			t.tab_browsing_area.style.display= "block";
		}
		
		// ensure to have last state for undo/redo actions
		t.check_redo(true);
		t.check_undo(true);
		t.curr_file= id;
		
		// replace selected tab file
		a_lis= t.tab_browsing_area.getElementsByTagName('li');
		for( i=0; i<a_lis.length; i++)
		{
			if(a_lis[i].id == t.files[id]['html_id'])
				a_lis[i].className='selected';
			else
				a_lis[i].className='';
		}
		
		// replace next files datas
		new_file= t.files[id];
	
		// restore text content
		a.value= new_file['text'];
		
		// restore font-size
		t.set_font(new_file['font_family'], new_file['font_size']);
		
		// restore selection and scroll
		t.area_select(new_file['last_selection']['selection_start'], new_file['last_selection']['selection_end'] - new_file['last_selection']['selection_start']);
		t.manage_size(true);
		t.result.scrollTop= new_file['scroll_top'];
		t.result.scrollLeft= new_file['scroll_left'];
		
		// restore undo, redo
		t.previous=	new_file['previous'];
		t.next=	new_file['next'];
		t.last_undo=	new_file['last_undo'];
		t.check_redo(true);
		t.check_undo(true);
		
		// restore highlight
		t.execCommand("change_highlight", new_file['do_highlight']);
		t.execCommand("change_syntax", new_file['syntax']);
		
		// smooth mode
		t.execCommand("change_smooth_selection_mode", new_file['smooth_selection']);
		
		// word_wrap
		t.execCommand("set_word_wrap", new_file['word_wrap']);
			
		// restore links state in toolbar
		a_links= new_file['toolbar']['links'];
		for( i in a_links)
		{
			if( img =  _$(i).getElementsByTagName('img')[0] )
			{
				img.classLock	= a_links[i]['classLock'];
				img.className	= a_links[i]['className'];
				img.oldClassName= a_links[i]['oldClassName'];
			}
		}
		
		// restore select state in toolbar
		a_selects = new_file['toolbar']['selects'];
		for( i in a_selects)
		{
			a_options	= _$(i).options;
			for( j=0; j<a_options.length; j++)
			{
				if( a_options[j].value == a_selects[i] )
					_$(i).options[j].selected=true;
			}
		}
	
	};

	// change tab for displaying a new one
	EditArea.prototype.switch_to_file= function(file_to_show, force_refresh){
		if(file_to_show!=this.curr_file || force_refresh)
		{
			this.save_file(this.curr_file);
			if(this.curr_file!='')
				this.execCommand('file_switch_off', this.files[this.curr_file]);
			this.display_file(file_to_show);
			if(file_to_show!='')
				this.execCommand('file_switch_on', this.files[file_to_show]);
		}
	};

	// get all infos for the given file
	EditArea.prototype.get_file= function(id){
		if(id==this.curr_file)
			this.save_file(id);
		return this.files[id];
	};
	
	// get all available files infos
	EditArea.prototype.get_all_files= function(){
		tmp_files= this.files;
		this.save_file(this.curr_file);
		if(tmp_files[''])
			delete(this.files['']);
		return tmp_files;
	};
	
	
	// check if the file has changed
	EditArea.prototype.check_file_changes= function(){
	
		var id= this.curr_file;
		if(this.files[id] && this.files[id]['compare_edited_text']!=undefined)
		{
			if(this.files[id]['compare_edited_text'].length==this.textarea.value.length && this.files[id]['compare_edited_text']==this.textarea.value)
			{
				if(this.files[id]['edited']!= false)
					this.set_file_edited_mode(id, false);
			}
			else
			{
				if(this.files[id]['edited']!= true)
					this.set_file_edited_mode(id, true);
			}
		}
	};
	
	// set if the file is edited or not
	EditArea.prototype.set_file_edited_mode= function(id, to){
		// change CSS for edited tab
		if(this.files[id] && _$(this.files[id]['html_id']))
		{
			var link= _$(this.files[id]['html_id']).getElementsByTagName('a')[0];
			if(to==true)
			{
				link.className= 'edited';
			}
			else
			{
				link.className= '';
				if(id==this.curr_file)
					text= this.textarea.value;
				else
					text= this.files[id]['text'];
				this.files[id]['compare_edited_text']= text;
			}
				
			this.files[id]['edited']= to;
		}
	};

	EditArea.prototype.set_show_line_colors = function(new_value){
		this.show_line_colors = new_value;
		
		if( new_value )
			this.selection_field.className	+= ' show_colors';
		else
			this.selection_field.className	= this.selection_field.className.replace( / show_colors/g, '' );
	};
                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/edit_area/reg_syntax_html.js                                                  0000777 0000000 0000000 00000002134 12534142432 021316  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
* last update: 2006-08-24
*/

editAreaLoader.load_syntax["html"] = {
	'COMMENT_SINGLE' : {}
	,'COMMENT_MULTI' : {'<!--' : '-->'}
	,'QUOTEMARKS' : {1: "'", 2: '"'}
	,'KEYWORD_CASE_SENSITIVE' : false
	,'KEYWORDS' : {
	}
	,'OPERATORS' :[
	]
	,'DELIMITERS' :[
	]
	,'REGEXPS' : {
		'doctype' : {
			'search' : '()(<!DOCTYPE[^>]*>)()'
			,'class' : 'doctype'
			,'modifiers' : ''
			,'execute' : 'before' // before or after
		}
		,'tags' : {
			'search' : '(<)(/?[a-z][^ \r\n\t>]*)([^>]*>)'
			,'class' : 'tags'
			,'modifiers' : 'gi'
			,'execute' : 'before' // before or after
		}
		,'attributes' : {
			'search' : '( |\n|\r|\t)([^ \r\n\t=]+)(=)'
			,'class' : 'attributes'
			,'modifiers' : 'g'
			,'execute' : 'before' // before or after
		}
	}
	,'STYLES' : {
		'COMMENTS': 'color: #AAAAAA;'
		,'QUOTESMARKS': 'color: #6381F8;'
		,'KEYWORDS' : {
			}
		,'OPERATORS' : 'color: #E775F0;'
		,'DELIMITERS' : ''
		,'REGEXPS' : {
			'attributes': 'color: #B1AC41;'
			,'tags': 'color: #E62253;'
			,'doctype': 'color: #8DCFB5;'
			,'test': 'color: #00FF00;'
		}	
	}		
};
                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/edit_area/langs_fr.js                                                         0000777 0000000 0000000 00000004555 12534142432 017713  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["fr"]={
new_document: "nouveau document (efface le contenu)",
search_button: "rechercher / remplacer",
search_command: "rechercher suivant / ouvrir la fen&ecirc;tre de recherche",
search: "rechercher",
replace: "remplacer",
replace_command: "remplacer / ouvrir la fen&ecirc;tre de recherche",
find_next: "rechercher",
replace_all: "tout remplacer",
reg_exp: "expr. r&eacute;guli&egrave;re",
match_case: "respecter la casse",
not_found: "pas trouv&eacute;.",
occurrence_replaced: "remplacements &eacute;ffectu&eacute;s.",
search_field_empty: "Le champ de recherche est vide.",
restart_search_at_begin: "Fin du texte atteint, poursuite au d&eacute;but.",
move_popup: "d&eacute;placer la fen&ecirc;tre de recherche",
font_size: "--Taille police--",
go_to_line: "aller &agrave; la ligne",
go_to_line_prompt: "aller a la ligne numero:",
undo: "annuler",
redo: "refaire",
change_smooth_selection: "activer/d&eacute;sactiver des fonctions d'affichage (meilleur affichage mais plus de charge processeur)",
highlight: "activer/d&eacute;sactiver la coloration syntaxique",
reset_highlight: "r&eacute;initialiser la coloration syntaxique (si d&eacute;syncronis&eacute;e du texte)",
word_wrap: "activer/d&eacute;sactiver les retours &agrave; la ligne automatiques",
help: "&agrave; propos",
save: "sauvegarder",
load: "charger",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Position",
total: "Total",
close_popup: "fermer le popup",
shortcuts: "Racourcis clavier",
add_tab: "ajouter une tabulation dans le texte",
remove_tab: "retirer une tabulation dans le texte",
about_notice: "Note: la coloration syntaxique n'est pr&eacute;vue que pour de courts textes.",
toggle: "basculer l'&eacute;diteur",
accesskey: "Accesskey",
tab: "Tab",
shift: "Maj",
ctrl: "Ctrl",
esc: "Esc",
processing: "chargement...",
fullscreen: "plein &eacute;cran",
syntax_selection: "--Syntaxe--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Fermer le fichier"
};
                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/reg_syntax/                                                         0000777 0000000 0000000 00000000000 12534142432 017731  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/reg_syntax/tsql.js                                                  0000777 0000000 0000000 00000012133 12534142432 021255  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.load_syntax["tsql"] = {
	'COMMENT_SINGLE' : {1 : '--'}
	,'COMMENT_MULTI' : {'/*' : '*/'}
	,'QUOTEMARKS' : {1: "'" }
	,'KEYWORD_CASE_SENSITIVE' : false
	,'KEYWORDS' : {
		'statements': [
		    'ADD', 'EXCEPT', 'PERCENT', 'EXEC', 'PLAN', 'ALTER', 'EXECUTE', 'PRECISION',
		    'PRIMARY', 'EXIT', 'PRINT', 'AS', 'FETCH', 'PROC', 'ASC',
		    'FILE', 'PROCEDURE', 'AUTHORIZATION', 'FILLFACTOR', 'PUBLIC', 'BACKUP', 'FOR', 'RAISERROR',
		    'BEGIN', 'FOREIGN', 'READ', 'FREETEXT', 'READTEXT', 'BREAK', 'FREETEXTTABLE',
		    'RECONFIGURE', 'BROWSE', 'FROM', 'REFERENCES', 'BULK', 'FULL', 'REPLICATION', 'BY',
		    'FUNCTION', 'RESTORE', 'CASCADE', 'GOTO', 'RESTRICT', 'CASE', 'GRANT', 'RETURN',
		    'CHECK', 'GROUP', 'REVOKE', 'CHECKPOINT', 'HAVING', 'RIGHT', 'CLOSE', 'HOLDLOCK', 'ROLLBACK',
		    'CLUSTERED', 'IDENTITY', 'ROWCOUNT', 'IDENTITY_INSERT', 'ROWGUIDCOL', 'COLLATE', 
		    'IDENTITYCOL', 'RULE', 'COLUMN', 'IF', 'SAVE', 'COMMIT', 'SCHEMA', 'COMPUTE', 'INDEX',
		    'SELECT', 'CONSTRAINT', 'CONTAINS', 'INSERT', 'SET',
		    'CONTAINSTABLE', 'INTERSECT', 'SETUSER', 'CONTINUE', 'INTO', 'SHUTDOWN', 'SOME',
		    'CREATE', 'STATISTICS', 'KEY', 'CURRENT', 'KILL', 'TABLE',
		    'CURRENT_DATE', 'TEXTSIZE', 'CURRENT_TIME', 'THEN', 'LINENO',
		    'TO', 'LOAD', 'TOP', 'CURSOR', 'NATIONAL', 'TRAN', 'DATABASE', 'NOCHECK', 
		    'TRANSACTION', 'DBCC', 'NONCLUSTERED', 'TRIGGER', 'DEALLOCATE', 'TRUNCATE',
		    'DECLARE', 'TSEQUAL', 'DEFAULT', 'UNION', 'DELETE', 'OF', 'UNIQUE',
		    'DENY', 'OFF', 'UPDATE', 'DESC', 'OFFSETS', 'UPDATETEXT', 'DISK', 'ON', 'USE', 'DISTINCT', 'OPEN',
		    'DISTRIBUTED', 'OPENDATASOURCE', 'VALUES', 'DOUBLE', 'OPENQUERY', 'VARYING', 'DROP', 
		    'OPENROWSET', 'VIEW', 'DUMMY', 'OPENXML', 'WAITFOR', 'DUMP', 'OPTION', 'WHEN', 'ELSE', 'WHERE',
		    'END', 'ORDER', 'WHILE', 'ERRLVL', 'WITH', 'ESCAPE', 'OVER', 'WRITETEXT'
		],
		'functions': [
		    'COALESCE', 'SESSION_USER', 'CONVERT', 'SYSTEM_USER', 'CURRENT_TIMESTAMP', 'CURRENT_USER', 'NULLIF', 'USER',
			'AVG', 'MIN', 'CHECKSUM', 'SUM', 'CHECKSUM_AGG', 'STDEV', 'COUNT', 'STDEVP', 'COUNT_BIG', 'VAR', 'GROUPING', 'VARP', 'MAX',
			'@@DATEFIRST', '@@OPTIONS', '@@DBTS', '@@REMSERVER', '@@LANGID', '@@SERVERNAME', '@@LANGUAGE', '@@SERVICENAME', '@@LOCK_TIMEOUT',
			'@@SPID', '@@MAX_CONNECTIONS', '@@TEXTSIZE', '@@MAX_PRECISION', '@@VERSION', '@@NESTLEVEL',
			'@@CURSOR_ROWS', 'CURSOR_STATUS', '@@FETCH_STATUS',
			'DATEADD', 'DATEDIFF', 'DATENAME', 'DATEPART', 'DAY', 'GETDATE', 'GETUTCDATE', 'MONTH', 'YEAR',
			'ABS', 'DEGREES', 'RAND', 'ACOS', 'EXP', 'ROUND', 'ASIN', 'FLOOR', 'SIGN', 'ATAN', 'LOG', 'SIN', 'ATN2', 'LOG10', 'SQRT',
			'CEILING', 'PI ', 'SQUARE', 'COS', 'POWER', 'TAN', 'COT', 'RADIANS',
			'@@PROCID', 'COL_LENGTH', 'FULLTEXTCATALOGPROPERTY', 'COL_NAME', 'FULLTEXTSERVICEPROPERTY', 'COLUMNPROPERTY', 'INDEX_COL',
			'DATABASEPROPERTY', 'INDEXKEY_PROPERTY', 'DATABASEPROPERTYEX', 'INDEXPROPERTY', 'DB_ID', 'OBJECT_ID', 'DB_NAME', 'OBJECT_NAME',
			'FILE_ID', 'OBJECTPROPERTY', 'OBJECTPROPERTYEX', 'FILE_NAME', 'SQL_VARIANT_PROPERTY', 'FILEGROUP_ID', 'FILEGROUP_NAME',
			'FILEGROUPPROPERTY', 'TYPEPROPERTY', 'FILEPROPERTY',
			'CURRENT_USER', 'SUSER_ID', 'SUSER_SID', 'IS_MEMBER', 'SUSER_SNAME', 'IS_SRVROLEMEMBER', 'PERMISSIONS', 'SYSTEM_USER',
			'SUSER_NAME', 'USER_ID', 'SESSION_USER', 'USER_NAME', 'ASCII', 'SOUNDEX', 'PATINDEX', 'SPACE', 'CHARINDEX', 'QUOTENAME',
			'STR', 'DIFFERENCE', 'REPLACE', 'STUFF', 'REPLICATE', 'SUBSTRING', 'LEN', 'REVERSE', 'UNICODE', 'LOWER',
			'UPPER', 'LTRIM', 'RTRIM', 'APP_NAME', 'CAST', 'CONVERT', 'COALESCE', 'COLLATIONPROPERTY', 'COLUMNS_UPDATED', 'CURRENT_TIMESTAMP',
			'CURRENT_USER', 'DATALENGTH', '@@ERROR', 'FORMATMESSAGE', 'GETANSINULL', 'HOST_ID', 'HOST_NAME', 'IDENT_CURRENT', 'IDENT_INCR',
			'IDENT_SEED', '@@IDENTITY', 'ISDATE', 'ISNULL', 'ISNUMERIC', 'NEWID', 'NULLIF', 'PARSENAME', '@@ROWCOUNT',
			'SCOPE_IDENTITY', 'SERVERPROPERTY', 'SESSIONPROPERTY', 'SESSION_USER', 'STATS_DATE', 'SYSTEM_USER', '@@TRANCOUNT', 'USER_NAME',
			'@@CONNECTIONS', '@@PACK_RECEIVED', '@@CPU_BUSY', '@@PACK_SENT', '@@TIMETICKS', '@@IDLE', '@@TOTAL_ERRORS', '@@IO_BUSY', '@@TOTAL_READ',
			'@@PACKET_ERRORS', '@@TOTAL_WRITE', 'PATINDEX', 'TEXTVALID', 'TEXTPTR'
		],
		'reserved': [
			'RIGHT', 'INNER', 'IS', 'JOIN', 'CROSS', 'LEFT', 'NULL', 'OUTER'
		]
	}
	,'OPERATORS' :[
		'+', '-', '*', '/', '%', '=', '&' ,'|', '^', '>', '<', '>=', '<=', '<>', '!=', '!<', '!>', 'ALL', 'AND', 'ANY', 'BETWEEN', 'EXISTS', 'IN', 'LIKE', 'NOT', 'OR', '~'
	]
	,'DELIMITERS' :[
		'(', ')', '[', ']', '{', '}'
	]
	,'REGEXPS' : {
		// highlight all variables (@...)
		'variables' : {
			'search' : '()(\\@\\w+)()'
			,'class' : 'variables'
			,'modifiers' : 'g'
			,'execute' : 'before' // before or after
		}
	}
	,'STYLES' : {
		'COMMENTS': 'color: #008000;'
		,'QUOTESMARKS': 'color: #FF0000;'
		,'KEYWORDS' : {
			'reserved' : 'color: #808080;'
			,'functions' : 'color: #FF00FF;'
			,'statements' : 'color: #0000FF;'
			}
		,'OPERATORS' : 'color: #808080;'
		,'DELIMITERS' : 'color: #FF8000;'
		,'REGEXPS' : {
			'variables' : 'color: #E0BD54;'
		}		
	}
};

 	  	 
                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/edit_area/reg_syntax/basic.js                                                 0000777 0000000 0000000 00000005132 12534142432 021354  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.load_syntax["basic"] = {
	'COMMENT_SINGLE' : {1 : "'", 2 : 'rem'}
	,'COMMENT_MULTI' : { }
	,'QUOTEMARKS' : {1: '"'}
	,'KEYWORD_CASE_SENSITIVE' : false
	,'KEYWORDS' : {
		'statements' : [
			'if','then','for','wend','while',
			'else','elseif','select','case','end select',
			'until','next','step','to','end if', 'call'
		]
		,'keywords' : [
			'sub', 'end sub', 'function', 'end function', 'exit',
			'exit function', 'dim', 'redim', 'shared', 'const',
			'is', 'absolute', 'access', 'any', 'append', 'as',
			'base', 'beep', 'binary', 'bload', 'bsave', 'chain',
			'chdir', 'circle', 'clear', 'close', 'cls', 'color',
			'com', 'common', 'data', 'date', 'declare', 'def',
			'defdbl', 'defint', 'deflng', 'defsng', 'defstr',
			'double', 'draw', 'environ', 'erase', 'error', 'field',
			'files', 'fn', 'get', 'gosub', 'goto', 'integer', 'key',
			'kill', 'let', 'line', 'list', 'locate', 'lock', 'long',
			'lprint', 'lset', 'mkdir', 'name', 'off', 'on', 'open',
			'option', 'out', 'output', 'paint', 'palette', 'pcopy',
			'poke', 'preset', 'print', 'pset', 'put', 'random',
			'randomize', 'read', 'reset', 'restore', 'resume',
			'return', 'rmdir', 'rset', 'run', 'screen', 'seg',
			'shell', 'single', 'sleep', 'sound', 'static', 'stop',
			'strig', 'string', 'swap', 'system', 'time', 'timer',
			'troff', 'tron', 'type', 'unlock', 'using', 'view',
			'wait', 'width', 'window', 'write'
	        ]
		,'functions' : [
			'abs', 'asc', 'atn', 'cdbl', 'chr', 'cint', 'clng',
			'cos', 'csng', 'csrlin', 'cvd', 'cvdmbf', 'cvi', 'cvl',
			'cvs', 'cvsmbf', 'eof', 'erdev', 'erl', 'err', 'exp',
			'fileattr', 'fix', 'fre', 'freefile', 'hex', 'inkey',
			'inp', 'input', 'instr', 'int', 'ioctl', 'lbound',
			'lcase', 'left', 'len', 'loc', 'lof', 'log', 'lpos',
			'ltrim', 'mid', 'mkd', 'mkdmbf', 'mki', 'mkl', 'mks',
			'mksmbf', 'oct', 'peek', 'pen', 'play', 'pmap', 'point',
			'pos', 'right', 'rnd', 'rtrim', 'seek', 'sgn', 'sin',
			'space', 'spc', 'sqr', 'stick', 'str', 'tab', 'tan',
			'ubound', 'ucase', 'val', 'varptr', 'varseg'
		]
		,'operators' : [
			'and', 'eqv', 'imp', 'mod', 'not', 'or', 'xor'
		]
	}
	,'OPERATORS' :[
		'+', '-', '/', '*', '=', '<', '>', '!', '&'
	]
	,'DELIMITERS' :[
		'(', ')', '[', ']', '{', '}'
	]
	,'STYLES' : {
		'COMMENTS': 'color: #99CC00;'
		,'QUOTESMARKS': 'color: #333399;'
		,'KEYWORDS' : {
			'keywords' : 'color: #3366FF;'
			,'functions' : 'color: #0000FF;'
			,'statements' : 'color: #3366FF;'
			,'operators' : 'color: #FF0000;'
			}
		,'OPERATORS' : 'color: #FF0000;'
		,'DELIMITERS' : 'color: #0000FF;'

	}
};
                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/edit_area/reg_syntax/ruby.js                                                  0000777 0000000 0000000 00000003304 12534142432 021253  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /**
 * Ruby syntax v 1.0 
 * 
 * v1.0 by Patrice De Saint Steban (2007/01/03)
 *   
**/
editAreaLoader.load_syntax["ruby"] = {
	'COMMENT_SINGLE' : {1 : '#'}
	,'COMMENT_MULTI' : {}
	,'QUOTEMARKS' : {1: "'", 2: '"'}
	,'KEYWORD_CASE_SENSITIVE' : true
	,'KEYWORDS' : {
		'reserved' : [
			'alias', 'and', 'BEGIN', 'begin', 'break', 'case', 'class', 'def', 'defined', 'do', 'else',
			'elsif', 'END', 'end', 'ensure', 'false', 'for', 'if', 
			'in', 'module', 'next', 'not', 'or', 'redo', 'rescue', 'retry',
			'return', 'self', 'super', 'then', 'true', 'undef', 'unless', 'until', 'when', 'while', 'yield'
		]
	}
	,'OPERATORS' :[
		'+', '-', '/', '*', '=', '<', '>', '%', '!', '&', ';', '?', '`', ':', ','
	]
	,'DELIMITERS' :[
		'(', ')', '[', ']', '{', '}'
	]
	,'REGEXPS' : {
		'constants' : {
			'search' : '()([A-Z]\\w*)()'
			,'class' : 'constants'
			,'modifiers' : 'g'
			,'execute' : 'before' 
		}
		,'variables' : {
			'search' : '()([\$\@\%]+\\w+)()'
			,'class' : 'variables'
			,'modifiers' : 'g'
			,'execute' : 'before' 
		}
		,'numbers' : {
			'search' : '()(-?[0-9]+)()'
			,'class' : 'numbers'
			,'modifiers' : 'g'
			,'execute' : 'before' 
		}
		,'symbols' : {
			'search' : '()(:\\w+)()'
			,'class' : 'symbols'
			,'modifiers' : 'g'
			,'execute' : 'before'
		}
	}
	,'STYLES' : {
		'COMMENTS': 'color: #AAAAAA;'
		,'QUOTESMARKS': 'color: #660066;'
		,'KEYWORDS' : {
			'reserved' : 'font-weight: bold; color: #0000FF;'
			}
		,'OPERATORS' : 'color: #993300;'
		,'DELIMITERS' : 'color: #993300;'
		,'REGEXPS' : {
			'variables' : 'color: #E0BD54;'
			,'numbers' : 'color: green;'
			,'constants' : 'color: #00AA00;'
			,'symbols' : 'color: #879EFA;'
		}	
	}
};
                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/edit_area/reg_syntax/html.js                                                  0000777 0000000 0000000 00000002134 12534142432 021236  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
* last update: 2006-08-24
*/

editAreaLoader.load_syntax["html"] = {
	'COMMENT_SINGLE' : {}
	,'COMMENT_MULTI' : {'<!--' : '-->'}
	,'QUOTEMARKS' : {1: "'", 2: '"'}
	,'KEYWORD_CASE_SENSITIVE' : false
	,'KEYWORDS' : {
	}
	,'OPERATORS' :[
	]
	,'DELIMITERS' :[
	]
	,'REGEXPS' : {
		'doctype' : {
			'search' : '()(<!DOCTYPE[^>]*>)()'
			,'class' : 'doctype'
			,'modifiers' : ''
			,'execute' : 'before' // before or after
		}
		,'tags' : {
			'search' : '(<)(/?[a-z][^ \r\n\t>]*)([^>]*>)'
			,'class' : 'tags'
			,'modifiers' : 'gi'
			,'execute' : 'before' // before or after
		}
		,'attributes' : {
			'search' : '( |\n|\r|\t)([^ \r\n\t=]+)(=)'
			,'class' : 'attributes'
			,'modifiers' : 'g'
			,'execute' : 'before' // before or after
		}
	}
	,'STYLES' : {
		'COMMENTS': 'color: #AAAAAA;'
		,'QUOTESMARKS': 'color: #6381F8;'
		,'KEYWORDS' : {
			}
		,'OPERATORS' : 'color: #E775F0;'
		,'DELIMITERS' : ''
		,'REGEXPS' : {
			'attributes': 'color: #B1AC41;'
			,'tags': 'color: #E62253;'
			,'doctype': 'color: #8DCFB5;'
			,'test': 'color: #00FF00;'
		}	
	}		
};
                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/edit_area/reg_syntax/coldfusion.js                                            0000777 0000000 0000000 00000013456 12534142432 022450  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.load_syntax["coldfusion"] = {
	'COMMENT_SINGLE' : {1 : '//', 2 : '#'}
	,'COMMENT_MULTI' : {'<!--' : '-->'}
	,'COMMENT_MULTI2' : {'<!---' : '--->'}
	,'QUOTEMARKS' : {1: "'", 2: '"'}
	,'KEYWORD_CASE_SENSITIVE' : false
		,'KEYWORDS' : {
		'statements' : [
			'include', 'require', 'include_once', 'require_once',
			'for', 'foreach', 'as', 'if', 'elseif', 'else', 'while', 'do', 'endwhile',
            'endif', 'switch', 'case', 'endswitch',
			'return', 'break', 'continue'
		]
		,'reserved' : [
			'AND', 'break', 'case', 'CONTAIN', 'CONTAINS', 'continue', 'default', 'do', 
			'DOES', 'else', 'EQ', 'EQUAL', 'EQUALTO', 'EQV', 'FALSE', 'for', 'GE', 
			'GREATER', 'GT', 'GTE', 'if', 'IMP', 'in', 'IS', 'LE', 'LESS', 'LT', 'LTE', 
			'MOD', 'NEQ', 'NOT', 'OR', 'return', 'switch', 'THAN', 'TO', 'TRUE', 'var', 
			'while', 'XOR'
		]
		,'functions' : [
			'Abs', 'ACos', 'ArrayAppend', 'ArrayAvg', 'ArrayClear', 'ArrayDeleteAt', 'ArrayInsertAt', 
			'ArrayIsEmpty', 'ArrayLen', 'ArrayMax', 'ArrayMin', 'ArrayNew', 'ArrayPrepend', 'ArrayResize', 
			'ArraySet', 'ArraySort', 'ArraySum', 'ArraySwap', 'ArrayToList', 'Asc', 'ASin', 'Atn', 'AuthenticatedContext', 
			'AuthenticatedUser', 'BitAnd', 'BitMaskClear', 'BitMaskRead', 'BitMaskSet', 'BitNot', 'BitOr', 
			'BitSHLN', 'BitSHRN', 'BitXor', 'Ceiling', 'Chr', 'CJustify', 'Compare', 'CompareNoCase', 'Cos', 
			'CreateDate', 'CreateDateTime', 'CreateODBCDate', 'CreateODBCDateTime', 'CreateODBCTime', 
			'CreateTime', 'CreateTimeSpan', 'DateAdd', 'DateCompare', 'DateConvert', 'DateDiff', 
			'DateFormat', 'DatePart', 'Day', 'DayOfWeek', 'DayOfWeekAsString', 'DayOfYear', 'DaysInMonth', 
			'DaysInYear', 'DE', 'DecimalFormat', 'DecrementValue', 'Decrypt', 'DeleteClientVariable', 
			'DirectoryExists', 'DollarFormat', 'Duplicate', 'Encrypt', 'Evaluate', 'Exp', 'ExpandPath', 
			'FileExists', 'Find', 'FindNoCase', 'FindOneOf', 'FirstDayOfMonth', 'Fix', 'FormatBaseN', 
			'GetBaseTagData', 'GetBaseTagList', 'GetBaseTemplatePath', 'GetClientVariablesList', 
			'GetCurrentTemplatePath', 'GetDirectoryFromPath', 'GetException', 'GetFileFromPath', 
			'GetFunctionList', 'GetHttpTimeString', 'GetHttpRequestData', 'GetLocale', 'GetMetricData', 
			'GetProfileString', 'GetTempDirectory', 'GetTempFile', 'GetTemplatePath', 'GetTickCount', 
			'GetTimeZoneInfo', 'GetToken', 'Hash', 'Hour', 'HTMLCodeFormat', 'HTMLEditFormat', 'IIf', 
			'IncrementValue', 'InputBaseN', 'Insert', 'Int', 'IsArray', 'IsAuthenticated', 'IsAuthorized', 
			'IsBoolean', 'IsBinary', 'IsCustomFunction', 'IsDate', 'IsDebugMode', 'IsDefined', 'IsLeapYear', 
			'IsNumeric', 'IsNumericDate', 'IsProtected', 'IsQuery', 'IsSimpleValue', 'IsStruct', 'IsWDDX', 
			'JavaCast', 'JSStringFormat', 'LCase', 'Left', 'Len', 'ListAppend', 'ListChangeDelims', 
			'ListContains', 'ListContainsNoCase', 'ListDeleteAt', 'ListFind', 'ListFindNoCase', 'ListFirst', 
			'ListGetAt', 'ListInsertAt', 'ListLast', 'ListLen', 'ListPrepend', 'ListQualify', 'ListRest', 
			'ListSetAt', 'ListSort', 'ListToArray', 'ListValueCount', 'ListValueCountNoCase', 'LJustify', 
			'Log', 'Log10', 'LSCurrencyFormat', 'LSDateFormat', 'LSEuroCurrencyFormat', 'LSIsCurrency', 
			'LSIsDate', 'LSIsNumeric', 'LSNumberFormat', 'LSParseCurrency', 'LSParseDateTime', 'LSParseNumber', 
			'LSTimeFormat', 'LTrim', 'Max', 'Mid', 'Min', 'Minute', 'Month', 'MonthAsString', 'Now', 'NumberFormat', 
			'ParagraphFormat', 'ParameterExists', 'ParseDateTime', 'Pi', 'PreserveSingleQuotes', 'Quarter', 
			'QueryAddRow', 'QueryNew', 'QuerySetCell', 'QuotedValueList', 'Rand', 'Randomize', 'RandRange', 
			'REFind', 'REFindNoCase', 'RemoveChars', 'RepeatString', 'Replace', 'ReplaceList', 'ReplaceNoCase', 
			'REReplace', 'REReplaceNoCase', 'Reverse', 'Right', 'RJustify', 'Round', 'RTrim', 'Second', 'SetLocale', 
			'SetProfileString', 'SetVariable', 'Sgn', 'Sin', 'SpanExcluding', 'SpanIncluding', 'Sqr', 'StripCR', 
			'StructAppend', 'StructClear', 'StructCopy', 'StructCount', 'StructDelete', 'StructFind', 'StructFindKey', 
			'StructFindValue', 'StructGet', 'StructInsert', 'StructIsEmpty', 'StructKeyArray', 'StructKeyExists', 
			'StructKeyList', 'StructNew', 'StructSort', 'StructUpdate', 'Tan', 'TimeFormat', 'ToBase64', 'ToBinary', 
			'ToString', 'Trim', 'UCase', 'URLDecode', 'URLEncodedFormat', 'Val', 'ValueList', 'Week', 'WriteOutput', 
			'XMLFormat', 'Year', 'YesNoFormat'
		]
	}
	,'OPERATORS' :[
		'+', '-', '/', '*', '%', '!', '&&', '||'
	]
	,'DELIMITERS' :[
		'(', ')', '[', ']', '{', '}'
	]
	,'REGEXPS' : {
		'doctype' : {
			'search' : '()(<!DOCTYPE[^>]*>)()'
			,'class' : 'doctype'
			,'modifiers' : ''
			,'execute' : 'before' // before or after
		}
		,'cftags' : {
			'search' : '(<)(/cf[a-z][^ \r\n\t>]*)([^>]*>)'
			,'class' : 'cftags'
			,'modifiers' : 'gi'
			,'execute' : 'before' // before or after
		}
		,'cftags2' : {
			'search' : '(<)(cf[a-z][^ \r\n\t>]*)([^>]*>)'
			,'class' : 'cftags2'
			,'modifiers' : 'gi'
			,'execute' : 'before' // before or after
		}
		,'tags' : {
			'search' : '(<)(/?[a-z][^ \r\n\t>]*)([^>]*>)'
			,'class' : 'tags'
			,'modifiers' : 'gi'
			,'execute' : 'before' // before or after
		}
		,'attributes' : {
			'search' : '( |\n|\r|\t)([^ \r\n\t=]+)(=)'
			,'class' : 'attributes'
			,'modifiers' : 'g'
			,'execute' : 'before' // before or after
		}
	}
	,'STYLES' : {
		'COMMENTS': 'color: #AAAAAA;'
		,'QUOTESMARKS': 'color: #6381F8;'
		,'KEYWORDS' : {
			'reserved' : 'color: #48BDDF;'
			,'functions' : 'color: #0000FF;'
			,'statements' : 'color: #60CA00;'
			}
		,'OPERATORS' : 'color: #E775F0;'
		,'DELIMITERS' : ''
		,'REGEXPS' : {
			'attributes': 'color: #990033;'
			,'cftags': 'color: #990033;'
			,'cftags2': 'color: #990033;'
			,'tags': 'color: #000099;'
			,'doctype': 'color: #8DCFB5;'
			,'test': 'color: #00FF00;'
		}	
	}		
};

 	  	 
                                                                                                                                                                                                                  ./mvappsvr/docroot/db/edit_area/reg_syntax/c.js                                                     0000777 0000000 0000000 00000003160 12534142432 020514  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.load_syntax["c"] = {
	'COMMENT_SINGLE' : {1 : '//'}
	,'COMMENT_MULTI' : {'/*' : '*/'}
	,'QUOTEMARKS' : {1: "'", 2: '"'}
	,'KEYWORD_CASE_SENSITIVE' : true
	,'KEYWORDS' : {
		'constants' : [
			'NULL', 'false', 'stdin', 'stdout', 'stderr', 'true'
		]
		,'types' : [
			'FILE', 'auto', 'char', 'const', 'double',
			'extern', 'float', 'inline', 'int', 'long', 'register',
			'short', 'signed', 'size_t', 'static', 'struct',
			'time_t', 'typedef', 'union', 'unsigned', 'void',
			'volatile'
		]
		,'statements' : [
			'do', 'else', 'enum', 'for', 'goto', 'if', 'sizeof',
			'switch', 'while'
		]
 		,'keywords' : [
			'break', 'case', 'continue', 'default', 'delete',
			'return'
		]
	}
	,'OPERATORS' :[
		'+', '-', '/', '*', '=', '<', '>', '%', '!', '?', ':', '&'
	]
	,'DELIMITERS' :[
		'(', ')', '[', ']', '{', '}'
	]
	,'REGEXPS' : {
		'precompiler' : {
			'search' : '()(#[^\r\n]*)()'
			,'class' : 'precompiler'
			,'modifiers' : 'g'
			,'execute' : 'before'
		}
/*		,'precompilerstring' : {
			'search' : '(#[\t ]*include[\t ]*)([^\r\n]*)([^\r\n]*[\r\n])'
			,'class' : 'precompilerstring'
			,'modifiers' : 'g'
			,'execute' : 'before'
		}*/
	}
	,'STYLES' : {
		'COMMENTS': 'color: #AAAAAA;'
		,'QUOTESMARKS': 'color: #6381F8;'
		,'KEYWORDS' : {
			'constants' : 'color: #EE0000;'
			,'types' : 'color: #0000EE;'
			,'statements' : 'color: #60CA00;'
			,'keywords' : 'color: #48BDDF;'
		}
		,'OPERATORS' : 'color: #FF00FF;'
		,'DELIMITERS' : 'color: #0038E1;'
		,'REGEXPS' : {
			'precompiler' : 'color: #009900;'
			,'precompilerstring' : 'color: #994400;'
		}
	}
};
                                                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/edit_area/reg_syntax/perl.js                                                  0000777 0000000 0000000 00000006136 12534142432 021242  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /***************************************************************************
 * (c) 2008 - file created by Christoph Pinkel, MTC Infomedia OHG.
 *
 * You may choose any license of the current release or any future release
 * of editarea to use, modify and/or redistribute this file.
 *
 * This language specification file supports for syntax checking on
 * a large subset of Perl 5.x.
 * The basic common syntax of Perl is fully supported, but as for
 * the highlighting of built-in operations, it's mainly designed
 * to support for hightlighting Perl code in a Safe environment (compartment)
 * as used by CoMaNet for evaluation of administrative scripts. This Safe
 * compartment basically allows for all of Opcode's :default operations,
 * but little others. See http://perldoc.perl.org/Opcode.html to learn
 * more.
 ***************************************************************************/

editAreaLoader.load_syntax["perl"] = {

	'COMMENT_SINGLE' : {1 : '#'},
	'QUOTEMARKS' : {1: "'", 2: '"'},
	'KEYWORD_CASE_SENSITIVE' : true,
	'KEYWORDS' :
	{
		'core' :
			[ "if", "else", "elsif", "while", "for", "each", "foreach",
				"next", "last", "goto", "exists", "delete", "undef",
				"my", "our", "local", "use", "require", "package", "keys", "values",
				"sub", "bless", "ref", "return" ],
		'functions' :
			[
				//from :base_core
				"int", "hex", "oct", "abs", "substr", "vec", "study", "pos",
				"length", "index", "rindex", "ord", "chr", "ucfirst", "lcfirst",
				"uc", "lc", "quotemeta", "chop", "chomp", "split", "list", "splice",
				"push", "pop", "shift", "unshift", "reverse", "and", "or", "dor",
				"xor", "warn", "die", "prototype",
				//from :base_mem
				"concat", "repeat", "join", "range",
				//none from :base_loop, as we'll see them as basic statements...
				//from :base_orig
				"sprintf", "crypt", "tie", "untie", "select", "localtime", "gmtime",
				//others
				"print", "open", "close"
			]
	},
	'OPERATORS' :
		[ '+', '-', '/', '*', '=', '<', '>', '!', '||', '.', '&&',
			' eq ', ' ne ', '=~' ],
	'DELIMITERS' :
		[ '(', ')', '[', ']', '{', '}' ],
	'REGEXPS' :
	{
		'packagedecl' : { 'search': '(package )([^ \r\n\t#;]*)()',
			'class' : 'scopingnames',
			'modifiers' : 'g', 'execute' : 'before' },
		'subdecl' : { 'search': '(sub )([^ \r\n\t#]*)()',
			'class' : 'scopingnames',
			'modifiers' : 'g', 'execute' : 'before' },
		'scalars' : { 'search': '()(\\\$[a-zA-Z0-9_:]*)()',
			'class' : 'vars',
			'modifiers' : 'g', 'execute' : 'after' },
		'arrays' : { 'search': '()(@[a-zA-Z0-9_:]*)()',
			'class' : 'vars',
			'modifiers' : 'g', 'execute' : 'after' },
		'hashs' : { 'search': '()(%[a-zA-Z0-9_:]*)()',
			'class' : 'vars',
			'modifiers' : 'g', 'execute' : 'after' },
	},

	'STYLES' :
	{
		'COMMENTS': 'color: #AAAAAA;',
		'QUOTESMARKS': 'color: #DC0000;',
		'KEYWORDS' :
		{
			'core' : 'color: #8aca00;',
			'functions' : 'color: #2B60FF;'
		},
		'OPERATORS' : 'color: #8aca00;',
		'DELIMITERS' : 'color: #0038E1;',
		'REGEXPS':
		{
			'scopingnames' : 'color: #ff0000;',
			'vars' : 'color: #00aaaa;',
		}
	} //'STYLES'
};
                                                                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/edit_area/reg_syntax/pas.js                                                   0000777 0000000 0000000 00000006334 12534142432 021063  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.load_syntax["pas"] = {
	'COMMENT_SINGLE' : {}
	,'COMMENT_MULTI' : {'{' : '}', '(*':'*)'}
	,'QUOTEMARKS' : {1: '"', 2: "'"}
	,'KEYWORD_CASE_SENSITIVE' : false
	,'KEYWORDS' : {
		'constants' : [
			'Blink', 'Black', 'Blue', 'Green', 'Cyan', 'Red',
			'Magenta', 'Brown', 'LightGray', 'DarkGray',
			'LightBlue', 'LightGreen', 'LightCyan', 'LightRed',
			'LightMagenta', 'Yellow', 'White', 'MaxSIntValue',
			'MaxUIntValue', 'maxint', 'maxLongint', 'maxSmallint',
			'erroraddr', 'errorcode', 'LineEnding'
		]
		,'keywords' : [
			'in', 'or', 'div', 'mod', 'and', 'shl', 'shr', 'xor',
			'pow', 'is', 'not','Absolute', 'And_then', 'Array',
			'Begin', 'Bindable', 'Case', 'Const', 'Do', 'Downto',
			'Else', 'End', 'Export', 'File', 'For', 'Function',
			'Goto', 'If', 'Import', 'Implementation', 'Inherited',
			'Inline', 'Interface', 'Label', 'Module', 'Nil',
			'Object', 'Of', 'Only', 'Operator', 'Or_else',
			'Otherwise', 'Packed', 'Procedure', 'Program',
			'Protected', 'Qualified', 'Record', 'Repeat',
			'Restricted', 'Set', 'Then', 'To', 'Type', 'Unit',
			'Until', 'Uses', 'Value', 'Var', 'Virtual', 'While',
			'With'
		]
		,'functions' : [
			'Abs', 'Addr', 'Append', 'Arctan', 'Assert', 'Assign',
			'Assigned', 'BinStr', 'Blockread', 'Blockwrite',
			'Break', 'Chdir', 'Chr', 'Close', 'CompareByte',
			'CompareChar', 'CompareDWord', 'CompareWord', 'Concat',
			'Continue', 'Copy', 'Cos', 'CSeg', 'Dec', 'Delete',
			'Dispose', 'DSeg', 'Eof', 'Eoln', 'Erase', 'Exclude',
			'Exit', 'Exp', 'Filepos', 'Filesize', 'FillByte',
			'Fillchar', 'FillDWord', 'Fillword', 'Flush', 'Frac',
			'Freemem', 'Getdir', 'Getmem', 'GetMemoryManager',
			'Halt', 'HexStr', 'Hi', 'High', 'Inc', 'Include',
			'IndexByte', 'IndexChar', 'IndexDWord', 'IndexWord',
			'Insert', 'IsMemoryManagerSet', 'Int', 'IOresult',
			'Length', 'Ln', 'Lo', 'LongJmp', 'Low', 'Lowercase',
			'Mark', 'Maxavail', 'Memavail', 'Mkdir', 'Move',
			'MoveChar0', 'New', 'Odd', 'OctStr', 'Ofs', 'Ord',
			'Paramcount', 'Paramstr', 'Pi', 'Pos', 'Power', 'Pred',
			'Ptr', 'Random', 'Randomize', 'Read', 'Readln',
			'Real2Double', 'Release', 'Rename', 'Reset', 'Rewrite',
			'Rmdir', 'Round', 'Runerror', 'Seek', 'SeekEof',
			'SeekEoln', 'Seg', 'SetMemoryManager', 'SetJmp',
			'SetLength', 'SetString', 'SetTextBuf', 'Sin', 'SizeOf',
			'Sptr', 'Sqr', 'Sqrt', 'SSeg', 'Str', 'StringOfChar',
			'Succ', 'Swap', 'Trunc', 'Truncate', 'Upcase', 'Val',
			'Write', 'WriteLn'
		]
		,'types' : [
			'Integer', 'Shortint', 'SmallInt', 'Longint',
			'Longword', 'Int64', 'Byte', 'Word', 'Cardinal',
			'QWord', 'Boolean', 'ByteBool', 'LongBool', 'Char',
			'Real', 'Single', 'Double', 'Extended', 'Comp',
			'String', 'ShortString', 'AnsiString', 'PChar'
		]
	}
	,'OPERATORS' :[
		'@', '*', '+', '-', '/', '^', ':=', '<', '=', '>'
	]
	,'DELIMITERS' :[
		'(', ')', '[', ']'
	]
	,'STYLES' : {
		'COMMENTS': 'color: #AAAAAA;'
		,'QUOTESMARKS': 'color: #6381F8;'
		,'KEYWORDS' : {
			'specials' : 'color: #EE0000;'
			,'constants' : 'color: #654321;'
			,'keywords' : 'color: #48BDDF;'
			,'functions' : 'color: #449922;'
			,'types' : 'color: #2B60FF;'
			}
		,'OPERATORS' : 'color: #FF00FF;'
		,'DELIMITERS' : 'color: #60CA00;'
	}
};
                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/edit_area/reg_syntax/java.js                                                  0000777 0000000 0000000 00000003203 12534142432 021211  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.load_syntax["java"] = {
'COMMENT_SINGLE': { 1: '//', 2: '@' }
	, 'COMMENT_MULTI': { '/*': '*/' }
	, 'QUOTEMARKS': { 1: "'", 2: '"' }
	, 'KEYWORD_CASE_SENSITIVE': true
	, 'KEYWORDS': {
	    'constants': [
			'null', 'false', 'true'
		]
		, 'types': [
			'String', 'int', 'short', 'long', 'char', 'double', 'byte',
			'float', 'static', 'void', 'private', 'boolean', 'protected',
			'public', 'const', 'class', 'final', 'abstract', 'volatile',
			'enum', 'transient', 'interface'
		]
		, 'statements': [
            'this', 'extends', 'if', 'do', 'while', 'try', 'catch', 'finally',
            'throw', 'throws', 'else', 'for', 'switch', 'continue', 'implements',
            'break', 'case', 'default', 'goto'
		]
 		, 'keywords': [
           'new', 'return', 'import', 'native', 'super', 'package', 'assert', 'synchronized',
           'instanceof', 'strictfp'
		]
	}
	, 'OPERATORS': [
		'+', '-', '/', '*', '=', '<', '>', '%', '!', '?', ':', '&'
	]
	, 'DELIMITERS': [
		'(', ')', '[', ']', '{', '}'
	]
	, 'REGEXPS': {
	    'precompiler': {
	        'search': '()(#[^\r\n]*)()'
			, 'class': 'precompiler'
			, 'modifiers': 'g'
			, 'execute': 'before'
	    }
	}
	, 'STYLES': {
	    'COMMENTS': 'color: #AAAAAA;'
		, 'QUOTESMARKS': 'color: #6381F8;'
		, 'KEYWORDS': {
		    'constants': 'color: #EE0000;'
			, 'types': 'color: #0000EE;'
			, 'statements': 'color: #60CA00;'
			, 'keywords': 'color: #48BDDF;'
		}
		, 'OPERATORS': 'color: #FF00FF;'
		, 'DELIMITERS': 'color: #0038E1;'
		, 'REGEXPS': {
		    'precompiler': 'color: #009900;'
			, 'precompilerstring': 'color: #994400;'
		}
	}
};
                                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/edit_area/reg_syntax/sql.js                                                   0000777 0000000 0000000 00000006470 12534142432 021100  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.load_syntax["sql"] = {
	'COMMENT_SINGLE' : {1 : '--'}
	,'COMMENT_MULTI' : {'/*' : '*/'}
	,'QUOTEMARKS' : {1: "'", 2: '"', 3: '`'}
	,'KEYWORD_CASE_SENSITIVE' : false
	,'KEYWORDS' : {
		'statements' : [
			'select', 'SELECT', 'where', 'order', 'by',
			'insert', 'from', 'update', 'grant', 'left join', 'right join', 
            'union', 'group', 'having', 'limit', 'alter', 'LIKE','IN','CASE'
		]
		,'reserved' : [
			'null', 'enum', 'int', 'boolean', 'add', 'varchar'
			
		]
		,'functions' : [
   'ABS','ACOS','ADDDATE','ADDTIME','AES_DECRYPT','AES_ENCRYPT','ASCII','ASIN','ATAN2 ATAN','ATAN','AVG','BENCHMARK','DISTINCT','BIN','BIT_AND','BIT_COUNT','BIT_LENGTH','BIT_OR','BIT_XOR','CAST','CEILING CEIL','CHAR_LENGTH','CHAR',
'CHARACTER_LENGTH','CHARSET','COALESCE','COERCIBILITY','COLLATION','COMPRESS','CONCAT_WS','CONCAT','CONNECTION_ID','CONV','CONVERT_TZ','COS','COT','COUNT','CRC32','CURDATE','CURRENT_DATE','CURRENT_TIME','CURRENT_TIMESTAMP','CURRENT_USER','CURTIME','DATABASE','DATE_ADD','DATE_FORMAT','DATE_SUB','DATE','DATEDIFF','DAY','DAYNAME','DAYOFMONTH',
'DAYOFWEEK','DAYOFYEAR','DECODE','DEFAULT','DEGREES','DES_DECRYPT','DES_ENCRYPT','ELT','ENCODE','ENCRYPT','EXP','EXPORT_SET','EXTRACT','FIELD','FIND_IN_SET','FLOOR','FORMAT','FOUND_ROWS','FROM_DAYS','FROM_UNIXTIME','GET_FORMAT','GET_LOCK','GREATEST','GROUP_CONCAT','HEX','HOUR','IF','IFNULL','INET_ATON','INET_NTOA',
'INSERT','INSTR','INTERVAL','IS_FREE_LOCK','IS_USED_LOCK','ISNULL','LAST_DAY','LAST_INSERT_ID','LCASE','LEAST','LEFT','LENGTH','LN','LOAD_FILE','LOCALTIME','LOCALTIMESTAMP','LOCATE','LOG10','LOG2','LOG','LOWER','LPAD','LTRIM','MAKE_SET','MAKEDATE','MAKETIME','MASTER_POS_WAIT','MAX','MD5','MICROSECOND',
'MID','MIN','MINUTE','MOD','MONTH','MONTHNAME','NOW','NULLIF','OCT','OCTET_LENGTH','OLD_PASSWORD','ORD','PASSWORD','PERIOD_ADD','PERIOD_DIFF','PI','POSITION','POW','POWER','PROCEDURE ANALYSE','QUARTER','QUOTE','RADIANS','RAND','RELEASE_LOCK','REPEAT','REPLACE','REVERSE','RIGHT','ROUND',
'RPAD','RTRIM','SEC_TO_TIME','SECOND','SESSION_USER','SHA1','SHA','SIGN','SIN','SOUNDEX','SOUNDS LIKE','SPACE','SQRT','STD','STDDEV','STR_TO_DATE','STRCMP','SUBDATE','SUBSTRING_INDEX','SUBSTRING','SUBSTR','SUBTIME','SUM','SYSDATE','SYSTEM_USER','TAN','TIME_FORMAT','TIME_TO_SEC','TIME','TIMEDIFF',
'TIMESTAMP','TO_DAYS','TRIM','TRUNCATE','UCASE','UNCOMPRESS','UNCOMPRESSED_LENGTH','UNHEX','UNIX_TIMESTAMP','UPPER','USER','UTC_DATE','UTC_TIME','UTC_TIMESTAMP','UUID','VALUES','VARIANCE','WEEK','WEEKDAY','WEEKOFYEAR','YEAR','YEARWEEK'
		]
	}
	,'OPERATORS' :[
     'AND','&&','BETWEEN','BINARY','&','|','^','/','DIV','<=>','=','>=','>','<<','>>','IS','NULL','<=','<','-','%','!=','<>','!','||','OR','+','REGEXP','RLIKE','XOR','~','*'
	]
	,'DELIMITERS' :[
		'(', ')', '[', ']', '{', '}'
	]
	,'REGEXPS' : {
		// highlight all variables (@...)
		'variables' : {
			'search' : '()(\\@\\w+)()'
			,'class' : 'variables'
			,'modifiers' : 'g'
			,'execute' : 'before' // before or after
		}
	}
	,'STYLES' : {
		'COMMENTS': 'color: #AAAAAA;'
		,'QUOTESMARKS': 'color: #879EFA;'
		,'KEYWORDS' : {
			'reserved' : 'color: #48BDDF;'
			,'functions' : 'color: #0040FD;'
			,'statements' : 'color: #60CA00;'
			}
		,'OPERATORS' : 'color: #FF00FF;'
		,'DELIMITERS' : 'color: #2B60FF;'
		,'REGEXPS' : {
			'variables' : 'color: #E0BD54;'
		}		
	}
};
                                                                                                                                                                                                        ./mvappsvr/docroot/db/edit_area/reg_syntax/php.js                                                   0000777 0000000 0000000 00000033467 12534142432 021076  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.load_syntax["php"] = {
	'COMMENT_SINGLE' : {1 : '//', 2 : '#'}
	,'COMMENT_MULTI' : {'/*' : '*/'}
	,'QUOTEMARKS' : {1: "'", 2: '"'}
	,'KEYWORD_CASE_SENSITIVE' : false
	,'KEYWORDS' : {
		'statements' : [
			'include', 'require', 'include_once', 'require_once',
			'for', 'foreach', 'as', 'if', 'elseif', 'else', 'while', 'do', 'endwhile',
            'endif', 'switch', 'case', 'endswitch',
			'return', 'break', 'continue'
		]
		,'reserved' : [
			'_GET', '_POST', '_SESSION', '_SERVER', '_FILES', '_ENV', '_COOKIE', '_REQUEST',
			'null', '__LINE__', '__FILE__',
			'false', '&lt;?php', '?&gt;', '&lt;?',
			'&lt;script language', '&lt;/script&gt;',
			'true', 'var', 'default',
			'function', 'class', 'new', '&amp;new', 'this',
			'__FUNCTION__', '__CLASS__', '__METHOD__', 'PHP_VERSION',
			'PHP_OS', 'DEFAULT_INCLUDE_PATH', 'PEAR_INSTALL_DIR', 'PEAR_EXTENSION_DIR',
			'PHP_EXTENSION_DIR', 'PHP_BINDIR', 'PHP_LIBDIR', 'PHP_DATADIR', 'PHP_SYSCONFDIR',
			'PHP_LOCALSTATEDIR', 'PHP_CONFIG_FILE_PATH', 'PHP_OUTPUT_HANDLER_START', 'PHP_OUTPUT_HANDLER_CONT',
			'PHP_OUTPUT_HANDLER_END', 'E_ERROR', 'E_WARNING', 'E_PARSE', 'E_NOTICE',
			'E_CORE_ERROR', 'E_CORE_WARNING', 'E_COMPILE_ERROR', 'E_COMPILE_WARNING', 'E_USER_ERROR',
			'E_USER_WARNING', 'E_USER_NOTICE', 'E_ALL'
			
		]
		,'functions' : [
			'func_num_args', 'func_get_arg', 'func_get_args', 'strlen', 'strcmp', 'strncmp', 'strcasecmp', 'strncasecmp', 'each', 'error_reporting', 'define', 'defined',
			'trigger_error', 'user_error', 'set_error_handler', 'restore_error_handler', 'get_declared_classes', 'get_loaded_extensions',
			'extension_loaded', 'get_extension_funcs', 'debug_backtrace',
			'constant', 'bin2hex', 'sleep', 'usleep', 'time', 'mktime', 'gmmktime', 'strftime', 'gmstrftime', 'strtotime', 'date', 'gmdate', 'getdate', 'localtime', 'checkdate', 'flush', 'wordwrap', 'htmlspecialchars', 'htmlentities', 'html_entity_decode', 'md5', 'md5_file', 'crc32', 'getimagesize', 'image_type_to_mime_type', 'phpinfo', 'phpversion', 'phpcredits', 'strnatcmp', 'strnatcasecmp', 'substr_count', 'strspn', 'strcspn', 'strtok', 'strtoupper', 'strtolower', 'strpos', 'strrpos', 'strrev', 'hebrev', 'hebrevc', 'nl2br', 'basename', 'dirname', 'pathinfo', 'stripslashes', 'stripcslashes', 'strstr', 'stristr', 'strrchr', 'str_shuffle', 'str_word_count', 'strcoll', 'substr', 'substr_replace', 'quotemeta', 'ucfirst', 'ucwords', 'strtr', 'addslashes', 'addcslashes', 'rtrim', 'str_replace', 'str_repeat', 'count_chars', 'chunk_split', 'trim', 'ltrim', 'strip_tags', 'similar_text', 'explode', 'implode', 'setlocale', 'localeconv',
			'parse_str', 'str_pad', 'chop', 'strchr', 'sprintf', 'printf', 'vprintf', 'vsprintf', 'sscanf', 'fscanf', 'parse_url', 'urlencode', 'urldecode', 'rawurlencode', 'rawurldecode', 'readlink', 'linkinfo', 'link', 'unlink', 'exec', 'system', 'escapeshellcmd', 'escapeshellarg', 'passthru', 'shell_exec', 'proc_open', 'proc_close', 'rand', 'srand', 'getrandmax', 'mt_rand', 'mt_srand', 'mt_getrandmax', 'base64_decode', 'base64_encode', 'abs', 'ceil', 'floor', 'round', 'is_finite', 'is_nan', 'is_infinite', 'bindec', 'hexdec', 'octdec', 'decbin', 'decoct', 'dechex', 'base_convert', 'number_format', 'fmod', 'ip2long', 'long2ip', 'getenv', 'putenv', 'getopt', 'microtime', 'gettimeofday', 'getrusage', 'uniqid', 'quoted_printable_decode', 'set_time_limit', 'get_cfg_var', 'magic_quotes_runtime', 'set_magic_quotes_runtime', 'get_magic_quotes_gpc', 'get_magic_quotes_runtime',
			'import_request_variables', 'error_log', 'serialize', 'unserialize', 'memory_get_usage', 'var_dump', 'var_export', 'debug_zval_dump', 'print_r','highlight_file', 'show_source', 'highlight_string', 'ini_get', 'ini_get_all', 'ini_set', 'ini_alter', 'ini_restore', 'get_include_path', 'set_include_path', 'restore_include_path', 'setcookie', 'header', 'headers_sent', 'connection_aborted', 'connection_status', 'ignore_user_abort', 'parse_ini_file', 'is_uploaded_file', 'move_uploaded_file', 'intval', 'floatval', 'doubleval', 'strval', 'gettype', 'settype', 'is_null', 'is_resource', 'is_bool', 'is_long', 'is_float', 'is_int', 'is_integer', 'is_double', 'is_real', 'is_numeric', 'is_string', 'is_array', 'is_object', 'is_scalar',
			'ereg', 'ereg_replace', 'eregi', 'eregi_replace', 'split', 'spliti', 'join', 'sql_regcase', 'dl', 'pclose', 'popen', 'readfile', 'rewind', 'rmdir', 'umask', 'fclose', 'feof', 'fgetc', 'fgets', 'fgetss', 'fread', 'fopen', 'fpassthru', 'ftruncate', 'fstat', 'fseek', 'ftell', 'fflush', 'fwrite', 'fputs', 'mkdir', 'rename', 'copy', 'tempnam', 'tmpfile', 'file', 'file_get_contents', 'stream_select', 'stream_context_create', 'stream_context_set_params', 'stream_context_set_option', 'stream_context_get_options', 'stream_filter_prepend', 'stream_filter_append', 'fgetcsv', 'flock', 'get_meta_tags', 'stream_set_write_buffer', 'set_file_buffer', 'set_socket_blocking', 'stream_set_blocking', 'socket_set_blocking', 'stream_get_meta_data', 'stream_register_wrapper', 'stream_wrapper_register', 'stream_set_timeout', 'socket_set_timeout', 'socket_get_status', 'realpath', 'fnmatch', 'fsockopen', 'pfsockopen', 'pack', 'unpack', 'get_browser', 'crypt', 'opendir', 'closedir', 'chdir', 'getcwd', 'rewinddir', 'readdir', 'dir', 'glob', 'fileatime', 'filectime', 'filegroup', 'fileinode', 'filemtime', 'fileowner', 'fileperms', 'filesize', 'filetype', 'file_exists', 'is_writable', 'is_writeable', 'is_readable', 'is_executable', 'is_file', 'is_dir', 'is_link', 'stat', 'lstat', 'chown',
			'touch', 'clearstatcache', 'mail', 'ob_start', 'ob_flush', 'ob_clean', 'ob_end_flush', 'ob_end_clean', 'ob_get_flush', 'ob_get_clean', 'ob_get_length', 'ob_get_level', 'ob_get_status', 'ob_get_contents', 'ob_implicit_flush', 'ob_list_handlers', 'ksort', 'krsort', 'natsort', 'natcasesort', 'asort', 'arsort', 'sort', 'rsort', 'usort', 'uasort', 'uksort', 'shuffle', 'array_walk', 'count', 'end', 'prev', 'next', 'reset', 'current', 'key', 'min', 'max', 'in_array', 'array_search', 'extract', 'compact', 'array_fill', 'range', 'array_multisort', 'array_push', 'array_pop', 'array_shift', 'array_unshift', 'array_splice', 'array_slice', 'array_merge', 'array_merge_recursive', 'array_keys', 'array_values', 'array_count_values', 'array_reverse', 'array_reduce', 'array_pad', 'array_flip', 'array_change_key_case', 'array_rand', 'array_unique', 'array_intersect', 'array_intersect_assoc', 'array_diff', 'array_diff_assoc', 'array_sum', 'array_filter', 'array_map', 'array_chunk', 'array_key_exists', 'pos', 'sizeof', 'key_exists', 'assert', 'assert_options', 'version_compare', 'ftok', 'str_rot13', 'aggregate',
			'session_name', 'session_module_name', 'session_save_path', 'session_id', 'session_regenerate_id', 'session_decode', 'session_register', 'session_unregister', 'session_is_registered', 'session_encode',
			'session_start', 'session_destroy', 'session_unset', 'session_set_save_handler', 'session_cache_limiter', 'session_cache_expire', 'session_set_cookie_params', 'session_get_cookie_params', 'session_write_close', 'preg_match', 'preg_match_all', 'preg_replace', 'preg_replace_callback', 'preg_split', 'preg_quote', 'preg_grep', 'overload', 'ctype_alnum', 'ctype_alpha', 'ctype_cntrl', 'ctype_digit', 'ctype_lower', 'ctype_graph', 'ctype_print', 'ctype_punct', 'ctype_space', 'ctype_upper', 'ctype_xdigit', 'virtual', 'apache_request_headers', 'apache_note', 'apache_lookup_uri', 'apache_child_terminate', 'apache_setenv', 'apache_response_headers', 'apache_get_version', 'getallheaders', 'mysql_connect', 'mysql_pconnect', 'mysql_close', 'mysql_select_db', 'mysql_create_db', 'mysql_drop_db', 'mysql_query', 'mysql_unbuffered_query', 'mysql_db_query', 'mysql_list_dbs', 'mysql_list_tables', 'mysql_list_fields', 'mysql_list_processes', 'mysql_error', 'mysql_errno', 'mysql_affected_rows', 'mysql_insert_id', 'mysql_result', 'mysql_num_rows', 'mysql_num_fields', 'mysql_fetch_row', 'mysql_fetch_array', 'mysql_fetch_assoc', 'mysql_fetch_object', 'mysql_data_seek', 'mysql_fetch_lengths', 'mysql_fetch_field', 'mysql_field_seek', 'mysql_free_result', 'mysql_field_name', 'mysql_field_table', 'mysql_field_len', 'mysql_field_type', 'mysql_field_flags', 'mysql_escape_string', 'mysql_real_escape_string', 'mysql_stat',
			'mysql_thread_id', 'mysql_client_encoding', 'mysql_get_client_info', 'mysql_get_host_info', 'mysql_get_proto_info', 'mysql_get_server_info', 'mysql_info', 'mysql', 'mysql_fieldname', 'mysql_fieldtable', 'mysql_fieldlen', 'mysql_fieldtype', 'mysql_fieldflags', 'mysql_selectdb', 'mysql_createdb', 'mysql_dropdb', 'mysql_freeresult', 'mysql_numfields', 'mysql_numrows', 'mysql_listdbs', 'mysql_listtables', 'mysql_listfields', 'mysql_db_name', 'mysql_dbname', 'mysql_tablename', 'mysql_table_name', 'pg_connect', 'pg_pconnect', 'pg_close', 'pg_connection_status', 'pg_connection_busy', 'pg_connection_reset', 'pg_host', 'pg_dbname', 'pg_port', 'pg_tty', 'pg_options', 'pg_ping', 'pg_query', 'pg_send_query', 'pg_cancel_query', 'pg_fetch_result', 'pg_fetch_row', 'pg_fetch_assoc', 'pg_fetch_array', 'pg_fetch_object', 'pg_fetch_all', 'pg_affected_rows', 'pg_get_result', 'pg_result_seek', 'pg_result_status', 'pg_free_result', 'pg_last_oid', 'pg_num_rows', 'pg_num_fields', 'pg_field_name', 'pg_field_num', 'pg_field_size', 'pg_field_type', 'pg_field_prtlen', 'pg_field_is_null', 'pg_get_notify', 'pg_get_pid', 'pg_result_error', 'pg_last_error', 'pg_last_notice', 'pg_put_line', 'pg_end_copy', 'pg_copy_to', 'pg_copy_from',
			'pg_trace', 'pg_untrace', 'pg_lo_create', 'pg_lo_unlink', 'pg_lo_open', 'pg_lo_close', 'pg_lo_read', 'pg_lo_write', 'pg_lo_read_all', 'pg_lo_import', 'pg_lo_export', 'pg_lo_seek', 'pg_lo_tell', 'pg_escape_string', 'pg_escape_bytea', 'pg_unescape_bytea', 'pg_client_encoding', 'pg_set_client_encoding', 'pg_meta_data', 'pg_convert', 'pg_insert', 'pg_update', 'pg_delete', 'pg_select', 'pg_exec', 'pg_getlastoid', 'pg_cmdtuples', 'pg_errormessage', 'pg_numrows', 'pg_numfields', 'pg_fieldname', 'pg_fieldsize', 'pg_fieldtype', 'pg_fieldnum', 'pg_fieldprtlen', 'pg_fieldisnull', 'pg_freeresult', 'pg_result', 'pg_loreadall', 'pg_locreate', 'pg_lounlink', 'pg_loopen', 'pg_loclose', 'pg_loread', 'pg_lowrite', 'pg_loimport', 'pg_loexport',
			'echo', 'print', 'global', 'static', 'exit', 'array', 'empty', 'eval', 'isset', 'unset', 'die'

		]
	}
	,'OPERATORS' :[
		'+', '-', '/', '*', '=', '<', '>', '%', '!', '&&', '||'
	]
	,'DELIMITERS' :[
		'(', ')', '[', ']', '{', '}'
	]
	,'REGEXPS' : {
		// highlight all variables ($...)
		'variables' : {
			'search' : '()(\\$\\w+)()'
			,'class' : 'variables'
			,'modifiers' : 'g'
			,'execute' : 'before' // before or after
		}
	}
	,'STYLES' : {
		'COMMENTS': 'color: #AAAAAA;'
		,'QUOTESMARKS': 'color: #879EFA;'
		,'KEYWORDS' : {
			'reserved' : 'color: #48BDDF;'
			,'functions' : 'color: #0040FD;'
			,'statements' : 'color: #60CA00;'
			}
		,'OPERATORS' : 'color: #FF00FF;'
		,'DELIMITERS' : 'color: #2B60FF;'
		,'REGEXPS' : {
			'variables' : 'color: #E0BD54;'
		}		
	}
	,'AUTO_COMPLETION' :  {
		"default": {	// the name of this definition group. It's posisble to have different rules inside the same definition file
			"REGEXP": { "before_word": "[^a-zA-Z0-9_]|^"	// \\s|\\.|
						,"possible_words_letters": "[a-zA-Z0-9_\$]+"
						,"letter_after_word_must_match": "[^a-zA-Z0-9_]|$"
						,"prefix_separator": "\\-\\>|\\:\\:"
					}
			,"CASE_SENSITIVE": true
			,"MAX_TEXT_LENGTH": 100		// the maximum length of the text being analyzed before the cursor position
			,"KEYWORDS": {
					'': [	// the prefix of thoses items
						/**
						 * 0 : the keyword the user is typing
						 * 1 : (optionnal) the string inserted in code ("{@}" being the new position of the cursor, "§" beeing the equivalent to the value the typed string indicated if the previous )
						 * 		If empty the keyword will be displayed
						 * 2 : (optionnal) the text that appear in the suggestion box (if empty, the string to insert will be displayed)
						 */
						 ['$_POST']
			    		,['$_GET']
			    		,['$_SESSION']
			    		,['$_SERVER']
			    		,['$_FILES']
			    		,['$_ENV']
			    		,['$_COOKIE']
			    		,['$_REQUEST']
			    		// magic methods
			    		,['__construct', '§( {@} )']
			    		,['__destruct', '§( {@} )']
			    		,['__sleep', '§( {@} )']
			    		,['__wakeup', '§( {@} )']
			    		,['__toString', '§( {@} )']
			    		// include
			    		,['include', '§ "{@}";']
			    		,['include_once', '§ "{@}";']
			    		,['require', '§ "{@}";']
			    		,['require_once', '§ "{@}";']
			    		// statements
			    		,['for', '§( {@} )']
			    		,['foreach', '§( {@} )']
			    		,['if', '§( {@} )']
			    		,['elseif', '§( {@} )']
			    		,['while', '§( {@} )']
			    		,['switch', '§( {@} )']
			    		,['break']
			    		,['case']
			    		,['continue']
			    		,['do']
			    		,['else']
			    		,['endif']
			    		,['endswitch']
			    		,['endwhile']
			    		,['return']
			    		// function
			    		,['unset', '§( {@} )']
					]
				}
			}
		,"live": {	
			
			// class NAME: /class\W+([a-z]+)\W+/gi
			// method: /^(public|private|protected)?\s*function\s+([a-z][a-z0-9\_]*)\s*(\([^\{]*\))/gmi
			// static: /^(public|private|protected)?\s+static\s+(public|private|protected)?\s*function\s+([a-z][a-z0-9\_]*)\s*(\([^\{]*\))/gmi 
			// attributes: /(\$this\-\>|(?:var|public|protected|private)\W+\$)([a-z0-9\_]+)(?!\()\b/gi 
			// 		v1 : /(\$this\-\>|var\W+|public\W+|protected\W+|private\W+)([a-z0-9\_]+)\W*(=|;)/gi 
			// var type: /(\$(this\-\>)?[a-z0-9\_]+)\s*\=\s*new\s+([a-z0-9\_])+/gi 
			
			
			"REGEXP": { "before_word": "[^a-zA-Z0-9_]|^"	// \\s|\\.|
						,"possible_words_letters": "[a-zA-Z0-9_\$]+"
						,"letter_after_word_must_match": "[^a-zA-Z0-9_]|$"
						,"prefix_separator": "\\-\\>"
					}
			,"CASE_SENSITIVE": true
			,"MAX_TEXT_LENGTH": 100		// the maximum length of the text being analyzed before the cursor position
			,"KEYWORDS": {
					'$this': [	// the prefix of thoses items
						['test']
					]
				}
			}
	}
};
                                                                                                                                                                                                         ./mvappsvr/docroot/db/edit_area/reg_syntax/css.js                                                   0000777 0000000 0000000 00000011554 12534142432 021070  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.load_syntax["css"] = {
	'COMMENT_SINGLE' : {1 : '@'}
	,'COMMENT_MULTI' : {'/*' : '*/'}
	,'QUOTEMARKS' : ['"', "'"]
	,'KEYWORD_CASE_SENSITIVE' : false
	,'KEYWORDS' : {
		'attributes' : [
			'aqua', 'azimuth', 'background-attachment', 'background-color',
			'background-image', 'background-position', 'background-repeat',
			'background', 'border-bottom-color', 'border-bottom-style',
			'border-bottom-width', 'border-left-color', 'border-left-style',
			'border-left-width', 'border-right', 'border-right-color',
			'border-right-style', 'border-right-width', 'border-top-color',
			'border-top-style', 'border-top-width','border-bottom', 'border-collapse',
			'border-left', 'border-width', 'border-color', 'border-spacing',
			'border-style', 'border-top', 'border',  'caption-side',
			'clear', 'clip', 'color', 'content', 'counter-increment', 'counter-reset',
			'cue-after', 'cue-before', 'cue', 'cursor', 'direction', 'display',
			'elevation', 'empty-cells', 'float', 'font-family', 'font-size',
			'font-size-adjust', 'font-stretch', 'font-style', 'font-variant',
			'font-weight', 'font', 'height', 'letter-spacing', 'line-height',
			'list-style', 'list-style-image', 'list-style-position', 'list-style-type',
			'margin-bottom', 'margin-left', 'margin-right', 'margin-top', 'margin',
			'marker-offset', 'marks', 'max-height', 'max-width', 'min-height',
			'min-width', 'opacity', 'orphans', 'outline', 'outline-color', 'outline-style',
			'outline-width', 'overflow', 'padding-bottom', 'padding-left',
			'padding-right', 'padding-top', 'padding', 'page', 'page-break-after',
			'page-break-before', 'page-break-inside', 'pause-after', 'pause-before',
			'pause', 'pitch', 'pitch-range',  'play-during', 'position', 'quotes',
			'richness', 'right', 'size', 'speak-header', 'speak-numeral', 'speak-punctuation',
			'speak', 'speech-rate', 'stress', 'table-layout', 'text-align', 'text-decoration',
			'text-indent', 'text-shadow', 'text-transform', 'top', 'unicode-bidi',
			'vertical-align', 'visibility', 'voice-family', 'volume', 'white-space', 'widows',
			'width', 'word-spacing', 'z-index', 'bottom', 'left'
		]
		,'values' : [
			'above', 'absolute', 'always', 'armenian', 'aural', 'auto', 'avoid',
			'baseline', 'behind', 'below', 'bidi-override', 'black', 'blue', 'blink', 'block', 'bold', 'bolder', 'both',
			'capitalize', 'center-left', 'center-right', 'center', 'circle', 'cjk-ideographic', 
            'close-quote', 'collapse', 'condensed', 'continuous', 'crop', 'crosshair', 'cross', 'cursive',
			'dashed', 'decimal-leading-zero', 'decimal', 'default', 'digits', 'disc', 'dotted', 'double',
			'e-resize', 'embed', 'extra-condensed', 'extra-expanded', 'expanded',
			'fantasy', 'far-left', 'far-right', 'faster', 'fast', 'fixed', 'fuchsia',
			'georgian', 'gray', 'green', 'groove', 'hebrew', 'help', 'hidden', 'hide', 'higher',
			'high', 'hiragana-iroha', 'hiragana', 'icon', 'inherit', 'inline-table', 'inline',
			'inset', 'inside', 'invert', 'italic', 'justify', 'katakana-iroha', 'katakana',
			'landscape', 'larger', 'large', 'left-side', 'leftwards', 'level', 'lighter', 'lime', 'line-through', 'list-item', 'loud', 'lower-alpha', 'lower-greek', 'lower-roman', 'lowercase', 'ltr', 'lower', 'low',
			'maroon', 'medium', 'message-box', 'middle', 'mix', 'monospace',
			'n-resize', 'narrower', 'navy', 'ne-resize', 'no-close-quote', 'no-open-quote', 'no-repeat', 'none', 'normal', 'nowrap', 'nw-resize',
			'oblique', 'olive', 'once', 'open-quote', 'outset', 'outside', 'overline',
			'pointer', 'portrait', 'purple', 'px',
			'red', 'relative', 'repeat-x', 'repeat-y', 'repeat', 'rgb', 'ridge', 'right-side', 'rightwards',
			's-resize', 'sans-serif', 'scroll', 'se-resize', 'semi-condensed', 'semi-expanded', 'separate', 'serif', 'show', 'silent', 'silver', 'slow', 'slower', 'small-caps', 'small-caption', 'smaller', 'soft', 'solid', 'spell-out', 'square',
			'static', 'status-bar', 'super', 'sw-resize',
			'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row', 'table-row-group', 'teal', 'text', 'text-bottom', 'text-top', 'thick', 'thin', 'transparent',
			'ultra-condensed', 'ultra-expanded', 'underline', 'upper-alpha', 'upper-latin', 'upper-roman', 'uppercase', 'url',
			'visible',
			'w-resize', 'wait', 'white', 'wider',
			'x-fast', 'x-high', 'x-large', 'x-loud', 'x-low', 'x-small', 'x-soft', 'xx-large', 'xx-small',
			'yellow', 'yes'
		]
		,'specials' : [
			'important'
		]
	}
	,'OPERATORS' :[
		':', ';', '!', '.', '#'
	]
	,'DELIMITERS' :[
		'{', '}'
	]
	,'STYLES' : {
		'COMMENTS': 'color: #AAAAAA;'
		,'QUOTESMARKS': 'color: #6381F8;'
		,'KEYWORDS' : {
			'attributes' : 'color: #48BDDF;'
			,'values' : 'color: #2B60FF;'
			,'specials' : 'color: #FF0000;'
			}
		,'OPERATORS' : 'color: #FF00FF;'
		,'DELIMITERS' : 'color: #60CA00;'
				
	}
};
                                                                                                                                                    ./mvappsvr/docroot/db/edit_area/reg_syntax/vb.js                                                    0000777 0000000 0000000 00000004224 12534142432 020703  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.load_syntax["vb"] = {
	'COMMENT_SINGLE' : {1 : "'"}
	,'COMMENT_MULTI' : { }
	,'QUOTEMARKS' : {1: '"'}
	,'KEYWORD_CASE_SENSITIVE' : false
	,'KEYWORDS' : {
		'statements' : [
	        'if','then','for','each','while','do','loop',
            'else','elseif','select','case','end select',
            'until','next','step','to','in','end if'
		]
		,'keywords' : [
            'empty','isempty','nothing','null','isnull','true','false',
            'set','call',
            'sub','end sub','function','end function','exit','exit function',
            'dim','Mod','In','private','public','shared','const'
        ]

		,'functions' : [
			'CDate','Date','DateAdd','DateDiff','DatePart','DateSerial','DateValue','Day','FormatDateTime',
            'Hour','IsDate','Minute','Month',
            'MonthName','Now','Second','Time','Timer','TimeSerial','TimeValue','Weekday','WeekdayName ','Year',
            'Asc','CBool','CByte','CCur','CDate','CDbl','Chr','CInt','CLng','CSng','CStr','Hex','Oct','FormatCurrency',
            'FormatDateTime','FormatNumber','FormatPercent','Abs','Atn','Cos','Exp','Hex','Int','Fix','Log','Oct',
            'Rnd','Sgn','Sin','Sqr','Tan',
            'Array','Filter','IsArray','Join','LBound','Split','UBound',
            'InStr','InStrRev','LCase','Left','Len','LTrim','RTrim','Trim','Mid','Replace','Right','Space','StrComp',
            'String','StrReverse','UCase',
            'CreateObject','Eval','GetLocale','GetObject','GetRef','InputBox','IsEmpty','IsNull','IsNumeric',
            'IsObject','LoadPicture','MsgBox','RGB','Round','ScriptEngine','ScriptEngineBuildVersion','ScriptEngineMajorVersion',
            'ScriptEngineMinorVersion','SetLocale','TypeName','VarType'
		]
	}
	,'OPERATORS' :[
		'+', '-', '/', '*', '=', '<', '>', '!', '&'
	]
	,'DELIMITERS' :[
		'(', ')', '[', ']', '{', '}'
	]
	,'STYLES' : {
		'COMMENTS': 'color: #99CC00;'
		,'QUOTESMARKS': 'color: #333399;'
		,'KEYWORDS' : {
			'keywords' : 'color: #3366FF;'
			,'functions' : 'color: #0000FF;'
			,'statements' : 'color: #3366FF;'
			}
		,'OPERATORS' : 'color: #FF0000;'
		,'DELIMITERS' : 'color: #0000FF;'

	}
};
                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/edit_area/reg_syntax/xml.js                                                   0000777 0000000 0000000 00000002360 12534142432 021073  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
* last update: 2006-08-24
*/

editAreaLoader.load_syntax["xml"] = {
	'COMMENT_SINGLE' : {}
	,'COMMENT_MULTI' : {'<!--' : '-->'}
	,'QUOTEMARKS' : {1: "'", 2: '"'}
	,'KEYWORD_CASE_SENSITIVE' : false
	,'KEYWORDS' : {
	}
	,'OPERATORS' :[
	]
	,'DELIMITERS' :[
	]
	,'REGEXPS' : {
		'xml' : {
			'search' : '()(<\\?[^>]*?\\?>)()'
			,'class' : 'xml'
			,'modifiers' : 'g'
			,'execute' : 'before' // before or after
		}
		,'cdatas' : {
			'search' : '()(<!\\[CDATA\\[.*?\\]\\]>)()'
			,'class' : 'cdata'
			,'modifiers' : 'g'
			,'execute' : 'before' // before or after
		}
		,'tags' : {
			'search' : '(<)(/?[a-z][^ \r\n\t>]*)([^>]*>)'
			,'class' : 'tags'
			,'modifiers' : 'gi'
			,'execute' : 'before' // before or after
		}
		,'attributes' : {
			'search' : '( |\n|\r|\t)([^ \r\n\t=]+)(=)'
			,'class' : 'attributes'
			,'modifiers' : 'g'
			,'execute' : 'before' // before or after
		}
	}
	,'STYLES' : {
		'COMMENTS': 'color: #AAAAAA;'
		,'QUOTESMARKS': 'color: #6381F8;'
		,'KEYWORDS' : {
			}
		,'OPERATORS' : 'color: #E775F0;'
		,'DELIMITERS' : ''
		,'REGEXPS' : {
			'attributes': 'color: #B1AC41;'
			,'tags': 'color: #E62253;'
			,'xml': 'color: #8DCFB5;'
			,'cdata': 'color: #50B020;'
		}	
	}		
};
                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/edit_area/reg_syntax/brainfuck.js                                             0000777 0000000 0000000 00000001613 12534142432 022237  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.load_syntax["brainfuck"] = {
	'COMMENT_SINGLE' : {}
	,'COMMENT_MULTI' : {}
	,'QUOTEMARKS' : {}
	,'KEYWORD_CASE_SENSITIVE' : true
	,'OPERATORS' :[
		'+', '-'
	]
	,'DELIMITERS' :[
		'[', ']'
	]
	,'REGEXPS' : {
		'bfispis' : {
			'search' : '()(\\.)()'
			,'class' : 'bfispis'
			,'modifiers' : 'g'
			,'execute' : 'before'
		}
		,'bfupis' : {
			'search' : '()(\\,)()'
			,'class' : 'bfupis'
			,'modifiers' : 'g'
			,'execute' : 'before'
		}
		,'bfmemory' : {
			'search' : '()([<>])()'
			,'class' : 'bfmemory'
			,'modifiers' : 'g'
			,'execute' : 'before'
		}
	}
	,'STYLES' : {
		'COMMENTS': 'color: #AAAAAA;'
		,'QUOTESMARKS': 'color: #6381F8;'
		,'OPERATORS' : 'color: #88AA00;'
		,'DELIMITERS' : 'color: #00C138;'
		,'REGEXPS' : {
			'bfispis' : 'color: #EE0000;'
			,'bfupis' : 'color: #4455ee;'
			,'bfmemory' : 'color: #DD00DD;'
		}
	}
};

                                                                                                                     ./mvappsvr/docroot/db/edit_area/reg_syntax/python.js                                                0000777 0000000 0000000 00000017331 12534142432 021620  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /**
 * Python syntax v 1.1 
 * 
 * v1.1 by Andre Roberge (2006/12/27)
 *   
**/
editAreaLoader.load_syntax["python"] = {
	'COMMENT_SINGLE' : {1 : '#'}
	,'COMMENT_MULTI' : {}
	,'QUOTEMARKS' : {1: "'", 2: '"'}
	,'KEYWORD_CASE_SENSITIVE' : true
	,'KEYWORDS' : {
		/*
		** Set 1: reserved words
		** http://python.org/doc/current/ref/keywords.html
		** Note: 'as' and 'with' have been added starting with Python 2.5
		*/
		'reserved' : [
			'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif',
			'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 
			'import', 'is', 'in', 'lambda', 'not', 'or', 'pass', 'print', 'raise',
			'return', 'try', 'while', 'with', 'yield'
			//the following are *almost* reserved; we'll treat them as such
			, 'False', 'True', 'None'
		]
		/*
		** Set 2: builtins
		** http://python.org/doc/current/lib/built-in-funcs.html
		*/	
		,'builtins' : [
			'__import__', 'abs', 'basestring', 'bool', 'callable', 'chr', 'classmethod', 'cmp', 
			'compile', 'complex', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile', 
			'file', 'filter', 'float', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help',
			'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'list', 'locals',
			'long', 'map', 'max', 'min', 'object', 'oct', 'open', 'ord', 'pow', 'property', 'range',
			'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice',
			'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', 
			'vars', 'xrange', 'zip',
			// Built-in constants: http://www.python.org/doc/2.4.1/lib/node35.html
			//'False', 'True', 'None' have been included in 'reserved'
			'NotImplemented', 'Ellipsis',
			// Built-in Exceptions: http://python.org/doc/current/lib/module-exceptions.html
			'Exception', 'StandardError', 'ArithmeticError', 'LookupError', 'EnvironmentError',
			'AssertionError', 'AttributeError', 'EOFError', 'FloatingPointError', 'IOError',
			'ImportError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'MemoryError', 'NameError',
			'NotImplementedError', 'OSError', 'OverflowError', 'ReferenceError', 'RuntimeError',
			'StopIteration', 'SyntaxError', 'SystemError', 'SystemExit', 'TypeError',
			'UnboundlocalError', 'UnicodeError', 'UnicodeEncodeError', 'UnicodeDecodeError',
			'UnicodeTranslateError', 'ValueError', 'WindowsError', 'ZeroDivisionError', 'Warning',
			'UserWarning', 'DeprecationWarning', 'PendingDeprecationWarning', 'SyntaxWarning',
			'RuntimeWarning', 'FutureWarning',		
			// we will include the string methods as well
			// http://python.org/doc/current/lib/string-methods.html
			'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs',
			'find', 'index', 'isalnum', 'isaplpha', 'isdigit', 'islower', 'isspace', 'istitle',
			'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust',
			'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title',
			'translate', 'upper', 'zfill'
		]
		/*
		** Set 3: standard library
		** http://python.org/doc/current/lib/modindex.html
		*/
		,'stdlib' : [
			'__builtin__', '__future__', '__main__', '_winreg', 'aifc', 'AL', 'al', 'anydbm',
			'array', 'asynchat', 'asyncore', 'atexit', 'audioop', 'base64', 'BaseHTTPServer',
			'Bastion', 'binascii', 'binhex', 'bisect', 'bsddb', 'bz2', 'calendar', 'cd', 'cgi',
			'CGIHTTPServer', 'cgitb', 'chunk', 'cmath', 'cmd', 'code', 'codecs', 'codeop',
			'collections', 'colorsys', 'commands', 'compileall', 'compiler', 'compiler',
			'ConfigParser', 'Cookie', 'cookielib', 'copy', 'copy_reg', 'cPickle', 'crypt',
			'cStringIO', 'csv', 'curses', 'datetime', 'dbhash', 'dbm', 'decimal', 'DEVICE',
			'difflib', 'dircache', 'dis', 'distutils', 'dl', 'doctest', 'DocXMLRPCServer', 'dumbdbm',
			'dummy_thread', 'dummy_threading', 'email', 'encodings', 'errno', 'exceptions', 'fcntl',
			'filecmp', 'fileinput', 'FL', 'fl', 'flp', 'fm', 'fnmatch', 'formatter', 'fpectl',
			'fpformat', 'ftplib', 'gc', 'gdbm', 'getopt', 'getpass', 'gettext', 'GL', 'gl', 'glob',
			'gopherlib', 'grp', 'gzip', 'heapq', 'hmac', 'hotshot', 'htmlentitydefs', 'htmllib',
			'HTMLParser', 'httplib', 'imageop', 'imaplib', 'imgfile', 'imghdr', 'imp', 'inspect',
			'itertools', 'jpeg', 'keyword', 'linecache', 'locale', 'logging', 'mailbox', 'mailcap',
			'marshal', 'math', 'md5', 'mhlib', 'mimetools', 'mimetypes', 'MimeWriter', 'mimify',
			'mmap', 'msvcrt', 'multifile', 'mutex', 'netrc', 'new', 'nis', 'nntplib', 'operator',
			'optparse', 'os', 'ossaudiodev', 'parser', 'pdb', 'pickle', 'pickletools', 'pipes',
			'pkgutil', 'platform', 'popen2', 'poplib', 'posix', 'posixfile', 'pprint', 'profile',
			'pstats', 'pty', 'pwd', 'py_compile', 'pyclbr', 'pydoc', 'Queue', 'quopri', 'random',
			're', 'readline', 'repr', 'resource', 'rexec', 'rfc822', 'rgbimg', 'rlcompleter',
			'robotparser', 'sched', 'ScrolledText', 'select', 'sets', 'sgmllib', 'sha', 'shelve',
			'shlex', 'shutil', 'signal', 'SimpleHTTPServer', 'SimpleXMLRPCServer', 'site', 'smtpd',
			'smtplib', 'sndhdr', 'socket', 'SocketServer', 'stat', 'statcache', 'statvfs', 'string',
			'StringIO', 'stringprep', 'struct', 'subprocess', 'sunau', 'SUNAUDIODEV', 'sunaudiodev',
			'symbol', 'sys', 'syslog', 'tabnanny', 'tarfile', 'telnetlib', 'tempfile', 'termios',
			'test', 'textwrap', 'thread', 'threading', 'time', 'timeit', 'Tix', 'Tkinter', 'token',
			'tokenize', 'traceback', 'tty', 'turtle', 'types', 'unicodedata', 'unittest', 'urllib2',
			'urllib', 'urlparse', 'user', 'UserDict', 'UserList', 'UserString', 'uu', 'warnings',
			'wave', 'weakref', 'webbrowser', 'whichdb', 'whrandom', 'winsound', 'xdrlib', 'xml',
			'xmllib', 'xmlrpclib', 'zipfile', 'zipimport', 'zlib'

		]
		/*
		** Set 4: special methods
		** http://python.org/doc/current/ref/specialnames.html
		*/
		,'special' : [
			// Basic customization: http://python.org/doc/current/ref/customization.html
			'__new__', '__init__', '__del__', '__repr__', '__str__', 
			'__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__cmp__', '__rcmp__',
			'__hash__', '__nonzero__', '__unicode__', '__dict__',
			// Attribute access: http://python.org/doc/current/ref/attribute-access.html
			'__setattr__', '__delattr__', '__getattr__', '__getattribute__', '__get__', '__set__',
			'__delete__', '__slots__',
			// Class creation, callable objects
			'__metaclass__', '__call__', 
			// Container types: http://python.org/doc/current/ref/sequence-types.html
			'__len__', '__getitem__', '__setitem__', '__delitem__', '__iter__', '__contains__',
			'__getslice__', '__setslice__', '__delslice__',
			// Numeric types: http://python.org/doc/current/ref/numeric-types.html
			'__abs__','__add__','__and__','__coerce__','__div__','__divmod__','__float__',
			'__hex__','__iadd__','__isub__','__imod__','__idiv__','__ipow__','__iand__',
			'__ior__','__ixor__', '__ilshift__','__irshift__','__invert__','__int__',
			'__long__','__lshift__',
			'__mod__','__mul__','__neg__','__oct__','__or__','__pos__','__pow__',
			'__radd__','__rdiv__','__rdivmod__','__rmod__','__rpow__','__rlshift__','__rrshift__',
			'__rshift__','__rsub__','__rmul__','__repr__','__rand__','__rxor__','__ror__',
			'__sub__','__xor__'
		]
	}
	,'OPERATORS' :[
		'+', '-', '/', '*', '=', '<', '>', '%', '!', '&', ';', '?', '`', ':', ','
	]
	,'DELIMITERS' :[
		'(', ')', '[', ']', '{', '}'
	]
	,'STYLES' : {
		'COMMENTS': 'color: #AAAAAA;'
		,'QUOTESMARKS': 'color: #660066;'
		,'KEYWORDS' : {
			'reserved' : 'color: #0000FF;'
			,'builtins' : 'color: #009900;'
			,'stdlib' : 'color: #009900;'
			,'special': 'color: #006666;'
			}
		,'OPERATORS' : 'color: #993300;'
		,'DELIMITERS' : 'color: #993300;'
				
	}
};
                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/edit_area/reg_syntax/cpp.js                                                   0000777 0000000 0000000 00000003475 12534142432 021065  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.load_syntax["cpp"] = {
	'COMMENT_SINGLE' : {1 : '//'}
	,'COMMENT_MULTI' : {'/*' : '*/'}
	,'QUOTEMARKS' : {1: "'", 2: '"'}
	,'KEYWORD_CASE_SENSITIVE' : true
	,'KEYWORDS' : {
		'constants' : [
			'NULL', 'false', 'std', 'stdin', 'stdout', 'stderr',
			'true'
		]
		,'types' : [
			'FILE', 'auto', 'char', 'class', 'const', 'double',
			'extern', 'float', 'friend', 'inline', 'int',
			'iterator', 'long', 'map', 'operator', 'queue',
			'register', 'short', 'signed', 'size_t', 'stack',
			'static', 'string', 'struct', 'time_t', 'typedef',
			'union', 'unsigned', 'vector', 'void', 'volatile'
		]
		,'statements' : [
			'catch', 'do', 'else', 'enum', 'for', 'goto', 'if',
			'sizeof', 'switch', 'this', 'throw', 'try', 'while'
		]
 		,'keywords' : [
			'break', 'case', 'continue', 'default', 'delete',
			'namespace', 'new', 'private', 'protected', 'public',
			'return', 'using'
		]
	}
	,'OPERATORS' :[
		'+', '-', '/', '*', '=', '<', '>', '%', '!', '?', ':', '&'
	]
	,'DELIMITERS' :[
		'(', ')', '[', ']', '{', '}'
	]
	,'REGEXPS' : {
		'precompiler' : {
			'search' : '()(#[^\r\n]*)()'
			,'class' : 'precompiler'
			,'modifiers' : 'g'
			,'execute' : 'before'
		}
/*		,'precompilerstring' : {
			'search' : '(#[\t ]*include[\t ]*)([^\r\n]*)([^\r\n]*[\r\n])'
			,'class' : 'precompilerstring'
			,'modifiers' : 'g'
			,'execute' : 'before'
		}*/
	}
	,'STYLES' : {
		'COMMENTS': 'color: #AAAAAA;'
		,'QUOTESMARKS': 'color: #6381F8;'
		,'KEYWORDS' : {
			'constants' : 'color: #EE0000;'
			,'types' : 'color: #0000EE;'
			,'statements' : 'color: #60CA00;'
			,'keywords' : 'color: #48BDDF;'
		}
		,'OPERATORS' : 'color: #FF00FF;'
		,'DELIMITERS' : 'color: #0038E1;'
		,'REGEXPS' : {
			'precompiler' : 'color: #009900;'
			,'precompilerstring' : 'color: #994400;'
		}
	}
};
                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/reg_syntax/js.js                                                    0000777 0000000 0000000 00000010420 12534142432 020703  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.load_syntax["js"] = {
	'COMMENT_SINGLE' : {1 : '//'}
	,'COMMENT_MULTI' : {'/*' : '*/'}
	,'QUOTEMARKS' : {1: "'", 2: '"'}
	,'KEYWORD_CASE_SENSITIVE' : false
	,'KEYWORDS' : {
		'statements' : [
			'as', 'break', 'case', 'catch', 'continue', 'decodeURI', 'delete', 'do',
			'else', 'encodeURI', 'eval', 'finally', 'for', 'if', 'in', 'is', 'item',
			'instanceof', 'return', 'switch', 'this', 'throw', 'try', 'typeof', 'void',
			'while', 'write', 'with'
		]
 		,'keywords' : [
			'class', 'const', 'default', 'debugger', 'export', 'extends', 'false',
			'function', 'import', 'namespace', 'new', 'null', 'package', 'private',
			'protected', 'public', 'super', 'true', 'use', 'var', 'window', 'document',		
			// the list below must be sorted and checked (if it is a keywords or a function and if it is not present twice
			'Link ', 'outerHeight ', 'Anchor', 'FileUpload', 
			'location', 'outerWidth', 'Select', 'Area', 'find', 'Location', 'Packages', 'self', 
			'arguments', 'locationbar', 'pageXoffset', 'Form', 
			'Math', 'pageYoffset', 'setTimeout', 'assign', 'Frame', 'menubar', 'parent', 'status', 
			'blur', 'frames', 'MimeType', 'parseFloat', 'statusbar', 'Boolean', 'Function', 'moveBy', 
			'parseInt', 'stop', 'Button', 'getClass', 'moveTo', 'Password', 'String', 'callee', 'Hidden', 
			'name', 'personalbar', 'Submit', 'caller', 'history', 'NaN', 'Plugin', 'sun', 'captureEvents', 
			'History', 'navigate', 'print', 'taint', 'Checkbox', 'home', 'navigator', 'prompt', 'Text', 
			'Image', 'Navigator', 'prototype', 'Textarea', 'clearTimeout', 'Infinity', 
			'netscape', 'Radio', 'toolbar', 'close', 'innerHeight', 'Number', 'ref', 'top', 'closed', 
			'innerWidth', 'Object', 'RegExp', 'toString', 'confirm', 'isFinite', 'onBlur', 'releaseEvents', 
			'unescape', 'constructor', 'isNan', 'onError', 'Reset', 'untaint', 'Date', 'java', 'onFocus', 
			'resizeBy', 'unwatch', 'defaultStatus', 'JavaArray', 'onLoad', 'resizeTo', 'valueOf', 'document', 
			'JavaClass', 'onUnload', 'routeEvent', 'watch', 'Document', 'JavaObject', 'open', 'scroll', 'window', 
			'Element', 'JavaPackage', 'opener', 'scrollbars', 'Window', 'escape', 'length', 'Option', 'scrollBy'			
		]
    	,'functions' : [
			// common functions for Window object
			'alert', 'Array', 'back', 'blur', 'clearInterval', 'close', 'confirm', 'eval ', 'focus', 'forward', 'home',
			'name', 'navigate', 'onblur', 'onerror', 'onfocus', 'onload', 'onmove',
			'onresize', 'onunload', 'open', 'print', 'prompt', 'scroll', 'scrollTo', 'setInterval', 'status',
			'stop' 
		]
	}
	,'OPERATORS' :[
		'+', '-', '/', '*', '=', '<', '>', '%', '!'
	]
	,'DELIMITERS' :[
		'(', ')', '[', ']', '{', '}'
	]
	,'STYLES' : {
		'COMMENTS': 'color: #AAAAAA;'
		,'QUOTESMARKS': 'color: #6381F8;'
		,'KEYWORDS' : {
			'statements' : 'color: #60CA00;'
			,'keywords' : 'color: #48BDDF;'
			,'functions' : 'color: #2B60FF;'
		}
		,'OPERATORS' : 'color: #FF00FF;'
		,'DELIMITERS' : 'color: #0038E1;'
				
	}
	,'AUTO_COMPLETION' :  {
		"default": {	// the name of this definition group. It's posisble to have different rules inside the same definition file
			"REGEXP": { "before_word": "[^a-zA-Z0-9_]|^"	// \\s|\\.|
						,"possible_words_letters": "[a-zA-Z0-9_]+"
						,"letter_after_word_must_match": "[^a-zA-Z0-9_]|$"
						,"prefix_separator": "\\."
					}
			,"CASE_SENSITIVE": true
			,"MAX_TEXT_LENGTH": 100		// the maximum length of the text being analyzed before the cursor position
			,"KEYWORDS": {
				'': [	// the prefix of thoses items
						/**
						 * 0 : the keyword the user is typing
						 * 1 : (optionnal) the string inserted in code ("{@}" being the new position of the cursor, "§" beeing the equivalent to the value the typed string indicated if the previous )
						 * 		If empty the keyword will be displayed
						 * 2 : (optionnal) the text that appear in the suggestion box (if empty, the string to insert will be displayed)
						 */
						 ['Array', '§()', '']
			    		,['alert', '§({@})', 'alert(String message)']
			    		,['document']
			    		,['window']
			    	]
		    	,'window' : [
			    		 ['location']
			    		,['document']
			    		,['scrollTo', 'scrollTo({@})', 'scrollTo(Int x,Int y)']
					]
		    	,'location' : [
			    		 ['href']
					]
			}
		}
	}
};
                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/edit_area/reg_syntax/robotstxt.js                                             0000777 0000000 0000000 00000001172 12534142432 022343  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.load_syntax["robotstxt"] = {
	'COMMENT_SINGLE' : {1 : '#'},
	'COMMENT_MULTI' : {},
	'QUOTEMARKS' : [],
	'KEYWORD_CASE_SENSITIVE' : false,
	'KEYWORDS' : {
		'attributes' : ['User-agent', 'Disallow', 'Allow', 'Crawl-delay'],
		'values' : ['*'],
		'specials' : ['*']
	},
	'OPERATORS' :[':'],
	'DELIMITERS' :[],
	'STYLES' : {
		'COMMENTS': 'color: #AAAAAA;',
		'QUOTESMARKS': 'color: #6381F8;',
		'KEYWORDS' : {
			'attributes' : 'color: #48BDDF;',
			'values' : 'color: #2B60FF;',
			'specials' : 'color: #FF0000;'
			},
	'OPERATORS' : 'color: #FF00FF;',
	'DELIMITERS' : 'color: #60CA00;'			
	}
};
                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/edit_area/langs_sk.js                                                         0000777 0000000 0000000 00000004243 12534142432 017713  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["sk"]={
new_document: "nový prázdy dokument",
search_button: "vyhľadaj a nahraď",
search_command: "hľadaj ďalsšie / otvor vyhľadávacie pole",
search: "hľadaj",
replace: "nahraď",
replace_command: "nahraď / otvor vyhľadávacie pole",
find_next: "nájdi ďalšie",
replace_all: "nahraď všetko",
reg_exp: "platné výrazy",
match_case: "zhodujúce sa výrazy",
not_found: "nenájdené.",
occurrence_replaced: "výskyty nahradené.",
search_field_empty: "Pole vyhľadávanie je prádzne",
restart_search_at_begin: "End of area reached. Restart at begin.",
move_popup: "presuň vyhľadávacie okno",
font_size: "--Veľkosť textu--",
go_to_line: "prejdi na riadok",
go_to_line_prompt: "prejdi na riadok:",
undo: "krok späť",
redo: "prepracovať",
change_smooth_selection: "povoliť/zamietnúť niektoré zo zobrazených funkcií (účelnejšie zobrazenie vyžaduje  väčšie zaťaženie procesora CPU)",
highlight: "prepnúť zvýrazňovanie syntaxe zap/vyp",
reset_highlight: "zrušiť zvýrazňovanie (ak je nesynchronizované s textom)",
word_wrap: "toggle word wrapping mode",
help: "o programe",
save: "uložiť",
load: "načítať",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Pozícia",
total: "Spolu",
close_popup: "zavrieť okno",
shortcuts: "Skratky",
add_tab: "pridať tabulovanie textu",
remove_tab: "odstrániť tabulovanie textu",
about_notice: "Upozornenie: funkcia zvýrazňovania syntaxe je dostupná iba pre malý text",
toggle: "Prepnúť editor",
accesskey: "Accesskey",
tab: "Záložka",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Spracúvam...",
fullscreen: "cel=a obrazovka",
syntax_selection: "--Vyber Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/edit_area/license_bsd.txt                                                     0000777 0000000 0000000 00000002723 12534142432 020570  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   Copyright (c) 2008, Christophe Dolivet
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
    * Neither the name of EditArea nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                                             ./mvappsvr/docroot/db/edit_area/edit_area.css                                                       0000777 0000000 0000000 00000021737 12534142432 020212  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   body, html{
	margin: 0; 
	padding: 0;
	height: 100%;
	border: none;
	overflow: hidden;
	background-color: #FFF;
}

body, html, table, form, textarea{
	font: 12px monospace, sans-serif;
}

#editor{
	border: solid #888 1px;
	overflow: hidden;
}

#result{
	z-index: 4; 
	overflow-x: auto;
	overflow-y: scroll;
	border-top: solid #888 1px;
	border-bottom: solid #888 1px;
	position: relative;
	clear: both;
}

#result.empty{
	overflow: hidden;
}

#container{
	overflow: hidden;
	border: solid blue 0;
	position: relative; 
	z-index: 10;
	padding: 0 5px 0 45px;
	/*padding-right: 5px;*/ 
}

#textarea{
	position: relative; 
	top: 0; 
	left: 0;
	margin: 0;
	padding: 0;
	width: 100%;
	height: 100%; 
	overflow: hidden;  
	z-index: 7; 
	border-width: 0;
	background-color: transparent;
	resize: none;
}

#textarea, #textarea:hover{
	outline: none;	/* safari outline fix */
}

#content_highlight{
	white-space: pre;
	margin: 0;
	padding: 0;
	position : absolute; 
	z-index: 4; 
	overflow: visible;
}


#selection_field, #selection_field_text{
	margin: 0; 
	background-color: #E1F2F9; 
/*	height: 1px; */  
	position: absolute;
	z-index: 5;
	top: -100px;
	padding: 0;
	white-space: pre;
	overflow: hidden;
}

#selection_field.show_colors {
	z-index: 3;
	background-color:#EDF9FC;
	
}

#selection_field strong{
	font-weight:normal;
}

#selection_field.show_colors *, #selection_field_text * {
	visibility: hidden;
}

#selection_field_text{
	background-color:transparent;
}

#selection_field_text strong{
	font-weight:normal;
	background-color:#3399FE;
	color: #FFF;
	visibility:visible;
}

#container.word_wrap #content_highlight,
#container.word_wrap #selection_field,
#container.word_wrap #selection_field_text,
#container.word_wrap #test_font_size{
	white-space: pre-wrap;       /* css-3 */
	white-space: -moz-pre-wrap !important;  /* Mozilla, since 1999 */
	white-space: -pre-wrap;      /* Opera 4-6 */
	white-space: -o-pre-wrap;    /* Opera 7 */
	word-wrap: break-word;       /* Internet Explorer 5.5+ */
	width: 99%;
}

#line_number{
	position: absolute;
	overflow: hidden;
	border-right: solid black 1px;
	z-index:8;
	width: 38px;
	padding: 0 5px 0 0;
	margin: 0 0 0 -45px;
	text-align: right;
	color: #AAAAAA;
}

#test_font_size{
	padding: 0; 
	margin: 0; 
	visibility: hidden;
	position: absolute;
	white-space: pre;
}

pre{
	margin: 0;
	padding: 0;
}

.hidden{
	opacity: 0.2; 
	filter:alpha(opacity=20);
}

#result .edit_area_cursor{
	position: absolute; 
	z-index:6; 
	background-color: #FF6633;
	top: -100px;
	margin: 0;
        color: #000000;
	width: 8px;
}

#result .edit_area_selection_field .overline{
	background-color: #996600;
}


/* area popup */
.editarea_popup{
	border: solid 1px #888888;
	background-color: #ECE9D8; 
	width: 250px; 
	padding: 4px; 
	position: absolute;
	visibility: hidden; 
	z-index: 15;
	top: -500px;
}

.editarea_popup, .editarea_popup table{
	font-family: sans-serif;
	font-size: 10pt;
}

.editarea_popup img{
	border: 0;
}

.editarea_popup .close_popup{
	float: right; 
	line-height: 16px; 
	border: 0; 
	padding: 0;
}

.editarea_popup h1,.editarea_popup h2,.editarea_popup h3,.editarea_popup h4,.editarea_popup h5,.editarea_popup h6{
	margin: 0;
	padding: 0;
}

.editarea_popup .copyright{
	text-align: right;
}	

/* Area_search */
div#area_search_replace{
	/*width: 250px;*/
}

div#area_search_replace img{
	border: 0;
}

div#area_search_replace div.button{
	text-align: center;
	line-height: 1.7em;
}

div#area_search_replace .button a{
	cursor: pointer;
	border: solid 1px #888888;
	background-color: #DEDEDE;
	text-decoration: none;
	padding: 0 2px;
	color: #000000;	
	white-space: nowrap;
}

div#area_search_replace a:hover{	
	/*border: solid 1px #888888;*/
	background-color: #EDEDED;
}

div#area_search_replace  #move_area_search_replace{
	cursor: move; 
	border: solid 1px #888;
}

div#area_search_replace  #close_area_search_replace{
	text-align: right; 
	vertical-align: top; 
	white-space: nowrap;
}

div#area_search_replace  #area_search_msg{
	height: 18px; 
	overflow: hidden; 
	border-top: solid 1px #888; 
	margin-top: 3px;
}

/* area help */
#edit_area_help{
	width: 350px;
}

#edit_area_help div.close_popup{
	float: right;
}

/* area_toolbar */
.area_toolbar{
	/*font: 11px sans-serif;*/
	width: 100%; 
	/*height: 21px; */
	margin: 0; 
	padding: 0;
	background-color: #ECE9D8;
	text-align: center;
}

.area_toolbar, .area_toolbar table{
	font: 11px sans-serif;
}

.area_toolbar img{
	border: 0;
	vertical-align: middle;
}

.area_toolbar input{
	margin: 0;
	padding: 0;
}

.area_toolbar select{
    font-family: 'MS Sans Serif',sans-serif,Verdana,Arial;
    font-size: 7pt;
    font-weight: normal;
    margin: 2px 0 0 0 ;
    padding: 0;
    vertical-align: top;
    background-color: #F0F0EE;
}

table.statusbar{
	width: 100%;
}

.area_toolbar td.infos{
	text-align: center;
	width: 130px;
	border-right: solid 1px #888;
	border-width: 0 1px 0 0;
	padding: 0;
}

.area_toolbar td.total{
	text-align: right;
	width: 50px;
	padding: 0;
}

.area_toolbar td.resize{
	text-align: right;
}

.area_toolbar span{
	line-height: 1px;
	padding: 0px 10px;
	margin: 0;
}

.area_toolbar span#resize_area{
	cursor: nw-resize;
	visibility: hidden;
}

/* toolbar buttons */
.editAreaButtonNormal, .editAreaButtonOver, .editAreaButtonDown, .editAreaSeparator, .editAreaSeparatorLine, .editAreaButtonDisabled, .editAreaButtonSelected {
	border: 0; margin: 0; padding: 0; background: transparent;
	margin-top: 0;
	margin-left: 1px;
	padding: 0;
}

.editAreaButtonNormal {
	border: 1px solid #ECE9D8 !important;
	cursor: pointer;
}

.editAreaButtonOver {
	border: 1px solid #0A246A !important;
	cursor: pointer;
	background-color: #B6BDD2;
}

.editAreaButtonDown {
	cursor: pointer;
	border: 1px solid #0A246A !important;
	background-color: #8592B5;
}

.editAreaButtonSelected {
	border: 1px solid #C0C0BB !important;
	cursor: pointer;
	background-color: #F4F2E8;
}

.editAreaButtonDisabled {
	filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);
	-moz-opacity:0.3;
	opacity: 0.3;
	border: 1px solid #F0F0EE !important;
	cursor: pointer;
}

.editAreaSeparatorLine {
	margin: 1px 2px;
	background-color: #C0C0BB;
	width: 2px;
	height: 18px;
}

/* waiting screen */
#processing{
	display: none; 
	background-color:#ECE9D8; 
	border: solid #888 1px;
	position: absolute; 
	top: 0; 
	left: 0;
	width: 100%; 
	height: 100%; 
	z-index: 100; 
	text-align: center;
}

#processing_text{
	position:absolute;
	left: 50%;
	top: 50%;
	width: 200px;
	height: 20px; 
	margin-left: -100px;
	margin-top: -10px;
	text-align: center;
}
/* end */


/**** tab browsing area ****/
#tab_browsing_area{
	display: none;
	background-color: #CCC9A8;
	border-top: 1px solid #888;
	text-align: left;
	margin: 0;
}

#tab_browsing_list {
	padding: 0; 
	margin: 0; 
	list-style-type: none;
	white-space: nowrap;
}
#tab_browsing_list li {
	float: left;
	margin: -1px;
}
#tab_browsing_list a {
	position: relative;
	display: block; 
	text-decoration: none; 
	float: left; 
	cursor: pointer;
	line-height:14px;
}

#tab_browsing_list a span {
	display: block; 
	color: #000; 
	background: #ECE9D8; 
	border:	1px solid #888; 
	border-width: 1px 1px 0; 
	text-align: center; 
	padding: 2px 2px 1px 4px; 
	position: relative;	/*IE 6 hack */
}

#tab_browsing_list a b {
	display: block; 
	border-bottom: 2px solid #617994;
}

#tab_browsing_list a .edited {
	display: none;
}

#tab_browsing_list a.edited .edited {
	display: inline;
}

#tab_browsing_list a img{
	margin-left: 7px;
}

#tab_browsing_list a.edited img{
	margin-left: 3px;
}

#tab_browsing_list a:hover span {
	background: #F4F2E8;
	border-color: #0A246A;
}

#tab_browsing_list .selected a span{
	background: #046380;
	color: #FFF;
}


#no_file_selected{
	height: 100%;
	width: 150%; /* Opera need more than 100% */
	background: #CCC;
	display: none;
	z-index: 20;
	position: absolute;
}


/*** Non-editable mode ***/
.non_editable #editor
{
	border-width: 0 1px;
}

.non_editable .area_toolbar
{
	display: none;
}

/*** Auto completion ***/
#auto_completion_area
{
	background:	#FFF;
	border:		solid 1px #888;
	position:	absolute;
	z-index:	15;
	width:	280px;
	height:	180px;
	overflow: auto;
	display:none;
}

#auto_completion_area a, #auto_completion_area a:visited
{
	display:	block;
	padding:	0 2px 1px;
	color:		#000;
	text-decoration:none;
}

#auto_completion_area a:hover, #auto_completion_area a:focus, #auto_completion_area a.focus
{
	background:	#D6E1FE;
	text-decoration:none;
}

#auto_completion_area ul
{
	margin:	0;
	padding: 0;
	list-style: none inside;
}
#auto_completion_area li
{
	padding:	0;
}
#auto_completion_area .prefix
{
	font-style: italic;
	padding: 0 3px;
}
                                 ./mvappsvr/docroot/db/edit_area/images_smooth_selection.gif                                         0000777 0000000 0000000 00000000256 12534142432 023146  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a  
 ##^7OiϗZV>bbrrv   !   ,       [I8f F2c(	BS 0P8"1X&JTPu08GJR34Pˉz SQ7kA g1 ;                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/edit_area/images_go_to_line.gif                                               0000777 0000000 0000000 00000002035 12534142432 021703  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    z z 	~ 	     $%(..88<@FHK)L!Q)M,P!X#Y-d.d.e3j<m*o4p5o<t1v.w8u3}:|DG>78;?<=R@NK_fhGK][][OP^habcW[iZY\Whnc\p]s]svsyfzg}z~iivvvx!
  ,        	H `@ \L BHi%K$a0#OEjg7 ÉQAL!Z33T*䇍LHѢ担p,sʔ*`$	(QBUj2qWX"l@#F!E Q+)L<("0\A*΋<F KT#&hӅCHfEBv1SN;6((` Ax8pCkߞ0  ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/reg_syntax.js                                                       0000777 0000000 0000000 00000014742 12534142432 020302  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   	EditAreaLoader.prototype.get_regexp= function(text_array){
		//res="( |=|\\n|\\r|\\[|\\(|µ|)(";
		res="(\\b)(";
		for(i=0; i<text_array.length; i++){
			if(i>0)
				res+="|";
			//res+="("+ tab_text[i] +")";
			//res+=tab_text[i].replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\{|\})/g, "\\$1");
			res+=this.get_escaped_regexp(text_array[i]);
		}
		//res+=")( |\\.|:|\\{|\\(|\\)|\\[|\\]|\'|\"|\\r|\\n|\\t|$)";
		res+=")(\\b)";
		reg= new RegExp(res);
		
		return res;
	};
	
	
	EditAreaLoader.prototype.get_escaped_regexp= function(str){
		return str.toString().replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\}|\{|\$|\^|\|)/g, "\\$1");
	};
	
	EditAreaLoader.prototype.init_syntax_regexp= function(){
		var lang_style= {};	
		for(var lang in this.load_syntax){
			if(!this.syntax[lang])	// init the regexp if not already initialized
			{
				this.syntax[lang]= {};
				this.syntax[lang]["keywords_reg_exp"]= {};
				this.keywords_reg_exp_nb=0;
			
				if(this.load_syntax[lang]['KEYWORDS']){
					param="g";
					if(this.load_syntax[lang]['KEYWORD_CASE_SENSITIVE']===false)
						param+="i";
					for(var i in this.load_syntax[lang]['KEYWORDS']){
						if(typeof(this.load_syntax[lang]['KEYWORDS'][i])=="function") continue;
						this.syntax[lang]["keywords_reg_exp"][i]= new RegExp(this.get_regexp( this.load_syntax[lang]['KEYWORDS'][i] ), param);
						this.keywords_reg_exp_nb++;
					}
				}
				
				if(this.load_syntax[lang]['OPERATORS']){
					var str="";
					var nb=0;
					for(var i in this.load_syntax[lang]['OPERATORS']){
						if(typeof(this.load_syntax[lang]['OPERATORS'][i])=="function") continue;
						if(nb>0)
							str+="|";				
						str+=this.get_escaped_regexp(this.load_syntax[lang]['OPERATORS'][i]);
						nb++;
					}
					if(str.length>0)
						this.syntax[lang]["operators_reg_exp"]= new RegExp("("+str+")","g");
				}
				
				if(this.load_syntax[lang]['DELIMITERS']){
					var str="";
					var nb=0;
					for(var i in this.load_syntax[lang]['DELIMITERS']){
						if(typeof(this.load_syntax[lang]['DELIMITERS'][i])=="function") continue;
						if(nb>0)
							str+="|";
						str+=this.get_escaped_regexp(this.load_syntax[lang]['DELIMITERS'][i]);
						nb++;
					}
					if(str.length>0)
						this.syntax[lang]["delimiters_reg_exp"]= new RegExp("("+str+")","g");
				}
				
				
		//		/(("(\\"|[^"])*"?)|('(\\'|[^'])*'?)|(//(.|\r|\t)*\n)|(/\*(.|\n|\r|\t)*\*/)|(<!--(.|\n|\r|\t)*-->))/gi
				var syntax_trace=[];
				
		//		/("(?:[^"\\]*(\\\\)*(\\"?)?)*("|$))/g
				
				this.syntax[lang]["quotes"]={};
				var quote_tab= [];
				if(this.load_syntax[lang]['QUOTEMARKS']){
					for(var i in this.load_syntax[lang]['QUOTEMARKS']){	
						if(typeof(this.load_syntax[lang]['QUOTEMARKS'][i])=="function") continue;			
						var x=this.get_escaped_regexp(this.load_syntax[lang]['QUOTEMARKS'][i]);
						this.syntax[lang]["quotes"][x]=x;
						//quote_tab[quote_tab.length]="("+x+"(?:\\\\"+x+"|[^"+x+"])*("+x+"|$))";
						//previous working : quote_tab[quote_tab.length]="("+x+"(?:[^"+x+"\\\\]*(\\\\\\\\)*(\\\\"+x+"?)?)*("+x+"|$))";
						quote_tab[quote_tab.length]="("+ x +"(\\\\.|[^"+ x +"])*(?:"+ x +"|$))";
						
						syntax_trace.push(x);			
					}			
				}
						
				this.syntax[lang]["comments"]={};
				if(this.load_syntax[lang]['COMMENT_SINGLE']){
					for(var i in this.load_syntax[lang]['COMMENT_SINGLE']){	
						if(typeof(this.load_syntax[lang]['COMMENT_SINGLE'][i])=="function") continue;						
						var x=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_SINGLE'][i]);
						quote_tab[quote_tab.length]="("+x+"(.|\\r|\\t)*(\\n|$))";
						syntax_trace.push(x);
						this.syntax[lang]["comments"][x]="\n";
					}			
				}		
				// (/\*(.|[\r\n])*?\*/)
				if(this.load_syntax[lang]['COMMENT_MULTI']){
					for(var i in this.load_syntax[lang]['COMMENT_MULTI']){
						if(typeof(this.load_syntax[lang]['COMMENT_MULTI'][i])=="function") continue;							
						var start=this.get_escaped_regexp(i);
						var end=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_MULTI'][i]);
						quote_tab[quote_tab.length]="("+start+"(.|\\n|\\r)*?("+end+"|$))";
						syntax_trace.push(start);
						syntax_trace.push(end);
						this.syntax[lang]["comments"][i]=this.load_syntax[lang]['COMMENT_MULTI'][i];
					}			
				}		
				if(quote_tab.length>0)
					this.syntax[lang]["comment_or_quote_reg_exp"]= new RegExp("("+quote_tab.join("|")+")","gi");
				
				if(syntax_trace.length>0) //   /((.|\n)*?)(\\*("|'|\/\*|\*\/|\/\/|$))/g
					this.syntax[lang]["syntax_trace_regexp"]= new RegExp("((.|\n)*?)(\\\\*("+ syntax_trace.join("|") +"|$))", "gmi");
				
				if(this.load_syntax[lang]['SCRIPT_DELIMITERS']){
					this.syntax[lang]["script_delimiters"]= {};
					for(var i in this.load_syntax[lang]['SCRIPT_DELIMITERS']){
						if(typeof(this.load_syntax[lang]['SCRIPT_DELIMITERS'][i])=="function") continue;							
						this.syntax[lang]["script_delimiters"][i]= this.load_syntax[lang]['SCRIPT_DELIMITERS'];
					}			
				}
				
				this.syntax[lang]["custom_regexp"]= {};
				if(this.load_syntax[lang]['REGEXPS']){
					for(var i in this.load_syntax[lang]['REGEXPS']){
						if(typeof(this.load_syntax[lang]['REGEXPS'][i])=="function") continue;
						var val= this.load_syntax[lang]['REGEXPS'][i];
						if(!this.syntax[lang]["custom_regexp"][val['execute']])
							this.syntax[lang]["custom_regexp"][val['execute']]= {};
						this.syntax[lang]["custom_regexp"][val['execute']][i]={'regexp' : new RegExp(val['search'], val['modifiers'])
																			, 'class' : val['class']};
					}
				}
				
				if(this.load_syntax[lang]['STYLES']){							
					lang_style[lang]= {};
					for(var i in this.load_syntax[lang]['STYLES']){
						if(typeof(this.load_syntax[lang]['STYLES'][i])=="function") continue;
						if(typeof(this.load_syntax[lang]['STYLES'][i]) != "string"){
							for(var j in this.load_syntax[lang]['STYLES'][i]){							
								lang_style[lang][j]= this.load_syntax[lang]['STYLES'][i][j];
							}
						}else{
							lang_style[lang][i]= this.load_syntax[lang]['STYLES'][i];
						}
					}
				}
				// build style string
				var style="";		
				for(var i in lang_style[lang]){
					if(lang_style[lang][i].length>0){
						style+= "."+ lang +" ."+ i.toLowerCase() +" span{"+lang_style[lang][i]+"}\n";
						style+= "."+ lang +" ."+ i.toLowerCase() +"{"+lang_style[lang][i]+"}\n";				
					}
				}
				this.syntax[lang]["styles"]=style;
			}
		}				
	};
	
	editAreaLoader.waiting_loading["reg_syntax.js"]= "loaded";
                              ./mvappsvr/docroot/db/edit_area/langs_de.js                                                         0000777 0000000 0000000 00000004304 12534142432 017664  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["de"]={
new_document: "Neues Dokument",
search_button: "Suchen und Ersetzen",
search_command: "Weitersuchen / &ouml;ffne Suchfeld",
search: "Suchen",
replace: "Ersetzen",
replace_command: "Ersetzen / &ouml;ffne Suchfeld",
find_next: "Weitersuchen",
replace_all: "Ersetze alle Treffer",
reg_exp: "regul&auml;re Ausdr&uuml;cke",
match_case: "passt auf den Begriff<br />",
not_found: "Nicht gefunden.",
occurrence_replaced: "Die Vorkommen wurden ersetzt.",
search_field_empty: "Leeres Suchfeld",
restart_search_at_begin: "Ende des zu durchsuchenden Bereiches erreicht. Es wird die Suche von Anfang an fortgesetzt.", //find a shorter translation
move_popup: "Suchfenster bewegen",
font_size: "--Schriftgr&ouml;&szlig;e--",
go_to_line: "Gehe zu Zeile",
go_to_line_prompt: "Gehe zu Zeilennummmer:",
undo: "R&uuml;ckg&auml;ngig",
redo: "Wiederherstellen",
change_smooth_selection: "Aktiviere/Deaktiviere einige Features (weniger Bildschirmnutzung aber mehr CPU-Belastung)",
highlight: "Syntax Highlighting an- und ausschalten",
reset_highlight: "Highlighting zur&uuml;cksetzen (falls mit Text nicht konform)",
word_wrap: "Toggle word wrapping mode",
help: "Info",
save: "Speichern",
load: "&Ouml;ffnen",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Position",
total: "Gesamt",
close_popup: "Popup schlie&szlig;en",
shortcuts: "Shortcuts",
add_tab: "Tab zum Text hinzuf&uuml;gen",
remove_tab: "Tab aus Text entfernen",
about_notice: "Bemerkung: Syntax Highlighting ist nur f&uuml;r kurze Texte",
toggle: "Editor an- und ausschalten",
accesskey: "Accesskey",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "In Bearbeitung...",
fullscreen: "Full-Screen",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/edit_area/images_redo.gif                                                     0000777 0000000 0000000 00000000251 12534142432 020514  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   -Os=rח^vU9eMi7ZW}   !   ,       VI8ZIq4J
S0M	`01[M:
|\HF[=ilITxv ;                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/edit_area/langs_cs.js                                                         0000777 0000000 0000000 00000004232 12534142432 017701  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["cs"]={
new_document: "Nový dokument",
search_button: "Najdi a nahraď",
search_command: "Hledej další / otevři vyhledávací pole",
search: "Hledej",
replace: "Nahraď",
replace_command: "Nahraď / otevři vyhledávací pole",
find_next: "Najdi další",
replace_all: "Nahraď vše",
reg_exp: "platné výrazy",
match_case: "vyhodnocené výrazy",
not_found: "nenalezené.",
occurrence_replaced: "výskyty nahrazené.",
search_field_empty: "Pole vyhledávání je prázdné",
restart_search_at_begin: "Dosažen konec souboru, začínám od začátku.",
move_popup: "Přesuň vyhledávací okno",
font_size: "--Velikost textu--",
go_to_line: "Přejdi na řádek",
go_to_line_prompt: "Přejdi na řádek:",
undo: "krok zpět",
redo: "znovu",
change_smooth_selection: "Povolit nebo zakázat některé ze zobrazených funkcí (účelnější zobrazení požaduje větší zatížení procesoru)",
highlight: "Zvýrazňování syntaxe zap./vyp.",
reset_highlight: "Obnovit zvýraznění (v případě nesrovnalostí)",
word_wrap: "toggle word wrapping mode",
help: "O programu",
save: "Uložit",
load: "Otevřít",
line_abbr: "Ř.",
char_abbr: "S.",
position: "Pozice",
total: "Celkem",
close_popup: "Zavřít okno",
shortcuts: "Zkratky",
add_tab: "Přidat tabulování textu",
remove_tab: "Odtsranit tabulování textu",
about_notice: "Upozornění! Funkce zvýrazňování textu je k dispozici pouze pro malý text",
toggle: "Přepnout editor",
accesskey: "Přístupová klávesa",
tab: "Záložka",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Zpracovávám ...",
fullscreen: "Celá obrazovka",
syntax_selection: "--vyber zvýrazňovač--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/edit_area/search_replace.js                                                   0000777 0000000 0000000 00000012646 12534142432 021060  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   	EditArea.prototype.show_search = function(){
		if(_$("area_search_replace").style.visibility=="visible"){
			this.hidden_search();
		}else{
			this.open_inline_popup("area_search_replace");
			var text= this.area_get_selection();
			var search= text.split("\n")[0];
			_$("area_search").value= search;
			_$("area_search").focus();
		}
	};
	
	EditArea.prototype.hidden_search= function(){
		/*_$("area_search_replace").style.visibility="hidden";
		this.textarea.focus();
		var icon= _$("search");
		setAttribute(icon, "class", getAttribute(icon, "class").replace(/ selected/g, "") );*/
		this.close_inline_popup("area_search_replace");
	};
	
	EditArea.prototype.area_search= function(mode){
		
		if(!mode)
			mode="search";
		_$("area_search_msg").innerHTML="";		
		var search=_$("area_search").value;		
		
		this.textarea.focus();		
		this.textarea.textareaFocused=true;
		
		var infos= this.get_selection_infos();	
		var start= infos["selectionStart"];
		var pos=-1;
		var pos_begin=-1;
		var length=search.length;
		
		if(_$("area_search_replace").style.visibility!="visible"){
			this.show_search();
			return;
		}
		if(search.length==0){
			_$("area_search_msg").innerHTML=this.get_translation("search_field_empty");
			return;
		}
		// advance to the next occurence if no text selected
		if(mode!="replace" ){
			if(_$("area_search_reg_exp").checked)
				start++;
			else
				start+= search.length;
		}
		
		//search
		if(_$("area_search_reg_exp").checked){
			// regexp search
			var opt="m";
			if(!_$("area_search_match_case").checked)
				opt+="i";
			var reg= new RegExp(search, opt);
			pos= infos["full_text"].substr(start).search(reg);
			pos_begin= infos["full_text"].search(reg);
			if(pos!=-1){
				pos+=start;
				length=infos["full_text"].substr(start).match(reg)[0].length;
			}else if(pos_begin!=-1){
				length=infos["full_text"].match(reg)[0].length;
			}
		}else{
			if(_$("area_search_match_case").checked){
				pos= infos["full_text"].indexOf(search, start); 
				pos_begin= infos["full_text"].indexOf(search); 
			}else{
				pos= infos["full_text"].toLowerCase().indexOf(search.toLowerCase(), start); 
				pos_begin= infos["full_text"].toLowerCase().indexOf(search.toLowerCase()); 
			}		
		}
		
		// interpret result
		if(pos==-1 && pos_begin==-1){
			_$("area_search_msg").innerHTML="<strong>"+search+"</strong> "+this.get_translation("not_found");
			return;
		}else if(pos==-1 && pos_begin != -1){
			begin= pos_begin;
			_$("area_search_msg").innerHTML=this.get_translation("restart_search_at_begin");
		}else
			begin= pos;
		
		//_$("area_search_msg").innerHTML+="<strong>"+search+"</strong> found at "+begin+" strat at "+start+" pos "+pos+" curs"+ infos["indexOfCursor"]+".";
		if(mode=="replace" && pos==infos["indexOfCursor"]){
			var replace= _$("area_replace").value;
			var new_text="";			
			if(_$("area_search_reg_exp").checked){
				var opt="m";
				if(!_$("area_search_match_case").checked)
					opt+="i";
				var reg= new RegExp(search, opt);
				new_text= infos["full_text"].substr(0, begin) + infos["full_text"].substr(start).replace(reg, replace);
			}else{
				new_text= infos["full_text"].substr(0, begin) + replace + infos["full_text"].substr(begin + length);
			}
			this.textarea.value=new_text;
			this.area_select(begin, length);
			this.area_search();
		}else
			this.area_select(begin, length);
	};
	
	
	
	
	EditArea.prototype.area_replace= function(){		
		this.area_search("replace");
	};
	
	EditArea.prototype.area_replace_all= function(){
	/*	this.area_select(0, 0);
		_$("area_search_msg").innerHTML="";
		while(_$("area_search_msg").innerHTML==""){
			this.area_replace();
		}*/
	
		var base_text= this.textarea.value;
		var search= _$("area_search").value;		
		var replace= _$("area_replace").value;
		if(search.length==0){
			_$("area_search_msg").innerHTML=this.get_translation("search_field_empty");
			return ;
		}
		
		var new_text="";
		var nb_change=0;
		if(_$("area_search_reg_exp").checked){
			// regExp
			var opt="mg";
			if(!_$("area_search_match_case").checked)
				opt+="i";
			var reg= new RegExp(search, opt);
			nb_change= infos["full_text"].match(reg).length;
			new_text= infos["full_text"].replace(reg, replace);
			
		}else{
			
			if(_$("area_search_match_case").checked){
				var tmp_tab=base_text.split(search);
				nb_change= tmp_tab.length -1 ;
				new_text= tmp_tab.join(replace);
			}else{
				// case insensitive
				var lower_value=base_text.toLowerCase();
				var lower_search=search.toLowerCase();
				
				var start=0;
				var pos= lower_value.indexOf(lower_search);				
				while(pos!=-1){
					nb_change++;
					new_text+= this.textarea.value.substring(start , pos)+replace;
					start=pos+ search.length;
					pos= lower_value.indexOf(lower_search, pos+1);
				}
				new_text+= this.textarea.value.substring(start);				
			}
		}			
		if(new_text==base_text){
			_$("area_search_msg").innerHTML="<strong>"+search+"</strong> "+this.get_translation("not_found");
		}else{
			this.textarea.value= new_text;
			_$("area_search_msg").innerHTML="<strong>"+nb_change+"</strong> "+this.get_translation("occurrence_replaced");
			// firefox and opera doesn't manage with the focus if it's done directly
			//editArea.textarea.focus();editArea.textarea.textareaFocused=true;
			setTimeout("editArea.textarea.focus();editArea.textarea.textareaFocused=true;", 100);
		}
		
		
	};
                                                                                          ./mvappsvr/docroot/db/edit_area/images/                                                             0000777 0000000 0000000 00000000000 12534142432 017013  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/images/go_to_line.gif                                               0000777 0000000 0000000 00000002035 12534142432 021623  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    z z 	~ 	     $%(..88<@FHK)L!Q)M,P!X#Y-d.d.e3j<m*o4p5o<t1v.w8u3}:|DG>78;?<=R@NK_fhGK][][OP^habcW[iZY\Whnc\p]s]svsyfzg}z~iivvvx!
  ,        	H `@ \L BHi%K$a0#OEjg7 ÉQAL!Z33T*䇍LHѢ担p,sʔ*`$	(QBUj2qWX"l@#F!E Q+)L<("0\A*΋<F KT#&hӅCHfEBv1SN;6((` Ax8pCkߞ0  ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/images/highlight.gif                                                0000777 0000000 0000000 00000000400 12534142432 021446  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   F<&zB|rgc[Ϭ¸geB:ªBԴnn~FNRȖݢbҺbܒtbLNg2ܱ   !   ,       }'dih(;2ʆ8총p)!(
c4 Ċ,"H*GTlχHp<-p
mDuUdv ' ,22#'! ;                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/edit_area/images/close.gif                                                    0000777 0000000 0000000 00000000146 12534142432 020613  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    @@@Ȁ            ,       3")ǣ8Z	vIP
~Sr5[Y"`H,ȤrL  ;                                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/edit_area/images/spacer.gif                                                   0000777 0000000 0000000 00000000053 12534142432 020760  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a          !   ,       D ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/edit_area/images/fullscreen.gif                                               0000777 0000000 0000000 00000000306 12534142432 021646  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   2JbLttȒiBw|W}   !   ,       sI8k4di6T#!T8/7ѡ`bjd"q`BUDIWIXp.SyњsEG[[]]{  ;                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/edit_area/images/search.gif                                                   0000777 0000000 0000000 00000000277 12534142432 020760  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   !@yUoy6R_t|Eh!F   !   ,       lI8o Ԁ[0fP
jz)@p*6(J	#p 4*iۀ;
mq]*q{v<|EbA3  ;                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/edit_area/images/help.gif                                                     0000777 0000000 0000000 00000000447 12534142432 020442  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   O^u"Zr9ZBzrýP5nSVMp_ܑ̰"X"g   !   ,       'dihHY_fUNTFfD"TX$b1pLJ%px$GaIt%qH d8&bmz^ ~%u
 & &  '}(Q*44! ;                                                                                                                                                                                                                         ./mvappsvr/docroot/db/edit_area/images/processing.gif                                               0000777 0000000 0000000 00000001471 12534142432 021664  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a      333LLLfff!NETSCAPE2.0   !
  ,       Hɉ ZgՆ}HIl ta ޭpe0
&|.Q^ڭ"'N !
  ,       HBZ  }HIl0tq<ޭp@&|.BQ^ڭ"'N !
  ,       HZ}HIlAt <ޭpP&|.Q^ڭ"'N !
  ,       HƠZ'!}HIlTQtS<ޭp`  &|.Q^ڭ"'N !
  ,       HZg)}HIlat <ޭpp&|. Q^ڭ"'N !
  ,       HJZ1}HIlqt0<ޭp &|.@Q^ڭ"'N !
  ,       HZ9}HIl tA<ޭp%&|.Q^ڭ"'N !
  ,       HΡZ' }HIlTtSQ<ޭpE &|.Q^ڭ"'N ;                                                                                                                                                                                                       ./mvappsvr/docroot/db/edit_area/images/reset_highlight.gif                                          0000777 0000000 0000000 00000000250 12534142432 022653  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   ^p2Jbrr䄚   !   ,       UI87;G0ݷAxǹKhY bd/w5w$.-`fP(V0@38C ;                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/edit_area/images/statusbar_resize.gif                                         0000777 0000000 0000000 00000000117 12534142432 023075  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a      !   ,        
- f:eA!%riyKj ;                                                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/edit_area/images/word_wrap.gif                                                0000777 0000000 0000000 00000001667 12534142432 021523  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a       LFdWOod^|Wj4vtlLĄ~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                !   ,        	H*D8@Ç((/j((@@C:ࠥ˗.U`Ȓ&gKiT0?=ntAhJՀӋ@UOd:i}Wb
w-ܻTw¿ ;                                                                         ./mvappsvr/docroot/db/edit_area/images/smooth_selection.gif                                         0000777 0000000 0000000 00000000256 12534142432 023066  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a  
 ##^7OiϗZV>bbrrv   !   ,       [I8f F2c(	BS 0P8"1X&JTPu08GJR34Pˉz SQ7kA g1 ;                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/edit_area/images/redo.gif                                                     0000777 0000000 0000000 00000000251 12534142432 020434  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   -Os=rח^vU9eMi7ZW}   !   ,       VI8ZIq4J
S0M	`01[M:
|\HF[=ilITxv ;                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/edit_area/images/autocompletion.gif                                           0000777 0000000 0000000 00000000547 12534142432 022555  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    @|WWW@BBB===̃*ܾgf333ͯYsHSKKKޖJـfff0l[JM݂3$                     ! 8 ,       @pH,,"C6q$1j 4Il&85HsU>T$4, !1I.#
6"J#e!|I	 (1&I QBHC/JWB#8#+*	JA ;                                                                                                                                                         ./mvappsvr/docroot/db/edit_area/images/move.gif                                                     0000777 0000000 0000000 00000000401 12534142432 020446  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   			


                                    !   ,       ~ %4I&f`$N$H$'NHNd2b"o#"͒H(F$"M!kD@pb@<ZX'0:P< Z <
Z2bbC%	6Q[H;&7Cc2! ;                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/edit_area/images/undo.gif                                                     0000777 0000000 0000000 00000000257 12534142432 020456  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   :]?uܹߧ^~_~r?gQb蔳R   !   ,       \I8:=Gc6`H%"$^h8X@P.aLbGB@0DX"x E=YRp8o!]f ;                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/edit_area/images/newdocument.gif                                              0000777 0000000 0000000 00000000252 12534142432 022034  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   2Jb⢵Ⲿ   !   ,       WI8zWla0fyʺf @v/# k82MAr5ǖ5L'hFo> ;                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/edit_area/images/load.gif                                                     0000777 0000000 0000000 00000002021 12534142432 020417  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a                $&*) )1+303?:<!@J%GK1HO+O9Q1VY!\8S/X&]7])c;^(d:b'g<e9g0j9kAi@gZcAk8pDnFp]k.}D|hrF<HIHIZ{7KKX}GNOrzRLoO`FXUdaKn݂WYtle^deox熣ovۉ耯눮ݡݪ}腿쵲ϵ֏ڟױ!
  ,      	HA<4%IHIbd6TBCP$D8q$kUMrTB7h2Iӡ/3OZ`m@JչgM2dʉ=P=5b!cD;2T"8Z|  ?TiE(&0>T` A$+2Dh@@)0H1Gf(a\fњ*%HB @?i;o F.P A ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/edit_area/images/opacity.png                                                  0000777 0000000 0000000 00000000223 12534142432 021171  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR            gAMA  7   tEXtSoftware Adobe ImageReadyqe<   %IDATxbf*&*QG5pQ  f    IENDB`                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/edit_area/images/save.gif                                                     0000777 0000000 0000000 00000000435 12534142432 020445  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   NX2:R
BFHzr֦RRRrz-:?UU"Brbcbn*BBJB:RZr*J   !   ,       'dihM`bFb.<\CA`	03'$1hgZ)XAtED< V%.56?~$	0?& %#f@+! ;                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/edit_area/edit_area_full_with_plugins.js                                      0000777 0000000 0000000 00000343436 12534142432 023657  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    function EAL(){var t=this;t.version="0.8.1.1";date=new Date();t.start_time=date.getTime();t.win="loading";t.error=false;t.baseURL="";t.template="";t.lang={};t.load_syntax={};t.syntax={};t.loadedFiles=[];t.waiting_loading={};t.scripts_to_load=[];t.sub_scripts_to_load=[];t.resize=[];t.hidden={};t.default_settings={debug:false,smooth_selection:true,font_size:"10",font_family:"monospace",start_highlight:false,toolbar:"search,go_to_line,fullscreen,|,undo,redo,|,select_font,|,change_smooth_selection,highlight,reset_highlight,word_wrap,|,help",begin_toolbar:"",end_toolbar:"",is_multi_files:false,allow_resize:"both",show_line_colors:false,min_width:400,min_height:125,replace_tab_by_spaces:false,allow_toggle:true,language:"en",syntax:"",syntax_selection_allow:"basic,brainfuck,c,coldfusion,cpp,css,html,java,js,pas,perl,php,python,ruby,robotstxt,sql,tsql,vb,xml",display:"onload",max_undo:30,browsers:"known",plugins:"",gecko_spellcheck:false,fullscreen:false,is_editable:true,cursor_position:"begin",word_wrap:false,autocompletion:false,load_callback:"",save_callback:"",change_callback:"",submit_callback:"",EA_init_callback:"",EA_delete_callback:"",EA_load_callback:"",EA_unload_callback:"",EA_toggle_on_callback:"",EA_toggle_off_callback:"",EA_file_switch_on_callback:"",EA_file_switch_off_callback:"",EA_file_close_callback:""};t.advanced_buttons=[ ['new_document','newdocument.gif','new_document',false],['search','search.gif','show_search',false],['go_to_line','go_to_line.gif','go_to_line',false],['undo','undo.gif','undo',true],['redo','redo.gif','redo',true],['change_smooth_selection','smooth_selection.gif','change_smooth_selection_mode',true],['reset_highlight','reset_highlight.gif','resync_highlight',true],['highlight','highlight.gif','change_highlight',true],['help','help.gif','show_help',false],['save','save.gif','save',false],['load','load.gif','load',false],['fullscreen','fullscreen.gif','toggle_full_screen',false],['word_wrap','word_wrap.gif','toggle_word_wrap',true],['autocompletion','autocompletion.gif','toggle_autocompletion',true] ];t.set_browser_infos(t);if(t.isIE>=6||t.isGecko||(t.isWebKit&&!t.isSafari<3)||t.isOpera>=9||t.isCamino)t.isValidBrowser=true;
else t.isValidBrowser=false;t.set_base_url();for(var i=0;i<t.scripts_to_load.length;i++){setTimeout("eAL.load_script('"+t.baseURL+t.scripts_to_load[i]+".js');",1);t.waiting_loading[t.scripts_to_load[i]+".js"]=false;}t.add_event(window,"load",EAL.prototype.window_loaded);};EAL.prototype={has_error:function(){this.error=true;for(var i in EAL.prototype){EAL.prototype[i]=function(){};}},set_browser_infos:function(o){ua=navigator.userAgent;o.isWebKit=/WebKit/.test(ua);o.isGecko=!o.isWebKit&&/Gecko/.test(ua);o.isMac=/Mac/.test(ua);o.isIE=(navigator.appName=="Microsoft Internet Explorer");if(o.isIE){o.isIE=ua.replace(/^.*?MSIE\s+([0-9\.]+).*$/,"$1");if(o.isIE<6)o.has_error();}if(o.isOpera=(ua.indexOf('Opera')!=-1)){o.isOpera=ua.replace(/^.*?Opera.*?([0-9\.]+).*$/i,"$1");if(o.isOpera<9)o.has_error();o.isIE=false;}if(o.isFirefox=(ua.indexOf('Firefox')!=-1))o.isFirefox=ua.replace(/^.*?Firefox.*?([0-9\.]+).*$/i,"$1");if(ua.indexOf('Iceweasel')!=-1)o.isFirefox=ua.replace(/^.*?Iceweasel.*?([0-9\.]+).*$/i,"$1");if(ua.indexOf('GranParadiso')!=-1)o.isFirefox=ua.replace(/^.*?GranParadiso.*?([0-9\.]+).*$/i,"$1");if(ua.indexOf('BonEcho')!=-1)o.isFirefox=ua.replace(/^.*?BonEcho.*?([0-9\.]+).*$/i,"$1");if(ua.indexOf('SeaMonkey')!=-1)o.isFirefox=(ua.replace(/^.*?SeaMonkey.*?([0-9\.]+).*$/i,"$1"))+1;if(o.isCamino=(ua.indexOf('Camino')!=-1))o.isCamino=ua.replace(/^.*?Camino.*?([0-9\.]+).*$/i,"$1");if(o.isSafari=(ua.indexOf('Safari')!=-1))o.isSafari=ua.replace(/^.*?Version\/([0-9]+\.[0-9]+).*$/i,"$1");if(o.isChrome=(ua.indexOf('Chrome')!=-1)){o.isChrome=ua.replace(/^.*?Chrome.*?([0-9\.]+).*$/i,"$1");o.isSafari=false;}},window_loaded:function(){eAL.win="loaded";if(document.forms){for(var i=0;i<document.forms.length;i++){var form=document.forms[i];form.edit_area_replaced_submit=null;try{form.edit_area_replaced_submit=form.onsubmit;form.onsubmit="";}catch(e){}eAL.add_event(form,"submit",EAL.prototype.submit);eAL.add_event(form,"reset",EAL.prototype.reset);}}eAL.add_event(window,"unload",function(){for(var i in eAs){eAL.delete_instance(i);}});},init_ie_textarea:function(id){var a=document.getElementById(id);try{if(a&&typeof(a.focused)=="undefined"){a.focus();a.focused=true;a.selectionStart=a.selectionEnd=0;get_IE_selection(a);eAL.add_event(a,"focus",IE_textarea_focus);eAL.add_event(a,"blur",IE_textarea_blur);}}catch(ex){}},init:function(settings){var t=this,s=settings,i;if(!s["id"])t.has_error();if(t.error)return;if(eAs[s["id"]])t.delete_instance(s["id"]);for(i in t.default_settings){if(typeof(s[i])=="undefined")s[i]=t.default_settings[i];}if(s["browsers"]=="known"&&t.isValidBrowser==false){return;}if(s["begin_toolbar"].length>0)s["toolbar"]=s["begin_toolbar"]+","+s["toolbar"];if(s["end_toolbar"].length>0)s["toolbar"]=s["toolbar"]+","+s["end_toolbar"];s["tab_toolbar"]=s["toolbar"].replace(/ /g,"").split(",");s["plugins"]=s["plugins"].replace(/ /g,"").split(",");for(i=0;i<s["plugins"].length;i++){if(s["plugins"][i].length==0)s["plugins"].splice(i,1);}t.get_template();t.load_script(t.baseURL+"langs/"+s["language"]+".js");if(s["syntax"].length>0){s["syntax"]=s["syntax"].toLowerCase();t.load_script(t.baseURL+"reg_syntax/"+s["syntax"]+".js");}eAs[s["id"]]={"settings":s};eAs[s["id"]]["displayed"]=false;eAs[s["id"]]["hidden"]=false;t.start(s["id"]);},delete_instance:function(id){var d=document,fs=window.frames,span,iframe;eAL.execCommand(id,"EA_delete");if(fs["frame_"+id]&&fs["frame_"+id].editArea){if(eAs[id]["displayed"])eAL.toggle(id,"off");fs["frame_"+id].editArea.execCommand("EA_unload");}span=d.getElementById("EditAreaArroundInfos_"+id);if(span)span.parentNode.removeChild(span);iframe=d.getElementById("frame_"+id);if(iframe){iframe.parentNode.removeChild(iframe);try{delete fs["frame_"+id];}catch(e){}}delete eAs[id];},start:function(id){var t=this,d=document,f,span,father,next,html='',html_toolbar_content='',template,content,i;if(t.win!="loaded"){setTimeout("eAL.start('"+id+"');",50);return;}for(i in t.waiting_loading){if(t.waiting_loading[i]!="loaded"&&typeof(t.waiting_loading[i])!="function"){setTimeout("eAL.start('"+id+"');",50);return;}}if(!t.lang[eAs[id]["settings"]["language"]]||(eAs[id]["settings"]["syntax"].length>0&&!t.load_syntax[eAs[id]["settings"]["syntax"]])){setTimeout("eAL.start('"+id+"');",50);return;}if(eAs[id]["settings"]["syntax"].length>0)t.init_syntax_regexp();if(!d.getElementById("EditAreaArroundInfos_"+id)&&(eAs[id]["settings"]["debug"]||eAs[id]["settings"]["allow_toggle"])){span=d.createElement("span");span.id="EditAreaArroundInfos_"+id;if(eAs[id]["settings"]["allow_toggle"]){checked=(eAs[id]["settings"]["display"]=="onload")?"checked='checked'":"";html+="<div id='edit_area_toggle_"+i+"'>";html+="<input id='edit_area_toggle_checkbox_"+id+"' class='toggle_"+id+"' type='checkbox' onclick='eAL.toggle(\""+id+"\");' accesskey='e' "+checked+" />";html+="<label for='edit_area_toggle_checkbox_"+id+"'>{$toggle}</label></div>";}if(eAs[id]["settings"]["debug"])html+="<textarea id='edit_area_debug_"+id+"' spellcheck='off' style='z-index:20;width:100%;height:120px;overflow:auto;border:solid black 1px;'></textarea><br />";html=t.translate(html,eAs[id]["settings"]["language"]);span.innerHTML=html;father=d.getElementById(id).parentNode;next=d.getElementById(id).nextSibling;if(next==null)father.appendChild(span);
else father.insertBefore(span,next);}if(!eAs[id]["initialized"]){t.execCommand(id,"EA_init");if(eAs[id]["settings"]["display"]=="later"){eAs[id]["initialized"]=true;return;}}if(t.isIE){t.init_ie_textarea(id);}area=eAs[id];for(i=0;i<area["settings"]["tab_toolbar"].length;i++){html_toolbar_content+=t.get_control_html(area["settings"]["tab_toolbar"][i],area["settings"]["language"]);}html_toolbar_content=t.translate(html_toolbar_content,area["settings"]["language"],"template");if(!t.iframe_script){t.iframe_script="";for(i=0;i<t.sub_scripts_to_load.length;i++)t.iframe_script+='<script language="javascript" type="text/javascript" src="'+t.baseURL+t.sub_scripts_to_load[i]+'.js"></script>';}for(i=0;i<area["settings"]["plugins"].length;i++){if(!t.all_plugins_loaded)t.iframe_script+='<script language="javascript" type="text/javascript" src="'+t.baseURL+'plugins/'+area["settings"]["plugins"][i]+'/'+area["settings"]["plugins"][i]+'.js"></script>';t.iframe_script+='<script language="javascript" type="text/javascript" src="'+t.baseURL+'plugins/'+area["settings"]["plugins"][i]+'/langs/'+area["settings"]["language"]+'.js"></script>';}if(!t.iframe_css){t.iframe_css="<link href='"+t.baseURL+"edit_area.css' rel='stylesheet' type='text/css' />";}template=t.template.replace(/\[__BASEURL__\]/g,t.baseURL);template=template.replace("[__TOOLBAR__]",html_toolbar_content);template=t.translate(template,area["settings"]["language"],"template");template=template.replace("[__CSSRULES__]",t.iframe_css);template=template.replace("[__JSCODE__]",t.iframe_script);template=template.replace("[__EA_VERSION__]",t.version);area.textarea=d.getElementById(area["settings"]["id"]);eAs[area["settings"]["id"]]["textarea"]=area.textarea;if(typeof(window.frames["frame_"+area["settings"]["id"]])!='undefined')delete window.frames["frame_"+area["settings"]["id"]];father=area.textarea.parentNode;content=d.createElement("iframe");content.name="frame_"+area["settings"]["id"];content.id="frame_"+area["settings"]["id"];content.style.borderWidth="0px";setAttribute(content,"frameBorder","0");content.style.overflow="hidden";content.style.display="none";next=area.textarea.nextSibling;if(next==null)father.appendChild(content);
else father.insertBefore(content,next);f=window.frames["frame_"+area["settings"]["id"]];f.document.open();f.eAs=eAs;f.area_id=area["settings"]["id"];f.document.area_id=area["settings"]["id"];f.document.write(template);f.document.close();},toggle:function(id,toggle_to){if(!toggle_to)toggle_to=(eAs[id]["displayed"]==true)?"off":"on";if(eAs[id]["displayed"]==true&&toggle_to=="off"){this.toggle_off(id);}
else if(eAs[id]["displayed"]==false&&toggle_to=="on"){this.toggle_on(id);}return false;},toggle_off:function(id){var fs=window.frames,f,t,parNod,nxtSib,selStart,selEnd,scrollTop,scrollLeft;if(fs["frame_"+id]){f=fs["frame_"+id];t=eAs[id]["textarea"];if(f.editArea.fullscreen['isFull'])f.editArea.toggle_full_screen(false);eAs[id]["displayed"]=false;t.wrap="off";setAttribute(t,"wrap","off");parNod=t.parentNode;nxtSib=t.nextSibling;parNod.removeChild(t);parNod.insertBefore(t,nxtSib);t.value=f.editArea.textarea.value;selStart=f.editArea.last_selection["selectionStart"];selEnd=f.editArea.last_selection["selectionEnd"];scrollTop=f.document.getElementById("result").scrollTop;scrollLeft=f.document.getElementById("result").scrollLeft;document.getElementById("frame_"+id).style.display='none';t.style.display="inline";try{t.focus();}catch(e){};if(this.isIE){t.selectionStart=selStart;t.selectionEnd=selEnd;t.focused=true;set_IE_selection(t);}
else{if(this.isOpera&&this.isOpera < 9.6){t.setSelectionRange(0,0);}try{t.setSelectionRange(selStart,selEnd);}catch(e){};}t.scrollTop=scrollTop;t.scrollLeft=scrollLeft;f.editArea.execCommand("toggle_off");}},toggle_on:function(id){var fs=window.frames,f,t,selStart=0,selEnd=0,scrollTop=0,scrollLeft=0,curPos,elem;if(fs["frame_"+id]){f=fs["frame_"+id];t=eAs[id]["textarea"];area=f.editArea;area.textarea.value=t.value;curPos=eAs[id]["settings"]["cursor_position"];if(t.use_last==true){selStart=t.last_selectionStart;selEnd=t.last_selectionEnd;scrollTop=t.last_scrollTop;scrollLeft=t.last_scrollLeft;t.use_last=false;}
else if(curPos=="auto"){try{selStart=t.selectionStart;selEnd=t.selectionEnd;scrollTop=t.scrollTop;scrollLeft=t.scrollLeft;}catch(ex){}}this.set_editarea_size_from_textarea(id,document.getElementById("frame_"+id));t.style.display="none";document.getElementById("frame_"+id).style.display="inline";area.execCommand("focus");eAs[id]["displayed"]=true;area.execCommand("update_size");f.document.getElementById("result").scrollTop=scrollTop;f.document.getElementById("result").scrollLeft=scrollLeft;area.area_select(selStart,selEnd-selStart);area.execCommand("toggle_on");}
else{elem=document.getElementById(id);elem.last_selectionStart=elem.selectionStart;elem.last_selectionEnd=elem.selectionEnd;elem.last_scrollTop=elem.scrollTop;elem.last_scrollLeft=elem.scrollLeft;elem.use_last=true;eAL.start(id);}},set_editarea_size_from_textarea:function(id,frame){var elem,width,height;elem=document.getElementById(id);width=Math.max(eAs[id]["settings"]["min_width"],elem.offsetWidth)+"px";height=Math.max(eAs[id]["settings"]["min_height"],elem.offsetHeight)+"px";if(elem.style.width.indexOf("%")!=-1)width=elem.style.width;if(elem.style.height.indexOf("%")!=-1)height=elem.style.height;frame.style.width=width;frame.style.height=height;},set_base_url:function(){var t=this,elems,i,docBasePath;if(!this.baseURL){elems=document.getElementsByTagName('script');for(i=0;i<elems.length;i++){if(elems[i].src&&elems[i].src.match(/edit_area_[^\\\/]*$/i)){var src=elems[i].src;src=src.substring(0,src.lastIndexOf('/'));this.baseURL=src;this.file_name=elems[i].src.substr(elems[i].src.lastIndexOf("/")+1);break;}}}docBasePath=document.location.href;if(docBasePath.indexOf('?')!=-1)docBasePath=docBasePath.substring(0,docBasePath.indexOf('?'));docBasePath=docBasePath.substring(0,docBasePath.lastIndexOf('/'));if(t.baseURL.indexOf('://')==-1&&t.baseURL.charAt(0)!='/'){t.baseURL=docBasePath+"/"+t.baseURL;}t.baseURL+="/";},get_button_html:function(id,img,exec,isFileSpecific,baseURL){var cmd,html;if(!baseURL)baseURL=this.baseURL;cmd='editArea.execCommand(\''+exec+'\')';html='<a id="a_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+';return false;" onmousedown="return false;" target="_self" fileSpecific="'+(isFileSpecific?'yes':'no')+'">';html+='<img id="'+id+'" src="'+baseURL+'images/'+img+'" title="{$'+id+'}" width="20" height="20" class="editAreaButtonNormal" onmouseover="editArea.switchClass(this,\'editAreaButtonOver\');" onmouseout="editArea.restoreClass(this);" onmousedown="editArea.restoreAndSwitchClass(this,\'editAreaButtonDown\');" /></a>';return html;},get_control_html:function(button_name,lang){var t=this,i,but,html,si;for(i=0;i<t.advanced_buttons.length;i++){but=t.advanced_buttons[i];if(but[0]==button_name){return t.get_button_html(but[0],but[1],but[2],but[3]);}}switch(button_name){case "*":case "return":return "<br />";case "|":case "separator":return '<img src="'+t.baseURL+'images/spacer.gif" width="1" height="15" class="editAreaSeparatorLine">';case "select_font":html="<select id='area_font_size' onchange='javascript:editArea.execCommand(\"change_font_size\")' fileSpecific='yes'>";html+="<option value='-1'>{$font_size}</option>";si=[8,9,10,11,12,14];for(i=0;i<si.length;i++){html+="<option value='"+si[i]+"'>"+si[i]+" pt</option>";}html+="</select>";return html;case "syntax_selection":html="<select id='syntax_selection' onchange='javascript:editArea.execCommand(\"change_syntax\",this.value)' fileSpecific='yes'>";html+="<option value='-1'>{$syntax_selection}</option>";html+="</select>";return html;}return "<span id='tmp_tool_"+button_name+"'>["+button_name+"]</span>";},get_template:function(){if(this.template==""){var xhr_object=null;if(window.XMLHttpRequest)xhr_object=new XMLHttpRequest();
else if(window.ActiveXObject)xhr_object=new ActiveXObject("Microsoft.XMLHTTP");
else{alert("XMLHTTPRequest not supported. EditArea not loaded");return;}xhr_object.open("GET",this.baseURL+"template.html",false);xhr_object.send(null);if(xhr_object.readyState==4)this.template=xhr_object.responseText;
else this.has_error();}},translate:function(text,lang,mode){if(mode=="word")text=eAL.get_word_translation(text,lang);
else if(mode="template"){eAL.current_language=lang;text=text.replace(/\{\$([^\}]+)\}/gm,eAL.translate_template);}return text;},translate_template:function(){return eAL.get_word_translation(EAL.prototype.translate_template.arguments[1],eAL.current_language);},get_word_translation:function(val,lang){var i;for(i in eAL.lang[lang]){if(i==val)return eAL.lang[lang][i];}return "_"+val;},load_script:function(url){var t=this,d=document,script,head;if(t.loadedFiles[url])return;try{script=d.createElement("script");script.type="text/javascript";script.src=url;script.charset="UTF-8";d.getElementsByTagName("head")[0].appendChild(script);}catch(e){d.write('<sc'+'ript language="javascript" type="text/javascript" src="'+url+'" charset="UTF-8"></sc'+'ript>');}t.loadedFiles[url]=true;},add_event:function(obj,name,handler){try{if(obj.attachEvent){obj.attachEvent("on"+name,handler);}
else{obj.addEventListener(name,handler,false);}}catch(e){}},remove_event:function(obj,name,handler){try{if(obj.detachEvent)obj.detachEvent("on"+name,handler);
else obj.removeEventListener(name,handler,false);}catch(e){}},reset:function(e){var formObj,is_child,i,x;formObj=eAL.isIE ? window.event.srcElement:e.target;if(formObj.tagName!='FORM')formObj=formObj.form;for(i in eAs){is_child=false;for(x=0;x<formObj.elements.length;x++){if(formObj.elements[x].id==i)is_child=true;}if(window.frames["frame_"+i]&&is_child&&eAs[i]["displayed"]==true){var exec='window.frames["frame_'+i+'"].editArea.textarea.value=document.getElementById("'+i+'").value;';exec+='window.frames["frame_'+i+'"].editArea.execCommand("focus");';exec+='window.frames["frame_'+i+'"].editArea.check_line_selection();';exec+='window.frames["frame_'+i+'"].editArea.execCommand("reset");';window.setTimeout(exec,10);}}return;},submit:function(e){var formObj,is_child,fs=window.frames,i,x;formObj=eAL.isIE ? window.event.srcElement:e.target;if(formObj.tagName!='FORM')formObj=formObj.form;for(i in eAs){is_child=false;for(x=0;x<formObj.elements.length;x++){if(formObj.elements[x].id==i)is_child=true;}if(is_child){if(fs["frame_"+i]&&eAs[i]["displayed"]==true)document.getElementById(i).value=fs["frame_"+i].editArea.textarea.value;eAL.execCommand(i,"EA_submit");}}if(typeof(formObj.edit_area_replaced_submit)=="function"){res=formObj.edit_area_replaced_submit();if(res==false){if(eAL.isIE)return false;
else e.preventDefault();}}return;},getValue:function(id){if(window.frames["frame_"+id]&&eAs[id]["displayed"]==true){return window.frames["frame_"+id].editArea.textarea.value;}
else if(elem=document.getElementById(id)){return elem.value;}return false;},setValue:function(id,new_val){var fs=window.frames;if((f=fs["frame_"+id])&&eAs[id]["displayed"]==true){f.editArea.textarea.value=new_val;f.editArea.execCommand("focus");f.editArea.check_line_selection(false);f.editArea.execCommand("onchange");}
else if(elem=document.getElementById(id)){elem.value=new_val;}},getSelectionRange:function(id){var sel,eA,fs=window.frames;sel={"start":0,"end":0};if(fs["frame_"+id]&&eAs[id]["displayed"]==true){eA=fs["frame_"+id].editArea;sel["start"]=eA.textarea.selectionStart;sel["end"]=eA.textarea.selectionEnd;}
else if(elem=document.getElementById(id)){sel=getSelectionRange(elem);}return sel;},setSelectionRange:function(id,new_start,new_end){var fs=window.frames;if(fs["frame_"+id]&&eAs[id]["displayed"]==true){fs["frame_"+id].editArea.area_select(new_start,new_end-new_start);if(!this.isIE){fs["frame_"+id].editArea.check_line_selection(false);fs["frame_"+id].editArea.scroll_to_view();}}
else if(elem=document.getElementById(id)){setSelectionRange(elem,new_start,new_end);}},getSelectedText:function(id){var sel=this.getSelectionRange(id);return this.getValue(id).substring(sel["start"],sel["end"]);},setSelectedText:function(id,new_val){var fs=window.frames,d=document,sel,text,scrollTop,scrollLeft,new_sel_end;new_val=new_val.replace(/\r/g,"");sel=this.getSelectionRange(id);text=this.getValue(id);if(fs["frame_"+id]&&eAs[id]["displayed"]==true){scrollTop=fs["frame_"+id].document.getElementById("result").scrollTop;scrollLeft=fs["frame_"+id].document.getElementById("result").scrollLeft;}
else{scrollTop=d.getElementById(id).scrollTop;scrollLeft=d.getElementById(id).scrollLeft;}text=text.substring(0,sel["start"])+new_val+text.substring(sel["end"]);this.setValue(id,text);new_sel_end=sel["start"]+new_val.length;this.setSelectionRange(id,sel["start"],new_sel_end);if(new_val !=this.getSelectedText(id).replace(/\r/g,"")){this.setSelectionRange(id,sel["start"],new_sel_end+new_val.split("\n").length-1);}if(fs["frame_"+id]&&eAs[id]["displayed"]==true){fs["frame_"+id].document.getElementById("result").scrollTop=scrollTop;fs["frame_"+id].document.getElementById("result").scrollLeft=scrollLeft;fs["frame_"+id].editArea.execCommand("onchange");}
else{d.getElementById(id).scrollTop=scrollTop;d.getElementById(id).scrollLeft=scrollLeft;}},insertTags:function(id,open_tag,close_tag){var old_sel,new_sel;old_sel=this.getSelectionRange(id);text=open_tag+this.getSelectedText(id)+close_tag;eAL.setSelectedText(id,text);new_sel=this.getSelectionRange(id);if(old_sel["end"] > old_sel["start"])this.setSelectionRange(id,new_sel["end"],new_sel["end"]);
else this.setSelectionRange(id,old_sel["start"]+open_tag.length,old_sel["start"]+open_tag.length);},hide:function(id){var fs=window.frames,d=document,t=this,scrollTop,scrollLeft,span;if(d.getElementById(id)&&!t.hidden[id]){t.hidden[id]={};t.hidden[id]["selectionRange"]=t.getSelectionRange(id);if(d.getElementById(id).style.display!="none"){t.hidden[id]["scrollTop"]=d.getElementById(id).scrollTop;t.hidden[id]["scrollLeft"]=d.getElementById(id).scrollLeft;}if(fs["frame_"+id]){t.hidden[id]["toggle"]=eAs[id]["displayed"];if(fs["frame_"+id]&&eAs[id]["displayed"]==true){scrollTop=fs["frame_"+id].document.getElementById("result").scrollTop;scrollLeft=fs["frame_"+id].document.getElementById("result").scrollLeft;}
else{scrollTop=d.getElementById(id).scrollTop;scrollLeft=d.getElementById(id).scrollLeft;}t.hidden[id]["scrollTop"]=scrollTop;t.hidden[id]["scrollLeft"]=scrollLeft;if(eAs[id]["displayed"]==true)eAL.toggle_off(id);}span=d.getElementById("EditAreaArroundInfos_"+id);if(span){span.style.display='none';}d.getElementById(id).style.display="none";}},show:function(id){var fs=window.frames,d=document,t=this,span;if((elem=d.getElementById(id))&&t.hidden[id]){elem.style.display="inline";elem.scrollTop=t.hidden[id]["scrollTop"];elem.scrollLeft=t.hidden[id]["scrollLeft"];span=d.getElementById("EditAreaArroundInfos_"+id);if(span){span.style.display='inline';}if(fs["frame_"+id]){elem.style.display="inline";if(t.hidden[id]["toggle"]==true)eAL.toggle_on(id);scrollTop=t.hidden[id]["scrollTop"];scrollLeft=t.hidden[id]["scrollLeft"];if(fs["frame_"+id]&&eAs[id]["displayed"]==true){fs["frame_"+id].document.getElementById("result").scrollTop=scrollTop;fs["frame_"+id].document.getElementById("result").scrollLeft=scrollLeft;}
else{elem.scrollTop=scrollTop;elem.scrollLeft=scrollLeft;}}sel=t.hidden[id]["selectionRange"];t.setSelectionRange(id,sel["start"],sel["end"]);delete t.hidden[id];}},getCurrentFile:function(id){return this.execCommand(id,'get_file',this.execCommand(id,'curr_file'));},getFile:function(id,file_id){return this.execCommand(id,'get_file',file_id);},getAllFiles:function(id){return this.execCommand(id,'get_all_files()');},openFile:function(id,file_infos){return this.execCommand(id,'open_file',file_infos);},closeFile:function(id,file_id){return this.execCommand(id,'close_file',file_id);},setFileEditedMode:function(id,file_id,to){var reg1,reg2;reg1=new RegExp('\\\\','g');reg2=new RegExp('"','g');return this.execCommand(id,'set_file_edited_mode("'+file_id.replace(reg1,'\\\\').replace(reg2,'\\"')+'",'+to+')');},execCommand:function(id,cmd,fct_param){switch(cmd){case "EA_init":if(eAs[id]['settings']["EA_init_callback"].length>0)eval(eAs[id]['settings']["EA_init_callback"]+"('"+id+"');");break;case "EA_delete":if(eAs[id]['settings']["EA_delete_callback"].length>0)eval(eAs[id]['settings']["EA_delete_callback"]+"('"+id+"');");break;case "EA_submit":if(eAs[id]['settings']["submit_callback"].length>0)eval(eAs[id]['settings']["submit_callback"]+"('"+id+"');");break;}if(window.frames["frame_"+id]&&window.frames["frame_"+id].editArea){if(fct_param!=undefined)return eval('window.frames["frame_'+id+'"].editArea.'+cmd+'(fct_param);');
else return eval('window.frames["frame_'+id+'"].editArea.'+cmd+';');}return false;}};var eAL=new EAL();var eAs={}; function getAttribute(elm,aName){var aValue,taName,i;try{aValue=elm.getAttribute(aName);}catch(exept){}if(! aValue){for(i=0;i < elm.attributes.length;i++){taName=elm.attributes[i] .name.toLowerCase();if(taName==aName){aValue=elm.attributes[i] .value;return aValue;}}}return aValue;};function setAttribute(elm,attr,val){if(attr=="class"){elm.setAttribute("className",val);elm.setAttribute("class",val);}
else{elm.setAttribute(attr,val);}};function getChildren(elem,elem_type,elem_attribute,elem_attribute_match,option,depth){if(!option)var option="single";if(!depth)var depth=-1;if(elem){var children=elem.childNodes;var result=null;var results=[];for(var x=0;x<children.length;x++){strTagName=new String(children[x].tagName);children_class="?";if(strTagName!="undefined"){child_attribute=getAttribute(children[x],elem_attribute);if((strTagName.toLowerCase()==elem_type.toLowerCase()||elem_type=="")&&(elem_attribute==""||child_attribute==elem_attribute_match)){if(option=="all"){results.push(children[x]);}
else{return children[x];}}if(depth!=0){result=getChildren(children[x],elem_type,elem_attribute,elem_attribute_match,option,depth-1);if(option=="all"){if(result.length>0){results=results.concat(result);}}
else if(result!=null){return result;}}}}if(option=="all")return results;}return null;};function isChildOf(elem,parent){if(elem){if(elem==parent)return true;while(elem.parentNode !='undefined'){return isChildOf(elem.parentNode,parent);}}return false;};function getMouseX(e){if(e!=null&&typeof(e.pageX)!="undefined"){return e.pageX;}
else{return(e!=null?e.x:event.x)+document.documentElement.scrollLeft;}};function getMouseY(e){if(e!=null&&typeof(e.pageY)!="undefined"){return e.pageY;}
else{return(e!=null?e.y:event.y)+document.documentElement.scrollTop;}};function calculeOffsetLeft(r){return calculeOffset(r,"offsetLeft")};function calculeOffsetTop(r){return calculeOffset(r,"offsetTop")};function calculeOffset(element,attr){var offset=0;while(element){offset+=element[attr];element=element.offsetParent}return offset;};function get_css_property(elem,prop){if(document.defaultView){return document.defaultView.getComputedStyle(elem,null).getPropertyValue(prop);}
else if(elem.currentStyle){var prop=prop.replace(/-\D/gi,function(sMatch){return sMatch.charAt(sMatch.length-1).toUpperCase();});return elem.currentStyle[prop];}
else return null;}var _mCE;function start_move_element(e,id,frame){var elem_id=(e.target||e.srcElement).id;if(id)elem_id=id;if(!frame)frame=window;if(frame.event)e=frame.event;_mCE=frame.document.getElementById(elem_id);_mCE.frame=frame;frame.document.onmousemove=move_element;frame.document.onmouseup=end_move_element;mouse_x=getMouseX(e);mouse_y=getMouseY(e);_mCE.start_pos_x=mouse_x-(_mCE.style.left.replace("px","")||calculeOffsetLeft(_mCE));_mCE.start_pos_y=mouse_y-(_mCE.style.top.replace("px","")||calculeOffsetTop(_mCE));return false;};function end_move_element(e){_mCE.frame.document.onmousemove="";_mCE.frame.document.onmouseup="";_mCE=null;};function move_element(e){var newTop,newLeft,maxLeft;if(_mCE.frame&&_mCE.frame.event)e=_mCE.frame.event;newTop=getMouseY(e)-_mCE.start_pos_y;newLeft=getMouseX(e)-_mCE.start_pos_x;maxLeft=_mCE.frame.document.body.offsetWidth-_mCE.offsetWidth;max_top=_mCE.frame.document.body.offsetHeight-_mCE.offsetHeight;newTop=Math.min(Math.max(0,newTop),max_top);newLeft=Math.min(Math.max(0,newLeft),maxLeft);_mCE.style.top=newTop+"px";_mCE.style.left=newLeft+"px";return false;};var nav=eAL.nav;function getSelectionRange(textarea){return{"start":textarea.selectionStart,"end":textarea.selectionEnd};};function setSelectionRange(t,start,end){t.focus();start=Math.max(0,Math.min(t.value.length,start));end=Math.max(start,Math.min(t.value.length,end));if(this.isOpera&&this.isOpera < 9.6){t.selectionEnd=1;t.selectionStart=0;t.selectionEnd=1;t.selectionStart=0;}t.selectionStart=start;t.selectionEnd=end;if(isIE)set_IE_selection(t);};function get_IE_selection(t){var d=document,div,range,stored_range,elem,scrollTop,relative_top,line_start,line_nb,range_start,range_end,tab;if(t&&t.focused){if(!t.ea_line_height){div=d.createElement("div");div.style.fontFamily=get_css_property(t,"font-family");div.style.fontSize=get_css_property(t,"font-size");div.style.visibility="hidden";div.innerHTML="0";d.body.appendChild(div);t.ea_line_height=div.offsetHeight;d.body.removeChild(div);}range=d.selection.createRange();try{stored_range=range.duplicate();stored_range.moveToElementText(t);stored_range.setEndPoint('EndToEnd',range);if(stored_range.parentElement()==t){elem=t;scrollTop=0;while(elem.parentNode){scrollTop+=elem.scrollTop;elem=elem.parentNode;}relative_top=range.offsetTop-calculeOffsetTop(t)+scrollTop;line_start=Math.round((relative_top / t.ea_line_height)+1);line_nb=Math.round(range.boundingHeight / t.ea_line_height);range_start=stored_range.text.length-range.text.length;tab=t.value.substr(0,range_start).split("\n");range_start+=(line_start-tab.length)*2;t.selectionStart=range_start;range_end=t.selectionStart+range.text.length;tab=t.value.substr(0,range_start+range.text.length).split("\n");range_end+=(line_start+line_nb-1-tab.length)*2;t.selectionEnd=range_end;}}catch(e){}}setTimeout("get_IE_selection(document.getElementById('"+t.id+"'));",50);};function IE_textarea_focus(){event.srcElement.focused=true;}function IE_textarea_blur(){event.srcElement.focused=false;}function set_IE_selection(t){var nbLineStart,nbLineStart,nbLineEnd,range;if(!window.closed){nbLineStart=t.value.substr(0,t.selectionStart).split("\n").length-1;nbLineEnd=t.value.substr(0,t.selectionEnd).split("\n").length-1;try{range=document.selection.createRange();range.moveToElementText(t);range.setEndPoint('EndToStart',range);range.moveStart('character',t.selectionStart-nbLineStart);range.moveEnd('character',t.selectionEnd-nbLineEnd-(t.selectionStart-nbLineStart));range.select();}catch(e){}}};eAL.waiting_loading["elements_functions.js"]="loaded";
 EAL.prototype.start_resize_area=function(){var d=document,a,div,width,height,father;d.onmouseup=eAL.end_resize_area;d.onmousemove=eAL.resize_area;eAL.toggle(eAL.resize["id"]);a=eAs[eAL.resize["id"]]["textarea"];div=d.getElementById("edit_area_resize");if(!div){div=d.createElement("div");div.id="edit_area_resize";div.style.border="dashed #888888 1px";}width=a.offsetWidth-2;height=a.offsetHeight-2;div.style.display="block";div.style.width=width+"px";div.style.height=height+"px";father=a.parentNode;father.insertBefore(div,a);a.style.display="none";eAL.resize["start_top"]=calculeOffsetTop(div);eAL.resize["start_left"]=calculeOffsetLeft(div);};EAL.prototype.end_resize_area=function(e){var d=document,div,a,width,height;d.onmouseup="";d.onmousemove="";div=d.getElementById("edit_area_resize");a=eAs[eAL.resize["id"]]["textarea"];width=Math.max(eAs[eAL.resize["id"]]["settings"]["min_width"],div.offsetWidth-4);height=Math.max(eAs[eAL.resize["id"]]["settings"]["min_height"],div.offsetHeight-4);if(eAL.isIE==6){width-=2;height-=2;}a.style.width=width+"px";a.style.height=height+"px";div.style.display="none";a.style.display="inline";a.selectionStart=eAL.resize["selectionStart"];a.selectionEnd=eAL.resize["selectionEnd"];eAL.toggle(eAL.resize["id"]);return false;};EAL.prototype.resize_area=function(e){var allow,newHeight,newWidth;allow=eAs[eAL.resize["id"]]["settings"]["allow_resize"];if(allow=="both"||allow=="y"){newHeight=Math.max(20,getMouseY(e)-eAL.resize["start_top"]);document.getElementById("edit_area_resize").style.height=newHeight+"px";}if(allow=="both"||allow=="x"){newWidth=Math.max(20,getMouseX(e)-eAL.resize["start_left"]);document.getElementById("edit_area_resize").style.width=newWidth+"px";}return false;};eAL.waiting_loading["resize_area.js"]="loaded";
	EAL.prototype.get_regexp=function(text_array){res="(\\b)(";for(i=0;i<text_array.length;i++){if(i>0)res+="|";res+=this.get_escaped_regexp(text_array[i]);}res+=")(\\b)";reg=new RegExp(res);return res;};EAL.prototype.get_escaped_regexp=function(str){return str.toString().replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\}|\{|\$|\^|\|)/g,"\\$1");};EAL.prototype.init_syntax_regexp=function(){var lang_style={};for(var lang in this.load_syntax){if(!this.syntax[lang]){this.syntax[lang]={};this.syntax[lang]["keywords_reg_exp"]={};this.keywords_reg_exp_nb=0;if(this.load_syntax[lang]['KEYWORDS']){param="g";if(this.load_syntax[lang]['KEYWORD_CASE_SENSITIVE']===false)param+="i";for(var i in this.load_syntax[lang]['KEYWORDS']){if(typeof(this.load_syntax[lang]['KEYWORDS'][i])=="function")continue;this.syntax[lang]["keywords_reg_exp"][i]=new RegExp(this.get_regexp(this.load_syntax[lang]['KEYWORDS'][i]),param);this.keywords_reg_exp_nb++;}}if(this.load_syntax[lang]['OPERATORS']){var str="";var nb=0;for(var i in this.load_syntax[lang]['OPERATORS']){if(typeof(this.load_syntax[lang]['OPERATORS'][i])=="function")continue;if(nb>0)str+="|";str+=this.get_escaped_regexp(this.load_syntax[lang]['OPERATORS'][i]);nb++;}if(str.length>0)this.syntax[lang]["operators_reg_exp"]=new RegExp("("+str+")","g");}if(this.load_syntax[lang]['DELIMITERS']){var str="";var nb=0;for(var i in this.load_syntax[lang]['DELIMITERS']){if(typeof(this.load_syntax[lang]['DELIMITERS'][i])=="function")continue;if(nb>0)str+="|";str+=this.get_escaped_regexp(this.load_syntax[lang]['DELIMITERS'][i]);nb++;}if(str.length>0)this.syntax[lang]["delimiters_reg_exp"]=new RegExp("("+str+")","g");}var syntax_trace=[];this.syntax[lang]["quotes"]={};var quote_tab=[];if(this.load_syntax[lang]['QUOTEMARKS']){for(var i in this.load_syntax[lang]['QUOTEMARKS']){if(typeof(this.load_syntax[lang]['QUOTEMARKS'][i])=="function")continue;var x=this.get_escaped_regexp(this.load_syntax[lang]['QUOTEMARKS'][i]);this.syntax[lang]["quotes"][x]=x;quote_tab[quote_tab.length]="("+x+"(\\\\.|[^"+x+"])*(?:"+x+"|$))";syntax_trace.push(x);}}this.syntax[lang]["comments"]={};if(this.load_syntax[lang]['COMMENT_SINGLE']){for(var i in this.load_syntax[lang]['COMMENT_SINGLE']){if(typeof(this.load_syntax[lang]['COMMENT_SINGLE'][i])=="function")continue;var x=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_SINGLE'][i]);quote_tab[quote_tab.length]="("+x+"(.|\\r|\\t)*(\\n|$))";syntax_trace.push(x);this.syntax[lang]["comments"][x]="\n";}}if(this.load_syntax[lang]['COMMENT_MULTI']){for(var i in this.load_syntax[lang]['COMMENT_MULTI']){if(typeof(this.load_syntax[lang]['COMMENT_MULTI'][i])=="function")continue;var start=this.get_escaped_regexp(i);var end=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_MULTI'][i]);quote_tab[quote_tab.length]="("+start+"(.|\\n|\\r)*?("+end+"|$))";syntax_trace.push(start);syntax_trace.push(end);this.syntax[lang]["comments"][i]=this.load_syntax[lang]['COMMENT_MULTI'][i];}}if(quote_tab.length>0)this.syntax[lang]["comment_or_quote_reg_exp"]=new RegExp("("+quote_tab.join("|")+")","gi");if(syntax_trace.length>0)this.syntax[lang]["syntax_trace_regexp"]=new RegExp("((.|\n)*?)(\\\\*("+syntax_trace.join("|")+"|$))","gmi");if(this.load_syntax[lang]['SCRIPT_DELIMITERS']){this.syntax[lang]["script_delimiters"]={};for(var i in this.load_syntax[lang]['SCRIPT_DELIMITERS']){if(typeof(this.load_syntax[lang]['SCRIPT_DELIMITERS'][i])=="function")continue;this.syntax[lang]["script_delimiters"][i]=this.load_syntax[lang]['SCRIPT_DELIMITERS'];}}this.syntax[lang]["custom_regexp"]={};if(this.load_syntax[lang]['REGEXPS']){for(var i in this.load_syntax[lang]['REGEXPS']){if(typeof(this.load_syntax[lang]['REGEXPS'][i])=="function")continue;var val=this.load_syntax[lang]['REGEXPS'][i];if(!this.syntax[lang]["custom_regexp"][val['execute']])this.syntax[lang]["custom_regexp"][val['execute']]={};this.syntax[lang]["custom_regexp"][val['execute']][i]={'regexp':new RegExp(val['search'],val['modifiers']),'class':val['class']};}}if(this.load_syntax[lang]['STYLES']){lang_style[lang]={};for(var i in this.load_syntax[lang]['STYLES']){if(typeof(this.load_syntax[lang]['STYLES'][i])=="function")continue;if(typeof(this.load_syntax[lang]['STYLES'][i])!="string"){for(var j in this.load_syntax[lang]['STYLES'][i]){lang_style[lang][j]=this.load_syntax[lang]['STYLES'][i][j];}}
else{lang_style[lang][i]=this.load_syntax[lang]['STYLES'][i];}}}var style="";for(var i in lang_style[lang]){if(lang_style[lang][i].length>0){style+="."+lang+" ."+i.toLowerCase()+" span{"+lang_style[lang][i]+"}\n";style+="."+lang+" ."+i.toLowerCase()+"{"+lang_style[lang][i]+"}\n";}}this.syntax[lang]["styles"]=style;}}};eAL.waiting_loading["reg_syntax.js"]="loaded";
var editAreaLoader= eAL;var editAreas=eAs;EditAreaLoader=EAL;editAreaLoader.iframe_script= "<script type='text/javascript'> Ã EA(){var t=Á;t.error=Ì;t.inlinePopup=[{popup_id:\"area_search_replace\",icon_id:\"search\"},{popup_id:\"edit_area_help\",icon_id:\"help\"}];t.plugins={};t.line_number=0;È.eAL.set_browser_infos(t);if(t.isIE >=8)t.isIE=7;t.É={};t.last_text_to_highlight=\"\";t.last_hightlighted_text=\"\";t.syntax_list=[];t.allready_used_syntax={};t.check_line_selection_timer=50;t.ÂFocused=Ì;t.highlight_selection_line=null;t.previous=[];t.next=[];t.last_undo=\"\";t.files={};t.filesIdAssoc={};t.curr_file='';t.assocBracket={};t.revertAssocBracket={};t.assocBracket[\"(\"]=\")\";t.assocBracket[\"{\"]=\"}\";t.assocBracket[\"[\"]=\"]\";for(var index in t.assocBracket){t.revertAssocBracket[t.assocBracket[index]]=index;}t.is_editable=Ë;t.lineHeight=16;t.tab_nb_char=8;if(t.isOpera)t.tab_nb_char=6;t.is_tabbing=Ì;t.fullscreen={'isFull':Ì};t.isResizing=Ì;t.id=area_id;t.Å=eAs[t.id][\"Å\"];if((\"\"+t.Å['replace_tab_by_spaces']).match(/^[0-9]+$/)){t.tab_nb_char=t.Å['replace_tab_by_spaces'];t.tabulation=\"\";for(var i=0;i<t.tab_nb_char;i++)t.tabulation+=\" \";}\nelse{t.tabulation=\"\t\";}if(t.Å[\"syntax_selection_allow\"]&&t.Å[\"syntax_selection_allow\"].Æ>0)t.syntax_list=t.Å[\"syntax_selection_allow\"].replace(/ /g,\"\").split(\",\");if(t.Å['syntax'])t.allready_used_syntax[t.Å['syntax']]=Ë;};EA.Ä.init=Ã(){var t=Á,a,s=t.Å;t.Â=_$(\"Â\");t.container=_$(\"container\");t.result=_$(\"result\");t.content_highlight=_$(\"content_highlight\");t.selection_field=_$(\"selection_field\");t.selection_field_text=_$(\"selection_field_text\");t.processing_screen=_$(\"processing\");t.editor_area=_$(\"editor\");t.tab_browsing_area=_$(\"tab_browsing_area\");t.test_font_size=_$(\"test_font_size\");a=t.Â;if(!s['is_editable'])t.set_editable(Ì);t.set_show_line_colors(s['show_line_colors']);if(syntax_selec=_$(\"syntax_selection\")){for(var i=0;i<t.syntax_list.Æ;i++){var syntax=t.syntax_list[i];var option=document.createElement(\"option\");option.Ê=syntax;if(syntax==s['syntax'])option.selected=\"selected\";option.innerHTML=t.get_translation(\"syntax_\"+syntax,\"word\");syntax_selec.appendChild(option);}}spans=È.getChildren(_$(\"toolbar_1\"),\"span\",\"\",\"\",\"all\",-1);for(var i=0;i<spans.Æ;i++){id=spans[i].id.replace(/tmp_tool_(.*)/,\"$1\");if(id!=spans[i].id){for(var j in t.plugins){if(typeof(t.plugins[j].get_control_html)==\"Ã\"){html=t.plugins[j].get_control_html(id);if(html!=Ì){html=t.get_translation(html,\"template\");var new_span=document.createElement(\"span\");new_span.innerHTML=html;var father=spans[i].ÈNode;spans[i].ÈNode.replaceChild(new_span,spans[i]);break;}}}}}if(s[\"debug\"]){t.debug=È.document.getElementById(\"edit_area_debug_\"+t.id);}if(_$(\"redo\")!=null)t.switchClassSticky(_$(\"redo\"),'editAreaButtonDisabled',Ë);if(typeof(È.eAL.syntax[s[\"syntax\"]])!=\"undefined\"){for(var i in È.eAL.syntax){if(typeof(È.eAL.syntax[i][\"Çs\"])!=\"undefined\"){t.add_Ç(È.eAL.syntax[i][\"Çs\"]);}}}if(t.isOpera)_$(\"editor\").onkeypress=keyDown;\nelse _$(\"editor\").onkeydown=keyDown;for(var i=0;i<t.inlinePopup.Æ;i++){if(t.isOpera)_$(t.inlinePopup[i][\"popup_id\"]).onkeypress=keyDown;\nelse _$(t.inlinePopup[i][\"popup_id\"]).onkeydown=keyDown;}if(s[\"allow_resize\"]==\"both\"||s[\"allow_resize\"]==\"x\"||s[\"allow_resize\"]==\"y\")t.allow_resize(Ë);È.eAL.toggle(t.id,\"on\");t.change_smooth_selection_mode(eA.smooth_selection);t.execCommand(\"change_highlight\",s[\"start_highlight\"]);t.set_font(eA.Å[\"font_family\"],eA.Å[\"font_size\"]);children=È.getChildren(document.body,\"\",\"selec\",\"none\",\"all\",-1);for(var i=0;i<children.Æ;i++){if(t.isIE)children[i].unselectable=Ë;\nelse children[i].onmousedown=Ã(){return Ì};}a.spellcheck=s[\"gecko_spellcheck\"];if(t.isFirefox >='3'){t.content_highlight.Ç.paddingLeft=\"1px\";t.selection_field.Ç.paddingLeft=\"1px\";t.selection_field_text.Ç.paddingLeft=\"1px\";}if(t.isIE&&t.isIE < 8){a.Ç.marginTop=\"-1px\";}if(t.isSafari){t.editor_area.Ç.position=\"absolute\";a.Ç.marginLeft=\"-3px\";if(t.isSafari < 3.2)a.Ç.marginTop=\"1px\";}È.eAL.add_event(t.result,\"click\",Ã(e){if((e.target||e.srcElement)==eA.result){eA.area_select(eA.Â.Ê.Æ,0);}});if(s['is_multi_files']!=Ì)t.open_file({'id':t.curr_file,'text':''});t.set_word_wrap(s['word_wrap']);setTimeout(\"eA.focus();eA.manage_size();eA.execCommand('EA_load');\",10);t.check_undo();t.check_line_selection(Ë);t.scroll_to_view();for(var i in t.plugins){if(typeof(t.plugins[i].onload)==\"Ã\")t.plugins[i].onload();}if(s['fullscreen']==Ë)t.toggle_full_screen(Ë);È.eAL.add_event(window,\"resize\",eA.update_size);È.eAL.add_event(È.window,\"resize\",eA.update_size);È.eAL.add_event(top.window,\"resize\",eA.update_size);È.eAL.add_event(window,\"unload\",Ã(){if(È.eAL){È.eAL.remove_event(È.window,\"resize\",eA.update_size);È.eAL.remove_event(top.window,\"resize\",eA.update_size);}if(eAs[eA.id]&&eAs[eA.id][\"displayed\"]){eA.execCommand(\"EA_unload\");}});};EA.Ä.update_size=Ã(){var d=document,pd=È.document,height,width,popup,maxLeft,maxTop;if(typeof eAs !='undefined'&&eAs[eA.id]&&eAs[eA.id][\"displayed\"]==Ë){if(eA.fullscreen['isFull']){pd.getElementById(\"frame_\"+eA.id).Ç.width=pd.getElementsByTagName(\"html\")[0].clientWidth+\"px\";pd.getElementById(\"frame_\"+eA.id).Ç.height=pd.getElementsByTagName(\"html\")[0].clientHeight+\"px\";}if(eA.tab_browsing_area.Ç.display=='block'&&(!eA.isIE||eA.isIE >=8)){eA.tab_browsing_area.Ç.height=\"0px\";eA.tab_browsing_area.Ç.height=(eA.result.offsetTop-eA.tab_browsing_area.offsetTop-1)+\"px\";}height=d.body.offsetHeight-eA.get_all_toolbar_height()-4;eA.result.Ç.height=height+\"px\";width=d.body.offsetWidth-2;eA.result.Ç.width=width+\"px\";for(i=0;i < eA.inlinePopup.Æ;i++){popup=_$(eA.inlinePopup[i][\"popup_id\"]);maxLeft=d.body.offsetWidth-popup.offsetWidth;maxTop=d.body.offsetHeight-popup.offsetHeight;if(popup.offsetTop > maxTop)popup.Ç.top=maxTop+\"px\";if(popup.offsetLeft > maxLeft)popup.Ç.left=maxLeft+\"px\";}eA.manage_size(Ë);eA.fixLinesHeight(eA.Â.Ê,0,-1);}};EA.Ä.manage_size=Ã(onlyOneTime){if(!eAs[Á.id])return Ì;if(eAs[Á.id][\"displayed\"]==Ë&&Á.ÂFocused){var area_height,resized=Ì;if(!Á.Å['word_wrap']){var area_width=Á.Â.scrollWidth;area_height=Á.Â.scrollHeight;if(Á.isOpera&&Á.isOpera < 9.6){area_width=10000;}if(Á.Â.previous_scrollWidth!=area_width){Á.container.Ç.width=area_width+\"px\";Á.Â.Ç.width=area_width+\"px\";Á.content_highlight.Ç.width=area_width+\"px\";Á.Â.previous_scrollWidth=area_width;resized=Ë;}}if(Á.Å['word_wrap']){newW=Á.Â.offsetWidth;if(Á.isFirefox||Á.isIE)newW-=2;if(Á.isSafari)newW-=6;Á.content_highlight.Ç.width=Á.selection_field_text.Ç.width=Á.selection_field.Ç.width=Á.test_font_size.Ç.width=newW+\"px\";}if(Á.isOpera||Á.isFirefox||Á.isSafari){area_height=Á.getLinePosTop(Á.É[\"nb_line\"]+1);}\nelse{area_height=Á.Â.scrollHeight;}if(Á.Â.previous_scrollHeight!=area_height){Á.container.Ç.height=(area_height+2)+\"px\";Á.Â.Ç.height=area_height+\"px\";Á.content_highlight.Ç.height=area_height+\"px\";Á.Â.previous_scrollHeight=area_height;resized=Ë;}if(Á.É[\"nb_line\"] >=Á.line_number){var newLines='',destDiv=_$(\"line_number\"),start=Á.line_number,end=Á.É[\"nb_line\"]+100;for(i=start+1;i < end;i++){newLines+='<div id=\"line_'+i+'\">'+i+\"</div>\";Á.line_number++;}destDiv.innerHTML=destDiv.innerHTML+newLines;Á.fixLinesHeight(Á.Â.Ê,start,-1);}Á.Â.scrollTop=\"0px\";Á.Â.scrollLeft=\"0px\";if(resized==Ë){Á.scroll_to_view();}}if(!onlyOneTime)setTimeout(\"eA.manage_size();\",100);};EA.Ä.execCommand=Ã(cmd,param){for(var i in Á.plugins){if(typeof(Á.plugins[i].execCommand)==\"Ã\"){if(!Á.plugins[i].execCommand(cmd,param))return;}}switch(cmd){case \"save\":if(Á.Å[\"save_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"save_callback\"]+\"('\"+Á.id+\"',eA.Â.Ê);\");break;case \"load\":if(Á.Å[\"load_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"load_callback\"]+\"('\"+Á.id+\"');\");break;case \"onchange\":if(Á.Å[\"change_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"change_callback\"]+\"('\"+Á.id+\"');\");break;case \"EA_load\":if(Á.Å[\"EA_load_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_load_callback\"]+\"('\"+Á.id+\"');\");break;case \"EA_unload\":if(Á.Å[\"EA_unload_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_unload_callback\"]+\"('\"+Á.id+\"');\");break;case \"toggle_on\":if(Á.Å[\"EA_toggle_on_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_toggle_on_callback\"]+\"('\"+Á.id+\"');\");break;case \"toggle_off\":if(Á.Å[\"EA_toggle_off_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_toggle_off_callback\"]+\"('\"+Á.id+\"');\");break;case \"re_sync\":if(!Á.do_highlight)break;case \"file_switch_on\":if(Á.Å[\"EA_file_switch_on_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_file_switch_on_callback\"]+\"(param);\");break;case \"file_switch_off\":if(Á.Å[\"EA_file_switch_off_callback\"].Æ>0)eval(\"È.\"+Á.Å[\"EA_file_switch_off_callback\"]+\"(param);\");break;case \"file_close\":if(Á.Å[\"EA_file_close_callback\"].Æ>0)return eval(\"È.\"+Á.Å[\"EA_file_close_callback\"]+\"(param);\");break;default:if(typeof(eval(\"eA.\"+cmd))==\"Ã\"){if(Á.Å[\"debug\"])eval(\"eA.\"+cmd+\"(param);\");\nelse try{eval(\"eA.\"+cmd+\"(param);\");}catch(e){};}}};EA.Ä.get_translation=Ã(word,mode){if(mode==\"template\")return È.eAL.translate(word,Á.Å[\"language\"],mode);\nelse return È.eAL.get_word_translation(word,Á.Å[\"language\"]);};EA.Ä.add_plugin=Ã(plug_name,plug_obj){for(var i=0;i<Á.Å[\"plugins\"].Æ;i++){if(Á.Å[\"plugins\"][i]==plug_name){Á.plugins[plug_name]=plug_obj;plug_obj.baseURL=È.eAL.baseURL+\"plugins/\"+plug_name+\"/\";if(typeof(plug_obj.init)==\"Ã\")plug_obj.init();}}};EA.Ä.load_css=Ã(url){try{link=document.createElement(\"link\");link.type=\"text/css\";link.rel=\"Çsheet\";link.media=\"all\";link.href=url;head=document.getElementsByTagName(\"head\");head[0].appendChild(link);}catch(e){document.write(\"<link href='\"+url+\"' rel='Çsheet' type='text/css' />\");}};EA.Ä.load_script=Ã(url){try{script=document.createElement(\"script\");script.type=\"text/javascript\";script.src=url;script.charset=\"UTF-8\";head=document.getElementsByTagName(\"head\");head[0].appendChild(script);}catch(e){document.write(\"<script type='text/javascript' src='\"+url+\"' charset=\\\"UTF-8\\\"><\"+\"/script>\");}};EA.Ä.add_lang=Ã(language,Ês){if(!È.eAL.lang[language])È.eAL.lang[language]={};for(var i in Ês)È.eAL.lang[language][i]=Ês[i];};Ã _$(id){return document.getElementById(id);};var eA=new EA();È.eAL.add_event(window,\"load\",init);Ã init(){setTimeout(\"eA.init();\",10);};	EA.Ä.focus=Ã(){Á.Â.focus();Á.ÂFocused=Ë;};EA.Ä.check_line_selection=Ã(timer_checkup){var changes,infos,new_top,new_width,i;var t1=t2=t2_1=t3=tLines=tend=new Date().getTime();if(!eAs[Á.id])return Ì;if(!Á.smooth_selection&&!Á.do_highlight){}\nelse if(Á.ÂFocused&&eAs[Á.id][\"displayed\"]==Ë&&Á.isResizing==Ì){infos=Á.get_selection_infos();changes=Á.checkTextEvolution(typeof(Á.É['full_text'])=='undefined' ? '':Á.É['full_text'],infos['full_text']);t2=new Date().getTime();if(Á.É[\"line_start\"] !=infos[\"line_start\"]||Á.É[\"line_nb\"] !=infos[\"line_nb\"]||infos[\"full_text\"] !=Á.É[\"full_text\"]||Á.reload_highlight||Á.É[\"selectionStart\"] !=infos[\"selectionStart\"]||Á.É[\"selectionEnd\"] !=infos[\"selectionEnd\"]||!timer_checkup){new_top=Á.getLinePosTop(infos[\"line_start\"]);new_width=Math.max(Á.Â.scrollWidth,Á.container.clientWidth-50);Á.selection_field.Ç.top=Á.selection_field_text.Ç.top=new_top+\"px\";if(!Á.Å['word_wrap']){Á.selection_field.Ç.width=Á.selection_field_text.Ç.width=Á.test_font_size.Ç.width=new_width+\"px\";}if(Á.do_highlight==Ë){var curr_text=infos[\"full_text\"].split(\"\\n\");var content=\"\";var start=Math.max(0,infos[\"line_start\"]-1);var end=Math.min(curr_text.Æ,infos[\"line_start\"]+infos[\"line_nb\"]-1);for(i=start;i< end;i++){content+=curr_text[i]+\"\\n\";}selLength=infos['selectionEnd']-infos['selectionStart'];content=content.substr(0,infos[\"curr_pos\"]-1)+\"\\r\\r\"+content.substr(infos[\"curr_pos\"]-1,selLength)+\"\\r\\r\"+content.substr(infos[\"curr_pos\"]-1+selLength);content='<span>'+content.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(\"\\r\\r\",'</span><strong>').replace(\"\\r\\r\",'</strong><span>')+'</span>';if(Á.isIE||(Á.isOpera&&Á.isOpera < 9.6)){Á.selection_field.innerHTML=\"<pre>\"+content.replace(/^\\r?\\n/,\"<br>\")+\"</pre>\";}\nelse{Á.selection_field.innerHTML=content;}Á.selection_field_text.innerHTML=Á.selection_field.innerHTML;t2_1=new Date().getTime();if(Á.reload_highlight||(infos[\"full_text\"] !=Á.last_text_to_highlight&&(Á.É[\"line_start\"]!=infos[\"line_start\"]||Á.show_line_colors||Á.Å['word_wrap']||Á.É[\"line_nb\"]!=infos[\"line_nb\"]||Á.É[\"nb_line\"]!=infos[\"nb_line\"]))){Á.maj_highlight(infos);}}}t3=new Date().getTime();if(Á.Å['word_wrap']&&infos[\"full_text\"] !=Á.É[\"full_text\"]){if(changes.newText.split(\"\\n\").Æ==1&&Á.É['nb_line']&&infos['nb_line']==Á.É['nb_line']){Á.fixLinesHeight(infos['full_text'],changes.lineStart,changes.lineStart);}\nelse{Á.fixLinesHeight(infos['full_text'],changes.lineStart,-1);}}tLines=new Date().getTime();if(infos[\"line_start\"] !=Á.É[\"line_start\"]||infos[\"curr_pos\"] !=Á.É[\"curr_pos\"]||infos[\"full_text\"].Æ!=Á.É[\"full_text\"].Æ||Á.reload_highlight||!timer_checkup){var selec_char=infos[\"curr_line\"].charAt(infos[\"curr_pos\"]-1);var no_real_move=Ë;if(infos[\"line_nb\"]==1&&(Á.assocBracket[selec_char]||Á.revertAssocBracket[selec_char])){no_real_move=Ì;if(Á.findEndBracket(infos,selec_char)===Ë){_$(\"end_bracket\").Ç.visibility=\"visible\";_$(\"cursor_pos\").Ç.visibility=\"visible\";_$(\"cursor_pos\").innerHTML=selec_char;_$(\"end_bracket\").innerHTML=(Á.assocBracket[selec_char]||Á.revertAssocBracket[selec_char]);}\nelse{_$(\"end_bracket\").Ç.visibility=\"hidden\";_$(\"cursor_pos\").Ç.visibility=\"hidden\";}}\nelse{_$(\"cursor_pos\").Ç.visibility=\"hidden\";_$(\"end_bracket\").Ç.visibility=\"hidden\";}Á.displayToCursorPosition(\"cursor_pos\",infos[\"line_start\"],infos[\"curr_pos\"]-1,infos[\"curr_line\"],no_real_move);if(infos[\"line_nb\"]==1&&infos[\"line_start\"]!=Á.É[\"line_start\"])Á.scroll_to_view();}Á.É=infos;}tend=new Date().getTime();if(timer_checkup){setTimeout(\"eA.check_line_selection(Ë)\",Á.check_line_selection_timer);}};EA.Ä.get_selection_infos=Ã(){var sel={},start,end,len,str;Á.getIESelection();start=Á.Â.selectionStart;end=Á.Â.selectionEnd;if(Á.É[\"selectionStart\"]==start&&Á.É[\"selectionEnd\"]==end&&Á.É[\"full_text\"]==Á.Â.Ê){return Á.É;}if(Á.tabulation!=\"\t\"&&Á.Â.Ê.indexOf(\"\t\")!=-1){len=Á.Â.Ê.Æ;Á.Â.Ê=Á.replace_tab(Á.Â.Ê);start=end=start+(Á.Â.Ê.Æ-len);Á.area_select(start,0);}sel[\"selectionStart\"]=start;sel[\"selectionEnd\"]=end;sel[\"full_text\"]=Á.Â.Ê;sel[\"line_start\"]=1;sel[\"line_nb\"]=1;sel[\"curr_pos\"]=0;sel[\"curr_line\"]=\"\";sel[\"indexOfCursor\"]=0;sel[\"selec_direction\"]=Á.É[\"selec_direction\"];var splitTab=sel[\"full_text\"].split(\"\\n\");var nbLine=Math.max(0,splitTab.Æ);var nbChar=Math.max(0,sel[\"full_text\"].Æ-(nbLine-1));if(sel[\"full_text\"].indexOf(\"\\r\")!=-1)nbChar=nbChar-(nbLine-1);sel[\"nb_line\"]=nbLine;sel[\"nb_char\"]=nbChar;if(start>0){str=sel[\"full_text\"].substr(0,start);sel[\"curr_pos\"]=start-str.lastIndexOf(\"\\n\");sel[\"line_start\"]=Math.max(1,str.split(\"\\n\").Æ);}\nelse{sel[\"curr_pos\"]=1;}if(end>start){sel[\"line_nb\"]=sel[\"full_text\"].substring(start,end).split(\"\\n\").Æ;}sel[\"indexOfCursor\"]=start;sel[\"curr_line\"]=splitTab[Math.max(0,sel[\"line_start\"]-1)];if(sel[\"selectionStart\"]==Á.É[\"selectionStart\"]){if(sel[\"selectionEnd\"]>Á.É[\"selectionEnd\"])sel[\"selec_direction\"]=\"down\";\nelse if(sel[\"selectionEnd\"]==Á.É[\"selectionStart\"])sel[\"selec_direction\"]=Á.É[\"selec_direction\"];}\nelse if(sel[\"selectionStart\"]==Á.É[\"selectionEnd\"]&&sel[\"selectionEnd\"]>Á.É[\"selectionEnd\"]){sel[\"selec_direction\"]=\"down\";}\nelse{sel[\"selec_direction\"]=\"up\";}_$(\"nbLine\").innerHTML=nbLine;_$(\"nbChar\").innerHTML=nbChar;_$(\"linePos\").innerHTML=sel[\"line_start\"];_$(\"currPos\").innerHTML=sel[\"curr_pos\"];return sel;};EA.Ä.getIESelection=Ã(){var selectionStart,selectionEnd,range,stored_range;if(!Á.isIE)return Ì;if(Á.Å['word_wrap'])Á.Â.wrap='off';try{range=document.selection.createRange();stored_range=range.duplicate();stored_range.moveToElementText(Á.Â);stored_range.setEndPoint('EndToEnd',range);if(stored_range.ÈElement()!=Á.Â)throw \"invalid focus\";var scrollTop=Á.result.scrollTop+document.body.scrollTop;var relative_top=range.offsetTop-È.calculeOffsetTop(Á.Â)+scrollTop;var line_start=Math.round((relative_top / Á.lineHeight)+1);var line_nb=Math.round(range.boundingHeight / Á.lineHeight);selectionStart=stored_range.text.Æ-range.text.Æ;selectionStart+=(line_start-Á.Â.Ê.substr(0,selectionStart).split(\"\\n\").Æ)*2;selectionStart-=(line_start-Á.Â.Ê.substr(0,selectionStart).split(\"\\n\").Æ)* 2;selectionEnd=selectionStart+range.text.Æ;selectionEnd+=(line_start+line_nb-1-Á.Â.Ê.substr(0,selectionEnd).split(\"\\n\").Æ)*2;Á.Â.selectionStart=selectionStart;Á.Â.selectionEnd=selectionEnd;}catch(e){}if(Á.Å['word_wrap'])Á.Â.wrap='soft';};EA.Ä.setIESelection=Ã(){var a=Á.Â,nbLineStart,nbLineEnd,range;if(!Á.isIE)return Ì;nbLineStart=a.Ê.substr(0,a.selectionStart).split(\"\\n\").Æ-1;nbLineEnd=a.Ê.substr(0,a.selectionEnd).split(\"\\n\").Æ-1;range=document.selection.createRange();range.moveToElementText(a);range.setEndPoint('EndToStart',range);range.moveStart('character',a.selectionStart-nbLineStart);range.moveEnd('character',a.selectionEnd-nbLineEnd-(a.selectionStart-nbLineStart));range.select();};EA.Ä.checkTextEvolution=Ã(lastText,newText){var ch={},baseStep=200,cpt=0,end,step,tStart=new Date().getTime();end=Math.min(newText.Æ,lastText.Æ);step=baseStep;while(cpt<end&&step>=1){if(lastText.substr(cpt,step)==newText.substr(cpt,step)){cpt+=step;}\nelse{step=Math.floor(step/2);}}ch.posStart=cpt;ch.lineStart=newText.substr(0,ch.posStart).split(\"\\n\").Æ-1;cpt_last=lastText.Æ;cpt=newText.Æ;step=baseStep;while(cpt>=0&&cpt_last>=0&&step>=1){if(lastText.substr(cpt_last-step,step)==newText.substr(cpt-step,step)){cpt-=step;cpt_last-=step;}\nelse{step=Math.floor(step/2);}}ch.posNewEnd=cpt;ch.posLastEnd=cpt_last;if(ch.posNewEnd<=ch.posStart){if(lastText.Æ < newText.Æ){ch.posNewEnd=ch.posStart+newText.Æ-lastText.Æ;ch.posLastEnd=ch.posStart;}\nelse{ch.posLastEnd=ch.posStart+lastText.Æ-newText.Æ;ch.posNewEnd=ch.posStart;}}ch.newText=newText.substring(ch.posStart,ch.posNewEnd);ch.lastText=lastText.substring(ch.posStart,ch.posLastEnd);ch.lineNewEnd=newText.substr(0,ch.posNewEnd).split(\"\\n\").Æ-1;ch.lineLastEnd=lastText.substr(0,ch.posLastEnd).split(\"\\n\").Æ-1;ch.newTextLine=newText.split(\"\\n\").slice(ch.lineStart,ch.lineNewEnd+1).join(\"\\n\");ch.lastTextLine=lastText.split(\"\\n\").slice(ch.lineStart,ch.lineLastEnd+1).join(\"\\n\");return ch;};EA.Ä.tab_selection=Ã(){if(Á.is_tabbing)return;Á.is_tabbing=Ë;Á.getIESelection();var start=Á.Â.selectionStart;var end=Á.Â.selectionEnd;var insText=Á.Â.Ê.substring(start,end);var pos_start=start;var pos_end=end;if(insText.Æ==0){Á.Â.Ê=Á.Â.Ê.substr(0,start)+Á.tabulation+Á.Â.Ê.substr(end);pos_start=start+Á.tabulation.Æ;pos_end=pos_start;}\nelse{start=Math.max(0,Á.Â.Ê.substr(0,start).lastIndexOf(\"\\n\")+1);endText=Á.Â.Ê.substr(end);startText=Á.Â.Ê.substr(0,start);tmp=Á.Â.Ê.substring(start,end).split(\"\\n\");insText=Á.tabulation+tmp.join(\"\\n\"+Á.tabulation);Á.Â.Ê=startText+insText+endText;pos_start=start;pos_end=Á.Â.Ê.indexOf(\"\\n\",startText.Æ+insText.Æ);if(pos_end==-1)pos_end=Á.Â.Ê.Æ;}Á.Â.selectionStart=pos_start;Á.Â.selectionEnd=pos_end;if(Á.isIE){Á.setIESelection();setTimeout(\"eA.is_tabbing=Ì;\",100);}\nelse{Á.is_tabbing=Ì;}};EA.Ä.invert_tab_selection=Ã(){var t=Á,a=Á.Â;if(t.is_tabbing)return;t.is_tabbing=Ë;t.getIESelection();var start=a.selectionStart;var end=a.selectionEnd;var insText=a.Ê.substring(start,end);var pos_start=start;var pos_end=end;if(insText.Æ==0){if(a.Ê.substring(start-t.tabulation.Æ,start)==t.tabulation){a.Ê=a.Ê.substr(0,start-t.tabulation.Æ)+a.Ê.substr(end);pos_start=Math.max(0,start-t.tabulation.Æ);pos_end=pos_start;}}\nelse{start=a.Ê.substr(0,start).lastIndexOf(\"\\n\")+1;endText=a.Ê.substr(end);startText=a.Ê.substr(0,start);tmp=a.Ê.substring(start,end).split(\"\\n\");insText=\"\";for(i=0;i<tmp.Æ;i++){for(j=0;j<t.tab_nb_char;j++){if(tmp[i].charAt(0)==\"\t\"){tmp[i]=tmp[i].substr(1);j=t.tab_nb_char;}\nelse if(tmp[i].charAt(0)==\" \")tmp[i]=tmp[i].substr(1);}insText+=tmp[i];if(i<tmp.Æ-1)insText+=\"\\n\";}a.Ê=startText+insText+endText;pos_start=start;pos_end=a.Ê.indexOf(\"\\n\",startText.Æ+insText.Æ);if(pos_end==-1)pos_end=a.Ê.Æ;}a.selectionStart=pos_start;a.selectionEnd=pos_end;if(t.isIE){t.setIESelection();setTimeout(\"eA.is_tabbing=Ì;\",100);}\nelse t.is_tabbing=Ì;};EA.Ä.press_enter=Ã(){if(!Á.smooth_selection)return Ì;Á.getIESelection();var scrollTop=Á.result.scrollTop;var scrollLeft=Á.result.scrollLeft;var start=Á.Â.selectionStart;var end=Á.Â.selectionEnd;var start_last_line=Math.max(0,Á.Â.Ê.substring(0,start).lastIndexOf(\"\\n\")+1);var begin_line=Á.Â.Ê.substring(start_last_line,start).replace(/^([ \t]*).*/gm,\"$1\");var lineStart=Á.Â.Ê.substring(0,start).split(\"\\n\").Æ;if(begin_line==\"\\n\"||begin_line==\"\\r\"||begin_line.Æ==0){return Ì;}if(Á.isIE||(Á.isOpera&&Á.isOpera < 9.6)){begin_line=\"\\r\\n\"+begin_line;}\nelse{begin_line=\"\\n\"+begin_line;}Á.Â.Ê=Á.Â.Ê.substring(0,start)+begin_line+Á.Â.Ê.substring(end);Á.area_select(start+begin_line.Æ,0);if(Á.isIE){Á.result.scrollTop=scrollTop;Á.result.scrollLeft=scrollLeft;}return Ë;};EA.Ä.findEndBracket=Ã(infos,bracket){var start=infos[\"indexOfCursor\"];var normal_order=Ë;if(Á.assocBracket[bracket])endBracket=Á.assocBracket[bracket];\nelse if(Á.revertAssocBracket[bracket]){endBracket=Á.revertAssocBracket[bracket];normal_order=Ì;}var end=-1;var nbBracketOpen=0;for(var i=start;i<infos[\"full_text\"].Æ&&i>=0;){if(infos[\"full_text\"].charAt(i)==endBracket){nbBracketOpen--;if(nbBracketOpen<=0){end=i;break;}}\nelse if(infos[\"full_text\"].charAt(i)==bracket)nbBracketOpen++;if(normal_order)i++;\nelse i--;}if(end==-1)return Ì;var endLastLine=infos[\"full_text\"].substr(0,end).lastIndexOf(\"\\n\");if(endLastLine==-1)line=1;\nelse line=infos[\"full_text\"].substr(0,endLastLine).split(\"\\n\").Æ+1;var curPos=end-endLastLine-1;var endLineLength=infos[\"full_text\"].substring(end).split(\"\\n\")[0].Æ;Á.displayToCursorPosition(\"end_bracket\",line,curPos,infos[\"full_text\"].substring(endLastLine+1,end+endLineLength));return Ë;};EA.Ä.displayToCursorPosition=Ã(id,start_line,cur_pos,lineContent,no_real_move){var elem,dest,content,posLeft=0,posTop,fixPadding,topOffset,endElem;elem=Á.test_font_size;dest=_$(id);content=\"<span id='test_font_size_inner'>\"+lineContent.substr(0,cur_pos).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\")+\"</span><span id='endTestFont'>\"+lineContent.substr(cur_pos).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\")+\"</span>\";if(Á.isIE||(Á.isOpera&&Á.isOpera < 9.6)){elem.innerHTML=\"<pre>\"+content.replace(/^\\r?\\n/,\"<br>\")+\"</pre>\";}\nelse{elem.innerHTML=content;}endElem=_$('endTestFont');topOffset=endElem.offsetTop;fixPadding=parseInt(Á.content_highlight.Ç.paddingLeft.replace(\"px\",\"\"));posLeft=45+endElem.offsetLeft+(!isNaN(fixPadding)&&topOffset > 0 ? fixPadding:0);posTop=Á.getLinePosTop(start_line)+topOffset;if(Á.isIE&&cur_pos > 0&&endElem.offsetLeft==0){posTop+=Á.lineHeight;}if(no_real_move!=Ë){dest.Ç.top=posTop+\"px\";dest.Ç.left=posLeft+\"px\";}dest.cursor_top=posTop;dest.cursor_left=posLeft;};EA.Ä.getLinePosTop=Ã(start_line){var elem=_$('line_'+start_line),posTop=0;if(elem)posTop=elem.offsetTop;\nelse posTop=Á.lineHeight *(start_line-1);return posTop;};EA.Ä.getTextHeight=Ã(text){var t=Á,elem,height;elem=t.test_font_size;content=text.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\");if(t.isIE||(Á.isOpera&&Á.isOpera < 9.6)){elem.innerHTML=\"<pre>\"+content.replace(/^\\r?\\n/,\"<br>\")+\"</pre>\";}\nelse{elem.innerHTML=content;}height=elem.offsetHeight;height=Math.max(1,Math.floor(elem.offsetHeight / Á.lineHeight))* Á.lineHeight;return height;};EA.Ä.fixLinesHeight=Ã(textValue,lineStart,lineEnd){var aText=textValue.split(\"\\n\");if(lineEnd==-1)lineEnd=aText.Æ-1;for(var i=Math.max(0,lineStart);i <=lineEnd;i++){if(elem=_$('line_'+(i+1))){elem.Ç.height=typeof(aText[i])!=\"undefined\" ? Á.getTextHeight(aText[i])+\"px\":Á.lineHeight;}}};EA.Ä.area_select=Ã(start,Æ){Á.Â.focus();start=Math.max(0,Math.min(Á.Â.Ê.Æ,start));end=Math.max(start,Math.min(Á.Â.Ê.Æ,start+Æ));if(Á.isIE){Á.Â.selectionStart=start;Á.Â.selectionEnd=end;Á.setIESelection();}\nelse{if(Á.isOpera&&Á.isOpera < 9.6){Á.Â.setSelectionRange(0,0);}Á.Â.setSelectionRange(start,end);}Á.check_line_selection();};EA.Ä.area_get_selection=Ã(){var text=\"\";if(document.selection){var range=document.selection.createRange();text=range.text;}\nelse{text=Á.Â.Ê.substring(Á.Â.selectionStart,Á.Â.selectionEnd);}return text;}; EA.Ä.replace_tab=Ã(text){return text.replace(/((\\n?)([^\t\\n]*)\t)/gi,eA.smartTab);};EA.Ä.smartTab=Ã(){val=\"                   \";return EA.Ä.smartTab.arguments[2]+EA.Ä.smartTab.arguments[3]+val.substr(0,eA.tab_nb_char-(EA.Ä.smartTab.arguments[3].Æ)%eA.tab_nb_char);};EA.Ä.show_waiting_screen=Ã(){width=Á.editor_area.offsetWidth;height=Á.editor_area.offsetHeight;if(!(Á.isIE&&Á.isIE<6)){width-=2;height-=2;}Á.processing_screen.Ç.display=\"block\";Á.processing_screen.Ç.width=width+\"px\";Á.processing_screen.Ç.height=height+\"px\";Á.waiting_screen_displayed=Ë;};EA.Ä.hide_waiting_screen=Ã(){Á.processing_screen.Ç.display=\"none\";Á.waiting_screen_displayed=Ì;};EA.Ä.add_Ç=Ã(Çs){if(Çs.Æ>0){newcss=document.createElement(\"Ç\");newcss.type=\"text/css\";newcss.media=\"all\";if(newcss.ÇSheet){newcss.ÇSheet.cssText=Çs;}\nelse{newcss.appendChild(document.createTextNode(Çs));}document.getElementsByTagName(\"head\")[0].appendChild(newcss);}};EA.Ä.set_font=Ã(family,size){var t=Á,a=Á.Â,s=Á.Å,elem_font,i,elem;var elems=[\"Â\",\"content_highlight\",\"cursor_pos\",\"end_bracket\",\"selection_field\",\"selection_field_text\",\"line_number\"];if(family&&family!=\"\")s[\"font_family\"]=family;if(size&&size>0)s[\"font_size\"]=size;if(t.isOpera&&t.isOpera < 9.6)s['font_family']=\"monospace\";if(elem_font=_$(\"area_font_size\")){for(i=0;i < elem_font.Æ;i++){if(elem_font.options[i].Ê&&elem_font.options[i].Ê==s[\"font_size\"])elem_font.options[i].selected=Ë;}}if(t.isFirefox){var nbTry=3;do{var div1=document.createElement('div'),text1=document.createElement('Â');var Çs={width:'40px',overflow:'scroll',zIndex:50,visibility:'hidden',fontFamily:s[\"font_family\"],fontSize:s[\"font_size\"]+\"pt\",lineHeight:t.lineHeight+\"px\",padding:'0',margin:'0',border:'none',whiteSpace:'nowrap'};var diff,changed=Ì;for(i in Çs){div1.Ç[ i ]=Çs[i];text1.Ç[ i ]=Çs[i];}text1.wrap='off';text1.setAttribute('wrap','off');t.container.appendChild(div1);t.container.appendChild(text1);div1.innerHTML=text1.Ê='azertyuiopqsdfghjklm';div1.innerHTML=text1.Ê=text1.Ê+'wxcvbn^p*ù$!:;,,';diff=text1.scrollWidth-div1.scrollWidth;if(Math.abs(diff)>=2){s[\"font_size\"]++;changed=Ë;}t.container.removeChild(div1);t.container.removeChild(text1);nbTry--;}while(changed&&nbTry > 0);}elem=t.test_font_size;elem.Ç.fontFamily=\"\"+s[\"font_family\"];elem.Ç.fontSize=s[\"font_size\"]+\"pt\";elem.innerHTML=\"0\";t.lineHeight=elem.offsetHeight;for(i=0;i<elems.Æ;i++){elem=_$(elems[i]);elem.Ç.fontFamily=s[\"font_family\"];elem.Ç.fontSize=s[\"font_size\"]+\"pt\";elem.Ç.lineHeight=t.lineHeight+\"px\";}t.add_Ç(\"pre{font-family:\"+s[\"font_family\"]+\"}\");if((t.isOpera&&t.isOpera < 9.6)||t.isIE >=8){var parNod=a.ÈNode,nxtSib=a.nextSibling,start=a.selectionStart,end=a.selectionEnd;parNod.removeChild(a);parNod.insertBefore(a,nxtSib);t.area_select(start,end-start);}Á.focus();Á.update_size();Á.check_line_selection();};EA.Ä.change_font_size=Ã(){var size=_$(\"area_font_size\").Ê;if(size>0)Á.set_font(\"\",size);};EA.Ä.open_inline_popup=Ã(popup_id){Á.close_all_inline_popup();var popup=_$(popup_id);var editor=_$(\"editor\");for(var i=0;i<Á.inlinePopup.Æ;i++){if(Á.inlinePopup[i][\"popup_id\"]==popup_id){var icon=_$(Á.inlinePopup[i][\"icon_id\"]);if(icon){Á.switchClassSticky(icon,'editAreaButtonSelected',Ë);break;}}}popup.Ç.height=\"auto\";popup.Ç.overflow=\"visible\";if(document.body.offsetHeight< popup.offsetHeight){popup.Ç.height=(document.body.offsetHeight-10)+\"px\";popup.Ç.overflow=\"auto\";}if(!popup.positionned){var new_left=editor.offsetWidth /2-popup.offsetWidth /2;var new_top=editor.offsetHeight /2-popup.offsetHeight /2;popup.Ç.left=new_left+\"px\";popup.Ç.top=new_top+\"px\";popup.positionned=Ë;}popup.Ç.visibility=\"visible\";};EA.Ä.close_inline_popup=Ã(popup_id){var popup=_$(popup_id);for(var i=0;i<Á.inlinePopup.Æ;i++){if(Á.inlinePopup[i][\"popup_id\"]==popup_id){var icon=_$(Á.inlinePopup[i][\"icon_id\"]);if(icon){Á.switchClassSticky(icon,'editAreaButtonNormal',Ì);break;}}}popup.Ç.visibility=\"hidden\";};EA.Ä.close_all_inline_popup=Ã(e){for(var i=0;i<Á.inlinePopup.Æ;i++){Á.close_inline_popup(Á.inlinePopup[i][\"popup_id\"]);}Á.Â.focus();};EA.Ä.show_help=Ã(){Á.open_inline_popup(\"edit_area_help\");};EA.Ä.new_document=Ã(){Á.Â.Ê=\"\";Á.area_select(0,0);};EA.Ä.get_all_toolbar_height=Ã(){var area=_$(\"editor\");var results=È.getChildren(area,\"div\",\"class\",\"area_toolbar\",\"all\",\"0\");var height=0;for(var i=0;i<results.Æ;i++){height+=results[i].offsetHeight;}return height;};EA.Ä.go_to_line=Ã(line){if(!line){var icon=_$(\"go_to_line\");if(icon !=null){Á.restoreClass(icon);Á.switchClassSticky(icon,'editAreaButtonSelected',Ë);}line=prompt(Á.get_translation(\"go_to_line_prompt\"));if(icon !=null)Á.switchClassSticky(icon,'editAreaButtonNormal',Ì);}if(line&&line!=null&&line.search(/^[0-9]+$/)!=-1){var start=0;var lines=Á.Â.Ê.split(\"\\n\");if(line > lines.Æ)start=Á.Â.Ê.Æ;\nelse{for(var i=0;i<Math.min(line-1,lines.Æ);i++)start+=lines[i].Æ+1;}Á.area_select(start,0);}};EA.Ä.change_smooth_selection_mode=Ã(setTo){if(Á.do_highlight)return;if(setTo !=null){if(setTo===Ì)Á.smooth_selection=Ë;\nelse Á.smooth_selection=Ì;}var icon=_$(\"change_smooth_selection\");Á.Â.focus();if(Á.smooth_selection===Ë){Á.switchClassSticky(icon,'editAreaButtonNormal',Ì);Á.smooth_selection=Ì;Á.selection_field.Ç.display=\"none\";_$(\"cursor_pos\").Ç.display=\"none\";_$(\"end_bracket\").Ç.display=\"none\";}\nelse{Á.switchClassSticky(icon,'editAreaButtonSelected',Ì);Á.smooth_selection=Ë;Á.selection_field.Ç.display=\"block\";_$(\"cursor_pos\").Ç.display=\"block\";_$(\"end_bracket\").Ç.display=\"block\";}};EA.Ä.scroll_to_view=Ã(show){var zone,lineElem;if(!Á.smooth_selection)return;zone=_$(\"result\");var cursor_pos_top=_$(\"cursor_pos\").cursor_top;if(show==\"bottom\"){cursor_pos_top+=Á.getLinePosTop(Á.É['line_start']+Á.É['line_nb']-1);}var max_height_visible=zone.clientHeight+zone.scrollTop;var miss_top=cursor_pos_top+Á.lineHeight-max_height_visible;if(miss_top>0){zone.scrollTop=zone.scrollTop+miss_top;}\nelse if(zone.scrollTop > cursor_pos_top){zone.scrollTop=cursor_pos_top;}var cursor_pos_left=_$(\"cursor_pos\").cursor_left;var max_width_visible=zone.clientWidth+zone.scrollLeft;var miss_left=cursor_pos_left+10-max_width_visible;if(miss_left>0){zone.scrollLeft=zone.scrollLeft+miss_left+50;}\nelse if(zone.scrollLeft > cursor_pos_left){zone.scrollLeft=cursor_pos_left;}\nelse if(zone.scrollLeft==45){zone.scrollLeft=0;}};EA.Ä.check_undo=Ã(only_once){if(!eAs[Á.id])return Ì;if(Á.ÂFocused&&eAs[Á.id][\"displayed\"]==Ë){var text=Á.Â.Ê;if(Á.previous.Æ<=1)Á.switchClassSticky(_$(\"undo\"),'editAreaButtonDisabled',Ë);if(!Á.previous[Á.previous.Æ-1]||Á.previous[Á.previous.Æ-1][\"text\"] !=text){Á.previous.push({\"text\":text,\"selStart\":Á.Â.selectionStart,\"selEnd\":Á.Â.selectionEnd});if(Á.previous.Æ > Á.Å[\"max_undo\"]+1)Á.previous.shift();}if(Á.previous.Æ >=2)Á.switchClassSticky(_$(\"undo\"),'editAreaButtonNormal',Ì);}if(!only_once)setTimeout(\"eA.check_undo()\",3000);};EA.Ä.undo=Ã(){if(Á.previous.Æ > 0){Á.getIESelection();Á.next.push({\"text\":Á.Â.Ê,\"selStart\":Á.Â.selectionStart,\"selEnd\":Á.Â.selectionEnd});var prev=Á.previous.pop();if(prev[\"text\"]==Á.Â.Ê&&Á.previous.Æ > 0)prev=Á.previous.pop();Á.Â.Ê=prev[\"text\"];Á.last_undo=prev[\"text\"];Á.area_select(prev[\"selStart\"],prev[\"selEnd\"]-prev[\"selStart\"]);Á.switchClassSticky(_$(\"redo\"),'editAreaButtonNormal',Ì);Á.resync_highlight(Ë);Á.check_file_changes();}};EA.Ä.redo=Ã(){if(Á.next.Æ > 0){var next=Á.next.pop();Á.previous.push(next);Á.Â.Ê=next[\"text\"];Á.last_undo=next[\"text\"];Á.area_select(next[\"selStart\"],next[\"selEnd\"]-next[\"selStart\"]);Á.switchClassSticky(_$(\"undo\"),'editAreaButtonNormal',Ì);Á.resync_highlight(Ë);Á.check_file_changes();}if(Á.next.Æ==0)Á.switchClassSticky(_$(\"redo\"),'editAreaButtonDisabled',Ë);};EA.Ä.check_redo=Ã(){if(eA.next.Æ==0||eA.Â.Ê!=eA.last_undo){eA.next=[];eA.switchClassSticky(_$(\"redo\"),'editAreaButtonDisabled',Ë);}\nelse{Á.switchClassSticky(_$(\"redo\"),'editAreaButtonNormal',Ì);}};EA.Ä.switchClass=Ã(element,class_name,lock_state){var lockChanged=Ì;if(typeof(lock_state)!=\"undefined\"&&element !=null){element.classLock=lock_state;lockChanged=Ë;}if(element !=null&&(lockChanged||!element.classLock)){element.oldClassName=element.className;element.className=class_name;}};EA.Ä.restoreAndSwitchClass=Ã(element,class_name){if(element !=null&&!element.classLock){Á.restoreClass(element);Á.switchClass(element,class_name);}};EA.Ä.restoreClass=Ã(element){if(element !=null&&element.oldClassName&&!element.classLock){element.className=element.oldClassName;element.oldClassName=null;}};EA.Ä.setClassLock=Ã(element,lock_state){if(element !=null)element.classLock=lock_state;};EA.Ä.switchClassSticky=Ã(element,class_name,lock_state){var lockChanged=Ì;if(typeof(lock_state)!=\"undefined\"&&element !=null){element.classLock=lock_state;lockChanged=Ë;}if(element !=null&&(lockChanged||!element.classLock)){element.className=class_name;element.oldClassName=class_name;}};EA.Ä.scroll_page=Ã(params){var dir=params[\"dir\"],shift_pressed=params[\"shift\"];var lines=Á.Â.Ê.split(\"\\n\");var new_pos=0,Æ=0,char_left=0,line_nb=0,curLine=0;var toScrollAmount=_$(\"result\").clientHeight-30;var nbLineToScroll=0,diff=0;if(dir==\"up\"){nbLineToScroll=Math.ceil(toScrollAmount / Á.lineHeight);for(i=Á.É[\"line_start\"];i-diff > Á.É[\"line_start\"]-nbLineToScroll;i--){if(elem=_$('line_'+i)){diff+=Math.floor((elem.offsetHeight-1)/ Á.lineHeight);}}nbLineToScroll-=diff;if(Á.É[\"selec_direction\"]==\"up\"){for(line_nb=0;line_nb< Math.min(Á.É[\"line_start\"]-nbLineToScroll,lines.Æ);line_nb++){new_pos+=lines[line_nb].Æ+1;}char_left=Math.min(lines[Math.min(lines.Æ-1,line_nb)].Æ,Á.É[\"curr_pos\"]-1);if(shift_pressed)Æ=Á.É[\"selectionEnd\"]-new_pos-char_left;Á.area_select(new_pos+char_left,Æ);view=\"top\";}\nelse{view=\"bottom\";for(line_nb=0;line_nb< Math.min(Á.É[\"line_start\"]+Á.É[\"line_nb\"]-1-nbLineToScroll,lines.Æ);line_nb++){new_pos+=lines[line_nb].Æ+1;}char_left=Math.min(lines[Math.min(lines.Æ-1,line_nb)].Æ,Á.É[\"curr_pos\"]-1);if(shift_pressed){start=Math.min(Á.É[\"selectionStart\"],new_pos+char_left);Æ=Math.max(new_pos+char_left,Á.É[\"selectionStart\"])-start;if(new_pos+char_left < Á.É[\"selectionStart\"])view=\"top\";}\nelse start=new_pos+char_left;Á.area_select(start,Æ);}}\nelse{var nbLineToScroll=Math.floor(toScrollAmount / Á.lineHeight);for(i=Á.É[\"line_start\"];i+diff < Á.É[\"line_start\"]+nbLineToScroll;i++){if(elem=_$('line_'+i)){diff+=Math.floor((elem.offsetHeight-1)/ Á.lineHeight);}}nbLineToScroll-=diff;if(Á.É[\"selec_direction\"]==\"down\"){view=\"bottom\";for(line_nb=0;line_nb< Math.min(Á.É[\"line_start\"]+Á.É[\"line_nb\"]-2+nbLineToScroll,lines.Æ);line_nb++){if(line_nb==Á.É[\"line_start\"]-1)char_left=Á.É[\"selectionStart\"]-new_pos;new_pos+=lines[line_nb].Æ+1;}if(shift_pressed){Æ=Math.abs(Á.É[\"selectionStart\"]-new_pos);Æ+=Math.min(lines[Math.min(lines.Æ-1,line_nb)].Æ,Á.É[\"curr_pos\"]);Á.area_select(Math.min(Á.É[\"selectionStart\"],new_pos),Æ);}\nelse{Á.area_select(new_pos+char_left,0);}}\nelse{view=\"top\";for(line_nb=0;line_nb< Math.min(Á.É[\"line_start\"]+nbLineToScroll-1,lines.Æ,lines.Æ);line_nb++){if(line_nb==Á.É[\"line_start\"]-1)char_left=Á.É[\"selectionStart\"]-new_pos;new_pos+=lines[line_nb].Æ+1;}if(shift_pressed){Æ=Math.abs(Á.É[\"selectionEnd\"]-new_pos-char_left);Æ+=Math.min(lines[Math.min(lines.Æ-1,line_nb)].Æ,Á.É[\"curr_pos\"])-char_left-1;Á.area_select(Math.min(Á.É[\"selectionEnd\"],new_pos+char_left),Æ);if(new_pos+char_left > Á.É[\"selectionEnd\"])view=\"bottom\";}\nelse{Á.area_select(new_pos+char_left,0);}}}Á.check_line_selection();Á.scroll_to_view(view);};EA.Ä.start_resize=Ã(e){È.eAL.resize[\"id\"]=eA.id;È.eAL.resize[\"start_x\"]=(e)? e.pageX:event.x+document.body.scrollLeft;È.eAL.resize[\"start_y\"]=(e)? e.pageY:event.y+document.body.scrollTop;if(eA.isIE){eA.Â.focus();eA.getIESelection();}È.eAL.resize[\"selectionStart\"]=eA.Â.selectionStart;È.eAL.resize[\"selectionEnd\"]=eA.Â.selectionEnd;È.eAL.start_resize_area();};EA.Ä.toggle_full_screen=Ã(to){var t=Á,p=È,a=t.Â,html,frame,selStart,selEnd,old,icon;if(typeof(to)==\"undefined\")to=!t.fullscreen['isFull'];old=t.fullscreen['isFull'];t.fullscreen['isFull']=to;icon=_$(\"fullscreen\");selStart=t.Â.selectionStart;selEnd=t.Â.selectionEnd;html=p.document.getElementsByTagName(\"html\")[0];frame=p.document.getElementById(\"frame_\"+t.id);if(to&&to!=old){t.fullscreen['old_overflow']=p.get_css_property(html,\"overflow\");t.fullscreen['old_height']=p.get_css_property(html,\"height\");t.fullscreen['old_width']=p.get_css_property(html,\"width\");t.fullscreen['old_scrollTop']=html.scrollTop;t.fullscreen['old_scrollLeft']=html.scrollLeft;t.fullscreen['old_zIndex']=p.get_css_property(frame,\"z-index\");if(t.isOpera){html.Ç.height=\"100%\";html.Ç.width=\"100%\";}html.Ç.overflow=\"hidden\";html.scrollTop=0;html.scrollLeft=0;frame.Ç.position=\"absolute\";frame.Ç.width=html.clientWidth+\"px\";frame.Ç.height=html.clientHeight+\"px\";frame.Ç.display=\"block\";frame.Ç.zIndex=\"999999\";frame.Ç.top=\"0px\";frame.Ç.left=\"0px\";frame.Ç.top=\"-\"+p.calculeOffsetTop(frame)+\"px\";frame.Ç.left=\"-\"+p.calculeOffsetLeft(frame)+\"px\";t.switchClassSticky(icon,'editAreaButtonSelected',Ì);t.fullscreen['allow_resize']=t.resize_allowed;t.allow_resize(Ì);if(t.isFirefox){p.eAL.execCommand(t.id,\"update_size();\");t.area_select(selStart,selEnd-selStart);t.scroll_to_view();t.focus();}\nelse{setTimeout(\"p.eAL.execCommand('\"+t.id+\"','update_size();');eA.focus();\",10);}}\nelse if(to!=old){frame.Ç.position=\"static\";frame.Ç.zIndex=t.fullscreen['old_zIndex'];if(t.isOpera){html.Ç.height=\"auto\";html.Ç.width=\"auto\";html.Ç.overflow=\"auto\";}\nelse if(t.isIE&&p!=top){html.Ç.overflow=\"auto\";}\nelse{html.Ç.overflow=t.fullscreen['old_overflow'];}html.scrollTop=t.fullscreen['old_scrollTop'];html.scrollLeft=t.fullscreen['old_scrollLeft'];p.eAL.hide(t.id);p.eAL.show(t.id);t.switchClassSticky(icon,'editAreaButtonNormal',Ì);if(t.fullscreen['allow_resize'])t.allow_resize(t.fullscreen['allow_resize']);if(t.isFirefox){t.area_select(selStart,selEnd-selStart);setTimeout(\"eA.scroll_to_view();\",10);}}};EA.Ä.allow_resize=Ã(allow){var resize=_$(\"resize_area\");if(allow){resize.Ç.visibility=\"visible\";È.eAL.add_event(resize,\"mouseup\",eA.start_resize);}\nelse{resize.Ç.visibility=\"hidden\";È.eAL.remove_event(resize,\"mouseup\",eA.start_resize);}Á.resize_allowed=allow;};EA.Ä.change_syntax=Ã(new_syntax,is_waiting){if(new_syntax==Á.Å['syntax'])return Ë;var founded=Ì;for(var i=0;i<Á.syntax_list.Æ;i++){if(Á.syntax_list[i]==new_syntax)founded=Ë;}if(founded==Ë){if(!È.eAL.load_syntax[new_syntax]){if(!is_waiting)È.eAL.load_script(È.eAL.baseURL+\"reg_syntax/\"+new_syntax+\".js\");setTimeout(\"eA.change_syntax('\"+new_syntax+\"',Ë);\",100);Á.show_waiting_screen();}\nelse{if(!Á.allready_used_syntax[new_syntax]){È.eAL.init_syntax_regexp();Á.add_Ç(È.eAL.syntax[new_syntax][\"Çs\"]);Á.allready_used_syntax[new_syntax]=Ë;}var sel=_$(\"syntax_selection\");if(sel&&sel.Ê!=new_syntax){for(var i=0;i<sel.Æ;i++){if(sel.options[i].Ê&&sel.options[i].Ê==new_syntax)sel.options[i].selected=Ë;}}Á.Å['syntax']=new_syntax;Á.resync_highlight(Ë);Á.hide_waiting_screen();return Ë;}}return Ì;};EA.Ä.set_editable=Ã(is_editable){if(is_editable){document.body.className=\"\";Á.Â.readOnly=Ì;Á.is_editable=Ë;}\nelse{document.body.className=\"non_editable\";Á.Â.readOnly=Ë;Á.is_editable=Ì;}if(eAs[Á.id][\"displayed\"]==Ë)Á.update_size();};EA.Ä.toggle_word_wrap=Ã(){Á.set_word_wrap(!Á.Å['word_wrap']);};EA.Ä.set_word_wrap=Ã(to){var t=Á,a=t.Â;if(t.isOpera){Á.Å['word_wrap']=Ì;t.switchClassSticky(_$(\"word_wrap\"),'editAreaButtonDisabled',Ë);return Ì;}if(to){wrap_mode='soft';Á.container.className+=' word_wrap';Á.container.Ç.width=\"\";Á.content_highlight.Ç.width=\"\";a.Ç.width=\"100%\";if(t.isIE&&t.isIE < 7){a.Ç.width=(a.offsetWidth-5)+\"px\";}t.switchClassSticky(_$(\"word_wrap\"),'editAreaButtonSelected',Ì);}\nelse{wrap_mode='off';Á.container.className=Á.container.className.replace(/word_wrap/g,'');t.switchClassSticky(_$(\"word_wrap\"),'editAreaButtonNormal',Ë);}Á.Â.previous_scrollWidth='';Á.Â.previous_scrollHeight='';a.wrap=wrap_mode;a.setAttribute('wrap',wrap_mode);if(!Á.isIE){var start=a.selectionStart,end=a.selectionEnd;var parNod=a.ÈNode,nxtSib=a.nextSibling;parNod.removeChild(a);parNod.insertBefore(a,nxtSib);Á.area_select(start,end-start);}Á.Å['word_wrap']=to;Á.focus();Á.update_size();Á.check_line_selection();};EA.Ä.open_file=Ã(Å){if(Å['id']!=\"undefined\"){var id=Å['id'];var new_file={};new_file['id']=id;new_file['title']=id;new_file['text']=\"\";new_file['É']=\"\";new_file['last_text_to_highlight']=\"\";new_file['last_hightlighted_text']=\"\";new_file['previous']=[];new_file['next']=[];new_file['last_undo']=\"\";new_file['smooth_selection']=Á.Å['smooth_selection'];new_file['do_highlight']=Á.Å['start_highlight'];new_file['syntax']=Á.Å['syntax'];new_file['scroll_top']=0;new_file['scroll_left']=0;new_file['selection_start']=0;new_file['selection_end']=0;new_file['edited']=Ì;new_file['font_size']=Á.Å[\"font_size\"];new_file['font_family']=Á.Å[\"font_family\"];new_file['word_wrap']=Á.Å[\"word_wrap\"];new_file['toolbar']={'links':{},'selects':{}};new_file['compare_edited_text']=new_file['text'];Á.files[id]=new_file;Á.update_file(id,Å);Á.files[id]['compare_edited_text']=Á.files[id]['text'];var html_id='tab_file_'+encodeURIComponent(id);Á.filesIdAssoc[html_id]=id;Á.files[id]['html_id']=html_id;if(!_$(Á.files[id]['html_id'])&&id!=\"\"){Á.tab_browsing_area.Ç.display=\"block\";var elem=document.createElement('li');elem.id=Á.files[id]['html_id'];var close=\"<img src=\\\"\"+È.eAL.baseURL+\"images/close.gif\\\" title=\\\"\"+Á.get_translation('close_tab','word')+\"\\\" onclick=\\\"eA.execCommand('close_file',eA.filesIdAssoc['\"+html_id+\"']);return Ì;\\\" class=\\\"hidden\\\" onmouseover=\\\"Á.className=''\\\" onmouseout=\\\"Á.className='hidden'\\\" />\";elem.innerHTML=\"<a onclick=\\\"javascript:eA.execCommand('switch_to_file',eA.filesIdAssoc['\"+html_id+\"']);\\\" selec=\\\"none\\\"><b><span><strong class=\\\"edited\\\">*</strong>\"+Á.files[id]['title']+close+\"</span></b></a>\";_$('tab_browsing_list').appendChild(elem);var elem=document.createElement('text');Á.update_size();}if(id!=\"\")Á.execCommand('file_open',Á.files[id]);Á.switch_to_file(id,Ë);return Ë;}\nelse return Ì;};EA.Ä.close_file=Ã(id){if(Á.files[id]){Á.save_file(id);if(Á.execCommand('file_close',Á.files[id])!==Ì){var li=_$(Á.files[id]['html_id']);li.ÈNode.removeChild(li);if(id==Á.curr_file){var next_file=\"\";var is_next=Ì;for(var i in Á.files){if(is_next){next_file=i;break;}\nelse if(i==id)is_next=Ë;\nelse next_file=i;}Á.switch_to_file(next_file);}delete(Á.files[id]);Á.update_size();}}};EA.Ä.save_file=Ã(id){var t=Á,save,a_links,a_selects,save_butt,img,i;if(t.files[id]){var save=t.files[id];save['É']=t.É;save['last_text_to_highlight']=t.last_text_to_highlight;save['last_hightlighted_text']=t.last_hightlighted_text;save['previous']=t.previous;save['next']=t.next;save['last_undo']=t.last_undo;save['smooth_selection']=t.smooth_selection;save['do_highlight']=t.do_highlight;save['syntax']=t.Å['syntax'];save['text']=t.Â.Ê;save['scroll_top']=t.result.scrollTop;save['scroll_left']=t.result.scrollLeft;save['selection_start']=t.É[\"selectionStart\"];save['selection_end']=t.É[\"selectionEnd\"];save['font_size']=t.Å[\"font_size\"];save['font_family']=t.Å[\"font_family\"];save['word_wrap']=t.Å[\"word_wrap\"];save['toolbar']={'links':{},'selects':{}};a_links=_$(\"toolbar_1\").getElementsByTagName(\"a\");for(i=0;i<a_links.Æ;i++){if(a_links[i].getAttribute('fileSpecific')=='yes'){save_butt={};img=a_links[i].getElementsByTagName('img')[0];save_butt['classLock']=img.classLock;save_butt['className']=img.className;save_butt['oldClassName']=img.oldClassName;save['toolbar']['links'][a_links[i].id]=save_butt;}}a_selects=_$(\"toolbar_1\").getElementsByTagName(\"select\");for(i=0;i<a_selects.Æ;i++){if(a_selects[i].getAttribute('fileSpecific')=='yes'){save['toolbar']['selects'][a_selects[i].id]=a_selects[i].Ê;}}t.files[id]=save;return save;}return Ì;};EA.Ä.update_file=Ã(id,new_Ês){for(var i in new_Ês){Á.files[id][i]=new_Ês[i];}};EA.Ä.display_file=Ã(id){var t=Á,a=t.Â,new_file,a_lis,a_selects,a_links,a_options,i,j;if(id==''){a.readOnly=Ë;t.tab_browsing_area.Ç.display=\"none\";_$(\"no_file_selected\").Ç.display=\"block\";t.result.className=\"empty\";if(!t.files['']){t.open_file({id:''});}}\nelse if(typeof(t.files[id])=='undefined'){return Ì;}\nelse{t.result.className=\"\";a.readOnly=!t.is_editable;_$(\"no_file_selected\").Ç.display=\"none\";t.tab_browsing_area.Ç.display=\"block\";}t.check_redo(Ë);t.check_undo(Ë);t.curr_file=id;a_lis=t.tab_browsing_area.getElementsByTagName('li');for(i=0;i<a_lis.Æ;i++){if(a_lis[i].id==t.files[id]['html_id'])a_lis[i].className='selected';\nelse a_lis[i].className='';}new_file=t.files[id];a.Ê=new_file['text'];t.set_font(new_file['font_family'],new_file['font_size']);t.area_select(new_file['É']['selection_start'],new_file['É']['selection_end']-new_file['É']['selection_start']);t.manage_size(Ë);t.result.scrollTop=new_file['scroll_top'];t.result.scrollLeft=new_file['scroll_left'];t.previous=new_file['previous'];t.next=new_file['next'];t.last_undo=new_file['last_undo'];t.check_redo(Ë);t.check_undo(Ë);t.execCommand(\"change_highlight\",new_file['do_highlight']);t.execCommand(\"change_syntax\",new_file['syntax']);t.execCommand(\"change_smooth_selection_mode\",new_file['smooth_selection']);t.execCommand(\"set_word_wrap\",new_file['word_wrap']);a_links=new_file['toolbar']['links'];for(i in a_links){if(img=_$(i).getElementsByTagName('img')[0]){img.classLock=a_links[i]['classLock'];img.className=a_links[i]['className'];img.oldClassName=a_links[i]['oldClassName'];}}a_selects=new_file['toolbar']['selects'];for(i in a_selects){a_options=_$(i).options;for(j=0;j<a_options.Æ;j++){if(a_options[j].Ê==a_selects[i])_$(i).options[j].selected=Ë;}}};EA.Ä.switch_to_file=Ã(file_to_show,force_refresh){if(file_to_show!=Á.curr_file||force_refresh){Á.save_file(Á.curr_file);if(Á.curr_file!='')Á.execCommand('file_switch_off',Á.files[Á.curr_file]);Á.display_file(file_to_show);if(file_to_show!='')Á.execCommand('file_switch_on',Á.files[file_to_show]);}};EA.Ä.get_file=Ã(id){if(id==Á.curr_file)Á.save_file(id);return Á.files[id];};EA.Ä.get_all_files=Ã(){tmp_files=Á.files;Á.save_file(Á.curr_file);if(tmp_files[''])delete(Á.files['']);return tmp_files;};EA.Ä.check_file_changes=Ã(){var id=Á.curr_file;if(Á.files[id]&&Á.files[id]['compare_edited_text']!=undefined){if(Á.files[id]['compare_edited_text'].Æ==Á.Â.Ê.Æ&&Á.files[id]['compare_edited_text']==Á.Â.Ê){if(Á.files[id]['edited']!=Ì)Á.set_file_edited_mode(id,Ì);}\nelse{if(Á.files[id]['edited']!=Ë)Á.set_file_edited_mode(id,Ë);}}};EA.Ä.set_file_edited_mode=Ã(id,to){if(Á.files[id]&&_$(Á.files[id]['html_id'])){var link=_$(Á.files[id]['html_id']).getElementsByTagName('a')[0];if(to==Ë){link.className='edited';}\nelse{link.className='';if(id==Á.curr_file)text=Á.Â.Ê;\nelse text=Á.files[id]['text'];Á.files[id]['compare_edited_text']=text;}Á.files[id]['edited']=to;}};EA.Ä.set_show_line_colors=Ã(new_Ê){Á.show_line_colors=new_Ê;if(new_Ê)Á.selection_field.className+=' show_colors';\nelse Á.selection_field.className=Á.selection_field.className.replace(/ show_colors/g,'');};var EA_keys={8:\"Retour arriere\",9:\"Tabulation\",12:\"Milieu(pave numerique)\",13:\"Entrer\",16:\"Shift\",17:\"Ctrl\",18:\"Alt\",19:\"Pause\",20:\"Verr Maj\",27:\"Esc\",32:\"Space\",33:\"Page up\",34:\"Page down\",35:\"End\",36:\"Begin\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"Impr ecran\",45:\"Inser\",46:\"Suppr\",91:\"Menu Demarrer Windows / touche pomme Mac\",92:\"Menu Demarrer Windows\",93:\"Menu contextuel Windows\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"Verr Num\",145:\"Arret defil\"};Ã keyDown(e){if(!e){e=event;}for(var i in eA.plugins){if(typeof(eA.plugins[i].onkeydown)==\"Ã\"){if(eA.plugins[i].onkeydown(e)===Ì){if(eA.isIE)e.keyCode=0;return Ì;}}}var target_id=(e.target||e.srcElement).id;var use=Ì;if(EA_keys[e.keyCode])letter=EA_keys[e.keyCode];\nelse letter=String.fromCharCode(e.keyCode);var low_letter=letter.toLowerCase();if(letter==\"Page up\"&&!eA.isOpera){eA.execCommand(\"scroll_page\",{\"dir\":\"up\",\"shift\":ShiftPressed(e)});use=Ë;}\nelse if(letter==\"Page down\"&&!eA.isOpera){eA.execCommand(\"scroll_page\",{\"dir\":\"down\",\"shift\":ShiftPressed(e)});use=Ë;}\nelse if(eA.is_editable==Ì){return Ë;}\nelse if(letter==\"Tabulation\"&&target_id==\"Â\"&&!CtrlPressed(e)&&!AltPressed(e)){if(ShiftPressed(e))eA.execCommand(\"invert_tab_selection\");\nelse eA.execCommand(\"tab_selection\");use=Ë;if(eA.isOpera||(eA.isFirefox&&eA.isMac))setTimeout(\"eA.execCommand('focus');\",1);}\nelse if(letter==\"Entrer\"&&target_id==\"Â\"){if(eA.press_enter())use=Ë;}\nelse if(letter==\"Entrer\"&&target_id==\"area_search\"){eA.execCommand(\"area_search\");use=Ë;}\nelse  if(letter==\"Esc\"){eA.execCommand(\"close_all_inline_popup\",e);use=Ë;}\nelse if(CtrlPressed(e)&&!AltPressed(e)&&!ShiftPressed(e)){switch(low_letter){case \"f\":eA.execCommand(\"area_search\");use=Ë;break;case \"r\":eA.execCommand(\"area_replace\");use=Ë;break;case \"q\":eA.execCommand(\"close_all_inline_popup\",e);use=Ë;break;case \"h\":eA.execCommand(\"change_highlight\");use=Ë;break;case \"g\":setTimeout(\"eA.execCommand('go_to_line');\",5);use=Ë;break;case \"e\":eA.execCommand(\"show_help\");use=Ë;break;case \"z\":use=Ë;eA.execCommand(\"undo\");break;case \"y\":use=Ë;eA.execCommand(\"redo\");break;default:break;}}if(eA.next.Æ > 0){setTimeout(\"eA.check_redo();\",10);}setTimeout(\"eA.check_file_changes();\",10);if(use){if(eA.isIE)e.keyCode=0;return Ì;}return Ë;};Ã AltPressed(e){if(window.event){return(window.event.altKey);}\nelse{if(e.modifiers)return(e.altKey||(e.modifiers % 2));\nelse return e.altKey;}};Ã CtrlPressed(e){if(window.event){return(window.event.ctrlKey);}\nelse{return(e.ctrlKey||(e.modifiers==2)||(e.modifiers==3)||(e.modifiers>5));}};Ã ShiftPressed(e){if(window.event){return(window.event.shiftKey);}\nelse{return(e.shiftKey||(e.modifiers>3));}};	EA.Ä.show_search=Ã(){if(_$(\"area_search_replace\").Ç.visibility==\"visible\"){Á.hidden_search();}\nelse{Á.open_inline_popup(\"area_search_replace\");var text=Á.area_get_selection();var search=text.split(\"\\n\")[0];_$(\"area_search\").Ê=search;_$(\"area_search\").focus();}};EA.Ä.hidden_search=Ã(){Á.close_inline_popup(\"area_search_replace\");};EA.Ä.area_search=Ã(mode){if(!mode)mode=\"search\";_$(\"area_search_msg\").innerHTML=\"\";var search=_$(\"area_search\").Ê;Á.Â.focus();Á.Â.ÂFocused=Ë;var infos=Á.get_selection_infos();var start=infos[\"selectionStart\"];var pos=-1;var pos_begin=-1;var Æ=search.Æ;if(_$(\"area_search_replace\").Ç.visibility!=\"visible\"){Á.show_search();return;}if(search.Æ==0){_$(\"area_search_msg\").innerHTML=Á.get_translation(\"search_field_empty\");return;}if(mode!=\"replace\"){if(_$(\"area_search_reg_exp\").checked)start++;\nelse start+=search.Æ;}if(_$(\"area_search_reg_exp\").checked){var opt=\"m\";if(!_$(\"area_search_match_case\").checked)opt+=\"i\";var reg=new RegExp(search,opt);pos=infos[\"full_text\"].substr(start).search(reg);pos_begin=infos[\"full_text\"].search(reg);if(pos!=-1){pos+=start;Æ=infos[\"full_text\"].substr(start).match(reg)[0].Æ;}\nelse if(pos_begin!=-1){Æ=infos[\"full_text\"].match(reg)[0].Æ;}}\nelse{if(_$(\"area_search_match_case\").checked){pos=infos[\"full_text\"].indexOf(search,start);pos_begin=infos[\"full_text\"].indexOf(search);}\nelse{pos=infos[\"full_text\"].toLowerCase().indexOf(search.toLowerCase(),start);pos_begin=infos[\"full_text\"].toLowerCase().indexOf(search.toLowerCase());}}if(pos==-1&&pos_begin==-1){_$(\"area_search_msg\").innerHTML=\"<strong>\"+search+\"</strong> \"+Á.get_translation(\"not_found\");return;}\nelse if(pos==-1&&pos_begin !=-1){begin=pos_begin;_$(\"area_search_msg\").innerHTML=Á.get_translation(\"restart_search_at_begin\");}\nelse begin=pos;if(mode==\"replace\"&&pos==infos[\"indexOfCursor\"]){var replace=_$(\"area_replace\").Ê;var new_text=\"\";if(_$(\"area_search_reg_exp\").checked){var opt=\"m\";if(!_$(\"area_search_match_case\").checked)opt+=\"i\";var reg=new RegExp(search,opt);new_text=infos[\"full_text\"].substr(0,begin)+infos[\"full_text\"].substr(start).replace(reg,replace);}\nelse{new_text=infos[\"full_text\"].substr(0,begin)+replace+infos[\"full_text\"].substr(begin+Æ);}Á.Â.Ê=new_text;Á.area_select(begin,Æ);Á.area_search();}\nelse Á.area_select(begin,Æ);};EA.Ä.area_replace=Ã(){Á.area_search(\"replace\");};EA.Ä.area_replace_all=Ã(){var base_text=Á.Â.Ê;var search=_$(\"area_search\").Ê;var replace=_$(\"area_replace\").Ê;if(search.Æ==0){_$(\"area_search_msg\").innerHTML=Á.get_translation(\"search_field_empty\");return;}var new_text=\"\";var nb_change=0;if(_$(\"area_search_reg_exp\").checked){var opt=\"mg\";if(!_$(\"area_search_match_case\").checked)opt+=\"i\";var reg=new RegExp(search,opt);nb_change=infos[\"full_text\"].match(reg).Æ;new_text=infos[\"full_text\"].replace(reg,replace);}\nelse{if(_$(\"area_search_match_case\").checked){var tmp_tab=base_text.split(search);nb_change=tmp_tab.Æ-1;new_text=tmp_tab.join(replace);}\nelse{var lower_Ê=base_text.toLowerCase();var lower_search=search.toLowerCase();var start=0;var pos=lower_Ê.indexOf(lower_search);while(pos!=-1){nb_change++;new_text+=Á.Â.Ê.substring(start,pos)+replace;start=pos+search.Æ;pos=lower_Ê.indexOf(lower_search,pos+1);}new_text+=Á.Â.Ê.substring(start);}}if(new_text==base_text){_$(\"area_search_msg\").innerHTML=\"<strong>\"+search+\"</strong> \"+Á.get_translation(\"not_found\");}\nelse{Á.Â.Ê=new_text;_$(\"area_search_msg\").innerHTML=\"<strong>\"+nb_change+\"</strong> \"+Á.get_translation(\"occurrence_replaced\");setTimeout(\"eA.Â.focus();eA.Â.ÂFocused=Ë;\",100);}}; EA.Ä.change_highlight=Ã(change_to){if(Á.Å[\"syntax\"].Æ==0&&change_to==Ì){Á.switchClassSticky(_$(\"highlight\"),'editAreaButtonDisabled',Ë);Á.switchClassSticky(_$(\"reset_highlight\"),'editAreaButtonDisabled',Ë);return Ì;}if(Á.do_highlight==change_to)return Ì;Á.getIESelection();var pos_start=Á.Â.selectionStart;var pos_end=Á.Â.selectionEnd;if(Á.do_highlight===Ë||change_to==Ì)Á.disable_highlight();\nelse Á.enable_highlight();Á.Â.focus();Á.Â.selectionStart=pos_start;Á.Â.selectionEnd=pos_end;Á.setIESelection();};EA.Ä.disable_highlight=Ã(displayOnly){var t=Á,a=t.Â,new_Obj,old_class,new_class;t.selection_field.innerHTML=\"\";t.selection_field_text.innerHTML=\"\";t.content_highlight.Ç.visibility=\"hidden\";new_Obj=t.content_highlight.cloneNode(Ì);new_Obj.innerHTML=\"\";t.content_highlight.ÈNode.insertBefore(new_Obj,t.content_highlight);t.content_highlight.ÈNode.removeChild(t.content_highlight);t.content_highlight=new_Obj;old_class=È.getAttribute(a,\"class\");if(old_class){new_class=old_class.replace(\"hidden\",\"\");È.setAttribute(a,\"class\",new_class);}a.Ç.backgroundColor=\"transÈ\";t.switchClassSticky(_$(\"highlight\"),'editAreaButtonNormal',Ë);t.switchClassSticky(_$(\"reset_highlight\"),'editAreaButtonDisabled',Ë);t.do_highlight=Ì;t.switchClassSticky(_$(\"change_smooth_selection\"),'editAreaButtonSelected',Ë);if(typeof(t.smooth_selection_before_highlight)!=\"undefined\"&&t.smooth_selection_before_highlight===Ì){t.change_smooth_selection_mode(Ì);}};EA.Ä.enable_highlight=Ã(){var t=Á,a=t.Â,new_class;t.show_waiting_screen();t.content_highlight.Ç.visibility=\"visible\";new_class=È.getAttribute(a,\"class\")+\" hidden\";È.setAttribute(a,\"class\",new_class);if(t.isIE)a.Ç.backgroundColor=\"#FFFFFF\";t.switchClassSticky(_$(\"highlight\"),'editAreaButtonSelected',Ì);t.switchClassSticky(_$(\"reset_highlight\"),'editAreaButtonNormal',Ì);t.smooth_selection_before_highlight=t.smooth_selection;if(!t.smooth_selection)t.change_smooth_selection_mode(Ë);t.switchClassSticky(_$(\"change_smooth_selection\"),'editAreaButtonDisabled',Ë);t.do_highlight=Ë;t.resync_highlight();t.hide_waiting_screen();};EA.Ä.maj_highlight=Ã(infos){var debug_opti=\"\",tps_start=new Date().getTime(),tps_middle_opti=new Date().getTime();var t=Á,hightlighted_text,updated_highlight;var textToHighlight=infos[\"full_text\"],doSyntaxOpti=Ì,doHtmlOpti=Ì,stay_begin=\"\",stay_end=\"\",trace_new,trace_last;if(t.last_text_to_highlight==infos[\"full_text\"]&&t.resync_highlight!==Ë)return;if(t.reload_highlight===Ë){t.reload_highlight=Ì;}\nelse if(textToHighlight.Æ==0){textToHighlight=\"\\n \";}\nelse{changes=t.checkTextEvolution(t.last_text_to_highlight,textToHighlight);trace_new=t.get_syntax_trace(changes.newTextLine).replace(/\\r/g,'');trace_last=t.get_syntax_trace(changes.lastTextLine).replace(/\\r/g,'');doSyntaxOpti=(trace_new==trace_last);if(!doSyntaxOpti&&trace_new==\"\\n\"+trace_last&&/^[ \t\s]*\\n[ \t\s]*$/.test(changes.newText.replace(/\\r/g,''))&&changes.lastText==\"\"){doSyntaxOpti=Ë;}if(doSyntaxOpti){tps_middle_opti=new Date().getTime();stay_begin=t.last_hightlighted_text.split(\"\\n\").slice(0,changes.lineStart).join(\"\\n\");if(changes.lineStart>0)stay_begin+=\"\\n\";stay_end=t.last_hightlighted_text.split(\"\\n\").slice(changes.lineLastEnd+1).join(\"\\n\");if(stay_end.Æ>0)stay_end=\"\\n\"+stay_end;if(stay_begin.split('<span').Æ !=stay_begin.split('</span').Æ||stay_end.split('<span').Æ !=stay_end.split('</span').Æ){doSyntaxOpti=Ì;stay_end='';stay_begin='';}\nelse{if(stay_begin.Æ==0&&changes.posLastEnd==-1)changes.newTextLine+=\"\\n\";textToHighlight=changes.newTextLine;}}if(t.Å[\"debug\"]){var ch=changes;debug_opti=(doSyntaxOpti?\"Optimisation\":\"No optimisation\")+\" start:\"+ch.posStart+\"(\"+ch.lineStart+\")\"+\" end_new:\"+ch.posNewEnd+\"(\"+ch.lineNewEnd+\")\"+\" end_last:\"+ch.posLastEnd+\"(\"+ch.lineLastEnd+\")\"+\"\\nchanged_text:\"+ch.newText+\"=> trace:\"+trace_new+\"\\nchanged_last_text:\"+ch.lastText+\"=> trace:\"+trace_last+\"\\nchanged_line:\"+ch.newTextLine+\"\\nlast_changed_line:\"+ch.lastTextLine+\"\\nstay_begin:\"+stay_begin.slice(-100)+\"\\nstay_end:\"+stay_end.substr(0,100);+\"\\n\";}}tps_end_opti=new Date().getTime();updated_highlight=t.colorize_text(textToHighlight);tpsAfterReg=new Date().getTime();if(doSyntaxOpti){try{var replacedBloc,i,nbStart='',nbEnd='',newHtml,ÆOld,ÆNew;replacedBloc=t.last_hightlighted_text.substring(stay_begin.Æ,t.last_hightlighted_text.Æ-stay_end.Æ);ÆOld=replacedBloc.Æ;ÆNew=updated_highlight.Æ;for(i=0;i < ÆOld&&i < ÆNew&&replacedBloc.charAt(i)==updated_highlight.charAt(i);i++){}nbStart=i;for(i=0;i+nbStart < ÆOld&&i+nbStart < ÆNew&&replacedBloc.charAt(ÆOld-i-1)==updated_highlight.charAt(ÆNew-i-1);i++){}nbEnd=i;lastHtml=replacedBloc.substring(nbStart,ÆOld-nbEnd);newHtml=updated_highlight.substring(nbStart,ÆNew-nbEnd);if(newHtml.indexOf('<span')==-1&&newHtml.indexOf('</span')==-1&&lastHtml.indexOf('<span')==-1&&lastHtml.indexOf('</span')==-1){var beginStr,nbOpendedSpan,nbClosedSpan,nbUnchangedChars,span,textNode;doHtmlOpti=Ë;beginStr=t.last_hightlighted_text.substr(0,stay_begin.Æ+nbStart);nbOpendedSpan=beginStr.split('<span').Æ-1;nbClosedSpan=beginStr.split('</span').Æ-1;span=t.content_highlight.getElementsByTagName('span')[ nbOpendedSpan ];ÈSpan=span;maxStartOffset=maxEndOffset=0;if(nbOpendedSpan==nbClosedSpan){while(ÈSpan.ÈNode !=t.content_highlight&&ÈSpan.ÈNode.tagName !='PRE'){ÈSpan=ÈSpan.ÈNode;}}\nelse{maxStartOffset=maxEndOffset=beginStr.Æ+1;nbClosed=beginStr.substr(Math.max(0,beginStr.lastIndexOf('<span',maxStartOffset-1))).split('</span').Æ-1;while(nbClosed > 0){nbClosed--;ÈSpan=ÈSpan.ÈNode;}while(ÈSpan.ÈNode !=t.content_highlight&&ÈSpan.ÈNode.tagName !='PRE'&&(tmpMaxStartOffset=Math.max(0,beginStr.lastIndexOf('<span',maxStartOffset-1)))<(tmpMaxEndOffset=Math.max(0,beginStr.lastIndexOf('</span',maxEndOffset-1)))){maxStartOffset=tmpMaxStartOffset;maxEndOffset=tmpMaxEndOffset;}}if(ÈSpan.ÈNode==t.content_highlight||ÈSpan.ÈNode.tagName=='PRE'){maxStartOffset=Math.max(0,beginStr.indexOf('<span'));}if(maxStartOffset==beginStr.Æ){nbSubSpanBefore=0;}\nelse{lastEndPos=Math.max(0,beginStr.lastIndexOf('>',maxStartOffset));nbSubSpanBefore=beginStr.substr(lastEndPos).split('<span').Æ-1;}if(nbSubSpanBefore==0){textNode=ÈSpan.firstChild;}\nelse{lastSubSpan=ÈSpan.getElementsByTagName('span')[ nbSubSpanBefore-1 ];while(lastSubSpan.ÈNode !=ÈSpan){lastSubSpan=lastSubSpan.ÈNode;}if(lastSubSpan.nextSibling==null||lastSubSpan.nextSibling.nodeType !=3){textNode=document.createTextNode('');lastSubSpan.ÈNode.insertBefore(textNode,lastSubSpan.nextSibling);}\nelse{textNode=lastSubSpan.nextSibling;}}nbUnchangedChars=beginStr.Æ-Math.max(0,beginStr.lastIndexOf('>')+1);if(t.isIE){nbUnchangedChars-=(beginStr.substr(beginStr.Æ-nbUnchangedChars).split(\"\\n\").Æ-1);textNode.replaceData(nbUnchangedChars,lastHtml.replace(/\\n/g,'').Æ,newHtml.replace(/\\n/g,''));}\nelse{textNode.replaceData(nbUnchangedChars,lastHtml.Æ,newHtml);}}}catch(e){doHtmlOpti=Ì;}}tpsAfterOpti2=new Date().getTime();hightlighted_text=stay_begin+updated_highlight+stay_end;if(!doHtmlOpti){var new_Obj=t.content_highlight.cloneNode(Ì);if((t.isIE&&t.isIE < 8)||(t.isOpera&&t.isOpera < 9.6))new_Obj.innerHTML=\"<pre><span class='\"+t.Å[\"syntax\"]+\"'>\"+hightlighted_text+\"</span></pre>\";\nelse new_Obj.innerHTML=\"<span class='\"+t.Å[\"syntax\"]+\"'>\"+hightlighted_text+\"</span>\";t.content_highlight.ÈNode.replaceChild(new_Obj,t.content_highlight);t.content_highlight=new_Obj;}t.last_text_to_highlight=infos[\"full_text\"];t.last_hightlighted_text=hightlighted_text;tps3=new Date().getTime();if(t.Å[\"debug\"]){t.debug.Ê=\"Tps optimisation \"+(tps_end_opti-tps_start)+\" | tps reg exp:\"+(tpsAfterReg-tps_end_opti)+\" | tps opti HTML:\"+(tpsAfterOpti2-tpsAfterReg)+' '+(doHtmlOpti ? 'yes':'no')+\" | tps update highlight content:\"+(tps3-tpsAfterOpti2)+\" | tpsTotal:\"+(tps3-tps_start)+\"(\"+tps3+\")\\n\"+debug_opti;}};EA.Ä.resync_highlight=Ã(reload_now){Á.reload_highlight=Ë;Á.last_text_to_highlight=\"\";Á.focus();if(reload_now)Á.check_line_selection(Ì);}; EA.Ä.comment_or_quote=Ã(){var new_class=\"\",close_tag=\"\",sy,arg,i;sy=È.eAL.syntax[eA.current_code_lang];arg=EA.Ä.comment_or_quote.arguments[0];for(i in sy[\"quotes\"]){if(arg.indexOf(i)==0){new_class=\"quotesmarks\";close_tag=sy[\"quotes\"][i];}}if(new_class.Æ==0){for(var i in sy[\"comments\"]){if(arg.indexOf(i)==0){new_class=\"comments\";close_tag=sy[\"comments\"][i];}}}if(close_tag==\"\\n\"){return \"µ__\"+new_class+\"__µ\"+arg.replace(/(\\r?\\n)?$/m,\"µ_END_µ$1\");}\nelse{reg=new RegExp(È.eAL.get_escaped_regexp(close_tag)+\"$\",\"m\");if(arg.search(reg)!=-1)return \"µ__\"+new_class+\"__µ\"+arg+\"µ_END_µ\";\nelse return \"µ__\"+new_class+\"__µ\"+arg;}};EA.Ä.get_syntax_trace=Ã(text){if(Á.Å[\"syntax\"].Æ>0&&È.eAL.syntax[Á.Å[\"syntax\"]][\"syntax_trace_regexp\"])return text.replace(È.eAL.syntax[Á.Å[\"syntax\"]][\"syntax_trace_regexp\"],\"$3\");};EA.Ä.colorize_text=Ã(text){text=\" \"+text;if(Á.Å[\"syntax\"].Æ>0)text=Á.apply_syntax(text,Á.Å[\"syntax\"]);return text.substr(1).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/µ_END_µ/g,\"</span>\").replace(/µ__([a-zA-Z0-9]+)__µ/g,\"<span class='$1'>\");};EA.Ä.apply_syntax=Ã(text,lang){var sy;Á.current_code_lang=lang;if(!È.eAL.syntax[lang])return text;sy=È.eAL.syntax[lang];if(sy[\"custom_regexp\"]['before']){for(var i in sy[\"custom_regexp\"]['before']){var convert=\"$1µ__\"+sy[\"custom_regexp\"]['before'][i]['class']+\"__µ$2µ_END_µ$3\";text=text.replace(sy[\"custom_regexp\"]['before'][i]['regexp'],convert);}}if(sy[\"comment_or_quote_reg_exp\"]){text=text.replace(sy[\"comment_or_quote_reg_exp\"],Á.comment_or_quote);}if(sy[\"keywords_reg_exp\"]){for(var i in sy[\"keywords_reg_exp\"]){text=text.replace(sy[\"keywords_reg_exp\"][i],'µ__'+i+'__µ$2µ_END_µ');}}if(sy[\"delimiters_reg_exp\"]){text=text.replace(sy[\"delimiters_reg_exp\"],'µ__delimiters__µ$1µ_END_µ');}if(sy[\"operators_reg_exp\"]){text=text.replace(sy[\"operators_reg_exp\"],'µ__operators__µ$1µ_END_µ');}if(sy[\"custom_regexp\"]['after']){for(var i in sy[\"custom_regexp\"]['after']){var convert=\"$1µ__\"+sy[\"custom_regexp\"]['after'][i]['class']+\"__µ$2µ_END_µ$3\";text=text.replace(sy[\"custom_regexp\"]['after'][i]['regexp'],convert);}}return text;}; var EditArea_charmap={init:Ã(){Á.default_language=\"Arrows\";},get_control_html:Ã(ctrl_name){switch(ctrl_name){case \"charmap\":return È.eAL.get_button_html('charmap_but','charmap.gif','charmap_press',Ì,Á.baseURL);}return Ì;},onload:Ã(){if(eA.Å[\"charmap_default\"]&&eA.Å[\"charmap_default\"].Æ>0)Á.default_language=eA.Å[\"charmap_default\"];},onkeydown:Ã(e){},execCommand:Ã(cmd,param){switch(cmd){case \"charmap_press\":win=window.open(Á.baseURL+\"popup.html\",\"charmap\",\"width=500,height=270,scrollbars=yes,resizable=yes\");win.focus();return Ì;}return Ë;}};eA.add_plugin(\"charmap\",EditArea_charmap); var EditArea_test={init:Ã(){eA.load_css(Á.baseURL+\"css/test.css\");eA.load_script(Á.baseURL+\"test2.js\");},get_control_html:Ã(ctrl_name){switch(ctrl_name){case \"test_but\":return È.eAL.get_button_html('test_but','test.gif','test_cmd',Ì,Á.baseURL);case \"test_select\":html=\"<select id='test_select' onchange='javascript:eA.execCommand(\\\"test_select_change\\\")' fileSpecific='no'>\"+\"			<option Ê='-1'>{$test_select}</option>\"+\"			<option Ê='h1'>h1</option>\"+\"			<option Ê='h2'>h2</option>\"+\"			<option Ê='h3'>h3</option>\"+\"			<option Ê='h4'>h4</option>\"+\"			<option Ê='h5'>h5</option>\"+\"			<option Ê='h6'>h6</option>\"+\"		</select>\";return html;}return Ì;},onload:Ã(){alert(\"test load\");},onkeydown:Ã(e){var str=String.fromCharCode(e.keyCode);if(str.toLowerCase()==\"f\"){return Ë;}return Ì;},execCommand:Ã(cmd,param){switch(cmd){case \"test_select_change\":var val=document.getElementById(\"test_select\").Ê;if(val!=-1)È.eAL.insertTags(eA.id,\"<\"+val+\">\",\"</\"+val+\">\");document.getElementById(\"test_select\").options[0].selected=Ë;return Ì;case \"test_cmd\":alert(\"user clicked on test_cmd\");return Ì;}return Ë;},_someInternalFunction:Ã(a,b){return a+b;}};eA.add_plugin(\"test\",EditArea_test);var editArea= eA;EditArea=EA;</script>".replace(/Á/g,'this').replace(/Â/g,'textarea').replace(/Ã/g,'function').replace(/Ä/g,'prototype').replace(/Å/g,'settings').replace(/Æ/g,'length').replace(/Ç/g,'style').replace(/È/g,'parent').replace(/É/g,'last_selection').replace(/Ê/g,'value').replace(/Ë/g,'true').replace(/Ì/g,'false');
editAreaLoader.all_plugins_loaded=true;
editAreaLoader.template= "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"> <html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" > <head> <title>EditArea</title> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /> <meta http-equiv=\"X-UA-Compatible\" content=\"IE=EmulateIE7\"/> [__CSSRULES__] [__JSCODE__] </head> <body> <div id='editor'> <div class='area_toolbar' id='toolbar_1'>[__TOOLBAR__]</div> <div class='area_toolbar' id='tab_browsing_area'><ul id='tab_browsing_list' class='menu'> <li> </li> </ul></div> <div id='result'> <div id='no_file_selected'></div> <div id='container'> <div id='cursor_pos' class='edit_area_cursor'>&nbsp;</div> <div id='end_bracket' class='edit_area_cursor'>&nbsp;</div> <div id='selection_field'></div> <div id='line_number' selec='none'></div> <div id='content_highlight'></div> <div id='test_font_size'></div> <div id='selection_field_text'></div> <textarea id='textarea' wrap='off' onchange='editArea.execCommand(\"onchange\");' onfocus='javascript:editArea.textareaFocused=true;' onblur='javascript:editArea.textareaFocused=false;'> </textarea> </div> </div> <div class='area_toolbar' id='toolbar_2'> <table class='statusbar' cellspacing='0' cellpadding='0'> <tr> <td class='total' selec='none'>{$position}:</td> <td class='infos' selec='none'> {$line_abbr} <span  id='linePos'>0</span>, {$char_abbr} <span id='currPos'>0</span> </td> <td class='total' selec='none'>{$total}:</td> <td class='infos' selec='none'> {$line_abbr} <span id='nbLine'>0</span>, {$char_abbr} <span id='nbChar'>0</span> </td> <td class='resize'> <span id='resize_area'><img src='[__BASEURL__]images/statusbar_resize.gif' alt='resize' selec='none'></span> </td> </tr> </table> </div> </div> <div id='processing'> <div id='processing_text'> {$processing} </div> </div> <div id='area_search_replace' class='editarea_popup'> <table cellspacing='2' cellpadding='0' style='width: 100%'> <tr> <td selec='none'>{$search}</td> <td><input type='text' id='area_search' /></td> <td id='close_area_search_replace'> <a onclick='Javascript:editArea.execCommand(\"hidden_search\")'><img selec='none' src='[__BASEURL__]images/close.gif' alt='{$close_popup}' title='{$close_popup}' /></a><br /> </tr><tr> <td selec='none'>{$replace}</td> <td><input type='text' id='area_replace' /></td> <td><img id='move_area_search_replace' onmousedown='return parent.start_move_element(event,\"area_search_replace\", parent.frames[\"frame_\"+editArea.id]);'  src='[__BASEURL__]images/move.gif' alt='{$move_popup}' title='{$move_popup}' /></td> </tr> </table> <div class='button'> <input type='checkbox' id='area_search_match_case' /><label for='area_search_match_case' selec='none'>{$match_case}</label> <input type='checkbox' id='area_search_reg_exp' /><label for='area_search_reg_exp' selec='none'>{$reg_exp}</label> <br /> <a onclick='Javascript:editArea.execCommand(\"area_search\")' selec='none'>{$find_next}</a> <a onclick='Javascript:editArea.execCommand(\"area_replace\")' selec='none'>{$replace}</a> <a onclick='Javascript:editArea.execCommand(\"area_replace_all\")' selec='none'>{$replace_all}</a><br /> </div> <div id='area_search_msg' selec='none'></div> </div> <div id='edit_area_help' class='editarea_popup'> <div class='close_popup'> <a onclick='Javascript:editArea.execCommand(\"close_all_inline_popup\")'><img src='[__BASEURL__]images/close.gif' alt='{$close_popup}' title='{$close_popup}' /></a> </div> <div><h2>Editarea [__EA_VERSION__]</h2><br /> <h3>{$shortcuts}:</h3> {$tab}: {$add_tab}<br /> {$shift}+{$tab}: {$remove_tab}<br /> {$ctrl}+f: {$search_command}<br /> {$ctrl}+r: {$replace_command}<br /> {$ctrl}+h: {$highlight}<br /> {$ctrl}+g: {$go_to_line}<br /> {$ctrl}+z: {$undo}<br /> {$ctrl}+y: {$redo}<br /> {$ctrl}+e: {$help}<br /> {$ctrl}+q, {$esc}: {$close_popup}<br /> {$accesskey} E: {$toggle}<br /> <br /> <em>{$about_notice}</em> <br /><div class='copyright'>&copy; Christophe Dolivet 2007-2009</div> </div> </div> </body> </html> ";
editAreaLoader.iframe_css= "<style>body,html{margin:0;padding:0;height:100%;border:none;overflow:hidden;background-color:#FFF;}body,html,table,form,textarea{font:12px monospace,sans-serif;}#editor{border:solid #888 1px;overflow:hidden;}#result{z-index:4;overflow-x:auto;overflow-y:scroll;border-top:solid #888 1px;border-bottom:solid #888 1px;position:relative;clear:both;}#result.empty{overflow:hidden;}#container{overflow:hidden;border:solid blue 0;position:relative;z-index:10;padding:0 5px 0 45px;}#textarea{position:relative;top:0;left:0;margin:0;padding:0;width:100%;height:100%;overflow:hidden;z-index:7;border-width:0;background-color:transparent;resize:none;}#textarea,#textarea:hover{outline:none;}#content_highlight{white-space:pre;margin:0;padding:0;position:absolute;z-index:4;overflow:visible;}#selection_field,#selection_field_text{margin:0;background-color:#E1F2F9;position:absolute;z-index:5;top:-100px;padding:0;white-space:pre;overflow:hidden;}#selection_field.show_colors {z-index:3;background-color:#EDF9FC;}#selection_field strong{font-weight:normal;}#selection_field.show_colors *,#selection_field_text * {visibility:hidden;}#selection_field_text{background-color:transparent;}#selection_field_text strong{font-weight:normal;background-color:#3399FE;color:#FFF;visibility:visible;}#container.word_wrap #content_highlight,#container.word_wrap #selection_field,#container.word_wrap #selection_field_text,#container.word_wrap #test_font_size{white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;width:99%;}#line_number{position:absolute;overflow:hidden;border-right:solid black 1px;z-index:8;width:38px;padding:0 5px 0 0;margin:0 0 0 -45px;text-align:right;color:#AAAAAA;}#test_font_size{padding:0;margin:0;visibility:hidden;position:absolute;white-space:pre;}pre{margin:0;padding:0;}.hidden{opacity:0.2;filter:alpha(opacity=20);}#result .edit_area_cursor{position:absolute;z-index:6;background-color:#FF6633;top:-100px;margin:0;}#result .edit_area_selection_field .overline{background-color:#996600;}.editarea_popup{border:solid 1px #888888;background-color:#ECE9D8;width:250px;padding:4px;position:absolute;visibility:hidden;z-index:15;top:-500px;}.editarea_popup,.editarea_popup table{font-family:sans-serif;font-size:10pt;}.editarea_popup img{border:0;}.editarea_popup .close_popup{float:right;line-height:16px;border:0;padding:0;}.editarea_popup h1,.editarea_popup h2,.editarea_popup h3,.editarea_popup h4,.editarea_popup h5,.editarea_popup h6{margin:0;padding:0;}.editarea_popup .copyright{text-align:right;}div#area_search_replace{}div#area_search_replace img{border:0;}div#area_search_replace div.button{text-align:center;line-height:1.7em;}div#area_search_replace .button a{cursor:pointer;border:solid 1px #888888;background-color:#DEDEDE;text-decoration:none;padding:0 2px;color:#000000;white-space:nowrap;}div#area_search_replace a:hover{background-color:#EDEDED;}div#area_search_replace  #move_area_search_replace{cursor:move;border:solid 1px #888;}div#area_search_replace  #close_area_search_replace{text-align:right;vertical-align:top;white-space:nowrap;}div#area_search_replace  #area_search_msg{height:18px;overflow:hidden;border-top:solid 1px #888;margin-top:3px;}#edit_area_help{width:350px;}#edit_area_help div.close_popup{float:right;}.area_toolbar{width:100%;margin:0;padding:0;background-color:#ECE9D8;text-align:center;}.area_toolbar,.area_toolbar table{font:11px sans-serif;}.area_toolbar img{border:0;vertical-align:middle;}.area_toolbar input{margin:0;padding:0;}.area_toolbar select{font-family:'MS Sans Serif',sans-serif,Verdana,Arial;font-size:7pt;font-weight:normal;margin:2px 0 0 0 ;padding:0;vertical-align:top;background-color:#F0F0EE;}table.statusbar{width:100%;}.area_toolbar td.infos{text-align:center;width:130px;border-right:solid 1px #888;border-width:0 1px 0 0;padding:0;}.area_toolbar td.total{text-align:right;width:50px;padding:0;}.area_toolbar td.resize{text-align:right;}.area_toolbar span#resize_area{cursor:nw-resize;visibility:hidden;}.editAreaButtonNormal,.editAreaButtonOver,.editAreaButtonDown,.editAreaSeparator,.editAreaSeparatorLine,.editAreaButtonDisabled,.editAreaButtonSelected {border:0; margin:0; padding:0; background:transparent;margin-top:0;margin-left:1px;padding:0;}.editAreaButtonNormal {border:1px solid #ECE9D8 !important;cursor:pointer;}.editAreaButtonOver {border:1px solid #0A246A !important;cursor:pointer;background-color:#B6BDD2;}.editAreaButtonDown {cursor:pointer;border:1px solid #0A246A !important;background-color:#8592B5;}.editAreaButtonSelected {border:1px solid #C0C0BB !important;cursor:pointer;background-color:#F4F2E8;}.editAreaButtonDisabled {filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);-moz-opacity:0.3;opacity:0.3;border:1px solid #F0F0EE !important;cursor:pointer;}.editAreaSeparatorLine {margin:1px 2px;background-color:#C0C0BB;width:2px;height:18px;}#processing{display:none;background-color:#ECE9D8;border:solid #888 1px;position:absolute;top:0;left:0;width:100%;height:100%;z-index:100;text-align:center;}#processing_text{position:absolute;left:50%;top:50%;width:200px;height:20px;margin-left:-100px;margin-top:-10px;text-align:center;}#tab_browsing_area{display:none;background-color:#CCC9A8;border-top:1px solid #888;text-align:left;margin:0;}#tab_browsing_list {padding:0;margin:0;list-style-type:none;white-space:nowrap;}#tab_browsing_list li {float:left;margin:-1px;}#tab_browsing_list a {position:relative;display:block;text-decoration:none;float:left;cursor:pointer;line-height:14px;}#tab_browsing_list a span {display:block;color:#000;background:#ECE9D8;border:1px solid #888;border-width:1px 1px 0;text-align:center;padding:2px 2px 1px 4px;position:relative;}#tab_browsing_list a b {display:block;border-bottom:2px solid #617994;}#tab_browsing_list a .edited {display:none;}#tab_browsing_list a.edited .edited {display:inline;}#tab_browsing_list a img{margin-left:7px;}#tab_browsing_list a.edited img{margin-left:3px;}#tab_browsing_list a:hover span {background:#F4F2E8;border-color:#0A246A;}#tab_browsing_list .selected a span{background:#046380;color:#FFF;}#no_file_selected{height:100%;width:150%;background:#CCC;display:none;z-index:20;position:absolute;}.non_editable #editor{border-width:0 1px;}.non_editable .area_toolbar{display:none;}#auto_completion_area{background:#FFF;border:solid 1px #888;position:absolute;z-index:15;width:280px;height:180px;overflow:auto;display:none;}#auto_completion_area a,#auto_completion_area a:visited{display:block;padding:0 2px 1px;color:#000;text-decoration:none;}#auto_completion_area a:hover,#auto_completion_area a:focus,#auto_completion_area a.focus{background:#D6E1FE;text-decoration:none;}#auto_completion_area ul{margin:0;padding:0;list-style:none inside;}#auto_completion_area li{padding:0;}#auto_completion_area .prefix{font-style:italic;padding:0 3px;}</style>";
                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/edit_area/langs_dk.js                                                         0000777 0000000 0000000 00000004113 12534142432 017670  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["dk"]={
new_document: "nyt tomt dokument",
search_button: "s&oslash;g og erstat",
search_command: "find n&aelig;ste / &aring;ben s&oslash;gefelt",
search: "s&oslash;g",
replace: "erstat",
replace_command: "erstat / &aring;ben s&oslash;gefelt",
find_next: "find n&aelig;ste",
replace_all: "erstat alle",
reg_exp: "regular expressions",
match_case: "forskel på store/sm&aring; bogstaver<br />",
not_found: "not found.",
occurrence_replaced: "occurences replaced.",
search_field_empty: "Search field empty",
restart_search_at_begin: "End of area reached. Restart at begin.",
move_popup: "flyt søgepopup",
font_size: "--Skriftstørrelse--",
go_to_line: "g&aring; til linie",
go_to_line_prompt: "gå til linienummer:",
undo: "fortryd",
redo: "gentag",
change_smooth_selection: "sl&aring; display funktioner til/fra (smartere display men mere CPU kr&aelig;vende)",
highlight: "sl&aring; syntax highlight til/fra",
reset_highlight: "nulstil highlight (hvis den er desynkroniseret fra teksten)",
word_wrap: "toggle word wrapping mode",
help: "om",
save: "gem",
load: "hent",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Position",
total: "Total",
close_popup: "luk popup",
shortcuts: "Genveje",
add_tab: "tilf&oslash;j tabulation til tekst",
remove_tab: "fjern tabulation fra tekst",
about_notice: "Husk: syntax highlight funktionen b&oslash;r kun bruge til sm&aring; tekster",
toggle: "Sl&aring; editor til / fra",
accesskey: "Accesskey",
tab: "Tab",
shift: "Skift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Processing...",
fullscreen: "fullscreen",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/edit_area/images_opacity.png                                                  0000777 0000000 0000000 00000000223 12534142432 021251  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR            gAMA  7   tEXtSoftware Adobe ImageReadyqe<   %IDATxbf*&*QG5pQ  f    IENDB`                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/edit_area/template.html                                                       0000777 0000000 0000000 00000010473 12534142432 020257  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
<head>
	<title>EditArea - Code Editor</title>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
	[__CSSRULES__]
	[__JSCODE__]
</head>
<body>
	<div id='editor'>
		<div class='area_toolbar' id='toolbar_1'>[__TOOLBAR__]</div>
		<div class='area_toolbar' id='tab_browsing_area'><ul id='tab_browsing_list' class='menu'> <li> </li> </ul></div>
		<div id='result'>
			<div id='no_file_selected'></div>
			<div id='container'>
				<div id='cursor_pos' class='edit_area_cursor'>&nbsp;</div>
				<div id='end_bracket' class='edit_area_cursor'>&nbsp;</div>
				<div id='selection_field'></div>
				<div id='line_number' selec='none'></div>
				<div id='content_highlight'></div>
				<div id='test_font_size'></div>
				<div id='selection_field_text'></div>
				<textarea id='textarea' wrap='off' onchange='editArea.execCommand("onchange");' onfocus='javascript:editArea.textareaFocused=true;' onblur='javascript:editArea.textareaFocused=false;'>
				</textarea>
				
			</div>
		</div>
		<div class='area_toolbar' id='toolbar_2'>
			<table class='statusbar' cellspacing='0' cellpadding='0'>
				<tr>
					<td class='total' selec='none'>{$position}:</td>
					<td class='infos' selec='none'>
						{$line_abbr} <span  id='linePos'>0</span>, {$char_abbr} <span id='currPos'>0</span>
					</td>
					<td class='total' selec='none'>{$total}:</td>
					<td class='infos' selec='none'>
						{$line_abbr} <span id='nbLine'>0</span>, {$char_abbr} <span id='nbChar'>0</span>
					</td>
					<td class='resize'>
						<span id='resize_area'><img src='[__BASEURL__]images/statusbar_resize.gif' alt='resize' selec='none'></span>
					</td>
				</tr>
			</table>
		</div>
	</div>
	<div id='processing'>
		<div id='processing_text'>
			{$processing}
		</div>
	</div>

	<div id='area_search_replace' class='editarea_popup'>
		<table cellspacing='2' cellpadding='0' style='width: 100%'>
			<tr>
				<td selec='none'>{$search}</td>
				<td><input type='text' id='area_search' /></td>
				<td id='close_area_search_replace'>
					<a onclick='Javascript:editArea.execCommand("hidden_search")'><img selec='none' src='[__BASEURL__]images/close.gif' alt='{$close_popup}' title='{$close_popup}' /></a><br />
			</tr><tr>
				<td selec='none'>{$replace}</td>
				<td><input type='text' id='area_replace' /></td>
				<td><img id='move_area_search_replace' onmousedown='return parent.start_move_element(event,"area_search_replace", parent.frames["frame_"+editArea.id]);'  src='[__BASEURL__]images/move.gif' alt='{$move_popup}' title='{$move_popup}' /></td>
			</tr>
		</table>
		<div class='button'>
			<input type='checkbox' id='area_search_match_case' /><label for='area_search_match_case' selec='none'>{$match_case}</label>
			<input type='checkbox' id='area_search_reg_exp' /><label for='area_search_reg_exp' selec='none'>{$reg_exp}</label>
			<br />
			<a onclick='Javascript:editArea.execCommand("area_search")' selec='none'>{$find_next}</a>
			<a onclick='Javascript:editArea.execCommand("area_replace")' selec='none'>{$replace}</a>
			<a onclick='Javascript:editArea.execCommand("area_replace_all")' selec='none'>{$replace_all}</a><br />
		</div>
		<div id='area_search_msg' selec='none'></div>
	</div>
	<div id='edit_area_help' class='editarea_popup'>
		<div class='close_popup'>
			<a onclick='Javascript:editArea.execCommand("close_all_inline_popup")'><img src='[__BASEURL__]images/close.gif' alt='{$close_popup}' title='{$close_popup}' /></a>
		</div>
		<div><h2>Editarea [__EA_VERSION__]</h2><br />
			<h3>{$shortcuts}:</h3>
				{$tab}: {$add_tab}<br />
				{$shift}+{$tab}: {$remove_tab}<br />
				{$ctrl}+f: {$search_command}<br />
				{$ctrl}+r: {$replace_command}<br />
				{$ctrl}+h: {$highlight}<br />
				{$ctrl}+g: {$go_to_line}<br />
				{$ctrl}+z: {$undo}<br />
				{$ctrl}+y: {$redo}<br />
				{$ctrl}+e: {$help}<br />
				{$ctrl}+q, {$esc}: {$close_popup}<br />
				{$accesskey} E: {$toggle}<br />
			<br />
			<em>{$about_notice}</em>
			<br /><div class='copyright'>&copy; Christophe Dolivet 2007-2009</div>
		</div>
	</div>
</body>
</html>
                                                                                                                                                                                                     ./mvappsvr/docroot/db/edit_area/langs_eo.js                                                         0000777 0000000 0000000 00000004352 12534142432 017702  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["eo"]={
new_document: "nova dokumento (vakigas la enhavon)",
search_button: "ser&#265;i / anstata&#365;igi",
search_command: "pluser&#265;i / malfermi la ser&#265;o-fenestron",
search: "ser&#265;i",
replace: "anstata&#365;igi",
replace_command: "anstata&#365;igi / malfermi la ser&#265;o-fenestron",
find_next: "ser&#265;i",
replace_all: "anstata&#365;igi &#265;ion",
reg_exp: "regula esprimo",
match_case: "respekti la usklecon",
not_found: "ne trovita.",
occurrence_replaced: "anstata&#365;igoj plenumitaj.",
search_field_empty: "La kampo estas malplena.",
restart_search_at_begin: "Fino de teksto &#285;isrirata, &#265;u da&#365;rigi el la komenco?",
move_popup: "movi la ser&#265;o-fenestron",
font_size: "--Tipara grando--",
go_to_line: "iri al la linio",
go_to_line_prompt: "iri al la linio numero:",
undo: "rezigni",
redo: "refari",
change_smooth_selection: "ebligi/malebligi la funkcioj de vidigo (pli bona vidigo, sed pli da &#349;ar&#285;o de la &#265;eforgano)",
highlight: "ebligi/malebligi la sintaksan kolorigon",
reset_highlight: "repravalorizi la sintaksan kolorigon (se malsinkronigon de la teksto)",
word_wrap: "toggle word wrapping mode",
help: "pri",
save: "registri",
load: "&#349;ar&#285;i",
line_abbr: "Ln",
char_abbr: "Sg",
position: "Pozicio",
total: "Sumo",
close_popup: "fermi la &#349;prucfenestron",
shortcuts: "Fulmoklavo",
add_tab: "aldoni tabon en la tekston",
remove_tab: "forigi tablon el la teksto",
about_notice: "Noto: la sintaksa kolorigo estas nur prikalkulita por mallongaj tekstoj.",
toggle: "baskuligi la redaktilon",
accesskey: "Fulmoklavo",
tab: "Tab",
shift: "Maj",
ctrl: "Ktrl",
esc: "Esk",
processing: "&#349;argante...",
fullscreen: "plenekrane",
syntax_selection: "--Sintakso--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Pitono",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Fermi la dosieron"
};                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/edit_area/edit_area_compressor.php                                            0000777 0000000 0000000 00000034336 12534142432 022464  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <?php
	/******
	 *
	 *	EditArea PHP compressor
	 * 	Developped by Christophe Dolivet
	 *	Released under LGPL, Apache and BSD licenses
	 *	v1.1.3 (2007/01/18)	 
	 *
	******/
	
	// CONFIG
	$param['cache_duration']= 3600 * 24 * 10;		// 10 days util client cache expires
	$param['compress'] = true;						// enable the code compression, should be activated but it can be usefull to desactivate it for easier error retrieving (true or false)
	$param['debug'] = false;						// Enable this option if you need debuging info
	$param['use_disk_cache']= true;					// If you enable this option gzip files will be cached on disk.
	$param['use_gzip']= true;						// Enable gzip compression
	// END CONFIG
	
	$compressor= new Compressor($param);
	
	class Compressor{
	
		
		function compressor($param)
		{
			$this->__construct($param);
		}
		
		function __construct($param)
		{
			$this->start_time= $this->get_microtime();
			$this->file_loaded_size=0;
			$this->param= $param;
			$this->script_list="";
			$this->path= dirname(__FILE__)."/";
			if(isset($_GET['plugins'])){
				$this->load_all_plugins= true;
				$this->full_cache_file= $this->path."edit_area_full_with_plugins.js";
				$this->gzip_cache_file= $this->path."edit_area_full_with_plugins.gz";
			}else{
				$this->load_all_plugins= false;
				$this->full_cache_file= $this->path."edit_area_full.js";
				$this->gzip_cache_file= $this->path."edit_area_full.gz";
			}
			
			$this->check_gzip_use();
			$this->send_headers();
			$this->check_cache();
			$this->load_files();
			$this->send_datas();
		}
		
		function send_headers()
		{
			header("Content-type: text/javascript; charset: UTF-8");
			header("Vary: Accept-Encoding"); // Handle proxies
			header(sprintf("Expires: %s GMT", gmdate("D, d M Y H:i:s", time() + $this->param['cache_duration'])) );
			if($this->use_gzip)
				header("Content-Encoding: ".$this->gzip_enc_header);
		}
		
		function check_gzip_use()
		{
			$encodings = array();
			$desactivate_gzip=false;
					
			if (isset($_SERVER['HTTP_ACCEPT_ENCODING']))
				$encodings = explode(',', strtolower(preg_replace("/\s+/", "", $_SERVER['HTTP_ACCEPT_ENCODING'])));
			
			// desactivate gzip for IE version < 7
			if(preg_match("/(?:msie )([0-9.]+)/i", $_SERVER['HTTP_USER_AGENT'], $ie))
			{
				if($ie[1]<7)
					$desactivate_gzip=true;	
			}
			
			// Check for gzip header or northon internet securities
			if (!$desactivate_gzip && $this->param['use_gzip'] && (in_array('gzip', $encodings) || in_array('x-gzip', $encodings) || isset($_SERVER['---------------'])) && function_exists('ob_gzhandler') && !ini_get('zlib.output_compression')) {
				$this->gzip_enc_header= in_array('x-gzip', $encodings) ? "x-gzip" : "gzip";
				$this->use_gzip=true;
				$this->cache_file=$this->gzip_cache_file;
			}else{
				$this->use_gzip=false;
				$this->cache_file=$this->full_cache_file;
			}
		}
		
		function check_cache()
		{
			// Only gzip the contents if clients and server support it
			if (file_exists($this->cache_file)) {
				// check if cache file must be updated
				$cache_date=0;				
				if ($dir = opendir($this->path)) {
					while (($file = readdir($dir)) !== false) {
						if(is_file($this->path.$file) && $file!="." && $file!="..")
							$cache_date= max($cache_date, filemtime($this->path.$file));
					}
					closedir($dir);
				}
				if($this->load_all_plugins){
					$plug_path= $this->path."plugins/";
					if (($dir = @opendir($plug_path)) !== false)
					{
						while (($file = readdir($dir)) !== false)
						{
							if ($file !== "." && $file !== "..")
							{
								if(is_dir($plug_path.$file) && file_exists($plug_path.$file."/".$file.".js"))
									$cache_date= max($cache_date, filemtime("plugins/".$file."/".$file.".js"));
							}
						}
						closedir($dir);
					}
				}

				if(filemtime($this->cache_file) >= $cache_date){
					// if cache file is up to date
					$last_modified = gmdate("D, d M Y H:i:s",filemtime($this->cache_file))." GMT";
					if (isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]) && strcasecmp($_SERVER["HTTP_IF_MODIFIED_SINCE"], $last_modified) === 0)
					{
						header("HTTP/1.1 304 Not Modified");
						header("Last-modified: ".$last_modified);
						header("Cache-Control: Public"); // Tells HTTP 1.1 clients to cache
						header("Pragma:"); // Tells HTTP 1.0 clients to cache
					}
					else
					{
						header("Last-modified: ".$last_modified);
						header("Cache-Control: Public"); // Tells HTTP 1.1 clients to cache
						header("Pragma:"); // Tells HTTP 1.0 clients to cache
						header('Content-Length: '.filesize($this->cache_file));
						echo file_get_contents($this->cache_file);
					}				
					die;
				}
			}
			return false;
		}
		
		function load_files()
		{
			$loader= $this->get_content("edit_area_loader.js")."\n";
			
			// get the list of other files to load
	    	$loader= preg_replace("/(t\.scripts_to_load=\s*)\[([^\]]*)\];/e"
						, "\$this->replace_scripts('script_list', '\\1', '\\2')"
						, $loader);
		
			$loader= preg_replace("/(t\.sub_scripts_to_load=\s*)\[([^\]]*)\];/e"
						, "\$this->replace_scripts('sub_script_list', '\\1', '\\2')"
						, $loader);

			$this->datas= $loader;
			$this->compress_javascript($this->datas);
			
			// load other scripts needed for the loader
			preg_match_all('/"([^"]*)"/', $this->script_list, $match);
			foreach($match[1] as $key => $value)
			{
				$content= $this->get_content(preg_replace("/\\|\//i", "", $value).".js");
				$this->compress_javascript($content);
				$this->datas.= $content."\n";
			}
			//$this->datas);
			//$this->datas= preg_replace('/(( |\t|\r)*\n( |\t)*)+/s', "", $this->datas);
			
			// improved compression step 1/2	
			$this->datas= preg_replace(array("/(\b)EditAreaLoader(\b)/", "/(\b)editAreaLoader(\b)/", "/(\b)editAreas(\b)/"), array("EAL", "eAL", "eAs"), $this->datas);
			//$this->datas= str_replace(array("EditAreaLoader", "editAreaLoader", "editAreas"), array("EAL", "eAL", "eAs"), $this->datas);
			$this->datas.= "var editAreaLoader= eAL;var editAreas=eAs;EditAreaLoader=EAL;";
		
			// load sub scripts
			$sub_scripts="";
			$sub_scripts_list= array();
			preg_match_all('/"([^"]*)"/', $this->sub_script_list, $match);
			foreach($match[1] as $value){
				$sub_scripts_list[]= preg_replace("/\\|\//i", "", $value).".js";
			}
		
			if($this->load_all_plugins){
				// load plugins scripts
				$plug_path= $this->path."plugins/";
				if (($dir = @opendir($plug_path)) !== false)
				{
					while (($file = readdir($dir)) !== false)
					{
						if ($file !== "." && $file !== "..")
						{
							if(is_dir($plug_path.$file) && file_exists($plug_path.$file."/".$file.".js"))
								$sub_scripts_list[]= "plugins/".$file."/".$file.".js";
						}
					}
					closedir($dir);
				}
			}
							
			foreach($sub_scripts_list as $value){
				$sub_scripts.= $this->get_javascript_content($value);
			}
			// improved compression step 2/2	
			$sub_scripts= preg_replace(array("/(\b)editAreaLoader(\b)/", "/(\b)editAreas(\b)/", "/(\b)editArea(\b)/", "/(\b)EditArea(\b)/"), array("eAL", "eAs", "eA", "EA"), $sub_scripts);
		//	$sub_scripts= str_replace(array("editAreaLoader", "editAreas", "editArea", "EditArea"), array("eAL", "eAs", "eA", "EA"), $sub_scripts);
			$sub_scripts.= "var editArea= eA;EditArea=EA;";
			
			
			// add the scripts
		//	$this->datas.= sprintf("editAreaLoader.iframe_script= \"<script type='text/javascript'>%s</script>\";\n", $sub_scripts);
		
		
			// add the script and use a last compression 
			if( $this->param['compress'] )
			{
				$last_comp	= array( 'Á' => 'this',
								 'Â' => 'textarea',
								 'Ã' => 'function',
								 'Ä' => 'prototype',
								 'Å' => 'settings',
								 'Æ' => 'length',
								 'Ç' => 'style',
								 'È' => 'parent',
								 'É' => 'last_selection',
								 'Ê' => 'value',
								 'Ë' => 'true',
								 'Ì' => 'false'
								 /*,
									'Î' => '"',
								 'Ï' => "\n",
								 'À' => "\r"*/);
			}
			else
			{
				$last_comp	= array();
			}
			
			$js_replace= '';
			foreach( $last_comp as $key => $val )
				$js_replace .= ".replace(/". $key ."/g,'". str_replace( array("\n", "\r"), array('\n','\r'), $val ) ."')";
			
			$this->datas.= sprintf("editAreaLoader.iframe_script= \"<script type='text/javascript'>%s</script>\"%s;\n",
								str_replace( array_values($last_comp), array_keys($last_comp), $sub_scripts ), 
								$js_replace);
			
			if($this->load_all_plugins)
				$this->datas.="editAreaLoader.all_plugins_loaded=true;\n";
		
			
			// load the template
			$this->datas.= sprintf("editAreaLoader.template= \"%s\";\n", $this->get_html_content("template.html"));
			// load the css
			$this->datas.= sprintf("editAreaLoader.iframe_css= \"<style>%s</style>\";\n", $this->get_css_content("edit_area.css"));
					
		//	$this->datas= "function editArea(){};editArea.prototype.loader= function(){alert('bouhbouh');} var a= new editArea();a.loader();";
					
		}
		
		function send_datas()
		{
			if($this->param['debug']){
				$header=sprintf("/* USE PHP COMPRESSION\n");
				$header.=sprintf("javascript size: based files: %s => PHP COMPRESSION => %s ", $this->file_loaded_size, strlen($this->datas));
				if($this->use_gzip){
					$gzip_datas=  gzencode($this->datas, 9, FORCE_GZIP);				
					$header.=sprintf("=> GZIP COMPRESSION => %s", strlen($gzip_datas));
					$ratio = round(100 - strlen($gzip_datas) / $this->file_loaded_size * 100.0);			
				}else{
					$ratio = round(100 - strlen($this->datas) / $this->file_loaded_size * 100.0);
				}
				$header.=sprintf(", reduced by %s%%\n", $ratio);
				$header.=sprintf("compression time: %s\n", $this->get_microtime()-$this->start_time); 
				$header.=sprintf("%s\n", implode("\n", $this->infos));
				$header.=sprintf("*/\n");
				$this->datas= $header.$this->datas;	
			}
			$mtime= time(); // ensure that the 2 disk files will have the same update time
			// generate gzip file and cahce it if using disk cache
			if($this->use_gzip){
				$this->gzip_datas= gzencode($this->datas, 9, FORCE_GZIP);
				if($this->param['use_disk_cache'])
					$this->file_put_contents($this->gzip_cache_file, $this->gzip_datas, $mtime);
			}
			
			// generate full js file and cache it if using disk cache			
			if($this->param['use_disk_cache'])
				$this->file_put_contents($this->full_cache_file, $this->datas, $mtime);
			
			// generate output
			if($this->use_gzip)
				echo $this->gzip_datas;
			else
				echo $this->datas;
				
//			die;
		}
				
		
		function get_content($end_uri)
		{
			$end_uri=preg_replace("/\.\./", "", $end_uri); // Remove any .. (security)
			$file= $this->path.$end_uri;
			if(file_exists($file)){
				$this->infos[]=sprintf("'%s' loaded", $end_uri);
				/*$fd = fopen($file, 'rb');
				$content = fread($fd, filesize($file));
				fclose($fd);
				return $content;*/
				return $this->file_get_contents($file);
			}else{
				$this->infos[]=sprintf("'%s' not loaded", $end_uri);
				return "";
			}
		}
		
		function get_javascript_content($end_uri)
		{
			$val=$this->get_content($end_uri);
	
			$this->compress_javascript($val);
			$this->prepare_string_for_quotes($val);
			return $val;
		}
		
		function compress_javascript(&$code)
		{
			if($this->param['compress'])
			{
				// remove all comments
				//	(\"(?:[^\"\\]*(?:\\\\)*(?:\\\"?)?)*(?:\"|$))|(\'(?:[^\'\\]*(?:\\\\)*(?:\\'?)?)*(?:\'|$))|(?:\/\/(?:.|\r|\t)*?(\n|$))|(?:\/\*(?:.|\n|\r|\t)*?(?:\*\/|$))
				$code= preg_replace("/(\"(?:[^\"\\\\]*(?:\\\\\\\\)*(?:\\\\\"?)?)*(?:\"|$))|(\'(?:[^\'\\\\]*(?:\\\\\\\\)*(?:\\\\\'?)?)*(?:\'|$))|(?:\/\/(?:.|\r|\t)*?(\n|$))|(?:\/\*(?:.|\n|\r|\t)*?(?:\*\/|$))/s", "$1$2$3", $code);
				// remove line return, empty line and tabulation
				$code= preg_replace('/(( |\t|\r)*\n( |\t)*)+/s', " ", $code);
				// add line break before "else" otherwise navigators can't manage to parse the file
				$code= preg_replace('/(\b(else)\b)/', "\n$1", $code);
				// remove unnecessary spaces
				$code= preg_replace('/( |\t|\r)*(;|\{|\}|=|==|\-|\+|,|\(|\)|\|\||&\&|\:)( |\t|\r)*/', "$2", $code);
			}
		}
		
		function get_css_content($end_uri){
			$code=$this->get_content($end_uri);
			// remove comments
			$code= preg_replace("/(?:\/\*(?:.|\n|\r|\t)*?(?:\*\/|$))/s", "", $code);
			// remove spaces
			$code= preg_replace('/(( |\t|\r)*\n( |\t)*)+/s', "", $code);
			// remove spaces
			$code= preg_replace('/( |\t|\r)?(\:|,|\{|\})( |\t|\r)+/', "$2", $code);
		
			$this->prepare_string_for_quotes($code);
			return $code;
		}
		
		function get_html_content($end_uri){
			$code=$this->get_content($end_uri);
			//$code= preg_replace('/(\"(?:\\\"|[^\"])*(?:\"|$))|' . "(\'(?:\\\'|[^\'])*(?:\'|$))|(?:\/\/(?:.|\r|\t)*?(\n|$))|(?:\/\*(?:.|\n|\r|\t)*?(?:\*\/|$))/s", "$1$2$3", $code);
			$code= preg_replace('/(( |\t|\r)*\n( |\t)*)+/s', " ", $code);
			$this->prepare_string_for_quotes($code);
			return $code;
		}
		
		function prepare_string_for_quotes(&$str){
			// prepare the code to be putted into quotes 
			/*$pattern= array("/(\\\\)?\"/", '/\\\n/'	, '/\\\r/'	, "/(\r?\n)/");
			$replace= array('$1$1\\"', '\\\\\\n', '\\\\\\r'	, '\\\n"$1+"');*/
			$pattern= array("/(\\\\)?\"/", '/\\\n/'	, '/\\\r/'	, "/(\r?\n)/");
			if($this->param['compress'])
				$replace= array('$1$1\\"', '\\\\\\n', '\\\\\\r'	, '\n');
			else
				$replace= array('$1$1\\"', '\\\\\\n', '\\\\\\r'	, "\\n\"\n+\"");
			$str= preg_replace($pattern, $replace, $str);
		}
		
		function replace_scripts($var, $param1, $param2)
		{
			$this->$var=stripslashes($param2);
	        return $param1."[];";
		}

		/* for php version that have not thoses functions */
		function file_get_contents($file)
		{
			$fd = fopen($file, 'rb');
			$content = fread($fd, filesize($file));
			fclose($fd);
			$this->file_loaded_size+= strlen($content);
			return $content;				
		}
		
		function file_put_contents($file, &$content, $mtime=-1)
		{
			if($mtime==-1)
				$mtime=time();
			$fp = @fopen($file, "wb");
			if ($fp) {
				fwrite($fp, $content);
				fclose($fp);
				touch($file, $mtime);
				return true;
			}
			return false;
		}
		
		function get_microtime()
		{
		   list($usec, $sec) = explode(" ", microtime());
		   return ((float)$usec + (float)$sec);
		}
	}	
?>
                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/edit_area/manage_area.js                                                      0000777 0000000 0000000 00000056203 12534142432 020335  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   	EditArea.prototype.focus = function() {
		this.textarea.focus();
		this.textareaFocused=true;
	};


	EditArea.prototype.check_line_selection= function(timer_checkup){
		var changes, infos, new_top, new_width,i;
		
		var t1=t2=t2_1=t3=tLines=tend= new Date().getTime();
		// l'editeur n'existe plus => on quitte
		if(!editAreas[this.id])
			return false;
		
		if(!this.smooth_selection && !this.do_highlight)
		{
			//do nothing
		}
		else if(this.textareaFocused && editAreas[this.id]["displayed"]==true && this.isResizing==false)
		{
			infos	= this.get_selection_infos();
			changes	= this.checkTextEvolution( typeof( this.last_selection['full_text'] ) == 'undefined' ? '' : this.last_selection['full_text'], infos['full_text'] );
		
			t2= new Date().getTime();
			
			// if selection change
			if(this.last_selection["line_start"] != infos["line_start"] || this.last_selection["line_nb"] != infos["line_nb"] || infos["full_text"] != this.last_selection["full_text"] || this.reload_highlight || this.last_selection["selectionStart"] != infos["selectionStart"] || this.last_selection["selectionEnd"] != infos["selectionEnd"] || !timer_checkup )
			{
				// move and adjust text selection elements
				new_top		= this.getLinePosTop( infos["line_start"] );
				new_width	= Math.max(this.textarea.scrollWidth, this.container.clientWidth -50);
				this.selection_field.style.top=this.selection_field_text.style.top=new_top+"px";
				if(!this.settings['word_wrap']){	
					this.selection_field.style.width=this.selection_field_text.style.width=this.test_font_size.style.width=new_width+"px";
				}
				
				// usefull? => _$("cursor_pos").style.top=new_top+"px";	
		
				if(this.do_highlight==true)
				{
					// fill selection elements
					var curr_text	= infos["full_text"].split("\n");
					var content		= "";
					//alert("length: "+curr_text.length+ " i: "+ Math.max(0,infos["line_start"]-1)+ " end: "+Math.min(curr_text.length, infos["line_start"]+infos["line_nb"]-1)+ " line: "+infos["line_start"]+" [0]: "+curr_text[0]+" [1]: "+curr_text[1]);
					var start		= Math.max(0,infos["line_start"]-1);
					var end			= Math.min(curr_text.length, infos["line_start"]+infos["line_nb"]-1);
					
					//curr_text[start]= curr_text[start].substr(0,infos["curr_pos"]-1) +"¤_overline_¤"+ curr_text[start].substr(infos["curr_pos"]-1);
					for(i=start; i< end; i++){
						content+= curr_text[i]+"\n";	
					}
					
					// add special chars arround selected characters
					selLength	= infos['selectionEnd'] - infos['selectionStart'];
					content		= content.substr( 0, infos["curr_pos"] - 1 ) + "\r\r" + content.substr( infos["curr_pos"] - 1, selLength ) + "\r\r" + content.substr( infos["curr_pos"] - 1 + selLength );
					content		= '<span>'+ content.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace("\r\r", '</span><strong>').replace("\r\r", '</strong><span>') +'</span>';
					
					if( this.isIE || ( this.isOpera && this.isOpera < 9.6 ) ) {
						this.selection_field.innerHTML= "<pre>" + content.replace(/^\r?\n/, "<br>") + "</pre>";
					} else {
						this.selection_field.innerHTML= content;
					}
					this.selection_field_text.innerHTML = this.selection_field.innerHTML;
					t2_1 = new Date().getTime();
					// check if we need to update the highlighted background 
					if(this.reload_highlight || (infos["full_text"] != this.last_text_to_highlight && (this.last_selection["line_start"]!=infos["line_start"] || this.show_line_colors || this.settings['word_wrap'] || this.last_selection["line_nb"]!=infos["line_nb"] || this.last_selection["nb_line"]!=infos["nb_line"]) ) )
					{
						this.maj_highlight(infos);
					}
				}		
			}
			t3= new Date().getTime();
			
			// manage line heights
			if( this.settings['word_wrap'] && infos["full_text"] != this.last_selection["full_text"])
			{
				// refresh only 1 line if text change concern only one line and that the total line number has not changed
				if( changes.newText.split("\n").length == 1 && this.last_selection['nb_line'] && infos['nb_line'] == this.last_selection['nb_line'] )
				{
					this.fixLinesHeight( infos['full_text'], changes.lineStart, changes.lineStart );
				}
				else
				{
					this.fixLinesHeight( infos['full_text'], changes.lineStart, -1 );
				}
			}
		
			tLines= new Date().getTime();
			// manage bracket finding
			if( infos["line_start"] != this.last_selection["line_start"] || infos["curr_pos"] != this.last_selection["curr_pos"] || infos["full_text"].length!=this.last_selection["full_text"].length || this.reload_highlight || !timer_checkup )
			{
				// move _cursor_pos
				var selec_char= infos["curr_line"].charAt(infos["curr_pos"]-1);
				var no_real_move=true;
				if(infos["line_nb"]==1 && (this.assocBracket[selec_char] || this.revertAssocBracket[selec_char]) ){
					
					no_real_move=false;					
					//findEndBracket(infos["line_start"], infos["curr_pos"], selec_char);
					if(this.findEndBracket(infos, selec_char) === true){
						_$("end_bracket").style.visibility	="visible";
						_$("cursor_pos").style.visibility	="visible";
						_$("cursor_pos").innerHTML			= selec_char;
						_$("end_bracket").innerHTML			= (this.assocBracket[selec_char] || this.revertAssocBracket[selec_char]);
					}else{
						_$("end_bracket").style.visibility	="hidden";
						_$("cursor_pos").style.visibility	="hidden";
					}
				}else{
					_$("cursor_pos").style.visibility	="hidden";
					_$("end_bracket").style.visibility	="hidden";
				}
				//alert("move cursor");
				this.displayToCursorPosition("cursor_pos", infos["line_start"], infos["curr_pos"]-1, infos["curr_line"], no_real_move);
				if(infos["line_nb"]==1 && infos["line_start"]!=this.last_selection["line_start"])
					this.scroll_to_view();
			}
			this.last_selection=infos;
		}
		
		tend= new Date().getTime();
		//if( (tend-t1) > 7 )
		//	console.log( "tps total: "+ (tend-t1) + " tps get_infos: "+ (t2-t1)+ " tps selec: "+ (t2_1-t2)+ " tps highlight: "+ (t3-t2_1) +" tps lines: "+ (tLines-t3) +" tps cursor+lines: "+ (tend-tLines)+" \n" );
		
		
		if(timer_checkup){
			setTimeout("editArea.check_line_selection(true)", this.check_line_selection_timer);
		}
	};


	EditArea.prototype.get_selection_infos= function(){
		var sel={}, start, end, len, str;
	
		this.getIESelection();
		start	= this.textarea.selectionStart;
		end		= this.textarea.selectionEnd;		
		
		if( this.last_selection["selectionStart"] == start && this.last_selection["selectionEnd"] == end && this.last_selection["full_text"] == this.textarea.value )
		{	
			return this.last_selection;
		}
			
		if(this.tabulation!="\t" && this.textarea.value.indexOf("\t")!=-1) 
		{	// can append only after copy/paste 
			len		= this.textarea.value.length;
			this.textarea.value	= this.replace_tab(this.textarea.value);
			start	= end	= start+(this.textarea.value.length-len);
			this.area_select( start, 0 );
		}
		
		sel["selectionStart"]	= start;
		sel["selectionEnd"]		= end;		
		sel["full_text"]		= this.textarea.value;
		sel["line_start"]		= 1;
		sel["line_nb"]			= 1;
		sel["curr_pos"]			= 0;
		sel["curr_line"]		= "";
		sel["indexOfCursor"]	= 0;
		sel["selec_direction"]	= this.last_selection["selec_direction"];

		//return sel;	
		var splitTab= sel["full_text"].split("\n");
		var nbLine	= Math.max(0, splitTab.length);		
		var nbChar	= Math.max(0, sel["full_text"].length - (nbLine - 1));	// (remove \n caracters from the count)
		if( sel["full_text"].indexOf("\r") != -1 )
			nbChar	= nbChar - ( nbLine - 1 );		// (remove \r caracters from the count)
		sel["nb_line"]	= nbLine;		
		sel["nb_char"]	= nbChar;
	
		if(start>0){
			str					= sel["full_text"].substr(0,start);
			sel["curr_pos"]		= start - str.lastIndexOf("\n");
			sel["line_start"]	= Math.max(1, str.split("\n").length);
		}else{
			sel["curr_pos"]=1;
		}
		if(end>start){
			sel["line_nb"]=sel["full_text"].substring(start,end).split("\n").length;
		}
		sel["indexOfCursor"]=start;		
		sel["curr_line"]=splitTab[Math.max(0,sel["line_start"]-1)];
	
		// determine in which direction the selection grow
		if(sel["selectionStart"] == this.last_selection["selectionStart"]){
			if(sel["selectionEnd"]>this.last_selection["selectionEnd"])
				sel["selec_direction"]= "down";
			else if(sel["selectionEnd"] == this.last_selection["selectionStart"])
				sel["selec_direction"]= this.last_selection["selec_direction"];
		}else if(sel["selectionStart"] == this.last_selection["selectionEnd"] && sel["selectionEnd"]>this.last_selection["selectionEnd"]){
			sel["selec_direction"]= "down";
		}else{
			sel["selec_direction"]= "up";
		}
		
		_$("nbLine").innerHTML	= nbLine;		
		_$("nbChar").innerHTML	= nbChar;		
		_$("linePos").innerHTML	= sel["line_start"];
		_$("currPos").innerHTML	= sel["curr_pos"];

		return sel;		
	};
	
	// set IE position in Firefox mode (textarea.selectionStart and textarea.selectionEnd)
	EditArea.prototype.getIESelection= function(){
		var selectionStart, selectionEnd, range, stored_range;
		
		if( !this.isIE )
			return false;
			
		// make it work as nowrap mode (easier for range manipulation with lineHeight)
		if( this.settings['word_wrap'] )
			this.textarea.wrap='off';
			
		try{
			range			= document.selection.createRange();
			stored_range	= range.duplicate();
			stored_range.moveToElementText( this.textarea );
			stored_range.setEndPoint( 'EndToEnd', range );
			if( stored_range.parentElement() != this.textarea )
				throw "invalid focus";
				
			// the range don't take care of empty lines in the end of the selection
			var scrollTop	= this.result.scrollTop + document.body.scrollTop;
			var relative_top= range.offsetTop - parent.calculeOffsetTop(this.textarea) + scrollTop;
			var line_start	= Math.round((relative_top / this.lineHeight) +1);
			var line_nb		= Math.round( range.boundingHeight / this.lineHeight );
						
			selectionStart	= stored_range.text.length - range.text.length;		
			selectionStart	+= ( line_start - this.textarea.value.substr(0, selectionStart).split("\n").length)*2;		// count missing empty \r to the selection
			selectionStart	-= ( line_start - this.textarea.value.substr(0, selectionStart).split("\n").length ) * 2;
			
			selectionEnd	= selectionStart + range.text.length;		
			selectionEnd	+= (line_start + line_nb - 1 - this.textarea.value.substr(0, selectionEnd ).split("\n").length)*2;			
		
			this.textarea.selectionStart	= selectionStart;
			this.textarea.selectionEnd		= selectionEnd;
		}
		catch(e){}
		
		// restore wrap mode
		if( this.settings['word_wrap'] )
			this.textarea.wrap='soft';
	};
	
	// select the text for IE (and take care of \r caracters)
	EditArea.prototype.setIESelection= function(){
		var a = this.textarea, nbLineStart, nbLineEnd, range;
		
		if( !this.isIE )
			return false;
		
		nbLineStart	= a.value.substr(0, a.selectionStart).split("\n").length - 1;
		nbLineEnd 	= a.value.substr(0, a.selectionEnd).split("\n").length - 1;
		range		= document.selection.createRange();
		range.moveToElementText( a );
		range.setEndPoint( 'EndToStart', range );
		
		range.moveStart('character', a.selectionStart - nbLineStart);
		range.moveEnd('character', a.selectionEnd - nbLineEnd - (a.selectionStart - nbLineStart)  );
		range.select();
	};
	
	
	
	EditArea.prototype.checkTextEvolution=function(lastText,newText){
		// ch will contain changes datas
		var ch={},baseStep=200, cpt=0, end, step,tStart=new Date().getTime();
	
		end		= Math.min(newText.length, lastText.length);
        step	= baseStep;
        // find how many chars are similar at the begin of the text						
		while( cpt<end && step>=1 ){
            if(lastText.substr(cpt, step) == newText.substr(cpt, step)){
                cpt+= step;
            }else{
                step= Math.floor(step/2);
            }
		}
		
		ch.posStart	= cpt;
		ch.lineStart= newText.substr(0, ch.posStart).split("\n").length -1;						
		
		cpt_last	= lastText.length;
        cpt			= newText.length;
        step		= baseStep;			
        // find how many chars are similar at the end of the text						
		while( cpt>=0 && cpt_last>=0 && step>=1 ){
            if(lastText.substr(cpt_last-step, step) == newText.substr(cpt-step, step)){
                cpt-= step;
                cpt_last-= step;
            }else{
                step= Math.floor(step/2);
            }
		}
		
		ch.posNewEnd	= cpt;
		ch.posLastEnd	= cpt_last;
		if(ch.posNewEnd<=ch.posStart){
			if(lastText.length < newText.length){
				ch.posNewEnd= ch.posStart + newText.length - lastText.length;
				ch.posLastEnd= ch.posStart;
			}else{
				ch.posLastEnd= ch.posStart + lastText.length - newText.length;
				ch.posNewEnd= ch.posStart;
			}
		} 
		ch.newText		= newText.substring(ch.posStart, ch.posNewEnd);
		ch.lastText		= lastText.substring(ch.posStart, ch.posLastEnd);			            
		
		ch.lineNewEnd	= newText.substr(0, ch.posNewEnd).split("\n").length -1;
		ch.lineLastEnd	= lastText.substr(0, ch.posLastEnd).split("\n").length -1;
		
		ch.newTextLine	= newText.split("\n").slice(ch.lineStart, ch.lineNewEnd+1).join("\n");
		ch.lastTextLine	= lastText.split("\n").slice(ch.lineStart, ch.lineLastEnd+1).join("\n");
		//console.log( ch );
		return ch;	
	};
	
	EditArea.prototype.tab_selection= function(){
		if(this.is_tabbing)
			return;
		this.is_tabbing=true;
		//infos=getSelectionInfos();
		//if( document.selection ){
		this.getIESelection();
		/* Insertion du code de formatage */
		var start = this.textarea.selectionStart;
		var end = this.textarea.selectionEnd;
		var insText = this.textarea.value.substring(start, end);
		
		/* Insert tabulation and ajust cursor position */
		var pos_start=start;
		var pos_end=end;
		if (insText.length == 0) {
			// if only one line selected
			this.textarea.value = this.textarea.value.substr(0, start) + this.tabulation + this.textarea.value.substr(end);
			pos_start = start + this.tabulation.length;
			pos_end=pos_start;
		} else {
			start= Math.max(0, this.textarea.value.substr(0, start).lastIndexOf("\n")+1);
			endText=this.textarea.value.substr(end);
			startText=this.textarea.value.substr(0, start);
			tmp= this.textarea.value.substring(start, end).split("\n");
			insText= this.tabulation+tmp.join("\n"+this.tabulation);
			this.textarea.value = startText + insText + endText;
			pos_start = start;
			pos_end= this.textarea.value.indexOf("\n", startText.length + insText.length);
			if(pos_end==-1)
				pos_end=this.textarea.value.length;
			//pos = start + repdeb.length + insText.length + ;
		}
		this.textarea.selectionStart = pos_start;
		this.textarea.selectionEnd = pos_end;
		
		//if( document.selection ){
		if(this.isIE)
		{
			this.setIESelection();
			setTimeout("editArea.is_tabbing=false;", 100);	// IE can't accept to make 2 tabulation without a little break between both
		}
		else
		{ 
			this.is_tabbing=false;
		}	
		
  	};
	
	EditArea.prototype.invert_tab_selection= function(){
		var t=this, a=this.textarea;
		if(t.is_tabbing)
			return;
		t.is_tabbing=true;
		//infos=getSelectionInfos();
		//if( document.selection ){
		t.getIESelection();
		
		var start	= a.selectionStart;
		var end		= a.selectionEnd;
		var insText	= a.value.substring(start, end);
		
		/* Tab remove and cursor seleciton adjust */
		var pos_start=start;
		var pos_end=end;
		if (insText.length == 0) {
			if(a.value.substring(start-t.tabulation.length, start)==t.tabulation)
			{
				a.value		= a.value.substr(0, start-t.tabulation.length) + a.value.substr(end);
				pos_start	= Math.max(0, start-t.tabulation.length);
				pos_end		= pos_start;
			}	
			/*
			a.value = a.value.substr(0, start) + t.tabulation + insText + a.value.substr(end);
			pos_start = start + t.tabulation.length;
			pos_end=pos_start;*/
		} else {
			start		= a.value.substr(0, start).lastIndexOf("\n")+1;
			endText		= a.value.substr(end);
			startText	= a.value.substr(0, start);
			tmp			= a.value.substring(start, end).split("\n");
			insText		= "";
			for(i=0; i<tmp.length; i++){				
				for(j=0; j<t.tab_nb_char; j++){
					if(tmp[i].charAt(0)=="\t"){
						tmp[i]=tmp[i].substr(1);
						j=t.tab_nb_char;
					}else if(tmp[i].charAt(0)==" ")
						tmp[i]=tmp[i].substr(1);
				}		
				insText+=tmp[i];
				if(i<tmp.length-1)
					insText+="\n";
			}
			//insText+="_";
			a.value		= startText + insText + endText;
			pos_start	= start;
			pos_end		= a.value.indexOf("\n", startText.length + insText.length);
			if(pos_end==-1)
				pos_end=a.value.length;
			//pos = start + repdeb.length + insText.length + ;
		}
		a.selectionStart = pos_start;
		a.selectionEnd = pos_end;
		
		//if( document.selection ){
		if(t.isIE){
			// select the text for IE
			t.setIESelection();
			setTimeout("editArea.is_tabbing=false;", 100);	// IE can accept to make 2 tabulation without a little break between both
		}else
			t.is_tabbing=false;
  	};
	
	EditArea.prototype.press_enter= function(){		
		if(!this.smooth_selection)
			return false;
		this.getIESelection();
		var scrollTop= this.result.scrollTop;
		var scrollLeft= this.result.scrollLeft;
		var start=this.textarea.selectionStart;
		var end= this.textarea.selectionEnd;
		var start_last_line= Math.max(0 , this.textarea.value.substring(0, start).lastIndexOf("\n") + 1 );
		var begin_line= this.textarea.value.substring(start_last_line, start).replace(/^([ \t]*).*/gm, "$1");
		var lineStart = this.textarea.value.substring(0, start).split("\n").length;
		if(begin_line=="\n" || begin_line=="\r" || begin_line.length==0)
		{
			return false;
		}
			
		if(this.isIE || ( this.isOpera && this.isOpera < 9.6 ) ){
			begin_line="\r\n"+ begin_line;
		}else{
			begin_line="\n"+ begin_line;
		}	
		//alert(start_last_line+" strat: "+start +"\n"+this.textarea.value.substring(start_last_line, start)+"\n_"+begin_line+"_")
		this.textarea.value= this.textarea.value.substring(0, start) + begin_line + this.textarea.value.substring(end);
		
		this.area_select(start+ begin_line.length ,0);
		// during this process IE scroll back to the top of the textarea
		if(this.isIE){
			this.result.scrollTop	= scrollTop;
			this.result.scrollLeft	= scrollLeft;
		}
		return true;
		
	};
	
	EditArea.prototype.findEndBracket= function(infos, bracket){
			
		var start=infos["indexOfCursor"];
		var normal_order=true;
		//curr_text=infos["full_text"].split("\n");
		if(this.assocBracket[bracket])
			endBracket=this.assocBracket[bracket];
		else if(this.revertAssocBracket[bracket]){
			endBracket=this.revertAssocBracket[bracket];
			normal_order=false;
		}	
		var end=-1;
		var nbBracketOpen=0;
		
		for(var i=start; i<infos["full_text"].length && i>=0; ){
			if(infos["full_text"].charAt(i)==endBracket){				
				nbBracketOpen--;
				if(nbBracketOpen<=0){
					//i=infos["full_text"].length;
					end=i;
					break;
				}
			}else if(infos["full_text"].charAt(i)==bracket)
				nbBracketOpen++;
			if(normal_order)
				i++;
			else
				i--;
		}
		
		//end=infos["full_text"].indexOf("}", start);
		if(end==-1)
			return false;	
		var endLastLine=infos["full_text"].substr(0, end).lastIndexOf("\n");			
		if(endLastLine==-1)
			line=1;
		else
			line= infos["full_text"].substr(0, endLastLine).split("\n").length + 1;
					
		var curPos= end - endLastLine - 1;
		var endLineLength	= infos["full_text"].substring(end).split("\n")[0].length;
		this.displayToCursorPosition("end_bracket", line, curPos, infos["full_text"].substring(endLastLine +1, end + endLineLength));
		return true;
	};
	
	EditArea.prototype.displayToCursorPosition= function(id, start_line, cur_pos, lineContent, no_real_move){
		var elem,dest,content,posLeft=0,posTop,fixPadding,topOffset,endElem;	

		elem		= this.test_font_size;
		dest		= _$(id);
		content		= "<span id='test_font_size_inner'>"+lineContent.substr(0, cur_pos).replace(/&/g,"&amp;").replace(/</g,"&lt;")+"</span><span id='endTestFont'>"+lineContent.substr(cur_pos).replace(/&/g,"&amp;").replace(/</g,"&lt;")+"</span>";
		if( this.isIE || ( this.isOpera && this.isOpera < 9.6 ) ) {
			elem.innerHTML= "<pre>" + content.replace(/^\r?\n/, "<br>") + "</pre>";
		} else {
			elem.innerHTML= content;
		}
		

		endElem		= _$('endTestFont');
		topOffset	= endElem.offsetTop;
		fixPadding	= parseInt( this.content_highlight.style.paddingLeft.replace("px", "") );
		posLeft 	= 45 + endElem.offsetLeft + ( !isNaN( fixPadding ) && topOffset > 0 ? fixPadding : 0 );
		posTop		= this.getLinePosTop( start_line ) + topOffset;// + Math.floor( ( endElem.offsetHeight - 1 ) / this.lineHeight ) * this.lineHeight;
	
		// detect the case where the span start on a line but has no display on it
		if( this.isIE && cur_pos > 0 && endElem.offsetLeft == 0 )
		{
			posTop	+=	this.lineHeight;
		}
		if(no_real_move!=true){	// when the cursor is hidden no need to move him
			dest.style.top=posTop+"px";
			dest.style.left=posLeft+"px";	
		}
		// usefull for smarter scroll
		dest.cursor_top=posTop;
		dest.cursor_left=posLeft;	
	//	_$(id).style.marginLeft=posLeft+"px";
	};
	
	EditArea.prototype.getLinePosTop= function(start_line){
		var elem= _$('line_'+ start_line), posTop=0;
		if( elem )
			posTop	= elem.offsetTop;
		else
			posTop	= this.lineHeight * (start_line-1);
		return posTop;
	};
	
	
	// return the dislpayed height of a text (take word-wrap into account)
	EditArea.prototype.getTextHeight= function(text){
		var t=this,elem,height;
		elem		= t.test_font_size;
		content		= text.replace(/&/g,"&amp;").replace(/</g,"&lt;");
		if( t.isIE || ( this.isOpera && this.isOpera < 9.6 ) ) {
			elem.innerHTML= "<pre>" + content.replace(/^\r?\n/, "<br>") + "</pre>";
		} else {
			elem.innerHTML= content;
		}
		height	= elem.offsetHeight;
		height	= Math.max( 1, Math.floor( elem.offsetHeight / this.lineHeight ) ) * this.lineHeight;
		return height;
	};

	/**
	 * Fix line height for the given lines
	 * @param Integer linestart
	 * @param Integer lineEnd End line or -1 to cover all lines
	 */
	EditArea.prototype.fixLinesHeight= function( textValue, lineStart,lineEnd ){
		var aText = textValue.split("\n");
		if( lineEnd == -1 )
			lineEnd	= aText.length-1;
		for( var i = Math.max(0, lineStart); i <= lineEnd; i++ )
		{
			if( elem = _$('line_'+ ( i+1 ) ) )
			{
				elem.style.height= typeof( aText[i] ) != "undefined" ? this.getTextHeight( aText[i] )+"px" : this.lineHeight;
			}
		}
	};
	
	EditArea.prototype.area_select= function(start, length){
		this.textarea.focus();
		
		start	= Math.max(0, Math.min(this.textarea.value.length, start));
		end		= Math.max(start, Math.min(this.textarea.value.length, start+length));

		if(this.isIE)
		{
			this.textarea.selectionStart	= start;
			this.textarea.selectionEnd		= end;		
			this.setIESelection();
		}
		else
		{
			// Opera bug when moving selection start and selection end
			if(this.isOpera && this.isOpera < 9.6 )
			{	
				this.textarea.setSelectionRange(0, 0);
			}
			this.textarea.setSelectionRange(start, end);
		}
		this.check_line_selection();
	};
	
	
	EditArea.prototype.area_get_selection= function(){
		var text="";
		if( document.selection ){
			var range = document.selection.createRange();
			text=range.text;
		}else{
			text= this.textarea.value.substring(this.textarea.selectionStart, this.textarea.selectionEnd);
		}
		return text;			
	};                                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/edit_area/images_word_wrap.gif                                                0000777 0000000 0000000 00000001667 12534142432 021603  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a       LFdWOod^|Wj4vtlLĄ~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                !   ,        	H*D8@Ç((/j((@@C:ࠥ˗.U`Ȓ&gKiT0?=ntAhJՀӋ@UOd:i}Wb
w-ܻTw¿ ;                                                                         ./mvappsvr/docroot/db/edit_area/images_processing.gif                                               0000777 0000000 0000000 00000001471 12534142432 021744  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a      333LLLfff!NETSCAPE2.0   !
  ,       Hɉ ZgՆ}HIl ta ޭpe0
&|.Q^ڭ"'N !
  ,       HBZ  }HIl0tq<ޭp@&|.BQ^ڭ"'N !
  ,       HZ}HIlAt <ޭpP&|.Q^ڭ"'N !
  ,       HƠZ'!}HIlTQtS<ޭp`  &|.Q^ڭ"'N !
  ,       HZg)}HIlat <ޭpp&|. Q^ڭ"'N !
  ,       HJZ1}HIlqt0<ޭp &|.@Q^ڭ"'N !
  ,       HZ9}HIl tA<ޭp%&|.Q^ڭ"'N !
  ,       HΡZ' }HIlTtSQ<ޭpE &|.Q^ڭ"'N ;                                                                                                                                                                                                       ./mvappsvr/docroot/db/edit_area/images_search.gif                                                   0000777 0000000 0000000 00000000277 12534142432 021040  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   !@yUoy6R_t|Eh!F   !   ,       lI8o Ԁ[0fP
jz)@p*6(J	#p 4*iۀ;
mq]*q{v<|EbA3  ;                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/edit_area/keyboard.js                                                         0000777 0000000 0000000 00000010357 12534142432 017715  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   var EA_keys = {8:"Retour arriere",9:"Tabulation",12:"Milieu (pave numerique)",13:"Entrer",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"Verr Maj",27:"Esc",32:"Space",33:"Page up",34:"Page down",35:"End",36:"Begin",37:"Left",38:"Up",39:"Right",40:"Down",44:"Impr ecran",45:"Inser",46:"Suppr",91:"Menu Demarrer Windows / touche pomme Mac",92:"Menu Demarrer Windows",93:"Menu contextuel Windows",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Verr Num",145:"Arret defil"};



function keyDown(e){
	if(!e){	// if IE
		e=event;
	}
	
	// send the event to the plugins
	for(var i in editArea.plugins){
		if(typeof(editArea.plugins[i].onkeydown)=="function"){
			if(editArea.plugins[i].onkeydown(e)===false){ // stop propaging
				if(editArea.isIE)
					e.keyCode=0;
				return false;
			}
		}
	}

	var target_id=(e.target || e.srcElement).id;
	var use=false;
	if (EA_keys[e.keyCode])
		letter=EA_keys[e.keyCode];
	else
		letter=String.fromCharCode(e.keyCode);
	
	var low_letter= letter.toLowerCase();
			
	if(letter=="Page up" && !editArea.isOpera){
		editArea.execCommand("scroll_page", {"dir": "up", "shift": ShiftPressed(e)});
		use=true;
	}else if(letter=="Page down" && !editArea.isOpera){
		editArea.execCommand("scroll_page", {"dir": "down", "shift": ShiftPressed(e)});
		use=true;
	}else if(editArea.is_editable==false){
		// do nothing but also do nothing else (allow to navigate with page up and page down)
		return true;
	}else if(letter=="Tabulation" && target_id=="textarea" && !CtrlPressed(e) && !AltPressed(e)){	
		if(ShiftPressed(e))
			editArea.execCommand("invert_tab_selection");
		else
			editArea.execCommand("tab_selection");
		
		use=true;
		if(editArea.isOpera || (editArea.isFirefox && editArea.isMac) )	// opera && firefox mac can't cancel tabulation events...
			setTimeout("editArea.execCommand('focus');", 1);
	}else if(letter=="Entrer" && target_id=="textarea"){
		if(editArea.press_enter())
			use=true;
	}else if(letter=="Entrer" && target_id=="area_search"){
		editArea.execCommand("area_search");
		use=true;
	}else  if(letter=="Esc"){
		editArea.execCommand("close_all_inline_popup", e);
		use=true;
	}else if(CtrlPressed(e) && !AltPressed(e) && !ShiftPressed(e)){
		switch(low_letter){
			case "f":				
				editArea.execCommand("area_search");
				use=true;
				break;
			case "r":
				editArea.execCommand("area_replace");
				use=true;
				break;
			case "q":
				editArea.execCommand("close_all_inline_popup", e);
				use=true;
				break;
			case "h":
				editArea.execCommand("change_highlight");			
				use=true;
				break;
			case "g":
				setTimeout("editArea.execCommand('go_to_line');", 5);	// the prompt stop the return false otherwise
				use=true;
				break;
			case "e":
				editArea.execCommand("show_help");
				use=true;
				break;
			case "z":
				use=true;
				editArea.execCommand("undo");
				break;
			case "y":
				use=true;
				editArea.execCommand("redo");
				break;
			default:
				break;			
		}		
	}		
	
	// check to disable the redo possibility if the textarea content change
	if(editArea.next.length > 0){
		setTimeout("editArea.check_redo();", 10);
	}
	
	setTimeout("editArea.check_file_changes();", 10);
	
	
	if(use){
		// in case of a control that sould'nt be used by IE but that is used => THROW a javascript error that will stop key action
		if(editArea.isIE)
			e.keyCode=0;
		return false;
	}
	//alert("Test: "+ letter + " ("+e.keyCode+") ALT: "+ AltPressed(e) + " CTRL "+ CtrlPressed(e) + " SHIFT "+ ShiftPressed(e));
	
	return true;
	
};


// return true if Alt key is pressed
function AltPressed(e) {
	if (window.event) {
		return (window.event.altKey);
	} else {
		if(e.modifiers)
			return (e.altKey || (e.modifiers % 2));
		else
			return e.altKey;
	}
};

// return true if Ctrl key is pressed
function CtrlPressed(e) {
	if (window.event) {
		return (window.event.ctrlKey);
	} else {
		return (e.ctrlKey || (e.modifiers==2) || (e.modifiers==3) || (e.modifiers>5));
	}
};

// return true if Shift key is pressed
function ShiftPressed(e) {
	if (window.event) {
		return (window.event.shiftKey);
	} else {
		return (e.shiftKey || (e.modifiers>3));
	}
};
                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/edit_area/langs_es.js                                                         0000777 0000000 0000000 00000004142 12534142432 017703  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["es"]={
new_document: "nuevo documento vacío",
search_button: "buscar y reemplazar",
search_command: "buscar siguiente / abrir área de búsqueda",
search: "buscar",
replace: "reemplazar",
replace_command: "reemplazar / abrir área de búsqueda",
find_next: "encontrar siguiente",
replace_all: "reemplazar todos",
reg_exp: "expresiones regulares",
match_case: "coincidir capitalización",
not_found: "no encontrado.",
occurrence_replaced: "ocurrencias reemplazadas.",
search_field_empty: "Campo de búsqueda vacío",
restart_search_at_begin: "Se ha llegado al final del área. Se va a seguir desde el principio.",
move_popup: "mover la ventana de búsqueda",
font_size: "--Tamaño de la fuente--",
go_to_line: "ir a la línea",
go_to_line_prompt: "ir a la línea número:",
undo: "deshacer",
redo: "rehacer",
change_smooth_selection: "activar/desactivar algunas características de visualización (visualización más inteligente pero más carga de CPU)",
highlight: "intercambiar resaltado de sintaxis",
reset_highlight: "reinicializar resaltado (si no esta sincronizado con el texto)",
word_wrap: "toggle word wrapping mode",
help: "acerca",
save: "guardar",
load: "cargar",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Posición",
total: "Total",
close_popup: "recuadro de cierre",
shortcuts: "Atajos",
add_tab: "añadir tabulado al texto",
remove_tab: "borrar tabulado del texto",
about_notice: "Aviso: el resaltado de sintaxis sólo funciona para texto pequeño",
toggle: "Cambiar editor",
accesskey: "Tecla de acceso",
tab: "Tab",
shift: "Mayúsc",
ctrl: "Ctrl",
esc: "Esc",
processing: "Procesando...",
fullscreen: "pantalla completa",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/edit_area/images_undo.gif                                                     0000777 0000000 0000000 00000000257 12534142432 020536  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   :]?uܹߧ^~_~r?gQb蔳R   !   ,       \I8:=Gc6`H%"$^h8X@P.aLbGB@0DX"x E=YRp8o!]f ;                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/edit_area/images_fullscreen.gif                                               0000777 0000000 0000000 00000000306 12534142432 021726  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   2JbLttȒiBw|W}   !   ,       sI8k4di6T#!T8/7ѡ`bjd"q`BUDIWIXp.SyњsEG[[]]{  ;                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/edit_area/edit_area.js                                                        0000777 0000000 0000000 00000041511 12534142432 020026  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /******
 *
 *	EditArea 
 * 	Developped by Christophe Dolivet
 *	Released under LGPL, Apache and BSD licenses (use the one you want)
 *
******/

	function EditArea(){
		var t=this;
		t.error= false;	// to know if load is interrrupt
		
		t.inlinePopup= [{popup_id: "area_search_replace", icon_id: "search"},
									{popup_id: "edit_area_help", icon_id: "help"}];
		t.plugins= {};
	
		t.line_number=0;
		
		parent.editAreaLoader.set_browser_infos(t); 	// navigator identification
		// fix IE8 detection as we run in IE7 emulate mode through X-UA <meta> tag
		if( t.isIE >= 8 )
			t.isIE	= 7;
		
		t.last_selection={};		
		t.last_text_to_highlight="";
		t.last_hightlighted_text= "";
		t.syntax_list= [];
		t.allready_used_syntax= {};
		t.check_line_selection_timer= 50;	// the timer delay for modification and/or selection change detection
		
		t.textareaFocused= false;
		t.highlight_selection_line= null;
		t.previous= [];
		t.next= [];
		t.last_undo="";
		t.files= {};
		t.filesIdAssoc= {};
		t.curr_file= '';
		//t.loaded= false;
		t.assocBracket={};
		t.revertAssocBracket= {};		
		// bracket selection init 
		t.assocBracket["("]=")";
		t.assocBracket["{"]="}";
		t.assocBracket["["]="]";		
		for(var index in t.assocBracket){
			t.revertAssocBracket[t.assocBracket[index]]=index;
		}
		t.is_editable= true;
		
		
		/*t.textarea="";	
		
		t.state="declare";
		t.code = []; // store highlight syntax for languagues*/
		// font datas
		t.lineHeight= 16;
		/*t.default_font_family= "monospace";
		t.default_font_size= 10;*/
		t.tab_nb_char= 8;	//nb of white spaces corresponding to a tabulation
		if(t.isOpera)
			t.tab_nb_char= 6;

		t.is_tabbing= false;
		
		t.fullscreen= {'isFull': false};
		
		t.isResizing=false;	// resize var
		
		// init with settings and ID (area_id is a global var defined by editAreaLoader on iframe creation
		t.id= area_id;
		t.settings= editAreas[t.id]["settings"];
		
		if((""+t.settings['replace_tab_by_spaces']).match(/^[0-9]+$/))
		{
			t.tab_nb_char= t.settings['replace_tab_by_spaces'];
			t.tabulation="";
			for(var i=0; i<t.tab_nb_char; i++)
				t.tabulation+=" ";
		}else{
			t.tabulation="\t";
		}
			
		// retrieve the init parameter for syntax
		if(t.settings["syntax_selection_allow"] && t.settings["syntax_selection_allow"].length>0)
			t.syntax_list= t.settings["syntax_selection_allow"].replace(/ /g,"").split(",");
		
		if(t.settings['syntax'])
			t.allready_used_syntax[t.settings['syntax']]=true;
		
		
	};
	EditArea.prototype.init= function(){
		var t=this, a, s=t.settings;
		t.textarea			= _$("textarea");
		t.container			= _$("container");
		t.result			= _$("result");
		t.content_highlight	= _$("content_highlight");
		t.selection_field	= _$("selection_field");
		t.selection_field_text= _$("selection_field_text");
		t.processing_screen	= _$("processing");
		t.editor_area		= _$("editor");
		t.tab_browsing_area	= _$("tab_browsing_area");
		t.test_font_size	= _$("test_font_size");
		a = t.textarea;
		
		if(!s['is_editable'])
			t.set_editable(false);
		
		t.set_show_line_colors( s['show_line_colors'] );
		
		if(syntax_selec= _$("syntax_selection"))
		{
			// set up syntax selection lsit in the toolbar
			for(var i=0; i<t.syntax_list.length; i++) {
				var syntax= t.syntax_list[i];
				var option= document.createElement("option");
				option.value= syntax;
				if(syntax==s['syntax'])
					option.selected= "selected";
				option.innerHTML= t.get_translation("syntax_" + syntax, "word");
				syntax_selec.appendChild(option);
			}
		}
		
		// add plugins buttons in the toolbar
		spans= parent.getChildren(_$("toolbar_1"), "span", "", "", "all", -1);
		
		for(var i=0; i<spans.length; i++){
		
			id=spans[i].id.replace(/tmp_tool_(.*)/, "$1");
			if(id!= spans[i].id){
				for(var j in t.plugins){
					if(typeof(t.plugins[j].get_control_html)=="function" ){
						html=t.plugins[j].get_control_html(id);
						if(html!=false){
							html= t.get_translation(html, "template");
							var new_span= document.createElement("span");
							new_span.innerHTML= html;				
							var father= spans[i].parentNode;
							spans[i].parentNode.replaceChild(new_span, spans[i]);	
							break; // exit the for loop					
						}
					}
				}
			}
		}
		
		// init datas
		//a.value	= 'a';//editAreas[t.id]["textarea"].value;
	
		if(s["debug"])
		{
			t.debug=parent.document.getElementById("edit_area_debug_"+t.id);
		}
		// init size		
		//this.update_size();
		
		if(_$("redo") != null)
			t.switchClassSticky(_$("redo"), 'editAreaButtonDisabled', true);
		
		// insert css rules for highlight mode		
		if(typeof(parent.editAreaLoader.syntax[s["syntax"]])!="undefined"){
			for(var i in parent.editAreaLoader.syntax){
				if (typeof(parent.editAreaLoader.syntax[i]["styles"]) != "undefined"){
					t.add_style(parent.editAreaLoader.syntax[i]["styles"]);
				}
			}
		}
	
		// init key events
		if(t.isOpera)
			_$("editor").onkeypress	= keyDown;
		else
			_$("editor").onkeydown	= keyDown;

		for(var i=0; i<t.inlinePopup.length; i++){
			if(t.isOpera)
				_$(t.inlinePopup[i]["popup_id"]).onkeypress	= keyDown;
			else
				_$(t.inlinePopup[i]["popup_id"]).onkeydown	= keyDown;
		}
		
		if(s["allow_resize"]=="both" || s["allow_resize"]=="x" || s["allow_resize"]=="y")
			t.allow_resize(true);
		
		parent.editAreaLoader.toggle(t.id, "on");
		//a.focus();
		// line selection init
		t.change_smooth_selection_mode(editArea.smooth_selection);
		// highlight
		t.execCommand("change_highlight", s["start_highlight"]);
	
		// get font size datas		
		t.set_font(editArea.settings["font_family"], editArea.settings["font_size"]);
		
		// set unselectable text
		children= parent.getChildren(document.body, "", "selec", "none", "all", -1);
		for(var i=0; i<children.length; i++){
			if(t.isIE)
				children[i].unselectable = true; // IE
			else
				children[i].onmousedown= function(){return false};
		/*	children[i].style.MozUserSelect = "none"; // Moz
			children[i].style.KhtmlUserSelect = "none";  // Konqueror/Safari*/
		}
		
		a.spellcheck= s["gecko_spellcheck"];
	
		/** Browser specific style fixes **/
		
		// fix rendering bug for highlighted lines beginning with no tabs
		if( t.isFirefox >= '3' ) {
			t.content_highlight.style.paddingLeft= "1px";
			t.selection_field.style.paddingLeft= "1px";
			t.selection_field_text.style.paddingLeft= "1px";
		}
		
		if(t.isIE && t.isIE < 8 ){
			a.style.marginTop= "-1px";
		}
		/*
		if(t.isOpera){
			t.editor_area.style.position= "absolute";
		}*/
		
		if( t.isSafari ){
			t.editor_area.style.position	= "absolute";
			a.style.marginLeft		="-3px";
			if( t.isSafari < 3.2 ) // Safari 3.0 (3.1?)
				a.style.marginTop	="1px";
		}
		
		// si le textarea n'est pas grand, un click sous le textarea doit provoquer un focus sur le textarea
		parent.editAreaLoader.add_event(t.result, "click", function(e){ if((e.target || e.srcElement)==editArea.result) { editArea.area_select(editArea.textarea.value.length, 0);}  });
		
		if(s['is_multi_files']!=false)
			t.open_file({'id': t.curr_file, 'text': ''});
	
		t.set_word_wrap( s['word_wrap'] );
		
		setTimeout("editArea.focus();editArea.manage_size();editArea.execCommand('EA_load');", 10);		
		//start checkup routine
		t.check_undo();
		t.check_line_selection(true);
		t.scroll_to_view();
		
		for(var i in t.plugins){
			if(typeof(t.plugins[i].onload)=="function")
				t.plugins[i].onload();
		}
		if(s['fullscreen']==true)
			t.toggle_full_screen(true);
	
		parent.editAreaLoader.add_event(window, "resize", editArea.update_size);
		parent.editAreaLoader.add_event(parent.window, "resize", editArea.update_size);
		parent.editAreaLoader.add_event(top.window, "resize", editArea.update_size);
		parent.editAreaLoader.add_event(window, "unload", function(){
			// in case where editAreaLoader have been already cleaned
			if( parent.editAreaLoader )
			{
				parent.editAreaLoader.remove_event(parent.window, "resize", editArea.update_size);
		  		parent.editAreaLoader.remove_event(top.window, "resize", editArea.update_size);
			}
			if(editAreas[editArea.id] && editAreas[editArea.id]["displayed"]){
				editArea.execCommand("EA_unload");
			}
		});
		
		
		/*date= new Date();
		alert(date.getTime()- parent.editAreaLoader.start_time);*/
	};
	
	
	
	//called by the toggle_on
	EditArea.prototype.update_size= function(){
		var d=document,pd=parent.document,height,width,popup,maxLeft,maxTop;
		
		if( typeof editAreas != 'undefined' && editAreas[editArea.id] && editAreas[editArea.id]["displayed"]==true){
			if(editArea.fullscreen['isFull']){	
				pd.getElementById("frame_"+editArea.id).style.width		= pd.getElementsByTagName("html")[0].clientWidth + "px";
				pd.getElementById("frame_"+editArea.id).style.height	= pd.getElementsByTagName("html")[0].clientHeight + "px";
			}
			
			if(editArea.tab_browsing_area.style.display=='block' && ( !editArea.isIE || editArea.isIE >= 8 ) )
			{
				editArea.tab_browsing_area.style.height	= "0px";
				editArea.tab_browsing_area.style.height	= (editArea.result.offsetTop - editArea.tab_browsing_area.offsetTop -1)+"px";
			}
			
			height	= d.body.offsetHeight - editArea.get_all_toolbar_height() - 4;
			editArea.result.style.height	= height +"px";
			
			width	= d.body.offsetWidth -2;
			editArea.result.style.width		= width+"px";
			//alert("result h: "+ height+" w: "+width+"\ntoolbar h: "+this.get_all_toolbar_height()+"\nbody_h: "+document.body.offsetHeight);
			
			// check that the popups don't get out of the screen
			for( i=0; i < editArea.inlinePopup.length; i++ )
			{
				popup	= _$(editArea.inlinePopup[i]["popup_id"]);
				maxLeft	= d.body.offsetWidth - popup.offsetWidth;
				maxTop	= d.body.offsetHeight - popup.offsetHeight;
				if( popup.offsetTop > maxTop )
					popup.style.top		= maxTop+"px";
				if( popup.offsetLeft > maxLeft )
					popup.style.left	= maxLeft+"px";
			}
			
			editArea.manage_size( true );
			editArea.fixLinesHeight( editArea.textarea.value, 0,-1);
		}		
	};
	
	
	EditArea.prototype.manage_size= function(onlyOneTime){
		if(!editAreas[this.id])
			return false;
			
		if(editAreas[this.id]["displayed"]==true && this.textareaFocused)
		{
			var area_height,resized= false;
			
			//1) Manage display width
			//1.1) Calc the new width to use for display
			if( !this.settings['word_wrap'] )
			{
				var area_width= this.textarea.scrollWidth;
				area_height= this.textarea.scrollHeight;
				// bug on old opera versions
				if(this.isOpera && this.isOpera < 9.6 ){
					area_width=10000; 								
				}
				//1.2) the width is not the same, we must resize elements
				if(this.textarea.previous_scrollWidth!=area_width)
				{	
					this.container.style.width= area_width+"px";
					this.textarea.style.width= area_width+"px";
					this.content_highlight.style.width= area_width+"px";	
					this.textarea.previous_scrollWidth=area_width;
					resized=true;
				}
			}
			// manage wrap width
			if( this.settings['word_wrap'] )
			{
				newW=this.textarea.offsetWidth;
				if( this.isFirefox || this.isIE )
					newW-=2;
				if( this.isSafari )
					newW-=6;
				this.content_highlight.style.width=this.selection_field_text.style.width=this.selection_field.style.width=this.test_font_size.style.width=newW+"px";
			}
			
			//2) Manage display height
			//2.1) Calc the new height to use for display
			if( this.isOpera || this.isFirefox || this.isSafari ) { 
				area_height= this.getLinePosTop( this.last_selection["nb_line"] + 1 );
			} else {
				area_height = this.textarea.scrollHeight;
			}	
			//2.2) the width is not the same, we must resize elements 
			if(this.textarea.previous_scrollHeight!=area_height)	
			{	
				this.container.style.height= (area_height+2)+"px";
				this.textarea.style.height= area_height+"px";
				this.content_highlight.style.height= area_height+"px";	
				this.textarea.previous_scrollHeight= area_height;
				resized=true;
			}
		
			//3) if there is new lines, we add new line numbers in the line numeration area
			if(this.last_selection["nb_line"] >= this.line_number)
			{
				var newLines= '', destDiv=_$("line_number"), start=this.line_number, end=this.last_selection["nb_line"]+100;
				for( i = start+1; i < end; i++ )
				{
					newLines+='<div id="line_'+ i +'">'+i+"</div>";
					this.line_number++;
				}
				destDiv.innerHTML= destDiv.innerHTML + newLines;
				
				this.fixLinesHeight( this.textarea.value, start, -1 );
			}
		
			//4) be sure the text is well displayed
			this.textarea.scrollTop="0px";
			this.textarea.scrollLeft="0px";
			if(resized==true){
				this.scroll_to_view();
			}
		}
		
		if(!onlyOneTime)
			setTimeout("editArea.manage_size();", 100);
	};
	
	EditArea.prototype.execCommand= function(cmd, param){
		
		for(var i in this.plugins){
			if(typeof(this.plugins[i].execCommand)=="function"){
				if(!this.plugins[i].execCommand(cmd, param))
					return;
			}
		}
		switch(cmd){
			case "save":
				if(this.settings["save_callback"].length>0)
					eval("parent."+this.settings["save_callback"]+"('"+ this.id +"', editArea.textarea.value);");
				break;
			case "load":
				if(this.settings["load_callback"].length>0)
					eval("parent."+this.settings["load_callback"]+"('"+ this.id +"');");
				break;
			case "onchange":
				if(this.settings["change_callback"].length>0)
					eval("parent."+this.settings["change_callback"]+"('"+ this.id +"');");
				break;		
			case "EA_load":
				if(this.settings["EA_load_callback"].length>0)
					eval("parent."+this.settings["EA_load_callback"]+"('"+ this.id +"');");
				break;
			case "EA_unload":
				if(this.settings["EA_unload_callback"].length>0)
					eval("parent."+this.settings["EA_unload_callback"]+"('"+ this.id +"');");
				break;
			case "toggle_on":
				if(this.settings["EA_toggle_on_callback"].length>0)
					eval("parent."+this.settings["EA_toggle_on_callback"]+"('"+ this.id +"');");
				break;
			case "toggle_off":
				if(this.settings["EA_toggle_off_callback"].length>0)
					eval("parent."+this.settings["EA_toggle_off_callback"]+"('"+ this.id +"');");
				break;
			case "re_sync":
				if(!this.do_highlight)
					break;
			case "file_switch_on":
				if(this.settings["EA_file_switch_on_callback"].length>0)
					eval("parent."+this.settings["EA_file_switch_on_callback"]+"(param);");
				break;
			case "file_switch_off":
				if(this.settings["EA_file_switch_off_callback"].length>0)
					eval("parent."+this.settings["EA_file_switch_off_callback"]+"(param);");
				break;
			case "file_close":
				if(this.settings["EA_file_close_callback"].length>0)
					return eval("parent."+this.settings["EA_file_close_callback"]+"(param);");
				break;
			
			default:
				if(typeof(eval("editArea."+cmd))=="function")
				{
					if(this.settings["debug"])
						eval("editArea."+ cmd +"(param);");
					else
						try{eval("editArea."+ cmd +"(param);");}catch(e){};
				}
		}
	};
	
	EditArea.prototype.get_translation= function(word, mode){
		if(mode=="template")
			return parent.editAreaLoader.translate(word, this.settings["language"], mode);
		else
			return parent.editAreaLoader.get_word_translation(word, this.settings["language"]);
	};
	
	EditArea.prototype.add_plugin= function(plug_name, plug_obj){
		for(var i=0; i<this.settings["plugins"].length; i++){
			if(this.settings["plugins"][i]==plug_name){
				this.plugins[plug_name]=plug_obj;
				plug_obj.baseURL=parent.editAreaLoader.baseURL + "plugins/" + plug_name + "/";
				if( typeof(plug_obj.init)=="function" )
					plug_obj.init();
			}
		}
	};
	
	EditArea.prototype.load_css= function(url){
		try{
			link = document.createElement("link");
			link.type = "text/css";
			link.rel= "stylesheet";
			link.media="all";
			link.href = url;
			head = document.getElementsByTagName("head");
			head[0].appendChild(link);
		}catch(e){
			document.write("<link href='"+ url +"' rel='stylesheet' type='text/css' />");
		}
	};
	
	EditArea.prototype.load_script= function(url){
		try{
			script = document.createElement("script");
			script.type = "text/javascript";
			script.src  = url;
			script.charset= "UTF-8";
			head = document.getElementsByTagName("head");
			head[0].appendChild(script);
		}catch(e){
			document.write("<script type='text/javascript' src='" + url + "' charset=\"UTF-8\"><"+"/script>");
		}
	};
	
	// add plugin translation to language translation array
	EditArea.prototype.add_lang= function(language, values){
		if(!parent.editAreaLoader.lang[language])
			parent.editAreaLoader.lang[language]={};
		for(var i in values)
			parent.editAreaLoader.lang[language][i]= values[i];
	};
	
	// short cut for document.getElementById()
	function _$(id){return document.getElementById( id );};

	var editArea = new EditArea();	
	parent.editAreaLoader.add_event(window, "load", init);
	
	function init(){		
		setTimeout("editArea.init();  ", 10);
	};
                                                                                                                                                                                       ./mvappsvr/docroot/db/edit_area/resize_area.js                                                      0000777 0000000 0000000 00000004564 12534142432 020411  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   	
	EditAreaLoader.prototype.start_resize_area= function(){
		var d=document,a,div,width,height,father;
		
		d.onmouseup= editAreaLoader.end_resize_area;
		d.onmousemove= editAreaLoader.resize_area;
		editAreaLoader.toggle(editAreaLoader.resize["id"]);		
		
		a	= editAreas[editAreaLoader.resize["id"]]["textarea"];
		div	= d.getElementById("edit_area_resize");
		if(!div){
			div= d.createElement("div");
			div.id="edit_area_resize";
			div.style.border="dashed #888888 1px";
		}
		width	= a.offsetWidth -2;
		height	= a.offsetHeight -2;
		
		div.style.display	= "block";
		div.style.width		= width+"px";
		div.style.height	= height+"px";
		father= a.parentNode;
		father.insertBefore(div, a);
		
		a.style.display="none";
				
		editAreaLoader.resize["start_top"]= calculeOffsetTop(div);
		editAreaLoader.resize["start_left"]= calculeOffsetLeft(div);		
	};
	
	EditAreaLoader.prototype.end_resize_area= function(e){
		var d=document,div,a,width,height;
		
		d.onmouseup="";
		d.onmousemove="";		
		
		div		= d.getElementById("edit_area_resize");		
		a= editAreas[editAreaLoader.resize["id"]]["textarea"];
		width	= Math.max(editAreas[editAreaLoader.resize["id"]]["settings"]["min_width"], div.offsetWidth-4);
		height	= Math.max(editAreas[editAreaLoader.resize["id"]]["settings"]["min_height"], div.offsetHeight-4);
		if(editAreaLoader.isIE==6){
			width-=2;
			height-=2;	
		}
		a.style.width		= width+"px";
		a.style.height		= height+"px";
		div.style.display	= "none";
		a.style.display		= "inline";
		a.selectionStart	= editAreaLoader.resize["selectionStart"];
		a.selectionEnd		= editAreaLoader.resize["selectionEnd"];
		editAreaLoader.toggle(editAreaLoader.resize["id"]);
		
		return false;
	};
	
	EditAreaLoader.prototype.resize_area= function(e){		
		var allow,newHeight,newWidth;
		allow	= editAreas[editAreaLoader.resize["id"]]["settings"]["allow_resize"];
		if(allow=="both" || allow=="y")
		{
			newHeight	= Math.max(20, getMouseY(e)- editAreaLoader.resize["start_top"]);
			document.getElementById("edit_area_resize").style.height= newHeight+"px";
		}
		if(allow=="both" || allow=="x")
		{
			newWidth= Math.max(20, getMouseX(e)- editAreaLoader.resize["start_left"]);
			document.getElementById("edit_area_resize").style.width= newWidth+"px";
		}
		
		return false;
	};
	
	editAreaLoader.waiting_loading["resize_area.js"]= "loaded";
                                                                                                                                            ./mvappsvr/docroot/db/edit_area/images_spacer.gif                                                   0000777 0000000 0000000 00000000053 12534142432 021040  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a          !   ,       D ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/edit_area/langs_fi.js                                                         0000777 0000000 0000000 00000004116 12534142432 017673  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["fi"]={
new_document: "uusi tyhjä dokumentti",
search_button: "etsi ja korvaa",
search_command: "etsi seuraava / avaa etsintävalikko",
search: "etsi",
replace: "korvaa",
replace_command: "korvaa / avaa etsintävalikko",
find_next: "etsi seuraava",
replace_all: "korvaa kaikki",
reg_exp: "säännölliset lausekkeet",
match_case: "täsmää kirjainkokoon",
not_found: "ei löytynyt.",
occurrence_replaced: "esiintymää korvattu.",
search_field_empty: "Haettava merkkijono on tyhjä",
restart_search_at_begin: "Alueen loppu saavutettiin. Aloitetaan alusta.",
move_popup: "siirrä etsintävalikkoa",
font_size: "--Fontin koko--",
go_to_line: "siirry riville",
go_to_line_prompt: "mene riville:",
undo: "peruuta",
redo: "tee uudelleen",
change_smooth_selection: "kytke/sammuta joitakin näyttötoimintoja (Älykkäämpi toiminta, mutta suurempi CPU kuormitus)",
highlight: "kytke syntaksikorostus päälle/pois",
reset_highlight: "resetoi syntaksikorostus (jos teksti ei ole synkassa korostuksen kanssa)",
word_wrap: "toggle word wrapping mode",
help: "tietoja",
save: "tallenna",
load: "lataa",
line_abbr: "Rv",
char_abbr: "Pos",
position: "Paikka",
total: "Yhteensä",
close_popup: "sulje valikko",
shortcuts: "Pikatoiminnot",
add_tab: "lisää sisennys tekstiin",
remove_tab: "poista sisennys tekstistä",
about_notice: "Huomautus: syntaksinkorostus toimii vain pienelle tekstille",
toggle: "Kytke editori",
accesskey: "Pikanäppäin",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Odota...",
fullscreen: "koko ruutu",
syntax_selection: "--Syntaksi--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Sulje tiedosto"
};                                                                                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/edit_area/langs_ru.js                                                         0000777 0000000 0000000 00000005547 12534142432 017734  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["ru"]={
new_document: "новый пустой документ",
search_button: "поиск и замена",
search_command: "искать следующий / открыть панель поиска",
search: "поиск",
replace: "замена",
replace_command: "заменить / открыть панель поиска",
find_next: "найти следующее",
replace_all: "заменить все",
reg_exp: "регулярное выражение",
match_case: "учитывать регистр",
not_found: "не найдено.",
occurrence_replaced: "вхождение заменено.",
search_field_empty: "Поле поиска пустое",
restart_search_at_begin: "Достигнут конец документа. Начинаю с начала.",
move_popup: "переместить окно поиска",
font_size: "--Размер шрифта--",
go_to_line: "перейти к строке",
go_to_line_prompt: "перейти к строке номер:",
undo: "отменить",
redo: "вернуть",
change_smooth_selection: "включить/отключить некоторые функции просмотра (более красиво, но больше использует процессор)",
highlight: "переключить подсветку синтаксиса включена/выключена",
reset_highlight: "восстановить подсветку (если разсинхронизирована от текста)",
word_wrap: "toggle word wrapping mode",
help: "о программе",
save: "сохранить",
load: "загрузить",
line_abbr: "Стр",
char_abbr: "Стлб",
position: "Позиция",
total: "Всего",
close_popup: "закрыть всплывающее окно",
shortcuts: "Горячие клавиши",
add_tab: "добавить табуляцию в текст",
remove_tab: "убрать табуляцию из текста",
about_notice: "Внимание: функция подсветки синтаксиса только для небольших текстов",
toggle: "Переключить редактор",
accesskey: "Горячая клавиша",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Обработка...",
fullscreen: "полный экран",
syntax_selection: "--Синтакс--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Закрыть файл"
};
                                                                                                                                                         ./mvappsvr/docroot/db/edit_area/langs_en.js                                                         0000777 0000000 0000000 00000003713 12534142432 017701  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["en"]={
new_document: "new empty document",
search_button: "search and replace",
search_command: "search next / open search area",
search: "search",
replace: "replace",
replace_command: "replace / open search area",
find_next: "find next",
replace_all: "replace all",
reg_exp: "regular expressions",
match_case: "match case",
not_found: "not found.",
occurrence_replaced: "occurences replaced.",
search_field_empty: "Search field empty",
restart_search_at_begin: "End of area reached. Restart at begin.",
move_popup: "move search popup",
font_size: "--Font size--",
go_to_line: "go to line",
go_to_line_prompt: "go to line number:",
undo: "undo",
redo: "redo",
change_smooth_selection: "enable/disable some display features (smarter display but more CPU charge)",
highlight: "toggle syntax highlight on/off",
reset_highlight: "reset highlight (if desyncronized from text)",
word_wrap: "toggle word wrapping mode",
help: "about",
save: "save",
load: "load",
line_abbr: "Ln",
char_abbr: "Ch",
position: "Position",
total: "Total",
close_popup: "close popup",
shortcuts: "Shortcuts",
add_tab: "add tabulation to text",
remove_tab: "remove tabulation to text",
about_notice: "Notice: syntax highlight function is only for small text",
toggle: "Toggle editor",
compile: "Compile code",
accesskey: "Accesskey",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Processing...",
fullscreen: "fullscreen",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                     ./mvappsvr/docroot/db/edit_area/images_reset_highlight.gif                                          0000777 0000000 0000000 00000000250 12534142432 022733  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   ^p2Jbrr䄚   !   ,       UI87;G0ݷAxǹKhY bd/w5w$.-`fP(V0@38C ;                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/edit_area/langs_bg.js                                                         0000777 0000000 0000000 00000006074 12534142432 017672  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
 *	Bulgarian translation
 *	Author:		Valentin Hristov
 *	Company:	SOFTKIT Bulgarian
 *	Site:		http://www.softkit-bg.com
 */
editAreaLoader.lang["bg"]={
new_document: "нов документ",
search_button: "търсене и замяна",
search_command: "търси следващия / отвори прозорец с търсачка",
search: "търсене",
replace: "замяна",
replace_command: "замяна / отвори прозорец с търсачка",
find_next: "намери следващия",
replace_all: "замени всички",
reg_exp: "реголярни изрази",
match_case: "чуствителен към регистъра",
not_found: "няма резултат.",
occurrence_replaced: "замяната е осъществена.",
search_field_empty: "Полето за търсене е празно",
restart_search_at_begin: "До края на документа. Почни с началото.",
move_popup: "премести прозореца с търсачката",
font_size: "--Размер на шрифта--",
go_to_line: "премени към реда",
go_to_line_prompt: "премени към номера на реда:",
undo: "отмени",
redo: "върни",
change_smooth_selection: "включи/изключи някой от функциите за преглед (по красиво, но повече натоварва)",
highlight: "превключване на оцветяване на синтаксиса включена/изключена",
reset_highlight: "въстанови оцветяване на синтаксиса (ако не е синхронизиран с текста)",
word_wrap: "режим на пренасяне на дълги редове",
help: "за програмата",
save: "съхрани",
load: "зареди",
line_abbr: "Стр",
char_abbr: "Стлб",
position: "Позиция",
total: "Всичко",
close_popup: "затвори прозореца",
shortcuts: "Бързи клавиши",
add_tab: "добави табулация в текста",
remove_tab: "премахни табулацията в текста",
about_notice: "Внимание: използвайте функцията оцветяване на синтаксиса само за малки текстове",
toggle: "Превключи редактор",
accesskey: "Бърз клавиш",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Зареждане...",
fullscreen: "на цял екран",
syntax_selection: "--Синтаксис--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "PHP",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "XML",
syntax_c: "C",
syntax_cpp: "C++",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Затвори файла"
};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/edit_area/langs_pl.js                                                         0000777 0000000 0000000 00000004072 12534142432 017711  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["pl"]={
new_document: "nowy dokument",
search_button: "znajdź i zamień",
search_command: "znajdź następny",
search: "znajdź",
replace: "zamień",
replace_command: "zamień",
find_next: "następny",
replace_all: "zamień wszystko",
reg_exp: "wyrażenie regularne",
match_case: "uwzględnij wielkość liter<br />",
not_found: "nie znaleziono.",
occurrence_replaced: "wystąpień zamieniono.",
search_field_empty: "Nie wprowadzono tekstu",
restart_search_at_begin: "Koniec dokumentu. Wyszukiwanie od początku.",
move_popup: "przesuń okienko wyszukiwania",
font_size: "Rozmiar",
go_to_line: "idź do linii",
go_to_line_prompt: "numer linii:",
undo: "cofnij",
redo: "przywróć",
change_smooth_selection: "włącz/wyłącz niektóre opcje wyglądu (zaawansowane opcje wyglądu obciążają procesor)",
highlight: "włącz/wyłącz podświetlanie składni",
reset_highlight: "odśwież podświetlanie składni (jeśli rozsynchronizowało się z tekstem)",
word_wrap: "toggle word wrapping mode",
help: "o programie",
save: "zapisz",
load: "otwórz",
line_abbr: "Ln",
char_abbr: "Zn",
position: "Pozycja",
total: "W sumie",
close_popup: "zamknij okienko",
shortcuts: "Skróty klawiaturowe",
add_tab: "dodaj wcięcie do zaznaczonego tekstu",
remove_tab: "usuń wcięcie",
about_notice: "Uwaga: podświetlanie składni nie jest zalecane dla długich tekstów",
toggle: "Włącz/wyłącz edytor",
accesskey: "Alt+",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "Przetwarzanie...",
fullscreen: "fullscreen",
syntax_selection: "--Syntax--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "Close file"
};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/edit_area/license_lgpl.txt                                                    0000777 0000000 0000000 00000057476 12534142432 020775  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   		  GNU LESSER GENERAL PUBLIC LICENSE
		       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

		  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

		     END OF TERMS AND CONDITIONS
                                                                                                                                                                                                  ./mvappsvr/docroot/db/edit_area/highlight.js                                                        0000777 0000000 0000000 00000035522 12534142432 020065  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   	// change_to: "on" or "off"
	EditArea.prototype.change_highlight= function(change_to){
		if(this.settings["syntax"].length==0 && change_to==false){
			this.switchClassSticky(_$("highlight"), 'editAreaButtonDisabled', true);
			this.switchClassSticky(_$("reset_highlight"), 'editAreaButtonDisabled', true);
			return false;
		}
		
		if(this.do_highlight==change_to)
			return false;
	
			
		this.getIESelection();
		var pos_start= this.textarea.selectionStart;
		var pos_end= this.textarea.selectionEnd;
		
		if(this.do_highlight===true || change_to==false)
			this.disable_highlight();
		else
			this.enable_highlight();
		this.textarea.focus();
		this.textarea.selectionStart = pos_start;
		this.textarea.selectionEnd = pos_end;
		this.setIESelection();
				
	};
	
	EditArea.prototype.disable_highlight= function(displayOnly){
		var t= this, a=t.textarea, new_Obj, old_class, new_class;
			
		t.selection_field.innerHTML="";
		t.selection_field_text.innerHTML="";
		t.content_highlight.style.visibility="hidden";
		// replacing the node is far more faster than deleting it's content in firefox
		new_Obj= t.content_highlight.cloneNode(false);
		new_Obj.innerHTML= "";			
		t.content_highlight.parentNode.insertBefore(new_Obj, t.content_highlight);
		t.content_highlight.parentNode.removeChild(t.content_highlight);	
		t.content_highlight= new_Obj;
		old_class= parent.getAttribute( a,"class" );
		if(old_class){
			new_class= old_class.replace( "hidden","" );
			parent.setAttribute( a, "class", new_class );
		}
	
		a.style.backgroundColor="transparent";	// needed in order to see the bracket finders
		
		//var icon= document.getElementById("highlight");
		//setAttribute(icon, "class", getAttribute(icon, "class").replace(/ selected/g, "") );
		//t.restoreClass(icon);
		//t.switchClass(icon,'editAreaButtonNormal');
		t.switchClassSticky(_$("highlight"), 'editAreaButtonNormal', true);
		t.switchClassSticky(_$("reset_highlight"), 'editAreaButtonDisabled', true);
	
		t.do_highlight=false;
	
		t.switchClassSticky(_$("change_smooth_selection"), 'editAreaButtonSelected', true);
		if(typeof(t.smooth_selection_before_highlight)!="undefined" && t.smooth_selection_before_highlight===false){
			t.change_smooth_selection_mode(false);
		}
		
	//	this.textarea.style.backgroundColor="#FFFFFF";
	};

	EditArea.prototype.enable_highlight= function(){
		var t=this, a=t.textarea, new_class;
		t.show_waiting_screen();
			
		t.content_highlight.style.visibility="visible";
		new_class	=parent.getAttribute(a,"class")+" hidden";
		parent.setAttribute( a, "class", new_class );
		
		// IE can't manage mouse click outside text range without this
		if( t.isIE )
			a.style.backgroundColor="#FFFFFF";	

		t.switchClassSticky(_$("highlight"), 'editAreaButtonSelected', false);
		t.switchClassSticky(_$("reset_highlight"), 'editAreaButtonNormal', false);
		
		t.smooth_selection_before_highlight=t.smooth_selection;
		if(!t.smooth_selection)
			t.change_smooth_selection_mode(true);
		t.switchClassSticky(_$("change_smooth_selection"), 'editAreaButtonDisabled', true);
		
		
		t.do_highlight=true;
		t.resync_highlight();
					
		t.hide_waiting_screen();	
	};
	
	/**
	 * Ask to update highlighted text
	 * @param Array infos - Array of datas returned by EditArea.get_selection_infos()
	 */
	EditArea.prototype.maj_highlight= function(infos){
		// for speed mesure
		var debug_opti="",tps_start= new Date().getTime(), tps_middle_opti=new Date().getTime();
		var t=this, hightlighted_text, updated_highlight;	
		var textToHighlight=infos["full_text"], doSyntaxOpti = false, doHtmlOpti = false, stay_begin="", stay_end="", trace_new , trace_last;
		
		if(t.last_text_to_highlight==infos["full_text"] && t.resync_highlight!==true)
			return;
					
		//  OPTIMISATION: will search to update only changed lines
		if(t.reload_highlight===true){
			t.reload_highlight=false;
		}else if(textToHighlight.length==0){
			textToHighlight="\n ";
		}else{
			// get text change datas
			changes = t.checkTextEvolution(t.last_text_to_highlight,textToHighlight);
			
			// check if it can only reparse the changed text
			trace_new		= t.get_syntax_trace(changes.newTextLine).replace(/\r/g, '');
			trace_last		= t.get_syntax_trace(changes.lastTextLine).replace(/\r/g, '');
			doSyntaxOpti	= ( trace_new == trace_last );
			
			// check if the difference comes only from a new line created 
			// => we have to remember that the editor can automaticaly add tabulation or space after the new line) 
			if( !doSyntaxOpti && trace_new == "\n"+trace_last && /^[ \t\s]*\n[ \t\s]*$/.test( changes.newText.replace(/\r/g, '') ) && changes.lastText =="" )
			{
				doSyntaxOpti	= true;
			}
			
			// we do the syntax optimisation
			if( doSyntaxOpti ){
						
				tps_middle_opti=new Date().getTime();	
			
				stay_begin= t.last_hightlighted_text.split("\n").slice(0, changes.lineStart).join("\n");
				if(changes.lineStart>0)
					stay_begin+= "\n";
				stay_end= t.last_hightlighted_text.split("\n").slice(changes.lineLastEnd+1).join("\n");
				if(stay_end.length>0)
					stay_end= "\n"+stay_end;
					
				// Final check to see that we're not in the middle of span tags
				if( stay_begin.split('<span').length != stay_begin.split('</span').length 
					|| stay_end.split('<span').length != stay_end.split('</span').length )
				{
					doSyntaxOpti	= false;
					stay_end		= '';
					stay_begin		= '';
				}
				else
				{
					if(stay_begin.length==0 && changes.posLastEnd==-1)
						changes.newTextLine+="\n";
					textToHighlight=changes.newTextLine;
				}
			}
			if(t.settings["debug"]){
				var ch =changes;
				debug_opti= ( doSyntaxOpti?"Optimisation": "No optimisation" )
					+" start: "+ch.posStart +"("+ch.lineStart+")"
					+" end_new: "+ ch.posNewEnd+"("+ch.lineNewEnd+")"
					+" end_last: "+ ch.posLastEnd+"("+ch.lineLastEnd+")"
					+"\nchanged_text: "+ch.newText+" => trace: "+trace_new
					+"\nchanged_last_text: "+ch.lastText+" => trace: "+trace_last
					//debug_opti+= "\nchanged: "+ infos["full_text"].substring(ch.posStart, ch.posNewEnd);
					+ "\nchanged_line: "+ch.newTextLine
					+ "\nlast_changed_line: "+ch.lastTextLine
					+"\nstay_begin: "+ stay_begin.slice(-100)
					+"\nstay_end: "+ stay_end.substr( 0, 100 );
					//debug_opti="start: "+stay_begin_len+ "("+nb_line_start_unchanged+") end: "+ (stay_end_len)+ "("+(splited.length-nb_line_end_unchanged)+") ";
					//debug_opti+="changed: "+ textToHighlight.substring(stay_begin_len, textToHighlight.length-stay_end_len)+" \n";
					
					//debug_opti+="changed: "+ stay_begin.substr(stay_begin.length-200)+ "----------"+ textToHighlight+"------------------"+ stay_end.substr(0,200) +"\n";
					+"\n";
			}
	
			
			// END OPTIMISATION
		}

		tps_end_opti	= new Date().getTime();	
				
		// apply highlight
		updated_highlight	= t.colorize_text(textToHighlight);
		tpsAfterReg			= new Date().getTime();
		
		/***
		 * see if we can optimize for updating only the required part of the HTML code
		 * 
		 * The goal here will be to find the text node concerned by the modification and to update it
		 */
		//-------------------------------------------
		// 
		if( doSyntaxOpti )
		{
			try
			{
				var replacedBloc, i, nbStart = '', nbEnd = '', newHtml, lengthOld, lengthNew;
				replacedBloc		= t.last_hightlighted_text.substring( stay_begin.length, t.last_hightlighted_text.length - stay_end.length );
				
				lengthOld	= replacedBloc.length;
				lengthNew	= updated_highlight.length;
				
				// find the identical caracters at the beginning
				for( i=0; i < lengthOld && i < lengthNew && replacedBloc.charAt(i) == updated_highlight.charAt(i) ; i++ )
				{
				}
				nbStart = i;
				// find the identical caracters at the end
				for( i=0; i + nbStart < lengthOld && i + nbStart < lengthNew && replacedBloc.charAt(lengthOld-i-1) == updated_highlight.charAt(lengthNew-i-1) ; i++ )
				{
				}
				nbEnd	= i;
				
				// get the changes
				lastHtml	= replacedBloc.substring( nbStart, lengthOld - nbEnd );
				newHtml		= updated_highlight.substring( nbStart, lengthNew - nbEnd );
				
				
				// We can do the optimisation only if we havn't touch to span elements
				if( newHtml.indexOf('<span') == -1 && newHtml.indexOf('</span') == -1 
					&& lastHtml.indexOf('<span') == -1 && lastHtml.indexOf('</span') == -1 )
				{
					var beginStr, nbOpendedSpan, nbClosedSpan, nbUnchangedChars, span, textNode;
					doHtmlOpti		= true;
					beginStr		= t.last_hightlighted_text.substr( 0, stay_begin.length + nbStart );
			
					nbOpendedSpan	= beginStr.split('<span').length - 1;
					nbClosedSpan	= beginStr.split('</span').length - 1;
					// retrieve the previously opened span (Add 1 for the first level span?)
					span 			= t.content_highlight.getElementsByTagName('span')[ nbOpendedSpan ];
					
					//--------[
					// get the textNode to update
					
					// if we're inside a span, we'll take the one that is opened (can be a parent of the current span)
					parentSpan		= span;
					maxStartOffset	= maxEndOffset = 0;
					
					// it will be in the child of the root node 
					if( nbOpendedSpan == nbClosedSpan )
					{
						while( parentSpan.parentNode != t.content_highlight && parentSpan.parentNode.tagName != 'PRE' )
						{
							parentSpan	= parentSpan.parentNode;
						}
					}
					// get the last opened span
					else
					{
						maxStartOffset	= maxEndOffset = beginStr.length + 1;
						// move to parent node for each closed span found after the lastest open span
						nbClosed = beginStr.substr( Math.max( 0, beginStr.lastIndexOf( '<span', maxStartOffset - 1 ) ) ).split('</span').length - 1;
						while( nbClosed > 0 )
						{
							nbClosed--;
							parentSpan = parentSpan.parentNode;
						}
						
						// find the position of the last opended tag
						while( parentSpan.parentNode != t.content_highlight && parentSpan.parentNode.tagName != 'PRE' && ( tmpMaxStartOffset = Math.max( 0, beginStr.lastIndexOf( '<span', maxStartOffset - 1 ) ) ) < ( tmpMaxEndOffset = Math.max( 0, beginStr.lastIndexOf( '</span', maxEndOffset - 1 ) ) ) )
						{
							maxStartOffset	= tmpMaxStartOffset;
							maxEndOffset	= tmpMaxEndOffset;
						}
					}
					// Note: maxEndOffset is no more used but maxStartOffset will be used
					
					if( parentSpan.parentNode == t.content_highlight || parentSpan.parentNode.tagName == 'PRE' )
					{
						maxStartOffset	= Math.max( 0, beginStr.indexOf( '<span' ) );
					}
					
					// find the matching text node (this will be one that will be at the end of the beginStr
					if( maxStartOffset == beginStr.length )
					{
						nbSubSpanBefore	= 0;
					}
					else
					{
						lastEndPos 				= Math.max( 0, beginStr.lastIndexOf( '>', maxStartOffset ) );
		
						// count the number of sub spans
						nbSubSpanBefore			= beginStr.substr( lastEndPos ).split('<span').length-1;
					}
					
					// there is no sub-span before
					if( nbSubSpanBefore == 0 )
					{
						textNode	= parentSpan.firstChild;
					}
					// we need to find where is the text node modified
					else
					{
						// take the last direct child (no sub-child)
						lastSubSpan	= parentSpan.getElementsByTagName('span')[ nbSubSpanBefore - 1 ];
						while( lastSubSpan.parentNode != parentSpan )
						{
							lastSubSpan	= lastSubSpan.parentNode;
						}

						// associate to next text node following the last sub span
						if( lastSubSpan.nextSibling == null || lastSubSpan.nextSibling.nodeType != 3 )
						{
							textNode	= document.createTextNode('');
							lastSubSpan.parentNode.insertBefore( textNode, lastSubSpan.nextSibling );
						}
						else
						{
							textNode	= lastSubSpan.nextSibling;
						}
					}
					//--------]
					
					
					//--------[
					// update the textNode content
					
					// number of caracters after the last opened of closed span
					nbUnchangedChars = beginStr.length - Math.max( 0, beginStr.lastIndexOf( '>' ) + 1 );
					
					//	console.log( span, textNode, nbOpendedSpan,nbClosedSpan,  span.nextSibling, textNode.length, nbUnchangedChars, lastHtml, lastHtml.length, newHtml, newHtml.length );
					//	alert( textNode.parentNode.className +'-'+ textNode.parentNode.tagName+"\n"+ textNode.data +"\n"+ nbUnchangedChars +"\n"+ lastHtml.length +"\n"+ newHtml +"\n"+ newHtml.length  );
					
					// IE only manage \r for cariage return in textNode and not \n or \r\n
					if( t.isIE )
					{
						nbUnchangedChars	-= ( beginStr.substr( beginStr.length - nbUnchangedChars ).split("\n").length - 1 );
						//alert( textNode.data.replace(/\r/g, '_r').replace(/\n/g, '_n')); 
						textNode.replaceData( nbUnchangedChars, lastHtml.replace(/\n/g, '').length, newHtml.replace(/\n/g, '') );
					}
					else
					{
						textNode.replaceData( nbUnchangedChars, lastHtml.length, newHtml );
					}
					//--------]
				}
			}
			// an exception shouldn't occured but if replaceData failed at least it won't break everything
			catch( e )
			{
		//		throw e;
		//		console.log( e );
				doHtmlOpti	= false;
			}
			
		}
		/*** END HTML update's optimisation ***/
		// end test
		
	//			console.log(  (TPS6-TPS5), (TPS5-TPS4), (TPS4-TPS3), (TPS3-TPS2), (TPS2-TPS1), _CPT );
		// get the new highlight content
		tpsAfterOpti2		= new Date().getTime();
		hightlighted_text	= stay_begin + updated_highlight + stay_end;
		if( !doHtmlOpti )
		{
			// update the content of the highlight div by first updating a clone node (as there is no display in the same time for t node it's quite faster (5*))
			var new_Obj= t.content_highlight.cloneNode(false);
			if( ( t.isIE && t.isIE < 8 ) || ( t.isOpera && t.isOpera < 9.6 ) )
				new_Obj.innerHTML= "<pre><span class='"+ t.settings["syntax"] +"'>" + hightlighted_text + "</span></pre>";	
			else
				new_Obj.innerHTML= "<span class='"+ t.settings["syntax"] +"'>"+ hightlighted_text +"</span>";
	
			t.content_highlight.parentNode.replaceChild(new_Obj, t.content_highlight);
		
			t.content_highlight= new_Obj;
		}
		
		t.last_text_to_highlight= infos["full_text"];
		t.last_hightlighted_text= hightlighted_text;
		
		tps3=new Date().getTime();
	
		if(t.settings["debug"]){
			//lineNumber=tab_text.length;
			//t.debug.value+=" \nNB char: "+_$("src").value.length+" Nb line: "+ lineNumber;
		
			t.debug.value= "Tps optimisation "+(tps_end_opti-tps_start)
				+" | tps reg exp: "+ (tpsAfterReg-tps_end_opti)
				+" | tps opti HTML : "+ (tpsAfterOpti2-tpsAfterReg) + ' '+ ( doHtmlOpti ? 'yes' : 'no' )
				+" | tps update highlight content: "+ (tps3-tpsAfterOpti2)
				+" | tpsTotal: "+ (tps3-tps_start)
				+ "("+tps3+")\n"+ debug_opti;
		//	t.debug.value+= "highlight\n"+hightlighted_text;*/
		}
		
	};
	
	EditArea.prototype.resync_highlight= function(reload_now){
		this.reload_highlight=true;
		this.last_text_to_highlight="";
		this.focus();		
		if(reload_now)
			this.check_line_selection(false); 
	};	
                                                                                                                                                                              ./mvappsvr/docroot/db/edit_area/autocompletion.js                                                   0000777 0000000 0000000 00000041666 12534142432 021166  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /**
 * Autocompletion class
 * 
 * An auto completion box appear while you're writing. It's possible to force it to appear with Ctrl+Space short cut
 * 
 * Loaded as a plugin inside editArea (everything made here could have been made in the plugin directory)
 * But is definitly linked to syntax selection (no need to do 2 different files for color and auto complete for each syntax language)
 * and add a too important feature that many people would miss if included as a plugin
 * 
 * - init param: autocompletion_start
 * - Button name: "autocompletion"
 */  

var EditArea_autocompletion= {
	
	/**
	 * Get called once this file is loaded (editArea still not initialized)
	 *
	 * @return nothing	 
	 */	 	 	
	init: function(){	
		//	alert("test init: "+ this._someInternalFunction(2, 3));
		
		if(editArea.settings["autocompletion"])
			this.enabled= true;
		else
			this.enabled= false;
		this.current_word		= false;
		this.shown				= false;
		this.selectIndex		= -1;
		this.forceDisplay		= false;
		this.isInMiddleWord		= false;
		this.autoSelectIfOneResult	= false;
		this.delayBeforeDisplay	= 100;
		this.checkDelayTimer	= false;
		this.curr_syntax_str	= '';
		
		this.file_syntax_datas	= {};
	}
	/**
	 * Returns the HTML code for a specific control string or false if this plugin doesn't have that control.
	 * A control can be a button, select list or any other HTML item to present in the EditArea user interface.
	 * Language variables such as {$lang_somekey} will also be replaced with contents from
	 * the language packs.
	 * 
	 * @param {string} ctrl_name: the name of the control to add	  
	 * @return HTML code for a specific control or false.
	 * @type string	or boolean
	 */	
	/*,get_control_html: function(ctrl_name){
		switch( ctrl_name ){
			case 'autocompletion':
				// Control id, button img, command
				return parent.editAreaLoader.get_button_html('autocompletion_but', 'autocompletion.gif', 'toggle_autocompletion', false, this.baseURL);
				break;
		}
		return false;
	}*/
	/**
	 * Get called once EditArea is fully loaded and initialised
	 *	 
	 * @return nothing
	 */	 	 	
	,onload: function(){ 
		if(this.enabled)
		{
			var icon= document.getElementById("autocompletion");
			if(icon)
				editArea.switchClassSticky(icon, 'editAreaButtonSelected', true);
		}
		
		this.container	= document.createElement('div');
		this.container.id	= "auto_completion_area";
		editArea.container.insertBefore( this.container, editArea.container.firstChild );
		
		// add event detection for hiding suggestion box
		parent.editAreaLoader.add_event( document, "click", function(){ editArea.plugins['autocompletion']._hide();} );
		parent.editAreaLoader.add_event( editArea.textarea, "blur", function(){ editArea.plugins['autocompletion']._hide();} );
		
	}
	
	/**
	 * Is called each time the user touch a keyboard key.
	 *	 
	 * @param (event) e: the keydown event
	 * @return true - pass to next handler in chain, false - stop chain execution
	 * @type boolean	 
	 */
	,onkeydown: function(e){
		if(!this.enabled)
			return true;
			
		if (EA_keys[e.keyCode])
			letter=EA_keys[e.keyCode];
		else
			letter=String.fromCharCode(e.keyCode);	
		// shown
		if( this._isShown() )
		{	
			// if escape, hide the box
			if(letter=="Esc")
			{
				this._hide();
				return false;
			}
			// Enter
			else if( letter=="Entrer")
			{
				var as	= this.container.getElementsByTagName('A');
				// select a suggested entry
				if( this.selectIndex >= 0 && this.selectIndex < as.length )
				{
					as[ this.selectIndex ].onmousedown();
					return false
				}
				// simply add an enter in the code
				else
				{
					this._hide();
					return true;
				}
			}
			else if( letter=="Tab" || letter=="Down")
			{
				this._selectNext();
				return false;
			}
			else if( letter=="Up")
			{
				this._selectBefore();
				return false;
			}
		}
		// hidden
		else
		{
			
		}
		
		// show current suggestion list and do autoSelect if possible (no matter it's shown or hidden)
		if( letter=="Space" && CtrlPressed(e) )
		{
			//parent.console.log('SHOW SUGGEST');
			this.forceDisplay 			= true;
			this.autoSelectIfOneResult	= true;
			this._checkLetter();
			return false;
		}
		
		// wait a short period for check that the cursor isn't moving
		setTimeout("editArea.plugins['autocompletion']._checkDelayAndCursorBeforeDisplay();", editArea.check_line_selection_timer +5 );
		this.checkDelayTimer = false;
		return true;
	}	
	/**
	 * Executes a specific command, this function handles plugin commands.
	 *
	 * @param {string} cmd: the name of the command being executed
	 * @param {unknown} param: the parameter of the command	 
	 * @return true - pass to next handler in chain, false - stop chain execution
	 * @type boolean	
	 */
	,execCommand: function(cmd, param){
		switch( cmd ){
			case 'toggle_autocompletion':
				var icon= document.getElementById("autocompletion");
				if(!this.enabled)
				{
					if(icon != null){
						editArea.restoreClass(icon);
						editArea.switchClassSticky(icon, 'editAreaButtonSelected', true);
					}
					this.enabled= true;
				}
				else
				{
					this.enabled= false;
					if(icon != null)
						editArea.switchClassSticky(icon, 'editAreaButtonNormal', false);
				}
				return true;
		}
		return true;
	}
	,_checkDelayAndCursorBeforeDisplay: function()
	{
		this.checkDelayTimer = setTimeout("if(editArea.textarea.selectionStart == "+ editArea.textarea.selectionStart +") EditArea_autocompletion._checkLetter();",  this.delayBeforeDisplay - editArea.check_line_selection_timer - 5 );
	}
	// hide the suggested box
	,_hide: function(){
		this.container.style.display="none";
		this.selectIndex	= -1;
		this.shown	= false;
		this.forceDisplay	= false;
		this.autoSelectIfOneResult = false;
	}
	// display the suggested box
	,_show: function(){
		if( !this._isShown() )
		{
			this.container.style.display="block";
			this.selectIndex	= -1;
			this.shown	= true;
		}
	}
	// is the suggested box displayed?
	,_isShown: function(){
		return this.shown;
	}
	// setter and getter
	,_isInMiddleWord: function( new_value ){
		if( typeof( new_value ) == "undefined" )
			return this.isInMiddleWord;
		else
			this.isInMiddleWord	= new_value;
	}
	// select the next element in the suggested box
	,_selectNext: function()
	{
		var as	= this.container.getElementsByTagName('A');
		
		// clean existing elements
		for( var i=0; i<as.length; i++ )
		{
			if( as[i].className )
				as[i].className	= as[i].className.replace(/ focus/g, '');
		}
		
		this.selectIndex++;	
		this.selectIndex	= ( this.selectIndex >= as.length || this.selectIndex < 0 ) ? 0 : this.selectIndex;
		as[ this.selectIndex ].className	+= " focus";
	}
	// select the previous element in the suggested box
	,_selectBefore: function()
	{
		var as	= this.container.getElementsByTagName('A');
		
		// clean existing elements
		for( var i=0; i<as.length; i++ )
		{
			if( as[i].className )
				as[i].className	= as[ i ].className.replace(/ focus/g, '');
		}
		
		this.selectIndex--;
		
		this.selectIndex	= ( this.selectIndex >= as.length || this.selectIndex < 0 ) ? as.length-1 : this.selectIndex;
		as[ this.selectIndex ].className	+= " focus";
	}
	,_select: function( content )
	{
		cursor_forced_position	= content.indexOf( '{@}' );
		content	= content.replace(/{@}/g, '' );
		editArea.getIESelection();
		
		// retrive the number of matching characters
		var start_index	= Math.max( 0, editArea.textarea.selectionEnd - content.length );
		
		line_string	= 	editArea.textarea.value.substring( start_index, editArea.textarea.selectionEnd + 1);
		limit	= line_string.length -1;
		nbMatch	= 0;
		for( i =0; i<limit ; i++ )
		{
			if( line_string.substring( limit - i - 1, limit ) == content.substring( 0, i + 1 ) )
				nbMatch = i + 1;
		}
		// if characters match, we should include them in the selection that will be replaced
		if( nbMatch > 0 )
			parent.editAreaLoader.setSelectionRange(editArea.id, editArea.textarea.selectionStart - nbMatch , editArea.textarea.selectionEnd);
		
		parent.editAreaLoader.setSelectedText(editArea.id, content );
		range= parent.editAreaLoader.getSelectionRange(editArea.id);
		
		if( cursor_forced_position != -1 )
			new_pos	= range["end"] - ( content.length-cursor_forced_position );
		else
			new_pos	= range["end"];	
		parent.editAreaLoader.setSelectionRange(editArea.id, new_pos, new_pos);
		this._hide();
	}
	
	
	/**
	 * Parse the AUTO_COMPLETION part of syntax definition files
	 */
	,_parseSyntaxAutoCompletionDatas: function(){
		//foreach syntax loaded
		for(var lang in parent.editAreaLoader.load_syntax)
		{
			if(!parent.editAreaLoader.syntax[lang]['autocompletion'])	// init the regexp if not already initialized
			{
				parent.editAreaLoader.syntax[lang]['autocompletion']= {};
				// the file has auto completion datas
				if(parent.editAreaLoader.load_syntax[lang]['AUTO_COMPLETION'])
				{
					// parse them
					for(var i in parent.editAreaLoader.load_syntax[lang]['AUTO_COMPLETION'])
					{
						datas	= parent.editAreaLoader.load_syntax[lang]['AUTO_COMPLETION'][i];
						tmp	= {};
						if(datas["CASE_SENSITIVE"]!="undefined" && datas["CASE_SENSITIVE"]==false)
							tmp["modifiers"]="i";
						else
							tmp["modifiers"]="";
						tmp["prefix_separator"]= datas["REGEXP"]["prefix_separator"];
						tmp["match_prefix_separator"]= new RegExp( datas["REGEXP"]["prefix_separator"] +"$", tmp["modifiers"]);
						tmp["match_word"]= new RegExp("(?:"+ datas["REGEXP"]["before_word"] +")("+ datas["REGEXP"]["possible_words_letters"] +")$", tmp["modifiers"]);
						tmp["match_next_letter"]= new RegExp("^("+ datas["REGEXP"]["letter_after_word_must_match"] +")$", tmp["modifiers"]);
						tmp["keywords"]= {};
						//console.log( datas["KEYWORDS"] );
						for( var prefix in datas["KEYWORDS"] )
						{
							tmp["keywords"][prefix]= {
								prefix: prefix,
								prefix_name: prefix,
								prefix_reg: new RegExp("(?:"+ parent.editAreaLoader.get_escaped_regexp( prefix ) +")(?:"+ tmp["prefix_separator"] +")$", tmp["modifiers"] ),
								datas: []
							};
							for( var j=0; j<datas["KEYWORDS"][prefix].length; j++ )
							{
								tmp["keywords"][prefix]['datas'][j]= {
									is_typing: datas["KEYWORDS"][prefix][j][0],
									// if replace with is empty, replace with the is_typing value
									replace_with: datas["KEYWORDS"][prefix][j][1] ? datas["KEYWORDS"][prefix][j][1].replace('', datas["KEYWORDS"][prefix][j][0] ) : '',
									comment: datas["KEYWORDS"][prefix][j][2] ? datas["KEYWORDS"][prefix][j][2] : '' 
								};
								
								// the replace with shouldn't be empty
								if( tmp["keywords"][prefix]['datas'][j]['replace_with'].length == 0 )
									tmp["keywords"][prefix]['datas'][j]['replace_with'] = tmp["keywords"][prefix]['datas'][j]['is_typing'];
								
								// if the comment is empty, display the replace_with value
								if( tmp["keywords"][prefix]['datas'][j]['comment'].length == 0 )
									 tmp["keywords"][prefix]['datas'][j]['comment'] = tmp["keywords"][prefix]['datas'][j]['replace_with'].replace(/{@}/g, '' );
							}
								
						}
						tmp["max_text_length"]= datas["MAX_TEXT_LENGTH"];
						parent.editAreaLoader.syntax[lang]['autocompletion'][i]	= tmp;
					}
				}
			}
		}
	}
	
	,_checkLetter: function(){
		// check that syntax hasn't changed
		if( this.curr_syntax_str != editArea.settings['syntax'] )
		{
			if( !parent.editAreaLoader.syntax[editArea.settings['syntax']]['autocompletion'] )
				this._parseSyntaxAutoCompletionDatas();
			this.curr_syntax= parent.editAreaLoader.syntax[editArea.settings['syntax']]['autocompletion'];
			this.curr_syntax_str = editArea.settings['syntax'];
			//console.log( this.curr_syntax );
		}
		
		if( editArea.is_editable )
		{
			time=new Date;
			t1= time.getTime();
			editArea.getIESelection();
			this.selectIndex	= -1;
			start=editArea.textarea.selectionStart;
			var str	= editArea.textarea.value;
			var results= [];
			
			
			for(var i in this.curr_syntax)
			{
				var last_chars	= str.substring(Math.max(0, start-this.curr_syntax[i]["max_text_length"]), start);
				var matchNextletter	= str.substring(start, start+1).match( this.curr_syntax[i]["match_next_letter"]);
				// if not writting in the middle of a word or if forcing display
				if( matchNextletter || this.forceDisplay )
				{
					// check if the last chars match a separator
					var match_prefix_separator = last_chars.match(this.curr_syntax[i]["match_prefix_separator"]);
			
					// check if it match a possible word
					var match_word= last_chars.match(this.curr_syntax[i]["match_word"]);
					
					//console.log( match_word );
					if( match_word )
					{
						var begin_word= match_word[1];
						var match_curr_word= new RegExp("^"+ parent.editAreaLoader.get_escaped_regexp( begin_word ), this.curr_syntax[i]["modifiers"]);
						//console.log( match_curr_word );
						for(var prefix in this.curr_syntax[i]["keywords"])
						{
						//	parent.console.log( this.curr_syntax[i]["keywords"][prefix] );
							for(var j=0; j<this.curr_syntax[i]["keywords"][prefix]['datas'].length; j++)
							{
						//		parent.console.log( this.curr_syntax[i]["keywords"][prefix]['datas'][j]['is_typing'] );
								// the key word match or force display 
								if( this.curr_syntax[i]["keywords"][prefix]['datas'][j]['is_typing'].match(match_curr_word) )
								{
							//		parent.console.log('match');
									hasMatch = false;
									var before = last_chars.substr( 0, last_chars.length - begin_word.length );
									
									// no prefix to match => it's valid
									if( !match_prefix_separator && this.curr_syntax[i]["keywords"][prefix]['prefix'].length == 0 )
									{
										if( ! before.match( this.curr_syntax[i]["keywords"][prefix]['prefix_reg'] ) )
											hasMatch = true;
									}
									// we still need to check the prefix if there is one
									else if( this.curr_syntax[i]["keywords"][prefix]['prefix'].length > 0 )
									{
										if( before.match( this.curr_syntax[i]["keywords"][prefix]['prefix_reg'] ) )
											hasMatch = true;
									}
									
									if( hasMatch )
										results[results.length]= [ this.curr_syntax[i]["keywords"][prefix], this.curr_syntax[i]["keywords"][prefix]['datas'][j] ];
								}	
							}
						}
					}
					// it doesn't match any possible word but we want to display something
					// we'll display to list of all available words
					else if( this.forceDisplay || match_prefix_separator )
					{
						for(var prefix in this.curr_syntax[i]["keywords"])
						{
							for(var j=0; j<this.curr_syntax[i]["keywords"][prefix]['datas'].length; j++)
							{
								hasMatch = false;
								// no prefix to match => it's valid
								if( !match_prefix_separator && this.curr_syntax[i]["keywords"][prefix]['prefix'].length == 0 )
								{
									hasMatch	= true;
								}
								// we still need to check the prefix if there is one
								else if( match_prefix_separator && this.curr_syntax[i]["keywords"][prefix]['prefix'].length > 0 )
								{
									var before = last_chars; //.substr( 0, last_chars.length );
									if( before.match( this.curr_syntax[i]["keywords"][prefix]['prefix_reg'] ) )
										hasMatch = true;
								}	
									
								if( hasMatch )
									results[results.length]= [ this.curr_syntax[i]["keywords"][prefix], this.curr_syntax[i]["keywords"][prefix]['datas'][j] ];	
							}
						}
					}
				}
			}
			
			// there is only one result, and we can select it automatically
			if( results.length == 1 && this.autoSelectIfOneResult )
			{
			//	console.log( results );
				this._select( results[0][1]['replace_with'] );
			}
			else if( results.length == 0 )
			{
				this._hide();
			}
			else
			{
				// build the suggestion box content
				var lines=[];
				for(var i=0; i<results.length; i++)
				{
					var line= "<li><a href=\"#\" class=\"entry\" onmousedown=\"EditArea_autocompletion._select('"+ results[i][1]['replace_with'].replace(new RegExp('"', "g"), "&quot;") +"');return false;\">"+ results[i][1]['comment'];
					if(results[i][0]['prefix_name'].length>0)
						line+='<span class="prefix">'+ results[i][0]['prefix_name'] +'</span>';
					line+='</a></li>';
					lines[lines.length]=line;
				}
				// sort results
				this.container.innerHTML		= '<ul>'+ lines.sort().join('') +'</ul>';
				
				var cursor	= _$("cursor_pos");
				this.container.style.top		= ( cursor.cursor_top + editArea.lineHeight ) +"px";
				this.container.style.left		= ( cursor.cursor_left + 8 ) +"px";
				this._show();
			}
				
			this.autoSelectIfOneResult = false;
			time=new Date;
			t2= time.getTime();
		
			//parent.console.log( begin_word +"\n"+ (t2-t1) +"\n"+ html );
		}
	}
};

// Load as a plugin
editArea.settings['plugins'][ editArea.settings['plugins'].length ] = 'autocompletion';
editArea.add_plugin('autocompletion', EditArea_autocompletion);                                                                          ./mvappsvr/docroot/db/edit_area/images_newdocument.gif                                              0000777 0000000 0000000 00000000252 12534142432 022114  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   2Jb⢵Ⲿ   !   ,       WI8zWla0fyʺf @v/# k82MAr5ǖ5L'hFo> ;                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/edit_area/langs_zh.js                                                         0000777 0000000 0000000 00000003751 12534142432 017722  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   editAreaLoader.lang["zh"]={
new_document: "新建空白文档",
search_button: "查找与替换",
search_command: "查找下一个 / 打开查找框",
search: "查找",
replace: "替换",
replace_command: "替换 / 打开查找框",
find_next: "查找下一个",
replace_all: "全部替换",
reg_exp: "正则表达式",
match_case: "匹配大小写",
not_found: "未找到.",
occurrence_replaced: "处被替换.",
search_field_empty: "查找框没有内容",
restart_search_at_begin: "已到到文档末尾. 从头重新查找.",
move_popup: "移动查找对话框",
font_size: "--字体大小--",
go_to_line: "转到行",
go_to_line_prompt: "转到行:",
undo: "恢复",
redo: "重做",
change_smooth_selection: "启用/禁止一些显示特性(更好看但更耗费资源)",
highlight: "启用/禁止语法高亮",
reset_highlight: "重置语法高亮(当文本显示不同步时)",
word_wrap: "toggle word wrapping mode",
help: "关于",
save: "保存",
load: "加载",
line_abbr: "行",
char_abbr: "字符",
position: "位置",
total: "总计",
close_popup: "关闭对话框",
shortcuts: "快捷键",
add_tab: "添加制表符(Tab)",
remove_tab: "移除制表符(Tab)",
about_notice: "注意：语法高亮功能仅用于较少内容的文本(文件内容太大会导致浏览器反应慢)",
toggle: "切换编辑器",
accesskey: "快捷键",
tab: "Tab",
shift: "Shift",
ctrl: "Ctrl",
esc: "Esc",
processing: "正在处理中...",
fullscreen: "全屏编辑",
syntax_selection: "--语法--",
syntax_css: "CSS",
syntax_html: "HTML",
syntax_js: "Javascript",
syntax_php: "Php",
syntax_python: "Python",
syntax_vb: "Visual Basic",
syntax_xml: "Xml",
syntax_c: "C",
syntax_cpp: "CPP",
syntax_basic: "Basic",
syntax_pas: "Pascal",
syntax_brainfuck: "Brainfuck",
syntax_sql: "SQL",
syntax_ruby: "Ruby",
syntax_robotstxt: "Robots txt",
syntax_tsql: "T-SQL",
syntax_perl: "Perl",
syntax_coldfusion: "Coldfusion",
syntax_java: "Java",
close_tab: "关闭文件"
};
                       ./mvappsvr/docroot/db/edit_area/regexp.js                                                           0000777 0000000 0000000 00000011776 12534142432 017415  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   	/*EditArea.prototype.comment_or_quotes= function(v0, v1, v2, v3, v4,v5,v6,v7,v8,v9, v10){
		new_class="quotes";
		if(v6 && v6 != undefined && v6!="")
			new_class="comments";
		return "µ__"+ new_class +"__µ"+v0+"µ_END_µ";

	};*/
	
/*	EditArea.prototype.htmlTag= function(v0, v1, v2, v3, v4,v5,v6,v7,v8,v9, v10){
		res="<span class=htmlTag>"+v2;
		alert("v2: "+v2+" v3: "+v3);
		tab=v3.split("=");
		attributes="";
		if(tab.length>1){
			attributes="<span class=attribute>"+tab[0]+"</span>=";
			for(i=1; i<tab.length-1; i++){
				cut=tab[i].lastIndexOf("&nbsp;");				
				attributes+="<span class=attributeVal>"+tab[i].substr(0,cut)+"</span>";
				attributes+="<span class=attribute>"+tab[i].substr(cut)+"</span>=";
			}
			attributes+="<span class=attributeVal>"+tab[tab.length-1]+"</span>";
		}		
		res+=attributes+v5+"</span>";
		return res;		
	};*/
	
	// determine if the selected text if a comment or a quoted text
	EditArea.prototype.comment_or_quote= function(){
		var new_class="", close_tag="", sy, arg, i;
		sy 		= parent.editAreaLoader.syntax[editArea.current_code_lang];
		arg		= EditArea.prototype.comment_or_quote.arguments[0];
		
		for( i in sy["quotes"] ){
			if(arg.indexOf(i)==0){
				new_class="quotesmarks";
				close_tag=sy["quotes"][i];
			}
		}
		if(new_class.length==0)
		{
			for(var i in sy["comments"]){
				if( arg.indexOf(i)==0 ){
					new_class="comments";
					close_tag=sy["comments"][i];
				}
			}
		}
		// for single line comment the \n must not be included in the span tags
		if(close_tag=="\n"){
			return "µ__"+ new_class +"__µ"+ arg.replace(/(\r?\n)?$/m, "µ_END_µ$1");
		}else{
			// the closing tag must be set only if the comment or quotes is closed 
			reg= new RegExp(parent.editAreaLoader.get_escaped_regexp(close_tag)+"$", "m");
			if( arg.search(reg)!=-1 )
				return "µ__"+ new_class +"__µ"+ arg +"µ_END_µ";
			else
				return "µ__"+ new_class +"__µ"+ arg;
		}
	};
	
/*
	// apply special tags arround text to highlight
	EditArea.prototype.custom_highlight= function(){
		res= EditArea.prototype.custom_highlight.arguments[1]+"µ__"+ editArea.reg_exp_span_tag +"__µ" + EditArea.prototype.custom_highlight.arguments[2]+"µ_END_µ";
		if(EditArea.prototype.custom_highlight.arguments.length>5)
			res+= EditArea.prototype.custom_highlight.arguments[ EditArea.prototype.custom_highlight.arguments.length-3 ];
		return res;
	};
	*/
	
	// return identication that allow to know if revalidating only the text line won't make the syntax go mad
	EditArea.prototype.get_syntax_trace= function(text){
		if(this.settings["syntax"].length>0 && parent.editAreaLoader.syntax[this.settings["syntax"]]["syntax_trace_regexp"])
			return text.replace(parent.editAreaLoader.syntax[this.settings["syntax"]]["syntax_trace_regexp"], "$3");
	};
	
		
	EditArea.prototype.colorize_text= function(text){
		//text="<div id='result' class='area' style='position: relative; z-index: 4; height: 500px; overflow: scroll;border: solid black 1px;'> ";
	  /*		
		if(this.isOpera){	
			// opera can't use pre element tabulation cause a tab=6 chars in the textarea and 8 chars in the pre 
			text= this.replace_tab(text);
		}*/
		
		text= " "+text; // for easier regExp
		
		/*if(this.do_html_tags)
			text= text.replace(/(<[a-z]+ [^>]*>)/gi, '[__htmlTag__]$1[_END_]');*/
		if(this.settings["syntax"].length>0)
			text= this.apply_syntax(text, this.settings["syntax"]);

		// remove the first space added
		return text.substr(1).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/µ_END_µ/g,"</span>").replace(/µ__([a-zA-Z0-9]+)__µ/g,"<span class='$1'>");
	};
	
	EditArea.prototype.apply_syntax= function(text, lang){
		var sy;
		this.current_code_lang=lang;
	
		if(!parent.editAreaLoader.syntax[lang])
			return text;
			
		sy = parent.editAreaLoader.syntax[lang];
		if(sy["custom_regexp"]['before']){
			for( var i in sy["custom_regexp"]['before']){
				var convert="$1µ__"+ sy["custom_regexp"]['before'][i]['class'] +"__µ$2µ_END_µ$3";
				text= text.replace(sy["custom_regexp"]['before'][i]['regexp'], convert);
			}
		}
		
		if(sy["comment_or_quote_reg_exp"]){
			//setTimeout("_$('debug_area').value=editArea.comment_or_quote_reg_exp;", 500);
			text= text.replace(sy["comment_or_quote_reg_exp"], this.comment_or_quote);
		}
		
		if(sy["keywords_reg_exp"]){
			for(var i in sy["keywords_reg_exp"]){	
				text= text.replace(sy["keywords_reg_exp"][i], 'µ__'+i+'__µ$2µ_END_µ');
			}			
		}
		
		if(sy["delimiters_reg_exp"]){
			text= text.replace(sy["delimiters_reg_exp"], 'µ__delimiters__µ$1µ_END_µ');
		}		
		
		if(sy["operators_reg_exp"]){
			text= text.replace(sy["operators_reg_exp"], 'µ__operators__µ$1µ_END_µ');
		}
		
		if(sy["custom_regexp"]['after']){
			for( var i in sy["custom_regexp"]['after']){
				var convert="$1µ__"+ sy["custom_regexp"]['after'][i]['class'] +"__µ$2µ_END_µ$3";
				text= text.replace(sy["custom_regexp"]['after'][i]['regexp'], convert);			
			}
		}
			
		return text;
	};
  ./mvappsvr/docroot/db/edit_area/images_load.gif                                                     0000777 0000000 0000000 00000002021 12534142432 020477  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a                $&*) )1+303?:<!@J%GK1HO+O9Q1VY!\8S/X&]7])c;^(d:b'g<e9g0j9kAi@gZcAk8pDnFp]k.}D|hrF<HIHIZ{7KKX}GNOrzRLoO`FXUdaKn݂WYtle^deox熣ovۉ耯눮ݡݪ}腿쵲ϵ֏ڟױ!
  ,      	HA<4%IHIbd6TBCP$D8q$kUMrTB7h2Iӡ/3OZ`m@JչgM2dʉ=P=5b!cD;2T"8Z|  ?TiE(&0>T` A$+2Dh@@)0H1Gf(a\fњ*%HB @?i;o F.P A ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/gridtable/                                                                    0000777 0000000 0000000 00000000000 12534142432 015566  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/gridtable/text_align_center.png                                               0000666 0000000 0000000 00000000344 12534142432 021773  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         R   'PLTE     )))333:::BBBJJJRRRZZZffftttF   tRNS @f   bKGD H   	pHYs  
  
B4   tIME	   6IDATc`vZ5Eh43S]QS]PRϠ9+	@ K1    IENDB`                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/gridtable/palette.png                                                         0000666 0000000 0000000 00000001530 12534142432 017731  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8ˍSKQS@VT
^(R2%JeDse4MԅѼl˼\NksK2S\MDslj
᧳A=F\|4 0ZQ8Rj]8Ə:b1djaIaP~=9_/(0ƏL23ia5FgXG|fPb4\I?G`j%?&l}tLD,3]$2{pj"XEG2i(R^J#F%)hIt d8̶Q&=?؁6xcy[3k:dx A?|#̨
!Kp6HߴlX||QP,ͰdXlÛp~PKc.^	:Aц97&)\P`,Y61\r>N
`Ru6im:
o$E-ޏ2uHAWfLBIJ!*W/gi:L/9zXk9#-c T\)BqIKPypd0|;3}sHdu{X}2ZaV).EkLǂ(c6$⾇L8Gܩ`|-a`IǴ#
we;FH˝eIĒK1~ )e]CM:nMH31e=w{d |?7b&EQ$Nv_La@\    IENDB`                                                                                                                                                                        ./mvappsvr/docroot/db/gridtable/ui-bg_flat_75_aaaaaa_40x100.png                                     0000666 0000000 0000000 00000000264 12534142432 023003  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR   (   d   drz   {IDATh1  17Y$t3;_TUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTüŝc)    IENDB`                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/gridtable/arrow_refresh.png                                                   0000666 0000000 0000000 00000000544 12534142432 021147  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         (-S   ]PLTE  !'f#)h$*k&3v.<5@9D=KCQKVPQIUMWNc]^T_Vh`kce[h^mb|swĀƃɈ̙̍ԛ$c ɑ   tRNS @f   bKGD H   	pHYs  
  
B4   tIME	|   IDATu DM4ml*Liˢ԰/~c_:,)(m,9(j$ h1e{j6B\7DXEܽ	1O"l=l	0~(G    IENDB`                                                                                                                                                            ./mvappsvr/docroot/db/gridtable/ui-icons_0078ae_256x240.png                                         0000666 0000000 0000000 00000010421 12534142432 022016  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         IJ   PLTEzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzPt   NtRNS 2P."Tp@f` <BHJZ&0R,4j8D|($
blߝF>n~hhH  IDATx]b۶H儒-{iZK:glkn-tIqq?  E$dK>$>; PZ sVh!Sy0E0}H)-tkoܪKp\RϠ .E7
)*V;~PeBx*,=$zDؾ  JҸٻ 9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;"
i]dddddddd4y5 	Rb@(8CdŪݡ,@T@ibrq0alX!pe,	=4bW {
5Ƭhu~(Q^@3="b5XC@JCT76q_5@,r	šɩD)T|O@
ON-ՙ	[n@RXIm݋(F @?=0puL;g$@6η
K`>п @h գKVn"a"%l@.v$/U^G:#`` uTtK~ŋZ5T%kxk]\*Q,҇B44OXK|yg+_M(lоEO
 V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V
rh(]tI^}oצoS3	";ʙb}"߰	){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.} Q3.Nس} )>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa3	{oB&<L[Nc.öi=` Q@d
͆I.Il`\t[< Cit484-r+f쑱BCB MH	iy }>rxp|z;BǏ;burcK4tz1G~`ؚK|	̔>ۡO$~
Ao)0pzz
} i `;ADm8n:cfA@s7L  Z/..h8or?N93B~o_'` opO-:TG	L;7]`B%˛>*wTpM 0H}&t^1'Oqr'2P͡+z,tIW''|en=ǳgRm[NStK{҉mؓVt6ҲR`ζN&}B	U(r<qȁVyrrA**دzg6D#	YP`vs~(zMle|uQa*}+TRXc"+*NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4)`N狌.߭ ǣ)q	2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\	%,ߚ/pR~/^lnp7t0_0l4_b0MWΦjmбɎl
|reȫ`B-v.iRox}
)%#`ЂR5CA2sua sYy3=jaeoI7~.plA΃
`O)	^>Mz	+4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G FZ)O	!lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a v]m1+3 y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c-賟Lδ>]5.sYs1f0;'̨Yg銛{@9	`aC(=%bo2=n1	jBoS$n#m =i0ci9}oI	qT] W%.(؅]z\x
f"]o'u䫵tk{v;A C3ֆwwR_#X(xҋ/q%Whpk_IX'b/fXKi"#####QCLi2t5L 0
QiH2;yTOok;עٶ`RNg{zy! Kxm?A(vU~mL(`o/!nmX-{v [ dw=n「sdwzn(}Oy~m
?XU;, V'+V&JRZ]᧭:zC'-߆@y4u`Vۓwъ#zP@QN>2/{\o) W~a3xLw:_Q;=pּdt\'8~3SRP6y+XQ*޺r
̗ѭ*޺r
gl/\U^u$|mbVnw\V|D͊NVNy7 k<;/E}?E*ǳgO ~g/96f
cD}%g$QG7o) UJo,O@0߾Q(;bw:5	NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 
3
u	Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/gridtable/sheet_col_delete.png                                                0000666 0000000 0000000 00000000627 12534142432 021570  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         (-S   tEXtSoftware Adobe ImageReadyqe<   ~PLTEѢ}}~qqr{|{̢}PP[[@1   *tRNS 2\   yIDATx\ DQiv\)ҊU8績Fij朳{P?P pfuEHQ$\@N1hu  8"ĺ*O    IENDB`                                                                                                         ./mvappsvr/docroot/db/gridtable/sheet_row_delete.png                                                0000666 0000000 0000000 00000000627 12534142432 021622  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         (-S   tEXtSoftware Adobe ImageReadyqe<   ~PLTEѢ}}~qqr{|{٢}PP[[y*D   *tRNS 2\   yIDATx\0DAP<mBMONqݿv9Ǭι/(
n xkD6ZcR	8g	!a<z y~CB#ų ;"    IENDB`                                                                                                         ./mvappsvr/docroot/db/gridtable/sheet_row_add_multi.png                                             0000666 0000000 0000000 00000000754 12534142432 022323  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         (-S   tEXtSoftware Adobe ImageReadyqe<   PLTENDTJoF(we}}~sbral[qqr顩譮{|{o^jXٮƝI4N9VcanA}B   5tRNS |
   IDATx\0`wA{4qJ%N,1!0odc}b@Sm$I(eC>εV̺#p-4h(L ImzB&vBBY6Z{PHxp )i0`    IENDB`                    ./mvappsvr/docroot/db/gridtable/ui-bg_glass_55_f8da4e_1x400.png                                     0000666 0000000 0000000 00000000203 12534142432 022763  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR        oX
   JIDAT8ϡPCǿX,U
0L̛5's%@4!ā0HW,#1gyg@b	    IENDB`                                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/gridtable/sheet_col_add_multi.png                                             0000666 0000000 0000000 00000000755 12534142432 022272  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         (-S   tEXtSoftware Adobe ImageReadyqe<   PLTENDTJoF(we}}~sbral[qqr顩譮{|{o^jXٮƝI4N9VcanA}B   5tRNS |
   IDATx\0PܠȌ;K3Ƹ6ĽLea5߉8v}V P4 ~)p]	W(
'\Rr,"NR"sm "c=
	ev89aN!i1 r;/ y0 )iG/    IENDB`                   ./mvappsvr/docroot/db/gridtable/ui-icons_fcd113_256x240.png                                         0000666 0000000 0000000 00000010421 12534142432 022073  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         IJ   PLTEv[<   NtRNS 2P."Tp@f` <BHJZ&0R,4j8D|($
blߝF>n~hhH  IDATx]b۶H儒-{iZK:glkn-tIqq?  E$dK>$>; PZ sVh!Sy0E0}H)-tkoܪKp\RϠ .E7
)*V;~PeBx*,=$zDؾ  JҸٻ 9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;"
i]dddddddd4y5 	Rb@(8CdŪݡ,@T@ibrq0alX!pe,	=4bW {
5Ƭhu~(Q^@3="b5XC@JCT76q_5@,r	šɩD)T|O@
ON-ՙ	[n@RXIm݋(F @?=0puL;g$@6η
K`>п @h գKVn"a"%l@.v$/U^G:#`` uTtK~ŋZ5T%kxk]\*Q,҇B44OXK|yg+_M(lоEO
 V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V
rh(]tI^}oצoS3	";ʙb}"߰	){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.} Q3.Nس} )>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa3	{oB&<L[Nc.öi=` Q@d
͆I.Il`\t[< Cit484-r+f쑱BCB MH	iy }>rxp|z;BǏ;burcK4tz1G~`ؚK|	̔>ۡO$~
Ao)0pzz
} i `;ADm8n:cfA@s7L  Z/..h8or?N93B~o_'` opO-:TG	L;7]`B%˛>*wTpM 0H}&t^1'Oqr'2P͡+z,tIW''|en=ǳgRm[NStK{҉mؓVt6ҲR`ζN&}B	U(r<qȁVyrrA**دzg6D#	YP`vs~(zMle|uQa*}+TRXc"+*NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4)`N狌.߭ ǣ)q	2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\	%,ߚ/pR~/^lnp7t0_0l4_b0MWΦjmбɎl
|reȫ`B-v.iRox}
)%#`ЂR5CA2sua sYy3=jaeoI7~.plA΃
`O)	^>Mz	+4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G FZ)O	!lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a v]m1+3 y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c-賟Lδ>]5.sYs1f0;'̨Yg銛{@9	`aC(=%bo2=n1	jBoS$n#m =i0ci9}oI	qT] W%.(؅]z\x
f"]o'u䫵tk{v;A C3ֆwwR_#X(xҋ/q%Whpk_IX'b/fXKi"#####QCLi2t5L 0
QiH2;yTOok;עٶ`RNg{zy! Kxm?A(vU~mL(`o/!nmX-{v [ dw=n「sdwzn(}Oy~m
?XU;, V'+V&JRZ]᧭:zC'-߆@y4u`Vۓwъ#zP@QN>2/{\o) W~a3xLw:_Q;=pּdt\'8~3SRP6y+XQ*޺r
̗ѭ*޺r
gl/\U^u$|mbVnw\V|D͊NVNy7 k<;/E}?E*ǳgO ~g/96f
cD}%g$QG7o) UJo,O@0߾Q(;bw:5	NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 
3
u	Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/gridtable/disk.png                                                            0000666 0000000 0000000 00000000655 12534142432 017234  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         (-S   PLTEarl2c4f5i5j9l>p^degmys|t܁{ᄣ}抧ҀbՕښݟ᤾ܿ1`    tRNS @f   bKGD H   	pHYs  
  
B4   tIME	&#>I   IDATM PC#;g(?fg `Љ 5"Z3 v>`,N+`-ZoaLZB^m>;ნ݅zB0y/=/LsF`E*~J)!d~}m    IENDB`                                                                                   ./mvappsvr/docroot/db/gridtable/text_italic.png                                                     0000666 0000000 0000000 00000000326 12534142432 020606  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         R   !PLTE   (((333<<<AAAJJJRRRYYYfff    tRNS @f   bKGD H   	pHYs  
  
B4   tIME	
=   .IDATc`8gCY0! { e:@P3LV\B Nz\    IENDB`                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/gridtable/text_strikethrough.png                                              0000666 0000000 0000000 00000000415 12534142432 022242  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         7   gAMA  7   tEXtSoftware Adobe ImageReadyqe<   IDAT(cπ2PSA`򄙑*{U#cQ?fBK!3}3ػ`"rwmϘ*(/-mK Am}+albw1ئׇ"CI;3i4 [:?9w    IENDB`                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/gridtable/ui-icons_e0fdff_256x240.png                                         0000666 0000000 0000000 00000010421 12534142432 022244  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         IJ   PLTEωm   NtRNS 2P."Tp@f` <BHJZ&0R,4j8D|($
blߝF>n~hhH  IDATx]b۶H儒-{iZK:glkn-tIqq?  E$dK>$>; PZ sVh!Sy0E0}H)-tkoܪKp\RϠ .E7
)*V;~PeBx*,=$zDؾ  JҸٻ 9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;"
i]dddddddd4y5 	Rb@(8CdŪݡ,@T@ibrq0alX!pe,	=4bW {
5Ƭhu~(Q^@3="b5XC@JCT76q_5@,r	šɩD)T|O@
ON-ՙ	[n@RXIm݋(F @?=0puL;g$@6η
K`>п @h գKVn"a"%l@.v$/U^G:#`` uTtK~ŋZ5T%kxk]\*Q,҇B44OXK|yg+_M(lоEO
 V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V
rh(]tI^}oצoS3	";ʙb}"߰	){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.} Q3.Nس} )>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa3	{oB&<L[Nc.öi=` Q@d
͆I.Il`\t[< Cit484-r+f쑱BCB MH	iy }>rxp|z;BǏ;burcK4tz1G~`ؚK|	̔>ۡO$~
Ao)0pzz
} i `;ADm8n:cfA@s7L  Z/..h8or?N93B~o_'` opO-:TG	L;7]`B%˛>*wTpM 0H}&t^1'Oqr'2P͡+z,tIW''|en=ǳgRm[NStK{҉mؓVt6ҲR`ζN&}B	U(r<qȁVyrrA**دzg6D#	YP`vs~(zMle|uQa*}+TRXc"+*NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4)`N狌.߭ ǣ)q	2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\	%,ߚ/pR~/^lnp7t0_0l4_b0MWΦjmбɎl
|reȫ`B-v.iRox}
)%#`ЂR5CA2sua sYy3=jaeoI7~.plA΃
`O)	^>Mz	+4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G FZ)O	!lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a v]m1+3 y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c-賟Lδ>]5.sYs1f0;'̨Yg銛{@9	`aC(=%bo2=n1	jBoS$n#m =i0ci9}oI	qT] W%.(؅]z\x
f"]o'u䫵tk{v;A C3ֆwwR_#X(xҋ/q%Whpk_IX'b/fXKi"#####QCLi2t5L 0
QiH2;yTOok;עٶ`RNg{zy! Kxm?A(vU~mL(`o/!nmX-{v [ dw=n「sdwzn(}Oy~m
?XU;, V'+V&JRZ]᧭:zC'-߆@y4u`Vۓwъ#zP@QN>2/{\o) W~a3xLw:_Q;=pּdt\'8~3SRP6y+XQ*޺r
̗ѭ*޺r
gl/\U^u$|mbVnw\V|D͊NVNy7 k<;/E}?E*ǳgO ~g/96f
cD}%g$QG7o) UJo,O@0߾Q(;bw:5	NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 
3
u	Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/gridtable/ui-bg_glass_45_0078ae_1x400.png                                     0000666 0000000 0000000 00000000210 12534142432 022611  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR        oX
   OIDAT810ѽ$A+0
Z@s͛m~Y(r`3&%v82p8=4p(7-٘    IENDB`                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/gridtable/palette_bg.png                                                      0000666 0000000 0000000 00000001607 12534142432 020406  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         (-S   sRGB   PLTEHSbB"KN4-TUtK#_f#_gPZX6#lv4if4jiZ-Hhd:mg"v"v_AAPmg`?sq|hFeBqp[[vm*sr^j%vsZpUpSpBqUq@s1}|es1[Zt8v5w6w7k|U''2~X|>kY}?IDNJuoj}y͏]А\Rɓ`ɔ`ʔaޑY̖cߒYߓ[k͘eߔ\`Κhz<{<@қi[ŎEHўnҞnWgjSª_rץwqܤw֦xئzu,٩|ܩ3<|Ay]~ᮇa|}ᯆᰇ豀鳆[ⵎⶎ鴎㶐㷏跓⹓乒库깕깖꺗軘[뼑g꼙뼙뽚mâģŤƦƦǦ;ǨȨɩʩʪBʫʫ1̭+,ͮͯϱ^вҴ׺mI+   tRNS @f   bKGD H   	pHYs        tIMET~S   IDATc`m9y JOOO@<~J%)=+ MeX^"
,,OLjQiZV+SۧF͈cRK.ͩampj[`^Yd`hL;L#!S,:Kv5Ӝ) T1iCUU3#z7ZSYKT{=]r.c	jnt҃
&+sEؙ8AwQ  }J    IENDB`                                                                                                                         ./mvappsvr/docroot/db/gridtable/ui-bg_gloss-wave_75_2191c0_500x100.png                              0000666 0000000 0000000 00000006601 12534142432 023660  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR     d   p}  HIDATxKN՞qB
6ΰ_dcƝϴ*V|Uw-   pל>Z      `     `     `     `     `     `     `     `   @Ы:nK>uֶXVGl9j6xxuyI.+gZDL缾4[OG8|dڡ;N[OlzM{.neZ1VlOekgۨ鈎k6r	be'`t#zu39|[6=94ٶH"ѣ-CdDz3cgS,D7hH=OF6{7H6GS.U9%w  `C  yG^@  O     0 l   0Z4H[kZZzm]vJ$ZMZyKZ4ZZZGrMjbZ^1cE֕,ő6&93)[WvHak~,ۑ1kRѪiWdMVO)?yW_<  pp  `     ` b  :      :     Xj)w֫-?MbE|[Ieki&U6՟l4[͚NF|qcZj7;f/w=팢}L[㡵kES/xڠ3-Ǟ^R"Z[:;nZ~;  %w  P7'R^E[?CX$^YYj}iSOҥmъŋr%4yyrIڤؒIo'iΎ;_K7%Q/\X3;_Ƥ[ҧ[ti_-Zl;j)eLlyf"Dm^4-|GE+VdRDMS[{i6G~/7VhM.;^.1~};=9]S2yw|Y#s(X;Ǽ:=Y_#\r  RkY$emknE|m|ɟkkԯOˣ'-nzXZ}m\H_eVx9ӊ!͋/xsf5Zl+x]?/9r鉴h]^}M֞<䦭;   pp  `   }   n~޸4͵+^=kc|j4{u[H2Y1R|x5M鷤j4%x!ij띳bXcT^[%=V4<m^=~YoEs>2RDItxNfmi#qo/w>  9oj)y)r]|~c2Moi*s n{Z벨祔߿>cYx:`<hoFR>wI4|:d NOK7ZKyQ>"j繾}xYaxxSywWizw42o&cOh Amwt]2^&j y)q-o7eCyjkizw6÷㩔wN3^>Z^=Tz驙sK-G< )v!z90aO'əjW>s_⦩eRoٮ,K(>/w	>WukCq rExFtaA%BvS;V^{0s˹Vw˰Fl].K-/̧̓ir˙税d$ :V^x  `     `   0 sUBu*ekޝ5~,Ϗiii>Еi\)%?jl9V>KVkI~ՐAV^ݚڸb4g9#ƴ6ѵg=9*v)7ߡok5=6Vzei+Օz#6ћy$W^~ؾ֬K{hޘt='G;   P   |@    0 ?        ?[   >     K   %w  P   |B  .C  wN{~PG/(Y8	uD6կK|+Ds;/7)gZuc)~ޥū{)gRʜ̦~XlY==#9b}.̽Km{e|u?[      )  `   0 C   >   :   ?K㖪]rOgٖܲyVUc͏֮h<LWR{e0֭=ڼ8͵T_oFV|N#Cď?;#XmI>mOG'5&:  3R->7M#3ZNrٖ[ۑm˶1w{]GO#GyKn#3ZNrٖ[ۑm˶1w\GO#GyK̥ZNӷҶޞkY{[)fc{n#6R}ͮ֕JqxR2ZV[k/c\òrbiҠ/]ƭʋ55R<NO1yub1:%\ImEk>Ysʏ/~9!ų eڬ鍬mlOGv͉oZ2w   G_r<Zc=񯡽oIҳ7>Z.Oy)%.Ad>Eu홛&'3XUv{6lѝtOkhocL=%R1/9ۿ%֟#̧=sddدsў   )  ` N\t)XVMʥK ޥ-˿[ʗkK[dkc϶l=gƞvij2OWDsP*]bz轜GyG˽c0^iv{mzmN흤Vw+=ٺGm щM=눱d(osZkmѺѲ{ԣ>y}n9jSϏ   npZF!    IENDB`                                                                                                                               ./mvappsvr/docroot/db/gridtable/ui-icons_f5e175_256x240.png                                         0000666 0000000 0000000 00000010421 12534142432 022026  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         IJ   PLTEttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
   NtRNS 2P."Tp@f` <BHJZ&0R,4j8D|($
blߝF>n~hhH  IDATx]b۶H儒-{iZK:glkn-tIqq?  E$dK>$>; PZ sVh!Sy0E0}H)-tkoܪKp\RϠ .E7
)*V;~PeBx*,=$zDؾ  JҸٻ 9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;"
i]dddddddd4y5 	Rb@(8CdŪݡ,@T@ibrq0alX!pe,	=4bW {
5Ƭhu~(Q^@3="b5XC@JCT76q_5@,r	šɩD)T|O@
ON-ՙ	[n@RXIm݋(F @?=0puL;g$@6η
K`>п @h գKVn"a"%l@.v$/U^G:#`` uTtK~ŋZ5T%kxk]\*Q,҇B44OXK|yg+_M(lоEO
 V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V
rh(]tI^}oצoS3	";ʙb}"߰	){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.} Q3.Nس} )>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa3	{oB&<L[Nc.öi=` Q@d
͆I.Il`\t[< Cit484-r+f쑱BCB MH	iy }>rxp|z;BǏ;burcK4tz1G~`ؚK|	̔>ۡO$~
Ao)0pzz
} i `;ADm8n:cfA@s7L  Z/..h8or?N93B~o_'` opO-:TG	L;7]`B%˛>*wTpM 0H}&t^1'Oqr'2P͡+z,tIW''|en=ǳgRm[NStK{҉mؓVt6ҲR`ζN&}B	U(r<qȁVyrrA**دzg6D#	YP`vs~(zMle|uQa*}+TRXc"+*NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4)`N狌.߭ ǣ)q	2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\	%,ߚ/pR~/^lnp7t0_0l4_b0MWΦjmбɎl
|reȫ`B-v.iRox}
)%#`ЂR5CA2sua sYy3=jaeoI7~.plA΃
`O)	^>Mz	+4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G FZ)O	!lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a v]m1+3 y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c-賟Lδ>]5.sYs1f0;'̨Yg銛{@9	`aC(=%bo2=n1	jBoS$n#m =i0ci9}oI	qT] W%.(؅]z\x
f"]o'u䫵tk{v;A C3ֆwwR_#X(xҋ/q%Whpk_IX'b/fXKi"#####QCLi2t5L 0
QiH2;yTOok;עٶ`RNg{zy! Kxm?A(vU~mL(`o/!nmX-{v [ dw=n「sdwzn(}Oy~m
?XU;, V'+V&JRZ]᧭:zC'-߆@y4u`Vۓwъ#zP@QN>2/{\o) W~a3xLw:_Q;=pּdt\'8~3SRP6y+XQ*޺r
̗ѭ*޺r
gl/\U^u$|mbVnw\V|D͊NVNy7 k<;/E}?E*ǳgO ~g/96f
cD}%g$QG7o) UJo,O@0߾Q(;bw:5	NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 
3
u	Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/gridtable/page_link.png                                                       0000666 0000000 0000000 00000001655 12534142432 020234  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         (-S   sRGB   PLTE   BCEAEHCFHFFFIKPKLMLLLGMXMMMQQQ3_=`9a0e1e3ibdgbdheeedfhggg8qhkoikmjkmglpWpWrNt;vSt<xqqqBysss@|qw{E~BBxxxyyyEEFPFGIIJKKKLJMOOOOȃdۋeۑ}}⤮⮯ĘֳεӺ*x   tRNS @f   	pHYs        tIME 0  
IDATc``{;3900\je˖,l(-/IޜXXW5L	(` ks@z&t4%%
2ibwMqnv}ъӧM)]0X:uڤIj M
vptp
ϫYW2R5EMGK1FAaCJ,sdbt+YzR)Ҍ,\\,1E|C5C#\8ssIHK2  aOi:    IENDB`                                                                                   ./mvappsvr/docroot/db/gridtable/ui-bg_gloss-wave_50_6eac2c_500x100.png                              0000666 0000000 0000000 00000010240 12534142432 024067  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR     d   p}  gIDATx[rAYYje9ySΡB} t   Gs    <l      l      l      l      l      l      l      l      Ά;eSյ{>ƽ{{X1+6*ZjN6=LTV<N,>/wlW3ol@۟>d8FԳQ2<^ϒdF͓0zN]*F>3,hQWšv޷u;S'E23ۑT7o[if;ʌ,93i}Rc$
J(JhFm5@ TE/ѣϳj/,1*rS   l   pݧ}       `  mx>b?x?d#[^c}x-{}L(v+^?>xqx}y姏{yj&'?kc&9=3Gkxj#iTck$Nžn+5{RcsٴK5Og?e{^@ѹ-O7pXټ2{y%,\ge}U^e/T]gfZjجQj<J~O3Ŷ:G#\^    `   ;   x   l   }k[/Yr|,Kw#9t=+֙g:ƙɎ!/9RJ_bfv5'kk-Q5Yk]&9St/_s&~4k/j3jFH:pбtGUZn_jLΙSmMͨjNX;?{yZΘ疞boXН5mėwNzJ×b;jDdX*n}n3;_/c^O\slbj^Qc駊z-zޞ2FnW+zmKZYk]tXz^*DnwUWlf1UnSiWnTЈvfVKuGyzQPSS*JnFA߳mfKJM+յ:geVչoFY?*~Eq   n?}2%kٲڢ>Ey*~>|eq+G)9rٶrebƓٰY1WӉ[g&'嬯Q-ݫ,
YeǊǋ7Ͳ/bxc|T=2W&*u7շeDgI)D磢Yn"j+*hg9kK񑜎)"yv"Rד_gX[eU9-w  ?Y<^&?e{=+Ƭ]Ϟe[(OY<V_f/O߫*J|6,;q~"Y2L67"^ܵqzwϋQэ֛l\qey1+^<J+bcO.u2Re	Mny1fmvglerj,UuF:U1*#:/#ќG2YW+!]%J\3+qdkJe~Tt_   l   py   ښ X29Ͼu-n7c-J*;U~$wů/C	ޏT~THo#RVL}sFjO13잝Y)qour SQx9Q%w*kK/Q{zT|Gb?:_St3;gt3*y}{ˆՖg3uF]Fگnf}վ"ؙa#;?3e^#sOWe%V5ѵ)˷Wۿ3ݦl-ӳڈmڶ=1" N<#|~owmù￤$9X7ȶOT.ֶf?a\'ҶStܗޫOo|ߜʃ=nM'
[ǻ['ϓ_ ݺ'g?ĹtM]>>aߍڷ}>?#ܿC|;g >-Loxk )lr1ĥ.wv~kٷsЂ |Z&.Nq xtxIcuW~k}O*ϧ |%~kXPoykMlvAgyy9	W.d޶֒kW0Ε  b$rOx@   %   5x   \   W*+ݿrQHz^k87b[3!ϳ9#Lֳݚn_*[rZGWkgX1E>]G9q6n/^{2g,YM{ufW׾d
Fn={=yH@emqUgmž*SUƷ:&Ge,d}Fm?+֪gg3uۙ*{CVQyW׾dQ_l  Eq      W   _    , o  ,   ,   5q   ?r  X r  X    B  X   pg'U|e{3m[3~nT**~hWA͍:vl_u\fǖ޳VTtj<{۵̦Φet3Ŧ}զ>j;>l\G޳63z3`S?N5  8    +t  |m  zsن<![>s(D^^U9K/:덛"gőRcTD?jH%7^U^Ռe?Q^d됺hSc(*===eg8(ƳtW&%ǳƭHQ[X1Xr9įI/Lҙ5qqeti"%ӫ!Zw|/yrcKogެ#.lߕ=;^`eUưܨ>uZCFFgϿ2ޞ7#gkرWBԇ(6y[c4[5?֧g]2LȎ2j?-ZD61M ;WMS]˳_DG1U3OدMkV~W0n^3Qfgrsl_-o3y؝lYmk:7lg_5Qfgrsl_-o3y؍6Fͬﶵr\[{	폓K㹞~~|6qv^zgjz9="9+'QE1xe˫n#Q^y:ʘD5]e:QA+VkGY}h>Es+Oh,TٜEcPY*}UwGuQ7??C;+gj|V+qfvUNcf{/;XUsP/e|<?jF~YKu;VTr7bWn6G]Foy   l   _  W   piE>;t_%H'9^p]Б]٨^^&qĦg/^Rj,זťtռ[JMVuɫSeT}%㬟X65bxv\V]T|֦̄ ԉĤWX<"#GoFe2ReMrUM]뙛z3kS_o   ?NTDv    IENDB`                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/gridtable/text_bold.png                                                       0000666 0000000 0000000 00000000360 12534142432 020257  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         R   'PLTE  )))333<<<AAAJJJSSSYYYfffsssK[   tRNS @f   bKGD H   	pHYs  
  
B4   tIME	1]B   BIDATc`voX5Ze0K 40%`O`0060H ^t
Bq    IENDB`                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/gridtable/ui-icons_f7a50d_256x240.png                                         0000666 0000000 0000000 00000010421 12534142432 022100  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         IJ   PLTE=   NtRNS 2P."Tp@f` <BHJZ&0R,4j8D|($
blߝF>n~hhH  IDATx]b۶H儒-{iZK:glkn-tIqq?  E$dK>$>; PZ sVh!Sy0E0}H)-tkoܪKp\RϠ .E7
)*V;~PeBx*,=$zDؾ  JҸٻ 9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;"
i]dddddddd4y5 	Rb@(8CdŪݡ,@T@ibrq0alX!pe,	=4bW {
5Ƭhu~(Q^@3="b5XC@JCT76q_5@,r	šɩD)T|O@
ON-ՙ	[n@RXIm݋(F @?=0puL;g$@6η
K`>п @h գKVn"a"%l@.v$/U^G:#`` uTtK~ŋZ5T%kxk]\*Q,҇B44OXK|yg+_M(lоEO
 V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V
rh(]tI^}oצoS3	";ʙb}"߰	){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.} Q3.Nس} )>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa3	{oB&<L[Nc.öi=` Q@d
͆I.Il`\t[< Cit484-r+f쑱BCB MH	iy }>rxp|z;BǏ;burcK4tz1G~`ؚK|	̔>ۡO$~
Ao)0pzz
} i `;ADm8n:cfA@s7L  Z/..h8or?N93B~o_'` opO-:TG	L;7]`B%˛>*wTpM 0H}&t^1'Oqr'2P͡+z,tIW''|en=ǳgRm[NStK{҉mؓVt6ҲR`ζN&}B	U(r<qȁVyrrA**دzg6D#	YP`vs~(zMle|uQa*}+TRXc"+*NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4)`N狌.߭ ǣ)q	2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\	%,ߚ/pR~/^lnp7t0_0l4_b0MWΦjmбɎl
|reȫ`B-v.iRox}
)%#`ЂR5CA2sua sYy3=jaeoI7~.plA΃
`O)	^>Mz	+4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G FZ)O	!lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a v]m1+3 y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c-賟Lδ>]5.sYs1f0;'̨Yg銛{@9	`aC(=%bo2=n1	jBoS$n#m =i0ci9}oI	qT] W%.(؅]z\x
f"]o'u䫵tk{v;A C3ֆwwR_#X(xҋ/q%Whpk_IX'b/fXKi"#####QCLi2t5L 0
QiH2;yTOok;עٶ`RNg{zy! Kxm?A(vU~mL(`o/!nmX-{v [ dw=n「sdwzn(}Oy~m
?XU;, V'+V&JRZ]᧭:zC'-߆@y4u`Vۓwъ#zP@QN>2/{\o) W~a3xLw:_Q;=pּdt\'8~3SRP6y+XQ*޺r
̗ѭ*޺r
gl/\U^u$|mbVnw\V|D͊NVNy7 k<;/E}?E*ǳgO ~g/96f
cD}%g$QG7o) UJo,O@0߾Q(;bw:5	NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 
3
u	Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/gridtable/ui-bg_flat_55_999999_40x100.png                                     0000666 0000000 0000000 00000000264 12534142432 022421  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR   (   d   drz   {IDATh1  1W[$t3;_TUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPT<m    IENDB`                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/gridtable/sheet_get_range.png                                                 0000666 0000000 0000000 00000000667 12534142432 021430  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         (-S   tEXtSoftware Adobe ImageReadyqe<   PLTEaY}}~̿ѹqqrʠŭ^¥W{|{\_U   0tRNS bx   IDATx\0TUA줿41<J6{u	?0Gi xb4>P,&(x!9ZZŔ+$lhƮY}s!` ',m    IENDB`                                                                         ./mvappsvr/docroot/db/gridtable/find.png                                                            0000666 0000000 0000000 00000001223 12534142432 017212  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  %IDAT8c?%4ydÞ'/XfƦ"ʀGvi QTo@5 )%k;o4 7Y%uZbVTyE,Xݣo6ةm=x)k?"eKZ帹yLe?	'?e}KjmѹÓ.dfay6 \Vo]Z9մ6\K/ bĬ`
*YBc~Z:
ola_[S1qIbR/*.?##;L@	:
]_@$e;@1/x%|W4 |F=c 9WA1 2 5zaN?(8 SSQEQBZ(`?֎nx% P`_IU
 P,aj (X@K*п9} ce&R1 2hZ<u    IENDB`                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/docroot/db/gridtable/ui-icons_056b93_256x240.png                                         0000666 0000000 0000000 00000010421 12534142432 021742  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         IJ   PLTEjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjdv   NtRNS 2P."Tp@f` <BHJZ&0R,4j8D|($
blߝF>n~hhH  IDATx]b۶H儒-{iZK:glkn-tIqq?  E$dK>$>; PZ sVh!Sy0E0}H)-tkoܪKp\RϠ .E7
)*V;~PeBx*,=$zDؾ  JҸٻ 9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;"
i]dddddddd4y5 	Rb@(8CdŪݡ,@T@ibrq0alX!pe,	=4bW {
5Ƭhu~(Q^@3="b5XC@JCT76q_5@,r	šɩD)T|O@
ON-ՙ	[n@RXIm݋(F @?=0puL;g$@6η
K`>п @h գKVn"a"%l@.v$/U^G:#`` uTtK~ŋZ5T%kxk]\*Q,҇B44OXK|yg+_M(lоEO
 V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V
rh(]tI^}oצoS3	";ʙb}"߰	){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.} Q3.Nس} )>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa3	{oB&<L[Nc.öi=` Q@d
͆I.Il`\t[< Cit484-r+f쑱BCB MH	iy }>rxp|z;BǏ;burcK4tz1G~`ؚK|	̔>ۡO$~
Ao)0pzz
} i `;ADm8n:cfA@s7L  Z/..h8or?N93B~o_'` opO-:TG	L;7]`B%˛>*wTpM 0H}&t^1'Oqr'2P͡+z,tIW''|en=ǳgRm[NStK{҉mؓVt6ҲR`ζN&}B	U(r<qȁVyrrA**دzg6D#	YP`vs~(zMle|uQa*}+TRXc"+*NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4)`N狌.߭ ǣ)q	2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\	%,ߚ/pR~/^lnp7t0_0l4_b0MWΦjmбɎl
|reȫ`B-v.iRox}
)%#`ЂR5CA2sua sYy3=jaeoI7~.plA΃
`O)	^>Mz	+4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G FZ)O	!lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a v]m1+3 y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c-賟Lδ>]5.sYs1f0;'̨Yg銛{@9	`aC(=%bo2=n1	jBoS$n#m =i0ci9}oI	qT] W%.(؅]z\x
f"]o'u䫵tk{v;A C3ֆwwR_#X(xҋ/q%Whpk_IX'b/fXKi"#####QCLi2t5L 0
QiH2;yTOok;עٶ`RNg{zy! Kxm?A(vU~mL(`o/!nmX-{v [ dw=n「sdwzn(}Oy~m
?XU;, V'+V&JRZ]᧭:zC'-߆@y4u`Vۓwъ#zP@QN>2/{\o) W~a3xLw:_Q;=pּdt\'8~3SRP6y+XQ*޺r
̗ѭ*޺r
gl/\U^u$|mbVnw\V|D͊NVNy7 k<;/E}?E*ǳgO ~g/96f
cD}%g$QG7o) UJo,O@0߾Q(;bw:5	NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 
3
u	Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/gridtable/sheet_row_add.png                                                   0000666 0000000 0000000 00000000620 12534142432 021101  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         (-S   tEXtSoftware Adobe ImageReadyqe<   uPLTE{|{ѥqqr}}~٢A}Vcan:P,
   'tRNS V   ~IDATx\͋0ЂⲛYNTED!݊*\	s
!|Pp8 0_ZhpTw1\ 
 (g ?Ne1)|Șm?u7 O L g    IENDB`                                                                                                                ./mvappsvr/docroot/db/gridtable/noparse.png                                                         0000666 0000000 0000000 00000001476 12534142432 017753  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   sRGB    bKGD      	pHYs       IDAT8˭KhTg w<L&1Q	&QAjS1	T*(H(ԅ)jlKkѢ &kj2jLb3L̗ﺋҳ<ŁwxEOUn
5L{j7t8eeN;Aeç0%mF-G; ٲ ]r<-A\ǯ;4]{jV_Wy˦{Y^Q_,hӃkD"tpޣNqK#4݃4hhhExkcFnccx\l.dA)0za@_w3YS_0m iV<NKG0\ gf8η6Q:7qB(7*02Y]	l0xV3`6.A(TӤ3 :@#|Þa4ۋ+0tvem?ȘG^GVd|udcL_E_<>^-%ȉ=Si/W}>H~=scA	Ve)@"{507nM _W.wݾ5,.$ZU(?ƢwLMCB5[Bg*gv^}%cH:ИW    IENDB`                                                                                                                                                                                                  ./mvappsvr/docroot/db/gridtable/ui-bg_inset-hard_100_fcfdfd_1x100.png                               0000666 0000000 0000000 00000000130 12534142432 024114  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR      d   G,Z`   IDATc&G0ed wڰ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/gridtable/sheet_col_add.png                                                   0000666 0000000 0000000 00000000620 12534142432 021047  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         (-S   tEXtSoftware Adobe ImageReadyqe<   uPLTE{|{ѥqqr}}~٢A}Vcan:P,
   'tRNS V   ~IDATx\̉0oAQhwStɐ?[1ׯae޻L7 /ܝ.+ؚGO JH͡ut | L1 :    IENDB`                                                                                                                ./mvappsvr/docroot/db/gridtable/ui-icons_d8e7f3_256x240.png                                         0000666 0000000 0000000 00000010421 12534142432 022112  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         IJ   PLTE&3   NtRNS 2P."Tp@f` <BHJZ&0R,4j8D|($
blߝF>n~hhH  IDATx]b۶H儒-{iZK:glkn-tIqq?  E$dK>$>; PZ sVh!Sy0E0}H)-tkoܪKp\RϠ .E7
)*V;~PeBx*,=$zDؾ  JҸٻ 9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;"
i]dddddddd4y5 	Rb@(8CdŪݡ,@T@ibrq0alX!pe,	=4bW {
5Ƭhu~(Q^@3="b5XC@JCT76q_5@,r	šɩD)T|O@
ON-ՙ	[n@RXIm݋(F @?=0puL;g$@6η
K`>п @h գKVn"a"%l@.v$/U^G:#`` uTtK~ŋZ5T%kxk]\*Q,҇B44OXK|yg+_M(lоEO
 V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V
rh(]tI^}oצoS3	";ʙb}"߰	){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.} Q3.Nس} )>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa3	{oB&<L[Nc.öi=` Q@d
͆I.Il`\t[< Cit484-r+f쑱BCB MH	iy }>rxp|z;BǏ;burcK4tz1G~`ؚK|	̔>ۡO$~
Ao)0pzz
} i `;ADm8n:cfA@s7L  Z/..h8or?N93B~o_'` opO-:TG	L;7]`B%˛>*wTpM 0H}&t^1'Oqr'2P͡+z,tIW''|en=ǳgRm[NStK{҉mؓVt6ҲR`ζN&}B	U(r<qȁVyrrA**دzg6D#	YP`vs~(zMle|uQa*}+TRXc"+*NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4)`N狌.߭ ǣ)q	2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\	%,ߚ/pR~/^lnp7t0_0l4_b0MWΦjmбɎl
|reȫ`B-v.iRox}
)%#`ЂR5CA2sua sYy3=jaeoI7~.plA΃
`O)	^>Mz	+4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G FZ)O	!lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a v]m1+3 y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c-賟Lδ>]5.sYs1f0;'̨Yg銛{@9	`aC(=%bo2=n1	jBoS$n#m =i0ci9}oI	qT] W%.(؅]z\x
f"]o'u䫵tk{v;A C3ֆwwR_#X(xҋ/q%Whpk_IX'b/fXKi"#####QCLi2t5L 0
QiH2;yTOok;עٶ`RNg{zy! Kxm?A(vU~mL(`o/!nmX-{v [ dw=n「sdwzn(}Oy~m
?XU;, V'+V&JRZ]᧭:zC'-߆@y4u`Vۓwъ#zP@QN>2/{\o) W~a3xLw:_Q;=pּdt\'8~3SRP6y+XQ*޺r
̗ѭ*޺r
gl/\U^u$|mbVnw\V|D͊NVNy7 k<;/E}?E*ǳgO ~g/96f
cD}%g$QG7o) UJo,O@0߾Q(;bw:5	NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 
3
u	Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/gridtable/ui-bg_glass_75_79c9ec_1x400.png                                     0000666 0000000 0000000 00000000204 12534142432 022716  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR        oX
   KIDAT8ϱ0%a*k:@7O:wf(2ׁl	Cp̝[ȳu=`3_8S	0kI    IENDB`                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/gridtable/ui-bg_gloss-wave_45_e14f1c_500x100.png                              0000666 0000000 0000000 00000010731 12534142432 024020  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR     d    IDATxK":ތx1:azDbU ( U*QQ$o |_)4(ӳx&C'iYȥ;)2rcxyg4yώi$2O^{^?l^{!3Ḛ^^{>n^{22^LA/UF&A/F&Rf'X$VF-cbh۬zxejgj2^kۼ8H4Yi''ݭR(7=")g)SZBy{#ZTg<m"e܇3329zWjdr9cưG> A>ZtBJ\n+8-Cm=j_~'*DNEپszFUٿl|H~#4WjBzop̰X|gDJ>.UqJOGNqpxp"7 93 Dn@0_v ` 4  `0 R[gGbX4Y.dz~yҫ׽3漿gIY[JqoiTZc`-2ȵmQͿŖaxbNϚknɞJtZq˭|K2~-8X8{m[$-NՃ-Z%lk#ՎJ6XUS[:hyJmR-rx\~9;ZGVSKo˚-G֊òMkb3$c{ض~o+^&ٌ~'CG[߫/޿s31aQ<b;rݴ?N{=:R'WnGXr{w4pDTPJί_VGZlK2O-ͻ&rbЖRҺSGfR=5Ƨԏѱ/VLƟ&._ӑ=:N덋#J9Xuk{|iv=XV%#4v@׃a^4K)_W4Q:U=Lm)Wr 0g *R/1\e1t]GIRt)m?<哯y˷	KV
 ؟ ^@$  8<Gd
^)y:QV_{rulىţksxgm>Hq={{>4#:[dXDQrZ:m=nC-]w   e-  ^   ~D` 0 Lt  D` 0 Lt :{~eΎlzbZ{Z\3_CUBbt9RrMͷ7GOQVݴچ
NLvIǊfGt{ezxtXzv~ϚRɮQtW2 ^\0 &kln=A]Ixߏ^&pyIvr]֕b.Ձ-bP/*&k5zwPK!iy>Sk7K?2V$8u`   xanﺧt{n{M-~G+G=d8,͖ǽl#>fl?ָ4jyNN
RLȜ-sHi",}|ukM^.Cjrkc|js]''rԴ1!ȎA %Y͆O@o_ĎfC+hyh9w2J1lC!R;z" p\Ro]he$d%]NƵ[8ZZ9.ϺFVN\l4V1gk[OHVRle,=MΒLv+dYnzjGj3f"ͻn{cӒ-Ϻ0  @)r2Sk|oitJ"N\o;]?&Jp:ǳc LNcznw*Sr]֗2>]@FD4tGuVrvvʵkBeo۪νܶI"MEY>tfA7  v u \0 ; Gt   0  מGګwRQј#l[+bli:(gՉMNǳ-ԧl޶|=G",A^Gheu7=Ct"s:m=lO{o  &: py"    Gt  O0    @/   W     t          :   p p@          8 )    
   8 B      ޫ   <B   @:   
   8 x   8 8   @ghvgblqZ۴eON=..^VZ5?mVM)&Rm$9)Wǲw柋ߚ7Z<Xrlqۥq`kV<UoOiLr$y$?X8/4R.vG4   n   /r   @ey_Jn[oηmz}ғswvͦʵueWrOo\/WSkŬg.Fi׺ژbj4淕+GO_{9k!xgV,^dH;H5ٷ?^k7M*=ѵ.TY21+ʼCtŎȔ'FJ&&&k<F61m뉣g~o7iw=;{ذ{k&j MgqҊ!s;2ϲD*DYg ܒR?NDinet}(MDO pmBܞߟ?TєsՒO8.F"J]th-wN=˹Y=~c @"Q92۫Lٖ!}r9yOLLPY/ Ŭ  t    ">5]/Yoxv4IFkblWĿ%+٦}LDӿ>s6cgz;\LGC8-ŻWX,2g8֘זw׳?w(C/eIcs#<imӊS?k-oK'BoFw"lŚ{GhyKko8mKc58{Ok}           n   /          ^|   LPBqٞ(mks2-X۶Z^kumZRRZǇ&ɇխ#(1Ʋs˒:ZG54;ܸc9
kDǓStߣZ3jRmZYm[EiiU66RΞ}aR~oun?緾{Pol|smӶIv4]N_ZHyyI8qf#1G,7ghH?pˎKkWkN곚-W'NZskyV>8&ۗj8V-|wQ:&{sWOɚ[4H6z96m#'"ʀ섃;2ҕE)N^	D$9M?NͶŤ]!hwj,m业h2}j9w%qm2~SR?I'ɺr\]zƯ]6ON-Tkŏ$w}RhciuEcƪUP֮f`<8kr>mڱ+F>1f?]wc/sl>ցů~zG߯#?{O޸&Od?سVQ>ڗeG| 3bo}Sax"zGӣ|>*h~%O޸&Od?سVQ!:;Jmk%U#Ȭm6&ͷkS˭յbQdEbbKi'[EcmV\vo9yɧUX3˯~^OL^}O-e+h>ұ+27=ɖVt~    %e    IENDB`                                       ./mvappsvr/docroot/db/images/                                                                       0000777 0000000 0000000 00000000000 13005675162 015103  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/images/bg_dashboard_nav_link_teal.jpg                                         0000666 0000000 0000000 00000000561 12534142432 023067  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky     <   Adobe d     		



     ]                                       Q                  ? zxh<FiѢXjFaJ|l&;	씢H,                                                                                                                                               ./mvappsvr/docroot/db/images/background_body.gif                                                    0000666 0000000 0000000 00000000130 12534142432 020713  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    @@@JJJttt\\\???   !     ,       hl0B%"-`d hMp' ;                                                                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/images/icon_up.gif                                                            0000666 0000000 0000000 00000000320 12534142432 017214  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   vvvɄxxxrrrlll}}}iiinnnʚfff!   ,       M'b(KJb$a3PY<F!t\é 4)Lv8tx(9x{  ;                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/images/bg_dashboard_larger.gif                                                0000666 0000000 0000000 00000013763 12534142432 021532  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89aui p  !  , ,    ui                                                                @p(PȤrl:ШtJZجvzxL.zn|eḧ|~ËJxyH{~OTXpÆ	JHÉ#VdƋ5frdH"=\eI)_ʌIMH	I̙A}3џEtSPJEJզQbz)׭Zڕ,ز_Ţ֬ڳpuK]x[7/߻{WpᾁN<0Í;^Lyeɘ#kg?0Sͦ3w:5j֯OzvkضcߦyM\?xΛ38h"E|yޥӗ_=yg|o_%`Gǀh&6F(Vfv ($hbj+0(4h8؁F-(DiH&g,TXeWfiXre`~)dYfgl)gtiw։z|gj衊6裋FꨤNjiR饛fzNI@)*ꪞ*kj묷֊뮺민kkȖ*:О*mNkm^mnm~+nkn螫nn+okoޫoo +pl0-j2G,Wlgw ,$l(,0,4l8ȬY|BMF'J7NGRWMVܥ8w`-dmhltmx|߀<jn'7lWngw˓oMycY꧷묿.{n׎{o7GOo}Sgއ/~蟯~3K*3<߯ (D:Pl`(
R̠5z ?8&La	WB0|]Hp6!wxЇ!_79nuK&2K)ZX,r^cF2hcx1rH:x#ڸ36Nn+IA<"E:|$#IIZ&3Mz(CIQ<*SU|,cIYڲ.sA"|NbL2Lu~ܓHMG״&6nf7IqS,g:ϩv댧;	yڳ>|h?
P
=BЄ6t(D'ЊJԢF3Q3uE6F3(=JOҔ.iKg
Sʴ8NmӜ>ӑrN}JԡG-*RԦ&LSJթZA5ˮ^+X*ֲfM+Zתֶn+\*׺u#׻~,`+M,b2HKYZf3zhCKZJ&rMmiWֲ-lg+nwk.p+b^[:}tKZؽn(WjI"x%;^n5oyϫ덯{w/}x603%
Cx0/sEx(61O{%]붻O1sc/?1xcYE2,&3Hr<e)Xle.g[62,2+N239_^f2ypnsg93\g?υ4-F3шt!=iIҘmiNgZ.dQ{W=nSjTƭO-Z֫umk\׿=la:ؽN6]le7~MXήmno{Mlr_{6wnt-zwo|{>p;̽rlc"w/qg ߸=q'7Uyg1as:/9{UW.u<?OezHE*Q9PHު7:؋}u}V:ڿt=Z;ܻ˝Xw{>v'w{x=gnC~|;+k>)_g~/}I՟<A/{c>=/z7C|~ķ}|f;_smJ_75}g}[7~O?_Co}˟~	X~~xȀHhXx"x$h8'.h0X,-!ҧVd]Au'	hχEH6SO؄GȄpW(IHfZ_ȅf8QXhji؅k8oXqxnȆpxrtv(؆X臇X؈H؇mtYl}W؀~~~Hx3񗊊;D(%Ȋ8x؊8苼HňĘ͘8X(ȌԸܘ荨؍ژ㨎H=~PǆkW|}yjifxzUɐ	蕐iM,)y$%	(ɏ+)&-/Y*y3	62.@IB<I>iCEIGKȉiHxHޅH|Zٕ P'G_}jlfɕeɖgY9kYpy[	}h|I{	~})y閄z9x	^٘9vIəm)Iiٙ聦M^k^9cwƛ雏vYŹuIiˉͩ99cLOgX)ɝI9Y9iꙛ)ٝ)ٞ	)ٟɟ

:Zz	ʞJj *9Yvމڇ-ʢ+:c/*1Z5u3j)*.z*ף@J~B9>ʣ0:Wz?jIK*L
JJW:DZOʥMTVz_jc
dڥflmrzu:bJ|~y}dd)NIʨ"ʠڨZNZt:^NJZzjڪjN
ʩ
ګ꫼JjÊ*ꪻʬ*J:غu$t劤ZgGŮF'Zʝ^v
Z*j: ۯڰ+
˱K!{˯ ۲([.K,5K39;:k;8B^W(~~LjNRTVkO;Z[%شW+Y^;`۵XPch+j˵dfq۶esg[r{tv˷x[Q{{k{[w{V{}E*cHjt}{k&꺒úKlk+kpu+K;;kۼ˻;+ػƛ+[Kݫ웾;[˽ۿ{˿lH;}
F[,|:<3|YZ#e*,-)|0!6<7\8:+?ALE<JL|BNlQSWe*󷵔)j)5Ƽ8cldb`nܸio|rsuLw\y{<m}LmȃjLȇvz~ɂ,ɆLɊlɈgɌȞɟ<ɡ\ɣ|ɩYl۸ʝʰʲˌk˄l˾<,|Ɯ}̉̕͸<̮,͵ͷͼΌՌʹ\rh\<\| =]}
	\ϰ扎	nM M-!#%')+-&],m24}<=>@=K7EGI-KMԬPmO-ըH=W]TN͵ΈGe^<cedlk=b]2xMw-v|-{=؆ևM؈]؎ؐؒؔؖ֘-ٙ}֜ٞ,`-gJڬڮڰ۲=۴]۶}۸ۺ
fWS9ȘkK'(ܡ{]mҝM}]Mm=]M}=ڍ} >ʹ^>>2.N6748&.(^)+N,024568e
$>:FG ΂'܇iR>T^V~XZ\^.Lb^n׏=ٛMgؕ٣=f.׉twr^hoynilN耾}煮j~>{~蟝a	슣 O~n>곮~ѶnN^ni>^~ǎѮ^ێ퉮,>^~ϪWϘN.n鋮^?./	_%/+OәP;[ّ6O󦌗8?=5?_<_yL?HON;IB_OTV\?b]eocaOiomljKu/np?v>_?_oŝ`ϱo`_/O?_oſ%Joяӯ)Ooݏ?O_
$Ú?_@ET.MNUn]eVmu}0Pp1Qq2Rr3Ss4Tt5Uu6Vv7Ww8Xx9Yy:Zz;[{<\|=]}>^~?_`@	4xaB6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkVoA  ;             ./mvappsvr/docroot/db/images/text_widget_icon.png                                                   0000666 0000000 0000000 00000140051 12534142432 021144  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR   2   2   ?   sBIT|d   	pHYs    ~   tEXtSoftware Adobe FireworksON  rprVWxN0'9p ԻpFXQ޷FnN)/oϯNgcy]W?[},˒           /[~u}/X\y"I:H2Yg)Xq?{< ss	}ߡFˮ`3V}Sںݾ5:bb־Z骗QԾ&žLIjnٳ8*f^*zܮs-EB*5J*=	gY%XfsSݢ`yw֛G۷mfhje/6KZ5nD             #B-   HmkBF                                                                   )3  6mkTSx}[wƒ.&;#Y%{yun=()օl9/^ Hؚ8,+h񿟺t@%RH@qjUupvݚ][n;ک|{l9}˛7fN=NΠWg;8n˵fxgqΌC(Ys(8wGxɭ#Tؙ4>V}5`i{CT6أMv_fH\`KC:ۦo>mxԧ!䐯Ǜ-ʜv&llLءMvڰyf!cl[>3@.1nu[=g]Ll\fcؘMƱcxOi2<+e4Ķw<!> p	`.Lhڵ,4h*"ib 5zm.6
6@@ f iW7Z,]:~ImF=Av 緥@lyς-HhXiQu,Y$w$q	PB^Q-JҵliZUL`-$ڍmqeu/-EkSa&a{ynbt}U8g
	:.l&Cc24&Cc24&CcƠl`\uo߯ {P>]2@T>"oٌ<n4\E0!ן d_yVZJ{5xV,4|.36G
)ZB;|d|κef2Dd5zk̍h.[c3rf[a$|蟠gxT  Y#Edd,EE/[D(PPI
tD
z)fVkrw7`.4S4^:>ߣ j;AOB>X°mH~eZoERO`ܶReTH/)HnHˉDN Cn@OxF-YK~afE%1w<A\߉Ldړ	cl8zRt|qf|Y
hdA"[Zfld:"MР$'ZCh:2 ~*qxosB#MF(AѼ)."G;ǚ[!@R^]H^M3`SPiz7~+Ź2KRf4ԣa	d?jid.%"Dcuq(>M<[`6ѻB)ȤAη 4c%ڑ	qV:J+;c2dJܷ&gQۨo7'|#'#*!XjfwcMNM'IQx""oօՠ|=ٷz,@k
/R|T-2~ɤ~A:+#]qFyE^Qy(rlHܒ7rod 1	M[g`.O3%@&tG
e$C[B%Q+dQH	>]TD +z%#CrJ&7bZS4άȷJNWg'I GH[LZSFIe (;鼫y	ʵ51ZOMg@};mZx*~C>JTE7όa@D(7
mhSgølN?X+17w:2vTrtNJMK-c5Ĺ5txQ[ Q?+2b1pb0j.cXcCS!KH)gBiЖ.7?hh
N1wtJLZ6ȝx-xC%~I1Kd?4rn^ȍR4C]@S	L~So[bVw22֞qwSbG |yJY+;]GI++wy%Y0P	)	;NŔ-m]:c.ٌkHjZ涧E㳸BɟL';Pt!@|MOY_h6q)&b~6fy焜#x?Χ%nq0-a,b<ϔ* mdG<f/!D8FĜe#Ord9[mTN w'YIZ|kN֝B(̓D>
[l\?iz^[w'2{ɱ<^NGJ+YOh\(I(Z)|yGk>ɇ0>(*1$k3o%"?^`ؚoe΁2YJ`bz\kV3>h>Ʈdmz
9B̆p+a7Wh`~R>Chlyo2/Yv{TqH8Mj$G|AOmR0V`C;?Qqa(*74YF@;DwM9OA]P_"	5')Et.aCu:=d6a]^BMIc1<Kc3DJ@>s!Gt}GtY&&L#E,:Xf:VK"Vhݏ
')V{QV"+')V{YVz*zkGL,;Ge"}Xe~_0`f._Z-O>_S~Z']%rH%'%l}6U{C9U?I_&[z1C_hIFYX6B1pC]"2)F-?S^ɵmǊ رoN6īe@yy+)" S˸yJh*EKNRKU*ٕ'϶Iگ[_hI~sߜߊ۳л+,#1'9)ףWhkʩVѡ񲓌r=rϹUϕEK^x)?$17bW˪tnNw)]ᔍS)^D 
G)I-s&G[ih̟kfݧ+MKr_?*12mKk8xaK=3hYP?PR%;t94julp[7Yk=3HڴnvS6KQm䌬xi]'^OOWBdgݿ/KbYMB
۞ZXssvT}%[eS-&DKX|?߷[Wk4npeL%#QRVie4*93jy4g!uSZjrJWK>}F-5An)hk
uߞXumC&x䏓]*,{CΔF8OGmv!rkjX4!&nRM|J-Ftt,XByp!unItBGA -xb#HCof_nflAdjk1GnpeA#ja,m_*.Z(u}vw	Oh7p*s&rϸWם܀chJ̀F\\ır2V}40j9;pUpi>-<-")=9]=tޗ'v=[fOGx*q=쬰kPMȑ4w)^nqF.<R+1	)8  [h3Z`Lf1=R+_
O
9[9s@k
ݙ+탔!$ﭶ=)?'FsBjxk?Tx)#/R%V=s-<Skهkj3>#>[Q[={ot9׸>:jmk&k@	\#ׂ6ALP\9T>~-Duu=xnF8(;)}k;W\d結ÊC+bX^1chk+b?$ZOI[|vgW 9{]p=ރW}8ڭ8芣$GG+wT]1t5;b`*b犝Wgv.yW*syWsoyW1*0tyW1tfU
]eU]1dgU
]eU]qgU
]eU]qfU
]eU]1}fгmu2%F{Bpwk.c흗=<9CWaiZ`$;ІڝȞ͘=W$eC+k²}홐Ta\,]<cG?UU۱lO2k>$OtcƧC[PH0]1tCWctƧ8nz߬13_ɍW3R&	avK,qo ݄ :ym?mG@5`>{ NC_CN7vGp78CosAi67PYF[WZ7*syI[MMfM T?.I}#ұqB- ]DκM	܈]iQMu=m\MXZp|ieo8+m3"-,u .BZ0_*oDRbcIE~ʘlŐHs;:<IWZB#/ipf%<Ѧ<17IB"t	7F=?烐Y~Ę$2睞F5(G~Z?;+컨^?)oȷ:$Pyw|E"ݞHGN;}Tg5Sw{bcHV@WglFymCb銥+XzXqŀ"_>8X(keiO?yEk9H6tlTD?6sEm\MBisVNtKNqF#/ ^]l|f:gj?*Hƌz'%zeIw5^).Ŝ[Eyk^s~olrk?&Q꼲n1 B˟	X{#g3o3=&vs)lG3-%lfYi>3'w4ox?I/D4T3c-83ƠKh9<.͡FFs˜dS;l9g4oRz@ֳzet~}o9%~4r8V)2k20~F!#,\Kcq\s#;5(k׋=[Uz1vl ?/zǘ]e|$0vἯ4>;EHC4iNgp~u;ECGG{@0h%?߼kcMH\ |8 Hk텹s8jyi-}IZ>D_j)sӳO<}Ra&+F$('uG$6yMzZo_^1|R{fY_[Iyɶ/q+q{X]Pyw7bpEzH[Vzy=yNk7d3.-˃qpWX'GY\Z*:έ)/<uoqII~0_Bcn:Gǹ"ɺ[mlJJkP4)vDuxh̷FgBuZK<:GOG~ԞUlw=up=˧B9ϋ*Q=qrƼ!]Uf!Tk9Zkp6[;g)+v,,wDG*9ù\&.8⊋_Iy?r1p+(%_D|[w^m
]oG8@=!ip+㬀	Z9%irA2y^StAޢ^Ӭn+#iztiC(	3yIrj^4)˳/-11=3ly(y3m?-(Yl}KRG<<+EpƟtᴷ5no]I?.kϴ{{="}Z.nv]mxvmMsoNq3Ə <g944{b;
׃6u#EO\hsڻ	}%-"Ho(tw6zkkmuh3L5yv]퀿vq `_x_mGav`poۃC<mg{9z;o7<ċ:D\(Ж]!ا9lŻpczt^]ß6o,ޘ]<ħ66n[t9V
ãm="C3<nmI=آIhq<DK2F>9  Oɣu?`[oA^⎓>IЛ7piPPt6]O]}J~w^}hk>h:Mq-?s9;upqyI'rlV/ؒz5c5iY!xVAئ)V}-mͩ-o4gtv螻W̮u^㍎Dǃ-^gniM_
#?8ȷHt +i{ۻX:&gľF@m9eD̒[Dc-3iN۝}d}i{CHCiSۯh}$.Ơ'lw	v@wZiG{W&|=oa-V llLءMBtm8BuPb99m?QYpbf30{"0cc
@>d`cj6f6~qX.1<dxOs:` hm0σ: ~Z(paBӮe@S,4I!PlA%F!^@&}=L`@etK7WkXZXuz46F{4amm;P vy`K|6VZzT*"?K-IBF\"%1PWBRtCA'{8=$ة8FK,I1B5Fv#}1ŷha1L1LzO3)R*p[qD3w4f[ҲИИfC@/ļ|4Oe|.@M7 E 3!r!rya3h;`(8)K'hVZJ{5xV,4|.36F3bd/EkƜOYLLFFq͵tbXe+tc5}Fn r+d B 5)%&cg)*|"BTFJVeOSbf+g.ގ}'0©K-:E#k4𱗎(N/^tGE9l?_˲}-b
7"X'0snnY^)2r*LMq${:6HA2psX@ZN'rr |7nȲ_"?C80+/ٌ	Ng'#_(}՞L3hdcVA֓"͔Cu<tk6CΚP@;x&2cЌ%#yn
/%9rlZuFhY (PTmL Co3~i2-F\MQtE1-8'V8D *BBn̜3G҅rHþ[-%gX2-K QKö']<%Cv)'Z/@Hy6~ܢ[`6ѻB)Ȥ퉵,Ϊv$fLٺ$];2!#7n*vٲtASG)6`egRfL	,~3 cdx>s1yD4K͌NuɉiSg[pl~.t}Ռ1nȾxc>ǆ ^Sd|jjC_~H&҅k+#]MyEeVBh~IBv˱!qKr߸+z˽Ai"l$4nA>	w 8+P3)+<Jt|Fm	IDG!%tvQ.'#CrJ&7bZS4άȷJNWg'I GH[LZSFIe (;鼫y	ʵ51ZOMg@};mZx*~[Ex#C4O2z1LQFmlwɓ6k%4?vS>NGƎj{\nIii`,[8ނ<"jd5gvuU>|2~W??-?ah\ư+ a]+BɗRϐ֡-ko]o~lcVj5Xmm;?Zr%Kx?%[Гcԗ~h>LbAt\O)}E|.S7-1lp;mgkό)tg&?A),
{DPbPnc`	TL%ns=͸v.in{Z=>+Dɔ|2|1{lQ>ȋ}ʢ"^qfcS{z6fy焜#x?Χ%nq0-a,b<ϔ* mdG<f/!D8FĜe#Ord9[mTN 3i-~|R	5|ŷ&:d)dKAPTerVIpԋJ|޺=9KeA2t>R*_Ȳ~BGIBвH8R]#I>GW1ls[ǋ[9P7R_)9}LLk-j7ؕ_O:]]H=ne4
lO֧a(-?Ы]n-nKnj10A.0NZv8Q<Ej:*!XΏm~/r!
M$A:=cy.DǴ{й>_;K	0T?I_L5~4lvúbTqypP|1gQ<M\kh!>w{.?D<*Rd",{eͯc,Moz@\o5Uo.?7ClIrjVUk'>1;d}٪H_>}٦ߗ0֩{WTD?IWxxђԒr}6>W}VƪkTlIr5ޚTUC1>zFN2\=*>C]}F(6jɜrbq۱OرoN6īo5+6OR$\l]p~"lӋ+ytRJTVߞ?B_ga9qLGGXSNŌd9{έz.W*}KE1'9ZVեstK
lJ"W8OIoi&f09ںLsdGf\50>U\n,_* G yVi{^Z[ꙙ0/F˂ex(90QiֱmdY	x*~mҺ6-oݔR7cT9#+^Z	FxxZ&&;UYb$bl }(ߎtǠU4Ue̟˦ꓬN.9Xݺ/j11%
^b2Z+q_p,g$,菒H+s4UəqUkq8KK8RkKeV˶ֵϊu&-!sB~M!m$q+Se}v(ۙ(u7m:~.BnZk&Z׽oZiB(t%B(".Mҟ!.[C9EOliH߬p-<LZmm}2b2,hdT-kR%Y| ";u5OiاLÜI3./]R>#W'_TyUxtɗKfʟ{-q>-<%LSzs{rz/oГiǫw=LBUfg5(-_|$Gl2G<9Kr3rYr]IL"L
}F+,q58ߌ:F`G*} ^	]Pt]#g+gh-٘Z;3Rs}#ն'%b@oVxtzg@w*/BqEĪggz|uJk|e5W[{+O/VgktdZ[N^$¸Ν^2b{ε+vAZ_~aCW]1f\[v1ʵCW]1`--_>[q}l슳+~.8Wb_A+oV]qte#C;v*b{[@U
syWsΫ3}Z;ɼyعʼعb7ͼzʼbe3*^2*a23*^ή2*ή8ar3*^2*8arM3*^2*>3tBH`@hfً6ŎR:[U#=ze;5{O񡫰Y4-id0HhCNdOfLVʞ+vVO̡faYCɾLH[RB0`q뉪X'ZeGORصD'1S`|܀-g$Eڮb芡XA1~:SccrI=oVHrc)J[ɄtI%87 dln w弶Gk6#0{]!/dOxGM#S8h{79Gy4ՈJHzlm,Se#+o9ż$oZ&[&&h
H XHsP8DI."g݅妌nĮȨ6{&G@vK~]8|UQʹqNZⲷuOڶ F?-/JJ7^f)h\X1y1\${r"?eL6nbHv9]~Z+Ws-u!YYG_JKj3hSxOIr$Ow!y|AMA{k	?bLuNO##_VORc
YwJk}]Goֿ7[FigL¼;>"nObh$A~v*=b1N1${X+O+36ucBvW\tKW,z,Zb@tx,f5GYʍ?ާ<"5bopG:6K*r}Xnй6.F&9+'mƥl'a8n OUoy3k5ދhY^scɒ겤R~/b-5~T7U~}J}(u^Y7Ls_OE潑si£ԖFb4Oٙ;Wqm$"*יoc%úG[PZW9eLo]hbW֩b|ʌ7?B=Y܍I=2qwc?^oSaEzTgr?@_zS`qwh%Ʊ8.MՈ]ŞyNpn-E?P=B;6Sl=c̮2>G^pWL"!4hrZ8:!ѣ= {kgbMo5&u@Nv.~K[595߾$-ERfu{^' )hP0baŕR#:y#||<y@&g=շ//wQ=,-ߤ޼dt},r.(<ԻEYZ8"=l$@f-[x<\fN+~l#qެhC_Gu}GY~rH$?Q^/zd|TISz7q#\d-66g%|B(c;O:bkJ[3!O	wúi%#ʧ#?j*{lxn|Su?8gJCK9cJCP[Q5|8k۔;zχ;g\._}L\Wqq󯤼xH^8EfDy/"H;6#O~괌\8?qV@q ^Cݼa) IoQiVb:n}!Zτ
˼$VG|IvOYCЉbYNĘ՞R<b\<,T\%)#J"8Ookxu>8~]֢i{7{2E]	$9]]3ti38<ښv:=ޜf:<m_]A`Ό4{b;
׃6u#M\hsڻ	}%-8a{Xw@nx3Fommӷmp	v?Ϯkc>n~1lw/ˠM# Npz`{pl1Go`@x!(RKU<=t987-x.`Lݫksv]&SǃԦ
9pn{C7ǊBpxԡM{GdzGMC<?"GdV0͑	bDjdrD>d$Ip;[oA^mNHlx\Lxzp@9:ܦMgzc s/
mw]JM<-ܱYaKrތeMp8܂}5}:Mmcs`ae7b,q5`	t잱Y@Ko\]"Toi3oMǲkmf~Xv	÷=ԻkxxER ;   mkBSx]N0 Æ	WM- 2*5X|DZ=fLc(F?
hҶBLrGpodgd/e>f
9]WA\\Lf[xilϣTs1H	QlHاEt(SAZ_Y X  mkBT ~                                                                    xK#gcK޼xJamA/.VeXKmaz(BvqQuSc믿=u30߁ΐoOfF-"*<c\YB*|>ߏ@`!NO<D"ܜ;zx777yp8bP($uii܏?;;{(c>.Wgp{{dV#l9\.S 0>9L&ط8?Y|ppPB㮮lze{?H{L61*KXV*C*;͝^(JL&#F.xD6sf3۲.~I޽."ܯX,&e?^9n13g$6P7W5^.7A*dXA昜=&vr9E_qf9fX[U_q迭5-
>U[3q_כ, W_vj1_T7?4? ;19[7dW-nSOM;Q?@`cFT̨TIcb'ߐѕ9@7?6U~CRJ7= WhP WJES;o/sn|__{9 W /YI;$6P0Gϟ(ozK>u?39rtp~8;<}{Ld`}=@?TT&Kdt:ui͞R<Ą1lҜZOEi7ccb':r9-;b.BFGGu|Le(I,A	Sps?=&v2ʟEOh4Byskkw[ZZtx>%tWE$F{Gڥ@|5z]GFF^{7?o\:MǴO;;;${zo5]|xGmooF֖?ncccvww̵ynܝ;womm}~                                                                             gdʯe  
mkBT W                                                                    x흍8FSHI!)$FRHnwHYx3ꇤ saaaaxIǏ'U{o_ھgW9o'GW{>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O-92b?Tlk%?_21BsY5>:> c=1Owy^- ڶ,Xz usM#גU]>H_yYv!ۉ_miRus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, lgX #vQgBٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'- (W?	źvƔOʙRv[K?[A}?-wmՑ}<GcK1}uxLzަU00Pc[<>g\=c}Mggg	Ǆ-B^k_g?F? v0||؎=ǧHPgs/hؑIt~{n^}ZyD5XWvO)"c0vYZ|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8g ʱL{?00_k3>z_\S|<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu
l+6v<ïk7]/lc[`On}򚄫G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ1Gg{+ҏlw<=}GݽFƨ^)zIpGK ֜{{eG12ۭqiumf>.}~a?00[u+7Svq֭y΅
?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo	9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3
_[_*mtcmC>qSL<?<nѯn!>=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^UO7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU?0000000.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwxb)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-t ĒyNAgC	\NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`%Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=oG<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy	czA;w9zszWHVax3  %  mkBT                                                                     x흍)q ĉ8D^>׻gI@XjjgiЃ`0`0?ϟ|:s eQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/D:3D&򈼹e^Hyi#/OGzϪ߯_~
:sMe#M3Y#=2QЙ[\s=E8}E>GȩTڲTg-}VfoSVwzV}./>~<Vrv@>!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-kdW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ:`0:8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV	U?)V>ғ)x|Yҁgi\yi^cUo*=!TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x)/OSyUo2e)Ve3'wgGg=J^`0
ľu kU,Ksؑ5nY,bXw{w&3QהNQev	]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fz<AǏߊg_ly=Uy3= [6_3]U_k]]ײ2;j->t|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz`0*\?W8GY:Dgcg<2+'W6qn؟{ru"w<Tk.\rnO>U쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP~n%hUG4(_sn|W}Tg&x^c,Fѭ+<#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3`0Q[	veO\k^8 ֔v<Zbz\Opbn$~}oz3јmKvU]^iNWA#x딫jtq:E=z%օq)CcYEqyRG-+u(K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_EбVq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7`0]kIu+eL]ւoA^;=GR? v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{<FVr2nlo؍ا|mo'qbӋr`eef6
0lzsA_x7췣*U}R%+C_	ڟ~I\Q~ky#_jo~DyU^`5pko?:ˮCw>?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR(	VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l?`0`0`{~i`oLy>uoi\qK|} 7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;<sy}ڛk}~|M'8CTo+[WUQr'\'tTYwz.D=W|~q=_ yMǏktbS=2|ұyN_}Oe摽ۏtLS6q`Cjf3#ܰ?z1H]\"W]O;2'@@~tG:{u7m1Q]PWV2Sz]ϥzs3]vxwҞ:ڗ>y`$jw  ymkBT 6                                                                    x횉m0]HI!)$FR?6c<lHٱdtC"+RJ)RJkJ߃L_SUn7ss~uU-Uyy9c/Juz?i>>>~ sm+vuՑνYu8uN?WP>1JsWiV_uKEϸ/r_gKW]ױEYcl,[TYHT}xL#}A GV7^}>iҞ-i;}LJX&TP3T#ߨgJl e'=?͘ona|7>?ǐU%;/mN/IfQփz{<d6dn;Qm{{5$iѦxg<$"^%=RJ)Ste/֔ a};k_y?9Ԛlz}m#GKk!k(9G1z,Q&liV濊#_<3Ξm$^9g{9&w&:˙uf֚R:ֽL+mWW^z%I2loZf?k4W-#	?V/c^!!{u̵ʴUٷAGe>G}?v✽3X~j{zTAO^ʰ>?sy|G)P</11~2ў׆R/7 Ӿsmsr"(2cϹ;~u-)}<U1g:apb5{3(k!m'mʞ2.~[)}GκbXELpaԃ77Fy0@ߋL?󞕹Khi@=RJ)RJ)RJ]M;;j;  SmkBT                                                                     xi`Qqqqq!	COMlS$I$I$I$I$I$IqO9˵wOo]ss,Խu˲<^0tc}av=7_{V9z}ٿ^s_y~?}ez۶@wE՟k$I$I$I                                         @?
R*f  *mkBT                                                                    x}+(H,"H$"#X$,QԈZs>U{	..T}6 ڳ-F`p]k ߅~b

О$wݓٱ|sCo A+q3lOx@(0a+?	T,_7s\Ϙ^Bl1)C+k(FyN"8dPC_9>O0&l4Im+nwGrŰ<Qq		+H}eq~~[).5c6,muO9p\<//?N:Mp) Ĝ-2p'uKq`_/64<~ 77SNBQ맨uM{5%.BNɊk:	kNm9*uU|2%;]Faג)RE%HWc0Mg>)/tihf	ѸX>E)<,6s45zb?J\<OM%O#(76:=	ӋYAHLs6MXBcX&ǘJte.	3.je(?<?-1$pO= x	]<Jt¡Vg`|I,<丕}FQj]o%[Pa6XY<?Yoh F067ၭ6JFG[wv)7?,@w
nMǦmk>?Lj=%wZizFTx$kP8Em	jAOހ>~؆B9	֤8UKCvjbLCy;mjP. DkwUE3ܨ8xUJs\ɟ+;}sFQ(KIXݛƨ
1+KdX];Jģcx$D׷X`i @l̏rnm$^9΄zBGϞQ=nfkDe;
<a>,⢞jk0B[p($ Ǡp4nq`XƓ	vϵ.xHnorJ5Hu뇗fa[Z:><M@J9$q] }=Hk3鲺tQ=,	7߻s>36[gRL؍?(&w.7C#~B{]
UW71jk~ecGrD.=K@WǱM0倐0\xvqNZ>#BE	)&yA}t?BYm(WIpɱ|2+\2 )l8tl@Z.Be񅋍RSƃm>dIl'NadĢG3%#)?$s	_5=YBR#-k"qGP-e"f%֩-ϓ378M9ϊ,_*n;HEBƱcl~˝[/sagIE2,z1t:kLș壋G){7ond{@rP>kwk׽#kXfyEAB9uM4P=_lgW؇N#_nGpp,ZUu6ȓVӰ0EK7*|]{75F\ԶzQz!	uH>upT٣o3P)[^6` -d&*=%fY<^ط`_6|h3ء>2 Pq7ώ,NsjF=B`큳CiU)R鐏@LҮǧmb<2FHRqùFXi䎲OmGA}:*uf:@ʫRH.66jcGOpO-6HKJU:Jǃv<gz 1F*qm-;I 7?O(Yrde
F	ѥrHaۡ> ,3DZEƮqq7p?ȌK%ȧ$;?Qr6pP7`a^=R_)m>D3#£_'Iɭu͋C-Rne㯄ssL<ȭ/R)|Lt_1<u}E
Dzl$H+N_2scۯ-rHV.֏'(}o	:]謧6Fhlw@z{6P_?Eh߹vK/B"Mh;бo)gRm $5, Ex(?:gU뵅F4 	߹E4!q?lAYvs:mR(GZyGq+w0)NzuY-&"Y	='I8{mL/~!.BA=缱Y|z:f#¬oh2XjǼI|1i3A(|vf1NKLͫ.?r]qBS^#o.l%z⁋Y~i䔃P qu&7(U;Bl zFx׎M,|PfV֠k'Nb̔/$EN
HAiQ=u-/TQAD9gW%YZ\aԥ5Ojru"9Bzp̬vll=ɸYyܾ5tmEz+M>Lk=rr4/gEr~PnB[\g[{gYvRW'
{Fem1{wL;7&$xc0n&u@5sCCձm8Heft<PJZ@4K|#`}akRN'~IU!kWLZDNK̡U;gL~a(]!Bjv(f\B}AuHR gM<7O:[m6uv;3=wwn3pKM{. t"nt?dibC6=E	,ѮO
0hvG;=MV%ʪr 4H8rK썀xA:2e.ݟ0N<g'6%G1ַm}^jnҽS0CzLX3UM;^^~XcavGHu"1kNKT?,r=܎X}6CBW6ۻ F\3m{4!]9ửJ4n5Jsw^Dhz8P]z1x~ J8#c%ϾcF{do@w0QsP_́ ?3yB2Đ{|5}>x{q(aтa?Q%l4ςxmWI׆GC1kQ3iJh,KRO`ʲ<![NwaZx\Rtv^ZJa\(ZPE 1ޣhy0S L!yQP̞#R@ӱ&4a9'2ċIE8XIr
4*yb˼/#x;2R~ O7h՘U^k(侠,2)C:(ِ;Q3>4)%b6B8\ pe<S+jsp%<&t{3?|N)p7b?aiDWlXZ>;u)ko)#WSncRx{[sXv195_0Kՙ7> Tp5ٴl3S"؝LX睫[5mQ ="u}pϘ*xbՉ#iM+@Z!	Ϯ~jYݬ$?5mtu] %@݅:4h8ۃtu3;
ΑO1A/r
R*5i&j#Y2:$Z(ad@>'z
L뇶6Z8|`6"X1_z'F-я?X^A:?1;h/KVB'vOnFSƤQ{=kh7MwXQp\v͓O/.
N3HKRlK"q^Wh1wth@3e6N|I;y?8t[[!$,ήLe"z%IކAkRl!3u8ځy?_W)AbCO!rza5Sn֗#<43y6"R߃CQ&>[#
B Hǽ{vekOTlq(UH͵hݔ8,@tՂL{p/*L"d_yk,4G̖bD>,.ok"D;|7[.DCA#ilϟI֬Dq]+eE	_--ڰc^Lq1~CCC9gNH8BkhJ#Z-`VoMa 9r$ պZ-hkh
?C$	^tď9d(8P݅]ڶw[wl;dn׆oKdHބ(DInI M_( 5)6H/Y1 QRk,nXHʉ?>df&6^EJmt{CCc`0ʅv5x<\9Yc}106"״!֏9dl:'1H"<HN&]569!I1;"YxAK-ym|hd"]U.akgbbw24j- Q Od-:N	dG˥MI	VG=W!r6wH3p"ۋ#g6*x9k{H<WBQߍOMV{Kh^<FW<L:w$|oY-Q]<ʫ!!垹Fq@}3fR%oĿMrD+N|YY6jr11k4i'Xf\:e޼ ~P91ߍ
&78Qape5 9osMy	K-uu9Bdx7HV&_!ClgL 04yS}|qٳkbs:f'/㼳@!]%z#=Js`3W ez<PIGC0@455gxcTGU#RCC?tdxL`Ɓ8dgsT?M6},_ \k٬lt΄ls:m"25be\]\˛{xaLoQlPwK7?M ^a,_lb(1?3݌^7:ރ^usϚqB8*hGxYCm5M~{Sg9nRXC}[hOtC1#W3*:;&_Gۂ&H|5L<4Ƀ\bD?]fM{V6*S<e0,!AؾKmmߍrOoC2
#p'$F˿@!{0VYWoe,'H'`r1#ͿMRSYZBh|xH@6YziWlwQ}yqs!`~y#-OՑIXmy|*0o@]ۓ^(`Pqvefv'OA=B݂pCJ#
֞q5RwV&)ԩn@po]{3v:Yf*aW_&'
Jk0nDx\/HDuqZ\ڌG+啵XZT>z'7QqɌ#KR./CVgQȬ\`?d1yuM6Ƶ8ZX]8^pwQE&1frRKi$GݜЕh3'{;;~FK37ku<pdʎ+CRMzƏ7)n Ҁ lEGyl:̑IoB<A\\6dFqϡɅQ[1<kN>S%|ЕsTulebA}Aʹ10A{KʘӺtjdLI=r	PRg_LbRŞl?␔)![Fowi&k^CV(t@pW2{hxHGRn͉eCbxԉ6GQd27\ثdS=\Ff*0ۣ OP5(rZߙxQZ>~GAeN-jY7Ҿn;n?ӹ"Px}/N W:݊&׾:x"ꭥу;R펔c䛅љElmG§a=h¨BG_uYnZ쫭FYs U"zM&:Gnu.DX5Xn;}ԫ%XO?~2&Frjj8yA*W	I9/ub)Zl:s 85J>~iI<k¶٤^Sx[sGD( +"EHnֆA_\FZ%?4`w_{7"0Y@f}PEjmv:QrN[wz*5c?jf7?K_P', sZ(oT|Ó\-%蔒hy\	cK/	˧YGԻڐz&c"*(,yEq(y[q`a7Xļ~R/{hh"g=wݠ՗?̶uNh{g?tqm,u[Yot+!hf.2]ݹ?&wARFľ붾Ue%dliqMs&6Xw-&Y3(G9{cׁ֬ǿM;vn"b)<׾e_1p}11F#YXpq]s,[%*&@DfҹAٙfs,>3Yԕ;:#hELם[ROd^GA˩f~Y!En0~/A
Km>^WYq"<цF*c:xw|͞w%ehRgd9̕v3vDgh>>?3hYDkgC(ʹԕSԜ|2Q94(?OGQ34fccPopTYaW(>@tX4`LGٞpɄaŰl\[9c26UM6f, 'C4i<Dn#xгHz5[
_QtmvNC_`x~Mbs PEx؇;cW*n\?׿v:O3@fR&em[mٜC5f(MNiYXxШ=4
yHO<0|3[B	:d1"ZO$+Kxi̒=sJg~i[Rz'G#v}>?W~psϠ?kAKrŵk@I|>^xs?\`,D̒5W^wDMXf_8<%| 8_왉pP1Wlm߃f?4:́_Ԕv M;k:p_sj؎qw]$F}y,b'N=o0,
~M
YR46+!}@~ujctCP.Y(x׎z?70WXFܣo3z0c8RGg0TU򄽻w"/4֏CQ`[{Ocn]+{{N!3<Vyx,!C
b.lf'\ ןgu,μw-/3ۥNX(coMDsa##0{c%uDWCBZAZ6,؏x(Z%wHbhTb2<$*cnk_א#{D+B<!S/gÏ`9.^]ßC+>3+5]qpj'
r9FDȬ)~:9Gmx2-?sraG"yvUpa;Ră A\&
?#n	0eed~oq嶭! !ǲP^H)>oȑ.ļԶ=Hy7S-M
?8ycߧq|#5"2Бlm#UeΤVbM͘jAc7Z
]>4gb
s	2WRsKg6's8qzTT[R[w )I95xWj#!nN+zPڔ	KgTE,?{^RDݥ=Ru^zîc&D'i74SJߔ&HUG[crͦ<׿~4}څh;lpAZ%XZ;tQ?yk1+Ƴu6[Dc4Ɯ*dB#!}e>samhG3c^8u9󼵕⸈߂UyB;f"Yi=D=4&|C3g]~WgjhSIXU"1A5Fr4{AljwTt6</N \Rta|i>T.Wo>>xϯY{緷 m,J{gg}v~)]s!?wXGFl!7U|Cnfﳅ:.@mq%臔Ru?.:aBֺE#Gg'yXDuSWǊD)21ѵVagWPqȒs?¶@g")s\T{f3go^w:^" {d#!φt},nyWFKvX4|<B+8i=-;X	5l=/xlwn] 
+SӼ,{՞ /ДV +<<o ԇeNp^OOvqR wHF3݁=o;`~kRwCu¦kjE|qϩKV,*?xk}QxU/M=հp=犐^xBˏKx@[IYB]T➐Kq.ὀPwAG\Wϋ92SA\Y\y=ǨGjբM@tԂvDz+Bĺ\լ6k6LʦR_rnl|UAϯ<
|!;8_1gsލC >VB~,˘_&fjp/Wԍwa O H3I`u1ͤ+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_Wݚw)  2iTXtXML:com.adobe.xmp     <?xpacket begin="﻿" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.1-c034 46.272976, Sat Jan 27 2007 22:37:37        ">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:xap="http://ns.adobe.com/xap/1.0/">
         <xap:CreatorTool>Adobe Fireworks CS3</xap:CreatorTool>
         <xap:CreateDate>2009-08-27T15:13:52Z</xap:CreateDate>
         <xap:ModifyDate>2009-08-27T15:13:52Z</xap:ModifyDate>
      </rdf:Description>
      <rdf:Description rdf:about=""
            xmlns:dc="http://purl.org/dc/elements/1.1/">
         <dc:format>image/png</dc:format>
      </rdf:Description>
   </rdf:RDF>
</x:xmpmeta>
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                            
<?xpacket end="w"?>,or  IDAThZMkGٯ؂X]mH$Aat
! Bξ7"t!#9tE 8&Y"6YՎw_VwWv546y0,S]U]80313?8yGԘ矽h9_LLL|ID\Vws'vZ:==}YD|>޽{lTj5~O\nJ%ŋAprrrC_tcusJ/Joݕ+W	bqs7o޼;:::y޼u:FFFnܸY,w<ϛoZoݾ}{\./;wn뿌}^,*|[n].
Ҧyz7`&Rx G^J+k-^״R
 N~m4 z^3 am@mA 1^T FA@kAph'Zf X]]:l Xk q3;g#	S%L6&q)u9TȉG"	)3DX\8	yzEE(Ci 0FLzVE42ZIlI"G KiBC!fr'57)Ѓ!y9+*Ҳ65Y+niafʸ	~!r)&4Vbh<-&6&O"Zݧ:e!e<'Vd#gqތQiqREr)i)JErd-bé(Q\IMOkD=Aw~ߊ@8n?\z%&RDb@$b\cYqxfUCYkID"m#FbD2FH+EJ)VE9t|d/kIUJDkCJ˩!ƐҚRE&|[ԸГFfK=)1`5AA4A49v<X^^9HxoAZAY\h S}3j|(u8qOxG  #Bjb9<M%VRڵkRQc(NcZJ iIkmz^lV՟ܹ] ~B?szh~W)=ɿqD>Bnz\i    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/images/bg_dashboard_nav_link.jpg                                              0000666 0000000 0000000 00000001071 12534142432 022057  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky     <   &Adobe d    
      	  7  		



                                                 0                0               0             0 Qa      ?  o72X     ?O ?O ?O ?!C!QTM ?!S ?!S    I O ?<,OaH*? ?S ?S                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/images/fhbg.gif                                                               0000666 0000000 0000000 00000001504 12534142432 016473  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         !    ,       ! H`XȰ8@    ;                                                                                                                                                                                            ./mvappsvr/docroot/db/images/linear_widget_icon.jpg                                                 0000666 0000000 0000000 00000001164 12534142432 021427  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 

		"""""""""" C             !      !!!   !!!!!!!!"""""""""""""""   2                  )          1!2"BQUa               '           R!1AQaqB   ? ,lEQ,o>gn[W>/Ym󩂐jd<,M2W/m?ZuN.3md<=P P;<%`3r%Đq0ԗ̻p/U:g)!.vVZ5M,LFԗmAؖ3_T|+msTX0=mE_<]?G>*3j747PRJ_eB_vL%˰VUi)UAIn_-"J(`8X U3"<!6{.c                                                                                                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/images/down-arrow.gif                                                         0000666 0000000 0000000 00000000466 12534142432 017672  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a 	 / ttt}}}~~~ꐐ                                                !  / ,     	  S@Up@X
*Ճ0\I()^a" ~}*OEtm
`%Xxm- x
'"!A ;                                                                                                                                                                                                          ./mvappsvr/docroot/db/images/background_navbaractive.gif                                            0000666 0000000 0000000 00000002336 12534142432 022435  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    8<wzEISW%*be&*X[jm!     ,       `&dihlp,x|pH,$|0	3
Zا z`xL 4zn8|.0WUYRT\f99d}N	ΑLd8ٰݠݝ:gcZ
 
x MM5Z;;GŊ21w]䚇P=`S\O˗`tL5q_Af	BSOC1iuxҧJk#CA!_ykN9_]+-Yo{22e@B"*h%<m
tM1TEƋlAVfwu77e̹Ϡ?+;nzA6޻pi|@"*F:xɭVMȓ#=.y6oѢoe⫽UWӻ, ˏOAA%c&k$	
(I yjݧa~na ~(b$ǀ s a4Vga)@(iH&L6d?cTxie-s!)dihf)eURܕ	c)?fRPjhh.h>*)PP\j馚V:駑
ꨢ(ꪬ꫰*무j뭸++k&6Z Vkfv+n覫+ko ,l'7pD,Wlgw ,O ,0,4l8*|@ 4DmH'L7PG-TWmA\w`-dmhep-tmx|߀n'7G.Wxgw砇.[褗n騧z.n{ o'7G//gw/o~ ;                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/images/arrow-none.gif                                                         0000666 0000000 0000000 00000000107 12534142432 017652  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a 
   !   ,     
  iݺGR9)d" ;                                                                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/images/bg_dashboard_nav_hover.jpg                                             0000666 0000000 0000000 00000001041 12534142432 022242  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky     <   &Adobe d    
          		



   
  {                                              0                0               0              0a        i,Z?  G  G ? ? ? ?!L ?! ?!       ?xca ? ?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/images/bg_body_top_teal.jpg                                                   0000666 0000000 0000000 00000000541 12534142432 021074  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky     <   Adobe d     		



     ^                                          Qѣd%              !a"   ? zvJGT(:9βMSAdir                                                                                                                                                               ./mvappsvr/docroot/db/images/background_wizardtab.gif                                               0000666 0000000 0000000 00000001334 12534142432 021754  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    ֺ޵˻Ͽ      !     ,       `'dihlp,4pI|pH,Ȥr,FtJZجvzxL2:zn|N~χ76 
H*\ȰÇ#JDŋ3jȱǏ CIɓ\ɲ˗0cʜI͛8sS@
JѣH*]ʴӧP@իXjʵׯ`ÊKYҪ]˶۷pʝKݻxW߿LÈ+^̸ǐ_L˘3k̹ϠCMfS^ͺװc˞M۸sNȓ+_μHNسkνËO^ӫ_Ͼ˟O (h&Y6 D(Vhfv (`(,0(4h8<@)DiH&L6餐
  ;                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/images/background_preview.gif                                                 0000666 0000000 0000000 00000001357 12534142432 021453  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89ad s    ???@@@OOO```000   ///ppp___ߟPPPooo!   ,    d s 'dihlp,tmx|pH,Ȥrl:ШtJZجvzxL.zn|N~ 
H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@
JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿`@hA2Dx0 A	(a  5|aą>4 0Z
J`A/. 7:X@l
Inxw luL@j |,d @뵦lPg^DrXwU@^ l@m (fl A8Ƞ@r  hZuPA6Pr  X^Qf2!  ;                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/images/ui-bg_highlight-soft_100_eeeeee_1x100.png                              0000666 0000000 0000000 00000000132 12534142432 024311  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR      d   G,Z`   !IDATc&!D;~D  "    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/images/area_widget_icon.gif                                                   0000666 0000000 0000000 00000002677 12534142432 021064  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a2 "   g qޠ ׸CĿIv;z+{׾߶-hf $ \(cҹל y< } ƣy$Hզu{)]ҾN&y4 ࿩;~Eƴw45=ϳÆ ľqr {ðt5ע ӾOXĴ۴3o̝?Sx t ׏pz9̙ ݬ̬r4ٶ
ά֪Ĝf3q)ũ>) ޽ m {1zģu<΄oyfʫ~{:١Я
ݢ Bhʙ ,Ŝޠ:HJ{!}~w7쥽ֵZŤW!ݤw9羰                                                                                             !   ,    2 "   H*\ȰÆ["3H̰GdB)B9I2ˁdd( ͗
TЦȏ#/n"BD9s:rDZO
dH+2(8n &V!R)2%@!ڇ(faݻvRFY Ci-AnC1_C#Gs'@C<
i2E^:cɨQ6Tqe:NMW"
쉕ٵGkRZEzic\гb o/k箜s~1C&w:  A|PV`$DB@<rA/t1M!&$I	$p%xCW\A 	mт!G<(!CЈ# Rp$AQD5В%'Ty2,m0R)exgQB(&v؁2tС&R0!$AHi1I/fC!a1/2.oXᨣ/1|Id+4ACr=@"*r4Æ5
Ǭɀ6< bʑJ+(R ` FCg|`8]j8U"03'H KP@+ZHTE I"bOd|IDL2dp%"p$l* ;                                                                 ./mvappsvr/docroot/db/images/ui-icons_ffffff_256x240.png                                            0000666 0000000 0000000 00000010421 12534142432 021645  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         IJ   PLTE   NtRNS 2P."Tp@f` <BHJZ&0R,4j8D|($
blߝF>n~hhH  IDATx]b۶H儒-{iZK:glkn-tIqq?  E$dK>$>; PZ sVh!Sy0E0}H)-tkoܪKp\RϠ .E7
)*V;~PeBx*,=$zDؾ  JҸٻ 9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;"
i]dddddddd4y5 	Rb@(8CdŪݡ,@T@ibrq0alX!pe,	=4bW {
5Ƭhu~(Q^@3="b5XC@JCT76q_5@,r	šɩD)T|O@
ON-ՙ	[n@RXIm݋(F @?=0puL;g$@6η
K`>п @h գKVn"a"%l@.v$/U^G:#`` uTtK~ŋZ5T%kxk]\*Q,҇B44OXK|yg+_M(lоEO
 V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V
rh(]tI^}oצoS3	";ʙb}"߰	){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.} Q3.Nس} )>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa3	{oB&<L[Nc.öi=` Q@d
͆I.Il`\t[< Cit484-r+f쑱BCB MH	iy }>rxp|z;BǏ;burcK4tz1G~`ؚK|	̔>ۡO$~
Ao)0pzz
} i `;ADm8n:cfA@s7L  Z/..h8or?N93B~o_'` opO-:TG	L;7]`B%˛>*wTpM 0H}&t^1'Oqr'2P͡+z,tIW''|en=ǳgRm[NStK{҉mؓVt6ҲR`ζN&}B	U(r<qȁVyrrA**دzg6D#	YP`vs~(zMle|uQa*}+TRXc"+*NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4)`N狌.߭ ǣ)q	2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\	%,ߚ/pR~/^lnp7t0_0l4_b0MWΦjmбɎl
|reȫ`B-v.iRox}
)%#`ЂR5CA2sua sYy3=jaeoI7~.plA΃
`O)	^>Mz	+4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G FZ)O	!lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a v]m1+3 y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c-賟Lδ>]5.sYs1f0;'̨Yg銛{@9	`aC(=%bo2=n1	jBoS$n#m =i0ci9}oI	qT] W%.(؅]z\x
f"]o'u䫵tk{v;A C3ֆwwR_#X(xҋ/q%Whpk_IX'b/fXKi"#####QCLi2t5L 0
QiH2;yTOok;עٶ`RNg{zy! Kxm?A(vU~mL(`o/!nmX-{v [ dw=n「sdwzn(}Oy~m
?XU;, V'+V&JRZ]᧭:zC'-߆@y4u`Vۓwъ#zP@QN>2/{\o) W~a3xLw:_Q;=pּdt\'8~3SRP6y+XQ*޺r
̗ѭ*޺r
gl/\U^u$|mbVnw\V|D͊NVNy7 k<;/E}?E*ǳgO ~g/96f
cD}%g$QG7o) UJo,O@0߾Q(;bw:5	NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 
3
u	Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/images/ui-bg_diagonals-thick_18_b81900_40x40.png                              0000666 0000000 0000000 00000000404 12534142432 024000  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR   (   (   m   IDATXA
0,}Mi o_mH|K?9_={=r *` 22Hkgx
8( Up*  *` 2~=eG<lpqX>Ml@*8M⛤$[|YMRo8Io&)p{R@    IENDB`                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/images/bg_dashboard_nav.jpg                                                   0000666 0000000 0000000 00000002646 12534142432 021053  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky     <   &Adobe d    
      z    		



                                             Pp2"            Pr!Qa2               p          Qa!1PpAq                       SU&                   y                  d8                    {×ͣ4fњ3Fh4fњ3Fh4fњ3Fh4fњ3Fh4fњ3Fh4fњ3Fh4fќ<O+뾏$  c  c ?X ?X ?=aL{ S+*;M:ǈ_I_ ?!KFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFKFXQiLbcUUUUUUUUUUUULU c1c1c1c1c1c1c$̉ge!ĨrÈE ?!c ?!c    I$I$I$I$I$I$H$I$I$I$I$I$I$                    I$I$I$I$I$I$I$ ?8P(N'
	Bp8P(N'
	Bp8P(N'
	Bp8P(N'
	Bp8P(N'
	Bp8P(N'
	Bp8P(N'
`i,D=C!d2C!d2C!d2C!d2C!d2C!d2C!~gOaaaaaaaaaaaaa$)L2#R%b(GSOʩ ?c ?c                                                                                          ./mvappsvr/docroot/db/images/spark_widget_icon.gif                                                  0000666 0000000 0000000 00000001770 12534142432 021265  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a2 &   Z[QO 洎\˘Ӿʾq޷¼g%ł<<׻񈄶Үz~c إͣձŌp2΄ǻ̱iœɚm˹Ӯ|¿ΥջܾŔ̠ ޞ﵌g&   !   ,    2 &  D#. "5/Tl>II1Z$12$F`NN!`&O-/&/6hD1D$Z1IIqZf?j`]T&Dr6NF]rIY)2D$h=q$9h$f~%]߃1hIqib$!$b3TX.ŋȱǏ CzgȆ%(?²H0)0$MC, 0agL6*$E4#
j4ꡩNU+WFF;ҳ^%$,"Apٱhǐ!A(qz 1c;n[B\{(J~jArH&4hP6e,̈́9q*v0D:Uڀכ>e *^Kv0_M*ڴA{ymNDvCٷA{N9߀^twB|4}''yv^zHP`Ww9E][aa2A3`܈RAue2bmpYUf^  }Wa!F@ĖT@yeT0&_:+鄘M@AŘ!՞|矀*蠄j衈&袌 ;        ./mvappsvr/docroot/db/images/bullet_widget_icon.gif                                                 0000666 0000000 0000000 00000002157 12534142432 021434  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a2 &   M} _kڮΔdۼ}c Iw< Ǣqf3Lĝپywɉ[Ԣe7 
sp2ǆyrX޷5$j*ќ E֦jaѧŁ,{:`̨ӟS
k!c! xmʌl ۲Q٬d渆SЙ                                    !   ,    2 &  ";7""45jS4d''`"_5&E``7Xq'`j.UJ??gg&DVE;ƕm/kI/R'?/IU¯X++1(\pÇ#9@b$(\ҥMԈ9I0#Ʊ3 5u"ISՅqp,J@CCѣH\jӧ0ʋUEJjŵׯ`r@ٳhӞەMpʝ+xꅁ@nFÈ+F}L
9P
\E1C-:J#H llL	E#sw	OXf2Z`У7\xƑ'\wԃ^l̿=x7Zb Q͒lFYYhv؂5dw	
d Vu Ĉ$v+(̡v}<֏@)CnH&L6L TN
̠\r`)YfCif+̠[)gjPBf+%AAsΩ瞕@ F*i:Wx蚕t* ZJCdi$*LRi+Һ¡h+`Ҋi:pen	en8ߖ覫. ;                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/images/ui-icons_228ef1_256x240.png                                            0000666 0000000 0000000 00000010421 12534142432 021331  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         IJ   PLTE"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""X   NtRNS 2P."Tp@f` <BHJZ&0R,4j8D|($
blߝF>n~hhH  IDATx]b۶H儒-{iZK:glkn-tIqq?  E$dK>$>; PZ sVh!Sy0E0}H)-tkoܪKp\RϠ .E7
)*V;~PeBx*,=$zDؾ  JҸٻ 9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;"
i]dddddddd4y5 	Rb@(8CdŪݡ,@T@ibrq0alX!pe,	=4bW {
5Ƭhu~(Q^@3="b5XC@JCT76q_5@,r	šɩD)T|O@
ON-ՙ	[n@RXIm݋(F @?=0puL;g$@6η
K`>п @h գKVn"a"%l@.v$/U^G:#`` uTtK~ŋZ5T%kxk]\*Q,҇B44OXK|yg+_M(lоEO
 V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V
rh(]tI^}oצoS3	";ʙb}"߰	){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.} Q3.Nس} )>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa3	{oB&<L[Nc.öi=` Q@d
͆I.Il`\t[< Cit484-r+f쑱BCB MH	iy }>rxp|z;BǏ;burcK4tz1G~`ؚK|	̔>ۡO$~
Ao)0pzz
} i `;ADm8n:cfA@s7L  Z/..h8or?N93B~o_'` opO-:TG	L;7]`B%˛>*wTpM 0H}&t^1'Oqr'2P͡+z,tIW''|en=ǳgRm[NStK{҉mؓVt6ҲR`ζN&}B	U(r<qȁVyrrA**دzg6D#	YP`vs~(zMle|uQa*}+TRXc"+*NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4)`N狌.߭ ǣ)q	2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\	%,ߚ/pR~/^lnp7t0_0l4_b0MWΦjmбɎl
|reȫ`B-v.iRox}
)%#`ЂR5CA2sua sYy3=jaeoI7~.plA΃
`O)	^>Mz	+4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G FZ)O	!lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a v]m1+3 y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c-賟Lδ>]5.sYs1f0;'̨Yg銛{@9	`aC(=%bo2=n1	jBoS$n#m =i0ci9}oI	qT] W%.(؅]z\x
f"]o'u䫵tk{v;A C3ֆwwR_#X(xҋ/q%Whpk_IX'b/fXKi"#####QCLi2t5L 0
QiH2;yTOok;עٶ`RNg{zy! Kxm?A(vU~mL(`o/!nmX-{v [ dw=n「sdwzn(}Oy~m
?XU;, V'+V&JRZ]᧭:zC'-߆@y4u`Vۓwъ#zP@QN>2/{\o) W~a3xLw:_Q;=pּdt\'8~3SRP6y+XQ*޺r
̗ѭ*޺r
gl/\U^u$|mbVnw\V|D͊NVNy7 k<;/E}?E*ǳgO ~g/96f
cD}%g$QG7o) UJo,O@0߾Q(;bw:5	NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 
3
u	Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/images/bg_dashboard_nav.png                                                   0000666 0000000 0000000 00000003213 12534142432 021046  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR        TaW   sRGB    gAMA  a    cHRM  z&         u0  `  :  pQ<   PLTE   444555666888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccggghhhiiimmmnnnooopppttt|||}}}~~~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       h-   tRNS S%   tEXtSoftware Paint.NET v3.36%  IDAThC행RAE[=C`
e%q,D$T/xSΩdD#0s4!H$\]\__&}$GC"au{.	!o6	7D@l7FQjhWkFlVփJuBlrB+Wrpl>?';̘AȚ|!6S*O>@2|&c*奅h?#֖P6 ;{yZ"^Vdl\q!N&)mIuv܀O{mhJ;繮.4ecRpOz8'bux{RNfJ_Ŗ<ݗNܕYPϝfek3^
eӋ8	\Ck۱A%{p=0+"    IENDB`                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/images/icon_down.gif                                                          0000666 0000000 0000000 00000000322 12534142432 017541  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   vvvɄxxxrrrlll}}}iiinnnʚfff!   ,       O'~gf0~S	b@uGu&(8
B@ :0wH;?oQ 
 ;                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/images/spinner.gif                                                            0000666 0000000 0000000 00000001517 12534142432 017247  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a       43/zyp#" ĵmld^]VBB=ONI                                             !NETSCAPE2.0   !Created with ajaxload.info !	
   ,       P  di0l!*`Ƒ5و[<iP),IZ$bH85&x5k <yB !	
   ,       h  GҌh*ਨ@$E}eh @
LcQGBP5 <5UdQ+"g0Ak#A <P70<	0Y8*	#! !	
   ,       `  #(H*
P	-13
:C1KHH.$ٱy j.WD@Y 0H	,0B
kJU?5w|$k\)! !	
   ,       R  di 1@Ck!B`? #E8zBQXcmv" £``UFrp)f! !	
   ,       `  di@E1m]ǹHІ(4 (,F!aH XSm5bDH ab,
%p3c#'"467P&*X/($! !	
   ,       _  diH@@4 ²A"I`>nI0$K7H,-t*E-``1@C7h/1f\)&! ;                                                                                                                                                                                          ./mvappsvr/docroot/db/images/line.gif                                                               0000666 0000000 0000000 00000001461 12534142432 016516  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              !    ,        Hp ;                                                                                                                                                                                                               ./mvappsvr/docroot/db/images/ui-icons_ef8c08_256x240.png                                            0000666 0000000 0000000 00000010421 12534142432 021417  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         IJ   PLTE   NtRNS 2P."Tp@f` <BHJZ&0R,4j8D|($
blߝF>n~hhH  IDATx]b۶H儒-{iZK:glkn-tIqq?  E$dK>$>; PZ sVh!Sy0E0}H)-tkoܪKp\RϠ .E7
)*V;~PeBx*,=$zDؾ  JҸٻ 9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;"
i]dddddddd4y5 	Rb@(8CdŪݡ,@T@ibrq0alX!pe,	=4bW {
5Ƭhu~(Q^@3="b5XC@JCT76q_5@,r	šɩD)T|O@
ON-ՙ	[n@RXIm݋(F @?=0puL;g$@6η
K`>п @h գKVn"a"%l@.v$/U^G:#`` uTtK~ŋZ5T%kxk]\*Q,҇B44OXK|yg+_M(lоEO
 V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V
rh(]tI^}oצoS3	";ʙb}"߰	){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.} Q3.Nس} )>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa3	{oB&<L[Nc.öi=` Q@d
͆I.Il`\t[< Cit484-r+f쑱BCB MH	iy }>rxp|z;BǏ;burcK4tz1G~`ؚK|	̔>ۡO$~
Ao)0pzz
} i `;ADm8n:cfA@s7L  Z/..h8or?N93B~o_'` opO-:TG	L;7]`B%˛>*wTpM 0H}&t^1'Oqr'2P͡+z,tIW''|en=ǳgRm[NStK{҉mؓVt6ҲR`ζN&}B	U(r<qȁVyrrA**دzg6D#	YP`vs~(zMle|uQa*}+TRXc"+*NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4)`N狌.߭ ǣ)q	2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\	%,ߚ/pR~/^lnp7t0_0l4_b0MWΦjmбɎl
|reȫ`B-v.iRox}
)%#`ЂR5CA2sua sYy3=jaeoI7~.plA΃
`O)	^>Mz	+4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G FZ)O	!lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a v]m1+3 y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c-賟Lδ>]5.sYs1f0;'̨Yg銛{@9	`aC(=%bo2=n1	jBoS$n#m =i0ci9}oI	qT] W%.(؅]z\x
f"]o'u䫵tk{v;A C3ֆwwR_#X(xҋ/q%Whpk_IX'b/fXKi"#####QCLi2t5L 0
QiH2;yTOok;עٶ`RNg{zy! Kxm?A(vU~mL(`o/!nmX-{v [ dw=n「sdwzn(}Oy~m
?XU;, V'+V&JRZ]᧭:zC'-߆@y4u`Vۓwъ#zP@QN>2/{\o) W~a3xLw:_Q;=pּdt\'8~3SRP6y+XQ*޺r
̗ѭ*޺r
gl/\U^u$|mbVnw\V|D͊NVNy7 k<;/E}?E*ǳgO ~g/96f
cD}%g$QG7o) UJo,O@0߾Q(;bw:5	NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 
3
u	Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/images/line_widget_icon.gif                                                   0000666 0000000 0000000 00000001455 12534142432 021074  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a2 &   wζԸΜ򭼔Ѷ짺ӿǜԮ̨ܽǞѼ񥺅~ǡԵ¬ƖӨ޵㷿                                                                                                                                                !   ,    2 &  ..44*4 <+GB
 .6@&<99!&FK.1E:GE#@+ .$2$L.dd 	@D3fAB0'hQBP(&]$a c2Eƈ) E
)Ar) ILl4\	"M]ԀRUD5@ AAEp還;Lg1E802a dSbCC@$"o	Ixw"/,@1ȇg!U]u
BhGʛȆݶw./8qƏ>|УKNN\ν{ËO	 ;                                                                                                                                                                                                                   ./mvappsvr/docroot/db/images/medium-widget.png                                                      0000666 0000000 0000000 00000001630 12534142432 020345  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR   D   
   :   gAMA  a   PLTE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             tEXtSoftware Paint.NET v3.36%   IDAT(Sc`
` A`
*$6 `tC    IENDB`                                                                                                        ./mvappsvr/docroot/db/images/bg_body_top.jpg                                                        0000666 0000000 0000000 00000001041 12534142432 020063  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky     <   &Adobe d    
          		



     ~                                               $               C                               Q           ? ? ?ʩU? ?!Vb5' ?! ?!     ?8N8 ? ?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/images/first.gif                                                              0000666 0000000 0000000 00000000331 12534142432 016711  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   $H-S3Y?h,f8n?u,qDoBmJuHzN{SQV_`homgq~獫!   ,       V`#di]&[>_UFrtyI,)4Qb$K̣! ,ii@Y ֋$FǙ,) 	w) !& ^($! ;                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/images/bg_top_logo.gif                                                        0000644 0000000 0000000 00000014167 13005675162 020071  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a &  v,ʹx/I% 	v݁|򂂄hhjҜmZZ\iٙUԴ ppq 9γffh5llno!սwꔔx݌]xxzLǦY`כddfּWZ\"^^`aabbإCdE\\^<bbdlz{|sttv/ˆn(2p}}~rrsvvxAQjjkz{nno>SfٶγآRԧ̷?֮gُ薖~xxʾ\TVG𶶷e\^  ķcݳ{{}h	̮γ񓔖ZVXf=XXZ !XMP DataXMP<?xpacket begin="﻿" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c014 79.156797, 2014/08/20-09:53:02        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:OriginalDocumentID="xmp.did:86a52009-40eb-894b-9319-89f5e9536938" xmpMM:DocumentID="xmp.did:9A796D1053CB11E48356FADD6435864F" xmpMM:InstanceID="xmp.iid:9A796D0F53CB11E48356FADD6435864F" xmp:CreatorTool="Adobe Photoshop CC 2014 (Windows)"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:4df9833e-e942-5348-b4ad-bf34977befc5" stRef:documentID="adobe:docid:photoshop:67bea456-42b0-11e4-bf70-c0b915a93d71"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! 
	  !   ,     &   _YhB m)\ȰÅ",
BHaIrgr@@B,|UC1(ѩ[j@!	Dbȁ20#O®sӡ%Svu'hJX16 r:I&\ς LA09TI׉	JN g~҂K.4ǊPfhbR?vbݺd͇M⯹4&_xuK\ʅtO<poHB>֙fs'`܂'\!?CsP\HIp"OfӹzQ2_rv,|,4_WyL¡",T}`HC ͽCms<.Y;47EZ &{=1wҢhc
ЍҐNdpC6ׄnnSH AQSL\l٥?_Id@})Xg
IyLahlw0%b]ظq@vaq@lO8nOpMv`$Oim*ĥnO
AX16F*iڅ\
CIr'qIz<|ȧ'%;Hssh	y4C4EvFf!wE
?xBWp8
?>XJB[HP$Csg ȁ%<$ )qUDC|"#Ac?niҜ8Odc{iq?4Jj[yaAR^?<`_"Wt
\C\lCb`f'So*d Bsh L4nӅ!,hSkm2O*WD[$B&tӃ1  Xbi@ 8Ծd9zY"6T K`X&|! s pch vc!ʛd
OV }A:A/~nb50@?ᣓaA!M#YHk?p6g'RC4XXΐ&'FCcdǸEvAIUX`ا?oZ{Ñ&/Rr젏H$;ch&f~@?V0@DOW iy B:4?8o9Bs(Sb9TM0ʀsV@ibj mO9A]@ ;T6#iE'l!'73Sb)J)I#Uʐ$W45*cnШ^%BP3rO&).h)ct %|ӏxHls%]'SP1rQ E!M/Ct\)E1@@ ȭ
Q]PoBڰ ={X$޾57 Spj\`L	̾Gm惁T-*k@ٵwNA
yE2 M)@B,М<i }҇41'hqE?|Чф8	ޚB"TN4!xza xU@# oRz&$HDfhZr(3X&M?Fl8a{vPq?0O
)\s^9CT 1qiß 4 )<P
V;gks&h
`H*]«fZȍR#6'>MTc ;	D^^O2 F!'`7=ғCH4t<9rh
{5Rp'X2D6Ze5:b:4Ary%1_v1!s8|8ldIȵ#07L ,B ȃη
/cE0r7@Zy̿1!H{]?V8w,pGR=P4!]4S=1[-А,/&F0*aZG
[;9"S8EB\'}!|.d" ͉j匠̞E@%HC?|PC84??&?%W^4*uzc;CSv PpgiB (
#	7"|T_CqztQ Hg@fpNװG"H@
*Ђ7~17|@\8?p9X#!Jh?p~~ ppx0pjP0&
G!>0r
]	
7@`xfw 2V@sQwX ⃟R$!Ix~` 
: 	@	 VX:P
ȉ  ?@D1  	  !	0 @ۨ@@1 7Y/Q}3niց.ԨA+0@9
A#Ȕ 
rA9,@
Ly~ R9`b	Q38n}o#Ye̆痑:p~ {`C
 0 0V Pp ~ [t@+@J8-`.0
-0+𔲰p PP'
w @!=aI0 &wQ"Q g1y0Kp~?a#d-`G@ # 	_# 	G
0  O8 p@GY0p@ДY WT1hx~!E0da	`0 `Qx ЄVʍ.  ؇%%@A
!0 I  zY+J
4!>` 		cФ8	  
V(
fp`P`77%]  	 ވwp@@p
	ɢ끨!Puʌ? v8 %@ B@_K)
T]Jh%~ ]qp@p/ 2rS yAh #P`	 &+B0&@t PЯ`
%P
P3t`ˡ#0;j\Xϡ!"*hp^ ۣJ(ap~p#	Ig?`[xa`d
 a˹Dp~1x
?	hjke	5Fy&0  P	#)	@
G0p@˯rYp	ʪ Kz 0@J
@f@)\?,6p8wax@%	1 cpPHc0 >ɜ%* Áp),
@JXqcTp	P
a<]З<^Q6J^Lu!%0LD @9pr(0 #ȡ% `@}r 
ǹ
 Yȕ }\p s.sSP p|K
| ˮ|L=p !0@__D@Ҡ9 +LK g+ڼDp@
a.
Ѕ0K0`00P`ŀK`̥B@K@6  ;                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/images/table_widget_icon.jpg                                                  0000666 0000000 0000000 00000001655 12534142432 021251  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 

"#$#",,//,,;:::;;;;;;;;;;; C''.$    $.*-'''-*33..33;;:;;;;;;;;;;;;  2 2                 :         !1A"Qa#25Bdq$4r                &           2!#1"aAQb   ? ߽{ހ/]Ϛ!/Ϛ_5w>jl\)OtwyeqHc]YF{d@2=^JᚃL).0/"Ja~<s]<xFhHg,Y=^L02v44Ҟ;-O1?]wћ.yC--y+_e|%^JO;љV9f0uum,i{u5q&Mhyeݜ PmYrdʅyYw,_Nk3w7lCV0Y5ϝv!qѧK8N ;4VԼ`}S'/@>yڒ奲ɢ6hX;JY+?SQ/+2-Sr9fJ0
Y5γm1[	6m<mňĊfM -ipώԗ%<hZFu&9BctS7Dauc*E%
<RnjF<F􌺲axZiXGlDFHťO.Dikm\Y>wZZ;>/͠I$]
Mt1  ?                                                                                   ./mvappsvr/docroot/db/images/logo_bravoprint.gif                                                    0000666 0000000 0000000 00000002072 12534142432 020774  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a $  賴#(dgJNꋎ~陚=A04qtW[ʖ馧!   ,     $  'dihlp,tmx|pH,Ȥrl:+@J)`e`?K:h`x\&ӝxauv}z4 }_m\^6ra$UT&	
a	T'Vb&\[p % ^]"}-	"
s$$a7a!I'!Ev`F" P(@v>4˓^)PBN!`!4ЇP4󈰈Q|> AV#`t9Up/9=DFҵ
B\!)}- {ځfCI߽O"H;"!oNK0EE#
VCDT%H.Մ9\a-Q]>i >Ѝ 	Hg"GPs`
'jb5BwawBw9}PeƅHK$XW:wx +q7_xD!k(8ҍ$ @( :n-N׃(uF	ց<)&	E(F>b@zʄO	*tPA8k!aN
/ڜcs\7b  oX~P#@0>Hɪ?izh
$Nksl%aXyháyQ!5pd=a$ŉ]J%W$yin9Ry,x@%G&`	qwJW&p8xPmފQ6@rBr@0])tRlǈ~ Dc E/J7-NGRW0dk\w`-dmv!  ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/images/button_preview.gif                                                     0000666 0000000 0000000 00000000522 12534142432 020640  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    ۝KרbQ@򴴴Ҥ}c9ߘ|{}~H^t!     ,       `  ^i(*l- _t][.̑$q:d&	brA.drG	Dx@$ }PGx1D@ux 	}A#x	 [Acƺ
		?! ;                                                                                                                                                                              ./mvappsvr/docroot/db/images/button_downloadtxt.gif                                                 0000666 0000000 0000000 00000000525 12534142432 021531  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    (𸸸϶LLĮxВuGPu#eҀͽ%rϫxxqqq!     ,       ҠP^i(l[p,R-is>N	9p@K0X+NDE(>(42`^An(x{ortwmU}s	e  	k`	vioL!  ;                                                                                                                                                                           ./mvappsvr/docroot/db/images/backgroundTrackWrapper.png                                             0000666 0000000 0000000 00000000260 12534142432 022247  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR  y   "   Y   tEXtSoftware Adobe ImageReadyqe<   PLTE   :IDATx۱  ð3_4׉K%          O	V4΅s  `i    IENDB`                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/images/button_print.gif                                                       0000666 0000000 0000000 00000000543 12534142432 020316  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    mmmʞPPQ[[߿229<U.]H}!     ,        (_i("l뾭!U0PIP(si^ta8V	xx`)_ym
o` .  	y 
 p	

 v	 	 	~	  
tۏ
G&! ;                                                                                                                                                             ./mvappsvr/docroot/db/images/ui-bg_diagonals-thick_20_666666_40x40.png                              0000666 0000000 0000000 00000000373 12534142432 023736  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR   (   (   m   IDATX]
0Dl ³b!MkG(hWMc~'=w;JY * 2
JA*TAp8Qϔ=CanwTA$I>Mr6jY+IFJM2S6ɕ2MV6$^rzQq    IENDB`                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/images/mv_logo.png                                                            0000666 0000000 0000000 00000006236 12534142432 017255  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR      !   	   tEXtSoftware Adobe ImageReadyqe<  $iTXtXML:com.adobe.xmp     <?xpacket begin="﻿" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5.1 Macintosh" xmpMM:InstanceID="xmp.iid:32C87AE557C911E4BB5798526BC76546" xmpMM:DocumentID="xmp.did:32C87AE657C911E4BB5798526BC76546"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:32C87AE357C911E4BB5798526BC76546" stRef:documentID="xmp.did:32C87AE457C911E4BB5798526BC76546"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>/  	IDATx[q8=	D RHU
$V ?7=*t+0
B\%DI0R(`.3N_@|݋N;ǯ5WhK3|㿛T~tmXYͯ'dc/	GRwZ`FGZ	ZL9r1Y5b~_Ɂ-,(wHNʘǌe̢-nϑ[ؐ\p3{/r;j!-G{d5ru$HRw4~#pN>eZoaiϽM=8!(7Pa:A|_!gY6A*=.8+G5Wdfsִ/w΍fu6˘qrŊC{rR4s7w衿ʱ&HoTCwK1U:}Wڰ)Ge~&W'CR64wXQ@t޸&A9dsm%1nFUQiGӥz@YfM&`L۳j!0mCiT6qx
f}6S-Ys\>Bۘ^@NT"pf&5لId2L<P,j2~Z98$?-ǮAi/	(mQ>NY;.8mΝٞ܋&]Ψ؅2]XX$-Q8QfEs#0'dwsTrS*ZL,~kòGf!i&!jU3Kz(.Yn[g}PWfsЈ*;qG1[;p]?2K&e!+d\>qOAhc&YdiI~		\}V%{=*"h,IݿO9Iw`A-\Vku>cdNcb7@x:.]Ϥe0FkhW 7W>gW)Rpɗ c^qSn{$_rLH­ԵamOv疸6uzfS/6|b%\rk6i*r_Uc=.h[1:
ə%.>-bJ${K8^{ҦJ	CXi+.'SԕP=L@e)B+~u0X;ۆT6f}sd,(TytD!@Dv/߭sp+BӬg|SDw#A_s3&ME*>78|.T1\!qn8m,q1kF+؀$Tvf&ʱmHvޟ\w/P:T&|:ΜsjΞN'v7Z_M%a)`$³'!ΩRT'4c>(h%e9YJ#YApP^mZNUYٗ8LBS'-GtS
il)ni#%T9$I(کy~GhQT/F=֖m#D5sLd#S[U~aG@!8-xSp'C^%
ь8x.G}*^;S<M8U6ㆂahwsX'"1R]e֩bcĄ80Q;Cvq9$nbѬQk|W}Hh
่dpa眗h_К<-wQ3m~huG%aC@XN>.ZNrDJ#֢cGq(EL<@4P!W))ycd10G;;eQ5 ]#QG]HiI})(ZXDYab4"\)G4;!8-2G<>RǀVQ e	5?{Ρ8Zꍫ(Nri	ާl{kڅ$.e$MN:uc٤<sele9W͙dm	]pl2;?]	WPޙw^"K6mPLflΟWH<TS k''{ߢjtZ"c&LyaPN	G4.Jcg.:q89Z~ )[
F:hP9-q<1r! jbI~Z %uCNj+t @y\%k$Y2powfP&'},+zR^ҷ</ ezMӯp*    IENDB`                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/images/magnifier.png                                                          0000666 0000000 0000000 00000001147 12534142432 017550  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         a   gAMA  7   tEXtSoftware Adobe ImageReadyqe<  IDAT8˥kaǿ$F?P*BEpԭ 8TwݺM;TE!"AVD1
&oysV$yg>jص֖9bC cxfz<m	AƮe(®|W BC|+> ̶3aBhw#2IdST ".N:0ZcݓTOtE<AkEQ
X~W !2:Yc 4 ?G-[.H'=~Hűi씗>|CC>)qWDk6'w. zkJpQ0toIO^>o?u(gOĵM?2gV\g6W'ghz"Qh}+FDjދ%7.mI  s33\r(~ J72ˡ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/images/bg_dashboard.gif                                                       0000666 0000000 0000000 00000005113 12534142432 020164  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89aS #                                                                                     !  # ,    S  p8`,Ȥrl:ШtJZجvzxL.zn\`0=~vB  vC  
H*\ȰÇ#J!hȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳ@0"H*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۵!.HKݻx˷߿LÈ+^̸ǐ#KL˘3k|ϠCMӨS^ͺװc˞M۸sͻN :DXμУKNسkνËOӫ_ϾߡϿ (h&6F(VhfvA $h(,0(4h8<@)DiH&id,PF)TViXf\v`)dihlp)t)g|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠)L`ꩨꪬ꫰*무j뭸뮼+k&6,4 Vkfv+k覫+kk0 ,l'7G,Wlgw ,$,$,0,4l8<@-DmH'L7PG4TmXg\w`-dmhlp-tmx|A.n'7G.Wngw砇.褗n騗 .n/o'7G/Gdw/o觯/o CL:'H
Z̠7z GH(L
Q80gH8̡w(H"HL&:PH*ZX̢.z`H2hL	 RpH:x̣> IBL"F:򑐌$'III̤&7Nz(GIR%QV򕰌,gIZ̥.w^0IbL2f:Ќ4iZ̦6nz8IrnL:v<Io̧>~ (7AMBІ:D'JъZͨF7юz HGJҒ(MJWR-LgJӚ8ͩNwӞ@KJԢHMRԦ:<*TJժZXͪV՜ `XJֲhMZֶp\J׺xͫ^׾`K}%:d'KZͬf7zhGKҚMjWֺk+ͭnwpK\ҶMr:ЍtRͮvzݭuKMz^Ύ|K^ LN;'L
[ΰ7{ A,(NW0gLۘ%w@L"8FN&;P_)[Xβ.{UL2hN3ì6pLexγg8πMBΆNF;~'MJ[%v7N{ӠGMRԨNWVհgMZָεw^KLbNf;ЎMj[ζn{MrNvMzη~ NO;'N[ϸ7{ GN(OW0gN8Ϲw@ЇNHOҗ;PԧN[XϺַh{`NhOpNxϻOO;񐏼'O[ϼ7{GOk; ;                                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/images/bg_widget_header.gif                                                   0000666 0000000 0000000 00000000265 12534142432 021033  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    ʶۍ         !     ,       bPIͻ dicl!tm߳|;pH,Crl:˅tJZӄvz[xL.znk|N~ ;                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/images/background_draggable.gif                                               0000666 0000000 0000000 00000000200 12534142432 021664  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a	 #  獈z                     !   ,    	 #  -Ik`aUW"i[*׍+oH,$1 ;                                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/images/bg_body_top_ocean.jpg                                                  0000666 0000000 0000000 00000000476 12534142432 021243  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky        Adobe d     %%/$$/,$##$,:22222:C======CCCCCCCCCCCCCCCCCCCCCCCCCCCCC$$3$$3B3))3BCB>2>BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC   "  Q                                              b#              !"   ? pCLЦh\O                                                                                                                                                                                                  ./mvappsvr/docroot/db/images/2-column-layout.png                                                    0000666 0000000 0000000 00000005132 12534142432 020554  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR   `   `   F
   sRGB    gAMA  a    cHRM  z&         u0  `  :  pQ<   PLTE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               tRNS S%   tEXtSoftware Paint.NET v3.36%  IDAThCZ	[Hݲr,ؐ IڕFCG/(4<ϒi zz]n^W֫E3y߲=Ljo/glOO<audM?7$X-&je/
ޛhV}}EfVhܼt6 mc;L0>|`6Ű?O&@|<1; GG; ˇ%_Lݎm@xmnЎ^Z	]Fzy"8<A768EؽJ}?<<|x۝6;A F,onozښxYQAoo~_<>I%|
45h$6M<iyޒZ`Di;,50 um D:`Y4:D?(<37f9lhRTj`!<xZY"PeHtNMu@$Q%Ox}󩁭~o2\@-<09H%E,S9P$r ̗ŁLg2Ds}h6:(C47S@!BhlYBDӑPS!	(D
`*ɽKw/Q`!?Z`\UZ-*`bMufMVU5s\s1IvҨrM摬~M]:«;Ltkfg_k_w
/,t [MleD`(J$e-JHA~6UF>qYh.\'JXH*>lj`)CDՈj"MuTM+_gŃw&-Td5!2Wu
XF,LSqti@ًf3 !cΊ0DNMjMa"d*Q7
4ΝMsoU:/1̯-aMqsne=gSN5eLkN:j`! Dv>*2DqB?d0&5mnsoX^<O5P"WUVLWUdqz'i8Aw!7؜*AWhjBxdi4A"SX1ZvDz@{NZb;A`d@rFKjX^Wt^%	ED+Z%˚q
@	  E@8CSI^I'kV}mlʃ@<%~D)d0<::ԧSu[f;ַw$_k{U틫峕{A7Ro(YFh߶j/8Ux6<9kbUɿl␁k%\C    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/images/pyramid_widget_icon.jpg                                                0000666 0000000 0000000 00000002012 12534142432 021613  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 

		"""""""""" C             !      !!!   !!!!!!!!"""""""""""""""  0 2                 6         !1"2AQaq#BRCb               ,         2"A1a!Qb   ?   @  }~NIqS 	iܗ_w(9uCc^J>M8L;^9aN>m̗R<љYE}/Esjl5WiR{`- VmU+M6[ߑ)YRٻm߆q*QLwSt![7XWEҏ0f2^N TxQq;<Zil^mHV輖ўoZ1ey3ߠAm:V  a!5$iSv,+|K14'Q5˩ҊշR3sG54FS.-fq;'rGm˿(*/6ꐼ!uX}^7ӕ} b-s>|s5_5Z8H7W[.hjน7d]knIny,:DˍхėD]< 
ǻ+OPVbJhia5
e$9<ixH%K	m?d$?)۽EwWu\Jζ×~N:M'ղZvh23kOb҈th. c7[5jYٹfŉ,@Y_LMVc8hbl>//t3JpWT ^AY9$X                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/images/ui-bg_flat_10_000000_40x100.png                                        0000666 0000000 0000000 00000000262 12534142432 021630  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR   (   d   drz   yIDATh1  [	7(ȚooN+J+J+J+J+J+J+J+J+J+J+J+Jv-F7    IENDB`                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/images/small-widget.png                                                       0000666 0000000 0000000 00000001617 12534142432 020202  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR   "   
   f|   gAMA  a   PLTE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             tEXtSoftware Paint.NET v3.36%   IDAT(Sc` 0 @#FA ^$/    IENDB`                                                                                                                 ./mvappsvr/docroot/db/images/uup.png                                                                0000666 0000000 0000000 00000000202 12534142432 016407  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         ~   tEXtSoftware Adobe ImageReadyqe<   $IDATxb`@AJ1"dIE$ =;    IENDB`                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/images/save.png                                                               0000666 0000000 0000000 00000001756 12534142432 016553  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR             tEXtSoftware Adobe ImageReadyqe<  IDATxڌTOHTA]b݄vA3L(B!h[ gu H/u餗( ݂"	ACyǼf~hyShG Y'C3FְLV9g֞\}I.L3)m-) /kد|(N{"^!G	_aA(+-cr#VFVwv@kj7 DI
5,7H!0J_ˁAUg	I	Swo3*	DӤFqR9ZK#1@"-.cgDvR1lKFFcHaDb;!j`%;^'a(j!@4Ĕ#%xfv=O)0|ZϘ\yJ$L좓crče(lxP
42$f0rECP Dj{}iS٣@1aI>@GQ ̐,.ќU6t:d}@olx[PoA03;;kB0F-fm((H$J%_,秦 zh[n#g'ZwR&;RMl[10kk
mc lRJ~dN!YTYH.e,e0) $ݑD^Ý.,//3#INLHjf2}&c?V;B8 >$ֳpϔ!`iiN[=\C8w%N|}u-䱲W;'|mKOww7'VSmmm.o%1== H}ssD hq    IENDB`                  ./mvappsvr/docroot/db/images/bg_dashboard_nav_link_ocean.jpg                                        0000666 0000000 0000000 00000000522 12534142432 023224  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky        Adobe d     %%/$$/,$##$,:22222:C======CCCCCCCCCCCCCCCCCCCCCCCCCCCCC$$3$$3B3))3BCB>2>BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC   "  X                                                          ? nG#X#uYI I                                                                                                                                                                               ./mvappsvr/docroot/db/images/close_icon.gif                                                         0000666 0000000 0000000 00000000304 12534142432 017677  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   ӫk o v {%G7?l m i    !   ,       qеԼةtGR%Hbi!,ɶk4$1 3a(&a,&'BRDDaP`2
,wHeΖb $,E`A	Nojzz
 ;                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/images/sliderHandle.png                                                       0000666 0000000 0000000 00000000350 12534142432 020200  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         Er   tEXtSoftware Adobe ImageReadyqe<   -PLTEbVNWlYdgUkXiͧY$   QIDATxڌK
0D~L?n4$.|c@PP3TnsĤ<,YuƦ.&)~ˠI] 

T    IENDB`                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/images/ui-bg_highlight-soft_75_ffe45c_1x100.png                               0000666 0000000 0000000 00000000201 12534142432 024100  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR      d   G,Z`   HIDATՏ	@'ݍ_30B-d4<xDߩ3Zkߏq 22-    IENDB`                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/images/trackSlider.png                                                        0000666 0000000 0000000 00000000234 12534142432 020052  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         c   tEXtSoftware Adobe ImageReadyqe<   	PLTEfffLs   )IDATxb`bddH&JxXxqxd$-   ]V\    IENDB`                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/images/bg_pageheader.gif                                                      0000666 0000000 0000000 00000000572 12534142432 020326  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89au<   333YYY!  ,    u<  ڋ޼H扦ʶL
ĢL*̦	JԪjܮN(8HXhx)9IYiy	*:JZjz
+;K[k{,<L\l|-=M]m}.>N^n~/?O_o0<0:|1ĉ+Z1ƍK;z2ȑ$K<2ʕ,[|	3̙4kڼ3Νi0 D
೨}8M4*N
*5:U  ;                                                                                                                                      ./mvappsvr/docroot/db/images/load.png                                                               0000666 0000000 0000000 00000001473 12534142432 016530  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         (-S   tEXtSoftware Adobe ImageReadyqe<  PLTE̍ԛϒɇOHʈOIb[~ϔϐƆTNԶتɅƃldƂVPvsβSK@9QInfZTܼTLh`ǆҗwʊіWN{c]ǅe^MEÃkh͎>7C=voΏҘ~uˌkcԬӵNGc^{؞۩[TQKmiZP߾liyÄϤd]LGٺДăܶѴ׸ʉhdṏɈ^Tɉyle޷MJַ|sɛ˯D=͏ngzڤ͗ϐzמĀha7{23v.˛~G@픲Àѕ:~4JEyM   tRNS 8Kg   IDATxbF0 	TDDzH+q(CscyX
@FLl"\u1 xK=2* " +Ab"+Ud*"ƨ	ua-HpEբdX@L@t8A<yq9r< #D. ` XG;    IENDB`                                                                                                                                                                                                     ./mvappsvr/docroot/db/images/donut_widget_icon.jpg                                                  0000666 0000000 0000000 00000002776 12534142432 021320  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  ` `   C 	



 C
  " 2                	 .         !"12AaqB#Q            /        !1"AQq2a$B   ? 쐐T=C̨I[P*Kq*h|TO"W\hjZr0z^m8~j7R+t +T6.}lGG#]n07B\m*~].AMN!DjC#5".&{s'l_XLV۫mn_$4?<cy^SGTK]$K!@cp}Y+A# ";a2XB`˄k#G6Mz`$ʇtӢ]EԚnɥ)yTSϾ%%#):B;hI\y7ožʯc0˗R4~}Pja75X᧐!!^$hC :6f%-{oe&bu-uEƏLTaS\F0&"#m^Tx2%slz.FbB/qnbuKr""deNJQǑ;(zi?s~1p9hGeRЪTUz)(JRsdيH[\k,ՕϥFhk t{$Gc34u}jKXؼc  T*jo&	 _&kt56 7RV#ӺhnöslwvcT]4b4njK0"><)	ϑX:E=teG*Y7ͭ{+UL94:>x\-#U{hx␦$RmDWi! v=5q<6FWKe.}luou&CO
.Z-̂2j⚤4EioFB'p"^LjC`9GB<Np6"n[[VQ[Q=2O%F
R	8֦c.WJuq«k[rma h+{7"MF=tRQQpb)O7 :YUrйk[{_U#eE3`-sc;^g[fo[4vSXJAݕ,+R($v\r{F(rXȊˬ2ޔo$ $|׵#DF"4Dh  ./mvappsvr/docroot/db/images/bg_widget_header_ocean.gif                                             0000666 0000000 0000000 00000001006 12534142432 022172  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    ɃĆƪڍ̕πÂĪڻ䏴̺㇯Ȉ턭ƕЋʻㄬō̪ۂč˟Ի㋲ɞԆǃňȔĀ                                                                                    !     ,       @&dRh4"fDVWf2$ /y8Le0@+>Tzyxww

!!!!" /^~ABD0pE-haE-FybG$1I-O$8"L3YC#-3d͒Ylx"E!>^sEU93 ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/images/background_navbarright.gif                                             0000666 0000000 0000000 00000000356 12534142432 022277  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    oooKKK蓓WWW{{{@@@JJJttt\\\???                                             !     ,       k $d	9hp,tmK|(pHdl:Ш   cp\gujNryPww 7}1tV3k$ o$q&%#Tt[! ;                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/images/add.png                                                                0000666 0000000 0000000 00000001505 12534142432 016335  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         (-S   tEXtSoftware Adobe ImageReadyqe<  PLTEՋ̆ߦٖn}kt\w`I?s\չdVIB䶖ӉڪD;pcӊȠnXڦHAÍ{ɡؒg[UM̊̄ynhS}gx͈|ywkXC8ˁoXΔ=5߬xhݹSLԝeUɆqۨݩ|kݪܷுuB6կֱ҃mыzk~oŀ^Vǅݯr[٥q_yxd}zyWE}|dvj[lZE<ܯۨԊaX~iϖⶦЖݬfXvgjܸ}fۛPAydoYpY K   tRNS 8Kg   IDATxbG 2ى5ʗ&m gQ	Kp-gfr/	s*jdex
 JBc]*Lzuu\A@<:0ͱ
zB$b@nm8P[˭:( .g)bsભ1aH)9Z8:41Ќ*\/y^d9mYE  dVMs    IENDB`                                                                                                                                                                                           ./mvappsvr/docroot/db/images/background_navbar.gif                                                  0000666 0000000 0000000 00000001120 12534142432 021227  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89aT   KKK{{{oooWWW@@@JJJttt\\\???                                       !     ,    T  $dihlp,tmx|P)Ȥrl:ШtJZجvzxL.Gzn|N~ 
H*\ȰÇ#JH3jȱǏ CIɓ(Sͪ\ɲ˗0cʜI͛8sɳϟ@
Jѣ%ӧP `@XjUK,ׯT]˶ۜh2}Kݻ߿eE@̸zxL墑^̹3<Mdd 	J^:ic˞ڸspY{PsN: ,ν ;                                                                                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/images/next.gif                                                               0000666 0000000 0000000 00000000271 12534142432 016543  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   $H(M-S3Y8`?hf/d/e0b>s$j,q4rDoJuO{SSUXOOW_gh!   ,       6`$di$ph_U;QELXECM`H"5z ;                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/images/full-widget.png                                                        0000666 0000000 0000000 00000001633 12534142432 020032  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR   d   
   uL   gAMA  a   PLTE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             tEXtSoftware Paint.NET v3.36%   "IDAT8Oc``9 zv0ZBRE      IENDB`                                                                                                     ./mvappsvr/docroot/db/images/bg_header_nav_links_teal.jpg                                           0000666 0000000 0000000 00000001664 12534142432 022560  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky     <   Adobe d     		



  W  }                                  Q!A1a2rsB#3C4           !1Q   ? KOTH_yU%B ʩ*$U%H2JIUIlBeWd4U%A*4eTi ʩ*$^2THLu*CIUIPi ʩ*$U%H2JIUIPi ʩ*$U%A*CIUIlAR[!*4eTi ʩ*$U%A*4eT*CIR[!*CIUIPi ʩ-BeT*4eTARTHrQ>O~[5=?D=_뿷k8#[b}	},-1`łذŅłX/a/`,ذذذ_b}}	}}X/a/`łX/ao	}}	}1`,-,ذ׶뻏_z|~|srݳm8#YE  ( `H,X,
PEbEEbP ,@EjE5 P`H,X5_}OO~W 7K~@                                 ݯ}OO~                                                                            ./mvappsvr/docroot/db/images/close_icon2.jpg                                                        0000666 0000000 0000000 00000002411 12534142432 017775  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky     d   Adobe d                      	
            	 
 	u!" 1A2#	QBa$3Rqb%C&4r
5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyz m!1 "AQ2aqB#Rb3	$Cr4%ScD&5T6Ed'
sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz   ? n뽽zvn[';iv'\{kVVGpMS)j*j*k4}ջN{Hr͸K̟F.dy6IS\7u/ !"J[dɆ"Fu;GVS3YmIoǎd()Z'ETSAW=5DZamb=Ŵw+9k<+CݷټSZ<RI/
c%o q5,j<{{X$T8B& I>~ؽCNl]6uM?dn])W7.ѓ7f*UUER⚢e+s)ͬw\t)納ob%64kȒNh,A""G=\6;6r峉aFY1u#M
+pD&hFY{E/tmLkh&-KʹSfsd.+n.:eXc)% 3eYe!?B;K [yI%@^-m40569oۋͿm;ɦ-][̂	xAhbI|O`fRL                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/images/bg_dashboard_nav_active.jpg                                            0000666 0000000 0000000 00000001055 12534142432 022377  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky     P   Adobe d     		

					   C  h                                        aR"S!A            RQ   ? ݩ_J^tH͝CMyyMɵ+KΉbjWҗA7&S/:$;1knMB_J$;1knMJ^tHw|knMJ^tHwcהܛQO)}(*=)6)y!*=)rI[$+{DI[ 2jV@d&5ooP       2/8?N ^/                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/images/funnel_widget_icon.gif                                                 0000666 0000000 0000000 00000001610 12534142432 021425  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a2 &   Is-Ȣ5߻~ȧgl׷t@ػÓvbUㄸ@qӧcǚ֬ЁVYɸ[y5̜ϯГ|eT۵JÌϤe9逵<Z֮u۽u6RעWKY݀Μ{1ί罎ԴѤt.5ƝfܻzjgaｄάY^p/xC{::{:1                                                   !   ,    2 &  O2l-PP75UUbP-/R%2bO%UNN]]--ĤP2bA.a 7b78)	ΝO	AE.	47=XXX8.. ze]r	.37"(p_"A.)ErD(cA?[8~z"B4LTفEAt#9wӦJP82E5y(!Jw1MqH/H
RLhl+-6)(,ٰ4(^W!pE\pzDɔ-+(EpZ1"8LJed#Q9Ƈ
Rd	?PĀ$}}H3#Fp怚l 20А0/!fȑǌ)(;<zC/ ΰ h:P @ IpxNx
,0(㌲ ;                                                                                                                        ./mvappsvr/docroot/db/images/header_bg_slice.png                                                    0000666 0000000 0000000 00000001762 12534142432 020671  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         8   sRGB    gAMA  a    cHRM  z&         u0  `  :  pQ<   PLTE>>>???@@@AAABBBCCCDDDGGGIIIMMMSSSYYY^^^gggppp|||                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 m   tEXtSoftware Paint.NET v3.36%   @IDATWI  vo5iupG\SdD&V"f1QZ%# t    IENDB`              ./mvappsvr/docroot/db/images/button_pdf.gif                                                         0000666 0000000 0000000 00000000564 12534142432 017736  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    ef***暜껻ګêطɾ=?ǋⲲ!     ,        (_iHpF뾰I4}Hg,5}dh4*` 4(T"	xGY4\h-QC	3R~	 	~ 	Q   آHO		
H xXȰC aE++ ;                                                                                                                                            ./mvappsvr/docroot/db/images/ui-bg_gloss-wave_35_f6a828_500x100.png                                 0000666 0000000 0000000 00000007262 12534142432 023267  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR     d   p}  yIDATx[@ɱH֙$YVb&3̇qOlXC#bQ%h   y   u(   @A   
:  P  6  t    l   `(   @A   
:  P  6  t    l   `(   @A   
:  P  6u   pޡ  l   `(   c޿]I1)G!n${Ax5{2&w݋]˃5kVؤ=k39Ʀhkxcdgu51k~aIkYyLa+8-;3c:3k%;Ȋ):W\Zʧ3OQA_񗸺  SG   @A   
:  <Z:  gw   @A  ؀G{st|*;va&Rb]9]59H6)se{bv̑ފ]͉m6-۫ϐκH筭'^~=[Vբkr֟x<enY;Vźr>,U^N1et]L޲>2z+v5'yڝ_}uE+zW變uř6jKQ{km|
"s?b|dljv<Y/J.<~5?2JyOƊxn)Y9kr+Z/g4wfƙMS:Z&'e,zX{qdsֶ[]Q_&Vޒ:r~gd5]+iʝ66qe#t7د3>g}Tv粭GFޓħ]u=>fKvfTTgLnfCfڷڪll>grd͜?c8  󿳌ġjxx>oL^|5֌̘=-.+_QܙQYlklZ1Eyzr}+7o\^>q_?7^<Zau_!ZkQqV5֚jY^3cdctZcɴ[>J  g  6ॵ~8YR&+26bƚkl[c)eCKfHe[Bk~͎~<2E5hoxv8=qZ˷ϊ17Ѽff/gŜynœ?qEVx2ؒCk|YkXȳdYWlErX͛ՙSyu1F2kό/=ٜ{2ZÓWCd>21UZGtTG5ϙk  6  t  8;7m~MFYkVgρdײy	Q{Ư+bzg-Fku5$y>5hZ<3saݫ{6ZC\af΢X^_ˑWKdKTw*gKMqՋ\{Uj3/ٹr%g^{PW̉fCyy]m3qnگr_Ya#jYf_Ϝ3{/-Y8cGvmxtoombU֮,'5v,K)_ڻ `E~k#xMNx޲rA)r2bZo?Z  w,:cnz;Ε֟%UAxhLｽǕ	 ǿԎ3kUqߝ1FkC1ayA~kw Xxmv|,τsmWT?Jˏc`r_x 7Qp[koYV~*= (]W_ EwBʇXX\s՚}yw.	'U6 x.Cܺ?wԆqKoO+z{[zxAS,ɢ[o^ovGg  3ɯVtV~  ؀wp   i:    `-}َpF9x2eX3c;3!ϲ"Hֲ
2VdZ9lgof]{ݟ1TsPjV~uol*{Fik}]9ǳgyw%7w,z%yE7Ő_ԗGvHVTAӛѹJWbڽ[>ҿ{UR597s=kc>r   n  ؀_    `(   @A   
:  5  :  ?
   >r   >r   ~)  `x  5t  OKYHǲٟ=GpؓW֞g]oY{Q~yc/UMv"_^?ӍkzwWKSѽmxzoQU㋢\GYL`{w+z+_;  pS  5  :  <?  ]7Ə覹Mu}͇v2c,+m+~+ު\f<^yi1ZqD1fl֏|U[#XqHm]ZGchfoh#_3Z79=gD͞wecS/٦Ř|~K[^fG8;   qWFgߓq&/HE:\ܲc+Uו6*sjl:͵o̷%ci$gf糲򐱣4m%ّs4l~26|[]ïj/g+qE}+gٸkmKEݳe*6gSu2]Wm6kE  6  }__;o&9S_Y_œ2%'mJ]-VͯOWzMKO&嵹rl[xrZNX9b֗mTŧA+~͟oMWdHho5Ūu/>oI'ʃ7Yў8ۭ]g;^"hͯQ=s1e`Cy|!3qFv65/f%v_dw_L~#+dev݊z>+YwnnvϞjߌ3l}s9KUgU}q7>WzqGc⹚YX|su~;ΟdS6+{SYw+΃=q?l'?co~WDXYy]1WYAiVz*T݊`ev+   <#  /z]n/z*2]1yϺ(n-_h,e?Gv*kWϳ=y[5Mty-Q.2k"dbgr=YU*{3sX2{`eu/kG1TuWĔ,E=ckڋd*e݋zQE=E=k+ؗm.   \n[=    IENDB`                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/images/bg_header_bot.jpg                                                      0000666 0000000 0000000 00000011667 12534142432 020357  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C  C  q               
 -       aQ!1Ab"2Bq#                #            !Qqr2a   ? _ _4SM(CUZON= BO&gYq)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dND)dNE~/*'UG媉LH?~z&Q?~GnDDUODnw?` ?
TQ x | ?@#xٕ̨6e@q*PlʀfT28ٕ̨6e@q*PlʀfT28ٕ̨6e@q*PlʀfT28ٕ̨6e@q*PlʀfT28ٕ̨6e@q*PlʀfT28ٕ̨6e@q*PlʀfT28ٕ̨6e@q*PlʀfT28ٕ̨6e@q*PlʀfT28ٕ̨6e@q*PlʀfT28ٕ̨6e@q*PlʀfT28ٕ̨6e@q*PlʀfT28ٕ̨6e@q*PlʀfT28ٕ̨6e@q*PlʀfT28ٕ̨6e@q*PlʀfT	~?~mj&b lO~`k_ֺ_U˭kҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mҵY%ܝ+U]mB#t ?  )6E]L"MpxS&ȸk)d\5ɲ.
dw2l6E]L"MpxS&ȸk)d\5ɲ.
dw2l6E]L"MpxS&ȸk)d\5ɲ.
dw2l6E]L"MpxS&ȸk)d\5ɲ.
dw2l6E]L"MpxS&ȸk)d\5ɲ.
dw2l6E]L"MpxS&ȸk)d\5ɲ.
dw2l6E]L"MpxS&ȸk)d\5ɲ.
dw2l6E]L"MpxS&ȸk)d\5ɲ.
dw2l6E]L"MpxS&ȸk)d\5ɲ.
dw2l6E]L"MpxS&ȸk)d\5ɲ.
dw2l6E]L"MpxS&ȸk)d\5ɲ.
dw2l6E]L"MpxS&ȸk)d\5ɲ.
dw2l6E]L"MpxS&ȸk)d\5ɲ.
dw2l6E]L"MpxS&ȸk)d\5ɲ.
dw2lz#Y#z	sXiKH\>Gh;G5=}4%cvA.kM#z	sXiKH\>Gh;G5=}4%cvA.kM#z	sXiKH\>Gh;G5=}4%cvA.kM#z	sXiKH\>Gh;G5=}4%cvA.kM#z	sXiKH\>Gh;G5=}4%cvA.kM#z	sXiKH\>Gh;G5=}4%cvA.kM#z	sXiKH\>Gh;G5=}4%cvA.kM#z	sXiKH\>Gh;G5=}4%cvA.kM#z	sXiKH\>Gh;G5=}4%cvA.kM#z	sXiKH\>Gh;G5=}4%cvA.kM#z	sXiKH\>Gh;G5=}4%cvA.kM#z	sXiKH\>Gh;G5=}4%cvA.kM#z	sXiKH\>Gh;G5=}4%cvA.kM#z	sXiKH\>Gh;G5=}4%cvA.k]&M`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d`6M6d@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/images/bg_dashboard_list_over.jpg                                             0000666 0000000 0000000 00000000437 12534142432 022271  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C  C                     	                                	
                    ?                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/images/3-column-layout.png                                                    0000666 0000000 0000000 00000005451 12534142432 020561  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR   `   `   F
   sRGB    gAMA  a    cHRM  z&         u0  `  :  pQ<   PLTE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         bz   tEXtSoftware Paint.NET v3.36%  wIDAThCZZb7ݪku^@jQy\L2aÎ[&sSoe\Z`|[4ݤY-WyTq:94ϨYOt_7d\L^FzXfܛw?~[FzMg|ۣyoܼIt:m^/9Nmrzć`w<?O^	1(@1>08{A3a *: i|HAT$D7ʉQ/2_F8]|0~pp{5Lw27AZCK5Ob0Ft+z:1`~霟w_	~ N_Dkoŧ`󳇧EM{kotpx8l0oydX1W%AJM:wQE֠Ȣ5D.r	D1,]",s:tT.sc&5U_$~CWޅ5t xLYBEG##2+WԪ:nJFƋHHk*ǀ=2i\@e`&ÀH~#sh8*
FD2̴1<o	5*5} O\'M4U*dk7yH(Xĳcd	%ֳi&`y1T2<tJقAt"-7zDDE%`6P)hȥqT$wSE=늊dF6tU'GrPEDsP2%=&L/Y]}ʣR*:NEѩɒE@r@ٶ%^@㩛}B"r]4Yusdd8zׄ2$Yg]Fd59U7u:;TQU#ZWܒ|ɨ(@	Bm΄rid-ie)*	e=``똴^	I}:4f	&oj\iĆv&3ᦥEҩŝR&i(mI$坝" i}/J3@zPڀءT!) HG.hYA"y]jOd@`l05Z۵UFtiR	T7
/v(]ki%OF/pWY͂u}H1)\jh5'TqSRzMi8lHvN4:s~X\z!4fo$(#/	+4^ M =y%KF(l #{,qgM׬e"mMu'x,JX׶eApfYMAHFyL-/rje}5)R'1/g#1 ]k	(],Qѽ"1@l<UEqK(oHmKj:ݣ:$RE|CTW8y®c2g믾Up^_޺fdr$wekv#~}}8/b{w  @TMEb@a0ZY8Kb.oi2$paE:"">
В@Gs%VJ XÊWĿwFADT.*֔{h P!ݱa P	ph?SӢ0ǀLxESՌ³	zHp~@zk&C S|K[ N|yLCGب|xp/ ֣{WX k|QeP wý6J[{?GF'?{nWU,?.PY    IENDB`                                                                                                                                                                                                                       ./mvappsvr/docroot/db/images/led_widget_icon.jpg                                                    0000666 0000000 0000000 00000001170 12534142432 020716  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 

		"""""""""" C             !      !!!   !!!!!!!!"""""""""""""""   2                  .  	         !1Q"ABTa              $          !a"#1Ac   ? $vV]"_S@S5$;dޙM"~@v;>6|gqL2\w]\[l+t~yI95/ʸ5g1*3({[+;PM["yEtp}WmNo܎u5XwLRdک(s~krH9N3qz@~DTm!E &C!&}րg]֘E aL4Ben7^c(ΡT4Nр= `h                                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/images/graphic_withselected_up.gif                                            0000666 0000000 0000000 00000001577 12534142432 022464  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   젠pppyyyЖfff                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   !   ,       \ (A  dР
2l Aȱ#E , pI:Z|РIl	|) ;mFyrNFLJP S ;                                                                                                                                 ./mvappsvr/docroot/db/images/bg_slider_track.png                                                    0000666 0000000 0000000 00000000354 12534142432 020724  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR      	   s   gAMA  OX2   tEXtSoftware Adobe ImageReadyqe<   EPLTEVVVUUU___vvv䧧TTTuuurrrkkkyl   -IDATxbLIXAXP_O[Y  XbJU    IENDB`                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/images/close.png                                                              0000666 0000000 0000000 00000001474 12534142432 016717  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         (-S   tEXtSoftware Adobe ImageReadyqe<  PLTE񝖿\@lĹ}wܦycYNj^ܧxye\`TbTfRdLkazwcyy{U=nd[O]Y{pqeM3R4VKytR<pfc[}kj~Ǻ갬hXᩞP4xO>Y?us]VP᫠ZRopdV~vþhS:VLkU}`QiefU]Q볯xqzunipncf\gL퓎pkhV9~\PXL~_TYMޱ   tRNS 8Kg   IDATxbG EӼ ) &&bb`/N0f 	'DiJfT+f9l9JG("UҎ@Ԣ:0cT
VAr޵`` 	+ܸZ5嵼>eBLR f)Cgʚkgx.)ܷ   uXI    IENDB`                                                                                                                                                                                                    ./mvappsvr/docroot/db/images/bg_widget_header_teal.gif                                              0000666 0000000 0000000 00000001006 12534142432 022032  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    ɉăƆڪ̍ϕڪĂ仾À̏ɈȇЕƄʋń̍ˍĂ۪ԟǆԞɋŃϔȈѿĀÀ                                                                                    !     ,       @ 'dRh4"fDVWf2$ /y8e00/>\zyxww

!!!!" /^~AB	DHpE-haE-FybG$1I-O$8"L3YC#-3d͒Ylx"E!>^sEU93 ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/images/wbg.gif                                                                0000666 0000000 0000000 00000001544 12534142432 016350  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         !    ,     , A H ၃(H 
   3jȱǏ CIң(S\ɲ˗0cʜIL ;                                                                                                                                                            ./mvappsvr/docroot/db/images/mv-logo.png                                                            0000666 0000000 0000000 00000006236 12534142432 017173  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR      !   	   tEXtSoftware Adobe ImageReadyqe<  $iTXtXML:com.adobe.xmp     <?xpacket begin="﻿" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5.1 Macintosh" xmpMM:InstanceID="xmp.iid:32C87AE557C911E4BB5798526BC76546" xmpMM:DocumentID="xmp.did:32C87AE657C911E4BB5798526BC76546"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:32C87AE357C911E4BB5798526BC76546" stRef:documentID="xmp.did:32C87AE457C911E4BB5798526BC76546"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>/  	IDATx[q8=	D RHU
$V ?7=*t+0
B\%DI0R(`.3N_@|݋N;ǯ5WhK3|㿛T~tmXYͯ'dc/	GRwZ`FGZ	ZL9r1Y5b~_Ɂ-,(wHNʘǌe̢-nϑ[ؐ\p3{/r;j!-G{d5ru$HRw4~#pN>eZoaiϽM=8!(7Pa:A|_!gY6A*=.8+G5Wdfsִ/w΍fu6˘qrŊC{rR4s7w衿ʱ&HoTCwK1U:}Wڰ)Ge~&W'CR64wXQ@t޸&A9dsm%1nFUQiGӥz@YfM&`L۳j!0mCiT6qx
f}6S-Ys\>Bۘ^@NT"pf&5لId2L<P,j2~Z98$?-ǮAi/	(mQ>NY;.8mΝٞ܋&]Ψ؅2]XX$-Q8QfEs#0'dwsTrS*ZL,~kòGf!i&!jU3Kz(.Yn[g}PWfsЈ*;qG1[;p]?2K&e!+d\>qOAhc&YdiI~		\}V%{=*"h,IݿO9Iw`A-\Vku>cdNcb7@x:.]Ϥe0FkhW 7W>gW)Rpɗ c^qSn{$_rLH­ԵamOv疸6uzfS/6|b%\rk6i*r_Uc=.h[1:
ə%.>-bJ${K8^{ҦJ	CXi+.'SԕP=L@e)B+~u0X;ۆT6f}sd,(TytD!@Dv/߭sp+BӬg|SDw#A_s3&ME*>78|.T1\!qn8m,q1kF+؀$Tvf&ʱmHvޟ\w/P:T&|:ΜsjΞN'v7Z_M%a)`$³'!ΩRT'4c>(h%e9YJ#YApP^mZNUYٗ8LBS'-GtS
il)ni#%T9$I(کy~GhQT/F=֖m#D5sLd#S[U~aG@!8-xSp'C^%
ь8x.G}*^;S<M8U6ㆂahwsX'"1R]e֩bcĄ80Q;Cvq9$nbѬQk|W}Hh
่dpa眗h_К<-wQ3m~huG%aC@XN>.ZNrDJ#֢cGq(EL<@4P!W))ycd10G;;eQ5 ]#QG]HiI})(ZXDYab4"\)G4;!8-2G<>RǀVQ e	5?{Ρ8Zꍫ(Nri	ާl{kڅ$.e$MN:uc٤<sele9W͙dm	]pl2;?]	WPޙw^"K6mPLflΟWH<TS k''{ߢjtZ"c&LyaPN	G4.Jcg.:q89Z~ )[
F:hP9-q<1r! jbI~Z %uCNj+t @y\%k$Y2powfP&'},+zR^ҷ</ ezMӯp*    IENDB`                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/images/gantt_widget_icon.gif                                                  0000666 0000000 0000000 00000002472 12534142432 021262  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a2 &   f ^çx៰Ʀ쏫BwP1E췵־s|+ͱȜTӭ&0K΢Q{Ɲ :hKhʭ!uھ他ޥΤZUѯdk{ͳz޸cְמ@⧲,@Jϵּ#׳'ŭ˷cȯۺ桻                                                                                                                                                                                                                                                                                                                                                                           !   ,    2 &   yȣ*\Ȑ>"JÐECsh4)%EǓ˗.l< +rs%&pp	oYʴӦ
LD1(`µׯ^@!XՁaX˶[D@qV⽋waրCÇ-lᡷ._|4HLr.ZpT80eM4iXl<c˞-8v&2wУC Jnl7Z"ӫ_Ͼ"Da"|_(fD"HƂ)BHUIV<0 5Ç 
5`&G ^E6!>ajQ"(Ra`H&4%
(pŔTR`H2!bPf|0!Ae1x)F'$TA!6*k$ BR,QdE WD*N¥bJU ¨ꩨj)ê*+g뭸뮼{_@ ;                                                                                                                                                                                                      ./mvappsvr/docroot/db/images/bg_h1_title.jpg                                                        0000666 0000000 0000000 00000000553 12534142432 017764  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C  C  ( 
                  	               T               	
  	            SU   ? v  
Trf6QAʦVl;<H>dJR                                                                                                                                                       ./mvappsvr/docroot/db/images/header_nav_links_left.jpg                                              0000666 0000000 0000000 00000003313 12534142432 022106  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C  C  7 '                
	 6  	        	!"1AaQRq
'Wc            	
 C       !	12a"AQRb#%3BVfqr   ? Ni
1ll5)/I̛ {HSu9I7 7ZBWZ}>M^'\Oo؍i*ENt@]LrGAzWLGb{1*=tA^~l՚0H.$@.zO]TTEC^8$NSRÅ18?B~ç/o{n DKE~v>vS%*̦H@O}ϧ/xvoѠ6G/Rp),qܷqMX9g{-şUVx먌edWGt&ݫy G}6ܫ7nj+Xc='GT_1P\⩠	:8K9ֻݭFW9ft*j5A1I#p\A䷘=DlSJc>!iO_s/L8a:ןY_jdu'y&&guǟ>c5ζ}|ۯE"+  a&&(v2J&)L
q^]L{ڙ2:9*L)tA@~~Vi=¡_ZZ52訪͍kƈ1ݕB*RG"dt}sc+wOGݸ嘴n1P|` +jQjd!>dT́%Hy΂N(9)'Pww.v[QzMj9~WWyM[k] ܨj\!HX58bI8j{?2'zڹ.I~pK&
b-v~d2;nFNڂݏ@䳥ad!HT^ؕS5glUkOHu]Ԩ;co[U"+fr,TUs'+Y6P̾Z_Ԛ_.T՜ڸ<"S& Dj's~x|	}92Z=/IqA1:L%P3;@l`f2dB*6Z
](
rɪvUEH1p'MGNvb=3r>=.r$򊊊*@`B`H$ˤ5:Vh۹{QT@qIE@ّԚKOFOdBg/O+#sU,[%(G4Dz~ȗlhB^F}iG3kҞW*eV*0`}yqO$@x72akC2 VRtdGv:ZrDUNQ2qʼEvP@u1q(eʘË=ׄ_SSSS                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/images/bg_dashboard_nav_teal.jpg                                              0000666 0000000 0000000 00000002502 12534142432 022047  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky     <   Adobe d     		



                                      Q!1atAqBC4d          1!AQq   ? ]-%]56xhţD%M%*lh,5ISgFaJ<Z4KRTѢXjQSgFaJ<Z4KRTѢXj*lh,5IUѢXj*<Z4KRTѢXjT6xhţD%M-%*lh,5ISgFaJ<Z4KRTѢXjT6x4hţD%M-%*lh,5ISgFaJ<Z4KRTѢXjT6xhţD%M-%*lh,56xhţD%M%T6xhţD%M-%*lh,5ISgFaJ<Z4KRTѢXjT6xhţD%M%*<Z4KRU=#_?JquOOn/;K<ǟkz/SI'ܩxO]OVa75Mvp'a7Ma7Nn{	}a7vpa7p'}a7Mvp	M{vpnp;	;	n&Nnp	=a7pn&Nn{	nW_&_yN	pk|Q [Te/>ߤǒ>jOy)LJ@J)%(d2P(J(J%P(U@zJ%2RJ%@d2P(J%@d@d2P)%(zJ%3⤾#{@_۞wr8c̨JUR~|<sq>^8C|p,bT詒EjKH   @          /          
  
      ϊ *#{                                                                                                                                                                                              ./mvappsvr/docroot/db/images/close_icon2.png                                                        0000666 0000000 0000000 00000000461 12534142432 020004  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         ex   tEXtSoftware Adobe ImageReadyqe<   -PLTEӫk o v {%G7?l m i v3&   tRNS ܘ   IDATxD	1	tZ 3E
*Ͷw(36j֬='ȩ[EJD4H3Ȥ=81ͥ炈=
XZ\1Zt;6|Wpwo9  7    IENDB`                                                                                                                                                                                                               ./mvappsvr/docroot/db/images/angle_widget_icon.jpg                                                  0000666 0000000 0000000 00000002366 12534142432 021250  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 

		"""""""""" C             !      !!!   !!!!!!!!"""""""""""""""  0 2                  ;        !1A"26Qa$rst34BDSq              .         !12A"QaBq4   ? 4!!!!!!!U91-͵ǌĭJ>@IHnVv,S 0ATjɏF +EcVP̮0۴Ae"[)!Հ5ӣ+|i}3"0|z;{kmC'{Ri*vӧ;ms_U>rRXm"SVPr dn%T6-WV!$%{g{<.YFnUeL14GefxSO;K~dBiui"c37"rC*`>9/.֥mAx{}ulvzjP6]We/XW{_$*uC柯oOMYAȱ1p]=iӏ_Yeyq꾿KJ*fߤkz\|-8{cb9) Z\q7>6qV\ޞLBr:5NJGZEC=3wJ\ozKRh8,~VU9g[lˬiuSUCQrE;V¾&S*en1bf]%ĸӪt%CD$SL8+=SlZg-O[ Ti nJKNf/^eTFJ}!]qGt߲c3nǏ2;)-+WFa̧M! 2m'>-V,[8)lԕq;SIT[┒sf6<&GfəkNɕӀ>ꖕ3s+CY!
cirt*u"YBBBBBBB                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/images/therm_widget_icon.jpg                                                  0000666 0000000 0000000 00000001221 12534142432 021266  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 

		"""""""""" C             !      !!!   !!!!!!!!"""""""""""""""  2                    0          !1Aq"$'257br                '          34qrQs   ? 4!Ju޼|͵m	8ګisn\mS'#޵,:P!D'9ҕ8[hf+˻*7RG`R\vxL]C3ύ+X;|XTϽP~<X9X=~j? f3լiXT,v[L!MX*$c p=cN:4@8c|Higfߐva̠, ?	1©Y;|c=S"Gk<*ZI$$;qOm
l<`Xj9m!9,㾠\
P                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/images/prev.gif                                                               0000666 0000000 0000000 00000000272 12534142432 016542  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   _᥿US,qf/dψ-SO{$j8`O$H/e0bDo>sJu3YXSW?hh4rhG(M!   ,       7'dih%p#$gHd`N6J) yp`S ;                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/images/button_delete.gif                                                      0000666 0000000 0000000 00000000472 12534142432 020425  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    ̝㴴  xwӼͳ  겡LMҿಲ!     ,        _i(l-3Ws9cD)JgB]d#2I9` ȒȌ˾tn {
}m
	}
`

l
! ;                                                                                                                                                                                                      ./mvappsvr/docroot/db/images/ui-icons_222222_256x240.png                                            0000666 0000000 0000000 00000010421 12534142432 021155  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         IJ   PLTE"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""]   NtRNS 2P."Tp@f` <BHJZ&0R,4j8D|($
blߝF>n~hhH  IDATx]b۶H儒-{iZK:glkn-tIqq?  E$dK>$>; PZ sVh!Sy0E0}H)-tkoܪKp\RϠ .E7
)*V;~PeBx*,=$zDؾ  JҸٻ 9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;"
i]dddddddd4y5 	Rb@(8CdŪݡ,@T@ibrq0alX!pe,	=4bW {
5Ƭhu~(Q^@3="b5XC@JCT76q_5@,r	šɩD)T|O@
ON-ՙ	[n@RXIm݋(F @?=0puL;g$@6η
K`>п @h գKVn"a"%l@.v$/U^G:#`` uTtK~ŋZ5T%kxk]\*Q,҇B44OXK|yg+_M(lоEO
 V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V
rh(]tI^}oצoS3	";ʙb}"߰	){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.} Q3.Nس} )>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa3	{oB&<L[Nc.öi=` Q@d
͆I.Il`\t[< Cit484-r+f쑱BCB MH	iy }>rxp|z;BǏ;burcK4tz1G~`ؚK|	̔>ۡO$~
Ao)0pzz
} i `;ADm8n:cfA@s7L  Z/..h8or?N93B~o_'` opO-:TG	L;7]`B%˛>*wTpM 0H}&t^1'Oqr'2P͡+z,tIW''|en=ǳgRm[NStK{҉mؓVt6ҲR`ζN&}B	U(r<qȁVyrrA**دzg6D#	YP`vs~(zMle|uQa*}+TRXc"+*NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4)`N狌.߭ ǣ)q	2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\	%,ߚ/pR~/^lnp7t0_0l4_b0MWΦjmбɎl
|reȫ`B-v.iRox}
)%#`ЂR5CA2sua sYy3=jaeoI7~.plA΃
`O)	^>Mz	+4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G FZ)O	!lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a v]m1+3 y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c-賟Lδ>]5.sYs1f0;'̨Yg銛{@9	`aC(=%bo2=n1	jBoS$n#m =i0ci9}oI	qT] W%.(؅]z\x
f"]o'u䫵tk{v;A C3ֆwwR_#X(xҋ/q%Whpk_IX'b/fXKi"#####QCLi2t5L 0
QiH2;yTOok;עٶ`RNg{zy! Kxm?A(vU~mL(`o/!nmX-{v [ dw=n「sdwzn(}Oy~m
?XU;, V'+V&JRZ]᧭:zC'-߆@y4u`Vۓwъ#zP@QN>2/{\o) W~a3xLw:_Q;=pּdt\'8~3SRP6y+XQ*޺r
̗ѭ*޺r
gl/\U^u$|mbVnw\V|D͊NVNy7 k<;/E}?E*ǳgO ~g/96f
cD}%g$QG7o) UJo,O@0߾Q(;bw:5	NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 
3
u	Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/images/ui-icons_ffd27a_256x240.png                                            0000666 0000000 0000000 00000010421 12534142432 021473  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         IJ   PLTEzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzY   NtRNS 2P."Tp@f` <BHJZ&0R,4j8D|($
blߝF>n~hhH  IDATx]b۶H儒-{iZK:glkn-tIqq?  E$dK>$>; PZ sVh!Sy0E0}H)-tkoܪKp\RϠ .E7
)*V;~PeBx*,=$zDؾ  JҸٻ 9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R HV!%;"
i]dddddddd4y5 	Rb@(8CdŪݡ,@T@ibrq0alX!pe,	=4bW {
5Ƭhu~(Q^@3="b5XC@JCT76q_5@,r	šɩD)T|O@
ON-ՙ	[n@RXIm݋(F @?=0puL;g$@6η
K`>п @h գKVn"a"%l@.v$/U^G:#`` uTtK~ŋZ5T%kxk]\*Q,҇B44OXK|yg+_M(lоEO
 V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V
rh(]tI^}oצoS3	";ʙb}"߰	){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.} Q3.Nس} )>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa3	{oB&<L[Nc.öi=` Q@d
͆I.Il`\t[< Cit484-r+f쑱BCB MH	iy }>rxp|z;BǏ;burcK4tz1G~`ؚK|	̔>ۡO$~
Ao)0pzz
} i `;ADm8n:cfA@s7L  Z/..h8or?N93B~o_'` opO-:TG	L;7]`B%˛>*wTpM 0H}&t^1'Oqr'2P͡+z,tIW''|en=ǳgRm[NStK{҉mؓVt6ҲR`ζN&}B	U(r<qȁVyrrA**دzg6D#	YP`vs~(zMle|uQa*}+TRXc"+*NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4)`N狌.߭ ǣ)q	2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\	%,ߚ/pR~/^lnp7t0_0l4_b0MWΦjmбɎl
|reȫ`B-v.iRox}
)%#`ЂR5CA2sua sYy3=jaeoI7~.plA΃
`O)	^>Mz	+4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G FZ)O	!lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a v]m1+3 y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c-賟Lδ>]5.sYs1f0;'̨Yg銛{@9	`aC(=%bo2=n1	jBoS$n#m =i0ci9}oI	qT] W%.(؅]z\x
f"]o'u䫵tk{v;A C3ֆwwR_#X(xҋ/q%Whpk_IX'b/fXKi"#####QCLi2t5L 0
QiH2;yTOok;עٶ`RNg{zy! Kxm?A(vU~mL(`o/!nmX-{v [ dw=n「sdwzn(}Oy~m
?XU;, V'+V&JRZ]᧭:zC'-߆@y4u`Vۓwъ#zP@QN>2/{\o) W~a3xLw:_Q;=pּdt\'8~3SRP6y+XQ*޺r
̗ѭ*޺r
gl/\U^u$|mbVnw\V|D͊NVNy7 k<;/E}?E*ǳgO ~g/96f
cD}%g$QG7o) UJo,O@0߾Q(;bw:5	NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$ ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 
3
u	Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP    IENDB`                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/images/bg_top.jpg                                                             0000666 0000000 0000000 00000000466 12534142432 017060  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 		



           C                                                   < 
                                                                     ? TTtTTTz                                                                                                                                                                                                          ./mvappsvr/docroot/db/images/ui-bg_glass_100_f6f6f6_1x400.png                                       0000666 0000000 0000000 00000000150 12534142432 022273  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR        oX
   /IDAT8Ǳ  "" dkf$ $۪- <
+P    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/images/bullet.gif                                                             0000666 0000000 0000000 00000000076 12534142432 017057  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    ~~~}}}!  ,       gᛆ$  ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/images/bg_widget_header_sepia.gif                                             0000666 0000000 0000000 00000001635 12534142432 022216  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    ĸǽ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ,        H(\ȰÇHHŋhȱǏIɓ#\ɲ˗+ȜI͛3	ɳϟ;JѣC(]ʴӧKHJիXj
ׯ`ÊKٳhӪ]˶۷p ;                                                                                                   ./mvappsvr/docroot/db/images/background_wizardtabactive.gif                                         0000666 0000000 0000000 00000001537 12534142432 023155  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    #(`c8=%)EI# UX/3hk!     ,       `!Rfj˾nrMvz&Р`Ȥrl:ШtJZXb T(xL.zn\\4	i}		&		ƾŸ	  	   
H*\ȰÇ#J$  2jȱǏ CIɓ(S\?bʜI͛8sɳϟ@
Z (]ʴӧPJJիXj):Rc˪=6-۷n㢝ۖ.\r꽻7/߿~ܗ߯ǐ#KL˘3k̹g*@ӨS^ͺװc˞MmԊ`Nȓ+_μwسkνËO`C˟OϿ ( }p@ D܂6F(Vhf:`{($h(,0((8<@)DiH&4PF)TViXf\vUdihlp)tֹ|矀*蠄j衈&袁F*餔Vj饘f馜v駠zjꩨꪬ꫰*무j뭭 ;                                                                                                                                                                 ./mvappsvr/docroot/db/images/bg_dashboard_nav_ocean_hover.jpg                                       0000666 0000000 0000000 00000000502 12534142432 023410  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky        Adobe d     %%/$$/,$##$,:22222:C======CCCCCCCCCCCCCCCCCCCCCCCCCCCCC$$3$$3B3))3BCB>2>BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC   
"  T                                                              ? 3k:# _                                                                                                                                                                                              ./mvappsvr/docroot/db/images/background_navbarleft.gif                                              0000666 0000000 0000000 00000000361 12534142432 022110  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    KKK{{{蓓oooWWWķ@@@JJJttt\\\???                                       !     ,       n$d9Bhp6tm|3p\l:Шt*$ id\. Lom뇸{̬G
zn}~uul$~[|g\X! ;                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/images/background_maincontent.gif                                             0000666 0000000 0000000 00000005241 12534142432 022305  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a q   !     ,     q  '$K5lp,tmx|pH,Ȥrl:ШtJZجWY 88<$zn|N~c#  a 
H[ ƚHHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@pH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݷ<A\߿LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^]b˞M۸sͻNȓ+_μУKNسkνg ӫ_Ͼ˟OϿ (h&6F(V(!Ր@v ($h(,0(4h8<@)DiH&J
@BD)TViXf\v`)dihlp)tix|矀$`衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무jx0+k&6F+Vkfv+k覫rb +k ,l'7G,Wlgw û `(,0,4l8<@-DmH'L7PG-TWm\\w`-dmhlp-tmx|߀.n'7G.WngwA n騧ꬷ.n/o'7G/ԛ>zgw/o觯>/o  HL:'H
Z̠7z~؀GH(L
W0gH8̡w@H"HL&:PI)ZX̢.z`H2h4c6pH:x̣k IBL"F:򑐌$'IJZ̤&7Nz(GIRL*WV}|,gIZ̥.w^0ILaƲL2f:Ќ4IjZ3Ǽ6nz8IrH:v<Iz̧>~ @JЂMBІ:D'JъZ:=Ёz HGJҒ(MJWҖ0LgJӚ8ͩNwӞ@PJԢHMRԦ~NTJժZXͪVծz`XVhMZֶp\J׺Ԭvͫ^׾`KX⵰Mb:dIXͬf7zhGKҚMjWֺlgKͭnwpKr:ЍtKZͮvzxKMz|Kͯ~ LN;np#L
[ΰ7{ ;(NW01K,8αwХ1L"HNc!3PL*[u2.{`1hNf"pL:9o>lvMBЈNF;ѐ'MJ[Ҙδ7N{ӠGMRԨNWVհgMZָεw^MbNf;ЎMj[ζn{MrNvMzη~ NO;'N[ϸ7{ GN(OW0gN8Ϲw@ЇNHO;PԧN[XϺַ{`NhOpNxϻOO;񐏼'O[ϼ7{GOқOWֻgOϽwOO;ЏO[Ͼ{OOOϿ 8Xx
؀8X ;                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/images/ui-bg_glass_65_ffffff_1x400.png                                        0000666 0000000 0000000 00000000151 12534142432 022446  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR        oX
   0IDAT8!  +	̼JHR)[lk=O_(<`H"    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/images/bg_slider_handle.png                                                   0000666 0000000 0000000 00000000746 12534142432 021060  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR   
      ^   tEXtSoftware Adobe ImageReadyqe<  IDATxtN@=G9H@I ! OADCGCI{ 	:((@$EeIPRx3+_BRey~<ˋ(]cX7Jad|svx4wK_A:R!\?\@TFv%$E}FX]Ra024[\ךI'aEvl
RLPd-(@CE@iLԙ ɂyI_>72Pa@D@p=Ϗ/u
e;678Vժ0eshnqTFslT`*tɅ䏮'eV!o1?
0 ͸]~3    IENDB`                          ./mvappsvr/docroot/db/images/map_widget_icon.jpg                                                    0000666 0000000 0000000 00000003033 12534142432 020727  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 	



 C
  / 2               	 2        !"1$23AQaBRbq               0        !Qq1Aa"2B#   ? 戍"4Dh*VL
ܨk(s_Hn<7g;	֢:{zaN8tJzHB+ޥdT~Eu6I`.hXqC<|܍wd^w[ѹt'?M5%0ݮᵶD3_;
=[.uU̙ 7~MA*NT>v$-nӺdј;N; ^gS;jMNN*q"4XԢRF ?}Eh"jAD_*Ͼq6" 0O(J?ʥ8G [|.ݟUkSQOJ+f+s>)3@_1lx<aݮ;NZiڙ.$(9gW&zmͫX-4Α@y2D;C@;\`sζǬxS^A:qJNtړq8*1^h*@9W6aC$r29O?EMw2<UQj;)R\S!I[Jw$c	,q k߉q9iQzP
_@Rߔ'mm恧ەXI:ZGgbEs/GOV6pe:!>^;8WkxrGn=g[]5(WŖ\CRrT҂8Q'3=DZkILl2Fϊ%sսZrİXEQi~֌a'v}1w"t'뗲؍4:=P-a:/W79ig s cxj[gnV̖!7T6Dxs@rQFJH:dᗹĮ}Ob3uקU4iUuf5,KU'vPU"0Nżچlc;Z=vܷȤ˜ E[3cPuFGPWRꪤVĊ!ҜnuW@_j,/kޗ\q(jdلǴ}B,ĨK56Dq G*JV682lO`i >\njf-Z,W!ª6Ze#u#:5kE`kbJRgu@rqJWu5̔QԄh#DF                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/images/html_widget_icon.png                                                   0000666 0000000 0000000 00000157354 12534142432 021142  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR   2   2   ?   sBIT|d   	pHYs    ~   tEXtSoftware Adobe FireworksON  prVWxZ{TI]dЂeuiR냈9blNX߈h11nMQ%D)֣**CQ<|?_nhz?ffg^wwOXPsN'?st8$'HNtHIr%:HvM;vi7ί$'LdgvKd0]ž}K.,٫_kjjjtҎzСCь1Alۏ	<~=z<\ o6ݻw\dڵkpU\^^^M|oΝ;pmuܸq)ݼyZ{ŋܹs@G#ZS}!)\"^ZSsRSSMuuu(4449S'^:-Zt:33aʕ᫯SN5{[srr4ǿ~:\|kj-Z%K ;;(im̽jO}o^^"ZFsKνOh~^+VӧcU/4?hS's%^١e*:uꓬ,{no OjPhۈ9TUqE$U)_~%+/4g*2uC g6cU໥ ABE&@g`L\ ʻ~P>qn/o11(ş8q"߿VZϟWJ/P-kߠSſh"6D $NnS, ]ν*CP+m& ԽS~FF9JJJ --MAmS0?G~3܏{U?`~>.sE!O<@9~43~F`4qpTTV+}G3'FVh$k.x#? @07TcNIIQ3vh1@ͨQ8u/ـjQ}c$)2dT态"B~l	1p3)/_Aaaa(>S9=3!,scK<bMRAq:T|].Ȅ16lp3m1?~S4&|sO+>Qޕs0*BG0E8DvU\ aXvͭ[Ν;s~.)H.fsWl6QquYظqږ;Ho)OsލUexklF@b{p֩/__qm0̽dUz<<&16*F@stTtC0Ơ-~χ1ّmP_ߠj~C(_lǞu
qelG
a@71Ԩ5|T3ŠGy\`rr2ϡd>P>=Ӂ/{ʚ̻P(3U4lQ.(AI8(?{Sko-o  {DCMRj柎~J1?b6T^09RG5HU6oرt
ʜ)p	8v=z(kmgo}!gDSU=ylo꿮 N%CIV[<ثW\\<QkCAGp+?)K7PFwX&\'OR---mso0('F~s[43ƽ ^6F]
{8j/R13lMa&9`|'=4޿и?xwngw =J{K~wo4V^^&`4G,	3idץh2u0%Yg	.Ö-[>mC힕jMM#ZC}!(7њpM(FhkO{;`aEǢ\cl#IJSxč@o3	ƅ!p^ ?o6lZׯ(WyȱN\)iݡx/|l1y}Aw¸zޏ~WR{KpJkylڴd3g@UU7Dr؜a'wޅJX3,a08{Hj>h3a<&9g;lٲQ偾HvÇu>4߃5Fqăޅt1!ڃT~3+1V{hQQf\%[`2v8Y}>###9xA~_]]׌'it΋(^<y4^rW=c܎7kW1FY`N[$9ezӓٳgn-wIr"#=y8P>9soExճkǐc0GMA;-~#)|$I}[믿NɣxJ+sB<h?^Y#`A+N@Jfxw0~fo%}8\ZƟM)))=Zˣ`d9gۜ:Vm]mȆ^Y)%t߼m!aFWg035x@k			QXX8d'Xb<%7xX1n G}M	ᯉ<O:%9|}GDS?9!&&Z{YH2SMB\()gN	<ىp :uY MF_L<~49|
fAYE%&kZ   HmkBF                                                                   )3  6mkTSx}[wƒ.&;#Y%{yunGQ%ŔMP/$lM[dOUu74  "d$޴nmΘtMwf}ϟuw;}m>98жwuswOϡWgvoZ=36k6.ӹv19<>M(C	Jϵ?ላI}2Kӕwָ1i#y MZv=MK;[oh{/סiѷN6ltIk
]mwX+}>1126id7\
m[ہ7't[O}bf̉,̞q+	nq&66fceFǰ<c4<Oc~'˷@!9g #](paBӬe@S,4%I( t{-Vm9-s瀾䀺 f W7J,^Z~ImF[Eօem;P }9ؼL`3,RYϊuKPzDHI,5e c(R&])̖u\8N/8qv*:KjC6n7hTc0y&4* pn#3{t3]p.itΠ4:Fg1h84; W`[+ϢaFqlag DcD9=#!d2lـ56fpvP ^}el$:Pìesi0f>0_p0wA.(17%i-
9;@ְr;nۚΐ$B@$s\sFn,G[ƨ0v
]1>Cn Br+̒d d@P-F~X̖-"N7
$TK *)[U>IA/3h.V;\\}1zFN]1M1|̕C=
,u|/
i%KxDL"_\l+8fm;+eKDN)dfld`簜O26$$s7e~/xd3f'H;	 S Ws<fF#2i$:,{\3t|
(dA"[Zfld:"Р$'ZBah9-2#@0$UF?([fF&C\(E&bJqNq43p0 U,DHrs9v̜ 3PG҅r@þ[-%gX2. QKlOx
P"N0V_nkGX#E 6j<!+ ILDD&}ODϕrSwf]7]~DtB.h(W̌Aԓ)r/M΢7Qn4FOGT@MC̘8X'O.Qx<"o҅ՠ|=-oJ{[aC v^`<"ㇾLsAtU]sΚ(ʬΒXKcC▄'dqoFaLy<Tfb,݃[\",dB	ΌNx6(m3$ikіdV2(n]TD]=OLԹп2SR\Lkƙ֥Ttp8#=IМ-?G|*K*}.3@'ͤp8aLm8eym|j}|#FwcޠOiP/OA|(@2WhC:ݦuŇIDu|Ohq%bG =.K5ٴb0qYέA[oA#*<*b}n>kK/ 'vp1
Cf38^*YLxŐm:\}TdsKTJo{oXفВK7$X}f}`@ɬ~	]G2?4bn^ЎB4CU@SqL-~CmΛ|Üw2"֚qwbG N}yJY+;]0(2*0ޓR<q!dXי
HI@TL%ns=͸v.in{Z=>Eɔ|SW'ķE}Mk0Ki' 1;6_wNȚ=|JPrnwr#n|O<R9ļM숧߈;;	KkI!>g\AwKm64is>d#Idlqm.'|(8O%攍'-ub,s̂u]P*_ȲzBc~ѣ$HhSo	ɮRpң̫'ͬ`PZxas9fA+d04˗B[F|~#PZu]rәVFnL\b<e|' eֿd2S"4eBE?)MRZ!FI`"_WdQN=6E}tۻNtn@}R?Gj>OS00:L;L:{XߦC}Vvqh50⣊ȃC!R!-<ޥ>Þe$Rd",{e1J^BᏢzD~dT	_?M_ꬷUo!2
2\o5Xo5*[yo_eg:tYe|E0W{ɯH?m~ꓮ%bH%%llTYr
	6\oYo*[C3eez.`=*{mO!H!6rr4tVKܶfžٱoJY\ XIHr-ҕ˟6OR4\LV%":.=׾R~s-)o7""nưiRHuiczԫz5eVѡӌr=g+n({J%ŮQu.S )R  S{gIS,eݚ>4uMv*.a
hž4VbQ ¦|f&Ѫ~ɡf2Oix(v]Vn*x78.=SHUmVT7Z!Jmvư6Fᩣ1*Ah쬇WUP	>Y|3ZrZaӓI?7M'Q\ru_5bbgJN:ɏ}+{fJJ`
$,菒H)sn5dərUӫq8KN%Ogj5ʥ2k]U[P,Bmǐ2+$	K!`4Gɮ\MV=٣lgFsn	
1l֍ac;k)Bxc_7҄<yaCQ.]J(6PD\e3?7E]8,DOiH?ۿYZh2iɈE#s\gUЈZKf$KV sED:ۻN$glL0R&3ڍ'qn&{=ސwBɿipȑ#?͐~9ZĪԵt\\vZOOaK)uzNoHNxW%waآ'{]k/aT6TGaXM
k9ޒZ Gl<^F<9rsrYt[2j5(qG~--< ;Bp]Uҙ.%Q+TgFj.aRzԒD$@Of
~-{:nH\Tx-#R%V>s#<S,rfqY8ܚGسC:Q|F{+%YI7]fL	r;hg+)!>0vsKs2[>VعVs;?Jv+11S1tC?jv|{eb芡Cdh~<%mig?46+ή8Gٛ%vGW(9ZD>"]1chb芡+~нd;;Ww;Wn<էEsׁ̻̻+v~<o]U]C?n.yW1:0tyW1tЏyWq:pvyWqvُϼ8z8ʼ8fU]eU]1Cf6Ќ/;Jfl)eK{BSwk,6c흕==yrʇfcӴ IV{=!O1Y)*{"9eI̡FaYC|K[R\0`%qǇX'Ze?DOԐصD'5S`|s"mV]1tUbC?61ۦ`oVW}rgUfa9MdLXڤKay ~"G7{ rVۣ5hkP}{]!odOx'm͓8h{F9GyO4ՈJHflm(e#uͶb^{Ƈa+d+d M	 Ki07$(4E0ܔؕՔS-jzd7к׆\LǨ%.{[PD_miaR*93i%[i[iAZ`L
 FL|Wɞ4Oͼq*@WǷ_!@K]HV6`%ui@< y`a 'ޓG2:}Hq"OGms>q7ho-GHnrywـrw+_qjL!ӳ>NiϾxcH2LU^(PuǗJ$Y}8i㴆T{@#n/X̾f	Z3(J(oF1tZ+Xb銥׏_kX+WqJLqbFYpe(+O}3.BM^3ϙ(FZ|g\бa\RFp-q16Z;iS7.]d;	9į'= t7;|߳dϬ^ G"-[S^_u	\UW%E{ѦsnrQJxK(eHye<S@	#^?Fe/3="v)lG3M)lfYi>34ox?q˯x4T3c8ƠKh9<6͡FFsdlR;/l9)3h_fs7:j߆sJ2xPИ,£Z8˴e` ۢtݢ:Ǥ#47U#FtwjP${" {=KUz1rl ?/zE̮2>C^ipWL"!hvZ8:!ѣ= zkgb_gE&xzA8dAz^l/̝WKn5i49)iSM[گ>HA~wIWJI
PN$&yOzZ/vZyfY[Myȶ/qkq{]QewsAYZXIzXO[Uzu=yIk7Xv]Z:aNjGi>\5C_Gu}$G7Y~rH$?Q^_`J%Mnu)sEuw؞1S":>k*o>Θ<%릵:xt8*<+{sų.3</DN+Y+C,BB܊jYkؐo=V<ߦQx>1]=j3qr_?>.ο>=|.₼p+(K>6#l(vwˏp<z%GC"raIO WY4sk2>~$IЬn3Ciztic(_6g,ZٍO{zNӤ|,g1^:&[cbT{LgQp-4, 494g-IdpY+a?G.tᤷ3kv@I}kϤ{{}>"}Zo.9n:qL683&~Yۜf28kޱ?kМ7wzpLCmB+z0:dw{9`v}Ԓ=ƪ/1uFҷ6m\l	xQ}Kw5ܺ	!n~q{ /"`=B+vq_=Mm.{ؘ.~`p90hqHA[JugGTA.g欽C}{	m1F6 >	mwq;zXQ(<:tIoYOhDzxDl'9TQ@@?K r)!iH&ݱ!OLhh1p;}w=(ߛ}q')ryI=}ۥFt.]}H]E%K{]d4$Ḗ=sY4v뎇GᎳeM<'2zԫ׮@5ءn)dԧFa۷w'gXq=2th!o=ovJ~7:qO^{niNF6q4<_ +hs9黧x.Nɭ)o~ ]`ny(C"pp`8`!k@qcjb%[GG#MZ䒆aӢNif_V!pZcj:3e79bc1
 iXH6n&w2X|INOb|Na\xsbf,g3flBAgac3lJl|?`Xfat1x<O`4&nN\od`]kt {Z(paBӬe@S,4%I!PlBb%.F!C"}=L`0o*4{zk%+imqh 2Êem;P }9ؼL`3,RYϊuKPzDHI,5e c(R&]cp^(qTu$B5Pm.};17hTc0y&4*܀"_YW4CyNc%-Π4:Fg=f(>g hإ|D3j .hNd!!d3l6n4\E0fScK%hR4Js5x,4|..FgĈp_ֶ(`94\m+nvqI"D2=5ljqe
c3r+,,Iv +?AOTh  2l0bl!FprQ ZPI
i2Šblw#*QSDL:FxjsP|?bK@|i7%W"&~/.R6z3kd綝啲%"GXgIHvˉDN Cn@Ox>Wx#Hn-Y旈?̊K6cxĹ0c0E
pp5cl41+ IfJҡ:5A0̇1MrK/efJF(^
Jre*r*3@Re18>OmFhPl2EϋPd"YU:5 HI.x<N3`SPhz~+Ź2KRf4Åad?jiIOJD+R?anQ-Q	ɨ]yNb
%"2c6v|-2vbSwf]7]~Dt}']QX'S^Eoo>i/;3ܧ/&`ə1qN91-\4<xD><ëA_5#{7[dߔ<>Æ yE}!4?Vӯ M:䪮،t[p5k+*B;Kb-[[ƽ10jFBSm;D#pw"lr4	%83:QܣϐE[BIRZɈ}vQuZKZ1%exy$13+K:v1ppFz9[<TU>T\fOIpØ*p\[5>
PG@9Vވ>͓ ^gyfStBF B+Ln:yC$":Z ͏qPhx@ŸZ~wRlZbm1 έ `ZDMgY]e>?%Ϟ04j6ЉcQʡK)gț\ikіi7?hOh
N1TJ+MJ6Оx-xC%}`Q_p$Ca*;8OC;z
+{f. UMw1T9ogsh8[kjEM85Ti.Y+;]0(2*0ޓR<q!dXי
HI@TL%ns=͸v.in{Z=>Eɔ|2|6}tQ>-)\cM3& 1;6_wNȚ=|JPrnwr#n|O<R9ļM숧߈;;	KkI!>g\AwKm64isxL&bJ/T@f&_i:
VR~bNT2lNٸ"<ZN^Zwy 2ɱ,^N,'4=J=F_)Oa?'=ʼ
vc%"?^$a؜mE΁4Y
e01=VVCc6|5ty!tfѰWh`$>Cil^mw=sͺ/Yv{TqH8Mj&G|AOmS0V`C=;Qqa(*YF@;DwMdspw&:&nNx&"iBMbirfG3f?k>aG7\:9ws!:oL!|N:Y&yU"C`{,翎Q#Z#NbirUgUzLouأxC<DL/[[s[{|7?fY8yDllV}Y/lQ:aUur~~*O+lxђԒr}6b}6U{ǟ([Ӕzkzk\V=pw-;(+s VPm軮BOg۶}mی}bط^u~`\<%yR%%d*gvI>"oH',崤\Y߬ߊۋлafҍދTǜ8\zGGXSj
/;(+s692(^b/Iǜ8f.v5KgvdN8UpT?Kd)smTq	edU  @+AC(633a^VK5}Jcg.GU[˺ɪ*ڎ)6M	oR;cXZC#^Bha=<u4_%*1x>6g>KToFQcPN+lzr3IU$KַZLL7	_'qoe6uLi\]qU􂃄%CQRV)eN׭,9Sjz4gɐSFTfjKo]"YP[icHpkoGِq0dW
Q3eQn9QS]60Mȍص!wiB!(uW%\(".Mҟ".[CpP"'փ4$ٍ߬qW-l4d"DC9*hDT-Mk%Y| "{]5iA;LÜqn/݈R>#W'_\zU%tu%u轖Ka9#9]=tuxF[d/|ipOSosYa#[R76䈍gȑG4w_nqN.8ːbkWb2U+GO=ѢRB%߀ȯW".9[:ӥd#jH%AJ@Z۞d艡,Z; :2Kw*B~UgngzeںN_YMGʆӋ5:mr/~aNb/}lXcZ;W(y#dt?İbNCWڅkC?8b芡+~C񔴥V8۬8슳%gorWGGGW]qhpt+3BygT\eU\Te2*v^v2*vqwCCWwCWl]U]C?N^|]U]g?NΞ?u*芣'GϛyW1:0tyW1tpjlDB3hC(XA/1_fyM͆\یwVfxX)EMӒz$Y݂6E<md쉼"n5'1We'K.mQK){syø.XyƖ/*'*c՞he=QCb}L֔O#1C[PI0Y1tCWc|ʧ(_nzY"3_ɵW1R:6	1aiv,qo ݀ :Ym?-G@5`|uE|	뇒?᝞P۷oO4Ooq^=lV#n(!%L<בZ7*syI.Z.LzY4$ ,O9KBpߐtl ~HCrSFbWZdTS^O̞q@R_/sUT3mmAG}mGI? П̤nm}jR/3)h\1y\E'{r$?eD6~bHv8]~ZKWs-u!YـGץ%5܆1h{OIr$O!z<r~aj&~ߠ1"ɺye|}#gǩ1O;>.r׏UJ?j⭎i#43U{@a_*sg14 jD{v2S컽Pb1N1${kϠ+357C!CkimXb銥+^?~``\R+1eQv<':>ϸ6y<giqAǆqIINԳ:H86kM޸t$?k4 }6>Vc{"knMy}}&XrW]t][EbS̹^WG+{-]7{"ORUO/4'xZdNFd9{1ǿͦXO͠67exӼ}ka/P|v/.ukE<X|4պrfzvCI,˧̸?# ([|)1m@Y@c*;j,V9Ko9f wlbcTީAY^쉀//"W)/Wʱ7Pz`i1Ixy_i|vN3hSiGwD虯aТ?5 ␝oy0w_:»'/-פHJT嬮O=7=koijģ M
	#&Y_\)5$)@9qȣɣz?9i^cؽke#l6"۾eǥj}pSKtEYekaQ&a="ClU}K%`%aviY넽:1g5@sM״}UU[8d!y`D{Y|7H+49<	!oc{ZRZǄN9CEގ;FkD58cp,|?_Q>|:̯|+/[w8|.09sf443f4D
9Zkr+gaCXp~bGpt}3ekU|W\8J\;G)"'L#H>/<یd:.?!Nȅ%=cl_gOѿI.Wk(su&CXiuб3QТ|!T؜KkU{7d7>i)k:QL\xla@Q1!d#Fȳ,ӄַ$~Óe-3vw]3oMtzaOQ'SuOSKe:^6	wƤo!>+;`3Lg;v'`xsrr侹{׃cop=hZ18lՃPtpY̅&{gۻ ץvprUa^7	c벍٥o;mڸp1?juC1l^Ev{1Vn⾮{6t]]Ou1]u/r0`&Baj79Pώ>]Y{.9h#9lc.m`A|j vӥͱPxt'n1@k( vOͧ:(~p$C69bp_E¶#Cл;AmNq1mDGnszh6C.^tmg'JgxZ8ɹe29-y#.6bǟ[v$)Ow<`,C#e{m {+Z~~n?yOϺcƛmbm~#XPo'.CR2ŏ/ߧ   mkBSx]N0 Æ	WM- 2*5X|DZ=fLc(F?
hҶBLrGpodgd/e>f
9]WA\\Lf[xilϣTs1H	QlHاEt(SAZ_Y X  
mkBT W                                                                    x흍8FSHI!)$FRHnwHYx3ꇤ saaaaxIǏ'U{o_ھgW9o'GW{>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O-92b?Tlk%?_21BsY5>:> c=1Owy^- ڶ,Xz usM#גU]>H_yYv!ۉ_miRus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, lgX #vQgBٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'- (W?	źvƔOʙRv[K?[A}?-wmՑ}<GcK1}uxLzަU00Pc[<>g\=c}Mggg	Ǆ-B^k_g?F? v0||؎=ǧHPgs/hؑIt~{n^}ZyD5XWvO)"c0vYZ|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8g ʱL{?00_k3>z_\S|<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu
l+6v<ïk7]/lc[`On}򚄫G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ1Gg{+ҏlw<=}GݽFƨ^)zIpGK ֜{{eG12ۭqiumf>.}~a?00[u+7Svq֭y΅
?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo	9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3
_[_*mtcmC>qSL<?<nѯn!>=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^UO7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU?0000000.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwxb)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-t ĒyNAgC	\NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`%Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=oG<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy	czA;w9zszWHVax3  %  mkBT                                                                     x	TU׽o״U1Q"%(hh1C!RM4s#cPшhQPfDD۲+zou'k]{ǽ6 6A*..nfyyiii7n8:(&&MyèݻwQ]]Mʪ.*ݹs'Se+;;Cnn			'aqm6k|͛7U(~zիW/SYYY]rҥgϞӧٍ{~¿f݅׵ԛQcEE>bTLPv erʭ˗/UvDAAQ'LO9Ɓ[nA֟ύJ_k״EEE 77O+RوSAQR;jNu6|Ni<RNՌ1 ˣ=ԪX
?4/?ǟ|ɒӧWܹv¶m۰yflذXv-n݊'OￇSw<&P'c<#gҥK|r,^˖-S_jOؿ>ݻ-ܹsDQlڴ	:Pw&s WuoX)u%t|1c񈈈%Kﾃٵ?Ǐױv0eX|ט:u>\a  VRR]Rrp4ܼ###śP=[}<yjP:tH={_s?ϙ rK}z0GM++'򒳳sXpˌIII:N3ߟ}ΝӾ^asџGݿV,}UVVcHЬY`ҤIHMMվ@Հ2d[`ݻw#**J;&Lڳ|PX+jT\Qku"--u6,ѣF}/S3gw 1b|Mʕ+cCͼ }54ƨ6zx\W{>l0Ok;vXwomGooo}O>`z>2sHOO׶ǘ:11&k?>uWӭ[7t]uWWW|s<<<{{=3ۧ~.~.P֝<t[.],)es[niM#;tPy鹁5k`˖-:GGG<pi!56kԝ9z׍nWέ
T,Gō(<sA^vv6kTMi3fctꫯQk{~6Bm!-
.#B.\<\)(Dٵsԟogl tѢEVĉZyy~n̚YԠF9N&`_sI;R',$!*!p<>W.բz9'\W			zU94c>oZTYXQ98.#8}XaTdگl꯸Kᾝ/SljF;5,{X^bkFlOۂm[+}ј=ӱ`K(R?O}nٳgmܸc4>|x	}Z|<M;0	#z}kOaR-)&B38v9fD覝8hF?1n9xyڮs*&&~kۦ.7~n|Fc0u jq&)cOctl	F_bbЄH|>`?{0r1:~]vY=e=fo}~O`UE9}*zϋë!GcX0	?	ǠxcxMDpGQ°+WZ=,ҷ9/GLȹ SVUWF/Syz,:ۋN>k^Ϗx'zMW^?gX`xANv.Z=fy}3wsxw*o!-~14pفkuSE^s<u	AnѴk0~۞ .>GrǰzLKKӾ{?{|ր5UOLAI]\d<H<ru \g/2\gw4vMm lό`/&#!!);%9EÆ-.Qoߙy9z3OG`u]\LKS6<\?loTt
qSHw&O{}c`kGݼ	zKo	-|}}K}> {xM\B_G]&CP/h;~ᰵS߹wzr6DGG[=sxxx6f>nN^1vEZ|:HGFs /莶^¸ʻ/lo0Z\+*4**qpTzpo75eggHz.k >z8hl/L[~Cws#^Gh룯Zॷg_~"""G;vh5fMu`ōRۺ_ώҹg/Dη}zǺNņ](.*j Q{AMor?ԟꀒb<=Ll8<-_n <r~˱r$<E+6 ?7SŔeʮݭG%,&&FMYczAy 1|lٹ=EU4vTORA0v*<;QeI=7hqpTp/7k>jlրٯm4{ofݻUy)XqFM^>p2~s1:dVBRTMLL~Pw'n|Ԁ_b QuaJK	ȼ+Q^VR7ɡ88v hԎ`G^=}A5QUua5661pT*Klv{= u}e{fPwl~LP/?z<ѻw|Z=kFG֌ԛzߊ|-1꽳8`88*mCCC+}Mh_^"=&ߐ0{	6QWGLڽ{ਸmܸQ??}b{P00ۇG@Qߴi|p){::ͬ_39AS'{s8RygժUV}<`tb	n_Ù{<}f Sw	}Կϛ7qpT'|ҿK.!oVĸq"Mŋc7oޜo߾|՟'%%Uש~
\o׀ynrOp/MΊ
&Mرc5gΜcׯ]_NazSV-\Fiwo<Tg#R><ڵk7EŏSN=vÇ_KII{UxE6V/߇o<pRRprr>t3fDEE]<qD11_Fs[ۅu9Ey`YqL;֨Q#AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA  $Z3  mkBT                                                                     x흍)q ĉ8D^>׻gI@XjjgiЃ`0`0?ϟ|:s eQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/D:3D&򈼹e^Hyi#/OGzϪ߯_~
:sMe#M3Y#=2QЙ[\s=E8}E>GȩTڲTg-}VfoSVwzV}./>~<Vrv@>!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-kdW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ:`0:8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV	U?)V>ғ)x|Yҁgi\yi^cUo*=!TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x)/OSyUo2e)Ve3'wgGg=J^`0
ľu kU,Ksؑ5nY,bXw{w&3QהNQev	]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fz<AǏߊg_ly=Uy3= [6_3]U_k]]ײ2;j->t|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz`0*\?W8GY:Dgcg<2+'W6qn؟{ru"w<Tk.\rnO>U쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP~n%hUG4(_sn|W}Tg&x^c,Fѭ+<#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3`0Q[	veO\k^8 ֔v<Zbz\Opbn$~}oz3јmKvU]^iNWA#x딫jtq:E=z%օq)CcYEqyRG-+u(K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_EбVq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7`0]kIu+eL]ւoA^;=GR? v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{<FVr2nlo؍ا|mo'qbӋr`eef6
0lzsA_x7췣*U}R%+C_	ڟ~I\Q~ky#_jo~DyU^`5pko?:ˮCw>?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR(	VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l?`0`0`{~i`oLy>uoi\qK|} 7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;<sy}ڛk}~|M'8CTo+[WUQr'\'tTYwz.D=W|~q=_ yMǏktbS=2|ұyN_}Oe摽ۏtLS6q`Cjf3#ܰ?z1H]\"W]O;2'@@~tG:{u7m1Q]PWV2Sz]ϥzs3]vxwҞ:ڗ>y`$jw  ymkBT 6                                                                    x횉m0]HI!)$FR?6c<lHٱdtC"+RJ)RJkJ߃L_SUn7ss~uU-Uyy9c/Juz?i>>>~ sm+vuՑνYu8uN?WP>1JsWiV_uKEϸ/r_gKW]ױEYcl,[TYHT}xL#}A GV7^}>iҞ-i;}LJX&TP3T#ߨgJl e'=?͘ona|7>?ǐU%;/mN/IfQփz{<d6dn;Qm{{5$iѦxg<$"^%=RJ)Ste/֔ a};k_y?9Ԛlz}m#GKk!k(9G1z,Q&liV濊#_<3Ξm$^9g{9&w&:˙uf֚R:ֽL+mWW^z%I2loZf?k4W-#	?V/c^!!{u̵ʴUٷAGe>G}?v✽3X~j{zTAO^ʰ>?sy|G)P</11~2ў׆R/7 Ӿsmsr"(2cϹ;~u-)}<U1g:apb5{3(k!m'mʞ2.~[)}GκbXELpaԃ77Fy0@ߋL?󞕹Khi@=RJ)RJ)RJ]M;;j;  SmkBT                                                                     xi`Qqqqq!	COMlS$I$I$I$I$I$IqO9˵wOo]ss,Խu˲<^0tc}av=7_{V9z}ٿ^s_y~?}ez۶@wE՟k$I$I$I                                         @?
R*f  *mkBT                                                                    x}+(H,"H$"#X$,QԈZs>U{	..T}6 ڳ-F`p]k ߅~b

О$wݓٱ|sCo A+q3lOx@(0a+?	T,_7s\Ϙ^Bl1)C+k(FyN"8dPC_9>O0&l4Im+nwGrŰ<Qq		+H}eq~~[).5c6,muO9p\<//?N:Mp) Ĝ-2p'uKq`_/64<~ 77SNBQ맨uM{5%.BNɊk:	kNm9*uU|2%;]Faג)RE%HWc0Mg>)/tihf	ѸX>E)<,6s45zb?J\<OM%O#(76:=	ӋYAHLs6MXBcX&ǘJte.	3.je(?<?-1$pO= x	]<Jt¡Vg`|I,<丕}FQj]o%[Pa6XY<?Yoh F067ၭ6JFG[wv)7?,@w
nMǦmk>?Lj=%wZizFTx$kP8Em	jAOހ>~؆B9	֤8UKCvjbLCy;mjP. DkwUE3ܨ8xUJs\ɟ+;}sFQ(KIXݛƨ
1+KdX];Jģcx$D׷X`i @l̏rnm$^9΄zBGϞQ=nfkDe;
<a>,⢞jk0B[p($ Ǡp4nq`XƓ	vϵ.xHnorJ5Hu뇗fa[Z:><M@J9$q] }=Hk3鲺tQ=,	7߻s>36[gRL؍?(&w.7C#~B{]
UW71jk~ecGrD.=K@WǱM0倐0\xvqNZ>#BE	)&yA}t?BYm(WIpɱ|2+\2 )l8tl@Z.Be񅋍RSƃm>dIl'NadĢG3%#)?$s	_5=YBR#-k"qGP-e"f%֩-ϓ378M9ϊ,_*n;HEBƱcl~˝[/sagIE2,z1t:kLș壋G){7ond{@rP>kwk׽#kXfyEAB9uM4P=_lgW؇N#_nGpp,ZUu6ȓVӰ0EK7*|]{75F\ԶzQz!	uH>upT٣o3P)[^6` -d&*=%fY<^ط`_6|h3ء>2 Pq7ώ,NsjF=B`큳CiU)R鐏@LҮǧmb<2FHRqùFXi䎲OmGA}:*uf:@ʫRH.66jcGOpO-6HKJU:Jǃv<gz 1F*qm-;I 7?O(Yrde
F	ѥrHaۡ> ,3DZEƮqq7p?ȌK%ȧ$;?Qr6pP7`a^=R_)m>D3#£_'Iɭu͋C-Rne㯄ssL<ȭ/R)|Lt_1<u}E
Dzl$H+N_2scۯ-rHV.֏'(}o	:]謧6Fhlw@z{6P_?Eh߹vK/B"Mh;бo)gRm $5, Ex(?:gU뵅F4 	߹E4!q?lAYvs:mR(GZyGq+w0)NzuY-&"Y	='I8{mL/~!.BA=缱Y|z:f#¬oh2XjǼI|1i3A(|vf1NKLͫ.?r]qBS^#o.l%z⁋Y~i䔃P qu&7(U;Bl zFx׎M,|PfV֠k'Nb̔/$EN
HAiQ=u-/TQAD9gW%YZ\aԥ5Ojru"9Bzp̬vll=ɸYyܾ5tmEz+M>Lk=rr4/gEr~PnB[\g[{gYvRW'
{Fem1{wL;7&$xc0n&u@5sCCձm8Heft<PJZ@4K|#`}akRN'~IU!kWLZDNK̡U;gL~a(]!Bjv(f\B}AuHR gM<7O:[m6uv;3=wwn3pKM{. t"nt?dibC6=E	,ѮO
0hvG;=MV%ʪr 4H8rK썀xA:2e.ݟ0N<g'6%G1ַm}^jnҽS0CzLX3UM;^^~XcavGHu"1kNKT?,r=܎X}6CBW6ۻ F\3m{4!]9ửJ4n5Jsw^Dhz8P]z1x~ J8#c%ϾcF{do@w0QsP_́ ?3yB2Đ{|5}>x{q(aтa?Q%l4ςxmWI׆GC1kQ3iJh,KRO`ʲ<![NwaZx\Rtv^ZJa\(ZPE 1ޣhy0S L!yQP̞#R@ӱ&4a9'2ċIE8XIr
4*yb˼/#x;2R~ O7h՘U^k(侠,2)C:(ِ;Q3>4)%b6B8\ pe<S+jsp%<&t{3?|N)p7b?aiDWlXZ>;u)ko)#WSncRx{[sXv195_0Kՙ7> Tp5ٴl3S"؝LX睫[5mQ ="u}pϘ*xbՉ#iM+@Z!	Ϯ~jYݬ$?5mtu] %@݅:4h8ۃtu3;
ΑO1A/r
R*5i&j#Y2:$Z(ad@>'z
L뇶6Z8|`6"X1_z'F-я?X^A:?1;h/KVB'vOnFSƤQ{=kh7MwXQp\v͓O/.
N3HKRlK"q^Wh1wth@3e6N|I;y?8t[[!$,ήLe"z%IކAkRl!3u8ځy?_W)AbCO!rza5Sn֗#<43y6"R߃CQ&>[#
B Hǽ{vekOTlq(UH͵hݔ8,@tՂL{p/*L"d_yk,4G̖bD>,.ok"D;|7[.DCA#ilϟI֬Dq]+eE	_--ڰc^Lq1~CCC9gNH8BkhJ#Z-`VoMa 9r$ պZ-hkh
?C$	^tď9d(8P݅]ڶw[wl;dn׆oKdHބ(DInI M_( 5)6H/Y1 QRk,nXHʉ?>df&6^EJmt{CCc`0ʅv5x<\9Yc}106"״!֏9dl:'1H"<HN&]569!I1;"YxAK-ym|hd"]U.akgbbw24j- Q Od-:N	dG˥MI	VG=W!r6wH3p"ۋ#g6*x9k{H<WBQߍOMV{Kh^<FW<L:w$|oY-Q]<ʫ!!垹Fq@}3fR%oĿMrD+N|YY6jr11k4i'Xf\:e޼ ~P91ߍ
&78Qape5 9osMy	K-uu9Bdx7HV&_!ClgL 04yS}|qٳkbs:f'/㼳@!]%z#=Js`3W ez<PIGC0@455gxcTGU#RCC?tdxL`Ɓ8dgsT?M6},_ \k٬lt΄ls:m"25be\]\˛{xaLoQlPwK7?M ^a,_lb(1?3݌^7:ރ^usϚqB8*hGxYCm5M~{Sg9nRXC}[hOtC1#W3*:;&_Gۂ&H|5L<4Ƀ\bD?]fM{V6*S<e0,!AؾKmmߍrOoC2
#p'$F˿@!{0VYWoe,'H'`r1#ͿMRSYZBh|xH@6YziWlwQ}yqs!`~y#-OՑIXmy|*0o@]ۓ^(`Pqvefv'OA=B݂pCJ#
֞q5RwV&)ԩn@po]{3v:Yf*aW_&'
Jk0nDx\/HDuqZ\ڌG+啵XZT>z'7QqɌ#KR./CVgQȬ\`?d1yuM6Ƶ8ZX]8^pwQE&1frRKi$GݜЕh3'{;;~FK37ku<pdʎ+CRMzƏ7)n Ҁ lEGyl:̑IoB<A\\6dFqϡɅQ[1<kN>S%|ЕsTulebA}Aʹ10A{KʘӺtjdLI=r	PRg_LbRŞl?␔)![Fowi&k^CV(t@pW2{hxHGRn͉eCbxԉ6GQd27\ثdS=\Ff*0ۣ OP5(rZߙxQZ>~GAeN-jY7Ҿn;n?ӹ"Px}/N W:݊&׾:x"ꭥу;R펔c䛅љElmG§a=h¨BG_uYnZ쫭FYs U"zM&:Gnu.DX5Xn;}ԫ%XO?~2&Frjj8yA*W	I9/ub)Zl:s 85J>~iI<k¶٤^Sx[sGD( +"EHnֆA_\FZ%?4`w_{7"0Y@f}PEjmv:QrN[wz*5c?jf7?K_P', sZ(oT|Ó\-%蔒hy\	cK/	˧YGԻڐz&c"*(,yEq(y[q`a7Xļ~R/{hh"g=wݠ՗?̶uNh{g?tqm,u[Yot+!hf.2]ݹ?&wARFľ붾Ue%dliqMs&6Xw-&Y3(G9{cׁ֬ǿM;vn"b)<׾e_1p}11F#YXpq]s,[%*&@DfҹAٙfs,>3Yԕ;:#hELם[ROd^GA˩f~Y!En0~/A
Km>^WYq"<цF*c:xw|͞w%ehRgd9̕v3vDgh>>?3hYDkgC(ʹԕSԜ|2Q94(?OGQ34fccPopTYaW(>@tX4`LGٞpɄaŰl\[9c26UM6f, 'C4i<Dn#xгHz5[
_QtmvNC_`x~Mbs PEx؇;cW*n\?׿v:O3@fR&em[mٜC5f(MNiYXxШ=4
yHO<0|3[B	:d1"ZO$+Kxi̒=sJg~i[Rz'G#v}>?W~psϠ?kAKrŵk@I|>^xs?\`,D̒5W^wDMXf_8<%| 8_왉pP1Wlm߃f?4:́_Ԕv M;k:p_sj؎qw]$F}y,b'N=o0,
~M
YR46+!}@~ujctCP.Y(x׎z?70WXFܣo3z0c8RGg0TU򄽻w"/4֏CQ`[{Ocn]+{{N!3<Vyx,!C
b.lf'\ ןgu,μw-/3ۥNX(coMDsa##0{c%uDWCBZAZ6,؏x(Z%wHbhTb2<$*cnk_א#{D+B<!S/gÏ`9.^]ßC+>3+5]qpj'
r9FDȬ)~:9Gmx2-?sraG"yvUpa;Ră A\&
?#n	0eed~oq嶭! !ǲP^H)>oȑ.ļԶ=Hy7S-M
?8ycߧq|#5"2Бlm#UeΤVbM͘jAc7Z
]>4gb
s	2WRsKg6's8qzTT[R[w )I95xWj#!nN+zPڔ	KgTE,?{^RDݥ=Ru^zîc&D'i74SJߔ&HUG[crͦ<׿~4}څh;lpAZ%XZ;tQ?yk1+Ƴu6[Dc4Ɯ*dB#!}e>samhG3c^8u9󼵕⸈߂UyB;f"Yi=D=4&|C3g]~WgjhSIXU"1A5Fr4{AljwTt6</N \Rta|i>T.Wo>>xϯY{緷 m,J{gg}v~)]s!?wXGFl!7U|Cnfﳅ:.@mq%臔Ru?.:aBֺE#Gg'yXDuSWǊD)21ѵVagWPqȒs?¶@g")s\T{f3go^w:^" {d#!φt},nyWFKvX4|<B+8i=-;X	5l=/xlwn] 
+SӼ,{՞ /ДV +<<o ԇeNp^OOvqR wHF3݁=o;`~kRwCu¦kjE|qϩKV,*?xk}QxU/M=հp=犐^xBˏKx@[IYB]T➐Kq.ὀPwAG\Wϋ92SA\Y\y=ǨGjբM@tԂvDz+Bĺ\լ6k6LʦR_rnl|UAϯ<
|!;8_1gsލC >VB~,˘_&fjp/Wԍwa O H3I`u1ͤ+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_Wݚw)  2iTXtXML:com.adobe.xmp     <?xpacket begin="﻿" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.1-c034 46.272976, Sat Jan 27 2007 22:37:37        ">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:xap="http://ns.adobe.com/xap/1.0/">
         <xap:CreatorTool>Adobe Fireworks CS3</xap:CreatorTool>
         <xap:CreateDate>2009-08-27T15:13:50Z</xap:CreateDate>
         <xap:ModifyDate>2009-08-27T15:13:50Z</xap:ModifyDate>
      </rdf:Description>
      <rdf:Description rdf:about=""
            xmlns:dc="http://purl.org/dc/elements/1.1/">
         <dc:format>image/png</dc:format>
      </rdf:Description>
   </rdf:RDF>
</x:xmpmeta>
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                            
<?xpacket end="w"?>ಊ  IDAThݚIyzvuO,LI͌CѤh"$6"EqN>	SK ߜS@@b1-A	b(j8V]{9TIQ2{)0;Ｓ$I6øE͛7kuw-Ìt:_0MoAA.㳟lA37NgCnNj)xLRi J)1TJu)%RJ@)ZVm4[J~znvٳgz;BBJ ]Beh6kiBe@)بJ%|(2G4۶,`<J)0ds~'=
!h8 ^,뺞	#$.J)$AeYDQD$hvGR/?Pڧ~g]=\T&Rv]u}駟ifqL$$I|>OR0r+++[/:c
AJexl0xX,:Q:0M\pi31s!wɓ8q^Gض	/L:qye|r_z饗Nqځ8<A ٳ>|'NpE昙_"m8sq5nܸ2]w}Lmt/p|wId<|ߧP(1a8?iۼ[y F۷o>I`Y] 1gLà|o8gdkkzj./".]u]:;;;aHףhdܼy`:Fqpc|" uQJ-U@`kk+ڢ7xZylllEn-|ʕ+\pz΍7p]pH̼PJ)%B)Pa|@Z_jv;hZH)Y[[f0`6B0$"xwz*j5gYVR;jJV^NR
q{ׯ&v_i/Jr?9FsQVuKKKj5|ߧ\.h44-se+¥KAeYZ+"0$=20~SߺV#˲of3w,W04MjaYV晦9<>}۶f̜s08(Ϟ={_זKi/T*u]!gg۶,#GP(x#q)єBPHM! RZJt]Vm9sA`_??/8躞%Im<A{[@1X"o2YJ3"h|@gu]0/G<Cd6706b(}TT,ՙ<eIE;;;~|R*J)vw	j0t]4G4M`$DˏnytfPbBZj.<7P(*ZknD4qSQ,8C+"ϳ[o/:D-!L Z `h02rzks_ 7YNǸR#4,uh!֐Nʵ6-j7yt!;4	GM>m_ȳ>d83ضh7Y jU8Nڶv+}ЛFgAX,͠F.T_ +++O	!4Oq?E쳡ШV{'#թovl44l׌by&FƧP MSuK"v+nFmr6auZUdI]nX4zݔhB t4۷)8	t]cccAl^ϕRC֫S:Z@k9_2-^?`xΓE<?_~}(Mx'IBZA躞EvÈaO|']AsoBd0R%MBc\%2 &B;$d˗/oq볚?>,OJp>=|$:D*z^ EuSOt}'ZL˘ u70_b:k!uu}&S9	0Ann0hwE&LT(bO)Sةno(>ivǧ4MH]i͹0t]6fVE$E?B@A@z9ZAO1Bt(/TGš_%Z46Ì)e{]Kr H4#}d/B1LMTx'`{{{ \uJ/{ R)'ׯ.Ut	ępE3l:j%fҬkabj BaRpo04D\^w w&`pnO5đŁy1SV^7m۳0ZKGjJqŶARKeRq7Õwwiin`8<1prI4(j?7HPMSt?$]}( [C)dz_<Kcx*}P5qΝzaA6Jqw .]inTn걓,.=WԥF"'0,'K	|{oSmlaywE~4,k!1Ugy	/Ic( YkkkRJ|Xr.|Ȭt>#I$	~4)zݬ=^y#փ /y¶tm|?$?gbitLea&iޕh*0M3sEZyNNNA.\0#w)Hzmiy^~Z[E>ϪqǑB)}yꩧRtKǽWu&&& m;kD!<n=&ǶmAg KKKO-q7v@F~	&
U,)DQa1RJ]Avvv&|_b|XOOOgRJ$!l0<yxwWvW_}rtȑ#sssr\*bXp]r8X1MG(Z%AR;	! kp (|>?8sуsJeR?X.SSSbh#h:L'<^(	{}T`9 Lǎ[8yǏ/<qСJrpffT*۶Z)'aL
:{O9FZO<yӋǎ[\YYyR̗dqbbB(rƞF{m ̴N:3,/,,x~LS094MlN|? Dli
<!    IENDB`                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/images/arrow-down.gif                                                         0000666 0000000 0000000 00000000111 12534142432 017655  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a 
   !   ,     
  iݺGRLC r^I ;                                                                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/images/hl.png                                                                 0000666 0000000 0000000 00000000275 12534142432 016213  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         A   tEXtSoftware Adobe ImageReadyqe<   0PLTEn   #IDATx     oMQeıDC X yxw    IENDB`                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/images/load.gif                                                               0000666 0000000 0000000 00000003311 12534142432 016502  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    EאeKmNoqڝ4[8^>bCgJlm.VtчXwdFi)Sb|܄"MljPp Kʑ*SHyし泾лإڿչҰz˨UuZx`}gMoHjw@d:__};a0WVu&PhBeҽޭ~]{TsRr2Y$N KF6\(QDgv<aIr1Y\zo         !NETSCAPE2.0   !Created with ajaxload.info !	
   ,        #)-$*.6:7
%+/70=66  =?=3@? ;E7A>B;>CD	;+F &03	8<݄!'14,<	"PF` !	
   ,        ;WX[] <UY-\$_&JOSHTJ^*\GP2
#7HKQ :6L=FF'MĳNA:b IT@ ?R/D924I	::/E`ӃA&V,ZJCaTT9Ij   !	
   ,        	
i^, CKjl8^ghQCRk"dN<h-Pcf m],>Jnj2H0T.-435GЄ`eC6:f:=σG5AT770/6@C(CBA;@/܆F	r Z@ !	
   ,        ?(N!lG 9'g[jNJA#HlF=B]O<T&28f_L;9V( HJ,	kWlf:UolǐTr<bJmKG(>N*#F`8"pA/`9"07 qE	"T=36n Fo) !	
   ,        aoe&? 	+qe4H2D<
@33
%F8<;J @@c e[l>8TBjuaB7KAǐ0Cv^	ur6b?ՅY)3T3+'s
6F0:.ntn830֭ !	
   ,        0@9(+A TA8cJq
>`GT6:"VVA6@>/B4eb=	oRTD3 >hF^M'0F7BLd63Ӑ]jl7ۅ&NG+TTc1SOJvwn\-Yr<A#iΔ@ !	
   ,        7=?;>;"0 :TD	AB8Q"6/3 7;(I@0=:GJ73QfA6D,<3e34.1&2*^Z\<N|Zk-xcVz^8Oyrvj{Ce H`X  !	
   ,        7:FF663FbDD=&:E;A.TA>3#*N 	DK$+C9\T6Jc-: gY(DZeu,AKXq oPt2Q=FAl!+ OjLM^aG1N\@ÕA  ;                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/images/bg_dashboard_nav_ocean.jpg                                             0000666 0000000 0000000 00000001342 12534142432 022210  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky        Adobe d     %%/$$/,$##$,:22222:C======CCCCCCCCCCCCCCCCCCCCCCCCCCCCC$$3$$3B3))3BCB>2>BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC  "  o                                   2r!Qa"            !   ? /s<\rL2<d&Cx!!^/#ɒL<Cx!&LUbyBC!X^G$Cx!!^/#ɒC!X^G&Cx&I2d:duV/$2Uy2Hd:duV/!^/#I!X^GuV/!^/#I!X^GuV/$ɐ^/#I!X^G$Cx!&LUb[&Zt}.QdL?=/qr<zznxn}1
+da`щ`̀6 l`̀6    6l ٰf 6l ٰf 6l ٰf̀iӟ>^_Yg/                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/images/background_button.gif                                                  0000666 0000000 0000000 00000001454 12534142432 021303  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89aJ  ׷ݵ㽽۾ټ!   ,    J  aHahlp,tmx．`@,Ȥrl:ШtJZجvKp|"xL.zn|NxqD!~
ɵ 
H*\ȰÇ#JHŋhȱǏ CIɓ(S\ɲ˗0cv@͛8sɳϟ@
JѣH*]zӧPJJիXjʵׯ`ÊKlThӪ]˶۷pʝKݻx˷߿k;LÈ+^̸ǐ#KL˘3ϠCMӨS^ͺװc˞۸sͻNȓ+_μyУKNسkνËO+_Ͼ˟OϿ  h&ੂ6F(Vhf. ($h(,0(4h#<@)DiH&L6PF)%| Xf\v`)dihl$D`x|矀*蠄j衈&袌*@"  ;                                                                                                                                                                                                                    ./mvappsvr/docroot/db/images/last.gif                                                               0000666 0000000 0000000 00000000334 12534142432 016530  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   $H-S3Y?h,f8n?u,qDoBmJuHzN{SQV_`homgq~獫!   ,       Y`#die^dVQY}9y8u)yH"E؈hr ´Te`2<`r-iQA&KHD3("p! ;                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/images/col_widget_icon.jpg                                                    0000666 0000000 0000000 00000001550 12534142432 020731  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 

		"""""""""" C             !      !!!   !!!!!!!!"""""""""""""""  & 2                 6 	        !12qr"AQ3a'BCde               ( 	         1!q4QRar   ? {\JVm%*YXEKeSbJt(7j2| :o}o#eqR<,F~΃`N>  %;/ȯ8*ia9\L/6 qG]%Ev+
cV%gfZB@1.U-{Mȹ1L8Sy\<ϱp܊]K fDF7}"C{EtP߷?=',n\7k:s%+Rb*<Дwص$s#" 372l;;]Bޖb]/n303n3;I?'XYר4s1mV@!}}mφx;*LewW7}MuK* x@U&Ҳ!EjsiKyi 8QH	J5}/K0'#/(FFTN                                                                                                                                                        ./mvappsvr/docroot/db/images/graphic_withselected.gif                                               0000666 0000000 0000000 00000000221 12534142432 021741  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   젠pppyyyЖfff!   ,       >PImjNU8>	0Z*2M Gh;pSH5Al APl6MΈvӃ!D  ;                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/images/bg.gif                                                                 0000666 0000000 0000000 00000001526 12534142432 016161  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a 8                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               !    ,     8  3 , @@(\8 #Xŋ2@c	Iɓ(S< ;                                                                                                                                                                          ./mvappsvr/docroot/db/images/pie_widget_icon.jpg                                                    0000666 0000000 0000000 00000002632 12534142432 020733  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  ` `   C  C  " 2                	 ,        !"1A2QRaq3               1 	        !A12Q"BRaq#   ? 戼z8P~c(b.gu,}LnLԠ;LaH=Wu,t?CYzj)k3dVWVl'<z*LbDዲD
o}HYU<Ŗ'#	jۍ#v)#DPM a&Zs[!@6W}R^ELW,e!hpegf4ߵm϶obʢXHzEeUR]OqMx\rpVI15$I'9jdi8Ӷ&ʓMkgE"3gh%At<aP=+[XǱRRBX^٪z_hG{`辕1:*ha8̶}=|[;sn=ed«M9$zL\ZyZ.S[Hyg?mL"A3'VdωpF;>n%'\b,DFOj,/(MFɨ7#tUr &dU=~
3ea=.*淣t-6夈[`r	-Lg|8I_gQe췹f{Ci<Qe\
(N:jd\%Uz/oLk|mmkG%w/.quE-z9˸-Q  VC@kt;  Vyaq{FR<qQrc$Y:C毚鰲V[0:AHh.gYZ7VV"jz]8Q ީ2R>o/ވ
.';u^~IΛ-Z܇W&r/5SV.7īNX~!C;V7)<e7KơQ}<͹hvkd(6Ȱ6cPqG(6!Ffl^|'4G(T	iB~lTlCQ[GST,Dj4Tq#"#25U"UU-^yGI#rORJ{_8l#Ns_}#xEi-#DF"4Dh                                                                                                      ./mvappsvr/docroot/db/images/close_icon2.gif                                                        0000666 0000000 0000000 00000000304 12534142432 017761  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a   ӫk o v {%G7?l m i    !   ,       qеԼةtGR%Hbi!,ɶk4$1 3a(&a,&'BRDDaP`2
,wHeΖb $,E`A	Nojzz
 ;                                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/images/ddn.png                                                                0000666 0000000 0000000 00000000157 12534142432 016354  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         Σc   	PLTE      YYX$   tRNS @f   IDATxcƠ  TK7    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/images/bulb_widget_icon.jpg                                                   0000666 0000000 0000000 00000002040 12534142432 021073  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 

		"""""""""" C             !      !!!   !!!!!!!!"""""""""""""""  2 2                6 
       !#12AQqr"3aBR%CDb               )         !A"#2Baq1   ? )3bpbÚo:2 wXl^vgm)}~cDME<򪡻PLfVd<C>%B#f>`F@Tti<gڠ]/'OaNkˏi0Pe*y 6HўM'.v\[i\ mugLTCY_nI'ҽFLЈS =\3*~V3xXy?:_f*6,}2-l">LҒ-Ga72MZM'{Xٻc:tK0F<׉#/u6D^>Gi7n,n?Ǻ5o.4tqM<.k[K{a­x[~t
lQ&{u4JC^XM s?aJ kK[fA$/==Dv6ǌQ)2NrEԓf?[v{;j Us&ˋ{hz3J`aYݤK[.;58Vژi/+_M+7e#rm})S;Ȃ`H_}b <N띢hZ6\Ds0{k66ֳcBci5'W}d+k$os|ҧ
 	(4'`Н3Bv
 	(h                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/images/ui-bg_glass_100_fdf5ce_1x400.png                                       0000666 0000000 0000000 00000000175 12534142432 022433  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR        oX
   DIDAT8c&Qb%/-#`db`b``b`b`dFe1ea3(1J`! 	Ĕ    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                   ./mvappsvr/docroot/db/images/bg_header_nav_links.jpg                                                0000666 0000000 0000000 00000002112 12534142432 021540  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky     <   &Adobe d    
  O  ~  ^  H  		



  W                                         Pp!2"              Pq               p         a1p!PQA                   y              "              Nr              O  |iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiqxr)JR)JR)JR)JR)JR)燧Ip??o  g  g ?, ?, ?Tqjjj ?!vA H$	A H$	A H$	A H$	A H$	C=׏ K88888888889g?_J{g?_J{g ?! ?!    I$I$I$I$I$               I$I$I$I$I$                 ?I>Zxϱ0C!q8a0C!q8a0C!q8a0C!q8a0C!q8a0?) bŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,X{|z=Gz=Gz=Gz=Gz=GW~ϥ ? ?                                                                                                                                                                                                                                                                                                                                                                                                                                                      ./mvappsvr/docroot/db/images/bg_header_nav_links_ocean.jpg                                          0000666 0000000 0000000 00000001105 12534142432 022706  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky        Adobe d     %%/$$/,$##$,:22222:C======CCCCCCCCCCCCCCCCCCCCCCCCCCCCC$$3$$3B3))3BCB>2>BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC  W"  e                                     q2!1"           A!   ? ~ҝßs[X,0oiOUCI3V&
rUCI0Pi`UI3V&,5T4S3V&,5T4S3V&vUI0PiOUCI0PiOUCIܳ0Pi`,5T4S0Pi`UCbr#S~O>?OG܀                             n]Gx                                                                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/images/button_email.gif                                                       0000666 0000000 0000000 00000000507 12534142432 020251  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    ɵɘ|¯}ikWfٱmw෷Ęݲ!     ,       @_i(~F/+k߸EE_O"yrl:B}0a* x,ݴ wś,g(
vvm{}	`m`	
			Ê! ;                                                                                                                                                                                         ./mvappsvr/docroot/db/images/icon_calendar.gif                                                      0000666 0000000 0000000 00000000422 12534142432 020344  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a    `0=oece{9ܠpP~ڰАР`kp ( Ѐ0H`!     ,       !cvdBy"Qo= UqH0@P6ȤR)8ƥ'~.ŃtgEӱ Ȏ#O& /|hhk |qsuzY_aHjlH		q! ;                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/images/sliderHandle2.png                                                      0000666 0000000 0000000 00000000433 12534142432 020264  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         Er   tEXtSoftware Adobe ImageReadyqe<   3PLTElll{{{~~~xxxjjjtttzzziiimmmuuukkknnnbbb   O*.   tRNS %b   aIDATxڄ
 YYc?qq"(TNp<r\,@<^a4zkF_k)SWG6Y)?/! %    IENDB`                                                                                                                                                                                                                                     ./mvappsvr/docroot/db/images/slider-images-track-right.png                                          0000666 0000000 0000000 00000000401 12534142432 022541  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR  ,   	   v   gAMA  OX2   tEXtSoftware Adobe ImageReadyqe<   EPLTEkkkrrrUUUTTTuuu___㡡vvvVVV 6   BIDATx  E o/gRB`d{V%/ì6rNa] ՗ty    IENDB`                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/images/graphic_lock.gif                                                       0000666 0000000 0000000 00000002127 12534142432 020214  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a( 2   ϜXQFԣֻȴw´rr[ĩxŖf￻ġγ̰}ƭãop஥fҵճۨѯwҾĮnj!     ,    ( 2  pH,Ȥr<>M` 'QOW@bI6~ h;?|>u?=44	4>J-	/}e=Jb4!B/4	1?2>1 B="?'I>22|Ԉ>"R=康1=t/;"P@_"%2z
yǎ\/4&| Y6$O*`rHAP!CGh$@S'+ zLd6J4	Z0:*t  pHz&ŪuR8mJǖ1Nɺ<5ȿm!df(p/.|װMC~"k'KE:hPQc*,HN]
rhpW5p Р%x_>xQt}`D5@XWC~,wH`)P@>B  G7``"("  .tX +8Î@+@b
II(% ;#i. $	rQN#Xjɥ26)&HIe@fG&ot.k	N)'?
j']79gu痓*
(j)nRZ楍
)gjigfJmh>Jkzj:*뙳 &>iʲف&pptIˣz*",p5$`}Ko/J>dkkd.%qMocJ] @]d<A./<PN-7C'܁!D7 ;                                                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/docroot/db/images/dn.png                                                                 0000666 0000000 0000000 00000000334 12534142432 016205  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         uO   tEXtSoftware Adobe ImageReadyqe<   0PLTE}}}mmmDDDɏS   tRNS #]   &IDATxb`ebeagdg`@` f,wۀt    IENDB`                                                                                                                                                                                                                                                                                                    ./mvappsvr/docroot/db/images/arrow-up.gif                                                           0000666 0000000 0000000 00000000111 12534142432 017332  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a 
   !   ,     
  iݺGR#r^I ;                                                                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/docroot/db/images/btn-sprite.gif                                                         0000666 0000000 0000000 00000001673 12534142432 017663  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a ?    <t  @@V 0ؾ؉                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                !   ,     ?   80Pq0  у7HL"D/0H AIX0@(	/x!膠fPCAD Zu/^h+l ~XmՐ]x/m/j@@ ;                                                                     ./mvappsvr/docroot/db/images/up.png                                                                 0000666 0000000 0000000 00000000340 12534142432 016225  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR         uO   tEXtSoftware Adobe ImageReadyqe<   3PLTE}}}Ѵ@@@GGGDDDٟlllyyyFFFD    tRNS %b   &IDATxb`bF-` -9v L    IENDB`                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/images/1-column-layout.png                                                    0000666 0000000 0000000 00000005125 12534142432 020555  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR   `   `   F
   sRGB    gAMA  a    cHRM  z&         u0  `  :  pQ<   PLTE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         jJ   tRNS S%   tEXtSoftware Paint.NET v3.36%  IDAThCZZ:m\]-A)m-k%9l'ַK[e'6ol޸׫u^o`zYԓ-ݤ^ֆis0VVwM^j1~\-[|,V@Zrw3W`'w[Vq
ϓl?6:jق2d\&@8Aԡlnin9pv'kl>	o`pw.q%|lp+#(zgo8`k1*nνsEv75v2>nuSfpo7 F,.:ҙYQ1Fμs-l*~j؄s %?cRs
h508L(	jhVXwYj`"ġn"$<1>섆@AUb1i*nAX<(m:p/Zz@շ3[ɛpՠւו(	1M6weEaZF6<;{7/Phӌ6Q>昋(AJP,E	Q:r"0"J䁩fu% Ŝ9pWk99JaԆl3rчH4Z\y&͓l⭣xu8Sb6Q,<ghE6^fGH[[Z`4hQBKAl֫+J`%̂Y>7ӔhdD >M3T,$Jm:t)t(20hE_*ow439v_ix2tߩyI	,pMvA(-g/j`"گ=mtEj FmKr	ht903i0krjcgޙm%='XljH})8J53Y,kdc@{8f"%PP$(fX.r.ɠ ] /}wl/Zԟ P\`<UFr!rk4 0"Q܃ZP;"HFZb @CԮ@SܾWJhe;OdY1(P+Bh,@jdgE_JRw5d#R׬*T<))U,4}}:%X:6KܡyGTV7G+`]ޓ͓o"P\`m$٪sĒyiQoVmw_0=NO[_{0/nGVmx1o7?O:B<N    IENDB`                                                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/images/header_nav_links_right.jpg                                             0000666 0000000 0000000 00000001740 12534142432 022273  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C  C  *                 	 6  		         !a1A	#Qbq"'r              
	 4          !A"1Q$67Bquw2ar   ? Uԯٖ	XO=|H1C6ѵz_fz	\>Uʗ29kŸ~4A _$'sքw X N\J.nS.<s+z;eǟy9}%Onc{%f?]+d#jzm1۶}Zk CvOJ/>VM˻e83}ߗ þN%;`cfV)`h o_=OխFƲ
,=lnԡc6ΪԿ%f,30f7=SYEݵTykX:
v`vO-Z<]UCQ	>S'2ÔjdɊ9',y!7R%tM5cF-VU6mjK,8LA:%Sq4LdK:pn/L>pNj1eVhn1Ei5e{+Bu[o]C[yNæ*u:OJLQaf[+`e"F~o{+e_]fjGJ,ʥd"NuhU`$`@NS_ $1;@
> l a< )ڧ {                                 ./mvappsvr/docroot/db/images/bg_slider_track.gif                                                    0000666 0000000 0000000 00000000277 12534142432 020711  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a
 
   Ǹ׺и߹׳         !     ,    
 
  < 'Sa/˘aݖ=(C`fAlHdDXJ$ZnJBf+! ;                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/images/bg_dashboard_nav_teal_hover.jpg                                        0000666 0000000 0000000 00000000532 12534142432 023253  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF   d d   Ducky     <   Adobe d     		



   
  [                                           Q                  ? ksk1{A e6                                                                                                                                                                        ./mvappsvr/docroot/db/images/bar_widget_icon.gif                                                    0000666 0000000 0000000 00000002202 12534142432 020700  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   GIF89a2 &   Ⱦ޹ԢӢќћҮѬ˰ΧpdcBS搶]??ÔÑ䇱Uￍￊﺃ{FzHzGu?n2s<n2n2o2j)k*i*     f' g(e%e$d$    ``c``VU                                                                                                                                                                                                                                                                                                                                                                                             !   ,    2 &   @D*\Ȑ#JXċv1c ?
HR4vYr%$%xiM
`fI͜:/3	jYʔ5(qҤUJ$Q@`d	#hӪ]vJ#gݻxD,-eCc1#Cl.gȈ̹}{f:uR^ͺ b=xA۸sð@l bu"ȓ+_<IPTN׵x$ʓË_?ɫ_<z˟ψA*ϟ$]@Bh&`,dtThf*4 (h(,W ;                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/images/icon_gear.png                                                          0000666 0000000 0000000 00000000704 12534142432 017533  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PNG

   IHDR            tEXtSoftware Adobe ImageReadyqe<  fIDATxb?57]qdҳ89o)/@$`xbV vX bG >LЅH @$=Ä a _%dqB)a ÙH1EBp-@|O߇qJyrylc16?1 @
K 5Ed(ZX[ ˠ_lEr=@,fl7ax3JGMM 0ao-D{o15߁IPE@eO6) plSQlG^` V֚#    IENDB`                                                            ./mvappsvr/docroot/db/images/cylinder_widget_icon.jpg                                               0000666 0000000 0000000 00000001340 12534142432 021762  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                    JFIF  H H   C 

		"""""""""" C             !      !!!   !!!!!!!!"""""""""""""""  2 &                9         !#1"$2AqQr4BRabt                                     ? ruL ;@Sf{6Ɋ\ת@*Y)&+jXo0-K`C ; 2jԩT7 Ĥl$'+W ЀT|jɱBTY\2rl%uWM\Ԛa[+u;~p
3sHm$R0(:BГz+H[+@S%*l)4 @R6_ O>ds7L
x =An&A7ۀ@v%B[o&Ԋ@qoTed8Xi\gmJsPi5DTp9(@9y8J_DZn)Z&4}2doJ5+  8< ͥ*-uO|                                                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/css/                                                                          0000777 0000000 0000000 00000000000 13005675162 014426  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/css/application_normal.css                                                    0000644 0000000 0000000 00000040166 13005675162 021016  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   @import "admin.css";
@import "forms.css";

body {
	margin: 0;
	padding: 0;
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
	color: #333;
	text-align:center;
}

a:link, a:visited {
	text-decoration: underline;
	color: #ff8125;
}

a:hover {
	text-decoration: underline;
	color: #333;
}

a.bullet_link:link, a.bullet_link:visited {
	padding-left: 15px;
	background: url(/db/images/bullet.gif) no-repeat left center;
}

.brClear {
	margin: 0;
	height: 0;
	font-size: 1px;
	line-height: 0px;
	clear: both;
}

.brBreak {
	line-height: 25px;
	clear: both;
}

h3.title {
	background: #8B9298 url(/db/images/bg_widget_header.gif) repeat-x 0 0;
	margin: 0;
	padding: 5px;
	font-size: 13px;
	color: #333;
	border-bottom: 1px solid #696E72;
}

table {
	margin: 10px 0;
	border-collapse: collapse;
}

table th {
	padding: 5px;
	background: #D8D8D8;
	border: 1px solid #CCC;
	font-weight: bold;
}

table td {
	padding: 5px;
	border-bottom: 1px solid #CCC;
/*	text-align: left; */
}

h1 {
	color:#555555;
	font-size:28px;
	font-weight:normal;
	letter-spacing:-2px;
	margin:0pt 0pt 8px;
}

pre {
	padding: 10px;
	background: #E4E4E4;
	border: 1px dashed #CCC;
	color: #7D7D7D;
}

#dashboardWrapper {
	margin: 0 auto 0 auto;
	padding: 10px 0 0 0;
	background: url(/db/images/bg_dashboard.gif) no-repeat 0 0;
	width: 900px;
	clear: both;
	text-align:left;
}

#dashboard {
	margin: 0 auto;
	padding: 10px;
	padding-top: 0;
	width: 880px;
	position: relative;
	text-align:left;
	clear:both;
}

#mainWrapper {
	margin: 0 auto;
	padding: 0;
	width: 900px;
	/*clear: both;*/
	text-align:left;
}

#main {
	margin: 0 auto;
	padding: 10px;
	width: 880px;
	float: left;
	position: relative;
}

#pageheader {
	padding: 16px 0 0 10px;
	width: 875px;
	height: 44px;
	background: url(/db/images/bg_pageheader.gif) no-repeat bottom;
}

#footer {
	clear:both;
}

h1.pagetitle {
	font-size: 20px;
	color: #FFF;
}

/* Area Styles */
.area {
	margin: 5px 0 0 0;
}

/* Widget Styles */
.widget {
	margin: 0 5px 10px 5px;
	border: 1px solid #696E72;
	position: relative;
}

.widget_controls {
	float: right;
	height: 20px;
	margin: 5px;
}

.widget_input {
	background: silver;
	border-bottom: 1px solid #696E72;
	padding:5px 10px 5px 164px;
	position:relative;	
}

.widget_control {
	margin:0 0 2px 0;
	text-align:left;
}

.widget_control label {
	display:block;
	width:160px;
	text-align:right;
	position:absolute;
	margin-left:-175px;
	color:#555555;
}

.widget_control input[type=text], .widget_control input[type=password], .widget_control textarea {
	border-top: 1px solid #666666;	
	border-left:1px solid #666666;
	border-bottom:1px solid #AAAAAA;
	border-right:1px solid #AAAAAA;	
}

.widget_control input.datepicker {
	width:165px;
}

.widget_control .hint  {
	font-size:smaller;
	color:#666666;
}


.widget_content {
	width: 100%;
	overflow: auto;
}

.widget_content_padding {
	padding: 5px 10px;
}


/*td.right, table.align-right tr td {
	text-align: right;
}

td.left, table.align-left tr td {
	text-align: left;
}
*/
.widget_content_header, .widget_content_footer {
	overflow: auto;
}

.clear {
	clear: both;
	height:1px;
	line-height:1px;
}

.widget_corner {
	height: 25px;
	line-height: 25px;
	padding: 0 5px;
}

.widget_corner img.icon {
	vertical-align: bottom;
}

.widget_blcorner, .widget_tlcorner {
	float: left;
}

.widget_trcorner, .widget_brcorner {
	float:right
}


/* Universal Layout Styles */
#area1, #area5 {
	clear:both;
}


/* Layout 3: 3 equal columns */
.layout3 #area2{
	float:left;
	width:285px;
	margin-right:13px;
}

.layout3 #area3{
	float:left;
	width:285px;
	margin-right:12px;
}

.layout3 #area4{
	float:left;
	width:285px;
}


/* Layout 2: left sidebar */
.layout2 #area2{
	float:left;
	width:330px;
	margin-right:10px;
}

.layout2 #area3{
	float:left;
	width:540px;
}

.layout2 #area4{
	display:none;
}


/* Layout 4: right sidebar */
.layout4 #area2{
	float:left;
	width:540px;
	margin-right:10px;
}

.layout4 #area3{
	float:left;
	width:330px;
}

.layout4 #area4{
	display:none;
}


/* Layout 1: single column */
.layout1 #area2{
}

.layout1 #area3{
	display:none;
}

.layout1 #area4{
	display:none;
}

/*#loginbox {
	margin: 0 auto;
	width: 400px;
	background: #EEE;
	border: 1px solid #CCC;
}
*/

#loginbox {
	padding-bottom:30px;
}

h3.title_login {
	margin: 0;
	padding: 0;
	line-height: 30px;
	background: #CCC;
}

a.btn:link, a.btn:visited, .btn {
	background: #ff8125;
	border-right: 1px solid #CE0000;
	border-bottom: 1px solid #CE0000;
	text-decoration: none;
	color: #FFF;
}

a.btn:hover {
	text-decoration: underline;
}

html {
	background: url(/db/images/bg_body_top.jpg) repeat-x;	
}

#header {
	/*margin: 0 auto;
	height: 70px;
	width: 100%;*/
}

#signature {
 	clear:both;
	padding: 2px 10px 3px 10px;
	text-align:center;
	border-top:1px solid #999999;
 	background-color: #e8e8e8;
	font-size:11px;
}

#logo {
/*	top: 18px;*/
	left: 20px;
	position: static;
	clear: both;
	text-align: left;
}

#header_nav {
	background: url(/db/images/bg_header_nav_links.jpg) no-repeat 0 0;
/*	position: static;
	top: 0;
	right: 0;*/
	width: 150px;
	float: right;	
}

#header_nav div img,
#header_nav div {
	display: none;
}

#dashboard_nav {
	background: url(/db/images/bg_dashboard_nav.jpg) no-repeat 0 0;
/*	position: static !important;
	top: 0;
	right: 150px;
*/	padding: 0 0 0 13px;
/*	height: 30px;
	border-right: 1px solid #CCCCCC;
*/	text-align:right;		
}

ol.header_nav_links {
	margin: 0;
	float: right;
	position: relative;
}

ol.header_nav_links li, ol.dashboard_list li {
	list-style: none;
	/*float: right;*/
	line-height: 30px;
	display:inline-block;
}

ol.header_nav_links li {
	border-right: 1px solid #CCCCCC;			
	padding: 0 8px;
}

ol.header_nav_links li a {
	text-decoration: none;
	color: #FFFFFF;
}

ol.header_nav_links li a:hover {
	text-decoration: underline;
}

ol.dashboard_list {
	margin: 0;
	padding: 0;
padding-right:4px;
/*        height: 30px;*/
        background:url("/db/images/header_bg_slice.png") repeat-x scroll 0 0 transparent;
}

ol.dashboard_list li {
	color: #FFFFFF;
	border-left: 1px solid #999;
	vertical-align:top;
	margin:0px !important;			
}

ol.dashboard_list li a {
	background: url(/db/images/bg_dashboard_nav_link.jpg) repeat-x 0 0;
	color: #f2f2f2;
	display: block;
	height: 30px;
	/*padding: 0 8px;*/
	padding:0px;
	margin-right:-4px;
	line-height: 30px;	
	text-decoration: none;
	/*float:left;*/
}

ol.dashboard_list li.admin_tab a {
background-image:url(/db/images/bg_header_nav_links.jpg);
background-repeat:repeat-x;
text-decoration:underline;
}

ol.dashboard_list li.admin_tab a:hover {
background-image:url(/db/images/bg_header_nav_links.jpg);
text-decoration:none;
}

ol.dashboard_list li.db_active a, ol.dashboard_list li.db_active a:hover {
	background: url(/db/images/bg_dashboard_nav_active.jpg) repeat-x 0 0;	
	text-decoration:none;
}

ol.dashboard_list li a:hover {
	/* text-decoration: underline;*/
        color: #FFFFFF;
	background: url(/db/images/bg_dashboard_nav_hover.jpg) repeat-x 0 0;
}

#trackWrapper {
	position: relative;
	float: left;
	width: 377px;
	height: 34px;
	background: url(/db/images/backgroundTrackWrapper.png) no-repeat;
	margin: 0px auto 10px;
}

#trackWrapper #trackMsg {
	float: none !important;
	position: absolute !important;
	top: 0;
	left: 0;
}

#trackWrapper #track1 {
	float: none !important;
	position: absolute !important;
	top: 0;
	right: 0;
}

#outerTrackWrapper {
	margin: 0 auto 10px;
	width: 377px;
	height: 34px;
}

#dispRate {
	font-weight: bold;
	font-size: 11px;
	float: left;
	margin: 10px 0 0 8px;
	padding: 0;
	line-height: 11px;
}

#printFrame { 
	position:absolute;
	top:0px;
	left:-9999px;
}

.ctrl {
	margin:0 0 7px 0;
}

.ctrl label {
	display:block;
	color:#555555;
	padding:0;
}

.ctrl input[type=text],  textarea {
	width:99%;
	border-top: 1px solid #666666;	
	border-left:1px solid #666666;
	border-bottom:1px solid #AAAAAA;
	border-right:1px solid #AAAAAA;	
	padding:2px;
}

.ctrl input.datepicker {
	width:165px;
}

.ctrl .hint  {
	font-size:smaller;
	color:#666666;
}

.inline {
	padding-left:190px;
	position:relative;
}

fieldset.inline legend {
	padding-right:5px;
	padding-left:5px;	
	margin-left:-180px;
}

.inline .directions {
	margin-left:-180px;
}

.inline .ctrl label {
	display:block;
	width:180px;
	text-align:right;
	position:absolute;
	margin-left:-190px;
}

.db-layout li {
	margin: 5px 10px;
	display: inline-block;
	border: 4px solid #EEEEEE;
}

.db-layout .active {
	border: 4px solid #00BB27;
}

.db-layout li:hover {
	border: 4px solid #C20000;
}

#dashboard-properties table {
	margin: 0px;
}

#widgets-pane .widget-icon img{
	float: left;
}

.one-column, .two-column .area, .three-column .area {
	width: 100%;
	height: 145px;
	border: 1px dashed #ccc;
	margin: 0px auto 10px;
	text-align: center;
	padding: 10px 0px;
}



#layout-body .one-column .area,
#layout-body .one-column {
	height: 90%; 
}

#layout-body .one-column  {
	padding: 0px;
	display: none;	
}

.two-column .area{
	width: 357px;
	float: left;
}

.two-column, .three-column {
	padding: 0px;
	display: none;
	height: 200px;
	width: 735px;
}

.three-column .area{
	width: 200px;
	float: left;
}


#layout-body {
	height: 170px;
}

#dashboard-content {
	height: 100%;
	padding-left: 10px;
	padding-right: 12px;
}

#dashboard-accordion {
	width: 100%;
}
.light-up {
border: 1px dotted #00BB27;
background-color: #00BB27;
}

.widget-header{
	position:relative;
	border-left: none;
	border-right: none;
	text-align: left;
	padding: 2px;
	margin-top: 1px;
}

.ui-accordion .ui-accordion-header {
	z-index: 1000;
	padding: 2px;
}

.widget-header:hover {
	cursor: pointer;
}

#widget-icons {
	padding: 10px 5px;
	display: block;
	width: 237px;
	height: 566px;
}

#widget-icons div, #dashboard-content .area div {
	text-align: left;
	width: 190px;
	height: 40px;
	margin: 5px auto;
	padding: 5px;
	background-color: #FFFFFF;
	border: 1px solid #cccccc;
}

#dashboard-content .area div {
	width: 90%;
	position: relative;
}

#widget-icons div:hover {
	border-color: #00BB27;
	background-color: #f3f3f3;
}

#widget-icons div img, #dashboard-content .area div img{
	margin: auto;
	height: 30px;
	width: 30px;
	float: left;
}
#widget-icons .widget-id, #dashboard-content .widget-id {
	margin: 0px 10px 0px 55px;
	height: 40px;
	display: block;
}

#dashboard-content .widget-id {
	margin: 0px;
	margin-left: 50px;
}

.widget-medium {
	background: url(/db/images/medium-widget.png) no-repeat left bottom;
}

.widget-large {
        background: transparent url(/db/images/full-widget.png) no-repeat left bottom;
}

.widget-small {
        background: url(/db/images/small-widget.png) no-repeat left bottom;
}

#widget-toolbox {
/*	overflow: hidden; */
	width: 250px;
	margin-top: 10px;
	padding: 10px 0px;
    position: absolute;
    top: 50px;
    left: 795px;
}

#widget-toolbox .ui-accordion-content {
position: static;
}

#dashboard-content .area {
	overflow: auto;
}

#dashboard-content h4 {
	position: relative;
}
	
.widget-icon {
	width: 20px;
	height: 20px;
}

.angle-widget-icon {
        background: url(/db/images/angle_widget_icon.jpg) no-repeat 10px 0px;
}

.area-widget-icon {
	background: url(/db/images/area_widget_icon.gif) no-repeat left 5px;
}

.bar-widget-icon {
        background: url(/db/images/bar_widget_icon.gif) no-repeat left 5px;
}

.bulb-widget-icon {
        background: url(/db/images/bulb_widget_icon.jpg) no-repeat left top;
}

.bullet-widget-icon {
        background: url(/db/images/bullet_widget_icon.gif) no-repeat 5px 5px;

}

.col-widget-icon {
        background: url(/db/images/col_widget_icon.jpg) no-repeat 4px 5px;

}
.cylinder-widget-icon {
        background: url(/db/images/cylinder_widget_icon.jpg) no-repeat 5px top;

}
.donut-widget-icon {
        background: url(/db/images/donut_widget_icon.jpg) no-repeat left 5px;

}
.funnel-widget-icon {
        background: url(/db/images/funnel_widget_icon.gif) no-repeat left 5px;

}
.gantt-widget-icon {
        background: url(/db/images/gantt_widget_icon.gif) no-repeat left 5px;

}
.html-widget-icon {
        background: url(/db/images/html_widget_icon.png) no-repeat left top;

}

.led-widget-icon {
        background: url(/db/images/led_widget_icon.jpg) no-repeat 5px 20px;
}

.linear-widget-icon {
        background: url(/db/images/linear_widget_icon.jpg) no-repeat 5px 20px;
}

.line-widget-icon {
        background: url(/db/images/line_widget_icon.gif) no-repeat left 10px;

}

.map-widget-icon {
        background: url(/db/images/map_widget_icon.jpg) no-repeat 5px top;

}

.pie-widget-icon {
        background: url(/db/images/pie_widget_icon.jpg) no-repeat left top;

}

.spark-widget-icon {
        background: url(/db/images/spark_widget_icon.gif) no-repeat left 5px;

}

.pyramid-widget-icon {
        background: url(/db/images/pyramid_widget_icon.jpg) no-repeat 5px top;

}

.table-widget-icon {
        background: url(/db/images/table_widget_icon.jpg) no-repeat left top;

}

.text-widget-icon {
        background: url(/db/images/text_widget_icon.png) no-repeat left top;

}

.therm-widget-icon {
        background: url(/db/images/therm_widget_icon.jpg) no-repeat 10px top;

}

.delete-widget {
	text-indent: -5000px; 
	padding: 0px;
	background: transparent url(/db/images/close_icon2.gif) no-repeat scroll center center; 
	display: block; 
	position: absolute; 
	width: 20px; 
	height: 20px; 
	overflow: hidden;
	top: 0px;
	right: 0px;
}

#layout-body .area div{
	position: relative;
}


#widget-pane table tbody tr {
	cursor: move;
}


#layout-body div.last {
	margin-left: 10px;
}

#layout-body .three-column div.middle {
	margin: 0px 10px;
}
#layout-body .three-column div.last {
	margin-left: 0px;
}

#layout-body .three-column .area {
	width: 234px;
}

#layout-body div.active {
	display: block;
}

#layout-footer {
margin-top: 10px;
}

.required-field {
	border: 1px red solid;
}

#dashboard-controls {
	position: absolute;
	top: -20px;
	right: 10px;
	width: 100%;
	text-align: right; 
}

#dashboard-controls .button-pane-dialog button:hover {
	color: #cccccc;
}

#user_password {
border: auto;
width: auto;
}

#new-user {
    height: 285px !important;
}
    
.ui-dialog-content table td {
border: none;
}

a.add-widget, a.add-user, a.add-dashboard, a.add-feed, a.add-file {
	background: transparent url(/db/icons/cog_add.png) no-repeat 0 0;
	text-indent: 20px;
	text-decoration: none;
	color: #ff8125;
	display: block;
}

a.add-user {
	background:  transparent url(/db/icons/user_add.png) no-repeat 0 0;
}

a.add-file {
	background:  transparent url(/db/icons/add.png) no-repeat 0 0;
}

a.add-dashboard {
	background:  transparent url(/db/icons/layout_add.png) no-repeat 0 0;
}

a.add-feed {
        background:  transparent url(/db/icons/feed_add.png) no-repeat 0 0;
}

#dashboard-content .area div.ui-draggable-dragging {
	width: 190px;	
}

#dashboard-content .area #droppable-pos {
	background-color: #e2e2e2;
}

h3.title {
	margin: 0;
	padding: 5px;
	font-size: 13px;
	color: #333;
	border-bottom: 1px solid #696E72;
}
ol.dashboard_list li a {
	display: block;
	height: 30px;
	padding: 0 8px;
	line-height: 30px;	
	text-decoration: none;
	float:left;
}

.widget_input {
	border-bottom: 1px solid #696E72;
	padding:5px 10px 5px 164px;
	position:relative;	
}
ol.dashboard_list li {
/*display:inline-table;*/
}
ol.header_nav_links li {
height:30px;
vertical-align:middle;
}
.hidden {
display:none;
}

/* Track */
#handle1 {
    background: url(/db/images/sliderHandle2.png) 0 0 no-repeat;
}

#handle1 img {
    display: none;
}

/* Printing Window */
.print_window .widget_controls {
	display:none;
}


#logo {
	margin-top:8px;
}

/* ---------------------------------------------------------------------
Sticky Footer Styles
------------------------------------------------------------------------ */

html, body {height: 100%;}

#mainWrapper {min-height: 100%;}

#content {
	overflow:auto;
	padding-bottom: 33px; 
}  /* must be same height as the footer */

#footer {
	position: relative;
	margin-top: -33px; /* negative value of footer height */
	height: 33px;
	clear:both;
}

/*Opera Fix*/
body:before {
	content:"";
	height:100%;
	float:left;
	width:0;
	margin-top:-32767px;/
}

/* ---------------------------------------------------------------------
Package Management
------------------------------------------------------------------------ */

div#tabs {
	clear: both;
}

div.tab_content {
	max-height: 500px;
	overflow: auto;
}

div#submit {
	float: right;
	margin-bottom: 5px;
}

.package_save {
    padding: .2em .6em .3em;
    cursor: pointer;
}
                                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/css/jquery-ui-1.8.custom.css                                                  0000666 0000000 0000000 00000074346 12534142432 020720  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
* jQuery UI CSS Framework
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
*/

/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
.ui-helper-clearfix { display: inline-block; }
/* required comment for clearfix to work in Opera \*/
* html .ui-helper-clearfix { height:1%; }
.ui-helper-clearfix { display:block; }
/* end clearfix */
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }


/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }


/* Icons
----------------------------------*/

/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }


/* Misc visuals
----------------------------------*/

/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }


/*
* jQuery UI CSS Framework
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=2191c0&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=75&borderColorHeader=4297d7&fcHeader=eaf5f7&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=0078ae&bgColorDefault=0078ae&bgTextureDefault=02_glass.png&bgImgOpacityDefault=45&borderColorDefault=77d5f7&fcDefault=ffffff&iconColorDefault=e0fdff&bgColorHover=79c9ec&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=448dae&fcHover=026890&iconColorHover=056b93&bgColorActive=6eac2c&bgTextureActive=12_gloss_wave.png&bgImgOpacityActive=50&borderColorActive=acdd4a&fcActive=ffffff&iconColorActive=f5e175&bgColorHighlight=f8da4e&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcd113&fcHighlight=915608&iconColorHighlight=f7a50d&bgColorError=e14f1c&bgTextureError=12_gloss_wave.png&bgImgOpacityError=45&borderColorError=cd0a0a&fcError=ffffff&iconColorError=fcd113&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=75&opacityOverlay=30&bgColorShadow=999999&bgTextureShadow=01_flat.png&bgImgOpacityShadow=55&opacityShadow=45&thicknessShadow=0px&offsetTopShadow=5px&offsetLeftShadow=5px&cornerRadiusShadow=5px
*/


/* Component containers
----------------------------------*/
.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
.ui-widget .ui-widget { font-size: 1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd url(/db/gridtable/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; color: #222222; }
.ui-widget-content a { color: #222222; }
.ui-widget-header { border: 1px solid #4297d7; background: #2191c0 url(/db/gridtable/ui-bg_gloss-wave_75_2191c0_500x100.png) 50% 50% repeat-x; color: #eaf5f7; font-weight: bold; }
.ui-widget-header a { color: #eaf5f7; }

/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #77d5f7; background: #0078ae url(/db/gridtable/ui-bg_glass_45_0078ae_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #ffffff; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #ffffff; text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #448dae; background: #79c9ec url(/db/gridtable/ui-bg_glass_75_79c9ec_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #026890; }
.ui-state-hover a, .ui-state-hover a:hover { color: #026890; text-decoration: none; }
.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #acdd4a; background: #6eac2c url(/db/gridtable/ui-bg_gloss-wave_50_6eac2c_500x100.png) 50% 50% repeat-x; font-weight: normal; color: #ffffff; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; }
.ui-widget :active { outline: none; }

/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fcd113; background: #f8da4e url(/db/gridtable/ui-bg_glass_55_f8da4e_1x400.png) 50% 50% repeat-x; color: #915608; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #915608; }
.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #e14f1c url(/db/gridtable/ui-bg_gloss-wave_45_e14f1c_500x100.png) 50% top repeat-x; color: #ffffff; }
.ui-state-error a, .ui-widget-content .ui-state-error a { color: #ffffff; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }

/* Icons
----------------------------------*/

/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(/db/gridtable/ui-icons_0078ae_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(/db/gridtable/ui-icons_0078ae_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(/db/gridtable/ui-icons_d8e7f3_256x240.png); }
.ui-state-default .ui-icon { background-image: url(/db/gridtable/ui-icons_e0fdff_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(/db/gridtable/ui-icons_056b93_256x240.png); }
.ui-state-active .ui-icon {background-image: url(/db/gridtable/ui-icons_f5e175_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(/db/gridtable/ui-icons_f7a50d_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(/db/gridtable/ui-icons_fcd113_256x240.png); }

/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-off { background-position: -96px -144px; }
.ui-icon-radio-on { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }


/* Misc visuals
----------------------------------*/

/* Corner radius */
.ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; }
.ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; }
.ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }
.ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
.ui-corner-top { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; }
.ui-corner-bottom { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
.ui-corner-right {  -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
.ui-corner-left { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }
.ui-corner-all { -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }

/* Overlays */
.ui-widget-overlay { background: #aaaaaa url(/db/gridtable/ui-bg_flat_75_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
.ui-widget-shadow { margin: 5px 0 0 5px; padding: 0px; background: #999999 url(/db/gridtable/ui-bg_flat_55_999999_40x100.png) 50% 50% repeat-x; opacity: .45;filter:Alpha(Opacity=45); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* Resizable
----------------------------------*/
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Accordion
----------------------------------*/
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
.ui-accordion .ui-accordion-li-fix { display: inline; }
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
.ui-accordion .ui-accordion-content-active { display: block; }/* Autocomplete
----------------------------------*/
.ui-autocomplete { position: absolute; cursor: default; }	
.ui-autocomplete-loading { background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; }

/* workarounds */
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */

/* Menu
----------------------------------*/
.ui-menu {
	list-style:none;
	padding: 2px;
	margin: 0;
	display:block;
}
.ui-menu .ui-menu {
	margin-top: -3px;
}
.ui-menu .ui-menu-item {
	margin:0;
	padding: 0;
	width: 100%;
}
.ui-menu .ui-menu-item a {
	text-decoration:none;
	display:block;
	padding:.2em .4em;
	line-height:1.5;
	zoom:1;
}
.ui-menu .ui-menu-item a.ui-state-hover,
.ui-menu .ui-menu-item a.ui-state-active {
	margin: -1px;
}
/* Button
----------------------------------*/

.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
.ui-button-icons-only { width: 3.4em; } 
button.ui-button-icons-only { width: 3.7em; } 

/*button text element */
.ui-button .ui-button-text { display: block; line-height: 1.4;  }
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
.ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
/* no icon support for input elements, provide padding by default */
input.ui-button { padding: .4em 1em; }

/*button icon element(s) */
.ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
.ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }

/*button sets*/
.ui-buttonset { margin-right: 7px; }
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }

/* workarounds */
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */





/* Dialog
----------------------------------*/
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative;  }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } 
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
/* Slider
----------------------------------*/
.ui-slider { position: relative; text-align: left; }
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }

.ui-slider-horizontal { height: .8em; }
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
.ui-slider-horizontal .ui-slider-range-max { right: 0; }

.ui-slider-vertical { width: .8em; height: 100px; }
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
----------------------------------*/
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
.ui-tabs .ui-tabs-panel { display: block; border: 0; padding: 1em 1.4em; background: none; }
.ui-tabs .ui-tabs-hide { display: none !important; }
/* Datepicker
----------------------------------*/
.ui-datepicker { width: 17em; padding: .2em .2em 0; }
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
.ui-datepicker .ui-datepicker-prev { left:2px; }
.ui-datepicker .ui-datepicker-next { right:2px; }
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
.ui-datepicker select.ui-datepicker-month, 
.ui-datepicker select.ui-datepicker-year { width: 49%;}
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
.ui-datepicker td { border: 0; padding: 1px; }
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }

/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi { width:auto; }
.ui-datepicker-multi .ui-datepicker-group { float:left; }
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
.ui-datepicker-row-break { clear:both; width:100%; }

/* RTL support */
.ui-datepicker-rtl { direction: rtl; }
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }

/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
.ui-datepicker-cover {
    display: none; /*sorry for IE5*/
    display/**/: block; /*sorry for IE5*/
    position: absolute; /*must have*/
    z-index: -1; /*must have*/
    filter: mask(); /*must have*/
    top: -4px; /*must have*/
    left: -4px; /*must have*/
    width: 200px; /*must have*/
    height: 200px; /*must have*/
}/* Progressbar
----------------------------------*/
.ui-progressbar { height:2em; text-align: left; }
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/css/theme1.css                                                                0000777 0000000 0000000 00000002165 12534142432 016325  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   html {
	background: url(/db/images/bg_body_top_teal.jpg) repeat-x;	
}
h3.title {
	background: #8B9298 url(/db/images/bg_widget_header_teal.gif) repeat-x 0 0;
	margin: 0;
	padding: 2px 5px;
	font-size: 13px;
	color: #333;
	border-bottom: 1px solid #696E72;
}
ol.dashboard_list li a {
	background: url(/db/images/bg_dashboard_nav_link_teal.jpg) repeat-x 0 0;
	color: #f2f2f2;
	display: block;
	height: 30px;
	padding: 0 8px;
	line-height: 30px;	
	text-decoration: none;
	float:left;
}
#dashboard_nav {
	background: url(/db/images/bg_dashboard_nav_teal.jpg) no-repeat 0 0;
	position: absolute;
	top: 0;
	right: 150px;
	padding: 0 0 0 13px;
	height: 30px;
	border-right: 1px solid #CCCCCC;		
}
ol.dashboard_list li a:hover {
	
	background: url(/db/images/bg_dashboard_nav_teal_hover.jpg) repeat-x 0 0;
}
.widget_input {
	background: silver;
	border-bottom: 1px solid #696E72;
	padding:5px 10px 5px 125px;
	position:relative;	
}
ol.dashboard_list li {

display:inline-table;
}
#header_nav {
background:transparent url(/db/images/bg_header_nav_links_teal.jpg) no-repeat scroll 0 0;
}
ol.header_nav_links li {
height:30px;
vertical-align:middle;
}
                                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/docroot/db/css/screen_ie.css                                                             0000666 0000000 0000000 00000000324 12534142432 017066  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   #content div.panes div ul.form {
	margin-top: 7px;
	width: 100%;
}

#content div.panes div ul.form li {
	width: 100%;
}


.modal ul.form {
	margin-top: 7px;
		width: 100%;
} 


.modal ul.form li {
	width: 100%;
}                                                                                                                                                                                                                                                                                                            ./mvappsvr/docroot/db/css/jquery.sheet.css                                                          0000666 0000000 0000000 00000012410 12534142432 017557  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /* Controls styling */
#jSheetControls_loc, #jSheetControls_fx
{
	border: none;
	background: none ! important;
}

#jSheetControls_formula
{
	width: 99%;
    height: 17px;
}

#jSheetLog
{
	height: 100px;
	width: 100%;
	overflow-y: scroll;
	position: relative;
}

#jSheetControls, #jSheetControls table
{
	padding: 0px ! important;
	background-color: transparent ! important;
	border: none ! important;
	width: 100%; 
	margin: 0px; 
}

#jSheetMenu
{
	cursor: pointer;
	background-color: transparent ! important;
	padding: 0px ! important;
	margin: 0px ! important;
	border: none ! important;
}

#jSheetMenu *
{
	color: inherit ! important;
	background-color: inherit ! important;
}
.menu
{
	display: none;
}
.rootVoice, .rootVoice .selected
{
	padding: 2px ! important;
	font-size: 1em ! important;
}
#titleHolder
{
	padding-left: 10px;
}
.jSheetUI
{
	width: inherit ! important;
	border-color: inherit ! important;
}
#jSheetTabContainer
{
	vertical-align: bottom;
	text-align: left ! important;
}
#jSheetTabContainer span
{
	
	padding: 2px 5px 0 5px ! important;
	cursor: pointer;
}
#jSheetTabContainer *, .menuDiv *
{
	font-size: 1em ! important;
}
#sheetTitle
{
	border: none ! important;
}

#sheetTitle a
{
	font-weight: bold;
	cursor: pointer;
}

.tableControl
{
	border-collapse: collapse ! important;
	border: none ! important;
	margin: none ! important;
	padding: none ! important;
	position: absolute ! important;
}

/* Sheet styling */
.jSheet
{
	margin-top: -1px ! important;
	margin-left: -1px ! important;
    table-layout: fixed;
    empty-cells: show;
	background-image: none ! important;
	margin-bottom: 20px ! important;
	margin-right: 20px ! important;
	font-family: arial, serif;
	overflow: hidden;
	height: auto ! important;
	border-spacing: 0px ! important;
	border-width: 1px ! important;
}
.jSheet tbody
{
	background-color: transparent;
	color: inherit ! important;
	border-color: inherit ! important;
}

.jSheet tr {
	border-color: inherit ! important;
	padding: 0px ! important;
	border-style: solid ! important;
	background-color: transparent;
	-moz-border-radius: 0px 0px 0px 0px;
	color:  inherit ! important;
	border-width: 0px ! important;
}
.jSheet td {
	border-width: 1px ! important;
	border-color: inherit ! important;
	padding: 0px ! important;
	border-style: solid ! important;
	-moz-border-radius: 0px 0px 0px 0px;
	overflow: hidden ! important;
    text-overflow: ellipsis ! important;
    white-space: nowrap ! important;
	background-image: none ! important;
	margin: 0px ! important;
	padding: 0px ! important;
	font-size: 1em ! important;
	height: inherit ! important;
	background-color: transparent;
	color:  inherit;
}

.jSheet textarea
{
	font-family: inherit;
	border: inherit ! important;
	font-size: 1em ! important;
	color: inherit ! important;
	background-color: inherit ! important;
	margin: 0px ! important;
	padding: 0px ! important;
	width: 100%;
	left: inherit;
	height: inherit ! important;
	position: relative;
	font-weight: inherit;
	text-align: inherit;
}

.jSheet colgroup col
{
	border: none ! important;
}
 .jSheetUI, .jSheetUI tr, .jSheetUI td, .jSheetUI tbody, .jSheetUI #jSheetControls textarea
{
	border-width: 1px ! important;
}
/* Containers styleing*/
.jSheetBarCorner
{
	cursor: pointer;
	border-width: 1px ! important;
}

.jSheetBarCornerParent
{
	border: none ! important;
}

.jSheetBarTopParent
{
    position: relative ! important;
	background-image: none ! important;
	vertical-align: middle;
	overflow: hidden ! important;
	cursor: pointer;
	overflow: hidden ! important;
}

.jSheetBarLeftParent
{
    position: relative ! important;
	background-image: none ! important;
	vertical-align: middle;
	overflow: hidden ! important;
	cursor: pointer;
	overflow: hidden ! important;
}

.jSheetEditPane
{
    overflow: auto;
	background-image: none ! important;
	border-width: 0px;
}
/* Bar item styling */

.jSheetBarTop
{
    position: relative ! important;
	border-width: 0px ! important;
}

.jSheetBarLeft
{
	position: relative ! important;
	border-width: 0px ! important;
}
.jSheetBarLeft div
{
	text-align: center;
	font-size: .8em;
	height: inherit;
	border-left: none ! important;
	border-right: none ! important;
	position: relative ! important;
	vertical-align: middle ! important;
	min-width: 14px ! important;
}
.jSheetBarTop div
{
	text-align: center ! important;
	font-size: .8em;
	float: left;
	display:block;
	height: inherit ! important;
	padding-top: 2px;
	overflow: hidden;
	border-top: none ! important;
	border-bottom: none ! important;
}

.safeImg
{
	display: inline;
}

/* Cell styler classes */
.styleBold
{ font-weight: bold; }
.styleItalics	
{ font-style: italic; }
.styleUnderline	
{ text-decoration: underline; }
.styleLineThrough
{ text-decoration: line-through;}
.styleLeft		
{ text-align: left; }
.styleRight		
{ text-align: right; }
.styleCenter	
{ text-align: center; }
.styleTop		
{ vertical-align: top; }
.styleMiddle	
{ vertical-align: middle; }
.styleBottom	
{ vertical-align: bottom; }
.styleUpper 		
{ text-transform: uppercase; }
.styleCapital 	
{ text-transform: capitalize; }
.styleLower 		
{ text-transform: lowercase; }
.styleHidden 	
{ display: none; }
.styleWrap
{ word-wrap: break-word; }

/** Custom skinning **/
.gridtable {
	height: 500px;	
}

.gridtable table td {
	border-bottom: none;
	padding: 0px;
	margin: 0px;
}
.gridtable table {
	margin: 0px;
	padding: 0px;
}                                                                                                                                                                                                                                                        ./mvappsvr/docroot/db/css/reset-fonts-grids.css                                                     0000777 0000000 0000000 00000006217 12534142432 020523  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
Copyright (c) 2007, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.2.2
*/
/*reset.css*/body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul {list-style:none;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym {border:0;}
/*fonts.css*/body{font:13px arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}table {font-size:inherit;font:100%;}select, input, textarea {font:99% arial,helvetica,clean,sans-serif;}pre, code {font:115% monospace;*font-size:100%;}body * {line-height:1.22em;}
/*grids.css*/#ft{clear:both;}#doc,#doc2,#doc3,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.3em;min-width:750px;}#doc2{width:73.074em;*width:71.313em;min-width:950px;}#doc3{margin:auto 10px;width:auto;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.3207em;*width:12.0106em;}.yui-t1 #yui-main .yui-b{margin-left:13.3207em;*margin-left:13.0106em;}.yui-t2 .yui-b{float:left;width:13.8456em;*width:13.512em;}.yui-t2 #yui-main .yui-b{margin-left:14.8456em;*margin-left:14.512em;}.yui-t3 .yui-b{float:left;width:23.0759em;*width:22.52em;}.yui-t3 #yui-main .yui-b{margin-left:24.0759em;*margin-left:23.52em;}.yui-t4 .yui-b{float:right;width:13.8456em;*width:13.512em;}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.512em;}.yui-t5 .yui-b{float:right;width:18.4608em;*width:18.016em;}.yui-t5 #yui-main .yui-b{margin-right:19.4608em;*margin-right:19.016em;}.yui-t6 .yui-b{float:right;width:23.0759em;*width:22.52em;}.yui-t6 #yui-main .yui-b{margin-right:24.0759em;*margin-right:23.52em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-g .yui-u,.yui-g .yui-g,.yui-gc .yui-u,.yui-gc .yui-g .yui-u,.yui-ge .yui-u,.yui-gf .yui-u{float:right;display:inline;}.yui-g div.first,.yui-gc div.first,.yui-gc div.first div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first{float:left;}.yui-g .yui-u,.yui-g .yui-g{width:49.1%;}.yui-g .yui-g .yui-u,.yui-gc .yui-g .yui-u{width:48.1%;}.yui-gb .yui-u,.yui-gc .yui-u,.yui-gd .yui-u{float:left;margin-left:2%;*margin-left:1.895%;width:32%;}.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-gc div.first,.yui-gd .yui-u{width:66%;}.yui-gd div.first{width:32%;}.yui-ge .yui-u{width:24%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;}.yui-gf div.first{width:24%;}.yui-ge div.first{width:74.2%;}#bd:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#bd,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;}                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/css/jquery-ui.css                                                             0000777 0000000 0000000 00000060400 12534142432 017070  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   .ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
.ui-helper-clearfix { display: inline-block; }
* html .ui-helper-clearfix { height:1%; }
.ui-helper-clearfix { display:block; }
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }


.ui-state-disabled { cursor: default !important; }


.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }


.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }

.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(/db/images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
.ui-widget-content a { color: #333333; }
.ui-widget-header { border: 1px solid #e07423; background: #ff8125 url() 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
.ui-widget-header a { color: #ffffff; }

.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(/db/images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #ff8125; outline: none; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; outline: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(/db/images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; outline: none; }
.ui-state-hover a, .ui-state-hover a:hover { color: #C20000; text-decoration: none; outline: none; }
.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(/db/images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; outline: none; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; outline: none; text-decoration: none; }

.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(/db/images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(/db/images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
.ui-state-error a, .ui-widget-content .ui-state-error a { color: #ffffff; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }

.ui-icon { width: 16px; height: 16px; background-image: url(/db/images/ui-icons_222222_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(/db/images/ui-icons_222222_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(/db/images/ui-icons_ffffff_256x240.png); }
.ui-state-default .ui-icon { background-image: url(/db/images/ui-icons_ef8c08_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(/db/images/ui-icons_ef8c08_256x240.png); }
.ui-state-active .ui-icon {background-image: url(/db/images/ui-icons_ef8c08_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(/db/images/ui-icons_228ef1_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(/db/images/ui-icons_ffd27a_256x240.png); }

.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-off { background-position: -96px -144px; }
.ui-icon-radio-on { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; }
.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
.ui-corner-right {  -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; }

.ui-widget-overlay { background: #666666 url(/db/images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(/db/images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; }
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; text-indent: 28px; }
.ui-accordion .ui-accordion-li-fix { display: inline; }
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
.ui-accordion .ui-accordion-content-active { display: block; }
.ui-datepicker { width: 17em; padding: .2em .2em 0; }
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
.ui-datepicker .ui-datepicker-prev { left:2px; }
.ui-datepicker .ui-datepicker-next { right:2px; }
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
.ui-datepicker select.ui-datepicker-month, 
.ui-datepicker select.ui-datepicker-year { width: 49%;}
.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
.ui-datepicker td { border: 0; padding: 1px; }
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }

.ui-datepicker.ui-datepicker-multi { width:auto; }
.ui-datepicker-multi .ui-datepicker-group { float:left; }
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
.ui-datepicker-row-break { clear:both; width:100%; }

.ui-datepicker-rtl { direction: rtl; }
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }

.ui-datepicker-cover {
    display: none; 
    display: block; 
    position: absolute;
    z-index: -1; 
    filter: mask();
    top: -4px; 
    left: -4px; 
    width: 200px; 
    height: 200px;
}
.ui-dialog { position: relative; padding: .2em; width: 300px; }
.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative;  }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; } 
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
.ui-progressbar { height:2em; text-align: left; }
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/
.ui-slider { position: relative; text-align: left; }
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }

.ui-slider-horizontal { height: .8em; }
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
.ui-slider-horizontal .ui-slider-range-max { right: 0; }

.ui-slider-vertical { width: .8em; height: 100px; }
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
.ui-slider-vertical .ui-slider-range-max { top: 0; }
.ui-tabs { padding: .2em; zoom: 1; }
.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } 
.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
.ui-tabs .ui-tabs-hide { display: none !important; }

.ui-widget-content label {
display: block;
}
.ui-widget-content input.text {
margin: 12px;
padding: 0.4em;
width: 95%;
}
 
                                                                                                                                                                                                                                                                ./mvappsvr/docroot/db/css/ie7.css                                                                   0000666 0000000 0000000 00000000622 12534142432 015617  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ol.dashboard_list li,
ol.header_nav_links li {
	display:inline;
	zoom:1;
}

ol.header_nav_links li {
	padding-top:7px;
	height:23px;
}

/*-------------start IE7 design exception------------*/
/*
#dashboard_nav {
background-image:none;
padding:0px;
}

ol.dashboard_list li {
float:left;
white-space:nowrap;
}

#header #logo {
margin-top:30px;
}*/

/*-------------end IE7 design	exception------------*/

                                                                                                              ./mvappsvr/docroot/db/css/print.css                                                                 0000666 0000000 0000000 00000003142 12534142432 016267  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
#printFrame {
	background-color:red;
	border:1px solid red;
}

#header, #outerTrackWrapper, #slider-form, #dashboardWrapper, #footer { display:none; }
*/

#printFrame { 
	position:absolute !important;
	top:65px !important;
	left:0px !important;
}

#header,
#footer,
#outerTrackWrapper,
#slider-form,
.widget_content_header,
#dashboardWrapper {
	display:none;
}

.printme {
	margin:0;
	padding:0;
	overflow:visible !important;
}

.printme,
.printme div {
	overflow:visible !important;
}

body,
#dashboardWrapper,
#dashboard {
	width:100%;
}

.printme {
	border:none;
	width:100%;
	margin:0px auto;
	text-align:left;
}

.printme .widget_controls,
.printme script,
.printme script * {
	display:none;
}

.printme,
.printme * {
	float:none;
}

.printme table {
 	width:100%;
}

.printme pre {
	width:95%;
	color:#000000;
}

.printme input {
	max-width:250pt !important;
}

.printme input[type=submit],
.printme input[type=button] {
	display:none;
}

.printme thead { display:table-header-group; }
.printme tbody { display:table-row-group; }
 
.printme td,
.printme th,
.printme table,
.printme tr {
        border:none;
}

.printme tbody td {
        border-bottom:0.3pt solid #cccccc;
}

.printme thead th {
	border-bottom:1pt solid #000000;
}

.printme thead { display:table-header-group; }
.printme tbody { display:table-row-group; }

.widget_content_padding { padding:0px 0px 0px 0px; }

.printme h3.title {
	border:none;
	font-size:14pt;
	padding:0px;
	color:#000000;
	margin-bottom:20pt;
	padding-bottom:10pt;
	border-bottom:0.3pt solid #000000;
	background-color:transparent;
	text-align:left;
}

.widget_input {
	border:none;
}
                                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/docroot/db/css/forms.css                                                                 0000777 0000000 0000000 00000001217 12534142432 016265  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   

table.formgrid {
	margin: 0;
	padding: 0;
	border: none;
	border-collapse: collapse;
	border-width: 0;
}

table.formgrid th {
	margin: 0;
	padding: 0;
	width: auto;
	height: 30px;
	background: none;
	border: none;
	font-weight: bold;
	text-align: right;
}

table.formgrid tr, table.formgrid td {
	margin: 0;
	padding: 0;
	border: none;
}

table.formgrid td {
	width: auto;
	height: 30px;
	text-align: left;
}

form {
	margin: 0;
	padding: 0;
}

.text, .password {
	padding: 3px 5px 0 5px;
	width: auto;
	height: 18px;
}

.btn {
	padding: 3px;
	width: auto;
}

label {
	padding: 0 10px;
	width: auto;
}                                                                                                                                                                                                                                                                                                                                                                                 ./mvappsvr/docroot/db/css/reset.css                                                                 0000666 0000000 0000000 00000001531 12534142432 016255  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ﻿html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	font-size: 100%;
	vertical-align: baseline;
	background: transparent;
}
body {
	line-height: 1;
}
ol, ul {
	list-style: none;
}
blockquote, q {
	quotes: none;
}

/* remember to define focus styles! */
:focus {
	outline: 0;
}

/* remember to highlight inserts somehow! */
ins {
	text-decoration: none;
}
del {
	text-decoration: line-through;
}

/* tables still need 'cellspacing="0"' in the markup */
table {
	border-collapse: collapse;
	border-spacing: 0;
}                                                                                                                                                                       ./mvappsvr/docroot/db/css/application_larger.css                                                    0000644 0000000 0000000 00000040176 13005675162 021003  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   @import "admin.css";
@import "forms.css";

body {
	margin: 0;
	padding: 0;
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
	color: #333;
	text-align:center;
}

a:link, a:visited {
	text-decoration: underline;
	color: #ff8125;
}

a:hover {
	text-decoration: underline;
	color: #333;
}

a.bullet_link:link, a.bullet_link:visited {
	padding-left: 15px;
	background: url(/db/images/bullet.gif) no-repeat left center;
}

.brClear {
	margin: 0;
	height: 0;
	font-size: 1px;
	line-height: 0px;
	clear: both;
}

.brBreak {
	line-height: 25px;
	clear: both;
}

h3.title {
	background: #8B9298 url(/db/images/bg_widget_header.gif) repeat-x 0 0;
	margin: 0;
	padding: 5px;
	font-size: 13px;
	color: #333;
	border-bottom: 1px solid #696E72;
}

table {
	margin: 10px 0;
	border-collapse: collapse;
}

table th {
	padding: 5px;
	background: #D8D8D8;
	border: 1px solid #CCC;
	font-weight: bold;
}

table td {
	padding: 5px;
	border-bottom: 1px solid #CCC;
/*	text-align: left; */
}

h1 {
	color:#555555;
	font-size:28px;
	font-weight:normal;
	letter-spacing:-2px;
	margin:0pt 0pt 8px;
}

pre {
	padding: 10px;
	background: #E4E4E4;
	border: 1px dashed #CCC;
	color: #7D7D7D;
}

#dashboardWrapper {
	margin: 0 auto 0 auto;
	padding: 10px 0 0 0;
	background: url(/db/images/bg_dashboard_larger.gif) no-repeat 0 0;
	width: 1140px;
	clear: both;
	text-align:left;
}

#dashboard {
	margin: 0 auto;
	padding: 10px;
	padding-top: 0;
	width: 1120px;
	position: relative;
	text-align:left;
	clear:both;
}

#mainWrapper {
	margin: 0 auto;
	padding: 0;
	width: 1140px;
	/*clear: both;*/
	text-align:left;
}

#main {
	margin: 0 auto;
	padding: 10px;
	width: 1120px;
	float: left;
	position: relative;
}

#pageheader {
	padding: 16px 0 0 10px;
	width: 1115px;
	height: 44px;
	background: url(/db/images/bg_pageheader.gif) no-repeat bottom;
}

#footer {
	clear:both;
}

h1.pagetitle {
	font-size: 20px;
	color: #FFF;
}

/* Area Styles */
.area {
	margin: 5px 0 0 0;
}

/* Widget Styles */
.widget {
	margin: 0 5px 10px 5px;
	border: 1px solid #696E72;
	position: relative;
}

.widget_controls {
	float: right;
	height: 20px;
	margin: 5px;
}

.widget_input {
	background: silver;
	border-bottom: 1px solid #696E72;
	padding:5px 10px 5px 164px;
	position:relative;	
}

.widget_control {
	margin:0 0 2px 0;
	text-align:left;
}

.widget_control label {
	display:block;
	width:160px;
	text-align:right;
	position:absolute;
	margin-left:-175px;
	color:#555555;
}

.widget_control input[type=text], .widget_control input[type=password], .widget_control textarea {
	border-top: 1px solid #666666;	
	border-left:1px solid #666666;
	border-bottom:1px solid #AAAAAA;
	border-right:1px solid #AAAAAA;	
}

.widget_control input.datepicker {
	width:165px;
}

.widget_control .hint  {
	font-size:smaller;
	color:#666666;
}


.widget_content {
	width: 100%;
	overflow: auto;
}

.widget_content_padding {
	padding: 5px 10px;
}


/*td.right, table.align-right tr td {
	text-align: right;
}

td.left, table.align-left tr td {
	text-align: left;
}
*/
.widget_content_header, .widget_content_footer {
	overflow: auto;
}

.clear {
	clear: both;
	height:1px;
	line-height:1px;
}

.widget_corner {
	height: 25px;
	line-height: 25px;
	padding: 0 5px;
}

.widget_corner img.icon {
	vertical-align: bottom;
}

.widget_blcorner, .widget_tlcorner {
	float: left;
}

.widget_trcorner, .widget_brcorner {
	float:right
}


/* Universal Layout Styles */
#area1, #area5 {
	clear:both;
}


/* Layout 3: 3 equal columns */
.layout3 #area2{
	float:left;
	width:365px;
	margin-right:13px;
}

.layout3 #area3{
	float:left;
	width:365px;
	margin-right:12px;
}

.layout3 #area4{
	float:left;
	width:365px;
}


/* Layout 2: left sidebar */
.layout2 #area2{
	float:left;
	width:410px;
	margin-right:10px;
}

.layout2 #area3{
	float:left;
	width:630px;
}

.layout2 #area4{
	display:none;
}


/* Layout 4: right sidebar */
.layout4 #area2{
	float:left;
	width:630px;
	margin-right:10px;
}

.layout4 #area3{
	float:left;
	width:410px;
}

.layout4 #area4{
	display:none;
}


/* Layout 1: single column */
.layout1 #area2{
}

.layout1 #area3{
	display:none;
}

.layout1 #area4{
	display:none;
}

/*#loginbox {
	margin: 0 auto;
	width: 400px;
	background: #EEE;
	border: 1px solid #CCC;
}
*/

#loginbox {
	padding-bottom:30px;
}

h3.title_login {
	margin: 0;
	padding: 0;
	line-height: 30px;
	background: #CCC;
}

a.btn:link, a.btn:visited, .btn {
	background: #ff8125;
	border-right: 1px solid #CE0000;
	border-bottom: 1px solid #CE0000;
	text-decoration: none;
	color: #FFF;
}

a.btn:hover {
	text-decoration: underline;
}

html {
	background: url(/db/images/bg_body_top.jpg) repeat-x;	
}

#header {
	/*margin: 0 auto;
	height: 70px;
	width: 100%;*/
}

#signature {
 	clear:both;
	padding: 2px 10px 3px 10px;
	text-align:center;
	border-top:1px solid #999999;
 	background-color: #e8e8e8;
	font-size:11px;
}

#logo {
/*	top: 18px;*/
	left: 20px;
	position: static;
	clear: both;
	text-align: left;
}

#header_nav {
	background: url(/db/images/bg_header_nav_links.jpg) no-repeat 0 0;
/*	position: static;
	top: 0;
	right: 0;*/
	width: 150px;
	float: right;	
}

#header_nav div img,
#header_nav div {
	display: none;
}

#dashboard_nav {
	background: url(/db/images/bg_dashboard_nav.jpg) no-repeat 0 0;
/*	position: static !important;
	top: 0;
	right: 150px;
*/	padding: 0 0 0 13px;
/*	height: 30px;
	border-right: 1px solid #CCCCCC;
*/	text-align:right;		
}

ol.header_nav_links {
	margin: 0;
	float: right;
	position: relative;
}

ol.header_nav_links li, ol.dashboard_list li {
	list-style: none;
	/*float: right;*/
	line-height: 30px;
	display:inline-block;
}

ol.header_nav_links li {
	border-right: 1px solid #CCCCCC;			
	padding: 0 8px;
}

ol.header_nav_links li a {
	text-decoration: none;
	color: #FFFFFF;
}

ol.header_nav_links li a:hover {
	text-decoration: underline;
}

ol.dashboard_list {
	margin: 0;
	padding: 0;
padding-right:4px;
/*        height: 30px;*/
        background:url("/db/images/header_bg_slice.png") repeat-x scroll 0 0 transparent;
}

ol.dashboard_list li {
	color: #FFFFFF;
	border-left: 1px solid #999;
	vertical-align:top;
	margin:0px !important;			
}

ol.dashboard_list li a {
	background: url(/db/images/bg_dashboard_nav_link.jpg) repeat-x 0 0;
	color: #f2f2f2;
	display: block;
	height: 30px;
	/*padding: 0 8px;*/
	padding:0px;
	margin-right:-4px;
	line-height: 30px;	
	text-decoration: none;
	/*float:left;*/
}

ol.dashboard_list li.admin_tab a {
background-image:url(/db/images/bg_header_nav_links.jpg);
background-repeat:repeat-x;
text-decoration:underline;
}

ol.dashboard_list li.admin_tab a:hover {
background-image:url(/db/images/bg_header_nav_links.jpg);
text-decoration:none;
}

ol.dashboard_list li.db_active a, ol.dashboard_list li.db_active a:hover {
	background: url(/db/images/bg_dashboard_nav_active.jpg) repeat-x 0 0;	
	text-decoration:none;
}

ol.dashboard_list li a:hover {
	/* text-decoration: underline;*/
        color: #FFFFFF;
	background: url(/db/images/bg_dashboard_nav_hover.jpg) repeat-x 0 0;
}

#trackWrapper {
	position: relative;
	float: left;
	width: 377px;
	height: 34px;
	background: url(/db/images/backgroundTrackWrapper.png) no-repeat;
	margin: 0px auto 10px;
}

#trackWrapper #trackMsg {
	float: none !important;
	position: absolute !important;
	top: 0;
	left: 0;
}

#trackWrapper #track1 {
	float: none !important;
	position: absolute !important;
	top: 0;
	right: 0;
}

#outerTrackWrapper {
	margin: 0 auto 10px;
	width: 377px;
	height: 34px;
}

#dispRate {
	font-weight: bold;
	font-size: 11px;
	float: left;
	margin: 10px 0 0 8px;
	padding: 0;
	line-height: 11px;
}

#printFrame { 
	position:absolute;
	top:0px;
	left:-9999px;
}

.ctrl {
	margin:0 0 7px 0;
}

.ctrl label {
	display:block;
	color:#555555;
	padding:0;
}

.ctrl input[type=text],  textarea {
	width:99%;
	border-top: 1px solid #666666;	
	border-left:1px solid #666666;
	border-bottom:1px solid #AAAAAA;
	border-right:1px solid #AAAAAA;	
	padding:2px;
}

.ctrl input.datepicker {
	width:165px;
}

.ctrl .hint  {
	font-size:smaller;
	color:#666666;
}

.inline {
	padding-left:190px;
	position:relative;
}

fieldset.inline legend {
	padding-right:5px;
	padding-left:5px;	
	margin-left:-180px;
}

.inline .directions {
	margin-left:-180px;
}

.inline .ctrl label {
	display:block;
	width:180px;
	text-align:right;
	position:absolute;
	margin-left:-190px;
}

.db-layout li {
	margin: 5px 10px;
	display: inline-block;
	border: 4px solid #EEEEEE;
}

.db-layout .active {
	border: 4px solid #00BB27;
}

.db-layout li:hover {
	border: 4px solid #C20000;
}

#dashboard-properties table {
	margin: 0px;
}

#widgets-pane .widget-icon img{
	float: left;
}

.one-column, .two-column .area, .three-column .area {
	width: 100%;
	height: 145px;
	border: 1px dashed #ccc;
	margin: 0px auto 10px;
	text-align: center;
	padding: 10px 0px;
}



#layout-body .one-column .area,
#layout-body .one-column {
	height: 90%; 
}

#layout-body .one-column  {
	padding: 0px;
	display: none;	
}

.two-column .area{
	width: 357px;
	float: left;
}

.two-column, .three-column {
	padding: 0px;
	display: none;
	height: 200px;
	width: 735px;
}

.three-column .area{
	width: 200px;
	float: left;
}


#layout-body {
	height: 170px;
}

#dashboard-content {
	height: 100%;
	padding-left: 10px;
	padding-right: 12px;
}

#dashboard-accordion {
	width: 100%;
}
.light-up {
border: 1px dotted #00BB27;
background-color: #00BB27;
}

.widget-header{
	position:relative;
	border-left: none;
	border-right: none;
	text-align: left;
	padding: 2px;
	margin-top: 1px;
}

.ui-accordion .ui-accordion-header {
	z-index: 1000;
	padding: 2px;
}

.widget-header:hover {
	cursor: pointer;
}

#widget-icons {
	padding: 10px 5px;
	display: block;
	width: 237px;
	height: 566px;
}

#widget-icons div, #dashboard-content .area div {
	text-align: left;
	width: 190px;
	height: 40px;
	margin: 5px auto;
	padding: 5px;
	background-color: #FFFFFF;
	border: 1px solid #cccccc;
}

#dashboard-content .area div {
	width: 90%;
	position: relative;
}

#widget-icons div:hover {
	border-color: #00BB27;
	background-color: #f3f3f3;
}

#widget-icons div img, #dashboard-content .area div img{
	margin: auto;
	height: 30px;
	width: 30px;
	float: left;
}
#widget-icons .widget-id, #dashboard-content .widget-id {
	margin: 0px 10px 0px 55px;
	height: 40px;
	display: block;
}

#dashboard-content .widget-id {
	margin: 0px;
	margin-left: 50px;
}

.widget-medium {
	background: url(/db/images/medium-widget.png) no-repeat left bottom;
}

.widget-large {
        background: transparent url(/db/images/full-widget.png) no-repeat left bottom;
}

.widget-small {
        background: url(/db/images/small-widget.png) no-repeat left bottom;
}

#widget-toolbox {
/*	overflow: hidden; */
	width: 250px;
	margin-top: 10px;
	padding: 10px 0px;
    position: absolute;
    top: 50px;
    left: 795px;
}

#widget-toolbox .ui-accordion-content {
position: static;
}

#dashboard-content .area {
	overflow: auto;
}

#dashboard-content h4 {
	position: relative;
}
	
.widget-icon {
	width: 20px;
	height: 20px;
}

.angle-widget-icon {
        background: url(/db/images/angle_widget_icon.jpg) no-repeat 10px 0px;
}

.area-widget-icon {
	background: url(/db/images/area_widget_icon.gif) no-repeat left 5px;
}

.bar-widget-icon {
        background: url(/db/images/bar_widget_icon.gif) no-repeat left 5px;
}

.bulb-widget-icon {
        background: url(/db/images/bulb_widget_icon.jpg) no-repeat left top;
}

.bullet-widget-icon {
        background: url(/db/images/bullet_widget_icon.gif) no-repeat 5px 5px;

}

.col-widget-icon {
        background: url(/db/images/col_widget_icon.jpg) no-repeat 4px 5px;

}
.cylinder-widget-icon {
        background: url(/db/images/cylinder_widget_icon.jpg) no-repeat 5px top;

}
.donut-widget-icon {
        background: url(/db/images/donut_widget_icon.jpg) no-repeat left 5px;

}
.funnel-widget-icon {
        background: url(/db/images/funnel_widget_icon.gif) no-repeat left 5px;

}
.gantt-widget-icon {
        background: url(/db/images/gantt_widget_icon.gif) no-repeat left 5px;

}
.html-widget-icon {
        background: url(/db/images/html_widget_icon.png) no-repeat left top;

}

.led-widget-icon {
        background: url(/db/images/led_widget_icon.jpg) no-repeat 5px 20px;
}

.linear-widget-icon {
        background: url(/db/images/linear_widget_icon.jpg) no-repeat 5px 20px;
}

.line-widget-icon {
        background: url(/db/images/line_widget_icon.gif) no-repeat left 10px;

}

.map-widget-icon {
        background: url(/db/images/map_widget_icon.jpg) no-repeat 5px top;

}

.pie-widget-icon {
        background: url(/db/images/pie_widget_icon.jpg) no-repeat left top;

}

.spark-widget-icon {
        background: url(/db/images/spark_widget_icon.gif) no-repeat left 5px;

}

.pyramid-widget-icon {
        background: url(/db/images/pyramid_widget_icon.jpg) no-repeat 5px top;

}

.table-widget-icon {
        background: url(/db/images/table_widget_icon.jpg) no-repeat left top;

}

.text-widget-icon {
        background: url(/db/images/text_widget_icon.png) no-repeat left top;

}

.therm-widget-icon {
        background: url(/db/images/therm_widget_icon.jpg) no-repeat 10px top;

}

.delete-widget {
	text-indent: -5000px; 
	padding: 0px;
	background: transparent url(/db/images/close_icon2.gif) no-repeat scroll center center; 
	display: block; 
	position: absolute; 
	width: 20px; 
	height: 20px; 
	overflow: hidden;
	top: 0px;
	right: 0px;
}

#layout-body .area div{
	position: relative;
}


#widget-pane table tbody tr {
	cursor: move;
}


#layout-body div.last {
	margin-left: 10px;
}

#layout-body .three-column div.middle {
	margin: 0px 10px;
}
#layout-body .three-column div.last {
	margin-left: 0px;
}

#layout-body .three-column .area {
	width: 234px;
}

#layout-body div.active {
	display: block;
}

#layout-footer {
margin-top: 10px;
}

.required-field {
	border: 1px red solid;
}

#dashboard-controls {
	position: absolute;
	top: -20px;
	right: 10px;
	width: 100%;
	text-align: right; 
}

#dashboard-controls .button-pane-dialog button:hover {
	color: #cccccc;
}

#user_password {
border: auto;
width: auto;
}

#new-user {
    height: 285px !important;
}

.ui-dialog-content table td {
border: none;
}

a.add-widget, a.add-user, a.add-dashboard, a.add-feed, a.add-file {
	background: transparent url(/db/icons/cog_add.png) no-repeat 0 0;
	text-indent: 20px;
	text-decoration: none;
	color: #ff8125;
	display: block;
}

a.add-user {
	background:  transparent url(/db/icons/user_add.png) no-repeat 0 0;
}

a.add-file {
	background:  transparent url(/db/icons/add.png) no-repeat 0 0;
}

a.add-dashboard {
	background:  transparent url(/db/icons/layout_add.png) no-repeat 0 0;
}

a.add-feed {
        background:  transparent url(/db/icons/feed_add.png) no-repeat 0 0;
}

#dashboard-content .area div.ui-draggable-dragging {
	width: 190px;	
}

#dashboard-content .area #droppable-pos {
	background-color: #e2e2e2;
}

h3.title {
	margin: 0;
	padding: 5px;
	font-size: 13px;
	color: #333;
	border-bottom: 1px solid #696E72;
}
ol.dashboard_list li a {
	display: block;
	height: 30px;
	padding: 0 8px;
	line-height: 30px;	
	text-decoration: none;
	float:left;
}

.widget_input {
	border-bottom: 1px solid #696E72;
	padding:5px 10px 5px 164px;
	position:relative;	
}
ol.dashboard_list li {
/*display:inline-table;*/
}
ol.header_nav_links li {
height:30px;
vertical-align:middle;
}
.hidden {
display:none;
}

/* Track */
#handle1 {
    background: url(/db/images/sliderHandle2.png) 0 0 no-repeat;
}

#handle1 img {
    display: none;
}

/* Printing Window */
.print_window .widget_controls {
	display:none;
}


#logo {
	margin-top:8px;
}

/* ---------------------------------------------------------------------
Sticky Footer Styles
------------------------------------------------------------------------ */

html, body {height: 100%;}

#mainWrapper {min-height: 100%;}

#content {
	overflow:auto;
	padding-bottom: 33px; 
}  /* must be same height as the footer */

#footer {
	position: relative;
	margin-top: -33px; /* negative value of footer height */
	height: 33px;
	clear:both;
}

/*Opera Fix*/
body:before {
	content:"";
	height:100%;
	float:left;
	width:0;
	margin-top:-32767px;/
}

/* ---------------------------------------------------------------------
Package Management
------------------------------------------------------------------------ */

div#tabs {
	clear: both;
}

div.tab_content {
	max-height: 500px;
	overflow: auto;
}

div#submit {
	float: right;
	margin-bottom: 5px;
}

.package_save {
    padding: .2em .6em .3em;
    cursor: pointer;
}
                                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/css/admin.css                                                                 0000777 0000000 0000000 00000000642 12534142432 016230  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   

#admin_nav {
	margin: 0;
	padding: 10px 0 0 0;
	width: 100%;
	height: 30px;
	float: left;
	clear: both;
}

ol.admin_nav_links {
	margin: 0;
	padding: 0;
}

ol.admin_nav_links li {
	padding: 5px 0;
	list-style: none;
}

ol.admin_nav_links li a:link, ol.admin_nav_links li a:visited {
	text-decoration: underline;
	color: #ff8125;
}

ol.admin_nav_links li a:hover {
	text-decoration: underline;
	color: #333;
}

/** */                                                                                              ./mvappsvr/docroot/db/css/theme2.css                                                                0000777 0000000 0000000 00000001206 12534142432 016321  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   html {
	background: url(/db/images/bg_body_top_ocean.jpg) repeat-x;	
}
h3.title {
	background: #8B9298 url(/db/images/bg_widget_header_ocean.gif) repeat-x 0 0;
	color: #333;
	
}
ol.dashboard_list li a {
	background: url(/db/images/bg_dashboard_nav_link_ocean.jpg) repeat-x 0 0;
	color: #f2f2f2;
}
#dashboard_nav {
	background: url(/db/images/bg_dashboard_nav_ocean.jpg) no-repeat 0 0;
			
}
ol.dashboard_list li a:hover {
	background: url(/db/images/bg_dashboard_nav_ocean_hover.jpg) repeat-x 0 0;
}
.widget_input {
	background: silver;
}
#header_nav {
background:transparent url(/db/images/bg_header_nav_links_ocean.jpg) no-repeat scroll 0 0;
}
                                                                                                                                                                                                                                                                                                                                                                                          ./mvappsvr/docroot/db/css/ingrid.css                                                                0000777 0000000 0000000 00000044646 12534142432 016430  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   .datagrid td, .datagrid th {
	font-size: 11px;
	font-family: Tahoma, Verdana, Arial, sans-serif; 
	margin: 0px;
	border-bottom: 1px solid #ABABAB;
}

table.datagrid {
	table-layout: fixed;
}

table.datagrid td {
	padding: 2px;
	text-align: left;
	overflow: hidden;
	white-space: nowrap;
}

table.datagrid tr  {
	height: 25px;
}

table.datagrid th  {
	padding: 2px;
	text-align: left;
	font-weight: normal;
}

.grid-loading {
	background: #E3E3E3 url('/db/img/load-bg.png');
	display: block;
	opacity:.50;	
	-moz-opacity:.50;
	filter:alpha(opacity=50);
	text-align: center;
}
.grid-loading div {
	width: 100%;
	height: 100%;
	display: block;
	background: url('/db/img/indicator_web20_working.gif') no-repeat center center;
}
.grid-header-bg {
	background: #E3E3E3 url('/db/img/grid-hrow.gif') repeat-x bottom;
}


.grid-row-style1 { background-color: #FFFFFF; }
.grid-row-style2 { background-color: #EEF6FF; }
.grid-row-style3 { background-color: #EEEEEE; }

.grid-row-hover {
	background-color: #FFFFBB;
}
.grid-row-sel {
	background-color: #EEEEEE;
	border-bottom: 1px solid #333333;
}
.grid-row-sel td {
	color: #990000;
}
table.datagrid td.grid-custom-col {
	color: #333333;
	background-color:red;
	text-align:right;
}

table.datagrid th div.grid-col-resize {
	background: url('/db/img/grid-split.gif') no-repeat center;
	cursor:col-resize;
	width: 6px;
	height:16px;
	font-size:1px;
	float: right;
	display: block;
	text-indent:-1000px;
	overflow:hidden;
}
.widget_content table tbody tr.selected{
	background:#eeeeee;
}

table.datagrid thead {
}

/*
Column Sorting Styles
*/
.grid-sort-asc {
	background: url('/db/img/sort-asc.png') no-repeat center left;
	display: block;
	height: 18px;
	padding: 3px 0 0 16px;
	cursor: pointer;
}
.grid-sort-desc {
	background: url('/db/img/sort-desc.png') no-repeat center left;
	display: block;
	height: 18px;
	padding: 3px 0 0 16px;
	cursor: pointer;
}
.grid-sort-none {
	background: url('/db/img/sort-none.png') no-repeat center left;
	display: block;
	height: 18px;
	padding: 3px 0 0 16px;
	cursor: pointer;
}


/*
Paging Control Styles
*/

/* paging control footer toolbar */
.grid-page-toolbar {
	background: url('/db/img/page-bg.gif') repeat-x;
	font: 11px Tahoma;
	padding-top: 7px;	
	border-bottom: 1px solid #77ABF2;
}
/* paging control footer toolbar page form (pform) */
.grid-page-toolbar form {
	margin: 0;
}
/* first page button (pb1) */
.grid-page-start {
	background: url('/db/img/page-first.png') no-repeat center;
	display: block;
	float:left;
	margin:3px;	
	width: 16px;
	height: 16px;
	text-indent: -1000px;
	overflow: hidden;
	margin-left: 10px;
}
/* previous page button (pb2) */
.grid-page-prev {
	background: url('/db/img/page-prev.png') no-repeat center;
	display: block;
	float:left;
	margin:3px;
	width: 16px;
	height: 16px;
	text-indent: -1000px;
	overflow: hidden;
}
/* next page button (pb3) */
.grid-page-next {
	background: url('/db/img/page-next.png') no-repeat center;
	display: block;
	float:left;
	margin:3px;
	width: 16px;
	height: 16px;
	text-indent: -1000px;
	overflow: hidden;
}
/* last page button (pb4) */
.grid-page-end {
	background: url('/db/img/page-last.png') no-repeat center;
	display: block;
	float:left;
	margin:3px;
	width: 16px;
	height: 16px;
	text-indent: -1000px;
	overflow: hidden;
}
/* loading indicator graphic (pload) */
.grid-page-loading {
	background: url('/db/img/grid-loading.gif') no-repeat center;
	display: block;
	float:left;
	margin:3px;
	width: 16px;
	height: 16px;
	text-indent: -1000px;
	overflow: hidden;
}
/* loading done indicator graphic (pload) */
.grid-page-loading-done {
	background: url('/db/img/grid-loading-done.gif') no-repeat center;
}
/* page info text around textbox (pinfo) */
.grid-page-info {
	font: 11px Tahoma;
	display: block;
	float:left;
	color: #575757;
}
/* viewing rows x of y text message (pv) */
.grid-page-viewing-records-info {
	font: 11px Tahoma;
	color: #575757;	
	display: block;
	float: right;
	height: 16px;
	margin: 3px 10px 0 0;
}
/* page input field (pfld) */
.grid-page-input {
	font: 11px Tahoma;
	width: 30px;
	padding: 2px; 
	border: 1px inset;	
}
@charset "UTF-8";
/* CSS Document */

.widget_content
	{
	font-family: Arial, Helvetica, sans-serif;
	font-size: 11px;
	position: relative;
	border: 0px solid #eee;
	overflow: hidden;
	color: #000;
	}

	.widget_content.hideBody
		{
		height: 26px !important;
		border-bottom: 1px solid #ccc;
		}

	.ie6fullwidthbug
		{
		border-right: 0px solid #ccc;
		padding-right: 2px;	
		}

.widget_content div.nDiv
	{
	background: #eee url(/db/images/line.gif) repeat-y -1px top;
	border: 1px solid #ccc;
	border-top: 0px;
	overflow: auto;
	left: 0px;
	position: absolute;
	z-index: 999;
	float: left;
	}

	.widget_content div.nDiv table
		{
		margin: 2px;
		}

.widget_content div.hDivBox
	{
	float: left; 
	padding-right: 40px;
	}

.widget_content div.bDiv table
	{
	margin-bottom: 10px;
	}
	
	.widget_content div.bDiv table.autoht
		{
		border-bottom: 0px;
		margin-bottom: 0px;
		}
	
.widget_content div.nDiv td
	{
	padding: 2px 3px;
	border: 1px solid #eee;
	cursor: default;
	}

.widget_content div.nDiv tr:hover td, .widget_content div.nDiv tr.ndcolover td
	{
	background: #d5effc url(/db/images/hl.png) repeat-x top;
	border: 1px solid #a8d8eb;
	}
	
	.widget_content div.nDiv td.ndcol1
		{
		border-right: 1px solid #ccc;
		}
		
	.widget_content div.nDiv td.ndcol2
		{
		border-left: 1px solid #fff;
		padding-right: 10px;
		}

	.widget_content div.nDiv tr:hover td.ndcol1, .widget_content div.nDiv tr.ndcolover td.ndcol1
		{
		border-right: 1px solid #d2e3ec;
		}
		
	.widget_content div.nDiv tr:hover td.ndcol2, .widget_content div.nDiv tr.ndcolover td.ndcol2
		{
		border-left: 1px solid #eef8ff;
		}
	
	.widget_content div.nBtn
		{
		position: absolute;
		height: 24px;
		width: 14px;
		z-index: 900;
		background: #fafafa url(/db/images/fhbg.gif) repeat-x bottom;
		border: 0px solid #ccc;
		border-left: 1px solid #ccc;
		top: 0px;
		left: 0px;
		margin-top: 1px;
		cursor: pointer;
		display: none;
		}
		
		.widget_content div.nBtn div
			{
			height: 24px;
			width: 12px;
			border-left: 1px solid #fff;
			float: left;
			background: url(/db/images/ddn.png) no-repeat center;
			}		
		
		.widget_content div.nBtn.srtd
			{
			background: url(/db/images/wbg.gif) repeat-x 0px -1px;
			}
		

.widget_content div.mDiv
	{
	background: url(/db/images/wbg.gif) repeat-x top;
	border: 1px solid #ccc;
	border-bottom: 0px;
	border-top: 0px;
	font-weight: bold;
	display: block;
	overflow: hidden;
	white-space: nowrap;
	position: relative;
	}

.widget_content div.mDiv div
	{
	padding: 6px;
	white-space: nowrap;
	}
	
		.widget_content div.mDiv div.ptogtitle
			{
			position: absolute;
			top: 4px;
			right: 3px;
			padding: 0px;
			height: 16px;
			width: 16px;
			overflow: hidden;
			border: 1px solid #ccc;
			cursor: pointer;
			}

			.widget_content div.mDiv div.ptogtitle:hover
			{
			background-position: left -2px;
			border-color: #bbb;
			}
			
			.widget_content div.mDiv div.ptogtitle span
			{
			display: block;
			border-left: 1px solid #eee;
			border-top: 1px solid #fff;
			border-bottom: 1px solid #ddd;
			width: 14px;
			height: 14px;
			background: url(/db/images/uup.png) no-repeat center;
			}
			
			.widget_content div.mDiv div.ptogtitle.vsble span
			{
			background: url(/db/images/ddn.png) no-repeat center;			
			}			

.widget_content div.tDiv /*toolbar*/
	{
	background: #fafafa url(/db/images/bg.gif) repeat-x top;
	position: relative;			
	border: 1px solid #ccc;
	border-bottom: 0px;
	overflow: hidden;
	height:31px;
	font-size:15px;
	}

	.widget_content div.tDiv2
		{
		float: left;
		clear: both;
		padding: 1px;
		}

.widget_content div.sDiv /*toolbar*/
	{
	background: #fafafa url(/db/images/bg.gif) repeat-x top;
	position: relative;
	border: 1px solid #ccc;
	border-top: 0px;
	overflow: hidden;
	display: none;
	}

	.widget_content div.sDiv2
		{
		float: left;
		clear: both;
		padding: 5px;
		padding-left: 5px;
		width: 1024px;
		}

		.widget_content div.sDiv2 input, .widget_content div.sDiv2 select
		{
		vertical-align: middle;
		}
			
	.widget_content div.btnseparator
		{
		float: left;
		height: 22px;
		border-left: 1px solid #ccc;
		border-right: 1px solid #fff;
		margin: 1px;
		}
	
	.widget_content div.fbutton
		{
			float: left;
			display: block;
			cursor: pointer;
			padding: 1px;
		}

	.widget_content div.fbutton div
		{
			float: left;
			padding: 1px 3px;
		}		
		
	.widget_content div.fbutton span
		{
		float: left;
		display: block;
		padding: 3px;
		}

	.widget_content div.fbutton:hover, .widget_content div.fbutton.fbOver
		{
			padding: 0px;
			border: 1px solid #ccc;
		}

	.widget_content div.fbutton:hover div, .widget_content div.fbutton.fbOver div
		{
			padding: 0px 2px;
			border-left: 1px solid #fff;
			border-top: 1px solid #fff;
			border-right: 1px solid #eee;
			border-bottom: 1px solid #eee;
		}		
		
	
/* end toolbar*/

.widget_content div.hDiv, .widget_content thead th
	{
	background: #fafafa url(/db/images/fhbg.gif) repeat-x bottom;
	position: relative;
	border: 1px solid #ccc;
	border-bottom: 0px;
	overflow: hidden;
	}	
	.widget_content thead tr{
		border: 1px solid #ccc;
		border-left:1px solid #ccc;
		border-style:solid solid none;		
	}
	.widget_content thead th
	{
	background: #fafafa url(/db/images/fhbg.gif) repeat-x bottom;
	position: relative;
	border: 1px solid #ccc;
	border-bottom: 0px;
	overflow: hidden;
	border-color:#CCCCCC #CCCCCC -moz-use-text-color;
	border-style:solid solid none;
	border-width:1px 1px 0;
	font-size:15px;
	}
	.widget_content thead th a{
		text-decoration:none;
	}
.widget_content div.hDiv table
	{
	border-right: 1px solid #fff;
	}

	.widget_content div.cDrag
		{
		float: left;
		position: absolute;
		z-index: 2;
		overflow: visible;
		}

		.widget_content div.cDrag div
			{
			float: left;
			background: none;
			display: block;
			position: absolute;
			height: 24px;
			width: 5px;
			cursor: col-resize;
			}
			
		.widget_content div.cDrag div:hover, .widget_content div.cDrag div.dragging
			{
			background: url(/db/images/line.gif) repeat-y 2px center;
			}

.widget_content div.iDiv
	{
		border: 1px solid #316ac5;
		position: absolute;
		overflow: visible;
		background: none;
	}
	
	.widget_content div.iDiv input, .widget_content div.iDiv select, .widget_content div.iDiv textarea
		{
		font-family: Arial, Helvetica, sans-serif;
		font-size: 11px;
		}
		
	.widget_content div.iDiv input.tb
		{
		border: 0px;
		padding: 0px;
		width: 100%;
		height: 100%;
		padding: 0px;
		background: none;
		}			
					
.widget_content div.bDiv
	{
	border: 1px solid #ccc;
	border-top: 0px;
	background: #fff;
	overflow: auto;
	position: relative;
	}
	
.widget_content div.bDiv table
	{
	border-bottom: 1px solid #ccc;
	}
	
	.widget_content div.hGrip
	{
	position: absolute;
	top: 0px;
	right: 0px;
	height: 5px;
	width: 5px;
	background: url(/db/images/line.gif) repeat-x center;
	margin-right: 1px;
	cursor: col-resize;
	}
	
		.widget_content div.hGrip:hover, .widget_content div.hGrip.hgOver
			{
				border-right: 1px solid #999;				
				margin-right: 0px;
			}
	
	.widget_content div.vGrip
		{
		height: 5px;
		overflow: hidden;
		position: relative;
		background: #fafafa url(/db/images/wbg.gif) repeat-x 0px -1px;
		border: 1px solid #ccc;
		border-top: 0px;
		text-align: center;
		cursor: row-resize;
		}
			
			.widget_content div.vGrip span
					{
					display: block;
					margin: 1px auto;
					width: 20px;
					height: 1px;
					overflow: hidden;
					border-top: 1px solid #aaa;
					border-bottom: 1px solid #aaa;	
					background: none;
					}

.widget_content div.hDiv th, .widget_content  div.bDiv td  /* common cell properties*/
	{
	text-align: left;
	border-right: 1px solid #ddd;
	border-left: 1px solid #fff;
	overflow: hidden;
	vertical-align: top !important;
	}

		.widget_content div.hDiv th div, .widget_content  div.bDiv td  div, div.colCopy div/* common inner cell properties*/
			{
			padding: 5px;
			border-left: 0px solid #fff;
			}

.widget_content div.hDiv th, div.colCopy
	{
	font-weight: normal;
	height: 24px;
	cursor: default;
	white-space: nowrap;
	overflow: hidden;
	}	

div.colCopy {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 11px;
	background: #fafafa url(/db/images/fhbg.gif) repeat-x bottom;
	border: 1px solid #ccc;
	border-bottom: 0px;
	overflow: hidden;
	}

.widget_content div.hDiv th.sorted
	{
	background: url(/db/images/wbg.gif) repeat-x 0px -1px;
	border-bottom: 0px solid #ccc;
	}
	
	.widget_content div.hDiv th.thOver
	{
	}

	.widget_content div.hDiv th.thOver div, .widget_content div.hDiv th.sorted.thOver div
	{
	border-bottom: 1px solid orange;
	padding-bottom: 4px;
	}
	
	.widget_content div.hDiv th.sorted div
	{
	border-bottom: 0px solid #ccc;
	padding-bottom: 5px;
	}

	.widget_content div.hDiv th.thMove
	{
	background: #fff;
	color: #fff;
	}
	
	.widget_content div.hDiv th.sorted.thMove div
		{
		border-bottom: 1px solid #fff;
		padding-bottom: 4px
		}
	
	.widget_content div.hDiv th.thMove div
	{
		background: #fff !important;
	}	
	
	.widget_content div.hDiv th div.sdesc
		{
		background: url(/db/images/dn.png) no-repeat center top;
		}	

	.widget_content div.hDiv th div.sasc
		{
		background: url(/db/images/up.png) no-repeat center top;
		}	
		
	.widget_content div.bDiv td
		{
		border-bottom: 1px solid #fff;
		vertical-align: top;
		white-space: nowrap;
		}

	.widget_content div.hDiv th div
		{
		}
		
		.widget_content span.cdropleft
		{
		display: block;
		background: url(/db/images/prev.gif) no-repeat -4px center;
		width: 24px;
		height: 24px;
		position: relative;
		top: -24px;
		margin-bottom: -24px;
		z-index: 3;
		}

		.widget_content div.hDiv span.cdropright
		{
		display: block;
		background: url(/db/images/next.gif) no-repeat 12px center;
		width: 24px;
		height: 24px;
		float: right;
		position: relative;
		top: -24px;
		margin-bottom: -24px;
		}

	.widget_content tr{
		border-bottom:1px solid #ccc;
	}
	.widget_content div.bDiv td div
		{
		border-top: 0px solid #fff;
		padding-bottom: 4px;
		}

			
	.widget_content tr td.sorted
			{
			background: #f3f3f3;
			border-right: 1px solid #ddd;
			border-bottom: 1px solid #f3f3f3;
			}		

			.widget_content tr td.sorted div
				{
				}


	.widget_content tr.erow td
			{
			background: #f7f7f7;
			border-bottom: 1px solid #f7f7f7;
			}
			
	.widget_content tr.erow td.sorted
			{
			background: #e3e3e3;
			border-bottom: 1px solid #e3e3e3;
			}						

			.widget_content tr.erow td.sorted div
				{
				}

	.widget_content div.bDiv tr:hover td, 
	.widget_content div.bDiv tr:hover td.sorted,
	.widget_content div.bDiv tr.trOver td.sorted, 
	.widget_content div.bDiv tr.trOver td
		{
		background: #d9ebf5;
		border-left: 1px solid #eef8ff;
		border-bottom: 1px dotted #a8d8eb;
		}
				
	.widget_content div.bDiv tr.trSelected:hover td, 
	.widget_content div.bDiv tr.trSelected:hover td.sorted,
	.widget_content div.bDiv tr.trOver.trSelected td.sorted, 
	.widget_content div.bDiv tr.trOver.trSelected td,
	.widget_content tr.trSelected td.sorted, 
	.widget_content tr.trSelected td
		{
		background: #d5effc url(/db/images/hl.png) repeat-x top;
		border-right: 1px solid #d2e3ec;
		border-left: 1px solid #eef8ff;
		border-bottom: 1px solid #a8d8eb;
		}

	/* novstripe adjustments */

	.widget_content.novstripe .bDiv table
	{
		border-bottom: 1px solid #ccc;
		border-right: 1px solid #ccc;
	}

	.widget_content.novstripe  div.bDiv td  
		{
		border-right-color: #fff;
		}
		
	.widget_content.novstripe div.bDiv tr.erow td.sorted
		{
		border-right-color: #e3e3e3;
		}

	.widget_content.novstripe div.bDiv tr td.sorted
		{
		border-right-color: #f3f3f3;
		}

	.widget_content.novstripe  div.bDiv tr.erow td  
		{
		border-right-color: #f7f7f7;
		border-left-color: #f7f7f7;
		}
		
		.widget_content.novstripe div.bDiv tr.trSelected:hover td, 
		.widget_content.novstripe div.bDiv tr.trSelected:hover td.sorted,
		.widget_content.novstripe div.bDiv tr.trOver.trSelected td.sorted, 
		.widget_content.novstripe div.bDiv tr.trOver.trSelected td,
		.widget_content.novstripe tr.trSelected td.sorted, 
		.widget_content.novstripe tr.trSelected td
			{
			border-right: 1px solid #0066FF;
			border-left: 1px solid #0066FF;
			}		

	.widget_content.novstripe div.bDiv tr.trOver td, .widget_content.novstripe div.bDiv tr:hover td
		{
		border-left-color: #d9ebf5;
		border-right-color: #d9ebf5;
		}

	/* end novstripe */

.widget_content div.pDiv
	{
	background: url(/db/images/wbg.gif) repeat-x 0 -1px;
	border: 1px solid #ccc;
	border-top: 0px;
	overflow: hidden;
	white-space: nowrap;
	position: relative;
	}

.widget_content div.pDiv div.pDiv2
	{
	margin: 3px;
	margin-left: -2px;
	float: left;
	width: 1024px;
	}	
	
	div.pGroup
		{
		float: left;
		background: none;
		height: 24px;
		margin: 0px 5px;
		}
	
	.widget_content div.pDiv .pPageStat, .widget_content div.pDiv .pcontrol
		{
		position: relative;

		top: 5px;
		overflow: visible;
		}
		
	.widget_content div.pDiv input
		{
		vertical-align: text-top;
		position: relative;
		top: -5px;
		}
	
	.widget_content div.pDiv  div.pButton
		{
		float: left;
		width: 22px;
		height: 22px;
		border: 0px;
		cursor: pointer;
		overflow: hidden;
		}

		.widget_content div.pDiv  div.pButton:hover, .widget_content div.pDiv  div.pButton.pBtnOver
			{
			width: 20px;
			height: 20px;
			border: 1px solid #ccc;
			cursor: pointer;
			}
		
	.widget_content div.pDiv  div.pButton span
		{
		width: 20px;
		height: 20px;
		display: block;
		float: left;
		}		
	
		.widget_content div.pDiv  div.pButton:hover span, .widget_content div.pDiv  div.pButton.pBtnOver span
			{
			width: 19px;
			height: 19px;
			border-top: 1px solid #fff;
			border-left: 1px solid #fff;
			}		
		

		.widget_content .pSearch
			{
			background: url(/db/images/magnifier.png) no-repeat center;
			}
	
		.widget_content .pFirst
			{
			background: url(/db/images/first.gif) no-repeat center;
			}
			
		.widget_content .pPrev
			{
			background: url(/db/images/prev.gif) no-repeat center;
			}

		.widget_content .pNext
			{
			background: url(/db/images/next.gif) no-repeat center;
			}

		.widget_content .pLast
			{
			background: url(/db/images/last.gif) no-repeat center;
			}
			
		.widget_content .pReload
			{
			background: url(/db/images/load.png) no-repeat center;
			}
			
		.widget_content .pReload.loading
			{
			background: url(/db/images/load.gif) no-repeat center;
			}															

/* ie adjustments */
			
		.widget_content.ie div.hDiv th div, .widget_content.ie  div.bDiv td  div, div.colCopy.ie div/* common inner cell properties*/
			{
			overflow: hidden;
			}			
		
	
	div.fbutton .add
		{
			background: url(/db/images/add.png) no-repeat center left;
			
		}	

	div.fbutton .delete
		{
			background: url(/db/images/close.png) no-repeat center left;
			
		}	
.hidden{

display:none !important;
}
                                                                                          ./mvappsvr/docroot/db/css/web_editor.css                                                            0000777 0000000 0000000 00000005544 12534142432 017271  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /**
 * @author: Sai
 */

.area_toolbar span {
padding: 0px 10px;

}

#template_loader {
	padding: 0px;
}

#template_loader ul {
	list-style: none;
}

#template_loader ul li {
	display: block;
	float: left;
	width: 170px;
	height: 50px;
	padding-left: 65px;
	padding-top: 10px;
	margin: 5px;
	font-size: 12px;
	border: 1px solid #d2d2d2;
	
}

#template_loader ul li:hover {
	background-color: #FFFFFF;
	border: 1px solid #cccccc;
	cursor: pointer;
}
#template_loader .html-widget-icon {
	background: url(/db/images/html_widget_icon.png) no-repeat 5px 5px;
}

#template_loader .table-widget-icon {
        background: url(/db/images/table_widget_icon.jpg) no-repeat 5px 5px;
}

#template_loader .text-widget-icon {
        background: url(/db/images/text_widget_icon.png) no-repeat 5px 5px;
}

#template_loader .angle-widget-icon {
        background: url(/db/images/angle_widget_icon.jpg) no-repeat 5px 5px;
}
#template_loader .bulb-widget-icon {
        background: url(/db/images/bulb_widget_icon.jpg) no-repeat 5px 5px;
}
#template_loader .cylinder-widget-icon {
        background: url(/db/images/cylinder_widget_icon.jpg) no-repeat 5px 5px;
}
#template_loader .bullet-widget-icon {
        background: url(/db/images/bullet_widget_icon.gif) no-repeat 5px 5px;
}
#template_loader .led-widget-icon {
        background: url(/db/images/led_widget_icon.jpg) no-repeat 5px 5px;
}
#template_loader .linear-widget-icon {
        background: url(/db/images/linear_widget_icon.jpg) no-repeat 5px 5px;
}
#template_loader .spark-widget-icon {
        background: url(/db/images/spark_widget_icon.gif) no-repeat 5px 5px;
}
#template_loader .therm-widget-icon {
        background: url(/db/images/therm_widget_icon.jpg) no-repeat 5px 5px;
}
#template_loader .area-widget-icon {
        background: url(/db/images/area_widget_icon.gif) no-repeat 5px 5px;
}
#template_loader .bar-widget-icon {
        background: url(/db/images/bar_widget_icon.gif) no-repeat 5px 5px;
}
#template_loader .col-widget-icon {
        background: url(/db/images/col_widget_icon.jpg) no-repeat 5px 5px;
}
#template_loader .map-widget-icon {
        background: url(/db/images/map_widget_icon.jpg) no-repeat 5px 5px;
}
#template_loader .pie-widget-icon {
        background: url(/db/images/pie_widget_icon.jpg) no-repeat 5px 5px;
}
#template_loader .pyramid-widget-icon {
        background: url(/db/images/pyramid_widget_icon.jpg) no-repeat 5px 5px;
}
#template_loader .line-widget-icon {
        background: url(/db/images/line_widget_icon.gif) no-repeat 5px 5px;
}
#template_loader .funnel-widget-icon {
        background: url(/db/images/funnel_widget_icon.gif) no-repeat 5px 5px;
}
#template_loader .donut-widget-icon {
        background: url(/db/images/donut_widget_icon.jpg) no-repeat 5px 5px;
}

#template_loader ul li.selected-template {
	background-color: #FFFFFF;
	border-color: #C20000;
}

#template_loader .messages {
	margin: 10px;
}
                                                                                                                                                            ./mvappsvr/docroot/db/css/screen.css                                                                0000666 0000000 0000000 00000012021 12534142432 016406  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   @import url("reset.css");

/* @group Layout */

/* @group global */

.group:after {
	content: ".";
	display: block;
	height: 0;
	clear: both;
	visibility: hidden;
}



/* @end */

body {
	background: #171617;
	margin: 0;
	padding: 0;
	width: 100%;
	height: 100%;
	min-width: 920px;
	font: 12px Helvetica, Arial, Geneva, sans-serif;
}

#page {
	margin: 0;
	padding: 0;
	width: 100%;
}

/* @group #header */

#header {
	width: 100%;
	color: #ffffff;
	background-color: #a90f0e;
	position: relative;
	border-bottom: 1px solid #be1110;
}

#header #logo {
	position: relative;
	float: left;
	padding: 20px;
	line-height: 1em;
	font-weight: bold;
}

#header #navigation {
	position: relative;
	float: right;
}

#header #navigation ul li {
	float: left;
}

#header #navigation ul li a {
	display: block;
	color: #000000;
	text-decoration: none;
	margin-left: 20px;
	padding: 20px;
	line-height: 1em;
	font-weight: bold;
}

#header #navigation ul li a:hover {
	color: #ffffff;
}

/* @end */

#main {
}

/* @group #content */

#content {
	padding: 20px;
}

/* @group #content .tabs */

#content .tabs {

}

#content .tabs li {
	float: left;
}

#content .tabs li a {
	display: block;
	padding: 8px 10px 12px 10px;
	line-height: 1em;
	color: #a099a1;
	font-weight: bold;
	text-decoration: none;
}

#content .tabs li a:hover {
		color: #ffffff;
}

#content .tabs li a.current {
	display: block;
	background-color: #ffffff;
	color: #000000;
}

/* @end */

#content .panes {
	clear: both;
}

#content div.panes div.pane {
	display: none;		
	padding: 10px;
	background-color: #ffffff;
}

#content div.panes div fieldset:first-child {
	margin-top: 0;
}

#content div.panes div fieldset {
	border: 1px solid #cccccc;
	padding: 10px;
	margin-top: 10px;
}

#content div.panes div legend {
	padding: 0 7px 0 7px;
	font-weight: bold;
	color: #999999;
	text-transform: uppercase;
	font-size: 10px;
}

#content div.panes div ul.form li.enable {
	background-color: #e8e8e8;
	width: 100%;
	line-height: 1em;
	vertical-align: middle;
}

#content div.panes div ul.form li.enable label {
	display: inline;
	text-align: left;
	float: none;
	line-height: 1em;
	vertical-align: middle;
	margin: 5px;
}

#content div.panes div ul.form li.enable input.checkbox {
	display: inline;
	float: none;
	text-align: left;
	line-height: 1em;
	vertical-align: middle;
	margin: 5px 0 5px 5px;
}

#content div.panes div ul.form li:first-child {
	margin-top: 0;
}

#content div.panes div ul.form li {
	margin-top: 10px;
	float: left;
	clear: left;
}

#content div.panes div ul.form li label {
	float: left;
	width: 140px;
	text-align: right;
	padding-right: 10px;
	padding-top: 4px;
}

#content div.panes div ul.form li input.text {
	float: left;
}

#content div.panes div ul.form li select {
	float: left;
}

#content div.panes div ul.form li input.checkbox {
	float: left;
}

/* @group #content div.panes div.table */

#content div.panes div.table {
	margin-bottom: 10px;
	border-top: 1px solid #cccccc;
	border-left: 1px solid #cccccc;
	border-bottom: 1px solid #cccccc;
}

#content div.panes div.table table {
	width: 100%;
}

#content div.panes div.table table thead th {
	text-align: left;
	padding: 5px;
	background-color: #cccccc;
	color: #4e4e4e;
}

#content div.panes div.table table tbody td {
	text-align: left;
	padding: 5px;
	border-right: 1px solid #cccccc;
	color: #272727;
}

#content div.panes div.table table tbody td button {
	margin-right: 5px;
}

#content div.panes div.table table tbody tr.odd td {
	background-color: transparent;
}

#content div.panes div.table table tbody tr.even td {
	background-color: #eeeeee;
}

/* @end */

/* @end */

/* @group .modal */

.modal { 
    background-color:#ffffff; 
    display:none; 
    width:500px; 
    padding:15px; 
    text-align:left; 
    border:1px solid #000000; 
 
    opacity:1; 
    -moz-border-radius:0; 
    -webkit-border-radius:0; 
    -moz-box-shadow: 0 0 20px #000000; 
    -webkit-box-shadow: 0 0 20px #000000; 
}

.modal fieldset:first-child {
	margin-top: 0;
}

.modal fieldset {
	border: 1px solid #cccccc;
	padding: 10px;
	margin-top: 10px;
}

.modal legend {
	padding: 0 7px 0 7px;
	font-weight: bold;
	color: #999999;
	text-transform: uppercase;
	font-size: 14px;
}

.modal ul.form li.enable {
	background-color: #e8e8e8;
	width: 100%;
	line-height: 1em;
	vertical-align: middle;
}

.modal ul.form li.enable label {
	display: inline;
	text-align: left;
	float: none;
	line-height: 1em;
	vertical-align: middle;
	margin: 5px;
}

.modal ul.form li.enable input.checkbox {
	display: inline;
	float: none;
	text-align: left;
	line-height: 1em;
	vertical-align: middle;
	margin: 5px 0 5px 5px;
}

.modal ul.form li:first-child {
	margin-top: 0;
}

.modal ul.form li {
	margin-top: 10px;
	float: left;
	clear: left;
}

.modal ul.form li label {
	float: left;
	width: 200px;
	text-align: right;
	padding-right: 10px;
	padding-top: 4px;
}

.modal ul.form li input.text {

}

.modal ul.form li select {
	float: left;
}

.modal ul.form li input.checkbox {
	float: left;
}

.modal .buttons {
	margin-top: 18px;
	text-align: right;
} 

.modal .buttons input {
	margin-left: 2px;
}

/* @end */

/* @end */ 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ./mvappsvr/docroot/db/css/application.css                                                           0000755 0000000 0000000 00000040176 13005675162 017452  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   @import "admin.css";
@import "forms.css";

body {
	margin: 0;
	padding: 0;
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
	color: #333;
	text-align:center;
}

a:link, a:visited {
	text-decoration: underline;
	color: #ff8125;
}

a:hover {
	text-decoration: underline;
	color: #333;
}

a.bullet_link:link, a.bullet_link:visited {
	padding-left: 15px;
	background: url(/db/images/bullet.gif) no-repeat left center;
}

.brClear {
	margin: 0;
	height: 0;
	font-size: 1px;
	line-height: 0px;
	clear: both;
}

.brBreak {
	line-height: 25px;
	clear: both;
}

h3.title {
	background: #8B9298 url(/db/images/bg_widget_header.gif) repeat-x 0 0;
	margin: 0;
	padding: 5px;
	font-size: 13px;
	color: #333;
	border-bottom: 1px solid #696E72;
}

table {
	margin: 10px 0;
	border-collapse: collapse;
}

table th {
	padding: 5px;
	background: #D8D8D8;
	border: 1px solid #CCC;
	font-weight: bold;
}

table td {
	padding: 5px;
	border-bottom: 1px solid #CCC;
/*	text-align: left; */
}

h1 {
	color:#555555;
	font-size:28px;
	font-weight:normal;
	letter-spacing:-2px;
	margin:0pt 0pt 8px;
}

pre {
	padding: 10px;
	background: #E4E4E4;
	border: 1px dashed #CCC;
	color: #7D7D7D;
}

#dashboardWrapper {
	margin: 0 auto 0 auto;
	padding: 10px 0 0 0;
	background: url(/db/images/bg_dashboard_larger.gif) no-repeat 0 0;
	width: 1140px;
	clear: both;
	text-align:left;
}

#dashboard {
	margin: 0 auto;
	padding: 10px;
	padding-top: 0;
	width: 1120px;
	position: relative;
	text-align:left;
	clear:both;
}

#mainWrapper {
	margin: 0 auto;
	padding: 0;
	width: 1140px;
	/*clear: both;*/
	text-align:left;
}

#main {
	margin: 0 auto;
	padding: 10px;
	width: 1120px;
	float: left;
	position: relative;
}

#pageheader {
	padding: 16px 0 0 10px;
	width: 1115px;
	height: 44px;
	background: url(/db/images/bg_pageheader.gif) no-repeat bottom;
}

#footer {
	clear:both;
}

h1.pagetitle {
	font-size: 20px;
	color: #FFF;
}

/* Area Styles */
.area {
	margin: 5px 0 0 0;
}

/* Widget Styles */
.widget {
	margin: 0 5px 10px 5px;
	border: 1px solid #696E72;
	position: relative;
}

.widget_controls {
	float: right;
	height: 20px;
	margin: 5px;
}

.widget_input {
	background: silver;
	border-bottom: 1px solid #696E72;
	padding:5px 10px 5px 164px;
	position:relative;	
}

.widget_control {
	margin:0 0 2px 0;
	text-align:left;
}

.widget_control label {
	display:block;
	width:160px;
	text-align:right;
	position:absolute;
	margin-left:-175px;
	color:#555555;
}

.widget_control input[type=text], .widget_control input[type=password], .widget_control textarea {
	border-top: 1px solid #666666;	
	border-left:1px solid #666666;
	border-bottom:1px solid #AAAAAA;
	border-right:1px solid #AAAAAA;	
}

.widget_control input.datepicker {
	width:165px;
}

.widget_control .hint  {
	font-size:smaller;
	color:#666666;
}


.widget_content {
	width: 100%;
	overflow: auto;
}

.widget_content_padding {
	padding: 5px 10px;
}


/*td.right, table.align-right tr td {
	text-align: right;
}

td.left, table.align-left tr td {
	text-align: left;
}
*/
.widget_content_header, .widget_content_footer {
	overflow: auto;
}

.clear {
	clear: both;
	height:1px;
	line-height:1px;
}

.widget_corner {
	height: 25px;
	line-height: 25px;
	padding: 0 5px;
}

.widget_corner img.icon {
	vertical-align: bottom;
}

.widget_blcorner, .widget_tlcorner {
	float: left;
}

.widget_trcorner, .widget_brcorner {
	float:right
}


/* Universal Layout Styles */
#area1, #area5 {
	clear:both;
}


/* Layout 3: 3 equal columns */
.layout3 #area2{
	float:left;
	width:365px;
	margin-right:13px;
}

.layout3 #area3{
	float:left;
	width:365px;
	margin-right:12px;
}

.layout3 #area4{
	float:left;
	width:365px;
}


/* Layout 2: left sidebar */
.layout2 #area2{
	float:left;
	width:410px;
	margin-right:10px;
}

.layout2 #area3{
	float:left;
	width:630px;
}

.layout2 #area4{
	display:none;
}


/* Layout 4: right sidebar */
.layout4 #area2{
	float:left;
	width:630px;
	margin-right:10px;
}

.layout4 #area3{
	float:left;
	width:410px;
}

.layout4 #area4{
	display:none;
}


/* Layout 1: single column */
.layout1 #area2{
}

.layout1 #area3{
	display:none;
}

.layout1 #area4{
	display:none;
}

/*#loginbox {
	margin: 0 auto;
	width: 400px;
	background: #EEE;
	border: 1px solid #CCC;
}
*/

#loginbox {
	padding-bottom:30px;
}

h3.title_login {
	margin: 0;
	padding: 0;
	line-height: 30px;
	background: #CCC;
}

a.btn:link, a.btn:visited, .btn {
	background: #ff8125;
	border-right: 1px solid #CE0000;
	border-bottom: 1px solid #CE0000;
	text-decoration: none;
	color: #FFF;
}

a.btn:hover {
	text-decoration: underline;
}

html {
	background: url(/db/images/bg_body_top.jpg) repeat-x;	
}

#header {
	/*margin: 0 auto;
	height: 70px;
	width: 100%;*/
}

#signature {
 	clear:both;
	padding: 2px 10px 3px 10px;
	text-align:center;
	border-top:1px solid #999999;
 	background-color: #e8e8e8;
	font-size:11px;
}

#logo {
/*	top: 18px;*/
	left: 20px;
	position: static;
	clear: both;
	text-align: left;
}

#header_nav {
	background: url(/db/images/bg_header_nav_links.jpg) no-repeat 0 0;
/*	position: static;
	top: 0;
	right: 0;*/
	width: 150px;
	float: right;	
}

#header_nav div img,
#header_nav div {
	display: none;
}

#dashboard_nav {
	background: url(/db/images/bg_dashboard_nav.jpg) no-repeat 0 0;
/*	position: static !important;
	top: 0;
	right: 150px;
*/	padding: 0 0 0 13px;
/*	height: 30px;
	border-right: 1px solid #CCCCCC;
*/	text-align:right;		
}

ol.header_nav_links {
	margin: 0;
	float: right;
	position: relative;
}

ol.header_nav_links li, ol.dashboard_list li {
	list-style: none;
	/*float: right;*/
	line-height: 30px;
	display:inline-block;
}

ol.header_nav_links li {
	border-right: 1px solid #CCCCCC;			
	padding: 0 8px;
}

ol.header_nav_links li a {
	text-decoration: none;
	color: #FFFFFF;
}

ol.header_nav_links li a:hover {
	text-decoration: underline;
}

ol.dashboard_list {
	margin: 0;
	padding: 0;
padding-right:4px;
/*        height: 30px;*/
        background:url("/db/images/header_bg_slice.png") repeat-x scroll 0 0 transparent;
}

ol.dashboard_list li {
	color: #FFFFFF;
	border-left: 1px solid #999;
	vertical-align:top;
	margin:0px !important;			
}

ol.dashboard_list li a {
	background: url(/db/images/bg_dashboard_nav_link.jpg) repeat-x 0 0;
	color: #f2f2f2;
	display: block;
	height: 30px;
	/*padding: 0 8px;*/
	padding:0px;
	margin-right:-4px;
	line-height: 30px;	
	text-decoration: none;
	/*float:left;*/
}

ol.dashboard_list li.admin_tab a {
background-image:url(/db/images/bg_header_nav_links.jpg);
background-repeat:repeat-x;
text-decoration:underline;
}

ol.dashboard_list li.admin_tab a:hover {
background-image:url(/db/images/bg_header_nav_links.jpg);
text-decoration:none;
}

ol.dashboard_list li.db_active a, ol.dashboard_list li.db_active a:hover {
	background: url(/db/images/bg_dashboard_nav_active.jpg) repeat-x 0 0;	
	text-decoration:none;
}

ol.dashboard_list li a:hover {
	/* text-decoration: underline;*/
        color: #FFFFFF;
	background: url(/db/images/bg_dashboard_nav_hover.jpg) repeat-x 0 0;
}

#trackWrapper {
	position: relative;
	float: left;
	width: 377px;
	height: 34px;
	background: url(/db/images/backgroundTrackWrapper.png) no-repeat;
	margin: 0px auto 10px;
}

#trackWrapper #trackMsg {
	float: none !important;
	position: absolute !important;
	top: 0;
	left: 0;
}

#trackWrapper #track1 {
	float: none !important;
	position: absolute !important;
	top: 0;
	right: 0;
}

#outerTrackWrapper {
	margin: 0 auto 10px;
	width: 377px;
	height: 34px;
}

#dispRate {
	font-weight: bold;
	font-size: 11px;
	float: left;
	margin: 10px 0 0 8px;
	padding: 0;
	line-height: 11px;
}

#printFrame { 
	position:absolute;
	top:0px;
	left:-9999px;
}

.ctrl {
	margin:0 0 7px 0;
}

.ctrl label {
	display:block;
	color:#555555;
	padding:0;
}

.ctrl input[type=text],  textarea {
	width:99%;
	border-top: 1px solid #666666;	
	border-left:1px solid #666666;
	border-bottom:1px solid #AAAAAA;
	border-right:1px solid #AAAAAA;	
	padding:2px;
}

.ctrl input.datepicker {
	width:165px;
}

.ctrl .hint  {
	font-size:smaller;
	color:#666666;
}

.inline {
	padding-left:190px;
	position:relative;
}

fieldset.inline legend {
	padding-right:5px;
	padding-left:5px;	
	margin-left:-180px;
}

.inline .directions {
	margin-left:-180px;
}

.inline .ctrl label {
	display:block;
	width:180px;
	text-align:right;
	position:absolute;
	margin-left:-190px;
}

.db-layout li {
	margin: 5px 10px;
	display: inline-block;
	border: 4px solid #EEEEEE;
}

.db-layout .active {
	border: 4px solid #00BB27;
}

.db-layout li:hover {
	border: 4px solid #C20000;
}

#dashboard-properties table {
	margin: 0px;
}

#widgets-pane .widget-icon img{
	float: left;
}

.one-column, .two-column .area, .three-column .area {
	width: 100%;
	height: 145px;
	border: 1px dashed #ccc;
	margin: 0px auto 10px;
	text-align: center;
	padding: 10px 0px;
}



#layout-body .one-column .area,
#layout-body .one-column {
	height: 90%; 
}

#layout-body .one-column  {
	padding: 0px;
	display: none;	
}

.two-column .area{
	width: 357px;
	float: left;
}

.two-column, .three-column {
	padding: 0px;
	display: none;
	height: 200px;
	width: 735px;
}

.three-column .area{
	width: 200px;
	float: left;
}


#layout-body {
	height: 170px;
}

#dashboard-content {
	height: 100%;
	padding-left: 10px;
	padding-right: 12px;
}

#dashboard-accordion {
	width: 100%;
}
.light-up {
border: 1px dotted #00BB27;
background-color: #00BB27;
}

.widget-header{
	position:relative;
	border-left: none;
	border-right: none;
	text-align: left;
	padding: 2px;
	margin-top: 1px;
}

.ui-accordion .ui-accordion-header {
	z-index: 1000;
	padding: 2px;
}

.widget-header:hover {
	cursor: pointer;
}

#widget-icons {
	padding: 10px 5px;
	display: block;
	width: 237px;
	height: 566px;
}

#widget-icons div, #dashboard-content .area div {
	text-align: left;
	width: 190px;
	height: 40px;
	margin: 5px auto;
	padding: 5px;
	background-color: #FFFFFF;
	border: 1px solid #cccccc;
}

#dashboard-content .area div {
	width: 90%;
	position: relative;
}

#widget-icons div:hover {
	border-color: #00BB27;
	background-color: #f3f3f3;
}

#widget-icons div img, #dashboard-content .area div img{
	margin: auto;
	height: 30px;
	width: 30px;
	float: left;
}
#widget-icons .widget-id, #dashboard-content .widget-id {
	margin: 0px 10px 0px 55px;
	height: 40px;
	display: block;
}

#dashboard-content .widget-id {
	margin: 0px;
	margin-left: 50px;
}

.widget-medium {
	background: url(/db/images/medium-widget.png) no-repeat left bottom;
}

.widget-large {
        background: transparent url(/db/images/full-widget.png) no-repeat left bottom;
}

.widget-small {
        background: url(/db/images/small-widget.png) no-repeat left bottom;
}

#widget-toolbox {
/*	overflow: hidden; */
	width: 250px;
	margin-top: 10px;
	padding: 10px 0px;
    position: absolute;
    top: 50px;
    left: 795px;
}

#widget-toolbox .ui-accordion-content {
position: static;
}

#dashboard-content .area {
	overflow: auto;
}

#dashboard-content h4 {
	position: relative;
}
	
.widget-icon {
	width: 20px;
	height: 20px;
}

.angle-widget-icon {
        background: url(/db/images/angle_widget_icon.jpg) no-repeat 10px 0px;
}

.area-widget-icon {
	background: url(/db/images/area_widget_icon.gif) no-repeat left 5px;
}

.bar-widget-icon {
        background: url(/db/images/bar_widget_icon.gif) no-repeat left 5px;
}

.bulb-widget-icon {
        background: url(/db/images/bulb_widget_icon.jpg) no-repeat left top;
}

.bullet-widget-icon {
        background: url(/db/images/bullet_widget_icon.gif) no-repeat 5px 5px;

}

.col-widget-icon {
        background: url(/db/images/col_widget_icon.jpg) no-repeat 4px 5px;

}
.cylinder-widget-icon {
        background: url(/db/images/cylinder_widget_icon.jpg) no-repeat 5px top;

}
.donut-widget-icon {
        background: url(/db/images/donut_widget_icon.jpg) no-repeat left 5px;

}
.funnel-widget-icon {
        background: url(/db/images/funnel_widget_icon.gif) no-repeat left 5px;

}
.gantt-widget-icon {
        background: url(/db/images/gantt_widget_icon.gif) no-repeat left 5px;

}
.html-widget-icon {
        background: url(/db/images/html_widget_icon.png) no-repeat left top;

}

.led-widget-icon {
        background: url(/db/images/led_widget_icon.jpg) no-repeat 5px 20px;
}

.linear-widget-icon {
        background: url(/db/images/linear_widget_icon.jpg) no-repeat 5px 20px;
}

.line-widget-icon {
        background: url(/db/images/line_widget_icon.gif) no-repeat left 10px;

}

.map-widget-icon {
        background: url(/db/images/map_widget_icon.jpg) no-repeat 5px top;

}

.pie-widget-icon {
        background: url(/db/images/pie_widget_icon.jpg) no-repeat left top;

}

.spark-widget-icon {
        background: url(/db/images/spark_widget_icon.gif) no-repeat left 5px;

}

.pyramid-widget-icon {
        background: url(/db/images/pyramid_widget_icon.jpg) no-repeat 5px top;

}

.table-widget-icon {
        background: url(/db/images/table_widget_icon.jpg) no-repeat left top;

}

.text-widget-icon {
        background: url(/db/images/text_widget_icon.png) no-repeat left top;

}

.therm-widget-icon {
        background: url(/db/images/therm_widget_icon.jpg) no-repeat 10px top;

}

.delete-widget {
	text-indent: -5000px; 
	padding: 0px;
	background: transparent url(/db/images/close_icon2.gif) no-repeat scroll center center; 
	display: block; 
	position: absolute; 
	width: 20px; 
	height: 20px; 
	overflow: hidden;
	top: 0px;
	right: 0px;
}

#layout-body .area div{
	position: relative;
}


#widget-pane table tbody tr {
	cursor: move;
}


#layout-body div.last {
	margin-left: 10px;
}

#layout-body .three-column div.middle {
	margin: 0px 10px;
}
#layout-body .three-column div.last {
	margin-left: 0px;
}

#layout-body .three-column .area {
	width: 234px;
}

#layout-body div.active {
	display: block;
}

#layout-footer {
margin-top: 10px;
}

.required-field {
	border: 1px red solid;
}

#dashboard-controls {
	position: absolute;
	top: -20px;
	right: 10px;
	width: 100%;
	text-align: right; 
}

#dashboard-controls .button-pane-dialog button:hover {
	color: #cccccc;
}

#user_password {
border: auto;
width: auto;
}

#new-user {
    height: 285px !important;
}

.ui-dialog-content table td {
border: none;
}

a.add-widget, a.add-user, a.add-dashboard, a.add-feed, a.add-file {
	background: transparent url(/db/icons/cog_add.png) no-repeat 0 0;
	text-indent: 20px;
	text-decoration: none;
	color: #ff8125;
	display: block;
}

a.add-user {
	background:  transparent url(/db/icons/user_add.png) no-repeat 0 0;
}

a.add-file {
	background:  transparent url(/db/icons/add.png) no-repeat 0 0;
}

a.add-dashboard {
	background:  transparent url(/db/icons/layout_add.png) no-repeat 0 0;
}

a.add-feed {
        background:  transparent url(/db/icons/feed_add.png) no-repeat 0 0;
}

#dashboard-content .area div.ui-draggable-dragging {
	width: 190px;	
}

#dashboard-content .area #droppable-pos {
	background-color: #e2e2e2;
}

h3.title {
	margin: 0;
	padding: 5px;
	font-size: 13px;
	color: #333;
	border-bottom: 1px solid #696E72;
}
ol.dashboard_list li a {
	display: block;
	height: 30px;
	padding: 0 8px;
	line-height: 30px;	
	text-decoration: none;
	float:left;
}

.widget_input {
	border-bottom: 1px solid #696E72;
	padding:5px 10px 5px 164px;
	position:relative;	
}
ol.dashboard_list li {
/*display:inline-table;*/
}
ol.header_nav_links li {
height:30px;
vertical-align:middle;
}
.hidden {
display:none;
}

/* Track */
#handle1 {
    background: url(/db/images/sliderHandle2.png) 0 0 no-repeat;
}

#handle1 img {
    display: none;
}

/* Printing Window */
.print_window .widget_controls {
	display:none;
}


#logo {
	margin-top:8px;
}

/* ---------------------------------------------------------------------
Sticky Footer Styles
------------------------------------------------------------------------ */

html, body {height: 100%;}

#mainWrapper {min-height: 100%;}

#content {
	overflow:auto;
	padding-bottom: 33px; 
}  /* must be same height as the footer */

#footer {
	position: relative;
	margin-top: -33px; /* negative value of footer height */
	height: 33px;
	clear:both;
}

/*Opera Fix*/
body:before {
	content:"";
	height:100%;
	float:left;
	width:0;
	margin-top:-32767px;/
}

/* ---------------------------------------------------------------------
Package Management
------------------------------------------------------------------------ */

div#tabs {
	clear: both;
}

div.tab_content {
	max-height: 500px;
	overflow: auto;
}

div#submit {
	float: right;
	margin-bottom: 5px;
}

.package_save {
    padding: .2em .6em .3em;
    cursor: pointer;
}
                                                                                                                                                                                                                                                                                                                                                                                                  ./mvappsvr/docroot/db/fw/                                                                           0000777 0000000 0000000 00000000000 13005675162 014252  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/docroot/db/fw/fusioncharts.zoomscatter.js                                                0000644 0000000 0000000 00000107652 13005675162 021700  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
 FusionCharts JavaScript Library - ZoomScatter Chart
 Copyright FusionCharts Technologies LLP
 License Information at <http://www.fusioncharts.com/license>

 @version 3.11.2
*/
(function(O){"object"===typeof module&&"undefined"!==typeof module.exports?module.exports=O:O(FusionCharts)})(function(O){O.register("module",["private","modules.renderer.js-zoomscatter",function(){function P(){}var C=this,v=C.hcLib,W=v.parseTooltext,J=v.Raphael,Q=C.window,X=v.addEvent,ea=v.removeEvent,Y=Q.MouseEvent,E=Q.document,F=v.BLANKSTRING,y=v.pluck,D=v.pluckNumber,fa=v.getFirstValue,ga=v.toRaphaelColor,ha=v.hasSVG,Z=v.isIE,R=v.getFirstColor,N=v.hasTouch,S="rgba(192,192,192,"+(Z?.002:1E-6)+
")",M=Math,G=M.round,z=M.min,B=M.max,T=M.abs,K=M.cos,L=M.sin,aa=M.floor,ia=2*Math.PI,ja=v.getMouseCoordinate,ka=v.POSITION_BOTTOM,H=v.chartAPI,U=v.HUNDREDSTRING,ba,ca,I=function(c,b){var a=ja(b.linkedItems.container,c),d=a.chartX,e=a.chartY,f=b.config,h=f.canvasLeft,l=f.canvasTop,g=f.canvasLeft+f.canvasWidth,f=f.canvasHeight+f.canvasTop;a.insideCanvas=!1;a.originalEvent=c;d>h&&d<g&&e>l&&e<f&&(a.insideCanvas=!0);return a},la=function(c,b,a){var d;b&&c&&(a||(a={}),a.originalEvent&&(a=a.originalEvent),
a.touches&&(a=a.touches[0]),b.dispatchEvent?(Y?d=new Y(c,{bubbles:!!a.bubbles,cancelable:!!a.cancelable,clientX:a.clientX||a.pageX&&a.pageX-E.body.scrollLeft-E.documentElement.scrollLeft||0,clientY:a.clientY||a.pageY&&a.pageY-E.body.scrollTop-E.documentElement.scrollTop||0,screenX:a.screenX||0,screenY:a.screenY||0,pageX:a.pageX||0,pageY:a.pageY||0}):E.createEvent&&(d=E.createEvent("HTMLEvents"),d.initEvent(c,!!a.bubbles,!!a.cancelable)),d.eventName=c,d&&b.dispatchEvent(d)):E.createEventObject&&b.fireEvent&&
(d=E.createEventObject(),d.eventType=c,d.eventName=c,b.fireEvent("on"+c,d)))};H("zoomscatter",{standaloneInit:!0,defaultDatasetType:"zoomscatter",applicableDSList:{zoomscatter:!0},highlightEnabled:!1,friendlyName:"ZoomScatter Chart",isXY:!0,defaultZeroPlaneHighlighted:!1,creditLabel:!1,configure:function(){var c,b=this.config;H.scatter.configure.apply(this,arguments);c=this.jsonData.chart;b.stepZoom=1-D(c.stepzoom,25)/100;b.showToolBarButtonToolText=D(c.showtoolbarbuttontooltext,1);b.btnResetChartToolText=
y(c.btnresetcharttooltext,"Reset Chart");b.btnZoomOutToolText=y(c.btnzoomouttooltext,"Zoom out to previous level");b.btnZoomInToolText=y(c.btnzoomintooltext,"<strong>Zoom in</strong><br/>Or double-click on plot to zoom-in");b.btnSelectZoomToolText=y(c.btnselectzoomtooltext,"<strong>Select a region to zoom-in</strong><br/>Click to enable pan mode.");b.btnPanToolText=y(c.btnpantooltext,"<strong>Drag to move across chart</strong><br/>Click to enable select-zoom mode.")},_setAxisLimits:function(){var c=
this.jsonData,b=this.components.xAxis,a=y(c.chart.xaxislabelmode,"categories"),c=c.categories&&c.categories[0],c=(c&&c.category||[]).slice(),d,e=Infinity,f=-Infinity,h;if("auto"===a||0===c.length){H.mscartesian._setAxisLimits.call(this);a=b[0].getLimit();b[0].setAxisConfig({hasCategory:0});b[0].resetCategoryAxisComponents();for(d=0;d<c.length;d+=1)if(h=c[d].x)h<e&&(e=h),h>f&&(f=h);if(f>a.max||e<a.min)f=B(f,a.max),e=z(e,a.min),b[0].setDataLimit(f,e)}else b[0].resetNumericAxisComponents(),H.scatterBase._setAxisLimits.call(this)},
_createAxes:function(){var c=this.components;H.scatter._createAxes.call(this,arguments);c.yAxis[0].setAxisConfig({animateAxis:!1});c.xAxis[0].setAxisConfig({animateAxis:!1})},_spaceManager:function(){var c,b,a=this.config,d=this.components,e=d.xAxis&&d.xAxis[0];b=d.yAxis&&d.yAxis||[];var f,h,l=d.legend.config.legendPos,g=a.xDepth,k=a.yDepth,m=a.canvasBgDepth,n=a.canvasBaseDepth,u=a.canvasBasePadding,q=d.canvas.config.canvasBorderWidth,r=a.realTimeConfig&&a.realTimeConfig.showRTValue,p=a.borderWidth,
w=a.canvasMarginTop,x=a.canvasMarginBottom,t=a.canvasMarginLeft,A=a.canvasMarginRight,d=a.minCanvasHeight,V=a.minCanvasWidth;c=a.minChartWidth;var da=a.minChartHeight,y=a.height,z=a.width,v=a._initConfig||(a._initConfig={}),B=!1,C=a.origCanvasTopMargin,F=a.origCanvasBottomMargin,D,E,G=[];v.canvasLeft=a.canvasLeft;v.canvasWidth=a.canvasWidth;v.canvasHeight=a.canvasHeight;v.canvasTop=a.canvasTop;v.availableHeight=a.availableHeight;v.availableWidth=a.availableWidth;a.canvasWidth-2*p<c&&(h=(a.canvasWidth-
c)/2);a.canvasHeight-2*p<da&&(f=(a.canvasHeight-da)/2);this._allocateSpace({top:f||p,bottom:f||p,left:h||p,right:h||p});a.origCanvasWidth=a.canvasWidth;a.origCanvasLeft=a.canvasLeft;a.canvasRight=a.canvasLeft+a.canvasWidth;a.origCanvasRight=a.canvasRight;p=0;for(h=b.length;p<h;p++)f=b[p],c=.7*a.availableWidth,c=f&&f.placeAxis(c)||{},G.push({axisIndex:p,spaceTaken:c}),f&&this._allocateSpace(c);b=.7*a.canvasHeight;this._manageActionBarSpace&&this._allocateSpace(this._manageActionBarSpace(b));this._manageLegendSpace(void 0);
k&&(this._allocateSpace({bottom:k}),a.shift=g+u+n);m&&this._allocateSpace({right:m});a.canvasWidth-2*q<V&&(E=(a.canvasWidth-V)/2);this._allocateSpace({left:E||q,right:E||q});V>z-t-A&&(k=a.canvasWidth-V,g=t+A,t=a.canvasMarginLeft=k*t/g,A=a.canvasMarginRight=k*A/g);t=t>a.canvasLeft?t-a.canvasLeft:0;this._allocateSpace({left:t,right:A>z-a.canvasRight?A+a.canvasRight-z:0});b=l===ka?.6*a.canvasHeight:.6*a.canvasWidth;this._manageChartMenuBar(b);b=.2*a.availableHeight;this._allocateSpace(this._getSumValueSpace(b));
b=.3*a.availableHeight;a.origCanvasHeight=a.canvasHeight;a.canvasBottom=a.canvasTop+a.canvasHeight;a.origCanvasBottom=a.canvasBottom;a.origCanvasTop=a.canvasTop;a.realtimeEnabled&&(r?this._allocateSpace(this._realTimeValuePositioning(b)):this._hideRealTimeValue());b=.6*a.availableHeight;a.xAxisSpaceAllocation=l=e&&e.placeAxis(b);e&&this._allocateSpace(l);this._getDSspace&&this._allocateSpace(this._getDSspace(.4*a.canvasWidth));b=.3*a.availableHeight;this._manageScrollerPosition&&this._manageScrollerPosition(b);
a.canvasHeight-2*q<d&&(D=(a.canvasHeight-d)/2);this._allocateSpace({top:D||q,bottom:D||q});this._allocateSpace({bottom:n});d>y-w-x&&(B=!0,k=a.canvasHeight-d,g=w+x,w=a.canvasMarginTop=k*w/g,x=a.canvasMarginBottom=k*x/g);e=w>a.canvasTop?w-a.canvasTop:0;n=x>y-a.canvasBottom?x+a.canvasBottom-y:0;this._allocateSpace({top:e,bottom:n});B&&(g=C+F,B=a.canvasHeight,B>d&&(k=B-d,e=k*C/g,n=k*F/g),this._allocateSpace({top:e,bottom:n}));a.actualCanvasMarginTop=e;a.actualCanvasMarginLeft=t},_createToolBox:function(){var c,
b,a,d,e,f,h,l,g,k=this,m=k.config;d=k.components;c=d.chartMenuBar;g=m.showToolBarButtonToolText;var n=m.stepZoom;c&&c.drawn||(H.mscartesian._createToolBox.call(k),c=d.tb,b=c.graphics||(c.graphics={}),a=c.getAPIInstances(c.ALIGNMENT_HORIZONTAL),a=a.Symbol,d=d.chartMenuBar.componentGroups[0],e=b.zoomInButton=(new a("zoomInIcon",void 0,c.idCount++,c.pId)).attachEventHandlers({click:function(){k.zoom(n)},tooltext:g&&m.btnZoomInToolText||F}),f=b.zoomOutButton=(new a("zoomOutIcon",void 0,c.idCount++,c.pId)).attachEventHandlers({click:function(){var a=
m.viewPortHistory;1<a.length&&(a=a.slice(-2,-1)[0],k.updateVisual(a.x,a.y,a.scaleX,a.scaleY))},tooltext:g&&m.btnZoomOutToolText||F}),h=b.resetButton=(new a("resetIcon",void 0,c.idCount++,c.pId)).attachEventHandlers({click:function(){var a=m.viewPortConfig,b=k.graphics;1<m.viewPortHistory.length&&(a.isReset=!0,k.zoomSelection(0,0,m.canvasWidth,m.canvasHeight),m.viewPortHistory.splice(1),b.trackerGroup.attr({cursor:"default"}),k.updateButtonVisual(),k.updateSelectionBox(0,0,0,0));C.raiseEvent("zoomReset",
{},k.chartInstance,[k.chartInstance.id])},tooltext:g&&m.btnResetChartToolText||F}),l=b.toggleZoomInButton=(new a("zoomModeIcon",void 0,c.idCount++,c.pId)).attachEventHandlers({click:function(){k.toogleDragPan(!0)},tooltext:g&&m.btnSelectZoomToolText||F}),g=b.togglePanButton=(new a("panModeIcon",void 0,c.idCount++,c.pId)).attachEventHandlers({click:function(){k.toogleDragPan(!0)},tooltext:g&&m.btnPanToolText||F}),d.addSymbol(g,!0),d.addSymbol(l,!0),d.addSymbol(h,!0),d.addSymbol(f,!0),d.addSymbol(e,
!0))},_createLayers:function(){var c=this.graphics,b=this.components.paper;H.scatter._createLayers.call(this);!c.imageContainer&&(c.imageContainer=b.group("dataset-orphan",c.datasetGroup));this.__preDraw()},_dist:function(c,b){var a=this.components,d;d=a.xAxis[0];a=a.yAxis[0];if(c&&b)return d=(c.x-b.x)*d.getPVR(),a=(c.y-b.y)*a.getPVR(),Math.sqrt(Math.pow(d,2)+Math.pow(a,2))},__preDraw:function(){var c=this.graphics,b=c.imageContainer,a=this.config,d=a.canvasLeft,e=a.canvasTop,f=a.canvasWidth,h=a.canvasHeight,
l=this.jsonData.chart,g=this.linkedItems,g=g.eventListeners||(g.eventListeners=[]),k=this.linkedItems.container,m=this.components.paper;a.updateAnimDuration=500;b.transform("t"+d+","+e);b.attr({"clip-rect":d+","+e+","+f+","+h});a.status="zoom";a.maxZoomLimit=D(l.maxzoomlimit,1E3);a.viewPortHistory=[{scaleX:1,scaleY:1,x:0,y:0}];!c.trackerElem&&(c.trackerElem=m.rect(d,e,f,h,0,c.trackerGroup).attr({fill:S,stroke:S}));ea(k,N?"touchstart":"mousemove",this.searchMouseMove);g.push(X(k,"touchstart mousemove",
this.searchMouseMove,this));this.zoomPanManager(b)},searchMouseMove:function(c){var b,a,d,e=c.data,f=e.config,h=f.viewPortConfig;a=e.components;var l=a.xAxis[0],g=a.yAxis[0];e.linkedItems.container&&!f.isDragging&&((b=I(c,e))&&b.insideCanvas?(a=f.canvasTop,d=l.getAxisConfig("axisDimention").x||f.canvasLeft,h.lastMouseCoordinate={x:Number(l.getValue(b.chartX-d)),y:Number(g.getValue(b.chartY-a))},clearTimeout(h.neighbourSearchTimer),f.lastMouseEvent=c,h.neighbourSearchTimer=setTimeout(function(){f.isDragging||
e._bestNeighbour(h.lastMouseCoordinate)},100)):e.highlightPoint(!1))},updateSelectionBox:function(c,b,a,d){var e=this.config,f=this.graphics,h=this.components.paper,l=e.viewPortConfig,g=e.cursor,k=f.selectionBox,m=e.canvasRight,n=e.canvasLeft,u=e.canvasTop,q=e.canvasBottom,r=c<a?c:a,p=b<d?b:d,w=c>a?c:a,x=b>d?b:d,t=a-c,A=b-d,g=g?0<t&&0<A?"ne-resize":0>t&&0<A?"nw-resize":0>t&&0>A?"sw-resize":0<t&&0>A?"se-resize":"default":"default",r=r<n?n:r>m?m:r,p=p<u?u:p>q?q:p,t=c===a&&b===d?0:(w>m?m:w<n?n:w)-r,
A=c===a&&b===d?0:(x>q?q:x<u?u:x)-p;k?k.attr({x:r,y:p,width:t,height:A,cursor:g}):f.selectionBox=h.rect(r,p,t,A).attr({"stroke-width":1,stroke:"red",fill:"#00FF00",opacity:.2,cursor:g});f.trackerGroup.attr({cursor:g});e.cursor=g;l.selectionDimensions||(l.selectionDimensions={startX:0,endX:0,startY:0,endY:0});l.selectionDimensions.startX=c;l.selectionDimensions.endX=b;l.selectionDimensions.startY=a;l.selectionDimensions.endY=d},getValue:function(c){var b=this.config,a=this.components,d=b.viewPortConfig;
c=this.getOriginalPositions(c.x,c.y,c.x,c.y);var e=a.xAxis[0].config.axisRange,a=a.yAxis[0].config.axisRange,f=e.min,h=a.max;return{x:f+(c[0]-b.canvasLeft)/(b.canvasWidth*d.scaleX/(e.max-f)),y:h-(c[1]-b.canvasTop)/(b.canvasHeight*d.scaleY/(h-a.min))}},_getTouchViewPort:function(c,b,a){var d,e;e=this.config;var f=e.canvasLeft,h=e.canvasTop;d=e.canvasWidth;e=e.canvasHeight;var l=z(c[0].chartX,c[1].chartX)-f,g=z(c[0].chartY,c[1].chartY)-h,k=Math.abs(c[1].chartX-c[0].chartX);c=Math.abs(c[1].chartY-c[0].chartY);
var f=z(b[0].chartX,b[1].chartX)-f,m=z(b[0].chartY,b[1].chartY)-h,h=Math.abs(b[1].chartX-b[0].chartX)/k*a.scaleX;b=Math.abs(b[1].chartY-b[0].chartY)/c*a.scaleY;l=a.x+l/a.scaleX-f/h;a=a.y+g/a.scaleY-m/b;l=0>l?0:l;a=0>a?0:a;b=1>b?1:b;h=1>h?1:h;d-=d/h;e-=e/b;return{x:l>d?d:l,y:a>e?e:a,scaleX:h,scaleY:b}},getOriginalPositions:function(c,b,a,d){var e=this.config,f=e.viewPortConfig,h=f.scaleX,l=f.scaleY,g=f.x,f=f.y,k=z(c,a);c=B(c,a);a=z(b,d);b=B(b,d);c=c>e.canvasWidth?e.canvasWidth:c;b=b>e.canvasHeight?
e.canvasHeight:b;k=0>k?0:k;a=0>a?0:a;return[g+k/h,f+a/l,(c-k)/h,(b-a)/l]},zoomSelection:function(c,b,a,d){var e=this.config;a&&d&&(a=Math.abs(e.canvasWidth/a),d=Math.abs(e.canvasHeight/d),this.updateVisual(c,b,a,d))},toogleDragPan:function(c){var b=this.config,a=b.status;c&&(b.status="zoom"===a?"pan":"zoom",C.raiseEvent("zoomModeChanged",{panModeActive:b.status},this.chartInstance,[this.chartInstance.id]));this.updateButtonVisual()},updateManager:function(c){var b,a=this.components.dataset,d=a.length;
for(b=0;b<d;b+=1)a[b].draw(c);c||this._drawQuadrant()},zoomPanManager:function(){var c,b=[],a=[],d=this,e=d.config,f=d.graphics,h=d.components,l=h.xAxis[0],g=h.eventListeners||(h.eventListeners=[]),k=d.viewPortConfig,m=!1,n=0,u,q={},r=function(a){var b=a.chartX,c=a.chartY,d=l.getAxisConfig("axisDimention").x||e.canvasLeft,f=e.canvasTop,g=e.canvasRight,k=e.canvasBottom;b<d&&(a.chartX=B(b,d));b>g&&(a.chartX=z(b,g));c<f&&(a.chartY=B(c,f));c>k&&(a.chartY=z(c,k))},p={start:function(a){k=e.viewPortConfig;
N=a.touches?!0:!1;b[0]=I(a,d);d.updateSelectionBox(0,0,0,0);N&&(m=!1,c=a.touches.length,2===c&&(m=!0,q.x=k.x,q.y=k.y,q.scaleX=k.scaleX,q.scaleY=k.scaleY,b[0]=I(a.touches.item(0),d),b[1]=I(a.touches.item(1),d)));e.isDragging=!1;"pan"===e.status&&(e.panStartX=k.x,e.panStartY=k.y,b[0].insideCanvas&&f.trackerGroup.attr({cursor:"move"}))},on:function(c){var g,l,n,p;n=e.panStartX;var r=e.panStartY;g=k.scaleX;l=k.scaleY;var u=h.xAxis[0],v=h.yAxis[0];N=c.touches?!0:!1;a[0]=I(c,d);a[0].insideCanvas?"pan"===
e.status&&f.trackerGroup.attr({cursor:"move"}):f.trackerGroup.attr({cursor:"default"});N&&c&&(p=c.touches.length,2===p?(m=!0,a[0]=I(c.touches.item(0),d),a[1]=I(c.touches.item(1),d)):m=!1);!e.isDragging&&(!N||2<T(a[0].chartX-b[0].chartX)||2<T(a[0].chartY-b[0].chartY))&&(e.isDragging=!0,d.highlightPoint(!1),"zoom"===e.status&&(b[0].pointValue=d.getValue({x:b[0].chartX,y:b[0].chartY}),C.raiseEvent("selectionStart",{chartX:b[0].chartX,chartY:b[0].chartY,pageX:b[0].pageX,pageY:b[0].pageY,selectionTop:b[0].chartX+
e.canvasLeft,selectionLeft:b[0].chartY+e.canvasTop,selectionWidth:0,selectionHeight:0,startXVAlue:b[0].pointValue.x,startYVAlue:b[0].pointValue.y},d.chartInstance,[d.chartInstance.id])));if(e.isDragging)if(m){if(b[0].insideCanvas||b[1].insideCanvas)n=d._getTouchViewPort(b,a,q),d.updateVisual(n.x,n.y,n.scaleX,n.scaleY,!0)}else"zoom"===e.status?d.updateSelectionBox(b[0].chartX,b[0].chartY,a[0].chartX,a[0].chartY):"pan"!==e.status||1===g&&1===l||!b[0].insideCanvas||(c=b&&a[0].chartX-b[0].chartX,p=b&&
a[0].chartY-b[0].chartY,n-=c/g,r-=p/l,g=e.canvasWidth*(g-1)/g,l=e.canvasHeight*(l-1)/l,k.x=n>g?g:0>n?0:n,k.y=r>l?l:0>r?0:r,d.updateManager(),u.draw(),v.draw())},end:function(c){var g=I(c,d),k=l.getAxisConfig("axisDimention").x||e.canvasLeft,h=e.canvasTop,p;p=e.canvasWidth/4;var v=e.canvasHeight/4,g=isNaN(g.chartX)||isNaN(g.chartY)?a[0]||b[0]:g;if(e.isDragging){if(m){if(b[0].insideCanvas||b[1].insideCanvas)c=d._getTouchViewPort(b,a,q),d.updateVisual(c.x,c.y,c.scaleX,c.scaleY);m=!1}else"zoom"===e.status&&
(c=g,p=b[0],r(p),r(c),h=d.getOriginalPositions(p.chartX-k,p.chartY-h,c.chartX-k,c.chartY-h))&&(c.pointValue=d.getValue({x:c.chartX,y:c.chartY}),C.raiseEvent("selectionEnd",{chartX:c.chartX,chartY:c.chartY,pageX:c.pageX,pageY:c.pageY,selectionTop:c.chartX+e.canvasLeft,selectionLeft:c.chartY+e.canvasTop,selectionWidth:Math.abs(c.chartX-p.chartX),selectionHeight:Math.abs(c.chartY-p.chartY),startXVAlue:p.pointValue.x,startYVAlue:p.pointValue.y,endXValue:c.pointValue.x,endYValue:c.pointValue.y},d.chartInstance,
[d.chartInstance.id]),p.chartX!==c.chartX&&p.chartY!==c.chartY&&d.zoomSelection(h[0],h[1],h[2],h[3]),d.updateSelectionBox(0,0,0,0));e.isDragging=!1;c=a[0]||b[0];c.data=d;d.searchMouseMove(c)}else g.insideCanvas&&(n+=1,setTimeout(function(){n=0;u=void 0},500),2===n?(c&&c.touches?!0:!1)===u&&(k=g.chartX-k,h=g.chartY-h,h=d.getOriginalPositions(k-p,h-v,k+p,h+v),d.zoomSelection(h[0],h[1],h[2],h[3]),c.preventDefault()):u=c&&c.touches?!0:!1);f.trackerGroup.attr({cursor:"default"})}};g.push(X(d.linkedItems.container,
"pointerdrag",function(a){p[a.state](a.originalEvent)}))},_drawDataset:function(){var c,b=this.components.dataset,a=b.length;for(c=0;c<a;c+=1)b[c]._deleteGridImages(),b[c].graphics._grid={};this.updateVisual()},updateVisual:function(c,b,a,d,e){var f,h,l,g,k;f=this.config;var m=this.components,n=f.viewPortConfig;k=f.canvasWidth;var u=f.canvasHeight,q=k,r=u,p=f.viewPortHistory,r=p.slice(-1)[0],w=[],w=f.status,x=f._initConfig;h=m.xAxis[0];g=m.yAxis[0];l=this.graphics;m=(m=m.quadrant)&&m.graphics.container;
q=f.maxZoomLimit;n.x=isNaN(c)?c=r.x:c;n.y=isNaN(b)?b=r.y:b;n.scaleX=a||(a=r.scaleX);n.scaleY=d||(d=r.scaleY);a>q&&(n.x=c=z(c,k-k/q),n.scaleX=a=q);d>q&&(n.y=b=z(b,u-u/q),n.scaleY=d=q);if(e)this.updateManager(e);else for(1<a||1<d?("zoom"===w&&this.toogleDragPan(!0),a>=r.scaleX||d>=r.scaleY?(p.push({scaleX:a,scaleY:d,x:c,y:b}),w=["zoomed","zoomIn"]):(p.pop(),r=p.slice(-1)[0],n.x=r.x,n.y=r.y,n.scaleX=r.scaleX,n.scaleY=r.scaleY,w=["zoomed","zoomOut"])):(1<p.length&&p.pop(),"pan"===w&&this.toogleDragPan(!0),
w=["zoomed","zoomOut"]),this.toogleDragPan(),q=f.canvasWidth,r=f.canvasHeight,c&&(c=n.x*=q/k),b&&(n.y*=r/u),f.canvasLeft=x.canvasLeft,f.canvasWidth=x.canvasWidth,f.canvasHeight=x.canvasHeight,f.canvasTop=x.canvasTop,f.availableHeight=x.availableHeight,f.availableWidth=x.availableWidth,this._spaceManager(),this._postSpaceManagement(),this.updateManager(),h.draw(),g.draw(),this._drawCanvas(),k={"clip-rect":f.canvasLeft+","+f.canvasTop+","+f.canvasWidth+","+f.canvasHeight},f.viewPortConfig&&this.graphics.imageContainer.attr({x:f.canvasLeft,
y:f.canvasRight}),l.imageContainer.attr(k).transform("T"+f.canvasLeft+","+f.canvasTop),l.tracker&&l.tracker.attr(k),m&&m.attr(k),f=h.getValue(0),h=h.getValue(q),l=g.getValue(0),g=g.getValue(r),0===arguments.length&&(w=F),k=0;k<w.length;k+=1)"zoomed"===w[k]&&C.raiseEvent("zoomed",{level:p.length,startX:f,startY:l,endX:h,endY:g},this.chartInstance,[this.chartInstance.id]),"zoomIn"===w[k]?C.raiseEvent("zoomedIn",{level:p.length,startX:f,startY:l,endX:h,endY:g},this.chartInstance,[this.chartInstance.id]):
"zoomOut"!==w[k]||n.isReset||C.raiseEvent("zoomedOut",{level:p.length,startX:f,startY:l,endX:h,endY:g},this.chartInstance,[this.chartInstance.id]);this.highlightPoint(!1);n.isReset=!1},getFillColor:function(c,b){b=parseFloat(b/100);0>b?b=0:1<b&&(b=1);c||(c="#FFFFFF");if(Z&&!ha)return b?c:"transparent";c=c.replace(/^#?([a-f0-9]+)/ig,"$1");c=v.graphics.HEXtoRGB(c);c[3]=b.toString();return"rgba("+c.join(",")+")"},_bestNeighbour:function(c){var b=this.components,a=this.config,d=b.xAxis[0],e=b.yAxis[0],
f=this.jsonData.chart,h=a.canvasLeft,l=a.canvasTop,g,k,m,n,u,q,r,p,w,x,t,A;A=b.numberFormatter;w=b.dataset;for(g=w.length-1;0<=g;--g)if(b=w[g],t=b.config,k=t.showHoverEffect,p=t.showTooltip,b.components.kDTree&&b.visible&&(n=b.getElement(c),b=this._dist(c,n),!u||b<q))if(m=g,u=n,q=b,r=w[m]&&t.zoomedRadius||0,q<=r)break;q<=B(r+2,5)?(c=d.getPixel(u.x)-h,l=e.getPixel(u.y)-l,h=y(u.tooltext,t.plotToolText),b=w[m],t=b.config,w=t.tooltip.toolTipSepChar,q=t.tooltip.seriesNameInToolTip,r=u.x,g=u.y,u&&(x=A.yAxis(g),
A=A.xAxis(r),x=Number(p)?void 0!==h?W(h,[4,5,6,7,8,9,10,11],{yaxisName:e.getAxisConfig("axisName"),xaxisName:d.getAxisConfig("axisName"),yDataValue:x,xDataValue:A},u,f,b.config):(q?t.seriesname?t.seriesname+w:"":"")+"x:"+A+w+"y:"+x:F),a.lastHoveredPoint!==u&&this.highlightPoint(k,c,l,u,m,x)):this.highlightPoint(!1)},highlightPoint:function(c,b,a,d,e,f){var h=this,l=h.config,g=h.components,k=h.graphics,m=g.paper,n=k.tracker,u=(g=g.dataset[e])&&g.config;e=g&&u.zoomedRadius||0;var q=g&&u.hoverCosmetics,
g=q&&q.fill,u=q&&q.borderColor,q=q&&q.borderThickness,r={},r=function(a){v.plotEventHandler.call(this,h,a)},p=function(a){v.plotEventHandler.call(this,h,a,"dataplotRollover")},w=function(a){v.plotEventHandler.call(this,h,a,"dataplotRollout")},x=d&&d.link;n||(n=k.tracker=m.circle(0,0,0,k.trackerGroup).attr({"clip-rect":l.canvasLeft+","+l.canvasTop+","+l.canvasWidth+","+l.canvasHeight}).click(r).trackTooltip(!0).hover(p,w));d&&n.data("eventArgs",{x:d.x,y:d.y,tooltip:f,link:x});l.lastHoveredPoint=d;
r=Number(c)?{r:e,fill:g,stroke:u,"stroke-width":q}:{r:e,fill:S,stroke:S,"stroke-width":0};r.cursor=x?"pointer":"";n.attr(r).tooltip(f).transform("t"+(b+l.canvasLeft)+","+(a+l.canvasTop));d&&la("mouseover",n&&n.node,l.lastMouseEvent)},zoom:function(c){var b,a,d=this.config,e=d.viewPortConfig;b=e.x;a=e.y;var f=d.canvasWidth,d=d.canvasHeight,h=f/e.scaleX,l=d/e.scaleY,e=h*c;c*=l;e=e>f?f:e;c=c>d?d:c;b=b+h/2-e/2;a=a+l/2-c/2;b=0>b?0:b;a=0>a?0:a;b=b+e>f?f-e:b;a=a+c>d?d-c:a;this.zoomSelection(b,a,e,c)},updateButtonVisual:function(){var c,
b,a,d;a=this.config;var e=this.components.tb.graphics;c=a.status;var f;1>=a.viewPortHistory.length?(a=["zoomOutButton","resetButton","togglePanButton"],d=["zoomInButton"],f="toggleZoomInButton"):(d=["resetButton","zoomOutButton","zoomInButton"],a=[],"zoom"===c?(d.push("togglePanButton"),f="toggleZoomInButton"):"pan"===c&&(d.push("toggleZoomInButton"),f="togglePanButton"));for(c=0;c<a.length;c+=1)b=a[c],e[b].node.attr({config:{hover:{fill:"#FFFFFF","stroke-width":1,stroke:"#E3E3E3",cursor:"default"},
normal:{fill:"#FFFFFF",stroke:"#E3E3E3","stroke-width":1,cursor:"default"},disable:{fill:"#FFFFFF","stroke-width":1,stroke:"#E3E3E3","stroke-opacity":1,cursor:"default"},pressed:{fill:"#FFFFFF","stroke-width":1,stroke:"#E3E3E3",cursor:"default"}},fill:["#FFFFFF","#FFFFFF","#FFFFFF","#FFFFFF",!0],"button-disabled":!1,stroke:"#E3E3E3","stroke-opacity":1});for(c=0;c<d.length;c+=1)b=d[c],e[b].node.attr({config:{hover:{fill:"#FFFFFF","stroke-width":1,stroke:"#aaaaaa",cursor:"pointer"},normal:{fill:"#FFFFFF",
stroke:"#C2C2C2","stroke-width":1,cursor:"pointer"},disable:{fill:"#FFFFFF","stroke-width":1,stroke:"#E3E3E3","stroke-opacity":1,cursor:"pointer"},pressed:{fill:"#EFEFEF","stroke-width":1,stroke:"#C2C2C2",cursor:"pointer"}},"button-disabled":!1,fill:["#FFFFFF","#FFFFFF","#FFFFFF","#FFFFFF",!0],stroke:"#C2C2C2","stroke-opacity":1});e[f].node.attr({config:{hover:{fill:"#EFEFEF","stroke-width":1,stroke:"#EFEFEF",cursor:"default"},normal:{fill:"#EFEFEF",stroke:"#E3E3E3","stroke-width":1,cursor:"default"},
disable:{fill:"#E6E6E6","stroke-width":1,stroke:"#E3E3E3","stroke-opacity":1,cursor:"default"},pressed:{fill:"#EFEFEF","stroke-width":1,stroke:"#E3E3E3",cursor:"default"}},"button-disabled":!1,fill:["#EFEFEF","#EFEFEF","#EFEFEF","#EFEFEF",!0],stroke:"#E3E3E3","stroke-opacity":1})},_drawAxis:function(){}},H.scatterBase);O.register("component",["dataset","zoomscatter",{type:"zoomscatter",configure:function(){var c,b,a,d,e,f,h;f=this.chart;var l=f.config;d=f.jsonData.chart;var g=f.getFillColor,k=this.JSONData;
this.__base__.configure.call(this);f=this.config;b=this.components;c=y(k.anchorbordercolor,d.anchorbordercolor);f.anchorBorderThickness=y(k.anchorborderthickness,d.anchorborderthickness,c?1:0);b.kDTree=new P;f.chunkSize=Math.floor(z((k.data||[]).length/5,5E4));c=f.staticRadius=D(d.staticradius,0);f.radius=D(k.radius,k.anchorradius,d.radius,d.anchorradius,c?3:.5);h=f.showHoverEffect;c=R(y(k.plotfillhovercolor,k.hovercolor,d.plotfillhovercolor,d.hovercolor,f.anchorbgcolor));b=y(k.plotfillhoveralpha,
k.hoveralpha,d.plotfillhoveralpha,d.hoveralpha,U);a=R(y(k.plotfillhovercolor,k.hovercolor,d.plotfillhovercolor,d.hovercolor,c));e=y(k.plotfillhoveralpha,k.hoveralpha,d.plotfillhoveralpha,d.hoveralpha,U);d=D(k.borderhoverthickness,d.borderhoverthickness,1);f.hoverCosmetics={showHoverEffect:h,fill:g(c,b),borderColor:g(a,e),borderThickness:d};f.tooltip={toolTipVisible:l.showtooltip,seriesNameInToolTip:l.seriesnameintooltip,toolTipSepChar:l.tooltipsepchar};f.lastViewPort={}},draw:function(c){var b,a,
d;b=this.graphics;d=this.chart;a=d.components;var e=d.graphics.imageContainer,f=a.paper;d=d.config;var h=this.visible,l=d.viewPortConfig,g=this.config,k=g.lastViewPort||{},m=!1;b.container||(b.container=f.group("grid-container",e));h&&this._conatinerHidden?this.show():h||this._conatinerHidden||this.hide();if(c)this._pixelatedDraw();else{if(k.scaleX!==l.scaleX||k.scaleY!==l.scaleY)k.scaleX=l.scaleX,k.scaleY=l.scaleY,c=a.xAxis[0],b=a.yAxis[0],a=c.getPVR(),c=b.getPVR(),d=B(g.zoomedRadius=z(g.staticRadius?
g.radius:g.radius*z(l.scaleX,l.scaleY),d.canvasWidth/2,d.canvasHeight/2),2),this.components.kDTree._setSearchLimit(d/a,d/c),this._deleteGridImages(),this.graphics._grid={},m=!0;this._gridDraw(m)}},_pixelatedDraw:function(){var c,b,a,d,e,f=this.chart.config;a=this.config;d=this.graphics;var h=a.drawLine,l=a.lastViewPort||{},g=l.scaleX,k=l.scaleY;e=f.viewPortConfig;var m=e.scaleX,n=e.scaleY,l=this.graphics._grid||(this.graphics._grid=[]),g=m/g,k=n/k,n=f.canvasWidth*g,f=f.canvasHeight*k;a=a._batchDarwTimers;
d=d.container;clearTimeout(this.timer);if(a&&a.length)for(;a.length;)clearTimeout(a.shift());d.transform("t"+G(-e.x*e.scaleX)+","+G(-e.y*e.scaleY));for(c in l)if(e=l[c])for(b in e)(d=e[b])&&d.drawState&&(a=d.image,a.attr({x:d.xPixel*g,y:d.yPixel*k,width:n,height:f}),h&&(a=d.lineImage,a.attr({x:d.xPixel*g,y:d.yPixel*k,width:n,height:f})))},_deleteGridImages:function(){var c,b,a,d,e;b=this.config;var f=this.graphics,h=f._imagePool||(f._imagePool=[]),l=f._canvasPool||(f._canvasPool=[]),g=f._lineImagePool||
(f._lineImagePool=[]),k=f._lineCanvasPool||(f._lineCanvasPool=[]),m=f._grid||[];if((b=b._batchDarwTimers)&&b.length)for(;b.length;)clearTimeout(b.shift());for(a in m)if(e=m[a])for(d in e)(b=e[d])&&b.drawState&&(c=b.image,c.attr({src:"",width:0,height:0}),h.push(c),delete b.image,c=b.canvas,l.push(c),delete b.canvas,delete b.ctx,c=b.lineImage)&&(c.attr({src:"",width:0,height:0}),g.push(c),delete b.lineImage,c=b.lineCanvas,k.push(c),delete b.lineCanvas,delete b.lineCtx);delete f._grid},_gridDraw:function(c){var b=
this,a=b.graphics,d=b.config,e=b.chart.config.viewPortConfig;clearTimeout(d.timer);a.container.transform("t"+G(-e.x*e.scaleX)+","+G(-e.y*e.scaleY));c?b._gridManager():d.timer=setTimeout(function(){b._gridManager()},10)},_gridManager:function(){var c,b,a,d,e,f,h,l,g,k=this,m=k.config,n=k.graphics._grid,u=m._drawGrid||(m._drawGrid=[]),q=k.chart,r=q.config,q=q.components;e=r.viewPortConfig;f=e.scaleX;var p=e.scaleY;h=Math.ceil(p);d=Math.ceil(f);var w=q.xAxis[0],x=q.yAxis[0],q=w.getAxisConfig("axisDimention").axisLength||
r.canvasWidth,r=r.canvasHeight,t=w.config,A=x.config,v=t.axisRange.min,t=t.axisRange.max,y=A.axisRange.min,A=A.axisRange.max,D=(t-v)/f,C=(A-y)/p;b=m.radius*z(e.scaleX,e.scaleY)+m.plotCosmetics.borderWidth;w=T(b/(q*e.scaleX/(w.max-w.min)));x=T(b/(r*e.scaleY/(x.max-x.min)));b=q/f;g=r/p;c=z(1,b/10,g/10);var p={},E=[];f=e.x+c;b=e.x-c+b;l=e.y+c;c=e.y+g-c;e=k._getFocusedGrid(f,l);g=p[e.row]||(p[e.row]={});g[e.col]=!0;e=k._getFocusedGrid(b,l);g=p[e.row]||(p[e.row]={});g[e.col]=!0;e=k._getFocusedGrid(b,c);
g=p[e.row]||(p[e.row]={});g[e.col]=!0;e=k._getFocusedGrid(f,c);g=p[e.row]||(p[e.row]={});g[e.col]=!0;f=k._getFocusedGrid();e=f.row;f=f.col;b=B(e-1,0);e=z(e+1,h-1);h=B(f-1,0);f=z(f+1,d-1);d=A-b*C;for(l=b;l<=e;l+=1){n[l]||(n[l]={});b=v+h*D;for(g=h;g<=f;g+=1)c=n[l][g],c||(a=B(d-C,y),c=z(b+D,t),c=n[l][g]={xPixel:g*q,yPixel:l*r,xMinValue:b,yMinValue:a,xMaxValue:c,yMaxValue:d,drawState:0,xMinWPad:B(b-w,v),yMinWPad:B(a-x,y),xMaxWPad:z(c+w,t),yMaxWPad:z(d+x,A)}),c.drawState||(p[l]&&p[l][g]?u.push({row:l,
col:g}):E.push({row:l,col:g})),b+=D;d-=C}(u.length||E.length)&&k._drawGridArr(function(){m._drawGrid=E;k._drawGridArr()})},_getFocusedGrid:function(c,b){var a=this.chart.config,d=a.viewPortConfig,e=a.canvasWidth/d.scaleX,a=a.canvasHeight/d.scaleY,f=isNaN(c)?d.x+e/2:c,d=isNaN(b)?d.y+a/2:b;return{row:aa(d/a),col:aa(f/e)}},_drawGridArr:function(c){var b,a,d,e,f=this.chart;b=f.config;var h=f.components,l=b.viewPortConfig,g=this.config,k=g.drawLine,m=g._drawGrid,n=[],u=this.graphics.container,q=h.paper,
h=h.xAxis[0].getAxisConfig("axisDimention").axisLength||b.canvasWidth,r=b.canvasHeight,p=this.graphics._grid,w=this.graphics._imagePool||[],x=this.graphics._canvasPool||[],t=this.graphics._lineImagePool||[],A=this.graphics._lineCanvasPool||[],v=g.plotCosmetics,l=g.radius*z(l.scaleX,l.scaleY),f=(f.components.xAxis[0].getAxisConfig("axisDimention").x||b.canvasLeft)-b.canvasLeft;if(m.length){for(;m.length;)b=m.shift(),b=p[b.row][b.col],2!==b.drawState&&(b.drawState=2,k&&(b.lineImage=t.length?t.shift():
q.image("",u),b.lineImage.attr({x:b.xPixel+f,y:b.yPixel,width:h,height:r}),b.lineCanvas=x.length?d=A.shift():d=Q.document.createElement("canvas"),d.setAttribute("width",h),d.setAttribute("height",r),e=b.lineCtx=d.getContext("2d"),e.fillStyle=v.fillStyle,e.strokeStyle=v.lineStrokeStyle,e.lineWidth=v.lineWidth),b.image=w.length?w.shift():q.image("",u),b.image.attr({x:b.xPixel+f,y:b.yPixel,width:h,height:r}),b.canvas=x.length?a=x.shift():a=Q.document.createElement("canvas"),a.setAttribute("width",h),
a.setAttribute("height",r),e=b.ctx=a.getContext("2d"),1>l?(e.strokeStyle=v.fillStyle,e.lineWidth=.5):(e.fillStyle=v.fillStyle,e.strokeStyle=v.strokeStyle,e.lineWidth=v.borderWidth),n.push(b));g._batchDrawindex=this.JSONData.data&&this.JSONData.data.length-1||0;this._drawGridArrBatch(n,c,!g.animation.enabled)}else c&&c()},_drawGridArrBatch:function(c,b,a){var d,e,f,h,l,g,k,m,n,u,q,r,p,w,x,t,v=this;g=v.config;var y=v.chart.components;t=v.config;var z=t.drawLine;m=t.plotCosmetics;h=t._batchDrawindex;
f=v.components.data;l=h-t.chunkSize;var B=y.yAxis[0],D=t.zoomedRadius,y=y.xAxis[0].getPVR(),B=B.getPVR(),C=g.showRegressionLine,E=t._store||[],F=m.lineWidth||1>D;C&&(w=g.regLineColor,x=g.regressionLineThickness);for(m=0;m<c.length;m+=1)c[m].ctx.beginPath(),z&&c[m].lineCtx.beginPath();for(l=0>=l?0:l;h>=l;--h)if((q=f[h]&&f[h].config.setValue)&&!isNaN(q.x)&&!isNaN(q.y))for(m=0;m<c.length;m+=1)(d=c[m],r=d.xMinValue,p=d.yMaxValue,q.x<d.xMinWPad||q.x>d.xMaxWPad||q.y<d.yMinWPad||q.y>d.yMaxWPad||(n=d.ctx,
u=d.lineCtx,d=G((q.x-r)*y),e=G((p-q.y)*B),(k=E[d])||(k=E[d]={}),k[e]))||(k[e]=!0,z&&(k=0<=h-1&&f[h-1].config.setValue)&&(u.moveTo(G((k.x-r)*y),G((p-k.y)*B)),u.lineTo(d,e)),1>D?(n.moveTo(d,e),n.lineTo(d+1,e)):(n.moveTo(d+D,e),n.arc(d,e,D,0,ia)));for(m=0;m<c.length;m+=1)d=c[m],n=d.ctx,n.fill(),F&&n.stroke(),n.closePath(),z&&(u=d.lineCtx,u.fill(),F&&u.stroke(),u.closePath());t._batchDrawindex=h;if(0<=h){if(!a)for(m=0;m<c.length;m+=1)n=c[m].image,f=c[m].canvas,n.attr({src:f.toDataURL("image/png")}),t.drawLine&&
(w=c[m].lineImage,x=c[m].lineCanvas,w.attr({src:x.toDataURL("image/png")}));(t._batchDarwTimers||(t._batchDarwTimers=[])).push(setTimeout(function(){v.chart&&v._drawGridArrBatch(c,b,a)},0))}else{delete t._store;if(C)for(t=g.regressionData,m=0;m<c.length;m+=1)d=c[m],h=d.xMinValue,g=d.yMaxValue,n=d.image,f=d.canvas,n=d.ctx,f=(t[0].x-h)*y,l=(g-t[0].y)*B,h=(t[1].x-h)*y,g=(g-t[1].y)*B,n.beginPath(),n.strokeStyle=w,n.lineWidth=x,n.moveTo(f,l),n.lineTo(h,g),n.stroke(),n.closePath();for(m=0;m<c.length;m+=
1)d=c[m],n=d.image,f=d.canvas,d.drawState=1,n.attr({src:f.toDataURL("image/png")}),z&&(w=d.lineImage,x=d.lineCanvas,w.attr({src:x.toDataURL("image/png")}));v.tree||setTimeout(function(){v._buildKdTree()},250);b&&b()}},_buildKdTree:function(){var c=this.config;c._kdPoints=(this.JSONData.data||[]).slice();this.components.kDTree||(this.components.kDTree=new P);this.components.kDTree.buildKdTree(c._kdPoints);delete c._kdPoints},getElement:function(c){if(this.components.kDTree)return this.components.kDTree.getNeighbour(c)},
show:function(){var c=this.graphics,c=c&&c.container;this.visible=!0;this._conatinerHidden=!1;c.show()},hide:function(){var c=this.graphics,c=c&&c.container;this.visible=!1;this._conatinerHidden=!0;c.hide()},_addLegend:function(){var c=this.chart,b=c.jsonData.chart,a=this.config,d=this.JSONData,e=c.getFillColor,f=y(d.anchorbordercolor,b.anchorbordercolor),h=R(y(f,a.plotBorderColor)),f=D(d.anchorborderthickness,b.anchorborderthickness,f?1:0),l=R(y(d.anchorbgcolor,d.color,b.anchorbgcolor,a.plotColor)),
g=y(d.anchoralpha,d.alpha,b.anchoralpha,U),b=y(d.anchorbgalpha,d.alpha,b.anchorbgalpha,U),d={color:a.lineColor,alpha:a.lineAlpha},e=a.plotCosmetics={fillStyle:e(l,g*b/100),strokeStyle:e(h,g),borderWidth:f,lineWidth:a.lineThickness,lineStrokeStyle:ga(d)};this.legendItemId=c.components.legend.addItems(this,this.legendInteractivity,{enabled:a.includeInLegend,type:this.type,fillColor:e.fillStyle,strokeColor:e.strokeStyle,anchorSide:2,strokeWidth:a.anchorBorderThickness,label:fa(this.JSONData.seriesname)})},
_setConfigure:function(){var c,b,a,d,e,f,h,l,g,k=-Infinity,m=Infinity,n=Infinity,u=-Infinity,q=this.components.data||(this.components.data=[]);c=this.chart;var r=v.parseUnsafeString,p=this.config,w=this.JSONData,x=c.jsonData.chart,t=w.data||[],A=t.length,C=c.components.numberFormatter,E=r(x.yaxisname),G=r(x.xaxisname),K=p.lineDashed,L=p.lineDashStyle,H=p.parentYAxis,I=p.toolTipSepChar,J=p.seriesname;for(c=0;c<A;c+=1)d=t[c],a=q[c]||(q[c]={}),b=a.config||(a.config={}),b.setValue=e={x:C.getCleanValue(d.x),
y:C.getCleanValue(d.y),index:c},u=B(u,e.x),n=z(n,e.x),k=B(k,e.y),m=z(m,e.y),p.showRegressionLine&&this.pointValueWatcher(e.x,e.y,p.regressionObj),b.setLink=y(d.link),b.anchorProps=this._parseAnchorProperties(c),b.showValue=D(d.showvalue,p.showValues),b.dashed=D(d.dashed,K),b.color=y(d.color,p.lineColor),b.alpha=y(d.alpha,p.lineAlpha),b.dashStyle=b.dashed?L:"none",b.toolTipValue=f=C.dataLabels(e.y,H),b.setDisplayValue=g=r(d.displayvalue),l=b.formatedVal=y(d.toolTipValue,C.dataLabels(e.y,H)),h=C.xAxis(e.x),
b.displayValue=y(g,f),b.setTooltext=v.getValidValue(r(y(d.tooltext,p.plotToolText))),p.showTooltip?void 0!==b.setTooltext?(e=[4,5,6,7,8,9,10,11],h={yaxisName:E,xaxisName:G,yDataValue:l,xDataValue:h},d=W(b.setTooltext,e,h,d,x,w)):null===l?d=!1:(d=J?J+I:F,d+=e.x?h+I:F,d+=f):d=!1,b.toolText=d,a?a.graphics||(q[c].graphics={}):a=q[c]={graphics:{}},b.hoverEffects=this._parseHoverEffectOptions(a),b.anchorProps.isAnchorHoverRadius=b.hoverEffects.anchorRadius;p.xMax=u;p.xMin=n;p.yMin=m;p.yMax=k;p.showRegressionLine&&
(p.regressionData=this.getRegressionLineSeries(p.regressionObj,p.showYOnX,A));this.ErrorValueConfigure&&this.ErrorValueConfigure()}},"Scatter"]);ba=function(c,b){return c.x-b.x};ca=function(c,b){return c.y-b.y};P.prototype={buildKdTree:function(c){this.tree=this._buildKdTree(c,!1)},getNeighbour:function(c){var b=this.tree,a={x1:c.x-this.xLimit,x2:c.x+this.xLimit,y1:c.y-this.yLimit,y2:c.y+this.yLimit};c=this._getIsWithinLimitFn(c);if(b)return this._searchBtwnLimit(a,b,!1,c)},_getIsWithinLimitFn:function(c){var b=
this;return function(a){return a&&1>=Math.pow((a.x-c.x)/b.xLimit,2)+Math.pow((a.y-c.y)/b.yLimit,2)?!0:!1}},_compair2closest:function(c,b){if(c){if(b)return b.i>c.i?b:c}else return b;return c},_searchBtwnLimit:function(c,b,a,d){var e,f,h,l;h=a?"x":"y";var g=a?c.x1:c.y1,k=a?c.x2:c.y2;if(b)return e=b.point1?b.point1[h]:k,f=b.point2?b.point2[h]:k,h=b.point3?b.point3[h]:k,d(b.point1)&&(l=this._compair2closest(l,b.point1)),e>=g&&b.left&&(l=this._compair2closest(l,this._searchBtwnLimit(c,b.left,!a,d))),
e<=k&&b.middle1&&(d(b.point2)&&(l=this._compair2closest(l,b.point2)),f>=g&&(l=this._compair2closest(l,this._searchBtwnLimit(c,b.middle1,!a,d))),f<=k&&b.middle2&&(d(b.point3)&&(l=this._compair2closest(l,b.point3)),h>=g&&(l=this._compair2closest(l,this._searchBtwnLimit(c,b.middle2,!a,d))),h<=k&&b.right&&(l=this._compair2closest(l,this._searchBtwnLimit(c,b.right,!a,d))))),l},_buildKdTree:function(c,b){var a,d,e;if(a=c&&c.length)return c.sort(b?ba:ca),7<a?(a=Math.floor(a/4),d=2*(a+1)-1,e=3*(a+1)-1,{left:this._buildKdTree(c.slice(0,
a),!b),point1:c[a],middle1:this._buildKdTree(c.slice(a+1,d),!b),point2:c[d],middle2:this._buildKdTree(c.slice(d+1,e),!b),point3:c[e],right:this._buildKdTree(c.slice(e+1),!b)}):{left:2<=a?{point1:c[0]}:void 0,point1:1<=a?1===a?c[0]:c[1]:void 0,middle1:3<=a?{point1:c[2]}:void 0,point2:4<=a?c[3]:void 0,middle2:5<=a?{point1:c[4]}:void 0,point3:6<=a?c[5]:void 0,right:7==a?{point1:c[6]}:void 0}},_setSearchLimit:function(c,b){this.xLimit=c;this.yLimit=b}};P.prototype.constructor=P;J.addSymbol({zoomInIcon:function(c,
b,a){c-=.2*a;b-=.2*a;var d=.8*a,e=J.rad(43),f=J.rad(48),h=c+d*K(e),e=b+d*L(e),l=c+d*K(f),f=b+d*L(f),g=J.rad(45),k=h+a*K(g),m=e+a*L(g),n=l+a*K(g)-1;a=f+a*L(g)-1;return["M",h,e,"A",d,d,0,1,0,l,f,"Z","M",h+1,e+1,"L",k,m,n,a,l+1,f+1,"Z","M",c-2,b,"L",c+2,b,"Z","M",c,b-2,"L",c,b+2,"Z"]},zoomModeIcon:function(c,b,a){var d=[];c-=.2*a;b-=.2*a;var e=.8*a,f=J.rad(43),h=J.rad(48),l=c+e*K(f),f=b+e*L(f),g=c+e*K(h),h=b+e*L(h),k=J.rad(45),m=l+a*K(k),n=f+a*L(k),u=g+a*K(k)-1;a=h+a*L(k)-1;return d=d.concat(["M",l,
f,"A",e,e,0,1,0,g,h,"Z","M",l+1,f+1,"L",m,n,u,a,u+1,a-1,u+1.5,a+1.5,u-1,a+1,u,a,g+1,h+1,"Z","M",c-2,b,"L",c+2,b,"Z","M",c,b-2,"L",c,b+2,"Z"])},panModeIcon:function(c,b,a){var d=c-11.25,d=c;a*=2.5;return[].concat(["M",d-a/16,b-a/8,"L",d+a/16,b-a/8,"L",d+a/16,b-a/3.2,"L",d+6*a/32,b-10*a/32,"L",d,b-a/2,"L",d-6*a/32,b-10*a/32,"L",d-a/16,b-a/3.2,"Z","M",d+4*a/32,b-2*a/32,"L",d+10*a/32,b-2*a/32,"L",d+10*a/32,b-6*a/32,"L",d+16*a/32,b,"L",d+10*a/32,b+6*a/32,"L",d+10*a/32,b+2*a/32,"L",d+4*a/32,b+2*a/32,"Z",
"M",d+2*a/32,b+5*a/32,"L",d+2*a/32,b+10*a/32,"L",d+6*a/32,b+10*a/32,"L",d,b+16*a/32,"L",d-6*a/32,b+10*a/32,"L",d-2*a/32,b+10*a/32,"L",d-2*a/32,b+5*a/32,"Z","M",d-4*a/32,b-2*a/32,"L",d-10*a/32,b-2*a/32,"L",d-10*a/32,b-6*a/32,"L",d-16*a/32,b,"L",d-10*a/32,b+6*a/32,"L",d-10*a/32,b+2*a/32,"L",d-4*a/32,b+2*a/32,"Z"])}})}])});
                                                                                      ./mvappsvr/docroot/db/fw/fusioncharts.ssgrid.js                                                     0000644 0000000 0000000 00000023613 13005675162 020613  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
 FusionCharts JavaScript Library
 Copyright FusionCharts Technologies LLP
 License Information at <http://www.fusioncharts.com/license>

 @version 3.11.2
*/
(function(q){"object"===typeof module&&"undefined"!==typeof module.exports?module.exports=q:q(FusionCharts)})(function(q){q.register("module",["private","modules.renderer.js-ssgrid",function(){var J=this,p=J.hcLib,y=p.BLANKSTRING,g=p.pluck,d=p.pluckNumber,K=p.chartAPI,w=p.graphics.convertColor,x=p.getFirstColor,O=p.setLineHeight,D=Math,P=D.min,G=D.max,Q=D.ceil,R=D.round,S=p.toRaphaelColor,L=p.POSITION_START,M=p.HUNDREDSTRING,N=p.COLOR_TRANSPARENT;K("ssgrid",{standaloneInit:!0,creditLabel:!1,friendlyName:"ssgrid Chart",
defaultDatasetType:"ssgrid",canvasBorderThickness:1,singleseries:!0,bgColor:"#FFFFFF",bgAlpha:100,_drawCaption:function(){},_drawCanvas:function(){},_createAxes:function(){},_feedAxesRawData:function(){},_setCategories:function(){},_setAxisLimits:function(){},_spaceManager:function(){var e=this.components.dataset[0];e._manageSpace&&this._allocateSpace(e._manageSpace())}},K.sscartesian);q.register("component",["dataset","ssgrid",{init:function(e){var a=this.chart;if(!e)return!1;this.JSONData=e;this.chartGraphics=
a.chartGraphics;this.components={};this.config={};this.graphics={};this.visible=1===d(this.JSONData.visible,!Number(this.JSONData.initiallyhidden),1);this.configure()},configure:function(){var e=this.chart,a=this.config,b=e.jsonData.chart||{},l=e.components.colorManager;a.plotFillAngle=d(360-b.plotfillangle,e.isBar?180:90);a.plotFillAlpha=g(b.plotfillalpha,M);a.plotBorderAlpha=g(b.plotborderalpha,M);a.plotBorderColor=g(b.plotbordercolor,l.getColor("plotBorderColor"));a.plotDashLen=d(b.plotborderdashlen,
5);a.plotDashGap=d(b.plotborderdashgap,4);a.showPercentValues=d(b.showpercentvalues,0);a.numberItemsPerPage=d(b.numberitemsperpage)||void 0;a.showShadow=d(b.showshadow,0);a.baseFont=g(b.basefont,"Verdana,sans");a.baseFontSize=g(b.basefontsize,10)+"px";a.baseFontColor=x(g(b.basefontcolor,l.getColor("baseFontColor")));a.alternateRowBgColor=x(g(b.alternaterowbgcolor,l.getColor("altHGridColor")));a.alternateRowBgAlpha=g(b.alternaterowbgalpha,l.getColor("altHGridAlpha"))+y;a.listRowDividerThickness=d(b.listrowdividerthickness,
1);a.listRowDividerColor=x(g(b.listrowdividercolor,l.getColor("borderColor")));a.listRowDividerAlpha=d(d(b.listrowdivideralpha,l.getColor("altHGridAlpha")+15))+y;a.colorBoxWidth=d(b.colorboxwidth,8);a.colorBoxHeight=d(b.colorboxheight,8);a.navButtonRadius=d(b.navbuttonradius,7);a.navButtonColor=x(g(b.navbuttoncolor,l.getColor("canvasBorderColor")));a.navButtonHoverColor=x(g(b.navbuttonhovercolor,l.getColor("altHGridColor")));a.textVerticalPadding=d(b.textverticalpadding,3);a.navButtonPadding=d(b.navbuttonpadding,
5);a.colorBoxPadding=d(b.colorboxpadding,10);a.valueColumnPadding=d(b.valuecolumnpadding,10);a.nameColumnPadding=d(b.namecolumnpadding,5);a.shadow=d(b.showshadow,0)?{enabled:!0,opacity:a.plotFillAlpha/100}:!1;this.currentPage=0;this._setConfigure()},_setConfigure:function(){var e=this.chart,a=this.config,b=this.JSONData,l=e.jsonData&&e.jsonData.data,b=G(l&&l.length||0,b&&b.data&&b.data.length||0),n=e.components,e=n.colorManager,m=n.numberFormatter,k=a.plotColor=e.getPlotColor(this.index||this.positionIndex),
r=p.parseUnsafeString,c=a.plotBorderThickness,I=a.plotBorderDashStyle,h,f,T=p.getDashStyle,u=this.components.data,t,A,z,B,F=n=0,H;u||(u=this.components.data=[]);for(B=0;B<b&&l;B++)if(h=l[B])if(k=m.getCleanValue(h.value),f=r(g(h.label,h.name)),null!=k||f!=y)f=u[n]||(u[n]={config:{}}),f=f.config,f.tooltext=h.tooltext,f.showValue=d(h.showvalue,a.showValues),f.setValue=k=m.getCleanValue(h.value),f.setLink=g(h.link),f.toolTipValue=m.dataLabels(k),f.setDisplayValue=r(h.displayvalue),f.displayValue=m.dataLabels(k)||
y,f.dataLabel=r(g(h.label,h.name))||y,t=d(h.dashed),A=d(h.dashlen,void 0),z=d(h.dashgap,a.plotDashGap),F+=k,n+=1,f.plotBorderDashStyle=1===t?T(A,z,c):0===t?"none":I,k=g(h.color,e.getPlotColor(d(H-b,B))),g(h.ratio,a.plotFillRatio),t=g(h.alpha,a.plotFillAlpha),f.color=w(k,t),f.borderColor=w(a.plotBorderColor,g(h.alpha,a.plotBorderAlpha).toString()),H++;l={fontFamily:a.baseFont,fontSize:a.baseFontSize,color:a.baseFontColor};O(l);a.textStyle=l;a.actualDataLen=n;a.sumOfValues=F},_manageSpace:function(){var e=
this.chart,a=this.config,b=e.linkedItems.smartLabel,l=this.components.data,n=e.config,m=e.jsonData.chart||{},m=n.borderThickness=d(m.showborder,1)?d(m.borderthickness,1):0,k=n.height-2*m,m=n.width-2*m,r=a.textStyle,c=a.actualDataLen,I=a.sumOfValues,h=e.components.numberFormatter,e=0,f,g;b.useEllipsesOnOverflow(n.useEllipsesWhenOverflow);b.setStyle(r);g=l.length;for(n=0;n<g;n++)if(f=l[n])f=f&&f.config,a.showPercentValues&&(f.displayValue=h.percentValue(f.setValue/I*100)),f=b.getOriSize(f.displayValue),
e=G(e,f.width+a.valueColumnPadding);b=parseInt(r.lineHeight,10);b+=2*a.textVerticalPadding;b=G(b,a.colorBoxHeight+a.listRowDividerThickness);l=k/b;a.numberItemsPerPage&&l>=a.numberItemsPerPage?a.numberItemsPerPage>=c?(a.numberItemsPerPage=c,k/=a.numberItemsPerPage):(k-=2*(a.navButtonPadding+a.navButtonRadius),c=a.numberItemsPerPage,k/=c):(l>=c||(k-=2*(a.navButtonPadding+a.navButtonRadius),c=Math.floor(k/b)),k/=c);m=m-a.colorBoxPadding-a.colorBoxWidth-a.nameColumnPadding-e-a.valueColumnPadding;a.labelX=
a.colorBoxPadding+a.colorBoxWidth+a.nameColumnPadding;a.valueX=a.colorBoxPadding+a.colorBoxWidth+a.nameColumnPadding+m+a.valueColumnPadding;a.valueColumnPadding=a.valueColumnPadding;a.rowHeight=k;a.itemsPerPage=c;a.listRowDividerAttr={"stroke-width":a.listRowDividerThickness,stroke:w(a.listRowDividerColor,a.listRowDividerAlpha)};a.alternateRowColor=w(a.alternateRowBgColor,a.alternateRowBgAlpha);return{top:0,bottom:0}},draw:function(){var e=this.config,a=this.chart,b=a.linkedItems.smartLabel,l=a.components.paper,
n=a.graphics.datasetGroup,m=this.components.data,k=a.jsonData&&a.jsonData.data,k=k&&k.length||0,d=G(k,m.length),c=this.graphics,g,c=a.config,h=c.borderThickness,f=h,a=a.config.width-c.borderThickness,p=S(e.alternateRowColor),u=e.rowHeight,t=e.listRowDividerAttr,A=t["stroke-width"]%2/2,z=e.colorBoxPadding+h,B=e.colorBoxHeight,F=e.colorBoxWidth,H=e.labelX+h,U=e.valueX+h,q=e.textStyle,y=e.itemsPerPage,C=0,x=this.currentPage||(this.currentPage=0),w={},D,E,v;this.graphics.container||(this.graphics.container=
[]);this.currentPage=x=P(Q(d/y)-1,x);for(E=0;E<d;E++)if(1!=(E+1)%y&&1!=y&&g||(f=h,(g=this.graphics.container[C])||(g=this.graphics.container[C]=l.group("grid-"+C,n)),C!==x?g.hide():g.show(),C+=1,w={pageId:C,data:[]},g.data("eventArgs",w)),c=m[E])v=c&&c.config,c=c&&(c.graphics||(c.graphics={})),E>=k?(c.alternateRow&&c.alternateRow.remove(),c.alternateRow=void 0,c.listRowDivideElem&&c.listRowDivideElem.remove(),c.listRowDivideElem=void 0,c.element&&c.element.remove(),c.element=void 0,c.label&&c.label.remove(),
c.label=void 0,c.displayValue&&c.displayValue.remove(),c.displayValue=void 0,c.listRowDivideElem&&c.listRowDivideElem.remove(),c.listRowDivideElem=void 0):(0===E%2&&(c.alternateRow||(c.alternateRow=l.rect()),g.appendChild(c.alternateRow),c.alternateRow.attr({x:h,y:f+.5*e.listRowDividerThickness,width:a-h,height:u,fill:p,"stroke-width":0})),c.element||(c.element=l.rect()),g.appendChild(c.element),c.element.attr({x:z,y:f+u/2-B/2,width:F,height:B,fill:v.color,"stroke-width":0,stroke:"#000000"}).shadow(e.shadow),
D=b.getSmartText(v.displayValue).width||0,c.displayValue||(c.displayValue=l.text()),g.appendChild(c.displayValue),c.displayValue.attr({text:v.displayValue,x:U,y:f+u/2,fill:q.color,direction:e.textDirection,"text-anchor":L}).css(q),c.label||(c.label=l.text()),v.label=b.getSmartText(v.dataLabel,a-(D+F+z),u),g.appendChild(c.label),c.label.attr({text:v.label.text,x:H,y:f+u/2,fill:q.color,direction:e.textDirection,"text-anchor":L}).css(q),w.data.push({color:v.color,displayValue:v.displayValue,label:v.dataLabel,
originalText:v.label.text,y:f+u/2}),f+=u,v=R(f)+A,c.listRowDivideElem||(c.listRowDivideElem=l.path()),g.appendChild(c.listRowDivideElem),c.listRowDivideElem.attr("path",["M",h,v,"L",a,v]).attr(t));for(d=this.graphics.container.length-1;d>=C;--d)g=this.graphics.container,g[d].remove(),g.splice(d,1);this._drawSSGridNavButton()},_drawSSGridNavButton:function(){var e=this,a=e.chart,b=e.config,l=b.actualDataLen,g=b.itemsPerPage,d=e.graphics,k=a.components.paper,r=a.config.borderThickness,c=b.navButtonColor,
p=b.navButtonHoverColor,h=b.navButtonRadius,f=.67*h,b=r+b.navButtonPadding+f+b.itemsPerPage*b.rowHeight+.5*h,r=20+r,q=a.config.width-r,a=a.graphics,u=a.trackerGroup,t=a.pageNavigationLayer,A=a.pagePreNavigationLayer,z=a.pageNextNavigationLayer,B=d.container.length,y=e.currentPage,x,w;t||(t=a.pageNavigationLayer=k.group("page-nav",u));A||(A=a.pagePreNavigationLayer=k.group("page-prev-nav",t));z||(z=a.pageNextNavigationLayer=k.group("page-next-nav",t));l>g?(t.show(),d.navElePrv||(d.navElePrv=k.path(A)),
x=d.navElePrv.attr({path:["M",r,b,"L",r+h+f,b-f,r+h,b,r+h+f,b+f,"Z"],fill:c,"stroke-width":0,cursor:"pointer"}),d.navTrackerPrv||(d.navTrackerPrv=k.circle(A).mouseover(function(){x.attr({fill:p,cursor:"pointer"})}).mouseout(function(){x.attr({fill:c})}).click(function(){e._nenagitePage(-1)})),d.navTrackerPrv.attr({cx:r+h,cy:b,r:h,fill:N,"stroke-width":0,cursor:"pointer"}),d.navEleNxt||(w=d.navEleNxt=k.path(z)),w=d.navEleNxt.attr({path:["M",q,b,"L",q-h-f,b-f,q-h,b,q-h-f,b+f,"Z"],fill:c,"stroke-width":0,
cursor:"pointer"}),d.navTrackerNxt||(d.navTrackerNxt=k.circle(z).mouseover(function(){w.attr({fill:p})}).mouseout(function(){w.attr({fill:c})}).click(function(){e._nenagitePage(1)})),d.navTrackerNxt.attr({cx:q-h,cy:b,r:h,fill:N,"stroke-width":0,cursor:"pointer"}),0===y?A.hide():A.show(),y===B-1?z.hide():z.show()):t.hide()},_nenagitePage:function(e){var a=this.chart,b=this.graphics.container,d=this.currentPage,g=a.graphics,m=g.pagePreNavigationLayer,g=g.pageNextNavigationLayer,k=b.length;b[d+e]&&(b[d].hide(),
b[d+e].show(),d=this.currentPage+=e);e=b[d].data("eventArgs");J.raiseEvent("pageNavigated",{pageId:d,data:e.data},a.chartInstance);0===d?m.hide():m.show();d===k-1?g.hide():g.show()}}])},[3,2,0,"sr2"]])});
                                                                                                                     ./mvappsvr/docroot/db/fw/fusioncharts.js                                                            0000755 0000000 0000000 00003444603 13005675162 017335  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
 FusionCharts JavaScript Library
 Copyright FusionCharts Technologies LLP
 License Information at <http://www.fusioncharts.com/license>

 @version 3.11.2
 FusionCharts JavaScript Library
 Copyright FusionCharts Technologies LLP
 License Information at <http://www.fusioncharts.com/license>

 @version 3.11.2
 FusionCharts JavaScript Library
 Copyright FusionCharts Technologies LLP
 License Information at <http://www.fusioncharts.com/license>
*/
(function(sb,Jb){"object"===typeof module&&module.exports?module.exports=sb.document?Jb(sb):function(g){if(!g.document)throw Error("Window with document not present");return Jb(g,!0)}:sb.FusionCharts=Jb(sb,!0)})("undefined"!==typeof window?window:this,function(sb,Jb){"undefined"===typeof sb&&"object"===typeof window&&(sb=window);(function(g){if(!g.FusionCharts||!g.FusionCharts.version){var k=g.document,F=g.navigator,r={window:g},E=r.modules={},z=r.interpreters={},G=Object.prototype.toString,a=/msie/i.test(F.userAgent)&&
!g.opera,L=/loaded|complete/,d=!1,l=function(){var a=r.ready;r.ready=!0;r.raiseEvent&&(r.readyNotified=!0,r.raiseEvent("ready",{version:r.core.version,now:!a},r.core));r.readyNow=!a},P=function(a,d){var t,m;if(d instanceof Array)for(t=0;t<d.length;t+=1)"object"!==typeof d[t]?a[t]=d[t]:("object"!==typeof a[t]&&(a[t]=d[t]instanceof Array?[]:{}),P(a[t],d[t]));else for(t in d)"object"===typeof d[t]?(m=G.call(d[t]),"[object Object]"===m?("object"!==typeof a[t]&&(a[t]={}),P(a[t],d[t])):"[object Array]"===
m?(a[t]instanceof Array||(a[t]=[]),P(a[t],d[t])):a[t]=d[t]):a[t]=d[t];return a};r.extend=function(a,d,t,m){var c;t&&a.prototype&&(a=a.prototype);if(!0===m)P(a,d);else for(c in d)a[c]=d[c];return a};r.uniqueId=function(){return"chartobject-"+(r.uniqueId.lastId+=1)};r.uniqueId.lastId=0;r.policies={options:{chartTypeSourcePath:["typeSourcePath",""],product:["product","v3"],insertMode:["insertMode","replace"],safeMode:["safeMode",!0],overlayButton:["overlayButton",void 0],containerBackgroundColor:["containerBackgroundColor",
"#ffffff"],containerBackgroundOpacity:["containerBackgroundOpacity",1],containerClassName:["containerClassName","fusioncharts-container"],chartType:["type",void 0],baseChartMessageFont:["baseChartMessageFont","Verdana,sans"],baseChartMessageFontSize:["baseChartMessageFontSize","10"],baseChartMessageColor:["baseChartMessageColor","#666666"],baseChartMessageImageHAlign:["baseChartMessageImageHAlign","middle"],baseChartMessageImageVAlign:["baseChartMessageImageVAlign","middle"],baseChartMessageImageAlpha:["baseChartMessageImageAlpha",
100],baseChartMessageImageScale:["baseChartMessageImageScale",100],dataLoadStartMessage:["dataLoadStartMessage","Retrieving data. Please wait."],dataLoadErrorMessage:["dataLoadErrorMessage","Error in loading data."],dataInvalidMessage:["dataInvalidMessage","Invalid data."],dataEmptyMessage:["dataEmptyMessage","No data to display."],typeNotSupportedMessage:["typeNotSupportedMessage","Chart type not supported."],browserNotSupportedMessage:["browserNotSupportedMessage","This browser is not supported."],
loadMessage:["loadMessage","Loading chart. Please wait."],renderErrorMessage:["renderErrorMessage","Unable to render chart."]},attributes:{lang:["lang","EN"],id:["id",void 0]},width:["width","400"],height:["height","300"],src:["swfUrl",""]};z.stat="swfUrl id width height debugMode registerWithJS backgroundColor scaleMode lang detectFlashVersion autoInstallRedirect".split(" ");r.parsePolicies=function(a,d,t){var m,c,w;for(c in d)if(r.policies[c]instanceof Array)w=t[d[c][0]],a[c]=void 0===w?d[c][1]:
w;else for(m in"object"!==typeof a[c]&&(a[c]={}),d[c])w=t[d[c][m][0]],a[c][m]=void 0===w?d[c][m][1]:w};r.parseCommands=function(a,d,t){var m,c;"string"===typeof d&&(d=z[d]||[]);m=0;for(c=d.length;m<c;m++)a[d[m]]=t[m];return a};r.registrars={module:function(){return r.core.apply(r.core,arguments)}};r.core=function(a){if(!(this instanceof r.core)){if(1===arguments.length&&a instanceof Array&&"private"===a[0]){if(E[a[1]])return;E[a[1]]={};a[3]instanceof Array&&(r.core.version[a[1]]=a[3]);return"function"===
typeof a[2]?a[2].call(r,E[a[1]]):r}if(1===arguments.length&&"string"===typeof a)return r.core.items[a];r.raiseError&&r.raiseError(this,"25081840","run","",new SyntaxError('Use the "new" keyword while creating a new FusionCharts object'))}var d={};this.__state={};1===arguments.length&&"object"===typeof arguments[0]?d=arguments[0]:r.parseCommands(d,z.stat,arguments);1<arguments.length&&"object"===typeof arguments[arguments.length-1]&&(delete d[z.stat[arguments.length-1]],r.extend(d,arguments[arguments.length-
1]));this.id="undefined"===typeof d.id?this.id=r.uniqueId():d.id;this.args=d;r.core.items[this.id]instanceof r.core&&r.raiseWarning(this,"06091847","param","",Error('A FusionCharts object with the specified id "'+this.id+'" already exists. Renaming it to '+(this.id=r.uniqueId())));r.parsePolicies(this,r.policies,d);this.attributes.id=this.id;this.resizeTo&&this.resizeTo(d.width,d.height,!0);this.chartType&&this.chartType(d.type||d.swfUrl,!0);r.raiseEvent("beforeInitialize",d,this);r.core.items[this.id]=
this;r.core.defaultOptions=r.core.options;r.raiseEvent("initialized",d,this);return this};r.core.prototype={};r.core.prototype.constructor=r.core;r.extend(r.core,{id:"FusionCharts",version:["3","11","2"],items:{},options:{},getObjectReference:function(a){return r.core.items[a].ref},register:function(a){return r.registrars[a=a&&a.toString&&a.toString().toLowerCase()]&&r.registrars[a].apply(r.core,Array.prototype.slice.call(arguments,1))},get:function(a){return r.registrars[a=a&&a.toString&&a.toString().toLowerCase()]&&
r.registrars[a].apply(r.core,Array.prototype.slice.call(arguments,1))}});FusionCharts=g.FusionCharts=r.core;g.FusionMaps&&g.FusionMaps.legacy&&(r.core(["private","modules.core.geo",g.FusionMaps.legacy,g.FusionMaps.version]),d=!0);L.test(k.readyState)||k.loaded?(r.ready=!0,setTimeout(l,1)):function(){function P(){arguments.callee.done||(arguments.callee.done=!0,t&&clearTimeout(t),d||(g.FusionMaps&&g.FusionMaps.legacy&&r.core(["private","modules.core.geo",g.FusionMaps.legacy,g.FusionMaps.version]),
g.FusionMaps=r.core),setTimeout(l,1))}function p(){L.test(k.readyState)?P():t=setTimeout(p,10)}var t,m;k.addEventListener?k.addEventListener("DOMContentLoaded",P,!1):k.attachEvent&&g.attachEvent("onLoad",P);if(a)try{"https:"===g.location.protocol?k.write('<script id="__ie_onload_fusioncharts" defer="defer" src="//:">\x3c/script>'):k.write('<script id="__ie_onload_fusioncharts" defer="defer" src="javascript:void(0)">\x3c/script>'),m=k.getElementById("__ie_onload_fusioncharts"),m.onreadystatechange=
function(){"complete"==this.readyState&&P()}}catch(c){}/WebKit/i.test(F.userAgent)&&(t=setTimeout(p,10));g.onload=function(a){return function(){P();a&&a.call&&a.call(g)}}(g.onload)}();g.FusionMaps=r.core}})(sb);FusionCharts.register("module",["private","modules.mantle.errormanager",function(){var g=this,k=g.window,F={type:"TypeException",range:"ValueRangeException",impl:"NotImplementedException",param:"ParameterException",run:"RuntimeException",comp:"DesignTimeError",undefined:"UnspecifiedException"},
r=function(z,r,a,L,d,l){var P="#"+r+" "+(z?z.id:"unknown-source")+L+" "+l+" >> ";d instanceof Error?(d.name=F[a],d.module="FusionCharts"+L,d.level=l,d.message=P+d.message,P=d.message,k.setTimeout(function(){throw d;},0)):P+=d;r={id:r,nature:F[a],source:"FusionCharts"+L,message:P};g.raiseEvent(l,r,z);if("function"===typeof k["FC_"+l])k["FC_"+l](r)},E;g.raiseError=function(g,k,a,L,d){r(g,k,a,L,d,"Error")};g.raiseWarning=function(g,k,a,L,d){r(g,k,a,L,d,"Warning")};E={outputHelpers:{text:function(g,k){E.outputTo("#"+
g.eventId+" ["+(g.sender.id||g.sender).toString()+'] fired "'+g.eventType+'" event. '+("error"===g.eventType||"warning"===g.eventType?k.message:""))},event:function(g,k){this.outputTo(g,k)},verbose:function(g,k){E.outputTo(g.eventId,g.sender.id,g.eventType,k)}},outputHandler:function(k,r){"function"!==typeof E.outputTo?g.core["debugger"].outputFailed=!0:(g.core["debugger"].outputFailed=!1,E.currentOutputHelper(k,r))},currentOutputHelper:void 0,outputTo:void 0,enabled:!1};E.currentOutputHelper=E.outputHelpers.text;
g.extend(g.core,{"debugger":{syncStateWithCharts:!0,outputFormat:function(g){return g&&"function"===typeof g.toLowerCase&&"function"===typeof E.outputHelpers[g=g.toLowerCase()]?(E.currentOutputHelper=E.outputHelpers[g],!0):!1},outputTo:function(k){"function"===typeof k?E.outputTo=k:null===k&&(g.core["debugger"].enable(!1),delete E.outputTo)},enable:function(k,r,a){var L;"object"===typeof k&&1===arguments.length&&(L=k,k=L.state,r=L.outputTo,a=L.outputFormat);"function"===typeof k&&("string"!==typeof r||
2!==arguments.length&&!L||(a=r),r=k,k=!0);if("boolean"===typeof k&&k!==E.enabled)g.core[(E.enabled=k)?"addEventListener":"removeEventListener"]("*",E.outputHandler);"function"===typeof r&&(E.outputTo=r);g.core["debugger"].outputFormat(a);return E.enabled},enableFirebugLite:function(){var z;k.console&&k.console.firebug?g.core["debugger"].enable(k.console.log,"verbose"):((z=k.document.getElementsByTagName("html"))&&z[0].setAttribute("debug","true"),g.loadScript("https://getfirebug.com/firebug-lite.js#overrideConsole=false,startOpened=true",
function(){g.core["debugger"].enable(k.console.log,"verbose")},"{ startOpened: true }",!0,!0))}},debugMode:{enabled:function(){k.setTimeout(function(){throw Error("Deprecated! Please use FusionCharts.debugger.enable instead.");},0);return g.core["debugger"].enable.apply(g.core["debugger"],arguments)}}},!1)}]);FusionCharts.register("module",["private","modules.mantle.eventmanager",function(){var g=this,k=g.window,F=g.core,r=Object.prototype.toString,E=r.call([]),z=function(a,d,l,t){try{a[0].call(d,
l,t||{})}catch(m){setTimeout(function(){throw m;},0)}},G=function(a,d,l){if(a instanceof Array)for(var t=0,m;t<a.length;t+=1){if(a[t][1]===d.sender||void 0===a[t][1])m=a[t][1]===d.sender?d.sender:g.core,z(a[t],m,d,l),!0===d.detached&&(a.splice(t,1),--t,d.detached=!1);if(!0===d.cancelled)break}},a={unpropagator:function(){return!1===(this.cancelled=!0)},detacher:function(){return!1===(this.detached=!0)},undefaulter:function(){return!1===(this.prevented=!0)},listeners:{},lastEventId:0,addListener:function(d,
l,p){var t,m;if(r.call(d)===E){t=[];for(m=0;m<d.length;m+=1)t.push(a.addListener(d[m],l,p));return t}if("string"!==typeof d)g.raiseError(p||g.core,"03091549","param","::EventTarget.addListener",Error("Unspecified Event Type"));else if("function"!==typeof l)g.raiseError(p||g.core,"03091550","param","::EventTarget.addListener",Error("Invalid Event Listener"));else return d=d.toLowerCase(),a.listeners[d]instanceof Array||(a.listeners[d]=[]),a.listeners[d].push([l,p]),l},removeListener:function(d,l,p){var t;
if("function"!==typeof l)g.raiseError(p||g.core,"03091560","param","::EventTarget.removeListener",Error("Invalid Event Listener"));else if(d instanceof Array)for(t=0;t<d.length;t+=1)a.removeListener(d[t],l,p);else if("string"!==typeof d)g.raiseError(p||g.core,"03091559","param","::EventTarget.removeListener",Error("Unspecified Event Type"));else if(d=d.toLowerCase(),d=a.listeners[d],d instanceof Array)for(t=0;t<d.length;t+=1)d[t][0]===l&&d[t][1]===p&&(d.splice(t,1),--t)},triggerEvent:function(d,l,
p,t,m,c){if("string"!==typeof d)g.raiseError(l,"03091602","param","::EventTarget.dispatchEvent",Error("Invalid Event Type"));else{d=d.toLowerCase();var w={eventType:d,eventId:a.lastEventId+=1,sender:l||Error("Orphan Event"),cancelled:!1,stopPropagation:this.unpropagator,prevented:!1,preventDefault:this.undefaulter,detached:!1,detachHandler:this.detacher};G(a.listeners[d],w,p);G(a.listeners["*"],w,p);switch(w.prevented){case !0:if("function"===typeof c)try{c.call(t||l||k,w,p||{})}catch(L){setTimeout(function(){throw L;
},0)}break;default:if("function"===typeof m)try{m.call(t||l||k,w,p||{})}catch(L){setTimeout(function(){throw L;},0)}}return!0}}},L=g.raiseEvent=function(d,l,p,t,m,c){return a.triggerEvent(d,p,l,t,m,c)},d=g.legacyEventList={},l={};g.disposeEvents=function(d){var l,p;for(l in a.listeners)for(p=0;p<a.listeners[l].length;p+=1)a.listeners[l][p][1]===d&&a.listeners[l].splice(p,1)};g.raiseEventWithLegacy=function(a,l,p,t,m,c,w){var g=d[a];L(a,l,p,m,c,w);g&&"function"===typeof k[g]&&setTimeout(function(){k[g].apply(m||
k,t)},0)};g.raiseEventGroup=function(a,d,g,t,m,c,w){var k=t.id,e=a+k;l[e]?(clearTimeout(l[e]),delete l[e]):k&&e?l[e]=setTimeout(function(){L(d,g,t,m,c,w);delete l[e]},0):L(d,g,t,m,c,w)};g.addEventListener=function(d,l){return a.addListener(d,l)};g.removeEventListener=function(d,l){return a.removeListener(d,l)};g.extend(F,{addEventListener:function(d,l){return a.addListener(d,l)},removeEventListener:function(d,l){return a.removeListener(d,l)},ready:function(a,d,l){g.ready?(F.ready=function(a,m){"function"===
typeof a&&setTimeout(function(){a.call(m||F,d||F)},0)},F.ready(a,l)):"function"===typeof a&&F.addEventListener("ready",function(){F.ready(a,d,l)});return this}});F.on=F.addEventListener;g.extend(F.prototype,{addEventListener:function(d,l){return a.addListener(d,l,this)},removeEventListener:function(d,l){return a.removeListener(d,l,this)}});F.prototype.on=F.prototype.addEventListener;g.policies.options.events=["events",{}];g.addEventListener("beforeInitialize",function(a){a=a.sender;var d=a.options.events,
l;if(d)for(l in d)"function"===typeof d[l]&&a.addEventListener(l,d[l])});g.ready&&!g.readyNotified&&(g.readyNotified=!0,g.raiseEvent("ready",{version:g.core.version,now:g.readyNow},g.core))}]);FusionCharts.register("module",["private","modules.mantle.ajax",function(){var g=this,k=g.window,F=parseFloat(k.navigator.appVersion.split("MSIE")[1]),r=5.5<=F&&7>=F?!0:!1,E=/mozilla/i.test(k.navigator.userAgent),z="file:"===k.location.protocol,G=k.ActiveXObject,a=(!G||!z)&&k.XMLHttpRequest,L={objects:0,xhr:0,
requests:0,success:0,failure:0,idle:0},d=function(){var l;if(a)return d=function(){L.xhr++;return new a},d();try{l=new G("Msxml2.XMLHTTP"),d=function(){L.xhr++;return new G("Msxml2.XMLHTTP")}}catch(g){try{l=new G("Microsoft.XMLHTTP"),d=function(){L.xhr++;return new G("Microsoft.XMLHTTP")}}catch(k){l=!1}}return l};g.core.ajax={stats:function(a){return a?L[a]:g.extend({},L)},headers:{"If-Modified-Since":"Sat, 29 Oct 1994 19:43:31 GMT","X-Requested-With":"XMLHttpRequest","X-Requested-By":"FusionCharts",
Accept:"text/plain, */*","Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"}};F=g.ajax=function(a,d){this.onSuccess=a;this.onError=d;this.open=!1;L.objects++;L.idle++};g.extend(F.prototype,{headers:g.core.ajax.headers,transact:function(a,P,W,p){var t=this,m=t.xmlhttp,c=t.headers,w=t.onError,J=t.onSuccess;a="POST"===a;var e,v=Object.prototype.hasOwnProperty,H;-1!==P.search(/^(http:\/\/|https:\/\/)/)&&k.location.hostname!==/(http:\/\/|https:\/\/)([^\/\:]*)/.exec(P)[2]?delete c["X-Requested-By"]:
!v.call(c,"X-Requested-By")&&(c["X-Requested-By"]="FusionCharts");if(!m||r||E)m=d(),t.xmlhttp=m;m.onreadystatechange=function(){try{4===m.readyState&&(!m.status&&z||200<=m.status&&300>m.status||304===m.status||1223===m.status||0===m.status?(J&&J(m.responseText,t,p,P),L.success++):w&&(w(Error("XmlHttprequest Error"),t,p,P),L.failure++),L.idle--,t.open=!1)}catch(a){w&&w(a,t,p,P),k.FC_DEV_ENVIRONMENT&&setTimeout(function(){throw a;},0),L.failure++}};try{m.open(a?"POST":"GET",P,!0);m.overrideMimeType&&
m.overrideMimeType("text/plain");if(a)if("string"===typeof W)e=W;else{e=[];for(H in W)e.push(H+"="+(W[H]+"").replace(/\=/g,"%3D").replace(/\&/g,"%26"));e=e.join("&")}else e=null;for(H in c)m.setRequestHeader(H,c[H]);m.send(e);L.requests++;L.idle++;t.open=!0}catch(B){g.raiseError(g.core,"1110111515A","run","XmlHttprequest Error",B.message)}return m},get:function(a,d){return this.transact("GET",a,void 0,d)},post:function(a,d,g){return this.transact("POST",a,d,g)},abort:function(){var a=this.xmlhttp;
this.open=!1;return a&&"function"===typeof a.abort&&a.readyState&&0!==a.readyState&&a.abort()},dispose:function(){this.open&&this.abort();delete this.onError;delete this.onSuccess;delete this.xmlhttp;delete this.open;L.objects--;return null}})}]);FusionCharts.register("module",["private","modules.mantle.runtime;1.1",function(){var g=this,k=g.window,F=/(^|[\/\\])(fusioncharts\.js)([\?#].*)?$/ig,r=/[\\\"<>;&]/,E=/^[^\S]*?(sf|f|ht)(tp|tps):\/\//i,z={},G={},a={},L={},d=g.purgeDOM=function(a){var l=a.attributes,
t,m;if(l)for(t=l.length-1;0<=t;--t)m=l[t].name,"function"===typeof a[m]&&(a[m]=null);if(l=a.childNodes)for(l=l.length,t=0;t<l;t+=1)d(a.childNodes[t])},l=function(a,d,t){var m,c;for(m in a)if(a[m]instanceof Array)d[a[m][0]]=t[m];else for(c in a[m])d[a[m][c][0]]=t[m][c]},P=/^(FusionCharts|FusionWidgets|FusionMaps)/;g.getScriptBaseUri=function(a){var d=k.document.getElementsByTagName("script"),t=d.length,m,c;for(c=0;c<t;c+=1)if(m=d[c].getAttribute("src"),void 0!==m&&null!==m&&null!==m.match(a))return m.replace(a,
"$1")};g.core.options.scriptBaseUri=function(){var a=g.getScriptBaseUri(F);return void 0===a?(g.raiseError(FusionCharts,"1603111624","run",">GenericRuntime~scriptBaseUri","Unable to locate FusionCharts script source location (URL)."),""):a}();g.isXSSSafe=function(a,d){return d&&null!==E.exec(a)?!1:null===r.exec(a)};g.xssEncode=function(a){return null===a||void 0===a||"function"!==typeof a.toString?"":a=a.toString().replace(/&/g,"&amp;").replace(/\'/g,"&#39;").replace(/\"/g,"&quot;").replace(/</g,
"&lt;").replace(/>/g,"&gt;")};g.loadScript=function(d,l,t,m,c){if(!d)return!1;var w=l&&l.success||l,J=l&&l.failure,e,v=g.hcLib,H=v.priorityList,B=v.schedular.addJob,Q={type:"script",success:!1},I=function(){L[e]=clearTimeout(L[e]);Q.success?w&&w(d,e):J&&J(d,e);g.raiseEvent("externalresourceload",Q,g.core)};c=c?"":g.core.options.scriptBaseUri;e=c+d;g.isXSSSafe(e,!1)||(e="function"===typeof k.encodeURIComponent?k.encodeURIComponent(e):k.escape(e));Q.path=c;Q.src=e;Q.file=d;if(!0===a[e]&&m)return Q.success=
!0,Q.notReloaded=!0,"function"===typeof l&&(l(),g.raiseEvent("externalresourceload",Q,g.core)),!0;if(z[e]&&m)return!1;z[e]=!0;G[e]&&G[e].parentNode&&G[e].parentNode.removeChild(G[e]);l=G[e]=k.document.createElement("script");l.type="text/javascript";l.src=e;t&&(l["\v"==="v"?"text":"innerHTML"]=t);"function"===typeof w&&(a[e]=!1,L[e]=clearTimeout(L[e]),l.onload=function(){a[e]=!0;Q.success=!0;B(I,void 0,void 0,H.render)},l.onerror=function(){a[e]=!1;z[e]=!1;B(I,void 0,void 0,H.render)},l.onreadystatechange=
function(){if("complete"===this.readyState||"loaded"===this.readyState)a[e]=!0,Q.success=!0,B(I,void 0,void 0,H.render)});k.document.getElementsByTagName("head")[0].appendChild(l);"function"===typeof J&&(L[e]=setTimeout(function(){a[e]||I()},g.core.options.html5ResourceLoadTimeout||15E3));return!0};g.capitalizeString=function(a,d){return a?a.replace(d?/(^|\s)([a-z])/g:/(^|\s)([a-z])/,function(a,m,c){return m+c.toUpperCase()}):a};g.extend(g.core,{clone:function(a,d){var t=typeof a,m,c=g.extend({},
this.args,!1,!1);l(g.policies,c,this);l(g.renderer.getRendererPolicy(this.options.renderer),c,this);delete c.id;delete c.animate;delete c.stallLoad;m=c.link;c=g.extend({},c,!1,!1);c.link=m;switch(t){case "object":g.extend(c,a);break;case "boolean":d=a}return d?c:new g.core(c)},isActive:function(){if(!this.ref||k.document.getElementById(this.id)!==this.ref)return!1;try{return P.test(this.ref.signature())}catch(a){return!1}},chartType:function(a,d){var t=this.src,m=!0===d,c=this.options,w;"string"===
typeof a&&(d="object"===typeof d?d:{},t=a.replace(/[\?\#][\s\S]*$/g,""),w=null!==t.match(/\.swf\s*?$/ig),t=t.replace(/\.swf\s*?$/ig,""),c.chartType=t.replace(/^[\s\S]*\//ig,"").replace(/^fcmap_/i,""),c.chartTypeSourcePath=-1===t.indexOf("/")?d.chartTypeSourcePath||this.options.chartTypeSourcePath||g.core.options.chartTypeSourcePath||"":t.replace(/[^\/]*?$/ig,""),this.src=((g.core.options.scriptBaseUri||"")+(c.chartTypeSourcePath||g.core.options.chartTypeSourcePath||"")).replace(/\/\s*$/g,"")+"/"+
c.chartType.replace(/\.swf\s*?$/ig,"")+".swf",w&&(g.raiseWarning(this,"08101320181","comp","FusionCharts#chartType",'Chart type has ".swf" in alias and as such has been deprecated. Please use chart type alias.'),c.chartTypeSourcePath=g.core.options.chartTypeSourcePath||""),void 0!==d.dataSource&&null!==d.dataSource?this.setChartData(d.dataSource,d.dataFormat,d.dataConfiguration):this.isActive()&&!m&&this.render());return(c.chartType||"").toLowerCase()}},!0);k.getChartFromId=function(a){g.raiseWarning(this,
"11133001041","comp","GenericRuntime~getObjectFromId()",'Use of deprecated getChartFromId() or getMapFromId(). Replace with "FusionCharts()" or FusionCharts.items[].');return g.core.items[a]instanceof g.core?g.core.items[a].ref:k.swfobject&&k.swfobject.getObjectById(a)};k.getMapFromId=k.getChartFromId}]);FusionCharts.register("module",["private","api.printmanager",function(){var g=this;g.extend(g.core,{printManager:{configure:function(){g.raiseWarning(g.core,"28141714","impl",".printManager.configure",
"PrintManager is deprecated")},isReady:function(){g.raiseWarning(g.core,"28141714","impl",".printManager.isReady","PrintManager is deprecated");return!1},enabled:function(){g.raiseWarning(g.core,"28141714","impl",".printManager.enabled","PrintManager is deprecated");return!1},managedPrint:function(){g.raiseWarning(g.core,"28141714","impl",".printManager.managedPrint","PrintManager is deprecated")}}},!1)}]);FusionCharts.register("module",["private","modules.interface.renderer",function(){var g=this,
k=g.window,F=k.document,r=function(){g.raiseError(this,"25081845","run","::RendererManager",Error("No active renderer"))},E=g.FusionChartsDOMInsertModes={REPLACE:"replace",APPEND:"append",PREPEND:"prepend"},z={undefined:{render:r,remove:r,update:r,resize:r,config:r,policies:{}}},G={},a=function(a){return function(){var m=this.ref;if(void 0===m||null===m||"function"!==typeof m[a])g.raiseError(this,"25081617","run","#"+a+"()","ExternalInterface call failed. Check whether chart has been rendered.");
else return m[a].apply(m,arguments)}},L=function(a,m){return"function"===typeof a[m]?function(){return a[m].apply(a,arguments)}:a[m]},d=function(a,m){var c=F.getElementById(a),d=m.id||m.getAttribute("id"),l,e;if(null===c)return!1;if(a===d)return!0;d=m.getElementsByTagName("*");l=0;for(e=d.length;l<e;l++)if(d[l]===c)return!1;return!0},l=/[^\%\d]*$/ig,P=function(){var a=function(m){var c=m.parentNode;if(9===c.nodeType)return!1;var d="display";k.getComputedStyle?d=k.getComputedStyle(m)[d]:m.currentStyle&&
(d=m.currentStyle[d]);return"none"===d?!0:c?a(c):!1};return a}(),W=function(){var a={},m,c=function(){var d=0,l=parseInt(g.core.options.visibilityTrackingInterval,10)||300,e,v,H,B,L;for(e in a)if(d+=1,v=a[e].chart,H=a[e].container,B=a[e].insertMode,L=a[e].callback,v.disposed||!P(H))delete a[e],--d,!v.disposed&&v.renderChart.call(v,H,B,L);m=d?setTimeout(c,l):clearTimeout(m)};return function(d,l,e,v){a[d.id]={chart:d,container:l,insertMode:e,callback:v};m||(m=setTimeout(c,parseInt(g.core.options.visibilityTrackingInterval,
10)||300))}}(),p;g.policies.options.containerElementId=["renderAt",void 0];g.policies.options.renderer=["renderer",void 0];g.policies.options.containerElementType=["containerElementType",void 0];g.policies.options.visibilityTrackingInterval=300;g.normalizeCSSDimension=function(a,m,c){a=void 0===a?c.offsetWidth||parseFloat(c.style.width):a;m=void 0===m?c.offsetHeight||parseFloat(c.style.height):m;var d={},l=c.style,e;l.width=a=a.toString?a.toString():"0";l.height=m=m.toString?m.toString():"0";if((d.widthIsRelative=
a.match(/^\s*\d*\.?\d*\%\s*$/)&&!a.match(/^\s*0\%\s*$/))&&0===c.offsetWidth)for(e=c;e=e.offsetParent;)if(0<e.offsetWidth){a=(e.offsetWidth*parseFloat(a.match(/\d*/)[0])/100).toString();break}if((d.heightIsRelative=m.match(/^\s*\d*\.?\d*\%\s*$/)&&!m.match(/^\s*0\%\s*$/))&&20>=c.offsetHeight)for(e=c;e=e.offsetParent;)if(0<e.offsetHeight){m=(e.offsetHeight*parseFloat(m.match(/\d*/)[0])/100).toString();break}d.width=a.replace?a.replace(/^\s*(\d*\.?\d*)\s*$/ig,"$1px"):a;d.height=m.replace?m.replace(/^\s*(\d*\.?\d*)\s*$/ig,
"$1px"):m;l.width=d.width;l.height=d.height;d.pixelWidth=d.widthIsRelative?c.offsetWidth:parseInt(d.width,10)||0;d.pixelHeight=d.heightIsRelative?c.offsetHeight:parseInt(d.height,10)||0;return d};p=g.renderer={register:function(a,m){if(!a||"function"!==typeof a.toString)throw Error("#03091436 ~renderer.register() Invalid value for renderer name.");a=a.toString().toLowerCase();if(void 0!==z[a])return g.raiseError(g.core,"03091438","param","::RendererManager>register",'Duplicate renderer name specified in "name"'),
!1;z[a]=m;return!0},userSetDefault:!1,setDefault:function(a){if(!a||"function"!==typeof a.toString)return g.raiseError(g.core,"25081731","param","::RendererManager>setDefault",'Invalid renderer name specified in "name"'),!1;if(void 0===z[a=a.toString().toLowerCase()])return g.raiseError(g.core,"25081733","range","::RendererManager>setDefault","The specified renderer does not exist."),!1;this.userSetDefault=!1;g.policies.options.renderer=["renderer",a];return!0},notifyRender:function(a){var m=g.core.items[a&&
a.id];m&&(!1!==a.success||a.silent)||g.raiseError(g.core.items[a.id],"25081850","run","::RendererManager",Error("There was an error rendering the chart. Enable FusionCharts JS debugger for more information."));if(m.ref=a.ref)a.ref.FusionCharts=g.core.items[a.id];g.raiseEvent("internal.DOMElementCreated",{},m)},protectedMethods:{options:!0,attributes:!0,src:!0,ref:!0,constructor:!0,signature:!0,link:!0,addEventListener:!0,removeEventListener:!0},getRenderer:function(a){return z[a]},getRendererPolicy:function(a){a=
z[a].policies;return"object"===typeof a?a:{}},currentRendererName:function(){return g.policies.options.renderer[1]},update:function(a){G[a.id].update.apply(a,Array.prototype.slice.call(arguments,1))},render:function(a){G[a.id].render.apply(a,Array.prototype.slice.call(arguments,1))},remove:function(a){G[a.id].remove.apply(a,Array.prototype.slice.call(arguments,1))},resize:function(a){G[a.id].resize.apply(a,Array.prototype.slice.call(arguments,1))},config:function(a){G[a.id].config.apply(a,Array.prototype.slice.call(arguments,
1))},dispose:function(a){G[a.id].dispose.apply(a,Array.prototype.slice.call(arguments,1))}};g.addEventListener("beforeInitialize",function(a){a=a.sender;var m=a.options.renderer.toLowerCase(),c;"string"===typeof a.options.renderer&&void 0===z[m]&&(a.options.renderer=g.policies.options.renderer[1]);a.options.renderer=m;G[a.id]=z[a.options.renderer];!0!==G[a.id].initialized&&"function"===typeof G[a.id].init&&(G[a.id].init(),G[a.id].initialized=!0);g.parsePolicies(a,G[a.id].policies||{},a.args);for(c in G[a.id].prototype)a[c]=
G[a.id].prototype[c];for(c in G[a.id].events)a.addEventListener(c,G[a.id].events[c])});g.addEventListener(["rendered","dataloaderror","nodatatodisplay","rendercancelled"],function(a,m){var c=a.sender;c instanceof g.core&&c.__state&&c.__state.rendering&&(g.raiseEvent("internal.rendered",m,c),delete c.__state.rendering)});g.addEventListener("loaded",function(d){var m=d.sender;d=d.sender.ref;var c,w;if(void 0!==d&&null!==d&&"function"===typeof d.getExternalInterfaceMethods){try{c=d.getExternalInterfaceMethods(),
c="string"===typeof c?c.split(","):[]}catch(l){c=[],g.raiseError(m,"13111126041","run","RendererManager^Loaded",Error("Error while retrieving data from the chart-object."+(l.message&&0<=l.message.indexOf("NPObject")?" Possible cross-domain security restriction.":"")))}for(d=0;d<c.length;d+=1)w=c[d],void 0===m[w]&&(m[w]=a(w));if(m.ref)for(w in c=p.protectedMethods,d=p.getRenderer(m.options.renderer).protectedMethods,m)if(d&&!c[w]&&!d[w]&&void 0===m.ref[w])try{m.ref[w]=L(m,w)}catch(l){}}});g.legacyEventList.resized=
"FC_Resized";g.extend(g.core.prototype,{render:function(a,d,c){var w=g.hcLib;c?"function"!==typeof c&&(c=void 0):"function"===typeof d?(c=d,d=void 0):d||"function"!==typeof a||(c=a,a=void 0);void 0===a&&(a=this.options.containerElementId);"string"===typeof a&&(a=F.getElementById(a));if(void 0===a||null===a)return g.raiseError(this,"03091456","run",".render()",Error("Unable to find the container DOM element.")),this;P(a)?W(this,a,d,c):this.args.asyncRender?w.schedular.addJob(this.renderChart,this,
[a,d,c],w.priorityList.render):this.renderChart.call(this,a,d,c);return this},renderChart:function(a,m,c){var w=this,l,e,v;if(!this.disposed){if((v=k[this.id])&&v.FusionCharts&&v.FusionCharts===this||(v=this.ref)&&v.FusionCharts&&v.FusionCharts===this)g.renderer.dispose(this),v===k[this.id]&&(k[this.id]=void 0);void 0!==k[this.id]&&g.raiseError(this,"25081843","comp",".render",Error("#25081843:IECompatibility() Chart Id is same as a JavaScript variable name. Variable naming error. Please use unique name forchart JS variable, chart-id and container id."));
c?"function"!==typeof c&&(c=void 0):"function"===typeof m?(c=m,m=void 0):m||"function"!==typeof a||(c=a,a=void 0);m=(m||this.options.insertMode).toLowerCase()||E.REPLACE;void 0===a&&(a=this.options.containerElementId);"string"===typeof a&&(a=F.getElementById(a));if(void 0===a||null===a)return g.raiseError(this,"03091456","run",".render()",Error("Unable to find the container DOM element.")),this;if(d(this.id,a))return g.raiseError(this,"05102109","run",".render()",Error("A duplicate object already exists with the specific Id: "+
this.id)),this;l=F.createElement(this.options.containerElementType||"span");l.setAttribute("id",this.id);if("append"!==m&&"prepend"!==m)for(;a.hasChildNodes();)a.removeChild(a.firstChild);"prepend"===m&&a.firstChild?a.insertBefore(l,a.firstChild):a.appendChild(l);this.options.containerElement=a;this.options.containerElementId=a.id;if(m=l.style)m.position="relative",m.textAlign="left",m.lineHeight="normal",m.display="inline-block",m.zoom="1",m["vertical-align"]="middle",m.fontWeight="normal",m.fontVariant=
"normal",m.fontStyle="normal",m.textDecoration="none",m["*DISPLAY"]="inline",m.padding="0",m.margin="0",m.border="none",m.direction="ltr";this.options.containerClassName&&(l.className=this.options.containerClassName);m=g.normalizeCSSDimension(this.width,this.height,l);this.__state.renderedWidth=m.pixelWidth;this.__state.renderedHeight=m.pixelHeight;this.__state.rendering=!0;g.raiseEvent("beforeRender",e={container:a,width:this.width,height:this.height,renderer:this.options.renderer},this,void 0,function(a,
e){!0!==this.disposed&&g.renderer.render(w,l,function(){g.renderer.notifyRender.apply(this,arguments);if(c)try{c.call(a.sender,e.container)}catch(v){setTimeout(function(){throw v;})}})},function(){g.raiseEvent("renderCancelled",e,w)});return this}},remove:function(){g.renderer.remove(this);return this},resizeTo:function(a,d,c){var w=this,L=w.width,e=w.height,v=w.__state;(w.apiInstance&&w.apiInstance.config||{}).resize=!0;"object"===typeof a&&(c=d,d=a.h,a=a.w);a=null===a||void 0===a?L:a.toString().replace(l,
"");d=null===d||void 0===d?e:d.toString().replace(l,"");!0!==c?g.raiseEvent("beforeresize",{currentWidth:L,currentHeight:e,newWidth:a,newHeight:d},w,void 0,function(){w.width=a;w.height=d;g.renderer.resize(w,{width:a,height:d});g.raiseEventWithLegacy("resized",{width:w.width,height:w.height,prevWidth:L,prevHeight:e,pixelWidth:w.ref&&w.ref.offsetWidth||0,pixelHeight:w.ref&&w.ref.offsetHeight||0,originalWidth:v.renderedWidth,originalHeight:v.renderedHeight},w,[w.id,w.width,w.height])},function(){g.raiseEvent("resizecancelled",
{currentWidth:L,currentHeight:e,cancelledTargetWidth:a,cancelledTargetHeight:d},w)}):(w.width=a,w.height=d);return this},dispose:function(){var a=this,d={};g.raiseEvent("beforeDispose",d,a,void 0,function(){g.renderer.dispose(a);g.raiseEvent("disposed",d,a);g.disposeEvents(a);delete g.core.items[a.id];for(var c in a)a.hasOwnProperty(c)&&delete a[c];a.disposed=!0},function(){g.raiseEvent("disposeCancelled",d,a)})},configure:function(a,d){var c;a&&("string"===typeof a?(c={},c[a]=d):c=a,g.renderer.config(this,
c))}});g.extend(g.core,{setCurrentRenderer:function(){var a=p.setDefault.apply(p,arguments);p.userSetDefault=!0;return a},getCurrentRenderer:function(){return p.currentRendererName.apply(p,arguments)},render:function(a,d){return a instanceof g.core?(a.render(d),a):(new g.core(a)).render(d)}},!1)}]);FusionCharts.register("module",["private","modules.interface.transcoder",function(){var g=this,k=g.window,F=g.transcoders={},r={},E={},z=/url$/i,G=g._interactiveCharts={selectscatter:[!0,!1],dragcolumn2d:[!0,
!0],dragarea:[!0,!0],dragline:[!0,!0],dragnode:[!0,!0]},a=function(a,c,w,t){var e=w.obj;w=w.args;w.dataSource=a;w.xmlHttpRequestObject=c;w.source="XmlHttpRequest";w.url=t;g.raiseEvent("dataLoadRequestCompleted",w,e,void 0,d,l)},L=function(a,c,d){var l=d.obj;d=d.args;d.error=a;d.httpStatus=c.xhr&&c.xhr.status?c.xhr.status:-1;d.xmlHttpRequestObject=c;g.raiseEvent("dataLoadError",d,l);"function"===typeof k.FC_DataLoadError&&k.FC_DataLoadError(l.id,d)},d=function(a,c){a.sender.setChartData(c.dataSource,
c.dataFormat,c.config,c.successcallback,c.silent)},l=function(a,c){g.raiseEvent("dataLoadCancelled",c,a.sender);c.xmlHttpRequestObject.abort()},P=function(d,c){var w=d.sender,l=w.__state,e=c.url;w.options.dataSource=c.url;l.dhmXhrObj||(l.dhmXhrObj=new g.ajax(a,L));l.dhmXhrObj.get("function"===typeof k.decodeURIComponent?k.decodeURIComponent(e):k.unescape(e),{obj:w,args:c})},W=function(a,c){var d=a.sender,l=d.__state;g.raiseEvent("dataLoadRequestCancelled",c,d);l&&l.dhmXhrObj&&l.dhmXhrObj.abort()},
p=function(a,c){var d=a.sender,l=d.__state,e=d.id;r[e]=c;E[e]&&delete E[e];E[e]={};l.dataReady=void 0;l.dataAvailable=!0;!0!==c.silent&&(!0!==d.options.safeMode||!0!==l.rendering||d.isActive()?(delete l.args,g.renderer.update(d,c)):(l.updatePending=c,g.raiseWarning(d,"23091255","run","::DataHandler~update","Renderer update was postponed due to async loading.")));g.raiseEvent("dataUpdated",c,d,void 0,c.successcallback)},t=function(a,c){g.raiseEvent("dataUpdateCancelled",c,a.sender,void 0,c.failurecallback)};
g.dataFormats={};g.policies.options.dataSource=["dataSource",void 0];g.policies.options.dataFormat=["dataFormat",void 0];g.policies.options.dataConfiguration=["dataConfiguration",void 0];g.policies.options.showDataLoadingMessage=["showDataLoadingMessage",!1];g.addDataHandler=function(a,c){if("string"!==typeof a||void 0!==F[a.toLowerCase()])g.raiseError(g.core,"03091606","param","::DataManager.addDataHandler",Error("Invalid Data Handler Name"));else{var d={},l=a.toLowerCase();F[l]=c;c.name=a;d["set"+
a+"Data"]=function(c,d,w){return this.setChartData(c,a,d,w)};c.transportable&&(d["set"+a+"Url"]=function(c,d,w){return this.setChartDataUrl(c,a,d,w)},g.dataFormats[a+"URL"]=l+"Url");d["get"+a+"Data"]=function(){return this.getChartData(a)};g.dataFormats[a]=l;g.extend(g.core,d,!0)}};g.extend(g.core.prototype,{setChartDataUrl:function(a,c,d,l,e){if(void 0===c||null===c||"function"!==typeof c.toString)c=this.options.dataFormat,g.raiseWarning(this,"03091609","param","FusionCharts#setChartDataUrl","Invalid Data Format. Reverting to current data format - "+
c);c=c.toString().toLowerCase();c=z.test(c)?c.slice(0,-3):c;g.raiseEvent("dataLoadRequested",{source:"XmlHttpRequest",url:a,dataFormat:c,silent:!!e,config:d,successcallback:l},this,void 0,P,W)},setChartData:function(a,c,d,l,e){var v=this.options,H,B;if(void 0===c||null===c||"function"!==typeof c.toString)c=v.dataFormat,g.raiseWarning(this,"03091610","param","FusionCharts#setChartData","Invalid Data Format. Reverting to current data format - "+c);c=c.toString().toLowerCase();z.test(c)?this.setChartDataUrl(a,
c,d,l,e):(v.dataSource=a,H=c,v.dataFormat=c,B=F[H],"undefined"===typeof B?g.raiseError(g.core,"03091611","param","FusionCharts#setChartData",Error("Data Format not recognized")):(c=(c=g.renderer&&g.renderer.getRenderer(v.renderer||g.renderer.currentRendererName()))&&c.dataFormat,d=c===H?B.passthrough?B.passthrough(a,d,v.chartType):{data:a}:B.encode(a,this,d||v.dataConfiguration)||{},d["native"]=c===H,d.format=d["native"]?c:"xml",d.dataFormat=H,d.dataSource=a,d.silent=!!e,"function"===typeof l&&(d.successcallback=
l),g.raiseEvent("beforeDataUpdate",d,this,void 0,p,t)))},getChartData:function(a,c){var d=this.options,l=this.id,e;if(void 0===a||"function"!==typeof a.toString||void 0===(e=F[a=a.toString().toLowerCase()]))g.raiseError(this,"25081543","param","::transcoder~getChartData()",Error('Unrecognized data-format specified in "format"'));else return E[l][a]&&(E[l][a]=null),E[l][a]?d=E[l][a]:r[l]?(a===r[l].format?E[l][a]=r[l]:(E[l].xml||(E[l].xml="xml"===r[l].format?r[l]:F[r[l].format].encode(r[l].data,this,
d.dataConfiguration)),E[l][a]||(E[l][a]=e.decode(E[l].xml.data,this,d.dataConfiguration))),d=E[l][a]):d={error:Error("Data not defined")},!0===!!c?d:d.data},dataReady:function(a){return a?this.__state.dataAvailable:this.__state.dataReady}});g.extend(g.core,{transcodeData:function(a,c,d,l,e){if(c&&"function"===typeof c.toString&&d&&"function"===typeof d.toString&&void 0!==F[d=d.toString().toLowerCase()]&&void 0!==F[c=c.toString().toLowerCase()])return a=F[c].encode(a,this,e),c=F[d].decode(a.data,this,
e,c),c.error instanceof Error||(c.error=a.error),l?c:c.data;g.raiseError(this,"14090217","param",".transcodeData()",Error("Unrecognized data-format specified during transcoding."))}},!1);g.getRenderer&&!g.getRenderer("flash")||g.addEventListener("DataLoadRequested",function(a){var c=a.sender;c.options&&"flash"===c.options.renderer&&c.options.useLegacyXMLTransport&&a.preventDefault()});g.addEventListener("beforeInitialize",function(a){a=a.sender;var c=a.options,d=c.dataSource,l=g.renderer&&g.renderer.getRenderer(c.renderer);
delete r[a.id];E[a.id]={};if(void 0!==d&&null!==d){a.__state.dataSetDuringConstruction=!0;if("string"!==typeof c.dataFormat)switch(typeof d){case "function":d=c.dataSource=d.call(a,c.dataConfiguration);c.dataFormat="JSON";break;case "string":c.dataFormat=/^\s*?\{[\s\S]*\}\s*?$/g.test(a.options.dataFormat)?"JSON":"XML";break;case "object":c.dataFormat="JSON"}c.dataFormat&&c.dataFormat.toString&&(a.__state.dataFetchDuringConstruction=z.test(c.dataFormat.toString()));a.setChartData(d,c.dataFormat,void 0,
void 0,!0)}else l&&(a.__state.dataSetDuringConstruction=!1,g.raiseWarning(a,"1810131922A","param",":dataHandler~event:beforeInitialize","Data source was not defined during construction, hence set to blank renderer default - "+l.dataFormat),a.setChartData("",l.dataFormat,void 0,void 0,!0),a.__state.dataAvailable=!1)});g.addEventListener("beforeDispose",function(a){var c=a.sender;delete r[a.sender.id];delete E[a.sender.id];c&&c.__state&&c.__state.dhmXhrObj&&c.__state.dhmXhrObj.abort()});g.addEventListener("disposed",
function(a){delete E[a.sender.id]});g.addEventListener("loaded",function(a){a=a.sender;var c=a.__state.updatePending;a instanceof g.core&&void 0!==c&&(delete a.__state.updatePending,g.renderer.update(a,c))});g.addEventListener("dataUpdated",function(a,c){var d=a.sender,l=d.__state;l.rendering&&(l.dataFetchDuringConstruction||l.updatePending)&&(delete l.dataFetchDuringConstruction,delete l.updatePending,g.renderer.update(d,c))});g.addEventListener(["dataLoadError","dataInvalid"],function(a){a.sender.__state.dataAvailable=
!1});g.addEventListener("loaded",function(a){a=a.sender;var c=a.__state,d,l,e;e=function(a,c){return function(e){return!1===e?c.apply(this):this.ref.getUpdatedXMLData?g.core.transcodeData(this.ref.getUpdatedXMLData(),"xml",a):this.getData?this.getData(a):c.apply(this)}};if(a.chartType&&G[a.chartType()]&&G[a.chartType()][0]){for(d in g.transcoders)l=g.transcoders[d].name,l="get"+l+"Data",a[l]=e(d,a.constructor.prototype[l]),a[l]._dynamicdatarouter=!0;c.dynamicDataRoutingEnabled=!0}else if(c.dynamicDataRoutingEnabled){for(d in g.transcoders)l=
g.transcoders[d].name,l="get"+l+"Data",a.hasOwnProperty(l)&&a[l]._dynamicdatarouter&&delete a[l];c.dynamicDataRoutingEnabled=!1}})}]);"object"!==typeof JSON&&(JSON={});(function(){function g(a){return 10>a?"0"+a:a}function k(d){E.lastIndex=0;return E.test(d)?'"'+d.replace(E,function(d){var g=a[d];return"string"===typeof g?g:"\\u"+("0000"+d.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+d+'"'}function F(a,l){var g,r,p,t,m=z,c,w=l[a];w&&"object"===typeof w&&"function"===typeof w.toJSON&&(w=w.toJSON(a));
"function"===typeof L&&(w=L.call(l,a,w));switch(typeof w){case "string":return k(w);case "number":return isFinite(w)?String(w):"null";case "boolean":case "null":return String(w);case "object":if(!w)return"null";z+=G;c=[];if("[object Array]"===Object.prototype.toString.apply(w)){t=w.length;for(g=0;g<t;g+=1)c[g]=F(g,w)||"null";p=0===c.length?"[]":z?"[\n"+z+c.join(",\n"+z)+"\n"+m+"]":"["+c.join(",")+"]";z=m;return p}if(L&&"object"===typeof L)for(t=L.length,g=0;g<t;g+=1)"string"===typeof L[g]&&(r=L[g],
(p=F(r,w))&&c.push(k(r)+(z?": ":":")+p));else for(r in w)Object.prototype.hasOwnProperty.call(w,r)&&(p=F(r,w))&&c.push(k(r)+(z?": ":":")+p);p=0===c.length?"{}":z?"{\n"+z+c.join(",\n"+z)+"\n"+m+"}":"{"+c.join(",")+"}";z=m;return p}}"function"!==typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+g(this.getUTCMonth()+1)+"-"+g(this.getUTCDate())+"T"+g(this.getUTCHours())+":"+g(this.getUTCMinutes())+":"+g(this.getUTCSeconds())+"Z":
null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()});var r=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,E=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,z,G,a={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},L;"function"!==typeof JSON.stringify&&(JSON.stringify=function(a,
l,g){var k;G=z="";if("number"===typeof g)for(k=0;k<g;k+=1)G+=" ";else"string"===typeof g&&(G=g);if((L=l)&&"function"!==typeof l&&("object"!==typeof l||"number"!==typeof l.length))throw Error("JSON.stringify");return F("",{"":a})});"function"!==typeof JSON.parse&&(JSON.parse=function(a,l){function g(a,d){var m,c,w=a[d];if(w&&"object"===typeof w)for(m in w)Object.prototype.hasOwnProperty.call(w,m)&&(c=g(w,m),void 0!==c?w[m]=c:delete w[m]);return l.call(a,d,w)}var L;a=String(a);r.lastIndex=0;r.test(a)&&
(a=a.replace(r,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return L=eval("("+a+")"),"function"===typeof l?g({"":L},""):L;throw new SyntaxError("JSON.parse");})})();FusionCharts.register("module",["private","modules.data.json",function(){var g=this,k=g.window,F=k.document,r=g.xssEncode,
E,z,G=function(a){var g,d;for(g in a)a.hasOwnProperty(g)&&(d=g.toLowerCase(),g!==d&&(a[d]=a[g],delete a[g]),"object"===typeof a[d]&&"data"!==d&&G(a[d]))};void 0===k.JSON&&g.raiseError(this,"1113062012","run","JSONDataHandler",Error("Could not find library support for JSON parsing."));g.policies.options.allowIESafeXMLParsing=["_allowIESafeXMLParsing",!0];E=function(){var a={set:!0,trendlines:!0,vtrendlines:!0,line:{trendlines:!0,vtrendlines:!0},data:!0,dataset:!0,lineset:!0,categories:!0,category:!0,
tasks:!0,linkeddata:!0,application:!0,definition:!0,axis:!0,connectors:!0,connector:{connectors:!0},trendset:!0,row:{rows:!0},column:{columns:!0},label:{labels:!0},color:{colorrange:!0},dial:{dials:!0},pointer:{pointers:!0},point:{trendpoints:!0},process:{processes:!0},task:{tasks:!0},milestone:{milestones:!0},datacolumn:{datatable:!0},text:{datacolumn:!0},item:{legend:!0},alert:{alerts:!0},groups:{annotations:!0},items:{groups:!0,data:!0},shapes:!0,shape:{shapes:!0},entitydef:!0,entity:{entitydef:!0}},
L={chart:"linkedchart",map:"linkedmap",set:"data",vline:{chart:"data",graph:"data",dataset:"data",categories:"category",linkedchart:"data"},apply:{application:"application"},style:{definition:"definition"},marker:{application:"application",definition:"definition",data:"items"},entity:{entitydef:"entitydef",data:"data"},shape:{shapes:"shapes"},connector:{connectors:{chart:"connector",linkedchart:"connector",map:"connectors",linkedmap:"connectors"}},annotationgroup:{annotations:"groups"},annotation:{groups:"items"}},
d={vline:{vline:"true"}},l={chart:!0,map:!0,graph:!0},P={dataset:"data",categories:"category"},z={target:"target",value:"value"},p={styles:{definition:!0,application:!0},chart:{value:!0,target:!0},graph:{value:!0,target:!0},linkedchart:{value:!0,target:!0},markers:{definition:!0,application:!0,shapes:!0,connectors:!0,data:!0},map:{entitydef:!0,data:!0},linkedmap:{entitydef:!0,data:!0}},t,m,c;t={append:function(c,d,e,v){!a[e]||!0!==a[e]&&!0!==a[e][v]?d[e]=c:(d[e]instanceof Array||(d[e]=[]),d[e].push(c))},
child:function(a,c,e,v){var m,B,k,I,r,X;for(m=0;m<c.length;m+=1)switch(k=c[m],B=k.nodeName.toLowerCase(),k.nodeType){case 1:I=t.attr(k.attributes);X=l[B];!0===X&&(r=I,I={},I[B]=r);X=d[B];"object"===typeof X&&g.extend(I,X);if(X=L[B])if("object"===typeof X&&"object"===typeof X[e])for(r in r=void 0,X[e]){if(v[r]){B=X[e][r];break}}else"object"===typeof X&&"string"===typeof X[e]?B=X[e]:"string"===typeof X&&(B=X);k.childNodes.length&&((X=p[e])&&X[B]?t.child(a,k.childNodes,B,v):t.child(I,k.childNodes,B,
v));(X=p[e])&&X[B]||t.append(I,a,B,e);break;case 3:if(X=z[e])B=X,I=k.data,t.append(I,a,B,e);X=P[e];"string"===typeof X&&v.chart&&parseInt(v.chart.compactdatamode,10)&&(B=X,I=k.data,a[B]=a[B]?a[B]+I:I)}},attr:function(a){var d,e={};if(!a||!a.length)return e;for(d=0;d<a.length;d+=1)"xml"===c&&(a[d].value?a[d].value=a[d].value.replace(/</g,"&lt;").replace(/>/g,"&gt;"):a[d].nodeValue&&(a[d].nodeValue=a[d].nodeValue.replace(/</g,"&lt;").replace(/>/g,"&gt;"))),e[a[d].nodeName.toLowerCase()]=a[d].value||
a[d].nodeValue;return e}};m=function(a){var c={},e,d,l,B,L,I,p,P,r;if("object"!==typeof a&&a&&"function"!==typeof a.toString)return m.errorObject=new TypeError("xml2json.parse()"),c;a=a.toString().replace(/<\!--[\s\S]*?--\x3e/g,"").replace(/<\?xml[\s\S]*?\?>/ig,"").replace(/&(?!([^;\n\r]+?;))/g,"&amp;$1");a=a.replace(/^\s\s*/,"");for(var z=/\s/,W=a.length;z.test(a.charAt(--W)););a=a.slice(0,W+1);if(!a)return c;try{k.DOMParser?e=(new k.DOMParser).parseFromString(a,"text/xml"):F.body&&g.core.options.allowIESafeXMLParsing?
(d=F.createElement("xml"),d.innerHTML=a,F.body.appendChild(d),e=d.XMLDocument,F.body.removeChild(d)):(e=new k.ActiveXObject("Microsoft.XMLDOM"),e.async="false",e.loadXML(a));if(!(e&&e.childNodes&&1===e.childNodes.length&&(l=e.childNodes[0])&&l.nodeName&&(B=l.nodeName.toLowerCase()))||"chart"!==B&&"map"!==B&&"graph"!==B)return m.errorObject=new TypeError("xml2json.parse()"),c;if("graph"===B){L=e.createElement("chart");for(r=(p=l.attributes)&&p.length||0;r--;)L.setAttribute(p[r].name,p[r].value),p.removeNamedItem(p[r].name);
if(r=(P=l.childNodes)&&P.length||0)--r,I=l.removeChild(P[r]),L.appendChild(I);for(;r--;)I=l.removeChild(P[r]),L.insertBefore(I,L.firstChild);e.replaceChild(L,l);l=L}}catch(M){m.errorObject=M}l?(l.attributes&&(c[B]=t.attr(l.attributes)),l.childNodes&&t.child(c,l.childNodes,B,c),delete m.errorObject):m.errorObject=new TypeError("xml2json.parse()");return c};return function(a){delete m.errorObject;c=arguments[arguments.length-1];return{data:m(a),error:m.errorObject}}}();z=function(){var a,g;a={items:{explode:{data:"set",
groups:{annotations:"annotationgroup"},items:{groups:"annotation"}},text:{chart:{target:"target",value:"value"},graph:{target:"target",value:"value"}},dsv:{dataset:{data:"dataset"},categories:{category:"categories"}},attr:{chart:{chart:"chart"},graph:{graph:"graph"},map:{map:"map"},linkedmap:{map:"map"},linkedchart:{chart:"chart"}},group:{styles:{definition:"style",application:"apply"},map:{data:"entity",entitydef:"entity"},markers:{definition:"marker",application:"marker",shapes:"shape",connectors:"connector",
items:"marker"}},tag:{markers:{items:"data"}}},qualify:function(a,l,g){return"object"===typeof this.items[a][g]?this.items[a][g][l]:this.items[a][g]}};g=function(d,l,k,z){var p="",t="",m="",c="",w,J,e;l&&"function"===typeof l.toLowerCase&&(l=l.toLowerCase());if(void 0===k&&d[l])for(w in d[l])J=w.toLowerCase(),"compactdatamode"===J&&(z.applyDSV=1==d[l][w]);if(d instanceof Array)for(w=0;w<d.length;w+=1)m="string"===typeof d[w]?m+r(d[w]):m+g(d[w],l,k,z);else{for(w in d)J=w.toLowerCase().replace(/[`~!@#$%^&*()|+\=?;:'", <>\{\}\[\]\\\/]/gi,
""),d[w]instanceof Array&&(e=a.qualify("group",J,l))?(m=a.qualify("tag",J,l)||J,t+="<"+m+">"+g(d[w],e,l,z)+"</"+m+">"):"object"===typeof d[w]?(e=a.qualify("attr",J,l))?(c=g(d[w],e,l,z).replace(/\s*\/\>/ig,""),l=J):t+=g(d[w],J,l,z):z.applyDSV&&(e=a.qualify("dsv",J,l))?t+=d[w]:(e=a.qualify("text",J,l))?(m=a.qualify("tag",J,l)||e,t+="<"+m+">"+d[w]+"</"+m+">"):"vline"===J&&d[w]?l="vline":p+=" "+J+'="'+r(d[w]).toString().replace(/\"/ig,"&quot;")+'"';if(e=a.qualify("explode",k,l))l=e;m=l;m=(""!==c?c:"<"+
m)+p+(""!==t?">"+t+"</"+m+">":" />")}return m};return function(a){delete g.errorObject;if(a&&"string"===typeof a)try{a=JSON.parse(a)}catch(l){g.errorObject=l}return{data:g(a,a&&a.graph?"graph":a&&a.map?"map":"chart",void 0,{}),error:g.errorObject}}}();g.addDataHandler("JSON",{encode:z,decode:E,passthrough:function(a,g,d){g={data:{}};d=!!/zoomscatter/ig.test(d);if(!a)return g;if("string"!==typeof a)try{a=JSON.stringify(a)}catch(l){return g.error=l,g}try{d?(g.data=JSON.parse(a),G(g.data)):g.data=JSON.parse(a.replace(/"([^"]+)"[\s]*:/g,
function(a,d){return'"'+d.toLowerCase()+'":'}))}catch(l){console.log(l),g.error=l}return g},transportable:!0})}]);FusionCharts.register("module",["private","modules.data.xml",function(){var g=function(g){return{data:g,error:void 0}};this.addDataHandler("XML",{encode:g,decode:g,transportable:!0})}]);FusionCharts.register("module",["private","modules.data.csv",function(){var g=this,k=g.window,F=g.core,r=k.parseInt,E=k.parseFloat,z=function(a){return a},G;G=function(a){this.data=[];this.columnCount=
this.rowCount=0;this.configure(a)};G.decodeLiterals=function(a,g){return void 0!==a&&null!==a&&a.toString?a.replace("{tab}","\t").replace("{quot}",'"').replace("{apos}","'"):g};G.prototype.set=function(a,g,d){var l;if(this.rowCount<=a){for(l=this.rowCount;l<=a;l+=1)this.data[l]=[];this.rowCount=a+1}this.columnCount<=g&&(this.columnCount=g+1);this.data[a][g]=d};G.prototype.setRow=function(a,g){var d;if(this.rowCount<=a){for(d=this.rowCount;d<=a;d+=1)this.data[d]=[];this.rowCount=a+1}this.columnCount<
g.length&&(this.columnCount=g.length);this.data[a]=g};G.prototype.get=function(a,g){var d=this.data;return d[a]&&d[a][g]};G.prototype.configure=function(a){var g=G.decodeLiterals;this.delimiter=g(a.delimiter,",");this.qualifier=g(a.qualifier,'"');this.eolCharacter=g(a.eolCharacter,"\r\n");this.numberFormatted=!!r(a.numberFormatted,0)};G.prototype.clear=function(){this.data=[];this.columnCount=this.rowCount=0};G.prototype.toString=function(){var a,g,d="";for(a=0;a<this.rowCount;a+=1)g=this.qualifier+
this.data[a].join(this.qualifier+this.delimiter+this.qualifier)+this.qualifier,d+='""'===g?this.eolCharacter:g+this.eolCharacter;0<this.rowCount&&(d=d.slice(0,d.length-2));return d};g.addDataHandler("CSV",{encode:function(a,k){g.raiseError(k,"0604111215","run","::CSVDataHandler.encode()","FusionCharts CSV data-handler only supports encoding of data.");throw Error("FeatureNotSupportedException()");},decode:function(a,g){var d=F.transcodeData(a,"xml","json")||{},l=g.jsVars,k=l&&l.instanceAPI,r=k&&k.components,
p,t,m,c,w,J,e=d.chart||d.map||d.graph||{},v=!!e.exporterrorcolumns,H=d.categories&&d.categories[0]&&d.categories[0].category||[],B=d.map&&!d.chart||l&&l.instanceAPI&&"geo"===l.instanceAPI.defaultSeriesType,Q=!1,I=!1,ha=!1,X=!1;m=!1;var T=z,aa={},oa,M,la,C,Ga,Ba,ja,ba,ta,N,na;t=0;var Va=-1;p=new G({separator:e.exportdataseparator,qualifier:e.exportdataqualifier,numberFormatted:e.exportdataformattedval});F.formatNumber&&p.numberFormatted&&(T=function(a){return F.formatNumber(a,e)});if(B)for(N in aa.geo=
!0,H=(l=r&&l.instanceAPI.components.dataset&&l.instanceAPI.components.dataset[0])&&l.components.data||[],p.setRow(0,["Id"," Short Name","Long Name","Value","Formatted Value"]),l=0,H)I=H[N],na=I.config,t=na.cleanValue,!0!==I.hidden&&p.setRow(++l,[N,na.shortLabel,na.label,null===t?"":t,na.formattedValue]);else if(void 0!==(oa=d.dials&&d.dials.dial||d.pointers&&d.pointers.pointer||d.value))if(aa.gauge=!0,"string"===typeof oa)p.set(0,0,T(oa)),aa.singlevalue=!0,"string"===typeof d.target&&(p.set(0,1,T(d.target)),
aa.bullet=!0);else for(p.setRow(0,["Id","Value"]),aa.multivalue=!0,l=0,J=1,w=oa.length;l<w;l+=1,J+=1)p.setRow(J,[J,T(oa[l].value)]);else if(oa=d.dataset||!(d.data instanceof Array)&&[]){aa.multiseries=!0;m=1;if(M=d.lineset)oa=oa.concat(M),aa.lineset=!0;if(la=d.axis)oa=oa.concat(la),aa.multiaxis=!0;N=k.defaultDatasetType&&k.defaultDatasetType.toLowerCase();"dragnode"!==N&&"dragcolumn"!==N&&"dragline"!==N&&"dragarea"!==N||!k.getJSONData||(oa=k.getJSONData().dataset);Ba=oa.length;Ga=H.length;if(!(Ba=
oa.length)){for(l=0;l<Ga;l+=1)ja=H[l],p.set(l+1,0,ja.label||ja.name);aa.multilevel=!0}for(l=0;l<Ba;l+=1)for(ba=oa,ba[l].dataset?(ba=ba[l].dataset,c=0,C=ba.length):(ba=oa,c=l,C=c+1);c<C&&!Q&&!ha;c+=1)if(B=ba[c],Va++,!(r&&r.dataset&&r.dataset[Va]&&!1===r.dataset[Va].visible)){p.set(0,m,B.seriesname);"string"===typeof B.data&&(aa.compactdata=!0,B.data=B.data.split(e.dataseparator||"|"));J=w=0;for(ta=B.data&&B.data.length||0;w<ta||w<Ga;w+=1){ja=H[w];t=J+1;N=B.data&&B.data[J]||{};if(void 0!==N.x&&void 0!==
N.y){Q=aa.xy=!0;break}if(void 0!==N.open||void 0!==N.high||void 0!==N.close||void 0!==N.low){X=aa.ohlc=!0;break}if(void 0!==N.rowid&&void 0!==N.columnid){ha=aa.heatmap=!0;break}if(w<Ga&&!ja.vline){p.set(t,0,ja.label||ja.name);ja=E(N?N.value:"");ja=isNaN(ja)?"":T(ja);p.set(t,m,ja);if(I||v||N.errorvalue)I||p.set(0,m+1,"Error"),na=1,p.set(t,m+1,T(N.errorvalue));J+=1}}na&&(m+=na,na=0);m+=1}M&&(oa=oa.slice(0,-M.length));la&&(oa=oa.slice(0,-la.length))}else if(oa=d.data){p.set(0,1,e.yaxisname||"Value");
aa.singleseries=!0;m="1"==e.showsumatend;l=0;for(Ga=oa.length;l<Ga;l+=1)N=oa[l],N.vline||(ja=E(N.value?N.value:""),p.setRow(l+1,[N.label||N.name,isNaN(ja)?"":(t+=ja,T(ja))]));m&&(aa.summation=!0,p.setRow(l+1,[e.sumlabel||"Total",T(t)]))}if(X)for(p.clear(),p.setRow(0,["Open","Close","High","Low"]),l=0,t=1,oa=d.dataset,C=oa.length;l<C;l+=1)for(w=0,B=oa[l]&&oa[l].data||[],Ba=B.length;w<Ba;w+=1,t+=1)N=B[w]||{},p.setRow(w+1,[T(N.open),T(N.close),T(N.high),T(N.low)]);else if(Q)for(p.clear(),I=!1,na=0,p.setRow(0,
["Series","x","y"]),l=0,t=1,oa=d.dataset,C=oa.length;l<C;l+=1){if(!(r&&r.dataset&&r.dataset[l]&&!1===r.dataset[l].visible))for(N=k.defaultDatasetType&&k.defaultDatasetType.toLowerCase(),"dragnode"===N&&k.getJSONData&&(oa=k.getJSONData().dataset),w=0,B=oa[l]&&oa[l].data||[],Ba=B.length;w<Ba;w+=1,t+=1){N=B[w]||{};ja=[oa[l].seriesname,T(N.x),T(N.y)];void 0!==N.z&&(ja.push(T(N.z)),na||(p.set(0,3,"z"),na=1));if(I||v||void 0!==N.errorvalue||void 0!==N.horizontalerrorvalue||void 0!==N.verticalerrorvalue)d=
T(N.errorvalue),ja.push(N.errorvalue,void 0===N.horizontalerrorvalue?d:T(N.horizontalerrorvalue),void 0===N.verticalerrorvalue?d:T(N.verticalerrorvalue)),I||(p.set(0,na+3,"Error"),p.set(0,na+4,"Horizontal Error"),p.set(0,na+5,"Vertical Error")),I=aa.error=!0;p.setRow(t,ja)}}else if(ha){p.clear();v={};Q={};l=0;w=1;H=d.rows&&d.rows.row||[];for(k=H.length;l<k;l+=1,w+=1)ja=H[l],ja.id&&(v[ja.id.toLowerCase()]=w,p.set(w,0,ja.label||ja.id));l=0;w=1;H=d.columns&&d.columns.column||[];for(k=H.length;l<k;l+=
1,w+=1)ja=H[l],ja.id&&(Q[ja.id.toLowerCase()]=w,p.set(0,w,ja.label||ja.id));B=d.dataset&&d.dataset[0]&&d.dataset[0].data||[];r=r&&r.dataset&&r.dataset[0]&&r.dataset[0].components&&r.dataset[0].components.data||[];l=0;for(k=B.length;l<k;l+=1)N=B[l],t=N.rowid.toLowerCase(),m=N.columnid.toLowerCase(),r[l]&&!1===r[l].visible||(v[t]||(v[t]=p.rowCount,p.set(p.rowCount,0,N.rowid)),Q[m]||(Q[m]=p.columnCount,p.set(0,p.columnCount,N.columnid)),p.set(v[t],Q[m],T(N.value)))}oa=H=M=la=null;0<p.rowCount&&void 0===
p.get(0,0)&&p.set(0,0,e.xaxisname||"Label");return{data:p.toString(),error:void 0,predictedFormat:aa}},transportable:!1});F.addEventListener("Loaded",function(a){a=a.sender;"javascript"!==a.options.renderer||a.getDataAsCSV||(a.getDataAsCSV=a.ref.getDataAsCSV=a.getCSVData)})}]);FusionCharts.register("module",["private","modules.renderer.js",function(){var g=this,k=g.window,F=k.document,r=g.core.options,E=/msie/i.test(k.navigator.userAgent)&&!k.opera,z=!(!k.SVGAngle&&!F.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure",
"1.1")),G=function(){},a=g.hcLib={cmdQueue:[]},L=a.moduleCmdQueue={base:[],charts:[],powercharts:[],widgets:[],maps:[]},d=a.moduleDependencies={},l=a.moduleMeta={base:"fusioncharts.js",charts:"fusioncharts.charts.js",powercharts:"fusioncharts.powercharts.js",widgets:"fusioncharts.widgets.js",maps:"fusioncharts.maps.js"},P={},W=a.getMetaSentence=function(){var a={};return function(c){c=c&&c.replace(/(^\s*)|(\s*$)/g,"")||"";return a[c]||(a[c]={key:c,subject:c.replace(/[^\/]*?$/ig,""),predicate:c.replace(/^.*\//ig,
"")})}}(),p=a.getDependentModuleName=function(a){var c=[],e,l;a=W(a).predicate;for(e in d)void 0!==(l=d[e][a])&&(c[l]=e);return c},t=a.hasModule=function(a){var c,e;if(a instanceof Array){c=0;for(e=a.length;c<e;c+=1)if(!g.modules["modules.renderer.js-"+W(a[c]).predicate])return!1;return!0}return!!g.modules["modules.renderer.js-"+W(a).predicate]},m=a.loadModule=function(a,c,e,d){a instanceof Array||(a=[a]);var m=a.length,w=0,k;k=function(){if(w>=m)c&&c();else{var p=a[w],L=p&&p.match(/[^\/]*$/i)[0],
r=l[p];w+=1;if(p){if(t(L)){k();return}if(P[L]){g.raiseError(d||g.core,"1112201445A","run","JavaScriptRenderer~loadModule() ","required resources are absent or blocked from loading.");e&&e(L);return}}else e&&e(L);p=g.core.options["html5"+g.capitalizeString(L)+"Src"];g.loadScript(void 0===p?r:p,{success:function(){t(L)?k():e&&e(L)},failure:e&&function(){e(L)}},void 0,!0)}};k()},c=a.executeWaitingCommands=function(a){for(var c;c=a.shift();)"object"===typeof c&&G[c.cmd].apply(c.obj,c.args)},w=function(a){delete a.sender.jsVars._reflowData;
a.sender.jsVars._reflowData={};delete a.sender.jsVars._reflowClean},J=function(){var a=function(){};a.prototype={LoadDataErrorText:"Error in loading data.",XMLLoadingText:"Retrieving data. Please wait",InvalidXMLText:"Invalid data.",ChartNoDataText:"No data to display.",ReadingDataText:"Reading data. Please wait",ChartNotSupported:"Chart type not supported.",PBarLoadingText:"",LoadingText:"Loading chart. Please wait",RenderChartErrorText:"Unable to render chart."};return a.prototype.constructor=a}(),
e=a.getContainerBackgroundColor=function(c){c=c.chartInstance;var e=c.options,d=e.containerBackgroundColor,e=e.containerBackgroundOpacity,l=c.jsVars.transparent;void 0!==l&&null!==l?e=c.jsVars.transparent?0:1:(e=parseFloat(e),0>e?e=0:1<e&&(e=1));d||(d="#ffffff");if(E&&!z)return e?d:"transparent";d=d.replace(/^#?([a-f0-9]+)/ig,"$1");d=a.graphics.HEXtoRGB(d);d[3]=e.toString();return"rgba("+d.join(",")+")"};a.injectModuleDependency=function(c,e,B){var l=!1,m=W(c).subject;c=W(c).predicate;e=void 0===
e?c:W(e).predicate;d[c]||(d[c]={},L[c]||(L[c]=[],a.moduleMeta[c]=m+r.html5ScriptNamePrefix+(e&&e.replace&&e.replace(/^[\s\S]*\//ig,"").replace(/\?/g,"%3F").replace(/\#/g,"%23").replace(/\:/g,"%3A")||"")+r.html5ScriptNameSuffix),l=!0);d[c][e]=B||0;return l};a.needsModule=function(c,e){c=W(c).predicate;e=W(e).predicate;return void 0!==(a.moduleDependencies[c]&&a.moduleDependencies[c][e])};a.cleanupWaitingCommands=function(a){for(var c=a.chartType(),c=p(c),e,d=[],l;e=c.shift();){for(e=L[e]||[];l=e.shift();)"object"===
typeof l&&l.obj!==a&&d.push(l);e.concat(d);d=[]}};g.extend(g.core.options,{html5ScriptNameSuffix:".js",html5ScriptNamePrefix:"fusioncharts."});g.extend(G,{dataFormat:"json",ready:!1,policies:{jsVars:{},options:{showChartLoadingMessage:["showChartLoadingMessage",!0]}},init:function(){t("base")?G.ready=!0:m("base",function(){G.ready=!0;c(a.cmdQueue)},void 0,g.core)},render:function(c){var d=c,B=this.jsVars.msgStore;d&&this.options.showChartLoadingMessage&&(d.innerHTML='<small style="display: inline-block; *zoom:1; *display:inline; width: 100%; font-family: Verdana,sans; font-size: 10px; color: #666666; text-align: center; padding-top: '+
(parseInt(d.style.height,10)/2-5)+'px">'+(B.PBarLoadingText||B.LoadingText)+"</small>",d.style.backgroundColor=e(this));a.cmdQueue.push({cmd:"render",obj:this,args:arguments})},update:function(){a.cmdQueue.push({cmd:"update",obj:this,args:arguments})},resize:function(){a.cmdQueue.push({cmd:"resize",obj:this,args:arguments})},dispose:function(){var c=a.cmdQueue,e,d;e=0;for(d=c.length;e<d;e+=1)c[e].obj===this&&(c.splice(e,1),--d,--e)},load:function(){a.cmdQueue.push({cmd:"load",obj:this,args:arguments})},
config:function(a,c){var e,d=this.jsVars,l=d.msgStore,d=d.cfgStore,m=this.options,g;g={LoadingText:"loadMessage",ChartNotSupported:"typeNotSupportedMessage",RenderChartErrorText:"renderErrorMessage",XMLLoadingText:"dataLoadStartMessage",ChartNoDataText:"dataEmptyMessage",LoadDataErrorText:"dataLoadErrorMessage",InvalidXMLText:"dataInvalidMessage"};"string"===typeof a&&1<arguments.length&&(e=a,a={},a[e]=c);for(e in a)void 0!==l[e]?l[e]=a[e]:d[e.toLowerCase()]=a[e],g[e]?m[g[e]]=a[e]:m[e]=a[e]},protectedMethods:{},
events:{beforeInitialize:function(c){var e=c.sender;c=e.jsVars;var d;c.fcObj=e;c.msgStore=c.msgStore||new J;c.cfgStore=c.cfgStore||{};c.previousDrawCount=-1;c.drawCount=0;c._reflowData={};e.addEventListener("beforeRender",function(c){c.sender.jsVars.smartLabel=new a.SmartLabelManager(e.id,F.body||F.getElementsByTagName("body")[0]);c.detachHandler()});c.userModules instanceof Array||(d=c.userModules,c.userModules=[],"string"===typeof d&&(c.userModules=c.userModules.concat(d.split(","))));a.chartAPI&&
a.chartAPI[void 0]||(c.needsLoaderCall=!0)},initialized:function(a){a=a.sender;var c=a.jsVars;c.needsLoaderCall&&(delete c.needsLoaderCall,G.load.call(a))},beforeDataUpdate:w,beforeDispose:function(a){var c=a.sender.jsVars;c.smartLabel&&!c.smartLabel.disposed&&c.smartLabel.dispose();w.apply(this,arguments)},beforeRender:function(a){var c=a.sender.jsVars;delete c.drLoadAttempted;delete c.waitingModule;delete c.waitingModuleError;w.apply(this,arguments)},dataLoadRequested:function(a){a=a.sender;var c=
a.jsVars;delete c.loadError;a.ref&&a.options.showDataLoadingMessage?c.hcObj&&!c.hasNativeMessage&&c.hcObj.showLoading?c.hcObj.showMessage(c.msgStore.XMLLoadingText):a.ref.showChartMessage?a.ref.showChartMessage("XMLLoadingText"):c.stallLoad=!0:c.stallLoad=!0},dataLoadRequestCompleted:function(a){delete a.sender.jsVars.stallLoad},dataLoadError:function(a){var c=a.sender,e=c.jsVars,d=c.args,l=c.options;delete e.stallLoad;e.loadError=!0;c._chartMessageImageStyle={imageHAlign:d.dataLoadErrorMessageImageHAlign||
l.baseChartMessageImageHAlign,imageVAlign:d.dataLoadErrorMessageImageVAlign||l.baseChartMessageImageVAlign,imageAlpha:d.dataLoadErrorMessageImageAlpha||l.baseChartMessageImageAlpha,imageScale:d.dataLoadErrorMessageImageScale||l.baseChartMessageImageScale};c._chartMessageStyle={color:d.dataLoadErrorMessageColor||l.baseChartMessageColor,fontFamily:d.dataLoadErrorMessageFont||l.baseChartMessageFont,fontSize:d.dataLoadErrorMessageFontSize||l.baseChartMessageFontSize};c.apiInstance.setChartMessage&&(c.apiInstance.setChartMessage(l.dataLoadErrorMessage,
c),c.apiInstance.drawChartMessage());c.__state.dataFetchDuringConstruction&&delete c.__state.dataFetchDuringConstruction;w.apply(this,arguments)}},_call:function(a,c,e){a.apply(e||k,c||[])}});g.extend(G.prototype,{getSWFHTML:function(){g.raiseWarning(this,"11090611381","run","JavaScriptRenderer~getSWFHTML()","getSWFHTML() is not supported for JavaScript charts.")},addVariable:function(){g.raiseWarning(this,"11090611381","run","JavaScriptRenderer~addVariable()",'Use of deprecated "addVariable()". Replace with "configure()".');
g.core.prototype.configure.apply(this,arguments)},getXML:function(){g.raiseWarning(this,"11171116291","run","JavaScriptRenderer~getXML()",'Use of deprecated "getXML()". Replace with "getXMLData()".');return this.getXMLData.apply(this,arguments)},setDataXML:function(){g.raiseWarning(this,"11171116292","run","JavaScriptRenderer~setDataXML()",'Use of deprecated "setDataXML()". Replace with "setXMLData()".');return this.setXMLData.apply(this,arguments)},setDataURL:function(){g.raiseWarning(this,"11171116293",
"run","JavaScriptRenderer~setDataURL()",'Use of deprecated "SetDataURL()". Replace with "setXMLUrl()".');return this.setXMLUrl.apply(this,arguments)},hasRendered:function(){return!(!this.jsVars.hcObj||!this.jsVars.hcObj.hasRendered)},setTransparent:function(a){var c;if(c=this.jsVars)"boolean"!==typeof a&&null!==a&&(a=!0),c.transparent=null===a?!1:!0===a?!0:!1}});g.extend(g.core,{_fallbackJSChartWhenNoFlash:function(){k.swfobject.hasFlashPlayerVersion(g.core.options.requiredFlashPlayerVersion)||g.renderer.setDefault("javascript")},
_enableJSChartsForSelectedBrowsers:function(a){void 0!==a&&null!==a&&g.renderer.setDefault((new RegExp(a)).test(k.navigator.userAgent)?"javascript":"flash")},_doNotLoadExternalScript:function(a){var c,e;for(c in a)e=c.toLowerCase(),l[e]&&(P[e]=!!a[c])},_preloadJSChartModule:function(){throw"NotImplemented()";}});g.renderer.register("javascript",G);z||E?g.renderer.setDefault("javascript"):k.swfobject&&k.swfobject.hasFlashPlayerVersion&&!k.swfobject.hasFlashPlayerVersion(g.core.options.requiredFlashPlayerVersion)&&
(g.raiseWarning(g.core,"1204111846","run","JSRenderer","Switched to JavaScript as default rendering due to absence of required Flash Player."),g.renderer.setDefault("javascript"))}]);FusionCharts.register("module",["private","modules.renderer.polyfill",function(){"function"!=typeof Object.create&&(Object.create=function(){function g(){}var k=Object.prototype.hasOwnProperty;return function(F){var r,E,z;if("object"!=typeof F)throw new TypeError("Object prototype may only be an Object or null");g.prototype=
F;z=new g;g.prototype=null;if(1<arguments.length)for(E in r=Object(arguments[1]),r)k.call(r,E)&&(z[E]=r[E]);return z}}());Array.prototype.indexOf||(Array.prototype.indexOf=function(g,k){var F,r,E;if(null==this)throw new TypeError('"this" is null or not defined');r=Object(this);E=r.length>>>0;if(0===E)return-1;F=+k||0;Infinity===Math.abs(F)&&(F=0);if(F>=E)return-1;for(F=Math.max(0<=F?F:E-Math.abs(F),0);F<E;){if(F in r&&r[F]===g)return F;F++}return-1});Array.prototype.forEach||(Array.prototype.forEach=
function(g,k){var F,r,E,z,G;if(null==this)throw new TypeError(" this is null or not defined");E=Object(this);z=E.length>>>0;if("function"!==typeof g)throw new TypeError(g+" is not a function");1<arguments.length&&(F=k);for(r=0;r<z;)r in E&&(G=E[r],g.call(F,G,r,E)),r++});Array.prototype.indexOf||(Array.prototype.indexOf=function(g,k){var F;if(null==this)throw new TypeError('"this" is null or not defined');var r=Object(this),E=r.length>>>0;if(0===E)return-1;F=+k||0;Infinity===Math.abs(F)&&(F=0);if(F>=
E)return-1;for(F=Math.max(0<=F?F:E-Math.abs(F),0);F<E;){if(F in r&&r[F]===g)return F;F++}return-1});"function"!=typeof Object.create&&(Object.create=function(){function g(){}var k=Object.prototype.hasOwnProperty;return function(F){var r,E,z;if("object"!=typeof F)throw TypeError("Object prototype may only be an Object or null");g.prototype=F;r=new g;g.prototype=null;if(1<arguments.length)for(z in E=Object(arguments[1]),E)k.call(E,z)&&(r[z]=E[z]);return r}}());Function.prototype.bind||(Function.prototype.bind=
function(g){if("function"!==typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var k=Array.prototype.slice.call(arguments,1),F=this,r=function(){},E=function(){return F.apply(this instanceof r?this:g,k.concat(Array.prototype.slice.call(arguments)))};this.prototype&&(r.prototype=this.prototype);E.prototype=new r;return E});Array.prototype.reduce||(Array.prototype.reduce=function(g){if(null==this)throw new TypeError("Array.prototype.reduce called on null or undefined");
if("function"!==typeof g)throw new TypeError(g+" is not a function");var k=Object(this),F=k.length>>>0,r=0,E;if(2==arguments.length)E=arguments[1];else{for(;r<F&&!(r in k);)r++;if(r>=F)throw new TypeError("Reduce of empty array with no initial value");E=k[r++]}for(;r<F;r++)r in k&&(E=g(E,k[r],r,k));return E});Object.keys||(Object.keys=function(){var g=Object.prototype.hasOwnProperty,k=!{toString:null}.propertyIsEnumerable("toString"),F="toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor".split(" "),
r=F.length;return function(E){if("object"!==typeof E&&("function"!==typeof E||null===E))throw new TypeError("Object.keys called on non-object");var z=[],G;for(G in E)g.call(E,G)&&z.push(G);if(k)for(G=0;G<r;G++)g.call(E,F[G])&&z.push(F[G]);return z}}())}]);FusionCharts&&FusionCharts.register("module",["private","vendor.svgdecanvo",function(){var g=this.window,k=this.hcLib;(function(g){var k=g.document,E={},z={},G;G=function(a,g,d,l,k,r,p){var t={svg:"",context:"",callBack:"",imageArr:[],canvas:"",
dimention:{}};if(!(this instanceof G))throw"This function should be used as class";this._getStore=function(a){return"undefined"!=typeof t[a]?t[a]:!1};this._setStore=function(a,c){"undefined"!=typeof t[a]&&(t[a]=c)};this._setStore("dimention",{x:d,y:l,width:k,height:r});a&&this.setSVG(a);g&&this.setContext(g);p&&this.setCallback(p);this.drawOnCanvas()};G.prototype.setContext=function(a){var g;if(a.getContext&&a.getContext("2d"))g=a.getContext("2d"),this._setStore("canvas",a),this._setStore("context",
g);else throw"Please provide valid canvas";};G.prototype.getContext=function(){return this._getStore("context")};G.prototype.setSVG=function(a){if("undefined"!=typeof a.documentElement)this._setStore("svg",a);else if("<"==a.substr(0,1))a=z.StrToDom(a),this._setStore("svg",a);else throw"Please provide valid SVG";};G.prototype.getSVG=function(){return this._getStore("svg")};G.prototype.setCallback=function(a){"function"===typeof a&&this._setStore("callBack",a)};G.prototype.getCallback=function(){return this._getStore("callBack")};
G.prototype.drawOnCanvas=function(a,g,d,l,k,r,p){var t,m,c,w;a&&this.setSVG(a);g&&this.setContext(g);p&&this.setCallback(p);g=g||this._getStore("canvas");c=this._getStore("dimention");p=this.getCallback();t=this.getContext();(a=this.getSVG())&&t&&(w=z.getSvgDimention(a),m=w.width,g=w.height,d=d||c.x||0,l=l||c.y||0,k=k||c.width||m,r=r||c.height||g,m=w.width?k/m:1,g=w.height?r/g:1,z.startTransform("translate("+d+","+l+") scale("+m+","+g+")",t),t.save(),t.fillStyle="#ffffff",t.fillRect(0,0,k,r),t.restore(),
z.storeImagesInArr(this),z.drawNodes([a],[],this,t,function(){"function"===typeof p&&p();z.resetTransform(t)}))};E.common=function(a,g,d,l,k){var r=a.childNodes,p,t=function(){a.attributes&&l.restore();k&&k()};for(p in g)g.hasOwnProperty(p)&&"class"!=g[p].name&&"id"!=g[p].name&&"transform"!=g[p].name&&"clip-path"!=g[p].name&&"object"==typeof g[p]&&a.attributes&&!a.attributes[g[p].name]&&a.setAttribute([g[p].name],g[p].value);if(a.attributes&&a.attributes.style)for(p in styleArr=a.attributes.style.value.replace(/;$/,
"").split(";"),styleArr)if(styleArr.hasOwnProperty(p)&&(styleName=styleArr[p].split(":")[0].trim(),!a.attributes[styleName]||"undefined"==a.attributes[styleName].value))try{a.setAttribute(styleName,styleArr[p].split(":")[1].trim())}catch(m){}a.attributes&&(l.save(),a.attributes.transform&&z.startTransform(a.attributes.transform.value,l),a.attributes["clip-path"]&&z.applyClip(a.attributes["clip-path"].value,l,d));if(0===r.length||1===r.length&&!r[0].tagName)if("undefined"!==typeof a.tagName)if(g="draw"+
a.tagName,E[g])if(a.attributes.display&&"none"==a.attributes.display.value)t();else E[g](a,l,d,"draw",t);else t();else t();else z.drawNodes(r,"svg"==a.tagName?[]:a.attributes,d,l,t)};E.drawtext=function(a,g,d,l,k){this.drawtspan(a,g,d,l,k)};E.drawtspan=function(a,L,d,l,P){var E=a.innerHTML||a.textContent,p=a.attributes.x?a.attributes.x.value:0,t=a.attributes.y?a.attributes.y.value:0,m=a.attributes.dx?a.attributes.dx.value:0,c=a.attributes.dy?a.attributes.dy.value:0,w="serief",J="normal",e="16px",
v=[],H;k.getElementsByTagName("body")[0]&&(H=g.getComputedStyle(k.getElementsByTagName("body")[0],null),H.getPropertyValue("font-family")&&(w=H.getPropertyValue("font-family")),H.getPropertyValue("font-weight")&&(J=H.getPropertyValue("font-weight")),H.getPropertyValue("font-size")&&(e=H.getPropertyValue("font-size")));w=a.attributes["font-family"]?a.attributes["font-family"].value:w;J=a.attributes["font-weight"]?a.attributes["font-weight"].value:J;H=a.attributes["text-anchor"]?a.attributes["text-anchor"].value:
"start";e=a.attributes["font-size"]?a.attributes["font-size"].value:e;p=Number(p)+Number(m);t=Number(t)+Number(c);E=E.trim();H="middle"==H?"center":H;L.save();L.font=J+" "+e+" "+w;L.textAlign=H;if("draw"===l){if(!a.attributes.fill||a.attributes.fill&&"none"!=a.attributes.fill.value)z.applyFillEffect(a,L,d,v),L.fillText(E,p,t),z.endFillEffect(a,L);if(!a.attributes.stroke||a.attributes.stroke&&"none"!=a.attributes.stroke.value)z.applyStrokeEffect(a,L,d,v),L.strokeText(E,p,t),z.endStrokeEffect(a,L)}L.restore();
"function"===typeof P&&P()};E.drawcircle=function(a,g,d,l,k){var r=Number(a.attributes.cx.value),p=Number(a.attributes.cy.value),t=Number(a.attributes.r.value),m=[];g.beginPath();g.arc(r,p,t,0,2*Math.PI);z.bBoxFromPoint([r,1*r+1*t,1*r-1*t],[p,1*p+1*t,1*p-1*t],m);if("draw"===l){if(!a.attributes.fill||a.attributes.fill&&"none"!=a.attributes.fill.value)z.applyFillEffect(a,g,d,m),g.fill(),z.endFillEffect(a,g);if(!a.attributes.stroke||a.attributes.stroke&&"none"!=a.attributes.stroke.value)z.applyStrokeEffect(a,
g,d,m),g.stroke(),z.endStrokeEffect(a,g)}g.closePath();"function"===typeof k&&k()};E.drawrect=function(a,g,d,l,k){var r=Number(a.attributes.x.value),p=Number(a.attributes.y.value),t=a.attributes.rx?Number(a.attributes.rx.value):0,m=a.attributes.ry?Number(a.attributes.ry.value):0,c=Number(a.attributes.height.value),w=Number(a.attributes.width.value),J=[];z.bBoxFromPoint([r,r+w],[p,p+c],J);g.beginPath();g.moveTo(r+t,p);g.lineTo(r+w-t,p);g.quadraticCurveTo(r+w,p,r+w,p+m);g.lineTo(r+w,p+c-m);g.quadraticCurveTo(r+
w,p+c,r+w-t,p+c);g.lineTo(r+t,p+c);g.quadraticCurveTo(r,p+c,r,p+c-m);g.lineTo(r,p+m);g.quadraticCurveTo(r,p,r+t,p);if("draw"===l){if(!a.attributes.fill||a.attributes.fill&&"none"!=a.attributes.fill.value)z.applyFillEffect(a,g,d,J),g.fill(),z.endFillEffect(a,g);if(!a.attributes.stroke||a.attributes.stroke&&"none"!=a.attributes.stroke.value)z.applyStrokeEffect(a,g,d,J),g.stroke(),z.endStrokeEffect(a,g)}g.closePath();"function"===typeof k&&k()};E.drawellipse=function(a,g,d,l,k){var r=Number(a.attributes.cx.value),
p=Number(a.attributes.cy.value),t=Number(a.attributes.rx.value),m=Number(a.attributes.ry.value),c=.5522848*t,w=.5522848*m,J=r+t,e=p+m,v=[];g.beginPath();g.moveTo(r-t,p);g.bezierCurveTo(r-t,p-w,r-c,p-m,r,p-m);g.bezierCurveTo(r+c,p-m,J,p-w,J,p);g.bezierCurveTo(J,p+w,r+c,e,r,e);g.bezierCurveTo(r-c,e,r-t,p+w,r-t,p);z.bBoxFromPoint([r+t,r-t],[p+m,p-m],v);if("draw"===l){if(!a.attributes.fill||a.attributes.fill&&"none"!=a.attributes.fill.value)z.applyFillEffect(a,g,d,v),g.fill(),z.endFillEffect(a,g);if(!a.attributes.stroke||
a.attributes.stroke&&"none"!=a.attributes.stroke.value)z.applyStrokeEffect(a,g,d,v),g.stroke(),z.endStrokeEffect(a,g)}g.closePath();"function"===typeof k&&k()};E.drawimage=function(a,g,d,l,k){var r=a.attributes.x?Number(a.attributes.x.value):0,p=a.attributes.y?Number(a.attributes.y.value):0,t=a.attributes.height?Number(a.attributes.height.value):0,m=a.attributes.width?Number(a.attributes.width.value):0,c,w=d._getStore("imageArr");g.save();a.attributes.opacity&&(g.globalAlpha=a.attributes.opacity.value);
a.attributes["xlink:href"]?(c=a.attributes["xlink:href"].value,"complete"===w[c].status?(g.drawImage(w[c].obj,r,p,m,t),g.globalAlpha=1,g.restore(),"function"===typeof k&&k()):"error"===w[c].status?(g.globalAlpha=1,g.restore(),"function"===typeof k&&k()):"progress"===w[c].status?(w[c].callback=function(){g.drawImage(w[c].obj,r,p,m,t);g.globalAlpha=1;g.restore();"function"===typeof k&&k()},w[c].errCallback=function(){g.globalAlpha=1;g.restore();"function"===typeof k&&k()}):(g.globalAlpha=1,g.restore(),
"function"===typeof k&&k())):(g.globalAlpha=1,g.restore(),"function"===typeof k&&k())};E.drawpath=function(a,g,d,l,k){var r=a.attributes.d.value.match(/[a-z][^a-z"]*/ig),p=[],t,m,c,w=0,J=0,e;g.beginPath();for(t in r)if(r.hasOwnProperty(t))switch(m=r[t].substring(0,1),c=z.getArgsAsArray(r[t].substring(1,r[t].length)),m){case "M":w=Number(c[0]);J=Number(c[1]);g.moveTo(w,J);break;case "m":w+=Number(c[0]);J+=Number(c[1]);g.moveTo(w,J);break;case "L":for(e=0;c[e];e+=2)z.bBoxFromPoint([w,c[e]],[J,c[e+1]],
p),w=Number(c[e]),J=Number(c[e+1]),g.lineTo(w,J);break;case "l":for(e=0;c[e];e+=2)z.bBoxFromPoint([w,1*w+1*c[e]],[J,1*J+1*c[e+1]],p),w+=Number(c[e]),J+=Number(c[e+1]),g.lineTo(w,J);break;case "V":for(e=0;c[e];e+=1)z.bBoxFromPoint([w],[J,c[e]],p),J=Number(c[e]),g.lineTo(w,J);break;case "v":for(e=0;c[e];e+=1)z.bBoxFromPoint([w],[J,1*J+1*c[e]],p),J+=Number(c[e]),g.lineTo(w,J);break;case "H":for(e=0;c[e];e+=1)z.bBoxFromPoint([w,c[e]],[J],p),w=Number(c[e]),g.lineTo(w,J);break;case "h":for(e=0;c[e];e+=
1)z.bBoxFromPoint([w,1*w+1*c[e]],[J],p),w+=Number(c[e]),g.lineTo(w,J);break;case "Q":for(e=0;c[e];e+=4)z.qBezierBBox(w,J,c[e],c[e+1],c[e+2],c[e+3],p),g.quadraticCurveTo(Number(c[e]),Number(c[e+1]),Number(c[e+2]),Number(c[e+3])),w=Number(c[e+2]),J=Number(c[e+3]);break;case "q":for(e=0;c[e];e+=4)z.qBezierBBox(w,J,w+1*c[e],J+1*c[e+1],1*w+1*c[e+2],1*J+1*c[e+3],p),g.quadraticCurveTo(w+1*c[e],J+1*c[e+1],w+=Number(c[e+2]),J+=Number(c[e+3]));break;case "C":for(e=0;c[e];e+=6)z.cBezierBBox(w,J,c[e],c[e+1],
c[e+2],c[e+3],c[e+4],c[e+5],p),g.bezierCurveTo(c[e],c[e+1],c[e+2],c[e+3],c[e+4],c[e+5]),w=Number(c[e+4]),J=Number(c[e+5]);break;case "c":for(e=0;c[e];e+=6)z.cBezierBBox(w,J,w+1*c[e],1*J+1*c[e+1],w+1*c[e+2],1*J+1*c[e+3],w+1*c[e+4],1*J+1*c[e+5],p),g.bezierCurveTo(w+Number(c[e]),J+Number(c[e+1]),w+Number(c[e+2]),J+Number(c[e+3]),w+=Number(c[e+4]),J+=Number(c[e+5]));break;case "a":case "A":for(e=0;c[e];e+=7){var v=Number(c[e]),H=Number(c[e+1]),B,Q,I,E,X,T,F,G,M,la,C,Ga,Ba,ja;B=Math.PI/180*Number(c[e+
2]);Q=Number(c[e+3]);I=Number(c[e+4]);E=Number(c[e+5]);X=Number(c[e+6]);T=Math.cos(B)*(w-E)/2+Math.sin(B)*(J-X)/2;F=-Math.sin(B)*(w-E)/2+Math.cos(B)*(J-X)/2;v=0>v?-v:v;H=0>H?-H:H;Ga=Math.pow(T,2)/Math.pow(v,2)+Math.pow(F,2)/Math.pow(H,2);1<Ga&&(v*=Math.sqrt(Ga),H*=Math.sqrt(Ga));Ga=v>H?v:H;Ba=v>H?1:v/H;ja=v>H?H/v:1;Q=(Q==I?-1:1)*Math.sqrt((Math.pow(v,2)*Math.pow(H,2)-Math.pow(v,2)*Math.pow(F,2)-Math.pow(H,2)*Math.pow(T,2))/(Math.pow(v,2)*Math.pow(F,2)+Math.pow(H,2)*Math.pow(T,2)));isNaN(Q)&&(Q=0);
G=Q*v*F/H;M=-Q*H*T/v;la=G*Math.cos(B)-M*Math.sin(B)+(w+E)/2;C=G*Math.sin(B)+M*Math.cos(B)+(J+X)/2;Q=z.angleBetweenVectors(1,0,(T-G)/v,(F-M)/H);T=z.angleBetweenVectors((T-G)/v,(F-M)/H,(-T-G)/v,(-F-M)/H);0===I&&0<T&&(T-=Math.PI/180*360);1==I&&0>T&&(T+=Math.PI/180*360);if(0===v&&0===H){g.lineTo(E,X);break}g.save();v=z.combineTransformMatrix([[1,0,la,0,1,C],[Math.cos(B),Math.sin(B),0,Math.sin(B),Math.cos(B),0],[Ba,0,0,0,ja,0]]);g.transform(v[0],v[3],v[1],v[4],v[2],v[5]);g.arc(0,0,Ga,Q,Q+T,1-I);g.restore();
z.arcBBox(0,0,Ga,Q,Q+T,1-I,[v[0],v[3],v[1],v[4],v[2],v[5]],p);"A"==m?(w=Number(c[e+5]),J=Number(c[e+6])):(w+=Number(c[e+5]),J+=Number(c[e+6]))}break;case "Z":case "z":g.closePath()}if("draw"===l){if(!a.attributes.fill||a.attributes.fill&&"none"!=a.attributes.fill.value)z.applyFillEffect(a,g,d,p),g.fill(),z.endFillEffect(a,g);if(!a.attributes.stroke||a.attributes.stroke&&"none"!=a.attributes.stroke.value)z.applyStrokeEffect(a,g,d,p),g.stroke(),z.endStrokeEffect(a,g);k()}};z.drawNodes=function(a,g,
d,l,k){var r=a.length,p=-1,t=0,m=0,c=function(){var w;p+=1;p<r?(w=a[p],w.tagName&&"defs"===w.tagName&&(p+=1,w=a[p]),w.attributes&&(w.attributes.dy&&(m=w.attributes.dy.value=1*w.attributes.dy.value+1*m),w.attributes.dx&&(t=w.attributes.dx.value=1*w.attributes.dx.value+1*t)),E.common(w,g,d,l,c)):k&&k()};c()};z.getSvgDimention=function(a){var g={width:0,height:0};node=a.childNodes&&a.childNodes[0]&&a.childNodes[0].attributes;g.width=Number(node.width&&node.width.value||0);g.height=Number(node.height&&
node.height.value||0);return g};z.storeImagesInArr=function(a){var g=a.getSVG(),d,l;d=a._getStore("imageArr");a=g.getElementsByTagName("image");for(l in a)a.hasOwnProperty(l)&&a[l].attributes&&a[l].attributes["xlink:href"]&&(g=a[l].attributes["xlink:href"].value,d[g]||(d[g]=[],d[g].status="progress",d[g].callback=null,d[g].obj=new Image,d[g].obj.onload=function(a){return function(){var g=d[a].callback;g?(d[a].status="complete",g()):d[a].status="complete"}}(g),d[g].obj.onerror=function(a){return function(){var g=
d[a].errCallback;g?(d[a].status="error",g()):d[a].status="error"}}(g),d[g].obj.src=g))};z.startTransform=function(a,g){var d=a.match(/[^\s][a-z,0-9.\-(\s]+\)/gi),l,k;for(k in d)d.hasOwnProperty(k)&&(-1<d[k].indexOf("matrix")&&(l=z.stringToArgs(d[k]),g.transform(l[0],l[1],l[2],l[3],l[4],l[5])),-1<d[k].indexOf("translate")&&(l=z.stringToArgs(d[k]),g.translate(l[0]||0,l[1]||0)),-1<d[k].indexOf("rotate")&&(l=z.stringToArgs(d[k]),3==l.length?(g.translate(l[1],l[2]),g.rotate(Math.PI/180*l[0]),g.translate(-l[1],
-l[2])):g.rotate(Math.PI/180*l[0])),-1<d[k].indexOf("scale")&&(l=z.stringToArgs(d[k]),1==l.length?g.scale(l[0]||1,l[0]||1):g.scale(l[0]||1,l[1]||1)),-1<d[k].indexOf("skewX")&&(l=z.stringToArgs(d[k]),g.transform(1,0,Math.tan(Math.PI/180*l[0]),1,0,0)),-1<d[k].indexOf("skewY")&&(l=z.stringToArgs(d[k]),g.transform(1,Math.tan(Math.PI/180*l[0]),0,1,0,0)))};z.resetTransform=function(a){a.setTransform(1,0,0,1,0,0)};z.stringToArgs=function(a){a=/\(([^\)]+)/.exec(a)[1];return z.getArgsAsArray(a)};z.getArgsAsArray=
function(a){var g;a=a.trim().split(/[\s,]+/);for(g=0;g<a.length;g++)a[g].trim(),0===a[g].length&&a.splice(g,1);return a};z.applyFillEffect=function(a,g,d,l){g.globalAlpha=a.attributes["fill-opacity"]&&"none"!=a.attributes["fill-opacity"].value?a.attributes["fill-opacity"].value:1;a.attributes.fill&&-1<a.attributes.fill.value.indexOf("url(")?(a=z.getFillStyleById(/url\(.*#([^\)'"]+)/.exec(a.attributes.fill.value)[1],g,d,l),g.fillStyle=a):g.fillStyle=a.attributes.fill?a.attributes.fill.value:"#000000"};
z.endFillEffect=function(a,g){g.globalAlpha=1};z.applyStrokeEffect=function(a,g,d,l){a.attributes["stroke-opacity"]&&"none"!=a.attributes["stroke-opacity"].value&&(g.globalAlpha=a.attributes["stroke-opacity"].value);a.attributes["stroke-width"]&&(g.lineWidth=a.attributes["stroke-width"].value,0===a.attributes["stroke-width"].value&&(g.globalAlpha=0));a.attributes["stroke-linecap"]&&"none"!=a.attributes["stroke-linecap"].value&&(g.lineCap=a.attributes["stroke-linecap"].value);a.attributes["stroke-linejoin"]&&
"none"!=a.attributes["stroke-linejoin"].value&&(g.lineJoin=a.attributes["stroke-linejoin"].value);a.attributes["stroke-dasharray"]&&"none"!=a.attributes["stroke-dasharray"].value&&g.setLineDash&&g.setLineDash(z.getArgsAsArray(a.attributes["stroke-dasharray"].value));g.strokeStyle=a.attributes.stroke?a.attributes.stroke.value:"#000000"};z.endStrokeEffect=function(a,g){a.attributes["stroke-opacity"]&&"none"!=a.attributes["stroke-opacity"].value&&(g.globalAlpha=1,g.setLineDash&&g.setLineDash([]),g.lineWidth=
1);g.globalAlpha=1};z.applyClip=function(a,g,d){var l=d.getSVG(),k,r;if(-1!==a.indexOf("url(")){a=/url\(.*#([^\)'"]+)/.exec(a)[1];l=l.getElementById(a);l.attributes&&(g.save(),l.attributes.transform&&z.startTransform(l.attributes.transform.value,g));a=l.childNodes;for(k in a)a.hasOwnProperty(k)&&a[k].tagName&&a[k].constructor!==Array&&(r="draw"+a[k].tagName,a[k].attributes&&(g.save(),a[k].attributes.transform&&z.startTransform(a[k].attributes.transform.value,g)),E[r]&&(E[r](a[k],g,d,"clip"),g.closePath()),
a[k].attributes&&g.restore());l.attributes&&g.restore();g.clip()}};z.getFillStyleById=function(a,g,d,l){a=d.getSVG().getElementById(a);return"linearGradient"==a.tagName?z.getLinearGradient(a,g,l):"radialGradient"==a.tagName?z.getRadialGradient(a,g,l):"#FFFFFF"};z.getLinearGradient=function(a,g,d){var l=a.attributes.x1?z.getPercentValue(a.attributes.x1.value,d.xMax-d.xMin,d.xMin):0,k=a.attributes.y1?z.getPercentValue(a.attributes.y1.value,d.yMax-d.yMin,d.yMin):0,r=a.attributes.x2?z.getPercentValue(a.attributes.x2.value,
d.xMax-d.xMin,d.xMin):0;d=a.attributes.y2?z.getPercentValue(a.attributes.y2.value,d.yMax-d.yMin,d.yMin):0;var p;linGrad=g.createLinearGradient(l,k,r,d);a=a.childNodes;for(p in a)a.hasOwnProperty(p)&&a[p].attributes&&a[p].attributes["stop-color"]&&(g=z.toRGB(a[p].attributes["stop-color"].value),l=a[p].attributes["stop-opacity"]?a[p].attributes["stop-opacity"].value:1,g.status?linGrad.addColorStop(z.getPercentValue(a[p].attributes.offset.value,1,0),"rgba("+g.r+","+g.g+","+g.b+","+Number(l)+")"):linGrad.addColorStop(z.getPercentValue(a[p].attributes.offset.value,
1,0),a[p].attributes["stop-color"].value));return linGrad};z.getRadialGradient=function(a,g,d){var l=a.attributes.cx?z.getPercentValue(a.attributes.cx.value,d.xMax-d.xMin,d.xMin):d.xMin+.5*(d.xMax-d.xMin),k=a.attributes.cy?z.getPercentValue(a.attributes.cy.value,d.yMax-d.yMin,d.yMin):d.yMin+.5*(d.yMax-d.yMin),r=a.attributes.fx?z.getPercentValue(a.attributes.fx.value,d.xMax-d.xMin,d.xMin):d.xMin+.5*(d.xMax-d.xMin),p=a.attributes.fy?z.getPercentValue(a.attributes.fy.value,d.yMax-d.yMin,d.yMin):d.yMin+
.5*(d.yMax-d.yMin);d=a.attributes.r?z.getPercentValue(a.attributes.r.value,(d.yMax-d.yMin+d.xMax-d.xMin)/2,0):z.getPercentValue("50%",(d.yMax-d.yMin+d.xMax-d.xMin)/2,0);var t;g=g.createRadialGradient(r,p,0,l,k,d);a=a.childNodes;for(t in a)a.hasOwnProperty(t)&&a[t].attributes&&a[t].attributes["stop-color"]&&(l=z.toRGB(a[t].attributes["stop-color"].value),k=a[t].attributes["stop-opacity"]?a[t].attributes["stop-opacity"].value:1,l.status?g.addColorStop(z.getPercentValue(a[t].attributes.offset.value,
1,0),"rgba("+l.r+","+l.g+","+l.b+","+Number(k)+")"):g.addColorStop(z.getPercentValue(a[t].attributes.offset.value,1,0),a[t].attributes["stop-color"].value));return g};z.getPercentValue=function(a,g,d){return-1!=a.indexOf("%")?(a=/(\d.*)%/.exec(a)[1],100<a&&(a=100),a*g/100+1*d):1<a?a:a*g+1*d};z.bBoxFromPoint=function(a,g,d){"undefined"!==typeof d.xMin&&(a.push(d.xMin,d.xMax),g.push(d.yMin,d.yMax));d.xMin=Math.min.apply(this,a);d.xMax=Math.max.apply(this,a);d.yMin=Math.min.apply(this,g);d.yMax=Math.max.apply(this,
g)};z.arcBBox=function(a,g,d,l,k,r,p,t){var m,c,w;p instanceof Array&&(a=a*p[0]+a*p[2]+p[4],g=g*p[1]+g*p[3]+p[5]);w=function(a,c,d){a=(a+2*Math.PI)%(2*Math.PI);c=(c+2*Math.PI)%(2*Math.PI);if(a<=c)return a<=d&&d<=c?!0:!1;if(a>=c)return a>=d&&d>=c?!1:!0};p=l%(2*Math.PI);m=k%(2*Math.PI);r&&(p=k%(2*Math.PI),m=l%(2*Math.PI));r=a+d*Math.cos(p);l=g+d*Math.sin(p);c=a+d*Math.cos(m);k=g+d*Math.sin(m);r=[r,c];l=[l,k];w(p,m,0)&&(r.push(1*a+1*d),l.push(g));w(p,m,.5*Math.PI)&&(r.push(a),l.push(1*g+1*d));w(p,m,
Math.PI)&&(r.push(a-1*d),l.push(g));w(p,m,1.5*Math.PI)&&(r.push(a),l.push(g-1*d));a=Math.max.apply(this,r);g=Math.min.apply(this,r);d=Math.max.apply(this,l);p=Math.min.apply(this,l);"undefined"!==typeof t.xMin?(t.xMin=Math.min(g,t.xMin),t.xMax=Math.max(a,t.xMax),t.yMin=Math.min(p,t.yMin),t.yMax=Math.max(d,t.yMax)):(t.xMin=g,t.xMax=a,t.yMin=p,t.yMax=d)};z.qBezierBBox=function(a,g,d,l,k,r,p){var t=1*a-2*d+1*k,m=1*g-2*l+1*r;0===t||0===m?(l=Math.max(a,k),a=Math.min(a,k),k=Math.max(g,r),g=Math.min(g,r)):
(t=(a-d)/t,m=(g-l)/m,d=a*Math.pow(1-t,2)+2*d*(1-t)*t+k*Math.pow(t,2),m=g*Math.pow(1-m,2)+2*l*(1-m)*m+r*Math.pow(m,2),l=Math.max(a,k,d),a=Math.min(a,k,d),k=Math.max(g,r,m),g=Math.min(g,r,m));"undefined"!==typeof p.xMin?(p.xMin=Math.min(a,p.xMin),p.xMax=Math.max(l,p.xMax),p.yMin=Math.min(g,p.yMin),p.yMax=Math.max(k,p.yMax)):(p.xMin=a,p.xMax=l,p.yMin=g,p.yMax=k)};z.cBezierBBox=function(a,g,d,l,k,r,p,t,m){var c,w,z,e,v,H,B;null===k&&null===r&&(d=a+2/3*(d-a),k=g+2/3*(l-g),l=d+1/3*(p-a),r=k+1/3*(t-g));
B=function(a,c,e,d,g){return a*Math.pow(1-g,3)+3*c*g*Math.pow(1-g,2)+3*e*g*g*(1-g)+d*g*g*g};z=3*p-9*k+9*d-3*a;e=6*a-12*d+6*k;v=Math.pow(e,2)-4*z*(3*d-3*a);w=c=a;p<c&&(c=p);p>w&&(w=p);0<=v&&(H=(-e+Math.sqrt(v))/(2*z),0<H&&1>H&&(H=B(a,d,k,p,H),H<c&&(c=H),H>w&&(w=H)),z=(-e-Math.sqrt(v))/(2*z),0<z&&1>z&&(H=B(a,d,k,p,z),H<c&&(c=H),H>w&&(w=H)));z=3*t-9*r+9*l-3*g;e=6*g-12*l+6*r;v=Math.pow(e,2)-4*z*(3*l-3*g);d=a=g;t<a&&(a=t);t>d&&(d=t);0<=v&&(H=(-e+Math.sqrt(v))/(2*z),0<H&&1>H&&(k=B(g,l,r,t,H),k<a&&(a=k),
k>d&&(d=k)),z=(-e-Math.sqrt(v))/(2*z),0<z&&1>z&&(k=B(g,l,r,t,z),k<a&&(a=k),k>d&&(d=k)));"undefined"!==typeof m.xMin?(m.xMin=Math.min(c,m.xMin),m.xMax=Math.max(w,m.xMax),m.yMin=Math.min(a,m.yMin),m.yMax=Math.max(d,m.yMax)):(m.xMin=c,m.xMax=w,m.yMin=a,m.yMax=d)};z.combineTransformMatrix=function(a){var g=a.length-1,d;if(0>=g)return a[0];d=a[0];for(i=1;i<=g;i++)d[0]=d[0]*a[i][0]+d[1]*a[i][3],d[1]=d[0]*a[i][1]+d[1]*a[i][4],d[2]=d[0]*a[i][2]+d[1]*a[i][5]+1*d[2],d[3]=d[3]*a[i][0]+d[4]*a[i][3],d[4]=d[3]*
a[i][1]+d[4]*a[i][4],d[5]=d[3]*a[i][2]+d[4]*a[i][5]+1*d[5];return d};z.angleBetweenVectors=function(a,g,d,l){return(a*l<g*d?-1:1)*Math.acos((a*d+g*l)/(Math.sqrt(Math.pow(a,2)+Math.pow(g,2))*Math.sqrt(Math.pow(d,2)+Math.pow(l,2))))};z.toRGB=function(a){var g={r:0,g:0,b:0,status:0},d,l;d=function(a){for(l in a)a.hasOwnProperty(l)&&(0>a[l]||isNaN(a[l])?a[l]=0:255<a[l]&&(a[l]=255));return g={r:a[0],g:a[1],b:a[2],status:1}};a=a.trim();a.match(/^rgb\(|^rgba\(/i)?(a=/\(\s*(\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})/.exec(a),
d([parseInt(a[1]),parseInt(a[2]),parseInt(a[3])])):a.match(/^#/)&&(a=/(\w{2})(\w{2})(\w{2})/.exec(a),d([parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16)]));return g};z.StrToDom=function(a){var k;g.DOMParser?(k=new DOMParser,k=k.parseFromString(a,"text/xml")):(k=new ActiveXObject("Microsoft.XMLDOM"),k.async=!1,k.loadXML(a));return k};g.SvgDeCanvo=G})(this.window||window);g.SvgDeCanvo&&(k.SvgDeCanvo=g.SvgDeCanvo,g.SvgDeCanvo=void 0)}]);FusionCharts.register("module",["private","modules.renderer.js-lib-attr",
function(){var g={},k=this.hcLib||(this.hcLib={}),F=Math.max,r=k.attrTypeNum=1,E=k.attrTypeBool=2;k.parseConfiguration=function(z,F,a,L,d,l){var P=k.attribDefs||g,W,p,t,m=1,c;L=L||g;l=l||g;d=d||{};for(W in z)if(!L[W]&&((p=z[W])||!1===p||0===p))switch(t=(c=l[W]||P[W])&&c.type,t){case r:p=Number(p);isNaN(p)||(F[W]=p);break;case E:p=Number(p);isNaN(p)||(F[W]=!!p);break;default:F[W]=p}if(a)for(W in F)void 0===F[W]&&(c=l[W]||P[W])&&c.pAttr&&(F[W]=a[c.pAttr]);for(;m;)for(W in m=0,F)void 0===F[W]&&(c=l[W]||
P[W])&&(c.attr?void 0!==(p=F[c.attr])&&(F[W]=p,m+=1):c.parser&&void 0!==(p=c.parser(F,a,d))&&(F[W]=p,m+=1))};k.setAttribDefs=function(g,r){var a=k.attribDefs,E,d;"string"===typeof g?(E={},E[g]=r):E=g;for(d in E)a[d]||(a[d]=E[d])};k.hasAttribDefs=function(g){return!!k.attribDefs[g]};k.attribDefs={setBorderWidth:{type:r,pAttr:"plotborderthickness"},plotborderthickness:{type:r,pAttr:"plotborderthickness"},showBorderEffect:{parser:function(g,k){return 1===+k.showplotborder&&.1===k.plotborderthickness?
1:0}},alphaanimation:{type:r},showplotborder:{type:r,pAttr:"showplotborder"},zeroplanethickness:{type:r},showzeroplaneontop:{type:r},usemessagelog:{type:r},showtooltip:{type:r,pAttr:"showtooltip"},seriesnameintooltip:{type:r},plothovereffect:{type:r,attr:"anchorhovereffect"},anchorhovereffect:{type:r,attr:"showhovereffect"},showhovereffect:{type:r},linethickness:{type:r,pAttr:"linethickness"},dashed:{type:r,pAttr:"linedashed"},linedashed:{type:r,attr:"plotborderdashed"},plotborderdashed:{type:r,pAttr:"plotborderdashed"},
linedashlen:{type:r,pAttr:"linedashlen"},linedashgap:{type:r,pAttr:"linedashgap"},anchoralpha:{pAttr:"anchoralpha"},anchorsides:{type:r,pAttr:"anchorsides"},anchorradius:{type:r,pAttr:"anchorradius"},anchorbgalpha:{pAttr:"anchorbgalpha"},anchorbgcolor:{pAttr:"anchorbgcolor"},anchorbordercolor:{pAttr:"anchorbordercolor"},anchorstartangle:{type:r,pAttr:"anchorstartangle"},anchorimageurl:{pAttr:"anchorimageurl"},anchorimagescale:{type:r,pAttr:"anchorimagescale"},anchorimagealpha:{pAttr:"anchorimagealpha"},
anchorimagepadding:{type:r,pAttr:"anchorimagepadding"},anchorborderthickness:{type:r,pAttr:"anchorborderthickness"},anchorshadow:{type:r,pAttr:"anchorshadow"},valuepadding:{type:r,pAttr:"valuepadding"},valueposition:{pAttr:"valueposition"},plotfillangle:{type:r,pAttr:"plotfillangle"},useplotgradientcolor:{type:r},rotatevalues:{type:r,pAttr:"rotatevalues"},includeinlegend:{type:r},connectnulldata:{type:r},plotfillalpha:{pAttr:"plotfillalpha"},alpha:{pAttr:"linealpha"},linealpha:{pAttr:"plotfillalpha"},
showvalues:{type:r,pAttr:"showvalues"},showpercentvalues:{type:r,parser:function(g){return g.isstacked&&g.stack100percent?1:0}},showpercentintooltip:{type:r,parser:function(g){return g.isstacked&&g.stack100percent?1:0}},stack100percent:{type:r,attr:"usepercentdistribution"},drawfullareaborder:{type:r},use3dlineshift:{type:r},parentyaxis:{type:r},radarborderthickness:{type:r},radarborderradius:{type:r},gaugeoriginx:{type:r},hasgaugeoriginx:{attr:"gaugeoriginx"},gaugeoriginy:{type:r},hasgaugeoriginy:{attr:"gaugeoriginy"},
gaugeradius:{type:r},hasgaugeradius:{attr:"gaugeradius"},showgaugeborder:{type:r},setAdaptiveMin:{type:r},adjustDiv:{type:r},axisNameWidth:{type:r},rotateAxisName:{type:r},useEllipsesWhenOverflow:{type:r},showZeroPlane:{type:r},zeroPlaneAlpha:{type:r},showZeroPlaneValue:{type:r},zeroPlaneOnTop:{type:r},trendlineThickness:{type:r},showTrendlinesOnTop:{type:r},trendlinesAreDashed:{type:r},trendlinesDashLen:{type:r},trendlinesDashGap:{type:r},showTrendlines:{type:r},showTrendlineLabels:{type:r},showLabels:{type:r},
rotateLabels:{type:r},slantLabel:{type:r},showAxisValues:{type:r},showTooltip:{type:r},maxLabelHeight:{type:r},useroundedges:{type:r,pAttr:"useroundedges"},placevaluesinside:{type:r},plotpaddingpercent:{type:r},use3dlighting:{type:r,pAttr:"use3dlighting"},usedataplotcolorforlabels:{type:r},plotspacepercent:{type:r,parser:function(g){return F(g.plotspacepercent%100,0)}},ratio:{pAttr:"plotfillratio"},base:{type:r},showMinorDivLineValues:{type:r},numMinorDivLines:{type:r},majorTMNumber:{type:r},majorTMHeight:{type:r},
showTickMarks:{type:r},majorTMThickness:{type:r},adjustTM:{type:E},minorTMNumber:{type:r},minorTMThickness:{type:r},tickMarkDistance:{type:r},placeTicksInside:{type:r},placeValuesInside:{type:r},axisValuePadding:{type:r},gridLineWidth:{type:r},showRadarBorder:{type:r},radarBorderThickness:{type:r},maxcolwidth:{type:r,parser:function(g){return Math.abs(g.maxcolwidth)}},maxbarheight:{type:r,parser:function(g){return Math.abs(g.maxbarheight)}},plotborderalpha:{parser:function(g,k){return k.plotborderalpha||
g.plotfillalpha}},autoscale:{type:r},plotborderdashlen:{type:r,pAttr:"plotborderdashlen"},plotborderdashgap:{type:r,pAttr:"plotborderdashgap"},plotfillratio:{pAttr:"plotfillratio"},drawverticaljoins:{type:r,pAttr:"drawverticaljoins"},useforwardsteps:{type:r,pAttr:"useforwardsteps"},minimizetendency:{type:r},usepercentdistribution:{type:r},stepatmiddle:{type:r}}}]);FusionCharts.register("module",["private","modules.renderer.js-lib",function(){var g=this,k=g.window,F,r=k.document,E=k.navigator,z=!(!k.SVGAngle&&
!r.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),G=/msie/i.test(E.userAgent)&&!k.opera,a=k.parseFloat,L=/\s+/g,d=/^#?/,l=/^rgba/i,P=/[#\s]/ig,W=/\{br\}\s*/ig,p=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i,t=Math.abs,m=Math.pow,c=Math.round,w=m(2,-24),J=Object.prototype.toString,e="ontouchstart"in r,E=e&&!(E.maxTouchPoints||E.msMaxTouchPoints),v="http://www.fusioncharts.com?BS=FCHSEvalMark&utm_source=FCS_trial&pver="+escape(g.core.version);F=Math;var H=F.max,B=F.min,
Q=k.Image,I={pageX:0,pageY:0},ha="createTouch"in r,X=ha&&!(k.navigator.maxTouchPoints||k.navigator.msMaxTouchPoints),T=g.hcLib||(g.hcLib={}),aa=T.SvgDeCanvo,oa=function(b){var h=b.data,n=h.chart,q=n.components.paper,A=b.state,f=Va(na(b.originalEvent)),a=f.target||f.originalTarget||f.srcElement||f.relatedTarget||f.fromElement,u=n.components.resizeBox,D=h.layerX=f.pageX-h.chartPosLeft,c=h.layerY=f.pageY-h.chartPosTop,e=D-h.ox,ca=c-h.oy,d=h.bBox,g=h.ox,N=h.oy,l=h.zoomX,v=h.zoomY,d=h.canvasY,m=h.canvasX,
k=h.canvasW,w=h.canvasH,S=h.canvasX2,Ea=h.canvasY2,R=h.strokeWidth,e=h.attr;switch(A){case "start":b=C(this);h.chartPosLeft=b.left;h.chartPosTop=b.top;D=f.pageX-h.chartPosLeft;c=f.pageY-h.chartPosTop;h.oy=c;h.ox=D;h.allowMove=!1;u||(u=n.components.resizeBox=q.rect(n.graphics.trackerGroup).attr(e));D>m&&D<S&&c>d&&c<Ea&&(h.allowMove=!0);a&&a.ishot&&(h.allowMove=!1);u.attr({x:0,y:0,width:0,height:0}).show();break;case "end":d=u.getBBox();n={chart:n,selectionLeft:d.x,selectionTop:d.y,selectionHeight:d.height,
selectionWidth:d.width,originalEvent:b.originalEvent};h.isDragged&&(h.selectionEnd&&h.selectionEnd(n),h.isDragged=0);u.hide();delete h.oy;delete h.ox;break;default:h.allowMove&&(e=D-h.ox,ca=c-h.oy,g=h.ox,N=h.oy,h.isDragged||(n={chart:n,selectionLeft:(l?B(g,g+e):m)+.5*R,selectionTop:(v?B(N,N+ca):d)+.5*R,selectionHeight:0,selectionWidth:0,originalEvent:b.originalEvent},h.selectionStart&&h.selectionStart(n),h.isDragged=1),e=-(g-B(g-(g-H(g+e,m)),S)),ca=-(N-B(N-(N-H(N+ca,d)),Ea)),u.attr({x:(l?B(g,g+e):
m)+.5*R,y:(v?B(N,N+ca):d)+.5*R,width:l?t(e):k,height:v?t(ca):w}))}},M=function(b){var h=b.data;b=b.originalEvent;var n=b.target||b.originalTarget||b.srcElement||b.relatedTarget||b.fromElement,q=b.type,A=b.layerX,f=b.layerY;void 0===A&&(A=b.pageX-h.chartPosLeft,f=b.pageY-h.chartPosTop);"mousedown"===q&&(n.ishot=A>h.canvasX&&A<h.canvasX2&&f>h.canvasY&&f<h.canvasY2);"mouseup"===q&&setTimeout(function(){n.ishot=!1},1)},la=function(){var b="innerWidth",h="innerHeight",n=r.documentElement||r.body,q=n;"innerWidth"in
k?q=k:(b="clientWidth",h="clientHeight");return function(){return{width:q[b],height:q[h],scrollTop:n.scrollTop,scrollLeft:n.scrollLeft}}}(),C=function(b,h){var n={left:b.offsetLeft||0,top:b.offsetTop||0};for(b=b.offsetParent;b;)n.left+=b.offsetLeft||0,n.top+=b.offsetTop||0,b===r.body||b===r.documentElement||h||(n.left-=b.scrollLeft,n.top-=b.scrollTop),b=b.offsetParent;return n},Ga=function(b){return b&&b.replace(/\$/g,"$$$$")},Ba=function(b,h){return b||!1===b||0===b?b:h},ja=function(){var b,h,n;
h=0;for(n=arguments.length;h<n;h+=1)if((b=arguments[h])||!1===b||0===b)return b;return""},ba=function(){var b,h,n;h=0;for(n=arguments.length;h<n;h+=1)if((b=arguments[h])||!1===b||0===b)return b},ta=function(b,h,n,q){return T.dem.listen(b,h,n,q)},N=function(b,h,n){return T.dem.unlisten(b,h,n)},na=function(b){b=b.sourceEvent||b.originalEvent||b;return e&&b&&b.touches&&b.touches[0]||b||I},Va=function(){var b;return function(h){void 0===h.pageX&&(h.pageX=h.clientX+(b||(b=k.document.body||k.document.documentElement)).scrollLeft,
h.pageY=h.clientY+b.scrollTop);return h}}(),Ea=function(b,h){h=Va(na(h));var n=h.pageX,q=h.pageY,A=C(b);return{chartX:n-A.left,chartY:q-A.top,pageX:n,pageY:q}},za=function(b,h,n){b=r.createElement(b);for(var q in h)b.setAttribute(q,h[q]);n&&n.appendChild&&n.appendChild(b);return b},Ka=function(b){return b&&b.replace(/^#?([a-f0-9]+)/ig,"#$1")||"none"},Ia=function(){var b,h,n;h=0;for(n=arguments.length;h<n;h+=1)if(((b=arguments[h])||!1===b||0===b)&&!isNaN(b=Number(b)))return b},Ua=function(b,h){b=b||
!1===b||0===b?Number(b):NaN;return isNaN(b)?null:h?t(b):b},Pa=function(b){return"string"===typeof b?b.replace(W,"<br />"):""},Ra=function(b,h){b=b.split(",")[h||0];b=b.replace(L,"");""==b&&(b="000000");return b.replace(d,"#")},Xa=function(b){b=parseInt(b,10);if(isNaN(b)||100<b||0>b)b=100;return b},Ta=function(b,h){for(var n=h.length,q=-1;n--;)if(b===h[n]){q=n;break}return q},fa=function(){if(Array.isArray)return Array.isArray;var b=Object.prototype.toString,h=b.call([]);return function(n){return b.call(n)===
h}}(),Ha=function(b,h,n,q,A){var f,a,u,D;A?(q.push(b),A.push(h)):(q=[b],A=[h]);if(h instanceof Array)for(f=0;f<h.length;f+=1){try{a=b[f],u=h[f]}catch(c){continue}if("object"!==typeof u)n&&void 0===u||(b[f]=u);else{if(null===a||"object"!==typeof a)a=b[f]=u instanceof Array?[]:{};D=Ta(u,A);-1!==D?a=b[f]=q[D]:Ha(a,u,n,q,A)}}else for(f in h){try{a=b[f],u=h[f]}catch(c){continue}if(null!==u&&"object"===typeof u)if(D=J.call(u),"[object Object]"===D){if(null===a||"object"!==typeof a)a=b[f]={};D=Ta(u,A);-1!==
D?a=b[f]=q[D]:Ha(a,u,n,q,A)}else"[object Array]"===D?(null!==a&&a instanceof Array||(a=b[f]=[]),D=Ta(u,A),-1!==D?a=b[f]=q[D]:Ha(a,u,n,q,A)):b[f]=u;else b[f]=u}return b},Fa=function(b,h,n){if("object"!==typeof b&&"object"!==typeof h)return null;if("object"!==typeof h||null===h)return b;"object"!==typeof b&&(b=h instanceof Array?[]:{});Ha(b,h,n);return b},Oa=function(b,h){var n;if(h instanceof Array)for(n=h.length-1;0<=n;--n)"object"!==typeof h[n]?!0===h[n]&&b&&b.splice&&b.splice(n,1):J.call(h[n])===
J.call(b[n])&&Oa(b[n],h[n]);else for(n in h)"object"!==typeof h[n]?!0===h[n]&&b&&b.splice&&b.splice(n,1):J.call(h[n])===J.call(b[n])&&Oa(b[n],h[n]);return b},wa=function(){var b=/^@window_/g;return function(h,n){var q=h.replace(/\[[\'\"]/g,".").replace(/[\'\"]\]/g,"").replace(/\[/g,".@window_").replace(/\]/g,"").split("."),A=k,f,a;a="";var u,D,c;D=q.length;for(c=0;c<D;c+=1){u=q[c];f=A;if(u.match(b))a=k[u.replace(b,"")],A=A[a];else{if(void 0===A||null===A)throw(a||u).replace(b,"")+" is not defined";
A=A[u]}a=u}!A||"function"!==typeof A.call&&A!==k.alert?setTimeout(function(){throw u.replace(b,"")+"() is not a function";},0):A===k.alert?A(n):A.call(f,n)}}(),jb=function(){var b="FusionChartslinkEval"+parseInt(+new Date,10);return function(h){try{k[b]=new Function(h),eval('window["'+b+'"]();')}catch(n){setTimeout(function(){throw n;},0)}z?delete k[b]:k[b]=null}}(),lb=function(b){var h={image:!1};void 0!==b&&(b=b.replace(/^\s+/,"").replace(/\s+$/,""),/^i\s*[\-]\s*/i.test(b)?(h.image=!0,h.string=
b.replace(/^i\s*[\-]\s*/i,"")):h.string=b.replace(/^\\/,""));return h},Eb=function(b,h){b=Number(b);b=isNaN(b)?100:b;void 0!==h&&(b=b*h/100);return b%101},Bb=function(b,h,n){b=b.split(",");var q;void 0!==n&&(n=Ia(n.split(",")[0]));b[0]=Eb(b[0],n);for(q=1;q<h;q+=1)b[q]=b[0]*Eb(b[q],n)/100;return b.join(",")},zb=function(b,h,n){var q=0,A=0,f=0;n&&n.match(l)&&(n=n.split(","),q=n[0].slice(n[0].indexOf("(")+1),A=n[1],f=n[2],h||0===h||(h=parseInt(100*n[3].slice(0,n[3].indexOf(")")),10)));if(b)if(b.match(l))n=
b.split(","),q=n[0].slice(n[0].indexOf("(")+1),A=n[1],f=n[2];else{b=b.replace(P,"").split(",")[0];switch(b.length){case 3:b=b.charAt(0)+b.charAt(0)+b.charAt(1)+b.charAt(1)+b.charAt(2)+b.charAt(2);break;case 6:break;default:b=(b+"FFFFFF").slice(0,6)}q=parseInt(b.slice(0,2),16);A=parseInt(b.slice(2,4),16);f=parseInt(b.slice(4,6),16)}h||0===h||(h=100);"string"===typeof h&&(h=h.split(",")[0]);h=parseInt(h,10)/100;return"rgba("+q+","+A+","+f+","+h+")"},Tb=function(){var b={};return function(h){var n=(h=
h||this)&&h.FCcolor||h,q=n.color,A=n.ratio,f=n.angle,u=n.alpha,D=n.r,Y=n.cx,c=n.cy,e=n.fx,ca=n.fy,d=n.gradientUnits,g=n.x1,N=n.y1,l=n.x2,v=n.y2,B=1,m,k,w,na;if("string"===typeof h)return b[na="~"+h]||(b[na]=h.replace(/^#?([a-f0-9]{3,6})/ig,"#$1"));q=q||"";if(!q)return m;na=[q,u,A,f,D,Y,c,d,e,ca,g,l,N,v].join("_").replace(/[\(\)\s,\xb0#]/g,"_");if(b[na])return b[na];A=A&&(A+"").split(",")||[];u=(u||0===u)&&(u+"").split(",")||[];if(q=q.split(","))if(m="",1===q.length)w=q[0].replace(/^#?([a-f0-9]{3,6})/ig,
"$1"),m=u.length?"rgba("+gb(w).join(",")+","+.01*a(u[0])+")":w.replace(/^#?([a-f0-9]{3,6})/ig,"#$1");else{h=0;for(k=q.length;h<k;h++)w=q[h].replace(/^#?([a-f0-9]{3,6})/ig,"$1"),isNaN(A[h])||(A[h]=a(A[h]),w+=":"+A[h],isNaN(A[h+1])||(A[h+1]=a(A[h+1])+A[h])),isNaN(u[h])||""===u[h]||(B=.01*u[h]),q[h]="rgba("+gb(w).join(",")+","+B+")",isNaN(A[h])||(q[h]=q[h]+":"+A[h]);m+=q.join("-");if(void 0!==D||void 0!==e||void 0!==Y||n.radialGradient)m="xr("+[e,ca,D,Y,c,d].join()+")"+m;else{m="-"+m;if(void 0!==g||
void 0!==N||void 0!==l||void 0!==v)m="("+[g,N,l,v,d].join()+")"+m;void 0===f&&(f=0);m=360-a(f)%360+m}}return b[na]=m}}(),rb=function(){return function(){return""}}(),Ya=function(b){return b.replace(P,"").replace(d,"#")},Ma=function(b,h){h=(0>h||100<h?100:h)/100;b=b.replace(P,"");var n=parseInt(b,16),q=Math.floor(n/65536),A=Math.floor((n-65536*q)/256);return("000000"+(q*h<<16|A*h<<8|(n-65536*q-256*A)*h).toString(16)).slice(-6)},hb=function(b,h){h=(0>h||100<h?100:h)/100;b=b.replace(P,"");var n=parseInt(b,
16),q=Math.floor(n/65536),A=Math.floor((n-65536*q)/256);return("000000"+(256-(256-q)*h<<16|256-(256-A)*h<<8|256-(256-(n-65536*q-256*A))*h).toString(16)).slice(-6)},gb=function(b){b=parseInt(b,16);var h=Math.floor(b/65536),n=Math.floor((b-65536*h)/256);return[h,n,Math.floor(b-65536*h-256*n)]},ab=function(b,h){if("object"!==typeof b)return"";if(b.fontSize||b["font-size"])!b.fontSize&&b["font-size"]&&(b.fontSize=b["font-size"],delete b["font-size"]),b.lineHeight=(parseFloat(b.fontSize)||h||10)*T.lineHeightFactor+
"px",delete b["line-height"];!b.lineHeight&&b["line-height"]&&(b.lineHeight=b["line-height"],delete b["line-height"]);return b.lineHeight},vb=function(b,h,n,q,A){var f=ja(b.labelbordercolor,h.bordercolor,n.labelbordercolor,""),a=ba(b.labelbgcolor,h.bgcolor,n.labelbgcolor),u=Ia(b.labelborderthickness,h.borderthickness,n.labelborderthickness,1);A=Ia(n.usedataplotcolorforlabels,0)?A||q.color:q.color;f=f?zb(f,Ia(b.labelborderalpha,h.borderalpha,n.labelborderalpha,b.labelalpha,h.alpha,n.labelalpha,100)):
"";b={fontFamily:ba(b.labelfont,h.font,n.labelfont,q.fontFamily),fontSize:ba(b.labelfontsize,h.fontsize,n.labelfontsize,parseInt(q.fontSize,10))+"px",color:zb(ba(b.labelfontcolor,h.fontcolor,n.labelfontcolor,A),Ia(b.labelfontalpha,h.fontalpha,n.labelfontalpha,b.labelalpha,h.alpha,n.labelalpha,100)),fontWeight:Ia(b.labelfontbold,h.fontbold,n.labelfontbold)?"bold":"normal",fontStyle:Ia(b.labelfontitalic,h.fontitalic,n.labelfontitalic)?"italic":"normal",border:f||a?u+"px solid":"",borderColor:f,borderThickness:u,
borderPadding:Ia(b.labelborderpadding,h.borderpadding,n.labelborderpadding,2),borderRadius:Ia(b.labelborderradius,h.borderradius,n.labelborderradius,0),backgroundColor:a?zb(a,Ia(b.labelbgalpha,h.bgalpha,n.labelbgalpha,b.labelalpha,h.alpha,n.labelalpha,100)):"",borderDash:Ia(b.labelborderdashed,h.borderdashed,n.labelborderdashed,0)?Za(Ia(b.labelborderdashlen,h.borderdashlen,n.labelborderdashlen,4),Ia(b.labelborderdashgap,h.borderdashgap,n.labelborderdashgap,2),u):"none"};b.lineHeight=ab(b);return b},
pb=function(){var b={top:{align:"center",verticalAlign:"top",textAlign:"center"},right:{align:"right",verticalAlign:"middle",textAlign:"left"},bottom:{align:"center",verticalAlign:"bottom",textAlign:"center"},left:{align:"left",verticalAlign:"middle",textAlign:"right"}},h=/([^\,^\s]+)\)$/g,n=function(h,b){var f;/^(bar|bar3d)$/.test(h)&&(this.isBar=!0,this.yPos="bottom",this.yOppPos="top",this.xPos="left",this.xOppPos="right");f=parseInt(b.labelstep,10);this.labelStep=1<f?f:1;this.showLabel=Ia(b.showlabels,
b.shownames,1);this.is3D=/3d$/.test(h)};n.prototype={isBar:!1,yPos:"left",yOppPos:"right",xPos:"bottom",xOppPos:"top",addAxisGridLine:function(n,A,f,a,u,D,c,e){var ca=""===f?!1:!0,d=0<a||0<D.match(h)[1]?!0:!1,g;if(ca||d)d||(D="rgba(0,0,0,0)",a=.1),g={isGrid:!0,width:a,dashStyle:u,color:D,value:A,zIndex:void 0===c?2:c},ca&&(A=n.opposite?e?this.xOppPos:this.yOppPos:e?this.xPos:this.yPos,A=b[A],g.label={text:f,style:n.labels.style,textAlign:A.textAlign,align:A.align,verticalAlign:A.verticalAlign,rotation:0,
x:0,y:0}),n.plotLines.push(g);return g},addAxisAltGrid:function(h,b){if(!this.is3D){var f=Ia(h._lastValue,h.min),n=ba(h._altGrid,!1);n&&h.plotBands.push({isGrid:!0,color:h.alternateGridColor,to:b,from:f,zIndex:1});h._lastValue=b;h._altGrid=!n}},addXaxisCat:function(h,n,f,a,u,D,c,e){var ca=b[h.opposite?this.xOppPos:this.xPos];n={isGrid:!0,isDataLabel:!0,width:.1,color:"rgba(0,0,0,0)",value:n,label:{text:a,link:ba(u.labellink,D.link,c.labellink),style:vb(u,D,c,h.labels.style,e),textAlign:ca.textAlign,
align:ca.align,verticalAlign:ca.verticalAlign,rotation:0,x:0,y:0}};0!==f%this.labelStep&&(n.stepped=!0,n.label.style=h.steppedLabels.style);h.plotLines.push(n)},addVline:function(h,b,f,n){n=n._FCconf;var K=n.isBar,a=n.divlineStyle,u=Pa(b.label),D=!!Ia(b.showlabelborder,n.showVLineLabelBorder,1),c=!!Ia(b.showlabelbackground,1),e=ba(b.labelhalign,K?"left":"center"),d=ba(b.labelvalign,K?"middle":"bottom").toLowerCase(),g=Ia(b.labelposition,0),N=Ia(b.lineposition,.5),l=Ia(b.showvlines,n.showVLines,1),
v=Ia(b.alpha,n.vLineAlpha,80),m=ba(b.color,n.vLineColor).replace(/^#?/,"#"),B=c?ba(b.labelbgcolor,n.vLineLabelBgColor,"333333").replace(/^#?/,"#"):"",k=ba(b.labelcolor,n.vLineLabelColor,b.color,n.vLineColor).replace(/^#?/,"#"),w=Ia(b.thickness,n.vLineThickness,1),na=.5*w,t=!!Number(ba(b.dashed,0)),Ea=Ia(b.dashlen,5),C=Ia(b.dashgap,2),H=n.smartLabel,p=parseInt(a.fontSize,10)+2,ta=0,r=Ia(b.rotatelabel,n.rotateVLineLabels)?270:0,N=0>N||1<N?.5:N,g=0>g||1<g?0:g;H.setStyle(a);H=H.getOriSize(u);m=zb(m,l?
v:"0");if(K){switch(d){case "top":p-=H.height+na+2;break;case "middle":p-=.5*H.height+1;break;default:p+=na}b.labelhalign||(ta-=H.width*g)}else{switch(d){case "top":p=.5*-H.height+1;break;case "middle":p=0;break;default:p=.5*H.height}switch(e){case "left":ta+=w;break;case "right":ta-=w+1}}h.plotLines.push({isVline:!0,color:m,width:w,value:f-1+N,zIndex:Ia(b.showontop,n.showVLinesOnTop)?5:3,dashStyle:t?Za(Ea,C,w):"none",label:{text:u,align:K?"left":"center",offsetScale:g,rotation:r,y:p,x:ta,textAlign:e,
backgroundColor:B,borderWidth:l&&D?1:0,borderType:l&&D?"solid":"",borderColor:l&&D?k:"",backgroundOpacity:l&&c?ba(b.labelbgalpha,n.vLineLabelBgAlpha)/100:0,style:{color:l?k:m,fontSize:a.fontSize,fontFamily:a.fontFamily,lineHeight:a.lineHeight,backgroundColor:B}}})}};return n.prototype.constructor=n}(),kb=function(){var b=function(b,n,f,K,a){b=Math.abs(n-b);n=b/(f+1);h(b,f,K)||(a&&Number(n)/Number(K)<(1<K?2:.5)&&(K/=10),n=(Math.floor(n/K)+1)*K,b=n*(f+1));return b},h=function(b,h,f){return n(b/(h+1))>
n(f)?!1:!0},n=function(b){b=Math.abs(b);b=String(b);var h=0,f=b.indexOf(".");-1!=f&&(h=b.length-f-1);return h};return function(n,A,f,a,u,D,c,e){var ca,d,g,N,l,v,m,B=0;n=!0===isNaN(n)||void 0===n?.1:n;A=!0===isNaN(A)||void 0===A?0:A;n===A&&0===n&&(n=.1);d=Math.max(Math.floor(Math.log(Math.abs(A))/Math.LN10),Math.floor(Math.log(Math.abs(n))/Math.LN10));ca=Math.pow(10,d);2>Math.abs(n)/ca&&2>Math.abs(A)/ca&&(d--,ca=Math.pow(10,d));d=Math.floor(Math.log(n-A)/Math.LN10);g=Math.pow(10,d);0<n-A&&10<=ca/g&&
(ca=g);d=(Math.floor(n/ca)+1)*ca;0>A?g=-1*(Math.floor(Math.abs(A/ca))+1)*ca:D?g=0:(g=Math.floor(Math.abs(A/ca)-1)*ca,g=0>g?0:g);u&&0>=n&&(d=0);u=f||0===f?!0:!1;D=a||0===a?!0:!1;n=!1===u||!0===u&&Number(f)<n&&n-Number(f)>w?d:Number(f);A=!1===D||!0===D&&Number(a)>A&&Number(a)-A>w?g:Number(a);a=Math.abs(n-A);if(!1===D&&!1===u&&e)if(0<n&&0>A)for(f=!1,u=10<ca?ca/10:ca,e=b(A,n,c,u,!1),D=e-(c+1)*u;!1===f;){if(D+=(c+1)*u,h(D,c,u))if(e=D-a,d=D/(c+1),N=Math.min(Math.abs(A),n),g=N==Math.abs(A)?-1:1,0===c)f=
!0;else for(v=1;v<=Math.floor((c+1)/2);v++)l=d*v,!(l-N>e)&&l>N&&(m=D-l,m/d==Math.floor(m/d)&&l/d==Math.floor(l/d)&&(a=D,n=-1==g?m:l,A=-1==g?-l:-m,f=!0))}else f=b(A,n,c,ca,!0),e=f-a,a=f,0<n?n+=e:A-=e;else e&&(f=function(b,f,n){for(var q=0,A=1,K;;){K=b+q*A;K=0===K?1:K;if(h(f,K,n))break;q=-1==A||q>b?++q:q;if(25<q){K=0;break}A=q<=b?-1*A:1}return K},0<c&&(e=f(c,a,ca),0===e&&(e=f(c,a+1,ca),B=1),c=e));return{Max:n,Min:A,Range:a,interval:ca,divGap:(n-A+B)/(c+1)}}}(),xa=function(){var b=function(b,n,q){var A=
q.jsVars&&q.jsVars.smartLabel,f=b.offsetWidth,K=b.offsetHeight,a=this.chart;b=this.title;var u=q._chartMessageImageStyle,D=lb(n);b.y=K/2;b.x=f/2;a.bgSWF=b.text=void 0;n=D.string;D.image?(a.bgSWF=n,a.bgImageHAlign=u.imageHAlign,a.bgImageVAlign=u.imageVAlign,a.bgImageScale=u.imageScale,a.bgSWFAlpha=u.imageAlpha):void 0!==n&&(A?(ab(b.style),A.setStyle(b.style),n=A.getSmartText(Pa(n),f,K),b.text=n.text):b.text=Pa(n),b.verticalAlign="middle");b.style=q._chartMessageStyle;delete q._chartMessageImageStyle;
delete q._chartMessageStyle};b.prototype={chart:{events:{},margin:[0,0,0,0],backgroundColor:{FCcolor:{alpha:0}}},credits:{href:v,text:"FusionCharts XT Trial",enabled:!1},legend:{enabled:!1},title:{text:"",style:{fontFamily:"Verdana,sans",fontSize:"10px",color:"#666666"}},plotOptions:{series:{}},series:[{}],exporting:{enabled:!1},nativeMessage:!0};return b.prototype.constructor=b}(),bb={"true":{"true":{"true":"center","false":"center"},"false":{"true":"center","false":"center"}},"false":{"true":{"true":"right",
"false":"left"},"false":{"true":"left","false":"right"}}},qb=function(){return function(b,h,n,q,A,f,a){var u,D=n.trendStyle,c,e,ca,d,g,N,l,v,m,B,k,w,na,t=f?"xAxis":"dataLabels";if(f?n.showVLines:n.showTrendlines)for(u=0,e=b.length;u<e;u+=1)if((na=b[u])&&na.line)for(c=0,ca=na.line.length;c<ca;c+=1)d=na.line[c],B=n.numberFormatter.getCleanValue(ba(d.startvalue,d.value,0)),k=n.numberFormatter.getCleanValue(ba(d.endvalue,ba(d.startvalue,d.value,0))),f?v=h:q&&d.parentyaxis&&/^s$/i.test(d.parentyaxis)?
(v=h[1],w=1):v=h[0],N=v.max,l=v.min,g=!1,N>=B&&N>=k&&l<=B&&l<=k&&(q&&d.parentyaxis&&/^s$/i.test(d.parentyaxis)?g="1"!==ba(d.valueonleft,n.trendlineValuesOnOpp):q||(g="1"===ba(d.valueonright,n.trendlineValuesOnOpp)),N=!!Ia(d.istrendzone,f?1:0),(l=(f?n.showVLineLabels:n.showTrendlineLabels)?Pa(ba(d.displayvalue,n.numberFormatter[t](g?k:B,w))):"")?(m=B<k,g={text:l,textAlign:A?"center":g?"left":"right",align:A?bb[N][!a][m]:g?"right":"left",verticalAlign:A?"bottom":"middle",rotation:0,x:0,y:0,style:D},
l=ba(d.color,n.trendlineColor),d.alwaysVisible=N,l&&(g.style=Fa({},D),g.style.color=zb(l,Ia(d.alpha,100)))):g=void 0,l=Ba(Pa(ba(d.tooltext,na.tooltext,n.trendLineToolText))),l=Sa(l,[7,15,16,17,18,19],{startValue:B,startDataValue:n.numberFormatter[t](B,w),endValue:k,endDataValue:n.numberFormatter[t](k,w),axisName:v.title&&v.title.text},d),m=Ia(d.thickness,n.trendlineThickness,1),N?v.plotBands.push({isTrend:!0,color:zb(ba(d.color,n.trendlineColor),ba(d.alpha,n.trendlineAlpha,40)),from:B,to:k,label:g,
zIndex:n.is3d||"1"!==ba(d.showontop,n.showTrendlinesOnTop)?3:5,tooltext:l,alwaysVisible:d.alwaysVisible}):v.plotLines.push({isTrend:!0,color:zb(ba(d.color,n.trendlineColor,n.trendlineColor),ba(d.alpha,n.trendlineAlpha,99)),value:B,to:k,width:m,dashStyle:"1"==ba(d.dashed,n.trendlinesAreDashed)?Za(Ia(d.dashlen,n.trendlinesDashLen),Ia(d.dashgap,n.trendlinesDashGap),m):"none",label:g,zIndex:n.is3d||"1"!==ba(d.showontop,n.showTrendlinesOnTop)?3:5,tooltext:l}))}}(),Za=function(b,h,n,q){return q||void 0===
q?[b,h]:"none"},Na=function(){},Ja=function(b,h,n,q,A){var f,a=Ja[b],u;a||(u=function(){},u.prototype=n instanceof Na?n:new Na,u.prototype.constructor=u,a=Ja[b]=new u,n&&(a.base=n),a.name=b,a.config={},null!==A&&(b=(A instanceof Na?A:n instanceof Na?n:{}).config)&&Fa(a.config,b));q&&Fa(a.config,q);for(f in h)switch(typeof h[f]){case "object":if(h[f]instanceof Na){a[f]=h[f][f];break}default:a[f]=h[f];break;case "undefined":delete a[f]}return this instanceof Ja?(h=function(){this.config={};this.__setDefaultConfig=
function(){a&&a.config&&Fa(this.config,a.config)};this.__setDefaultConfig()},h.prototype=a,h.prototype.constructor=h,new h):a},Sa=function(){var b=[{regex:/((^|[^\\])((\\)\\)*\$cleanvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$cleanvalue))/ig,argIndex:2,argKey:"cleanvalue"},{regex:/((^|[^\\])((\\)\\)*\$datavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$datavalue))/ig,argIndex:2,argKey:"formattedValue"},{regex:/((^|[^\\])((\\)\\)*\$value)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$value))/ig,argIndex:3,
argKey:"value"},{regex:/((^|[^\\])((\\)\\)*\$label)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$label))/ig,argIndex:2,argKey:"label"},{regex:/((^|[^\\])((\\)\\)*\$seriesname)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$seriesname))/ig,argIndex:5,argKey:"seriesname"},{regex:/((^|[^\\])((\\)\\)*\$yaxisname)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$yaxisname))/ig,argIndex:2,argKey:"yaxisName"},{regex:/((^|[^\\])((\\)\\)*\$xaxisname)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$xaxisname))/ig,argIndex:2,argKey:"xaxisName"},
{regex:/((^|[^\\])((\\)\\)*\$displayvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$displayvalue))/ig,argIndex:3,argKey:"displayvalue"},{regex:/((^|[^\\])((\\)\\)*\$xdatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$xdatavalue))/ig,argIndex:2,argKey:"xDataValue"},{regex:/((^|[^\\])((\\)\\)*\$ydatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$ydatavalue))/ig,argIndex:2,argKey:"yDataValue"},{regex:/((^|[^\\])((\\)\\)*\$xvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$xvalue))/ig,argIndex:3,argKey:"x"},
{regex:/((^|[^\\])((\\)\\)*\$yvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$yvalue))/ig,argIndex:3,argKey:"y"},{regex:/((^|[^\\])((\\)\\)*\$zvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$zvalue))/ig,argIndex:3,argKey:"z"},{regex:/((^|[^\\])((\\)\\)*\$name)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$name))/ig,argIndex:3,argKey:"name"},{regex:/((^|[^\\])((\\)\\)*\$percentValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$percentValue))/ig,argIndex:2,argKey:"percentValue"},{regex:/((^|[^\\])((\\)\\)*\$startValue)/ig,
escapeRegex:/((^|[^\\])((\\)\\)*\\(\$startValue))/ig,argIndex:2,argKey:"startValue"},{regex:/((^|[^\\])((\\)\\)*\$startDataValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$startDataValue))/ig,argIndex:2,argKey:"startDataValue"},{regex:/((^|[^\\])((\\)\\)*\$endValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$endValue))/ig,argIndex:2,argKey:"endValue"},{regex:/((^|[^\\])((\\)\\)*\$endDataValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$endDataValue))/ig,argIndex:2,argKey:"endDataValue"},{regex:/((^|[^\\])((\\)\\)*\$axisName)/ig,
escapeRegex:/((^|[^\\])((\\)\\)*\\(\$axisName))/ig,argIndex:2,argKey:"axisName"},{regex:/((^|[^\\])((\\)\\)*\$cumulativevalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$cumulativevalue))/ig,argIndex:2,argKey:"cumulativeValue"},{regex:/((^|[^\\])((\\)\\)*\$cumulativedatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$cumulativedatavalue))/ig,argIndex:2,argKey:"cumulativeDataValue"},{regex:/((^|[^\\])((\\)\\)*\$cumulativePercentValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$cumulativePercentValue))/ig,
argIndex:2,argKey:"cumulativePercentValue"},{regex:/((^|[^\\])((\\)\\)*\$cumulativepercentdatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$cumulativepercentdatavalue))/ig,argIndex:2,argKey:"cumulativePercentDataValue"},{regex:/((^|[^\\])((\\)\\)*\$sum)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$sum))/ig,argIndex:2,argKey:"sum"},{regex:/((^|[^\\])((\\)\\)*\$unformattedsum)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$unformattedsum))/ig,argIndex:2,argKey:"unformattedSum"},{regex:/((^|[^\\])((\\)\\)*\$targetvalue)/ig,
escapeRegex:/((^|[^\\])((\\)\\)*\\(\$targetvalue))/ig,argIndex:2,argKey:"targetValue"},{regex:/((^|[^\\])((\\)\\)*\$targetdatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$targetdatavalue))/ig,argIndex:2,argKey:"targetDataValue"},{regex:/((^|[^\\])((\\)\\)*\$processname)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$processname))/ig,argIndex:2,argKey:"processName"},{regex:/((^|[^\\])((\\)\\)*\$start)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$start))/ig,argIndex:2,argKey:"start"},{regex:/((^|[^\\])((\\)\\)*\$end)/ig,
escapeRegex:/((^|[^\\])((\\)\\)*\\(\$end))/ig,argIndex:2,argKey:"end"},{regex:/((^|[^\\])((\\)\\)*\$percentcomplete)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$percentcomplete))/ig,argIndex:2,argKey:"percentComplete"},{regex:/((^|[^\\])((\\)\\)*\$taskpercentcomplete)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$taskpercentcomplete))/ig,argIndex:2,argKey:"taskPercentComplete"},{regex:/((^|[^\\])((\\)\\)*\$taskstartdate)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$taskstartdate))/ig,argIndex:2,argKey:"taskStartDate"},
{regex:/((^|[^\\])((\\)\\)*\$taskenddate)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$taskenddate))/ig,argIndex:2,argKey:"taskEndDate"},{regex:/((^|[^\\])((\\)\\)*\$tasklabel)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$tasklabel))/ig,argIndex:2,argKey:"taskLabel"},{regex:/((^|[^\\])((\\)\\)*\$date)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$date))/ig,argIndex:2,argKey:"date"},{regex:/((^|[^\\])((\\)\\)*\$percentofprevvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$percentofprevvalue))/ig,argIndex:2,argKey:"percentOfPrevValue"},
{regex:/((^|[^\\])((\\)\\)*\$sname)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$sname))/ig,argIndex:2,argKey:"sName"},{regex:/((^|[^\\])((\\)\\)*\$lname)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$lname))/ig,argIndex:2,argKey:"lName"},{regex:/((^|[^\\])((\\)\\)*\$fromid)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$fromid))/ig,argIndex:2,argKey:"fromId"},{regex:/((^|[^\\])((\\)\\)*\$fromlabel)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$fromlabel))/ig,argIndex:2,argKey:"fromLabel"},{regex:/((^|[^\\])((\\)\\)*\$toid)/ig,
escapeRegex:/((^|[^\\])((\\)\\)*\\(\$toid))/ig,argIndex:2,argKey:"toId"},{regex:/((^|[^\\])((\\)\\)*\$tolabel)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$tolabel))/ig,argIndex:2,argKey:"toLabel"},{regex:/((^|[^\\])((\\)\\)*\$fromxvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$fromxvalue))/ig,argIndex:2,argKey:"fromXValue"},{regex:/((^|[^\\])((\\)\\)*\$fromyvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$fromyvalue))/ig,argIndex:2,argKey:"fromYValue"},{regex:/((^|[^\\])((\\)\\)*\$fromxdatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$fromxdatavalue))/ig,
argIndex:2,argKey:"fromXDataValue"},{regex:/((^|[^\\])((\\)\\)*\$fromydatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$fromydatavalue))/ig,argIndex:2,argKey:"fromYDataValue"},{regex:/((^|[^\\])((\\)\\)*\$fromlabel)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$fromlabel))/ig,argIndex:2,argKey:"fromLabel"},{regex:/((^|[^\\])((\\)\\)*\$toxvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$toxvalue))/ig,argIndex:2,argKey:"toXValue"},{regex:/((^|[^\\])((\\)\\)*\$toyvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$toyvalue))/ig,
argIndex:2,argKey:"toYValue"},{regex:/((^|[^\\])((\\)\\)*\$toxdatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$toxdatavalue))/ig,argIndex:2,argKey:"toXDataValue"},{regex:/((^|[^\\])((\\)\\)*\$toydatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$toydatavalue))/ig,argIndex:2,argKey:"toYDataValue"},{regex:/((^|[^\\])((\\)\\)*\$tolabel)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$tolabel))/ig,argIndex:2,argKey:"toLabel"},{regex:/((^|[^\\])((\\)\\)*\$openvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$openvalue))/ig,
argIndex:2,argKey:"openValue"},{regex:/((^|[^\\])((\\)\\)*\$closevalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$closevalue))/ig,argIndex:2,argKey:"closeValue"},{regex:/((^|[^\\])((\\)\\)*\$highvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$highvalue))/ig,argIndex:2,argKey:"highValue"},{regex:/((^|[^\\])((\\)\\)*\$lowvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$lowvalue))/ig,argIndex:2,argKey:"lowValue"},{regex:/((^|[^\\])((\\)\\)*\$opendatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$opendatavalue))/ig,
argIndex:2,argKey:"openDataValue"},{regex:/((^|[^\\])((\\)\\)*\$closedatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$closedatavalue))/ig,argIndex:2,argKey:"closeDataValue"},{regex:/((^|[^\\])((\\)\\)*\$highdatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$highdatavalue))/ig,argIndex:2,argKey:"highDataValue"},{regex:/((^|[^\\])((\\)\\)*\$lowdatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$lowdatavalue))/ig,argIndex:2,argKey:"lowDataValue"},{regex:/((^|[^\\])((\\)\\)*\$maxvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$maxvalue))/ig,
argIndex:2,argKey:"maxValue"},{regex:/((^|[^\\])((\\)\\)*\$maxdatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$maxdatavalue))/ig,argIndex:2,argKey:"maxDataValue"},{regex:/((^|[^\\])((\\)\\)*\$minvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$minvalue))/ig,argIndex:2,argKey:"minValue"},{regex:/((^|[^\\])((\\)\\)*\$mindatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$mindatavalue))/ig,argIndex:2,argKey:"minDataValue"},{regex:/((^|[^\\])((\\)\\)*\$q1)/ig,argIndex:2,argKey:"Q1"},{regex:/((^|[^\\])((\\)\\)*\$unformattedQ1)/ig,
argIndex:2,argKey:"unformattedQ1"},{regex:/((^|[^\\])((\\)\\)*\$q3)/ig,argIndex:2,argKey:"Q3"},{regex:/((^|[^\\])((\\)\\)*\$unformattedQ3)/ig,argIndex:2,argKey:"unformattedQ3"},{regex:/((^|[^\\])((\\)\\)*\$median)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$median))/ig,argIndex:2,argKey:"median"},{regex:/((^|[^\\])((\\)\\)*\$unformattedMedian)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$unformattedMedian))/ig,argIndex:2,argKey:"unformattedMedian"},{regex:/((^|[^\\])((\\)\\)*\$SD)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$SD))/ig,
argIndex:2,argKey:"SD"},{regex:/((^|[^\\])((\\)\\)*\$unformattedsd)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$unformattedsd))/ig,argIndex:2,argKey:"unformattedsd"},{regex:/((^|[^\\])((\\)\\)*\$QD)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$QD))/ig,argIndex:2,argKey:"QD"},{regex:/((^|[^\\])((\\)\\)*\$unformattedQD)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$unformattedQD))/ig,argIndex:2,argKey:"unformattedQD"},{regex:/((^|[^\\])((\\)\\)*\$MD)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$MD))/ig,argIndex:2,argKey:"MD"},
{regex:/((^|[^\\])((\\)\\)*\$unformattedMD)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$unformattedMD))/ig,argIndex:2,argKey:"unformattedMD"},{regex:/((^|[^\\])((\\)\\)*\$mean)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$mean))/ig,argIndex:2,argKey:"mean"},{regex:/((^|[^\\])((\\)\\)*\$unformattedMean)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$unformattedMean))/ig,argIndex:2,argKey:"unformattedMean"},{regex:/((^|[^\\])((\\)\\)*\$unformattedMean)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$unformattedMean))/ig,argIndex:2,
argKey:"unformattedMean"},{regex:/((^|[^\\])((\\)\\)*\$volumeValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$volumeValue))/ig,argIndex:2,argKey:"volumeValue"},{regex:/((^|[^\\])((\\)\\)*\$volumeDataValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$volumeDataValue))/ig,argIndex:2,argKey:"volumeDataValue"},{regex:/((^|[^\\])((\\)\\)*\$fromXValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$fromXValue))/ig,argIndex:2,argKey:"fromXValue"},{regex:/((^|[^\\])((\\)\\)*\$fromYValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$fromYValue))/ig,
argIndex:2,argKey:"fromYValue"},{regex:/((^|[^\\])((\\)\\)*\$fromXDataValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$fromXDataValue))/ig,argIndex:2,argKey:"fromXDataValue"},{regex:/((^|[^\\])((\\)\\)*\$fromYDataValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$fromYDataValue))/ig,argIndex:2,argKey:"fromYDataValue"},{regex:/((^|[^\\])((\\)\\)*\$fromLabel)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$fromLabel))/ig,argIndex:2,argKey:"fromLabel"},{regex:/((^|[^\\])((\\)\\)*\$toXValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$toXValue))/ig,
argIndex:2,argKey:"toXValue"},{regex:/((^|[^\\])((\\)\\)*\$toYValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$toYValue))/ig,argIndex:2,argKey:"toYValue"},{regex:/((^|[^\\])((\\)\\)*\$toXDataValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$toXDataValue))/ig,argIndex:2,argKey:"toXDataValue"},{regex:/((^|[^\\])((\\)\\)*\$toYDataValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$toYDataValue))/ig,argIndex:2,argKey:"toYDataValue"},{regex:/((^|[^\\])((\\)\\)*\$tolabel)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$tolabel))/ig,
argIndex:2,argKey:"toLabel"},{regex:/((^|[^\\])((\\)\\)*\$tlLabel)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$tlLabel))/ig,argIndex:5,argKey:"tlLabel"},{regex:/((^|[^\\])((\\)\\)*\$trlabel)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$trlabel))/ig,argIndex:5,argKey:"trLabel"},{regex:/((^|[^\\])((\\)\\)*\$bllabel)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$bllabel))/ig,argIndex:5,argKey:"blLabel"},{regex:/((^|[^\\])((\\)\\)*\$brlabel)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$brlabel))/ig,argIndex:5,argKey:"brLabel"},
{regex:/((^|[^\\])((\\)\\)*\$rowlabel)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$rowlabel))/ig,argIndex:5,argKey:"rowLabel"},{regex:/((^|[^\\])((\\)\\)*\$columnlabel)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$columnlabel))/ig,argIndex:5,argKey:"columnLabel"},{regex:/((^|[^\\])((\\)\\)*\$errorvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$errorvalue))/ig,argIndex:2,argKey:"errorValue"},{regex:/((^|[^\\])((\\)\\)*\$errordatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$errordatavalue))/ig,argIndex:2,argKey:"errorDataValue"},
{regex:/((^|[^\\])((\\)\\)*\$errorpercentvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$errorpercentvalue))/ig,argIndex:2,argKey:"errorPercentValue"},{regex:/((^|[^\\])((\\)\\)*\$errorpercentdatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$errorpercentdatavalue))/ig,argIndex:2,argKey:"errorPercentDataValue"},{regex:/((^|[^\\])((\\)\\)*\$horizontalErrorValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$horizontalErrorValue))/ig,argIndex:2,argKey:"horizontalErrorValue"},{regex:/((^|[^\\])((\\)\\)*\$horizontalErrorDataValue)/ig,
escapeRegex:/((^|[^\\])((\\)\\)*\\(\$horizontalErrorDataValue))/ig,argIndex:2,argKey:"horizontalErrorDataValue"},{regex:/((^|[^\\])((\\)\\)*\$verticalErrorValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$verticalErrorValue))/ig,argIndex:2,argKey:"verticalErrorValue"},{regex:/((^|[^\\])((\\)\\)*\$verticalErrorDataValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$verticalErrorDataValue))/ig,argIndex:2,argKey:"verticalErrorDataValue"},{regex:/((^|[^\\])((\\)\\)*\$horizontalErrorPercent)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$horizontalErrorPercentValue))/ig,
argIndex:2,argKey:"horizontalErrorPercentValue"},{regex:/((^|[^\\])((\\)\\)*\$horizontalErrorPercentDataValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$horizontalErrorPercentDataValue))/ig,argIndex:2,argKey:"horizontalErrorPercentDataValue"},{regex:/((^|[^\\])((\\)\\)*\$verticalErrorPercent)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$verticalErrorPercentValue))/ig,argIndex:2,argKey:"verticalErrorPercentValue"},{regex:/((^|[^\\])((\\)\\)*\$verticalErrorPercentDataValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$verticalErrorPercentDataValue))/ig,
argIndex:2,argKey:"verticalErrorPercentDataValue"},{regex:/((^|[^\\])((\\)\\)*\$xaxispercentvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$xaxispercentvalue))/ig,argIndex:2,argKey:"xAxisPercentValue"},{regex:/((^|[^\\])((\\)\\)*\$percentdatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$percentdatavalue))/ig,argIndex:2,argKey:"percentDataValue"},{regex:/((^|[^\\])((\\)\\)*\$trType)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$trType))/ig,argIndex:4,argKey:"trtype"},{regex:/((^|[^\\])((\\)\\)*\$tlType)/ig,
escapeRegex:/((^|[^\\])((\\)\\)*\\(\$tlType))/ig,argIndex:4,argKey:"tltype"},{regex:/((^|[^\\])((\\)\\)*\$brType)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$brType))/ig,argIndex:4,argKey:"brtype"},{regex:/((^|[^\\])((\\)\\)*\$blType)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$blType))/ig,argIndex:4,argKey:"bltype"},{regex:/((^|[^\\])((\\)\\)*\$colorRangeLabel)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$colorRangeLabel))/ig,argIndex:5,argKey:"colorRangeLabel"},{regex:/((^|[^\\])((\\)\\)*\$zdatavalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$zdatavalue))/ig,
argIndex:2,argKey:"zDataValue"},{regex:/((^|[^\\])((\\)\\)*\$svalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$svalue))/ig,argIndex:3,argKey:"svalue"},{regex:/((^|[^\\])((\\)\\)*\$positiveErrorValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$positiveErrorValue))/ig,argIndex:2,argKey:"positiveErrorValue"},{regex:/((^|[^\\])((\\)\\)*\$negativeErrorValue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$negativeErrorValue))/ig,argIndex:2,argKey:"negativeErrorValue"},{regex:/((^|[^\\])((\\)\\)*\$datasvalue)/ig,escapeRegex:/((^|[^\\])((\\)\\)*\\(\$datasvalue))/ig,
argIndex:2,argKey:"formattedsValue"}],h=[],n,q=b.length;for(n=0;n<q;n+=1)h.push(n);return function(){var n=arguments[0],f=arguments[1],q,a,u,D,c;fa(f)||(f=h);if(n)for(c=f.length,D=0;D<c;D+=1)if(u=b[f[D]])q=Ga(Ba((a=arguments[u.argIndex])&&a[u.argKey],"")+""),n=n.replace(u.regex,"$2$4"+(u.parsingMethod?u.parsingMethod(q):q)),n=n.replace(u.escapeRegex,"$2$4$5");return n}}(),xb=function(){var b=r.createElement("canvas");return!(!b.getContext||!b.getContext("2d"))},fb=function(b){var h,n,q;h=0<=b.split(",")[0].indexOf("base64")?
k.atob(b.split(",")[1]):k.unescape(b.split(",")[1]);b=b.split(",")[0].split(":")[1].split(";")[0];n=new Uint8Array(h.length);for(q=0;q<h.length;q++)n[q]=h.charCodeAt(q);return new k.Blob([n],{type:b})},tb=function(){var b=k.navigator.userAgent,h;return-1!==(h=b.indexOf("Edge"))?{name:"Edge",version:b.substring(h+5,h+11)}:-1!==(h=b.indexOf("Chrome"))?{name:"Chrome",version:b.substring(h+7,h+11)}:-1!==(h=b.indexOf("MSIE"))?{name:"ie",version:b.substring(h+5,h+9)}:-1!==(h=b.indexOf("rv"))&&-1!==b.indexOf("Trident")?
{name:"ie",version:b.substring(h+5,h+9)}:-1!==(h=b.indexOf("Firefox"))?{name:"Firefox",version:b.substring(h+8,h+12)}:-1!==(h=b.indexOf("Safari"))?{name:"Safari",version:b.substring(h+7,h+11)}:{name:"default",version:"Not Known"}},cb=function(b){return b.replace(/<image [^\>]*\>/gi,function(b){return b.match(/href=["']\s*["']/)||b.match(/href=["']http:\/\/|href=["']https:\/\//)&&/(href=["']http:\/\/|href=["']https:\/\/)([^\/\:]*)/.exec(b)[2]&&k.location.hostname!==/(href=["']http:\/\/|href=["']https:\/\/)([^\/\:]*)/.exec(b)[2]?
"":b})},Cb=function(b,h,n){var q=tb(),A;"Chrome"===q.name||"Firefox"===q.name?("blob"===b&&(h=k.URL.createObjectURL(h)),A=r.createElement("a"),A.download=n,A.href=h,r.body.appendChild(A),A.onclick=function(){A.parentNode.removeChild(A)},A.click()):"ie"!==q.name&&"Edge"!==q.name||!k.navigator.msSaveBlob||(b="url"===b?fb(h):h,k.navigator.msSaveBlob(b,n))},yb=function(b,h){var n,q,A,f;f=h.exportTargetWindow;var a=h.exportCallback,u=h.fusionCharts,D=h.paper,c=h.chartId;q=h.exportHandler;var e;if("download"===
h.exportAction){/webkit/ig.test(k.navigator.userAgent)&&"_self"===f&&(f=A=c+"export_iframe",e||(e=A=za("IFRAME",{name:A,width:"1px",height:"1px"},r.body),A.style.cssText="position:absolute;left:-10px;top:-10px;"));q=za("form",{method:"POST",action:q,target:f,style:"display:none;"},r.body);for(n in b)za("input",{type:"hidden",name:n,value:b[n]},q);q.submit();r.body.removeChild(q);q=void 0;return!0}f=new g.ajax(function(b){var h={};b.replace(RegExp("([^?=&]+)(=([^&]*))?","g"),function(b,f,n,q){h[f]=
q});a&&k[a]&&"function"===typeof k[a]&&k[a].call(k,h);g.raiseEvent("exported",h,u)},function(b){b={statusCode:0,statusMessage:"failure",error:b,DOMId:c,width:D&&D.width,height:D&&D.height};a&&k[a]&&"function"===typeof k[a]&&k[a].call(k,b);g.raiseEvent("exported",b,u,[b])});for(n in b)b.hasOwnProperty(n)&&(b[n]=encodeURIComponent(b[n]));f.post(q,b)},ib=function(b,h){var n=0,q,A=0,f;b=b.replace(/NS\d+:/gi,"xlink:");b=cb(b);-1===b.indexOf("<image ")?h(b):(q=b.match(/<image [^\>]*\>/gi).length,b=b.replace(/<image [^\>]*\>/gi,
function(a){a=a.replace(/(:href=")([^"]*)(")/gi,function(b,h,q,A){f=q;return h+"{{{"+n+"}}}"+A});var u=r.createElement("canvas"),D,c;D=u.getContext("2d");c=new Q;c.src=f;c.ind=n;c.onload=function(){u.width=this.width;u.height=this.height;D.drawImage(this,0,0);var f=u.toDataURL("image/png");(new Q).src=f;b=b.replace(new RegExp("\\{\\{\\{"+c.ind+"\\}\\}\\}","g"),f);A++;q===A&&h(b)};n++;return a}))},ob=function(b,h){ib(b,function(b){h("data:image/svg+xml;base64,"+k.btoa(k.unescape(encodeURIComponent('<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'+
b))))})},mb=function(){var b,h,n,q,A,f,a,u;if(this&&this!==k){this.disposing=!0;if(b=this.components)for(n in b)if(h=b[n],h instanceof Array)for(q=h.length,A=0;A<q;A++)(u=h[A])&&!this.disposing&&(u.dispose?u.dispose():mb.call(u));else h&&!h.disposing&&(h.dispose?h.dispose():mb.call(h));b=this.graphics;for(f in b)if(h=b[f])if(h.hide)h.hide(),h.followers&&h.followers[0]&&(h=h.followers[0].el)&&h.hide&&h.hide();else for(a in h)q=h[a],q.hide&&q.hide();for(n in this)delete this[n]}},b=function(b,h){return(b.pIndex||
0)-(h.pIndex||0)},u={},D=tb();D.hasCanvas=xb();D.hasSvg=z;g.registrars.component=function(b){var h,n,q,A,f,a,D,Y,c;if(b&&b.length&&b[0]&&b[0].toLowerCase&&(a=b[0].toLowerCase(),Y=u[a]||(u[a]={}),b[1]&&b[1].toLowerCase)){a=b[1].toLowerCase();if(2==b.length){if("undefined"===typeof Y[a])return}else{q=Y[a]=Y[a]||{constructor:function(){this.config={};this.__setDefaultConfig=function(){q&&q.defConfig&&Fa(this.config,q.defConfig)};this.__setDefaultConfig()},defConfig:{}};A=q.constructor;c=q.defConfig;
"undefined"!==typeof b[3]&&(D=b[3].toLowerCase(),n=Y[D]);if(D&&n){h=new n.constructor;A.prototype=h;A.prototype.constructor=A;D=b[2]||{};for(f in D)A.prototype[f]="undefined"!==typeof D[f]?D[f]:h[f];A.prototype.__base__=new n.constructor}else if(Y[a])for(h in f=b[2],f)A.prototype[h]=f[h];else A.prototype=b[2],A.prototype.constructor=A;null!==b[5]&&("undefined"!==typeof b[5]&&(D=b[5].toLowerCase(),n=Y[D]),n&&(n=n.defConfig,Fa(c,n)));"undefined"!==typeof b[4]&&Fa(c,b[4])}return Y[a]&&Y[a].constructor}};
g.core._setLineHeightFactor=function(b){!(b=a(b))||0>b||(T.lineHeightFactor=b)};T.ColorRange=F=function(b){this.linkedItems={iapi:b};this.configure()};F.prototype={configure:function(){var b=this.linkedItems.iapi,h=b.jsonData,n=h.colorrange&&Fa({},h.colorrange).color,h=B(H(Ia(h.chart.palette,0)-1,0),4),h=b.defaultPaletteOptions&&b.defaultPaletteOptions.paletteColors[h||0]||T.defaultPaletteOptions.paletteColors[h||0],q=function(b,h){return b.minvalue-h.minvalue},A=b.components,f,a,u,D,c;delete this.defaultAsigned;
h instanceof Array||(h=A.colorManager.getPlotColor(0));if(n&&0<n.length){for(a=u=n.length-1;0<=a;--a)if(b=n[a])b.minvalue=A.numberFormatter.getCleanValue(b.minvalue),b.maxvalue=A.numberFormatter.getCleanValue(b.maxvalue),null===b.minvalue&&(null!==b.maxvalue?b.minvalue=b.maxvalue:a!==u&&n.splice(a,1)),void 0!==b.label&&(b.label=Pa(b.label)),void 0!==b.name&&(b.name=Pa(b.name)),null!==b.maxvalue&&b.minvalue>b.maxvalue&&(D=b.minvalue,b.minvalue=b.maxvalue,b.maxvalue=D);n.sort(q);n[0].code||(n[0].code=
h[0]);void 0===Ba(n[0].alpha)&&(n[0].alpha="100");a=0;for(u=n.length-1;a<u;a+=1)if(A=a+1,b=n[a],q=n[A],q.code||(q.code=h[A]),void 0===Ba(q.alpha)&&(q.alpha="100"),null===b.maxvalue&&(b.maxvalue=q.minvalue),b.maxvalue>q.minvalue){if(b.maxvalue>q.maxvalue){A=Fa(b);A.maxvalue=b.maxvalue;c=A.minvalue=q.maxvalue;for(D=a+2;D<u&&n[D].minvalue<c;D+=1);n.splice(D,0,A);u+=1}b.maxvalue=q.minvalue}b=n[a];null===b.maxvalue&&(b.maxvalue=b.minvalue)}n&&0<n.length||(f||(f={code:"CCCCCC",alpha:"100",bordercolor:"000000",
borderalpha:"100"}),n=[f],this.defaultAsigned=!0);this.colorArr=n},getColorObj:function(b){for(var h=this.colorArr,n=0,q=h.length,A,f,a={};n<q;n+=1){a.index=n;A=h[n];f=h[n+1];if(b<A.minvalue)return a.nextObj=A,a;if(b>=A.minvalue&&b<=A.maxvalue)return a.colorObj=A,f&&b==f.minvalue&&(a.nextObj=f,a.isOnMeetPoint=!0),a;a.prevObj=A}a.index=n-1;return a},getColorRangeArr:function(b,h){var n,q=this.colorArr,A,f,a=[],u,D;if(!this.defaultAsigned&&(b>h&&(n=b,b=h,h=n),b<h&&(A=this.getColorObj(b),f=this.getColorObj(h),
A&&f))){n=b;A=A.index;for(f=f.index;A<=f;A+=1)u=Fa({},q[A]),u.minvalue!==n&&(u.minvalue=n),a.push(u),D=u,n=u.maxvalue;D.maxvalue=h}return a}};F.prototype.constructor=F;T.nonGradientColorRange=F=function(b){var h=b.sortLegend||!1,n=b.mapByCategory||!1,q=b.numberFormatter;b=(b.colorRange||{}).color;var A=this.colorArr=[],f,a,u,D,c,e,d=function(b,h){return b.maxvalue-h.maxvalue};this.mapByCategory=n;if(b&&(f=b.length)){for(a=0;a<f;a+=1)D=b[a],u=ba(D.color,D.code),c=Ia(D.maxvalue),e=Ia(D.minvalue),D=
ba(D.label,D.displayvalue,n?"":q.dataLabels(e)+" - "+q.dataLabels(c)),(u&&c>e||n&&D)&&A.push({code:u,maxvalue:c,minvalue:e,label:Pa(D),labelId:D.toLowerCase()});A.length?h&&A.sort(d):this.noValidRange=!0}};F.prototype={getColorObj:function(b){var h=this.colorArr,n=this.gradient?1:0,q=h[n],A;if(this.mapByCategory){for(b=Pa(b).toLowerCase();q;){if(q.labelId===b)return{code:q.code,seriesIndex:n};n+=1;q=h[n]}return{outOfRange:!0}}if(this.gradient){if(this.scaleMin<=b&&this.scaleMax>=b){for(;q&&q.maxvalue<
b;)n+=1,q=h[n];b=(b-q.minvalue)/q.range;h=h[n-1].codeRGB;q=q.codeRGB;n=h[0];A=h[1];h=h[2];return{code:("000000"+(n+(q[0]-n)*b<<16|A+(q[1]-A)*b<<8|h+(q[2]-h)*b).toString(16)).slice(-6)}}return{outOfRange:!0}}for(;q;){if(q.maxvalue>b&&q.minvalue<=b)return{code:q.code,seriesIndex:n};q.maxvalue===b&&(A=n);n+=1;q=h[n]}return(q=h[A])&&q.maxvalue===b?{code:q.code,seriesIndex:A}:{outOfRange:!0}}};F.prototype.constructor=F;g.extend(T,{BLANKSTRINGPLACEHOLDER:"#BLANK#",BLANKSTRING:"",COLOR_BLACK:"000000",COLOR_GLASS:"rgba(255, 255, 255, 0.3)",
COLOR_WHITE:"FFFFFF",COLOR_TRANSPARENT:"rgba(0,0,0,0)",HASHSTRING:"#",BREAKSTRING:"<br />",STRINGSTRING:"string",OBJECTSTRING:"object",COMMASTRING:",",ZEROSTRING:"0",SAMPLESTRING:"Ay0",TESTSTR:"Ag",ONESTRING:"1",DECIMALSTRING:".",STRINGUNDEFINED:"undefined",POSITION_TOP:"top",POSITION_RIGHT:"right",POSITION_BOTTOM:"bottom",POSITION_LEFT:"left",POSITION_CENTER:"center",POSITION_MIDDLE:"middle",POSITION_START:"start",POSITION_END:"end",FC_CONFIG_STRING:"_FCconf",SHAPE_RECT:"rect",HUNDREDSTRING:"100",
PXSTRING:"px",COMMASPACE:", ",TEXTANCHOR:"text-anchor",TOUCH_THRESHOLD_PIXELS:15,CLICK_THRESHOLD_PIXELS:5,regex:{stripWhitespace:L,dropHash:d,startsRGBA:l,cleanColorCode:P,breakPlaceholder:W,hexcode:/^#?[0-9a-f]{6}/i},fireEvent:function(b,h,n,q){T.dem.fire(b,h,n,q)},plotEventHandler:function(b,h,n){h=h||{};var q=h.type,A=Ea(b.linkedItems.container,h),A=Fa(A,this.data("eventArgs")),f=b.fireGroupEvent,a=this.data("groupId"),u=function(b,f){h.FusionChartsPreventEvent=!0;G&&f.toolText&&T.toolTip&&T.toolTip.preventTooltip()};
"index"in A&&!("dataIndex"in A)&&(A.dataIndex=A.index);"value"in A&&!("dataValue"in A)&&(A.dataValue=A.value);n=ba(n,"dataplotclick").toLowerCase();"dataplotrollover"===n?(h.FusionChartsPreventEvent=!1,f?g.raiseEventGroup(a,n,A,b.chartInstance,void 0,void 0,u):g.raiseEvent(n,A,b.chartInstance,void 0,void 0,u)):f&&"dataplotclick"!==n?g.raiseEventGroup(a,n,A,b.chartInstance):g.raiseEvent(n,A,b.chartInstance);if(("click"===q||"mouseup"===q||"touchend"===q)&&/click/i.test(n)){if(ha&&!X){n=(new Date).getTime();
if(this.lastClickTimeStamp&&400>n-this.lastClickTimeStamp){h&&(h.originalEvent||h).preventDefault();return}this.lastClickTimeStamp=n}b.linkedItems&&b.linkedItems.linkClickFN.call({link:A.link},b)}},getEventCoordinate:Va,getMouseCoordinate:Ea,addEvent:ta,removeEvent:N,getTouchEvent:na,extend2:Fa,deltend:function(b,h){if("object"!==typeof b||"object"!==typeof h)return null;Oa(b,h);return b},imprint:function(b,h,n){var q;if("object"!==typeof b||null===b)return h;if("object"!==typeof h||null===h)return b;
for(q in h)if(void 0===b[q]||!n&&null===b[q])b[q]=h[q];return b},pluck:ba,pluckNumber:Ia,getFirstDefinedValue:function(){var b,h,n;h=0;for(n=arguments.length;h<n;h+=1)if((b=arguments[h])||!1===b||0===b||""==b)return b},createElement:za,hashify:Ka,dehashify:function(b){return b&&b.replace(/^#?([a-f0-9]+)/ig,"$1")||"none"},pluckFontSize:function(){var b,h,n;h=0;for(n=arguments.length;h<n;h+=1)if(((b=arguments[h])||!1===b||0===b)&&!isNaN(b=Number(b)))return 1>b?1:b;return 1},getValidValue:Ba,getPosition:C,
getViewPortDimension:la,bindSelectionEvent:function(b,h){h=h||{};var n=b.config,q=b.linkedItems.container,A=n.zoomType,f=Fa({},h.attr||{}),a=f["stroke-width"]=Ia(f.strokeWidth,f["stroke-width"],1),u=C(q),D=b.eventListeners||(b.eventListeners=[]);h=Fa({chart:b,zoomX:/x/.test(A),zoomY:/y/.test(A),canvasY:n.canvasTop,canvasX:n.canvasLeft,canvasW:n.canvasWidth,canvasH:n.canvasHeight,canvasX2:n.canvasLeft+n.canvasWidth,canvasY2:n.canvasTop+n.canvasHeight,strokeWidth:a,chartPosLeft:u.left,chartPosTop:u.top,
attr:f},h);f.stroke=ja(f.stroke,"rgba(51,153,255,0.8)");f.fill=ja(f.fill,"rgba(185,213,241,0.3)");f.ishot=!0;q&&(N(q,"pointerdrag",oa),D.push(ta(q,"pointerdrag",oa,h)));n.link&&(N(b.linkedItems.container,"mouseup mousedown",M),D.push(ta(b.linkedItems.container,"mouseup mousedown",M,h)))},createContextMenu:function(b){var h=b.chart,n=h.smartLabel,q=h.logic.hcJSON&&h.logic.hcJSON.chart.useRoundEdges,A=T.Raphael,f=function(b){var h=b.menufillcolor&&Ka(b.menufillcolor),f=b.menulabelcolor&&Ka(b.menulabelcolor),
n=b.menufillhovercolor&&Ka(b.menufillhovercolor);b=b.menulabelhovercolor&&Ka(b.menulabelhovercolor);return{attrs:{backgroundColor:h,color:f},hover:{backgroundColor:n,color:b}}}(h.definition.chart),a=function(b,h,f){h=h||{};b=(b=(b=b&&A.tintshade(b.color,.7))&&A.getRGB(b))&&"rgb("+[b.r,b.g,b.b].join()+")";return{backgroundColor:h.backgroundHoverColor||f.backgroundColor||b||"rgb(64, 64, 64)",color:h.hoverColor||f.color||"#FFFFFF"}}(b.basicStyle,b.hover,f.hover),u=function(b,h,f){h=Fa({},h||{});h=Fa(h,
b);return{fontFamily:h.fontFamily||"Verdana,sans",fontSize:h.fontSize||"10px",color:h.color||f.color||"#000000",backgroundColor:h.backgroundColor||f.backgroundColor||"rgb(255, 255, 255)"}}(b.basicStyle,b.attrs,f.attrs),D={textAlign:"left",align:"left",paddingLeft:"5px",paddingRight:"5px",paddingTop:"5px",cursor:"pointer",borderWidth:"0px"},c=b.items,e=b.position,d=b.verticalPadding||3,g=b.horizontalPadding||6,N={},l,v,m,B,k,w,na,t,Ea,p,ta,I,Va;if(h)l=C(h.linkedItems.container);else return!1;B=function(){var b=
N.items,h=b.length,f=0,A=0,a=0,K,ea;N.menuItems||(N.menuItems=[]);for(n.setStyle(u);h--;)K=b[h],K=n.getOriSize(K.text),a||(a=K.height+2*d),f+=a,A=H(A,K.width+2*g);N.height=f;N.width=A;N.itemH=a;this.style.width=A+"px";N.menuRect||(f=N.menuRect=r.createElement("div"),f.style.border="1px solid rgb(100, 100, 100)",q&&(f.style.mozBorderRadius="4px",f.style.webkitBorderRadius="4px",f.style.borderRadius="4px",f.style.overflow="hidden"),G&&!z?f.style.filter="progid:DXImageTransform.Microsoft.Shadow(Color=#999999,direction=135,strength=3)":
(f.style.mozBoxShadow="3px 3px 3px #999",f.style.webkitBoxShadow="3px 3px 3px #999",f.style.boxShadow="3px 3px 3px #999"),this.appendChild(f));A=b.length;for(h=0;h<A;h+=1)if(K=b[h],N.menuItems[h])N.menuItems[h].label.innerHTML=K.text;else{N.menuItems[h]={};f=N.menuItems[h].box=r.createElement("div");f.style.height=a+"px";f.style.lineHeight=a+"px";for(ea in D)f.style[ea]=D[ea];for(ea in u)f.style[ea]=u[ea];N.menuRect.appendChild(f);f.innerHTML=K.text;T.dem.listen(f,"click",Va);T.dem.listen(f,"pointerhover",
p);N.menuItems[h].box._itemIdx=h}for(;N.menuItems[h];)N.menuItems[h].box.parentNode.removeChild(N.menuItems[h].box),N.menuItems.splice(h,1)};k=function(){m||(m=r.createElement("div"),m.style.position="absolute",m.style.zIndex="50",m.style.display="none",h.linkedItems.container.appendChild&&h.linkedItems.container.appendChild(m));return m};w=function(){v=setTimeout(N.hide,800)};na=function(){v&&clearTimeout(v)};t=function(b){var f=b.x;b=b.y;var n={x:f,y:b},q=N.width,A=N.height,a=h.chartHeight,u=h.chartWidth;
f+q>u&&0<f-q?n.x-=q:f+q>u&&(n.x=0);b+A>a&&0<b-A&&(n.y-=A);return n};Ea=function(){N.hide()};p=function(b){b.target&&b.target.parentNode&&("start"===b.state?ta:I).call(b.target)};ta=function(){var b=N.menuItems[this._itemIdx],h;na();for(h in a)b.box.style[h]=a[h]};I=function(){var b=N.menuItems[this._itemIdx],h;for(h in u)b.box.style[h]=u[h];w()};Va=function(b){var h=N.items[this._itemIdx];h.onclick&&h.onclick.call(h,b);b.originalEvent.stopPropagation?b.originalEvent.stopPropagation():b.originalEvent.cancelBubble=
!0;N.hide()};N.showItem=function(b){b=this.menuItems[b];var h=this.height,f=this.itemH;b&&b._isHidden&&(b.box.style.display="",this.height=h+f,b._isHidden=!1,b=t(e),this.left=b.x,this.top=b.y)};N.hideItem=function(b){b=this.menuItems[b];var h=this.height,f=this.itemH;b&&!b._isHidden&&(b.box.style.display="none",this.height=h-f,b._isHidden=!0,b=t(e),this.left=b.x,this.top=b.y)};N.redraw=function(){var b=this.menuContainer;this.items=c;b?B.call(this.menuContainer):e&&void 0!==e.x&&void 0!==e.y?(this.menuContainer=
k(),B.call(this.menuContainer),b=t(e),this.left=b.x,this.top=b.y,this.menuContainer.style.left=this.left+"px",this.menuContainer.style.top=this.top+"px"):(this.menuContainer=k(),B.call(this.menuContainer))};N.show=function(b){var h=this;b&&void 0!==b.x&&void 0!==b.y?(b=t(b),h.menuContainer.style.left=b.x+"px",h.menuContainer.style.top=b.y+"px"):(h.menuContainer.style.left=h.left+"px",h.menuContainer.style.top=h.top+"px");h.menuContainer.style.display="";setTimeout(function(){h.visible=!0;A.click(Ea)},
400)};N.hide=function(){this.visible&&(this.visible=!1,N.menuContainer.style.display="none",N.menuContainer.style.left=-N.width+"px",N.menuContainer.style.top=-N.height+"px",A.unclick(Ea))};N.update=function(b){b&&b.length&&(this.items=b,this.redraw())};N.updatePosition=function(b){var f=l.left,n=l.top;l=C(h.linkedItems.container);b?(e=b,b=t(b),this.left=b.x,this.top=b.y):(this.left-=f-l.left,this.top-=n-l.top)};N.add=function(b){var h=this.menuItems,f=h.length,q;n.setStyle(u);this.width=H(this.width,
n.getOriSize(b.text).width);h[f]={};h=h[f].box=r.createElement("div");h.style.height=this.itemH+"px";h.style.lineHeight=this.itemH+"px";for(q in D)h.style[q]=D[q];for(q in u)h.style[q]=u[q];N.menuRect.appendChild(h);h.innerHTML=b.text;T.dem.listen(h,"click",Va);T.dem.listen(h,"pointerhover",p);N.menuItems[f].box._itemIdx=f;this.height+=this.itemH};N.removeItems=function(){for(var b=this.menuItems,h=b&&b.length,f;h--;)f=b[h],T.dem.unlisten(f.box,"click",Va),T.dem.unlisten(f.box,"pointerhover",p),f.box&&
f.box.parentNode&&f.box.parentNode.removeChild(f.box);delete this.menuItems;delete this.items};N.setPosition=function(b){void 0!==b.x&&void 0!==b.y&&(this.menuContainer.style.x=b.x,this.menuContainer.style.y=b.y)};N.destroy=function(){this.removeItems();this.menuContainer.parentNode.removeChild(this.menuContainer)};c&&c.length&&(N.redraw(),N.hide());return N},each:function(b,h,n,q){var A;n||(n=b);q||(q={});if(fa(b))for(A=0;A<b.length;A+=1){if(!1===h.call(n,b[A],A,b,q))return A}else if(null!==b&&void 0!==
b)for(A in b)if(!1===h.call(n,b[A],A,b,q))return A},getDefinedColor:function(b,h){return b||0===b||""===b?b:h},getFirstValue:ja,getFirstColor:Ra,getColorCodeString:function(b,h){var n="",q,A,f=0,a=h.split(",");for(A=a.length;f<A;f+=1)q=a[f].split("-"),n=2===q.length?"-1"!==q[0].indexOf("dark")?n+(hb(b,100-parseInt(q[1],10))+","):n+(Ma(b,100-parseInt(q[1],10))+","):n+(a[f]+",");return n.substring(0,n.length-1)},pluckColor:function(b){if(Ba(b))return b=b.split(",")[0],b=b.replace(L,""),""==b&&(b="000000"),
b.replace(d,"#")},toRaphaelColor:Tb,gradientify:rb,trimString:function(b){b=b.replace(/^\s\s*/,"");for(var h=/\s/,n=b.length;h.test(b.charAt(--n)););return b.slice(0,n+1)},getFirstAlpha:Xa,parsePointValue:Ua,parseUnsafeString:Pa,parseTooltext:Sa,toPrecision:function(b,h){var n=m(10,h);return c(b*n)/n},hasTouch:E,CREDIT_HREF:v,CREDIT_STRING:"FusionCharts XT Trial",getSentenceCase:function(b){b=b||"";return b.charAt(0).toUpperCase()+b.substr(1)},getCrispValues:function(b,h,n){var q=n%2/2;n=c(b+q)-q;
b=c(b+h+q)-q-n;return{position:n,distance:b}},regescape:function(b){return b&&b.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},regReplaceEscape:Ga,getImageURL:lb,isArray:fa,preDefStr:{colors:{B90000:"B90000",FFFFFF:"FFFFFF",AAAAAA:"AAAAAA",c000000:"000000"},defaultFontStr:"Verdana,sans",line:"line",bar:"bar",column:"column",volume:"volume",HUNDREDSTRING:"100",SEVENTYSTRING:"70",NINETYSTRING:"90",AUTOSTRING:"auto",configStr:"config",animationObjStr:"animationObj",showHoverEffectStr:"showHoverEffect",
hiddenStr:"hidden",visibleStr:"visible",columnStr:"columns",barStr:"bars",barHotStr:"bar-hot",colHotStr:"col-hot",shadowStr:"shadow",dataLabelStr:"datalabel",errorBarStr:"errorBar",errorHotStr:"error-hot",errorShadowStr:"error-shadow",negativeValueStr:"negative-values",positiveValueStr:"positive-values",zeroPlaneStr:"zero-plane",categoryPlotsStr:"categoryplots",noneStr:"NONE",setRolloverAttrStr:"setRolloverAttr",setRolloutAttrStr:"setRolloutAttr",elementStr:"element",hotElementStr:"hotElement",strokeWidthStr:"stroke-width",
strokeDashStr:"stroke-dasharray",strokeLineJoinStr:"stroke-linejoin",miterStr:"miter",visiblilityStr:"visibility",ROUND:"round",PERCENTAGESTRING:"%",pStr:"p",sStr:"s",divLineAlpha3DStr:"divLineAlpha3D",divLineAlphaStr:"divLineAlpha",altVGridColorStr:"altVGridColor",altVGridAlphaStr:"altVGridAlpha",altHGridColorStr:"altHGridColor",altHGridAlphaStr:"altHGridAlpha",PLOTFILLCOLOR_STR:"plotFillColor",UNDERSCORE:"_",gaugeFillColorStr:"gaugeFillColor",gaugeBorderColorStr:"gaugeBorderColor",NORMAL:"normal",
BOLD:"bold",POINTER:"pointer",POSITION_MIDDLE:"middle",POSITION_START:"start",POSITION_TOP:"top",POSITION_BOTTOM:"bottom",POSITION_END:"end"},stubFN:function(){},falseFN:function(){return!1},stableSort:function(b,h){var n=b.length,q;for(q=0;q<n;q++)b[q].ssI=q;b.sort(function(b,f){var n=h(b,f);return 0===n?b.ssI-f.ssI:n});for(q=0;q<n;q++)delete b[q].ssI},hasSVG:z,isIE:G,lineHeightFactor:1.2,getLinkAction:function(b,h){var n=function(b){return b};return function(q){var A=b.chart||b.map||{},f=Ia(A.unescapelinks,
1),A=Ia(A.clickurloverridesplotlinks,0),a=ja(this.link,"");q=q.config&&q.config.link||"";var u=A?ba(q,a):ba(a,q),D=u,c,e,d,N,l,v,m,B,w,na;void 0!==u&&(f&&(u=k.decodeURIComponent?k.decodeURIComponent(u):k.unescape(u)),u=u.replace(/^\s+/,"").replace(/\s+$/,""),-1!==u.search(/^[a-z]*\s*[\-\:]\s*/i)&&(l=u.split(/\s*[\-\:]\s*/)[0].toLowerCase(),na=l.length),setTimeout(function(){switch(l){case "j":u=u.replace(/^j\s*\-/i,"j-");c=u.indexOf("-",2);-1===c?wa(u.slice(2)):wa(u.substr(2,c-2).replace(/\s/g,""),
u.slice(c+1));break;case "javascript":jb(u.replace(/^javascript\s*\:/i,""));break;case "n":u.replace(/^n\s*\-/i,"n-");k.open(n(u.slice(2),f));break;case "f":u=u.replace(/^f\s*\-/i,"f-");c=u.indexOf("-",2);-1!==c?(e=u.substr(2,c-2))&&k.frames[e]?k.frames[e].location=n(u.slice(c+1),f):k.open(n(u.slice(c+1),f),e):k.open(n(u.slice(2),f));break;case "p":u=u.replace(/p\s*\-/i,"p-");c=u.indexOf("-",2);d=u.indexOf(",",2);-1===c&&(c=1);N=n(u.slice(c+1),f);k.open(N,u.substr(2,d-2),u.substr(d+1,c-d-1)).focus();
break;case "newchart":case "newmap":":"===u.charAt(na)&&(c=u.indexOf("-",na+1),w=u.substring(na+1,c),na=c);c=u.indexOf("-",na+1);v=u.substring(na+1,c).toLowerCase();switch(v){case "xmlurl":case "jsonurl":B=u.substring(c+1,u.length);break;case "xml":case "json":var q=m=u.substring(c+1,u.length),A={chart:{}},a,q=q.toLowerCase();if(b.linkeddata)for(a=0;a<b.linkeddata.length;a+=1)b.linkeddata[a].id.toLowerCase()===q&&(A=b.linkeddata[a].linkedchart||b.linkeddata[a].linkedmap);B=A;v="json"}g.raiseEvent("linkedChartInvoked",
{alias:w,linkType:v.toUpperCase(),data:B},h);break;default:k.location.href=u}g.raiseEvent("linkClicked",{linkProvided:D,linkInvoked:u,linkAction:l&&l.toLowerCase()},h)},0))}},graphics:{parseAlpha:Bb,convertColor:zb,getDarkColor:Ma,getLightColor:hb,mapSymbolName:function(b,h){var n="circle";b=Ua(b);3<=b&&(n=(h?"spoke_":"poly_")+b);return n},getColumnColor:function(b,h,n,q,A,f,a,u,D){var c,e;c=b.split(",");e=h.split(",");f=f.split(",");a=a.split(",");b=b.replace(/\s/g,"").replace(/\,$/,"");D?u={FCcolor:{color:c[0],
alpha:e[0]}}:A?(b=c[0],e=e[0],u={FCcolor:{color:Ma(b,75)+","+hb(b,10)+","+Ma(b,90)+","+hb(b,55)+","+Ma(b,80),alpha:e+","+e+","+e+","+e+","+e,ratio:"0,11,14,57,18",angle:u?"90":"0"}},f=[Ma(b,70)]):(h=Bb(h,c.length),u={FCcolor:{color:b,alpha:h,ratio:n,angle:u?-q:q}});return[u,{FCcolor:{color:f[0],alpha:a[0]}}]},getPointColor:function(b,h){var n,q;b=Ra(b);h=Xa(h);n=hb(b,70);q=Ma(b,50);return{FCcolor:{gradientUnits:"objectBoundingBox",cx:.4,cy:.4,r:"100%",color:n+","+q,alpha:h+","+h,ratio:void 0,radialGradient:!0}}},
getAngle:function(b,h,n){b=180*Math.atan(h/b)/Math.PI;2==n?b=180-b:3==n?b+=180:4==n&&(b=360-b);return b},parseColor:Ya,getValidColor:function(b){return p.test(Ya(b))&&b},HSBtoRGB:function(b){var h=b[0],n=0,q=0,A=0,f=[],f=b[1]/100;b=b[2]/100;var a=h/60-Math.floor(h/60),u=b*(1-f),D=b*(1-a*f),f=b*(1-(1-a)*f);switch(Math.floor(h/60)%6){case 0:n=b;q=f;A=u;break;case 1:n=D;q=b;A=u;break;case 2:n=u;q=b;A=f;break;case 3:n=u;q=D;A=b;break;case 4:n=f;q=u;A=b;break;case 5:n=b,q=u,A=D}return f=[c(255*n),c(255*
q),c(255*A)]},RGBtoHSB:function(b){var h=b[0],n=b[1];b=b[2];var q=Math.max(Math.max(h,n),b),A=Math.min(Math.min(h,n),b),f=0,a=0;q==A?f=0:q==h?f=(60*(n-b)/(q-A)+360)%360:q==n?f=60*(b-h)/(q-A)+120:q==b&&(f=60*(h-n)/(q-A)+240);a=0===q?0:(q-A)/q;return[c(f),c(100*a),c(q/255*100)]},RGBtoHex:function(b){return("000000"+(b[0]<<16|b[1]<<8|b[2]).toString(16)).slice(-6)},rawRGBtoHEX:function(b){b=b.match(/[\d+]+/g).splice(0,3);return("000000"+(b[0]<<16|b[1]<<8|b[2]).toString(16)).slice(-6)},HEXtoRGB:gb,getCubePathOutline:function(b){var h=
b[2]||0,n=b[4]||0,q=b[5]||0;return["M",b[0]||0,b[1]||0,"l",n,-q,h,0,0,b[3]||0,-n,q,-h,0,"Z"]}},appliedCSS:["fontFamily","fontSize","fontWeight","fontStyle"],setImageDisplayMode:function(b,h,n,q,A,f,a,u){var D=q/100*u.width;q=q/100*u.height;u={};var c,e=f-2*A;c=a-2*A;var d=function(b,h,f,n,q,a){var u={};switch(b){case "top":u.y=A;break;case "bottom":u.y=a-n-A;break;case "middle":u.y=(a-n)/2}switch(h){case "left":u.x=A;break;case "right":u.x=q-f-A;break;case "middle":u.x=(q-f)/2}return u};switch(b){case "center":u.width=
D;u.height=q;u.y=a/2-q/2;u.x=f/2-D/2;break;case "stretch":u.width=f-2*A;u.height=a-2*A;u.y=A;u.x=A;break;case "tile":u.width=D;u.height=q;u.tileInfo={};u.tileInfo.xCount=b=Math.ceil(e/D);u.tileInfo.yCount=c=Math.ceil(c/q);h=d(h,n,D*b,q*c,f,a);u.y=h.y;u.x=h.x;break;case "fit":b=D/q>e/c?e/D:c/q;u.width=D*b;u.height=q*b;h=d(h,n,u.width,u.height,f,a);u.y=h.y;u.x=h.x;break;case "fill":b=D/q>e/c?c/q:e/D;u.width=D*b;u.height=q*b;h=d(h,n,u.width,u.height,f,a);u.y=h.y;u.x=h.x;break;default:h=d(h,n,D,q,f,a),
u.width=D,u.height=q,u.y=h.y,u.x=h.x}return u},setLineHeight:ab,parsexAxisStyles:vb,supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",textDecoration:"text-decoration","text-decoration":"text-decoration",color:"color",whiteSpace:"white-space","white-space":"white-space",padding:"padding",margin:"margin",background:"background",
backgroundColor:"background-color","background-color":"background-color",backgroundImage:"background-image","background-image":"background-image",backgroundPosition:"background-position","background-position":"background-position",backgroundPositionLeft:"background-position-left","background-position-left":"background-position-left",backgroundPositionTop:"background-position-top","background-position-top":"background-position-top",backgroundRepeat:"background-repeat","background-repeat":"background-repeat",
border:"border",borderColor:"border-color","border-color":"border-color",borderStyle:"border-style","border-style":"border-style",borderThickness:"border-thickness","border-thickness":"border-thickness",borderTop:"border-top","border-top":"border-top",borderTopColor:"border-top-color","border-top-color":"border-top-color",borderTopStyle:"border-top-style","border-top-style":"border-top-style",borderTopThickness:"border-top-thickness","border-top-thickness":"border-top-thickness",borderRight:"border-right",
"border-right":"border-right",borderRightColor:"border-right-color","border-right-color":"border-right-color",borderRightStyle:"border-right-style","border-right-style":"border-right-style",borderRightThickness:"border-right-thickness","border-right-thickness":"border-right-thickness",borderBottom:"border-bottom","border-bottom":"border-bottom",borderBottomColor:"border-bottom-color","border-bottom-color":"border-bottom-color",borderBottomStyle:"border-bottom-style","border-bottom-style":"border-bottom-style",
borderBottomThickness:"border-bottom-thickness","border-bottom-thickness":"border-bottom-thickness",borderLeft:"border-left","border-left":"border-left",borderLeftColor:"border-left-color","border-left-color":"border-left-color",borderLeftStyle:"border-left-style","border-left-Style":"border-left-style",borderLeftThickness:"border-left-thickness","border-left-thickness":"border-left-thickness"},getAxisLimits:kb,createTrendLine:qb,getDashStyle:Za,axisLabelAdder:pb,chartAPI:Ja,createDialog:xa,isCanvasElemSupported:xb,
componentDispose:mb,componentConfigurer:function(a){var h,n,q=[],A,f,u,D={};a=a||this;h=a.components;for(u in h)if(n=h[u],n instanceof Array)for(f=n.length,A=0;A<f;A+=1)q.push(n[A]);else q.push(n);q.sort(b);f=q.length;for(A=0;A<f;A+=1)n=q[A],h=n.customConfigFn,null!==h&&(h&&a[h]?D[h]||(a[h](),D[h]=!0):n.configure&&n.configure())},getSvgDataurl:ob,removeCrossDomainImages:cb,getBrowserDetails:tb,dataurlToBlob:fb,downloadCharts:function(b,h,n,q,A){h?Cb(b,h,n):yb(q,A)},browserDetails:D,drawSvgOnCanvas:function(b,
h,n,q,A,f,a){"ie"==D.name?(b=cb(b),new aa(b,h,n,q,A,f,function(){a()})):ob(b,function(b){var u,D;u=h.getContext("2d");D=new Q;D.src=b;D.onload=function(){u.drawImage(D,n,q,A,f);a()}})},priorityList:{render:1,animation:2,entitydraw:2,label:3,tracker:4}})}]);FusionCharts.register("module",["private","modules.renderer.js-schedular",function(){var g=[],k={},F=[],r={},E=0,z=this.window,G=this.hcLib.schedular={},a=z.requestAnimationFrame||z.webkitRequestAnimationFrame||z.mozRequestAnimationFrame||z.oRequestAnimationFrame||
z.msRequestAnimationFrame||function(a){setTimeout(a,16)},L=function(){for(var d,l=!1;!l;)(d=g[0])?(g.splice(0,1),--F[d.priority],0<g.length&&a(L),r[d.jobID]&&!d.executed&&(l=!0,d.scope?d.job.apply(d.scope,d.args):d.job(),d.callback&&"function"===typeof d.callback&&d.callback(),d.executed=!0,delete r[d.jobID])):l=!0};G.addJob=function(d,l,k,z,p,t){var m,c=0;p=p?z-1:z;"function"===typeof d&&(m="JOB"+ ++E+(z||1),d={job:d,scope:l,args:k,priority:z,callback:t,jobID:m});for(l=0;l<=p;l++)c+=F[l]||0;g.splice(c,
0,d);r[m]=d;F[z]=(F[z]||0)+1;1===g.length&&a(L);return m};G.removeJob=function(a){r[a]&&delete r[a]};G.pauseExecution=function(a){if(r[a])k[r[a]]=r[a],delete r[a];else return!1};G.resumeExecution=function(a){var g;if(g=k[a])G.addJob(g),delete k[a];else return!1}}]);FusionCharts&&FusionCharts.register("module",["private","vendor.redraphael",function(){var g=this.hcLib,k=this.window,F=k.Raphael,r;(function(k){(function(g,k){var a=/[\.\/]/,r=function(){},d=function(a,d){return a-d},l,E,F={n:{}},p=function(a,
g){a=String(a);var c=E,k=Array.prototype.slice.call(arguments,2),r=p.listeners(a),e=0,v,H=[],B={},z=[],I=l;l=a;for(var F=E=0,X=r.length;F<X;F++)"zIndex"in r[F]&&(H.push(r[F].zIndex),0>r[F].zIndex&&(B[r[F].zIndex]=r[F]));for(H.sort(d);0>H[e];)if(v=B[H[e++]],z.push(v.apply(g,k)),E)return E=c,z;for(F=0;F<X;F++)if(v=r[F],"zIndex"in v)if(v.zIndex==H[e]){z.push(v.apply(g,k));if(E)break;do if(e++,(v=B[H[e]])&&z.push(v.apply(g,k)),E)break;while(v)}else B[v.zIndex]=v;else if(z.push(v.apply(g,k)),E)break;E=
c;l=I;return z.length?z:null};p._events=F;p.listeners=function(d){d=d.split(a);var g=F,c,l,k,e,v,H,B,p=[g],r=[];k=0;for(e=d.length;k<e;k++){B=[];v=0;for(H=p.length;v<H;v++)for(g=p[v].n,c=[g[d[k]],g["*"]],l=2;l--;)if(g=c[l])B.push(g),r=r.concat(g.f||[]);p=B}return r};p.on=function(d,g){d=String(d);if("function"!=typeof g)return function(){};for(var c=d.split(a),l=F,k=0,e=c.length;k<e;k++)l=l.n,l=l.hasOwnProperty(c[k])&&l[c[k]]||(l[c[k]]={n:{}});l.f=l.f||[];k=0;for(e=l.f.length;k<e;k++)if(l.f[k]==g)return r;
l.f.push(g);return function(a){+a==+a&&(g.zIndex=+a)}};p.f=function(a){var d=[].slice.call(arguments,1);return function(){p.apply(null,[a,null].concat(d).concat([].slice.call(arguments,0)))}};p.stop=function(){E=1};p.nt=function(a){return a?(new RegExp("(?:\\.|\\/|^)"+a+"(?:\\.|\\/|$)")).test(l):l};p.nts=function(){return l.split(a)};p.off=p.unbind=function(d,g){if(d){var c=d.split(a),l,k,e,v,H,B,r=[F];v=0;for(H=c.length;v<H;v++)for(B=0;B<r.length;B+=e.length-2){e=[B,1];l=r[B].n;if("*"!=c[v])l[c[v]]&&
e.push(l[c[v]]);else for(k in l)l.hasOwnProperty(k)&&e.push(l[k]);r.splice.apply(r,e)}v=0;for(H=r.length;v<H;v++)for(l=r[v];l.n;){if(g){if(l.f){B=0;for(c=l.f.length;B<c;B++)if(l.f[B]==g){l.f.splice(B,1);break}!l.f.length&&delete l.f}for(k in l.n)if(l.n.hasOwnProperty(k)&&l.n[k].f){e=l.n[k].f;B=0;for(c=e.length;B<c;B++)if(e[B]==g){e.splice(B,1);break}!e.length&&delete l.n[k].f}}else for(k in delete l.f,l.n)l.n.hasOwnProperty(k)&&l.n[k].f&&delete l.n[k].f;l=l.n}}else p._events=F={n:{}}};p.once=function(a,
d){var c=function(){p.unbind(a,c);return d.apply(this,arguments)};return p.on(a,c)};p.version="0.4.2";p.toString=function(){return"You are running Eve 0.4.2"};"undefined"!=typeof module&&module.exports?module.exports=p:k||"undefined"==typeof define?g.eve=p:define("eve",[],function(){return p})})(this,!0);"undefined"===typeof k&&"object"===typeof window&&(k=window);(function(g,k,a){!a&&"function"===typeof define&&define.amd?define(["eve"],function(a){return k(g,a)}):k(g,"object"===typeof module&&"undefined"!==
typeof module.exports?module.exports:g.eve)})(k,function(g,F){function a(b){var h,f;void 0===a._url&&(a._url="");if(a.is(b,"function"))return e?b():F.on("raphael.DOMload",b);if(a.is(b,B))return a._engine.create[v](a,b.splice(0,3+a.is(b[0],H))).add(b);h=Array.prototype.slice.call(arguments,0);return a.is(h[h.length-1],"function")?(f=h.pop(),e?f.call(a._engine.create[v](a,h)):F.on("raphael.DOMload",function(){f.call(a._engine.create[v](a,h))})):a._engine.create[v](a,arguments)}function L(){return this.hex}
function d(b,h){for(var f=[],n=0,q=b.length;q-2*!h>n;n+=2){var A=[{x:+b[n-2],y:+b[n-1]},{x:+b[n],y:+b[n+1]},{x:+b[n+2],y:+b[n+3]},{x:+b[n+4],y:+b[n+5]}];h?n?q-4==n?A[3]={x:+b[0],y:+b[1]}:q-2==n&&(A[2]={x:+b[0],y:+b[1]},A[3]={x:+b[2],y:+b[3]}):A[0]={x:+b[q-2],y:+b[q-1]}:q-4==n?A[3]=A[2]:n||(A[0]={x:+b[n],y:+b[n+1]});f.push(["C",(-A[0].x+6*A[1].x+A[2].x)/6,(-A[0].y+6*A[1].y+A[2].y)/6,(A[1].x+6*A[2].x-A[3].x)/6,(A[1].y+6*A[2].y-A[3].y)/6,A[2].x,A[2].y])}return f}function l(b,h,f,n,q,A,a,u,D){null==D&&
(D=1);D=(1<D?1:0>D?0:D)/2;for(var K=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],ea=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],c=0,Y=0;12>Y;Y++)var e=D*K[Y]+D,ka=e*(e*(-3*b+9*f-9*q+3*a)+6*b-12*f+6*q)-3*b+3*f,e=e*(e*(-3*h+9*n-9*A+3*u)+6*h-12*n+6*A)-3*h+3*n,c=c+ea[Y]*Ha(ka*ka+e*e);return D*c}function P(b,h,f,n,q,A,a,u,D){if(!(0>D||l(b,h,f,n,q,A,a,u)<D)){var K=.5,ea=1-K,c;for(c=l(b,h,f,n,q,A,a,u,ea);.01<Ra(c-D);)K/=2,ea+=(c<D?1:-1)*K,
c=l(b,h,f,n,q,A,a,u,ea);return ea}}function W(b,h,f){b=a._path2curve(b);h=a._path2curve(h);for(var n,q,A,u,D,K,ea,c,Y,e,ka=f?0:[],Da=0,d=b.length;Da<d;Da++)if(Y=b[Da],"M"==Y[0])n=D=Y[1],q=K=Y[2];else{"C"==Y[0]?(Y=[n,q].concat(Y.slice(1)),n=Y[6],q=Y[7]):(Y=[n,q,n,q,D,K,D,K],n=D,q=K);for(var ra=0,g=h.length;ra<g;ra++)if(e=h[ra],"M"==e[0])A=ea=e[1],u=c=e[2];else{"C"==e[0]?(e=[A,u].concat(e.slice(1)),A=e[6],u=e[7]):(e=[A,u,A,u,ea,c,ea,c],A=ea,u=c);var ca;var N=Y,ua=e;ca=f;var db=a.bezierBBox(N),v=a.bezierBBox(ua);
if(a.isBBoxIntersect(db,v)){for(var db=l.apply(0,N),v=l.apply(0,ua),db=Ua(~~(db/5),1),v=Ua(~~(v/5),1),B=[],k=[],m={},Wa=ca?0:[],na=0;na<db+1;na++){var Gb=a.findDotsAtSegment.apply(a,N.concat(na/db));B.push({x:Gb.x,y:Gb.y,t:na/db})}for(na=0;na<v+1;na++)Gb=a.findDotsAtSegment.apply(a,ua.concat(na/v)),k.push({x:Gb.x,y:Gb.y,t:na/v});for(na=0;na<db;na++)for(N=0;N<v;N++){var w=B[na],Ea=B[na+1],ua=k[N],Gb=k[N+1],Sb=.001>Ra(Ea.x-w.x)?"y":"x",wb=.001>Ra(Gb.x-ua.x)?"y":"x",S;S=w.x;var t=w.y,Ab=Ea.x,C=Ea.y,
Kb=ua.x,p=ua.y,H=Gb.x,r=Gb.y;if(Ua(S,Ab)<Pa(Kb,H)||Pa(S,Ab)>Ua(Kb,H)||Ua(t,C)<Pa(p,r)||Pa(t,C)>Ua(p,r))S=void 0;else{var ta=(S*C-t*Ab)*(Kb-H)-(S-Ab)*(Kb*r-p*H),R=(S*C-t*Ab)*(p-r)-(t-C)*(Kb*r-p*H),O=(S-Ab)*(p-r)-(t-C)*(Kb-H);if(O){var ta=ta/O,R=R/O,O=+ta.toFixed(2),I=+R.toFixed(2);S=O<+Pa(S,Ab).toFixed(2)||O>+Ua(S,Ab).toFixed(2)||O<+Pa(Kb,H).toFixed(2)||O>+Ua(Kb,H).toFixed(2)||I<+Pa(t,C).toFixed(2)||I>+Ua(t,C).toFixed(2)||I<+Pa(p,r).toFixed(2)||I>+Ua(p,r).toFixed(2)?void 0:{x:ta,y:R}}else S=void 0}S&&
m[S.x.toFixed(4)]!=S.y.toFixed(4)&&(m[S.x.toFixed(4)]=S.y.toFixed(4),w=w.t+Ra((S[Sb]-w[Sb])/(Ea[Sb]-w[Sb]))*(Ea.t-w.t),ua=ua.t+Ra((S[wb]-ua[wb])/(Gb[wb]-ua[wb]))*(Gb.t-ua.t),0<=w&&1.001>=w&&0<=ua&&1.001>=ua&&(ca?Wa++:Wa.push({x:S.x,y:S.y,t1:Pa(w,1),t2:Pa(ua,1)})))}ca=Wa}else ca=ca?0:[];if(f)ka+=ca;else{db=0;for(v=ca.length;db<v;db++)ca[db].segment1=Da,ca[db].segment2=ra,ca[db].bez1=Y,ca[db].bez2=e;ka=ka.concat(ca)}}}return ka}function p(b,h,f,n,q,A){null!=b?(this.a=+b,this.b=+h,this.c=+f,this.d=+n,
this.e=+q,this.f=+A):(this.a=1,this.c=this.b=0,this.d=1,this.f=this.e=0)}function t(){return this.x+" "+this.y+" "+this.width+" × "+this.height}function m(b,h,f,n,q,A){function a(b,h){var f,n,q,A;q=b;for(n=0;8>n;n++){A=((K*q+D)*q+u)*q-b;if(Ra(A)<h)return q;f=(3*K*q+2*D)*q+u;if(1E-6>Ra(f))break;q-=A/f}f=0;n=1;q=b;if(q<f)return f;if(q>n)return n;for(;f<n;){A=((K*q+D)*q+u)*q;if(Ra(A-b)<h)break;b>A?f=q:n=q;q=(n-f)/2+f}return q}var u=3*h,D=3*(n-h)-u,K=1-u-D,ea=3*f,c=3*(q-f)-ea,Y=1-ea-c;return function(b,
h){var f=a(b,h);return((Y*f+c)*f+ea)*f}(b,1/(200*A))}function c(b,h){var f=[],n={};this.ms=h;this.times=1;if(b){for(var q in b)b.hasOwnProperty(q)&&(n[za(q)]=b[q],f.push(za(q)));f.sort(Za)}this.anim=n;this.top=f[f.length-1];this.percents=f}function w(b,h,f,n,q,A,u){f=za(f);var D,K,ea,c,Y,e,ka,Da=b.ms,d={},ra={},g={};if(n)for(ca=0,N=ma.length;ca<N;ca++){if(e=ma[ca],e.el.id==h.id&&e.anim==b){e.percent!=f?(delete e.el.e,delete e.el,ma.splice(ca,1),ea=1):K=e;h.attr(e.totalOrigin);break}}else n=+ra;for(var ca=
0,N=b.percents.length;ca<N;ca++)if(b.percents[ca]==f||b.percents[ca]>n*b.top){f=b.percents[ca];Y=b.percents[ca-1]||0;Da=Da/b.top*(f-Y);c=b.percents[ca+1];D=b.anim[f];break}else n&&h.attr(b.anim[b.percents[ca]]);if(D){if(K)K.initstatus=n,K.start=new Date-K.ms*n;else{for(var ua in D)if(D.hasOwnProperty(ua))if(bb.hasOwnProperty(ua)||h.ca[ua]){d[ua]=h.attr(ua);null==d[ua]&&(d[ua]=xa[ua]);ra[ua]=D[ua];e=!1;switch(bb[ua]){case H:((ka=ra[ua]-d[ua])||isNaN(ka))&&(e=!0);g[ua]=ka/Da;break;case "colour":d[ua]=
a.getRGB(d[ua]);ca=a.getRGB(ra[ua]);ka={};ka.r=ca.r-d[ua].r;ka.g=ca.g-d[ua].g;ka.b=ca.b-d[ua].b;(ka.r||ka.g||ka.b)&&(e=!0);g[ua]={r:ka.r/Da,g:ka.g/Da,b:ka.b/Da};break;case "path":var l;if((d[ua].join?d[ua].join():d[ua])===(ra[ua].join?ra[ua].join():ra[ua])){e=!1;break}ka=Wa(d[ua],ra[ua]);l=ka[1];e=!0;d[ua]=ka[0];g[ua]=[];ca=0;for(N=d[ua].length;ca<N;ca++){g[ua][ca]=[0];for(var db=1,v=d[ua][ca].length;db<v;db++)ka=l[ca][db]-d[ua][ca][db],g[ua][ca][db]=ka/Da}break;case "transform":ka=h._;ca=S(ka[ua],
ra[ua]);e=!0;if(ca)for(d[ua]=ca.from,ra[ua]=ca.to,g[ua]=[],g[ua].real=!0,ca=0,N=d[ua].length;ca<N;ca++)for(g[ua][ca]=[d[ua][ca][0]],db=1,v=d[ua][ca].length;db<v;db++)g[ua][ca][db]=(ra[ua][ca][db]-d[ua][ca][db])/Da;else ca=h.matrix||new p,ka={_:{transform:ka.transform},getBBox:function(){return h.getBBox(1)}},d[ua]=[ca.a,ca.b,ca.c,ca.d,ca.e,ca.f],Ab(ka,ra[ua]),ra[ua]=ka._.transform,g[ua]=[(ka.matrix.a-ca.a)/Da,(ka.matrix.b-ca.b)/Da,(ka.matrix.c-ca.c)/Da,(ka.matrix.d-ca.d)/Da,(ka.matrix.e-ca.e)/Da,
(ka.matrix.f-ca.f)/Da];break;case "csv":N=Ea(D[ua]).split(zb);l=Ea(d[ua]).split(zb);if("clip-rect"==ua)for(d[ua]=l,g[ua]=[],ca=l.length;ca--;)((ka=N[ca]-d[ua][ca])||isNaN(ka))&&(e=!0),g[ua][ca]=ka/Da;ra[ua]=N;break;default:for(N=[].concat(D[ua]),l=[].concat(d[ua]),g[ua]=[],ca=h.ca[ua].length;ca--;)((ka=(N[ca]||0)-(l[ca]||0))||isNaN(ka))&&(e=!0),g[ua][ca]=ka/Da}e||(delete d[ua],delete ra[ua],delete D[ua],delete g[ua])}else if(a._availableAttrs.hasOwnProperty(ua)||"text"===ua||h.ca[ua])h.attr(ua,D[ua]),
delete D[ua];e=D.easing;ua=a.easing_formulas[e];if(!ua)if((ua=Ea(e).match(Ya))&&5==ua.length){var B=ua;ua=function(b){return m(b,+B[1],+B[2],+B[3],+B[4],Da)}}else ua=Ja;e=D.start||b.start||+new Date;h.e=e={anim:b,percent:f,timestamp:e,start:e+(b.del||0),status:0,initstatus:n||0,stop:!1,ms:Da,easing:ua,from:d,diff:g,to:ra,el:h,callback:D.callback,prev:Y,next:c,repeat:A||b.times,origin:h.attr(),totalOrigin:q,parentEl:u};ma.push(e);if(n&&!K&&!ea&&(e.stop=!0,e.start=new Date-Da*n,1==ma.length))return gc();
ea&&(e.start=new Date-e.ms*n);1==ma.length&&(Lb||ic())(gc)}!1!==a.stopEvent&&F("raphael.anim.start."+h.id,h,b)}}function J(b){for(var h=0;h<ma.length;h++)ma[h].el.paper==b&&ma.splice(h--,1)}a.upgrade="1.0.0";a.version="2.1.0";a.eve=F;r=a;var e,v="apply",H="number",B="array",Q=Array.prototype.slice,I=Array.prototype.splice,ha=Array.prototype.shift,X=function(){return function(){}.hasOwnProperty("prototype")}(),T={doc:g.document,win:g},aa=Object.prototype.hasOwnProperty.call(T.win,"Raphael"),oa=T.win.Raphael,
M=T.doc,la=T.win,C=a.supportsTouch="createTouch"in M,Ga=a.supportsOnlyTouch=C&&!(la.navigator.maxTouchPoints||la.navigator.msMaxTouchPoints),Ba=function(){};a.ca=a.customAttributes=Ba.prototype;var ja=function(){this.ca=this.customAttributes=new Ba;this._CustomAttributes=function(){};this._CustomAttributes.prototype=this.ca;this._elementsById={};this.id=a._oid++;F("raphael.new",this)},ba=a.fn=ja.prototype=a.prototype,ta={circle:1,rect:1,path:1,ellipse:1,text:1,image:1,group:1},N="click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel dragstart dragmove dragend".split(" "),
na=a._touchMap={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},Va=a._dragEventMap={dragstart:"mousedown",dragmove:"mousemove",dragend:"mouseup"},Ea=String,za=la.parseFloat,Ka=la.parseInt,Ia=Math,Ua=Ia.max,Pa=Ia.min,Ra=Ia.abs,Xa=Ia.pow,Ta=Ia.cos,fa=Ia.sin,Ha=Ia.sqrt,Fa=Ia.round,Oa=Ia.PI,wa=Oa/180,jb=180/Oa,lb=Ea.prototype.toLowerCase,Eb=Ea.prototype.toUpperCase,Bb=Object.prototype.toString,zb=/[, ]+/,Tb=/\{(\d+)\}/g;a._ISURL=/^url\(['"]?([^\)]+?)['"]?\)$/i;var rb=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,
Ya=/^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,Ma=/[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/,hb=/,?([achlmqrstvxz]),?/gi,gb=/([achlmrqstvz])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/ig,
ab=/([rstm])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/ig,vb=/(-?\d*\.?\d*(?:e[\-+]?\d+)?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/ig;
a._radial_gradient=/^x?r(?:\(([^\)]*?)\))?/;var pb={NaN:1,Infinity:1,"-Infinity":1},kb={hs:1,rg:1},xa=a._availableAttrs={"arrow-end":"none","arrow-start":"none",blur:0,"clip-rect":"0 0 1e9 1e9","clip-path":"",cursor:"default",cx:0,cy:0,fill:"#fff","fill-opacity":1,font:'10px "Arial"',"font-family":'"Arial"',"font-size":"10","font-style":"normal","font-weight":400,gradient:0,height:0,href:"about:blank","letter-spacing":0,"line-height":12,"vertical-align":"middle",opacity:1,path:"M0,0",r:0,rx:0,ry:0,
src:"",stroke:"#000","stroke-dasharray":"","stroke-linecap":"butt","stroke-linejoin":"butt","stroke-miterlimit":0,"stroke-opacity":1,"stroke-width":1,target:"_blank","text-anchor":"middle",visibility:"",title:"",transform:"",rotation:0,width:0,x:0,y:0},bb=a._availableAnimAttrs={blur:H,"clip-rect":"csv","clip-path":"path",cx:H,cy:H,fill:"colour","fill-opacity":H,"font-size":H,height:H,opacity:H,path:"path",r:H,rx:H,ry:H,stroke:"colour","stroke-opacity":H,"stroke-width":H,transform:"transform",width:H,
x:H,y:H},qb={},Za=function(b,h){return za(b)-za(h)},Na=function(){},Ja=function(b){return b},Sa=a._rectPath=function(b,h,f,n,q){return q?[["M",b+q,h],["l",f-2*q,0],["a",q,q,0,0,1,q,q],["l",0,n-2*q],["a",q,q,0,0,1,-q,q],["l",2*q-f,0],["a",q,q,0,0,1,-q,-q],["l",0,2*q-n],["a",q,q,0,0,1,q,-q],["z"]]:[["M",b,h],["l",f,0],["l",0,n],["l",-f,0],["z"]]},xb=function(b,h,f,n){null==n&&(n=f);return[["M",b,h],["m",0,-n],["a",f,n,0,1,1,0,2*n],["a",f,n,0,1,1,0,-2*n],["z"]]},fb=a._getPath={group:function(){return!1},
path:function(b){return b.attr("path")},circle:function(b){b=b.attrs;return xb(b.cx,b.cy,b.r)},ellipse:function(b){b=b.attrs;return xb(b.cx,b.cy,b.rx,b.ry)},rect:function(b){b=b.attrs;return Sa(b.x,b.y,b.width,b.height,b.r)},image:function(b){b=b.attrs;return Sa(b.x,b.y,b.width,b.height)},text:function(b){b=b._getBBox();return Sa(b.x,b.y,b.width,b.height)}},tb=a.mapPath=function(b,h){if(!h)return b;var f,n,q,A,a,u,D;b=Wa(b);q=0;for(a=b.length;q<a;q++)for(D=b[q],A=1,u=D.length;A<u;A+=2)f=h.x(D[A],
D[A+1]),n=h.y(D[A],D[A+1]),D[A]=f,D[A+1]=n;return b};a.pick=function(){for(var b,h=0,f=arguments.length;h<f;h+=1)if((b=arguments[h])||!1===b||0===b)return b};var cb=a._lastArgIfGroup=function(b,h){var f=b.length-1,n=b[f];if(n&&n.constructor===a.el.constructor&&"group"===n.type)return h&&(b[f]=void 0,delete b[f],I.call(b,f,1)),n},Cb=a._serializeArgs=function(b){var h=b[0],f,n;if(a.is(h,"object")&&!a.is(h,"array")&&"group"!==h.type)for(f=h,h.path&&(h=h.path)&&!a.is(h,"string")&&a.is(h[0],B),h=1,n=arguments.length;h<
n;h+=2)f[arguments[h]]||(f[arguments[h]]=arguments[h+1]);else for(f={},h=1,n=arguments.length;h<n;h+=2)f[arguments[h]]=b[(h-1)/2]||arguments[h+1];return f},yb=a.merge=function(b,h,f,n,q){var A,a,u,D;q?(n.push(b),q.push(h)):(n=[b],q=[h]);if(h instanceof Array)for(A=0;A<h.length;A+=1){try{a=b[A],u=h[A]}catch(K){continue}if("object"!==typeof u)f&&void 0===u||(b[A]=u);else{if(null===a||"object"!==typeof a)a=b[A]=u instanceof Array?[]:{};D=checkCyclicRef(u,q);-1!==D?a=b[A]=n[D]:yb(a,u,f,n,q)}}else for(A in h){try{a=
b[A],u=h[A]}catch(K){continue}if(null!==u&&"object"===typeof u)if(D=Bb.call(u),"[object Object]"===D){if(null===a||"object"!==typeof a)a=b[A]={};D=checkCyclicRef(u,q);-1!==D?a=b[A]=n[D]:yb(a,u,f,n,q)}else"[object Array]"===D?(null!==a&&a instanceof Array||(a=b[A]=[]),D=checkCyclicRef(u,q),-1!==D?a=b[A]=n[D]:yb(a,u,f,n,q)):b[A]=u;else b[A]=u}return b};a.extend=function(b,h,f){if("object"!==typeof b&&"object"!==typeof h)return null;if("object"!==typeof h||null===h)return b;"object"!==typeof b&&(b=h instanceof
Array?[]:{});yb(b,h,f);return b};var ib=a.is=function(b,h){h=lb.call(h);return"finite"==h?!pb.hasOwnProperty(+b):h==B?b instanceof Array:"object"!==h||void 0!==b&&null!==b?"null"==h&&null===b||h==typeof b&&null!==b||"object"==h&&b===Object(b)||"array"==h&&Array.isArray&&Array.isArray(b)||Bb.call(b).slice(8,-1).toLowerCase()==h:!1};a.createUUID=function(b,h){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(b,h).toUpperCase()}}(/[xy]/g,function(b){var h=16*Ia.random()|0;return("x"==
b?h:h&3|8).toString(16)});a.getElementID=function(b){return"rr-"+b};var ob=a.clone=X?function(b){if(Object(b)!==b)return b;var h=new b.constructor,f;for(f in b)"prototype"!==f&&b.hasOwnProperty(f)&&(h[f]=ob(b[f]));return h}:function(b){if(Object(b)!==b)return b;var h=new b.constructor,f;for(f in b)b.hasOwnProperty(f)&&(h[f]=ob(b[f]));return h};a._g=T;a.type=la.ENABLE_RED_CANVAS&&(la.CanvasRenderingContext2D||M.createElement("canvas").getContext)?"CANVAS":la.SVGAngle||M.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure",
"1.1")?"SVG":"VML";if("VML"==a.type){var mb=M.createElement("div"),b;mb.innerHTML='<v:shape adj="1"/>';b=mb.firstChild;b.style.behavior="url(#default#VML)";if(!b||"object"!=typeof b.adj)return a.type="";mb=null}a.svg=!((a.vml="VML"==a.type)||(a.canvas="CANVAS"==a.type));a._Paper=ja;a._id=0;a._oid=0;a.angle=function(b,h,f,n,q,A){return null==q?(b-=f,h-=n,b||h?(Ia.atan2(-h,-b)*jb+540)%360:0):a.angle(b,h,q,A)-a.angle(f,n,q,A)};a.rad=function(b){return b%360*wa};a.deg=function(b){return b*jb%360};a.snapTo=
function(b,h,f){var n;ib(f,"finite")||(f=10);if(ib(b,B))for(n=b.length;n--;){if(Ra(b[n]-h)<=f)return b[n]}else{b=+b;n=h%b;if(n<f)return h-n;if(n>b-f)return h-n+b}return h};a.setWindow=function(b){F("raphael.setWindow",a,T.win,b);la=T.win=b;M=T.doc=T.win.document;a._engine.initWin&&a._engine.initWin(T.win)};var u=function(b){if(a.vml){var h=/^\s+|\s+$/g,f;try{var n=new ActiveXObject("htmlfile");n.write("<body>");n.close();f=n.body}catch(q){f=createPopup().document.body}var D=f.createTextRange();u=
A(function(b){try{f.style.color=Ea(b).replace(h,"");var n=D.queryCommandValue("ForeColor");return"#"+("000000"+((n&255)<<16|n&65280|(n&16711680)>>>16).toString(16)).slice(-6)}catch(q){return"none"}})}else{var K=T.doc.createElement("i");K.title="Raphaël Colour Picker";K.style.display="none";T.doc.body.appendChild(K);u=A(function(b){K.style.color=b;return T.doc.defaultView.getComputedStyle(K,"").getPropertyValue("color")})}return u(b)},D=function(){return"hsb("+[this.h,this.s,this.b]+")"},K=function(){return"hsl("+
[this.h,this.s,this.l]+")"},h=function(){return this.hex},n=function(b,h,f){null==h&&ib(b,"object")&&"r"in b&&"g"in b&&"b"in b&&(f=b.b,h=b.g,b=b.r);null==h&&ib(b,"string")&&(f=a.getRGB(b),b=f.r,h=f.g,f=f.b);if(1<b||1<h||1<f)b/=255,h/=255,f/=255;return[b,h,f]},q=function(b,f,n,q){var A={r:b*=255,g:f*=255,b:n*=255,hex:a.rgb(b,f,n),toString:h};ib(q,"finite")&&(A.opacity=q);return A};a.color=function(b){var f;a.is(b,"object")&&"h"in b&&"s"in b&&"b"in b?(f=a.hsb2rgb(b),b.r=f.r,b.g=f.g,b.b=f.b,b.hex=f.hex):
a.is(b,"object")&&"h"in b&&"s"in b&&"l"in b?(f=a.hsl2rgb(b),b.r=f.r,b.g=f.g,b.b=f.b,b.hex=f.hex):(a.is(b,"string")&&(b=a.getRGB(b)),a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b?(f=a.rgb2hsl(b),b.h=f.h,b.s=f.s,b.l=f.l,f=a.rgb2hsb(b),b.v=f.b):(b={hex:"none"},b.r=b.g=b.b=b.h=b.s=b.v=b.l=-1));b.toString=h;return b};a.hsb2rgb=function(b,h,f,n){this.is(b,"object")&&"h"in b&&"s"in b&&"b"in b&&(f=b.b,h=b.s,b=b.h,n=b.o);var A,a,u;b=360*b%360/60;u=f*h;h=u*(1-Ra(b%2-1));f=A=a=f-u;b=~~b;f+=[u,h,0,0,h,u][b];A+=
[h,u,u,h,0,0][b];a+=[0,0,h,u,u,h][b];return q(f,A,a,n)};a.hsl2rgb=function(b,h,f,n){this.is(b,"object")&&"h"in b&&"s"in b&&"l"in b&&(f=b.l,h=b.s,b=b.h);if(1<b||1<h||1<f)b/=360,h/=100,f/=100;var A,a,u;b=360*b%360/60;u=2*h*(.5>f?f:1-f);h=u*(1-Ra(b%2-1));f=A=a=f-u/2;b=~~b;f+=[u,h,0,0,h,u][b];A+=[h,u,u,h,0,0][b];a+=[0,0,h,u,u,h][b];return q(f,A,a,n)};a.rgb2hsb=function(b,h,f){f=n(b,h,f);b=f[0];h=f[1];f=f[2];var q,A;q=Ua(b,h,f);A=q-Pa(b,h,f);b=((0==A?null:q==b?(h-f)/A:q==h?(f-b)/A+2:(b-h)/A+4)+360)%6*
60/360;return{h:b,s:0==A?0:A/q,b:q,toString:D}};a.rgb2hsl=function(b,h,f){f=n(b,h,f);b=f[0];h=f[1];f=f[2];var q,A,a;q=Ua(b,h,f);A=Pa(b,h,f);a=q-A;b=((0==a?null:q==b?(h-f)/a:q==h?(f-b)/a+2:(b-h)/a+4)+360)%6*60/360;q=(q+A)/2;return{h:b,s:0==a?0:.5>q?a/(2*q):a/(2-2*q),l:q,toString:K}};a._path2string=function(){return this.join(",").replace(hb,"$1")};var A=a._cacher=function(b,h,f){function n(){var q=Q.call(arguments,0),A=q.join("␀"),a=n.cache=n.cache||{},u=n.count=n.count||[];if(a.hasOwnProperty(A)){a:for(var q=
u,u=A,D=0,K=q.length;D<K;D++)if(q[D]===u){q.push(q.splice(D,1)[0]);break a}return f?f(a[A]):a[A]}1E3<=u.length&&delete a[u.shift()];u.push(A);a[A]=b[v](h,q);return f?f(a[A]):a[A]}return n};a._preload=function(b,h){var f=M.createElement("img");f.style.cssText="position:absolute;left:-9999em;top:-9999em";f.onload=function(){h.call(this);this.onload=null;M.body.removeChild(this)};f.onerror=function(){M.body.removeChild(this)};M.body.appendChild(f);f.src=b};a.getRGB=A(function(b){var h,f,n,q,A;b&&ib(b,
"object")&&"opacity"in b&&(h=b.opacity);if(!b||(b=Ea(b)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:L};if("none"==b)return{r:-1,g:-1,b:-1,hex:"none",toString:L};!kb.hasOwnProperty(b.toLowerCase().substring(0,2))&&"#"!==b.charAt()&&(b=u(b));if(b=b.match(rb)){b[2]&&(q=Ka(b[2].substring(5),16),n=Ka(b[2].substring(3,5),16),f=Ka(b[2].substring(1,3),16));b[3]&&(q=Ka((A=b[3].charAt(3))+A,16),n=Ka((A=b[3].charAt(2))+A,16),f=Ka((A=b[3].charAt(1))+A,16));b[4]&&(A=b[4].split(Ma),f=za(A[0]),
"%"==A[0].slice(-1)&&(f*=2.55),n=za(A[1]),"%"==A[1].slice(-1)&&(n*=2.55),q=za(A[2]),"%"==A[2].slice(-1)&&(q*=2.55),"rgba"==b[1].toLowerCase().slice(0,4)&&(h=za(A[3])),A[3]&&"%"==A[3].slice(-1)&&(h/=100));if(b[5])return A=b[5].split(Ma),f=za(A[0]),"%"==A[0].slice(-1)&&(f*=2.55),n=za(A[1]),"%"==A[1].slice(-1)&&(n*=2.55),q=za(A[2]),"%"==A[2].slice(-1)&&(q*=2.55),"deg"!=A[0].slice(-3)&&"°"!=A[0].slice(-1)||(f/=360),"hsba"==b[1].toLowerCase().slice(0,4)&&(h=za(A[3])),A[3]&&"%"==A[3].slice(-1)&&(h/=100),
a.hsb2rgb(f,n,q,h);if(b[6])return A=b[6].split(Ma),f=za(A[0]),"%"==A[0].slice(-1)&&(f*=2.55),n=za(A[1]),"%"==A[1].slice(-1)&&(n*=2.55),q=za(A[2]),"%"==A[2].slice(-1)&&(q*=2.55),"deg"!=A[0].slice(-3)&&"°"!=A[0].slice(-1)||(f/=360),"hsla"==b[1].toLowerCase().slice(0,4)&&(h=za(A[3])),A[3]&&"%"==A[3].slice(-1)&&(h/=100),a.hsl2rgb(f,n,q,h);b={r:f,g:n,b:q,toString:L};b.hex="#"+(16777216|q|n<<8|f<<16).toString(16).slice(1);a.is(h,"finite")&&(b.opacity=h);return b}return{r:-1,g:-1,b:-1,hex:"none",error:1,
toString:L}},a);a.tintshade=A(function(b,h){var f=a.getRGB(b),n;n=255;0>h&&(h*=-1,n=0);1<h&&(h=1);n=0===h?f:{r:n-(n-f.r)*h,g:n-(n-f.g)*h,b:n-(n-f.b)*h,toString:L};n.hex=a.rgb(n.r,n.g,n.b);f.error&&(n.error=f.error);"opacity"in f?(n.rgba="rgba("+[n.r,n.g,n.b,f.opacity].join()+")",n.opacity=f.opacity):n.rgba="rgb("+[n.r,n.g,n.b].join()+")";return n},a);a.hsb=A(function(b,h,f){return a.hsb2rgb(b,h,f).hex});a.hsl=A(function(b,h,f){return a.hsl2rgb(b,h,f).hex});a.rgb=A(function(b,h,f){return"#"+(16777216|
f|h<<8|b<<16).toString(16).slice(1)});a.getColor=function(b){b=this.getColor.start=this.getColor.start||{h:0,s:1,b:b||.75};var h=this.hsb2rgb(b.h,b.s,b.b);b.h+=.075;1<b.h&&(b.h=0,b.s-=.2,0>=b.s&&(this.getColor.start={h:0,s:1,b:b.b}));return h.hex};a.getColor.reset=function(){delete this.start};a.parsePathString=function(b){if(!b)return null;var h=f(b);if(h.arr)return ka(h.arr);var n={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},q=[];a.is(b,B)&&a.is(b[0],B)&&(q=ka(b));q.length||Ea(b).replace(gb,function(b,
h,f){var A=[];b=h.toLowerCase();f.replace(vb,function(b,h){h&&A.push(+h)});"m"==b&&2<A.length&&(q.push([h].concat(A.splice(0,2))),b="l",h="m"==h?"l":"L");if("r"==b)q.push([h].concat(A));else for(;A.length>=n[b]&&(q.push([h].concat(A.splice(0,n[b]))),n[b]););});q.toString=a._path2string;h.arr=ka(q);return q};a.parseTransformString=A(function(b){if(!b)return null;var h=[];a.is(b,B)&&a.is(b[0],B)&&(h=ka(b));h.length||Ea(b).replace(ab,function(b,f,n){var q=[];lb.call(f);n.replace(vb,function(b,h){h&&
q.push(+h)});h.push([f].concat(q))});h.toString=a._path2string;return h});var f=function(b){var h=f.ps=f.ps||{};h[b]?h[b].sleep=100:h[b]={sleep:100};setTimeout(function(){for(var f in h)h.hasOwnProperty(f)&&f!=b&&(h[f].sleep--,!h[f].sleep&&delete h[f])});return h[b]};a.findDotsAtSegment=function(b,h,f,n,q,A,a,u,D){var K=1-D,ea=Xa(K,3),c=Xa(K,2),Y=D*D,e=Y*D,ka=ea*b+3*c*D*f+3*K*D*D*q+e*a,ea=ea*h+3*c*D*n+3*K*D*D*A+e*u,c=b+2*D*(f-b)+Y*(q-2*f+b),e=h+2*D*(n-h)+Y*(A-2*n+h),d=f+2*D*(q-f)+Y*(a-2*q+f),Y=n+
2*D*(A-n)+Y*(u-2*A+n);b=K*b+D*f;h=K*h+D*n;q=K*q+D*a;A=K*A+D*u;u=90-180*Ia.atan2(c-d,e-Y)/Oa;(c>d||e<Y)&&(u+=180);return{x:ka,y:ea,m:{x:c,y:e},n:{x:d,y:Y},start:{x:b,y:h},end:{x:q,y:A},alpha:u}};a.bezierBBox=function(b,h,f,n,q,A,u,D){a.is(b,"array")||(b=[b,h,f,n,q,A,u,D]);b=Sb.apply(null,b);return{x:b.min.x,y:b.min.y,x2:b.max.x,y2:b.max.y,width:b.max.x-b.min.x,height:b.max.y-b.min.y}};a.isPointInsideBBox=function(b,h,f){return h>=b.x&&h<=b.x2&&f>=b.y&&f<=b.y2};a.isBBoxIntersect=function(b,h){var f=
a.isPointInsideBBox;return f(h,b.x,b.y)||f(h,b.x2,b.y)||f(h,b.x,b.y2)||f(h,b.x2,b.y2)||f(b,h.x,h.y)||f(b,h.x2,h.y)||f(b,h.x,h.y2)||f(b,h.x2,h.y2)||(b.x<h.x2&&b.x>h.x||h.x<b.x2&&h.x>b.x)&&(b.y<h.y2&&b.y>h.y||h.y<b.y2&&h.y>b.y)};a.pathIntersection=function(b,h){return W(b,h)};a.pathIntersectionNumber=function(b,h){return W(b,h,1)};a.isPointInsidePath=function(b,h,f){var n=a.pathBBox(b);return a.isPointInsideBBox(n,h,f)&&(1==W(b,[["M",h,f],["H",n.x2+10]],1)%2||1==W(b,[["M",h,f],["V",n.y2+10]],1)%2)};
a._removedFactory=function(b){return function(){F("raphael.log",null,"Raphaël: you are calling to method “"+b+"” of removed object",b)}};var ea=a.pathBBox=function(b){var h=f(b);if(!b)return{x:0,y:0,width:0,height:0,x2:0,y2:0};b=Wa(b);for(var n=0,q=0,A=[],a=[],u,D=0,K=b.length;D<K;D++)u=b[D],"M"==u[0]?(n=u[1],q=u[2],A.push(n),a.push(q)):(n=Sb(n,q,u[1],u[2],u[3],u[4],u[5],u[6]),A=A.concat(n.min.x,n.max.x),a=a.concat(n.min.y,n.max.y),n=u[5],q=u[6]);b=Pa[v](0,A);u=Pa[v](0,a);A=Ua[v](0,A);a=Ua[v](0,a);
a={x:b,y:u,x2:A,y2:a,width:A-b,height:a-u};h.bbox=ob(a);return a},ka=function(b){b=ob(b);b.toString=a._path2string;return b},Y=a._pathToRelative=function(b){var h=f(b);if(h.rel)return ka(h.rel);a.is(b,B)&&a.is(b&&b[0],B)||(b=a.parsePathString(b));var n=[],q=0,A=0,u=0,D=0,K=0;"M"==b[0][0]&&(q=b[0][1],A=b[0][2],u=q,D=A,K++,n.push(["M",q,A]));for(var ea=b.length;K<ea;K++){var c=n[K]=[],Y=b[K];if(Y[0]!=lb.call(Y[0]))switch(c[0]=lb.call(Y[0]),c[0]){case "a":c[1]=Y[1];c[2]=Y[2];c[3]=Y[3];c[4]=Y[4];c[5]=
Y[5];c[6]=+(Y[6]-q).toFixed(3);c[7]=+(Y[7]-A).toFixed(3);break;case "v":c[1]=+(Y[1]-A).toFixed(3);break;case "m":u=Y[1],D=Y[2];default:for(var e=1,d=Y.length;e<d;e++)c[e]=+(Y[e]-(e%2?q:A)).toFixed(3)}else for(n[K]=[],"m"==Y[0]&&(u=Y[1]+q,D=Y[2]+A),c=0,e=Y.length;c<e;c++)n[K][c]=Y[c];Y=n[K].length;switch(n[K][0]){case "z":q=u;A=D;break;case "h":q+=+n[K][Y-1];break;case "v":A+=+n[K][Y-1];break;default:q+=+n[K][Y-2],A+=+n[K][Y-1]}}n.toString=a._path2string;h.rel=ka(n);return n},Da=a._pathToAbsolute=
function(b){var h=f(b),n;if(h.abs)return ka(h.abs);a.is(b,B)&&a.is(b&&b[0],B)||(b=a.parsePathString(b));if(!b||!b.length)return n=["M",0,0],n.toString=a._path2string,n;var q=0,A=0,u=0,D=0,K=0;n=[];"M"==b[0][0]&&(q=+b[0][1],A=+b[0][2],u=q,D=A,K++,n[0]=["M",q,A]);for(var ea=3==b.length&&"M"==b[0][0]&&"R"==b[1][0].toUpperCase()&&"Z"==b[2][0].toUpperCase(),c,Y=K,e=b.length;Y<e;Y++){n.push(K=[]);c=b[Y];if(c[0]!=Eb.call(c[0]))switch(K[0]=Eb.call(c[0]),K[0]){case "A":K[1]=c[1];K[2]=c[2];K[3]=c[3];K[4]=c[4];
K[5]=c[5];K[6]=+(c[6]+q);K[7]=+(c[7]+A);break;case "V":K[1]=+c[1]+A;break;case "H":K[1]=+c[1]+q;break;case "R":for(var Da=[q,A].concat(c.slice(1)),ca=2,ra=Da.length;ca<ra;ca++)Da[ca]=+Da[ca]+q,Da[++ca]=+Da[ca]+A;n.pop();n=n.concat(d(Da,ea));break;case "M":u=+c[1]+q,D=+c[2]+A;default:for(ca=1,ra=c.length;ca<ra;ca++)K[ca]=+c[ca]+(ca%2?q:A)}else if("R"==c[0])Da=[q,A].concat(c.slice(1)),n.pop(),n=n.concat(d(Da,ea)),K=["R"].concat(c.slice(-2));else for(Da=0,ca=c.length;Da<ca;Da++)K[Da]=c[Da];switch(K[0]){case "Z":q=
u;A=D;break;case "H":q=K[1];break;case "V":A=K[1];break;case "M":u=K[K.length-2],D=K[K.length-1];default:q=K[K.length-2],A=K[K.length-1]}}n.toString=a._path2string;h.abs=ka(n);return n},ra=function(b,h,f,n){return[b,h,f,n,f,n]},ca=function(b,h,f,n,q,A){var a=1/3,u=2/3;return[a*b+u*f,a*h+u*n,a*q+u*f,a*A+u*n,q,A]},ua=function(b,h,f,n,q,a,u,D,K,ea){var c=120*Oa/180,Y=wa*(+q||0),e=[],ka,Da=A(function(b,h,f){var n=b*Ta(f)-h*fa(f);b=b*fa(f)+h*Ta(f);return{x:n,y:b}});if(ea)ra=ea[0],ka=ea[1],a=ea[2],d=ea[3];
else{ka=Da(b,h,-Y);b=ka.x;h=ka.y;ka=Da(D,K,-Y);D=ka.x;K=ka.y;Ta(wa*q);fa(wa*q);ka=(b-D)/2;ra=(h-K)/2;d=ka*ka/(f*f)+ra*ra/(n*n);1<d&&(d=Ha(d),f*=d,n*=d);var d=f*f,ca=n*n,d=(a==u?-1:1)*Ha(Ra((d*ca-d*ra*ra-ca*ka*ka)/(d*ra*ra+ca*ka*ka)));a=d*f*ra/n+(b+D)/2;var d=d*-n*ka/f+(h+K)/2,ra=Ia.asin(((h-d)/n).toFixed(9));ka=Ia.asin(((K-d)/n).toFixed(9));ra=b<a?Oa-ra:ra;ka=D<a?Oa-ka:ka;0>ra&&(ra=2*Oa+ra);0>ka&&(ka=2*Oa+ka);u&&ra>ka&&(ra-=2*Oa);!u&&ka>ra&&(ka-=2*Oa)}if(Ra(ka-ra)>c){var e=ka,ca=D,g=K;ka=ra+c*(u&&
ka>ra?1:-1);D=a+f*Ta(ka);K=d+n*fa(ka);e=ua(D,K,f,n,q,0,u,ca,g,[ka,e,a,d])}a=ka-ra;q=Ta(ra);c=fa(ra);u=Ta(ka);ka=fa(ka);a=Ia.tan(a/4);f=4/3*f*a;a*=4/3*n;n=[b,h];b=[b+f*c,h-a*q];h=[D+f*ka,K-a*u];D=[D,K];b[0]=2*n[0]-b[0];b[1]=2*n[1]-b[1];if(ea)return[b,h,D].concat(e);e=[b,h,D].concat(e).join().split(",");ea=[];D=0;for(K=e.length;D<K;D++)ea[D]=D%2?Da(e[D-1],e[D],Y).y:Da(e[D],e[D+1],Y).x;return ea},db=function(b,h,f,n,q,A,a,u,D){var K=1-D;return{x:Xa(K,3)*b+3*Xa(K,2)*D*f+3*K*D*D*q+Xa(D,3)*a,y:Xa(K,3)*
h+3*Xa(K,2)*D*n+3*K*D*D*A+Xa(D,3)*u}},Sb=A(function(b,h,f,n,q,A,a,u){var D=q-2*f+b-(a-2*q+f),K=2*(f-b)-2*(q-f),ea=b-f,c=(-K+Ha(K*K-4*D*ea))/2/D,D=(-K-Ha(K*K-4*D*ea))/2/D,Y=[h,u],e=[b,a];"1e12"<Ra(c)&&(c=.5);"1e12"<Ra(D)&&(D=.5);0<c&&1>c&&(c=db(b,h,f,n,q,A,a,u,c),e.push(c.x),Y.push(c.y));0<D&&1>D&&(c=db(b,h,f,n,q,A,a,u,D),e.push(c.x),Y.push(c.y));D=A-2*n+h-(u-2*A+n);K=2*(n-h)-2*(A-n);ea=h-n;c=(-K+Ha(K*K-4*D*ea))/2/D;D=(-K-Ha(K*K-4*D*ea))/2/D;"1e12"<Ra(c)&&(c=.5);"1e12"<Ra(D)&&(D=.5);0<c&&1>c&&(c=db(b,
h,f,n,q,A,a,u,c),e.push(c.x),Y.push(c.y));0<D&&1>D&&(c=db(b,h,f,n,q,A,a,u,D),e.push(c.x),Y.push(c.y));return{min:{x:Pa[v](0,e),y:Pa[v](0,Y)},max:{x:Ua[v](0,e),y:Ua[v](0,Y)}}}),Wa=a._path2curve=A(function(b,h){var n=!h&&f(b);if(!h&&n.curve)return ka(n.curve);var q=Da(b),A=h&&Da(h),a={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},u={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},D=function(b,h){var f,n;if(!b)return["C",h.x,h.y,h.x,h.y,h.x,h.y];b[0]in{T:1,Q:1}||(h.qx=h.qy=null);switch(b[0]){case "M":h.X=b[1];
h.Y=b[2];break;case "A":b=["C"].concat(ua[v](0,[h.x,h.y].concat(b.slice(1))));break;case "S":f=h.x+(h.x-(h.bx||h.x));n=h.y+(h.y-(h.by||h.y));b=["C",f,n].concat(b.slice(1));break;case "T":h.qx=h.x+(h.x-(h.qx||h.x));h.qy=h.y+(h.y-(h.qy||h.y));b=["C"].concat(ca(h.x,h.y,h.qx,h.qy,b[1],b[2]));break;case "Q":h.qx=b[1];h.qy=b[2];b=["C"].concat(ca(h.x,h.y,b[1],b[2],b[3],b[4]));break;case "L":b=["C"].concat(ra(h.x,h.y,b[1],b[2]));break;case "H":b=["C"].concat(ra(h.x,h.y,b[1],h.y));break;case "V":b=["C"].concat(ra(h.x,
h.y,h.x,b[1]));break;case "Z":b=["C"].concat(ra(h.x,h.y,h.X,h.Y))}return b},K=function(b,h){if(7<b[h].length){b[h].shift();for(var f=b[h];f.length;)b.splice(h++,0,["C"].concat(f.splice(0,6)));b.splice(h,1);Y=Ua(q.length,A&&A.length||0)}},c=function(b,h,f,n,a){b&&h&&"M"==b[a][0]&&"M"!=h[a][0]&&(h.splice(a,0,["M",n.x,n.y]),f.bx=0,f.by=0,f.x=b[a][1],f.y=b[a][2],Y=Ua(q.length,A&&A.length||0))},ea=0,Y=Ua(q.length,A&&A.length||0);for(;ea<Y;ea++){q[ea]=D(q[ea],a);K(q,ea);A&&(A[ea]=D(A[ea],u));A&&K(A,ea);
c(q,A,a,u,ea);c(A,q,u,a,ea);var e=q[ea],d=A&&A[ea],g=e.length,N=A&&d.length;a.x=e[g-2];a.y=e[g-1];a.bx=za(e[g-4])||a.x;a.by=za(e[g-3])||a.y;u.bx=A&&(za(d[N-4])||u.x);u.by=A&&(za(d[N-3])||u.y);u.x=A&&d[N-2];u.y=A&&d[N-1]}A||(n.curve=ka(q));return A?[q,A]:q},null,ka);a._parseDots=A(function(b){for(var h=[],f=0,n=b.length;f<n;f++){var q={},A=b[f].match(/^([^:]*):?([\d\.]*)/);q.color=a.getRGB(A[1]);if(q.color.error)return null;q.opacity=q.color.opacity;q.color=q.color.hex;A[2]&&(q.offset=A[2]+"%");h.push(q)}f=
1;for(n=h.length-1;f<n;f++)if(!h[f].offset){b=za(h[f-1].offset||0);A=0;for(q=f+1;q<n;q++)if(h[q].offset){A=h[q].offset;break}A||(A=100,q=n);A=za(A);for(A=(A-b)/(q-f+1);f<q;f++)b+=A,h[f].offset=b+"%"}return h});var Gb=a._tear=function(b,h){b==h.top&&(h.top=b.prev);b==h.bottom&&(h.bottom=b.next);b.next&&(b.next.prev=b.prev);b.prev&&(b.prev.next=b.next)};a._tofront=function(b,h){if(h.top===b)return!1;Gb(b,h);b.next=null;b.prev=h.top;h.top.next=b;h.top=b;return!0};a._toback=function(b,h){if(h.bottom===
b)return!1;Gb(b,h);b.next=h.bottom;b.prev=null;h.bottom.prev=b;h.bottom=b;return!0};a._insertafter=function(b,h,f,n){Gb(b,f);b.parent=n;h===n.top&&(n.top=b);h.next&&(h.next.prev=b);b.next=h.next;b.prev=h;h.next=b};a._insertbefore=function(b,h,f,n){Gb(b,f);b.parent=n;h===n.bottom&&(n.bottom=b);h.prev&&(h.prev.next=b);b.prev=h.prev;h.prev=b;b.next=h};var Kb=a.toMatrix=function(b,h){var f=ea(b),n={_:{transform:""},getBBox:function(){return f}};Ab(n,h);return n.matrix};a.transformPath=function(b,h){return tb(b,
Kb(b,h))};var Ab=a._extractTransform=function(b,h){if(null==h)return b._.transform;h=Ea(h).replace(/\.{3}|\u2026/g,b._.transform||"");var f=a.parseTransformString(h),n=0,q=0,A=0,u=1,D=1,K=b._,A=new p;K.transform=f||[];if(f)for(var q=0,c=f.length;q<c;q++){var ea=f[q],Y=ea.length,e=Ea(ea[0]).toLowerCase(),ka=ea[0]!=e,d=ka?A.invert():0;"t"==e&&3==Y?ka?(Y=d.x(0,0),e=d.y(0,0),ka=d.x(ea[1],ea[2]),d=d.y(ea[1],ea[2]),A.translate(ka-Y,d-e)):A.translate(ea[1],ea[2]):"r"==e?2==Y?(d=K.bb||(K.bb=b.getBBox(1)),
A.rotate(ea[1],d.x+d.width/2,d.y+d.height/2),n+=ea[1]):4==Y&&(ka?(ka=d.x(ea[2],ea[3]),d=d.y(ea[2],ea[3]),A.rotate(ea[1],ka,d)):A.rotate(ea[1],ea[2],ea[3]),n+=ea[1]):"s"==e?2==Y||3==Y?(d=K.bb||(K.bb=b.getBBox(1)),A.scale(ea[1],ea[Y-1],d.x+d.width/2,d.y+d.height/2),u*=ea[1],D*=ea[Y-1]):5==Y&&(ka?(ka=d.x(ea[3],ea[4]),d=d.y(ea[3],ea[4]),A.scale(ea[1],ea[2],ka,d)):A.scale(ea[1],ea[2],ea[3],ea[4]),u*=ea[1],D*=ea[2]):"m"==e&&7==Y&&A.add(ea[1],ea[2],ea[3],ea[4],ea[5],ea[6]);K.dirtyT=1;b.matrix=A}b.matrix=
A;K.sx=u;K.sy=D;K.deg=n;K.dx=q=A.e;K.dy=A=A.f;1==u&&1==D&&!n&&K.bbox?(K.bbox.x+=+q,K.bbox.y+=+A):K.dirtyT=1},wb=function(b){var h=b[0];switch(h.toLowerCase()){case "t":return[h,0,0];case "m":return[h,1,0,0,1,0,0];case "r":return 4==b.length?[h,0,b[2],b[3]]:[h,0];case "s":return 5==b.length?[h,1,1,b[3],b[4]]:3==b.length?[h,1,1]:[h,1]}},S=a._equaliseTransform=function(b,h){h=Ea(h).replace(/\.{3}|\u2026/g,b);b=a.parseTransformString(b)||[];h=a.parseTransformString(h)||[];for(var f=Ua(b.length,h.length),
n=[],q=[],A=0,u,D,K,ea;A<f;A++){K=b[A]||wb(h[A]);ea=h[A]||wb(K);if(K[0]!=ea[0]||"r"==K[0].toLowerCase()&&(K[2]!=ea[2]||K[3]!=ea[3])||"s"==K[0].toLowerCase()&&(K[3]!=ea[3]||K[4]!=ea[4]))return;n[A]=[];q[A]=[];u=0;for(D=Ua(K.length,ea.length);u<D;u++)u in K&&(n[A][u]=K[u]),u in ea&&(q[A][u]=ea[u])}return{from:n,to:q}};a._getContainer=function(b,h,f,n){var q;q=null!=n||a.is(b,"object")?b:T.doc.getElementById(b);if(null!=q)return q.tagName?null==h?{container:q,width:q.style.pixelWidth||q.offsetWidth,
height:q.style.pixelHeight||q.offsetHeight}:{container:q,width:h,height:f}:{container:1,x:b,y:h,width:f,height:n}};a.pathToRelative=Y;a._engine={};a.path2curve=Wa;a.matrix=function(b,h,f,n,q,A){return new p(b,h,f,n,q,A)};(function(b){function h(b){return b[0]*b[0]+b[1]*b[1]}function f(b){var n=Ha(h(b));b[0]&&(b[0]/=n);b[1]&&(b[1]/=n)}b.add=function(b,h,f,n,q,A){var a=[[],[],[]],u=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]];h=[[b,f,q],[h,n,A],[0,0,1]];b&&b instanceof p&&(h=[[b.a,b.c,b.e],
[b.b,b.d,b.f],[0,0,1]]);for(b=0;3>b;b++)for(f=0;3>f;f++){for(n=q=0;3>n;n++)q+=u[b][n]*h[n][f];a[b][f]=q}this.a=a[0][0];this.b=a[1][0];this.c=a[0][1];this.d=a[1][1];this.e=a[0][2];this.f=a[1][2]};b.invert=function(){var b=this.a*this.d-this.b*this.c;return new p(this.d/b,-this.b/b,-this.c/b,this.a/b,(this.c*this.f-this.d*this.e)/b,(this.b*this.e-this.a*this.f)/b)};b.clone=function(){return new p(this.a,this.b,this.c,this.d,this.e,this.f)};b.translate=function(b,h){this.add(1,0,0,1,b,h)};b.scale=function(b,
h,f,n){null==h&&(h=b);(f||n)&&this.add(1,0,0,1,f,n);this.add(b,0,0,h,0,0);(f||n)&&this.add(1,0,0,1,-f,-n)};b.rotate=function(b,h,f){b=a.rad(b);h=h||0;f=f||0;var n=+Ta(b).toFixed(9);b=+fa(b).toFixed(9);this.add(n,b,-b,n,h,f);this.add(1,0,0,1,-h,-f)};b.x=function(b,h){return b*this.a+h*this.c+this.e};b.y=function(b,h){return b*this.b+h*this.d+this.f};b.get=function(b){return+this[Ea.fromCharCode(97+b)].toFixed(4)};b.toString=function(){return a.svg?"matrix("+[this.get(0),this.get(1),this.get(2),this.get(3),
this.get(4),this.get(5)].join()+")":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()};b.toMatrixString=function(){return"matrix("+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+")"};b.toFilter=function(){return"progid:DXImageTransform.Microsoft.Matrix(M11="+this.get(0)+", M12="+this.get(2)+", M21="+this.get(1)+", M22="+this.get(3)+", Dx="+this.get(4)+", Dy="+this.get(5)+", sizingmethod='auto expand')"};b.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]};
b.split=function(){var b={};b.dx=this.e;b.dy=this.f;var n=[[this.a,this.c],[this.b,this.d]];b.scalex=Ha(h(n[0]));f(n[0]);b.shear=n[0][0]*n[1][0]+n[0][1]*n[1][1];n[1]=[n[1][0]-n[0][0]*b.shear,n[1][1]-n[0][1]*b.shear];b.scaley=Ha(h(n[1]));f(n[1]);b.shear/=b.scaley;var q=-n[0][1],n=n[1][1];0>n?(b.rotate=a.deg(Ia.acos(n)),0>q&&(b.rotate=360-b.rotate)):b.rotate=a.deg(Ia.asin(q));b.isSimple=!+b.shear.toFixed(9)&&(b.scalex.toFixed(9)==b.scaley.toFixed(9)||!b.rotate);b.isSuperSimple=!+b.shear.toFixed(9)&&
b.scalex.toFixed(9)==b.scaley.toFixed(9)&&!b.rotate;b.noRotation=!+b.shear.toFixed(9)&&!b.rotate;return b};b.toTransformString=function(b){b=b||this.split();return b.isSimple?(b.scalex=+b.scalex.toFixed(4),b.scaley=+b.scaley.toFixed(4),b.rotate=+b.rotate.toFixed(4),(b.dx||b.dy?"t"+[b.dx,b.dy]:"")+(1!=b.scalex||1!=b.scaley?"s"+[b.scalex,b.scaley,0,0]:"")+(b.rotate?"r"+[b.rotate,0,0]:"")):"m"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}})(p.prototype);var Zb=la.navigator,
R=Zb.userAgent.match(/Version\/(.*?)\s/)||Zb.userAgent.match(/Chrome\/(\d+)/);"Apple Computer, Inc."==Zb.vendor&&(R&&4>R[1]||"iP"==Zb.platform.slice(0,2))||"Google Inc."==Zb.vendor&&R&&8>R[1]?ba.safari=function(){var b=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:"none"});setTimeout(function(){b.remove()});return!0}:ba.safari=Na;for(var O=function(){this.returnValue=!1},nc=function(){return this.originalEvent.preventDefault()},eb=function(){this.cancelBubble=!0},Vb=function(){return this.originalEvent.stopPropagation()},
ia=a.addEvent=function(){if(T.doc.addEventListener)return function(b,h,f,n){var q=Ga&&na[h]||h,A;na[Va[h]]&&(q=na[Va[h]]);A=function(q){var A=T.doc.documentElement.scrollTop||T.doc.body.scrollTop,a=T.doc.documentElement.scrollLeft||T.doc.body.scrollLeft,u;if(C&&na.hasOwnProperty(Ga?h:Va[h]))for(var D=0,K=q.targetTouches&&q.targetTouches.length;D<K;D++)if(u=q.targetTouches[D].target,u==b||"tspan"==u.nodeName&&u.parentNode==b){u=q;q=q.targetTouches[D];q.originalEvent=u;q.preventDefault=nc;q.stopPropagation=
Vb;break}return f.call(n,q,q.clientX+a,q.clientY+A)};b.addEventListener(q,A,!1);return function(){b.removeEventListener(q,A,!1);return!0}};if(T.doc.attachEvent)return function(b,h,f,n){var q=function(b){b=b||T.win.event;var h=b.clientX+(T.doc.documentElement.scrollLeft||T.doc.body.scrollLeft),q=b.clientY+(T.doc.documentElement.scrollTop||T.doc.body.scrollTop);b.preventDefault=b.preventDefault||O;b.stopPropagation=b.stopPropagation||eb;return f.call(n,b,h,q)};b.attachEvent("on"+h,q);return function(){b.detachEvent("on"+
h,q);return!0}}}(),da=[],Qa=function(b){for(var h=b.clientX,f=b.clientY,n=T.doc.documentElement.scrollTop||T.doc.body.scrollTop,q=T.doc.documentElement.scrollLeft||T.doc.body.scrollLeft,A,u=da.length;u--;){A=da[u];if(C&&"touchmove"===b.type)for(var D=b.touches.length,K;D--;){if(K=b.touches[D],K.identifier==A.el._drag.id){h=K.clientX;f=K.clientY;(b.originalEvent?b.originalEvent:b).preventDefault();break}}else b.preventDefault();if(!A.el.removed){var D=a._engine.getNode(A.el),ea=D.nextSibling,c=D.parentNode,
Y=D.style.display;T.win.opera&&c.removeChild(D);D.style.display="none";K=A.el.paper.getElementByPoint(h,f);D.style.display=Y;T.win.opera&&(ea?c.insertBefore(D,ea):c.appendChild(D));K&&F("raphael.drag.over."+A.el.id,A.el,K);h+=q;f+=n;F("raphael.drag.move."+A.el.id,A.move_scope||A.el,h-A.el._drag.x,f-A.el._drag.y,h,f,b)}}},Pb=function(b){a.undragmove(Qa).undragend(Pb);a.unmousemove(Qa).unmouseup(Pb);for(var h=da.length,f;h--;)f=da[h],f.el._drag={},F("raphael.drag.end."+f.el.id,f.end_scope||f.start_scope||
f.move_scope||f.el,b);da=[]},U=a.el={},V=N.length;V--;)(function(b){a[b]=U[b]=function(h,f){a.is(h,"function")&&(this.events=this.events||[],this.events.push({name:b,f:h,unbind:ia(this.shape||this.node||T.doc,b,h,f||this)}));return this};a["un"+b]=U["un"+b]=function(h){for(var f=this.events||[],n=f.length;n--;)if(f[n].name==b&&f[n].f==h){f[n].unbind();f.splice(n,1);!f.length&&delete this.events;break}return this}})(N[V]);U.data=function(b,h){var f=qb[this.id]=qb[this.id]||{};if(1==arguments.length){if(a.is(b,
"object")){for(var n in b)b.hasOwnProperty(n)&&this.data(n,b[n]);return this}F("raphael.data.get."+this.id,this,f[b],b);return f[b]}f[b]=h;F("raphael.data.set."+this.id,this,h,b);return this};U.removeData=function(b){null==b?delete qb[this.id]:qb[this.id]&&delete qb[this.id][b];return this};U.getData=function(){return ob(qb[this.id]||{})};var $a=[],Z=function(){this.untrack=ia(T.doc,"mouseup",Mb,this)},Mb=function(){this.untrack();this.untrack=null;return this.fn&&this.fn.apply(this.scope||this.el,
arguments)};U.mouseup=function(b,h,f){if(!f)return a.mouseup.apply(this,arguments);$a.push(f={el:this,fn:b,scope:h});f.unbind=ia(this.shape||this.node||T.doc,"mousedown",Z,f);return this};U.unmouseup=function(b){for(var h=$a.length,f;h--;)$a[h].el===this&&$a[h].fn===b&&(f=$a[h],f.unbind(),f.untrack&&f.untrack(),$a.splice(h,1));return f?this:a.unmouseup.apply(this,arguments)};U.hover=function(b,h,f,n){return this.mouseover(b,f).mouseout(h,n||f)};U.unhover=function(b,h){return this.unmouseover(b).unmouseout(h)};
var nb=[];U.drag=function(b,h,f,n,q,A){function u(D){var K=T.doc.documentElement.scrollTop||T.doc.body.scrollTop,ea=T.doc.documentElement.scrollLeft||T.doc.body.scrollLeft;this._drag.x=D.clientX+ea;this._drag.y=D.clientY+K;this._drag.id=D.identifier;C&&!Ga&&!da.length&&a.dragmove(Qa).dragend(Pb);!da.length&&a.mousemove(Qa).mouseup(Pb);da.push({el:this,move_scope:n,start_scope:q,end_scope:A});h&&F.on("raphael.drag.start."+this.id,h);b&&F.on("raphael.drag.move."+this.id,b);f&&F.on("raphael.drag.end."+
this.id,f);F("raphael.drag.start."+this.id,q||n||this,D.clientX+ea,D.clientY+K,D)}this._drag={};nb.push({el:this,start:u});C&&!Ga&&this.dragstart(u);this.mousedown(u);return this};U.onDragOver=function(b){b?F.on("raphael.drag.over."+this.id,b):F.unbind("raphael.drag.over."+this.id)};U.undrag=function(){for(var b=nb.length;b--;)nb[b].el==this&&(this.unmousedown(nb[b].start),nb.splice(b,1),F.unbind("raphael.drag.*."+this.id));!nb.length&&a.unmousemove(Qa).unmouseup(Pb);delete this._drag};U.follow=function(b,
h,f){if(b.removed||b.constructor!==a.el.constructor)return this;b.followers.push({el:this,stalk:f={before:"insertBefore",after:"insertAfter"}[f],cb:h});f&&this[f](b);return this};U.unfollow=function(b){if(b.removed||b.constructor!==a.el.constructor)return this;for(var h=0,f=b.followers.length;h<f;h++)if(b.followers[h].el===this){b.followers.splice(h,1);break}return this};ba.hide=function(){this.canvas.style.visibility="hidden";return this};ba.show=function(){this.canvas.style.visibility="";return this};
ba.group=function(){var b=arguments,h=cb(b,!0),b=a._engine.group(this,b[0],h);return this.__set__&&this.__set__.push(b),this._elementsById[b.id]=b};ba.circle=function(){var b=arguments,h=cb(b,!0),b=Cb(b,"cx",0,"cy",0,"r",0,"fill","none","stroke","#000"),h=a._engine.circle(this,b,h);return this.__set__&&this.__set__.push(h),this._elementsById[h.id]=h};ba.rect=function(){var b=arguments,h=cb(b,!0),b=Cb(b,"x",0,"y",0,"width",0,"height",0,"r",0,"fill","none","stroke","#000"),h=a._engine.rect(this,b,h);
return this.__set__&&this.__set__.push(h),this._elementsById[h.id]=h};ba.ellipse=function(){var b=arguments,h=cb(b,!0),b=Cb(b,"x",0,"y",0,"rx",0,"ry",0,"fill","none","stroke","#000"),h=a._engine.ellipse(this,b,h);return this.__set__&&this.__set__.push(h),this._elementsById[h.id]=h};ba.path=function(){var b=arguments,h=cb(b,!0),f=this.config,b=Cb(b,"path","","fill","none","stroke","#000","stroke-linecap",f&&f["stroke-linecap"]||"butt"),h=a._engine.path(this,b,h);return this.__set__&&this.__set__.push(h),
this._elementsById[h.id]=h};ba.image=function(){var b=arguments,h=cb(b,!0),b=Cb(b,"src","","x",0,"y",0,"width",0,"height",0);out=a._engine.image(this,b,h);return this.__set__&&this.__set__.push(out),this._elementsById[out.id]=out};ba.text=function(){var b=arguments,h=cb(b,!0),f=Cb(b,"x",0,"y",0,"text","","stroke","none","fill","#000","text-anchor","middle","vertical-align","middle"),b=a._engine.text(this,f,h,b[1]);return this.__set__&&this.__set__.push(b),this._elementsById[b.id]=b};ba.set=function(b){!a.is(b,
"array")&&(b=I.call(arguments,0,arguments.length));var h=new ya(b);this.__set__&&this.__set__.push(h);return h};ba.setConfig=function(b,h){void 0!==b&&void 0!==h&&(this.config=this.config||{},this.config[b]=h);return this.config};ba.setStart=function(b){this.__set__=b||this.set()};ba.setFinish=function(b){b=this.__set__;delete this.__set__;return b};ba.setSize=function(b,h){return a._engine.setSize.call(this,b,h)};ba.setDimension=function(b,h){"object"===typeof b?this.setSize(b.width,b.height):this.setSize(b,
h)};ba.attr=function(b){if(null==b)return{width:this.width,height:this.height};if(a.is(b,"string"))return this[b];this.setDimension(b);return this};ba.status=function(b,h){return U.status.call(this,b,h)};ba.animateWith=function(b,h,f,n,q,A){return U.animateWith.call(this,b,h,f,n,q,A)};ba.animate=function(b,h,f,n){return U.animate.call(this,b,h,f,n)};ba.setViewBox=function(b,h,f,n,q){return a._engine.setViewBox.call(this,b,h,f,n,q)};ba.top=ba.bottom=null;ba.raphael=a;ba.getElementByPoint=function(b,
h){var f,n,q=this.canvas,A=T.doc.elementFromPoint(b,h);if(T.win.opera&&"svg"==A.tagName){n=q.getBoundingClientRect();f=q.ownerDocument;var a=f.body,u=f.documentElement;f=n.top+(T.win.pageYOffset||u.scrollTop||a.scrollTop)-(u.clientTop||a.clientTop||0);n=n.left+(T.win.pageXOffset||u.scrollLeft||a.scrollLeft)-(u.clientLeft||a.clientLeft||0);a=q.createSVGRect();a.x=b-n;a.y=h-f;a.width=a.height=1;f=q.getIntersectionList(a,null);f.length&&(A=f[f.length-1])}if(!A)return null;for(;A.parentNode&&A!=q.parentNode&&
!A.raphael;)A=A.parentNode;A==this.canvas.parentNode&&(A=q);return A=A&&A.raphael?this.getById(A.raphaelid):null};ba.getElementsByBBox=function(b){var h=this.set();this.forEach(function(f){a.isBBoxIntersect(f.getBBox(),b)&&h.push(f)});return h};ba.getById=function(b){return this._elementsById[b]||null};ba.forEach=function(b,h){for(var f=this.bottom;f&&!1!==b.call(h,f);)f=f.next;return this};ba.getElementsByPoint=function(b,h){var f=this.set();this.forEach(function(n){n.isPointInside(b,h)&&f.push(n)});
return f};U.isPointInside=function(b,h){var f=this.realPath=this.realPath||fb[this.type](this),n;return a.isPointInsidePath((n=this.attr("transform"))&&n.length&&a.transformPath(f,n)||f,b,h)};U.getBBox=function(b){if(this.removed)return{};var h=this._;if(b){if(h.dirty||!h.bboxwt)this.realPath=fb[this.type](this),h.bboxwt=ea(this.realPath),h.bboxwt.toString=t,h.dirty=0;return h.bboxwt}if(h.dirty||h.dirtyT||!h.bbox){if(h.dirty||!this.realPath)h.bboxwt=0,this.realPath=fb[this.type](this);h.bbox=ea(tb(this.realPath,
this.matrix));h.bbox.toString=t;h.dirty=h.dirtyT=0}return h.bbox};U.clone=function(){if(this.removed)return null;var b=this.paper[this.type]().attr(this.attr());this.__set__&&this.__set__.push(b);return b};U.glow=function(b){if("text"==this.type)return null;b=b||{};var h=(b.width||10)+(+this.attr("stroke-width")||1),f=b.fill||!1,n=b.opacity||.5,q=b.offsetx||0,A=b.offsety||0;b=b.color||"#000";for(var a=h/2,u=this.paper,D=u.set(),K=this.realPath||fb[this.type](this),K=this.matrix?tb(K,this.matrix):
K,ea=1;ea<a+1;ea++)D.push(u.path(K).attr({stroke:b,fill:f?b:"none","stroke-linejoin":"round","stroke-linecap":"round","stroke-width":+(h/a*ea).toFixed(3),opacity:+(n/a).toFixed(3)}));return D.insertBefore(this).translate(q,A)};var La=function(b,h,f,n,q,A,u,D,K){return null==K?l(b,h,f,n,q,A,u,D):a.findDotsAtSegment(b,h,f,n,q,A,u,D,P(b,h,f,n,q,A,u,D,K))},ga=function(b,h){return function(f,n,q){f=Wa(f);for(var A,u,D,K,ea="",c={},Y=0,e=0,ka=f.length;e<ka;e++){D=f[e];if("M"==D[0])A=+D[1],u=+D[2];else{K=
La(A,u,D[1],D[2],D[3],D[4],D[5],D[6]);if(Y+K>n){if(h&&!c.start){A=La(A,u,D[1],D[2],D[3],D[4],D[5],D[6],n-Y);ea+=["C"+A.start.x,A.start.y,A.m.x,A.m.y,A.x,A.y];if(q)return ea;c.start=ea;ea=["M"+A.x,A.y+"C"+A.n.x,A.n.y,A.end.x,A.end.y,D[5],D[6]].join();Y+=K;A=+D[5];u=+D[6];continue}if(!b&&!h)return A=La(A,u,D[1],D[2],D[3],D[4],D[5],D[6],n-Y),{x:A.x,y:A.y,alpha:A.alpha}}Y+=K;A=+D[5];u=+D[6]}ea+=D.shift()+D}c.end=ea;A=b?Y:h?c:a.findDotsAtSegment(A,u,D[0],D[1],D[2],D[3],D[4],D[5],1);A.alpha&&(A={x:A.x,
y:A.y,alpha:A.alpha});return A}},jc=ga(1),qa=ga(),Fb=ga(0,1);a.getTotalLength=jc;a.getPointAtLength=qa;a.getSubpath=function(b,h,f){if(1E-6>this.getTotalLength(b)-f)return Fb(b,h).end;b=Fb(b,f,1);return h?Fb(b,h).end:b};U.getTotalLength=function(){if("path"==this.type)return this.node.getTotalLength?this.node.getTotalLength():jc(this.attrs.path)};U.getPointAtLength=function(b){if("path"==this.type)return qa(this.attrs.path,b)};U.getSubpath=function(b,h){if("path"==this.type)return a.getSubpath(this.attrs.path,
b,h)};var sa=a.easing_formulas={linear:function(b){return b},"<":function(b){return Xa(b,1.7)},">":function(b){return Xa(b,.48)},"<>":function(b){var h=.48-b/1.04,f=Ha(.1734+h*h);b=f-h;b=Xa(Ra(b),1/3)*(0>b?-1:1);h=-f-h;h=Xa(Ra(h),1/3)*(0>h?-1:1);b=b+h+.5;return 3*(1-b)*b*b+b*b*b},backIn:function(b){return b*b*(2.70158*b-1.70158)},backOut:function(b){--b;return b*b*(2.70158*b+1.70158)+1},elastic:function(b){return b==!!b?b:Xa(2,-10*b)*fa(2*(b-.075)*Oa/.3)+1},bounce:function(b){b<1/2.75?b*=7.5625*b:
b<2/2.75?(b-=1.5/2.75,b=7.5625*b*b+.75):b<2.5/2.75?(b-=2.25/2.75,b=7.5625*b*b+.9375):(b-=2.625/2.75,b=7.5625*b*b+.984375);return b}};sa.easeIn=sa["ease-in"]=sa["<"];sa.easeOut=sa["ease-out"]=sa[">"];sa.easeInOut=sa["ease-in-out"]=sa["<>"];sa["back-in"]=sa.backIn;sa["back-out"]=sa.backOut;var ma=[],Lb,ic=function(){return Lb=a.requestAnimFrame||g.webkitRequestAnimationFrame||g.mozRequestAnimationFrame||g.oRequestAnimationFrame||g.msRequestAnimationFrame||function(b){setTimeout(b,16)}},gc=function(){for(var b=
+new Date,h=0;h<ma.length;h++){var f=ma[h];if(!(f.el.removed||f.paused||f.parentEl&&f.parentEl.e.paused)){var n=b-f.start,q=f.ms,A=f.easing,u=f.from,D=f.diff,K=f.to,ea=f.el,c={},Y,e={},ka=!1!==a.stopEvent,d;f.initstatus?(n=(f.initstatus*f.anim.top-f.prev)/(f.percent-f.prev)*q,f.status=f.initstatus,delete f.initstatus,f.stop&&(delete f.el,ma.splice(h--,1))):f.status=(f.prev+n/q*(f.percent-f.prev))/f.anim.top;if(!(0>n))if(n<q){var Da=A(n/q),ra;for(ra in u)if(u.hasOwnProperty(ra)){switch(bb[ra]){case H:Y=
+u[ra]+Da*q*D[ra];break;case "colour":Y="rgb("+[Aa(Fa(u[ra].r+Da*q*D[ra].r)),Aa(Fa(u[ra].g+Da*q*D[ra].g)),Aa(Fa(u[ra].b+Da*q*D[ra].b))].join()+")";break;case "path":Y=[];n=0;for(A=u[ra].length;n<A;n++){Y[n]=[u[ra][n][0]];K=1;for(e=u[ra][n].length;K<e;K++)Y[n][K]=(+u[ra][n][K]+Da*q*D[ra][n][K]).toFixed(4);Y[n]=Y[n].join(" ")}Y=Y.join(" ");break;case "transform":if(D[ra].real)for(Y=[],n=0,A=u[ra].length;n<A;n++)for(Y[n]=[u[ra][n][0]],K=1,e=u[ra][n].length;K<e;K++)Y[n][K]=u[ra][n][K]+Da*q*D[ra][n][K];
else Y=function(b){return+u[ra][b]+Da*q*D[ra][b]},Y=[["m",Y(0),Y(1),Y(2),Y(3),Y(4),Y(5)]];break;case "csv":if("clip-rect"==ra)for(Y=[],n=4;n--;)Y[n]=+u[ra][n]+Da*q*D[ra][n];break;default:for(A=[].concat(u[ra]),Y=[],n=ea.ca[ra].length;n--;)Y[n]=+A[n]+Da*q*D[ra][n]}c[ra]=Y}ea.attr(c);ka&&function(b,h,f){setTimeout(function(){F("raphael.anim.frame."+b,h,f)})}(ea.id,ea,f.anim)}else{(function(b,h,f){setTimeout(function(){ka&&F("raphael.anim.frame."+h.id,h,f);ka&&F("raphael.anim.finish."+h.id,h,f);a.is(b,
"function")&&b.call(h)})})(f.callback,ea,f.anim);ea.attr(K);delete f.el;ma.splice(h--,1);if(1<f.repeat&&!f.next){for(d in K)K.hasOwnProperty(d)&&(e[d]=f.totalOrigin[d]);f.el.attr(e);w(f.anim,f.el,f.anim.percents[0],null,f.totalOrigin,f.repeat-1)}f.next&&!f.stop&&w(f.anim,f.el,f.next,null,f.totalOrigin,f.repeat)}}}a.svg&&ea&&ea.paper&&ea.paper.safari();ma.length&&(Lb||ic())(gc)},Aa=function(b){return 255<b?255:0>b?0:b};U.animateWith=function(b,h,f,n,q,A){var u=this;if(u.removed)return A&&A.call(u),
u;if(0==n)return setTimeout(function(){a.is(A,"function")&&A.call(u)},0),u.attr(f);f=f instanceof c?f:a.animation(f,n,q,A);w(f,u,f.percents[0],null,u.attr(),void 0,b);f=0;for(n=ma.length;f<n;f++)if(ma[f].anim==h&&ma[f].el==b){ma[n-1].start=ma[f].start;break}return u};U.onAnimation=function(b){b?F.on("raphael.anim.frame."+this.id,b):F.unbind("raphael.anim.frame."+this.id);return this};c.prototype.delay=function(b){var h=new c(this.anim,this.ms);h.times=this.times;h.del=+b||0;return h};c.prototype.repeat=
function(b){var h=new c(this.anim,this.ms);h.del=this.del;h.times=Ia.floor(Ua(b,0))||1;return h};a.animation=function(b,h,f,n,q){if(b instanceof c)return b;if(a.is(f,"function")||!f)n=n||f||null,f=null;void 0===a.stopEvent&&(a.stopEvent=q);b=Object(b);h=+h||0;q={};var A,u;for(u in b)b.hasOwnProperty(u)&&za(u)!=u&&za(u)+"%"!=u&&(A=!0,q[u]=b[u]);return A?(f&&(q.easing=f),n&&(q.callback=n),new c({100:q},h)):new c(b,h)};U.animate=function(b,h,f,n){if(this.removed)return n&&n.call(this),this;b=b instanceof
c?b:a.animation(b,h,f,n);w(b,this,b.percents[0],null,this.attr());return this};U.setTime=function(b,h){b&&null!=h&&this.status(b,Pa(h,b.ms)/b.ms);return this};U.status=function(b,h){var f=[],n=0,q,A;if(null!=h)return w(b,this,-1,Pa(h,1)),this;for(q=ma.length;n<q;n++)if(A=ma[n],A.el.id==this.id&&(!b||A.anim==b)){if(b)return A.status;f.push({anim:A.anim,status:A.status})}return b?0:f};U.pause=function(b,h){var f=+new Date,n,q;for(q=0;q<ma.length;q++)n=ma[q],!(n.el.id===this.id||h&&n.parentEl&&n.parentEl.e.el&&
n.parentEl.e.el.id===this.id)||b&&n.anim!=b||!1===F("raphael.anim.pause."+this.id,this,n.anim)||(n.paused=!0,n.pauseStart=f);return this};U.resume=function(b,h){var f=+new Date,n,q;for(q=0;q<ma.length;q++)n=ma[q],!(n.el.id===this.id||h&&n.parentEl&&n.parentEl.e.el&&n.parentEl.e.el.id===this.id)||b&&n.anim!=b||!1===F("raphael.anim.resume."+this.id,this,n.anim)||(delete n.paused,n.el.status(n.anim,n.status),n.pauseEnd=f,n.start+=(n.parentEl&&n.parentEl.e.pauseEnd||n.pauseEnd)-(n.parentEl&&n.parentEl.e.pauseStart||
n.pauseStart)||0);return this};U.stop=function(b,h,f){var n;if(h)for(n=ma.length-1;0<=n;n--)h=ma[n],!(h.el.id===this.id||h.parentEl&&h.parentEl.id===this.id)||b&&ma[n].anim!=b||(ele=h.el,f&&ele.attr(h.to),h.callback&&h.callback.call(ele),delete ele.e,delete h.el,ma.splice(n,1));else for(n=0;n<ma.length;n++)h=ma[n],h.el.id!==this.id||b&&h.anim!==b||!1!==F("raphael.anim.stop."+this.id,this,h.anim)&&ma.splice(n--,1);return this};F.on("raphael.remove",J);F.on("raphael.clear",J);U.toString=function(){return"Raphaël’s object"};
U.toFront=function(){if(this.removed)return this;var b=a._engine.getNode(this),h=this.parent,f=this.followers,n;a._tofront(this,h)&&h.canvas.appendChild(b);b=0;for(h=f.length;b<h;b++)(n=f[b]).stalk&&n.el[n.stalk](this);return this};U.toBack=function(){if(this.removed)return this;var b=a._engine.getNode(this),h=this.parent,f=this.followers,n;a._toback(this,h)&&h.canvas.insertBefore(b,h.canvas.firstChild);b=0;for(h=f.length;b<h;b++)(n=f[b]).stalk&&n.el[n.stalk](this);return this};U.insertAfter=function(b){if(this.removed)return this;
var h=a._engine.getNode(this),f=a._engine.getLastNode(b),n=b.parent.canvas,q=this.followers,A;f.nextSibling?n.insertBefore(h,f.nextSibling):n.appendChild(h);a._insertafter(this,b,this.parent,b.parent);h=0;for(f=q.length;h<f;h++)(A=q[h]).stalk&&A.el[A.stalk](b);return this};U.insertBefore=function(b){if(this.removed)return this;var h=a._engine.getNode(this),f=a._engine.getNode(b),n=this.followers,q;b.parent.canvas.insertBefore(h,f);a._insertbefore(this,b,this.parent,b.parent);this.parent=b.parent;
h=0;for(f=n.length;h<f;h++)(q=n[h]).stalk&&q.el[q.stalk](b);return this};U.appendChild=function(b){if(this.removed||"group"!==this.type)return this;var h=this.followers,f,n,q;if(b.parent===this)return b.toFront(),this;n=a._engine.getNode(b);a._tear(b,b.parent);this.canvas.appendChild(n);b.parent=this;!this.bottom&&(this.bottom=b);b.prev=this.top;b.next=null;this.top&&(this.top.next=b);this.top=b;n=0;for(q=h.length;n<q;n++)(f=h[n]).stalk&&f.el[f.stalk](b);return this};U.removeChild=function(b){if(this.removed||
"group"!==this.type||b.parent!==this)return this;var h=a._engine.getNode(b),f=this.paper;a._tear(b,this);f.canvas.appendChild(h);this.parent=f;!f.bottom&&(f.bottom=this);(this.prev=f.top)&&(f.top.next=this);f.top=this;this.next=null;return this};var ya=function(b){this.items=[];this.length=0;this.type="set";if(b)for(var h=0,f=b.length;h<f;h++)!b[h]||b[h].constructor!=U.constructor&&b[h].constructor!=ya||(this[this.items.length]=this.items[this.items.length]=b[h],this.length++)},va=ya.prototype;va.push=
function(){for(var b,h,f=0,n=arguments.length;f<n;f++)!(b=arguments[f])||b.constructor!=U.constructor&&b.constructor!=ya||(h=this.items.length,this[h]=this.items[h]=b,this.length++);return this};va.pop=function(){this.length&&delete this[this.length--];return this.items.pop()};va.forEach=function(b,h){for(var f=0,n=this.items.length;f<n&&!1!==b.call(h,this.items[f],f);f++);return this};for(var pa in U)U.hasOwnProperty(pa)&&(va[pa]=function(b){return function(){var h=arguments;return this.forEach(function(f){f[b][v](f,
h)})}}(pa));va.attr=function(b,h){if(b&&a.is(b,B)&&a.is(b[0],"object"))for(var f=0,n=b.length;f<n;f++)this.items[f].attr(b[f]);else for(f=0,n=this.items.length;f<n;f++)this.items[f].attr(b,h);return this};va.clear=function(){for(;this.length;)this.pop()};va.splice=function(b,h,f){b=0>b?Ua(this.length+b,0):b;h=Ua(0,Pa(this.length-b,isNaN(h)&&this.length||h));var n=[],q=[],A=[],u;for(u=2;u<arguments.length;u++)A.push(arguments[u]);for(u=0;u<h;u++)q.push(this[b+u]);for(;u<this.length-b;u++)n.push(this[b+
u]);var a=A.length;for(u=0;u<a+n.length;u++)this.items[b+u]=this[b+u]=u<a?A[u]:n[u-a];for(u=this.items.length=this.length-=h-a;this[u];)delete this[u++];return new ya(q)};va.exclude=function(b){for(var h=0,f=this.length;h<f;h++)if(this[h]==b)return this.splice(h,1),!0};va.animate=function(b,h,f,n){!a.is(f,"function")&&f||(n=f||null);var q=this.items.length,A=q,u=this,D;if(!q)return this;n&&(D=function(){!--q&&n.call(u)});f=a.is(f,"string")?f:D;h=a.animation(b,h,f,D);for(b=this.items[--A].animate(h);A--;)this.items[A]&&
!this.items[A].removed&&this.items[A].animateWith(b,h,h);return this};va.insertAfter=function(b){for(var h=this.items.length;h--;)this.items[h].insertAfter(b);return this};va.getBBox=function(){for(var b=[],h=[],f=[],n=[],q=this.items.length;q--;)if(!this.items[q].removed){var A=this.items[q].getBBox();b.push(A.x);h.push(A.y);f.push(A.x+A.width);n.push(A.y+A.height)}b=Pa[v](0,b);h=Pa[v](0,h);f=Ua[v](0,f);n=Ua[v](0,n);return{x:b,y:h,x2:f,y2:n,width:f-b,height:n-h}};va.clone=function(b){b=new ya;for(var h=
0,f=this.items.length;h<f;h++)b.push(this.items[h].clone());return b};va.toString=function(){return"Raphaël‘s set"};va.glow=function(b){var h=this.paper.set();this.forEach(function(f,n){var q=f.glow(b);null!=q&&q.forEach(function(b,f){h.push(b)})});return h};a.registerFont=function(b){if(!b.face)return b;this.fonts=this.fonts||{};var h={w:b.w,face:{},glyphs:{}},f=b.face["font-family"],n;for(n in b.face)b.face.hasOwnProperty(n)&&(h.face[n]=b.face[n]);this.fonts[f]?this.fonts[f].push(h):this.fonts[f]=
[h];if(!b.svg){h.face["units-per-em"]=Ka(b.face["units-per-em"],10);for(var q in b.glyphs)if(b.glyphs.hasOwnProperty(q)&&(f=b.glyphs[q],h.glyphs[q]={w:f.w,k:{},d:f.d&&"M"+f.d.replace(/[mlcxtrv]/g,function(b){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[b]||"M"})+"z"},f.k))for(var A in f.k)f.hasOwnProperty(A)&&(h.glyphs[q].k[A]=f.k[A])}return b};ba.getFont=function(b,h,f,n){n=n||"normal";f=f||"normal";h=+h||{normal:400,bold:700,lighter:300,bolder:800}[h]||400;if(a.fonts){var q=a.fonts[b];if(!q){b=new RegExp("(^|\\s)"+
b.replace(/[^\w\d\s+!~.:_-]/g,"")+"(\\s|$)","i");for(var A in a.fonts)if(a.fonts.hasOwnProperty(A)&&b.test(A)){q=a.fonts[A];break}}var u;if(q)for(A=0,b=q.length;A<b&&(u=q[A],u.face["font-weight"]!=h||u.face["font-style"]!=f&&u.face["font-style"]||u.face["font-stretch"]!=n);A++);return u}};ba.print=function(b,h,f,n,q,A,u){A=A||"middle";u=Ua(Pa(u||0,1),-1);var D=Ea(f).split(""),K=0,ea=0,c="";a.is(n,f)&&(n=this.getFont(n));if(n){f=(q||16)/n.face["units-per-em"];var Y=n.face.bbox.split(zb);q=+Y[0];var e=
Y[3]-Y[1],ka=0;A=+Y[1]+("baseline"==A?e+ +n.face.descent:e/2);for(var Y=0,d=D.length;Y<d;Y++){if("\n"==D[Y])ea=ra=K=0,ka+=e;else var Da=ea&&n.glyphs[D[Y-1]]||{},ra=n.glyphs[D[Y]],K=K+(ea?(Da.w||n.w)+(Da.k&&Da.k[D[Y]]||0)+n.w*u:0),ea=1;ra&&ra.d&&(c+=a.transformPath(ra.d,["t",K*f,ka*f,"s",f,f,q,A,"t",(b-q)/f,(h-A)/f]))}}return this.path(c).attr({fill:"#000",stroke:"none"})};ba.add=function(b){if(a.is(b,"array"))for(var h=this.set(),f=0,n=b.length,q;f<n;f++)q=b[f]||{},ta.hasOwnProperty(q.type)&&h.push(this[q.type]().attr(q));
return h};a.format=function(b,h){var f=a.is(h,B)?[0].concat(h):arguments;b&&a.is(b,"string")&&f.length-1&&(b=b.replace(Tb,function(b,h){return null==f[++h]?"":f[h]}));return b||""};a.fullfill=function(){var b=/\{([^\}]+)\}/g,h=/(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g,f=function(b,f,n){var q=n;f.replace(h,function(b,h,f,n,A){h=h||n;q&&(h in q&&(q=q[h]),"function"==typeof q&&A&&(q=q()))});return q=(null==q||q==n?b:q)+""};return function(h,n){return String(h).replace(b,function(b,h){return f(b,
h,n)})}}();a.ninja=function(){aa?T.win.Raphael=oa:delete Raphael;return a};var ub=a.vml&&.5||0;a.crispBound=A(function(b,h,f,n,q){var A={},u;b=b||0;h=h||0;f=f||0;n=n||0;q=q||0;u=q%2/2+ub;A.x=Fa(b+u)-u;A.y=Fa(h+u)-u;A.width=Fa(b+f+u)-u-A.x;A.height=Fa(h+n+u)-u-A.y;A["stroke-width"]=q;0===A.width&&0!==f&&(A.width=1);0===A.height&&0!==n&&(A.height=1);return A},a);U.crisp=function(){var b=this.attrs,h,f=this.attr(["x","y","width","height","stroke-width"]),f=a.crispBound(f.x,f.y,f.width,f.height,f["stroke-width"]);
for(h in f)b[h]===f[h]&&delete f[h];return this.attr(f)};a.st=va;a.define=function(b,h,f,n,q,A){var u;if(a.is(b,B))for(A=0,u=b.length;A<u;A++)a.define(b[A]);else if(a.is(b,"object"))a.define(b.name,b[b.name],b.ca,b.fn,b.e,b.data);else if(b&&!a.fn[b])return a.fn[b]=function(){var A=arguments,u=h.apply(this,A),D;if(n&&a.is(n,"object"))for(D in n)u[D]=n[D];if(q&&a.is(q,"object"))for(D in q)u[D]&&u[D](q[D]);if(f){if(a.is(f,"function"))u.ca[b]=f;else for(D in f)u.ca[D]=f[D];u.ca[b]&&(a._lastArgIfGroup(A,
!0),A.length&&u.attr(b,Q.call(A)))}return u},f&&(a.fn[b].ca=f),n&&(a.fn[b].fn=n),q&&(a.fn[b].e=q),A&&(a.fn[b].data=A),a.fn[b]};(function(b,h,f){function n(){/in/.test(b.readyState)?setTimeout(n,9):a.eve("raphael.DOMload")}null==b.readyState&&b.addEventListener&&(b.addEventListener(h,f=function(){b.removeEventListener(h,f,!1);b.readyState="complete"},!1),b.readyState="loading");n()})(M,"DOMContentLoaded");F.on("raphael.DOMload",function(){e=!0});"undefined"===typeof k&&"object"===typeof window&&(k=
window);(function(){function b(h){for(var f={},n=h,q=f;n;)n.node&&n.node.style&&"none"===n.node.style.display&&(n.show(),q._doHide=!0),n=n.parent,q.parent={},q=q.parent;return function(){for(var b=h,n=f;b;)n._doHide&&b.hide(),b=b.parent,n=n.parent}}if(a.svg){var h=String,f=parseFloat,n=parseInt,q=Math,A=q.max,u=q.abs,D=q.pow,K=q.sqrt,ea=/[, ]+/,c=!(!/AppleWebKit/.test(a._g.win.navigator.userAgent)||/Chrome/.test(a._g.win.navigator.userAgent)&&!(29>a._g.win.navigator.appVersion.match(/Chrome\/(\d+)\./)[1])),
Y=a.eve,e={block:"M5,0 0,2.5 5,5z",classic:"M5,0 0,2.5 5,5 3.5,3 3.5,2z",diamond:"M2.5,0 5,2.5 2.5,5 0,2.5z",open:"M6,1 1,3.5 6,6",oval:"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z"},ka={};a.toString=function(){return"Your browser supports SVG.\nYou are running Raphaël "+this.version};a._url="";var d=function(b,h){var f=b.gradient;if(f){if(f===h)return;f.refCount--;f.refCount||f.parentNode.removeChild(f);delete b.gradient}h&&(b.gradient=h,h.refCount++)},Da=a._createNode=function(b,f){if(f){"string"==
typeof b&&(b=Da(b));for(var n in f)f.hasOwnProperty(n)&&("xlink:"==n.substring(0,6)?b.setAttributeNS("http://www.w3.org/1999/xlink",n.substring(6),h(f[n])):b.setAttribute(n,h(f[n])))}else b=a._g.doc.createElementNS("http://www.w3.org/2000/svg",b);return b},ra={userSpaceOnUse:"userSpaceOnUse",objectBoundingBox:"objectBoundingBox"},ca={pad:"pad",redlect:"reflect",repeat:"repeat"},g=function(b,n){if(!b.paper||!b.paper.defs)return 0;var ea="linear",c=b.paper,Y=a.getElementID((c.id+"-"+n).replace(/[\(\)\s%:,\xb0#]/g,
"_")),e=.5,ka=.5,g,ua,N,l,db,v=b.node,B=v.style,k=a._g.doc.getElementById(Y);if(!k){n=h(n).replace(a._radial_gradient,function(b,h){ea="radial";h=h&&h.split(",")||[];l=h[5];db=h[6];var n=h[0],q=h[1],A=h[2],u=h[3],a=h[4],c=n&&q,Y;A&&(g=/\%/.test(A)?A:f(A));if(l===ra.userSpaceOnUse)return c&&(e=n,ka=q),u&&a&&(ua=u,N=a,c||(e=ua,ka=N)),"";c&&(e=f(n),ka=f(q),n=2*(.5<ka)-1,.25<(Y=D(e-.5,2))+D(ka-.5,2)&&.25>Y&&(ka=K(.25-Y)*n+.5)&&.5!==ka&&(ka=ka.toFixed(5)-1E-5*n));u&&a&&(ua=f(u),N=f(a),n=2*(.5<N)-1,.25<
(Y=D(ua-.5,2))+D(N-.5,2)&&.25>Y&&(N=K(.25-Y)*n+.5)&&.5!==N&&(N=N.toFixed(5)-1E-5*n),c||(e=ua,ka=N));return""});n=n.split(/\s*\-\s*/);if("linear"==ea){var k=n.shift(),m=k.match(/\((.*)\)/),Wa,m=m&&m[1]&&m[1].split(/\s*\,\s*/),k=-f(k);if(isNaN(k))return null;m&&m.length?(m[0]in ra?(l=m.shift(),m[0]in ca&&(db=m.shift())):(m[4]&&(l=m[4]),m[5]&&(db=m[5])),Wa=[m[0]||"0%",m[1]||"0%",m[2]||"100%",m[3]||"0%"]):(Wa=[0,0,q.cos(a.rad(k)),q.sin(a.rad(k))],k=1/(A(u(Wa[2]),u(Wa[3]))||1),Wa[2]*=k,Wa[3]*=k,0>Wa[2]&&
(Wa[0]=-Wa[2],Wa[2]=0),0>Wa[3]&&(Wa[1]=-Wa[3],Wa[3]=0))}m=a._parseDots(n);if(!m)return null;k=Da(ea+"Gradient",{id:Y});k.refCount=0;l in ra&&k.setAttribute("gradientUnits",h(l));db in ca&&k.setAttribute("spreadMethod",h(db));"radial"===ea?(void 0!==g&&k.setAttribute("r",h(g)),void 0!==ua&&void 0!==N&&(k.setAttribute("cx",h(ua)),k.setAttribute("cy",h(N))),k.setAttribute("fx",h(e)),k.setAttribute("fy",h(ka))):Da(k,{x1:Wa[0],y1:Wa[1],x2:Wa[2],y2:Wa[3]});Wa=0;for(var na=m.length;Wa<na;Wa++)k.appendChild(Da("stop",
{offset:m[Wa].offset?m[Wa].offset:Wa?"100%":"0%","stop-color":m[Wa].color||"#fff","stop-opacity":void 0===m[Wa].opacity?1:m[Wa].opacity}));c.defs.appendChild(k)}d(b,k);Da(v,{fill:"url('"+a._url+"#"+Y+"')",opacity:1,"fill-opacity":1});B.fill="";B.opacity=1;return B.fillOpacity=1},ua=function(b){var h=b.getBBox(1);Da(b.pattern,{patternTransform:b.matrix.invert()+" translate("+h.x+","+h.y+")"})},N=function(b,f,n){if("path"==b.type){for(var q=h(f).toLowerCase().split("-"),A=b.paper,u=n?"end":"start",
D=b.node,K=b.attrs,ea=K["stroke-width"],Y=q.length,c="classic",d,ra,ca=3,g=3,ua=5;Y--;)switch(q[Y]){case "block":case "classic":case "oval":case "diamond":case "open":case "none":c=q[Y];break;case "wide":g=5;break;case "narrow":g=2;break;case "long":ca=5;break;case "short":ca=2}"open"==c?(ca+=2,g+=2,ua+=2,d=1,ra=n?4:1,q={fill:"none",stroke:K.stroke}):(ra=d=ca/2,q={fill:K.stroke,stroke:"none"});b._.arrows?n?(b._.arrows.endPath&&ka[b._.arrows.endPath]--,b._.arrows.endMarker&&ka[b._.arrows.endMarker]--):
(b._.arrows.startPath&&ka[b._.arrows.startPath]--,b._.arrows.startMarker&&ka[b._.arrows.startMarker]--):b._.arrows={};if("none"!=c){var Y="raphael-marker-"+c,N="raphael-marker-"+u+c+ca+g+"-obj"+b.id;a._g.doc.getElementById(Y)?ka[Y]++:(A.defs.appendChild(Da(Da("path"),{"stroke-linecap":"round",d:e[c],id:Y})),ka[Y]=1);var l=a._g.doc.getElementById(N);l?(ka[N]++,ca=l.getElementsByTagName("use")[0]):(l=Da(Da("marker"),{id:N,markerHeight:g,markerWidth:ca,orient:"auto",refX:ra,refY:g/2}),ca=Da(Da("use"),
{"xlink:href":"#"+Y,transform:(n?"rotate(180 "+ca/2+" "+g/2+") ":"")+"scale("+ca/ua+","+g/ua+")","stroke-width":(1/((ca/ua+g/ua)/2)).toFixed(4)}),l.appendChild(ca),A.defs.appendChild(l),ka[N]=1);Da(ca,q);A=d*("diamond"!=c&&"oval"!=c);n?(n=b._.arrows.startdx*ea||0,ea=a.getTotalLength(K.path)-A*ea):(n=A*ea,ea=a.getTotalLength(K.path)-(b._.arrows.enddx*ea||0));q={};q["marker-"+u]="url('"+a._url+"#"+N+"')";if(ea||n)q.d=a.getSubpath(K.path,n,ea);Da(D,q);b._.arrows[u+"Path"]=Y;b._.arrows[u+"Marker"]=N;
b._.arrows[u+"dx"]=A;b._.arrows[u+"Type"]=c;b._.arrows[u+"String"]=f}else n?(n=b._.arrows.startdx*ea||0,ea=a.getTotalLength(K.path)-n):(n=0,ea=a.getTotalLength(K.path)-(b._.arrows.enddx*ea||0)),b._.arrows[u+"Path"]&&Da(D,{d:a.getSubpath(K.path,n,ea)}),delete b._.arrows[u+"Path"],delete b._.arrows[u+"Marker"],delete b._.arrows[u+"dx"],delete b._.arrows[u+"Type"],delete b._.arrows[u+"String"];for(q in ka)ka.hasOwnProperty(q)&&!ka[q]&&(b=a._g.doc.getElementById(q))&&b.parentNode.removeChild(b)}},l={"":["none"],
none:["none"],"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},db=function(b,f,n){var q=l[h(f).toLowerCase()],A,u,D;if(f=q||void 0!==f&&[].concat(f)){A=b.attrs["stroke-width"]||1;n={round:A,square:A,butt:0}[n["stroke-linecap"]||b.attrs["stroke-linecap"]]||0;u=f.length;D=q?A:1;if("none"==f[0])q=f;else for(q=[];u--;)q[u]=f[u]*D+(u%2?1:-1)*n,0>=q[u]&&(q[u]=.01+(1>=A?n:0)),isNaN(q[u])&&(q[u]=0);a.is(f,"array")&&
Da(b.node,{"stroke-dasharray":q.join(",")})}},v=function(b,h){for(var f in h)Y("raphael.attr."+f+"."+b.id,b,h[f],f),b.ca[f]&&b.attr(f,h[f])},B=a._setFillAndStroke=function(b,f){if(b.paper.canvas){var q=b.node,D=b.attrs,K=b.paper,Y=q.style,e=Y.visibility;f&&f.text&&f.text.replace&&(f.text=f.text.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&<br\/>lt;|&l<br\/>t;|&lt<br\/>;/g,"<<br/>").replace(/&<br\/>gt;|&g<br\/>t;|&gt<br\/>;/g,"><br/>"));Y.visibility="hidden";for(var ka in f)if(f.hasOwnProperty(ka)&&
a._availableAttrs.hasOwnProperty(ka)){var ra=f[ka];D[ka]=ra;switch(ka){case "blur":b.blur(ra);break;case "href":case "title":case "target":var ca=q.parentNode;if("a"!=ca.tagName.toLowerCase()){if(""==ra)break;var l=Da("a");l.raphael=!0;l.raphaelid=q.raphaelid;ca.insertBefore(l,q);l.appendChild(q);ca=l}"target"==ka?ca.setAttributeNS("http://www.w3.org/1999/xlink","show","blank"==ra?"new":ra):ca.setAttributeNS("http://www.w3.org/1999/xlink",ka,ra);q.titleNode=ca;break;case "cursor":Y.cursor=ra;break;
case "transform":b.transform(ra);break;case "rotation":a.is(ra,"array")?b.rotate.apply(b,ra):b.rotate(ra);break;case "arrow-start":N(b,ra);break;case "arrow-end":N(b,ra,1);break;case "clip-path":var v=!0;case "clip-rect":ca=!v&&h(ra).split(ea);b._.clipispath=!!v;if(v||4==ca.length){b.clip&&b.clip.parentNode.parentNode.removeChild(b.clip.parentNode);var l=Da("clipPath"),k=Da(v?"path":"rect");l.id=a.getElementID(a.createUUID());Da(k,v?{d:ra?D["clip-path"]=a._pathToAbsolute(ra):a._availableAttrs.path,
fill:"none"}:{x:ca[0],y:ca[1],width:ca[2],height:ca[3],transform:b.matrix.invert()});l.appendChild(k);K.defs.appendChild(l);Da(q,{"clip-path":"url('"+a._url+"#"+l.id+"')"});b.clip=k}!ra&&(ra=q.getAttribute("clip-path"))&&((ra=a._g.doc.getElementById(ra.replace(/(^url\(#|\)$)/g,"")))&&ra.parentNode.removeChild(ra),Da(q,{"clip-path":""}),delete b.clip);break;case "path":"path"==b.type&&(Da(q,{d:ra?D.path=a._pathToAbsolute(ra):a._availableAttrs.path}),b._.dirty=1,b._.arrows&&("startString"in b._.arrows&&
N(b,b._.arrows.startString),"endString"in b._.arrows&&N(b,b._.arrows.endString,1)));break;case "width":if(q.setAttribute(ka,ra),b._.dirty=1,D.fx)ka="x",ra=D.x;else break;case "x":D.fx&&(ra=-D.x-(D.width||0));case "rx":if("rx"==ka&&"rect"==b.type)break;case "cx":q.setAttribute(ka,ra);b.pattern&&ua(b);b._.dirty=1;break;case "height":if(q.setAttribute(ka,ra),b._.dirty=1,D.fy)ka="y",ra=D.y;else break;case "y":D.fy&&(ra=-D.y-(D.height||0));case "ry":if("ry"==ka&&"rect"==b.type)break;case "cy":q.setAttribute(ka,
ra);b.pattern&&ua(b);b._.dirty=1;break;case "r":"rect"==b.type?Da(q,{rx:ra,ry:ra}):q.setAttribute(ka,ra);b._.dirty=1;break;case "src":"image"==b.type&&q.setAttributeNS("http://www.w3.org/1999/xlink","href",ra);break;case "stroke-width":if(1!=b._.sx||1!=b._.sy)ra/=A(u(b._.sx),u(b._.sy))||1;K._vbSize&&(ra*=K._vbSize);c&&0===ra&&(ra=1E-6);q.setAttribute(ka,ra);D["stroke-dasharray"]&&db(b,D["stroke-dasharray"],f);b._.arrows&&("startString"in b._.arrows&&N(b,b._.arrows.startString),"endString"in b._.arrows&&
N(b,b._.arrows.endString,1));break;case "stroke-dasharray":db(b,ra,f);break;case "fill":var B=h(ra).match(a._ISURL);if(B){var l=Da("pattern"),Wa=Da("image");l.id=a.getElementID(a.createUUID());Da(l,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1});Da(Wa,{x:0,y:0,"xlink:href":B[1]});l.appendChild(Wa);(function(b){a._preload(B[1],function(){var h=this.offsetWidth,f=this.offsetHeight;Da(b,{width:h,height:f});Da(Wa,{width:h,height:f});K.safari()})})(l);K.defs.appendChild(l);Y.fill="url('"+a._url+
"#"+l.id+"')";Da(q,{fill:Y.fill});b.pattern=l;b.pattern&&ua(b);break}ca=a.getRGB(ra);if(!ca.error)delete f.gradient,delete D.gradient,!a.is(D.opacity,"undefined")&&a.is(f.opacity,"undefined")&&Da(q,{opacity:D.opacity}),!a.is(D["fill-opacity"],"undefined")&&a.is(f["fill-opacity"],"undefined")&&Da(q,{"fill-opacity":D["fill-opacity"]}),b.gradient&&d(b);else if(("circle"==b.type||"ellipse"==b.type||"r"!=h(ra).charAt())&&g(b,ra)){if("opacity"in D||"fill-opacity"in D)if(ca=a._g.doc.getElementById(q.getAttribute("fill").replace(/^url\(#|\)$/g,
"")))ca=ca.getElementsByTagName("stop"),Da(ca[ca.length-1],{"stop-opacity":("opacity"in D?D.opacity:1)*("fill-opacity"in D?D["fill-opacity"]:1)});D.gradient=ra;D.fill="none";Y.fill="";break}ca.hasOwnProperty("opacity")?(Da(q,{"fill-opacity":Y.fillOpacity=1<ca.opacity?ca.opacity/100:ca.opacity}),b._.fillOpacityDirty=!0):b._.fillOpacityDirty&&a.is(D["fill-opacity"],"undefined")&&a.is(f["fill-opacity"],"undefined")&&(q.removeAttribute("fill-opacity"),Y.fillOpacity="",delete b._.fillOpacityDirty);case "stroke":ca=
a.getRGB(ra);q.setAttribute(ka,ca.hex);Y[ka]=ca.hex;"stroke"==ka&&(ca.hasOwnProperty("opacity")?(Da(q,{"stroke-opacity":Y.strokeOpacity=1<ca.opacity?ca.opacity/100:ca.opacity}),b._.strokeOpacityDirty=!0):b._.strokeOpacityDirty&&a.is(D["stroke-opacity"],"undefined")&&a.is(f["stroke-opacity"],"undefined")&&(q.removeAttribute("stroke-opacity"),Y.strokeOpacity="",delete b._.strokeOpacityDirty),b._.arrows&&("startString"in b._.arrows&&N(b,b._.arrows.startString),"endString"in b._.arrows&&N(b,b._.arrows.endString,
1)));break;case "gradient":"circle"!=b.type&&"ellipse"!=b.type&&"r"==h(ra).charAt()||g(b,ra);break;case "line-height":case "vertical-align":break;case "visibility":"hidden"===ra?b.hide():b.show();break;case "opacity":D.gradient&&!D.hasOwnProperty("stroke-opacity")&&Da(q,{"stroke-opacity":1<ra?ra/100:ra});case "fill-opacity":if(D.gradient){if(ca=a._g.doc.getElementById(q.getAttribute("fill").replace(/^url\(#|\)$/g,"")))ca=ca.getElementsByTagName("stop"),Da(ca[ca.length-1],{"stop-opacity":ra});break}default:"font-size"==
ka&&(ra=n(ra,10)+"px"),ca=ka.replace(/(\-.)/g,function(b){return b.substring(1).toUpperCase()}),Y[ca]=ra,b._.dirty=1,q.setAttribute(ka,ra)}}"text"===b.type&&!f["_do-not-tune"]&&m(b,f);Y.visibility=e}},k=a._updateFollowers=function(){var b,h,f,n=arguments,q=ha.call(n),A=ha.call(n);b=0;for(h=q.followers.length;b<h;b++)f=q.followers[b].el,f[A].apply(f,n)},m=function(b,n){if("text"==b.type&&(n.hasOwnProperty("text")||n.hasOwnProperty("font")||n.hasOwnProperty("font-size")||n.hasOwnProperty("x")||n.hasOwnProperty("y")||
n.hasOwnProperty("line-height")||n.hasOwnProperty("vertical-align"))){var A=b.attrs,u=b.node,D=u.firstChild&&a._g.doc.defaultView.getComputedStyle(u.firstChild,""),K=D?f(a._g.doc.defaultView.getComputedStyle(u.firstChild,"").getPropertyValue("font-size")):10,ea=f(n["line-height"]||A["line-height"])||1.2*K,Y=A.hasOwnProperty("vertical-align")?A["vertical-align"]:"middle",c=(n.direction||(D?D.getPropertyValue("direction"):"initial")).toLowerCase(),ka=!!document.documentMode;isNaN(ea)&&(ea=1.2*K);a.is(n.text,
"array")&&(n.text=n.text.join("<br>"));Y="top"===Y?-.5:"bottom"===Y?.5:0;if(n.hasOwnProperty("text")&&(n.text!==A.text||b._textdirty)){for(A.text=n.text;u.firstChild;)u.removeChild(u.firstChild);for(var e=h(n.text).split(/\n|<br\s*?\/?>/ig),K=[],ra=0,d=e.length;ra<d;ra++)D=Da("tspan"),ra?Da(D,{dy:ea,x:A.x}):Da(D,{dy:ea*e.length*Y,x:A.x}),e[ra]||(D.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),e[ra]=" "),D.appendChild(a._g.doc.createTextNode(e[ra])),u.appendChild(D),
K[ra]=D,!ka&&"rtl"===c&&ra<d-1&&(D=Da("tspan"),Da(D,{visibility:"hidden","font-size":"0px"}),D.appendChild(a._g.doc.createTextNode("i")),u.appendChild(D));b._textdirty=!1}else for(K=u.getElementsByTagName("tspan"),ra=ka=0,d=K.length;ra<d;ra++)if(D=K[ra],c=D.attributes[0],!c||"visibility"!==c.name&&"visibility"!==c.nodeName||"hidden"!==c.value&&"hidden"!==c.nodeValue)ra?Da(D,{dy:ea,x:A.x}):(c=K[1]&&K[1].attributes[0],!c||"visibility"!==c.name&&"visibility"!==c.nodeName||"hidden"!==c.value&&"hidden"!==
c.nodeValue||(ka=q.floor(.5*K.length)),Da(K[0],{dy:ea*(K.length-ka)*Y,x:A.x}));Da(u,{x:A.x,y:A.y});b._.dirty=1;u=b._getBBox();ea=A.y-(u.y+u.height/2);if(u.isCalculated)switch(A["vertical-align"]){case "top":ea=.75*u.height;break;case "bottom":ea=-(.25*u.height);break;default:ea=A.y-(u.y+.25*u.height)}ea&&a.is(ea,"finite")&&K[0]&&Da(K[0],{dy:ea})}},Wa=function(b,h,f){f=f||h;f.canvas&&f.canvas.appendChild(b);this.node=this[0]=b;b.raphael=!0;b.raphaelid=this.id=a._oid++;this.matrix=a.matrix();this.realPath=
null;this.attrs=this.attrs||{};this.followers=this.followers||[];this.paper=h;this.ca=this.customAttributes=this.customAttributes||new h._CustomAttributes;this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1};this.parent=f;!f.bottom&&(f.bottom=this);(this.prev=f.top)&&(f.top.next=this);f.top=this;this.next=null},na=a.el;Wa.prototype=na;na.constructor=Wa;a._engine.getNode=function(b){b=b.node||b[0].node;return b.titleNode||b};a._engine.getLastNode=function(b){b=b.node||b[b.length-1].node;return b.titleNode||
b};na.rotate=function(b,n,q){if(this.removed)return this;k(this,"rotate",b,n,q);b=h(b).split(ea);b.length-1&&(n=f(b[1]),q=f(b[2]));b=f(b[0]);null==q&&(n=q);if(null==n||null==q)q=this.getBBox(1),n=q.x+q.width/2,q=q.y+q.height/2;this.transform(this._.transform.concat([["r",b,n,q]]));return this};na.scale=function(b,n,q,A){var u;if(this.removed)return this;k(this,"scale",b,n,q,A);b=h(b).split(ea);b.length-1&&(n=f(b[1]),q=f(b[2]),A=f(b[3]));b=f(b[0]);null==n&&(n=b);null==A&&(q=A);if(null==q||null==A)u=
this.getBBox(1);q=null==q?u.x+u.width/2:q;A=null==A?u.y+u.height/2:A;this.transform(this._.transform.concat([["s",b,n,q,A]]));return this};na.translate=function(b,n){if(this.removed)return this;k(this,"translate",b,n);b=h(b).split(ea);b.length-1&&(n=f(b[1]));b=f(b[0])||0;this.transform(this._.transform.concat([["t",b,+n||0]]));return this};na.transform=function(b){var h=this._;if(null==b)return h.transform;a._extractTransform(this,b);this.clip&&!h.clipispath&&Da(this.clip,{transform:this.matrix.invert()});
this.pattern&&ua(this);this.node&&Da(this.node,{transform:this.matrix});if(1!=h.sx||1!=h.sy)b=this.attrs.hasOwnProperty("stroke-width")?this.attrs["stroke-width"]:1,this.attr({"stroke-width":b});return this};na.hide=function(){k(this,"hide");!this.removed&&this.paper.safari(this.node.style.display="none");return this};na.show=function(){k(this,"show");!this.removed&&this.paper.safari(this.node.style.display="");return this};na.remove=function(){if(!this.removed&&this.parent.canvas){var b=a._engine.getNode(this),
h=this.paper,f=h.defs;h.__set__&&h.__set__.exclude(this);Y.unbind("raphael.*.*."+this.id);for(this.gradient&&f&&d(this);f=this.followers.pop();)f.el.remove();for(;f=this.bottom;)f.remove();this._drag&&this.undrag();if(this.events)for(;f=this.events.pop();)f.unbind();this.parent.canvas.removeChild(b);this.removeData();delete h._elementsById[this.id];a._tear(this,this.parent);for(f in this)this[f]="function"===typeof this[f]?a._removedFactory(f):null;this.removed=!0}};na._getBBox=function(){var h,f=
this.node,n={},q=this.attrs,A,u,a="text"===this.type,D=!!document.documentMode;D&&a?h=b(this):"none"===f.style.display&&(this.show(),u=!0);try{n=f.getBBox(),a&&(void 0===n.x&&(n.isCalculated=!0,A=q["text-anchor"],n.x=(q.x||0)-n.width*("start"===A?0:"middle"===A?.5:1)),void 0===n.y&&(n.isCalculated=!0,A=q["vertical-align"],n.y=(q.y||0)-n.height*("bottom"===A?1:"middle"===A?.5:0)))}catch(K){}finally{n=n||{}}D&&a?h&&h():u&&this.hide();return n};na.attr=function(b,h){if(this.removed)return this;if(null==
b){var f={},n;for(n in this.attrs)this.attrs.hasOwnProperty(n)&&(f[n]=this.attrs[n]);f.gradient&&"none"==f.fill&&(f.fill=f.gradient)&&delete f.gradient;f.transform=this._.transform;f.visibility="none"===this.node.style.display?"hidden":"visible";return f}if(null==h&&a.is(b,"string")){if("fill"==b&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;if("transform"==b)return this._.transform;if("visibility"==b)return"none"===this.node.style.display?"hidden":"visible";var f=b.split(ea),
q={},A=0;for(n=f.length;A<n;A++)b=f[A],b in this.attrs?q[b]=this.attrs[b]:a.is(this.ca[b],"function")?q[b]=this.ca[b].def:q[b]=a._availableAttrs[b];return n-1?q:q[f[0]]}if(null==h&&a.is(b,"array")){q={};A=0;for(n=b.length;A<n;A++)q[b[A]]=this.attr(b[A]);return q}null!=h?(f={},f[b]=h):null!=b&&a.is(b,"object")&&(f=b);if(!1!==a.stopEvent)for(A in f)Y("raphael.attr."+A+"."+this.id,this,f[A],A);var u={};for(A in this.ca)if(this.ca[A]&&f.hasOwnProperty(A)&&a.is(this.ca[A],"function")&&!this.ca["_invoked"+
A]){this.ca["_invoked"+A]=!0;n=this.ca[A].apply(this,[].concat(f[A]));delete this.ca["_invoked"+A];for(q in n)n.hasOwnProperty(q)&&(f[q]=n[q]);this.attrs[A]=f[A];!1===n&&(u[A]=f[A],delete f[A])}B(this,f);var D,A=0;for(n=this.followers.length;A<n;A++)D=this.followers[A],D.cb&&!D.cb.call(D.el,f,this)||D.el.attr(f);for(q in u)f[q]=u[q];return this};na.blur=function(b){if(0!==+b){var h=Da("filter"),f=Da("feGaussianBlur");this.attrs.blur=b;h.id=a.getElementID(a.createUUID());Da(f,{stdDeviation:+b||1.5});
h.appendChild(f);this.paper.defs.appendChild(h);this._blur=h;Da(this.node,{filter:"url('"+a._url+"#"+h.id+"')"})}else this._blur&&(this._blur.parentNode.removeChild(this._blur),delete this._blur,delete this.attrs.blur),this.node.removeAttribute("filter")};na.on=function(b,h){if(this.removed)return this;var f=h;a.supportsTouch&&(b=a._touchMap[b]||"click"===b&&"touchstart"||b,f=function(b){b.preventDefault();h()});this.node["on"+b]=f;return this};a._engine.path=function(b,h,f){var n=Da("path");b=new Wa(n,
b,f);b.type="path";B(b,h);v(b,h);return b};a._engine.group=function(b,h,f){var n=Da("g");b=new Wa(n,b,f);b.type="group";b.canvas=b.node;b.top=b.bottom=null;b._id=h||"";h&&n.setAttribute("class","raphael-group-"+b.id+"-"+h);return b};a._engine.circle=function(b,h,f){var n=Da("circle");b=new Wa(n,b,f);b.type="circle";B(b,h);v(b,h);return b};a._engine.rect=function(b,h,f){var n=Da("rect");b=new Wa(n,b,f);b.type="rect";h.rx=h.ry=h.r;B(b,h);v(b,h);return b};a._engine.ellipse=function(b,h,f){var n=Da("ellipse");
b=new Wa(n,b,f);b.type="ellipse";B(b,h);v(b,h);return b};a._engine.image=function(b,h,f){var n=Da("image");b=new Wa(n,b,f);b.type="image";n.setAttribute("preserveAspectRatio","none");B(b,h);v(b,h);return b};a._engine.text=function(b,h,f,n){var q=Da("text");b=new Wa(q,b,f);b.type="text";b._textdirty=!0;n&&b.css&&b.css(n,void 0,!0);B(b,h);v(b,h);return b};a._engine.setSize=function(b,h){this.width=b||this.width;this.height=h||this.height;this.canvas.setAttribute("width",this.width);this.canvas.setAttribute("height",
this.height);this._viewBox&&this.setViewBox.apply(this,this._viewBox);return this};a._engine.create=function(){var b=a._getContainer.apply(0,arguments),h=b&&b.container,f=b.x,n=b.y,q=b.width,b=b.height;if(!h)throw Error("SVG container not found.");var A=Da("svg"),u;u="overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:-moz-none;-khtml-user-select:none;-ms-user-select:none;user-select:none;-o-user-select:none;cursor:default;vertical-align:middle;";var D,
f=f||0,n=n||0,q=q||512,b=b||342;Da(A,{height:b,version:1.1,width:q,xmlns:"http://www.w3.org/2000/svg"});1==h?(A.style.cssText=u+"position:absolute;left:"+f+"px;top:"+n+"px",a._g.doc.body.appendChild(A),D=1):(A.style.cssText=u+"position:relative",h.firstChild?h.insertBefore(A,h.firstChild):h.appendChild(A));h=new a._Paper;h.width=q;h.height=b;h.canvas=A;Da(A,{id:"raphael-paper-"+h.id});h.clear();h._left=h._top=0;D&&(h.renderfix=function(){});h.renderfix();return h};a._engine.setViewBox=function(b,
h,f,n,q){Y("raphael.setViewBox",this,this._viewBox,[b,h,f,n,q]);var u=A(f/this.width,n/this.height),a=this.top,D=q?"meet":"xMinYMin",K;null==b?(this._vbSize&&(u=1),delete this._vbSize,K="0 0 "+this.width+" "+this.height):(this._vbSize=u,K=b+" "+h+" "+f+" "+n);for(Da(this.canvas,{viewBox:K,preserveAspectRatio:D});u&&a;)D="stroke-width"in a.attrs?a.attrs["stroke-width"]:1,a.attr({"stroke-width":D}),a._.dirty=1,a._.dirtyT=1,a=a.prev;this._viewBox=[b,h,f,n,!!q];return this};a.prototype.renderfix=function(){var b=
this.canvas,h=b.style,f;try{f=b.getScreenCTM()||b.createSVGMatrix()}catch(n){f=b.createSVGMatrix()}b=-f.e%1;f=-f.f%1;if(b||f)b&&(this._left=(this._left+b)%1,h.left=this._left+"px"),f&&(this._top=(this._top+f)%1,h.top=this._top+"px")};a.prototype._desc=function(b){var h=this.desc;if(h)for(;h.firstChild;)h.removeChild(h.firstChild);else this.desc=h=Da("desc"),this.canvas.appendChild(h);h.appendChild(a._g.doc.createTextNode(a.is(b,"string")?b:"Created with Red Raphaël "+a.version))};a.prototype.clear=
function(){var b;for(Y("raphael.clear",this);b=this.bottom;)b.remove();for(b=this.canvas;b.firstChild;)b.removeChild(b.firstChild);this.bottom=this.top=null;b.appendChild(this.desc=Da("desc"));b.appendChild(this.defs=Da("defs"))};a.prototype.remove=function(){var b;for(Y("raphael.remove",this);b=this.bottom;)b.remove();this.defs&&this.defs.parentNode.removeChild(this.defs);this.desc&&this.desc.parentNode.removeChild(this.desc);this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);
for(b in this)this[b]="function"==typeof this[b]?a._removedFactory(b):null;this.removed=!0};var Gb=a.st,S;for(S in na)na.hasOwnProperty(S)&&!Gb.hasOwnProperty(S)&&(Gb[S]=function(b){return function(){var h=arguments;return this.forEach(function(f){f[b].apply(f,h)})}}(S))}})();"undefined"===typeof k&&"object"===typeof window&&(k=window);(function(){if(a.vml){var b=String,h=parseFloat,f=Math,n=f.round,q=f.max,A=f.min,u=f.sqrt,D=f.abs,K=/[, ]+/,ea=a.eve,Y={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},
c=/([clmz]),?([^clmz]*)/gi,ka=/ progid:\S+Blur\([^\)]+\)/g,e=/-?[^,\s-]+/g,ra={path:1,rect:1,image:1},Da={circle:1,ellipse:1},d=function(h){var f=/[ahqstv]/ig,q=a._pathToAbsolute;b(h).match(f)&&(q=a._path2curve);f=/[clmz]/g;if(q==a._pathToAbsolute&&!b(h).match(f))return(h=b(h).replace(c,function(b,h,f){var q=[],A="m"==h.toLowerCase(),u=Y[h];f.replace(e,function(b){A&&2==q.length&&(u+=q+Y["m"==h?"l":"L"],q=[]);q.push(n(21600*b))});return u+q}))||"m0,0";var f=q(h),A;h=[];for(var u=0,D=f.length;u<D;u++){q=
f[u];A=f[u][0].toLowerCase();"z"==A&&(A="x");for(var K=1,ea=q.length;K<ea;K++)A+=n(21600*q[K])+(K!=ea-1?",":"");h.push(A)}return h.length?h.join(" "):"m0,0"},ca=function(b,h,f){var n=a.matrix();n.rotate(-b,.5,.5);return{dx:n.x(h,f),dy:n.y(h,f)}},g=function(b,h,f,n,q,A){var u=b._,a=b.matrix,K=u.fillpos;b=b.node;var ea=b.style,Y=1,c="",ka=21600/h,e=21600/f;ea.visibility="hidden";if(h&&f){b.coordsize=D(ka)+" "+D(e);ea.rotation=A*(0>h*f?-1:1);A&&(q=ca(A,n,q),n=q.dx,q=q.dy);0>h&&(c+="x");0>f&&(c+=" y")&&
(Y=-1);ea.flip=c;b.coordorigin=n*-ka+" "+q*-e;if(K||u.fillsize)if(n=(n=b.getElementsByTagName("fill"))&&n[0])b.removeChild(n),K&&(q=ca(A,a.x(K[0],K[1]),a.y(K[0],K[1])),n.position=q.dx*Y+" "+q.dy*Y),u.fillsize&&(n.size=u.fillsize[0]*D(h)+" "+u.fillsize[1]*D(f)),b.appendChild(n);ea.visibility="visible"}};a._url="";a.toString=function(){return"Your browser doesn’t support SVG. Falling down to VML.\nYou are running Raphaël "+this.version};var ua=function(h,f,n){f=b(f).toLowerCase().split("-");n=n?"end":
"start";for(var q=f.length,A="classic",u="medium",a="medium";q--;)switch(f[q]){case "block":case "classic":case "oval":case "diamond":case "open":case "none":A=f[q];break;case "wide":case "narrow":a=f[q];break;case "long":case "short":u=f[q]}h=h.node.getElementsByTagName("stroke")[0];h[n+"arrow"]=A;h[n+"arrowlength"]=u;h[n+"arrowwidth"]=a},N=function(b,h){for(var f in h)ea("raphael.attr."+f+"."+b.id,b,h[f],f),b.ca[f]&&b.attr(f,h[f])},l=a._setFillAndStroke=function(f,u){if(f.paper.canvas){f.attrs=
f.attrs||{};var D=f.node,ea=f.attrs,Y=D.style,c=ra[f.type]&&(u.x!=ea.x||u.y!=ea.y||u.width!=ea.width||u.height!=ea.height||u.cx!=ea.cx||u.cy!=ea.cy||u.rx!=ea.rx||u.ry!=ea.ry||u.r!=ea.r),ka=Da[f.type]&&(ea.cx!=u.cx||ea.cy!=u.cy||ea.r!=u.r||ea.rx!=u.rx||ea.ry!=u.ry),e="group"===f.type,ca;for(ca in u)u.hasOwnProperty(ca)&&(ea[ca]=u[ca]);c&&(ea.path=a._getPath[f.type](f),f._.dirty=1);u.href&&(D.href=u.href);u.title&&(D.title=u.title);u.target&&(D.target=u.target);u.cursor&&(Y.cursor=u.cursor);"blur"in
u&&f.blur(u.blur);if(u.path&&"path"==f.type||c)D.path=d(~b(ea.path).toLowerCase().indexOf("r")?a._pathToAbsolute(ea.path):ea.path),"image"==f.type&&(f._.fillpos=[ea.x,ea.y],f._.fillsize=[ea.width,ea.height],g(f,1,1,0,0,0));"transform"in u&&f.transform(u.transform);"rotation"in u&&(Y=u.rotation,a.is(Y,"array")?f.rotate.apply(f,Y):f.rotate(Y));"visibility"in u&&("hidden"===u.visibility?f.hide():f.show());ka&&(Y=+ea.cx,ka=+ea.cy,c=+ea.rx||+ea.r||0,ca=+ea.ry||+ea.r||0,D.path=a.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x",
n(21600*(Y-c)),n(21600*(ka-ca)),n(21600*(Y+c)),n(21600*(ka+ca)),n(21600*Y)));"clip-rect"in u&&(Y=b(u["clip-rect"]).split(K),4==Y.length&&(Y[0]=+Y[0],Y[1]=+Y[1],Y[2]=+Y[2]+Y[0],Y[3]=+Y[3]+Y[1],c=e?D:D.clipRect||a._g.doc.createElement("div"),ka=c.style,e?(f.clip=Y.slice(),c=f.matrix.offset(),c=[h(c[0]),h(c[1])],Y[0]-=c[0],Y[1]-=c[1],Y[2]-=c[0],Y[3]-=c[1],ka.width="1px",ka.height="1px"):D.clipRect||(ka.top="0",ka.left="0",ka.width=f.paper.width+"px",ka.height=f.paper.height+"px",D.parentNode.insertBefore(c,
D),c.appendChild(D),c.raphael=!0,c.raphaelid=D.raphaelid,D.clipRect=c),ka.position="absolute",ka.clip=a.format("rect({1}px {2}px {3}px {0}px)",Y)),u["clip-rect"]||(e&&f.clip?(D.style.clip="rect(0px 10800px 10800px 0px)",delete f.clip):D.clipRect&&(D.clipRect.style.clip="rect(0px 10800px 10800px 0px)")));if(f.textpath||e)e=e?D.style:f.textpath.style,u.font&&(e.font=u.font),u["font-family"]&&(e.fontFamily='"'+u["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g,"")+'"'),u["font-size"]&&(e.fontSize=
u["font-size"]),u["font-weight"]&&(e.fontWeight=u["font-weight"]),u["font-style"]&&(e.fontStyle=u["font-style"]);"arrow-start"in u&&ua(f,u["arrow-start"]);"arrow-end"in u&&ua(f,u["arrow-end"],1);if(null!=u.opacity||null!=u["stroke-width"]||null!=u.fill||null!=u.src||null!=u.stroke||null!=u["stroke-width"]||null!=u["stroke-opacity"]||null!=u["fill-opacity"]||null!=u["stroke-dasharray"]||null!=u["stroke-miterlimit"]||null!=u["stroke-linejoin"]||null!=u["stroke-linecap"]){e=D.getElementsByTagName("fill");
Y=-1;e=e&&e[0];!e&&(e=B("fill"));"image"==f.type&&u.src&&(e.src=u.src);u.fill&&(e.on=!0);if(null==e.on||"none"==u.fill||null===u.fill)e.on=!1;e.on&&u.fill&&((ka=b(u.fill).match(a._ISURL))?(e.parentNode==D&&D.removeChild(e),e.rotate=!0,e.src=ka[1],e.type="tile",c=f.getBBox(1),e.position=c.x+" "+c.y,f._.fillpos=[c.x,c.y],a._preload(ka[1],function(){f._.fillsize=[this.offsetWidth,this.offsetHeight]})):(ka=a.getRGB(u.fill),e.color=ka.hex,e.src="",e.type="solid",ka.error&&(f.type in{circle:1,ellipse:1}||
"r"!=b(u.fill).charAt())&&v(f,u.fill,e)?(ea.fill="none",ea.gradient=u.fill,e.rotate=!1):"opacity"in ka&&!("fill-opacity"in u)&&(Y=ka.opacity)));if(-1!==Y||"fill-opacity"in u||"opacity"in u)ka=((+ea["fill-opacity"]+1||2)-1)*((+ea.opacity+1||2)-1)*((+Y+1||2)-1),ka=A(q(ka,0),1),e.opacity=ka,e.src&&(e.color="none");D.appendChild(e);e=D.getElementsByTagName("stroke")&&D.getElementsByTagName("stroke")[0];Y=!1;!e&&(Y=e=B("stroke"));if(u.stroke&&"none"!=u.stroke||u["stroke-width"]||null!=u["stroke-opacity"]||
u["stroke-dasharray"]||u["stroke-miterlimit"]||u["stroke-linejoin"]||u["stroke-linecap"])e.on=!0;"none"!=u.stroke&&null!==u.stroke&&null!=e.on&&0!=u.stroke&&0!=u["stroke-width"]||(e.on=!1);ka=a.getRGB("stroke"in u?u.stroke:ea.stroke);e.on&&u.stroke&&(e.color=ka.hex);ka=((+ea["stroke-opacity"]+1||2)-1)*((+ea.opacity+1||2)-1)*((+ka.opacity+1||2)-1);c=.75*(h(u["stroke-width"])||1);ka=A(q(ka,0),1);null==u["stroke-width"]&&(c=ea["stroke-width"]);u["stroke-width"]&&(e.weight=c);c&&1>c&&(ka*=c)&&(e.weight=
1);e.opacity=ka;u["stroke-linejoin"]&&(e.joinstyle=u["stroke-linejoin"])||Y&&(Y.joinstyle="miter");e.miterlimit=u["stroke-miterlimit"]||8;u["stroke-linecap"]&&(e.endcap="butt"==u["stroke-linecap"]?"flat":"square"==u["stroke-linecap"]?"square":"round");u["stroke-dasharray"]&&(ka={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"},e.dashstyle=ka.hasOwnProperty(u["stroke-dasharray"])?
ka[u["stroke-dasharray"]]:u["stroke-dasharray"].join&&u["stroke-dasharray"].join(" ")||"");Y&&D.appendChild(e)}if("text"==f.type){f.paper.canvas.style.display="";D=f.paper.span;e=ea.font&&ea.font.match(/\d+(?:\.\d*)?(?=px)/);ka=ea["line-height"]&&(ea["line-height"]+"").match(/\d+(?:\.\d*)?(?=px)/);Y=D.style;ea.font&&(Y.font=ea.font);ea["font-family"]&&(Y.fontFamily=ea["font-family"]);ea["font-weight"]&&(Y.fontWeight=ea["font-weight"]);ea["font-style"]&&(Y.fontStyle=ea["font-style"]);e=h(ea["font-size"]||
e&&e[0])||10;Y.fontSize=100*e+"px";ka=h(ea["line-height"]||ka&&ka[0])||12;ea["line-height"]&&(Y.lineHeight=100*ka+"px");a.is(u.text,"array")&&(u.text=f.textpath.string=u.text.join("\n").replace(/<br\s*?\/?>/ig,"\n"));f.textpath.string&&(D.innerHTML=b(f.textpath.string).replace(/</g,"&#60;").replace(/&/g,"&#38;").replace(/\n/g,"<br>"));D=D.getBoundingClientRect();f.W=ea.w=(D.right-D.left)/100;f.H=ea.h=(D.bottom-D.top)/100;f.X=ea.x;f.Y=ea.y;switch(ea["vertical-align"]){case "top":f.bby=f.H/2;break;
case "bottom":f.bby=-f.H/2;break;default:f.bby=0}("x"in u||"y"in u||void 0!==f.bby)&&(f.path.v=a.format("m{0},{1}l{2},{1}",n(21600*ea.x),n(21600*(ea.y+(f.bby||0))),n(21600*ea.x)+1));D="x y text font font-family font-weight font-style font-size line-height".split(" ");e=0;for(Y=D.length;e<Y;e++)if(D[e]in u){f._.dirty=1;break}switch(ea["text-anchor"]){case "start":f.textpath.style["v-text-align"]="left";f.bbx=f.W/2;break;case "end":f.textpath.style["v-text-align"]="right";f.bbx=-f.W/2;break;default:f.textpath.style["v-text-align"]=
"center",f.bbx=0}f.textpath.style["v-text-kern"]=!0}}},db=a._updateFollowers=function(){var b,h,f,n=arguments,q=ha.call(n),A=ha.call(n);b=0;for(h=q.followers.length;b<h;b++)f=q.followers[b].el,f[A].apply(f,n)},v=function(f,n,q){f.attrs=f.attrs||{};var A=Math.pow,D="linear",K=".5 .5";f.attrs.gradient=n;n=b(n).replace(a._radial_gradient,function(b,f){D="radial";f=f&&f.split(",")||[];var n=f[3],q=f[4];n&&q&&(n=h(n),q=h(q),.25<A(n-.5,2)+A(q-.5,2)&&(q=u(.25-A(n-.5,2))*(2*(.5<q)-1)+.5),K=n+" "+q);return""});
n=n.split(/\s*\-\s*/);if("linear"==D){var ea=n.shift(),ea=-h(ea);if(isNaN(ea))return null}n=a._parseDots(n);if(!n)return null;f=f.shape||f.node;if(n.length){q.parentNode==f&&f.removeChild(q);q.on=!0;q.method="none";q.color=n[0].color;q.color2=n[n.length-1].color;for(var Y=[],c=1,e=void 0===n[0].opacity?1:n[0].opacity,ka=0,ra=n.length;ka<ra;ka++)n[ka].offset&&Y.push(n[ka].offset+" "+n[ka].color),void 0!==n[ka].opacity&&(c=n[ka].opacity);q.colors=Y.length?Y.join():"0% "+q.color;q.opacity=c;q["o:opacity2"]=
e;"radial"==D?(q.type="gradientTitle",q.focus="100%",q.focussize="0 0",q.focusposition=K,q.angle=0):(q.type="gradient",q.angle=(270-ea)%360);f.appendChild(q)}return 1},k=function(b,h,f){f=f||h;var n;f.canvas&&f.canvas.appendChild(b);n=B("skew");n.on=!0;b.appendChild(n);this.skew=n;this.node=this[0]=b;b.raphael=!0;b.raphaelid=this.id=a._oid++;this.Y=this.X=0;this.attrs=this.attrs||{};this.followers=this.followers||[];this.paper=h;this.ca=this.customAttributes=this.customAttributes||new h._CustomAttributes;
this.matrix=a.matrix();this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1};this.parent=f;!f.bottom&&(f.bottom=this);(this.prev=f.top)&&(f.top.next=this);f.top=this;this.next=null},f=a.el;k.prototype=f;f.constructor=k;f.transform=function(h){if(null==h)return this._.transform;var f=this.paper._viewBoxShift,n=f?"s"+[f.scale,f.scale]+"-1-1t"+[f.dx,f.dy]:"",q;f&&(q=h=b(h).replace(/\.{3}|\u2026/g,this._.transform||""));a._extractTransform(this,n+h);var f=this.matrix.clone(),A=this.skew;h=
this.node;var n=~b(this.attrs.fill).indexOf("-"),u=!b(this.attrs.fill).indexOf("url(");f.translate(-.5,-.5);u||n||"image"==this.type?(A.matrix="1 0 0 1",A.offset="0 0",A=f.split(),n&&A.noRotation||!A.isSimple?(h.style.filter=f.toFilter(),f=this.getBBox(),n=this.getBBox(1),u=f.x2&&n.x2&&"x2"||"x",A=f.y2&&n.y2&&"y2"||"y",u=f[u]-n[u],f=f[A]-n[A],h.coordorigin=-21600*u+" "+-21600*f,g(this,1,1,u,f,0)):(h.style.filter="",g(this,A.scalex,A.scaley,A.dx,A.dy,A.rotate))):(h.style.filter="",A.matrix=b(f),A.offset=
f.offset());q&&(this._.transform=q);return this};f.rotate=function(f,n,q){if(this.removed)return this;db(this,"rotate",f,n,q);if(null!=f){f=b(f).split(K);f.length-1&&(n=h(f[1]),q=h(f[2]));f=h(f[0]);null==q&&(n=q);if(null==n||null==q)q=this.getBBox(1),n=q.x+q.width/2,q=q.y+q.height/2;this._.dirtyT=1;this.transform(this._.transform.concat([["r",f,n,q]]));return this}};f.translate=function(f,n){if(this.removed)return this;db(this,"translate",f,n);f=b(f).split(K);f.length-1&&(n=h(f[1]));f=h(f[0])||0;
n=+n||0;this._.bbox&&(this._.bbox.x+=f,this._.bbox.y+=n);this.transform(this._.transform.concat([["t",f,n]]));return this};f.scale=function(f,n,q,A){if(this.removed)return this;db(this,"scale",f,n,q,A);f=b(f).split(K);f.length-1&&(n=h(f[1]),q=h(f[2]),A=h(f[3]),isNaN(q)&&(q=null),isNaN(A)&&(A=null));f=h(f[0]);null==n&&(n=f);null==A&&(q=A);if(null==q||null==A)var u=this.getBBox(1);q=null==q?u.x+u.width/2:q;A=null==A?u.y+u.height/2:A;this.transform(this._.transform.concat([["s",f,n,q,A]]));this._.dirtyT=
1;return this};f.hide=function(b){db(this,"hide",b);!this.removed&&(this.node.style.display="none");return this};f.show=function(b){db(this,"show",b);!this.removed&&(this.node.style.display="");return this};f._getBBox=function(){return this.removed?{}:{x:this.X+(this.bbx||0)-this.W/2,y:this.Y+(this.bby||0)-this.H/2,width:this.W,height:this.H}};f.remove=function(){if(!this.removed&&this.parent.canvas){var b=a._engine.getNode(this),h=this.paper,f=this.shape;h.__set__&&h.__set__.exclude(this);ea.unbind("raphael.*.*."+
this.id);f&&f.parentNode.removeChild(f);for(b.parentNode&&b.parentNode.removeChild(b);b=this.followers.pop();)b.el.remove();for(;b=this.bottom;)b.remove();this._drag&&this.undrag();if(this.events)for(;b=this.events.pop();)b.unbind();this.removeData();delete h._elementsById[this.id];a._tear(this,this.parent);for(b in this)this[b]="function"===typeof this[b]?a._removedFactory(b):null;this.removed=!0}};f.attr=function(b,h){if(this.removed)return this;if(null==b){var f={},n;for(n in this.attrs)this.attrs.hasOwnProperty(n)&&
(f[n]=this.attrs[n]);f.gradient&&"none"==f.fill&&(f.fill=f.gradient)&&delete f.gradient;f.transform=this._.transform;f.visibility="none"===this.node.style.display?"hidden":"visible";return f}if(null==h&&a.is(b,"string")){if("fill"==b&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;if("visibility"==b)return"none"===this.node.style.display?"hidden":"visible";var f=b.split(K),q={},A=0;for(n=f.length;A<n;A++)b=f[A],b in this.attrs?q[b]=this.attrs[b]:a.is(this.ca[b],"function")?
q[b]=this.ca[b].def:q[b]=a._availableAttrs[b];return n-1?q:q[f[0]]}if(this.attrs&&null==h&&a.is(b,"array")){q={};A=0;for(n=b.length;A<n;A++)q[b[A]]=this.attr(b[A]);return q}null!=h&&(f={},f[b]=h);null==h&&a.is(b,"object")&&(f=b);if(!1!==a.stopEvent)for(A in f)ea("raphael.attr."+A+"."+this.id,this,f[A],A);if(f){var u={};for(A in this.ca)if(this.ca[A]&&f.hasOwnProperty(A)&&a.is(this.ca[A],"function")&&!this.ca["_invoked"+A]){this.ca["_invoked"+A]=!0;n=this.ca[A].apply(this,[].concat(f[A]));delete this.ca["_invoked"+
A];for(q in n)n.hasOwnProperty(q)&&(f[q]=n[q]);this.attrs[A]=f[A];!1===n&&(u[A]=f[A],delete f[A])}"text"in f&&"text"==this.type&&(a.is(f.text,"array")&&(f.text=f.text.join("\n")),this.textpath.string=f.text.replace(/<br\s*?\/?>/ig,"\n"));l(this,f);var D,A=0;for(n=this.followers.length;A<n;A++)D=this.followers[A],D.cb&&!D.cb.call(D.el,f,this)||D.el.attr(f);for(q in u)f[q]=u[q]}return this};f.blur=function(b){var h=this.node.runtimeStyle,f=h.filter,f=f.replace(ka,"");0!==+b?(this.attrs.blur=b,h.filter=
f+"  progid:DXImageTransform.Microsoft.Blur(pixelradius="+(+b||1.5)+")",h.margin=a.format("-{0}px 0 0 -{0}px",n(+b||1.5))):(h.filter=f,h.margin=0,delete this.attrs.blur);return this};f.on=function(b,h){if(this.removed)return this;this.node["on"+b]=function(){var b=a._g.win.event;b.target=b.srcElement;h(b)};return this};a._engine.getNode=function(b){b=b.node||b[0].node;return b.clipRect||b};a._engine.getLastNode=function(b){b=b.node||b[b.length-1].node;return b.clipRect||b};a._engine.group=function(b,
h,f){var n=a._g.doc.createElement("div"),q=new k(n,b,f);n.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px";q._id=h||"";h&&(n.className="raphael-group-"+q.id+"-"+h);(f||b).canvas.appendChild(n);q.type="group";q.canvas=q.node;q.transform=a._engine.group.transform;q.top=null;q.bottom=null;return q};a._engine.group.transform=function(f){if(null==f)return this._.transform;var n=this.node.style,q=this.clip,A=this.paper._viewBoxShift,u=A?"s"+[A.scale,A.scale]+"-1-1t"+[A.dx,A.dy]:"";A&&
(f=b(f).replace(/\.{3}|\u2026/g,this._.transform||""));a._extractTransform(this,u+f);f=this.matrix;u=f.offset();A=h(u[0])||0;u=h(u[1])||0;n.left=A+"px";n.top=u+"px";n.zoom=(this._.tzoom=f.get(0))+"";q&&(n.clip=a.format("rect({1}px {2}px {3}px {0}px)",[q[0]-A,q[1]-u,q[2]-A,q[3]-u]));return this};a._engine.path=function(b,h,f){var n=B("shape");n.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px";n.coordsize="21600 21600";n.coordorigin=b.coordorigin;b=new k(n,b,f);b.type=h.type||"path";
b.path=[];b.Path="";h.type&&delete h.type;l(b,h);N(b,h);return b};a._engine.rect=function(b,h,f){var n=a._rectPath(h.x,h.y,h.w,h.h,h.r);h.path=n;h.type="rect";b=b.path(h,f);h=b.attrs;b.X=h.x;b.Y=h.y;b.W=h.width;b.H=h.height;h.path=n;return b};a._engine.ellipse=function(b,h,f){h.type="ellipse";b=b.path(h,f);h=b.attrs;b.X=h.x-h.rx;b.Y=h.y-h.ry;b.W=2*h.rx;b.H=2*h.ry;return b};a._engine.circle=function(b,h,f){h.type="circle";b=b.path(h,f);h=b.attrs;b.X=h.x-h.r;b.Y=h.y-h.r;b.W=b.H=2*h.r;return b};a._engine.image=
function(b,h,f){var n=a._rectPath(h.x,h.y,h.w,h.h);h.path=n;h.type="image";h.stroke="none";b=b.path(h,f);f=b.attrs;var n=b.node,q=n.getElementsByTagName("fill")[0];f.src=h.src;b.X=f.x=h.x;b.Y=f.y=h.y;b.W=f.width=h.w;b.H=f.height=h.h;q.parentNode==n&&n.removeChild(q);q.rotate=!0;q.src=f.src;q.type="tile";b._.fillpos=[f.x,f.y];b._.fillsize=[f.w,f.h];n.appendChild(q);g(b,1,1,0,0,0);return b};a._engine.text=function(h,f,q,A){var u=B("shape"),D=B("path"),K=B("textpath");x=f.x||0;y=f.y||0;text=f.text;D.v=
a.format("m{0},{1}l{2},{1}",n(21600*f.x),n(21600*f.y),n(21600*f.x)+1);D.textpathok=!0;K.string=b(f.text).replace(/<br\s*?\/?>/ig,"\n");K.on=!0;u.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px";u.coordsize="21600 21600";u.coordorigin="0 0";h=new k(u,h,q);h.shape=u;h.path=D;h.textpath=K;h.type="text";h.attrs.text=b(f.text||"");h.attrs.x=f.x;h.attrs.y=f.y;h.attrs.w=1;h.attrs.h=1;A&&h.css&&h.css(A,void 0,!0);l(h,f);N(h,f);u.appendChild(K);u.appendChild(D);return h};a._engine.setSize=
function(b,h){var f=this.canvas.style;this.width=b;this.height=h;b==+b&&(b+="px");h==+h&&(h+="px");b&&(f.width=b);h&&(f.height=h);f.clip="rect(0 "+f.width+" "+f.height+" 0)";this._viewBox&&a._engine.setViewBox.apply(this,this._viewBox);return this};a._engine.setViewBox=function(b,h,f,n,A){ea("raphael.setViewBox",this,this._viewBox,[b,h,f,n,A]);var u=this.width,a=this.height,D=1/q(f/u,n/a),K,Y;A&&(K=a/n,Y=u/f,f*K<u&&(b-=(u-f*K)/2/K),n*Y<a&&(h-=(a-n*Y)/2/Y));this._viewBox=[b,h,f,n,!!A];this._viewBoxShift=
{dx:-b,dy:-h,scale:D};this.forEach(function(b){b.transform("...")});return this};var B;a._engine.initWin=function(h){var f=h.document;f.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!f.namespaces.rvml&&f.namespaces.add("rvml","urn:schemas-microsoft-com:vml"),B=a._createNode=function(h,n){var q=f.createElement("<rvml:"+h+' class="rvml">'),A;for(A in n)q[A]=b(n[A]);return q}}catch(n){B=a._createNode=function(h,n){var q=f.createElement("<"+h+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">'),
A;for(A in n)q[A]=b(n[A]);return q}}};a._engine.initWin(a._g.win);a._engine.create=function(){var b=a._getContainer.apply(0,arguments),h=b.container,f=b.height,n=b.width,q=b.x,b=b.y;if(!h)throw Error("VML container not found.");var A=new a._Paper,u=A.canvas=a._g.doc.createElement("div"),D=u.style,q=q||0,b=b||0,n=n||512,f=f||342;A.width=n;A.height=f;n==+n&&(n+="px");f==+f&&(f+="px");A.coordsize="21600000 21600000";A.coordorigin="0 0";u.id="raphael-paper-"+A.id;A.span=a._g.doc.createElement("span");
A.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;";u.appendChild(A.span);D.cssText=a.format("top:0;left:0;width:{0};height:{1};display:inline-block;cursor:default;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",n,f);1==h?(a._g.doc.body.appendChild(u),D.left=q+"px",D.top=b+"px",D.position="absolute"):h.firstChild?h.insertBefore(u,h.firstChild):h.appendChild(u);A.renderfix=function(){};return A};a.prototype.clear=function(){var b;for(ea("raphael.clear",
this);b=this.bottom;)b.remove();this.canvas.innerHTML="";this.span=a._g.doc.createElement("span");this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";this.canvas.appendChild(this.span);this.bottom=this.top=null};a.prototype.remove=function(){var b;for(ea("raphael.remove",this);b=this.bottom;)b.remove();this.canvas.parentNode.removeChild(this.canvas);for(b in this)this[b]="function"==typeof this[b]?a._removedFactory(b):null;return!0};
var m=a.st,Wa;for(Wa in f)f.hasOwnProperty(Wa)&&!m.hasOwnProperty(Wa)&&(m[Wa]=function(b){return function(){var h=arguments;return this.forEach(function(f){f[b].apply(f,h)})}}(Wa))}})();aa?T.win.Raphael=a:Raphael=a;return a},!0);g.Raphael=r;g.Raphael.desc="";F&&F!==r?k.Raphael=F:k.Raphael===r&&(k.Raphael=void 0)})(k||window)}]);FusionCharts.register("module",["private","fusioncharts.redraphael.helper",function(){var g=this.hcLib,k=g.Raphael,F={};k.fn._elementFromEvent=function(g){if(!g||this.removed)return null;
var k=g.srcElement||g.target||(g=g.originalEvent)&&(g.srcElement||g.target)||F;"tspan"===k.nodeName&&(k=k.parentNode);return this.getById(k.raphaelid)};k.requestAnimFrame=g.schedular.addJob&&function(k){g.schedular.addJob(k,void 0,void 0,g.priorityList.animation)}}]);FusionCharts.register("module",["private","fusioncharts.redraphael.css",function(){var g=this.hcLib,k=g.Raphael,F=k.eve,r=k._g,E=k.fn,z=k.el,G=/[, ]+/,a=/\B([A-Z]{1})/g,L,d;L=function(a){this.styleSheet="";this.rules={};this.ns=a||""};
d=L.prototype;d.getSheet=function(){var a=this.node;this.styleSheet=d.getStyleSheet("fusioncharts-raphael-stylesheet");this.styleSheet||(a=this.node=r.doc.createElement("style"),a.setAttribute("id",k.format("raphael-stylesheet-{0}",k._oid++)),a.setAttribute("type","text/css"),a.setAttribute("title","fusioncharts-raphael-stylesheet"),(r.doc.head||r.doc.getElementsByTagName("head")[0]).appendChild(this.node),this.styleSheet=d.getStyleSheet("fusioncharts-raphael-stylesheet"));return this.styleSheet};
d.getStyleSheet=function(a){for(var d=r.doc.styleSheets,g=d.length,k;g--;)if(k=d[g],k.title===a)return k};d.applyCSSRule=function(a,d){var g=this.styleSheet,k;if(!g)if(a&&d)g=this.getSheet();else return;k=(g.rules||g.cssRules||{}).length||0;g.insertRule?g.insertRule(a+"{"+d+"}",k):g.addRule&&g.addRule(a,d,k)};d.removeCSS=function(a){var d=this.styleSheet,g=d.rules||d.cssRules||{},k=g.length||0,t;for(a=a||this.ns;k--;)t=g[k],(new RegExp(a)).test(t.selectorText)&&(d.removeRule?d.removeRule(k):d.deleteRule(k))};
d.destroy=function(){this.removeCSS();delete this.node;delete this.styleSheet;delete this.ns;delete this.rules};d.clear=function(){this.removeCSS();this.rules={}};d.add=function(d,g,k){var p,t="",m=this.rules[d]||(this.rules[d]={}),c=k?"":"\t";k=k?":":": ";for(p in g)(m[p]=g[p])&&(t+=c+p.replace(a,"-$1").toLowerCase()+k+m[p]+";");this.applyCSSRule(d,t)};d.render=function(){this.setCssText()};d.setCssText=function(d){var g=d?"":"\t";d=d?":":": ";var k="",p="",t,m;for(t in this.rules){k="";p=t.replace(/(^|\,)/g,
"$1"+this.ns+" ");t=this.rules[t];for(m in t)t[m]&&(k+=g+m.replace(a,"-$1").toLowerCase()+d+t[m]+";");this.applyCSSRule(p,k)}};F.on("raphael.new",function(){this._stylesheet=this._stylesheet||new L;this.cssNamespace("")});F.on("raphael.remove",function(){this._stylesheet&&this._stylesheet.destroy();delete this._stylesheet});E.cssNamespace=function(a){arguments.length&&(this._stylesheet.ns=k.format("{0}#raphael-paper-{1}",a&&a+" "||"",this.id));return this._stylesheet.ns};E.cssAddRule=function(a,d){if(1===
arguments.length&&"object"===typeof a){for(var g in a)this.cssAddRule(g,a[g]);return this}return this._stylesheet.add(a,d),this};E.cssRender=function(){return k.svg&&this._stylesheet.render(),this};E.cssClear=function(){return this._stylesheet.clear(),this};k.ca["class"]=function(a){var d=this.node,g=this.paper,p="."+a,g=g._stylesheet&&g._stylesheet.rules,t=this.parent,m=this.attrs,c={},w;if(k.svg)a=a||"",d.setAttribute("class","group"===this.type&&this._id?"raphael-group-"+this.id+"-"+this._id+" "+
a:a);else if(k.vml&&(d.className="group"===this.type?a&&this._id+" "+a||this._id:"rvml "+a,p&&g)){a=g[p];for(w in a)"color"===w&&"text"===this.type&&(w="fill"),!m[w]&&(c[w]=a[w]);for(;t&&t.attr;){if(a=t.attr("class"))for(w in p="."+a+" "+p,a=g[p],a)"color"===w&&"text"===this.type&&(w="fill"),m[w]||c[w]||(c[w]=a[w]);t=t.parent}this.css(c)}};z.css=function(a,d,g){var p,t;if(this.removed)return this;this.styles||(this.styles={});if(null==d&&k.is(a,"string")){g=a.split(G);p={};t=0;for(d=g.length;t<d;t++)a=
g[t],a in this.styles&&(p[a]=this.styles[a]);return d-1?p:p[g[0]]}if(null==d&&k.is(a,"array")){p={};t=0;for(d=a.length;t<d;t++)p[a[t]]=this.styles(a[t]);return p}null!=d?(p={},p[a]=d):null!=a&&k.is(a,"object")&&(p=a);a={};for(t in p)d=t.replace(/\B([A-Z]{1})/g,"-$1").toLowerCase(),k._availableAttrs.hasOwnProperty(d)||"color"===d?("color"===d&&"text"===this.type&&(d="fill"),a[d]=p[t],a.dirty=!0):(F("raphael.css."+d+"."+this.id,this,p[t],d),this.node.style[d]=p[t],this.styles[d]=p[t]);t=0;for(d=this.followers.length;t<
d;t++)this.followers[t].el.attr(p);a.hasOwnProperty("dirty")&&(delete a.dirty,g&&(a["_do-not-tune"]=!0),this.attr(a));return this};z.removeCSS=function(a){var d,r,p;!a&&(a=g.appliedCSS);if(this.removed)return this;k.is(a,"string")&&(a=a.split(","));if(k.is(a,"array"))for(p=a.length,r=0;r<p;r++)d=a[r].replace(/\B([A-Z]{1})/g,"-$1").toLowerCase(),this.node.removeAttribute(d),this.node.style[d]="";return this}}]);FusionCharts.register("module",["private","modules.renderer.js-raphaelexport",function(){var g=
this.hcLib,k=g.Raphael,F=g.pluckNumber,r=g.pluck,E=k._availableAttrs,z=/^matrix\(|\)$/g,G=/\,/g,a=/\n|<br\s*?\/?>/ig,L=/[^\d\.]/ig,d=/[\%\(\)\s,\xb0#]/g,l=/group/ig,P=/&/g,W=/"/g,p=/'/g,t=/</g,m=/>/g,c=0;(function(g){var k=Math,e=parseFloat,v=k.max,H=k.abs,B=k.pow,Q=String,I=/[, ]+/,ha=[{reg:/xmlns\=\"http\:\/\/www.w3.org\/2000\/svg\"/ig,repStr:""},{reg:/^.*<svg /,repStr:'<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" '},{reg:/\/svg>.*$/,repStr:"/svg>"},{reg:/<desc\>[^<]*<\/desc\>/,
repStr:""},{reg:/zIndex="[^"]+"/g,repStr:""},{reg:/url\((\\?[\'\"])[^#]+#/g,repStr:"url($1#"},{reg:/ href=/g,repStr:" xlink:href="},{reg:/(id|class|width|height)=([^" >]+)/g,repStr:'$1="$2"'},{reg:/:(path|rect)/g,repStr:"$1"},{reg:/<ima?ge? ([^\>]+?[^\/])\>/gi,repStr:"<image $1 />"},{reg:/<\/ima?ge?\>/g,repStr:""},{reg:/style="([^"]+)"/g,repStr:function(a){return a.toLowerCase()}}],X={blur:function(){},transform:function(){},src:function(a,c){c.attrSTR+=' xlink:href="'+c.attrs.src+'"'},path:function(a,
c){var e=c.attrs.path,e=g._pathToAbsolute(e||"");c.attrSTR+=' d="'+(e.toString&&e.toString()||"").replace(G," ")+'"'},gradient:function(a,c,l){var m=a.attrs.gradient,t="linear",r,p,ta,N=.5,na=.5,I=p="",Ea="",za,Ka,z,F;r=m.replace(d,"_");if(!l[r]){m=Q(m).replace(g._radial_gradient,function(a,c){var d,g,l,v,m,Ea,w;c=c&&c.split(",")||[];t="radial";d=c[0];g=c[1];l=c[2];v=c[3];m=c[4];F=c[5];w=d&&g;l&&(z=/\%/.test(l)?l:e(l));if("userSpaceOnUse"===F)return w&&(N=d,na=g),v&&m&&(za=v,Ka=m,w||(N=za,na=Ka)),
"";w&&(N=e(d),na=e(g),d=2*(.5<na)-1,.25<(Ea=B(N-.5,2))+B(na-.5,2)&&.25>Ea&&(na=k.sqrt(.25-Ea)*d+.5)&&.5!==na&&(na=na.toFixed(5)-1E-5*d));v&&m&&(za=e(v),Ka=e(m),d=2*(.5<Ka)-1,.25<(Ea=B(za-.5,2))+B(Ka-.5,2)&&.25>Ea&&(Ka=k.sqrt(.25-Ea)*d+.5)&&.5!==Ka&&(Ka=Ka.toFixed(5)-1E-5*d),w||(N=za,na=Ka));return""});m=m.split(/\s*\-\s*/);if("linear"===t){p=m.shift();p=-e(p);if(isNaN(p))return null;ta=[0,0,k.cos(g.rad(p)),k.sin(g.rad(p))];p=1/(v(H(ta[2]),H(ta[3]))||1);ta[2]*=p;ta[3]*=p;0>ta[2]&&(ta[0]=-ta[2],ta[2]=
0);0>ta[3]&&(ta[1]=-ta[3],ta[3]=0)}m=g._parseDots(m);if(!m)return null;"radial"===t?(p='<radialGradient fx = "'+N+'" fy = "'+na+'" cy = "'+Ka+'" cx = "'+za+'" r = "'+z+'" gradientUnits = "'+F+'" id = "'+r+'">',I="</radialGradient>"):(p='<linearGradient x1 = "'+ta[0]+'" y1 = "'+ta[1]+'" x2 = "'+ta[2]+'" y2 = "'+ta[3]+'" gradientTransform ="matrix('+a.matrix.invert()+')" id = "'+r+'">',I="</linearGradient>");a=0;for(ta=m.length;a<ta;a++)Ea+='<stop offset="'+(m[a].offset?m[a].offset:a?"100%":"0%")+'" stop-color="'+
(m[a].color||"#fff")+'" stop-opacity="'+(void 0===m[a].opacity?1:m[a].opacity)+'" />';l[r]=!0;l.str+=p+Ea+I}c.attrSTR+=" fill=\"url('#"+r+"')\""},fill:function(a,c){var e=c.attrs,d=e.fill,l;a.attrs.gradient||(d=g.color(d),l=d.opacity,"text"===a.type?c.styleSTR+="fill:"+d+"; stroke-opacity:0; ":(c.attrSTR+=' fill="'+d+'"',e["fill-opacity"]||!l&&0!==l||(c.attrSTR+=' fill-opacity="'+l+'"')))},stroke:function(a,c){var e=c.attrs,d,l;d=g.color(e.stroke);l=d.opacity;"text"!==a.type&&(c.attrSTR+=' stroke="'+
d+'"',e["stroke-opacity"]||!l&&0!==l||(c.attrSTR+=' stroke-opacity="'+l+'"'))},"clip-rect":function(a,e,g){var l=Q(e.attrs["clip-rect"]),k=l.split(I),l=l.replace(d,"_")+"__"+c++;4===k.length&&(g[l]||(g[l]=!0,g.str+='<clipPath id="'+l+'"><rect x="'+k[0]+'" y="'+k[1]+'" width="'+k[2]+'" height="'+k[3]+'" transform="matrix('+a.matrix.invert().toMatrixString().replace(z,"")+')"/></clipPath>'),e.attrSTR+=' clip-path="url(#'+l+')"')},cursor:function(a,c){var e=c.attrs.cursor;e&&(c.styleSTR+="cursor:"+e+
"; ")},font:function(a,c){c.styleSTR+="font:"+c.attrs.font.replace(/\"/ig," ")+"; "},"font-size":function(a,c){var e=r(c.attrs["font-size"],"10");e&&e.replace&&(e=e.replace(L,""));c.styleSTR+="font-size:"+e+"px; "},"font-weight":function(a,c){c.styleSTR+="font-weight:"+c.attrs["font-weight"]+"; "},"font-family":function(a,c){c.styleSTR+="font-family:"+c.attrs["font-family"]+"; "},"line-height":function(){},"clip-path":function(){},visibility:function(){},"vertical-align":function(){},"text-anchor":function(a,
c){var e=c.attrs["text-anchor"]||"middle";"text"===a.type&&(c.attrSTR+=' text-anchor="'+e+'"')},title:function(){},text:function(c,e){var d=e.attrs,g=d.text,l=r(d["font-size"],d.font,"10"),k=r(d["line-height"]),v,B,N;l&&l.replace&&(l=l.replace(L,""));l=F(l);k&&k.replace&&(k=k.replace(L,""));k=F(k,l&&1.2*l);v=l?.85*l:.75*k;l=d.x;B=r(d["vertical-align"],"middle").toLowerCase();g=Q(g).split(a);N=g.length;d=0;for(v="top"===B?v:"bottom"===B?v-k*N:v-k*N*.5;d<N;d++)e.textSTR+="<tspan ",B=(g[d]||"").replace(P,
"&amp;").replace(W,"&quot;").replace(p,"&#39;").replace(t,"&lt;").replace(m,"&gt;"),e.textSTR=d?e.textSTR+('dy="'+k+'" x="'+l+'" '):e.textSTR+('dy="'+v+'"'),e.textSTR+=">"+B+"</tspan>"}},T=function(a,c){var e="",d={attrSTR:"",styleSTR:"",textSTR:"",attrs:a.attr()},g=a.isShadow,k="",v="",B,N,m=d.attrs;if("none"===a.node.style.display||g)a.next&&(e+=T(a.next,c));else{for(B in m)if("gradient"!==B&&(void 0!==E[B]||X[B])&&void 0!==m[B])if(X[B])X[B](a,d,c);else d.attrSTR+=" "+B+'="'+m[B]+'"';a.attrs.gradient&&
X.gradient(a,d,c);"rect"===a.type&&m.r&&(d.attrSTR+=' rx="'+m.r+'" ry="'+m.r+'"');for(N in a.styles)d.styleSTR+=N+":"+a.styles[N]+"; ";"image"===a.type&&(d.attrSTR+=' preserveAspectRatio="none"');if("text"===a.type&&!m["text-anchor"])X["text-anchor"](a,d);a.bottom&&(k=T(a.bottom,c));a.next&&(v=T(a.next,c));g=a.type;g.match(l)&&(g="g");e+="<"+g+' transform="matrix('+a.matrix.toMatrixString().replace(z,"")+')" style="'+d.styleSTR+'"'+d.attrSTR+">"+d.textSTR+k+"</"+g+">"+v}return e},aa=function(a){a=
JSON.stringify(a);a=a.replace(/([a-z]+)([A-Z]+)([a-z]+)/g,function(a,c,e,d){return c+"-"+e.toLowerCase()+d});a=a.replace(/\"\,\"/g,'";"');a=a.replace(/\"/g," ");return a=a=a.replace(/\{|\}/g,"")},oa=function(a,c){var e,d,g,l,k,v=function(a){return a=a.match(/style\s*=/)?a.replace(/(style\s*=")([^"]+)/g,function(a,c,e){return c+g+e}):a.replace(/class\s*="[^"]*"/i,function(a){return a+' style="'+g+'" '})};for(e in c)if(c.hasOwnProperty(e))for(k in d=/\s+/,d=e.split(d),g=aa(c[e]),d)d.hasOwnProperty(k)&&
(l=d[k].trim().replace(".",""),l=new RegExp("<[^>]+("+l+")[^>]+","g"),a=a.replace(l,v));return a};g.fn.toSVG=function(a){var c="",e={str:""},d=0,l=ha.length,k="";if(g.svg){if(this.canvas&&this.canvas.parentNode){for(c=this.canvas.parentNode.innerHTML;d<l;d+=1)e=ha[d],c=c.replace(e.reg,e.repStr);this._stylesheet&&this._stylesheet.rules&&(c=oa(c,this._stylesheet.rules))}a||(c=c.replace(/<image[^\>]*\>/gi,function(a){return a.match(/href=\"data\:image/i)?a:""}))}else c='<svg style="overflow: hidden; position: relative;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="'+
this.width+'" version="1.1" height="'+this.height+'">',this.bottom&&(k=T(this.bottom,e)),c+="<defs>"+e.str+"</defs>"+k+"</svg>",a||(c=c.replace(/<image[^\>]*\>[^\>]*\>/gi,function(a){return a.match(/href=\"data\:image/i)?a:""}));return c}})(k)}]);FusionCharts.register("module",["private","modules.renderer.js-raphaelshadow",function(){var g=this.window,k=Math.sqrt,F=g.parseFloat,r=g.parseInt,g=g.SVGFilterElement||g.SVGFEColorMatrixElement&&2===g.SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_SATURATE,
E=this.hcLib.Raphael,z={"drop-shadow":"drop-shadow",stroke:"stroke",fill:"fill","stroke-width":"stroke-width","stroke-opacity":"stroke-opacity","stroke-linecap":"stroke-linecap","stroke-linejoin":"stroke-linejoin","shape-rendering":"shape-rendering",transform:"transform"},G=E._createNode,a;E.svg?(g&&(E.el.dropshadow=function(a,d,g,r){var z=this.node,p=this._.shadowFilter,t=this.paper.cacheShadows||(this.paper.cacheShadows={}),m="drop-shadow"+[a,d,g,r].join(" "),c;if("none"===a){if(p){--p.use;this.node.removeAttribute("filter");
if(!p.use){m=p.hash;for(c in p)a=p[c],a.parentNode&&a.parentNode.removeChild(a),delete p[c];delete t[m]}delete this._.shadowFilter}}else p&&t[m]===p||(p=this.paper.defs.appendChild(G("filter",{id:E.getElementID(E.createUUID()),width:"200%",height:"200%"})),r=E.color(r),r.error&&(r=E.color("rgba(0,0,0,1)")),c=E.pick(r.opacity,1),this._.shadowFilter=t[m]={use:1,filter:p,hash:m,offset:p.appendChild(G("feOffset",{result:"offOut","in":"SourceGraphic",dx:F(a),dy:F(d)})),matrix:p.appendChild(G("feColorMatrix",
{result:"matrixOut","in":"offOut",type:"matrix",values:"0 0 0 0 "+r.r/255+" 0 0 0 0 "+r.g/255+" 0 0 0 0 "+r.b/255+" 0 0 0 "+c+" 0"})),blur:p.appendChild(G("feGaussianBlur",{result:"blurOut","in":"matrixOut",stdDeviation:k(F(g))})),blend:p.appendChild(G("feComposite",{"in":"SourceGraphic",in2:"blurOut",operator:"over"}))},z.setAttribute("filter",'url("'+E._url+"#"+p.id+'")'));return this}),a=function(a,d){var g=this.__shadowscale,k={},r,p;for(p in a)switch(z[p]&&(k[p]=a[p],delete a[p]),p){case "transform":r=
d.matrix.clone();r.translate(this.__shadowx,this.__shadowy);this.transform(r.toTransformString());break;case "stroke-width":a[p]=((k[p]||1)+6-2*this.__shadowlevel)*g}this.attr(a);for(p in k)a[p]=k[p]},E.ca["drop-shadow"]=function(g,d,l,k,z,p){l=this._.shadows||(this._.shadows=[]);var t,m,c,w,F;if(!this.__shadowblocked)if("none"===g)for(;m=l.pop();)m.remove();else for(k=E.color(k),k.error&&(k=E.color("rgba(0,0,0,1)")),z instanceof Array?(t=z[0],z=z[1]):t=z,t=1/E.pick(t,1),z=1/E.pick(z,1),g=E.pick(g,
1)*t,d=E.pick(d,1)*t,t=.05*E.pick(k.opacity,1),c=r(this.attr("stroke-width")||1,10)+6,w=this.matrix.clone(),w.translate(g,d),F=1;3>=F;F++)m=(l[F-1]||this.clone().follow(this,a,!p&&"before")).attr({stroke:k.hex,"stroke-opacity":t*F,"stroke-width":(c-2*F)*z,transform:w.toTransformString(),"stroke-linecap":"round","stroke-linejoin":"round",fill:"none"}),m.__shadowlevel=F,m.__shadowscale=z,m.__shadowx=g,m.__shadowy=d,p&&p.appendChild(m),l.push(m);return!1},E.el.shadow=function(a,d,g,k){var r;g&&g.constructor===
E.el.constructor&&(k=g,g=void 0);"object"===typeof a&&(d&&d.constructor===E.el.constructor&&(k=d),d=a.opacity,g=a.scalefactor,r=!!a.useFilter,a=void 0===a.apply?!!d:a.apply);void 0===d&&(d=1);if(this.dropshadow){if(r)return a&&this.dropshadow(1,1,3,"rgb(64,64,64)")||this.dropshadow("none"),this;this._.shadowFilter&&this.dropshadow("none")}return this.attr("drop-shadow",a?[1,1,3,"rgba(64,64,64,"+d+")",g,k]:"none")}):E.vml?(E.ca["drop-shadow"]=function(a,d,g,k,r,p){var t=this._.shadow,m,c;if(this.isShadow)return!1;
"none"===a?t&&(this._.shadow=t.remove()):(t||(t=this._.shadow=this.clone(),p&&p.appendChild(t.follow(this))||t.follow(this,void 0,"before"),t.attr({fill:"none","fill-opacity":.5,"stroke-opacity":1}).isShadow=!0,0>=t.attr("stroke-width")&&t.attr("stroke-width",1)),p=t.node.runtimeStyle,m=p.filter.replace(/ progid:\S+Blur\([^\)]+\)/g,""),k=E.color(k),k.error&&(k=E.color("rgba(0,0,0,1)")),c=E.pick(k.opacity,1)/5,r=1/E.pick(r,1),a=E.pick(a,1)*r,d=E.pick(d,1)*r,t.translate(a,d),p.filter=m+" progid:DXImageTransform.Microsoft.Blur(pixelRadius="+
F(.4*g)+" makeShadow=True Color="+k.hex+' shadowOpacity="'+c+'");');return!1},E.el.shadow=function(a,d,g,k){g&&g.constructor===E.el.constructor&&(k=g,g=void 0);"object"===typeof a&&(d&&"group"===d.type&&(k=d),d=a.opacity,g=a.scalefactor,a=void 0===a.apply?!!d:a.apply);void 0===d&&(d=1);return this.attr("drop-shadow",a||!d?[1,1,5,"rgba(64,64,64,"+d+")",g,k]:"none")}):E.canvas&&(E.el.shadow=function(){return this})}]);FusionCharts.register("module",["private","modules.renderer.js-raphaelshapes",function(){var g=
this.window,k="createTouch"in g.document,F=/msie/i.test(g.navigator.userAgent)&&!g.opera,r=Math,E=r.cos,z=r.sin,G=r.abs,a=r.pow,L=r.atan2,d=r.tan,l=r.acos,P=r.min,W=r.round,p=r.PI,t=r.sqrt,m=2*p,c=g.parseInt,w=g.parseFloat,J=String,e=Array.prototype.slice,v=a(2,-24),H="rgba(192,192,192,"+(F?.002:1E-6)+")",B=this.hcLib.Raphael,Q=B.eve,I=B._createNode,ha=B._setFillAndStroke,X=B.el.constructor,T={speed:"optimizeSpeed",crisp:"crispEdges",precision:"geometricPrecision"},aa={enabled:!1,"false":!1,0:!1,
disabled:!0,"true":!0,1:!0},oa={Q:"L",Z:"X",q:"l",z:"x",",":" "},M=/,?([achlmqrstvxz]),?/gi,la=/\s*\,\s*/g,C,Ga=function(){return this.join(",").replace(M,C)},Ba,ja,ba=B._cacher(function(c,e,d,g){return t(a(d-c,2)+a(g-e,2))}),ta=B._cacher(function(a,c,e,d,g){var k=e-a,l=d-c;e=ba(a,c,e,d);return{x:a+k/e*g,y:c+l/e*g}});if(B.svg)Q.on("raphael.attr.shape-rendering",function(a,c){var e=this.node;this.attrs[c]=a=T[a]||a||"auto";e.setAttribute(c,a);e.style.shapeRendering=a});else if(B.vml)Q.on("raphael.attr.shape-rendering",
function(a){this.node.style.antialias="crisp"!==a});B.define&&B.define([{name:"polypath",polypath:function(){return this.path(void 0,B._lastArgIfGroup(arguments))},ca:{polypath:function(a,e,d,g,k,l){var v,m,t;v=[];a=c(a,10)||0;e=w(e)||0;d=w(d)||0;g=w(g)||0;k=null===k||isNaN(k)?.5*p:B.rad(k);l=null===l||isNaN(l)?0:w(l);m=k;if(2<a)switch(k=2*p/a,l){case 0:for(l=0;l<a;l++)v.push("L",e+g*E(-m),d+g*z(-m)),m+=k;v[0]="M";v.push("Z");break;case 1:for(l=0;l<a;l++)v.push("M",e,d,"L",e+g*E(-m),d+g*z(-m)),m+=
k;break;default:k*=.5;t=g*E(k)*(1-l);for(l=0;l<a;l++)v.push("L",e+g*E(-m),d+g*z(-m)),m+=k,v.push("L",e+t*E(-m),d+t*z(-m)),m+=k;v[0]="M";v.push("Z")}else 0===g?v.push("M",e,d,"L",e,d,"Z"):v.push("M",e-g,d,"A",g,g,0,0,0,e+g,d,"A",g,g,0,0,0,e-g,d,"Z");return{path:v}},r:function(a){var c=this.attrs.polypath;c[3]=a;this.attr("polypath",c);return!1}}},{name:"ringpath",ringpath:function(){return this.path(void 0,B._lastArgIfGroup(arguments))},ca:function(a,c,e,d,g,k){var l=k%m-g%m,B=k-g,w,t,r,H,C,ta;this._.ringangle=
.5*(g+k);G(B)<v?(w=E(g),B=z(g),e=["M",a+e*w,c+e*B,"L",a+d*w,c+d*B,"Z"]):(G(B)>v&&+(G(B)%m<v||m-G(B)%m<v)?(e=["M",a-e,c,"A",e,e,0,0,0,a+e,c,"A",e,e,0,0,0,a-e,c],0!==d&&(e=e.concat(["M",a-d,c,"A",d,d,0,0,1,a+d,c,"A",d,d,0,0,1,a-d,c]))):(w=E(g),B=z(g),t=E(k),k=z(k),l%=m,0>l&&(l+=m),l=l<p?0:1,r=a+e*w,C=c+e*B,H=a+e*t,ta=c+e*k,t=a+d*t,k=c+d*k,.01>G(r-H)&&.01>G(C-ta)&&(r=a+e*E(g+1.745329E-4),C=c+e*z(g+1.745329E-4)),e=["M",r,C,"A",e,e,0,l,1,H,ta,"L",t,k],0!==d&&(w=a+d*w,B=c+d*B,.01>G(t-w)&&.01>G(k-B)&&(w=
a+d*E(g+1.745329E-4),B=c+d*z(g+1.745329E-4)),e.push("A",d,d,0,l,0,w,B))),e.push("Z"));return{path:e}}},{name:"cubepath",cubepath:function(){var a={"stroke-linejoin":"round","shape-rendering":"precision",stroke:"none"},c=arguments,e=c.length-1,d=c[e],g,k;d&&d.constructor===B.el.constructor?c[e]=void 0:d=void 0;e=this.path(a,d);g=this.path(a,d);a=this.path(a,d);a._.cubetop=e.follow(a,void 0,"before");a._.cubeside=g.follow(a,void 0,"before");for(k in B.fn.cubepath.ca)a.ca[k]=B.fn.cubepath.ca[k];return a.attr("cubepath",
[c[0],c[1],c[2],c[3],c[4],c[5]])},fn:{_getBBox2:function(){var a=this._.cubeside.getBBox(),c=this._.cubetop.getBBox(),e=this.getBBox();return{x:e.x+c.height,y:e.y-a.width,width:e.width,height:e.height}}},ca:{cubepath:function(a,c,e,d,g,k){var l=this._.cubetop,v=this._.cubeside;a=a||0;c=c||0;e=e||0;d=d||0;g=g||0;k=k||0;this.attr("path",["M",a+e,c,"l",0,d,-e,0,0,-d,"z"]);l.attr("path",["M",a,c,"l",1,1,e-1,0,0,-1,g,-k,-e,0,"z"]);v.attr("path",["M",a+e-1,c+1,"l",0,d-1,1,0,g,-k,0,-d,-g,k]);return!1},"stroke-linejoin":function(){return{"stroke-linejoin":"round"}},
"drop-shadow":function(a,c,e,d){var g=this._.cubetop,k=this._.cubeside;this.dropshadow&&(g.dropshadow(a,-c,e,d),k.dropshadow(a,-c,e,d));return!1},fill:function(a,c){var e=this._.cubetop,d=this._.cubeside,g=this.attr("cubepath")||[0,0,0,0,0,0],k=g[2],l=g[4],g=g[5],v;a=B.color(a);c?(this.attr("fill",a),e.attr("fill",B.tintshade(a,-.78).rgba),d.attr("fill",B.tintshade(a,-.65).rgba)):(v="opacity"in a?"rgba("+[a.r,a.g,a.b,a.opacity]+")":"rgb("+[a.r,a.g,a.b]+")",this.attr("fill",[270,B.tintshade(v,.55).rgba,
B.tintshade(v,-.65).rgba].join("-")),d.attr("fill",[270,B.tintshade(v,-.75).rgba,B.tintshade(v,-.35).rgba].join("-")),e.attr("fill",[45+B.deg(L(g,l+k)),B.tintshade(v,-.78).rgba,B.tintshade(v,.22).rgba].join("-")));return!1}}},{name:"arcpath",arcpath:function(){return this.path(void 0,B._lastArgIfGroup(arguments))},ca:function(a,c,e,d){var g=(d-90)/180*Math.PI;return{path:["M",a,c-e,"A",e,e,0,180<d?1:0,1,a+e*Math.cos(g),c+e*Math.sin(g)]}}},{name:"scroller",scroller:function(a,c,e,d,g,k,l){var v=this.group("scroller",
l),m=v.attrs,t=v._.scroller={};g=g&&"horizontal"||"vertical";var r,H={},p,C,ta;t.track=this.rect(v).mousedown(function(a){var c=m["scroll-position"];a="horizontal"===m["scroll-orientation"]?a.layerX||a.x:a.layerY||a.y;a=(a-t.anchorOffset)/t.trackLength;r=B.animation({"scroll-position":a},2E3*G(c-a),"easeIn");v.animate(r);Q("raphael.scroll.start."+v.id,v,c)}).mouseup(t._mouseupTrack=function(){this.stop(r);Q("raphael.scroll.end."+this.id,this,m["scroll-position"])},v,!0);t.anchor=this.rect(v).drag(function(){H["scroll-position"]=
p+arguments[C]/t.trackLength;v.animate(H,0)},function(a,c,e){C="horizontal"===m["scroll-orientation"]?0:1;Q("raphael.scroll.start."+v.id,v,p=m["scroll-position"]);e.stopPropagation()},function(){Q("raphael.scroll.end."+v.id,v,p=m["scroll-position"])});for(ta in B.fn.scroller.fn)v[ta]=B.fn.scroller.fn[ta];for(ta in B.fn.scroller.ca)v.ca[ta]=B.fn.scroller.ca[ta];m["scroll-orientation"]=g;m["stroke-width"]=1;v.ca["scroll-repaint"]=v.ca["scroll-repaint-"+g];!B.is(k,"object")&&(k={});return v.attr({ishot:!0,
"scroll-display-buttons":k.showButtons&&"arrow"||"none","scroll-display-style":k.displayStyleFlat&&"flat"||"3d","scroll-ratio":w(k.scrollRatio)||1,"scroll-position":w(k.scrollPosition)||0,"scroll-repaint":[a,c,e,d]})},fn:{scroll:function(a,c){var e=this._.scroller;c=c||this;e.callback=function(){return a.apply(c,arguments)};return this},remove:function(){var a=this._.scroller,c;this.attr("scroll-display-buttons","none");a.track.unmouseup(a._mouseupTrack);for(c in a)a[c]&&a[c].remove&&a[c].remove(),
a[c]=null;delete this._.scroller;B.el.remove.apply(this,arguments)}},ca:{"stroke-width":function(){return!1},"drop-shadow":function(a,c,e,d,g,k){this._.scroller.track.attr("drop-shadow",[a,c,e,d,g,k]);return!1},"scroll-display-style":function(a){var c=this.attrs,e=c["scroll-display-style"],d=c.fill;a={flat:"flat","3d":"3d",transparent:"transparent"}[a]||e;d&&a!==e&&(c["scroll-display-style"]=a,this.attr("fill",d));return{"scroll-display-style":a}},"scroll-display-buttons":function(a){var c=this,e=
c.paper,d=c._.scroller,g=c.attrs,k=g["scroll-display-buttons"],l=g["scroll-repaint"],v,m;void 0===k&&(k="none");a={none:"none",arrow:"arrow"}[a]||k;a!==k&&(g["scroll-display-buttons"]=a,"none"===a&&d.start?(d.arrowstart.remove(),delete d.arrowstart,d.arrowend.remove(),delete d.arrowend,d.start.unmouseup(d._mouseupStart),d.start.remove(),delete d.start,d.end.unmouseup(d._mouseupEnd),d.end.remove(),delete d.end):(d.arrowstart=e.polypath(c),d.arrowend=e.polypath(c),d.start=e.rect(c).mousedown(function(){var a;
0!==(a=g["scroll-position"])&&(c.animate({"scroll-position":a-.1},100).animate(v=B.animation({"scroll-position":0},4500*a,"easeIn")),Q("raphael.scroll.start."+c.id,c,a))}).mouseup(d._mouseupStart=function(){c.stop(v);Q("raphael.scroll.end."+c.id,c,g["scroll-position"])},c,!0),d.end=e.rect(c).mousedown(function(){var a;1!==(a=g["scroll-position"])&&(c.animate({"scroll-position":a+.1},100).animate(m=B.animation({"scroll-position":1},4500*(1-a),"easeIn")),Q("raphael.scroll.start."+c.id,c,a))}).mouseup(d._mouseupEnd=
function(){c.stop(m);Q("raphael.scroll.end."+c.id,c,g["scroll-position"])},c,!0),g.fill&&c.attr("fill",g.fill)),l&&c.attr("scroll-repaint",l));return{"scroll-display-buttons":a}},"scroll-orientation":function(a){var c=this.attrs,e=c["scroll-repaint"],d=c["scroll-orientation"];a={horizontal:"horizontal",vertical:"vertical"}[a]||d;d!==a&&(this.ca["scroll-repaint"]=this.ca["scroll-repaint-"+a],e&&(e[2]+=e[3],e[3]=e[2]-e[3],e[2]-=e[3],this.attr("scroll-repaint",e)),c.fill&&this.attr("fill",c.fill));return{"scroll-orientation":a}},
"scroll-ratio":function(a){var c=this.attrs,e=c["scroll-ratio"],d=c["scroll-repaint"];a=1<a?1:.01>a?.01:w(a);d&&a!==e&&(c["scroll-ratio"]=a,this.attr("scroll-repaint",d));return{"scroll-ratio":a}},"scroll-position":function(a,c){var e=this.attrs,d="horizontal"===e["scroll-orientation"],g=e["scroll-repaint"],k=e["scroll-position"],l=this._.scroller,v=l.anchor;a=1<a?1:0>a?0:w(a);isNaN(a)&&(a=k);g&&(k!==a||c)&&(k=l.start&&l.start.attr(d&&"width"||"height")||0,d&&v.attr("x",g[0]+k+(g[2]-2*k-v.attr("width"))*
a+.5)||v.attr("y",g[1]+k+(g[3]-2*k-v.attr("height"))*a+.5),!c&&1>e["scroll-ratio"]&&(Q("raphael.scroll.change."+this.id,this,a),l.callback&&l.callback(a)));return{"scroll-position":a}},r:function(a){var c=this._.scroller;c.track.attr("r",a);c.anchor.attr("r","none"===this.attrs["scroll-display-buttons"]&&a||0);return!1},"scroll-repaint-horizontal":function(a,c,e,d){var g=this.attrs,k=this._.scroller,l=g["scroll-ratio"],v=g["scroll-position"],m=0,B=e*l,g="none"===g["scroll-display-buttons"];e&&--e;
a&&(a+=.5);d&&--d;c&&(c+=.5);k.track.attr({width:e,height:d,y:c,x:a}).crisp();g||(m=P(d,.5*e),B-=2*m*l,k.start.attr({width:m,height:d,x:a,y:c}),k.arrowstart.attr("polypath",[3,a+.5*m,c+.5*d,.25*m,180]),k.end.attr({width:m,height:d,x:a+e-m,y:c}),k.arrowend.attr("polypath",[3,a+e-.5*m,c+.5*m,.25*m,0]));k.trackLength=e-2*m-B;k.trackOffset=a+m+.5;k.anchorOffset=k.trackOffset+.5*(B-1);k.anchor.attr({height:d,width:B-1,y:c,x:k.trackOffset+k.trackLength*v}).crisp()},"scroll-repaint-vertical":function(a,
c,e,d){var g=this.attrs,k=this._.scroller,l=g["scroll-ratio"],v=g["scroll-position"],m=0,B=d*l,g="none"===g["scroll-display-buttons"];e&&--e;a&&(a+=.5);d&&--d;c&&(c+=.5);k.track.attr({width:e,height:d,y:c,x:a}).crisp();g||(m=P(e,.5*d),B-=2*m*l,k.start.attr({width:e,height:m,x:a,y:c}),k.arrowstart.attr("polypath",[3,a+.5*e,c+.5*m,.25*m,90]),k.end.attr({width:e,height:m,x:a,y:c+d-m}),k.arrowend.attr("polypath",[3,a+.5*e,c+d-.5*m,.25*m,-90]));k.trackLength=d-2*m-B;k.trackOffset=c+m+.5;k.anchorOffset=
k.trackOffset+.5*(B-1);k.anchor.attr({height:0>B-1?0:B-1,width:e,y:k.trackOffset+k.trackLength*v,x:a}).crisp()},fill:function(a){var c=this.attrs,e=this._.scroller,d=c["scroll-repaint"],g="flat"===c["scroll-display-style"],l="horizontal"===c["scroll-orientation"],v={stroke:"none"},m;k&&d&&3<(m=16-d[l&&3||2])&&(v.stroke=H,v["stroke-width"]=m);a=B.color(a);a.error&&(a=B.color("#000000"));a="opacity"in a?"rgba("+[a.r,a.g,a.b,a.opacity]+")":"rgb("+[a.r,a.g,a.b]+")";v.fill=g&&a||[90*l,B.tintshade(a,.15).rgba,
a].join("-");v.stroke=B.tintshade(a,-.75).rgba;e.track.attr(v);v.fill=g&&B.tintshade(a,-.6).rgba||[270*l,B.tintshade(a,.3).rgba+":40",B.tintshade(a,-.7).rgba].join("-");v.stroke=B.tintshade(a,-.6).rgba;e.anchor.attr(v);v.stroke="none";"none"!==c["scroll-display-buttons"]&&(v.fill=H,e.start.attr(v),e.end.attr(v),v.fill=B.tintshade(a,-.4).rgba,e.arrowstart.attr(v),e.arrowend.attr(v));return!1}}},{name:"button",button:function(a,c,e,d,g,k){k=this.group("button",k);var v;k._.button={bound:this.rect(k),
tracker:this.rect(k).attr({fill:H,stroke:H,cursor:"pointer"}).data("compositeButton",k)};!B.is(g,"object")&&(g={});for(v in B.fn.button.fn)k[v]=B.fn.button.fn[v];for(v in B.fn.button.ca)k.ca[v]=B.fn.button.ca[v];return k.attr({ishot:!0,"button-padding":[g.horizontalPadding,g.verticalPadding],"button-label":e,"button-symbol":d,"button-disabled":g.disabled||"false","button-symbol-position":g.symbolPosition,"button-symbol-padding":g.symbolPadding}).attr("button-repaint",[a,c,g.width,g.height,g.r])},
data:{hoverin:function(){var a=this._.button,c=a.hoverbackIn,e=this._hover||{};e.fill||e.stroke||e["stroke-width"]||e.cursor?(e.fill&&this.bottom.attr("fill",e.fill)&&a.symbol.attr("fill",e.fill),e.stroke&&this.bottom.attr("stroke",e.stroke)&&a.symbol.attr("stroke",e.stroke),e["stroke-width"]&&this.bottom.attr("stroke-width",e["stroke-width"])&&a.symbol.attr("stroke-width",e["stroke-width"]),e.cursor&&a.tracker.attr("cursor",e.cursor),c&&c()):c&&!1===c(arguments)||this.attr("fill","hover");this.hovered=
!0},hoverout:function(){var a=this._.button,c=a.hoverbackOut,e=this._normal||{};e.fill||e.stroke||e["stroke-width"]||e.cursor?(e.fill&&this.bottom.attr("fill",e.fill)&&a.symbol.attr("fill",e.fill),e.stroke&&this.bottom.attr("stroke",e.stroke)&&a.symbol.attr("stroke",e.stroke),e["stroke-width"]&&this.bottom.attr("stroke-width",e["stroke-width"])&&a.symbol.attr("stroke-width",e["stroke-width"]),e.cursor&&a.tracker.attr("cursor",e.cursor),c&&c()):c&&!1===c(arguments)||this.attr("fill",(this.pressed||
this.active)&&"active"||"normal");this.hovered=!1},mousedown:function(){var a=this._.button,c=this._pressed||{};c.fill||c.stroke||c["stroke-width"]||c.cursor?(c.fill&&this.bottom.attr("fill",c.fill)&&a.symbol.attr("fill",c.fill),c.stroke&&this.bottom.attr("stroke",c.stroke)&&a.symbol.attr("stroke",c.stroke),c["stroke-width"]&&this.bottom.attr("stroke-width",c["stroke-width"])&&a.symbol.attr("stroke-width",c["stroke-width"]),c.cursor&&a.tracker.attr("cursor",c.cursor)):this.attr("fill","active");this.pressed=
!0},mouseup:function(){var a=this._.button,c=a.callback,e=this._normal||{};e.fill||e.stroke||e["stroke-width"]||e.cursor?(e.fill&&this.bottom.attr("fill",e.fill)&&a.symbol.attr("fill",e.fill),e.stroke&&this.bottom.attr("stroke",e.stroke)&&a.symbol.attr("stroke",e.stroke),e["stroke-width"]&&this.bottom.attr("stroke-width",e["stroke-width"])&&a.symbol.attr("stroke-width",e["stroke-width"]),e.cursor&&a.tracker.attr("cursor",e.cursor)):this.attr("fill",this.hovered&&"hover"||this.active&&"active"||"normal");
this.pressed=!1;c&&c(arguments)},mousemove:function(){var a=this._.button.mousemove;a&&a(arguments)}},fn:{tooltip:function(){B.el.tooltip&&B.el.tooltip.apply(this._.button.tracker,arguments);return this},buttonclick:function(a,c){var e=this._.button;c=c||this;e.callback=function(){return a.apply(c,arguments)};return this},labelcss:function(){var a=this._.button,c=a.label;a.cssArg=arguments;c&&c.css.apply(c,arguments);return this.attr("button-repaint",this.attrs["button-repaint"])},buttonhover:function(a,
c,e,d,g,k){var v=this._.button;e=e||this;d=d||this;k=k||this;g&&(v.mousemove=function(){return g.apply(k,arguments)});v.hoverbackIn=function(){return a.apply(e,arguments)};v.hoverbackOut=function(){return c.apply(d,arguments)};return this},remove:function(){var a=this._.button,c;this.attr("button-disabled","true");for(c in a)a[c]&&a[c].remove&&a[c].remove(),a[c]=null;delete this._.button;B.el.remove.apply(this,arguments)}},ca:{"button-active":function(a){this.attr("fill",(this.active=!!a)?"active":
this.hovered&&"hover"||"normal")},"button-disabled":function(a){var c=this._.button,e=c.tracker,d=this.attrs["button-disabled"],g=this.paper.button.data,k=this._disabled||{};a=aa[a];d=aa[d];if(void 0!==a&&a!==d)switch(a){case !0:k.fill||k.stroke||k["stroke-width"]||k.cursor?(k.fill&&this.bottom.attr("fill",k.fill)&&c.symbol.attr("fill",k.fill),k.stroke&&this.bottom.attr("stroke",k.stroke)&&c.symbol.attr("stroke",k.stroke),k["stroke-width"]&&this.bottom.attr("stroke-width",k["stroke-width"]&&c.symbol.attr("fill",
k.fill)),k.cursor&&c.tracker.attr("cursor",k.cursor)):e.attr("fill","rgba(204,204,205,.5)");e.unmousedown(g.mousedown).unmouseup(g.mouseup).unhover(g.hoverin,g.hoverout).unmousemove(g.mousemove);break;case !1:e.attr("fill",H).mousedown(g.mousedown,this).mouseup(g.mouseup,this,!0).hover(g.hoverin,g.hoverout,this,this).mousemove(g.mousemove,this)}},"button-label":function(a){var c=this._.button,e=this.attrs,d=c.label,g=c.cssArg,k=this.attrs["button-repaint"];a=J(a||"");"none"===a?d&&(c.label=d.remove()):
a&&(!d&&(d=c.label=this.paper.text(this).insertBefore(c.tracker)),d.attr({text:a,"text-anchor":"middle","vertical-align":"middle"}),g&&g.length&&d.css.apply(d,g));k&&e["button-label"]!==a&&this.attr("button-repaint",k)},"button-symbol":function(a){var c=this._.button,e=c.symbol,d=this.attrs["button-repaint"];a=J(a||"");"none"===a?(e&&(c.symbol=e.remove()),delete c.symbol):a&&!e&&(c.symbol=this.paper.symbol(this).insertAfter(c.bound));d&&this.attr("button-repaint",d)},"button-symbol-position":function(a){return{"button-symbol-position":{top:"top",
right:"right",bottom:"bottom",left:"left",none:"none"}[J(a).toLowerCase()]||"none"}},"button-symbol-padding":function(a){return{"button-symbol-padding":w(a)}},"button-padding":function(a,c){return{"button-padding":[null==a&&(a=5)||w(a),null==c&&a||w(c)]}},"button-repaint":function(a,c,e,d,g){var k=this._.button,v=k.bound,l=k.label,m=k.symbol,w=this.attrs,t=w["button-padding"],r=t[0],H=t[1],p,C;void 0===a&&(a=0);void 0===c&&(c=0);if(void 0===e||void 0===d)p=l&&l.getBBox()||{width:0,height:0},void 0===
e&&(e=2*r+p.width),void 0===d&&(d=2*H+p.height);v=B.crispBound(a,c,e,d,v.attr("stroke-width"));v.r=B.pick(g,W(.1*P(d,e)));a=v.x;c=v.y;e=v.width;d=v.height;l&&l.attr({x:a+e/2,y:c+d/2});if(m){!B.is(C=w["button-symbol-padding"],"finite")&&(C=.2*d);g=d-H;p=.5*g;switch(w["button-symbol-position"]+(l&&"+"||"-")){case "right+":a=a+(e+(2*p+H))-p-r;c+=.5*d;l.attr("transform",["t",-(g+C),0]);break;case "left+":a=a+r+p;c+=.5*d;l.attr("transform",["t",g+C,0]);break;case "top+":a+=.5*e;c=c+t[1]+p;l.attr("transform",
["t",0,g+C]);break;case "bottom+":a+=.5*e;c=c+(d+(2*p+C))-H-p;l.attr("transform",["t",0,-(g+C)]);break;default:a+=.5*e,c+=.5*d}m.attr("symbol",[w["button-symbol"],a,c,p])}k.bound.attr(v);k.tracker.attr(v)},fill:function(a,c,e,d,g){var k=this._.button,v=k.bound,l=k.symbol,m=k.label,w={normal:k.gradient,active:k.gradientActive,hover:k.gradientHover}[a];w||(g||(a=B.getRGB(a),a.error&&(a=B.color("#cccccc")),a="opacity"in a?"rgba("+[a.r,a.g,a.b,a.opacity]+")":"rgb("+[a.r,a.g,a.b]+")"),k.gradient=g?a:[90,
B.tintshade(a,-.8).rgba+":0",B.tintshade(a,.8).rgba+":100"].join("-"),k.gradientActive=[270,B.tintshade(a,-.8).rgba+":0",B.tintshade(a,.8).rgba+":100"].join("-"),d=B.getRGB(d),d.error&&(d=a)||(d="opacity"in d?"rgba("+[d.r,d.g,d.b,d.opacity]+")":"rgb("+[d.r,d.g,d.b]+")"),k.gradientHover=g?d:[90,B.tintshade(d,-.9).rgba+":0",B.tintshade(d,.7).rgba+":100"].join("-"),e=e||B.tintshade(a,.2).rgba,c=c||B.tintshade(a,-.2).rgba,k.symbolFill=e,k.labelFill=c,w=(this.pressed||this.active)&&k.gradientActive||this.hovered&&
k.gradienthover||k.gradient);v.attr("fill",w);l&&l.attr("fill",k.symbolFill);m&&m.attr("fill",k.labelFill);return!1},stroke:function(a,c){var e=this._.button,d=e.symbol;a=B.color(a);a.error&&(a=B.color("#999999"));e.bound.attr("stroke",a);d&&d.attr("stroke",c||a);return!1},"stroke-width":function(a,c){var e=this._.button,d=e.symbol;e.bound.attr("stroke-width",a);e.tracker.attr("stroke-width",a);d&&d.attr("stroke-width",c);return!1},config:function(a){a.hover&&(this._hover={fill:a.hover.fill,stroke:a.hover.stroke,
"stroke-width":a.hover["stroke-width"],cursor:a.hover.cursor});a.disabled&&(this._disabled={fill:a.disabled.fill,stroke:a.disabled.stroke,"stroke-width":a.disabled["stroke-width"],cursor:a.disabled.cursor});a.pressed&&(this._pressed={fill:a.pressed.fill,stroke:a.pressed.stroke,"stroke-width":a.pressed["stroke-width"],cursor:a.pressed.cursor});a.normal&&(this._normal={fill:a.normal.fill,stroke:a.normal.stroke,"stroke-width":a.normal["stroke-width"],cursor:a.normal.cursor});a.symbol&&(a.symbol={stroke:a.normal.stroke,
"stroke-width":a.normal["stroke-width"]})}}},{name:"trianglepath",trianglepath:function(){var a=arguments,c=B._lastArgIfGroup(a);return this.path(c).attr("trianglepath",[a[0],a[1],a[2],a[3],a[4],a[5],a[6]||0,a[7]||0,a[8]||0])},fn:{sides:function(){var a=this._args;return[ba(a[0],a[1],a[2],a[3]),ba(a[2],a[3],a[4],a[5]),ba(a[4],a[5],a[0],a[1])]},enclosedAngles:function(){var c=this._sides;return[l((a(c[0],2)+a(c[2],2)-a(c[1],2))/(2*c[0]*c[2])),l((a(c[0],2)+a(c[1],2)-a(c[2],2))/(2*c[0]*c[1])),l((a(c[2],
2)+a(c[1],2)-a(c[0],2))/(2*c[2]*c[1]))]},semiperimeter:function(){var a=this._sides||this.sides();return(a[0]+a[1]+a[2])/2}},ca:{trianglepath:function(a,c,e,g,k,v,l,m,B){if(l||m||B){this._args=arguments;this._sides=this.sides();var w=this.enclosedAngles(),r;r=this.semiperimeter();r=t(r*(r-this._sides[0])*(r-this._sides[1])*(r-this._sides[2]))/r;w=[P(l,r)/d(w[0]/2),P(m,r)/d(w[1]/2),P(B,r)/d(w[2]/2)];w=[ta(a,c,k,v,w[0]),ta(a,c,e,g,w[0]),ta(e,g,a,c,w[1]),ta(e,g,k,v,w[1]),ta(k,v,e,g,w[2]),ta(k,v,a,c,
w[2])];this.attr({path:["M",w[0].x,w[0].y,"Q",a,c,w[1].x,w[1].y,"L",w[2].x,w[2].y,"Q",e,g,w[3].x,w[3].y,"L",w[4].x,w[4].y,"Q",k,v,w[5].x,w[5].y,"L",w[0].x,w[0].y]})}else this.attr({path:["M",a,c,"L",e,g,k,v,"Z"]})}}}]);B.ca["text-bound"]=function(a,c,e,d,g,k){var v=this.paper,l=this._.textbound;if("text"===this.type){if(!(c&&"none"!==c||a&&"none"!==a))return this._.textbound=l&&l.unfollow(this).remove(),!1;this.attrs["text-bound"]=arguments;e&&B.is(e,"finite")||(e=0);g&&B.is(g,"finite")||(g=0);!l&&
(l=this._.textbound=v.rect(0,0,0,0,this.group).follow(this,B.ca["text-bound"].reposition,"before"));l.attr({stroke:c,"stroke-width":e,fill:a,"shape-rendering":1===e&&"crisp"||"",r:g});k&&l.attr("stroke-dasharray",k);B.ca["text-bound"].reposition.call(l,this.attr(),this);return!1}};B.ca["text-bound"].reposition=function(a,c){var e={},d,g,k,v,l;a.hasOwnProperty("visibility")&&this.attr("visibility",a.visibility);if(a.hasOwnProperty("text-bound")||a.hasOwnProperty("x")||a.hasOwnProperty("y")||a.hasOwnProperty("text")||
a.hasOwnProperty("text-anchor")||a.hasOwnProperty("text-align")||a.hasOwnProperty("font-size")||a.hasOwnProperty("line-height")||a.hasOwnProperty("vertical-align")||a.hasOwnProperty("transform")||a.hasOwnProperty("rotation"))d=c.attrs["text-bound"],g=J(d&&d[3]||"0").split(la),d=w(g[0])||0,g=B.pick(w(g[1]),d),k=c.getBBox(),v=k.width,l=k.height,isNaN(v)||(e.x=k.x-d,e.y=k.y-g,e.width=v+2*d,e.height=l+2*g),this.attr(e)};B.fn.symbol=function(){var a=arguments,c=a.length-1,e=a[c];e&&e.constructor===B.el.constructor?
a[c]=void 0:e=void 0;c=this.path(void 0,e);c.ca.symbol=B.fn.symbol.ca.symbol;return a.length===!!e+0?c:c.attr("symbol",a)};B.fn.getSuggestiveRotation=function(){var a,c,e;a=arguments[0];1===arguments.length?(c=a.angle,e=a.x,a=a.y):(c=a,e=arguments[1],a=arguments[2]);return"r"+(c||0)+","+e+","+a};B.fn.symbol.cache={"":B._cacher(function(a,c,e,d){return 3<arguments.length?["M",a,c,"h",e,"v",d,"h",-e,"v",-d,"z"]:["M",a-e,c-e,"h",e*=2,"v",e,"h",-e,"v",-e,"z"]})};B.fn.symbol.ca={symbol:function(a){var c=
B.is(a,"object")&&1===arguments.length&&!B.is(a,"function")?a:arguments,d;c===a&&(a=c[0]);c=(d=B.is(a,"function")&&a||B.fn.symbol.cache[a]||B.fn.symbol.cache[""])&&d.apply(B,e.call(c,1));B.is(c,"array")||B.is(c,"string")?this.attr("path",c):c&&this.attr(c)}};B.addSymbol=function(a,c){var e=B.is(c,"function")&&(e={},e[a]=c,e)||a,d=B.fn.symbol.cache,g=[],k;for(k in e)c=e[k],d[k]=B.is(c,"function")&&B._cacher(c,B)||(g.push(k),c);for(;k=g.pop();)d[k]=d[d[k]]};B.svg?(C="$1",Ba=function(a){a?"string"===
typeof a?a=a.replace(M,C):a.toString=Ga:a="M0,0";this.node.setAttribute("d",a.toString())},B._engine.litepath=function(a,c,e,d){a=I("path");(d||c).canvas.appendChild(a);c=new X(a,c,d);c.type="litepath";c.id=a.raphaelid=B._oid++;a.raphael=!0;ha(c,{fill:"none",stroke:"#000"});return c},B._getPath.litepath=function(a){return B.parsePathString(a.node.getAttribute("d"))}):B.vml&&(C=function(a,c){return oa[c]||c},ja=function(){this._transform.apply(this,arguments);this._.bcoord&&(this.node.coordsize=this._.bcoord);
return this},Ba=function(a){a?"string"===typeof a?a=a.replace(M,C):a.toString=Ga:a="M0,0";this.node.path=a;return this},B._engine.litepath=function(a,c,e,d){a=I("shape");var g=a.style,k=new X(a,c,d);g.cssText="position:absolute;left:0;top:0;width:21600px;height:21600px;";e=w(e);isNaN(e)?a.coordsize="21600 21600":(k._.bzoom=e,g.width="1px",g.height="1px",a.coordsize=k._.bcoord=e+" "+e);a.coordorigin=c.coordorigin;k.type="litepath";k.id=a.raphaelid=B._oid++;a.raphael=!0;k._transform=k.transform;k.transform=
ja;B._setFillAndStroke(k,{fill:"none",stroke:"#000"});(d||c).canvas.appendChild(a);c=I("skew");c.on=!0;a.appendChild(c);k.skew=c;return k},B._getPath.litepath=function(a){return B.parsePathString(a.node.path||"")});B.fn.litepath=function(a,c,e){c&&c.constructor===X&&(e=c,c=void 0);a&&a.constructor===X&&(e=a,a="");c=B._engine.litepath(a,this,c,e);c.ca.litepath=Ba;a&&c.attr("litepath",B.is(a,"array")?[a]:a);return this.__set__&&this.__set__.push(c),this._elementsById[c.id]=c}}]);FusionCharts.register("module",
["private","modules.renderer.js-htmlrenderer",function(){var g=this.hcLib,k=g.Raphael,F=g.dem,r=this.window,E=r.document,z=/msie/i.test(r.navigator.userAgent)&&!r.opera,G="VML"===k.type,a=g.hasTouch,L={cursor:"cursor"},d={x:"left",y:"top",strokeWidth:"borderThickness","stroke-width":"borderThickness",width:"width",height:"height"},l={fill:"backgroundColor",stroke:"borderColor",color:"color"},P={left:0,top:0,padding:0,border:"none",margin:0,outline:"none","-webkit-apperance":"none",position:"absolute",
zIndex:20},W,p=function(a,c,g,k){a=E.createElement(a);for(var e in c)d[e]?a.style[e]=c[e]:a.setAttribute(e,c[e]);for(e in g)a.style[e]=g[e];k&&k.appendChild&&k.appendChild(a);return a},t;t=function(a,c,d){c&&c instanceof t&&(c=c.element);(this.element=p(a,d,P,c)).ishot="true";this.nodeName=a.toLowerCase();this.added=!!c};t.prototype={attr:function(a){var c=this.element,g={},k,e,v,t,B,r,p;if("object"!==typeof a){if(!(g=this[a])){if("string"===typeof a)c&&c.getAttribute&&(t=c.getAttribute(a));else if(void 0!==
a&&null!==a&&"object"===typeof a)for(v in a)c.setAttribute(v,a[v]);g=t}return g}for(k in a){v=a[k];if(L[k]){switch(k){case "cursor":"pointer"===v&&G&&(v="hand")}c.style[L[k]]=v;e=!0}else if(d[k])c.style[d[k]]=v+"px",e=!0;else if(l[k])c.style[l[k]]=v&&v.replace(/^#?([a-f0-9]+)/ig,"#$1")||"none",e=!0;else if(/^visibility$/i.test(k))e="hidden"===v,c.style.display=e?"none":"",this.hidden=e,e=!0;else if(/^opacity$/i.test(k))c.style.opacity=v,z&&(e=100*Number(v),c.style.filter="progid:DXImageTransform.Microsoft.Alpha(Opacity="+
e+")"),e=!0;else if(/^innerhtml$/i.test(k)){if(G&&"select"==c.nodeName.toLowerCase()){for(e=v.match(/<option\s?[\s\S]*?(\/>|><\/option>|>[\s\S]*?<\/option>)/ig);c.firstChild;)c.removeChild(c.firstChild);B=0;for(r=e.length;B<r;B+=1)t=e[B],p=E.createElement("option"),/<option\s([\s\S]*[\'\"])\s*?(\/>|>[\s\S]*<\/option>)/ig.test(t)&&(p.value=t.replace(/<option\s([\s\S]*[\'\"])\s*?(\/>|>[\s\S]*<\/option>)/ig,"$1").replace(/[\s\S]*value\s*\=\s*[\'\"]([\s\S]*)[\'\"]/,"$1")),p.text=t.replace(/<option\s*[\s\S]*[\'\"]?\s*?[\/>|\>]([\s\S]*)<\/option>/ig,
"$1 "),c.options.add(p)}else"input"!==c.nodeName.toLowerCase()&&void 0!==v&&(c.innerHTML=v||"");e=!0}else/^text$/i.test(k)?("input"!==c.nodeName.toLowerCase()&&(c.innerHTML="",void 0!==v&&c.appendChild(E.createTextNode(v))),e=!0):/^type$/i.test(k)&&z&&this.added&&(e=!0);e&&(g[k]=v,delete a[k],e=!1)}for(k in a)c.setAttribute(k,a[k]);for(k in g)this[k]=a[k]=g[k],delete g[k];return this},val:function(a){var c=this.element,d=void 0===a;return"input"===this.nodeName&&"checkbox"===c.getAttribute("type")?
d?this.checked()?1:0:this.checked(a):d?c.value:(c.value=a,this)},checked:function(a){var c=this.element;return void 0===a?c.checked:(a?c.setAttribute("checked","checked"):c.removeAttribute("checked"),this)},css:function(a,c){var d=this.element.style,g;if("object"===typeof a)for(g in a)d[g]=a[g];else g&&void 0!==c&&(d[g]=c);return this},translate:function(a,c){var d=this.element;void 0!==a&&(d.style.left=a+"px");void 0!==c&&(d.style.top=c+"px");return this},add:function(a,c){var d=this.element,g=a.element;
c?g.insertBefore(d,g.firstChild):g.appendChild(d);this.added=!0;return this},hide:function(){this.element.style.display="none";return this},show:function(){this.element.style.display="";return this},focus:function(){"function"===typeof this.element.focus?this.element.focus():g.dem.fire(this.element,"focus")},destroy:function(){var a=this.element||{};a.onclick=a.onmouseout=a.onmouseover=a.onmousemove=a.onblur=a.onfocus=null;W||(W=p("div"));a&&W.appendChild(a);W.innerHTML="";delete this.element;return null},
on:G?function(a,c){this.element["on"+a]=function(){var a=r.event;a.target=a.srcElement;c(a)};return this}:function(d,c){var g=c;a&&"click"===d&&(d="touchstart",g=function(a){a.preventDefault();c()});this.element["on"+d]=g;return this},bind:function(a,c,d){F.listen(this.element,a,c,d);return this},unbind:function(a,c){F.unlisten(this.element,a,c);return this},trigger:function(a,c){F.fire(this.element,a,c);return this},fadeIn:function(a,c){var d="fast"===a?400:1E3;this.show();this.attr({opacity:0});
g.danimate.animate(this.element,{opacity:1},d,"linear",c)},animate:function(a,c,d,k){g.danimate.animate(this.element,a,c,d,k)}};t.prototype.constructor=t;k.fn.html=function(a,c,d,g){var e={},k;c&&"type"in c&&(e.type=c.type,delete c.type);a=(new t(a,g,e)).css(d).attr(c);for(k in e)c[k]=e[k];return a}}]);FusionCharts.register("module",["private","modules.renderer.js-raphaeltooltip",function(){var g=this,k=g.window,F=k.document,r=F.body||F.getElementsByTagName("body")[0],E=g.hcLib,z=E.Raphael,G=z.eve,
a=E.createElement,L=E.addEvent,d=E.removeEvent,l=E.getPosition,P=E.hasTouch,W=E.getTouchEvent,p=Math,t=p.ceil,m=p.floor,c={},w=k.screen.availHeight,J=k.screen.availWidth,e={E:1,moz:1,webkit:1,o:1,ms:1},v={borderRadius:"borderRadius",boxShadow:"boxShadow"},H=/\-([a-z])/ig,B=function(a,c){return c.toUpperCase()},Q=function(a){var c=I.forbiddenStyle,d,g,k;for(d in a)g=H.test(d)?d.replace(H,B):d,void 0!==a[d]&&!c[g]&&(this[g]=a[d]),z.vml&&/color/ig.test(g)&&(this[g]=z.getRGB(this[g]).toString());for(d in v)if(this[d])for(k in e)this[k+
d]=this[d]},I=E.toolTip={elementId:"fusioncharts-tooltip-element",element:null,lastTarget:null,currentTarget:null,currentPaper:null,pointeroffset:12,prevented:!1,defaultStyle:E.extend2(Q.prototype,{backgroundColor:"#ffffee",borderColor:"#000000",borderWidth:"1px",color:"#000000",fontSize:"10px",lineHeight:"12px",padding:"3px",borderStyle:"solid"}),defaultContainerStyle:{position:"absolute",textAlign:"left",margin:"0",zIndex:"99999",pointer:"default",display:"block"},forbiddenStyle:{}},ha=function(a){!0===
I._oobready?I._oobready=!1:(d(r,"touchstart",ha),!I.hidden&&I.currentTarget&&(a=a.srcElement||a.target||c,a.raphael&&I.currentTarget.paper.getById(a.raphaelid)===I.currentTarget||I.hide()))};z.svg&&(I.defaultContainerStyle.pointerEvents="none",I.defaultStyle.borderRadius="0",I.defaultStyle.boxShadow="none");z.vml&&(I.forbiddenStyle.borderRadius=!0,I.forbiddenStyle.boxShadow=!0,I.defaultStyle.filter="");I.setup=function(){var c=I.container,e=I.textElement,d=I.style,k=I.defaultContainerStyle,v=I.forbiddenStyle,
l;c||(c=I.element=a("span"),(F.body||F.getElementsByTagName("body")[0]).appendChild(c),c.setAttribute("id",I.elementId),d=I.containerStyle=c.style,e=I.textElement=a("span"),c.appendChild(e),I.style=z.vml?e.runtimeStyle:e.style,I.style.overflow="hidden",I.style.display="block",I.hidden=!1,I.hide());for(l in k)!v[l]&&(d[l]=k[l]);I.scatted=!0;G.on("raphael.drag.start.*",function(){I.scatted&&(I.waitingScat=!0)});G.on("raphael.drag.move.*",function(){I.waitingScat&&(I.block(),I.waitingScat=!1)});G.on("raphael.drag.end.*",
function(){I.waitingScat=!1;I.scatted&&I.unblock(!0)});G.on("raphael.remove",function(){if(I.currentPaper===this||I.currentTarget&&I.currentTarget.paper===this)I.hide(),I.currentTarget=I.currentPaper=null});g.addEventListener("LinkedChartInvoked",function(a){I.currentPaper===a.sender.apiInstance.components.paper&&I.hide()});g.addEventListener("realTimeUpdateComplete",function(a){I.currentPaper===a.sender.apiInstance.components.paper&&I.hide()})};I.restyle=function(a){var c=I.style,e;for(e in a)c[e]=
a[e]};I.onelement=function(a){if(!a.__tipProcessed){var c=this.paper,e="group"===this.type?c&&c._elementFromEvent(a):this,d=c.__tipStyle;e&&d&&e.__tipNeeded&&((a.originalEvent||a).FusionChartsPreventEvent&&I.preventTooltip(),I.hiding&&(I.hiding=clearTimeout(I.hiding)),I.currentPaper!==c&&(c.__tipCp=c.canvas&&l(c.canvas.parentNode,!0)||{},I.restyle(c.__tipStyle),I.currentPaper=c),I.lastTarget=I.currentTarget,I.currentTarget=e,(I.scatted=e.__tipScatted)&&I.unblock(!0),I.onredraw.call(this,a),a.__tipProcessed=
!0,P&&(I._oobready=!0,L(r||(r=F.body||F.getElementsByTagName("body")[0]),"touchstart",ha)))}};I.onredraw=function(a){a.__tipProcessed||(a.__tipProcessed=!0,(this.paper&&this.paper._elementFromEvent(a))===I.currentTarget&&(a=W(a),I.x=m(a.pageX||a.clientX+F.body.scrollLeft+F.documentElement.scrollLeft||0),I.y=m(a.pageY||a.clientY+F.body.scrollTop+F.documentElement.scrollTop||0),I.redraw()))};I.onhide=function(a){a.__tipProcessed||(a.__tipProcessed=!0,(this.paper&&this.paper._elementFromEvent(a))===
I.currentTarget&&(I.hiding=setTimeout(I.hide,200)))};I.redraw=function(){if(!I.prevented&&!I.blocked&&I.currentTarget&&I.currentTarget.__tipNeeded){var a=I.currentTarget,c=a.paper,e=I.textElement,d=I.containerStyle,g=I.style,k=a.__tipText,a=I.pointeroffset,v=c.__tipCp,l=F.documentElement||F.body,B=l.scrollLeft,l=l.scrollTop,m=I.x,r=I.y,p,N=c.width,H=c.height,c=c.__tipConstrain;if(100>N||100>H)c=!1;I.hidden&&(I.containerStyle.top="-999em",I.show());k!==I.text&&(I.text=k,d.width=d.height="",e.innerHTML=
k,g.whiteSpace="nowrap",p=t(g.pixelWidth||e.offsetWidth||0),k=t(g.pixelHeight||e.offsetHeight||0),(I.textWidthOverflow=m+p>v.left+N)?(p=N-2*a>p?d.width:N-2*a||0,d.width=p&&p+"px"||"",g.whiteSpace="normal"):d.width="",(I.textHeightOverflow=k>H)?(d.height=(H||0)-2*a+"px",g.whiteSpace="normal"):d.height="");p=t(g.pixelWidth||e.offsetWidth||0);k=t(g.pixelHeight||e.offsetHeight||0);c?(I.textWidthOverflow?m=(m-p<v.left?v.left:m-p)-B:m+a+p>v.left-B+N-a&&(m=m-p-a),I.textHeightOverflow?r=v.top-l:r+a+k>v.top-
l+H-a&&(r=r-k-1.5*a)):(B+J<m+a+p&&(m=m-p-a),l+w<r+a+k&&(r=r-k-1.5*a));d.left=(m+a||0)+"px";d.top=(r+a||0)+"px";I.hidden&&I.show()}};I.hide=function(){I.hiding&&(I.hiding=clearTimeout(I.hiding));I.containerStyle.display="none";I.hidden=!0;I.prevented=!1};I.show=function(){I.blocked||(I.hiding&&(I.hiding=clearTimeout(I.hiding)),I.containerStyle.display="inline",I.hidden=!1)};I.preventTooltip=function(){I.prevented=!0};I.block=function(){I.blocked=!0;I.containerStyle.display="none"};I.unblock=function(a){I.blocked=
!1;a&&(I.containerStyle.display=I.hidden&&"none"||"inline")};z.fn.tooltip=function(a,c,e){c&&(c=.4*(void 0===c.opacity?1:c.opacity),z.svg?a.boxShadow="1px 1px 3px rgba(64,64,64,"+c+")":a.filter='progid:DXImageTransform.Microsoft.Shadow(Strength=2, Direction=135, Color="#404040", shadowOpacity="'+c/2+'")');this.__tipStyle=new Q(a);this.__tipCp=this.canvas&&l(this.canvas.parentNode,!0)||{};this.__tipConstrain=!!e;I.style&&I.restyle(this.__tipStyle);I.containerStyle&&I.hide();return this};z.el.trackTooltip=
function(a){var c=!!this.__tiptracking;if(void 0===a||(a=!!a)===c)return this;a?P?this.touchstart(I.onelement):(this.mouseover(I.onelement),this.mousemove(I.onredraw),this.mouseout(I.onhide)):P?this.untouchstart(I.onelement):(this.unmouseover(I.onelement),this.unmousemove(I.onredraw),this.unmouseout(I.onhide));this.__tiptracking=a;return this};z.el.tooltip=function(a,c,e,d,g){I.setup();z.el.tooltip=function(a,c,e,d,g){c=!1===a||void 0===a||""===a;this.__tipScatted=void 0===d?this.__tipScatted:!d;
void 0===this.__tipScatted&&(this.__tipScatted=!0);null!==g&&(this.__tip_blocked=g);c^!this.__tipText&&(this.__tipNeeded=!c);this.__tipText=a;if(I.currentTarget===this&&a!==I.text&&!I.hidden)I[c?"hide":"redraw"]();return this};return z.el.tooltip.call(this,a,c,e,d,g)};g.core._setTooltipZIndex=function(a){a=parseInt(a,10);I&&!isNaN(a)&&(I.defaultContainerStyle.zIndex=a,I.containerStyle&&(I.containerStyle.zIndex=a))}}]);FusionCharts.register("module",["private","modules.renderer.js-smartlabel",function(){var g=
this.hcLib,k=g.isIE,F=g.hasSVG,r=Math.max,E=this.window,z=/ HtmlUnit/.test(E.navigator.userAgent),G=E.document,a=/ AppleWebKit\//.test(E.navigator.userAgent),L=!!G.createElement("canvas").getContext,d=(E=!(!L||!G.createElement("canvas").getContext("2d")))&&E.measureText,l=/<br\/>/ig,P=/&lt;|&gt;/g,W=[],p={" ":"&nbsp;"},E=function(){function t(a,c,e){if(!a||!a.length)return 0;var d=e.getWidthFunction(),g=0,k=0,k=d(a),v=k/a.length;e=c;g=Math.ceil(c/v);if(k<c)return a.length-1;g>a.length&&(e=c-k,g=a.length);
for(;0<e;)if(e=c-d(a.substr(0,g)),k=Math.floor(e/v))g+=k;else return g;for(;0>e;)if(e=c-d(a.substr(0,g)),k=Math.floor(e/v))g+=k;else break;return g}function m(a,c){c=5<c?c:5;this.maxContainers=20>c?c:20;this.last=this.first=null;this.containers={};this.length=0;this.rootNode=a;if(T){var e=G.createElementNS("http://www.w3.org/2000/svg","svg");e.setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink");e.setAttributeNS("http://www.w3.org/2000/svg","height","0");e.setAttributeNS("http://www.w3.org/2000/svg",
"width","0");this.svgRoot=e;this.rootNode.appendChild(e)}}function c(a,c,d){if("undefined"!==typeof a&&"object"!==typeof a){this.id=a;var g;"string"===typeof c&&(c=G.getElementById(c));a:{if(c&&(c.offsetWidth||c.offsetHeight)){if(c.appendChild){c.appendChild(c=G.createElement("div"));c.className="fusioncharts-smartlabel-container";c.setAttribute("aria-hidden","true");c.setAttribute("role","presentation");a=c;break a}}else if((a=G.getElementsByTagName("body")[0])&&a.appendChild){c=G.createElement("div");
c.className="fusioncharts-smartlabel-container";c.setAttribute("aria-hidden","true");c.setAttribute("role","presentation");a.appendChild(c);a=c;break a}a=void 0}a=this.parentContainer=a;a.innerHTML="WgI";if(z||!k&&!a.offsetHeight&&!a.offsetWidth)T=!0;a.innerHTML="";for(g in e)a.style[g]=e[g];this.containerManager=new m(a,10);this.showNoEllipses=!d;this.init=!0;this.style={};this.setStyle()}}var w=g.supportedStyle,E={fontWeight:1,"font-weight":1,fontStyle:1,"font-style":1,fontSize:1,"font-size":1,
fontFamily:1,"font-family":1},e={position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},v=a?0:4.5,H=0,B=/\b_SmartLabel\b/,Q=/\b_SmartLabelBR\b/,I=/(<[^<\>]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,ha=RegExp("\\<span[^\\>]+?_SmartLabel[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),X=/<[^>][^<]*[^>]+>/i,T=!1,aa=0,oa=0,M,la,C;G.getElementsByClassName?(M="getElementsByClassName",la="_SmartLabel",C=!0):(M="getElementsByTagName",la="span",C=!1);m.prototype={get:function(a){var c=
this.containers,e=this.length,d=this.maxContainers,g,k="",v="",v=this.getCanvasFont(a);for(g in w)void 0!==a[g]&&(k+=w[g]+":"+a[g]+";");if(!k)return!1;if(c[k])k=c[k],this.first!==k&&(k.prev&&(k.prev.next=k.next),k.next&&(k.next.prev=k.prev),k.next=this.first,k.next.prev=k,this.last===k&&(this.last=k.prev),k.prev=null,this.first=k);else{if(e>=d)for(a=e-d+1;a--;)this.removeContainer(this.last);k=this.addContainer(k,v)}return k},getCanvasFont:function(a){var c,e=[];if(!L||!d)return!1;for(c in E)void 0!==
a[c]&&e.push(a[c]);return e.join(" ")},setMax:function(a){var c=this.length;a=5<a?a:5;a=20>a?a:20;if(a<c){for(c-=a;c--;)this.removeContainer(this.last);this.length=a}this.maxContainers=a},addContainer:function(a,c){var e,d;this.containers[a]=d={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:a,canvasStr:c,charCache:{}};d.next=this.first;d.next&&(d.next.prev=d);this.first=d;this.last||(this.last=d);this.length+=1;e=d.node=G.createElement("div");this.rootNode.appendChild(e);
k&&!F?e.style.setAttribute("cssText",a):e.setAttribute("style",a);e.setAttribute("aria-hidden","true");e.setAttribute("role","presentation");e.style.display="inline-block";e.innerHTML="WgI";d.lineHeight=e.offsetHeight;d.avgCharWidth=e.offsetWidth/3;T?(e=d.svgText=G.createElementNS("http://www.w3.org/2000/svg","text"),e.setAttribute("style",a),this.svgRoot.appendChild(e),e.textContent="WgI",d.lineHeight=e.getBBox().height,d.avgCharWidth=(e.getBBox().width-v)/3,e.textContent="...",d.ellipsesWidth=e.getBBox().width-
v,e.textContent=".",d.dotWidth=e.getBBox().width-v):c?(e=d.canvas=G.createElement("canvas"),e.style.height=e.style.width="0px",this.rootNode.appendChild(e),d.context=e=e.getContext("2d"),e.font=c,d.ellipsesWidth=e.measureText("...").width,d.dotWidth=e.measureText(".").width):(e.innerHTML="...",d.ellipsesWidth=e.offsetWidth,e.innerHTML=".",d.dotWidth=e.offsetWidth,e.innerHTML="");return d},removeContainer:function(a){var c=a.keyStr;c&&this.length&&a&&(--this.length,a.prev&&(a.prev.next=a.next),a.next&&
(a.next.prev=a.prev),this.first===a&&(this.first=a.next),this.last===a&&(this.last=a.prev),a.node.parentNode.removeChild(a.node),a.canvas&&a.canvas.parentNode.removeChild(a.canvas),delete this.containers[c])},dispose:function(){var a,c=this.containers;this.maxContainers=null;for(a in c)this.removeContainer(c[a]);this.rootNode.parentNode.removeChild(this.rootNode);this.last=this.first=this.rootNode=null}};m.prototype.constructor=m;c.prototype={dispose:function(){this.init&&(this.containerManager&&
this.containerManager.dispose&&this.containerManager.dispose(),delete this.container,delete this.context,delete this.cache,delete this.containerManager,delete this.containerObj,delete this.id,delete this.style,delete this.parentContainer,delete this.showNoEllipses)},useEllipsesOnOverflow:function(a){this.init&&(this.showNoEllipses=!a)},getWidthFunction:function(){var a=this.context,c=this.container,e=this.containerObj.svgText;return e?function(a){var c;e.textContent=a;a=e.getBBox();c=a.width-v;1>
c&&(c=a.width);return c}:a?function(c){c=c&&c.split?c.split(l):W;for(var e=0,d=c.length,g=0,e=0;e<d;e+=1)g=r(a.measureText(c[e]||"").width,g);return g}:function(a){c.innerHTML=a;return c.offsetWidth}},getSmartText:function(a,c,e,d){if(!this.init)return!1;if(void 0===a||null===a)a="";var g={text:a,maxWidth:c,maxHeight:e,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:a,isTruncated:!1},k=!1,v,l,m=0,w,p,z,F,E,J=-1,L=F=-1;l=this.container;var W=this.context,fa=0;E=0;var Ha,Fa,Oa;Oa=
[];var wa=0,jb=this.showNoEllipses?"":"...";z=this.lineHeight;var lb,fa=[],J=v=-1;lb=function(a){a=a.replace(/^\s\s*/,"");for(var c=/\s/,e=a.length;c.test(a.charAt(--e)););return a.slice(0,e+1)};F=-1;Fa=this.getWidthFunction();e===z&&(e*=1.2);if(l){if(!T){(k=X.test(a))?(l.innerHTML=a,g.oriTextWidth=F=l.offsetWidth,g.oriTextHeight=E=l.offsetHeight):(p=a.replace(P,function(a){return"&lt;"===a?"<":">"}),p=this.getOriSizeImprove(p,!0),g.oriTextWidth=F=p.width,g.oriTextHeight=E=p.height);if(E<=e&&F<=c)return g.width=
g.oriTextWidth=F,g.height=g.oriTextHeight=E,g;if(z>e)return g.text="",g.width=g.oriTextWidth=0,g.height=g.oriTextHeight=0,g}a=lb(a).replace(/(\s+)/g," ");z=this.showNoEllipses?c:c-H;if(k){m=a.replace(I,"$2");a=a.replace(I,'$1<span class="_SmartLabel">$2</span>');a=a.replace(/(<br\s*\/*\>)/g,'<span class="_SmartLabel _SmartLabelBR">$1</span>');l.innerHTML=a;wa=l[M](la);W=0;for(Fa=wa.length;W<Fa;W+=1)if(a=wa[W],C||B.test(a.className))lb=a.innerHTML,""!==lb&&(" "===lb?J=fa.length:"-"===lb&&(v=fa.length),
fa.push({spaceIdx:J,dashIdx:v,elem:a}),Oa.push(lb));wa=0;v=fa.length;aa=fa[0].elem.offsetWidth;if(aa>c)return g.text="",g.width=g.oriTextWidth=g.height=g.oriTextHeight=0,g;aa>z&&!this.showNoEllipses&&(z=c-2*oa,z>aa?jb="..":(z=c-oa,z>aa?jb=".":(z=0,jb="")));Oa=fa[0].elem.offsetLeft;W=fa[0].elem.offsetTop;if(d)for(;wa<v;wa+=1)a=fa[wa].elem,Fa=a.offsetLeft-Oa+a.offsetWidth,Fa>z&&(Ha||(Ha=wa),l.offsetWidth>c&&(w=wa,wa=v));else for(;wa<v;wa+=1)a=fa[wa].elem,lb=a.offsetHeight+(a.offsetTop-W),Fa=a.offsetLeft-
Oa+a.offsetWidth,d=null,Fa>z?(Ha||(Ha=wa),Fa>c&&(F=fa[wa].spaceIdx,J=fa[wa].dashIdx,F>L?(fa[F].elem.innerHTML="<br/>",L=F):J>L?(fa[J].elem.innerHTML=J===wa?"<br/>-":"-<br/>",L=J):a.parentNode.insertBefore(d=G.createElement("br"),a),a.offsetHeight+a.offsetTop>e?(d?d.parentNode.removeChild(d):L===J?fa[J].elem.innerHTML="-":fa[F].elem.innerHTML=" ",w=wa,wa=v):Ha=null)):lb>e&&(w=wa,wa=v);if(w<v){g.isTruncated=!0;Ha=Ha?Ha:w;for(wa=v-1;wa>=Ha;--wa)a=fa[wa].elem,a.parentNode.removeChild(a);for(;0<=wa;--wa)a=
fa[wa].elem,Q.test(a.className)?a.parentNode.removeChild(a):wa=0}g.text=l.innerHTML.replace(ha,"$1").replace(/\&amp\;/g,"&");g.isTruncated&&(g.text+=jb,g.tooltext=m)}else{Oa=a.split("");v=Oa.length;l="";w=[];Ha=Oa[0];this.cache[Ha]?aa=this.cache[Ha].width:(aa=Fa(Ha),this.cache[Ha]={width:aa});if(z>aa)w=a.substr(0,t(a,z,this)).split(""),wa=w.length;else{if(aa>c)return g.text="",g.width=g.oriTextWidth=g.height=g.oriTextHeight=0,g;jb&&(z=c-2*oa,z>aa?jb="..":(z=c-oa,z>aa?jb=".":(z=0,jb="")))}fa=Fa(w.join(""));
E=this.lineHeight;if(d){for(;wa<v;wa+=1)if(Ha=w[wa]=Oa[wa],this.cache[Ha]?aa=this.cache[Ha].width:(p&&(aa=p.detailObj[Ha])||(aa=Fa(Ha)),this.cache[Ha]={width:aa}),fa+=aa,fa>z&&(l||(l=w.slice(0,-1).join("")),fa>c))return g.text=lb(l)+jb,g.tooltext=g.oriText,g.width=Fa(g.text),g.height=this.lineHeight,g;g.text=w.join("");g.width=fa;g.height=this.lineHeight}else{for(;wa<v;wa+=1)if(Ha=w[wa]=Oa[wa]," "!==Ha||W||(Ha="&nbsp;"),this.cache[Ha]?aa=this.cache[Ha].width:(p&&(aa=p.detailObj[Ha])||(aa=Fa(Ha)),
this.cache[Ha]={width:aa}),fa+=aa,fa>z&&(l||(l=w.slice(0,-1).join("")),fa>c)){F=a.substr(0,w.length).lastIndexOf(" ");J=a.substr(0,w.length).lastIndexOf("-");F>L?(fa=Fa(w.slice(L+1,F).join("")),w.splice(F,1,"<br/>"),L=F,d=F+1):J>L?(J===w.length-1?(fa=Fa(w.slice(L+1,F).join("")),w.splice(J,1,"<br/>-")):(fa=Fa(w.slice(L+1,F).join("")),w.splice(J,1,"-<br/>")),L=J,d=J+1):(w.splice(w.length-1,1,"<br/>"+Oa[wa]),F=w.length-2,fa=Fa(w.slice(L+1,F+1).join("")),L=F,d=wa);E+=this.lineHeight;if(E>e)return g.text=
lb(l)+jb,g.tooltext=g.oriText,g.width=c,g.height=E-this.lineHeight,g;m=r(m,fa);l=null;Ha=t(a.substr(d),z,this);fa=Fa(a.substr(d,Ha||1));w.length<d+Ha&&(w=w.concat(a.substr(w.length,d+Ha-w.length).split("")),wa=w.length-1)}m=r(m,fa);g.text=w.join("");g.width=m;g.height=E}return g}g.height=l.offsetHeight;g.width=l.offsetWidth}else g.error=Error("Body Tag Missing!");return g},setStyle:function(a){if(!this.init)return!1;if(a!==this.style||this.styleNotSet){a||(a=this.style);var c=a,e=c.fontSize=c.fontSize||
"12px";c.lineHeight=c.lineHeight||c["line-height"]||1.2*parseInt(e,10)+"px";this.style=a;(this.containerObj=a=this.containerManager.get(a))?(this.container=a.node,this.context=a.context,this.cache=a.charCache,this.lineHeight=a.lineHeight,H=a.ellipsesWidth,oa=a.dotWidth,this.styleNotSet=!1):this.styleNotSet=!0}},getTextSize:function(a,c,e){if(!this.init)return!1;var d={text:a,width:null,height:null,oriTextWidth:null,oriTextHeight:null,isTruncated:!1},g=this.container;g&&(g.innerHTML=a,d.oriTextWidth=
g.offsetWidth,d.oriTextHeight=g.offsetHeight,d.width=Math.min(d.oriTextWidth,c),d.height=Math.min(d.oriTextHeight,e),d.width<d.oriTextWidth||d.height<d.oriTextHeight)&&(d.isTruncated=!0);return d},getOriSize:function(a){if(!this.init)return!1;var c={text:a,width:null,height:null},e=this.container,d=this.getWidthFunction(),g=0;if(T){a=a.split(/(<br\s*\/*\>)/g);e=a.length;for(c.height=this.lineHeight*e;e--;)g=r(g,d(a[e]));c.width=g}else e&&(e.innerHTML=a,c.width=e.offsetWidth,c.height=e.offsetHeight);
return c},getOriSizeImprove:function(a,c){if(!this.init)return!1;var e,d,g,k=0,v=0,l={},B,m;if(!c)return this.calCharDimWithCache(a);e=a.split("");B=0;for(m=e.length;B<m;B++)d=e[B],g=this.calCharDimWithCache(d,!0,e.length),v=Math.max(v,g.height),k+=g.width,l[d]=g.width;return{width:k,height:v,detailObj:l}},calCharDimWithCache:function(a,c,e){if(!this.init)return!1;var d=this.container,g=this.style||{},k=this.advancedCache||(this.advancedCache={}),v=this.advancedCacheKey||(this.advancedCacheKey=[]),
l=a+(g.fontSize||"")+(g.fontFamily||"")+(g.fontWeight||"")+(g.fontStyle||""),g=a+"init"+(g.fontSize||"")+(g.fontFamily||"")+(g.fontWeight||"")+(g.fontStyle||""),B;p[a]&&(a=p[a]);c?void 0===(c=k[g])&&(d.innerHTML=a.repeat?a.repeat(e):Array(e+1).join(a),c=d.offsetWidth,d.innerHTML=a,B=d.offsetWidth,c=k[g]=(c-e*B)/(e+1),v.push(g),500<v.length&&delete k[v.shift()]):c=0;if(e=k[l])return k=e.split(","),{width:parseFloat(k[0],10),height:parseFloat(k[1],10)};d.innerHTML=a;a={height:d.offsetHeight,width:d.offsetWidth+
c};k[l]=a.width+","+a.height;v.push(l);500<v.length&&delete k[v.shift()];return a}};return c.prototype.constructor=c}();g.SmartLabelManager=E}]);FusionCharts.register("module",["private","modules.renderer.js-numberformatter",function(){var g=this,k=g.hcLib,F=k.pluckNumber,r=k.extend2,E=k.getValidValue,z=k.pluck,G=k.getFirstValue,a=Math.abs,L=Math.pow,d=Math.round,l=function(a){return a&&a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},P={},W=function(a){var d=[],c;for(c in a)d.push(c+"_"+a[c]);d.sort();
return d.join(",")},p=function(a){var d={},c;for(c in a)d[c.toLowerCase()]=a[c];return d};k.NumberFormatter=function(){function g(a,c,e){var k;if(0>=c)return d(a)+"";if(isNaN(c))return a+="",12<a.length&&-1!=a.indexOf(".")&&(c=12-a.split(".")[0].length,k=L(10,c),a=d(a*k)/k+""),a;k=L(10,c);a=d(a*k)/k+"";if(1==e)for(-1==a.indexOf(".")&&(a+=".0"),e=a.split("."),c-=e[1].length,e=1;e<=c;e++)a+="0";return a}function k(a,c,e,d,g){var l=Number(a),m="",w=!1,t="",r="",p=t=0;if(isNaN(l))return"";if(1E15<l)return l.toExponential(g?
1:14);t=0;p=a.length;-1!=a.indexOf(".")&&(m=a.substring(a.indexOf(".")+1,a.length),p=a.indexOf("."));0>l&&(w=!0,t=1);t=a.substring(t,p);a=t.length;g=d.length-1;l=d[g];if(a<l)r=t;else for(;a>=l;)r=(a-l?e:"")+t.substr(a-l,l)+r,a-=l,l=0>=--g?d[0]:d[g],a<l&&(r=t.substring(a,0)+r);""!=m&&(r=r+c+m);!0===w&&(r="-"+r);return r}var c,w={formatnumber:"1",formatnumberscale:"1",forcenumberscale:"0",defaultnumberscale:"",numberscaleunit:["K","M"],numberscalevalue:[1E3,1E3],numberprefix:"",numbersuffix:"",decimals:"",
forcedecimals:"0",yaxisvaluedecimals:"2",decimalseparator:".",thousandseparator:",",thousandseparatorposition:[3],indecimalseparator:"",inthousandseparator:"",sformatnumber:"1",sformatnumberscale:"0",sforcenumberscale:"0",sdefaultnumberscale:"",snumberscaleunit:["K","M"],snumberscalevalue:[1E3,1E3],snumberprefix:"",snumbersuffix:"",sdecimals:"2",sforcedecimals:"0",syaxisvaluedecimals:"2",xFormatNumber:"0",xFormatNumberScale:"0",xforcenumberscale:"0",xDefaultNumberScale:"",xNumberScaleUnit:["K","M"],
xNumberScaleValue:[1E3,1E3],xNumberPrefix:"",xNumberSuffix:""},p={mscombidy2d:{formatnumberscale:"1"}},e=function(a,c){var e=a.name,d=this.csConf=r({},w);(e=p[e])&&r(d,e);this.linkedItems={iapi:a};this.configure(c)};e.prototype={configure:function(a){var c=this.linkedItems.iapi,e=c.jsonData;a=a||e.chart;var e=c.name,d=this.csConf,g,k,m,t,p,J,M,L,C,P,W,ja,ba,ta,N,na,Va,Ea,za,Ka;this.csConf=d;this.useScaleRecursively=c.useScaleRecursively;E(a.numberscaleunit)&&(g=a.numberscaleunit.split(","));if(k=
E(a.snumberscaleunit,a.numberscaleunit))k=k.split(",");if(m=E(a.xnumberscaleunit,a.numberscaleunit))m=m.split(",");if(t=E(a.ticknumberscaleunit,a.numberscaleunit))t=t.split(",");if(p=E(a.ynumberscaleunit,a.numberscaleunit))p=p.split(",");E(a.numberscalevalue)&&(J=a.numberscalevalue.split(","));if(W=E(a.snumberscalevalue,a.numberscalevalue))W=W.split(",");if(M=E(a.xnumberscalevalue,a.numberscalevalue))M=M.split(",");if(L=E(a.ticknumberscalevalue,a.numberscalevalue))L=L.split(",");if(C=E(a.ynumberscalevalue,
a.numberscalevalue))C=C.split(",");if(E(a.thousandseparatorposition))for(P=a.thousandseparatorposition.split(","),ja=P.length,ta=w.thousandseparatorposition[0];ja--;)ba=parseInt(P[ja],10),0>=ba&&(ba=ta),ta=P[ja]=ba;c||(c={});ja=F(a.scalerecursively,0);ba=F(a.sscalerecursively,ja);ta=F(a.xscalerecursively,ja);N=F(a.maxscalerecursion,-1);na=F(a.smaxscalerecursion,N);Va=F(a.xmaxscalerecursion,N);Ea=E(a.scaleseparator," ");za=E(a.sscaleseparator,Ea);Ka=E(a.xscaleseparator,Ea);N||(N=-1);this.baseConf=
P={cacheStore:[],formatnumber:z(a.formatnumber,c.formatnumber,d.formatnumber),formatnumberscale:z(a.formatnumberscale,c.formatnumberscale,d.formatnumberscale),forcenumberscale:z(a.forcenumberscale,c.forcenumberscale,d.forcenumberscale),defaultnumberscale:G(a.defaultnumberscale,c.defaultnumberscale,d.defaultnumberscale),numberscaleunit:z(g,c.numberscaleunit,d.numberscaleunit).concat(),numberscalevalue:z(J,c.numberscalevalue,d.numberscalevalue).concat(),numberprefix:G(a.numberprefix,c.numberprefix,
d.numberprefix),numbersuffix:G(a.numbersuffix,c.numbersuffix,d.numbersuffix),decimalprecision:parseInt("auto"===a.decimals?d.decimalprecision:z(a.decimals,a.decimalprecision,c.decimals,d.decimals,c.decimalprecision,d.decimalprecision),10),forcedecimals:z(a.forcedecimals,c.forcedecimals,d.forcedecimals),decimalseparator:z(a.decimalseparator,c.decimalseparator,d.decimalseparator),thousandseparator:z(a.thousandseparator,c.thousandseparator,d.thousandseparator),thousandseparatorposition:z(P,c.thousandseparatorposition,
d.thousandseparatorposition),indecimalseparator:G(a.indecimalseparator,c.indecimalseparator,d.indecimalseparator),inthousandseparator:G(a.inthousandseparator,c.inthousandseparator,d.inthousandseparator),scalerecursively:ja,maxscalerecursion:N,scaleseparator:Ea};E(P.inthousandseparator)&&(this.baseConf._REGinthousandseparator=new RegExp(l(P.inthousandseparator),"g"));E(P.indecimalseparator)&&(this.baseConf._REGindecimalseparator=new RegExp(l(P.indecimalseparator)));this.Y=[];g={cacheStore:[],formatnumber:P.formatnumber,
formatnumberscale:P.formatnumberscale,forcenumberscale:P.forcenumberscale,defaultnumberscale:P.defaultnumberscale,numberscaleunit:P.numberscaleunit.concat(),numberscalevalue:P.numberscalevalue.concat(),numberprefix:P.numberprefix,numbersuffix:P.numbersuffix,decimalprecision:P.decimalprecision,forcedecimals:P.forcedecimals,decimalseparator:P.decimalseparator,thousandseparator:P.thousandseparator,thousandseparatorposition:P.thousandseparatorposition,indecimalseparator:P.indecimalseparator,inthousandseparator:P.inthousandseparator,
scalerecursively:ja,maxscalerecursion:N,scaleseparator:Ea};c.useScaleRecursively&&(g.numberscalevalue&&g.numberscalevalue.length)==(g.numberscaleunit&&g.numberscaleunit.length)||(g.scalerecursively=ja=0);J={cacheStore:[],formatnumber:g.formatnumber,formatnumberscale:g.formatnumberscale,forcenumberscale:g.forcenumberscale,defaultnumberscale:g.defaultnumberscale,numberscaleunit:g.numberscaleunit.concat(),numberscalevalue:g.numberscalevalue.concat(),numberprefix:g.numberprefix,numbersuffix:g.numbersuffix,
decimalprecision:parseInt(z(a.yaxisvaluedecimals,g.decimalprecision,2),10),forcedecimals:z(a.forceyaxisvaluedecimals,g.forcedecimals),decimalseparator:g.decimalseparator,thousandseparator:g.thousandseparator,thousandseparatorposition:g.thousandseparatorposition.concat(),indecimalseparator:g.indecimalseparator,inthousandseparator:g.inthousandseparator,scalerecursively:ja,maxscalerecursion:N,scaleseparator:Ea};W={cacheStore:[],formatnumber:z(a.sformatnumber,c.sformatnumber,w.sformatnumber),formatnumberscale:z(a.sformatnumberscale,
c.sformatnumberscale,w.sformatnumberscale),forcenumberscale:z(a.sforcenumberscale,c.sforcenumberscale,w.sforcenumberscale),defaultnumberscale:G(a.sdefaultnumberscale,c.sdefaultnumberscale,g.defaultnumberscale),numberscaleunit:z(k,c.snumberscaleunit,w.snumberscaleunit).concat(),numberscalevalue:z(W,c.snumberscalevalue,w.snumberscalevalue).concat(),numberprefix:G(a.snumberprefix,c.snumberprefix,w.snumberprefix),numbersuffix:G(a.snumbersuffix,c.snumbersuffix,w.snumbersuffix),decimalprecision:parseInt(z(a.syaxisvaluedecimals,
a.sdecimals,a.decimals,c.sdecimals,w.sdecimals),10),forcedecimals:z(a.forcesyaxisvaluedecimals,a.sforcedecimals,a.forcedecimals,c.sforcedecimals,w.sforcedecimals),decimalseparator:z(a.decimalseparator,c.decimalseparator,w.decimalseparator),thousandseparator:z(a.thousandseparator,c.thousandseparator,w.thousandseparator),thousandseparatorposition:g.thousandseparatorposition.concat(),indecimalseparator:z(a.indecimalseparator,c.indecimalseparator,w.indecimalseparator),inthousandseparator:z(a.inthousandseparator,
c.inthousandseparator,w.inthousandseparator),scalerecursively:ba,maxscalerecursion:na,scaleseparator:za};k=r({},W);k.decimalprecision=parseInt(z(a.sdecimals,a.decimals,a.syaxisvaluedecimals,c.sdecimals,w.sdecimals),10);k.forcedecimals=z(a.sforcedecimals,a.forcedecimals,a.forcesyaxisvaluedecimals,c.sforcedecimals,w.sforcedecimals);k.cacheStore=[];c.useScaleRecursively&&(W.numberscalevalue&&W.numberscalevalue.length)==(W.numberscaleunit&&W.numberscaleunit.length)||(W.scalerecursively=ba=0);/^(bubble|scatter|selectscatter|zoomscatter)$/.test(e)&&
(J.formatnumber=z(a.yformatnumber,J.formatnumber),J.formatnumberscale=z(a.yformatnumberscale,J.formatnumberscale),J.forcenumberscale=z(a.yforcenumberscale,J.forcenumberscale),J.defaultnumberscale=G(a.ydefaultnumberscale,J.defaultnumberscale),J.numberscaleunit=z(p,J.numberscaleunit),J.numberscalevalue=z(C,J.numberscalevalue),J.numberprefix=z(a.ynumberprefix,J.numberprefix),J.numbersuffix=z(a.ynumbersuffix,J.numbersuffix),g.formatnumber=z(a.yformatnumber,g.formatnumber),g.formatnumberscale=z(a.yformatnumberscale,
g.formatnumberscale),g.forcenumberscale=z(a.yforcenumberscale,g.forcenumberscale),g.defaultnumberscale=G(a.ydefaultnumberscale,g.defaultnumberscale),g.numberscaleunit=z(a.ynumberscaleunit,g.numberscaleunit.concat()),g.numberscalevalue=z(a.ynumberscalevalue,g.numberscalevalue.concat()),g.numberprefix=z(a.ynumberprefix,g.numberprefix),g.numbersuffix=z(a.ynumbersuffix,g.numbersuffix));/^(pie2d|pie3d|doughnut2d|doughnut3d|marimekko|pareto2d|pareto3d)$/.test(e)&&(g.decimalprecision=z(a.decimals,"2"));
ja&&(g.numberscalevalue.push(1),g.numberscaleunit.unshift(g.defaultnumberscale),J.numberscalevalue.push(1),J.numberscaleunit.unshift(J.defaultnumberscale));ba&&(W.numberscalevalue.push(1),W.numberscaleunit.unshift(W.defaultnumberscale),k.numberscalevalue.push(1),k.numberscaleunit.unshift(k.defaultnumberscale));this.Y[0]={yAxisLabelConf:J,dataLabelConf:g};this.Y[1]={yAxisLabelConf:W,dataLabelConf:k};this.paramLabels=g;this.param1=J;this.param2=W;this.paramLabels2=k;this.paramX={cacheStore:[],formatnumber:z(a.xformatnumber,
P.formatnumber),formatnumberscale:z(a.xformatnumberscale,P.formatnumberscale),forcenumberscale:z(a.xforcenumberscale,P.forcenumberscale),defaultnumberscale:G(a.xdefaultnumberscale,P.defaultnumberscale),numberscaleunit:z(m,P.numberscaleunit.concat()),numberscalevalue:z(M,P.numberscalevalue.concat()),numberprefix:z(a.xnumberprefix,P.numberprefix),numbersuffix:z(a.xnumbersuffix,P.numbersuffix),decimalprecision:parseInt(z(a.xaxisvaluedecimals,a.xaxisvaluesdecimals,P.decimalprecision,2),10),forcedecimals:z(a.forcexaxisvaluedecimals,
0),decimalseparator:P.decimalseparator,thousandseparator:P.thousandseparator,thousandseparatorposition:P.thousandseparatorposition.concat(),indecimalseparator:P.indecimalseparator,inthousandseparator:P.inthousandseparator,scalerecursively:ta,maxscalerecursion:Va,scaleseparator:Ka};this.paramLegend=r(r({},P),{cacheStore:[],decimalprecision:parseInt(F(a.legendvaluedecimals,P.decimalprecision,2),10),forcedecimals:F(a.legendvalueforcedecimals,P.forcedecimals,0),formatnumberscale:z(a.legendvalueformatnumberscale,
P.formatnumberscale),forcenumberscale:z(a.legendvalueforcenumberscale,P.forcenumberscale),formatnumber:z(a.legendvalueformatnumber,P.formatnumber)});ja&&(this.paramLegend.numberscalevalue.push(1),this.paramLegend.numberscaleunit.unshift(this.paramLegend.defaultnumberscale));c.useScaleRecursively&&(this.paramX.numberscalevalue&&this.paramX.numberscalevalue.length)==(this.paramX.numberscaleunit&&this.paramX.numberscaleunit.length)||(this.paramX.scalerecursively=ta=0);ta&&(this.paramX.numberscalevalue.push(1),
this.paramX.numberscaleunit.unshift(this.paramX.defaultnumberscale));this.paramScale={cacheStore:[],formatnumber:z(a.tickformatnumber,P.formatnumber),formatnumberscale:z(a.tickformatnumberscale,P.formatnumberscale),forcenumberscale:z(a.tickforcenumberscale,P.forcenumberscale),defaultnumberscale:G(a.tickdefaultnumberscale,P.defaultnumberscale),numberscaleunit:z(t,P.numberscaleunit.concat()),numberscalevalue:z(L,P.numberscalevalue.concat()),numberprefix:z(a.ticknumberprefix,P.numberprefix),numbersuffix:z(a.ticknumbersuffix,
P.numbersuffix),decimalprecision:parseInt(z(a.tickvaluedecimals,P.decimalprecision,"2"),10),forcedecimals:z(a.forcetickvaluedecimals,P.forcedecimals,0),decimalseparator:P.decimalseparator,thousandseparator:P.thousandseparator,thousandseparatorposition:P.thousandseparatorposition.concat(),indecimalseparator:P.indecimalseparator,inthousandseparator:P.inthousandseparator,scalerecursively:ja,maxscalerecursion:N,scaleseparator:Ea};ja&&(this.paramScale.numberscalevalue.push(1),this.paramScale.numberscaleunit.unshift(this.paramScale.defaultnumberscale));
this.timeConf={inputDateFormat:z(a.inputdateformat,a.dateformat,"mm/dd/yyyy"),outputDateFormat:z(a.outputdateformat,a.inputdateformat,a.dateformat,"mm/dd/yyyy"),days:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),months:"January February March April May June July August September October November December".split(" "),daySuffix:" st nd rd th th th th th th th th th th th th th th th th th st nd rd th th th th th th th st".split(" ")};this.cleaneValueCacheStore={};this.percentStrCacheStore=
{}},cleaneValueCacheStore:{},percentStrCacheStore:{},dispose:function(){this.Y&&delete this.Y;this.cleaneValueCacheStore&&delete this.cleaneValueCacheStore;this.percentStrCacheStore&&delete this.percentStrCacheStore;this.paramLabels&&delete this.paramLabels;this.param1&&delete this.param1;this.param2&&delete this.param2;this.paramLabels2&&delete this.paramLabels2;this.csConf&&delete this.csConf;this.iapi&&delete this.iapi;this.baseConf&&delete this.baseConf;this.timeConf&&delete this.timeConf;this.paramX&&
delete this.paramX;this.paramScale&&delete this.paramScale},parseMLAxisConf:function(c,e){var d=this.baseConf,g=this.csConf,k=F(c.scalerecursively,d.scalerecursively),l=F(c.maxscalerecursion,d.maxscalerecursion),m=E(c.scaleseparator,d.scaleseparator),t,r,p,M,J,C;e=F(e,this.Y.length);E(c.numberscaleunit)&&(t=c.numberscaleunit.split(","));E(c.numberscalevalue)&&(r=c.numberscalevalue.split(","));l||(l=-1);if(E(c.thousandseparatorposition))for(p=c.thousandseparatorposition.split(","),M=p.length,C=w.thousandseparatorposition[0];M--;)(J=
F(a(p[M])))?C=J:J=C,p[M]=J;d={cacheStore:[],formatnumber:z(c.formatnumber,d.formatnumber),formatnumberscale:z(c.formatnumberscale,d.formatnumberscale),forcenumberscale:z(c.forcenumberscale,d.forcenumberscale),defaultnumberscale:G(c.defaultnumberscale,d.defaultnumberscale),numberscaleunit:z(t,d.numberscaleunit).concat(),numberscalevalue:z(r,d.numberscalevalue).concat(),numberprefix:G(c.numberprefix,d.numberprefix),numbersuffix:G(c.numbersuffix,d.numbersuffix),forcedecimals:z(c.forcedecimals,d.forcedecimals),
decimalprecision:parseInt("auto"===c.decimals?g.decimalprecision:z(c.decimals,d.decimalprecision),10),decimalseparator:z(c.decimalseparator,d.decimalseparator),thousandseparator:z(c.thousandseparator,d.thousandseparator),thousandseparatorposition:z(p,d.thousandseparatorposition),indecimalseparator:G(c.indecimalseparator,d.indecimalseparator),inthousandseparator:G(c.inthousandseparator,d.inthousandseparator),scalerecursively:k,maxscalerecursion:l,scaleseparator:m};this.useScaleRecursively&&(d.numberscalevalue&&
d.numberscalevalue.length)==(d.numberscaleunit&&d.numberscaleunit.length)||(d.scalerecursively=k=0);l={cacheStore:[],formatnumber:d.formatnumber,formatnumberscale:d.formatnumberscale,forcenumberscale:d.forcenumberscale,defaultnumberscale:d.defaultnumberscale,numberscaleunit:d.numberscaleunit.concat(),numberscalevalue:d.numberscalevalue.concat(),numberprefix:d.numberprefix,numbersuffix:d.numbersuffix,decimalprecision:parseInt(z(c.yaxisvaluedecimals,d.decimalprecision,2),10),forcedecimals:z(c.forceyaxisvaluedecimals,
d.forcedecimals),decimalseparator:d.decimalseparator,thousandseparator:d.thousandseparator,thousandseparatorposition:d.thousandseparatorposition.concat(),indecimalseparator:d.indecimalseparator,inthousandseparator:d.inthousandseparator,scalerecursively:k,maxscalerecursion:l,scaleseparator:m};k&&(d.numberscalevalue.push(1),d.numberscaleunit.unshift(d.defaultnumberscale),l.numberscalevalue.push(1),l.numberscaleunit.unshift(l.defaultnumberscale));this.Y[e]={dataLabelConf:d,yAxisLabelConf:l}},percentValue:function(a){var c=
this.percentStrCacheStore[a];void 0===c&&(c=isNaN(this.paramLabels.decimalprecision)?"2":this.paramLabels.decimalprecision,c=this.percentStrCacheStore[a]=k(g(a,c,this.paramLabels.forcedecimals),this.paramLabels.decimalseparator,this.paramLabels.thousandseparator,this.paramLabels.thousandseparatorposition)+"%");return c},getCleanValue:function(c,e){var d=this.cleaneValueCacheStore[c];if(void 0===d||e){var g=this.baseConf,d=c+"";g._REGinthousandseparator&&(d=d.replace(g._REGinthousandseparator,""));
g._REGindecimalseparator&&(d=d.replace(g._REGindecimalseparator,"."));d=parseFloat(d);d=isFinite(d)?d:NaN;this.cleaneValueCacheStore[c]=d=isNaN(d)?null:e?a(d):d}return d},dataLabels:function(a,e){var d=this.Y[e]||(e?this.Y[1]:this.Y[0]),g,d=d&&d.dataLabelConf||this.baseConf;g=d.cacheStore[a];void 0===g&&(g=d.cacheStore[a]=c(a,d));return g},yAxis:function(a,e){var d=this.Y[e]||(e?this.Y[1]:this.Y[0]),g,d=d&&d.yAxisLabelConf||this.baseConf;g=d.cacheStore[a];void 0===g&&(g=d.cacheStore[a]=c(a,d,!0));
return g},xAxis:function(a){var e=this.paramX.cacheStore[a];void 0===e&&(e=this.paramX.cacheStore[a]=c(a,this.paramX,!0));return e},sYAxis:function(a){var e=this.Y[1],d,e=e&&e.yAxisLabelConf||this.baseConf;d=e.cacheStore[a];void 0===d&&(d=e.cacheStore[a]=c(a,e));return d},scale:function(a){var e=this.paramScale.cacheStore[a];void 0===e&&(e=this.paramScale.cacheStore[a]=c(a,this.paramScale));return e},getCleanTime:function(a){var c;this.timeConf.inputDateFormat&&Date.parseExact&&(c=Date.parseExact(a,
this.timeConf.inputDateFormat));return c&&c.getTime()},legendValue:function(a){var e=this.paramLegend.cacheStore[a];void 0===e&&(e=this.paramLegend.cacheStore[a]=c(a,this.paramLegend));return e},legendPercentValue:function(a){var c=this.percentStrCacheStore[a],e=this.paramLegend;void 0===c&&(c=isNaN(e.decimalprecision)?"2":e.decimalprecision,c=this.percentStrCacheStore[a]=k(g(a,c,e.forcedecimals),e.decimalseparator,e.thousandseparator,e.thousandseparatorposition)+"%");return c},getDateValue:function(a){var c,
e,d;a&&!/\//.test(this.timeConf.inputDateFormat)&&(a=a.replace(new RegExp(this.timeConf.inputDateFormat.replace(/[a-z]/ig,"").slice(0,1),"g"),"/"));a=/^dd/.test(this.timeConf.inputDateFormat)&&a&&a.replace(/(\d{1,2})\/(\d{1,2})\/(\d{2,4})/,"$2/$1/$3")||a;c=new Date(a);e=c.getTime();!e&&a&&/\:/.test(a)&&(a=a.split(":"),e=F(a[0],0),d=F(a[1],0),a=F(a[2],0),e=23<e?24===e&&0===d&&0===a?e:23:e,d=59<d?59:d,a=59<a?59:a,c=new Date,c.setHours(e),c.setMinutes(d),c.setSeconds(a),e=c.getTime());return{ms:e,date:c}},
getFormattedDate:function(a,c){var e="object"===typeof a&&a||new Date(a),d=this.timeConf,g=z(c,d.outputDateFormat),k=e.getFullYear(),l=e.getMonth(),m=e.getDate(),w=e.getDay(),t=e.getMinutes(),r=e.getSeconds(),e=e.getHours(),t=9<t?""+t:"0"+t,r=9<r?""+r:"0"+r,e=9<e?""+e:"0"+e;g.match(/dnl/)&&(g=g.replace(/dnl/ig,d.days[w]));g.match(/dns/)&&(g=g.replace(/dns/ig,d.days[w]&&d.days[w].substr(0,3)));g.match(/dd/)&&(g=g.replace(/dd/ig,m));g.match(/mnl/)&&(g=g.replace(/mnl/ig,d.months[l]));g.match(/mns/)&&
(g=g.replace(/mns/ig,d.months[l]&&d.months[l].substr(0,3)));g.match(/mm/)&&(g=g.replace(/mm/ig,l+1));g.match(/yyyy/)&&(g=g.replace(/yyyy/ig,k));g.match(/yy/)&&(g=g.replace(/yy/ig,(k%1E3%100+"").replace(/^(\d)$/,"0$1")));g.match(/hh12/)&&(g=g.replace(/hh12/ig,e%12||12));g.match(/hh/)&&(g=g.replace(/hh/ig,e));g.match(/mn/)&&(g=g.replace(/mn/ig,t));g.match(/ss/)&&(g=g.replace(/ss/ig,r));g.match(/ampm/)&&(g=g.replace(/ampm/ig,12>e?"AM":"PM"));g.match(/ds/)&&(g=g.replace(/ds/ig,d.daySuffix[m]));return g}};
e.prototype.constructor=e;c=function(a,c,e){if(null!==a){a=Number(a);var d=a+"",l,w,r,p,E;l=1==c.formatnumberscale?c.defaultnumberscale:"";E=(E=d.split(".")[1])?E.length:c.forcedecimals?"2":"";if(1==c.formatnumberscale){d=a;w=c.defaultnumberscale;a=c.numberscalevalue;l=c.numberscaleunit;var J=c.scalerecursively;r=c.forcenumberscale;p={};var M=w,L=0,C=[],P=[],G;r=F(r)||0;if(J){M=F(a[0])||1E3;for(L=0;L<a.length;L++)if(J=F(a[L])||1E3,Math.abs(Number(d))>=J&&L<a.length-1)G=d%J,d=(d-G)/J,0===L&&0!==G&&
""===l[L]&&r?(C.push(G/M),P.push(l[1]||"")):0!==G&&(1===L&&""===w&&r?(J=G+(C.length?C.pop():0),P.pop(),C.push(J)):C.push(G),P.push(l[L]));else{0===L&&""===w&&r?(d=Number(d)/M,C.push(d),P.push(l[1]||"")):(1===L&&""===w&&r?(J=d+(C.length?C.pop():0),P.pop(),C.push(J)):C.push(d),P.push(l[L]));break}C.reverse();P.reverse();p.value=C;p.scale=P}else{if(a.length===l.length)for(L=0;L<a.length;L++)if(J=F(a[L])||1E3,Math.abs(Number(d))>=J)M=l[L]||"",d=Number(d)/J;else{0===L&&""===w&&r&&(M=l[0]||"",d=Number(d)/
J);break}p.value=d;p.scale=M}w=p;a=d=w.value;l=w.scale}if(c.scalerecursively&&0!==c.formatnumberscale&&"0"!==c.formatnumberscale){e=w.value;w=w.scale;a=-1==c.maxscalerecursion?e.length:Math.min(e.length,c.maxscalerecursion);if(1==c.formatnumber)for(d="",p=0;p<a;p++)l=0===p?e[p]:Math.abs(e[p]),r=l+"",p==a-1&&(r=g(l,z(c.decimalprecision,E),c.forcedecimals)),d=d+k(r,c.decimalseparator,c.thousandseparator,c.thousandseparatorposition)+w[p]+(p<a-1?c.scaleseparator:"");else for(d="",p=0;p<a;p++)d=d+(0===
p?e[p]:Math.abs(e[p])+"")+w[p]+(p<a-1?c.scaleseparator:"");d=(c.numberprefix||"")+d+(c.numbersuffix||"")}else 1==c.formatnumber&&(d=g(a,z(c.decimalprecision,E),c.forcedecimals),d=k(d,c.decimalseparator,c.thousandseparator,c.thousandseparatorposition,e)),d=(c.numberprefix||"")+d+l+(c.numbersuffix||"");return d}};return e}();g.extend(g.core,{formatNumber:function(a,d){d=d&&p(d)||{};var c=W(d),g;P[c]?g=P[c]:P[c]=g=new k.NumberFormatter(d,{useScaleRecursively:!0});return g.dataLabels(a)}},!1);g.extend(g.core,
{formatNumber:function(a,d,c,l){c=c&&p(c)||{};var z=this.jsVars.instanceAPI||{},e=z.numberFormatter,v;""===W(c)?e?v=e:(e=this.getChartData(g.dataFormats.JSON,!0),e=e.data||{},e=e.chart||{},c=W(e),P[c]?v=P[c]:P[c]=v=new k.NumberFormatter(e,z)):(e=this.getChartData(g.dataFormats.JSON,!0),e=e.data||{},e=e.chart||{},e=r(r({},e),c),c=W(e),P[c]?v=P[c]:P[c]=v=new k.NumberFormatter(e,z));switch((d&&d.toLowerCase?d:"").toLowerCase()){case "yaxisvalues":a=v.yAxis(a,l);break;case "xaxisvalues":a=v.xAxis(a);
break;case "scale":a=v.scale(a);break;default:a=v.dataLabels(a,l)}return a}},!0)}]);FusionCharts.register("module",["private","modules.renderer.js-dom",function(){var g=this.hcLib,k=this.window,F=k.document,r=g.extend2,E="ontouchstart"in k;(function(g){var G=function(){var a={},d;a.pointerdrag={start:["mousedown"],end:["mouseup"],onStart:["mousemove"],postHandlers:{},preHandlers:{}};a.pointerhover={start:["mouseover"],end:["mouseout"]};a.click={start:["click"]};a.escape={start:["keydown"],preHandlers:{start:function(a){a=
a||k.event;return a.keyCode&&27===a.keyCode?!0:!1}}};E&&(d=a.pointerdrag,d.start.push("touchstart"),d.end.push("touchend"),d.onStart.push("touchmove"),d.postHandlers.onStart=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1});return a}(),a;a=r({},G);g.dem=new function(){var g={},d={},l=F.addEventListener?function(a,c,d){a.addEventListener(c,d,!1)}:function(a,c,d){a.attachEvent("on"+c,d)},z=F.removeEventListener?function(a,c,d){a.removeEventListener(c,d,!1)}:function(a,c,d){a.detachEvent("on"+
c,d)},E=function(d,c,g){var l=[],e,v,r;r=a[c];g.start=function(a){a=a||k.event;for(var c=r.onStart,e=r.end,l=[],v=[],t=c&&c.length||0;t--;)l.push(p(d,c[t],g,"onStart"));for(t=e&&e.length||0;t--;)v.push(p(d,e[t],g,"end"));g.startUn=g.startUn?g.startUn.concat(l):l;g.endUn=g.endUn?g.endUn.concat(v):v;g.state="start";g.closure(a)};g.onStart=function(a){a=a||k.event;g.state="on";if(g.gDef&&g.gDef.preHandlers&&"function"===typeof g.gDef.preHandlers.onStart)g.gDef.preHandlers.onStart(a);g.closure(a);if(g.gDef&&
g.gDef.postHandlers&&"function"===typeof g.gDef.postHandlers.onStart)g.gDef.postHandlers.onStart(a)};g.end=function(a){a=a||k.event;for(var c=g.startUn,e=g.endUn,d=c&&c.length||0;d--;)c[d]();delete g.startUn;g.startUn=[];for(d=e&&e.length||0;d--;)e[d]();delete g.endUn;g.endUn=[];g.state="end";g.closure(a)};if(r)for(c=r.start,v=c.length;v--;)(e=c[v])&&l.push(p(d,e,g,"start"));return l},p=function(a,c,d,g){g=g||"closure";l(a,c,d[g]);return function(){z(a,c,d[g])}},t=function(a){return function(c){c=
c||k.event;a.handler.call(a.context||a.elem,{data:a.data,type:a.type,state:a.state,isGesture:a.isGesture,target:c.target||c.srcElement,originalEvent:c})}};return{listen:function(k,c,l,r,e){var v=this;c="string"===typeof c?c.split(" "):c;var z=c.length,B=[],Q=function(a,c,e){B.push(function(){v.unlisten(a,c,e)})},I,P,G,T,aa;if(k.ownerDocument&&k.ownerDocument===F)for(;z--;)P=c[z],T=!!a[P],aa="function"===typeof l?l:l[z],G={handler:aa,elem:k,type:P,isGesture:T,gDef:T?a[P]:null,data:r,context:e,start:[],
end:[],links:{prev:null,next:null}},G.closure=t(G),T?((I=d[P])||(I=d[P]=[]),I.push(G),E(k,P,G)):((I=g[P])||(I=g[P]=[]),I.push(G),p(k,P,G)),Q(k,P,aa);else for(;z--;)P=c[z],aa="function"===typeof l?l:l[z],G={handler:aa,elem:k,type:P,isGesture:T,data:r,context:e,start:[],end:[],links:{prev:null,next:null}},G.closure=t(G),(I=g[P])||(I=g[P]=[]),I.push(G),p(k,P,G),Q(k,P,aa);return{unlisten:function(){for(var a=B.length;a--;)B[a]();B.length=0;B=null}}},unlisten:function(k,c,l){var r,e=!1,v,p;if(a[c])for(v=
(r=d[c])&&r.length||0;v--;){if(p=r[v],p.handler===l&&p.elem===k){var e=k,B=void 0,t=void 0,F=void 0,B=void 0;if(B=a[c])for(B=B.start,F=B.length;F--;)(t=B[F])&&z(e,t,p.start);r.splice(v,1);e=!0}}else for(v=(r=g[c])&&r.length||0;v--;)p=r[v],p.handler===l&&p.elem===k&&(z(k,c,p.closure),r.splice(v,1),e=!0);return e},fire:function(a,c,d,k){var e;if(a.ownerDocument&&a.ownerDocument===F)F.createEvent?(e=F.createEvent("HTMLEvents"),e.initEvent(c,!0,!0),d&&(d.originalEvent?d.originalEvent=e:r(e,d)),"function"===
typeof a[c]&&a[c].call(a),a.dispatchEvent(e)):(e=F.createEventObject(),e.eventType=c,d&&(d.originalEvent?d.originalEvent=e:r(e,d)),"function"===typeof a[c]&&a[c].call(a),a.fireEvent("on"+c,e)),k&&!e.returnValue&&k(e);else for(k=(c=g[c])&&c.length||0;k--;)e=c[k],e.elem===a&&e.closure(d)}}}})(g||k);(function(g){function E(a,d){var g="";F.defaultView&&F.defaultView.getComputedStyle?g=F.defaultView.getComputedStyle(a,"").getPropertyValue(d):a.currentStyle&&(d=d.replace(/\-(\w)/g,function(a,d){return d.toUpperCase()}),
g=a.currentStyle[d]);g=parseInt(g,10);return isNaN(g)?0:g}function a(a,g,r,t,m,c,w,z){var e=g/40,v=d[c||"linear"](t-r,e),H=0,B,F,I=k.requestAnimationFrame||k.webkitRequestAnimationFrame||k.mozRequestAnimationFrame||k.oRequestAnimationFrame||k.msRequestAnimationFrame||function(a){setTimeout(a,40)},E=function(c){var d;d=!1;c?(B||(B=c),F=c-B,c=Math.abs(r-t),d=(d=0>r-t?!1:!0)?Math.max(r-c/g*F,t)+z:Math.min(r+c/g*F,t)+z,a.style[m]=d,l&&"opacity"===m&&(d=100*Number(d),a.style.filter="progid:DXImageTransform.Microsoft.Alpha(Opacity="+
d+")"),F<g?I(E):w&&w()):H<e?(d=v[H],a.style[m]=r+d+z,l&&"opacity"===m&&(d=100*Number(d),a.style.filter="progid:DXImageTransform.Microsoft.Alpha(Opacity="+d+")"),H+=1,setTimeout(E,40)):w&&w()};z=z||"";I(E)}var L={width:{suffix:"px"},height:{suffix:"px"},opacity:!0,top:{suffix:"px"},left:{suffix:"px"}},d={linear:function(a,d){for(var g=[],k=a/d,l=0;l<d;l+=1)g[l]=k*(l+1);return g}},l=/msie/i.test(k.navigator.userAgent)&&!k.opera;g.danimate=r({animate:function(d,g,k,l,m){l={};var c={},r=function(){e+=
1;e===z&&"function"===typeof m&&m()},z=0,e=0,v,H;if(40>k){for(H in g)d.style[H]=g[H];m&&m()}else for(H in g)v=null,"x"===H?(v=H,H="left"):"y"===H&&(v=H,H="top"),L[H]&&(z+=1,l[H]=g[v||H],c[H]=E(d,H),v="object"===typeof L[H]&&L[H].suffix,a(d,k,c[H],l[H],H,"linear",r,v))}},{})})(g||k)}]);FusionCharts.register("module",["private","modules.renderer.js-colormanager",function(){var g=this.hcLib,k=g.pluckNumber,F=g.graphics.getDarkColor,r=g.graphics.getLightColor,E="AFD8F8 F6BD0F 8BBA00 FF8E46 008E8E D64646 8E468E 588526 B3AA00 008ED6 9D080D A186BE CC6600 FDC689 ABA000 F26D7D FFF200 0054A6 F7941C CC3300 006600 663300 6DCFF6".split(" "),
z="8BBA00 F6BD0F FF654F AFD8F8 FDB398 CDC309 B1D0D2 FAD1B9 B8A79E D7CEA5 C4B3CE E9D3BE EFE9AD CEA7A2 B2D9BA".split(" "),G=g.defaultPaletteOptions={paletteColors:[E,E,E,E,E],bgColor:["CBCBCB,E9E9E9","CFD4BE,F3F5DD","C5DADD,EDFBFE","A86402,FDC16D","FF7CA0,FFD1DD"],bgAngle:[270,270,270,270,270],bgRatio:["0,100","0,100","0,100","0,100","0,100"],bgAlpha:["50,50","60,50","40,20","20,10","30,30"],canvasBgColor:["FFFFFF","FFFFFF","FFFFFF","FFFFFF","FFFFFF"],canvasBgAngle:[0,0,0,0,0],canvasBgAlpha:["100",
"100","100","100","100"],canvasBgRatio:["","","","",""],canvasBorderColor:["545454","545454","415D6F","845001","68001B"],canvasBorderAlpha:[100,100,100,90,100],showShadow:[0,1,1,1,1],divLineColor:["717170","7B7D6D","92CDD6","965B01","68001B"],divLineAlpha:[40,45,65,40,30],altHGridColor:["EEEEEE","D8DCC5","99C4CD","DEC49C","FEC1D0"],altHGridAlpha:[50,35,10,20,15],altVGridColor:["767575","D8DCC5","99C4CD","DEC49C","FEC1D0"],altVGridAlpha:[10,20,10,15,10],anchorBgColor:["FFFFFF","FFFFFF","FFFFFF","FFFFFF",
"FFFFFF"],toolTipBgColor:["FFFFFF","FFFFFF","FFFFFF","FFFFFF","FFFFFF"],toolTipBorderColor:["545454","545454","415D6F","845001","68001B"],baseFontColor:["555555","60634E","025B6A","A15E01","68001B"],borderColor:["767575","545454","415D6F","845001","68001B"],borderAlpha:[50,50,50,50,50],legendBgColor:["FFFFFF","FFFFFF","FFFFFF","FFFFFF","FFFFFF"],legendBorderColor:["545454","545454","415D6F","845001","D55979"],plotGradientColor:["FFFFFF","FFFFFF","FFFFFF","FFFFFF","FFFFFF"],plotBorderColor:["333333",
"8A8A8A","FFFFFF","FFFFFF","FFFFFF"],plotFillColor:["767575","D8DCC5","99C4CD","DEC49C","FEC1D0"],bgColor3D:["FFFFFF","FFFFFF","FFFFFF","FFFFFF","FFFFFF"],bgAlpha3D:["100","100","100","100","100"],bgAngle3D:[90,90,90,90,90],bgRatio3D:["","","","",""],canvasBgColor3D:["DDE3D5","D8D8D7","EEDFCA","CFD2D8","FEE8E0"],canvasBaseColor3D:["ACBB99","BCBCBD","C8A06C","96A4AF","FAC7BC"],divLineColor3D:["ACBB99","A4A4A4","BE9B6B","7C8995","D49B8B"],divLineAlpha3D:[100,100,100,100,100],legendBgColor3D:["F0F3ED",
"F3F3F3","F7F0E8","EEF0F2","FEF8F5"],legendBorderColor3D:["C6CFB8","C8C8C8","DFC29C","CFD5DA","FAD1C7"],toolTipbgColor3D:["FFFFFF","FFFFFF","FFFFFF","FFFFFF","FFFFFF"],toolTipBorderColor3D:["49563A","666666","49351D","576373","681C09"],baseFontColor3D:["49563A","4A4A4A","49351D","48505A","681C09"],anchorBgColor3D:["FFFFFF","FFFFFF","FFFFFF","FFFFFF","FFFFFF"]},E=g.colorManager=function(a){this.linkedItems={iapi:a};this.configure()};E.prototype={configure:function(){var a=this.linkedItems.iapi,z=a.jsonData.chart||
{},d=g.extend2({},G),l=a.defaultPaletteOptions||{},E;d||(d={});for(E in l)d[E]=l[E];d=this.paletteOptions=d;l=this.themeEnabled=z.palettethemecolor;this.paletteIndex=(0<z.palette&&6>z.palette?z.palette:k(a.paletteIndex,1))-1;this.iterator=0;this.paletteColors=d.paletteColors[this.themeEnabled?0:this.paletteIndex];E=z.palettecolors;void 0!==E&&null!==E&&""!==z.palettecolors&&(this.paletteColors=z.palettecolors.split(/\s*\,\s*/));this.paletteLen=this.paletteColors.length;this.useFlatColors=k(z.useflatdataplotcolor,
a.useFlatColor,0);l&&(this.paletteIndex=5,d.bgColor[5]=r(l,35)+","+r(l,10),d.bgAngle[5]=270,d.bgRatio[5]="0,100",d.bgAlpha[5]="50,50",d.canvasBgColor[5]="FFFFFF",d.canvasBgAngle[5]=0,d.canvasBgAlpha[5]="100",d.canvasBgRatio[5]="",d.canvasBorderColor[5]=F(l,80),d.canvasBorderAlpha[5]=100,d.showShadow[5]=1,d.divLineColor[5]=F(l,20),d.divLineAlpha[5]=40,d.altHGridColor[5]=r(l,20),d.altHGridAlpha[5]=15,d.altVGridColor[5]=r(l,80),d.altVGridAlpha[5]=10,d.anchorBgColor[5]="FFFFFF",d.toolTipBgColor[5]="FFFFFF",
d.toolTipBorderColor[5]=F(l,80),d.baseFontColor[5]=l.split&&l.split(",")[0],d.borderColor[5]=F(l,60),d.borderAlpha[5]=50,d.legendBgColor[5]="FFFFFF",d.legendBorderColor[5]=F(l,80),d.plotGradientColor[5]="FFFFFF",d.plotBorderColor[5]=F(l,85),d.plotFillColor[5]=F(l,85),d.bgColor3D[5]="FFFFFF",d.bgAlpha3D[5]="100",d.bgAngle3D[5]=90,d.bgRatio3D[5]="",d.canvasBgColor3D[5]=r(l,20),d.canvasBaseColor3D[5]=r(l,40),d.divLineColor3D[5]=F(l,20),d.divLineAlpha3D[5]=40,d.legendBgColor3D[5]="FFFFFF",d.legendBorderColor3D[5]=
F(l,80),d.toolTipbgColor3D[5]="FFFFFF",d.toolTipBorderColor3D[5]=F(l,80),d.baseFontColor3D[5]=l.split&&l.split(",")[0],d.anchorBgColor3D[5]="FFFFFF",d.tickColor&&(d.tickColor[5]=F(l,90)),d.trendDarkColor&&(d.trendDarkColor[5]=F(l,90)),d.trendLightColor&&(d.trendLightColor[5]=r(l,d.TrendLightShadeOffset)),d.msgLogColor&&(d.msgLogColor[5]=r(l,80)),d.dialColor&&(d.dialColor[5]=F(l,95)+",FFFFFF,"+F(l,95)),d.dialBorderColor&&(d.dialBorderColor[5]=F(l,95)+",FFFFFF,"+F(l,95)),d.pivotColor&&(d.pivotColor[5]=
r(l,95)+",FFFFFF,"+r(l,95)),d.pivotBorderColor&&(d.pivotBorderColor[5]=F(l,95)+",FFFFFF,"+F(l,95)),d.pointerBorderColor&&(d.pointerBorderColor[5]=F(l,75)),d.pointerBgColor&&(d.pointerBgColor[5]=F(l,75)),d.thmBorderColor&&(d.thmBorderColor[5]=F(l,90)),d.thmFillColor&&(d.thmFillColor[5]=r(l,55)),d.gaugeBorderColor&&(d.gaugeBorderColor[5]=F(l,90)),d.gaugeFillColor&&(d.gaugeFillColor[5]=r(l,55)),d.cylFillColor&&(d.cylFillColor[5]=r(l,55)),d.periodColor&&(d.periodColor[5]=r(l,10)),d.winColor&&(d.winColor[5]=
"666666"),d.lossColor&&(d.lossColor[5]="CC0000"),d.drawColor&&(d.drawColor[5]="666666"),d.scorelessColor&&(d.scorelessColor[5]="FF0000"),d.gridColor&&(d.gridColor[5]=r(l,30)),d.categoryBgColor&&(d.categoryBgColor[5]=r(l,10)),d.dataTableBgColor&&(d.dataTableBgColor[5]=r(l,10)),d.gridResizeBarColor&&(d.gridResizeBarColor[5]=F(l,90)),d.scrollBarColor&&(d.scrollBarColor[5]=r(l,50)))},getColor:function(a){return this.paletteOptions[a][this.paletteIndex]},getPlotColor:function(a){var g=this.paletteColors;
a=this.useFlatColors?this.getColor("plotFillColor"):g[a%this.paletteLen];a||(this.iterator===this.paletteLen&&(this.iterator=0),a=g[this.iterator],this.iterator+=1);return a},parseColorMix:function(a,g){var d=[],k,z,E,p,t,m,c,w,J,e;g=g.replace(/\s/g,"");g=g.toLowerCase();if(""===g||null===g||void 0===g)d=[a];else for(z=g.split(","),E=a.split(","),p=Math.max(z.length,E.length,1),t=z[0],m=E[0],J=/[\{\}]/ig,e=0;e<p;e++)c=(z[e]||t).replace(J,""),w=E[e]||m,"color"==c?d.push(w):"light"==c.substr(0,5)?(k=
c.indexOf("-"),k=-1==k?1:c.substr(k+1,c.length-k),k=100-k,d.push(r(w,k))):"dark"==c.substr(0,4)?(k=c.indexOf("-"),k=-1==k?1:c.substr(k+1,c.length-k),k=100-k,d.push(F(w,k))):d.push(c);return d},parseAlphaList:function(a,g){var d=a.split(","),l=[],r,z=100,p;for(p=0;p<g;p++)r=k(d[p]),void 0!==r&&null!==r&&(z=r),l[p]=z;return l.join()},parseRatioList:function(a,g){var d=a.split(","),k=[],r=0,z,p;for(p=0;p<g;p++)z=d[p],z=isNaN(z)||void 0===z?0:Math.abs(Number(z)),z=100<z?100:z,k[p]=z,r+=z;r=100<r?100:
r;if(d.length<g)for(p=d.length;p<g;p++)k[p]=(100-r)/(g-d.length);k[-1]=0;return k.join()}};E.prototype.constructor=E;g.defaultGaugePaletteOptions={paletteColors:[z,z,z,z,z],bgColor:["CBCBCB,E9E9E9","CFD4BE,F3F5DD","C5DADD,EDFBFE","A86402,FDC16D","FF7CA0,FFD1DD"],bgAngle:[270,270,270,270,270],bgRatio:["0,100","0,100","0,100","0,100","0,100"],bgAlpha:["50,50","60,50","40,20","20,10","30,30"],toolTipBgColor:["FFFFFF","FFFFFF","FFFFFF","FFFFFF","FFFFFF"],toolTipBorderColor:["545454","545454","415D6F",
"845001","68001B"],baseFontColor:["555555","60634E","025B6A","A15E01","68001B"],tickColor:["333333","60634E","025B6A","A15E01","68001B"],trendDarkColor:["333333","60634E","025B6A","A15E01","68001B"],trendLightColor:["f1f1f1","F3F5DD","EDFBFE","FFF5E8","FFD1DD"],pointerBorderColor:["545454","60634E","415D6F","845001","68001B"],pointerBgColor:["545454","60634E","415D6F","845001","68001B"],canvasBgColor:["FFFFFF","FFFFFF","FFFFFF","FFFFFF","FFFFFF"],canvasBgAngle:[0,0,0,0,0],canvasBgAlpha:["100","100",
"100","100","100"],canvasBgRatio:["","","","",""],canvasBorderColor:["545454","545454","415D6F","845001","68001B"],canvasBorderAlpha:[100,100,100,90,100],altHGridColor:["EEEEEE","D8DCC5","99C4CD","DEC49C","FEC1D0"],altHGridAlpha:[50,35,10,20,15],altVGridColor:["767575","D8DCC5","99C4CD","DEC49C","FEC1D0"],altVGridAlpha:[10,20,10,15,10],borderColor:["767575","545454","415D6F","845001","68001B"],borderAlpha:[50,50,50,50,50],legendBgColor:["ffffff","ffffff","ffffff","ffffff","ffffff"],legendBorderColor:["545454",
"545454","415D6F","845001","D55979"],plotFillColor:["767575","D8DCC5","99C4CD","DEC49C","FEC1D0"],plotBorderColor:["999999","8A8A8A","6BA9B6","C1934D","FC819F"],msgLogColor:["717170","7B7D6D","92CDD6","965B01","68001B"],TrendLightShadeOffset:30}}]);FusionCharts.register("module",["private","modules.renderer.js-annotations",function(){var g=this,k=g.core,F=g.hcLib,r=g.window,E=/msie/i.test(r.navigator.userAgent)&&!r.opera,z=F.addEvent,G=F.removeEvent,a=F.hasTouch,L=r.Number,d=a?6:5,l="rgba(192,192,192,"+
(E?.002:1E-6)+")",E=Math,P=E.min,W=E.max,p=E.sin,t=E.cos,m=E.PI,c=m/180,w=E.abs,J=g.extend,e=F.pluck,v=F.pluckNumber,H=F.graphics.convertColor,B=F.getValidValue,Q=F.parseUnsafeString,I=F.setImageDisplayMode,ha=F.graphics.parseColor,X=F.setLineHeight,T=F.getMouseCoordinate,aa={style:{}},oa=F.toRaphaelColor,M=function(a,c){return{start:-a,end:-c,angle:a-c}},la=function(a,c){var e=0;switch(a){case "startx":e=c.x;break;case "starty":e=c.y;break;case "x":case "middlex":case "centerx":e=c.x+c.width/2;break;
case "y":case "middley":case "centery":e=c.y+c.height/2;break;case "endx":e=c.x+c.width;break;case "endy":e=c.y+c.height;break;default:e=0}return e},C=function(a,c,e,d,g){var k,l,m=0,v=0;l=void 0===c||null===c?1:c;var B;if(!a||!a.toString)return{value:e,hasDynamicMacros:!1};a=a.toString();a=a.toLowerCase().replace(/\s/g,"");if(e=a.match(/^[\+\-]?\d+(\.\d+)?|[\+\-]\d+(\.\d+)?/g)){for(c=0;c<e.length;c+=1)m+=Number(e[c])||0;m*=l}if(e=a.match(/^[\+\-]?(\$[a-z0-9\.]+)|[\+\-](\$[a-z0-9\.]+)/g))for(c=0;c<
e.length;c+=1){k=e[c];var r=d,p=g,t=k.split("."),w=void 0,C=void 0,z=0;for(l=void 0;w=t.shift();)switch(typeof(C=r[w])){case "object":r=C[w];break;case "function":C=C(t,p),"-"===k.charAt()&&(C*=-1),l=!0;default:z+=L(C)||0,t.length=0}k=z;l&&(B=!0);v+=k}if(e=a.match(/^[\+\-]?\$\d+(\.\d+)?|[\+\-]\$\d+(\.\d+)?/g))for(c=0;c<e.length;c+=1)v=v+Number(e[c].replace("$",""))||0;return{value:m+v,hasDynamicMacros:B}},Ga=function(a,c,e){if(!c.removed){c=c.data("annotation");var d=c.getRenderer(),k=T(d.linkedItems.container,
e),l=k.annotationOptions=c.options,m=k.groupOptions=c.group.options;k._shape=c;"id"in l&&(k.annotationId=l.id);"id"in m&&(k.groupId=m.id);g.raiseEvent(a,k,d.chartInstance,e)}},Ba,ja,ba;ja=function(a,c,e,d,g,k){this.options=a;this.attrs={};this.css={};this.bounds={};this.shared=c;this.snaps=e||{};this.annotations=g;this.items=c=[];this._idstore=d;a.id&&(this._id=a.id,d[a.id]=this);if(a=a.items)for(d=0,e=a.length;d<e;d+=1)c.push(new ba(a[d],this)),c[d].chart=k};J(ja.prototype,{scaleImageX:1,scaleImageY:1,
scaleText:1,scaleValue:1,scaleValueComplement:1,scaleX:1,scaleY:1});ja.prototype.setup=function(){var a=this.options,c=this.shared,e=this.getRenderer();e&&(this.isBelow=0!==v(a.showbelow,a.showbelowchart,c.showbelow),this.useTracker=!this.isBelow&&e.graphics.trackerGroup&&this.shared.useTracker,this.raiseOwnEvents=c.interactionevents)};ja.prototype.scale=function(){var a=this.options,c=this.shared,d=this.bounds,g=this.snaps,k=this.getRenderer(),l=c.rootxscale,m=c.rootyscale,B=d.xs=v(a.xscale,c.xscale,
100)/100,r=d.ys=v(a.yscale,c.yscale,100)/100,p,t,w;p=(p=this.annotations)&&p.resetScale;k&&(p&&(this.scaleText=1),this.scaleText*=r,this.scaleImageX*=B,this.scaleImageY*=r,0!==v(a.autoscale,c.autoscale)&&(B=v(a.origw,c.origw),r=v(a.origh,c.origh),B=k.config.width/B,r=k.config.height/r,k=0!==v(a.constrainedscale,c.constrainedscale),p=B<r?B:r,t=k?p:B,w=k?p:r,this.scaleValue=ja.prototype.scaleValue*p,this.scaleValueComplement=ja.prototype.scaleValueComplement*(k?p:B<r?r:B),this.scaleX=ja.prototype.scaleX*
t,this.scaleY=ja.prototype.scaleX*w,d.xs*=t,d.ys*=w,l*=t,m*=w,"1"==e(a.scaletext,c.scaletext)&&(this.scaleText=ja.prototype.scaleText*w),"1"==e(a.scaleimages,c.scaleimages)&&(this.scaleImageX=ja.prototype.scaleImageX*t,this.scaleImageY=ja.prototype.scaleImageY*w)),d.x=C(e(a.x,a.xpos),l,0,g,this.isBelow).value+v(a.grpxshift,c.grpxshift,0),d.y=C(e(a.y,a.ypos),m,0,g,this.isBelow).value+v(a.grpyshift,c.grpyshift,0),this.xshift=v(a.xshift,c.xshift,0),this.yshift=v(a.yshift,c.yshift,0))};ja.prototype.draw=
function(){var a=this.getRenderer(),c=this.options,e=this.bounds,d=this.items,g=a&&a.graphics,k,l=this.wrapper,m,B=[],r,p,t=this.chart,w=t&&t.config||{},t=w.annRenderDelay,w=w.resize,C=function(){r=0;for(p=B.length;r<p;r++)m=B[r],m.draw()},z=(k=this.annotations)&&k.resetScale;if(a){a.annotationRelativeLayer&&"axis"===a.annotationRelativeLayer?(k=g.axisTopGroup||g.datasetGroup,g=g.axisBottomGroup||g.datasetGroup):k=g=g.datasetGroup;l||(this.wrapper=l=a.components.paper.group("annotations"),k&&g&&(this.isBelow?
l.insertBefore(g):l.insertAfter(a.graphics.datalabelsGroup||k)));z&&this.wrapper.attr({transform:""});this.wrapper.attr({x:0,y:0,visibility:v(c.visible,1)?"":"hidden"}).translate(e.x,e.y);r=0;for(p=d.length;r<p;r+=1)m=d[r],m.scale(!0),m.queueDraw?m.queue():(B.push(m),m.setup());t&&!w?setTimeout(function(){C()},t):C();return this}};ja.prototype.destroy=function(){for(var a=this.wrapper,c=this.items,e;e=c.shift();)e.destroy();a&&(this.wrapper=a.remove());this._idstore[this._id]===this&&delete this._idstore[this._id]};
ja.prototype.addItem=function(a,c,e){var d=this.items,g=this._idstore;this.chart=e;d.push(a=new ba(a,this,g));c&&null!==this.getRenderer()&&(a.scale(),a.setup(),a.draw());return a};ja.prototype.removeItem=function(a){for(var c=this.items,e=c.length;e--;)if(a===c[e]._id)return c.splice(e,1)};ja.prototype.getRenderer=function(){return this.annotations&&this.annotations.getRenderer()||null};ba=function(a,c){var e=!1,d;this.options=a;this.chart=(this.group=c)&&c.chart;this.args=[];this.attrs={};this.attrsTracker=
{};this.style={};this.bounds={};this._idstore=c._idstore;a.id&&(this._id=a.id,c._idstore[a.id]=this);this.type=a.type&&a.type.toLowerCase&&a.type.toLowerCase();for(d in ba.eventNames)"function"===typeof a[d]&&(this[d]=a[d],e=!0);this.hasEvents=e;"function"===typeof a.onload&&(this.onload=a.onload)};g.extend(ba.prototype,{getAbsoluteBounds:function(){var a=this.bounds,c=a.x1,e=a.y1,d=a.x2,g=a.y2,k=P(c,d),l=P(e,g),c=W(c,d)-k,e=W(e,g)-l;return{x:k,width:c,y:l,height:e,r:a.r,unscaled:{width:c/a.xs,height:e/
a.ys}}},queue:function(){this.group.annotations.shapesToDraw.push(this)},scale:function(a){var c=this,d=c.group,g=d.bounds,k=c.bounds,l=c.options,m=d.snaps,B=e(l.x,l.xpos),r=e(l.y,l.ypos),p=e(l.tox,l.toxpos),t=e(l.toy,l.toypos),w=k.xs=g.xs,g=k.ys=g.ys,z=v(l.xshift,d.xshift,0),H=v(l.yshift,d.yshift,0),F;F=function(e,g,k,l){e=C(e,g,k,l,d.isBelow);e.hasDynamicMacros&&a&&(c.queueDraw=!0);return e.value};c.hasDimension=!0;c.hasDimensionX=!0;c.hasDimensionY=!0;k.x1=F(B,w,0,m)+z;void 0===p?(c.hasDimension=
!1,c.hasDimensionX=!1,k.x2=k.x1):k.x2=F(p,w,0,m)+z;k.y1=F(r,g,0,m)+H;void 0===t?(c.hasDimension=!1,c.hasDimensionY=!1,k.y2=k.y1):k.y2=F(t,g,0,m)+H;ba.angularShapeTypes[c.type]&&(k.angles=M(F(l.startangle,1,0,m),F(l.endangle,1,360,m)));k.r=F(l.radius,d.scaleValue,0,m)},setup:function(){var a=this.options,c=this.group,d=c.options,g=this.attrs,k=this.style,m=c.scaleValue,r=v(d.fillalpha,d.alpha,100),p=this.fillAlpha=e(a.fillalpha,a.alpha,r),t=this.fillColor=e(a.fillcolor,a.color,d.color),w=this.fillPattern=
e(a.fillpattern&&a.fillpattern.toLowerCase&&a.fillpattern.toLowerCase(),d.fillpattern&&d.fillpattern.toLowerCase&&d.fillpattern.toLowerCase()),C=this.bordered=v(a.showborder,ba.borderedShapeTypes[this.type],!!B(a.bordercolor)),z=this.borderColor=e(a.bordercolor,d.bordercolor,t),r=this.borderAlpha=v(a.borderalpha,a.alpha,d.borderalpha,r),F=this.dashed=!!v(a.dashed,0),I=v(a.borderthickness,a.thickness,2)*m;this.link=e(a.link,d.link);this.shadow="1"==e(a.showshadow,d.showshadow);void 0===t&&(t=ba.borderedShapeTypes[this.type]&&
"none"||"#ff0000",void 0===z&&(z="#ff0000"));C&&I?(g.stroke=H(z,r),g["stroke-linecap"]="round",g["stroke-width"]=I,F&&(g["stroke-dasharray"]=[v(a.dashlen,5)*m,v(a.dashgap,3)*m])):g.stroke="none";this.fillOptions={gradientUnits:"objectBoundingBox",color:t,alpha:p,ratio:e(a.fillratio,d.fillratio),angle:360-v(a.fillangle,0),radialGradient:"radial"===w};this.link&&(k.cursor="pointer",k._cursor="hand");g.visibility=v(a.visible,1)?"":"hidden";this.useTracker=c.useTracker;this.toolText=Q(e(a.tooltext,d.tooltext));
if(this.useTracker||this.link||this.toolText)J(this.attrsTracker,{stroke:l,fill:l}),this.link&&(this.attrsTracker.ishot=+new Date);this.raiseOwnEvents=c.raiseOwnEvents},draw:function(){var a=this.getRenderer(),c=this.type,e=this.attrs,d=this.style,g=a&&a.components.paper,k=ba.types[c]&&ba.types[c].call&&ba.types[c].call(this,a),l=ba.imageShapeTypes[k],m=ba.textShapeTypes[k],v=l||m||ba.trackerShapeTypes[k],B=this.link||this.toolText,r=this.wrapper,c=this.tracker,p=a&&a.graphics.trackerGroup||this.group.wrapper,
t=!1,w=c||r,C=ba.eventNames,F=ba.ownEvents,H,I;if(a){if(k){if(r)if(r.elemType!==k){if(this.ownEventsAttached){for(I in F)w["un"+I].apply(r,F[I]);this.ownEventsAttached=!1}r=r.remove()}else if(this.hasEvents)for(H in C)(I=this[H])&&I.eventAttached&&(G(w.node,C[H],I),I.eventAttached=!1);l||(e.fill=oa(this.fillOptions));r?r.attr(e).css(d):(this.args.push(this.group.wrapper),r=this.wrapper="text"===k?g[k].call(g,e,d,this.group.wrapper):g[k].apply(g,this.args).attr(e).css(d),r.elemType=k,r.data("annotation",
this),t=!0,this.args.pop());!this.shadow||this.shadowAdded||l||m?r.shadow(this.shadowAdded=!1):r.shadow(this.shadowAdded=!0,W(this.borderAlpha,this.fillOptions.alpha)/100);B?this.useTracker&&(c||(this.args.push(p),c=this.tracker=v?g.rect(0,0,0,0,0,p):g[k].apply(g,this.args),this.args.pop()),c.attr(e).attr(this.attrsTracker)):c&&(c=c.remove());w=c||r;if(this.raiseOwnEvents&&!this.ownEventsAttached){for(I in F)w[I].apply(r,F[I]);this.ownEventsAttached=!0}this.link&&w.click(a.linkedItems.linkClickFN,
this);this.toolText&&(w.tooltip(this.toolText||""),this.group.wrapper.trackTooltip(!0));if(this.hasEvents)for(H in C)(I=this[H])&&!I.eventAttached&&(z(w.node,C[H],I,this),I.eventAttached=!0);l||(c&&v&&(a=r.getBBox(),c.attr({x:a.x,y:a.y,width:a.width,height:a.height})),t&&this.onload&&this.onload(e))}return this}},destroy:function(){var a=this.wrapper,c=this.tracker,e=c||a,d=ba.eventNames,g=ba.ownEvents,k,l;if(a){if(this.ownEventsAttached){for(l in g)e["un"+l].apply(a,g[l]);this.ownEventsAttached=
!1}if(this.hasEvents)for(k in d)(l=this[k])&&l.eventAttached&&(G(e.node,d[k],l),l.eventAttached=!1);c&&(this.tracker=c.remove());this.wrapper=a.remove()}this._idstore[this._id]===this&&delete this._idstore[this._id]},getRenderer:function(){return this.group&&this.group.getRenderer()||null}});g.extend(ba,{imageShapeTypes:{image:!0},angularShapeTypes:{circle:!0,arc:!0},textShapeTypes:{text:!0},trackerShapeTypes:{image:!0,text:!0},borderedShapeTypes:{path:!0,line:!0},eventNames:{onmouseover:a?"touchstart":
"mouseover",onmouseout:"mouseout",onmousemove:a?"touchmove":"mousemove",onclick:"click"},ownEvents:{click:[function(a){Ga("annotationClick",this,a)}],hover:[function(a){Ga("annotationRollOver",this,a)},function(a){Ga("annotationRollOut",this,a)}]},textAlignOptions:{left:"start",right:"end",center:"middle"},textVerticalAlignOptions:{top:"bottom",middle:"middle",bottom:"top"},textRotationOptions:{0:"0",1:"270",right:"90",cw:"90",left:"270",ccw:"270"},types:{rectangle:function(){var a=this.args,c=this.attrs,
e=this.getAbsoluteBounds(),d=.5*e.width;e.r>d&&(e.r=d);a[0]=c.x=e.x;a[1]=c.y=e.y;a[2]=c.width=e.width;a[3]=c.height=e.height;a[4]=c.r=e.r;return"rect"},line:function(){var a=this.attrs,c=this.bounds;this.args[0]=a.path=["M",c.x1,c.y1,"L",c.x2,c.y2];1===a["stroke-width"]&&(a["shape-rendering"]="crisp");a["stroke-width"]<d&&(this.attrsTracker["stroke-width"]=d);this.bordered&&this.dashed&&(this.attrsTracker["stroke-dasharray"]="solid");return"path"},path:function(){var a=this.attrs,c=this.bounds;this.args[0]=
a.path=this.options.path;a.transform=["T",c.x1,c.y1,"S",c.xs,c.ys,c.x1,c.y1];1===a["stroke-width"]&&(a["shape-rendering"]="crisp");return"path"},polygon:function(){var a=this.args,c=this.attrs,e=this.options,d=this.bounds,g=this.group,k=g.snaps;a[0]=C(e.sides,1,5,k,g.isBelow).value;a[1]=d.x1;a[2]=d.y1;a[3]=d.r;a[4]=C(e.startangle,1,0,k,g.isBelow).value;a[5]=0;c.polypath=a.slice(0);return"polypath"},circle:function(a){var d=this.args,g=this.attrs,k=this.options,l=this.bounds,v=a.config.width,r=a.config.height,
B=this.group.scaleValueComplement,z=this.group.snaps,F=l.angles,H=this.group;a=l.r;e(k.radius)||(l.r=v<r?v*l.xs:r*l.ys,l.r=a=.3*l.r);k=C(k.yradius,B,a,z,H.isBelow).value;this.fillPattern||(this.fillOptions.radialGradient=!0,this.fillPattern="radial");"radial"===this.fillPattern&&(this.fillOptions.cx=this.fillOptions.cy=.5);r=F.angle%360;if(!r&&a===k)return d[0]=g.cx=l.x1,d[1]=g.cy=l.y1,d[2]=g.r=l.r,"circle";r||(F.angle=0<F.angle?F.angle-.001:F.angle+.001,F.start=F.end-F.angle);r||r==F.angle||(r=360);
v=F.start*c;F=F.end*c;r*=c;z=l.x1;H=l.y1;l=z+t(v)*a;B=H+p(v)*k;z+=t(F)*a;H+=p(F)*k;a=["M",l,B,"A",a,k,0,w(r)>=m?1:0,v<F?1:0,z,H,"Z"];d[0]=g.path=a;return"path"},arc:function(a){var d=this.options,g=this.args,k=this.attrs,l=this.bounds,m=a.config.width;a=a.config.height;var v=this.group,r=v.scaleValue,B=l.angles;e(d.radius)||(l.r=m<a?m*l.xs:a*l.ys,l.r*=.3);l.innerR=C(d.innerradius,r,.8*l.r,this.group.snaps,v.isBelow).value;l.innerR>l.r&&(l.innerR+=l.r,l.r=l.innerR-l.r,l.innerR-=l.r);this.fillPattern||
(this.fillOptions.radialGradient=!0,this.fillPattern="radial");"radial"===this.fillPattern&&(this.fillOptions.cx=this.fillOptions.cy=.5);g[0]=l.x1;g[1]=l.y1;g[2]=l.r;g[3]=l.innerR;g[4]=B.end*c;g[5]=B.start*c;k.ringpath=g.slice(0);return"ringpath"},text:function(a){var c=this.args,d=this.style,g=this.attrs,k=this.group,l=this.bounds,m=this.options,r=this.getAbsoluteBounds(),B=e(m.align,k.options.textalign,"center").toLowerCase(),p=e(m.valign,k.options.textvalign,"middle").toLowerCase(),t=Q(e(m.text,
m.label)),w=a.linkedItems.smartLabel,C=v(m.wrap,k.options.wraptext,1),z,F,H=e(m.rotatetext,k.options.rotatetext,"0").toLowerCase(),H=ba.textRotationOptions[H],I="0"!==H?"y":"x",E=a.config.orphanStyles;a=J({},E.defaultStyle.style||{});E=k.id&&E[k.id.toLowerCase()]||aa;a=J(a,E.style);var E=parseFloat(a.fontSize),M=e(m.font,k.options.font,a.fontFamily),k=v(m.fontsize,k.options.fontsize,E)*k.scaleText;C&&(z=v(m.wrapwidth,this.hasDimensionX?r.width/l.xs:void 0),F=v(m.wrapheight,this.hasDimensionY?r.height/
l.ys:void 0),z&&(z*=l.xs),F&&(F*=l.ys));d.fontFamily=M;d.fontWeight=v(m.bold,m.isbold,0)?"bold":"normal";v(m.italic,m.isitalic,0)&&(d.fontStyle="italic");m.bgcolor&&(!g["text-bound"]&&(g["text-bound"]=[]),g["text-bound"][0]=ha(m.bgcolor));m.bordercolor&&(!g["text-bound"]&&(g["text-bound"]=[]),g["text-bound"][1]=ha(m.bordercolor),g["text-bound"][2]=v(m.borderthickness,1),g["text-bound"][3]=v(m.padding,1));m.fontcolor&&(g.fill=ha(m.fontcolor),this.fillOptions&&(this.fillOptions.color=g.fill));d.fontSize=
k+"px";k===E?d.lineHeight=a.lineHeight:X(d);g["text-anchor"]=ba.textAlignOptions[B]||ba.textAlignOptions.center;w.setStyle(d);d=w.getSmartText(t,z,F,!1);g["vertical-align"]=ba.textVerticalAlignOptions[p]||ba.textVerticalAlignOptions.middle;g["text-anchor"]===ba.textAlignOptions.left?r[I]+=v(m.leftmargin,0):g["text-anchor"]===ba.textAlignOptions.center&&(r[I]+=.5*v(m.leftmargin,0));"0"!==H&&(g.rotation=[parseFloat(H),r.x,r.y]);c[0]=g.x=r.x;c[1]=g.y=r.y;c[2]=g.text=d.text;d.tooltext&&(g.title=d.tooltext);
delete g.stroke;delete g["stroke-weight"];return"text"},image:function(a){var c=this,d=c.style,g=a.config.width,k=a.config.height;a=c.options;var l=c.attrs,m=c.args,p=B(a.url),t=c.group.scaleImageX*e(Number(a.xscale),100)/100,w=c.group.scaleImageY*e(Number(a.yscale),100)/100,C=c.getAbsoluteBounds(),z={width:1,height:1},F;if(!p)return m[0]=l.x=C.x,m[1]=l.y=C.y,m[2]=l.width=C.width,m[3]=l.height=C.height,m[4]=l.r=C.r,"rect";F=new r.Image;F.onload=function(){z=I("none","top","left",100,0,g,k,F);delete z.x;
delete z.y;z=J(z,{width:(c.hasDimensionX?C.unscaled.width:z.width)*t,height:(c.hasDimensionY?C.unscaled.height:z.height)*w});setTimeout(function(){var a,e,g;if(a=c.wrapper){a.attr(z);if(e=c.tracker)g=a.getBBox(),e.attr({x:g.x,y:g.y,width:g.width,height:g.height});a.css({opacity:d.opacity=W(v(c.fillAlpha,c.borderAlpha),c.borderAlpha)/100})}c.onload&&c.onload(z)},0)};F.src=p;m[0]=l.src=p;m[1]=l.x=C.x;m[2]=l.y=C.y;m[3]=l.width=(c.hasDimensionX?C.unscaled.width:z.width)*t;m[4]=l.height=(c.hasDimensionY?
C.unscaled.height:z.height)*w;d.opacity=W(v(c.fillAlpha,c.borderAlpha),c.borderAlpha)/100;delete l.stroke;delete l.fill;delete l["stroke-linecap"];return"image"}}});Ba=function(){this.groups=[];this._idstore={};this._options={}};F.Annotations=Ba;g.extend(Ba.prototype,{reset:function(a,c,e){var d=this.groups,g,k;this.chart=e;this.clear();if(k=this.setSnapPoints()){g={};for(var l in k)switch(typeof k[l]){case "object":case "function":g["-$"+l]=g["$"+l]=g["+$"+l]=k[l];break;default:g["$"+l]=g["+$"+l]=
k[l],g["-$"+l]=-1*k[l]}g=this._literals=g}c&&(this._options=c);if(a&&a.groups&&d)for(k=0;k<a.groups.length;k+=1)d.push(new ja(a.groups[k],c,g,this._idstore,this,e)),d[k].chart=e},getRenderer:function(){return this._renderer},addGroup:function(a){var c=this.getRenderer();this.groups.push(a=new ja(a,this._options,this._literals,this._idstore,this,this.chart));c&&(a.setup(),a.scale(),a.draw());return a},addItem:function(a,c,e){var d,k=this.getRenderer();"string"===typeof a?d=this._idstore[a]:(e=c,c=
a);if(d&&d.addItem){if(!k&&e){g.raiseWarning(this,"04031411430","run","Annotations~addItem()","Cannot draw the shapeif the group has not been drawn. Use Annotations~draw() to draw the group and pass the renderer to it.");return}a=d.addItem(c,e)}else a=this.addGroup({}).addItem(c,e);return a},draw:function(a,c){var e=this.groups,d,g,k;if(e&&(this._renderer=a||this._renderer))for(this.resetScale=c,g=0,k=e.length;g<k;g++)d=e[g],d.setup(),d.scale(),d.draw()},clear:function(){var a=this.groups,c;if(a){for(;c=
a.shift();)c.destroy();this.shapesToDraw=[]}},dispose:function(){var a;this.disposing=!0;this.clear();for(a in this)delete this[a];this.disposed=!0},hide:function(a){if(a=this._idstore[a])return a.attrs.visibility="hidden",a.wrapper&&a.wrapper.hide(),a},show:function(a){if(a=this._idstore[a])return a.attrs.visibility="",a.wrapper&&a.wrapper.show(),a},update:function(a,c,e){a=this._idstore[a];var d;if(a&&c){if("object"===typeof c)for(d in c.id&&delete c.id,c.type&&delete c.type,c)a.options[(d+"").toLowerCase()]=
c[d]+"";else a.options[(c+"").toLowerCase()]=e+"";a.wrapper&&(a.scale(),a.setup(),a.draw());return a}},destroy:function(a){var c=this._idstore[a],e=c.group;c&&"function"===typeof c.destroy&&(e&&e.removeItem(a),c.destroy())},shapesToDraw:[],setSnapPoints:function(){var a=this.chart,c=a.config,e=a.components,d=e.legend,g=e.gradientLegend,k=e.caption.config,e=e.subCaption.config,l=k.width||0,m=e.width||0,r,v=this.datasetFunction.bind(a),B=this.xAxisFunction.bind(a),p=this.yAxisFunction.bind(a);"end"===
k.align?(a=k.x-l,r=k.x-m):"start"===k.align?a=r=k.x:(a=k.x-l/2,r=k.x-m/2);d=c.gLegendEnabled?g.conf:d.config;return{canvasendx:c.canvasRight,canvasendy:c.canvasBottom,canvasheight:c.canvasHeight,canvasstartx:c.canvasLeft,canvasstarty:c.canvasTop,canvaswidth:c.canvasWidth,canvascenterx:c.canvasCenterX||c.canvasLeft+(c.canvasRight-c.canvasLeft)/2,canvascentery:c.canvasCenterY||c.canvasTop+(c.canvasBottom-c.canvasTop)/2,chartcenterx:c.width/2,chartcentery:c.height/2,chartstartx:0,chartstarty:0,chartendx:c.width,
chartendy:c.height,chartheight:c.height,chartwidth:c.width,chartleftmargin:c.marginLeft,chartrightmargin:c.marginRight,chartbottommargin:c.marginBottom,charttopmargin:c.marginTop,captionendx:a+k.width,captionendy:k.y+k.height,captionheight:k.height,captionstartx:a,captionstarty:k.y,captionwidth:l,subcaptionendx:r+e.width,subcaptionendy:e.y+e.height,subcaptionheight:e.height,subcaptionstartx:r,subcaptionstarty:e.y,subcaptionwidth:m,legendendx:d.xPos+d.width,legendendy:d.yPos+d.height,legendheight:d.height,
legendstartx:d.xPos,legendstarty:d.yPos,legendwidth:d.width,dataset:v,xaxis:B,yaxis:p,gaugestartx:c.gaugeStartX,gaugestarty:c.gaugeStartY,gaugeendx:c.gaugeEndX,gaugeendy:c.gaugeEndY,gaugecenterx:c.gaugeCenterX,gaugecentery:c.gaugeCenterY,gaugestartangle:c.gaugeStartAngle,gaugeendangle:c.gaugeEndAngle,gaugeradius:c.gaugeRadius,plotwidth:c.plotWidth,plotsemiwidth:c.plotSemiWidth}},datasetFunction:function(a,c){var e=this.components.dataset,d,g,k,l;k=this.is3D;if(!e||!e.length)return 0;isNaN(a[0])?d=
0:(d=Number(a[0]),a=a.slice(1));g=a[0];if("set"===g){isNaN(a[1])?(l=0,a=a.slice(1)):(l=Number(a[1]),a=a.slice(2));g=a[0];e=(e=e[d]&&e[d].components.data[l])&&(e.graphics.element||e.graphics.hotElement||e.graphics.upperBoxElem);if(!e)return 0;k=c&&k?e._getBBox2():e.getBBox();l=la(g,k)}return l},xAxisFunction:function(a){var c=this.components&&this.components.xAxis&&this.components.xAxis[0],e,d;if(!c)return 0;d=a[0];if("label"===d){isNaN(a[1])?(e=0,a=a.slice(1)):(e=Number(a[1]),a=a.slice(2));d=a[0];
a=c._getLabelElement(e);if(!a)return 0;a=a.getBBox();e=la(d,a)}return e},yAxisFunction:function(a){var c=this.components&&this.components.yAxis,e,d;if(!c||!c.length)return 0;isNaN(a[0])?e=0:(e=Number(a[0]),a=a.slice(1));e=c[e];if(!e)return 0;c=a[0];if("label"===c){isNaN(a[1])?(d=0,a=a.slice(1)):(d=Number(a[1]),a=a.slice(2));c=a[0];a=e._getLabelElement(d);if(!a)return 0;a=a.getBBox();d=la(c,a)}return d}});g.core.addEventListener("beforeinitialize",function(a){"javascript"===a.sender.options.renderer&&
(a.sender.annotations=new Ba)});g.core.addEventListener("disposed",function(a){a.sender.annotations&&a.sender.annotations.dispose()});g.addEventListener("internal.animationComplete",function(a){a=a.sender;var c=a.annotations,e=c&&c.shapesToDraw,d=e&&e.length,g,k;a=a.apiInstance.config;var l=a.annRenderDelay,m=a.resize,r=(new Date).getTime(),v,B=function(){for(k=0;k<d;k++)g=e[k],g.draw()};if(d){for(k=0;k<d;k++)g=e[k],g.queueDraw=!1,g.scale(),g.setup();v=(new Date).getTime();l&&!m?setTimeout(function(){B();
c.shapesToDraw=[]},l-(v-r)):(B(),c.shapesToDraw=[])}a.resize=!1});k.addEventListener("rendered",function(a,c){if("javascript"===c.renderer){var e=a.sender;e.apiInstance&&(e.apiInstance.showAnnotation||(e.apiInstance.showAnnotation=function(){e.annotations.show.apply(e.annotations,arguments)}),e.apiInstance.hideAnnotation||(e.apiInstance.hideAnnotation=function(){e.annotations.hide.apply(e.annotations,arguments)}))}})}]);FusionCharts.register("module",["private","modules.renderer.jpegtopdf",function(){var g=
this.window,k=g.btoa,F=g.atob;this.hcLib.JpegToPdf=function(g,E){var z=[],G=0,a=g||500,L=E||500,d,l,P;d=function(a){G+=a.length+1;z.push(a)};this.addImage=function(a){a=/base64,(.+?)$/g.exec(a);P=F(a[1])};l=function(){var g=[],k,l;d("%PDF-1.7");g[1]=G;d("1 0 obj");d("/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]");d("endobj");g[4]=G;d("4 0 obj");d("<< /Length 36>>");d("stream");d("q "+L+" 0 0 "+a+" 0 0 cm /Im3 Do Q");d("endstream");d("endobj");g[5]=G;d("5 0 obj");d("<</Type /Page /Parent 2 0 R /MediaBox [0 0 "+
L+" "+a+"] /Contents [4 0 R ] /Resources <</ProcSet 1 0 R /Font <<>> /XObject <</Im3 3 0 R >> >> >>");d("endobj");g[3]=G;d("3 0 obj");d("<</Type /XObject /Subtype /Image /Width "+L+" /Height "+a+" /ColorSpace /DeviceRGB /BitsPerComponent 8 /Filter /DCTDecode /Length "+P.length+">>");d("stream");d(P);d("endstream");d("endobj");g[2]=G;d("2 0 obj");d("<</Type /Pages /Kids [5 0 R ] /Count 1>>");d("endobj");g[6]=G;d("6 0 obj");d("<</Type /Catalog /Pages 2 0 R >>");d("endobj");k=G;d("xref");d("0 7");d("0000000000 65535 f ");
for(l=1;6>=l;l++)d(("0000000000"+g[l]).slice(-10)+" 00000 n ");d("trailer");d("<</Size 7 /Root 6 0 R >>");d("startxref");d(k);d("%%EOF");return z.join("\n")};this.getDataUrl=function(){return"data:application/pdf;base64,"+k(l())}}}]);FusionCharts.register("module",["private","modules.exporter.batch-export",function(){var g=this.window,k=this.hcLib,F=Math.max,r=g.Image,E=k.drawSvgOnCanvas,z=k.downloadCharts,G=k.browserDetails,a=k.pluckNumber,L=k.pluck,d=k.JpegToPdf,l=g.navigator.userAgent.match(/ (iPad|iPhone|iPod)/g),
P="https:"===g.location.protocol?"https://export.api3.fusioncharts.com/":"http://export.api3.fusioncharts.com/";FusionCharts.batchExport=function(k){var p=k||{},t,m,c,w,J,e=0,v=!1,H,B,Q,I={exportTargetWindow:L(p.exportTargetWindow,l?"_blank":"_self"),exportAction:p.exportAction&&"save"===p.exportAction.toString().toLowerCase()&&"save"||"download",exportFileName:L(p.exportFileName,"FusionCharts"),exportHandler:L(p.exportHandler,P),exportParameters:L(p.exportParameters,""),exportFormat:L(p.exportFormat,
"PNG"),exportCallBack:L(p.exportCallBack,""),exportAtClientSide:a(p.exportAtClientSide,1)},ha=I.exportFormat.toLowerCase(),X=0,T=0,aa,oa=g.document,M=FusionCharts.items,la=function(a){return a.match(/http:\/\/|https:\/\//)&&/(http:\/\/|https:\/\/)([^\/\:]*)/.exec(a)[2]&&g.location.hostname!==/(http:\/\/|https:\/\/)([^\/\:]*)/.exec(a)[2]?!1:!0},C=function(c,e,d,g){var k=c,l=e;isNaN(k)&&(k=a(e,g)*(d/g));isNaN(l)&&(l=a(c,d)*(g/d));return{width:k,height:l}},Ga=function(a){!I.exportAtClientSide||"undefined"===
typeof g.btoa||"Chrome"!==G.name&&"Firefox"!==G.name&&"Edge"!==G.name&&"ie"!==G.name?(a={charttype:"combined",stream:a,stream_type:"IMAGE-DATA",parameters:["exportfilename="+I.exportFileName,"exportformat="+ha,"exportaction="+I.exportAction,"exportparameters="+I].join("|")},z(null,null,null,a,I)):z("url",a,I.exportFileName+"."+ha)},Ba=function(a){var g;E(a,c,this.x,this.y,this.width,this.height,function(){--e;if(0===e&&v)switch(ha){case "png":Ga(c.toDataURL("image/png"));break;case "jpeg":Ga(c.toDataURL("image/jpeg"));
break;case "pdf":g=new d(X,T);g.addImage(c.toDataURL("image/jpeg"));Ga(g.getDataUrl());break;default:Ga(c.toDataURL("image/png"))}})};k=function(e){var d=p.background;c=oa.createElement("canvas");c.id="newCanvas";c.width=T;c.height=X;c.style.border="1px solid black";w=c.getContext("2d");w.fillStyle=d&&d.bgColor||"#ffffff";w.fillRect(0,0,T,X);d&&d.bgImage&&la(d.bgImage)?(B=new r,B.src=d.bgImage,B._userData=d,w.globalAlpha=a(d.bgImageAlpha,100)/100,B.onload=function(){var c=this._userData,d=a(c.bgImageX,
0),g=a(c.bgImageY,0),k=C(Number(c.bgImageWidth),Number(c.bgImageHeight),this.width,this.height),c=k.width,k=k.height;try{w.drawImage(this,d,g,c,k)}finally{w.globalAlpha=1,e()}},B.onerror=function(){e()}):e()};if(G.hasCanvas){(function(){var a=p.charts,c,e,d,g;m=[];if(a)for(d in a)a.hasOwnProperty(d)&&(c=M[a[d].id])&&(e=a[d],g=C(Number(e.width),Number(e.height),c.width,c.height),m.push({id:c.id,width:g.width,height:g.height,x:e.x,y:e.y}));else for(d in M)M.hasOwnProperty(d)&&(c=M[d],m.push({id:c.id,
width:c.width,height:c.height}))})();aa=0;for(H=m.length;aa<H;aa+=1)Q=m[aa],Q.x=a(Q.x,5),Q.y=a(Q.y,X+5),Q.height=a(Q.height),Q.width=a(Q.width),X=F(X,Q.y+Q.height),T=F(T,Q.x+Q.width);X=p.imageHeight||X+5;T=p.imageWidth||T+5;k(function(){return function(){aa=0;for(H=m.length;aa<H;aa+=1){Q=m[aa];aa===H-1&&(v=!0);var a=Q;t=FusionCharts.items[Q.id];J=t.jsVars.instanceAPI.components.paper.toSVG(!0);e+=1;Ba.call(a?a:t,J)}}}())}}}]);FusionCharts.register("module",["private","modules.exporter.main",function(){var g=
this,k=g.window,F=g.hcLib,r=F.extend2,E=F.BLANKSTRING,z=F.graphics.RGBtoHex,G=/\s\bx\b=['"][^'"]+?['"]/ig,a=/\s\by\b=['"][^'"]+?['"]/ig,L=k.document,d=k.Image,l=F.JpegToPdf,P=F.browserDetails;F.exportChart=function(W){var p=this,t=p.config,m=p.components,c=p.chartInstance,w=F.getSvgDataurl,J=F.removeCrossDomainImages,e=F.downloadCharts,v=t.exportOption;W="object"===typeof W&&function(a){var c={},e;for(e in a)c[e.toLowerCase()]=a[e];return c}(W)||{};var H=r(r({},v),W),B=(H.exportformat||"png").toLowerCase(),
Q=H.exporthandler,I=(H.exportaction||E).toLowerCase(),ha=H.exporttargetwindow||E,X=H.exportfilename,T=H.exportparameters,aa=H.exportcallback,oa=H.exportwithimages,M=H.exportatclientside,la,C,Ga;if(!v||!v.enabled||!Q)return!1;g.raiseEvent("beforeExport",H,c,void 0,function(){function r(){var a,c,g;c=function(a){za.stream=a;za.stream_type="IMAGE-DATA";e(null,null,null,za,lb)};P.hasCanvas&&"undefined"!==typeof k.btoa?(a=L.createElement("canvas"),a.width=Ea.width,a.height=Ea.height,"svg"===B?w(Ia,function(a){c(a)}):
F.drawSvgOnCanvas(Ia,a,0,0,Ea.width,Ea.height,function(){switch(B){case "png":c(a.toDataURL("image/png"));break;case "jpeg":c(a.toDataURL("image/jpeg"));break;case "pdf":g=new l(Ea.height,Ea.width);g.addImage(a.toDataURL("image/jpeg"));c(g.getDataUrl());break;default:c(a.toDataURL("image/jpeg"))}})):-1!==Ka.indexOf("<image ")?Ua?(Ra=(Pa=Ka.match(/<image [^\>]*\>/gi))&&Pa.length,fa=function(a){var c,e;(e=a.match(/data:image\/(.*);/))?a=e[1]:(c=a&&a.split("/"),c=c[c.length-1],a=c.split("."),c=a[0],
a=a[1]||"png","jpg"===a&&(a="jpeg"));return{name:c,type:a}},Ha=function(a,c,e,g,k){var l=new d;l.onload=function(){var d="image/"+e,m=L.createElement("canvas"),r=m.getContext("2d"),v="";m.width=l.width;m.height=l.height;r.drawImage(l,0,0);v=m.toDataURL(d);wa[a]=v;Oa(v,c,e,g,k)};l.onerror=function(){Fa()};l.src=a},Oa=function(a,c,e,d,g){Ta["image_"+Xa]={name:c,type:e,encodedData:a,width:d,height:g};Fa()},Fa=function(){var a={},c,d,g,k,l,m=!1;Xa<Ra?(c=Pa[Xa].replace(/\"/g,""),c.split(" ").forEach(function(c){c=
c.split(/=(.+)?/);a[c[0]]=c[1]}),a["xlink:href"]&&(c=(d=fa(a["xlink:href"]))&&d.name||"temp_image_"+Xa,g=d&&d.type||"png",k=parseInt(a.width,10),l=parseInt(a.height,10),d=c+"."+g,wa[a["xlink:href"]]?m=!0:Ha(a["xlink:href"],c,g,k,l)),c='xlink:href="'+a["xlink:href"],Ka=Ka.replace(c,'xlink:href="temp/'+d),Xa+=1,m&&Fa()):(za.encodedImgData=JSON.stringify(Ta),za.stream=Ka,e(null,null,null,za,lb))},Fa()):e(null,null,null,za,lb):e(null,null,null,za,lb)}function v(){var a=X+"."+B;"svg"===B?w(Ia,function(c){e("url",
c,a)}):na(B,N)}function ba(){var a=0;la=[];C.replace(/[^\r\n]+/g,function(c){la[a]=[];c.replace(/"([^",]+)/g,function(c,e){la[a].push(e)});a+=1})}function W(){return"data:application/vnd.ms-excel;base64,"+function(a){return k.btoa(k.unescape(encodeURIComponent(a)))}("<html xmlns:o='urn:schemas-microsoft-com:office:office'xmlns:x='urn:schemas-microsoft-com:office:excel'xmlns='http://www.w3.org/TR/REC-html40'><head>\x3c!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--\x3e</head><body>"+
function(){var a,c,e,d,g,k;if(!la.length)return"";e=0;for(k=la.length;e<k;e+=1)if(0===e){a="<thead valign='top'><tr>";d=0;for(g=la[e].length;d<g;d+=1)a+="<th>"+la[e][d]+"</th>";a+="</tr></thead>";c="<tbody>"}else{c+="<tr>";d=0;for(g=la[e].length;d<g;d+=1)c+="<td>"+la[e][d]+"</td>";c+="</tr>"}return"<table align='center' >"+a+(c+"</tbody>")+"</table>"}()+"</body></html>")}function N(a,c,d){d=d+"."+a;switch(a){case "pdf":a=new F.JpegToPdf(Ea.height,Ea.width);a.addImage(c);c=a.getDataUrl();e("url",c,
d);break;default:e("url",c,d)}}function na(a,c){var e;e=L.createElement("canvas");e.width=Ea.width;e.height=Ea.height;F.drawSvgOnCanvas(Ia,e,0,0,Ea.width,Ea.height,function(){switch(a){case "png":c(a,e.toDataURL("image/png"),X);break;case "jpeg":c(a,e.toDataURL("image/jpeg"),X);break;default:c(a,e.toDataURL("image/jpeg"),X)}})}var Va=c.id,Ea=m.paper,za,Ka,Ia,Ua=F.isCanvasElemSupported(),Pa,Ra,Xa=0,Ta={},fa,Ha,Fa,Oa,wa={},jb={DOMId:Va,height:Ea.height,width:Ea.width,fileName:X+"."+B,statusCode:void 0,
statusMessage:void 0,notice:void 0},lb={exportAction:I,exportTargetWindow:ha,exportCallback:aa,fusionCharts:p,paper:Ea,chartId:Va,exportHandler:Q};if("xls"===B)if("undefined"!==typeof k.btoa)C=c.getCSVData();else return g.raiseEvent("exportCancelled",H,c),!1;else m.chartMenuBar&&m.chartMenuBar.group.attr("visibility","hidden"),Ka=Ea.toSVG(oa&&Ua&&"svg"!==B),Ia=Ea.toSVG(oa&&Ua),m.chartMenuBar&&m.chartMenuBar.group.attr("visibility","visible"),Ka=Ka.replace(/(\sd\s*=\s*["'])[M\s\d\.]*(["'])/ig,"$1M 0 0 L 0 0$2"),
Ka=Ka.replace(/NS\d+:/gi,"xlink:"),Ka=J(Ka),Ia=Ia.replace(/NS\d+:/gi,"xlink:"),Ia=Ia.replace(/(\sd\s*=\s*["'])[M\s\d\.]*(["'])/ig,"$1M 0 0 L 0 0$2"),Ia=Ia.replace(/(xlink:title\s*=\s*)['"].*["']/ig,""),Ka=Ka.replace(/[\w\-]+\=\"undefined\"/ig,""),Ka=Ka.replace(/(xlink:title\s*=\s*)['"].*["']/ig,""),Ka=Ka.replace(/rgba\(([^\)]+)\)/ig,function(a,c){return"#"+new z(c.split(","))}),Ka=Ka.replace(/<svg[^>]+/i,function(a){a.match(/height/i)||!Ea.height&&!t.height||(a+=' height="'+(Ea.height||t.height)+
'"');a.match(/width/i)||!Ea.width&&!t.width||(a+=' width="'+(Ea.width||t.width)+'"');return a}),Ka=Ka.replace(/(([\w]+\-)?opacity\s*=\s*)['"][\d\.]+e[\-\+][\d]+["']/ig,'$1"0.001"'),Ka=Ka.replace(/(([\w]+\-)?opacity\s*:\s*)[\d\.]+e[\-\+][\d]+/ig,"$10.001"),Ka=Ka.replace(/<text[^\>]+/ig,function(a){a=a.replace(/stroke\=[\"\']([a-z0-9\#]+)?[\"\']/ig,"");a=a.replace(/stroke\s*\:\s*([a-z0-9\#]+)?;?/ig,"");a=a.replace(/stroke-opacity\=[\"\']([a-z0-9\#]+)?[\"\']/ig,"");a=a.replace(/stroke-opacity\s*\:\s*([a-z0-9\#]+)?;?/ig,
"");a=a.replace(/(<text[^\>]+fill\=)([\"\'][^\"\']+[\"\'])([^\>]+)/ig,'$1$2 stroke=$2 stroke-width="0.2"$3');return a=a.replace(/(<text[^\>]+fill-opacity\=)([\"\'][^\"\']+[\"\'])([^\>]+)/ig,"$1$2 stroke-opacity=$2 $3")}),Ka=Ka.replace(/<(\b[^<>s\s]+\b)[^\>]+?opacity\s*=\s*['"][^1][^\>]+?(\/>|>[\s\r\n]*?<\/\1>)/ig,function(c,e){var d=G.exec(c)||E,g=a.exec(c)||E;return c+"<"+e+d+g+' opacity="1" stroke-opacity="1" fill="#cccccc" stroke-width="0" r="0" height="0.5" width="0.5" d="M 0 0 L 1 1" />'}),za=
{charttype:c.chartType(),stream:Ka,stream_type:"svg",meta_bgColor:H.bgcolor||"",meta_bgAlpha:H.bgalpha||"1",meta_DOMId:c.id,meta_width:Ea.width||t.width,meta_height:Ea.height||t.height,parameters:["exportfilename="+X,"exportformat="+B,"exportaction="+I,"exportparameters="+T].join("|")};g.raiseEvent("exportDataReady",za,c);"xls"===B?(ba(),Ga=W(),!M||"download"!==I||"undefined"===typeof k.btoa||"Chrome"!==P.name&&"Firefox"!==P.name&&"Edge"!==P.name&&"ie"!==P.name?(za={charttype:"combined",stream:Ga,
stream_type:"IMAGE-DATA",parameters:["exportfilename="+X,"exportformat="+B,"exportaction="+I,"exportparameters="+lb].join("|")},e(null,null,null,za,lb)):(e("url",Ga,X+"."+B),g.raiseEvent("exported",jb,c))):M&&"download"===I?"undefined"===typeof k.btoa||"Chrome"!==P.name&&"Firefox"!==P.name&&"Edge"!==P.name&&"ie"!==P.name?(g.raiseWarning(this,"14038823867","run","Export Feature","Client side export requirement not fulfiled so exporting through server side"),r()):(v(),g.raiseEvent("exported",jb,c)):
r()},function(){g.raiseEvent("exportCancelled",H,c)})}}]);FusionCharts.register("module",["private","modules.renderer.js-component-toolbox",function(){function g(a){"number"===typeof a&&(a="'"+a+"'");return a.split("").reduce(function(a,c){a=(a<<5)-a+c.charCodeAt(0);return a&a},0)}function k(a,c){var e;if(a.getBBox)return a;e=a.getBoundingClientRect();a.getBBox=function(){return{x:c.x,y:c.y,width:e.right-e.left,height:e.bottom-e.top,isArtificial:!0}};return a}function F(a,c,e){var d,g;for(d in a)g=
a[d],void 0!==g&&null!==g&&(e?c[d]||(c[d]=g):c[d]=g)}function r(a,c){switch(a){case "click":return function(a){E.dem.listen(c,"click",function(c){c.target&&c.target.parentNode&&a.call(c.target)})};case "hover":return function(a,e){E.dem.listen(c,"pointerhover",function(c){c.target&&c.target.parentNode&&("start"===c.state?a:e).call(c.target)})}}}var E=this.hcLib,z=E.Raphael,G=this.window.document,a=E.graphics,L=a.convertColor,d=a.getLightColor,l=a.rawRGBtoHEX,P=E.pluckNumber,W=E.pluck,p={},t={},m=
{},c=E.extend2,w,J,e,v,H=function(){},B=L("FFFFFF",0),Q=0,I;w=function(a,c,e){return["M",a-e,c-e]};J=function(a,c,e){var d=e/4;return["M",a-3*d,c,"L",a-d,c+e,a+e,c-e]};e=function(){z.addSymbol("Internal_CB",w);return{register:function(){var a,c,e;if(1===arguments.length){c=arguments[0];if(null==c||"object"!==typeof c)return;e=c}else if(1<arguments.length){a=arguments[0];c=arguments[1];if("string"!==typeof a||"function"!==typeof c)return;e={};e[a]=c}else return;for(a in e)c=e[a],{}.hasOwnProperty.call(e,
a)&&z.addSymbol(a,c)}}}();I=function(){function a(){this.pool={}}function c(a){var e,d,g,k,l,m;if(a)for(e in a)for(d in g=a[e],g)if(k=g[d],k instanceof Array)for(l=0,m=k.length;l<m;l++)k[l].hide&&k[l].hide();else k.hide&&k.hide()}var e={},d,g,k,l,m={};a.prototype.constructor=a;g={KEY_RECT:"rect",KEY_TEXT:"text",KEY_GROUP:"group",KEY_SCROLLER:"scoller",KEY_BUTTON:"button",KEY_PATH:"path",KEY_DIV:"div"};e[g.KEY_DIV]=function(){return G.createElement("div")};e[g.KEY_RECT]=function(a){return l.paper.rect(a)};
e[g.KEY_TEXT]=function(a){return l.paper.text(a)};e[g.KEY_GROUP]=function(a,c){return l.paper.group(a,c)};e[g.KEY_SCROLLER]=function(a,c,e,d,g,k,m){return l.paper.scroller(a,c,e,d,g,k,m)};e[g.KEY_BUTTON]=function(a,c,e,d,g,k){return l.paper.button(a,c,e,d,g,k)};e[g.KEY_PATH]=function(a,c){return l.paper.path(a,c)};return{init:function(e,g){var k;l=e;k=m[g]||(m[g]={});c(k.pool);k.initialized||(d=k.pool=(new a).pool,d._tmp=g,k.initialized=!0)},isInitialized:function(){},getCreationStatus:function(){return k},
emptyPool:function(a){a=m[a]||{};a.pool&&(a.pool={})},hideRecursive:function(a){c((m[a]||{}).pool)},getComponent:function(a,c,d,g){c=(m[c||0]||{}).pool;var l=c[a],r,v,B,p=0;l||(l=c[a]={});return(v=l[d])&&!(v instanceof Array)||v instanceof Array&&0<v.length?function(){k=!1;return g?(B=v[p++])?B.show():v[p]=e[d].apply(this,arguments):v.show&&"function"===typeof v.show&&v.show()||v}:function(){k=!0;return g?(r=l[d]||(l[d]=[]),v=e[d].apply(this,arguments),r.push(v),v.show&&"function"===typeof v.show&&
v.show()||v):l[d]=e[d].apply(this,arguments)}},getKeys:function(){return g}}}();v=function(){function a(c){c=c||{};this.name=c.name;this.handler=c.handler||H;this.action=c.action&&c.action.toLowerCase()||"click";this.eventMap={};this.style={padding:"3px 8px",margin:"2px 0px",fontFamily:m.baseFontFamily,fontSize:m.baseFontSize+"px"};this.hoverOverStyle=c.hoverOverStyle||{};this.hoverOutStyle=c.hoverOutStyle||{};F(c.style||{},this.style);this.node=this.subConRef=void 0}function v(a,c){var e=this,d,
g;d=c&&c.top||0;var k=c&&c.left,l=c&&c.right;this.container=a;this.position=v.POSITION_BOTTOM;this.atomicLists=[];this.refContainers=[];this.parentListCon=void 0;this.hideFnIds=[];this.target=void 0;k&&l||(this.positionCalculation=!0);this.hoverOverStyle={background:"#333333",color:"#FFFFFF",cursor:"pointer"};this.hoverOutStyle={background:"#FFFFFF",color:"#000000"};this._defaultStyle={position:"absolute","z-index":50,top:void 0===d?"auto":d+"px",right:void 0===l?"auto":l+"px",left:void 0===k?"auto":
k+"px",overflow:"hidden",background:"#ffffff",border:"1px solid #646464","box-shadow":"#999999 2px 2px 5px",padding:"5px 3px",display:"none"};d=this.container.style;for(g in this._defaultStyle)d[g]=this._defaultStyle[g];Va.linkedItems&&(Va.linkedItems.container.appendChild(this.container),g=r("hover",this.container),g(function(){e.show(this)},function(){e.hide(300,this)}))}function z(a){this.listContainer=this.container=void 0;this.measurement=a}function E(a,c,e,d){this.symbol=a;this._id="TB_SYMBOL"+
(e||0);this.node=void 0;this.pId=d;this.isPlaintext=c;this.conf={btnTextStyle:{"stroke-width":"1px",stroke:"none"}};this.evt={tooltext:void 0,click:H,hover:[H,H]}}function Q(a,c,e,d){E.call(this,"Internal_CB");this._id="TB_CBSYMBOL"+(e||0);this.symbol="Internal_CB";this.text={plaintext:a,node:void 0,style:ta};this.pId=d;this.checked=!!c;this.textNode=void 0;this.interPadding=3;this.pos={};this.regSymbolCmd=void 0;this.checked?this.check():this.uncheck()}function M(a,c,e){E.call(this);this._id="TB_SCROLLER"+
(c||0);this.pId=e;this.conf={};this.userConf=t;this.setConfiguaration(a);this.evt.scroll=H;return this}function W(a,c,e){var d;E.call(this,a,void 0,c,e);this.rawContextDefinitation=void 0;this.listContainerManager=(new z(this.position)).init(e);d=this.listContainerManager.getFirstContainer();this.evt.hover=[function(a){d.show(k(a.target||a.fromElement,a))},function(a){d.hide(300,a.target)}]}function C(a,e){this.preId=a||0;this.id=void 0;this.symbolList=[];this.groupRect=void 0;this.pId=e;c(this.btnConfig=
{},p);c(this.groupConfig={},ja)}function Ga(a,c){Ba[this.id="TB_MASTER"+a||g((new Date).getTime())]=this;this.toolbarRect=void 0;this.componentGroups=[];this.toolbarConfig=ba;this.group=void 0;this.pId=c}var Ba={},ja={hPadding:3,vPadding:3,borderRadius:2,fill:L("DBDBDB",100),borderColor:L("B2B1B1",100),borderThickness:1,offsetAdjustment:1,radius:1,spacing:6},ba={hPadding:3,vPadding:3,borderRadius:0,fill:L("EBEBEB",100),borderColor:L("D1D0D0",100),borderThickness:1,offsetAdjustment:1,radius:0},ta=
{fontFamily:"Verdana,sans",fontSize:"12px",fill:void 0,fontStyle:"normal",fontWeight:"normal"},N,na,Va;a.prototype.updateName=function(a){this.name=a;this.node&&(this.node.innerHTML=a)};a.prototype.assignSubContainer=function(a){a instanceof v&&(this.subConRef=a)};a.prototype.stickIntoContainer=function(a,c){var e=this.node=G.createElement("div"),d=this.style,g,k,l,m=this;this.handler&&(this.eventMap[this.action]=this.handler);a.appendChild(e);e.innerHTML=this.name;k=e.style;for(g in d)k[g]=d[g];
d=r("hover",e);r("click",e)(function(){m.handler&&((l=m.eventMap.click)&&l.apply(m,[Va]),c.hide())});d(function(){var a,c=e.style,d=m.hoverOverStyle;for(a in d)c[a]=d[a];m.subConRef&&m.subConRef.show(this)},function(){var a,c=e.style,d=m.hoverOutStyle;for(a in d)c[a]=d[a];m.subConRef&&m.subConRef.hide(300,this)})};a.prototype.setStyle=function(a){F(a||{},this.style)};a.prototype.dispose=function(){var a=this.node;a&&a.remove&&a.remove();this.node=void 0};v.POSITION_TOP="top";v.POSITION_BOTTOM="bottom";
v.prototype.addAtomicListItem=function(c){c instanceof a&&(this.atomicLists.push(c),c.stickIntoContainer(this.container,this))};v.prototype.show=function(a){var c=this.hideFnIds,e=Va.config.width,d=this.positionCalculation,g=0,k;this.target=this.target||a;for(k=c.length;g<k;g++)clearTimeout(c[g]);c.length=0;(c=this.parentListCon)?(c.show(this.target),this.container.style.left=c.container.offsetLeft+c.container.offsetWidth+"px",this.container.style.top=c.container.offsetTop+this.target.offsetTop+"px"):
(c=a&&a.nodeName&&"DIV"===a.nodeName.toUpperCase()?!0:!1,c||(a=a.getBBox(),d&&(this.container.style.display="block",d=this.container.offsetWidth,d+a.x>e?(this.container.style.left="auto",this.container.style.right=e-a.x-a.width+"px"):(this.container.style.left=a.x+"px",this.container.style.right="auto"),this.container.style.display="none"),this.position===W.POSITION_BOTTOM?(e=a.isArtificial?.5:1.5,this.container.style.top=a.y+a.height*e+"px",this.container.style.bottom="auto"):(this.container.style.bottom=
Va.config.height-a.y+"px",this.container.style.top="auto")));this.container.style.display="block"};v.prototype.hide=function(a){var c=this.container,e;(e=this.parentListCon)&&e.hide(300);this.hideFnIds.push(setTimeout(function(){c.style.display="none"},a))};v.prototype.dispose=function(){var a=this.atomicLists,c=this.refContainers,e,d;e=this.hideFnIds.length=0;for(d=a.length;e<d;e++)a[e].dispose();e=a.length=0;for(d=c.length;e<d;e++)c[e].dispose();c.length=0};z.prototype.init=function(a){var c=I.getKeys();
this.container||(a=I.getComponent("div0",a,c.KEY_DIV),(a=a())&&(a.innerHTML=""),this.container=new v(a,this.measurement));return this};z.prototype.getFirstContainer=function(){return this.container};z.prototype.appendAsList=function(c,e){var d=this,g,k=this.container.hoverOverStyle,l=this.container.hoverOutStyle;(function Xa(c,e){var m,r=0,B,p,t,w,C,z,F,E;F=e?e:d.container;m=c instanceof Array?c:[c];for(B=m.length;r<B;r++){p=m[r];t=new a({hoverOverStyle:k,hoverOutStyle:l});for(w in p)t.name=w,C=p[w],
t.action=C.action,t.setStyle(C.style),-1!==w.search(/^<[^<]+>$/)&&(t.hoverOverStyle={},t.hoverOutStyle={},C.handler=H),z=C.handler,"function"!==typeof z?E=Xa(z,new v(G.createElement("div"))):t.handler=C.handler;F.addAtomicListItem(t);E&&(E.parentListCon=F,F.refContainers.push(E),t.assignSubContainer(E));E=void 0}return g=F})(c,e);return g};z.prototype.dispose=function(){this.container.dispose();this.container=void 0};E.prototype.registerSymbol=function(a){e.register(this.symbol,a)};E.prototype._setConfiguaration=
function(a){this.conf?F(a,this.conf,!0):this.conf=a};E.prototype.attachEventHandlers=function(a,c){var e=this.evt,d=a.tooltext,g=a.click||H,k=a.hover,l=c&&c.click||H,m=this;d&&(e.tooltext=d);e.click="function"===typeof g?function(){l();g.apply(m,arguments)}:function(){var a=g.fn,c=g.context,e=(g.args||[]).slice(0);g.hasOwnProperty("context")?e.push(m):c=m;[].push.apply(e,arguments);l();a.apply(c,e)};k&&k instanceof Array&&(e.hover=k);this.node&&this.node.tooltip(this.evt.tooltext).buttonclick(this.evt.click).hover(this.evt.hover[0],
this.evt.hover[1]);return m};E.prototype.getLogicalSpace=function(){return{width:this.conf.width,height:this.conf.height}};E.prototype.show=function(){var a=this.node;a&&a.css({display:"block"})};E.prototype.hide=function(){var a=this.node;a&&a.css({display:"none"})};E.prototype.draw=function(a,c,e){var g=this.conf||{},k,m,v=I.getKeys(),r=Va.get("config","animationObj"),B=r.animObj,p=r.dummyObj,t=r.duration;this.isPlaintext?m=this.symbol:k=this.symbol;void 0!==e.idCount&&(this._id+=e.idCount);g.hoverFill=
g.hoverFill?L(g.hoverFill):L(d(l(g.fill),80));e=this.node=I.getComponent(this._id,this.pId,v.KEY_BUTTON,!0)(a,c,m,k,{width:g.width,height:g.height,r:g.radius,verticalPadding:g.symbolHPadding*g.scale,horizontalPadding:g.symbolHPadding},e.parentLayer).labelcss(this.conf.btnTextStyle);e.attr({ishot:!0,fill:[g.fill,g.labelFill,g.symbolFill,g.hoverFill,!0],stroke:[g.stroke,g.symbolStroke],"stroke-width":[g.strokeWidth,g.symbolStrokeWidth]}).tooltip(this.evt.tooltext).buttonclick(this.evt.click).hover(this.evt.hover[0],
this.evt.hover[1]);I.getCreationStatus()||(this.node.unclick(),this.node.animateWith(p,B,{"button-repaint":[a,c,g.width,g.height,g.radius]},t,r.animType),this.node.attr({"button-label":m,"button-padding":[g.symbolHPadding,g.symbolHPadding*g.scale]}),this.node.buttonclick(this.evt.click));e.getBBox=function(){return{x:a,y:c,width:g.width,height:g.height}};return e};E.prototype.dispose=function(){var a=this.node;a&&a.remove();this.node=void 0};Q.prototype=Object.create(E.prototype);Q.prototype.constructor=
Q;Q.prototype.check=function(){var a=this.pos;this.checked=!0;this.regSymbolCmd=J;this.node&&(this.registerSymbol(this.regSymbolCmd),this.node.attr({"button-repaint":[a.x,a.y,a.width,a.height,a.r]}))};Q.prototype.uncheck=function(){var a=this.pos;this.checked=!1;this.regSymbolCmd=w;this.node&&(this.registerSymbol(this.regSymbolCmd),this.node.attr({"button-repaint":[a.x,a.y,a.width,a.height,a.r]}))};Q.prototype.click=function(){this.checked?this.uncheck():this.check()};Q.prototype.attachEventHandlers=
function(a){var c=this;E.prototype.attachEventHandlers.apply(this,[a,{click:function(){c.click()}}])};Q.prototype.getLogicalSpace=function(){var a=Va.linkedItems.smartLabel,c=this.text.style,e;e=E.prototype.getLogicalSpace.apply(this,arguments);a.useEllipsesOnOverflow(Va.config.useEllipsesWhenOverflow);a.setStyle(c);a=a.getSmartText(this.text.plaintext);return{width:a.width+this.interPadding+e.width,height:Math.max(e.height,a.height)}};Q.prototype.draw=function(a,c,e){var d,g=this.conf,k;k=Va.linkedItems.smartLabel;
var l=N.colorManager,m=this.text.plaintext,v,r=I.getKeys();this.registerSymbol(this.regSymbolCmd);d=this.node=E.prototype.draw.apply(this,arguments);this.pos={x:a,y:c,width:g.width,height:g.height,r:g.radius};v=this.text.style;v.fill=v.fill||"#"+l.getColor("baseFontColor");k.useEllipsesOnOverflow(Va.config.useEllipsesWhenOverflow);k.setStyle(v);k=k.getSmartText(m);d=d.getBBox();l=I.getComponent(this._id,this.pId,r.KEY_TEXT);this.textNode=l(e.parentLayer).attr({text:m,x:d.x+d.width+k.width/2+this.interPadding,
y:d.y+d.height/2}).css(v);g=g.height>k.height?g.height:k.height;l=I.getComponent(this._id,this.pId,r.KEY_RECT);return l(e.parentLayer).attr({height:g,width:d.width+k.width+this.interPadding,x:a,y:c,stroke:B})};Q.prototype.dispose=function(){this.textNode&&this.textNode.remove();this.textNode=void 0;E.prototype.dispose.call(this)};M.prototype=Object.create(E.prototype);M.prototype.constructor=Q;M.prototype.setConfiguaration=function(a){var c=N.colorManager;t.color||(t.color="#"+c.getColor("altHGridColor"));
F(t,this.conf);F(a,this.conf)};M.prototype.getLogicalSpace=function(){var a=this.conf,c={};F(t,c);F(c,a);return E.prototype.getLogicalSpace.call(this)};M.prototype.getDefaultLayer=function(){var a=I.getKeys();return I.getComponent(this._id,this.pId,a.KEY_GROUP)("scroll")};M.prototype.registerSymbol=void 0;M.prototype._setConfiguaration=function(){};M.prototype.attachEventHandlers=function(a){a&&a.scroll&&"function"===typeof a.scroll&&(this.evt.scroll=a.scroll);E.prototype.attachEventHandlers.apply(this,
arguments);return this};M.prototype.draw=function(){var a,c,e,d,g,k,l,m,v,r,B,p,w,C,z,H;z=this.conf;var E,M=I.getKeys(),Q={},J=Va.get("config","animationObj"),G=J.animObj,N=J.dummyObj;e={};var L=J.duration;1===arguments.length?(z=arguments[0],a=z.x,c=z.y,l=z.parentLayer,g=!!z.sepLayer):(a=arguments[0],c=arguments[1],g=arguments[2],z&&g?F(g,z):g={},l=g.parentLayer,g=!!g.sepLayer);F(t,e);z.isHorizontal?delete e.width:delete e.height;F(e,z);c+=z.padding;e=z.height;d=z.width;k=z.isHorizontal;H=z.startPercent;
m=z.scrollRatio;v=z.showButtons;r=z.displayFlat;B=z.fullCanvasWidth;p=z.windowedCanvasWidth;w=z.color;C=z.roundEdges;Q["scroll-repaint"]=[a,c,d,e];l=l?l:this.getDefaultLayer();E=I.getComponent(this._id,this.pId,M.KEY_RECT);l=g?E("scroll-child"):l;E=I.getComponent(this._id,this.pId,M.KEY_SCROLLER);this.node=E(a,c,d,e,k,{scrollPosition:z.scrollPosition||P(H,0),displayStyleFlat:r,showButtons:v},l).data("fullCanvasWidth",B).data("windowedCanvasWidth",p).attr({"scroll-ratio":m,fill:w,r:C&&2||0}).scroll(this.evt.scroll);
I.getCreationStatus()||(this.node.undrag(),this.node.animateWith(N,G,Q,L,J.animType),this.node.attr({"scroll-display-style":r?"flat":"3d","scroll-position":z.scrollPosition||P(H,0)}).scroll(this.evt.scroll));return this.node};W.POSITION_TOP="top";W.POSITION_BOTTOM="bottom";W.prototype=Object.create(E.prototype);W.prototype.constructor=W;W.allNodes=[];W.prototype.getListRefernce=function(){return this.listContainerManager};W.prototype.attachEventHandler=function(a){var c=this.evt;if(a=a.tooltext)c.tooltext=
a};W.prototype.getLogicalSpace=function(){var a=this.listContainerManager.getFirstContainer().atomicLists;return a&&0===a.length?{width:0,height:0}:E.prototype.getLogicalSpace.call(this)};W.prototype.draw=function(){var a=this.listContainerManager.getFirstContainer().atomicLists;if(a&&0===a.length)return this.hide(),{getBBox:function(){return{width:0,height:0}}};a=E.prototype.draw.apply(this,arguments);W.allNodes.push(this.node);return a};W.prototype.dispose=function(){this.listContainerManager&&
this.listContainerManager.dispose();this.listContainerManager=void 0;E.prototype.dispose.call(this)};C.prototype.addSymbol=function(a,c){var e=this.symbolList;c?e.unshift(a):e.push(a)};C.prototype.setConfiguaration=function(a){var c=a.buttons;a=a.group;c&&F(c,this.btnConfig);a&&F(a,this.groupConfig)};C.prototype.draw=function(a,c,e){var d=this.preId,g=this.symbolList,k,l,m=this.groupConfig,v=this.btnConfig,r=c.x,B=c.y,p=0,t=0,w=Number.NEGATIVE_INFINITY;k=I.getKeys();d=this.id=d.toString()+e;na.toolbarGroup=
na.toolbar||{};e=I.getComponent(this.id,this.pId,k.KEY_GROUP);a=e("toolbar-group"+d,a).trackTooltip(!0);e=I.getComponent(this.id,this.pId,k.KEY_RECT);d=this.groupRect=e(a).attr({height:0,width:0,x:r,y:B});r+=m.hPadding;B+=m.vPadding;t+=m.hPadding;p+=m.vPadding;k=0;for(e=g.length;k<e;k++)l=g[k],l._setConfiguaration(v),l=l.draw(r,B,{parentLayer:a}),l=l.getBBox(),w<l.height&&(w=l.height),r+=l.width+(l=v.spacing);t+=r+m.hPadding-c.x-l-m.offsetAdjustment;p+=w+m.vPadding+m.offsetAdjustment;isFinite(p)||
(p=0);isFinite(t)||(t=0);d.attr({height:p,width:t}).attr({fill:m.fill,r:m.radius,stroke:m.borderColor,"stroke-width":m.borderThickness});l=d.getBBox();return{height:l.height,width:l.width}};C.prototype.getLogicalSpace=function(){var a=this.symbolList,c,e,d,g=0,k=0,l=Number.NEGATIVE_INFINITY,m=0;e=0;for(d=a.length;e<d;e++)c=a[e],c._setConfiguaration(this.btnConfig),c=c.getLogicalSpace(),k+=c.width+this.btnConfig.spacing,m+=c.width,l=l<c.height?c.height:l;if(!m)return{width:0,height:0};l!==Number.NEGATIVE_INFINITY&&
k&&(k-=this.btnConfig.spacing-2*this.groupConfig.hPadding-this.groupConfig.offsetAdjustment,g=l+2*this.groupConfig.vPadding+this.groupConfig.offsetAdjustment);return{width:k,height:g}};C.prototype.dispose=function(){for(var a=this.symbolList,c=0,e=a.length;c<e;c++)a[c].dispose();a.length=0;this.groupRect.remove()};Ga.prototype.getId=function(){return this.id};Ga.prototype.addComponent=function(a){this.componentGroups.push(a)};Ga.prototype.draw=function(a,c,e){var d=this.componentGroups,g,k,l;l=this.id;
var m=a,v=c,r;c=this.toolbarConfig;var B,p=Number.NEGATIVE_INFINITY;r=I.getKeys();e=e||{};k=na.toolbar=e.parentGroup||na.toolbar||{};e=I.getComponent(this.id,this.pId,r.KEY_GROUP,!0);this.group=l=e(l,k);e=I.getComponent(this.id,this.pId,r.KEY_RECT,!0);r=this.toolbarRect=e(l).attr({height:0,width:0,x:m,y:v});m+=c.hPadding;v+=c.vPadding;e=0;for(k=d.length;e<k;e++)g=d[e],B=g.groupConfig.spacing||1,g=g.draw(l,{x:m,y:v},e),m+=g.width+B,p=p>g.height?p:g.height;d=p;a=m-B-c.hPadding-a;isFinite(d)||(d=0);
isFinite(a)||(a=0);r.attr({height:d+=2*c.vPadding,width:a+=2*c.hPadding}).attr({fill:c.fill,r:c.radius,stroke:c.borderColor,"stroke-width":c.borderThickness});return{height:d,width:a}};Ga.prototype.getLogicalSpace=function(){var a=this.componentGroups,c,e,d,g=c=0,k=Number.NEGATIVE_INFINITY,l,m=0;c=0;for(e=a.length;c<e;c++)d=a[c],l=d.getLogicalSpace(),d=d.groupConfig.spacing||1,g+=l.width+d,m+=l.width,k=k<l.height?l.height:k;if(!m)return{width:0,height:0};g-=d-2*this.toolbarConfig.hPadding;c=k+2*this.toolbarConfig.vPadding;
return{width:g,height:c}};Ga.prototype.dispose=function(){for(var a=this.componentGroups,c=0,e=a.length;c<e;c++)a[c].dispose();a.length=0;this.toolbarRect.remove();I.emptyPool(this.pId)};return{init:function(a){na=a.graphics;Va=a.chart;N=a.components},HorizontalToolbar:Ga,ComponentGroup:C,Symbol:E,CheckboxSymbol:Q,Scroller:M,SymbolWithContext:W,getInstanceById:function(a){return Ba[a]}}}();FusionCharts.register("component",["toolbox","toolbox",{onceInitialized:!1,ALIGNMENT_HORIZONTAL:0,ALIGNMENT_VERTICAL:1,
POSITION_TOP:0,POSITION_RIGHT:1,POSITION_BOTTOM:2,POSITION_LEFT:3,init:function(a){if(this.onceInitialized)return this.configure(),this._iCount;v.init(a);this._options=a;this._chart=a.chart;this._iCount=++Q;this.configure();this.onceInitialized=!0;return this._iCount},configure:function(){var a=this._chart.jsonData.chart,c;v.init(this._options);p.scale=P(a.toolbarbuttonscale,1.15);p.width=P(a.toolbarbuttonwidth,15);p.height=P(a.toolbarbuttonheight,15);p.radius=P(a.toolbarbuttonradius,2);p.spacing=
P(a.toolbarbuttonspacing,5);p.fill=L(W(a.toolbarbuttoncolor,"ffffff"));p.labelFill=L(W(a.toolbarlabelcolor,"cccccc"));p.symbolFill=L(W(a.toolbarsymbolcolor,"ffffff"));p.hoverFill=W(a.toolbarbuttonhovercolor);p.stroke=L(W(a.toolbarbuttonbordercolor,"bbbbbb"));p.symbolStroke=L(W(a.toolbarsymbolbordercolor,"9a9a9a"));p.strokeWidth=P(a.toolbarbuttonborderthickness,1);p.symbolStrokeWidth=P(a.toolbarsymbolborderthickness,1);c=p.symbolPadding=P(a.toolbarsymbolpadding,5);p.symbolHPadding=P(a.toolbarsymbolhpadding,
c);p.symbolVPadding=P(a.toolbarsymbolvpadding,c);t.color=a.scrollcolor&&L(a.scrollcolor);t.padding=P(a.scrollpadding,0);t.height=P(a.scrollheight,12);t.width=P(a.scrollwidth,12);t.displayFlat=P(a.flatscrollbars,0);t.scrollBar3DLighting=P(a.scrollbar3dlighting,1);t.startPercent=Math.min(1,Math.max(0,parseFloat(a.scrolltoend)||0));t.showButtons=!!P(a.scrollshowbuttons,1);t.buttonPadding=P(a.scrollbtnpadding,0);m.baseFontFamily=W(a.basefont,"Verdana,sans");m.baseFontSize=P(a.basefontsize,10);m.baseFontColor=
W(a.basefontcolor,"595959")},getAPIInstances:function(a){var c=this._chart,d={};switch(a){case this.ALIGNMENT_HORIZONTAL:d.Toolbar=v.HorizontalToolbar}I.init(c.components,this._iCount);d.ComponentGroup=v.ComponentGroup;d.Symbol=v.Symbol;d.Scroller=v.Scroller;d.SymbolWithContext=v.SymbolWithContext;d.SymbolStore=e;d.CheckboxSymbol=v.CheckboxSymbol;return d},getDefaultConfiguration:function(){return p},clean:function(){I.hideRecursive(this._iCount)}}])}]);FusionCharts.register("module",["private","modules.renderer.js-base",
function(){var g=this,k=g.hcLib,F=k.Raphael,r=F._availableAnimAttrs,E="VML"===F.type,z=g.window,G=z.document,a=k.BLANKSTRING,L=k.HUNDREDSTRING,d=k.preDefStr,l=d.configStr,P=d.animationObjStr,W=d.NORMAL,p=d.BOLD,t=d.hiddenStr,m=d.visibleStr,c=d.ROUND,w=d.miterStr,J=d.POSITION_START,e=d.POSITION_TOP,v=d.POSITION_END,H=d.POSITION_BOTTOM,B=d.POSITION_MIDDLE,Q=d.POINTER,I=d.noneStr,ha=d.SEVENTYSTRING,d=d.AUTOSTRING,X=k.parseConfiguration,T=k.componentConfigurer,aa=k.BLANKSTRING,oa="https:"===z.location.protocol?
"https://export.api3.fusioncharts.com/":"http://export.api3.fusioncharts.com/",M=k.pluck,la=k.getValidValue,C=k.pluckNumber,Ga=k.getFirstValue,Ba=k.parseUnsafeString,ja=k.extend2,ba=k.getDashStyle,ta=k.graphics.mapSymbolName,N=k.regex.dropHash,na=k.HASHSTRING,Va=z.Image,Ea=k.setImageDisplayMode,za=k.removeEvent,Ka=k.getPosition,Ia=k.getMouseCoordinate,Ua=k.addEvent,Pa=8===z.document.documentMode?m:aa,Ra=k.toRaphaelColor,Xa=Math,Ta=Xa.min,fa=Xa.max,Ha=Xa.abs,Fa=Xa.ceil,Oa=Xa.floor,wa=Xa.round,jb=Xa.sin,
lb=Xa.cos,Eb=Math.PI,Bb=Eb/2,zb=2*Eb,sb=Eb+Bb,rb=k.getFirstColor,Ya=k.setLineHeight,Ma=k.pluckFontSize,hb=k.graphics.getDarkColor,gb=k.graphics.getLightColor,ab=k.graphics.convertColor,vb=k.POSITION_CENTER,pb=k.POSITION_RIGHT,kb=k.POSITION_LEFT,xa=k.chartAPI,bb=k.COMMASTRING,qb=k.PXSTRING,Za=k.componentDispose,Na,Ja=z.navigator.userAgent.match(/ (iPad|iPhone|iPod)/g),Sa={left:J,right:v,center:B},xb=k.each,fb="rgba(255,0,0,"+(k.isIE?.002:1E-6)+")",tb=k.BGRATIOSTRING,cb=k.graphics.getAngle,Cb=k.NumberFormatter,
yb=k.getLinkAction,ib=k.hasTouch=void 0!==G.documentElement.ontouchstart,ob={1:p,0:W},mb=function(b){b=b.replace("rgba(",aa).split(",");return"#"+("000000"+(b[0]<<16|b[1]<<8|b[2]).toString(16)).slice(-6)},b=k.chartPaletteStr={chart2D:{bgColor:"bgColor",bgAlpha:"bgAlpha",bgAngle:"bgAngle",bgRatio:"bgRatio",canvasBgColor:"canvasBgColor",canvasBaseColor:"canvasBaseColor",divLineColor:"divLineColor",legendBgColor:"legendBgColor",legendBorderColor:"legendBorderColor",toolTipbgColor:"toolTipbgColor",toolTipBorderColor:"toolTipBorderColor",
baseFontColor:"baseFontColor",anchorBgColor:"anchorBgColor"},chart3D:{bgColor:"bgColor3D",bgAlpha:"bgAlpha3D",bgAngle:"bgAngle3D",bgRatio:"bgRatio3D",canvasBgColor:"canvasBgColor3D",canvasBaseColor:"canvasBaseColor3D",divLineColor:"divLineColor3D",divLineAlpha:"divLineAlpha3D",legendBgColor:"legendBgColor3D",legendBorderColor:"legendBorderColor3D",toolTipbgColor:"toolTipbgColor3D",toolTipBorderColor:"toolTipBorderColor3D",baseFontColor:"baseFontColor3D",anchorBgColor:"anchorBgColor3D"}},u=function(){var b=
{},a,q=function(){var c,f,u,e,d=0,D,K,k=parseInt(g.core.options.resizeTrackingInterval,10)||300,l={},m=function(){l.itemVar._containerOffsetW=l.parentEle.offsetWidth;l.itemVar._containerOffsetH=l.parentEle.offsetHeight},v;for(c in b)d+=1,f=b[c],u=f.jsVars,D=f.ref,!f.disposed&&(e=D&&D.parentNode)&&(K=D.style)&&(/\%/g.test(K.width)||/\%/g.test(K.height))?(D=e.offsetWidth,v=e.offsetHeight,!u.resizeLocked&&(D&&u._containerOffsetW!==D||v&&u._containerOffsetH!==v)&&(f.resizeTo&&f.resizeTo(),l.itemVar=u,
l.parentEle=e,setTimeout(m,1))):(delete b[c],--d);a=d?setTimeout(q,k):clearTimeout(a)};return function(c,f){var u=c.jsVars,e=f||c.ref&&c.ref.parentNode||{};u._containerOffsetW=e.parentNode.offsetWidth;u._containerOffsetH=e.parentNode.offsetHeight;b[c.id]=c;a||(a=setTimeout(q,parseInt(g.core.options.resizeTrackingInterval,10)||300))}}(),D=k.schedular,K={getExternalInterfaceMethods:function(){var b=xa[this.jsVars.type],b=b&&b.eiMethods,a="saveAsImage,print,exportChart,getXML,hasRendered,signature,cancelExport,getSVGString,lockResize,showChartMessage,",
q;if("string"===typeof b)a+=b+bb;else if(void 0!==b||null!==b)for(q in b)a+=q+bb;return a.substr(0,a.length-1)},drawOverlayButton:function(b){var a=this.jsVars,q=a.overlayButton,c,f;if(b&&b.show){q||(q=a.overlayButton=G.createElement("span"),k.dem.listen(q,"click",function(){g.raiseEvent("OverlayButtonClick",b,a.fcObj)}));for(c=b.message?b.message:"Back";q.firstChild;)q.removeChild(q.firstChild);q.appendChild(G.createTextNode(c));a.overlayButtonMessage=c;c={border:"1px solid "+(b.borderColor?b.borderColor.replace(N,
na):"#7f8975"),backgroundColor:b.bgColor?b.bgColor.replace(N,na):"#edefec",fontFamily:b.font?b.font:"Verdana,sans",color:"#"+b.fontColor?b.fontColor:"49563a",fontSize:(b.fontSize?b.fontSize:"10")+qb,padding:(b.padding?b.padding:"3")+qb,fontWeight:0===parseInt(b.bold,10)?W:p,position:"absolute",top:"0",right:"0",_cursor:"hand",cursor:Q};for(f in c)q.style[f]=c[f];a.hcObj.container.appendChild(q);a.overlayButtonActive=!0}else q&&(a.overlayButton=q.parentNode.removeChild(q),a.overlayButtonActive=!1,
delete a.overlayButtonMessage)},print:function(b){var a=this.apiInstance,q=ja({},b);if(a.config.isPrinting||!a.config.hasRendered)return!1;g.raiseEvent("BeforePrint",q,a.chartInstance,void 0,function(){var b=a.linkedItems.container,h=[],c=b.parentNode,u=G.body||G.getElementsByTagName("body")[0],e=u.childNodes,d,D,K,k;a.config.isPrinting=!0;xb(e,function(b,a){1==b.nodeType&&(h[a]=b.style.display,b.style.display="none")});if(!1!==q.hideButtons){D=a.components.chartMenuBar.componentGroups[0].symbolList;
k=0;for(d=D.length;k<d;k++)if((K=D[k])instanceof a.components.toolBoxAPI.SymbolWithContext){K=K.getListRefernce().getFirstContainer();break}K.container.style.display=I}u.appendChild(a.linkedItems.container);z.print();setTimeout(function(){K.container.style.display=m;c.appendChild(b);xb(e,function(b,a){1==b.nodeType&&(b.style.display=h[a])});!1!==q.hideButtons&&(K.container.style.display=m);a.config.isPrinting=!1;g.raiseEvent("PrintComplete",q,a.chartInstance)},1E3)},function(){g.raiseEvent("PrintCancelled",
q,a.chartInstance)})},exportChart:function(b){return k.exportChart.call(this.apiInstance,b)},getSVGString:function(){return this.jsVars&&this.jsVars.instanceAPI&&this.jsVars.instanceAPI.components&&this.jsVars.instanceAPI.components.paper&&this.jsVars.instanceAPI.components.paper.toSVG()},resize:function(){var b=this.jsVars,a=b.container;b.instanceAPI&&b.instanceAPI.redraw?b.instanceAPI.redraw():k.createChart(b.fcObj,a,b.type,void 0,void 0,!1,!0);delete b.isResizing},lockResize:function(b){return"boolean"!==
typeof b?!!this.jsVars.resizeLocked:this.jsVars.resizeLocked=b},showChartMessage:function(b,a,q){var c=this.jsVars,f=this.FusionCharts.apiInstance;c.msgStore[b]&&(b=c.msgStore[b]);a&&f&&f.config.hasRendered?(f._show(),this.showMessage(b,q)):(f._hide(),f.setChartMessage(b),f.drawChartMessage());return b},showMessage:function(b,a){var q=this.apiInstance,c=q.config,f=q.components,u=q.graphics.messageGroup,e=f.chartMessage||(f.chartMessage={}),e=e.graphics||(e.graphics={}),d=f.paper,D=q.linkedItems.smartLabel,
f=e.messageText,g=e.messageVeil,K=e.message,k=d.width,l=d.height;u||(q.graphics.messageGroup=u=d.group("messageGroup"));g||(g=e.messageVeil=d.rect(0,0,k,l,u).attr({fill:"rgba(0,0,0,0.2)",stroke:I}));g.show().toFront().attr("cursor",a?Q:"default")[a?"click":"unclick"](q._hideChartMessage,q);f||(f=e.messageText=d.text(k/2,l/2,aa,u).attr({fill:"rgba(255,255,255,1)","font-family":"Verdana,sans","font-size":10,"line-height":14,ishot:!0}));K&&K.hide();b=b||aa;D.setStyle({"line-height":"14px","font-family":"Verdana,sans",
"font-size":"10px"});c=D.getSmartText(b,k-(c.marginRight||0)-(c.marginLeft||0),l-(c.marginTop||0)-(c.marginBotton||0));f.attr({text:c.text,ishot:!0,cursor:a?Q:"default"})[a?"click":"unclick"](q._hideChartMessage,q).show().toFront()},signature:function(){return"FusionCharts/3.4.0 (XT)"}};delete r.fill;delete r.stroke;g.core.options.resizeTrackingInterval=300;g.core.options.preventTrackResize=!1;g.core.options.SVGDefinitionURL="relative";k.createChart=function(b,n,q,c,f,e,d){var D=b.jsVars,l,ra=xa[q||
(q=b.chartType())],ca=b.apiInstance,ua=D.hasNativeMessage;e=b.options;var m=b.args,v;n.offsetWidth&&n.offsetHeight&&(/^\s*absolute\s*$/i.test(g.core.options.SVGDefinitionURL)&&(F._url=(F._g&&F._g.win||z).location.href.replace(/#.*?$/,a)),v=function(a){var f={renderer:"javascript"},e=D.fcObj,ea=e.width,l=e.height,Da=ra&&ra.eiMethods,m=D.overlayButton,v;n.jsVars=b.jsVars;ua=D.hasNativeMessage;D.container=n;D.hcObj=a;D.type=q;D.width=n.offsetWidth;D.height=n.offsetHeight;D.instanceAPI=ca;if(a.hasRendered){g.extend(n,
K);if(Da&&"string"!==typeof Da)for(v in Da)n[v]=Da[v];D.overlayButtonActive&&m&&(m.innerHTML=aa,m.appendChild(G.createTextNode(D.overlayButtonMessage)),a.container.appendChild(m))}(/\%/g.test(ea)||/\%/g.test(l))&&n&&n.parentNode&&!g.core.options.preventTrackResize&&u(e,n);if(c&&(c({success:a.hasRendered,ref:n,id:b.id}),a.hasRendered)){k.raiseEvent("loaded",{type:q,renderer:"javascript"},b,[b.id]);ca.config.hasRendered=!0;if(!0===b.disposed)return;ua||(e.__state.firstRenderNotified=!0,setTimeout(function(){k.raiseEvent("rendered",
{renderer:"javascript"},e,[e.id])},0))}a.hasRendered&&D.previousDrawCount<D.drawCount&&(f.width=D.width,f.height=D.height,f.drawCount=D.drawCount,f.displayingMessage=ua,f.renderer=e.options.renderer,k.raiseEvent("drawcomplete",f,e,[e.id]),ua||d||setTimeout(function(){e.__state&&!e.__state.firstRenderNotified&&k.raiseEvent("rendered",{renderer:"javascript"},e,[e.id]);g.raiseEvent("renderComplete",f,e)},0))},ca&&ca.inited?(g.raiseEvent("internal.drawStart",{chartType:q,logicName:ca.name,logicBase:ca.base&&
ca.base.name,defaultSeriesType:ca.defaultSeriesType},b),f=b.jsVars&&b.jsVars.themeObject&&b.jsVars.themeObject.getThemedJSONData()||b.getChartData(g.dataFormats.JSON,!0),l=f.data,ca.config&&ca.config.hasChartMessage&&ca._hideChartMessage(),ca.jsonData=l,d||k.raiseEvent("dataloaded",{},b,[b.id]),ca.configure(),ca._feedAxesRawData(),ca._setCategories(),T(ca),ca.draw(),v({hasRendered:!0,container:n})):ca&&"base"===q?(ca.setChartMessage(f,b,n),ca.drawChartMessage()):(ca&&"base"===ca.name&&"base"!==q&&
(ca.dispose(),ca=void 0),ca?ca.config&&ca.config.hasChartMessage&&ca._hideChartMessage():ca=b.apiInstance=ra?new xa(q):new xa("base"),ca.chartInstance=b,ca.origRenderWidth=b.__state.renderedWidth,ca.origRenderHeight=b.__state.renderedHeight,"base"===q?(ca.setChartMessage(f,b,n),ca.drawChartMessage()):void 0!==f?"string"===typeof f&&(ca.setChartMessage(f,b,n),ca.drawChartMessage(),ua=D.hasNativeMessage=!0):!ca||!ca.init||ca&&"base"===ca.name?(b._chartMessageImageStyle={imageHAlign:M(m.typeNotSupportedMessageImageHAlign,
e.baseChartMessageImageHAlign).toLowerCase(),imageVAlign:M(m.typeNotSupportedMessageImageVAlign,e.baseChartMessageImageVAlign).toLowerCase(),imageAlpha:C(m.typeNotSupportedMessageImageAlpha,e.baseChartMessageImageAlpha),imageScale:C(m.typeNotSupportedMessageImageScale,e.baseChartMessageImageScale)},b._chartMessageStyle={color:m.typeNotSupportedMessageColor||e.baseChartMessageColor,fontFamily:m.typeNotSupportedMessageFont||e.baseChartMessageFont,fontSize:m.typeNotSupportedMessageFontSize||e.baseChartMessageFontSize},
ca.setChartMessage(e.typeNotSupportedMessage,b,n),ca.drawChartMessage(),ua=D.hasNativeMessage=!0):D.message?(ca.setChartMessage(D.message,b,n),ca.drawChartMessage(),ua=D.hasNativeMessage=!0):D.loadError?(b._chartMessageImageStyle={imageHAlign:M(m.dataLoadErrorMessageImageHAlign,e.baseChartMessageImageHAlign).toLowerCase(),imageVAlign:M(m.dataLoadErrorMessageImageVAlign,e.baseChartMessageImageVAlign).toLowerCase(),imageAlpha:C(m.dataLoadErrorMessageImageAlpha,e.baseChartMessageImageAlpha),imageScale:C(m.dataLoadErrorMessageImageScale,
e.baseChartMessageImageScale)},b._chartMessageStyle={color:m.dataLoadErrorMessageColor||e.baseChartMessageColor,fontFamily:m.dataLoadErrorMessageFont||e.baseChartMessageFont,fontSize:m.dataLoadErrorMessageFontSize||e.baseChartMessageFontSize},ca.setChartMessage(e.dataLoadErrorMessage,b,n),ca.drawChartMessage(),ua=D.hasNativeMessage=!0):D.stallLoad?(b._chartMessageImageStyle={imageHAlign:M(m.dataLoadStartMessageImageHAlign,e.baseChartMessageImageHAlign).toLowerCase(),imageVAlign:M(m.dataLoadStartMessageImageVAlign,
e.baseChartMessageImageVAlign).toLowerCase(),imageAlpha:C(m.dataLoadStartMessageImageAlpha,e.baseChartMessageImageAlpha),imageScale:C(m.dataLoadStartMessageImageScale,e.baseChartMessageImageScale)},b._chartMessageStyle={fontFamily:m.dataLoadStartMessageFont||e.baseChartMessageFont,fontSize:m.dataLoadStartMessageFontSize||e.baseChartMessageFontSize,color:m.dataLoadStartMessageColor||e.baseChartMessageColor},ca.setChartMessage(e.dataLoadStartMessage,b,n),ca.drawChartMessage(),ua=D.hasNativeMessage=
!0,v({hasRendered:!0,container:n})):"zoomscatter"!==q||G.createElement("canvas").getContext?(g.raiseEvent("internal.drawStart",{chartType:q,logicName:ca.name,logicBase:ca.base&&ca.base.name,defaultSeriesType:ca.defaultSeriesType},b),f=b.jsVars&&b.jsVars.themeObject&&b.jsVars.themeObject.getThemedJSONData()||b.getChartData(g.dataFormats.JSON,!0),l=f.data,f.error instanceof Error?(b._chartMessageImageStyle={imageHAlign:M(m.dataInvalidMessageImageHAlign,e.baseChartMessageImageHAlign).toLowerCase(),imageVAlign:M(m.dataInvalidMessageImageVAlign,
e.baseChartMessageImageVAlign).toLowerCase(),imageAlpha:C(m.dataInvalidMessageImageAlpha,e.baseChartMessageImageAlpha),imageScale:C(m.dataInvalidMessageImageScale,e.baseChartMessageImageScale)},b._chartMessageStyle={fontFamily:m.dataInvalidMessageFont||e.baseChartMessageFont,fontSize:m.dataInvalidMessageFontSize||e.baseChartMessageFontSize,color:m.dataInvalidMessageColor||e.baseChartMessageColor},ca.setChartMessage(e.dataInvalidMessage,b,n),ca.drawChartMessage(),ua=D.hasNativeMessage=!0,b.__state.dataReady=
!1,d||g.raiseEvent("dataInvalid",{error:f.error},D.fcObj,void 0,function(){k.raiseEvent("dataxmlinvalid",{},b,[b.id])})):(d||k.raiseEvent("dataloaded",{},b,[b.id]),!0!==ca.chartInstance.disposed&&ca.init(n,l,b,v))):(b._chartMessageImageStyle={imageHAlign:M(m.browserNotSupportedMessageImageHAlign,e.baseChartMessageImageHAlign).toLowerCase(),imageVAlign:M(m.browserNotSupportedMessageImageVAlign,e.baseChartMessageImageVAlign).toLowerCase(),imageAlpha:C(m.browserNotSupportedMessageImageAlpha,e.baseChartMessageImageAlpha),
imageScale:C(m.browserNotSupportedMessageImageScale,e.baseChartMessageImageScale)},b._chartMessageStyle={color:m.browserNotSupportedMessageColor||e.baseChartMessageColor,fontFamily:m.browserNotSupportedMessageFont||e.baseChartMessageFont,fontSize:m.browserNotSupportedMessageFontSize||e.baseChartMessageFontSize},ca.setChartMessage(M(m.browserNotSupportedMessage,e.browserNotSupportedMessage),b,n),ca.drawChartMessage(),ua=D.hasNativeMessage=!0)))};FusionCharts.register("component",["legend","legend",
{customConfigFn:null,init:function(){this.graphics||(this.graphics={});this.item||(this.items=[]);this.components||(this.components={})},drawLegend:function(b,a){var q,c,f,u=this.chart,D=u.config;q=u.components;var d=q.paper,g=this.config,K=this.graphics||(this.graphics={}),k=u.graphics.legendGroup,ua;c=K.box;var m=K.caption,r,Wa=D.height-D.canvasBottom,p=D.canvasLeft,t=D.canvasWidth,w=g.chartMarginLeft||0,wb=g.chartMarginRight||0,S=g.chartMarginBottom||0,z=D.actionBarHeight||0,R=g.actualCanvasMarginLeft||
0,O=D.actualCanvasMarginBottom||0,H=D.actualCanvasMarginRight||0,E=g.alignLegendWithCanvas,I=D.height,ia=D.canvasTop,da=g.width,Qa=g.height,M=D.borderWidth;f=g.borderRadius;var U=g.backgroundColor,V=g.borderColor,m=g.borderWidth||0,Q=g.legendPos,Z=.5*m,Mb=.5*m+2,G=C(g.padding,4),N=.5*G,ga=g.scroll.enabled,L=g.drawn,u=u.get(l,P),T=u.dummyObj,Fb=u.animObj,sa=u.transposeAnimDuration,ma=u.animType,X,ha,W,Aa,ya,u=q.legendScrollBar,va=0,pa=0,va=D.oriCanvasLeft,ub=D.oriTopSpace,pa=D.oriBottomSpace,Ca=q.tb,
ba=q.toolBoxAPI.Scroller;Q===pb&&(g.align=pb,g.verticalAlign=B,r=g.layout="vertical");r?(void 0===b&&(b=D.width-wb-H-da-M),void 0===a&&(va=C(ub,ia),pa=C(pa,Wa),a=va+.5*(I-pa-va-Qa)+(g.y||0))):(void 0===b&&(r=D.width-(w+R+(wb+H)),r=E?t-da:r-da,p=E?C(va,p):w+R,b=p+r/2),void 0===a&&(a=I-Qa-O-S-z));Qa=F.crispBound(b,a,da,Qa,m);b=Qa.x;a=Qa.y;da=Qa.width;Qa=Qa.height;L?(g.xL&&(g.xL=Ta(fa(g.xL,Mb),D.width-g.width-Mb)),g.yL&&(g.yL=Ta(fa(g.yL,Mb),D.height-g.height-Mb)),k.show().animateWith(T,Fb,{transform:["T",
g.xL||b,g.yL||a]},sa,ma)):k.show().transform(["T",b,a]);g.xPos=b;g.yPos=a;k.attr({cursor:g.legendAllowDrag?"move":aa});g.legendAllowDrag&&!g._dragEvtListenerBinded&&(k.drag(function(b,a){g.legendAllowDrag&&(Aa=ha+b,ya=W+a,Aa=Ta(fa(Aa,Mb),D.width-g.width-Mb),ya=Ta(fa(ya,Mb),D.height-g.height-Mb),k.transform("t"+Aa+","+ya),g.xPos=g.xL=Aa,g.yPos=g.yL=ya)},function(){g.legendAllowDrag&&(ha=g.xL||g.xPos,W=g.yL||g.yPos)}),g._dragEvtListenerBinded=!0);L={x:0,y:0,width:da,height:Qa,r:f,stroke:V,"stroke-width":m,
fill:U||"none",ishot:g.legendAllowDrag};c?(c.animateWith(T,Fb,{x:0,y:0,width:da,height:Qa,r:f},sa,ma),c.attr({stroke:V,"stroke-width":m,fill:U||"none"})):c=K.box=d.rect(L,k);L=g.drawn=!0;c.shadow(g&&g.shadow);ua=K.itemGroup||(K.itemGroup=d.group("item",k));ga?(c={isHorizontal:!1},f={scroll:function(b){ua.transform(["T",0,(X-g.totalHeight)*b])},mousedown:function(b){b.preventDefault();b.stopPropagation()}},u=q.legendScrollBar,u||(q.legendScrollBar=u=(new ba(c,(Ca.idCount||0)+1,Ca.pId)).attachEventHandlers(f)),
X=Qa-G,ua.attr({"clip-rect":"0,"+N+(","+da+","+X)}),q=(X+G)/g.totalHeight,u.draw(da-10+N-m,Z,{height:Qa-m,scrollRatio:q,startPercent:0,color:g.legendScrollBgColor}),k.appendChild(u.node)):(u&&u.node&&u.node.hide(),ua.attr({"clip-rect":null}),ua.node&&ua.node.removeAttribute("clip-path"));m=K.caption;if(g.title&&g.title.text!==aa&&g.validLegendItem){switch(g.title.align){case J:ga=G;break;case v:ga=da-G-(ga?10:0);break;default:ga=.5*da}k.trackTooltip(!0);da=g.title.style;L={text:g.title.text,title:g.title.originalText||
aa,x:ga,y:G,fill:g.title.style.color,direction:g.textDirection,"line-height":da.lineHeight,"vertical-align":e,"text-anchor":g.title.align};G={"font-weight":da.fontWeight,"font-style":da.fontStyle,"font-family":da.fontFamily,"font-size":da.fontSize};m?(m.show().attr(L),m.css(G)):m=K.caption=d.text(L,G,ua);m.tooltip(g.title.originalText)}else m&&m.hide();g.showLegend&&!1!==g.enabled?this._drawPointLegendItem():k.hide()},reverseLegendFn:function(){var b=this.components.items||[],a,q=[],c,f=0,u=this.config;
for(a=b.length-1;0<=a;a--)b[a].configuration.mainDS?(c=a,q=q.concat(b.splice(c,f+1)),f=0):f++;q.length&&(u.orderReversed=!0,this.components.items=q.slice(0))},_manageLegendPosition:function(b){var a=this.config,q=this.chart.hasSubDataset,c=a.legendPos,f=this.components.items;a.reversed?q?!a.orderReversed&&this.reverseLegendFn():f&&f.reverse():q&&a.orderReversed&&this.reverseLegendFn();return c===pb?this._placeLegendBlockRight(b):this._placeLegendBlockBottom(b)},_placeLegendBlockBottom:function(b){var n=
this.chart,q=this.components,c=n.config,f=k.TESTSTR,u=c.width,e=c.height,D=c.canvasLeft,d=c.width-(c.canvasRight||0),g=n.linkedItems.smartLabel,K=this.config,l=K.chartMarginLeft,m=K.chartMarginRight,v=K.chartMarginTop,r=K.alignLegendWithCanvas,B=K.minimiseWrappingInLegend,p=K.legendScale,t=K.numColumns,w=K.padding,S=2*b,z=2*w,R=z,O=K.title,F=O.padding,H=parseInt(K.itemStyle.fontSize,10)||10,E=q.items||[],I=E.length,q=K.oriSymbolPadding,da=K.textPadding,Qa=K.legendPadding,M=c.canvasMarginRight,U=c.canvasMarginLeft,
V=n.components.yAxis||[],n=V[0],V=V[1],n=n&&n.config||{},V=V&&V.config||{},Q=n.nameMaxW,Z=V.nameMaxW,J=n.name&&n.name.style||{},G=V.name&&V.name.style||{},N=n.axisName||aa,ga=V.axisName||aa,L=0,P=0,T=0,sa=0,ma=V=0,X=0,ha=0,W=[],Aa=!1,ya=0,va=0,pa,ub,Ca=n=c.canvasWidth-c.canvasMarginLeft-c.canvasMarginRight,ba;K.paddingBottom=c.height-c.canvasBottom;g.useEllipsesOnOverflow(c.useEllipsesWhenOverflow);g.setStyle(J);sa=g.getOriSize(N);g.setStyle(G);G=g.getOriSize(ga);H+=1;0>=H&&(H=1);n-=z;q*=p;H=Ta(H*
p,n);0>=H&&(q=H=0);K.symbolWidth=H;K.textPadding=4;K.legendHeight=c=H+2*q;K.rowHeight=p=fa(parseInt(K.itemStyle.lineHeight,10)||12,c);w=da+q+w;g.setStyle(K.itemStyle);J=g.getOriSize(f).height;f=Qa+K.borderWidth/2+1;f=Ta(f,b-J-8);Qa=.05*p;if(sa||G)pa=C(sa.height,0)>C(G.height,0)?(ba=Q)&&sa.width:(ba=Z)&&G.width;n=r?n:u-(pa+v>e-b?2*ba+m+l+M+U:m+l+U+M);K.initialItemY=0;K.initialItemX=0;if(K.showLegend&&0!==I){for(u=0;u<I;u+=1)pa=E[u],e=pa.config||(pa.config={}),v=pa.configuration,pa=e.name=Ba(v.label),
pa===a||0===v.enabled||!1===v.enabled?e.enabled=0:(e.enabled=1,T+=1,ub=!0,pa=g.getOriSize(pa),L=fa(L,pa.width),ma=fa(ma,Ta(pa.height,S)),P+=pa.width);K.validLegendItem=ub;sa=P/T;v=c+Qa+da+q+z;P+=v*T;K.x=(D-l-d+m)/2;K.x=!r&&P>Ca?0:K.x;if(ub){sa+=v;L+=v;0<t&&T<t&&(t=T);P<=n&&(0>=t||t===T)?(t=T,V=P/T,Aa=!0,ma>p&&(ha=(ma-p)/2,p=ma)):0<t&&(V=n/t)>sa?V>L&&(V=L):n>L&&(B||1.5*sa>L)?(t=Oa(n/L),T<t&&(t=T),V=L):n>=2*sa?(t=Oa(n/sa),T<t&&(t=T),V=Oa(n/t),V>L&&(V=L)):(t=1,V=n);K.itemWidth=V;D=Fa(V-v);0>D&&(q=D=
da=0);K.symbolPadding=q;K.textPadding=da;K.width=V*t-Qa;O.oriText!==a&&(g.setStyle(O.style),pa=g.getSmartText(O.oriText,n,S),O.text=pa.text,pa.tooltext&&(O.originalText=pa.tooltext),O=pa.width+z,K.width<O&&(K.initialItemX=(O-K.width)/2,K.width=O),K.initialItemY=X=pa.height+F);g.setStyle(K.itemStyle);for(u=0;u<I;u+=1)if(pa=E[u],e=pa.config,0!==e.enabled){0===D&&(W[va]=!0,e.name=a,F=1,O=parseInt(va/t,10),d=va%t,e._legendX=d*V,e._legendY=O*p+z,e._legendH=F*p,e._totalWidth=H+q);if(Aa)pa=g.getOriSize(e.name),
pa.height<p&&(e._legendTestY=(p-pa.height)/2),e._markerYGutter=ha,e._legendX=ya,e._legendY=z,e._legendH=p,e._totalWidth=H+w+pa.width,ya+=pa.width+v;else{pa=g.getSmartText(e.name,D,S);e.name=pa.text;for(pa.tooltext&&(e.originalText=pa.tooltext);!0===W[va];)va+=1;O=pa.height/p;d=va;for(F=0;F<O;F+=1,d+=t)W[d]=!0;pa.height<p&&(e._legendTestY=(p-pa.height)/2);O=parseInt(va/t,10);d=va%t;e._legendX=d*V;e._legendY=O*p+z;e._legendH=F*p;e._totalWidth=H+w+pa.width}va++}g=Aa?1:Fa(W.length/t);K.height=K.totalHeight=
R+(g*p+X);K.rowHeight=p;K.legendNumColumns=t;K.height-2*q>b?(K.height=b,b=K.scroll||(K.scroll={}),b.enabled=!0,b.flatScrollBars=K.flatScrollBars,b.scrollBar3DLighting=K.scrollBar3DLighting,K.width=K.width+12>n?K.width:K.width+12):K.scroll.enabled=!1;f+=K.height;K.isActive=!0;K.enabled=!0}else K.enabled=!1,f=K.width=0}else f=0,K.height=0,K.width=0;return{bottom:f,right:0}},_placeLegendBlockRight:function(b){var n=this.config,q=this.components,c=this.chart,f=c.config,u=c.linkedItems.smartLabel,e=c.components.canvas.config.canvasBorderThickness||
0,D=n.textPadding,c=n.title.padding,d=n.oriSymbolPadding,g=n.legendPadding,K=n.legendScale,k=parseInt(n.itemStyle.fontSize,10),l=2*f.canvasHeight,m=0,v=2*n.padding,r=v,B={},p=!1,q=q.items||[],t=q.length,w,z,C,O=0;b-=v+g;k+=1;0>=k&&(k=1);d*=K;k=Ta(k*K,b);0>=k&&(d=k=0);n.symbolPadding=d;n.symbolWidth=k;n.legendHeight=K=k+2*d;n.rowHeight=fa(parseInt(n.itemStyle.lineHeight,10)||12,K);e=g+n.borderWidth/2+e;z=b-K-g-D;0>z&&(z=0);u.useEllipsesOnOverflow(f.useEllipsesWhenOverflow);u.setStyle(n.itemStyle);
if(n.showLegend&&0!==t){for(O=0;O<t;O+=1)w=q[O],f=w.config||(w.config={}),C=w.configuration,w=f.name=Ba(C.label),f._legendX=0,f._legendY=r,0===C.enabled||!1===C.enabled||w===a?f.enabled=0:(f.enabled=1,p=!0,0===z?(r+=f._legendH=K,f.name=a,f._totalWidth=k+d):(w=u.getSmartText(w,z,l),f.name=w.text,w.tooltext&&(f.originalText=w.tooltext),w.height<K&&(f._legendTestY=(K-w.height)/2),f._totalWidth=k+d+D+w.width+g,r+=f._legendH=fa(w.height,K),m=fa(w.width,m)));(n.validLegendItem=p)?(n.itemWidth=m+K+g+D,n.width=
n.itemWidth+v,n.title.oriText!==a&&(u.setStyle(n.title.style),w=u.getSmartText(n.title.oriText,b,l),n.title.text=w.text,w.tooltext&&(n.title.originalText=w.tooltext),u=w.width+v,n.width<u&&(n.initialItemX=(u-n.width)/2,n.width=u),n.initialItemY=w.height+c,r+=n.initialItemY),n.height=n.totalHeight=r,e=Ta(n.width+e,b),B.right=e+g,n.isActive=!0,n.enabled=!0):(n.enabled=!1,n.width=0,B.right=0)}else B.right=0,n.height=0,n.width=0;return B},postSpaceManager:function(){var b=this.config,a=this.chart.config.canvasHeight;
b.legendPos===pb&&(b.height>a?(b.height=a,b.scroll.enabled=!0,b.scroll.flatScrollBars=b.flatScrollBars,b.scroll.scrollBar3DLighting=b.scrollBar3DLighting,b.width+=(b.scroll.scrollBarWidth=10)+(b.scroll.scrollBarPadding=2)):b.scroll.enabled=!1)},configure:function(){var h=this.chart,n=this.config,q=h.config,c=q.style,f=h.jsonData.chart||h.jsonData.map,u=h.components.colorManager,e=h.is3D?b.chart3D:b.chart2D,D,d,g=C(f.useroundedges,0);D=c.outCancolor;d=C(f.legendpadding,7);var K=M(f.legenditemfont,
c.outCanfontFamily),k=C(f.legendiconscale,1),l=Ma(f.legenditemfontsize,c.fontSize),m=M(f.legenditemfontcolor,D).replace(/^#?([a-f0-9]+)/ig,"#$1"),v=M(f.legendiconbgcolor),r=M(f.legendiconbordercolor),B=M(f.legendiconbgalpha,f.legendiconalpha,100),p=M(f.legendiconborderalpha,f.legendiconalpha,100),t=C(f.legendiconsides,4),w=C(f.legendiconborderthickness),z=C(f.legendiconstartangle,45),R=rb(M(f.legenditemhoverfontcolor,m)),O=ob[C(f.legenditemfontbold,0)]||aa,c=Ma(f.legendcaptionfontsize,c.fontSize)+
"px";n.isActive=!1;n.chartMarginTop=q.origMarginTop;n.chartMarginRight=q.origMarginRight;n.chartMarginBottom=q.origMarginBottom;n.chartMarginLeft=q.origMarginLeft;n.showLegend=C(f.showlegend,!h.dontShowLegendByDefault,1);l+="px";n.legendPos=M(f.legendposition,h.legendposition,H).toLowerCase();n.numColumns=C(f.legendnumcolumns,0);n.xL=n.yL=0;if(0>=k||5<k)k=1;n.drawCustomLegendIcon=C(f.drawcustomlegendicon,0);n.customLegendConfig={bgColor:v,borderColor:r,bgAlpha:B,borderAlpha:p,borderThickness:w,startAngle:z,
sides:t};n.legendScale=k;n.legendPadding=d;n.oriSymbolPadding=3;n.textPadding=4;n.alignLegendWithCanvas=C(f.alignlegendwithcanvas,1);n.itemStyle={color:ab(m),fontFamily:K,fontSize:l,fontWeight:O};Ya(n.itemStyle);n.itemHiddenStyle={fontFamily:K,fontSize:l,color:ab(M(f.legenditemhiddencolor,"cccccc").replace(/^#?([a-f0-9]+)/ig,"#$1")),fontWeight:O};Ya(n.itemHiddenStyle);n.title.style={fontFamily:M(f.legendcaptionfont,K),fontSize:c,color:M(f.legendcaptionfontcolor,D).replace(/^#?([a-f0-9]+)/ig,"#$1"),
fontWeight:ob[C(f.legendcaptionfontbold,1)]||aa};n.title.align=Sa[f.legendcaptionalignment&&f.legendcaptionalignment.toLowerCase()||Sa.center]||Sa.center;n.itemHoverStyle={color:ab(R.replace(/^#?([a-f0-9]+)/ig,"#$1"))};n.title.style["text-anchor"]=n.title.align;n.padding=4;q=M(f.legendbordercolor,u.getColor(e.legendBorderColor));D=C(f.legendborderalpha,100);d=C(f.legendbgalpha,100);n.backgroundColor=ab(M(f.legendbgcolor,u.getColor(e.legendBgColor)),d);n.borderColor=ab(q,D);n.borderWidth=C(f.legendborderthickness,
!g||f.legendbordercolor?1:0);n.borderRadius=C(g,0);n.shadow=!!C(f.legendshadow,1);n.symbol3DLighting=!!C(f.use3dlighting,f.useplotgradientcolor,1);n.shadow&&(n.shadow={enabled:n.shadow,opacity:fa(D,d)/100});n.reversed=!!C(f.reverselegend,0);n.style={padding:4};n.lineWidth=C(f.linethickness,2);(n.interactiveLegend=!1!==h.hasInteractiveLegend&&!!C(f.interactivelegend,1))?(n.interactiveLegend=!0,n.symbolStyle={_cursor:"hand",cursor:Q}):(n.interactiveLegend=!1,n.itemStyle.cursor="default",n.itemHoverStyle.cursor=
"inherit");n.borderRadius=C(f.legendborderradius,g?3:0);n.legendAllowDrag=!!C(f.legendallowdrag,0);n.title.text=n.title.oriText=Ba(Ga(f.legendcaption,a));n.legendScrollBgColor=rb(M(f.legendscrollbgcolor,f.scrollcolor,u.getColor("altHGridColor")));n.legendScrollBarColor=M(f.legendscrollbarcolor,q);n.legendScrollBtnColor=M(f.legendscrollbtncolor,q);n.minimiseWrappingInLegend=C(f.minimisewrappinginlegend,0);n.flatScrollBars=C(f.flatscrollbars,0);n.scrollBar3DLighting=C(f.scrollbar3dlighting,1);n.orderReversed=
!1},_drawPointLegendItem:function(){var b=this,a=b.chart,q=a.hasSubDataset,c=a.config,f=a.get(l,P),u=f.transposeAnimDuration,D=f.animType,d=f.dummyObj,f=f.animObj,K=a.components.dataset,ra=a.components.paper,ca=b.config,ua=ca.reversed,m=b.components.items||[],v=ca.legendHeight,r=ca.symbolPadding,B=ca.symbolWidth,p=ca.interactiveLegend,t=ca.textPadding||2,w=C(ca.padding,4),c=c.textDirection,S=ca.itemHiddenStyle,z=ca.itemStyle,R=ca.itemHoverStyle,O=ca.lineWidth,F=z.color,H=S&&S.color||"#CCCCCC",S=b.graphics,
E=S.itemGroup,I=ca.drawCustomLegendIcon,da=ca.customLegendConfig,Qa,Pb,U,V,$a,Z,G,L,T,ga,X,qa,Fb,sa,ma,aa,ha,W,Aa,ya,va,pa,ub,Ca,fa,ba,oa,ja,la,Ba=k.hashify,wa=function(b){var h=this.data("legendItem"),f=h.configuration.datasetObj||h.dataset,f=f.getEventArgs?f.getEventArgs(h):{};b=Ia(a.chartInstance,b);f.chartX=b.chartX;f.chartY=b.chartY;f.pageX=b.pageX;f.pageY=b.pageY;f.legendItemIndex=h.index;f.legendItemId=h.legendItemId;f.preventDefaults=function(){};g.raiseEvent("LegendItemClicked",f,a.chartInstance)},
Ga=function(b){var h=this.data("legendItem")||{},f=h.configuration.datasetObj||h.dataset,q=this.data("interactive"),f=f.getEventArgs?f.getEventArgs(h):{};b=Ia(a.chartInstance,b);var c=this.data("itemHoverStyle"),A=h.graphics&&h.graphics.legendItemText;!1!==h.dataset.visible&&q&&A&&A.attr({fill:c.color});f.chartX=b.chartX;f.chartY=b.chartY;f.pageX=b.pageX;f.pageY=b.pageY;f.legendItemIndex=h.index;f.legendItemId=h.legendItemId;g.raiseEvent("LegendItemRollover",f,a.chartInstance)},Ea=function(b){var h=
this.data("legendItem")||{},f=h.configuration.datasetObj||h.dataset,q=this.data("interactive"),f=f.getEventArgs?f.getEventArgs(h):{};b=Ia(a.chartInstance,b);var c=!1!==h.dataset.visible,A=this.data("itemStyle"),u=h.graphics&&h.graphics.legendItemText;c&&q&&u&&u.attr({fill:A.color});f.chartX=b.chartX;f.chartY=b.chartY;f.pageX=b.pageX;f.pageY=b.pageY;f.legendItemIndex=h.index;f.legendItemId=h.legendItemId;g.raiseEvent("LegendItemRollout",f,a.chartInstance)},Fa=function(a){var f=this.data("legendItem"),
n=f.dataset;this.data("interactive")&&f.legendClickFN.call(b,n,f,K);wa.call(this,a)},Ja=function(){W=.5*B;ha=L+r+W;V=T+(ma._markerYGutter||0)+r+W;Ha&&(W*=.6);ja=ta(pa.anchorSide);ya=pa.symbol=ja&&ja.split("_")||[];Aa="spoke"===ya[0]?1:0;xa={polypath:[ya[1]||2,ha,V,W,pa.startAngle,pa.spoke||Aa]};Na={cursor:z.cursor||Q,stroke:U?ub:H,fill:U?Ca:H,"stroke-width":va,ishot:p}},za,Na,Ka={},Ha,xa,Sa;Qa=ca.initialItemX||0;Pb=ca.initialItemY||0;if(!1!==ca.enabled&&ca.showLegend){E.css(z);X=0;for(qa=m.length;X<
qa;X+=1)ca=m[X],ca.index=X,pa=ca.configuration,Z=pa.type,ma=ca.config=ca.config||(ca.config={}),S=ca.graphics||(ca.graphics={}),Fb=ca.dataset,Fb.graphics&&(Fb.graphics.legendGraphics=S),ub=ma.strokeColor=pa.strokeColor||"000000",Ca=ma.fillColor=pa.fillColor||"000000",ma.interactiveLegend=pa.interactiveLegend,ma.legendBackgroundColor=pa.legendBackgroundColor?Ra({color:pa.legendBackgroundColor,alpha:20}):Ra(fb),fa=pa.anchorSide,ba=ma.drawLine=pa.drawLine,O=pa.lineWidth||O,oa=pa.lineColor||ub,L=Qa+ma._legendX+
w,T=Pb+ma._legendY-w,va=ma.strokeWidth=pa.strokeWidth||.5,ga=ma._legendH,U=!1!==Fb.visible,Fb=S.legendItemBackground,$a=S.legendItemText,sa=S.legendItemLine,aa=S.legendItemSymbol,p=M(ma.interactiveLegend,p),!p&&(z.cursor="default"),0!==ma.enabled?(la=L+v+t-2,Sa=T+(ma._legendTestY||0),G={text:ma.name,fill:U?F:H,"text-anchor":J,"vertical-align":e,cursor:z.cursor||Q,direction:c,"line-height":z.lineHeight},za=xa=null,ma.textAttr=G,$a?($a.show().animateWith(d,f,{x:la,y:Sa},u,D),$a.attr(G)):(G.x=la,G.y=
Sa,$a=S.legendItemText=ra.text(G,E).data("legendItem",ma)),Ha=!1,I&&!1!==pa.customLegendIcon?(la=da.borderColor,$a=M(da.borderAlpha),oa=da.bgColor,G=M(da.bgAlpha,"100"),fa||"line"===Z||ba||"spline"===Z?(Z=Ba(pa.rawStrokeColor),pa.rawFillColor=Ba(pa.rawFillColor),Ca=M(oa,pa.rawFillColor,ma.color),/^#/.test(Ca)&&(Ca=ab(Ca,G)),oa=M(la,Z,ma.strokeColor),oa=ab(oa,$a),ma.anchorSide=da.sides):(Z=M(pa.rawFillColor,ma.fillColor),Ca=M(oa,Z),Ca=ab(Ca,G),da.borderColor?oa=ab(da.borderColor,$a):(/rgb/.test(Z)&&
(Z=mb(Z)),oa=gb(Z,60).replace(N,na),oa=ab(oa,$a))),ma.fillColor=Ca,ma.strokeColor=oa,W=.5*B,ha=L+r+W,V=T+(ma._markerYGutter||0)+r+W,ya=(ja=ta(da.sides))&&ta(da.sides).split("_")||[],Aa="spoke"===ya[0]?1:0,xa={polypath:[ya[1]||2,ha,V,W,da.startAngle,Aa]},Na={cursor:z.cursor||Q,stroke:U?oa:H,fill:U?Ca:H,"stroke-width":C(da.borderThickness,1),ishot:p}):"line"===Z||ba?(V=T+(ma._markerYGutter||0)+r+.5*B,za={path:["M",L+r,V,"L",L+r+B,V]},Ha=!0,Ka={"stroke-width":O,stroke:U?oa:H,cursor:z.cursor||Q,ishot:p},
fa&&Ja()):fa?Ja():"line"!==Z&&(aa=S.legendItemSymbol,Z=b._getSymbolPath(L+r,T+(ma._markerYGutter||0)+r,B,B,Z),xa={path:Z.path},Na={"stroke-width":.5,stroke:U?ub:H,fill:U?Ca:H,cursor:z.cursor||Q,ishot:p}),za&&Ha?(ma.lineAttr=Ka,sa||(sa=S.legendItemLine=ra.path(E),sa.attr(za)),sa.show().animateWith(d,f,za,u,D),sa.attr(Ka).data("legendItem",ma)):sa&&sa.hide(),xa?(ma.symbolAttr=Na,aa||(aa=S.legendItemSymbol=ra.polypath(E),aa.attr(xa)),aa.show().animateWith(d,f,xa,u,D),aa.attr(Na),aa.data("legendItem",
ma)):aa&&aa.hide(),ga={x:L,y:T,width:ma._totalWidth,height:ga},sa={r:0,fill:ma.legendBackgroundColor,"stroke-width":1,stroke:"none",cursor:z.cursor||Q,ishot:p},Fb||(Fb=S.legendItemBackground=ra.rect(E),Fb.attr(ga).mouseover(Ga).mouseout(Ea).click(Fa)),Fb.show().animateWith(d,f,ga,u,D),Fb.attr(sa),Fb.data("legendItem",ca).data("interactive",p).data("itemHoverStyle",R).data("itemStyle",z)):($a&&$a.hide(),Fb&&Fb.hide(),aa&&aa.hide(),sa&&sa.hide());!q&&ua&&m.reverse()}},_getSymbolPath:function(b,a,q,
c,f){var u=["M"],e,D,d;switch(f){case "column":case "dragcolumn":case "column3d":e=.25*q;f=.5*e;D=.7*c;d=.4*c;u=u.concat([b,a+c,"l",0,-D,e,0,0,D,"z","m",e+f,0,"l",0,-c,e,0,0,c,"z","m",e+f,0,"l",0,-d,e,0,0,d,"z"]);break;case "bar":case "bar3d":e=.3*q;f=.6*q;D=c/4;d=D/2;u=u.concat([b,a,"L",b+f,a,b+f,a+D,b,a+D,"Z","M",b,a+D+d,"L",b+q,a+D+d,b+q,a+D+d+D,b,a+2*D+d,"Z","M",b,a+2*(D+d),"L",b+e,a+2*(D+d),b+e,a+c,b,a+c,"Z"]);break;case "area":case "area3d":case "areaspline":case "dragarea":D=.6*c;d=.2*c;f=
.8*c;u=u.concat([b,a+f,"L",b,a+D,b+.3*q,a+d,b+.6*q,a+D,b+q,a+d,b+q,a+f,"Z"]);break;case "pie2d":case "pie3d":case "doughnut2d":case "doughnut3d":e=.5*q;f=.9*e;q=b+e+1;c=a+e-1;b=b+e-1;a=a+e+1;u=u.concat(["M",q,c,"L",q,c-f+1,"A",f-1,f-1,0,0,1,q+f-1,c,"Z","M",b,a,"L",b,a-f,"A",f,f,0,1,0,b+f,a,"Z"]);break;case "boxandwhisker2d":u=u.concat([b,a,"L",b+q,a,b+q,a+c,b,a+c,"Z"]);break;default:u=u.concat([b,a,"L",b+q,a,b+q,a+c,b,a+c,"Z"])}return{path:u}},emptyItems:function(b,a){var q=this.components,c=q.items||
(q.items=[]),f,u,q=void 0!==a?a:c.length,e=c.splice(b,q);b=0;for(q=e.length;b<q;b+=1)for(f in c=(e[b]||(e[b]={})).graphics,c)(u=c[f])&&u.remove&&"function"===typeof u.remove&&u.remove()},removeItem:function(b){var a=this.getItems()||[],q,c,f,u=a.length;for(q=0;q<u;q++)if(c=a[q],f=c.legendItemId,b===f){Za.call(c);a.splice(q,1);break}},addItems:function(b,a,q){var c,f=this.components;c=this.lastItemId;var u=M(b.legendItemId,q.legendItemId),f=f.items||(f.items=[]);void 0!==u?(this.configureItems(u,{legendClickFN:a,
configuration:q,dataset:b}),c=u):(void 0===c?this.lastItemId=c="FCLEGEND_0":(c=(c=c.split("_"))&&c[1],this.lastItemId=c="FCLEGEND_"+ ++c),f.push({legendItemId:c,dataset:b,legendClickFN:a,configuration:q||{}}));return c},configureItems:function(b,a){var q=this.components.items,c,f,u=q.length,e,D;for(f=0;f<u&&(D=q[f],!D.dataset||(e=M(D.dataset.legendItemId,D.legendItemId),e!==b));f++);for(c in D)if(c in a)switch(c){case "configuration":this.mergeConf(a[c],D[c]);break;default:D[c]=a[c]}},mergeConf:function(b,
a){var q,c;for(q in b)c=b[q],void 0!==c&&null!==c&&(a[q]=c)},getItems:function(){return this.components.items},hide:function(){this.chart.graphics.legendGroup.hide()}},void 0,{enabled:!0,symbolWidth:12,borderRadius:1,backgroundColor:"#FFFFFF",initialItemX:0,title:{text:aa,x:0,y:0,padding:2},scroll:{},itemStyle:{}}]);FusionCharts.register("component",["toolbox","horizontaltoolbox",{init:function(b){this.config={type:b};this.components={};this.graphics={};this._configure()},_getPosition:function(){var b=
this.config.type,a=b.frame,q=b.orientation,c=b.placement,f={chart:{outer:{left:0,right:0,top:0,bottom:0},inner:{left:0,right:0,top:0,bottom:0}},canvas:{outer:{left:0,right:0,top:0,bottom:0},inner:{left:0,right:0,top:0,bottom:0}}};!b&&(b={});return a&&c&&q?f[a][c][q]:b},_configure:function(){var b,n,q=this.config,c=this.chart,f=c.jsonData.chart,u=c.config,c=u.width,u=u.height;q.scale=C(f.toolbarbuttonscale,1.15);q.width=C(f.toolbarbuttonwidth,15);q.height=C(f.toolbarbuttonheight,15);q.radius=C(f.toolbarbuttonradius,
2);q.spacing=C(f.toolbarbuttonspacing,5);q.fill=ab(M(f.toolbarbuttoncolor,"ffffff"));q.labelFill=ab(M(f.toolbarlabelcolor,"cccccc"));q.symbolFill=ab(M(f.toolbarsymbolcolor,"ffffff"));q.hoverFill=ab(M(f.toolbarbuttonhovercolor,"ffffff"));q.stroke=ab(M(f.toolbarbuttonbordercolor,"bbbbbb"));q.symbolStroke=ab(M(f.toolbarsymbolbordercolor,"9a9a9a"));q.strokeWidth=C(f.toolbarbuttonborderthickness,1);q.symbolStrokeWidth=C(f.toolbarsymbolborderthickness,1);b=q.symbolPadding=C(f.toolbarsymbolpadding,5);q.symbolHPadding=
C(f.toolbarsymbolhpadding,b);q.symbolVPadding=C(f.toolbarsymbolvpadding,b);n=q.position=M(f.toolbarposition,"tr").toLowerCase();switch(n){case "tr":case "rt":case "top right":case "right top":n="tr";break;case "br":case "rb":case "bottom right":case "right bottom":n="br";break;case "tl":case "lt":case "top left":case "left top":n="tl";break;case "bl":case "lb":case "bottom left":case "left bottom":n="bl";break;default:n="tr"}b=q.hAlign=(a+f.toolbarhalign).toLowerCase()===kb?"l":n.charAt(1);n=q.vAlign=
(a+f.toolbarvalign).toLowerCase()===H?"b":n.charAt(0);q.hDirection=C(f.toolbarhdirection,"r"===b?-1:1);q.vDirection=C(f.toolbarvdirection,"b"===n?-1:1);q.vMargin=C(f.toolbarvmargin,6);q.hMargin=C(f.toolbarhmargin,10);q.x=C(f.toolbarx,"l"===b?0:c);q.y=C(f.toolbary,"t"===n?0:u)},_manageToolBoxPosition:function(b,a){var q,c,f=0,u=this.components;for(q in u)u.hasOwnProperty(q)&&(c=u[q],c=c._spaceOccupied(),f=fa(f,c.height));f>a&&this._postSpaceManager();return{top:0,bottom:f,left:0,right:0}},addItem:function(b){var a,
q,c,f=this.components;for(a=0;a<b.length;a+=1)c=b[a],q=f[c.name]=new (FusionCharts.register("component",["toolButton","button"])),q.init(this,c),q.chart=this.chart},draw:function(){var b,a,q=this.components,c=this.x,f=this.y;for(b in q)q.hasOwnProperty(b)&&(a=q[b],a.draw(c,f))},_postSpaceManager:function(){}}]);FusionCharts.register("component",["toolBox","verticalToolBox",{},"horizontaltoolbox"]);FusionCharts.register("component",["toolButton","button",{init:function(){this.config={};this.components=
{};this.graphics={};this._configure.apply(this,arguments)},_configure:function(b,a){var q=b.config,c=this.config;c.type=a.type;c.scale=C(a.scale,q.scale);c.width=C(a.width,q.width);c.height=C(a.height,q.height);c.radius=C(a.radius,q.radius);c.spacing=C(a.spacing,q.spacing);c.fill=ab(M(a.fill,q.fill));q.x=C(a.x,q.x);q.y=C(a.y,q.y)},draw:function(){this["_draw"+this.config.type]()},_drawScroller:function(){var b=this.chart,a=b.components,q=b.config,c=b.jsonData.chart,f=a.paper,u=b.graphics,e=a.xAxis["0"]||
{},D=e.config||{},d=D.rawAttr.axisLineThickness,a=q.scrollOptions||{},K=q.canvasTop,l=q.canvasLeft,ua=q.canvasWidth,m=q.canvasHeight,v=q.canvasBorderWidth,D=v||(D.showLine?d:0),r=v||d,d=v||d,c=q.useRoundEdges||(q.useRoundEdges=C(c.useroundedges,0)),B,p,t,w,z,H,R,O,E,I,M,ia=u.scroller,v=u.datasetGroup,da;a.enabled&&(da=u.scroll=u.scroll||f.group("scroll").insertAfter(v),v=a.scrollRatio,w=C(a.startPercent),z=a.viewPortMax,H=a.viewPortMin,p=a.vxLength,Fa(p),R=a.showButtons,O=a.height,E=a.padding,I=a.color,
M=a.flatScrollBars,p=a.windowedCanvasWidth=e.getAxisPosition(p),B=a.fullCanvasWidth=e.getAxisPosition(z-H)-p,t=wa(w*B),ia||(ia=u.scroller=f.scroller(l-r,K+m+D+E-!!D,ua+r+d,O,!0,{showButtons:R,displayStyleFlat:M,scrollRatio:v,scrollPosition:w},da).data("fullCanvasWidth",B).data("windowedCanvasWidth",p).attr({"scroll-display-style":M,fill:I,r:c&&2||0}).scroll(function(a){var f=q.viewPortConfig;t=-wa(a*B);f.x=-t/f.scaleX;k.chartAPI.mscolumn2d._drawDataset.call(b);e.draw()})),function(){var a;F.eve.on("raphael.scroll.start."+
ia.node.id,function(f){a=f;g.raiseEvent("scrollstart",{scrollPosition:f},b.chartInstance)});F.eve.on("raphael.scroll.end."+ia.node.id,function(f){g.raiseEvent("scrollend",{prevScrollPosition:a,scrollPosition:f},b.chartInstance)})}());this._finalizeScrollPlots();return a.enabled},_finalizeScrollPlots:function(){var b=this.chart,a=b.config,q=b.container,c=b.graphics,f=c.scroller,u=c.datasetGroup,e=c.datalabelsGroup,D=c.trackerGroup,d,K={},l,ua,m=b.components.xAxis["0"]||{};l=a.scrollOptions||{};var r=
C(l.startPercent),B=l.fullCanvasWidth,p,t=a.animation,w=l.startPercent,a=[fa(0,a.canvasLeft),fa(0,a.canvasTop),fa(1,a.canvasWidth),fa(1,a.canvasHeight)];l.enabled&&(u.attr({"clip-rect":a}),e.attr({"clip-rect":a}),D.attr({"clip-rect":a}),l=function(a){var n=c.canvas,q=d.left,u=d.top,e={pageX:0,pageY:0},D=a.state,e=ib&&k.getTouchEvent(a)||e;a=a.originalEvent;q=(a.clientX||a.pageX||e.pageX)-q;u=(a.clientY||a.pageY||e.pageY)-u;switch(D){case J:ua=n.isPointInside(q,u);K.ox=ua&&q||null;if(!ua)return!1;
K.prevScrollPosition=f.attrs["scroll-position"];g.raiseEvent("scrollstart",{scrollPosition:K.prevScrollPosition},b.logic.chartInstance);break;case v:g.raiseEvent("scrollend",{prevScrollPosition:K.prevScrollPosition,scrollPosition:K.scrollPosition},b.logic.chartInstance);ua=!1;K={};break;default:ua&&(n=q-K.ox,K.ox=q,K.scrollPosition=f.attrs["scroll-position"]-n/B,f.attr({"scroll-position":K.scrollPosition}))}},ib&&(d=Ka(q),q&&(za(q,"pointerdrag",l),Ua(q,"pointerdrag",l))),0<r&&(p=-wa(r*B),u&&u.transform(["T",
p,0]),D&&D.transform(["T",p,0]),m.setOffset&&m.setOffset(p),t&&w?b.animationCompleteQueue.push({fn:function(){e&&e.transform(["T",p,0])},scope:b}):e&&e.transform(["T",p,0])))},_spaceOccupied:function(){var b=this.config;return{x:b.x,y:b.y,width:b.width,height:b.height}}}]);xa("base",{creditLabel:!1,setChartMessage:function(b,a,q){var u=this.components||(this.components={}),f=this.chartInstance,e=f.options,D=f.args,d=this.config||(this.config={}),g=this.linkedItems&&this.linkedItems.smartLabel||f.jsVars.smartLabel,
K=k.getImageURL(void 0!==b?b:e.dataEmptyMessage),l,ua;q&&!this.linkedItems?this.linkedItems={container:q}:q=this.linkedItems.container;l=d.prevWidth=q.offsetWidth;ua=d.prevHeight=q.offsetHeight;b=d.height=Number(ua);f=d.width=Number(l);d.hasChartMessage=!0;u.paper?u.paper.setSize(l,ua):(q=u.paper=new F(q,l,ua),q.setConfig("stroke-linecap",c));K.image?(b=K.string,a=a?{imageHAlign:M(a._chartMessageImageStyle.imageHAlign,e.baseChartMessageImageHAlign).toLowerCase(),imageVAlign:M(a._chartMessageImageStyle.imageVAlign,
e.baseChartMessageImageVAlign).toLowerCase(),imageAlpha:C(a._chartMessageImageStyle.imageAlpha,e.baseChartMessageImageAlpha),imageScale:C(a._chartMessageImageStyle.imageScale,e.baseChartMessageImageScale)}:{imageHAlign:M(D.dataEmptyMessageImageHAlign,e.baseChartMessageImageHAlign).toLowerCase(),imageVAlign:M(D.dataEmptyMessageImageVAlign,e.baseChartMessageImageVAlign).toLowerCase(),imageAlpha:C(D.dataEmptyMessageImageAlpha,e.baseChartMessageImageAlpha),imageScale:C(D.dataEmptyMessageImageScale,e.baseChartMessageImageScale)},
d.chartMessageType="image"):(a=a?{"font-family":a._chartMessageStyle.fontFamily||e.baseChartMessageFont,"font-size":a._chartMessageStyle.fontSize||e.baseChartMessageFontSize,fill:a._chartMessageStyle.color||e.baseChartMessageColor}:{"font-family":D.dataEmptyMessageFont||e.baseChartMessageFont,"font-size":D.dataEmptyMessageFontSize||e.baseChartMessageFontSize,fill:D.dataEmptyMessageColor||e.baseChartMessageColor},g.setStyle(a),e=g.getSmartText(Ba(K.string),f,b),b={text:e.text,x:f/2,y:b/2},d.chartMessageType=
"text");d.chartMessageAttr=b;d.chartMessageStyle=a},_hideChartMessage:function(){var b=this.config,a=this.components.chartMessage.graphics,q;"image"===b.chartMessageType&&!a.backgroundImage&&a.backgroundElement&&(b.stopImageDraw=!0);b&&(b.hasChartMessage=!1);for(q in a)a[q].hide?a[q].hide():a[q][0]&&a[q][0].hide()},drawChartMessage:function(){var b=this.config,a=this.components,q=a.paper,c,a=a.chartMessage||(a.chartMessage={}),a=a.graphics||(a.graphics={});c=this.graphics||(this.graphics={});var f=
ja(b.chartMessageAttr,b.chartMessageStyle);c=c.messageGroup||(c.messageGroup=q.group("messageGroup"));this._hideChartMessage();b.hasChartMessage=!0;"image"===b.chartMessageType?this._drawBackground(b.chartMessageAttr,b.chartMessageStyle):a.message||"text"!==b.chartMessageType?(a.message=a.message.attr(f),a.message.show()):a.message=q.text(f,c);this._drawCreditLabel()},dispose:function(){var b=this.components,b=b&&b.paper,a=this.linkedItems&&this.linkedItems.eventListeners,q=a&&a.length;for(this._clearTimers&&
this._clearTimers();q--;)a[q].unlisten();this._removeWaitingJobs();b&&(b.clear(),b.remove());this.chartInstance&&delete this.chartInstance.apiInstance;Za.call(this)},_removeWaitingJobs:function(){var b=this.jobList,a,q,c,f;for(f in b)for(c=b[f],q=c.length,a=0;a<q;a++)D.removeJob(c[a])},_drawBackground:function(b,n){var q=this,c=q.components,f=q.graphics,u=q.jsonData&&q.jsonData.chart||{},D=c.paper,d=b?c.chartMessage:c.background,K=d.graphics,c=K.backgroundElement,ra=K.borderElement,d=d.config||{},
ca=q.config,ua=ca.width,m=ca.height,v,r,p,t,w,z,S,F=q.get&&q.get(l,P)||{},R=F.animType,O=F.animObj,E=F.dummyObj,eb=F.duration,Vb,ia,da=b?f.messageGroup:f.backgroundGroup,Qa=d.borderWidth||0,f=d.borderRadius,F=d.borderDashStyle,Q=d.borderColor,U=d.bgSWF=M(b,u.bgimage,u.bgswf),V=d.bgSWFAlpha=C(n&&n.imageAlpha,u.bgimagealpha,u.bgswfalpha,100),J=d.imgClipRect=Qa+","+Qa+","+(ua-2*Qa)+","+(m-2*Qa),Z=M(u.bgimagedisplaymode,I).toLowerCase(),G=(n&&la(n.imageVAlign)||la(u.bgimagevalign,a)).toLowerCase(),L=
(n&&n.imageHAlign||u.bgimagehalign||a).toLowerCase(),N=d.bgImageScale=C(n&&n.imageScale,u.bgimagescale,100),u=d.containerBackgroundColor=k.getContainerBackgroundColor(q);D.canvas.style.backgroundColor=u;"tile"==Z||"fill"==Z||"fit"==Z?(G!=e&&G!=B&&G!=H&&(G=B),L!=kb&&L!=B&&L!=pb&&(L=B)):(G!=e&&G!=B&&G!=H&&(G=e),L!=kb&&L!=B&&L!=pb&&(L=kb));d.bgSWFAlpha=V;d.bgImageVAlign=G;d.bgImageHAlign=L;d.backgroundColor=d=!b&&q._getBackgroundCosmetics();u={x:Qa,y:Qa,width:ua-2*Qa,height:m-2*Qa,stroke:"none",fill:Ra(d)};
c?(c.animateWith(E,O,{x:Qa,y:Qa,width:ua-2*Qa,height:m-2*Qa},eb,R),c.attr({stroke:"none",fill:Ra(d)})):K.backgroundElement=D.rect(u,da);u={x:Qa/2,y:Qa/2,width:ua-Qa,height:m-Qa,stroke:Q,"stroke-width":Qa,"stroke-dasharray":F,fill:"none",r:f||0};ra||b?b||(ra.animateWith(E,O,{x:Qa/2,y:Qa/2,width:ua-Qa,height:m-Qa,r:f||0},eb,R),ra.attr({stroke:Q,"stroke-width":Qa,"stroke-dasharray":F,fill:"none"})):K.borderElement=D.rect(u,da);if(U)v=new Va,p=r=1,v.onload=function(){if(ca.stopImageDraw)ca.stopImageDraw=
!1;else{!K.backgroundImage&&(K.backgroundImage=[]);if(K.backgroundImage)for(ia=0,Vb=K.backgroundImage.length;ia<Vb;ia++)K.backgroundImage[ia].hide();t=Ea(Z,G,L,N,Qa,ua,m,v);t["clip-rect"]=J;if(t.tileInfo)for(r=t.tileInfo.xCount,p=z=t.tileInfo.yCount,w=t.y,delete t.tileInfo,S=0;r&&t.width&&t.height;)--z,K.backgroundImage[S]||(K.backgroundImage[S]=D.image(U,da)),K.backgroundImage[S].show(),K.backgroundImage[S].animateWith(E,O,t,eb,R),K.backgroundImage[S].attr({src:U}).css({opacity:.01*V}),t.y+=t.height,
0===z&&(z=p,--r,t.x+=t.width,t.y=w),S++;else K.backgroundImage[0]||(K.backgroundImage[0]=D.image(U,da),K.backgroundImage[0].attr(t)),K.backgroundImage[0].show(),K.backgroundImage[0].animateWith(E,O,t,eb,R),K.backgroundImage[0].css({opacity:.01*V}).attr({src:U,visibility:Pa,"clip-rect":J});g.raiseEvent("BackgroundLoaded",{url:U,bgImageAlpha:100*V,bgImageDisplayMode:Z,bgImageVAlign:G,bgImageHAlign:L,bgImageScale:N,imageWidth:v.width,imageHeight:v.height},q.chartInstance)}},v.onerror=function(b){g.raiseEvent("BackgroundLoadError",
{url:U,bgImageAlpha:100*V,error:b,bgImageDisplayMode:Z,bgImageVAlign:G,bgImageHAlign:L,bgImageScale:N},q.chartInstance)},v.src=U;else if(K.backgroundImage)for(ia=0,Vb=K.backgroundImage.length;ia<Vb;ia++)K.backgroundImage[ia].hide()},redraw:function(){var b=this.graphics.dummyObj;b&&b.stop(void 0,!0,!0);this.draw&&this.draw()},_drawCreditLabel:function(){var b=this.creditLabel,a=this.config.height,q=this.graphics,c=q.creditLabel,f=q.creditGroup,u=q.parentGroup||q.messageGroup,e=this.components.paper,
D={href:k.CREDIT_HREF,text:k.CREDIT_STRING};f||(f=q.creditGroup=e.group("creditgroup"));u&&f.insertAfter(u);a={text:D.text,x:6,y:a-4,"vertical-align":H,"text-anchor":J,fill:"rgba(0,0,0,0.5)",title:D.title||aa};q={fontSize:9,fontFamily:"Verdana,sans",cursor:Q,_cursor:"hand"};b&&(c?c.attr(a).css(q):c=this.graphics.creditLabel=e.text(a,q,f).click(function(){try{z.open(D.href)}catch(b){(z.top||z).location.href=D.href}}))},eiMethods:{hideChartMessage:function(){var b=this.apiInstance;b._show.apply(b);
b._hideChartMessage(b)}}});xa("mscartesian",{standaloneInit:!1,tooltipConstraint:"chart",annotationInteractionEvents:!0,useScaleRecursively:!0,init:function(b,a,q,c){q=this.chartInstance||q;var f=q.jsVars,u=a.colorrange,e;a.chart=a.chart||a.graph||a.map||{};this.jsonData=a;a=this.components||(this.components={});a.background||(a.background={graphics:{},config:{}});a.canvas||(a.canvas={graphics:{},config:{}});e=FusionCharts.register("component",["caption","caption"]);a.caption||(a.caption=new e);a.caption.init();
a.caption.chart=this;e=FusionCharts.register("component",["caption","subCaption"]);a.subCaption||(a.subCaption=new e);a.subCaption.init();a.dataset||(a.dataset=[]);this.linkedItems={container:b,smartLabel:f.smartLabel};a.colorManager=new k.colorManager(this);a.numberFormatter=new Cb(this);u&&(a.colorRange=new k.ColorRange(this));this._checkInvalidData()?k.raiseEvent("nodatatodisplay",{},q,[q.id]):(this._createLegend(),this._createGradientLegend(),this.configure(),this.disposeChartStyleSheet(),this._createAxes(),
this._feedAxesRawData(),this.config.realtimeEnabled&&(q=FusionCharts.get("component",["manager","alert"]))&&(a.alertManager=new q,a.alertManager.init(this),a.alertManager.configure()),this._createDatasets(),this._createQuadrant&&this._createQuadrant(),this.draw(),this.setChartEvents());c({hasRendered:!0,container:b})},_checkInvalidData:function(){var b=this.jsonData,a=this.chartInstance;if(!(this.isWidget||this.isMap||b.data&&0!==b.data.length||b.dataset||b.value||b.lineset||b.annotations||b.category||
b.tasks||b.process||b.axis))return this.setChartMessage(),this.drawChartMessage(),a.__state.dataReady=!1,a.jsVars.hasNativeMessage=!0,a.jsVars.drawCount+=1,!0},_createToolBox:function(){var b,a,q,c,f,u,e,D;f=!!z.btoa;var d=this,g=d.jsonData.chart,K=C(g.exportshowmenuitem),l=g.exportformats,m=d.chartMenuTools,g=m.get,v=m.set,m=this.components,r=d.config,B=r.exportOption.enabled;b=m.chartMenuBar;var r=r.printOption.enabled,p={PNG:"Export As PNG",JPG:"Export As JPG",PDF:"Export As PDF",SVG:"Export As SVG",
XLS:"Export As XLS"},t={},w=[],S;if(!b||!b.drawn){b=m.tb||(m.tb=new (FusionCharts.register("component",["toolbox","toolbox"])));D=b.init({graphics:d.graphics||(d.graphics={}),chart:d,components:m});m.toolBoxAPI=q=m.toolBoxAPI||(m.toolBoxAPI=b.getAPIInstances(b.ALIGNMENT_HORIZONTAL));c=q.SymbolWithContext;a=q.SymbolStore;u=q.ComponentGroup;e=q.Toolbar;b.idCount=b.idCount||0;b.pId=D;q=b.getDefaultConfiguration();a.register("ContextIcon",function(b,a,h){var f=2*h;h=wa(f/4);var n=.7*wa(f/2),f=b-n;b+=
n;n=a+h;h=a-h;return["M",f,a,"L",b,a,"M",f,n,"L",b,n,"M",f,h,"L",b,h]});a=new c("ContextIcon",b.idCount++,D);c=a.getListRefernce();if(B&&0!==K){if(l)for(K=l.split("|"),t=0,B=K.length;t<B;t++)l=K[t].split("="),S=l[0].toUpperCase(),p[S]&&(p[S]=l[1]);K=function(b){return function(){k.exportChart.call(d,b)}};for(S in p)if("XLS"!==S||f)t={},t[p[S]]={handler:K({exportformat:S}),action:"click"},w.push(t);v(w)}r&&v([{Print:{handler:function(b){d.chartInstance.print.call(d.chartInstance,b)},action:"click"}}]);
c.appendAsList(g());f=new u(b.idCount++,D);f.setConfiguaration({buttons:q,group:{fill:fb,borderColor:fb}});f.addSymbol(a);b=m.chartMenuBar=new e(b.idCount++,b.pId);b.addComponent(f)}},chartMenuTools:function(){var b=[];return{get:function(){return b},set:function(a){var q,c=a.length||0;for(q=0;q<c;q+=1)b.push(a[q])},reset:function(a,q){var c=q.components.chartMenuBar;c&&(c.drawn=!1);b.length=0;a&&(a.idCount=0,a.clean())},update:function(b,a,h){var f=h.components.toolBoxAPI.SymbolWithContext,c=h.components.chartMenuBar.componentGroups,
u,e,D,d,g;h=0;for(D=c.length;h<D;h++)for(e=c[h],e=e.symbolList||[],d=0,g=e.length;d<g;d++)e[d]instanceof f&&(u=e[d],u=u.getListRefernce().getFirstContainer().atomicLists);u=u||[];h=0;for(D=u.length;h<D;h++)if(f=u[h],f.name===b){f.updateName(a);break}}}}(),getConfig:function(b){return b?this.config[b]:this.config},get:function(b,a){var q=this[b];return a?q&&q[a]:q},disposeChartStyleSheet:function(){var b=this.components.paper;b&&b.cssClear()},createChartStyleSheet:function(){this.components.paper.cssRender()},
configure:function(){var h,n,q,c=this.components,f=this.jsonData,u,e=this.chartInstance,D=c.colorManager,d=this.is3D,g=d?b.chart3D:b.chart2D,K=this.isBar,l,m;l=!1;var v=c.legend,r={linear:"linear",easein:"easeIn",easeout:"easeOut",easeinout:"easeInOut",backin:"backIn",backout:"backOut",elastic:"elastic",bounce:"bounce"};f.chart=f.chart||f.graph||f.map||{};delete f.map;delete f.graph;u=f.chart;!u&&(u=f.chart={});c.colorRange||(c.colorRange=new k.ColorRange(this));f=this.config||(this.config={});this.__setDefaultConfig();
X(u,f);f.snapLiterals={};f.viewPortConfig={scaleY:1,scaleX:1,x:0,y:0};d&&(K?(f.xDepth=5,f.yDepth=5):(f.xDepth=10,f.yDepth=10),f.showCanvasBase=K=!!C(u.showcanvasbase,1),f.canvasBasePadding=C(u.canvasbasepadding,2),f.canvasBaseDepth=K?C(u.canvasbasedepth,10):0,f.canvasBgDepth=C(u.canvasbgdepth,3));c.colorManager&&c.colorManager.configure();f.placeAxisLabelsOnTop=C(u.placexaxislabelsontop,0);f.enableAnimation=K=C(u.animation,u.defaultanimation,1);c=C(u.transposeanimation,0);K=K?1E3*C(u.animationduration,
1):0;c=c?1E3*C(u.transposeanimduration,.2):0;f.animationObj&&(l=!0);f.animationObj=c={initAnimDuration:K,transposeAnimDuration:c};c.duration=l||void 0!==c.duration?c.transposeAnimDuration:c.initAnimDuration;for(m in r)m===M(u.animationeffect)&&(f.animationeffect=r[m]);f.showToolTip=C(u.showtooltip,1);f.exportOption={enabled:C(u.exportenabled,0),bgcolor:e.jsVars.transparent||0===C(e.options.containerBackgroundOpacity,1)?a:e.options.containerBackgroundColor||"#ffffff",bgalpha:(e.jsVars.transparent?
0:C(e.options.containerBackgroundOpacity,1))+a,exporttargetwindow:M(u.exporttargetwindow,Ja?"_blank":"_self"),exportaction:u.exportaction&&"save"===u.exportaction.toString().toLowerCase()&&"save"||"download",exportfilename:M(u.exportfilename,"FusionCharts"),exporthandler:M(u.html5exporthandler,u.exporthandler,oa),exportparameters:M(u.exportparameters,a),exportformat:M(u.exportformat,"PNG"),exportcallback:M(u.exportcallback,a),exportwithimages:C(u.exportwithimages,1),exportatclientside:C(u.exportatclientside,
0)};f.printOption={enabled:C(u.printshowbutton,u.showprintmenuitem,0)};f.chartMenuOptions={position:h=M(u.toolbarposition,"tr").toLowerCase(),hAlign:n=(a+u.toolbarhalign).toLowerCase()===kb?"l":h.charAt(1),vAlign:q=(a+u.toolbarvalign).toLowerCase()===H?"b":h.charAt(0),hDirection:C(u.toolbarhdirection,"r"===n?-1:1),vDirection:C(u.toolbarvdirection,"b"===q?-1:1),vMargin:C(u.toolbarvmargin,6),hMargin:C(u.toolbarhmargin,10),x:C(u.toolbarx,"l"===n?0:f.width),y:C(u.toolbary,"t"===q?0:f.height)};h=f.style=
{};f.textDirection="1"===u.hasrtltext?"rtl":aa;h.inCanfontFamily=n=M(u.basefont,"Verdana,sans");h.inCanfontSize=q=Ma(u.basefontsize,10);h.inCancolor=e=M(u.basefontcolor,D.getColor(g.baseFontColor));h.outCanfontFamily=M(u.outcnvbasefont,n);h.fontSize=l=Ma(u.outcnvbasefontsize,q);h.outCanfontSize=l+qb;h.outCancolor=M(u.outcnvbasefontcolor,e).replace(/^#? ([a-f0-9]+)/ig,"#$1");h.baseFontSize=q;h.inCanfontSize=q+qb;h.inCancolor=e.replace(/^#? ([a-f0-9]+)/ig,"#$1");h.inCanvasStyle=l={fontFamily:n,fontSize:q,
color:e};h.inCanLineHeight=l=Ya(l);m=(m=Ga(u.valuebordercolor,a))?ab(m,C(u.valueborderalpha,u.valuealpha,100)):a;f.showBorder=C(u.showborder,d?0:1);f.borderWidth=fa(f.showBorder?C(u.borderthickness,1):0,0);f.valuefontbold=C(u.valuefontbold,f.valuefontbold);f.dataLabelStyle=d={fontFamily:M(u.valuefont,n),fontSize:M(u.valuefontsize,parseInt(q,10))+qb,lineHeight:l,color:ab(M(u.valuefontcolor,e),C(u.valuefontalpha,u.valuealpha,100)),fontWeight:f.valuefontbold?p:W,fontStyle:C(u.valuefontitalic)?"italic":
W,border:m||u.valuebgcolor?C(u.valueborderthickness,1)+"px solid":aa,borderColor:m,borderThickness:C(u.valueborderthickness,1),borderPadding:C(u.valueborderpadding,2),borderRadius:C(u.valueborderradius,0),backgroundColor:u.valuebgcolor?ab(u.valuebgcolor,C(u.valuebgalpha,u.valuealpha,100)):a,borderDash:C(u.valueborderdashed,0)?ba(C(u.valueborderdashlen,4),C(u.valueborderdashgap,2),C(u.valueborderthickness,1)):"none"};Ya(d);f.orphanStyles={defaultStyle:{style:ja({},h.inCanvasStyle)},connectorlabels:{style:ja({},
f.dataLabelStyle)},vyaxisname:{style:ja({},h.inCanvasStyle)}};f.legendPosition=M(u.legendposition,H);f.logoURL=la(u.logourl);f.logoPosition=M(u.logoposition,"tl").toLowerCase();f.logoAlpha=C(u.logoalpha,100);f.logoLink=la(u.logolink);f.logoScale=C(u.logoscale,100);f.logoLeftMargin=C(u.logoleftmargin,0);f.logoTopMargin=C(u.logotopmargin,0);f.minChartWidthPercent=C(u.minchartwidth,50)/100;f.minChartHeightPercent=C(u.minchartheight,50)/100;f.minCanvasWidthPercent=C(u.mincanvaswidth,60)/100;f.minCanvasHeightPercent=
C(u.mincanvasheight,30)/100;this._parseBackgroundCosmetics();this.components.caption.configure();this._parseCanvasCosmetics();f.origMarginTop=C(u.charttopmargin,this.chartTopMargin,15);f.origMarginLeft=C(u.chartleftmargin,this.chartLeftMargin,15);f.origMarginBottom=C(u.chartbottommargin,this.chartBottomMargin,15);f.origMarginRight=C(u.chartrightmargin,this.chartRightMargin,15);g=M(u.zeroplanecolor,u.divlinecolor,D.getColor(g.divLineColor));D=M(u.zeroplanealpha,u.divlinealpha,D.getColor("divLineAlpha"));
f.zeroPlaneColor=ab(g,D);f.zeroPlaneBorderColor=ab(M(u.zeroplanebordercolor,g),C(u.zeroplaneshowborder,1)?D:0);f.zeroPlaneShowBorder=C(u.zeroplaneshowborder,1);f.dataStreamURL=Ba(u.datastreamurl);f.realtimeEnabled=D=C(u.realtimeenabled,this.isRealTime);f.showLegend=C(u.showlegend,this.showLegend,1);f.link=u.clickurl;f.annRenderDelay=1E3*C(u.annrenderdelay,0);f.transposeAxis=C(this.transposeAxis,u.transposeaxis,0);f.useEllipsesWhenOverflow=C(u.useellipseswhenoverflow,u.useellipsewhenoverflow,1);this.chartMenuTools.reset(this.components.tb,
this);f.gLegendPadding=C(u.legendpadding,10);D&&this._realTimeConfigure();this._setToolTipOptions();v.configure();this.linkedItems.linkClickFN=yb(this.jsonData,this.chartInstance);this._createConfigurableComponents()},_createConfigurableComponents:function(){var b=this.config,a=this.components,c;b.realtimeEnabled&&b.usemessagelog&&(b=FusionCharts.get("component",["logger","message"]))&&(c=a.messageLogger,c||(a.messageLogger=new b,a.messageLogger.init(this)),a.messageLogger.configure())},_parseBackgroundCosmetics:function(){var b=
this.is3D,a=this.components.background.config,c=this.components.colorManager,u=this.jsonData.chart,f;f=a.showBorder=C(u.showborder,this.showBorder,b?0:1);a.borderWidth=f=fa(f?C(u.borderthickness,1):0,0);a.borderRadius=a.borderRadius=C(u.borderradius,0);a.borderDashStyle=a.borderDashStyle=C(u.borderdashed,0)?ba(C(u.borderdashlen,4),C(u.borderdashgap,2),f):"none";a.borderAlpha=M(u.borderalpha,b?"100":c&&c.getColor("borderAlpha"));a.borderColor=a.borderColor=ab(M(u.bordercolor,b?"#666666":c&&c.getColor("borderColor")),
a.borderAlpha)},_parseCanvasCosmetics:function(){var a,n,c=this.config;n=this.components;var u=n.canvas.config,f=this.jsonData.chart;n=n.colorManager;var e,D=this.is3D?b.chart3D:b.chart2D,d=u.isRoundEdges=C(f.useroundedges,0);a=C(f.showxaxisline,f.showyaxisline,f.showaxislines,0)?0:1;u.canvasBorderRadius=C(f.plotborderradius,d?2:0);a=u.showCanvasBorder=!!C(f.showcanvasborder,a,void 0,d?0:1);e=u.oriCanvasBorderThickness=fa(C(f.canvasborderthickness,d?0:C(this.canvasborderthickness,2),0));u.canvasBorderWidth=
this.is3D?0:a?e:0;u.canvasBorderColor=ab(M(f.canvasbordercolor,n.getColor("canvasBorderColor")),M(f.canvasborderalpha,n.getColor("canvasBorderAlpha")));a=u.canBGAlpha=M(f.canvasbgalpha,n.getColor("canvasBgAlpha"));u.canBGColor={FCcolor:{color:M(f.canvasbgcolor,n.getColor(D.canvasBgColor)),alpha:M(f.canvasbgalpha,100),angle:M(f.canvasbgangle,0),ratio:M(f.canvasbgratio)}};n=u.shadow=C(f.showshadow,d,0)&&d?{enabled:!0,opacity:a/100}:0;u.shadowOnCanvasFill=n&&n.enabled;c.origMarginTop=C(f.charttopmargin,
15);c.origMarginLeft=C(f.chartleftmargin,15);c.origMarginBottom=C(f.chartbottommargin,15);c.origMarginRight=C(f.chartrightmargin,15);c.origCanvasLeftMargin=C(f.canvasleftmargin,0);c.origCanvasRightMargin=C(f.canvasrightmargin,0);c.origCanvasTopMargin=C(f.canvastopmargin,0);c.origCanvasBottomMargin=C(f.canvasbottommargin,0);u.canvasPadding=C(f.canvaspadding,0);u.origCanvasTopPad=C(f.canvastoppadding,0);u.origCanvasBottomPad=C(f.canvasbottompadding,0);u.origCanvasLeftPad=C(f.canvasleftpadding,0);u.origCanvasRightPad=
C(f.canvasrightpadding,0)},_preDraw:function(){this.config.realtimeEnabled&&this._setRealTimeCategories&&this._setRealTimeCategories();this._setAxisValuePadding();this._setAxisLimits()},_manageSpace:function(){var b=this.components.canvas.config,a=this.linkedItems.container,c=this.config,u,f,e,D,d,g,K,k,l,m,v;c.width=u=a.offsetWidth;c.height=v=a.offsetHeight;c.minChartHeight=l=c.minChartHeightPercent*v;c.minChartWidth=m=c.minChartWidthPercent*u;c.minCanvasWidth=a=c.minCanvasWidthPercent*m;c.minCanvasHeight=
f=c.minCanvasHeightPercent*l;c.marginTop=e=c.origMarginTop;c.marginLeft=D=c.origMarginLeft;c.marginBottom=d=c.origMarginBottom;c.marginRight=g=c.origMarginRight;c.canvasMarginTop=c.origCanvasTopMargin;c.canvasMarginLeft=c.origCanvasLeftMargin;c.canvasMarginBottom=c.origCanvasBottomMargin;c.canvasMarginRight=c.origCanvasRightMargin;c.canvasHeight=K=c.height-c.marginTop-c.marginBottom;c.canvasWidth=k=c.width-c.marginLeft-c.marginRight;c.availableHeight=K-f;c.availableWidth=k-a;K<l&&(K=v-l,c.canvasHeight=
l,v=e+d,c.marginTop=K*e/v,c.marginBottom=K*d/v,c.availableHeight=l-f);k<m&&(K=u-m,v=g+D,c.canvasWidth=m,c.marginLeft=K*D/v,c.marginRight=K*g/v,c.availableWidth=m-a);c.canvasLeft=c.marginLeft;c.canvasTop=c.marginTop;b.canvasPaddingLeft=Ta(b.origCanvasLeftPad,wa(.1*c.height));b.canvasPaddingRight=Ta(b.origCanvasRightPad,wa(.1*c.height));b.canvasPaddingTop=Ta(b.origCanvasTopPad,wa(.1*c.height));b.canvasPaddingBottom=Ta(b.origCanvasBottomPad,wa(.1*c.height));this._spaceManager()},_postSpaceManagement:function(){var b=
this.config,a=this.components,c=a.xAxis&&a.xAxis[0],u=a.yAxis&&a.yAxis[0],f=a.legend,e=b.xDepth,D=a.canvas.config,a=D.canvasBorderWidth,d=D.canvasPadding||0,g=D.canvasPaddingLeft,K=D.canvasPaddingRight,k=D.canvasPaddingTop,D=D.canvasPaddingBottom;c&&c.setAxisDimention({x:b.canvasLeft+(e||0)+fa(g,d),y:b.canvasBottom+(b.shift||0)+a,opposite:b.canvasTop-a,axisLength:b.canvasWidth-(e||0)-fa(g,d)-fa(K,d)});c&&this._allocateXAxisLabelSpace(c);u&&u.setAxisDimention({x:b.canvasLeft-a,y:b.canvasTop+k,opposite:b.canvasRight+
a,axisLength:b.canvasHeight-k-D});c&&c.shiftLabels(-e,0);f.postSpaceManager();this._adjustCanvasPadding()},_allocateXAxisLabelSpace:function(b){var a=this.config,c=b.getAxisEndLabelDisplaySpace();b=c.left;var u=c.right,f=c.top,c=c.bottom,e=a.availableWidth,D=a.availableHeight,d=a.canvasLeft,g=a.canvasRight,K=a.canvasTop,k=a.canvasBottom,l=a.width,m=a.height,v=function(b,a){return b<a&&0<a?a-b:0};f+c>D&&(a=f+c,f=D*f/a,c=D*c/a);b+u>e&&(a=b+u,b=e*b/a,u=e*u/a);b=v(d,b);u=v(l-g,u);f=v(K,f);c=v(m-k,c);
this._allocateSpace({left:b,right:u,top:f,bottom:c})},_animCallBack:function(){var b=this.config;b.animationStarted&&(g.raiseEvent("internal.animationComplete",{},this.chartInstance),b.animationStarted=!1)},_setAnimDuration:function(){var b=this.config.animationObj;b&&(b.duration=b.transposeAnimDuration)},_setDataLabelStyle:function(){var b=this.config.dataLabelStyle;this.graphics.datalabelsGroup.css({fontFamily:b.fontFamily,fontSize:b.fontSize,fontWeight:b.fontWeight,fontStyle:b.fontStyle})},_updateVisuals:function(){var b=
this.linkedItems.container,a=this.components,q=a.paper,u=a.tooltip,f=this.chartInstance,e=this.get(l,P),D=e.animType,d=e.dummyObj,g=e.animObj,e=e.duration,K=this.config,k,m=K.prevWidth,v=K.prevHeight;K.animationStarted=!0;q?((m||v)&&q.setSize(m,v),m={width:b.offsetWidth,height:b.offsetHeight},k=!0,this._chartAnimation(!0),q.animateWith(d,g,m,e,D)):(q=a.paper=new F(b,b.offsetWidth,b.offsetHeight),q.setConfig("stroke-linecap",c));K.prevWidth=b.offsetWidth;K.prevHeight=b.offsetHeight;q.tooltip(u.style,
u.config.shadow,u.config.constrain);this.setChartCursor();this._createLayers();this._setDataLabelStyle();!k&&this._chartAnimation(!0);this._drawBackground();!1!==this.hasCanvas&&this._drawCanvas();this._drawChartMenuBar();this._manageCaptionPosition();a.caption&&a.caption.draw();this.drawLegend();this.drawActionBar&&this.drawActionBar();this._drawAxis&&this._drawAxis();this._drawDataset();this._drawQuadrant&&this._drawQuadrant();this._drawCreditLabel();this._drawLogo();f.annotations&&this._drawAnnotations();
this.drawAxisUpdateUI&&this.drawAxisUpdateUI();a.messageLogger&&a.messageLogger.isDrawn()&&a.messageLogger.draw();this.drawScrollBar&&this.drawScrollBar();this.showRTvalue&&K.realTimeConfig.showRTValue&&this._drawRealTimeValue()},_chartAnimation:function(b){var a=this,c=a.graphics,u=a.components.paper,f=a.config.animationObj,e,D=f.duration||f.transposeAnimDuration,d=a.config,g=d.animationeffect,K=function(){a._animCallBack()};!D||d.parentElementPause?setTimeout(a._animCallBack.bind(a),0):(f.animObj=
D=F.animation({x:0},D,g,K,!1),f.animType=g,(e=c.dummyObj)?e.attr({x:100}):(c.dummyObj=e=u.rect({x:100,y:0,width:10,height:30}),e.hide()),f.dummyObj=c.dummyObj,b?(e.stop(void 0,!0,!0),e.animate(D),e.pause(void 0,!0),d.parentElementPause=!0,setTimeout(function(){d.parentElementPause=!1;a._setAnimDuration();e.resume(void 0,!0)},0)):(setTimeout(function(){a._setAnimDuration()},0),e.animate(D)))},draw:function(){var b=this.chartInstance;this.config.hasChartMessage?(this._hide(),this.drawChartMessage(),
k.raiseEvent("nodatatodisplay",{},b,[b.id]),this.chartInstance.jsVars.drawCount+=1,this.chartInstance.__state.dataReady=!1,this.chartInstance.jsVars.hasNativeMessage=!0):(this._clearTimers&&this._clearTimers(),this._show(),this._preDraw(),this._createToolBox(),this._manageSpace(),this._postSpaceManagement(),this._updateVisuals(),this.inited=!0,this.chartInstance.jsVars.drawCount+=1,this.chartInstance.__state.dataReady=!0,this.chartInstance.jsVars.hasNativeMessage=!1)},drawLegend:function(){var b=
this.components,a=b.legend,b=b.gradientLegend,c=this.hasLegend;this.config.gLegendEnabled?(a&&a.hide(),this.drawGradientLegend&&this.drawGradientLegend()):(b&&b.elem&&b.elem.gl.carpet&&b.elem.gl.carpet.node&&b.elem.gl.carpet.group.hide(),!1!==c&&a.drawLegend())},manageGradientLegendSpace:function(b){var a=this.components.gradientLegend,c=a&&a.conf,u;u=Ta(this.config.gLegendPadding,.5*b);c?(c=c.legendPosition,b=a.getLogicalSpace(b),u=c===H?{bottom:(b.height||0)+u}:{right:(b.width||0)+u}):u={bottom:0,
right:0};return u},drawGradientLegend:function(){var b=this.components,a=this.config,c=this.jsonData.colorrange,u=b.gradientLegend||{},f=(u.conf||{}).legendPosition,e=a.canvasLeft,D=a.canvasTop,d=a.canvasWidth,g=a.canvasHeight,K=a.marginBottom,k=a.marginRight,l=this.hasGradientLegend,m,v,r;m=u.getLogicalSpace();v=m.width;r=m.height;f===H?(f=d-v,k=e+(0>f?0:f/2),K=a.height-m.height-K):(f=g-r,K=D+(0>f?0:f/2),k=a.width-m.width-k);c&&l&&u.draw(k,K,{paper:b.paper,parentGroup:this.graphics.parentGroup})},
_drawAxis:function(){var b=this.components,a=b.yAxis||[],c=b.xAxis||[],b=b.scale,u,f;u=0;for(f=c.length;u<f;u++)c[u].draw();u=0;for(f=a.length;u<f;u++)a[u].draw();b&&b.draw()},_drawAnnotations:function(){var b=this.jsonData,a=b.chart,c=this.config,u=c.width,f=c.height,c=b&&b.annotations||{},e=this.chartInstance.annotations;if(b&&a&&C(a.showannotations,1)){var b=C(c.scaleonresize,a.scaleonresize,1),a={interactionevents:M(this.annotationInteractionEvents,!0),showbelow:M(c.showbelow,c.showbelowchart),
autoscale:c.autoscale,scaletext:c.scaletext,scaleimages:c.scaleimages,constrainedscale:c.constrainedscale,scaleonresize:b,origw:M(c.origw,a.origw,this.origRenderWidth,u),origh:M(c.origh,a.origh,this.origRenderHeight,f),xshift:c.xshift,yshift:c.yshift,grpxshift:c.grpxshift,grpyshift:c.grpyshift,xscale:c.xscale,yscale:c.yscale,rootxscale:C(c.xscale,100)/100,rootyscale:C(c.yscale,100)/100},D;a||(a={});for(D in void 0)a[D]=(void 0)[D];e.reset(c,a,this)}else e.clear();e.draw(this)},_clearTimers:function(){var b=
this.config&&this.config.realTimeConfig,a=this.linkedItems.timers,c=a&&a.setTimeout,a=a&&a.setInterval,u;b&&(b.refreshIntervalFlag=!1);for(u in c)clearTimeout(c[u]);for(u in a)clearInterval(a[u])},_createLayers:function(){var b=this.graphics||(this.graphics={}),a,c,u=this.components.paper,b=this.graphics;b.parentGroup=a=b.parentGroup||u.group("parentgroup");b.backgroundGroup=b.backgroundGroup||u.group("background",a);b.canvasGroup=b.canvasGroup||u.group("canvas",a);b.axisBottomGroup=b.axisBottomGroup||
u.group("axisbottom",a);b.datasetGroup=c=b.datasetGroup||u.group("dataset",a);b.axisTopGroup=b.axisTopGroup||u.group("axistop",a);b.sumLabelsLayer=b.sumLabelsLayer||u.group("sumlabels",a);b.datalabelsGroup=b.datalabelsGroup||u.group("datalabel",a);b.legendGroup=b.legendGroup||u.group("legend",a);b.captionGroup=b.captionGroup||u.group("caption",a);b.captionGroup.trackTooltip(!0);b.columnGroup=b.columnGroup||u.group("column",c);b.areaGroup=b.areaGroup||u.group("area",c);b.lineGroup=b.lineGroup||u.group("line",
c);b.trackerGroup||(b.trackerGroup=u.group("tracker",a),b.trackerGroup.trackTooltip(!0));b.buttonGroup=b.buttonGroup||u.group("buttons")},_spaceManager:function(){var b,a,c=this.config,u=this.components,f=u.xAxis&&u.xAxis[0],e=u.yAxis&&u.yAxis||[],D,d;a=u.legend.config.legendPos;var g=c.xDepth,K=c.yDepth,k=c.canvasBgDepth,l=c.canvasBaseDepth,m=c.canvasBasePadding,v=u.canvas.config.canvasBorderWidth,r=c.realTimeConfig&&c.realTimeConfig.showRTValue,B=c.borderWidth,p=c.canvasMarginTop,t=c.canvasMarginBottom,
w=c.canvasMarginLeft,z=c.canvasMarginRight,u=c.minCanvasHeight,C=c.minCanvasWidth;b=c.minChartWidth;var R=c.minChartHeight,O=c.height,F=c.width,E=!1,I=!1,ia,da=c.origCanvasTopMargin,M=c.origCanvasBottomMargin,Q=c.origCanvasLeftMargin,U=c.origCanvasRightMargin,V,J,Z=[];c.canvasWidth-2*B<b&&(d=(c.canvasWidth-b)/2);c.canvasHeight-2*B<R&&(D=(c.canvasHeight-R)/2);this._allocateSpace({top:D||B,bottom:D||B,left:d||B,right:d||B});B=0;for(d=e.length;B<d;B++)D=e[B],b=.7*c.availableWidth,b=D&&D.placeAxis(b)||
{},Z.push({axisIndex:B,spaceTaken:b}),D&&this._allocateSpace(b);c.yAxisSpaceAllocation=Z;e=.225*c.availableHeight;e=this._manageActionBarSpace&&this._manageActionBarSpace(e)||{};this._allocateSpace(e);this._manageLegendSpace(void 0);a=a===H?.6*c.availableHeight:.6*c.availableWidth;K&&(this._allocateSpace({bottom:K}),c.shift=g+m+l);k&&this._allocateSpace({right:k});c.canvasWidth-2*v<C&&(J=(c.canvasWidth-C)/2);this._allocateSpace({left:J||v,right:J||v});C>F-w-z&&(I=!0,K=c.canvasWidth-C,g=w+z,w=c.canvasMarginLeft=
K*w/g,z=c.canvasMarginRight=K*z/g);w=w>c.canvasLeft?w-c.canvasLeft:0;z=z>F-c.canvasRight?z+c.canvasRight-F:0;this._allocateSpace({left:w,right:z});I&&(g=Q+U,I=c.canvasWidth,I>C&&(K=I-C,w=K*Q/g,z=K*U/g),this._allocateSpace({left:w,right:z}));c.actualCanvasMarginRight=z;c.actualCanvasMarginBottom=ia;this._manageChartMenuBar(a);a=.2*c.availableHeight;this._allocateSpace(this._getSumValueSpace(a));a=.3*c.availableHeight;c.realtimeEnabled&&(r?this._allocateSpace(this._realTimeValuePositioning(a)):this._hideRealTimeValue());
this._resetViewPortConfig&&this._resetViewPortConfig();this._setAxisScale&&this._setAxisScale();a=.6*c.availableHeight;c.xAxisSpaceAllocation=ia=f&&f.placeAxis(a);f&&this._allocateSpace(ia);this._getDSspace&&this._allocateSpace(this._getDSspace(.4*c.canvasWidth));a=.3*c.availableHeight;this._manageScrollerPosition&&this._manageScrollerPosition(a);c.canvasHeight-2*v<u&&(V=(c.canvasHeight-u)/2);this._allocateSpace({top:V||v,bottom:V||v});this._allocateSpace({bottom:l});u>O-p-t&&(E=!0,K=c.canvasHeight-
u,g=p+t,p=c.canvasMarginTop=K*p/g,t=c.canvasMarginBottom=K*t/g);f=p>c.canvasTop?p-c.canvasTop:0;ia=t>O-c.canvasBottom?t+c.canvasBottom-O:0;this._allocateSpace({top:f,bottom:ia});E&&(g=da+M,l=c.canvasHeight,l>u&&(K=l-u,f=K*da/g,ia=K*M/g),this._allocateSpace({top:f,bottom:ia}));c.actualCanvasMarginTop=f;c.actualCanvasMarginLeft=w},_manageLegendSpace:function(){var b=this.config,a=this.components,c=a.legend,u=a.gradientLegend,f;f=this.jsonData.colorrange;var a=this.hasLegend,e={},D=this.hasGradientLegend,
d=C(this.jsonData.chart.mapbycategory,0);D&&f&&C(f.gradient)&&!d?(f=u.conf,D=!0,b.gLegendEnabled=!0,u=.5,f=f.legendPosition):(f=c.config,D=!1,b.gLegendEnabled=!1,f=f.legendPos,u=f===pb?.8:.4);b=f===pb?b.availableWidth*u:b.availableHeight*u;D?e=this.manageGradientLegendSpace(b):!1!==a&&(e=c._manageLegendPosition(b));this._allocateSpace({bottom:e.bottom||0,right:e.right||0})},_getSumValueSpace:function(b){var a={},c=this.isBar,u=this.jsonData.chart,a=0!==this.showsum?C(u.showsum,this.showsum,0):0,f=
this.config.stack100percent,e=this.config.isstacked,u=0,D=this.components["datasetGroup_"+this.defaultDatasetType],d=0;a&&f&&e&&D&&(a=D.getMaxSumValueSpace(),c?u=a.maxWidth:d=a.maxHeight,d>b&&(d=b),u>b&&(u=b));return{top:d,right:u}},_setAxisValuePadding:function(){var b=this.components.dataset,a=b.length,c,u,f=-Infinity,e=-Infinity,D=this.components.xAxis;for(c=0;c<a;c++)u=b[c],u=u.getAxisValuePadding&&u.getAxisValuePadding()||{},f=fa(f,u.left||-Infinity),e=fa(e,u.right||-Infinity);-Infinity===f&&
(f=0);-Infinity===e&&(e=0);D&&D[0].setAxisPadding(f,e)},_fetchCaptionPos:function(b){var a=this.config,c=this.components,u=c.chartMenuBar.getLogicalSpace(),c=c.caption.config;return c.align===B?a.width-b-c.width/2-a.origMarginRight-u.width:c.align===J?a.width-a.canvasLeft-c.width-a.origMarginRight-u.width+c.horizontalPadding:-1},_manageChartMenuBar:function(b){var a=this.config,c=this.components,u=c.chartMenuBar.getLogicalSpace(),c=c.caption.config,f=a.width/2,e=a.canvasRight,e=e?(a.canvasLeft+e)/
2:f,a=0,f=c.alignWithCanvas?e:f;c.isOnTop?(b=this._manageCaptionSpacing(b),a=this._fetchCaptionPos(f),c._offsetHeight=0>a?u.height:0,b.top=0>a?C(b.top,0)+u.height:fa(b.top,u.height)):(this._allocateSpace({top:u.height}),b=this._manageCaptionSpacing(b));this._allocateSpace(b);return{top:fa(u.height,b.top),bottom:b.bottom}},_getDSspace:function(b){var a=this.components.dataset,c,u=a.length,f,e,D={},d={left:0,right:0,top:0,bottom:0,paddingLeft:0,paddingRight:0,paddingBottom:0,paddingTop:0},g;for(f=0;f<
u;f++)if(c=a[f],e=c.groupManager)D[c.type]=e;else if(c.manageSpace)for(g in c=c.manageSpace&&c.manageSpace(),c)d[g]=fa(c[g],d[g]);for(g in D)if(e=D[g],e.manageSpace)for(g in c=e.manageSpace&&e.manageSpace(b),c)d[g]=fa(c[g],d[g]);a=d.paddingLeft;u=d.paddingRight;f=a+u;b<f&&(d.paddingLeft=b*a/f,d.paddingRight=b*u/f);return d},_adjustCanvasPadding:function(){for(var b=this.config,a=this.components,c=a.dataset,u=c.length,f=a.xAxis&&a.xAxis[0],e=b.xDepth,D={},d,g,K,k=a.canvas.config,l=k.canvasBorderWidth,
m=k.canvasPadding,a=0;a<u;a++)d=c[a],(g=d.groupManager)&&(D[d.type]=g);for(K in D)g=D[K],g.preDrawCalculate&&g.preDrawCalculate();this._getDSspace&&(this._allocateSpace(this._getDSspace(.4*b.canvasWidth)),f&&f.setAxisDimention({x:b.canvasLeft+(e||0)+fa(k.canvasPaddingLeft,m),y:b.canvasBottom+(b.shift||0)+l,opposite:b.canvasTop-l,axisLength:b.canvasWidth-(e||0)-fa(k.canvasPaddingLeft,m)-fa(k.canvasPaddingRight,m)}))},_setAxisLimits:function(){var b=this.components,a=b.dataset,c=b.yAxis,b=b.xAxis,u,
f=a.length,e,D=-Infinity,d=Infinity,g=Infinity,K=-Infinity,k,l,m,v={},r=[],B=function(b){l=M(b.xMax,-Infinity);m=M(b.xMin,Infinity);D=fa(D,b.max);d=Ta(d,b.min);K=fa(K,l);g=Ta(g,m)};for(e=0;e<f;e++)u=a[e],(k=u.groupManager)?v[u.type]=k:r.push(u);for(k in v)a=v[k].getDataLimits(),B(a);f=r.length;for(e=0;e<f;e++)a=r[e].getDataLimits(),B(a);-Infinity===D&&(D=0);Infinity===d&&(d=0);this.config.yMax=D;this.config.yMin=d;c[0].setAxisConfig({isPercent:this.config.isstacked?this.config.stack100percent:0});
c[0].setDataLimit(D,d);if(-Infinity!==K||Infinity!==g)b[0].config.xaxisrange={max:K,min:g},b[0].setDataLimit(K,g)},_setToolTipOptions:function(){var b=this.components,a=this.components.colorManager,c=this.jsonData.chart,u=b.tooltip||(u=b.tooltip={}),b=u.config||(b=u.config={}),f=this.config,e=f.style,f=f.style.inCanvasStyle,D,d,g;D=ab(M(c.tooltipbgcolor,a.getColor("toolTipBgColor")),M(c.tooltipbgalpha,100));a=ab(M(c.tooltipbordercolor,a.getColor("toolTipBorderColor")),M(c.tooltipborderalpha,100));
d=C(c.tooltipborderthickness,1)+"px";g=C(c.tooltippadding,3)+"px";u=u.style={fontFamily:e.inCanfontFamily,fontSize:e.inCanfontSize,lineHeight:f.lineHeight,color:ab(e.inCancolor),backgroundColor:D,borderColor:a,borderWidth:d,padding:g};c.tooltipcolor&&(u.color=rb(c.tooltipcolor));if(c.tooltipborderradius||c.useroundedges)u.borderRadius=C(c.tooltipborderradius,2)+"px";b.shadow=C(c.showtooltipshadow,c.showshadow,1)?{enabled:!0,opacity:fa(C(c.tooltipbgalpha,100),C(c.tooltipborderalpha,100))/100}:!1;b.constrain=
C(c.constraintooltip,1)},_createAxes:function(){var b=this.components,a=FusionCharts.register("component",["axis","cartesian"]),c;b.yAxis=[];b.xAxis=[];b.yAxis[0]=c=new a;b.xAxis[0]=b=new a;c.chart=this;b.chart=this;c.init();b.init();this._setCategories()},_feedAxesRawData:function(){var a=this.config,c=this.components,u=c.colorManager,e=this.jsonData,f=e.chart,D,d=this.is3d,g=d?b.chart3D:b.chart2D;D={outCanfontFamily:M(f.outcnvbasefont,f.basefont,"Verdana,sans"),outCanfontSize:Ma(f.outcnvbasefontsize,
f.basefontsize,10),outCancolor:M(f.outcnvbasefontcolor,f.basefontcolor,u.getColor(g.baseFontColor)).replace(/^#? ([a-f0-9]+)/ig,"#$1"),axisBreaks:f.xaxisbreaks,axisNamePadding:f.xaxisnamepadding,axisValuePadding:f.labelpadding,axisNameFont:f.xaxisnamefont,axisNameFontSize:f.xaxisnamefontsize,axisNameFontColor:f.xaxisnamefontcolor,axisNameFontBold:f.xaxisnamefontbold,axisNameFontItalic:f.xaxisnamefontitalic,axisNameBgColor:f.xaxisnamebgcolor,axisNameBorderColor:f.xaxisnamebordercolor,axisNameAlpha:f.xaxisnamealpha,
axisNameFontAlpha:f.xaxisnamefontalpha,axisNameBgAlpha:f.xaxisnamebgalpha,axisNameBorderAlpha:f.xaxisnameborderalpha,axisNameBorderPadding:f.xaxisnameborderpadding,axisNameBorderRadius:f.xaxisnameborderradius,axisNameBorderThickness:f.xaxisnameborderthickness,axisNameBorderDashed:f.xaxisnameborderdashed,axisNameBorderDashLen:f.xaxisnameborderdashlen,axisNameBorderDashGap:f.xaxisnameborderdashgap,useEllipsesWhenOverflow:f.useellipseswhenoverflow,divLineColor:M(f.vdivlinecolor,f.divlinecolor,u.getColor(g.divLineColor)),
divLineAlpha:M(f.vdivlinealpha,f.divlinealpha,d?u.getColor("divLineAlpha3D"):u.getColor("divLineAlpha")),divLineThickness:C(f.vdivlinethickness,f.divlinethickness,1),divLineIsDashed:!!C(f.vdivlinedashed,f.vdivlineisdashed,f.divlinedashed,f.divlineisdashed,0),divLineDashLen:C(f.vdivlinedashlen,f.divlinedashlen,4),divLineDashGap:C(f.vdivlinedashgap,f.divlinedashgap,2),showAlternateGridColor:C(f.showalternatevgridcolor,0),alternateGridColor:M(f.alternatevgridcolor,u.getColor("altVGridColor")),alternateGridAlpha:M(f.alternatevgridalpha,
u.getColor("altVGridAlpha")),numDivLines:C(f.numvdivlines,this.numVDivLines),labelFont:f.labelfont,labelFontSize:f.labelfontsize,labelFontColor:f.labelfontcolor,labelFontAlpha:f.labelalpha,labelFontBold:f.labelfontbold,labelFontItalic:f.labelfontitalic,maxLabelHeight:f.maxlabelheight,axisName:f.xaxisname,axisMinValue:f.xaxisminvalue,axisMaxValue:f.xaxismaxvalue,setAdaptiveMin:C(f.setadaptivexmin,this.setadaptivexmin,a.setadaptivexmin),adjustDiv:f.adjustvdiv,labelDisplay:f.labeldisplay,showLabels:f.showlabels,
rotateLabels:f.rotatelabels,slantLabel:C(f.slantlabels,f.slantlabel),labelStep:C(f.labelstep,f.xaxisvaluesstep),showAxisValues:C(f.showxaxisvalues,f.showxaxisvalue),showLimits:C(f.showvlimits,this.showvlimits),showDivLineValues:C(f.showvdivlinevalues,f.showvdivlinevalues,this.showvdivlinevalues),showZeroPlane:C(f.showvzeroplane,this.showzeroplane),zeroPlaneColor:f.vzeroplanecolor,zeroPlaneThickness:C(f.vzeroplanethickness,f.vdivlinethickness,a.zeroplanethickness,2),zeroPlaneAlpha:C(f.vzeroplanealpha,
f.vdivlinealpha,a.zeroplanealpha),showZeroPlaneValue:C(f.showvzeroplanevalue,this.showzeroplanevalue),trendlineColor:f.trendlinecolor,trendlineToolText:f.trendlinetooltext,trendlineThickness:f.trendlinethickness,trendlineAlpha:f.trendlinealpha,showTrendlinesOnTop:f.showtrendlinesontop,showAxisLine:d?0:C(f.showxaxisline,f.showaxislines,f.drawAxisLines,this.showxaxisline,0),axisLineThickness:C(f.xaxislinethickness,f.axislinethickness,1),axisLineAlpha:C(f.xaxislinealpha,f.axislinealpha,100),axisLineColor:M(f.xaxislinecolor,
f.axislinecolor,"#000000")};a={outCanfontFamily:M(f.outcnvbasefont,f.basefont,"Verdana,sans"),outCanfontSize:Ma(f.outcnvbasefontsize,f.basefontsize,10),outCancolor:M(f.outcnvbasefontcolor,f.basefontcolor,u.getColor(g.baseFontColor)).replace(/^#? ([a-f0-9]+)/ig,"#$1"),axisBreaks:f.yaxisbreaks,axisNamePadding:f.yaxisnamepadding,axisValuePadding:f.yaxisvaluespadding,axisNameFont:f.yaxisnamefont,axisNameFontSize:f.yaxisnamefontsize,axisNameFontColor:f.yaxisnamefontcolor,axisNameFontBold:f.yaxisnamefontbold,
axisNameFontItalic:f.yaxisnamefontitalic,axisNameBgColor:f.yaxisnamebgcolor,axisNameBorderColor:f.yaxisnamebordercolor,axisNameAlpha:f.yaxisnamealpha,axisNameFontAlpha:f.yaxisnamefontalpha,axisNameBgAlpha:f.yaxisnamebgalpha,axisNameBorderAlpha:f.yaxisnameborderalpha,axisNameBorderPadding:f.yaxisnameborderpadding,axisNameBorderRadius:f.yaxisnameborderradius,axisNameBorderThickness:f.yaxisnameborderthickness,axisNameBorderDashed:f.yaxisnameborderdashed,axisNameBorderDashLen:f.yaxisnameborderdashlen,
axisNameBorderDashGap:f.yaxisnameborderdashgap,axisNameWidth:f.yaxisnamewidth,useEllipsesWhenOverflow:f.useellipseswhenoverflow,rotateAxisName:C(f.rotateyaxisname,1),axisName:f.yaxisname,divLineColor:M(f.divlinecolor,u.getColor(g.divLineColor)),divLineAlpha:M(f.divlinealpha,d?u.getColor("divLineAlpha3D"):u.getColor("divLineAlpha")),divLineThickness:C(f.divlinethickness,1),divLineIsDashed:!!C(f.divlinedashed,f.divlineisdashed,0),divLineDashLen:C(f.divlinedashlen,4),divLineDashGap:C(f.divlinedashgap,
2),showAlternateGridColor:C(f.showalternatehgridcolor,1),alternateGridColor:M(f.alternatehgridcolor,u.getColor("altHGridColor")),alternateGridAlpha:M(f.alternatehgridalpha,u.getColor("altHGridAlpha")),numDivLines:C(f.numdivlines,this.numDivLines),axisMinValue:f.yaxisminvalue,axisMaxValue:f.yaxismaxvalue,setAdaptiveMin:C(f.setadaptivesymin,f.setadaptiveymin),adjustDiv:f.adjustdiv,labelStep:f.yaxisvaluesstep,showAxisValues:C(f.showyaxisvalues,f.showyaxisvalue,this.showyaxisvalues),showLimits:C(f.showyaxislimits,
f.showlimits,this.showLimits),showDivLineValues:C(f.showdivlinevalues,f.showdivlinevalue,this.showdivlinevalues),showZeroPlane:C(f.showzeroplane,this.showzeroplane),zeroPlaneColor:f.zeroplanecolor,zeroPlaneThickness:C(f.zeroplanethickness,f.divlinethickness,a.zeroplanethickness,2),zeroPlaneAlpha:C(f.zeroplanealpha,f.divlinealpha,a.zeroplanealpha),showZeroPlaneValue:C(f.showzeroplanevalue,this.showzeroplanevalue),showZeroPlaneOnTop:a.showzeroplaneontop,trendlineColor:f.trendlinecolor,trendlineToolText:f.trendlinetooltext,
trendlineThickness:f.trendlinethickness,trendlineAlpha:f.trendlinealpha,showTrendlinesOnTop:f.showtrendlinesontop,showAxisLine:d?0:C(f.showyaxisline,f.showaxislines,f.drawAxisLines,this.showyaxisline,0),axisLineThickness:C(f.yaxislinethickness,f.axislinethickness,1),axisLineAlpha:C(f.yaxislinealpha,f.axislinealpha,100),axisLineColor:M(f.yaxislinecolor,f.axislinecolor,"#000000")};D.vtrendlines=e.vtrendlines;a.trendlines=e.trendlines;e=c.yAxis&&c.yAxis[0];c=c.xAxis&&c.xAxis[0];e&&(e.setCommonConfigArr(a,
!0,!1,!1),e.configure());c&&(c.setCommonConfigArr(D,!1,!1,!1),c.configure())},_createLegend:function(){var b=this.components,a=FusionCharts.register("component",["legend","legend"]);Na=b.legend=new a;Na.chart=this;Na.init()},_createGradientLegend:function(){var b=this.components,a;this.hasGradientLegend&&(a=b.gradientLegend=b.gradientLegend||new (FusionCharts.register("component",["gradientLegend","gradientLegend"])),b.postLegendInitFn=a.init({chart:this}))},_setCategories:function(){var b=this.jsonData,
a=this.components.xAxis,b=b.categories&&b.categories[0].category;a&&a[0].setCategory(b)},_getDiff:function(b,a,c,u){c>b&&(b=c,a=u);return{diff:b,startIndex:a}},_createDatasets:function(){var b,a=this.components,c=a.xAxis[0],u=this.jsonData,f=u.dataset,e=f&&f.length,D,d,g,K=this.defaultDatasetType,k=this.applicableDSList,l=this.components.legend.components.items||[],m,v,r,B=this.config.isstacked,p,t,w=[],z=this.isRealTime,C=this.config.catLen,R={};f&&0!==f.length||this.setChartMessage();this.config.categories=
u.categories&&u.categories[0].category;D=a.dataset||(a.dataset=[]);d=D.length;for(u=0;u<e;u++)if(r=f[u],r.seriesname&&(r.seriesname=Ba(r.seriesname)),g=r.parentyaxis||aa,v=(v=this.isDual&&"s"===g.toLowerCase()?M(r.renderas,this.sDefaultDatasetType):M(r.renderas,K))&&v.toLowerCase(),k[v]||(v=K),b=FusionCharts.get("component",["dataset",v]))void 0===R[v]?R[v]=0:R[v]++,p="datasetGroup_"+v,g=FusionCharts.register("component",["datasetGroup",v]),(m=a[p])&&w.push(m),g&&!m&&(m=a[p]=new g,m.chart=this,m.init()),
(g=D[u])?(v=c.getCategoryLen(),b=C-v,p=z?g.components:g.JSONData,t=p.data&&p.data.length,p=z?0:r.data&&r.data.length||0,t-=p,b=this._getDiff(t,p,b,v),v=b.diff,b=b.startIndex,this.config._dataUpdated=!0,0<v&&g.removeData(b,v,!1),this.config._dataUpdated=!1,D[u].JSONData=r,D[u].configure(),D[u]._deleteGridImages&&D[u]._deleteGridImages()):(g=new b,D.push(g),g.chart=this,g.index=u,m&&(B?m.addDataSet(g,0,R[v]):m.addDataSet(g,R[v],0)),g.init(r));if(d>e){v=d-e;m&&B&&m.removeDataSet(0,u,v);a=u;for(e=v+u;a<
e;a++)m&&!B&&m.removeDataSet(u,0,1),Za.call(D[a]);D.splice(u,v);l.splice(u,v)}this.config.catLen=c.getCategoryLen()},_drawDataset:function(){var b=this.components.dataset,a,c=b.length,u,f,e={},D=[];for(u=0;u<c;u++)a=b[u],(f=a.groupManager)?e[a.type]=f:D.push(a);for(f in e)e[f].draw();c=D.length;for(u=0;u<c;u++)D[u].draw()},_drawCanvas:function(){var b=this.jsonData.chart,a=this.components,u=this.config,e=this.graphics,f=a.paper,D=a.canvas,a=D.graphics,d=D.config,D=d.clip={},g=a.canvasBorderElement,
K=this.get(l,P),k=K.animType,m=K.animObj,ua=K.dummyObj,K=K.duration,v=a.canvasElement,r=u.canvasLeft,B=u.canvasTop,p=u.canvasWidth,t=u.canvasHeight,z=d.xDepth=u.xDepth||0,u=d.yDepth=u.yDepth||0,e=e.canvasGroup,wb=d.canvasBorderRadius,S=d.canvasBorderWidth,F=.5*S,R=d.canvasBorderColor,O=d.canBGColor,H=d.canBGAlpha,E=d.shadow,b=d.showCanvasBG=!!C(b.showcanvasbg,1),I=d.shadowOnCanvasFill,ia=d.showCanvasBorder,d={x:r-F,y:B-F,width:p+S,height:t+S,r:wb,"stroke-width":S,stroke:R,"stroke-linejoin":2<S?c:
w};ia?g?(g.show(),g.animateWith(ua,m,{x:r-F,y:B-F,width:p+S,height:t+S,r:wb},K,k),g.attr({"stroke-width":S,stroke:R,"stroke-linejoin":2<S?c:w}),g.shadow(E)):a.canvasBorderElement=f.rect(d,e).shadow(E):g&&g.hide();D["clip-canvas"]=[fa(0,r-z),fa(0,B-u),fa(1,p+2*z),fa(1,t+u)];D["clip-canvas-init"]=[fa(0,r-z),fa(0,B-u),1,fa(1,t+2*u)];b?(d={x:r,y:B,width:p,height:t,r:wb,"stroke-width":0,stroke:"none",fill:Ra(O)},v?(v.show(),v.animateWith(ua,m,{x:r,y:B,width:p,height:t,r:wb},K,k),v.attr({"stroke-width":0,
stroke:"none",fill:Ra(O)})):v=a.canvasElement=f.rect(d,e),I?v.shadow({opacity:H/100}):v.shadow(!1)):v&&v.hide()},_getBackgroundCosmetics:function(){var a=this.jsonData.chart,c=this.components.colorManager,u=this.is3D?b.chart3D:b.chart2D;return{FCcolor:{color:M(a.bgcolor,this.bgColor,c.getColor(u.bgColor)),alpha:M(a.bgalpha,this.bgAlpha,c.getColor(u.bgAlpha)),angle:M(a.bgangle,c.getColor(u.bgAngle)),ratio:M(a.bgratio,c.getColor(u.bgRatio))}}},_manageCaptionSpacing:function(b,a){return this.components.caption.manageSpace(b,
a)},_manageCaptionPosition:function(){this.components.caption.managePosition()},_drawChartMenuBar:function(){var b=this.config,a=this.components.chartMenuBar,c=a.getLogicalSpace();a.toolbarConfig.fill=fb;a.toolbarConfig.borderColor=fb;a.draw(b.width-(b.marginRight+c.width),b.marginTop);a.drawn=!0},_drawLogo:function(){var b=this,a=b.components.paper,c=b.config,u=c.borderWidth||0,f=c.height,D=c.width,d=b.graphics.logoImage,K=c.logoURL,k=c.logoAlpha/100,ra=c.logoPosition,m=c.logoLink,ua=c.logoScale,
v=c.logoLeftMargin,r=c.logoTopMargin,p,t,c=b.get(l,P),w=c.animType,z=c.animObj,C=c.dummyObj,S=c.duration,c={tr:{vAlign:e,hAlign:pb},bl:{vAlign:H,hAlign:kb},br:{vAlign:H,hAlign:pb},cc:{vAlign:B,hAlign:B}},F,R,O;K?(F=new Va,(O=c[ra])||(O={vAlign:e,hAlign:kb}),F.onload=function(){R=Ea("none",O.vAlign,O.hAlign,ua,u,D,f,F);E&&(R.w=R.width||0,R.h=R.height||0);R.src=K;d?d.animateWith(C,z,R,S,w):d=b.graphics.logoImage=a.image(R);d.show();d.translate(v,r).css("opacity",k);m?d.css({cursor:Q,_cursor:"hand"}):
d.css({cursor:"default",_cursor:W});if(d.events&&d.events.length)for(t=0,p=d.events.length;t<p;t++)d.events[t].unbind(),d.events.splice(t,1),--p,--t;d.mouseover(function(a){a=Ia(b.chartInstance.ref,a);g.raiseEvent("LogoRollover",{logoURL:K,logoAlpha:100*k,logoPosition:ra||"tl",logoScale:ua,logoLink:m,chartX:a.chartX,chartY:a.chartY,pageX:a.pageX,pageY:a.pageY},b.chartInstance)});d.mouseout(function(a){a=Ia(b.chartInstance.ref,a);g.raiseEvent("LogoRollout",{logoURL:K,logoAlpha:100*k,logoPosition:ra||
"tl",logoScale:ua,logoLink:m,chartX:a.chartX,chartY:a.chartY,pageX:a.pageX,pageY:a.pageY},b.chartInstance)});d.click(function(a){a=Ia(b.chartInstance.ref,a);g.raiseEvent("LogoClick",{logoURL:K,logoAlpha:100*k,logoPosition:ra||"tl",logoScale:ua,logoLink:m,chartX:a.chartX,chartY:a.chartY,pageX:a.pageX,pageY:a.pageY},b.chartInstance,void 0,function(){m&&b.linkedItems.linkClickFN.call({link:m},b)})});g.raiseEvent("LogoLoaded",{logoURL:K,logoAlpha:100*k,logoPosition:ra||"tl",logoScale:ua,logoLink:m},b.chartInstance)},
F.onerror=function(a){g.raiseEvent("LogoLoadError",{logoURL:K,logoAlpha:100*k,logoPosition:ra||"tl",logoScale:ua,logoLink:m,error:a},b.chartInstance)},F.src=K):d&&d.hide()},_addCSSDefinition:function(b,a){var c=this.components.paper;a.color&&(a.fill=a.color);c.cssAddRule(b,a)},_allocateSpace:function(b){var a=this.components.canvas.config,c=this.config,u=c.canvasHeight,f=c.canvasWidth,e=c.availableHeight,D=c.availableWidth;c.canvasLeft+=b.left||0;c.canvasTop+=b.top||0;f=c.canvasWidth=f-((b.left||
0)+(b.right||0));u=c.canvasHeight=u-((b.top||0)+(b.bottom||0));c.availableHeight=fa(e-((b.top||0)+(b.bottom||0)),0);c.availableWidth=fa(D-((b.left||0)+(b.right||0)),0);c.canvasRight=c.canvasLeft+f;c.canvasBottom=c.canvasTop+u;a.canvasPaddingLeft=fa(a.canvasPaddingLeft,b.paddingLeft||0);a.canvasPaddingRight=fa(a.canvasPaddingRight,b.paddingRight||0);a.canvasPaddingTop=fa(a.canvasPaddingTop,b.paddingTop||0);a.canvasPaddingBottom=fa(a.canvasPaddingBottom,b.paddingBottom||0)},_updateCategory:function(b){var a=
this.jsonData,a=a.categories&&a.categories[0].category,c=b.category,u=c.length,f=b.index,e=b.prepend;b=b.add;var D;for(D=0;D<u;D++)f?(b&&a.splice(f-1+D,0,c[D]),!b&&(a[f-1+D]=c[D])):e?(b&&a.splice(D,0,c[D]),!b&&(a[D]=c[D])):(b&&a.push(c),!b&&(a[a.length-1]=c))},realTimeUpdate:function(b){var a=this.components,c=a.xAxis&&a.xAxis[0],a=a.dataset,u=b.dataset;b=b.categories&&b.categories.category||[];var f=c&&c.getCategoryLen(),e=this.config.realTimeConfig=this.config.realTimeConfig||(this.config.realTimeConfig=
{}),D=0,d;if(a){if(c){c.categoryInsert(f,b,!0);f=0;for(d=b.length;f<d;f++)b[f].vline||(D+=1);c.categoryDelete(0,D,!0)}this.config._sumValuesUpdated=!1;f=0;for(d=a.length;f<d;f++)D=u[f],a[f].addData(D),a[f].removeData(0,D.data.length),a[f].maxminFlag&&(e.maxminFlag=a[f].maxminFlag)}},_RTmanageSpace:function(){var b=this.config,a=this.components,c=a.xAxis[0],u=a.yAxis[0],f=a.yAxis[1],e,D=a.canvas.config,a=D.canvasBorderWidth,d=D.canvasPaddingTop,g=D.canvasPaddingBottom,K=D.canvasPadding||0,k=D.canvasPaddingLeft,
D=D.canvasPaddingRight,l;e=b.xAxisSpaceAllocation;l=b.yAxisSpaceAllocation||[];var m=l[0]&&l[0].spaceTaken||{},v=l[1]&&l[1].spaceTaken||{},r=b.primaryAxisOnleft,B,p,t;e=(b.xAxisSpaceAllocation=c.placeAxis(b.availableHeight+e.bottom)).bottom-e.bottom;0!==e&&(this._allocateSpace({bottom:e}),e=b.availableWidth,l[0].spaceTaken=e=u.placeAxis(e+m.left),this._allocateSpace({left:e.left-m.left}),e=b.availableWidth,m=b.canvasLeft-a,p=b.canvasRight+a,f&&(B=p,t=m,0===r&&(r=m,m=B,B=r,r=p,p=t,t=r),l[1].spaceTaken=
l=f.placeAxis(e+(v.right||0)),this._allocateSpace({right:(l.right||0)-(v.right||0)}),f.setAxisDimention({x:B,y:b.canvasTop+d,opposite:t,axisLength:b.canvasHeight-d-g})),c&&c.setAxisDimention({x:b.canvasLeft+fa(k,K),y:b.canvasBottom+(b.shift||0)+a,opposite:b.canvasTop-a,axisLength:b.canvasWidth-fa(k,K)-fa(D,K)}),u&&u.setAxisDimention({x:m,y:b.canvasTop+d,opposite:p,axisLength:b.canvasHeight-d-g}),u.draw(),this._drawCanvas())},realTimeDraw:function(b,a,c,u,f){var e=this.components,D=e.xAxis&&e.xAxis[0],
d=e.yAxis&&e.yAxis[0],K=e.yAxis&&e.yAxis[1],k=e.scale,e=e.dataset,l=this.config.realTimeConfig,m=l.sync,v=l.showRTValue,r=l.maxminFlag,B,p,t=e.length;p=(new Date).getTime();this._chartAnimation(m);this.rtManageSpace&&this._RTmanageSpace();if(e){D&&D.draw();this._setAxisLimits();r&&d&&d.draw();K&&K.draw();r&&k&&k.draw();for(D=0;D<t;D++)B=e[D].groupManager,!B&&e[D].draw();v&&this._drawRealTimeValue&&this._drawRealTimeValue();B&&B.draw()}p=(new Date).getTime()-p;a={data:a,updateObject:l.legacyUpdateObj,
prevData:c,source:b?"XmlHttpRequest":"feedData",latency:p};b&&(a.networkLatency=f,a.url=u);g.raiseEvent("realTimeUpdateComplete",a,this.chartInstance)},_getPrevData:function(){return this.config.realTimeConfig&&this.config.realTimeConfig.prevData},feedData:function(b,a,c,u){var f=this,e=f.config.realtimeEnabled,D=f.config.realTimeConfig||(f.config.realTimeConfig={}),d,g=f.components,K=g.xAxis,k=f.components.dataset,l,m,v=D.clearInterval,r=D.refreshInterval,B=D.updateInterval,p=f.linkedItems.timers||
(f.linkedItems.timers={setTimeout:{},setInterval:{}}),t=k.length,w=D.prevData;d=f._linearDataParser(b);if(e&&f.chartInstance.isActive()){if(D.clear){for(e=0;e<t;e++)k[e]._realTimeConfigure(!0);D.clear=!1}r<B&&(r=D.refreshInterval=D.updateInterval);g.messageLogger&&g.messageLogger.addLog(d);g.alertManager&&g.alertManager.processRTData(d);f.realTimeUpdate(d);f.canvasPadding&&f._adjustCanvasPadding();r&&!1===D.clearIntervalFlag?(f.realTimeDraw(a,b,w,c,u),D.refreshIntervalFlag=!1):r&&!D.refreshIntervalFlag?
(D.refreshIntervalFlag=!0,p.setTimeout.loadData=setTimeout(function(){l=(new Date).getTime();f.realTimeDraw(a,b,w,c,u);m=(new Date).getTime();D.refreshIntervalFlag=!1;D.refreshIntervalTimeDifference=m-l},1E3*r-(D.refreshIntervalTimeDifference||0)-(u||0))):r||f.realTimeDraw(a,b,w,c,u);v&&!D.clearIntervalFlag&&K&&(D.clearIntervalFlag=!0,p.setTimeout.clearData=setTimeout(function(b){l=(new Date).getTime();try{clearTimeout(b.setTimeout.loadData)}catch(a){clearTimeout(p.setTimeout.loadData)}f._clearChart();
m=(new Date).getTime();D.clearIntervalTimeDifference=m-l;D.clearIntervalFlag=!1},1E3*v-(D.clearIntervalTimeDifference||0)-(u||0),p));return!0}return!1},_clearChart:function(b){var a=this.components,c=a.xAxis&&a.xAxis[0],a=a.dataset,u=c.getCategoryLen(),f=this.config.realTimeConfig||(this.config.realTimeConfig={}),e=a.length;f.clear=!0;if(a){c&&c.categoryDelete(0,u,!0);this.config._sumValuesUpdated=!1;for(u=0;u<e;u++)c=a[u],a[u].removeData(0,c.components.data.length),a[u].maxminFlag&&(f.maxminFlag=
a[u].maxminFlag);this.realTimeDraw()}this._setRealTimeCategories();k.raiseEvent("ChartCleared",{source:b},this.chartInstance,[this.id,b])},_linearDataParser:function(b,c){var u,e,f,D,d,g,K,k,l,m,v,r,B,p,t,w,z,C,F,R,O,H,E=this.components.dataset,E=E&&E.length;p=this.config.realTimeConfig;var I=p.prevData=[],ia=p.legacyUpdateObj={},da=ia.values=[],M=ia.target=[],Q=ia.valueVisibility=[],U=ia.toolTexts=[],V=ia.toolTextsTarget=[],J=ia.colors=[],Z=ia.links=[],G=0,L={categories:{category:[]},dataset:[]},
N=L.categories.category,P=L.dataset,T,qa=b,X;b=b&&b.toString&&b.toString()||aa;this.rtParserModify&&(qa=qa.replace(/([^\\])(\|)/g,"$1,"),b=b.replace(/\|/g,","));u=b.split("&");p=0;for(t=u.length;p<t;p+=1)if(e=u[p].split("="),f=e[1],e=e[0],e!==a&&void 0!==e&&void 0!==f&&(f!==a||c))switch(T=e.toLowerCase(),T){case "label":ia.labels=w=f.split(",");break;case "vline":ia.vlines=z=f.split(",");break;case "vlinelabel":ia.vlineLabels=l=f.split(",");break;case "vlinecolor":ia.vlineColors=m=f.split(",");break;
case "vlinethickness":ia.vlineThickness=v=f.split(",");break;case "vlinedashed":ia.vlineDashed=r=f.split(",");break;case "value":C=f.split("|");break;case "target":F=f.split("|");break;case "showlabel":ia.showLabels=B=f.split(",");break;case "showvalue":D=f.split("|");break;case "tooltext":d=(d=(d=qa.match(/tooltext=(.*?\\&)*.*?[^\\]&/i))?d[0].substr(9,d[0].length-10):qa.match(/(tooltext=)(.*)/i)[2])&&d.replace(/([^\\])(\|)/g,"$1_FC@@**");d=d.split("_FC@@**");break;case "targettooltext":g=f.split("|");
break;case "link":k=f.split("|");break;case "color":K=f.split("|");break;case "datastamp":ia.dataStamp=R=f;break;case "stopupdate":ia.pause=O="1"==f;break;case "clear":ia.clear=H="1"==f;break;default:ia[e]=L[e]=f}u=C&&C.length;for(p=0;p<u;p++)da[p]=C[p].split(","),M[p]=F&&F[p]&&F[p].split(","),Q[p]=D&&D[p]&&D[p].split(","),V[p]=g&&g[p]&&g[p].split(","),J[p]=K&&K[p]&&K[p].split(","),Z[p]=k&&k[p]&&k[p].split(","),d&&(X=d[p])&&(X=X.replace(/([^\\])(\,)/g,"$1_FC@@**"),U[p]=X.split("_FC@@**")),G=fa(G,
da[p].length);D=fa(w&&w.length||0,G||0);for(p=0;p<D;p++)N.push({label:w&&w[p],color:m&&m[p],showlabel:B&&B[p]});z&&N.push({label:l&&l[0],vline:z&&z[0],color:m&&m[0],thickness:v&&v[0],dashed:r&&r[0],showlabel:B&&B[0]});for(p=0;p<E;p++){v={};l=v.data=[];r=I[p]=[];for(m=0;m<D;m++)l.push({value:da[p]&&da[p][m],target:M[p]&&M[p][m],showvalue:Q[p]&&Q[p][m],tooltext:U[p]&&U[p][m]&&U[p][m].replace(/\\/g,""),tooltexttarget:V[p]&&V[p][m],color:J[p]&&J[p][m],link:Z[p]&&Z[p][m]}),r.push(da[p]&&da[p][m]);P.push(v)}O&&
this._stopUpdate();H&&this._clearChart();R&&(this.config.dataStamp=R);return L},exportChart:function(b){return k.exportChart.call(this,b)},chartHoverManager:function(){return function(b){var a=b.type,c=b.data,u=c.linkedItems.eventListeners||(c.linkedItems.eventListeners=[]);"mouseover"!==a&&"touchstart"!==a||!1!==c.mouseStateIn||(c.mouseStateIn=!0,c.onContainerRollOver(b),u.push(Ua(E?G:z,"mouseover",c.winMouseHover,c)))}}(),setChartEvents:function(){var b=this.linkedItems.eventListeners||(this.linkedItems.eventListeners=
[]),a=this.components.paper.canvas,c=this.linkedItems.container,u=C(this.jsonData.chart.enablechartmousemoveevent,0);za(c,"click",this.onContainerClick);b.push(Ua(c,"click",this.onContainerClick,this));za(a,"mouseover",this.chartHoverManager,this);za(a,"touchstart",this.chartHoverManager,this);za(a,"mouseout",this.chartHoverManager,this);za(a,"touchend",this.chartHoverManager,this);b.push(Ua(a,"mouseover touchstart mouseout touchend",this.chartHoverManager,this));za(c,"mousemove",this.onContainerMouseMove,
this);za(c,"touchmove",this.onContainerMouseMove,this);u&&b.push(Ua(c,"mousemove touchmove",this.onContainerMouseMove,this))},setChartCursor:function(){var b=this.config.link,a=this.components.paper.canvas.style;F.svg?a.cursor=b?Q:"default":this.components.paper.canvas.style.cursor=b?"hand":"default"},onContainerClick:function(b){var a=b.target||b.originalTarget||b.srcElement||b.relatedTarget||b.fromElement,c=a&&a.parentElement,u=a&&a.nodeName.toLowerCase(),f=b.data,e=f.chartInstance;b=k.getMouseCoordinate(f.linkedItems.container,
b.originalEvent);e.ref&&(e=ja({height:e.args.height,width:e.args.width,pixelHeight:e.ref.offsetHeight,pixelWidth:e.ref.offsetWidth,id:e.args.id,renderer:e.args.renderer,container:e.options.containerElement},b),g.raiseEvent("chartclick",e,f.chartInstance),a&&a.ishot&&f||"tspan"===u&&c&&c.ishot&&f||f.config.link&&f.linkedItems.linkClickFN.call(f,f))},onContainerMouseMove:function(b){var a=b.data,c=a.chartInstance;b=k.getMouseCoordinate(a.linkedItems.container,b.originalEvent);c.ref&&(c=ja({height:c.args.height,
width:c.args.width,pixelHeight:c.ref.offsetHeight,pixelWidth:c.ref.offsetWidth,id:c.args.id,renderer:c.args.renderer,container:c.options.containerElement},b),g.raiseEvent("chartMouseMove",c,a.chartInstance))},onContainerRollOver:function(b){var a=b.data,c=a.chartInstance;b=k.getMouseCoordinate(a.linkedItems.container,b.originalEvent);c.ref&&(c=ja({height:c.args.height,width:c.args.width,pixelHeight:c.ref.offsetHeight,pixelWidth:c.ref.offsetWidth,id:c.args.id,renderer:c.args.renderer,container:c.options.containerElement},
b),g.raiseEvent("chartRollOver",c,a.chartInstance))},onContainerRollOut:function(b){var a=b.chart,c=a.chartInstance;b=k.getMouseCoordinate(a.linkedItems.container,b.event);c.ref&&(c=ja({height:c.args.height,width:c.args.width,pixelHeight:c.ref.offsetHeight,pixelWidth:c.ref.offsetWidth,id:c.args.id,renderer:c.args.renderer,container:c.options.containerElement},b),g.raiseEvent("chartRollOut",c,a.chartInstance))},mouseStateIn:!1,winMouseHover:function(b){var a=b.originalEvent,a=a.target||a.originalTarget||
a.srcElement||a.relatedTarget||a.fromElement,c=b.data,u=c.components.paper;b={chart:c,event:b.originalEvent};E?u.getById(a.parentNode.raphaelid)||(c.onContainerRollOut(b),c.mouseStateIn=!1,za(G,"mouseover",c.winMouseHover)):a.viewportElement||(c.mouseStateIn=!1,c.onContainerRollOut(b),za(z,"mouseover",c.winMouseHover))},_show:function(){this.graphics&&this.graphics.parentGroup&&this.graphics.parentGroup.show()},_hide:function(){this.graphics&&this.graphics.parentGroup&&this.graphics.parentGroup.hide()},
getJobList:function(){this.jobList||(this.jobList={trackerDrawID:[],labelDrawID:[],entityDrawID:[]});return this.jobList}},xa.base,{valuefontbold:0,usemessagelog:0,zeroplanethickness:void 0,animationeffect:"easeIn",showshadow:1,showhovereffect:void 0,plothovereffect:void 0,anchorhovereffect:void 0,plotborderdashed:void 0,stack100percent:void 0,showpercentvalues:void 0,showpercentintooltip:void 0,plotbordercolor:void 0,showtooltip:1,seriesnameintooltip:1,rotatevalues:0,minimizetendency:0,plotfillangle:270,
valuepadding:2,useplotgradientcolor:1,plotborderthickness:1,plotfillalpha:ha,showvalues:1,valueposition:d,tooltipsepchar:", ",usedataplotcolorforlabels:0,placevaluesinside:0,showplotborder:1,use3dlighting:1,useroundedges:0,plotspacepercent:20,plotpaddingpercent:void 0,plotfillratio:void 0,maxcolwidth:50,plotborderdashlen:5,plotborderdashgap:4});FusionCharts.register("component",["caption","caption",{pIndex:2,customConfigFn:null,init:function(){var b=this.graphics;!this.components&&(this.components=
{});!b&&(this.graphics={})},configure:function(){var b=this.chart,a=b.jsonData.chart,c=b.components,u=c.caption,f=u.config,D=b.config.style,d=D.outCanfontFamily,g=D.outCancolor,D=D.fontSize,c=c.subCaption,K=c.config;u.components.text=Ba(a.caption);c.components.text=Ba(a.subcaption);f.style={fontFamily:M(a.captionfont,d),color:ab(M(a.captionfontcolor,g).replace(/^#? ([a-f0-9]+)/ig,"#$1")),fontSize:C(a.captionfontsize,D+3)+qb,fontWeight:0===C(a.captionfontbold)?W:p};f.align=K.align=M(a.captionalignment,
vb);switch(f.align){case pb:f.align=v;break;case kb:f.align=J;break;default:f.align=B}f.isOnTop=K.isOnTop=C(a.captionontop,1);f.isOnLeft=!C(a.captiononright,0);f.captionPosition=la(a.captionposition,e).toLowerCase();f.alignWithCanvas=K.alignWithCanvas=C(b.aligncaptionwithcanvas,a.aligncaptionwithcanvas,1);f.horizontalPadding=K.horizontalPadding=C(a.captionhorizontalpadding,f.alignWithCanvas?0:15);f.drawCaption=!0;Ya(f.style);K.style={fontFamily:M(a.subcaptionfont,a.captionfont,d),color:ab(M(a.subcaptionfontcolor,
a.captionfontcolor,g).replace(/^#? ([a-f0-9]+)/ig,"#$1")),fontSize:C(a.subcaptionfontsize,C(fa(C(a.captionfontsize)-3,-1),D)+C(b.subTitleFontSizeExtender,1))+qb,fontWeight:0===C(a.subcaptionfontbold,b.subTitleFontWeight,a.captionfontbold)?W:p};Ya(K.style)},draw:function(){var b=this.chart,a=b.config,c=b.components,u=b.config.textDirection,f=b.graphics,D=f.captionGroup,d=c.paper,g=b.linkedItems.smartLabel,K=c.caption,k=K.graphics,ca=k.captionElement,v=c.subCaption,c=v.graphics,r=c.subCaptionElement,
p=K.components,K=K.config,w=v.config,z=K.style,C=w.style,v=v.components,Ab=p.text,wb=v.text,S=K.x,F=K.align,R,O=a.showToolTip;R=b.get(l,P);var b=R.animType,H=R.animObj,E=R.dummyObj,I=R.duration;!Ab&&!wb||D||(D=f.captionGroup=d.group("caption"),D.trackTooltip(!0),f.tracker?D.insertBefore(f.trackerGroup):D.insertAfter(f.datasetGroup));Ab?(R={text:p.text,fill:z.color,x:S,y:K.y,"text-anchor":F||B,"vertical-align":K.verticalAlign||e,visibility:K.drawCaption?m:t,direction:u},ca?(ca.animateWith(E,H,{x:S,
y:K.y,"text-anchor":F||B,"vertical-align":K.verticalAlign||e,direction:u},I,b),ca.attr({"text-anchor":F||B,text:p.text,fill:z.color,visibility:K.drawCaption?m:t}),ca.css(z)):ca=k.captionElement=d.text(R,z,D),ca.tooltip(p.originalText),g&&(g.useEllipsesOnOverflow(a.useEllipsesWhenOverflow),g.setStyle(z),g.getOriSize(p.text))):ca&&(k.captionElement=ca.remove());wb?(R={text:v.text,fill:C.color,x:S,y:w.y,"text-anchor":F||B,"vertical-align":e,direction:u,visibility:K.drawCaption?m:t},r?(r.animateWith(E,
H,{x:S,y:w.y,"text-anchor":F||B,"vertical-align":e,direction:u},I,b),r.attr({"text-anchor":F||B,text:v.text,fill:C.color,visibility:K.drawCaption?m:t}),r.css(C)):r=c.subCaptionElement=d.text(R,C,D),r.tooltip(v.originalText)):r&&(c.subCaptionElement=r.remove());D&&D.trackTooltip(O?!0:!1);Ab||wb||!D||(f.captionGroup=D.remove())},manageSpace:function(b,c){var u=this.chart,e=u.config,f=u.components,D=f.caption,d=f.subCaption,g=D.config,K=d.config,D=D.components,d=d.components,k=u.jsonData.chart,u=u.linkedItems.smartLabel,
l=b,m=Ba(k.caption),v=Ba(k.subcaption),r=k=C(k.captionpadding,10),p=e.canvasWidth,B=!1,t,w,z=0,S=0,F=0,R=0,O=0,S=fa(f.canvas.config.canvasBorderThickness,0),H=f=0;!c&&(c=p);if(3<l){k<S&&(k=S+2);m!==a&&(t=g.style,R=Fa(C(parseFloat(t.fontHeight,10),parseFloat(t.lineHeight,10),12)));v!==a&&(w=K.style,O=C(parseInt(w.fontHeight,10),parseInt(w.lineHeight,10),12));if(0<R||0<O)l=fa(l,0),z=R+O+k,z>l?(S=l-z,B=!0,S<k?k=fa(S,5):(S-=k,k=0,O>S?(F=O-S+10,O=0,d._originalText=d.text,d.text=aa):(S-=O,O=0,R>S&&(F=R-
S)))):F=l-z,u.useEllipsesOnOverflow(e.useEllipsesWhenOverflow),0<R&&(u.setStyle(t),R+=F,t=u.getSmartText(m,c,R),F=R-t.height,g.height=R=t.height,D.text=t.text,D.originalText=t.tooltext?t.tooltext:!1,f=t.width),0<O&&(u.setStyle(w),O+=F,w=u.getSmartText(v,c,O),F=O-w.height,O=w.height,d.text=w.text,K.height=w.height,d.originalText=w.tooltext?w.tooltext:!1,H=w.width),B&&0<F&&(k+=Ta(r-k,F)),g.captionPadding=k,g.height=R,g.width=f,K.width=H,K.height=O,z=R+O+k;z>e.canvasHeight?(z=0,g.drawCaption=!1):g.drawCaption=
!0;e=g.isOnTop?{top:z}:{bottom:z,top:5}}else e={bottom:0,top:0},g.drawCaption=!1;return e},managePosition:function(){var b=this.chart,a=b.config,c=b.components,u=c.caption,f=u.config,e=f.widgetValueHeight||0,D=c.subCaption.config,d=f.x,g=a.canvasWidth,d=f.align,u=u.components.text,K=f.alignWithCanvas,k=f.horizontalPadding,l=a.width,m=a.canvasLeft,r=a.canvasRight,p=a.marginRight,B=a.marginLeft,a=a.marginTop,t=(wa(m)||0)+C(g,l)/2,g=f.height,w=D.height,z=c.legend.config,S=z.height,F=z.legendPadding,
R=z.legendPos,O=c.gradientLegend||{},H=0,E=!!(O.conf||{}).showLegend,I=b.config.borderWidth,c=c.actionBar,ia=0;z.isActive||(S=0);E&&b.config.gLegendEnabled&&(H=O.getLogicalSpace().height);switch(d){case v:d=K?r-k:l-k;break;case J:d=K?m+k:k;break;default:d=K?t:B+.5*(l-B-p)||l/2}f.x=d;f.isOnTop?f.y=(I||0)+(a||0)+(f._offsetHeight||0):(R===pb&&(H=S=F=0),c&&(d=c.getLogicalSpace()||{},ia=d.height,void 0===ia||Infinity===ia||0>ia)&&(ia=0),f.y=b.config.height-b.config.marginBottom-g-(w||0)-(I||0)-(F||0)-
(S||0)-H-e-ia);D.y=u?f.y+g+2:f.y||a||0}}]);FusionCharts.register("component",["caption","subcaption",{pIndex:2,init:function(){var b=this.graphics;!this.components&&(this.components={});!b&&(this.graphics={})}}]);xa("scrollbase",{standaloneInit:!1,_scrollBar:function(){var b=[];return{get:function(){return b},clear:function(){b.length=0},add:function(a,c){b.push({conf:a,handler:c})}}}()},xa.mscartesian);xa("msinversecartesian",{standaloneInit:!1,_createAxes:function(){var b=this.components,a=FusionCharts.register("component",
["axis","cartesian"]),c;b.yAxis=[];b.xAxis=[];b.yAxis[0]=c=new a;b.xAxis[0]=b=new a;c.chart=this;b.chart=this;c.init();b.init();this._setCategories()},_feedAxesRawData:function(){var a=this.components,c=this.config,u=a.colorManager,e=this.jsonData,f=e.chart,D,d=(D=this.is3d)?b.chart3D:b.chart2D;D={outCanfontFamily:M(f.outcnvbasefont,f.basefont,"Verdana,sans"),outCanfontSize:Ma(f.outcnvbasefontsize,f.basefontsize,10),outCancolor:M(f.outcnvbasefontcolor,f.basefontcolor,u.getColor(d.baseFontColor)).replace(/^#? ([a-f0-9]+)/ig,
"#$1"),axisNamePadding:f.xaxisnamepadding,axisValuePadding:f.labelpadding,axisNameFont:f.xaxisnamefont,axisNameFontSize:f.xaxisnamefontsize,axisNameFontColor:f.xaxisnamefontcolor,axisNameFontBold:f.xaxisnamefontbold,axisNameFontItalic:f.xaxisnamefontitalic,axisNameBgColor:f.xaxisnamebgcolor,axisNameBorderColor:f.xaxisnamebordercolor,axisNameAlpha:f.xaxisnamealpha,axisNameFontAlpha:f.xaxisnamefontalpha,axisNameBgAlpha:f.xaxisnamebgalpha,axisNameBorderAlpha:f.xaxisnameborderalpha,axisNameBorderPadding:f.xaxisnameborderpadding,
axisNameBorderRadius:f.xaxisnameborderradius,axisNameBorderThickness:f.xaxisnameborderthickness,axisNameBorderDashed:f.xaxisnameborderdashed,axisNameBorderDashLen:f.xaxisnameborderdashlen,axisNameBorderDashGap:f.xaxisnameborderdashgap,useEllipsesWhenOverflow:f.useellipseswhenoverflow,divLineColor:M(f.vdivlinecolor,f.divlinecolor,u.getColor(d.divLineColor)),divLineAlpha:M(f.vdivlinealpha,f.divlinealpha,D?u.getColor("divLineAlpha3D"):u.getColor("divLineAlpha")),divLineThickness:C(f.vdivlinethickness,
f.divlinethickness,1),divLineIsDashed:!!C(f.vdivlinedashed,f.vdivlineisdashed,f.divlinedashed,f.divlineisdashed,0),divLineDashLen:C(f.vdivlinedashlen,f.divlinedashlen,4),divLineDashGap:C(f.vdivlinedashgap,f.divlinedashgap,2),showAlternateGridColor:C(f.showalternatevgridcolor,0),alternateGridColor:M(f.alternatevgridcolor,u.getColor("altVGridColor")),alternateGridAlpha:M(f.alternatevgridalpha,u.getColor("altVGridAlpha")),numDivLines:f.numvdivlines,maxLabelHeight:f.maxlabelheight,labelFont:f.labelfont,
labelFontSize:f.labelfontsize,labelFontColor:f.labelfontcolor,labelFontAlpha:f.labelalpha,labelFontBold:f.labelfontbold,labelFontItalic:f.labelfontitalic,axisName:f.xaxisname,axisMinValue:f.xaxisminvalue,axisMaxValue:f.xaxismaxvalue,setAdaptiveMin:f.setadaptivexmin,adjustDiv:f.adjustvdiv,labelDisplay:f.labeldisplay,showLabels:f.showlabels,rotateLabels:f.rotatelabels,slantLabel:C(f.slantlabels,f.slantlabel),labelStep:C(f.labelstep,f.xaxisvaluesstep),showAxisValues:C(f.showxaxisvalues,f.showxaxisvalue),
showLimits:f.showvlimits,showDivLineValues:C(f.showvdivlinevalues,f.showvdivlinevalues),showZeroPlane:f.showvzeroplane,zeroPlaneColor:f.vzeroplanecolor,zeroPlaneThickness:f.vzeroplanethickness,zeroPlaneAlpha:f.vzeroplanealpha,showZeroPlaneValue:f.showvzeroplanevalue,trendlineColor:f.trendlinecolor,trendlineToolText:f.trendlinetooltext,trendlineThickness:f.trendlinethickness,trendlineAlpha:f.trendlinealpha,showTrendlinesOnTop:f.showtrendlinesontop,showAxisLine:C(f.showxaxisline,f.showaxislines,f.drawAxisLines,
0),axisLineThickness:C(f.xaxislinethickness,f.axislinethickness,1),axisLineAlpha:C(f.xaxislinealpha,f.axislinealpha,100),axisLineColor:M(f.xaxislinecolor,f.axislinecolor,"#000000")};c={outCanfontFamily:M(f.outcnvbasefont,f.basefont,"Verdana,sans"),outCanfontSize:Ma(f.outcnvbasefontsize,f.basefontsize,10),outCancolor:M(f.outcnvbasefontcolor,f.basefontcolor,u.getColor(d.baseFontColor)).replace(/^#? ([a-f0-9]+)/ig,"#$1"),axisNamePadding:f.yaxisnamepadding,axisValuePadding:f.yaxisvaluespadding,axisNameFont:f.yaxisnamefont,
axisNameFontSize:f.yaxisnamefontsize,axisNameFontColor:f.yaxisnamefontcolor,axisNameFontBold:f.yaxisnamefontbold,axisNameFontItalic:f.yaxisnamefontitalic,axisNameBgColor:f.yaxisnamebgcolor,axisNameBorderColor:f.yaxisnamebordercolor,axisNameAlpha:f.yaxisnamealpha,axisNameFontAlpha:f.yaxisnamefontalpha,axisNameBgAlpha:f.yaxisnamebgalpha,axisNameBorderAlpha:f.yaxisnameborderalpha,axisNameBorderPadding:f.yaxisnameborderpadding,axisNameBorderRadius:f.yaxisnameborderradius,axisNameBorderThickness:f.yaxisnameborderthickness,
axisNameBorderDashed:f.yaxisnameborderdashed,axisNameBorderDashLen:f.yaxisnameborderdashlen,axisNameBorderDashGap:f.yaxisnameborderdashgap,axisNameWidth:f.yaxisnamewidth,useEllipsesWhenOverflow:f.useellipseswhenoverflow,rotateAxisName:C(f.rotateyaxisname,1),axisName:f.yaxisname,divLineColor:M(f.divlinecolor,u.getColor(d.divLineColor)),divLineAlpha:M(f.divlinealpha,u.getColor("divLineAlpha")),divLineThickness:C(f.divlinethickness,1),divLineIsDashed:!!C(f.divlinedashed,f.divlineisdashed,0),divLineDashLen:C(f.divlinedashlen,
4),divLineDashGap:C(f.divlinedashgap,2),showAlternateGridColor:C(f.showalternatehgridcolor,1),alternateGridColor:M(f.alternatehgridcolor,u.getColor("altHGridColor")),alternateGridAlpha:M(f.alternatehgridalpha,u.getColor("altHGridAlpha")),numDivLines:f.numdivlines,axisMinValue:f.yaxisminvalue,axisMaxValue:f.yaxismaxvalue,setAdaptiveMin:f.setadaptiveymin,adjustDiv:f.adjustdiv,labelStep:f.yaxisvaluesstep,showAxisValues:C(f.showyaxisvalues,f.showyaxisvalue),showLimits:C(f.showyaxislimits,f.showlimits,
this.showLimits),showDivLineValues:C(f.showdivlinevalues,f.showdivlinevalue),showZeroPlane:f.showzeroplane,zeroPlaneColor:f.zeroplanecolor,zeroPlaneThickness:C(f.zeroplanethickness,f.divlinethickness,c.zeroplanethickness,2),zeroPlaneAlpha:C(f.zeroplanealpha,f.zeroplanealpha,c.zeroplanealpha,80),showZeroPlaneValue:f.showzeroplanevalue,showZeroPlaneOnTop:c.showzeroplaneontop,trendlineColor:f.trendlinecolor,trendlineToolText:f.trendlinetooltext,trendlineThickness:f.trendlinethickness,trendlineAlpha:f.trendlinealpha,
showTrendlinesOnTop:f.showtrendlinesontop,showAxisLine:C(f.showyaxisline,f.showaxislines,f.drawAxisLines,0),axisLineThickness:C(f.yaxislinethickness,f.axislinethickness,1),axisLineAlpha:C(f.yaxislinealpha,f.axislinealpha,100),axisLineColor:M(f.yaxislinecolor,f.axislinecolor,"#000000")};D.vtrendlines=e.vtrendlines;c.trendlines=e.trendlines;e=a.yAxis&&a.yAxis[0];a=a.xAxis&&a.xAxis[0];e&&(e.setCommonConfigArr(c,!0,!0,!1),e.configure());a&&(a.setCommonConfigArr(D,!1,!1,!1),a.configure(),a.setAxisConfig({isRelativeAxisInverse:!0}))}},
xa.mscartesian);xa("sscartesian",{standaloneInit:!1,hasLegend:!1,_createDatasets:function(){var b=this.components,a=b.legend,c=this.jsonData,u=c.dataset,f=c.data||u&&u[0].data,e=this.defaultDatasetType,D,d,c=this._dataSegregator(f);this.config.categories=c.data;u=b.dataset||(b.dataset=[]);if(!f||0===f.length)this.setChartMessage();else if(e&&(d=FusionCharts.get("component",["dataset",e])))if(f="datasetGroup_"+e,D=FusionCharts.register("component",["datasetGroup",e]),e=b[f],D&&!e&&(e=b[f]=new D,e.chart=
this,e.init()),u[0]){b=u[0];e=b.JSONData;u=b.components.data||[];f=e.data.length-(b.config.showSum||0);d=c.data&&c.data.length||0;if(f>d){if(a)for(e=d;e<f;e++)u[e]&&u[e].legendItemId&&a.removeItem(u[e].legendItemId);b.removeData(d,f-d,!1)}b.JSONData=c;b.configure()}else b=new d,u.push(b),b.chart=this,e&&e.addDataSet(b,0,0),b.index=0,b.init(c)},_dataSegregator:function(b){var a=[];xb(b,function(b){"true"!==b.vline&&!0!==b.vline&&1!==b.vline&&"1"!==b.vline&&a.push(b)});return{data:a}},_setCategories:function(){var b=
this.jsonData,a=b.dataset;this.components.xAxis[0].setCategory(b.data||a&&a[0].data)}},xa.mscartesian,{linethickness:4});xa("msdybasecartesian",{standaloneInit:!1,_createAxes:function(){var b=this.components,a,c=FusionCharts.register("component",["axis","cartesian"]),u;b.yAxis=[];b.xAxis=[];b.yAxis[0]=u=new c;b.yAxis[1]=a=new c;b.xAxis[0]=b=new c;u.chart=this;a.chart=this;b.chart=this;u.init();a.init();b.init();this._setCategories()},_feedAxesRawData:function(){var a=this.config,c=this.components,
u=c.colorManager,e=this.jsonData,f=e.chart,D,d,g=this.is3d,K=g?b.chart3D:b.chart2D,k,l=a.primaryAxisOnleft=C(f.primaryaxisonleft,1),m=C(f.syncaxislimits,0);d=[{line:[]}];k=[{line:[]}];var v,r=e.trendlines||[];D={outCanfontFamily:M(f.outcnvbasefont,f.basefont,"Verdana,sans"),outCanfontSize:Ma(f.outcnvbasefontsize,f.basefontsize,10),outCancolor:M(f.outcnvbasefontcolor,f.basefontcolor,u.getColor(K.baseFontColor)).replace(/^#? ([a-f0-9]+)/ig,"#$1"),axisNamePadding:f.xaxisnamepadding,axisValuePadding:f.labelpadding,
axisNameFont:f.xaxisnamefont,axisNameFontSize:f.xaxisnamefontsize,axisNameFontColor:f.xaxisnamefontcolor,axisNameFontBold:f.xaxisnamefontbold,axisNameFontItalic:f.xaxisnamefontitalic,axisNameBgColor:f.xaxisnamebgcolor,axisNameBorderColor:f.xaxisnamebordercolor,axisNameAlpha:f.xaxisnamealpha,axisNameFontAlpha:f.xaxisnamefontalpha,axisNameBgAlpha:f.xaxisnamebgalpha,axisNameBorderAlpha:f.xaxisnameborderalpha,axisNameBorderPadding:f.xaxisnameborderpadding,axisNameBorderRadius:f.xaxisnameborderradius,
axisNameBorderThickness:f.xaxisnameborderthickness,axisNameBorderDashed:f.xaxisnameborderdashed,axisNameBorderDashLen:f.xaxisnameborderdashlen,axisNameBorderDashGap:f.xaxisnameborderdashgap,useEllipsesWhenOverflow:f.useellipseswhenoverflow,divLineColor:M(f.vdivlinecolor,f.divlinecolor,u.getColor(K.divLineColor)),divLineAlpha:M(f.vdivlinealpha,f.divlinealpha,g?u.getColor("divLineAlpha3D"):u.getColor("divLineAlpha")),divLineThickness:C(f.vdivlinethickness,f.divlinethickness,1),divLineIsDashed:!!C(f.vdivlinedashed,
f.vdivlineisdashed,f.divlinedashed,f.divlineisdashed,0),divLineDashLen:C(f.vdivlinedashlen,f.divlinedashlen,4),divLineDashGap:C(f.vdivlinedashgap,f.divlinedashgap,2),showAlternateGridColor:C(f.showalternatevgridcolor,0),alternateGridColor:M(f.alternatevgridcolor,u.getColor("altVGridColor")),alternateGridAlpha:M(f.alternatevgridalpha,u.getColor("altVGridAlpha")),numDivLines:f.numvdivlines,maxLabelHeight:f.maxlabelheight,labelFont:f.labelfont,labelFontSize:f.labelfontsize,labelFontColor:f.labelfontcolor,
labelFontAlpha:f.labelalpha,labelFontBold:f.labelfontbold,labelFontItalic:f.labelfontitalic,axisName:f.xaxisname,axisMinValue:f.xaxisminvalue,axisMaxValue:f.xaxismaxvalue,setAdaptiveMin:f.setadaptivexmin,adjustDiv:f.adjustvdiv,labelDisplay:f.labeldisplay,showLabels:f.showlabels,rotateLabels:f.rotatelabels,slantLabel:C(f.slantlabels,f.slantlabel),labelStep:C(f.labelstep,f.xaxisvaluesstep),showAxisValues:C(f.showxaxisvalues,f.showxaxisvalue),showLimits:f.showvlimits,showDivLineValues:C(f.showvdivlinevalues,
f.showvdivlinevalues),zeroPlaneColor:f.vzeroplanecolor,zeroPlaneThickness:C(f.vzeroplanethickness,f.vdivlinethickness,2),zeroPlaneAlpha:C(f.vzeroplanealpha,f.vdivlinealpha,a.zeroplanealpha),showZeroPlaneValue:f.showvzeroplanevalue,trendlineColor:f.trendlinecolor,trendlineToolText:f.trendlinetooltext,trendlineThickness:f.trendlinethickness,trendlineAlpha:f.trendlinealpha,showTrendlinesOnTop:f.showtrendlinesontop,showAxisLine:g?0:C(f.showxaxisline,f.showaxislines,f.drawAxisLines,0),axisLineThickness:C(f.xaxislinethickness,
f.axislinethickness,1),axisLineAlpha:C(f.xaxislinealpha,f.axislinealpha,100),axisLineColor:M(f.xaxislinecolor,f.axislinecolor,"#000000")};a={outCanfontFamily:M(f.outcnvbasefont,f.basefont,"Verdana,sans"),outCanfontSize:Ma(f.outcnvbasefontsize,f.basefontsize,10),outCancolor:M(f.outcnvbasefontcolor,f.basefontcolor,u.getColor(K.baseFontColor)).replace(/^#? ([a-f0-9]+)/ig,"#$1"),axisNamePadding:C(f.pyaxisnamepadding,f.yaxisnamepadding),axisValuePadding:C(f.pyaxisvaluespadding,f.yaxisvaluespadding),axisNameFont:M(f.pyaxisnamefont,
f.yaxisnamefont),axisNameFontSize:C(f.pyaxisnamefontsize,f.yaxisnamefontsize),axisNameFontColor:M(f.pyaxisnamefontcolor,f.yaxisnamefontcolor),axisNameFontBold:C(f.pyaxisnamefontbold,f.yaxisnamefontbold),axisNameFontItalic:C(f.pyaxisnamefontitalic,f.yaxisnamefontitalic),axisNameBgColor:M(f.pyaxisnamebgcolor,f.yaxisnamebgcolor),axisNameBorderColor:M(f.pyaxisnamebordercolor,f.yaxisnamebordercolor),axisNameAlpha:C(f.pyaxisnamealpha,f.yaxisnamealpha),axisNameFontAlpha:C(f.pyaxisnamefontalpha,f.yaxisnamefontalpha),
axisNameBgAlpha:C(f.pyaxisnamebgalpha,f.yaxisnamebgalpha),axisNameBorderAlpha:C(f.pyaxisnameborderalpha,f.yaxisnameborderalpha),axisNameBorderPadding:C(f.pyaxisnameborderpadding,f.yaxisnameborderpadding),axisNameBorderRadius:C(f.pyaxisnameborderradius,f.yaxisnameborderradius),axisNameBorderThickness:C(f.pyaxisnameborderthickness,f.yaxisnameborderthickness),axisNameBorderDashed:C(f.pyaxisnameborderdashed,f.yaxisnameborderdashed),axisNameBorderDashLen:C(f.pyaxisnameborderdashlen,f.yaxisnameborderdashlen),
axisNameBorderDashGap:C(f.pyaxisnameborderdashgap,f.yaxisnameborderdashgap),axisNameWidth:C(f.pyaxisnamewidth,f.yaxisnamewidth),useEllipsesWhenOverflow:f.useellipseswhenoverflow,rotateAxisName:C(f.rotateyaxisname,1),axisName:M(f.pyaxisname,f.yaxisname),divLineColor:M(f.divlinecolor,u.getColor(K.divLineColor)),divLineAlpha:M(f.divlinealpha,u.getColor("divLineAlpha")),divLineThickness:C(f.divlinethickness,1),divLineIsDashed:!!C(f.divlinedashed,f.divlineisdashed,0),divLineDashLen:C(f.divlinedashlen,
4),divLineDashGap:C(f.divlinedashgap,2),showAlternateGridColor:C(f.showalternatehgridcolor,1),alternateGridColor:M(f.alternatehgridcolor,u.getColor("altHGridColor")),alternateGridAlpha:M(f.alternatehgridalpha,u.getColor("altHGridAlpha")),numDivLines:f.numdivlines,axisMinValue:m?C(f.syaxisminvalue,f.pyaxisminvalue,f.yaxisminvalue):C(f.pyaxisminvalue,f.yaxisminvalue),axisMaxValue:m?C(f.syaxismaxvalue,f.pyaxismaxvalue,f.yaxismaxvalue):C(f.pyaxismaxvalue,f.yaxismaxvalue),setAdaptiveMin:f.setadaptiveymin,
adjustDiv:f.adjustdiv,labelStep:f.yaxisvaluesstep,showAxisValues:C(f.showyaxisvalues,f.showyaxisvalue),showLimits:C(f.showyaxislimits,f.showlimits,this.showLimits),showDivLineValues:C(f.showdivlinevalues,f.showdivlinevalue),zeroPlaneColor:f.zeroplanecolor,zeroPlaneThickness:C(f.zeroplanethickness,f.divlinethickness,a.zeroplanethickness,2),zeroPlaneAlpha:C(f.zeroplanealpha,f.divlinealpha,a.zeroplanealpha),showZeroPlaneValue:f.showzeroplanevalue,showZeroPlaneOnTop:a.showzeroplaneontop,trendlineColor:f.trendlinecolor,
trendlineToolText:f.trendlinetooltext,trendlineThickness:f.trendlinethickness,trendlineAlpha:f.trendlinealpha,showTrendlinesOnTop:f.showtrendlinesontop,showAxisLine:g?0:C(f.showyaxisline,f.showaxislines,f.drawAxisLines,0),axisLineThickness:C(f.yaxislinethickness,f.axislinethickness,1),axisLineAlpha:C(f.yaxislinealpha,f.axislinealpha,100),axisLineColor:M(f.yaxislinecolor,f.axislinecolor,"#000000")};u={outCanfontFamily:M(f.outcnvbasefont,f.basefont,"Verdana,sans"),outCanfontSize:Ma(f.outcnvbasefontsize,
f.basefontsize,10),outCancolor:M(f.outcnvbasefontcolor,f.basefontcolor,u.getColor(K.baseFontColor)).replace(/^#? ([a-f0-9]+)/ig,"#$1"),axisNamePadding:f.yaxisnamepadding,axisValuePadding:f.yaxisvaluespadding,axisNameFont:f.syaxisnamefont,axisNameFontSize:f.syaxisnamefontsize,axisNameFontColor:f.syaxisnamefontcolor,axisNameFontBold:f.syaxisnamefontbold,axisNameFontItalic:f.syaxisnamefontitalic,axisNameBgColor:f.syaxisnamebgcolor,axisNameBorderColor:f.syaxisnamebordercolor,axisNameAlpha:f.syaxisnamealpha,
axisNameFontAlpha:f.syaxisnamefontalpha,axisNameBgAlpha:f.syaxisnamebgalpha,axisNameBorderAlpha:f.syaxisnameborderalpha,axisNameBorderPadding:f.syaxisnameborderpadding,axisNameBorderRadius:f.syaxisnameborderradius,axisNameBorderThickness:f.syaxisnameborderthickness,axisNameBorderDashed:f.syaxisnameborderdashed,axisNameBorderDashLen:f.syaxisnameborderdashlen,axisNameBorderDashGap:f.syaxisnameborderdashgap,axisNameWidth:f.syaxisnamewidth,useEllipsesWhenOverflow:f.useellipseswhenoverflow,rotateAxisName:C(f.rotateyaxisname,
1),axisName:f.syaxisname,divLineColor:M(f.divlinecolor,u.getColor(K.divLineColor)),divLineAlpha:M(f.divlinealpha,u.getColor("divLineAlpha")),divLineThickness:C(f.divlinethickness,1),divLineIsDashed:!!C(f.divlinedashed,f.divlineisdashed,0),divLineDashLen:C(f.divlinedashlen,4),divLineDashGap:C(f.divlinedashgap,2),showAlternateGridColor:C(f.showalternatehgridcolor,1),alternateGridColor:M(f.alternatehgridcolor,u.getColor("altHGridColor")),alternateGridAlpha:M(f.alternatehgridalpha,u.getColor("altHGridAlpha")),
numDivLines:f.numdivlines,axisMinValue:m?C(f.syaxisminvalue,f.pyaxisminvalue,f.yaxisminvalue):f.syaxisminvalue,axisMaxValue:m?C(f.syaxismaxvalue,f.pyaxismaxvalue,f.yaxismaxvalue):f.syaxismaxvalue,setAdaptiveMin:f.setadaptivesymin||f.setadaptiveymin,adjustDiv:f.adjustdiv,labelStep:f.yaxisvaluesstep,showAxisValues:C(f.showsyaxisvalues,f.showsyaxisvalue,f.showyaxisvalues,f.showyaxisvalue),showLimits:C(f.showsecondarylimits,f.showyaxislimits,f.showlimits),showDivLineValues:C(f.showdivlinesecondaryvalue,
f.showyaxisvalues,f.showyaxisvalue,1),zeroPlaneColor:f.zeroplanecolor,zeroPlaneThickness:C(f.zeroplanethickness,f.divlinethickness,2),zeroPlaneAlpha:f.zeroplanealpha,showZeroPlaneValue:f.showzeroplanevalue,trendlineColor:f.trendlinecolor,trendlineToolText:f.trendlinetooltext,trendlineThickness:f.trendlinethickness,trendlineAlpha:f.trendlinealpha,showTrendlinesOnTop:f.showtrendlinesontop,showAxisLine:g?0:C(f.showsyaxisline,f.showaxislines,f.drawAxisLines,0),axisLineThickness:C(f.syaxislinethickness,
f.axislinethickness,1),axisLineAlpha:C(f.syaxislinealpha,f.axislinealpha,100),axisLineColor:M(f.syaxislinecolor,f.axislinecolor,"#000000")};D.vtrendlines=e.vtrendlines;m=0;for(K=r.length;m<K;m++)for(e=r[m]&&r[m].line||[],g=e.length,v=0;v<g;v++)f=e[v]||{},f.parentyaxis&&f.parentyaxis.toLowerCase(),"s"===f.parentyaxis?d[0].line.push(f):k[0].line.push(f);a.trendlines=k;u.trendlines=d;k=c.yAxis[0];d=c.yAxis[1];c=c.xAxis[0];1===l?(k.setCommonConfigArr(a,!0,!1,!1),d.setCommonConfigArr(u,!0,!1,!0)):(k.setCommonConfigArr(a,
!0,!1,!0),d.setCommonConfigArr(u,!0,!1,!1));c.setCommonConfigArr(D,!1,!1,!1);k.configure();d.configure();c.configure();d.setAxisConfig({isActive:!1,isPercent:this.isPercentage,axisIndex:1,uniqueClassName:1})},_setAxisLimits:function(){var b=this.components,a=b.dataset,c=b.yAxis,b=b.xAxis,u,f=a.length,e,D=-Infinity,d=Infinity,g=-Infinity,K=Infinity,k=Infinity,l=-Infinity,m,v=C(this.jsonData.chart.syncaxislimits,0),r={},p=function(b){return-Infinity===b||Infinity===b?null:b},B=function(b){t?(g=fa(g,
b.sYMax||b.max),K=Ta(K,b.sYMin||b.min)):(D=fa(D,b.max),d=Ta(d,b.min));l=fa(l,b.xMax||-Infinity);k=Ta(k,b.xMin||Infinity)},t=0;for(e=0;e<f;e++)u=a[e],m=u.groupManager,t=u.config.parentYAxis,m?(r[u.type]=m,r[u.type].yAxisIndex=t):(u=u.getDataLimits(),B(u));for(m in r)t=r[m].yAxisIndex,u=r[m].getDataLimits(),D=fa(D,u.max),d=Ta(d,u.min),g=fa(g,u.sYMax),K=Ta(K,u.sYMin);v?(a=fa(D,g),m=Ta(d,K),c[0].setDataLimit(a,m),c[1].setDataLimit(a,m)):(D=p(D),d=p(d),g=p(g),K=p(K),c[0].setDataLimit(D,d),c[1].setDataLimit(g,
K));c[0].getDivLineCount();if(-Infinity!==l||Infinity!==k)b[0].config.xaxisrange={max:l,min:k},b[0].setDataLimit(l,k)},_postSpaceManagement:function(){var b=this.config,a=this.components,c=a.yAxis,u=a.xAxis&&a.xAxis[0],f=c[0],c=c[1],e=a.legend,D=b.xDepth,d=a.canvas.config,g=d.canvasBorderWidth,K=d.canvasPadding,k=d.canvasPaddingLeft,l=d.canvasPaddingRight,a=d.canvasPaddingTop,m=b.primaryAxisOnleft,d=d.canvasPaddingBottom;u&&u.setAxisDimention({x:b.canvasLeft+(D||0)+fa(k,K),y:b.canvasBottom+(b.shift||
0)+g,opposite:b.canvasTop-g,axisLength:b.canvasWidth-(D||0)-fa(k,K)-fa(l,K)});m?(b.yAxisStartXPos=b.canvasLeft-g,b.sYAxisStartXPos=b.canvasRight+g):(b.yAxisStartXPos=b.canvasRight+g,b.sYAxisStartXPos=b.canvasLeft-g);g=b.yAxisStartXPos;K=b.sYAxisStartXPos;f&&f.setAxisDimention({x:g,y:b.canvasTop+a,opposite:K,axisLength:b.canvasHeight-a-d});c&&c.setAxisDimention({x:K,y:b.canvasTop+a,opposite:g,axisLength:b.canvasHeight-a-d});u&&u.shiftLabels(-D,0);e.postSpaceManager();this.config.realtimeEnabled&&this._setRealTimeCategories&&
this._setRealTimeCategories();this._adjustCanvasPadding()}},xa.mscartesian);xa("mscartesian3d",{standaloneInit:!1,is3d:!0,_createDatasets:function(){var b=this.components,a=b.xAxis[0],c=this.jsonData,u=c.dataset,f=u&&u.length,e,D,d,g=this.defaultDatasetType,K=this.applicableDSList,k=this.components.legend,l,m,v,r,p=this.config.isstacked,B,t,w=[],z=this.isRealTime,C=this.config.catLen,R={};u||this.setChartMessage();this.config.categories=c.categories&&c.categories[0].category;e=b.dataset||(b.dataset=
[]);D=e.length;for(c=0;c<f;c++)if(r=u[c],r.seriesname&&(r.seriesname=Ba(r.seriesname)),d=r.parentyaxis||aa,m=(m=this.isDual&&"s"===d.toLowerCase()?M(r.renderas,this.sDefaultDatasetType):M(r.renderas,g))&&m.toLowerCase(),K[m]||(m=g),v=FusionCharts.get("component",["dataset",m]))void 0===R[m]?R[m]=0:R[m]++,B="datasetGroup_"+m,d=FusionCharts.register("component",["datasetGroup",m]),(l=b[B])&&w.push(l),d&&!l&&(l=b[B]=new d,l.chart=this,l.init()),(d=e[c])?(m=a.getCategoryLen(),B=C-m,v=z?d.components:d.JSONData,
t=v.data&&v.data.length||0,v=r.data&&r.data.length||0,t-=v,B>t||(B=t,m=v),0<B&&d.removeData(m,B,!1),e[c].JSONData=r,e[c].configure(),e[c]._deleteGridImages&&e[c]._deleteGridImages()):(d=new v,e.push(d),d.chart=this,d.index=c,l&&(p?l.addDataSet(d,0,R[m]):l.addDataSet(d,R[m],0)),d.init(r));if(D>f){B=D-f;l&&p&&l.removeDataSet(0,c,B);b=c;for(f=B+c;b<f;b++)l&&!p&&l.removeDataSet(c,0,1),e[b].visible=!1,e[b].draw(),k.removeItem(e[b].legendItemId);e.splice(c,B)}this.config.catLen=a.getCategoryLen()},_drawCanvas:function(){var a=
this.config,c=a.canvasLeft,u=a.canvasTop,e=a.canvasWidth,f=a.canvasHeight,D=this.jsonData.chart,d=this.components,g=d.canvas,K=d.colorManager,d=d.paper,k=g.graphics,m=k.canvasBorderElement,v=k.canvasElement,r=g.config,p=r.clip={},g=this.graphics.canvasGroup,B=k.canvasBg,t=k.canvas3DBase,z=this.get(l,P),Ab=z.animType,wb=z.animObj,S=z.dummyObj,z=z.duration,H=k.canvas3dbaseline,R=r.canvasBgColor,O=r.showCanvasBG=!!C(D.showcanvasbg,1),E=a.canvasBgDepth,I=a.showCanvasBase,Q=a.canvasBaseDepth,ia=r.canvasBaseColor3D=
M(D.canvasbasecolor,K.getColor("canvasBaseColor3D")),da=r.use3DLighting=C(D.use3dlighting,1),R=b.chart3D,Qa=r.canvasBorderRadius=C(D.plotborderradius,0),J=r.canvasBorderColor=ab(M(D.canvasbordercolor,K.getColor("canvasBorderColor"))),U=r.canBGAlpha=M(D.canvasbgalpha,K.getColor("canvasBgAlpha")),V=r.canBGColor=M(D.canvasbgcolor,K.getColor(R.canvasBgColor)),G=a.xDepth,D=a.yDepth,K=a.canvasBasePadding||2,R=da?r.canvasBgColor={FCcolor:{color:hb(V,85)+bb+gb(V,55),alpha:U+bb+U,ratio:tb,angle:cb(a.width-
(a.marginLeft+a.marginRight),a.height-(a.marginTop+a.marginBottom),1)}}:r.canvasBgColor=ab(V,U);V.split(bb);U.split(bb);G=r.xDepth=10;D=r.yDepth=10;a={x:c-0,y:u-0,width:e+0,height:f+0,r:Qa,"stroke-width":0,stroke:J,"stroke-linejoin":w};m?(m.animateWith(S,wb,{x:c-0,y:u-0,width:e+0,height:f+0,r:Qa},z,Ab),m.attr({"stroke-width":0,stroke:J,"stroke-linejoin":w})):k.canvasBorderElement=d.rect(a,g);p["clip-canvas"]=[fa(0,c-G),fa(0,u),fa(1,e+G),fa(1,f+D)];p["clip-canvas-init"]=[fa(0,c-G),fa(0,u-D),1,fa(1,
f+2*D)];a={x:c,y:u,width:e,height:f,r:Qa,"stroke-width":0,stroke:"none",fill:Ra(R)};O?(v?(v.show(),v.animateWith(S,wb,{x:c,y:u,width:e,height:f,r:Qa},z,Ab),v.attr({"stroke-width":0,stroke:"none",fill:Ra(R)})):k.canvasElement=d.rect(a,g),a=["M",c+e,",",u,"L",c+e+E,",",u+1.2*E,",",c+e+E,",",u+f-E,",",c+e,",",u+f,"Z"],B?(B.show(),B.animateWith(S,wb,{path:a},z,Ab),B.attr({path:a})):B=k.canvasBg=d.path(a,g),B.attr({"stroke-width":0,stroke:"none",fill:Ra(R)})):(v&&v.hide(),B&&B.hide());I?(a=c-G-K,m=u+f+
D+K,v=G+K,B=D+K,t?(t.show(),t._.cubeside.show(),t._.cubetop.show(),t.animateWith(S,wb,{cubepath:[a,m,e,Q,v,B]},z,Ab),t.attr({cubepath:[a,m,e,Q,v,B]})):t=k.canvas3DBase=d.cubepath(a,m,e,Q,v,B,g),t.attr({stroke:"none","stroke-width":0,fill:[ia.replace(N,na),!da]}),H?(H.show(),H.animateWith(S,wb,{path:["M",c,u+f,"H",e+c]},z,Ab)):H=k.canvas3dbaseline=d.path(void 0,g),H.attr({path:["M",c,u+f,"H",e+c],stroke:F.tintshade(ia.replace(N,na),.05).rgba})):(t&&(t.hide(),t._.cubeside.hide(),t._.cubetop.hide()),
H&&H.hide())}},xa.mscartesian,{showplotborder:0});xa("msdybasecartesian3d",{standaloneInit:!1,is3d:!0,_drawCanvas:xa.mscartesian3d},xa.msdybasecartesian);xa("sscartesian3d",{standaloneInit:!1,hasLegend:!1,is3d:!0,_drawCanvas:xa.mscartesian3d},xa.sscartesian,{showplotborder:0});xa("msbarcartesian",{standaloneInit:!1,_createAxes:function(){var b=this.components,a=FusionCharts.get("component",["axis","cartesian"]),c;b.yAxis=[];b.xAxis=[];b.yAxis[0]=c=new a;b.xAxis[0]=b=new a;c.chart=this;b.chart=this;
c.init();b.init();this._setCategories()},_feedAxesRawData:function(){var a=this.config,c=this.components,u=c.colorManager,e=this.jsonData,f=e.chart,D,d=this.is3d,g=d?b.chart3D:b.chart2D;D={outCanfontFamily:M(f.outcnvbasefont,f.basefont,"Verdana,sans"),outCanfontSize:Ma(f.outcnvbasefontsize,f.basefontsize,10),outCancolor:M(f.outcnvbasefontcolor,f.basefontcolor,u.getColor(g.baseFontColor)).replace(/^#? ([a-f0-9]+)/ig,"#$1"),axisNamePadding:f.xaxisnamepadding,maxLabelWidthPercent:f.maxlabelwidthpercent,
axisValuePadding:f.labelpadding,axisNameFont:f.xaxisnamefont,axisNameFontSize:f.xaxisnamefontsize,axisNameFontColor:f.xaxisnamefontcolor,axisNameFontBold:f.xaxisnamefontbold,axisNameFontItalic:f.xaxisnamefontitalic,axisNameBgColor:f.xaxisnamebgcolor,axisNameBorderColor:f.xaxisnamebordercolor,axisNameAlpha:f.xaxisnamealpha,axisNameFontAlpha:f.xaxisnamefontalpha,axisNameBgAlpha:f.xaxisnamebgalpha,axisNameBorderAlpha:f.xaxisnameborderalpha,axisNameBorderPadding:f.xaxisnameborderpadding,axisNameBorderRadius:f.xaxisnameborderradius,
axisNameBorderThickness:f.xaxisnameborderthickness,axisNameBorderDashed:f.xaxisnameborderdashed,axisNameBorderDashLen:f.xaxisnameborderdashlen,axisNameBorderDashGap:f.xaxisnameborderdashgap,axisNameWidth:f.xaxisnamewidth,useEllipsesWhenOverflow:f.useellipseswhenoverflow,divLineColor:M(f.vdivlinecolor,f.divlinecolor,u.getColor(g.divLineColor)),divLineAlpha:M(f.vdivlinealpha,f.divlinealpha,d?u.getColor("divLineAlpha3D"):u.getColor("divLineAlpha")),divLineThickness:C(f.vdivlinethickness,f.divlinethickness,
1),divLineIsDashed:!!C(f.vdivlinedashed,f.vdivlineisdashed,f.divlinedashed,f.divlineisdashed,0),divLineDashLen:C(f.vdivlinedashlen,f.divlinedashlen,4),divLineDashGap:C(f.vdivlinedashgap,f.divlinedashgap,2),showAlternateGridColor:C(f.showalternatehgridcolor,1),alternateGridColor:M(f.alternatehgridcolor,u.getColor("altHGridColor")),alternateGridAlpha:M(f.alternatehgridalpha,u.getColor("altHGridAlpha")),numDivLines:f.numvdivlines,labelFont:f.labelfont,labelFontSize:f.labelfontsize,labelFontColor:f.labelfontcolor,
labelFontAlpha:f.labelalpha,labelFontBold:f.labelfontbold,labelFontItalic:f.labelfontitalic,axisName:f.xaxisname,axisMinValue:f.xaxisminvalue,axisMaxValue:f.xaxismaxvalue,setAdaptiveMin:f.setadaptivexmin,adjustDiv:f.adjustvdiv,labelDisplay:f.labeldisplay,showLabels:f.showlabels,rotateLabels:f.rotatelabels,slantLabel:C(f.slantlabels,f.slantlabel),labelStep:C(f.labelstep,f.xaxisvaluesstep),showAxisValues:C(f.showxaxisvalues,f.showxaxisvalue),showLimits:f.showvlimits,showDivLineValues:C(f.showvdivlinevalues,
f.showvdivlinevalues),zeroPlaneColor:f.vzeroplanecolor,zeroPlaneThickness:C(f.vzeroplanethickness,f.vdivlinethickness,2),zeroPlaneAlpha:C(f.vzeroplanealpha,f.vdivlinealpha,a.zeroplanealpha),showZeroPlaneValue:f.showvzeroplanevalue,trendlineColor:f.trendlinecolor,trendlineToolText:f.trendlinetooltext,trendlineThickness:f.trendlinethickness,rotateAxisName:C(f.rotatexaxisname,1),trendlineAlpha:f.trendlinealpha,showTrendlinesOnTop:f.showtrendlinesontop,showAxisLine:d?0:C(f.showxaxisline,f.showaxislines,
f.drawAxisLines,0),axisLineThickness:C(f.xaxislinethickness,f.axislinethickness,1),axisLineAlpha:C(f.xaxislinealpha,f.axislinealpha,100),axisLineColor:M(f.xaxislinecolor,f.axislinecolor,"#000000")};a={outCanfontFamily:M(f.outcnvbasefont,f.basefont,"Verdana,sans"),outCanfontSize:Ma(f.outcnvbasefontsize,f.basefontsize,10),outCancolor:M(f.outcnvbasefontcolor,f.basefontcolor,u.getColor(g.baseFontColor)).replace(/^#? ([a-f0-9]+)/ig,"#$1"),axisNamePadding:f.yaxisnamepadding,axisValuePadding:f.yaxisvaluespadding,
axisNameFont:f.yaxisnamefont,axisNameFontSize:f.yaxisnamefontsize,axisNameFontColor:f.yaxisnamefontcolor,axisNameFontBold:f.yaxisnamefontbold,axisNameFontItalic:f.yaxisnamefontitalic,axisNameBgColor:f.yaxisnamebgcolor,axisNameBorderColor:f.yaxisnamebordercolor,axisNameAlpha:f.yaxisnamealpha,axisNameFontAlpha:f.yaxisnamefontalpha,axisNameBgAlpha:f.yaxisnamebgalpha,axisNameBorderAlpha:f.yaxisnameborderalpha,axisNameBorderPadding:f.yaxisnameborderpadding,axisNameBorderRadius:f.yaxisnameborderradius,
axisNameBorderThickness:f.yaxisnameborderthickness,axisNameBorderDashed:f.yaxisnameborderdashed,axisNameBorderDashLen:f.yaxisnameborderdashlen,axisNameBorderDashGap:f.yaxisnameborderdashgap,axisNameWidth:f.yaxisnamewidth,useEllipsesWhenOverflow:f.useellipseswhenoverflow,axisName:f.yaxisname,divLineColor:M(f.divlinecolor,u.getColor(g.divLineColor)),divLineAlpha:M(f.divlinealpha,d?u.getColor("divLineAlpha3D"):u.getColor("divLineAlpha")),divLineThickness:C(f.divlinethickness,1),divLineIsDashed:!!C(f.divlinedashed,
f.divlineisdashed,0),divLineDashLen:C(f.divlinedashlen,4),divLineDashGap:C(f.divlinedashgap,2),showAlternateGridColor:C(f.showalternatevgridcolor,1),alternateGridColor:M(f.alternatevgridcolor,u.getColor("altVGridColor")),alternateGridAlpha:M(f.alternatevgridalpha,u.getColor("altVGridAlpha")),numDivLines:f.numdivlines,axisMinValue:f.yaxisminvalue,axisMaxValue:f.yaxismaxvalue,setAdaptiveMin:f.setadaptiveymin,adjustDiv:f.adjustdiv,labelStep:f.yaxisvaluesstep,showAxisValues:C(f.showyaxisvalues,f.showyaxisvalue),
showLimits:C(f.showyaxislimits,f.showlimits,this.showLimits),showDivLineValues:C(f.showdivlinevalues,f.showdivlinevalue),zeroPlaneColor:f.zeroplanecolor,zeroPlaneThickness:C(f.zeroplanethickness,f.divlinethickness,2),zeroPlaneAlpha:C(f.zeroplanealpha,f.divlinealpha,a.zeroplanealpha),showZeroPlaneValue:f.showzeroplanevalue,trendlineColor:f.trendlinecolor,trendlineToolText:f.trendlinetooltext,trendlineThickness:f.trendlinethickness,trendlineAlpha:f.trendlinealpha,isTrendZone:0,showTrendlinesOnTop:f.showtrendlinesontop,
showAxisLine:d?0:C(f.showyaxisline,f.showaxislines,f.drawAxisLines,0),axisLineThickness:C(f.yaxislinethickness,f.axislinethickness,1),axisLineAlpha:C(f.yaxislinealpha,f.axislinealpha,100),axisLineColor:M(f.yaxislinecolor,f.axislinecolor,"#000000"),numberFormatterFn:"yAxis"};a.vtrendlines=e.trendlines;D.trendlines=e.vtrendlines;e=c.yAxis[0];c=c.xAxis[0];e.setCommonConfigArr(a,!1,!1,!1);c.setCommonConfigArr(D,!0,!0,!1);e.configure();c.configure()},_spaceManager:function(){var b,a,c=this.config,u=this.components,
f=u.yAxis&&u.yAxis[0],e=u.xAxis&&u.xAxis||[];a=u.legend.config.legendPos;var D=c.xDepth,d=c.yDepth,g=c.canvasBgDepth,K=c.canvasBaseDepth,k=c.canvasBasePadding,l=u.canvas.config.canvasBorderWidth,m=c.realTimeConfig&&c.realTimeConfig.showRTValue,v=c.borderWidth,r=c.canvasMarginTop,p=c.canvasMarginBottom,B=c.canvasMarginLeft,t=c.canvasMarginRight,u=c.minCanvasHeight,w=c.minCanvasWidth,z=c.minChartWidth,C=c.minChartHeight,R=c.height,O=c.width,F=!1,E=!1,I,ia=c.origCanvasTopMargin,da=c.origCanvasBottomMargin,
M=c.origCanvasLeftMargin,Q=c.origCanvasRightMargin,U,V,J;c.canvasWidth-2*v<z&&(U=(c.canvasWidth-z)/2);c.canvasHeight-2*v<C&&(b=(c.canvasHeight-C)/2);this._allocateSpace({top:b||v,bottom:b||v,left:U||v,right:U||v});e=e[0];b=.7*c.availableWidth;c.yAxisSpaceAllocation=b=e&&e.placeAxis(b);e&&this._allocateSpace(b);e=.225*c.availableHeight;e=this._manageActionBarSpace&&this._manageActionBarSpace(e)||{};this._allocateSpace(e);this._manageLegendSpace();a=a===H?.6*c.availableHeight:.6*c.availableWidth;d&&
(this._allocateSpace({left:d}),c.shift=D+k+K);g&&this._allocateSpace({top:g});c.canvasWidth-2*l<w&&(J=(c.canvasWidth-w)/2);this._allocateSpace({left:J||l,right:J||l});w>O-B-t&&(E=!0,d=c.canvasWidth-w,D=B+t,B=c.canvasMarginLeft=d*B/D,t=c.canvasMarginRight=d*t/D);B=B>c.canvasLeft?B-c.canvasLeft:0;t=t>O-c.canvasRight?t+c.canvasRight-O:0;this._allocateSpace({left:B,right:t});this._allocateSpace({left:K});E&&(D=M+Q,K=c.canvasWidth,K>w&&(d=K-w,B=d*M/D,t=d*Q/D),this._allocateSpace({left:B,right:t}));c.actualCanvasMarginRight=
t;c.actualCanvasMarginBottom=I;this._manageChartMenuBar(a);a=.2*c.availableHeight;this._allocateSpace(this._getSumValueSpace(a));a=.3*c.availableHeight;c.realtimeEnabled&&(m?this._allocateSpace(this._realTimeValuePositioning(a)):this._hideRealTimeValue());a=.6*c.availableHeight;c.xAxisSpaceAllocation=I=f&&f.placeAxis(a);f&&this._allocateSpace(I);a=.3*c.availableHeight;this._manageScrollerPosition&&this._manageScrollerPosition(a);c.canvasHeight-2*l<u&&(V=(c.canvasHeight-u)/2);this._allocateSpace({top:V||
l,bottom:V||l});u>R-r-p&&(F=!0,d=c.canvasHeight-u,D=r+p,r=c.canvasMarginTop=d*r/D,p=c.canvasMarginBottom=d*p/D);f=r>c.canvasTop?r-c.canvasTop:0;I=p>R-c.canvasBottom?p+c.canvasBottom-R:0;this._allocateSpace({top:f,bottom:I});F&&(D=ia+da,p=c.canvasHeight,p>u&&(d=p-u,f=d*ia/D,I=d*da/D),this._allocateSpace({top:f,bottom:I}));c.actualCanvasMarginTop=f;c.actualCanvasMarginLeft=B},_postSpaceManagement:function(){var b=this.config,a=this.components,c=a.xAxis&&a.xAxis[0],u=a.yAxis&&a.yAxis[0],f=a.legend,e=
b.xDepth,D=a.canvas.config,a=D.canvasBorderWidth,d=D.canvasPadding,g,K,k;u&&this._allocateXAxisLabelSpace(u);g=D.canvasPaddingLeft;K=D.canvasPaddingRight;k=D.canvasPaddingTop;D=D.canvasPaddingBottom;u&&u.setAxisDimention({x:b.canvasLeft+g,y:b.canvasBottom+a,opposite:b.canvasTop-a,axisLength:b.canvasWidth-g-K});c&&c.setAxisDimention({x:b.canvasLeft-(b.shift||0)-a,y:b.canvasTop+(e||0)+fa(k,d),opposite:b.canvasRight+a,axisLength:b.canvasHeight-(e||0)-fa(k,d)-fa(D,d)});f.postSpaceManager()}},xa.mscartesian,
{maxbarheight:50});xa("ssbarcartesian",{standaloneInit:!1,_createAxes:xa.msbarcartesian,_feedAxesRawData:xa.msbarcartesian,_spaceManager:xa.msbarcartesian,_postSpaceManagement:xa.msbarcartesian,_allocateXAxisLabelSpace:xa.msbarcartesian},xa.sscartesian);xa("msbarcartesian3d",{standaloneInit:!1,_createDatasets:xa.mscartesian3d,is3d:!0,_drawCanvas:function(){var a=this.config,u=a.canvasLeft,e=a.canvasTop,D=a.canvasWidth,f=a.canvasHeight,d=this.jsonData.chart,g=this.components,K=g.canvas,k=g.colorManager,
g=g.paper,m=K.graphics,v=m.canvasBorderElement,r=m.canvasElement,p=K.config,B=p.clip={},K=this.graphics.canvasGroup,t=m.canvasBg,z=m.canvas3DBase,H=this.get(l,P),Ab=H.animType,wb=H.animObj,S=H.dummyObj,H=H.duration,E=m.canvas3dbaseline,R=p.canvasBgColor,O=p.showCanvasBG=!!C(d.showcanvasbg,1),I=a.canvasBgDepth,eb=a.showCanvasBase,Q=a.canvasBaseDepth,ia=p.canvasBaseColor3D=M(d.canvasbasecolor,k.getColor("canvasBaseColor3D")),da=p.use3DLighting=C(d.use3dlighting,1),R=b.chart3D,Qa=p.canvasBorderRadius=
C(d.plotborderradius,0),J=p.canvasBorderWidth=0,U=.5*J,V=p.canvasBorderColor=ab(M(d.canvasbordercolor,k.getColor("canvasBorderColor"))),G=p.canBGAlpha=M(d.canvasbgalpha,k.getColor("canvasBgAlpha")),Z=p.canBGColor=M(d.canvasbgcolor,k.getColor(R.canvasBgColor)),k=p.xDepth,d=p.yDepth,R=da?p.canvasBgColor={FCcolor:{color:hb(Z,85)+bb+gb(Z,55),alpha:G+bb+G,ratio:tb,angle:cb(a.width-(a.marginLeft+a.marginRight),a.height-(a.marginTop+a.marginBottom),1)}}:p.canvasBgColor=ab(Z,G);Z.split(bb);G.split(bb);k=
p.xDepth=5;d=p.yDepth=5;a={x:u-U,y:e-U,width:D+J,height:f+J,r:Qa,"stroke-width":J,stroke:V,"stroke-linejoin":2<J?c:w};v?(v.animateWith(S,wb,{x:u-U,y:e-U,width:D+J,height:f+J,r:Qa},H,Ab),v.attr({"stroke-width":J,stroke:V,"stroke-linejoin":2<J?c:w})):m.canvasBorderElement=g.rect(a,K);B["clip-canvas"]=[fa(0,u-k),fa(0,e),fa(1,D+k),fa(1,f+d)];B["clip-canvas-init"]=[fa(0,u-k),fa(0,e-d),1,fa(1,f+2*d)];a={x:u,y:e,width:D,height:f,r:Qa,"stroke-width":0,stroke:"none",fill:Ra(R)};O?(r?(r.show(),r.animateWith(S,
wb,{x:u,y:e,width:D,height:f,r:Qa},H,Ab),r.attr({"stroke-width":0,stroke:"none",fill:Ra(R)})):m.canvasElement=g.rect(a,K),D=["M",u,",",e,"L",u+1.2*I,",",e-I,",",u+D-I,",",e-I,",",u+D,",",e,"Z"],t?(t.show(),t.animateWith(S,wb,{path:D},H,Ab),t.attr({path:D})):t=m.canvasBg=g.path(D,K),t.attr({"stroke-width":0,stroke:"none",fill:Ra(R)})):(r&&r.hide(),t&&t.hide());eb?(D=u-k-Q-1,a=e+d+1,v=k+1,r=d+1,z?(z.show(),z._.cubeside.show(),z._.cubetop.show(),z.animateWith(S,wb,{cubepath:[D,a,Q,f,v,r]},H,Ab),z.attr({cubepath:[D,
a,Q,f,v,r]})):z=m.canvas3DBase=g.cubepath(D,a,Q,f,v,r,K),z.attr({stroke:"none","stroke-width":0,fill:[ia.replace(N,na),!da]}),E?(E.show(),E.animateWith(S,wb,{path:["M",u,e,"V",f+e]},H,Ab)):E=m.canvas3dbaseline=g.path(void 0,K),E.attr({path:["M",u,e,"V",f+e],stroke:F.tintshade(ia.replace(N,na),.05).rgba})):(z&&(z.hide(),z._.cubeside.hide(),z._.cubetop.hide()),E&&E.hide())}},xa.msbarcartesian,{showplotborder:0});xa("ssbarcartesian3d",{standaloneInit:!1,_createAxes:xa.msbarcartesian,_feedAxesRawData:xa.msbarcartesian,
_drawCanvas:xa.msbarcartesian3d,_spaceManager:xa.msbarcartesian,_postSpaceManagement:xa.msbarcartesian,_allocateXAxisLabelSpace:xa.msbarcartesian},xa.sscartesian3d);xa("mspolar",{standaloneInit:!1,hasCanvas:!1,_createAxes:function(){var b=this.components,a=FusionCharts.register("component",["axis","polarcartesan"]),c=FusionCharts.register("component",["axis","polar"]);b.yAxis=[];b.xAxis=[];b.yAxis[0]=a=new a;b.xAxis[0]=b=new c;a.chart=this;b.chart=this;a.init();b.init();a.setAxisConfig({polarAxis:b});
this._setCategories()},_feedAxesRawData:function(){var a=this.components,c=a.colorManager,u=this.jsonData,e=u.chart,f,D=(f=this.is3d)?b.chart3D:b.chart2D;f={outCanfontFamily:M(e.outcnvbasefont,e.basefont,"Verdana,sans"),outCanfontSize:Ma(e.outcnvbasefontsize,e.basefontsize,10),outCancolor:M(e.outcnvbasefontcolor,e.basefontcolor,c.getColor(D.baseFontColor)).replace(/^#? ([a-f0-9]+)/ig,"#$1"),axisNamePadding:e.xaxisnamepadding,axisValuePadding:e.labelpadding,axisNameFont:e.xaxisnamefont,axisNameFontSize:e.xaxisnamefontsize,
axisNameFontColor:e.xaxisnamefontcolor,axisNameFontBold:e.xaxisnamefontbold,axisNameFontItalic:e.xaxisnamefontitalic,axisNameBgColor:e.xaxisnamebgcolor,axisNameBorderColor:e.xaxisnamebordercolor,axisNameAlpha:e.xaxisnamealpha,axisNameFontAlpha:e.xaxisnamefontalpha,axisNameBgAlpha:e.xaxisnamebgalpha,axisNameBorderAlpha:e.xaxisnameborderalpha,axisNameBorderPadding:e.xaxisnameborderpadding,axisNameBorderRadius:e.xaxisnameborderradius,axisNameBorderThickness:e.xaxisnameborderthickness,axisNameBorderDashed:e.xaxisnameborderdashed,
axisNameBorderDashLen:e.xaxisnameborderdashlen,axisNameBorderDashGap:e.xaxisnameborderdashgap,useEllipsesWhenOverflow:e.useellipseswhenoverflow,divLineColor:M(e.vdivlinecolor,e.divlinecolor,c.getColor(D.divLineColor)),divLineAlpha:M(e.vdivlinealpha,e.divlinealpha,f?c.getColor("divLineAlpha3D"):c.getColor("divLineAlpha")),divLineThickness:C(e.vdivlinethickness,e.divlinethickness,1),divLineIsDashed:!!C(e.vdivlinedashed,e.vdivlineisdashed,e.divlinedashed,e.divlineisdashed,0),divLineDashLen:C(e.vdivlinedashlen,
e.divlinedashlen,4),divLineDashGap:C(e.vdivlinedashgap,e.divlinedashgap,2),showAlternateGridColor:C(e.showalternatevgridcolor,1),alternateGridColor:M(e.alternatevgridcolor,c.getColor("altVGridColor")),alternateGridAlpha:M(e.alternatevgridalpha,c.getColor("altVGridAlpha")),numDivLines:e.numvdivlines,labelFont:e.labelfont,labelFontSize:e.labelfontsize,labelFontColor:e.labelfontcolor,labelFontAlpha:e.labelalpha,labelFontBold:e.labelfontbold,labelFontItalic:e.labelfontitalic,axisName:e.yaxisname,axisMinValue:e.xaxisminvalue,
axisMaxValue:e.xaxismaxvalue,setAdaptiveMin:e.setadaptivexmin,adjustDiv:e.adjustvdiv,labelDisplay:e.labeldisplay,showLabels:e.showlabels,rotateLabels:e.rotatelabels,slantLabel:C(e.slantlabels,e.slantlabel),labelStep:C(e.labelstep,e.xaxisvaluesstep),showAxisValues:C(e.showxaxisvalues,e.showxaxisvalue),showLimits:e.showvlimits,showDivLineValues:C(e.showvdivlinevalues,e.showvdivlinevalues),zeroPlaneColor:e.vzeroplanecolor,zeroPlaneThickness:e.vzeroplanethickness,zeroPlaneAlpha:e.vzeroplanealpha,showZeroPlaneValue:e.showvzeroplanevalue,
trendlineColor:e.trendlinecolor,trendlineToolText:e.trendlinetooltext,trendlineThickness:e.trendlinethickness,trendlineAlpha:e.trendlinealpha,showTrendlinesOnTop:e.showtrendlinesontop,showAxisLine:C(e.showxaxisline,e.showaxislines,e.drawAxisLines,0),axisLineThickness:C(e.xaxislinethickness,e.axislinethickness,1),axisLineAlpha:C(e.xaxislinealpha,e.axislinealpha,100),axisLineColor:M(e.xaxislinecolor,e.axislinecolor,"#000000"),showRadarBorder:e.showradarborder,radarBorderColor:e.radarbordercolor,radarBorderThickness:e.radarborderthickness,
radarBorderAlpha:e.radarborderalpha,radarFillColor:e.radarfillcolor,radarFillAlpha:e.radarfillalpha,radarSpikeColor:e.radarspikecolor,radarSpikeThickness:e.radarspikethickness,radarSpikeAlpha:e.radarspikealpha,radarInLineAlpha:e.radarinlinealpha};c={outCanfontFamily:M(e.outcnvbasefont,e.basefont,"Verdana,sans"),outCanfontSize:Ma(e.outcnvbasefontsize,e.basefontsize,10),outCancolor:M(e.outcnvbasefontcolor,e.basefontcolor,c.getColor(D.baseFontColor)).replace(/^#? ([a-f0-9]+)/ig,"#$1"),axisNamePadding:e.yaxisnamepadding,
axisValuePadding:e.yaxisvaluespadding,axisNameFont:e.yaxisnamefont,axisNameFontSize:e.yaxisnamefontsize,axisNameFontColor:e.yaxisnamefontcolor,axisNameFontBold:e.yaxisnamefontbold,axisNameFontItalic:e.yaxisnamefontitalic,axisNameBgColor:e.yaxisnamebgcolor,axisNameBorderColor:e.yaxisnamebordercolor,axisNameAlpha:e.yaxisnamealpha,axisNameFontAlpha:e.yaxisnamefontalpha,axisNameBgAlpha:e.yaxisnamebgalpha,axisNameBorderAlpha:e.yaxisnameborderalpha,axisNameBorderPadding:e.yaxisnameborderpadding,axisNameBorderRadius:e.yaxisnameborderradius,
axisNameBorderThickness:e.yaxisnameborderthickness,axisNameBorderDashed:e.yaxisnameborderdashed,axisNameBorderDashLen:e.yaxisnameborderdashlen,axisNameBorderDashGap:e.yaxisnameborderdashgap,axisNameWidth:e.yaxisnamewidth,useEllipsesWhenOverflow:e.useellipseswhenoverflow,rotateAxisName:C(e.rotateyaxisname,1),axisName:e.xaxisname,divLineColor:M(e.divlinecolor,c.getColor(D.divLineColor)),divLineAlpha:M(e.divlinealpha,c.getColor("divLineAlpha")),divLineThickness:C(e.divlinethickness,1),divLineIsDashed:!!C(e.divlinedashed,
e.divlineisdashed,0),divLineDashLen:C(e.divlinedashlen,4),divLineDashGap:C(e.divlinedashgap,2),showAlternateGridColor:C(e.showalternatehgridcolor,1),alternateGridColor:M(e.alternatehgridcolor,c.getColor("altHGridColor")),alternateGridAlpha:M(e.alternatehgridalpha,c.getColor("altHGridAlpha")),numDivLines:e.numdivlines,axisMinValue:e.yaxisminvalue,axisMaxValue:e.yaxismaxvalue,setAdaptiveMin:e.setadaptiveymin,adjustDiv:e.adjustdiv,labelStep:e.yaxisvaluesstep,showAxisValues:C(e.showyaxisvalues,e.showyaxisvalue),
showLimits:C(e.showyaxislimits,e.showlimits,this.showLimits),showDivLineValues:C(e.showdivlinevalues,e.showdivlinevalue),zeroPlaneColor:e.zeroplanecolor,zeroPlaneThickness:C(e.zeroplanethickness,e.divlinethickness,2),zeroPlaneAlpha:e.zeroplanealpha,showZeroPlaneValue:e.showzeroplanevalue,trendlineColor:e.trendlinecolor,trendlineToolText:e.trendlinetooltext,trendlineThickness:e.trendlinethickness,trendlineAlpha:e.trendlinealpha,showTrendlinesOnTop:e.showtrendlinesontop,showAxisLine:C(e.showyaxisline,
e.showaxislines,e.drawAxisLines,0),axisLineThickness:C(e.yaxislinethickness,e.axislinethickness,1),axisLineAlpha:C(e.yaxislinealpha,e.axislinealpha,100),axisLineColor:M(e.yaxislinecolor,e.axislinecolor,"#000000")};f.vtrendlines=u.trendlines;c.trendlines=u.vtrendlines;u=a.yAxis[0];a=a.xAxis[0];u.setCommonConfigArr(c,!0,!1,!1);a.setCommonConfigArr(f,!1,!1,!1);u.configure();a.configure()},_spaceManager:function(){var b,a,c=this.config;a=this.components;var u=c.radarborderthickness,f=c.legendPosition,
e=a.xAxis&&a.xAxis[0],D=a.yAxis&&a.yAxis[0];b=this.hasLegend;a=a.legend;var d;d=f===H?.3*c.canvasHeight:.3*c.canvasWidth;!1!==b&&e&&this._allocateSpace(a._manageLegendPosition(d));a=.7*c.canvasHeight;b=.7*c.canvasWidth;e&&this._allocateSpace(e.placeAxis(b,a));b=.7*c.canvasWidth;D&&D.placeAxis(b);b=0<c.radarradius?2*c.radarradius:Ta(c.canvasHeight,c.canvasWidth);c.canvasHeight>b&&(a=Ha((c.canvasHeight-b)/2),this._allocateSpace({top:a,bottom:a}));c.canvasWidth>b&&(a=Ha((c.canvasWidth-b)/2),this._allocateSpace({left:a,
right:a}));a=f===H?.6*c.availableHeight:.6*c.availableWidth;this._manageChartMenuBar(a);D.setAxisDimention({x:c.canvasLeft+c.canvasWidth/2-u/2,y:c.canvasTop,axisLength:c.canvasHeight/2});e.setAxisConfig({centerX:c.canvasLeft+c.canvasWidth/2,centerY:c.canvasTop+c.canvasHeight/2,radius:Ta(c.canvasWidth/2,c.canvasHeight/2)-u/2})}},xa.mscartesian);xa("mslog",{standaloneInit:!1,_createAxes:function(){var b=this.components,a=FusionCharts.register("component",["axis","cartesian"]),c=FusionCharts.register("component",
["axis","log"]);b.yAxis=[];b.xAxis=[];b.yAxis[0]=c=new c;b.xAxis[0]=b=new a;c.chart=this;b.chart=this;c.init();b.init();this._setCategories()},_feedAxesRawData:function(){var a=this.components,c=a.colorManager,u=this.jsonData,e=u.chart,f,D=(f=this.is3d)?b.chart3D:b.chart2D,d=1===C(e.invertyaxis,0)?!0:!1;f={outCanfontFamily:M(e.outcnvbasefont,e.basefont,"Verdana,sans"),outCanfontSize:Ma(e.outcnvbasefontsize,e.basefontsize,10),outCancolor:M(e.outcnvbasefontcolor,e.basefontcolor,c.getColor(D.baseFontColor)).replace(/^#? ([a-f0-9]+)/ig,
"#$1"),axisNamePadding:e.xaxisnamepadding,axisValuePadding:e.labelpadding,axisNameFont:e.xaxisnamefont,axisNameFontSize:e.xaxisnamefontsize,axisNameFontColor:e.xaxisnamefontcolor,axisNameFontBold:e.xaxisnamefontbold,axisNameFontItalic:e.xaxisnamefontitalic,axisNameBgColor:e.xaxisnamebgcolor,axisNameBorderColor:e.xaxisnamebordercolor,axisNameAlpha:e.xaxisnamealpha,axisNameFontAlpha:e.xaxisnamefontalpha,axisNameBgAlpha:e.xaxisnamebgalpha,axisNameBorderAlpha:e.xaxisnameborderalpha,axisNameBorderPadding:e.xaxisnameborderpadding,
axisNameBorderRadius:e.xaxisnameborderradius,axisNameBorderThickness:e.xaxisnameborderthickness,axisNameBorderDashed:e.xaxisnameborderdashed,axisNameBorderDashLen:e.xaxisnameborderdashlen,axisNameBorderDashGap:e.xaxisnameborderdashgap,useEllipsesWhenOverflow:e.useellipseswhenoverflow,divLineColor:M(e.vdivlinecolor,e.divlinecolor,c.getColor(D.divLineColor)),divLineAlpha:M(e.vdivlinealpha,e.divlinealpha,f?c.getColor("divLineAlpha3D"):c.getColor("divLineAlpha")),divLineThickness:C(e.vdivlinethickness,
e.divlinethickness,1),divLineIsDashed:!!C(e.vdivlinedashed,e.vdivlineisdashed,e.divlinedashed,e.divlineisdashed,0),divLineDashLen:C(e.vdivlinedashlen,e.divlinedashlen,4),divLineDashGap:C(e.vdivlinedashgap,e.divlinedashgap,2),showAlternateGridColor:C(e.showalternatevgridcolor,0),alternateGridColor:M(e.alternatevgridcolor,c.getColor("altVGridColor")),alternateGridAlpha:M(e.alternatevgridalpha,c.getColor("altVGridAlpha")),numDivLines:e.numvdivlines,maxLabelHeight:e.maxlabelheight,labelFont:e.labelfont,
labelFontSize:e.labelfontsize,labelFontColor:e.labelfontcolor,labelFontAlpha:e.labelalpha,labelFontBold:e.labelfontbold,labelFontItalic:e.labelfontitalic,axisName:e.xaxisname,axisMinValue:e.xaxisminvalue,axisMaxValue:e.xaxismaxvalue,setAdaptiveMin:e.setadaptivexmin,adjustDiv:e.adjustvdiv,labelDisplay:e.labeldisplay,showLabels:e.showlabels,rotateLabels:e.rotatelabels,slantLabel:C(e.slantlabels,e.slantlabel),labelStep:C(e.labelstep,e.xaxisvaluesstep),showAxisValues:C(e.showxaxisvalues,e.showxaxisvalue),
showLimits:e.showvlimits,showDivLineValues:C(e.showvdivlinevalues,e.showvdivlinevalues),showZeroPlane:e.showvzeroplane,zeroPlaneColor:e.vzeroplanecolor,zeroPlaneThickness:e.vzeroplanethickness,zeroPlaneAlpha:e.vzeroplanealpha,showZeroPlaneValue:e.showvzeroplanevalue,trendlineColor:e.trendlinecolor,trendlineToolText:e.trendlinetooltext,trendlineThickness:e.trendlinethickness,trendlineAlpha:e.trendlinealpha,showTrendlinesOnTop:e.showtrendlinesontop,showAxisLine:C(e.showxaxisline,e.showaxislines,e.drawAxisLines,
0),axisLineThickness:C(e.xaxislinethickness,e.axislinethickness,1),axisLineAlpha:C(e.xaxislinealpha,e.axislinealpha,100),axisLineColor:M(e.xaxislinecolor,e.axislinecolor,"#000000")};c={outCanfontFamily:M(e.outcnvbasefont,e.basefont,"Verdana,sans"),outCanfontSize:Ma(e.outcnvbasefontsize,e.basefontsize,10),outCancolor:M(e.outcnvbasefontcolor,e.basefontcolor,c.getColor(D.baseFontColor)).replace(/^#? ([a-f0-9]+)/ig,"#$1"),axisNamePadding:e.yaxisnamepadding,axisValuePadding:e.yaxisvaluespadding,axisNameFont:e.yaxisnamefont,
axisNameFontSize:e.yaxisnamefontsize,axisNameFontColor:e.yaxisnamefontcolor,axisNameFontBold:e.yaxisnamefontbold,axisNameFontItalic:e.yaxisnamefontitalic,axisNameBgColor:e.yaxisnamebgcolor,axisNameBorderColor:e.yaxisnamebordercolor,axisNameAlpha:e.yaxisnamealpha,axisNameFontAlpha:e.yaxisnamefontalpha,axisNameBgAlpha:e.yaxisnamebgalpha,axisNameBorderAlpha:e.yaxisnameborderalpha,axisNameBorderPadding:e.yaxisnameborderpadding,axisNameBorderRadius:e.yaxisnameborderradius,axisNameBorderThickness:e.yaxisnameborderthickness,
axisNameBorderDashed:e.yaxisnameborderdashed,axisNameBorderDashLen:e.yaxisnameborderdashlen,axisNameBorderDashGap:e.yaxisnameborderdashgap,axisNameWidth:e.yaxisnamewidth,useEllipsesWhenOverflow:e.useellipseswhenoverflow,rotateAxisName:C(e.rotateyaxisname,1),axisName:e.yaxisname,divLineColor:M(e.divlinecolor,c.getColor(D.divLineColor)),divLineAlpha:M(e.divlinealpha,c.getColor("divLineAlpha")),divLineThickness:C(e.divlinethickness,2),divLineIsDashed:!!C(e.divlinedashed,e.divlineisdashed,0),divLineDashLen:C(e.divlinedashlen,
4),divLineDashGap:C(e.divlinedashgap,2),showAlternateGridColor:C(e.showalternatehgridcolor,1),alternateGridColor:M(e.alternatehgridcolor,c.getColor("altHGridColor")),alternateGridAlpha:M(e.alternatehgridalpha,c.getColor("altHGridAlpha")),numDivLines:e.numdivlines,axisMinValue:e.yaxisminvalue,axisMaxValue:e.yaxismaxvalue,setAdaptiveMin:e.setadaptiveymin,adjustDiv:e.adjustdiv,labelStep:e.yaxisvaluesstep,showAxisValues:C(e.showyaxisvalues,e.showyaxisvalue),showLimits:C(e.showyaxislimits,e.showlimits,
this.showLimits),showDivLineValues:C(e.showdivlinevalues,e.showdivlinevalue),showZeroPlane:e.showzeroplane,zeroPlaneColor:e.zeroplanecolor,zeroPlaneThickness:e.zeroplanethickness,zeroPlaneAlpha:e.zeroplanealpha,showZeroPlaneValue:e.showzeroplanevalue,trendlineColor:e.trendlinecolor,trendlineToolText:e.trendlinetooltext,trendlineThickness:e.trendlinethickness,trendlineAlpha:e.trendlinealpha,showTrendlinesOnTop:e.showtrendlinesontop,showAxisLine:C(e.showyaxisline,e.showaxislines,e.drawAxisLines,0),
axisLineThickness:C(e.yaxislinethickness,e.axislinethickness,1),axisLineAlpha:C(e.yaxislinealpha,e.axislinealpha,100),base:e.base,logBase:e.logbase,axisLineColor:M(e.yaxislinecolor,e.axislinecolor,"#000000"),showMinorDivLineValues:C(e.showminordivlinevalues,0),numMinorDivLines:e.numminordivlines};"1"===c.base&&(c.base=10,c.logBase=10);c.minorDivlinecolor=M(e.minordivlinecolor,c.divLineColor);c.minorDivLineThickness=M(e.minordivlinethickness,1);c.minorDivLineAlpha=M(e.minordivlinealpha,c.divLineAlpha/
2);f.vtrendlines=u.vtrendlines;c.trendlines=u.trendlines;u=a.yAxis[0];a=a.xAxis[0];u.setCommonConfigArr(c,!0,d,!1);a.setCommonConfigArr(f,!1,!1,!1);u.configure();a.configure()},_setAxisLimits:function(){var b=this.components,a=b.dataset,c=b.yAxis,b=b.xAxis,u,f=a.length,e,D=-Infinity,d=Infinity,g=Infinity,K=-Infinity,k,l={},m=[],v=function(b){D=fa(D,b.max);d=Ta(d,b.min);K=fa(K,b.xMax||-Infinity);g=Ta(g,b.xMin||Infinity)};for(e=0;e<f;e++)u=a[e],(k=u.groupManager)?l[u.type]=k:m.push(u);for(k in l)a=
l[k].getDataLimits(),v(a);f=m.length;for(e=0;e<f;e++)a=m[e].getDataLimits(),v(a);-Infinity===D&&(D=1);Infinity===d&&(d=1);c[0].setDataLimit(D,d);if(-Infinity!==K||Infinity!==g)b[0].config.xaxisrange={max:K,min:g},b[0].setDataLimit(K,g)}},xa.mscartesian);xa("guageBase",{standaloneInit:!1,hasCanvas:!1,_createAxes:function(){},_feedAxesRawData:function(){},_setCategories:function(){},_setAxisLimits:function(){},_adjustCanvasPadding:function(){},placeDataLabels:function(){var b=function(b,a){return b.point.value-
a.point.value},a=function(b,a){return b.angle-a.angle},c=[J,J,v,v],u=[-1,1,1,-1],f=[1,1,-1,-1];return function(e,D,d,g){var K=this.config,k=this.components.dataset[0].conf,l=K.canvasLeft,m=K.canvasTop,v=K.canvasWidth,r=l+.5*K.canvasWidth,p=m+.5*K.canvasHeight,w=this.linkedItems.smartLabel,z=k.dataLabelOptions,F=z.style,S=C(Fa(parseFloat(F.lineHeight)),12),H=Ga(z.placeLabelsInside,1===D.length?!0:!1),R=z.skipOverlapLabels,O=z.manageLabelOverflow,E=z.connectorPadding,I;I=g&&g.metrics||[r,p,2*k.pieMinRadius,
k.innerSize||0];var M=I[1],ia=I[0];g=.5*I[2];var da=[[],[],[],[]],k=d.labelsRadius=g+z.distance,p=r=parseInt(F.fontSize,10),Q=p/2,E=[E,E,-E,-E];d=d.labelsMaxInQuadrant||(d.labelsMaxInQuadrant=Oa(k/p));var z=z.isSmartLineSlanted,J=I[3]/2,U,V,G,Z,L,N,P,ga,T,qa,X,sa,ma,aa,W,ha;I=Number.POSITIVE_INFINITY;var Aa,ya;G=[];V=[];w.useEllipsesOnOverflow(K.useEllipsesWhenOverflow);e||w.setStyle(F);if(1==D.length&&!J&&H)G=D[0],(X=G.dataLabel)&&X.show(),G.slicedTranslation=[l,m],X&&(X.attr({visibility:Pa,align:B,
transform:["t",ia,M]}),X.x=ia);else if(H)ha=J+(g-J)/2,xb(D,function(b){Aa=b.config;ya=b.graphics;(X=ya.label)&&X.show();X&&(qa=Aa.angle,T=M+ha*jb(qa),L=ia+ha*lb(qa),X.x=L,X._x=L,X.y=T,b.sliced&&(W=b.slicedTranslation,ma=W[0]-l,aa=W[1]-m,L+=ma,T+=aa),X.attr({visibility:Pa,align:B,transform:["t",L,T]}))});else{xb(D,function(b){Aa=b.config;ya=b.graphics;(X=ya.label)&&X.show();X&&(qa=Aa.angle%zb,0>qa&&(qa=zb+qa),sa=0<=qa&&qa<Bb?1:qa<Eb?2:qa<sb?3:0,da[sa].push({point:b,angle:qa}))});for(D=e=4;D--;){if(R&&
(K=da[D].length-d,0<K))for(da[D].sort(b),F=da[D].splice(0,K),K=0,V=F.length;K<V;K+=1)G=F[K].point,G.dataLabel.attr({visibility:t}),G.connector&&G.connector.attr({visibility:t});da[D].sort(a)}D=fa(da[0].length,da[1].length,da[2].length,da[3].length);K=fa(Ta(D,d)*p,k+p);V=da[0].concat(da[1]);G=da[2].concat(da[3]);for(D=V.length-1;0<=D;D--)F=V[D].point.config,delete F.clearance,delete F.clearanceShift,J=Ha(K*jb(F.angle)),Math.abs(I-J)<2*S&&(F.clearance=0,V[D+1].point.clearanceShift=S/2),I=J;I=Number.POSITIVE_INFINITY;
D=0;for(V=G.length;D<V;D++)F=G[D].point.config,delete F.clearance,delete F.clearanceShift,J=Ha(K*jb(F.angle)),Math.abs(I-J)<2*S&&(F.clearance=0,G[D-1].point.clearanceShift=S/2),I=J;da[1].reverse();for(da[3].reverse();e--;){F=da[e];V=F.length;R||(p=V>d?K/V:r,Q=p/2);S=V*p;I=K;for(D=0;D<V;D+=1,S-=p)J=Ha(K*jb(F[D].angle)),I<J?J=I:J<S&&(J=S),I=(F[D].oriY=J)-p;H=c[e];V=K-(V-1)*p;I=0;for(D=F.length-1;0<=D;--D,V+=p)if(G=F[D].point,qa=F[D].angle,Aa=G.config,ya=G.graphics,G=Aa.sliced,X=ya.label,J=Ha(K*jb(qa)),
J<I?J=I:J>V&&(J=V),I=J+p,S=void 0===Aa.clearance?2*Fa(C(parseFloat(Aa.style.border),12),12):2*Fa(C(parseFloat(Aa.style.border),Aa.clearance)),P=(J+F[D].oriY)/2,J=ia+f[e]*k*lb(Xa.asin(P/K)),P*=u[e],P+=M,ga=M+g*jb(qa),Z=ia+g*lb(qa),(2>e&&J<Z||1<e&&J>Z)&&(J=Z),L=J+E[e],T=P-Q-2,N=L+E[e],X.x=N,X._x=N,O&&(U=1<e?N-this.canvasLeft:this.canvasLeft+v-N,w.setStyle(Aa.style),S=C(Fa(parseFloat(Aa.style.lineHeight)),12)+S,S=w.getSmartText(Aa.labelText,U,S),void 0===Aa.clearance&&S.height>p&&(P+=p),X.attr({text:S.text}).tooltip(S.tooltext)),
X.y=T,G&&(ma=Aa.transX,aa=Aa.transY,L+=ma,J+=ma,Z+=ma,ga+=aa,N+=ma),X.attr({visibility:Pa,"text-anchor":H,vAlign:B,x:N,y:P}),S=ya.connector)ya.connectorPath=G=["M",Z,ga,"L",z?J:Z,P,L,P],S.attr({path:G,visibility:Pa})}}}}()},xa.sscartesian);xa("scatterBase",{standaloneInit:!1,_setCategories:function(){var b=this.jsonData,a=this.components.xAxis,c=M(b.chart.xaxislabelmode,"categories"),b=b.categories&&b.categories[0].category;a[0].setAxisConfig({xAxisLabelMode:"categories"});"auto"!==c&&"mixed"!==c&&
b&&0<b.length?a[0].setCategory(b):"auto"!==c?(a[0].setCategory(b,!1),a[0].setAxisConfig({xAxisLabelMode:"mixed"})):a[0].setAxisConfig({xAxisLabelMode:"auto"})},_setAxisLimits:function(){var b=this.components,a=this.jsonData,c=b.xAxis,e=M(a.chart.xaxislabelmode,"categories"),a=a.categories&&a.categories[0],a=(a&&a.category||[]).slice(),f,u,D,d,g;f=Infinity;D=-Infinity;var K,k;xa("mscartesian")._setAxisLimits.call(this);u=c[0].getLimit();d=u.tickInterval;for(g=0;g<a.length;g+=1)if(K=a[g].x)K<f&&(f=
K),K>D&&(D=K);if(D>u.max||f<u.min)D=fa(D,u.max),f=Ta(f,u.min),c[0].setDataLimit(D,f);if("mixed"===e||"auto"===e||!(a&&0<a.length)){D=[];f=b.numberFormatter.xAxis;if("mixed"===e)for(g=0,e=a.length;g<e;g+=1)D[a[g].x||a[g].y||g]=!0;else a=[];K=c[0].getAxisConfig();k=g=u.min;for(e=u.max;g<=e;)D[g]||a.push({label:aa+f.call(b.numberFormatter,g),x:g,showverticalline:0===g?K.showZeroPlane:1,isNumeric:!0,linecolor:0===g?K.zeroPlaneColor:K.divLineColor,linealpha:0===g?K.zeroPlaneAlpha:K.divLineAlpha,linethickness:0===
g?K.zeroPlaneThickness:K.divLineThickness,linedashed:K.divLineIsDashed,linedashLen:K.divLineDashLen,linedashgap:K.divLineDashGap}),0>g&&0<g+d?(g=0,k+=d):g<k?g=k:(g+=d,k+=d);c[0].setCategory(a,!1)}},_createQuadrant:function(){var b;b=this.components;var a=FusionCharts.register("component",["quadrant","cartesian"]);b.quadrant=b=new a;b.chart=this;b.init()},_drawQuadrant:function(){this.components.quadrant.draw()},_getDiff:function(b,a){return{diff:b,startIndex:a}}},xa.mscartesian,{zeroplanethickness:1,
zeroplanealpha:40,showzeroplaneontop:0,setadaptivexmin:1});xa("areabase",{standaloneInit:!1},xa.mscartesian,{anchorborderthickness:1,anchorimageurl:void 0,anchorimagepadding:1,anchorsides:1,anchoralpha:void 0,anchorbgalpha:L,anchorimagealpha:L,anchorimagescale:100,anchorstartangle:90,anchorshadow:0,anchorbgcolor:void 0,anchorbordercolor:void 0,anchorradius:3,showvalues:1,plotfillalpha:ha,linedashlen:5,linedashgap:4,linedashed:void 0,linealpha:L,linethickness:2,drawfullareaborder:1,connectnulldata:0})}]);
FusionCharts.register("module",["private","modules.renderer.js-renderer",function(){var g=this.window,k=this.hcLib,F=k.Raphael,r=k.parseConfiguration,E=/msie/i.test(g.navigator.userAgent)&&!g.opera,z=g.Image,G="VML"===F.type,a=k.BLANKSTRING,L=k.getPosition,d=k.COMMASPACE,l=k.ZEROSTRING,P=k.BGRATIOSTRING,W=k.hasSVG,p="rgba(192,192,192,"+(E?.002:1E-6)+")",E=k.TOUCH_THRESHOLD_PIXELS,t=k.CLICK_THRESHOLD_PIXELS,m=k.extend2,c=k.pluck,w=k.parsexAxisStyles,J=k.toPrecision,e=k.pluckNumber,v=k.setLineHeight,
H=k.pluckFontSize,B=k.toRaphaelColor,Q=k.graphics.convertColor,I=k.parseUnsafeString,ha=k.getDefinedColor,X=k.graphics.getDarkColor,T=k.ONESTRING,aa=k.getFirstAlpha,oa=k.HUNDREDSTRING,M=k.getDashStyle,la=k.plotEventHandler,C=k.hasTouch?E:t,Ga=k.getCrispValues,Ba=k.getValidValue,ja=k.getFirstValue,ba=k.parseTooltext,ta=k.regex.dropHypeash,N=k.HASHSTRING,E=k.preDefStr,na=E.noneStr,Va=E.configStr,Ea=E.animationObjStr,za=E.showHoverEffectStr,Ka=E.columnStr,Ia=E.barStr,Ua=E.barHotStr,Pa=E.shadowStr,Ra=
E.visibleStr,Xa=E.hiddenStr,Ta=E.negativeValueStr,fa=E.positiveValueStr,Ha=E.zeroPlaneStr,Fa=E.categoryPlotsStr,Oa=E.setRolloverAttrStr,wa=E.setRolloutAttrStr,jb=E.elementStr,lb=E.hotElementStr,Eb=E.dataLabelStr,Bb=E.strokeWidthStr,zb=E.strokeDashStr,sb=E.miterStr,rb=E.POSITION_MIDDLE,Ya=E.POSITION_START,Ma=E.POSITION_TOP,hb=E.POSITION_BOTTOM,gb=E.POSITION_END,ab=k.graphics.getCubePathOutline,vb=function(b,a){var c=!1,e=a%2,h;b[1]===b[4]&&(c=b[1],h=Za(c),b[1]=b[4]=e?h>c?h-.5:h+.5:h,c=!0);b[2]===b[5]&&
(c=b[2],h=Za(c),b[2]=b[5]=e?h>c?h-.5:h+.5:h,c=!0);return{path:b,isCrisped:c}},pb=8===g.document.documentMode?Ra:"",kb=Math,xa=kb.sqrt,bb=kb.sin,qb=kb.cos,Za=kb.round,Na=kb.min,Ja=kb.max,Sa=kb.abs,xb=kb.ceil,fb=kb.floor,tb=kb.pow,cb=kb.log,Cb=kb.PI,yb=2*Cb,ib=k.getFirstColor,ob=k.graphics.getLightColor,mb=k.schedular;F.ca.ishot=function(b){if(this.removed)return!1;var a=this.node;b=b||"";a.ishot=b;switch(this.type){case "group":for(a=this.bottom;a;)a.attr("ishot",b),a=a.next;break;case "text":if(F.svg)for(a=
a.getElementsByTagName("tspan")[0];a;)a.ishot=b,a=a.nextSibling}return!1};F.addSymbol({printIcon:function(b,a,c){var e=.75*c,h=.5*c,d=.33*c,g=Za(b-c)+.5,A=Za(a-c)+.5,f=Za(b+c)+.5;c=Za(a+c)+.5;var k=Za(b-e)+.5,l=Za(a-e)+.5,e=Za(b+e)+.5,Y=Za(a+h)+.5,m=Za(b+h)+.5,v=Za(a+d)+.5;b=Za(b-h)+.5;d=Za(a+d+d)+.5;return["M",k,A,"L",e,A,e,l,k,l,"Z","M",g,l,"L",g,Y,k,Y,k,a,e,a,e,Y,f,Y,f,l,"Z","M",k,a,"L",k,c,e,c,e,a,"Z","M",m,v,"L",b,v,"M",m,d,"L",b,d]},exportIcon:function(b,a,c){var e=.66*c,h=.5*e,d=Za(b-c)+.5,
g=Za(a-c)+.5,A=Za(b+c)+.5;c=Za(a+c)-.5;var f=Za(b-h)+.5,k=a<c-3?c-3:Za(a)+.5,h=Za(b+h)-.5,l=Za(b+e)-.5,e=Za(b-e)+.5;return["M",d,k,"L",d,c,A,c,A,k,A,c,d,c,"Z","M",b,c-1,"L",e,a,f,a,f,g,h,g,h,a,l,a,"Z"]}});FusionCharts.register("component",["axis","cartesian",{pIndex:2,customConfigFn:"_feedAxesRawData",init:function(b,a,c,e){var h;this.graphics={};this.components={};h=this.config;h.isVertical=a;h.isReverse=c;h.isOpposit=e;h.isActive=!0;h.drawLabels=!0;h.drawOnlyCategoryLine=!1;h.drawLabelsOpposit=
!1;h.drawLabelOnBothSide=!1;h.drawPlotlines=!0;h.drawAxisLine=!0;h.drawPlotBands=!0;h.drawAxisName=!0;h.drawAxisNameOpposit=!1;h.axisNameAlignCanvas=!1;h.drawAxisNameFromBottom=!1;h.drawTrendLines=!0;h.drawTrendLabels=!0;h.drawTick=!0;h.drawTickMinor=!0;h.animateAxis=!0;h.drawAxisLineWRTCanvas=!0;h.isRelativeAxisInverse=!1;h.axisIndex=0;h.uniqueClassName=0;h.viewPortRatio={};h.canvas={};h.rawAttr=b;h.axisRange={};h.isConfigured=!0;h.axisDimention={};h.extremeLabels={firstLabel:{},lastLabel:{}};h._setRangeAgain=
!1},setCommonConfigArr:function(b,a,c,e){var h=this.config;h.rawAttr=b;h.isVertical=a;h.isReverse=c;h.isOpposit=e},configure:function(){var b=this.config,a=b.rawAttr,D=this.chart,d=D.components,h=this.chart.is3D,D=D.jsonData.chart,n=d.numberFormatter;b.trendLines=a.trendlines;b.vTrendLines=a.vtrendlines;this.__setDefaultConfig();r(a,b);b.axisName=I(a.axisName);b.axisValuePadding=b.axisNamePadding||e(a.axisValuePadding,4);b.axisNamePadding=b.axisNamePadding||e(a.axisNamePadding,5);b.maxLabelWidthPercent=
e(a.maxLabelWidthPercent);b.maxLabelWidthPercent=Sa(b.maxLabelWidthPercent);b.numDivLines=e(a.numDivLines,4);0>b.numDivLines&&(b.numDivLines=0);b.categoryNumDivLines=e(a.numDivLines,0);0>b.axisValuePadding&&(b.axisValuePadding=0);b.categoryDivLinesFromZero=1;b.axisMinValue=n.getCleanValue(a.axisMinValue);b.axisMaxValue=n.getCleanValue(a.axisMaxValue);b.zeroPlaneColor=c(a.zeroPlaneColor,a.divLineColor);b.zeroPlaneThickness=c(a.zeroPlaneThickness,a.divLineThickness);b.axisLineColor=Q(a.axisLineColor,
a.axisLineAlpha);b.tickAlpha=e(a.tickAlpha,b.axisLineAlpha);b.tickColor=Q(c(a.tickColor,a.axisLineColor),b.tickAlpha);b.tickWidth=e(a.tickWidth,b.axisLineThickness);b.showVLines=e(D.showvlines,1);b.showVLinesOnTop=e(D.showvlinesontop,0);b.showVLineLabels=e(D.showvlinelabels,this.showVLineLabels,1);b.showVLineLabelBorder=e(D.showvlinelabelborder,1);b.rotateVLineLabels=e(D.rotatevlinelabels,0);b.vLineColor=c(D.vlinecolor,"333333");b.vLineLabelColor=c(D.vlinelabelcolor);b.vLineThickness=c(D.vlinethickness,
1);b.vLineAlpha=e(D.vlinealpha,80);b.vLineLabelBgColor=c(D.vlinelabelbgcolor,"ffffff");b.vLineLabelBgAlpha=e(D.vlinelabelbgalpha,h?50:100);b.staggerLines=Math.max(e(D.staggerlines,2),2);1>b.staggerlines&&(b.staggerlines=1);b.trendlineValuesOnOpp=c(a.trendlineValuesOnOpp,a.trendlineValuesOnOpp,0);b.labelDisplay=c(a.labelDisplay,"auto").toLowerCase();b.labelStep=e(a.labelStep,0);b.labelStep=Za(b.labelStep);0>b.labelStep&&(b.labelStep=0);b._oriLabelStep=b.labelStep;b.showLimits=e(a.showLimits,b.showAxisValues);
b.showUpperLimit=a.showLimits;b.showDivLineValues=e(a.showDivLineValues,b.showAxisValues);b.showCanvasBorder=d.canvas.config.showCanvasBorder?1:0;b.axisBreak=a.axisBreaks;b.isBreak=!!b.axisBreak;b.isBreak&&this._processAxisBreak();d=(d=ja(a.axisNameBorderColor,""))?Q(d,e(a.axisNameBorderAlpha,a.axisNameAlpha,100)):"";b.name=b.name||{};b.name.style={fontFamily:c(a.axisNameFont,a.outCanfontFamily),fontSize:c(a.axisNameFontSize,parseInt(a.outCanfontSize,10))+"px",color:Q(c(a.axisNameFontColor,a.outCancolor),
e(a.axisNameFontAlpha,a.axisNameAlpha,100)),fontWeight:e(a.axisNameFontBold,1)?"bold":"normal",fontStyle:e(a.axisNameFontItalic)?"italic":"normal",border:d||a.axisNameBgColor?e(a.axisNameBorderThickness,1)+"px solid":void 0,borderColor:d,borderThickness:e(a.axisNameBorderThickness,1),borderPadding:e(a.axisNameBorderPadding,2),borderRadius:e(a.axisNameBorderRadius,0),backgroundColor:a.axisNameBgColor?Q(a.axisNameBgColor,e(a.axisNameBgAlpha,a.axisNameAlpha,100)):"",borderDash:e(a.axisNameBorderDashed,
0)?M(e(a.axisNameBorderDashLen,4),e(a.axisNameBorderDashGap,2),e(a.axisNameBorderThickness,1)):"none"};b.name.style.lineHeight=v(b.name.style);d=(d=ja(D.trendvaluebordercolor,""))?Q(d,e(D.trendvalueborderalpha,D.trendvaluealpha,100)):"";b.trend=b.trend||{};b.trend.trendStyle={fontFamily:c(D.trendvaluefont,a.outCanfontFamily),color:c(D.trendvaluefontcolor,a.trendlineColor,a.outCancolor,"333333"),fontSize:H(D.trendvaluefontsize,parseInt(a.outCanfontSize,10))+"px",fontWeight:e(D.trendvaluefontbold)?
"bold":"normal",fontStyle:e(D.trendvaluefontitalic)?"italic":"normal",border:d||D.trendvaluebgcolor?e(D.trendvalueborderthickness,1)+"px solid":"",borderColor:d,borderThickness:e(D.trendvalueborderthickness,1),borderPadding:e(D.trendvalueborderpadding,2),borderRadius:e(D.trendvalueborderradius,0),backgroundColor:D.trendvaluebgcolor?Q(D.trendvaluebgcolor,e(D.trendvaluebgalpha,D.trendvaluealpha,100)):"",borderDash:e(D.trendvalueborderdashed,0)?M(e(D.trendvalueborderdashlen,4),e(D.trendvalueborderdashgap,
2),e(D.trendvalueborderthickness,1)):"none"};b.trend.trendStyle.lineHeight=v(b.trend.trendStyle);b.labels=b.labels||{};b.lines=b.lines||{};b.band=b.band||{};d=(d=ja(D.labelbordercolor,""))?Q(d,e(D.labelborderalpha,D.labelalpha,100)):"";b.labels.style={fontFamily:c(a.labelFont,a.outCanfontFamily),fontSize:e(a.labelFontSize,parseInt(a.outCanfontSize,10))+"px",fontWeight:e(a.labelFontBold)?"bold":"normal",fontStyle:e(a.labelFontItalic)?"italic":"normal",color:Q(c(a.labelFontColor,a.outCancolor),e(a.labelFontAlpha,
100)),labelLink:D.labellink,border:d||D.labelbgcolor?e(D.labelborderthickness,1)+"px solid":"",borderColor:d,borderThickness:e(D.labelborderthickness,1),borderPadding:e(D.labelborderpadding,2),borderRadius:e(D.labelborderradius,0),backgroundColor:D.labelbgcolor?Q(D.labelbgcolor,e(D.labelbgalpha,D.labelalpha,100)):"",borderDash:e(D.labelborderdashed,0)?M(e(D.labelborderdashlen,4),e(D.labelborderdashgap,2),e(D.labelborderthickness,1)):"none"};b.labels.style.lineHeight=v(b.labels.style);b.numberFormatterFn=
c(a.numberFormatterFn);b.axisEndLabelDisplaySpace={left:0,right:0,top:0,bottom:0};b.isConfigured=!0},_processAxisBreak:function(){var b=this.config,a,c,d,h;b.breakPoints=[];a=b.axisBreak.split("|");d=0;h=a.length;for(c=0;d<h;d+=1)a[d]=a[d].split(","),isNaN(a[d][0])||isNaN(a[d][1])||(b.breakPoints[c]={start:e(a[d][0]),end:e(a[d][1]),length:e(a[d][2],0)},c+=1);b.breakPoints.sort(function(b,a){return b.start-a.start});b.hasBreakPoints=!0;this._validateBreakPoints()},_validateBreakPoints:function(){var b=
this.config,a=b.breakPoints,c=0,e,h=a.length;for(e=0;e<h;e+=1)c+=a[e].end-a[e].start;b.totalBreakAmount=c},_getRelativeBreakValue:function(b){var a=this.config.breakPoints,c,e=a.length,h=0;for(c=0;c<e;c+=1){if(b>=a[c].start&&b<=a[c].end)return a[c].start-h;if(b<a[c].start)break;h+=a[c].end-a[c].start}return b-h},_getRealBreakValue:function(b){var a=this.config.breakPoints,c,e=a.length;for(c=0;c<e;c+=1)if(b>=a[c].start)b+=a[c].end-a[c].start;else if(b<a[c].start)break;return b},getBreakPoints:function(){var b=
this.config;return b.hasBreakPoints?b.breakPoints:!1},setCanvas:function(b){this.config.canvas=b},getAxisBase:function(){var b=this.config,a=b.axisRange.min,c=b.axisRange.max;return 0>a&&0<c?0:b.isReverse?c:0>=c?c:a},getValue:function(b){var a=this.config,c=a.axisRange,e=a.canvas,h=a.axisDimention||{},d=this.chart.config,g=d.viewPortConfig,A=h.axisLength||e.canvasWidth||d.canvasWidth,h=h.axisLength||e.canvasHeight||d.canvasHeight,e=c.max,c=c.min,d=e-c;a.isVertical?(A=h*g.scaleY/d,b=a.isReverse?c+
(g.y*g.scaleY+Number(b))/A:e-(g.y*g.scaleY+Number(b))/A):(A=A*g.scaleX/d,b=a.isReverse?e-(g.x*g.scaleX+Number(b))/A:c+(g.x*g.scaleX+Number(b))/A);return b},_getLabelElement:function(b){var a=this.components;return this.config.hasCategory?a&&a.categoryLabel&&a.categoryLabel[b]&&a.categoryLabel[b].graphics&&a.categoryLabel[b].graphics.label:this.graphics&&this.graphics.labels&&this.graphics.labels[b]},_getVisibleConfig:function(){var b=this.config,a=b.axisRange,c=b.canvas,e=b.axisDimention||{},h=this.chart.config,
d=h.viewPortConfig,g=e.axisLength||c.canvasWidth||h.canvasWidth,c=e.axisLength||c.canvasHeight||h.canvasHeight,e=a.max,a=a.min,h=e-a;b.isVertical?(h/=c,b=d.scaleY,g=e-h*d.y,c=e-h*(d.y+c/b)):(h/=g,b=d.scaleX,c=a+h*d.x,g=a+h*(d.x+g/b));return{maxValue:g,minValue:c}},_setTickIntervalAfterZoom:function(){var b=this.config,a=this.chart.config.viewPortConfig,c=b.isVertical,d=b.axisRange,h=k.getAxisLimits,n=b.numDivLines,g=b.setAdaptiveMin,A=b.adjustDiv,A=b.rawAttr,f,l,m,Y;b.hasCategory||(c=c?a.scaleY:a.scaleX,
a=e(A.axisrange?A.axisrange.max:d.max),Y=e(A.axisrange?A.axisrange.min:d.min),l=d.max,m=d.min,g=f=!g,A=e(1===c?b.adjustDiv:0),b=h(a,Y,l,m,f,g,n*c,A),d.min=Number(J(b.Min,10)),d.max=Number(J(b.Max,10)),d.tickInterval=Number(J(b.divGap,10)),0===d.tickInterval&&(d.tickInterval=1))},_getAttribAsObj:function(b){var a,c={};for(a in b)b.hasOwnProperty(a)&&"string"===typeof b[a]&&b[a]&&(c[a]=b[a]);return c},_extractAttribToEnd:function(b,a){var c;b._attrib=m({},a);b._attrib=m(b._attrib,this._getAttribAsObj(b));
for(c in b)b.hasOwnProperty(c)&&b[c]&&"object"===typeof b[c]&&"_attrib"!==c&&this._extractAttribToEnd(b[c],b._attrib)},setCategory:function(b,a){var c;function d(b){var a={labelfont:["fontFamily"],labelfontcolor:["fontColor"],labelfontsize:["fontSize",function(b){return b?e(b)+"px":void 0}],labelfontbold:["fontWeight",function(b){return b?"bold":"normal"}],labelfontitalic:["fontStyle",function(b){return b?"italic":"normal"}],labelfontalpha:["fontAlpha"]},f=function(b){return b},c=!1,h,u,D,g={},q,
K;for(h in n)"category"===h||h in b||(u=n[h],b[h]=u);for(h in a){D=a[h];q=D[0];K=D[1]||f;u=b[h];D=b[q.toLowerCase()];if(void 0!==u||void 0!==D)if(void 0!==(u=K(u))||void 0!==(u=K(D)))g[q]=u,c=!0;c&&(b.style=g)}}var h=this.chart.jsonData.categories,n=h&&h[0]||{},h=this.config,g=h.axisRange;c=b&&b.length;var A=h.startPad||0,f=h.endPad||0,k=0,l=void 0!==a?a:!0,Y,m,v,r,p,B;h.hasCategory=1;h.categories={};r=h.categories.category=[];p=h.categories.vline=[];m=h.categories.catIdMap={};h.isCategoryAnimate=
!1;h.isCategoryVlineAnimate=!1;for(v=0;v<c;v+=1)(Y=b[v])||(Y={}),B=Number(Y.x),"true"!==Y.vline&&!0!==Y.vline&&1!==Y.vline&&"1"!==Y.vline?(Y.id&&(m[Y.id.toLowerCase()]={catObj:Y,index:v}),d(Y),B===B&&(Y.x=B,h.irregularCatAxis=!0),r.push(Y),r[k].label=I(r[k].label),k+=1):(Y.startIndex=r.length-1,p.push(Y));h.oriCatLen=k-1;1===k&&(0===A&&(A=.5),0===f&&(f=.5));l&&(c=k-1+f,g.min=Number(J(-A,10)),g.max=Number(J(c,10)),g.tickInterval=Number(J(1,10)));h.isConfigured=!0},updateCategory:function(b,a){var c=
this.config,e,h;e=c.categories.category;if(e[b])for(h in a)a.hasOwnProperty(h)&&(e[b][h]=a[h]);c.isConfigured=!0},categoryInsert:function(b,a,c){var e=this.config,h=e.axisRange,d=a.length,g=e.endPad||0,A,f,k,l,Y;A=e.categories.category;k=e.categories.catIdMap;f=e.categories.vline;for(l=0;l<d;l+=1)Y=a[l],"true"!==Y.vline&&!0!==Y.vline&&1!==Y.vline&&"1"!==Y.vline?(Y.id&&(k[Y.id]={catObj:Y,i:b}),A.splice(b,0,Y),b+=1):(Y.startIndex=b-2,f.push(Y));c&&(h.max=Number(J(A.length-1+g,10)));e.isConfigured=!0},
categoryDelete:function(b,a,c){var e=this.config,h=e.axisRange,d,g,A;e.isCategoryAnimate=!0;d=e.animateCategories=e.categories.category.slice();g=0;for(A=d.length;g<A;g++)d[g].animate=!0,d[g].leftShift=a,d[g]["delete"]=g<a;e.isCategoryVlineAnimate=!0;d=e.animateCategoriesVline=e.categories.vline.slice();g=0;for(A=d.length;g<A;g++)d[g].animate=!0,d[g].leftShift=a;e.categories.category.splice(b,a);this._shiftVline(b,a,"left");c&&(h.max-=a);e.isConfigured=!0},categoryUpdate:function(b,a){var c=this.config,
e;e=c.categories.category;e[b]&&(e[b]=a);c.isConfigured=!0},_getRotateTextTransformString:function(b,a,c){var e,h="";b=b.matrix.toMatrixString();b.replace(/\(([^\)]*)/,function(b,d){e=d.split(",");e[4]=Number(e[4])+a;e[5]=Number(e[5])+c;h=e.join();return b});h="m"+h;""===b&&(h="t"+a+","+c);return h},_shiftVline:function(b,a,c){var e=this.config,h=e.categories.vline,e=e.categories.category.length,d=h.length,g,A;for(g=0;g<d;g+=1)if(A=h[g],A.startIndex>=b&&(A.startIndex="right"===c?A.startIndex+a:A.startIndex-
a,0>A.startIndex-a||A.startIndex-a>=e))h.splice(g,1),--d,--g},shiftLabels:function(b,a){var c=this.config.labels;c.shiftX=b;c.shiftY=a},setAxisPadding:function(b,a){var c=this.config;b=c.startPad=e(b,0);a=c.endPad=e(a,0);0===c.oriCatLen&&(0===b&&(b=.5),0===a&&(a=.5));c.hasCategory?0<=c.oriCatLen&&this.setAxisRange({max:c.oriCatLen+a,min:-b}):c.originalMax&&c.originalMin&&this.setDataLimit(c.originalMax,c.originalMin)},setAxisConfig:function(b){var a=this.config,c;for(c in b)b.hasOwnProperty(c)&&(a[c]=
b[c])},getAxisConfig:function(b){var a=this.config;return b?a[b]:a},setLabelConfig:function(b){var a=this.config.labels,c;for(c in b)b.hasOwnProperty(c)&&(a[c]=b[c])},setAxisRange:function(b){var a=this.config.axisRange,c;for(c in b)b.hasOwnProperty(c)&&void 0!==a[c]&&(a[c]=b[c])},getAxisEndLabelDisplaySpace:function(){return this.config.axisEndLabelDisplaySpace||{}},getDivLineCount:function(){var b=this.config.axisRange;return Sa((b.max-b.min)/b.tickInterval)-1},getLabel:function(b){var a=this.config;
b=a.categories&&a.categories.category[b];return{label:b&&(b.oriLabel||b.label),tooltext:b&&b.tooltext}},getCategoryFromId:function(b){var a=this.config;return(b=a.categories&&a.categories.catIdMap[b])?b:{}},getCategoryPositionById:function(b){var a=this.config;return(b=a.categories&&a.categories.catIdMap[b])?b.catObj.x||b.index:!1},getClosestDiv:function(b,a){var c=this.config,e=c.axisRange,h=e.tickInterval,d=e.min,e=b;c.hasCategory&&(d=0,h=1);a=a||h/2;d=(b-d)%h;h-=d;c.showZeroPlaneValue&&0>b-d&&
0<b&&(d=b);c.showZeroPlaneValue&&0<b+h&&0>b&&(h=-b);d<=h?d<=a&&(e=b-d):h<=a&&(e=b+h);return e},setAxisDimention:function(b){var a=this.config,a=a.axisDimention||(a.axisDimention={});a.x=e(b.x,a.x);a.y=e(b.y,a.y);a.opposite=e(b.opposite,a.opposite);a.axisLength=e(b.axisLength,a.axisLength)},setDataLimit:function(b,a){var c=this.config,d=c.axisRange,h=k.getAxisLimits,n=c.isPercent?100:c.axisMaxValue,g=c.isPercent?0:c.axisMinValue,A=c.numDivLines,f=c.setAdaptiveMin,l=c.adjustDiv,m=c.startPad||0,Y=c.endPad||
0;c.originalMax=b;c.originalMin=a;b=c.isPercent?100:b+Y;a=c.isPercent?0:a-m;f=m=!f;c.hasBreakPoints&&(b-=c.totalBreakAmount);c=h(e(b,n),e(a,g),n,g,m,f,A,l);d.min=Number(J(c.Min,10));d.max=Number(J(c.Max,10));d.tickInterval=Number(J(c.divGap,10));0===d.tickInterval&&(d.tickInterval=1)},getPixel:function(b){var a=this.config,c=a.canvas,e=this.chart.config,h=a.axisDimention||{},d=e.viewPortConfig,g=h.axisLength||c.canvasHeight||e.canvasHeight,A=h.y||c.canvasTop||e.canvasTop,f=h.x||c.canvasLeft||e.canvasLeft,
k=h.y+h.axisLength||c.canvasBottom||e.canvasBottom,c=h.x+h.axisLength||c.canvasRight||e.canvasRight,e=a.axisRange.min;a.hasBreakPoints&&(b=this._getRelativeBreakValue(b));d||(d={x:f,y:A,scaleX:1,scaleY:1});a.isVertical?(h=-this.getPVR(),b=a.isReverse?k-((b-e)*h+(g*d.scaleY-d.y*d.scaleY)):A+((b-e)*h+(g*d.scaleY-d.y*d.scaleY))):(h=this.getPVR(),b=a.isReverse?c-((b-e)*h-d.x*d.scaleX):f+((b-e)*h-d.x*d.scaleX));return b},_getCustomPixel:function(b,a){var c=this.config,e=c.canvas,h=this.chart.config,d=
c.axisRange,g=h.viewPortConfig,A=a||e.canvasHeight||h.canvasHeight,f=a||e.canvasWidth||h.canvasWidth,k=e.canvasTop||h.canvasTop,l=e.canvasLeft||h.canvasLeft,Y=Y||h.canvasBottom,e=e.canvasRight||h.canvasRight,h=d.min,d=d.max-h;c.hasBreakPoints&&(b=this._getRelativeBreakValue(b));g||(g={x:l,y:k,scaleX:1,scaleY:1});c.isVertical?(f=-(A*g.scaleY/d),c=c.isReverse?Y-((b-h)*f+(A*g.scaleY-g.y*g.scaleY)):k+((b-h)*f+(A*g.scaleY-g.y*g.scaleY))):(f=f*g.scaleX/d,c=c.isReverse?e-((b-h)*f-g.x*g.scaleX):l+((b-h)*
f-g.x*g.scaleX));return c},getLimit:function(){var b=this.config.axisRange;return{min:b.min,max:b.max,tickInterval:b.tickInterval}},getAxisPosition:function(b){return this.getPixel(b)},getPVR:function(){var b=this.config,a=b.canvas,c=b.isVertical,e=b.axisRange,h=b.axisDimention||{},d=this.chart.config,b=d.viewPortConfig,g=h.axisLength||a.canvasHeight||d.canvasHeight,a=h.axisLength||a.canvasWidth||d.canvasWidth,e=e.max-e.min,e=0<e?e:1;return c?g*b.scaleY/e:a*b.scaleX/e},_isZoomed:function(){var b=
this.chart.config;if(this.config.isVertical){if(b.viewPortConfig&&1===b.viewPortConfig.scaleY)return!1}else if(b.viewPortConfig&&1===b.viewPortConfig.scaleX)return!1;return!0},draw:function(){var b=this.config,a=b.canvas,c=this.chart,e=c.config,h=b.isVertical,d=c.graphics,g=c.components.paper,A=e.viewPortConfig,f=b.viewPortRatio||{},k=a.canvasLeft||e.canvasLeft,l=a.canvasTop||e.canvasTop,Y=a.canvasWidth||e.canvasWidth,m=a.canvasHeight||e.canvasHeight,a=b.axisContainer,e=b.axisLabelContainerTop,v=
b.axisPlotLineContainer,r=b.axisPlotLineContainerTop,p=b.vlineLabelContainer,B=b.axisBandContainer,t=b.axisNameContainer,w=b.axisTrendContainerTop,z=b.axisTrendContainerBottom,C=b.axisTrendLabelContainer,F=b.axisAxisLineContainer,H=b.axisAxisLineContainerBottom,S=b.divLineThickness||0,E=d.axisBottomGroup,R=d.axisTopGroup,O=b.animateAxis,I,M,J,ia,da,Q,G,U,V,L,Z,N,P;V=A.y*A.scaleY;L=A.x*A.scaleX;c=c.get("config","animationObj");Z=c.animObj;N=c.dummyObj;I=c.transposeAnimDuration;P=h?k+","+(l-S)+","+
Y+","+(m+2*S):k-S+","+l+","+(Y+2*S)+","+m;S=d.axisBandGroup=d.axisBandGroup||g.group("dataset-Band-group",E);M=d.axisPlotLineGroup=d.axisPlotLineGroup||g.group("dataset-Line-group",E);U=d.axisTrendGroupBottom=d.axisTrendGroupBottom||g.group("dataset-Trend-group-bottom",E);J=d.axisPlotLineGroupTop=d.axisPlotLineGroupTop||g.group("dataset-Line-group-top",R);da=d.axisNameGroup=d.axisNameGroup||g.group("dataset-Name-group",E);ia=d.axisLineGroup=d.axisLineGroup||g.group("axis-Line-group",R);G=d.axisTrendGroupTop=
d.axisTrendGroupTop||g.group("dataset-Trend-group-top",R);Q=d.axisLabelGroup=d.axisLabelGroup||g.group("dataset-Label-group",E);d=d.axisLabelGroupTop=d.axisLabelGroupTop||g.group("dataset-Label-group",R);a||(b.axisContainer=a=g.group("dataset-axis",Q));e||(b.axisLabelContainerTop=e=g.group("dataset-top-label",d));F||(b.axisAxisLineContainer=g.group("axis-line-tick",ia));p||(b.vlineLabelContainer=p=g.group("axis-vline-label",ia));B?I&&O?B.animateWith(N,Z,{"clip-rect":k+","+l+","+Y+","+m},I,c.animType):
B.attr({"clip-rect":k+","+l+","+Y+","+m}):(b.axisBandContainer=B=g.group("dataset-axis-bands",S),B.attr({"clip-rect":k+","+l+","+Y+","+m}));v?I&&O?v.animateWith(N,Z,{"clip-rect":P},I,c.animType):v.attr({"clip-rect":P}):(b.axisPlotLineContainer=v=g.group("dataset-axis-lines",M),v.attr({"clip-rect":P}));r?I&&O?r.animateWith(N,Z,{"clip-rect":P},I,c.animType):r.attr({"clip-rect":P}):(b.axisPlotLineContainerTop=r=g.group("dataset-axis-lines-top",J),r.attr({"clip-rect":P}));w?I&&O?w.animateWith(N,Z,{"clip-rect":k+
","+l+","+Y+","+m},I,c.animType):w.attr({"clip-rect":k+","+l+","+Y+","+m}):(b.axisTrendContainerTop=w=g.group("dataset-axis-trend-top",G),w.attr({"clip-rect":k+","+l+","+Y+","+m}));z?I&&O?z.animateWith(N,Z,{"clip-rect":k+","+l+","+Y+","+m},I,c.animType):z.attr({"clip-rect":k+","+l+","+Y+","+m}):(b.axisTrendContainerBottom=z=g.group("dataset-axis-trend-bottom",U),z.attr({"clip-rect":k+","+l+","+Y+","+m}));C||(b.axisTrendLabelContainer=g.group("dataset-axis-trend-label",G));t||(b.axisNameContainer=
g.group("dataset-axis-name",da));H||(b.axisAxisLineContainerBottom=g.group("axis-line-tick-bottom",E));f.scaleX!==A.scaleX||f.scaleY!==A.scaleY?(f.scaleX=A.scaleX,f.scaleY=A.scaleY):h?(b=V-A.y*A.scaleY,p.transform("t0,"+b),a.transform("t0,"+b),e.transform("t0,"+b),v.transform("t0,"+b),r.transform("t0,"+b),B.transform("t0,"+b),w.transform("t0,"+b),z.transform("t0,"+b)):(b=L-A.x*A.scaleX,p.transform("t"+b+",0"),a.transform("t"+b+",0"),e.transform("t"+b+",0"),v.transform("t"+b+",0"),r.transform("t"+
b+",0"),B.transform("t"+b+",0"),w.transform("t"+b+",0"),z.transform("t"+b+",0"));this._drawComponents()},hide:function(){var b=this.config;b.axisContainer&&(b.axisLabelContainerTop.hide(),b.axisContainer.hide(),b.axisPlotLineContainer.hide(),b.axisPlotLineContainerTop.hide(),b.axisBandContainer.hide(),b.axisNameContainer.hide(),b.axisTrendContainerTop.hide(),b.axisTrendContainerBottom.hide(),b.axisTrendLabelContainer.hide(),b.axisAxisLineContainer.hide(),b.axisAxisLineContainerBottom.hide())},show:function(){var b=
this.config;b.axisContainer&&(b.axisLabelContainerTop.show(),b.axisContainer.show(),b.axisPlotLineContainer.show(),b.axisPlotLineContainerTop.show(),b.axisBandContainer.show(),b.axisNameContainer.show(),b.axisTrendContainerTop.show(),b.axisTrendContainerBottom.show(),b.axisTrendLabelContainer.show(),b.axisAxisLineContainer.show(),b.axisAxisLineContainerBottom.show())},_drawComponents:function(){var b=this.config,a=this.chart.is3D,c,e;b.drawAxisName&&this._drawAxisName();b.drawAxisLine&&this._drawAxisLine();
b.drawAxisLine&&b.hasBreakPoints&&this._drawBreakPoints();b.isActive||(c=b.lines.isDraw,e=b.band.isDraw,b.lines.isDraw=0,b.band.isDraw=0);b.hasCategory?(b.drawLabels&&this._drawCategory(),b.drawOnlyCategoryLine&&this._drawCategoryLine()):(b.drawLabels&&this._drawLabel(),b.drawPlotlines&&this._drawPlotLine());b.hasCategory&&"auto"!==b.xAxisLabelMode?(b.drawPlotlines&&this._drawCategoryVline(),b.drawPlotlines&&!a&&this._drawCategoryPlotLine(),b.drawPlotBands&&!b.hasBreakPoints&&!a&&this._drawCategoryPlotBand(),
"mixed"===b.xAxisLabelMode&&b.drawPlotBands&&!b.hasBreakPoints&&!a&&this._drawPlotBand()):b.drawPlotBands&&!b.hasBreakPoints&&!a&&this._drawPlotBand();b.isActive||(b.lines.isDraw=c,b.band.isDraw=e);b.drawTrendLines&&this._drawTrendLine();b.isConfigured=!1},_manageReuseableElement:function(b,a,c){var e=this.config.isConfigured,h=this.chart.components.paper,d,g,A,f;d=b._graphicElem||(b._graphicElem=[]);g=b._freeElem||(b._freeElem=[]);A=b._usedElem||(b._usedElem={});f=b._drawnIds={};return{getElement:function(b,
k){var l=k||{};f[b]=!0;if(A[b])return A[b]._applyAllAttr=e,A[b]._firstTimeDraw=!1,A[b];if(0<g.length)return A[b]=g.pop(),A[b]._applyAllAttr=!0,A[b]._firstTimeDraw=!1,A[b];d.push(h[a](l,c));A[b]=d[d.length-1];A[b]._firstTimeDraw=!0;A[b]._applyAllAttr=!1;return A[b]},freeUnusedElement:function(){for(var b in A)A.hasOwnProperty(b)&&!f[b]&&(A[b].attr({visibility:"hidden"}),g.push(A[b]),delete A[b])}}},_drawLabel:function(){var b=this.config,a=b.canvas,c=b.axisDimention||{},e=this.chart,h=e.config,d=e.components,
g=b.axisRange,A=b.isOpposit,f,k=b.labels,l=k.style,m,v,r=b.isVertical,p=b.animateAxis,B=g.max,t=g.min,w=a.canvasTop||h.canvasTop,z=a.canvasLeft||h.canvasLeft,C=a.canvasBottom||h.canvasBottom,a=a.canvasRight||h.canvasRight,h=b.axisNameContainer,F=b.labelPadding,H=b.showUpperLimit,E=d.paper,S=b.labelMaxH,I=b.labelMaxW,R=b.extremeLabels,O=r?c.x:c.y,c=c.opposite,M=b.drawLabelOnBothSide,eb=this.graphics.labels||[],Q=0,ia=!0,da=!1,G,L,U,V={fontFamily:l.fontFamily,fontSize:l.fontSize,fontWeight:l.fontWeight,
fontStyle:l.fontStyle,lineHeight:l.lineHeight},N,Z,P,T,X,ga=function(){(H||!H&&1>=b.labels.step)&&!da&&m<B&&m+f>B&&(v=m=B-f,da=!0);b.showZeroPlane&&0>m&&0<m+f?(m=0,v+=f):m<v?m=v:(m+=f,v+=f)};l.lineHeight&&(G=l.lineHeight,-1!==G.indexOf("px")&&(G=G.replace("px",""),G=parseFloat(G)));if(b.labels.isDraw){!M&&b.drawLabelsOpposit&&(A=!A,O=c);ia=e.get("config","animationObj");P=ia.animObj;T=ia.dummyObj;e=ia.transposeAnimDuration;X=ia.animType;ia=Sa(this.getPixel(t)-this.getPixel(t+g.tickInterval));r?(b.labelMaxH>
ia&&!b.hasCategory&&(L=xb(b.labelMaxH/ia)),L>b.labels.step&&(b.labels.step=L)):(b.labelMaxW>ia&&!b.hasCategory&&(L=xb(b.labelMaxW/ia)),L>b.labels.step&&(b.labels.step=L,H=!0));b.labels.step?f=g.tickInterval*b.labels.step:f=g.tickInterval;U=b.labels.rotation;g=this._getVisibleConfig();ia=this._isZoomed();Q=t+f*fb((g.minValue-3*f-t)/f);L=t+f*fb((g.maxValue+3*f-t)/f);Q=Q<t?t:Q;L=L>B?B:L;N={fill:l.color,"line-height":G,"font-size":l.fontSize};M&&(Z={fill:l.color,"line-height":G,"font-size":l.fontSize});
r||(U?(N["text-anchor"]=A?Ya:gb,N["vertical-align"]="center",M&&(Z["text-anchor"]=A?gb:Ya,Z["vertical-align"]="center")):(N["vertical-align"]=A?hb:Ma,M&&(Z["vertical-align"]=A?Ma:hb)));h.css(V);R.firstLabel={};R.lastLabel={};v=m=Q;for(Q=0;m<=L;){if(!ia||!(m<g.minValue||m>g.maxValue))if(b.labels.drawNormalVal||b.labels.drawLimitVal&&(m===t||m===B))if(b.labels.drawNormalVal||m===t||m===B)if(b.labels.drawLimitVal||m!==t&&m!==B)if(0!==b.showZeroPlane&&0!==b.showZeroPlaneValue||0!==m){if(1===b.showZeroPlane&&
1===b.showZeroPlaneValue&&(0>m&&0<m+f||0<m&&0>m-f)&&m!==t&&m!==B)if(r){if(this.getPixel(m)+S>=this.getPixel(0)&&this.getPixel(0)>=this.getPixel(m)-S){ga();continue}}else if(this.getPixel(m)+I>=this.getPixel(0)&&this.getPixel(0)>=this.getPixel(m)-I){ga();continue}l=b.hasBreakPoints?J(this._getRealBreakValue(m),10):J(m,10);if(r)G=b.numberFormatterFn?d.numberFormatter[b.numberFormatterFn]:b.isPercent?d.numberFormatter.percentValue:d.numberFormatter.yAxis,G=""+G.call(d.numberFormatter,l,b.axisIndex),
N["text-anchor"]=A?Ya:gb,N.text=G,N.x=A?(O||a)+F:(O||z)-F,N.y=this.getPixel(l),M&&(Z["text-anchor"]=A?gb:Ya,Z.text=G,Z.x=A?(c||z)-F:(c||a)+F,Z.y=this.getPixel(l));else{G=b.numberFormatterFn?d.numberFormatter[b.numberFormatterFn]:b.isPercent?d.numberFormatter.percentValue:d.numberFormatter.xAxis;G=""+G.call(d.numberFormatter,l);N.text=G;N.x=this.getPixel(l);N.y=A?(O||w)-F:(O||C)+F;if(m!==B&&H&&N.x+b.labelMaxW>a){ga();continue}M&&(Z.text=G,Z.x=this.getPixel(l),Z.y=A?(c||C)+F:(c||w)-F)}k.shiftX&&(N.x+=
k.shiftX);k.shiftY&&(N.y+=k.shiftY);N.transform=E.getSuggestiveRotation(U,N.x,N.y);eb[Q]?(l=eb[Q],e&&p?l.animateWith(T,P,N,e,X):l.attr(N)):eb[Q]=l=E.text(N,h);Q+=1;M&&(Z.transform=E.getSuggestiveRotation(U,Z.x,Z.y),eb[Q]?(l=eb[Q],e&&p?l.animateWith(T,P,Z,e,X):l.attr(Z)):eb[Q]=l=E.text(Z,h),Q+=1);m===B?R.lastLabel.graphic=l:m===t&&(R.firstLabel.graphic=l)}ga()}if(eb[Q])for(m=Q;m<eb.length;m++)eb[m].attr({text:""});this.graphics.labels=eb}else if(eb[Q])for(m=Q;m<eb.length;m++)eb[m].attr({text:""})},
_drawAxisName:function(){var b=this.config,a=b.canvas,c=this.chart,d=c.config,h=c.components,g=b.axisDimention||{},q=b.name.style,A=b.name.value,f=b.isVertical,k=b.isOpposit,l=c.linkedItems.smartLabel,m=a.canvasBottom||d.canvasBottom,v=a.canvasLeft||d.canvasLeft,r=a.canvasRight||d.canvasRight,p=a.canvasTop||d.canvasTop,B=a.canvasHeight||d.canvasHeight,t=a.canvasWidth||d.canvasWidth,a=b.axisNameContainer,w=b.axisNamePadding,z=b.nameMaxH,C=b.nameMaxW,F=f?g.x:g.y,H=g.opposite,E=this.graphics.axisName||
{},g=e(b.name.rotation,f?270:90),h=h.paper,S={fontFamily:q.fontFamily,fontSize:q.fontSize,lineHeight:q.lineHeight,fontWeight:q.fontWeight,fontStyle:q.fontStyle},I=b.animateAxis,R,O,M,Q;b.name.isDraw?(R=c.get("config","animationObj"),O=R.animObj,M=R.dummyObj,c=R.transposeAnimDuration,Q=R.animType,R={fontFamily:q.fontFamily,fill:q.color,"vertical-align":"center","font-size":q.fontSize,"line-height":q.lineHeight},l.useEllipsesOnOverflow(d.useEllipsesWhenOverflow),l.setStyle({fontSize:q.fontSize,fontFamily:q.fontFamily,
lineHeight:q.lineHeight,fontWeight:q.fontWeight}),!b.drawLabelOnBothSide&&b.drawAxisNameOpposit&&(k=!k,F=H),f?(b.relativeAxis&&b.relativeAxis.config&&b.relativeAxis.config.axisNamePadding&&(w=Ja(b.relativeAxis.config.axisNamePadding,w)),k&&d.canvasMarginRight&&(w=Ja(w,d.canvasMarginRight-d.marginLeft-C)),!k&&d.canvasMarginLeft&&(w=Ja(w,d.canvasMarginLeft-d.marginRight-C)),t=b.axisNameAlignCanvas||d.captionalignment&&"left"==d.captionalignment?B:Ja(B,b.oriCanvasHeight||0),g?(A=l.getSmartText(A,t,C),
l=A.tooltext,t=A.width):(A=l.getSmartText(A,C,t),l=A.tooltext,t=A.height),d=b.drawAxisNameFromBottom?m-t/2:t>B?d.height/2:p+B/2,R.text=A.text,R.x=k?(F||r)+w+C/2:(F||v)-w-C/2,R.y=d):(A=l.getSmartText(A,t,z),l=A.tooltext,k&&d.canvasMarginTop&&(w=Ja(w,d.canvasMarginTop-d.marginTop-z)),!k&&d.canvasMarginBottom&&(w=Ja(w,d.canvasMarginBottom-d.marginBottom-z)),R.text=A.text,R.x=v+t/2,R.y=k?(F||p)-w-z/2:(F||m)+w+z/2),R.transform=h.getSuggestiveRotation(f?g:0,R.x,R.y),this.graphics.axisName?(R.visibility=
Ra,c&&I?E.animateWith(M,O,R,c,Q):E.attr(R),b.showTooltip&&l&&E.trackTooltip(!0),E.css(S)):(E=h.text(R,S,a).tooltip(l),b.showTooltip&&l&&E.trackTooltip(!0)),""!==A.text?E.attr({"text-bound":[q.backgroundColor,q.borderColor,q.borderThickness,q.borderPadding,q.borderRadius,q.borderDash]}):E.attr({"text-bound":[]}),this.graphics.axisName=E):this.graphics.axisName&&this.graphics.axisName.attr({visibility:Xa})},_drawPlotLine:function(){var b=this.config,a=b.axisRange,c=a.tickInterval,e=b.isVertical,h=b.canvas,
d=this.chart,g=this.chart.is3D,A=d.config,f=h.canvasBottom||A.canvasBottom,k=h.canvasLeft||A.canvasLeft,l=h.canvasRight||A.canvasRight,h=h.canvasTop||A.canvasTop,A=a.max,a=a.min,m=b.axisPlotLineContainer,v=b.axisPlotLineContainerTop,r=b.showCanvasBorder,p=d.components.paper,B=this.graphics.line||[],t=0,w=Q(b.divLineColor,b.divLineAlpha),z=b.divLineThickness,C=b.divLineIsDashed?M(b.divLineDashLen,b.divLineDashGap,z):"none",F=Q(b.zeroPlaneColor,b.zeroPlaneAlpha),H=b.zeroPlaneThickness,E=b.animateAxis,
S,I,R,O,J,G,L,ia,C={stroke:w,"stroke-width":z,"stroke-dasharray":C};2>Sa(this.getPixel(a)-this.getPixel(a+c))&&(b.lines.isDraw=0);if(b.lines.isDraw){t=d.get("config","animationObj");G=t.animObj;L=t.dummyObj;d=t.transposeAnimDuration;ia=t.animType;I=this._getVisibleConfig();t=a+c*fb((I.minValue-3*c-a)/c);I=a+c*fb((I.maxValue+3*c-a)/c);t=t<a?a:t;I=I>A?A:I;J=m;O=R=t;for(t=0;R<=I;)0===b.showZeroPlane&&0===R||r&&(R===A||R===a)||(0===R&&R!==a&&R!==A&&(C.stroke=F,C["stroke-width"]=H,b.showZeroPlaneOnTop&&
!g&&(J=v)),S=b.hasBreakPoints?this._getRealBreakValue(R):R,S=e?vb(["M",k,this.getPixel(S),"L",l,this.getPixel(S)],z):vb(["M",this.getPixel(S),h,"L",this.getPixel(S),f],z),C.path=S.path,C["shape-rendering"]=S.isCrisped?"crisp":void 0,B[t]?(S=B[t],J.appendChild(S),d&&E?S.animateWith(L,G,C,d,ia):S.attr(C)):(S=p.path(C,J),B[t]=S),0===R&&R!==a&&R!==A&&(C.stroke=w,C["stroke-width"]=z,J=m),t+=1),b.showZeroPlane&&0>R&&0<R+c?(R=0,O+=c):R<O?R=O:(R+=c,O+=c);if(B[t])for(R=t;R<B.length;R++)B[R].attr({path:[]});
this.graphics.line=B}else if(B[t])for(R=t;R<B.length;R++)B[R].attr({path:[]})},_drawAxisLine:function(){var b=this.config,a=b.axisRange,c=b.isVertical,d=b.isOpposit,h=b.canvas,g=this.chart,q=g.config,A=b.breakPoints,f=h.canvasBottom||q.canvasBottom,k=h.canvasLeft||q.canvasLeft,l=h.canvasRight||q.canvasRight,m=h.canvasTop||q.canvasTop,h=b.axisDimention||{},v=c?h.x:h.y,r=b.drawAxisLineWRTCanvas,p=g.jsonData.chart,h=g.components.paper,q=this.graphics.axisLine||[],B=!1,t=0,w=a.max,z=a.min,a=a.tickInterval,
C=b.axisAxisLineContainerBottom,F={},H=b.animateAxis,E,S,I,F=1===e(p.showyaxisline,p.showyaxisline)?e(p.yaxislinethickness,p.pyaxislinethickness,1):0;if(b.showAxisLine){E=g.get("config","animationObj");p=E.animObj;I=E.dummyObj;g=E.transposeAnimDuration;E=E.animType;if(c)if(d?v=(r?l:v||l)+b.axisLineThickness/2:(v=r?k:v||k,v-=b.axisLineThickness/2),b.hasBreakPoints){F=["M",v,f,"L"];f=0;for(r=A.length;f<r;f+=1)k=this.getPixel(A[f].start),F.push(v,k,"M",v,k-4,"L");F.push(v,m)}else S=vb(["M",v,f,"L",v,
m],b.axisLineThickness),F=S.path;else if(d?(v=r?m:v||m,v-=b.axisLineThickness/2):(v=r?f:v||f,v+=b.axisLineThickness/2),b.hasBreakPoints){F=["M",k-F,v,"L"];f=0;for(r=A.length;f<r;f+=1)k=this.getPixel(A[f].start),F.push(k,v,"M",k-4,v,"L");F.push(l,v)}else S=vb(["M",k-F,v,"L",l,v],b.axisLineThickness),F=S.path;q[t]?(A=q[t],g&&H?A.animateWith(I,p,{path:F,stroke:b.axisLineColor,"stroke-linecap":"butt","stroke-width":b.axisLineThickness,"shape-rendering":S.isCrisped?"crisp":void 0},g,E):A.attr({path:F,
"stroke-linecap":"butt",stroke:b.axisLineColor,"stroke-width":b.axisLineThickness,"shape-rendering":S.isCrisped?"crisp":void 0})):(A=h.path({path:F,"stroke-linecap":"butt",stroke:b.axisLineColor,"stroke-width":b.axisLineThickness},C),q[t]=A);t+=1;if(b.drawTick&&b.tickLength)for(F={stroke:b.tickColor,"stroke-width":b.tickWidth},d=c?d?v+b.tickLength:v-b.tickLength:d?v-b.tickLength:v+b.tickLength,S=this._getVisibleConfig(),t=z+a*fb((S.minValue-3*a-z)/a),S=z+a*fb((S.maxValue+3*a-z)/a),S=S>w?w:S,f=t<z?
z:t,t=1;f<=S;f+=a)z=b.hasBreakPoints?this._getRealBreakValue(f):f,z=this.getPixel(z),F.path=c?"M"+v+" "+z+"L"+d+" "+z:"M"+z+" "+v+"L"+z+" "+d,q[t]?(z=q[t],g&&H?z.animateWith(I,p,F,g,E):z.attr(F)):(z=h.path(F,C),q[t]=z),!B&&f<w&&f+a>w&&(f=w-a,B=!0),t+=1}if(q[t])for(f=t;f<q.length;f++)q[f].attr({path:[]});this.graphics.axisLine=q},_drawBreakPoints:function(){var b=this.config,a=b.isVertical,c=this.chart,e=c.config,h=b.breakPoints,e=b.canvas.canvasLeft||e.canvasLeft,d=c.components.paper,g=this.graphics.brokeLine||
[],A=c.graphics,f=b.animateAxis,k,l,m,v,r,p,B,t;if(b.showAxisLine)for(k=c.get("config","animationObj"),p=k.animObj,B=k.dummyObj,c=k.transposeAnimDuration,t=k.animType,k=0,v=h.length;k<v;k+=1)a?(l=e-b.axisLineThickness/2,m=this.getPixel(h[k].start),m=["M",l-4,m+4/3,"L",l+4,m-4/3,"M",l-4,m-8/3,"L",l+4,m-16/3]):m=["M",0,0],g[k]?(l=g[k],c&&f?l.animateWith(B,p,{path:m,stroke:b.axisLineColor,"stroke-width":b.axisLineThickness},c,t):l.attr({path:m,stroke:b.axisLineColor,"stroke-width":b.axisLineThickness})):
(l=d.path({path:m,stroke:b.axisLineColor,"stroke-width":b.axisLineThickness},A.axisLineGroup),g[k]=l),r+=1;if(g[r])for(k=r;k<g.length;k++)g[k].attr({path:[]});this.graphics.brokeLine=g},_drawPlotBand:function(){var b=this.config,a=b.axisRange,c=b.canvas,e=this.chart,h=e.config,d=c.canvasLeft||h.canvasLeft,g=c.canvasTop||h.canvasTop,A=c.canvasHeight||h.canvasHeight,c=c.canvasWidth||h.canvasWidth,h=a.tickInterval,f=b.isVertical,k=b.isReverse,l=a.max,m=a.min,a=b.axisBandContainer,v=e.components.paper,
r=this.graphics.band||[],p=0,t=b.showAlternateGridColor,w=b.alternateGridColor,z=b.alternateGridAlpha,C=b.animateAxis,F,H,E,I,S;2>Sa(this.getPixel(m)-this.getPixel(m+h))&&(b.band.isDraw=0);if(t&&b.band.isDraw){p=e.get("config","animationObj");t=p.animObj;I=p.dummyObj;e=p.transposeAnimDuration;S=p.animType;F=this._getVisibleConfig();p=m+h*fb((F.minValue-3*h-m)/h);F=m+h*fb((F.maxValue+3*h-m)/h);p=p<m?m:p;F=F>l?l:F;l=Za((p-m)/h)+1;w={fill:B(Q(w,z)),"stroke-width":0};m=this.getPVR();H=z=p;for(p=0;z<F;l+=
1)0===l%2&&(E=b.showZeroPlane&&0>z&&0<z+h?z:z!==H?H-z:h,f?(w.x=d,w.y=this.getPixel(k?z:z+Sa(E)),w.width=c,w.height=Sa(E*m)):(w.x=this.getPixel(z),w.y=g,w.width=Sa(E*m),w.height=A),r[p]?(E=r[p],e&&C?E.animateWith(I,t,w,e,S):E.attr(w)):(E=v.rect(w,a),r[p]=E),p+=1),b.showZeroPlane&&0>z&&0<z+h?(z=0,H+=h):z<H?z=H:(z+=h,H+=h);if(r[p])for(z=p;z<r.length;z++)r[z].attr({x:0,y:0,width:0,height:0,fill:null,"stroke-width":0});this.graphics.band=r}else if(r[p])for(z=p;z<r.length;z++)r[z].attr({x:0,y:0,width:0,
height:0,fill:null,"stroke-width":0})},_drawTrendLine:function(){var b=this.config,a=b.canvas,d=this.chart,g=d.config,h=d.components,n=b.isOpposit,q=b.isVertical,A=d.is3D,f=b.axisIndex,k=h.numberFormatter,l=a.canvasBottom||g.canvasBottom,m=a.canvasLeft||g.canvasLeft,v=a.canvasRight||g.canvasRight,r=a.canvasTop||g.canvasTop,p=a.canvasHeight||g.canvasHeight,a=a.canvasWidth||g.canvasWidth,B=b.axisRange,g=B.max,B=B.min,t,w,z=b.trend.trendStyle,C=b.labelPadding,F=b.axisTrendContainerTop,H=b.axisTrendContainerBottom,
E=b.axisTrendLabelContainer,h=h.paper,S=this.components.trendObj||[],J={fontFamily:z.fontFamily,fontSize:z.fontSize,lineHeight:z.lineHeight,fontWeight:z.fontWeight,fontStyle:z.fontStyle},R=b.vTrendLines,O=b.trendLines,G=!0,eb=b.drawTrendLabels,L=b.axisDimention||{},ia=b.animateAxis,da,N,P,U,V,$a,Z=0,X,nb,La,ga,aa,qa,W,sa,ma,ha,fa;aa=this._getVisibleConfig();b.hasBreakPoints&&(aa.minValue=this._getRealBreakValue(aa.minValue),aa.maxValue=this._getRealBreakValue(aa.maxValue));(G=this._isZoomed())?(t=
Ja(this.getPixel(aa.minValue),this.getPixel(aa.maxValue)),w=Na(this.getPixel(aa.minValue),this.getPixel(aa.maxValue))):(aa.minValue=B,aa.maxValue=g);R?ma=n?(L.opposite||l)-(b.trendBottomPadding||0):(L.y||l)+(b.trendBottomPadding||0):(ma=n?(L.opposite||m)+(C||0):(L.x||m)-(C||0),ha=n?(L.x||v)+(C||0):(L.opposite||v)+(C||0));if(n=O||R){da=d.get("config","animationObj");C=da.animObj;L=da.dummyObj;d=da.transposeAnimDuration;fa=da.animType;P=0;for(U=n.length;P<U;P+=1)for(da=0,N=n[P].line&&n[P].line.length;da<
N;da+=1)qa=n[P].line[da],X=q?"yAxis":"xAxis",nb=k.getCleanValue(c(qa.startvalue,qa.value,0)),$a=Number(qa.endvalue)||void 0,V=Ba(I(c(qa.tooltext,n[0].tooltext,b.trendlineToolText))),V=ba(V,[7,15,16,17,18,19],{startValue:nb,startDataValue:k[X](nb,f),endValue:$a||nb,endDataValue:k[X]($a||nb,f),axisName:b.axisName},qa),nb>g||nb<B||$a>g||$a<B||!(R&&nb>=aa.minValue&&nb<=aa.maxValue||$a&&$a>=aa.minValue&&$a<=aa.maxValue||$a&&nb<=aa.minValue&&$a>=aa.maxValue||O&&nb>aa.minValue&&nb<=aa.maxValue||$a&&$a>=
aa.minValue&&$a<=aa.maxValue||$a&&nb>=aa.minValue&&$a<=aa.maxValue)||(R?(ga=I(qa.displayvalue||""),W=this.getPixel(b.hasBreakPoints?this._getRelativeBreakValue(nb):nb),La=e(qa.istrendzone,b.isTrendZone,1),sa=$a?this.getPixel(b.hasBreakPoints?this._getRelativeBreakValue($a):$a):0,void 0!==$a&&""!==$a&&$a!==nb&&La?(La={fill:Q(c(qa.color,b.trendlineColor),c(qa.alpha,b.trendlineAlpha,40)),"stroke-width":0,path:["M",W,r,"L",W,l,"L",sa,l,"L",sa,r,"Z"]},ga={fill:Q(c(qa.color,z.color),c(qa.alpha,b.trendlineAlpha,
99)),"vertical-align":Ma,text:ga,x:W+(sa-W)/2,y:ma}):(La=e(qa.thickness,b.trendlineThickness,1),La=La>a?1:La,nb=$a?vb(["M",W,r,"L",sa,l],La):vb(["M",W,r,"L",W,l],La),La={stroke:Q(c(qa.color,b.trendlineColor),c(qa.alpha,b.trendlineAlpha,99)),"stroke-width":La,"stroke-dasharray":c(qa.dashed,b.trendlinesAreDashed)===T?M(e(qa.dashlen,b.trendlinesDashLen),e(qa.dashgap,b.trendlinesDashGap),La):"none","shape-rendering":nb.isCrisped?"crisp":void 0,path:nb.path},ga={fill:Q(c(qa.color,z.color),c(qa.alpha,b.trendlineAlpha,
99)),"vertical-align":Ma,text:ga,x:$a?sa:W,y:ma}),G&&(!eb||ga.x>t||ga.x<w)&&(ga.text="")):O&&(ga=I(qa.displayvalue||""),X=e(qa.valueonright,0),La=e(qa.istrendzone,b.isTrendZone,0),W=this.getPixel(nb),sa=$a?this.getPixel($a):0,void 0!==$a&&""!==$a&&$a!==nb&&La?(La={fill:Q(c(qa.color,b.trendlineColor),c(qa.alpha,b.trendlineAlpha,40)),"stroke-width":0,path:["M",m,W,"L",v,W,"L",v,sa,"L",m,sa,"Z"]},ga={"text-anchor":X?Ya:gb,fill:Q(c(qa.color,z.color),c(qa.alpha,b.trendlineAlpha,99)),text:ga,x:X?ha:ma,
y:W+(sa-W)/2}):(La=e(qa.thickness,b.trendlineThickness,1),La=La>p?1:La,nb=$a?vb(["M",m,W,"L",v,sa],La):vb(["M",m,W,"L",v,W],La),La={stroke:Q(c(qa.color,b.trendlineColor),c(qa.alpha,b.trendlineAlpha,99)),"stroke-width":La,"stroke-dasharray":c(qa.dashed,b.trendlinesAreDashed)===T?M(e(qa.dashlen,b.trendlinesDashLen),e(qa.dashgap,b.trendlinesDashGap),La):"none","shape-rendering":nb.isCrisped?"crisp":void 0,path:nb.path},ga={"text-anchor":X?Ya:gb,fill:Q(c(qa.color,z.color),c(qa.alpha,b.trendlineAlpha,
99)),text:ga,x:X?ha:ma,y:$a?X?sa:W:W}),G&&(!eb||ga.y>t||ga.y<w)&&(ga.text="")),$a=e(qa.showontop),$a=A||1!==$a&&1!==b.showTrendlinesOnTop?H:F,S[Z]?(X=S[Z].graphics.drawing,nb=S[Z].graphics.label,$a.appendChild(X),S[Z].graphics.config.text=ga.text,d&&ia?(X.animateWith(L,C,La,d,fa),nb.animateWith(L,C,ga,d,fa)):(X.attr(La),nb.attr(ga)),nb.css(J),nb.tooltip(qa.valueToolText)):(X=h.path(La,$a),nb=h.text(ga,J,E),nb.tooltip(qa.valueToolText),S[Z]={},S[Z].graphics={},S[Z].graphics.drawing=X,S[Z].graphics.label=
nb,S[Z].graphics.config={text:ga.text}),b.showTooltip&&qa.valueToolText?nb.trackTooltip(!0):nb.trackTooltip(!1),b.showTooltip&&V?X.tooltip(V).trackTooltip(!0):X.trackTooltip(!1),Z+=1);if(S[Z])for(da=Z;da<S.length;da++)S[da].graphics.drawing.attr({path:["M",0,0]}),S[da].graphics.label.attr({text:"","text-bound":[]});this.components.trendObj=S;for(da=0;da<Z;da++)S[da].graphics.label.attr({"text-bound":S[da].graphics.config.text?[z.backgroundColor,z.borderColor,z.borderThickness,z.borderPadding,z.borderRadius,
z.borderDash]:[]})}if(S[Z])for(da=Z;da<S.length;da++)S[da].graphics.drawing.attr({path:["M",0,0]}),S[da].graphics.label.attr({text:"","text-bound":[]})},_drawCategory:function(){var b,a,d,g,h,n,q=this.config,A=q.axisDimention||{},f=q.canvas,k=this.chart,l=k.config,m=q.isOpposit,r=q.labels,p=r.style,B=q.isVertical,t=f.canvasBottom||l.canvasBottom,w=f.canvasLeft||l.canvasLeft,z=f.canvasRight||l.canvasRight,f=f.canvasTop||l.canvasTop,C=q.axisContainer,l=q.labelPadding,F=k.components.paper,H=B?A.x:A.y,
A=A.opposite,E=q.drawLabelOnBothSide,I=this.components.categoryLabel||(this.components.categoryLabel=[]),S=k.jsonData.categories,J,R,O,G=function(b){return function(a){la.call(this,k,a,b)}},eb=0,eb=0,L=q.animateAxis,ia,da,N,P,U,V,T,Z,X,aa,La,ga,W,qa,ha;U=(N=q.isCategoryAnimate&&q.animateCategories?q.animateCategories:q.categories.category)?N.length-1:0;ga=0<q.labels.step?q.labels.step:1;this._drawCategoryLine(N,0,U);if(q.labels.isDraw){ia=k.get("config","animationObj");qa=ia.animObj;ha=ia.dummyObj;
da=ia.transposeAnimDuration;ia=ia.animType;B&&(P=Sa(this.getPixel(0)-this.getPixel(1)),q.labelMaxH>P&&(eb=xb(q.labelMaxH/P)),eb>q.labels.step&&(q.labels.step=eb));P=this.getPVR();W=this._isZoomed();T=this._getVisibleConfig();Z=q.labels.rotation;!q.drawLabelOnBothSide&&q.drawLabelsOpposit&&(m=!m,H=A);S&&S[0]&&"auto"!==q.xAxisLabelMode&&(J=S[0].font,R=S[0].fontsize,O=S[0].fontcolor);J={fontFamily:c(J,p.fontFamily),fontSize:c(R,p.fontSize),fontWeight:c(p.fontWeight),fontStyle:c(p.fontStyle)};J.lineHeight=
v(J);C.css(J);S=this._manageReuseableElement(this.components.categoryLabel,"text",C);for(eb=R=0;R<=U;R+=ga)if(C=N[R])if(a=e(C.x,C.y,R),!(0===e(C.showlabel,q.showLabels,1)||W&&(a<T.minValue||a>T.maxValue))&&("auto"!==q.xAxisLabelMode&&"mixed"!==q.xAxisLabelMode||0!==q.showZeroPlane&&0!==q.showZeroPlaneValue||0!==a)&&(q.labels.drawNormalVal||q.labels.drawLimitVal&&(0===R||R===U))&&(q.labels.drawNormalVal||0===R||R===U)&&(q.labels.drawLimitVal||0!==R&&R!==U)){g=c(C.font,C.labelfont);h=c(C.fontsize,C.labelfontsize);
n=c(C.fontbold,C.labelfontbold)?e(C.fontbold,C.labelfontbold,0)?"bold":"normal":void 0;aa=c(C.fontitalic,C.labelfontitalic)?e(C.fontitalic,C.labelfontitalic,0)?"italic":"normal":void 0;d=Q(c(C.fontcolor,C.labelfontcolor,O,p.color),e(C.labelalpha,q.rawAttr.labelFontAlpha,k.singleseries?void 0:C.alpha,100));g||h||n||aa?(b={},g&&(b.fontFamily=g),h&&(b.fontSize=h),n&&(b.fontWeight=n),aa&&(b.fontStyle=aa),b.lineHeight=h?v(b):J.lineHeight):b=void 0;if(b||J)g=(b||J).lineHeight,-1!==g.indexOf("px")&&(X=g.replace(/px/i,
""),X=parseFloat(X));aa=this.getPixel(a);B?(h=C.label||"",n=Number(C.labelPadding)||0,g={fill:d,"line-height":X,opacity:1,"text-anchor":m?Ya:gb,text:h,cursor:C.link||C.labellink||p.labelLink?"pointer":"",x:m?(H||z)+l:(H||w)-l,y:n?aa+n:aa},E&&(La={fill:d,"line-height":X,opacity:1,"text-anchor":m?gb:Ya,text:h,cursor:C.link||C.labellink||p.labelLink?"pointer":"",x:m?(A||w)-l:(A||z)+l,y:n?aa+n:aa})):(h=C.label||"",n=Number(C.labelPadding)||0,g={fill:d,"line-height":X,opacity:1,text:h,cursor:C.link||C.labellink||
p.labelLink?"pointer":"",x:aa,y:m?(H||f)-l:(H||t)+l},E&&(La={fill:d,"line-height":X,opacity:1,text:h,cursor:C.link||C.labellink||p.labelLink?"pointer":"",y:m?(A||t)+l:(A||f)-l}),Z?(g["text-anchor"]=m?Ya:gb,g["vertical-align"]="center",E&&(La["text-anchor"]=m?gb:Ya,La["vertical-align"]="center")):(g["text-anchor"]=rb,g["vertical-align"]=m?hb:Ma,E&&(La["vertical-align"]=m?Ma:hb,La["text-anchor"]=rb)),n&&(g.y=m?g.y-n:g.y+n,E&&(La.y=m?La.y+n:La.y-n)));r.shiftX&&(g.x+=r.shiftX,E&&(La.x+=r.shiftX));r.shiftY&&
(g.y+=r.shiftY,E&&(La.y+=r.shiftY));g.transform=F.getSuggestiveRotation(Z,g.x,g.y);E&&(La.transform=F.getSuggestiveRotation(Z,La.x,La.y));I[eb]||(I[eb]={},I[eb].graphics={},I[eb].config={});d=I[eb].graphics.label=S.getElement("p"+a,g);d._applyAllAttr&&d.attr(g);b&&d._firstTimeDraw?(d.css(b),d._appliedCss=!0):d._applyAllAttr&&!d._firstTimeDraw&&b?(d.css({fontFamily:b&&b.fontFamily?b.fontFamily:J.fontFamily,fontSize:b&&b.fontSize?b.fontSize:J.fontSize,fontWeight:b&&b.fontWeight?b.fontWeight:J.fontWeight,
fontStyle:b&&b.fontStyle?b.fontStyle:J.fontStyle}),d._appliedCss=!0):d._appliedCss&&!b&&(d.removeCSS(),delete d._appliedCss);d._firstTimeDraw||(d._applyAllAttr?(h=g,h.visibility=pb):h={x:g.x,y:g.y,transform:g.transform,visibility:pb},da&&L&&!C.animate?d.animateWith(ha,qa,h,da,ia):d.attr(h));q.showTooltip&&C.labelTooltext?(d.tooltip(C.labelTooltext),d.trackTooltip(!0)):d.trackTooltip(!1);E&&(V=I[eb].graphics.secondLabel=S.getElement("s"+a,La),V.css(b),V._firstTimeDraw||(V._applyAllAttr?(h=La,h.visibility=
pb):h={x:La.x,y:La.y,transform:g.transform,visibility:pb},da&&L&&!C.animate?V.animateWith(ha,qa,h,da,ia):V.attr(h)),q.showTooltip&&C.labelTooltext?(V.tooltip(C.labelTooltext),V.trackTooltip(!0)):V.trackTooltip(!1));d._firstTimeDraw&&d.click(G("dataLabelClick")).hover(G("dataLabelRollOver"),G("dataLabelRollOut"));d.data("eventArgs",{link:C.link||C.labellink||p.labelLink,text:g.text,index:eb});E&&(V._firstTimeDraw&&V.click(G("dataLabelClick")).hover(G("dataLabelRollOver"),G("dataLabelRollOut")),I[eb].graphics.secondLabel.data("eventArgs",
{link:C.link||C.labellink||p.labelLink,text:g.text,index:eb}));C.animate&&!B&&(b={x:g.x-C.leftShift*P},C["delete"]&&(b.opacity=0),b.transform=F.getSuggestiveRotation(Z,b.x,g.y),I[eb].graphics.label.animateWith(ha,qa,b,da,ia),E&&(b={x:La.x-C.leftShift*P},C["delete"]&&(b.opacity=0),b.transform=F.getSuggestiveRotation(Z,b.x,La.y),I[eb].graphics.secondLabel.animateWith(ha,qa,b,da,ia)));if(d._applyAllAttr||d._firstTimeDraw)e(C.borderthickness,C.labelborderthickness)&&e(C.borderthickness,C.labelborderthickness,
1),b=C.bordercolor||C.labelbordercolor?Q(C.bordercolor||C.labelbordercolor,e(C.borderalpha,C.labelborderalpha,C.alpha,C.labelalpha,100)):"",a=e(C.borderthickness,C.labelborderthickness),d=e(C.borderpadding,C.labelborderpadding),g=e(C.borderradius,C.labelborderradius),h=C.bgcolor||C.labelbgcolor?Q(C.bgcolor||C.labelbgcolor,e(C.bgalpha,C.labelbgalpha,C.alpha,C.labelalpha,q.rawAttr.labelFontAlpha,100)):"",n=e(C.borderdashed,C.labelborderdashed,0)?M(e(C.borderdashlen,C.labelborderdashlen,4),e(C.borderdashgap,
C.labelborderdashgap,2),e(C.borderthickness,C.labelborderthickness,1)):0===e(C.borderdashed,C.labelborderdashed)?"none":p.borderDash,C.label?(I[eb].graphics.label.attr({"text-bound":[c(h,p.backgroundColor),c(b,p.borderColor),c(a,p.borderThickness),c(d,p.borderPadding),c(g,p.borderRadius),c(n,p.borderDash)]}),E&&I[eb].graphics.secondLabel.attr({"text-bound":[c(h,p.backgroundColor),c(b,p.borderColor),c(a,p.borderThickness),c(d,p.borderPadding),c(g,p.borderRadius),c(n,p.borderDash)]})):(I[eb].graphics.label.attr({"text-bound":[]}),
E&&I[R].graphics.secondLabel.attr({"text-bound":[]}));eb+=1}this.components.categoryLabel=I;S.freeUnusedElement()}},_drawCategoryLine:function(b,a,d){var g=this.config,h=g.canvas,n=this.chart,q=n.config,A=n.components,f=g.isVertical,k=h.canvasBottom||q.canvasBottom,l=h.canvasLeft||q.canvasLeft,m=h.canvasRight||q.canvasRight,h=h.canvasTop||q.canvasTop,q=g.axisPlotLineContainer,v=g.showCanvasBorder,r=g.xAxisLabelMode,p=A.paper,A=A.colorManager,B=this.components.categoryLabelLine||[],t=n.jsonData.categories,
w,z,C,F,E,H,S=0,I=g.animateAxis,R,O,J,G,L,ia,da,N;b||(b=g.isCategoryAnimate&&g.animateCategories?g.animateCategories:g.categories.category);a=a||0;d=d||b?b.length-1:0;if(g.drawPlotlines){S=n.get("config","animationObj");ia=S.animObj;da=S.dummyObj;n=S.transposeAnimDuration;N=S.animType;this.getPVR();L=this._isZoomed();O=this._getVisibleConfig();t&&t[0]&&(w=t[0].verticallinecolor,z=t[0].verticallinealpha,C=t[0].verticallinethickness,F=t[0].verticallinedashed,E=t[0].verticallinedashlen,H=t[0].verticallinedashgap);
t=a;for(S=0;t<=d;t+=1)(R=b[t])&&(!v||"auto"!==r&&"mixed"!==r||t!==d&&t!==a)&&(G=e(R.x,R.y,t),1!==Number(R.showverticalline)||L&&(G<O.minValue||G>O.maxValue)||(J=this.getPixel(G),G={stroke:Q(c(R.linecolor,w,g.divLineColor,A.getColor("divLineColor")),c(R.linealpha,z,A.getColor("divLineAlpha"))),"stroke-width":e(R.linethickness,C,1)},G["stroke-dasharray"]=e(R.linedashed,F,0)?M(e(R.linedashLen,E,4),e(R.linedashgap,H,2),G["stroke-width"]):"none",J=f?vb(["M",l,J,"L",m,J],G["stroke-width"]):vb(["M",J,h,
"L",J,k],G["stroke-width"]),G.path=J.path,G["shape-rendering"]=J.isCrisped?"crisp":void 0,B[S]?(J=B[S].graphics.line,J.attr(G),n&&I&&!R.animate?J.animateWith(da,ia,G,n,N):J.attr(G)):(J=p.path(G,q),B[S]={},B[S].graphics={},B[S].config={},B[S].graphics.line=J),S+=1));this.components.categoryLabelLine=B}if(B[S])for(t=S;t<B.length;t++)B[t].graphics.line.attr({path:["M",0,0]})},_drawCategoryVline:function(){var b=this.config,u=b.axisRange,d=u.min,u=u.max,g=b.canvas,h=this.chart,n=h.config,q=n.style||{},
A=h.components.paper,f=g.canvasBottom||n.canvasBottom,k=g.canvasLeft||n.canvasLeft,l=g.canvasRight||n.canvasRight,m=g.canvasTop||n.canvasTop,v=g.canvasHeight||n.canvasHeight,g=g.canvasWidth||n.canvasWidth,r=b.categories.category,p=b.isVertical,B=h.linkedItems.smartLabel,t=b.axisPlotLineContainerTop,w=b.axisPlotLineContainer,z=b.vlineLabelContainer,C=b.isRelativeAxisInverse,F={fontFamily:n.style.inCanfontFamily,fontSize:n.style.inCanfontSize,color:n.style.inCancolor,lineHeight:n.style.inCanLineHeight},
E=this.components.categoryVline||[],H=this.components.categoryVlineLabel||[],S=0,J=0,R=b.animateAxis,O,G,L,N,ia,da,Qa,P,U,V,T,Z,X,aa,W,ga,ha,qa,fa,sa,ma,Lb,ba,oa,Aa,ya,va,pa,ub,Ca,ja,la;G=b.isCategoryVlineAnimate&&b.animateCategoriesVline?b.animateCategoriesVline:b.categories.vline;O=h.get("config","animationObj");pa=O.animObj;ub=O.dummyObj;h=O.transposeAnimDuration;O=O.animType;N=G.length;L=this.getPVR();Ca=this._isZoomed();ja=this._getVisibleConfig();for(Qa=0;Qa<N;Qa++)ia=G[Qa],da=I(ia.label),P=
!!e(ia.showlabelborder,b.showVLineLabelBorder,1),U=!!e(ia.showlabelbackground,1),V=c(ia.labelhalign,p?Ya:rb),"center"==V?V=rb:"left"==V?V=Ya:"right"==V&&(V=gb),T=c(ia.labelvalign,p?rb:hb).toLowerCase(),T==rb?T="center":T==Ma?T=hb:T==hb&&(T=Ma),Z=e(ia.labelposition,0),X=e(ia.lineposition,.5),aa=e(ia.showvlines,b.showVLines,1),W=e(ia.alpha,b.vLineAlpha,80),ga=c(ia.color,b.vLineColor).replace(/^#?/,"#"),U=U?c(ia.labelbgcolor,b.vLineLabelBgColor,"333333").replace(/^#?/,"#"):a,Lb=c(ia.labelcolor,b.vLineLabelColor,
ia.color,q.inCancolor,b.vLineColor).replace(/^#?/,"#"),ha=e(ia.thickness,b.vLineThickness,1),qa=!!Number(c(ia.dashed,0)),fa=e(ia.dashlen,5),ma=e(ia.dashgap,2),sa=F.fontSize,parseInt(sa.replace(/px/i,""),10),sa=e(ia.rotatelabel,b.rotateVLineLabels)?270:0,X=0>X||1<X?.5:X,Z=0>Z||1<Z?0:Z,B.useEllipsesOnOverflow(n.useEllipsesWhenOverflow),B.setStyle(F),B.getOriSize(da),ga=Q(ga,aa?W:"0"),W=1===Number(ia.showontop)||1===b.showVLinesOnTop?t:w,ya=!1,la=ia.animate&&!p?ia.startIndex+1:ia.startIndex,ba=r[la],
oa=r[la+1],ba?oa||(Aa=r[0]&&r[0].x?u:b.oriCatLen,ya=!0):(Aa=r[0]&&r[0].x?d:-1,ya=!0),ya||(Aa=e(ba.x,ba.y,la),X*=Aa-e(oa.x,oa.y,la+1)),X=Aa+Sa(X),Ca&&(X<ja.minValue||X>ja.maxValue)||!ia.animate&&(X<d||X>u)||ia.animate&&(X<d||X>u+va)||(X=this.getPixel(X),fa={opacity:1,stroke:ga,"stroke-width":ha,"stroke-dasharray":qa?M(fa,ma,ha):"none"},qa={opacity:1,text:da,"text-anchor":V,"vertical-align":T,"text-bound":[]},Lb={fill:aa?Lb:ga,fontSize:F.fontSize,fontFamily:F.fontFamily,lineHeight:F.lineHeight,backgroundColor:U},
p?(ha=vb(["M",k,X,"L",l,X],ha),fa.path=ha.path,qa.x=k+g*(C?1-Z:Z),qa.y=X):(ha=vb(["M",X,m,"L",X,f],ha),fa.path=ha.path,qa.x=X,qa.y=m+v*(C?1-Z:Z)),fa["shape-rendering"]=ha.isCrisped?"crisp":void 0,V==Ya?qa.x+=2:V==gb&&(qa.x-=2),T==Ma?qa.Y+=2:T==hb&&(qa.Y-=2),E[S]?(V=E[S].graphics.drawing,W.appendChild(V),h&&R&&!ia.animate?V.animateWith(ub,pa,fa,h):V.attr(fa)):(V=A.path(fa,W),E[S]={},E[S].graphics={},E[S].config={},E[S].graphics.drawing=V),da&&(qa.transform=A.getSuggestiveRotation(sa,qa.x,qa.y),H[J]?
(V=H[J].graphics.label,V.css(Lb),h&&R&&!ia.animate?V.animateWith(ub,pa,qa,h,O):V.attr(qa)):(V=A.text(qa,Lb,z).css(Lb),H[J]={},H[J].graphics={},H[J].config={},H[J].graphics.label=V)),ia.animate&&!p&&(va=ia.leftShift*L,V={x:qa.x-va},T={path:["M",X-va,m,"L",X-va,f]},ia["delete"]&&(V.opacity=0,V["text-bound"]=[],T.opacity=0),da&&H[J].graphics.label.animateWith(ub,pa,V,h,O),E[S].graphics.drawing.animateWith(ub,pa,T,h,O)),da&&(H[J].graphics.label.attr({"text-bound":[U,aa&&P?ga:a,aa&&P?1:0,2,void 0,aa&&
P?"solid":a]}),J++),S++);if(E[S])for(Qa=S;Qa<E.length;Qa++)E[Qa].graphics.drawing.attr({path:["M",0,0]});if(H[J])for(Qa=J;Qa<H.length;Qa++)H[Qa].graphics.label.attr({text:"","text-bound":[]});this.components.categoryVline=E;this.components.categoryVlineLabel=H},_drawCategoryPlotLine:function(){var b=this.config,a=b.isVertical,c=b.axisRange,e=c.max,h=c.min,d=b.canvas,g=this.chart,A=g.config,f=b.categories.category,k=f.length,c=d.canvasBottom||A.canvasBottom,l=d.canvasLeft||A.canvasLeft,m=d.canvasRight||
A.canvasRight,d=d.canvasTop||A.canvasTop,A=b.axisPlotLineContainer,v=g.components.paper,r=this.graphics.line||[],p=0,B=Q(b.divLineColor,b.divLineAlpha),t=b.divLineThickness,w=b.divLineIsDashed?M(b.divLineDashLen,b.divLineDashGap,t):"none",z=b.animateAxis,C,F,B={stroke:B,"stroke-width":t,"stroke-dasharray":w};if(f[0]&&(void 0!==f[0].x||void 0!==f[0].y)){if(r[p]&&"categories"===b.xAxisLabelMode)for(e=p;e<r.length;e++)r[e].attr({path:[]})}else if(b.lines.isDraw&&b.categoryNumDivLines){p=g.get("config",
"animationObj");f=p.animObj;w=p.dummyObj;g=p.transposeAnimDuration;F=p.animType;b.categoryDivLinesFromZero&&(h=0,e=k-1);k=Sa(e-h)/(b.categoryNumDivLines+1);k=0===k?1:k;C=this._getVisibleConfig();p=h+k*fb((C.minValue-3*k-h)/k);C=h+k*fb((C.maxValue+3*k-h)/k);p=(p<h?h:p)+k;C=(C>e?e:C)-k;e=p;for(p=0;e<=C;e+=k)h=b.hasBreakPoints?this._getRealBreakValue(e):e,h=a?vb(["M",l,this.getPixel(h),"L",m,this.getPixel(h)],t):vb(["M",this.getPixel(h),d,"L",this.getPixel(h),c],t),B.path=h.path,B["shape-rendering"]=
h.isCrisped?"crisp":void 0,r[p]?(h=r[p],g&&z?h.animateWith(w,f,B,g,F):h.attr(B)):(h=v.path(B,A),r[p]=h),p+=1;if(r[p])for(e=p;e<r.length;e++)r[e].attr({path:[]});this.graphics.line=r}else if(r[p])for(e=p;e<r.length;e++)r[e].attr({path:[]})},_drawCategoryPlotBand:function(){var b=this.config,a=b.axisRange,c=a.max,e=a.min,h=b.canvas,d=this.chart,g=d.config,A=b.categories.category,f=A.length,a=h.canvasLeft||g.canvasLeft,k=h.canvasRight||g.canvasRight,l=h.canvasTop||g.canvasTop,m=h.canvasHeight||g.canvasHeight,
h=h.canvasWidth||g.canvasWidth,g=b.isVertical,v=b.axisBandContainer,r=d.components.paper,p=this.graphics.band||[],t=0,w=b.showAlternateGridColor,z=b.alternateGridColor,C=b.alternateGridAlpha,F=b.categoryDivLinesFromZero,E=b.animateAxis,H,I,S;if(A[0]&&(void 0!==A[0].x||void 0!==A[0].y)){if(p[t])for(C=t;C<p.length;C++)p[C].attr({x:0,y:0,width:0,height:0,fill:null,"stroke-width":0})}else if(w&&b.band.isDraw&&b.categoryNumDivLines){t=d.get("config","animationObj");A=t.animObj;w=t.dummyObj;d=t.transposeAnimDuration;
S=t.animType;F&&(e=0,c=f-1);b=Sa(c-e)/(b.categoryNumDivLines+1);b=0===b?1:b;t=this._getVisibleConfig();f=e+b*fb((t.minValue-3*b-e)/b);F=e+b*fb((t.maxValue+3*b-e)/b);f=f<e?e:f;F=F>c?c:F;e=Za((f-e)/b);f+=b;z={fill:B(Q(z,C)),"stroke-width":0};I=this.getPVR();C=f;for(t=0;C-b<F;e+=1,C+=b)0===e%2&&(H=C===f?b+Sa(this.getValue(0))+1:C===F?b+Sa(this.getValue(k-a)-c):b,g?(z.x=a,z.y=C===F?this.getPixel(C-Sa(b)):this.getPixel(C-Sa(H)),z.width=h,z.height=Sa(H*I)):(z.x=C===F?this.getPixel(C-Sa(b)):this.getPixel(C-
Sa(H)),z.y=l,z.width=Sa(H*I),z.height=m),p[t]?(H=p[t],d&&E?H.animateWith(w,A,z,d,S):H.attr(z)):(H=r.rect(z,v),p[t]=H),t+=1);if(p[t])for(C=t;C<p.length;C++)p[C].attr({x:0,y:0,width:0,height:0,fill:null,"stroke-width":0});this.graphics.band=p}else if(p[t])for(C=t;C<p.length;C++)p[C].attr({x:0,y:0,width:0,height:0,fill:null,"stroke-width":0})},resetNumericAxisComponents:function(){var b=this.graphics.line,a=this.graphics.labels,c;if(b&&b[0])for(c=0;c<b.length;c+=1)b[c].attr({path:[]});if(a&&a[0])for(c=
0,b=a.length;c<b;c+=1)a[c].attr({text:""})},resetCategoryAxisComponents:function(){var b=this.graphics.line,a=this.components.categoryVline,c=this.components.categoryLabel,e=this.components.categoryLabelLine,h;if(b&&b[0])for(h=0;h<b.length;h+=1)b[h].attr({path:[]});if(c&&c[0])for(h=0,b=c.length;h<b;h+=1)c[h].graphics.label.attr({text:"","text-bound":[]}),c[h].graphics.secondLabel&&c[h].graphics.secondLabel.attr({text:"","text-bound":[]});if(e&&e[0])for(h=0,b=e.length;h<b;h+=1)e[h].graphics.line.attr({path:["M",
0,0]});if(a&&a[0])for(h=0,b=a.length;h<b;h+=1)a[h].graphics.drawing.attr({path:["M",0,0]}),a[h].graphics.label.attr({text:"","text-bound":[]})},placeAxis:function(b){return this.config.isVertical?this._placeVerticalAxis(b):this._placeHorizontalAxis(b)},_placeVerticalAxis:function(b){var a=this.config,d=this.chart,g=d.config,h=d.components,n=d.linkedItems.smartLabel,q=a.axisRange,A=a.name,f=a.isOpposit,k=h.numberFormatter,l=g.canvasHeight,m=a.labelPadding=e(a.rawAttr.axisValuePadding,4),v=e(a.rawAttr.axisNamePadding,
5),r=a.useEllipsesWhenOverflow,p=a.name.style,t=a.trend.trendStyle,B=a.axisName,w=a.trendLines,z=a.drawLabelsOpposit,C=a.drawAxisNameOpposit,F=a.drawLabelOnBothSide,H=0,E=0,S=0,J=0,R=0,O={left:0,right:0},G="",M="",Q=0,ia,da,L,N,U,V,P;g.viewPortConfig&&1!==g.viewPortConfig.scaleY&&(a._setRangeAgain=!0);a._setRangeAgain&&this._setTickIntervalAfterZoom();a.oriCanvasHeight=l;0>m&&(a.labelPadding=2);Q=a.drawTick&&a.tickLength?a.axisLineThickness+a.tickLength:a.axisLineThickness;a.showAxisLine?(a.labelPadding=
e(m,2)+Q,0>a.labelPadding&&(a.labelPadding=(0>a.axisLineThickness?0:Q)+2),b-=a.axisLineThickness):(a.labelPadding=e(m,2),0>a.labelPadding&&(a.labelPadding=2));m=q.max;da=q.min;a.name.rotation=0;a.labels.step=a.labelStep;a.labels.isDraw=1;a.lines.isDraw=1;a.band.isDraw=1;a.labels.drawNormalVal=a.showDivLineValues;a.labels.drawLimitVal=a.showLimits;Q=p.lineHeight;Q=Number(Q.replace(/px/i,""));Q<b&&(b-=Q);1!==a.showLimits&&1!==a.showDivLineValues&&(a.labels.isDraw=0);ia=a.drawLabels?this._getVMaxLabelDimention(F?
b-2*a.labelPadding/2:b-a.labelPadding):{width:0,height:0};if(ia.width+a.labelPadding>b&&!a.hasCategory||0===ia.width)a.labels.isDraw=0;a.labels.isDraw&&(a.labelMaxW=ia.width,a.labelMaxH=ia.height,H=ia.width+a.labelPadding,E=F?2*H:H);if(a.drawTrendLines&&a.drawTrendLabels&&w){q=a.isPercent?h.numberFormatter.percentValue:a.isVertical?h.numberFormatter.yAxis:h.numberFormatter.xAxis;n.useEllipsesOnOverflow(g.useEllipsesWhenOverflow);n.setStyle({fontSize:t.fontSize,fontFamily:t.fontFamily,lineHeight:t.lineHeight,
fontWeight:t.fontWeight});g=0;for(t=w.length;g<t;g+=1)for(ia=0,N=w[g].line&&w[g].line.length;ia<N;ia+=1)U=w[g].line[ia],V=k.getCleanValue(c(U.startvalue,U.value,0)),P=e(U.endvalue,V),V<=m&&V>=da&&P<=m&&P>=da&&(a.isOpposit&&(U.valueonright=1),V=e(U.valueonright,0),J=1===V?U.endvalue||U.startvalue:U.startvalue||U.endvalue,L=I(U.origText||U.displayvalue||J||""),L===J&&(L=""+q.call(h.numberFormatter,L)),V?L.length>M.length&&(M=L):L.length>G.length&&(G=L));ia=n.getOriSize(M);R=ia.width+a.labelPadding;
ia=n.getOriSize(G);J=ia.width+a.labelPadding;f?(R>E&&R>b&&(R=b),E=Ja(E,R+a.labelPadding),J>b-E&&(J=Na(J,b-E))):(J>E&&J>b&&(J=b),E=Ja(E,J+a.labelPadding),R>b-E&&(R=Na(R,b-E)));g=0;for(t=w.length;g<t;g+=1)for(ia=0,N=w[g].line&&w[g].line.length;ia<N;ia+=1){U=w[g].line[ia];V=k.getCleanValue(c(U.startvalue,U.value,0));P=e(U.endvalue,V);L=1===Number(U.valueonright)?U.origText||U.displayvalue||""+P||"":U.origText||U.displayvalue||""+V||"";L=I(""+L);if(Number(L)===P||Number(L)===V)L=""+q.call(h.numberFormatter,
L);U.origText=L;G=(V=e(U.valueonright,0))?n.getSmartText(L,R,d.canvasHeight,r):n.getSmartText(L,E,d.canvasHeight,r);U.displayvalue=G.text;G.tooltext?U.valueToolText=G.tooltext:delete U.valueToolText}}b+=Q;!a.drawAxisName||0>=b-E-R||""===B?(A.isDraw=!1,A.value=""):(n.setStyle({fontSize:p.fontSize,fontFamily:p.fontFamily,lineHeight:p.lineHeight,fontWeight:p.fontWeight}),A.isDraw=!0,a.rotateAxisName?(a.name.rotation=f?90:270,d=n.getSmartText(B,l,b-E-R),A.value=B,a.nameMaxW=Na(d.height)):(d=n.getSmartText(B,
b-E-R,l),A.value=B,a.nameMaxW=Na(d.width,b-E),a.nameMaxH=d.height,0<=a.axisNameWidth&&(a.nameMaxW=Na(a.nameMaxW,a.axisNameWidth))),S=a.nameMaxW+v);f?(F?(O.left+=Ja(H,J),O.right+=Ja(H,R)):z?(O.left+=Ja(H,J),O.right+=R):(O.left+=J,O.right+=Ja(H,R)),C?(a.axisNamePadding=O.left+v,O.left+=S):(a.axisNamePadding=O.right+v,O.right+=S)):(F?(O.left+=Ja(H,J),O.right+=Ja(H,R)):z?(O.left+=J,O.right+=Ja(H,R)):(O.left+=Ja(H,J),O.right+=R),C?(a.axisNamePadding=O.right+v,O.right+=S):(a.axisNamePadding=O.left+v,O.left+=
S));A.isDraw&&a.axisNamePadding+a.nameMaxW>b&&(a.axisNamePadding=b-a.nameMaxW);return O},_placeHorizontalAxis:function(b){var a=this.config,d=this.chart,g=d.config,h=d.components,n=d.linkedItems.smartLabel,q=a.axisRange,A=a.name,f=a.isOpposit,k=h.numberFormatter,l=a.drawLabelsOpposit,m=a.drawAxisNameOpposit,v=a.drawLabelOnBothSide,r=0,p=g.canvasWidth,t=a.labelPadding=e(a.rawAttr.axisValuePadding,4),B=e(a.rawAttr.axisNamePadding,5),w=a.useEllipsesWhenOverflow,z=a.name.style,C=a.trend.trendStyle,F=
a.axisName,E=a.vTrendLines,H,S,J=0,R=0,O={top:0,bottom:0},G=0,M=0,Q,ia,da,L,N,U;g.viewPortConfig&&1!==g.viewPortConfig.scaleX&&(a._setRangeAgain=!0);a._setRangeAgain&&this._setTickIntervalAfterZoom();0>t&&(a.labelPadding=2);M=a.drawTick&&a.tickLength?a.axisLineThickness+a.tickLength:a.axisLineThickness;a.showAxisLine?(a.labelPadding=e(t,2)+M,0>a.labelPadding&&(a.labelPadding=(0>a.axisLineThickness?0:M)+2),b-=a.axisLineThickness):(a.labelPadding=e(t,2),0>a.labelPadding&&(a.labelPadding=2));t=q.max;
q=q.min;a.labels.rotation=0;a.labels.step=a.labelStep;a.labels.isDraw=1;a.lines.isDraw=1;a.band.isDraw=1;a.labels.drawNormalVal=a.showDivLineValues;a.labels.drawLimitVal=a.showLimits;M=z.lineHeight;M=Number(M.replace(/px/i,""));M<b&&(b-=M);a.rotateLabels&&"stagger"!==a.labelDisplay&&"none"!==a.labelDisplay&&(a.labelDisplay="rotate");1!==a.showLimits&&1!==a.showDivLineValues&&(a.labels.isDraw=0);L=a.drawLabels?this._getHMaxLabelDimention(v?(b-2*a.labelPadding)/2:b-a.labelPadding):{width:0,height:0};
a.labels.rotation?L.width+a.labelPadding>b&&!a.hasCategory&&(a.labels.isDraw=0):L.height+a.labelPadding>b&&!a.hasCategory&&(a.labels.isDraw=0);a.labels.isDraw&&(a.labels.rotation?(a.labelMaxW=L.height,a.labelMaxH=L.width,r=L.width+a.labelPadding):(a.labelMaxW=L.width,a.labelMaxH=L.height,r=L.height+a.labelPadding),J=v?2*r:r);J=Ja(J,a.labelPadding);L=J<=b?b-J:b;if(a.drawTrendLines&&a.drawTrendLabels&&E&&a.isActive)for(U=a.isPercent?h.numberFormatter.percentValue:a.isVertical?h.numberFormatter.yAxis:
h.numberFormatter.xAxis,n.useEllipsesOnOverflow(g.useEllipsesWhenOverflow),n.setStyle({fontSize:C.fontSize,fontFamily:C.fontFamily,lineHeight:C.lineHeight,fontWeight:C.fontWeight}),g=0,S=E.length;g<S;g+=1)for(Q=0,da=E[g].line&&E[g].line.length;Q<da;Q+=1)N=E[g].line[Q],H=k.getCleanValue(c(N.startvalue,N.value,0)),ia=e(N.endvalue,H),H<=t&&H>=q&&ia<=t&&ia>=q&&(H=e(N.valueonright,0),H=1===H?N.endvalue||N.startvalue:N.startvalue||N.endvalue,ia=I(N.origText||N.displayvalue||H||""),ia===H&&(ia=""+U.call(h.numberFormatter,
ia)),N.origText=ia,H=n.getSmartText(ia,d.canvasWidth,C.lineHeight,w),ia=H.height+2,0>L-ia?N.displayvalue="":(N.displayvalue=H.text,G=G<H.height?H.height:G),H.tooltext?N.valueToolText=H.tooltext:delete N.valueToolText);J+=G;L=L-G+M;b+=M;!a.drawAxisName||0>=L||""===F?(A.isDraw=!1,A.value=""):(n.setStyle({fontSize:z.fontSize,fontFamily:z.fontFamily,lineHeight:z.lineHeight,fontWeight:z.fontWeight}),A.isDraw=!0,d=n.getSmartText(F,p,L),A.value=F,a.nameMaxW=p,a.nameMaxH=d.height,R=d.height+B,a.axisNamePadding=
B+J,a.axisNamePadding+d.height>b&&(a.axisNamePadding=b-d.height,R=d.height+a.axisNamePadding-J));f?(v?(O.bottom+=r+G,O.top+=r):l?O.bottom+=r+G:(O.top+=r,O.bottom+=G),a.trendBottomPadding=O.bottom-G+2,m?O.bottom+=R:O.top+=R):(v?(O.bottom+=r+G,O.top+=r):l?(O.top+=r,O.bottom+=G):O.bottom+=r+G,a.trendBottomPadding=O.bottom-G+2,m?O.top+=R:O.bottom+=R);return O},_getHMaxLabelDimention:function(b){function a(b,f){switch(f.toLowerCase()){case "left":return Math.abs(c._getCustomPixel(b));case "right":return Math.abs(g.width-
c._getCustomPixel(b))}}var c=this,d=c.config,h=c.chart,g=h.config,q=h.components,A=h.linkedItems.smartLabel,f=d.axisRange,k=d.labels,h=d.labelDisplay,l=d.slantLabel,Y=k.style,r=d.maxLabelHeight,p=f.tickInterval,t=d.staggerLines,B=d.labelStep,w=g.canvasLeft,z=g.canvasRight,C=t-2,F,H,E=f.max,I=f.min,B=0,S=d.categories&&d.categories.category,G=0,R,O,M,Q={text:void 0,width:Number.NEGATIVE_INFINITY,style:void 0},f=Number.NEGATIVE_INFINITY,L,ia,da,N,P=function(){},U=P,V=P,X=P,Z={},T,aa,W,ga,ha,qa=0,fa=
!1,sa=0,ma,ba=!1,oa,ja,Aa,ya=Number.POSITIVE_INFINITY,va,pa=Number.POSITIVE_INFINITY;if(d.hasCategory&&(!S||0===S.length))return{width:0,height:0};"rotate"===h&&(d.rotateLabels=1);d.hasCategory||(d.irregularCatAxis=!1);F=0===C?1:1===C?1.5:C;A.useEllipsesOnOverflow(g.useEllipsesWhenOverflow);A.setStyle({fontSize:Y.fontSize,fontFamily:Y.fontFamily,lineHeight:Y.lineHeight,fontWeight:Y.fontWeight});if(d.irregularCatAxis){S.sort(function(b,a){return b.x-a.x});C=0;for(G=S.length;C<G;C++){R=S[C];if(void 0!==
ga){pa=Math.abs(R.x-ga);ja=Sa(c._getCustomPixel(I)-c._getCustomPixel(I+pa));A.setStyle(R.style||{});oa=A.getOriSize("W");oa=oa.width;if(ja<1.2*oa){R.label="";pa=ya;continue}Aa._individualIWR=ja;R._individualIWL=ja;ya=pa}Aa=R;ga=R.x}pa===Number.POSITIVE_INFINITY&&(pa=Math.floor(Math.min(R.x,E-R.x)),pa=Math.max(pa,4));C=0;for(G=S.length;C<G;C++)R=S[C],C||(R._individualIWL=Infinity),C===G-1&&(R._individualIWR=Infinity),R.individualIW=Math.min(R._individualIWL,R._individualIWR);M=Sa(c._getCustomPixel(I)-
c._getCustomPixel(I+pa));M=Math.min(2*a(S[0].x,"left"),2*a(S[G-1].x,"right"),M)}else M=Sa(c._getCustomPixel(I)-c._getCustomPixel(I+p));b=r?r:b;Z.__root__={getHeight:function(b){return parseInt(S[b]._ovrStyle.lineHeight.replace(/(\d+)px/,"$1"),10)},getWidth:function(){return b},getCalculatedLabelStep:function(b){var a=0,f=b.length,e=Number.NEGATIVE_INFINITY,h,u=0,g;if(d.irregularCatAxis)return d.labelStep;for(;a<f;a++)if(h=b[a])h.label||(h.label=""),O={fontSize:Y.fontSize,fontFamily:Y.fontFamily,lineHeight:Y.lineHeight,
fontWeight:Y.fontWeight},u++,h.style=h.style||{},m(O,h.style),O.lineHeight=v(O),A.setStyle(O),d.rotateLabels&&(g=parseInt(O.lineHeight.replace(/(\d+)px/,"$1"),10)),L=A.getSmartText(h.label,void 0,g),h=0===d.rotateLabels?60<L.width?60:L.width:L.height,e=Math.max(h,e);b=Math.floor(Sa(c._getCustomPixel(E)-c._getCustomPixel(I))/e);if(u<=b)return d.labelStep;u=Math.max(Math.ceil(u/b),d.labelStep);M=Sa(c._getCustomPixel(I)-c._getCustomPixel(I+u));return u}};Z._inProp={};Z.getCopyById=function(b){var a=
this.__root__,c=this._inProp.copyStore,f,c=c||{};if(f=c[b])return f;m(f=c[b]={},a);return f};if(d.hasCategory){switch(h){case "rotate":k.rotation=l?300:270;N=Z.getCopyById("rotate");break;case "stagger":N=Z.getCopyById("stagger");N.getHeight=function(b){var a;a=(b=d.categories.category[b])&&b.style||(b.style={});O={fontSize:Y.fontSize,fontFamily:Y.fontFamily,lineHeight:Y.lineHeight,fontWeight:Y.fontWeight};m(O,a);A.setStyle(O);return A.getOriSize(b.label).height};N.getWidth=function(b){return b.individualIW?
b.individualIW:2*M*F-4};X=function(a){var c,f=a.length,e=0,h,d,u;A.setStyle(Y);c=A.getOriSize("WWW").height;if(Math.floor(a[f-1]._cumulativeSum)<=Math.ceil(f*(c+2)))d=Math.floor(b/c),t=0>d-t?d:t;else{d=Math.floor(b/(c+4));do for(e=0,u=d,h=u-1,f=a.length;h<f;){f-h<d&&(h=f-1);c=a[h];e=c._cumulativeSum-e;if(~~e>-~b){fa=!0;break}else fa=!1;e=c._cumulativeSum;h+=u}while(d--&&fa);d++;t=Math.min(t,d)}};U=function(b){var a,c,f,e,h=0;e=0;for(f=b.length;e<f;e++)a=b[e],a.stepSkipped||(c=a&&a.style||{},(c=c.lineHeight)||
(c=Y.lineHeight),(H=h++%t)?a.labelPadding=c.replace(/px/i,"")*H:a.labelPadding=0)};break;case "none":N=Z.getCopyById("none");N.getHeight=P;V=N.getWidth=P;d.rotateLabels&&(k.rotation=l?300:270,ma=b);N.getCalculatedLabelStep=function(){return d.labelStep};break;default:N=Z.getCopyById("auto"),N.getHeight=function(){return b},N.getWidth=function(b){return b.individualIW?b.individualIW:M-8},V=function(b,a){var c,f,h,u;if(!d.irregularCatAxis&&(A.setStyle(b),c=A.getOriSize("WWW"),c=c.width,c>=M&&0!==d.rotateLabels)){k.rotation=
l?300:270;k.forceRotate=!0;N=Z.getCopyById("rotate");ia=N.getWidth;da=N.getHeight;c=Q.width=0;for(f=a.length;c<f;c++)(h=a[c])&&(h.label||h.oriLabel)&&0!==e(h.showlabel,d.showLabels,1)&&(u=h._ovrStyle,A.setStyle({fontSize:u.fontSize,fontFamily:u.fontFamily,lineHeight:u.lineHeight,fontWeight:u.fontWeight}),L=A.getSmartText(h.oriLabel,ia(h),da(c)),h.label=L.text,h.labelTooltext=L.tooltext,h._sLabel=L,Q.width<L.width&&(Q.text=L.text,Q.width=L.width,Q.style=u));T=Q.text}}}ia=N.getWidth;da=N.getHeight;
B=d.labels.step=d.labelStep=d._oriLabelStep;B=d.labels.step=d.labelStep=N.getCalculatedLabelStep(S);C=0;for(G=S.length;C<G;C++)(R=S[C])&&(R.label||R.oriLabel)&&0!==e(R.showlabel,d.showLabels,1)&&(ba=!0,O={fontSize:Y.fontSize,fontFamily:Y.fontFamily,lineHeight:Y.lineHeight,fontWeight:Y.fontWeight},m(O,R.style),O.lineHeight=v(O),A.setStyle(O),C%B&&(R.stepSkipped=!0,sa++),R._ovrStyle=O,L=A.getSmartText(R.oriLabel||R.label,ia(R),da(C)),qa+=R._nLineHeight=L.height+2,R._cumulativeSum=qa,R.oriLabel=R.oriLabel||
R.label,R.label=L.text,R.labelTooltext=L.tooltext,R._sLabel=L,Q.width<L.oriTextWidth&&(m(Q,L),Q.style=O),f<L.height&&(f=L.height));if(!ba)return{height:0,width:0};X(S,sa);U(S,sa);V(Q.style,S);T=Q.text||"";if("mixed"===d.xAxisLabelMode)for(R=d.isPercent?q.numberFormatter.percentValue:q.numberFormatter.xAxis,B=T.length,C=I;C<=E;C+=p)ga=d.hasBreakPoints?c._getRealBreakValue(C):C,ga=""+R.call(q.numberFormatter,ga,d.axisIndex),ga.length>B&&(T=ga,B=ga.length);Q.height=Math.max(f,Q.height||0);aa=S.length;
C=0;for(G=S.length;C<G&&(ha=S[C],!ha._sLabel);C++);G=S.length;for(C=G-1;0<=C&&(va=S[C],!va._sLabel);C--);W=c._isZoomed();k.rotation||W?(d.axisEndLabelDisplaySpace.left=0,d.axisEndLabelDisplaySpace.right=0):(d.axisEndLabelDisplaySpace.left=Math.max(w-(c._getCustomPixel(ha.x||0)-ha._sLabel.width/2),0),d.axisEndLabelDisplaySpace.right=Math.max(c._getCustomPixel(va.x||aa-1)+va._sLabel.width/2-z,0));ha=Q}else{R=d.numberFormatterFn?q.numberFormatter[d.numberFormatterFn]:d.isPercent?q.numberFormatter.percentValue:
q.numberFormatter.xAxis;for(C=I;C<=E;C+=p)ga=d.hasBreakPoints?J(c._getRealBreakValue(C),10):J(C,10),ga=""+R.call(q.numberFormatter,ga,d.axisIndex),C===I&&(aa=ga),C===E&&(W=ga),ga.length>B&&(T=ga,B=ga.length);A.setStyle({fontSize:Y.fontSize,fontFamily:Y.fontFamily,lineHeight:Y.lineHeight,fontWeight:Y.fontWeight});ha=A.getOriSize(T||"");"rotate"===h&&(k.rotation=270);d.rotateLabels&&(k.rotation=l?300:270);k.rotation||(aa=A.getOriSize(aa||""),W=A.getOriSize(W||""),d.axisEndLabelDisplaySpace.left=aa.width/
2+2,d.axisEndLabelDisplaySpace.right=W.width/2+2)}d.hasCategory&&"stagger"===h&&(ha.height=t*Q.height);ha.width=ma?Math.min(ma,ha.width):ha.width;return ha},_getVMaxLabelDimention:function(b){var a,d,g,h,n=this.config,q=this.chart,A=q.components,f=q.config,k=q.linkedItems.smartLabel,l=n.axisRange,m=n.labels.style,r=l.tickInterval,p=n.useEllipsesWhenOverflow;d=n.maxLabelWidthPercent;var t=l.max;g=l.min;l=0;h=q.jsonData.categories;var q={height:0,width:0},B,w;k.useEllipsesOnOverflow(f.useEllipsesWhenOverflow);
k.setStyle({fontSize:m.fontSize,fontFamily:m.fontFamily,lineHeight:m.lineHeight,fontWeight:m.fontWeight});if(n.hasCategory){h&&(B=h[0].font,w=h[0].fontsize);d&&(f=d/100*f.width,f<b&&(b=f));A=n.categories.category;f=0;for(r=A.length;f<r;f++)t=A[f],0!==e(t.showlabel,n.showLabels)&&(a=c(t.font,t.labelfont,B,m.fontFamily),d=c(t.fontsize,t.labelfontsize,w,m.fontSize).replace(/px/i,"")+"px",g="normal"==m.fontWeight?e(t.fontbold,t.labelfontbold,0)?"bold":"normal":m.fontWeight,h="normal"==m.fontStyle?e(t.fontitalic,
t.labelfontitalic,0)?"italic":"normal":m.fontStyle,a={fontFamily:c(a,B,m.fontFamily),fontSize:c(d,w,m.fontSize),fontWeight:c(g,m.fontWeight),fontStyle:c(h,m.fontStyle)},a.lineHeight=v(a),k.setStyle(a),a=k.getSmartText(t.oriLabel||t.label,b,m.lineHeight,p),t.oriLabel=t.oriLabel||t.label,t.label=a.text,t.labelTooltext=a.tooltext,a.width>l&&(q=a,l=a.width));return q}b=n.numberFormatterFn?A.numberFormatter[n.numberFormatterFn]:n.isPercent?A.numberFormatter.percentValue:A.numberFormatter.yAxis;for(f=g;f<=
t;f+=r)m=n.hasBreakPoints?J(this._getRealBreakValue(f),10):J(f,10),m=""+b.call(A.numberFormatter,m,n.axisIndex),m.length>l&&(a=m,l=m.length);return k.getOriSize(a)},getLogAxisLimits:function(b,a,c,e,h,d){var g=function(b){return null===b||void 0===b||""===b||isNaN(b)?!1:!0},A=0,f=[],k,l,m,v,r,p,t,B;b===a&&(a-=a/100);g(c)&&Number(c)>=b?b=Number(c):(c=1<h?xb(cb(b)/cb(h)):fb(cb(b)/cb(h)),b=tb(h,c),l=c);l||(l=1<h?xb(cb(b)/cb(h)):fb(cb(b)/cb(h)));g(e)&&Number(e)<=a?a=Number(e):(c=1<h?fb(cb(a)/cb(h)):xb(cb(a)/
cb(h)),a=tb(h,c),k=c);k||(k=1<h?fb(cb(a)/cb(h)):xb(cb(a)/cb(h)));e=Number(String(cb(h)/cb(10)));d=Number(d)||(fb(e)==e?8:4);1<h?(m=l,v=k):0<h&&1>h&&(m=k,v=l);e=l;for(k=m;k>=v;--k)if(m=tb(h,e),a<=m&&b>=m&&(f[A++]={value:m,ismajor:!0}),k!=v){l=1<h?-1:1;m=tb(h,e)-tb(h,e+l);c=m/(d+1);for(g=1;g<=d;++g)m=tb(h,e+l)+c*g,a<=m&&b>=m&&(f[A++]={value:m,ismajor:!1});1<h?e--:e++}for(t in f)for(B in f[t])"value"==B&&(r||(r=f[t][B]==a&&(f[t].isextreme=f[t].isMin=!0)),p||(p=f[t][B]==b&&(f[t].isextreme=f[t].isMax=
!0)));r||(f[A++]={value:a,ismajor:!0,isMin:!0,isextreme:!0});p||(f[A]={value:b,ismajor:!0,isMax:!0,isextreme:!0});return{Max:b,Min:a,divArr:f}},getCategoryLen:function(){return this.config.categories?this.config.categories.category.length:0},getCleanValue:function(b,a){var c=this.chart;return(this.components.numberFormatter||c.components.numberFormatter).getCleanValue(b,a)},dataLabels:function(b){var a=this.chart;return(this.components.numberFormatter||a.components.numberFormatter).dataLabels(b,this.config.axisIndex)},
setNumberFormatter:function(b){this.components.numberFormatter=b}},void 0,{setAdaptiveMin:0,adjustDiv:1,axisNameWidth:void 0,rotateAxisName:0,useEllipsesWhenOverflow:1,divLineColor:void 0,divLineAlpha:void 0,divLineThickness:void 0,divLineIsDashed:void 0,divLineDashLen:void 0,divLineDashGap:void 0,showAlternateGridColor:void 0,alternateGridColor:void 0,alternateGridAlpha:void 0,showZeroPlane:1,zeroPlaneAlpha:80,showZeroPlaneValue:1,showZeroPlaneOnTop:1,showAxisLine:void 0,axisLineThickness:void 0,
axisLineAlpha:void 0,tickLength:void 0,trendlineToolText:void 0,trendlineColor:"333333",trendlineThickness:1,trendlineAlpha:void 0,showTrendlinesOnTop:0,trendlinesAreDashed:0,trendlinesDashLen:5,trendlinesDashGap:2,isTrendZone:void 0,showTrendlines:1,showTrendlineLabels:1,showLabels:1,maxLabelHeight:void 0,rotateLabels:void 0,slantLabel:0,showAxisValues:1,showTooltip:1}]);FusionCharts.register("component",["axis","log",{configure:function(){var b=this.config,a=b.rawAttr,d=this.chart.components,g=
d.numberFormatter,d=d.colorManager;FusionCharts.register("component",["axis","cartesian"]).prototype.configure.call(this);b.minorDivlinecolor=Q(c(a.minorDivlinecolor,d.getColor("divLineColor")),e(a.minorDivLineAlpha,d.getColor("divLineAlpha")/2));b.axisMinValue=g.getCleanValue(a.axisMinValue);b.axisMaxValue=g.getCleanValue(a.axisMaxValue);0>=b.axisMinValue&&(b.axisMinValue=void 0);0>=b.axisMaxValue&&(b.axisMaxValue=void 0);b.minorDivLineThickness=e(a.minorDivLineThickness,1)},setDataLimit:function(b,
a){var c=this.config,d=c.axisRange,h=this.getLogAxisLimits,g=c.axisMaxValue,q=c.axisMinValue,c=h(e(b,g),e(a,q),g,q,c.base,c.numMinorDivLines);d.min=Number(J(c.Min,10));d.max=Number(J(c.Max,10));d.divArr=c.divArr||{}},_setTickIntervalAfterZoom:function(){var b=this.config,a=this.chart.config.viewPortConfig,c=b.isVertical,d=b.axisRange,h=this.getLogAxisLimits,g=b.rawAttr,q,A;b.hasCategory||(c=c?a.scaleY:a.scaleX,a=e(g.axisrange?g.axisrange.max:d.max),A=e(g.axisrange?g.axisrange.min:d.min),g=1===c?b.axisMaxValue:
d.max,q=1===c?b.axisMinValue:d.min,e(1===c?b.adjustDiv:0),b=h(a,A,g,q,b.base,b.numMinorDivLines),d.min=Number(J(b.Min,10)),d.max=Number(J(b.Max,10)),d.divArr=b.divArr||{})},getPixel:function(b){var a=this.config,c=this.chart.config,e=a.axisRange,h=c.viewPortConfig,d=c.canvasHeight,g=c.canvasWidth,A=c.canvasTop,f=c.canvasLeft,k=c.canvasBottom,c=c.canvasRight,l=e.max,e=e.min,m=a.base,v=cb(l)/m,r=cb(e)/m;b=cb(b)/m-r;h||(h={x:f,y:A,scaleX:1,scaleY:1});a.isVertical?(g=-d*h.scaleY/(v-r),a=a.isReverse?k-
(b*g+(d*h.scaleY-h.y*h.scaleY)):A+(b*g+(d*h.scaleY-h.y*h.scaleY))):(g=g*h.scaleX/(cb(l-e)/m),a=a.isReverse?c-(b*g-h.x*h.scaleX):f+(b*g-h.x*h.scaleX));return a},_drawPlotLine:function(){var b=this.config,a=b.axisRange,c=b.isVertical,e=this.chart,h=e.config,d=h.canvasLeft,g=h.canvasRight,A=h.canvasTop,h=h.canvasBottom,f=b.showCanvasBorder,k=a.max,l=a.min,m=b.axisPlotLineContainer,v=e.components.paper,r=this.graphics.line||[],p=0,t=Q(b.divLineColor,b.divLineAlpha),B=b.divLineThickness,w=b.divLineIsDashed?
M(b.divLineDashLen,b.divLineDashGap,B):"none",C=Q(b.zeroPlaneColor,b.zeroPlaneAlpha),z=b.zeroPlaneThickness,F=b.animateAxis,H,E,S,I,R,O,J,G,L;I={stroke:t,"stroke-width":B,"stroke-dasharray":w};w={stroke:b.minorDivlinecolor,"stroke-width":b.minorDivLineThickness,"stroke-dasharray":w};if(b.lines.isDraw){H=e.get("config","animationObj");G=H.animObj;L=H.dummyObj;e=H.transposeAnimDuration;H=H.animType;this._getVisibleConfig();R=a.divArr;O=R.length;for(a=0;a<O;a++)if(S=R[a],J=S.value,E=this.getPixel(J),
S=S.ismajor?I:w,!f||J!==l&&J!==k)if(0!==b.showZeroPlaneValue||0!==b.showZeroPlane||0!==J)0===J&&1===b.showZeroPlane&&1===b.showZeroPlaneValue&&(S.stroke=C,S["stroke-width"]=z),S.path=c?"M"+d+" "+E+"L"+g+" "+E:"M"+E+" "+A+"L"+E+" "+h,r[p]?(E=r[p],e&&F?E.animateWith(L,G,S,e,H):E.attr(S)):(E=v.path(S,m),r[p]=E),0===J&&1===b.showZeroPlane&&1===b.showZeroPlaneValue&&(S.stroke=t,S["stroke-width"]=B),p+=1;if(r[p])for(a=p;a<r.length;a++)r[a].attr({path:[]});this.graphics.line=r}else if(r[p])for(a=p;a<r.length;a++)r[a].attr({path:[]})},
_drawLabel:function(){var b=this.config,a=this.chart,c=a.config,e=a.components,h=b.axisRange,d=b.isOpposit,g,A=b.labels,f=A.style,k=b.isVertical,l=h.max,m=h.min,v=c.canvasBottom,r=c.canvasLeft,p=c.canvasRight,c=c.canvasTop,t=b.axisContainer,B=b.labelPadding,w=e.paper,C=b.labelMaxH,z=b.labelMaxW,F=b.axisStartPosition,H=this.graphics.labels||[],E=0,S=b.animateAxis,I,R,O,J,G,M,Q,L={fontFamily:f.fontFamily,fontSize:f.fontSize,fontWeight:f.fontWeight,fontStyle:f.fontStyle,lineHeight:f.lineHeight},N,P,
U,V;f.lineHeight&&(M=f.lineHeight,-1!==M.indexOf("px")&&(M=M.replace("px",""),parseFloat(M)));if(b.labels.isDraw){I=a.get("config","animationObj");a=I.animObj;M=I.dummyObj;U=I.animType;I=I.transposeAnimDuration;Sa(this.getPixel(m)-this.getPixel(m+h.tickInterval));V=this._isZoomed();b.labels.step?g=h.tickInterval*b.labels.step:g=h.tickInterval;G=b.labels.rotation;J=this._getVisibleConfig();f={fill:f.color,"font-size":f.fontSize};t.css(L);L=h.divArr;N=L.length;for(h=0;h<N;h++)if(P=L[h],Q=P.value,R=
this.getPixel(Q),!(!P.ismajor&&!b.showMinorDivLineValues||O&&R>O-b.labelMaxH&&R<O+b.labelMaxH||V&&(Q<J.minValue||Q>J.maxValue)||!b.labels.drawNormalVal&&(!b.labels.drawLimitVal||Q!==m&&Q!==l)||!b.labels.drawNormalVal&&Q!==m&&Q!==l||!(b.labels.drawLimitVal||Q!==m&&Q!==l)||0===b.showZeroPlaneValue&&0===b.showZeroPlane&&0===Q)){if(1===b.showZeroPlane&&1===b.showZeroPlaneValue&&(0>Q&&0<Q+g||0<Q&&0>Q-g))if(k){if(R+C>=this.getPixel(0)&&this.getPixel(0)>=R-C)continue}else if(R+z>=this.getPixel(0)&&this.getPixel(0)>=
R-z)continue;k?(O=b.numberFormatterFn?e.numberFormatter[b.numberFormatterFn]:b.isPercent?e.numberFormatter.percentValue:e.numberFormatter.yAxis,O=""+O.call(e.numberFormatter,Q),Q=b.hasCategory?b.categories.category[h].labelPadding||0:0,f["text-anchor"]=d?Ya:gb,f.text=O,f.x=d?(F||p)+B:(F||r)-B,f.y=Q?R+Q:R,O=f.y):(O=b.numberFormatterFn?e.numberFormatter[b.numberFormatterFn]:b.isPercent?e.numberFormatter.percentValue:e.numberFormatter.xAxis,O=""+O.call(e.numberFormatter,Q),Q=b.hasCategory?Number(b.categories.category[h].labelPadding)||
0:0,f.text=O,f.x=R,f.y=d?(F||c)-B:(F||v)+B,Q&&(f.y+=Q),G?(f["text-anchor"]=d?Ya:gb,f["vertical-align"]="center"):f["vertical-align"]=d?hb:Ma,O=f.x);A.shiftX&&(f.x+=A.shiftX);A.shiftY&&(f.y+=A.shiftY);f.transform=w.getSuggestiveRotation(G,f.x,f.y);H[E]?(R=H[E],I&&S?R.animateWith(M,a,f,I,U):R.attr(f)):H[E]=w.text(f,t);E+=1}if(H[E])for(h=E;h<H.length;h++)H[h].attr({text:""});this.graphics.labels=H}else if(H[E])for(h=E;h<H.length;h++)H[h].attr({text:""})},_drawPlotBand:function(){},_getVMaxLabelDimention:function(){var b=
this.config,a=this.chart,c=a.components,e=a.linkedItems.smartLabel,h=b.labels.style,d=0,g=b.axisRange.divArr,A=g.length,f;e.useEllipsesOnOverflow(a.config.useEllipsesWhenOverflow);e.setStyle({fontSize:h.fontSize,fontFamily:h.fontFamily,lineHeight:h.lineHeight,fontWeight:h.fontWeight});a=b.isPercent?c.numberFormatter.percentValue:c.numberFormatter.xAxis;for(b=0;b<A;b++)h=g[b],h=""+a.call(c.numberFormatter,h.value),h.length>d&&(f=h,d=h.length);return e.getOriSize(f)},_getHMaxLabelDimention:function(){var b=
this.config,a=this.chart,c=a.components,e=a.linkedItems.smartLabel,h=b.labels.style,d=0,g=b.axisRange.divArr,A=g.length,f;e.useEllipsesOnOverflow(a.config.useEllipsesWhenOverflow);e.setStyle({fontSize:h.fontSize,fontFamily:h.fontFamily,lineHeight:h.lineHeight,fontWeight:h.fontWeight});a=b.isPercent?c.numberFormatter.percentValue:c.numberFormatter.xAxis;for(b=0;b<A;b++)h=g[b],h=""+a.call(c.numberFormatter,h.value),h.length>d&&(f=h,d=h.length);return e.getOriSize(f)},getCleanValue:function(b){var a=
null,c=this.chart.components.numberFormatter;b=Sa(b);0<b&&(a=c.getCleanValue(b));return a}},"cartesian",{base:10,showMinorDivLineValues:1,numMinorDivLines:void 0}]);FusionCharts.register("component",["axis","polarcartesan",{_drawComponents:function(){var b=this.config;b.drawLabels&&this._drawLabel();b.drawPlotlines&&this._drawPlotLine()},_drawPlotLine:function(){var b=this.config,a=b.axisRange,c=a.tickInterval,e=this.chart,h=a.max,a=a.min,d=b.axisPlotLineContainer,g=e.components.paper,A=this.graphics.line||
[],f=0,k=Q(b.divLineColor,b.divLineAlpha),l=b.divLineThickness,m=b.divLineIsDashed?M(b.divLineDashLen,b.divLineDashGap,l):"none",v=Q(b.zeroPlaneColor,b.zeroPlaneAlpha),r=b.zeroPlaneThickness,p=b.animateAxis,t,B,w,C,z,F,H,E,S,m={stroke:k,"stroke-width":l,"stroke-dasharray":m};t=e.get("config","animationObj");E=t.animObj;S=t.dummyObj;e=t.transposeAnimDuration;t=t.animType;if(b.lines.isDraw){w=this._getVisibleConfig();f=a+c*fb((w.minValue-3*c-a)/c);w=a+c*fb((w.maxValue+3*c-a)/c);f=f<a?a:f;w=w>h?h:w;
z=h=f;for(f=0;h<w;){if(h!==a&&(0!==b.showZeroPlane||0!==h)){0===h&&1===b.showZeroPlane&&(m.stroke=v,m["stroke-width"]=r);m.path=["M"];B=b.polarAxis;C=B.config.categories.category;F=C.length;for(C=0;C<F;C++)H=B.getPixel(C,B.config.centerY-this.getPixel(h)),m.path.push(H.x,H.y,"L");m.path.pop();m.path.push("Z");A[f]?(B=A[f],e&&p?B.animateWith(S,E,m,e,t):B.attr(m)):(B=g.path(m,d),A[f]=B);0===h&&1===b.showZeroPlane&&(m.stroke=k,m["stroke-width"]=l);f+=1}b.showZeroPlane&&0>h&&0<h+c?(h=0,z+=c):h<z?h=z:
(h+=c,z+=c)}if(A[f])for(h=f;h<A.length;h++)A[h].attr({path:[]});this.graphics.line=A}else if(A[f])for(h=f;h<A.length;h++)A[h].attr({path:[]})}},"cartesian"]);FusionCharts.register("component",["axis","gauge",{configure:function(){var b=this.config,a=b.rawAttr,d=this.chart.components.colorManager;FusionCharts.register("component",["axis","cartesian"]).prototype.configure.call(this);b.majorTMColor=Q(c(a.majorTMColor,d.getColor("tickColor")),e(a.majorTMAlpha,100));b.tickValueStep=e(a.tickValueStep,1);
b.tickValueStep=Za(b.tickValueStep);0>=b.tickValueStep&&(b.tickValueStep=1);b.connectTickMarks=b.showTickMarks?e(a.connectTickMarks,1):0;b.showTickValues=e(a.showTickValues,b.showTickMarks);b.reverseScale=1==e(a.reverseScale,0);b.minorTMColor=Q(c(a.minorTMColor,b.majorTMColor),e(a.minorTMAlpha,b.majorTMAlpha,100));b.minorTMHeight=b.showTickMarks?e(a.minorTMHeight,Za(b.majorTMHeight/2)):0;b.tickValueDistance=e(a.tickValueDistance,0)+2;b.upperLimitDisplay=I(a.upperLimitDisplay)||"";b.lowerLimitDisplay=
I(a.lowerLimitDisplay)||"";b.drawTickMarkConnector=a.drawTickMarkConnector||0},setDataLimit:function(b,a){var c=this.config,d=c.axisRange,h=this.getGaugeAxisLimit,g=c.upperlimit,q=c.lowerlimit,k=c.setAdaptiveMin,f=c.majorTMNumber,c=c.adjustTM,l;l=!k;h=h.call(this,e(b,g),e(a,q),g,q,k,l,f,c);d.min=Number(J(h.min,10));d.max=Number(J(h.max,10));d.tickInterval=h.majorTickInt||1;d.numMajorTM=h.numMajorTM},_setTickIntervalAfterZoom:function(){},_drawComponents:function(){var b=this.config;b.drawTick&&this._drawTick();
b.drawLabels&&this._drawLabel();b.drawTrendLines&&this._drawTrendLine()},_drawTick:function(){var b=this.config,a=b.axisRange,c=a.tickInterval,e=b.isVertical,h=b.isOpposit,d=b.drawTick,g=b.drawTickMinor,k=b.canvas,f=this.chart,l=f.config,m=k.canvasBottom||l.canvasBottom,v=k.canvasLeft||l.canvasLeft,r=k.canvasRight||l.canvasRight,p=k.canvasTop||l.canvasTop,k=a.max,l=a.min,t=f.components.paper,B=this.graphics.tick||[],w=b.minorTMNumber,a=a.numMajorTM||b.majorTMNumber,C=b.axisAxisLineContainer,z=0,F=
b.animateAxis,H,E,I,S,G,R;I={stroke:b.majorTMColor,"stroke-width":b.majorTMThickness,"stroke-linecap":"round"};E={stroke:b.minorTMColor,"stroke-width":b.minorTMThickness,"stroke-linecap":"round"};if(b.lines.isDraw&&d){H=f.get("config","animationObj");f=H.animObj;G=H.dummyObj;d=H.transposeAnimDuration;H=H.animType;e?h?b.placeTicksInside?(h=r-b.tickMarkDistance,m=h-b.majorTMHeight,v=h-b.minorTMHeight):(h=r+b.tickMarkDistance,m=h+b.majorTMHeight,v=h+b.minorTMHeight):b.placeTicksInside?(h=v+b.tickMarkDistance,
m=h+b.majorTMHeight,v=h+b.minorTMHeight):(h=v-b.tickMarkDistance,m=h-b.majorTMHeight,v=h-b.minorTMHeight):h?b.placeTicksInside?(h=p+b.tickMarkDistance,m=h+b.majorTMHeight,v=h+b.minorTMHeight):(h=p-b.tickMarkDistance,m=h-b.majorTMHeight,v=h-b.minorTMHeight):b.placeTicksInside?(h=m-b.tickMarkDistance,m=h-b.majorTMHeight,v=h-b.minorTMHeight):(h=m+b.tickMarkDistance,m=h+b.majorTMHeight,v=h+b.minorTMHeight);b=b.drawTickMarkConnector?e?["M",h,this.getPixel(l),"L",h,this.getPixel(k)]:["M",this.getPixel(l),
h,"L",this.getPixel(k),h]:[];I.path=b;B[z]?(b=B[z],d&&F?b.animateWith(G,f,{path:I},d,H):b.attr({path:I})):(b=t.path(I,C),B[z]=b);z+=1;for(p=0;p<a;p+=1)if(R=p<a-1?J(Number(l+c*p),10):k,I.path=e?"M"+h+" "+this.getPixel(R)+"L"+m+" "+this.getPixel(R):"M"+this.getPixel(R)+" "+h+"L"+this.getPixel(R)+" "+m,B[z]?(b=B[z],d&&F?b.animateWith(G,f,I,d,H):b.attr(I)):(b=t.path(I,C),B[z]=b),z+=1,R!==k&&g)for(r=c/(w+1),S=1;S<=w;S+=1)E.path=e?"M"+h+" "+this.getPixel(R+r*S)+"L"+v+" "+this.getPixel(R+r*S):"M"+this.getPixel(R+
r*S)+" "+h+"L"+this.getPixel(R+r*S)+" "+v,B[z]?(b=B[z],d&&F?b.animateWith(G,f,E,d,H):b.attr(E)):(b=t.path(E,C),B[z]=b),z+=1;if(B[z])for(p=z;p<B.length;p++)B[p].attr({path:[]});this.graphics.tick=B}else if(B[z])for(p=z;p<B.length;p++)B[p].attr({path:[]})},_drawLabel:function(){var b=this.config,a=b.canvas,c=b.axisDimention||{},e=this.chart,h=e.config,d=e.components,g=e.linkedItems.smartLabel,k=b.axisRange,f=b.isOpposit,l=b.isReverse,m=k.numMajorTM||b.majorTMNumber,v=b.labels,r=v.style,p=b.isVertical,
t=k.max,B=k.min,w=a.canvasTop||h.canvasTop,z=a.canvasLeft||h.canvasLeft,C=a.canvasBottom||h.canvasBottom,a=a.canvasRight||h.canvasRight,F=b.axisLabelContainerTop,H=b.labelPadding,E=d.paper,I=b.labelMaxH,S=b.labelMaxW,c=p?c.x:c.y,G=this.graphics.labels||[],R=0,O=b.animateAxis,Q,M,L,N,da,P;P={fontFamily:r.fontFamily,fontSize:r.fontSize,fontWeight:r.fontWeight,fontStyle:r.fontStyle,lineHeight:r.lineHeight};var X,U,V,T;r.lineHeight&&(N=r.lineHeight,-1!==N.indexOf("px")&&(N=N.replace("px",""),N=parseFloat(N)));
if(b.labels.isDraw){Q=e.get("config","animationObj");X=Q.animObj;U=Q.dummyObj;e=Q.transposeAnimDuration;Q=Q.animType;M=Sa(this.getPixel(B)-this.getPixel(B+k.tickInterval));p?(b.labelMaxH>M&&!b.hasCategory&&(da=xb(b.labelMaxH/M)),da>b.labels.step&&(b.labels.step=da)):(b.labelMaxW>M&&!b.hasCategory&&(da=xb(b.labelMaxW/M)),da>b.labels.step&&(b.labels.step=da),V=z,T=h.width-a);da=(p?S:M/2)*b.labels.step;I=p?M/2:I;k=k.tickInterval;S=b.labels.step?b.labels.step:1;g.useEllipsesOnOverflow(h.useEllipsesWhenOverflow);
g.setStyle({fontSize:r.fontSize,fontFamily:r.fontFamily,lineHeight:r.lineHeight,fontWeight:r.fontWeight});F.css(P);for(h=0;h<m;h+=S)if(M=h<m-S?J(Number(B+k*h),10):t,b.labels.drawNormalVal||b.labels.drawLimitVal&&(M===B||M===t))if(b.labels.drawNormalVal||M===B||M===t)if(b.labels.drawLimitVal||M!==B&&M!==t)P=d.numberFormatter.scale,M===B&&b.lowerLimitDisplay?(P=g.getSmartText(b.lowerLimitDisplay,da,I+N/2),L=P.text):M===t&&b.upperLimitDisplay?(P=g.getSmartText(b.upperLimitDisplay,da,I+N/2),L=P.text):
(L=P.call(d.numberFormatter,M),P=g.getOriSize(""+L)),p?(L={fill:r.color,"line-height":N,"text-anchor":f?Ya:gb,text:L,x:f?(c||a)+H:(c||z)-H,y:this.getPixel(M)},(!l&&M===B&&b.lowerLimitDisplay||l&&M===t&&b.upperLimitDisplay)&&P.height>N&&(L["vertical-align"]=hb),(!l&&M===t&&b.upperLimitDisplay||l&&M===B&&b.lowerLimitDisplay)&&P.height>N&&(L["vertical-align"]=Ma),b.placeValuesInside&&(L["text-anchor"]=f?gb:Ya)):(L={fill:r.color,"line-height":N,text:L,"text-anchor":rb,x:this.getPixel(M),y:f?(c||w)-H:
(c||C)+H},(!l&&M===B||l&&M===t)&&P.width>2*V&&(L["text-anchor"]=Ya),(!l&&M===t||l&&M===B)&&P.width>2*T&&(L["text-anchor"]=gb),L["vertical-align"]=b.placeValuesInside?f?Ma:hb:f?hb:Ma),v.shiftX&&(L.x+=v.shiftX),v.shiftY&&(L.y+=v.shiftY),G[R]?(M=G[R],e&&O?M.animateWith(U,X,L,e,Q):M.attr(L)):G[R]=M=E.text(L,F),P&&P.tooltext?(M.tooltip(P.tooltext),M.trackTooltip(!0)):M.trackTooltip(!1),R+=1;if(G[R])for(h=R;h<G.length;h++)G[h].attr({text:""});this.graphics.labels=G}else if(G[R])for(h=R;h<G.length;h++)G[h].attr({text:""})},
placeAxis:function(b){var a=this.chart,c=a.components,e=a.linkedItems.smartLabel,h=this.config,d=h.axisRange,g=h.isVertical,k=h.isOpposit,f=h.labels.style,l=d.tickInterval,m=d.max,v=d.min,r=0,p=0,d="",t,B;t={left:0,right:0,top:0,bottom:0};if(0>=b)return t;h.labels.isDraw=!0;h.labels.drawNormalVal=h.showTickValues;h.labels.drawLimitVal=h.showLimits;h.lines.isDraw=!0;h.labels.step=h.tickValueStep;h.labelPadding=0;e.useEllipsesOnOverflow(a.config.useEllipsesWhenOverflow);e.setStyle({fontSize:f.fontSize,
fontFamily:f.fontFamily,lineHeight:f.lineHeight,fontWeight:f.fontWeight});h.drawTick&&h.showTickMarks&&h.lines.isDraw?(b-=h.tickMarkDistance,p=Ja(h.minorTMHeight,h.majorTMHeight),h.placeTicksInside?(b+=h.tickMarkDistance,h.placeValuesInside&&(h.labelPadding=h.tickMarkDistance+p)):p>b?h.lines.isDraw=!1:(g?k?t.right+=p+h.tickMarkDistance:t.left+=p+h.tickMarkDistance:k?t.top+=p+h.tickMarkDistance:t.bottom+=p+h.tickMarkDistance,b-=p,h.placeValuesInside||(h.labelPadding=h.tickMarkDistance+p))):h.lines.isDraw=
!1;b-=h.tickValueDistance;if(h.drawLabels&&(h.showTickValues||h.showLimits)){a=Sa(this._getCustomPixel(v)-this._getCustomPixel(v+l))/2;h.labelPadding+=h.tickValueDistance;b-=h.tickValueDistance;p=c.numberFormatter.scale;for(f=v+l;f<m;f+=l)B=""+p.call(c.numberFormatter,J(f,10)),B.length>r&&(d=B,r=B.length);r=e.getOriSize(d);g?r.width>b&&(h.labels.isDraw=!1):r.height>b&&(h.labels.isDraw=!1);h.showLimits?(f=h.upperLimitDisplay||""+p.call(c.numberFormatter,m),c=h.lowerLimitDisplay||""+p.call(c.numberFormatter,
v),p=e.getOriSize(f),p.width>r.width&&(d=f,r=e.getOriSize(d)),f=e.getOriSize(c),f.width>r.width&&(d=c)):h.labels.drawLimitVal=!1;c=g?b:a;p=g?a:b;if(g)e.getSmartText(d,c,p);else for(f=v;f<=m;f+=l)if(v=e.getSmartText(d,c,p),""===v.text)c+=a;else break;v=e.getSmartText(d,c,p);h.labelMaxW=Ja(v.width,r.width);h.labelMaxH=Ja(v.height,r.height);!h.placeValuesInside&&h.labels.isDraw?g?(h.labelMaxW=Na(h.labelMaxW,b),k?t.right+=h.labelMaxW+h.tickValueDistance:t.left+=h.labelMaxW+h.tickValueDistance):(h.labelMaxH=
Na(h.labelMaxH,b),k?t.top+=h.labelMaxH+h.tickValueDistance:t.bottom+=h.labelMaxH+h.tickValueDistance):h.labelPadding=-h.labelPadding}else h.labels.isDraw=!1;return h.spaceTaken=t},getGaugeAxisLimit:function(b,a,c,e,h,d,g,k){var f=!0,l=!0,m=Number(c),v=Number(e),r,p;p={max:0,min:0,MajorTickInterval:1,numMajorTM:g};if(c&&e)m>b&&(b=m),v<a&&(a=v);else if(isNaN(b)&&(b=.9,l=!1),isNaN(a)&&(a=0,f=!1),b===a&&0===b&&(isNaN(m)||(b=m),isNaN(m)||0===m))b=.9;r=Math.max(Math.floor(Math.log(Math.abs(a))/Math.LN10),
Math.floor(Math.log(Math.abs(b))/Math.LN10));g=tb(10,r);2>Math.abs(b)/g&&2>Math.abs(a)/g&&(r--,g=tb(10,r));r=tb(10,Math.floor(Math.log(b-a)/Math.LN10));0<b-a&&10<=g/r&&(g=r);r=(Math.floor(b/g)+1)*g;0>a?d=-1*(Math.floor(Math.abs(a/g))+1)*g:d?d=0:(d=Math.floor(Math.abs(a/g)-1)*g,d=0>d?0:d);h&&0>=b&&(r=0);p.max=!c||c&&m<b&&l?r:m;p.min=!e||e&&v>a&&f?d:v;p.min>p.max?p.min==v&&p.max==m?(b=p.min,p.min=p.max,p.max=b):p.min==v?p.max=p.min+1:p.max==m&&(p.min=p.max-1):p.min==p.max&&(p.max=p.min+1);p.range=Math.abs(p.max-
p.min);p.MajorTickInterval=g;this.calcTickInterval(p,c,k);return p},calcTickInterval:function(b,a,c){var e=0;-1!=b.numMajorTM&&2>b.numMajorTM&&(b.numMajorTM=2);a||a||-1===b.numMajorTM?(b.numMajorTM=-1==b.numMajorTM?5:b.numMajorTM,c&&(a=function(b,a){for(var c=0,e=1,f;;){f=b.numMajorTM+c*e;f=0===f?1:f;if(a.isRangeDivisible(b.range,f,b.MajorTickInterval))break;c=-1==e||c>b.numMajorTM?++c:c;if(25<c){f=b.numMajorTM;break}e=c<=b.numMajorTM?-1*e:1}b.numMajorTM=1<f?f:b.numMajorTM},c=b.numMajorTM,a(b,this),
2===b.numMajorTM&&(b.numMajorTM=c,1<b.range&&(b.range+=1,0>b.min?--b.min:b.max+=1),a(b,this),e=0))):(b.numMajorTM=-1==b.numMajorTM?5:b.numMajorTM,a=this.getDivisibleRange(b.min,b.max,b.range,b.numMajorTM,b.MajorTickInterval,!0),c=a-b.range,b.range=a,0<b.max?b.max+=c:b.min-=c);b.majorTickInt=(b.max-b.min+e)/(b.numMajorTM-1)},isRangeDivisible:function(b,a,c){b/=a-1;a=new k.MathExt;return a.numDecimals(b)>a.numDecimals(c)?!1:!0},getDivisibleRange:function(b,a,c,e,h,d){if(3>e)return c;b=Math.abs(a-b);
a=b/(e-1);this.isRangeDivisible(b,e,h)||(d&&Number(a)/Number(h)<(1<h?2:.5)&&(h/=10),a=(Math.floor(a/h)+1)*h,b=a*(e-1));return b}},"cartesian",{majorTMNumber:-1,majorTMHeight:6,showTickMarks:1,majorTMThickness:1,upperlimit:void 0,lowerlimit:void 0,adjustTM:1,minorTMNumber:4,minorTMThickness:1,tickMarkDistance:3,placeTicksInside:0,placeValuesInside:0}]);FusionCharts.register("component",["axis","polarGauge",{configure:function(){var b=this.config,a=b.rawAttr;FusionCharts.register("component",["axis",
"gauge"]).prototype.configure.call(this);b.upperLimitDisplay=a.upperLimitDisplay||"";b.lowerLimitDisplay=a.lowerLimitDisplay||"";b.polarPadding=4},_drawComponents:function(){var b=this.config;b.drawTick&&this._drawTick();b.drawLabels&&this._drawLabel();b.drawTrendLines&&this._drawTrendLine()},getAxisPosition:function(b,a){return this.getPixel(b,a)},getPixel:function(b,a){var c=this.config,d=c.axisRange,h=d.min,g=d.max-h,q=c.startAngle||yb/2,k=c.totalAngle||yb/2,f=c.centerX||0,d=c.centerY||0;a=e(a,
c.radius,0);c=q+k/g*(b-h);h=f+a*qb(c);d+=a*bb(c);return{x:h,y:d,angle:c}},getAngle:function(b){var a=this.config,c=a.axisRange,e=c.min;return(a.startAngle||yb/2)+(a.totalAngle||yb/2)/(c.max-e)*(b-e)},placeAxis:function(b){var a=this.config,c=this.chart,e=c.components,h=c.linkedItems.smartLabel,d=a.axisRange,g=a.labels.style,k=d.tickInterval,f=a.upperLimitDisplay,l=a.lowerLimitDisplay,m=d.max,v=d.min,d=0,r,p;p={left:0,right:0,top:0,bottom:0};h.useEllipsesOnOverflow(c.config.useEllipsesWhenOverflow);
h.setStyle({fontSize:g.fontSize,fontFamily:g.fontFamily,lineHeight:g.lineHeight,fontWeight:g.fontWeight});a.labels.isDraw=1;a.labels.drawNormalVal=1;a.labels.drawLimitVal=1;a.lines.isDraw=1;a.labels.step=a.tickValueStep;a.labelPadding=0;if(a.drawLabels&&a.showTickValues&&0<b){Sa(this.getPixel(v)-this.getPixel(v+k));a.labelPadding+=a.tickValueDistance;c=e.numberFormatter.scale;for(g=v;g<=m;g+=k)v=""+c.call(e.numberFormatter,J(g,10)),v.length>d&&(r=v,d=v.length);e=h.getOriSize(r);if(e.width>b/2)return a.labels.isDraw=
!1,p;a.showLimits?(f.length>d&&(r=f,d=f.length),l.length>d&&(r=l)):a.labels.drawLimitVal=!1;e=h.getOriSize(r);a.labelMaxW=e.width;a.labelMaxW>b/2&&(a.labelMaxW=b/2);a.labelMaxH=e.height;a.placeValuesInside?a.labelPadding=-a.labelPadding:(p.right+=a.labelMaxW+a.tickValueDistance,p.left+=a.labelMaxW+a.tickValueDistance,p.top+=a.labelMaxH+a.tickValueDistance,p.bottom+=a.labelMaxH+a.tickValueDistance)}else a.labels.isDraw=!1;return p},_drawLabel:function(){var b=this.config,a=this.chart,c=a.components,
d=b.axisRange,h=a.linkedItems.smartLabel,g,q=b.labels.style,k=b.labelPadding||0,f=!1,l=b.radius,m=e(b.gaugeOuterRadius,l),l=e(b.gaugeInnerRadius,l),v=b.centerX,p=b.centerY,r=b.placeValuesInside,t=b.labelMaxH,B=b.labelMaxW,w=d.max,z=d.min,C=b.axisLabelContainerTop,F=c.paper,H=this.graphics.labels||[],E=0,I=b.animateAxis,S,G,R;S={fontFamily:q.fontFamily,fontSize:q.fontSize,fontWeight:q.fontWeight,fontStyle:q.fontStyle,lineHeight:q.lineHeight};var O,M,Q;q.lineHeight&&(R=q.lineHeight,-1!==R.indexOf("px")&&
(R=R.replace("px",""),R=parseFloat(R)));h.useEllipsesOnOverflow(a.config.useEllipsesWhenOverflow);h.setStyle({fontSize:q.fontSize,fontFamily:q.fontFamily,lineHeight:q.lineHeight,fontWeight:q.fontWeight});if(b.labels.isDraw){E=a.get("config","animationObj");O=E.animObj;M=E.dummyObj;a=E.transposeAnimDuration;Q=E.animType;b.labels.step?g=d.tickInterval*b.labels.step:g=d.tickInterval;C.css(S);d=z;for(E=0;d<=w;d+=g)if(b.labels.drawNormalVal||b.labels.drawLimitVal&&(d===z||d===w))if(b.labels.drawNormalVal||
d===z||d===w)if(b.labels.drawLimitVal||d!==z&&d!==w)if(0!==b.showZeroPlaneValue||0!==b.showZeroPlane||0!==d)S=c.numberFormatter.scale,d===z&&b.lowerLimitDisplay?(S=h.getSmartText(b.lowerLimitDisplay,B,t),S=S.text):d===w&&b.upperLimitDisplay?(S=h.getSmartText(b.upperLimitDisplay,B,t),S=S.text):S=S.call(c.numberFormatter,J(d,10)),G=r?this.getPixel(d,l+k-b.polarPadding):this.getPixel(d,m+k+b.polarPadding),S={fill:q.color,"line-height":R,text:S,x:G.x,y:G.y},G.x>v-10&&G.x<v+10&&G.y<p?(S["text-anchor"]=
rb,S["text-valign"]=r?Ma:hb):G.x>v-10&&G.x<v+10&&G.y<p?(S["text-anchor"]=rb,S["text-valign"]=r?hb:Ma):(S["text-anchor"]=G.x<v?r?Ya:gb:r?gb:Ya,S["text-valign"]="center"),H[E]?(G=H[E],a&&I?G.animateWith(M,O,S,a,Q):G.attr(S)):H[E]=F.text(S,C),E+=1,!f&&d<w&&d+g>w&&(d=w-g,f=!0);if(H[E])for(d=E;d<H.length;d++)H[d].attr({text:""});this.graphics.labels=H}else if(H[E])for(d=E;d<H.length;d++)H[d].attr({text:""})},_drawTick:function(){var b=this.config,a=b.axisRange,c=a.tickInterval,d=b.drawTick,h=b.drawTickMinor,
g=this.chart,q=g.components,k=a.max,f=a.min,l=b.radius,a=e(b.gaugeOuterRadius,l),l=e(b.gaugeInnerRadius,l),q=q.paper,m=this.graphics.tick||[],v=b.minorTMNumber,r=0,p=b.animateAxis,t=!1,B,w,z,C,F,H,E,I,S,G;I=b.axisAxisLineContainer;C={stroke:b.majorTMColor,"stroke-width":b.majorTMThickness,"stroke-linecap":"round"};z={stroke:b.minorTMColor,"stroke-width":b.minorTMThickness,"stroke-linecap":"round"};if(b.lines.isDraw&&d){r=g.get("config","animationObj");g=r.animObj;S=r.dummyObj;d=r.transposeAnimDuration;
G=r.animType;w=this._getVisibleConfig();r=f+c*kb.floor((w.minValue-3*c-f)/c);w=f+c*kb.floor((w.maxValue+3*c-f)/c);w=w>k?k:w;f=r<f?f:r;for(r=0;f<=w;f+=c)if(b.placeTicksInside?(B=this.getPixel(f,l),F=this.getPixel(f,l+b.majorTMHeight)):(B=this.getPixel(f,a),F=this.getPixel(f,a-b.majorTMHeight)),C.path="M"+B.x+" "+B.y+"L"+F.x+" "+F.y,m[r]?(B=m[r],d&&p?B.animateWith(S,g,C,d,G):B.attr(C)):(B=q.path(C,I),m[r]=B),r+=1,!t&&f<k&&f+c>k&&(f=k-c,t=!0),f<k&&h)for(F=c/(v+1),E=1;E<=v;E+=1)H=f+F*E,b.placeTicksInside?
(B=this.getPixel(H,l),H=this.getPixel(H,l+b.minorTMHeight)):(B=this.getPixel(H,a),H=this.getPixel(H,a-b.minorTMHeight)),z.path="M"+B.x+" "+B.y+"L"+H.x+" "+H.y,m[r]?(B=m[r],d&&p?B.animateWith(S,g,z,d,G):B.attr(z)):(B=q.path(z,I),m[r]=B),r+=1;if(m[r])for(f=r;f<m.length;f++)m[f].attr({path:[]});this.graphics.tick=m}else if(m[r])for(f=r;f<m.length;f++)m[f].attr({path:[]})},_drawPlotBand:function(){},_drawPlotLine:function(){},_drawTrendLine:function(){var b,a,d,g,h,n,q,k,f,l,m,r,v,p,t,B,w,z,C=this.config,
F=C.axisRange,H=F.max,F=F.min,E=this.chart;r=E.config;var G=E.linkedItems.smartLabel,S=E.components,J=S.colorManager,R=C.scaleFactor,O=C.centerX||0,L=C.centerY||0,N=C.canvas.canvasWidth||r.canvasWidth,P=C.trend.trendStyle,ia=C.axisTrendContainerTop,da=C.axisTrendContainerBottom,X=C.axisTrendLabelContainer,T=S.paper,U=this.components.trendObj||[],V={fontFamily:P.fontFamily,fontSize:P.fontSize,lineHeight:P.lineHeight,fontWeight:P.fontWeight,fontStyle:P.fontStyle},aa=C.trendPoints,Z=kb.PI/180,W={},ha=
C.animateAxis,La,ga,fa;La=0;var qa;g={};k={};d={};h={};var oa={},sa,ma,ba,la,na,Aa,ya,va,pa,ub,Ca,wa;if(aa){La=E.get("config","animationObj");ub=La.animObj;Ca=La.dummyObj;E=La.transposeAnimDuration;wa=La.animType;G.useEllipsesOnOverflow(r.useEllipsesWhenOverflow);G.setStyle(V);La=ga=0;for(fa=aa.point.length;ga<fa;ga+=1)sa=aa.point[ga],ma=e(sa.startvalue,sa.value),ba=e(sa.endvalue,ma),qa=ma!==ba,ma<=H&&ma>=F&&ba<=H&&ba>=F&&(b=ma,a=ba,Ba(I(sa.markertooltext)),d=Ba(I(sa.displayvalue),qa?"":S.numberFormatter.scale(ma)),
e(sa.showontop,C.ticksBelowGauge,C.ticksBelowGraph,1),g=c(sa.color,J.getColor("trendLightColor")),h=e(sa.alpha,99),n=e(sa.thickness,1),q=sa.dashed?M(sa.dashlen||2,sa.dashgap||2,sa.thickness||1):"",k=e(sa.usemarker,0),f=Q(c(sa.markercolor,sa.color,J.getColor("trendLightColor")),100),l=Q(c(sa.markerbordercolor,sa.bordercolor,J.getColor("trendDarkColor")),100),m=e(e(sa.markerradius)*R,5),r=ja(sa.markertooltext),v=e(e(sa.trendvaluedistance,C.trendValueDistance)*R,C.tickValueDistance),p=e(sa.valueinside,
C.placeValuesInside,0),t=e(sa.showborder,1),B=Q(c(sa.bordercolor,sa.color,J.getColor("trendDarkColor")),e(sa.borderalpha,sa.alpha,100)),w=e(e(sa.radius)*R),z=e(e(sa.innerradius)*R),la=Math.cos(89.99*Z),na=-la,w=e(w,C.gaugeOuterRadius),z=e(z,qa?Math.max(C.gaugeInnerRadius-15,0):C.gaugeInnerRadius),Aa=this.getPixel(ma,w),ya=this.getPixel(ma,z),va=Aa.x,Aa=Aa.y,pa=ya.x,ya=ya.y,ba=this.getAngle(ba),ma=this.getAngle(ma),qa?(ma>ba&&(ma+=ba,ba=ma-ba,ma-=ba),g={fill:Q(g,h),"stroke-width":t?n:0,stroke:B,"stroke-dasharray":q},
h={ringpath:[O,L,w,z,ma,ba]}):(g={"stroke-width":t?n:0,stroke:B,"stroke-linecap":"round","stroke-dasharray":q},h={path:["M",va,Aa,"L",pa,ya]}),k?(k={fill:f,"stroke-width":1,stroke:l},oa={polypath:[3,va,Aa,m,(-ma+Math.PI)/Z,0]}):k={},""!==d?(W=(a+b)/2,ba=this.getAngle(W-F),b=Math.cos(ba),a=Math.sin(ba),m=G.getOriSize(d).width,p?(W=z-2-v,v=b>la?gb:b<na?Ya:rb):(W=w+2+v,v=b>la?Ya:b<na?gb:rb),va=O+W*b,Aa=L+W*a,W=G.getOriSize(d).height,W=G.getSmartText(d,N,W),va=N<va+m?N-m/2:va<m?m/2:va,m>N&&(va=N/2),d=
{fill:sa.color||P.color,text:W.text,"text-anchor":v,"vertical-align":Ma,x:va,y:Aa},sa=W.height,Aa=b>la||b<na?Aa+(-(sa/2)+.4*sa*a*(p?-1:1)):p?Aa+-(0>a?0:sa):Aa+-(0<a?0:sa),d.y=Aa):d={text:""},U[La]?(p=U[La].graphics.drawing,qa=U[La].graphics.label,la=U[La].graphics.marker,p.attr(g),la.attr(k),la.tooltip(r),qa.css(V).tooltip(W.oriText),E&&ha?(p.animateWith(Ca,ub,h,E,wa),la.animateWith(Ca,ub,oa,E,wa),qa.animateWith(Ca,ub,d,E,wa)):(p.attr(h),la.attr(oa),qa.attr(d)),C.showTooltip&&W.oriText?qa.trackTooltip(!0):
qa.trackTooltip(!1),la.trackTooltip(C.showTooltip&&""!==r)):(p=qa?T.ringpath(O,L,w,z,ma,ba,da):T.path(ia),qa=T.text(d,V,X),la=T.polypath(ia),p.attr(g),p.attr(h),la.attr(k),la.attr(oa),la.tooltip(r),qa.tooltip(W.oriText),C.showTooltip&&W.oriText?qa.trackTooltip(!0):qa.trackTooltip(!1),la.trackTooltip(C.showTooltip&&""!==r),U[La]={},U[La].graphics={},U[La].graphics.drawing=p,U[La].graphics.label=qa,U[La].graphics.marker=la),La+=1);this.components.trendObj=U}if(U[La])for(ga=La;ga<U.length;ga++)U[ga].graphics.drawing.attr({path:["M",
0,0]}),U[ga].graphics.marker.attr({polypath:["M",0,0]}),U[ga].graphics.label.attr({text:"","text-bound":[]});for(ga=0;ga<La;ga++)U[ga].graphics.label.attr({"text-bound":[P.backgroundColor,P.borderColor,P.borderThickness,P.borderPadding,P.borderRadius,P.borderDash]})}},"gauge",{trendPoints:void 0,ticksBelowGauge:void 0,ticksBelowGraph:void 0,trendValueDistance:void 0}]);FusionCharts.register("component",["axis","polar",{configure:function(){var b=this.config,a=b.rawAttr,d=this.chart.components.colorManager;
FusionCharts.register("component",["axis","cartesian"]).prototype.configure.call(this);b.gridLineColor=Q(c(a.radarSpikeColor,d.getColor("divLineColor")),e(a.radarSpikeAlpha,a.radarInLineAlpha,d.getColor("divLineAlpha")));b.radarBorderColor=Q(c(a.radarBorderColor,d.getColor("divLineColor")),e(a.radarBorderAlpha,100));b.radarFillColor=Q(c(a.radarFillColor,d.getColor("altHGridColor")),e(a.radarFillAlpha,d.getColor("altHGridAlpha")))},_drawComponents:function(){var b=this.config;b.drawLabels&&b.hasCategory&&
this._drawCategory()},getAxisPosition:function(b,a){return this.getPixel(b,a)},getPixel:function(b,a){var c=this.config,d=c.axisRange,h=d.min,g=d.max-h+1,q=c.startAngle||-(yb/4),k=c.totalAngle||-yb,f=c.centerX||0,d=c.centerY||0;a=e(a,c.radius,0);c=q+k/g*(b-h);h=f+a*qb(c);d+=a*bb(c);return{x:h,y:d}},_drawCategory:function(){var b=this.config,a=this.chart,d=b.isOpposit,g=b.labels,h=g.style,n=b.axisContainer,q=b.axisPlotLineContainer,k=a.components.paper,f=this.components.categoryLabel||[],l=this.graphics.radarBorder||
[],m=a.jsonData.categories,r=b.categories.category,p=b.labelPadding,t,B,w,z,C,F,H=b.gridLineColor,E=b.gridLineWidth,I=function(b){return function(c){la.call(this,a,c,b)}},G=0,S=b.centerX,J=b.centerY,R=b.animateAxis,O,L,N,P,ia,da,T,X,U,V,aa;X=e(b.radius,0);N=r?r.length-1:0;O=a.get("config","animationObj");U=O.animObj;V=O.dummyObj;L=O.transposeAnimDuration;aa=O.animType;z={stroke:b.radarBorderColor,fill:b.radarFillColor,"stroke-width":b.radarBorderThickness,path:["M"]};if(0!==b.showRadarBorder){for(G=
O=0;O<=N;O++)da=this.getPixel(O,X),z.path.push(da.x,da.y,"L");z.path.pop();z.path.push("Z")}l[0]?L&&R?l[0].animate(z,L):l[0].attr(z):l[0]=k.path(z,q);this.graphics.radarBorder=l;if(b.labels.isDraw){m&&(t=m[0].font,B=m[0].fontsize,w=m[0].fontcolor);for(G=O=0;O<=N;O++)if(l=r[O],da=e(l.x,l.y,O),b.labels.drawNormalVal||b.labels.drawLimitVal&&(0===O||da===N))if(b.labels.drawNormalVal||0===da||da===N)if(b.labels.drawLimitVal||0!==da&&da!==N){m=c(l.font,l.labelfont);z=c(l.fontsize,l.labelfontsize);C=e(l.fontbold,
l.labelfontbold,0)?"bold":void 0;F=e(l.fontitalic,l.labelfontitalic,0)?"italic":void 0;ia=Q(c(l.fontcolor,l.labelfontcolor,w,h.color),e(l.labelalpha,b.rawAttr.labelFontAlpha,100));m={fontFamily:c(m,t,h.fontFamily),fontSize:c(z,B,h.fontSize),fontWeight:c(C,h.fontWeight),fontStyle:c(F,h.fontStyle)};m.lineHeight=v(m);m.lineHeight&&(P=m.lineHeight,-1!==P.indexOf("px")&&(P=P.replace(/px/i,""),P=parseFloat(P)));z=this.getPixel(da,X+p);F=z.x;T=z.y;z=l.label||"";if(0===e(l.showlabel,1)||0===b.showLabels)z=
"";C=Number(l.labelPadding)||0;ia={fill:ia,"line-height":P,"font-size":h.fontSize,text:z,cursor:l.link?"pointer":"",x:F,y:T};C&&(ia.y+=C);ia["vertical-align"]=d?hb:Ma;0===O?(ia["text-anchor"]=rb,ia["vertical-align"]=hb):O===(N+1)/2?(ia["text-anchor"]=rb,ia["vertical-align"]=Ma):(ia["text-anchor"]=O<(N+1)/2?gb:Ya,ia["vertical-align"]="center");da=this.getPixel(da,X);C={stroke:H,"stroke-width":E,"stroke-dasharray":"none",path:["M",S,J,"L",da.x,da.y]};g.shiftX&&(ia.x+=g.shiftX);g.shiftY&&(ia.y+=g.shiftY);
f[G]?(da=f[G].graphics.line,L&&R?da.animateWith(V,U,C,L,aa):da.attr(C),C=f[G].graphics.label,L&&R?C.animateWith(V,U,ia,L,aa):C.attr(ia),C.css(m),b.showTooltip&&l.tooltext?(C.tooltip(l.tooltext),C.trackTooltip(!0)):C.trackTooltip(!1)):(da=k.path(C,q),C=k.text(ia,m,n),b.showTooltip&&l.tooltext?(C.tooltip(l.tooltext),C.trackTooltip(!0)):C.trackTooltip(!1),C.click(I("datalabelclick")).hover(I("dataLabelRollOver"),I("dataLabelRollOut")),f[G]={},f[G].graphics={},f[G].config={},f[G].graphics.line=da,f[G].graphics.label=
C);f[G].config.labelBox={label:z,lineHeight:m.lineHeight,border:e(l.borderthickness,l.labelborderthickness)?e(l.borderthickness,l.labelborderthickness,1)+"px solid":"",borderColor:l.bordercolor||l.labelbordercolor?Q(l.bordercolor||l.labelbordercolor,e(l.borderalpha,l.labelborderalpha,l.alpha,l.labelalpha,100)):"",borderThickness:e(l.borderthickness,l.labelborderthickness),borderPadding:e(l.borderpadding,l.labelborderpadding),borderRadius:e(l.borderradius,l.labelborderradius),backgroundColor:l.bgcolor||
l.labelbgcolor?Q(l.bgcolor||l.labelbgcolor,e(l.bgalpha,l.labelbgalpha,l.alpha,l.labelalpha,100)):"",borderDash:e(l.borderdashed,l.labelborderdashed,0)?M(e(l.borderdashlen,l.labelborderdashlen,4),e(l.borderdashgap,l.labelborderdashgap,2),e(l.borderthickness,l.labelborderthickness,1)):0===e(l.borderdashed,l.labelborderdashed)?"none":h.borderDash};f[G].graphics.label.data("eventArgs",{link:l.link||l.labellink||h.labelLink,text:ia.text,index:G});G+=1}if(f[G])for(O=G;O<f.length;O++)f[O].graphics.line.attr({path:["M",
0,0]}),f[O].graphics.label.attr({text:"","text-bound":[]});this.components.categoryLabel=f}else if(f[G])for(O=G;O<f.length;O++)f[O].graphics.line.attr({path:["M",0,0]}),f[O].graphics.label.attr({text:"","text-bound":[]});for(O=0;O<G;O++)b=f[O].config.labelBox,b.label?f[O].graphics.label.attr({"text-bound":[c(b.backgroundColor,h.backgroundColor),c(b.borderColor,h.borderColor),c(b.borderThickness,h.borderThickness),c(b.borderPadding,h.borderPadding),c(b.borderRadius,h.borderRadius),c(b.borderDash,h.borderDash)]}):
f[O].graphics.label.attr({"text-bound":[]})},placeAxis:function(b,a){var d,g,h,n,q,k,f=this.config,l=this.chart,m=l.linkedItems.smartLabel,r=f.labels.style,p=l.jsonData.categories,t=f.labelPadding=e(f.rawAttr.axisValuePadding,10),B=f.useEllipsesWhenOverflow,w=0,C=0,z=0,F=0,H=a/2,E=a/2,I=b/2,G=b/2,S,J;S=f.categories.category;f.labels.isDraw=1;f.labels.drawNormalVal=1;f.labels.drawLimitVal=1;if(f.showLabels)for(p&&(q=p[0].font,k=p[0].fontsize),f=0,p=S.length;f<p;f++)J=S[f],d=J.font,g=J.fontsize,h=J.fontbold?
"bold":"normal",n=J.fontitalic?"italic":"normal",d={fontFamily:c(d,q,r.fontFamily),fontSize:c(g,k,r.fontSize),fontWeight:c(h,r.fontWeight),fontStyle:c(n,r.fontStyle)},g=v(d),m.useEllipsesOnOverflow(l.config.useEllipsesWhenOverflow),m.setStyle(d),0===f?(d=m.getSmartText(J.label,b,Na(g,H),B),J.oriLabel=J.label,J.label=d.text,d.width+=t,d.height+=t,d.height>w&&(F=w=d.height)):f===p/2?(d=m.getSmartText(J.label,b,Na(g,E),B),J.oriLabel=J.label,J.label=d.text,d.width+=t,d.height+=t,d.height>F&&(F=d.height)):
f<p/2?(d=m.getSmartText(J.label,G,g,B),J.oriLabel=J.label,J.label=d.text,d.width+=t,d.height+=t,d.width>C&&(C=d.width)):(d=m.getSmartText(J.label,I,g,B),J.oriLabel=J.label,J.label=d.text,d.width+=t,d.height+=t,d.width>z&&(z=d.width));return{top:w,left:C,right:z,bottom:F}}},"cartesian",{axisValuePadding:10,gridLineWidth:1,showRadarBorder:1,radarBorderThickness:2}]);FusionCharts.register("component",["dataset","Column",{type:"column",pIndex:2,customConfigFn:"_createDatasets",configure:function(){var b=
this.chart,a=this.config,d=this.JSONData,g=b.singleseries,h=b.config.isdual,n=b.config,q=b.jsonData.chart,A=b.components,f=A.colorManager,l=a.plotColor=f.getPlotColor(this.index||this.positionIndex),m=e(d.dashed,q.plotborderdashed),p=e(q.useplotgradientcolor,1),v,t,B=k.getDashStyle;t=b.isBar;var w=b.is3D,C;this.__setDefaultConfig();r(d,a,n,{data:!0});a.showplotborder=e(q.showplotborder,w?0:1);v=n.plotborderdashlen;n=n.plotborderdashgap;a.plotfillangle=e(360-q.plotfillangle,t?180:90);a.plotfillalpha=
t=c(d.alpha,q.plotfillalpha,oa);a.plotColor=c(d.color,l);a.legendSymbolColor=a.plotColor;a.plotgradientcolor=k.getDefinedColor(q.plotgradientcolor,f.getColor("plotGradientColor"));!p&&(a.plotgradientcolor="");a.plotborderalpha=c(q.plotborderalpha,t,oa);a.plotbordercolor=c(q.plotbordercolor,w&&!g?"#ffffff":f.getColor("plotBorderColor"));a.plotborderdashstyle=m?B(v,n,void 0):"none";a.showShadow=w?e(q.showshadow,1):e(q.showshadow,f.getColor("showShadow"));a.definedGroupPadding=Ja(e(q.plotspacepercent),
0);a.parentYAxis=h?C="s"===c(d.parentyaxis&&d.parentyaxis.toLowerCase(),"p")?1:0:C=0;this.yAxis=A.yAxis[C];this.visible=1===e(d.visible,!Number(d.initiallyhidden),1);!0===this.visible?this._conatinerHidden=!1:this._containerHidden=!0;this._setConfigure();this._realTimeConfigure&&this._realTimeConfigure();!1!==b.hasLegend&&this._addLegend()},_setConfigure:function(b,a){var d=this.chart,g=d.config,h=this.config,n=this.JSONData,q=b||n.data,A=d.singleseries,f=d.components,l=f.xAxis[0],m=l.getCategoryLen(),
m=b?b.data.length:m,r=d.jsonData.chart,f=f.colorManager,p=h.showplotborder,v=h.plotColor,t=g.showtooltip,w=k.parseUnsafeString,C=g.yaxisname,z=g.xaxisname,F=g.tooltipsepchar,H=g.seriesnameintooltip,E=k.parseTooltext,I,G,S,J,R,O,M=h.plotborderdashlen,L=h.plotborderdashgap,N=g.plotborderthickness,P=g.useroundedges,da=g.plothovereffect,T=h.plotfillangle,X,U,V,aa=h.plotborderdashstyle,Z,W,ha,La,ga,ba,qa,fa,sa,ma=k.getDashStyle,oa=this.components.data,la=d.isBar,na=d.is3D,Aa,ya=-Infinity,va=Infinity,pa=
this.yAxis,ub=g.use3dlighting,Ca=g.usedataplotcolorforlabels,wa;oa||(oa=this.components.data=[]);this.visible=1===e(this.visible,this.JSONData.visible,!Number(this.JSONData.initiallyhidden),1);for(Aa=0;Aa<m;Aa++)b?(O=b&&b.data[Aa]||{},wa=void 0!==a?a+Aa:oa.length-m+Aa,G=oa[wa]):(G=oa[Aa],O=q&&q[Aa]||{}),d=G&&G.config,G||(G=oa[Aa]={}),G.config||(d=oa[Aa].config={}),d.showValue=e(O.showvalue,h.showvalues),d.setValue=G=pa.getCleanValue(O.value,g.stack100percent),d.setLink=c(O.link),d.toolTipValue=v=
pa.dataLabels(G),d.setDisplayValue=J=w(O.displayvalue),d.displayValue=c(J,v),v=e(O.dashed),J=e(O.dashlen,M),I=L=e(O.dashgap,L),null!==G&&(ya=Ja(ya,G),va=Na(va,G)),d.plotBorderDashStyle=J=1===v?ma(J,I,N):0===v?"none":aa,A?(v=f.getPlotColor(e(wa-m,Aa)),v=c(O.color,v),Ca&&l.updateCategory(Aa,{labelfontcolor:Q(v)}),V=c(O.alpha,O.borderalpha,h.plotborderalpha,X).toString()):(v=c(O.color,h.plotColor),V=c(O.alpha,h.plotborderalpha,X).toString()),U=c(O.ratio,h.ratio),X=c(O.alpha,h.plotfillalpha),d.shadow=
{opacity:h.showShadow?X/100:0},0>G&&!P&&(R=h.plotfillangle,T=la?180-T:360-T),d.colorArr=I=k.graphics.getColumnColor(v+","+h.plotgradientcolor,X,U,T,P,h.plotbordercolor,V,la?1:0,na?!0:!1),Z=l.getLabel(e(wa-m,Aa)),d.origLabel=G=Ba(w(Z.label)),G=d.label=Ba(w(Z.tooltext))||G,0!==da&&(Z=c(O.hovercolor,n.hovercolor,r.plotfillhovercolor,r.columnhovercolor,v),W=c(O.hoveralpha,n.hoveralpha,r.plotfillhoveralpha,r.columnhoveralpha,X),ha=c(O.hovergradientcolor,n.hovergradientcolor,r.plothovergradientcolor,h.plotgradientcolor),
!ha&&(ha=""),U=c(O.hoverratio,n.hoverratio,r.plothoverratio,U),La=e(360-O.hoverangle,360-n.hoverangle,360-r.plothoverangle,T),ga=c(O.borderhovercolor,n.borderhovercolor,r.plotborderhovercolor,h.plotbordercolor),ba=c(O.borderhoveralpha,n.borderhoveralpha,r.plotborderhoveralpha,r.plotfillhoveralpha,r.columnhoveralpha,V,X),V=e(O.borderhoverthickness,n.borderhoverthickness,r.plotborderhoverthickness,h.showplotborder&&N),qa=O.borderhoverdashed||n.borderhoverdashed||r.plotborderhoverdashed,fa=e(O.borderhoverdashgap,
n.borderhoverdashgap,r.plotborderhoverdashgap,M),sa=e(O.borderhoverdashlen,n.borderhoverdashlen,r.plotborderhoverdashlen,L),qa=void 0!==qa?Number(qa)?ma(sa,fa,V):"":J,1==da&&Z===v&&(Z=ob(Z,70)),v=k.graphics.getColumnColor(Z+","+ha,W,U,La,P,ga,ba.toString(),la?1:0,na?!0:!1),d.setRolloutAttr={fill:na?[B(I[0]),!ub]:B(I[0]),stroke:p&&B(I[1]),"stroke-width":N,"stroke-dasharray":J},d.setRolloverAttr={fill:na?[B(v[0]),!ub]:B(v[0]),stroke:B(v[1]),"stroke-width":V,"stroke-dasharray":qa}),I=d.toolTipValue,
d.origToolText=v=Ba(w(c(O.tooltext,n.plottooltext,r.plottooltext))),t?null===I?O=!1:void 0!==v?(J=[1,2,3,4,5,6,7],G={yaxisName:C,xaxisName:z,formattedValue:I,label:G},O=E(v,J,G,O,r,n)):(H&&(S=ja(n&&n.seriesname)),O=S?S+F:"",O+=G?G+F:""):O=!1,d.toolText=O,d.setTooltext=O,R&&(T=R),wa++;h.maxValue=ya;h.minValue=va},init:function(b){var a=this.chart;if(!b)return!1;this.JSONData=b;this.chartGraphics=a.chartGraphics;this.components={};this.graphics={};this.configure()},_addLegend:function(){var b=this.chart,
a=b.isBar,c=b.jsonData.chart,d,h;h=this.config;var g=ib(h.legendSymbolColor),b=b.components.legend;d=e(c.use3dlighting,c.useplotgradientcolor,1);c=ob(g,60).replace(ta,N);d?(d=ob(g,40),a={FCcolor:{color:g+","+g+","+d+","+g+","+g,ratio:"0,30,30,30,10",angle:a?0:270,alpha:"100,100,100,100,100"}}):a={FCcolor:{color:g,angle:a?0:270,ratio:"0",alpha:"100"}};h={enabled:h.includeinlegend,type:this.type,fillColor:B(a),strokeColor:B(c),rawFillColor:g,rawStrokeColor:g,label:ja(this.JSONData.seriesname)};this.legendItemId=
b.addItems(this,this.legendInteractivity,h)},legendInteractivity:function(b,a){var c=this.config,e=b.visible,h=a.config,d=a.graphics,g=c.itemHiddenStyle.color,c=c.itemStyle.color,k=h.fillColor,f,h=h.strokeColor;e?b.hide():b.show();e={legendItemSymbol:{fill:e?g:k,stroke:e?g:h},legendItemText:{fill:e?g:c},legendItemLine:{stroke:e?g:h}};for(f in d)(g=d[f])&&e[f]&&g.attr(e[f])},draw:function(){var b=this,a=b.JSONData,d=b.chart.jsonData.chart,g=b.config,h=g.legendInteractivity,n=b.groupManager,q=b.index,
A,f,l=b.visible,m=b.chart,r=m.getJobList(),v=m.config,t=m.components,w=t.paper,z=t.xAxis[0],F=z.getCategoryLen(),H=b.yAxis,E=m.graphics.columnGroup,I=v.isstacked,G,J,M,S=m.graphics,L=S.sumLabelsLayer,R=k.parseUnsafeString,O=k.getValidValue,Q=k.Raphael,N=v.showtooltip,P=m.get("config","animationObj"),ia=P.animObj,da=P.dummyObj,X=P.duration,T=P.animType,U=z.getAxisPosition(0),V=z.getAxisPosition(1),aa=g.groupMaxWidth=V-U,Z=v.definedgrouppadding,W=v.plotspacepercent/200,ha=n.getDataSetPosition(b),La=
n.stackSumValue[b.positionIndex],ga=v.maxcolwidth,ba=(1-.01*Z)*aa||Na(aa*(1-2*W),1*ga),qa=e(ha.columnWidth,ba/1),fa,sa=ha.xPosOffset||0,ma=ha.height,oa,la,ja=b.components,Aa=ja.data,ya,va,pa,na,Ca,wa,Db,Ba=b.drawn,ta=ja.removeDataArr,Ga=ta&&ta.length,Ea=ja.addDataArr,Fa=Ea&&Ea.length,Ja,Ia=H.getLimit(),za=Ia.min,xa=0<Ia.max&&0>za,Ha,Ka=H.getAxisBase(),Ra=H.yBasePos=H.getAxisPosition(Ka),Oa,Xa,Ma=v.plotborderthickness,Ta=v.useroundedges,Pa=b.graphics,Va=Pa.container,Ya=Pa.trackerContainer,Za=Pa.dataLabelContainer,
Ua=Pa.shadowContainer,ab=ja.pool,gb=S.trackerGroup,cb,lb=1,ib,jb,hb,kb=z.getAxisPosition(F-1)+sa,ob=z.getAxisPosition(0)+sa,bb,qb=!0,tb,rb=b.startPosition,vb=m.isInverse,pb,yb=function(){!1!==b.visible||!1!==b._conatinerHidden&&void 0!==b._conatinerHidden||(Va.hide(),Ya.hide(),Ua.hide(),Za&&Za.hide(),b._conatinerHidden=!0);this.show()},xb=function(){L.show()},zb=function(){return rb?function(b,a){b.x=ob-aa*(Fa-a);b.y=J;b.height=oa}:!1===rb?function(b){b.x=kb+aa*lb++;b.y=J;b.height=oa}:function(b){b.width=
0}},Hb,sb=m.config.viewPortConfig,Cb=sb.x,Eb=sb.scaleX,Bb=v.showplotborder;Ba&&(zb=zb());Va||(Va=b.graphics.container=w.group("columns",E),l?Va.show():Va.hide());Ya||(Ya=b.graphics.trackerContainer=w.group("col-hot",gb),l||Ya.hide());Ua||(Ua=b.graphics.shadowContainer=w.group("shadow",E).toBack(),l||Ua.hide());l&&(Va.show(),Ya.show(),Ua.show());for(f=0;f<F;f++)if(Ca=(Db=(ya=Aa[f])&&ya.config)&&Db.setValue,void 0===ya||void 0===Ca||null===Ca){if(ib=ya&&ya.graphics)for(jb in ib)ib[jb].hide()}else if(tb=
ya.trackerConfig={},Ha=0<=Ca,na=Db.setLink,cb=Db.colorArr,ya.graphics||(Aa[f].graphics={}),wa=Db.displayValue,Oa=Ha?Db.previousPositiveY:Db.previousNegativeY,va=O(R(c(Db.origToolText,a.plottooltext,d.plottooltext))),I&&(Oa=b._parseValues(f,Oa,La[f],va),Ca=Db.value),Xa=H.getAxisPosition(Oa||Ka),G=z.getAxisPosition(f)+sa+Cb*Eb,0!==ma?(J=H.getAxisPosition(Ca+(Oa||0)),oa=Sa(Xa-J)):(oa=0,J=Xa),J=Na(J,Xa),n.isCrisp?(M=Q.crispBound(G,J,qa,oa,Ma),G=M.x,pb=fb(oa)===M.height,hb=fb(J)!==M.y,J=M.y,fa=M.width,
oa=M.height):fa=qa,l&&0<Ma&&(0===Ma%2&&(vb&&xa?Ha?!hb&&(oa+=1):!pb&&--J:Ha?hb&&--J:pb&&(oa+=1)),Ja=Math.floor(Ma/2),vb&&xa?Ha?oa-=Ja:J+=Ja:Ha?J+=Ja:oa-=Ja),Hb=Db.shadow,la=!1!==Db.toolText?Db.toolText+(va?"":Db.toolTipValue):"",bb=Db.plotBorderDashStyle,tb.eventArgs={index:f,link:na,value:Ca,displayValue:wa,categoryLabel:Db.origLabel,toolText:la,id:"",datasetIndex:q,datasetName:a.seriesname,visible:l},ya._xPos=G,ya._yPos=J,ya._height=oa,ya._width=fa,ya._index=f,(pa=ya.graphics.element)||(A={x:G,y:Ra,
width:fa,height:1,r:Ta,ishot:!N,fill:B(cb[0]),stroke:B(cb[1]),"stroke-width":Bb?Ma:0,"stroke-dasharray":bb,"stroke-linejoin":"miter",visibility:l},Ba&&(zb(A,f),ab&&ab.element[0]&&(pa=ya.graphics.element=ab.element[0],pa.attr(A),ab.element.splice(0,1)),ya._newXPos=A.x),pa?Db.elemCreated=!1:(pa=ya.graphics.element=w.rect(A,Va),Db.elemCreated=!0),Ba||(pa.animateWith(da,ia,{y:J,height:oa||1},X,T,qb&&xb),qb=!1)),(pa=ya.graphics.element)&&Ba&&(Db.elemCreated=!1,A={x:G,y:J,width:fa,height:oa||1,r:Ta},I||
!1!==b.visible||0===ma||(delete A.y,delete A.height),h||pa.attr({fill:B(cb[0]),stroke:B(cb[1]),"stroke-width":Bb?Ma:0,"stroke-linejoin":"miter","stroke-dasharray":bb,ishot:!N,visibility:l}),pa.animateWith(da,ia,A,X,T,qb&&yb),qb=!1),pa.shadow(Hb,Ua).data("BBox",M),na||N)oa<C&&(J-=(C-oa)/2,oa=C),tb.attr={x:G,y:J,width:fa,height:oa,r:Ta,cursor:na?"pointer":"",stroke:p,"stroke-width":Bb?Ma:0,fill:p,ishot:!0,visibility:l};Ba?b.drawTracker():r.trackerDrawID.push(mb.addJob(b.drawTracker,b,[],k.priorityList.tracker));
Ba?b.drawLabel():r.labelDrawID.push(mb.addJob(b.drawLabel,b,[],k.priorityList.label));!Ba&&L.hide();n.drawSumValueFlag&&n.drawSumValueFlag&&n.drawSumValue();b.drawn=!0;Ga&&b.remove()},drawTracker:function(){var b=this.chart,a=this.components,c=a.pool,a=a.data,e=b.config.plothovereffect,h=b.components,d=h.paper,h=h.xAxis[0].getCategoryLen(),g=this.graphics.trackerContainer,k,f,l,m,r,v,p,t,B=function(a){la.call(this,b,a)},w=function(a){return function(c){var f=this.getData();0!==f.showHoverEffect&&
!0!==f.draged&&(a.attr(this.getData().setRolloverAttr),la.call(this,b,c,"DataPlotRollOver"))}},C=function(a){return function(c){var f=this.getData();0!==f.showHoverEffect&&!0!==f.draged&&(a.attr(this.getData().setRolloutAttr),la.call(this,b,c,"DataPlotRollOut"))}};for(l=0;l<h;l++)if(m=a[l],void 0!==m&&(f=m.config,k=m.trackerConfig,(r=m.graphics)&&r.element)){r=r.element;p=m.graphics.hotElement;if(t=k.attr)p?p.attr(t):c&&c.hotElement[0]?(p=m.graphics.hotElement=c.hotElement[0],p.attr(t),c.hotElement.splice(0,
1)):(p=m.graphics.hotElement=d.rect(t,g),v=!0);(p||r).data("eventArgs",k.eventArgs).data(za,e).data(Oa,f.setRolloverAttr||{}).data(wa,f.setRolloutAttr||{}).tooltip(k.eventArgs&&k.eventArgs.toolText);(v||f.elemCreated)&&(p||r).click(B).hover(w(r),C(r))}},show:function(){var b=this.graphics&&this.graphics.container,a=this.graphics&&this.graphics.trackerContainer,c=this.graphics&&this.graphics.dataLabelContainer,e=this.graphics&&this.graphics.shadowContainer,h=this.chart.is3D,d=this.components.data,
g=this.chart.config.categories,k=this.yAxis,f=this.chart,l=f.components.xAxis[0],g=Na(this.JSONData.data&&this.JSONData.data.length,g&&g.length);this.config.legendInteractivity=!0;f._chartAnimation();this.visible=!0;this._conatinerHidden=!1;if(h)for(b=0;b<g;b++)d[b]&&d[b].graphics&&d[b].graphics.element&&d[b].graphics.element.attr({visibility:Ra}),d[b]&&d[b].graphics&&d[b].graphics.hotElement&&d[b].graphics.hotElement.attr({visibility:Ra});else b.show(),a.show();e.show();c&&c.show();f.config.transposeAxis&&
(f._setAxisLimits(),k.draw());f.isRealTime&&l.draw();f._drawDataset();this.config.legendInteractivity=!1},hide:function(){var b=this.yAxis,a=this.chart,c=a.components.xAxis[0];a._chartAnimation();this.visible=!1;this.config.legendInteractivity=!0;a.config.transposeAxis&&(a._setAxisLimits(),b.draw());a.isRealTime&&c.draw();a._drawDataset();this.config.legendInteractivity=!1},drawLabel:function(b,a){var c=this.chart,d=c.config,h=c.graphics,g=c.components,q=c.get("config","animationObj"),k=q.dummyObj,
f=q.animObj,l=q.animType,q=q.duration,r=g.paper,v=c.linkedItems.smartLabel,p=c.config.dataLabelStyle,t=this.config.legendInteractivity,B=g.xAxis[0].getCategoryLen(),w=this.components,g=w.data,w=w.pool,C=this.visible,z,F,d=d.rotatevalues?270:0,H,E,I,G,S,J=this.graphics.dataLabelContainer,R=this.labelDrawn;z=e(b,0);B=e(a,B);h=h.datalabelsGroup;J||(J=this.graphics.dataLabelContainer=r.group("datalabel",h));C?J.show():J.hide();v.useEllipsesOnOverflow(c.config.useEllipsesWhenOverflow);v.setStyle(p);for(h=
z;h<B;h++)if(z=g[h],void 0!==z&&(C=z.graphics))S=z&&z.config,I=z._yPos,G=z._xPos,E=S.setValue,F=S.displayValue,(H=S.showValue)&&null!==E?(t&&S._state||(H=v.getOriSize(F),S._state=d?{labelWidth:H.height,labelHeight:H.width}:{labelWidth:H.width,labelHeight:H.height}),E=this._getValuePosition({labelWidth:S._state.labelWidth,labelHeight:S._state.labelHeight,width:z._width,height:z._height,yPos:I,xPos:G,value:E}),I=E.textX,E=E.textY,F={x:I,y:E,text:F},t||(F=m(F,{visibility:Ra,"line-height":p.lineHeight,
fill:p.color,"text-bound":[p.backgroundColor,p.borderColor,p.borderThickness,p.borderPadding,p.borderRadius,p.borderDash]})),!C.label&&R&&c.isRealTime&&(S=m({},F),S.x=F.x-G+(z._newXPos||0),S.transform=r.getSuggestiveRotation(d,S.x,E),w&&w.label[0]?(C.label=w.label[0].attr(S),w.label.splice(0,1)):C.label=r.text(S,J)),F.transform=r.getSuggestiveRotation(d,I,E),(z=C.label)||(z=C.label=r.text(F,J)),z.show(),R&&z.animateWith(k,f,F,q,l)):C.label&&(C.label.attr({"text-bound":[]}),C.label.hide());this.labelDrawn=
!0},_getValuePosition:function(b){var a=this.chart,e=a.components,d=a.config,h=e.canvas.config,g=e.yAxis[0],e=h.xDepth,h=h.yDepth,q=d.canvasTop,k=d.canvasHeight+h,f,l,m,r=b.yPos,v=a.is3D,a=a.config.isstacked,p=d.valuepadding+2,t=b.height;f=b.width;d=d.placevaluesinside;m=b.labelHeight;var B=g.getAxisConfig("isReverse"),w=g.getAxisConfig("axisRange"),z=w.min,g=b.value,w=0<w.max&&0>z;b=b.xPos;B&&w&&(l=0>g?!1:!0);l=c(l,0>g);m=B=m+p;p=.5*B+p;f=b+.5*f;b=l?q+k-(r+t+h):r-q;a?(k=Na(q+k-.5*m,r+.5*t+(h||0)),
k=Ja(q+.5*m,k),f-=e):d?t>=m?(k=r+(l?t-p:p),v&&(f-=e,k+=h)):b>=m?(k=r+(l?t+p:-p),v&&l&&(f-=e,k+=h)):(k=r+(l?t-p:p),v&&(f-=e,k+=h)):b>=m?(k=r+(l?t+p:-p),v&&(l?(f-=e,k+=h):f-=e/2)):(k=r+(l?t-p:p),v&&(f-=e,k+=h));return{textX:f,textY:k}},_parseValues:function(b,a,c,e){var h=this.chart.config;b=this.components.data[b].config;var d=h.showpercentvalues,g=h.showpercentintooltip,k=b.setValue,h=h.stack100percent,f=this.chart.components.numberFormatter,l=this.yAxis,m=b.setDisplayValue,k=(this.visible?k||0:0)/
c*100,f=f.percentValue(k);h&&(b.value=k,a=(a||0)/c*100);g&&(b.toolTipValue=f);d&&!m&&(b.displayValue=f);e&&(b.toolText=ba(b.setTooltext,[14,24,25,112],{percentValue:f,sum:l.dataLabels(c),unformattedSum:c}));return a},getDataLimits:function(){return{max:this.config.maxValue,min:this.config.minValue}},addData:function(b,a,c){var e=this.components,h=this.chart.components.numberFormatter,d=e.data,g=b.data,k=g.length,f=this.config,l=f.maxValue,f=f.minValue,m=this.maxminFlag,r;e.addDataArr=b.data;if(0===
a)this.startPosition=!0;else if(a+k===d.length||void 0===a)this.startPosition=!1;for(r=0;r<k;r++)if(void 0!==a?d.splice(a+r,0,{config:{}}):d.push({config:{}}),!m&&(e=h.getCleanValue(g[r].value),e>l||e<f))m=this.maxminFlag=!0;this._setConfigure(b,a);m&&this.setMaxMin();c&&this.draw()},hideElements:function(b){b.hide()},removeData:function(b,a,c){var e=this.components,h=e.data,d=e.removeDataArr||(e.removeDataArr=[]),g=this.config,k=this.groupManager,f=this.maxminFlag;void 0===a&&(a=1);b=b||0;if(b+a===
h.length)this.endPosition=!0;else if(0===b||void 0===b)this.endPosition=!1;e.removeDataArr=d=d.concat(h.splice(b,a));k&&k.removeSumLabels&&k.removeSumLabels(b,a,this.positionIndex);e=d.length;for(b=0;b<e;b++)if(d[b]){a=d[b].config;if(a.setValue===g.maxValue||a.setValue===g.minValue)f=this.maxminFlag=!0;if(f)break}f&&this.setMaxMin();c&&this.draw()},updateData:function(b,a,c){var e=this.config,h=e.maxValue,d=e.prevMin,g=this.chart,k=this.groupManager||this,f=g.components,l=f.xAxis||f.yAxis,m=l&&f.xAxis[0],
f=l&&f.yAxis[0];this._setConfigure(b,a);this.setMaxMin();if(e.maxValue!==h||e.minValue!==d)this.maxminFlag=!0;c&&(g._setAxisLimits(),l&&m.draw(),l&&f.draw(),k.draw())},setMaxMin:function(){var b=this.components.data,a=this.config,c,e,h=b.length,d=-Infinity,g=Infinity;for(c=0;c<h;c++)b[c]&&(e=b[c].config,e=e.setValue,void 0!==e&&(d=Ja(d,e),g=Na(g,e)));a.maxValue=d;a.minValue=g},hidingPosition:function(){var b=this.components.removeDataArr.length,a=this.config.groupMaxWidth;return!1===this.endPosition?
function(c){return{x:c._xPos-a*b,y:c._yPos}}:!0===this.endPosition?function(c){return{x:c._xPos+a*b||0,y:c._yPos}}:function(){return{width:0}}},remove:function(){var b=this.components,a=b.removeDataArr,c=b.pool||(b.pool={element:[],hotElement:[],label:[]}),e=this.chart,h=e.get("config","animationObj"),d=h.duration,g=h.dummyObj,k=h.animObj,h=h.animType,f=this.maxminFlag,l,m,r,v,p=e.components.paper,t=e.config.rotatevalues,B=this.chart.config.realTimeConfig&&this.chart.config.realTimeConfig.clear,w=
this.hidingPosition(),z=function(){this.hide()};for(r=a.length-1;0<=r;r--)if(e=a[r],a.splice(r,1),e&&e.graphics){m=e.graphics;for(l in m)"label"===l&&void 0===this.startPosition&&void 0===this.endPosition&&m[l].hide(),v=w(e),"label"===l&&(v.transform=p.getSuggestiveRotation(t,v.x,v.y)),B&&m[l].hide(),m[l].animateWith(g,k,v,d,h,z);e.graphics.element&&(c.element=c.element.concat(e.graphics.element));e.graphics.hotElement&&(c.hotElement=c.hotElement.concat(e.graphics.hotElement));e.graphics.label&&(c.label=
c.label.concat(e.graphics.label))}b.pool=c;f&&this.setMaxMin()},getAxisValuePadding:function(){return{left:.5,right:.5}},manageSpace:function(){var b=this.config||(this.config={}),a=this.chart,c=a.config.rotatevalues,d=a.components.xAxis[0],h=a.components.yAxis[0],g=a.config.dataLabelStyle,q=(this.components||{}).data||[],k=b.leftMostData||q[0],q=b.rightMostData||q[q.length-1],f,l,m={};f={};var r=0,v=0,p,t=d.getPixel(0),m=a.linkedItems.smartLabel,B={paddingLeft:0,paddingRight:0};f=0;var w=this.groupManager,
w="column"===this.type&&w.getDataSetPosition(this),z=this.getAxisValuePadding(),C=b.topMostData,b=b.bottomMostData;k&&(k=k.config,p=k.showValue,l=k&&k.anchorProps||{},p&&(f=k.displayValue,m.useEllipsesOnOverflow(a.config.useEllipsesWhenOverflow),m.setStyle(g),f=m.getOriSize(f),f=c?f.height:f.width),null!==k.setValue&&(r=e(l.radius,0)+e(l.borderThickness,0)/2,v=(f||0)/2-(d.getPixel(z.left)-t)-(w&&w.xPosOffset+w.columnWidth/2||0),0>v&&(v=0)),B.paddingLeft=Ja(r,v));q&&(k=q.config,p=k.showValue,l=k&&
k.anchorProps||{},p&&!c&&(f=k.displayValue,m.setStyle(g),m=m.getOriSize(f),f=c?m.height:m.width),null!==k.setValue&&(r=e(l.radius,0)+e(l.borderThickness,0)/2,v=(f||0)/2-(d.getPixel(z.right)-t)+(w&&w.xPosOffset+w.columnWidth/2||0),0>v&&(v=0)),B.paddingRight=Ja(r,v));C&&(l=(k=C.config)&&k.anchorProps||{},null!==k.setValue&&(r=e(l.radius,0)+e(l.borderThickness,0)/2,v=Math.max(r-(h.getPixel(k.setValue.y)-h.getPixel(h.getLimit().max)),0)),B.paddingTop=v);b&&(l=(k=b.config)&&k.anchorProps||{},null!==k.setValue&&
(r=e(l.radius,0)+e(l.borderThickness,0)/2,v=Math.max(r-(h.getPixel(h.getLimit().min)-h.getPixel(k.setValue.y)),0)),B.paddingBottom=v);return B},getPlotClickFn:function(b){return function(a){la.call(this,b,a)}},getEventArgs:function(){return{datasetName:(this.JSONData||{}).seriesname,datasetIndex:this.index,id:(this.config||{}).userID,visible:this.visible}},rolloverResponseSetter:function(b,a){var c=a.jsonData.chart;return function(e){var h=this.data("hoverEnabled"),d=this.data("draged"),g=this.data("dataset");
!0!==d&&(g._hoverFunc(b,"DataPlotRollOver",h,c),la.call(this,a,e,"DataPlotRollOver"))}},rolloutResponseSetter:function(b,a){var c=a.jsonData.chart;return function(e){var h=this.data("hoverEnabled"),d=this.data("draged"),g=this.data("dataset");!0!==d&&(g._hoverFunc(b,"DataPlotRollOut",h,c),la.call(this,a,e,"DataPlotRollOut"))}}},void 0,{showvalues:void 0,includeinlegend:1,plotfillalpha:void 0,plotfillangle:void 0,ratio:void 0}]);FusionCharts.register("component",["dataset","realtimecolumn",{_realTimeConfigure:function(b){var a=
this.chart,c=this.components.data,e=[],h=a.config.realTimeConfig.numDisplaySets;b=b?0:a.components.xAxis[0].getCategoryLen();b<h?(e.length=h-b,this.components.data=e.concat(c)):b>h&&this.components.data.splice(h,b-h)}},"Column"]);FusionCharts.register("component",["dataset","scrollcolumn2d",{},"Column"]);FusionCharts.register("component",["dataset","Column3D",{draw:function(){var b=this,d=b.JSONData,g=b.chart.jsonData.chart,l=b.config,h=b.groupManager,n=b.index,q=b.chart.config.categories,A,f,m=b.chart,
r=m.getJobList(),v=m.config,t=m.components.paper,w=m.components.xAxis[0],z=b.yAxis,F=m.graphics.columnGroup,H=m.config.isstacked,E,I,G=m.graphics,J=k.parseUnsafeString,M=k.getValidValue,L=v.showtooltip,S=m.get(Va,Ea),Q=S.animType,R=S.animObj,O=S.dummyObj,S=S.duration,N=w.getAxisPosition(0),P=w.getAxisPosition(1),P=l.groupMaxWidth=P-N,X=l.definedGroupPadding,ia=v.plotspacepercent/200,da=h.getDataSetPosition(b),N=h.stackSumValue[b.positionIndex],T=v.maxcolwidth,P=(1-.01*X)*P||Na(P*(1-2*ia),1*T),P=e(da.columnWidth,
P/1),aa,X=da.xPosOffset||0,da=da.height,U,ia=b.components.data,V,W,Z,ha,T=z.getLimit();W=T.max;var oa=T.min,T=z.getAxisBase(),La=z.yBasePos=z.getAxisPosition(T),ga=0,ba=v.plotborderthickness;ha=b.graphics.container;var qa=b.graphics.dataLabelContainer,la=b.graphics.shadowContainer,sa=G.trackerGroup,ma,ja,wa,Ba,Aa,ya,va,pa,ub,G=l.use3dlighting,Ca,ta=!0,Db=!1,Ga=b.visible,Ja=(b.components.removeDataArr||[]).length,Ia=b.components.pool||[],za=v.showplotborder,xa,Oa,Ma,Ua=function(){var a,c;if(!1===b.visible&&
(!1===b._conatinerHidden||void 0===b._conatinerHidden)){a=b.components.data;for(c=0;c<A;c++)a[c]&&a[c].graphics&&a[c].graphics.element&&a[c].graphics.element.attr("visibility",Xa),a[c]&&a[c].graphics&&a[c].graphics.hotElement&&a[c].graphics.hotElement.attr("visibility",Xa);la.hide();qa&&qa.hide();b._conatinerHidden=!0}},Ya=function(){h.drawSumValueFlag&&h.drawSumValue()};ha||(ha=b.graphics.container=m.datasetLayers=m.datasetLayers||t.group(Ka,F));la||(la=b.graphics.shadowContainer=t.group(Pa,F).toBack());
m._cacheObj||(m._cacheObj={});!m._cacheObj.elemAttr&&(m._cacheObj.elemAttr={});xa=m._cacheObj.elemAttr;!m._cacheObj.zeroplaneAttr&&(m._cacheObj.zeroplaneAttr={});Aa=m._cacheObj.zeroplaneAttr;!m._cacheObj.cubepathObj&&(m._cacheObj.cubepathObj={});Oa=m._cacheObj.cubepathObj;A=w.getCategoryLen();if(Ga)for(f=0;f<A;f++)ia[f].graphics&&ia[f].graphics.element&&ia[f].graphics.element.attr("visibility",Ra),ia[f].graphics&&ia[f].graphics.hotElement&&ia[f].graphics.hotElement.attr("visibility",Ra);F=ha.negative=
ha.negative||t.group(Ta,ha);wa=ha.column=ha.column||t.group(fa,ha);Ba=sa.negative=sa.negative||t.group(Ta,sa);sa=sa.column=sa.column||t.group(fa,sa);0>oa&&0<=W?(f=ha.zeroPlane,Aa.fill=[v.zeroPlaneColor,!G],Aa.stroke=v.zeroPlaneBorderColor||"none",Aa[Bb]=v.zeroPlaneShowBorder?1:0,f?(f=[m.config.canvasLeft-10,La+10,m.config.canvasWidth,1,10,10,f],h.graphics.zeroplane.show(),h.graphics.zeroplane._.cubetop.show(),h.graphics.zeroplane._.cubeside.show(),Oa.cubepath=f,h.graphics.zeroplane.animateWith(O,
R,Oa,S,Q),h.graphics.zeroplane.attr(Aa)):(f=ha.zeroPlane=t.group(Ha,ha).insertBefore(wa),!h.graphics&&(h.graphics={}),h.graphics.zeroplane=t.cubepath(m.config.canvasLeft-10,La+10,m.config.canvasWidth,1,10,10,f).attr(Aa))):h.graphics&&h.graphics.zeroplane&&h.graphics.zeroplane.hide()&&h.graphics.zeroplane._.cubetop.hide()&&h.graphics.zeroplane._.cubeside.hide();(Aa=F.data(Fa))||(F.data(Fa,Array(A)),Aa=F.data(Fa));(ya=wa.data(Fa))||(wa.data(Fa,Array(A)),ya=wa.data(Fa));(va=Ba.data(Fa))||(Ba.data(Fa,
Array(A)),va=Ba.data(Fa));(pa=sa.data(Fa))||(sa.data(Fa,Array(A)),pa=sa.data(Fa));for(f=0;f<A;f++)if(v=ia[f],Ma=v.trackerConfig={},V=(ha=v&&v.config)&&ha.setValue,!v||void 0!==V&&null!==V||(v.graphics&&v.graphics.element&&(v.graphics.element.hide(),v.graphics.element._.cubeside.hide(),v.graphics.element._.cubetop.hide()),v.graphics&&v.graphics.hotElement&&v.graphics.hotElement.hide()),void 0!==v&&void 0!==V&&null!==V){Aa[f]=Aa[f]||t.group(F);ya[f]=ya[f]||t.group(wa);va[f]=va[f]||t.group(Ba);pa[f]=
pa[f]||t.group(sa);v.graphics||(ia[f].graphics={});W=ha.setLink;oa=ha.colorArr;Z=ha.displayValue;E=0<=V?ha.previousPositiveY:ha.previousNegativeY;U=M(J(c(ha.origToolText,d.plottooltext,g.plottooltext)));H&&(E=b._parseValues(f,E,N[f],U),V=ha.value);aa=z.getAxisPosition(E||T);m=w.getAxisPosition(f)+X;0!==da?(I=z.getAxisPosition(V+(E||0)),E=Sa(aa-I)):(E=0,I=aa);I=Na(I,aa);aa=P;(Ma.isNegative=ub=0>V)?(ma=Aa,ja=va):(ma=ya,ja=pa);Ma.targetGroupTracker=ja;U=!1!==ha.toolText&&ha.toolText+(U?"":ha.toolTipValue);
Ma.eventArgs={index:f,link:W,value:V,displayValue:Z,categoryLabel:q[f].label,toolText:U?U:"",id:a,datasetIndex:n,datasetName:d.seriesname,visible:Ga};S||(La=I,ga=E);Z=m;U=I;ja=aa;Ca=E;m-=10;I+=10;v.graphics.element?(Db=!0,V=v.graphics.element,ma[f].appendChild(V._.cubetop),ma[f].appendChild(V._.cubeside),ma[f].appendChild(V),Oa.cubepath=[m,!0===b.visible||0===da||H?I:V.attrs.cubepath[1],aa,!0===b.visible||0===da||H?E:V.attrs.cubepath[3],10,10],V.animateWith(O,R,Oa,S,Q,ta&&Ua),xa.fill=[B(oa[0]),!G],
xa.ishot=!0,xa.stroke=za&&B(oa[1]),xa[Bb]=za?ba:0,xa[zb]=ha.plotBorderDashStyle,xa.cursor=W?"pointer":a,xa.visibility&&delete xa.visibility,xa.cubepath&&delete xa.cubepath,V.attr(xa),ha.elemCreated=!1):(Ia.element&&Ia.element.length?(V=v.graphics.element=Ia.element.shift(),ma[f].appendChild(V._.cubetop),ma[f].appendChild(V._.cubeside),ma[f].appendChild(V),V.show()):V=v.graphics.element=t.cubepath(ma[f]),xa.cubepath=[m,S?La+10:I,aa,S?0:ga,10,10],xa.fill=[B(oa[0]),!G],xa.ishot=!0,xa.stroke=za&&B(oa[1]),
xa[Bb]=za?ba:0,xa[zb]=ha.plotBorderDashStyle,xa.cursor=W?"pointer":a,xa.visibility=Ga?Ra:Xa,V.attr(xa),Oa.cubepath=[m,I,aa,E,10,10],V.animateWith(O,R,Oa,S,Q,ta&&Ya),ta=!1,v._newXPos=m,ha.elemCreated=!0);V.shadow(ha.shadow,la).data("BBox",{height:ga,width:aa,x:m,y:I});if(W||L)E<C&&(I-=(C-E)/2,E=C),Ma.attr={path:ab([m,I,aa,E,10,10]),cursor:W?"pointer":a,stroke:ba&&p||na,"stroke-width":za?l.plotBorderThickness:0,fill:p,ishot:!0};H&&ub&&V.toBack();v._xPos=Z;v._yPos=U;v._height=Ca;v._width=ja}r.trackerDrawID.push(mb.addJob(b.drawTracker,
b,[],k.priorityList.tracker));b.drawn?b.drawLabel():r.labelDrawID.push(mb.addJob(b.drawLabel,b,[],k.priorityList.label));b.drawn=!0;h.drawSumValueFlag&&Db&&h.drawSumValueFlag&&h.drawSumValue();Ja&&b.remove()},drawTracker:function(){var b=this.chart,a=this.components.data,c=b.config,e=c.isstacked,c=c.plothovereffect,h=b.components,d=h.paper,h=h.xAxis[0].getCategoryLen(),g,k,f,l,m,v,r,p,t,B=this.components.pool||[],w=function(a){la.call(this,b,a)},z=function(a){return function(c){var f=this.getData();
0!==f.showHoverEffect&&!0!==f.draged&&(a.attr(this.getData().setRolloverAttr),la.call(this,b,c,"DataPlotRollOver"))}},C=function(a){return function(c){var f=this.getData();0!==f.showHoverEffect&&!0!==f.draged&&(a.attr(this.getData().setRolloutAttr),la.call(this,b,c,"DataPlotRollOut"))}};for(f=0;f<h;f++)if(k=(l=a[f])&&l.config,g=l.trackerConfig,m=l.graphics){m=l.graphics.element;t=g.targetGroupTracker;if(p=g.attr)l.graphics.hotElement?(r=l.graphics.hotElement,t[f].appendChild(r),r.attr(p),v=!1):(B.hotElement&&
B.hotElement.length?(r=l.graphics.hotElement=B.hotElement.shift(),t[f].appendChild(r),r.show()):(r=l.graphics.hotElement=d.path(t[f]),v=!0),r.attr(p));r=l.graphics.hotElement;(r||m).data("eventArgs",g.eventArgs).data(za,c).data(Oa,k.setRolloverAttr||{}).data(wa,k.setRolloutAttr||{}).tooltip(g.eventArgs&&g.eventArgs.toolText);(v||k.elemCreated)&&(r||m).click(w).hover(z(m),C(m));e&&g.isNegative&&r&&r.toBack()}},remove:function(){var b=this,a=b.components,c=a.removeDataArr,e=a.pool||(a.pool={element:[],
hotElement:[],label:[]}),h=c.length,d=b.config.groupMaxWidth,g,k=b.maxminFlag,f,l,m;(function(){return!1===b.endPosition?function(){return{x:g._xPos-d*h}}:!0===b.endPosition?function(){return{x:g._xPos+d*h||0}}:function(){return{width:0}}})();for(m=0;m<h;m++)if(g=c[0],c.splice(0,1),g&&g.graphics){l=g.graphics;for(f in l)l[f].hide();g.graphics.element&&(e.element=e.element.concat(g.graphics.element));g.graphics.hotElement&&(e.hotElement=e.hotElement.concat(g.graphics.hotElement));g.graphics.label&&
(e.label=e.label.concat(g.graphics.label))}a.pool=e;k&&b.setMaxMin()}},"Column",{use3dlighting:void 0}]);FusionCharts.register("component",["dataset","Waterfall2D",{configure:function(){var b,d,g=this.chart,l=g.components;b=this.config;d=this.JSONData;var h=d.data,n=g.config.categories,n=Na(n&&n.length,h&&h.length),q=g.jsonData.chart,A=l.colorManager,f,m=A.getPlotColor(this.index||this.positionIndex),r=e(d.dashed,q.plotborderdashed),v=e(q.useplotgradientcolor,1),p=e(q.showtooltip,1),t=k.parseUnsafeString,
w=t(q.yaxisname),z=t(q.xaxisname),C=t(c(q.tooltipsepchar,", ")),F=k.parseTooltext,E,H,I,G,J,S,M,R,O,L,N,P,ia,da,T,X,U,V,aa,Z,W,ba,La,ga,fa,qa,la,sa=k.getDashStyle,ma=this.components.data,na=l.numberFormatter,wa;f={};f=f.dataObj||(f.dataObj={});wa=f.chart||(f.chart={});U=c(q.connectorthickness,1);var ta,Aa=-Infinity,ya=Infinity,va=0,pa=0,ub=0,Ca,xa,Ga,Ea;this.visible=1===e(this.JSONData.visible,!Number(this.JSONData.initiallyhidden),1);f=b.showplotborder=e(q.showplotborder,1);b.plotBorderThickness=
J=f?e(q.plotborderthickness,1):0;b.isRoundEdges=S=e(q.useroundedges,0);b.plotBorderAlpha=N=f?c(q.plotborderalpha,I,oa):0;b.plotBorderColor=P=c(q.plotbordercolor,A.getColor("plotBorderColor").split(",")[0]);b.plotgradientcolor=L=v?ha(q.plotgradientcolor,A.getColor("plotGradientColor")):a;b.plotDashLen=v=e(q.plotborderdashlen,6);b.plotDashGap=G=e(q.plotborderdashgap,3);b.use3DLighting=e(q.use3dlighting,1);b.showSum=ta=e(q.showsumatend,1);b.plotColor=c(d.color,m);b.plotfillAngle=R=e(360-q.plotfillangle,
90);b.showShadow=S?e(q.showshadow,1):e(q.showshadow,A.getColor("showShadow"));b.showHoverEffect=M=e(q.plothovereffect,q.showhovereffect,void 0);b.plotFillAlpha=c(d.alpha,q.plotfillalpha,oa);b.plotRadius=e(q.useRoundEdges,b.isRoundEdges?1:0);b.plotFillRatio=O=c(d.ratio,q.plotfillratio);b.plotBorderDashStyle=ia=r?sa(v,G,J):"none";b.showValues=e(d.showvalues,q.showvalues,1);b.valuePadding=e(q.valuepadding,2);b.enableAnimation=m=e(q.animation,q.defaultanimation,1);b.animation=m?{duration:1E3*e(q.animationduration,
1)}:!1;wa.transposeAnimation=b.transposeAnimation=e(q.transposeanimation,wa.transposeAnimation,m);b.transposeAnimDuration=1E3*e(q.transposeanimduration,.2);b.showTooltip=e(q.showtooltip,1);b.stack100Percent=e(g.stack100percent,q.stack100percent,0);b.definedGroupPadding=Ja(e(q.plotspacepercent),0);b.plotSpacePercent=Ja(e(q.plotspacepercent,20)%100,0);b.maxColWidth=e(q.maxcolwidth,50);b.showPercentValues=e(q.showpercentvalues,0);b.showPercentInToolTip=e(q.showpercentintooltip,0);b.plotPaddingPercent=
e(q.plotpaddingpercent);b.rotateValues=e(q.rotatevalues)?270:0;b.placeValuesInside=e(q.placevaluesinside,0);b.parentYAxis=wa="s"===c(d.parentyaxis&&d.parentyaxis.toLowerCase(),"p")?1:0;ma||(ma=this.components.data=[]);b.zLine=xa={step:!0,data:[],dashStyle:"1"===q.connectordashed?sa(e(q.connectordashlen,2),e(q.connectordashgap,2),U):"none",useForwardSteps:!0,color:Q(c(q.connectorcolor,"000000"),c(q.connectoralpha,100)),lineWidth:U};for(g=0;g<n;g+=1)da=h[g],X=na.getCleanValue(da.value),H=e(da.issum,
0),da.vline||H?delete da._value:(va+=X,da._value=X);Ca=na.dataLabels(va);ta&&(ta=!0,n+=1,Ga={label:ja(q.sumlabel,"Total"),_value:va,value:va,issum:1,cumulative:1});for(Ea=g=0;g<n;g+=1)da=h[g],U=(X=ma[g])&&X.config,X||(X=ma[g]={graphics:{}}),X.config||(U=ma[g].config={}),!da&&ta&&(da=h[g]=Ga),m=c(da.color,A.getPlotColor(g)),X.vline||(X=da._value,delete da._value,U.issum=H=e(da.issum,0),I=U.isCumulative=e(da.cumulative,1),H?(X=I?pa:pa===ub?pa:pa-ub,U.lastComTotal=ub,ub=pa,xa.data.push({y:null,x:Ea-
.5})):pa+=X,Aa=Ja(Aa,pa),ya=Na(ya,pa),U.total=pa,H=U.showLabel=e(da.showlabel,q.showlabels,1),H=U.dataLabel=t(H?ja(da.label,da.name):a),0<X?(V=c(da.color,q.positivecolor,m),0!==M&&(aa=c(da.positivehovercolor,q.positivehovercolor,q.plotfillhovercolor,q.columnhovercolor,V))):(V=c(da.color,q.negativecolor,m),0!==M&&(aa=c(da.negativehovercolor,q.negativehovercolor,q.plotfillhovercolor,q.columnhovercolor,V))),I=c(da.alpha,b.plotFillAlpha),E=e(da.dashed,r),Z=e(da.dashlen,v),W=G=e(da.dashgap,G),U.showValue=
e(da.showvalue,b.showValues),U.setValue=T=X,U.setLink=c(da.link),U.toolTipValue=T=na.dataLabels(T,wa),U.setDisplayValue=ba=Ba(t(da.displayvalue)),U.displayValue=c(ba,T),U.plotBorderDashStyle=E=1===E?sa(Z,W,J):0===E?"none":ia,U.colorArr=V=k.graphics.getColumnColor(V+","+L.replace(/,+?$/,""),I,O,R,S,P,N.toString(),0,!1),0!==M&&(Z=c(da.alpha,da.hoveralpha,d.hoveralpha,q.plotfillhoveralpha,q.columnhoveralpha,I),W=c(da.hovergradientcolor,d.hovergradientcolor,q.plothovergradientcolor,L),!W&&(W=""),T=c(da.hoverratio,
d.hoverratio,da.ratio,q.plothoverratio,O),ba=e(360-da.hoverangle,360-d.hoverangle,360-q.plothoverangle,R),La=c(da.borderhovercolor,d.borderhovercolor,q.plotborderhovercolor,P),ga=c(da.borderhoveralpha,d.borderhoveralpha,q.plotborderhoveralpha,N,I),I=e(da.borderhoverthickness,d.borderhoverthickness,q.plotborderhoverthickness,J),fa=e(da.borderhoverdashed,d.borderhoverdashed,q.plotborderhoverdashed),qa=e(da.borderhoverdashgap,d.borderhoverdashgap,q.plotborderhoverdashgap,v),la=e(da.borderhoverdashlen,
d.borderhoverdashlen,q.plotborderhoverdashlen,G),fa=fa?sa(la,qa,I):E,1===M&&aa===m&&(aa=ob(aa,70)),m=k.graphics.getColumnColor(aa+","+W,Z,T,ba,S,La,ga.toString(),0,!1),U.setRolloutAttr={fill:B(V[0]),stroke:f&&B(V[1]),"stroke-width":J,"stroke-dasharray":E},U.setRolloverAttr={fill:B(m[0]),stroke:f&&B(m[1]),"stroke-width":I,"stroke-dasharray":fa}),E=U.toolTipValue,m=Ba(t(c(da.tooltext,d.plottooltext,q.plottooltext))),p?void 0!==m?(I=[1,2,3,5,6,7,20,21,24,25],H={formattedValue:E,label:H,yaxisName:w,xaxisName:z,
cumulativeValue:pa,cumulativeDataValue:na.dataLabels(pa),sum:Ca,unformattedSum:va},m=F(m,I,H,da,q,d)):m=null===E?!1:H!==a?H+C+E:E:m=!1,xa.data.push({y:null===X?null:pa,x:Ea}),Ea+=1,U.toolText=m,U.setTooltext=m);b.maxValue=Aa;b.minValue=ya;b.connectNullData=e(q.connectnulldata,0);b.showConnectors=e(q.showconnectors,1);b=d.catData;for(g=0;g<b.length;g+=1)d=b[g],h.splice(d.index,0,d.data);l.xAxis[0].setCategory(h);this.maxminFlag=!1},draw:function(){var b,a,c,d=this,h=d.chart,g=h.getJobList(),q=h.config.canvasBottom;
c=h.graphics.datasetGroup;var l=d.JSONData,f=d.config,m=d.groupManager,r=d.positionIndex,v=d.chart.config.categories,t=l.data,w=v&&v.length,z=t&&t.length,F,t=d.visible,E=h.components,H=E.paper,I=E.xAxis[0],G=E.yAxis[0],J=d.components,M,L,S,Q=h.graphics,R=k.Raphael,O=f.showTooltip,N=I.getAxisPosition(0),N=I.getAxisPosition(1)-N,P=f.definedGroupPadding,X=f.plotSpacePercent/200,ia=m.getDataSetPosition(d),da=f.maxColWidth,N=(1-.01*P)*N||Na(N*(1-2*X),1*da),N=e(ia.columnWidth,N/1),T,P=ia.xPosOffset||0,
ia=ia.height,aa,U,J=J.data,V,X=G.getAxisBase(),da=G.yBasePos=G.getAxisPosition(X),W=0,Z=f.showShadow,ha=f.plotBorderThickness,oa=f.plotRadius,La=d.graphics.container,ga=d.graphics.trackerContainer,ba=d.graphics.dataLabelContainer,qa=d.graphics.shadowContainer;V=Q.trackerGroup;var fa,sa,Q=!0,ma=!1,la=d.pool||(d.pool={}),ja=function(){!1!==d.visible||!1!==d._conatinerHidden&&void 0!==d._conatinerHidden||(La.hide(),ga.hide(),qa.hide(),ba&&ba.hide(),d._conatinerHidden=!0)},na=function(){d.drawLabel()},
Aa=h.get("config","animationObj"),ya=Aa.duration||0,va=Aa.dummyObj,pa=Aa.animObj,Aa=Aa.animType,wa,E=E.canvas.config.clip["clip-canvas"].slice(0);La||(La=d.graphics.container=H.group("columns",c),t||La.hide());La.attr("clip-rect",E);ga||(ga=d.graphics.trackerContainer=H.group("col-hot",V),t||ga.hide());qa||(qa=d.graphics.shadowContainer=H.group("shadow",c).toBack(),t||qa.hide());f.showConnectors&&d.drawLine();f=Na(w,z);for(w=0;w<f;w++)if(wa=(z=J[w])&&(z.trackerConfig={}),a=z&&z.config,E=(c=z&&z.graphics)&&
c.element,a)(F=a.setValue,M=0<=F,null===F)?E&&E.hide():(V=a.setLink,fa=a.colorArr,z.graphics||(J[w].graphics={}),b=a.displayValue,L=M?a.previousPositiveY:a.previousNegativeY,a.issum?a.isCumulative||(L=a.lastComTotal):L=J[w-1]&&J[w-1].config.total,T=G.getAxisPosition(L||X),M=I.getAxisPosition(w)+P,0!==ia?(L=G.getAxisPosition(F+(L||0)),aa=Sa(T-L)):(aa=0,L=T),L=Na(L,T),Za(L+aa)>=q&&(aa+=ha/2),m.isCrisp?(S=R.crispBound(M,L,N,aa,ha),M=S.x,L=S.y,T=S.width,aa=S.height):T=N,U=a.toolText,sa=a.plotBorderDashStyle,
wa.eventArgs={index:w,link:V,value:F,displayValue:b,categoryLabel:v[w].label,toolText:U,id:"",datasetIndex:r,datasetName:l.seriesname,visible:t,setRolloutAttr:a.setRolloutAttr,setRolloverAttr:a.setRolloverAttr},ya||(da=L,W=aa),F={ishot:!O,fill:B(fa[0]),stroke:B(fa[1]),"stroke-width":ha,"stroke-linejoin":"miter",visibility:t},a={x:M,y:da,width:T,height:W||1,r:oa,"stroke-dasharray":sa},z._xPos=M,z._yPos=L,z._height=aa,z._width=T,b=!1,E?(ma=!0,a.y=L,a.height=aa||1,E.attr(F).animateWith(va,pa,a,ya,Aa,
Q&&ja)):(la.element&&la.element.length?E=c.element=la.element.shift():(E=c.element=H.rect(La),b=!0),E.show().attr(F).attr(a),ya?(E.animateWith(va,pa,{y:L,height:aa||1},ya,Aa,Q&&na),Q=!1):ma=!0),E.shadow({opacity:Z},qa).data("BBox",S),V||O?(aa<C&&(L-=(C-aa)/2,aa=C),wa.attr={x:M,y:L,width:T,height:aa,r:oa,cursor:V?"pointer":"",stroke:p,"stroke-width":ha,fill:p,ishot:!0,visibility:t}):b&&d.attachCallBack.call(E,d,h,z));g.trackerDrawID.push(mb.addJob(d.drawTracker,d,[],k.priorityList.tracker));ma&&d.drawLabel()},
attachCallBack:function(b,a,c){this.click(b.getPlotClickFn(a)).hover(b.rolloverResponseSetter(c,a),b.rolloutResponseSetter(c,a))},drawTracker:function(){var b,a,c=this.chart,e=this.config,d=this.components,g=d.pool,q=this.JSONData.data,q=q&&q.length,d=d.data,k=c.components,f=k.paper,l=k.xAxis[0].getCategoryLen(),k=this.graphics.trackerContainer,m,r,v,p,t,B=this.components.removeDataArr||(this.components.removeDataArr=[]),w;v=0;for(w=Na(l,q);v<w;v++){p=!1;r=(a=d[v])&&a.config;m=a&&a.trackerConfig;
l=(b=a&&a.graphics)&&b.element;t=b&&b.hotElement;b=m&&m.eventArgs;if(null===r.setValue)t&&t.hide();else if(m=m.attr)t?t.attr(m):g&&g.hotElement&&g.hotElement[0]?(t=a.graphics.hotElement=g.hotElement[0],g.hotElement.splice(0,1),t.attr(m)):(t=a.graphics.hotElement=f.rect(m,k),p=!0),t.show(),p&&this.attachCallBack.call(t||l,this,c,a);!(a=b&&b.toolText)&&b&&(b.toolText="");b&&(t||l).tooltip(a).data("eventArgs",b).data("hoverEnabled",0!==e.showHoverEffect).data(Oa,b.setRolloverAttr).data(wa,b.setRolloutAttr).data("setElem",
l).data("dataset",this)}d.length>q&&B.push(d.pop());B.length&&this.remove()},drawLine:function(){var b=this.chart,a=b.components,c=b.graphics,d=this.config,h=a.paper,g,q,k=a.xAxis[0],a=a.yAxis[0],f=a.getAxisBase();g=a.getAxisPosition(f);var f=this.graphics.lineContainer,l=d.definedGroupPadding,m=d.plotSpacePercent/200,v=k.getAxisPosition(0),v=k.getAxisPosition(1)-v,r=d.maxColWidth,l=((1-.01*l)*v||Na(v*(1-2*m),1*r))/2,p=d.zLine,d=d.connectNullData,m=p.data,v=m.length,r=this.graphics,t=p.dashStyle,
B=p.color,p=p.lineWidth,w,z=r.zLine,C=null,E=[],F=[],H=b.get("config","animationObj"),b=H.duration||0,I=H.dummyObj,S=H.animObj,H=H.animType,c=c.datalabelsGroup;q=r.dataLabelContainer;q||(q=this.graphics.dataLabelContainer=h.group("datalabel",c));f||(f=r.lineContainer=h.group("line-connector",q));a.yBasePos=g;for(c=0;c<v;c+=1)q=m[c],g=q.y,null===g?(F.length=0,0===d&&(C=null)):(q=e(q.x,c),g=a.getAxisPosition(g),q=k.getAxisPosition(q),q=Ga(q,p,p).position,g=Ga(g,p,p).position,null!==C?(F.length&&(E=
E.concat(F),F.length=0),E.push("M",w,C,"m",-l,0,"H",q,"h",l,"m",0,g-C)):F.push("M",q,g),w=q,C=g);z||(z=r.zLine=h.path(f).attr({path:E,"stroke-linecap":"round","stroke-opacity":0}));z.animateWith(I,S,{path:E,"stroke-opacity":1,"stroke-dasharray":t,stroke:B,"stroke-linejoin":2<=p?"round":"miter","stroke-width":p},b,H)},hidingPosition:function(){return function(){return{width:0}}},_hoverFunc:function(b,a,c){var e=b.graphics[lb]||b.graphics[jb];a="DataPlotRollOver"===a?e.data(Oa):e.data(wa);c&&b.graphics[jb].attr(a)}},
"Column"]);FusionCharts.register("component",["dataset","Bar2D",{type:"bar",draw:function(){var b=this,d=b.JSONData,g=b.chart.jsonData.chart,l=b.config,h=b.groupManager,n=b.index,q=d.data,A=b.chart.config.categories,f,m,v,r,t=b.chart,w=t.getJobList(),z=t.config,E=t.components.paper,F=t.components.xAxis[0],H=t.components.yAxis[0];f=t.graphics.columnGroup;var I=t.config.isstacked,G,J,M,L=t.graphics,S=k.parseUnsafeString,Q=k.getValidValue,R=k.Raphael,O=z.showtooltip,N=F.getAxisPosition(0),P=F.getAxisPosition(1),
X=l.groupMaxWidth=Sa(P-N),ia=l.definedGroupPadding,da=z.plotspacepercent/200,T=h.getDataSetPosition(b),l=h.stackSumValue[b.positionIndex],aa=z.maxcolwidth,U=t.get(Va,Ea),t=U.animType,N=U.animObj,P=U.dummyObj,U=U.duration,X=(1-.01*ia)*X||Na(X*(1-2*da),1*aa),X=e(T.columnWidth,X/1),V,ia=T.xPosOffset||0,T=T.height,W,da=b.components.data,Z,ha,oa,La,ga,aa=H.getLimit(),ba=aa.min,aa=0<aa.max&&0>ba,ba=H.getAxisBase(),qa=H.yBasePos=H.getAxisPosition(ba),fa,sa=0,ma=z.plotborderthickness,la=ma/2,ja=z.useroundedges,
na=b.graphics.container,Aa=b.graphics.trackerContainer,ya=b.graphics.dataLabelContainer,va=b.graphics.shadowContainer;r=L.trackerGroup;var pa,L=b.visible,wa=!0,Ca=!1,Ba=(b.components.removeDataArr||[]).length,ta=b.components.pool||[],z=z.showplotborder,xa,Ga=function(){!1!==b.visible||!1!==b._conatinerHidden&&void 0!==b._conatinerHidden||(na.hide(),Aa.hide(),va.hide(),ya&&ya.hide(),b._conatinerHidden=!0)},Ja=function(){h.drawSumValueFlag&&h.drawSumValue()};na||(na=b.graphics.container=E.group(Ia,
f),L||na.hide());Aa||(Aa=b.graphics.trackerContainer=E.group(Ua,r),L||Aa.hide());va||(va=b.graphics.shadowContainer=E.group(Pa,f).toBack(),L||va.hide());L&&(na.show(),Aa.show(),va.show());f=F.getCategoryLen();for(r=0;r<f;r++)if(m=q&&q[r],Z=da[r],xa=Z.trackerConfig={},v=(ga=Z&&Z.config)&&ga.setValue,!Z||void 0!==v&&null!==v||(Z.graphics&&Z.graphics.element&&Z.graphics.element.hide(),Z.graphics&&Z.graphics.hotElement&&Z.graphics.hotElement.hide()),void 0!==Z&&void 0!==v&&null!==v){oa=ga.setLink;pa=
ga.colorArr;W=0<=v;Z.graphics||(da[r].graphics={});La=ga.displayValue;V=W?ga.previousPositiveY:ga.previousNegativeY;ha=Q(S(c(m.tooltext,d.plottooltext,g.plottooltext)));I&&(V=b._parseValues(r,V,l[r],ha),v=ga.value);fa=H.getAxisPosition(V||ba);m=F.getAxisPosition(r)+ia;0!==T?(J=H.getAxisPosition(v+(V||0)),G=Math.abs(fa-J)):(G=0,J=fa);J=Math.min(J,fa);0<G-ma&&0<ma&&(aa?I?(J+=la,W||V)?W&&(G=G-ma+1,V&&(J=J-ma+1)&&(G=G+ma-1)):G-=ma:(J+=la,G-=ma):W&&(J-=la));h.isCrisp?(M=R.crispBound(m,J,X,G,ma),m=M.x,
J=M.y,V=M.width,G=M.height):V=X;W=!1!==ga.toolText&&ga.toolText+(ha?"":ga.toolTipValue);ha=ga.plotBorderDashStyle;xa.eventArgs={index:r,link:oa,value:v,displayValue:La,categoryLabel:A[r].label,toolText:W?W:"",id:a,datasetIndex:n,datasetName:d.seriesname,visible:L};U||(qa=J,sa=G);v={x:qa,y:m,width:sa||1,height:V,r:ja,ishot:!O,fill:B(pa[0]),stroke:B(pa[1]),"stroke-width":z?ma:0,"stroke-dasharray":ha,"stroke-linejoin":sb,visibility:Ra};Z._xPos=J;Z._yPos=m;Z._height=V;Z._width=G;if(Z.graphics.element){Ca=
!0;Z=Z.graphics.element;v={x:J,y:m,height:V};if(!0===b.visible||0===T||I)v.width=G;Z.animateWith(P,N,v,U,t,wa&&Ga);Z.attr({ishot:!O,fill:B(pa[0]),stroke:B(pa[1]),"stroke-width":z?ma:0,"stroke-dasharray":ha,"stroke-linejoin":sb,visibility:Ra});ga.elemCreated=!1}else ta.element&&ta.element.length?(Z=Z.graphics.element=ta.element.shift(),Z.show()):Z=Z.graphics.element=E.rect(na),Z.attr(v),Z.animateWith(P,N,{x:J,width:G||1},U,t,wa&&Ja),ga.elemCreated=!0,wa=!1;Z.shadow(ga.shadow,va).data("BBox",M);if(oa||
O)G<C&&(J-=(C-G)/2,G=C),xa.attr={x:J,y:m,width:G,height:V,r:ja,cursor:oa?"pointer":a,stroke:p,"stroke-width":z?ma:0,fill:p,ishot:!0,visibility:L}}w.trackerDrawID.push(mb.addJob(b.drawTracker,b,[],k.priorityList.tracker));b.drawn?b.drawLabel():w.labelDrawID.push(mb.addJob(b.drawLabel,b,[],k.priorityList.label));b.drawn=!0;h.drawSumValueFlag&&Ca&&h.drawSumValueFlag&&h.drawSumValue();Ba&&b.remove()},drawLabel:function(){var b=this.chart,c=b.graphics,d=b.config,g=b.components.canvas.config,h=b.config.dataLabelStyle,
n=this.JSONData.data,q=b.config.categories,k=b.is3D,f=b.config.isstacked,l=q&&q.length,m=n.length,q=this.components.data,v=b.components.paper,r=b.linkedItems.smartLabel,p,t,B=g.yDepth,g=g.xDepth,w=b.components.numberFormatter,z=a,C,E=d.placevaluesinside,F=d.canvasWidth,H=d.canvasLeft,I,d=d.valuepadding+2,S,G,J,O=b.get(Va,Ea),b=O.duration,M=O.animType,L=O.dummyObj,O=O.animObj,Q=this.graphics.dataLabelContainer,N,P,X=this.components.pool||{};J=this.visible;c=c.datalabelsGroup;Q||(Q=this.graphics.dataLabelContainer=
v.group(Eb,c),J||Q.hide());J&&Q.show();r.setStyle(h);c=l<m?l:m;for(l=0;l<c;l++)if(p=q[l],void 0!==p&&(m=p.graphics))if(C=n[l],S=p._yPos,J=p._xPos,t=p.config,G=w.getCleanValue(C.value),C=0>e(G),I=p._height,p=p._width,N=f?rb:C?E?Ya:gb:E?gb:Ya,z=t.displayValue,P=m.label,t.showValue&&void 0!==z&&null!==z&&z!==a&&null!==G){t={text:z,fill:h.color,"text-bound":[h.backgroundColor,h.borderColor,h.borderThickness,h.borderPadding,h.borderRadius,h.borderDash],"line-height":h.lineHeight,visibility:Ra};z=r.getOriSize(z);
z=z.width;z+=d;P=d;S+=.5*I;I=J+(C?0:p);G=C?J-H:H+F-(J+p);f?(I+=.5*(C?p:-p),I=Ja(H+.5*z,I),I=Na(H+F-.5*z,I),I-=k?g:0,S+=k?B:0):E?p>=z?(I+=C?P:-P,k&&(S+=B,I-=g)):z<G?(I+=C?-P:P,N=C?gb:Ya,k&&C&&(I-=g)):(C?(I=J+p+Ja(z-J-p+H,0)-P,N=gb):(I=J-Ja(z-(H+F-J),0)+P,N=Ya),k&&(I-=g,S+=B)):G>=z?(I+=C?-P:P,k&&C&&(I-=g,S+=g)):(I+=C?P+z:-(P+z),k&&(I-=g,S+=B));if(I>H+F||I<H)I=H+4,N=Ya;t["text-anchor"]=N;(P=m.label||X.label&&X.label.shift())?P.show().animateWith(L,O,{x:I,y:S},b,M).attr(t):(t.x=I,t.y=S,m.label=v.text(t,
Q))}else P&&P.hide()},remove:function(){var b=this.components,a=b.removeDataArr,c=b.pool||(b.pool={element:[],hotElement:[],label:[]}),e=a.length,d,g=this.maxminFlag,q,k,f;for(f=0;f<e;f++)if(d=a[0],a.splice(0,1),d&&d.graphics){k=d.graphics;for(q in k)k[q].hide();d.graphics.element&&(c.element=c.element.concat(d.graphics.element));d.graphics.hotElement&&(c.hotElement=c.hotElement.concat(d.graphics.hotElement));d.graphics.label&&(c.label=c.label.concat(d.graphics.label))}b.pool=c;g&&this.setMaxMin()}},
"Column"]);FusionCharts.register("component",["dataset","Bar3D",{draw:function(){var b=this,d=b.JSONData,g=b.chart.jsonData.chart,l=b.config,h=b.groupManager,n=b.index,q=d.data,A=b.chart.config.categories,f,m,v,r,t=b.chart,z=t.getJobList(),w=t.config,E=t.components.paper,F=t.components.xAxis[0],H=t.components.yAxis[0];r=t.graphics.columnGroup;var I=w.isstacked,G,J,M=t.graphics,L=k.parseUnsafeString,S=k.getValidValue,Q=w.showtooltip,R=F.getAxisPosition(0),O=F.getAxisPosition(1),N=l.groupMaxWidth=Sa(O-
R),P=l.definedGroupPadding,X=w.plotspacepercent/200,ia=h.getDataSetPosition(b),l=h.stackSumValue[b.positionIndex],da=w.maxcolwidth,T=t.get(Va,Ea),R=T.animType,O=T.animObj,aa=T.dummyObj,T=T.duration,N=(1-.01*P)*N||Na(N*(1-2*X),1*da),N=e(ia.columnWidth,N/1),U,P=ia.xPosOffset||0,ia=ia.height,V,X=b.components.data,W,Z,ha,oa,ba,da=H.getLimit(),ga=da.max,la=da.min,da=H.getAxisBase(),qa=H.yBasePos=H.getAxisPosition(da),ja=0,sa=w.plotborderthickness,ma=b.graphics.container,wa=b.graphics.dataLabelContainer,
Ba=b.graphics.shadowContainer,ta=M.trackerGroup,Aa,ya,va,pa,xa=w.use3dlighting,M=!0,Ca=!1,Ga=b.visible,Ja=(b.components.removeDataArr||[]).length,za=b.components.pool||[],Oa=w.showplotborder,Ka,Ma=function(){var a,c;if(!1===b.visible&&(!1===b._conatinerHidden||void 0===b._conatinerHidden)){wa&&wa.hide();a=b.components.data;for(c=0;c<f;c++)a[c]&&a[c].graphics&&a[c].graphics.element&&a[c].graphics.element.attr("visibility",Xa),a[c]&&a[c].graphics&&a[c].graphics.hotElement&&a[c].graphics.hotElement.attr("visibility",
Xa);Ba.hide();b._conatinerHidden=!0}},Ua=function(){var a=b.components.data,c;for(c=0;c<f;c++)a[c]&&a[c].graphics&&a[c].graphics.element&&a[c].graphics.element.attr("fill",[B(a[c].config.colorArr[0]),!xa]);h.drawSumValueFlag&&h.drawSumValue()};ma||(ma=b.graphics.container=t.datasetLayers=t.datasetLayers||E.group(Ia,r));Ba||(Ba=b.graphics.shadowContainer=E.group(Pa,r).toBack());f=F.getCategoryLen();if(Ga)for(r=0;r<f;r++)X[r].graphics&&X[r].graphics.element&&X[r].graphics.element.attr("visibility",
Ra),X[r].graphics&&X[r].graphics.hotElement&&X[r].graphics.hotElement.attr("visibility",Ra);W=ma.negative=ma.negative||E.group(Ta,ma);ha=ma.column=ma.column||E.group(fa,ma);ba=ta.negative=ta.negative||E.group(Ta,ta);ta=ta.column=ta.column||E.group(fa,ta);0>la&&0<=ga?(r=ma.zeroPlane)?(r=[qa-5,t.config.canvasTop+5,1,t.config.canvasHeight,5,5,r],h.graphics.zeroplane.show(),h.graphics.zeroplane._.cubetop.show(),h.graphics.zeroplane._.cubeside.show(),h.graphics.zeroplane.animateWith(aa,O,{cubepath:r},
T,R),h.graphics.zeroplane.attr({fill:[w.zeroPlaneColor,!xa],stroke:w.zeroPlaneBorderColor||"none","stroke-width":w.zeroPlaneShowBorder?1:0})):(r=ma.zeroPlane=E.group(Ha,ma).insertBefore(ha),!h.graphics&&(h.graphics={}),h.graphics.zeroplane=E.cubepath(qa-5,t.config.canvasTop+5,1,t.config.canvasHeight,5,5,r).attr({fill:[w.zeroPlaneColor,!xa],stroke:w.zeroPlaneBorderColor||"none","stroke-width":w.zeroPlaneShowBorder?1:0})):h.graphics&&h.graphics.zeroplane&&h.graphics.zeroplane.hide()&&h.graphics.zeroplane._.cubetop.hide()&&
h.graphics.zeroplane._.cubeside.hide();(t=W.data(Fa))||(W.data(Fa,Array(f)),t=W.data(Fa));(ga=ha.data(Fa))||(ha.data(Fa,Array(f)),ga=ha.data(Fa));(ma=ba.data(Fa))||(ba.data(Fa,Array(f)),ma=ba.data(Fa));(la=ta.data(Fa))||(ta.data(Fa,Array(f)),la=ta.data(Fa));for(r=0;r<f;r+=1)t[r]=t[r]||E.group(W),ga[r]=ga[r]||E.group(ha),ma[r]=ma[r]||E.group(ba),la[r]=la[r]||E.group(ta);r=0;for(ya=f-1;r<f;r++,ya--)if(m=q&&q[r],W=X[r],Ka=W.trackerConfig={},Z=(ba=W&&W.config)&&ba.setValue,!W||void 0!==Z&&null!==Z||(W.graphics&&
W.graphics.element&&(W.graphics.element.hide(),W.graphics.element._.cubeside.hide(),W.graphics.element._.cubetop.hide()),W.graphics&&W.graphics.hotElement&&W.graphics.hotElement.hide()),void 0!==W&&void 0!==Z&&null!==Z){ha=ba.setLink;ta=ba.colorArr;W.graphics||(X[r].graphics={});oa=ba.displayValue;G=0<=Z?ba.previousPositiveY:ba.previousNegativeY;V=S(L(c(m.tooltext,d.plottooltext,g.plottooltext)));I&&(G=b._parseValues(r,G,l[r],V),Z=ba.value);U=H.getAxisPosition(G||da);m=F.getAxisPosition(r)+P;0!==
ia?(J=H.getAxisPosition(Z+(G||0)),G=Math.abs(U-J)):(G=0,J=U);J=Math.min(J,U);U=N;(Ka.isNegative=va=0>Z)?(v=t,Aa=ma):(v=ga,Aa=la);Ka.targetGroupTracker=Aa;V=!1!==ba.toolText&&ba.toolText+(V?"":ba.toolTipValue);Ka.eventArgs={index:r,link:ha,value:Z,displayValue:oa,categoryLabel:A[r].label,toolText:V?V:"",id:a,datasetIndex:n,datasetName:d.seriesname,visible:Ga};T||(qa=J,ja=G);oa=m;V=J;Aa=U;pa=G;m+=5;J-=5;W.graphics.element?(Ca=!0,Z=W.graphics.element,v[ya].appendChild(Z._.cubetop),v[ya].appendChild(Z._.cubeside),
v[ya].appendChild(Z),v={cubepath:[J,m,!0===b.visible||0===ia||I?G:Z.attrs.cubepath[2],U,5,5]},Z.animateWith(aa,O,v,T,R,M&&Ma),Z.attr({fill:[B(ta[0]),!xa],ishot:!0,stroke:Oa&&B(ta[1]),"stroke-width":Oa?w.plotborderthickness:0,"stroke-dasharray":ba.plotBorderDashStyle,cursor:ha?"pointer":a}),ba.elemCreated=!1):(za.element&&za.element.length?(Z=W.graphics.element=za.element.shift(),v[ya].appendChild(Z._.cubetop),v[ya].appendChild(Z._.cubeside),v[ya].appendChild(Z),Z.show()):Z=W.graphics.element=E.cubepath(v[ya]),
Z.attr({cubepath:[T?qa-5:J,m,T?0:ja,U,5,5],fill:[B(ta[0]),!xa],ishot:!0,stroke:Oa&&B(ta[1]),"stroke-width":Oa?w.plotborderthickness:0,"stroke-dasharray":ba.plotBorderDashStyle,cursor:ha?"pointer":a,visibility:Ga?Ra:Xa}),Z.animateWith(aa,O,{cubepath:[J,m,G,U,5,5]},T,R,M&&Ua),M=!1,W._newXPos=m,ba.elemCreated=!0);Z.shadow(ba.shadow,Ba).data("BBox",{height:U,width:ja,x:J,y:m});if(ha||Q)G<C&&(J-=(C-G)/2,G=C),Ka.attr={path:ab([J,m,G,U,5,5]),cursor:ha?"pointer":a,stroke:sa&&p||na,"stroke-width":Oa?w.plotborderthickness:
0,fill:p,ishot:!0};I&&!va||Z.toBack();W._xPos=V;W._yPos=oa;W._height=Aa;W._width=pa}z.trackerDrawID.push(mb.addJob(b.drawTracker,b,[],k.priorityList.tracker));b.drawn?b.drawLabel():z.labelDrawID.push(mb.addJob(b.drawLabel,b,[],k.priorityList.label));b.drawn=!0;h.drawSumValueFlag&&Ca&&h.drawSumValueFlag&&h.drawSumValue();Ja&&b.remove()},drawTracker:function(){var b=this.chart,a=this.components.data,c=b.config,e=c.isstacked,c=c.plothovereffect,d=b.components,g=d.paper,d=d.xAxis[0].getCategoryLen(),
q,k,f,l,m,r,v,p,t,B,w=this.components.pool||[],z=function(a){la.call(this,b,a)},C=function(a){return function(c){var f=this.getData();0!==f.showHoverEffect&&!0!==f.draged&&(a.attr(this.getData().setRolloverAttr),la.call(this,b,c,"DataPlotRollOver"))}},E=function(a){return function(c){var f=this.getData();0!==f.showHoverEffect&&!0!==f.draged&&(a.attr(this.getData().setRolloutAttr),la.call(this,b,c,"DataPlotRollOut"))}};l=0;for(f=d-1;l<d;l++,f--)if(m=a[l],void 0!==m&&(k=m&&m.config,q=m.trackerConfig,
r=m.graphics)){r=m.graphics.element;B=q.targetGroupTracker;if(t=q.attr)m.graphics.hotElement?(p=m.graphics.hotElement,B[f].appendChild(p),p.attr(t),v=!1):(w.hotElement&&w.hotElement.length?(p=m.graphics.hotElement=w.hotElement.shift(),B[f].appendChild(p),p.show()):(p=m.graphics.hotElement=g.path(B[f]),v=!0),p.attr(t));p=m.graphics.hotElement;(p||r).data("eventArgs",q.eventArgs).data(za,c).data(Oa,k.setRolloverAttr||{}).data(wa,k.setRolloutAttr||{}).tooltip(q.eventArgs&&q.eventArgs.toolText);(v||k.elemCreated)&&
(p||r).click(z).hover(C(r),E(r));(!e||q.isNegative)&&p&&p.toBack()}},remove:function(){var b=this,a=b.components,c=a.removeDataArr,e=a.pool||(a.pool={element:[],hotElement:[],label:[]}),d=c.length,g=b.config.groupMaxWidth,q,k=b.maxminFlag,f,l,m;(function(){return!1===b.endPosition?function(){return{x:q._xPos-g*d}}:!0===b.endPosition?function(){return{x:q._xPos+g*d||0}}:function(){return{width:0}}})();for(m=0;m<d;m++)if(q=c[0],c.splice(0,1),q&&q.graphics){l=q.graphics;for(f in l)l[f].hide();q.graphics.element&&
(e.element=e.element.concat(q.graphics.element));q.graphics.hotElement&&(e.hotElement=e.hotElement.concat(q.graphics.hotElement));q.graphics.label&&(e.label=e.label.concat(q.graphics.label))}a.pool=e;k&&b.setMaxMin()}},"Bar2D"]);FusionCharts.register("component",["datasetGroup","Column",{init:function(){this.positionStackArr=[];this.stackSumValue=[];this.stackConfig=[];this.drawSumValueFlag=!0},addDataSet:function(b,a,c){var e=this.positionStackArr[a];b.groupManager=this;b.positionIndex=a;b.stackIndex=
c;e||(e=this.positionStackArr[a]=[]);e[c]={dataSet:b}},removeDataSet:function(b,a,c){var e=this.positionStackArr[b];e&&e[a]&&e.splice(a,c);0===e.length&&this.positionStackArr.splice(b,1)},draw:function(){var b=this.positionStackArr,a=b.length,c,e,d,g,q=this.chart;c=q.config.viewPortConfig.scaleX||1;e=q.graphics.columnGroup;g=q.graphics;d=q.components.canvas.config.clip["clip-canvas"].slice(0);g=g.datalabelsGroup;var k=q.get("config","animationObj"),q=k.animType,f=k.animObj,l=k.dummyObj,m=d[2],k=k.duration;
d[2]*=c;e.attrs["clip-rect"]||e.attr({"clip-rect":d});g.attrs["clip-rect"]||g.attr({"clip-rect":[d[0],0,m,d[3]+d[1]]});e.animateWith(l,f,{"clip-rect":d},k,q);g.animateWith(l,f,{"clip-rect":[d[0],0,m,d[3]+d[1]]},k,q);this.preDrawCalculate();this.drawSumValueFlag=!0;for(c=0;c<a;c++)for(e=b[c],d=e.length,this.manageClip=!0,e=0;e<d;e++)g=b[c][e].dataSet,g.draw()},getDataSetPosition:function(b){var a=this.numVisiblePositions,c=this.stackConfig[b.positionIndex||0];b=b.visible;var e;if(c){if(!b&&c.visible||
0===a)e=0;return{xPosOffset:c.xPosOffset,columnWidth:c.columnWidth,height:e}}},preDrawCalculate:function(){var b=this.chart,a=b.config.transposeAxis,c=this.stackConfig,d=this.stackSumValue,h=this.positionStackArr,g=this.sumValues=[],q=this.dataLimits=[],k=!1,f=b.config.isstacked,l=h.length,m,r,v,p,t,B,w,z,C,E,H,F,I,G,J,R,O,M=b.isBar,L=b.jsonData.chart,Q=b.components.xAxis[0],N=e(M?L.overlapbars:L.overlapcolumns,b.is3D?0:1),P=Q.getAxisPosition(0),X=Q.getAxisPosition(1),T=Sa(X-P),U=Ja(e(L.plotspacepercent),
0),V=e(L.plotpaddingpercent),P=Ja(e(L.plotspacepercent,20)%100,0),aa=P/200,Z,X=!0,W,ha,ba;for(w=this.numVisiblePositions=0;w<l;w++){z=h[w].length;R=c[w]||(c[w]={});R.visible=!1;R.previousVisibleCount=this.numVisiblePositions;ha=[];for(O=0;O<z;O++)if(ba=Infinity,p=h[w][O],W=p.dataSet.yAxis,p&&!1!==p.dataSet.visible&&(R.visible=!0),f){B=h[w][O+1];C=O;for(k=!1;0<=C&&!k;)k=(m=h[w][--C])&&m.dataSet.visible;t=p&&p.dataSet.components.data;J=B&&B.dataSet.components.data;E=p.dataSet.components.data;H=m&&m.dataSet.components.data;
E||(E=p.dataSet.components.data=[]);F=t&&t.length;for(B=0;B<F;B++){(I=E[B])||(I=E[B]={config:{}});G=H&&H[B];if(!G)for(;0<=C&&!G;)if(k=(m=h[w][--C])&&m.dataSet.visible)G=(H=m&&m.dataSet.components.data)&&H[B];I=I.config;I.value=k=W.getCleanValue(t[B].config.setValue);v=(G=G&&G.config)&&G.value;!ha[B]&&(ha[B]=(v||0===v)&&!0);r=(G&&G.previousPositiveY||0)+(G&&(0<v?v:0)||0);v=(G&&G.previousNegativeY||0)+(G&&(0>v?v:0)||0);I.previousPositiveY=r;I.previousNegativeY=v;ba=Na(ba,(v||r)+I.setValue);J&&J[B]&&
J[B].config.setValue||(d[w]||(d[w]=[],d[w].parentYAxis=p.dataSet.config.parentYAxis),d[w][B]=r+(p.dataSet.visible&&Sa(k))+Sa(v),!d[w][B]&&(d[w][B]=1),g&&(g[w]||(g[w]=[]),g[w][B]=g[w][B]||{},null!==k&&(I=p.dataSet.visible,g[w][B].visible=ha[B]||I&&!0,g[w][B].positive=r+(0<=k?I&&k:0),g[w][B].negative=v+(0>k?I&&k:0))))}B=h[w][O+1];C=O;if(!a)for(m=h[w][O-1],t=p&&p.dataSet.components.data,J=B&&B.dataSet.components.data,E=p.dataSet.components.data,H=m&&m.dataSet.components.data,F=t&&t.length,B=0;B<F;B++){I=
E[B];G=H&&H[B];if(!G)for(;0<=C&&!G;)G=(H=(m=h[w][--C])&&m.dataSet.components.data)&&H[B];I=I.config;I.value=k=W.getCleanValue(t[B].config.setValue);G=G&&G.config;ba=Na(ba,(v||r)+I.setValue);Z=(G&&G.previousPositiveDataLimit||0)+(G&&(0<G.value?G.value:0)||0);G=(G&&G.previousNegativeDataLimit||0)+(G&&(0>G.value?G.value:0)||0);I.previousPositiveDataLimit=Z;I.previousNegativeDataLimit=G;J&&J[B]&&J[B].config.setValue||!q||(q[w]||(q[w]=[],q[w].parentYAxis=p.dataSet.config.parentYAxis),q[w][B]=q[w][B]||
{},null!==k&&(q[w][B].positive=Z+(0<=k?k:0),q[w][B].negative=G+(0>k?k:0)))}ba&&(p.dataSet.config.minValue=ba)}R.visible&&(this.numVisiblePositions+=1)}a&&(this.dataLimits=this.sumValues);a=this.numVisiblePositions;w=Sa(e(M?L.maxbarheight:L.maxcolwidth,b.maxColWidth||50));b=(1-.01*U)*T||Na(T*(1-2*aa),w*(a||1));M=b/2;L=0===a?b:b/a;N=Na(L-1,1<a?N||void 0!==V?0<V?L*V/100:0:4:0);for(w=0;w<l;w++)c=this.stackConfig[w],V=c.previousVisibleCount,c.xPosOffset=V*L-M+N/2,L-=N,c.columnWidth=c.visible||0===a?L:
0,L+=N;l=Q.getAxisPosition(0)-M;4>Q.getAxisPosition(1)-M-(l+b)&&(X=!1);"0"==P&&(X=!0);this.isCrisp=X},getMaxSumValueSpace:function(){var b=this.stackSumValue,a=this.chart,c={},e=b.length,d=a.components.numberFormatter,g,q=0,k=0,f,l,m,r=a.linkedItems.smartLabel;f=a.config.dataLabelStyle;r.useEllipsesOnOverflow(a.config.useEllipsesWhenOverflow);r.setStyle(f);for(a=0;a<e;a++)for(f=b[a],m=f.length,l=0;l<m;l++)c=f[l],c=d.dataLabels(c),c=r.getOriSize(c),g=c.width,c=c.height,k=Ja(k,g),q=Ja(q,c);return{maxWidth:k,
maxHeight:q}},drawSumValue:function(){var b=this.chart,a=b.components,c=a.paper,d=this.positionStackArr,h=this.stackConfig,g=b.linkedItems.smartLabel,q,k=b.config.rotatevalues?270:0,a=a.xAxis[0],f,l=b.config.isstacked,m,r=b.config.dataLabelStyle,v,p,t,B,w,z,C,E,H,F,I=this.sumValuesDrawn,G,J,R,O,M=a.getPVR(),L,Q=this.pool,N=!1,P=!1,X=b.get("config","animationObj"),T=X.duration,U=X.dummyObj,V=X.animObj,X=X.animType,aa=b.config.stack100percent,Z;t=e(b.jsonData.chart.showsum,b.showsum,0);var W=1,ha=!1,
ba=this.sumValues,ga=b.config.canvasTop,oa=b.components.canvas.config.clip["clip-canvas"].slice(0),qa,fa=b.graphics.sumLabelsLayer;oa[1]=0;oa[3]+=ga;this.drawSumValueFlag=!1;if(l)if(t){fa.css(r);g.setStyle(r);fa.show();!this.graphics&&(this.graphics={});q=this.graphics.sumLabels;l=this.graphics.sumLabelContainer;q||(q=this.graphics.sumLabels=[]);l||(l=this.graphics.sumLabelContainer=[]);ha=q.length;t=ba.length;if(ha>t)for(;t<ha;t++){ga=q[t].length;for(B=0;B<ga;B++)f=q[t][B]||{},(F=f.element)&&F.hide();
(ga=l[t])&&ga.hide();q.pop();l.pop()}ga=d.length;for(t=0;t<ga;t++){(q=l[t])||(q=l[t]=this.graphics.sumLabelContainer[t]||c.group("sumlabels",fa));b.isRealTime&&q.attr({"clip-rect":oa});B=d[t][0].dataSet;f=B.yAxis;m=ba[t];z=a.getCategoryLen();w=this.graphics.sumLabels[t]=this.graphics.sumLabels[t]||[];H=0;h[t].visible||(P=!0);Z=h[t].xPosOffset;L=h[t].columnWidth;R=a.getPixel(z-1)+Z;G=B.addDataArr&&B.addDataArr.length;N=B.startPosition;J=this.removedSumLabels&&this.removedSumLabels[t]&&this.removedSumLabels[t].length;
for(B=0;B<z;B++,H++)if(ha=!1,q.show(),C=m[B]||{},F=C.positive,E=C.negative,!w[H]&&(w[H]={}),void 0!==F||void 0!==E)if(p=F+E,p=f.dataLabels(p),O=Sa(E)>F?E:F,F=w[H].element,!C.visible)F&&F.hide();else if(p||""===p)C=r.backgroundColor,E=r.borderColor,qa=g.getOriSize(p),v=this.getSumValueConfig({xValue:B,columnWidth:L,sumValue:O,xPosOffset:Z,stack100percent:aa,yAxis:f}),O=this.getSumValuePosition(qa,{stack100percent:aa,rotateValues:k,xPos:v.xPos,yPos:v.yPos,sumValue:O}),v=O.x,p={text:p,fill:r.color,"text-bound":[C,
E,r.borderThickness,r.borderPadding,r.borderRadius,r.borderDash],"line-height":r.lineHeight,visibility:Ra},O.transform=c.getSuggestiveRotation(k,v,O.y),F||(Q&&Q.sumLabels[t]&&Q.sumLabels[t][0]?(w[H].element=F=Q.sumLabels[t][0],Q.sumLabels[t].shift()):(p.x=v,p.y=O.y,p.transform=O.transform,O["text-anchor"]&&(p["text-anchor"]=O["text-anchor"]),w[H].element=F=c.text(p,q),ha=!0),I&&T&&(C=N,C=!0===C?NaN-M*(G-t):!1===C?R+M*W++:v,F.attr({x:C,y:O.y,transform:c.getSuggestiveRotation(k,C,O.y)}))),ha||(F.show().animateWith(U,
V,O,T,X),F.attr(p));J&&this.removeGraphics(t);P&&(q.hide(),P=!1)}}else fa.hide();this.sumValuesDrawn=!0},getSumValueConfig:function(b){var a=this.chart,c=b.columnWidth,e=b.yAxis,d=a.config.viewPortConfig,g=d.x,q=d.scaleX,d=b.stack100percent,k=b.sumValue,f=b.xPosOffset;b=a.components.xAxis[0].getAxisPosition(b.xValue)+f+g*q;e=e.getAxisPosition(d?100:k);return{xPos:b+.5*c,yPos:e}},getSumValuePosition:function(b,a){var c=this.chart,e=c.config,d=e.canvasBottom,g=e.canvasTop,q=c.is3D,k=a.stack100percent,
f=e.yDepth,e=e.xDepth,l=a.yPos,m,r=a.xPos,v=c.components.canvas.config.canvasBorderWidth,p=a.sumValue;m=c=a.rotateValues?b.width:b.height;m=m/2+2;k?l=g<=c?m:g-m-v:(0<=p&&(g=l-g,l=g<c?l+m-g:l-m),0>p&&(l=d-l<c?l-m:l+m,q&&(r-=e,l+=f)));return{x:r,y:l}},removeGraphics:function(b){var a=this.removedSumLabels||[],c=this.positionStackArr[b][0].dataSet,e=c.endPosition,d=c.config.rotateValues,g=this.chart,c=(g.config.realTimeConfig||{}).clear,q=g.components.paper,k=a[b]&&a[b].length||0,f=g.components.xAxis[0],
l=this.pool||(this.pool={sumLabels:[]}),m=f.getPVR(),r=g.get("config","animationObj"),v,g=function(){this.hide()},f=r.dummyObj,p=r.animObj,t=r.transposeAnimDuration,B=r.animType,w;w=function(){return!1===e?function(b){var a=b.attr("x")-m*k;b=b.attr("y");return{x:a,transform:q.getSuggestiveRotation(d,a,b)}}:function(b){var a=b.attr("x")+m*k||0;b=b.attr("y");return{x:a,transform:q.getSuggestiveRotation(d,a,b)}}}();l.sumLabels||(l.sumLabels=[]);for(r=0;r<k;r++)v=a[b][0]&&a[b][0].element,a[b].splice(0,
1),v&&(void 0===e||c?v&&v.hide().attr({"text-bound":[]}):t?v.animateWith(f,p,w(v),t,B,g):(v.stop(),v.hide()),l.sumLabels[b]||(l.sumLabels[b]=[]),l.sumLabels[b]=l.sumLabels[b].concat(v))},removeSumLabels:function(b,a,c){var e=this.chart,d=(this.graphics||{}).sumLabels||[],g;if(d.length){this.removedSumLabels||(this.removedSumLabels=[]);this.removedSumLabels[c]||(this.removedSumLabels[c]=[]);if(!this.removedSumLabels[c].length||!e.config._sumValuesUpdated||e.config._dataUpdated){for(g=b;g<b+a;g++)d[c].push({});
this.removedSumLabels[c]=this.removedSumLabels[c].concat(d[c].splice(b,a))}e.config._sumValuesUpdated=!0}},getDataLimits:function(){var b=this.chart,a=this.positionStackArr,c,e,d,g,q,k=-Infinity,f=Infinity,l,m,r;c=b.config.isstacked;var b=b.config.transposeAxis,v=-Infinity,p=Infinity;d=q=Infinity;var t;this.preDrawCalculate();g=this.dataLimits;if(c){c=0;for(m=g.length;c<m;c++)for(l=g[c].length,t=g[c].parentYAxis,e=0;e<l;e++)r=g[c][e],void 0!==r.positive&&void 0!==r.negative&&(1===t?(k=Ja(k,r.positive),
f=Na(f,r.negative),d=Na(d,k)):(v=Ja(v,r.positive),p=Na(p,r.negative),q=Na(q,v)));0===p&&(p=q);0===f&&(f=d)}g=a.length;for(c=0;c<g;c++)for(e=a[c],q=e.length,e=0;e<q;e++)d=a[c][e].dataSet,!1===d.visible&&b||(d=d.config,1===d.parentYAxis?(k=Ja(k,d.maxValue),f=Na(f,d.minValue)):(v=Ja(v,d.maxValue),p=Na(p,d.minValue)));this.maxValue=v;this.minValue=p;return{max:v,min:p,sYMax:k,sYMin:f}},manageSpace:function(){var b=this.positionStackArr,a,c,e,d,g=b.length,q={paddingLeft:-Infinity,paddingRight:-Infinity};
for(a=0;a<g;a++)for(e=b[a].length,d=0;d<e;d++)c=b[a][d].dataSet,c=c.manageSpace&&c.manageSpace()||{},q.paddingLeft=Ja(c.paddingLeft,q.paddingLeft),q.paddingRight=Ja(c.paddingRight,q.paddingRight);return q}}]);FusionCharts.register("component",["datasetGroup","realtimecolumn",{},"Column"]);FusionCharts.register("component",["datasetGroup","Waterfall2D",{},"column"]);FusionCharts.register("component",["datasetGroup","Column3d",{},"column"]);FusionCharts.register("component",["datasetGroup","bar2d",
{getSumValueConfig:function(b){var a=this.chart,c=b.columnWidth,e=b.yAxis,d=a.config.viewPortConfig,g=d.x,q=d.scaleX,d=b.stack100percent,k=b.sumValue,f=b.xPosOffset;b=a.components.xAxis[0].getAxisPosition(b.xValue)+f+g*q;e=e.getAxisPosition(d?100:k);return{xPos:e,yPos:b+.5*c}},getSumValuePosition:function(b,a){var c=this.chart,e=c.config,d=e.canvasLeft,g=e.canvasWidth,q=c.is3D,k=a.stack100percent,f=e.yDepth,e=e.xDepth,l,m={},r=a.sumValue,v=a.xPos,p=a.yPos,t=c.components.canvas.config.canvasBorderWidth,
c=l=a.rotateValues?b.height:b.width,c=c/2+2;k?(v+=t,m["text-anchor"]=Ya):(0<=r?(d=d+g-v,d<l?(v=v-c+d,q&&(v-=e,p+=f)):v+=c):(d=v-d,d<l?(v=v+c-d-(q?e:0),p+=q?f:0):(v-=c,q&&(v-=e,p+=f))),m["text-anchor"]=rb);m.x=v;m.y=p;return m}},"column"]);FusionCharts.register("component",["datasetGroup","bar3d",{},"bar2d"]);FusionCharts.register("component",["datasetGroup","scrollcolumn2d",{},"column"]);FusionCharts.register("component",["datasetGroup","Area",{draw:function(){var b=this.chart,a=b.graphics,c=this.positionStackArr,
d,h=c.length;d=a.areaGroup;var a=a.columnGroup,g=b.components.paper,b=e(b.jsonData.chart.areaovercolumns,1);d.area=d.area||g.group("area",d);d.areaConnector=d.areaConnector||g.group("area-connector",d);d.shadows||(d.shadows=g.group("shadow",d).toBack());b?a&&d.insertAfter(a):d.toBack();this.preDrawCalculate();for(d=0;d<h;d++)for(b=c[d],b=b.length,a=0;a<b;a++)g=c[d][a].dataSet,g.draw();this.drawn=!0}},"column"]);FusionCharts.register("component",["datasetGroup","scrollarea2d",{},"Area"]);FusionCharts.register("component",
["dataset","area",{type:"area",_parseShadowOptions:function(){var b=this.chart,a=this.config,c=b.jsonData.chart,b=e(b.defaultPlotShadow,b.components.colorManager.getColor("showShadow"));return{opacity:e(c.showshadow,b)?a.alpha/100:0}},configure:function(){var b=this.chart,a=b.components,d=b.config,g=this.config,h=this.JSONData,n=b.jsonData.chart,q=b.singleseries,l=a.colorManager,f=e(this.index,this.stackIndex),m=e(h.showplotborder,n.showplotborder||1),f=!q||Ba(n.palettecolors)?l.getPlotColor(f):l.getColor("plotFillColor").split(/\s*\,\s*/)[0],
v,p=d.isdual,t=d.haslineset;this.__setDefaultConfig();r(h,g,b.config,{data:!0});g.plotColor=f;g.parentYAxis=p?t?v=1:v="s"===c(h.parentyaxis&&h.parentyaxis.toLowerCase(),"p")?1:0:v=0;this.yAxis=a.yAxis[v];g.valueposition=g.valueposition.toLowerCase();g.plotfillcolor=c(h.color,n.plotfillcolor,f);g.plotgradientcolor=0!==d.useplotgradientcolor?k.getDefinedColor(n.plotgradientcolor,l.getColor("plotGradientColor")):"";g.plotfillalpha=c(h.alpha,d.plotfillalpha);g.fillColor={color:g.plotfillcolor+(g.plotgradientcolor?
","+g.plotgradientcolor:""),alpha:g.plotfillalpha,angle:g.plotfillangle};g.plotborderalpha=m?c(h.plotborderalpha,n.plotborderalpha,h.alpha,n.plotfillalpha,"95"):0;g.plotbordercolor=c(h.plotbordercolor,n.plotbordercolor,n.areabordercolor,q?Ba(n.palettecolors)?l.getPlotColor(0):l.getColor("plotBorderColor").split(/\s*\,\s*/)[0]:"666666");g.plotborderdashstyle=g.dashed?k.getDashStyle(g.plotborderdashlen,g.plotborderdashgap,g.plotborderthickness):"none";g.linecolor=c(h.color,n.linecolor,g.plotColor);
g.legendSymbolColor="line"===this.type?g.linecolor:g.plotfillcolor;a=k.getDashStyle(g.linedashlen,g.linedashgap,g.linethickness);g.lineDashStyle=g.dashed?a:"none";g.shadow=this._parseShadowOptions();g.drawanchors=e(h.drawanchors,h.showanchors,n.drawanchors,n.showanchors);g.anchorbgcolor=c(h.anchorbgcolor,d.anchorbgcolor,l.getColor("anchorBgColor"));g.anchorbordercolor=c(h.anchorbordercolor,d.anchorbordercolor,g.linecolor,g.plotColor);this.components.data=this.components.data||(this.components.data=
[]);this.visible=1===e(h.visible,!Number(h.initiallyhidden),1);this._setConfigure();this._realTimeConfigure&&this._realTimeConfigure();!1!==b.hasLegend&&this._addLegend()},_setConfigure:function(b,a){var d=this.chart,g=k.parseUnsafeString,h=this.config,n=d.config,q=this.JSONData,l=d.jsonData.chart,f=b||q.data||[],m,r=d.components.xAxis[0],v=b?b.data.length:r.getCategoryLen(),p,t,B,w,z,C,E=-Infinity,F=Infinity,H=g(n.yaxisname),I=g(n.xaxisname),G=this.yAxis,J=n.tooltipsepchar,M=n.linedashed,R;h.imageCount=
0;p=this.components.data;p||(p=this.components.data=[]);for(B=0;B<v;B++)b?(d=b&&b.data[B]||{},R=void 0!==a?a+B:p.length-v+B,m=p[R]):(m=p[B],d=f&&f[B]||{}),t=m&&m.config,m||(m=p[B]={}),m.config||(t=p[B].config={}),m.graphics||(m.graphics={}),z=e(R-v,B),t.setValue=w=G.getCleanValue(d.value,h.stack100percent),t.setLink=c(d.link),t.anchorProps=this._parseAnchorProperties(z),z=r.getLabel(z),t.label=Ba(g(z.tooltext||z.label)),t.showValue=e(d.showvalue,h.showvalues),t.dashed=e(d.dashed,M),t.dashStyle=t.dashed?
k.getDashStyle(h.linedashlen,h.linedashgap,h.linethickness):"none",t.color=c(d.color,h.linecolor),t.setColor=d.color,t.setAlpha=d.alpha,t.setDashed=d.dashed,t.alpha=c(d.alpha,d.linealpha,h.linealpha),null!==w&&(E=Ja(E,w),F=Na(F,w)),t.setTooltext=g(d.toolText),t.toolTipValue=w=G.dataLabels(w),t.setDisplayValue=z=g(d.displayvalue),t.displayValue=c(z,w),t.formatedVal=z=t.toolTipValue,t.setTooltext=k.getValidValue(g(c(d.tooltext,q.plottooltext,l.plottooltext))),t.valuePosition=c(d.valueposition,h.valueposition),
t.valuePosition&&(t.valuePosition=t.valuePosition.toLowerCase()),n.showtooltip?null===z?w=!1:void 0!==t.setTooltext?(w=[1,2,3,4,5,6,7],z={yaxisName:H,xaxisName:I,formattedValue:z,label:t.label},w=k.parseTooltext(t.setTooltext,w,z,d,l,q)):(n.seriesnameintooltip&&(C=k.getFirstValue(q&&q.seriesname)),w=C?C+J:"",w+=t.label?t.label+J:""):w=!1,t.toolText=w,t.setLevelTooltext=t.setTooltext,t.setTooltext=w,t.hoverEffects=this._parseHoverEffectOptions(m,d),t.anchorProps.isAnchorHoverRadius=t.hoverEffects.anchorRadius;
h.maxValue=E;h.minValue=F;this.ErrorValueConfigure&&this.ErrorValueConfigure()},init:function(b){this.JSONData=b;this.components={};this.graphics={};this.configure()},draw:function(){var b=this,a=b.chart,e=a.jsonData,d=a.graphics,h=a.config,g=a.getJobList(),q=a.components,l=b.JSONData,f=e.chart,r=b.config,v=a.config.isstacked,p=b.groupManager.stackSumValue[0],t=b.stackIndex,w,E,F=q.paper,H=q.xAxis[0],I=b.yAxis,G,J,M,L=h.showtooltip,Q,S=b.components.data,N=b.components.removeDataArr||[],R=N.length,
O,P,X,T,ia,da,aa,W,U=d.areaGroup,V=I.getAxisBase(),ha,Z,ba=r.plotbordercolor,oa=r.plotborderalpha,fa=r.plotborderdashstyle,ga=r.plotborderthickness,la=b.graphics.container,qa=b.graphics.trackerContainer,ja=d.trackerGroup,sa,ma=k.parseUnsafeString,na=r.fillColor,ta=a.is3D,xa=function(){!1!==b.visible||!1!==b._conatinerHidden&&void 0!==b._conatinerHidden||(la.areaGroup.hide(),Ca.hide(),la.anchorShadowGroup.hide(),la.anchorGroup.hide(),qa.hide(),Ka&&Ka.hide(),b._conatinerHidden=!0)},Aa=function(){!1!==
b.visible&&(la.anchorShadowGroup.show(),la.anchorGroup.show(),Ka.show(),Ca.show());U.area.attr({"clip-rect":null});U.area.node&&U.area.node.removeAttribute("clip-path");a._animCallBack()},ya=r.shadow,va,pa=b.visible,Ea,Ca=b.graphics.shadowContainer,Fa,za={},Ia=d.datalabelsGroup,Ka=b.graphics.dataLabelContainer,Ha=H.getPVR(),Na,Ma=ta?10:0,Ra,Sa=ta?10:0,Ua=a.components.scrollBar,Ta=a.components.canvas.config.clip,Pa=m([],Ta["clip-canvas"]),Va=m([],Ta["clip-canvas-init"]),Ya=h.height,ab=!h.drawfullareaborder,
Za=b.graphics.connector,cb=b.components.pool||(b.components.pool={}),gb=0,fb=!0!==b.drawn,ib,lb,jb,hb=b.startPosition,kb={},ob={},qb=a.get("config","animationObj")||{},bb=qb.duration,tb=qb.dummyObj,rb=qb.animObj,pb=qb.animType,vb=r.lastPath||{},yb,xb=!0,zb,sb,Bb,Cb,Eb,Nb=a.config.viewPortConfig,Ib=Nb.x,Jb=Nb.scaleX,Hb,Wb,Xb,$b,Yb,bc=b.chart.config.realTimeConfig&&b.chart.config.realTimeConfig.clear,Ub=0,ac=!fb&&bb,Qb=0,Rb;r.imagesLoaded=0;b.noOfNewDataAtEnd=0;la||(la=b.graphics.container={anchorShadowGroup:F.group("anchor-shadow",
U.areaConnector),areaGroup:F.group("area",U.area),anchorGroup:F.group("anchors",U.areaConnector)},pa||(la.anchorShadowGroup.hide(),la.areaGroup.hide(),la.anchorGroup.hide()));Ca||(Ca=b.graphics.shadowContainer=F.group("shadows",U.shadows),pa||Ca.hide());qa||(qa=b.graphics.trackerContainer=F.group("area-hot",ja));Ka||(Ka=b.graphics.dataLabelContainer=b.graphics.dataLabelContainer||F.group("datalabel",Ia),pa||Ka.hide());pa&&(la.anchorShadowGroup.show(),la.areaGroup.show(),la.anchorGroup.show(),Ca.show(),
Ka.show(),qa.show(),b._conatinerHidden=!1);r.groupMaxWidth=H.getAxisPosition(1)-H.getAxisPosition(0);w=H.getCategoryLen();Na=Ha*w;if(bc)for(E=0,w=N.length;E<w;E++)b._removeDataVisuals(N.shift());else b._shiftOffRemovedPoints();kb=r.removePath;a.isRealTime&&(Pa[1]=0,Pa[3]=Ya,la.areaGroup.attr({"clip-rect":Pa}),Ka.attr({"clip-rect":Pa}),la.anchorGroup.attr({"clip-rect":Pa}),la.anchorShadowGroup.attr({"clip-rect":Pa}),Ca.attr({"clip-rect":Pa}));for(E=0;E<w;E++)Q=(O=S[E])&&O.config,O&&void 0!==Q.setValue&&
(O.graphics||(O.graphics={}),ib=H.getLabel(E).label,ia=Q.setValue,T=Q.setLink,za=Q.anchorProps||{},Fa=za.shadow,G=Ba(ma(c(Q.setLevelTooltext,l.plottooltext,f.plottooltext))),Q&&(ha=0<=ia?Q.previousPositiveY:Q.previousNegativeY),v&&ia&&(ha=b._parseValues(E,ha,p[E],G),ia=Q.value),X=O.graphics.element,Hb=O.graphics.image,null!==ia?(Z=I.getAxisPosition(ha||V)+Sa,M=b.visible?I.getAxisPosition(ia+(ha||0))+Sa:Z,J=H.getAxisPosition(E)-Ma+Ib*Jb,J=Ga(J,ga,ga).position,M=Ga(M,ga,ga).position,Wb=za.symbol,Xb=
za.radius,$b=za.startAngle,zb=za.bgColor,Eb=za.bgAlpha,sb=za.borderColor,Cb=za.borderAlpha,Bb=za.borderThickness,va=Q.hoverEffects,P=L?Q.toolText+(G?"":Q.toolTipValue):"",Q.finalTooltext=P,da=Q.eventArgs=Q.eventArgs||{},da.index=E,da.link=T,da.value=ia,da.displayValue=Q.displayValue,da.categoryLabel=ib,da.toolText=P,da.id=b.userID,da.datasetIndex=t||0,da.datasetName=l.seriesname,da.visible=pa,va.enabled&&(Q.setRolloverAttr={polypath:[va.anchorSides||2,J,M,va.anchorRadius,va.startAngle,va.dip],fill:B({color:va.anchorColor,
alpha:va.anchorBgAlpha}),stroke:B({color:va.anchorBorderColor,alpha:va.anchorBorderAlpha}),"stroke-width":va.anchorBorderThickness},Q.setRolloutAttr={polypath:[za.symbol[1]||2,J,M,za.radius,za.startAngle,0],fill:B({color:za.bgColor,alpha:za.bgAlpha}),stroke:B({color:za.borderColor,alpha:za.borderAlpha}),"stroke-width":za.borderThickness},W=Q.setRolloverAttr,aa=Q.setRolloutAttr),Yb={polypath:[Wb[1]||2,J,M,Xb,$b,0]},!X&&ac&&!0!==hb&&(jb=w+gb,lb=H.getPixel(jb),O._baseXPos=O._xPos=lb,O._yPos=M,O._baseYPos=
Z,vb=this.getLinePath([O],vb),gb++),za.imageUrl?(Q.anchorImageLoaded=!1,Ea=new z,Ea.onload=b._onAnchorImageLoad(b,E,da,J,M,O),Ea.onerror=b._onErrorSetter(b,E),Ea.src=za.imageUrl,Ub++):(Hb&&Hb.hide(),X||(cb.element&&cb.element.length?X=O.graphics.element=cb.element.shift():(X=O.graphics.element=F.polypath(la.anchorGroup),X.attr(Yb)),ac&&X.attr({polypath:[za.symbol[1]||2,lb,M,za.radius,za.startAngle,0]})),X.show().attr({transform:""}).animateWith(tb,rb,Yb,bb,pb,xb&&xa),X.attr({fill:B({color:zb,alpha:Eb}),
stroke:B({color:sb,alpha:Cb}),"stroke-width":Bb,visibility:Xb?pa:Xa}).shadow(Fa,la.anchorShadowGroup),xb=!1,Hb&&Hb.hide(),va.enabled&&X&&X.data("anchorRadius",za.radius).data("anchorHoverRadius",va.anchorRadius).data(Oa,W).data(wa,aa),Rb=Q.trackerConfig||(Q.trackerConfig={}),Rb.trackerRadius=Ja(za.radius,va&&!v&&va.anchorRadius||0,C)+za.borderThickness/2)):(X&&X.hide(),Hb&&Hb.hide()),O._xPos=J,O._yPos=M,O._baseXPos=J,O._baseYPos=Z,Qb++);r.noOfImages=Ub;r.totalImages=Ub;0===Ub&&(g.trackerDrawID.push(mb.addJob(b.drawTracker,
b,[],k.priorityList.tracker)),!0===b.drawn?b.drawLabel():g.labelDrawID.push(mb.addJob(b.drawLabel,b,[],k.priorityList.label)));ob=this.getLinePath(S,{});R&&a.isRealTime?(kb=this.getLinePath(S,kb),yb=kb.getPathArr()):yb=ob.getPathArr();r.lastPath=ob;Ua&&(Ra=Ua.conf.startPercent,Pa[2]=Na+Va[0],1===Ra&&(Va[0]=Pa[2],Pa[0]=0));Pa[3]+=Sa;(sa=b.graphics.lineElement)?bb&&a.isRealTime&&sa.attr({path:vb.getPathArr()}):(sa=b.graphics.lineElement=F.path(la.areaGroup),sa.attr({path:ob.getPathArr()}),bb&&pa&&(la.anchorGroup.hide(),
la.anchorShadowGroup.hide(),Ca.hide(),Ka.hide(),U.area.attr({"clip-rect":Va}).animate({"clip-rect":Pa},bb,pb,Aa)));bc?sa.hide():sa.show().animateWith(tb,rb,{path:yb},bb,pb,xb&&xa);xb=!1;sa.attr({stroke:B({color:ba,alpha:oa}),"stroke-width":ab?0:ga,fill:B(na),"stroke-linecap":"round","stroke-linejoin":2<ga?"round":"miter","stroke-dasharray":fa}).shadow(ya,Ca);ab?(Za=b.graphics.connector,Za||(Za=b.graphics.connector=F.path({path:ob.pathArr,stroke:B({color:ba,alpha:oa}),"stroke-width":ga,"stroke-linecap":"round",
"stroke-linejoin":2<ga?"round":"miter","stroke-dasharray":fa},la.areaGroup)),Za.show().animateWith(tb,rb,{path:ob.pathArr},bb,pb)):Za&&Za.hide();b.drawn=!0},drawTracker:function(){var b=this.chart,a=this.components.data,c,e,d,g,q,k,f=this.components.pool||[],l,m=this.graphics.trackerContainer,r,v,t=b.components.paper,B=a.length,w,z;for(z=0;z<B;z++)if(c=a[z])e=c.config,d=e.trackerConfig,void 0!==d&&(w=d.trackerRadius||0,d=e.hoverEffects,g=c._xPos,q=c._yPos,k=e.setLink,l=e.finalTooltext,r=e.eventArgs,
v=e.groupId,e=e.setValue,q={cx:g,cy:q,r:w,cursor:k?"pointer":"",stroke:p,fill:p,ishot:!0,visibility:Ra},g=c.graphics.hotElement||f.hotElement&&f.hotElement.shift(),null!==e?(g?g.show().attr(q):(g=c.graphics.hotElement=t.circle(q,m),g.click(this.getPlotClickFn(b)).hover(this.rolloverResponseSetter(c,b),this.rolloutResponseSetter(c,b))),g.data("eventArgs",r).data("groupId",v).data("hoverEnabled",d.enabled).data("dataset",this).tooltip(l)):g&&g.hide())},getPathArr:function(){var b=this.pathArr,a=this.path2Arr;
return b.length||a.length?b.concat(a):[]},_getPathString:function(b){var a=b.length,c="",e;for(e=0;e<a;e+=1)c+=" "+b[e];return c},getLinePath:function(b,a,c){var e=this.chart.config.connectnulldata,d=a||{};a=d.lastValidValue||!1;var g=d.temp||[],q=d.temp2||[],k=d.pathArr||[],f=d.path2Arr||[],l,m,r,v,p=b.length,d=d.pointsJoined||0,t,B,p=c&&c.end||p;for(c=c&&c.begin||0;c<p;c++)if(t=b[c])l=t.config,B=l.setValue,void 0!==B&&(l=t._xPos,m=t._yPos,r=t._baseXPos,v=t._baseYPos,null===B?e||(0<d&&("Z"!==f[f.length-
1]&&void 0!==v&&f.push("Z"),k=k.concat(f),f=[]),g=[],q=[],a=!1):a?(g.length&&(k=k.concat(g),void 0!==r&&(f=q,q=[]),g=[],d++),k.push(l,",",m),void 0!==v&&f.unshift(l,",",v)):(g.push("M",l,",",m,"L"),void 0!==v&&q.push(r,",",v),d=0,a=!0));"Z"!==f[f.length-1]&&0<d&&void 0!==v&&f.push("Z");return{pathArr:k,path2Arr:f,lastValidValue:a,pointsJoined:d,temp:g,temp2:q,getPathArr:this.getPathArr}},_shiftOffRemovedPoints:function(){var b=this,a=b.chart,c=b.config,e=b.components.removeDataArr,d,g=a.components.xAxis[0].getPVR();
d=a.get("config","animationObj");var a=d.duration,k=b.drawn&&a,l=d.dummyObj,f=d.animObj,m=d.animType,r,v,p,t,B,w={},z,C,E=b.components.removeElementsArr=b.components.removeElementsArr||(b.components.removeElementsArr=[]),F=c.hideAnimFlag=!1,H=function(){var a=b.components.removeElementsArr,c=a.length,f;for(f=0;f<c;f++)b._removeDataVisuals(a.shift())},I,G;if(e){d=e.length;for(z=0;z<d;z++){if(G=e[0])if(E.push(G),k){r=G.config.setValue;v=G._xPos;if(void 0==v){e.splice(0,1);continue}p=G.graphics.element;
t=G.graphics.label;B=G.graphics.image;C=G.graphics.connector;null!==r&&(r=d*g,I="T,"+-r+",0",G._xPos=v-r,v=G._xPos,G._baseXPos=v,p&&p.animateWith(l,f,{transform:I},a,m,!F&&H),c.hideAnimFlag=!0,t&&t.animateWith(l,f,{transform:I},a,m),B&&B.animateWith(l,f,{transform:I},a,m),C&&C.hide());w=b.getLinePath([G],w)}else H();e.splice(0,1)}c.removePath=w}},_removeDataVisuals:function(b){var a=this.components.pool||(this.components.pool={}),c,e,d;if(b)for(c in e=b.graphics,e)b=a[c]||(a[c]=[]),d=e[c],d.hide&&
"function"===typeof d.hide&&(d.attr({"text-bound":[]}),d.hide(),d.shadow&&d.shadow(!1)),b.push(e[c])},_parseAnchorProperties:function(b,a){var d=this.config,g=this.type,h="area"===(!this.chart.config.anchoralpha&&g)?0:1,n=this.JSONData,q=this.chart.jsonData.chart,l=(a||n.data||[])[b]||{},g={},f=k.graphics.mapSymbolName,m,r;m=void 0!==c(l.anchorstartangle,n.anchorstartangle,q.anchorstartangle,l.anchorimagealpha,n.anchorimagealpha,q.anchorimagealpha,l.anchorimagescale,n.anchorimagescale,q.anchorimagescale,
l.anchorimagepadding,n.anchorimagepadding,q.anchorimagepadding,l.anchorimageurl,n.anchorimageurl,q.anchorimageurl,l.anchorradius,n.anchorradius,q.anchorradius,l.anchorbgcolor,n.anchorbgcolor,q.anchorbgcolor,l.anchorbordercolor,n.anchorbordercolor,q.anchorbordercolor,l.anchoralpha,n.anchoralpha,q.anchoralpha,l.anchorsides,n.anchorsides,q.anchorsides,l.anchorborderthickness,n.anchorborderthickness,q.anchorborderthickness,void 0);r=e(l.drawanchors,d.drawanchors);g.enabled=m?e(r,m):e(r,h);g.startAngle=
e(l.anchorstartangle,d.anchorstartangle);g.imageAlpha=e(l.anchorimagealpha,d.anchorimagealpha);g.imageScale=e(l.anchorimagescale,d.anchorimagescale);g.imagePadding=e(l.anchorimagepadding,d.anchorimagepadding);0>g.imagePadding&&(g.imagePadding=0);g.imageUrl=c(l.anchorimageurl,d.anchorimageurl);g.imageUrl&&d.imageCount++;g.radius=e(l.anchorradius,d.anchorradius);g.isAnchorRadius=c(l.anchorradius,n.anchorradius,q.anchorradius);g.bgColor=c(l.anchorbgcolor,d.anchorbgcolor);h=g.enabled?aa(c(l.anchoralpha,
d.anchoralpha,g.enabled?oa:"0")):0;g.anchorAlpha=h;g.bgAlpha=aa(c(l.anchorbgalpha,d.anchorbgalpha,h))*h/100;g.imageAlpha=g.imageAlpha*h/100;g.borderColor=c(l.anchorbordercolor,d.anchorbordercolor);g.borderAlpha=h;g.sides=c(l.anchorsides,d.anchorsides);g.borderThickness=c(l.anchorborderthickness,d.anchorborderthickness);g.symbol=f(g.sides).split("_");d=e(l.anchorshadow,d.anchorshadow)&&1<=g.radius;g.shadow={opacity:d?h/100:0};return g},_onErrorSetter:function(b){return function(){var a=b.config,c=
b.chart.getJobList();a.imagesLoaded++;a.imagesLoaded===a.imageCount&&(!0===b.drawn?b.drawTracker():c.trackerDrawID.push(mb.addJob(b.drawTracker,b,[],k.priorityList.tracker)),!0===b.drawn?b.drawLabel():c.labelDrawID.push(mb.addJob(b.drawLabel,b,[],k.priorityList.label)))}},_onAnchorImageLoad:function(b,a,c,e,d,g){return function(){var c=b.chart,l=c.getJobList(),f=b.config,D=c.config,r=c.components.paper,v=b.components.data,p=void 0!==g?g:v[a],t=p.config,w=p.graphics,z=t.anchorProps,C=b.graphics.container,
E=C.anchorGroup,F=C.anchorShadowGroup,H=c.get("config","animationObj"),C=H.dummyObj,I=H.animObj,J=H.animType,H=H.duration,M=z.imageUrl,S=c.components.xAxis[0],L=v.length,v=t.hoverEffects,c=z.imageScale,R=z.imageAlpha,O=v.imageHoverAlpha,Q=v.imageHoverScale,N=this.height*c*.01,P=this.width*c*.01,X=this.width*Q*.01,T=this.height*Q*.01,aa=D.showtooltip,W=b.startPosition,U=b.noOfNewDataAtEnd,V=b.allImagesDrawn&&H,ha=t.setLink,Z,ba,oa,fa,ga,la,qa,ja,sa,ma,na,D=b.config.animFlag,ta=f.noOfImages,Ba=f.noOfImagesDrawn=
f.noOfImagesDrawn||(f.noOfImagesDrawn=0),Aa=b.components.pool||{};t.isRemoving||(Ba=t.trackerConfig||(t.trackerConfig={}),G?(ga={x:e-this.width*c*.005,y:d-this.height*c*.005,width:P,height:N,alpha:R},ja={x:e-this.width*Q*.005,y:d-this.height*Q*.005,width:X,height:this.height*Q*.01,alpha:O},(O=w.element)&&"image"!==O.type&&(O.remove(),O=w.element=null),O||(w.element=O=r.image(M,E)),O.css({opacity:.01*R}).data("alwaysInvisible",!c).data("setRolloverProperties",v).data(Oa,ja).data(wa,ga).data("imgRef",
this).data("anchorRadius",c).data("anchorHoverRadius",Q),O.animateWith(C,I,ga,H,J),Ba.trackerRadius=Na(P,N)/2):(Z=z.symbol[1],la=v.isAnchorHoverRadius,ba=z.isAnchorRadius,ba=z.radius=ba?z.radius:Na(P,N)/2,oa=z.shadow,ga=z.imagePadding,v.radius=la?v.anchorRadius:ba+1,fa=v.radius-ga-.5*v.anchorBorderThickness,la=ba-ga-.5*z.borderThickness,ja={},na=[Z||2,e,d,ba,z.startAngle,void 0],z.markerRadius=ba,ma={fill:B({color:z.bgColor,alpha:z.bgAlpha}),"stroke-width":z.borderThickness,stroke:B({color:z.borderColor,
alpha:z.borderAlpha})},ga=m({polypath:na},ma),v&&(ja={polypath:[v.anchorSides||2,e,d,v.radius,v.startAngle,v.dip],fill:B({color:v.anchorColor,alpha:v.anchorBgAlpha}),"stroke-width":v.anchorBorderThickness,stroke:B({color:v.anchorBorderColor,alpha:v.anchorBorderAlpha})},qa=Ja(v.anchorAlpha,v.anchorBorderAlpha),O>qa&&(O=qa)),z.bgAlpha&&z.borderAlpha&&(qa=Ja(z.bgAlpha,z.borderAlpha),R>qa&&(R=qa)),qa=w.element,na={polypath:ga.polypath},qa||(Aa.element&&Aa.element.length?qa=w.element=Aa.element.shift():
(qa=w.element=r.polypath(E),qa.attr(na)),V&&!0!==W&&(sa=S.getPixel(L+U),b.noOfNewDataAtEnd+=1,S=[Z||2,sa,d,ba,z.startAngle,void 0],qa.attr({transform:"",polypath:S}))),qa&&qa.attr({transform:""}),qa.show().animateWith(C,I,na,H,J,D&&void 0).attr(ma),D=b.config.animFlag=!1,qa.attr({fill:B({color:z.bgColor,alpha:z.bgAlpha}),ishot:!aa,"stroke-width":z.borderThickness,stroke:B({color:z.borderColor,alpha:z.borderAlpha}),cursor:ha?"pointer":"",visibility:ba?Ra:Xa}).data("alwaysInvisible",!ba).data("setRolloverProperties",
v).data(Oa,ja).data(wa,ga).data("anchorRadius",ba).data("anchorHoverRadius",v&&v.radius).shadow(oa,F),F=r.polypath(Z||2,e,d,0<la?la:0,z.startAngle,void 0,E).attr({visibility:Xa}),ga=b._getPathString(F.attrs.path),F.remove(),F=r.polypath(Z||2,e,d,0<fa?fa:0,v.startAngle,v.dip,E).attr({visibility:Xa}),S=b._getPathString(F.attrs.path),F.remove(),z.imgRefWidth=this.width,z.imgRefHeight=this.height,z.imgRefScale=c,z.rolloutClipRadius=la,ga={x:e-this.width*c*.005,y:d-this.height*c*.005,width:P,height:N,
alpha:R,"clip-path":ga},ja={x:e-this.width*Q*.005,y:d-this.height*Q*.005,width:X,height:T,alpha:O,"clip-path":S},O=w.image,O||(Aa.image&&Aa.image.length?(O=w.image=Aa.image.shift(),O.show()):w.image=O=r.image(M,E),V&&(F=r.polypath(Z||2,sa,d,0<la?la:0,z.startAngle,void 0).attr({visibility:Xa}),r=b._getPathString(F.attrs.path),F.remove(),sa={x:sa-this.width*c*.005,y:d-this.height*c*.005,width:P,height:N,alpha:R,"clip-path":r},O.attr({transform:""}).attr(sa))),O.attr({src:M}),O.attr({visibility:ba?Ra:
Xa}).css({opacity:.01*R}).data("alwaysInvisible",!c).data("setRolloverProperties",v).data(Oa,ja).data(wa,ga).data("anchorRadius",c).data("imgRef",this).data("anchorHoverRadius",Q),O.attr({transform:""}).animateWith(C,I,{x:ga.x,y:ga.y,width:ga.width,height:ga.height,"clip-path":ga["clip-path"]},H,J,D&&void 0),O.attr({alpha:ga.alpha}),ba=Ja(ba,v&&v.anchorRadius||0,2),Ba.trackerRadius=ba+(z.borderThickness||0)/2),p._xPos=e,p._yPos=d,f.imagesLoaded++,t.anchorImageLoaded=!0,f.imagesLoaded===f.imageCount&&
(!0===b.drawn?b.drawTracker():l.trackerDrawID.push(mb.addJob(b.drawTracker,b,[],k.priorityList.tracker)),!0===b.drawn?b.drawLabel():l.labelDrawID.push(mb.addJob(b.drawLabel,b,[],k.priorityList.label))),Ba=f.noOfImagesDrawn+=1,Ba===ta&&(b.allImagesDrawn=!0))}},_hideGraphics:function(b){var a,c;for(c in b)b.hasOwnProperty(c)&&(a=b[c])&&(a.hide?a.hide():this._hideGraphics(a))},getPlotClickFn:function(b){return function(a){la.call(this,b,a)}},show:function(){var b=this.chart,a=b.components.xAxis[0],c=
this.yAxis;b._chartAnimation();this.visible=!0;this._conatinerHidden=!1;b.config.transposeAxis&&(b._setAxisLimits(),c.draw());b.isRealTime&&a.draw();b._drawDataset()},hide:function(){var b=this.chart,a=this.yAxis,c=b.components.xAxis[0];b._chartAnimation();this.visible=!1;b.config.transposeAxis&&(b._setAxisLimits(),a.draw());b.isRealTime&&c.draw();b._drawDataset()},_parseHoverEffectOptions:function(b,a){var d=this.JSONData,g=this.chart,h=g.jsonData.chart,g=g.config,n=b.config.anchorProps||{},k=g.plothovereffect,
l=this.config.drawanchors,f={enabled:!1};a=a||{};0!==k&&0!==l&&(f.enabled=void 0!==c(a.hovercolor,a.anchorhovercolor,a.hovercolor,d.hovercolor,a.anchorbghovercolor,d.anchorbghovercolor,h.anchorbghovercolor,d.anchorhovercolor,h.anchorhovercolor,a.hoveralpha,a.anchorhoveralpha,d.anchorhoveralpha,h.anchorhoveralpha,a.bghoveralpha,a.anchorbghoveralpha,d.anchorbghoveralpha,h.anchorbghoveralpha,a.anchorborderhovercolor,a.borderhovercolor,d.anchorborderhovercolor,h.anchorborderhovercolor,a.anchorborderhoverthickness,
a.borderhoverthickness,d.anchorborderhoverthickness,h.anchorborderhoverthickness,a.anchorborderhoveralpha,a.borderhoveralpha,d.anchorborderhoveralpha,h.anchorborderhoveralpha,a.hoverdip,a.anchorhoverdip,d.anchorhoverdip,h.anchorhoverdip,a.anchorhoverstartangle,d.anchorhoverstartangle,h.anchorhoverstartangle,a.hoversides,a.anchorhoversides,d.anchorhoversides,h.anchorhoversides,a.hoverradius,a.anchorhoverradius,d.anchorhoverradius,h.anchorhoverradius,d.plotfillhovercolor,h.plotfillhovercolor,g.plothovereffect,
void 0),f.startAngle=e(a.anchorhoverstartangle,d.anchorhoverstartangle,h.anchorhoverstartangle,n.startAngle),f.anchorSides=e(a.hoversides,a.anchorhoversides,d.anchorhoversides,h.anchorhoversides,n.sides),f.anchorRadius=e(a.anchorhoverradius,d.anchorhoverradius,h.anchorhoverradius),f.isAnchorHoverRadius=f.anchorRadius,f.anchorRadius=e(f.anchorRadius,n.radius+(k?2:0)),f.anchorScale=c(a.hoverscale,d.anchorscale,h.anchorscale),f.imageHoverScale=e(a.anchorimagehoverScale,d.anchorimagehoverscale,h.anchorimagehoverscale,
110),f.imageHoverAlpha=e(a.anchorimagehoveralpha,d.anchorimaghoverealpha,h.anchorimagehoveralpha),f.anchorAlpha=c(a.anchorhoveralpha,a.hoveralpha,d.anchorhoveralpha,h.anchorhoveralpha,n.anchorAlpha),f.anchorColor=ib(c(a.hovercolor,a.anchorhovercolor,a.hoverColor,a.anchorbghovercolor,d.anchorbghovercolor,d.anchorhovercolor,d.hovercolor,h.anchorbghovercolor,h.anchorhovercolor,h.plotfillhovercolor,n.bgColor)),f.anchorBgAlpha=c(a.bghoveralpha,a.anchorbghoveralpha,d.anchorbghoveralpha,h.anchorbghoveralpha,
h.plotfillhoveralpha,n.bgAlpha),f.anchorBgAlpha=f.anchorBgAlpha*f.anchorAlpha/100,f.anchorBorderColor=c(a.borderhovercolor,a.anchorborderhovercolor,d.anchorborderhovercolor,h.anchorborderhovercolor,n.borderColor),f.anchorBorderAlpha=c(a.borderhoveralpha,a.anchorborderhoveralpha,d.anchorborderhoveralpha,h.anchorborderhoveralpha,f.anchorAlpha,n.borderAlpha),f.anchorBorderThickness=e(a.borderhoverthickness,a.anchorborderhoverthickness,d.anchorborderhoverthickness,h.anchorborderhoverthickness,h.anchorBorderThickness,
n.borderThickness),f.dip=c(a.hoverdip,a.anchorhoverdip,d.anchorhoverdip,h.anchorhoverdip,n.dip),f.anchorAnimation=e(a.anchorhoveranimation,d.anchorhoveranimation,h.anchorhoveranimation,1));return f},_hoverPlotAnchor:function(b,a){var c=b.graphics.element,e=b.graphics.label,d=b.config||{},d=d&&d.anchorProps.imageUrl,g=G&&d?b.graphics.element:b.graphics.image,k=c.data(Oa),l=c.data(wa),f="DataPlotRollOver"===a?c.data(Oa):c.data(wa),d="image"===c.type,m=c.data("anchorRadius"),v=c.data("anchorHoverRadius"),
r=e&&(e.data("isBelow")?1:-1)*(d?.5*(k.height-l.height):v-m),p=b.config.hoverEffects,t,B={polypath:f.polypath},f={fill:f.fill,"stroke-width":f["stroke-width"],stroke:f.stroke},w=e&&e.data("rotation")||"",r={transform:"T0,"+("DataPlotRollOver"===a?r:0)+w},k=!(/,0\)$/.test(k.fill)&&/,0\)$/.test(l.fill))&&c.data("anchorHoverRadius")-c.data("anchorRadius")&&p.anchorAnimation&&50;g&&(t=g.data(Oa),l=g.data(wa),t="DataPlotRollOver"==a?t:l);if("DataPlotRollOver"==a&&0!==v||"DataPlotRollOut"==a&&0!==m)c.attr({visibility:Ra}),
g&&g.attr({visibility:Ra});g&&g.css({opacity:.01*t.alpha});d?c.css({opacity:.01*B.alpha}):c.attr(f);c.stop();c.animate(B,k,"easeOut",function(){("DataPlotRollOver"==a&&!v||"DataPlotRollOut"==a&&!m)&&c.attr({visibility:Xa})});g&&g.animate(t,k,"easeOut",function(){("DataPlotRollOver"==a&&!v||"DataPlotRollOut"==a&&!m)&&g.attr({visibility:Xa})});e&&e.stop();k&&e&&e.animate(r,k,"easeOut")},drawLabel:function(b){var c=this.chart,e=c.config,d=c.linkedItems.smartLabel,h=c.config.dataLabelStyle,g=this.components.data,
k=c.components.paper,l=c.get("config","animationObj"),f=l.duration,m=!0===this.drawn&&f,v=e.stack100percent,r=l.dummyObj,p=l.animObj,t="",l=l.animType,B=e.rotatevalues?270:0,w=e.canvasTop,z=e.canvasHeight,C=c.config.isstacked,E,F=this.graphics.dataLabelContainer,H=c.components.xAxis[0],I=0,G=H.getCategoryLen(),J=this.startPosition,M=this.components.pool||{},R,O,L,Q,N,P,X,T,aa,U,V;void 0!==b?(V=b,U=V+1):(V=0,U=g.length);for(d.setStyle({"font-weight":h.fontWeight,"font-style":h.fontStyle,"font-family":h.fontFamily,
"font-size":h.fontSize,"line-height":h.lineHeight});V<U;V++)if(R=(b=(Q=g[V])&&Q.config)&&b.setValue,Q&&void 0!==R){N=b.anchorProps;R=Q.graphics;L=Q._yPos;Q=Q._xPos;N=R.element?R.image&&.5*R.element.attr("height")||N.radius-3:0;E=e.valuepadding+2+N;N=b.valuePosition;switch(N){case "above":P=0;break;case "below":P=1;break;default:N=g[V-1]&&g[V-1].config||{},T=g[V+1]&&g[V+1].config||{},C&&v?(N=N.value,aa=T.value,T=b.value):(N=N.setValue,aa=T.setValue,T=b.setValue),P=V?N>T?1:(null==aa&&aa)>T?1:0:0}t=
b.displayValue;aa=b.showValue;N=R.label;void 0!==t&&null!==t&&t!==a&&null!==T&&aa?(aa={text:t,fill:h.color,"text-bound":[h.backgroundColor,h.borderColor,h.borderThickness,h.borderPadding,h.borderRadius,h.borderDash]},t=d.getOriSize(t),B?(b._state={labelWidth:t.height,labelHeight:t.width},b._rotated=!0):(b._state={labelWidth:t.width,labelHeight:t.height},b._rotated=!1),t=O=b._state.labelHeight,t+=E,E=.5*O+E,O=L-w,X=w+z-L,t+=4,P?X>t?(L+=E,b._valueBelowPoint=1):O>t&&(L-=E,b._valueBelowPoint=0):O>t?(L-=
E,b._valueBelowPoint=0):X>t&&(L+=E,b._valueBelowPoint=1),E=P=!1,N||(M.label&&M.label.length?(R.label=N=M.label.shift(),R.label.show()):(aa.x=Q,aa.y=L,aa.transform=k.getSuggestiveRotation(B,Q,L),R.label=N=k.text(aa,F),E=!0),m&&c.isRealTime&&!0!==J&&(R=G+I,R=H.getPixel(R),R instanceof Object&&(R=R.x),N.attr({x:R,y:L,transform:k.getSuggestiveRotation(B,R,L)}),I++,P=!0)),E||N.attr(aa),E&&!P||N.show().animateWith(r,p,{x:Q,y:L,transform:k.getSuggestiveRotation(B,Q,L)},f,l),N.data("isBelow",b._valueBelowPoint),
N.data("rotation",k.getSuggestiveRotation(B,Q,L))):N&&N.hide()}},getAxisValuePadding:function(){var b=(this.chart||{}).hasScroll;return{left:b?.5:0,right:b?.5:0}},hidingPosition:function(){return function(){return{polypath:[[2,0,0,0,0,0]],text:""}}},_hoverFunc:function(b,a,c,e){if(c)return this._hoverPlotAnchor(b,a,e)}},"column",{valueposition:void 0,plotborderdashlen:void 0,plotborderdashgap:void 0,plotborderdashstyle:void 0,plotborderthickness:void 0,linethickness:void 0,linedashlen:void 0,linedashgap:void 0,
dashed:void 0,linedashstyle:void 0,linecolor:void 0,linealpha:void 0,anchorbgcolor:void 0,anchorbordercolor:void 0,anchorradius:void 0,anchoralpha:void 0,anchorimageurl:void 0,anchorsides:void 0,anchorbgalpha:void 0,anchorborderthickness:void 0,anchorshadow:void 0,anchorstartangle:void 0,anchorimagealpha:void 0,anchorimagescale:void 0,anchorimagepadding:void 0,alpha:void 0,parentyaxis:void 0}]);FusionCharts.register("component",["dataset","scrollarea2d",{},"area"]);FusionCharts.register("component",
["dataset","realtimearea",{_realTimeConfigure:FusionCharts.get("component",["dataset","realtimecolumn"]).prototype._realTimeConfigure},"area"]);FusionCharts.register("component",["datasetGroup","realtimearea",{},"area"]);FusionCharts.register("component",["datasetGroup","radar",{},"area"]);FusionCharts.register("component",["dataset","radar",{type:"radar",configure:function(){var b=this.config,a=this.chart,e=a.jsonData.chart,d=this.JSONData,a=a.components.colorManager.getPlotColor(this.index);this.__base__.configure.call(this);
b.plotfillcolor=c(d.color,e.plotfillcolor,a);b.plotbordercolor=c(d.plotbordercolor,e.plotbordercolor,e.areabordercolor,a).split(",")[0];b.fillColor.color=b.plotfillcolor;b.legendSymbolColor=b.plotfillcolor},_addLegend:function(){var b=this.chart,a=b.jsonData.chart,c,d;d=this.config;var b=b.components.legend,h=d.legendSymbolColor;c=e(a.use3dlighting,a.useplotgradientcolor,1);a=ob(h,60).replace(ta,N);c?(c=ob(h,40),c={FCcolor:{color:h+","+h+","+c+","+h+","+h,ratio:"0,70,30",angle:270,alpha:"100,100,100,100,100"}}):
c={FCcolor:{color:h,angle:0,ratio:"0",alpha:"100"}};d={enabled:d.includeInLegend,type:this.type,fillColor:B(c),strokeColor:B(a),rawFillColor:h,label:ja(this.JSONData.seriesname)};this.legendItemId=b.addItems(this,this.legendInteractivity,d)},draw:function(){var b=this,a=b.chart,e=a.getJobList(),d=a.graphics,h=a.config,g=a.components,q=b.JSONData,l=a.jsonData.chart,f=b.config,m=b.index,v=q.data||[],r,p,t,w=g.paper,E=g.xAxis[0],F=b.yAxis,H,I,G,J=h.showtooltip,M,L=b.components.data,S,Q,R,O,N,P,X=F.getAxisBase(),
T,g=f.plotbordercolor,da=f.plotborderalpha,aa=f.plotBorderDashStyle,W=f.plotborderthickness,U=b.graphics.container,V=b.graphics.trackerContainer,ha=d.trackerGroup,Z=[],ba,oa=k.parseUnsafeString,la=!1,ga=f.fillColor,fa=a.is3D,qa=d.areaGroup,ja=a.get("config","animationObj"),sa=ja.duration,ma=ja.dummyObj,na=ja.animObj,ja=ja.animType,ta=function(){!1===b.visible&&(U.areaGroup.hide(),pa.hide(),U.lineShadowGroup.hide(),U.anchorShadowGroup.hide(),U.anchorGroup.hide(),V.hide(),Ga&&Ga.hide(),b._conatinerHidden=
!0)},za=function(){U.areaGroup.attr({"clip-rect":null});!1!==b.visible&&(U.lineShadowGroup.show(),U.anchorShadowGroup.show(),U.anchorGroup.show(),Ga.show());a._animCallBack()},Aa=f.shadow,ya,va=b.visible,pa=U&&U.shadowContainer,xa,Ca={},Ca=d.datalabelsGroup,Ga=b.graphics.dataLabelContainer,Ea=fa?10:0,d=b.components.removeDataArr||[],fa=d.length,Fa=b.components.pool||{},Ia=!0,Ka=0,Ha,Na,Ma=0;f.imagesLoaded=0;U||(U=b.graphics.container={lineShadowGroup:w.group("connector-shadow",qa.areaConnector),anchorShadowGroup:w.group("anchor-shadow",
qa.areaConnector),areaGroup:w.group("area",qa.area),anchorGroup:w.group("anchors",qa.areaConnector)},va||(U.lineShadowGroup.hide(),U.anchorShadowGroup.hide(),U.areaGroup.hide(),U.anchorGroup.hide()));pa||(pa=b.graphics.shadowContainer=qa.shadows||(qa.shadows=w.group("shadows",U.areaGroup).toBack()),va||pa.hide());V||(V=b.graphics.trackerContainer=w.group("area-hot"),va||V.hide());L||(L=b.components.data);ha&&ha.appendChild(V);Ga||(Ga=b.graphics.dataLabelContainer=b.graphics.dataLabelContainer||w.group("datalabel",
Ca),va||Ga.hide());va&&(U.lineShadowGroup.show(),U.anchorShadowGroup.show(),U.areaGroup.show(),U.anchorGroup.show(),Ga.show(),V.show());r=E.getCategoryLen();ha=E.config.centerX;ba=E.config.centerY;for(t=0;t<r;t++)p=v[t]||{},M=(S=L[t])&&S.config,Ha=E.getLabel(t).label,O=M.setValue,R=M.setLink,Ca=M.anchorProps,xa=Ca.shadow,H=Ba(oa(c(p.tooltext,q.plottooltext,l.plottooltext))),S.graphics||(S.graphics={}),M&&(T=0<=O?M.previousPositiveY:M.previousNegativeY),I=S.graphics,p=I.element,Na=I.image,null===O?
(!1!==la?Z.push("L",ha,",",ba):Z.push("M",ha,",",ba),la=!1,p&&p.hide()):(I=F.getAxisPosition(T||X)+Ea,G=b.visible?F.getAxisPosition(O+(T||0))+Ea:I,I=E.getAxisPosition(t,h.canvasTop+h.canvasHeight/2-G),G=I.y,I=I.x,ya=M.hoverEffects,Q=J?M.toolText+(H?"":M.toolTipValue):"",M.finalTooltext=Q,H=M.eventArgs||(M.eventArgs={}),H.index=t,H.link=R,H.value=O,H.displayValue=M.displayValue,H.categoryLabel=Ha,H.toolText=Q,H.id=b.userID,H.datasetIndex=m||0,H.datasetName=q.seriesname,H.visible=va,ya.enabled&&(M.setRolloverAttr=
{polypath:[ya.anchorSides||2,I,G,ya.anchorRadius,ya.startAngle,ya.dip],fill:B({color:ya.anchorColor,alpha:ya.anchorBgAlpha}),stroke:B({color:ya.anchorBorderColor,alpha:ya.anchorBorderAlpha}),"stroke-width":ya.anchorBorderThickness},M.setRolloutAttr={polypath:[Ca.symbol[1]||2,I,G,Ca.radius,Ca.startAngle,0],fill:B({color:Ca.bgColor,alpha:Ca.bgAlpha}),stroke:B({color:Ca.borderColor,alpha:Ca.borderAlpha}),"stroke-width":Ca.borderThickness},P=M.setRolloverAttr,N=M.setRolloutAttr),Ca.imageUrl?(M.anchorImageLoaded=
!1,M=new z,M.onload=b._onAnchorImageLoad(b,t,H,I,G),M.onerror=b._onErrorSetter(b,t),M.src=Ca.imageUrl,Ma++):(Na&&Na.hide(),p||(Fa.element&&Fa.element.length?p=S.graphics.element=Fa.element.shift():(p=S.graphics.element=w.polypath(U.anchorGroup),p.attr({polypath:[Ca.symbol[1]||2,I,G,Ca.radius,Ca.startAngle,0]}))),p.show().animateWith(ma,na,{polypath:[Ca.symbol[1]||2,I,G,Ca.radius,Ca.startAngle,0]},sa,ja,Ia&&ta),Ia=!1,p.attr({fill:B({color:Ca.bgColor,alpha:Ca.bgAlpha}),stroke:B({color:Ca.borderColor,
alpha:Ca.borderAlpha}),"stroke-width":Ca.borderThickness,visibility:Ca.radius?va:Xa}).shadow(xa,U.anchorShadowGroup).data("anchorRadius",Ca.radius).data("anchorHoverRadius",ya.anchorRadius).data(Oa,P).data(wa,N),ya.enabled&&p&&p.data("anchorRadius",Ca.radius).data("anchorHoverRadius",ya.anchorRadius).data(Oa,P).data(wa,N),M.trackerConfig||(M.trackerConfig={}),M.trackerConfig.trackerRadius=Ja(Ca.radius,ya&&!0&&ya.anchorRadius||0,C)+(Ca.borderThickness||0)/2),S._xPos=I,S._yPos=G,la?(Z.push("L",I,",",
G),Ka++):(0===t?Z.push("M",I,",",G):Z.push("L",I,",",G),la=!0));Z.push("Z");f.noOfImages=f.totalImages=Ma;0===Ma&&(e.trackerDrawID.push(mb.addJob(b.drawTracker,b,[],k.priorityList.tracker)),e.labelDrawID.push(mb.addJob(b.drawLabel,b,[],k.priorityList.label)));h=Z.concat([]);e=b.graphics.lineElement;e||(e=b.graphics.lineElement=w.path(U.areaGroup),e.attr({path:Z}),sa&&va&&(U.anchorGroup.hide(),U.anchorShadowGroup.hide(),Ga.hide(),qa.scale(.01,.01,ha,ba).animateWith(ma,na,{transform:"s1,1"},sa,ja,za)));
e.show().animateWith(ma,na,{path:h},sa,ja,Ia&&ta).attr({stroke:B({color:g,alpha:da}),"stroke-width":W,fill:B(ga),"stroke-linecap":"round","stroke-linejoin":2<W?"round":"miter","stroke-dasharray":aa}).shadow(Aa,pa);b.drawn=!0;for(t=0;t<fa;t++)b._removeDataVisuals(d.shift())}},"area"]);FusionCharts.register("component",["dataset","Line",{type:"line",_addLegend:function(){var b=this.config,a=this.chart.components.legend,d=e(b.drawanchors,1),b={enabled:b.includeinlegend,type:this.type,drawLine:c(b.drawLine,
!0),fillColor:B({color:b.anchorbgcolor,alpha:b.anchorbgalpha}),strokeColor:B({color:b.anchorbordercolor,alpha:"100"}),rawFillColor:b.anchorbgcolor,rawStrokeColor:b.anchorbordercolor,anchorSide:d?b.anchorsides:0,strokeWidth:b.anchorborderthickness,label:ja(this.JSONData.seriesname),lineWidth:b.linethickness};this.legendItemId=a.addItems(this,this.legendInteractivity,b)},draw:function(){var b,a,e=this,d=e.JSONData,h=e.chart,g=h.getJobList(),q=h.components,l=q.canvas.config.clip,f=e.config,m=e.index,
v=h.config,r=e.components,p=e.graphics,t=r.data,w=t.length,E=q.paper,H=q.xAxis[0],I=e.yAxis,G=r.removeDataArr||[],J=h.graphics,M=J.datalabelsGroup,L,Q,S,N=f.linethickness,R=p.container,O=p.trackerContainer,P=J.trackerGroup,X=v.showtooltip,T=J.lineGroup,aa,da=f.shadow,W,ha=p.dataLabelContainer,U={},V,ba,Z,oa=h.is3D,la=v.use3dlineshift,fa=e.graphics.errorGroupContainer,ga=e.graphics.errorTrackerContainer,ja=e.graphics.errorShadowContainer,qa=function(){!1!==e.visible||!1!==e._conatinerHidden&&void 0!==
e._conatinerHidden||(R.lineGroup.hide(),R.lineShadowGroup.hide(),R.anchorShadowGroup.hide(),R.anchorGroup.hide(),O.hide(),ha&&ha.hide(),fa&&fa.hide(),ga&&ga.hide(),ja&&ja.hide(),e._conatinerHidden=!0)},na=function(){T.lineConnector.attr({"clip-rect":null});T.lineConnector.node&&T.lineConnector.node.removeAttribute("clip-path");!1!==e.visible&&(R.lineShadowGroup.show(),R.anchorShadowGroup.show(),R.anchorGroup.show(),O.show(),ha&&ha.show())},sa=!0,ma,ta,Ba,za=I.getAxisBase(),Aa=I.yBasePos=I.getAxisPosition(za),
ya=H.getPVR(),va,pa=oa?10:0,xa=oa&&la?10:0,Ca=l["clip-canvas"].slice(0),Ea=l["clip-canvas-init"].slice(0),Fa=q.scrollBar,Ia=h.hasScroll||!1,Ka,Ha=f.lineDashStyle,Na={color:f.linecolor,alpha:f.alpha},Ma=[B(Na),Ha].join(":"),Sa,Pa,Ra,Ua,Ta,Va=p.lineElement,Ya=e.visible,Za,ab,cb=0,gb=!0!==e.drawn,fb=e.components.pool||(e.components.pool={}),ib,lb,ob=e.startPosition,jb={},kb=w,bb,hb={},qb=f.lastPath||{},tb,pb,rb=0,vb=h.config.viewPortConfig,xb=vb.x,yb=vb.scaleX,zb,sb,Bb,Cb,Eb,Nb,Ib,Jb,Hb,Wb,Xb,$b,Yb,
bc,Ub,ac,Qb,Rb,Tb=f.noOfImages=0,hc,cc=h.get("config","animationObj"),Ob=cc.duration,dc=cc.dummyObj,ec=cc.animObj,fc=cc.animType,kc=!gb&&Ob,lc,oc=v.height,mc=v.realTimeConfig&&v.realTimeConfig.clear,pc=kb;e.noOfNewDataAtEnd=0;f.hideAnimFlag=!1;f.imagesLoaded=0;T.lineConnector=T.lineConnector||E.group("line-connector",T);R||(R=e.graphics.container={lineShadowGroup:E.group("connector-shadow",T.lineConnector),anchorShadowGroup:E.group("anchor-shadow",T.lineConnector),lineGroup:E.group("line",T.lineConnector),
anchorGroup:E.group("anchors",T.lineConnector)},Ya||(R.lineShadowGroup.hide(),R.anchorShadowGroup.hide(),R.lineGroup.hide(),R.anchorGroup.hide()));O||(O=e.graphics.trackerContainer=E.group("line-hot",P),Ya||O.hide());t||(t=e.components.data=[]);ha||(ha=e.graphics.dataLabelContainer=e.graphics.dataLabelContainer||E.group("datalabel",M),Ya||ha.hide());Ya&&(R.lineShadowGroup&&R.lineShadowGroup.show(),R.lineGroup&&R.lineGroup.show(),R.anchorGroup&&R.anchorGroup.show(),O&&O.show(),e._conatinerHidden=!1,
ha.show());va=ya*kb;h.isRealTime&&(Ca[1]=0,Ca[3]=oc,ha.attr({"clip-rect":Ca}),R.anchorGroup.attr({"clip-rect":Ca}),R.anchorShadowGroup.attr({"clip-rect":Ca}),R.lineGroup.attr({"clip-rect":Ca}),R.lineShadowGroup.attr({"clip-rect":Ca}));if(mc)for(bb=0,kb=G.length;bb<kb;bb++)e._removeDataVisuals(G.shift());else e._shiftOffRemovedPoints();jb=f.removePath||{};ac=R.anchorShadowGroup;for(bb=0;bb<pc;bb++)if(L=t[bb])Z=L.config||{},Nb=Z.setValue,void 0!==Nb&&(Cb=L.graphics,Eb=Z.setLink,Za=Z.x||bb,ma=Z.setLevelTooltext,
U=Z.anchorProps,ba=U.symbol,Hb=U.radius,W=U.shadow,Wb=U.startAngle,Xb=U.bgColor,$b=U.bgAlpha,Yb=U.borderColor,bc=U.borderAlpha,Ub=U.borderThickness,Jb=Z.displayValue,ab=Z.dip||0,L||(L=t[bb]={graphics:{}}),b=Z.setColor,a=Z.setAlpha,Ba=Z.dashStyle,Ua=Z.xPos||H.getAxisPosition(Za)-pa+xb*yb,Ta=!e.visible&&Ob?Aa:I.getAxisPosition(Nb)+xa,Ua=Ga(Ua,f.linethickness,f.linethickness).position,Ta=Ga(Ta,f.linethickness,f.linethickness).position,aa=Z.hoverEffects,U.isAnchorHoverRadius=aa.anchorRadius,tb=H.getLabel(bb)||
{},zb=X?Z.toolText+(ma?"":Z.toolTipValue):"",Z.finalTooltext=zb,Ib=Z.eventArgs=Z.eventArgs||{},Ib.index=bb,Ib.link=Eb,Ib.value=Nb,Ib.displayValue=Jb,Ib.categoryLabel=tb.label,Ib.toolText=zb,Ib.id=f.userID,Ib.datasetIndex=m||0,Ib.datasetName=d.seriesname,Ib.visible=Ya,sb=L.graphics.element,Rb=L.graphics.image,Bb=L.graphics.hotElement,hc={polypath:[ba[1]||2,Ua,Ta,Hb,Wb,Z.dip||0]},null!==Nb?(!sb&&kc&&!0!==ob&&(lb=kb+cb,ib=H.getPixel(lb),L._xPos=ib,L._yPos=Ta,qb=e.getLinePath([L],qb),cb++),U.imageUrl?
(V=new z,Z.anchorImageLoaded=!1,V.onload=e._onAnchorImageLoad(e,bb,Ib,Ua,Ta,L),V.onerror=e._onErrorSetter(e,bb),V.src=U.imageUrl,Tb++):(Rb&&Rb.hide(),sb||(fb.element&&fb.element.length?(sb=Cb.element=fb.element.shift(),sb.show()):(sb=Cb.element=E.polypath(R.anchorGroup),sb.attr(hc)),kc&&sb.attr({polypath:[ba[1]||2,ib,Ta,Hb,Wb,0]})),sb.show().attr({transform:""}).animateWith(dc,ec,hc,Ob,fc,sa&&qa),Ob||sa&&qa(),sa=!1,sb.attr({fill:B({color:Xb,alpha:$b}),stroke:B({color:Yb,alpha:bc}),"stroke-width":Ub,
visibility:Hb?Ya:Xa}).shadow(W,ac).data("anchorRadius",Hb).data("anchorHoverRadius",aa.anchorRadius),aa.enabled&&(S={polypath:[aa.anchorSides||2,Ua,Ta,aa.anchorRadius,aa.startAngle,aa.dip],fill:B({color:aa.anchorColor,alpha:aa.anchorBgAlpha}),stroke:B({color:aa.anchorBorderColor,alpha:aa.anchorBorderAlpha}),"stroke-width":aa.anchorBorderThickness},Q={polypath:[U.sides,Ua,Ta,U.radius,U.startAngle,ab],fill:B({color:U.bgColor,alpha:U.bgAlpha}),stroke:B({color:U.borderColor,alpha:U.borderAlpha}),"stroke-width":U.borderThickness},
sb&&sb.data("anchorRadius",U.radius).data("anchorHoverRadius",aa.anchorRadius).data(Oa,S).data(wa,Q)),Z.trackerConfig||(Z.trackerConfig={}),Z.trackerConfig.trackerRadius=Ja(Hb,aa&&aa.anchorRadius||0,C)+(U.borderThickness||0)/2)):(sb&&sb.hide(),Rb&&Rb.hide(),Bb&&Bb.hide()),L._xPos=Ua,L._yPos=Ta,Ra=Ma!==[B({color:c(b,Na.color),alpha:c(a,Na.alpha)}),Ba||Ha].join(":"),ta=L.graphics.connector,pb=[],Ra&&(Qb=bb,hb=e.getLinePath(t,{},{begin:rb,end:Qb+1}),Z.connStartIndex=rb,Z.connEndIndex=Qb,pb=hb.getPathArr(),
pb.length&&(lc=F.animation({path:pb},Ob,fc,sa&&qa),ta||(fb.connector&&fb.connector.length?ta=L.graphics.connector=fb.connector.shift():(ta=L.graphics.connector=E.path(R.lineGroup),ta.attr({path:pb}))),ta.show().animateWith(dc,ec,lc),ta.attr({"stroke-dasharray":Pa,"stroke-width":N,stroke:Sa,"stroke-linecap":"round","stroke-linejoin":2<N?"round":"miter"}).shadow(da,R.lineShadowGroup),rb=bb,hb={}),Qb=null),Ra||pb.length||ta&&ta.hide(),null!==Nb&&(Sa=B({color:c(b,Na.color),alpha:c(a,Na.alpha)}),Pa=Ba||
Ha),Ma=[Sa,Pa].join(":"));0===Tb&&(!0===e.drawn?e.drawTracker():g.trackerDrawID.push(mb.addJob(e.drawTracker,e,[],k.priorityList.tracker)),!0===e.drawn?e.drawLabel():g.labelDrawID.push(mb.addJob(e.drawLabel,e,[],k.priorityList.label)));f.pathStartIndex=rb;f.pathEndIndex=Qb;f.noOfImages=f.totalImages=Tb;hb=e.getLinePath(t,{},{begin:rb,end:Qb});G&&h.isRealTime&&(jb=e.getLinePath(t,jb));h.isRealTime&&(f.lastPath=hb);Va?Ob&&h.isRealTime&&Va.attr({path:qb.getPathArr()}):Va=p.lineElement=E.path({path:hb.getPathArr()},
R.lineGroup);mc?Va.hide():Va.show().animateWith(dc,ec,{path:jb.getPathArr&&h.isRealTime?jb.getPathArr():hb.getPathArr()},Ob,fc,sa&&qa);Va.attr({"stroke-width":N,"stroke-dasharray":Pa,stroke:Sa,"stroke-linecap":"round","stroke-linejoin":2<=N?"round":"miter"}).shadow(da,R.lineShadowGroup);Ia&&(Ka=Fa.conf.startPercent,Ca[2]=va+Ea[0],1===Ka&&(Ea[0]=Ca[2],Ca[0]=0));Ca[3]+=xa;e._drawTracker&&e._drawTracker();Ob&&Ya&&!e.drawn&&(R.anchorGroup.hide(),R.anchorShadowGroup.hide(),ha.hide(),T.lineConnector.attr({"clip-rect":Ea}).animateWith(dc,
ec,{"clip-rect":Ca},Ob,fc,na));e.drawn=!0;e.drawErrorValue&&e.drawErrorValue()},getDataLimits:function(){var b=this.config,a=b.maxValue,b=b.minValue,c=this.chart.config.transposeAxis;!1===this.visible&&c&&(a=-Infinity,b=Infinity);return{max:a,min:b}},pointValueWatcher:function(b,a,c){var e=c.obj||(c.obj={}),d=c.objX||(c.objX={});null!==a&&(e.max=e.max>a?e.max:a,e.min=e.min<a?e.min:a);null!==b&&(d.max=d.max>b?d.max:b,d.min=d.min<b?d.min:b);c.isRegression&&(b=b||0,a=a||0,c.sumX+=b,c.sumY+=a,c.sumXY+=
b*a,c.sumXsqure+=tb(b,2),c.xValues.push(b),c.sumYsqure+=tb(a,2),c.yValues.push(a))}},"area"]);FusionCharts.register("component",["dataset","Realtimeline",{_realTimeConfigure:FusionCharts.get("component",["dataset","realtimecolumn"]).prototype._realTimeConfigure},"line"]);FusionCharts.register("component",["quadrant","cartesian",{pIndex:1,init:function(){var b=this.chart.components,a=b.xAxis[0];this.yAxis=b.yAxis[0];this.xAxis=a;this.components={};this.conf={};this.graphics={};this.configure()},configure:function(){var b,
a,d,g,h,n,k,l,f,m,r=this.conf;f=this.chart;n=f.config;var p=f.jsonData.chart;a=f.components.canvas.config;var t=n.dataLabelStyle;b=f.linkedItems.smartLabel;if(r.enabled=e(p.drawquadrant,0))f=e(p.quadrantxval),m=e(p.quadrantyval),l=Q(c(p.quadrantlinecolor,a.canvasBorderColor),c(p.quadrantlinealpha,p.quadrantlinealpha,oa)),a=e(p.quadrantlinethickness,a.canvasBorderThickness),g=e(p.quadrantlinedashed,p.quadrantlineisdashed,0),d=e(p.quadrantlinedashlen,4),h=e(p.quadrantlinedashgap,2),d=g?M(d,h,a):"none",
r.xVal=f,r.yVal=m,r.quadrantLineColor=l,r.quadrantLineThickness=a,r.dashStyle=d,a=Ba(p.quadrantlabeltl,""),l=Ba(p.quadrantlabeltr,""),f=Ba(p.quadrantlabelbl,""),m=Ba(p.quadrantlabelbr,""),r.quadrantLabelPadding=e(p.quadrantlabelpadding,3),b.useEllipsesOnOverflow(n.useEllipsesWhenOverflow),b.setStyle(t),""!==a&&(b=ja(p.quadrantlabeltlbordercolor,p.quadrantlabelbordercolor,""),g=c(p.quadrantlabeltlbgcolor,p.quadrantlabelbgcolor),n=e(p.quadrantlabeltlborderthickness,p.quadrantlabelborderthickness,1),
b=b?Q(b,e(p.quadrantlabeltlborderalpha,p.quadrantlabelborderalpha,p.quadrantlabeltlalpha,p.quadrantlabelalpha,100)):"",k=r.tlConfig,k||(k=r.tlConfig={enabled:!0,styleObj:{}}),k.label=a,k.styleObj.fontSize=c(e(p.quadrantlabeltlfontsize,p.quadrantlabelfontsize),parseInt(t.fontSize,10))+"px",k.styleObj.lineHeight=t.lineHeight,k.styleObj.fontFamily=c(p.quadrantlabeltlfont,p.quadrantlabelfont,t.fontFamily),k.styleObj.color=Q(c(p.quadrantlabeltlfontcolor,p.quadrantlabelfontcolor,t.color),e(p.quadrantlabeltlfontalpha,
p.quadrantlabelfontalpha,100)),k.styleObj.fontWeight=e(p.quadrantlabeltlfontbold,p.quadrantlabelfontbold)?"bold":"normal",k.styleObj.fontStyle=e(p.quadrantlabeltlfontitalic,p.quadrantlabelfontitalic)?"italic":"normal",v(k.styleObj),a=e(p.quadrantlabeltlborderpadding,p.quadrantlabelborderpadding,2),d=e(p.quadrantlabeltlborderradius,p.quadrantlabelborderradius,0),g=g?Q(g,e(p.quadrantlabeltlbgalpha,p.quadrantlabelbgalpha,p.quadrantlabeltlalpha,p.quadrantlabelalpha,100)):"",h=e(p.quadrantlabeltlborderdashed,
p.quadrantlabelborderdashed,0)?M(e(p.quadrantlabeltlborderdashlen,p.quadrantlabelborderdashlen,4),e(p.quadrantlabeltlborderdashgap,p.quadrantlabelborderdashgap,2),n):"none",k["text-bound"]=[g,b,n,a,d,h]),""!==l&&(b=ja(p.quadrantlabeltrbordercolor,p.quadrantlabelbordercolor,""),g=c(p.quadrantlabeltrbgcolor,p.quadrantlabelbgcolor),n=e(p.quadrantlabeltrborderthickness,p.quadrantlabelborderthickness,1),b=b?Q(b,e(p.quadrantlabeltrborderalpha,p.quadrantlabelborderalpha,p.quadrantlabeltralpha,p.quadrantlabelalpha,
100)):"",l=r.trConfig,l||(l=r.trConfig={enabled:!0,styleObj:{}}),l.label=Ba(p.quadrantlabeltr,""),l.styleObj.fontSize=c(e(p.quadrantlabeltrfontsize,p.quadrantlabelfontsize),parseInt(t.fontSize,10))+"px",l.styleObj.lineHeight=t.lineHeight,l.styleObj.fontFamily=c(p.quadrantlabeltrfont,p.quadrantlabelfont,t.fontFamily),l.styleObj.color=Q(c(p.quadrantlabeltrfontcolor,p.quadrantlabelfontcolor,t.color),e(p.quadrantlabeltrfontalpha,p.quadrantrabelfontalpha,100)),l.styleObj.fontWeight=e(p.quadrantlabeltrfontbold,
p.quadrantlabelfontbold)?"bold":"normal",l.styleObj.fontStyle=e(p.quadrantlabeltrfontitalic,p.quadrantlabelfontitalic)?"italic":"normal",v(l.styleObj),a=e(p.quadrantlabeltrborderpadding,p.quadrantlabelborderpadding,2),d=e(p.quadrantlabeltrborderradius,p.quadrantlabelborderradius,0),g=g?Q(g,e(p.quadrantlabeltrbgalpha,p.quadrantlabelbgalpha,p.quadrantlabeltralpha,p.quadrantlabelalpha,100)):"",h=e(p.quadrantlabeltrborderdashed,p.quadrantlabelborderdashed,0)?M(e(p.quadrantlabeltrborderdashlen,p.quadrantlabelborderdashlen,
4),e(p.quadrantlabeltrborderdashgap,p.quadrantlabelborderdashgap,2),n):"none",l["text-bound"]=[g,b,n,a,d,h]),""!==f&&(b=ja(p.quadrantlabelblbordercolor,p.quadrantlabelbordercolor,""),g=c(p.quadrantlabelblbgcolor,p.quadrantlabelbgcolor),n=e(p.quadrantlabelblborderthickness,p.quadrantlabelborderthickness,1),b=b?Q(b,e(p.quadrantlabelblborderalpha,p.quadrantlabelborderalpha,p.quadrantlabelblalpha,p.quadrantlabelalpha,100)):"",l=r.blConfig,l||(l=r.blConfig={enabled:!0,styleObj:{}}),l.label=f,l.styleObj.fontSize=
c(e(p.quadrantlabelblfontsize,p.quadrantlabelfontsize),parseInt(t.fontSize,10))+"px",l.styleObj.lineHeight=t.lineHeight,l.styleObj.fontFamily=c(p.quadrantlabelblfont,p.quadrantlabelfont,t.fontFamily),l.styleObj.color=Q(c(p.quadrantlabelblfontcolor,p.quadrantlabelfontcolor,t.color),e(p.quadrantlabelblfontalpha,p.quadrantlabelfontalpha,100)),l.styleObj.fontWeight=e(p.quadrantlabelblfontbold,p.quadrantlabelfontbold)?"bold":"normal",l.styleObj.fontStyle=e(p.quadrantlabelblfontitalic,p.quadrantlabelfontitalic)?
"italic":"normal",v(l.styleObj),a=e(p.quadrantlabelblborderpadding,p.quadrantlabelborderpadding,2),d=e(p.quadrantlabelblborderradius,p.quadrantlabelborderradius,0),g=g?Q(g,e(p.quadrantlabelblbgalpha,p.quadrantlabelbgalpha,p.quadrantlabelblalpha,p.quadrantlabelalpha,100)):"",h=e(p.quadrantlabelblborderdashed,p.quadrantlabelborderdashed,0)?M(e(p.quadrantlabelblborderdashlen,p.quadrantlabelborderdashlen,4),e(p.quadrantlabelblborderdashgap,p.quadrantlabelborderdashgap,2),n):"none",l["text-bound"]=[g,
b,n,a,d,h]),""!==m&&(b=ja(p.quadrantlabelbrbordercolor,p.quadrantlabelbordercolor,""),g=c(p.quadrantlabelbrbgcolor,p.quadrantlabelbgcolor),n=e(p.quadrantlabelbrborderthickness,p.quadrantlabelborderthickness,1),b=b?Q(b,e(p.quadrantlabelbrborderalpha,p.quadrantlabelborderalpha,p.quadrantlabelbralpha,p.quadrantlabelalpha,100)):"",f=r.brConfig,f||(f=r.brConfig={enabled:!0,styleObj:{}}),f.label=Ba(p.quadrantlabelbr,""),f.styleObj.fontSize=c(e(p.quadrantlabelbrfontsize,p.quadrantlabelfontsize),parseInt(t.fontSize,
10))+"px",f.styleObj.lineHeight=t.lineHeight,f.styleObj.fontFamily=c(p.quadrantlabelbrfont,p.quadrantlabelfont,t.fontFamily),f.styleObj.color=Q(c(p.quadrantlabelbrfontcolor,p.quadrantlabelfontcolor,t.color),e(p.quadrantlabelbrfontalpha,p.quadrantrabelfontalpha,100)),f.styleObj.fontWeight=e(p.quadrantlabelbrfontbold,p.quadrantlabelfontbold)?"bold":"normal",f.styleObj.fontStyle=e(p.quadrantlabelbrfontitalic,p.quadrantlabelfontitalic)?"italic":"normal",v(f.styleObj),g=g?Q(g,e(p.quadrantlabelbrbgalpha,
p.quadrantlabelbgalpha,p.quadrantlabelbralpha,p.quadrantlabelalpha,100)):"",a=e(p.quadrantlabelbrborderpadding,p.quadrantlabelborderpadding,2),d=e(p.quadrantlabelbrborderradius,p.quadrantlabelborderradius,0),h=e(p.quadrantlabelbrborderdashed,p.quadrantlabelborderdashed,0)?M(e(p.quadrantlabelbrborderdashlen,p.quadrantlabelborderdashlen,4),e(p.quadrantlabelbrborderdashgap,p.quadrantlabelborderdashgap,2),n):"none",f["text-bound"]=[g,b,n,a,d,h])},_preDraw:function(){var b,a,c,e,d,g;c=this.conf;var k=
this.chart;e=k.components;g=e.yAxis[0];d=e.xAxis[0].getLimit();var l=g.getLimit();e=d.max;g=l.max;var f=d.min;d=l.min;var k=k.config,m=k.canvasWidth,p=k.canvasHeight,k=c.quadrantLabelPadding,l=c.tlConfig,r=c.trConfig,v=c.blConfig,t=c.brConfig;b=c.xVal||(c.xVal=(f+e)/2);a=c.yVal||(c.yVal=(d+g)/2);if(a>=d&&a<=g&&b>=f&&b<=e){c=m/(e-f)*(b-f);e=m-c;g=p/(g-d)*(a-d);c-=k;d=p-g-k;g-=k;if(0>d||0>c)l.enabled=!1;if(0>d||0>e-k)r.enabled=!1;if(0>g||0>c)v.enabled=!1;if(0>g||0>c)t.enabled=!1}else c.enabled=!1;return this},
draw:function(){var b=this._preDraw(),a=b.conf,c=b.chart,e=c.graphics,d=c.config,g=c.components,k=c.linkedItems.smartLabel,b=b.graphics,l=b.tlLabel,f=b.trLabel,m=b.blLabel,p=b.brLabel,r=d.textDirection,v=g.xAxis[0],t=g.yAxis[0],g=g.paper,B=b.container,w=a.tlConfig||{},z=a.trConfig||{},C=a.blConfig||{},E=a.brConfig||{},w=w.enabled&&w.label,z=z.enabled&&z.label,C=C.enabled&&C.label,E=E.enabled&&E.label,H=d.canvasLeft,F=d.canvasTop,I=a.quadrantLabelPadding,G=v.getLimit(),J=t.getLimit(),M=G.max,L=J.max,
J=J.min,G=v.getPixel(G.min)+I,M=v.getPixel(M)-I,J=t.getPixel(J)-I,I=t.getPixel(L)+I,v=v.getPixel(a.xVal),O=t.getPixel(a.yVal),t=v-G,L=M-v,Q=O-I,N=J-O,P=b.horizontalQuadLine,X=b.verticalQuadLine,T=c.get("config","animationObj"),c=T.duration||0,aa=T.dummyObj,T=T.animObj,ha=!1;a.enabled?(B||(ha=!0,B=b.container=g.group("quadrant").insertBefore(e.datasetGroup)),B.animateWith(aa,T,{"clip-rect":d.canvasLeft+","+d.canvasTop+","+d.canvasWidth+","+d.canvasHeight},ha?0:c),P||(P=b.horizontalQuadLine=g.path(B)),
P.animateWith(aa,T,{path:"M"+H+" "+O+"h"+d.canvasWidth},c).attr({stroke:a.quadrantLineColor,"stroke-dasharray":a.dashStyle,"stroke-width":a.quadrantLineThickness,"stroke-linecap":"butt"}),X||(X=b.verticalQuadLine=g.path(B)),X.animateWith(aa,T,{path:"M"+v+" "+F+"v"+d.canvasHeight},c).attr({stroke:a.quadrantLineColor,"stroke-width":a.quadrantLineThickness,"stroke-dasharray":a.dashStyle,"stroke-linecap":"butt"}),w?(l||(l=b.tlLabel=g.text(B).attr({"text-anchor":Ya,"vertical-align":Ma}).css(a.tlConfig.styleObj)),
k.useEllipsesOnOverflow(d.useEllipsesWhenOverflow),k.setStyle(a.tlConfig.styleObj),e=k.getSmartText(w,t,Q),w&&l.animateWith(aa,T,{x:G,y:I},ha?0:c).attr({text:e.text,direction:r,"text-bound":a.tlConfig["text-bound"]}).show()):l&&l.hide(),z?(f||(f=b.trLabel=g.text(B).attr({"text-anchor":gb,"vertical-align":Ma,direction:r}).css(a.trConfig.styleObj)),k.setStyle(a.trConfig.styleObj),e=k.getSmartText(z,L,Q),z&&f.animateWith(aa,T,{x:M,y:I},ha?0:c).attr({text:e.text,"text-bound":a.trConfig["text-bound"]}).show()):
f&&f.hide(),C?(m||(m=b.blLabel=g.text(B).attr({"text-anchor":Ya,"vertical-align":hb,direction:r}).css(a.blConfig.styleObj)),k.setStyle(a.blConfig.styleObj),e=k.getSmartText(C,t,N),C&&m.animateWith(aa,T,{x:G,y:J},ha?0:c).attr({text:e.text,"text-bound":a.blConfig["text-bound"]}).show()):m&&m.hide(),E?(p||(p=b.brLabel=g.text(B).attr({"text-anchor":gb,"vertical-align":hb,direction:r}).css(a.brConfig.styleObj)),k.setStyle(a.brConfig.styleObj),e=k.getSmartText(E,L,N),E&&p.animateWith(aa,T,{x:M,y:J},ha?
0:c).attr({text:e.text,"text-bound":a.brConfig["text-bound"]}).show()):p&&p.hide()):B&&B.hide()}}]);FusionCharts.register("component",["dataset","Scatter",{type:"scatter",configure:function(){var b,d,g,l=this.chart,h=l.components,n=k.parseUnsafeString,q=this.config,m=this.JSONData,f=l.areaAlpha,p=l.jsonData.chart,r=h.colorManager;b=e(m.showplotborder,p.showplotborder||1);var v=r.getPlotColor(this.index),t=q.lineDashed=e(m.linedashed,m.dashed,p.linedashed,0),w=this.isLineSet;q.plotColor=v;g=e(l.defaultPlotShadow,
r.getColor("showShadow"));q.xAxisLabelMode=c(p.xaxislabelmode,"categories");q.toolTipSepChar=c(p.tooltipsepchar,", ");q.parentYAxis=w?d=1:d="s"===c(m.parentyaxis&&m.parentyaxis.toLowerCase(),"p")?1:0;this.yAxis=h.yAxis[d];q.connectNullData=e(p.connectnulldata,0);q.includeInLegend=e(m.includeinlegend,1);q.enableAnimation=d=e(p.animation,p.defaultanimation,1);q.animation=d?{duration:1E3*e(p.animationduration,1)}:!1;q.transposeanimation=e(p.transposeanimation,d);q.transposeanimduration=1E3*e(p.transposeanimduration,
.2);q.showValues=e(m.showvalues,p.showvalues);q.valuePadding=e(p.valuepadding,2);q.valuePosition=c(m.valueposition,p.valueposition,"auto");q.showTooltip=e(p.showtooltip,1);q.seriesNameInTooltip=e(p.seriesnameintooltip,1);q.showRegressionLine=e(m.showregressionline,p.showregressionline,0);q.plotFillColor=c(m.color,p.plotfillcolor,v);q.plotFillAngle=c(p.plotfillangle,270);q.plotFillAlpha=c(m.alpha,p.plotfillalpha,f,"70");f=e(p.useplotgradientcolor,1);q.plotGradientColor=0!==f?k.getDefinedColor(p.plotgradientcolor,
r.getColor("plotGradientColor")):"";q.fillColor={color:q.plotFillColor+(q.plotGradientColor?","+q.plotGradientColor:a),alpha:q.plotFillAlpha,angle:q.plotFillAngle};q.plotBorderAlpha=b?c(m.plotborderalpha,p.plotborderalpha,m.alpha,"95"):0;q.plotBorderColor=c(m.plotbordercolor,p.plotbordercolor,p.areabordercolor,"666666");q.dashed=b=e(m.dashed,p.plotborderdashed);q.plotBorderDashLen=c(m.plotborderdashlen,p.plotborderdashlen,5);q.plotBorderDashGap=c(m.plotborderdashgap,p.plotborderdashgap,4);q.plotBorderThickness=
e(m.plotborderthickness,p.plotborderthickness,1);q.plotBorderDashStyle=b?k.getDashStyle(q.plotBorderDashLen,q.plotBorderDashGap,q.plotBorderThickness):"none";q.showHoverEffect=e(p.plothovereffect,p.anchorhovereffect,p.showhovereffect,void 0);q.rotateValues=e(p.rotatevalues)?270:0;q.drawLine=e(m.drawline,p.drawlines,0);q.lineThickness=e(m.linethickness,p.linethickness,2);q.lineDashLen=e(m.linedashlen,p.linedashlen,5);q.lineDashGap=e(m.linedashgap,p.linedashgap,4);q.lineAlpha=e(m.linealpha,p.linealpha,
m.alpha,oa);q.lineColor=c(m.linecolor,p.linecolor,m.color,q.plotColor);q.lineDashStyle=k.getDashStyle(q.lineDashLen,q.lineDashGap,q.lineThickness);q.lineDashStyle=t?q.lineDashStyle:"none";q.shadow={opacity:e(p.showshadow,g)?q.lineAlpha/100:0};q.drawanchors=e(m.drawanchors,m.showanchors,p.drawanchors,p.showanchors);q.anchorbgcolor=ib(c(m.anchorbgcolor,p.anchorbgcolor,r.getColor("anchorBgColor")));q.anchorbordercolor=ib(c(m.anchorbordercolor,m.color,p.anchorbordercolor,q.lineColor));q.anchorradius=
e(m.anchorradius,p.anchorradius,3);q.anchoralpha=c(m.anchoralpha,m.alpha,p.anchoralpha,oa);q.anchorbgalpha=c(m.anchorbgalpha,m.alpha,p.anchorbgalpha,oa);q.anchorborderthickness=c(m.anchorborderthickness,p.anchorborderthickness,1);q.anchorsides=e(m.anchorsides,p.anchorsides,this.index+3);q.anchorimageurl=c(m.anchorimageurl,p.anchorimageurl);q.anchorimagealpha=e(m.anchorimagealpha,p.anchorimagealpha,100);q.anchorimagescale=e(m.anchorimagescale,p.anchorimagescale,100);q.anchorimagepadding=e(m.anchorimagepadding,
p.anchorimagepadding,1);q.anchorstartangle=e(m.anchorstartangle,p.anchorstartangle,90);q.anchorshadow=e(m.anchorshadow,p.anchorshadow,0);q.plotToolText=k.getValidValue(n(c(m.plottooltext,p.plottooltext)));q.showRegressionLine&&(q.regressionObj={isRegression:!0,sumX:0,sumY:0,sumXY:0,sumXsqure:0,sumYsqure:0,xValues:[],yValues:[]},q.showYOnX=e(m.showyonx,p.showyonx,1),q.regressionLineColor=ib(c(m.regressionlinecolor,p.regressionlinecolor,q.anchorbordercolor)),q.regressionLineThickness=e(m.regressionlinethickness,
p.regressionlinethickness,q.anchorborderthickness),q.regressionLineAlpha=aa(e(m.regressionlinealpha,p.regressionlinealpha,q.anchoralpha)),q.regLineColor=B({color:q.regressionLineColor,alpha:q.regressionLineAlpha}));q.seriesNameInTooltip&&(q.seriesname=k.getFirstValue(m&&m.seriesname));this.visible=1===e(m.visible,!Number(m.initiallyhidden),1);this._setConfigure();!1!==l.hasLegend&&this._addLegend()},_setConfigure:function(){var b,d,g,l,h,n,q,m,f,p=-Infinity,r=Infinity,v=Infinity,t=-Infinity,B=this.components.data||
(this.components.data=[]);b=this.chart;var w=k.parseUnsafeString,z=this.config,C=this.JSONData,E=b.jsonData.chart,H=C.data||[],F=H.length,I=b.components.numberFormatter,G=w(E.yaxisname),J=w(E.xaxisname),M=z.lineDashed,L=z.lineDashStyle,Q=z.parentYAxis,O=z.toolTipSepChar,N=z.seriesname;for(b=z.imageCount=0;b<F;b+=1)l=H[b],g=B[b]||(B[b]={}),d=g.config||(g.config={}),d.setValue=h={x:I.getCleanValue(l.x),y:I.getCleanValue(l.y)},null!==h.x&&null!==h.y&&(h.x>t&&(t=h.x,z.rightMostData=g),h.x<v&&(v=h.x,z.leftMostData=
g),h.y>p&&(p=h.y,z.topMostData=g),h.y<r&&(r=h.y,z.bottomMostData=g)),z.showRegressionLine&&this.pointValueWatcher(h.x,h.y,z.regressionObj),d.setLink=c(l.link),d.anchorProps=this._parseAnchorProperties(b),d.showValue=e(l.showvalue,z.showValues),d.dashed=e(l.dashed,M),d.color=c(l.color,z.lineColor),d.alpha=c(l.alpha,z.lineAlpha),d.dashStyle=d.dashed?L:"none",d.toolTipValue=n=I.dataLabels(h.y,Q),d.setDisplayValue=f=w(l.displayvalue),m=d.formatedVal=c(l.toolTipValue,I.dataLabels(h.y,Q)),q=I.xAxis(h.x),
d.displayValue=c(f,n),d.setTooltext=k.getValidValue(w(c(l.tooltext,z.plotToolText))),z.showTooltip?void 0!==d.setTooltext?(h=[4,5,6,7,8,9,10,11],q={yaxisName:G,xaxisName:J,yDataValue:m,xDataValue:q},l=ba(d.setTooltext,h,q,l,E,C)):null===m?l=!1:(l=N?N+O:a,l+=h.x?q+O:a,l+=n):l=!1,d.toolText=l,g?g.graphics||(B[b].graphics={}):g=B[b]={graphics:{}},d.hoverEffects=this._parseHoverEffectOptions(g),d.anchorProps.isAnchorHoverRadius=d.hoverEffects.anchorRadius;z.xMax=t;z.xMin=v;z.yMin=r;z.yMax=p;z.showRegressionLine&&
(z.regressionData=this.getRegressionLineSeries(z.regressionObj,z.showYOnX,F));this.ErrorValueConfigure&&this.ErrorValueConfigure()},sortFN:function(b,a){return b-a},getRegressionLineSeries:function(b,a,c){var e,d,g,k;k=b.sumXY;var l=b.sumX,f=b.sumY;d=b.xValues;g=b.sumXsqure;e=b.yValues;b=b.sumYsqure;a?(d.sort(this.sortFN),e=d[0],d=d[d.length-1],k=(c*k-l*f)/(c*g-tb(l,2)),g=!isNaN(k)&&isFinite(k)?k*(e-l/c)+f/c:f/c,c=!isNaN(k)&&isFinite(k)?k*(d-l/c)+f/c:f/c,c=[{x:e,y:g},{x:d,y:c}]):(e.sort(this.sortFN),
g=e[0],e=e[e.length-1],k=(c*k-l*f)/(c*b-tb(f,2)),d=isNaN(k)?l/c:k*(g-f/c)+l/c,c=isNaN(k)?l/c:k*(e-f/c)+l/c,c=[{x:d,y:g},{x:c,y:e}]);return c},draw:function(){var b,a,e,d,g,n,l,m,f,p,r,v,t,w,C,E,H,F,I,G=this.JSONData,J=this.chart,M=J.getJobList(),L=J.components,Q=this.components.removeDataArr,Q=Q&&Q.length,N=J.jsonData.chart,R=this.config,O=this.index,P=G.data||[],T=J.config,X=L.paper,aa=L.xAxis[0],L=L.yAxis[0],da=k.parseUnsafeString,ha=k.getValidValue,W=this.components.data,U=W.length;H={};a={};var V=
R.lineThickness;a=J.graphics;n=a.datalabelsGroup;var ba=this.graphics.container,Z=this.graphics.trackerContainer;w=a.trackerGroup;var oa=this.pool||(this.pool={}),la=R.connectNullData,fa=R.showTooltip;a=a.datasetGroup;var ga=R.shadow,ja=this.graphics.dataLabelContainer;g={};var qa=[Ja(0,T.canvasLeft),Ja(0,T.canvasTop),Ja(1,T.canvasWidth),Ja(1,T.canvasHeight)],T=[Ja(0,T.canvasLeft),Ja(0,T.canvasTop),1,Ja(1,T.canvasHeight)],na=R.lineDashStyle,sa={color:R.lineColor,alpha:R.lineAlpha},ma=[],ta=[],Ba=
null,za=[],Aa=!1,ya=this.graphics.lineElement;g=this.graphics.regressionLineElement;var va=this.visible,pa=J.get("config","animationObj"),J=pa.duration||0,xa=pa.dummyObj,Ca=pa.animObj,pa=pa.animType,Ga=0;R.imagesLoaded=0;a.line=a.line||X.group("line",a);a.lineConnector=a.lineConnector||X.group("line-connector",a);ba||(ba=this.graphics.container={lineShadowGroup:X.group("connector-shadow",a.lineConnector),anchorShadowGroup:X.group("anchor-shadow",a.lineConnector),lineGroup:X.group("connector",a.lineConnector),
anchorGroup:X.group("anchors",a.lineConnector)});Z||(Z=this.graphics.trackerContainer=X.group("line-hot"));W||(W=this.components.data=[]);w&&w.appendChild(Z);ja||(ja=this.graphics.dataLabelContainer=X.group("datalabel",n).attr("class","fusioncharts-datalabels"));R.showRegressionLine&&va?(n=R.regressionData[0],w=R.regressionData[1],(a=R._regressionAttr)||(R._regressionAttr=a={}),a.stroke=R.regLineColor,a["stroke-width"]=R.regressionLineThickness,a["stroke-linecap"]="round",a["stroke-linejoin"]=2<R.regressionLineThickness?
"round":"miter",a.path="M "+aa.getAxisPosition(n.x)+","+L.getAxisPosition(n.y)+" L "+aa.getAxisPosition(w.x)+","+L.getAxisPosition(w.y),g?g.animateWith(xa,Ca,a,J,pa):g=this.graphics.regressionLineElement=X.path(a,ba.regLineGroup),g.show()):g&&g.hide();for(n=0;n<U;n+=1)if(g=P[n],w=W[n],F=w.config,e=F.trackerConfig={},a=w.graphics,v=F.setValue,r=F.setLink,ha(da(c(g.tooltext,G.plottooltext,N.plottooltext))),g=F.anchorProps,H=g.symbol,C=g.shadow,t=F.displayValue,w||(w=W[n]={graphics:{}}),d=v.y,b=v.x,
f=F.finalTooltext=F.toolText,null!==d&&null!==b){E=F.hoverEffects;l=aa.getAxisPosition(b);m=L.getAxisPosition(d);F.eventArgs={index:n,link:r,x:b,y:d,value:v,displayValue:t,toolText:f,id:R.userID,datasetIndex:O||0,datasetName:G.seriesname,visible:va};if(g.imageUrl)F.anchorImageLoaded=!1,e=new z,F.anchorImageLoaded=!1,va||a.image&&a.image.animateWith(xa,Ca,{opacity:0},J,pa),e.onload=this._onAnchorImageLoad(this,n,void 0,l,m),e.onerror=this._onErrorSetter(this,n),e.src=g.imageUrl,Ga++;else if(p=a.element,
(F=a.image)&&F.hide(),p||(p=oa.element&&oa.element.length?a.element=oa.element.shift():a.element=X.polypath(ba.anchorGroup),Aa=!0,J&&Aa&&p.attr({polypath:[H[1]||2,l,m,g.radius,g.startAngle,0],opacity:0,"fill-opacity":0,"stroke-opacity":0})),p.attr({fill:B({color:g.bgColor,alpha:g.bgAlpha}),stroke:B({color:g.borderColor,alpha:g.borderAlpha}),"stroke-width":g.borderThickness,cursor:r?"pointer":"",visibility:g.radius?va:Xa}).shadow(C,ba.anchorShadowGroup).animateWith(xa,Ca,{polypath:[H[1]||2,l,m,g.radius,
g.startAngle,0],opacity:va?g.bgAlpha/100:0,"fill-opacity":va?g.bgAlpha/100:0,"stroke-opacity":va?g.borderAlpha/100:0},J,pa),r||fa||E)a=Ja(g.radius,E.anchorRadius||0),e.trackerRadius=a;E.enabled&&(a={polypath:[E.anchorSides||2,l,m,E.anchorRadius,E.startAngle,E.dip],fill:B({color:E.anchorColor,alpha:E.anchorBgAlpha}),stroke:B({color:E.anchorBorderColor,alpha:E.anchorBorderAlpha}),"stroke-width":E.anchorBorderThickness},H={polypath:[H[1]||2,l,m,g.radius,g.startAngle,0],fill:B({color:g.bgColor,alpha:g.bgAlpha}),
stroke:B({color:g.borderColor,alpha:g.borderAlpha}),"stroke-width":g.borderThickness},p&&p.data("anchorRadius",g.radius).data("anchorHoverRadius",E.anchorRadius).data(Oa,a).data(wa,H));g.isAnchorHoverRadius=E.anchorRadius;null!==Ba?(za.length&&(ma=ma.concat(za),za.length=0),ma.join("")||ma.push("M",I,Ba),ma.push("L",l,m)):za.push("M",l,m);I=l;Ba=m;w._xPos=l;w._yPos=m}else za.length=0,la||(Ba=null);ma.length&&(ta=ta.concat(ma));R.drawLine&&ta.join("")?(ya||(ya=this.graphics.lineElement=X.path({path:ta},
ba.lineGroup),Aa=!0),va&&ya.attr({"stroke-dasharray":na,"stroke-width":V,stroke:B(sa),"stroke-linecap":"round","stroke-linejoin":2<=V?"round":"miter"}),va?ya.animateWith(xa,Ca,{path:ta,"stroke-opacity":1},J,pa,function(){this.shadow(ga,ba.lineShadowGroup)}):ya.animateWith(xa,Ca,{path:ta,"stroke-opacity":0},Aa?0:J,pa).shadow(!1)):ya&&ya.animateWith(xa,Ca,{"stroke-opacity":0},J,pa).shadow(!1);R.totalImages=R.noOfImages=Ga;0===Ga&&(M.trackerDrawID.push(mb.addJob(this.drawTracker,this,[],k.priorityList.tracker)),
this.drawn?this.drawLabel():M.labelDrawID.push(mb.addJob(this.drawLabel,this,[],k.priorityList.label)));ba.lineShadowGroup.hide();ba.anchorShadowGroup.hide();ja.hide();Aa&&ba.lineGroup.attr({"clip-rect":T});ba.lineGroup.animateWith(xa,Ca,{"clip-rect":qa},J,pa,function(){ba.lineGroup.attr({"clip-rect":null});va?(ba.lineShadowGroup.show(),ba.anchorShadowGroup.show(),ba.anchorGroup.show(),Z.show(),ja&&ja.show()):(ba.lineShadowGroup.hide(),ba.anchorShadowGroup.hide(),ba.anchorGroup.hide(),Z.hide(),ja&&
ja.hide())});Q&&this.remove();this.drawErrorValue&&this.drawErrorValue();this.drawn=!0},getDataLimits:function(){var a=this.config,c=a.yMax,e=a.yMin,d=a.xMax,a=a.xMin,g=this.chart.config.transposeAxis;!1===this.visible&&g&&(c=-Infinity,e=Infinity,d=-Infinity,a=Infinity);return{max:c,min:e,xMax:d,xMin:a}},getAxisValuePadding:function(){return{left:0,right:0}},_addLegend:function(){var a,d=this.config,g=this.chart.components.legend,k=e(d.drawanchors,1);a=this.getPointColor(d.anchorbgcolor,oa);var h=
{FCcolor:{color:d.anchorbordercolor,alpha:d.anchoralpha}};g.config.symbol3DLighting?a&&a.FCcolor?(a=m({},a),a.FCcolor.alpha="100"):a=c(a):a={FCcolor:{color:c(a&&(a.FCcolor&&a.FCcolor.color.split(",")[0]||a)),angle:0,ratio:"0",alpha:"100"}};this.legendItemId=g.addItems(this,this.legendInteractivity,{enabled:d.includeInLegend,type:this.type,drawLine:c(d.drawLine,!0),fillColor:B(a),strokeColor:B(c(h&&(h.FCcolor&&h.FCcolor.color.split(",")[0]||h))),rawFillColor:d.anchorbgcolor,rawStrokeColor:d.anchorbordercolor,
anchorSide:k?d.anchorsides:0,strokeWidth:d.anchorborderthickness,label:ja(this.JSONData.seriesname)})},getPointColor:function(a,c){var e,d;a=ib(a);c=aa(c);e=ob(a,70);d=X(a,50);return{FCcolor:{gradientUnits:"objectBoundingBox",cx:.4,cy:.4,r:"100%",color:e+","+d,alpha:c+","+c,ratio:P,radialGradient:!0}}}},"Line"]);FusionCharts.register("component",["dataset","Pareto",{configure:function(){var a=this.chart,d=this.config,g=a.components,l=g.xAxis[0],h=this.JSONData,n=h.data,q=n&&n.length,p=a.jsonData.chart,
f=g.colorManager,r,v=f.getPlotColor(this.index||this.positionIndex),t=e(h.dashed,p.plotborderdashed),w=e(p.useplotgradientcolor,1),z=e(p.showtooltip,1),C=k.parseUnsafeString,E=C(p.yaxisname),H=C(p.xaxisname),F=k.parseTooltext,I,G,J,M,L,S,N,R,O,P,T,X,aa,da,ha,W=k.getDashStyle,U=this.components.data,g=g.numberFormatter,V,ba=a.is3D,Z,la,fa,ja,ga,na,qa,ta,sa=-Infinity,ma=Infinity,wa=this.type.toLowerCase(),xa,za,Aa=0,ya=[],va=0,pa,Ga=d.tootipSepChar=c(p.tooltipsepchar,", ");d.enableAnimation=N=e(p.animation,
p.defaultanimation,1);d.animation=N?{duration:1E3*e(p.animationduration,1)}:!1;d.showTooltip=e(p.showtooltip,1);d.valuePadding=e(p.valuepadding,2);d.rotateValues=e(p.rotatevalues)?270:0;d.showHoverEffect=N=e(p.plothovereffect,p.showhovereffect,void 0);d.showShadow=S||ba?e(p.showshadow,1):e(p.showshadow,f.getColor("showShadow"));d.useDataPlotColorForLabels=pa=e(p.usedataplotcolorforlabels,0);d.use3dlineshift=e(p.use3dlineshift,a.use3dlineshift);/column/.test(wa)&&(r=d.showplotborder=e(p.showplotborder,
ba?0:1),d.plotDashLen=J=e(p.plotborderdashlen,5),d.plotDashGap=M=e(p.plotborderdashgap,4),d.plotfillangle=R=e(360-p.plotfillangle,90),d.plotfillalpha=O=c(p.plotfillalpha,oa),d.plotColor=v,d.isRoundEdges=S=e(p.useroundedges,0),d.plotRadius=e(p.useRoundEdges,d.isRoundEdges?1:0),d.plotfillratio=P=c(p.plotfillratio),d.plotgradientcolor=T=k.getDefinedColor(p.plotgradientcolor,f.getColor("plotGradientColor")),!w&&(T=""),d.plotborderalpha=X=r&&!ba?c(p.plotborderalpha,O,oa):0,d.plotbordercolor=aa=c(p.plotbordercolor,
ba?"#ffffff":f.getColor("plotBorderColor")),d.plotborderthickness=L=e(p.plotborderthickness,1),d.plotBorderDashStyle=da=t?W(J,M,L):"none",d.showValues=e(p.showvalues,1),d.definedGroupPadding=Ja(e(p.plotspacepercent),0),d.plotSpacePercent=Ja(e(p.plotspacepercent,20)%100,0),d.maxcolwidth=e(p.maxcolwidth,50),d.plotpaddingpercent=e(p.plotpaddingpercent),d.placevaluesinside=e(p.placevaluesinside,0),d.use3dlighting=e(p.use3dlighting,1),d.parentYAxis=0);"line"===wa&&(d.linecolor=ib(c(p.linecolor,f.getColor("plotBorderColor"))),
d.linethickness=e(p.linethickness,2),d.linealpha=c(p.linealpha,oa),d.linedashed=e(p.linedashed,0),d.linedashlen=e(h.linedashlen,p.linedashlen,5),d.linedashgap=e(h.linedashgap,p.linedashgap,4),t=k.getDashStyle(d.linedashlen,d.linedashgap,d.linethickness),d.lineDashStyle=d.linedashed?t:"none",d.drawanchors=e(p.drawanchors,p.showanchors),d.anchorbgcolor=c(p.anchorbgcolor,f.getColor("anchorBgColor")),d.anchorbordercolor=c(p.anchorbordercolor,d.linecolor),d.anchorradius=e(p.anchorradius,3),d.anchoralpha=
c(p.anchoralpha),d.anchorbgalpha=c(p.anchorbgalpha,100),d.anchorborderthickness=c(p.anchorborderthickness,1),d.anchorsides=c(p.anchorsides,0),d.anchorimageurl=c(p.anchorimageurl),d.anchorimagealpha=e(p.anchorimagealpha,100),d.anchorimagescale=e(p.anchorimagescale,100),d.anchorimagepadding=e(p.anchorimagepadding,1),d.anchorstartangle=e(p.anchorstartangle,90),d.parentYAxis=1,d.valuePosition=c(p.valueposition,"auto"),d.showValues=e(p.showlinevalues,p.showvalues,1),d.showShadow&&(d.shadow={opacity:d.lineAlpha/
100}),d.showCumulativeLine=e(p.showcumulativeline,1));U||(U=this.components.data=[]);for(t=0;t<q;t++)w=Sa(g.getCleanValue(n[t].value)),Aa+=w,ya[t]=m({},n[t]),ya[t].value=w;ya.sort(function(a,b){return b.value-a.value});for(t=d.imageCount=0;t<q;t++)w=ya[t],(v=U[t])||(v=U[t]={graphics:{}}),v.config||(n=U[t].config={}),a=Sa(g.getCleanValue(w.value)),null!==a&&(n=v&&v.config,V=l.getLabel(t),n.label=Ba(C(c(V.label))),n.showValue=e(w.showvalue,d.showValues),n.setValue=a,n.setLink=c(w.link),n.setDisplayValue=
V=C(w.displayvalue),va+=n.setValue,xa=g.dataLabels(a),/column/.test(wa)?(v=e(w.dashed),I=e(w.dashlen,J),ha=M=e(w.dashgap,M),n.plotBorderDashStyle=I=1===v?W(I,ha,L):0===v?"none":da,v=f.getPlotColor(t),v=c(w.color,v),P=c(w.ratio,d.plotfillratio),O=c(w.alpha,d.plotfillalpha),X=c(w.alpha,d.plotborderalpha),0>a&&!S&&(G=R,R=360-R),n.colorArr=ha=k.graphics.getColumnColor(v+","+T,O,P,R,S,aa,X.toString(),0,ba?!0:!1),0!==N&&(Z=c(w.hovercolor,p.plotfillhovercolor,p.columnhovercolor,v),la=c(w.hoveralpha,p.plotfillhoveralpha,
p.columnhoveralpha,O),fa=c(w.hovergradientcolor,p.plothovergradientcolor,T),!fa&&(fa=""),P=c(w.hoverratio,p.plothoverratio,P),ja=e(360-w.hoverangle,360-h.hoverangle,360-p.plothoverangle,R),ga=c(w.borderhovercolor,p.plotborderhovercolor,aa),X=c(w.borderhoveralpha,h.borderhoveralpha,p.plotborderhoveralpha,p.plotfillhoveralpha,X,O),O=e(w.borderhoverthickness,h.borderhoverthickness,p.plotborderhoverthickness,L),na=e(w.borderhoverdashed,p.plotborderhoverdashed),qa=e(w.borderhoverdashgap,p.plotborderhoverdashgap,
J),ta=e(w.borderhoverdashlen,p.plotborderhoverdashlen,M),na=na?W(ta,qa,O):I,1==N&&Z===v&&(Z=ob(Z,70)),Z=k.graphics.getColumnColor(Z+","+fa,la,P,ja,S,ga,X.toString(),0,ba?!0:!1),n.setRolloutAttr={fill:ba?[B(ha[0]),!d.use3dlighting]:B(ha[0]),stroke:r&&B(ha[1]),"stroke-width":L,"stroke-dasharray":I},n.setRolloverAttr={fill:ba?[B(Z[0]),!d.use3dlighting]:B(Z[0]),stroke:r&&B(Z[1]),"stroke-width":O,"stroke-dasharray":na}),pa&&l.updateCategory(t,{labelfontcolor:Q(v)}),n.displayValue=c(V,xa),I=n.setTooltext=
n.origToolText=Ba(C(c(w.tooltext,p.plottooltext))),n.toolTipValue=g.dataLabels(a,d.parentYAxis)):(a=n.setValue=va/Aa*100,za=g.percentValue(a),n.toolTipValue=za,n.displayValue=za,n.valuePosition=c(w.valueposition,d.valuePosition),n.anchorProps=this._parseAnchorProperties(t,ya),n.hoverEffects=this._parseHoverEffectOptions(v)),v=n.toolTipValue,sa=Ja(sa,a),ma=Na(ma,a),z?(d.showTooltip?void 0!==I?(v={formattedValue:v,label:n.label,yaxisName:E,xaxisName:H,cumulativeValue:va,cumulativeDataValue:g.dataLabels(va),
cumulativePercentValue:za,sum:g.dataLabels(Aa),unformattedSum:Aa},a=[1,2,3,5,6,7,20,21,22,23,24,25],w=F(I,a,v,w,p)):w=n.label?n.label+Ga:"":w=!1,n.toolText=w):w=!1,n.toolText=w,n.tooltext=I,n.setTooltext=w,G&&(R=G));d.maxValue=sa;d.minValue=ma},init:function(a,c,e){var d=a.chart.components;a.JSONData={data:c};a.type=e;a.yAxis="line"===e?d.yAxis[1]:d.yAxis[0];a.components={};a.graphics={};a.visible=!0;this.configure.call(a)}}]);FusionCharts.register("component",["datasetGroup","MSSplineArea",{},"area"]);
FusionCharts.register("component",["dataset","MSSplineArea",{configure:function(){FusionCharts.get("component",["dataset","area"]).prototype.configure.call(this);this._calculateMaxMin()},_calculateMaxMin:function(){var a=this.config,c=this.chart,e=c.config,d=c.origRenderWidth,g=e.connectnulldata,k=this.components.data,l=Number.MIN_VALUE,m=Number.MAX_VALUE;0===e.minimizetendency&&(c=c.getSplineExtremities(k,d,g),a.maxValue=Ja(a.maxValue,c.max),a.minValue=Na(a.minValue,c.min),a.maxValue===l&&(a.maxValue=
0),a.minValue===m&&(a.minValue=0))},getSplinePath:function(a,c,e,d){var g=function(a,b,c,f){b=(f-b)/xa((c-a)*(c-a)+(f-b)*(f-b));b=Sa(.5*b);return a*b+c*(1-b)},k=function(a,b,c,f){var e=a.length,d=a[e-1],g=d.length,h=d[0],d=d[g-2];3>g||("R"!==h&&"C"!==h||3!==g||(a[e-1][0]="L"),b&&a.push(["L",d,f,c,f,"Z"]))},l=/area/ig.test(this.defaultDatasetType),m=[null],f=[],p=[],v=c.getAxisBase();c=c.getAxisPosition(v);var r,t,B,w,z,C,E,H,F,I,G,J,M,L,Q,O;Q=0;for(O=a.length;Q<O;Q+=1)if(F=a[Q],B=a[Q-1]||{},w=a[Q+
1]||{},z=F.x,v=F.y,r=B.x,B=B.y,C=w.x,w=w.y,E=F.lastYPos,H=F.lastXPos,G=f.length,F=p.length,d)if(null!==E)if(t=M,Q===a.length-1){E=m[Q-J-1];F=C=(z+r)/2;G=(F-r)*E+B;if(B>v&&G<v||B<v&&G>v)G=v,F=(G-B)/E+r;M.push(F,G,C,(v+B)/2,z,v);f.push(M);p.push(M);l&&k(f,!0,L,c);l&&k(p,!1)}else{E=m[Q-J-1];if(B>v&&w>=v||B<v&&w<=v)if(I=0,C=g(r,B,z,v),w=v,1!==Q-J){F=C;G=(F-r)*E+B;if(B>v&&G<v||B<v&&G>v)G=v,F=(G-B)/E+r;M.push(F,G,C,w,z,v)}else M.push((z+r)/2,(v+B)/2,C,w,z,v);else if(B===v)I=0,M.push(r,B,z,v,z,v);else if(B>
v&&v>w||B<v&&v<w){I=(w-B)/(C-r);C=g(r,B,z,v);w=(C-z)*I+v;if(B>v&&w>B||B<v&&w<B)w=B,C=(w-v)/I+z;if(1!==Q-J){F=C;G=(F-r)*E+B;if(B>v&&G<v||B<v&&G>v)G=v,F=(G-B)/E+r;M.push(F,G,C,w,z,v)}else M.push((z+r)/2,(v+B)/2,C,w,z,v)}m.push(I)}else null===E&&0!==Q?(t||(t=[]),"C"===t[0]&&(f.push(M),p.push(M),l&&k(f,!0,L,c),l&&k(p,!1)),f.push(["M",z,v]),p.push(["M",z,v]),L=z,M=["C"],J=Q,m=[null]):(f.push(["M",z,v]),p.push(["M",z,v]),L=z,M=["C"],J=Q);else null!==E?2<=G?("M"===f[G-1][0]&&f.push(["R"]),"M"===p[F-1][0]&&
p.push(["R"]),G=f.length,F=p.length,t=f[G-1],r=t.length,f[G-1].push(z),f[G-1].push(v),p[F-1].push(z),p[F-1].push(v),Q===e-1&&"R"===t[0]&&(k(f,!0,L,c),k(p,!1))):(f.push(["M",H,E]),f.push(["R",z,v]),p.push(["M",H,E]),p.push(["R",z,v]),L=H):null===E&&2<=G&&(t=f[G-1],"R"===t[0]&&(k(f,!0,L,c),k(p,!1)),f.push(["M",z,v]),p.push(["M",z,v]),L=z);t=f[f.length-1];l&&t&&(r=t.length,"Z"===t[r-1]||"R"!==t[0]&&"C"!==t[0]||(k(f,!0,L,c),k(p,!1)));l||(f=d?f:p,2<=f.length&&k(f,!1));return{closedPath:f,openPath:p}},
draw:function(){var a=this,c=a.config,e=a.chart,d=e.getJobList(),g=a.JSONData,l=e.config,q=e.components,m=q.canvas.config,f=a.index,p,v,r=q.paper,q=q.xAxis[0],t=a.yAxis,w,E,F,H,I=null,G=[],J=[],M=e.graphics,L=l.showtooltip,Q,S=a.components.data,N,R,O,P,X,T=l.connectnulldata,aa,da,ha=l.minimizetendency,W=t.getAxisBase(),U,V=c.plotbordercolor,ba=c.plotborderalpha,Z=c.plotBorderDashStyle,oa=c.plotborderthickness,la=a.graphics.container,fa=a.graphics.trackerContainer,ga=[],ja,qa=c.fillColor,na=M.areaGroup,
sa=e.get("config","animationObj"),ma=sa.duration,ta=sa.animType,Ba=a.components.removeDataArr||[],za=Ba.length,Aa=function(){!1!==a.visible||!1!==a._conatinerHidden&&void 0!==a._conatinerHidden||(la.areaGroup.hide(),Ca.hide(),la.lineShadowGroup.hide(),la.anchorShadowGroup.hide(),la.anchorGroup.hide(),fa.hide(),Ea&&Ea.hide(),a._conatinerHidden=!0)},ya=function(){na.area.attr({"clip-rect":null});na.area.node&&na.area.node.removeAttribute("clip-path");!1!==a.visible&&(la.lineShadowGroup.show(),la.anchorShadowGroup.show(),
la.anchorGroup.show(),Ea.show(),Ca.show())},va=c.shadow,pa,xa=a.visible;ja=M.trackerGroup;var Ca=la&&la.shadowContainer,Ga,ga={},ga=M.datalabelsGroup,Ea=a.graphics.dataLabelContainer,M=m.clip["clip-canvas"].slice(0),m=m.clip["clip-canvas-init"].slice(0),l=!l.drawfullareaborder,Fa=!0,Ia=a.components.pool||[],Ka=sa.dummyObj,sa=sa.animObj,Ha=a.graphics.connector,Na=0,Ma;c.imagesLoaded=0;la||(la=a.graphics.container={lineShadowGroup:r.group("connector-shadow",na.areaConnector),anchorShadowGroup:r.group("anchor-shadow",
na.areaConnector),areaGroup:r.group("area",na.area),anchorGroup:r.group("anchors",na.areaConnector)},xa||(la.lineShadowGroup.hide(),la.anchorShadowGroup.hide(),la.areaGroup.hide(),la.anchorGroup.hide()));Ca||(Ca=a.graphics.shadowContainer=r.group("shadows",na.shadows),xa||Ca.hide());fa||(fa=a.graphics.trackerContainer=r.group("area-hot",ja),xa||fa.hide());S||(S=a.components.data);Ea||(Ea=a.graphics.dataLabelContainer=a.graphics.dataLabelContainer||r.group("datalabel",ga),xa||Ea.hide());xa&&(la.lineShadowGroup.show(),
la.anchorShadowGroup.show(),la.areaGroup.show(),la.anchorGroup.show(),Ea.show(),Ca.show(),fa.show());p=q.getCategoryLen();ja=a.graphics.splineElement;for(v=0;v<p;v++)if(N=S[v])Q=N&&N.config,X=Q.setValue,P=Q.setLink,ga=Q.anchorProps,Ga=ga.shadow,w=Q.setLevelTooltext,Q&&(U=0<=X?Q.previousPositiveY:Q.previousNegativeY),O=N.graphics.element,E=N.graphics.hotElement,Ma=N.graphics.image,null===X?(O&&O.hide(),E&&E.hide(),Ma&&Ma.hide(),T||(I=null)):(t.getAxisPosition(U||W),F=t.getAxisPosition(X+(U||0)),E=
q.getAxisPosition(v),!1===xa&&ma&&(F=t.getPixel(t.getAxisBase())),pa=Q.hoverEffects,R=L?Q.toolText+(w?"":Q.toolTipValue):"",Q.finalTooltext=R,w=Q.eventArgs=Q.eventArgs||{},w.index=v,w.link=P,w.value=X,w.displayValue=Q.displayValue,w.categoryLabel=q.getLabel(v).label,w.toolText=R,w.id=a.userID,w.datasetIndex=f||0,w.datasetName=g.seriesname,w.visible=xa,pa.enabled&&(Q.setRolloverAttr={polypath:[pa.anchorSides||2,E,F,pa.anchorRadius,pa.startAngle,pa.dip],fill:B({color:pa.anchorColor,alpha:pa.anchorBgAlpha}),
stroke:B({color:pa.anchorBorderColor,alpha:pa.anchorBorderAlpha}),"stroke-width":pa.anchorBorderThickness},Q.setRolloutAttr={polypath:[ga.symbol[1]||2,E,F,ga.radius,ga.startAngle,0],fill:B({color:ga.bgColor,alpha:ga.bgAlpha}),stroke:B({color:ga.borderColor,alpha:ga.borderAlpha}),"stroke-width":ga.borderThickness},da=Q.setRolloverAttr,aa=Q.setRolloutAttr),P=[ga.symbol[1]||2,E,F,ga.radius,ga.startAngle,0],ga.imageUrl?(Q.anchorImageLoaded=!1,Na++,Q=new z,Q.onload=a._onAnchorImageLoad(a,v,w,E,F),Q.onerror=
a._onErrorSetter(a,v),Q.src=ga.imageUrl):(Ma&&Ma.hide(),O||(Ia.element&&Ia.element.length?O=N.graphics.element=Ia.element.shift():(O=N.graphics.element=r.polypath(la.anchorGroup),O.attr({polypath:P}))),Ma&&Ma.hide(),O.show().animateWith(Ka,sa,{polypath:P},ma,ta,Fa&&void 0).attr({fill:B({color:ga.bgColor,alpha:ga.bgAlpha}),stroke:B({color:ga.borderColor,alpha:ga.borderAlpha}),"stroke-width":ga.borderThickness,visibility:ga.radius?xa:Xa}).shadow(Ga,la.anchorShadowGroup).data("anchorRadius",ga.radius).data("anchorHoverRadius",
pa.anchorRadius).data(Oa,da).data(wa,aa),pa.enabled&&O&&O.data("anchorRadius",ga.radius).data("anchorHoverRadius",pa.anchorRadius).data(Oa,da).data(wa,aa),Q.trackerConfig||(Q.trackerConfig={}),Q.trackerConfig.trackerRadius=Ja(ga.radius,pa&&pa.anchorRadius||0,C)+(ga.borderThickness||0)/2),N._xPos=E,N._yPos=F,J.push({x:E,y:F,lastXPos:H,lastYPos:I}),H=E,I=F);c.noOfImages=c.totalImages=Na;0===Na&&(d.trackerDrawID.push(mb.addJob(a.drawTracker,a,[],k.priorityList.tracker)),d.labelDrawID.push(mb.addJob(a.drawLabel,
a,[],k.priorityList.label)));ga=this.getSplinePath.call(e,J,t,p,ha).closedPath;ga=ga.join();ja||(ja=a.graphics.splineElement=r.path(la.areaGroup),ja.attr({path:ga}),ma&&xa&&(la.anchorGroup.hide(),la.anchorShadowGroup.hide(),Ea.hide(),Ca.hide(),na.area.attr({"clip-rect":m}).animateWith(Ka,sa,{"clip-rect":M},ma,ta,ya)));""===ga?ja.hide():ja.show().animateWith(Ka,sa,{path:ga},ma,ta,Fa&&Aa);Fa=!1;ja.attr({stroke:B({color:V,alpha:ba}),"stroke-width":l?0:oa,fill:B(qa),"stroke-linecap":"round","stroke-linejoin":2<
oa?"round":"miter","stroke-dasharray":Z}).shadow(va,Ca);l&&(Ha||(Ha=a.graphics.connector=r.path(la.areaGroup)),Ha.animateWith(Ka,sa,{path:G},ma,ta),Ha.attr({stroke:B({color:V,alpha:ba}),"stroke-width":oa,"stroke-linecap":"round","stroke-linejoin":2<oa?"round":"miter","stroke-dasharray":Z}));for(v=0;v<za;v++)a._removeDataVisuals(Ba.shift())}},"area"]);FusionCharts.register("component",["dataset","MSSpline",{type:"spline",configure:function(){var a=FusionCharts.get("component",["dataset","line"]),c=
FusionCharts.get("component",["dataset","MSSplineArea"]);a.prototype.configure.call(this);c.prototype._calculateMaxMin.call(this)},getSplinePath:function(a,c,e){var d=function(a,b,c,f){b=(f-b)/xa((c-a)*(c-a)+(f-b)*(f-b));b=Sa(.5*b);return a*b+c*(1-b)},g=function(a,b,c,f){var e=a.length,d=a[e-1],g=d.length,h=d[0],d=d[g-2];3>g||("R"!==h&&"C"!==h||3!==g||(a[e-1][0]="L"),b&&a.push(["L",d,f,c,f,"Z"]))},k=this.chart,l=/area/ig.test(k.defaultDatasetType);c=c.getAxisPosition(c.getAxisBase());var k=k.config.minimizetendency,
m=[null],f=[],p=[],v,r,t,B,w,z,C,E,F,H,I,G,J,M,Q,L,O;L=0;for(O=a.length;L<O;L+=1)if(H=a[L],B=a[L-1]||{},w=a[L+1]||{},z=H.x,t=H.y,v=B.x,B=B.y,C=w.x,w=w.y,E=H.lastYPos,F=H.lastXPos,G=f.length,H=p.length,k)if(null!==E)if(r=M,L===a.length-1){E=m[L-J-1];H=C=(z+v)/2;G=(H-v)*E+B;if(B>t&&G<t||B<t&&G>t)G=t,H=(G-B)/E+v;M.push(H,G,C,(t+B)/2,z,t);f.push(M);p.push(M);l&&g(f,!0,Q,c);l&&g(p,!1)}else{E=m[L-J-1];if(B>t&&w>=t||B<t&&w<=t)if(I=0,C=d(v,B,z,t),w=t,1!==L-J){H=C;G=(H-v)*E+B;if(B>t&&G<t||B<t&&G>t)G=t,H=(G-
B)/E+v;M.push(H,G,C,w,z,t)}else M.push((z+v)/2,(t+B)/2,C,w,z,t);else if(B===t)I=0,M.push(v,B,z,t,z,t);else if(B>t&&t>w||B<t&&t<w){I=(w-B)/(C-v);C=d(v,B,z,t);w=(C-z)*I+t;if(B>t&&w>B||B<t&&w<B)w=B,C=(w-t)/I+z;if(1!==L-J){H=C;G=(H-v)*E+B;if(B>t&&G<t||B<t&&G>t)G=t,H=(G-B)/E+v;M.push(H,G,C,w,z,t)}else M.push((z+v)/2,(t+B)/2,C,w,z,t)}m.push(I)}else null===E&&0!==L?(r||(r=[]),"C"===r[0]&&(f.push(M),p.push(M),l&&g(f,!0,Q,c),l&&g(p,!1)),f.push(["M",z,t]),p.push(["M",z,t]),Q=z,M=["C"],J=L,m=[null]):(f.push(["M",
z,t]),p.push(["M",z,t]),Q=z,M=["C"],J=L);else null!==E?2<=G?("M"===f[G-1][0]&&f.push(["R"]),"M"===p[H-1][0]&&p.push(["R"]),G=f.length,H=p.length,r=f[G-1],v=r.length,f[G-1].push(z),f[G-1].push(t),p[H-1].push(z),p[H-1].push(t),L===e-1&&"R"===r[0]&&(g(f,!0,Q,c),g(p,!1))):(f.push(["M",F,E]),f.push(["R",z,t]),p.push(["M",F,E]),p.push(["R",z,t]),Q=F):null===E&&2<=G&&(r=f[G-1],"R"===r[0]&&(g(f,!0,Q,c),g(p,!1)),f.push(["M",z,t]),p.push(["M",z,t]),Q=z);r=f[f.length-1];l&&r&&(v=r.length,"Z"===r[v-1]||"R"!==
r[0]&&"C"!==r[0]||(g(f,!0,Q,c),g(p,!1)));l||(f=k?f:p,2<=f.length&&g(f,!1));return{closedPath:f,openPath:p}},draw:function(){var a=this,e=a.JSONData,d=[],g=[],h=a.chart,g=h.getJobList(),l=h.components,q=l.canvas.config,m=a.config,f=h.config,p=a.index||a.positionIndex,v=f.categories,r=l.paper,t=l.xAxis[0],w=a.yAxis,E,F,H=h.graphics,I=H.datalabelsGroup,G=k.parseUnsafeString,J=k.getValidValue,M,L,Q,N,P,R,O=a.components.data,X,l=m.linethickness,T=a.graphics.container,aa=a.graphics.trackerContainer,ha=
H.trackerGroup,da=f.connectnulldata,f=f.showtooltip,W=H.datasetGroup,ba,H=m.shadow,U=a.graphics.dataLabelContainer,V={},la,Z,V=h.get("config","animationObj"),h=V.duration,oa=V.animType,fa=a.components.removeDataArr||[],ja=fa.length,ga=a.components.pool||[],na=function(){!1!==a.visible||!1!==a._conatinerHidden&&void 0!==a._conatinerHidden||(T.lineGroup.hide(),T.lineShadowGroup.hide(),T.anchorShadowGroup.hide(),T.anchorGroup.hide(),aa.hide(),U&&U.hide())},qa=function(){W.lineConnector.attr({"clip-rect":null});
W.lineConnector.node&&W.lineConnector.node.removeAttribute("clip-path");!1!==a.visible&&(T.lineShadowGroup.show(),T.anchorShadowGroup.show(),T.anchorGroup.show(),aa.show(),U&&U.show())},ta=a.config.animFlag=a.config.animFlag||(a.config.animFlag=!0),sa=q.clip["clip-canvas"].slice(0),q=q.clip["clip-canvas-init"].slice(0),ma=null,xa,Ba=!1,za=m.lineDashStyle,Aa={color:m.linecolor,alpha:m.alpha},ya,va,pa=V.dummyObj,Ga=V.animObj,Ca=0,V=a.graphics.SplineElement,Ea=a.visible;m.imagesLoaded=0;W.lineConnector=
W.lineConnector||r.group("line-connector",W);T||(T=a.graphics.container={lineShadowGroup:r.group("connector-shadow",W.lineConnector),anchorShadowGroup:r.group("anchor-shadow",W.lineConnector),lineGroup:r.group("spline",W.lineConnector),anchorGroup:r.group("anchors",W.lineConnector)},Ea||(T.lineShadowGroup.hide(),T.anchorShadowGroup.hide(),T.lineGroup.hide(),T.anchorGroup.hide()));aa||(aa=a.graphics.trackerContainer=r.group("line-hot"),Ea||aa.hide());O||(O=a.components.data=[]);ha&&ha.appendChild(aa);
U||(U=a.graphics.dataLabelContainer=a.graphics.dataLabelContainer||r.group("datalabel",I),Ea||U.hide());Ea&&(T.lineShadowGroup.show(),T.anchorShadowGroup.show(),T.lineGroup.show(),T.anchorGroup.show(),U.show(),aa.show());ya=t.getCategoryLen();for(ha=0;ha<ya;ha++)if(I=O[ha])Z=I.config,N=Z.setValue,Q=Z.setLink,P=Z.setLevelTooltext,V=Z.anchorProps,la=V.symbol,X=V.shadow,R=Z.displayValue,I||(I=O[ha]={graphics:{}}),L=I.graphics.element,va=I.graphics.image,F=I.graphics.label,E=I.graphics.hotElement,null===
N?(L&&L.hide(),F&&F.hide(),E&&E.hide(),va&&va.hide(),da||(ma=null)):(E=t.getAxisPosition(ha),F=w.getAxisPosition(N),ba=Z.hoverEffects,V.isAnchorHoverRadius=ba.anchorRadius,!1===Ea&&h&&(F=w.getPixel(w.getAxisBase())),J(G(c(v[ha].tooltext,v[ha].label))),M=f?Z.toolText+(P?"":Z.toolTipValue):"",Z.finalTooltext=M,P=Z.eventArgs||(Z.eventArgs={}),P.index=ha,P.link=Q,P.value=N,P.displayValue=R,P.categoryLabel=t.getLabel(ha).label,P.toolText=M,P.id=m.userID,P.datasetIndex=p||0,P.datasetName=e.seriesname,P.visible=
Ea,V.imageUrl?(Z.anchorImageLoaded=!1,L=new z,L.onload=a._onAnchorImageLoad(a,ha,P,E,F),L.onerror=a._onErrorSetter(a,ha),L.src=V.imageUrl,Ca++):(va&&va.hide(),Q=[la[1]||2,E,F,V.radius,V.startAngle,0],L||(ga.element&&ga.element.length?L=I.graphics.element=ga.element.shift():(L=I.graphics.element=r.polypath(T.anchorGroup),L.attr({polypath:Q}))),L.show().animateWith(pa,Ga,{polypath:Q},h,oa,ta&&na),L.attr({fill:B({color:V.bgColor,alpha:V.bgAlpha}),stroke:B({color:V.borderColor,alpha:V.borderAlpha}),"stroke-width":V.borderThickness,
visibility:V.radius?Ea:Xa}).shadow(X,T.anchorShadowGroup),ta=!1,ba.enabled&&(Q={polypath:[ba.anchorSides||2,E,F,ba.anchorRadius,ba.startAngle,ba.dip],fill:B({color:ba.anchorColor,alpha:ba.anchorBgAlpha}),stroke:B({color:ba.anchorBorderColor,alpha:ba.anchorBorderAlpha}),"stroke-width":ba.anchorBorderThickness},X={polypath:[V.sides,E,F,V.radius,V.startAngle,0],fill:B({color:V.bgColor,alpha:V.bgAlpha}),stroke:B({color:V.borderColor,alpha:V.borderAlpha}),"stroke-width":V.borderThickness},L&&L.data("anchorRadius",
V.radius).data("anchorHoverRadius",ba.anchorRadius).data(Oa,Q).data(wa,X)),Z.trackerConfig||(Z.trackerConfig={}),Z.trackerConfig.trackerRadius=Ja(V.radius,ba&&ba.anchorRadius||0,C)+(V.borderThickness||0)/2),d.push({x:E,y:F,lastXPos:xa,lastYPos:ma}),xa=E,ma=F,I._xPos=E,I._yPos=F,!V.imageUrl&&this.drawLabel(ha));m.noOfImages=m.totalImages=Ca;0===Ca&&(g.trackerDrawID.push(mb.addJob(a.drawTracker,a,[],k.priorityList.tracker)),g.labelDrawID.push(mb.addJob(a.drawLabel,a,[],k.priorityList.label)));g=a.getSplinePath(d,
w).closedPath;V=a.graphics.SplineElement;2<=g.length?(V||(V=a.graphics.SplineElement=r.path(g,T.lineGroup),Ba=!0),V.show().animateWith(pa,Ga,{path:g},h,oa,ta&&na),V.attr({"stroke-dasharray":za,"stroke-width":l,stroke:B(Aa),"stroke-linecap":"round"}).shadow(H,T.lineShadowGroup),ta=!1):V&&V.hide();h&&Ea&&Ba&&(T.anchorGroup.hide(),T.lineShadowGroup.hide(),T.anchorShadowGroup.hide(),U.hide(),W.lineConnector.attr({"clip-rect":q}).animateWith(pa,Ga,{"clip-rect":sa},h,oa,qa));a.drawn=!0;for(ha=0;ha<ja;ha++)a._removeDataVisuals(fa.shift())}},
"Line"]);FusionCharts.register("component",["dataset","Bubble",{type:"bubble",configure:function(){var a=this.chart,d=a.components,a=a.jsonData.chart,g=this.JSONData,l=this.config,h=g.data||[],n,q,m,f,p;n=d.colorManager;q=this.index;var d=d.numberFormatter,v,r=k.parseUnsafeString,t=c(r(a.tooltipsepchar),", "),w,z,C,E,F,H,I=-Infinity,G=Infinity,J=-Infinity,M=Infinity,L=-Infinity,N=Infinity,R,O=k.graphics.getPointColor;l.includeInLegend=e(g.includeinlegend,1);l.seriesname=r(g.seriesname);l.anchorBgColor=
c(g.color,g.plotfillcolor,a.plotfillcolor,n.getPlotColor(q));l.showPlotBorder=e(g.showplotborder,a.showplotborder,1);l.anchorBorderThickness=l.showPlotBorder?e(g.plotborderthickness,a.plotborderthickness,1):0;l.anchorBorderColor=ib(c(g.plotbordercolor,a.plotbordercolor,"666666"));l.plotFillAlpha=c(g.plotfillalpha,g.bubblefillalpha,a.plotfillalpha,"100");l.plotBorderAlpha=c(g.plotborderalpha,a.plotborderalpha,"95");l.negativeColor=c(a.negativecolor,"FF0000");l.is3d=0!==e(a.use3dlighting,g.is3d,a.is3d);
l.bubbleScale=e(a.bubblescale,1);l.minBubbleRadius=e(a.minbubbleradius);l.clipBubbles=e(a.clipbubbles,1);l.showRegressionLine=e(g.showregressionline,a.showregressionline,0);l.enableAnimation=n=e(a.animation,a.defaultanimation,1);l.animation=n?{duration:1E3*e(a.animationduration,1)}:!1;l.showTooltip=e(a.showtooltip,1);l.transposeAnimation=e(a.transposeanimation,n);l.transposeAnimDuration=1E3*e(a.transposeanimduration,.2);l.seriesNameInTooltip=e(a.seriesnameintooltip,1);l.rotateValues=e(a.rotatevalues)?
270:0;l.showHoverEffect=e(a.plothovereffect,a.showhovereffect,void 0);l.showValues=e(g.showvalues,a.showvalues,0);f=this.components.data=this.components.data||(this.components.data=[]);n=h.length;l.showRegressionLine&&(this.events={hide:this.hideRLine,show:this.showRLine},v={sumX:0,sumY:0,sumXY:0,sumXsqure:0,sumYsqure:0,xValues:[],yValues:[],isRegression:!0},l.showYOnX=e(g.showyonx,a.showyonx,1),l.regressionLineColor=ib(c(g.regressionlinecolor,a.regressionlinecolor,l.anchorBgColor)),l.regressionLineThickness=
e(g.regressionlinethickness,a.regressionlinethickness,1),l.regressionLineAlpha=aa(e(g.regressionlinealpha,a.regressionlinealpha,100)),l.regLineColor=Q(l.regressionLineColor,l.regressionLineAlpha));l.fillColor=l.is3d?B(O(l.anchorBgColor,l.plotFillAlpha)):B({color:l.anchorBgColor,alpha:l.plotFillAlpha});l.strokeColor=B({color:l.anchorBorderColor,alpha:l.plotFillAlpha});for(q=0;q<n;q++)if(z=h[q],m=f[q]=f[q]||(f[q]={}),!m.graphics&&(m.graphics={}),C=m.config={},C.x=d.getCleanValue(z.x),C.y=d.getCleanValue(z.y),
C.z=d.getCleanValue(z.z,!0),C.showValue=e(z.showvalue,l.showValues),C.anchorProps={},H=C.label=C.x,C.setLink=Ba(z.link),l.max=L=Ja(L,C.z||0),l.min=N=Na(N,C.z||0),C.is3d=0!==e(z.is3d,l.is3d),I=Ja(I,C.x),G=Na(G,C.x),J=Ja(J,C.y),M=Na(M,C.y),m=C.color=ib(c(z.color,0>z.z?l.negativeColor:l.anchorBgColor)),p=C.alpha=c(z.alpha,l.plotFillAlpha),C.colorObj=R=C.is3d?O(m,p):{color:m,alpha:p},C.setDisplayValue=E=r(c(z.displayvalue,z.name,z.label)),w=C.formatedVal=null===C.y?C.y:d.dataLabels(C.y),C.displayValue=
c(E,C.formatedVal),C.setTooltext=k.getValidValue(r(c(z.tooltext,g.plottooltext,a.plottooltext))),l.showTooltip?null===w?E=!1:void 0!==C.setTooltext?(E=[4,5,6,7,8,9,10,11,12,13,118],w={yDataValue:w,xDataValue:d.xAxis(H),yaxisName:r(a.yaxisname),xaxisName:r(a.xaxisname),zDataValue:d.dataLabels(C.z)},E=k.parseTooltext(C.setTooltext,E,w,z,a,g)):(l.seriesNameInTooltip&&(F=k.getFirstValue(g&&g.seriesname)),E=F?F+t:"",E+=H?d.xAxis(H)+t:"",E+=w,E+=z.z?t+d.dataLabels(z.z):""):E=!1,C.toolText=E,this.pointValueWatcher(C.x,
C.y,l.showRegressionLine&&v),w=C.hoverEffects={},0!==l.showHoverEffect){H=w.enabled=void 0!==c(z.hoveralpha,g.hoveralpha,a.bubblehoveralpha,z.hovercolor,g.hovercolor,g.bubblehovercolor,a.bubblehovercolor,z.borderhovercolor,g.borderhovercolor,a.plotborderhovercolor,z.borderhoveralpha,g.borderhoveralpha,a.plotborderhoveralpha,z.hoverscale,g.bubblehoverscale,a.bubblehoverscale,z.borderhovercolor,g.borderhovercolor,a.plotborderhovercolor,z.borderhoverthickness,g.borderhoverthickness,a.plotborderhoverthickness,
z.negativehovercolor,g.negativeColor,a.negativecolor,z.is3donhover,a.plotfillhovercolor,g.is3donhover,a.is3donhover,void 0);w.negativeColor=c(z.negativehovercolor,g.negativehovercolor,a.negativehovercolor,l.negativeColor);w.is3d=e(z.is3donhover,g.is3donhover,a.is3donhover,C.is3d);w.color=c(z.hovercolor,g.hovercolor,g.bubblehovercolor,a.plotfillhovercolor,a.bubblehovercolor,C.is3d?R.FCcolor.color:m);w.color=w.negativeColor&&0>z.z?w.negativeColor:w.color;w.scale=c(z.hoverscale,g.hoverscale,g.bubblehoverscale,
a.bubblehoverscale,1);w.color=ib(w.color);w.alpha=c(z.hoveralpha,g.hoveralpha,a.plotfillhoveralpha,a.bubblehoveralpha,p);w.borderColor=c(z.borderhovercolor,g.borderhovercolor,a.plotborderhovercolor,l.anchorBorderColor);w.borderAlpha=c(z.borderhoveralpha,g.borderhoveralpha,a.plotborderhoveralpha,w.alpha,l.plotBorderAlpha);w.borderThickness=e(z.borderhoverthickness,g.borderhoverthickness,a.plotborderhoverthickness,l.anchorBorderThickness);w.color=w.is3d?O(w.color,w.alpha):{FCcolor:{color:w.color,alpha:w.alpha}};
z=H&&l.showHoverEffect?0:l.showHoverEffect;if(1===z){C=(z="string"==typeof w.color)?w.color.split(/\s{0,},\s{0,}/):w.color.FCcolor.color.split(/\s{0,},\s{0,}/);p=C.length;for(m=0;m<p;m++)C[m]=ob(C[m],70);z?w.color=C.join(","):w.color.FCcolor.color=C.join(",")}!1===H&&(w.enabled=!!l.showHoverEffect)}else w.enabled=!1;l.xMax=I;l.xMin=G;l.yMin=M;l.yMax=J;l.regressionData=l.showRegressionLine&&this.getRegressionLineSeries(v,l.showYOnX,n);this.visible=1===e(g.visible,!Number(g.initiallyhidden),1);this._addLegend()},
init:function(a){this.yAxis=this.chart.components.yAxis[0];this.components={};this.graphics={};this.JSONData=a;this.configure()},_addLegend:function(){var a=this.config;this.legendItemId=this.chart.components.legend.addItems(this,this.legendInteractivity,{enabled:a.includeInLegend,fillColor:a.fillColor,strokeColor:a.strokeColor,rawFillColor:a.anchorBgColor,rawStrokeColor:a.anchorBorderColor,anchorSide:1,type:this.type,label:a.seriesname})},draw:function(){var a=this,c=a.JSONData,d=kb.sqrt,g=a.chart,
h=g.getJobList(),l=g.components,q=l.canvas.config,m=l.paper,f=g.config,p=g.graphics,f=Na(f.canvasHeight,f.canvasWidth)/8,v=p.datasetGroup,r,t,w=a.yAxis,l=l.xAxis[0],z=a.config;r=z._regressionAttr;var E,F,H,I;E=q.clip["clip-canvas"].slice(0);var G=q.clip["clip-canvas-init"].slice(0),J,q=a.components.data,M=a.components.removeDataArr||[],L=M.length,Q=a.graphics.container,N=function(){!1===a.visible&&(Q.bubbleGroup.hide(),Q.regLineGroup.hide(),ba.hide(),U.hide(),a._containerHidden=!0)};J=function(){a.visible&&
(ba.attr({"clip-rect":null}),Q.regLineGroup.attr({"clip-rect":null}))};var R=z.minBubbleRadius,O=z.bubbleScale,P=g.getDataLimits().zMax||0,P=d(P);I=z.clipBubbles;var T=g.get("config","animationObj"),g=T.duration;F=a.graphics.regressionLineElement;H=z.showRegressionLine;var X=a.visible,aa=z.showTooltip,ha=p.trackerGroup,W=p.datalabelsGroup,ba=a.graphics.dataLabelContainer,U=a.graphics.trackerContainer,V,la;V={};var Z,oa,p=!0,fa=T.dummyObj,ja=T.animObj,T=T.animType,ga=a.components.pool||{},na=FusionCharts.get("component",
["dataset","area"]).prototype.drawTracker,qa=z.anchorBorderThickness;V=a.drawn;Q||(Q=a.graphics.container={bubbleGroup:m.group("bubble",v),regLineGroup:m.group("regLine",v)},X||(Q.bubbleGroup.hide(),Q.regLineGroup.hide()));U||(U=a.graphics.trackerContainer=m.group("bubble-hot"),X||U.hide());ba||(ba=a.graphics.dataLabelContainer=m.group("datalabel",W),ba.attr({"clip-rect":G}).animateWith(fa,ja,{"clip-rect":E},g,T,J),X||ba.hide());I?V?Q.bubbleGroup.animateWith(fa,ja,{"clip-rect":E},g,T):Q.bubbleGroup.attr({"clip-rect":E}):
(Q.bubbleGroup.attr({"clip-rect":null}),Q.bubbleGroup.node&&Q.bubbleGroup.node.removeAttribute&&Q.bubbleGroup.node.removeAttribute("clip-path"));ha&&ha.appendChild(U);X&&(Q.bubbleGroup.show(),Q.regLineGroup.show(),ba.show(),U.show());H?(V=z.regressionData[0],v=z.regressionData[1],r||(z._regressionAttr=r={}),r.stroke=B({color:z.regressionLineColor,alpha:z.regressionLineAlpha}),r["stroke-width"]=z.regressionLineThickness,r["stroke-linecap"]="round",r["stroke-linejoin"]=2<z.regressionLineThickness?"round":
"miter",r.path="M "+l.getAxisPosition(V.x)+","+w.getAxisPosition(V.y)+" L "+l.getAxisPosition(v.x)+","+w.getAxisPosition(v.y),F?F.animateWith(fa,ja,r,g,T):(F=a.graphics.regressionLineElement=m.path(r,Q.regLineGroup),Q.regLineGroup.attr({"clip-rect":G}),Q.regLineGroup.animateWith(fa,ja,{"clip-rect":E},g,T,J))):F&&F.hide();v=0;for(G=q.length;v<G;v+=1)E=q[v],J=E.config,I=e(J.x,v),ha=J.y,F=J.z,r=E.graphics.element,W=J.setLink,la=J.displayValue,H=J.toolText,J.finalTooltext=J.toolText,V=J.hoverEffects,
r=E.graphics.element,t=E.graphics.hotElement,oa=E.graphics.label,null!==ha?(t=J.eventArgs||(J.eventArgs={}),t.index=v,t.link=W,t.value=ha,t.y=ha,t.x=I,t.z=F,t.displayValue=la,t.toolText=H,t.id=a.userID,t.datasetIndex=a.index||0,t.datasetName=c.seriesname,t.visible=X,H=w.getAxisPosition(ha),I=l.getAxisPosition(I),F=d(F),F=Za(F*f/P)*O||0,R&&(F=Ja(F,R)),ha=J.setRolloutAttr={fill:B(J.colorObj),"stroke-width":z.anchorBorderThickness,stroke:B({color:z.anchorBorderColor,alpha:z.plotBorderAlpha}),r:F},!1!==
V.enabled&&(Z=J.setRolloverAttr={fill:B(V.color),"stroke-width":V.borderThickness,stroke:B({color:V.borderColor,alpha:V.borderAlpha}),r:F*V.scale}),a.visible||(F=0),r||(ga.element&&ga.element.length?r=E.graphics.element=ga.element.shift():(r=E.graphics.element=m.circle(Q.bubbleGroup),r.attr({cx:I,cy:H,r:g?0:F}))),r.show().animateWith(fa,ja,{cx:I,cy:H,r:F||0},g,T,p&&N).attr({fill:B(J.colorObj),ishot:!aa,"stroke-width":z.anchorBorderThickness,stroke:ha.stroke,visibility:X}),p=!1,J.trackerConfig||(J.trackerConfig=
{}),J.trackerConfig.trackerRadius=Ja(F+(qa||0),C),r.data(Oa,Z).data(wa,ha),E._xPos=I,E._yPos=H):(r&&r.hide(),t&&t.hide(),oa&&oa.hide());h.trackerDrawID.push(mb.addJob(na,a,[],k.priorityList.tracker));a.drawn?a.drawLabel():h.labelDrawID.push(mb.addJob(a.drawLabel,a,[],k.priorityList.label));a.drawn=!0;for(v=0;v<L;v++)a._removeDataVisuals(M.shift())},show:function(){var a=this.chart,c=this.graphics.container,e=this.graphics.dataLabelContainer,d=this.graphics.trackerContainer;this.visible=!0;c.bubbleGroup.show();
c.regLineGroup&&c.regLineGroup.show();e.show();d.show();a._setAxisLimits();a._drawAxis();a._drawDataset()},hide:function(){var a=this.chart;this.visible=!1;a._setAxisLimits();a._drawAxis();a._drawDataset()},getDataLimits:function(){var a=this.config,c=a.yMax,e=a.yMin,d=this.chart.config.transposeAxis,g=a.xMin,k=a.xMax,l=a.max,a=a.min;!1===this.visible&&d&&(c=-Infinity,g=e=Infinity,k=-Infinity);return{max:c,min:e,xMin:g,xMax:k,zMax:l,zMin:a}},drawLabel:function(){var b=this.chart,c=b.config.dataLabelStyle,
e=this.components.data,d=b.components.paper,g;g="";var k=this.config,l=b.get("config","animationObj"),b=l.duration,m=l.animType,f=l.animObj,l=l.dummyObj,k=k.rotateValues,p,v=this.graphics.dataLabelContainer,r,t,B,w,z,C,E,F,H=this.components.pool||{};C=0;for(E=e.length;C<E;C++)if(g=e[C])r=g.config,p=g.graphics,B=g._yPos,t=g._xPos,g=r.displayValue,z=p.label,F=r.showValue,void 0!==g&&null!==g&&g!==a&&null!==r.z&&F?(g={text:g,fill:c.color,"text-bound":[c.backgroundColor,c.borderColor,c.borderThickness,
c.borderPadding,c.borderRadius,c.borderDash],"line-height":c.lineHeight,visibility:Ra},z||(H.label&&H.label.length?z=p.label=H.label.shift():(g.x=t,g.y=B,g.transform=d.getSuggestiveRotation(k,t,B),z=p.label=d.text(g,v),w=!0)),w||(z.show().animateWith(l,f,{x:t,y:B,transform:d.getSuggestiveRotation(k,t,B)},b,m),z.attr(g))):z&&z.hide()},_hoverFunc:function(a,c,e){a=a.graphics.element;c="DataPlotRollOut"===c?a.data(wa):a.data(Oa);e&&a.attr(c)}},"scatter"]);FusionCharts.register("component",["dataset",
"Pie2D",{type:"pie2d",configure:function(){var a=this.chart,g=a.config,l=g.dataLabelStyle,m=this.config,h=this.JSONData,n=a.jsonData.chart,q=k.parseUnsafeString,p=a.is3D,f,v;this.__setDefaultConfig();r({},this.config,a&&a.config);v=m.enableAnimation=e(n.animation,n.defaultanimation,1);m.animation=v?{duration:1E3*e(n.animationduration,n.moveduration,1)}:!1;m.transposeAnim=v||e(m.transposeanimation,1)?{duration:1E3*e(n.transposeanimduration,.2)}:!1;m.showPlotBorder=e(n.showplotborder,1);m.showHoverEffect=
e(n.plothovereffect,n.showhovereffect,void 0);m.showTooltip=e(n.showtooltip,1);m.toolText=Ba(q(c(h.plottooltext,n.plottooltext)));v=m.enableMultiSlicing=e(n.enablemultislicing,1);f=m.use3DLighting=e(n.use3dlighting,1);m.radius3D=f?e(n.radius3d,90):100;m.showZeroPies=e(n.showzeropies,1);m.showPercentInToolTip=e(n.showpercentintooltip,1);m.showLabels=e(n.showlabels,1);m.showValues=e(h.showvalues,n.showvalues,1);m.showPercentValues=e(n.showpercentvalues,n.showpercentagevalues,0);f=m.toolTipSepChar=c(n.tooltipsepchar,
n.hovercapsepchar,d);m.labelSepChar=c(n.labelsepchar,f);m.pieBorderColor=c(n.plotbordercolor,n.piebordercolor);m.pieBorderAlpha=e(n.plotborderalpha,n.pieborderalpha);m.pieBorderThickness=m.showPlotBorder?e(n.plotborderthickness,n.pieborderthickness,g.plotborderthickness,1):0;m.plotDashLen=e(n.plotborderdashlen,5);m.plotDashGap=e(n.plotborderdashgap,4);m.showValueInLegend=e(n.showvalueinlegend,0);m.showLabelInLegend=e(n.showlabelinlegend,1);m.valueBeforeLabelInLegend=e(n.valuebeforelabelinlegend,0);
m.showValueAsPercentInLegend=e(n.showvalueaspercentinlegend,1);m.legendSepChar=c(n.legendsepchar,", ");m.showvalues=e(n.showvalues,1);m.chartPosition=L(a.linkedItems.container);m.timerThreshold=30;m.centerLabelConfig={label:q(c(n.defaultcenterlabel,"")),font:c(n.centerlabelfont,l.fontFamily),fontSize:e(n.centerlabelfontsize,parseInt(l.fontSize,10)),color:ib(c(n.centerlabelcolor,n.valuefontcolor,g.style.inCanvasStyle.color,"555555")),alpha:e(n.centerlabelalpha,100),bold:e(n.centerlabelbold,l.fontWeight),
italic:e(n.centerlabelitalic,l.style),bgColor:c(n.centerlabelbgcolor,""),bgAlpha:e(n.centerlabelbgalpha,100),borderColor:c(n.centerlabelbordercolor,l.borderColor),borderAlpha:e(n.centerlabelborderalpha,100),borderThickness:e(n.centerlabelborderthickness,l.borderThickness),borderRadius:e(n.centerlabelborderradius,l.borderRadius),textPadding:e(n.centerlabeltextpadding,l.borderPadding),padding:e(n.centerlabelpadding,2),bgOval:e(n.centerlabelbgoval,0),shadow:e(n.showcenterlabelshadow,0),hoverColor:n.centerlabelhovercolor&&
ib(c(n.centerlabelhovercolor)),hoverAlpha:e(n.centerlabelhoveralpha),toolText:q(c(n.centerlabeltooltext,""))};m.showLegend=e(n.showlegend,0);m.reverselegend=!e(n.reverselegend,0);a.is3D=p;m.pieYScale=e(n.pieyscale,40);1>m.pieYScale&&(m.pieYScale=1);100<=m.pieYScale&&(m.pieYScale=80);m.pieYScale/=100;m.pieSliceDepth=e(n.pieslicedepth,15);1>m.pieSliceDepth&&(m.pieSliceDepth=1);m.managedPieSliceDepth=m.pieSliceDepth;m.enableMultiSlicing=!!v;m.startAngle=e(n.startingangle,0)*-(Cb/180);m.usePerPointLabelColor=
n.colorlabelsfromplot==T;m.reversePlotOrder=e(n.reverseplotorder,0);m.animateClockWise=e(n.animateclockwise,m.reversePlotOrder);m.showShadow=e(n.showshadow,1);m.singletonCase=1===h.data.length;m.valueTotal=0;this._setConfigure();this._addLegend()},_parseDisplayProperties:function(a,d){var g,k,h="",l,q,m,f,p,v,r;g=this.chart;var t=g.components.numberFormatter,B=g.jsonData.chart;f=this.config;q=e(d.y,t.getCleanValue(a.value,!0));var w=f.valueTotal;m=f.showLabels;var z=I(c(d.seriesName,a.label,a.name,
""));v=f.showPercentValues;l=f.showPercentInToolTip;var C=f.labelSepChar,E=f.toolTipSepChar,F=f.showTooltip;g=Ba(I(c(a.tooltext,f.toolText)));k=d.pValue=t.percentValue(q/w*100);q=d.value=t.dataLabels(q)||"";m=1===e(a.showlabel,m)?z:"";f=1===(r=e(a.showvalue,f.showValues))?1===v?k:q:"";l=l?k:q;p=Ba(I(a.displayvalue));v=c(p,z+C+(v?k:q),"");f=void 0!==p&&r?p:""!==f&&""!==m?m+C+f:c(m,f);F&&(void 0!==g?h=ba(g,[1,2,3,5,6,7,14,24,25],{formattedValue:q,label:z,yaxisName:I(B.yaxisname),xaxisName:I(B.xaxisname),
percentValue:k,sum:t.dataLabels(w),unformattedSum:w},a,B):(h=z,h=""!=h?h+E+l:l));d.displayValue=f;d.displayValueArgs=v;d.toolText=h;d.seriesName=z;d.categoryLabel=m},foldingFn:function(a){a=a.data("plotItem");return{ringpath:[a.center[0],a.center[1],a.radius,a.innerDiameter/2,a.angle,a.angle]}},_isStyled:function(a){if(this.chart.config.usedataplotcolorforlabels||a.labelbordercolor||a.labelbgcolor||a.labelborderthickness||a.labelborderalpha||a.labelalpha||a.labelfont||a.labelfontsize||a.labelfontcolor||
a.labelfontalpha||a.labelalpha||a.labelfontbold||a.labelfontitalic||a.labelborderpadding||a.labelborderradius||a.labelbgalpha||a.labelborderdashed||a.labelborderdashlen||a.labelborderdashgap)return!0},_setConfigure:function(a,d){var g,k,h,l,q,m,f,p,v,r,t,B,z,C,E,F,H,G;q=this.chart;var J=q.jsonData.chart,L=q.components;l=L.legend;var N=q.config,P=this.config,X=this.JSONData;k=(r=(a||X).data)&&r.length;B=P.showZeroPies;var X=P.valueTotal||0,R=[],O=e(J.plotborderdashed,0),aa=this.components.data||(this.components.data=
[]),ha=L.numberFormatter,L=L.colorManager,W=P.labelInLeg,ba=P.valInLeg,da=P.centerLabelConfig,la=P.pieBorderThickness,fa=P.reversePlotOrder,U=P.radius3D,V=P.enableMultiSlicing,ja=P.lastSlicedid||0,Z=e(J.plotBorderDashed,5),na=e(J.plotborderdashgap,4),ta=e(J.valuebeforelabelinlegend,0),xa=e(J.showvalueaspercentinlegend,1);G=0;var ga=c(J.legendsepchar,", ");q=q.get("config","animationObj");v=q.duration||0;m=q.dummyObj;p=q.animObj;t=q.animType;N.dataLabelStyle=w({},{},J,N.dataLabelStyle,f);for(q=0;q<
k;q+=1)f=r[q],h=ha.getCleanValue(f.value,!0),null===h||!B&&0===h?G+=1:(R.push(f),X+=h);if(G&&aa.length>k-G)for(l&&l.emptyItems(aa.length-G),q=aa.length-1;0<G;--q,--G)if(aa[q]){f=aa[q];k=f.config;h=f.graphics;for(g in h)l=h[g],l.animateWith(m,p,this.foldingFn.call(this,l),v,t,this.hideFn.call(this,h,g));k.y=null;f.legendItemId=void 0}0===X&&(R=[]);P.valueTotal=X;P.dataLabelCounter=0;for(q=(k=R.length)-1;0<=q;--q){h=q;a?(G=R[q],h=void 0!==d?d+q:aa.length-k+q,f=aa[h]):(f=aa[q]||(aa[q]={graphics:{},config:{}}),
G=R[q]);g=f&&f.config;g||(g=aa[h].config={});f.graphics||(aa[h].graphics={});g.y=h=ha.getCleanValue(G.value,!0);g.seriesName=m=I(c(G.label,G.name,""));f=c(G.color,L.getPlotColor(q));l=c(G.alpha,J.plotfillalpha,oa);p=g.borderConfig=this._parseBorderConfig(f,l,G);v=p.setPlotBorderColor;p=p.setPlotBorderAlpha;r={opacity:Ja(l,p)/100};if(B=!!e(G.issliced,J.issliced,0))V||(-1!==ja&&(aa[aa.length-ja-1].sliced=!1),P.lastSlicedid=q),P.preSliced=B;C=(t=e(G.dashed,O))?M(c(G.dashlen,Z),c(G.dashgap,na),la):"none";
this._parseDisplayProperties(G,g);t=W?m:"";ba&&(h=xa?ha.legendPercentValue(h/X*100):ha.legendValue(h),t=ta?h+(t&&ga+t):(t&&t+ga)+h);(h=g.displayValue)&&(P.dataLabelCounter+=1);F=g.value;E=g.pValue;h={label:c((z=G.centerlabel||J.centerlabel)&&this.replaceMacros(z,["\\$value","\\$percentValue","\\$displayValue","\\$label"],[F,E,void 0===h?"":h,m]),""),font:da.font,fontSize:e(G.centerlabelfontsize,da.fontSize),color:ib(c(G.centerlabelcolor,da.color)),alpha:e(G.centerlabelalpha,da.alpha),bold:e(G.centerlabelbold,
da.bold),italic:e(G.centerlabelitalic,da.italic),bgColor:c(G.centerlabelbgcolor,da.bgColor),bgAlpha:e(G.centerlabelbgalpha,da.bgAlpha),borderColor:c(G.centerlabelbordercolor,da.borderColor),borderAlpha:e(G.centerlabelborderalpha,da.borderAlpha),borderThickness:da.borderThickness,borderRadius:da.borderRadius,textPadding:da.textPadding,padding:da.padding,bgOval:da.bgOval,shadow:da.shadow,hoverColor:(H=c(G.centerlabelhovercolor,da.hoverColor))&&ib(H),hoverAlpha:e(G.centerlabelhoveralpha,da.hoverAlpha),
toolText:c(G.centerlabeltooltext,"")};this._isStyled(G)?g.style=w(G,{},J,N.dataLabelStyle,f):g.style&&delete g.style;g.showInLegend=""!==t;g.isVisible=!0;g.name=t;g.shadow=r;g.setColor=f;g.color=this._getPointColor(f,l,U);g._3dAlpha=l;g.borderColor=Q(v,p);g.borderWidth=la;g.link=Ba(G.link);g.sliced=B;g.dashStyle=C;g.doNotSlice=c(J.enableslicing,T)!=T;this._parseHoverEffectOptions(q);g.centerLabelConfig=h;g.radius3D=U}fa&&aa&&aa.reverse();P.dataArr=R;P.enableRotation=1<aa.length?e(J.enablerotation,
1):0},_parseHoverEffectOptions:function(a){var d,g,l,h,k,q,m,f,p;q=this.chart.jsonData.chart;g=this.config;var v=this.components.data[a].config;m=this.JSONData;f=m.data[a];l=v.setColor;h=v._3dAlpha;a=g.radius3D;p=v.borderConfig;k=p.setPlotBorderAlpha;var r=p.setPlotBorderColor;p=g.setBorderWidth;g=e(v.hovereffect,g.showHoverEffect);v=v.hoverEffects={enabled:g};void 0===g&&(g=v.enabled=void 0!==c(f.hovercolor,m.hovercolor,q.plotfillhovercolor,f.hoveralpha,m.hoveralpha,q.plotfillhoveralpha,f.borderhovercolor,
m.borderhovercolor,q.plotborderhovercolor,f.borderhoveralpha,m.borderhoveralpha,q.plotborderhoveralpha,q.plotfillhoveralpha,f.borderhoverthickness,m.borderhoverthickness,q.plotborderhoverthickness,void 0));if(g){d=e(f.highlightonhover,m.highlight,q.highlight,1);(g=c(f.hovercolor,m.hovercolor,q.plotfillhovercolor))&&d&&(d=0);g=c(g,l);l=c(f.hoveralpha,m.hoveralpha,q.plotfillhoveralpha,h);h=c(f.borderhovercolor,m.borderhovercolor,q.plotborderhovercolor,r);k=c(f.borderhoveralpha,m.borderhoveralpha,q.plotborderhoveralpha,
q.plotfillhoveralpha,k);q=e(f.borderhoverthickness,m.borderhoverthickness,q.plotborderhoverthickness,p);g.replace(/,+?$/,"");if(1===d){f=(m="string"==typeof g)?g.split(/\s{0,},\s{0,}/):g.color.split(/\s{0,},\s{0,}/);p=f.length;for(d=0;d<p;d++)f[d]=ob(f[d],70);m?g=f.join(","):g.color=f.join(",")}this._setHoverColor(v,g,l,a);v.borderColor=Q(h,k);v.borderWidth=q}else v.enabled=!1},_setHoverColor:function(a,c,e,d){a.color=this._getPointColor(c,e,d)},replaceMacros:function(a,c,e){for(var d=c.length||0,
g;d--;)g=new RegExp(c[d],"gi"),a=a.replace(g,e[d]);return a},containsMacro:function(a,c){for(var e=c.length||0,d;e--;)if(d=new RegExp(c[e],"gi"),d=a.match(d))return!0;return!1},updateData:function(a,c){this.config.valueTotal-=this.components.data[c].config.y;this.__base__.updateData.apply(this,arguments)},_parsePiePlotOptions:function(){var a=this.config;return{size:a.pieMinRadius,slicedOffset:a.slicingDistance}},_parseDataLabelOptions:function(){var a=this.chart.config.style;return{style:a&&a.inCanvasStyle||
a,enabled:!0}},_addLegend:function(){var a,c,d,g=this.chart.components.legend,h=this.components.data;for(a=0;a<h.length;a+=1)d=h[a],c=d.config,null!==c.y&&(d.legendItemId=g.addItems(this,this.legendInteractivity,{index:a,fillColor:B(c.setColor),strokeColor:B(c.borderColor),type:this.type,label:c.seriesName,enabled:e(c.includeInLegend,1),legendItemId:d.legendItemId}))},_parseBorderConfig:function(a,e,d){var g=this.chart.jsonData.chart,h=c(d.bordercolor,this.config.pieBorderColor);d=c(d.borderalpha,
g.plotborderalpha,g.pieborderalpha);h=c(h,ob(a,25)).split(",")[0];d=g.showplotborder==l?l:c(d,e,"80");return{setPlotBorderColor:h,setPlotBorderAlpha:d}},_getPointColor:function(a,c,e){var d,g;a=ib(a);c=aa(c);100>e&&W?(d=Math.floor(85*(100-.35*e))/100,d=X(a,d),g=Math.floor(50*(100+e))/100,a=ob(a,g),c={color:a+","+d,alpha:c+","+c,ratio:e+","+(100-e),radialGradient:!0,gradientUnits:"userSpaceOnUse"}):c={color:a+","+a,alpha:c+","+c,ratio:"0,100"};return c},hideElements:function(){var a=this.data&&this.data("plotItem").chart,
c=0,e=this._&&this._.shadows||[];if(a&&a.components.dataset[0])for(this.hide();c<e.length;c+=1)e[c].hide()},hideFn:function(a,c){return function(){a[c].hide()}},singleFillColor:function(a){return B({color:ib(a.color),alpha:aa(a.alpha)})},draw:function(){var a,c,e=this.chart,d=e.getJobList(),g=e.graphics,l=e.config,m=l.dataLabelStyle,p=e.graphics,f=this.config,v=f.showShadow,r=e.components.paper,t=this.components,w=t.data,z=t.removeDataArr||[],C,E,F,H,I;C=l.style;C=g.datasetGroup.trackTooltip(!0);
var J=this.graphics,L=this.pool,M=J.container,Q=this.visible,N=J.shadowContainer;E=g.datalabelsGroup;var P=J.dataLabelContainer,R,O,T,X,aa,ha,W,ba,la,U=t.data||[],V=U.length,t=l.canvasLeft+.5*l.canvasWidth,g=l.canvasTop+.5*l.canvasHeight,oa=p.datasetGroup;H=l.alphaanimation;var Z=!1,p=function(){Z||(Z=!0,P.show(),oa.animateWith(Ia,Ka,{opacity:1},ya,Ja))},fa=function(){var a,b;if(c)for(a=0;a<V;a+=1)b=U[a],b.graphics.element&&b.graphics.element.attr({fill:B(b.config.color)})};R=function(){var a=f.pieCenter||
[],b={cx:a[0],cy:a[1],r:(f.piePlotOptions||[]).size,r2:.5*(f.innerSize||0)};return function(a){var c,f=!1;for(c in a)if(5<Sa(a[c]-b[c])){f=!0;break}return f}}();O=function(){Z||fa()};var ja=e._plotDragMove,na=e._plotDragStart,ga=e._plotDragEnd,ta=e._plotRollOver,qa=e._plotRollOut,xa=!!f.enableRotation,sa=f.piePlotOptions=this._parsePiePlotOptions(),l=l.textDirection,ma=f.dataLabelOptions,Ba=sa.slicedOffset,wa,sa=sa.size,za=.5*(f.innerSize||0),Aa=(f.startAngle||0)%yb,ya,va,pa,Ga,Ca=Aa-yb,Ea=f.animateClockWise,
Fa=e.get("config","animationObj");F=Fa.duration||0;var Ia=Fa.dummyObj,Ka=Fa.animObj,Ja=Fa.animType,Ha;M?(Ga=!0,F&&(ya=F,va=O),c=R({cx:t,cy:g,r:sa,r2:za})):(C.pie=r.group("pie",C),C.pieLabels=r.group("pie",C),M=J.container={lineShadowGroup:r.group("connector-shadow",C.pieLabels),anchorShadowGroup:r.group("anchor-shadow",C.pieLabels),pieGroup:J.pieContainer=r.group("pie",C.pie),dataLabel:r.group("dataLabel",C.pie)},N=J.shadowContainer=C.shadows||(C.shadows=r.group("shadows",M.pieGroup).toBack()),P=
J.dataLabelContainer=this.graphics.dataLabelContainer||r.group("datalabel",E).trackTooltip(!0),F&&(ya=F,va=p,P.hide()));P.css(m);Q||(M.lineShadowGroup.hide(),M.anchorShadowGroup.hide(),M.pieGroup.hide(),M.dataLabel.hide(),N.hide(),P.hide());H&&oa.attr({opacity:0});z.length&&this.remove();M=f.valueTotal;Q=yb/M;f.pieCenter=[t,g];R=z=Aa;d.labelDrawID.push(mb.addJob(e.placeDataLabels,e,[!1,w,f],k.priorityList.label));for(d=0;d<V;d+=1)if(C=U[d],I=C.graphics,O=C.config,(Fa=O._textAttrs)||(Fa=O._textAttrs=
{}),T=O.y,X=O.displayValue,aa=O.sliced,E=O.toolText,H=!!O.link,C=O.style,ha=H||xa||!O.doNotSlice,null!==T&&void 0!==T&&!1!==O.isVisible){R=O.color;R.r=sa;R.cx=t;R.cy=g;R=z;z-=f.singletonCase?yb:T*Q;W=.5*(z+R);F=I.element;ba=I.label;wa=I.connector;if(!F){F=L&&L.element.length?I.element=L.element.splice(0,1)[0].show():I.element=r.ringpath(J.pieContainer).attr({"stroke-linejoin":"round",ishot:ha}).drag(ja,na,ga).hover(ta,qa);if(Ga){if(d<V)for(pa=void 0,a=d+1;a<V&&void 0===pa;a+=1)pa=U[a].config.endAngle;
void 0===pa&&(pa=Ca)}else pa=Ea?Ca:Aa;F.attr({ringpath:[t,g,sa,za,pa,pa]})}void 0!==X?(C?((Ha=O._textCss)||(Ha=O._textCss={}),Ha.fontFamily=C.fontFamily,Ha.fontSize=C.fontSize,Ha.lineHeight=C.lineHeight,Ha.fontWeight=C.fontWeight,Ha.fontStyle=C.fontStyle):O._textCss&&(ba.removeCSS(),delete O._textCss,Ha=void 0),O.style=C||(C=m),Fa.text=X,Fa.fill=C.color||"#000000",Fa["text-bound"]=[C.backgroundColor,C.borderColor,C.borderThickness,C.borderPadding,C.borderRadius,C.borderDash],Fa.direction=l,Fa.lineHeight=
C.lineHeight,ba?(Ha&&(ba.css(Ha),delete Ha.fontFamily,delete Ha.fontSize,delete Ha.lineHeight,delete Ha.fontWeight,delete Ha.fontStyle,Ha=void 0),delete Fa.ishot):L&&L.label.length?ba=I.label=L.label.splice(0,1)[0]:Fa.ishot=ha,0<ma.distance&&(la=ma.connectorWidth)&&ma.enableSmartLabels?(wa||(wa=L&&L.connector.length?I.connector=L.connector.splice(0,1)[0]:I.connector=r.path("M 0 0 l 0 0",P).attr({visibility:pb,ishot:!0}).drag(ja,na,ga).hover(ta,qa)),wa.attr({"stroke-width":la,stroke:ma.connectorColor||
"#606060"}).show()):wa&&wa.hide()):(Fa.visibility="hidden",ba&&ba.hide(),wa&&wa.hide());C=O.plotItem={chart:e,index:d,seriesData:f,value:T,angle:O.angle=W,angle1:O.startAngle=z,angle2:O.endAngle=R,slicedX:qb(W)*Ba,slicedY:bb(W)*Ba,sliced:aa,labelText:X,toolText:E,name:O.name,link:O.link,percentage:M?T*M/100:0,originalIndex:V-d-1,style:O.style,color:B(O.color),borderColor:O.borderColor,borderWidth:O.borderWidth,rolloverProperties:O.hoverEffects,radius:sa,center:[t,g],innerDiameter:2*za,centerLabelConfig:O.centerLabelConfig,
graphic:F,isVisible:O.isVisible,label:ba,connector:wa,transX:O.transX=qb(W)*Ba,transY:O.transY=bb(W)*Ba,slicedTranslation:O.slicedTranslation="t"+qb(W)*Ba+","+bb(W)*Ba};I={index:f.reversePlotOrder?V-1-d:d,link:O.link,value:O.y,displayValue:O.displayValueArgs,categoryLabel:O.categoryLabel,isSliced:aa,toolText:E};F.animateWith(Ia,Ka,{ringpath:[t,g,sa,za,z,R]},ya,Ja,va);F.attr({"stroke-width":O.borderWidth,stroke:O.borderColor,fill:G||Ga&&c?this.singleFillColor(O.color):B(O.color),"stroke-dasharray":O.dashStyle,
redrawDataLabels:Aa,cursor:H?"pointer":"",transform:C.sliced?C.slicedTranslation:""}).show().shadow(v&&O.shadow,N).tooltip(E).data("plotItem",C).data("eventArgs",I);Fa.plotItem=C;Fa.eventArgs=I;wa&&wa.data("plotItem",C).data("eventArgs",I)}ya?Ga&&e.placeDataLabels(!1,w,f):(fa(),p())},remove:function(){var a=this.components.removeDataArr||[],c=this.pool=this.pool={},e=a.length,d=this.config,g,l=d.pieCenter,k,m=l[0],l=l[1],f=this.hideElements,p=d.pieMinRadius,v=.5*(d.innerSize||0),r,d=d.startAngle-
yb;r=this.chart.get("config","animationObj");var t=r.duration||0,B=r.dummyObj,w=r.animObj,z=r.animType;for(r=0;r<e;r++){g=a[0];g=g.graphics;for(k in g)g[k].data("plotItem"),g[k].animateWith(B,w,{ringpath:[m,l,p,v,d,d+.01]},t,z,f),c[k]||(c[k]=[]),c[k].push(g[k]);a.splice(0,1)}},legendInteractivity:function(a,c){a.chart._plotGraphicClick.call(a.components.data[c.configuration.index].graphics.element)},init:function(a){var c=this.chart;if(!a)return!1;this.JSONData=a;this.chartGraphics=c.chartGraphics;
this.components={};this.graphics={};this.visible=1===e(this.JSONData.visible,!Number(this.JSONData.initiallyhidden),1);this.configure()},_getInnerSize:function(){var a,c=this.config,d=this.chart.jsonData.chart;a=e(d.doughnutradius,0);var d=e(d.use3dlighting,1)?e(d.radius3d,d["3dradius"],50):100,g,h,l;g=c.pieMinRadius;100<d&&(d=100);0>d&&(d=0);a=0>=a||a>=g?g/2:a;c.innerRadius=a;if(0<d&&W&&(c=parseInt(a/g*100,10),g=(100-c)/2,d=parseInt(g*d/100,10),d=c+","+d+","+2*(g-d)+","+d,this&&(l=this.components.data)))for(c=
0,g=l.length;c<g;c+=1)h=l[c],h=h.config,h.color&&(h.color.ratio=d,h.hoverEffects&&h.hoverEffects.color&&(h.hoverEffects.color.ratio=d));return 2*a},getEventArgs:function(a){a=a.configuration.index;var c=this.components.data[a].config||{};return{datasetName:c.seriesName,datasetIndex:a,id:c.userID,visible:c.isVisible,label:c.seriesName,value:c.value,percentValue:c.pValue,tooltext:c.toolText,link:c.link,sliced:c.sliced}}},"area"]);FusionCharts.register("component",["dataset","Pie3D",{type:"pie3d",_parsePie3DOptions:function(){var a=
this.config;return{size:2*a.pieMinRadius,slicedOffset:a.slicingDistance,allowPointSelect:!0,cursor:"pointer",innerSize:"pie3d"===this.type?0:this._getInnerSize()}},_parseBorderConfig:function(a,e,d){var g=this.chart.jsonData.chart,h=c(d.bordercolor,this.config.pieBorderColor);d=c(d.borderalpha,g.plotborderalpha,g.pieborderalpha);h=c(h,ob(a,90)).split(",")[0];d=g.showplotborder==l?l:c(d,e,"80");return{setPlotBorderColor:h,setPlotBorderAlpha:d}},_setHoverColor:function(a,c,e){a.color=c;a.alpha=e},draw:function(){var b,
c,e=this.pool||(this.pool={}),d=this.components,g=this.config,l=this.chart,k=l.get("config","animationObj"),m=k.duration||0,f=k.dummyObj,p=k.animObj,v=k.animType,r=l.config;b=l.graphics;var t=d.data,k=g.dataLabelOptions,w=k.style,z=l.components.paper,C=r.tooltip||{},C=C&&!1!==C.enabled,E=g.slicingDistance,F=g.slicedOffsetY||(g.slicedOffsetY=E*g.pieYScale),H=l._plotDragMove,I=l._plotDragStart,G=l._plotDragEnd,J=l._plotRollOver,L=l._plotRollOut,M=!!g.enableRotation,Q=g.showBorderEffect,N=t.length,O=
g.usePerPointLabelColor,P=r.textDirection,T,X,aa,ha,W,ba,U,V,la,Z,oa,fa;c=d.removeDataArr||[];var ja;Z=this.visible;var ga,na,qa=!1,ta=this.graphics.dataLabelContainer,sa=(g.startAngle||0)%yb,ma,wa,xa,Ba,Aa=sa-yb,ya=g.animateClockWise,va,pa,za,Ca=b.datasetGroup;ga=r.alphaanimation;var Ga=function(){ta.show();l.placeDataLabels(!1)},Ea=function(){qa||(qa=!0,Ca.animateWith(f,p,{opacity:1},m,v,Ga))};pa=function(){var a,b;if(!qa)for(Ea(),a=0;a<N;a+=1)b=t[a],b.graphics.element&&b.graphics.element.attr({fill:B(b.config.color)})};
r=r.dataLabelStyle;ta?(Ba=!0,m&&(ma=m,wa=pa)):(ta=this.graphics.dataLabelContainer=z.group("datalabel",b.datalabelsGroup).trackTooltip(!0),m&&(ma=m,wa=Ea,ta.hide(),ga&&Ca.attr({opacity:0})));ta.css(r);Z||ta.hide();c.length&&this.remove();l._preDrawCalculate();b=g.center;c=g.pieYScale;t&&N||(t=[]);for(ga=-1;++ga<N;)if(w=t[ga],Z=w.config,(pa=Z._textAttrs)||(pa=Z._textAttrs={}),oa=w.graphics,T=Z.y,X=Z.displayValue,ha=Z.sliced,V=Z.shapeArgs,ba=Z.centerAngle,la=Z.toolText,aa=!!Z.link,w=Z.style,W=aa||M||
!Z.doNotSlice,null!==T&&void 0!==T){va=oa.element;fa=oa.label;ja=oa.connector;if(!va){va=oa.element=d.Pie3DManager.useSliceFromPool();if(Ba){if(ga<N)for(xa=void 0,na=ga+1;na<N&&void 0===xa;na+=1)xa=t[na].config.shapeArgs.end;void 0===xa&&(xa=sa)}else xa=ya?sa:Aa;va||(va=oa.element=d.Pie3DManager.createSlice().drag(H,I,G).mouseover(J).mouseout(L).attr({ishot:W}));va.attr({start:-xa,end:-xa,cx:b[0],cy:b[1],r:b[2],innerR:b[3],radiusYFactor:c})}void 0!==X?(w?((za=Z._textCss)||(za=Z._textCss={}),za.fontFamily=
w.fontFamily,za.fontSize=w.fontSize,za.lineHeight=w.lineHeight,za.fontWeight=w.fontWeight,za.fontStyle=w.fontStyle):Z._textCss&&(fa.removeCSS(),delete Z._textCss,za=void 0),Z.style=w||(w=r),pa.text=X,pa.fill=(O?B(Z.color):w.color)||"#000000",pa["text-bound"]=[w.backgroundColor,w.borderColor,w.borderThickness,w.borderPadding,w.borderRadius,w.borderDash],pa.direction=P,pa.lineHeight=w.lineHeight,fa?(za&&(fa.css(za),delete za.fontFamily,delete za.fontSize,delete za.lineHeight,delete za.fontWeight,delete za.fontStyle,
za=void 0),delete pa.ishot):e&&e.graphics&&e.graphics.label&&e.graphics.label.length?fa=oa.label=e.graphics.label.splice(0,1):pa.ishot=W,0<k.distance&&(U=k.connectorWidth)&&k.enableSmartLabels?(ja||(ja=e&&e.graphics&&e.graphics.connector&&e.graphics.connector.length?oa.connector=e.graphics.connector.splice(0,1):oa.connector=z.path("M 0 0 l 0 0",ta).attr({visibility:"hidden",ishot:W}).drag(H,I,G).hover(J,L)),ja.attr({"stroke-width":U,stroke:k.connectorColor||"#606060",cursor:aa?"pointer":""}).show()):
ja&&ja.hide()):(fa&&fa.hide(),ja&&ja.hide());T={chart:l,index:ga,seriesData:g,value:T,angle:Z.angle=ba,link:Z.link,shapeArgs:V,slicedX:ha&&!g.singletonCase?qb(ba)*E:0,slicedY:ha&&!g.singletonCase?bb(ba)*F:0,sliced:ha,labelText:X,name:Z.name,percentage:Z.percentage,toolText:la,originalIndex:N-ga-1,style:Z.style,graphic:va,transX:Z.transX=qb(ba)*E,transY:Z.transY=bb(ba)*F,slicedTranslation:Z.slicedTranslation="t"+Z.transX+","+Z.transY,label:fa,connector:ja};w={index:g.reversePlotOrder?ga:N-1-ga,link:Z.link,
value:Z.y,displayValue:Z.displayValueArgs,categoryLabel:Z.categoryLabel,isSliced:Z.sliced,toolText:Z.toolText};va.attr({transform:"t"+T.slicedX+","+T.slicedY,cursor:aa?"pointer":"",color:Z.color.color.split(",")[0],alpha:Z._3dAlpha,borderWidth:Z.borderWidth,borderColor:Z.borderColor,showBorderEffect:Q}).animateWith(f,p,{start:V.start,end:V.end,r:b[2],innerR:b[3],cx:b[0],cy:b[1],radiusYFactor:c},ma,v,wa).tooltip(C?la:a).data("groupId",ga).data("plotItem",T).data("eventArgs",w);pa.plotItem=T;pa.eventArgs=
w;ja&&ja.data("plotItem",T).data("eventArgs",w)}!m&&Ga()},hideFn:function(a,c,e){var d=e&&e.components||{};return function(){c===jb?(d.Pie3DManager.removeSlice(a.element),delete a.element):a[c].hide()}},remove:function(){var a=this.chart,c=this.config,e=this.components.removeDataArr||[],d=this.pool=this.pool=[],g=e.length,l,k,m,f,p=this.hideFn,c=c.startAngle;m=a.get("config","animationObj");var a=m.duration||0,v=m.dummyObj,r=m.animObj,t=m.animType;for(m=0;m<g;m++){l=e[0];l=l.graphics;for(k in l)f=
l[k],d[k]||(d[k]=[]),k===jb?f.animateWith(v,r,{start:-c,end:-c+.01},a,t,p(l,k,this)):d[k].push(f.hide());e.splice(0,1)}},foldingFn:function(){var a=this.config.startAngle;return{start:-a,end:-a+.01}},_getPointColor:function(a,c){a=ib(a);c=aa(c);return{color:a+","+a,alpha:c+","+c,ratio:"0,100"}}},"pie2D",{setBorderWidth:void 0,showBorderEffect:void 0}]);FusionCharts.register("component",["dataset","Doughnut2D",{type:"doughnut2d",_getPointColor:function(a,c,e){var d;a=ib(a);c=aa(c);100>e&&W?(d=X(a,
fb(100*(85-.2*(100-e)))/100),a=ob(a,fb(100*(100-.5*e))/100),c={color:d+","+a+","+a+","+d,alpha:c+","+c+","+c+","+c,radialGradient:!0,gradientUnits:"userSpaceOnUse",r:e}):c={color:a+","+a,alpha:c+","+c,ratio:"0,100"};return c},_parsePiePlotOptions:function(){var a=this.__base__._parsePiePlotOptions.call(this);a.innerSize=this._getInnerSize();return a},draw:function(){var a=this.chart,c=a.config,e=this.config,d=c.canvasLeft+.5*c.canvasWidth,c=c.canvasTop+.5*c.canvasHeight,g,l=e.centerLabelConfig,k=
l.label;g=.5*((e.innerSize=this._getInnerSize())||0);this.__base__.draw.call(this);k&&g&&a.drawDoughnutCenterLabel(k,d,c,2*g,2*g,l,!0);e.lastCenterLabelConfig=l},singleFillColor:function(a){return B({color:ib(a.color,1),alpha:aa(a.alpha,1)})}},"Pie2D"]);FusionCharts.register("component",["dataset","Doughnut3D",{type:"doughnut3d"},"Pie3D"]);FusionCharts.register("component",["datasetGroup","marimekko",{init:function(){this.__base__.init.call(this);this.stackConf=[]},getDataSetPosition:function(a,c){var e=
this.numVisiblePositions,d=this.stackConfig[a.positionIndex||0],g=this.stackConf[c],l;if(!a.visible&&d.visible||0===e)l=0;return{columnWidth:g.columnWidth,height:l,x:g.x}},draw:function(){var a=this.positionStackArr,c=a.length,e=this.chart.getJobList(),d,g,l,m;this.preDrawCalculate();this.drawLabel();this.drawSumValueFlag=!0;for(d=0;d<c;d++)for(g=a[d],l=g.length,this.manageClip=!0,g=0;g<l;g++)m=a[d][g].dataSet,m.draw();this.drawn?this.drawSumValue():e.labelDrawID.push(mb.addJob(this.drawSumValue,
this,[],k.priorityList.label));this.drawn=!0},preDrawCalculate:function(){var a=this.chart,c=this.stackSumValue,d,g=a.isBar,h=a.jsonData.chart,l=a.components.xAxis[0];d=e(g?h.overlapbars:h.overlapcolumns,a.is3D?0:1);var k=l.getAxisPosition(0),m=l.getAxisPosition(1),f=Sa(m-k),p=Ja(e(h.plotspacepercent),0),v=e(h.plotpaddingpercent),r,k=a.config.canvasWidth,t,w=m=0,B=l.config.axisRange.min,l=l.config.axisRange.max-B,z=a.config.categories,C;t=0;var E=a.components.numberFormatter;this.__base__.preDrawCalculate.call(this);
a=B;r=this.numVisiblePositions;g=e(g?h.maxbarheight:h.maxcolwidth,Infinity);g=(1-.01*p)*f||Na(1*f,g*(r||1));g=0===r?g:g/r;Na(g-1,1<r?d||void 0!==v?0<v?g*v/100:0:4:0);d=0;for(v=c[0].length;d<v;d++)m+=c[0][d];this.totalSumValue=m;for(d=0;d<z.length;d++)g=z[d],g.widthpercent&&(t+=E.getCleanValue(g.widthpercent));100===t&&(C=this.setUserWidth=1);d=0;for(v=c[0].length;d<v;d++)g=z[d],this.stackConf[d]||(this.stackConf[d]={}),t=this.stackConf[d],g=C?E.getCleanValue(g.widthpercent)/100:c[0][d]/m,t.columnWidth=
g*k,w+=g,g=g*l/2+a,a=w*l+B,t.x=g;this.isCrisp=!0},getStackSumPercent:function(){var a=this.stackSumValue,c=this.totalSumValue,d,e=this.chart.components.numberFormatter,g=this.chart.config.categories,l=this.setUserWidth,k=[];for(d=0;d<a[0].length;d++)k[d]=l?e.getCleanValue(g[d].widthpercent):a[0][d]/c*100;return k},drawLabel:function(){var a=this.chart,d=a.components,g=a.linkedItems.smartLabel,l=this.getStackSumPercent(),h=this.stackConf,k,m,p,f=a.graphics.datalabelsGroup,v=d.numberFormatter,r=0,t,
w,B=d.paper,z=a.config.canvasBottom,C=d.xAxis[0];k=a.config.style;var E=a.config.dataLabelStyle,F=l.length,H,I=this.sumValues[0],G,J,L,M=a.jsonData.chart;J=d.canvas.config.clip["clip-canvas"];f=this.labelContainer=this.labelContainer||B.group("labelGroup",f);m=e(M.showxaxispercentvalues,1);var M=this.xLabels=this.xLabels||[],Q=a.get("config","animationObj"),a=Q.duration,d=Q.animType,N=Q.dummyObj,Q=Q.animObj;f.attr({"clip-rect":J});g.setStyle(E);if(m)for(J=c(E.backgroundColor,"#ffffff"),G=c(""===E.borderColor?
"#"+k.inCancolor:E.borderColor,"#000000"),L=c(E.borderThickness,1),p=0;p<F-1;p++)r+=l[p],t=v.percentValue(r),k=C.getAxisPosition(h[p].x)+h[p].columnWidth/2,m=z,H=M[p],I[p].positive===I[p].negative?H&&H.hide():(w={text:t,fill:E.color,"text-bound":[J,G,L,E.borderPadding,E.borderRadius,E.borderDash],"line-height":E.lineHeight,visibility:Ra},t=g.getOriSize(t),m=m-t.height/2-L,H?(H.show().animateWith(N,Q,{x:k,y:m},a,d),H.attr(w)):(w.x=k,w.y=m,M[p]=B.text(w,f)))},getSumValueConfig:function(a){var c=a.yAxis,
d=a.stack100percent,e=a.sumValue;a=this.chart.components.xAxis[0].getAxisPosition(this.stackConf[a.xValue].x);c=c.getAxisPosition(d?100:e);return{xPos:a,yPos:c}}},"column"]);FusionCharts.register("component",["dataset","marimekko",{type:"marimekko",configure:function(){k.each(this.JSONData.data,function(a){a&&(a.value=Sa(a.value))});this.__base__.configure.call(this)},_addLegend:function(){var a=this.chart,c=a.jsonData.chart,d,g;g=this.config;var a=a.components.legend,h=g.legendSymbolColor;d=e(c.us3dlighting,
c.useplotgradientcolor,1);c=ob(h,60).replace(ta,N);d?(d=ob(h,40),d={FCcolor:{color:h+","+h+","+d+","+h+","+h,ratio:"0,70,30",angle:270,alpha:"100,100,100,100,100"}}):d={FCcolor:{color:h,angle:0,ratio:"0",alpha:"100"}};g={enabled:g.includeInLegend,type:this.type,fillColor:B(d),strokeColor:B(c),rawFillColor:h,label:ja(this.JSONData.seriesname)};this.legendItemId=a.addItems(this,this.legendInteractivity,g)},draw:function(){var a=this,d=a.JSONData,g=a.chart,l=g.getJobList(),h=g.jsonData.chart,m=g.config,
q=a.config,v=a.groupManager,f=a.index,r,t,w=a.visible,z=g.components;t=z.canvas.config.clip;var C=z.paper,z=z.xAxis[0],E=z.getCategoryLen(),F=a.yAxis,H=g.graphics.datasetGroup,I=g.config.isstacked,J,L,M,Q=g.graphics,N=k.parseUnsafeString,P=k.getValidValue,T=k.Raphael,R=m.showtooltip,O=g.get("config","animationObj"),X=O.duration,aa=O.dummyObj,ha=O.animObj,O=O.animType,W=z.getAxisPosition(0),ba=z.getAxisPosition(1),la=q.groupMaxWidth=ba-W,W=v.stackSumValue[a.positionIndex],ba=m.maxcolwidth,ba=(1-.01*
q.definedgrouppadding)*la||Na(1*la,1*ba),oa,U,V,fa=a.components,Z=fa.data,ja,na,ta,ga,za,qa=a.drawn,xa=fa.removeDataArr,xa=xa&&xa.length,sa=(fa=fa.addDataArr)&&fa.length,fa=F.getAxisBase(),ma=F.yBasePos=F.getAxisPosition(fa),wa,Ba=0,q=q.showshadow,Ga=m.plotborderthickness,Aa=m.useroundedges,ya=a.graphics,va=ya.container,pa=ya.trackerContainer,Ea=ya.dataLabelContainer,Ca=ya.shadowContainer,ya=ya.pool;ta=Q.trackerGroup;var Fa,Ha=1,Ia=z.getAxisPosition(E-1)+0,Ka=z.getAxisPosition(0)+0,Ja=!0,Ma=a.startPosition,
Q=v.stackConf,Oa=m.showplotborder,Pa=function(){!1!==a.visible||!1!==a._conatinerHidden&&void 0!==a._conatinerHidden||(va.hide(),pa.hide(),Ca.hide(),Ea&&Ea.hide(),a._conatinerHidden=!0)},Ra=function(){Ja&&Pa();this.show()},Ta=function(){return Ma?function(a,b){a.x=Ka-la*(sa-b);a.y=L;a.height=U}:!1===Ma?function(a){a.x=Ia+la*Ha++;a.y=L;a.height=U}:function(a){a.width=0}},g=g.components.canvas.config;Fa=g.oriCanvasBorderThickness;var g=0<g.canvasBorderWidth,Ua=m.canvasRight,Va=m.canvasTop,m=m.canvasLeft;
qa&&(Ta=Ta());va||(va=a.graphics.container=C.group("columns",H),w||va.hide());pa||(pa=a.graphics.trackerContainer=C.group("col-hot",ta),w||pa.hide());Ca||(Ca=a.graphics.shadowContainer=C.group("shadow",H).toBack(),w||Ca.hide());t=t["clip-canvas"];g||(t[3]+=Fa/2,G&&(t[2]+=2*Fa));qa?(va.animateWith(aa,ha,{"clip-rect":t},X,O),Ca.animateWith(aa,ha,{"clip-rect":t},X,O)):(va.attr({"clip-rect":t}),Ca.attr({"clip-rect":t}));for(t=0;t<E;t++)r=(na=(H=Z[t])&&H.config)&&na.setValue,void 0!==H&&null!==r&&(ta=
v.getDataSetPosition(a,t),oa=e(ta.columnWidth,ba/1),ga=ta.height,ta=na.setLink,Fa=na.colorArr,H.graphics||(Z[t].graphics={}),za=na.displayValue,wa=na.previousPositiveY,ja=P(N(c(na.origToolText,d.plottooltext,h.plottooltext))),I&&(wa=a._parseValues(t,wa,W[t],ja),r=na.value),J=Q[t].x,V=F.getAxisPosition(wa||fa),J=z.getAxisPosition(J)-oa/2,0!==ga?(L=F.getAxisPosition(r+(wa||0)),U=Sa(V-L)):(U=0,L=V),L=Na(L,V),parseInt(L)<=Va&&(U-=Va-L-+g,L=Va-+g),1>=Ga&&(Za(J)<=m&&(oa+=J,J=m-Ga/2+ +!!Ga-+g,oa-=J),Za(J+
oa)>=Ua&&(oa=Ua-J+Ga/2-+!!Ga+ +g)),v.isCrisp&&(M=T.crispBound(J,L,oa,U,Ga),J=M.x,L=M.y,oa=M.width,U=M.height),wa=H.trackerConfig||(H.trackerConfig={}),V=!1!==na.toolText&&na.toolText+(ja?"":na.toolTipValue),ja=na.plotBorderDashStyle,ga=wa.eventArgs||(wa.eventArgs={}),ga.index=t,ga.link=ta,ga.value=r,ga.displayValue=za,ga.categoryLabel=na.label,ga.toolText=V,ga.id="",ga.datasetIndex=f||0,ga.datasetName=d.seriesname,ga.visible=w,X||(ma=L,Ba=U),r={x:J,y:ma,width:oa,height:Ba||1,r:Aa,ishot:!R,fill:B(Fa[0]),
stroke:B(Fa[1]),"stroke-width":Oa?Ga:0,"stroke-dasharray":ja,"stroke-linejoin":"miter",visibility:w},H._xPos=J,H._yPos=L,H._height=U,H._width=oa,H._index=t,!H.graphics.element&&qa&&(Ta(r,t),ya&&ya[0].graphics.element?(na=ya[0].graphics.element,na.attr(r)):na=H.graphics.element=C.rect(r,va),ya&&ya[0].graphics.hotElement&&(H.graphics.hotElement=ya[0].graphics.hotElement),ya&&ya.splice(0,1)),H.graphics.element?(r={x:J,y:L,width:oa,height:U||1},X?na=H.graphics.element.animateWith(aa,ha,r,X,O,Ra):(na=
H.graphics.element.attr(r),Ja&&Pa())):(na=H.graphics.element=C.rect(r,va),X&&(na.animateWith(aa,ha,{y:L,height:U||1},X,O),Ja=!1)),na.attr({r:Aa,ishot:!R,fill:B(Fa[0]),stroke:B(Fa[1]),"stroke-width":Oa?Ga:0,"stroke-dasharray":ja,"stroke-linejoin":"miter"}).shadow({opacity:q},Ca).data("BBox",M),r=wa.attr||(wa.attr={}),r.x=J,r.y=L,r.width=oa,r.height=U,r.r=Aa,r.cursor=ta?"pointer":"",r.stroke=p,r["stroke-width"]=Ga,r.fill=p,r.ishot=!0,r.visibility=w);l.trackerDrawID.push(mb.addJob(a.drawTracker,a,[],
k.priorityList.tracker));a.drawn?a.drawLabel():l.labelDrawID.push(mb.addJob(a.drawLabel,a,[],k.priorityList.label));a.drawn=!0;xa&&a.remove()},getDataLimits:function(){var a=this.conf;return{max:a.yMax,min:a.yMin,xMax:100,xMin:0}}},"column"])}]);FusionCharts.register("module",["private","modules.renderer.js-interface",function(){var g=this,k=g.hcLib,F=g.renderer.getRenderer("javascript"),r=k.hasModule,E=k.loadModule,z=k.getMetaSentence,G=k.moduleCmdQueue,a=k.executeWaitingCommands,L=k.injectModuleDependency,
d=k.moduleDependencies,l=k.getDependentModuleName,P,W;P=function(d){var r,m,c,w={},E;d=z(d);for(r in g.core.items)r=g.core.items[r],m=r.chartType(),c=r.options.chartTypeSourcePath+m,(m=r.jsVars)&&m.waitingModule&&r.__state.rendering&&k.needsModule(d.predicate,c)&&(m.waitingModuleError=!0,m=l(c).concat(m.userModules),m.length&&(m=m[m.length-1],w[m]=k.moduleCmdQueue[m]));for(E in w)a(w[E]);g.raiseError(g.core,"11171116151","run","HC-interface~renderer.load","Unable to load required modules and resources: "+
d.key)};W=function(a,d,l){var c=a.args,k=a.options;a._chartMessageImageStyle={imageHAlign:c.typeNotSupportedMessageImageHAlign||k.baseChartMessageImageHAlign,imageVAlign:c.typeNotSupportedMessageImageVAlign||k.baseChartMessageImageVAlign,imageAlpha:c.typeNotSupportedMessageImageAlpha||k.baseChartMessageImageAlpha,imageScale:c.typeNotSupportedMessageImageScale||k.baseChartMessageImageScale};a._chartMessageStyle={color:c.typeNotSupportedMessageColor||k.baseChartMessageColor,fontFamily:c.typeNotSupportedMessageFont||
k.baseChartMessageFont,fontSize:c.typeNotSupportedMessageFontSize||k.baseChartMessageFontSize};g.hcLib.createChart(a,d,"base",l,k.typeNotSupportedMessage)};k.eventList=g.extend(g.legacyEventList,{loaded:"FC_Loaded",dataloaded:"FC_DataLoaded",rendered:"FC_Rendered",drawcomplete:"FC_DrawComplete",dataxmlinvalid:"FC_DataXMLInvalid",nodatatodisplay:"FC_NoDataToDisplay",exported:"FC_Exported"});k.raiseEvent=g.raiseEventWithLegacy;d.charts=g.extend(d.charts||{},{column2d:0,column3d:0,bar2d:0,bar3d:0,pie2d:0,
pie3d:0,line:0,area2d:0,doughnut2d:0,doughnut3d:0,pareto2d:0,pareto3d:0,mscolumn2d:0,mscolumn3d:0,msline:0,msarea:0,msbar2d:0,msbar3d:0,stackedcolumn2d:0,marimekko:0,stackedcolumn3d:0,stackedarea2d:0,stackedcolumn2dline:0,stackedcolumn3dline:0,stackedbar2d:0,stackedbar3d:0,msstackedcolumn2d:0,mscombi2d:0,mscombi3d:0,mscolumnline3d:0,mscombidy2d:0,mscolumn3dlinedy:0,stackedcolumn3dlinedy:0,msstackedcolumn2dlinedy:0,scatter:0,bubble:0,ssgrid:0,scrollcolumn2d:0,scrollcolumn3d:0,scrollline2d:0,scrollarea2d:0,
scrollstackedcolumn2d:0,scrollcombi2d:0,scrollcombidy2d:0,zoomline:0,zoomlinedy:0,zoomscatter:0});d.powercharts=g.extend(d.powercharts||{},{spline:0,splinearea:0,msspline:0,mssplinearea:0,mssplinedy:0,multiaxisline:0,multilevelpie:0,waterfall2d:0,msstepline:0,inversemsline:0,inversemscolumn2d:0,inversemsarea:0,errorbar2d:0,errorscatter:0,errorline:0,logmsline:0,logmscolumn2d:0,logstackedcolumn2d:0,radar:0,dragnode:0,candlestick:0,selectscatter:0,dragcolumn2d:0,dragline:0,dragarea:0,boxandwhisker2d:0,
kagi:0,heatmap:0,treemap:0});d.widgets=g.extend(d.widgets||{},{angulargauge:0,bulb:0,cylinder:0,drawingpad:0,funnel:0,hbullet:0,hled:0,hlineargauge:0,vlineargauge:0,pyramid:0,realtimearea:0,realtimecolumn:0,realtimeline:0,realtimelinedy:0,realtimestackedarea:0,realtimestackedcolumn:0,sparkcolumn:0,sparkline:0,sparkwinloss:0,thermometer:0,vbullet:0,gantt:0,vled:0});d.maps=g.extend(d.maps||{},{});g.extend(F,{render:function(a,d){var m=this.chartType(),c=this.options.chartTypeSourcePath+m,w=this.jsVars,
z=this.__state,e=k.chartAPI,v=this.options,E=this.args,B=this.options.showChartLoadingMessage,Q,I;Q=l(c).concat(w.userModules);w.isResizing&&(w.isResizing=clearTimeout(w.isResizing));w.hcObj&&w.hcObj.destroy&&w.hcObj.destroy();if(e[m]){if(e[z.lastRenderedType]&&z.lastRenderedType!==m)for(I in g.raiseEvent("chartTypeChanged",{previousType:z.lastRenderedType,newType:m},this),e[z.lastRenderedType].eiMethods)delete this[I];z.lastRenderedType=m;z.lastRenderedSrc=this.src;!w.waitingModuleError&&k.raiseEvent("internal.loaded",
{type:m,triggeredModuleLoad:w.drLoadAttempted||w.waitingModule},this,[this.id]);delete w.waitingModule;delete w.waitingModuleError;delete w.drLoadAttempted;g.hcLib.createChart(this,a,m,d)}else{if(m&&r(Q)){if(w.drLoadAttempted){g.raiseError(this,11112822001,"run","HC-interface~renderer.render","Chart runtimes not loaded even when resource is present");W(this,a,d);return}L(c)&&(Q=l(c).concat(w.userModules));w.drLoadAttempted=!0}else{if(!Q.length){W(this,a,d);return}if(w.waitingModuleError){W(this,a,
d);delete w.waitingModule;delete w.waitingModuleError;return}}(m=G[Q[Q.length-1]])?(m.push({cmd:"render",obj:this,args:arguments}),w.waitingModule||(w=B?v.PBarLoadingText||v.loadMessage:"",this._chartMessageImageStyle={imageHAlign:E.loadMessageImageHAlign||v.baseChartMessageImageHAlign,imageVAlign:E.loadMessageImageVAlign||v.baseChartMessageImageVAlign,imageAlpha:E.loadMessageImageAlpha||v.baseChartMessageImageAlpha,imageScale:E.loadMessageImageScale||v.baseChartMessageImageScale},this._chartMessageStyle=
{color:E.loadMessageColor||v.baseChartMessageColor,fontFamily:E.loadMessageFont||v.baseChartMessageFont,fontSize:E.loadMessageFontSize||v.baseChartMessageFontSize},g.hcLib.createChart(this,a,"base",void 0,w),F.load.call(this,a,d))):(g.raiseError(this,12080515551,"run","HC-interface~renderer.render","Unregistered module in dependentModule definition."),this._chartMessageImageStyle={imageHAlign:E.renderErrorMessageImageHAlign||v.baseChartMessageImageHAlign,imageVAlign:E.renderErrorMessageImageVAlign||
v.baseChartMessageImageVAlign,imageAlpha:E.renderErrorMessageImageAlpha||v.baseChartMessageImageAlpha,imageScale:E.renderErrorMessageImageScale||v.baseChartMessageImageScale},this._chartMessageStyle={color:E.renderErrorMessageColor||v.baseChartMessageColor,fontFamily:E.renderErrorMessageFont||v.baseChartMessageFont,fontSize:E.renderErrorMessageFontSize||v.baseChartMessageFontSize},g.hcLib.createChart(this,a,"base",void 0,v.renderErrorMessage))}},update:function(a){var d=this.ref,l=this.jsVars,c=l&&
l.fcObj,c=l.container||c&&c.options&&c.options.containerElement&&c.options.containerElement.childNodes[0];l.hcObj&&l.hcObj.destroy&&l.hcObj.destroy();l.isResizing&&(l.isResizing=clearTimeout(l.isResizing));void 0===a.error?(delete l.stallLoad,delete l.loadError,this.isActive()?this.src!==this.__state.lastRenderedSrc?this.render():g.hcLib.createChart(this,c):this.__state.rendering&&!l.waitingModule&&g.hcLib.createChart(this,c)):(this.isActive()&&"function"===typeof d.showChartMessage&&d.showChartMessage("InvalidXMLText"),
delete l.loadError)},resize:function(a){var d=this.ref,l,c=this.jsVars;d&&d.resize&&(c.isResizing&&(c.isResizing=clearTimeout(c.isResizing)),c.isResizing=setTimeout(function(){l=g.normalizeCSSDimension(a.width,a.height,d);void 0!==a.width&&(d.style.width=l.width);void 0!==a.height&&(d.style.height=l.height);d.resize();delete c.isResizing},0))},dispose:function(){var a,d=this.jsVars;d.isResizing&&(d.isResizing=clearTimeout(d.isResizing));d.instanceAPI&&d.instanceAPI.dispose&&(d.instanceAPI.dispose(),
delete d.instanceAPI);if(a=this.ref)g.purgeDOM(a),a.parentNode&&a.parentNode.removeChild(a);d.container=null;k.cleanupWaitingCommands(this)},load:function(d,r){var m=this.jsVars,c=this.chartType(),w=g.hcLib.chartAPI[c],c=l(c).concat(m.userModules),z=c[c.length-1];w||!c||c&&0===c.length?(delete m.waitingModule,d&&W(this,d||this.ref,r)):m.waitingModule||(m.waitingModule=!0,delete m.waitingModuleError,E(c,function(){delete m.waitingModule;a(k.moduleCmdQueue[z])},P,this))}})}]);FusionCharts.register("module",
["private","modules.api.dynamicchartattributes",function(){var g=this;g.extend(g.core,{setChartAttribute:function(k,F){var r,E,z,G;if("string"===typeof k)r=k,k={},k[r]=F;else if(null===k||"object"!==typeof k)return;G=0;if(z=(r=this.getChartData(g.dataFormats.JSON))&&(r.chart||r.graph||r.map)){for(E in k)G+=1,null===k[E]?delete z[E.toLowerCase()]:z[E.toLowerCase()]=k[E];0<G&&("undefined"===typeof z.animation&&(z.animation="0"),this.setChartData(r,g.dataFormats.JSON))}else g.raiseError(this,"2105141421",
"run","#setChartAttribute()","Could not retrieve attribute list. Is data ready?")},getChartAttribute:function(k){var F=this.getChartData(g.dataFormats.JSON),F=F&&(F.chart||F.graph||F.map),r,E;if(0===arguments.length||void 0===k||void 0===F)return F;if("string"===typeof k)r=F[k.toString().toLowerCase()];else if(k instanceof Array)for(r={},E=0;E<k.length;E+=1)r[k[E]]=F[k[E].toString().toLowerCase()];else g.raiseError(this,"25081429","param","~getChartAttribute()",'Unexpected value of "attribute"');
return r}},!0)}]);FusionCharts.register("module",["private","api.linkmanager",function(){var g=this,k=g.FusionChartsDOMInsertModes,F={},r=function(k,r){this.items={};this.root=k;this.parent=r;r instanceof g.core?this.level=this.parent.link.level+1:(F[k.id]=[{}],this.level=0)},E=function(g,r){return(g.options.containerElement===r.options.containerElement||g.options.containerElementId===r.options.containerElementId)&&g.options.insertMode===k.REPLACE};g.policies.link=["link",void 0];r.prototype.configuration=
function(){return F[this.root.id][this.level]||(F[this.root.id][this.level]={})};g.extend(g.core,{configureLink:function(k,r){var a;if(k instanceof Array){for(a=0;a<k.length;a+=1)"object"!==typeof F[this.link.root.id][a]&&(F[this.link.root.id][a]={}),g.extend(F[this.link.root.id][a],k[a]);F[this.link.root.id].splice(k.length)}else"object"===typeof k?("number"!==typeof r&&(r=this.link.level),void 0===F[this.link.root.id][r]&&(F[this.link.root.id][r]={}),g.extend(F[this.link.root.id][r],k)):g.raiseError(this,
"25081731","param","~configureLink()","Unable to update link configuration from set parameters")}},!0);g.addEventListener("beforeRender",function(k){k.sender.link instanceof r&&!k.sender.link.root.disposed?k.sender.link.parent instanceof g.core&&(k.sender.link.parent.link.items[k.sender.id]=k.sender):k.sender.link=new r(k.sender)});g.addEventListener("linkedChartInvoked",function(k,F){var a=k.sender,L=a.clone({dataSource:F.data,dataFormat:F.linkType,link:new r(a.link.root,a)},!0),d=F.alias,l;d&&(!L.typeSource&&
L.swfUrl&&(L.typeSource=L.swfUrl.replace(/(.*?)?[^\/]*\.swf.*?/ig,"$1")),L.type=d);a.args&&0!==parseInt(a.args.animate,10)&&delete L.animate;g.extend(L,a.link.configuration());g.raiseEvent("beforeLinkedItemOpen",{level:a.link.level},a.link.root,void 0,function(){g.core.items[L.id]instanceof g.core&&g.core.items[L.id].dispose();l=new g.core(L);E(l,a)||a.options.overlayButton&&a.options.overlayButton.message||("object"!==typeof a.options.overlayButton&&(a.options.overlayButton={}),a.options.overlayButton.message=
"Close");l.render();g.raiseEvent("linkedItemOpened",{level:a.link.level,item:l},a.link.root)})});g.addEventListener("overlayButtonClick",function(k,r){if("LinkManager"===r.id){var a=k.sender,F=a.link.level-1,d=a.link.parent,l=a.link.root;g.raiseEvent("beforeLinkedItemClose",{level:F,item:a},l,a,function(){setTimeout(function(){g.core.items[a.id]&&a.dispose();g.raiseEvent("linkedItemClosed",{level:F},l)},0);d.disposed||d.isActive()||!E(a,d)||d.render()})}});g.addEventListener("Loaded",function(k){k=
k.sender;var r;k&&void 0!==k.link&&k.link.root!==k&&k.link.parent instanceof g.core&&(k.ref&&"function"===typeof k.ref.drawOverlayButton?(r=g.extend({show:!0,id:"LinkManager"},k.link.parent.options.overlayButton),g.extend(r,k.link.parent.link.configuration().overlayButton||{}),k.ref.drawOverlayButton(r)):g.raiseWarning(k,"04091602","run","::LinkManager^Loaded","Unable to draw overlay button on object. -"+k.id))});g.addEventListener("beforeDispose",function(k){var E=k.sender;E&&E.link instanceof r&&
(E&&E.link&&E.link.parent instanceof g.core&&E.link.parent.link&&E.link.parent.link.items&&delete E.link.parent.link.items[k.sender.id],delete F[E.id])})}]);FusionCharts.register("module",["private","modules.renderer.js-thememanager",function(){var g=this,k,F,r,E=/\s+!important$/,z=/\\!important$/,G=function(a,d){for(var c=d.length,g=-1;c--;)if(a===d[c]){g=c;break}return g},a=function(d,g,c,k,l){var e,p,r,B;l?(k.push(d),l.push(g)):(k=[d],l=[g]);if(g instanceof Array)for(e=0;e<g.length;e+=1){try{p=
d[e],r=g[e]}catch(z){continue}if("object"!==typeof r)c&&void 0===r||(d[e]=r);else{if(null===p||"object"!==typeof p)p=d[e]=r instanceof Array?[]:{};B=G(r,l);-1!==B?p=d[e]=k[B]:a(p,r,c,k,l)}}else for(e in g){try{p=d[e],r=g[e]}catch(z){continue}if(null!==r&&"object"===typeof r)if(B=Object.prototype.toString.call(r),"[object Object]"===B){if(null===p||"object"!==typeof p)p=d[e]={};B=G(r,l);-1!==B?p=d[e]=k[B]:a(p,r,c,k,l)}else"[object Array]"===B?(null!==p&&p instanceof Array||(p=d[e]=[]),B=G(r,l),-1!==
B?p=d[e]=k[B]:a(p,r,c,k,l)):d[e]=r;else d[e]=r}return d},L=function(d,g,c){if("object"!==typeof d&&"object"!==typeof g)return null;if("object"!==typeof g||null===g)return d;"object"!==typeof d&&(d=g instanceof Array?[]:{});a(d,g,c);return d},d=function(a){var d={important:!1,str:""};if(!a)return d;a=a.toString();E.test(a)?(a=a.replace(E,""),d.important=!0):(a=a.replace(z,"!imporant"),d.important=!1);d.str=a;return d},l=function(a,d){var c,g,k,e,p,r,B=0,z=0;for(c in a)if(g=a[c],g instanceof Array)for(r=
g.length,p=0;p<r;p+=1){if(e=g[p],"object"===typeof e)if("category"===c)if("true"===e.vline){if(k=d.component("vline",B,e))P(e,k),B+=1}else{if(k=d.component("category",z,e,r))P(e,k),z+=1}else if(k=d.component(c,p,e,r))P(e,k),l(e,k)}else"object"===typeof g&&(k=d.component(c,null,g))&&(P(g,k),l(g,k))},P=function(a,g){var c=g.getAll(),k,l;for(k in c)l=c[k].toString(),l=d(l),l.important?a[k.toLowerCase()]=l.str:void 0===a[k.toLowerCase()]&&(a[k.toLowerCase()]=l.str)},W=function(a,d){"geo"===d.defaultSeriesType&&
p.call(this,a,d)},p=function(a,d){var c=a.sender,k=c.getChartData(g.dataFormats.JSON,!0),l;k.error||((l=k.data.chart.theme)?r.themify(l,c,c.chartType(),k.data,"geo"===d.defaultSeriesType&&"geo"):c.jsVars&&c.jsVars.themeObject&&c.jsVars.themeObject.dispose())};k=function(){this.themeStore={}};k.prototype={constructor:k,add:function(a){for(var d=0,c=a.length,g;d<c;d+=1)(g=a[d].name)&&(this.themeStore[g]=a[d])},themify:function(a,d,c,k,l){var e=d.jsVars,r=a.split(","),z=[],B=r.length,E,I;if(B){for(I=
0;I<B;I+=1){E=this.themeStore;var G;G=r[I];G=G.replace(/^\s\s*/,"");for(var L=/\s/,P=G.length;L.test(G.charAt(--P)););G=G.slice(0,P+1);(E=E[G])&&z.push(this.evaluateThemeJSON(E.theme,d,c,l))}z.length?(e.themeObject=new F(z,d,!1,k),this.applyTheme(d),d.addEventListener("chartTypeChanged",p),d.addEventListener("internal.drawstart",W)):g.raiseWarning(d,"14051100501","run","api.themes~themify()",'The theme "'+a+'" requested has not been registered.')}},evaluateThemeJSON:function(a,d,c,g){var k={},e=d.jsVars,
l=function(a){var c,d;for(c in a)d=a[c],k[c]=d instanceof Array?L(k[c]||[],d):"object"===typeof d?L(k[c]||{},d):d};c=c||d.chartType();e.themeObject&&a!==e.themeObject&&(e.themeObject.dispose(),delete e.themeObject);l(a.base);g&&a[g]&&l(a[g]);c&&a[c]&&l(a[c]);return k},applyTheme:function(a){a=a.jsVars.themeObject;var d=a.getThemedJSONData().data;d&&l(d,a)}};F=function(a,d,c,g){this.themeArray=a;this.themeComponents={};this.base={};this.chartInstance=d;this.isChildInstance=!!c;this.themedData=c?null:
L({},g);this.length=a.length;d=0;for(c=a.length;d<c;d+=1)this.parse(a[d])};F.prototype={constructor:F,pushTheme:function(a){a&&(this.themeArray.push(a),this.parse(a),this.length+=1)},popTheme:function(){},parse:function(a){var g=this.themeComponents,c=this.chartInstance,k=this.base,l,e,p;for(e in a)if("string"===typeof a[e]||"number"===typeof a[e])if(k[e]){if(l=d(a[e]),p=d(k[e]),l.important||!p.important)k[e]=a[e]}else k[e]=a[e];else g[e]||(g[e]=[]),l=g[e],a[e]instanceof Array?l.push(L([],a[e])):
"object"===typeof a[e]?l.push(new F([a[e]],c,!0)):"function"===typeof a[e]&&l.push(a[e])},merge:function(a){var g=this.base,c=a.base,k=this.themeComponents,l=a.themeComponents,e,p,r;for(r in c)if(e=d(g[r]),p=d(c[r]),!e.important||p.important)g[r]=c[r];for(r in l)k[r]=k[r]?k[r].concat(l[r]):[].concat(l[r]);this.length+=a.length},get:function(a){return this.base[a]},getAll:function(){return L({},this.base)},component:function(a,d,c,g){var k=this.themeComponents,e=this.chartInstance,l=new F([],e,!0),
p,r,z;r=k[a];if(!r)return null;a=0;for(k=r.length;a<k;a+=1)z=r[a],"function"===typeof z?(d=d||0,l.pushTheme(z.call(e,d,c,g))):z instanceof Array?(d=d||0,p=z.length,d%=p,p=z[d],p instanceof F?l.merge(p):"function"===typeof p?l.pushTheme(p.call(e,d,c,g)):l.pushTheme(p)):z instanceof F?l.merge(z):l.pushTheme(z);return l},getThemedJSONData:function(){return{data:this.themedData}},dispose:function(){var a=this.themeComponents,d=this.chartInstance,c,g;for(c in a)if(g=a[c].length){for(;g--;)a[c][g].dispose&&
a[c][g].dispose();delete a[c]}this.isChildInstance||(d.removeEventListener("chartTypeChanged",p),d.removeEventListener("internal.drawstart",W));this.dataWithoutTheme=this.isChildInstance=this.themeArray=this.base=this.chartInstance=this.themeComponents=null}};r=new k;g.registrars.theme=g.registerTheme=function(a){a&&("[object Array]"!==Object.prototype.toString.call(a)&&(a=[a]),r.add(a))};g.addEventListener("beforeDataUpdate",function(a,d){var c=a.sender,k=g.core.transcodeData(d.data,d.format,g.dataFormats.JSON),
l=k.chart&&k.chart.theme;l?r.themify(l,c,c.args.type,k):c.jsVars&&c.jsVars.themeObject&&(c.jsVars&&c.jsVars.themeObject.dispose(),c.jsVars&&delete c.jsVars.themeObject)})}]);FusionCharts.register("theme",{name:"default",theme:{base:{chart:{labelDisplay:"stagger !important",caption:"Theme Caption \\!important",canvasBgColor:"#56EF22",borderThickness:"5 !important",borderColor:"#E60539",baseFontColor:"#781129"},categories:[{fontColor:"#0F4F40",fontSize:15,category:function(g){return{showLabel:g%2?0:
1}},vline:{color:"#000000",thickness:2}}],dataset:[{color:"#8C3146",data:function(g,k){8==g&&(k.value="");return{color:32E3>Number(k.value)?"#8C3146":"#FF0000",alpha:"100"}}}],trendlines:[{line:function(g){return g?{color:"#ff0000",thickness:3}:{color:"#ffff00",thickness:3}}}]},pie2d:{chart:{bgColor:"#FF0000"}},msline:{chart:{canvasBgColor:"#ff0000"}},geo:{chart:{canvasBgColor:"#0000ff"}},world:{chart:{canvasBgColor:"#00ff00"}}}});FusionCharts.register("module",["private","modules.renderer.js-highlightmanager",
function(){var g=this,k=g.hcLib,F=k.extend2,r=k.pluckNumber,E=k.toRaphaelColor,z=/^#?[0-9a-f]{6}/i,G=/FFFFFF/i,a=/255,255,255/,L=k.getFirstAlpha,d=function(a){a=a.replace("rgba(","").split(",");return"#"+("000000"+(a[0]<<16|a[1]<<8|a[2]).toString(16)).slice(-6)},l=k.pluck,P=function(a){if(/rgb/.test(a))return a=a.match(/[\d\.]+\)/g),parseFloat(a&&a[0]);if(a.FCcolor)return L(a.FCcolor.alpha)},W=function(a){a=a.split(",");var c,d,e,g={},k;c=0;for(d=a.length;c<d;c++)e=a[c].split("="),k=e[0],e=e[1],g[k]=
e;return g},p=function(a,c,e){var g,k=c.color;if(/rgb/.test(a))c=l(c.alpha,100*P(a)),/rgb/.test(k)&&(k=d(k)),g=e?E({color:l(k,d(a)),alpha:c}):a;else if(a.FCcolor){if(e){a=a.FCcolor;var m;e={};var p;for(m in a)if("alpha"===m){k=m;if(c.alpha){g=a[m];var r=c.alpha,t=void 0,w=void 0,F=[];if("number"===typeof g)g=r;else{w=g.split&&g.split(",");for(t=0;t<w.length;t++)F.push(r);g=F.join()}}else g=a[m];e[k]=g}else"color"===m?(-1!==a[m].indexOf(",")&&c.color&&(p=c.color+","+a[m].substring(a[m].indexOf(",")+
1)),e[m]=l(p||c.color,a[m])):e[m]=a[m];c=E(e)}else c=E(a.FCcolor);g=c}else z.test(a.color||a)&&(g=e?E({color:l(c.color,a.color,a),alpha:l(c.alpha,a.alpha)}):E({color:a.color||a,alpha:a.alpha}));return g},t=function(a,c,d){var e,g,k,m=a.chart;e=m.config;m=m.config.dataLabelStyle;a=a.components.data;var p,r,t,w,z,C;p=0;for(r=a.length;p<r;p++)if(e=a[p])for(w in t=e.graphics,e=e.config,k=e.anchorProps,g=k.enabled,e={FCcolor:{alpha:d&&g?l(c.anchorbgalpha,c.alpha,k.bgAlpha):k.bgAlpha,color:d&&g?l(c.anchorbgcolor,
c.color,k.bgColor):k.bgColor}},g={FCcolor:{alpha:d&&g?l(c.borderalpha,c.alpha,k.borderAlpha):k.borderAlpha,color:d&&g?l(c.anchorbordercolor,c.color,k.borderColor):k.borderColor}},k=d?c.alpha:k.imageAlpha,d||P(m.color),t)switch(C=(z=t[w])&&z.type,C){case "path":z.attr({fill:E(e),stroke:E(g)});break;case "image":z.attr({opacity:k/100});break;case "text":J(z,c,m,d)}},m=function(c,e,g,k){var m=e.symbolAttr||{},r=m.fill,m=m.stroke,t=e.textAttr||{},t=k?l(g.color,d(t.fill)):d(t.fill),w=c.legendItemText,
F=c.legendItemSymbol;c=c.legendItemLine;e=(e.lineAttr||{}).stroke;c&&e&&(z.test(e)?c.attr({stroke:k?E({color:l(g.color,e),alpha:g.alpha}):e}):(e=p(e,g,k),c.attr({stroke:e})));F&&(r&&(r=r.match(z)?k&&!G.test(r)?E({color:g.color||r,alpha:g.alpha}):r:a.test(r)?r:p(r,g,k)),m&&(m=z.test(m)?k&&!G.test(m)?E({color:g.color||m,alpha:g.alpha}):m:k&&!a.test(m)?g.color?E({color:g.color,alpha:g.alpha}):m:m),F.attr({fill:r||"none",stroke:m||"none"}));w&&w.attr({fill:E({color:t,alpha:k?g.alpha:100})})},c={area:function(a,
c,d){var e=this.chart,g=e.config,k=e.components.legend.components.items,p,r=this.legendItemId,w=k.length;a=W(a);var z=this.graphics||{},e=z.legendGraphics,F=g.dataLabelStyle,G=z.dataLabelContainer,C=this.config,J,g=0<(C.shadow||{}).opacity;if(!d&&!0===this.visible){a.alpha=a.alpha||30;for(d=0;d<w&&(p=k[d]||{},p.legendItemId!==r);d++);G&&G.attr({opacity:c?a.alpha/100:P(F.color)});d=C.plotbordercolor;k=C.plotborderalpha;r=C.plotfillalpha;w=C.plotgradientcolor;z=l(z.lineElement,z.splineElement);d=c?
l(a.bordercolor,a.color,d):d;a.color&&(J=a.color+(w?","+w:""));w=C.fillColor.color;J=c?l(J,w):w;C=C.plotfillangle;r=c?a.alpha:r;k=c?l(a.borderalpha,a.alpha):k;g=g?c?a.alpha/100:r/100:!1;z.attr({fill:E({color:J,alpha:r,angle:C}),stroke:E({color:d,alpha:k})}).shadow(g);e&&m(e,p.config,a,c);t(this,a,c)}},bubble:function(a,c,d){var e=this.chart,g=e.components.legend.components.items||[],p,r=g.length,t=this.legendItemId,e=e.config.dataLabelStyle,w=this.graphics,z=w.legendGraphics,F=k.graphics.getPointColor,
G=w.dataLabelContainer;a=W(a);if(!1===d&&!0===this.visible){a.alpha||(a.alpha=30);w=this.components.data||[];for(d=0;d<r&&(p=g[d]||{},p.legendItemId!==t);d++);m(z,p.config,a,c);G&&G.attr({opacity:c?a.alpha/100:P(e.color)});d=0;for(r=w.length;d<r;d++)if(g=w[d])t=g.graphics,p=g.config,g=p.colorObj,z=p.is3d,p=t.element,t=t.label,z?(z=c?F(l(a.color,g.FCcolor.color),l(a.alpha,L(g.alpha))):g,z=E(z)):(z=c?l(a.color,g.color):g.color,g=c?a.alpha:g.alpha,z=E({color:z,alpha:g})),p&&p.attr({fill:z}),t&&J(t,a,
e,c)}},pie:function(a,c,d,e){var g=e.chart,k;e=e._getPointColor;var p=this,r,t,w,z;w={};var p=this.legendItemId,G;t=g.components.legend.getItems()||[];a=W(a);if(!1===d){a.alpha||(a.alpha=30);d=this.graphics.element;r=this.config;z=0;for(g=t.length;z<g&&(k=t[z],G=k.legendItemId,G!==p);z++);p=k.graphics;m(p,k.config,a,c);t=r.color.color;p=d.data("plotItem");g=p.chart;k=p.style;g=g.is3D;if(z=p.center)w=z[0],z=z[1],p=p.radius,w={cx:w,cy:z,r:p};t=c?e(l(a.color,t),a.alpha,90):r.color;e=c?a.alpha:t.alpha;
t=F(t,w);g?d&&d.attr({color:t.color.split(",")[0],alpha:e}):d&&d.attr({fill:E(t)});e=this.graphics.label;d=this.graphics.connector;e&&J(e,a,k,c);d&&d.attr({opacity:c?a.alpha/100:P(k.color)})}},line:function(a,c,d){var e=this.chart,g=e.components.legend.components.items||[],k=g.length,p,r=this.legendItemId,w=e.config.dataLabelStyle;a=W(a);var z=this.graphics||{},e=z.legendGraphics,F=z.dataLabelContainer,G=z.errorGroupContainer,C=this.config,J=C.linecolor,L=C.alpha,ja=0<(C.shadow||{}).opacity;if(!d&&
!0===this.visible){a.alpha||(a.alpha=30);for(d=0;d<k&&(p=g[d]||{},p.legendItemId!==r);d++);G&&(g=P(C.errorBarColor),g=c?l(a.alpha/100,g):g,G.attr({opacity:g}));F&&F.attr({opacity:c?a.alpha/100:P(w.color)});w=l(z.lineElement,z.SplineElement);J=c?l(a.color,J):J;L=c?l(a.alpha,L):L;ja=ja?c?a.alpha/100:L/100:!1;w&&w.attr({stroke:E({color:J,alpha:L})}).shadow(ja);e&&m(e,p.config,a,c);t(this,a,c)}},boxandwhisker2d:function(a,c,e){var g=this.config.isRoundEdges,l=this.graphics,r=l.legendGraphics,t=l.lowerWhiskerContainer,
w=l.upperWhiskerContainer,z=l.dataLabelContainer,F=this.legendItemId,G=this.chart.components.legend.components.items||[],l=G.length,J;a=W(a);if(!1===e&&!0===this.visible){a.alpha||(a.alpha=30);for(e=0;e<l&&(J=G[e]||{},J.legendItemId!==F);e++);m(r,J.config,a,c);t&&t.attr({opacity:c?a.alpha/100:1});w&&w.attr({opacity:c?a.alpha/100:1});z&&z.attr({opacity:c?a.alpha/100:1});r=this.components.data;e=0;for(l=r.length;e<l;e++){t=r[e];w=t.config;t=t.graphics;J=a;var z=c,F=g,C={},L={},Ba=C=L=void 0,ja=G=void 0,
ba=void 0,ta=void 0,N=void 0;z?(L=k.graphics.getColumnColor(J.color||w.upperColorArr[0].FCcolor.color,J.alpha.toString(),w.upperColorArr[0].FCcolor.ratio,w.upperColorArr[0].FCcolor.angle,F,J.bordercolor||d(w.upperBoxBorder.color),J.borderalpha&&J.borderalpha.toString()||(100*P(w.lowerBoxBorder.color)).toString()),L=E(L[0]),C=k.graphics.getColumnColor(J.color||w.lowerColorArr[0].FCcolor.color,J.alpha.toString(),w.lowerColorArr[0].FCcolor.ratio,w.lowerColorArr[0].FCcolor.angle,F,J.bordercolor||d(w.lowerBoxBorder.color),
J.borderalpha&&J.borderalpha.toString()||(100*P(w.lowerBoxBorder.color)).toString()),C=E(C[0]),Ba=p(w.median.color,J,z),ba=p(w.lowerQuartile.color,J,z),ta=p(w.upperQuartile.color,J,z)):(L=E(w.upperColorArr[0]),C=E(w.lowerColorArr[0]),Ba=w.median.color,G=w.upperBoxBorder.color,ja=w.lowerBoxBorder.color,ta=w.upperQuartile.color,ba=w.lowerQuartile.color);N=t.upperBoxElem;N.attr({fill:L,"drop-shadow":N.attrs["drop-shadow"]&&"none"!==N.attrs["drop-shadow"]?[1,1,3,"rgba(64,64,64,"+P(L)+")",N.attrs[4],N.attrs["drop-shadow"][5]]:
"none"});N=t.lowerBoxElem;N.attr({fill:C,"drop-shadow":N.attrs["drop-shadow"]&&"none"!==N.attrs["drop-shadow"]?[1,1,3,"rgba(64,64,64,"+P(C)+")",N.attrs[4],N.attrs["drop-shadow"][5]]:"none"});N=t.lowerBoxBorderEle;N.attr({stroke:ja});t.upperBoxBorderEle&&t.upperBoxBorderEle.attr({stroke:G});t.lowerQuartileEle&&t.lowerQuartileEle.attr({stroke:ba});t.upperQuartileEle&&t.upperQuartileEle.attr({stroke:ta});t.midLineElem&&t.midLineElem.attr({stroke:Ba})}}},heatmap:function(a,c,e,g){var k=g.chart,p=k.config;
g=p.dataLabelStyle;var p=k.components.legend,r,t,k=this.legendItemId,w,z;a=W(a);var F=p.getItems()||[];if(!e&&this.config.visible){a.alpha||(a.alpha=30);p=this.config;w=0;for(e=F.length;w<e&&(r=F[w],z=r.legendItemId,z!==k);w++);k=r.graphics;m(k,r.config,a,c);r=d(p.color);p=P(p.color);r=c?l(a.color,r):r;p=c?a.alpha:100*p;e=this.graphics;k=e.element;k.attr({fill:E({color:r,alpha:p})});c||P(g.color);for(t in e)k=e[t],"text"===k.type&&J(k,a,g,c)}},funnelpyramid:function(a,c,e,g){g=g.chart.components.legend;
var k,p,r,t,w;a=W(a);g=g.getItems()||[];p=this.legendItemId;if(!1===e){a.alpha||(a.alpha=30);r=0;for(e=g.length;r<e&&(k=g[r],t=k.legendItemId,t!==p);r++);e=k.graphics;m(e,k.config,a,c);k=this.style;g=this.color;e=d(g);g=P(g);e=c?l(a.color,e):e;r=c?a.alpha:100*g;p=this.plot.graphic;t=this.plot.dataLabel;w=this.plot.connector;g=this.plot.point.style;p&&p.attr({fill:E({color:e,alpha:r})});t&&J(t,a,g,c);w&&w.attr({opacity:c?a.alpha/100:P(k.color)})}},"default":function(a,c,d){var e=this.config,g=this.chart,
p=g.config,t=p.dataLabelStyle,w=p.useroundedges,z=g.is3D,F,G,la;a=W(a);var C=this.graphics,Ga=C.legendGraphics,Ba=C.dataLabelContainer;la=C.errorGroupContainer;var ja,ba,p="",p=this.legendItemId,ta=g.components.legend.components.items||[];ja=ta.length;g=e.showShadow;C=k.graphics.getColumnColor;if(!1===d&&!0===this.visible){a.alpha||(a.alpha="30");d=this.components.data||[];for(F=0;F<ja&&(G=ta[F]||{},G.legendItemId!==p);F++);Ga&&m(Ga,G.config,a,c);Ba&&Ba.attr({opacity:c?a.alpha/100:P(t.color)});la&&
(ja=P(e.errorBarColor),ja=c?l(a.alpha/100,ja):ja,la.attr({opacity:ja}));F=0;for(ja=d.length;F<ja;F++)if(e=d[F]){p=e.config;la=p.colorArr[0];G=p.colorArr[1];Ga=G.FCcolor.alpha;p=la.FCcolor.color;p=-1!==(ba=p.indexOf(","))&&a.color?a.color+p.substring(ba):l(a.color,p);Ba=z?Ga:l(a.borderalpha,a.alpha,Ga);0===r(Ga)&&(Ba="0");Ga=c?C(p,a.alpha,la.FCcolor.ratio,la.FCcolor.angle,w,l(a.bordercolor,G.FCcolor.color),Ba,!1,z):[la,G];if(la=e.graphics.element)p=E(Ga[0]),G=E(Ga[1]),la.attr({stroke:G,fill:p}).shadow({opacity:g?
L(Ga[0].alpha)/100:0});e=e.graphics.label;J(e,a,t,c)}}}},w=function(){this.effectStore={};this.eventHandlers={}},J=function(a,c,e,g){var k,m,p,r,t;k=d(e.color);p=100*P(e.color);m=g?l(c.valuefontcolor,k):k;r=g?l(c.valuefontalpha,c.alpha,p):p;k=""===e.backgroundColor?"":d(e.backgroundColor);p=""===e.backgroundColor?0:100*P(e.backgroundColor);isNaN(p)&&(p=0);t=g?l(c.valuebgcolor,k):k;p=g?l(c.valuebgalpha,c.alpha,p):p;t=E({color:t,alpha:p});k=""===e.borderColor?"":d(e.borderColor);p=""===e.borderColor?
"":100*P(e.borderColor);isNaN(p)&&(p=0);k=g?l(c.valuebordercolor,k):k;c=g?l(c.valueborderalpha,c.alpha,p):p;c=E({color:k,alpha:c});a&&a.attr({fill:E({color:m,alpha:r}),"text-bound":[t,c,e.borderThickness,e.borderPadding,e.borderRadius,e.borderDash]})},e=new w;w.prototype.add=function(a){this.effectStore[a.name]=a};w.prototype.attachEventHandlers=function(a,c){this.eventHandlers[a]||(this.eventHandlers[a]={},this.eventHandlers[a].listenerFn=g.addEventListener(a,c))};w.prototype.applyEffect=function(a,
c,d){var e=this.effectStore,g=a.jsonData.chart,k=a.defaultDatasetType,m=g.plothighlighteffect&&g.plothighlighteffect.toLowerCase(),g=a.components.dataset;a=a.isSingleSeries?g[0].components.data:g;c=l(c.itemId,c.legendItemId,c.legendItemIndex);var p,r,t,w="",z;m&&(m=m.replace(/\s+/g,"").split("|"),z=m[0],w=m[1]||"");if(z&&e[z])for(r=0,t=a.length;r<t;r++)m=a[r],k=m.type||k,k=k.toLowerCase(),p=l(m.itemId,m.legendItemId),void 0!==p&&(p=p===c,e[z][k]?e[z][k].call(m,w,d,p,g[0]):e[z]["default"].call(m,w,
d,p,g[0]))};g.registrars.highlighteffect=function(a){a&&e.add(a)};e.attachEventHandlers("legenditemrollover",function(a,c){var d=a.sender.jsVars.instanceAPI;!1!==d.hasInteractiveLegend&&!1!==d.highlightEnabled&&e.applyEffect(d,c,!0)});e.attachEventHandlers("legenditemrollout",function(a,c){var d=a.sender.jsVars.instanceAPI;!1!==d.hasInteractiveLegend&&!1!==d.highlightEnabled&&e.applyEffect(d,c,!1)});e.attachEventHandlers("legenditemclicked",function(a,c){var d=a.sender.jsVars.instanceAPI;!1!==d.hasInteractiveLegend&&
!1!==d.highlightEnabled&&e.applyEffect(d,c,!0)});FusionCharts.register("highlightEffect",{name:"fadeout",area:c.area,radar:c.area,bubble:c.bubble,pie2d:c.pie,line:c.line,spline:c.line,areaspline:c.area,pie3d:c.pie,zoomline:c.line,funnel:c.funnelpyramid,pyramid:c.funnelpyramid,scatter:c.line,doughnut2d:c.pie,doughnut3d:c.pie,heatmap:c.heatmap,boxandwhisker2d:c.boxandwhisker2d,multiaxisline:c.line,"default":c["default"]})}]);Jb&&(sb.FusionCharts=FusionCharts);return FusionCharts});
                                                                                                                             ./mvappsvr/docroot/db/fw/fusioncharts.charts.js                                                     0000755 0000000 0000000 00000322762 13005675162 020616  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
 FusionCharts JavaScript Library
 Copyright FusionCharts Technologies LLP
 License Information at <http://www.fusioncharts.com/license>
*/
(function(ja){"object"===typeof module&&"undefined"!==typeof module.exports?module.exports=ja:ja(FusionCharts)})(function(ja){ja.register("module",["private","modules.renderer.js-charts",function(){function za(d,H){for(var g=[],a=0,l=d.length;a<l;a++)g[a]=H.call(d[a],d[a],a,d);return g}function S(d,H){var g=H?360:n;d=(d||0)%g;return 0>d?g+d:d}function Ja(d,H,g,a,l){return La((H-g[1]-a.top)/l,d-g[0]-a.left)}function pa(d){this.config={};this.linkedItems={chart:d}}var ma=this,R=ma.hcLib,Ma=R.hasTouch,
Ia=ma.window,ia=Ia.document,ta=R.Raphael,Ka=R.BLANKSTRING,ca=R.preDefStr,G=ca.HUNDREDSTRING,ca=ca.NINETYSTRING,Ea=R.pluck,ga=R.pluckNumber,Xa=R.getFirstValue,Ya=R.extend2,qa=R.toRaphaelColor,na=R.hasSVG,Fa=R.hashify,Na="createTouch"in ia,$a=Na&&!(Ia.navigator.maxTouchPoints||Ia.navigator.msMaxTouchPoints),Qa=R.each,Ha=R.plotEventHandler,ra=R.componentDispose,wa=8===Ia.document.documentMode?"visible":"",xa=Math,ua=xa.sin,oa=xa.cos,La=xa.atan2,ya=xa.round,Aa=xa.min,Ca=xa.max,Ga=xa.abs,sa=xa.PI,a=xa.ceil,
c=xa.floor,b=sa/180,k=180/sa,f=Math.PI,m=f/2,n=2*f,A=f+m,x=R.getFirstColor,D=R.getFirstAlpha,q=R.graphics.getDarkColor,C=R.graphics.getLightColor,P=R.graphics.convertColor,v=R.POSITION_BOTTOM,E=R.POSITION_RIGHT,h=R.chartAPI,B=R.COMMASTRING,da=R.ZEROSTRING,L=R.ONESTRING,T={},V={};h("column2d",{standaloneInit:!0,friendlyName:"Column Chart",creditLabel:!1,defaultDatasetType:"column",applicableDSList:{column:!0},singleseries:!0},h.sscartesian);h("column3d",{friendlyName:"3D Column Chart",defaultDatasetType:"column3d",
applicableDSList:{column3d:!0},defaultPlotShadow:1,creditLabel:!1,is3D:!0,standaloneInit:!0,hasLegend:!1,singleseries:!0,fireGroupEvent:!0,defaultZeroPlaneHighlighted:!1},h.sscartesian3d,{showplotborder:0});h("bar2d",{friendlyName:"Bar Chart",isBar:!0,standaloneInit:!0,defaultDatasetType:"bar2d",creditLabel:!1,applicableDSList:{bar2d:!0},singleseries:!0,spaceManager:h.barbase},h.ssbarcartesian);h("bar3d",{friendlyName:"3D Bar Chart",defaultDatasetType:"bar3d",applicableDSList:{bar3d:!0},defaultPlotShadow:1,
fireGroupEvent:!0,standaloneInit:!0,creditLabel:!1,is3D:!0,isBar:!0,singleseries:!0,defaultZeroPlaneHighlighted:!1},h.ssbarcartesian3d,{showplotborder:0});h("area2d",{friendlyName:"Area Chart",standaloneInit:!0,creditLabel:!1,defaultDatasetType:"area",singleseries:!0,defaultPlotShadow:0},h.sscartesian,{},h.areabase);h("line",{friendlyName:"Line Chart",standaloneInit:!0,creditLabel:!1,defaultPlotShadow:1,singleseries:!0,axisPaddingLeft:0,axisPaddingRight:0,defaultDatasetType:"line"},h.sscartesian,
{zeroplanethickness:1,zeroplanealpha:40,showzeroplaneontop:0},h.areabase);h("pareto2d",{defaultDatasetType:"column2d",singleseries:!0,creditLabel:!1,_createDatasets:function(){var d=this.components,H=this.jsonData,g=this.is3D,a=d.numberFormatter,l=H.data||H.dataset&&H.dataset[0]&&H.dataset[0].data,e=l&&l.length,la=H.chart,c=this.defaultDatasetType,H=new (ja.get("component",["dataset","Pareto"])),b=ga(la.showcumulativeline,1),u=[],r,y;if(l){for(la=0;la<e;la++)r=l[la],y=a.getCleanValue(r.value),null!==
y&&"true"!==r.vline&&!0!==r.vline&&1!==r.vline&&"1"!==r.vline&&u.push(r);this.config.categories=u;a=d.dataset||(d.dataset=[]);(l=Ea(c))&&l.toLowerCase();l=ja.register("component",["datasetGroup","column"]);l=d[void 0]=new l;l.chart=this;l.init();if(e=g?ja.get("component",["dataset","Column3d"]):ja.get("component",["dataset","Column"]))(g=a[0])?(c=u.length,l=g.components.data.length,c<l&&g.removeData(c,l-c),g.JSONData={data:u},H.configure.call(g)):(g=new e,a.push(g),g.chart=this,g.index=la,l&&l.addDataSet(g,
0,0),H.init(g,u,c));d=d.yAxis[1];if(b)d&&d.setAxisConfig({drawLabels:!0,drawPlotLines:!0,drawAxisName:!0,drawAxisLine:!0,drawPlotBands:!0,drawTrendLines:!0,drawTrendLabels:!0}),d.show(),e=ja.get("component",["dataset","line"]),(g=a[1])?(c=u.length,l=g.components.data.length,c<l&&g.removeData(c,l-c),g.JSONData={data:u},H.configure.call(g)):(g=new e,a.push(g),g.chart=this,g.index=la,H.init(g,u,"line"));else{if(g=a[1])ra.call(g),a.pop();d&&(d.setAxisConfig({drawLabels:!1,drawPlotLines:!1,drawAxisName:!1,
drawAxisLine:!1,drawPlotBands:!1,drawTrendLines:!1,drawTrendLabels:!1}),d.hide())}}else this.setChartMessage()},_setCategories:function(){var d=this.components,H=this.jsonData,g=H.dataset,a=d.numberFormatter,d=d.xAxis,H=H.data||g&&g[0].data||[],g=[],l,e=H.length,c,b={},t=0,u;for(c=0;c<e;c++){l=H[c];u=a.getCleanValue(l.value,!0);if("true"===l.vline||"1"===l.vline||1===l.vline||!0===l.vline)b[t]=l;else if(null===u)continue;else l.value=u,g.push(l);t++}g.sort(function(d,g){return g.value-d.value});for(c in b)g.splice(c,
0,b[c]);d[0].setCategory(g)},standaloneInit:!0,hasLegend:!1,isPercentage:!0},h.msdybasecartesian,{plotfillalpha:ca});h("pareto3d",{standaloneInit:!0,is3D:!0,friendlyName:"3D Pareto Chart",creditLabel:!1,fireGroupEvent:!0,defaultPlotShadow:1,singleseries:!0,hasLegend:!1,defaultDatasetType:"column3d",_createDatasets:h.pareto2d,_setCategories:h.pareto2d,isPercentage:!0},h.msdybasecartesian3d,{plotfillalpha:ca,use3dlineshift:1});h("pie2d",{friendlyName:"Pie Chart",standaloneInit:!0,defaultSeriesType:"pie",
defaultPlotShadow:1,reverseLegend:1,alignCaptionWithCanvas:0,sliceOnLegendClick:!0,isSingleSeries:!0,dontShowLegendByDefault:!0,defaultDatasetType:"Pie2D",applicableDSList:{Pie2D:!0},defaultZeroPlaneHighlighted:!1,creditLabel:!1,_plotDragMove:function(d,H,g,a,l){var e=this.data("plotItem"),c=e.chart,e=e.seriesData,b=c.components.dataset[0].config;isNaN(d)||isNaN(H)||!b.enableRotation||e.singletonCase||e.isRightClicked||(d=Ja.call(l,g,a,e.pieCenter,e.chartPosition,1),e.isRotating||(e.dragStartAngle!==
d&&(e.isRotating=!0),ma.raiseEvent("RotationStart",{startingAngle:S(e.startingAngleOnDragStart,!0)},c.chartInstance)),b.startAngle+=d-e.dragStartAngle,e.dragStartAngle=d,e.moveDuration=0,b.updateInited||(b.updateInited=!0,setTimeout(c._batchRotate||(c._batchRotate=function(){c._rotate();b.updateInited=!1}),50)))},_plotDragStart:function(d,H,g){var a=this.data("plotItem"),l=a.chart,a=a.seriesData,e=l.components.dataset[0].config,c=-e.startAngle;a.isRightClicked=Ma||0===g.button||1===g.button?!1:!0;
if(e.enableRotation&&!a.isRightClicked){a.isRotating=!1;e=l.linkedItems.container;l={left:0,top:0};if(e.getBoundingClientRect)e=e.getBoundingClientRect(),l.top=e.top+(Ia.pageYOffset||ia.scrollTop||0)-(ia.clientTop||0),l.left=e.left+(Ia.pageXOffset||ia.scrollLeft||0)-(ia.clientLeft||0);else for(;e;)l.left+=e.offsetLeft||0,l.top+=e.offsetTop||0,e!==ia.body&&e!==ia.documentElement&&(l.left-=e.scrollLeft||0,l.top-=e.scrollTop||0),e=e.offsetParent;a.chartPosition=l;d=Ja.call(g,d,H,a.pieCenter,a.chartPosition,
1);a.dragStartAngle=d;a.startingAngleOnDragStart=c}},_plotDragEnd:function(d){var H=this.data("plotItem"),g=H.chart,a=g.config,l=H.seriesData,e=-l.startAngle;l.isRightClicked||(a.clicked=!0,g.disposed||g._rotate(),!l.isRotating&&g._plotGraphicClick.call(H.graphic,d),delete a.clicked,l.isRotating&&(setTimeout(function(){l.isRotating=!1},0),ma.raiseEvent("RotationEnd",{startingAngle:S(e,!0),changeInAngle:e-l.startingAngleOnDragStart},g.chartInstance)))},_plotRollOver:function(d){var H=this.plotItem||
this.data("plotItem"),g=H.chart,a=g.components.dataset[0].config,l,e;a.isRotating||(Ha.call(this,g,d,"DataPlotRollOver"),g.onPlotHover(this,!0));a.isHovered=!0;(d=H.innerDiameter)&&(l=H.centerLabelConfig)&&(e=l.label)&&g.drawDoughnutCenterLabel(e,H.center[0],H.center[1],d,d,l,!1)},onPlotHover:function(d,H){var g=d.data("plotItem"),a=g.center,l=g.rolloverProperties||{},e=H?l.color:g.color,c=H?l.borderWidth:g.borderWidth,b=H?l.borderColor:g.borderColor;e&&(H&&(e.cx=a[0],e.cy=a[1],e.r=g.radius),l.enabled&&
g.graphic.attr({fill:qa(e),"stroke-width":c,stroke:b}))},_plotRollOut:function(d){var H=this.plotItem||this.data("plotItem"),g=H.chart,a=g.components.dataset[0].config,l,e;a.isRotating||(Ha.call(this,g,d,"DataPlotRollOut"),g.onPlotHover(this,!1));a.isHovered=!1;(d=H.innerDiameter)&&(l=a.centerLabelConfig)&&((e=l.label)||!e)&&g.drawDoughnutCenterLabel(e,H.center[0],H.center[1],d,d,l,!1)},_rotate:function(){var d,H,g=this.components.dataset[0],a=g.config,l=g.components.data,e=this.config,c=a.slicingDistance,
g=g.config,b=n/g.valueTotal,t=e.canvasLeft+.5*e.canvasWidth,e=e.canvasTop+.5*e.canvasHeight,u=a.pieMinRadius,r=.5*(a.piePlotOptions.innerSize||0),y,p,w,f,m;y=(a.startAngle||0)%n;for(m=0;m<l.length;m+=1)w=l[m].config,f=l[m].graphics,d=w.y,null!==d&&void 0!==d&&(p=y,y-=g.singletonCase?n:d*b,d=.5*(y+p),w.angle=d,w.transX=oa(d)*c,w.transY=ua(d)*c,w.slicedTranslation="t"+oa(d)*c+B+ua(d)*c,(H=w._rotateAttrs)||(H=w._rotateAttrs={ringpath:[],transform:Ka}),d=H.ringpath,d[0]=t,d[1]=e,d[2]=u,d[3]=r,d[4]=y,
d[5]=p,H.transform=w.sliced?w.slicedTranslation:Ka,f.element.attr(H));this.placeDataLabels(!0,l,a)},getPlotData:function(d,H){var g=this.components.dataset[0],a=g.components.data[d].config,g=g.config.userData||(g.config.userData=[]),l,e;if(g[d])g=g[d];else{g=g[d]={};for(e in a)"object"!==typeof(l=a[e])&&"function"!==typeof l&&0!==e.indexOf("_")&&(g[e]=l);g.value=g.y;g.categoryLabel=g.label=g.seriesName;delete g.y;delete g.total;delete g.doNotSlice;delete g.name;delete g.seriesName;delete g.centerAngle;
delete g.showInLegend;delete g.angle;delete g.endAngle;delete g.isVisible;delete g.setColor;delete g.slicedTranslation;delete g.startAngle;delete g.transX;delete g.transY;delete g.pValue}g.sliced=H;return g},_plotGraphicClick:function(d){var H,g=this.element||this,a=g.plotItem||g.data("plotItem"),l=g.data("eventArgs")||{},e=a.chart,c=a.index,b=e.components.dataset[0],t=b.config,u=t.enableMultiSlicing,b=b.components.data[c],r=b.graphics,b=b.config,y=b.doNotSlice,p;H=b.slicedTranslation;var w=e.get("config",
"animationObj"),f=w.duration||200,m=w.dummyObj,h=w.animObj,w=w.animType;!t.isRotating&&Ha.call(g,e,d);if(!(t.isRotating||t.singletonCase||y||(d=!u&&e.sliceInOtherPies(c),(p=b.sliced)&&d))){if(Na&&!$a){d=(new Date).getTime();if(a.lastSliceTimeStamp&&400>d-a.lastSliceTimeStamp)return;a.lastSliceTimeStamp=d}t=r.element;a=r.connector;u=r.label||r.dataLabel;H="object"===typeof H?"t"+H:H;y=b.connectorPath;r=(p?-1:1)*b.transX;d=(p?-1:1)*b.transY;g=t.data("eventArgs")||t.data("eventArgs",{});ma.raiseEvent("slicingStart",
{slicedState:p,dataIndex:"index"in l&&l.index,data:e.getPlotData(c,p)},e.chartInstance);t.animateWith(m,h,{transform:p?"t0,0":H},f,w,function(){ma.raiseEvent("slicingEnd",{slicedState:p,dataIndex:"index"in l&&l.index,data:e.getPlotData(c,p)},e.chartInstance)});u&&u.x&&((H=u.data("textPos"))||(H=u.data("textPos",{x:u.x,y:u.y})),u.animateWith(m,h,{x:u.x+(p?0:r)},f,w),H.x=u.x+(p?0:r));y&&(H=y.slice(0),H[1]+=r,H[2]+=d,H[4]+=r,H[6]+=r,a.animateWith(m,h,{path:H},f,w),b.connectorPath=H);return g.isSliced=
p=b.sliced=!p}},sliceInOtherPies:function(d){var H=this.components.dataset[0],g=H.components.data,a=g.length,l=0,e;for(H.enableMultiSlicing=!0;a--;)a!==d&&(e=g[a]).config.sliced&&++l&&this._plotGraphicClick.call(e.graphics);H.enableMultiSlicing=!1;return!!l},placeDataLabels:function(){var d=function(d,g){return d.point.value-g.point.value},H=function(d,g){return d.angle-g.angle},g=["start","start","end","end"],b=[-1,1,1,-1],l=[1,1,-1,-1];return function(e,la,h,t){var u=this.config,r=this.components,
y=r.dataset[0],p=y.graphics,w=y.config,k=u.canvasLeft,q=u.canvasTop,y=u.canvasWidth,C=k+.5*u.canvasWidth,x=q+.5*u.canvasHeight,Ra=this.linkedItems.smartLabel,B=w.dataLabelOptions,ab=B.style,Q=ga(a(parseFloat(ab.lineHeight)),12),v=1===la.length?u.singletonPlaceValue:!1,P=B.skipOverlapLabels,E=B.manageLabelOverflow,D=B.connectorPadding,I;I=t&&t.metrics||[C,x,2*w.pieMinRadius,w.innerSize||0];var F=I[1],z=I[0];t=.5*I[2];var w=[[],[],[],[]],C=h.labelsRadius=t+B.distance,K=x=parseInt(ab.fontSize,10),M=
K/2,D=[D,D,-D,-D];h=h.labelsMaxInQuadrant||(h.labelsMaxInQuadrant=c(C/K));var B=B.isSmartLineSlanted,J=I[3]/2,W,Z,N,O,T,ha,ea,Ua,G,U,aa,fa,X,da;I=Number.POSITIVE_INFINITY;var V,ka;N=[];ha=[];N=this.get("config","animationObj");var S=e?0:N.duration||0,L=N.dummyObj,R=N.animObj,ma=N.animType,ia=this._plotDragMove,ca=this._plotDragStart,qa=this._plotDragEnd,na=this._plotRollOver,ja=this._plotRollOut,va=r.paper,ba=p.dataLabelContainer,Y,pa;Ra.useEllipsesOnOverflow(u.useEllipsesWhenOverflow);e||Ra.setStyle(ab);
if(1==la.length&&!J&&v)J=la[0],(Y=J.config._textAttrs).text||(ka=J.graphics,U=ka.label,J.slicedTranslation=[k,q],Y["text-anchor"]="middle",Y.x=0,Y.y=0,Y.transform=["t",z,F],U?U.animateWith(L,R,Y,S,ma):U=ka.label=va.text(Y,pa,ba).drag(ia,ca,qa).hover(na,ja),U.x=z,U.data("textPos",{x:z,y:F}).data("plotItem",Y.plotItem).data("eventArgs",Y.eventArgs),Y.visibility===wa&&U.show(),ka.connector&&ka.connector.attr({path:[]}));else if(v)da=J+(t-J)/2,Qa(la,function(d){V=d.config;(Y=V._textAttrs).text&&(ka=d.graphics,
U=ka.label,Y.transform="t0,0",G=V.angle,Ua=F+da*ua(G),O=z+da*oa(G),Y._x=O,Y._y=Ua,d.sliced&&(X=d.slicedTranslation,aa=X[0]-k,fa=X[1]-q,O+=aa,Ua+=fa),Y["text-anchor"]="middle",Y.x=0,Y.y=0,Y.transform=["t",O,Ua],U?U.animateWith(L,R,Y,S,ma):U=ka.label=va.text(Y,pa,ba).drag(ia,ca,qa).hover(na,ja),U.x=Y._x,U.x=Y._x,U.y=Y._y,U.data("plotItem",Y.plotItem).data("eventArgs",Y.eventArgs),Y.visibility===wa&&U.show())});else{for(e=la.length-1;0<=e;e--)if(J=la[e],V=J.config,Y=V._textAttrs,Y.text=V.displayValue)ka=
J.graphics,U=ka.label,Y.text=V.displayValue,ka.connector&&ka.connector.attr("visibility",Y.visibility),Y.transform="t0,0",G=V.angle%n,0>G&&(G=n+G),r=0<=G&&G<m?1:G<f?2:G<A?3:0,w[r].push({point:J,angle:G});for(e=la=4;e--;){if(P&&(r=w[e].length-h,0<r))for(w[e].sort(d),p=w[e].splice(0,r),r=0,v=p.length;r<v;r+=1)J=p[r].point,Y=J.config._textAttrs,ka=J.graphics,ka.label&&ka.label.attr("visibility","hidden"),ka.connector&&ka.connector.attr({visibility:"hidden"});w[e].sort(H)}e=Ca(w[0].length,w[1].length,
w[2].length,w[3].length);r=Ca(Aa(e,h)*K,C+K);ha=w[0].concat(w[1]);N=w[2].concat(w[3]);for(e=ha.length-1;0<=e;e--)p=ha[e].point.config,delete p.clearance,delete p.clearanceShift,J=Ga(r*ua(p.angle)),Math.abs(I-J)<2*Q&&(p.clearance=0,ha[e+1].point.clearanceShift=Q/2),I=J;I=Number.POSITIVE_INFINITY;e=0;for(v=N.length;e<v;e++)p=N[e].point.config,delete p.clearance,delete p.clearanceShift,J=Ga(r*ua(p.angle)),Math.abs(I-J)<2*Q&&(p.clearance=0,N[e-1].point.clearanceShift=Q/2),I=J;w[1].reverse();for(w[3].reverse();la--;){p=
w[la];v=p.length;P||(K=v>h?r/v:x,M=K/2);Q=v*K;I=r;for(e=0;e<v;e+=1,Q-=K)J=Ga(r*ua(p[e].angle)),I<J?J=I:J<Q&&(J=Q),I=(p[e].oriY=J)-K;ab=g[la];v=r-(v-1)*K;I=0;for(e=p.length-1;0<=e;--e,v+=K)if(J=p[e].point,G=p[e].angle,V=J.config,Y=V._textAttrs,Y.text&&(pa=V._textCss,ka=J.graphics,Z=V.sliced,U=ka.label,J=Ga(r*ua(G)),J<I?J=I:J>v&&(J=v),I=J+K,Q=void 0===V.clearance?2*a(ga(parseFloat(V.style.border),12),12):2*a(ga(parseFloat(V.style.border),V.clearance)),ha=(J+p[e].oriY)/2,J=z+l[la]*C*oa(xa.asin(ha/r)),
ha*=b[la],ha+=F,ea=F+t*ua(G),N=z+t*oa(G),(2>la&&J<N||1<la&&J>N)&&(J=N),O=J+D[la],Ua=ha-M-2,T=O+D[la],Y._x=T,E&&(W=1<la?T-u.canvasLeft:u.canvasLeft+y-T,Ra.setStyle(V.style),Q=ga(a(parseFloat(V.style.lineHeight)),12)+Q,Q=Ra.getSmartText(V.displayValue,W,Q),void 0===V.clearance&&Q.height>K&&(ha+=K),Y.text=Q.text,Y.tooltip=Q.tooltext),Y._y=Ua,Z&&(aa=V.transX,fa=V.transY,O+=aa,J+=aa,N+=aa,ea+=fa,T+=aa),Y["text-anchor"]=ab,Y.vAlign="middle",Y.x=T,Y.y=ha,(Q=U&&U.data("textPos"))?U.attr({x:Q.x,y:Q.y}).animateWith(L,
R,Y,S):U=ka.label=va.text(Y,pa,ba).drag(ia,ca,qa).hover(na,ja),U.x=Y._x,U._x=Y._x,U.y=Y._y,Y.tooltip&&(U.tooltip(Y.tooltip),delete Y.tooltip),Y.visibility===wa&&U.show(),U.data("textPos",{x:T,y:ha}).data("plotItem",Y.plotItem).data("eventArgs",Y.eventArgs),Q=ka.connector))V.connectorPath=J=["M",N,ea,"L",B?J:N,ha,O,ha],(N=Q.data("connectorPath"))?u.clicked||Q.attr({path:N.path}).animateWith(L,R,{path:J},S):Q.attr({path:J}),Q.data("connectorPath",{path:J})}}}}(),_spaceManager:function(){var d=this.config,
H=this.components,g=H.dataset[0],a=g.components.data,l=g.config,e=H.legend,c=H.colorManager,b=this.linkedItems.smartLabel,t=l.dataLabelCounter,u=0,r=this.jsonData.chart,H=ga(r.managelabeloverflow,0),y=ga(r.slicingdistance),p=l.preSliced||r.enableslicing!==da||r.showlegend===L&&r.interactivelegend!==da?Ga(ga(y,20)):0,w=ga(r.pieradius,0),f=(y=ga(r.enablesmartlabels,r.enablesmartlabel,1))?ga(r.skipoverlaplabels,r.skipoverlaplabel,1):0,m=ga(r.issmartlineslanted,1),h=t?ga(r.labeldistance,r.nametbdistance,
5):p,k=ga(r.smartlabelclearance,5),n=d.width-(d.marginRight+d.marginLeft),q=d.height-(d.marginTop+d.marginBottom),C=Aa(q,n),A=Ea(r.smartlinecolor,c.getColor("plotFillColor")),x=ga(r.smartlinealpha,100),B=ga(r.smartlinethickness,.7),g=l.dataLabelOptions||(l.dataLabelOptions=g._parseDataLabelOptions()),c=g.style,c=t?ga(parseInt(c.lineHeight,10),12):0,D=0===w?.15*C:w,V=2*D,I={bottom:0,right:0},F=l.pieYScale,C=l.pieSliceDepth;g.connectorWidth=B;g.connectorPadding=ga(r.connectorpadding,5);g.connectorColor=
P(A,x);t&&(y&&(h=k),h+=p);k=V+2*(c+h);k=this._manageChartMenuBar(k<q?q-k:q/2);q-=(k.top||0)+(k.bottom||0);l.showLegend&&(this.hasLegend=!0,Ea(r.legendposition,v).toLowerCase()!==E?(I=e._manageLegendPosition(q/2),q-=I.bottom):(I=e._manageLegendPosition(q/2),n-=I.right));this._allocateSpace(I);b.useEllipsesOnOverflow(d.useEllipsesWhenOverflow);if(1!==t)for(;t--;)b.setStyle(a[t].config.style||d.dataLabelStyle),e=b.getOriSize(a[t].config.displayValue),u=Ca(u,e.width);0===w?D=this._stubRadius(n,u,q,h,
p,c,D):(l.slicingDistance=p,l.pieMinRadius=D,g.distance=h);d=q-2*(D*F+c);l.managedPieSliceDepth=C>d?C-d:l.pieSliceDepth;g.isSmartLineSlanted=m;g.enableSmartLabels=y;g.skipOverlapLabels=f;g.manageLabelOverflow=H},_stubRadius:function(d,H,g,a,l,e,c){var b=this.components.dataset[0],t=b.config,u=ga(this.jsonData.chart.slicingdistance),b=t.dataLabelOptions||(t.dataLabelOptions=b._parseDataLabelOptions()),r=0,r=Aa(d/2-H-l,g/2-e)-a;r>=c?c=r:u||(l=a=Ca(Aa(a-(c-r),l),10));t.slicingDistance=l;t.pieMinRadius=
c;b.distance=a;return c},getDataSet:function(d){return this.components.dataset[d]},_startingAngle:function(d,H){var g,a=this.components.dataset[0].config,l=(g=a.startAngle)*-k+(0>-1*g?360:0);if(!isNaN(d)){if(a.singletonCase||a.isRotating)return;d+=H?l:0;a.startAngle=-d*b;this._rotate(d);l=d}return ya(100*((l%=360)+(0>l?360:0)))/100},eiMethods:{isPlotItemSliced:function(d){var a,g,c,l=this.apiInstance;return l&&l.components.dataset&&(c=l.components.dataset[0])&&(a=c.components.data)&&a.length&&a[d]&&
(g=a[d].config)&&g.sliced},addData:function(){var d,a=this.apiInstance;return a&&a.components.dataset&&(d=a.components.dataset[0])&&d.addData.apply(d,arguments)},removeData:function(){var d,a=this.apiInstance;return a&&a.components.dataset&&(d=a.components.dataset[0])&&d.removeData.apply(d,arguments)},updateData:function(){var d,a=this.apiInstance;return a&&a.components.dataset&&(d=a.components.dataset[0])&&d.updateData.apply(d,arguments)},slicePlotItem:function(d,a){var g,c,l,e,b=this.apiInstance;
return b&&b.components.dataset&&(g=b.components.dataset[0])&&(c=g.components.data)&&(e=c.length)&&c[d=g.config.reversePlotOrder?e-d-1:d]&&(l=c[d].config)&&((!!a!==l.sliced||void 0===a)&&b._plotGraphicClick.call(c[d].graphics.element)||l.sliced)},centerLabel:function(d,a){var g=this.apiInstance,c=g.components.dataset[0],l=c.config,e=l.piePlotOptions.innerSize,b=l.pieCenter,f=b[0],b=b[1],l=l.centerLabelConfig,t;if("object"!==typeof a)a=l;else for(t in l)void 0===a[t]&&(a[t]=l[t]);a.label=d;c.centerLabelConfig=
a;e&&g.drawDoughnutCenterLabel(d||"",f,b,e,e,a,!0)},startingAngle:function(d,a){return this.apiInstance._startingAngle(d,a)}}},h.guageBase,{plotborderthickness:1,alphaanimation:0,singletonPlaceValue:!0,usedataplotcolorforlabels:0});h("pie3d",{defaultDatasetType:"Pie3D",applicableDSList:{Pie3D:!0},is3D:!0,friendlyName:"3D Pie Chart",fireGroupEvent:!0,creditLabel:!1,getPointColor:function(d){return d},_configureManager:function(){var d=this.components.dataset[0],a=d.config,g=d.components,d=g.Pie3DManager,
g=g.data;d&&d.configure(a.pieSliceDepth,1===g.length,a.use3DLighting,!1)},defaultPlotShadow:0,_preDrawCalculate:function(){var d,a,g=this.config,b=0,l=this.components.dataset[0],e=l.config;d=l.components;a=e.dataLabelOptions;var la=e.pie3DOptions=l._parsePie3DOptions(),f=Ea(e.startAngle,0)%n,t=e.managedPieSliceDepth,u=e.slicedOffset=la.slicedOffset,r=g.canvasWidth,y=g.canvasHeight,p=[g.canvasLeft+.5*r,g.canvasTop+.5*y-.5*t],w,h,g=d.data,m,k=Aa(r,y),q,C=a.distance;w=e.pieYScale;var A=e.slicedOffsetY||
(e.slicedOffsetY=u*e.pieYScale);m=d.Pie3DManager;p.push(2*e.pieMinRadius,la.innerSize||0);p=za(p,function(d,a){return(q=/%$/.test(d))?[r,y-t,k,k][a]*parseInt(d,10)/100:d});p[2]/=2;p[3]/=2;p.push(p[2]*w);p.push((p[2]+p[3])/2);p.push(p[5]*w);l.getX=function(d,a){h=xa.asin((d-p[1])/(p[2]+C));return p[0]+(a?-1:1)*oa(h)*(p[2]+C)};e.center=p;Qa(g,function(d){b+=d.config.y});e.labelsRadius=p[2]+C;e.labelsRadiusY=e.labelsRadius*w;e.quadrantHeight=(y-t)/2;e.quadrantWidth=r/2;l=ya(1E3*f)/1E3;la=l+n;f=ga(parseInt(a.style.fontSize,
10),10)+4;e.maxLabels=c(e.quadrantHeight/f);e.labelFontSize=f;e.connectorPadding=ga(a.connectorPadding,5);e.isSmartLineSlanted=Ea(a.isSmartLineSlanted,!0);e.connectorWidth=ga(a.connectorWidth,1);e.enableSmartLabels=a.enableSmartLabels;m||(m=d.Pie3DManager=new pa(this),this.get("graphics","datasetGroup").trackTooltip(!0));this._configureManager();for(d=g.length-1;0<=d;--d)a=g[d],a=a.config,f=l,m=b?a.y/b:0,l=ya(1E3*(l+m*n))/1E3,l>la&&(l=la),w=l,a.shapeArgs={start:ya(1E3*f)/1E3,end:ya(1E3*w)/1E3},a.centerAngle=
h=(w+f)/2%n,a.slicedTranslation=[ya(oa(h)*u),ya(ua(h)*A)],f=oa(h)*p[2],e.radiusY=w=ua(h)*p[4],a.tooltipPos=[p[0]+.7*f,p[1]+w],a.percentage=100*m,a.total=b},placeDataLabels:function(){var d=function(d,a){return d.point.value-a.point.value},H=function(d,a){return d.angle-a.angle},g=["start","start","end","end"],c=[-1,1,1,-1],l=[1,1,-1,-1];return function(e){var b,h,t,u=this.config,r=this.components,y=r.dataset[0],p=y.config,w=y.components.data,k=p.piePlotOptions,q=u.canvasLeft,C=u.canvasTop,x=u.canvasWidth,
Ra=q+.5*u.canvasWidth,v=C+.5*u.canvasHeight,B=this.linkedItems.smartLabel,Q=p.dataLabelOptions,D=Q.style;t=ga(a(parseFloat(D.lineHeight)),12);t=Xa(Q.placeInside,!1);var P=Q.skipOverlapLabels,E=Q.manageLabelOverflow,V=Q.connectorPadding,I=Q.distance,F=Q.connectorWidth,z=[[],[],[],[]],K=parseInt(D.fontSize,10),M=K,J=M/2,V=[V,V,-V,-V],W=Q.isSmartLineSlanted,Z,N,O,T,G,ea,da,S,U,aa,fa,X,L,I=0<I,R=p.center||(p.center=[Ra,v,k.size,k.innerSize||0]),ka=R[1],ia=R[0],k=R[2],Ra=R[4],v=p.labelsRadius,ca=ya(100*
p.labelsRadiusY)/100,ma=p.maxLabels,qa=p.enableSmartLabels,na=p.pieSliceDepth/2;b=this.get("config","animationObj");var ja=e?0:b.duration,pa=b.dummyObj,ta=b.animObj,sa=b.animType,va,ba,Y=this._plotDragMove,ra=this._plotDragStart,Fa=this._plotDragEnd,za=this._plotRollOver,Ea=this._plotRollOut,Ha=r.paper,Da=y.graphics.dataLabelContainer;B.useEllipsesOnOverflow(u.useEllipsesWhenOverflow);if(p.dataLabelCounter)if(e||B.setStyle(D),1==w.length)b=w[0],L=b.graphics,X=b.config,ba=X._textAttrs,va=X._textCss,
aa=L.label,t=L.connector,X.slicedTranslation=[q,C],null!==X.y&&(ba.visibility=wa,ba["text-anchor"]="middle",ba.x=ia,ba.y=ka+J-2,ba._x=ia),aa?aa.animateWith(pa,ta,ba,ja,sa):aa=L.label=Ha.text(ba,va,Da).drag(Y,ra,Fa).hover(za,Ea),ba._x&&(aa.x=ba._x,delete ba.x),aa.data("plotItem",ba.plotItem).data("eventArgs",ba.eventArgs),ba.visibility===wa&&aa.show(),t&&t.hide();else if(t)Qa(w,function(d){L=d.graphics;X=d.config;ba=X._textAttrs;aa=L.label;if(null!==X.y){U=X.angle;S=ka+R[6]*ua(U)+J-2;T=ia+R[5]*oa(U);
ba._x=T;ba._y=S;if(X.sliced){d=d.slicedTranslation;var a=d[1]-C;T+=d[0]-q;S+=a}ba.visibility=wa;ba.align="middle";ba.x=T;ba.y=S}aa?aa.animateWith(pa,ta,ba,ja,sa):aa=L.label=Ha.text(ba,va,Da).drag(Y,ra,Fa).hover(za,Ea);aa.data("plotItem",ba.plotItem).data("eventArgs",ba.eventArgs);ba.visibility===wa&&aa.show();aa.x=ba._x;aa._x=ba._x;aa._y=ba._y});else{Qa(w,function(d){L=d.graphics;X=d.config;ba=X._textAttrs;va=X._textCss;aa=L.label;U=X.angle;0>U&&(U=n+U);fa=0<=U&&U<m?1:U<f?2:U<A?3:0;z[fa].push({point:d,
angle:U})});for(r=u=4;r--;){if(P&&(y=z[r].length-ma,0<y))for(z[r].sort(d),p=z[r].splice(0,y),y=0,t=p.length;y<t;y+=1)b=p[y].point,L=b.graphics,ba.visibility="hidden",L.connector&&L.connector.attr({visibility:"hidden"});z[r].sort(H)}r=Ca(z[0].length,z[1].length,z[2].length,z[3].length);ca=Ca(Aa(r,ma)*M,ca+M);z[1].reverse();z[3].reverse();for(B.setStyle(D);u--;){y=z[u];t=y.length;P||(M=t>ma?ca/t:K,J=M/2);p=t*M;D=ca;for(r=0;r<t;r+=1,p-=M)b=Ga(ca*ua(y[r].angle)),D<b?b=D:b<p&&(b=p),D=(y[r].oriY=b)-M;p=
g[u];w=ca-(t-1)*M;D=0;for(r=y.length-1;0<=r;--r,w+=M)b=y[r].point,L=b.graphics,X=b.config,ba=X._textAttrs,va=X._textCss,null!==X.y&&(U=y[r].angle,N=X.sliced,aa=L.label,b=Ga(ca*ua(U)),b<D?b=D:b>w&&(b=w),D=b+M,ea=(b+y[r].oriY)/2,b=ia+l[u]*v*oa(xa.asin(ea/ca)),ea*=c[u],ea+=ka,da=ka+Ra*ua(U),O=ia+k*oa(U),(2>u&&b<O||1<u&&b>O)&&(b=O),T=b+V[u],S=ea+J-2,G=T+V[u],ba._x=G,E&&(Z=1<u?G-q:q+x-G,B.setStyle(X.style),t=ga(a(parseFloat(X.style.lineHeight)),12)+(2*a(parseFloat(X.style.border),12)||0),t=B.getSmartText(X.displayValue,
Z,t),ba.text=t.text,ba.tooltip=t.tooltext),U<f&&(ea+=na,da+=na,S+=na),ba._y=S,N&&(t=X.transX,N=X.transY,T+=t,b+=t,O+=t,da+=N,G+=t),ba.visibility=wa,ba["text-anchor"]=p,(t=aa&&aa.data("textPos"))&&aa.attr({x:t.x,y:t.y}),ba.x=G,ba.y=ea,!e&&t?aa.animateWith(pa,ta,ba,ja,sa):aa?ba&&aa.attr(ba):aa=L.label=Ha.text(ba,va,Da).drag(Y,ra,Fa).hover(za,Ea),aa.data("textPos",{x:G,y:ea}).data("plotItem",ba.plotItem).data("eventArgs",ba.eventArgs),aa.x=ba._x,aa._x=ba._x,aa.y=ba._y,ba.tooltip&&(aa.tooltip(ba.tooltip),
delete ba.tooltip),ba.visibility===wa&&aa.show(),I&&F&&qa&&(t=L.connector,X.connectorPath||(h=!0),X.connectorPath=b=["M",O,da,"L",W?b:O,ea,T,ea],b={path:b,"stroke-width":F,stroke:Q.connectorColor||"#606060",visibility:wa},t&&(e||h?t.attr(b):t.animateWith(pa,ta,b,ja,sa))))}}}}(),animate:function(){var d,a,g,c,l=this,e=l.components.dataset[0],b=e.components.data;d=l.graphics.datasetGroup;var f=b.length;a=e.config.alphaAnimation;g=function(){l.disposed||l.disposing||l.placeDataLabels(!1)};var t=l.get("config",
"animationObj"),e=t.duration||0,u=t.dummyObj,r=t.animObj,t=t.animType;if(a)d.attr({opacity:0}),d.animateWith(u,r,{opacity:1},e,t,g);else for(d=0;d<f;d++)if(a=b[d],g=a.graphics,a=a.config,c=a.shapeArgs,a=2*sa,g=g.element)g.attr({start:a,end:a}),g=c.start,c=c.end,(void 0).animateWith(u,r,{cx:g-a,cy:c-a},e,t)},_rotate:function(d){var a=this.components.dataset[0],g=a.config,a=a.components,c=a.data,l=g.slicedOffset,e=g.slicedOffsetY,b=g.startAngle,f;d=isNaN(d)?-g._lastAngle:d;f=(d-b)%360;g.startAngle=
ga(d,g.startAngle)%360;f=-(f*sa)/180;a.Pie3DManager&&a.Pie3DManager.rotate(f);Qa(c,function(d){var a=[],g=d.config;d=d.graphics.element;var a=g.shapeArgs,c=a.start+=f,a=a.end+=f,b=g.angle=S((c+a)/2),c=g.sliced,a=oa(b),b=ua(b),a=g.slicedTranslation=[ya(a*l),ya(b*e)];g.transX=a[0];g.transY=a[1];g.slicedX=c?oa(f)*l:0;g.slicedY=c?ua(f)*e:0;d&&c&&d.attr({transform:"t"+a[0]+","+a[1]})});this.placeDataLabels(!0,c)},_plotRollOver:function(d){var a=this.data("plotItem"),g=a.chart,c=g.config,l=g.components.dataset[0],
e=l.components.data[a.index],a=e.graphics.element,e=e.config.hoverEffects;l.config.isRotating||(Ha.call(a,g,d,"DataPlotRollOver"),e.enabled&&a.attr(e));c.isHovered=!0},_plotRollOut:function(d){var a=this.data("plotItem"),g=a.chart,c=g.config,l=g.components.dataset[0],e=l.components.data[a.index],a=e.config,e=e.graphics.element;l.config.isRotating||(Ha.call(e,g,d,"DataPlotRollOut"),e.attr({color:a.color.color.split(",")[0],alpha:a._3dAlpha,borderWidth:a.borderWidth,borderColor:a.borderColor}));c.isHovered=
!1},_plotDragStart:function(d,a,g){var c=this.data("plotItem").chart.components.dataset[0].config;c.isRightClicked=Ma||0===g.button||1===g.button?!1:!0;c.enableRotation&&!c.isRightClicked&&(c.isRotating=!1,d=Ja.call(g,d,a,c.center,c.chartPosition,c.pieYScale),c.dragStartAngle=d,c._lastAngle=-c.startAngle,c.startingAngleOnDragStart=c.startAngle)},_plotDragEnd:function(d){var a=this.data("plotItem"),g=a.index,a=a.chart,c=a.config,l=a.components.dataset[0],e=l.config,l=l.components.Pie3DManager,b=e.startAngle;
e.isRightClicked||(e.isRotating?(setTimeout(function(){e.isRotating=!1},0),ma.raiseEvent("rotationEnd",{startingAngle:S(b,!0),changeInAngle:b-e.startingAngleOnDragStart},a.chartInstance),!c.isHovered&&l.colorObjs[g]&&l.onPlotHover(g,!1)):a._plotGraphicClick.call(this,d))},_plotDragMove:function(d,a,g,c,b){var e=this.data("plotItem").chart,f=e.components.dataset[0].config;isNaN(d)||isNaN(a)||!f.enableRotation||f.singletonCase||f.isRightClicked||(d=Ja.call(b,g,c,f.center,f.chartPosition,f.pieYScale),
f.isRotating||(f.dragStartAngle!==d&&(f.isRotating=!0),ma.raiseEvent("rotationStart",{startingAngle:S(f.startAngle,!0)},e.chartInstance)),a=d-f.dragStartAngle,f.dragStartAngle=d,f.moveDuration=0,f._lastAngle+=180*a/sa,d=(new Date).getTime(),f._lastTime&&!(f._lastTime+f.timerThreshold<d))||(f._lastTime||e._rotate(),f.timerId=setTimeout(function(){e.disposed&&e.disposing||e._rotate()},f.timerThreshold),f._lastTime=d)},_stubRadius:function(d,a,g,c,b,e,f){var h=this.components.dataset[0],t=h.config,u=
ga(h.config.slicingdistance),h=t.dataLabelOptions||(t.dataLabelOptions=h._parseDataLabelOptions()),r=0,r=t.pieYScale;g-=t.pieSliceDepth;r=Aa(d/2-a-b,(g/2-e)/r)-c;r>=f?f=r:u||(b=c=Ca(Aa(c-(f-r),b),10));t.slicingDistance=b;t.pieMinRadius=f;h.distance=c;return f},_startingAngle:function(d,a){var g,c=this.components.dataset[0].config,b=(g=c.startAngle)+(0>g?360:0);if(!isNaN(d)){if(c.singletonCase||c.isRotating)return;d+=a?b:0;this._rotate(d);b=d}return ya(100*((b%=360)+(0>b?360:0)))/100}},h.pie2d,{plotborderthickness:.1,
alphaanimation:1});h("doughnut2d",{friendlyName:"Doughnut Chart",defaultDatasetType:"Doughnut2D",creditLabel:!1,applicableDSList:{Doughnut2D:!0},getPointColor:function(d,a,g){var b;d=x(d);a=D(a);100>g&&na?(b=q(d,c(100*(85-.2*(100-g)))/100),d=C(d,c(100*(100-.5*g))/100),a={FCcolor:{color:b+","+d+","+d+","+b,alpha:a+","+a+","+a+","+a,radialGradient:!0,gradientUnits:"userSpaceOnUse",r:g}}):a={FCcolor:{color:d+","+d,alpha:a+","+a,ratio:"0,100"}};return a},drawDoughnutCenterLabel:function(d,a,g,c,b,e,f){var h=
this.components,t=h.dataset[0].config;e=e||t.lastCenterLabelConfig;var h=h.paper,u=this.linkedItems.smartLabel,r=this.graphics,y=r.datasetGroup,p=e.padding,w=2*e.textPadding,m={fontFamily:e.font,fontSize:e.fontSize+"px",lineHeight:1.2*e.fontSize+"px",fontWeight:e.bold?"bold":"",fontStyle:e.italic?"italic":""},k=1.414*(.5*c-p)-w;b=1.414*(.5*b-p)-w;var n;u.setStyle(m);u.useEllipsesOnOverflow(this.config.useEllipsesWhenOverflow);u=u.getSmartText(d,k,b);(b=r.doughnutCenterLabel)?(b.attr("text")!==d&&
this.centerLabelChange(d),n=r.centerLabelOvalBg):(e.bgOval&&(r.centerLabelOvalBg=n=h.circle(a,g,.5*c-p,y)),b=r.doughnutCenterLabel=h.text(y).hover(this.centerLabelRollover,this.centerLabelRollout).click(this.centerLabelClick),b.chart=this);d?(b.css(m).attr({x:a,y:g,text:u.text,visibility:wa,direction:t.textDirection,fill:qa({FCcolor:{color:e.color,alpha:e.alpha}}),"text-bound":e.bgOval?"none":[qa({FCcolor:{color:e.bgColor,alpha:e.bgAlpha}}),qa({FCcolor:{color:e.borderColor,alpha:e.borderAlpha}}),
e.borderThickness,e.textPadding,e.borderRadius]}).tooltip(e.toolText||u.tooltext),e.bgOval&&n&&n.attr({visibility:wa,fill:Fa(e.bgColor),"fill-opacity":e.bgAlpha/100,stroke:Fa(e.borderColor),"stroke-width":e.borderThickness,"stroke-opacity":e.borderAlpha/100})):(b.attr("visibility","hidden"),n&&n.attr("visibility","hidden"));f&&(t.lastCenterLabelConfig=e,t.centerLabelConfig=e)},centerLabelRollover:function(){var d=this.chart,a=d.config,g=d.chartInstance,c=g.ref,b=d.components.dataset[0].config.lastCenterLabelConfig,
a={height:a.height,width:a.width,pixelHeight:c.offsetHeight,pixelWidth:c.offsetWidth,id:g.id,renderer:g.args.renderer,container:d.linkedItems.container,centerLabelText:b&&b.label};this.attr("text")&&ma.raiseEvent("centerLabelRollover",a,g,this,d.hoverOnCenterLabel)},centerLabelRollout:function(){var d=this.chart,a=d.config,g=d.chartInstance,c=g.ref,b=d.components.dataset[0].config.lastCenterLabelConfig,a={height:a.height,width:a.width,pixelHeight:c.offsetHeight,pixelWidth:c.offsetWidth,id:g.id,renderer:g.args.renderer,
container:d.linkedItems.container,centerLabelText:b&&b.label};this.attr("text")&&ma.raiseEvent("centerLabelRollout",a,g,this,d.hoverOffCenterLabel)},centerLabelClick:function(){var d=this.chart,a=d.config,g=d.chartInstance,c=g.ref,b=d.components.dataset[0].config.lastCenterLabelConfig,d={height:a.height,width:a.width,pixelHeight:c.offsetHeight,pixelWidth:c.offsetWidth,id:g.id,renderer:g.args.renderer,container:d.linkedItems.container,centerLabelText:b&&b.label};this.attr("text")&&ma.raiseEvent("centerLabelClick",
d,g)},centerLabelChange:function(d){var a=this.config,g=this.chartInstance,c=g.ref;ma.raiseEvent("centerLabelChanged",{height:a.height,width:a.width,pixelHeight:c.offsetHeight,pixelWidth:c.offsetWidth,id:g.id,renderer:g.args.renderer,container:this.linkedItems.container,centerLabelText:d},g)},hoverOnCenterLabel:function(){var d=this.chart.components.dataset[0].config.lastCenterLabelConfig;(d.hoverColor||d.hoverAlpha)&&this.attr({fill:qa({FCcolor:{color:d.hoverColor||d.color,alpha:d.hoverAlpha||d.alpha}})})},
hoverOffCenterLabel:function(){var d=this.chart.components.dataset[0].config.lastCenterLabelConfig;(d.hoverColor||d.hoverAlpha)&&this.attr({fill:qa({FCcolor:{color:d.color,alpha:d.alpha}})})}},h.pie2d,{singletonPlaceValue:!1});h("doughnut3d",{friendlyName:"3D Doughnut Chart",defaultDatasetType:"Doughnut3D",creditLabel:!1,applicableDSList:{Doughnut3D:!0},_configureManager:function(){var d=this.components.dataset[0],a=d.config,g=d.components,d=g.Pie3DManager,g=g.data;d&&d.configure(a.pieSliceDepth,
1===g.length,a.use3DLighting,!0)}},h.pie3d);h("mscolumn2d",{standaloneInit:!0,friendlyName:"Multi-series Column Chart",creditLabel:!1,defaultDatasetType:"column",applicableDSList:{column:!0},eiMethods:{}},h.mscartesian);h("mscolumn3d",{standaloneInit:!0,defaultDatasetType:"column3d",friendlyName:"Multi-series 3D Column Chart",applicableDSList:{column3d:!0},defaultPlotShadow:1,fireGroupEvent:!0,is3D:!0,creditLabel:!1,defaultZeroPlaneHighlighted:!1},h.mscartesian3d,{showplotborder:0});h("msbar2d",{standaloneInit:!0,
friendlyName:"Multi-series Bar Chart",isBar:!0,hasLegend:!0,creditLabel:!1,defaultDatasetType:"bar2d",applicableDSList:{bar2d:!0}},h.msbarcartesian);h("msbar3d",{standaloneInit:!0,defaultSeriesType:"bar3d",friendlyName:"Multi-series 3D Bar Chart",fireGroupEvent:!0,defaultPlotShadow:1,is3D:!0,isBar:!0,hasLegend:!0,creditLabel:!1,defaultZeroPlaneHighlighted:!1,defaultDatasetType:"bar3d",applicableDSList:{bar3d:!0}},h.msbarcartesian3d,{showplotborder:0});h("msarea",{standaloneInit:!0,friendlyName:"Multi-series Area Chart",
creditLabel:!1,defaultDatasetType:"area",defaultPlotShadow:0,applicableDSList:{area:!0}},h.areabase);h("msline",{standaloneInit:!0,friendlyName:"Multi-series Line Chart",creditLabel:!1,defaultDatasetType:"line",defaultPlotShadow:1,axisPaddingLeft:0,axisPaddingRight:0,applicableDSList:{line:!0}},h.areabase,{zeroplanethickness:1,zeroplanealpha:40,showzeroplaneontop:0});h("stackedarea2d",{friendlyName:"Stacked Area Chart",showsum:0,creditLabel:!1},h.msarea,{plotfillalpha:G,isstacked:1});h("stackedcolumn2d",
{friendlyName:"Stacked Column Chart",creditLabel:!1},h.mscolumn2d,{isstacked:!0});h("stackedcolumn3d",{friendlyName:"3D Stacked Column Chart",creditLabel:!1},h.mscolumn3d,{showplotborder:0},h.stackedcolumn2d);h("stackedbar2d",{friendlyName:"Stacked Bar Chart",creditLabel:!1},h.msbar2d,{maxbarheight:50},h.stackedcolumn2d);h("stackedbar3d",{friendlyName:"3D Stacked Bar Chart",creditLabel:!1},h.msbar3d,{showplotborder:0},h.stackedcolumn2d);h("marimekko",{standaloneInit:!0,friendlyName:"Marimekko Chart",
isValueAbs:!0,distributedColumns:!0,stack100percent:!0,defaultDatasetType:"marimekko",applicableDSList:{marimekko:!0},isStacked:!0,showsum:1,creditLabel:!1,_setAxisLimits:function(){var d=this.components,a=d.dataset,g=d.yAxis,d=d.xAxis,c,b=a.length,e,f=-Infinity,h=Infinity,t=Infinity,u=-Infinity,r,y,p={};r=this.config.categories;var w=[],m=function(d){f=Ca(f,d.max);h=Aa(h,d.min);u=Ca(u,d.xMax||-Infinity);t=Aa(t,d.xMin||Infinity)};for(e=0;e<b;e++)c=a[e],(y=c.groupManager)?p[c.type]=y:w.push(c);for(y in p)a=
p[y].getDataLimits(),m(a);b=w.length;for(e=0;e<b;e++)a=w[e].getDataLimits(),m(a);-Infinity===f&&(f=0);Infinity===h&&(h=0);g[0].setAxisConfig({isPercent:this.config.isstacked?this.config.stack100percent:0});g[0].setDataLimit(f,h);if(-Infinity!==u||Infinity!==t)d[0].config.xaxisrange={max:u,min:t},d[0].setDataLimit(u,t);g=p[y].getStackSumPercent();e=g.length;y=d[0].getCategoryLen();y>e&&r.splice(e,y-e);this._setCategories();e=d[0].getLimit();t=e.min;u=e.max;r=t;y=u-t;for(e=0;e<g.length;e++)a=g[e],b=
y*a/100,a=r+b/2,d[0].updateCategory(e,{x:a}),r+=b}},h.mscartesian,{isstacked:!0,showpercentvalues:0,usepercentdistribution:1,showsum:1});h("msstackedcolumn2d",{standaloneInit:!0,defaultDatasetType:"column",applicableDSList:{column:!0},friendlyName:"Multi-series Stacked Column Chart",_createDatasets:function(){var d=this.components,a=this.jsonData,g=a.dataset,c=g&&g.length||0,b,e,f,h=this.defaultDatasetType,t=this.applicableDSList,u,r,y,p,w,m,k=a.lineset||[],n=this.config,q=n.dataSetMap,C=n.lineSetMap,
A=q&&q.length,x=d.legend,D=[],v=[],B=0;y=0;var P,E=-1,I,F=this.config.catLen,z=d.xAxis[0],K,M,J=d.dataset;if(g||0!==k.length){this.config.categories=a.categories&&a.categories[0].category;e=d.dataset=[];for(a=0;a<c;a++){w=g[a];E++;if(w.dataset)for(M=!0,m=w.dataset&&w.dataset.length||0,D[a]=[],b=0;b<m;b++){if(y=w.dataset[b],u=(u=Ea(y.renderas,h))&&u.toLowerCase(),t[u]||(u=h),f=ja.get("component",["dataset",u]))p="datasetGroup_"+u,r=ja.register("component",["datasetGroup",u]),u=d[p],r&&!u?(u=d[p]=new r,
u.chart=this,u.init()):u&&q&&0!==q.length&&!P&&(u.init(),P=!0),q&&q[a]&&q[a][b]?(f=q[a][b],f.index=B,p=f.JSONData,r=p.data.length,p=y.data&&y.data.length||0,I=z.getCategoryLen(),K=F-I,r-=p,r=this._getDiff(r,p,K,I),p=r.diff,r=r.startIndex,0<p&&f.removeData(r,p,!1),f.JSONData=y,f.configure()):(f=new f,f.chart=this,f.index=B,f.init(y)),B++,D[a].push(f),e.push(f),u&&u.addDataSet(f,E,b)}else m=b=0,E--;w=q&&q[a]&&q[a].length;if(w>m)for(y=b,w=w-m+b;y<w;y++)u=q[a][y],x.removeItem(u.legendItemId),ra.call(u)}if(A>
c)for(y=a,w=A-c+a;y<w;y++)for(m=q[y].length,b=0;b<m;b++)u=q[y][b],x.removeItem(u.legendItemId),ra.call(u);n.dataSetMap=D;if(this.lineset){a=0;for(c=k.length;a<c;a++)g=k[a],f=ja.get("component",["dataset","line"]),f=new f,C&&C[a]?(f=C[a],f.index=B,p=f.JSONData,r=p.data.length,p=g.data&&g.data.length||0,r>p&&f.removeData(p,r-p,!1),f.JSONData=g,f.configure()):(f.chart=this,f.index=B,f.init(g)),v.push(f),e.push(f),B++;k=C&&C.length;if(k>c)for(y=a,w=k-c+a;y<w;y++)u=C[y],x.removeItem(u.legendItemId),ra.call(u);
n.lineSetMap=v}M?this.config.catLen=z.getCategoryLen():(d.dataset=J,this.setChartMessage())}else this.setChartMessage()},creditLabel:!1},h.mscartesian,{isstacked:!0});h("mscombi2d",{friendlyName:"Multi-series Combination Chart",standaloneInit:!0,creditLabel:!1,defaultDatasetType:"column",applicableDSList:{line:!0,area:!0,column:!0},_createDatasets:function(){var d=this.components,a=this.jsonData,g=a.dataset,c=g&&g.length,b,e,f=this.defaultDatasetType,h=this.applicableDSList,m=this.components.legend,
u=d.xAxis[0],r,y,p,w,k,n=this.config.isstacked,q,C,A=[],x={},D=this.config,v=this.config.catLen,B=D.datasetMap||(D.datasetMap={line:[],area:[],column:[],column3d:[],scrollcolumn2d:[]}),P={line:[],area:[],column:[],column3d:[],scrollcolumn2d:[]};g||this.setChartMessage();this.config.categories=a.categories&&a.categories[0].category;b=d.dataset=[];for(a=0;a<c;a++)if(k=g[a],w=k.parentyaxis||"",y=(y=this.config.isdual&&"s"===w.toLowerCase()?"line"===this.defaultSecondaryDataset?this.sDefaultDatasetType:
Ea(k.renderas,this.sDefaultDatasetType):Ea(k.renderas,f))&&y.toLowerCase(),h[y]||(y=f),p=ja.get("component",["dataset",y]))void 0===x[y]?x[y]=0:x[y]++,e="datasetGroup_"+y,w=ja.register("component",["datasetGroup",y]),(r=d[e])&&A.push(r),w&&!r&&(r=d[e]=new w,r.chart=this,r.init()),w=B[y],(e=w[0])?(r=u.getCategoryLen(),p=v-r,C=e.JSONData,q=C.data&&C.data.length,C=k.data&&k.data.length||0,q-=C,p=this._getDiff(q,C,p,r),r=p.diff,p=p.startIndex,0<r&&e.removeData(p,r,!1),e.JSONData=k,e.configure(),w.splice(0,
1)):(e=new p,e.chart=this,e.index=a,r&&(n?r.addDataSet(e,0,x[y]):r.addDataSet(e,x[y],0)),e.init(k)),P[y].push(e),b.push(e);for(g in B)if(w=B[g],f=w[0]&&w[0].groupManager,c=w.length,h=void 0===x[g]?0:x[g]+1,c)for(n&&f&&f.removeDataSet(0,h,c),d=0;d<c;d++)f&&!n&&f.removeDataSet(h,0,1),m.removeItem(w[d].legendItemId),"column"===w[d].type&&!0===this.is3D?(w[d].visible=!1,w[d].draw()):ra.call(w[d]);D.datasetMap=P;this.config.catLen=u.getCategoryLen()}},h.areabase);h("mscombi3d",{standaloneInit:!0,friendlyName:"Multi-series 3D Combination Chart",
defaultDatasetType:"column3d",is3D:!0,creditLabel:!1,defaultPlotShadow:1,applicableDSList:{column3d:!0,line:!0,area:!0},_createDatasets:h.mscombi2d},h.mscartesian3d,{showplotborder:0},h.areabase);h("mscolumnline3d",{friendlyName:"Multi-series Column and Line Chart",is3D:!0,creditLabel:!1,defaultPlotShadow:1,applicableDSList:{column3d:!0,line:!0}},h.mscombi3d,{use3dlineshift:1,showplotborder:0},h.msarea);h("stackedcolumn2dline",{friendlyName:"Stacked Column and Line Chart",defaultDatasetType:"column",
creditLabel:!1,applicableDSList:{line:!0,column:!0}},h.mscombi2d,{isstacked:!0,stack100percent:0},h.msarea);h("stackedcolumn3dline",{friendlyName:"Stacked 3D Column and Line Chart",is3D:!0,creditLabel:!1,applicableDSList:{column3d:!0,line:!0}},h.mscombi3d,{use3dlineshift:1,isstacked:!0,stack100percent:0,showplotborder:0},h.msarea);h("mscombidy2d",{standaloneInit:!0,friendlyName:"Multi-series Dual Y-Axis Combination Chart",defaultDatasetType:"column",sDefaultDatasetType:"line",_createDatasets:h.mscombi2d,
creditLabel:!1,applicableDSList:{column:!0,line:!0,area:!0}},h.msdybasecartesian,{isdual:1},h.msarea);h("mscolumn3dlinedy",{standaloneInit:!0,friendlyName:"Multi-series 3D Column and Line Chart",defaultDatasetType:"column3d",sDefaultDatasetType:"line",is3D:!0,creditLabel:!1,_createDatasets:h.mscombi2d,defaultPlotShadow:1,applicableDSList:{column3d:!0,line:!0}},h.msdybasecartesian3d,{use3dlineshift:1,isdual:!0,showplotborder:0},h.msarea);h("stackedcolumn3dlinedy",{standaloneInit:!0,friendlyName:"Stacked 3D Column and Line Chart",
is3D:!0,defaultDatasetType:"column3d",creditLabel:!1,sDefaultDatasetType:"line",defaultSecondaryDataset:"line",_createDatasets:h.mscombi2d,applicableDSList:{column3d:!0,line:!0}},h.msdybasecartesian3d,{use3dlineshift:1,isdual:!0,isstacked:!0,showplotborder:0},h.msarea);h("msstackedcolumn2dlinedy",{standaloneInit:!0,friendlyName:"Multi-series Dual Y-Axis Stacked Column and Line Chart",stack100percent:0,defaultDatasetType:"column",sDefaultDatasetType:"line",hasLineSet:!0,creditLabel:!1,applicableDSList:{column:!0},
lineset:!0,_createDatasets:h.msstackedcolumn2d},h.msdybasecartesian,{isdual:!0,haslineset:!0,isstacked:!0},h.msarea);h("scrollcolumn2d",{standaloneInit:!0,friendlyName:"Scrollable Multi-series Column Chart",tooltipConstraint:"plot",canvasborderthickness:1,creditLabel:!1,defaultDatasetType:"scrollcolumn2d",applicableDSList:{scrollcolumn2d:!0},avgScrollPointWidth:40,hasScroll:!0,defaultPlotShadow:1,_manageScrollerPosition:function(){var d=this.config,a;a=this._scrollBar.get;var g=this.components.scrollBar,
c;a=a()[0];g.setConfiguaration(a.conf);a=d.scrollEnabled;c=g.getLogicalSpace();this._allocateSpace({bottom:d.shift=!1===a?0:c.height+g.conf.padding})},_resetViewPortConfig:function(){this.config.viewPortConfig={scaleX:1,scaleY:1,x:0,y:0}},updateManager:function(d){var a=this.config,g=this.config.viewPortConfig,c=g.scaleX,b=this.graphics.datasetGroup,e=this.graphics.datalabelsGroup,f=this.graphics.trackerGroup,h=a.canvasWidth*(c-1)*d,m=this.components.xAxis[0],u=this.graphics.sumLabelsLayer;g.x=h/
c;g="t"+-ya(h)+",0";a.lastScrollPosition=d;b.attr({transform:g});e.attr({transform:g});f.attr({transform:g});u&&u.attr({transform:g});d=m.getAxisConfig("animateAxis");a=m.getAxisConfig("drawAxisName");m.setAxisConfig({animateAxis:!1,drawAxisName:!1});m.draw();m.setAxisConfig({animateAxis:d,drawAxisName:a})},_createToolBox:function(){var d=this.components,a=this._scrollBar,c=a.get,b=a.add,f,e,m=d.scrollBar;h.mscartesian._createToolBox.call(this);f=d.tb;e=(d.toolBoxAPI||f.getAPIInstances(f.ALIGNMENT_HORIZONTAL)).Scroller;
a.clear();b({isHorizontal:!0},{scroll:function(d){return function(){d.updateManager.apply(d,arguments)}}(this)});a=c()[0];m||(d.scrollBar=(new e(a.conf,f.idCount,f.pId)).attachEventHandlers(a.handler))},_setAxisScale:function(){var d=this.config,a=this.components.xAxis[0].getCategoryLen(),g=this.jsonData,b=d.scrollOptions||(d.scrollOptions={}),f=this.components.dataset,e=f.length,h,m,k=0,u;u=d.canvasWidth;var r=d.scrollToEnd,y=d.lastScrollPosition,g=ga(g.chart.numvisibleplot,c(d.width/this.avgScrollPointWidth));
for(m=0;m<e;m++)h=f[m],"column"===h.type&&k++;this.config.isstacked&&(k=1);a*=k||1;2<=g&&g<a?(d.viewPortConfig.scaleX=a/=g,u=u*(a-1)*(void 0!==y?y:r?1:0),d.viewPortConfig.x=u/a,b.vxLength=g/e,d.scrollEnabled=!0):d.scrollEnabled=!1},drawScrollBar:function(){var d=this,a=d.config,c=a.viewPortConfig,b=d.components,f=d.graphics,e=b.paper,h=b.xAxis[0],m=h.config,k=h.config.axisRange,u=a.scrollOptions||(a.scrollOptions={}),r=k.max,y=k.min,p=u.vxLength,w=b.scrollBar,k=w.node,n=a.scrollToEnd,q=a.lastScrollPosition,
C=c.scaleX,A,x,D,B,v;B=void 0!==q?q:n?1:0;c=a.canvasLeft;n=a.canvasTop;q=a.canvasHeight;A=a.canvasWidth;b=b.canvas.config;x=b.canvasBorderWidth;D=m.showAxisLine?m.axisLineThickness||0:0;v=ga(x,m.lineStartExtension);m=ga(x,m.lineEndExtension);u.viewPortMin=y;u.viewPortMax=r;C=u.scrollRatio=1/C;p=u.windowedCanvasWidth=h.getAxisPosition(p);h=u.fullCanvasWidth=h.getAxisPosition(r-y)-p;u=f.scrollBarParentGroup;u||(u=f.scrollBarParentGroup=e.group("scrollBarParentGroup",f.parentGroup).insertBefore(f.datalabelsGroup));
!1!==a.scrollEnabled?(w.draw(c-v,n+q+x+D-2,{width:A+v+m,scrollRatio:C,roundEdges:b.isRoundEdges,fullCanvasWidth:h,windowedCanvasWidth:p,scrollPosition:B,parentLayer:u}),!k&&function(){var a;ta.eve.on("raphael.scroll.start."+w.node.id,function(c){a=c;ma.raiseEvent("scrollstart",{scrollPosition:c},d.chartInstance)});ta.eve.on("raphael.scroll.end."+w.node.id,function(c){ma.raiseEvent("scrollend",{prevScrollPosition:a,scrollPosition:c},d.chartInstance)})}()):w&&w.node&&w.node.hide()},_drawDataset:function(){this._setClipping();
h.mscartesian._drawDataset.call(this)},_setClipping:function(){var a=this.config,c=this.graphics.datasetGroup,g=this.graphics.datalabelsGroup,b=this.graphics.trackerGroup,f=a.viewPortConfig,e=this.graphics.sumLabelsLayer,h=f.scaleX,m=this.get("config","animationObj"),k=m.duration,u=m.dummyObj,r=m.animObj,m=m.animType,f=f.x,a=a.height,y=this.components.canvas.config.clip["clip-canvas"],y=y&&y.slice(0)||[];this.config.clipSet?(c.animateWith(u,r,{"clip-rect":y},k,m),g.animateWith(u,r,{"clip-rect":y},
k,m),b.attr({"clip-rect":y}),y[3]=a,y[1]=0,e&&e.animateWith(u,r,{"clip-rect":y},k,m)):(c.attr({"clip-rect":y}),g.attr({"clip-rect":y}),b.attr({"clip-rect":y}),y[3]=a,y[1]=0,e&&e.attr({"clip-rect":y}));c.attr({transform:"T"+-(f*h)+",0"});g.attr({transform:"T"+-(f*h)+",0"});b.attr({transform:"T"+-(f*h)+",0"});e&&e.attr({transform:"T"+-(f*h)+",0"});this.config.clipSet=!0},configure:function(){var a=this.jsonData.chart,c;h.mscolumn2d.configure.call(this);c=this.config;c.scrollToEnd=ga(a.scrolltoend,0);
c.lastScrollPosition=void 0}},h.scrollbase);h("scrollarea2d",{friendlyName:"Scrollable Multi-series Area Chart",tooltipConstraint:"plot",canvasborderthickness:1,creditLabel:!1,hasScroll:!0,defaultDatasetType:"scrollarea2d",applicableDSList:{scrollarea2d:!0},avgScrollPointWidth:75,defaultPlotShadow:0,_setAxisScale:function(){var a=this.config,b=this.components.xAxis[0].getCategoryLen(),g=this.jsonData,f=a.scrollOptions||(a.scrollOptions={}),l;l=a.lastScrollPosition;var e=a.scrollToEnd,h=a.canvasWidth,
g=ga(g.chart.numvisibleplot,c(a.width/this.avgScrollPointWidth));2<=g&&g<b?(a.viewPortConfig.scaleX=b/=g,l=h*(b-1)*(void 0!==l?l:e?1:0),a.viewPortConfig.x=l/b,f.vxLength=g,a.scrollEnabled=!0):a.scrollEnabled=!1}},h.scrollcolumn2d,{},h.areabase);h("scrollline2d",{friendlyName:"Scrollable Multi-series Line Chart",tooltipConstraint:"plot",canvasborderthickness:1,defaultDatasetType:"line",creditLabel:!1,avgScrollPointWidth:75,defaultPlotShadow:1},h.scrollarea2d,{zeroplanethickness:1,zeroplanealpha:40,
showzeroplaneontop:0},h.areabase);h("scrollstackedcolumn2d",{friendlyName:"Scrollable Stacked Column Chart",canvasborderthickness:1,tooltipConstraint:"plot",avgScrollPointWidth:75,creditLabel:!1},h.scrollcolumn2d,{},h.stackedcolumn2d);h("scrollcombi2d",{friendlyName:"Scrollable Combination Chart",tooltipConstraint:"plot",hasScroll:!0,canvasborderthickness:1,avgScrollPointWidth:40,applicableDSList:{area:!0,line:!0,column:!0},creditLabel:!1,_createDatasets:h.mscombi2d},h.scrollcolumn2d,{},h.msarea);
h("scrollcombidy2d",{friendlyName:"Scrollable Dual Y-Axis Combination Chart",tooltipConstraint:"plot",canvasborderthickness:1,avgScrollPointWidth:40,hasScroll:!0,_drawDataset:h.scrollcolumn2d,updateManager:h.scrollcolumn2d,_setAxisScale:h.scrollcolumn2d,_createToolBox:h.scrollcolumn2d,_scrollBar:h.scrollcolumn2d,_manageScrollerPosition:h.scrollcolumn2d,drawScrollBar:h.scrollcolumn2d,_setClipping:h.scrollcolumn2d,creditLabel:!1,configure:h.scrollcolumn2d},h.mscombidy2d,{isdual:!0},h.areabase);h("scatter",
{friendlyName:"Scatter Chart",isXY:!0,standaloneInit:!0,hasLegend:!0,defaultZeroPlaneHighlighted:!1,creditLabel:!1,defaultDatasetType:"Scatter",applicableDSList:{Scatter:!0}},h.scatterBase);Ya(R.eventList,{zoomedOut:"FC_ZoomedOut"});h("bubble",{friendlyName:"Bubble Chart",standaloneInit:!0,defaultDatasetType:"bubble",creditLabel:!1,applicableDSList:{bubble:!0},getDataLimits:function(){var a=this.components.dataset,c,b,f,l=-Infinity,e=Infinity;c=0;for(f=a.length;c<f;c++)b=a[c],b=b.getDataLimits(),
l=Ca(l,b.zMax||-Infinity),e=Aa(e,b.zMin||Infinity);l=-Infinity===l?0:l;e=Infinity===e?0:e;return{zMax:l,zMin:e}}},h.scatter);ta._availableAnimAttrs&&ta._availableAnimAttrs.cx&&(ta._availableAnimAttrs.innerR=ta._availableAnimAttrs.depth=ta._availableAnimAttrs.radiusYFactor=ta._availableAnimAttrs.start=ta._availableAnimAttrs.end=ta._availableAnimAttrs.cx);pa.prototype={configure:function(a,c,b,f){var l=this.linkedItems.chart,e=l.get("components","paper"),l=l.get("graphics","datasetGroup");"object"===
typeof a&&(a=a.depth,c=a.hasOnePoint,b=a.use3DLighting,f=a.isDoughnut);this.renderer||(this.renderer=e);this.hasOnePoint=c;this.use3DLighting=b;this.isDoughnut=f;this.depth=a;!this.bottomBorderGroup&&(this.bottomBorderGroup=e.group("bottom-border",l));this.bottomBorderGroup.attr({transform:"t0,"+a});!this.slicingWallsBackGroup&&(this.slicingWallsBackGroup=e.group("slicingWalls-back-Side",l));!this.slicingWallsFrontGroup&&(this.slicingWallsFrontGroup=e.group("slicingWalls-front-Side",l));!this.topGroup&&
(this.topGroup=e.group("top-Side",l));!this.pointElemStore&&(this.pointElemStore=[]);!this.slicingWallsArr&&(this.slicingWallsArr=[]);this.moveCmdArr=["M"];this.lineCmdArr=["L"];this.closeCmdArr=["Z"];this.colorObjs=[]},getArcPath:function(a,c,b,f,l,e,h,m,k,u){return b==l&&f==e?[]:["A",h,m,0,u,k,l,e]},_parseSliceColor:function(a,c,b){var f,l,e,h,m,k,u,r,y,p,w,n,A,x,D;D=3;var v=(f=this.use3DLighting)?T:V,E=b.radiusYFactor,G=b.cx,Q=b.cy,L=b.r,da=L*E,S=b.innerR||0,qb=G+L,I=G-L,F=G+S,z=G-S;c=c||100;b=
c/2;v[a]&&v[a][c]?v=v[a][c]:(v[a]||(v[a]={}),v[a][c]||(v[a][c]={}),v=v[a][c],f?(f=q(a,80),l=q(a,75),k=C(a,85),u=C(a,70),r=C(a,40),y=C(a,50),C(a,30),p=C(a,65),q(a,85),e=q(a,69),h=q(a,75),m=q(a,95)):(D=10,f=q(a,90),l=q(a,87),k=C(a,93),u=C(a,87),r=C(a,80),p=y=C(a,85),C(a,80),m=q(a,85),e=q(a,75),h=q(a,80)),w=l+B+k+B+u+B+k+B+l,A=c+B+c+B+c+B+c+B+c,n=l+B+a+B+k+B+a+B+l,x=b+B+b+B+b+B+b+B+b,r=l+B+a+B+r+B+a+B+l,e=h+B+k+B+y+B+k+B+e,h="FFFFFF"+B+"FFFFFF"+B+"FFFFFF"+B+"FFFFFF"+B+"FFFFFF",D=0+B+b/D+B+c/D+B+b/D+
B+0,v.top=na?{FCcolor:{gradientUnits:"userSpaceOnUse",radialGradient:!0,color:p+B+m,alpha:c+B+c,ratio:"0,100"}}:{FCcolor:{gradientUnits:"objectBoundingBox",color:u+B+u+B+k+B+l,alpha:c+B+c+B+c+B+c,angle:-72,ratio:"0,8,15,77"}},v.frontOuter={FCcolor:{gradientUnits:"userSpaceOnUse",y1:0,y2:0,color:e,alpha:A,angle:0,ratio:"0,20,15,15,50"}},v.backOuter={FCcolor:{gradientUnits:"userSpaceOnUse",y1:0,y2:0,color:r,alpha:x,angle:0,ratio:"0,62,8,8,22"}},v.frontInner={FCcolor:{gradientUnits:"userSpaceOnUse",
y1:0,y2:0,color:n,alpha:x,angle:0,ratio:"0,25,5,5,65"}},v.backInner={FCcolor:{gradientUnits:"userSpaceOnUse",y1:0,y2:0,color:w,alpha:A,angle:0,ratio:"0,62,8,8,22"}},v.topBorder={FCcolor:{gradientUnits:"userSpaceOnUse",y1:0,y2:0,color:h,alpha:D,angle:0,ratio:"0,20,15,15,50"}},v.topInnerBorder={FCcolor:{gradientUnits:"userSpaceOnUse",y1:0,y2:0,color:h,alpha:D,angle:0,ratio:"0,50,15,15,20"}},v.bottom=qa(P(a,b)),v.startSlice=qa(P(f,c)),v.endSlice=qa(P(f,c)));if(v.cx!==G||v.cy!==Q||v.rx!==L||v.radiusYFactor!==
E||v.innerRx!==S)na&&(v.top.FCcolor.cx=G,v.top.FCcolor.cy=Q,v.top.FCcolor.r=L,v.top.FCcolor.fx=G-.3*L,v.top.FCcolor.fy=Q+1.2*da),v.topBorder.FCcolor.x1=v.backOuter.FCcolor.x1=v.frontOuter.FCcolor.x1=I,v.topBorder.FCcolor.x2=v.backOuter.FCcolor.x2=v.frontOuter.FCcolor.x2=qb,v.topInnerBorder.FCcolor.x1=v.backInner.FCcolor.x1=v.frontInner.FCcolor.x1=z,v.topInnerBorder.FCcolor.x2=v.backInner.FCcolor.x2=v.frontInner.FCcolor.x2=F,v.cx=G,v.cy=Q,v.rx=L,v.radiusYFactor=E,v.innerRx=S;return v},rotate:function(a){var c=
this.pointElemStore,b=0,f=c.length,l;if(!this.hasOnePoint){for(;b<f;b+=1)l=c[b],l=l._confObject,l.start+=a,l.end+=a,this._setSliceShape(l);this.refreshDrawing()}},removeSlice:function(a){var c=this.pointElemStore,b=a._confObject.elements,f=this.slicingWallsArr,l;l=c.length;var e;for(--l;0<=l;--l)e=c[l],e===a&&c.splice(l,1);l=f.length;for(--l;0<=l;--l)c=f[l],c!==b.startSlice&&c!==b.frontOuter1&&c!==b.frontOuter&&c!==b.backInner&&c!==b.endSlice||f.splice(l,1);a.hide&&a.hide();this._slicePool||(this._slicePool=
[]);this._slicePool.push(a);this.refreshDrawing()},useSliceFromPool:function(){var a=this._slicePool||(this._slicePool=[]),c=this.slicingWallsArr,b=!1;a.length&&(b=a.shift(),this.pointElemStore.push(b),b.show(),a=b._confObject.elements,c.push(a.startSlice,a.frontOuter1,a.frontOuter),a.backInner&&c.push(a.backInner),c.push(a.endSlice));return b},refreshDrawing:function(){var a=function(a,d){return a._conf.index-d._conf.index||a._conf.cIndex-d._conf.cIndex||a._conf.isStart-d._conf.isStart||a._conf.si-
d._conf.si};return function(){var c=this.slicingWallsArr,b=0,h,l=c.length,e,k,n,t,u=this.slicingWallsFrontGroup,r=this.slicingWallsBackGroup;c.sort(a);a:{var y=c[0]&&c[0]._conf.index,p,w;t=y<=f;e=1;for(h=c.length;e<h;e+=1)if(w=c[e]._conf.index,p=w<=f,p!=t||w<y)break a;e=0}for(;b<l;b+=1,e+=1)e===l&&(e=0),h=c[e],t=h._conf.index,t<m?u.appendChild(h):t<=f?(k?h.insertBefore(k):u.appendChild(h),k=h):t<=A?(n?h.insertBefore(n):r.appendChild(h),n=h):r.appendChild(h)}}(),_setSliceShape:function(a,c){var b=
this.getArcPath,h=a.start,l=a.end,e=S(h),k=S(l),q,t,u,r,y,p,w,v,C,x,D,B,P,E,Q,G,V,T=this.isDoughnut,L=a.radiusYFactor,I=a.cx,F=a.cy,z=a.r,K=z*L,M=z+(na?-1:2),J=K+(na?-1:2),W=a.innerR||0,Z=W*L,N=this.depth,O=N+F,da=I+z,ha=I-z,ea=I+W,R=I-W,ga=F-K,U=["M",R,ga,"L",R,O+K,"Z"],L=a.elements,aa,fa,X,ca,ia,ka="path",ma=(e+k)/2,ja=e>k;t=oa(e);u=ua(e);r=oa(k);y=ua(k);p=I+z*t;w=F+K*u;v=I+M*t;C=F+J*u;aa=w+N;fa=I+z*r;X=F+K*y;x=I+M*r;D=F+J*y;ca=X+N;T?(B=I+W*t,P=F+Z*u,G=P+N,E=I+W*r,Q=F+Z*y,V=Q+N,a.startSlice=["M",
p,w,"L",p,aa,B,G,B,P,"Z"],a.endSlice=["M",fa,X,"L",fa,ca,E,V,E,Q,"Z"]):(a.startSlice=["M",p,w,"L",p,aa,I,O,I,F,"Z"],a.endSlice=["M",fa,X,"L",fa,ca,I,O,I,F,"Z"]);na?(q=(e>k?n:0)+k-e,a.clipTopPath=T?[["M",p,w,"A",z,K,0,q>f?1:0,1,fa,X,"L",E,Q,"A",W,Z,0,q>f?1:0,0,B,P,"Z"]]:[["M",p,w,"A",z,K,0,q>f?1:0,1,fa,X,"L",I,F,"Z"]],a.clipOuterFrontPath1=[U],a.clipTopBorderPath=[["M",v,C,"A",M,J,0,q>f?1:0,1,x,D,"L",fa,X,fa,X+1,"A",z,K,0,q>f?1:0,0,p,w+1,"L",p,w,"Z"]],h!=l?e>k?e<f?(a.clipOuterFrontPath=[["M",da,F,
"A",z,K,0,0,1,fa,X,"v",N,"A",z,K,0,0,0,da,F+N,"Z"]],a.clipOuterFrontPath1=[["M",ha,F,"A",z,K,0,0,0,p,w,"v",N,"A",z,K,0,0,1,ha,F+N,"Z"]],a.clipOuterBackPath=[["M",da,F,"A",z,K,0,1,0,ha,F,"v",N,"A",z,K,0,1,1,da,F+N,"Z"]],T&&(a.clipInnerBackPath=[["M",ea,F,"A",W,Z,0,1,0,R,F,"v",N,"A",W,Z,0,1,1,ea,F+N,"Z"]],a.clipInnerFrontPath=[["M",ea,F,"A",W,Z,0,0,1,E,Q,"v",N,"A",W,Z,0,0,0,ea,F+N,"Z","M",R,F,"A",W,Z,0,0,0,B,P,"v",N,"A",W,Z,0,0,1,R,F+N,"Z"]])):k>f?(a.clipOuterFrontPath=[["M",da,F,"A",z,K,0,1,1,ha,F,
"v",N,"A",z,K,0,1,0,da,F+N,"Z"]],a.clipOuterBackPath=[["M",ha,F,"A",z,K,0,0,1,fa,X,"v",N,"A",z,K,0,0,0,ha,F+N,"Z","M",da,F,"A",z,K,0,0,0,p,w,"v",N,"A",z,K,0,0,1,da,F+N,"Z"]],T&&(a.clipInnerFrontPath=[["M",ea,F,"A",W,Z,0,1,1,R,F,"v",N,"A",W,Z,0,1,0,ea,F+N,"Z"]],a.clipInnerBackPath=[["M",R,F,"A",W,Z,0,0,1,E,Q,"v",N,"A",W,Z,0,0,0,R,F+N,"Z","M",ea,F,"A",W,Z,0,0,0,B,P,"v",N,"A",W,Z,0,0,1,ea,F+N,"Z"]])):(a.clipOuterFrontPath=[["M",da,F,"A",z,K,0,0,1,fa,X,"v",N,"A",z,K,0,0,0,da,F+N,"Z"]],a.clipOuterBackPath=
[["M",p,w,"A",z,K,0,0,1,da,F,"v",N,"A",z,K,0,0,0,p,aa,"Z"]],T&&(a.clipInnerFrontPath=[["M",ea,F,"A",W,Z,0,0,1,E,Q,"v",N,"A",W,Z,0,0,0,ea,F+N,"Z"]],a.clipInnerBackPath=[["M",B,P,"A",W,Z,0,0,1,ea,F,"v",N,"A",W,Z,0,0,0,B,G,"Z"]])):e<f?k>f?(a.clipOuterFrontPath=[["M",p,w,"A",z,K,0,0,1,ha,F,"v",N,"A",z,K,0,0,0,p,aa,"Z"]],a.clipOuterBackPath=[["M",ha,F,"A",z,K,0,0,1,fa,X,"v",N,"A",z,K,0,0,0,ha,F+N,"Z"]],T&&(a.clipInnerFrontPath=[["M",B,P,"A",W,Z,0,0,1,R,F,"v",N,"A",W,Z,0,0,0,B,G,"Z"]],a.clipInnerBackPath=
[["M",R,F,"A",W,Z,0,0,1,E,Q,"v",N,"A",W,Z,0,0,0,R,F+N,"Z"]])):(a.clipOuterFrontPath=[["M",p,w,"A",z,K,0,0,1,fa,X,"v",N,"A",z,K,0,0,0,p,aa,"Z"]],a.clipOuterBackPath=[U],T&&(a.clipInnerFrontPath=[["M",B,P,"A",W,Z,0,0,1,E,Q,"v",N,"A",W,Z,0,0,0,B,G,"Z"]],a.clipInnerBackPath=[U])):(a.clipOuterFrontPath=[U],a.clipOuterBackPath=[["M",p,w,"A",z,K,0,0,1,fa,X,"v",N,"A",z,K,0,0,0,p,aa,"Z"]],T&&(a.clipInnerFrontPath=[U],a.clipInnerBackPath=[["M",B,P,"A",W,Z,0,0,1,E,Q,"v",N,"A",W,Z,0,0,0,B,G,"Z"]])):a.clipOuterFrontPath=
a.clipOuterBackPath=a.clipInnerBackPath=a.clipInnerFrontPath=[U],ka="litepath",a.clipBottomBorderPath=a.clipTopPath,a.startSlice=[a.startSlice],a.endSlice=[a.endSlice]):(M=this.moveCmdArr,J=this.lineCmdArr,t=this.closeCmdArr,N=[I,F],u=[ha,F],ga=[I,ga],r=[da,F],y=[I,F+K],U=[ha,O],ia=[da,O],v=[R,F],C=[ea,F],x=[R,O],D=[ea,O],a.clipOuterFrontPath1=[],h!=l?(e>k?e<f?(h=b(I,F,p,w,ha,F,z,K,1,0),l=b(I,F,ha,F,da,F,z,K,1,0),X=b(I,F,da,F,fa,X,z,K,1,0),a.clipOuterBackPath=M.concat(u,l,J,ia,b(I,O,da,O,ha,O,z,K,
0,0),t),a.clipOuterFrontPath1=M.concat([p,w],h,J,U,b(I,O,ha,O,p,aa,z,K,0,0),t),a.clipOuterFrontPath=M.concat(r,X,J,[fa,ca],b(I,O,fa,ca,da,O,z,K,0,0),t),a.clipTopBorderPath=M.concat([p,w],h,l,X),T?(z=b(I,F,E,Q,ea,F,W,Z,0,0),K=b(I,F,ea,F,R,F,W,Z,0,0),P=b(I,F,R,F,B,P,W,Z,0,0),a.clipInnerBackPath=M.concat(C,K,J,x,b(I,O,R,O,ea,O,W,Z,1,0),t),a.clipInnerFrontPath=M.concat(v,P,J,[B,G],b(I,O,B,G,R,O,W,Z,1,0),t,M,[E,Q],z,J,D,b(I,O,ea,O,E,V,W,Z,1,0),t),a.clipTopPath=a.clipTopBorderPath.concat(J,[E,Q],z,K,P,
t),a.clipTopBorderPath=a.clipTopBorderPath.concat(M,[E,Q],z,K,P)):a.clipTopPath=a.clipTopBorderPath.concat(J,N,t)):k>f?(h=b(I,F,p,w,da,F,z,K,1,0),l=b(I,F,da,F,ha,F,z,K,1,0),X=b(I,F,ha,F,fa,X,z,K,1,0),a.clipOuterFrontPath=M.concat(r,l,J,U,b(I,O,ha,O,da,O,z,K,0,0),t),a.clipOuterBackPath=M.concat([p,w],h,J,ia,b(I,O,da,O,p,aa,z,K,0,0),t,M,u,X,J,[fa,ca],b(I,O,fa,ca,ha,O,z,K,0,0),t),a.clipTopBorderPath=M.concat([p,w],h,l,X),T?(z=b(I,F,E,Q,R,F,W,Z,0,0),K=b(I,F,R,F,ea,F,W,Z,0,0),P=b(I,F,ea,F,B,P,W,Z,0,0),
a.clipInnerFrontPath=M.concat(v,K,J,D,b(I,O,ea,O,R,O,W,Z,1,0),t),a.clipInnerBackPath=M.concat(C,P,J,[B,G],b(I,O,B,G,ea,O,W,Z,1,0),t,M,[E,Q],z,J,x,b(I,O,R,O,E,V,W,Z,1,0),t),a.clipTopPath=a.clipTopBorderPath.concat(J,[E,Q],z,K,P,t),a.clipTopBorderPath=a.clipTopBorderPath.concat(M,[E,Q],z,K,P)):a.clipTopPath=a.clipTopBorderPath.concat(J,N,t)):(h=b(I,F,p,w,da,F,z,K,1,0),l=b(I,F,da,F,fa,X,z,K,1,0),a.clipOuterFrontPath=M.concat(r,l,J,[fa,ca],b(I,O,fa,ca,da,O,z,K,0,0),t),a.clipOuterBackPath=M.concat([p,
w],h,J,ia,b(I,O,da,O,p,aa,z,K,0,0),t),a.clipTopBorderPath=M.concat([p,w],h,l),T?(z=b(I,F,E,Q,ea,F,W,Z,0,0),K=b(I,F,ea,F,B,P,W,Z,0,0),a.clipInnerFrontPath=M.concat([E,Q],z,J,D,b(I,O,ea,O,E,V,W,Z,1,0),t),a.clipInnerBackPath=M.concat(C,K,J,[B,G],b(I,O,B,G,ea,O,W,Z,1,0),t),a.clipTopPath=a.clipTopBorderPath.concat(J,[E,Q],z,K,t),a.clipTopBorderPath=a.clipTopBorderPath.concat(M,[E,Q],z,K)):a.clipTopPath=a.clipTopBorderPath.concat(J,N,t)):e<f?k>f?(h=b(I,F,p,w,ha,F,z,K,1,0),l=b(I,F,ha,F,fa,X,z,K,1,0),a.clipOuterBackPath=
M.concat(u,l,J,[fa,ca],b(I,O,fa,ca,ha,O,z,K,0,0),t),a.clipOuterFrontPath=M.concat([p,w],h,J,U,b(I,O,ha,O,p,aa,z,K,0,0),t),a.clipTopBorderPath=M.concat([p,w],h,l),T?(z=b(I,F,E,Q,R,F,W,Z,0,0),K=b(I,F,R,F,B,P,W,Z,0,0),a.clipInnerBackPath=M.concat([E,Q],z,J,x,b(I,O,R,O,E,V,W,Z,1,0),t),a.clipInnerFrontPath=M.concat(v,K,J,[B,G],b(I,O,B,G,R,O,W,Z,1,0),t),a.clipTopPath=a.clipTopBorderPath.concat(J,[E,Q],z,K,t),a.clipTopBorderPath=a.clipTopBorderPath.concat(M,[E,Q],z,K)):a.clipTopPath=a.clipTopBorderPath.concat(J,
N,t)):(h=b(I,F,p,w,fa,X,z,K,1,0),a.clipOuterBackPath=M.concat([p,w]),a.clipTopBorderPath=a.clipOuterBackPath.concat(h),a.clipOuterFrontPath=a.clipTopBorderPath.concat(J,[fa,ca],b(I,O,fa,ca,p,aa,z,K,0,0),t),T?(z=b(I,F,E,Q,B,P,W,Z,0,0),a.clipInnerBackPath=M.concat([E,Q]),a.clipTopPath=a.clipTopBorderPath.concat(J,[E,Q],z,t),a.clipTopBorderPath=a.clipTopBorderPath.concat(M,[E,Q],z),a.clipInnerFrontPath=a.clipInnerBackPath.concat(z,J,[B,G],b(I,O,B,G,E,V,W,Z,1,0),t)):a.clipTopPath=a.clipTopBorderPath.concat(J,
N,t)):(h=b(I,F,p,w,fa,X,z,K,1,0),a.clipOuterFrontPath=M.concat([p,w]),a.clipTopBorderPath=a.clipOuterFrontPath.concat(h),a.clipOuterBackPath=a.clipTopBorderPath.concat(J,[fa,ca],b(I,O,fa,ca,p,aa,z,K,0,0),t),T?(z=b(I,F,E,Q,B,P,W,Z,0,0),a.clipInnerFrontPath=M.concat([E,Q]),a.clipTopPath=a.clipTopBorderPath.concat(J,[E,Q],z,t),a.clipTopBorderPath=a.clipTopBorderPath.concat(a.clipInnerFrontPath,z),a.clipInnerBackPath=a.clipInnerFrontPath.concat(z,J,[B,G],b(I,O,B,G,E,V,W,Z,1,0),t)):a.clipTopPath=a.clipTopBorderPath.concat(J,
N,t)),h=M.concat(u,J,r),z=M.concat(ga,J,y),a.clipTopPath=a.clipTopPath.concat(h,z),a.clipOuterFrontPath=a.clipOuterFrontPath.concat(h),a.clipOuterFrontPath1=a.clipOuterFrontPath1.concat(h),a.clipOuterBackPath=a.clipOuterBackPath.concat(h),T&&(z=M.concat(v,J,C),a.clipInnerFrontPath=a.clipInnerFrontPath.concat(z),a.clipInnerBackPath=a.clipInnerBackPath.concat(z))):(a.clipTopPath=a.clipOuterFrontPath=a.clipOuterBackPath=[],T&&(a.clipInnerFrontPath=a.clipInnerBackPath=[])),a.clipBottomBorderPath=a.clipTopBorderPath);
c||(L.startSlice._conf.index=e,L.endSlice._conf.index=k,L.backOuter._conf.index=B=ja&&(e<=A||k>A)||e<=A&&k>A?A:e>f?e:k,L.frontOuter._conf.index=b=k<=m?k:e>k||e<=m?m:e,L.frontOuter1._conf.index=e,L.frontOuter1._conf.cIndex=f,e>k?(L.backOuter._conf.cIndex=e<A?A:n,L.startSlice._conf.cIndex=e<f?(e+f)/2:(e+n)/2,L.endSlice._conf.cIndex=L.frontOuter._conf.cIndex=0):L.backOuter._conf.cIndex=L.startSlice._conf.cIndex=L.endSlice._conf.cIndex=L.frontOuter._conf.cIndex=ma,q>f?L.frontOuter1.show().attr(ka,a.clipOuterFrontPath1):
L.frontOuter1.hide(),a.thisElement._attr(ka,a.clipTopPath),L.bottom.attr(ka,a.clipTopPath),L.bottomBorder.attr(ka,a.clipBottomBorderPath),L.topBorder&&L.topBorder.attr(ka,a.clipTopBorderPath),L.frontOuter.attr(ka,a.clipOuterFrontPath),L.backOuter.attr(ka,a.clipOuterBackPath),T&&(L.backInner.attr(ka,a.clipInnerBackPath),L.frontInner.attr(ka,a.clipInnerFrontPath),L.backInner._conf.index=B,L.frontInner._conf.index=b,e>k?(L.backInner._conf.cIndex=n,L.frontInner._conf.cIndex=0):L.backInner._conf.cIndex=
L.frontInner._conf.cIndex=ma),this.hasOnePoint?(L.startSlice.hide(),L.endSlice.hide()):(L.startSlice.attr(ka,a.startSlice).show(),L.endSlice.attr(ka,a.endSlice).show()))},_setSliceCosmetics:function(a){var b=a.thisElement,c=a.showBorderEffect,f=a.elements,h=P(a.borderColor,ga(a.borderAlpha,a.alpha)),e=a.borderWidth,k;a.color&&(a=this._parseSliceColor(a.color,a.alpha,a),na?(k={fill:qa(a.top),"stroke-width":0},c?f.topBorder.show().attr({fill:qa(a.topBorder),"stroke-width":0}):(f.topBorder.hide(),k.stroke=
h,k["stroke-width"]=e),b._attr(k)):(b._attr({fill:qa(a.top),"stroke-width":0}),f.topBorder.attr({stroke:h,"stroke-width":e})),f.bottom.attr({fill:qa(a.bottom)}),f.bottomBorder.attr({stroke:h,"stroke-width":e}),f.frontOuter.attr({fill:qa(a.frontOuter)}),f.frontOuter1.attr({fill:qa(a.frontOuter)}),f.backOuter.attr({fill:qa(a.backOuter)}),f.startSlice.attr({fill:qa(a.startSlice),stroke:h,"stroke-width":e}),f.endSlice.attr({fill:qa(a.endSlice),stroke:h,"stroke-width":e}),this.isDoughnut&&(f.frontInner.attr({fill:qa(a.frontInner)}),
f.backInner.attr({fill:qa(a.backInner)})))},createSlice:function(){var a={stroke:!0,strokeWidth:!0,"stroke-width":!0,dashstyle:!0,"stroke-dasharray":!0,translateX:!0,translateY:!0,"stroke-opacity":!0,fill:!0,opacity:!0,transform:!0,ishot:!0,cursor:!0,start:!0,end:!0,color:!0,alpha:!0,borderColor:!0,borderAlpha:!0,borderWidth:!0,rolloverProps:!0,showBorderEffect:!0,positionIndex:!0,cx:!0,cy:!0,radiusYFactor:!0,r:!0,innerR:!0},b=function(b,c){var e,f,g=this,h=g._confObject,l={},k=h.elements,m,u,n,q=
h.Pie3DManager,t;"string"===typeof b&&void 0!==c&&null!==c&&(e=b,b={},b[e]=c);if(b&&"string"!==typeof b){for(e in b)if(f=b[e],a[e])if(h[e]=f,"ishot"===e||"cursor"===e||"transform"===e)l[e]=f,t=!0;else if("start"===e||"end"===e||"cx"===e||"cy"===e||"radiusYFactor"===e||"r"===e||"innerR"===e)u=!0;else{if("color"===e||"alpha"===e||"borderColor"===e||"borderAlpha"===e||"borderWidth"===e)n=!0}else g._attr(e,f);u&&(q._setSliceShape(h),q.refreshDrawing());(n||u)&&q._setSliceCosmetics(h);if(t){for(m in k)k[m].attr(l);
g._attr(l)}}else g=a[b]?h[b]:g._attr(b);return g},c=function(a,b){var c=this._confObject.elements,e;for(e in c)c[e].on(a,b);return this._on(a,b)},f=function(a,b,c){var e,d=this._confObject.elements,f=-1<Ia.navigator.userAgent.toLowerCase().indexOf("android");for(e in d)f?"topBorder"!==e&&"frontOuter"!==e&&"startSlice"!==e&&"endSlice"!==e||d[e].drag(a,b,c):d[e].drag(a,b,c);return this._drag(a,b,c)},h=function(){var a=this._confObject.elements,b;for(b in a)a[b].hide();return this._hide()},e=function(){var a=
this._confObject.elements,b;for(b in a)a[b].show();return this._show()},k=function(){var a=this._confObject,b=a.elements,c;for(c in b)b[c].destroy();na&&(a.clipTop.destroy(),a.clipOuterFront.destroy(),a.clipOuterBack.destroy(),a.clipOuterFront1&&a.clipOuterFront1.destroy(),a.clipInnerFront&&a.clipInnerFront.destroy(),a.clipInnerBack&&a.clipInnerBack.destroy());return this._destroy()},m=function(a){var b=this._confObject.elements,c;for(c in b)b[c].tooltip(a);return this._tooltip(a)},n=function(a,b){var c=
this._confObject.elements,e;if(void 0===b)return this._data(a);for(e in c)c[e].data(a,b);return this._data(a,b)},u=0;return function(){var a=this.renderer,d,p={elements:{},Pie3DManager:this},w=this.slicingWallsArr,q=p.elements,v=na?"litepath":"path";d=a[v](this.topGroup);d._confObject=p;p.thisElement=d;d._destroy=d.destroy;d.destroy=k;d._show=d.show;d.show=e;d._hide=d.hide;d.hide=h;d._on=d.on;d.on=c;d._drag=d.drag;d.drag=f;d._attr=d.attr;d.attr=b;d._tooltip=d.tooltip;d.tooltip=m;d._data=d.data;d.data=
n;this.pointElemStore.push(d);q.topBorder=a[v](this.topGroup);q.bottom=a[v](this.bottomBorderGroup).attr({"stroke-width":0});q.bottomBorder=a[v](this.bottomBorderGroup);q.frontOuter=a[v](this.slicingWallsFrontGroup).attr({"stroke-width":0});q.backOuter=a[v](this.slicingWallsFrontGroup).attr({"stroke-width":0});q.startSlice=a[v](this.slicingWallsFrontGroup);q.endSlice=a[v](this.slicingWallsFrontGroup);q.frontOuter1=a[v](this.slicingWallsFrontGroup).attr({"stroke-width":0});q.frontOuter._conf={si:u,
isStart:.5};q.frontOuter1._conf={si:u,isStart:.5};q.startSlice._conf={si:u,isStart:0};q.endSlice._conf={si:u,isStart:1};q.backOuter._conf={si:u,isStart:.4};w.push(q.startSlice,q.frontOuter1,q.frontOuter,q.backOuter,q.endSlice);this.isDoughnut&&(q.frontInner=a[v](this.slicingWallsFrontGroup).attr({"stroke-width":0}),q.backInner=a[v](this.slicingWallsFrontGroup).attr({"stroke-width":0}),q.backInner._conf={si:u,isStart:.5},q.frontInner._conf={si:u,isStart:.4},w.push(q.frontInner,q.backInner));u+=1;return d}}()};
pa.prototype.constructor=pa},[3,2,2,"sr4"]]);ja.register("module",["private","modules.renderer.js-zoomline",function(){var za=this,S=za.hcLib,Ja=S.hashify,pa=za.window,ma=pa.document,R=pa.Image,Ma=pa.MouseEvent,Ia=/msie/i.test(pa.navigator.userAgent)&&!pa.opera,ia=S.chartAPI,ta=S.extend2,Ka=S.addEvent,ca=S.pluck,G=S.pluckNumber,Ea=S.getFirstColor,ga=S.graphics.convertColor,Xa=S.bindSelectionEvent,Ya=S.parseUnsafeString,qa=S.componentDispose,na=S.Raphael,Fa=S.toRaphaelColor,Na=S.hasTouch,$a=S.plotEventHandler,
Qa=S.getMouseCoordinate,Ha="rgba(192,192,192,"+(Ia?.002:1E-6)+")",ra=Math,wa=ra.ceil,xa=ra.floor,ua=ra.round,oa=ra.max,La=ra.min,ya=ra.cos,Aa=ra.sin,Ca=pa.parseFloat,Ga=pa.parseInt,sa;ta(S.eventList,{zoomed:"FC_Zoomed",pinned:"FC_Pinned",resetzoomchart:"FC_ResetZoomChart"});ia("zoomline",{standaloneInit:!0,canvasborderthickness:1,defaultDatasetType:"zoomline",applicableDSList:{zoomline:!0},friendlyName:"Zoomable and Panable Multi-series Line Chart",creditLabel:!1,_drawAxis:function(){var a=this.components.yAxis||
[],c,b;c=0;for(b=a.length;c<b;c++)a[c].draw()},_setCategories:function(){var a=this.config,c=this.jsonData,b=this.components.xAxis,k,f,m;f=a.cdmchar;var n=c.categories&&c.categories[0].category||[];if((a.cdm||"string"===typeof n)&&n.split){a=n.split(f);k=[];f=0;for(m=a.length;f<m;f+=1)k.push({label:a[f]});this.config.categories=c.categories[0].category=k}b[0].setAxisPadding(0,0);b[0].setCategory(k||n)},_createDatasets:function(){var a,c,b,k,f,m,n,A,x;f={};var D=this.config;a=this.components;A=this.jsonData;
var q=A.dataset,C=q&&q.length,P=D.cdmchar,v=D.cdm,E=this.defaultDatasetType,h=this.applicableDSList,D=this.components.legend.components.items||[];A=A.categories&&A.categories[0].category;q&&A||this.setChartMessage();this.config.categories=A;A=a.dataset||(a.dataset=[]);x=A.length;for(a=0;a<C;a++){n=q[a];if(v&&n.data&&n.data.split){m=n.data.split(P);k=[];c=0;for(b=m.length;c<b;c++)k.push({value:m[c]});n.data=k}c=n.parentyaxis||"";c=(c=this.isDual&&"s"===c.toLowerCase()?ca(n.renderas,this.sDefaultDatasetType):
ca(n.renderas,E))&&c.toLowerCase();h[c]||(c=E);if(b=ja.get("component",["dataset",c]))void 0===f[c]?f[c]=0:f[c]++,(c=A[a])?(b=(c.JSONData.data||[]).length,k=(n.data||[]).length,b>k&&c.removeData(k,b-k,!1),A[a].JSONData=n,A[a].configure(),A[a]._deleteGridImages&&A[a]._deleteGridImages()):(c=new b,A.push(c),c.chart=this,c.index=a,c.init(n))}if(x>C){f=x-C;c=a;for(C=f+a;c<C;c++)qa.call(A[c]);A.splice(a,f);D.splice(a,f)}},isWithinCanvas:function(a,c){var b=S.getMouseCoordinate(c.get("linkedItems","container"),
a),k=b.chartX,f=b.chartY,m=c.get("config"),n=m.canvasLeft,A=m.canvasTop,x=m.canvasLeft+m.canvasWidth,m=m.canvasHeight+m.canvasTop;b.insideCanvas=!1;b.originalEvent=a;k>n&&k<x&&f>A&&f<m&&(b.insideCanvas=!0);return b},highlightPoint:function(a,c,b,k,f,m){var n=this,A=n.config,x=n.components,D=n.graphics,q=x.paper,C=D.tracker,P=(x=x.dataset[f])&&x.config;f=x&&P.zoomedRadius||0;var v=x&&P.hoverCosmetics,x=v&&v.fill,P=v&&v.borderColor,v=v&&v.borderThickness,E={},E=function(a){S.plotEventHandler.call(this,
n,a)},h=function(a){S.plotEventHandler.call(this,n,a,"dataplotRollover")},B=function(a){S.plotEventHandler.call(this,n,a,"dataplotRollout")};C||(C=D.tracker=q.circle(0,0,0,D.trackerGroup).attr({"clip-rect":A.canvasLeft+","+A.canvasTop+","+A.canvasWidth+","+A.canvasHeight}).click(E).trackTooltip(!0).hover(h,B));k&&C.data("eventArgs",{x:k.x,y:k.y,tooltip:k.tooltip,link:k.link});A.lastHoveredPoint=k;E=Number(a)?{r:f,fill:x,stroke:P,"stroke-width":v}:{r:f,fill:Ha,stroke:Ha,"stroke-width":0};C.attr(E).tooltip(m).transform("t"+
(c+A.canvasLeft)+","+(b+A.canvasTop));k&&n.fireMouseEvent("mouseover",C&&C.node,A.lastMouseEvent)},fireMouseEvent:function(a,c,b){var k;c&&a&&(b||(b={}),b.originalEvent&&(b=b.originalEvent),b.touches&&(b=b.touches[0]),c.dispatchEvent?(Ma?k=new Ma(a,{bubbles:!!b.bubbles,cancelable:!!b.cancelable,clientX:b.clientX||b.pageX&&b.pageX-ma.body.scrollLeft-ma.documentElement.scrollLeft||0,clientY:b.clientY||b.pageY&&b.pageY-ma.body.scrollTop-ma.documentElement.scrollTop||0,screenX:b.screenX||0,screenY:b.screenY||
0,pageX:b.pageX||0,pageY:b.pageY||0}):ma.createEvent&&(k=ma.createEvent("HTMLEvents"),k.initEvent(a,!!b.bubbles,!!b.cancelable)),k.eventName=a,k&&c.dispatchEvent(k)):ma.createEventObject&&c.fireEvent&&(k=ma.createEventObject(),k.eventType=a,k.eventName=a,c.fireEvent("on"+a,k)))},configure:function(){var a,c=this.jsonData.chart||{},b=this.components.colorManager,k=b.getColor("canvasBorderColor"),f;c.animation=0;c.showvalues=0;ia.msline.configure.call(this);f=this.config;a=f.style;ta(f,{useRoundEdges:G(c.useroundedges,
0),animation:!1,zoomType:"x",canvasPadding:G(c.canvaspadding,0),scrollColor:Ea(ca(c.scrollcolor,b.getColor("altHGridColor"))),scrollShowButtons:!!G(c.scrollshowbuttons,1),scrollHeight:G(c.scrollheight,16)||16,scrollBarFlat:G(c.flatscrollbars,0),allowPinMode:G(c.allowpinmode,1),skipOverlapPoints:G(c.skipoverlappoints,1),showToolBarButtonTooltext:G(c.showtoolbarbuttontooltext,1),btnResetChartTooltext:ca(c.btnresetcharttooltext,"Reset Chart"),btnZoomOutTooltext:ca(c.btnzoomouttooltext,"Zoom out one level"),
btnSwitchToZoomModeTooltext:ca(c.btnswitchtozoommodetooltext,"<strong>Switch to Zoom Mode</strong><br/>Select a subset of data to zoom into it for detailed view"),btnSwitchToPinModeTooltext:ca(c.btnswitchtopinmodetooltext,"<strong>Switch to Pin Mode</strong><br/>Select a subset of data and compare with the rest of the view"),pinPaneFill:ga(ca(c.pinpanebgcolor,k),G(c.pinpanebgalpha,15)),zoomPaneFill:ga(ca(c.zoompanebgcolor,"#b9d5f1"),G(c.zoompanebgalpha,30)),zoomPaneStroke:ga(ca(c.zoompanebordercolor,
"#3399ff"),G(c.zoompaneborderalpha,80)),showPeakData:G(c.showpeakdata,0),maxPeakDataLimit:G(c.maxpeakdatalimit,c.maxpeaklimit,null),minPeakDataLimit:G(c.minpeakdatalimit,c.minpeaklimit,null),crossline:{enabled:G(c.showcrossline,1),line:{"stroke-width":G(c.crosslinethickness,1),stroke:Ea(ca(c.crosslinecolor,"#000000")),"stroke-opacity":G(c.crosslinealpha,20)/100},labelEnabled:G(c.showcrosslinelabel,c.showcrossline,1),labelstyle:{fontSize:Ca(c.crosslinelabelsize)?Ca(c.crosslinelabelsize)+"px":a.outCanfontSize,
fontFamily:ca(c.crosslinelabelfont,a.outCanfontFamily)},valueEnabled:G(c.showcrosslinevalues,c.showcrossline,1),valuestyle:{fontSize:Ca(c.crosslinevaluesize)?Ca(c.crosslinevaluesize)+"px":a.inCanfontSize,fontFamily:ca(c.crosslinevaluefont,a.inCanvasStyle.fontFamily)}},useCrossline:G(c.usecrossline,1),tooltipSepChar:ca(c.tooltipsepchar,", "),showTerminalValidData:G(c.showterminalvaliddata,0),cdmchar:ca(c.dataseparator,"|"),cdm:G(c.compactdatamode,0)})},getValuePixel:function(a){var c=this.config.viewPortConfig;
return c.ddsi+xa(a/c.ppp)},__toolbar:function(){var a,c,b,k,f=this,m=f.components,n=m.tb=new (ja.register("component",["toolbox","toolbox"])),A=n.getDefaultConfiguration(),x,D;n.init({iAPI:{chart:f},graphics:f.graphics,chart:f,components:m});a=m.toolBoxAPI||n.getAPIInstances(n.ALIGNMENT_HORIZONTAL);c=a.SymbolStore;b=a.ComponentGroup;k=a.Toolbar;x=a.Symbol;D=a.Scroller;n.graphics={};return{reInit:function(){n.init({iAPI:{chart:f},graphics:f.graphics,chart:f,components:m})},addSymbol:function(a,b,c,
f){a=new x(a);c&&f.setConfiguaration({buttons:ta(ta({},A),c)});b.tooltext=c.tooltip;b&&a.attachEventHandlers(b);f.addSymbol(a);return a},addScroll:function(a,b){var c=new D(a);b&&c.attachEventHandlers(b);return c},addComponentGroup:function(a,c){var f;f=new b;f.setConfiguaration({group:{fill:c?c.fill:ga("EBEBEB",0),borderThickness:c?G(c.borderThickness,0):0}});return f},addToolBox:function(a){var b,c=new k;for(b=0;b<a.length;b+=1)c.addComponent(a[b]);return c},setDrawingArea:function(a,b){a.drawingArea=
b;return a},draw:function(a){var b,c,f;for(b=0;b<a.length;b+=1)c=a[b],f=c.drawingArea,c.draw(f.x,f.y)},registerSymbol:function(a,b){c.register(a,b)},getLogicalSpace:function(a){return a.getLogicalSpace()},getNode:function(a){return a.node}}},__preDraw:function(){var a,c,b,k,f,m,n,A,x,D,q=this,C=q.components,P=C.paper,v=q.graphics;c=v.imageContainer;var E=q.config,h=E.canvasLeft,B=E.canvasWidth;a=q.jsonData.chart;var da=E.cdm;b=C.xAxis[0];var L=E.viewPortConfig,T=q.components.canvas.config,V=oa(T.canvasPadding,
T.canvasPaddingLeft,T.canvasPaddingRight);D=C.yAxis[0];A=v.datasetGroup;var T=E.canvasHeight,d=E.canvasTop,H=q.jsonData.chart,H=E.borderWidth||(E.borderWidth=G(H.showborder,1)?G(H.borderthickness,1):0),g=E.allowPinMode,R=E.crossline,L=b.getCategoryLen(),l=Ga(G(a.displaystartindex,1),10)-1,e=Ga(G(a.displayendindex,L||2),10)-1,S=0,ca=C.dataset,t=ca.length,C=v.crossline;E.updateAnimDuration=500;c.transform("t"+h+","+d);c.attr({"clip-rect":h+","+d+","+B+","+T});E.status="zoom";E.maxZoomLimit=G(a.maxzoomlimit,
1E3);E.viewPortHistory=[];1>(c=G(a.pixelsperpoint,15))&&(c=1);(b=G(a.pixelsperlabel,a.xaxisminlabelwidth,b.getAxisConfig("labels").rotation?20:60))<c&&(b=c);(0>l||l>=(L-1||1))&&(l=0);(e<=l||e>(L-1||1))&&(e=L-1||1);L=E.viewPortConfig=ta(E.viewPortConfig,{amrd:G(a.anchorminrenderdistance,20),nvl:G(a.numvisiblelabels,0),cdm:da,oppp:c,oppl:b,dsi:l,dei:e,vdl:e-l,clen:L,offset:0,step:1,llen:0,alen:0,ddsi:l,ddei:e,ppc:0});if(L.clen){for(;t--;)a=ca[t].config,S=oa(S,a.drawanchors&&(a.anchorradius||0)+(Number(a.anchorborderthickness)||
0)||0);E.overFlowingMarkerWidth=S;V=E.canvasPadding=oa(S,V);E._prezoomed=L.dei-L.dsi<L.clen-1;k=E._visw=E.canvasWidth-2*V;f=E._visx=E.canvasLeft+V;E._visout=-(E.height+T+1E3);E._ypvr=D&&D.getPVR()||0;a=E._yminValue=D.getLimit().min;m=E._ymin=D.getPixel(a);D=A.attr("clip-rect",[f-S,d,k+2*S,T]);v.scroll||(v.scroll=P.group("scroll").insertAfter(v.datasetGroup));g&&(A=na.crispBound(0,d-m,0,T,H),n=E["clip-pinrect"]=[A.x,d,A.width,A.height],x=(v.zoompin=P.group("zoompin")).insertBefore(D).transform(E._pingrouptransform=
["T",f,m]).hide(),v.pinrect=P.rect(0,d-m,k,T,x).attr({"stroke-width":0,stroke:"none",fill:E.pinPaneFill,"shape-rendering":"crisp",ishot:!0}),v.pintracker=P.rect(v.trackerGroup).attr({transform:x.transform(),x:0,y:d-m,width:0,height:T,stroke:"none",fill:Ha,ishot:!0,cursor:na.svg&&"ew-resize"||"e-resize"}).hide().drag(function(a){var b=f+a+this.__pindragdelta,c=this.__pinboundleft,d=this.__pinboundright,e=this.data("cliprect").slice(0);b<c?b=c:b>d&&(b=d);x.transform(["T",b,m]);v.pintracker.transform(x.transform());
na.svg||(e[0]=e[0]+b-f-this.__pindragdelta,x.attr("clip-rect",e));this.__pindragoffset=a},function(){this.__pinboundleft=0-n[0]+f+h;this.__pinboundright=this.__pinboundleft+k-n[2];this.data("cliprect",x.attr("clip-rect"));x._.clipispath=!0},function(){x._.clipispath=!1;this.__pindragdelta=this.__pindragoffset;delete this.__pindragoffset;delete this.__pinboundleft;delete this.__pinboundright}));H++;A=na.crispBound(h-H,d+T+H,B+H+H,E.scrollHeight,H);H--;Xa(q,{attr:{stroke:E.zoomPaneStroke,fill:E.zoomPaneFill,
strokeWidth:0},selectionStart:function(){},selectionEnd:function(a){var b=a.selectionLeft-h;a=b+a.selectionWidth;v.crossline&&v.crossline.hide();q[E.viewPortConfig.pinned?"pinRangePixels":"zoomRangePixels"](b,a)}});R&&0!==R.enabled&&1===E.useCrossline?(C||(C=v.crossline=new sa),C.configure(q,R)):(R&&(R.enabled=0),C&&C.hide())}},resetZoom:function(){var a=this.config.viewPortHistory,c=a[0];if(!a.length)return!1;a.length=0;this.zoomTo(c.dsi,c.dei,c)&&za.raiseEvent("zoomReset",this._zoomargs,this.chartInstance,
[this.chartInstance.id]);return!0},eiMethods:{zoomOut:function(){var a;if(a=this.apiInstance)return a.zoomOut&&a.zoomOut()},zoomTo:function(a,c){var b;if(b=this.apiInstance)return b.zoomRange&&b.zoomRange(a,c)},resetChart:function(){var a;if(a=this.apiInstance)a.pinRangePixels&&a.pinRangePixels(),a.resetZoom&&a.resetZoom()},setZoomMode:function(a){var c;(c=this.apiInstance)&&c.activatePin&&c.activatePin(!a)},getViewStartIndex:function(){var a;if(this.apiInstance&&(a=this.apiInstance.config.viewPortConfig))return a.ddsi},
getViewEndIndex:function(){var a,c;if(this.apiInstance&&(a=this.apiInstance.config.viewPortConfig))return c=a.ddei-1,(c>=a.clen?a.clen:c)-1}},zoomOut:function(){var a,c,b=this.config;c=b.viewPortHistory;var k,f,m;a=c.pop();c=c[0]||b.viewPortConfig;a?(k=a.dsi,f=a.dei):b._prezoomed&&(k=0,f=c.clen-1);(m=this.zoomTo(k,f,a))&&za.raiseEvent("zoomedout",m,this.chartInstance);return!0},zoomRangePixels:function(a,c){var b=this.config,k=b.viewPortHistory,b=b.viewPortConfig,f=b.ppp,m=b.ddsi,n;k.push(b);(n=this.zoomTo(m+
xa(a/f),m+xa(c/f)))?za.raiseEvent("zoomedin",n,this.chartInstance):k.pop()},zoomRange:function(a,c){var b,k,f=this.config,m=f.viewPortConfig;k=this.components.xAxis[0];var n=f.viewPortHistory,A;n.push(m);b=k.getPixel(a);k=k.getPixel(c);m.x=b;m.scaleX=f.canvasWidth/(b-k);(A=this.zoomTo(+a,+c))?za.raiseEvent("zoomedin",A,this.chartInstance):n.pop()},zoomTo:function(a,c,b){var k,f;k=this.config;var m=this.components,n=k.viewPortConfig,A=k.canvasHeight;f=k.canvasLeft;var x=k.canvasTop,D=k.canvasBottom,
q=k.viewPortHistory,C=n.clen,P=this.components.xAxis[0];0>a&&(a=0);a>=C-1&&(a=C-1);c<=a&&(c=a+1);c>C-1&&(c=C-1);if(a===c||a===n.dsi&&c===n.dei)return!1;this.pinRangePixels();n=ta({},n);n.dsi=a;n.dei=c;n=k.viewPortConfig=n;b?this.updateVisual(b.x,b.y,b.scaleX,b.scaleY):(b=P.getPixel(a),k=P.getPixel(c),f=this.getOriginalPositions(b-f,x,k-f,D-x),this.zoomSelection(f[0],0,f[2],A));m.scrollBar.node.attr({"scroll-ratio":n.vdl/(C-!!C),"scroll-position":[n.dsi/(C-n.vdl-1),!0]});m={level:q.length+1,startIndex:a,
startLabel:P.getLabel(a).label,endIndex:c,endLabel:P.getLabel(c).label};za.raiseEvent("zoomed",m,this.chartInstance,[this.chartInstance.id,a,c,m.startLabel,m.endLabel,m.level]);return m},activatePin:function(a){var c=this.config.viewPortConfig,b=this.components.tb.graphics.pinButton;if(c.pinned^(a=!!a))return a||this.pinRangePixels(),za.raiseEvent("zoomModeChanged",{pinModeActive:a},this.chartInstance,[]),this.updateButtonVisual(b.node,a?"pressed":"enable"),c.pinned=a},updateButtonVisual:function(a,
c){return a.attr({disable:{config:{hover:{fill:"#FFFFFF","stroke-width":1,stroke:"#E3E3E3",cursor:"default"},normal:{fill:"#FFFFFF",stroke:"#E3E3E3","stroke-width":1,cursor:"default"},disable:{fill:"#FFFFFF","stroke-width":1,stroke:"#E3E3E3","stroke-opacity":1,cursor:"default"},pressed:{fill:"#FFFFFF","stroke-width":1,stroke:"#E3E3E3",cursor:"default"}},"button-disabled":!1,stroke:"#E3E3E3","stroke-opacity":1},enable:{config:{hover:{fill:"#FFFFFF","stroke-width":1,stroke:"#aaaaaa",cursor:"pointer"},
normal:{fill:"#FFFFFF",stroke:"#C2C2C2","stroke-width":1,cursor:"pointer"},disable:{fill:"#FFFFFF","stroke-width":1,stroke:"#E3E3E3","stroke-opacity":1,cursor:"pointer"},pressed:{fill:"#EFEFEF","stroke-width":1,stroke:"#C2C2C2",cursor:"pointer"}},"button-disabled":!1,fill:["#FFFFFF","#FFFFFF","#FFFFFF","#FFFFFF",!0],stroke:"#C2C2C2","stroke-opacity":1},pressed:{config:{pressed:{fill:["#FFFFFF","#FFFFFF","#FFFFFF","#FFFFFF",!0]}},fill:["#FFFFFF","#FFFFFF","#FFFFFF","#FFFFFF",!0],stroke:"#E3E3E3"}}[c])},
pinRangePixels:function(a,c){var b,k=this.components,f=k.paper,m=this.graphics,n=this.config,A=n.canvasLeft,x=n.viewPortConfig,D=m.zoompin;b=m.pinrect;var q=n["clip-pinrect"],C=n._pingrouptransform,k=k.dataset,P=c-a,v,E,h,m=m.pintracker;if(x&&D&&b){if(a===c)return D.hide(),m.hide(),x.pinned=!1;for(h=k.length;h--;)v=k[h],b=v.graphics,E=b.pinline,E||(E=b.pinline=f.path(D)),E.attr({path:b.lineElement.attrs.path,transform:["T",-n._visx,-n._ymin]}).attr(v.config.pin);q[0]=a+A;q[2]=P;D.attr({"clip-rect":q,
transform:C}).show();m.__pindragdelta=0;m.show().attr({transform:C,x:a,width:P});this.getValuePixel(a);this.getValuePixel(c);return x.pinned=!0}},_createLayers:function(){var a,c=this.components.paper;ia.scatter._createLayers.call(this);a=this.graphics;a.imageContainer=c.group("dataset-orphan",a.dataSetGroup);this.__preDraw();this.toogleDragPan(!0)},getValue:function(a){var c=this.config,b=this.components,k=c.viewPortConfig;a=this.getOriginalPositions(a.x,a.y,a.x,a.y);var f=b.xAxis[0].config.axisRange,
b=b.yAxis[0].config.axisRange,m=f.min,n=b.max;return{x:m+(a[0]-c.canvasLeft)/(c.canvasWidth*k.scaleX/(f.max-m)),y:n-(a[1]-c.canvasTop)/(c.canvasHeight*k.scaleY/(n-b.min))}},getOriginalPositions:function(a,c,b,k){var f=this.config,m=f.viewPortConfig,n=m.scaleX,A=m.scaleY,x=m.x,m=m.y,D=La(a,b);a=oa(a,b);b=La(c,k);c=oa(c,k);a=a>f.canvasWidth?f.canvasWidth:a;c=c>f.canvasHeight?f.canvasHeight:c;D=0>D?0:D;b=0>b?0:b;return[x+D/n,m+b/A,(a-D)/n,(c-b)/A]},zoomSelection:function(a,c,b,k){var f=this.config;b&&
k&&(b=Math.abs(f.canvasWidth/b),k=Math.abs(f.canvasHeight/k),this.updateVisual(a,c,b,k))},updateVisual:function(a,c,b,k,f){var m=this.config,n=m.viewPortConfig,A=m.canvasWidth,x=m.canvasHeight,D=m.viewPortHistory.slice(-1)[0]||n,m=m.maxZoomLimit;n.x=isNaN(a)?a=D.x:a;n.y=isNaN(c)?c=D.y:c;n.scaleX=b||(b=D.scaleX);n.scaleY=k||(k=D.scaleY);b>m&&(n.x=La(a,A-A/m),n.scaleX=m);k>m&&(n.y=La(c,x-x/m),n.scaleY=m);this.updateManager(f)},toogleDragPan:function(a){var c=this.config.viewPortConfig,b=c.status;a&&
(c.status="zoom"===b?"pan":"zoom")},resize:function(){var a=this.config,c=this.graphics,b=this.components.canvas,k=b.graphics,f=k.canvasBorderElement,k=k.canvasElement,b=b.config.canvasBorderThickness,m=b/2,n=a.canvasHeight-=b,A=a.canvasWidth-=2*b,x=a.canvasLeft+=b;a.canvasBottom-=b;a.canvasRight-=b;k?k.attr({x:x,y:a.canvasTop,height:n,width:A}):this.drawCanvas();f&&f.attr({x:x-m,y:a.canvasTop-m,height:n+b,width:A+b,"stroke-width":b});c.imageContainer.attr({"clip-rect":a.canvasLeft+","+a.canvasTop+
","+a.canvasWidth+","+a.canvasHeight}).transform("t"+a.canvasLeft+","+a.canvasTop);c.trackerElem.attr({x:a.canvasLeft,y:a.canvasTop,width:a.canvasWidth,height:a.canvasHeight});c.tracker&&c.tracker.attr({"clip-rect":a.canvasLeft+","+a.canvasTop+","+a.canvasWidth+","+a.canvasHeight})},updateManager:function(a){var c,b;b=this.components;var k=b.dataset,f=k.length;c=this.config;var m=c.viewPortConfig,n=c._ypvr,A=c._visw,x=this.components.xAxis[0],D=function(){return x.getPixel.apply(x,arguments)},q=x.getAxisConfig("labels").style,
C,P,v,E,h,B=this.updateButtonVisual,G=b.tb.graphics,L=G.zoomOutButton,G=G.resetButton,T=c.viewPortHistory;if(c.legendClicked)for(a=0;a<f;a+=1)k[a].draw();else{!m&&(m=c.viewPortConfig);C=m.oppp;h=v=m.nvl;P=m.dsi;v=m.dei;P=m.vdl=v-P;v=m.ppl=h?A/h:m.oppl;A=m.step=(E=m.ppp=A/P)<C?wa(C/E):1;q=m.lskip=wa(oa(v,Ca(q.lineHeight))/E/A);void 0!==a?(C=(m.clen-P-1)*a,m.offset=(C-(C=Ga(C)))*E,P=C+P):(C=m.dsi,P=m.dei,m.offset=0);E=m.norm=C%A;m.ddsi=C-=E;m.ddei=P=P+2*A-E;m.pvr=n;m._ymin=c._ymin;m._yminValue=c._yminValue;
m.x=(D(C)-D(x.getLimit().min)+m.offset)/m.scaleX;P-C>x.getCategoryLen()?m.scaleX=1:m.scaleX=x.getCategoryLen()/Math.abs(P-C-A-.9);void 0!==a&&b.scrollBar.node&&b.scrollBar.node.attr({"scroll-position":m._pos=a});b=x._getVisibleConfig();b=Math.ceil((b.maxValue-b.minValue+1)/h);c=c.viewPortConfig&&c.viewPortConfig.scaleX;c=Math.max(Math.round(x.getAxisConfig("labelStep")/c),h?b:q*A);x.setLabelConfig({step:c});c=x.getAxisConfig("animateAxis");h=x.getAxisConfig("drawAxisName");a&&x.setAxisConfig({animateAxis:!1,
drawAxisName:!1});x.draw();x.setAxisConfig({animateAxis:c,drawAxisName:h});for(a=0;a<f;a+=1)k[a].draw();B(L.node,m.vdl===m.clen-1?"disable":"enable");B(G.node,0<T.length?"enable":"disable");pa.FC_DEV_ENVIRONMENT&&pa.jQuery&&(ja["debugger"].enable()?(this.debug=this.debug||(pa.jQuery("#fc-zoominfo").length||pa.jQuery("body").append('<pre id="fc-zoominfo">'),pa.jQuery("#fc-zoominfo").css({position:"absolute",left:"10px",top:"0","pointer-events":"none",opacity:.7,width:"250px",zIndex:"999",border:"1px solid #cccccc",
"box-shadow":"1px 1px 3px #cccccc",background:"#ffffff"})),this.debug.text(JSON.stringify(m,0,2))):(this.debug&&pa.jQuery("#fc-zoominfo").remove(),delete this.debug))}},_drawDataset:function(){ia.zoomline.updateManager.call(this)},getParsedLabel:function(a){var c=this.xlabels;return c.parsed[a]||(c.parsed[a]=Ya(c.data[a]||""))},_createToolBox:function(){var a,c,b,k,f,m,n,A=this,x=A.config;n=x.allowPinMode;k=A.components;var D=x.showToolBarButtonTooltext;a=k.chartMenuBar;a&&a.drawn||(ia.scrollcolumn2d._createToolBox.call(A),
a=k.tb,c=a.graphics||(a.graphics={}),b=k.toolBoxAPI||a.getAPIInstances(a.ALIGNMENT_HORIZONTAL),b=b.Symbol,k=k.chartMenuBar.componentGroups[0],f=c.zoomOutButton=(new b("zoomOutIcon",void 0,a.idCount++,a.pId)).attachEventHandlers({click:function(){A.zoomOut()},tooltext:D&&x.btnZoomOutTooltext||""}),m=c.resetButton=(new b("resetIcon",void 0,a.idCount++,a.pId)).attachEventHandlers({click:function(){A.resetZoom()},tooltext:D&&x.btnResetChartTooltext||""}),n&&(n=c.pinButton=(new b("pinModeIcon",void 0,
a.idCount++,a.pId)).attachEventHandlers({click:function(){A.activatePin(!x.viewPortConfig.pinned)},tooltext:D&&x.btnSwitchToPinModeTooltext||""}),k.addSymbol(n,!0)),k.addSymbol(m,!0),k.addSymbol(f,!0))},_scrollBar:ia.scrollcolumn2d,_manageScrollerPosition:ia.scrollcolumn2d,draw:function(){var a,c,b,k,f,m,n,A,x,D,q=this,C=q.config,G=q.graphics||(q.graphics={});m=q.components;a=q.jsonData;k=a.dataset;var v=a.categories&&a.categories[0].category,E;ia.msline.draw.call(q);n=C.canvasLeft;A=C.canvasTop;
x=C.canvasHeight;D=C.canvasWidth;a=C.borderWidth;c=C.useRoundEdges;b=C.viewPortConfig;(E=G.toolboxParentGroup)||(E=G.toolboxParentGroup=m.paper.group("toolbarParentGroup",G.parentGroup));k&&v&&(a++,k=na.crispBound(n-a,A+x+a,D+a+a,C.scrollHeight,a),a--,m=(f=m.scrollBar)&&f.node,f.draw(k.x+(c&&-1||a%2),k.y-(c&&4||2),{isHorizontal:!0,width:k.width-(!c&&2||0),height:k.height,showButtons:C.scrollShowButtons,scrollRatio:b.vdl/(b.clen-!!b.clen),scrollPosition:[b.dsi/(b.clen-b.vdl-1),!1],r:c&&2||0,parentLayer:E.insertBefore(G.datalabelsGroup)}),
!m&&function(){var a;na.eve.on("raphael.scroll.start."+f.node.id,function(b){a=b;q.graphics.crossline&&q.graphics.crossline.disable(!0);za.raiseEvent("scrollstart",{scrollPosition:b},q.chartInstance)});na.eve.on("raphael.scroll.end."+f.node.id,function(b){q.graphics.crossline&&q.graphics.crossline.disable(!1);za.raiseEvent("scrollend",{prevScrollPosition:a,scrollPosition:b},q.chartInstance)})}())}},ia.msline,{showValues:0,zeroplanethickness:1,zeroplanealpha:40,showzeroplaneontop:0});ia("zoomlinedy",
{standaloneInit:!0,defaultDatasetType:"zoomline",applicableDSList:{zoomline:!0},creditLabel:!1,friendlyName:"Zoomable and Panable Multi-series Dual-axis Line Chart",_spaceManager:ia.msdybasecartesian._spaceManager,_setAxisLimits:ia.msdybasecartesian._setAxisLimits,_createAxes:ia.msdybasecartesian._createAxes,_feedAxesRawData:ia.msdybasecartesian._feedAxesRawData},ia.zoomline,{isdual:!0});ja.register("component",["dataset","zoomline",{_setConfigure:function(){var a=this.config,c=this.chart.jsonData.chart,
b=this.JSONData;a.drawanchors=G(c.drawanchors,c.showanchors,1);a.anchorradius=G(b.anchorradius,c.anchorradius,a.linethickness+2);this.__base__._setConfigure.apply(this,arguments)},configure:function(){var a,c,b={};a=this.chart.jsonData.chart;a.animation=0;a.showvalues=G(a.showvalues,0);this.__base__.configure.call(this);c=this.config;a=c.linethickness+G(a.pinlinethicknessdelta,1);b["stroke-width"]=0<a&&a||0;b["stroke-dasharray"]=[3,2];b.stroke=S.hashify(c.linecolor);b["stroke-opacity"]=c.alpha/100;
b["stroke-linejoin"]=c["stroke-linejoin"]="round";b["stroke-linecap"]=c["stroke-linecap"]="round";c.pin=b;c.animation=!1;c.transposeanimduration=0},draw:function(){var a,c,b=!1,k=!1,f=this,m=f.JSONData,n=f.chart,A=n.components,x=f.config,D=f.index||f.positionIndex,q=n.config,C=n.jsonData.chart,P=f.components,v=P.data,E=v.length,h,B=A.paper,da=A.xAxis[0],L=f.yAxis,T,V,d=n.graphics,H=d.datalabelsGroup,g=S.parseUnsafeString,ga=S.getValidValue,l,e,la,ia,t,u,r,y,p,w,ma=x.linethickness,ja=f.graphics.container,
na=n.graphics.trackerGroup,pa=function(a){$a.call(this,n,a)},qa=function(a,b){return function(c){b&&f._hoverPlotAnchor(a,"DataPlotRollOver",C);$a.call(this,n,c,"DataPlotRollOver")}},ta=function(a,b){return function(c){b&&f._hoverPlotAnchor(a,"DataPlotRollOut",C);$a.call(this,n,c,"DataPlotRollOut")}},sa=q.viewPortConfig,Q=q.showtooltip,ua,ra=d.datasetGroup,Ba,xa=x.shadow,I,F=f.graphics.dataLabelContainer,z={},K,M,J=n.is3D,W=x.use3dlineshift,Z,N,O,ya=L.getAxisBase(),ha=L.yBasePos=L.getAxisPosition(ya),
ea=da.getAxisPosition(0),Aa=da.getAxisPosition(1)-ea,za,U=J?10:0,aa=J&&W?10:0,fa=[oa(0,q.canvasLeft-U),oa(0,q.canvasTop-aa),oa(1,q.canvasWidth+2*U),oa(1,q.canvasHeight+aa)],X=[oa(0,q.canvasLeft-U),oa(0,q.canvasTop-aa),1,oa(1,q.canvasHeight+2*aa)],Ca={},Ea=n.hasScroll||!1,ka,wa=x.lineDashStyle,Ga={color:x.linecolor,alpha:x.alpha};[Fa(Ga),wa].join(":");var Ia,Ka,Ja,Va=f.graphics.lineElement,Wa=f.visible,Na,Ma,va=f.pool||(f.pool={element:[]}),ba={},Y={},Xa={},Ya=x.anchorradius,jb,fb=[],kb,Da,bb,cb,gb,
hb,rb=q.showTerminalValidData,Za=q.viewPortConfig,sb=q.showPeakData,lb=q.maxPeakDataLimit,mb=q.minPeakDataLimit,nb=G(q.useCrossline,0),Oa=Za.step,ib=da.getPixel(Za.step)-ea<Za.amrd,ob=function(a,b){var c=a.graphics;M=a.config;t=M.setValue;ia=M.setLink;Na=M.x||b;N=ga(g(ca(M.setLevelTooltext,m.plottooltext,C.plottooltext)));Z=M.showValue;z=M.anchorProps;I=z.shadow;r=M.displayValue;Ma=M.dip||0;a||(a=v[b]={graphics:{}});Ja={color:M.color,alpha:M.alpha};O=M.dashStyle;T=M.xPos||da.getAxisPosition(Na)-U;
V=f.visible?L.getAxisPosition(t)+aa:ha;Ba=M.hoverEffects;z.isAnchorHoverRadius=Ba.anchorRadius;jb=da.getLabel(b);l=nb?"":M.toolText+(N?"":M.toolTipValue);u={index:b,link:ia,value:t,displayValue:r,categoryLabel:jb,toolText:l,id:x.userID,datasetIndex:D,datasetName:m.seriesname,visible:Wa};null===M.setValue||ib||(z.imageUrl?(K=new R,K.onload=f._onAnchorImageLoad(f,b,u,T,V),K.onerror=f._onErrorSetter(T,V,b,f),K.src=z.imageUrl):(e=c.element,e||(e=va.element&&va.element.length?c.element=va.element.shift():
c.element=B.polypath(ja.anchorGroup)),e.attr({polypath:[z.symbol[1]||2,T,V,z.radius,z.startAngle,Ma],fill:Fa({color:z.bgColor,alpha:z.bgAlpha}),stroke:Fa({color:z.borderColor,alpha:z.borderAlpha}),"stroke-width":z.borderThickness,visibility:z.radius?Wa:"hidden"}).shadow(I,ja.anchorShadowGroup).data("anchorRadius",z.radius).data("anchorHoverRadius",Ba.anchorRadius).data("setRolloverAttr",w).data("setRolloutAttr",p),e[t||0===t?"show":"hide"]()),Ba.enabled&&(w={polypath:[Ba.anchorSides||2,T,V,Ba.anchorRadius,
Ba.startAngle,Ba.dip],fill:Fa({color:Ba.anchorColor,alpha:Ba.anchorBgAlpha}),stroke:Fa({color:Ba.anchorBorderColor,alpha:Ba.anchorBorderAlpha}),"stroke-width":Ba.anchorBorderThickness},p={polypath:[z.sides,T,V,z.radius,z.startAngle,Ma],fill:Fa({color:z.bgColor,alpha:z.bgAlpha}),stroke:Fa({color:z.borderColor,alpha:z.borderAlpha}),"stroke-width":z.borderThickness},e&&e.data("anchorRadius",z.radius).data("anchorHoverRadius",Ba.anchorRadius).data("setRolloverAttr",w).data("setRolloutAttr",p)),Ya=oa(z.radius,
Ba&&Ba.anchorRadius||0),ua={cx:T,cy:V,r:Ya,cursor:ia?"pointer":"",stroke:Ha,"stroke-width":z.borderThickness,fill:Ha,ishot:!0,visibility:Wa},z.imageUrl||!ia&&!Q||(la=c.hotElement,la||(la=va.hotElement&&va.hotElement.length?c.hotElement=va.hotElement.shift():c.hotElement=B.circle(na)),la.show().attr(ua),(la||e).data("eventArgs",u).data("groupId",void 0).click(pa).tooltip(l),Ba.enabled&&(la||e).hover(qa(a,Ba.enabled),ta(a,Ba.enabled))));a._xPos=T;a._yPos=V;[Fa(Ja||Ga),O||wa].join(":");Xa=f.getLinePath([a],
Xa);Ia=Fa(Ja||Ga);Ka=O||wa;ca(M.setColor,M.setAlpha,M.setDashed);[Ia,Ka].join(":");Z&&!z.imageUrl&&f.drawLabel(b);fb.push(a)},tb=function(a,b){var c=a&&a.length,d=a.slice().sort(function(a,b){return a.config.setValue-b.config.setValue}),f=d&&d.pop().config.setValue,g=d.length&&d.shift().config.setValue||f,d=0;if(f>lb||g<mb)for(;d<c;){e=a[d];f=e.config.setValue;if(f>lb||f<mb)f=b+d,ob(e,f);d+=1}},db=function(b,c){--b;c+=1;var d;for(h=b;h<c;h+=1)for(d in a=v[h]&&v[h].graphics||{},v[h]&&(v[h].config.isRemoving=
!0),a)va[d]||(va[d]=[]),a[d]&&(va[d].push(a[d].hide()),a[d]=void 0)},eb=sa.ddsi||0,Pa=sa.ddei||E,Sa=x._oldStartIndex,Ta=x._oldEndIndex,ub=x._oldStep,pb=P.removeDataArr,vb=pb&&pb.length;ra.line=ra.line||B.group("line",ra);ra.lineConnector=ra.lineConnector||B.group("line-connector",ra);ja||(ja=f.graphics.container={lineShadowGroup:B.group("connector-shadow",ra.line),anchorShadowGroup:B.group("anchor-shadow",ra.lineConnector),lineGroup:B.group("line",ra.line),anchorGroup:B.group("anchors",ra.lineConnector)},
ja.lineGroup.trackTooltip(!0),Wa||(ja.lineShadowGroup.hide(),ja.anchorShadowGroup.hide(),ja.lineGroup.hide(),ja.anchorGroup.hide()));na||(na=n.graphics.trackerContainer=B.group("line-hot",na).toBack(),Wa||na.hide());v||(v=f.components.data=[]);F||(F=f.graphics.dataLabelContainer=f.graphics.dataLabelContainer||B.group("datalabel",H),Wa||F.hide());za=Aa*E;ib&&!x._oldHideAnchors?db(Sa,Ta):Oa!==ub?db(Sa,Ta):(eb>Sa&&db(Sa,eb>Ta?Ta:eb),Pa<Ta&&db(Pa<Sa?Sa:Pa,Ta),(eb<Sa||Pa>Ta)&&db(Sa,Ta));x._oldHideAnchors=
ib;x._oldEndIndex=Pa;x._oldStep=Oa;f.setVisibility(Wa);for(h=x._oldStartIndex=eb;h<=Pa;h+=Oa){y=v[h]||{};M=y.config||{};M.isRemoving=!1;t=M.setValue||null;bb=h;if(rb)if(0===h&&null===t){kb=0;for(Da=c=h;Da<E;)if(null!==v[Da].config.setValue||b?b=!0:Da++,null===v[c].config.setValue&&!k&&c<=E?(c+=Oa,kb++):k=!0,b&&k){b=k=!1;break}0!==Da%Oa&&(M=v[Da].config,bb=Da)}else if(h>=E&&null===t){for(Da=c=h;0<Da&&(void 0!==v[Da]||b?b=!0:Da--,void 0===v[c]&&!k&&0<=c?c-=Oa:k=!0,!b||!k););0!==Da%Oa&&(M=v[Da].config,
bb=Da)}if(y=v[bb])ob(y,bb),sb&&1<Oa&&(cb=La(h+1,Pa),hb=La(cb+Oa,Pa),gb=hb===Pa?v.slice(cb):v.slice(cb,hb),gb.length&&tb(gb,cb))}Y=f.getLinePath(fb,{});ba=f.getLinePath(fb,ba);x.lastPath=Y;Va||(Va=va.lineElement&&va.lineElement.length?f.graphics.lineElement=va.lineElement.shift():f.graphics.lineElement=B.path(ja.lineGroup));nb||Va.tooltipListenerAttached||(Va.tooltipListenerAttached=!0,Va.mousemove(function(a){var b=q._visx,c=Za.step,d=Za.ppp*c,b=Qa(n.linkedItems.container,a).chartX-b,e;a=q.tooltipSepChar;
b=(b+=d/2+Za.offset)-b%d;e=(e=n.getValuePixel(b))+e%c;c=da.getLabel(e).label+a+f.components.data[e].config.formatedVal;c=x.seriesname&&x.seriesname+a+c||c;Va.tooltip(0===q.crossline.enabled?c:!1)}));Va.attr({path:Y.getPathArr(),"stroke-dasharray":wa,"stroke-width":ma,stroke:Fa(Ga),"stroke-linecap":"round","stroke-linejoin":2<=ma?"round":"miter"}).shadow(xa,ja.lineShadowGroup);Ea&&(ka=Ca.startPercent,fa[2]=za+X[0],1===ka&&(X[0]=fa[2],fa[0]=0));fa[3]+=aa;f.drawn=!0;vb&&f.remove()},setVisibility:function(a,
c){var b=this.chart,k=this.graphics&&this.graphics.container,b=b.graphics&&b.graphics.trackerGroup,f=this.graphics&&this.graphics.dataLabelContainer,m=a?"show":"hide";k.lineGroup[m]();k.anchorGroup[m]();k.anchorShadowGroup[m]();k.lineShadowGroup[m]();b[m]();f[m]();c&&this.transposeLimits(a)},transposeLimits:function(a){var c=this.chart,b=c.config,k=this.yAxis;c._chartAnimation();this.visible=a;this._conatinerHidden=!a;c._setAxisLimits();k.draw();b.legendClicked=!0;c._drawDataset();delete b.legendClicked},
hide:function(){this.setVisibility(!1,!0)},show:function(){this.setVisibility(!0,!0)}},"Line"]);sa=function(){};sa.prototype.configure=function(a,c){var b,k,f,m={},n=this,A=a.components,x=A.numberFormatter,D=A.paper,q=a.config;b=a.graphics;k=this.left=q._visx;f=this.top=q.canvasTop;var C=this.height=q.canvasHeight,G=this._visout=q._visout,v=this.plots=a.components.dataset,E=b.datalabelsGroup,h,B,R=c.labelstyle,L=c.valuestyle,T=A.yAxis[0],V=T.getLimit(),d=A.yAxis[1],H=d&&d.getLimit();B=this.tracker;
var A=this.labels,g=this.positionLabel;h=a.get("linkedItems");var S=h.container,l=h.eventListeners||(h.eventListeners=[]);n.width=q._visw;h=this.group;h||(h=this.group=D.group("crossline-labels",E),this.container=S);h.attr({transform:["T",k,q._ymin]}).css(L);B||(B=n.tracker=S,l.push(Ka(S,"touchstart mousemove",function(b){var c=n.onMouseMove,d=n.onMouseOut;a.isWithinCanvas(b,a).insideCanvas?c.call(n,b):d.call(n,b)},n)),l.push(Ka(S,"mousedown",function(){n.onMouseDown()},n)),l.push(Ka(S,"mouseup",
function(){n.onMouseUp()},n)),l.push(Ka(S,"mouseout",function(){n.onMouseOut()},n)));B=this.line;B||(B=this.line=D.path(E).toBack());B.attr(ta({path:["M",k,f,"l",0,C]},c.line));A||(A=this.labels=c.valueEnabled&&D.set());c.labelEnabled?(m.x=G,m.y=f+C+(q.scrollHeight||0)+2.5,m["vertical-align"]="top",m.direction=q.textDirection,m.text="",g?(g.attr(m),g.css(R)):g=this.positionLabel=D.text(m,R,b.datalabelsGroup).insertBefore(b.datasetGroup)):(g&&g.remove(),delete this.positionLabel);this.hide();this.ppixelRatio=
-T.getPVR();this.spixelRatio=d&&-d.getPVR();this.yminValue=q._yminValue;this.pyaxisminvalue=V.min;this.pyaxismaxvalue=V.max;this.syaxisminvalue=H&&H.min;this.syaxismaxvalue=H&&H.max;this.positionLabels=q.xlabels||{data:[],parsed:[]};this.chart=a;this.getZoomInfo=function(){return q.viewPortConfig};this.getDataIndexFromPixel=function(b){return Math.round(a.components.xAxis[0].getValue(b))};this.getPositionLabel=function(b){return(b=a.components.xAxis[0].getLabel(b))&&b.label||""};if(c.valueEnabled){b=
0;for(k=v.length;b<k;b+=1)f=v[b],f=Ja(f.config.linecolor),m.x=0,m.y=G,m.fill=f,m.direction=q.textDirection,m.text="",m["text-bound"]=L["text-bound"],m.lineHeight=L.lineHeight,A[b]?A[b].attr(m):A[b]=A.items[b]=D.text(m,void 0,h);for(;b<A.items.length;b+=1)A[b].remove(),delete A[b],A.items.splice(b,1);this.numberFormatter=x}else if(A.items&&A.items.length){for(b=0;b<A.items.length;b+=1)A[b].remove(),delete A[b];A.length=0}};sa.prototype.disable=function(a){void 0!==a&&(this.disabled=!!a)&&this.visible&&
this.hide();return this.disabled};sa.prototype.onMouseOut=function(){this.hide();this.position=void 0};sa.prototype.onMouseDown=function(){!Na&&this.hide();this._mouseIsDown=!0};sa.prototype.onMouseUp=function(){!Na&&this.hide();delete this._mouseIsDown};sa.prototype.onMouseMove=function(a){if(!(this.disabled||this._mouseIsDown&&!Na)){var c,b=this.getZoomInfo(),k=this.line,f=this.left,b=b.step,m=this.chart,n=m.components.xAxis[0],m=m.get("config"),A=m.canvasLeft,x=n.getAxisConfig("axisDimention");
a=Qa(this.container,a).chartX-f;var f=n._getVisibleConfig(),x=x.x-A,D;D=(D=this.getDataIndexFromPixel(ua(a)))+((c=D%b)>b/2?b-c:-c);a=n.getPixel(D)-x-A;k.transform(["T",ua(a),0]);this.hidden&&0!==m.crossline.enabled&&this.show();(D<f.minValue||D>f.maxValue)&&this.hide();if(D!==this.position||this.hidden)this.position=D,this.lineX=a,this.updateLabels()}};sa.prototype.updateLabels=function(){var a=this,c=a.labels,b=a.plots,k=a.width,f=a.position,m=a.lineX,n=xa(m),A=a.ppixelRatio,x=a.spixelRatio,D=a.yminValue,
q=a._visout,C=a.numberFormatter,G=a.pyaxisminvalue,v=a.pyaxismaxvalue,E=a.syaxisminvalue,h=a.syaxismaxvalue,B=function(){function b(){this.y=0;this.lRef=void 0;this.__index=this.__shift=0}function c(a){for(var b=0;b<a;)this.push(b++);return this}function f(a){var b,c,d,e={},g=Number.POSITIVE_INFINITY;for(b=0;b<this.length;b++)c=this[b]-a,0>c?d=t.NEG:d=t.POS,c=n(c),c<=g&&(g=c,e.absValue=c,e.noScaleSide=d);return e}function h(a){this.holes=c.call([],a)}var d=-1*a.height,k=D*A,g=0,m,l={},e,n=Math.abs,
v=Math.floor,t={};"function"!=typeof Object.create&&(Object.create=function(){function a(){}var b=Object.prototype.hasOwnProperty;return function(c){var d,e,f;if("object"!=typeof c)throw new TypeError("Object prototype may only be an Object or null");a.prototype=c;f=new a;a.prototype=null;if(1<arguments.length)for(e in d=Object(arguments[1]),d)b.call(d,e)&&(f[e]=d[e]);return f}}());Array.prototype.indexOf||(Array.prototype.indexOf=function(a,b){var c,d,e;if(null==this)throw new TypeError('"this" is null or not defined');
d=Object(this);e=d.length>>>0;if(0===e)return-1;c=+b||0;Infinity===Math.abs(c)&&(c=0);if(c>=e)return-1;for(c=Math.max(0<=c?c:e-Math.abs(c),0);c<e;){if(c in d&&d[c]===a)return c;c++}return-1});Array.prototype.forEach||(Array.prototype.forEach=function(a,b){var c,d,e,f,g;if(null==this)throw new TypeError(" this is null or not defined");e=Object(this);f=e.length>>>0;if("function"!==typeof a)throw new TypeError(a+" is not a function");1<arguments.length&&(c=b);for(d=0;d<f;)d in e&&(g=e[d],a.call(c,g,
d,e)),d++});b.prototype.constructor=b;b.prototype.applyShift=function(a){this.__shift=a;this.lRef.calcY=this.y+=a*g};b.prototype.applyDirectIndex=function(a){this.__index=a;this.lRef.calcY=this.y=d-a*g*-1};try{Object.defineProperty(t,"POS",{enumerable:!1,configurable:!1,get:function(){return 1}}),Object.defineProperty(t,"NEG",{enumerable:!1,configurable:!1,get:function(){return-1}})}catch(u){t.POS=1,t.NEG=-1}h.prototype=Object.create(Array.prototype);h.prototype.constructor=h;h.prototype.repositionHoles=
function(){var a,b=0,c;for(a=this.holes.length=0;a<this.length;a++)c=this[a],!c&&(this.holes[b++]=a)};h.prototype.attachShift=function(a,c,d){var e,g=this.length;if(a===q)d.calcY=q;else if(g=c>g-1?g-1:c,e=this[g],c=new b,c.y=a,c.lRef=d,e){a=f.call(this.holes,g);d=g+a.absValue*a.noScaleSide;if(a.noScaleSide===t.POS)return c.applyDirectIndex(d),this.splice(d,1,c),this.holes.splice(this.holes.indexOf(d),1),d;if(a.noScaleSide===t.NEG){a=this.splice(d+1,this.length-1);this.pop();a.forEach(function(a){a&&
a.applyShift(-1)});for([].push.apply(this,a);this[d];)d++;this.push(0);this.repositionHoles();a=f.call(this.holes,d);d+=a.absValue*a.noScaleSide;c.applyDirectIndex(d);this.splice(d,1,c);this.repositionHoles();return this.length-1}}else c.applyDirectIndex(g),this.splice(g,1,c),this.holes.splice(this.holes.indexOf(g),1)};try{Object.defineProperty(l,"top",{enumerable:!1,configurable:!1,get:function(){return d}}),Object.defineProperty(l,"bottom",{enumerable:!1,configurable:!1,get:function(){return k}})}catch(u){l.top=
d,l.bottom=k}l.init=function(a,b){var c;g=a+2;d+=g/2;e=v(n(d)/g);m=new h(e);for(c=0;c<e;c++)m.push(0)};l.occupy=function(a,b){var c=v(n(d-a)/g);m&&m.attachShift(a,c,b)};return l}();c&&(c[0]&&c[0].attr({text:C.yAxis("0")}),c[0]&&B.init(c[0].getBBox().height,c.length),c.forEach(function(a,c){var k=b[c],m=k.components.data[f]&&k.components.data[f].config.setValue,d=k.config.parentYAxis;B.occupy(void 0===m||!k.visible||(d?m>h||m<E:m>v||m<G)?q:d?(m-E)*x:(m-G)*A,a)}));c&&c.forEach(function(a,c){var h=b[c],
q,d;(h=C[h.config.parentYAxis?"sYAxis":"yAxis"](h.components.data[f]&&h.components.data[f].config.setValue))?(a.attr({text:h}),h=(h=(h=(h=a.getBBox())&&h.width)&&.5*h)&&h+10,d=a.calcY,q=oa(0,La(n,k)),void 0!==d&&void 0!==q&&a.attr({x:q,y:d,"text-anchor":m<=h&&"start"||m+h>=k&&"end"||"middle","text-bound":["rgba(255,255,255,0.8)","rgba(0,0,0,0.2)",1,2.5]})):a.attr({x:-k})});a.positionLabel&&a.positionLabel.attr({x:m+a.left,text:a.getPositionLabel(f),"text-bound":["rgba(255,255,255,1)","rgba(0,0,0,1)",
1,2.5]})};sa.prototype.show=function(){this.disabled||(this.hidden=!1,this.group.attr("visibility","visible"),this.line.attr("visibility","visible"),this.positionLabel&&this.positionLabel.attr("visibility","visible"))};sa.prototype.hide=function(){this.hidden=!0;this.group.attr("visibility","hidden");this.line.attr("visibility","hidden");this.positionLabel&&this.positionLabel.attr("visibility","hidden")};sa.prototype.dispose=function(){for(var a in this)this.hasOwnProperty(a)&&delete this[a]};na.addSymbol({pinModeIcon:function(a,
c,b){var k=.5*b,f=a-b,m=a+b,n=a-k,A=a+k,x=a+.5,D=x+1,q=x+1.5,C=c-b,G=c+k,v=c-k,k=c+(b-k);return["M",f,C,"L",n,v,n,k,f,G,a-.5,G,a,c+b+.5,x,G,m,G,A,k,A,v,m,C,q,C,q,v,q,k,D,k,D,v,q,v,q,C,"Z"]},zoomOutIcon:function(a,c,b){a-=.2*b;c-=.2*b;var k=.8*b,f=na.rad(43),m=na.rad(48),n=a+k*ya(f),f=c+k*Aa(f),A=a+k*ya(m),m=c+k*Aa(m),x=na.rad(45),D=n+b*ya(x),q=f+b*Aa(x),C=A+b*ya(x);b=m+b*Aa(x);return["M",n,f,"A",k,k,0,1,0,A,m,"Z","M",n+1,f+1,"L",D,q,C,b,A+1,m+1,"Z","M",a-2,c,"L",a+2,c,"Z"]},resetIcon:function(a,c,
b){var k=a-b,f=(ra.PI/2+ra.PI)/2;a+=b*ya(f);var f=c+b*Aa(f),m=2*b/3;return["M",k,c,"A",b,b,0,1,1,a,f,"L",a+m,f-1,a+2,f+m-.5,a,f]}})}])});
              ./mvappsvr/mv_appsvr.conf                                                                           0000644 0000000 0000000 00000004466 13125467455 014501  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ; The behavior section defines all of the default behaviours of the server
; and adds functionalty to the requests.
[behavior]
  ; The default handler, if none is specified in the request URI.
  DefaultHandler  = "dbc"

  ; The default resource file, if nothing is specified in the request URI.
  DefaultResource = "MVDB.MAIN"

  %include_config "mvdb.conf"

; The following list of handlers maps the request URI to the backend module
; that is responsible for processing the request.
[handlers]
  "db"           = "mod_static"
  "dbc"          = "mod_mvconnector"
  "sdbc"         = "mod_mvconnector"
  "embedded"     = "mod_embedded"
  "config"       = "mod_config"
  "api"          = "mod_mvconnector"

;
; Mime type definitions for static modules.
;
[mime_types]
  "txt"     = "text/plain"
  "html"    = "text/html"
  "htm"     = "text/html"
  "gif"     = "image/gif"
  "jpg"     = "image/jpg"
  "jpe"     = "image/jpg"
  "jpeg"    = "image/jpg"
  "png"     = "image/png"
  "swf"     = "application/x-shockwave-flash"
  "mid"     = "audio/midi"
  "midi"    = "audio/midi"
  "kar"     = "audio/midi"
  "xls"     = "application/vnd.ms-excel"
  "ppt"     = "application/vnd.ms-powerpoint"
  "gz"      = "application/x-gzip"
  "tgz"     = "application/x-gzip"
  "js"      = "application/x-javascript"
  "css"     = "text/css"

[content_types]
  "text/*" = "text"
  "application/json" = "text"
  "application/xml" = "text"

;
; MODULE-SPECIFIC Configuration Settings!
;

; Settings for module: dbc
%include_config "dbc_database.conf"
%include_config "dbc_options.conf"

; Settings for the configuration page
[config]
  DefaultMime = "text/html"
  AuthType = "Basic"

%include_config "admin_password.conf"

[sdbc]
  %import "dbc"
  %import "config"

[api]
  %import "dbc"


;#############################################################################;
; APPLICATION SECTION: All of the settings below this point are app-specific  ;
;#############################################################################;

; MV Dashboard Application
%include_config "mv_app_db.conf"

;#############################################################################;
; Supported MV Platforms
;#############################################################################;
[db_platforms]
  "d3" = "D3"
  "qm" = "QM"
  "jb" = "jBASE"
  "uv" = "UniVerse"
  "ud" = "UniData"
                                                                                                                                                                                                          ./mvappsvr/bin/                                                                                     0000777 0000000 0000000 00000000000 12534142432 012343  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/bin/DBUninstall.sh                                                                       0000777 0000000 0000000 00000003346 12534142432 015067  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   #!/bin/sh


################################################################################
# GLobal Variables
################################################################################
gSystem=`uname -s`

#-------------------------------------------------------------------------------
# Name: KillRunning
#-------------------------------------------------------------------------------
KillRunning()
{
        PName=$1

        TMP=`ps -ef | grep ${PName} | grep -v grep | grep -v DBUninstall.sh | awk '{print $2}'`

        if [ -n "${TMP}" ]; then
                for i in ${TMP}
                do
                        kill -9 ${i}
                done
        fi
}



################################################################################
# Main
################################################################################

# move the cwd to /tmp
# --------------------
cd /tmp

# remove mvapps from xinted and restart the server
# ------------------------------------------------
if [ "${gSystem}" = "Linux" ]; then
	rm -f /etc/xinetd.d/mvappsvr
	/etc/init.d/xinetd restart 1>/dev/null 2>&1
elif [ "${gSystem}" = "AIX" ]; then
	cat /etc/inetd.conf | grep -v mvapps > /tmp/DBuninstall.tmp
	cp -f /tmp/DBuninstall.tmp /etc/inetd.conf
	refresh -s inetd 1>/dev/null 2>&1
else
	echo "System type ${gSystem} unknown, exiting."
	exit 1
fi

# kill any running processes
KillRunning mvappsvr

# Remove the entry from the services file
# ---------------------------------------
cat /etc/services | grep -v mvappsvr > /tmp/DBuninstall.tmp
cp -f /tmp/DBuninstall.tmp /etc/services

# Remove the /usr/loval/mvappsvr diectory
# ---------------------------------------
rm -rf /usr/local/mvappsvr

echo
echo "Dashboard uninstalled successfully."
echo
                                                                                                                                                                                                                                                                                          ./mvappsvr/core/                                                                                    0000777 0000000 0000000 00000000000 12650544754 012537  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/core/jb/                                                                                 0000777 0000000 0000000 00000000000 13364666755 013143  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/core/jb/dbhelp.html                                                                      0000644 0000000 0000000 00000003033 12545257563 015253  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <div class="help_box" id="required_help_box">
    <h3>More Info</h3>
    <div id="dbbinary_help" class="help">The path to the jBASE release directory.</div>
    <div id="dbusername_help" class="help">The jBASE User ID that logs into the dashboard account.</div>
    <div id="dbpassword_help" class="help">The password (if any) required to log in with the user ID specified above. For a new install, specify the password you wish to assign to the new dashboard user specified above.</div>
    <div id="dbaccount_help" class="help">The name of the jBASE account that will hold your software.</div>
    <div id="dbacctpath_help" class="help">The parent directory in which the dashboard account directory will be created.</div>
</div>

<div class="help_box" id="optional_help_box">
    <h3>More Info</h3>
    <div id="dbworkingdir_help" class="help">The working directory used by the app server.</div>
    <div id="maxrequest_help" class="help">The maximum number of characters to be issued in a single jBASE request.</div>
    <div id="dbfails_help" class="help">The number of times to retry on a failure to connect to jBASE.</div>
</div>

<div class="help_box" id="install_help_box">
    <h3>More Info</h3>
    <div id="dm_user_help" class="help">The username of your "root" or "Administrator" user, or any user will full database privileges.</div>
    <div id="dm_pass_help" class="help">The password (if any) required to log in as the user specified above.</div>
    <div id="db_package_help" class="help">The path to the installation package files.</div>
</div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ./mvappsvr/core/jb/MVDB-FULL                                                                        0000644 0000000 0000000 00005571731 13674161107 014356  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   001161RSS.BP0c00000ECSUB.TEMPLATE.SEL0c2SUBROUTINE SUB.XXX.SEL(VARS,VALS,FEED,F.FILE,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*OPEN "FILE" TO F.FILE ELSE STOP 201, "FILE"*XLINE = 'SSELECT FILE .... WITH PARAMS ...'EXECUTE XLINE CAPTURING JUNKRETURN0002EESUB.RE.SEL0c2SUBROUTINE SUB.RE.SEL(VARS,VALS,FEED,F.RUNTIME.ERRORS,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*FEED.TITLE = RSS$FEED.REC<1>LOCATE "account" IN VARS SETTING POS THEN  account = VALS<POS>  FEED.TITLE := '(Account: ':account:')'END ELSE account = ""LOCATE "user" IN VARS SETTING POS THEN  user = VALS<POS>  FEED.TITLE := '(User: ':user:')'END ELSE user = ""RSS$FEED.REC<1> = FEED.TITLE*OPEN '','RUNTIME-ERRORS' TO F.RUNTIME.ERRORS ELSE STOP 201, 'RUNTIME-ERRORS'XLINE = 'SSELECT RUNTIME-ERRORS BY-DSND DATE BY-DSND TIME'IF account # "" THEN  XLINE := ' WITH USERPIB = "[ ':account:'"'END ELSE IF user # "" THEN  XLINE := ' WITH USERPIB = "[ ':user:' ]"'ENDXLINE := " SAMPLING 100"EXECUTE XLINE CAPTURING JUNKRETURN0001F2RSS.DATA.INC0c2DIM RSS.DATA(20)*EQU RSS$TITLE       TO RSS.DATA(1)EQU RSS$LINK        TO RSS.DATA(2)EQU RSS$AUTHOR      TO RSS.DATA(3)EQU RSS$DATE        TO RSS.DATA(4)EQU RSS$TIME        TO RSS.DATA(5)EQU RSS$DESCRIPTION TO RSS.DATA(6)*EQU RSS$FEED.REC    TO RSS.DATA(14)EQU RSS$USER1       TO RSS.DATA(15)EQU RSS$USER2       TO RSS.DATA(16)EQU RSS$USER3       TO RSS.DATA(17)EQU RSS$USER4       TO RSS.DATA(18)EQU RSS$USER5       TO RSS.DATA(19)EQU RSS$USER6       TO RSS.DATA(20)0000EESUB.FEEDS.SEL0c2SUBROUTINE SUB.FEEDS.SEL(VARS,VALS,FEED,F.RSS.FEEDS,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE STOP 201, 'RSS.FEEDS'*EXECUTE 'SSELECT RSS.FEEDS # "FEEDS"' CAPTURING JUNKRETURN000196SUB.FEEDS.ITEM0c2SUBROUTINE SUB.FEEDS.ITEM(VARS,VALS,F.RSS.FEEDS,FEED.ID,FEED.REC,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*RSS$TITLE = FEED.REC<1>RSS$LINK = "RSS.MAIN?feed=":FEED.IDIF FEED.REC<2> # "" THEN  PARAMS = FEED.REC<2>  IF PARAMS[1,1] # "&" THEN PARAMS = "&":PARAMS  RSS$LINK := PARAMSENDRSS$AUTHOR = "RSS Feed"RSS$DATE = DATE()RSS$TIME = TIME()RSS$DESCRIPTION = FEED.REC<3>RETURN0007FCSUB.RE.ITEM0c2SUBROUTINE SUB.RE.ITEM(VARS,VALS,F.RUNTIME.ERRORS,ITEM.ID,RECORD,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*RSS$TITLE = ""RSS$LINK = ""RSS$AUTHOR = ""RSS$DATE = ""RSS$TIME = ""RSS$DESCRIPTION = ""*DATA RECORD<2,1>EXECUTE "PRINT-ERR DM,MESSAGES, ":RECORD<1>:" (S" CAPTURING ERR*CONVERT @AM TO " " IN ERRERR = OCONV(ERR,'MCP')ERR = TRIM(ERR)RSS$TITLE = OCONV(FIELD(ITEM.ID,'*',1),'D0/'):" @ ":OCONV(FIELD(ITEM.ID,'*',2),'MTS'):": ":RECORD<4>:" ":ERR*RSS$AUTHOR=RECORD<3>*RSS$DESCRIPTION = 'Pib /User: ':RECORD<3>:'<br />'STACK = ""FOR N = DCOUNT(RECORD<5>,@VM) TO 1 STEP -1  STACK := RECORD<5,N>  IF STACK # "" AND N # 1 THEN STACK := ' --> 'NEXT NIF RECORD<5> # '' THEN RSS$DESCRIPTION := "Stack: ":STACK:'<hr />'MD = FIELD( RECORD<3>, ' ', 3 )** Try and find the source code to include in the feed.*SREC = ""OPEN MD:",MD," TO F.MD THEN  FNAME = ""  READ CREC FROM F.MD, RECORD<4> THEN    IF CREC<1> = "VR" THEN ;* This is a catalog pointer, file name is in field 4      FNAME = FIELD(CREC<4>,' ',1)    END ELSE IF CREC<1> = "PQ" THEN      IF FIELD(CREC<2>, ' ', 1 ) = "HRUN" THEN        FNAME = FIELD( CREC<2>, ' ', 2 )      END    END  END  IF FNAME # "" THEN    OPEN MD:",":FNAME:"," TO SFILE THEN      READ SREC FROM SFILE, RECORD<4> ELSE SREC = ""    END  ENDENDIF SREC # "" THEN  CALL SWAP(SREC,'&','&amp;')  CALL SWAP(SREC,'<','&lt;')  CALL SWAP(SREC,'>','&gt;')  LINENO = RECORD<2,1>  IF LINENO MATCHES "1N0N" THEN    START.LINE = LINENO - 10    IF START.LINE < 0 THEN START.LINE = 1  END ELSE LINENO = 1 ; START.LINE = 1  END.LINE = LINENO + 10  RSS$DESCRIPTION := '<pre>'  FOR LINUM = START.LINE TO END.LINE    LINE = LINUM "R#4":" ":SREC<LINUM>    IF LINUM = LINENO THEN LINE = '</pre><b>':LINE:'</b><pre>'    RSS$DESCRIPTION := LINE:CHAR(10)  NEXT LINUM  RSS$DESCRIPTION := '</pre>'END ELSE  RSS$DESCRIPTION := 'Unable to open source code for ':RECORD<4>:' in account ':MDEND*RSS$DATE = FIELD(ITEM.ID,'*',1)RSS$TIME = FIELD(ITEM.ID,'*',2)*RETURN0000E1SUB.TEMPLATE.ITEM0c2SUBROUTINE SUB.XXX.ITEM(VARS,VALS,F.FILE,ITEM.ID,RECORD,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*RSS$TITLE = ""RSS$LINK = ""RSS$AUTHOR = ""RSS$DATE = ""RSS$TIME = ""RSS$DESCRIPTION = ""*RETURN006E51DICT_DASHBOARD.BALANCES0c0000020*CURRENT.NET.INCOME.STATS0c199900001C*LAST.UPDATE.AR0c119113113100001F*LAST.UPDATE.SALES0c119097194000003E*CURRENT.AP.STATS0c1423319241590398927280931250503169201000002ADEBUG0c1READ314223005483206198389200001C*LAST.UPDATE.AP0c119113113100001C*LAST.UPDATE.ALL0c1UPDATING000024*LAST.UPDATE.NET.INCOME0c119113113100001E**LAST.UPDATE.ALL0c1191131131006CBD*CURRENT.AR.STATS0c114560890843071741194510422787790138344612016201720182019202036015203171161151422300548320619813973235509172233548101395385164696370847879531219774039141932813118439101515435988140169672622764976385961979776243395735633981366076359266443141739321371082983421997626385139191577600893225799874558530587911002831044901802010031636438139934238540935140144850748349747242343943941742042845745147745945648141552450947752038749845516142125826659488757142751552545881502172726122803193629216560167136903585464649433786660648167835910164720249247515103226424798771241101583062896Du monde entier2927113415302442Real Computers30182549HUNGRY HOWIES PIZZA280124812761Bobs Used CyclesIntercom ProductsBetter Computing2622Drachenblut Delikatessen12922374Comp ConsultingQue DeliciaElectronic Company2891Berglunds snabbkop258914022965Cyber ProductsFrankenversandPiccolo und mehr1423290227042632212816191795288628711140102111223023Queen CozinhaFolies gourmandesOnes & Zeros Inc.17032713Computer TechVictuailles en stockMemory Capturers1416Disk Products28872953Ajax Computer Electronics166028632908Comp Products11232996TRGGaleria del gastronomoJoe's Computers2935USA ComputersGodos Cocina Tipica2449Bottom-Dollar MarketsBakers Goods255216771117Computer TipsEastern ConnectionAround the HornData Comp3002233527242758160823983028ABC Electronics CorpHanari CarnesFranchi S.p.A.29972809The Big Cheese2915Wartian HerkkuChop-suey Chinese28432969White Clover MarketsVins et alcools Chevalier2970299112062727For Computers Inc.Bills Shoes & Gopeds27592308HILARION-AbastosWellington Importadora226312513015Classic ComputersWolski Zajazd271025742827293730191920Better BytesBlauer See DelikatessenData Net15171012283029072959Software Inc130815991103168415442778288513811010110514341032GROSELLA-RestauranteBon app'300922931252Pericles Comidas clasicas2854170528032947Longo ToyotaBest Computer Company19582967Specialites du monde20472814Alfreds FutterkistePrinter Products2497Computers N More2394272210721076Logical Computers2974Save-a-lot Markets2513Net Connect2882Bits and Bytes IncComputer Sitters135113502560Die Wandernde Kuh21152554Richter Supermarkt205625312784134426241653179918292940290127331569Supremes delices2958296627083012Ottilies KaseladenWhite HouseTortuga Restaurante2607297916051219Great Lakes Food Market25682465298610782648292028671152290615861106France restauration1058151129422516254524432982Gourmet Lanchonetes294328313029Computers Inc.Systems30322456North/South2628Princesa Isabel Vinhos1214Old World DelicatessenErnst Handel2651295013723033301428942931303129621290259628952459300429441556211327573034203527032929303512651469Ricardo Adocicados102410541358121815642690303625212933290025323037B's Beverages3024280630413038141113071119212612382538136627442406304027931452118417802434Antonio Moreno Taqueria3039Consolidated Holdings148030072313304630473048141930503053305430553056141330573058304210302670Familia Arquibaldo1382255811573061306330643065306730693070Hungry Coyote Import Stor2837171730713075Data Bits300028551155129930431592292523593044Modem Products3076194330783080Wilman Kala12113051308230593083308610972782308727833088308917753077306812891171309230932095307230731057138830953096309730982571296030743099Let's Stop N Shop31001034176224051965ABC Computers3101310331043105310631073081140131083109311031112880311210993114308430851257306628562859104715413011LINO-Delicateses3091306231213122312331243125126931273126312831292941313131323102309420893137313631133006313931401287314131421415246226001540314431452694299510833146311631493150315131173118Comercio Mineiro31533154315631153157Cactus Comidas para lleva31583159139131601050311931623163316431302387Computer Fancy3166129318593167312011833138316831713170317431433176318031812994Computer Town3148317831823183318431851453102810151651LILA-Supermercado31883191319331953196300513343179319932003201320232083209313532113212321332143215285710403161316528773169137431722740293626563219322032213177322232231261Computers R Us280032253227322832303231323231893190119931923194319732333235323832391046Paris specialites32403241320432053206320732423246321032473248319831733254325732583262321632633265286532173175FISSA Fabrica Inter. Salc325332673268327232731486101332743277Vaffeljernet29733280322428223281328232833285328632293287299332343284Computer TrainersBolido Comidas preparadas3237324332443245324932902664325032511087Romero y tomillo32923293325532563259329132941060326117453264329732983260181832693270327128733302The Cracker Box3186327532763303326632263278327911823305330731333312331326893315Lehmanns Marktstand331633173296Better ConnectionNumber One in Computing331833013322329523693321332328783324332532993300330624483304332633273309332933103330333133322938331133363337334033423344334533492031Comp Data Inc.33513350335233533354332033193357335833603328335933633364336533333366336733351118336833383371334333723373249133743022337533763377337911253381338216793384338633553387Oceano Atlantico Ltda.33832729The Only Computers3391339033623392339333953396337033973398339933693400340233783403340433803385340634072105338834083389Rancho grande34123415128634173419340133942879342434251764340534271368342834293432160134353434343610743409341027743438343934403441341834431198344434453446344734143448Island Trading34133416342023373452100634263431345334333454Future In Computing33473455Sante Gourmet264410953442346234633468346934712592267734493473345028293476Disks N More3477347934803481Split Rail Beer & Ale34843485346534873489345734903467264734613459349234942817346434963499Simons bistro346635003501350434743475Future Computers21553505350634823470341135083509347227012325349135101490Lazy K Kountry Store349335143502Tradicao Hipermercados35153516351735182819351135193521349513933503352235243526352835293530Reggiani Caseifici350734223532Toms Spezialitaten352035343536353735403512115935433545348635133548Computers Etc.355635513553355435583559166735603561Maison Dewey35632502356435273525356635673568301635383539127035733574Blondel pere et fils354235233547QUICK-StopSeven Seas Imports3544357935803550355212433583358435883586358735903589297535923593258335553549359535963598359936003569357135723602360314763575237035653605360636073610357835823611358535763013361536163591359435973617361836221598360436013624362636273581Rattlesnake Canyon Grocer3629363036093608361236133634363536313636363936403641364236433644364536463647364836493650362136523619363736253655Computer Portables Inc.36583628Koniglich Essen36613662366522543666366736323675367636683677Mere Paillarde36793680368136823683368436853686368736883689369036913692369336943695369636973698365336993700370137023704363837053706370737083709371137123713371436543716371737183719372037221407365637233726372737283729365936633664373127953734373337363738373937413742374437463743366936702000367136723673367437511082367837533754375537563757375836573710371537603761376237633764376537213725376737683769372437702912Morgenstern Gesundkost377137723773Lonesome Pine RestaurantLa corne d'abondance3774373737783745374837473752378037833750378437853786378837913790111425203766379437963798Computer Warehouse3793377537491291Memory Plus Inc.37762252380138023777380437813806380737823810378738123789381338153792382136143822375938243823379537993827382838293830Computers Galore38323833383438033835380538373836383838402099380838113841288138433844381738143740La maison d'Asie38193816382038473848380938313826385430083825384938563857383938533860Laughing Bacchus Wine Cel38623864380038423846384538683869385038703852Ana Trujillo Emparedados3871387238743858Secure Computers387638753859388038833884386338863887388838893891386538923873389538963877387938973881385538823898Furia Bacalhau e Frutos dMagazzini Alimentari Riun126339003901389939043905390639073909391038943890173339133912391438673866Hungry Owl All-Night Groc3893388539163918391939033920Centro comercial Moctezum3908117327063878134839172500005847741433950510000250000500000750000436147808920015840016055016080344854231045482908400234862711531510000007488798710033505010699601006005504369963465284121400296015836400465005726351734075433519715625485577374000390050712600635027887500259745885282305506111000032540156656801788761251480008656020000006300021000206250175683225004437002521922037608900855100157993238400228490268300970025250030163594755040700577500178503200100000016060054745039354356850124225010135501030532989753200712500250000301582350000850000510001020000691933795185000279347323002300408000386003980015251019900635452182000595001500139009146382507400036817552220001283175484035118000299004818891703750120440719607400139003000001500005833299116104310414086102241465411715224824297117252317933209918242925255111472576241164055422179541311661130851522925427232511255529258654835330252424248322424541478614621722252225202723913423188992424117532255242224222423942201834552083634178147131111928954542514135165136751532093215800180191551216584204394102775228881421083386266104113473235430207012161533318622993105111235348791196732385310611094275934622814671447655351566174116714137139736301964581404714809126917194304192822193165586155124674115672090236607662383928142847252636173797135964911383564787536887636616247739550588912185269118660108197129514113553031080949191126225960171221371669457210124213903009566111905113231676249116715541122133487727775722284458159200714494057587016934017544932208525375198106034636424092452137112173296190212585275145753665037151520290563425505175242938442254159218104148429119215799342198226413231194601472962093723816710738201264317296472139285816627998871342721888228232907579102127443922457436337326136540109121122117010651184752121551318816241283881013811741515936927764639439144461348162911284511711105376202222163354007893661842861451051642087106206718149492541264444158438692172753766244129461218333215811111114517915812151921217373273151122122931146178177426413775219152912116010269127935611091639871140512407204122112121734114752034165421019281919778151371414141418232394014914994880469112272911881313131347911201037106819930109101809361012399794716901019244852248921212123225703151211502132010993514999920191264103059139556101599247391491010386543192381997291074815217243928149278740918999947718992598751416336273529341111192487942245101810104026036131351625599983314199228284010559187068935910927311416154109199493101893313198139937910027251184914718227214212060152964886103619101322513918794413229189607376569371973749803319611699239467945925012997130515010101855922153851043729310183918104118191914099910252275959101898851099375406109178772010289277959303799963999122660193199994143253203651301179799134116891088610925828538970224148184202972413994003311440181002813227109966229125613610199997599928101301251412831872718995857449688379100103353099997352181322310202117991870932139233089156241311855155149371246391895933618899318309916520443111101701657899108418912962493713517829999996631152953936912291866929101891798223925993296710106428387915374991021111107399573415174106152296992310281099917274301215611629934952436610612880360281421933232591310436412031339181820515091012154816113513969989191399109144210121117179916307596439305913251218911861595441181394213918199282013919332010109999915229915991024927201312101010109999231095679101691096702119135419999271910963883988197591097856291919109101025119191222911394791322081818999544995187936339109454210959311847999101499109279895435249813369471049999152935913691699992318910233681311311099839155101132791888749111181872693020991085219999119914491813424218919109991028151069781266010109991099117791391112259999141351435103542216711519311366951762104152431133011728149524744201427662542551184264653738455310414078948654232233014864654458588253365237374817136717784913139913235412871319423119514352831561877277682542313840741710384268917404511313865106642321415233813108951299251293726812042206546356381125017263201116288118282937141245362773182011371531060151318144236102619121754117711125162123613661155138284932562123711418614422101112131443474112310126231551722317113131851272104439678611621321411291116131117332023391251115381752151741158215512845116236481189225461818912115017126751211771311112211131262823911121111131214113126111614131133341212371411111811154211119111122412731115111171111120198101121224111131133112111139211113255412221121513101211361611101113291161413125131411131213112159213232114111311271311121212231111311123211121231121211433111111918326469112102121118111242322221111252131211411114411741131211141113111122221111216143411111141216114321124134192111381212232311132111111211131113911619122221202114312213111113211153112212112815211231122212134211201113291114311162111111113171111113142121411212431121181111211112151821131111122113521211113111188111413111134416211211112111113321112216311142112361121111114111111111011111711010211611442111112213211112111111119111111111111111111111122111111024112111132111131112111145122111121221213141412211511111111111227313111211111131116122151171111214111211111111951411612171123311221152111141112111121212121111141111232111111111111111111111111582210675557814361401043104161403542422447109163244104384824226202110190344316368592922762955125971531521649021825576973236203051753151283050207543961822248819254416341632115301573764837019951173170115574894918416223165479134631512182046216305533818746391813081633445612226251231458732151784213521699113377552917936214011019617863738213835229312432862949241813921140674755414112210831072417297147698851821365652171131401731022741504898152011332091010505836513555890896124523109412173399326364434304427601033653225599213422940403144322125222833484942942029421066211131341919818586720826361968271698013616762977155961119972692011852191199424291010999102815106978126601010999109911779139111225999914135114112492111110266311111424241332431776173742221416209234223211322636262242153521158311042116221211472231111551222121213125141341234211151212211312211114111311142304121111111142213516345211132111511111271115311423212315111153331113121112231331311311611122121233231311265252113821111212212114122616322241111131142121111111141111232111111111111111111111111Cyber ProductsSoftware IncComputer WarehouseBits and Bytes IncComputers Etc.Future In ComputingComp ProductsLogical ComputersABC ComputersComputers Inc.SystemsBetter BytesSecure ComputersOnes & Zeros Inc.Modem ProductsIntercom ProductsMemory Plus Inc.Better ConnectionNet ConnectComputer TipsMemory CapturersComp Data Inc.Future ComputersNumber One in ComputingComputers R UsJoe's ComputersComputer FancyDisk ProductsPrinter ProductsData BitsDisks N MoreFor Computers Inc.Electronic CompanyUSA ComputersData NetBest Computer CompanyThe Only ComputersData CompComputer SittersComputer Portables Inc.Alfreds FutterkisteComputers N MoreReal ComputersComputer TownClassic ComputersComputer TrainersBetter ComputingComp ConsultingComputer TechComputers GaloreAna Trujillo EmparedadosAntonio Moreno TaqueriaBerglunds snabbkopBlauer See DelikatessenBlondel pere et filsBolido Comidas preparadasBon app'Bottom-Dollar MarketsB's BeveragesCactus Comidas para llevaChop-suey ChineseComercio MineiroConsolidated HoldingsDrachenblut DelikatessenDu monde entierErnst HandelFamilia ArquibaldoFISSA Fabrica Inter. SalcFolies gourmandesFrankenversandFrance restaurationFranchi S.p.A.Galeria del gastronomoEastern ConnectionGodos Cocina TipicaGourmet LanchonetesGreat Lakes Food MarketGROSELLA-RestauranteHanari CarnesNorth/SouthAround the HornHILARION-Abastos2497Ottilies Kaseladen80892004855773368175532540152793473235000023486272305506228490220000001734075170375016080341579932143395012831751242250111000010699601045482103053210200001013550100000010000009475509084008875008551008500008364007500007488797156257126007125006996346656806354526350275885285847745775005726355474505100005000004854234840354818894437004361474335194080003935433900503350503225003016352960152525002521922500002500002062502037601606001605501584001480001214001153151006008710086560761257400065284630005504346500259741788Drachenblut DelikatessenComp ConsultingFuture In ComputingComercio MineiroIntercom ProductsIsland TradingKoniglich EssenNumber One in ComputingLa corne d'abondanceFuture ComputersLogical ComputersEastern ConnectionMemory Plus Inc.Computers Inc.SystemsMemory CapturersComputers GaloreBolido Comidas preparadasData NetBetter ConnectionFolies gourmandesLa maison d'AsieFrance restaurationComputers Etc.Godos Cocina TipicaComputer TechComputer SittersBest Computer CompanyBetter ComputingLaughing Bacchus Wine CelCyber ProductsLazy K Kountry StoreHanari CarnesAna Trujillo EmparedadosSecure ComputersLehmanns MarktstandLet's Stop N ShopBerglunds snabbkopGourmet LanchonetesLILA-SupermercadoLINO-DelicatesesGROSELLA-RestauranteDu monde entierLonesome Pine RestaurantBlondel pere et filsHungry Coyote Import StorPrinter ProductsMagazzini Alimentari RiunFuria Bacalhau e Frutos dComputer TrainersABC ComputersNet ConnectOnes & Zeros Inc.Maison DeweyMere PaillardeErnst HandelAlfreds FutterkisteElectronic CompanyComputer WarehouseMorgenstern GesundkostDisks N MoreAround the HornReal ComputersData BitsNorth/SouthFor Computers Inc.Joe's ComputersThe Only ComputersOceano Atlantico Ltda.Cactus Comidas para llevaModem ProductsFamilia ArquibaldoAntonio Moreno TaqueriaOld World DelicatessenSoftware IncClassic ComputersHILARION-AbastosBottom-Dollar MarketsFISSA Fabrica Inter. SalcComputer Town1859Computer FancyBon app'Chop-suey ChineseGaleria del gastronomoDisk ProductsFrankenversandB's BeveragesComputer TipsComputers N MoreData CompFranchi S.p.A.Bits and Bytes IncConsolidated HoldingsBlauer See DelikatessenComp Products2521USA ComputersOttilies KaseladenBetter Bytes2497Great Lakes Food Market10431041391330299272239217208188179179178152152147147147146146131130117117117116116116111102999992898686868583837658555555555454545454545342424040363434333329292929252525252525252525252524242424242424242423232220181311118776541Comercio MineiroParis specialitesDrachenblut DelikatessenThe Cracker Box257.9233.392.670.731.536.1104.351.88.810.854.230.4000257DICT_PORTAL.SALES0c0000033CLOSE.DATE.YMO0c1A0A;1(DY):1(D2-)(G-1)R1000002BCLOSE.DATE.MM0c1A1CLOSE MONTHDMR800002CCLOSE.DATE.YM0c1A0A;1(DY):1(DM)R10000028CLOSE.DATE0c1S1CLOSE DATED2-R8000022REP.NAME0c1A5Rep.NameL2500002CCLOSE.DATE.YYYY0c1A1CLOSE DATEDYR800001APIPE0c1A0 F;C|L1000045GROSS.PROFIT0c1A0gross profitMD2A;N(EXT.AMT)-N(EXT.COST)R10000019BRANCH0c1A13L15000019REGION0c1A14L15000026EXT.AMT0c1A8Ext.AmountMD2R10000025EXT.COST0c1A9Ext.CostMD2R10000018CNT0c1A0F;C1R50000E2DICT_PORTAL.AP0c0000026DATE.PAID0c1A8Date PaidD2-R8000029INV.AMOUNT0c1A6Inv.AmountMD2R13000025DUE.DATE0c1A20Due.DateD2-R8000024BALANCE0c1A50BalanceMD2R1300001APIPE0c1A0 F;C|L100015EDICT_MVDB.WIDGET.TYPES0c000001ATYPE0c1A1TYPEL15000018SWF0c1A2SWFL15000020HANDLER0c1A3HANDLERL1500001AICON0c1A4ICONL2500001ADESC0c1A6DESCL3000001710c1A1TYPEL1500001720c1A6DESCL3000001730c1A4ICONL2500001CGROUP0c1A5GROUPL15000021INACTIVE0c1A7INACTIVEL1000C72MVDB.WIDGET.TYPES0c0000043FC2DPIE0c2FC2DPIEPie2DFCPIEpie_widget_icon.jpgPIE2D Pie Chart00005CSPARKCOLUMN0c2SPARKCOLUMNSparkColumnFWSPARKspark_widget_icon.gifFWSpark Column Chart1000055VBULLET0c2VBULLETVBulletFWBULLETbullet_widget_icon.gifFWVertical Bullet Chart1000054SPARKLINE0c2SPARKLINESparkLineFWSPARKspark_widget_icon.gifFWSpark Line Chart1000057HBULLET0c2HBULLETHBulletFWBULLETbullet_widget_icon.gifFWHorizontal Bullet Chart100004AFCCOLUMN3D0c2FCCOLUMN3DColumn3DScol_widget_icon.jpgLC3D Column Chart00005DFCMSCOLUMN3D0c2FCMSCOLUMN3DMSColumn3DMcol_widget_icon.jpgLC3D Multi-Series Column Chart000039TABLE0c2TABLETABLEtable_widget_icon.jpgTable Widget000060HLINEARGAUGE0c2HLINEARGAUGEHLinearGaugeFWGAUGElinear_widget_icon.jpgFWLinear Gauge Chart1000045FUNNEL0c2FUNNELFunnelFWFPfunnel_widget_icon.gifFWFunnel Chart1000061SPARKWINLOSS0c2SPARKWINLOSSSparkWinLossFWSPARKspark_widget_icon.gifFWSpark Win/Loss Chart100005BTHERMOMETER0c2THERMOMETERThermometerFWGAUGEtherm_widget_icon.jpgFWThermometer Chart100004APYRAMID0c2PYRAMIDPyramidFWFPpyramid_widget_icon.jpgFWPyramid Chart1000060ANGULARGAUGE0c2ANGULARGAUGEAngularGaugeFWGAUGEangle_widget_icon.jpgFWAngular Gauge Chart100003AUSAMAP0c2MAPMAPmap_widget_icon.jpgMAPUSA Map Chart1000043FCAREA2D0c2FCAREA2DArea2DSarea_widget_icon.gifLC2D Area Chart000051FCMSBAR2D0c2FCMSBAR2DMSBar2DMbar_widget_icon.gifLC2D Multi-Series Bar Chart000067FCSTACKEDCOLUMN2D0c2FCSTACKEDCOLUMN2DStackedColumn2DMcol_widget_icon.jpgLC2D Stacked Column Chart000059FCDOUGHNUT2D0c2FCDOUGHNUT2DDoughnut2DFCPIEdonut_widget_icon.jpgPIE2D Doughnut Chart00003ATEXT0c2TEXTTEXTtext_widget_icon.pngPreformatted Text000052CYLINDER0c2CYLINDERCylinderFWGAUGEcylinder_widget_icon.jpgFWCylinder Chart1000054FCMSAREA2D0c2FCMSAREA2DMSAreaMarea_widget_icon.gifLC2D Multi-Series Area Chart000034HTML0c2HTMLHTMLhtml_widget_icon.pngHTML Widget00003AFCLINE0c2FCLINELineSline_widget_icon.gifLCLine Chart00004DFCMSLINE0c2FCMSLINEMSLineMline_widget_icon.gifLCMulti-Series Line Chart000043FC3DPIE0c2FC3DPIEPie3DFCPIEpie_widget_icon.jpgPIE3D Pie Chart000045VLED0c2VLEDVLEDFWGAUGEled_widget_icon.jpgFWVertical LED Gauge1000047HLED0c2HLEDHLEDFWGAUGEled_widget_icon.jpgFWHorizontal LED Gauge100004AFCCOLUMN2D0c2FCCOLUMN2DColumn2DScol_widget_icon.jpgLC2D Column Chart00003EFCBAR2D0c2FCBAR2DBar2DSbar_widget_icon.gifLC2D Bar Chart00005DFCMSCOLUMN2D0c2FCMSCOLUMN2DMSColumn2DMcol_widget_icon.jpgLC2D Multi-Series Column Chart000067FCSTACKEDCOLUMN3D0c2FCSTACKEDCOLUMN3DStackedColumn3DMcol_widget_icon.jpgLC3D Stacked Column Chart00005BFCSTACKEDBAR2D0c2FCSTACKEDBAR2DStackedBar2DMbar_widget_icon.gifLC2D Stacked Bar Chart00003CGANTT0c2GANTTGanttgantt_widget_icon.gifFWGantt Chart1000042FAILED0c2FAILEDFAILEDtext_widget_icon.pngPreformatted Text1000033MAP0c2MAPMAPmap_widget_icon.jpgMAPMap Chart100003EBULB0c2BULBBulbFWGAUGEbulb_widget_icon.jpgFWBulb Gauge1000061FCSTACKEDAREA2D0c2FCSTACKEDAREA2DStackedArea2DMarea_widget_icon.gifLC2D Staacked Area Chart00FF47WOBJ.BP0c0000B9CWOBJ.PARSEOBJECT0c2SUBROUTINE WOBJ.PARSEOBJECT(JSTR,INDEXPOS,PARSEOBJECT)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json object************************************************************************INCLUDE WOBJ.INCLUDE*IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT - STARTING"*PARSEOBJECT=""CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*IF JSTR[INDEXPOS,1] <> "{" THEN    PSERRORS<-1> = "Invalid Object at position ":INDEXPOS:" : ":JSTR[INDEXPOS,1]    RETURNEND*LEN.JSTR = LEN(JSTR)INDEXPOS+=1**JSONOBJECT(JSONOBJECT$NODECNTR)+=1NODEID=JSONOBJECT(JSONOBJECT$NODECNTR); * WE NEED TO STAY AT THIS NODEID POSITIONJSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEID>="O"; *SET AS OBJECTIF WOBJ.DEBUG THEN    PRINT "PARSEOBJECT: SETTING NODETYPE NODEID:":NODEID:" = O"END*LOOP    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    C=JSTR[INDEXPOS,1]    BEGIN CASE        CASE C="}"            INDEXPOS+=1            IF WOBJ.DEBUG > 1 THEN PRINT "PARSEOBJECT: EXIT CHAR }"            EXIT        CASE C=","            INDEXPOS+=1            CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)        CASE INDEXPOS > LEN.JSTR            PSERRORS<-1>="Missing '}': ":JSTR[LEN.JSTR-20,20]            EXIT    END CASE    *    * ADD KEY/VALUE PAIR    *    JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>+=1    PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" PARSEOBJECT CALLING PARSEKEY"    CALL WOBJ.PARSEKEY(JSTR,INDEXPOS,SKEY)    JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEID,PARTPOS>=SKEY    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" BACK FROM PARSEKEY: ":SKEY[1,10]    *    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" CALLING PARSEVALUE"    CALL WOBJ.PARSEVALUE(JSTR,INDEXPOS,PARSEVALUE)    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" BACK FROM PARSEVALUE N=":NODEID:" P=":PARTPOS:" T=":PARSEVALUE<1>:" F=":PARSEVALUE<2>    BEGIN CASE        CASE PARSEVALUE=""            PSERRORS<-1>="Invalid value syntax for node ":SKEY            RETURN        CASE PARSEVALUE<1>="A" OR PARSEVALUE<1>="O"            * ARRAY            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEID,PARTPOS>=PARSEVALUE<2>        CASE 1            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            V=PARSEVALUE<2>            IF INDEX(V,LF,1) OR INDEX(V,CR,1) THEN                V=OCONV(V,"MX0C")                E="H"            END ELSE                E="A"            END            JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEID,PARTPOS>=V            JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEID,PARTPOS>=E    END CASEREPEATPARSEOBJECT="O"PARSEOBJECT<2>=NODEIDIF WOBJ.DEBUG THEN PRINT "PARSEOBJECT - END OF ROUTINE"RETURNEND0003E3WOBJ.INCLUDE0c2************************************************************************* Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: WOBJ includes for json library************************************************************************COMMON /MVIWOBJ/ PSERRORS,JSONOBJECT(20),WOBJ.DEBUG,PRETTIFY,PRETTIFYCR,INDENT.DEPTH*EQU CR TO CHAR(13), LF TO CHAR(10), TB TO CHAR(9), BS TO CHAR(8), FF TO CHAR(12)NL = CR:LF*EQU INVALID_JSON TO 1EQU INVALID_OBJECT TO 2EQU INVALID_ARRAY TO 3EQU INVALID_BOOLEAN TO 4EQU INVALID_NULL TO 5EQU INVALID_KEY TO 6*EQU JSONOBJECT$NODECNTR TO 2* ARRAY OF NODESEQU JSONOBJECT$NODETYPE TO 3EQU JSONOBJECT$NODELENGTH TO 4EQU JSONOBJECT$NODEPARTS.KEY TO 5EQU JSONOBJECT$NODEPARTS.TYPE TO 6EQU JSONOBJECT$NODEPARTS.FLINK TO 7EQU JSONOBJECT$NODEPARTS.BLINK TO 8EQU JSONOBJECT$NODEPARTS.ENCODING TO 9EQU JSONOBJECT$NODEPARTS.VALUE TO 10* END OF ARRAY OF NODES000248WOBJ.NUMBER.TOSTRING0c2SUBROUTINE WOBJ.NUMBER.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert json number to string************************************************************************INCLUDE WOBJ.INCLUDE*CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)*CALL WOBJ.ENCODE(VALUE,OUT.VALUE)JSON:=OUT.VALUE*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=":VALUERETURNEND000797WOBJ.PARSEKEY0c2SUBROUTINE WOBJ.PARSEKEY(JSTR,INDEXPOS,PARSEKEY)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json property key************************************************************************INCLUDE WOBJ.INCLUDE*PARSEKEY=""IF WOBJ.DEBUG THEN PRINT "PARSEKEY: ENTERING ":INDEXPOS*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*LEN.JSTR = LEN(JSTR)*IFDQUOTE = 0IFSQUOTE = 0LOOPWHILE INDEXPOS > 0 AND INDEXPOS <= LEN.JSTR DO    C = JSTR[INDEXPOS,1]    IF WOBJ.DEBUG > 0 THEN PRINT "PARSEKEY: ":INDEXPOS,C,SEQ(C),PARSEKEY    BEGIN CASE        CASE C = '"'            IF NOT(IFDQUOTE) THEN IFDQUOTE=1 ELSE IFDQUOTE=0            INDEXPOS+=1            IF NOT(IFDQUOTE) THEN                CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)                IF JSTR[INDEXPOS,1] <> ":" THEN                    PSERRORS<-1>="Invalid Key at position ":INDEXPOS:" : ":PARSEKEY                    EXIT                END            END        CASE C = "'"            IF NOT(IFSQUOTE) THEN IFSQUOTE=1 ELSE IFSQUOTE=0            INDEXPOS+=1            IF NOT(IFSQUOTE) THEN                CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)                IF JSTR[INDEXPOS,1] <> ":" THEN                    PSERRORS<-1>="Invalid Key at position ":INDEXPOS:" : ":PARSEKEY                    EXIT                END            END        CASE C = ":"            INDEXPOS+=1            IF NOT(IFDQUOTE) AND NOT(IFSQUOTE) THEN                IF WOBJ.DEBUG THEN PRINT "EXITING"                EXIT            END            PARSEKEY:=C        CASE 1            IF C=LF OR C=CR OR C=TB OR C=" " THEN                NULL            END ELSE                PARSEKEY:=C            END            INDEXPOS+=1    END CASEREPEAT*IF WOBJ.DEBUG THEN PRINT "PARSEKEY: ":PARSEKEYRETURNEND00021FWOBJ.SKIPCHAR0c2SUBROUTINE WOBJ.SKIPCHAR(JSTR,INDEXPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: skip all whitespace************************************************************************INCLUDE WOBJ.INCLUDE*WS = " ()":TB:CR:LF:@AMLEN.JSTR=LEN(JSTR)LOOP WHILE INDEXPOS <= LEN.JSTR DO    IF INDEX(WS,JSTR[INDEXPOS,1],1) = 0 THEN EXIT    INDEXPOS += 1REPEATRETURNEND00030EWOBJ.PARSENULL0c2SUBROUTINE WOBJ.PARSENULL(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json null keyword************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""SAVE.INDEXPOS=INDEXPOS*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)IF OCONV(JSTR[INDEXPOS,4],"MCL") = "null" THEN    INDEXPOS+=4    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    C=JSTR[INDEXPOS,1]    IF INDEX(",]}",C,1)=0 THEN        * invalid terminator - not null    END ELSE        PARSESTRING="null"        RETURN    ENDENDPARSESTRING=""INDEXPOS=SAVE.INDEXPOSRETURNEND000741WOBJ.ARRAY.TOSTRING0c2SUBROUTINE WOBJ.ARRAY.TOSTRING(JSON,POS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert json array to string************************************************************************INCLUDE WOBJ.INCLUDE*JSON:="["; * START OUR STRINGINDENT.DEPTH+=1*IF PRETTIFY THEN JSON:=NLNUMBER.PARTS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,POS>IF WOBJ.DEBUG THEN PRINT "ARRAY.TOSTRING: POS=":POS:" NUMBER.PARTS=":NUMBER.PARTSFOR P=1 TO NUMBER.PARTS    PART.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,POS,P>    IF WOBJ.DEBUG THEN PRINT "ARRAY.TOSTRING: POS=":POS:" P=":P:" T=":PART.TYPE    IF PRETTIFY AND P=1 THEN JSON:=NL    CALL WOBJ.PRETTIFY.INDENT(JSON,POS)    BEGIN CASE        CASE PART.TYPE="S"            CALL WOBJ.STRING.TOSTRING(JSON,POS,P)        CASE PART.TYPE="B"            CALL WOBJ.BOOLEAN.TOSTRING(JSON,POS,P)        CASE PART.TYPE="D"            CALL WOBJ.NUMBER.TOSTRING(JSON,POS,P)        CASE PART.TYPE="N"            CALL WOBJ.NULL.TOSTRING(JSON,POS,P)        CASE PART.TYPE="O"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "OBJ FLINK=":PART.FLINK            CALL WOBJ.OBJECT.TOSTRING(JSON,PART.FLINK)        CASE PART.TYPE="A"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "FL=":PART.FLINK            CALL WOBJ.ARRAY.TOSTRING(JSON,PART.FLINK)    END CASE    IF P <> NUMBER.PARTS THEN        JSON:=", "        IF PRETTIFY THEN JSON:=NL    ENDNEXT P*IF PRETTIFY AND NUMBER.PARTS THEN    JSON:=NL    CALL WOBJ.PRETTIFY.INDENT(JSON,POS)ENDJSON:="]"*IF PRETTIFY THEN JSON:=NLINDENT.DEPTH-=1RETURNEND00066CWOBJ.ENCODE0c2SUBROUTINE WOBJ.ENCODE(IN.STR,OUT.STR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: encode json string*************************************************************************** THIS PROGRAM WILL CONVERT ALL BAD CHARACTERS TO AN ESCAPED CHARACTER***INCLUDE WOBJ.INCLUDE**OPEN 'RESULT.FILE' TO RFILE ELSE STOP* WE NEED TO ENCODE* " = \"   (34)* \ = \\    (92)* / = \/* CHAR(7) = \b* CHAR(13) = \r* char(10) = \n* char(12) = \f* char(9)  = \tOUT.STR=''L=LEN(IN.STR)CONVERT @AM TO LF IN IN.STR; * LETS SWITCH 254 TO LF BE DEFAULTFOR X=1 TO L    C=IN.STR[X,1]    SEQ.C=SEQ(C)    ENCODE=0    *IF SEQ.C < 32 THEN ENCODE=1; * BELOW SPACE    *IF SEQ.C > 32 AND SEQ.C < 48 THEN ENCODE=1; * LETS ENCODE ALL OF THIS !@$%^&*()    IF SEQ.C=34 THEN ENCODE=1    IF SEQ.C=92 THEN ENCODE=1    * IF SEQ.C=47 THEN ENCODE=1    *IF SEQ.C > 126 THEN ENCODE = 1; * LETS ENCODE ALL THE HIGH ENTRIES    *IF SEQ.C >= 91 AND SEQ.C <= 96 THEN ENCODE=1    IF ENCODE THEN        BEGIN CASE            CASE SEQ.C=7; OUT.STR='\b'            CASE C='\'; OUT.STR:='\\'                *CASE C='/'; OUT.STR:='\/'            CASE C='"'; OUT.STR:='\"'            CASE SEQ.C=10                OUT.STR:='\n'                IF PRETTIFYCR THEN OUT.STR:=NL            CASE SEQ.C=13; OUT.STR:='\r'            CASE SEQ.C=12; OUT.STR:='\f'            CASE 1; OUT.STR:='\u00':OCONV(C,'MX0C')        END CASE    END ELSE        OUT.STR=OUT.STR:C    ENDNEXT XRETURNEND0003B5WOBJ.PARSEBOOLEAN0c2SUBROUTINE WOBJ.PARSEBOOLEAN(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json boolean value************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)SAVE.INDEXPOS=INDEXPOSBEGIN CASE    CASE OCONV(JSTR[INDEXPOS,4],"MCL") = "true"        PARSESTRING="true"        INDEXPOS+=4    CASE OCONV(JSTR[INDEXPOS,5],"MCL") = "false"        PARSESTRING="false"        INDEXPOS+=5    CASE 1        * not boolean        INDEXPOS=SAVE.INDEXPOS        RETURNEND CASECALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)C=JSTR[INDEXPOS,1]IF INDEX(",]}",C,1)=0 THEN    * invalid terminator - not boolean    PARSESTRING=""    INDEXPOS=SAVE.INDEXPOSENDRETURNEND001224WOBJ.FINDNODE0c2SUBROUTINE WOBJ.FINDNODE(INNODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: find a json node in parsed object structure************************************************************************INCLUDE WOBJ.INCLUDE** NEED TO BREAK OUR NODE REQUEST UP INTO IT'S SEPERATE PARTS*RERR=""LASTNODE=""*OBJECT.SEPERATOR = "."NODES=INNODECONVERT OBJECT.SEPERATOR TO @AM IN NODES*NODEPOS=1; * WE ALWAYS START WITH THE FIRST ONE.PARTPOS=0; * START AS ZERO 6/19/2017 - PAPCHILDPOS=0;* SET WHEN OUR NODE IS AN OBJECT OR ARRAYPARTTYPE=""*NUMBER.NODES=DCOUNT(NODES,@AM)IF INDEX(NODES,"[",1) THEN* We need to trick this into seeing an array as another node level    ORIG.NODES=NODES    NODES=""    FOR A=1 TO NUMBER.NODES        NODE=ORIG.NODES<A>        IF INDEX(NODE,"[",1) THEN            NUMBER.ARRAYS = COUNT(NODE,"[")            ACTUAL.NODE=FIELD(NODE,"[",1)            NODES<-1>=ACTUAL.NODE            FOR B=1 TO NUMBER.ARRAYS                K=INDEX(NODE,"]",B)                NODES<-1>=NODE[1,K]            NEXT B        END ELSE            NODES<-1>=NODE        END    NEXT AENDNUMBER.NODES=DCOUNT(NODES,@AM)IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: number of parts in ":INNODE:": ":NUMBER.NODESFOR A=1 TO NUMBER.NODES    NODE=NODES<A>    LASTNODE=NODE    NODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEPOS>    IF WOBJ.DEBUG THEN PRINT "  part ":A:" key=":NODE:" pos=":NODEPOS:" type=":NODETYPE    BEGIN CASE        CASE NODETYPE="O"            JUSTNODE=FIELD(NODE,"[",1)            IF WOBJ.DEBUG THEN                PRINT "    locating ":JUSTNODE                PRINT "          in ":JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>                NUM.SUBS=DCOUNT(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>,CHAR(252))                PRINT 'NUM.SUBS=':NUM.SUBS            END            LOCATE JUSTNODE IN JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS> SETTING PARTPOS ELSE PARTPOS=0            IF NOT(PARTPOS) THEN                TEMP.NODE=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>                LOCATE JUSTNODE IN TEMP.NODE<1,1> SETTING PARTPOS ELSE PARTPOS=0                IF WOBJ.DEBUG THEN                    PRINT 'TEMP.NODE=':TEMP.NODE                    PRINT 'JUSTNODE=':JUSTNODE                    PRINT 'PARTPOS=':PARTPOS                END            END        CASE NODETYPE="A"            NUMBER.ARRAYS=COUNT(NODE,"[")            ST=INDEX(NODE,"[",NUMBER.ARRAYS)            EN=INDEX(NODE,"]",NUMBER.ARRAYS)            IF ST>1 AND EN>ST THEN                PARTPOS=NODE[ST+1,EN-ST-1]            END ELSE                PARTPOS=''            END            IF NOT((PARTPOS MATCHES '1N0N') OR (PARTPOS = '-1')) THEN                RERR=2                RERR<2>="Numeric subscript required for array element"                IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: ":RERR<2>                RETURN            END            IF PARTPOS<0 THEN PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> ;* ALLOW -1, SINCE WOBJ.SET USES THAT TO CREATE NEXT ELEMENT            PARTPOS += 1            IF PARTPOS > JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> THEN                IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: PARTPOS=":PARTPOS:" LEN=":JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>:" NODEPOS=":NODEPOS                PARTPOS=0            END    END CASE    IF NOT(PARTPOS) THEN        RERR=1        RERR<2>="Node ":NODE:" not found at level ":NODEPOS        IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: ":RERR<2>        RETURN    END    PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    IF (PARTTYPE="A" OR PARTTYPE="O") THEN        IF A=NUMBER.NODES THEN* RETURN CHILD OBJECT NODE POSITION            CHILDPOS=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>        END ELSE* FOLLOW FORWARD LINK TO CHILD NODE            NODEPOS=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>        END    END ELSE        IF A<>NUMBER.NODES THEN            RERR=1            RERR<2>="Node ":NODE:" not found at level ":NODEPOS            IF WOBJ.DEBUG THEN                PRINT "WOBJ.FINDNODE: ":RERR<2>                PRINT "    Node type ":PARTTYPE:" cannot have properties or array elements"            END            RETURN        END    ENDNEXT AIF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: nodepos=":NODEPOS:" partpos=":PARTPOS:" type=":PARTTYPE:" childpos=":CHILDPOSRETURNEND001968WOBJ.SET0c2SUBROUTINE WOBJ.SET(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: set json node to value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: allow Object and Array properties to be set, passing*   a JSON string representation of the node.************************************************************************INCLUDE WOBJ.INCLUDE*IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: NODE=":NODE:" ACTION=":ACTION*SACTION=FIELD(ACTION,".",2)IF NODE="" THEN    IF SACTION <> "OBJECT" THEN            RERR=1        RERR<2>="Node cannot be null"    END ELSE        CALL WOBJ.PARSE(VALUE,NEWOBJ)        IF PSERRORS#"" THEN            RERR=2            RERR<2> = PSERRORS            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET.OBJECT: parse failure: ":RERR<2>        END    END            RETURNEND*CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" LASTNODE=":LASTNODE:" RERROR=":RERR<2>*IF NOT(NODEPOS) THEN    RERR=1    RERR<2>="Node not found"    RETURNEND** CHECK THE NODE WE ARE SETTING PROPERTY TONODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEPOS>IF NODETYPE#"O" AND NODETYPE#"A" THEN    RERR=1    RERR<2>="Parent node must be an object or array"    RETURNEND*IGNORE.RERR=""IF NODETYPE="O" THEN PARTKEY=LASTNODE ELSE PARTKEY=""*IF NOT(PARTPOS) THEN* ENSURE PARENT NODE EXISTS    NUM.PARTS=DCOUNT(NODE,".")    FINAL.NODE=FIELD(NODE,".",NUM.PARTS)    IF INDEX(FINAL.NODE,"[",1) THEN        NUMBER.ARRAYS=COUNT(FINAL.NODE,"[")        PARENT.NODE=NODE[1,LEN(NODE)-LEN(FINAL.NODE)+INDEX(FINAL.NODE,"[",NUMBER.ARRAYS)-1]    END ELSE        NUMBER.ARRAYS=0        PARENT.NODE=NODE[1,LEN(NODE)-LEN(FINAL.NODE)-1]    END    IF NUM.PARTS > 1 OR NUMBER.ARRAYS > 0 THEN        CALL WOBJ.FINDNODE(PARENT.NODE,PARENT.NODEPOS,PARENT.PARTPOS,PARENT.CHILDPOS,PARENT.LASTNODE,"")        IF NOT(PARENT.PARTPOS) THEN            RERR=1            RERR<2>="Parent node not found"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END    END** WE NEED TO ADD A NEW ELEMENT    IF NODETYPE="O" THEN        PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>        PARTPOS += 1        JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>=PARTPOS        CALL WOBJ.SET.PART(NODEPOS,PARTPOS,"N",PARTKEY,"",IGNORE.RERR) ; * DUMMY NULL ELEMENT WILL BE REPLACED IN FINAL WOBJ.SET.PART CALL    END ELSE        NUMBER.ARRAYS=COUNT(LASTNODE,"[")        ST=INDEX(LASTNODE,"[",NUMBER.ARRAYS)        EN=INDEX(LASTNODE,"]",NUMBER.ARRAYS)        IF ST>1 AND EN>ST THEN            PARTPOS=LASTNODE[ST+1,EN-ST-1]        END ELSE            PARTPOS=''        END        IF NOT((PARTPOS MATCHES '1N0N') OR (PARTPOS = '-1')) THEN            RERR=2            RERR<2>="Numeric subscript required for setting array element"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END        IF PARTPOS<0 THEN            PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>+1        END ELSE            PARTPOS += 1 ; * ZERO-BASED ARRAY INDEX -> 1 BASED PARTPOS        END        LASTPARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>+1        FOR P=LASTPARTPOS TO PARTPOS            CALL WOBJ.SET.PART(NODEPOS,P,"N",PARTKEY,"",IGNORE.RERR)        NEXT P        IF PARTPOS>JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> THEN            JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>=PARTPOS        END    ENDEND*PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: PARTTYPE=":PARTTYPE*IF PARTTYPE="O" OR PARTTYPE="A" THEN** DELETE NESTED NODE BEFORE SETTING NEW VALUE    IF NODETYPE="A" THEN** ARRAYS ARE SPECIAL, BECAUSE WE DO NOT WANT TO DELETE THE ARRAY POSITION* THAT WE ARE SETTING, WHICH WILL SLIDE THE ARRAY DOWN BY ONE. INSTEAD,* INSERT A NULL ELEMENT AFTER THE ONE WE NEED TO DELETE, THEN AFTER* DELETING, WE CAN SIMPLY REPLACE THE NULL NODE.*        JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,NODEPOS,PARTPOS+1,"N")        JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> += 1    END*    CALL WOBJ.DELETE("DELETE",NODE,"",IGNORE.RERR)* BECAUSE DELETING MAY ALTER JSONOBJECT STRUCTURE, REFRESH NODEPOS & PARTPOS    CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,IGNORE.RERR)    IF NODETYPE="O" THEN        IF PARTPOS=0 THEN            PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>            PARTPOS += 1            JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>=PARTPOS            CALL WOBJ.SET.PART(NODEPOS,PARTPOS,"N",PARTKEY,"",IGNORE.RERR)        END ELSE            RERR=2            RERR<2>="While setting node ":NODE:", existing object was deleted, yet it is still here!"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END    END ELSE        IF PARTPOS=0 THEN            RERR=2            RERR<2>="While setting node ":NODE:", existing array element was deleted, but dummy element is missing!"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END    ENDEND** NOW WE ARE SAFE TO SET NEW VALUEBEGIN CASE    CASE SACTION="ARRAY" OR SACTION="OBJECT"        PARTTYPE=SACTION[1,1]    CASE SACTION="NULL"        PARTTYPE="N"    CASE SACTION="NUMBER"        PARTTYPE="D"    CASE SACTION="BOOLEAN"        PARTTYPE="B"    CASE SACTION="STRING" OR SACTION=""        PARTTYPE="S"    CASE 1        RERR=1        RERR<2>="Unknown value type ":SACTION:", assume STRING"        PARTTYPE="S"END CASECALL WOBJ.SET.PART(NODEPOS,PARTPOS,PARTTYPE,PARTKEY,VALUE,RERR)RETURNEND000E1FWOBJ.SET.PART0c2SUBROUTINE WOBJ.SET.PART(NODEPOS,PARTPOS,PARTTYPE,PARTKEY,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: set json part value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: allow Object and Array properties to be set, passing*   a JSON string representation of the node.************************************************************************INCLUDE WOBJ.INCLUDE*ENCODING=""FLINK=""* VALIDATE THE VALUE DATABEGIN CASE    CASE PARTTYPE="O" OR PARTTYPE="A"        OUT.VALUE=""    CASE PARTTYPE="N"        OUT.VALUE=""        IF VALUE#"" THEN            RERR=1            RERR<2>="Value ignored for NULL property"        END    CASE PARTTYPE="D"        OUT.VALUE=VALUE        IF VALUE="" THEN            OUT.VALUE=0        END ELSE            IF NOT(NUM(VALUE)) THEN                RERR=1                RERR<2>="Non-numeric value for NUMBER property; zero used"                OUT.VALUE=0            END        END    CASE PARTTYPE="B"        OUT.VALUE=OCONV(VALUE,"MCL")        IF OUT.VALUE#"true" AND OUT.VALUE#"false" THEN            RERR=1            RERR<2>="Invalid boolean value: must be true or false; false used"            OUT.VALUE="false"        END            CASE 1        ENCODING="H"        BEGIN CASE            CASE INDEX(VALUE,@AM,1)            CASE INDEX(VALUE,@VM,1)            CASE INDEX(VALUE,@SVM,1)            CASE INDEX(VALUE,LF,1)            CASE INDEX(VALUE,CR,1)            CASE 1                ENCODING="A"                OUT.VALUE=VALUE        END CASE        IF ENCODING="H" THEN OUT.VALUE=OCONV(VALUE,"MX0C")END CASE*IF PARTTYPE="O" OR PARTTYPE="A" THEN* SET UP THE NEW OBJECT    FLINK=JSONOBJECT(JSONOBJECT$NODECNTR)+1    IF VALUE="" THEN        JSONOBJECT(JSONOBJECT$NODECNTR)=FLINK ; * UPDATE NODE COUNT FOR NULL OBJECT    END ELSE* PARSE OBJECT OR ARRAY                MATBUILD SAVEJSONOBJECT FROM JSONOBJECT ; * SAVE CURRENT OBJECT IN CASE OF PARSE FAILURE        INDEXPOS=1        IF PARTTYPE="O" THEN            CALL WOBJ.PARSEOBJECT(VALUE,INDEXPOS,PARSERESULT)        END ELSE            CALL WOBJ.PARSEARRAY(VALUE,INDEXPOS,PARSERESULT)        END        IF PARSERESULT="" THEN            RERR=2            IF PARTTYPE="O" THEN                RERR<2>="Object parse failure"            END ELSE                RERR<2>="Array parse failure"            END        END ELSE* MAKE SURE WE CONSUMED ENTIRE JSTR            CALL WOBJ.SKIPCHAR(VALUE,INDEXPOS)            IF INDEXPOS <= LEN(VALUE) THEN                RERR=2                RERR<2>="Extra data (":(LEN(VALUE)-INDEXPOS+1):" characters) after final close brace ignored"            END                    END        IF RERR<1> >= 2 THEN* OBJECT OR ARRAY PARSE ERROR            MATPARSE JSONOBJECT FROM SAVEJSONOBJECT            PARTTYPE="N"            FLINK=""        END    ENDEND* SET THE PART PROPERTIESJSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>        =    PARTTYPEJSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS,PARTPOS>         =    PARTKEYJSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEPOS,PARTPOS>       =    OUT.VALUEJSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEPOS,PARTPOS>    =    ENCODINGJSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>       =    FLINKIF WOBJ.DEBUG THEN PRINT "WOBJ.SET.PART: T=":PARTTYPE:" K=":PARTKEY:" E=":ENCODING:" OUT.VALUE=":OUT.VALUE*RETURNEND001A13WOBJ.DELETE0c2SUBROUTINE WOBJ.DELETE(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: delete a json node in parsed object structure************************************************************************INCLUDE WOBJ.INCLUDE*VALUE=""DONE=0LOOP    CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)    IF WOBJ.DEBUG THEN PRINT "WOBJ.DELETE: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" RERROR=":RERR<2>    IF NOT(NODEPOS) OR NOT(PARTPOS) THEN        RERR=1        RERR<2>="Node not found"        RETURN    END        NODETYPE = JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE NODETYPE = 'O' AND CHILDPOS > 0* DELETE NESTED OBJECTS BEFORE DELETING PARENT NODE            NEST.COUNT = 0            NUM.PARTS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,CHILDPOS>            FOR I=1 TO NUM.PARTS                PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,CHILDPOS,I>                IF PARTTYPE = 'O' OR PARTTYPE = 'A' THEN                    PARTKEY=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,CHILDPOS,I>                    CALL WOBJ.DELETE(ACTION,NODE:".":PARTKEY,VALUE,RERR)                    NEST.COUNT += 1                    EXIT ;* AFTER MODIFYING THE JSONOBJECT STRUCTURE, NEED TO CALL FINDNODE AGAIN                END            NEXT I            IF NEST.COUNT = 0 THEN* DELETE OBJECT NODE                JSONOBJECT(JSONOBJECT$NODETYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODETYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODELENGTH)=DELETE(JSONOBJECT(JSONOBJECT$NODELENGTH),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODECNTR) -= 1* ADJUST LINKS TO ACCOUNT FOR DELETED NODE                NUM.NODES = JSONOBJECT(JSONOBJECT$NODECNTR)                FOR I = 1 TO NUM.NODES                    NUM.PARTS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,I>                    FOR J = 1 TO NUM.PARTS                        FLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J>                        IF FLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J> = FLINK - 1                        END                        BLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J>                        IF BLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J> = BLINK - 1                        END                    NEXT J                NEXT I                DONE = 1            END        CASE NODETYPE = 'A' AND CHILDPOS > 0* DELETE NESTED OBJECTS BEFORE DELETING PARENT NODE            NEST.COUNT = 0            NUM.ELEMS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,CHILDPOS>            FOR I = 1 TO NUM.ELEMS                PARTTYPE = JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,CHILDPOS,I>                IF PARTTYPE = 'O' OR PARTTYPE = 'A' THEN* DELETE NESTED OBJECTS BEFORE DELETING PARENT NODE                    CALL WOBJ.DELETE(ACTION,NODE:"[":(I-1):"]",VALUE,RERR)                    NEST.COUNT += 1                    EXIT ;* AFTER MODIFYING THE JSONOBJECT STRUCTURE, NEED TO CALL FINDNODE AGAIN                END            NEXT I* AFTER MODIFYING THE JSONOBJECT STRUCTURE, NEED TO CALL FINDNODE AGAIN            IF NEST.COUNT = 0 THEN* DELETE ARRAY NODE                JSONOBJECT(JSONOBJECT$NODETYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODETYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODELENGTH)=DELETE(JSONOBJECT(JSONOBJECT$NODELENGTH),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODECNTR) -= 1* ADJUST LINKS TO ACCOUNT FOR DELETED NODE                NUM.NODES = JSONOBJECT(JSONOBJECT$NODECNTR)                FOR I = 1 TO NUM.NODES                    NUM.PARTS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,I>                    FOR J = 1 TO NUM.PARTS                        FLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J>                        IF FLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J> = FLINK - 1                        END                        BLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J>                        IF BLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J> = BLINK - 1                        END                    NEXT J                NEXT I                DONE = 1            END        CASE 1            DONE = 1    END CASEUNTIL DONE DO REPEAT* DELETE SIMPLE NODEJSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> -= 1*RETURNEND001C67WOBJ.TEST0c2************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: WOBJ.TEST - QC Testing tool for WOBJ************************************************************************* Build test json to parse*INCLUDE WOBJ.CHOOSE.WOBJJSON =  \{\JSON := \ "stringtest":"stringtestvalue",\JSON := \ "numbertest": 100.12,\JSON := \ "booleantesttrue": True, \JSON := \ "booleantestfalse": False, \JSON := \ "nulltest": null \JSON := \}\** Lets build the objCALL @WOBJ.RTNE(TESTOBJ,"VERSION","",VERSION,"",RERR)PRINT "VERSION: ":VERSIONCALL @WOBJ.RTNE(TESTOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.ARRAY","arraytest","[]","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","arraytest[-1]","1","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","arraytest[-1]","2","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.OBJECT","objecttest",'{ "objecttestv1":"ok" }',"",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","stringtest","stringtestvalue","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.NUMBER","numbertest",100.12,"",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.BOOLEAN","booleantesttrue","True","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.BOOLEAN","booleantestfalse","False","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.NULL","nulltest","NULL","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"TOSTRING","",JSON,"",RERR)TESTOBJ=""** TEST 1 - PARSE*TEST="parse"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"FROMSTRING","",JSON,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Parse ok"   TEST.STATUS=1ENDGOSUB end.test** TEST 2 - GetString*TEST="GetString"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","stringtest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="String Found: (":VALUE:")"   IF VALUE="stringtestvalue" THEN      TEST.STATUS=1   END ELSE       TEST.STATUS=0   ENDENDGOSUB end.test** TEST 3 - GetNumber*TEST="GetNumber"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","numbertest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Number Found: (":VALUE:")"   BEGIN CASE      CASE NOT(NUM(VALUE))      CASE VALUE=100.12         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 4 - GETBoolean*TEST="GetBooleanTrue"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","booleantesttrue",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Boolean Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="true"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 5 - GETBoolean*TEST="GetBooleanFalse"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","booleantestfalse",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Boolean Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="false"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 6 - get null*TEST="GetNull"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","nulltest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="testnull Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="null"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 7 - get length*TEST="LENGTH"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"LENGTH","arraytest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="LENGTH(arraytest) Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="2"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 8 get array sub part*TEST="get array part"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","arraytest[1]",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="arraytest[2] Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="2"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 9 - get object keys*TEST="KEYS"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"KEYS","objecttest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="KEYS Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="objecttestv1"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 10- add item and retrieve*TEST="addstring2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","string2","string2","",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Added string2"ENDGOSUB end.test** TEST 11 - get string2*TEST="getstring2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","string2",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="string2 Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="string2"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 12- add item and retrieve*TEST="addnull2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.NULL","null2","null","",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Add Null2"ENDGOSUB end.test** TEST 11 - get NULL2*TEST="getnull2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","null2",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="null2 Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="null"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 12 - Add blank Object*TEST="Add blank object"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.OBJECT","nullobject","","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET","nullobject.nullfield","nullvalue","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"GET","nullobject.nullfield",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) AND VALUE="nullvalue" THEN   TEST.MSG="nullfield found "   TEST.STATUS=1END ELSE   TEST.MSG="nullfield not found "ENDTEST.MSG:=' (':VALUE:')'GOSUB end.test** TEST 13 - Add blank array*TEST="Add blank array"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.ARRAY","nullarray","","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET","nullarray[-1]","nullvalue","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"GET","nullarray[0]",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) AND VALUE="nullvalue" THEN   TEST.MSG="nullfield found "   TEST.STATUS=1END ELSE   TEST.MSG="nullfield not found "ENDTEST.MSG:=' (':VALUE:')'GOSUB end.test** TEST 14 - Test TOJSONTEST="Test TOJSON"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"TOJSON","",TJSON,"PRETTIFY",RERR)GOSUB process.errorTEST.STATUS=0TEST.MSG="Testing JSON"IF NOT(RERR<1>) THEN   IF INDEX(TJSON,"arraytest",1) THEN   TEST.MSG="nullfield found "   TEST.STATUS=1   ENDEND ELSE   TEST.MSG=""ENDGOSUB end.test** TEST 15 - Test FROMJSONTEST="Test FROMJSON"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ2,"FROMJSON","",TJSON,"",RERR)CALL @WOBJ.RTNE(TESTOBJ2,"GET","stringtest",VALUE,"",RERR)GOSUB process.errorTEST.MSG="stringtestvalue=(":VALUE:")"TEST.STATUS=0IF NOT(RERR<1>) THEN   IF VALUE="stringtestvalue" THEN   TEST.STATUS=1   ENDENDGOSUB end.testCALL @WOBJ.RTNE(TESTOBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR)PRINT OUT.JSONSTOP*GOSUB start.testRETURN*process.error: *IF RERR<1> THEN   TEST.STATUS=-1   TEST.MSG=RERR<1>ENDRETURN**start.test: *TEST.STATUS=0TEST.MSG="Success"PRINT "Test: ":TEST[1,20]"L(#20)":RETURN*end.test: *PRINT "  ":TEST.MSG[1,60]"L(#60)":PRINT " ":IF TEST.STATUS THEN PRINT "[Ok    ]" ELSE PRINT @(-13):"[Failed]":@(-14)RETURN0009CEWOBJ.OBJECT.TOSTRING0c2SUBROUTINE WOBJ.OBJECT.TOSTRING(JSON,POS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert parsed json object node to string************************************************************************INCLUDE WOBJ.INCLUDE*JSON:="{"; * START OUR STRINGINDENT.DEPTH+=1*IF PRETTIFY THEN JSON:=NLNUMBER.PARTS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,POS>IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: POS=":POS:" NUMBER.PARTS=":NUMBER.PARTS** OPTION TO SORT THIS**SORTTYPE="NSBASIC"SORTTYPE=""BEGIN CASE     CASE 1        KEYS=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,POS>        CONVERT @SVM TO @AM IN KEYS        SORTED.KEYS=KEYSEND CASEACTUAL.KEYS=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,POS>FOR PP=1 TO NUMBER.PARTS    PART.KEY=SORTED.KEYS<PP>    LOCATE PART.KEY IN ACTUAL.KEYS<1,1> SETTING P ELSE        IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: COULD NOT LOCATE ":PART.KEY:" IN ":ACTUAL.KEYS    END    PART.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,POS,P>    PART.KEY=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,POS,P>    IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: POS=":POS:" P=":P:" T=":PART.TYPE:" K=":PART.KEY    IF PP=1 AND PRETTIFY THEN JSON:=NL    CALL WOBJ.ENCODE(PART.KEY,OUT.PART.KEY)    CALL WOBJ.PRETTIFY.INDENT(JSON,POS)    JSON:='"':OUT.PART.KEY:'": '    BEGIN CASE        CASE PART.TYPE="S"            CALL WOBJ.STRING.TOSTRING(JSON,POS,P)        CASE PART.TYPE="B"            CALL WOBJ.BOOLEAN.TOSTRING(JSON,POS,P)        CASE PART.TYPE="D"            CALL WOBJ.NUMBER.TOSTRING(JSON,POS,P)        CASE PART.TYPE="N"            CALL WOBJ.NULL.TOSTRING(JSON,POS,P)        CASE PART.TYPE="O"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: FL=":PART.FLINK            CALL WOBJ.OBJECT.TOSTRING(JSON,PART.FLINK)        CASE PART.TYPE="A"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: FL=":PART.FLINK            CALL WOBJ.ARRAY.TOSTRING(JSON,PART.FLINK)    END CASE    IF PP <> NUMBER.PARTS THEN        JSON:=", "        IF PRETTIFY THEN JSON:=NL    ENDNEXT PP*IF PRETTIFY THEN    JSON:=NL    PASS.POS=POS-1    CALL WOBJ.PRETTIFY.INDENT(JSON,PASS.POS)ENDJSON:="}"*IF PRETTIFY THEN JSON:=NLINDENT.DEPTH -= 1RETURNEND000459WOBJ.KEYS0c2SUBROUTINE WOBJ.KEYS(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: return list of elements in a json node in parsed object structure************************************************************************INCLUDE WOBJ.INCLUDE*VALUE=""CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)**IF WOBJ.DEBUG THEN PRINT "WOBJ.KEYS: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" LASTNODE=":LASTNODE:" RERR=":RERR<2>*IF NOT(NODEPOS) THEN    RERR=1    RERR<2>="Node not found"     RETURNENDIF NODE#"" AND NOT(PARTPOS) THEN    RERR=1    RERR<2>="Node not found"     RETURNENDIF NODE="" THEN    NODEPOS=1    CHILDPOS=1ENDIF NOT(CHILDPOS) THEN   RERR=1   RERR<2>="Node is not an object"   RETURNENDNODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,CHILDPOS>IF NODETYPE#"O" THEN   RERR=1   RERR<2>="Node is not an object"   RETURNENDVALUE=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,CHILDPOS>RETURNEND0001C5COMPILE.TXT0c2WOBJWOBJ.ARRAY.TOSTRINGWOBJ.BOOLEAN.TOSTRINGWOBJ.DECODE.PARTWOBJ.DELETEWOBJ.ENCODEWOBJ.FINDNODEWOBJ.GETWOBJ.INCLUDEWOBJ.KEYSWOBJ.NULL.TOSTRINGWOBJ.NUMBER.TOSTRINGWOBJ.OBJECT.TOSTRINGWOBJ.PARSEWOBJ.PARSEARRAYWOBJ.PARSEBOOLEANWOBJ.PARSEKEYWOBJ.PARSENULLWOBJ.PARSENUMBERWOBJ.PARSEOBJECTWOBJ.PARSESTRINGWOBJ.PARSEVALUEWOBJ.PRETTIFY.INDENTWOBJ.SETWOBJ.SET.PARTWOBJ.SKIPCHARWOBJ.STRING.TOSTRINGWOBJ.TESTWOBJ.TOSTRING0002C7WOBJ.TOSTRING0c2SUBROUTINE WOBJ.TOSTRING(JSON)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: internal convert json object to string************************************************************************INCLUDE WOBJ.INCLUDE*POS=1OBJ.TYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,POS>IF OBJ.TYPE="" OR POS > JSONOBJECT$NODECNTR THEN RETURNIF WOBJ.DEBUG THEN PRINT "FIRST OBJECT=":OBJ.TYPEBEGIN CASE    CASE OBJ.TYPE="A"        CALL WOBJ.ARRAY.TOSTRING(JSON,POS)    CASE OBJ.TYPE="O"        CALL WOBJ.OBJECT.TOSTRING(JSON,POS)END CASERETURNEND0002AFWOBJ.DECODE.PART0c2SUBROUTINE WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: decode json part value************************************************************************INCLUDE WOBJ.INCLUDE*PARTENCODING =  JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEPOS,PARTPOS>PARTVALUE    =  JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEPOS,PARTPOS>*BEGIN CASE    CASE PARTENCODING="H"        VALUE=ICONV(PARTVALUE,"MX0C"); * UV    CASE 1        VALUE=PARTVALUEEND CASE*RETURNEND000529WOBJ.GET0c2SUBROUTINE WOBJ.GET(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: get json element value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: if specified node is an Object or Array, return*   a JSON string representation of the node.************************************************************************INCLUDE WOBJ.INCLUDE*VALUE=""IF NODE="" THEN    CALL WOBJ.OBJECT.TOSTRING(VALUE,1) ; * Root object    RETURNEND*CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF NODEPOS > 0 AND PARTPOS > 0 THEN    OBJ.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE OBJ.TYPE="O"            CALL WOBJ.OBJECT.TOSTRING(VALUE,CHILDPOS)        CASE OBJ.TYPE="A"            CALL WOBJ.ARRAY.TOSTRING(VALUE,CHILDPOS)        CASE OBJ.TYPE="N"            VALUE="null"; * 4/23/202 - Return null value        CASE 1            CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)    END CASEEND ELSE    VALUE="" ; * NODE NOT FOUND!ENDIF WOBJ.DEBUG THEN PRINT "WOBJ.GET: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" VALUE=":VALUERETURNEND0008BCWOBJ.PARSESTRING0c2SUBROUTINE WOBJ.PARSESTRING(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json string value************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""*SAVE.INDEXPOS=INDEXPOSCALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)IFQUOTE = JSTR[INDEXPOS,1]INDEXPOS+=1LEN.JSTR=LEN(JSTR)*LOOPWHILE INDEXPOS > 0 AND INDEXPOS < LEN.JSTR DO    C = JSTR[INDEXPOS,1]    IF WOBJ.DEBUG > 1 THEN PRINT "PARSESTRING: LOOKING AT (":C:")"    BEGIN CASE        CASE C = "\"            INDEXPOS+=1            C=JSTR[INDEXPOS,1]            BEGIN CASE                CASE C = \"\ OR C = "\" OR C= "/" OR C = "'"                    PARSESTRING:=C                    INDEXPOS+=1                CASE C = "b"                    PARSESTRING:=BS                    INDEXPOS+=1                CASE C = "f"                    PARSESTRING:=FF                    INDEXPOS+=1                CASE C = "n"                    PARSESTRING:=LF                    INDEXPOS+=1                CASE C = "r"                    PARSESTRING:=CR                    INDEXPOS+=1                CASE C = "t"                    PARSESTRING:=TB                    INDEXPOS+=1                CASE C = "u"                    INDEXPOS+=1                    CODE=JSTR[INDEXPOS,4]                    IF CODE[1,2]="00" THEN                        PARSESTRING:=ICONV(CODE[3,2],"MX0C")                    END ELSE                        PARSESTRING:="_" ;* Poor substitute for invalid Unicode character!                        PSERRORS<-1> = "Invalid Unicode character at position ":INDEXPOS-1:" : u":CODE                    END                    INDEXPOS+=4            END CASE        CASE C = IFQUOTE            INDEXPOS+=1            EXIT        CASE 1            PARSESTRING:=C            INDEXPOS+=1    END CASEREPEATIF C # IFQUOTE THEN    * string not terminated!    PARSESTRING=""    INDEXPOS=SAVE.INDEXPOSENDIF WOBJ.DEBUG THEN PRINT "PARSESTRING: EXITING: ":PARSESTRINGRETURNEND000120WOBJ.UNASSIGNED.INCLUDE0c2IF NOT(ASSIGNED(PASSEDOBJ)) THEN RERR='PARAM1 BLANK'IF NOT(ASSIGNED(ACTION)) THEN RERR='PARAM2 (ACTION) NOT ASSIGNED'IF NOT(ASSIGNED(NODE)) THEN RERR='PARAM3 (NODE) NOT ASSIGNED'IF NOT(ASSIGNED(VALUE)) THEN VALUE=""IF NOT(ASSIGNED(OPTIONS)) THEN OPTIONS=""000258WOBJ.BOOLEAN.TOSTRING0c2SUBROUTINE WOBJ.BOOLEAN.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert json boolean to string************************************************************************INCLUDE WOBJ.INCLUDE*CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)*CALL WOBJ.ENCODE(VALUE,OUT.VALUE)JSON:=OCONV(OUT.VALUE,"MCL")*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=":VALUERETURNEND0001E4WOBJ.NULL.TOSTRING0c2SUBROUTINE WOBJ.NULL.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: json null to string************************************************************************INCLUDE WOBJ.INCLUDE*JSON:="null"*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=null"RETURNEND0001E1WOBJ.PRETTIFY.INDENT0c2SUBROUTINE WOBJ.PRETTIFY.INDENT(JSON,POS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: indent json string************************************************************************INCLUDE WOBJ.INCLUDE*INDENTSTEP=2*IF PRETTIFY THEN    JSON:=STR(" ",(INDENT.DEPTH*INDENTSTEP))END*RETURNEND00024DWOBJ.STRING.TOSTRING0c2SUBROUTINE WOBJ.STRING.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: return json node as string************************************************************************INCLUDE WOBJ.INCLUDE*CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)*CALL WOBJ.ENCODE(VALUE,OUT.VALUE)JSON:='"':OUT.VALUE:'"'*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=":VALUERETURNEND000971WOBJ.PARSEVALUE0c2SUBROUTINE WOBJ.PARSEVALUE(JSTR,INDEXPOS,PARSEVALUE)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json value************************************************************************INCLUDE WOBJ.INCLUDE*PARSEVALUE=""*IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - STARTING"CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*C=JSTR[INDEXPOS,1]LEN.JSTR=LEN(JSTR)*IF WOBJ.DEBUG THEN PRINT "PARSEVALUE LOOKING AT ":C** WE WILL BE ADDING A NEW ITEM TO OUR OBJECT ARRAY*BEGIN CASE    CASE C="{"        CALL WOBJ.PARSEOBJECT(JSTR,INDEXPOS,PARSEVALUE)    CASE C="["        IF WOBJ.DEBUG THEN PRINT "PARSEVALUE CALLING PARSEARRAY"        CALL WOBJ.PARSEARRAY(JSTR,INDEXPOS,PARSEVALUE)    CASE C='"' OR C="'"        IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSESTRING"        CALL WOBJ.PARSESTRING(JSTR,INDEXPOS,PARSEVALUE)        PARSEVALUE=INSERT(PARSEVALUE,1;"S")    CASE 1        IF C="t" OR C="T" OR C="f" OR C="F" THEN            IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSEBOOLEAN"            CALL WOBJ.PARSEBOOLEAN(JSTR,INDEXPOS,PARSEVALUE)            IF PARSEVALUE#"" THEN                PARSEVALUE=INSERT(PARSEVALUE,1;"B")            END        END        IF PARSEVALUE="" AND (C="n" OR C="N") THEN            IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSENULL"            CALL WOBJ.PARSENULL(JSTR,INDEXPOS,PARSEVALUE)            IF PARSEVALUE#"" THEN                 PARSEVALUE=INSERT(PARSEVALUE,1;"N")            END        END        IF PARSEVALUE="" THEN            IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSENUMBER"            CALL WOBJ.PARSENUMBER(JSTR,INDEXPOS,PARSEVALUE)            IF PARSEVALUE#"" THEN                PARSEVALUE=INSERT(PARSEVALUE,1;"D")            END        END        IF PARSEVALUE="" THEN            * Treat unidentified value as string            LOOP            WHILE INDEXPOS > 0 AND INDEXPOS < LEN.JSTR DO                C = JSTR[INDEXPOS,1]                IF INDEX(",]}",C,1) THEN                    EXIT                END                PARSEVALUE:=C                INDEXPOS+=1            REPEAT            PARSEVALUE=INSERT(PARSEVALUE,1;"S")        ENDEND CASEIF WOBJ.DEBUG THEN PRINT "PARSEVALUE - END OF ROUTINE"*RETURNEND000180WOBJ.CHOOSE.WOBJ0c2* Code to determine default wobj library to use* This needs to change for MVDBTOOLKIT build, defaults to WOBJWOBJ.RTNE="WOBJ"NO.MD.FILE=0OPEN "MD" TO FILE.MD ELSE    OPEN "VOC" TO FILE.MD ELSE NO.MD.FILE=1ENDIF NOT(NO.MD.FILE) THEN    READ WOBJ.CONF FROM FILE.MD, "WOBJ.CONF" ELSE WOBJ.CONF=""    IF WOBJ.CONF<3> # "" THEN WOBJ.RTNE=WOBJ.CONF<3>END0014F3WOBJ0c2SUBROUTINE WOBJ(PASSEDOBJ,ACTION,NODE,VALUE,OPTIONS,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: WOBJ json library main routine************************************************************************WOBJ.VERSION = "2.0"*INCLUDE WOBJ.INCLUDE** 4/21/2020 Merged in udo object supportPLATFORM=""* HOW TO DEFINE CONFIGURATION FOR WOBJ??NO.MD.FILE=0OPEN "MD" TO MD.FILE ELSE   OPEN "VOC" TO MD.FILE ELSE NO.MD.FILE=1ENDWOBJ.CONF=""IF NOT(NO.MD.FILE) THEN   READ WOBJ.CONF FROM MD.FILE, "WOBJ.CONF" ELSE WOBJ.CONF=""ENDIF WOBJ.CONF="" THEN   NO.DICT.WOBJ.BP=0   OPEN "DICT","WOBJ.BP" TO DICT.WOBJ.BP ELSE NO.DICT.WOBJ.BP=1   IF NOT(NO.DICT.WOBJ.BP) THEN      READ WOBJ.CONF FROM DICT.WOBJ.BP, "WOBJ.CONF" ELSE WOBJ.CONF=""   ENDENDPLATFORM=WOBJ.CONF<2>* 5/11/2020 - Moved unassigned check to here** Doing inline include due to Assign/Unassigned (unidata)* WOBJ.UNASSIGNED.INCLUDE*$INCLUDE WOBJ.UNASSIGNED.INCLUDEINCLUDE WOBJ.UNASSIGNED.INCLUDEIF INDEX(OPTIONS,"PRETTIFY",1) THEN PRETTIFY=1 ELSE PRETTIFY=0IF INDEX(OPTIONS,"PRETTIFYCR",1) THEN PRETTIFYCR=1 ELSE PRETTIFYCR=0IF INDEX(OPTIONS,"DEBUG",1) THEN WOBJ.DEBUG=1 ELSE WOBJ.DEBUG=0IF INDEX(OPTIONS,"UDO=1",1) THEN PLATFORM="UDO"IF INDEX(OPTIONS,"UDO=0",1) AND PLATFORM="UDO" THEN PLATFORM=""IF INDEX(OPTIONS,"NATIVE",1) THEN PLATFORM=""* 5/11/2020 - pap Patch to allow default setting for a *             set.object or set.array*IF ACTION="SET.OBJECT" AND VALUE="" THEN VALUE="{}"IF ACTION="SET.ARRAY" AND VALUE="" THEN VALUE="[]"IF ACTION="FROMJSON" THEN ACTION="FROMSTRING"IF ACTION="TOJSON" THEN ACTION="TOSTRING"BEGIN CASE   CASE PLATFORM='UDO'      CALL WOBJ.UDO(PASSEDOBJ,ACTION,NODE,VALUE,OPTIONS,RERR)      RETURN   CASE 1END CASE*MAT JSONOBJECT = ""RERR=""INDENT.DEPTH=0*BEGIN CASE    CASE ACTION="FROMSTRING"* THIS EXISTS EARLIER DUE TO MATPARSE BELOW        CALL WOBJ.PARSE(VALUE,NEWOBJ)        PASSEDOBJ=NEWOBJ        IF PSERRORS # "" THEN            RERR=2            RERR<2> = PSERRORS        END        IF WOBJ.DEBUG THEN PRINT "WOBJ: FROMSTRING ACTION: VALUE=":VALUE:" RERR=":RERR<2>        RETURN    CASE ACTION="VERSION"        VALUE=WOBJ.VERSION        RETURNEND CASERERR=''*IF NOT(ASSIGNED(PASSEDOBJ)) THEN RERR='PARAM1 BLANK'*IF NOT(ASSIGNED(ACTION)) THEN RERR='PARAM2 (ACTION) NOT ASSIGNED'*IF NOT(ASSIGNED(NODE)) THEN RERR='PARAM3 (NODE) NOT ASSIGNED'*IF NOT(ASSIGNED(VALUE)) THEN VALUE=""*IF NOT(ASSIGNED(OPTIONS)) THEN OPTIONS=""IF RERR <> "" THEN   RERR<2>=RERR   RERR<1>=1   PRINT RERR<1>   RETURNEND** MATPARSE JSONOBJECT FROM PASSEDOBJ; * all except unidataMATPARSE JSONOBJECT FROM PASSEDOBJ, @AM; * Unidata*IF WOBJ.DEBUG THEN PRINT "ACTION=":ACTIONBEGIN CASE    CASE ACTION="TOSTRING"        VALUE=""        IF NODE # "" THEN            RERR=1            RERR<2>="Node ignored - returning the root node"            IF WOBJ.DEBUG THEN PRINT "WOBJ: TOSTRING ACTION: NODE ":NODE:" IGNORED"        END        CALL WOBJ.TOSTRING(VALUE)    CASE ACTION="GET"        GOSUB action.get    CASE FIELD(ACTION,".",1)="SET"        GOSUB action.set    CASE ACTION="DELETE"        GOSUB action.delete    CASE ACTION="KEYS"        GOSUB action.keys    CASE ACTION="LENGTH"        GOSUB action.length    CASE ACTION="TYPE"        GOSUB action.type    CASE 1        VALUE=""        RERR=1        RERR<2>="Invalid action '":ACTION:"'"        IF WOBJ.DEBUG THEN PRINT "WOBJ: INVALID ACTION: ":ACTIONEND CASE*MATBUILD PASSEDOBJ FROM JSONOBJECT*RETURN*action.get: *CALL WOBJ.GET(ACTION,NODE,VALUE,RERR)RETURN*action.set: *CALL WOBJ.SET(ACTION,NODE,VALUE,RERR)RETURN*action.delete: *CALL WOBJ.DELETE(ACTION,NODE,VALUE,RERR)RETURN*action.keys: *CALL WOBJ.KEYS(ACTION,NODE,VALUE,RERR)RETURN*action.length: *CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF PARTPOS THEN    IF CHILDPOS THEN        VALUE=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,CHILDPOS>+0    END ELSE        VALUE=1 ;* SIMPLE NODE HAS LENGTH OF 1    ENDEND ELSE    IF NODE="" THEN        VALUE=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,1>+0    END ELSE        VALUE=0 ;* NODE NOT FOUND!    ENDENDIF WOBJ.DEBUG THEN PRINT "WOBJ: LENGTH ACTION: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" LENGTH=":VALUE:" RERR=":RERR<2>RETURN*action.type: *CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF PARTPOS THEN    PARTTYPE = JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE PARTTYPE='O'            VALUE='OBJECT'        CASE PARTTYPE='A'            VALUE='ARRAY'        CASE PARTTYPE='D'            VALUE='NUMBER'        CASE PARTTYPE='S'            VALUE='STRING'        CASE PARTTYPE='N'            VALUE='NULL'        CASE PARTTYPE='B'            VALUE='BOOLEAN'        CASE 1            VALUE='UNKNOWN'    END CASEEND ELSE    IF NODE="" THEN        VALUE="OBJECT"    END ELSE        VALUE="UNDEFINED" ;* NODE NOT FOUND!    ENDENDIF WOBJ.DEBUG THEN PRINT "WOBJ: TYPE ACTION: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" TYPE=":VALUE:" RERR=":RERR<2>RETURN*END00038DWOBJ.PARSENUMBER0c2SUBROUTINE WOBJ.PARSENUMBER(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json numeric value************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)SAVE.INDEXPOS=INDEXPOS*JSTR.LENGTH=LEN(JSTR)*LOOP WHILE INDEXPOS > 0 AND INDEXPOS <= JSTR.LENGTH DO    C=JSTR[INDEXPOS,1]    IF NUM(C) OR C="+" OR C="-" OR C="." OR C="E" OR C="e" THEN        PARSESTRING:=C        INDEXPOS+=1    END ELSE        EXIT    ENDREPEATCALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)C=JSTR[INDEXPOS,1]IF INDEX(",]}",C,1)=0 THEN    * invalid terminator - not a number    PARSESTRING=""    INDEXPOS=SAVE.INDEXPOSENDRETURNEND000419WOBJ.PARSE0c2SUBROUTINE WOBJ.PARSE(JSTR,JSONOBJECTRETURN)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json string into object************************************************************************INCLUDE WOBJ.INCLUDE*PSERRORS=""MAT JSONOBJECT=""JSONOBJECTRETURN=""*INDEXPOS=1CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)C=JSTR[INDEXPOS,1]IF C # "{" THEN    IF C # "" THEN        PSERRORS<-1>="Leading brace for JSON object missing"    END    RETURNEND*CALL WOBJ.PARSEOBJECT(JSTR,INDEXPOS,PARSERESULT)IF PARSERESULT="" THEN    IF PSERRORS="" THEN PSERRORS<-1>="Parse failure"END ELSE    * MAKE SURE WE CONSUMED ENTIRE JSTR    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    IF INDEXPOS <= LEN(JSTR) THEN        PSERRORS<-1>="Extra data (":(LEN(JSTR)-INDEXPOS+1):" characters) after final close brace ignored"    ENDEND*MATBUILD JSONOBJECTRETURN FROM JSONOBJECT*RETURNEND000A0FWOBJ.PARSEARRAY0c2SUBROUTINE WOBJ.PARSEARRAY(JSTR,INDEXPOS,PARSEARRAY)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json array************************************************************************INCLUDE WOBJ.INCLUDE*PARSEVARRAY=""IF WOBJ.DEBUG THEN PRINT "PARSEARRAY - STARTING"*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*IF JSTR[INDEXPOS,1] <> "[" THEN    PSERRORS<-1>="Invalid Array at position ":INDEXPOS:" : ":JSTR[INDEXPOS,20]    RETURNEND*LEN.JSTR = LEN(JSTR)INDEXPOS+=1*JSONOBJECT(JSONOBJECT$NODECNTR)+=1NODEID=JSONOBJECT(JSONOBJECT$NODECNTR)JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEID>="A"; *SET AS OBJECT*LOOP    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    C=JSTR[INDEXPOS,1]    IF WOBJ.DEBUG THEN PRINT "PARSEARRAY: ":NODEID:" - LOOKING AT ":C    BEGIN CASE        CASE C = "]"            IF WOBJ.DEBUG THEN PRINT "PARSEARRAY: ":NODEID:" EXIT ON ]"            INDEXPOS+=1            EXIT        CASE C = ","            INDEXPOS+=1            CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)        CASE INDEXPOS > LEN.JSTR            PSERRORS<-1>="Missing ']': ":JSTR[LEN(JSTR)-20,20]            RETURN    END CASE    *    CALL WOBJ.PARSEVALUE(JSTR,INDEXPOS,PARSEVALUE)    *    JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>+=1    PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>    BEGIN CASE        CASE PARSEVALUE=""            PSERRORS<-1>="Invalid value syntax for array element ":(PARTPOS-1)            IF WOBJ.DEBUG THEN PRINT "PARSEARRAY ":NODEID:" invalid value syntax"            RETURN        CASE PARSEVALUE<1>="A" OR PARSEVALUE<1>="O"            * ARRAY OR OBJECT            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEID,PARTPOS>=PARSEVALUE<2>        CASE 1            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            V=PARSEVALUE<2>            IF INDEX(V,LF,1) OR INDEX(V,CR,1) THEN                V=OCONV(V,"MX0C")                E="H"            END ELSE                E="A"            END            JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEID,PARTPOS>=V            JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEID,PARTPOS>=E    END CASE    IF WOBJ.DEBUG THEN PRINT "PARSEARRAY ":NODEID:" ":PARSEVALUE<1>:" ":PARSEVALUE<2>REPEATPARSEARRAY="A"PARSEARRAY<2>=NODEIDIF WOBJ.DEBUG THEN PRINT "PARSEARRAY - EXITING"RETURNEND000165DICT_PORTAL.AR0c000002BINVOICE.AMT0c1A6Invoice.AmtMD2R13000025DUE.DATE0c1A20Due.DateD2-R8000024BALANCE0c1A50BalanceMD2R13000029DATES.PAID0c1A8CheckDatesD2-R800001APIPE0c1A0 F;C|L100001ACUST0c1A1CustL2500001EBIG.CUST0c1A1CustL40000034CUST.NAME0c1A1Cust.NameTPORTAL.AR;X;1;1L25000A7FMVDB.WIDGETS0c0000025AdminConfig0c2SUB.ADMIN.CONFIGADMIN000025Code Templates0c2SUB.CODE.TEMPLATES000014D3 Free0c2SUB.FREE00001CD3 LISTPEQS0c2SUB.LISTPEQS000016D3 LISTU0c2SUB.LISTU000028D3 Runtime Errors0c2SUB.RUNTIME.ERRORS000024D3 Sys Err Chart0c2SUB.SYS.ERR.BAR000021D3 System Errors0c2SUB.SYS.ERRS00002DDashboard License Usage0c2SUB.TABLE.LIC.USED000038DEMO ANNUAL SALES BY REP0c2SUB.DEMO.ANNUAL.SALES.BY.REP000035DEMO AVERAGE DAYS CHART0c2SUB.DEMO.DAYS.TO.PAY.CHART000030DEMO DAYS TO PAY PIE0c2SUB.DEMO.DAYS.TO.PAY.PIE00004BDEMO FINANCIAL PICTURE0c2DEMO.FINANCIALS.DASHBOARDDemo Financial Picture00003ADEMO MONTHLY SALES BY REP0c2SUB.DEMO.MONTHLY.SALES.BY.REP000032DEMO NET INCOME CHART0c2SUB.DEMO.NET.INCOME.CHART000036DEMO REV.GP SALES CHART0c2SUB.DEMO.REV.GP.SALES.CHART00002EDEMO SALE TYPES PIE0c2SUB.DEMO.SALE.TYPES.PIE000028DEMO SALES CHART0c2SUB.DEMO.SALES.CHART00002EDEMO SALES PERCENTS0c2SUB.DEMO.SALES.PERCENTS000044DEMO SINGLE MONTH SALES BY REP0c2SUB.DEMO.SINGLE.MONTH.SALES.BY.REP000020Demo- MS Col0c2SUB.DEMO.MS.COL00001FDemo-Doughnut0c2SUB.DEMO.DNUT000019Demo-Pie0c2SUB.DEMO.PIE00001EDemo-SS Col0c2SUB.DEMO.SS.COL000021Demo-SS Line0c2SUB.DEMO.SS.LINE000025Drilldown Demo0c2SUB.DEMO.DRILLDOWN000024Emailed Report0c2SUB.EMAILED.REPORT00001EGRID TEST0c2SUB.GRID.TESTSAI000021Icon Gallery0c2SUB.ICON.GALLERY000022Mobile Manager0c2SUB.MOBILE.APPS000026MW CodeFactory0c2SUB.MW.CODE.FACTORY000021PDFConfig0c2SUB.PDF.CONFIGADMIN000028QM Runtime Errors0c2SUB.RUNTIME.ERRORS00001BRSS Feeds0c2SUB.RSS.FEEDS000028SC-Lines By Lib (Pie)0c2SUB.SC.LIB.PIE000023SC-Lines By Prog0c2SUB.SC.LIB.COL000028SC-Progs by Lib (Pie)0c2SUB.SC.LIB.PIE00001BShow Vars0c2SUB.SHOW.VARS000021Source Viewer0c2SUB.SOURCE.VIEW000025System - Session0c2SUB.SHOW.SESSION000028PORTAL DASHBOARD0c2SUB.PORTAL.DASHBOARD000030PORTAL SALES REPORTS0c2SUB.PORTAL.SALES.REPORTS000034PORTAL AR REPORT SETUP0c2SUB.PORTAL.AR.REPORT.SETUP00002APORTAL AR REPORTS0c2SUB.PORTAL.AR.REPORTS00002APORTAL AP REPORTS0c2SUB.PORTAL.AP.REPORTS000034PORTAL AP REPORT SETUP0c2SUB.PORTAL.AP.REPORT.SETUP000024PORTAL MARGINS0c2SUB.PORTAL.MARGINS00003APORTAL SALES REPORT SETUP0c2SUB.PORTAL.SALES.REPORT.SETUP000040DISPLAY PORTAL AP BALANCE PIE CHART0c2SUB.PORTAL.AP.BALANCE.PIE000040DISPLAY PORTAL AR BALANCE PIE CHART0c2SUB.PORTAL.AR.BALANCE.PIE000034PORTAL DAYS TO PAY PIE0c2SUB.PORTAL.DAYS.TO.PAY.PIE00003CPORTAL SETUP DOCUMENTATION0c2SUB.PORTAL.SETUP.DOCUMENTATION000030PORTAL.DOCUMENTATION0c2SUB.PORTAL.DOCUMENTATION000040PORTAL.REPORTS.DOCUMENTATION0c2SUB.PORTAL.REPORTS.DOCUMENTATION000038PORTAL.RUN.DOCUMENTATION0c2SUB.PORTAL.RUN.DOCUMENTATION01210BMVDBTOOLKIT.BP0c00010ABMVDBTOOLKIT.WFILEIO.D30c2      SUBROUTINE MVDBTOOLKIT.WFILEIO.D3(FOBJ)      **********************************************************************      *      * Copyright (C) 2017 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: June 7th 2018      * Description: WFILEIO MULTI PLATFORM WORKING WITH O/S FILES      *      **********************************************************************      *      * INOBJ      *      * { "ACTION":"READ,WRTE,DELETE",      *   "PATH":"PATH TO THE FILE",      *   "DATA":"DATA FOR A WRITE",      *   "dosletter":"OPTIONAL DOS LETTER TO ADD TO PATH",      *   "NEWLINE":"CR,LF,CRLF,DOS,UNIX",      *   "PERMISSIONS":"TBD"      *   "response": {      *       "data":"responsedata",      *       "status":1-ok, else no,      *       "statusmsg":"statusmsg"      *   }      * }      *      * need to know the existing platform      *PLATFORM.DELIM="\"      *PLATFORM.TYPE="WINDOWS"      *PLATFORM.MV="D3"      INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ            CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MV,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.DELIM,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)      FSTATUS=1      FSTATUSMSG="OK"      CALL @WOBJ.RTNE(FOBJ,"GET","action",FILEIO.ACTION,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","path",FILEIO.PATH,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","data",FILEIO.DATA,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","dosletter",FILEIO.DOSLETTER,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","newline",FILEIO.NEWLINE,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","permissions",FILEIO.PERMISSIONS,"",RERR)      *CALL @WOBJ.RTNE(OUTOBJ,"FROMSTRING","","{}","",RERR)      FILEIO.ACTION=OCONV(FILEIO.ACTION,"MCU")      FILEIO.NEWLINE=OCONV(FILEIO.NEWLINE,"MCU")      CALL @WOBJ.RTNE(FOBJ,"GET","work.parsed_fileio_file_name",PARSED.FILEIO.FILE.NAME,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.fileio_just_path",FILEIO.JUST.PATH,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MVTYPE,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.FILEDELIM,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","path",ORIG.PATH,"",RERR)      * FOR RIGHT NOW ON JBASE WE WILL JUST OPEN THE FILE USING FULL PATHING      * THIS DOES NOT DO ANYTHING!!!      BEGIN CASE         CASE PLATFORM.TYPE="WINDOWS"            REAL.PATH="dos:":PLATFORM.TYPE         CASE 1            REAL.PATH="unix:":PLATFORM.TYPE      END CASE      **      OPEN FILEIO.JUST.PATH TO FI ELSE         IF INDEX(FILEIO.JUST.PATH,"AppData\Local\Temp",1) OR INDEX(FILEIO.JUST.PATH,'\tmp',1) THEN            * SPECIAL PATCH FOR D3/WINDOWS.  D3 is running as a system user and it appears            * the Temp directory does not always exist            EXECUTE '!mkdir ':FILEIO.JUST.PATH         END         OPEN FILEIO.JUST.PATH TO FI ELSE            FSTATUS=0            FSTATUSMSG="Could not open file ":FILEIO.JUST.PATH            GOTO end.of.run         END      END      BEGIN CASE         CASE FILEIO.ACTION="READ"            GOSUB fileio.read         CASE FILEIO.ACTION="WRITE"            GOSUB fileio.write         CASE FILEIO.ACTION="DELETE"            GOSUB fileio.delete         CASE 1            FSTATUS=0            FSTATUSMSG="Invalid action"            GOTO end.of.run      END CASEend.of.run: *      CALL @WOBJ.RTNE(FOBJ,"SET.NUMBER", "response.status", FSTATUS,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"SET.STRING", "response.statusmsg", FSTATUSMSG, "", RERR)      RETURNfileio.read: *      REC=""      READ REC FROM FI, PARSED.FILEIO.FILE.NAME ELSE         FSTATUS=0         FSTATUSMSG="Could not find ":PARSED.FILEIO.FILE.NAME      END      CALL @WOBJ.RTNE(FOBJ,"SET.STRING","response.data",REC,"",RERR)      IF 0 THEN         PRINT "PATH   :":FILEIO.JUST.PATH         PRINT "ID     :":PARSED.FILEIO.FILE.NAME         PRINT "REC    :":REC      END      RETURNfileio.write: *      WRITE FILEIO.DATA ON FI, PARSED.FILEIO.FILE.NAME      RETURNfileio.delete: *      DELETE FI, PARSED.FILEIO.FILE.NAME      RETURN002F4DMVDBTOOLKIT.TEST0c2PRINT @(-1):"MVDBTOOLKIT.TEST"PRINTINCLUDE MVDBTOOLKIT.TEST.INCLUDEINCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJTEST.PLATFORM=FIELD(CMND,' ',2)TEST.MVTYPE=FIELD(CMND,' ',3)CALL MVDBTOOLKIT.WPLATFORM(PLATFORM.OBJ)IF TEST.PLATFORM = "" THEN   CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",TEST.PLATFORM,"",RERR)ENDIF TEST.MVTYPE = "" THEN   CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",TEST.MVTYPE,"",RERR)ENDIF TEST.PLATFORM = "" THEN   PRINT "Enter Platform: ":; INPUT TEST.PLATFORMENDIF TEST.MVTYPE = "" THEN   PRINT "Enter MVType: ":; INPUT TEST.MVTYPEENDIF TEST.PLATFORM='' OR TEST.MVTYPE='' THEN    PRINT "Usage: MVDBTOOLKIT PLATFORM MVTYPE"    PRINT    PRINT "PLATFORM=WINDOWS or LINUX"    PRINT "MVTYPE=JBASE,D3,UNIVERSE,UNIDATA"    STOPEND* GET ENVIRONMENTCALL MVDBTOOLKIT.WPLATFORM(PLATFORM.OBJ)CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","curllocation",CURLLOCATION,"",RERR)CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",PLATFORM,"",RERR)TEST='platform'; GOSUB start.testTEST.MSG=PLATFORM:"=":TEST.PLATFORMIF PLATFORM # TEST.PLATFORM THEN TEST.STATUS=0 ELSE TEST.STATUS=1GOSUB end.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",RESULT,"",RERR)TEST='mvtype'; GOSUB start.testTEST.MSG=RESULT:"=":TEST.MVTYPEIF RESULT # TEST.MVTYPE THEN TEST.STATUS=0 ELSE TEST.STATUS=1GOSUB end.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.DIR,"",RERR)CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","filedelim",FILEDELIM,"",RERR)TEST='filedelim'; GOSUB start.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","filedelim",FILEDELIM,"",RERR)TEST.MSG=FILEDELIMTEST.STATUS=1BEGIN CASE   CASE OCONV(PLATFORM,"MCU") = "LINUX" AND FILEDELIM="/"   CASE OCONV(PLATFORM,"MCU") = "WINDOWS" AND FILEDELIM="\"   CASE 1; TEST.STATUS=0END CASEGOSUB end.testTEST='tmpdir'; GOSUB start.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.DIR,"",RERR)TEST.MSG=TMP.DIRTEST.STATUS=1IF TMP.DIR="" THEN TEST.STATUS=0GOSUB end.testTEST='MVDBTOOLKIT.SWAP'GOSUB start.testS='TEST LINE TEST LINE'ORIG.STRING=SCALL MVDBTOOLKIT.SWAP(S,"ES","XX")IF S = "TXXT LINE TXXT LINE" THEN TEST.STATUS=1 ELSE TEST.STATUS=0TEST.MSG=SGOSUB end.test* Test 1 GetenvTEST="getenv"GOSUB start.testCALL MVDBTOOLKIT.WGETENV("PATH",PATH)IF PATH # "" THEN    TEST.MSG=PATH[1,60]    TEST.STATUS=1END ELSE    TEST.MSG=""    TEST.STATUS=0ENDGOSUB end.test* Test WEXECUTETEST="wexecute"; GOSUB start.testCMND='echo MVDBTOOLKIT.TEST'CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)CALL MVDBTOOLKIT.WEXECUTE(COBJ)CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)IF INDEX(CMND.RESULT,"MVDBTOOLKIT.TEST",1) THEN    TEST.MSG=CMND.RESULT    TEST.STATUS=1END ELSE    TEST.MSG=CMND.RESULT    TEST.STATUS=0ENDCONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSGGOSUB end.test* Test WFILEIOTEST="WFILEIO-WRITE"USER.NO=FIELD(OCONV('','U50BB'),' ',1)GOSUB start.testCALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)TMP.FILE.NAME=TMP.DIR:FILEDELIM:'TMP-':USER.NO:'.txt'TEST.MSG=TMP.FILE.NAMECALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.FILE.NAME,"",RERR)SAVE.FOBJ=FOBJTMP.DATA=TIMEDATE()CALL @WOBJ.RTNE(FOBJ,"SET","data",TMP.DATA,"",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUS.MSG,"",RERR)TEST.STATUS=RESPONSE.STATUSIF NOT(RESPONSE.STATUS) THEN TEST.MSG:=RESPONSE.STATUS.MSGGOSUB end.testIF NOT(TEST.STATUS) THEN STOP "Test Failed, no reason to continue"TEST='WFILEIO-READ'GOSUB start.test* NOW READ IT BACK INCALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)TEST.MSG="(":TMP.DATA:')=(':RESPONSE.DATA:")"TEST.STATUS=1IF TMP.DATA # RESPONSE.DATA THEN TEST.STATUS=0GOSUB end.testTEST="WFILEIO-DELETE"; GOSUB start.testFOBJ=SAVE.FOBJCALL @WOBJ.RTNE(FOBJ,"SET","action","DELETE","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)FOBJ=SAVE.FOBJCALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)RESPONSE.DATA=""CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUSMSG,"",RERR)TEST.STATUS=1TEST.MSG=TMP.FILE.NAME:' ':RESPONSE.STATUSIF RESPONSE.STATUS=0 AND RESPONSE.DATA="" THEN NULL ELSE TEST.STATUS=0GOSUB end.test* Let get our current directoryTEST="pwd"; GOSUB start.testIF OCONV(PLATFORM,"MCU") = "WINDOWS" THEN   CMND='echo %CD%'END ELSE   CMND='pwd'ENDCALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)CALL MVDBTOOLKIT.WEXECUTE(COBJ)CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)IF 1 THEN    TEST.MSG=CMND.RESULT    TEST.STATUS=1END ELSE    TEST.MSG=CMND.RESULT    TEST.STATUS=0ENDCONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSGGOSUB end.testMVDBTOOLKIT.LOCATION = CMND.RESULTIF 0 THEN* Lets verify we have curl!!!IF CURLLOCATION="" THEN CURLLOCATION="curl"TEST="default curl"; GOSUB start.testCMND=CURLLOCATION:' -V'CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)CALL MVDBTOOLKIT.WEXECUTE(COBJ)CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)BEGIN CASE   CASE INDEX(CMND.RESULT,"libcurl",1) AND 0    TEST.MSG=CMND.RESULT    TEST.STATUS=1   CASE OCONV(PLATFORM,"MCU")="WINDOWS"    TEST.MSG=CMND.RESULT    TEST.STATUS=2   CASE 1    TEST.MSG=0END CASECONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSGGOSUB end.test* Start looking for curlIF TEST.STATUS=2 THEN   CURLLOCATION="c:\progra~1\git\mingw64\bin\curl.exe"   TEST="git curl"; GOSUB start.test   CMND=CURLLOCATION:' -V'   CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)   CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)   CALL MVDBTOOLKIT.WEXECUTE(COBJ)   CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)   BEGIN CASE      CASE INDEX(CMND.RESULT,"libcurl",1) AND 0         TEST.MSG=CMND.RESULT         TEST.STATUS=1      CASE OCONV(PLATFORM,"MCU")="WINDOWS"         TEST.MSG=CMND.RESULT         TEST.STATUS=2      CASE 1         TEST.MSG=CMND.RESULT         TEST.STATUS=0   END CASE   CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG   GOSUB end.testENDIF TEST.STATUS=2 THEN   CURLLOCATION=MVDBTOOLKIT.LOCATION:"\mvdbtoolkit\curl\windows64\curl.exe"   TEST="mvdbtoolkit curl"; GOSUB start.test   CMND=CURLLOCATION:' -V'   CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)   CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)   CALL MVDBTOOLKIT.WEXECUTE(COBJ)   CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)   BEGIN CASE      CASE INDEX(CMND.RESULT,"libcurl",1) AND 0         TEST.MSG=CMND.RESULT         TEST.STATUS=1       CASE 1         TEST.STATUS=0         TEST.MSG=CMND   END CASE   CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG   GOSUB end.testENDENDTEST="WCALL"GOSUB start.testCALL @WOBJ.RTNE(OBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","method","POST","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","debug","N","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","url","https://httpbin.org/anything?field1=value1","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","insecure","Y","",RERR)  CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","headers","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","headers.X-TEST-HEADER","headertest","",RERR)  CALL @WOBJ.RTNE(OBJ,"SET.ARRAY","formfields","[]","",RERR) CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","formfields[-1]","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","formfields[0].name","field2","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","formfields[0].value","VALUE2$","",RERR) CALL @WOBJ.RTNE(SOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(SOBJ,"SET","name","field3","",RERR) CALL @WOBJ.RTNE(SOBJ,"SET","value","<EXAMPLE HTML>","",RERR) CALL @WOBJ.RTNE(SOBJ,"TOSTRING","",SJSON,"",RERR) CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","formfields[-1]",SJSON,"",RERR) CALL MVDBTOOLKIT.WCALL(OBJ) CALL @WOBJ.RTNE(OBJ,"GET","response.data",RESPONSE,"",RERR) OPEN "MVDBTOOLKIT.BP" TO FILE ELSE STOP *PRINT "RESPONSE=":RESPONSE WRITE RESPONSE ON FILE, "MVDBTOOLKIT.TEST.JSON" CALL @WOBJ.RTNE(OBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR) WRITE OUT.JSON ON FILE, "MVDBTOOLKIT.WCALL.JSON"  CALL @WOBJ.RTNE(OBJ,"GET","response.status",RESPONSE.STATUS,"",RERR) *PRINT 'RESPONSE.STATUS=':RESPONSE.STATUS:'  ': *IF RESPONSE.STATUS="200" THEN PRINT "OK" ELSE PRINT "FAIL" TEST.MSG=RESPONSE.STATUS IF RESPONSE.STATUS="200" THEN    TEST.STATUS=1 END ELSE    TEST.STATUS=0 END GOSUB end.test TEST='WCALL.HTTPTYPE' GOSUB start.test CALL @WOBJ.RTNE(OBJ,"GET","response.http_type",RESPONSE.HTTP.TYPE,"",RERR) *PRINT 'RESPONSE.HTTP_TYPE=':RESPONSE.HTTP.TYPE TEST.MSG=RESPONSE.HTTP.TYPE IF INDEX(TEST.MSG,'HTTP/',1) THEN    TEST.STATUS=1 END ELSE    TEST.STATUS=0 END GOSUB end.test CALL @WOBJ.RTNE(ROBJ,"FROMSTRING","",RESPONSE,"",RERR) TEST="WCALL.FIELD1" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","args.field1",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="value1" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.testTEST="WCALL.field2" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","form.field2",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="VALUE2$" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.testTEST="WCALL.field3" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","form.field3",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="<EXAMPLE HTML>" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.test TEST="WCALL.HEADER" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","headers.X-Test-Header",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="headertest" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.testTEST="WCALL.BODY"GOSUB start.test CALL @WOBJ.RTNE(OBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","method","POST","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","debug","N","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","url","https://httpbin.org/anything?field1=value1","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","insecure","N","",RERR) CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","headers","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","Content-Type","application/json","",RERR)  CALL @WOBJ.RTNE(TESTOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(TESTOBJ,"SET","test","value","",RERR) CALL @WOBJ.RTNE(TESTOBJ,"TOSTRING","",TESTJSON,"PRETTIFY",RERR) CALL @WOBJ.RTNE(OBJ,"SET.STRING","body",TESTJSON,"",RERR)  CALL MVDBTOOLKIT.WCALL(OBJ) CALL @WOBJ.RTNE(OBJ,"GET","response.data",RESPONSE,"",RERR)  WRITE RESPONSE ON FILE, "MVDBTOOLKIT.TESTBODY.JSON" CALL @WOBJ.RTNE(OBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR) WRITE OUT.JSON ON FILE, "MVDBTOOLKIT.WCALLBODY.JSON" CALL @WOBJ.RTNE(OBJ,"GET","response.status",RESPONSE.STATUS,"",RERR) *PRINT 'RESPONSE.STATUS=':RESPONSE.STATUS:'  ': *IF RESPONSE.STATUS="200" THEN PRINT "OK" ELSE PRINT "FAIL" TEST.MSG=RESPONSE.STATUS IF RESPONSE.STATUS="200" THEN    TEST.STATUS=1 END ELSE    TEST.STATUS=0 END GOSUB end.test TEST="WCALL.BODY.RESULT" GOSUB start.test * The testing web site does not send raw body back very well * we will just look for what we expect CONVERT CHAR(254):CHAR(253):CHAR(252):CHAR(10):CHAR(13) TO '' IN RESPONSE POS=INDEX(RESPONSE,'"form"',1) IF POS THEN RESPONSE=RESPONSE[POS,9999] TEST.MSG=RESPONSE IF INDEX(RESPONSE,'"test',1) AND INDEX(RESPONSE,'"value',1) THEN     TEST.STATUS=1 END ELSE     TEST.STATUS=0 END GOSUB end.test STOP*GOSUB start.testRETURN*process.error: *IF RERR<1> THEN   TEST.STATUS=-1   TEST.MSG=RERR<1>ENDRETURN**start.test: *TEST.STATUS=0TEST.MSG="Success"PRINT "":TEST[1,15]"L(#15)":RETURN*end.test: *PRINT "  ":TEST.MSG[1,50]"L(#50)":PRINT " ":PRE=''; AFT=''BEGIN CASE   CASE TEST.STATUS=2; ERROR="Warning"; PRE=''; AFT=''   CASE TEST.STATUS; ERROR="Passed"   CASE 1; ERROR="Passed"; PRE=@(-13); AFT=@(-14)END CASEPRINT PRE:"[":PRINT ERROR"L(#7)":PRINT "]":AFTRETURN 000CDEMVDBTOOLKIT.WCALLBODY.JSON0c2{  "method": "POST",   "debug": "N",   "url": "https://httpbin.org/anything?field1=value1",   "insecure": "N",   "headers": {    },   "Content-Type": "application/json",   "body": "{  \"test\": \"value\"  }",   "response": {    "headers": {      "Date": "Thu, 30 Apr 2020 05:09:09 GMT",       "Content-Type": "application/json",       "Content-Length": "608",       "Connection": "keep-alive",       "Server": "gunicorn/19.9.0",       "Access-Control-Allow-Origin": "*",       "Access-Control-Allow-Credentials": "true"      },     "status": 200,     "http_type": "HTTP/1.1",     "statusmsg": "OK",     "log": [      "* About to connect() to httpbin.org port 443 (#0)",       "*   Trying 34.230.193.231... connected",       "* Connected to httpbin.org (34.230.193.231) port 443 (#0)",       "* Initializing NSS with certpath: sql:/etc/pki/nssdb",       "*   CAfile: /etc/pki/tls/certs/ca-bundle.crt",       "  CApath: none",       "* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",       "* Server certificate:",       "* 	subject: CN=httpbin.org",       "* 	start date: Jan 18 00:00:00 2020 GMT",       "* 	expire date: Feb 18 12:00:00 2021 GMT",       "* 	common name: httpbin.org",       "* 	issuer: CN=Amazon,OU=Server CA 1B,O=Amazon,C=US",       "> POST /anything?field1=value1 HTTP/1.1",       "",       "> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",       "",       "> Host: httpbin.org",       "",       "> Accept: */*",       "",       "> Content-Length: 26",       "",       "> Content-Type: application/x-www-form-urlencoded",       "",       "> ",       "",       "} [data not shown]",       "< HTTP/1.1 200 OK",       "",       "< Date: Thu, 30 Apr 2020 05:09:09 GMT",       "",       "< Content-Type: application/json",       "",       "< Content-Length: 608",       "",       "< Connection: keep-alive",       "",       "< Server: gunicorn/19.9.0",       "",       "< Access-Control-Allow-Origin: *",       "",       "< Access-Control-Allow-Credentials: true",       "",       "< ",       "",       "{ [data not shown]",       "* Connection #0 to host httpbin.org left intact",       "* Closing connection #0"      ],     "data": "{  \"args\": {    \"field1\": \"value1\"  },   \"data\": \"\",   \"files\": {},   \"form\": {    \"{\\r\\n  \\\"test\\\": \\\"value\\\"\\r\\n  }\\n\": \"\"  },   \"headers\": {    \"Accept\": \"*/*\",     \"Content-Length\": \"26\",     \"Content-Type\": \"application/x-www-form-urlencoded\",     \"Host\": \"httpbin.org\",     \"User-Agent\": \"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2\",     \"X-Amzn-Trace-Id\": \"Root=1-5eaa5d75-49623fd72c6a4d01cec7a532\"  },   \"json\": null,   \"method\": \"POST\",   \"origin\": \"98.173.13.82\",   \"url\": \"https://httpbin.org/anything?field1=value1\"}",     "curl_cmnd": "curl -s -m 45 -X POST -D \"/tmp/WCALL-1.headers\" -v --stderr \"/tmp/WCALL-1.stderr\" --data-binary \"@/tmp/WCALL-1.body\" \"https://httpbin.org/anything?field1=value1\""    }  }0000A5MVDBTOOLKIT.WGETENV.JBASE0c2SUBROUTINE MVDBTOOLKIT.WGETENV.JBASE(VAR.NAME, RETURN.VALUE)RETURN.VALUE=""IF GETENV(VAR.NAME,RETURN.VALUE) THEN  NULLENDRETURN000C2FMVDBTOOLKIT.WFILEIO.JBASE0c2SUBROUTINE MVDBTOOLKIT.WFILEIO.JBASE(FOBJ)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 7th 2018* Description: WFILEIO MULTI PLATFORM WORKING WITH O/S FILES************************************************************************* INOBJ** { "ACTION":"READ,WRTE,DELETE",*   "PATH":"PATH TO THE FILE",*   "DATA":"DATA FOR A WRITE",*   "dosletter":"OPTIONAL DOS LETTER TO ADD TO PATH",*   "NEWLINE":"CR,LF,CRLF,DOS,UNIX",*   "PERMISSIONS":"TBD"*   "response": {*       "data":"responsedata",*       "status":1-ok, else no,*       "statusmsg":"statusmsg" *   }* }** need to know the existing platform*PLATFORM.DELIM="\"*PLATFORM.TYPE="WINDOWS"*PLATFORM.MV="D3"INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)FSTATUS=1FSTATUSMSG="OK"CALL @WOBJ.RTNE(FOBJ,"GET","action",FILEIO.ACTION,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","path",FILEIO.PATH,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","data",FILEIO.DATA,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","dosletter",FILEIO.DOSLETTER,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","newline",FILEIO.NEWLINE,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","permissions",FILEIO.PERMISSIONS,"",RERR)*CALL @WOBJ.RTNE(OUTOBJ,"FROMSTRING","","{}","",RERR)FILEIO.ACTION=OCONV(FILEIO.ACTION,"MCU")FILEIO.NEWLINE=OCONV(FILEIO.NEWLINE,"MCU")CALL @WOBJ.RTNE(FOBJ,"GET","work.parsed_fileio_file_name",PARSED.FILEIO.FILE.NAME,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.fileio_just_path",FILEIO.JUST.PATH,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MVTYPE,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.FILEDELIM,"",RERR)* FOR RIGHT NOW ON JBASE WE WILL JUST OPEN THE FILE USING FULL PATHINGOPEN FILEIO.JUST.PATH TO FI ELSE    FSTATUS=0    FSTATUSMSG="Could not open file ":FILEIO.JUST.PATH    GOTO end.of.runENDBEGIN CASE    CASE FILEIO.ACTION="READ"        GOSUB fileio.read    CASE FILEIO.ACTION="WRITE"        GOSUB fileio.write    CASE FILEIO.ACTION="DELETE"        GOSUB fileio.delete    CASE 1        FSTATUS=0        FSTATUSMSG="Invalid action"        GOTO end.of.runEND CASEend.of.run: *CALL @WOBJ.RTNE(FOBJ,"SET.NUMBER", "response.status", FSTATUS,"",RERR)CALL @WOBJ.RTNE(FOBJ,"SET.STRING", "response.statusmsg", FSTATUSMSG, "", RERR)RETURNfileio.read: *REC=""READ REC FROM FI, PARSED.FILEIO.FILE.NAME ELSE    FSTATUS=0    FSTATUSMSG="Could not find ":PARSED.FILEIO.FILE.NAMEENDCALL @WOBJ.RTNE(FOBJ,"SET.STRING","response.data",REC,"",RERR)IF 0 THEN    PRINT "PATH   :":FILEIO.JUST.PATH    PRINT "ID     :":PARSED.FILEIO.FILE.NAME    PRINT "REC    :":RECENDRETURNfileio.write: *WRITE FILEIO.DATA ON FI, PARSED.FILEIO.FILE.NAMERETURNfileio.delete: *DELETE FI, PARSED.FILEIO.FILE.NAMERETURN000EA0MVDBTOOLKIT.WCALL.JSON0c2{  "method": "POST",   "debug": "N",   "url": "https://httpbin.org/anything?field1=value1",   "insecure": "Y",   "headers": {    "X-TEST-HEADER": "headertest"    },   "formfields": [    {      "name": "field2",       "value": "VALUE2$"      },     {      "name": "field3",       "value": "<EXAMPLE HTML>"      }    ],   "response": {    "headers": {      "Date": "Thu, 30 Apr 2020 05:09:09 GMT",       "Content-Type": "application/json",       "Content-Length": "693",       "Connection": "keep-alive",       "Server": "gunicorn/19.9.0",       "Access-Control-Allow-Origin": "*",       "Access-Control-Allow-Credentials": "true"      },     "status": 200,     "http_type": "HTTP/1.1",     "statusmsg": "OK",     "log": [      "* About to connect() to httpbin.org port 443 (#0)",       "*   Trying 34.230.193.231... connected",       "* Connected to httpbin.org (34.230.193.231) port 443 (#0)",       "* Initializing NSS with certpath: sql:/etc/pki/nssdb",       "*   CAfile: /etc/pki/tls/certs/ca-bundle.crt",       "  CApath: none",       "* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",       "* Server certificate:",       "* 	subject: CN=httpbin.org",       "* 	start date: Jan 18 00:00:00 2020 GMT",       "* 	expire date: Feb 18 12:00:00 2021 GMT",       "* 	common name: httpbin.org",       "* 	issuer: CN=Amazon,OU=Server CA 1B,O=Amazon,C=US",       "> POST /anything?field1=value1 HTTP/1.1",       "",       "> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",       "",       "> Host: httpbin.org",       "",       "> Accept: */*",       "",       "> X-TEST-HEADER: headertest",       "",       "> Content-Length: 257",       "",       "> Expect: 100-continue",       "",       "> Content-Type: multipart/form-data; boundary=----------------------------9f61f37bacb1",       "",       "> ",       "",       "< HTTP/1.1 100 Continue",       "",       "} [data not shown]",       "< HTTP/1.1 200 OK",       "",       "< Date: Thu, 30 Apr 2020 05:09:09 GMT",       "",       "< Content-Type: application/json",       "",       "< Content-Length: 693",       "",       "< Connection: keep-alive",       "",       "< Server: gunicorn/19.9.0",       "",       "< Access-Control-Allow-Origin: *",       "",       "< Access-Control-Allow-Credentials: true",       "",       "< ",       "",       "{ [data not shown]",       "* Connection #0 to host httpbin.org left intact",       "* Closing connection #0"      ],     "data": "{  \"args\": {    \"field1\": \"value1\"  },   \"data\": \"\",   \"files\": {},   \"form\": {    \"field2\": \"VALUE2$\",     \"field3\": \"<EXAMPLE HTML>\"  },   \"headers\": {    \"Accept\": \"*/*\",     \"Content-Length\": \"257\",     \"Content-Type\": \"multipart/form-data; boundary=----------------------------9f61f37bacb1\",     \"Host\": \"httpbin.org\",     \"User-Agent\": \"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2\",     \"X-Amzn-Trace-Id\": \"Root=1-5eaa5d75-64172de2a2432626bf6a5f61\",     \"X-Test-Header\": \"headertest\"  },   \"json\": null,   \"method\": \"POST\",   \"origin\": \"98.173.13.82\",   \"url\": \"https://httpbin.org/anything?field1=value1\"}",     "curl_cmnd": "curl -s -m 45 -X POST -H \"X-TEST-HEADER: headertest\" -D \"/tmp/WCALL-1.headers\" -v --stderr \"/tmp/WCALL-1.stderr\" --form-string field2=\"VALUE2$\" --form-string field3=\"<EXAMPLE HTML>\" \"https://httpbin.org/anything?field1=value1\""    }  }00131FMVDBTOOLKIT.WFILEIO0c2SUBROUTINE MVDBTOOLKIT.WFILEIO(INOBJ)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 7th 2018* Description: WFILEIO MULTI PLATFORM WORKING WITH O/S FILES************************************************************************* INOBJ** { "ACTION":"READ,WRITE,DELETE",*   "PATH":"PATH TO THE FILE",*   "DATA":"DATA FOR A WRITE",*   "dosletter":"OPTIONAL DOS LETTER TO ADD TO PATH",*   "NEWLINE":"CR,LF,CRLF,DOS,UNIX",*   "PERMISSIONS":"TBD"*   "response": {*       "data":"responsedata",*       "status":1-ok, else no,*       "statusmsg":"statusmsg" *   }* }** need to know the existing platform*PLATFORM.DELIM="\"*PLATFORM.TYPE="WINDOWS"*PLATFORM.MV="D3"CALL MVDBTOOLKIT.WPLATFORM(POBJ)INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL @WOBJ.RTNE(POBJ,"GET","mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM.TYPE,"",RERR)FSTATUS=1FSTATUSMSG="OK"CALL @WOBJ.RTNE(INOBJ,"GET","action",FILEIO.ACTION,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","path",FILEIO.PATH,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","data",FILEIO.DATA,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","dosletter",FILEIO.DOSLETTER,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","newline",FILEIO.NEWLINE,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","permissions",FILEIO.PERMISSIONS,"",RERR)*CALL @WOBJ.RTNE(OUTOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(INOBJ,"SET.OBJECT","response","{}","",RERR)FILEIO.ACTION=OCONV(FILEIO.ACTION,"MCU")FILEIO.NEWLINE=OCONV(FILEIO.NEWLINE,"MCU")IF FILEIO.ACTION = "" THEN    FSTATUS=0    FSTATUSMSG="No action defined"    GOTO end.of.runENDIF FILEIO.PATH = "" THEN    FSTATUS=0    FSTATUSMSG="No path defined"    GOTO end.of.runENDPARSED.FILEIO.PATH=""L=LEN(FILEIO.PATH)FOR X=1 TO L   C=FILEIO.PATH[X,1]   IF C=PLATFORM.DELIM THEN      PARSED.FILEIO.PATH:=@AM   END ELSE      PARSED.FILEIO.PATH:=C   ENDNEXT X*PARSED.FILEIO.PATH=EXCHANGE(FILEIO.PATH,PLATFORM.DELIM,@AM)PARSED.FILEIO.PATH=FILEIO.PATHCONVERT PLATFORM.DELIM TO @AM IN PARSED.FILEIO.PATHPARSED.FILEIO.PARTS=DCOUNT(PARSED.FILEIO.PATH,@AM)* JBASE DOES NOT APPEAR TO HONOR WINDOWS ENVIROMENT VARIABLES IN THE OPEN* THIS IS MAKING %USERPROFILE% NOT WORK** WE ARE GOING TO LOOP THRU THE THE PARTS AN EXPAND THEM OURSELVES** THIS HAS BEEN TESTED ON JBASE WINDOWS SO FAR.*FOR P=1 TO PARSED.FILEIO.PARTS    THIS.PART=PARSED.FILEIO.PATH<P>    IF THIS.PART[1,1]='%' OR THIS.PART[1,1]="$" THEN        CONVERT '%$' TO '' IN THIS.PART * 9/4/2019 PAP Modified this to use mvdbtoolkit.wgetenv  *       IF GETENV(THIS.PART,NEW.THIS.PART) THEN *           PARSED.FILEIO.PATH<P>=NEW.THIS.PART *       END         CALL MVDBTOOLKIT.WGETENV(THIS.PART,NEW.THIS.PART)         IF NEW.THIS.PART # "" THEN PARSED.FILEIO.PATH<P>=NEW.THIS.PART    ENDNEXT PPARSED.FILEIO.FILE.NAME=PARSED.FILEIO.PATH<PARSED.FILEIO.PARTS>FILEIO.JUST.PATH=DELETE(PARSED.FILEIO.PATH,PARSED.FILEIO.PARTS)*FILEIO.JUST.PATH=EXCHANGE(FILEIO.JUST.PATH,@AM,PLATFORM.DELIM)CONVERT @AM TO PLATFORM.DELIM IN FILEIO.JUST.PATHCALL @WOBJ.RTNE(INOBJ,"SET.OBJECT","work","{}","",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.parsed_fileio_file_name",PARSED.FILEIO.FILE.NAME,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.fileio_just_path",FILEIO.JUST.PATH,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.platform",PLATFORM.TYPE,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET.OBJECT","response","{}","",RERR)* lets have a seperate routine for each platformBEGIN CASE    CASE FILEIO.ACTION="READ"    CASE FILEIO.ACTION="WRITE"    CASE FILEIO.ACTION="DELETE"    CASE 1        FSTATUS=0        FSTATUSMSG="Invalid action"        CALL @WOBJ.RTNE(INOBJ,"SET.NUMBER", "response.status", FSTATUS,"",RERR)        CALL @WOBJ.RTNE(INOBJ,"SET.STRING", "response.statusmsg", FSTATUSMSG, "", RERR)        GOTO end.of.runEND CASEBEGIN CASE    CASE PLATFORM.MV="D3"        FILEIO.RTNE="MVDBTOOLKIT.WFILEIO.D3"        CALL MVDBTOOLKIT.WFILEIO.D3(INOBJ)    CASE PLATFORM.MV="JBASE"        FILEIO.RTNE="MVDBTOOLKIT.W.FILEIO.JBASE"        CALL MVDBTOOLKIT.WFILEIO.JBASE(INOBJ)    CASE PLATFORM.MV="UNIVERSE"        FILEIO.RTNE="MVDBTOOLKIT.WFILEIO.UNIVERSE"        CALL MVDBTOOLKIT.WFILEIO.UNIVERSE(INOBJ)    CASE PLATFORM.MV="UNIDATA"        FILEIO.RTNE="MVDBTOOLKIT.WFILEIO.UNIDATA"        CALL MVDBTOOLKIT.WFILEIO.UNIDATA(INOBJ)    CASE PLATFORM.MV="QM"        * QM SUPPORTS OPENPATH        CALL MVDBTOOLKIT.WFILEIO.QM(INOBJ)   CASE 1        DEBUG        FSTATUS=0        FSTATUSMSG="Invalid Platform ":PLATFORM.MV        GOTO end.of.runEND CASEend.of.run: *RETURN0002CDMVDBTOOLKIT.TEST.JSON0c2{  "args": {    "field1": "value1"  },   "data": "",   "files": {},   "form": {    "field2": "VALUE2$",     "field3": "<EXAMPLE HTML>"  },   "headers": {    "Accept": "*/*",     "Content-Length": "257",     "Content-Type": "multipart/form-data; boundary=----------------------------9f61f37bacb1",     "Host": "httpbin.org",     "User-Agent": "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",     "X-Amzn-Trace-Id": "Root=1-5eaa5d75-64172de2a2432626bf6a5f61",     "X-Test-Header": "headertest"  },   "json": null,   "method": "POST",   "origin": "98.173.13.82",   "url": "https://httpbin.org/anything?field1=value1"}00027CMVDBTOOLKIT.TESTBODY.JSON0c2{  "args": {    "field1": "value1"  },   "data": "",   "files": {},   "form": {    "{\r\n  \"test\": \"value\"\r\n  }\n": ""  },   "headers": {    "Accept": "*/*",     "Content-Length": "26",     "Content-Type": "application/x-www-form-urlencoded",     "Host": "httpbin.org",     "User-Agent": "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",     "X-Amzn-Trace-Id": "Root=1-5eaa5d75-49623fd72c6a4d01cec7a532"  },   "json": null,   "method": "POST",   "origin": "98.173.13.82",   "url": "https://httpbin.org/anything?field1=value1"}00005EMVDBTOOLKIT.SWAP.DEFAULT0c2SUBROUTINE MVDBTOOLKIT.SWAP.DEFAULT(V,F,T)V=SWAP(V,F,T)RETURN00033CMVDBTOOLKIT.WGETENV0c2SUBROUTINE MVDBTOOLKIT.WGETENV(VAR.NAME,RETURN.VALUE)INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL MVDBTOOLKIT.WPLATFORM(POBJ)CALL @WOBJ.RTNE(POBJ,"GET","mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM.TYPE,"",RERR)* THIS FUNCTION IS A CROSS PLATFORM WGET VAR FUNCTIONBEGIN CASE    CASE PLATFORM.MV="D3" AND PLATFORM.TYPE="LINUX"        FILEIO.RTNE="MVDBTOOLKIT.WGETENV.D3"        CALL MVDBTOOLKIT.WGETENV.D3(VAR.NAME,RETURN.VALUE)    CASE PLATFORM.MV="JBASE"        FILEIO.RTNE="MVDBTOOLKIT.WGETENV.JBASE"        CALL MVDBTOOLKIT.WGETENV.JBASE(VAR.NAME,RETURN.VALUE)    CASE 1        CALL MVDBTOOLKIT.WGETENV.GENERIC(VAR.NAME,RETURN.VALUE,PLATFORM.MV,PLATFORM.TYPE)END CASEend.of.run: *RETURN000156MVDBTOOLKIT.WEXECUTE.INCLUDE0c2* COMMON FOR EXECUTE *COMMON /MVDBWEX/ EXECUTE.COMMANDCOMMON /MVDBWEX/ EXECUTE.DIRECTORYCOMMON /MVDBWEX/ EXECUTE.DOCAPTURECOMMON /MVDBWEX/ EXECUTE.RETURNINGCOMMON /MVDBWEX/ EXECUTE.RTNDATACOMMON /MVDBWEX/ EXECUTE.PASSLISTCOMMON /MVDBWEX/ MV.TYPECOMMON /MVDBWEX/ PLATFORMCOMMON /MVDBWEX/ EXECUTE.DEBUG000498MVDBTOOLKIT.WEXECUTE.D30c2SUBROUTINE MVDBTOOLKIT.WEXECUTE.D3(EOBJ)INCLUDE MVDBTOOLKIT.WEXECUTE.INCLUDE************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 12, 2018* Description: Execute library JBASE VERSION***********************************************************************INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJE.RESULTS=""E.RETURNING=""E.RTNDATA=""BEGIN CASE    CASE EXECUTE.DOCAPTURE="N"        EXECUTE '!':EXECUTE.COMMAND     CASE 1        EXECUTE '!':EXECUTE.COMMAND CAPTURING E.RESULTEND CASEIF EXECUTE.DEBUG="1"OR OCONV(EXECUTE.DEBUG[1,1],'MCU')='Y' THEN   WRITE.DEBUG=1   OPEN 'RESULT.FILE' TO RFILE ELSE WRITE.DEBUG=0   IF WRITE.DEBUG THEN       WRITE EXECUTE.COMMAND ON RFILE, 'WEXECUTE'   ENDENDCONVERT CHAR(0) TO '' IN E.RESULTCONVERT CHAR(255) TO '' IN E.RESULTCALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)IF MV.TYPE='UNIDATA' THEN E.RESULT=E.RESULT[1,LEN(E.RESULT)-1]CALL @WOBJ.RTNE(EOBJ,"SET.STRING","result.result",E.RESULT,"",RERR)RETURN0004E5MVDBTOOLKIT.WGETENV.GENERIC0c2SUBROUTINE MVDBTOOLKIT.WGETENV.GENERIC(VAR.NAME, RETURN.VALUE, MVTYPE, PLATFORM)RETURN.VALUE=""* WE ARE GOING TO JUST SHELL OUT AND GET THE ENVIRONMENT VARIABLE BASED* ON THE PLATFORMBEGIN CASE    CASE MVTYPE="UNIVERSE" AND PLATFORM="LINUX"        CMND='sh -c "echo $':VAR.NAME:'"'    CASE MVTYPE="UNIVERSE" AND PLATFORM="WINDOWS"        CMND='dos /c "echo %':VAR.NAME:'%"'    CASE (MVTYPE="JBASE" OR MVTYPE="D3") AND PLATFORM="LINUX"        CMND='!echo $':VAR.NAME    CASE MVTYPE="JBASE" AND PLATFORM="WINDOWS"         CMND='echo %':VAR.NAME:'%'    CASE MVTYPE="D3" AND PLATFORM="WINDOWS"        CMND='!echo %':VAR.NAME:'%'    CASE MVTYPE='UNIDATA' AND PLATFORM="WINDOWS"        CMND='!echo %':VAR.NAME:'%'    CASE MVTYPE='UNIDATA' AND PLATFORM="LINUX"        CMND='!echo $':VAR.NAME    CASE MVTYPE='QM' AND PLATFORM="WINDOWS"        * QM DOES HAVE SYSTEM(1025) TO GET ENVIRONMENT STUFF        * STICKING WITH THIS FOR NOW        CMND='!echo %':VAR.NAME:'%'    CASE MVTYPE='QM' AND PLATFORM="LINUX"        CMND='!echo $':VAR.NAME    CASE 1        CMND=''END CASEEXECUTE CMND CAPTURING RETURN.VALUEIF MVTYPE='UNIDATA' THEN    RETURN.VALUE=RETURN.VALUE[1,LEN(RETURN.VALUE)-1]ENDRETURN000322MVDBTOOLKIT.EXPAND.PATH0c2SUBROUTINE MVDBTOOLKIT.EXPAND.PATH(PASSED.PATH)INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL MVDBTOOLKIT.WPLATFORM(POBJ)CALL @WOBJ.RTNE(POBJ,"GET","mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM.TYPE,"",RERR)PARSED.PATH=PASSED.PATHCONVERT PLATFORM.DELIM TO @AM IN PARSED.PATHPARSED.PARTS=DCOUNT(PARSED.PATH,@AM)FOR P=1 TO PARSED.PARTS    THIS.PART=PARSED.PATH<P>    IF THIS.PART[1,1]='%' OR THIS.PART[1,1]="$" THEN        CONVERT '%$' TO '' IN THIS.PART         CALL MVDBTOOLKIT.WGETENV(THIS.PART,NEW.THIS.PART)         IF NEW.THIS.PART # "" THEN PARSED.PATH<P>=NEW.THIS.PART    ENDNEXT PCONVERT @AM TO PLATFORM.DELIM IN PARSED.PATHPASSED.PATH=PARSED.PATHRETURN00002DMVDBTOOLKIT.TEST.INCLUDE0c2CMND = SENTENCE()0001E1MVDBTOOLKIT.SWAP0c2SUBROUTINE MVDBTOOLKIT.SWAP(V,F,T)* MVDBTOOLKIT.SWAPINCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ* PLATFORM INDEPENDENT SWAP COMMANDCALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)BEGIN CASE    CASE MV.TYPE='UNIVERSE'        CALL MVDBTOOLKIT.SWAP.UNIVERSE(V,F,T)    CASE MV.TYPE='UNIDATA'        CALL MVDBTOOLKIT.SWAP.UNIDATA(V,F,T)    CASE 1        CALL MVDBTOOLKIT.SWAP.DEFAULT(V,F,T)END CASERETURN000778MVDBTOOLKIT.WPLATFORM0c2      SUBROUTINE MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)      **********************************************************************      *      * Copyright (C) 2017 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: June 12, 2018      * Description: WPLATFORM OBJ      *      **********************************************************************      *      *      * PLATFORMOBJ      *      * {      *   "platform":" WINDOWS OR LINUX",      *   "mvtype"  :" JBASE, D3, UNIDATA, UNIVERSE, OPENQM",      *   "tmpdir"  :"tmp dir"      * }      * nEW lINE      INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ            USE.DICT=1      OPEN "DICT","MVDBTOOLKIT.BP" TO DICT.MVDBTOOLKIT.BP ELSE USE.DICT=0      IF USE.DICT THEN         READ PLATFORMOBJ.JSON FROM DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON" ELSE PLATFORMOBJ.JSON=""      END      OPEN "MD" TO FI.MD ELSE         OPEN "VOC" TO FI.MD ELSE RETURN      END      * 02/06/2020 - Changed md item name to MV.PLATFORM.JSON to make it not tied to this package            IF PLATFORMOBJ.JSON="" THEN         CRT "No MV.PLATFORM.JSON IN MD!!!"         STOP      END      CONVERT CHAR(254) TO '' IN PLATFORMOBJ.JSON      CALL @WOBJ.RTNE(PLATFORMOBJ,"FROMSTRING","",PLATFORMOBJ.JSON,"",RERR)      * 9/2/2019 PAP - We now figure out filedelim vs passing it in original config filedelim      CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)      IF PLATFORM="WINDOWS" THEN DELIM = "\" ELSE DELIM = "/"      CALL @WOBJ.RTNE(PLATFORMOBJ,"SET","filedelim",DELIM,"",RERR)      CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","tmpdir",TMP.DIR,"",RERR)      CALL @WOBJ.RTNE(PLATFORMOBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR)      WRITE OUT.JSON ON DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON"      RETURN0006D0MVDBTOOLKIT.ENCODE0c2SUBROUTINE MVDBTOOLKIT.ENCODE(IN.STR,OUT.STR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: encode json string*************************************************************************** THIS PROGRAM WILL CONVERT ALL BAD CHARACTERS TO AN ESCAPED CHARACTER***EQU CR TO CHAR(13), LF TO CHAR(10), TB TO CHAR(9), BS TO CHAR(8), FF TO CHAR(12)NL = CR:LFPRETTIFYCR=""**OPEN 'RESULT.FILE' TO RFILE ELSE STOP* WE NEED TO ENCODE* " = \"   (34)* \ = \\    (92)* / = \/* CHAR(7) = \b* CHAR(13) = \r* char(10) = \n* char(12) = \f* char(9)  = \tOUT.STR=''L=LEN(IN.STR)CONVERT @AM TO LF IN IN.STR; * LETS SWITCH 254 TO LF BE DEFAULTFOR X=1 TO L    C=IN.STR[X,1]    SEQ.C=SEQ(C)    ENCODE=0    *IF SEQ.C < 32 THEN ENCODE=1; * BELOW SPACE    *IF SEQ.C > 32 AND SEQ.C < 48 THEN ENCODE=1; * LETS ENCODE ALL OF THIS !@$%^&*()    IF SEQ.C=34 THEN ENCODE=1    IF SEQ.C=92 THEN ENCODE=1    * IF SEQ.C=47 THEN ENCODE=1    *IF SEQ.C > 126 THEN ENCODE = 1; * LETS ENCODE ALL THE HIGH ENTRIES    *IF SEQ.C >= 91 AND SEQ.C <= 96 THEN ENCODE=1    IF ENCODE THEN        BEGIN CASE            CASE SEQ.C=7; OUT.STR='\b'            CASE C='\'; OUT.STR:='\\'                *CASE C='/'; OUT.STR:='\/'            CASE C='"'; OUT.STR:='\"'            CASE SEQ.C=10                OUT.STR:='\n'                IF PRETTIFYCR THEN OUT.STR:=NL            CASE SEQ.C=13; OUT.STR:='\r'            CASE SEQ.C=12; OUT.STR:='\f'            CASE 1; OUT.STR:='\u00':OCONV(C,'MX0C')        END CASE    END ELSE        OUT.STR=OUT.STR:C    ENDNEXT XRETURNEND002A1DMVDBTOOLKIT.WCALL0c2SUBROUTINE MVDBTOOLKIT.WCALL(PASSED.WOBJ)************************************************************************ Copyright (C) 2018 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 15, 2018* Description: WCALL Library************************************************************************ @WOBJ.RTNE* { "method":"GET,PUT,POST,ETC",*    "url":"URL TO CALL",*    "headers": { "HEADERNAME":"VALUE", "HEADERNAME":"VALUE" },*    "body":"BODY",*    "formfields": [*         {*            "name":"field name",*            "value":"field value",*            "fieldtype":"blank or file" for now*         }*     ],*    "datafields": [*         {*            "name":"field name",*            "value":"field value",*            "fieldtype":"blank or file" for now*         }*     ],*    "insecure":"Yes,Y,YES - Sets the -k on curl",*    "timeout": ## (default is 45),*    "options":"options to add to curl command",*    "debug":"Y or N",*    "response": {*        "result":"RESULT",*        "status":"STATUS",*        "statusmsg":"STATUS MSG",*        "http_type": "http type",*        "curl_cmnd":"Actual curl command created",*         "error": "error",*         "log": [ "log output line1", "log output line 2" ],*        "headers": { "headername":"header value","headername2":"headervalue" }*    }*  }INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL MVDBTOOLKIT.WPLATFORM(POBJ)CALL @WOBJ.RTNE(POBJ,"GET","mvtype",MV.TYPE,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",FILE.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","curllocation",CURLLOCATION,"",RERR); * change #19IF MV.TYPE="" THEN   CALL @WOBJ.RTNE(POBJ,"GET","error",THIS.ERROR,"",RERR)   PRINT "NO MV TYPE: ":THIS.ERROR   RETURNENDITEMS.TO.DELETE=""; * PATH TO EACH FILE TO DELETECALL @WOBJ.RTNE(POBJ,"GET","tmpdir",TMP.DIR,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","debug",DO.DEBUG,"",RERR)IF OCONV(DO.DEBUG[1,1],"MCU")="Y" OR DO.DEBUG="1" THEN DO.DEBUG=1 ELSE DO.DEBUG=""CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","method",WEB.METHOD,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","url",WEB.URL,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","body",WEB.BODY,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","timeout",WEB.TIMEOUT,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"KEYS","headers",WEB.HEADERS,"",RERR)IF NOT(WEB.TIMEOUT) THEN WEB.TIMEOUT=45CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","insecure",WEB.INSECURE,"",RERR)IF OCONV(WEB.INSECURE[1,1],'MCU') = "Y" THEN WEB.INSECURE=1 ELSE WEB.INSECURE=0CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.OBJECT","response","{}","",RERR)IF TMP.DIR="" THEN BEGIN CASE    CASE PLATFORM="LINUX"       TMP.DIR="/tmp"    CASE INDEX(PLATFORM,"WINDOWS",1) AND MV.TYPE="JBASE"       TMP.DIR="%HOME%"    CASE INDEX(PLATFORM,"WINDOWS",1)       TMP.DIR="%USERPROFILE%\AppData\Local\Temp"    CASE 1       TMP.DIR="/tmp" END CASEENDCALL MVDBTOOLKIT.EXPAND.PATH(TMP.DIR)* 4/6/2020 - Change #19.  IF CURLLOCATION # "" THEN   CMND=CURLLOCATIONEND ELSE   CMND="curl"ENDCMND:=" -s"CMND:=' -m ':WEB.TIMEOUTCMND:=' -X ':WEB.METHODCALL @WOBJ.RTNE(PASSED.WOBJ,"GET","options",WEB.OPTIONS,"",RERR)IF WEB.OPTIONS # "" THEN   CMND:=' ':WEB.OPTIONSENDWEB.NUM.HEADERS=DCOUNT(WEB.HEADERS,@SVM)FOR H=1 TO WEB.NUM.HEADERS   HEADER.NAME=WEB.HEADERS<1,1,H>   CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","headers.":HEADER.NAME,HEADER.VALUE,"",RERR)   CALL MVDBTOOLKIT.ENCODE(HEADER.VALUE,ENCODED.HEADER.VALUE)   CMND:=' -H "':HEADER.NAME:': ':ENCODED.HEADER.VALUE:'"'NEXT HUSER.NO=FIELD(OCONV('','U50BB'),' ',1)SESSION.ID="WCALL-":USER.NOTMP.DIR:=FILE.DELIM* add in dumping of headersCMND:=\ -D "\:TMP.DIR:SESSION.ID:\.headers"\ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:'.headers'* write out stderrCMND:=\ -v --stderr "\:TMP.DIR:SESSION.ID:\.stderr"\ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:\.stderr\CALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)SAVE.FOBJ=FOBJIF WEB.BODY # "" THEN   *CALL @WOBJ.RTNE(EOBJ,"SET.ARRAY","data","[]","",RERR)   *CALL @WOBJ.RTNE(EOBJ,"SET.STRING","data[0]",WEB.BODY,"",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","data",WEB.BODY,"",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:'.body',"",RERR)   ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:'.body'   CALL MVDBTOOLKIT.WFILEIO(FOBJ)   CMND:=' --data-binary "@':TMP.DIR:SESSION.ID:'.body"'   *CMND:='  --data-binary @-'END* form fields *CALL @WOBJ.RTNE(PASSED.WOBJ,"LENGTH","formfields",NUM.FORMFIELDS,"",RERR)FOR X=1 TO NUM.FORMFIELDS P="formfields[":X-1:"]" CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.name',FIELD.NAME,"",RERR) CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.value',FIELD.VALUE,"",RERR) CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.fieldtype',FIELD.TYPE,"",RERR) IF TRIM(FIELD.NAME) # "" THEN    * < > @ ALL MEAN SPECIAL THINGS WITH A -F.  If that exists in the file you need    * to use --form-string    BEGIN CASE       CASE INDEX(FIELD.VALUE,CHAR(13),1) OR INDEX(FIELD.VALUE,CHAR(10),1)         * WE NEED TO WRITE THIS OUT!         TMP.CMND="-F "            CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)            CALL @WOBJ.RTNE(FOBJ,"SET","data",FIELD.VALUE,"",RERR)            CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:'.field':X-1,"",RERR)            ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:'.field':X-1            FIELD.VALUE="@":TMP.DIR:SESSION.ID:'.field':X-1            CALL MVDBTOOLKIT.WFILEIO(FOBJ)         * NEED TO WRITE THE CONTENT OUT TO A TMP FILE *       CASE INDEX(FIELD.VALUE,'!',1) OR INDEX(FIELD.VALUE,'<',1) OR INDEX(FIELD.VALUE,'>',1) OR INDEX(FIELD.VALUE,'@',1) OR INDEX(FIELD.VALUE,'$',1) AND FIELD.TYPE # "file"         TMP.CMND="--form-string "       CASE 1         TMP.CMND="-F "    END CASE    TMP.CMND:=FIELD.NAME:'="'    TMP.CMND:=FIELD.VALUE:'"'    CMND:=' ':TMP.CMND ENDNEXT X* form fields *CALL @WOBJ.RTNE(PASSED.WOBJ,"LENGTH","datafields",NUM.FORMFIELDS,"",RERR)FOR X=1 TO NUM.FORMFIELDS      P="datafields[":X-1:"]"      CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.name',FIELD.NAME,"",RERR)      CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.value',FIELD.VALUE,"",RERR)      CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.fieldtype',FIELD.TYPE,"",RERR)      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,'@','%40')      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,'$','%24')      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,'/','%2F')      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,':','%3A')      IF TRIM(FIELD.NAME) # "" THEN         TMP.CMND="-d "         TMP.CMND:=FIELD.NAME:'="'         TMP.CMND:=FIELD.VALUE:'"'         CMND:=' ':TMP.CMND      ENDNEXT X* NOW ADD THE URLCALL MVDBTOOLKIT.SWAP(WEB.URL,' ','%20')CALL MVDBTOOLKIT.SWAP(WEB.URL,'@','%40')CALL MVDBTOOLKIT.SWAP(WEB.URL,'$','%24')*WEB.URL=SWAP(WEB.URL,'/','%2F')CMND:=' "':WEB.URL:'"'* CALL WEXECUTECALL @WOBJ.RTNE(EOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(EOBJ,"SET","command",CMND,"",RERR)CALL @WOBJ.RTNE(EOBJ,"SET","debug",DO.DEBUG,"",RERR); * LAY IN DEBUGGING PARAMIF WEB.BODY # "" THEN   * CALL @WOBJ.RTNE(EOBJ,"SET","data[0]",WEB.BODY,"",RERR)ENDCALL MVDBTOOLKIT.WEXECUTE(EOBJ); * DO THE CALL* READ IN THE HEADERSCALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:".headers","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.HEADERS,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.headers",RESPONSE.HEADERS,"",RERR)* Lets break the headers down into an arrayCALL @WOBJ.RTNE(PASSED.WOBJ,"SET.OBJECT","response.headers","{}","",RERR)NUM.HEADERS=DCOUNT(RESPONSE.HEADERS,@AM)HTTP.TYPE=''; HTTP.STATUS.CODE=''; HTTP.MSG=''FOR H=1 TO NUM.HEADERS   HEADER.LINE=RESPONSE.HEADERS<H>   IF HEADER.LINE[1,4]="HTTP" AND NOT(INDEX(HEADER.LINE,":",1)) THEN      HTTP.TYPE=FIELD(HEADER.LINE,' ',1)      HTTP.STATUS.CODE=FIELD(HEADER.LINE,' ',2)      HTTP.STATUS.MSG=FIELD(HEADER.LINE,' ',3,99)   END ELSE      HEADER.NAME=TRIM(FIELD(HEADER.LINE,':',1))      CONVERT CHAR(13):CHAR(10) TO '' IN HEADER.NAME; * CATCHES BLANK LINES      HEADER.VALUE=FIELD(HEADER.LINE,':',2,999999)      IF  HEADER.VALUE[1,1]=' ' THEN HEADER.VALUE=HEADER.VALUE[2,LEN(HEADER.VALUE)]; * messy left trim      CONVERT CHAR(13):CHAR(10) TO '' IN HEADER.VALUE; * STRIP AN NEW LINES      IF HEADER.NAME # "" THEN         * NOW PUT THE HEADER INTO OUR ARRAY         CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.headers.":HEADER.NAME,HEADER.VALUE,"",RERR)      END   ENDNEXT HCALL @WOBJ.RTNE(PASSED.WOBJ,"SET.NUMBER","response.status",HTTP.STATUS.CODE,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.http_type",HTTP.TYPE,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.statusmsg",HTTP.STATUS.MSG,"",RERR)* READ IN STDERR (LOG) AND POST AS A ARRAYFOBJ=SAVE.FOBJCALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:'.stderr',"",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.STDERR,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.ARRAY","response.log","[]","",RERR)CONVERT CHAR(13) TO @AM IN RESPONSE.STDERRCONVERT CHAR(10) TO "" IN RESPONSE.STDERRNUM.LINES=DCOUNT(RESPONSE.STDERR,@AM)* 4/2/2020 pap  - Look for bad curl statement!!GOOD.CURL=1CURL.BAD.MSG=""FOR L=1 TO NUM.LINES    LINE=RESPONSE.STDERR<L>    BEGIN CASE      CASE INDEX(LINE,'curl:',1)         * LETS CAPTURE THE FIRST ONE         IF CURL.BAD.MSG = "" THEN CURL.BAD.MSG=TRIM(FIELD(LINE,':',2,999))         GOOD.CURL=0      CASE INDEX(LINE,'warning:',1)    END CASE    CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.log[-1]",LINE,"",RERR)NEXT LIF NOT(GOOD.CURL) THEN   CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.NUMBER","response.status","400","",RERR)   CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.statusmsg",CURL.BAD.MSG,"",RERR)END*CALL @WOBJ.RTNE(EOBJ,"TOSTRING","",TEST.JSON,"PRETTIFY",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","result.result",EXECUTE.RESULT,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.data",EXECUTE.RESULT,"",RERR)end.of.call: ** XDELETE REQUIRED FILESNUM.ITEMS.TO.DELETE=DCOUNT(ITEMS.TO.DELETE,@AM)FOR I=1 TO NUM.ITEMS.TO.DELETE      ITEM.TO.DELETE=ITEMS.TO.DELETE<I>      FOBJ=SAVE.FOBJ      CALL @WOBJ.RTNE(FOBJ,"SET","action","DELETE","",RERR)      CALL @WOBJ.RTNE(FOBJ,"SET","path",ITEM.TO.DELETE,"",RERR)      IF DO.DEBUG THEN         CRT "Normally trying to delete: ":ITEM.TO.DELETE      END ELSE         CALL MVDBTOOLKIT.WFILEIO(FOBJ)      ENDNEXT ICALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.curl_cmnd",CMND,"",RERR)RETURN00056BMVDBTOOLKIT.WEXECUTE.JBASE0c2SUBROUTINE MVDBTOOLKIT.WEXECUTE.JBASE(EOBJ)INCLUDE MVDBTOOLKIT.WEXECUTE.INCLUDE************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 12, 2018* Description: Execute library JBASE VERSION***********************************************************************INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJE.RESULTS=""E.RETURNING=""E.RTNDATA=""CALL @WOBJ.RTNE(EOBJ,"LENGTH","data",NUM.DATA,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","DEBUG",DODEBUG,"",RERR)IF OCONV(DODEBUG[1,1],"MCU") = "Y" OR DODEBUG="1" THEN DODEBUG=1 ELSE DODEBUG=0FOR X=1 TO NUM.DATA    CALL @WOBJ.RTNE(EOBJ,"GET","data[":X-1:"]",THIS.DATA,"",RERR)    *PRINT "DATA: ":THIS.DATA    DATA THIS.DATANEXT XIF DODEBUG THEN   CRT "CMND: ":EXECUTE.COMMAND   CRT "DOCAPTURE: ":EXECUTE.DOCAPTUREENDSHELL=CHAR(255):'k'BEGIN CASE    CASE EXECUTE.DOCAPTURE="N"        EXECUTE SHELL:EXECUTE.COMMAND        E.RESULT=""    CASE 1        EXECUTE SHELL:EXECUTE.COMMAND CAPTURING E.RESULTEND CASEIF DODEBUG THEN    CRT "Command !":EXECUTE.COMMAND    CRT "RESULT: ":E.RESULTENDCONVERT CHAR(0) TO '' IN E.RESULTCONVERT CHAR(255) TO '' IN E.RESULTCALL @WOBJ.RTNE(EOBJ,"SET.STRING","result.result",E.RESULT,"",RERR)*PRINT 'JBASE EXECUTE ':; DEBUGRETURN00018CMVDBTOOLKIT.WOBJ.CHOOSE.WOBJ0c2* Code to determine default wobj library to use* This needs to change for MVDBTOOLKIT build, defaults to WOBJWOBJ.RTNE="WOBJ"NO.MD.FILE=0OPEN "MD" TO FILE.MD ELSE    OPEN "VOC" TO FILE.MD ELSE NO.MD.FILE=1ENDIF NOT(NO.MD.FILE) THEN    READ WOBJ.CONF FROM FILE.MD, "WOBJ.CONF" ELSE WOBJ.CONF=""    IF WOBJ.CONF<3> # "" THEN WOBJ.RTNE=WOBJ.CONF<3>END0001BCMVDBTOOLKIT.WGETENV.D30c2SUBROUTINE MVDBTOOLKIT.WGETENV.D3(VAR.NAME, RETURN.VALUE)RETURN.VALUE=""* Gets and displays the PATH environment variablecfunction unix.builtinpointer=(char*)%getenv(VAR.NAME)if pointer = 0 then   RETURN.VALUE=""end else* We got a C pointer the path variable. Copy it* into pick variable   char path[1024]   %strcpy(path, (char*)pointer)   path = field(path,char(0),1)   RETURN.VALUE=pathendRETURN003E55MVDBTOOLKIT.CONFIG0c2      PRINT @(-1):"MVDBTOOLKIT.CONFIG"      PRINT      COMMON /MVMKCOM/ MVMAKE.SUB.COMMON.INFO      MVMAKE.SUB.COMMON.INFO=""; * DO NOT USE FOR THIS VERSION      IF MVMAKE.SUB.COMMON.INFO="" OR MVMAKE.SUB.COMMON.INFO = "0" THEN         *    CRT "MVDBTOOLKIT.CONFIG MUST BE CALLED FROM MVMAKE"         *    STOP      END      INCLUDE MVDBTOOLKIT.TEST.INCLUDE      INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ      OPEN "DICT","MVDBTOOLKIT.BP" TO DICT.MVDBTOOLKIT.BP ELSE STOP      * 4/29/2020 - pap - This entire excercise it to get MV.PLATFORM.JSON populated the      *                   first time.  MVMAKE already asked the questions, if the file did      *                   not exist those answers will be passed to use via the common.      *                   The reason mvmake cannot fix this is the file to the dictionary      *                   is created later.  If MVmake tries to write it out it has to      *                   read it in properly due to items this process populates, such as      *                   TMPDIR.  If the package does not properly install then      *                   WOBJ may not be available.  Better to do it all here.      *      *                   Therefore we manually read the file, update PLATFORM and MVTYPE      *                   and write it back.  We then call WPLATFORM and move on as normal      READ PLATFORM.JSON FROM DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON" ELSE PLATFORM.JSON="{}"      IF TRIM(PLATFORM.JSON) = "" THEN PLATFORM.JSON="{}"      CALL @WOBJ.RTNE(PLATFORM.OBJ,"FROMSTRING","",PLATFORM.JSON,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",MVTYPE,"",RERR)      IF MVMAKE.SUB.COMMON.INFO<2> # "" THEN PLATFORM=MVMAKE.SUB.COMMON.INFO<2>      IF MVMAKE.SUB.COMMON.INFO<3> # "" THEN MVTYPE=MVMAKE.SUB.COMMON.INFO<3>      IF PLATFORM="" OR MVTYPE="" THEN         ** LETS FIGURE OUT THE PLATFORM **         EXECUTE 'jdiag' CAPTURING RESULT         RESULT=OCONV(RESULT,"MCU")         IF INDEX(RESULT,'JBASE',1) THEN            MVTYPE="JBASE"            OS.POS=INDEX(RESULT,"OS RELEASE",1)            OS.TYPE=RESULT[OS.POS,9999]            OS.TYPE=OS.TYPE<1,1,1>            OS.TYPE=OCONV(OS.TYPE,"MCU")            IF INDEX(OS.TYPE,"WINDOWS",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE 'WHICH' CAPTURING RESULT         RESULT=OCONV(RESULT,"MCU")         IF INDEX(RESULT,"D3",1) THEN            MVTYPE="D3"            IF INDEX(RESULT,"WINDOWS",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE 'CT ERRMSG 335 (N' CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"MVBASE",1) THEN            MVTYPE="MVBASE"; * NOT SUPPORTED            GOTO end.of.mvtype         END         EXECUTE "VERSION" CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"UNIDATA",1) THEN            MVTYPE="UNIDATA"            EXECUTE '!SET' CAPTURING OS.TYPE            OS.TYPE=OCONV(OS.TYPE,'MCU')            IF INDEX(OS.TYPE,"WINDIR",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE "CT VOC QM.ACCOUNTS" CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"QMSYS",1) THEN            MVTYPE="QM"            EXECUTE '!SET' CAPTURING OS.TYPE            OS.TYPE=OCONV(OS.TYPE,'MCU')            IF INDEX(OS.TYPE,"WINDIR",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE 'CT VOC UVPROMPT' CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"1 V",1) THEN            MVTYPE="UNIVERSE"            EXECUTE 'sh -c "pwd"' CAPTURING RESULT            IF INDEX(OCONV(RESULT,"MCU"),"NOT AVAILABLE",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         ENDend.of.mvtype: *         IF PLATFORM="" THEN            PRINT "NO PLATFORM FOUND"; STOP            PRINT "ENTER PLATFORM (LINUX OR WINDOWS)[":PLATFORM:"]: ":; INPUT TMP.ANS            IF TMP.ANS # "" THEN PLATFORM=TMP.ANS            PLATFORM=OCONV(PLATFORM,"MCU")            BEGIN CASE               CASE PLATFORM="WINDOWS"                  D3.PREFIX="dos"                  PLATFORM.DELIM="\"               CASE PLATFORM="LINUX"                  D3.PREFIX="unix"                  PLATFORM.DELIM="/"               CASE 1                  CRT "Invalid Platform ":PLATFORM; STOP            END CASE         END         IF MVTYPE="" THEN            PRINT "NO MVTYPE FOUND"; STOP            PRINT "ENTER MVTYPE (JBASE, QM, D3, UNIVERSE, UNIDATA)[":MVTYPE:"] ":; INPUT TMP.ANS            IF TMP.ANS # "" THEN MVTYPE = TMP.ANS            MVTYPE=OCONV(MVTYPE,"MCU")            BEGIN CASE               CASE MVTYPE="JBASE"               CASE MVTYPE="QM"               CASE MVTYPE="D3"               CASE MVTYPE="UNIVERSE"               CASE MVTYPE="UNIDATA"               CASE 1                  CRT "Invalid MVTYPE"; STOP            END CASE         END      END      MVMAKE.SUB.COMMON.INFO<1>='REBUILD'      MVMAKE.SUB.COMMON.INFO<2>=PLATFORM      MVMAKE.SUB.COMMON.INFO<3>=MVTYPE      PRINT "Platform:      ":PLATFORM      PRINT "MV type :      ":MVTYPE      PRINT      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","mvtype",MVTYPE,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","platform",MVMAKE.SUB.COMMON.INFO<2>,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","mvtype",MVMAKE.SUB.COMMON.INFO<3>,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"TOSTRING","",PLATFORM.JSON,"PRETTIFY",RERR)      CONVERT CHAR(13) TO @AM IN PLATFORM.JSON      CONVERT CHAR(10) TO '' IN PLATFORM.JSON      WRITE PLATFORM.JSON ON DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON"      CALL MVDBTOOLKIT.WPLATFORM(PLATFORM.OBJ)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",MVTYPE,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","filedelim",FILEDELIM,"",RERR)      IF PLATFORM = "" THEN         CRT "No platform configured!!!"; STOP      END      IF MVTYPE = "" THEN         CRT "No MVType configured!!!"; STOP      END      * GET ENVIRONMENT      * Let get our current directory      TEST="pwd"; GOSUB start.test      IF OCONV(PLATFORM,"MCU") = "WINDOWS" THEN         CMND='echo %CD%'      END ELSE         CMND='pwd'      END      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      CONVERT CHAR(13):CHAR(10) TO '' IN CMND.RESULT      TEST.STATUS=1      TEST.MSG=CMND.RESULT      GOSUB end.test      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.PATH,"",RERR)      IF TMP.PATH="" THEN         IF MVMAKE.SUB.COMMON.INFO<5>="" THEN MVMAKE.SUB.COMMON.INFO<5>="mvdbtoolkit"         BEGIN CASE            CASE MVTYPE="D3" AND PLATFORM="LINUX"               * DANG D3 HAS IT'S OWN DANG FILE SYSTEM, LETS JUST CREATE A TMP DIR AND MOVE               TMP.PATH="/tmp"            CASE MVTYPE="D3" AND PLATFORM="LINUX"               TMP.DATH="c:\tmp"               EXECUTE '!mkdir c:\tmp'            CASE OCONV(MVMAKE.SUB.COMMON.INFO<5>,"MCU") = "MVDBTOOLKIT"               * WE HAVE RELATIVE POSITIONING               TMP.PATH=CMND.RESULT:FILEDELIM:"TMP"               MVDBTOOLKIT.LOCATION=CMND.RESULT            CASE 1               TMP.PATH=MVMAKE.SUB.COMMON.INFO<5>:FILEDELIM:"TMP"               MVDBTOOLKIT.LOCATION=MVMAKE.SUB.COMMON.INFO<5>         END CASE      END      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","tmpdir",TMP.PATH,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","mvdbtoolkitlocation",MVDBTOOLKIT.LOCATION,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","curllocation",CURLLOCATION,"",RERR)      TEST='tmpdir'; GOSUB start.test      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.DIR,"",RERR)      TEST.MSG=TMP.DIR      TEST.STATUS=1      IF TMP.DIR="" THEN TEST.STATUS=0      GOSUB end.test      TEST='MVDBTOOLKIT.SWAP'      GOSUB start.test      S='TEST LINE TEST LINE'      ORIG.STRING=S      CALL MVDBTOOLKIT.SWAP(S,"ES","XX")      IF S = "TXXT LINE TXXT LINE" THEN TEST.STATUS=1 ELSE TEST.STATUS=0      TEST.MSG=S      GOSUB end.test      * Test 1 Getenv      TEST="getenv"      GOSUB start.test      CALL MVDBTOOLKIT.WGETENV("PATH",PATH)      IF PATH # "" THEN         TEST.MSG=PATH[1,60]         TEST.STATUS=1      END ELSE         TEST.MSG=""         TEST.STATUS=0      END      GOSUB end.test      * Test WEXECUTE      TEST="wexecute"; GOSUB start.test      CMND='echo MVDBTOOLKIT.TEST'      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      IF INDEX(CMND.RESULT,"MVDBTOOLKIT.TEST",1) THEN         TEST.MSG=CMND.RESULT         TEST.STATUS=1      END ELSE         TEST.MSG=CMND.RESULT         TEST.STATUS=0      END      CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG      GOSUB end.test      * Test WFILEIO      TEST="WFILEIO-WRITE"      USER.NO=FIELD(OCONV('','U50BB'),' ',1)      GOSUB start.test      CALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)      TMP.FILE.NAME=TMP.DIR:FILEDELIM:'TMP-':USER.NO:'.txt'      TEST.MSG=TMP.FILE.NAME      CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.FILE.NAME,"",RERR)      SAVE.FOBJ=FOBJ      TMP.DATA=TIMEDATE()      CALL @WOBJ.RTNE(FOBJ,"SET","data",TMP.DATA,"",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUS.MSG,"",RERR)      TEST.STATUS=RESPONSE.STATUS      IF NOT(RESPONSE.STATUS) THEN TEST.MSG:=RESPONSE.STATUS.MSG      GOSUB end.test      IF NOT(TEST.STATUS) THEN STOP "Test Failed, no reason to continue"      TEST='WFILEIO-READ'      GOSUB start.test      * NOW READ IT BACK IN      CALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)      TEST.MSG="(":TMP.DATA:')=(':RESPONSE.DATA:")"      TEST.STATUS=1      IF TMP.DATA # RESPONSE.DATA THEN TEST.STATUS=0      GOSUB end.test      TEST="WFILEIO-DELETE"; GOSUB start.test      FOBJ=SAVE.FOBJ      CALL @WOBJ.RTNE(FOBJ,"SET","action","DELETE","",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      FOBJ=SAVE.FOBJ      CALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      RESPONSE.DATA=""      CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUSMSG,"",RERR)      TEST.STATUS=1      TEST.MSG=TMP.FILE.NAME:' ':RESPONSE.STATUS      IF RESPONSE.STATUS=0 AND RESPONSE.DATA="" THEN NULL ELSE TEST.STATUS=0      GOSUB end.test      * Let get our current directory      TEST="pwd"; GOSUB start.test      IF OCONV(PLATFORM,"MCU") = "WINDOWS" THEN         CMND='echo %CD%'      END ELSE         CMND='pwd'      END      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      IF 1 THEN         TEST.MSG=CMND.RESULT         TEST.STATUS=1      END ELSE         TEST.MSG=CMND.RESULT         TEST.STATUS=0      END      CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG      GOSUB end.test      MVDBTOOLKIT.LOCATION = CMND.RESULT      * Lets verify we have curl!!!      IF CURLLOCATION="" THEN CURLLOCATION="curl"      TEST="default curl"; GOSUB start.test      CMND=CURLLOCATION:' -V'      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      BEGIN CASE         CASE INDEX(CMND.RESULT,"libcurl",1) AND 1            TEST.MSG=CMND.RESULT            TEST.STATUS=1         CASE OCONV(PLATFORM,"MCU")="WINDOWS"            TEST.MSG=CMND.RESULT            CURLLOCATION=""            TEST.STATUS=2         CASE 1            TEST.MSG=0      END CASE      CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG      GOSUB end.test      * THIS IS SLOPPY CODE      IF CURLLOCATION="" AND PLATFORM="WINDOWS" THEN         * Start looking for curl         IF TEST.STATUS=2 THEN            CURLLOCATION="C:\PROGRA~2\Zumasys\MVDASH~1\bin\curl.exe"            TEST="curl via mvconnect"; GOSUB start.test            CMND=CURLLOCATION:' -V'            CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)            CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)            CALL MVDBTOOLKIT.WEXECUTE(COBJ)            CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)            BEGIN CASE               CASE INDEX(CMND.RESULT,"libcurl",1) AND 1                  TEST.MSG=CMND.RESULT                  TEST.STATUS=1               CASE OCONV(PLATFORM,"MCU")="WINDOWS"                  TEST.MSG=CMND.RESULT                  TEST.STATUS=2               CASE 1                  TEST.MSG=CMND.RESULT                  TEST.STATUS=0            END CASE            CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG            GOSUB end.test         END         IF TEST.STATUS=2 THEN            CURLLOCATION="c:\progra~1\git\mingw64\bin\curl.exe"            TEST="curl via git"; GOSUB start.test            CMND=CURLLOCATION:' -V'            CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)            CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)            CALL MVDBTOOLKIT.WEXECUTE(COBJ)            CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)            BEGIN CASE               CASE INDEX(CMND.RESULT,"libcurl",1) AND 0                  TEST.MSG=CMND.RESULT                  TEST.STATUS=1               CASE 1                  TEST.STATUS=0                  TEST.MSG=CMND            END CASE            CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG            GOSUB end.test         END         IF CURLLOCATION # "" THEN            CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","curllocation",CURLLOCATION,"",RERR)         END      END      CALL @WOBJ.RTNE(PLATFORM.OBJ,"TOSTRING","",PLATFORM.JSON,"PRETTIFY",RERR)      CONVERT CHAR(13) TO @AM IN PLATFORM.JSON      CONVERT CHAR(10) TO '' IN PLATFORM.JSON      WRITE PLATFORM.JSON ON DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON"      STOP      *      RETURN      *process.error: *      IF RERR<1> THEN         TEST.STATUS=-1         TEST.MSG=RERR<1>      END      RETURN      *      *start.test: *      TEST.STATUS=0      TEST.MSG="Success"      PRINT "":TEST[1,15]"L(#15)":      RETURN      *end.test: *      PRINT "  ":TEST.MSG[1,50]"L(#50)":      PRINT " ":      PRE=''; AFT=''      BEGIN CASE         CASE TEST.STATUS=2; ERROR="Warning"; PRE=''; AFT=''         CASE TEST.STATUS; ERROR="Passed"         CASE 1; ERROR="Failed"; PRE=@(-13); AFT=@(-14)      END CASE      PRINT PRE:"[":      PRINT ERROR"L(#7)":      PRINT "]":AFT      RETURN000CA7MVDBTOOLKIT.WEXECUTE0c2SUBROUTINE MVDBTOOLKIT.WEXECUTE(EOBJ)INCLUDE MVDBTOOLKIT.WEXECUTE.INCLUDE************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 12, 2018* Description: Execute library************************************************************************* EOBJ* { "command":"COMMAND TO USE",*    "directory":"OPTIONAL DIRECTORY TO RUN IN",*    "debug":"YES OR NO",*    "docapture":"YES OR NO, DEFAULT YES",*    "returning":"YES OR NO, DEFAULT YES",*    "rtndata":"YES OR NO, DEFAULT NO",*    "passlist":"ACTUAL PASSLIST"*    "data": ["ARRAY OF DATA STATEMENTS"],*    "result: {w*                "result":"RESULT IF CAPTURED",*                "rtndata":"RESULT OF RTNDATA",*                "returning":"RESULT OF RETURNING",*                "debug":"DEBUG INFORMATION IF TURNED ON"*    }*    }INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ* With native objects we cannot do this.  We will need* a platform specific way of recognizing this.* Perhaps changes itself to WOBJ?IF ''="NEW" THEN    * CREATE A NEW OBJECT AND RETURN IT    EJSON=\{ "command":"",\    EJSON:=\ "directory":"",\    EJSON:=\ "debug":"NO",\    EJSON:=\ "returning":"YES",\    EJSON:=\ "rtndata":"YES",\    EJSON:=\ "passlist":"",\    EJSON:=\ "data: []"\    EJSON:=\}\    CALL @WOBJ.RTNE(EOBJ,"FROMSTRING","",EJSON,"",RERR)    RETURNENDCALL @WOBJ.RTNE(EOBJ,"GET","command"      ,EXECUTE.COMMAND        ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","directory"    ,EXECUTE.DIRECTORY      ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","docapture"    ,EXECUTE.DOCAPTURE      ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","returning"    ,EXECUTE.RETURNING      ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","rtndata"      ,EXECUTE.RTNDATA        ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","passlist"     ,EXECUTE.PASSLIST       ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","debug"        ,EXECUTE.DEBUG          ,"",RERR)IF EXECUTE.DEBUG = "" THEN    CALL @WOBJ.RTNE(EOBJ,"GET","DEBUG",EXECUTE.DEBUG,"",RERR)ENDIF OCONV(EXECUTE.DEBUG[1,1],"MCU") = "Y" OR EXECUTE.DEBUG="1" THEN EXECUTE.DEBUG=1 ELSE EXECUTE.DEBUG=0IF EXECUTE.DEBUG THEN    *CRT "EXECUTE.COMMAND: ":EXECUTE.COMMAND    *CRT "DIRECTORY      : ":EXECUTE.DIRECTORY    *CRT "OCAPTURE       : ":EXECUTE.OCAPTURE    *CRT "RETURNING      : ":EXECUTE.RETURNINGENDCALL @WOBJ.RTNE(EOBJ,"TOSTRING","",TEST.JSON,"",RERR)* ERROR HANDLING TODOCALL @WOBJ.RTNE(EOBJ,"SET.OBJECT","result","{}","",RERR)CALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)BEGIN CASE   CASE MV.TYPE='D3'       CALL MVDBTOOLKIT.WEXECUTE.D3(EOBJ)   CASE MV.TYPE='UNIDATA'       CALL MVDBTOOLKIT.WEXECUTE.UNIDATA(EOBJ)   CASE MV.TYPE="QM"       CALL MVDBTOOLKIT.WEXECUTE.QM(EOBJ)   CASE MV.TYPE="JBASE"       CALL MVDBTOOLKIT.WEXECUTE.JBASE(EOBJ)   CASE MV.TYPE="UNIVERSE"       CALL MVDBTOOLKIT.WEXECUTE.UNIVERSE(EOBJ)   CASE 1        CALL @WOBJ.RTNE(EOBJ,"SET","result.error","Invalid mvplatform=":MV.TYPE,"",RERR)END CASE**EXECUTE CHAR(255):'k':CMND CAPTURING RESULT*CONVERT CHAR(0) TO '' IN RESULT*CONVERT CHAR(255) TO '' IN RESULTRETURN003F7CMVSENDGRID.BP0c0000BAEMVSENDGRID.TEST0c2* PROGRAM MVSENDGRID.TEST*PRINT "Enter email to send test to: ":; INPUT TEST.EMAIL.TOPRINT "Enter full path to file to send (leave blank to not send a file): ":; INPUT FILE.TO.SENDIF FILE.TO.SEND # "" THEN   PRINT "Type of file: 1-pdf, 2=text: ":; INPUT ANS   BEGIN CASE     CASE ANS="1"; FILE.TYPE="application/pdf"     CASE ANS="2"; FILE.TYPE="text/plain"     CASE 1       PRINT "Invalid choice"       STOP   END CASE   PRINT "Actual file name (no path): ":; INPUT FILE.NAME   IF FILE.NAME="" THEN STOPENDWOBJ="WOBJ"OBJ="MAILSEND_V2"CALL MVSENDGRID.API(OBJ)*CALL @WOBJ(OBJ,"TOSTRING","",JSON,"PRETTIFY",1)CALL @WOBJ(OBJ,"SET","params.to[0].email",TEST.EMAIL.TO,"",RERR)CALL @WOBJ(OBJ,"SET","params.to[0].name","Test Email","",RERR)* SINCE CC IS A OPTION, THERE IS NOT A PRE-POPULATED OBJECT, WE MUST ADD ONECALL @WOBJ(OBJ,"SET.OBJECT","params.bcc[0]","{}","",RERR)CALL @WOBJ(OBJ,"SET","params.bcc[0].email",TEST.EMAIL.TO,"",RERR)CALL @WOBJ(OBJ,"SET","params.bcc[0].name","Test Email","",RERR)CALL @WOBJ(OBJ,"SET","params.from","noreply@zumasys.com","",RERR)CALL @WOBJ(OBJ,"SET","params.subject","Sample email ":TIMEDATE(),"",RERR)NL=CHAR(13):CHAR(10)TEXT="Line 1"TEXT:=NL:"Line 2"TEXT:=NL:"Line 3"CALL @WOBJ(OBJ,"SET","params.text",TEXT,"",RERR)IF FILE.TO.SEND # "" THENCALL @WOBJ(OBJ,"SET.ARRAY","params.files","[]","",RERR)  CALL @WOBJ(SOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ(SOBJ,"SET","sourcefile",FILE.TO.SEND,"",RERR) CALL @WOBJ(SOBJ,"SET","filename",FILE.NAME,"",RERR) CALL @WOBJ(SOBJ,"SET","type",FILE.TYPE,"",RERR) CALL @WOBJ(SOBJ,"TOSTRING","",SJSON,"",RERR) CALL @WOBJ(OBJ,"SET.OBJECT","params.files[-1]",SJSON,"",RERR)  END  CALL @WOBJ(OBJ,"TOSTRING","",JSON,"PRETTIFY",RERR)PRINT "Press return to see the jSON option payload before calling MVSENDGRID.API ":; INPUT WAIT PRINT JSONPRINTPRINT "Press return to call MVSENDGRID.  If you request a file that does not exist the routine does not catch that and your call will fail. ":; INPUT ANSCALL MVSENDGRID.API(OBJ)CALL @WOBJ(OBJ,"GET","result.status",STATUSCODE,"",RERR)PRINT "Result status=":STATUSCODECALL @WOBJ(OBJ,"GET","result.statusmsg",STATUSMSG,"",RERR)PRINT "Result msg   =":STATUSMSGIF STATUSCODE = "ok" OR STATUSCODE[1,1] = "2" THEN NULL ELSE    PRINT "Failed: ":STATUSMSGENDPRINT "Press return to see result OBJECT from call: ":; INPUT WAITCALL @WOBJ(OBJ,"TOSTRING","",JSON,"PRETTIFY",RERR)PRINT JSONPRINT "Press return to see curl log: ":; INPUT ANS* 04/2/2020 - Better to send curl object as json vs getting into issues with @am,@vm,@svm!!CALL @WOBJ(OBJ,"GET","result.wcalldebug",COBJ.JSON,"",RERR)CALL @WOBJ(COBJ,"FROMSTRING","",COBJ.JSON,"",RERR)CALL @WOBJ(COBJ,"LENGTH","response.log",CURL.LOG.LENGTH,"",RERR)FOR X=1 TO CURL.LOG.LENGTH    TAG="response.log[":X-1:"]"    CALL @WOBJ(COBJ,"GET",TAG,CLINE,"",RERR)    PRINT CLINENEXT XPRINT "PRESS RETURN TO CONTINUE: ":; INPUT OK.TO.CONTINUE0033B1MVSENDGRID.API0c2      SUBROUTINE MVSENDGRID.API(OBJ)      **********************************************************************      *      * Copyright (C) 2018 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: 4/2/2019      * Description: SENDGRID wrapper      **********************************************************************      *      * Purpose of this program is to front end the sendgrid library of functions      *      * It will utilize the object model concept and try to wrap all sendgrid      * functions into this one library      *      * Items to do      *      * Add File option. (COMPLETED)      * qc tests to validate fields sent (OUTSTANDING)      * Config to get user name/password/etc (COMPLETED)      * Return Message/Status (COMPLETED)      * REMOVE ALL DEBUG STATEMENTS (COMPLETED)      *      * OBJ      * { "api":"mailsend_v2",      *    "params": {      *       "to": [      *         {      *           "email":"email address",      *           "name":"Nice name"      *         }      *       ],      *       "cc": [      *         {      *           "email":"email address",      *           "name":"Nice name"      *         }      *       ],      *       "bcc": [      *         {      *           "email":"email address",      *           "name":"Nice name"      *         }      *       ],      *       "debug":"Y or N",      *       "replyto":"address",      *       "from":"From email address",      *       "fromname":"From name",      *       "subject":"Subject",      *       "text":"Plain text of your email",      *       "html":"Html version of your email",      *       "files": [      *           {      *              "sourcefile":"path to file",      *              "filename":"file name to present file as",      *              "type":"type of file, application/pdf for example"      *           }      *       ]      *    },      *   "result": {      *      "status":"error or ok",      *      "statusmsg:"status msg"      *    }      *      *  }      *      * Starting with mailsend_v2 - We are using this version because it allows      * attachments without having to base64 and include them into the json payload      * v2 uses curl and a normal form-data post to get attachments.      *      * curl https://api.sendgrid.com/api/mail.send.json \      *-F to=recipient@domain.com -F toname=test -F subject="Example Subject" \      *-F text="testing text body" --form-string html="<strong>testing html body</strong>" \      *-F from=test@yourdomain.com -F api_user=your_sendgrid_username -F api_key=your_sendgrid_password \      *-F files\[attachment.gz\]=@f.php.gz      *      *      * This intial part will initialize a object for a user.      *      WOBJ="WOBJ"      FIELD.TYPE=""      INIT.FUNCTION=OCONV(OBJ<1,1,1>,"MCU")      BEGIN CASE         CASE INIT.FUNCTION="MAILSEND_V2"            GOSUB mailsendv2.init            RETURN      END CASE      CALL @WOBJ(OBJ,"GET","api",API,"",RERR)      CALL @WOBJ(OBJ,"GET","debug",DO.DEBUG,"",RERR)      IF OCONV(DO.DEBUG[1,1],"MCU") = "Y" OR DO.DEBUG="1" THEN DO.DEBUG=1 ELSE DO.DEBUG=0      CALL @WOBJ(OBJ,"SET.OBJECT","result","{}","",RERR)      API=OCONV(API,'MCU')      APISTATUS="ok"      APISTATUSMSG=""      OPEN "DICT","MVSENDGRID.BP" TO DICT.MVSENDGRID.BP ELSE         APISTATUS="error"         APISTATUSMSG="Could not open DICT MVSENDGRID.BP"         GOTO end.of.routine      END      READ CONFIG FROM DICT.MVSENDGRID.BP, "CONFIG.JSON" ELSE         APISTATUS="error"         APISTATUSMSG="NO CONFIG.JSON IN DICT MVSENDGRID.BP"         GOTO end.of.routine      END      CALL @WOBJ(CONFIGOBJ,"FROMSTRING","",CONFIG,"",RERR)      BEGIN CASE         CASE API="MAILSEND_V2"            GOSUB mailsendv2         CASE 1            APISTATUS="error"            APISTATUSMSG="Invalid api request (":API:")"      END CASE      * lets do a larger check for a failed call         CALL @WOBJ(COBJ,"GET","response.status",STATUSCODE,"",RERR)         CALL @WOBJ(COBJ,"GET","response.statusmsg",STATUSMSG,"",RERR)         IF STATUSCODE[1,1] # "2" THEN            APISTATUS=STATUSCODE            APISTATUSMSG=STATUSMSG         END         * LETS PACKAGE THE ENTIRE CURL RESPONSE FOR DEBUGGING PURPOSES.         CALL @WOBJ(COBJ,"TOSTRING","",COBJ.JSON,"",RERR); * SAFER TO PULL JSON         CALL @WOBJ(OBJ,"SET","result.wcalldebug",COBJ.JSON,"",RERR)end.of.routine: *      CALL @WOBJ(OBJ,"SET","result.status",APISTATUS,"",RERR)      CALL @WOBJ(OBJ,"SET","result.statusmsg",APISTATUSMSG,"",RERR)      RETURN      STOPmailsendv2.init: * Initialize a email v2 object      OBJ=""      CALL @WOBJ(OBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(OBJ,"SET","api","mailsend_v2","",RERR)      CALL @WOBJ(OBJ,"SET.OBJECT","params","{}","",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.to",'[{"email":"","name"}]',"",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.cc",'[]',"",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.bcc",'[]',"",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.files",'[]',"",RERR)      RETURNmailsendv2: * Send an email      * V2 USES USER NAME AND PASSWORD      CALL @WOBJ(CONFIGOBJ,"GET","username",SENDGRID.USERNAME,"",RERR)      CALL @WOBJ(CONFIGOBJ,"GET","password",SENDGRID.PASSWORD,"",RERR)      IF SENDGRID.USERNAME="" THEN         APISTATUS="error"         APISTATUSMSG="No username defined in CONFIG.JSON"         RETURN      END      IF SENDGRID.PASSWORD="" THEN         APISTATUS="error"         AISTATUSMSG="No password defined in CONFIG.JSON"         RETURN      END      CALL @WOBJ(OBJ,"LENGTH","params.to",NUMBER.TOO,"",RERR)      IF NOT(NUMBER.TOO) THEN         APISTATUS="error"         APISTATUS="Must supply array of to"         RETURN      END      TOO.LABEL="to"; TOO.NAMES.LABEL="toname"      IF NUMBER.TOO > 1 THEN TOO.LABEL:='[]'; TOO.NAMES.LABEL:='[]'      TOO=''; TOO.NAMES=''      CALL @WOBJ(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(COBJ,"SET","method","POST","",RERR)      CALL @WOBJ(COBJ,"SET","url","https://api.sendgrid.com/api/mail.send.json","",RERR)      CALL @WOBJ(COBJ,"SET","insecure","Y","",RERR)      CALL @WOBJ(COBJ,"SET.OBJECT","headers","{}","",RERR)      CALL @WOBJ(COBJ,"SET.ARRAY","formfields","[]","",RERR)      FIELD.NAME="api_user"; FIELD.VALUE=SENDGRID.USERNAME; GOSUB set.field      FIELD.NAME="api_key"; FIELD.VALUE=SENDGRID.PASSWORD; GOSUB set.field      FOR X=1 TO NUMBER.TOO         P="params.to[":X-1:"]"         CALL @WOBJ(OBJ,"GET",P:".email",THIS.TO,"",RERR)         CALL @WOBJ(OBJ,"GET",P:".name",THIS.NAME,"",RERR)         IF INDEX(THIS.TO,'@',1) THEN            TOO<-1>=THIS.TO            TOO.NAMES<-1>=THIS.NAME         END      NEXT X      CONVERT CHAR(254) TO '&' IN TOO      CONVERT CHAR(254) TO '&' IN TOO.NAMES      CALL @WOBJ(SOBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(SOBJ,"SET","name",TOO.LABEL,"",RERR)      CALL @WOBJ(SOBJ,"SET","value",TOO,"",RERR)      CALL @WOBJ(SOBJ,"TOSTRING","",SJSON,"",RERR)      CALL @WOBJ(COBJ,"SET.OBJECT","formfields[-1]",SJSON,"",RERR)      FIELD.NAME=TOO.NAMES.LABEL; FIELD.VALUE=TOO.NAMES; GOSUB set.field      * DO CC            CALL @WOBJ(OBJ,"LENGTH","params.cc",NUMBER.CC,"",RERR)      IF NUMBER.CC THEN               CC=''; CC.NAMES=''         FOR X=1 TO NUMBER.CC            P="params.cc[":X-1:"]"            CALL @WOBJ(OBJ,"GET",P:".email",THIS.CC,"",RERR)            CALL @WOBJ(OBJ,"GET",P:".name",THIS.NAME,"",RERR)            IF INDEX(THIS.CC,'@',1) THEN               CC<-1>=THIS.CC               CC.NAMES<-1>=THIS.NAME            END                     NEXT X            CONVERT CHAR(254) TO '&' IN CC         CONVERT CHAR(254) TO '&' IN CC.NAMES          CC.LABEL="cc"; CC.NAMES.LABEL="ccname"         IF NUMBER.CC > 1 THEN CC.LABEL:='[]'; CC.NAMES.LABEL:='[]'         FIELD.NAME=CC.LABEL; FIELD.VALUE=CC; GOSUB set.field         FIELD.NAME=CC.NAMES.LABEL; VALUE=CC.NAMES; GOSUB set.field       END      * DO BCC            CALL @WOBJ(OBJ,"LENGTH","params.bcc",NUMBER.BCC,"",RERR)      IF NUMBER.BCC THEN               BCC=''; BCC.NAMES=''         FOR X=1 TO NUMBER.BCC            P="params.bcc[":X-1:"]"            CALL @WOBJ(OBJ,"GET",P:".email",THIS.BCC,"",RERR)            CALL @WOBJ(OBJ,"GET",P:".name",THIS.NAME,"",RERR)            IF INDEX(THIS.BCC,'@',1) THEN               BCC<-1>=THIS.BCC               BCC.NAMES<-1>=THIS.NAME            END                     NEXT X            CONVERT CHAR(254) TO '&' IN BCC         CONVERT CHAR(254) TO '&' IN BCC.NAMES          BCC.LABEL="bcc"; BCC.NAMES.LABEL="bccname"         IF NUMBER.BCC > 1 THEN BCC.LABEL:='[]'; BCC.NAMES.LABEL:='[]'         FIELD.NAME=BCC.LABEL; FIELD.VALUE=BCC; GOSUB set.field         FIELD.NAME=BCC.NAMES.LABEL; VALUE=BCC.NAMES; GOSUB set.field       END          CALL @WOBJ(OBJ,"GET","params.from",FROMEMAIL,"",RERR)      IF FROMEMAIL="" THEN         APISTATUS="error"         APISTATUSMSG="Must supply from"         RETURN      END      FIELD.NAME="from"; FIELD.VALUE=FROMEMAIL; GOSUB set.field      ** GET BODY **      CALL @WOBJ(OBJ,"GET","params.text",TEXT.BODY,"",RERR)      CALL @WOBJ(OBJ,"GET","params.html",HTML.BODY,"",RERR)      IF HTML.BODY="" AND TEXT.BODY="" THEN         APISTATUS="error"         APISTATUSMSG="Must supply either a text or html message"         RETURN      END      * If our text.body has new lines in it we MUST write it out      * to a file and then pass it as a file handle!!!      *       *IF INDEX(TEXT.BODY,CHAR(13),1) OR INDEX(TEXT.BODY,CHAR(10),1) THEN      * 4/2/2020 - This fix is moving to wcall      IF 0 THEN         CALL @WOBJ(FOBJ,"FROMSTRING","","{}","",RERR)         CALL @WOBJ(FOBJ,"SET","action","WRITE","",RERR)         TMP.DIR="/tmp"; * This needs to be fixed to be dynamic         TEXT.FILE.NAME=TMP.DIR:'/':@USER.NO:"_body.txt"         CALL @WOBJ(FOBJ,"SET","path",TEXT.FILE.NAME,"",RERR)         CALL @WOBJ(FOBJ,"SET","data",TEXT.BODY,"",RERR)         CALL MVDBTOOLKIT.WFILEIO(FOBJ)         FIELD.NAME="text"; FIELD.VALUE="@":TEXT.FILE.NAME; FIELD.TYPE="file"; GOSUB set.field      END ELSE         FIELD.NAME="text"; FIELD.VALUE=TEXT.BODY; GOSUB set.field      END            * NEED TO ADD THE HTML            IF HTML.BODY = "" AND TEXT.BODY # "" THEN         * WE NEED TO BUILD OUT A SIMPLE HTML VERSION, BASICALLY DOING NEW LINES         HAS.CR=DCOUNT(TEXT.BODY,CHAR(13))         HAS.LF=DCOUNT(TEXT.BODY,CHAR(10))         HTML.BODY=TEXT.BODY         BEGIN CASE            CASE HAS.CR AND HAS.LF               CONVERT CHAR(10) TO '' IN HTML.BODY               CONVERT CHAR(13) TO @AM IN HTML.BODY            CASE HAS.LF               CONVERT CHAR(10) TO @AM IN HTML.BODY            CASE HAS.CR               CONVERT CHAR(13) TO @AM IN HTML.BODY         END CASE         NUM.LINES=DCOUNT(HTML.BODY,@AM)         NEW.HTML.BODY=""         FOR A=1 TO NUM.LINES            LINE=HTML.BODY<A>            IF A > 1 THEN NEW.HTML.BODY:='<BR>'            NEW.HTML.BODY:=LINE        NEXT A        HTML.BODY=NEW.HTML.BODY      END            IF HTML.BODY # "" THEN         *HTML.BODY="HTML VERSION<BR>":HTML.BODY         FIELD.NAME="html"; FIELD.VALUE=HTML.BODY; GOSUB set.field      END            ** SUBJECT **      CALL @WOBJ(OBJ,"GET","params.subject",SUBJECT,"",RERR)      IF SUBJECT="" THEN         APISTATUS="error"         APISTATUSMSG="Must supply subject"         RETURN      END      FIELD.NAME="subject"; FIELD.VALUE=SUBJECT; GOSUB set.field      ** file uploads **      CALL @WOBJ(OBJ,"LENGTH","params.files",NUM.FILES,"",RERR)      IF NUM.FILES THEN         FOR X=1 TO NUM.FILES            P="params.files[":X-1:"]"            CALL @WOBJ(OBJ,"GET",P:'.sourcefile',SOURCEFILE,"",RERR)            CALL @WOBJ(OBJ,"GET",P:'.filename',FILENAME,"",RERR)            CALL @WOBJ(OBJ,"GET",P:'.type',FILETYPE,"",RERR)            FIELD.NAME='files[':FILENAME:']'            FIELD.VALUE='@':SOURCEFILE            IF FILETYPE # "" THEN FIELD.VALUE:=";type=":FILETYPE            FIELD.TYPE='file'            GOSUB set.field         NEXT X      END      CALL @WOBJ(COBJ,"TOSTRING","",CJSON,"PRETTIFY",RERR)      IF DO.DEBUG THEN         CALL @WOBJ(COBJ,"SET","debug","Y","",RERR); * SET TO DO DEBUGGING      END      CALL MVDBTOOLKIT.WCALL(COBJ)      CALL @WOBJ(COBJ,"TOSTRING","",TJSON,"PRETTIFY",RERR)      CALL @WOBJ(COBJ,"GET","response.data",RESPONSE,"",RERR)      CALL @WOBJ(ROBJ,"FROMSTRING","",RESPONSE,"",RERR)      CALL @WOBJ(ROBJ,"GET","message",APISTATUSMSG,"",RERR)      RETURNset.field: *      CALL @WOBJ(SOBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(SOBJ,"SET","name",FIELD.NAME,"",RERR)      CALL @WOBJ(SOBJ,"SET","value",FIELD.VALUE,"",RERR)      IF FIELD.TYPE # "" THEN         CALL @WOBJ(SOBJ,"SET","fieldtype",FIELD.TYPE,"",RERR)      END      FIELD.TYPE=""      CALL @WOBJ(SOBJ,"TOSTRING","",SJSON,"",RERR)      CALL @WOBJ(COBJ,"SET.OBJECT","formfields[-1]",SJSON,"",RERR)      RETURN00012BMVDB.THEMES0c0000045Theme 20c2theme2.css#004489#e1e1d6#d3d9df#989898#565656#dbdbce000045Theme 30c2theme3.css#557260#6A8B92#8A9875#34626B#eaeeea#3291b100003DTheme 10c2theme1.css#2d3956#455372#616a7f#e7e7e7#e0e9e900003DTheme 40c2theme4.css#77bed2#d5e1dd#999999#747e80#333333000218WDB.RESOURCE0c0000036RSS.MAINT0c2PRSS MaintenanceMVDB.INITRSS.MAINT11000033MVPKG.MAIN0c2PMV PackageMVDB.INITMVPKG.MAIN1000003FMVDB.WEB.ED0c2PMV Dashboard EditorMVDB.INITMVDB.WEB.ED11000043MVDB.ADMIN0c2PMV Dashboard AdministratorMVDB.INITMVDB.ADMIN1100002DRSS.MAIN0c2PRSS FeedMVDB.INITRSS.MAIN11000047CONFIG0c2CDEFAULT_HANDLERDBCDEFAULT_RESOURCEMVDB.MAINAPIKEY1234500003BAPI*WRESTTEST0c2PSample REST testWRESTTESTWRESTTEST1100003EMVDB.MAIN0c2PMV Dashboard ControllerMVDB.INITMVDB.MAIN110000AFDICT_MVSENDGRID.BP0c0000093CONFIG.JSON0c1{   "username":"patrickpayne@yahoo.com",   "password":"SendGridPassword1",   "apikey":"Api Key for v3 apis (none built yet)" }f000120DICT_MVDB.DEFS0c0000022TEMPLATE0c1A1TEMPLATEL15000022DISPLAYS0c1A2DISPLAYSL30000024DISP.AREA0c1A3DISP AREAL10000027DISP.ORDER0c1A4DISP ORDERL1000001CUSERS0c1A5USERSL2000001ADESC0c1A6DESCL4000001FDB.SORT0c1A8DB.SORTR70046DBWBPD0c0000151FI.MVDB.DEFS0c2DIM DB.ITEM(30)*EQU DB.TEMPLATE         TO DB.ITEM(1)EQU DB.WIDGETS          TO DB.ITEM(2)EQU DB.WIDGET.AREA      TO DB.ITEM(3)EQU DB.WIDGET.ORDER     TO DB.ITEM(4)EQU DB.USERS.ALLOWED    TO DB.ITEM(5)EQU DB.DESC             TO DB.ITEM(6)EQU DB.THEME            TO DB.ITEM(7)EQU DB.SORT             TO DB.ITEM(8)00012EFI.MVDB.USERS0c2DIM USER.ITEM(20)*EQU USER.PASSWORD     TO USER.ITEM(1)EQU USER.DEFAULT.DB   TO USER.ITEM(2)EQU USER.NAME         TO USER.ITEM(3)EQU USER.LAST.LOGIN   TO USER.ITEM(4)EQU USER.EMAIL        TO USER.ITEM(5)EQU USER.ROLE         TO USER.ITEM(6)EQU USER.ALT.LOGO     TO USER.ITEM(7)000100FI.MVDB.WIDGET.TYPES0c2DIM WIDGET.TYPES(10)*EQU WT$TYPE     TO WIDGET.TYPES(1)EQU WT$SWF      TO WIDGET.TYPES(2)EQU WT$HANDLER  TO WIDGET.TYPES(3)EQU WT$ICON     TO WIDGET.TYPES(4)EQU WT$GROUP    TO WIDGET.TYPES(5)EQU WT$DESC     TO WIDGET.TYPES(6)000070FI.MVDB.WIDGETS0c2DIM WIDGET.ITEM(20)*EQU WIDGET.SUB    TO WIDGET.ITEM(1)EQU WIDGET.USERS  TO WIDGET.ITEM(2)000166FI.WDB.RESOURCE0c2DIM RSRC.ITEM(20)*EQU RSRC.TYPE           TO RSRC.ITEM(1)EQU RSRC.DESCRIPTION    TO RSRC.ITEM(2)EQU RSRC.CONTROLLER     TO RSRC.ITEM(3)EQU RSRC.PROGRAM        TO RSRC.ITEM(4)EQU RSRC.PARSE.CGI      TO RSRC.ITEM(5)EQU RSRC.ENABLED        TO RSRC.ITEM(6)EQU RSRC.DEBUG.MODE     TO RSRC.ITEM(7)EQU RSRC.ACCOUNT        TO RSRC.ITEM(8)000484FI.WDB.DEBUG0c2** WDB.DEBUG record layout*EQU WDBG_DATE                TO 1EQU WDBG_TIME                TO 2EQU WDBG_DURATION            TO 3EQU WDBG_PORT                TO 4EQU WDBG_HANDLER             TO 5EQU WDBG_RESOURCE            TO 6EQU WDBG_CONTROLLER          TO 7EQU WDBG_PROGRAM             TO 8EQU WDBG_REQUEST_ID          TO 9EQU WDBG_REQUEST             TO 10EQU WDBG_METHOD              TO 11EQU WDBG_PATH                TO 12EQU WDBG_REMOTE_ADDR         TO 13EQU WDBG_STATUS              TO 14EQU WDBG_HEADER_VARS         TO 15EQU WDBG_HEADER_VALS         TO 16EQU WDBG_CGI_VARS            TO 17EQU WDBG_CGI_VALS            TO 18EQU WDBG_BODY                TO 19EQU WDBG_RESPONSE_VARS       TO 20EQU WDBG_RESPONSE_VALS       TO 21EQU WDBG_RESPONSE_CONTENT    TO 22EQU WDBG_RESERVED1           TO 23EQU WDBG_RESERVED2           TO 24EQU WDBG_SESSION_ID          TO 25EQU WDBG_SESSION_VARS        TO 26EQU WDBG_SESSION_VALS        TO 27EQU WDBG_SESSION_DATE        TO 28EQU WDBG_SESSION_TIME        TO 29EQU WDBG_WARNING             TO 30EQU WDBG_ERROR               TO 31EQU WDBG_LINT                TO 3200323EMVDB.INCLUDE0c2*COMMON /MVDB/ GLOBAL.INFO(100), GLOBAL.USER.DATA(20), GLOBAL.TEMP.DATA(20), WIDGET.INFO(200), WIDGET.USER.DATA(100)** GLOBAL.INFO equates. GLOBAL.INFO is a place for variables that are * globally accessible to all view subroutines. This information is not* written to disk - it is valid only for the duration of the execution.*EQU G$USERID            TO GLOBAL.INFO(1) ;* UserID currently logged inEQU G$CURRENT.DB        TO GLOBAL.INFO(2) ;* Current dashboard nameEQU G$LOGIN.DATE        TO GLOBAL.INFO(3) ;* Date user logged in (from session)EQU G$LOGIN.TIME        TO GLOBAL.INFO(4) ;* Time user logged in (from session)EQU G$WIDGET.NAME       TO GLOBAL.INFO(5) ;* Current view being executedEQU G$WIDGET.SUB        TO GLOBAL.INFO(6) ;* Current subruotine being calledEQU G$WIDGET.NAME.LIST  TO GLOBAL.INFO(7) ;* List of views called/to be calledEQU G$WIDGET.SUB.LIST   TO GLOBAL.INFO(8) ;* w/ G$WIDGET.NAME.LISTEQU G$WIDGET.CALL.TIME  TO GLOBAL.INFO(9) ;* w/ G$WIDGET.NAME.LIST (timedate stamp)EQU G$WIDGET.CALL.DUR   TO GLOBAL.INFO(10) ;* w/ G$WIDGET.NAME.LIST (duration in MS)EQU G$QUERYMODE         TO GLOBAL.INFO(11) ;* Used to query subroutines without running themEQU G$SUBMITTED         TO GLOBAL.INFO(12) ;* 1=User clicked submit on input area of this widgetEQU G$ADMIN.USER        TO GLOBAL.INFO(14) ;* 1=User as an admin; 0=User is not an adminEQU G$LICENSE.COUNT     TO GLOBAL.INFO(15) ;* Count of licenses (concurrent users)EQU G$EDITION           TO GLOBAL.INFO(16) ;* Edition NameEQU G$SYSTEM.ID         TO GLOBAL.INFO(17) ;* System ID** GLOBAL.INFO(90...100) reserved for internal use.*EQU G$DRILLDOWN.MODE    TO GLOBAL.INFO(24)EQU G$DD.REFERRER       TO GLOBAL.INFO(25)EQU G$DD.FROM.DB        TO GLOBAL.INFO(26)** GLOBAL.USER.DATA stores persistent variable data throughout the course* of a dashboard user's login session. This allows for persistent sharing* of information between dashboard subroutines.** GLOBAL.TEMP.DATA stores temporary variable data for the course of a single* execution. Data is not stored with the session and is destoryed after each* page load.** WIDGET.INFO holds the information for a specific dashboard WIDGET.*EQU W$TYPE           TO WIDGET.INFO(1)EQU W$TITLE          TO WIDGET.INFO(2)EQU W$LINK.LABEL     TO WIDGET.INFO(3)EQU W$LINK.LOCATION  TO WIDGET.INFO(4)  ;* Quandrant(s) to show (1-4)EQU W$LINK.UD.POS    TO WIDGET.INFO(5)  ;* WIDGET.USER.DATA(x)EQU W$LINK.UD.VAL    TO WIDGET.INFO(6)  ;* ^^ = this_valueEQU W$LINK.DD.WIDGET TO WIDGET.INFO(7)  ;* Drill-down widget nameEQU W$LINK.DD.PARAMS TO WIDGET.INFO(8)  ;* Drill down params (UNUSED)EQU W$LINK.URL       TO WIDGET.INFO(26) ;* Specific URL - UD/DD params ignoredEQU W$LINK.URL.OPTS  TO WIDGET.INFO(27) ;* Specific URL - UD/DD params ignoredEQU W$LINK.ICON      TO WIDGET.INFO(28) ;* Icon GIF name ("C" location only)EQU W$LINK.ICON.TXT  TO WIDGET.INFO(29) ;* Hover text for imageEQU W$WIDTH          TO WIDGET.INFO(9)  ;* 1, 2 or 3EQU W$PRINTABLE      TO WIDGET.INFO(24) ;* 1=Add print function/icon to control barEQU W$EXCELABLE        TO WIDGET.INFO(88) ;* 1=Add EXCEL function/icon to control barEQU W$PDFABLE        TO WIDGET.INFO(87) ;* 1=Add PDF function/icon to control barEQU W$HIDDEN         TO WIDGET.INFO(25) ;* 1=Do not display this widget** Pie chart equates*EQU W$PIE.LABELS     TO WIDGET.INFO(10)EQU W$PIE.VALUES     TO WIDGET.INFO(11)EQU W$PIE.COLORS     TO WIDGET.INFO(12) ;* #000000 - #FFFFFF* Below settings are Fusion Charts onlyEQU W$PIE.CAPTION    TO WIDGET.INFO(14)EQU W$PIE.VALUE.OPTS TO WIDGET.INFO(15)** Bar chart equates*EQU W$BAR.LABELS      TO WIDGET.INFO(10) ;* Labels for each Series (AM)EQU W$BAR.VALUES      TO WIDGET.INFO(11) ;* Values matrix (AM/VM)EQU W$BAR.COLORS      TO WIDGET.INFO(12) ;* #000000 - #FFFFFFEQU W$BAR.XLABELS     TO WIDGET.INFO(13) ;* Labels for each set (X Axis)EQU W$BAR.XMEMO       TO WIDGET.INFO(14) ;* X-Axis TextEQU W$BAR.YMEMO       TO WIDGET.INFO(15) ;* Y-Axis TextEQU W$BAR.TYPE        TO WIDGET.INFO(16) ;* 'clustered', 'stacked', '100% stacked'* Below settings are Fusion Charts onlyEQU W$BAR.TREND.BEG   TO WIDGET.INFO(17) ;* Trendline beginning valueEQU W$BAR.TREND.END   TO WIDGET.INFO(18) ;* Trendline ending valueEQU W$BAR.TREND.OPTS  TO WIDGET.INFO(19) ;* Options for the trendlineEQU W$BAR.VALUE.OPTS  TO WIDGET.INFO(20)EQU W$BAR.LABEL.OPTS  TO WIDGET.INFO(21)EQU W$BAR.XLABEL.OPTS TO WIDGET.INFO(22)EQU W$BAR.CAPTION     TO WIDGET.INFO(23)** Table chart equtes*EQU W$TABLE.COL.LABELS     TO WIDGET.INFO(10)EQU W$TABLE.COL.JUST       TO WIDGET.INFO(11)EQU W$TABLE.DATA           TO WIDGET.INFO(12)EQU W$TABLE.TOTALS         TO WIDGET.INFO(13)** Text display equates*EQU W$TEXT.DATA         TO WIDGET.INFO(10)*EQU W$HTML.DATA         TO WIDGET.INFO(10) ;* HTML Blob** Global display equates*EQU W$CHART.OPTIONS  TO WIDGET.INFO(30) ;* Fusion Charts OnlyEQU W$CHART.HEIGHT   TO WIDGET.INFO(31) ;* Override (in pixels)** WIDGET.USER.DATA holds widget-specific user information which* is persistent through the user's session. Values can be set in* this by using the LINK.XXXX feature. This feature will create links* on the widget display that, when clicked, will set values in* WIDGET.USER.DATA as perscribed*EQU W$INPUT.PROMPT   TO WIDGET.INFO(32) ;* Prompt Text (AM)EQU W$INPUT.TYPE     TO WIDGET.INFO(33) ;* TEXT or SELECT (AM)EQU W$INPUT.SELOPTS  TO WIDGET.INFO(34) ;* Text Options for SELECT (AM)(VM)EQU W$INPUT.SELVALS  TO WIDGET.INFO(35) ;* Select Values for SELECT (AM)(VM)EQU W$INPUT.DEFAULT  TO WIDGET.INFO(36) ;* Default Value (AM)EQU W$INPUT.UDPOS    TO WIDGET.INFO(37) ;* User Data Pisition to store answer (AM)EQU W$INPUT.PARAMS   TO WIDGET.INFO(38) ;* Additonal HTML in <input> or <select> tag (AM)EQU W$INPUT.BUTTON   TO WIDGET.INFO(39) ;* Button Label for Submit (AM)*EQU W$MAP.IDS         TO WIDGET.INFO(40) ;* ID for associated value. Ex. USA Map, this is a state Abbr.EQU W$MAP.VALUES      TO WIDGET.INFO(41) ;* Value associtated with the ID (map segment)EQU W$MAP.VALUE.OPTS  TO WIDGET.INFO(42) ;* Optional parameters to be inserted into the <entity> tag.EQU W$MAP.RANGE.NAME  TO WIDGET.INFO(43) ;* Display Name of the range/group (VM)EQU W$MAP.RANGE.LOW   TO WIDGET.INFO(44) ;* Range low limit (VM)EQU W$MAP.RANGE.HIGH  TO WIDGET.INFO(45) ;* Range high limit (VM)EQU W$MAP.RANGE.COLOR TO WIDGET.INFO(46) ;* Range color (optional override)EQU W$MAP.RANGE.OPTS  TO WIDGET.INFO(47) ;* optional parameters to be inserted into the <color> tag** The following value is only relevant for map type USA - when the W$MAP.IDS are state abbreviations.* For each W$MAP.IDS entry, this value can be set to allow drill-down for this state. When used,* it will reload the same widget, providing it with the drill-down state info in WIDGET.USER.INFO(1).* The use of this feature precludes the use of the W$MAP.VALUE.LINK feature below.** See also the FusionWidgets drill-down feature described later. This can be used to drill-down to a* specific widget from a map position when the map drilldown features described here are NOT used.*EQU W$MAP.VALUE.DD    TO WIDGET.INFO(48) ;* "1"=Enable Drill-Down for this State (from USA Map). If used, *                                           WIDGET.USER.INFO will contain the state map info:*                                           (1) = State Code (2-character)*                                           (2) = State Map Name (for use with MVDB.MAP.DATA)*EQU W$MAP.VALUE.LINK  TO WIDGET.INFO(49) ;* Link URL (Ignored if Drill-Down state is used)EQU W$MAP.LINK.MODE   TO WIDGET.INFO(50) ;* "N" = New Window, Blank = This Window** Fusion Widgets*EQU W$FW.CAPTION          TO WIDGET.INFO(51) ;* Widget captionEQU W$FW.SUBCAPTION       TO WIDGET.INFO(52) ;* SubcaptionEQU W$FW.LABELS           TO WIDGET.INFO(53) ;* (VM) Labels for each sectionEQU W$FW.VALUES           TO WIDGET.INFO(54) ;* (VM) Values for each sectionEQU W$FW.VALUE.OPTS       TO WIDGET.INFO(55) ;* (VM) XML attributes to be included in the <set> tagEQU W$FW.COLORS           TO WIDGET.INFO(56) ;* (VM) Alternate array of colors to useEQU W$FW.CHART.PALETTE    TO WIDGET.INFO(57) ;* 1-5 - Selects color theme for Spark Charts, Bullet Charts ** Fusion Widgets - Spark Charts*EQU W$FW.SPARK.TREND.BEG  TO WIDGET.INFO(58) ;* Trendline begin valueEQU W$FW.SPARK.TREND.END  TO WIDGET.INFO(59) ;* Trendline end valueEQU W$FW.SPARK.TREND.OPTS TO WIDGET.INFO(60) ;* Trendline options** Linear charts (Bullet Charts, Guages)*EQU W$FW.LOWER.LIMIT      TO WIDGET.INFO(61)EQU W$FW.UPPER.LIMIT      TO WIDGET.INFO(62)EQU W$FW.COLOR.RANGE      TO WIDGET.INFO(63) ;* <1> Range lower limit*                                               <2> Range upper limit*                                               <3> Range Color (This seems to be ignored on bullet charts)*                                               <4> Range options (attributes to appear in <color> tagEQU W$FW.METER.VALUE       TO WIDGET.INFO(64) ;* The numeric value of the meter guageEQU W$FW.METER.VALUE.OPTS  TO WIDGET.INFO(65) ;* Optional attributes to appear in the <value> tagEQU W$FW.METER.TARGET      TO WIDGET.INFO(66) ;* Target value for the meter (where appropriate) (Bullet)EQU W$FW.METER.TARGET.OPTS TO WIDGET.INFO(67) ;* Option attributes to appear in the <target> tag*EQU W$FW.NUMBER.PREFIX    TO WIDGET.INFO(68) ;* Such as "$"EQU W$FW.NUMBER.SUFFIX    TO WIDGET.INFO(69) ;* Such as "K" or "MM"EQU W$FW.TICKMARKS        TO WIDGET.INFO(70) ;* Tickmark Properties for Bullets, Gauges*                                               <1> 1 or 0 ; Show Tick Marks (1 = default)*                                               <2> 1 or 0 ; Show Tick Values next to the marks (1 = default)*                                               <3> A or B ; Show Above or Below graph (B = default)*                                               <4> Number of major tickmarks (default is calculated)*                                               <5> Number of minor tickmarks between major ones (default is none)*EQU W$FW.LOWER.LIMIT.LABEL  TO WIDGET.INFO(71) ;* For gauges, these are the labels asssociated with theEQU W$FW.UPPER.LIMIT.LABEL  TO WIDGET.INFO(72) ;* lower and upper limitsEQU W$FW.DIAL.VALUES        TO WIDGET.INFO(73) ;* (VM) value associated with each dial on the gaugeEQU W$FW.DIAL.OPTS          TO WIDGET.INFO(74) ;* Optional atributes to appear in the <dial> tagEQU W$FW.TRENDPOINT.VALUES  TO WIDGET.INFO(75) ;* (VM) Trendpoints on gauges*                                               * Optionally, <2> may be used to specify an ending value*                                               * to plot an arc on a gauge between <1,X> and <2,X>EQU W$FW.TRENDPOINT.LABELS  TO WIDGET.INFO(76) ;* (VM) Associated trendpoint label textEQU W$FW.TRENDPOINT.OPTS    TO WIDGET.INFO(77) ;* Optional attributes to appear in the <point> tag*EQU W$FW.THERMOMETER.COLOR  TO WIDGET.INFO(78) ;* Fill color for Thermometer and Cylinder charts** The values below allow you to set up drill-down parameters for most FusionWidgets and FusionCharts* values. These values correspond with W$FW.VALUES, W$FW.METER.VALUE, W$FW.DIAL.VALUES, W$PIE.VALUES,* W$BAR.VALUES and also with W$FW.MAP.IDS when NOT using the built-in drill-down facilities in the* USAMAP type. It may be used when a state map is being created.* EQU W$FW.DD.UD.POS          TO WIDGET.INFO(79) ;* WIDGET.USER.DATA(x) location to store the user-defined valueEQU W$FW.DD.UD.VAL          TO WIDGET.INFO(80) ;* ^^ = this_value - gets stored in WIDGET.USER.DATA(x) positionEQU W$FW.DD.WIDGET          TO WIDGET.INFO(81) ;* Drill-down widget name to be invokedEQU W$FW.DD.PARAMS          TO WIDGET.INFO(82) ;* Drill down params (UNUSED)*EQU W$FW.BC.PLOT.COLOR      TO WIDGET.INFO(83) ;* Plot color of bullet-chart plot lineEQU W$FW.BC.TARGET.COLOR    TO WIDGET.INFO(84) ;* Color of bullet-chart target lineEQU W$MAP.VALUE.TOOLTEXT    TO WIDGET.INFO(85) ;* toolText value for mapEQU W$INPUT.PROMPT.PARAMS   TO WIDGET.INFO(86) ;* Prompt text styling options. Goes into label tag.** Color Names*EQU COLOR$RED      TO "#FF0000"EQU COLOR$MAROON   TO "#800000"EQU COLOR$FUCHSIA  TO "#FF00FF"EQU COLOR$MAGENTA  TO "#FF00FF"EQU COLOR$ORANGE   TO "#FFA500"EQU COLOR$YELLOW   TO "#FFFF00"EQU COLOR$LIME     TO "#00FF00"EQU COLOR$GREEN    TO "#008000"EQU COLOR$OLIVE    TO "#808000"EQU COLOR$CYAN     TO "#00FFFF"EQU COLOR$AQUA     TO "#00FFFF"EQU COLOR$TEAL     TO "#008080"EQU COLOR$BLUE     TO "#0000FF"EQU COLOR$NAVY     TO "#000080"EQU COLOR$PURPLE   TO "#800080"EQU COLOR$BLACK    TO "#000000"EQU COLOR$SILVER   TO "#C0C0C0"EQU COLOR$GRAY     TO "#808080"EQU COLOR$GREY     TO "#808080"EQU COLOR$WHITE    TO "#FFFFFF"000014SOURCE.VIEW.ICON0c20005EBWWW.INCLUDE0c2** Standard web include*COMMON /WWW/ WWW.INFO(50), F.WEB.SESSIONEQU SESSION$ID               TO WWW.INFO(1)EQU SESSION$CONTENT.TYPE     TO WWW.INFO(2)EQU SESSION$CONTENT.SENT     TO WWW.INFO(3)EQU SESSION$OUTBUF           TO WWW.INFO(4)EQU SESSION$HEADERS          TO WWW.INFO(5)EQU SESSION$COOKIES          TO WWW.INFO(6)EQU SESSION$OUTBUF.SIZE      TO WWW.INFO(7)EQU SESSION$OUTBUF.FLAG      TO WWW.INFO(8)EQU SESSION$TIME.OUT         TO WWW.INFO(9)EQU SESSION$GLOBAL.DEBUG     TO WWW.INFO(10)EQU SESSION$STATUS.CODE      TO WWW.INFO(11)EQU SESSION$WDEBUG.MODE      TO WWW.INFO(12)EQU CONFIG$WDB.RESOURCE      TO WWW.INFO(15)EQU CGI$VARS                 TO WWW.INFO(25)EQU CGI$VALS                 TO WWW.INFO(26)EQU CGI$CVARS                TO WWW.INFO(27)EQU CGI$CVALS                TO WWW.INFO(28)EQU CGI$SERVER.NAME          TO WWW.INFO(29)EQU CGI$PATH                 TO WWW.INFO(30)EQU CGI$SERVER.PORT          TO WWW.INFO(31)EQU CGI$BODY                 TO WWW.INFO(32)EQU CGI$HEADERVALS           TO WWW.INFO(33)EQU CGI$HEADERVARS           TO WWW.INFO(34)EQU CGI$RESTPARAMS           TO WWW.INFO(35)EQU CGI$CONFIG               TO WWW.INFO(36)EQU F.WEB.FORMS              TO WWW.INFO(40)EQU CGI$APPSVR.ID            TO WWW.INFO(45)EQU CGI$RESERVED1            TO WWW.INFO(46)EQU CGI$RESERVED2            TO WWW.INFO(47)EQU CGI$RESERVED3            TO WWW.INFO(48)EQU CGI$UNIQUE.ID            TO WWW.INFO(49)EQU CGI$RESOURCE.NAME        TO WWW.INFO(50)000481WWW.INFO0c2** Element index for standard web common /WWW/ WWW.INFO array*EQU SESSION_ID               TO 1EQU SESSION_CONTENT.TYPE     TO 2EQU SESSION_CONTENT.SENT     TO 3EQU SESSION_OUTBUF           TO 4EQU SESSION_HEADERS          TO 5EQU SESSION_COOKIES          TO 6EQU SESSION_OUTBUF.SIZE      TO 7EQU SESSION_OUTBUF.FLAG      TO 8EQU SESSION_TIME.OUT         TO 9EQU SESSION_GLOBAL.DEBUG     TO 10EQU SESSION_STATUS.CODE      TO 11EQU SESSION_WDEBUG_MODE      TO 12EQU CONFIG_WDB.RESOURCE      TO 15EQU CGI_VARS                 TO 25EQU CGI_VALS                 TO 26EQU CGI_CVARS                TO 27EQU CGI_CVALS                TO 28 EQU CGI_SERVER.NAME          TO 29EQU CGI_PATH                 TO 30EQU CGI_SERVER.PORT          TO 31EQU CGI_BODY                 TO 32EQU CGI_HEADERVALS           TO 33EQU CGI_HEADERVARS           TO 34EQU CGI_RESTPARAMS           TO 35EQU CGI_CONFIG               TO 36EQU CGI_APPSVR.ID            TO 45EQU CGI_RESERVED1            TO 46EQU CGI_RESERVED2            TO 47EQU CGI_RESERVED3            TO 48EQU CGI_UNIQUE.ID            TO 49EQU CGI_RESOURCE.NAME        TO 500002CFUD.DICT.SALES0c0000033CLOSE.DATE.YMO0c0A0A;1(DY):1(D2-)(G-1)R10000028CLOSE.DATE.MM0c0D1DMCLOSE MONTH8RS00002CCLOSE.DATE.YM0c0A0A;1(DY):1(DM)R10000016BRANCH0c0D1315LS000016REGION0c0D1415LS000018CNT0c0A0F;C1R5000018ATT100c0D10MD210RS00001BCLOSE.DATE0c0D1D2-8RS00003CCLOSE.DATE.YYYY0c0IOCONV(ATT1,'D4-')[7,4]CLOSE YEAR8LS000018@ID0c0D0SALES10LS000016ATT80c0D8MD210RS000017REP.NAME0c0D525LS000015PIPE0c0I"|"|1LS000016ATT90c0D9MD210RS000018ATT120c0D12MD210RS000012ATT10c0D16RS00001AEXT.COST0c0D9MD210RS00003BGROSS.PROFIT0c0IEXT.AMT - EXT.COSTMD2GROSS PROFIT10RS000023EXT.AMT0c0D8MD2EXT.AMOUNT10RS0000CDUD.DICT.AP0c0000023DATE.PAID0c0D8D2-Date Paid8RS000026INV.AMOUNT0c0D6MD2Inv.Amount13RS000022DUE.DATE0c0D20D2-Due.Date8RS000021BALANCE0c0D50MD2Balance13RS000015PIPE0c0I"|" 1LS00023DUD.DICT.DASHBOARD.CLOSING.STATS0c0000026SALESMAN0c0IFIELD(@ID,'*',1)20LS000024BRANCH0c0IFIELD(@ID,'*',3)10LS000023YYYYMM0c0IFIELD(@ID,'*',2)6LS000013ID0c0I@ID10LS000032GROSS.PROFIT0c0IAMOUNT - COST.OF.SALEMD212RS000026YYYY0c0IFIELD(@ID,'*',2)[1,4]4RS000015PIPE0c0I"|" 1LS000022YYYYMM*BRANCH0c0I@IDG1*210LS000024REGION0c0IFIELD(@ID,'*',4)10LS000018AMOUNT0c0D1MD212RS00001ECOST.OF.SALE0c0D2MD212RS000040REGION*YYYYMM0c0IFIELD(@ID,"*",4):"*":FIELD(@ID,"*",2)10LS000023SALESMAN*YYYYMM0c0I@IDG*220LS0000CEDICT_WDB.LOG0c000001CDATE0c1A2DATED2/R800001CDURATION0c1A5MSR10000020PROGRAM0c1A1PROGRAML30000020AGE0c1A2AGEA;(D)-(2)R8000028TIME0c1A3TIMEMTSA;(3)/"1000"R8000136UD.DICT.AR0c0000028INVOICE.AMT0c0D6MD2Invoice.Amt13RS000022DUE.DATE0c0D20D2-Due.Date8RS000021BALANCE0c0D50MD2Balance13RS000026DATES.PAID0c0D8D2-CheckDates8RS000017CUST0c0D1Cust25LS00001BBIG.CUST0c0D1Cust40LS000014PIPE0c0I"|"1LS000021CUST.NAME0c0D1Cust.Name25LS0007BDMV.INSTALL.CF0c0000511MVAPPS-PRE-SCRIPT0c0CREATE-FILE DICT WDB.LOG 1DELETE DICT WDB.LOG WDB.LOGCREATE-FILE DICT WDB.DEBUG 1DELETE DICT WDB.DEBUG WDB.DEBUGCREATE-FILE RSS.BP TYPE=UDCREATE-FILE RSS.FEEDS 1 11CREATE-FILE MV.WEB.ED.ARCHIVE 3 301CREATE-FILE MVDB.CONTROL 1 11CREATE-FILE MVDB.DEFS 3 17CREATE-FILE MVDB.SUB.TEMPLATES 1 17CREATE-FILE MVDB.SUBS TYPE=UDCREATE-FILE MVDB.WIDGET.TYPES 1 3CREATE-FILE MVDB.WIDGETS 3 31CREATE-FILE MVDB.MAP.DATA 3 181CREATE-FILE MVDB.UDATA 3 101CREATE-FILE MVDB.USERS 3 31CREATE-FILE MVPC.CONTROL 1 3CREATE-FILE WBPD TYPE=UDCREATE-FILE WDB.BP TYPE=UDCREATE-FILE WEB.FORMS 1 101CREATE-FILE WDB.Q 3 31CREATE-FILE WEB.SESSION 3 71CREATE-FILE MVAPPS.INSTALLED 3 11CREATE-FILE MVBP.FORMS 1 11CREATE-FILE MVDB.THEMES 1 3CREATE-FILE MVBP.BP TYPE=UDCREATE-FILE MVDB.EMAILED.HTML 1 79CREATE-FILE WDB.RESOURCE 1 3CREATE-FILE WREST.BP TYPE=UDCREATE-FILE WOBJ.BP TYPE=UDCREATE-FILE MVDBTOOLKIT.BP TYPE=UDCREATE-FILE MVMAKE.BP TYPE=UDCREATE-FILE DASHBOARD.CLOSING.STATS 3 97CREATE-FILE DASHBOARD.BALANCES 3 97CREATE-FILE PORTAL.SALES 3 997CREATE-FILE PORTAL.AR 3 997CREATE-FILE PORTAL.AP 3 997CREATE-FILE UD.DICT.DASHBOARD.CLOSING.STATS 1 7CREATE-FILE UD.DICT.SALES 1 1CREATE-FILE UD.DICT.AR 1 1CREATE-FILE UD.DICT.AP 1 1CREATE-FILE MVSENDGRID.BP TYPE=UD000238MVAPPS-POST-SCRIPT0c0DELETE MD DOWNLOAD.XLS INIT.WWW MV.COMPILE MVAPPS.STATUS MVDB.ADMIN MVDB.MAIN MVDB.WEB.ED MVPKG.MAIN PACK-FILE RSS.MAIN RSS.MAINT WDB.INIT WDB.TEST WDB.VIEW XML.DATABASIC MVDB.SUBS *CATALOG MVDB.SUBS * (WBASIC RSS.BP *CATALOG RSS.BP * (WBASIC WDB.BP *CATALOG WDB.BP * (WBASIC MVBP.BP *CATALOG MVBP.BP * (WBASIC WOBJ.BP *CATALOG WOBJ.BP * (WBASIC WREST.BP *CATALOG WREST.BP * (WUSER.UPDATEPURGE.NON.PLATFORM.WIDGETSBASIC MVDBTOOLKIT.BPCATALOG MVDBTOOLKIT.BP (WCREATE-FILE TMP TYPE=UDBASIC MVSENDGRID.BP *CATALOG MVSENDGRID.BP (W000051PACKAGE.INFO0c0MultiValue Dashboard/Portal Reports/MVConnect1.7.4dbMVDB18000052EDICT_WDB.DEBUG0c000001CDATE0c1A1DATED2/R8000019PORT0c1A4PORTR4000026REQUEST.ID0c1A9REQUEST IDL2500001BPATH0c1A12PATHL25000029REMOTE.ADDR0c1A13REMOTE ADDRL1400001DTYPE0c1A0TYPEG0/1L4000026CONTROLLER0c1A7CONTROLLERL12000033RESPONSE.CONTENT0c1A22RESPONSE CONTENTT6000002DSESSION.DATE0c1A28SESSION DATED2/R800002BSESSION.VARS0c1A26SESSION VARSL1200002BSESSION.VALS0c1A27SESSION VALSL20000017DUR0c1A3DURR7000019REQ0c1A10REQL40000020AGE0c1A1AGEA;(D)-(1)R8000020PROGRAM0c1A8PROGRAML2500001ESTATUS0c1A14STATUSR600001BBODY0c1A19BODYT60000027SESSION.ID0c1A25SESSION IDL2500001BLINT0c1A32LINTT6000001CTIME0c1A2TIMEMTSR8000020HANDLER0c1A5HANDLERL10000022RESOURCE0c1A6RESOURCEL1200001EMETHOD0c1A11METHODL6000029HEADER.VARS0c1A15HEADER VARSL12000029HEADER.VALS0c1A16HEADER VALSL20000023CGI.VARS0c1A17CGI VARSL12000023CGI.VALS0c1A18CGI VALSL2000002DRESPONSE.VARS0c1A20RESPONSE VARSL1200002DRESPONSE.VALS0c1A21RESPONSE VALSL2000002DSESSION.TIME0c1A29SESSION TIMEMTSR8000021WARNING0c1A30WARNINGT6000001DERROR0c1A31ERRORT6000003BMD0c000002FMVAPPS.INSTALLER0c2PQHAPP.INSTALLERSTONA2P018DDBWEB.FORMS0c0000C4DPORTAL.DASHBOARD.SALES.AR.AP0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center">AP Balance</td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000200outerTrackWrapper0c2    <div id="outerTrackWrapper">		<div id="trackWrapper">			<div id="trackMsg" style="width: 165px; height: 34px; float: left;"><div id="dispRate">&nbsp;</div></div>			<div id="track1" style="width:200px; height:34px; float: right; margin: 0 10px 0 0; background: url(/db/images/trackSlider.png) 0px center no-repeat;">				<div id="handle1" style="width:12px; height:34px; margin: 6px 0 0 0; float: left;"><img src="/db/images/sliderHandle.png" alt="" /></div>			</div>		</div>	</div>0002E9ed_output.html0c2<div class="ed_error"><!-- HEADER --><!-- FOOTER --></div><div id="compile_output" class="compile_output"><!-- COMPILE_OUTPUT --></div><div id="compile_errline"><!-- COMPILE_ERRLINE --></div><div id="last_compile"><!-- LAST_COMPILE --></div><div id="ed_content"><!-- ED_CONTENT --></div><div id="num_calls"><!-- NUM_OF_CALLS --></div><div id="num_includes"><!-- NUM_OF_INCLUDES --></div><div id="num_files"><!-- NUM_OF_FILES --></div><div id="num_archives"><!-- NUM_OF_FILES --></div><div id="calls_content"><!-- EA_CALLS_CONTENT --></div><div id="includes_content"><!-- EA_INCLUDES_CONTENT --></div><div id="files_content"><!-- EA_FILES_CONTENT --></div><div id="archive_content"><!-- EA_ARCHIVE_CONTENT --></div>000253FCF_template.html0c2<!-- start FC script -->        <div id="<!-- chart_div_id -->">        </div>        <script type="text/javascript">        FusionCharts.ready(function () {            var myChart = new FusionCharts({              "type": "[FCF_MODULE]",              "renderAt": "<!-- chart_div_id -->",              "width": "<!-- chart_width -->",              "height": "<!-- chart_height -->",              "dataFormat": "xml",              "dataSource": "<!-- CHARTXML -->"            });          myChart.render();        });        </script><!-- end of FC script -->000E8DPORTAL.DASHBOARD0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL MARGINS&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center">AP Balance</td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>0010E6admin_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>	<script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>	    <script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>            	    <script src="/db/javascripts/jquery.form.js" type="text/javascript" charset="utf-8"></script>    	        	<script src="/db/javascripts/jquery.url.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/initAdminTemplate.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/sortable.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/tablesort.js" type="text/javascript" charset="utf-8"></script>			<link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/ingrid.css" type="text/css" charset="utf-8" />    <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />    <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]-->    <!-- SITE_THEME -->		<title>MultiValue Dashboard Admin</title>		<script type="text/javascript">	<!-- ADMIN_SCRIPTS -->	</script></head><body><div id="header"><!-- HEADER --></div>	<div id="logo">    	<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">	</div><div id="mainWrapper"><div id="main"><!-- Add new user form --><div id="new-user" title="New user" style="display:none;" ><form id="new-user-form" method="get" action="/dbc/MVDB.ADMIN"><div id="new-user-messages"></div><table><tbody><tr> <td align="right">User ID:</td> <td><input id="new-userid" type="text" value="" name="new_userid"/></td></tr><tr> <td align="right">Name:</td> <td><input id="username" type="text" value="" name="username"/></td></tr><tr id='default-dashboard'> <td align="right">Default Dashboard:</td> <td id="default-dashboard-container"><!-- default_dashboard --></td> <td/></tr><tr> <td align="right">Role:</td> <td>   <select id="user-role" name="user_role">      <option value="User">User</option>      <option value="Administrator">Administrator</option>   </select> </td></tr><tr> <td align="right">Optional Logo Path:</td> <td><input id="opt_logo_path" type="text" value="" name="opt_logo_path"/></td></tr><tr> <td align="right">Password:</td> <td><input id="user-password" type="password" value="" name="user_password"/></td></tr><tr> <td align="right">Confirm Password:</td> <td><input id="confirm-password" type="password" value="" name="confirm_password"/></td></tr></tbody></table><input type="hidden" value="save_user" name="action"/></form></div><!-- Add new widget form --><div id="new-widget" title="New widget" style="display:none;" ><form id="new-widget-form" method="get" action="/dbc/MVDB.ADMIN"><div id="widget-messages"></div><table><tbody><tr> <td align="right">Widget Name: *</td> <td><input id="widget_id" type="text" value="" name="new_widgetid" /></td></tr><tr> <td align="right">Subroutine: *</td> <td><input id="widget_sub" type="text" value="" name="widget_sub" /><!-- edit_source_link --></td></tr><tr> <td align="right">Users:</td> <td><input id="widget_users" type="text" value="" name="widget_users" /><br/><font size="1">comma-separated</font></td></tr></tbody></table><!--input type="submit" value="Delete Widget" name="delete_widget"/ --><p><input id="save_widgetid" type="hidden" value="" name="save_widgetid" /><input id="widget_action" type="hidden" value="save_widget" name="action" /><input id="save_widget" type="hidden" value="Save" name="save_widget" /></p></form></div><a href="edit-sub" id="edit-sub-link" target="_blank" style="display: none;">Edit subroutine</a><!-- ADMIN_MAIN --></div></div><div id="footer">    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a>    </div><!-- FOOTER --></div></body></html>002E52PORTAL.REPORT.DOCUMENTATION0c2<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 15 (filtered)"><style><!-- /* Font Definitions */ @font-face	{font-family:Wingdings;	panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face	{font-family:"Cambria Math";	panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face	{font-family:Calibri;	panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{margin:0in;	margin-bottom:.0001pt;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}.MsoChpDefault	{font-family:"Calibri",sans-serif;}.MsoPapDefault	{margin-bottom:8.0pt;	line-height:107%;}@page WordSection1	{size:8.5in 11.0in;	margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1	{page:WordSection1;} /* List Definitions */ ol	{margin-bottom:0in;}ul	{margin-bottom:0in;}--></style></head><body lang=EN-US><div class=WordSection1><p class=MsoNormal><b><span style='font-size:14.0pt'>Portal Dashboard Reports</span></b></p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal><b><span style='font-size:12.0pt'>High level dashboardsummarizing Sales, Gross Profit, Margin, AR, and AP</span></b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Month to Date and Year to Date numbers</p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>AR Balance amounts and percentages for the aging periods of current,1-30, 31-60, 61-90, and 90+</p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>AP Balance amounts for the aging periods of current, 1-30, 31-60,61-90, and 90+</p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Drilldown functionality to see detail for Sales, Gross Profit,Margin, and aging for AR and AP</p><p class=MsoNormal><b>&nbsp;</b></p><p class=MsoNormal><b><span style='font-size:12.0pt'>Sales, Gross Profit, andMargin Reports:</span></b></p><p class=MsoNormal><b><span style='font-size:12.0pt'>&nbsp;</span></b></p><p class=MsoNormal><b>MTD Sales</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing daily activity broken out by Sales and GP</p><p class=MsoNormal><b>YTD Sales</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing each month of the current year broken out by Salesand GP</p><p class=MsoNormal><b>Year to Year Sales and GP</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Sales and GP for each of the past few years</p><p class=MsoNormal><b>Year to Year Sales by Month</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Sales by month, comparing each of the past fewyears.</p><p class=MsoNormal><b>Year to Year GP by Month</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing GP by month, comparing each of the past fewyears.</p><p class=MsoNormal><b>MTD Sales by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Month to Date Sales and GP broken out by Salesperson.</p><p class=MsoNormal><b>YTD Sales by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Date Sales and GP broken out by Salesperson.</p><p class=MsoNormal><b>Year to Year Sales by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year Sales broken out by Salesperson</p><p class=MsoNormal><b>Year to Year GP by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year GP broken out by Salesperson</p><p class=MsoNormal><b>MTD Sales by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Month to Date Sales and GP broken out by Branch.</p><p class=MsoNormal><b>YTD Sales by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Date Sales and GP broken out by Branch.</p><p class=MsoNormal><b>Year to Year Sales by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year Sales broken out by Branch.</p><p class=MsoNormal><b>Year to Year GP by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year GP broken out by Branch.</p><p class=MsoNormal><b>MTD Sales by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Month to Date Sales and GP broken out by Region.</p><p class=MsoNormal><b>YTD Sales by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Date Sales and GP broken out by Region.</p><p class=MsoNormal><b>Year to Year Sales by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year Sales broken out by Region.</p><p class=MsoNormal><b>Year to Year GP by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year GP broken out by Region.</p><p class=MsoListParagraph style='margin-left:0in'>&nbsp;</p><p class=MsoListParagraph style='margin-left:0in'><b><span style='font-size:12.0pt'>AR Reports</span></b></p><p class=MsoListParagraph style='margin-left:0in'><b><span style='font-size:12.0pt'>&nbsp;</span></b></p><p class=MsoNormal><b>Current AR Aging</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Pie chart breaking out all receivables broken out by current, 0-30,31-60, 61-90, and 90+</p><p class=MsoNormal><b>Average AR Aging Days by Year</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart comparing the average days to pay for the past fewyears.</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on a year to see a pie chart showing the AR aging forthe year broken out by 0-30, 31-60, 61-90, and 90+.</p><p class=MsoNormal><b>Average Days to Pay Last 12 Months</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart comparing the average days to pay, by month, for thepast 12 months.</p><p class=MsoNormal><b>Average Days by Month YYYY</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart comparing the average days to pay for each month inyear YYYY. This option will appear for the past few years with YYYY showing theyear.</p><p class=MsoNormal><b>Customers Needing Aging Attention</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Table report showing the categories of:</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>50 Customers with the most amount owed</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>50 Customers with the most days aged.</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>50 Customers aged over 30 days where their average aging over thepast 60 days is longer than it has been over the past 1000 days.</p><p class=MsoNormal><b><span style='font-size:12.0pt'>&nbsp;</span></b></p><p class=MsoNormal><b><span style='font-size:12.0pt'>AP Reports</span></b></p><p class=MsoNormal><b>&nbsp;</b></p><p class=MsoNormal><b>Current AP Aging</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Pie chart breaking out all payables broken out by current, 0-30,31-60, 61-90, and 90+</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p></div></body></html>002160web_ed_settings.html0c2<html xmlns="http://www.w3.org/1999/xhtml">  <head>    <title>D3 Web Editor Settings</title>    <meta http-equiv="content-type" content="text/html; charset=<!--CHARACTER_SET-->" />    <link rel="stylesheet" type="text/css" href="/db/css/reset.css" media="screen" />    <link rel="stylesheet" type="text/css" href="/db/css/screen.css" media="screen" />    <!--[if IE]>    <link rel="stylesheet" type="text/css" href="/db/css/screen_ie.css" media="screen" />    <![endif]-->    <script src="/db/javascripts/jquery.tools.min.js" type="text/javascript"></script>    <script src="/db/javascripts/global.js" type="text/javascript"></script>  </head>  <body>    <div id="header" class="group">      <div id="logo">D3 Web Editor Settings</div>    </div>        <div id="main" class="group">      <div id="content" class="group">        <div id="section" class="group">          <ul class="tabs group">             <li><a href="#">General Settings</a></li>             <li><a href="#">Accounts</a></li>             <li><a href="#">Program Files</a></li>           </ul>          <div class="panes">             <div class="pane">              <form action="/dbc/WEB.ED.SETTINGS" method="POST">                <fieldset>                  <legend>Compiling Defaults</legend>                  <ul class="form">                    <li class="enable">                      <input type="checkbox" class="checkbox" id="enable_compiling" name="enable_compiling" [ENABLE_COMPILING] />                      <label for="enable_compiling">Enable Compiling</label>                    </li>                    <li>                      <label>Compile Verb:</label>                      <input type="text" class="text" name="compile_verb" value="[COMPILE_VERB]" />                    </li>                    <li>                      <label>Compile Options:</label>                      <input type="text" class="text" name="compile_opts" value="[COMPILE_OPTS]" />                    </li>                    <li>                      <label for="flash">Flash Compile (0 option)</label>                      <input type="checkbox" class="checkbox" id="flash" name="flash_compile" [FLASH_COMPILE] />                    </li>                    <li>                      <label for="catalog">Catalog after compile</label>                      <input type="checkbox" class="checkbox" id="catalog" name="catalog" [CATALOG] />                    </li>                  </ul>                </fieldset>                <fieldset>                  <legend>Options</legend>                  <ul class="form">                    <li>                      <label>Text Size:</label>                      <select name="text_size">                        [TEXT_SIZE_OPTS]                      </select>                    </li>                    <li>                      <label>Default Account:</label>                      <input type="text" class="text" name="default_account" value="[DEFAULT_ACCOUNT]" />                    </li>                    <li>                      <label>Default File:</label>                      <input type="text" class="text" name="default_file" value="[DEFAULT_FILE]"  />                    </li>                  </ul>                </fieldset>                <fieldset>                  <ul>                    <li>                      <input type="checkbox" class="checkbox" id="default" name="global_default" [GLOBAL_DEFAULT] />                      <label for="default">Set as default settings for all users</label>                    </li>                  </ul>                </fieldset>              </form>            </div>             <div class="pane">              <div class="table">                <table cellspacing="0">                  <thead>                    <tr>                      <th>Account</th>                      <th>Password</th>                      <th>Settings</th>                      <th>Options</th>                    </tr>                  </thead>                  <tbody>                  [ACCOUNT_LIST]                  </tbody>                </table>              </div>              <div>                <form action="/dbc/WEB.ED.SETTINGS" method="POST">                  <fieldset>                    <label for="account">Account</label>                    <input type="text" class="text" name="add_account" value="" />                    <input type="submit" value="Add" class="submit"/>                  </fieldset>                </form>              </div>            </div>            <div class="pane">              <div class="table">                <table cellspacing="0">                  <thead>                    <tr>                      <th>Account</th>                      <th>File</th>                      <th>Settings</th>                      <th>Options</th>                    </tr>                  </thead>                  <tbody>                  [FILE_LIST]                  </tbody>                </table>              </div>              <div class="footer_form">                <form action="#">                  <fieldset>                    <label for="account">Account</label>                    <input type="text" class="text" style="margin-right: 10px;"/>                    <label for="account">File</label>                    <input type="text" class="text"/>                    <input type="submit" value="Add" class="submit"/>                  </fieldset>                </form>              </div>            </div>           </div>        </div>      </div>    </div>    <!-- modals -->     <div class="modal" id="edit_account_settings">       <form action="#">        <fieldset>          <legend>Settings for Account: 00000</legend>          <ul class="form">            <li>              <label>Password for LOGTO this account:</label>              <input type="password" class="text"/>            </li>            <li class="enable">              <input type="checkbox" class="checkbox" id="enable_compiling_edit_account_settings"/>              <label for="enable_compiling_edit_account_settings">Enable Compiling</label>            </li>            <li>              <label>Compile Verb:</label>              <input type="text" class="text"/>            </li>            <li>              <label>Compile Options:</label>              <input type="text" class="text"/>            </li>            <li>              <label for="flash_edit_account_settings">Flash Compile (0 option)</label>              <input type="checkbox" class="checkbox" id="flash_edit_account_settings"/>            </li>            <li>              <label for="catalog_edit_account_settings">Catalog after compile</label>              <input type="checkbox" class="checkbox" id="catalog_edit_account_settings"/>            </li>          </ul>        </fieldset>        <div class="buttons">          <input type="submit" value="Save"/>          <input type="submit" value="Cancel" class="close"/>        </div>      </form>    </div>    <div class="modal" id="edit_compile_settings">       <form action="#">        <fieldset>          <legend>Compile Settings for 00000, 00000</legend>          <ul class="form">            <li class="enable">              <input type="checkbox" class="checkbox" id="enable_compiling_edit_compile_settings"/>              <label for="enable_compiling_edit_compile_settings">Enable Compiling</label>            </li>            <li>              <label>Compile Verb:</label>              <input type="text" class="text"/>            </li>            <li>              <label>Compile Options:</label>              <input type="text" class="text"/>            </li>            <li>              <label for="flash_edit_compile_settings">Flash Compile (0 option)</label>              <input type="checkbox" class="checkbox" id="flash_edit_compile_settings"/>            </li>            <li>              <label for="catalog_edit_compile_settings">Catalog after compile</label>              <input type="checkbox" class="checkbox" id="catalog_edit_compile_settings"/>            </li>          </ul>        </fieldset>        <div class="buttons">          <input type="submit" value="Save"/>          <input type="submit" value="Cancel" class="close"/>        </div>      </form>    </div>  </body></html>00110Eadmin_dashboards.html0c2<!-- Add new dashboard form --><script type="text/javascript">dashboard_ids = [<!-- list_of_dashboard_ids -->];</script><div id="dashboard-controls" class="ui-dialog">	<div class="button-pane-dialog">		<button id="save-dashboard" type="button" class="ui-state-default ui-corner-all">Save</button>		<button id="delete-dashboard" type="button" class="ui-state-default ui-corner-all">Delete</button>	</div></div><div id="dashboard-accordion" class="ui-accordion ui-widget ui-helper-reset">	<h3 id='dashboard-properties-header' class="ui-accordion-header ui-helper-reset ui-state-active ui-corner-top"><span class="ui-icon ui-icon-triangle-1-s"></span>Properties</h3>	<div id='dashboard-properties' title='New Dashboard' class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active" style="height: 350px;">			<div id="dashboard-messages"></div>		<form id="new-dashboard-form" method="post" action="/dbc/MVDB.ADMIN">		<div>				<input id="old_dbid" type="hidden" value="<!-- save_dbid -->" name="save_dbid" />			<input type="hidden" value="save_db" name="action" />				<input type="hidden" value="Save" name="save_db" />		</div>				<table>		<tbody><tr>		 <td  align="right">Dashboard ID:</td>		 <td id="dbid-container">		 <!-- edit_dbid -->		 </td>		</tr>		<tr>		 <td align="right">Description:</td>		 <td><input id="db_desc" type="text" value="<!-- db_desc -->" name="db_desc" size="63" /></td>		</tr>		<tr>		 <td align="right">Layout:</td>		 <td><input type="hidden" id="db_layout" name="db_layout" value="<!-- " />		 	<ul class='db-layout'>		 	<!-- db_layout_opts -->			</ul> 	     	    		 </td>		</tr>		<tr>		 <td align="right">Allowed Users:</td>		 <td><input id="db_users" type="text" value="<!-- db_users -->" name="db_users" size="63" /></td>		</tr>		<tr>		<td> </td><td>Leave blank to allow all users. Separate user IDs with commas to restrict acces to specific users.</td>		</tr>		<tr>		 <td align="right">Theme:</td>		 <td><!-- db_theme --></td>		</tr>		<tr>		 <td align="right">Sort Value:</td>		 <td><input id="db_sort" type="text" value="<!-- db_sort -->" name="db_sort" size="8" /></td>		</tr>		</tbody></table>		</form>	</div>	    <h3 class="ui-accordion-header ui-helper-reset ui-state-active ui-corner-top"><span class="ui-icon ui-icon-triangle-1-s"></span> Dashboard</h3>    <div id="dashboard-content" class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active">    		<div id="layout-header" class="one-column area">    		  <h4>HEADER</h4>              <!-- AREA_1_WIDGETS -->    		</div>	    	<div id="layout-body">		    <div class="one-column active">		    	<div class="area">		    	  <h4>AREA 1</h4>                  <!-- AREA_2_WIDGETS -->		    	</div>		    </div>		    <div class="two-column">		    	<div class="area first">		    	  <h4>AREA 1</h4>                  <!-- AREA_2_WIDGETS -->		    	</div>		   	    <div class="area last">		   	      <h4>AREA 2</h4>                  <!-- AREA_3_WIDGETS -->		   	    </div>        		    </div>		    <div class="three-column">		       	<div class="area first">		       	  <h4>AREA 1</h4>                  <!-- AREA_2_WIDGETS -->		       	</div>		    	<div class="area middle">		    	  <h4>AREA 2</h4>                  <!-- AREA_3_WIDGETS -->		    	</div>        		       	<div class="area last">		       	  <h4>AREA 3</h4>                  <!-- AREA_4_WIDGETS -->		        </div>    			    </div>            	    	</div>    		<div id="layout-footer" class="one-column area">    		  <h4>FOOTER</h4>              <!-- AREA_5_WIDGETS -->    		</div>    </div></div>    <div id="widget-toolbox" class="ui-accordion">	<h3 class="widget-header ui-accordion-header ui-state-active ui-state-focus"><span class="ui-icon ui-icon-triangle-1-s"></span>Widgets (draggable)</h3>		<div id="widget-icons"  class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active">		<!-- widget_list -->		</div></div><div id='change-layout-message' title="Change layout?" style="display: none; text-align: left;">	<p>Your layout areas currently have one or more widgets. Clicking 'Change' will move these widgets to the first column area.</p></div>000621login.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>	<link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />	<title>MultiValue Dashboard :: Login</title></head><body onLoad="document.loginform.loginid.focus();">	<div id="header">		<div id="logo">		  <BR /><img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">	   </div>	<!-- HEADER -->	</div>	<div id="dashboard">		<b><!-- ERROR --></b>		<div style="text-align:center;">			<h1><img src="/db/images/graphic_lock.gif" style="vertical-align:bottom;"/> Please Login</h1>			<div style="width:180px;text-align:left;margin:10px auto" id="loginbox">				<form name="loginform" action="<!-- CGI$PATH -->/MVDB.MAIN?dblogin=1" method="post">					<div class="ctrl">						<label for="login">Login</label>						<input id="getlogin" type="text" name="loginid" value="" class="text">					</div>					<div class="ctrl">						<label for="password">Password</label>						<input type="password" name="password" value="" class="password">					</div>						<div class="ctrl">						<input type="submit" value="Login" style="float:right">					</div>					</form>			</div>		</div>		</div>	<div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a></div>	</body></html>000273FCMAP_template.html0c2<!-- Fusion Chart Script -->	<div id="<!-- chart_div_id -->">	</div>	<input type="hidden" class="chartSource" value="/db/Maps/FCMap_[FCMAP_MODULE].swf" />	<input type="hidden" class="chartXML" value="<!-- CHARTXML -->" />	<input type="hidden" class="chartClass" value="fcmap" />	<script type="text/javascript">		// <![CDATA[		   var map = new FusionMaps("/db/Maps/FCMap_[FCMAP_MODULE].swf", "ChartId", "<!-- chart_width -->", "<!-- chart_height -->", "0", "1");		   map.setDataXML("<!-- CHARTXML -->");		   		   map.render("<!-- chart_div_id -->");		// ]]>	</script><!-- end of FC script -->0010C9SAVE.PORTAL.DASHBOARD0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Sales Reports">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Sales Reports">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Margins&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="38%" bgcolor="white">&nbsp;</td><td width="31%" align="center">MDT ~9~</td><td width="31%" align="center">YTD ~10~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="38%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY NET INCOME CHART">Net Income</a></td><td width="31%" align="right">~11~</td><td width="31%" align="right">~12~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="38%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY AVERAGE DAYS CHART">Average Days To Pay</a></td><td width="31%" align="center">~13~</td><td width="31%" align="center">~14~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Margins&udview=Portal Margins">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center">AP Balance</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000251FW_template.html0c2<!-- start FW script -->        <div id="<!-- chart_div_id -->">        </div>        <script type="text/javascript">        FusionCharts.ready(function () {            var myChart = new FusionCharts({              "type": "[FW_MODULE]",              "renderAt": "<!-- chart_div_id -->",              "width": "<!-- chart_width -->",              "height": "<!-- chart_height -->",              "dataFormat": "xml",              "dataSource": "<!-- CHARTXML -->"            });          myChart.render();        });        </script><!-- end of FW script -->000603PORTAL.DASHBOARD.SALES.GP0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL MARGINS&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000163db_inner_template0c2<div id="area1" class="area"> <!-- AREA1 --></div><div class="content <!-- column_style -->">  <div id="area2" class="area">   <!-- AREA2 -->  </div>  <div id="area3" class="area">   <!-- AREA3 -->  </div>  <div id="area4" class="area">   <!-- AREA4 -->  </div></div><div id="area5" class="area">  <!-- AREA5 --></div>000C40PORTAL.DASHBOARD.SALES.AR0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center"></td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>0013E6DEMO.FINANCIALS.DASHBOARD0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><th width=24% align="left" bgcolor="red">Sales</th><th width=19% bgcolor="white">&nbsp;</th><th width=19% bgcolor="white">&nbsp;</th><th width=19% bgcolor="white">&nbsp;</th><th width=19% bgcolor="white">&nbsp;</th></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% bgcolor="white">&nbsp;</td><td width=19% align="center">YTD~1~</td><td width=19% align="center">YTD~2~</td><td width=19% align="center">%(+/-)</td><td width=19% align="center">FY~3~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO REV.GP SALES CHART&udview=DEMO REV.GP SALES CHART&dd=dd&udpos1=1&udval1=REVENUES">Sales</a></td><td width=19% align="right">~4~</td><td width=19% align="right">~5~</td><td width=19% align="right">~6~</td><td width=19% align="right">~7~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO REV.GP SALES CHART&udview=DEMO REV.GP SALES CHART&dd=dd&udpos1=1&udval1=GROSSPROFIT">Gross Profit (GP$)</a></td><td width=19% align="right">~8~</td><td width=19% align="right">~9~</td><td width=19% align="right">~10~</td><td width=19% align="right">~11~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES CHART&udview=DEMO SALES CHART&dd=dd&udpos1=1&udval1=MARGIN">Margin (GP%)</a></td><td width=19% align="right">~12~</td><td width=19% align="right">~13~</td><td width=19% align="right"></td><td width=19% align="right">~14~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES CHART&udview=DEMO SALES CHART&dd=dd&udpos1=1&udval1=PARTS$">Parts Revenue ($)</a></td><td width=19% align="right">~15~</td><td width=19% align="right">~16~</td><td width=19% align="right">~17~</td><td width=19% align="right">~18~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES PERCENTS&udview=DEMO SALES PERCENTS&dd=dd&udpos1=1&udval1=PARTSPERCENT">Parts Revenue (%)</a></td><td width=19% align="right">~19~</td><td width=19% align="right">~20~</td><td width=19% align="right"></td><td width=19% align="right">~21~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES CHART&udview=DEMO SALES CHART&dd=dd&udpos1=1&udval1=SERVICES$">Services Revenue ($)</a></td><td width=19% align="right">~22~</td><td width=19% align="right">~23~</td><td width=19% align="right">~24~</td><td width=19% align="right">~25~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES PERCENTS&udview=DEMO SALES PERCENTS&dd=dd&udpos1=1&udval1=SERVICESPERCENT">Services Revenue (%)</a></td><td width=19% align="right">~26~</td><td width=19% align="right">~27~</td><td width=19% align="right"></td><td width=19% align="right">~28~</td></tr></thead></table><table width="100%" cols="4" border="0"><table width="100%" cols="4" border="0"><table width="100%" cols="4" border="0"><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><th width=24% align="left" bgcolor="red">Financials</th><th width=25% bgcolor="white">&nbsp;</th><th width=25% bgcolor="white">&nbsp;</th><th width=25% bgcolor="white">&nbsp;</th></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" bgcolor="white">&nbsp;</td><td width="25%" align="center">~29~ thru ~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="center">~32~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO NET INCOME CHART&udview=DEMO NET INCOME CHART&dd=dd">Net Income</a></td><td width="25%" align="right">~33~</td><td width="25%" align="right">~34~</td><td width="25%" align="right">~35~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO AVERAGE DAYS CHART&udview=DEMO AVERAGE DAYS CHART&dd=dd">Average Days To Pay</a></td><td width="25%" align="center">~44~</td><td width="25%" align="center">~45~</td><td width="25%" align="center">~46~</td></table>0005A9admin_login.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>	<link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <!-- SITE_THEME -->	<title>MultiValue Dashboard :: Administrative Login</title></head><body onLoad="document.loginform.adminpass.focus();">	<div id="header">		<div id="logo">			<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">	   </div>	<!-- HEADER -->	</div>	<div id="dashboard">		<b><!-- ERROR --></b>		<div style="text-align:center;">			<h1><img src="/db/images/graphic_lock.gif" style="vertical-align:bottom;"/> Please Login</h1>			<div style="width:180px;text-align:left;margin:10px auto" id="loginbox">				<form name="loginform" action="<!-- CGI$PATH -->/MVDB.ADMIN" method="post">					<div class="ctrl">						<label for="password">Password</label>						<input type="password" name="adminpass" value="" class="password">					</div>						<div class="ctrl">						<input type="submit" value="Login" style="float:right">					</div>					</form>			</div>		</div>		</div>	<div id="signature">MultiValue Dashboard - copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a></div>	</body></html>000E90PORTAL.DASHBOARD.SALES.GP.AR0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL MARGINS&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center"> </td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000E1Eed_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" ><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->" />    <title>Editing <!-- ITEM --></title>    <script language="Javascript" type="text/javascript" src="/db/edit_area/edit_area_full.js"></script>    <script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>	    <!--script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script--><script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>    	        <script src="/db/javascripts/jquery.form.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>    	        <!--script src="/db/javascripts/shortcut.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script-->    <script language="Javascript" type="text/javascript">	    	        	CALLS = <!-- NUM_OF_CALLS -->;        INCLUDES = <!-- NUM_OF_INCLUDES -->;        FILES = <!-- NUM_OF_FILES -->;                        ARCHIVES = <!-- NUM_OF_ARCHIVES -->;        CALLS_CONTENT = '<!-- EA_CALLS_CONTENT -->';        INCLUDES_CONTENT = '<!-- EA_INCLUDES_CONTENT -->';        FILES_CONTENT = '<!-- EA_FILES_CONTENT -->';        ARCHIVE_CONTENT = '<!-- EA_ARCHIVE_CONTENT -->';        LAST_COMPILE = '<!-- LAST_COMPILE -->';               	<!-- ED_SCRIPTS -->        // initialisation        	editAreaLoader.init({            id: "file_1" // id of the textarea to transform            ,start_highlight: true  // if start with highlight            ,allow_resize: "both"            ,allow_toggle: false            ,word_wrap: true            ,language: "en"            ,begin_toolbar: "load, save"            ,toolbar: "search, go_to_line, |, undo, redo, |, select_font,|, change_smooth_selection, highlight, reset_highlight, word_wrap, |, help"             ,save_callback: 'saveCompileItem'            ,EA_load_callback: "editAreaLoadComplete"             ,load_callback: 'openItem'            ,fullscreen: true            ,closebottomtab_callback: 'closeActiveTab'            ,syntax: "<!-- SYNTAX -->"        });	    <!-- WINDOW_HEIGHT - Put this where it needs to go -->    </script>        <script src="/db/javascripts/edit_area_init.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>     <script language="javascript" type="text/javascript">       	<!-- ED_INIT_SCRIPT -->    </script>       <link rel="StyleSheet" href="/db/css/web_editor.css" media="screen" type="text/css" />       <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />       <!--[if lte IE 8]>       <link rel="Stylesheet" href="/db/css/ie.css" media="screen" type="text/css" />       <![endif]--></head><body><div id="open-item-container" title="Open Item" style="display:none;"><span id="messages"> </span><form id="open-item-form" name="open-item-form" action="" method="post"><label>Account:</label><input id="ed_acct" type="text" value="" name="ed_acct" /><label>File: </label><input id="ed_file" type="text" value="" name="ed_file"/><label>Item: </label><input id="ed_item" type="text" value="" name="ed_item"/><input id="open-action" type="hidden" name="action" value="open" /></form></div><div id="compile-output-container" title="Compile output"><div id="compile-content"></div></div><!-- HEADER --><hr /><!-- BODY --><hr /><!-- FOOTER --><!-- COMPILE_OUTPUT --><hr /></body></html>000082pdf_inner_template0c2<div id="areas" class="area"> <!-- AREA1 --><!-- AREA2 --><!-- AREA3 --><!-- AREA4 --><!-- AREA5 --></div>000202WIDGET.DIV0c2<div class="widget">  <div class="widget_header">   <div class="widget_controls"><!-- CONTROLS --></div>   <h3 class="title"><!-- TITLE --></h3>   <!-- INPUT -->   <div class="widget_content_header"><!-- QUAD2 --><!-- QUAD1 -->        <div class="clear"></div>     </div>  </div>  <div class="widget_content"><div class="widget_content_padding"><!-- WIDGETDATA --></div></div>  <div class="widget_content_footer">   <!-- QUAD3 --><!-- QUAD4 -->  <div class="clear" ></div> </div></div>000348PORTAL.DASHBOARD.SALES0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table></div>001A1BPORTAL.REPORT.RUN.DOCUMENTATION0c2<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 15 (filtered)"><style><!-- /* Font Definitions */ @font-face	{font-family:Wingdings;	panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face	{font-family:"Cambria Math";	panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face	{font-family:Calibri;	panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:0in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}.MsoChpDefault	{font-family:"Calibri",sans-serif;}.MsoPapDefault	{margin-bottom:8.0pt;	line-height:107%;}@page WordSection1	{size:8.5in 11.0in;	margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1	{page:WordSection1;} /* List Definitions */ ol	{margin-bottom:0in;}ul	{margin-bottom:0in;}--></style></head><body lang=EN-US><div class=WordSection1><p class=MsoNormal style='margin-bottom:12.0pt'><b><span style='font-size:14.0pt;line-height:107%'>Running the Portal Dashboard Reports</span></b></p><p class=MsoListParagraphCxSpFirst style='margin-bottom:12.0pt;text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Run the Portal Reports Setup to configure the elements necessaryto run the reports. See the Portal Reports Setup Documentation </p><p class=MsoListParagraphCxSpMiddle style='margin-bottom:12.0pt;text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Run the Portal Dashboard to view the summary of sales andfinancials.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>The dashboard wants to have calculations refreshed within thepast 15 minutes. If, when starting the dashboard, it has been over 15 minutessince the last calculations, a temporary display will show that figures areupdating. After a satisfactory delay of a minute or so, click the Go buttonand the summary of sales and financials page should display. If not, repeatuntil it displays.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Leaving the dashboard running with Auto-Refresh slider activated forabout every 5 minutes will automatically refresh the dashboard display andtrigger a background recalculation of numbers when necessary.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>The title section of each dashboard page shows the date and timethe last calculations were run.</p><p class=MsoListParagraphCxSpMiddle style='margin-bottom:12.0pt;text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>On the summary of sales and financials, those labels underlinedand displayed in a color can drilled down on to display additional dashboards.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on <u><span style='color:#C45911'>Sales</span></u> toinitiate the Portal Sales Reports dashboard</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on <u><span style='color:#C45911'>Gross Profit (GP$)</span></u><spanstyle='color:#C45911'> </span>to initiate the same Portal Sales Reportsdashboard</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on <u><span style='color:#C45911'>Margin (GP%)</span></u><spanstyle='color:#C45911'> </span>to initiate the Portal Year to Year Marginsdashboard</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on the <u><span style='color:#C45911'>Balances as ofMM-DD-YY</span></u><span style='color:#C45911'> </span>to initiate the AR andAP dashboard</p><p class=MsoListParagraphCxSpLast style='margin-bottom:12.0pt;text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>After doing a drill downs, the browser back button can be used tonavigate back to the previous dashboard, or simply clicking on the PortalDashboard tab will re-initialize back to the summary of sales and financials.</p></div></body></html>00015Cadmin_menu.html0c2<ol class="admin_nav_links">  <li><a href="<!-- CGI$PATH -->/MVDB.ADMIN?action=users" class="bullet_link">Users</a>  <li><a href="<!-- CGI$PATH -->/MVDB.ADMIN?action=widgets" class="bullet_link">Widgets</a>  <li><a href="<!-- CGI$PATH -->/MVDB.ADMIN?action=dashboards" class="bullet_link">Dashboards</a>    <!-- RSS --></ol>000281message.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>    <link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <title>MultiValue Dashboard :: Login</title></head><body><div id="header"><div id="logo">  <br /><img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard"></div></div><div id="dashboard"><h1><!-- MSG_TITLE --></h1><!-- MSG_CONTENT --></div></body></html>000C78dbtemplate0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>    <meta http-equiv="X-UA-Compatible" content="IE=edge,IE=11,IE=10,IE=9,IE=8,IE=7" />    <link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/print.css" type="text/css" charset="utf-8" media="print" />    <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]-->            <!-- SITE_THEME -->        <!-- end styles -->                <script type="text/javascript" src="/db/javascripts/prototype-1.6.1.js"></script>    <script type="text/javascript" src="/db/javascripts/jquery-1.3.2.min.js"></script>    <script type="text/javascript" src="/db/javascripts/jquery-ui-1.8.custom.min.js"></script>    <script type="text/javascript">jQuery.noConflict();</script>    <script type="text/javascript" src="/db/fw/fusioncharts.js"></script>    <script type="text/javascript" src="/db/javascripts/sortable.js"></script>    <script type="text/javascript" src="/db/javascripts/tablesort.js"></script>    <script type="text/javascript" src="/db/javascripts/grid-widget.js"></script>    <script type="text/javascript" src="/db/javascripts/printing.js"></script>    <script type="text/javascript" src="/db/javascripts/slider.js"></script>        <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />    <style type="text/css" media="screen" >            /* put the left rounded edge on the track */            #track1-left {                position: absolute;                width: 5px;                height: 9px;                background: transparent url(/db/images/bg_slider_track.png) no-repeat top left;            }                        /* put the track and the right rounded edge on the track */            #track1 {                background: transparent url(/db/images/bg_slider_track.png) no-repeat top right;            }    </style>    <script>            jQuery(function() {                    jQuery(".datepicker").datepicker();            });    </script>    <title>MultiValue Dashboard</title>    <!-- REFRESH -->    </head><body><div id="printFrame" class="printme"></div><div id="header"><!-- HEADER --></div>    <div style="clear:both"></div>    <div id="logo">        <img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">    </div>    <!-- RefreshSlider --><div id="dashboardWrapper">    <div id="dashboard">        <!-- DASHBOARD -->        <div class="clear"></div>    </div>    <div class="clear"></div>    <br/></div><div id="footer">    <!-- FOOTER -->    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a></div></div><script type="text/javascript">/*jQuery(document).ready(function(){       jQuery('.widgetized').tablesort();     });*/</script>    </body></html>000548rss_edit.html0c2<form action="<!-- CGI$PATH -->/RSS.MAINT" method="post"><input type="hidden" name="id" value="<!-- feed_id -->"><input type="hidden" name="action" value="save"><table><tr> <td align="right">Feed ID:</td> <td><!-- edit_feed_id --></td></tr><tr> <td align="right">Name:</td> <td><input type="text" name="feed_name" value="<!-- feed_name -->"></td></tr><tr> <td align="right">Description:</td> <td><textarea name="feed_desc" rows="5" cols="50"><!-- feed_desc --></textarea></td></tr><tr> <td align="right">Select Subroutine:</td> <td><input type="text" name="sel_sub" value="<!-- sel_sub -->"> <!-- sel_sub_msg --> <a target="RSS.BP_<!-- sel_sub -->" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=<!-- sel_sub -->">Edit Source</a></td></tr><tr> <td align="right">Item Subroutine:</td> <td><input type="text" name="item_sub" value="<!-- item_sub -->"> <!-- item_sub_msg --> <a target="RSS.BP_<!-- item_sub -->" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=<!-- item_sub -->">Edit Source</a></td></tr><tr>  <td align="right">Modes:</td>  <td><textarea name="feed_modes" rows="10" cols="50"><!-- feed_modes --></textarea></td></tr><!-- EXTRA --><tr><td colspan="2"><input type="submit" name="save_feed" value="Save">&nbsp;<input type="submit" name="cancel_edit" value="Cancel"></td> </tr></table></form>000B5Frss_admin_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/><link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" /> <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" /> <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />  <script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>            	<script src="/db/javascripts/jquery.form.js" type="text/javascript" charset="utf-8"></script>    	        <script src="/db/javascripts/jquery.url.js" type="text/javascript" charset="utf-8"></script> 		<script src="/db/javascripts/rss_admin.js" type="text/javascript"></script><!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]--><!-- SITE_THEME --><title>RSS Feed Admin</title></head><body><div id="header"><!-- HEADER -->  <div id="logo">  	<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">  </div></div><div id="mainWrapper">		<div id="rss-dialog" title="New RSS Feed">		<div id="rss-messages"></div>		<form id="rss-form" method="post" action="/dbc/RSS.MAINT">			<input id="feed_id" type="hidden" value="NEW" name="id"/>			<input type="hidden" value="save" name="action"/>			<input type="hidden" value="Save" name="save_feed"/>						<table>			<tbody><tr>			 <td align="right">Feed ID:</td>			 <td><input id="new_id" type="text" value="" name="new_id"/></td>			</tr>			<tr>			 <td align="right">Name:</td>			 <td><input id="feed_name" type="text" value="" name="feed_name"/></td>			</tr>			<tr>			 <td align="right">Description:</td>			 <td><textarea id="feed_desc" cols="50" rows="5" name="feed_desc"></textarea></td>			</tr>			<tr>			 <td align="right">Select Subroutine:</td>			 <td><input id="select_sub" type="text" value="" name="sel_sub"/>  <a id="edit-sub-link" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&amp;ed_item=" target="RSS.BP_">Edit Source</a></td>			</tr>			<tr>			 <td align="right">Item Subroutine:</td>			 <td><input id="item_sub" type="text" value="" name="item_sub"/>  <a id="edit-item-link" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&amp;ed_item=" target="RSS.BP_">Edit Source</a></td>			</tr>			<tr>			  <td align="right">Modes:</td>			  <td><textarea id="feed_modes" cols="50" rows="10" name="feed_modes"></textarea></td>			</tr>			</tbody></table>		</form>	</div><!-- ADMIN_MAIN --></div><div id="footer">    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard/?tldb">Zumasys</a>    </div></div></body></html>0008E5RefreshSlider0c2<!-- outerTrackWrapper -->    <script type="text/javascript" language="javascript">  // <![CDATA[  // horizontal slider control  var slider1 = new Control.Slider('handle1', 'track1', {    range: $R(0, 9),    values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],    sliderValue: 1, // won't work if set to 0 due to a bug in script.aculo.us    onSlide: function(v) { showRefresh(v); },    onChange: function(v) { if ($('horizontal-slider')) {                    $('horizontal-slider').value = v; $('slider-form').submit();                     }    }  });  function setSliderValue(slider, value) {    // due to onChange code above we need this or     // a 0 will be put in the text box when you delete the value    //if (value == '') return;    if (isNaN(value)) {      slider.setValue(0.1);    } else {      slider.setValue(value);    }  }  function showRefresh(value) {    var dispRate = '';    switch (value) {      case 0:        dispRate = 'Auto-Refresh: Off';        break ;      case 1:        dispRate = 'Auto-Refresh: 15 seconds';        break ;      case 2:        dispRate = 'Auto-Refresh: 30 seconds';        break ;            case 3:        dispRate = 'Auto-Refresh: 1 minute';        break ;      case 4:        dispRate = 'Auto-Refresh: 2 minutes';        break ;            case 5:        dispRate = 'Auto-Refresh: 5 minutes';        break ;            case 6:        dispRate = 'Auto-Refresh: 10 minutes';        break ;            case 7:        dispRate = 'Auto-Refresh: 15 minutes';        break ;            case 8:        dispRate = 'Auto-Refresh: 30 minutes';        break ;            case 9:        dispRate = 'Auto-Refresh: 1 hour';        break ;            default:        dispRate = 'Auto-Refresh: Off';        break ;    }    document.getElementById('dispRate').innerHTML = dispRate;  }  var refreshRate = '<!-- REFRESH_RATE -->';  showRefresh(parseInt(refreshRate));    if (refreshRate != '') {    setSliderValue(slider1, refreshRate);  } else {    setSliderValue(slider1, 0.1);    }  // ]]></script><form name="reForm" method="post" action="" id="slider-form">  <input type="hidden" id="horizontal-slider" name="refresh" value="<!-- REFRESH_RATE -->" /></form>         00026APORTAL.DOCUMENTATION0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=100% align="center"><a href="/dbc/MVDB.MAIN?dbname=PORTAL RUN DOCUMENTATION">Running the Portal Dashboard Reports</a></td></tr><tr><td width=100% align="center"><a href="/dbc/MVDB.MAIN?dbname=PORTAL.SETUP.DOCUMENTATION">Portal Reports Setup Documentation</a></td></tr><tr><td width=100% align="center"><a href="/dbc/MVDB.MAIN?dbname=PORTAL.REPORTS.DOCUMENTATION">Glossary of Portal Dashboard Reports</a></td></tr></tdead></table></div>002FA4PORTAL.SETUP.DOCUMENTATION0c2<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 15 (filtered)"><style><!-- /* Font Definitions */ @font-face	{font-family:Wingdings;	panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face	{font-family:"Cambria Math";	panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face	{font-family:Calibri;	panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:0in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}.MsoChpDefault	{font-family:"Calibri",sans-serif;}.MsoPapDefault	{margin-bottom:8.0pt;	line-height:107%;}@page WordSection1	{size:8.5in 11.0in;	margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1	{page:WordSection1;} /* List Definitions */ ol	{margin-bottom:0in;}ul	{margin-bottom:0in;}--></style></head><body lang=EN-US><div class=WordSection1><p class=MsoNormal><b><span style='font-size:14.0pt;line-height:107%'>PortalSales Report Setup:</span></b></p><p class=MsoNormal>This setup process identifies the fields necessary forderiving sales, gross profit, and margin numbers. It allows for sales numbersto be broken out by sales person and, if applicable, by branch and/or region.</p><p class=MsoNormal><b>Sales File Account</b>  Multi-value systems normallyhave multiple accounts where data may reside. The sales reports will be drivenby a file of sales. This field needs the name of the account where that fileresides.</p><p class=MsoNormal><b>Name of Sales File</b>  The name of the file containingthe sales information.</p><p class=MsoNormal><b>Date of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that contains the date the sale was complete.</p><p class=MsoNormal><b>Month of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that displays the numeric value of the month the salewas completed. If the system doesnt have this dictionary item, there shouldbe one created using the Date of Sale Dict Name as a guide.</p><p class=MsoNormal><b>Year of Sale Dict Name </b> The name of the dictionaryitem in the sales file that displays the 4 digit year the sale was completed. Ifthe system doesnt have this dictionary item, there should be one created usingthe Date of Sale Dict Name as a guide.</p><p class=MsoNormal><b>Amount of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that contains the total amount of the sales transaction.This dictionary </p><p class=MsoNormal><b>Cost of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that contains the cost of the sales transaction. Thisis used for determining gross profit and margin. If this information is notavailable in the system, the field should be left blank, disabling reportsassociated with gross profit and margin.</p><p class=MsoNormal><b>Salesman Dict Name</b>  The name of the dictionary itemin the sales file that contains the primary salesman on the transaction. Mostsystems will have a salesman code in the sales file and another file thatcontains the actual names of the salesmen. This dictionary item should be onethat displays the actual name. </p><p class=MsoNormal><b>Branch Dict Name</b>  The name of the dictionary itemin the sales file that contains the branch being credited with thetransaction. Most systems will have a branch code in the sales file andanother file that contains the actual names of the branches. This dictionaryitem should be one that displays the actual name. This field only applies ifsales can be broken out by a branch. </p><p class=MsoNormal><b>Region Dict Name</b>  The name of the dictionary itemin the sales file that contains the region being credited with thetransaction. Most systems will have a region code in the sales file andanother file that contains the actual names of the regions. This dictionaryitem should be one that displays the actual name. This field only applies ifsales can be broken out by a region. </p><p class=MsoNormal><b>Go</b>  No validation is made on Portal Sales ReportSetup fields until this button is clicked. When validating, checks are madefor:</p><p class=MsoListParagraphCxSpFirst style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid file name in the account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Existence of each of the dictionary names entered</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Salesman Dict Name looking to another file for the actual name ofthe salesman. An ignorable warning is issued if that is not the case.</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Branch Dict Name looking to another file for the actual name ofthe branch. An ignorable warning is issued if that is not the case.</p><p class=MsoListParagraphCxSpLast style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Region Dict Name looking to another file for the actual name ofthe region. An ignorable warning is issued if that is not the case.</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal><b><span style='font-size:14.0pt;line-height:107%'>Portal ARReport Setup:</span></b></p><p class=MsoNormal>This setup process identifies the fields necessary for evaluatingaccount receivables. It breaks out statistics by amounts, aging categories, percentages,and periods for comparison purposes. It also identifies by customer whenviewing most amounts owed, most days aged, and accounts with significant changesin payment patterns.</p><p class=MsoNormal><b>AR File Account</b>  The AR reports will be driven by afile of receivables or invoices. This field needs the name of the accountwhere that file resides.</p><p class=MsoNormal><b>Name of AR File</b>  The name of the file containing thereceivables with amounts and payment information.</p><p class=MsoNormal><b>Due Date Dict Name</b>  The name of the dictionary itemin the AR file showing the due date of the receivable.</p><p class=MsoNormal><b>Date Paid Dict Name</b>  The name of the dictionary itemin the AR file showing the date the receivable was paid.</p><p class=MsoNormal><b>Invoice Amount Dict Name</b>  The name of the dictionaryitem in the AR file that contains the original amount owed. </p><p class=MsoNormal><b>Remaining Balance Dict Name</b>  The name of thedictionary item in the AR file that contains the remaining balance. </p><p class=MsoNormal><b>Customer Dict Name</b>  The name of the dictionary itemin the AR file that contains the customer. Most systems will have a customercode in the AR file and another file that contains the actual names of the customers.This dictionary item should be one that displays the actual name. </p><p class=MsoNormal><b>Go</b>  No validation is made on Portal AR Report Setupfields until this button is clicked. When validating, checks are made for:</p><p class=MsoListParagraphCxSpFirst style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid file name in the account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Existence of each of the dictionary names entered</p><p class=MsoListParagraphCxSpLast style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Customer Dict Name looking to another file for the actual name ofthe salesman. An ignorable warning is issued if that is not the case.</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal><b><span style='font-size:14.0pt;line-height:107%'>Portal APReport Setup:</span></b></p><p class=MsoNormal>This setup process identifies the fields necessary for evaluatingaccount payables. It breaks out statistics by amounts, aging categories, and percentages.</p><p class=MsoNormal><b>AP File Account</b>  The AP reports will be driven by afile of payables. This field needs the name of the account where that fileresides.</p><p class=MsoNormal><b>Name of AP File</b>  The name of the file containing thepayables with amounts and payment information.</p><p class=MsoNormal><b>Due Date Dict Name</b>  The name of the dictionary itemin the AP file showing the due date of the payable.</p><p class=MsoNormal><b>Date Paid Dict Name</b>  The name of the dictionary itemin the AP file showing the date the payable was paid.</p><p class=MsoNormal><b>Invoice Amount Dict Name</b>  The name of the dictionaryitem in the AP file that contains the original amount owed. </p><p class=MsoNormal><b>Remaining Balance Dict Name</b>  The name of thedictionary item in the AP file that contains the remaining balance. </p><p class=MsoNormal><b>Go</b>  No validation is made on Portal AP Report Setupfields until this button is clicked. When validating, checks are made for:</p><p class=MsoListParagraphCxSpFirst style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid file name in the account</p><p class=MsoListParagraphCxSpLast style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Existence of each of the dictionary names entered</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p></div></body></html>000666pdftemplate0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>    <link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]-->            <!-- SITE_THEME -->        <!-- end styles -->                <script type="text/javascript" src="/db/javascripts/prototype-1.6.1.js"></script>    <script type="text/javascript" src="/db/javascripts/jquery-1.3.2.min.js"></script>    <script type="text/javascript">jQuery.noConflict();</script>    <script type="text/javascript" src="/db/fw/fusioncharts.js"></script>    <script type="text/javascript" src="/db/javascripts/sortable.js"></script>    <script type="text/javascript" src="/db/javascripts/tablesort.js"></script>    <script type="text/javascript" src="/db/javascripts/grid-widget.js"></script>    <script type="text/javascript" src="/db/javascripts/printing.js"></script>    <script type="text/javascript" src="/db/javascripts/slider.js"></script>        <title>MultiValue Dashboard</title>    </head><body><div style="clear:both"></div><div id="logo">    <img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard"></div><div id="dashboardWrapper">    <div id="dashboard">        <!-- DASHBOARD -->        <div class="clear"></div>    </div>    <div class="clear"></div>    <br/></div></body></html>00022Bwidget_debug.html0c2<table width="100%"><tr><td>Widget Name:</td><td><!-- WIDGET_NAME --></td></tr><tr><td>Widget Subroutine:</td><td><!-- WIDGET_SUB_NAME --> <!-- WIDGET_EDIT_LINK --></td></tr></table><!-- DEBUG_REASON --><br /><!-- REMEDY -->Runtime errors for <!-- WIDGET_SUB_NAME --><br /><table width="100%"><tr><th>Date / Time</th><th>User</th><th>Error</th></tr><!-- RUNTIME_ERRORS --><table width="100%"><tr><td colspan="2">WIDGET.USER.DATA values:</td></tr><tr><th>Position</th><th>Value</th></tr><!-- WIDGET_USER_DATA --></table>000F48pkg_list_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>	    <script src="http://alpha.bravo:83/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>            	    <script src="http://alpha.bravo:83/db/javascripts/jquery.form.js" type="text/javascript" charset="utf-8"></script>    	        	<script src="http://alpha.bravo:83/db/javascripts/jquery.url.js" type="text/javascript" charset="utf-8"></script> 	<script src="http://alpha.bravo:83/db/javascripts/initAdminTemplate.js" type="text/javascript" charset="utf-8"></script> 	<script src="http://alpha.bravo:83/db/javascripts/sortable.js" type="text/javascript" charset="utf-8"></script> 	<script src="http://alpha.bravo:83/db/javascripts/tablesort.js" type="text/javascript" charset="utf-8"></script> 		<script type="text/javascript"> 		$(function() {			$("#tabs").tabs();			$("#accordion").accordion({ autoHeight: false });			$('#edit_dialog').dialog({ autoOpen: false, modal: true });			$('#edit_form').click(function() {				$('#edit_dialog').dialog('open');			});			$('#delete_dialog').dialog({ autoOpen: false, modal: true });			$('#delete_form').click(function() {				$('#delete_dialog').dialog('open');			});		});			</script> 		<link rel="stylesheet" href="http://alpha.bravo:83/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" /> 	<link rel="stylesheet" href="http://alpha.bravo:83/db/css/application.css" type="text/css" charset="utf-8" /> 	<link rel="stylesheet" href="http://alpha.bravo:83/db/css/ingrid.css" type="text/css" charset="utf-8" />     <link rel="StyleSheet" href="http://alpha.bravo:83/db/css/jquery-ui.css" media="screen" type="text/css" />     <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]--> 	 <!-- SITE_THEME --><title>Package Management</title></head><body><div id="edit_dialog"><p>      <form id="new-file-form" method="get" action="/dbc/MVPKG.MAIN">       <div id="new-file-messages"></div>       <table><tbody>      <tr>         <td colspan="2">File:<input id="file-name" type="text" value="" name="file_name"/></td>       </tr>      <tr>        <td><input type="radio" name="file_dict" value="DICT" id="file-dict"></td><td>DICT</td>      </tr>      <tr>        <td><input type="radio" name="file_dict" value="DATA" id="file-dict"></td><td>DATA</td>      </tr>      <tr>         <td><input type="radio" name="items_type" vaue="savedlist" id="items-type"></td><td>Saved List<br/>        file:<input type="text" name="savedlist_file" id="savedlist-file"><br/>        list:<input type="text" name="savedlist_id" id="savedlist-id"></td>      </tr>       <tr>         <td><input type="radio" name="items_type" value="all" id="items-type"></td><td>All Items</td>      </tr>       <tr>         <td><input type="radio" name="items_type" value="items" id="items-type"></td>         <td>Item: <input type="text" name="items_items" id="items-items"></td>       </tr>       </tbody></table>       <input type="hidden" value="save_user" name="action"/>       </form>       <div class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix">        <button type="button" class="ui-state-default ui-corner-all">Cancel</button>        <button type="button" class="ui-state-default ui-corner-all">Save</button>      </div></p></div><div id="header"><!-- HEADER -->  <div id="logo">  	<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">  </div></div><div id="mainWrapper"><!-- ADMIN_MAIN --></div></div><div id="footer">    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a>    </div></div></body></html>0007E2MVDB.DEFS0c00000B1Administrator0c21AdminConfigPDFConfigDashboard License UsageCode TemplatesD3 Runtime ErrorsSystem - SessionShow Vars11122551121212ADMINadminAdmin30000091Chart Demo0c22Demo-PieDemo-SS LineDemo-DoughnutDemo-SS ColDemo- MS Col2223312312ADMINguestadminDemonstration ChartsTheme 11000062Demo Financial Company0c21DEMO FINANCIAL PICTURE21ADMINguestadminDemo Financial Company00005CDEMO AVERAGE DAYS CHART0c21DEMO AVERAGE DAYS CHART21dummydisplay average days chart00003DDEMO NET INCOME CHART0c21DEMO NET INCOME CHART21dummy00005BDEMO REV.GP SALES CHART0c21DEMO REV.GP SALES CHART21dummyDisplay Rev.Gp Sales Chart000047DEMO SALES CHART0c21DEMO SALES CHART21dummyDisplay Sales Chart000050DEMO SALES PERCENTS0c21DEMO SALES PERCENTS21dummyDisplay Sales Percents000055Emailed Report0c21Emailed Report21Display contents of an emailed report link000041Icons0c21Icon Gallery11ADMINguestadminIcon Gallery50000085PORTAL REPORTS SETUP0c21PORTAL SALES REPORT SETUPPORTAL AR REPORT SETUPPORTAL AP REPORT SETUP222123Portal Reports Setup00003DPORTAL MARGINS0c21PORTAL MARGINS21dummyPortal Margins000046PORTAL AR REPORTS0c22PORTAL AR REPORTS31dummyPortal AR Reports00004FPORTAL SALES REPORTS0c21PORTAL SALES REPORTS21dummyPortal Sales Reports00003EPORTAL DASHBOARD0c21PORTAL DASHBOARD21Portal Dashboard000061PORTAL.SETUP.DOCUMENTATION0c21PORTAL SETUP DOCUMENTATION21dummyPortal Setup Documentation000068PORTAL.REPORTS.DOCUMENTATION0c21PORTAL.REPORTS.DOCUMENTATION21dummyPortal Reports Documentation00005FPORTAL DASHBOARD DOCUMENTATION0c23PORTAL.DOCUMENTATION31Portal Dashboard Documentation00005CPORTAL RUN DOCUMENTATION0c21PORTAL.RUN.DOCUMENTATION21dummyPortal Run Documentation00007FDISPLAY PORTAL BALANCE PIE CHART0c21PORTAL AR REPORTSPORTAL AP REPORTS2212dummyPie chart to display AR & AP balances0000B3DICT_MVDB.MAP.DATA0c0000022NAME0c1A0Map NameG0*1L4000001FLONG0c1A2Long NameL25000023INTERNAL.ID0c1A0IDG1*1L10000021SHORT0c1A1Short NameL10046BE6MVDB.MAP.DATA0c0000023FrenchGuiana#GF.CY.CY0c2CYCayenne000018Fiji#FJ.CE.RW0c2RWRewa00001CMacau#MO.IL.CO0c2COColoane00001CChina2#CN.GD0c2GDGuangdong000024FranceDepartment#FR.ES0c2ESEssonne000026FranceDepartment#FR.FI0c2FIFinistere000019Congo#CG.CU0c2CUCuvette000019Algeria#DZ.AR0c2ARAdrar00001AMacedonia#MK.ST0c2STStip00001AIndiana#0570c2HAHamilton000016NewYork#0290c2ERErie00001FNorthCarolina#0970c2IRIredell000018Georgia#2490c2SCSchley00001BIreland#0170c2MEM&iacute;00002CNorthAmerica#0190c2KNSt. Kitts &amp; Nevis000016Kansas#0510c2ELEllis00001FSouthCarolina#0230c2CSChester00001AIllinois#0870c2JHJohnson00001AMissouri#0070c2AUAudrain000024WorldwithCountries#1460c2IRIreland00001CNorthDakota#0210c2DIDickey000018Texas#0790c2COCCochran000017Ohio#0410c2DLDelaware000023NewMexico#0130c2DADo&ntilde;a Ana000018Nebraska#0110c2BOBoone00001AWyoming#0330c2SHSheridan000024Europewithcountries#0150c2GRGreece000018Malaysia#0010c2JOJohor000019Tennessee#1010c2LELewis00001EScotland#0180c2LALanarkshire000017NewWorld#1910c2IZIraq000018Oklahoma#0530c2GNGrant000014Iowa#1050c2JNJones00001DAlaska#2700c2WHWade Hampton000017Texas#4410c2TAYTaylor000025NewCaledonia#NC.NO.PT0c2PTPouembout000019Ontario#480c2WAWaterloo000019Montenegro#190c2TITivat000019MiddleEast#140c2SYSyria000019Switzerland#260c2JUJura000023SouthEuropeanRegion#120c2CSSerbia000019NewWorld#390c2DZAlgeria00003AQuebec#110c2GAGasp&eacute;sie-&Icirc;les-de-la-Madeleine000014Kenya#020c2COCoast00001BPuertoRico#570c2GMGuayama00001ABahamas#150c2HTHope Town000017Japan#450c2YAYamagata000024NorwayRegion#130c2OT&Oslash;stfold000026PolandCounties#PL.DS.LM0c2DLMLegnica000027MarshallIsland#MH.MH.KW0c2KWKwajalein000021Macedonia#MK.SU0c2SUStudenicani00001FHongKong#HK.KI0c2KIKwai Tsing000019Palau#PW.PE0c2PEPeleliu000018Uganda#UG.BW0c2BWBukwa00001CVietnam#VN.HY0c2HYHung Yen00001EGambia#GM.UR0c2URUpper River000034Nigeria#NG.FC0c2FCAbuja(Federal Capital Territory)00001BSenegal#SN.KL0c2KLKaolack000025Morocco#MA.CO0c2COChaouia Ouardigha00001DBurma#MM.KN0c2KNKayin State00001CMissouri#1890c2SOSt. Louis000024Ireland#0180c2MOMuineach&aacute;in000020NorthAmerica#0200c2LCSt. Lucia00001DCalifornia#0930c2SYSiskiyou000025Alaska#0900c2FAFairbanks North Star000017Texas#2610c2KEDKenedy00001DLouisiana#0050c2ASAscension000018Georgia#0690c2CFCoffee000022WorldwithCountries#1470c2ITItaly000018Minnesota#1210c2POPope00001AKentucky#1050c2HKHickman000019Michigan#1150c2MRMonroe00001AFlorida#0330c2ESEscambia00001DMississippi#0150c2CRCarroll000025Europewithcountries#0160c2HUHungary000018Malaysia#0020c2KEKedah000019Arkansas#0050c2BABaxter00001EEngland#0010c2BEBedfordshire00001FWestVirginia#0330c2HIHarrison00001DScotland#0190c2MIMidlothian000019NewWorld#1920c2IEIsrael00001BAsia3#0340c2PHPhilippines000018Virginia#1810c2SRSurry00001AColorado#0130c2BOBoulder00001BSouthDakota#0510c2GRGrant00001AAlabama#0290c2CBCleburne00001ENorwayRegion#140c2RORogaland00001BAustralia#VI0c2VIVictoria00001BOntario#490c2WEWellington00001AMontenegro#200c2ULUlcinj00001EMiddleEast#150c2TITajikistan000022SouthEuropeanRegion#130c2ESSpain000018NewWorld#400c2AOAngola00002BQuebec#120c2CAChaudi&egrave;re-Appalaches000016Kenya#030c2EAEastern000017Bahamas#160c2INInagua000018Japan#460c2YMYamaguchi00001DFiji#FJ.EA.LM0c2LMLomaiviti000027PolandCounties#PL.PK.PM0c2PPMPrzemysl00001CMacedonia#MK.TL0c2TLBitola00001ARwanda#RW.ES0c2ESEastern00001AUganda#UG.TY0c2TYMityana00001BMacedonia#MK.CA0c2CACaska000026EquatorialGuinea#GQ.BS0c2BSBioko Sur000015Iran#IR.IL0c2ILIlam000021FranceDepartment#FR.EU0c2EUEure000021FranceDepartment#FR.GA0c2GAGard000023Mauritius#MU.PA0c2PAPamplemousses000019Nigeria#NG.EN0c2ENEnugu000022Algeria#DZ.AT0c2ATAin Temouchent00001AAlgeria#DZ.BJ0c2BJBejaia000018Texas#4430c2TERTerrell000019Indiana#0590c2HNHancock000017NewYork#0310c2ESEssex00001FNorthCarolina#0990c2JAJackson00001BVirginia#0010c2ACAccomack000019Georgia#2510c2SRScreven000023Ireland#0190c2OFUa F&aacute;ilghe000037NorthAmerica#0210c2VCSt. Vincent &amp; the Grenadines00001AKansas#0530c2EWEllsworth000024SouthCarolina#0250c2CTChesterfield000017Illinois#0890c2KAKane000018Missouri#0090c2BYBarry000023WorldwithCountries#1480c2LVLatvia00001CNorthDakota#0230c2DVDivide000015Texas#0810c2COKCoke000013Ohio#0430c2ERErie000019Spain#0010c2ANAndalucia000018NewMexico#0150c2EDEddy00001CNebraska#0130c2BXBox Butte00001AWyoming#0350c2SUSublette000025Europewithcountries#0170c2ISIceland00001BMalaysia#0030c2KLKelantan00001BEngland#0020c2BRBerkshire00001BTennessee#1030c2LILincoln000018Scotland#0200c2MOMoray000019NewWorld#1930c2JOJordan000018Oklahoma#0550c2GEGreer000015Iowa#1070c2KEKeokuk00001DColorado#0140c2BRBroomfield000026NorwayRegion#150c2SOSogn og Fjordane000015Ontario#500c2YOYork000020Montenegro#210c2ZA&#381;abljak00001AMiddleEast#160c2TUTurkey000023SouthEuropeanRegion#140c2TKTurkey000026USACentralRegion#460c2SDSouth Dakota000017NewWorld#410c2BJBenin000015Quebec#130c2LVLaval00001EPuertoRico#590c2GLGuayanilla00001CBahamas#170c2LILong Island000018Japan#470c2YNYamanashi000023MarshallIsland#MH.MH.ME0c2MEMejit000026Philippines#PH.SK0c2SKSultan Kudarat00001FCoteDivoire#CI.SV0c2SVSavanes000020Macedonia#MK.AV0c2AVKavadartsi00001ARussia#RU.IV0c2IVIvanovo000025Russia#RU.KB0c2KBKabardino-Balkaria00001AEurope2#EU.PL0c2PLPoland00001BQatar#QA.DA0c2DAAd Dawhah00001BAlgeria#DZ.TL0c2TLTlemcen000019Panama#PA.PN0c2PNPanama000022Uzbekistan#UZ.QA0c2QAKashkadarya000018Alabama#0310c2CFCoffee000019Vermont#0010c2ADAddison000022Ireland#0200c2RORos Com&aacute;n00002CNorthAmerica#0220c2TTTrinidad &amp; Tobago00001BCalifornia#0950c2SOSolano000015Texas#2630c2KETKent00001ELouisiana#0070c2AUAssumption00001AGeorgia#0710c2CQColquitt00002AWorldwithCountries#1490c2LNLiechtenstein00001AMinnesota#1230c2RMRamsey00001AKentucky#1070c2HOHopkins00001BMichigan#1170c2MNMontcalm000019Florida#0350c2FLFlagler000016Spain#0020c2ARAragon00001FMississippi#0170c2CHChickasaw000025Europewithcountries#0180c2IEIreland000019Malaysia#0040c2MEMelaka000019Arkansas#0070c2BEBenton000021England#0030c2BUBuckinghamshire00001EWestVirginia#0350c2JAJackson00001DScotland#0210c2NANairnshire000019NewWorld#1940c2KUKuwait000022Asia3#0360c2RURussian Federation000019Virginia#1830c2SSSussex00001AColorado#0150c2CHChaffee00001DSouthDakota#0530c2GEGregory00001CWorld#NA0c2NANorth America000031NorwayRegion#160c2STS&oslash;r-Tr&oslash;ndelag000024Australia#WA0c2WAWestern Australia000020MiddleEast#170c2TXTurkmenistan000023SouthEuropeanRegion#150c2CYCyprus00001ANewWorld#420c2BWBotswana000021Quebec#140c2LALanaudi&egrave;re000016Kenya#050c2NANairobi00001DBahamas#180c2MCMangrove Cay000019Jordan#JO.JA0c2JAJarash000029CentralAfricanRepublic#CF.MB0c2MBMbomou000026Philippines#PH.SL0c2SLSouthern Leyte00001DMongolia#MN.OG0c2OGOmnogovi00001DPhilippines#PH.AK0c2AKAklan00001EPhilippines#PH.BA0c2BABataan000026Russia#RU.KC0c2KCKarachay-Cherkessia000024Libya#LY.HZ0c2HZAl Hizam al Akhdar000020Algeria#DZ.TM0c2TMTamanghasset000019Algeria#DZ.BL0c2BLBlida000016Texas#4450c2TEYTerry00001AIndiana#0610c2HRHarrison00001ANewYork#0330c2FRFranklin000020NorthCarolina#1010c2JOJohnston00001CVirginia#0030c2ALAlbemarle00001AGeorgia#2530c2SMSeminole00001AIreland#0210c2SLSligeach000024NorthAmerica#0230c2USUnited States000017Kansas#0550c2FIFinney000021SouthCarolina#0270c2CDClarendon00001BIllinois#0910c2KNKankakee000019Missouri#0110c2BRBarton000026WorldwithCountries#1500c2LTLithuania00001ANorthDakota#0250c2DNDunn000018Texas#0830c2COLColeman000018Ohio#0450c2FAFairfield000018Spain#0030c2ASAsturias000019NewMexico#0170c2GRGrant000017Nebraska#0150c2BYBoyd00001CWyoming#0370c2SWSweetwater000023Europewithcountries#0190c2ITItaly000022Malaysia#0050c2NSNegeri Sembilan000020England#0040c2CACambridgeshire00001ATennessee#1050c2LOLoudon000019Scotland#0220c2OROrkney00001ANewWorld#1950c2LBLebanon000019Oklahoma#0570c2HAHarmon000016Iowa#1090c2KOKossuth00001ENorwayRegion#170c2TETelemark000020Moldova#460c2BAB&#259;l&#355;i000026MiddleEast#180c2AEUnitedArabEmirates000029SouthEuropeanRegion#160c2VAVatican City00001FUSACentralRegion#480c2TXTexas00001ENewWorld#430c2BFBurkina Faso00001BQuebec#150c2LULaurentides00001CKenya#060c2NENorth Eastern00001CPuertoRico#610c2GBGuaynabo00001ABahamas#190c2MGMayaguana000022Macau#MO.MA.SA0c2SASanto Antonio000019Fiji#FJ.CE.SR0c2SRSerua00001AMacau#MO.IL.CT0c2CTCotai000019Ghana#GH.AH0c2AHAshanti00001DPhilippines#PH.SM0c2SMSamar000020Mongolia#MN.OH0c2OHOvorkhangai00001EMacedonia#MK.BN0c2BNBrvenica00001DPhilippines#PH.AL0c2ALAlbay00001CRussia#RU.KD0c2KDKrasnodar00001CMicronesia#FM.CH0c2CHChuuk000019Guinea#GN.KA0c2KAKankan000017Benin#BJ.DO0c2DODonga00001BAlgeria#DZ.TN0c2TNTindouf00001DAlgeria#DZ.BM0c2BMBoumerdes00001CSouthDakota#0550c2HAHaakon000019Alabama#0330c2CRColbert00001CVermont#0030c2BEBennington000021Ireland#0220c2TITiobraid Arainn000020NorthAmerica#0240c2GLGreenland00001BCalifornia#0970c2SMSonoma000015Texas#2650c2KERKerr00001DLouisiana#0090c2AVAvoyelles00001AGeorgia#0730c2CUColumbia000027WorldwithCountries#1510c2LULuxembourg00001CMinnesota#1250c2RLRed Lake00001AKentucky#1090c2JAJackson00001EMichigan#1190c2MOMontmorency00001AFlorida#0370c2FRFranklin00002BSpain#0040c2BABaleares (Balearic Islands)00001DMississippi#0190c2COChoctaw000024Europewithcountries#0200c2LVLatvia000019Malaysia#0060c2PAPahang000018Arkansas#0090c2BOBoone00001AEngland#0050c2CHCheshire000020WestVirginia#0370c2JEJefferson00001FScotland#0230c2PBPeeblesshire000017NewWorld#1960c2MUOman000019Asia3#0380c2SGSingapore00001BVirginia#1850c2TATazewell00001BColorado#0170c2CECheyenne000020NewCaledonia#NC.NO.PY0c2PYPoya00001BNorwayRegion#180c2TRTroms000016Moldova#470c2CACahul00001EMiddleEast#190c2UZUzbekistan000022USASouthWestRegion#150c2HIHawaii000019NewWorld#440c2BIBurundi000028Quebec#160c2MOMont&eacute;r&eacute;gie000015Kenya#070c2NYNyanza00001FBahamas#200c2MIMoore's Island00001FLiberia#LR.GB0c2GBGrand Bassa00001CMacedonia#MK.CE0c2CECentar00001BRussia#RU.KE0c2KEKemerovo000019Guinea#GN.KB0c2KBKoubia00001FCameroon#CM.NW0c2NWNord-Ouest000021Lebanon#LE.JL0c2JLMount Lebanon000021FranceDepartment#FR.GE0c2GEGers000024Cambodia#KH.OC0c2OCOddar Meancheay00001EAlgeria#DZ.TO0c2TOTizi Ouzou000016Tonga#TO.EU0c2EU'Eua000026Kazakhstan#KZ.WK0c2WKWest Kazakhstan000019Senegal#SN.LG0c2LGLouga00001DTexas#4470c2THRThrockmorton00001BIndiana#0630c2HDHendricks000018NewYork#0350c2FUFulton00001DNorthCarolina#1030c2JNJones00001CVirginia#0050c2AEAlleghany00001AGeorgia#2550c2SPSpalding00001DIreland#0230c2WAPort Lairge000022NorthAmerica#0250c2PRPuerto Rico000015Kansas#0570c2FOFord000020SouthCarolina#0290c2CLColleton00001AIllinois#0930c2KDKendall000018Missouri#0130c2BABates000026WorldwithCountries#1520c2MKMacedonia00001ANorthDakota#0270c2EDEddy000017Texas#0850c2CONCollin000016Ohio#0470c2FYFayette000015Spain#0050c2CECeuta00001DNewMexico#0190c2GUGuadalupe000018Nebraska#0170c2BRBrown000017Wyoming#0390c2TETeton00002BEuropewithcountries#0210c2LILiechtenstein000018Malaysia#0070c2PEPerak00001AEngland#0060c2COCornwall00001ATennessee#1070c2MCMcMinn00001DScotland#0240c2PEPerthshire000018NewWorld#1970c2OMQatar000019Oklahoma#0590c2HRHarper000012Iowa#1110c2LELee000019Asia3#0390c2LKSri Lanka000019Wisconsin#0010c2ADAdams000020NorwayRegion#190c2VAVest-Agder000023Moldova#480c2CUChi&#351;in&#259;u000019MiddleEast#200c2YMYemen00001ANewWorld#450c2CMCameroon000027Quebec#170c2CQCentre-du-Qu&eacute;bec00001AKenya#080c2RVRift Valley00001APuertoRico#630c2GRGurabo00001FBahamas#210c2NWNew Providence000021Macau#MO.MA.SC0c2SCSao Lourenco000022MarshallIsland#MH.MH.MI0c2MIMili00001CMacedonia#MK.UG0c2UGStruga00001CSudan#SD.UN0c2UNUpper Nile000026Kazakhstan#KZ.EK0c2EKEast Kazakhstan000028Philippines#PH.AN0c2ANAgusan del Norte000026Libya#LY.JI0c2JIAl Jifarah(Al Jfara)00001CBotswana#BW.KW0c2KWKweneng000019China2#CN.HA0c2HAHainan000016Nauru#NR.IJ0c2IJIjuw00001AAlgeria#DZ.TP0c2TPTipaza00001CSouthDakota#0570c2HMHamlin000019Alabama#0350c2CNConecuh000020Australia2#QLD0c2QLDQueensland00001BVermont#0050c2CACaledonia000019Missouri#1950c2SASaline00001FIreland#0240c2WEIarmh&iacute;000025NorthAmerica#0260c2KYCayman Islands00001FCalifornia#0990c2SLStanislaus000017Texas#2670c2KIMKimble00001ELouisiana#0110c2BEBeauregard000024Virginia#7300c2PBPetersburg (City)000016Georgia#0750c2COCook000022WorldwithCountries#1530c2MTMalta00001BMinnesota#1270c2RWRedwood00001CKentucky#1110c2JEJefferson00001BMichigan#1210c2MUMuskegon000019Florida#0390c2GAGadsden000029Spain#0060c2CACanarias (Canary Islands)00001FMississippi#0210c2CLClaiborne000027Europewithcountries#0220c2LTLithuania000019Malaysia#0080c2PRPerlis00001AArkansas#0110c2BRBradley000019England#0070c2CUCumbria00001EWestVirginia#0390c2KAKanawha00001FScotland#0250c2RERenfrewshire00001FNewWorld#1980c2SASaudi Arabia000019Virginia#1870c2WAWarren00001EColorado#0190c2CLClear Creek00001ENorwayRegion#200c2VEVestfold000027Moldova#490c2SNSt&acirc;nga Nistrului00001CNewWorld#460c2CVCape Verde000016Kenya#090c2WEWestern00001CBahamas#220c2NBNorth Abaco000025PolandCounties#PL.LU.LM0c2LLMLublin000024MarshallIsland#MH.MH.MJ0c2MJMajuro00001FLiberia#LR.GD0c2GDGrand Gedeh00001DGhana#GH.BA0c2BABrong-Ahafo000027Mauritania#MR.HC0c2HCHodh Ech Chargui00001CMacedonia#MK.TR0c2TRTearce00001AUganda#UG.UU0c2UUKanungu000019Uganda#UG.WA0c2WAWakiso000019Malawi#MW.SA0c2SASalima000019Russia#RU.KG0c2KGKaluga000019Guinea#GN.KD0c2KDKindia000018China2#CN.HB0c2HBHebei00001AGambia#GM.WE0c2WEWestern000022Bhutan#BT.WP0c2WPWangdi Phodrang00001BWisconsin#0030c2ASAshland000016Texas#4490c2TITTitus000017Indiana#0650c2HYHenry000019NewYork#0370c2GEGenesee00001BNorthCarolina#1050c2LELee000021Maryland#5100c2BABaltimore City000019Virginia#0070c2AMAmelia00001AGeorgia#2570c2SEStephens00001DIreland#0250c2WXLoch Garman000019Kansas#0590c2FRFranklin000022SouthCarolina#0310c2DADarlington000017Illinois#0950c2KOKnox000019Missouri#0150c2BTBenton000024WorldwithCountries#1540c2MVMoldova00001CNorthDakota#0290c2EMEmmons00001ETexas#0870c2CSWCollingsworth000024Virginia#5500c2CPChesapeake (City)000017Ohio#0490c2FRFranklin000019Spain#0070c2CNCantabria00001BNewMexico#0210c2HAHarding00001ANebraska#0190c2BFBuffalo000017Wyoming#0410c2UIUinta000028Europewithcountries#0230c2LULuxembourg00001FMalaysia#0090c2PPPulau Pinang00001CEngland#0080c2DEDerbyshire00001BTennessee#1090c2MYMcNairy000026Scotland#0260c2RCRoss &amp; Cromarty000018NewWorld#1990c2SYSyria00001AOklahoma#0610c2HSHaskell000013Iowa#1130c2LILinn00001ENorwayRegion#210c2SVSvalbard00001CMoldova#500c2EDEdine&#355;00002ANewWorld#470c2CPCentral African Republic00001BPuertoRico#650c2HAHatillo00001DBahamas#230c2NNNorth Andros000017Macau#MO.MA.SE0c2SESe00001BFiji#FJ.CE.TL0c2TLTailevu000020Philippines#PH.SQ0c2SQSiquijor00001CMacedonia#MK.BR0c2BRBerovo000027Macedonia#MK.CH0c2CHCesinovo Oblesevo00001EPhilippines#PH.AP0c2APApayao00001DRussia#RU.KH0c2KHKhabarovsk000019China2#CN.YN0c2YNYunnan000029Guinea#GN.KE0c2KEK&eacute;rouan&eacute;00001ETurkmenistan#TM.LE0c2LELebap00001AAlgeria#DZ.TR0c2TRTiaret00001ANamibia#NA.ER0c2ERErongo00001AColorado#0210c2COConejos00001ASouthDakota#0590c2HNHand000017Alabama#0370c2CSCoosa00001CVermont#0070c2CHChittenden00001BMissouri#1970c2SYSchuyler000026Ireland#0260c2WICill Mhant&aacute;in00001BCalifornia#1010c2SUSutter000015Texas#2690c2KINKing00001DLouisiana#0130c2BIBienville000018Georgia#0770c2CWCoweta000023WorldwithCountries#1550c2MCMonaco00001CMinnesota#1290c2RERenville00001CKentucky#1130c2JSJessamine00001AMichigan#1230c2NENewaygo00001BFlorida#0410c2GIGilchrist000022Spain#0080c2CLCastilla-La Mancha00001CMississippi#0230c2CKClarke000027Europewithcountries#0240c2MKMacedonia000018Malaysia#0100c2SASabah00001AArkansas#0130c2CACalhoun000017England#0090c2DVDevon000020SouthAmerica#0010c2ARArgentina00001CWestVirginia#0410c2LELewis000020Scotland#0270c2RORoxburghshire000025NewWorld#2000c2AEUnitedArabEmirates000018Asia3#0420c2THThailand000013USA#HI0c2HIHawaii00001FNorwayRegion#220c2JMJan Mayen000023Moldova#510c2GAG&#259;g&#259;uzia000016NewWorld#480c2TDChad000020Bahamas#240c2NENorth Eleuthera000017Fiji#FJ.EA.LU0c2LULau000026MarshallIsland#MH.MH.ML0c2MLMaloelap000019Algeria#DZ.CH0c2CHChlef00001DMauritania#MR.GO0c2GOGorgol000020Philippines#PH.SR0c2SRSorsogon00001EMacedonia#MK.BS0c2BSBosilovo00001AMacedonia#MK.CI0c2CICair00001FPhilippines#PH.AQ0c2AQAntique00001FPhilippines#PH.BG0c2BGBenguet00001ARussia#RU.KI0c2KIKarelia00001BQatar#QA.US0c2USUmm Salal000024FranceDepartment#FR.GI0c2GIGironde00001EAlgeria#DZ.TS0c2TSTissemsilt00002ASaoTomeandPrincipe#ST.AG0c2AGAgua Grande00001AWisconsin#0050c2BABarron000024Alaska#2800c2WPWrangell-Petersburg00001ATexas#4510c2TOGTom Green000018Indiana#0670c2HOHoward000018NewYork#0390c2GRGreene00001ENorthCarolina#1070c2LNLenoir00001AVirginia#0090c2AHAmherst000019Georgia#2590c2STStewart000022Ireland#0270c2NLNorthern Ireland000016Kansas#0610c2GEGeary00001ESouthCarolina#0330c2DIDillon000017Illinois#0970c2LALake00001CMissouri#0170c2BNBollinger000027WorldwithCountries#1560c2MGMontenegro00001CNorthDakota#0310c2FOFoster000019Texas#0890c2CORColorado000015Ohio#0510c2FUFulton00001FSpain#0090c2CYCastilla y Leon00001BNewMexico#0230c2HIHidalgo000017Nebraska#0210c2BUBurt00001AWyoming#0430c2WAWashakie000023Europewithcountries#0250c2MTMalta00001AMalaysia#0110c2SRSarawak000018England#0100c2DODorset000019Tennessee#1110c2MAMacon00001ESouthAmerica#0020c2BOBolivia00001FScotland#0280c2SESelkirkshire000018NewWorld#2010c2YMYemen000019Oklahoma#0630c2HUHughes000015Iowa#1150c2LOLouisa000030MadagascarRegions#MG.FI.HM0c2HMHaute Matsiatra00001EBahamas#250c2RIRagged Island00001FGuatemala#010c2AVAlta Verapaz000022Moldova#520c2LAL&#259;pu&#351;na00001AVenezuela#010c2ZAmazonas000019NewWorld#490c2KMComoros00001FPuertoRico#670c2HOHormigueros00001AAlgeria#DZ.BS0c2BSBiskra000023Burma#MM.MD0c2MDMandalay Division000018Jordan#JO.IR0c2IRIrbid00001FMacedonia#MK.VA0c2VAValandovo000027Philippines#PH.SS0c2SSSurigao del Sur000017Niger#NE.DF0c2DFDiffa000019China2#CN.XZ0c2XZXizang000025CoteDivoire#CI.BS0c2BSBas-Sassandra000018China2#CN.HE0c2HEHenan000022Madagascar#MG.AS0c2ASAntsiranana00001CEurope2#EU.PT0c2PTPortugal00001DVirginia#1910c2WSWashington00001BColorado#0230c2CSCostilla00001CSouthDakota#0610c2HSHanson00001BAlabama#0390c2CVCovington000017Vermont#0090c2ESEssex00001BMissouri#1990c2SLScotland00001BCalifornia#1030c2TETehama000017Alaska#1000c2HAHaines000017Texas#2710c2KIEKinney00001BLouisiana#0150c2BOBossier00001AGeorgia#0790c2CDCrawford000028WorldwithCountries#1570c2NLNetherlands000018Minnesota#1310c2RIRice00001AKentucky#1150c2JOJohnson00001AMichigan#1250c2OKOakland000018Florida#0430c2GLGlades000019Spain#0100c2CTCatalonia00001AMississippi#0250c2CYClay000025Europewithcountries#0260c2MDMoldova00001BMalaysia#0120c2SLSelangor00001AArkansas#0150c2CRCarroll000018England#0110c2DUDurham00001DSouthAmerica#0030c2BRBrazil00001EWestVirginia#0430c2LILincoln00001BScotland#0290c2SHShetland00001ENewWorld#2020c2PRPuerto Rico000018Bahamas#260c2RCRum Cay000011USA#IA0c2IAIowa00001FGuatemala#020c2BVBaja Verapaz000016Moldova#530c2OROrhei000020Mozambique#010c2CDCabo Delgado000023Venezuela#020c2BAnzo&aacute;tegui000023USACentralRegion#550c2WIWisconsin000018Portugal#020c2AVAveiro00001FNewWorld#500c2CICote d Ivoire000019Algeria#DZ.BT0c2BTBatna000025Mauritania#MR.HG0c2HGHodh El Gharbi000029Philippines#PH.ST0c2STSurigao del Norte00001EEastTimor#TL.MT0c2MTManatuto00001BMacedonia#MK.BU0c2BUButel00001EMacedonia#MK.DA0c2DADebartsa000026Philippines#PH.AS0c2ASAgusan del Sur00001FPhilippines#PH.BI0c2BIBiliran00001CRussia#RU.KK0c2KKKhakassia000027EquatorialGuinea#GQ.CS0c2CSCentro Sur00001BQatar#QA.WA0c2WAAl Wakrah00002BIran#IR.KB0c2KBKohgiluyeh and Buyer Ahmed000029FranceDepartment#FR.HA0c2HAHautes Alpes00002AFalklandIsland#NA.FK0c2FKFalkland Island00001ACapeVerde#CV.PA0c2PAPaul00002ABrazilRegion#BR.NE0c2NENorth East Region000014Iowa#1170c2LULucas00001CWisconsin#0070c2BYBayfield000018Alaska#2820c2YAYakutat000017Texas#4530c2TRATravis00001CIndiana#0690c2HUHuntington00001ANewYork#0410c2HAHamilton00001FNorthCarolina#1090c2LILincoln00001DVirginia#0110c2APAppomattox000018Georgia#2610c2SUSumter000015Kansas#0630c2GOGove000022SouthCarolina#0350c2DODorchester000022Virginia#7350c2PQPoquoson (City)00001BIllinois#0990c2LSLa Salle000018Missouri#0190c2BOBoone000023WorldwithCountries#1580c2NONorway000023NorthDakota#0330c2GVGolden Valley000016Texas#0910c2COMComal000015Ohio#0530c2GAGallia000024Spain#0110c2CVCommunidad Valencian000017NewMexico#0250c2LELea000019Nebraska#0230c2BLButler000018Wyoming#0450c2WEWeston000024Europewithcountries#0270c2MCMonaco00001DMalaysia#0130c2TETerengganu000017England#0120c2ESEssex00001BTennessee#1130c2MDMadison00001CSouthAmerica#0040c2CLChile000020Scotland#0300c2STStirlingshire000021NewWorld#2030c2KYCayman Islands00001AOklahoma#0650c2JAJackson000029MadagascarRegions#MG.FI.HO0c2HOIhorombe000014World8#010c2ASAsia00001DBahamas#270c2SSSan Salvador000020Guatemala#030c2CMChimaltenango000017Moldova#540c2SOSoroca000018Mozambique#020c2GAGaza000017Venezuela#030c2CApure000020Chile#010c2VSValpara&iacute;so000016Portugal#030c2BEBeja000032NewWorld#510c2CDDemocratic Republic of the Congo00001BPuertoRico#690c2HUHumacao00001AAlgeria#DZ.BU0c2BUBouira00001EMacedonia#MK.UM0c2UMKumanovo000020Macedonia#MK.VC0c2VCVranestica00001CPhilippines#PH.SU0c2SUSulu000020Tanzania#TZ.PN0c2PNPemba North00001EHongKong#HK.KU0c2KUKwun Tong000029CoteDivoire#CI.VB0c2VBVallee du Bandama00001ALaos#LA.PH0c2PHPhongsali00001BMacedonia#MK.DB0c2DBDebar00001BRussia#RU.KL0c2KLKalmykia000019Uganda#UG.DO0c2DODokolo00001EMadagascar#MG.TL0c2TLToliara00001EVietnam#VN.KG0c2KGKien Giang000020Mauritius#MU.PL0c2PLPort Louis00001FVirginia#1930c2WEWestmoreland00001AColorado#0250c2CRCrowley00001DSouthDakota#0630c2HDHarding00001AAlabama#0410c2CWCrenshaw00001AVermont#0110c2FRFranklin000018Missouri#2010c2SCScott00001CCalifornia#1050c2TRTrinity000018Texas#2730c2KLEKleberg000019Louisiana#0170c2CACaddo000017Georgia#0810c2CPCrisp000023WorldwithCountries#1590c2PLPoland000018Minnesota#1330c2RCRock000019Kentucky#1170c2KEKenton000019Michigan#1270c2OAOceana000016Florida#0450c2GUGulf00001BSpain#0120c2EXExtremadura00001DMississippi#0270c2CMCoahoma000028Europewithcountries#0280c2MOMontenegro000019Arkansas#0170c2CHChicot000021England#0130c2GLGloucestershire00001FSouthAmerica#0050c2COColombia00001CWestVirginia#0450c2LOLogan00001DScotland#0310c2SUSutherland000016World8#020c2EUEurope00001CBahamas#280c2SBSouth Abaco00001DGuatemala#040c2CQChiquimula000018Moldova#550c2TITighina00001DMozambique#030c2INInhambane000018Venezuela#040c2DAragua000045Chile#020c2AIAis&eacute;n del General Carlos Iba&ntilde;ezdel Campo000017Portugal#040c2BRBraga00001ANewWorld#520c2DJDjibouti000021Burma#MM.MG0c2MGMagway Division000018Jordan#JO.KA0c2KAKarak000021Macedonia#MK.VD0c2VDKisela Voda000017Bhutan#BT.GA0c2GAGasa000025CentralAmerica2#CE.GT0c2GTGuatemala00001EPhilippines#PH.AU0c2AUAurora000020Philippines#PH.BK0c2BKBukidnon000021Russia#RU.KM0c2KMKhantia-Mansia000020Madagascar#MG.TM0c2TMToamasina00001BLibya#LY.KF0c2KFAl Kufrah00001ACameroon#CM.OU0c2OUOuest00001AIran#IR.KD0c2KDKordestan000028FranceDepartment#FR.HC0c2HCHaute Corse00001DVietnam#VN.KH0c2KHKhanh Hoa00001CSyria#SY.HA0c2HAAl Hasakah000023Madagascar#MG.AV0c2AVAntananarivo000039DemocraticRepublicoftheCongo#CD.KC0c2KCKasai Occidental00001DKyrgyzstan#KG.BA0c2BABatken00001COklahoma#0670c2JEJefferson000013Iowa#1190c2LYLyon000017Asia3#0470c2VNVietnam000019Wisconsin#0090c2BRBrown000018Texas#4550c2TRITrinity000019Indiana#0710c2JAJackson00001ANewYork#0430c2HEHerkimer000020NorthCarolina#1110c2MDMcDowell00001CVirginia#0130c2ARArlington000018Georgia#2630c2TBTalbot000017Kansas#0650c2GHGraham000021SouthCarolina#0370c2EDEdgefield00001BIllinois#1010c2LWLawrence00001BMissouri#0210c2BCBuchanan000025WorldwithCountries#1600c2PTPortugal000021NorthDakota#0350c2GFGrand Forks000019Texas#0930c2COAComanche000015Ohio#0550c2GEGeauga000017Spain#0130c2GAGalicia00001BNewMexico#0270c2LILincoln000017Nebraska#0250c2CACass000029Europewithcountries#0290c2NLNetherlands00001FMalaysia#0150c2KLKuala Lumpur00001BEngland#0140c2HAHampshire00001ATennessee#1150c2MRMarion00001ESouthAmerica#0060c2ECEcuador00001FScotland#0320c2WEWest Lothian000016World8#030c2AFAfrica00001DBahamas#290c2SNSouth Andros00002FWorldwithCountries#010c2AGAntigua and Barbuda000012USA#ID0c2IDIdaho00001EGuatemala#050c2PREl Progreso000018Moldova#560c2UNUngheni00001AMozambique#040c2MPMaputo000019Venezuela#050c2EBarinas00001AChile#030c2ANAntofagasta000021Portugal#050c2BABragan&ccedil;a000017NewWorld#530c2EGEgypt000023Australia2#SA0c2SASouth Australia00001FBarbados#010c2CCChrist Church00001BPuertoRico#710c2ISIsabela000028PolandCounties#PL.MZ.OM0c2MOMOstroleka00001DLiberia#LR.GK0c2GKGrand Kru00001BMacedonia#MK.VE0c2VEVeles000025Sudan#SD.WB0c2WBWest Bahr Al Ghazal00001BYemen#YE.MR0c2MRAl Mahrah00001CPhilippines#PH.CB0c2CBCebu00001EGabon#GA.MO0c2MOMoyen-Ogooue00001ERussia#RU.KN0c2KNKaliningrad00001BChina2#CN.ZJ0c2ZJZhejiang000022FranceDepartment#FR.YO0c2YOYonne00001EGuinea#GN.LA0c2LALab&eacute;000018China2#CN.GS0c2GSGansu000017Iran#IR.KE0c2KEKerman00002BFranceDepartment#FR.HD0c2HDHauts-de-Seine00001EPakistan#PK.IS0c2ISIslamabad00001DTurkmenistan#TM.MA0c2MAMary00001FEurope2#EU.RD0c2RDRhodes (Gr)000017Virginia#1950c2WIWise000019Colorado#0270c2CUCuster00001CSouthDakota#0650c2HGHughes000019Alabama#0430c2CUCullman00001CVermont#0130c2GIGrand Isle00001AMissouri#2030c2SNShannon00001BCalifornia#1070c2TUTulare000015Texas#2750c2KNOKnox00001DLouisiana#0190c2CLCalcasieu000016Georgia#0830c2DADade000024WorldwithCountries#1610c2RORomania00001AMinnesota#1350c2RORoseau000018Kentucky#1190c2KNKnott000019Michigan#1290c2OGOgemaw00001AFlorida#0470c2HTHamilton000018Spain#0140c2LALa Rioja00001ENewMexico#0280c2LALos Alamos00001CMississippi#0290c2CPCopiah000024Europewithcountries#0300c2NONorway000019Malaysia#0160c2LALabuan000018Arkansas#0190c2CLClark00001FEngland#0150c2HEHerefordshire000027SouthAmerica#0070c2FKFalkland Islands00001FWestVirginia#0470c2MDMcDowell00001EScotland#0330c2WIWigtonshire00001DWorld8#040c2NANorth America000020Bahamas#300c2SESouth Eleuthera000023WorldwithCountries#020c2BSBahamas00001CGuatemala#060c2ESEscuintla00001AMozambique#050c2SOSofala000020Venezuela#060c2FBol&iacute;var00001FChile#040c2ARAraucan&iacute;a000020Portugal#060c2CBCastelo Branco000023NewWorld#540c2GQEquatorial Guinea00001EBarbados#020c2ANSaint Andrew000017Fiji#FJ.NO.BU0c2BUBua00001EFiji#FJ.NO.CK0c2CKCakaudrova000019Laos#LA.OU0c2OUOudomxai00001DMacedonia#MK.DE0c2DEDolneni000017Sudan#SD.EB0c2EBLakes000019Serbia#RS.MR0c2MRMorava000017Russia#RU.KO0c2KOKomi000024FranceDepartment#FR.HE0c2HEHerault000025Cambodia#KH.OM0c2OMBanteay Meanchey000019Tonga#TO.HA0c2HAHa'apai00001BOklahoma#0690c2JOJohnston000016Iowa#1210c2MAMadison000016Asia3#0490c2TWTaiwan00001BWisconsin#0110c2BUBuffalo000016Texas#4570c2TYLTyler000018Indiana#0730c2JSJasper00001BNewYork#0450c2JEJefferson00001DNorthCarolina#1130c2MAMacon00001AVirginia#0150c2AUAugusta00001CGeorgia#2650c2TATaliaferro000016Kansas#0670c2GTGrant000021SouthCarolina#0390c2FAFairfield000016Illinois#1030c2LELee000019Missouri#0230c2BUButler000027WorldwithCountries#1620c2SMSan Marino00001BNorthDakota#0370c2GRGrant000017Texas#0950c2CCHConcho000015Ohio#0570c2GRGreene000016Spain#0150c2MAMadrid000018NewMexico#0290c2LULuna000018Nebraska#0270c2CECedar000017Hawaii#0010c2HAHawaii000024Europewithcountries#0310c2PLPoland00001CMalaysia#0170c2PUPutrajaya00001FEngland#0160c2HRHertfordshire00001CTennessee#1170c2MSMarshall000024SouthAmerica#0080c2GFFrench Guiana00001DWorld8#050c2SASouth America00001EBahamas#310c2SWSpanish Wells000024WorldwithCountries#030c2BBBarbados00001CGuatemala#070c2GUGuatemala00001BMozambique#060c2NANampula00001AVenezuela#070c2GCarabobo000016Chile#050c2ATAtacama000019Portugal#070c2COCoimbra000019NewWorld#550c2EREritrea00001EBarbados#030c2GESaint George00001APuertoRico#730c2JYJayuya000029NewBrunswick#CA.NB.FC0c2FCFundy Coastal00001FAlgeria#DZ.CO0c2COConstantine00001DSudan#SD.WD0c2WDWest Darfur000019Gabon#GA.NG0c2NGNgounie000020CoteDivoire#CI.DE0c2DEDenguele00001BChina2#CN.HK0c2HKHongKong00001BVietnam#VN.LA0c2LALong An000021Pakistan#PK.JK0c2JKAzad Kashmir000024TrinidadandTobago#TT.MA0c2MAMayaro000020SaudiArabia#SA.QS0c2QSAl Qasim000020SaudiArabia#SA.RI0c2RIAr Riyad000019Asia3#0500c2HKHong Kong000018Virginia#1970c2WYWythe000018Colorado#0290c2DEDelta000020SouthDakota#0670c2HTHutchinson000016Alabama#0450c2DADale00001AVermont#0150c2LALamoille000019Missouri#2050c2SHShelby00001DCalifornia#1090c2TOTuolumne000016Texas#2770c2LAMLamar00001CLouisiana#0210c2CDCaldwell000024Virginia#7400c2PMPortsmouth (City)000018Georgia#0850c2DWDawson000023WorldwithCountries#1630c2CSSerbia00001DMinnesota#1370c2SLSt. Louis000017Kentucky#1210c2KOKnox00001CMichigan#1310c2ONOntonagon000018Florida#0490c2HAHardee000017Spain#0160c2MEMelilla00001FMississippi#0310c2CGCovington000026Europewithcountries#0320c2PTPortugal000017Arkansas#0210c2CYClay00001DSouthAmerica#0090c2GYGuyana00001DWestVirginia#0490c2MAMarion000022NewCaledonia#NC.SU.LF0c2LFLa Foa000028Saskatchewan#CA.SK.NR0c2NRNorth Region00001FWorld8#060c2CACentral America000022Bahamas#320c2WBWest Grand Bahama000022WorldwithCountries#040c2BZBelize000020Guatemala#080c2HUHuehuetenango00001AMozambique#070c2NINiassa000019Venezuela#080c2HCojedes000024Chile#060c2BIB&iacute;o-B&iacute;o00001EPortugal#080c2EV&Eacute;vora00001ANewWorld#560c2ETEthiopia00001DBarbados#040c2JMSaint James000025PolandCounties#PL.WP.KM0c2WKMKalisz000021Morocco#MA.FB0c2FBFes-Boulemane00001FMacedonia#MK.VH0c2VHVrapciste000020Sudan#SD.WE0c2WEWest Equatoria00001DBhutan#BT.GE0c2GEGeylegphug000031CentralAfricanRepublic#CF.MP0c2MPOmbella-M'Poko000024CentralAmerica2#CE.HN0c2HNHonduras000020Tanzania#TZ.PS0c2PSPemba South00001DPhilippines#PH.BO0c2BOBohol000019Malawi#MW.RU0c2RURumphi00001CRussia#RU.KQ0c2KQKamchatka00001BGuinea#GN.KN0c2KNKoundara000023Kuwait#KW.MU0c2MUMubarak Al Kabir00001FChina2#CN.HL0c2HLHeilongjiang00002AFranceDepartment#FR.HG0c2HGHaute Garonne00001BNigeria#NG.ZA0c2ZAZamfara000019Togo#TG.MA0c2MAMaritime000016Oklahoma#0710c2KAKay000016Iowa#1230c2MHMahaska000015Asia3#0510c2MOMacau00001BWisconsin#0130c2BNBurnett000017Texas#4590c2UPSUpshur000015Indiana#0750c2JYJay000017NewYork#0470c2KIKings00001FNorthCarolina#1150c2MSMadison000017Virginia#0170c2BABath00001AGeorgia#2670c2TTTattnall000015Kansas#0690c2GYGray000020SouthCarolina#0410c2FLFlorence00001DIllinois#1050c2LILivingston00001BMissouri#0250c2CACaldwell000025WorldwithCountries#1640c2SKSlovakia00001CNorthDakota#0390c2GNGriggs000016Texas#0970c2CKECooke000027Virginia#5600c2CFClifton Forge (City)000017Ohio#0590c2GUGuernsey000016Spain#0170c2MUMurcia00001CNewMexico#0310c2MKMcKinley000018Nebraska#0290c2CHChase000019Hawaii#0030c2HOHonolulu000025Europewithcountries#0330c2RORomania000016England#0180c2KEKent000019Tennessee#1190c2MUMaury00001FSouthAmerica#0100c2PYParaguay000017World8#070c2OCOceania000022WorldwithCountries#050c2CACanada000019Guatemala#090c2IZIzabal000018Mozambique#080c2TETete00001FVenezuela#090c2YDelta Amacuro000017Chile#070c2COCoquimbo000016Portugal#090c2FAFaro000017NewWorld#570c2GAGabon00001DTurkey#020c2ADAd&#305;yaman00001CBarbados#050c2JNSaint John000025PuertoRico#750c2JDJuana D&iacute;az000025MarshallIsland#MH.MH.NK0c2NKNamorik000020Sudan#SD.EE0c2EEEast Equatoria00001CGuinea#GN.KO0c2KOKouroussa000021Guinea#GN.LE0c2LEL&eacute;louma00001BLibya#LY.JU0c2JUAl Jufrah000019Malawi#MW.BA0c2BABalaka00001FBotswana#BW.NE0c2NENorth East000027Singapore#SG.CS0c2CSCentral Singapore00001DBurkinaFaso#BF.YG0c2YGYagha000017Virginia#1990c2YOYork000019Colorado#0310c2DNDenver00001CMontana#0010c2BEBeaverhead00001ASouthDakota#0690c2HYHyde000018Alabama#0470c2DLDallas000018Vermont#0170c2OROrange00001BMissouri#2070c2SDStoddard00001CCalifornia#1110c2VEVentura000015Texas#2790c2LABLamb00001BLouisiana#0230c2CMCameron000019Georgia#0870c2DEDecatur000025WorldwithCountries#1650c2SISlovenia000019Minnesota#1390c2SCScott000018Kentucky#1230c2LALarue00001AMichigan#1330c2OEOsceola000018Florida#0510c2HEHendry000017Spain#0180c2NANavarra00001CMississippi#0330c2DEDeSoto000028Europewithcountries#0340c2SMSan Marino00001BArkansas#0230c2CBCleburne00001CEngland#0190c2LALancashire00001BSouthAmerica#0110c2PEPeru00001FWestVirginia#0510c2MRMarshall00001BWorld8#080c2MEMiddle East000026WorldwithCountries#060c2CRCosta Rica000019Guatemala#100c2JAJalapa000020Azerbaijan#010c2ARAb&#351;eron00001CMozambique#090c2ZMZambezia000018Chile#080c2LIO'Higgins000017NewWorld#580c2GHGhana00001ETurkey#030c2AFAfyonkarahisar00001EBarbados#060c2JSSaint Joseph000018Bahrain#010c2CACapital000024PolandCounties#PL.WP.KO0c2WKOKonin000025PolandCounties#PL.WP.LE0c2WLELeszno000025Uzbekistan#UZ.QR0c2QRKarakalpakstan00001EBurkinaFaso#BF.GG0c2GGGnagna00001CLiberia#LR.GP0c2GPGbarpolu00001FMacedonia#MK.VJ0c2VJBogovinje00001AZambia#ZM.LP0c2LPLuapula00001EPhilippines#PH.TR0c2TRTarlac00001BYemen#YE.MW0c2MWMl Mahwit000023Macedonia#MK.CS0c2CSCucer Sandevo00001FPhilippines#PH.CG0c2CGCagayan000018Russia#RU.KS0c2KSKursk00002ACoteDivoire#CI.DH0c2DHDix-Huit Montagnes000021China2#CN.GX0c2GXGuangxi Zhuang000018China2#CN.HN0c2HNHunan00001FIran#IR.KJ0c2KJSouth Khorasan00001CVietnam#VN.LD0c2LDLam Dong00001BCapeVerde#CV.PI0c2PIPraia00001DOklahoma#0730c2KIKingfisher000015Iowa#1250c2MRMarion00001BWisconsin#0150c2CACalumet00001EAlaska#2900c2YKYukon-Koyukuk000016Texas#4610c2UPTUpton00001BIndiana#0770c2JEJefferson000017NewYork#0490c2LELewis00001ENorthCarolina#1170c2MTMartin00001AVirginia#0190c2BEBedford000018Georgia#2690c2TYTaylor000018Kansas#0710c2GLGreeley000022SouthCarolina#0430c2GEGeorgetown000018Illinois#1070c2LOLogan00001BMissouri#0270c2CWCallaway000022WorldwithCountries#1660c2ESSpain00001FNorthDakota#0410c2HEHettinger000018Texas#0990c2CRYCoryell000017Ohio#0610c2HAHamilton00002BSpain#0190c2PAPais Vasco (Basque Country)000018NewMexico#0330c2MOMora000019Nebraska#0310c2CRCherry000018Hawaii#0050c2KAKalawao000024Europewithcountries#0350c2CSSerbia000020England#0200c2LELeicestershire000019Tennessee#1210c2MIMeigs00001FSouthAmerica#0120c2SRSuriname000020WorldwithCountries#070c2CUCuba00001AGuatemala#110c2JUJutiapa000026Azerbaijan#020c2ACA&#287;cab&#601;di00001AMozambique#100c2MNManica00001FVenezuela#110c2IFalc&oacute;n000018Chile#090c2LLLos Lagos000018Portugal#110c2GUGuarda000018NewWorld#590c2GNGuinea00001ETurkey#040c2AGA&#287;r&#305;00001CBarbados#070c2LUSaint Lucy00001APuertoRico#770c2JCJuncos000018Bahrain#020c2CECentral000024PolandCounties#PL.PD.LM0c2PLMLomza00001CPanama#PA.SB0c2SBKuna Yala000017Sudan#SD.WH0c2WHUnity00001BRussia#RU.KT0c2KTKostroma000018Tunisia#TN.SF0c2SFSfax00001EOman#OM.SH0c2SHAsh Sharqiyah000024Singapore#SG.EA0c2EAEast Singapore000021Cambodia#KH.PH0c2PHPreah Vihear00001CGhana#GH.UE0c2UEUpper East00001AColorado#0330c2DODolores00001AMontana#0030c2BHBig Horn00001DSouthDakota#0710c2JAJackson000018Alabama#0490c2DEDekalb00001AAsia#0010c2AFAfghanistan000019Vermont#0190c2OLOrleans000018Missouri#2090c2STStone000019California#1130c2YOYolo000017Alaska#1100c2JUJuneau000019Texas#2810c2LAPLampasas00001DLouisiana#0250c2CTCatahoula000018Georgia#0890c2DKDeKalb000023WorldwithCountries#1670c2SESweden00001DMinnesota#1410c2SHSherburne000019Kentucky#1250c2LULaurel000019Michigan#1350c2OCOscoda00001AFlorida#0530c2HNHernando00001DMississippi#0350c2FOForrest00001CPennsylvania#0010c2ADAdams000026Europewithcountries#0360c2SKSlovakia00001CArkansas#0250c2CVCleveland00001EEngland#0210c2LILincolnshire00001ESouthAmerica#0130c2UYUruguay00001CWestVirginia#0530c2MSMason000027Manitoba#CA.MB.NR0c2NRNorthern Region000019Bahrain#030c2MUMuharraq000024WorldwithCountries#080c2DMDominica00001FGuatemala#120c2PEPet&eacute;n00001EAzerbaijan#030c2AMA&#287;dam000020Mozambique#110c2MTMaputo(City)000019Venezuela#120c2JGuarico000037Chile#100c2MAMagallanes y la Ant&aacute;rtica Chilena00001FNewWorld#600c2GWGuinea-Bissau000016Turkey#050c2AMAmasya00001FBarbados#080c2MISaint Michael000026PolandCounties#PL.PK.RM0c2PRMRzeszow00001ANamibia#NA.HA0c2HAHardap00001AAlgeria#DZ.DJ0c2DJDjelfa00001BBurma#MM.MO0c2MOMon State00001EMacedonia#MK.VL0c2VLVasilevo000021Philippines#PH.TT0c2TTTawi-Tawi00001ATanzania#TZ.PW0c2PWPwani000022Macedonia#MK.DK0c2DKDemir Kapija00001FPhilippines#PH.BS0c2BSBasilan000019Russia#RU.KU0c2KUKurgan000025FranceDepartment#FR.YV0c2YVYvelines00001AChina2#CN.GZ0c2GZGuizhou000018Nigeria#NG.YO0c2YOYobe000016Syria#SY.HI0c2HIHoms000025BrazilRegion#BR.NO0c2NONorth Region000018Oklahoma#0750c2KOKiowa000017Iowa#1270c2MSMarshall00001CWisconsin#0170c2CHChippewa000017Texas#4630c2UVAUvalde000016Asia#0020c2AMArmenia00001AIndiana#0790c2JNJennings00001CNewYork#0510c2LILivingston000023NorthCarolina#1190c2MKMecklenburg000018Virginia#0210c2BLBland000019Georgia#2710c2TFTelfair00001AKansas#0730c2GWGreenwood000022SouthCarolina#0450c2GRGreenville00001CIllinois#1090c2MUMcDonough000019Missouri#0290c2CMCamden000028WorldwithCountries#1680c2CHSwitzerland00001CNorthDakota#0430c2KIKidder000017Texas#1010c2COTCottle000016Ohio#0630c2HNHancock000019NewMexico#0350c2OTOtero00001BNebraska#0330c2CYCheyenne000016Hawaii#0070c2KUKauai000026Europewithcountries#0370c2SLSlovenia000018England#0220c2LOLondon00001ATennessee#1230c2MOMonroe000020SouthAmerica#0140c2VEVenezuela000019Bahrain#040c2NONorthern00002AWorldwithCountries#090c2DODominican Rep.000015USA#IL0c2ILIllinois000021Guatemala#130c2QZQuetzaltenango000023Azerbaijan#040c2ASA&#287;da&#351;000016Venezuela#130c2KLara000014Chile#110c2MLMaule000022USASouthWestRegion#320c2NVNevada000018Portugal#130c2LELeiria000017NewWorld#610c2KEKenya00001DBarbados#090c2PESaint Peter000019PuertoRico#790c2LJLajas000019Nigeria#NG.GO0c2GOGombe000020Uzbekistan#UZ.SA0c2SASamarkand000019Zambia#ZM.LS0c2LSLusaka00001DMacedonia#MK.DL0c2DLDelcevo000020Philippines#PH.BT0c2BTBatangas000018Russia#RU.KV0c2KVKirov00001EGuinea#GN.KS0c2KSKissidougou000028FranceDepartment#FR.HL0c2HLHaute Loire00001AColorado#0350c2DUDouglas000018Montana#0050c2BLBlaine00001DSouthDakota#0730c2JEJerauld000018Alabama#0510c2ELElmore000019Asia#0030c2AZAzerbaijan000019Vermont#0210c2RURutland00001BMissouri#2110c2SUSullivan000019California#1150c2YUYuba000019Texas#2830c2LASLa Salle00001DLouisiana#0270c2CBClaiborne000017Georgia#0910c2DODodge000024WorldwithCountries#1690c2UAUkraine00001AMinnesota#1430c2SBSibley00001BKentucky#1270c2LWLawrence000019Michigan#1370c2OSOtsego00001BFlorida#0550c2HLHighlands00001EMississippi#0370c2FRFranklin000020Pennsylvania#0030c2ALAllegheny000023Europewithcountries#0380c2ESSpain00001BArkansas#0270c2CMColumbia00001DWestVirginia#0550c2MEMercer000019Bahrain#050c2SOSouthern000027WorldwithCountries#100c2SVEl Salvador000020Guatemala#140c2QCQuich&eacute;000020Azerbaijan#050c2AFA&#287;stafa000018Venezuela#140c2LMerida00002BChile#120c2RMSantiago Metropolitan Region000018Portugal#140c2LILisboa000019NewWorld#620c2LSLesotho000017Turkey#070c2ALAntalya00001EBarbados#100c2PHSaint Philip000023WorldwithCountries#110c2GDGrenada000014USA#IN0c2INIndiana00001DGuatemala#150c2RERetalhuleu00001DNewZealand#E70c2AUKAuckland00001DAzerbaijan#060c2AUA&#287;su000019Venezuela#150c2MMiranda00001EChile#130c2TATarapac&aacute;000019NewWorld#630c2LILiberia000016Turkey#080c2AVArtvin00001EBarbados#110c2THSaint Thomas000019PuertoRico#810c2LRLares000023PolandCounties#PL.LD.LO0c2LLOLodz00001DAlgeria#DZ.EB0c2EBEl Bayadh00001FSudan#SD.WK0c2WKWest Kurdufan000015Bhutan#BT.HA0c2HAHa000021CentralAmerica2#CE.HT0c2HTHaiti000021Macedonia#MK.DM0c2DMDemir Hisar00001FPhilippines#PH.BU0c2BUBulacan000017Niger#NE.DS0c2DSDosso00001ERussia#RU.MC0c2MCMoscow City000024Singapore#SG.WE0c2WEWest Singapore000028FranceDepartment#FR.HM0c2HMHaute Marne00001CKyrgyzstan#KG.TL0c2TLTalas000025Mauritius#MU.PW0c2PWPlaines Wilhems00001AOklahoma#0770c2LALatimer000014Iowa#1290c2MIMills000019Wisconsin#0190c2CLClark00001ATexas#4650c2VAVVal Verde000019Indiana#0810c2JOJohnson000019NewYork#0530c2MAMadison000020NorthCarolina#1210c2MIMitchell00001CVirginia#0230c2BOBotetourt000019Georgia#2730c2TLTerrell000019Kansas#0750c2HMHamilton000021SouthCarolina#0470c2GWGreenwood00001AIllinois#1110c2MHMcHenry000021Missouri#0310c2CGCape Girardeau00002BWorldwithCountries#1700c2UKUnited Kingdom00001DNorthDakota#0450c2LMLaMoure000016Texas#1030c2CRACrane000015Ohio#0650c2HRHardin000018NewMexico#0370c2QUQuay000017Nebraska#0350c2CLClay000015Hawaii#0090c2MAMaui000024Europewithcountries#0390c2SESweden000019England#0240c2NONorfolk00001ETennessee#1250c2MGMontgomery000025WorldwithCountries#120c2GTGuatemala000026Guatemala#160c2SASacatep&eacute;quez000022NewZealand#E80c2BOPBay of Plenty000025Azerbaijan#070c2ABAli Bayraml&#305;000019Venezuela#160c2NMonagas000025USASouthWestRegion#350c2NMNewMexico00001CPortugal#160c2PAPortalegre000017NewWorld#640c2LRLibya00001ATurkey#090c2AYAyd&#305;n000024PolandCounties#PL.MZ.PM0c2MPMPlock000036DemocraticRepublicoftheCongo#CD.KN0c2KNKinshasa City00002FCentralAfricanRepublic#CF.NM0c2NMNana-Mambere000029Philippines#PH.CL0c2CLCompostela Valley000019Malawi#MW.TH0c2THThyolo00001ERussia#RU.KX0c2KXKrasnoyarsk00001CRussia#RU.LN0c2LNLeningrad000028FranceDepartment#FR.HN0c2HNHaute Saone00001CVietnam#VN.LI0c2LILai Chau00001BOman#OM.BA0c2BAAl Batinah000018Syria#SY.HL0c2HLAleppo00001BCambodia#KH.PL0c2PLPailin000020CapeVerde#CV.PN0c2PNPorto Novo000018Colorado#0370c2EAEagle00001CMontana#0070c2BRBroadwater00001BSouthDakota#0750c2JOJones00001AAlabama#0530c2ESEscambia000019Asia#0050c2BDBangladesh00001CVermont#0230c2WAWashington000018Missouri#2130c2TATaney000017Texas#2850c2LAVLavaca00001DLouisiana#0290c2COConcordia000017Georgia#0930c2DLDooly000029WorldwithCountries#1710c2VAVatican City00001BMinnesota#1450c2SAStearns000016Kentucky#1290c2LELee000019Michigan#1390c2OTOttawa00001EFlorida#0570c2HBHillsborough00001CMississippi#0390c2GOGeorge000020Pennsylvania#0050c2ARArmstrong000029Europewithcountries#0400c2CHSwitzerland000019Arkansas#0290c2CWConway000022England#0250c2NRNorthamptonshire00001EWestVirginia#0570c2MIMineral000025NewCaledonia#NC.SU.MD0c2MDMont-Dore000028NewCaledonia#NC.IL.OV0c2OVOuv&eacute;a000025PuertoRico#830c2LMLas Mar&iacute;as000021WorldwithCountries#130c2HTHaiti00001DGuatemala#170c2SMSan Marcos00001FNewZealand#E90c2CANCanterbury00001AAzerbaijan#080c2AAAstara00001FVenezuela#170c2ONueva Esparta000017Portugal#170c2POPorto00001CNewWorld#650c2MSMadagascar00001ETurkey#100c2BKBal&#305;kesir000027NovaScotia#CA.NS.ST0c2STSunrise Trail000025SaudiArabia#SA.SH0c2SHAsh Sharqiyah00001BEurope2#EU.AD0c2ADAndorra00001EBurkinaFaso#BF.GM0c2GMGourma000024PapuaNewGuinea#PG.MB0c2MBMilne Bay00001DGuineaBissau#GW.GA0c2GAGabu000026EquatorialGuinea#GQ.WN0c2WNWele Nzas000020Philippines#PH.CM0c2CMCamiguin000029Tibet#TI.XP0c2XPXigaz&ecirc; Prefecture00001BRussia#RU.ME0c2MEMariy-El00001DTunisia#TN.TA0c2TATataouine00001BVietnam#VN.KT0c2KTKon Tum000016Syria#SY.HM0c2HMHama00001BEurope2#EU.RO0c2RORomania00001AEurope2#EU.SE0c2SESweden00001BOklahoma#0790c2LFLe Flore000017Iowa#1310c2MTMitchell00001CWisconsin#0210c2COColumbia00001ATexas#4670c2VAZVan Zandt000015Asia#0060c2BTBhutan000016Indiana#0830c2KNKnox000018NewYork#0550c2MNMonroe000022NorthCarolina#1230c2MGMontgomery00001CVirginia#0250c2BRBrunswick000018Georgia#2750c2THThomas000017Kansas#0770c2HPHarper00001FSouthCarolina#0490c2HAHampton000019Illinois#1130c2MLMcLean00001AMissouri#0330c2CRCarroll000023WorldwithCountries#1720c2CYCyprus00001BNorthDakota#0470c2LOLogan000019Texas#1050c2CKTCrockett000017Ohio#0670c2HIHarrison00001ENewMexico#0390c2RARio Arriba000019Nebraska#0370c2COColfax000025Europewithcountries#0410c2UAUkraine000020England#0260c2NTNorthumberland000019Tennessee#1270c2MEMoore000028NewCaledonia#NC.NO.BE0c2BEB&eacute;lep000024WorldwithCountries#140c2HNHonduras00001DGuatemala#180c2SRSanta Rosa000018Azerbaijan#090c2BABaki00001CVenezuela#180c2PPortuguesa000021Portugal#180c2SASantar&eacute;m000018NewWorld#660c2MWMalawi000017Turkey#110c2BCBilecik00001CSudan#SD.WN0c2WNWhite Nile000021Macedonia#MK.CZ0c2CZCentar Zupa000027Philippines#PH.CN0c2CNCamarines Norte000019Serbia#RS.NS0c2NSNisava00001ARussia#RU.LP0c2LPLipetsk00001BTunisia#TN.SL0c2SLSiliana00001AGuinea#GN.MC0c2MCMacenta000020SolomonIsland#SB.IS0c2ISIsabel000018China2#CN.HU0c2HUHubei00001DTunisia#TN.BA0c2BABen Arous00002CFranceDepartment#FR.HP0c2HPHautes Pyrenees000017Syria#SY.ID0c2IDIdlib000024TrinidadandTobago#TT.NA0c2NANariva000019Colorado#0390c2ELElbert000018Montana#0090c2CACarbon00001FSouthDakota#0770c2KIKingsbury000018Alabama#0550c2ETEtowah000015Asia#0070c2BNBrunei000019Vermont#0250c2WIWindham000018Missouri#2150c2TETexas000014Texas#2870c2LEELee00001BLouisiana#0310c2DSDe Soto000021Virginia#7500c2RARadford (City)00001BGeorgia#0950c2DUDougherty000023WorldwithCountries#1730c2TKTurkey00001AMinnesota#1470c2SESteele000019Kentucky#1310c2LSLeslie00001FMichigan#1410c2PRPresque Isle000018Florida#0590c2HMHolmes00001CMississippi#0410c2GRGreene00001DPennsylvania#0070c2BEBeaver00002CEuropewithcountries#0420c2UKUnited Kingdom00001CArkansas#0310c2CICraighead000021England#0270c2NGNottinghamshire00001CWestVirginia#0590c2MNMingo00001FPuertoRico#850c2LPLas Piedras000023WorldwithCountries#150c2JMJamaica000020Guatemala#190c2SOSolol&aacute;00001DNewZealand#F10c2GISGisborne00001BAzerbaijan#100c2BLBalakan000017Venezuela#190c2RSucre000020Portugal#190c2SESet&uacute;bal000016NewWorld#670c2MLMali00001BTurkey#120c2BGBing&ouml;l000017Ghana#GH.TV0c2TVVolta000023Europe2#EU.AF0c2AFAland (Finland)00002CMorocco#MA.GB0c2GBGharb-Chrarda Beni Hssen00001DChad#TD.HD0c2HDHadjer-Lamis000021PapuaNewGuinea#PG.MD0c2MDMadang00001ARussia#RU.MG0c2MGMagadan00001BGuinea#GN.MD0c2MDMandiana00001BCambodia#KH.PO0c2POPursat00001AOklahoma#0810c2LILincoln000015Iowa#1330c2MOMonona00001CWisconsin#0230c2CRCrawford000019Texas#4690c2VICVictoria000016Asia#0080c2MMBurma (00001BIndiana#0850c2KOKosciusko00001CNewYork#0570c2MOMontgomery00001DNorthCarolina#1250c2MOMoore00001BVirginia#0270c2BUBuchanan000016Georgia#2770c2TITift000017Kansas#0790c2HVHarvey00001DSouthCarolina#0510c2HOHorry000018Illinois#1150c2MAMacon000019Missouri#0350c2CTCarter00001DNorthDakota#0490c2MHMcHenry000017Texas#1070c2CSBCrosby00002AVirginia#5700c2COColonial Heights (City)000014Ohio#0690c2HYHenry00001DNewMexico#0410c2RSRoosevelt000019Nebraska#0390c2CUCuming00002AEuropewithcountries#0430c2VAVatican City00001DEngland#0280c2OXOxfordshire00001ATennessee#1290c2MNMorgan000022WorldwithCountries#160c2MXMexico000020Guatemala#200c2SUSuchitepequez000020NewZealand#F20c2HKBHawke's Bay000020Egypt_346255#010c2ALAlexandria000019Azerbaijan#110c2BRBarda000019Venezuela#200c2STachira000022Portugal#200c2VCViana do Castelo00001CNewWorld#680c2MRMauritania000016Turkey#130c2BTBitlis000022MarshallIsland#MH.MH.NU0c2NUNamu000025NovaScotia#CA.NS.CB0c2CBCape Breton000037DemocraticRepublicoftheCongo#CD.KR0c2KRKasai Oriental000019Senegal#SN.MT0c2MTMatam000024Morocco#MA.GC0c2GCGrand Casablanca00001EMauritania#MR.IN0c2INInchiri00001DMacedonia#MK.DR0c2DRDrugovo00001DPhilippines#PH.CP0c2CPCapiz00001FGabon#GA.OI0c2OIOgooue-Ivindo000017Guinea#GN.LO0c2LOLola000020Swaziland#SZ.SH0c2SHShiselweni00001FIran#IR.KS0c2KSNorth Khorasan000026FranceDepartment#FR.HR0c2HRHaut Rhin00001FCambodia#KH.PP0c2PPPhnom Penh00001AColorado#0410c2EPEl Paso000018Montana#0110c2CRCarter00001ASouthDakota#0790c2LALake000019Alabama#0570c2FAFayette000017Asia#0090c2KHCambodia000019Vermont#0270c2WNWindsor000019Missouri#2170c2VEVernon000015Texas#2890c2LEOLeon000024Louisiana#0330c2EBEast Baton Rouge000019Georgia#0970c2DGDouglas000026WorldwithCountries#1750c2AUAustralia00001BMinnesota#1490c2STStevens00001AKentucky#1330c2LTLetcher00001CMichigan#1430c2RORoscommon00001EFlorida#0610c2IRIndian river00001DMississippi#0430c2GEGrenada00001EPennsylvania#0090c2BDBedford000024Europewithcountries#0440c2CYCyprus00001BArkansas#0330c2CFCrawford000021WestVirginia#0610c2MLMonongalia000020PuertoRico#870c2LZLo&iacute;za000025WorldwithCountries#170c2NINicaragua000025Guatemala#210c2TOTotonicap&aacute;n000026NewZealand#F30c2MWTManawatu-Wanganui00001BEgypt_346255#020c2ANAswan000021Azerbaijan#120c2BQBeyl&#601;qan00001CSanMarino#010c2ACAcquaviva00001AVenezuela#210c2TTrujillo00001BPortugal#210c2VRVila Real000019NewWorld#690c2MAMorocco000014Turkey#140c2BLBolu000033NorthWestTerritories#CA.NT.NC0c2NCNahanni Country00001FMacau#MO.MA.SZ0c2SZSao Lazaro000028SaoTomeandPrincipe#ST.CG0c2CGCantagalo00001DSaudiArabia#SA.TB0c2TBTabuk00001ASriLanka#LK.GL0c2GLGalle00001FSriLanka#LK.HB0c2HBHambantota000020SaudiArabia#SA.BA0c2BAAl Bahah00001ATanzania#TZ.RK0c2RKRukwa00001BLibya#LY.MB0c2MBAl Margab00001BMalawi#MW.BL0c2BLBlantyre00001ATunisia#TN.AN0c2ANAriana000029FranceDepartment#FR.HS0c2HSHaute Savoie000018Oklahoma#0830c2LOLogan000015Iowa#1350c2MNMonroe000018Wisconsin#0250c2DADane000017Texas#4710c2WAKWalker000014Asia#0100c2CNChina00001AIndiana#0870c2LALagrange000018NewYork#0590c2NANassau00001CNorthCarolina#1270c2NANash00001DVirginia#0290c2BCBuckingham000018Georgia#2790c2TMToombs000018Kansas#0810c2HSHaskell00001ESouthCarolina#0530c2JAJasper00001BIllinois#1170c2MPMacoupin000017Missouri#0370c2CSCass000021WorldwithCountries#1760c2FJFiji00001ENorthDakota#0510c2MIMcIntosh00001ATexas#1090c2CUBCulberson000017Ohio#0710c2HGHighland00001CNewMexico#0430c2SASandoval000019Nebraska#0410c2CSCuster000024Europewithcountries#0450c2TKTurkey00001CEngland#0300c2SHShropshire000019Tennessee#1310c2OBObion000026MadagascarRegions#MG.MA.SF0c2SFSofia000022WorldwithCountries#180c2PAPanama000019Guatemala#220c2ZAZacapa000020NewZealand#F40c2MBHMarlborough00001BEgypt_346255#030c2ATAsyut000022Azerbaijan#130c2BSBil&#601;suvar00001ESanMarino#020c2CHChiesanuova000019Venezuela#220c2UYaracuy000017Portugal#220c2VIViseu00001CNewWorld#700c2MZMozambique000016Turkey#150c2BDBurdur000030DemocraticRepublicoftheCongo#CD.KT0c2KTKatanga00001FUzbekistan#UZ.SI0c2SISirdaryo000025Morocco#MA.GE0c2GEGuelmim Es Semara000017Sudan#SD.WR0c2WRWarab00001ASamoa #WS.PA0c2PAPalauli000019Serbia#RS.PC0c2PCPcinja00001BVietnam#VN.LO0c2LOLao Cai00001EThailand#TH.KK0c2KKKhon Kaen00001DWestVirginia#0630c2MOMonroe00001EAustralia2#TAS0c2TASTasmania00001AColorado#0430c2FRFremont000019Montana#0130c2CSCascade00001ESouthDakota#0810c2LWLawrence00001AAlabama#0590c2FRFranklin000019Missouri#2190c2WAWarren000018Texas#2910c2LIBLiberty000020Louisiana#0350c2ECEast Carroll000017Georgia#0990c2EAEarly000025WorldwithCountries#1770c2KIKiribati000019Minnesota#1510c2SWSwift000018Kentucky#1350c2LILewis00001AMichigan#1450c2SASaginaw000019Florida#0630c2JSJackson00001DMississippi#0450c2HAHancock00001CPennsylvania#0110c2BRBerks000024Europewithcountries#0460c2RURussia00001DArkansas#0350c2CTCrittenden00001AEngland#0310c2SOSomerset000015Turkey#160c2BUBursa00001CPuertoRico#890c2LQLuquillo000031WorldwithCountries#190c2KNSt. Kitts &amp; Nevis00001BNewZealand#F50c2NSNNelson00001DEgypt_346255#040c2BHBeheira000026Azerbaijan#140c2CBC&#601;bray&#305;l00001CSanMarino#030c2DODomagnano000017Venezuela#230c2VZulia000019NewWorld#710c2NANamibia00001FBurkinaFaso#BF.YT0c2YTYatenga00001DMacedonia#MK.VV0c2VVVevcani000016Chad#TD.GR0c2GRGuera000025Philippines#PH.CS0c2CSCamarines Sur00001DGabon#GA.OL0c2OLOgooue-Lolo000019Serbia#RS.PD0c2PDDanube000020Iran#IR.KV0c2KVRazavi Khorasan00001CThailand#TH.KL0c2KLKalasin00001DThailand#TH.LB0c2LBLop Buri00001CEurope2#EU.SK0c2SKSlovakia00001AEurope2#EU.RU0c2RURussia00001DMauritius#MU.SA0c2SASavanne00001BTennessee#1330c2OVOverton000017Oklahoma#0850c2LVLove000019Iowa#1370c2MGMontgomery000019Wisconsin#0270c2DODodge000017Texas#4730c2WALWaller000019Asia#0120c2TPEast Timor000016Indiana#0890c2LKLake00001ANewYork#0610c2NYNew York000023NorthCarolina#1290c2NHNew Hanover00001BVirginia#0310c2CACampbell000017Georgia#2810c2TOTowns000019Kansas#0830c2HGHodgeman00001FSouthCarolina#0550c2KEKershaw00001AIllinois#1190c2MIMadison000018Missouri#0390c2CECedar00002DWorldwithCountries#1780c2MHMarshall Islands00001ENorthDakota#0530c2MKMcKenzie000017Texas#1110c2DALDallam000016Ohio#0730c2HOHocking00001CNewMexico#0450c2SJSan Juan000019Nebraska#0430c2DADakota000026Europewithcountries#0470c2SCScotland00001FEngland#0320c2STStaffordshire000022NewCaledonia#NC.NO.CA0c2CACanala000020Turkey#170c2CK&Ccedil;anakkale000025WorldwithCountries#200c2LCSt. Lucia00001ENewZealand#F60c2NTLNorthland00001FEgypt_346255#050c2BNBeni Suef000022Azerbaijan#150c2CLC&#601;lilabad00001ASanMarino#040c2FAFaetano000026Venezuela#240c2WDependencies Federal000017NewWorld#720c2NENiger00002AEurope2#EU.BA0c2BABosnia and Herzegovina00001FUzbekistan#UZ.TA0c2TATashkent000019Ghana#GH.CP0c2CPCentral00001ALesotho#LS.LE0c2LELeribe000021Panama#PA.BC0c2BCBocas del Toro00001CTanzania#TZ.SD0c2SDSingida000023Philippines#PH.CT0c2CTCatanduanes000021Gabon#GA.OM0c2OMOgooue-Maritime000018Serbia#RS.PE0c2PEPecki000029FranceDepartment#FR.HV0c2HVHaute Vienne00002BFranceDepartment#FR.IL0c2ILIndre et Loire00001CEurope2#EU.SL0c2SLSlovenia00001DWestVirginia#0650c2MGMorgan00001BColorado#0450c2GAGarfield00001AMontana#0150c2CHChouteau00001DSouthDakota#0830c2LILincoln000018Alabama#0610c2GEGeneva000016Asia#0130c2GEGeorgia00001DMissouri#2210c2WSWashington000020Alaska#1220c2KEKenai Peninsula00001ATexas#2930c2LIMLimestone000022Louisiana#0370c2EFEast Feliciana000018Georgia#1010c2ECEchols000027WorldwithCountries#1790c2FMMicronesia000018Minnesota#1530c2TOTodd00001AKentucky#1370c2LNLincoln00001CMichigan#1470c2SCSt. Clair00001BFlorida#0650c2JEJefferson00001EMississippi#0470c2HRHarrison00001CPennsylvania#0130c2BLBlair000025Europewithcountries#0480c2ENEngland000018Arkansas#0370c2CSCross000019England#0330c2SUSuffolk000019NewWorld#730c2NGNigeria000027USANorthEastRegion#090c2CTConnecticut000021PuertoRico#910c2MTManat&iacute;00003CWorldwithCountries#210c2VCSt. Vincent &amp; the Grenadines00001ANewZealand#F70c2OTAOtago00001BEgypt_346255#060c2CACairo00002BAzerbaijan#160c2DSDa&#351;k&#601;s&#601;n00001DSanMarino#050c2FIFiorentino000022Venezuela#250c2ADistrito Capital00001EEurope2#EU.SM0c2SMSan Marino000021Kyrgyzstan#KG.DA0c2DAJalal Abad00001BEurope2#EU.AL0c2ALAlbania000019Jordan#JO.MA0c2MAMafraq00001BRussia#RU.MM0c2MMMurmansk00001ATunisia#TN.SS0c2SSSousse000021Thailand#TH.KN0c2KNKanchanaburi000018England#0340c2SRSurrey000019Tennessee#1350c2PEPerry00001AOklahoma#0870c2MCMcClain000018Iowa#1390c2MUMuscatine000018Wisconsin#0290c2DRDoor000015Texas#4750c2WARWard000014Asia#0140c2INIndia00001AIndiana#0910c2LPLa Porte000019NewYork#0630c2NINiagara000023NorthCarolina#1310c2NTNorthampton00001BVirginia#0330c2CRCaroline00001AGeorgia#2830c2TETreutlen000018Kansas#0850c2JAJackson000021SouthCarolina#0570c2LALancaster000019Illinois#1210c2MSMarion00001BMissouri#0410c2CNChariton000022WorldwithCountries#1800c2NRNauru00001CNorthDakota#0550c2MLMcLean000017Texas#1130c2DASDallas000015Ohio#0750c2HLHolmes00001ENewMexico#0470c2SMSan Miguel000018Nebraska#0450c2DWDawes000023Europewithcountries#0490c2WAWales000034NewfoundlandandLabrador#CA.NF.AV0c2AVAvalon Region000018NewWorld#740c2RWRwanda00001CTurkey#190c2CM&Ccedil;orum000024USANorthEastRegion#100c2DEDelaware000031WorldwithCountries#220c2TTTrinidad &amp; Tobago00001ENewZealand#F80c2STLSouthland00001EEgypt_346255#070c2DADakahlia00002BAzerbaijan#170c2DVD&#601;v&#601;&ccedil;i000021SanMarino#060c2BMBorgo Maggiore000018Venezuela#260c2XVargas00001FBurkinaFaso#BF.ZM0c2ZMZondoma00001CSriLanka#LK.GQ0c2GQGampaha000019Somalia#SO.MU0c2MUMudug000017Nepal#NP.RA0c2RARapti000024Kiribati#KI.PI0c2PIPhoenix Islands00001EPhilippines#PH.CV0c2CVCavite000018Gabon#GA.NY0c2NYNyanga000020Lebanon#LE.NA0c2NAAn Nabatiyah000019Iran#IR.LO0c2LOLorestan000022FranceDepartment#FR.IN0c2INIndre00001CVietnam#VN.LS0c2LSLang Son000019Thailand#TH.LE0c2LELoei00002BEuropewithcountries#0500c2NINorth Ireland000019Arkansas#0390c2DADallas00001AEngland#0350c2ESE.Sussex00001FWestVirginia#0670c2NINicholas000019Colorado#0470c2GIGilpin000018Montana#0170c2CUCuster00001BSouthDakota#0850c2LYLyman000018Alabama#0630c2GRGreene000018Asia#0150c2IDIndonesia000018Missouri#2230c2WYWayne000019Texas#2950c2LIPLipscomb00001ELouisiana#0390c2EVEvangeline00001BGeorgia#1030c2EFEffingham000028WorldwithCountries#1810c2NZNew Zealand00001CMinnesota#1550c2TRTraverse00001DKentucky#1390c2LGLivingston00001DMichigan#1490c2SJSt. Joseph00001BFlorida#0670c2LYLafayette00001BMississippi#0490c2HIHinds00001FPennsylvania#0150c2BFBradford000021NewCaledonia#NC.NO.TO0c2TOTouho000027NewWorld#750c2STSao Tome and Principe000017Turkey#200c2DNDenizli000030USANorthEastRegion#110c2DCDistrict of Columbia00001BPuertoRico#930c2MRMaricao000029WorldwithCountries#230c2USUnited States00001DNewZealand#F90c2TKITaranaki00001EEgypt_346255#080c2DMDamietta00001FAzerbaijan#180c2FUF&uuml;zuli00001DSanMarino#070c2SMSan Marino00001DAsiaGeorgia#010c2ABAbkhazia00001ABelgium#010c2ANAntwerpen000016Mali#ML.KD0c2KDKidal000017Guinea#GN.ML0c2MLMali000018Tunisia#TN.BJ0c2BJBeja00001AIran#IR.KZ0c2KZKhuzestan000023Thailand#TH.KP0c2KPKamphaeng Phet000028Eritrea#ER.SK0c2SKSemenawi Keyih Bahri00001EEngland#0360c2WAWarwickshire00001BTennessee#1370c2PIPickett00001COklahoma#0890c2MTMcCurtain000016Iowa#1410c2OBO'Brien00001BWisconsin#0310c2DUDouglas00001BTexas#4770c2WASWashington000013Asia#0160c2IRIran00001AIndiana#0930c2LWLawrence000018NewYork#0650c2ONOneida00001ENorthCarolina#1330c2ONOnslow00001AVirginia#0350c2CLCarroll000017Georgia#2850c2TRTroup00001AKansas#0870c2JFJefferson00001FSouthCarolina#0590c2LULaurens00001BIllinois#1230c2MNMarshall00001CMissouri#0430c2CHChristian000022WorldwithCountries#1820c2PWPalau00001CNorthDakota#0570c2MEMercer000017Texas#1150c2DAWDawson000014Ohio#0770c2HUHuron00001CNewMexico#0490c2SFSanta Fe000019Nebraska#0470c2DSDawson000023NewCaledonia#NC.SU.MO0c2MOMoindou000026Manitoba#CA.MB.PM0c2PMPembina Region000019NewWorld#760c2SNSenegal00001FTurkey#210c2DYDiyarbak&#305;r000025WorldwithCountries#240c2GLGreenland00001CEgypt_346255#090c2FYFaiyum00002AAzerbaijan#190c2GDG&#601;d&#601;b&#601;y000019Ukraine#010c2CKCherkasy000020SanMarino#080c2MGMontegiardino00001BAsiaGeorgia#020c2AJAdjara000018Belgium#020c2HAHainaut00001BEurope2#EU.BE0c2BEBelgium00001BAlgeria#DZ.EO0c2EOEl Oued000019Jordan#JO.MD0c2MDMadaba000023CentralAmerica2#CE.JM0c2JMJamaica00001ETanzania#TZ.SH0c2SHShinyanga000034PapuaNewGuinea#PG.NC0c2NCNational Capital District00001EUzbekistan#UZ.AN0c2ANAndijon00001AHongKong#HK.NO0c2NONorth00001AMicronesia#FM.YA0c2YAYap000018Serbia#RS.PI0c2PIPirot000018Guinea#GN.MM0c2MMMamou00001ALibya#LY.MI0c2MIMisratah00001FBotswana#BW.NW0c2NWNorth West00001BVietnam#VN.NA0c2NANghe An00001CThailand#TH.LG0c2LGLampang000018Arkansas#0410c2DEDesha00001BWestVirginia#0690c2OHOhio000018Colorado#0490c2GRGrand000019Montana#0190c2DADaniels00001CSouthDakota#0870c2MCMcCook000016Alabama#0650c2HAHale00001FVirginia#0360c2CCCharles City00001AMissouri#2250c2WBWebster000015Utah#0010c2BVBeaver000019Texas#2970c2LIVLive Oak00001CLouisiana#0410c2FRFranklin000022Virginia#7600c2RIRichmond (City)000018Georgia#1050c2ELElbert00002DWorldwithCountries#1830c2PGPapua New Guinea00001BMinnesota#1570c2WBWabasha000018Kentucky#1410c2LOLogan00001AMichigan#1510c2SNSanilac000016Florida#0690c2LALake00001CMississippi#0510c2HOHolmes00001CPennsylvania#0170c2BUBucks000035NewfoundlandandLabrador#CA.NF.CE0c2CECentral Region00001BNewWorld#770c2SCSeycelles000016Turkey#220c2EDEdirne00001BPuertoRico#950c2MBMaunabo000020SaintLucia#010c2ARAnse-la-Raye000025WorldwithCountries#250c2ARArgentina00001CNewZealand#G10c2WKOWaikato00001DEgypt_346255#100c2GHGharbia000023Azerbaijan#200c2GAG&#601;nc&#601;00001AUkraine#020c2CHChernihiv00001DSanMarino#090c2SESerravalle00001AAsiaGeorgia#030c2GUGuria000016Belgium#030c2LILiege000022SouthAfrica#020c2NLKwaZulu-Natal000023Hungary#010c2BKB&aacute;cs-Kiskun00001ECambodia#KH.PY0c2PYPrey Veng000024CapeVerde#CV.RG0c2RGRibeira Grande00001DCameroon#CM.AD0c2ADAdamaoua00001EKazakhstan#KZ.ZM0c2ZMZhambyl00001DBurkinaFaso#BF.HO0c2HOHouet00001CSaudiArabia#SA.AS0c2ASAsir00002ECentralAfricanRepublic#CF.OP0c2OPOuham-Pende000020PapuaNewGuinea#PG.MN0c2MNManus00001ABurundi#BI.RT0c2RTRutana000026Sudan#SD.GD0c2GDAl Qadarif (Gedarif)000026Philippines#PH.DO0c2DODavao Oriental00001BRussia#RU.NG0c2NGNovgorod000019Libya#LY.MJ0c2MJAl Marj000018China2#CN.JL0c2JLJilin00001DVietnam#VN.NB0c2NBNinh Binh00001AThailand#TH.KR0c2KRKrabi00001BEngland#0380c2WIWiltshire000018Tennessee#1390c2POPolk000017France#0020c2ALAlsace00001BOklahoma#0910c2MLMcIntosh000016Iowa#1430c2OSOsceola000018Wisconsin#0330c2DNDunn000015Texas#4790c2WEBWebb000019Indiana#0950c2MAMadison00001ANewYork#0670c2OOOnondaga00001ENorthCarolina#1350c2OROrange00001CVirginia#0370c2CHCharlotte000018Georgia#2870c2TUTurner000017Kansas#0890c2JWJewell00001BSouthCarolina#0610c2LELee000018Illinois#1250c2MOMason000018Missouri#0450c2CKClark000022WorldwithCountries#1840c2WSSamoa00001CNorthDakota#0590c2MOMorton00001BTexas#1170c2DESDeaf Smith000023Virginia#5800c2CICovington (City)000016Ohio#0790c2JAJackson00001ANewMexico#0510c2SISierra000018Nebraska#0490c2DEDeuel000020USASouthWestRegion#490c2UTUtah00001ENewWorld#780c2SLSierra Leone000020Turkey#230c2EGElaz&#305;&#287;00001BSaintLucia#020c2DADauphin000023WorldwithCountries#260c2BOBolivia00001FNewZealand#G20c2WGNWellington00001AEgypt_346255#110c2GZGiza00001CAzerbaijan#210c2GRGoranboy00001BUkraine#030c2CVChernivtsi00001AGreenland#010c2NGAvannaa00001CAsiaGeorgia#040c2IMImereti000018Belgium#040c2LMLimburg00001FSouthAfrica#030c2FSFree State000018Hungary#020c2BABaranya000034NorthWestTerritories#CA.NT.MV0c2MVMackenzie Valley00002AFrenchGuiana#GL.SL.AY0c2AYAwala Yalimapo000028Mauritius#MU.RR0c2RRRiviere Du Rempart00001CGhana#GH.UW0c2UWUpper West00001CEurope2#EU.BG0c2BGBulgaria000022BurkinaFaso#BF.GZ0c2GZGanzourgou00001BZambia#ZM.NO0c2NONorthern00001FMongolia#MN.SB0c2SBSukhbaatar000022CoteDivoire#CI.WR0c2WRWorodougou00001BRussia#RU.MR0c2MRMordovia00001BMalawi#MW.CK0c2CKChikwawa000017Arkansas#0430c2DRDrew000020England#0390c2WOWorcestershire000020WestVirginia#0710c2PEPendleton00001AFrance#0030c2AQAquitaine00001BColorado#0510c2GUGunnison000018Montana#0210c2DWDawson00001FSouthDakota#0890c2MPMcPherson000017Alabama#0670c2HEHenry000014Asia#0190c2JPJapan000018Missouri#2270c2WOWorth000018Utah#0030c2BEBox Elder000016Texas#2990c2LANLlano000019Louisiana#0430c2GRGrant000019Georgia#1070c2EMEmanuel00002CWorldwithCountries#1850c2SBSolomon Islands00001AMinnesota#1590c2WDWadena000017Kentucky#1430c2LYLyon00001EMichigan#1530c2SHSchoolcraft000015Florida#0710c2LELee00001FMississippi#0530c2HUHumphreys00001DPennsylvania#0190c2BTButler00002BMadagascarRegions#MG.AV.AG0c2AGAnalamanga000019NewWorld#790c2SOSomalia000018Turkey#240c2ENErzincan000021PuertoRico#970c2MGMayag&uuml;ez00001CSaintLucia#030c2CACastries000022WorldwithCountries#270c2BRBrazil00001FNewZealand#G30c2WTCWest Coast00001EEgypt_346255#120c2ISIsmailia000026Azerbaijan#220c2GYG&ouml;y&ccedil;ay00001FUkraine#040c2DPDnipropetrovsk000017Greenland#020c2EGTunu00001CAsiaGeorgia#050c2KAKakheti00001BBelgium#050c2LULuxembourg000016Greece#010c2ATAttica000024Hungary#030c2BEB&eacute;k&eacute;s000025PolandCounties#PL.PM.SL0c2PSLSlupsk00001CBurkinaFaso#BF.ZR0c2ZRZiro00001FQatar#QA.GH0c2GHAl Ghuwariyah00001AEritrea#ER.AN0c2ANAnseba00001DUK7#UK.NI0c2NINorth Ireland000019Russia#RU.MS0c2MSMoscow00001ATunisia#TN.TO0c2TOTozeur000017Uganda#UG.GL0c2GLGulu000022FranceDepartment#FR.IS0c2ISIsere00001CVietnam#VN.ND0c2NDNam Dinh00001APalau#PW.AM0c2AMAimeliik00001EEngland#0400c2NYN. Yorkshire00001ATennessee#1410c2PUPutnam000019France#0040c2AUAuvergne000018Oklahoma#0930c2MAMajor000013Iowa#1450c2PAPage00001EWisconsin#0350c2ECEau Claire000018Texas#4810c2WHAWharton000018Indiana#0970c2MRMarion000019NewYork#0690c2OTOntario00001FNorthCarolina#1370c2PAPamlico000018Georgia#2890c2TWTwiggs000018Kansas#0910c2JOJohnson000021SouthCarolina#0630c2LXLexington000019Illinois#1270c2MCMassac000017Missouri#0470c2CYClay000022WorldwithCountries#1860c2TOTonga00001FNorthDakota#0610c2MUMountrail000016Texas#1190c2DELDelta000018Ohio#0810c2JEJefferson00001BNewMexico#0530c2SOSocorro000018Nebraska#0510c2DIDixon00002AMadagascarRegions#MG.MA.BE0c2BEBetsiboka00003APrinceEdwardIsland#CA.PE.NC0c2NCNorth Cape Coastal Drive000027Manitoba#CA.MB.PR0c2PRParkland Region00002BMadagascarRegions#MG.TM.AI0c2AIAtsinanana00001ENewWorld#800c2ZASouth Africa000017Turkey#250c2EMErzurum00001CSaintLucia#040c2CHChoiseul000021WorldwithCountries#280c2CLChile000016USA#LA0c2LALouisiana000024Egypt_346255#130c2KSKafr el-Sheikh000022Azerbaijan#230c2HAHac&#305;qabul000018Ukraine#050c2DTDonetsk00001ALatvia#010c2AIAizkraukle000018Greenland#030c2VGKitaa000021AsiaGeorgia#060c2KKKvemo Kartli000019Haiti#030c2NONord-Ouest000016Belgium#060c2NANamur00001EGreece#020c2CGCentral Greece000021SouthAfrica#050c2ECEastern Cape000033Hungary#040c2BOBorsod-Aba&uacute;j-Zempl&eacute;n000017Nigeria#NG.IM0c2IMImo00001BTanzania#TZ.RV0c2RVRuvuma00001BTanzania#TZ.TB0c2TBTabora00001CMacedonia#MK.ET0c2ETTetovo00001DSerbia#RS.PM0c2PMPomoravlje00001BBurundi#BI.BB0c2BBBubanza000020Tunisia#TN.SZ0c2SZSidi Bou Zid00001APalau#PW.SO0c2SOSonsorol000018Iran#IR.MK0c2MKMarkazi000018Palau#PW.AN0c2ANAngaur00001EPennsylvania#0210c2CACambria00001BArkansas#0450c2FAFaulkner00001FEngland#0410c2TWTyne And Wear000020WestVirginia#0730c2PLPleasants000019France#0050c2BRBretagne00001BColorado#0530c2HIHinsdale00001CMontana#0230c2DLDeer Lodge00001ESouthDakota#0910c2MAMarshall000019Alabama#0690c2HOHouston000019Asia#0210c2KZKazakhstan000019Missouri#2290c2WRWright000022Alaska#1300c2KGKetchikan Gateway000014Utah#0050c2CACache000017Texas#3010c2LOVLoving00001ALouisiana#0450c2IBIberia000017Georgia#1090c2EVEvans000023WorldwithCountries#1870c2TVTuvalu00001AMinnesota#1610c2WSWaseca00001CKentucky#1450c2MKMcCracken00001DMichigan#1550c2SWShiawassee000016Florida#0730c2LOLeon00001FMississippi#0550c2ISIssaquena000017NewWorld#810c2SDSudan00001ETurkey#260c2ESEski&#351;ehir000018PuertoRico#990c2MCMoca00001BSaintLucia#050c2DEDennery000024WorldwithCountries#290c2COColombia00001CEgypt_346255#140c2MTMatruh000024Azerbaijan#240c2IM&#304;mi&#351;li000020Ukraine#060c2IFIvano-Frankivsk00001CLatvia#020c2ALAl&#363;ksne000026AsiaGeorgia#070c2MMMtskheta-Mtianeti000020Belgium#070c2OVOost-Vlaanderen000021Greece#030c2CMCentral Macedonia00001CSouthAfrica#060c2GTGauteng000019Hungary#050c2BUBudapest000029PolandCounties#PL.PK.TM0c2PTMTarnobrzeg000018Nauru#NR.ME0c2MEMeneng00001BEurope2#EU.UA0c2UAUkraine00001AEurope2#EU.TK0c2TKTurkey00001BEurope2#EU.AT0c2ATAustria00001BAlgeria#DZ.ET0c2ETEl Tarf000021PapuaNewGuinea#PG.MR0c2MRMorobe000025Philippines#PH.DS0c2DSDavao del Sur00002FHungaryRegions#HU.SG0c2SGSouthern Great Plain000018England#0420c2MSMersey000018Tennessee#1430c2RHRhea00001BMaryland#0010c2ALAllegany00001AFrance#0060c2BUBourgogne00001BOklahoma#0950c2MRMarshall000018Iowa#1470c2PLPalo Alto00001CWisconsin#0370c2FLFlorence000018Texas#4830c2WHEWheeler00001CAsia#0220c2KPKorea (north)00001AIndiana#0990c2MSMarshall000018NewYork#0710c2OROrange000022NorthCarolina#1390c2PSPasquotank00001FVirginia#0410c2CSChesterfield000017Georgia#2910c2UNUnion000017Kansas#0930c2KEKearny000021SouthCarolina#0650c2MCMcCormick000019Illinois#1290c2MDMenard00001AMissouri#0490c2CIClinton000024WorldwithCountries#1880c2VUVanuatu00001CNorthDakota#0630c2NENelson000017Texas#1210c2DENDenton000013Ohio#0830c2KNKnox000018NewMexico#0550c2TATaos000018Nebraska#0530c2DODodge00001BNewWorld#820c2SZSwaziland000023USANorthEastRegion#180c2INIndiana00001ESaintLucia#060c2GIGros Islet000023WorldwithCountries#300c2ECEcuador00001BEgypt_346255#150c2MNMinya00002CAzerbaijan#250c2IS&#304;smay&#305;ll&#305;000018Ukraine#070c2KKKharkiv000015Latvia#030c2BLBalvi000036AsiaGeorgia#080c2RLRacha-Lechkhumi and Kvemo Svaneti000020Belgium#080c2WVWest-Vlaanderen000015Greece#040c2CRCrete00001FSouthAfrica#070c2MPMpumalanga000020Hungary#060c2CSCsongr&aacute;d000025PolandCounties#PL.MA.TM0c2MTMTarnow00001AMali#ML.KK0c2KKKoulikoro000022Uzbekistan#UZ.SU0c2SUSurxondaryo000024Uzbekistan#UZ.TK0c2TKTashkent City000018Panama#PA.CC0c2CCCocle000026PapuaNewGuinea#PG.NI0c2NINew Ireland00001ABurundi#BI.RY0c2RYRuyigi00001FMacedonia#MK.GB0c2GBGazi Baba00001BRussia#RU.OB0c2OBOrenburg000018Malawi#MW.DE0c2DEDedza00002CFranceDepartment#FR.IV0c2IVIlle et Vilaine00001EPennsylvania#0230c2CMCameron00001BArkansas#0470c2FRFranklin00001EEngland#0430c2GMG.Manchester000021WestVirginia#0750c2POPocahontas000017France#0070c2CECentre00001BColorado#0550c2HUHuerfano000018Montana#0250c2FAFallon00001BSouthDakota#0930c2MEMeade000019Alabama#0710c2JAJackson00001CAsia#0230c2KRKorea (south)000015Utah#0070c2CRCarbon000018Texas#3030c2LUBLubbock00001DLouisiana#0470c2IEIberville000018Georgia#1110c2FAFannin00002AWorldwithCountries#1890c2NCNew Caledonia00001EMinnesota#1630c2WAWashington00001BKentucky#1470c2MRMcCreary00001AMichigan#1570c2TUTuscola000016Florida#0750c2LVLevy00001EMississippi#0570c2ITItawamba00001ANewWorld#830c2TZTanzania000017Turkey#280c2GIGiresun00001BSaintLucia#070c2LBLaborie00002CWorldwithCountries#310c2FKFalkland Islands00001DEgypt_346255#160c2MFMonufia00002BAzerbaijan#260c2KAK&#601;lb&#601;c&#601;r000018Ukraine#080c2KSKherson000016Latvia#040c2BUBauska000024NorthEuropeanRegion#010c2DKDenmark000027AsiaGeorgia#090c2SJSamtskhe-Javakheti000019Haiti#060c2ARArtibonite00001FBelgium#090c2BWBrabant Wallon000029Greece#050c2EMEast Macedonia and Thrace000022SouthAfrica#080c2NCNorthern Cape00001CThailand#TH.LN0c2LNLamphun00001DThailand#TH.MD0c2MDMukdahan000024CapeVerde#CV.SC0c2SCSanta Catarina000023SaoTomeandPrincipe#ST.CU0c2CUCaue00001BKyrgyzstan#KG.CU0c2CUChuy00001CLesotho#LS.MF0c2MFMefeteng00001FZimbabwe#ZW.MA0c2MAManicaland000015Benin#BJ.ZO0c2ZOZou00001BIran#IR.MN0c2MNMazandaran00001CEngland#0440c2WMW.Midlands000019Tennessee#1450c2RORoane00001FMaryland#0030c2ANAnne Arundel000022France#0080c2CHChampagne-Ardenne000018Oklahoma#0970c2MYMayes000017Iowa#1490c2PYPlymouth00001FWisconsin#0390c2FDFond du Lac000018Texas#4850c2WICWichita000018Indiana#1010c2MTMartin000019NewYork#0730c2OLOrleans00001ENorthCarolina#1410c2PEPender000019Virginia#0430c2CKClarke000017Georgia#2930c2UPUpson000018Kansas#0950c2KMKingman00001ESouthCarolina#0670c2MAMarion000019Illinois#1310c2MRMercer000017Missouri#0510c2CLCole000024WorldwithCountries#1900c2BABahrain00001CNorthDakota#0650c2OLOliver000017Texas#1230c2DEWDewitt000013Ohio#0850c2LALake00001CNewMexico#0570c2TRTorrance00001ANebraska#0550c2DUDouglas00001DHungary#080c2FEFej&eacute;r000016NewWorld#840c2TGTogo00001ASaintLucia#080c2MIMicoud000029WorldwithCountries#320c2GFFrench Guiana000020Egypt_346255#170c2NVNew Valley000026Azerbaijan#270c2KUK&uuml;rd&#601;mir00001DUkraine#090c2KMKhmelnytskyi00001ALatvia#050c2CEC&#275;sis000024NorthEuropeanRegion#020c2EEEstonia000021AsiaGeorgia#100c2SKShida Kartli000015Haiti#070c2CECentre000016Greece#060c2EPEpirus00001CSouthAfrica#090c2LPLimpopo000024PolandCounties#PL.MZ.RM0c2MRMRadom000024SierraLeone#SL.NO.PL0c2PLPort Loko000017Palau#PW.AR0c2ARAirai00001EOman#OM.DA0c2DAAd Dakhiliyah000022CapeVerde#CV.SD0c2SDSao Domingos000029BurkinaFaso#BF.ZW0c2ZWZoundw&eacute;ogo000030DemocraticRepublicoftheCongo#CD.MN0c2MNManiema00001ASomalia#SO.NU0c2NUNugaal00001CNepal#NP.SA0c2SASagarmatha000027Philippines#PH.DV0c2DVDavao del Norte00001BRussia#RU.NN0c2NNNenetsia000018Libya#LY.MQ0c2MQMurzuq00001AChina2#CN.JS0c2JSJiangsu00001DPennsylvania#0250c2CRCarbon000019Arkansas#0490c2FUFulton000019England#0450c2RNRutland00001EWestVirginia#0770c2PRPreston000016France#0090c2COCorse00001AColorado#0570c2JAJackson000018Montana#0270c2FEFergus00001ESouthDakota#0950c2MLMellette00001BAlabama#0730c2JEJefferson00002BIndia#0010c2ANAndaman and Nicobar Islands000019Asia#0250c2KGKyrgyzstan000016Utah#0090c2DADaggett000015Texas#3050c2LYNLynn00001BLouisiana#0490c2JAJackson000019Georgia#1130c2FYFayette000021WorldwithCountries#1910c2IZIraq00001CMinnesota#1650c2WTWatonwan000019Kentucky#1490c2MLMcLean00001CMichigan#1590c2VBVan Buren000019Florida#0770c2LILiberty00001DMississippi#0590c2JAJackson000029NewCaledonia#NC.SU.NO0c2NONoum&eacute;a00002DMadagascarRegions#MG.TM.AN0c2ANAnalanjirofo000027Hungary#090c2GMGy&#337;r-Moson-Sopron000019NewWorld#850c2TNTunisia000024USANorthEastRegion#210c2KYKentucky000026DominicanRepublic#010c2AZ&Aacute;zua000024SaintLucia#090c2SOSoufri&egrave;re000022WorldwithCountries#330c2GYGuyana000021Egypt_346255#180c2NSNorth Sinai000025Azerbaijan#280c2LCLa&ccedil;&#305;n00001BUkraine#100c2KHKirovohrad00001ALatvia#060c2DADaugavpils000024NorthEuropeanRegion#030c2FIFinland00002BAsiaGeorgia#110c2SZSamegrelo-Zemo Svaneti00001EGreece#070c2IOIonian Islands00001FSouthAfrica#100c2NWNorth West000013Japan#10c2AIAichi000021Lesotho#LS.MH0c2MHMohale's Hoek000028Zimbabwe#ZW.MC0c2MCMashonaland Central000020Russia#RU.NO0c2NONorth Ossetia000019Tunisia#TN.TU0c2TUTunis00001DMalawi#MW.CR0c2CRChiradzulu00001FEngland#0460c2IWIsle of Wight00001DTennessee#1470c2RBRobertson00001CMaryland#0050c2BLBaltimore000025France#0100c2FRFranche-Comt&eacute;000019Oklahoma#0990c2MUMurray000019Iowa#1510c2PCPocahontas00001AWisconsin#0410c2FOForest00001ATexas#4870c2WIBWilbarger00001EIndia#0020c2APAndhra Pradesh00001AWashington#0010c2ADAdams000013Asia#0260c2LALaos000017Indiana#1030c2MIMiami000018NewYork#0750c2OSOswego000022NorthCarolina#1430c2PRPerquimans000018Virginia#0450c2CGCraig000018Georgia#2950c2WKWalker000016Kansas#0970c2KWKiowa000020SouthCarolina#0690c2MRMarlboro000019Illinois#1330c2MEMonroe000019Missouri#0530c2COCooper000023WorldwithCountries#1920c2IEIsrael00001DNorthDakota#0670c2PEPembina000018Texas#1250c2DICDickens000017Ohio#0870c2LWLawrence000019NewMexico#0590c2UNUnion000018Nebraska#0570c2DNDundy00002AYukonTerritory#CA.YT.ST0c2STSilver Trail000030MadagascarRegions#MG.TM.AO0c2AOAlaotra-Mangoro000023Hungary#100c2HBHajd&uacute;-Bihar000018NewWorld#860c2UGUganda000015Turkey#310c2HTHatay000023DominicanRepublic#020c2BRBahoruco00001ESaintLucia#100c2VFVieux Fort000024WorldwithCountries#340c2PYParaguay000020Afghanistan#010c2BDSBadakhshan00001FEgypt_346255#190c2PSPort Said000026Azerbaijan#290c2LNL&#601;nk&#601;ran000017Ukraine#110c2KRCrimea000022Latvia#070c2DGVDaugavpils (city)000024NorthEuropeanRegion#040c2ISIceland00001CAsiaGeorgia#120c2TBTbilisi000013Haiti#090c2NDNord00001CGreece#080c2NANorth Aegean000021SouthAfrica#110c2WCWestern Cape000013Japan#20c2AKAkita000023Pakistan#PK.NA0c2NANorthern Areas000020CapeVerde#CV.SF0c2SFSao Filipe00001ANigeria#NG.JI0c2JIJigawa000017Jordan#JO.MN0c2MNMaan000020Zambia#ZM.NW0c2NWNorth-Western000025CentralAmerica2#CE.LC0c2LCSt. Lucia000018Laos#LA.SL0c2SLSalavan00001DPennsylvania#0270c2CECentre00001AArkansas#0510c2GAGarland00001AEngland#0470c2WSW.Sussex00001DWestVirginia#0790c2PUPutnam00001EFrance#0110c2LLIle-de-France00001CColorado#0590c2JEJefferson00001AMontana#0290c2FLFlathead00001BSouthDakota#0970c2MIMiner000017Alabama#0750c2LALamar000021India#0030c2ARArunachal Pradesh000014Utah#0110c2DVDavis00001ATexas#3070c2MCUMcCulloch00001DLouisiana#0510c2JEJefferson000021Virginia#7700c2RORoanoke (City)000017Georgia#1150c2FLFloyd000023WorldwithCountries#1930c2JOJordan00001AMinnesota#1670c2WLWilkin00001CNevada#5100c2CACarson City00001AKentucky#1510c2MIMadison00001CMichigan#1610c2WAWashtenaw000019Florida#0790c2MSMadison00001CMississippi#0610c2JSJasper000016Hungary#110c2HEHeves000020NewWorld#870c2WAWestern Sahara000016Turkey#320c2ICMersin000021USANorthEastRegion#230c2MEMaine000023DominicanRepublic#030c2BHBarahona00001BSaintLucia#110c2PRPraslin000020WorldwithCountries#350c2PEPeru00001DAfghanistan#020c2BDGBadghis00001EEgypt_346255#200c2QAQalyubia00002DAzerbaijan#300c2LAL&#601;nk&#601;ran (City)000016Latvia#080c2DODobele000024NorthEuropeanRegion#050c2IEIreland000017Haiti#100c2NENord-Est00001BArmenia#010c2AGAragatsotn00001BGreece#090c2PEPeloponnese000014Japan#30c2AOAomori000021Thailand#TH.MH0c2MHMae Hong Son00001FCambodia#KH.RO0c2RORatanakiri00001CBurkinaFaso#BF.IO0c2IOIoba00001BPanama#PA.CH0c2CHChiriqui000031CentralAmerica2#CE.KN0c2KNSt. Kitts &amp; Nevis00001BAngola#AO.BG0c2BGBenguela000018Uganda#UG.YU0c2YUYumbe000025Zimbabwe#ZW.ME0c2MEMashonaland East00001AMalawi#MW.CT0c2CTChitipa00001DEngland#0480c2EYE.Yorkshire00001ETennessee#1490c2RURutherford000025France#0120c2LALanguedoc-Roussillon00001BOklahoma#1010c2MKMuskogee000013Iowa#1530c2POPolk000019Wisconsin#0430c2GRGrant000018Texas#4890c2WIAWillacy000015India#0040c2ASAssam00001BWashington#0030c2ASAsotin000017Asia#0280c2MYMalaysia000018Indiana#1050c2MOMonroe000018NewYork#0770c2OGOtsego00001ENorthCarolina#1450c2POPerson00001BVirginia#0470c2CUCulpeper000018Georgia#2970c2WNWalton000018Kansas#0990c2LBLabette000020SouthCarolina#0710c2NBNewberry00001DIllinois#1350c2MYMontgomery00001BMissouri#0550c2CFCrawford000023WorldwithCountries#1940c2KUKuwait00001CNorthDakota#0690c2PIPierce000017Texas#1270c2DIMDimmit00001DDenmark#0010c2AR&Aring;rhus000022Virginia#5900c2DADanville (City)000016Ohio#0890c2LILicking00001CNewMexico#0610c2VAValencia00001BNebraska#0590c2FIFillmore000026YukonTerritory#CA.YT.CA0c2CACampbell000029Hungary#120c2KEKom&aacute;rom-Esztergom000018NewWorld#880c2ZMZambia000017Turkey#330c2IPIsparta000024USANorthEastRegion#240c2MDMaryland000029DominicanRepublic#040c2DADajab&oacute;n000016UAE#010c2AZAbu Dhabi000024WorldwithCountries#360c2SRSuriname000013USA#KS0c2KSKansas00001DAfghanistan#030c2BGLBaghlan00001AEgypt_346255#210c2QEQena000019Azerbaijan#310c2LELerik00001CUkraine#130c2KVKiev Oblast000017Latvia#090c2GUGulbene000023NorthEuropeanRegion#060c2LVLatvia000014Haiti#110c2OUOuest000017Armenia#020c2ARArarat00001CGreece#100c2SASouth Aegean000026PolandCounties#PL.WN.OM0c2WOMOlsztyn000013Japan#40c2CHChiba00001BSriLanka#LK.JA0c2JAJaffna00001ELesotho#LS.MK0c2MKMokhotlong000016Nepal#NP.SE0c2SESeti000023PapuaNewGuinea#PG.NO0c2NONorthern00001CMongolia#MN.SL0c2SLSelenge00001BTanzania#TZ.AS0c2ASArusha00001EPennsylvania#0290c2CHChester000018Arkansas#0530c2GRGrant00001DEngland#0490c2SYS.Yorkshire00001EWestVirginia#0810c2RARaleigh000019France#0130c2LILimousin000018Colorado#0610c2KIKiowa00001AMontana#0310c2GAGallatin00001FSouthDakota#0990c2MNMinnehaha00001CAlabama#0770c2LULauderdale000015India#0050c2BIBihar000017Utah#0130c2DUDuchesne000019Texas#3090c2MCLMcLennan000023Louisiana#0530c2JDJefferson Davis000019Georgia#1170c2FOForsyth000024WorldwithCountries#1950c2LBLebanon00001AMinnesota#1690c2WIWinona00001ADenmark#0020c2BOBornholm00001BKentucky#1530c2MGMagoffin000018Michigan#1630c2WYWayne000019Florida#0810c2MNManatee00001FMississippi#0630c2JEJefferson000026MadagascarRegions#MG.MA.BO0c2BOBoeny00001ANewWorld#890c2ZWZimbabwe00001DTurkey#340c2IB&#304;stanbul000029USANorthEastRegion#250c2MAMassachusetts000012UAE#020c2AJAjman000023WorldwithCountries#370c2UYUruguay00001ECentralAmerica#010c2BHBelize00001DEgypt_346255#220c2RSRed Sea000020Azerbaijan#320c2MAMasall&#305;000018Ukraine#140c2LHLuhansk00001ELatvia#100c2JKJ&#275;kabpils000026NorthEuropeanRegion#070c2LTLithuania000012Haiti#120c2SDSud000018Armenia#030c2AVArmavir000018Greece#110c2THThessaly000013Japan#50c2EHEhime00001AChina2#CN.JX0c2JXJiangxi00001FEurope2#EU.CH0c2CHSwitzerland000016Angola#AO.BI0c2BIBie00001BBurundi#BI.CA0c2CACankuzo00001ERussia#RU.NS0c2NSNovosibirsk000020CoteDivoire#CI.FR0c2FRFromager000019Uganda#UG.IB0c2IBIbanda000017Libya#LY.NL0c2NLNalut00001DEngland#0500c2WYW.Yorkshire000019Tennessee#1510c2SCScott00001AMaryland#0090c2CACalvert000019France#0140c2LOLorraine000018Oklahoma#1030c2NONoble00001CIowa#1550c2PTPottawattamie000019Wisconsin#0450c2GEGreen00001BTexas#4910c2WIMWilliamson00001BWashington#0050c2BEBenton000017Asia#0300c2MNMongolia00001CIndiana#1070c2MNMontgomery000018NewYork#0790c2PUPutnam00001CNorthCarolina#1470c2PIPitt00001DVirginia#0490c2CMCumberland000016Georgia#2990c2WAWare000015Kansas#1010c2LELane00001ESouthCarolina#0730c2OCOconee000019Illinois#1370c2MGMorgan000017Missouri#0570c2DDDade000021WorldwithCountries#1960c2OMOman00001CNorthDakota#0710c2RARamsey000017Texas#1290c2DONDonley00001FDenmark#0030c2FRFrederiksberg000014Ohio#0910c2LOLogan00001BNebraska#0610c2FRFranklin000025Hungary#140c2NON&oacute;gr&aacute;d000018NewWorld#900c2GMGambia00001ATurkey#350c2IZ&#304;zmir000024USANorthEastRegion#260c2MIMichigan000021DominicanRepublic#060c2DUDuarte000012UAE#030c2DUDubai000025WorldwithCountries#380c2VEVenezuela00001AUSA#MA0c2MAMassachusetts000022CentralAmerica#020c2CSCosta Rica00001CAfghanistan#050c2BAMBamyan00001DEgypt_346255#230c2SQSharqia00002AAzerbaijan#330c2MIMing&#601;&ccedil;evir000015Ukraine#150c2LVLviv000017Latvia#110c2JLJelgava000023NorthEuropeanRegion#080c2NONorway000016Haiti#130c2SESud-Est00001CCzechRepublic#520c2PRPraha00001CArmenia#040c2GRGegharkunik00001BGreece#120c2WGWest Greece000013Japan#60c2FUFukui000018Thailand#TH.NA0c2NANan000023Madagascar#MG.FI0c2FIFianarantsoa00001BMacedonia#MK.ZA0c2ZAZajas000025Mississippi#0650c2JDJefferson Davis00001EPennsylvania#0310c2CIClarion000019Arkansas#0550c2GEGreene00001FWestVirginia#0830c2RNRandolph00002CFrance#0150c2MIMidi-Pyr&eacute;n&eacute;es00001DColorado#0630c2KCKit Carson00001AMontana#0330c2GRGarfield00001BSouthDakota#1010c2MOMoody00001AAlabama#0790c2LWLawrence00001CIndia#0070c2CAChhattisgarh000014Asia#0310c2NPNepal000014Utah#0150c2EMEmery000019Texas#3110c2MCMMcMullen00001DLouisiana#0550c2LALafayette00001AGeorgia#1190c2FRFranklin000022WorldwithCountries#1970c2QAQatar00001AMinnesota#1710c2WRWright00001FDenmark#0040c2FEFrederiksborg000019Kentucky#1550c2MHMarion00001AMichigan#1650c2WEWexford000018Florida#0830c2MRMarion000026NewCaledonia#NC.SU.PA0c2PAPa&iuml;ta000017NewWorld#910c2CGCongo000015UAE#040c2FUFujairah000023WorldwithCountries#390c2DZAlgeria000023CentralAmerica#030c2ESEl Salvador00001BAfghanistan#060c2FRAFarah00001BEgypt_346255#240c2SHSohag000021Azerbaijan#340c2NANaftalan city000019Ukraine#160c2MYMykolaiv00001FLatvia#120c2JELJelgava (city)00002BNorthEuropeanRegion#090c2UKUnited Kingdom000019Haiti#140c2GAGrand'Anse000017Armenia#050c2KTKotayk00001EGreece#130c2WMWest Macedonia000027PolandCounties#PL.ZP.SM0c2ZSMSzczecin000015Japan#70c2FKFukuoka00001BTunisia#TN.BZ0c2BZBizerte000021FranceDepartment#FR.JU0c2JUJura00002DFranceDepartment#FR.LA0c2LALoire Atlantique000025Thailand#TH.NB0c2NBNong Bua Lam Phu000022Europe2#EU.UK0c2UKUnited Kingdom000020Europe2#EU.VA0c2VAVatican City00001ECambodia#KH.SI0c2SISiem Reap000019Ghana#GH.WP0c2WPWestern000032DemocraticRepublicoftheCongo#CD.NK0c2NKNord-Kivu000019Namibia#NA.KA0c2KAKaras00001ANigeria#NG.KD0c2KDKaduna00001BComoros #KM.MO0c2MOMoheli000018Panama#PA.CL0c2CLColon00001ECoteDivoire#CI.ZA0c2ZAZanzan00001DZimbabwe#ZW.MI0c2MIMidlands000025Philippines#PH.ES0c2ESEastern Samar000024Burundi#BI.BM0c2BMBujumbura Mairie00001BNebraska#0630c2FOFrontier00001ETennessee#1530c2SQSequatchie00001BMaryland#0110c2CRCaroline000023France#0160c2NONord-Pas-de-Calais000019Oklahoma#1050c2NWNowata000018Iowa#1570c2PWPoweshiek00001EWisconsin#0470c2GLGreen Lake000017Texas#4930c2WILWilson00001BWashington#0070c2CHChelan000018Indiana#1090c2MGMorgan000018NewYork#0810c2QUQueens00001CNorthCarolina#1490c2PLPolk00001CVirginia#0510c2DIDickenson000018Georgia#3010c2WRWarren00001CKansas#1030c2LVLeavenworth000022SouthCarolina#0750c2OROrangeburg00001FVirginia#7750c2SASalem (City)00001BIllinois#1390c2MTMoultrie000019Missouri#0590c2DLDallas000029WorldwithCountries#1980c2SASaudi Arabia00001CNorthDakota#0730c2RNRansom000016Texas#1310c2DUVDuval000015Denmark#0050c2FYFyn000015Ohio#0930c2LRLorain000015Hungary#160c2PEPest00001BNewWorld#920c2MIMauritius000019Turkey#370c2KSKastamonu000024DominicanRepublic#080c2ESEspaillat00001BUAE#050c2RKRas Al Khaimah000022WorldwithCountries#400c2AOAngola000021CentralAmerica#040c2GTGuatemala00001CWorld#SA0c2SASouth America000018Andorra#020c2CACanillo00001CAfghanistan#070c2FYBFaryab000021Egypt_346255#250c2SSSouth Sinai00003DAzerbaijan#350c2NXNax&ccedil;&#305;van &#350;&#601;h&#601;r000017Ukraine#170c2ODOdessa000024Latvia#130c2JURJ&#363;rmala (city)000023NorthEuropeanRegion#100c2SESweden000015Haiti#150c2NINippes000015Armenia#060c2LOLori000024FrenchGuiana#GF.CY.IR0c2IRIracoubo000017Japan#80c2FSFukushima000019CapeVerde#CV.SL0c2SLSal000019Nigeria#NG.KE0c2KEKebbi000019Ghana#GH.EP0c2EPEastern000018Niger#NE.ZI0c2ZIZinder00001ATanzania#TZ.TN0c2TNTanga000029PapuaNewGuinea#PG.NS0c2NSNorth Solomons00001AAngola#AO.CB0c2CBCabinda000018Russia#RU.OL0c2OLOryal000018Uganda#UG.HO0c2HOHoima000017Malawi#MW.DO0c2DODowa000021Virginia#5950c2EMEmporia (City)000018Florida#0850c2MAMartin00001BMississippi#0670c2JOJones000021Pennsylvania#0330c2CLClearfield00001CArkansas#0570c2HEHempstead00001EWestVirginia#0850c2RIRitchie000020France#0170c2NRBasse-Normandie000017Colorado#0650c2LALake000019Montana#0350c2GCGlacier000020SouthDakota#1030c2PEPennington000015Alabama#0810c2LELee000017Asia#0330c2PKPakistan000017Utah#0170c2GAGarfield000018Texas#3130c2MADMadison00001BOceania#0010c2AUAustralia00001DLouisiana#0570c2LFLafourche000018Georgia#1210c2FUFulton000022WorldwithCountries#1990c2SYSyria000023Minnesota#1730c2YMYellow Medicine000027Denmark#0060c2KOK&oslash;benhavns Amt00001BKentucky#1570c2MSMarshall00002DSaskatchewan#CA.SK.SE0c2SESouth East Region000017Hungary#170c2SOSomogy00001DNewWorld#930c2AFAfghanistan000017Turkey#380c2KYKayseri000025Australia2#WA0c2WAWestern Australia000028DominicanRepublic#090c2INIndependencia000014UAE#060c2SHSharjah000021WorldwithCountries#410c2BJBenin000015USA#MD0c2MDMaryland000020CentralAmerica#050c2HOHonduras000017Andorra#030c2ENEncamp00001CAfghanistan#080c2GHAGhazni00001AEgypt_346255#260c2SZSuez000023Azerbaijan#360c2NENeft&ccedil;ala000018Ukraine#180c2PLPoltava00001DLatvia#140c2KRKr&#257;slava00001ABolivia#010c2HChuquisaca000017Armenia#070c2SHShirak00002CDistrictofColumbia#US.DC.NE0c2NENorth East000012Japan#90c2GIGifu000018Cameroon#CM.SU0c2SUSud000029FranceDepartment#FR.LC0c2LCLoir et Cher000019Syria#SY.LA0c2LALatakia00001ACambodia#KH.TA0c2TATakeo000020CapeVerde#CV.SM0c2SMSao Miguel000021Mauritius#MU.BL0c2BLBlack River00001FBurkinaFaso#BF.KA0c2KAKadiogo00001AAlgeria#DZ.GL0c2GLGuelma000021Angola#AO.CC0c2CCCuando Cubango00001DUzbekistan#UZ.BU0c2BUBuxoro00001DSerbia#RS.PZ0c2PZPrizrenski000017Russia#RU.OM0c2OMOmsk000018Libya#LY.MZ0c2MZMizdah000014Ohio#0950c2LULucas00001CFlorida#0860c2DAMiami-Dade000019Nebraska#0650c2FUFurnas00001ATennessee#1550c2SBSevier000014UK#0010c2ENEngland00001AMaryland#0130c2COCarroll000021France#0180c2PDPays de la Loire00001BOklahoma#1070c2OKOkfuskee000017Iowa#1590c2RGRinggold000018Wisconsin#0490c2IOIowa000018Texas#4950c2WINWinkler000015India#0100c2DEDelhi00001CWashington#0090c2CMClallam00001AAsia#0340c2PHPhilippines000018Indiana#1110c2NENewton00001CNewYork#0830c2RERensselaer000020NorthCarolina#1510c2RARandolph00001CVirginia#0530c2DNDinwiddie00001CGeorgia#3030c2WGWashington000018Kansas#1050c2LCLincoln00001FSouthCarolina#0770c2PIPickens000016Oceania#0020c2FJFiji000017Illinois#1410c2OGOgle00001AMissouri#0610c2DADaviess00002FWorldwithCountries#2000c2AEUnitedArabEmirates00001ENorthDakota#0750c2RVRenville000019Texas#1330c2EASEastland000022Denmark#0070c2KBK&oslash;benhavn00001FNewCaledonia#NC.NO.VO0c2VOVoh00002EHungary#180c2SZSzabolcs-Szatm&aacute;r-Bereg000019NewWorld#940c2AMArmenia00001FTurkey#390c2KLK&#305;rklareli000028DominicanRepublic#100c2ALLa Altagracia00001AUAE#070c2UQUmm Al Quwain000024WorldwithCountries#420c2BWBotswana000015USA#KY0c2KYKentucky000012USA#ME0c2MEMaine000021CentralAmerica#060c2NUNicaragua00001BAndorra#040c2LMLa Massana00001BAfghanistan#090c2GHOGhowr00001BEgypt_346255#270c2LXLuxor00001DAzerbaijan#370c2OGO&#287;uz000016Ukraine#190c2RVRivne00001CLatvia#150c2KUKuld&#299;ga00001ABolivia#020c2CCochabamba000017Armenia#080c2SUSyunik000026PolandCounties#PL.MZ.SM0c2MSMSiedlce000023FranceDepartment#FR.LD0c2LDLandes000021CapeVerde#CV.SN0c2SNSao Nicolau00001FCambodia#KH.BA0c2BABattambang00001CMacedonia#MK.ZE0c2ZEZelino000016Chad#TD.KA0c2KAKanem000022Guyana#GY.MA0c2MAMahaica-Berbice000030HungaryRegions#HU.ST0c2STSouthern Transdanubia000023Libya#LY.NQ0c2NQAn Nuqat al Khams000018Florida#0870c2MOMonroe00001CMississippi#0690c2KEKemper00001EPennsylvania#0350c2CNClinton00001DArkansas#0590c2HSHot Spring00001CWestVirginia#0870c2RORoane000015UK#0020c2SCScotland000019France#0190c2PIPicardie00001BColorado#0670c2LPLa Plata00001FMontana#0370c2GVGolden Valley00001DSouthDakota#1050c2PRPerkins00001BAlabama#0830c2LILimestone000013India#0110c2GOGoa000014Utah#0190c2GRGrand000017Texas#3150c2MARMarion00001AOceania#0030c2KIKiribati00001CLouisiana#0590c2LSLa Salle000018Georgia#1230c2GIGilmer000022WorldwithCountries#2010c2YMYemen00001DDenmark#0080c2NONordjylland000019Kentucky#1590c2MTMartin00002AMadagascarRegions#MG.AV.BN0c2BNBongolava000017Armenia#090c2TVTavush00001CNewWorld#950c2AZAzerbaijan000022Turkey#400c2KHK&#305;r&#351;ehir000033DominicanRepublic#110c2EPEl&iacute;as Pi&ntilde;a000028WorldwithCountries#430c2BFBurkina Faso000017Sweden#020c2KBlekinge00001ECentralAmerica#070c2PMPanama000017Andorra#050c2OROrdina00001DAfghanistan#100c2HELHelmand00001CEgypt_346255#280c2HWHelwan000029Azerbaijan#380c2QAQ&#601;b&#601;l&#601;00001CLatvia#160c2LELiep&#257;ja000017Bolivia#030c2BEl Beni00001ECameroon#CM.SW0c2SWSud-Ouest00001EVietnam#VN.NT0c2NTNinh Thuan000017Nauru#NR.NI0c2NINibok000022Thailand#TH.NF0c2NFNakhon Phanom000018Angola#AO.BO0c2BOBengo000019Nepal#NP.BA0c2BABagmati000017Russia#RU.PE0c2PEPerm00001EMongolia#MN.AR0c2ARArkhangai000021Mongolia#MN.BH0c2BHBayankhongor000017Laos#LA.AT0c2ATAttapu000016Denmark#0090c2RIRibe000016Ohio#0970c2MAMadison000017Nebraska#0670c2GAGage00001ATennessee#1570c2SHShelby00001AUK#0030c2NINorth Ireland000018Maryland#0150c2CECecil000021France#0200c2PCPoitou-Charentes00001BOklahoma#1090c2OLOklahoma000012Iowa#1610c2SASac000018Wisconsin#0510c2IRIron000015Texas#4970c2WISWise000017India#0120c2GUGujarat00001AWashington#0110c2CAClark000021Asia#0360c2RURussian Federation000017Indiana#1130c2NONoble00001ANewYork#0850c2RIRichmond000020NorthCarolina#1530c2RIRichmond000017Georgia#3050c2WYWayne000015Kansas#1070c2LNLinn000020SouthCarolina#0790c2RIRichland000022Oceania#0040c2MHMarshall Islands000019Illinois#1430c2PEPeoria000019Missouri#0630c2DKDeKalb000028WorldwithCountries#2020c2PRPuerto Rico00001ENorthDakota#0770c2RIRichland000016Texas#1350c2ECTEctor00001CArmenia#100c2VDVayots Dzor00002CCentralAmericawithCaribbeans#010c2BHBelize00002CHungary#200c2JNJ&aacute;sz-Nagykun-Szolnok00001CNewWorld#960c2BDBangladesh000017Turkey#410c2KCKocaeli000024DominicanRepublic#120c2ROLa Romana000023WorldwithCountries#440c2BIBurundi00001DSweden#030c2XG&auml;vleborg000032Andorra#060c2SJSant Juli&agrave; de L&ograve;ria00001BAfghanistan#110c2HERHerat000024Egypt_346255#290c2SO6th of October000017Azerbaijan#390c2QXQax000015Ukraine#210c2SMSumy000024Latvia#170c2LPXLiep&#257;ja (city)000016Bolivia#040c2LLa Paz000018China2#CN.MA0c2MAMacao00001ECapeVerde#CV.TF0c2TFTarrafal000016Mali#ML.KY0c2KYKayes00001BEurope2#EU.BY0c2BYBelarus00001BEurope2#EU.DE0c2DEGermany00001ALesotho#LS.MS0c2MSMaseru00001CLaos#LA.SV0c2SVSavannakhet000023Macedonia#MK.GP0c2GPGjorce Petrov000027Zimbabwe#ZW.MN0c2MNMatabeleland North00001ABurundi#BI.BR0c2BRBururi00001DRussia#RU.NZ0c2NZNizhegorod000016Laos#LA.BK0c2BKBokeo000024Denmark#0100c2RNRingkj&oslash;bing000018Kentucky#1610c2MOMason000018Florida#0890c2NANassau00001FMississippi#0710c2LALafayette00001FPennsylvania#0370c2COColumbia000019Arkansas#0610c2HWHoward00001EWestVirginia#0890c2SUSummers000012UK#0040c2WAWales000031France#0210c2PRProvence-Alpes-C&ocirc;te D'Azur00001AColorado#0690c2LRLarimer000019Montana#0390c2GNGranite00001CSouthDakota#1070c2POPotter000019Alabama#0850c2LOLowndes000017India#0130c2HAHaryana000013Utah#0210c2IRIron000017Texas#3170c2MATMartin00001COceania#0050c2FMMicronesia00001BLouisiana#0610c2LILincoln00001AGeorgia#1250c2GLGlascock00002BWorldwithCountries#2030c2KYCayman Islands000018Armenia#110c2ERYerevan000030CentralAmericawithCaribbeans#020c2CSCosta Rica000016Hungary#210c2TOTolna000018NewWorld#970c2BTBhutan000029USANorthEastRegion#330c2NHNew Hampshire000024WorldwithCountries#450c2CMCameroon000021Andorra#070c2ALAndorra la Vella000019Azerbaijan#400c2QZQazax000019Ukraine#220c2TPTernopil00001CLatvia#180c2LMLimba&#382;i000015Bolivia#050c2OOruro00002BFranceDepartment#FR.LG0c2LGLot et Garonne000025DenmarkRegion#DK.HS0c2HSHovenstaden00001FBurma#MM.RA0c2RARakhine State00001CBurundi#BI.CI0c2CICibitoke00001CLaos#LA.BL0c2BLBolikhamxai00001ADenmark#0110c2RORoskilde000021Virginia#6000c2FAFairfax (City)000017Ohio#0990c2MHMahoning000019Nebraska#0690c2GRGarden000019Tennessee#1590c2SMSmith00001AMaryland#0170c2CHCharles000022France#0220c2RHRh&ocirc;ne-Alpes000021SpainProvinces#0010c2ABAlbacete00001BOklahoma#1110c2OMOkmulgee000014Iowa#1630c2SCScott00001BWisconsin#0530c2JAJackson000015Texas#4990c2WODWood000020India#0140c2HPHimachal Pradesh00001DWashington#0130c2CLColumbia000018Asia#0380c2SGSingapore000016Indiana#1150c2OHOhio00001ANewYork#0870c2RORockland00001FNorthCarolina#1550c2RORobeson000018Virginia#0570c2ESEssex000019Georgia#3070c2WSWebster000016Kansas#1090c2LGLogan00001ESouthCarolina#0810c2SASaluda000017Oceania#0060c2NRNauru000018Illinois#1450c2PRPerry000017Missouri#0650c2DEDent00001DNorthDakota#0790c2RORolette000018Texas#1370c2EDWEdwards000026Denmark#0120c2SOS&oslash;nderjylland000018Kentucky#1630c2MDMeade00001AFlorida#0910c2OLOkaloosa00001BMississippi#0730c2LMLamar00001FPennsylvania#0390c2CWCrawford00001FArkansas#0630c2INIndependence00001DWestVirginia#0910c2TATaylor000020France#0230c2HNHaute-Normandie000025SpainProvinces#0020c2AL&Aacute;lava00001DColorado#0710c2LSLas Animas000016Montana#0410c2HIHill00001DSouthDakota#1090c2RORoberts000017Alabama#0870c2MAMacon000021India#0150c2JKJammu and Kashmir000018Asia#0390c2LKSri Lanka000013Utah#0230c2JUJuab000016Texas#3190c2MASMason00001DOceania#0070c2NZNew Zealand00001ELouisiana#0630c2LVLivingston000017Georgia#1270c2GYGlynn000024Germany#0010c2BABaden-Wuerttemberg000031CentralAmericawithCaribbeans#030c2ESEl Salvador000014Hungary#220c2VAVas000025EuropeRegion#010c2NRNorthern Region000018NewWorld#980c2BNBrunei00001CTurkey#430c2KUK&uuml;tahya000026USANorthEastRegion#340c2NJNew Jersey00003FDominicanRepublic#140c2MTMar&iacute;a Trinidad S&aacute;nchez000026WorldwithCountries#460c2CVCape Verde000015USA#MI0c2MIMichigan000016Sweden#050c2IGotland000023Andorra#080c2EEEscaldes-Engordany00001BAfghanistan#130c2KABKabul00001CAzerbaijan#410c2QOQobustan00001AUkraine#230c2VIVinnytsia000015Latvia#190c2LULudza000015World#AF0c2AFAfrica000015Bolivia#060c2NPando000020SolomonIsland#SB.MK0c2MKMakira000022Thailand#TH.MS0c2MSMaha Sarakham000019Togo#TG.PL0c2PLPlateaux00001BCameroon#CM.CE0c2CECentre00001ANamibia#NA.KH0c2KHKhomas000019Nigeria#NG.LA0c2LALagos000017Angola#AO.UI0c2UIUige00002ACentralAmerica2#CE.KY0c2KYCayman Islands00001FMongolia#MN.UB0c2UBUlan Bator00001DMacedonia#MK.GR0c2GRGradsko000022Denmark#0130c2STStorstr&oslash;m000015Ohio#1010c2MRMarion00001BNebraska#0710c2GFGarfield00001BTennessee#1610c2STStewart00001DMaryland#0190c2DODorchester000021SpainProvinces#0030c2AIAlicante000018Oklahoma#1130c2OSOsage000015Iowa#1650c2SHShelby00001DWisconsin#0550c2JEJefferson000017Texas#5010c2YOAYoakum000019India#0160c2JHJharkhand00001CWashington#0150c2COCowlitz000018Indiana#1170c2OROrange00001ENewYork#0890c2SLSt. Lawrence000022NorthCarolina#1570c2RCRockingham00001AVirginia#0590c2FIFairfax000019Georgia#3090c2WEWheeler000015Kansas#1110c2LYLyon000023SouthCarolina#0830c2SPSpartanburg000017Oceania#0080c2PWPalau000018Illinois#1470c2PIPiatt00001AMissouri#0670c2DODouglas000018Germany#0020c2BYBayern00001DNorthDakota#0810c2SASargent000016Texas#1390c2ELIEllis00003BPrinceEdwardIsland#CA.PE.PC0c2PCPoints East Coastal Drive00002FCentralAmericawithCaribbeans#040c2GTGuatemala000020Hungary#230c2VEVeszpr&eacute;m000025EuropeRegion#020c2SRSouthern Region000021NewWorld#990c2MMBurma (Myanmar)000017Turkey#440c2MLMalatya000027DominicanRepublic#150c2MCMonte Cristi000034WorldwithCountries#470c2CPCentral African Republic000016Sweden#060c2NHalland00001CAfghanistan#140c2KAPKapisa000018Azerbaijan#420c2QBQuba000016Ukraine#240c2VOVolyn000016Latvia#200c2MAMadona00001DBolivia#070c2PPotos&iacute;000024PolandCounties#PL.OP.OM0c2OOMOpole000026MarshallIsland#MH.MH.RL0c2RLRongelap000021SolomonIsland#SB.ML0c2MLMalaita00001BChina2#CN.LN0c2LNLiaoning00001CAlgeria#DZ.GR0c2GRGhardaia000018Liberia#LR.LF0c2LFLofa000025Sudan#SD.GZ0c2GZAl Jazirah (Gezira)000017Yemen#YE.AB0c2ABAbyan000023Burundi#BI.BU0c2BUBujumbura Rural000031Guinea#GN.NZ0c2NZNz&eacute;r&eacute;kor&eacute;000017Denmark#0140c2VEVejle00001AKentucky#1650c2MEMenifee00001CFlorida#0930c2OKOkeechobee000020Mississippi#0750c2LULauderdale000021Pennsylvania#0410c2CUCumberland000018Arkansas#0650c2IZIzard00001DWestVirginia#0930c2TUTucker000027SpainProvinces#0040c2AMAlmer&iacute;a00001AColorado#0730c2LILincoln00001BMontana#0430c2JEJefferson00001DSouthDakota#1110c2SASanborn000019Alabama#0890c2MDMadison000019India#0170c2KAKarnataka000019Asia#0410c2TJTajikistan00001EAlaska#1500c2KOKodiak Island000013Utah#0250c2KAKane00001ATexas#3210c2MAGMatagorda000022Oceania#0090c2PGPapua New Guinea00001BLouisiana#0650c2MAMadison000018Georgia#1290c2GOGordon000018Germany#0030c2BEBerlin00002ECentralAmericawithCaribbeans#050c2HOHonduras000015Hungary#240c2ZAZala000024EuropeRegion#030c2WRWestern Region000016Turkey#450c2MNManisa000024USANorthEastRegion#360c2NYNew York000025DominicanRepublic#160c2PNPedernales000020WorldwithCountries#480c2TDChad00001CSweden#070c2ZJ&auml;mtland000020Azerbaijan#430c2QDQubadl&#305;00001CUkraine#250c2ZKZakarpattia000014Latvia#210c2OGOgre00001ABolivia#080c2SSanta Cruz00001EThailand#TH.NK0c2NKNong Khai00001FCambodia#KH.SR0c2SRSvay Rieng00001AEurope2#EU.CS0c2CSSerbia000020Macedonia#MK.ZK0c2ZKZelenikovo000017Yemen#YE.SD0c2SDSadah00001DSamoa #WS.SA0c2SASatupaitea00001EMacedonia#MK.GT0c2GTGostivar00001ESerbia#RS.SC0c2SCNorth Backa00001ENorthDakota#0830c2SHSheridan000018Texas#1410c2ELPEl Paso000024Denmark#0150c2VSVestsj&aelig;lland000015Ohio#1030c2MEMedina000019Nebraska#0730c2GOGosper00001AMinnesota#0010c2AIAitkin00001FConnecticut#0010c2FAFairfield00001CTennessee#1630c2SLSullivan00001CMaryland#0210c2FRFrederick000021SpainProvinces#0050c2ASAsturias000019Oklahoma#1150c2OTOttawa000014Iowa#1670c2SISioux00001AWisconsin#0570c2JUJuneau000016Texas#5030c2YOUYoung000016India#0180c2KEKerala00001CWashington#0170c2DODouglas000017Asia#0420c2THThailand000016Indiana#1190c2OWOwen00001ANewYork#0910c2SASaratoga00001DNorthCarolina#1590c2RWRowan00001BVirginia#0610c2FUFauquier000017Georgia#3110c2WTWhite00001AKansas#1130c2MPMcpherson00001ESouthCarolina#0850c2SUSumter000017Oceania#0100c2WSSamoa000017Illinois#1490c2PKPike00001AMissouri#0690c2DUDunklin00001DGermany#0040c2BRBrandenburg000027MadagascarRegions#MG.TL.ME0c2MEMenabe00002FMadagascarRegions#MG.AV.VA0c2VAVakinankaratra00002FCentralAmericawithCaribbeans#060c2NUNicaragua000024EuropeRegion#040c2EREastern Region000022Turkey#460c2KMKahramanmara&#351;000023WorldwithCountries#490c2KMComoros000022Sweden#080c2FJ&ouml;nk&ouml;ping000019Azerbaijan#440c2QRQusar00001BUkraine#260c2ZPZaporizhia00001BLatvia#220c2PRPrei&#316;i000016Bolivia#090c2TTarija000022SierraLeone#SL.SO.MO0c2MOMoyamba000027FrenchGuiana#GF.SL.GS0c2GSGrand Santi000033PolandCounties#PL.LD.PM0c2LPMPiotrkow Trybunalski000017Samoa #WS.AA0c2AAAana00002ABrazilRegion#BR.SE0c2SESouth East Region00001ATuvalu#TV.NA0c2NANanumea000018Nigeria#NG.KN0c2KNKano000018Mongolia#MN.TO0c2TOTov000027Zimbabwe#ZW.MS0c2MSMatabeleland South000020Serbia#RS.SD0c2SDCentral Banat000019Serbia#RS.RN0c2RNRasina000016Yemen#YE.AD0c2ADAdan000019Uganda#UG.IN0c2INIganga000018Germany#0050c2BMBremen000018Denmark#0160c2VIViborg000019Kentucky#1670c2MCMercer000018Florida#0950c2OROrange00001EMississippi#0770c2LWLawrence00001EPennsylvania#0430c2DADauphin00001AArkansas#0670c2JAJackson00001CWestVirginia#0950c2TYTyler00001ESpainProvinces#0060c2AVAvila000018Colorado#0750c2LOLogan00001EMontana#0450c2JBJudith Basin00001DSouthDakota#1130c2SHShannon000019Alabama#0910c2MRMarengo00001BIndia#0190c2LALakshadweep000016Utah#0270c2MIMillard000019Texas#3230c2MAVMaverick000021Oceania#0110c2SBSolomon Islands00001DLouisiana#0670c2MOMorehouse000017Georgia#1310c2GRGrady00002CCentralAmericawithCaribbeans#070c2PMPanama000024EuropeRegion#050c2CRCentral Region000027DominicanRepublic#180c2PPPuerto Plata000029WorldwithCountries#500c2CICote d Ivoire00001BUSA#NC0c2NCNorth Carolina000015Sweden#090c2HKalmar00001CAfghanistan#170c2LOWLowgar00001FAzerbaijan#450c2STSaatl&#305;000019Ukraine#270c2ZTZhytomyr00001CLatvia#230c2RER&#275;zekne000021SierraLeone#SL.EA.KE0c2KEKenema000025FranceDepartment#FR.MB0c2MBMorbihan000020Cambodia#KH.ST0c2STStung Treng000021CapeVerde#CV.SV0c2SVSao Vicente00001CSriLanka#LK.KE0c2KEKegalle000018Nigeria#NG.KO0c2KOKogi00001BEurope2#EU.DK0c2DKDenmark000022BurkinaFaso#BF.KJ0c2KJKomondjari00001FMacedonia#MK.GV0c2GVGevgelija000017Nepal#NP.BH0c2BHBheri000020Mongolia#MN.BO0c2BOBayan Olgii000017Guinea#GN.PI0c2PIPita000019Germany#0060c2HAHamburg00001BNorthDakota#0850c2SISioux000016Texas#1430c2ERAErath000014Ohio#1050c2MIMeigs000018Nebraska#0750c2GTGrant000019Minnesota#0030c2ANAnoka00001EConnecticut#0030c2HAHartford00001ATennessee#1650c2SUSumner00001AMaryland#0230c2GAGarrett000020SpainProvinces#0070c2BABadajoz000019Oklahoma#1170c2PAPawnee000014Iowa#1690c2STStory00001BWisconsin#0590c2KEKenosha000017Texas#5050c2ZAPZapata00001EIndia#0200c2MPMadhya Pradesh00001AWashington#0190c2FEFerry00001BAsia#0440c2TMTurkmenistan000017Indiana#1210c2PAParke00001DNewYork#0930c2SCSchenectady000022NorthCarolina#1610c2RURutherford000018Virginia#0630c2FLFloyd00001BGeorgia#3130c2WHWhitfield000017Kansas#1150c2MNMarion00001DSouthCarolina#0870c2UNUnion000017Oceania#0120c2TOTonga000017Illinois#1510c2POPope00001BMissouri#0710c2FRFranklin00002ACentralAmericawithCaribbeans#080c2CUCuba00001ATurkey#480c2MGMu&#287;la000020USANorthEastRegion#390c2OHOhio000022DominicanRepublic#190c2SCSalcedo00003CWorldwithCountries#510c2CDDemocratic Republic of the Congo000016USA#MN0c2MNMinnesota000019USA#ND0c2NDNorth Dakota000017Sweden#100c2WDalarnas00001FAfghanistan#180c2NANNangarhar00001DAzerbaijan#460c2SBSabirabad000024Latvia#240c2REZR&#275;zekne (city)000024Paraguay#010c2AAAlto Paran&aacute;000023PolandCounties#PL.WP.PI0c2WPIPila00001ALaos#LA.CH0c2CHChampasak000021Thailand#TH.NN0c2NNNakhon Nayok00002AHungaryRegions#HU.CH0c2CHCentral Hungary000023Qatar#QA.JB0c2JBJariyan Al Batnah000018Germany#0070c2HEHessen00001BKentucky#1690c2MFMetcalfe000019Florida#0970c2OSOsceola00001BMississippi#0790c2LKLeake00001FPennsylvania#0450c2DLDelaware00001CArkansas#0690c2JEJefferson00001DWestVirginia#0970c2UPUpshur000021SpainProvinces#0080c2BLBaleares000017Colorado#0770c2MEMesa000016Montana#0470c2LALake00001BSouthDakota#1150c2SPSpink000018Alabama#0930c2MIMarion00001BIndia#0210c2MAMaharashtra000015Utah#0290c2MOMorgan000017Texas#3250c2MEDMedina000018Oceania#0130c2TVTuvalu000020Louisiana#0690c2NANatchitoches000018Georgia#1330c2GEGreene00002DCentralAmericawithCaribbeans#090c2BSBahamas000018Turkey#490c2MSMu&#351;000028DominicanRepublic#200c2SMSaman&aacute;000024WorldwithCountries#520c2DJDjibouti000015USA#MO0c2MOMissouri000015USA#NE0c2NENebraska00001CAfghanistan#190c2NIMNimruz000022Azerbaijan#470c2SK&#350;&#601;ki000019Latvia#250c2RIR&#299;ga000019Paraguay#020c2AMAmambay00001BEastTimor#TL.AL0c2ALAileu00001EEastTimor#TL.BB0c2BBBobonaro00001FThailand#TH.NO0c2NONonthaburi00001FSriLanka#LK.KG0c2KGKurunegala00001EKyrgyzstan#KG.GB0c2GBBishkek000029BurkinaFaso#BF.KL0c2KLKoulp&eacute;logo00001ERwanda#RW.KV0c2KVKigali City000019Yemen#YE.SH0c2SHShabwah00001FAngola#AO.CN0c2CNCuanza Norte00001DZimbabwe#ZW.MV0c2MVMasvingo000028Germany#0080c2MEMecklenburg-Vorpommern00001BNorthDakota#0870c2SLSlope000016Texas#1450c2FALFalls000015Ohio#1070c2MCMercer00001ANebraska#0770c2GEGreeley00001AMinnesota#0050c2BEBecker000020Connecticut#0050c2LILitchfield00001ATennessee#1670c2TITipton00001AMaryland#0250c2HAHarford000022SpainProvinces#0090c2BRBarcelona000018Oklahoma#1190c2PYPayne000013Iowa#1710c2TATama00001CWisconsin#0610c2KWKewaunee000017Texas#5070c2ZAVZavala000017India#0220c2MNManipur00001DWashington#0210c2FRFranklin000019Asia#0460c2UZUzbekistan000017Indiana#1230c2PEPerry00001BNewYork#0950c2SHSchoharie00001FNorthCarolina#1630c2SASampson00001BVirginia#0650c2FVFluvanna000018Georgia#3150c2WCWilcox000019Kansas#1170c2MSMarshall000024SouthCarolina#0890c2WIWilliamsburg000019Oceania#0140c2VUVanuatu00001AIllinois#1530c2PUPulaski00001CMissouri#0730c2GAGasconade000034CentralAmericawithCaribbeans#100c2KYCayman Islands00001DTurkey#500c2NVNev&#351;ehir000038DominicanRepublic#210c2SZS&aacute;nchez Ram&iacute;rez000021WorldwithCountries#530c2EGEgypt000018Sweden#120c2GKronoberg000029Azerbaijan#480c2SA&#350;&#601;ki (City)000021Latvia#260c2RIXR&#299;ga (city)000025MarshallIsland#MH.MH.RR0c2RRRongrik00001CEastTimor#TL.AM0c2AMAmbeno00001CEastTimor#TL.BC0c2BCBaucau000020FranceDepartment#FR.LO0c2LOLot000022Thailand#TH.NP0c2NPNakhon Pathom00001CKuwait#KW.AH0c2AHAl Ahmadi000024BurkinaFaso#BF.KM0c2KMKomo&eacute;000025Zimbabwe#ZW.MW0c2MWMashonaland West000028CentralAfricanRepublic#CF.AC0c2ACOuham00001FGermany#0090c2NINiedersachsen000019Kentucky#1710c2MNMonroe00001CFlorida#0990c2PBPalm beach000019Mississippi#0810c2LELee00001APennsylvania#0470c2ELElk00001AArkansas#0710c2JOJohnson00001CWestVirginia#0990c2WAWayne000020SpainProvinces#0100c2BIBizkaia00001AColorado#0790c2MIMineral000021Montana#0490c2LCLewis and Clark00001DSouthDakota#1170c2STStanley00001AAlabama#0950c2MSMarshall000019India#0230c2MEMeghalaya000016Asia#0470c2VNVietnam000014Utah#0310c2PIPiute000017Texas#3270c2MENMenard00001FOceania#0150c2NCNew Caledonia00001BLouisiana#0710c2OROrleans000022Virginia#7900c2SNStaunton (City)00001AGeorgia#1350c2GWGwinnett00002DCentralAmericawithCaribbeans#110c2JMJamaica000028USANorthEastRegion#420c2PAPennsylvania00002DWorldwithCountries#540c2GQEquatorial Guinea00001AAzerbaijan#490c2SLSalyan000016Latvia#270c2SASaldus000021Paraguay#040c2CGCaaguaz&uacute;00002ANovaScotia#CA.NS.ET0c2ETEvangeline Trail00001CEastTimor#TL.AN0c2ANAinaro00001BUganda#UG.IS0c2ISIsingiro000018Uganda#UG.JI0c2JIJinja000024CaymanIslands#KY.NS0c2NSNorth Side00001BEthiopia#ET.OR0c2OROromia000020CapeVerde#CV.SZ0c2SZSanta Cruz00001CTuvalu#TV.NF0c2NFNukufetau000028Eritrea#ER.DK0c2DKDebubawi Keyih Bahri000016Mali#ML.MO0c2MOMopti00001BPanama#PA.VR0c2VRVeraguas00001BEurope2#EU.EE0c2EEEstonia00001AEurope2#EU.CY0c2CYCyprus000030BurkinaFaso#BF.KN0c2KNK&eacute;n&eacute;dougou000030CentralAfricanRepublic#CF.SE0c2SESangha-Mbaere000014Chad#TD.LC0c2LCLac000018Serbia#RS.RS0c2RSRaska000025Germany#0100c2NONordrhein-Westfalen00001BNorthDakota#0890c2STStark000017Texas#1470c2FANFannin000026Virginia#6100c2FCFalls Church (City)000014Ohio#1090c2MMMiami000017Nebraska#0790c2HAHall00001CMinnesota#0070c2BLBeltrami00001FConnecticut#0070c2MIMiddlesex000019Michigan#0010c2ALAlcona00001DTennessee#1690c2TRTrousdale000019Maryland#0270c2HOHoward00001FSpainProvinces#0110c2BUBurgos00001COklahoma#1210c2PIPittsburg000015Iowa#1730c2TYTaylor00001DWisconsin#0630c2LCLa Crosse000017India#0240c2MIMizoram00001DWashington#0230c2GFGarfield000016Indiana#1250c2PIPike00001ANewYork#0970c2SUSchuyler000020NorthCarolina#1650c2SCScotland00001BVirginia#0670c2FKFranklin000018Georgia#3170c2WLWilkes000016Kansas#1190c2MEMeade00001CSouthCarolina#0910c2YOYork000019Illinois#1550c2PTPutnam000019Missouri#0750c2GNGentry00002BCentralAmericawithCaribbeans#120c2HTHaiti000019Estonia#010c2HAHarjumaa000014Turkey#520c2OROrdu000023DominicanRepublic#230c2JUSan Juan000023WorldwithCountries#550c2EREritrea00001AUSA#NH0c2NHNew Hampshire00001ASweden#140c2BDNorrbotten000024Azerbaijan#500c2SI&#350;amax&#305;000015Latvia#280c2TATalsi000020Paraguay#050c2CZCaazap&aacute;000025PolandCounties#PL.WP.PM0c2WPMPoznan00002BMarshallIsland#MH.MH.AI0c2AIAilinglapalap00001EVietnam#VN.QB0c2QBQuang Binh000026Thailand#TH.NR0c2NRNakhon Ratchasima00001BPakistan#PK.PB0c2PBPunjab00001CTuvalu#TV.NG0c2NGNanumanga00001BNigeria#NG.KT0c2KTKatsina000022Europe2#EU.CZ0c2CZCzech Republic000025BurkinaFaso#BF.LE0c2LEL&eacute;raba000022Burma#MM.SA0c2SASagaing Division00001DMacedonia#MK.ZR0c2ZRZrnovci000019Panama#PA.DR0c2DRDarien000017Yemen#YE.TA0c2TATaizz000021Germany#0110c2RHRheinland-Pfalz00001DKentucky#1730c2MYMontgomery000017Florida#1010c2PAPasco00001DMississippi#0830c2LFLeflore00001BPennsylvania#0490c2ERErie00001CArkansas#0730c2LALafayette00001EWestVirginia#1010c2WEWebster000027SpainProvinces#0120c2CAC&aacute;ceres000019Colorado#0810c2MOMoffat000019Montana#0510c2LBLiberty00001BSouthDakota#1190c2SUSully000018Alabama#0970c2MOMobile000018India#0250c2NANagaland000015Asia#0490c2TWTaiwan000013Utah#0330c2RIRich000018Texas#3290c2MIDMidland00001CLouisiana#0730c2OUOuachita00001BGeorgia#1370c2HAHabersham000038CentralAmericawithCaribbeans#130c2DODominican Republic000018Estonia#020c2HIHiiumaa000014Turkey#530c2RIRize000028USANorthEastRegion#440c2RIRhode Island000036DominicanRepublic#240c2PMSan Pedro de Macor&iacute;s000024WorldwithCountries#560c2ETEthiopia000018USA#MS0c2MSMississippi00001ASweden#150c2T&Ouml;rebro00001EAfghanistan#230c2KANKandahar000024Azerbaijan#510c2SM&#350;&#601;mkir000016Latvia#290c2TUTukums000019Paraguay#060c2CECentral000024MarshallIsland#MH.MH.TA0c2TATaongi00001CRussia#RU.PR0c2PRPrimorsky00001BMongolia#MN.BU0c2BUBulgan000020Mongolia#MN.DA0c2DADarkhan Uul000019Uganda#UG.KA0c2KAKabale00001FBotswana#BW.SE0c2SESouth East000022FranceDepartment#FR.LR0c2LRLoire000023FranceDepartment#FR.MH0c2MHManche000021Thailand#TH.NS0c2NSNakhon Sawan000028Pakistan#PK.NW0c2NWNorth West Frontier000021BurkinaFaso#BF.KP0c2KPKompienga00003ATajikistan#TJ.RR0c2RRRegions of Republican Subordination00001AYemen#YE.BA0c2BAAl Bayda000019Missouri#0770c2GEGreene00001AGermany#0120c2SASaarland00001CNorthDakota#0910c2SESteele000018Texas#1490c2FAYFayette000015Ohio#1110c2MOMonroe00001BNebraska#0810c2HMHamilton00001AMinnesota#0090c2BNBenton00001FConnecticut#0090c2NHNew Haven000018Michigan#0030c2AGAlger00001ATennessee#1710c2UIUnicoi000017Maryland#0290c2KEKent000025SpainProvinces#0130c2CDC&aacute;diz00001BOklahoma#1230c2POPontotoc000014Iowa#1750c2UNUnion00001DWisconsin#0650c2LALafayette000016India#0260c2OROrissa00001AWashington#0250c2GAGrant000018Asia#0500c2HKHong Kong000018Indiana#1270c2POPorter000018NewYork#0990c2SESeneca00001ENorthCarolina#1670c2STStanly00001CVirginia#0690c2FDFrederick00001BGeorgia#3190c2WIWilkinson000016Kansas#1210c2MIMiami00001BIllinois#1570c2RARandolph000035NewfoundlandandLabrador#CA.NF.WS0c2WSWestern Region000031CentralAmericawithCaribbeans#140c2PRPuerto Rico00001CEstonia#030c2IVIda-Virumaa000017Turkey#540c2SKSakarya000023DominicanRepublic#250c2STSantiago000021WorldwithCountries#570c2GAGabon000014USA#MT0c2MTMontana000017USA#NJ0c2NJNew Jersey000025Sweden#160c2E&Ouml;sterg&ouml;tland00001CAfghanistan#240c2KDZKondoz000019Azerbaijan#520c2SXSamux000015Latvia#300c2VKValka000023Paraguay#070c2CNConcepci&oacute;n000023SierraLeone#SL.EA.KL0c2KLKailahun000018Russia#RU.PS0c2PSPskov00001BLibya#LY.QB0c2QBAl Qubbah000028Thailand#TH.NT0c2NTNakhon Si Thammarat00001CTuvalu#TV.NI0c2NINiulakita000020SriLanka#LK.KL0c2KLKilinochchi00001BCapeVerde#CV.BR0c2BRBrava00001DAngola#AO.CS0c2CSCuanza Sul000016Georgia#1390c2HLHall000019Germany#0130c2SCSachsen000019Kentucky#1750c2MAMorgan00001AFlorida#1030c2PLPinellas00001DMississippi#0850c2LNLincoln00001EPennsylvania#0510c2FAFayette00001BArkansas#0750c2LWLawrence00001DWestVirginia#1030c2WTWetzel000022SpainProvinces#0140c2CNCantabria00001CColorado#0830c2MNMontezuma000019Montana#0530c2LILincoln00001ASouthDakota#1210c2TOTodd000018Alabama#0990c2MNMonroe000014Asia#0510c2MOMacau000018Utah#0350c2SLSalt Lake000016Texas#3310c2MILMilam00001FLouisiana#0750c2PLPlaquemines000035NewfoundlandandLabrador#CA.NF.ES0c2ESEastern Region000038CentralAmericawithCaribbeans#150c2KNSt.Kitts and Nevis00001EEstonia#040c2JRJ&auml;rvamaa000016Turkey#550c2SSSamsun000034DominicanRepublic#260c2SRSantiago Rodr&iacute;guez000021WorldwithCountries#580c2GHGhana000025Azerbaijan#530c2SYSiy&#601;z&#601;n000018Latvia#310c2VMValmiera00001CParaguay#080c2CRCordillera000017Serbia#RS.SM0c2SMSrem000017Yemen#YE.AM0c2AMAmran000023FranceDepartment#FR.LT0c2LTLoiret000019Nigeria#NG.KW0c2KWKwara000022BurkinaFaso#BF.KR0c2KRKouritenga00001BLiberia#LR.MG0c2MGMargibi00001BBhutan#BT.LH0c2LHLhuntshi000016Yemen#YE.SN0c2SNSana000019Sudan#SD.JG0c2JGJungoli00001BIllinois#1590c2RIRichland000019Missouri#0790c2GRGrundy000020Germany#0140c2SHSachsen-Anhalt00001ENorthDakota#0930c2SUStutsman000017Texas#1510c2FISFisher000019Ohio#1130c2MGMontgomery000019Nebraska#0830c2HRHarlan00001DMinnesota#0110c2BSBig Stone000020Connecticut#0110c2NLNew London00001AMichigan#0050c2AEAllegan000019Tennessee#1730c2UNUnion00001DMaryland#0310c2MOMontgomery000029SpainProvinces#0150c2CSCastell&oacute;n00001FOklahoma#1250c2PWPottawatomie000018Iowa#1770c2VBVan Buren00001CWisconsin#0670c2LNLanglade000016India#0280c2PUPunjab000021Washington#0270c2GRGrays Harbor000017Indiana#1290c2PSPosey000019NewYork#1010c2STSteuben00001ENorthCarolina#1690c2SOStokes000018Virginia#0710c2GIGiles000017Georgia#3210c2WOWorth000018Africa#0010c2DZAlgeria000019Kansas#1230c2MCMitchell00002DSaskatchewan#CA.SK.SW0c2SWSouth West Region00002DCentralAmericawithCaribbeans#160c2AGAntigua000021Estonia#050c2JNJ&otilde;gevamaa000015Romania#010c2ABAlba000023DominicanRepublic#270c2VAValverde000022WorldwithCountries#590c2GNGuinea000020Sweden#180c2DS&ouml;dermanland00001CAfghanistan#260c2TAKTakhar000021Azerbaijan#540c2SQSumqay&#305;t000019Latvia#320c2VEVentspils000013World#AS0c2ASAsia00001FSierraLeone#SL.EA.KN0c2KNKono00002CDistrictofColumbia#US.DC.NW0c2NWNorth West000028PolandCounties#PL.MZ.CI0c2MCICieckanow00001ESerbia#RS.SN0c2SNNorth Banat00001BMongolia#MN.DD0c2DDDornod000026CoteDivoire#CI.HT0c2HTHaut-Sassandra00001EUganda#UG.KD0c2KDKaberamaido000025BrazilRegion#BR.SO0c2SOSouth Region00001ANamibia#NA.KU0c2KUKunene00001DBurkinaFaso#BF.KS0c2KSKossi000019Angola#AO.CU0c2CUCunene000019Georgia#1410c2HNHancock000024Germany#0150c2SSSchleswig-Holstein00001DKentucky#1770c2MBMuhlenberg000016Florida#1050c2POPolk00001DMississippi#0870c2LDLowndes00001DPennsylvania#0530c2FOForest000016Arkansas#0770c2LELee00001BWestVirginia#1050c2WIWirt00001ESpainProvinces#0160c2CECeuta00001BColorado#0850c2MTMontrose000018Montana#0550c2MCMcCone00001BSouthDakota#1230c2TRTripp00001CAlabama#1010c2MTMontgomery000019India#0290c2RARajasthan000017Africa#0020c2AOAngola000017Utah#0370c2SJSan Juan000016Texas#3330c2MISMills000021Louisiana#0770c2PCPointe Coupee000018Arizona#0010c2APApache00002ECentralAmericawithCaribbeans#170c2DMDominica000015Romania#020c2ARArad000015Turkey#570c2SPSinop000023DominicanRepublic#280c2SEEl Seibo000029WorldwithCountries#600c2GWGuinea-Bissau000017USA#NM0c2NMNew Mexico00001CAfghanistan#270c2WARWardak000022Azerbaijan#550c2SU&#350;u&#351;a000021Latvia#330c2VENVentspils (city)00001FParaguay#100c2GUGuair&aacute;000022FrenchGuiana#GF.CY.KR0c2KRKourou00001BUganda#UG.KE0c2KEKamwenge000020Samoa #WS.AL0c2ALAiga-i-le-Tai00002BFranceDepartment#FR.ML0c2MLMaine et Loire00001EVietnam#VN.QG0c2QGQuang Ngai00001FKyrgyzstan#KG.YK0c2YKYsyk Kol00001FThailand#TH.NW0c2NWNarathiwat00001CThailand#TH.PC0c2PCPhichit00001DTuvalu#TV.NL0c2NLNukulaelae000019Panama#PA.EM0c2EMEmbera000025CentralAmerica2#CE.NI0c2NINicaragua00001DMacedonia#MK.IL0c2ILIlinden00001EIllinois#1610c2RORock Island00001BMissouri#0810c2HAHarrison00001CGermany#0160c2THThueringen00001CNorthDakota#0950c2TOTowner000016Texas#1530c2FLOFloyd000015Ohio#1150c2MNMorgan000018Nebraska#0850c2HYHayes00001EMinnesota#0130c2BUBlue Earth00001DConnecticut#0130c2TOTolland000019Michigan#0070c2APAlpena00001DTennessee#1750c2VBVan Buren000022Maryland#0330c2PGPrince George's000024SpainProvinces#0170c2CRCiudad Real00001DOklahoma#1270c2PUPushmataha000016Iowa#1790c2WAWapello00001BWisconsin#0690c2LILincoln000016India#0300c2SISikkim00001BWashington#0290c2ISIsland000019Indiana#1310c2PUPulaski000019NewYork#1030c2SFSuffolk00001DNorthCarolina#1710c2SUSurry00001DVirginia#0730c2GLGloucester000016Africa#0030c2BJBenin00001BKansas#1250c2MGMontgomery00002ECentralAmericawithCaribbeans#180c2LCSt.Lucia000023Estonia#070c2LNL&auml;&auml;nemaa00001BRomania#030c2AGArge&#351;000015Turkey#580c2SVSivas000025DominicanRepublic#290c2HMHato Mayor000021WorldwithCountries#610c2KEKenya00001BAfghanistan#280c2ZABZabol000029Azerbaijan#560c2SS&#350;u&#351;a (City)000018World#AU0c2AUAustralia00001FParaguay#110c2ITItap&uacute;a000019Uganda#UG.KF0c2KFKotido000019Oman#OM.WU0c2WUAl Wusta00002FFranceDepartment#FR.MM0c2MMMeurthe et Moselle000019Congo#CG.KO0c2KOKouilou00001ACongo#CG.LE0c2LELekoumou00001FCapeVerde#CV.BV0c2BVBoa Vista00001AAlgeria#DZ.IL0c2ILIllizi00001EUzbekistan#UZ.FA0c2FAFargona000023Laos#LA.VI0c2VIVientiane Province000020Philippines#PH.GU0c2GUGuimaras00001AGeorgia#1430c2HRHaralson000019Kentucky#1790c2NENelson000018Florida#1070c2PNPutnam00001DMississippi#0890c2MAMadison00001FPennsylvania#0550c2FRFranklin00001AArkansas#0790c2LILincoln00001BWestVirginia#1070c2WOWood000027SpainProvinces#0180c2COC&oacute;rdoba000019Colorado#0870c2MGMorgan000019Montana#0570c2MAMadison00001CSouthDakota#1250c2TUTurner000018Alabama#1030c2MGMorgan00001AIndia#0310c2TNTamil Nadu000019Africa#0040c2BWBotswana000023Alaska#1640c2PLPeninsula and Lake000016Utah#0390c2SASanpete000019Texas#3350c2MITMitchell00001BLouisiana#0790c2RARapides000019Arizona#0030c2COCochise000028YukonTerritory#CA.YT.WH0c2WHWhitehorse000018Nicaragua#010c2BOBoaco000044CentralAmericawithCaribbeans#190c2VCSt.Vincent and the Grenadlines000028Estonia#080c2LVL&auml;&auml;ne-Virumaa00001BRomania#040c2BCBac&#259;u00001DTurkey#590c2TGTekirda&#287;000023USANorthEastRegion#500c2VTVermont00001BAustria#010c2BUBurgenland000022DominicanRepublic#300c2VELa Vega000023WorldwithCountries#620c2LSLesotho000016Sweden#210c2CUppsala00001DAfghanistan#290c2PKAPaktika000024Azerbaijan#570c2TAT&#601;rt&#601;r00001AParaguay#120c2MIMisiones00001BTanzania#TZ.DO0c2DODodoma00001EMongolia#MN.DG0c2DGDornogovi000019Uganda#UG.KG0c2KGKiboga000020Thailand#TH.PE0c2PEPhetchaburi00001ASomalia#SO.SA0c2SASanaag00001CBurma#MM.SH0c2SHShan State000020Philippines#PH.ZM0c2ZMZambales000018Chad#TD.MA0c2MAMandoul000019Sudan#SD.KA0c2KAKassala000034CentralAfricanRepublic#CF.BB0c2BBBamingui-Bangoran00001FPhilippines#PH.IB0c2IBIsabela00001CIllinois#1630c2SCSt. Clair000018Missouri#0830c2HEHenry00001CNorthDakota#0970c2TRTraill000016Texas#1550c2FOAFoard000015Ohio#1170c2MWMorrow00001CNebraska#0870c2HTHitchcock000019Minnesota#0150c2BWBrown00001DConnecticut#0150c2WIWindham000019Michigan#0090c2ANAntrim00001ATennessee#1770c2WRWarren00001FMaryland#0350c2QAQueen Anne's00001FSpainProvinces#0190c2CUCuenca00001EOklahoma#1290c2RMRoger Mills000015Iowa#1810c2WRWarren00001DWisconsin#0710c2MAManitowoc000017India#0320c2TRTripura00001EWashington#0310c2JEJefferson000018Indiana#1330c2PTPutnam00001ANewYork#1050c2SVSullivan00001DNorthCarolina#1730c2SWSwain00001CVirginia#0750c2GOGoochland00001DAfrica#0050c2BFBurkina Faso000017Kansas#1270c2MRMorris000019Nicaragua#020c2CACarazo00002ECentralAmericawithCaribbeans#200c2BBBarbados000016Romania#050c2BHBihor000015Turkey#600c2TTTokat000024USANorthEastRegion#510c2VAVirginia00001DAustria#020c2KAK&auml;rnten000030DominicanRepublic#310c2MNMonse&ntilde;or Nouel000023WorldwithCountries#630c2LILiberia00001CSweden#220c2SV&auml;rmland00001BAfghanistan#300c2BALBalkh000019Azerbaijan#580c2TOTovuz000028Paraguay#130c2NE&Ntilde;eembuc&uacute;00001BUganda#UG.KH0c2KHKiruhura00001BSerbia#RS.BG0c2BGBelgrade000024FranceDepartment#FR.MO0c2MOMoselle00001BVietnam#VN.PT0c2PTPhu Tho00002FHungaryRegions#HU.CT0c2CTCentral Transdanubia000027Europe2#EU.FD0c2FDFaroe Islands (Den)000028BurkinaFaso#BF.KW0c2KWKourw&eacute;ogo00002BPhilippines#PH.ZN0c2ZNZamboanga del Norte00001DLouisiana#0810c2RERed River00001AArizona#0050c2CCCoconino000021Virginia#8000c2SFSuffolk (City)000018Georgia#1450c2HIHarris00001BKentucky#1810c2NINicholas00001BFlorida#1090c2SJSt. Johns00001CMississippi#0910c2MRMarion00001CPuertoRico#1010c2MVMorovis00001DPennsylvania#0570c2FUFulton00001FArkansas#0810c2LRLittle River00001EWestVirginia#1090c2WYWyoming000029SpainProvinces#0200c2GUGuip&uacute;zcoa000018Colorado#0890c2OTOtero000019Montana#0590c2MEMeagher00001BSouthDakota#1270c2UNUnion000017Alabama#1050c2PEPerry00001DIndia#0330c2UPUttar Pradesh000014Iowa#0010c2ADAdair000018Africa#0060c2BIBurundi000015Utah#0410c2SESevier000019Texas#3370c2MONMontague000019Cyprus#010c2FAFamagusta00001DNicaragua#030c2CIChinandega00002ACzechRepublic#780c2JMJihomoravsk&yacute;00002DCentralAmericawithCaribbeans#210c2GDGrenada00002FRomania#060c2BNBistri&#355;a-N&#259;s&#259;ud000017Turkey#610c2TBTrabzon00001EDominica#020c2ANSaint Andrew000026Austria#030c2NINieder&ouml;sterreich000026DominicanRepublic#320c2MPMonte Plata000021WorldwithCountries#640c2LRLibya000021Sweden#230c2ACV&auml;sterbotten00001DAfghanistan#310c2JOWJowzjan000018Azerbaijan#590c2UCUcar00001EAntigua#030c2SGESaint George000022MarshallIsland#MH.MH.AR0c2ARArno000018Russia#RU.PZ0c2PZPenza000019Uganda#UG.KI0c2KIKibale000023FranceDepartment#FR.LZ0c2LZLozere00001DThailand#TH.PG0c2PGPhangnga00002ATrinidadandTobago#TT.SA0c2SASaint Andrew000019Eritrea#ER.DU0c2DUDebub000019Illinois#1650c2SASaline00001AMissouri#0850c2HKHickory00001BNorthDakota#0990c2WAWalsh00001ATexas#1570c2FBEFort Bend000022Virginia#6200c2FRFranklin (City)000018Ohio#1190c2MKMuskingum000017Nebraska#0890c2HOHolt00001BMinnesota#0170c2CACarlton000018Kentucky#0010c2ADAdair000019Michigan#0110c2ARArenac00001ETennessee#1790c2WSWashington00001DMaryland#0370c2SMSt. Mary's00001FSpainProvinces#0210c2GIGirona000019Oklahoma#1310c2RORogers000019Iowa#1830c2WSWashington00001CWisconsin#0730c2MRMarathon00001BIndia#0340c2UTUttaranchal000019Washington#0330c2KGKing00001AIndiana#1350c2RARandolph000017NewYork#1070c2TITioga000024NorthCarolina#1750c2TRTransylvania00001AVirginia#0770c2GRGrayson000019Africa#0070c2CMCameroon000017Kansas#1290c2MTMorton000017Cyprus#020c2KYKyrenia00001CNicaragua#040c2COChontales00002CCzechRepublic#790c2JCJiho&#269;esk&yacute;00003BCentralAmericawithCaribbeans#220c2TTTrinidad &amp; Tobago00001EEstonia#110c2PRP&auml;rnumaa00001ERomania#070c2BTBoto&#351;ani000017Turkey#620c2TCTunceli00001DDominica#030c2DASaint David000024Austria#040c2OBOber&ouml;sterreich00002FDominicanRepublic#330c2CRSan Crist&oacute;bal000026WorldwithCountries#650c2MSMadagascar000011USA#OH0c2OHOhio000022Sweden#240c2YV&auml;sternorrland00001EAfghanistan#320c2SAMSamangan000021Azerbaijan#600c2XZXa&ccedil;maz00001CAntigua#040c2SJOSaint John000022Paraguay#150c2PGParaguar&iacute;000024FrenchGuiana#GF.CY.MC0c2MCMacouria00001BUganda#UG.KJ0c2KJKyenjojo000019Tunisia#TN.GB0c2GBGabes00001FThailand#TH.PH0c2PHPhetchabun000018Togo#TG.SA0c2SASavanes00001DSriLanka#LK.KT0c2KTKalutara000025Somalia#SO.SD0c2SDShabeellaha Dhexe00001ACongo#CG.LI0c2LILikouala00001EBurkinaFaso#BF.LO0c2LOLoroum000034Morocco#MA.LB0c2LBLaayoune Boujdour Sakia El Hamra000020Macedonia#MK.JG0c2JGJegunovtse00001CLouisiana#0830c2RIRichland000016Arizona#0070c2GIGila000016Georgia#1470c2HTHart000017Kentucky#1830c2OHOhio00001BFlorida#1110c2SLSt. Lucie00001EMississippi#0930c2MSMarshall000021PuertoRico#1030c2NGNag&uuml;abo00001DPennsylvania#0590c2GRGreene000018Arkansas#0830c2LOLogan000020SpainProvinces#0220c2GRGranada000018Colorado#0910c2OUOuray000019Montana#0610c2MIMineral00001ESouthDakota#1290c2WAWalworth000019Alabama#1070c2PIPickens00001BIndia#0350c2WBWest Bengal000014Iowa#0030c2AAAdams00001BAfrica#0080c2CVCape Verde000015Utah#0430c2SUSummit00001BTexas#3390c2MOTMontgomery00003EYukonTerritory#CA.YT.WL0c2WLWatson Lake &amp; Southern Lakes000017Cyprus#030c2LALarnaca000020Nicaragua#050c2ESEstel&iacute;000024CzechRepublic#800c2VYVyso&#269;ina000020Estonia#120c2PLP&otilde;lvamaa00001CRomania#080c2BRBr&#259;ila000023Turkey#630c2SU&#350;anl&#305;urfa00001EDominica#040c2GOSaint George000029USANorthEastRegion#540c2WVWest Virginia000019Austria#050c2SASalzburg00002CDominicanRepublic#340c2NCDistrito Nacional000022WorldwithCountries#660c2MWMalawi00001FSweden#250c2UV&auml;stmanland00001FAfghanistan#330c2SARSar-e Pol000021Azerbaijan#610c2XAXank&#601;ndi00001CAntigua#050c2SMASaint Mary000022Paraguay#160c2PHPresidente Hayes00001EPhilippines#PH.IF0c2IFIfugao000022Tanzania#TZ.DS0c2DSDar es Salaam00001BSerbia#RS.SU0c2SUSumadija00001AUganda#UG.KK0c2KKKatakwi00001ABenin#BJ.LI0c2LILittoral00001DBotswana#BW.SO0c2SOSouthern00001DChina2#CN.NM0c2NMNei Mongol000022FranceDepartment#FR.MR0c2MRMarne00001DVietnam#VN.QM0c2QMQuang Nam00001CThailand#TH.PI0c2PIPattani00001DNigeria#NG.NA0c2NANassarawa00001FLiberia#LR.MO0c2MOMontserrado000022Chad#TD.LO0c2LOLogone Occidental00001FChad#TD.ME0c2MEMayo-Kebbi Est000018Mongolia#MN.UV0c2UVUvs00001FBurma#MM.BA0c2BABago Division00001BIllinois#1670c2SNSangamon000017Missouri#0870c2HLHolt00001ANorthDakota#1010c2WRWard000019Texas#1590c2FRAFranklin000014Ohio#1210c2NONoble000019Nebraska#0910c2HKHooker00001AMinnesota#0190c2CRCarver000018Kentucky#0030c2ALAllen000019Michigan#0130c2BABaraga000019Tennessee#1810c2WAWayne00001BMaryland#0390c2SOSomerset000024SpainProvinces#0230c2GAGuadalajara00001BOklahoma#1330c2SESeminole000014Iowa#1850c2WYWayne00001DWisconsin#0750c2MIMarinette00001BWashington#0350c2KTKitsap000018Indiana#1370c2RIRipley00001ANewYork#1090c2TOTompkins00001FNorthCarolina#1770c2TYTyrrell000019Virginia#0790c2GEGreene000029Africa#0090c2CRCentral African Republic000017Kansas#1310c2NMNemaha000023USASouthEastRegion#010c2ALAlabama000017Cyprus#040c2NINicosia00001ANicaragua#060c2GRGranada000029CzechRepublic#810c2KAKarlovarsk&yacute;000019Estonia#130c2RARaplamaa00001CRomania#090c2BVBra&#351;ov000019Turkey#640c2USU&#351;ak00001CDominica#050c2JNSaint John00001BAustria#060c2STSteiermark000022DominicanRepublic#350c2PVPeravia000020WorldwithCountries#670c2MLMali000019Sweden#260c2ABStockholm000029Iceland#030c2AR&Aacute;rness&yacute;sla00001BAfghanistan#340c2KNRKonar00001AAzerbaijan#620c2XRXanlar00001CAntigua#060c2SPASaint Paul00001BParaguay#170c2SPSan Pedro000029CentralAfricanRepublic#CF.BG0c2BGBangui000022FranceDepartment#FR.MS0c2MSMeuse000023FranceDepartment#FR.NI0c2NINievre00001EVietnam#VN.QN0c2QNQuang Ninh000029TrinidadandTobago#TT.SD0c2SDSaint David00001AQatar#QA.KH0c2KHAl Khawr00001BSriLanka#LK.MB0c2MBMannar000021Mauritania#MR.NO0c2NONouakchott00001ALouisiana#0850c2SASabine000018Arizona#0090c2GRGraham000017Georgia#1490c2HEHeard000019Kentucky#1850c2OLOldham00001CFlorida#1130c2SRSanta rosa00001CMississippi#0950c2MOMonroe00001EPuertoRico#1050c2NRNaranjito000021Pennsylvania#0610c2HUHuntingdon000019Arkansas#0850c2LKLonoke00001FSpainProvinces#0240c2HUHuelva00001CTennessee#0010c2ANAnderson000017Colorado#0930c2PAPark00001AMontana#0630c2MSMissoula000016Alabama#1090c2PKPike00001ANevada#0010c2CHChurchill000018Iowa#0050c2ALAllamakee000015Africa#0100c2TDChad000022Alaska#1700c2MAMatanuska-Susitna000015Utah#0450c2TOTooele000016Texas#3410c2MORMoore000018Cyprus#050c2LILimassol00001BNicaragua#070c2JIJinotega00003BCzechRepublic#820c2KRKr&aacute;lov&eacute;hradeck&yacute;000019Estonia#140c2SASaaremaa00001ARomania#100c2BIBucharest000013Turkey#650c2VAVan00001EDominica#060c2JHSaint Joseph000016Austria#070c2TITirol000032DominicanRepublic#360c2JOSan Jos&eacute; de Ocoa000026WorldwithCountries#680c2MRMauritania000015USA#OK0c2OKOklahoma000019USA#PA0c2PAPennsylvania00001ASweden#270c2MSk&aring;ne000035Iceland#040c2ABAustur-Bar&eth;astrandars&yacute;sla00001DAfghanistan#350c2LAGLaghman000022Azerbaijan#630c2XIX&#305;z&#305;00001DAntigua#070c2SPESaint Peter00001BEurope2#SOME ISLANDS0c2000030NorthWestTerritories#CA.NT.AC0c2ACArctic Coast00002BNovaScotia#CA.NS.HD0c2HDHalifax Dartmouth00001AUganda#UG.KM0c2KMKampala000017Samoa #WS.AT0c2ATAtua00001BVietnam#VN.PY0c2PYPhu Yen000028Thailand#TH.PK0c2PKPrachuap Khiri Khan000019Tuvalu#TV.NT0c2NTNiutao00001BEurope2#EU.FI0c2FIFinland000019Europe2#EU.ES0c2ESSpain000029Philippines#PH.ZS0c2ZSZamboanga del Sur000017Kansas#1330c2NONeosho00001BIllinois#1690c2SHSchuyler000019Missouri#0890c2HWHoward00001BNorthDakota#1030c2WEWells00001ATexas#1610c2FRSFreestone000015Ohio#1230c2OTOttawa000019Nebraska#0930c2HWHoward000018Minnesota#0210c2CSCass00001BKentucky#0050c2ANAnderson000018Michigan#0150c2BRBarry00001BTennessee#1830c2WEWeakley000019Maryland#0410c2TATalbot00001FSpainProvinces#0250c2HEHuesca00001BOklahoma#1350c2SQSequoyah000016Iowa#1870c2WEWebster00001DWisconsin#0770c2MQMarquette00001DWashington#0370c2KIKittitas000016Indiana#1390c2RURush000018NewYork#1110c2ULUlster00001DNorthCarolina#1790c2UNUnion00001EVirginia#0810c2GVGreensville000018Africa#0110c2KMComoros00002BNewCaledonia#NC.SU.SA0c2SASarram&eacute;a000022Paraguay#190c2CYCanindey&uacute;000016Cyprus#060c2PAPaphos00001ENicaragua#080c2LELe&oacute;n000027CzechRepublic#830c2LILibereck&yacute;00001BRomania#110c2BZBuz&#259;u000016Turkey#660c2YZYozgat00001CDominica#070c2LUSaint Luke00001BAustria#080c2VOVorarlberg000028DominicanRepublic#370c2SDSanto Domingo000023WorldwithCountries#690c2MAMorocco000013USA#NV0c2NVNevada000028Sweden#280c2OV&auml;stra G&ouml;taland000034Iceland#050c2AHAustur-H&uacute;navatnss&yacute;sla00001CAfghanistan#360c2PIAPaktia00001FAzerbaijan#640c2XCXocal&#305;00001EAntigua#080c2SPHSaint Philip000020Nunavut#CA.NU.KT0c2KTKitikmeot00001ASudan#SD.KH0c2KHKhartoum00001EPhilippines#PH.II0c2IIIloilo000019Russia#RU.SA0c2SASamara00001CUganda#UG.KN0c2KNKalangala000019Tunisia#TN.GF0c2GFGafsa000020Thailand#TH.PL0c2PLPhatthalung000016Tuvalu#TV.NU0c2NUNui000025Somalia#SO.SH0c2SHShabeellaha Hoose00001FSenegal#SN.TC0c2TCTambacounda000019Algeria#DZ.JJ0c2JJJijel000020Chad#TD.LR0c2LRLogone Oriental000017Texas#3430c2MOIMorris00001FLouisiana#0870c2SBSt. Bernard00001AArizona#0110c2GEGreenlee000017Georgia#1510c2HYHenry000017Kentucky#1870c2OWOwen00001AFlorida#1150c2SSSarasota000020Mississippi#0970c2MTMontgomery00001DPuertoRico#1070c2OROrocovis00001EPennsylvania#0630c2INIndiana00001AArkansas#0870c2MAMadison000024SpainProvinces#0260c2JAJa&eacute;n000016Oregon#0010c2BABaker00001BTennessee#0030c2BDBedford00001DWisconsin#0780c2MNMenominee00001BColorado#0950c2PHPhillips00001DMontana#0650c2MUMusselshell00001AAlabama#1110c2RARandolph000016Nevada#0030c2CLClark000018Iowa#0070c2APAppanoose00001EAfrica#0120c2CICote d Ivoire000015Utah#0470c2UIUintah000019Nicaragua#090c2MDMadriz000027CzechRepublic#840c2OLOlomouck&yacute;000023Romania#120c2CSCara&#351;-Severin00001CDominica#080c2MASaint Mark000015Austria#090c2WIWien000026WorldwithCountries#700c2MZMozambique00002FIceland#060c2ASAustur-Skaftafellss&yacute;sla00001BAfghanistan#370c2KHOKhost000021Azerbaijan#650c2XDXocav&#601;nd000022MarshallIsland#MH.MH.TO0c2TOToke000027PolandCounties#PL.MZ.WA0c2MWAWarszawa000024MarshallIsland#MH.MH.BN0c2BNBikini00001EMacedonia#MK.KB0c2KBKarbinci00001DNepal#NP.DH0c2DHDhawalagiri00001ASerbia#RS.TO0c2TOToplica000027Tajikistan#TJ.BK0c2BKBadakhshoni Kuni00001CEastTimor#TL.BT0c2BTLautem000014Iran#IR.QM0c2QMQom00002ATrinidadandTobago#TT.SG0c2SGSaint George00001EQatar#QA.JU0c2JUAl Jumaliyah00001ASriLanka#LK.KY0c2KYKandy000019Liberia#LR.NI0c2NINimba000022Kazakhstan#KZ.MG0c2MGMangghystau00001DHongKong#HK.SK0c2SKSai Kung000015Kansas#1350c2NSNess000018Arizona#0120c2LPLa Paz000018Illinois#1710c2STScott000019Missouri#0910c2HOHowell00001ENorthDakota#1050c2WIWilliams000015Texas#1630c2FRIFrio000017Ohio#1250c2PAPaulding00001CNebraska#0950c2JEJefferson00001CMinnesota#0230c2CHChippewa00001AKentucky#0070c2BABallard000016Michigan#0170c2BYBay000019Tennessee#1850c2WHWhite00001DMaryland#0430c2WAWashington000029SpainProvinces#0270c2LCLa Coru&ntilde;a00001BOklahoma#1370c2STStephens000018Iowa#1890c2WIWinnebago00001DWisconsin#0790c2MEMilwaukee00001EWashington#0390c2KLKlickitat00001CIndiana#1410c2SJSt. Joseph000018NewYork#1130c2WAWarren00001DNorthCarolina#1810c2VAVance00001AVirginia#0830c2HLHalifax000031Africa#0130c2CDDemocratic Republic of the Congo000024USASouthEastRegion#050c2ARArkansas00001ANicaragua#100c2MNManagua00002DCzechRepublic#850c2MOMoravskoslezsk&yacute;000015Romania#130c2CJCluj000016Turkey#680c2ANAnkara00001FDominica#090c2PKSaint Patrick000023WorldwithCountries#710c2NANamibia00002EIceland#070c2BOBorgarfjar&eth;ars&yacute;sla000014China#010c2AHAnhui00001EAfghanistan#380c2NURNurestan000026Azerbaijan#660c2YRYard&#305;ml&#305;00001FNunavut#CA.NU.KV0c2KVKeewatin00002ECentralAfricanRepublic#CF.BK0c2BKBasse-Kotto00001CUganda#UG.KP0c2KPKapchorwa00001DOman#OM.ZA0c2ZAAdh Dhahirah000016Serbia#RS.BO0c2BOBor000018UK7#UK.SC0c2SCScotland000017Texas#3450c2MOEMotley00001FLouisiana#0890c2SCSt. Charles00001AArizona#0130c2MAMaricopa000020NorthCarolina#0010c2ALAlamance000019Georgia#1530c2HOHouston000019Kentucky#1890c2OSOwsley00001AFlorida#1170c2SOSeminole00001DMississippi#0990c2NENeshoba00001DPuertoRico#1090c2PTPatillas000020Pennsylvania#0650c2JEJefferson000013Idaho#0010c2ADAda000019Arkansas#0890c2MRMarion000021SpainProvinces#0280c2LRLa Rioja000017Oregon#0030c2BEBenton00001ATennessee#0050c2BEBenton000019Colorado#0970c2PIPitkin000016Montana#0670c2PAPark00001DSouthDakota#1350c2YAYankton000019Alabama#1130c2RURussell000018Nevada#0050c2DODouglas000016Iowa#0090c2AUAudubon000019Africa#0140c2DJDjibouti000013Utah#0490c2UTUtah000032Paraguay#220c2ASAsunci&oacute;n Capitol District000019Nicaragua#110c2MSMasaya000028CzechRepublic#860c2PAPardubick&yacute;000019Estonia#180c2TATartumaa00001FRomania#140c2CTConstan&#355;a000028Turkey#690c2GUG&uuml;m&uuml;&#351;hane00001CDominica#100c2PLSaint Paul000021WorldwithCountries#720c2NENiger000015USA#NY0c2NYNew York000021Iceland#080c2DADalas&yacute;sla000017China#020c2ZJZhejiang00001DAfghanistan#390c2ORUOruzgan00001AAzerbaijan#670c2YVYevlax000025Laos#LA.VT0c2VTVientiane Prefecture00001FEastTimor#TL.CL0c2CLCova-Lima000018Uganda#UG.KQ0c2KQAmuru000020BurkinaFaso#BF.NB0c2NBNoumbiel000022CentralAmerica2#CE.PA0c2PAPanama000022PapuaNewGuinea#PG.SA0c2SASanduan000017Kansas#1370c2NTNorton000019Illinois#1730c2SEShelby000017Missouri#0930c2IRIron000017Texas#1650c2GAIGaines000014Ohio#1270c2PEPerry00001ANebraska#0970c2JOJohnson00001BMinnesota#0250c2CGChisago000019Kentucky#0090c2BRBarren000019Michigan#0190c2BEBenzie00001ETennessee#1870c2WLWilliamson00001BMaryland#0450c2WIWicomico000023SpainProvinces#0290c2LPLas Palmas000018Oklahoma#1390c2TETexas000019Iowa#1910c2WNWinneshiek00001AWisconsin#0810c2MOMonroe00001AWashington#0410c2LELewis000017Indiana#1430c2SCScott00001CNewYork#1150c2WSWashington00001CNorthCarolina#1830c2WAWake00001AVirginia#0850c2HNHanover000016Africa#0150c2EGEgypt00001FParaguay#230c2AGAlto Paraguay00001CNicaragua#120c2MTMatagalpa00002BCzechRepublic#870c2PLPlze&#328;sk&yacute;000019Estonia#190c2VGValgamaa00001CWales#010c2BGBlaenau Gwent000018Romania#150c2CVCovasna000020Ecuador#010c2WGal&aacute;pagos000017Turkey#700c2HKHakkari00001DDominica#110c2PRSaint Peter000023WorldwithCountries#730c2NGNigeria00002CIceland#090c2EYEyjafjar&eth;ars&yacute;sla000016China#030c2JXJiangxi00001CAfghanistan#400c2PARParvan000021Azerbaijan#680c2YEYevlax (City)00001CLaos#LA.XA0c2XAXaignabouli000019Russia#RU.RO0c2RORostov00001CTunisia#TN.ZA0c2ZAZaghouan000019Uganda#UG.KR0c2KRKisoro00001ARussia#RU.AD0c2ADAdygaya000024FranceDepartment#FR.MY0c2MYMayenne000021FranceDepartment#FR.NO0c2NONord00001DVietnam#VN.QT0c2QTQuang Tri00001BSriLanka#LK.MH0c2MHMatara00001FTurkmenistan#TM.BA0c2BABalkan000016Utah#0510c2WAWasatch00001CTexas#3470c2NACNacogdoches00001ELouisiana#0910c2SHSt. Helena000018Arizona#0150c2MOMohave000028Virginia#8100c2VBVirginia Beach (City)000021NorthCarolina#0030c2AEAlexander000017Georgia#1550c2IRIrwin00001CKentucky#1910c2PEPendleton000018Florida#1190c2STSumter00001CMississippi#1010c2NWNewton000024PuertoRico#1110c2PNPe&ntilde;uelas00001EPennsylvania#0670c2JUJuniata000015Idaho#0030c2AAAdams000019Arkansas#0910c2MIMiller000024SpainProvinces#0300c2LELe&oacute;n00001AOregon#0050c2CLClackamas00001BTennessee#0070c2BLBledsoe00001AColorado#0990c2PRProwers00001BMontana#0690c2PEPetroleum00001DSouthDakota#1370c2ZIZiebach00001BAlabama#1150c2SCSt. Clair000015Nevada#0070c2ELElko000015Iowa#0110c2BEBenton000022Africa#0160c2GQEquatorial Guinea00001CNorthIreland#010c2ANAntrim000021Paraguay#240c2BQBoquer&oacute;n000020Nicaragua#130c2NSNueva Segovia000033CzechRepublic#880c2STSt&#345;edo&#269;esk&yacute;00001CEstonia#200c2VDViljandimaa000017Wales#020c2BBBridgend000025Romania#160c2DBD&acirc;mbovi&#355;a000015Ecuador#020c2AAzuay000015Turkey#710c2KOKonya000022WorldwithCountries#740c2RWRwanda000027Iceland#100c2GUGullbringus&yacute;sla000016China#040c2JSJiangsu00001EAfghanistan#410c2DAYDaykundi000021Azerbaijan#690c2ZGZ&#601;ngilan000028NovaScotia#CA.NS.GT0c2GTGlooscap Trail000025PolandCounties#PL.SK.KM0c2SKMKielce000023MarshallIsland#MH.MH.BR0c2BRBikar000022SierraLeone#SL.NO.BM0c2BMBombali000024Philippines#PH.IN0c2INIlocos Norte000019Uganda#UG.KS0c2KSKasese000017Uganda#UG.LI0c2LILira000025EquatorialGuinea#GQ.KN0c2KNKie Ntem000022Tibet#TI.LP0c2LPLhasa Prefecture00001CSerbia#RS.BR0c2BRBranicevo00001DTurkmenistan#TM.AL0c2ALAhal000019Nigeria#NG.NI0c2NINiger000019Senegal#SN.TH0c2THThies000020Gambia#GM.MC0c2MCCentral River000029Philippines#PH.ZY0c2ZYZamboanga Sibugay00001DHongKong#HK.SO0c2SOSouthern000016Kansas#1390c2OSOsage000018Illinois#1750c2SRStark00001AMissouri#0950c2JKJackson00001ATexas#1670c2GALGalveston000028Virginia#6300c2FEFredericksburg (City)000017Ohio#1290c2PIPickaway00001ANebraska#0990c2KEKearney000018Minnesota#0270c2CLClay000017Kentucky#0110c2BTBath00001AMichigan#0210c2BIBerrien00001ATennessee#1890c2WIWilson00001DMaryland#0470c2WOWorchester00001FSpainProvinces#0310c2LILleida00001AOklahoma#1410c2TITillman000017Iowa#1930c2WOWoodbury00001AWisconsin#0830c2OCOconto00001CWashington#0430c2LILincoln000018Indiana#1450c2SHShelby000017NewYork#1170c2WYWayne00001ENorthCarolina#1850c2WRWarren00001AVirginia#0870c2HCHenrico000018Africa#0170c2EREritrea00001CAzerbaijan#700c2ZQZaqatala00001ANorthIreland#020c2ADArds000026Nicaragua#140c2SJR&iacute;o San Juan00002CCzechRepublic#890c2US&Uacute;steck&yacute;00001FEstonia#210c2VRV&otilde;rumaa000019Wales#030c2CPCaerphilly000015Romania#170c2DJDolj00001EEcuador#030c2BBol&iacute;var000016Turkey#720c2MRMardin000031WorldwithCountries#750c2STSao Tome and Principe000013USA#OR0c2OROregon000014China#050c2JLJilin00001EAfghanistan#420c2PANPanjshir000026Alberta#CA.AB.AC0c2ACAlberta Central000026PolandCounties#PL.LD.SI0c2LSISieradz000022MarshallIsland#MH.MH.UJ0c2UJUjae000024SierraLeone#SL.NO.TO0c2TOTonkolili000022Macedonia#MK.KG0c2KGKrivogastani00001BVanuatu#VU.ML0c2MLMalampa00001AThailand#TH.PR0c2PRPhrae000021Cameroon#CM.EN0c2ENExtreme-Nord00001FSriLanka#Lk.MJ0c2MJMoneragala00001EEritrea#ER.GB0c2GBGash-Barka00001FBurkinaFaso#BF.MO0c2MOMouhoun000019Bhutan#BT.MO0c2MOMongar00001BRwanda#RW.NO0c2NONorthern000019Utah#0530c2WSWashington000018Texas#3490c2NAVNavarro00001DLouisiana#0930c2SJSt. James000018Arizona#0170c2NANavajo000021NorthCarolina#0050c2AGAlleghany000019Georgia#1570c2JAJackson000018Kentucky#1930c2PRPerry00001AFlorida#1210c2SNSuwannee00001DMississippi#1030c2NONoxubee00001APuertoRico#1130c2POPonce000021Pennsylvania#0690c2LALackawanna000017Idaho#0050c2BABannock00001EArkansas#0930c2MSMississippi00001DSpainProvinces#0320c2LULugo000018Oregon#0070c2CAClatsop00001ATennessee#0090c2BUBlount000019Colorado#1010c2PUPueblo00001AMontana#0710c2PHPhillips000018Alabama#1170c2SHShelby00001ANevada#0090c2ESEsmeralda000019Iowa#0130c2BHBlack Hawk000019Africa#0180c2ETEthiopia00001FAzerbaijan#710c2ZRZ&#601;rdab00001CNorthIreland#030c2AMArmagh000018Nicaragua#150c2RIRivas00002CCzechRepublic#900c2ZLZl&iacute;nsk&yacute;000016Wales#040c2CACardiff00001CRomania#180c2GLGala&#355;i00001CEcuador#040c2FCa&ntilde;ar00001ATurkey#730c2NGNi&#287;de000023WorldwithCountries#760c2SNSenegal000016China#060c2QHQinghai00002DPolandCounties#PL.LU.BM0c2LBMBiala-Podlaska00001CMacedonia#MK.KH0c2KHKicevo00001DMongolia#MN.DU0c2DUDundgovi000017Uganda#UG.KU0c2KUKumi000019Uganda#UG.MA0c2MAMasaka000020Thailand#TH.PS0c2PSPhitsanulok000018Somalia#SO.SO0c2SOSool00001FSenegal#SN.ST0c2STSaint-Louis00001CLiberia#LR.MY0c2MYMaryland00001BZambia#ZM.SO0c2SOSouthern00001CChad#TD.MO0c2MOMoyen Chari000016Africa#0190c2GAGabon000018Kansas#1410c2OBOsborne00001DIllinois#1770c2SPStephenson000019Missouri#0970c2JAJasper00001CCalifornia#0010c2ALAlameda000016Texas#1690c2GARGarza000013Ohio#1310c2PKPike000018Nebraska#1010c2KIKeith00001EMinnesota#0290c2CWClearwater000017Kentucky#0130c2BEBell000019Michigan#0230c2BNBranch00001FSpainProvinces#0330c2MAMadrid000018Oklahoma#1430c2TUTulsa000014Iowa#1950c2WHWorth00001AWisconsin#0850c2ONOneida00001BNewWorld#1000c2KHCambodia00001AWashington#0450c2MAMason000019Indiana#1470c2SPSpencer00001DNewYork#1190c2WEWestchester000022NorthCarolina#1870c2WSWashington000018Virginia#0890c2HYHenry00002CNewCaledonia#NC.NO.HI0c2HIHiengh&egrave;ne00001EAzerbaijan#720c2BBBab&#601;k00001FNorthIreland#040c2BLBallymena00001EWales#050c2CICarmarthenshire000015Romania#190c2GJGorj000016Ecuador#050c2CCarchi000015Turkey#740c2SISiirt000025WorldwithCountries#770c2SCSeycelles000015China#070c2FJFujian000025MarshallIsland#MH.MH.UL0c2ULUjelang000017Laos#LA.XE0c2XEXekong000017Libya#LY.SB0c2SBSabha00001EChina2#CN.NX0c2NXNingxia Hui000021FranceDepartment#FR.OI0c2OIOise000021Thailand#TH.PT0c2PTPathum Thani00001CBotswana#BW.CE0c2CECentral00001AEurope2#EU.FR0c2FRFrance00001DAlgeria#DZ.KH0c2KHKhenchela00001CSaudiArabia#SA.HA0c2HAHail000016Africa#0200c2GHGhana000015Alaska#1800c2NONome000014Utah#0550c2WYWayne000017Texas#3510c2NEWNewton000028Louisiana#0950c2STSt. John the Baptist000016Arizona#0190c2PIPima00001DNorthCarolina#0070c2ANAnson000018Georgia#1590c2JSJasper000017Kentucky#1950c2PIPike000018Florida#1230c2TATaylor00001FMississippi#1050c2OKOktibbeha000021PuertoRico#1150c2QBQuebradillas000020Pennsylvania#0710c2LNLancaster000019Idaho#0070c2BEBear Lake000019Arkansas#0950c2MNMonroe000026SpainProvinces#0340c2MLM&aacute;laga000019Oregon#0090c2COColumbia00001BTennessee#0110c2BRBradley00001DColorado#1030c2RBRio Blanco000019Montana#0730c2POPondera000018Alabama#1190c2SUSumter000018NewWorld#1010c2CNChina000017Nevada#0110c2EUEureka000014Iowa#0150c2BOBoone000019Azerbaijan#730c2CFCulfa000020NorthIreland#050c2BYBallymoney000023USASouthEastRegion#120c2FLFlorida00004BNicaragua#170c2ANRegi&oacute;n Aut&oacute;noma del Atl&aacute;ntico Norte000019Wales#060c2CGCeredigion000019Romania#200c2HRHarghita00001AEcuador#060c2HChimborazo000017Turkey#750c2AKAksaray000028WorldwithCountries#780c2SLSierra Leone00001BChina#080c2HLHeilongjiang000026PolandCounties#PL.PD.SM0c2PSMSuwalki000021HongKong#HK.SS0c2SSSham Shui Po00001CSamoa #WS.TU0c2TUTuamasaga00001AUganda#UG.MC0c2MCMasindi00001BThailand#TH.PU0c2PUPhuket000020Ethiopia#ET.AA0c2AAAddis Ababa000022Europe2#EU.GI0c2GIGibraltar (UK)000026Burma#MM.TN0c2TNTanintharyi Division00001BVirginia#0910c2HIHighland000017Africa#0210c2GNGuinea000017Kansas#1430c2OTOttawa00001BIllinois#1790c2TATazewell00001CMissouri#0990c2JEJefferson00001BCalifornia#0030c2APAlpine00001ATexas#1710c2GIEGillespie000016Ohio#1330c2POPortage00001CNebraska#1030c2KPKeya Paha000018Minnesota#0310c2COCook000018Kentucky#0150c2BNBoone00001AMichigan#0250c2CACalhoun000020SpainProvinces#0350c2MEMelilla00001AOklahoma#1450c2WAWagoner000015Iowa#1970c2WGWright00001DWisconsin#0870c2OUOutagamie00001DNewWorld#1020c2TPEast Timor00001DWashington#0470c2OKOkanogan000018Indiana#1490c2STStarke000019NewYork#1210c2WOWyoming00001FNorthCarolina#1890c2WTWatauga00002FSaskatchewan#CA.SK.WC0c2WCWest Central Region000026Manitoba#CA.MB.CR0c2CRCentral Region000026Azerbaijan#740c2KNK&#601;ng&#601;rli00001FNorthIreland#060c2BBBanbridge000023USASouthEastRegion#130c2GAGeorgia000049Nicaragua#180c2ASRegi&oacute;n Aut&oacute;noma del Atl&aacute;ntico Sur000014Wales#070c2CWConwy00001ARomania#210c2HDHunedoara000018Ecuador#070c2XCotopaxi000016Turkey#760c2BMBatman000023WorldwithCountries#790c2SOSomalia00002AIceland#150c2KJKj&oacute;sars&yacute;sla000014China#090c2HEHenan00002CPolandCounties#PL.SL.BM0c2SBMBielsko-Biala00002BPolandCounties#PL.LD.SM0c2LSMSkierniewice00002DPapuaNewGuinea#PG.SH0c2SHSouthern Highlands00001CHongKong#HK.ST0c2STSha Tin000022Philippines#PH.IS0c2ISIlocos Sur000018Malawi#MW.ZO0c2ZOZomba000018Russia#RU.SK0c2SKSakha00001DMicronesia#FM.KO0c2KOKosrae000019Uganda#UG.KX0c2KXKamuli00001AUganda#UG.MD0c2MDMubende000024EquatorialGuinea#GQ.LI0c2LILitoral000022Tibet#TI.NA0c2NANgari Prefecture000027Iran#IR.SB0c2SBSistan and Baluchestan000031FranceDepartment#FR.PA0c2PAPyrenees Atlantiques00002BTrinidadandTobago#TT.SP0c2SPSaint Patrick00001EGambia#GM.LR0c2LRLower River00001FLesotho#LS.QN0c2QNQacha's Nek000015Iowa#0170c2BRBremer00001EAfrica#0220c2GWGuinea-Bissau000014Utah#0570c2WEWeber000016Texas#3530c2NOLNolan00001ELouisiana#0970c2SLSt. Landry000017Arizona#0210c2PNPinal00001CNorthCarolina#0090c2ASAshe00001CGeorgia#1610c2JDJeff Davis000019Kentucky#1970c2POPowell000017Florida#1250c2UNUnion00001CMississippi#1070c2PAPanola000022PuertoRico#1170c2RCRinc&oacute;n00001FPennsylvania#0730c2LWLawrence000017Idaho#0090c2BNBenewah00001DArkansas#0970c2MTMontgomery00001FSpainProvinces#0360c2MUMurcia000015Oregon#0110c2CSCoos000018Israel#0010c2CECentral00001CTennessee#0130c2CACampbell00001DColorado#1050c2RGRio Grande00001EMontana#0750c2PRPowder River00001BAlabama#1210c2TATalladega00001ANewWorld#1030c2GEGeorgia000019Nevada#0130c2HUHumboldt00002FSaskatchewan#CA.SK.EC0c2ECEast Central Region00001BAzerbaijan#750c2OROrdubad00001DNorthIreland#070c2BFBelfast00001BWales#080c2DBDenbighshire00001ERomania#220c2ILIalomi&#355;a000016Ecuador#080c2OEl Oro000017Turkey#770c2BBBayburt000028WorldwithCountries#800c2ZASouth Africa000014China#100c2HBHebei000025Burma#MM.AY0c2AYAyeyarwady Division00001BRussia#RU.SL0c2SLSakhalin000019Russia#RU.TB0c2TBTambov00001AGuinea#GN.SI0c2SISiguiri00001AUganda#UG.KY0c2KYKayunga000018Uganda#UG.ME0c2MEMbale000018Cameroon#CM.ES0c2ESEst000028CentralAfricanRepublic#CF.UK0c2UKOuaka00001DNorthCarolina#1910c2WYWayne000020Virginia#0930c2IWIsle of Wight000016Africa#0230c2KEKenya000017Kansas#1450c2PNPawnee000018Illinois#1810c2UNUnion00001AMissouri#1010c2JOJohnson00001BCalifornia#0050c2AMAmador00001ATexas#1730c2GLAGlasscock000015Ohio#1350c2PRPreble00001ANebraska#1050c2KMKimball00001EMinnesota#0330c2CTCottonwood00001AKentucky#0170c2BOBourbon000017Michigan#0270c2CSCass000020SpainProvinces#0370c2NANavarra000016Israel#0020c2HAHaifa00001DOklahoma#1470c2WSWashington00001BWisconsin#0890c2OZOzaukee000018NewWorld#1040c2INIndia00001CWashington#0490c2PAPacific000019Indiana#1510c2SUSteuben000017NewYork#1230c2YAYates00002AAzerbaijan#760c2SDS&#601;d&#601;r&#601;k000023NorthIreland#080c2CFCarrickfergus000019Wales#090c2FLFlintshire00001ARomania#230c2ISIa&#351;i00001AEcuador#090c2EEsmeraldas000017Turkey#780c2KRKaraman000021WorldwithCountries#810c2SDSudan000028Iceland#170c2MYM&yacute;ras&yacute;sla000014China#110c2HNHunan00001CLaos#LA.XI0c2XIXiangkhoang00001FPhilippines#PH.KA0c2KAKalinga00001BRussia#RU.SM0c2SMSmolensk00001CMongolia#MN.DZ0c2DZZavkhan00001AUganda#UG.MF0c2MFManafwa000018Russia#RU.AL0c2ALAltai00002AFranceDepartment#FR.PC0c2PCPas de Calais00001CVietnam#VN.AG0c2AGAn Giang00001FSriLanka#LK.MP0c2MPMullailivu00001BMauritius#MU.FL0c2FLFlacq000022Chad#TD.NJ0c2NJVille De Ndjamena000017Nevada#0150c2LALander000017Iowa#0190c2BUBuchanan000018Africa#0240c2LSLesotho000017Texas#3550c2NUENueces00001ELouisiana#0990c2SMSt. Martin00001CArizona#0230c2SCSanta Cruz00001DNorthCarolina#0110c2AVAvery00001BGeorgia#1630c2JEJefferson00001AKentucky#1990c2PUPulaski000019Florida#1270c2VOVolusia000018Illinois#0010c2ADAdams000021Mississippi#1090c2PRPearl River000026PuertoRico#1190c2RGR&iacute;o Grande00001EPennsylvania#0750c2LELebanon000017Idaho#0110c2BIBingham000019Arkansas#0990c2NENevada000020SpainProvinces#0380c2OUOurense000016Oregon#0130c2CRCrook00001AIsrael#0030c2JEJerusalem00001ATennessee#0150c2CNCannon000018Colorado#1070c2RORoutt000018Montana#0770c2PWPowell00001CAlabama#1230c2TLTallapoosa00001CNewWorld#1050c2IDIndonesia00001FAzerbaijan#770c2SH&#350;ahbuz000021NorthIreland#090c2CSCastlereagh000016Wales#100c2GDGwynedd000016Ecuador#100c2GGuayas000023Turkey#790c2KKK&#305;r&#305;kkale000025WorldwithCountries#820c2SZSwaziland000014China#120c2HUHubei000032FrenchGuiana#GF.CY.MT0c2MTMontsinery Tonnegrande00001APanama#PA.HE0c2HEHerrera00001DHongKong#HK.TM0c2TMTuen Mun00001BMacedonia#MK.KN0c2KNKonce00001CCoteDivoire#CI.LC0c2LCLacs00001AEastTimor#TL.DL0c2DLDili000019Uganda#UG.MG0c2MGMayuge000016Benin#BJ.MO0c2MOMono00002FHungaryRegions#HU.WT0c2WTWestern Transdanubia000017Russia#RU.AM0c2AMAmur000028FranceDepartment#FR.PD0c2PDPuy de Dome00001BThailand#TH.PY0c2PYPhayao00001BThailand#TH.RE0c2RERoi Et000020Namibia#NA.OD0c2ODOtjozondjupa000018Nigeria#NG.OG0c2OGOgun000022BurkinaFaso#BF.OB0c2OBOubritenga00001ENorthCarolina#1930c2WIWilkes00001DVirginia#0950c2JCJames City000018Africa#0250c2LILiberia00001CAlaska#1850c2NSNorth Slope000019Kansas#1470c2PLPhillips00001CIllinois#1830c2VEVermilion000017Missouri#1030c2KNKnox00001ACalifornia#0070c2BUButte000017Texas#1750c2GOLGoliad000015Ohio#1370c2PUPutnam000017Nebraska#1070c2KNKnox00001DMinnesota#0350c2CICrow Wing000017Kentucky#0190c2BYBoyd00001DMichigan#0290c2CHCharlevoix000021SpainProvinces#0390c2PAPalencia000019Israel#0040c2NRNorthern00001AOklahoma#1490c2WHWashita000019Wisconsin#0910c2PEPepin000017NewWorld#1060c2IAIran000021Washington#0510c2PEPend Oreille00001AIndiana#1530c2SLSullivan000029NewCaledonia#NC.NO.HO0c2HOHoua&iuml;lou000023Azerbaijan#780c2SR&#350;&#601;rur00001FNorthIreland#100c2CLColeraine00001FWales#110c2AYIsle of Anglesey00001FRomania#250c2MMMaramure&#351;000018Ecuador#110c2IImbabura00001FNorthKorea#010c2CHAChagang-do000020Turkey#800c2SR&#350;&#305;rnak000024WorldwithCountries#830c2TZTanzania00003DIceland#190c2NINor&eth;ur-&Iacute;safjar&eth;ars&yacute;sla000017China#130c2XJXinjiang00001ASomalia#SO.BK0c2BKBakool00001CBurma#MM.CH0c2CHChin State00001ESamoa #WS.VF0c2VFVaao Fonoti000018Niger#NE.MA0c2MAMaradi000018Yemen#YE.DH0c2DHDhamar00001BMongolia#MN.ER0c2EROrkhon00001AUganda#UG.MH0c2MHMaracha00001BLibya#LY.SH0c2SHAsh Shati000017Iran#IR.QZ0c2QZQazvin00001ALebanon#LE.BA0c2BABeirut000019Ethiopia#ET.AF0c2AFAfar000022BurkinaFaso#BF.NM0c2NMNamentenga00001DGambia#GM.NB0c2NBNorth Bank000018Nevada#0170c2LILincoln00001AIowa#0210c2BVBuena Vista000016Africa#0260c2LRLibya00001ATexas#3570c2OCHOchiltree00001CLouisiana#1010c2SRSt. Mary000019Arizona#0250c2YAYavapai000024Virginia#8200c2WBWaynesboro (City)000020NorthCarolina#0130c2BEBeaufort000019Georgia#1650c2JKJenkins00001CKentucky#2010c2RORobertson000019Florida#1290c2WKWakulla00001CIllinois#0030c2ALAlexander00001BMississippi#1110c2PEPerry000022PuertoRico#1210c2SBSabana Grande00001DPennsylvania#0770c2LHLehigh000016Idaho#0130c2BLBlaine000019Arkansas#1010c2NWNewton000023SpainProvinces#0400c2POPontevedra000016Oregon#0150c2CUCurry000019Israel#0050c2SOSouthern00001BTennessee#0170c2CRCarroll00001BColorado#1090c2SASaguache000019Montana#0790c2PIPrairie00001CAlabama#1250c2TUTuscaloosa000018NewWorld#1070c2JPJapan00001FNorthIreland#110c2CKCookstown00001CWales#120c2MMMonmouthshire00001FRomania#260c2MHMehedin&#355;i000014Ecuador#120c2LLoja000015Turkey#810c2AAAdana000020WorldwithCountries#840c2TGTogo000033Iceland#200c2NMNor&eth;ur-M&uacute;las&yacute;sla00001FFiji#FJ.TH.NO0c2NOTholo North000027Kazakhstan#KZ.NK0c2NKNorth Kazakhstan00001ADjibouti#DJ.OB0c2OBObock000024Guyana#GY.PM0c2PMPomeroon-Supenaam000019Russia#RU.RZ0c2RZRyazan000026Russia#RU.SP0c2SPSt. Petersburg City000018Uganda#UG.MI0c2MIMpigi00001AQatar#QA.ME0c2MEMesaieed00001FBurkinaFaso#BF.OD0c2ODOudalan00002EMorocco#MA.MK0c2MKMarrakech Tensift Al Haouz000021Chad#TD.MW0c2MWMayo-Kebbi Ouest00001DIndiana#1550c2SWSwitzerland00001ENorthCarolina#1950c2WLWilson000021Virginia#0970c2KQKing and Queen00001BAfrica#0270c2MGMadagascar00001DKansas#1490c2PTPottawatomie000019Illinois#1850c2WAWabash00001AMissouri#1050c2LDLaclede00001ECalifornia#0090c2CACalaveras000019Texas#1770c2GONGonzales00001FVirginia#6400c2GAGalax (City)000017Ohio#1390c2RIRichland00001CNebraska#1090c2LALancaster00001AMinnesota#0370c2DADakota000018Kentucky#0210c2BLBoyle00001CMichigan#0310c2CECheboygan000022SpainProvinces#0410c2SASalamanca000019Israel#0060c2TATel Aviv000018Oklahoma#1510c2WOWoods00001AWisconsin#0930c2PIPierce00001DNewWorld#1080c2KZKazakhstan00001BWashington#0530c2PIPierce000014China#150c2GSGansu00001FNorthIreland#120c2CRCraigavon00001DWales#130c2MTMerthyr Tydfil00001BRomania#270c2MSMure&#351;00001FEcuador#130c2RLos R&iacute;os000028NorthKorea#030c2HANHamgy&#335;ng-namdo000028Turkey#820c2CI&Ccedil;ank&#305;r&#305;000023WorldwithCountries#850c2TNTunisia000037Iceland#210c2NONor&eth;ur-&THORN;ingeyjars&yacute;sla000022SierraLeone#SL.SO.PU0c2PUPujehun000024MarshallIsland#MH.MH.UT0c2UTUtirik000018Chad#TD.OD0c2ODOuaddai000019Somalia#SO.AW0c2AWAwdal00001BHongKong#HK.TP0c2TPTai Po00001ABurundi#BI.GI0c2GIGitega000022Tibet#TI.NG0c2NGNagqu Prefecture00001AVietnam#VN.SL0c2SLSon La00001DVietnam#VN.TB0c2TBThai Binh00001BPalau#PW.HA0c2HAHatohobei00001BSriLanka#LK.MT0c2MTMatale000017Congo#CG.NI0c2NINiari000024TrinidadandTobago#TT.CA0c2CACaroni00001BLesotho#LS.QT0c2QTQuthing000015Nevada#0190c2LYLyon000015Iowa#0230c2BTButler000017Africa#0280c2MWMalawi000021Alaska#1880c2NANorthwest Arctic000017Texas#3590c2OLDOldham00001FLouisiana#1030c2SYSt. Tammany000016Arizona#0270c2YUYuma00001ENorthCarolina#0150c2BRBertie000019Georgia#1670c2JOJohnson00001DKentucky#2030c2RCRockcastle000018Florida#1310c2WTWalton000017Illinois#0050c2BOBond00001AMississippi#1130c2PIPike00001CPuertoRico#1230c2SASalinas00001EPennsylvania#0790c2LZLuzerne000015Idaho#0150c2BOBoise00001BArkansas#1030c2OUOuachita00002FSpainProvinces#0420c2SCSanta Cruz de Tenerife00001AOregon#0170c2DEDeschutes00001ATennessee#0190c2CTCarter00001BColorado#1110c2SJSan Juan000019Montana#0810c2RARavalli000018Alabama#1270c2WAWalker000020NewWorld#1090c2KPKorea (north)000020NewCaledonia#NC.SU.TH0c2THThio000016China#160c2GXGuangxi00001BNorthIreland#130c2LDDerry00001CLuxembourg#020c2CACapellen000020Wales#140c2NPNeath Port Talbot00001BRomania#280c2NTNeam&#355;00001DEcuador#140c2MManab&iacute;000019Turkey#830c2GAGaziantep000022WorldwithCountries#860c2UGUganda000024PolandCounties#PL.LU.CM0c2LCMChelm000024Alberta#CA.AB.AN0c2ANAlberta North00001CSomalia#SO.BN0c2BNBanaadir00001EEastTimor#TL.VQ0c2VQViqueque00001ARussia#RU.SR0c2SRSaratov00001FMongolia#MN.GA0c2GAGovi Altai00001FCoteDivoire#CI.LG0c2LGLagunes000030Guinea#GN.TE0c2TET&eacute;lim&eacute;l&eacute;00001EUganda#UG.NA0c2NANakasongola000021FranceDepartment#FR.OR0c2OROrne00001ALibya#LY.AJ0c2AJAjdabiya000019Monaco#EU.MN0c2MNMonaco000025DenmarkRegion#DK.MJ0c2MJMidtjylland00001BNamibia#NA.OH0c2OHOmaheke00001CSomalia#SO.TO0c2TOTogdheer00001CAlgeria#DZ.LG0c2LGLaghouat00001CIndiana#1570c2TITippecanoe00001ENorthCarolina#1970c2YAYadkin00001EVirginia#0990c2KGKing George000015Africa#0290c2MLMali000016Kansas#1510c2PRPratt000019Illinois#1870c2WRWarren00001CMissouri#1070c2LFLafayette00001BCalifornia#0110c2COColusa000015Texas#1790c2GRAGray000013Ohio#1410c2RORoss00001ANebraska#1110c2LILincoln000019Minnesota#0390c2DDDodge00001AKentucky#0230c2BKBracken00001BMichigan#0330c2CIChippewa000020SpainProvinces#0430c2SESegovia00001BOklahoma#1530c2WDWoodward000018Wisconsin#0950c2POPolk000020NewWorld#1100c2KRKorea (south)00001DWashington#0550c2SJSan Juan00002DPrinceEdwardIsland#CA.PE.AL0c2ALAnne's Land000016Belarus#010c2BRBrest00001ANorthIreland#140c2DWDown000024Luxembourg#030c2ESEsch-sur-Alzette000016Wales#150c2NONewport000014Romania#290c2OTOlt00001BColombia#010c2AMAAmazonas00001FEcuador#150c2SMorona-Santiago000014Turkey#840c2KAKars00002AWorldwithCountries#870c2WAWestern Sahara00002FIceland#230c2RARang&aacute;rvallas&yacute;sla000023FrenchGuiana#GF.CY.MY0c2MYMatoury000033NorthWestTerritories#CA.NT.BL0c2BLBigLake Country00001DMacedonia#MK.KS0c2KSKrusevo00001DMacedonia#MK.LI0c2LILipkovo00001AZambia#ZM.CE0c2CECentral000019Yemen#YE.DL0c2DLAl Dali00001BLibya#LY.TB0c2TBTarabulus00002DSolomonIsland#SB.RB0c2RBRennell and Bellona00001ERussia#RU.AR0c2ARArkhangelsk000018Guinea#GN.BE0c2BEBeyla00001APakistan#PK.SD0c2SDSindh00001CSwaziland#SZ.HH0c2HHHhohho00001ALibya#LY.BA0c2BABenghazi000018Nauru#NR.AB0c2ABAnabar00001AEurope2#EU.GR0c2GRGreece00001DNewWorld#1110c2KGKyrgyzstan000018Nevada#0210c2MIMineral000016Iowa#0250c2CACalhoun00001BAfrica#0300c2MRMauritania000017Texas#3610c2ORAOrange00001ELouisiana#1050c2TATangipahoa00001ENorthCarolina#0170c2BLBladen000017Georgia#1690c2JNJones000018Kentucky#2050c2RWRowan00001CFlorida#1330c2WGWashington000018Illinois#0070c2BNBoone00001EMississippi#1150c2POPontotoc000026PuertoRico#1250c2SGSan Germ&aacute;n00001FPennsylvania#0810c2LYLycoming000016Idaho#0170c2BRBonner000018Arkansas#1050c2PEPerry000020SpainProvinces#0440c2SVSevilla000018Oregon#0190c2DODouglas00001CTennessee#0210c2CHCheatham00001DColorado#1130c2SMSan Miguel00001AMontana#0830c2RIRichland00001CAlabama#1290c2WSWashington000016China#180c2GZGuizhou000017Belarus#020c2HOHomyel000030NorthIreland#150c2DNDungannon and South Tyrone000025USASouthEastRegion#220c2LALouisiana00001ELuxembourg#040c2LULuxembourg00001CWales#160c2PEPembrokeshire000018Romania#300c2PHPrahova00001AJamacia#010c2CLClarendon00001CColombia#020c2ANTAntioquia000023NorthKorea#060c2HWNHwanghae-namdo000019Turkey#850c2ZOZonguldak000022WorldwithCountries#880c2ZMZambia00001ELiechtenstein#010c2BABalzers000022MarshallIsland#MH.MH.EB0c2EBEbon00001CRussia#RU.ST0c2STStavropol000019Uganda#UG.LW0c2LWLuwero00001CRussia#RU.AS0c2ASAstrakhan000018Guinea#GN.BF0c2BFBoffa00001AThailand#TH.SA0c2SASatun000024TrinidadandTobago#TT.TO0c2TOTobago00001DVietnam#VN.BD0c2BDBinh Dinh000018Angola#AO.ZA0c2ZAZaire00002CBrazilRegion#BR.CW0c2CWCentral West Region00001FBurkinaFaso#BF.NR0c2NRNahouri000017NewWorld#1120c2LALaos00001BWashington#0570c2SASkagit000018Indiana#1590c2TPTipton00001ENorthCarolina#1990c2YNYancey00001FVirginia#1010c2KWKing William00001DRhodeIsland#0010c2BRBristol000018Kansas#1530c2RARawlins00001DIllinois#1890c2WSWashington00001BMissouri#1090c2LALawrence000021California#0130c2CNContra costa000018Texas#1810c2GRYGrayson000017Ohio#1430c2SASandusky000018Nebraska#1130c2LOLogan00001BMinnesota#0410c2DUDouglas00001CKentucky#0250c2BHBreathitt000018Michigan#0350c2CLClare00001ESpainProvinces#0450c2SOSoria00001BWisconsin#0970c2PRPortage000027Manitoba#CA.MB.WI0c2WIWinnipeq Region000017China#190c2LNLiaoning000017Belarus#030c2HRHrodna00001FNorthIreland#160c2FEFermanagh00001ALuxembourg#050c2MEMersch000014Wales#170c2POPowys00001BRomania#310c2SJS&#259;laj000018Jamacia#020c2HAHanover000019Colombia#030c2ARAArauca000017Ecuador#170c2YPastaza000023NorthKorea#070c2HWBHwanghae-bukto000017Turkey#860c2ARArdahan000018SouthKorea#010c2CJJeju000024WorldwithCountries#890c2ZWZimbabwe00001DLiechtenstein#020c2ESEschen00002BNewBrunswick#CA.NB.MR0c2MRMiramichi River00002APolandCounties#PL.SL.CM0c2SCMCzestochowa000025PolandCounties#PL.PM.GM0c2PGMGdansk000028PolandCounties#PL.PD.BM0c2PBMBialystok000027CentralAmerica2#CE.PR0c2PRPuerto Rico00001CSenegal#SN.DB0c2DBDiourbel000019Uganda#UG.MN0c2MNMukono00001EThailand#TH.SB0c2SBSing Buri000031DemocraticRepublicoftheCongo#CD.SK0c2SKSud-Kivu00001CNamibia#NA.OK0c2OKOkavango000018Nigeria#NG.ON0c2ONOndo000018Alabama#1310c2WIWilcox00001BNewWorld#1130c2MYMalaysia000014Nevada#0230c2NYNye000016Iowa#0270c2CRCarroll000018Africa#0320c2MAMorocco00001BTexas#3630c2PALPalo Pinto00001ALouisiana#1070c2TETensas000021NorthCarolina#0190c2BSBrunswick000017Georgia#1710c2LALamar00001AKentucky#2070c2RSRussell000018Illinois#0090c2BRBrown00001EMississippi#1170c2PSPrentiss000027PuertoRico#1270c2SJSan Juan (capital)00001DPennsylvania#0830c2MKMcKean000019Texas#0010c2ANDAnderson00001AIdaho#0190c2BVBonneville00001BArkansas#1070c2PHPhillips000022SpainProvinces#0460c2TATarragona000018Oregon#0210c2GIGilliam00001BTennessee#0230c2CSChester00001BColorado#1150c2SESedgwick00001BMontana#0850c2RORoosevelt00001ELiechtenstein#030c2GAGamprin000019China#200c2NMNei Mongol000019Belarus#040c2MAMahilyow00001BNorthIreland#170c2LRLarne00001BMalta#010c2GHG&#295;awdex00001CLuxembourg#060c2CLClervaux000018Taiwan#010c2CGChanghua000021Wales#180c2RTRhondda Cynon Taff00001ARomania#320c2SMSatu Mare000023Colombia#040c2ATLAtl&aacute;ntico000019Ecuador#180c2PPichincha000021NorthKorea#080c2KAEKaes&#335;ng00001BTurkey#870c2BRBart&#305;n000022WorldwithCountries#900c2GMGambia000029CentralAfricanRepublic#CF.VK0c2VKVakaga000018Somalia#SO.BR0c2BRBari00001DRussia#RU.SV0c2SVSverdlovsk000017Russia#RU.TL0c2TLTula000018Uganda#UG.NE0c2NENebbi000020Russia#RU.BK0c2BKBashkortostan000017Iran#IR.SM0c2SMSemnan00001EVietnam#VN.TG0c2TGTien Giang000049Ethiopia#ET.SN0c2SNSouthern (Nations,Nationalities and People's Region)000025DenmarkRegion#DK.ND0c2NDNordjylland000028WesternSahara#AF.WS0c2WSWestern Sahara00001BEthiopia#ET.AM0c2AMAmhara000017Togo#TG.CE0c2CECentre00001BEurope2#EU.GU0c2GUGuersey00001BNewWorld#1140c2MNMongolia00001DWashington#0590c2SKSkamania000017Indiana#1610c2UNUnion00001CVirginia#1030c2LALancaster00001BAfrica#0330c2MZMozambique00001ARhodeIsland#0030c2KEKent000015Kansas#1550c2RNReno000018Illinois#1910c2WYWayne000018Missouri#1110c2LELewis00001ECalifornia#0150c2DEDel Norte000016Texas#1830c2GREGregg000015Ohio#1450c2SCScioto000017Nebraska#1150c2LULoup00001DMinnesota#0430c2FAFaribault00001FKentucky#0270c2BGBreckinridge00001AMichigan#0370c2CNClinton00001FSpainProvinces#0470c2TETeruel000019Wisconsin#0990c2PCPrice00001DLiechtenstein#040c2MAMauren00001AChina#210c2NXNingxia Hui00001ENorthIreland#180c2LMLimavady00001CFinland#010c2AL&Aring;land000016Malta#020c2KEKemmuna00001CLuxembourg#070c2DIDiekirch000016Taiwan#020c2CHChiayi000019Lithuania#560c2ALAlytus000016Wales#190c2SWSwansea000016Romania#330c2SBSibiu00001BJamacia#040c2MAManchester00001AEcuador#190c2TTungurahua000024NorthKorea#090c2KANKangw&#335;n-do00001FTurkey#880c2IGI&#287;d&#305;r000020SouthKorea#030c2CBJeollabuk-do000021WorldwithCountries#910c2CGCongo000023MarshallIsland#MH.MH.EE0c2EEEbeya000024Alberta#CA.AB.AS0c2ASAlberta South00002CDistrictofColumbia#US.DC.SE0c2SESouth East00001ARwanda#RW.OU0c2OUWestern00001BLaos#LA.XS0c2XSXaisomboun000022Guyana#GY.PT0c2PTPotaro-Siparuni000018Jordan#JO.AJ0c2AJAjlun00001BRussia#RU.BL0c2BLBelgorod00001AChina2#CN.QH0c2QHQinghai00001DVietnam#VN.TH0c2THThanh Hoa00001BThailand#TH.RN0c2RNRanong00001BEthiopia#ET.SO0c2SOSomali000019Lebanon#LE.BI0c2BIBeqaa000021Lebanon#LE.AS0c2ASNorth Lebanon00001DVietnam#VN.BG0c2BGBac Giang000022Thailand#TH.AC0c2ACAmnat Charoen000026BurkinaFaso#BF.PA0c2PAPassor&eacute;000019Montana#0870c2RSRosebud000019Alabama#1330c2WNWinston000018NewWorld#1150c2NPNepal000013Iowa#0290c2CSCass000018Africa#0340c2NANamibia000017Texas#3650c2PANPanola00001ELouisiana#1090c2TRTerrebonne000020NorthCarolina#0210c2BUBuncombe000018Georgia#1730c2LNLanier00001FAlaska#0130c2AEAleutians East000018Kentucky#2090c2SCScott000019Illinois#0110c2BUBureau00001DMississippi#1190c2QUQuitman000020PuertoRico#1290c2SLSan Lorenzo00001DPennsylvania#0850c2MEMercer000018Texas#0030c2ANRAndrews000018Idaho#0210c2BUBoundary000017Arkansas#1090c2PIPike00001FSpainProvinces#0480c2TOToledo000016Oregon#0230c2GRGrant00001DTennessee#0250c2CBClaiborne000019Colorado#1170c2SUSummit00002DIceland#280c2SKSkagafjar&eth;ars&yacute;sla00001ELiechtenstein#050c2PLPlanken000016Belarus#060c2MIMinsk00002FSaintVincentandtheGrenadines#010c2CHCharlotte00001DNorthIreland#190c2LBLisburn000014Malta#030c2MAMalta00001BLuxembourg#080c2RERedange00001DTaiwan#030c2CSChiayi (City)000019Lithuania#570c2KUKaunas000016Wales#200c2TFTorfaen000018Romania#340c2SVSuceava000020Ecuador#200c2ZZamora-Chinchipe00001CTurkey#890c2KBKarab&uuml;k000025WorldwithCountries#920c2MIMauritius000032DemocraticRepublicoftheCongo#CD.BC0c2BCBas-Congo00001EHongKong#HK.TW0c2TWTsuen Wan000018Jordan#JO.BA0c2BABalqa00001CMacedonia#MK.KX0c2KXKarpos000025Macedonia#MK.MD0c2MDMakedonski Brod00001BRussia#RU.UD0c2UDUdmurtia000023CoteDivoire#CI.MC0c2MCMoyen-Comoe000017Oman#OM.JA0c2JADhofar00001ANamibia#NA.ON0c2ONOshana000026Ethiopia#ET.BE0c2BEBenshangul- Gumaz00001BAlgeria#DZ.MC0c2MCMascara00001BNewWorld#1160c2PKPakistan00001EWashington#0610c2SNSnohomish00001DIndiana#1630c2VAVanderburgh000016Virginia#1050c2LELee000016Africa#0350c2NENiger00001DRhodeIsland#0050c2NPNewport000019Kansas#1570c2RPRepublic000018Illinois#1930c2WHWhite00001AMissouri#1130c2LCLincoln00001ECalifornia#0170c2ELEl Dorado000017Texas#1850c2GRIGrimes000015Ohio#1470c2SESeneca00001CNebraska#1170c2MPMcPherson00001CMinnesota#0450c2FIFillmore00001AKentucky#0290c2BIBullitt00001BMichigan#0390c2CRCrawford000021SpainProvinces#0490c2VAValencia00001AWisconsin#1010c2RARacine000027WorldwithCountries#930c2AFAfghanistan00003CIceland#290c2SHSn&aelig;fellsnes-og Hnappadalss&yacute;sla00001ELiechtenstein#060c2RURuggell000019Belarus#070c2VIVitsebsk000032SaintVincentandtheGrenadines#020c2ANSaint Andrew000021NorthIreland#200c2MFMagherafelt000019Luxembourg#090c2WIWiltz000017Taiwan#040c2HHHsinchu000020Lithuania#580c2KLKlaip&#279;da000020Wales#210c2VGVale of Glamorgan00001ARomania#350c2TRTeleorman000028NorthKorea#110c2PYBP'y&#335;ngan-bukto000015Turkey#900c2KIKilis000025SouthKorea#050c2GBChungcheongbuk-do000027Alberta#CA.AB.CA0c2CACalgary and Area000023MarshallIsland#MH.MH.WH0c2WHWotho00001DMacedonia#MK.KY0c2KYKratovo00001CMacedonia#MK.LO0c2LOLozovo000026Sudan#SD.NB0c2NBNorth Bahr Al Ghazal000019Nepal#NP.GA0c2GAGandaki000018Russia#RU.TO0c2TOTomsk000016Libya#LY.SR0c2SRSurt000030FranceDepartment#FR.PO0c2POPyrenees Orientales00001DVietnam#VN.ST0c2STSoc Trang00001EGuinea#GN.BK0c2BKBok&eacute;00001EVietnam#VN.BI0c2BIBinh Duong000021Turkmenistan#TM.DA0c2DADashoguz000024Morocco#MA.MT0c2MTMeknes-Tafilalet000019Algeria#DZ.MD0c2MDMedea000019Montana#0890c2SASanders00001ENewWorld#1170c2PHPhilippines000019Nevada#0270c2PEPershing000014Iowa#0310c2CECedar000018Africa#0360c2NGNigeria000017Texas#3670c2PARParker000019Louisiana#1110c2UNUnion000026Virginia#8300c2WLWilliamsburg (City)00001DNorthCarolina#0230c2BKBurke000019Georgia#1750c2LULaurens000019Kentucky#2110c2SHShelby00001AIllinois#0130c2CACalhoun00001CMississippi#1210c2RARankin000018Europe#0010c2ALAlbania000029PuertoRico#1310c2SSSan Sebasti&aacute;n00001EPennsylvania#0870c2MIMifflin000019Texas#0050c2ANGAngelina000015Idaho#0230c2BTButte00001BArkansas#1110c2POPoinsett000023SpainProvinces#0500c2VLValladolid000017Oregon#0250c2HAHarney000018Tennessee#0270c2CYClay000019Colorado#1190c2TETeller000023WorldwithCountries#940c2AMArmenia000024Iceland#300c2STStrandas&yacute;sla00001DLiechtenstein#070c2SNSchaan000015China#240c2SXShanxi000031SaintVincentandtheGrenadines#030c2DASaint David00001BNorthIreland#210c2MYMoyle000027USASouthEastRegion#280c2MSMississippi00001BLuxembourg#100c2VIVianden00001ETaiwan#050c2HSHsinchu (City)000023Lithuania#590c2MRMarijampol&#279;000016Wales#220c2WXWrexham00001BRomania#360c2TMTimi&#351;000019Jamacia#070c2POPortland000021Colombia#080c2CAQCaquet&aacute;000020Ecuador#220c2USucumb&iacute;os000024NorthKorea#120c2PYOP'y&#335;ngyang000018Turkey#910c2OSOsmaniye00001ESouthKorea#060c2KWGangwon-do00001FKazakhstan#KZ.PA0c2PAPavlodar000018Jordan#JO.AM0c2AMAmman000023Macedonia#MK.KZ0c2KZKriva Palanka000021Libya#LY.SS0c2SSSabratah Surman000024Tibet#TI.NP0c2NPNyinchi Prefecture00001DThailand#TH.SG0c2SGSongkhla000038Pakistan#PK.TA0c2TAFederally Administered Tribal Areas000016Nauru#NR.AI0c2AIAiwo000018Nigeria#NG.OS0c2OSOsun00001BEurope2#EU.IE0c2IEIreland00002FSaudiArabia#SA.HS0c2HSAl Hudud Ash Shamaliyah00001CMacedonia#MK.MG0c2MGMogila00001ESudan#SD.ND0c2NDNorth Darfur00001DPhilippines#PH.LE0c2LELeyte000019Uganda#UG.MT0c2MTMoroto000017Iran#IR.TH0c2THTehran000020Thailand#TH.SH0c2SHSuphan Buri00001BEthiopia#ET.TI0c2TITigray00001BVietnam#VN.BK0c2BKBac Can000020Pakistan#PK.BA0c2BABalochistan000020Mauritius#MU.GP0c2GPGrand Port00001EBurkinaFaso#BF.NY0c2NYNayala000025NewWorld#1180c2RURussian Federation00001CWashington#0630c2SPSpokane00001CIndiana#1650c2VEVermillion00001AVirginia#1070c2LOLoudoun000020RhodeIsland#0070c2PRProvidence000015Kansas#1590c2RCRice00001CIllinois#1950c2WTWhiteside000017Missouri#1150c2LNLinn00001BCalifornia#0190c2FRFresno00001FAlaska#0160c2AWAleutians West00001ATexas#1870c2GUAGuadalupe000021Virginia#6500c2HAHampton (City)000015Ohio#1490c2SHShelby00001ANebraska#1190c2MAMadison000018Europe#0020c2ADAndorra00001CMinnesota#0470c2FRFreeborn000019Kentucky#0310c2BUButler000018Michigan#0410c2DEDelta00001FSpainProvinces#0510c2ZAZamora00001CWisconsin#1030c2RIRichland000027NewCaledonia#NC.SU.BP0c2BPBoulouparis000026WorldwithCountries#950c2AZAzerbaijan000032Iceland#310c2SMSu&eth;ur-M&uacute;las&yacute;sla000023Liechtenstein#080c2SBSchellenberg000017China#250c2SDShandong000032SaintVincentandtheGrenadines#040c2GESaint George000026NorthIreland#220c2NMNewry and Mourne00001ELuxembourg#110c2ECEchternach000017Taiwan#060c2HLHualien000026Lithuania#600c2PNPanev&#279;&#382;ys000017Romania#370c2TLTulcea00001DJamacia#080c2SDSaint Andrew000018Colombia#090c2CAUCauca000014Ecuador#230c2NNapo000020NorthKorea#130c2YANYanggang-do000016Turkey#920c2YLYalova00001BFiji#FJ.NO.MC0c2MCMacuata000023MarshallIsland#MH.MH.WJ0c2WJWotje00001EAlgeria#DZ.MG0c2MGMostaganem00001CSamoa #WS.VS0c2VSVaisigano000020Guinea#GN.TO0c2TOTougu&eacute;00001BUganda#UG.NK0c2NKNakaseke00001EThailand#TH.SI0c2SISi Sa Ket000020Kuwait#KW.FA0c2FAAl Farwaniyah000018Iran#IR.AR0c2ARArdebil00001CVietnam#VN.BL0c2BLBac Lieu00001CVietnam#VN.CB0c2CBCao Bang000017Nauru#NR.BA0c2BABaiti00001DColorado#1210c2WAWashington00001AMontana#0910c2SHSheridan00001CNewWorld#1190c2SGSingapore000017Nevada#0290c2STStorey00001AIowa#0330c2CGCerro Gordo000017Africa#0380c2RWRwanda000017Texas#3690c2PAMParmer00001DLouisiana#1130c2VEVermilion000020NorthCarolina#0250c2CACabarrus000015Georgia#1770c2LELee00001AKentucky#2130c2SISimpson00001AIllinois#0150c2CRCarroll00001BMississippi#1230c2SCScott000018Europe#0030c2ATAustria000021PuertoRico#1330c2SISanta Isabel00001DPennsylvania#0890c2MOMonroe000018Texas#0070c2ARAAransas000015Idaho#0250c2CACamas000017Arkansas#1130c2PLPolk000021SpainProvinces#0520c2ZRZaragoza00001BOregon#0270c2HRHood River000019Tennessee#0290c2CKCocke000032MadagascarRegions#MG.FI.AA0c2AAAtsimo-Atsinanana000026WorldwithCountries#960c2BDBangladesh000019USA#RI0c2RIRhode Island000036Iceland#320c2SUSu&eth;ur-&THORN;ingeyjars&yacute;sla00001ELiechtenstein#090c2TNTriesen000016China#260c2SAShaanxi000033SaintVincentandtheGrenadines#050c2PASaint Patrick000022NorthIreland#230c2NWNewtownabbey000018Finland#060c2LALapland000020Luxembourg#120c2GRGrevenmacher00001FTaiwan#070c2KHKaohsiung(City)000022Lithuania#610c2SA&Scaron;iauliai000017Indonesia#010c2ACAceh000017Romania#380c2VSVaslui00001AJamacia#090c2SNSaint Ann000018Colombia#100c2CESCesar000018Ecuador#240c2DOrellana00001ANorthKorea#140c2NAMNampo00001ATurkey#930c2DUD&uuml;zce000017Somalia#SO.BY0c2BYBay00001DZambia#ZM.CO0c2COCopperbelt00001EPhilippines#PH.LG0c2LGLaguna000022PapuaNewGuinea#PG.CE0c2CECentral00001ARussia#RU.BR0c2BRBryansk00001CVietnam#VN.TN0c2TNTay Ninh00001FThailand#TH.RT0c2RTRatchaburi00001BNamibia#NA.OS0c2OSOmusati00001BNigeria#NG.PL0c2PLPlateau000018Wisconsin#1050c2RORock00001CNewWorld#1200c2LKSri Lanka00001CWashington#0650c2STStevens000016Indiana#1670c2VIVigo000019Virginia#1090c2LULouisa000020RhodeIsland#0090c2WAWashington000016Kansas#1610c2RLRiley000017Illinois#1970c2WIWill00001DMissouri#1170c2LILivingston00001ACalifornia#0210c2GLGlenn000015Texas#1890c2HAEHale000014Ohio#1510c2STStark00001ANebraska#1210c2MEMerrick000018Europe#0040c2BYBelarus00001BMinnesota#0490c2GOGoodhue00001BKentucky#0330c2CACaldwell00001CMichigan#0430c2DIDickinson000023NewCaledonia#NC.SU.BR0c2BRBourail000022WorldwithCountries#970c2BTBhutan000022Liechtenstein#100c2TBTriesenberg000030SaintVincentandtheGrenadines#060c2GTGrenadines000020NorthIreland#240c2NDNorth Down00001ALuxembourg#130c2RMRemich000019Taiwan#080c2KCKaohsiung00001FLithuania#620c2TATaurag&#279;000017Indonesia#020c2BABali00001DRomania#390c2VLV&acirc;lcea000020Jamacia#100c2SCSaint Catherine00001FColombia#110c2CHOChoc&oacute;000028NorthKorea#150c2PYNP'y&#335;ngan-namdo000016Iraq#010c2ANAl-Anbar000019Senegal#SN.DK0c2DKDakar00001FLesotho#LS.BB0c2BBButha-Buthe000018Jordan#JO.AQ0c2AQAqaba00001CRussia#RU.TT0c2TTTatarstan00001FUK7#UK.CI0c2CIChannel Islands00001CEastTimor#TL.ER0c2ERErmera00001CUganda#UG.NM0c2NMNamutumba000025Libya#LY.TM0c2TMTarhunah Masallatah00001CTunisia#TN.JE0c2JEJendouba00001CThailand#TH.SK0c2SKSa Kaeo000024Qatar#QA.MS0c2MSMadinat Ach Shamal00001CVietnam#VN.BN0c2BNBac Ninh000021SriLanka#LK.NW0c2NWNuwara Eliya00001CNamibia#NA.OT0c2OTOshikoto000017Colorado#1230c2WLWeld00001CMontana#0930c2SBSilver Bow00001DNewWorld#1210c2TJTajikistan000017Nevada#0310c2WAWashoe000017Iowa#0350c2CHCherokee000026Africa#0400c2STSao Tome and Principe000016Texas#3710c2PECPecos00001ALouisiana#1150c2VNVernon000020NorthCarolina#0270c2CLCaldwell000019Georgia#1790c2LILiberty00001AKentucky#2150c2SPSpencer000017Illinois#0170c2CSCass00001DMississippi#1250c2SHSharkey000018Europe#0050c2BEBelgium00001DPuertoRico#1350c2TAToa Alta000021Pennsylvania#0910c2MTMontgomery000017Texas#0090c2ARCArcher000016Idaho#0270c2CNCanyon000017Arkansas#1150c2PPPope000018Oregon#0290c2JAJackson00001ATennessee#0310c2CFCoffee000026Manitoba#CA.MB.WR0c2WRWestern Region000022WorldwithCountries#980c2BNBrunei000035Iceland#340c2VBVestur-Bar&eth;astrandars&yacute;sla00001CLiechtenstein#110c2VAVaduz00001BNorthIreland#250c2OMOmagh000015Finland#080c2OUOulu00001ETaiwan#090c2CLKeelung (City)000021Lithuania#630c2TETel&scaron;iai00001BIndonesia#030c2BEBengkulu00002ABritishColumbia#010c2ACAlberni-Clayoquot000018Romania#400c2VNVrancea000020Jamacia#110c2SESaint Elizabeth000021Colombia#120c2CORC&oacute;rdoba000017Iraq#020c2BAAl-Basrah000019SouthKorea#100c2PUBusan000033NorthWestTerritories#CA.NT.DC0c2DCDiamond Capital000028PolandCounties#PL.DS.WM0c2DWMWalbrzych000029Macedonia#MK.MK0c2MKMakedonska Kamenica000026Macedonia#MK.NA0c2NAStaro Nagoricane00001CComoros #KM.AN0c2ANAnjouan000017Russia#RU.TU0c2TUTuva00001AMongolia#MN.HD0c2HDKhovd00001FSamoa #WS.FA0c2FAFaasaleleaga00002DLibya#LY.TN0c2TNTajura wa an Nawahi Al Arba00001BIran#IR.BK0c2BKKermanshah000018Wisconsin#1070c2RURusk00001BNewWorld#1220c2THThailand00001DWashington#0670c2THThurston000018Indiana#1690c2WAWabash00001CVirginia#1110c2LNLunenburg000018Africa#0410c2SNSenegal00002FAlaska#2010c2PWPrince of Wales-Outer Ketchika000016Kansas#1630c2RORooks00001DIllinois#1990c2WLWilliamson00001BMissouri#1190c2MNMcDonald00001DCalifornia#0230c2HUHumboldt00001AAlaska#0200c2ANAnchorage000015Texas#1910c2HALHall000015Ohio#1530c2SUSummit00001ANebraska#1230c2MOMorrill000027Europe#0060c2BABosnia and Herzegovina000019Minnesota#0510c2GRGrant00001BKentucky#0350c2CLCalloway000018Michigan#0450c2EAEaton000026Manitoba#CA.MB.ER0c2EREastern Region000023NewCaledonia#NC.NO.KA0c2KAKouaoua00002BWorldwithCountries#990c2MMBurma (Myanmar)000034Iceland#350c2VHVestur-H&uacute;navatnss&yacute;sla000015China#290c2YNYunnan00001ENorthIreland#260c2SBStrabane000019Bangladesh#810c2DADhaka00001CSuriname#100c2BRBrokopondo000016Taiwan#100c2KMKinmen000018Lithuania#640c2UTUtena00001AIndonesia#040c2JKJakarta000028BritishColumbia#020c2BNBulkley-Nechako000028Romania#410c2CLC&#259;l&#259;ra&#351;i00001CJamacia#120c2SJSaint James000028NorthKorea#170c2HABHamgy&#335;ng-bukto00001EIraq#030c2MUAl-Muthann&#257;000019SouthKorea#110c2SOSeoul000028PolandCounties#PL.KP.BM0c2KBMBydgoszcz000019Algeria#DZ.NA0c2NANaama000023Tanzania#TZ.ZN0c2ZNZanzibar North000018Angola#AO.HL0c2HLHuila000021PapuaNewGuinea#PG.CH0c2CHChimbu000017Russia#RU.TV0c2TVTver00001CRussia#RU.UL0c2ULUlyanovsk000017Uganda#UG.MY0c2MYMoyo00001BRussia#RU.BU0c2BUBuryatia00001BRussia#RU.CK0c2CKChukotka00001BRussia#RU.DA0c2DADagestan00001FVietnam#VN.TQ0c2TQTuyen Quang000027CaymanIslands#KY.SO0c2SOLittle Cayman000024Thailand#TH.SM0c2SMSamut Songkhram000020Madagascar#MG.MA0c2MAMahajanga00001EVietnam#VN.BP0c2BPBinh Phuoc000017Nigeria#NG.OY0c2OYOyo00001BEurope2#EU.HU0c2HUHungary00001CTennessee#0330c2COCrockett000017Colorado#1250c2YUYuma00001CMontana#0950c2SWStillwater00001FNewWorld#1230c2TMTurkmenistan00001BNevada#0330c2WPWhite Pine000018Iowa#0370c2CKChickasaw00001AAfrica#0420c2SYSeycelles000015Texas#3730c2POLPolk00001ELouisiana#1170c2WAWashington00001ENorthCarolina#0290c2CMCamden000019Georgia#1810c2LCLincoln000019Kentucky#2170c2TATaylor00001CIllinois#0190c2CHChampaign00001DMississippi#1270c2SISimpson000019Europe#0070c2BGBulgaria00001DPuertoRico#1370c2TBToa Baja00001EPennsylvania#0930c2MUMontour00001ATexas#0110c2ARSArmstrong000017Idaho#0290c2CRCaribou00001AArkansas#1170c2PRPrairie00001AOregon#0310c2JEJefferson00001BUSA#SC0c2SCSouth Carolina000039Iceland#360c2VIVestur-&Iacute;safjar&eth;ars&yacute;sla000018China#300c2GDGuangdong00001ABangladesh#820c2KHKhulna000025Australia#NT0c2NTNorthern Territory00001CSuriname#110c2CMCommewijne00001ATaiwan#110c2LKLienchiang00001ALithuania#650c2VLVilnius000018Indonesia#050c2JAJambi000020BritishColumbia#030c2CACapital000018Romania#420c2GRGiurgiu00001BJamacia#130c2SMSaint Mary00001BColombia#140c2GUVGuaviare00001FNorthKorea#180c2NAJRas&#335;n000020Iraq#040c2QAAl-Q&#257;disiyyah00001BSouthKorea#120c2INIncheon000026MarshallIsland#MH.MH.EN0c2ENEnewetak000024PolandCounties#PL.KP.TO0c2KTOTorun00001BFiji#FJ.WE.LT0c2LTLautoka000018Algeria#DZ.ML0c2MLMila000019Angola#AO.HM0c2HMHuambo00001CGuineaBissau#GW.OI0c2OIOio000019Lesotho#LS.BE0c2BEBerea00001AJordan#JO.AT0c2ATTafilah000023Philippines#PH.MA0c2MAMaguindanao00001CGabon#GA.WN0c2WNWoleu-Ntem000018Niger#NE.NI0c2NINiamey00001CHongKong#HK.EA0c2EAEastern000020Uganda#UG.NP0c2NPNakapiripirit00001ERussia#RU.CL0c2CLChelyabinsk000021Thailand#TH.SN0c2SNSakon Nakhon00001BSyria#SY.RA0c2RAAr Raqqah00001DNamibia#NA.OW0c2OWOhangwena00001DWisconsin#1090c2SCSt. Croix00001DNewWorld#1240c2UZUzbekistan00001EWashington#0690c2WKWahkiakum000018Indiana#1710c2WRWarren00001AVirginia#1130c2MAMadison00001DAfrica#0430c2SLSierra Leone000015Kansas#1650c2RHRush00001CIllinois#2010c2WBWinnebago000018Missouri#1210c2MOMacon00001DCalifornia#0250c2IMImperial000019Texas#1930c2HAMHamilton000017Ohio#1550c2TRTrumbull000018Nebraska#1250c2NANance000019Georgia#0010c2APAppling000018Europe#0080c2HYCroatia00001CMinnesota#0530c2HEHennepin00001EAustralia2#VIC0c2VICVictoria00001BKentucky#0370c2CBCampbell000018Michigan#0470c2EMEmmet000019USA#SD0c2SDSouth Dakota00002FIceland#370c2VSVestur-Skaftafellss&yacute;sla000023USARegion#010c2NENorthEast Region000015China#310c2HAHainan000015World#EU0c2EUEurope00001CBangladesh#830c2RJRajshahi000019Suriname#120c2CRCoronie000016Taiwan#120c2MLMiaoli000020BritishColumbia#040c2CRCariboo000016Romania#430c2IFIlfov00001DJamacia#140c2STSaint Thomas000021Colombia#150c2GUAGuain&iacute;a000023Iraq#050c2SUAs-Sulaym&#257;niyyah00001FArgentina#010c2BABuenos Aires00001FSouthKorea#130c2KGGyeonggi-do000020Europe2#EU.IM0c2IMIsles of Man00001FSaudiArabia#SA.JF0c2JFAl Jawf00001DHongKong#HK.WC0c2WCWan Chai000020Sudan#SD.NK0c2NKNorth Kurdufan00001FPhilippines#PH.MB0c2MBMasbate00001DMongolia#MN.HG0c2HGKhovsgol000022CoteDivoire#CI.NC0c2NCN'zi-Comoe000022Cyprus2#CY.TC0c2TCTurkish Cyprus00001BThailand#TH.RY0c2RYRayong00001EThailand#TH.SO0c2SOSukhothai000026TrinidadandTobago#TT.VI0c2VIVictoria00001BVietnam#VN.BR0c2BRBen Tre00001ETennessee#0350c2CMCumberland00001DMontana#0970c2SGSweet Grass00001ANewWorld#1250c2VNVietnam000015Iowa#0390c2CLClarke000018Africa#0440c2SOSomalia000017Texas#3750c2POTPotter00001BLouisiana#1190c2WEWebster000020NorthCarolina#0310c2CRCarteret000016Georgia#1830c2LOLong000017Kentucky#2190c2TOTodd00001CIllinois#0210c2CIChristian00001BMississippi#1290c2SMSmith00001FEurope#0090c2CZCzech Republic000022PuertoRico#1390c2TJTrujillo Alto000022Pennsylvania#0950c2NONorthampton000019Texas#0130c2ATAAtascosa000016Idaho#0310c2CSCassia00001AArkansas#1190c2PUPulaski00001AOregon#0330c2JOJosephine000027NorthAmerica_WOCentral#0050c2CACanada000023USARegion#020c2NWNorthWest Region000016China#320c2SCSichuan00001EBangladesh#840c2CGChittagong00001BSuriname#130c2MAMarowijne000016Taiwan#130c2NTNantou00001FIndonesia#070c2JTCentral Java000026BritishColumbia#050c2CNCentral Coast000019Jamacia#150c2TRTrelawny000018Colombia#160c2HUIHuila000018Norway#010c2AKAkershus000018Iraq#060c2BBB&#257;bil00001CArgentina#020c2CTCatamarca000024SouthKorea#140c2KBGyeongsangbuk-do00001DBhutan#BT.PM0c2PMPemagatsel000031DemocraticRepublicoftheCongo#CD.BN0c2BNBandundu00001AZambia#ZM.EA0c2EAEastern00002APhilippines#PH.MC0c2MCOccidental Mindoro000019Russia#RU.TY0c2TYTyumen000028HongKong#HK.CW0c2CWCentral and Western00001BRussia#RU.CN0c2CNChechnya000022Vietnam#VN.TT0c2TTThua Thien Hue00001AGuinea#GN.CK0c2CKConakry000021Thailand#TH.SP0c2SPSamut Prakan000019Nauru#NR.AR0c2ARAnibare000018Wisconsin#1110c2SASauk000019NewWorld#1260c2TWTaiwan000020Washington#0710c2WLWalla walla000019Indiana#1730c2WIWarrick00001AVirginia#1150c2MTMathews00001DAfrica#0450c2ZASouth Africa000018Kansas#1670c2RSRussell00001BIllinois#2030c2WFWoodford00001AMissouri#1230c2MDMadison000019California#0270c2INInyo000019Texas#1950c2HANHansford000019Ohio#1570c2TUTuscarawas000019Nebraska#1270c2NENemaha00001AGeorgia#0030c2ATAtkinson000018Europe#0100c2DKDenmark00001BMinnesota#0550c2HUHouston00001BKentucky#0390c2CRCarlisle00001AMichigan#0490c2GEGenesee000019SouthKorea#150c2TGDaegu000023USARegion#030c2SESouthEast Region00002AUSASouthEastRegion#370c2NCNorth Carolina00001BBangladesh#850c2BABarisal000021Finland#130c2SFSouthern Finland00001ASuriname#140c2NINickerie000016Taiwan#140c2PHPenghu00001CIndonesia#080c2JIEast Java000029BritishColumbia#060c2CKCentral Kootenay000016Albania#400c2BRBerat00001DJamacia#160c2WEWestmoreland00001DColombia#170c2LAGLa Guajira00001ANorway#020c2AAAust-Agder00001AIraq#070c2BGBaghd&#257;d000018Argentina#030c2CCChaco000026PolandCounties#PL.DS.WR0c2DWRWroclaw000023FrenchGuiana#GF.CY.OU0c2OUOuanary00001BEurope2#EU.HY0c2HYCroatia00001AEurope2#EU.JE0c2JEJersey00001CBrunei#BN.TE0c2TETemburong00001ABhutan#BT.PN0c2PNPunakha000027Philippines#PH.LN0c2LNLanao del Norte00002APhilippines#PH.MD0c2MDMisamis Occidental00001FMongolia#MN.GS0c2GSGovisumber00001AChina2#CN.SA0c2SAShaanxi000019Guinea#GN.DB0c2DBDabola00001AThailand#TH.TG0c2TGTrang00001DSyria#SY.RD0c2RDRif Dimashq00001CTennessee#0370c2DADavidson000017Montana#0990c2TETeton00001CNewWorld#1270c2HKHong Kong000013Iowa#0410c2CYClay000016Africa#0460c2SDSudan000019Texas#3770c2PREPresidio000024Louisiana#1210c2WBWest Baton Rouge000024Virginia#8400c2WTWinchester (City)00001FNorthCarolina#0330c2CSCaswell000019Georgia#1850c2LWLowndes000018Kentucky#2210c2TRTrigg000018Illinois#0230c2CLClark00001BMississippi#1310c2STStone000018Europe#0110c2EEEstonia00001BPuertoRico#1410c2UTUtuado000025Pennsylvania#0970c2NTNorthumberland000017Texas#0150c2AUSAustin000015Idaho#0330c2CLClark00001BArkansas#1210c2RARandolph000018Oregon#0350c2KLKlamath000020SouthKorea#160c2CNJeollanam-do000023USARegion#040c2SWSouthWest Region000017Peru#010c2AMAAmazonas000018Uruguay#010c2ARArtigas00001ABangladesh#860c2SYSylhet000020Finland#140c2EFEastern Finland000016Suriname#150c2PRPara000018Taiwan#150c2PTPingtung000029BritishColumbia#070c2COCentral Okanagan00001BAlbania#410c2DIDib&euml;r000019Jamacia#170c2KIKingston000018Iraq#080c2DADah&#363;k000019Argentina#040c2CHChubut000019Fiji#FJ.WE.ND0c2NDNandi000024MarshallIsland#MH.MH.ER0c2ERErikub000020FrenchGuiana#GF.SL.MN0c2MNMana00001CBurkinaFaso#BF.PO0c2POPoni00002AMorocco#MA.OL0c2OLOued Ed Dahab-Lagouira00002FTanzania#TZ.ZS0c2ZSZanzibar Central and South000019Brunei#BN.BE0c2BEBelait00001EMacedonia#MK.NG0c2NGNegotino00001CRussia#RU.VG0c2VGVolgograd00001BUganda#UG.NT0c2NTNtungamo00001ATunisia#TN.KB0c2KBKebili00001CVietnam#VN.TV0c2TVTra Vinh000017Nauru#NR.UA0c2UAUaboe00001DThailand#TH.SR0c2SRSaraburi00001EVietnam#VN.BU0c2BUBinh Thuan00001BVietnam#VN.DA0c2DADa Nang000024SaoTomeandPrincipe#ST.LE0c2LELemba000018Nauru#NR.AT0c2ATAnetan00001AWisconsin#1130c2SWSawyer000018NewWorld#1280c2MOMacau00001CWashington#0730c2WAWhatcom00001CIndiana#1750c2WSWashington00001EVirginia#1170c2MEMecklenburg00001AAfrica#0470c2SZSwaziland000017Kansas#1690c2SASaline000019Missouri#1250c2MEMaries000019California#0290c2KEKern000019Texas#1970c2HARHardeman000026Virginia#6600c2HRHarrisonburg (City)000014Ohio#1590c2UNUnion00001BNebraska#1290c2NUNuckolls000017Georgia#0050c2BABacon000018Europe#0120c2FIFinland00001BMinnesota#0570c2HBHubbard00001AKentucky#0410c2COCarroll00001AMichigan#0510c2GLGladwin000027NewCaledonia#NC.NO.KG0c2KGKaala-Gomen000036SaintKittsandNevis#010c2CCChrist Church Nichola Town000021Argentina#050c2CBC&oacute;rdoba000025SouthKorea#170c2GNChungcheongnam-do000021USARegion#050c2CRCentral Region000015Peru#020c2ANCAncash00001AUruguay#020c2CACanelones000020Finland#150c2WFWestern Finland00001CSuriname#160c2PMParamaribo000018Taiwan#160c2THTaichung00001DIndonesia#100c2YOYogyakarta000029BritishColumbia#080c2CSColumbia-Shuswap00001CAlbania#420c2DRDurr&euml;s000017Colombia#190c2METMeta000018Norway#040c2BUBuskerud00001FIraq#090c2DQDh&#299; Q&#257;r000016Mali#ML.SG0c2SGSegou00001AZambia#ZM.WE0c2WEWestern000029Macedonia#MK.MR0c2MRMavrovo and Rostusa00001ASudan#SD.NO0c2NONorthern000019Uganda#UG.OK0c2OKKoboko00001AVanuatu#VU.PM0c2PMPenama00001AChina2#CN.SC0c2SCSichuan000022FranceDepartment#FR.RH0c2RHRhone00001DVietnam#VN.VC0c2VCVinh Phuc000021Thailand#TH.SS0c2SSSamut Sakhon000021Vietnam#VN.BV0c2BVBaRia-VungTau00001DVietnam#VN.DB0c2DBDien Bien00001BTennessee#0390c2DEDecatur000017Montana#1010c2TOToole00001ANewWorld#1290c2ALAlbania000016Iowa#0430c2CTClayton000019Africa#0480c2TZTanzania000016Texas#3790c2RAIRains000020Louisiana#1230c2WCWest Carroll00001FNorthCarolina#0350c2CTCatawba000019Georgia#1870c2LPLumpkin00001AKentucky#2230c2TITrimble000017Illinois#0250c2CYClay00001FMississippi#1330c2SUSunflower000017Europe#0130c2FRFrance00001EPuertoRico#1430c2VAVega Alta00001CPennsylvania#0990c2PEPerry000017Texas#0170c2BAIBailey00001AIdaho#0350c2CWClearwater00001EArkansas#1230c2SFSt. Francis000015Oregon#0370c2LALake000032SaintKittsandNevis#020c2ASSaint Anne Sandy Point00001DArgentina#060c2CNCorrientes00001BSouthKorea#180c2KJGwangju000014China#360c2TBTibet000017Peru#030c2APUApurimac00001CUruguay#030c2CLCerro Largo00001BSuriname#170c2SASaramacca000022USANorthWestRegion#020c2AKAlaska00001FTaiwan#170c2TGTaichung (City)000022Indonesia#110c2KBWest Kalimantan000029BritishColumbia#090c2CMComox-Strathcona000018Albania#430c2ELElbasan000020Colombia#200c2NARNari&ntilde;o000018Norway#050c2FIFinnmark00001EIraq#100c2DIDiy&#257;l&#257;00002DSierraLeone#SL.WE.WR0c2WRWestern Area Rural000027FrenchGuiana#GF.SL.MP0c2MPMaripasoula000038NorthWestTerritories#CA.NT.WB0c2WBWood Buffalo Country00001CMauritania#MR.AD0c2ADAdrar000018Jordan#JO.AZ0c2AZZarqa00001DMacedonia#MK.NI0c2NIVinitsa000020CoteDivoire#CI.MR0c2MRMarahoue00001AGabon#GA.ES0c2ESEstuaire00001BChina2#CN.SD0c2SDShandong000018Guinea#GN.CO0c2COCoyah000020Thailand#TH.ST0c2STSurat Thani00001BLibya#LY.BU0c2BUAl Butnan000018Iran#IR.BS0c2BSBushehr00001AVietnam#VN.CM0c2CMCa Mau00001BVietnam#VN.DC0c2DCDac Lac00001BWisconsin#1150c2SHShawano00001ANewWorld#1300c2ADAndorra00001CWashington#0750c2WHWhitman000017Indiana#1770c2WYWayne00001CVirginia#1190c2MIMiddlesex000015Africa#0490c2TGTogo000016Kansas#1710c2SCScott000019Missouri#1270c2MAMarion00001ACalifornia#0310c2KIKings000017Texas#1990c2HADHardin000017Ohio#1610c2VWVan Wert00001CNetherland#0010c2DRDrenthe000017Nebraska#1310c2OTOtoe000017Georgia#0070c2BKBaker000018Europe#0140c2DEGermany00001AMinnesota#0590c2ISIsanti000019Kentucky#0430c2CTCarter00001AMichigan#0530c2GOGogebic000033SaintKittsandNevis#030c2GBSaint George Basseterre000023Argentina#070c2DFDistrito Federal00001BSouthKorea#190c2TJDaejeon000017Peru#040c2AREArequipa000018Uruguay#040c2COColonia00001CSuriname#180c2SISipaliwini000016Taiwan#180c2TATainan000023Indonesia#120c2KSSouth Kalimantan000028BritishColumbia#100c2CVCowichan Valley000015Albania#440c2FRFier000025Colombia#210c2NSANorte de Santander000017Norway#060c2HEHedmark000018Iraq#110c2ARArb&#299;l000025CaymanIslands#KY.CB0c2CBCayman Brac00001EThailand#TH.AT0c2ATAng Thong00001ACongo#CG.PL0c2PLPlateaux00001BEurope2#EU.IS0c2ISIceland000019Algeria#DZ.MS0c2MSMsila00001DLiberia#LR.RG0c2RGRiver Gee000017Bhutan#BT.PR0c2PRParo000019Laos#LA.HO0c2HOHouaphan000017Benin#BJ.OU0c2OUOueme00001FVietnam#VN.TY0c2TYThai Nguyen00001AThailand#TH.SU0c2SUSurin000018Thailand#TH.TK0c2TKTak00001BVietnam#VN.CN0c2CNCan Tho00001ATennessee#0410c2DKDeKalb00001AMontana#1030c2TRTreasure00001ANewWorld#1310c2ATAustria000016Iowa#0450c2CNClinton000018Texas#3810c2RANRandall000022Louisiana#1250c2WFWest Feliciana00001FNorthCarolina#0370c2CHChatham00001AGeorgia#1890c2MCMcduffie000018Kentucky#2250c2UNUnion00001ENetherland#0020c2FLFlevoland00001AIllinois#0270c2CNClinton000022Mississippi#1350c2TATallahatchie000017Europe#0150c2GRGreece00001EPuertoRico#1450c2VBVega Baja000023Pennsylvania#1010c2PHPhiladelphia000018Texas#0190c2BANBandera000016Idaho#0370c2CUCuster000019Arkansas#1250c2SASaline000015Oregon#0390c2LELane00002FMadagascarRegions#MG.FI.AM0c2AMAmoron'i Mania000033SaintKittsandNevis#040c2GGSaint George Gingerland000024Argentina#080c2EREntre R&iacute;os000024SouthKorea#200c2KNGyeongsangnam-do000017Peru#050c2AYAAyacucho000018Uruguay#050c2DUDurazno000018Suriname#190c2WAWanica00001DTaiwan#190c2TNTainan (City)000025Indonesia#130c2KTCentral Kalimantan000026BritishColumbia#110c2EKEast Kootenay000021Albania#450c2GJGjirokast&euml;r00001BColombia#220c2PUTPutumayo000019Norway#070c2HOHordaland000015Iraq#120c2KAKarbala000019Europe2#EU.IT0c2ITItaly000022Tanzania#TZ.ZW0c2ZWZanzibar West00001DUzbekistan#UZ.JI0c2JIJizzax000015UK7#UK.WA0c2WAWales000025Philippines#PH.LS0c2LSLanao del Sur00002FCentralAmerica2#CE.AG0c2AGAntigua and Barbuda00001CMongolia#MN.HN0c2HNKhentii000018Uganda#UG.PD0c2PDPader000019Benin#BJ.PL0c2PLPlateau000017Tunisia#TN.KF0c2KFKef00001CLibya#LY.BW0c2BWBani Walid00001DWisconsin#1170c2SESheboygan00001ANewWorld#1320c2BYBelarus00001BWashington#0770c2YAYakima000017Indiana#1790c2WEWells00001DVirginia#1210c2MOMontgomery000018Africa#0510c2TNTunisia000019Kansas#1730c2SGSedgwick000019Missouri#1290c2MCMercer000019California#0330c2LALake000017Texas#2010c2HASHarris000015Ohio#1630c2VIVinton00001ENetherland#0030c2FRFriesland000019Nebraska#1330c2PAPawnee000019Georgia#0090c2BDBaldwin000018Europe#0160c2HUHungary00001AMinnesota#0610c2ITItasca000018Kentucky#0450c2CSCasey000021Michigan#0550c2GTGrand Traverse000027MadagascarRegions#MG.TL.AD0c2ADAndroy000030SaintKittsandNevis#050c2JWSaint James Windward00001AArgentina#090c2FMFormosa000019SouthKorea#210c2ULUlsan000018Peru#060c2CAJCajamarca000017Uruguay#060c2FSFlores000013USA#AK0c2AKAlaska000016Taiwan#200c2TPTaipei000022Indonesia#140c2KIEast Kalimantan000026BritishColumbia#120c2FVFraser Valley000022Albania#460c2KOKor&ccedil;&euml;000021Colombia#230c2QUIQuind&iacute;o000026Norway#080c2MRM&oslash;re og Romsdal000017Iraq#130c2TSAt-Ta'mim00002DSierraLeone#SL.WE.WU0c2WUWestern Area Urban00002CDistrictofColumbia#US.DC.SW0c2SWSouth West000015Nauru#NR.BO0c2BOBoe00001EThailand#TH.CB0c2CBChon Buri000018Mali#ML.SK0c2SKSikasso00001DLiberia#LR.RI0c2RIRivercess000021Kazakhstan#KZ.QG0c2QGQaraghandy00001BRussia#RU.VL0c2VLVladimir000020SolomonIsland#SB.TE0c2TETemotu00001BTennessee#0430c2DIDickson000018Montana#1050c2VAValley00001ANewWorld#1330c2BEBelgium000017Iowa#0470c2CFCrawford000017Africa#0520c2UGUganda000017Texas#3830c2REAReagan000018Louisiana#1270c2WIWinn000020NorthCarolina#0390c2CECherokee00001AGeorgia#1910c2MIMcintosh000019Kentucky#2270c2WAWarren00001FNetherland#0040c2GEGelderland000018Illinois#0290c2COColes00001AMississippi#1370c2TETate000018Europe#0170c2ISIceland00001CPuertoRico#1470c2VQVieques00001BPennsylvania#1030c2PIPike000018Texas#0210c2BASBastrop000016Idaho#0390c2ELElmore000018Arkansas#1270c2SCScott000018Oregon#0410c2LILincoln000036NewfoundlandandLabrador#CA.NF.LA0c2LALabrador Region000031SaintKittsandNevis#060c2JCSaint John Capesterre000018Argentina#100c2JYJujuy000015Peru#070c2CALCallao000018Uruguay#070c2FDFlorida000014USA#AL0c2ALAlabama00001DTaiwan#210c2TCTaipei (City)00001AIndonesia#150c2LALampung00002BBritishColumbia#130c2FGFraser-Fort George00001BAlbania#470c2KUKuk&euml;s00001CColombia#240c2RISRisaralda000021EnglandRegion#010c2NENorth East000018Norway#090c2NONordland000019Iraq#140c2MAMays&#257;n000027Alberta#CA.AB.CR0c2CRCanadian Rockies000021Thailand#TH.CC0c2CCChachoengsao00001BMali#ML.TB0c2TBTombouctou00001EEthiopia#ET.DD0c2DDDire Dawa000016Congo#CG.PO0c2POPool00001CMorocco#MA.OR0c2OROriental000022Algeria#DZ.OB0c2OBOum el-Bouaghi000017Mali#ML.BA0c2BABamako00001CMacedonia#MK.OC0c2OCKocani000020Philippines#PH.LU0c2LULa Union000025CoteDivoire#CI.MV0c2MVMoyen-Cavally00001CRussia#RU.CV0c2CVChuvashia00001BChina2#CN.SH0c2SHShanghai00001DGuinea#GN.DI0c2DIDinguiraye00001EThailand#TH.UD0c2UDUttaradit00001ASyria#SY.QU0c2QUQuneitra00002CIran#IR.CM0c2CMChahar Mahall and Bakhtiari000021FranceDepartment#FR.AB0c2ABAube00001AWisconsin#1190c2TATaylor000029NewWorld#1340c2BHBosnia and Herzegovina000017Indiana#1810c2WHWhite00001FAfrica#0530c2WSWestern Sahara000017Kansas#1750c2SWSeward000019Missouri#1310c2MLMiller00001BCalifornia#0350c2LSLassen000019Texas#2030c2HRSHarrison000015Ohio#1650c2WAWarren00001ENetherland#0050c2GRGroningen00001ANebraska#1350c2PEPerkins000017Georgia#0110c2BNBanks000018Europe#0180c2IEIreland00001BMinnesota#0630c2JAJackson00001CKentucky#0470c2CHChristian00001AMichigan#0570c2GAGratiot000022NewCaledonia#NC.NO.KM0c2KMKoumac000031MadagascarRegions#MG.TL.AF0c2AFAtsimo-Andrefana00002ESaintKittsandNevis#070c2JFSaint John Figtree00001BArgentina#110c2LPLa Pampa000014Peru#080c2CUSCusco00001AUruguay#080c2LALavalleja00002AUSASouthEastRegion#450c2SCSouth Carolina000017Taiwan#220c2TTTaitung00002ABritishColumbia#140c2GVGreater Vancouver00001BAlbania#480c2LELezh&euml;000034Colombia#250c2SAPSan Andr&eacute;s and Providencia000021EnglandRegion#020c2NWNorth West00001ENorway#100c2NTNord-Trondelag00001EIraq#150c2NIN&#299;naw&#257;00001BMacedonia#MK.OD0c2ODOhrid000025Singapore#SG.NO0c2NONorth Singapore000018China2#CN.AH0c2AHAnhui000015Oregon#0430c2LNLinn000018Tennessee#0450c2DYDyer00001BMontana#1070c2WHWheatland00001BNewWorld#1350c2BGBulgaria00001CMaine#0010c2ANAndroscoggin000015Iowa#0490c2DADallas000017Africa#0540c2ZMZambia000015Texas#3850c2RELReal000017Indiana#0010c2ADAdams00001ENorthCarolina#0410c2COChowan000017Georgia#1930c2MAMacon00001DKentucky#2290c2WSWashington00001CNetherland#0060c2LILimburg000017Illinois#0310c2CKCook00001CMississippi#1390c2TPTippah000016Europe#0190c2ITItaly00001DPuertoRico#1490c2VLVillalba00001DPennsylvania#1050c2POPotter000017Texas#0230c2BAYBaylor000018Idaho#0410c2FRFranklin000019Arkansas#1290c2SESearcy000027NewCaledonia#NC.NO.KN0c2KNKon&eacute;00002CSaintKittsandNevis#080c2MCSaint Mary Cayon00001BArgentina#120c2LRLa Rioja00001CPuertoRico#010c2AJAdjuntas00001BPeru#090c2HUVHuancavelica00001AUruguay#090c2MAMaldonado000017Taiwan#230c2TYTaoyuan000025Indonesia#170c2NBWest Nusa Tenggara000028BritishColumbia#150c2KSKitimat-Stikine00001DAlbania#490c2SHShkod&euml;r00001CColombia#260c2SANSantander00001FScotlandRegion#780c2BOBorders00002FEnglandRegion#030c2YHYorkshire and the Humber000017Norway#110c2OPOppland000025ElSalvador#010c2AHAhuachap&aacute;n000018Iraq#160c2WAW&#257;sit000028Alberta#CA.AB.EA0c2EAEdmonton and Area000021FranceDepartment#FR.AD0c2ADAude000020SriLanka#LK.PR0c2PRPolonnaruwa000023Brunei#BN.BM0c2BMBrunei and Muara000020Philippines#PH.NC0c2NCCotabato00001ARussia#RU.VO0c2VOVologda00001DSamoa #WS.GE0c2GEGagaemauga000024Kiribati#KI.GI0c2GIGilbert Islands00001FGuyana#GY.BA0c2BABarima-Waini00001AMalawi#MW.KR0c2KRKaronga00002BFranceDepartment#FR.SE0c2SESeine et Marne000027NorthAmerica_WOCentral#0160c2MXMexico00001FWisconsin#1210c2TRTrempealeau00001ANewWorld#1360c2HYCroatia000019Indiana#1830c2WLWhitley000019Virginia#1250c2NENelson000019Africa#0550c2ZWZimbabwe000018Kansas#1770c2SNShawnee00001FMexico#0010c2AGAguascalientes00001EMissouri#1330c2MSMississippi000020California#0370c2LOLos Angeles000018Texas#2050c2HRTHartley000019Ohio#1670c2WSWashington000022Netherland#0070c2NONoord-Brabant000019Nebraska#1370c2PHPhelps000018Georgia#0130c2BWBarrow000017Europe#0200c2LVLatvia00001BMinnesota#0650c2KAKanabec000018Kentucky#0490c2CKClark00001CMichigan#0590c2HIHillsdale000016Iraq#170c2NAAn-Najaf000031SaintKittsandNevis#090c2PPSaint Paul Capesterre00001AArgentina#130c2MZMendoza00001DGrenada#010c2ANSaint Andrew000016Peru#100c2HUCHuanuco00001BUruguay#100c2MOMontevideo000025USASouthEastRegion#470c2TNTennessee000015Taiwan#240c2ILYilan000025Indonesia#180c2NTEast Nusa Tenggara00002ABritishColumbia#160c2KBKootenay Boundary00001CAlbania#500c2TRTiran&euml;000018Colombia#270c2SUCSucre00001FScotlandRegion#790c2CECentral000024EnglandRegion#040c2EMEast Midlands000014Norway#120c2OSOslo000022ElSalvador#020c2CACaba&ntilde;as000022Fiji#FJ.WE.NN0c2NNNadroga-Navosa00001ANigeria#NG.RI0c2RIRivers000028Philippines#PH.MN0c2MNMisamis Oriental000029Philippines#PH.ND0c2NDNegros Occidental000024CentralAmerica2#CE.BB0c2BBBarbados00001AMalawi#MW.KS0c2KSKasungu00001BMalawi#MW.LI0c2LILilongwe000019China2#CN.TA0c2TATaiwan000019Guinea#GN.DL0c2DLDalaba000018Oregon#0450c2MAMalheur00001BTennessee#0470c2FAFayette000018Montana#1090c2WIWibaux000021NewWorld#1370c2CZCzech Republic000019Maine#0030c2ARAroostook000014Iowa#0510c2DVDavis000017Africa#0560c2GMGambia00001ATexas#3870c2REDRed River000017Indiana#0030c2ALAllen000020Mexico#0020c2BABaja California00001CNorthCarolina#0430c2CYClay000019Georgia#1950c2MDMadison000018Kentucky#2310c2WYWayne000022Netherland#0080c2NHNoord-Holland00001BIllinois#0330c2CFCrawford000020Mississippi#1410c2TITishomingo00001EEurope#0210c2LILiechtenstein00001CPuertoRico#1510c2YBYabucoa000021Pennsylvania#1070c2SCSchuylkill000014Texas#0250c2BEEBee000017Idaho#0430c2FEFremont00001CArkansas#1310c2SBSebastian000033PrinceEdwardIsland#CA.PE.CS0c2CSCharlotte's Shore000020ElSalvador#030c2CHChalatenango000024Iraq#180c2SDSal&#257;h ad-D&#299;n000032SaintKittsandNevis#100c2PLSaint Paul Charlestown00001BArgentina#140c2MNMisiones00001APuertoRico#030c2ADAguada00001CGrenada#020c2DASaint David000012Peru#110c2ICAIca000020Uruguay#110c2PAPaysand&uacute;000016Taiwan#250c2YLYunlin000029BritishColumbia#170c2MWMount Waddington00001BAlbania#510c2VLVlor&euml;000019Colombia#280c2TOLTolima00002DScotlandRegion#800c2DGDumfries and Galloway000024EnglandRegion#050c2WMWest Midlands00001ENorway#130c2OT&Oslash;stfold000025SaoTomeandPrincipe#ST.LO0c2LOLobata000021Burma#MM.YA0c2YAYangon Division00001FLesotho#LS.TT0c2TTThaba-Tseka000023Philippines#PH.NE0c2NENueva Ecija00001BTanzania#TZ.IR0c2IRIringa00001DVietnam#VN.VL0c2VLVinh Long00001APalau#PW.KA0c2KAKayangel00001AWisconsin#1230c2VEVernon00001ANewWorld#1380c2DKDenmark00001BVirginia#1270c2NKNew Kent000016Africa#0570c2CGCongo000019Kansas#1790c2SDSheridan000024Mexico#0030c2BCBaja California Sur00001BMissouri#1350c2MIMoniteau00001BCalifornia#0390c2MAMadera000018Texas#2070c2HSKHaskell000022Virginia#6700c2HOHopewell (City)000014Ohio#1690c2WYWayne00001FNetherland#0090c2OVOverijssel000019Nebraska#1390c2PIPierce000018Georgia#0150c2BTBartow00001AEurope#0220c2LTLithuania00001DMinnesota#0670c2KNKandiyohi000017Kentucky#0510c2CYClay00001BMichigan#0610c2HOHoughton000018Norway#140c2RORogaland000024ElSalvador#040c2CUCuscatl&aacute;n000032SaintKittsandNevis#110c2PBSaint Peter Basseterre000021Argentina#150c2NQNeuqu&eacute;n00001DGrenada#030c2GESaint George000014Peru#120c2JUNJunin00001AUruguay#120c2RNRio Negro000020BritishColumbia#180c2NANanaimo000022Colombia#290c2VACValle del Cauca00001CScotlandRegion#810c2FIFife00001BEnglandRegion#060c2EAEast000023FranceDepartment#FR.AG0c2AGAriege000017Nauru#NR.BU0c2BUBuada000025CaymanIslands#KY.BT0c2BTBodden Town00001DThailand#TH.BR0c2BRBuri Ram000023Somalia#SO.WO0c2WOWoqooyi Galbeed00001BAlgeria#DZ.OG0c2OGOuargla000022PapuaNewGuinea#PG.WE0c2WEWestern00001BRussia#RU.VR0c2VRVoronezh00001ALibya#LY.WA0c2WAAl Wahah000019Malawi#MW.LK0c2LKLikoma00001BMalawi#MW.MA0c2MAMachinga000022Massachusetts#0010c2BABarnstable000017Oregon#0470c2MRMarion00001CTennessee#0490c2FEFentress00001DMontana#1110c2YSYellowstone00001ANewWorld#1390c2EEEstonia00001AMaine#0050c2CUCumberland000018Oklahoma#0010c2ADAdair000016Iowa#0530c2DEDecatur00001AAfrica#0580c2MUMauritius000017Texas#3890c2REVReeves00001DIndiana#0050c2BABartholomew000019Mexico#0040c2CACampeche000021NorthCarolina#0450c2CVCleveland000018Georgia#1970c2MRMarion00001AKentucky#2330c2WBWebster00001CNetherland#0100c2UTUtrecht00001DIllinois#0350c2CMCumberland00001CMississippi#1430c2TUTunica00001BEurope#0230c2LULuxembourg00001APuertoRico#1530c2YUYauco00001DPennsylvania#1090c2SNSnyder000015Texas#0270c2BELBell00001ENewHampshire#0010c2BEBelknap000013Idaho#0450c2GEGem000019Arkansas#1330c2SVSevier00001DEnglandRegion#070c2LOLondon000020Norway#150c2SOSogn og Fjordane00001FElSalvador#050c2LILa Libertad000030SaintKittsandNevis#120c2TLSaint Thomas Lowland00001CArgentina#160c2RNRio Negro00001DPuertoRico#050c2ALAguadilla00001BGrenada#040c2JOSaint John00001APeru#130c2LALLa Libertad000017Uruguay#130c2RVRivera000015USA#AR0c2ARArkansas000023Indonesia#210c2STCentral Sulawesi000027BritishColumbia#190c2NONorth Okanagan000020Colombia#300c2VAUVaup&eacute;s000020ScotlandRegion#820c2GPGrampian000025PolandCounties#PL.WN.EM0c2WEMElblag000024FranceDepartment#FR.AH0c2AHArdeche00001FMacedonia#MK.NS0c2NSNovo Selo000022Philippines#PH.MQ0c2MQMarinduque00001AUganda#UG.PL0c2PLPallisa00001FSamoa #WS.GI0c2GIGagaifomauga000019Thailand#TH.TT0c2TTTrat000019Wisconsin#1250c2VIVilas00001ANewWorld#1400c2FIFinland000018Kansas#1810c2SHSherman000018Mexico#0050c2CHChiapas000019Missouri#1370c2MRMonroe00001ACalifornia#0410c2MRMarin000015Texas#2090c2HYSHays000017Ohio#1710c2WIWilliams00001CNetherland#0110c2ZEZeeland000019Nebraska#1410c2PLPlatte00001AGeorgia#0170c2BHBen hill00001AEurope#0240c2MKMacedonia00001BMinnesota#0690c2KIKittson00001AKentucky#0530c2CNClinton000018Michigan#0630c2HUHuron000025MadagascarRegions#MG.AS.SV0c2SVSava000021EnglandRegion#080c2SESouth East00002BNorway#160c2STS&oslash;r-Tr&oslash;ndelag00001AElSalvador#060c2PALa Paz000036SaintKittsandNevis#130c2TMSaint Thomas Middle Island000018Argentina#170c2SASalta00001BGrenada#050c2MASaint Mark000019Peru#140c2LAMLambayeque000016Uruguay#140c2RORocha000026Indonesia#220c2SGSouth East Sulawesi000029BritishColumbia#200c2NRNorthern Rockies00001AColombia#310c2CIDVichada000020ScotlandRegion#830c2HIHighland000026NovaScotia#CA.NS.MD0c2MDMarine Drive00001AFiji#FJ.CE.NM0c2NMNamosi000020FranceDepartment#FR.AI0c2AIAin00001CVietnam#VN.DN0c2DNDong Nai000020Kazakhstan#KZ.QO0c2QOQyzylorda000018Nigeria#NG.AB0c2ABAbia00001ASenegal#SN.FK0c2FKFatick00001DUzbekistan#UZ.KH0c2KHXorazm000028Philippines#PH.MR0c2MROriental Mindoro00001DSerbia#RS.ZC0c2ZCWest Backa00001AMalawi#MW.MC0c2MCMchinji000020Iran#IR.WA0c2WAWest Azarbaijan000021Massachusetts#0030c2BEBerkshire000017Oregon#0490c2MOMorrow00001CTennessee#0510c2FRFranklin000019NewWorld#1410c2FRFrance000018Maine#0070c2FRFranklin00001AOklahoma#0030c2ALAlfalfa000017Iowa#0550c2DLDelaware000016Alaska#2200c2SISitka000017Delaware#0010c2KEKent000018Texas#3910c2REFRefugio000018Indiana#0070c2BEBenton00001AMexico#0060c2CIChihuahua000020NorthCarolina#0470c2CUColumbus00001CGeorgia#1990c2MEMeriwether000016Kansas#0010c2ALAllen00001AKentucky#2350c2WHWhitley000021Netherland#0120c2ZUZuid-Holland000019Illinois#0370c2DEDeKalb00001BMississippi#1450c2UNUnion000016Europe#0250c2MTMalta00001FPennsylvania#1110c2SOSomerset000016Texas#0290c2BEXBexar00001ENewHampshire#0030c2CACarroll000017Idaho#0470c2GOGooding000018Arkansas#1350c2SHSharp000021EnglandRegion#090c2SWSouth West000018Norway#170c2TETelemark000023ElSalvador#070c2UNLa Uni&oacute;n00001BArgentina#180c2SJSan Juan000020PuertoRico#070c2ABAguas Buenas00001EGrenada#060c2PASaint Patrick000013Peru#150c2LIMLima000016Uruguay#150c2SASalto000022Honduras#010c2ATAtl&aacute;ntida00002DBritishColumbia#210c2OSOkanagan-Similkameen00001BColombia#320c2CASCasanare00001FScotlandRegion#840c2LOLothian000021SierraLeone#SL.SO.BN0c2BNBonthe000020Iran#IR.EA0c2EAEast Azarbaijan00001CVietnam#VN.DO0c2DODac Nong00001DSriLanka#LK.PX0c2PXPuttalam00001DMauritania#MR.TG0c2TGTagant00002CPapuaNewGuinea#PG.WH0c2WHWestern Highlands000021HongKong#HK.WT0c2WTWong Tai Sin00001FPapuaNewGuinea#PG.EG0c2EGEnga00001BYemen#YE.HD0c2HDHadramawt00001FLibya#LY.WD0c2WDWadi al Hayat000021FranceDepartment#FR.TA0c2TATarn00001CWisconsin#1270c2WAWalworth00001ANewWorld#1420c2DEGermany00001EVirginia#1310c2NTNorthampton000016Kansas#1830c2SMSmith000025Mexico#0070c2COCoahuila de Zaragoza00001DMissouri#1390c2MYMontgomery00001DCalifornia#0430c2MIMariposa000019Texas#2110c2HEPHemphill000013Ohio#1730c2WOWood000017Nebraska#1430c2POPolk000019Georgia#0190c2BIBerrien000018Europe#0260c2MDMoldova00001FMinnesota#0710c2KOKoochiching00001DKentucky#0550c2CDCrittenden000019Michigan#0650c2INIngham000026MadagascarRegions#MG.AV.IT0c2ITItasy000015Norway#180c2TRTroms000022ElSalvador#080c2MOMoraz&aacute;n000032SaintKittsandNevis#150c2TPTrinity Palmetto Point00001BArgentina#190c2SLSan Luis000015Peru#160c2LORLoreto000019Uruguay#160c2SJSan Jose000017USA#CA0c2CACalifornia000027Croatia#010c2BBBjelovarsko-Bilogorska00001BHonduras#020c2CHCholuteca00001FIndonesia#240c2SBWest Sumatra000024BritishColumbia#220c2PRPeace River00001FColombia#330c2CUNCundinamarca00001DSierraLeone#SL.SO.BO0c2BOBo000025PolandCounties#PL.PK.KM0c2PKMKrosno00001DNunavut#CA.NU.QK0c2QKBaffin00001BBotswana#BW.GH0c2GHGhanzi00001CNauru#NR.DE0c2DEDenigomodu000019Brunei#BN.TU0c2TUTutong000019Liberia#LR.SI0c2SISinoe00001BNigeria#NG.AD0c2ADAdamawa000025Panama#PA.KM0c2KMKuna de Madungandi00001DMacedonia#MK.NV0c2NVNovatsi000029Philippines#PH.MT0c2MTMountain Province00002CPapuaNewGuinea#PG.EH0c2EHEastern Highlands000017Uganda#UG.OY0c2OYOyam00002BFranceDepartment#FR.SL0c2SLSaone et Loire000032FranceDepartment#FR.TB0c2TBTerritoire de Belfort00001FMassachusetts#0050c2BRBristol00001AOregon#0510c2MUMultnomah00002ENorthAmerica_WOCentral#0230c2USUnited States00001ATennessee#0530c2GIGibson000019NewWorld#1430c2GRGreece000017Maine#0090c2HAHancock000018Oklahoma#0050c2ATAtoka000019Iowa#0570c2DMDes Moines00001DDelaware#0030c2NENew castle000018Texas#3930c2ROBRoberts00001BIndiana#0090c2BLBlackford000017Mexico#0080c2CLColima00001ENorthCarolina#0490c2CNCraven000018Georgia#2010c2MLMiller000019Kansas#0030c2ANAnderson000018Kentucky#2370c2WOWolfe00001AIllinois#0390c2DWDe Witt00001EMississippi#1470c2WAWalthall000017Europe#0270c2MCMonaco00001FPennsylvania#1130c2SUSullivan000017Texas#0310c2BLABlanco00001FNewHampshire#0050c2CHCheshire000015Idaho#0490c2IDIdaho000018Arkansas#1370c2STStone000029NewCaledonia#NC.SU.DU0c2DUDumb&eacute;a000022NewCaledonia#NC.SU.FA0c2FAFarino00001ANorway#190c2VAVest-Agder00001EElSalvador#090c2SMSan Miguel00001DArgentina#200c2SCSanta Cruz00001CPuertoRico#090c2AIAibonito00001CPeru#170c2MDDMadre de Dios000018Uruguay#170c2SOSoriano000021Croatia#020c2SPBrodsko-Posavska00001EHonduras#030c2CLCol&oacute;n000021USANorthWestRegion#160c2IDIdaho000025BritishColumbia#230c2POPowell River000032Colombia#340c2DCBogot&aacute; (Distrito Capital)000025PolandCounties#PL.MA.KM0c2MKMKrakow000026FrenchGuiana#GF.SL.PA0c2PAPapaichton000023FranceDepartment#FR.AL0c2ALAllier00001CKyrgyzstan#KG.NA0c2NANaryn00001FThailand#TH.CM0c2CMChiang Mai00001CTunisia#TN.KR0c2KRKairouan00002BFranceDepartment#FR.SM0c2SMSeine Maritime00001FThailand#TH.UN0c2UNUdon Thani000018Syria#SY.TA0c2TATartus000018Michigan#0670c2IOIonia00002ANorthAmerica_WOCentral#0240c2GLGreenland00001CWisconsin#1290c2WSWashburn00001ANewWorld#1440c2HUHungary000021Virginia#1330c2NHNorthumberland00001CSouthDakota#0030c2AUAurora000019Kansas#1850c2SFStafford000018Mexico#0090c2DUDurango000019Missouri#1410c2MGMorgan00001ECalifornia#0450c2MEMendocino00001ATexas#2130c2HNDHenderson000016Ohio#1750c2WDWyandot00001DNebraska#1450c2RWRed Willow000016Georgia#0210c2BBBibb00001BEurope#0280c2MOMontenegro000021Minnesota#0730c2LQLac Qui Parle00001DKentucky#0570c2CMCumberland000018Norway#200c2VEVestfold000020ElSalvador#100c2SSSan Salvador00001BArgentina#210c2SFSanta Fe000016USA#TN0c2TNTennessee000017Peru#180c2MOQMoquegua000022Uruguay#180c2TATacuaremb&oacute;00002CCroatia#030c2DNDubrova&#269;ko-Neretvanska00001BHonduras#040c2CMComayagua000017Ontario#010c2ALAlgoma000020Indonesia#260c2SUNorth Sumatra00002FBritishColumbia#240c2SQSkeena-Queen Charlotte000021Colombia#350c2BOLBol&iacute;var000023ScotlandRegion#870c2SCStrathclyde00003DNorthWestTerritories#CA.NT.WR0c2WRWaterfalls Valley (Route)00002ANovaScotia#CA.NS.LR0c2LRLighthouse Route00002CFranceDepartment#FR.AM0c2AMAlpes Maritimes00001DThailand#TH.CN0c2CNChai Nat00001DSaudiArabia#SA.JZ0c2JZJizan000018Chad#TD.SA0c2SASalamat00001FKazakhstan#KZ.QS0c2QSQostanay00001DMauritania#MR.AS0c2ASAssaba00001DZimbabwe#ZW.BU0c2BUBulawayo00001BMalawi#MW.MG0c2MGMangochi00001DTunisia#TN.KS0c2KSKasserine000017Oman#OM.MA0c2MAMuscat000018Arkansas#1390c2UNUnion00001DMassachusetts#0070c2DUDukes000015Oregon#0530c2POPolk000019Tennessee#0550c2GLGiles00001ANewWorld#1450c2ISIceland000018Maine#0110c2KEKennebec000019Oklahoma#0070c2BEBeaver000018Iowa#0590c2DIDickinson000019Delaware#0050c2SUSussex00001ATexas#3950c2ROERobertson00001CNewJersey#0010c2ATAtlantic000017Indiana#0110c2BOBoone00001BMexico#0100c2GUGuanajuato000022NorthCarolina#0510c2CBCumberland000019Kansas#0050c2ATAtchison00001BKentucky#2390c2WDWoodford00001AIllinois#0410c2DODouglas00001CMississippi#1490c2WRWarren000025WorldwithCountries#1000c2KHCambodia00001CEurope#0290c2NLNetherlands000022Pennsylvania#1150c2SQSusquehanna000017Texas#0330c2BORBorden00001BNewHampshire#0070c2COCoos000019Idaho#0510c2JEJefferson00001DElSalvador#110c2SASanta Ana000026Argentina#220c2SESantiago del Estero000021PuertoRico#110c2ANA&ntilde;asco000014Peru#190c2PASPasco00001FUruguay#190c2TTTreinta y Tres000019Croatia#040c2ISIstarska00001EHonduras#050c2CPCop&aacute;n000016Ontario#020c2BRBrant000026Poland#720c2DSDolno&#347;l&#261;skie000022Cuba#010c2PRPinar del R&iacute;o00002ABritishColumbia#250c2SLSquamish-Lillooet000020Colombia#360c2BOYBoyac&aacute;00001FScotlandRegion#880c2TATayside000022FrenchGuiana#GF.CY.RK0c2RKRegina000025FranceDepartment#FR.AN0c2ANArdennes00002DFranceDepartment#FR.BD0c2BDBouches du Rhone00001DSomalia#SO.GA0c2GAGalguduud000027CentralAmerica2#CE.SV0c2SVEl Salvador00001EMacedonia#MK.PE0c2PEPetrovec00001ANepal#NP.JA0c2JAJanakpur000017UK7#UK.EN0c2ENEngland00001AChina2#CN.TJ0c2TJTianjin000022FranceDepartment#FR.SO0c2SOSomme000021Guinea#GN.DU0c2DUDubr&eacute;ka00001AGuinea#GN.FA0c2FAFaranah00001AKentucky#0590c2DADaviess000018Michigan#0690c2ISIosco00001EWisconsin#1310c2WHWashington00001ANewWorld#1460c2IRIreland00001BVirginia#1350c2NWNottoway00001CSouthDakota#0050c2BEBeadle000018Kansas#1870c2STStanton000019Mexico#0110c2GEGuerrero00001DMissouri#1430c2NMNew Madrid00001BCalifornia#0470c2MCMerced000018Texas#2150c2HIDHidalgo000023Virginia#6780c2LXLexington (City)00001DNebraska#1470c2RIRichardson00001AGeorgia#0230c2BLBleckley000022WorldwithCountries#1010c2CNChina000017Europe#0300c2NONorway000018Minnesota#0750c2LALake00001FElSalvador#120c2SVSan Vicente000023Argentina#230c2TFTierra del Fuego000014Peru#200c2PIUPiura000020Croatia#050c2KAKarlova&#269;ka00001FHonduras#060c2CRCort&eacute;s000016Ontario#030c2BUBruce000022Poland#730c2KPKujawsko-Pomorskie000021Cuba#020c2CHCiudad de La Habana000019Indonesia#280c2MAMaluku000020BritishColumbia#260c2STStikine000019Colombia#370c2CALCaldas000025ScotlandRegion#890c2WIWestern Isles000018Libya#LY.DR0c2DRDarnah000022SolomonIsland#SB.CH0c2CHChoiseul00001AChina2#CN.BJ0c2BJBeijing00001DVietnam#VN.DT0c2DTDong Thap00001DThailand#TH.CP0c2CPChumphon00001AEurope2#EU.KO0c2KOKosovo000022Tibet#TI.QP0c2QPQamdo Prefecture00001ENewHampshire#0090c2GRGrafton000016Idaho#0530c2JRJerome00001CArkansas#1410c2VBVan Buren00001DMassachusetts#0090c2ESEssex000018Oregon#0550c2SHSherman00001CTennessee#0570c2GRGrainger000018NewWorld#1470c2ITItaly000014Maine#0130c2KNKnox00001AOklahoma#0090c2BCBeckham000016Iowa#0610c2DUDubuque000019Texas#3970c2ROCRockwall00001ANewJersey#0030c2BEBergen000017Indiana#0130c2BRBrown000018Mexico#0120c2HIHidalgo000021NorthCarolina#0530c2CKCurrituck00001AGeorgia#2050c2MTMitchell000017Kansas#0070c2BABarber000019Illinois#0430c2DPDuPage000020Mississippi#1510c2WSWashington000027WorldwithCountries#1020c2TPEast Timor000017Europe#0310c2PLPoland00001CPennsylvania#1170c2TITioga000017Texas#0350c2BOSBosque00001DElSalvador#130c2SOSonsonate000021Argentina#240c2TMTucum&aacute;n00001BPuertoRico#130c2ACArecibo000013Peru#210c2PUNPuno000014USA#AZ0c2AZArizona000036Croatia#060c2KKKoprivni&#269;ko-Kri&#382;eva&#269;ka000023Honduras#070c2EPEl Para&iacute;so00001DOntario#040c2CKChatham-Kent000023Poland#740c2LD&#321;&oacute;dzkie000016Cuba#030c2MAMatanzas00001FIndonesia#290c2MUNorth Maluku000027BritishColumbia#270c2SCSunshine Coast00001CColombia#380c2MAGMagdalena00002BFrenchGuiana#GF.CY.RM0c2RMRemire Montjoly00001DFiji#FJ.CE.NT0c2NTNaitasiri000034FranceDepartment#FR.AP0c2APAlpes de Haute Provence000023BurkinaFaso#BF.SE0c2SES&eacute;no00002BPapuaNewGuinea#PG.WN0c2WNWest New Britain000029Guyana#GY.UD0c2UDUpper Demerara-Berbice00001DKazakhstan#KZ.AA0c2AAAlmaty00001ASerbia#RS.ZJ0c2ZJZajecar000018Yemen#YE.HJ0c2HJHajjah00001BBurundi#BI.KI0c2KIKirundo00001AMalawi#MW.MJ0c2MJMulanje00002CFranceDepartment#FR.TG0c2TGTarn et Garonne000025Thailand#TH.UR0c2URUbon Ratchathani00001BKentucky#0610c2EDEdmonson000017Michigan#0710c2IRIron00001CWisconsin#1330c2WUWaukesha000019NewWorld#1480c2LVLatvia000019Virginia#1370c2OROrange00001DSouthDakota#0070c2BNBennett000018Kansas#1890c2SVStevens000018Mexico#0130c2JAJalisco000019Missouri#1450c2NENewton00001ACalifornia#0490c2MOModoc000015Texas#2170c2HILHill000023Virginia#6800c2LYLynchburg (City)000017Nebraska#1490c2RORock00001AGeorgia#0250c2BEBrantley000024WorldwithCountries#1030c2GEGeorgia000019Europe#0320c2PTPortugal000025Minnesota#0770c2LWLake of the Woods000023ElSalvador#140c2USUsulut&aacute;n000019Peru#220c2SAMSan Martin000023Croatia#070c2KZKrapinsko-Zagorska00002AHonduras#080c2FMFrancisco Moraz&aacute;n000019Ontario#050c2COCochrane000019Poland#750c2LULubelskie000021Cuba#040c2IJIsla de la Juventud00001CIndonesia#300c2JRWest Java000028BritishColumbia#280c2TNThompson-Nicola00001FThailand#TH.CR0c2CRChiang Rai00001ANigeria#NG.TA0c2TATaraba00001DMacedonia#MK.PH0c2PHPehcevo00002BPapuaNewGuinea#PG.EN0c2ENEast New Britain000018Uganda#UG.RA0c2RARakai00001DMalawi#MW.NA0c2NANkhata Bay000023NewHampshire#0110c2HBHillsborough000018Idaho#0550c2KOKootenai00001DArkansas#1430c2WAWashington000020Massachusetts#0110c2FRFranklin00001AOregon#0570c2TITillamook00001ATennessee#0590c2GEGreene000020NewWorld#1490c2LNLiechtenstein000017Maine#0150c2LILincoln000019Oklahoma#0110c2BLBlaine000014Iowa#0630c2EMEmmet000018Texas#3990c2RUNRunnels00001ENewJersey#0050c2BUBurlington000019Indiana#0150c2CACarroll000017Mexico#0140c2MEMexico00001CNorthCarolina#0550c2DADare000018Georgia#2070c2MOMonroe000017Kansas#0090c2BTBarton000018Illinois#0450c2EDEdgar00001BMississippi#1530c2WYWayne000022WorldwithCountries#1040c2INIndia000018Europe#0330c2RORomania00001CPennsylvania#1190c2UNUnion000016Texas#0370c2BOIBowie00001APuertoRico#150c2ARArroyo000014Peru#230c2TACTacna000023Croatia#080c2LSLi&#269;ko-Senjska000020Honduras#090c2GDGracias a Dios000019Ontario#060c2DUDufferin000018Poland#760c2LBLubuskie00001BCuba#050c2CMCamag&uuml;ey000021Indonesia#310c2SANorth Sulawesi000028PolandCounties#PL.KP.WL0c2KWLWloclawek000021FrenchGuiana#GF.CY.RO0c2RORoura000026FrenchGuiana#GF.CY.SE0c2SESaint Elie000022CaymanIslands#KY.WB0c2WBWest Bay000020Thailand#TH.UT0c2UTUthai Thani000018Congo#CG.SA0c2SASangha000026BurkinaFaso#BF.SG0c2SGSangui&eacute;000018Algeria#DZ.OR0c2OROran00001BBhutan#BT.SG0c2SGShemgang00001DNigeria#NG.AK0c2AKAkwa Ibom00001ANigeria#NG.BA0c2BABauchi000018Somalia#SO.GE0c2GEGedo00001DMacedonia#MK.OS0c2OSOslomej000022Kazakhstan#KZ.AC0c2ACAlmaty City00001BSerbia#RS.ZL0c2ZLZlatibor000015Yemen#YE.IB0c2IBIbb000019China2#CN.SX0c2SXShanxi00002EFranceDepartment#FR.SS0c2SSSeine-Saint-Denis00001AKentucky#0630c2ELElliott00001BMichigan#0730c2IAIsabella00001BWisconsin#1350c2WPWaupaca00001CNewWorld#1500c2LTLithuania000017Virginia#1390c2PAPage00001FSouthDakota#0090c2BHBon Homme000017Kansas#1910c2SUSumner000024Mexico#0150c2MIMichoacan de Ocampo00001AMissouri#1470c2NONodaway000019California#0510c2MNMono000018Texas#2190c2HOCHockley000019Nebraska#1510c2SASaline000018Georgia#0270c2BOBrooks000015Brazil#0010c2ACAcre000026WorldwithCountries#1050c2IDIndonesia00001BEurope#0340c2SMSan Marino00001CMinnesota#0790c2LSLe Sueur000026YukonTerritory#CA.YT.KL0c2KLKlondike000015Peru#240c2TUMTumbes000020Croatia#090c2MEMe&#273;imurska000021Honduras#100c2INIntibuc&aacute;000017Ontario#070c2DRDurham000020Poland#770c2MAMa&#322;opolskie000020Indonesia#320c2SLSouth Sumatra00002CMacau#MO.MA.NF0c2NFNossa Senhora de Fatima000022FranceDepartment#FR.AS0c2ASAisne000020Thailand#TH.CT0c2CTChanthaburi000021Europe2#EU.LI0c2LILiechtenstein000027Philippines#PH.NR0c2NRNegros Oriental000019Vanuatu#VU.SE0c2SEShefa00001CTunisia#TN.ME0c2MEMedenine000023FranceDepartment#FR.ST0c2STSarthe00001EPennsylvania#1210c2VEVenango000019Texas#0390c2BRZBrazoria000020NewHampshire#0130c2MEMerrimack000015Idaho#0570c2LALatah000018Arkansas#1450c2WHWhite000014Ohio#0010c2ADAdams00001FMassachusetts#0130c2HAHampden000019Oregon#0590c2UMUmatilla00001ATennessee#0610c2GUGrundy00001DNewWorld#1510c2LULuxembourg000016Maine#0170c2OXOxford000018Oklahoma#0130c2BRBryan000016Iowa#0650c2FAFayette000015Texas#4010c2RUSRusk00001ANewJersey#0070c2CACamden000016Indiana#0170c2CSCass000018Mexico#0160c2MOMorelos000020NorthCarolina#0570c2DVDavidson00001CGeorgia#2090c2MGMontgomery000018Kansas#0110c2BBBourbon000022Virginia#6830c2MNManassas (City)00001AIllinois#0470c2EWEdwards00001DMississippi#1550c2WBWebster000018Brazil#0020c2ALAlagoas000021WorldwithCountries#1060c2IAIran000017Europe#0350c2CSSerbia00001ASlovenia#010c2PMPomurska000015USA#VA0c2VAVirginia00001FPuertoRico#170c2BCBarceloneta000016Peru#250c2UCAUcayali000027Croatia#100c2OBOsje&#269;ko-Baranjska00002AHonduras#110c2IBIslas de la Bah&iacute;a000016Ontario#080c2ELElgin00001BPoland#780c2MZMazowieckie000023Cuba#070c2CACiego de &Aacute;vila000019Indonesia#330c2BTBanten000029FrenchGuiana#GF.CY.SG0c2SGSaint Georges000015Iran#IR.FA0c2FAFars00001ESriLanka#LK.RN0c2RNRatnapura000018Liberia#LR.BG0c2BGBong000026Philippines#PH.NS0c2NSNorthern Samar000020Tanzania#TZ.KL0c2KLKilimanjaro00001EMicronesia#FM.PO0c2POPohnpei000017Palau#PW.KO0c2KOKoror000019Kentucky#0650c2ESEstill00001AMichigan#0750c2JAJackson00001CWisconsin#1370c2WRWaushara00001CNewWorld#1520c2MKMacedonia00001AVirginia#1410c2PTPatrick00001FSouthDakota#0110c2BRBrookings000017Kansas#1930c2THThomas000018Mexico#0170c2NANayarit000019Missouri#1490c2OROregon00001DCalifornia#0530c2MTMonterey000017Alaska#0500c2BEBethel000015Texas#2210c2HODHood000018Nebraska#1530c2SRSarpy000017Georgia#0290c2BRBryan000016Brazil#0030c2APAmapa000022WorldwithCountries#1070c2JPJapan000019Europe#0360c2SKSlovakia00001BMinnesota#0810c2LILincoln000027NewCaledonia#NC.SU.YA0c2YAYat&eacute;00001BSlovenia#020c2PDPodravska00001FPeru#260c2LPLima Metropolitan00002ECroatia#110c2PSPo&#382;e&scaron;ko-Slavonska000018Honduras#120c2LPLa Paz000016Ontario#090c2ESEssex000018Poland#790c2OPOpolskie000018Cuba#080c2CFCienfuegos00001CIndonesia#340c2GOGorontalo00001DSwaziland#SZ.MA0c2MAManzini000021SolomonIsland#SB.CN0c2CNCentral00001BQatar#QA.RA0c2RAAr Rayyan00002AFranceDepartment#FR.CA0c2CACotes d'Armor00001ANigeria#NG.SO0c2SOSokoto00001AGhana#GH.NP0c2NPNorthern00001DMauritania#MR.TR0c2TRTrarza000022SaudiArabia#SA.MD0c2MDAl Madinah000023Bhutan#BT.SJ0c2SJSamdrup Jongkhar000021SriLanka#LK.AD0c2ADAnuradhapura00001BNigeria#NG.AN0c2ANAnambra000023Panama#PA.KW0c2KWKuna de Wargandi00001BTanzania#TZ.KM0c2KMKigoma000023FranceDepartment#FR.SV0c2SVSavoie00001DPennsylvania#1230c2WAWarren000017Texas#0410c2BAZBrazos000021NewHampshire#0150c2RGRockingham000015Idaho#0590c2LELemhi00001BArkansas#1470c2WOWoodruff000014Ohio#0030c2ALAllen000021Massachusetts#0150c2HPHampshire000016Oregon#0610c2UNUnion00001BTennessee#0630c2HAHamblen000018NewWorld#1530c2MTMalta000019Maine#0190c2PEPenobscot000018Oklahoma#0150c2CACaddo000032Australia2#ACT0c2ACTAustralian Capital Territory000014Iowa#0670c2FLFloyd000026Alaska#2320c2SHSkagway-Hoonah-Angoon000017Texas#4030c2SABSabine00001CNewJersey#0090c2CMCape May000017Indiana#0190c2CLClark00001BMexico#0180c2NUNuevo Leon00001DNorthCarolina#0590c2DIDavie000018Georgia#2110c2MNMorgan000016Kansas#0130c2BRBrown000027Virginia#6850c2MPManassas Park (City)00001CIllinois#0490c2EFEffingham00001FMississippi#1570c2WLWilkinson000019Brazil#0040c2AMAmazonas000027WorldwithCountries#1080c2KZKazakhstan000019Europe#0370c2SLSlovenia000026MadagascarRegions#MG.TL.AY0c2AYAnosy000034MadagascarRegions#MG.FI.VF0c2VFVatovavy Fitovinany000020Slovenia#030c2KOKoro&scaron;ka000025NewWorld#010c2AGAntigua and Barbuda000020PuertoRico#190c2BQBarranquitas000023Croatia#120c2PGPrimorsko-Goranska000019Honduras#130c2LELempira00001AOntario#100c2FRFrontenac00001CPoland#800c2PKPodkarpackie000014Cuba#090c2GRGranma000022Indonesia#350c2BBBangka-Belitung000032PolandCounties#PL.LB.GM0c2LGMGorzow Wielkopolski000025FrenchGuiana#GF.CY.SI0c2SISinnamary00001CSyria#SY.SU0c2SUAs Suwayda000024FranceDepartment#FR.AV0c2AVAveyron000022CaymanIslands#KY.EE0c2EEEast End00001DBurkinaFaso#BF.TA0c2TATapoa00001CBhutan#BT.TA0c2TATashigang00001BRwanda#RW.SU0c2SUSouthern000019Nigeria#NG.BE0c2BEBenue000031CentralAmerica2#CE.TT0c2TTTrinidad &amp; Tobago00001EHongKong#HK.YL0c2YLYuen Long00001DMauritania#MR.BR0c2BRBrakna00002FCentralAfricanRepublic#CF.HK0c2HKHaute -Kotto000023CentralAmerica2#CE.BS0c2BSBahamas000025PapuaNewGuinea#PG.ES0c2ESEast Sepik00001ALaos#LA.KH0c2KHKhammouan00001ATunisia#TN.MH0c2MHMahdia000018Minnesota#0830c2LYLyon00001AKentucky#0670c2FAFayette00001CMichigan#0770c2KMKalamazoo00001DWisconsin#1390c2WNWinnebago00001ANewWorld#1540c2MVMoldova00001FVirginia#1430c2PIPittsylvania00001BSouthDakota#0130c2BWBrown000016Kansas#1950c2TRTrego000017Mexico#0190c2OAOaxaca000018Missouri#1510c2OSOsage000019California#0550c2NANapa000018Texas#2230c2HOPHopkins00001BNebraska#1550c2SUSaunders000019Georgia#0310c2BCBulloch000016Brazil#0050c2BABahia00002AWorldwithCountries#1090c2KPKorea (north)000016Europe#0380c2ESSpain00001BSlovenia#040c2SASavinjska000019NewWorld#020c2BSBahamas000012USA#TX0c2TXTexas000021USA#DC0c2DCDistrict of Columbia000028Croatia#130c2SB&Scaron;ibensko-Kninska00001CHonduras#140c2OCOcotepeque00001DAustralia#QU0c2QUQueensland000022Australia#SA0c2SASouth Australia000020Ontario#110c2GSGreater Sudbury000019Poland#810c2PDPodlaskie00001FCuba#100c2GUGuant&aacute;namo000018Indonesia#360c2PAPapua00001AEurope2#EU.MC0c2MCMonaco000022Cambodia#KH.KA0c2KASihanoukville000019Chad#TD.TA0c2TATandjile000023BurkinaFaso#BF.BA0c2BABal&eacute;00001EMacedonia#MK.PN0c2PNPlasnica000025Philippines#PH.NV0c2NVNueva Vizcaya00002AWorldwithCountries#1100c2KRKorea (south)000017Europe#0390c2SESweden000021Pennsylvania#1250c2WSWashington000019Texas#0430c2BREBrewster000020NewHampshire#0170c2STStrafford000015Idaho#0610c2LWLewis000017Arkansas#1490c2YEYell000016Ohio#0050c2ASAshland000021Massachusetts#0170c2MIMiddlesex000018Oregon#0630c2WAWallowa00001CTennessee#0650c2HMHamilton000017Italy#0010c2ABAbruzzo000019NewWorld#1550c2MCMonaco00001BMaine#0210c2PIPiscataquis00001BOklahoma#0170c2CNCanadian000017Iowa#0690c2FRFranklin00001ETexas#4050c2SAUSan Augustine00001ENewJersey#0110c2CUCumberland000016Indiana#0210c2CYClay000017Mexico#0200c2PUPuebla00001ENorthCarolina#0610c2DUDuplin000018Georgia#2130c2MUMurray000017Kansas#0150c2BUButler00001AIllinois#0510c2FAFayette00001DMississippi#1590c2WNWinston000016Brazil#0060c2CECeara00001ASlovenia#050c2ZSZasavska00001ANewWorld#030c2BBBarbados000022PuertoRico#210c2BYBayam&oacute;n00002DCroatia#140c2SMSisa&#269;ko-Moslava&#269;ka000019Honduras#150c2OLOlancho00001BCostaRica#010c2ALAlajuela000015Ontario#120c2GRGrey000019Poland#820c2PMPomorskie000017Cuba#110c2LHLa Habana000017Indonesia#370c2RIRiau000019Guinea#GN.GA0c2GAGaoual00001FThailand#TH.CY0c2CYChaiyaphum00001BEurope2#EU.MD0c2MDMoldova00001ESenegal#SN.ZG0c2ZGZiguinchor000018Cambodia#KH.KB0c2KBKep00001CBurkinaFaso#BF.SM0c2SMSoum000019Bhutan#BT.SM0c2SMSamchi000020GuineaBissau#GW.QU0c2QUQuinara000022BurkinaFaso#BF.BB0c2BBBougouriba00001EDjibouti#DJ.TA0c2TATadjourah00002ECentralAfricanRepublic#CF.HM0c2HMHaut-Mbomou000016Chad#TD.BA0c2BABatha000019Nepal#NP.KA0c2KAKarnali00001DGabon#GA.HO0c2HOHaut-Ogooue000027WorldwithCountries#1110c2KGKyrgyzstan00001CEurope#0400c2CHSwitzerland00001AMinnesota#0850c2MLMcLeod00001AKentucky#0690c2FLFleming00001BMichigan#0790c2KAKalkaska000018Wisconsin#1410c2WOWood00001AItaly#0020c2BABasilicata00001DNewWorld#1560c2MGMontenegro00001BVirginia#1450c2POPowhatan00001BSouthDakota#0150c2BUBrule00001AKansas#1970c2WBWabaunsee000025Mexico#0210c2QUQueretaro de Arteaga000018Missouri#1530c2OZOzark00001BCalifornia#0570c2NENevada000018Texas#2250c2HOUHouston00001FNebraska#1570c2SBScotts Bluff000017Georgia#0330c2BUBurke000021Brazil#0070c2DFDistrito Federal000021Slovenia#060c2PSSpodnjeposavska000018NewWorld#040c2BZBelize000015USA#CO0c2COColorado000015USA#DE0c2DEDelaware000014Japan#100c2GUGumma000025Croatia#150c2SDSplitsko-Dalmatinska000026Honduras#160c2SBSanta B&aacute;rbara00001ACostaRica#020c2CACartago00001AOntario#130c2HAHaldimand000021Poland#830c2SL&#346;l&#261;skie00001CCuba#120c2HOHolgu&iacute;n000021Indonesia#380c2SNSouth Sulawesi00001AEritrea#ER.MA0c2MAMaekel000027Kazakhstan#KZ.SK0c2SKSouth Kazakhstan00003CCentralAmerica2#CE.VC0c2VCSt. Vincent &amp; the Grenadines00001CMacedonia#MK.PP0c2PPPrilep00001ABurundi#BI.KR0c2KRKaruzi00001AMalawi#MW.NI0c2NINtchisi000021WorldwithCountries#1120c2LALaos000018Europe#0410c2UAUkraine00001CPennsylvania#1270c2WYWayne000018Texas#0450c2BRIBriscoe00001FNewHampshire#0190c2SUSullivan000017Idaho#0630c2LILincoln000018Ohio#0070c2AHAshtabula000021Massachusetts#0190c2NTNantucket000016Oregon#0650c2WSWasco00001BTennessee#0670c2HNHancock000018Italy#0030c2CACalabria00001ENewWorld#1570c2NLNetherlands000019Maine#0230c2SASagadahoc000019Oklahoma#0190c2CRCarter000016Iowa#0710c2FEFremont00001CTexas#4070c2SAJSan Jacinto000019NewJersey#0130c2ESEssex000019Indiana#0230c2CIClinton00001DMexico#0220c2QRQuintana Roo00001ENorthCarolina#0630c2DRDurham00001AGeorgia#2150c2MSMuscogee00001CNewZealand#F100c2TASTasman000016Kansas#0170c2CSChase000017Illinois#0530c2FOFord00001FMississippi#1610c2YAYalobusha00001FBrazil#0080c2ESEspirito Santo000027Slovenia#070c2DOJugovzhodna Slovenija000018NewWorld#050c2CACanada00001DPuertoRico#230c2CRCabo Rojo000018Japan#110c2HIHiroshima000021Croatia#160c2VAVara&#382;dinska000017Honduras#170c2VAValle00001CBulgaria#380c2EBlagoevgrad00001DCostaRica#030c2GUGuanacaste00001BOntario#140c2HLHaliburton000023USANorthWestRegion#300c2MTMontana000028Poland#840c2SK&#346;wi&#281;tokrzyskie000017Cuba#130c2LTLas Tunas000022Indonesia#390c2IBWest Irian Jaya000025PolandCounties#PL.LU.ZM0c2LZMZamosc00002BNewBrunswick#CA.NB.AC0c2ACAcadian Coastal00001ATunisia#TN.NB0c2NBNabeul00001BVietnam#VN.YB0c2YBYen Bai000018Liberia#LR.BM0c2BMBomi00001BTanzania#TZ.KR0c2KRKagera000016Brazil#0090c2GOGoias000025WorldwithCountries#1130c2MYMalaysia00001FEurope#0420c2UKUnited Kingdom00001CMinnesota#0870c2MAMahnomen000018Kentucky#0710c2FOFloyd000017Michigan#0810c2KNKent000018Italy#0040c2CMCampania000019NewWorld#1580c2NONorway000020Virginia#1470c2PEPrince Edward00001DSouthDakota#0170c2BFBuffalo000018Kansas#1990c2WAWallace000020Mexico#0230c2SASan Luis Potosi00001BMissouri#1550c2PMPemiscot00001BCalifornia#0590c2OROrange000017Texas#2270c2HOWHoward000026Virginia#6900c2MVMartinsville (City)000019Nebraska#1590c2SESeward000017Georgia#0350c2BSButts000026MadagascarRegions#MG.AS.DI0c2DIDiana000023WestEuropeanRegion#010c2BEBelgium000023Slovenia#080c2LJOsrednjeslovenska00001CNewWorld#060c2CRCosta Rica000017Japan#120c2HOHokkaido00002BCroatia#170c2VPViroviti&#269;ko-Podravska000016Honduras#180c2YOYoro000017Bulgaria#390c2ABurgas00001ACostaRica#040c2HEHeredia000017Ontario#150c2HTHalton000028Poland#850c2WNWarmi&#324;sko-Mazurskie000024Cuba#140c2SSSancti Sp&iacute;ritus00001FIndonesia#400c2KRRiau Islands00001CKuwait#KW.JA0c2JAAl Jahrah000026SaoTomeandPrincipe#ST.MZ0c2MZMe Zoxi000031DemocraticRepublicoftheCongo#CD.EQ0c2EQEquateur00001DPanama#PA.LS0c2LSLos Santos00001ATanzania#TZ.LI0c2LILindi00001DYemen#YE.HU0c2HUAl Hudaydah000019Yemen#YE.JA0c2JAAl Jawf00001CUganda#UG.RK0c2RKRukungiri00001DMalawi#MW.NK0c2NKNkhotakota000019Brazil#0100c2MAMaranhao000025WorldwithCountries#1140c2MNMongolia00001DEurope#0430c2VAVatican City000023Pennsylvania#1290c2WEWestmoreland000017Texas#0470c2BROBrooks000017Idaho#0650c2MAMadison000024Virginia#5100c2AXAlexandria (City)000015Ohio#0090c2ATAthens00001FMassachusetts#0210c2NONorfolk000018Wyoming#0010c2ALAlbany00001BOregon#0670c2WHWashington00001CTennessee#0690c2HRHardeman00001EItaly#0050c2EMEmilia-Romagna000019NewWorld#1590c2PLPoland000018Maine#0250c2SOSomerset00001BOklahoma#0210c2CHCherokee000015Iowa#0730c2GRGreene00001DTexas#4090c2SAPSan Patricio00001ENewJersey#0150c2GLGloucester00001AIndiana#0250c2CRCrawford000018Mexico#0240c2SISinaloa000021NorthCarolina#0650c2EDEdgecombe000018Georgia#2170c2NENewton00001BKansas#0190c2CQChautauqua00001BIllinois#0550c2FRFranklin00001BMississippi#1630c2YZYazoo000024YukonTerritory#CA.YT.KU0c2KUKluane000020Indonesia#410c2SRWest Sulawesi000022WestEuropeanRegion#020c2FRFrance00001BSlovenia#090c2GOGorenjska000016NewWorld#070c2CUCuba00001APuertoRico#250c2CGCaguas000014Japan#130c2HYHyogo000025Croatia#180c2VSVukovarsko-Srijemska000019Bulgaria#400c2TXDobrich000019Ontario#160c2HMHamilton00001DPoland#860c2WPWielkopolskie00001ECuba#150c2SCSantiago de Cuba00001CSerbia#RS.JA0c2JAJablanica000019Vanuatu#VU.SN0c2SNSanma00001BTunisia#TN.MN0c2MNManouba000024Guinea#GN.FO0c2FOFor&eacute;cariah00001ATuvalu#TV.VI0c2VIVaitupu000018Iran#IR.ES0c2ESEsfahan000025FranceDepartment#FR.BR0c2BRBas Rhin000021FranceDepartment#FR.CH0c2CHCher00001ESaudiArabia#SA.MK0c2MKMakkah00001DKazakhstan#KZ.AM0c2AMAqmola00001BBurundi#BI.MA0c2MAMakamba000023Guyana#GY.DE0c2DEDemerara-Mahaica000019Georgia#0370c2CLCalhoun00001CBrazil#0110c2MTMato Grosso000022WorldwithCountries#1150c2NPNepal000017Europe#0440c2CYCyprus00001CMinnesota#0890c2MRMarshall00001BKentucky#0730c2FRFranklin00001BMichigan#0830c2KEKeweenaw000019Florida#0010c2ALAlachua00001EWestVirginia#0010c2BABarbour000025Italy#0060c2FIFriuli-Venezia Giulia00001BNewWorld#1600c2PTPortugal000017Asia3#0020c2AMArmenia000020Virginia#1490c2PGPrince George00001BSouthDakota#0190c2BTButte00001BKansas#2010c2WSWashington000017Mexico#0250c2SOSonora000018Missouri#1570c2PRPerry00001BCalifornia#0610c2PLPlacer000019Texas#2290c2HUDHudspeth00001BNebraska#1610c2SHSheridan000026WestEuropeanRegion#030c2LULuxembourg00002ASlovenia#100c2NONotranjsko-kra&scaron;ka00001ANewWorld#080c2DMDominica000011USA#UT0c2UTUtah000016Japan#140c2IBIbaraki000019Croatia#190c2ZDZadarska000019Bulgaria#410c2EBGabrovo00001FCostaRica#060c2LILim&oacute;n000019Ontario#170c2HSHastings000022Poland#870c2ZPZachodniopomorskie000019Cuba#160c2VCVilla Clara000015Iran#IR.YA0c2YAYazd00001AUganda#UG.AB0c2ABKaabong00001AKuwait#KW.HW0c2HWHawalli000020SriLanka#LK.TC0c2TCTrincomalee000024Ethiopia#ET.GA0c2GAGambela peoples000024Cambodia#KH.KG0c2KGKampong Chhnang00001EBurkinaFaso#BF.SR0c2SRSourou000024Mauritania#MR.TZ0c2TZTiris Zemmour000033CentralAmerica2#CE.VG0c2VGVirgin Islands, British00001FMacedonia#MK.PT0c2PTProbistip000022CentralAmerica2#CE.BZ0c2BZBelize000019Tanzania#TZ.MA0c2MAMara000019Malawi#MW.MW0c2MWMwanza000023Brazil#0120c2MSMato Grosso do Sul000025WorldwithCountries#1160c2PKPakistan000017Europe#0450c2TKTurkey00001EPennsylvania#1310c2WOWyoming000016Texas#0490c2BOWBrown000018Idaho#0670c2MIMinidoka000017Ohio#0110c2AUAuglaize000020Massachusetts#0230c2PLPlymouth00001AWyoming#0030c2BHBig Horn000018Oregon#0690c2WEWheeler00001ATennessee#0710c2HDHardin000015Italy#0070c2LALazio00001ANewWorld#1610c2RORomania000015Maine#0270c2WAWaldo00001AOklahoma#0230c2COChoctaw000015Iowa#0750c2GUGrundy00001AAsia3#0030c2AZAzerbaijan000024Alaska#2400c2SFSoutheast Fairbanks000019Texas#4110c2SASSan Saba00001ANewJersey#0170c2HUHudson000019Indiana#0270c2DADaviess000018Mexico#0260c2TATabasco00001FNorthCarolina#0670c2FOForsyth000018Georgia#2190c2OCOconee000019Kansas#0210c2CKCherokee000019Illinois#0570c2FUFulton000022WestEuropeanRegion#040c2MCMonaco000020Slovenia#110c2SPGori&scaron;ka000020NewWorld#090c2DODominican Rep.000017USA#WA0c2WAWashington000019PuertoRico#270c2CACamuy000018USA#CT0c2CTConnecticut000017Japan#150c2ISIshikawa000020Croatia#200c2ZGZagreba&#269;ka00001DBulgaria#420c2COGrad Sofiya00001DCostaRica#070c2PUPuntarenas000016Ontario#180c2HUHuron00001ESerbia#RS.JC0c2JCSouth Backa000019Vanuatu#VU.TF0c2TFTafea00001APalau#PW.ME0c2MEMelekeok000017Uganda#UG.AC0c2ACApac000019Benin#BJ.AK0c2AKAtacora000021Seychelles#SC.SY0c2SYSeychelles00001DEurope2#EU.LT0c2LTLithuania00001BCambodia#KH.KH0c2KHKratie00001FBurkinaFaso#BF.SS0c2SSSissili00001FSriLanka#LK.BC0c2BCBatticaloa00001EPanama#PA.NB0c2NBNgobe Bugle000022HongKong#HK.YT0c2YTYan Tsim Mong000030CentralAfricanRepublic#CF.HS0c2HSMambere-Kadei00001ATanzania#TZ.MB0c2MBMbeya00001ANebraska#1630c2SMSherman000018Georgia#0390c2CMCamden00001DBrazil#0130c2MGMinas Gerais000028WorldwithCountries#1170c2PHPhilippines000017Europe#0460c2RURussia00001AMinnesota#0910c2MTMartin000019Kentucky#0750c2FUFulton000017Michigan#0850c2LKLake000017Florida#0030c2BABaker00001FWestVirginia#0030c2BEBerkeley000017Italy#0080c2LILiguria00001DNewWorld#1620c2SMSan Marino00001ESouthDakota#0210c2CACampbell000018Kansas#2030c2WHWichita00001BMexico#0270c2TMTamaulipas000019Missouri#1590c2PTPettis00001BCalifornia#0630c2PUPlumas00001CAlaska#0600c2BRBristol Bay000015Texas#2310c2HUNHunt000028Manitoba#CA.MB.IR0c2IRInterlake Region000027WestEuropeanRegion#050c2NLNetherlands000026Slovenia#120c2JPObalno-kra&scaron;ka00001DNewWorld#100c2SVEl Salvador000014Japan#160c2IWIwate00001CCroatia#210c2GZGrad Zagreb000018Bulgaria#430c2XHaskovo000022CostaRica#080c2SJSan Jos&eacute;00001FOntario#190c2KLKawartha Lakes00002BPolandCounties#PL.LB.ZM0c2BZMZielona Gora000027PolandCounties#PL.ZP.KM0c2ZKMKoszalin000017Guinea#GN.FR0c2FRFria00001BUganda#UG.AD0c2ADAdjumani000019Benin#BJ.AL0c2ALAlibori00001DSwaziland#SZ.LU0c2LULubombo00001ALibya#LY.GD0c2GDGhadamis000024DenmarkRegion#DK.SD0c2SDSyddanmark00001EEurope2#EU.LU0c2LULuxembourg00001DEurope2#EU.MK0c2MKMacedonia000022BurkinaFaso#BF.ST0c2STSanmatenga00001CSriLanka#LK.BD0c2BDBadulla00001BNamibia#NA.CA0c2CACaprivi000030CentralAmerica2#CE.VI0c2VIVirgin Islands, U.S.000026CentralAmerica2#CE.CR0c2CRCosta Rica00001DRussia#RU.ZB0c2ZBZabaykalsk000019Uganda#UG.RO0c2ROKaliro00001CUganda#UG.SE0c2SESembabule000021SolomonIsland#SB.WE0c2WEWestern00001BIllinois#0590c2GAGallatin000015Brazil#0140c2PAPara000023WorldwithCountries#1180c2RURussia00001BPennsylvania#1330c2YOYork000019Texas#0510c2BUSBurleson000019Idaho#0690c2NPNez perce000016Ohio#0130c2BEBelmont00001FMassachusetts#0250c2SUSuffolk00001AWyoming#0050c2CMCampbell000018Oregon#0710c2YAYamhill00001BTennessee#0730c2HWHawkins000019Italy#0090c2LOLombardia000019NewWorld#1630c2CSSerbia00001AMaine#0290c2WSWashington00001BOklahoma#0250c2CICimarron000016Iowa#0770c2GTGuthrie00001AAsia3#0050c2BDBangladesh00001BTexas#4130c2SCHSchleicher00001DNewJersey#0190c2HTHunterdon00001AIndiana#0290c2DEDearborn000018NewYork#0010c2ALAlbany000019Mexico#0280c2TLTlaxcala000020NorthCarolina#0690c2FRFranklin00001CGeorgia#2210c2OGOglethorpe000019Kansas#0230c2CNCheyenne000019NewWorld#110c2GDGrenada000024PuertoRico#290c2CVCan&oacute;vanas00002DBosniaHerzegovina#010c2BOBosanskopodrinjski000015Japan#170c2KAKagawa00001ABulgaria#440c2KKurdzhali000017Ontario#200c2KEKenora000016Fiji#FJ.WE.RA0c2RARa000025FranceDepartment#FR.VC0c2VCVaucluse00001CChina2#CN.CQ0c2CQChongqing000023FranceDepartment#FR.CL0c2CLCantal000022FranceDepartment#FR.DB0c2DBDoubs000024SaoTomeandPrincipe#ST.PA0c2PAPague00001AEurope2#EU.LV0c2LVLatvia000019Nigeria#NG.BO0c2BOBorno00001BSomalia#SO.HI0c2HIHiiraan00002FGuyana#GY.UT0c2UTUpper Takutu-Upper Essequibo00001AChad#TD.BI0c2BIWadi Fira00001BBurundi#BI.KY0c2KYKayanza000019Djibouti#DJ.AR0c2ARArta000019Malawi#MW.MZ0c2MZMzimba000018Nebraska#1650c2SISioux000018Brazil#0150c2PBParaiba000026WorldwithCountries#1190c2SGSingapore00001AMinnesota#0930c2MKMeeker00001BKentucky#0770c2GAGallatin000019Michigan#0870c2LPLapeer000021Virginia#5150c2BFBedford (City)000015Florida#0050c2BYBay00001CWestVirginia#0050c2BOBoone000016Italy#0100c2MAMarche00001BNewWorld#1640c2SKSlovakia000016Asia3#0060c2BTBhutan000021Virginia#1530c2PWPrince William000021SouthDakota#0230c2CMCharles Mix000019Alabama#0010c2AUAutauga000017Kansas#2050c2WLWilson00001FMexico#0290c2VEVeracruz-Llave000019Missouri#1610c2PHPhelps00001ECalifornia#0650c2RIRiverside00001BTexas#2330c2HUTHutchinson000022USACentralRegion#170c2ILIllinois00001BNewWorld#120c2GTGuatemala000038BosniaHerzegovina#020c2HNHercegova&#269;ko-neretvanski000018Japan#180c2KGKagoshima00001BAustralia#TA0c2TATasmania00001CBulgaria#450c2KHKyustendil000018Ontario#210c2LALambton00001CTunisia#TN.MS0c2MSMonastir000023FranceDepartment#FR.VD0c2VDVendee000019Oman#OM.MU0c2MUMusandam00002EFranceDepartment#FR.CM0c2CMCharente Maritime00001BTonga#TO.TT0c2TTTongatapu00001DCambodia#KH.KK0c2KKKoh Kong00001BSriLanka#LK.AP0c2APAmpara00001EAngola#AO.LN0c2LNLunda Norte000029BurkinaFaso#BF.BK0c2BKBoulkiemd&eacute;00001FPhilippines#PH.PL0c2PLPalawan00001DKazakhstan#KZ.AR0c2ARAtyrau00001ARussia#RU.YN0c2YNYamalia00001FDjibouti#DJ.AS0c2ASAli Sabieh000019Illinois#0610c2GRGreene000017Brazil#0160c2PRParana000026WorldwithCountries#1200c2LKSri Lanka000017Texas#0530c2BUNBurnet000016Idaho#0710c2ONOneida000014Ohio#0150c2BRBrown000021Massachusetts#0270c2WOWorcester000018Wyoming#0070c2CACarbon00001BTennessee#0750c2HYHaywood000016Italy#0110c2MOMolise00001BNewWorld#1650c2SISlovenia000014Maine#0310c2YOYork00001COklahoma#0270c2CECleveland000017Iowa#0790c2HAHamilton000016Asia3#0070c2BNBrunei000017Texas#4150c2SCUScurry00001ANewJersey#0210c2MEMercer000019Indiana#0310c2DCDecatur00001ANewYork#0030c2AEAllegany000018Mexico#0300c2YUYucatan00001ENorthCarolina#0710c2GAGaston00001AGeorgia#2230c2PDPaulding000016Kansas#0250c2CAClark000017NewWorld#130c2HTHaiti00001CPuertoRico#310c2CNCarolina00002ABosniaHerzegovina#030c2KSKanton Sarajevo000017Japan#190c2KNKanagawa000018Bulgaria#460c2OBLovech000017Ontario#220c2LNLanark000026CentralEuropeanRegion#010c2ATAustria00001AMacau#MO.IL.TA0c2TATaipa000028NewBrunswick#CA.NB.RV0c2RVRiver Valley000025FranceDepartment#FR.DD0c2DDDordogne000018Tonga#TO.VA0c2VAVava'u00001ABhutan#BT.TM0c2TMThimphu00001FBurkinaFaso#BF.BL0c2BLBoulgou00001BMacedonia#MK.RE0c2REResen000020Philippines#PH.PM0c2PMPampanga00001DKazakhstan#KZ.AS0c2ASAstana000020CentralAmerica2#CE.CU0c2CUCuba00001AUganda#UG.RR0c2RRMbarara000022Guyana#GY.CU0c2CUCuyuni-Mazaruni00001ANebraska#1670c2STStanton000019Georgia#0430c2CNCandler00001BBrazil#0170c2PEPernambuco000027WorldwithCountries#1210c2TJTajikistan00001EMinnesota#0950c2MIMille Lacs00001AKentucky#0790c2GRGarrard00001BMichigan#0890c2LLLeelanau00001AFlorida#0070c2BFBradford00001EWestVirginia#0070c2BRBraxton000018Italy#0120c2PIPiemonte000018NewWorld#1660c2ESSpain000017Asia3#0080c2MMBurma (00001AVirginia#1550c2PUPulaski00001BSouthDakota#0250c2CLClark000019Alabama#0030c2BABaldwin000018Kansas#2070c2WOWoodson00001AMexico#0310c2ZAZacatecas000017Missouri#1630c2PIPike00001FCalifornia#0670c2SASacramento000016Texas#2350c2IRIIrion00001EUSACentralRegion#190c2IAIowa00001ANewWorld#140c2HNHonduras00002ABosniaHerzegovina#040c2SRSrednjebosanski000014Japan#200c2KOKochi000018Bulgaria#470c2MMontana000024Ontario#230c2LGLeeds and Grenville00002CCentralEuropeanRegion#020c2CZCzechRepublic00001BSwitzerland#010c2AAAargau000037NorthWestTerritories#CA.NT.GS0c2GSGreat Slave Gateway000019Malawi#MW.NS0c2NSNsanje000024Tibet#TI.SP0c2SPShannan Prefecture000026FranceDepartment#FR.CO0c2COCote d'Or00001EEurope2#EU.MO0c2MOMontenegro000021Cambodia#KH.KM0c2KMKampong Cham00001CAlgeria#DZ.RE0c2RERelizane00001BBurkinaFaso#BF.BM0c2BMBam000022Philippines#PH.PN0c2PNPangasinan00001DKazakhstan#KZ.AT0c2ATAqtobe00001FGuineaBissau#GW.BA0c2BABafata00001AUganda#UG.SI0c2SISironko000029Guyana#GY.EB0c2EBEast Berbice-Corentyne000019Illinois#0630c2GUGrundy000016Brazil#0180c2PIPiaui000025WorldwithCountries#1220c2THThailand000019Texas#0550c2CALCaldwell000016Idaho#0730c2OWOwyhee000015Ohio#0170c2BTButler00001AWyoming#0090c2COConverse00001DTennessee#0770c2HSHenderson000016Italy#0130c2PUPuglia000019NewWorld#1670c2SESweden000017Oklahoma#0290c2CLCoal000016Iowa#0810c2HNHancock000018Asia3#0090c2KHCambodia00001CTexas#4170c2SHAShackelford00001DNewJersey#0230c2MIMiddlesex000019Indiana#0330c2DKDe Kalb000017NewYork#0050c2BRBronx000021Mexico#0320c2DIDistrito Federal00001DNorthCarolina#0730c2GTGates000017Georgia#2250c2PAPeach000015Kansas#0270c2CYClay000027MadagascarRegions#MG.MA.ML0c2MLMelaky000022Switzerland#020c2ARAusser-Rhoden000020USACentralRegion#200c2KSKansas000019NewWorld#150c2JMJamaica000021PuertoRico#330c2CTCata&ntilde;o000024BosniaHerzegovina#050c2TUTuzlanski000017Japan#210c2KUKumamoto00001CBulgaria#480c2PAPazardzhik000025Ontario#240c2LELennox and Addington000026CentralEuropeanRegion#030c2DEGermany00001DLibya#LY.YJ0c2YJYafran-Jadu000023FranceDepartment#FR.VG0c2VGVosges000017Uganda#UG.AI0c2AIAbim000017Nauru#NR.YA0c2YAYaren00001CBenin#BJ.AQ0c2AQAtlantique00001AVietnam#VN.HA0c2HAHa Tay00001BCambodia#KH.KN0c2KNKandal000019Bhutan#BT.TO0c2TOTongsa000024Liberia#LR.CM0c2CMGrand Cape Mount00001CSudan#SD.RN0c2RNRiver Nile00001ESudan#SD.SD0c2SDSouth Darfur000024CentralAmerica2#CE.DM0c2DMDominica000026Virginia#7000c2NNNewport News (City)000019Nebraska#1690c2THThayer000019Georgia#0450c2CRCarroll00001FBrazil#0190c2RJRio de Janeiro000029WorldwithCountries#1230c2TMTurkmenistan00001CMinnesota#0970c2MSMorrison000018Kentucky#0810c2GNGrant00001AMichigan#0910c2LELenawee000019Florida#0090c2BVBrevard00001DWestVirginia#0090c2BKBrooke000018Italy#0140c2SASardegna00001ENewWorld#1680c2CHSwitzerland000015Asia3#0100c2CNChina00001FVirginia#1570c2RPRappahannock00001ASouthDakota#0270c2CYClay000019Alabama#0050c2BRBarbour00001AKansas#2090c2WYWyandotte000019Missouri#1650c2PAPlatte00001FCalifornia#0690c2SNSan Benito000015Texas#2370c2JACJack000025Australia2#NSW0c2NSWNew South Wales000029NewCaledonia#NC.NO.OG0c2OGOu&eacute;goa000025Switzerland#030c2BLBasel-Landschaft000018NewWorld#160c2MXMexico000027BosniaHerzegovina#060c2USUnsko-sanski000014Japan#220c2KYKyoto000018Bulgaria#490c2PKPernik00001BOntario#250c2MAManitoulin000022USANorthWestRegion#410c2OROregon000028Slovakia#010c2BCBansk&aacute; Bystrica000026CentralEuropeanRegion#040c2HUHungary00001CLibya#LY.ZA0c2ZAAz Zawiyah000019Malawi#MW.NU0c2NUNtcheu00001BVietnam#VN.GL0c2GLGia Lai000024Morocco#MA.SM0c2SMSouss Massa Draa00001ESaudiArabia#SA.NJ0c2NJNajran000018Guinea#GN.YO0c2YOYomou00001ELaos#LA.LM0c2LMLouang Namtha00001BIllinois#0650c2HAHamilton000024Brazil#0200c2RNRio Grande do Norte000027WorldwithCountries#1240c2UZUzbekistan000018Texas#0570c2CAHCalhoun000017Idaho#0750c2PAPayette000021Virginia#5200c2BSBristol (City)000016Ohio#0190c2CACarroll000017Wyoming#0110c2CRCrook000019Tennessee#0790c2HEHenry000017Italy#0150c2SISicilia00001ANewWorld#1690c2UAUkraine00001BOklahoma#0310c2CMComanche000015Iowa#0830c2HRHardin000017Texas#4190c2SHEShelby00001CNewJersey#0250c2MOMonmouth00001AIndiana#0350c2DLDelaware000018NewYork#0070c2BOBroome00001ENorthCarolina#0750c2GRGraham000019Georgia#2270c2PCPickens000016Kansas#0290c2CDCloud000021SouthCarolina#0010c2ABAbbeville000020Switzerland#040c2BSBasel-Stadt00001BNewWorld#170c2NINicaragua000016USA#WI0c2WIWisconsin000019PuertoRico#350c2CYCayey000038BosniaHerzegovina#070c2ZAZapadnobosanska &#381;upanija000012Japan#230c2MIMie000018Bulgaria#500c2EHPleven00001AOntario#260c2MIMiddlesex00001CSlovakia#020c2BLBratislava00002CCentralEuropeanRegion#050c2LILiechtenstein00001DPalau#PW.NC0c2NCNgarchelong000016Iran#IR.GI0c2GIGilan000023FranceDepartment#FR.CR0c2CRCreuse00001FVietnam#VN.HC0c2HCHo Chi Minh00001BCambodia#KH.KP0c2KPKampot000020Morocco#MA.TD0c2TDTadla Azilal00001CAngola#AO.LS0c2LSLunda Sul00001FUzbekistan#UZ.NG0c2NGNamangan000029Mauritania#MR.DN0c2DNDakhlet Nouadhibou00002ECentralAmerica2#CE.DO0c2DODominican Republic000016Nepal#NP.KO0c2KOKosi00001CRussia#RU.YS0c2YSYaroslavl000019Nebraska#1710c2TOThomas000019Georgia#0470c2CSCatoosa000022Brazil#0210c2RSRio Grande do Sul000024WorldwithCountries#1250c2VNVietnam000019Minnesota#0990c2MWMower000019Kentucky#0830c2GVGraves00001DMichigan#0930c2LILivingston000019Florida#0110c2BWBroward00001DWestVirginia#0110c2CACabell000017Italy#0160c2TOToscana000021NewWorld#1700c2UKUnited Kingdom00001AAsia3#0120c2TPEast Timor00001BVirginia#1590c2RCRichmond00001FSouthDakota#0290c2COCodington000016Alabama#0070c2BIBibb000017Missouri#1670c2POPolk000023California#0710c2SBSan Bernardino00001FAlaska#0680c2DEDenali Borough000018Texas#2390c2JAKJackson000019Switzerland#050c2BEBern000018NewWorld#180c2PAPanama000014USA#VT0c2VTVermont000030BosniaHerzegovina#080c2ZDZeni&#269;ko-Dobojski000015Japan#240c2MYMiyagi000019Bulgaria#510c2PBPlovdiv000018Ontario#270c2MUMuskoka00001FSlovakia#030c2KIKo&scaron;ice000025CentralEuropeanRegion#060c2PLPoland000024MarshallIsland#MH.MH.JL0c2JLJaluit00001BSerbia#RS.KB0c2KBKolubara000017Iran#IR.ZA0c2ZAZanjan00001APalau#PW.ND0c2NDNgaraard000029FranceDepartment#FR.CS0c2CSCorse du Sud00001DVietnam#VN.HD0c2HDHai Duong000015Nauru#NR.EW0c2EWEwa000028DenmarkRegion#DK.SL0c2SLSj&aelig;lland000022Ethiopia#ET.HA0c2HAHarari people000022Comoros #KM.GC0c2GCGrande Comore00001AIllinois#0670c2HCHancock000019Brazil#0220c2RORondonia000023WorldwithCountries#1260c2TWTaiwan00001BNorthDakota#0010c2ADAdams000019Texas#0590c2CANCallahan000015Idaho#0770c2POPower000018Ohio#0210c2CHChampaign000019Wyoming#0130c2FRFremont00001BTennessee#0810c2HIHickman000023Italy#0170c2TRTrentino-Alto Adige00001FNewWorld#1710c2VAVatican City000019Oklahoma#0330c2CTCotton000017Iowa#0850c2HIHarrison000017Asia3#0130c2GEGeorgia000018Texas#4210c2SHRSherman00001ANewJersey#0270c2MRMorris000018Indiana#0370c2DUDubois00001DNewYork#0090c2CACattaraugus000021NorthCarolina#0770c2GNGranville000018Georgia#2290c2PEPierce000017Kansas#0310c2CFCoffey00001DSouthCarolina#0030c2AIAiken00001DSwitzerland#060c2FRFribourg000027NewWorld#190c2KNSt. Kitts &amp; Nevis000019PuertoRico#370c2CBCeiba000031BosniaHerzegovina#090c2ZP&#381;upanija Posavska000017Japan#250c2MAMiyazaki000019Bulgaria#520c2PPRazgrad000018Ontario#280c2NINiagara000017Slovakia#040c2NINitra000027CentralEuropeanRegion#070c2SKSlovakia00002BPolandCounties#PL.DS.JM0c2DJMJelenia Gora000019Uganda#UG.AM0c2AMAmuria000025FranceDepartment#FR.CT0c2CTCharente00001AKyrgyzstan#KG.OS0c2OSOsh000019Europe2#EU.MT0c2MTMalta00002BMorocco#MA.RZ0c2RZRabat Sale Zemmour Zaer000019Angola#AO.LU0c2LULuanda000019Angola#AO.NA0c2NANamibe00001FChad#TD.CG0c2CGChari-Baguirmi00001ELaos#LA.LP0c2LPLouangphabang000017Texas#2410c2JASJasper00001BNebraska#1730c2TUThurston00001AGeorgia#0490c2CHCharlton000018Brazil#0230c2RRRoraima000026WorldwithCountries#1270c2HKHong Kong00001AMinnesota#1010c2MUMurray00001AKentucky#0850c2GYGrayson000017Michigan#0950c2LULuce000019Florida#0130c2CACalhoun00001EWestVirginia#0130c2CHCalhoun000016Italy#0180c2UMUmbria000019NewWorld#1720c2CYCyprus000015Asia3#0140c2INIndia00001AVirginia#1610c2RNRoanoke00001CSouthDakota#0310c2CSCorson000018Alabama#0090c2BLBlount00001AMissouri#1690c2PLPulaski00001ECalifornia#0730c2SDSan Diego00001BAlaska#0700c2DIDillingham00001BSwitzerland#070c2GEGeneve00001BNewWorld#200c2LCSt. Lucia000041BosniaHerzegovina#100c2ZZ&#381;upanija Zapadnohercegova&#269;ka000015Japan#260c2NANagano000015Bulgaria#530c2PRuse00001AOntario#290c2NPNipissing00001FSlovakia#050c2PVPre&scaron;ov000027CentralEuropeanRegion#080c2SLSlovenia00002DNewBrunswick#CA.NB.AR0c2ARAppalachian Range000018Niger#NE.AG0c2AGAgadez00001ESerbia#RS.JN0c2JNSouth Banat000019Uganda#UG.BD0c2BDBudaka00001ASyria#SY.DI0c2DIDamascus000020Cambodia#KH.KS0c2KSKampong Spe00001ACapeVerde#CV.MA0c2MAMaio00001EAlgeria#DZ.SA0c2SASouk Ahras00001AAngola#AO.ML0c2MLMalanje000019Sudan#SD.RS0c2RSRed Sea000018Sudan#SD.SI0c2SISennar000019Kansas#0330c2CMComanche000021SouthCarolina#0050c2ALAllendale000019Illinois#0690c2HRHardin00001FBrazil#0240c2SCSanta Catarina000022WorldwithCountries#1280c2MOMacau00001CNorthDakota#0030c2BABarnes000018Texas#0610c2CAMCameron000018Idaho#0790c2SHShoshone000014Ohio#0230c2CLClark000018Wyoming#0150c2GOGoshen00001BTennessee#0830c2HOHouston00001DItaly#0190c2VAValle d'Aosta000019NewWorld#1730c2TKTurkey000018Oklahoma#0350c2CGCraig000014Iowa#0870c2HEHenry000019Asia3#0150c2IDIndonesia000016Texas#4230c2SMISmith000019NewJersey#0290c2OCOcean000019Indiana#0390c2ELElkhart000018NewYork#0110c2CYCayuga00001ENorthCarolina#0790c2GEGreene000016Georgia#2310c2PIPike00002ANorthAmerica#0010c2AGAntigua and Barbuda000021NewCaledonia#NC.IL.LI0c2LILifou000029NewCaledonia#NC.NO.PB0c2PBPou&eacute;bo00001BSwitzerland#080c2GLGlarus000022USACentralRegion#260c2MIMichigan000032NewWorld#210c2VCSt. Vincent &amp; the Grenadines00001APuertoRico#390c2CLCiales00002BBosniaHerzegovina#110c2RSRepublika Srpska000017Japan#270c2NGNagasaki000017Bulgaria#540c2HShumen000018Ontario#300c2NONorfolk00001FMontenegro#010c2ANAndrijevica000025Slovakia#060c2TCTren&#269;&iacute;n00002ACentralEuropeanRegion#090c2CHSwitzerland000020FrenchGuiana#GF.SL.SA0c2SASaul000028PolandCounties#PL.MA.NM0c2MNMNowy Sacz00001AFiji#FJ.EA.KD0c2KDKadavu000019Vanuatu#VU.TR0c2TRTorba000029FranceDepartment#FR.VM0c2VMVal-de-Marne00001DCameroon#CM.LT0c2LTLittoral000025FranceDepartment#FR.CV0c2CVCalvados00001CVietnam#VN.HG0c2HGHa Giang00001FEurope2#EU.NL0c2NLNetherlands000021Cambodia#KH.KT0c2KTKampong Thom00001BBurkinaFaso#BF.TU0c2TUTuy00002CMorocco#MA.TH0c2THTaza Al Hoceima Taounate000022Algeria#DZ.SB0c2SBSidi Bel Abbes00001BNigeria#NG.BY0c2BYBayelsa000019Nigeria#NG.DE0c2DEDelta00001DMacedonia#MK.RM0c2RMRosoman000023CoteDivoire#CI.SB0c2SBSud-Bandama00001BTexas#2430c2JEDJeff Davis000019Nebraska#1750c2VAValley000019Georgia#0510c2CAChatham00001ABrazil#0250c2SPSao Paulo000024WorldwithCountries#1290c2ALAlbania00001CMinnesota#1030c2NINicollet000018Kentucky#0870c2GEGreen00001BMichigan#0970c2MKMackinac00001BFlorida#0150c2CHCharlotte00001BWestVirginia#0150c2CLClay000020Scotland#0010c2ABAberdeenshire000016Italy#0200c2VEVeneto000019NewWorld#1740c2RURussia00001DVirginia#1630c2RKRockbridge00001CSouthDakota#0330c2CUCuster000019Alabama#0110c2BUBullock000019Missouri#1710c2PUPutnam00001ENorthAmerica#0020c2BSBahamas000022California#0750c2SFSan Francisco000024Switzerland#090c2GRGraub&uuml;nden000023USACentralRegion#270c2MNMinnesota000027NewWorld#220c2TTTrinidad &amp; Tobago000026Australia2#NT0c2NTNorthern Territory000013Japan#280c2NRNara00001ABulgaria#550c2CCSilistra00001FOntario#310c2NRNorthumberland000017Montenegro#020c2BABar000018Slovakia#070c2TATrnava000019Uganda#UG.TG0c2TGKitgum000023FranceDepartment#FR.VN0c2VNVienne000018Iran#IR.HD0c2HDHamadan000022FranceDepartment#FR.DM0c2DMDrome000032DemocraticRepublicoftheCongo#CD.HC0c2HCOrientale000019Congo#CG.BO0c2BOBouenza000019Gambia#GM.BJ0c2BJBanjul00001CMacedonia#MK.SD0c2SDDojran00001EMacedonia#MK.RN0c2RNRankovce000020Sudan#SD.SK0c2SKSouth Kurdufan00001BBhutan#BT.BU0c2BUBumthang00001ABhutan#BT.CK0c2CKChhukha000017Bhutan#BT.DA0c2DADaga00002FCentralAfricanRepublic#CF.KB0c2KBNana-Grebizi000026Chad#TD.BT0c2BTBorkou-Ennedi-Tibesti00001DTanzania#TZ.MO0c2MOMorogoro000021CoteDivoire#CI.SC0c2SCSud-Comoe000017Kansas#0350c2CLCowley000020SouthCarolina#0070c2ANAnderson00001CIllinois#0710c2HEHenderson000018Brazil#0260c2SESergipe000024WorldwithCountries#1300c2ADAndorra00001CNorthDakota#0050c2BEBenson000015Texas#0630c2CAPCamp000015Idaho#0810c2TETeton000017Ohio#0250c2CEClermont00001DWyoming#0170c2HSHot Springs00001DTennessee#0850c2HPHumphreys000018Scotland#0020c2ANAngus000019Italy#0210c2SMSanmarino00001CNewWorld#1750c2AUAustralia000018Oklahoma#0370c2CKCreek000015Iowa#0890c2HOHoward00001ATexas#4250c2SOMSomervell00001BNewJersey#0310c2PAPassaic000019Indiana#0410c2FAFayette00001CNewYork#0130c2CHChautauqua000020NorthCarolina#0810c2GUGuilford000016Georgia#2330c2POPolk00001DIreland#0010c2CACeatharlach00001FNorthAmerica#0030c2BBBarbados000027NewCaledonia#NC.IL.MA0c2MAMar&eacute;00002CNewCaledonia#NC.NO.PD0c2PDPoindimi&eacute;000021Switzerland#100c2IRInner-Rhoden000017Canada#010c2ABAlberta00001FNewWorld#230c2USUnited States000019PuertoRico#410c2CDCidra000016Japan#290c2NINiigata000018Bulgaria#560c2CHSliven000017Ontario#320c2OTOttawa00001AMontenegro#030c2BEBerane00001DSlovakia#080c2ZI&#381;ilina000019Uganda#UG.SR0c2SRSoroti00001EMacedonia#MK.AD0c2ADAerodrom00001BMalawi#MW.PH0c2PHPhalombe000027FranceDepartment#FR.VO0c2VOVal d'Oise00002AGuinea#GN.GU0c2GUGu&eacute;ck&eacute;dou000019Uganda#UG.BG0c2BGBugiri000018Benin#BJ.BO0c2BOBorgou000020Cyprus2#CY.GC0c2GCGreek Cyprus000019Iran#IR.GO0c2GOGolestan000019Algeria#DZ.SD0c2SDSaida00001ANepal#NP.MA0c2MAMahakali00001FPapuaNewGuinea#PG.GU0c2GUGulf000019Burundi#BI.NG0c2NGNgozi00001ATexas#2450c2JEFJefferson00001DNebraska#1770c2WAWashington00001FGeorgia#0530c2CCChattahoochee00001ABrazil#0270c2TOTocantins000024WorldwithCountries#1310c2ATAustria00001AMinnesota#1050c2NONobles00001AKentucky#0890c2GUGreenup000019Michigan#0990c2MBMacomb000018Florida#0170c2CICitrus000020WestVirginia#0170c2DODoddridge000019Scotland#0030c2ARArgyll000017NewWorld#1760c2FJFiji00001DVirginia#1650c2RGRockingham00001DSouthDakota#0350c2DADavison000018Alabama#0130c2BTButler000018Missouri#1730c2RSRalls00001FIreland#0020c2CVCabh&aacute;n00001DNorthAmerica#0040c2BZBelize000020California#0770c2SJSan Joaquin00001BSwitzerland#110c2LULuzern000020Canada#020c2BCBritish Columbia000022USACentralRegion#290c2MOMissouri00001BNewWorld#240c2GLGreenland000013Japan#300c2OIOita000022Australia#SW0c2SWNew South Wales000019Bulgaria#570c2CMSmolyan000017Ontario#330c2OXOxford000020Montenegro#040c2BPBijelo Polje00002BFranceDepartment#FR.VP0c2VPVille de Paris000018Benin#BJ.CF0c2CFCouffo000019Libya#LY.GR0c2GRGharyan00001AEurope2#EU.NO0c2NONorway00001AMauritius#MU.MO0c2MOMoka00001FNigeria#NG.CR0c2CRCross River00001DBurkinaFaso#BF.BW0c2BWBanwa00001DAlgeria#DZ.AD0c2ADAin Defla00001FGuineaBissau#GW.CA0c2CACacheu000019Kansas#0370c2CRCrawford00001FSouthCarolina#0090c2BABamberg000018Illinois#0730c2HNHenry00001ABelgium#0100c2BRBrussels000024WorldwithCountries#1320c2BYBelarus00001ENorthDakota#0070c2BIBillings000017Texas#0650c2CARCarson00001AIdaho#0830c2TFTwin falls000016Ohio#0270c2CIClinton000019Wyoming#0190c2JOJohnson000025Europewithcountries#0010c2ALAlbania00001BTennessee#0870c2JAJackson00001BScotland#0040c2AYAyrshire00001BNewWorld#1770c2KIKiribati000019Oklahoma#0390c2CSCuster000017Iowa#0910c2HUHumboldt000015Asia3#0190c2JPJapan000016Texas#4270c2STAStarr000019NewJersey#0330c2SASalem000017Indiana#0430c2FLFloyd000019NewYork#0150c2CEChemung00001FNorthCarolina#0830c2HAHalifax000019Georgia#2350c2PLPulaski00001DIreland#0030c2CLCl&aacute;r00001DNorthAmerica#0050c2CACanada000019Montenegro#050c2BUBudva000024Switzerland#120c2NENeuch&acirc;tel000018Canada#030c2MBManitoba00001BNewWorld#250c2ARArgentina000019PuertoRico#430c2COCoamo000018Bahamas#010c2AKAcklins000016Japan#310c2OKOkayama000017Bulgaria#580c2CSofiya00001COntario#340c2PSParry Sound000024SierraLeone#SL.NO.KD0c2KDKoinadugu00001DDjibouti#DJ.DB0c2DBDjibouti000024EquatorialGuinea#GQ.AN0c2ANAnnobon00001AIran#IR.HG0c2HGHormozgan000024FranceDepartment#FR.CZ0c2CZCorreze000019Algeria#DZ.SF0c2SFSetif000020Bhutan#BT.TY0c2TYTashi Yangtse00001DCongo#CG.BR0c2BRBrazzaville00001FGuineaBissau#GW.BL0c2BLBolama000019Texas#2470c2JIHJim Hogg000021Virginia#7100c2NONorfolk (City)000018Nebraska#1790c2WYWayne00001BGeorgia#0550c2CGChattooga000020Belgium#0110c2VBVlaams-Brabant000024WorldwithCountries#1330c2BEBelgium00001AMinnesota#1070c2NRNorman00001AKentucky#0910c2HAHancock00001BMichigan#1010c2MSManistee000016Florida#0190c2CLClay00001BMississippi#0010c2ADAdams000025Europewithcountries#0020c2ADAndorra00001EWestVirginia#0190c2FAFayette00001DScotland#0050c2BABanffshire000023NewWorld#1780c2MHMarshall Islands00001AVirginia#1670c2RURussell000019SouthDakota#0370c2DYDay000019Alabama#0150c2CACalhoun00001BMissouri#1750c2RORandolph00001AIreland#0040c2COCorcaigh000021NorthAmerica#0060c2CRCosta Rica000024California#0790c2SPSan Luis Obispo00001BMontenegro#060c2CECetinje00001FMiddleEast#010c2AFAfghanistan00001ESwitzerland#130c2NINidwalden00001DCanada#040c2NBNew Brunswick000022USACentralRegion#310c2NENebraska000019NewWorld#260c2BOBolivia00001EBahamas#020c2BRBerry Islands000016Japan#320c2ONOkinawa00001EBulgaria#590c2CTStara Zagora000015Ontario#350c2PEPeel000022FrenchGuiana#GF.CY.CM0c2CMCamopi000020FranceDepartment#FR.VR0c2VRVar00001EPalau#PW.NL0c2NLNgeremlengui00001BUganda#UG.AT0c2ATAmolatar00001BUganda#UG.BJ0c2BJButaleja000016Libya#LY.GT0c2GTGhat00001DSriLanka#LK.VA0c2VAVavuniya000021Somalia#SO.JD0c2JDJubbada Dhexe000017Yemen#YE.LA0c2LALahij00001FGuineaBissau#GW.BM0c2BMBiombo000018Kansas#0390c2DCDecatur000020SouthCarolina#0110c2BRBarnwell00001BIllinois#0750c2IRIroquois000033WorldwithCountries#1340c2BHBosnia and Herzegovina00001FNorthDakota#0090c2BOBottineau000015Texas#0670c2CASCass000016Idaho#0850c2VAValley000025Virginia#5300c2BVBuena Vista (City)000019Ohio#0290c2COColumbiana00001ENewMexico#0010c2BEBernalillo000019Wyoming#0210c2LALaramie000025Europewithcountries#0030c2ATAustria00001DTennessee#0890c2JEJefferson00001FScotland#0060c2BEBerwickshire00001DNewWorld#1790c2FMMicronesia00001BOklahoma#0410c2DEDelaware000012Iowa#0930c2IDIda00001AAsia3#0210c2KZKazakhstan000019Texas#4290c2STEStephens00001CNewJersey#0350c2SOSomerset00001AIndiana#0450c2FOFountain00001ANewYork#0170c2CNChenango00001FNorthCarolina#0850c2HRHarnett000018Georgia#2370c2PUPutnam000025Ireland#0050c2DOD&uacute;n na nGall00001BNorthAmerica#0070c2CUCuba00002ENewCaledonia#NC.NO.PH0c2PHPon&eacute;rihouen00001FMontenegro#070c2DADanilovgrad00001BMiddleEast#020c2BABahrain00001DSwitzerland#140c2OBObwalden000023EastEuropeanRegion#010c2BYBelarus000029Canada#050c2NLNewfoundland and Labrador000018NewWorld#270c2BRBrazil000022PuertoRico#450c2CMComer&iacute;o000016Belize#010c2BZBelize000017Bahamas#030c2BIBimini000014Japan#330c2OSOsaka00001ENorwayRegion#010c2AKAkershus00001CBulgaria#600c2TTurgovishte000016Ontario#360c2PRPerth000027PolandCounties#PL.SL.KA0c2SKAKatowice00001ECoteDivoire#CI.AG0c2AGAgneby00001APalau#PW.NM0c2NMNgardmau00001AVietnam#VN.HM0c2HMHa Nam000020GuineaBissau#GW.TO0c2TOTombali000025BurkinaFaso#BF.BZ0c2BZBaz&egrave;ga000027CentralAfricanRepublic#CF.KG0c2KGKemo00001BTanzania#TZ.MT0c2MTMtwara000017Nepal#NP.ME0c2MEMechi00001FNorthAmerica#0080c2DMDominica00001ECalifornia#0810c2SESan Mateo00001ATexas#2490c2JIWJim Wells00001ANebraska#1810c2WBWebster00001AGeorgia#0570c2CECherokee000025WorldwithCountries#1350c2BGBulgaria00001BMinnesota#1090c2OLOlmsted000019Kentucky#0930c2HRHardin00001CMichigan#1030c2MQMarquette000019Florida#0210c2COCollier00001CMississippi#0030c2ALAlcorn000025Europewithcountries#0040c2BYBelarus00001DWestVirginia#0210c2GIGilmer000017Scotland#0070c2BUBute000018NewWorld#1800c2NRNauru00001DAsia3#0220c2KPKorea (north)000018Virginia#1690c2SCScott000018Colorado#0010c2ADAdams00001BSouthDakota#0390c2DUDeuel00001AAlabama#0170c2CHChambers000016Missouri#1770c2RARay00002AIreland#0060c2DUBaile &Aacute;tha Cliath000026USANorthWestRegion#530c2WAWashington00001FMontenegro#080c2HNHerceg Novi000018MiddleEast#030c2INIran000021Switzerland#150c2SGSankt Gallen000024SouthEuropeanRegion#010c2ALAlbania000024EastEuropeanRegion#020c2BGBulgaria000017NewWorld#280c2CLChile000014Belize#020c2CYCayo00001CBahamas#040c2BPBlack Point000013Japan#340c2SASaga000020NorwayRegion#020c2AAAust-Agder000016Bulgaria#610c2BVarna00001DOntario#370c2PTPeterborough00001CBurundi#BI.MV0c2MVMuramvya000019Uganda#UG.BL0c2BLBulisa000028FranceDepartment#FR.DS0c2DSDeux Sevres000019Vietnam#VN.HN0c2HNHanoi000022Morocco#MA.TO0c2TOTanger Tetouan00001ANigeria#NG.EB0c2EBEbonyi00001EBurma#MM.KC0c2KCKachin State00001FPhilippines#PH.QR0c2QRQuirino000019Georgia#2390c2QUQuitman00001AIreland#0070c2GAGaillimh000025NorthAmerica#0090c2DODominican Rep.00001AKansas#0410c2DKDickinson000020SouthCarolina#0130c2BEBeaufort00001AIllinois#0770c2JAJackson000024WorldwithCountries#1360c2HYCroatia00001CNorthDakota#0110c2BWBowman000017Texas#0690c2CATCastro00001AIdaho#0870c2WAWashington000018Ohio#0310c2CSCoshocton00001ANewMexico#0030c2CACatron000018Nebraska#0010c2ADAdams000019Wyoming#0230c2LILincoln000025Europewithcountries#0050c2BEBelgium00001BTennessee#0910c2JOJohnson00001CScotland#0080c2CACaithness00001ENewWorld#1810c2NZNew Zealand000018Oklahoma#0430c2DWDewey000013Iowa#0950c2IWIowa00001DAsia3#0230c2KRKorea (south)000019Texas#4310c2STRSterling00001ANewJersey#0370c2SUSussex00001AIndiana#0470c2FRFranklin000019NewYork#0190c2CLClinton00001FNorthCarolina#0870c2HWHaywood000022Montenegro#090c2KLKola&scaron;in000018MiddleEast#040c2IZIraq000021Switzerland#160c2SCSchaffhausen000024SouthEuropeanRegion#020c2ADAndorra000023EastEuropeanRegion#030c2MDMoldova00001BCanada#070c2NSNova Scotia00001ANewWorld#290c2COColombia000021Quebec#010c2BSBas-Saint-Laurent00001BPuertoRico#470c2CZCorozal000017Belize#030c2CZCorozal00001BBahamas#050c2CICat Island000016Japan#350c2SISaitama000020Bulgaria#620c2BTVeliko Turnovo000025Ontario#380c2PCPrescott and Russell000019Burundi#BI.MW0c2MWMwaro00001CHongKong#HK.IS0c2ISIslands00001BMacedonia#MK.AJ0c2AJSaraj000023Sudan#SD.BG0c2BGCentral Equatoria000026Serbia#RS.KM0c2KMKosovsko Mitrovacki000017Uganda#UG.AW0c2AWArua000019Thailand#TH.YL0c2YLYala000025SolomonIsland#SB.GC0c2GCGuadalcanal00001EBotswana#BW.KG0c2KGKgalagadi00001CVietnam#VN.HO0c2HOHoa Binh000016Syria#SY.DR0c2DRDara00001FMacedonia#MK.RU0c2RUStrumitsa00001ABhutan#BT.CR0c2CRChirang00001DPhilippines#PH.RI0c2RIRizal00001FKazakhstan#KZ.BY0c2BYBayqonyr00001BMissouri#1790c2REReynolds000020Ireland#0080c2KECiarra&iacute;000022NorthAmerica#0100c2SVEl Salvador000022California#0830c2SRSanta Barbara000018Texas#2510c2JOHJohnson00001ANebraska#1830c2WHWheeler000018Georgia#0590c2CKClarke00002BWorldwithCountries#1370c2CZCzech Republic00001EMinnesota#1110c2OTOtter Tail000019Kentucky#0950c2HLHarlan000018Michigan#1050c2MAMason00001AFlorida#0230c2CUColumbia00001BMississippi#0050c2AMAmite000034Europewithcountries#0060c2BABosnia and Herzegovina00001CWestVirginia#0230c2GRGrant000023Scotland#0090c2CLClackmannanshire000018NewWorld#1820c2PWPalau00001DVirginia#1710c2SHShenandoah00001AColorado#0030c2ALAlamosa00001FAlaska#2610c2VCValdez-Cordova00001BSouthDakota#0410c2DEDewey00001AAlabama#0190c2CECherokee000019Montenegro#100c2KTKotor00001AMiddleEast#050c2ISIsrael00001BSwitzerland#170c2SHSchwyz000035SouthEuropeanRegion#030c2BABosnia &amp; Herzegovina000023EastEuropeanRegion#040c2RORomania000017Canada#080c2ONOntario000019NewWorld#300c2ECEcuador000027Quebec#020c2SLSaguenay-Lac-Saint-Jean00001AUSA#WV0c2WVWest Virginia00001BBelize#040c2OWOrange Walk00001EBahamas#060c2CBCentral Abaco000014USA#GA0c2GAGeorgia000014Japan#360c2SHShiga00001ENorwayRegion#040c2BUBuskerud000017Bulgaria#630c2BHVidin00001EOntario#390c2PNPrince Edward000022MarshallIsland#MH.MH.KN0c2KNKnox00001BTanzania#TZ.MW0c2MWMwanza00001ARussia#RU.IK0c2IKIrkutsk00001APalau#PW.NP0c2NPNgatpang00001DUganda#UG.BN0c2BNBundibugyo00001ABenin#BJ.CL0c2CLCollines00002FHungaryRegions#HU.NG0c2NGNorthern Great Plain00001CVietnam#VN.HP0c2HPHaiPhong00001AAlgeria#DZ.SK0c2SKSkikda000017Nigeria#NG.ED0c2EDEdo000021Somalia#SO.JH0c2JHJubbada Hoose00001DMacedonia#MK.RV0c2RVRadovis000022Macedonia#MK.SL0c2SLSveti Nikole000018Niger#NE.TH0c2THTahoua000021NorthCarolina#0890c2HDHenderson000017Georgia#2410c2RBRabun00001BIreland#0090c2KICill Dara00001ENorthAmerica#0110c2GDGrenada000019Kansas#0430c2DPDoniphan000020SouthCarolina#0150c2BKBerkeley000019Illinois#0790c2JSJasper000024WorldwithCountries#1380c2DKDenmark00001BNorthDakota#0130c2BUBurke000019Texas#0710c2CHAChambers000017Ohio#0330c2CWCrawford00001ANewMexico#0050c2CHChaves00001BNebraska#0030c2ANAntelope000019Wyoming#0250c2NANatrona000026Europewithcountries#0070c2BGBulgaria000018Tennessee#0930c2KNKnox000021Scotland#0100c2DMDumbartonshire000023NewWorld#1830c2PGPapua New Guinea000018Oklahoma#0450c2ELEllis000016Iowa#0970c2JAJackson00001ATexas#4330c2STOStonewall000019NewJersey#0390c2UNUnion000018Indiana#0490c2FUFulton00001ANewYork#0210c2COColumbia000029YukonTerritory#CA.YT.NO0c2NONorth Yukon000023USANorthWestRegion#560c2WYWyoming00001CMontenegro#110c2MKMojkovac00001AMiddleEast#060c2JOJordan00001ESwitzerland#180c2SOSolothurn000024SouthEuropeanRegion#040c2HYCroatia000023EastEuropeanRegion#050c2UAUkraine000024Canada#090c2PEPrince Edward Island000022NewWorld#310c2FKFalkland Islands000022Quebec#030c2CNCapitale-Nationale00001BPuertoRico#490c2CUCulebra00001BBelize#050c2SCStann Creek00001FBahamas#070c2CNCentral Andros000014USA#FL0c2FLFlorida000016Japan#370c2SMShimane00001ENorwayRegion#050c2FIFinnmark000018Bulgaria#640c2BPVratsa00001COntario#400c2RARainy River000024MarshallIsland#MH.MH.KO0c2KOKosrae00001EFiji#FJ.TH.EA0c2EATholo East00001ETajikistan#TJ.KL0c2KLKhatlon00001BBurundi#BI.MY0c2MYMuyinga000032Guyana#GY.ES0c2ESEssequibo Islands-West Demerara00001BSerbia#RS.KO0c2KOKosovski00002BHungaryRegions#HU.NH0c2NHNorthern Hungary000029FranceDepartment#FR.EL0c2ELEure et Loir00001BAlgeria#DZ.TB0c2TBTebessa00001CSriLanka#LK.CO0c2COColombo000014Mali#ML.GA0c2GAGao000019Senegal#SN.KD0c2KDKolda000019Missouri#1810c2RIRipley000020Ireland#0100c2KLCill Chainnigh000020NorthAmerica#0120c2GTGuatemala000020California#0850c2STSanta Clara000016Texas#2530c2JONJones000017Nebraska#1850c2YOYork000016Georgia#0610c2CYClay000024WorldwithCountries#1390c2EEEstonia00001EMinnesota#1130c2PEPennington00001BKentucky#0970c2HIHarrison00001AMichigan#1070c2MCMecosta00001ANewMexico#0060c2CICibola00001CMississippi#0070c2ATAttala000025Europewithcountries#0080c2HYCroatia000021WestVirginia#0250c2GEGreenbrier000020Scotland#0110c2DUDumfriesshire000018NewWorld#1840c2WSSamoa000014Asia3#0260c2LALaos000018Virginia#1730c2SMSmyth00001BColorado#0050c2ARArapahoe00001DSouthDakota#0430c2DODouglas000019Alabama#0210c2CIChilton000020NewCaledonia#NC.NO.PM0c2PMPoum000017Bulgaria#650c2YYambol000018Ontario#410c2RERenfrew000026Montenegro#120c2NKNik&scaron;i&#263;00001AMiddleEast#070c2KUKuwait00001CSwitzerland#190c2THThurgau000023SouthEuropeanRegion#050c2GRGreece000022EastEuropeanRegion#060c2RURussia000016Canada#100c2QCQuebec00001FNewWorld#320c2GFFrench Guiana000018Quebec#040c2MAMauricie000016Belize#060c2TOToledo000022Bahamas#080c2CECentral Eleuthera000017Japan#380c2SZShizouka00001DNorwayRegion#060c2HEHedmark000029FrenchGuiana#GF.SL.SL0c2SLSaint Laurent000016Fiji#FJ.WE.BA0c2BABa00001CTanzania#TZ.MY0c2MYManyara00001FGuineaBissau#GW.BS0c2BSBissau00001BUK7#UK.IM0c2IMIsle of Man00001BZimbabwe#ZW.HA0c2HAHarare000026Serbia#RS.KP0c2KPKosovsko Pomoravski000025Singapore#SG.SO0c2SOSouth Singapore00001FCambodia#KH.MK0c2MKMondulkiri00001FCongo#CG.CO0c2COCuvette Ouest000019Angola#AO.MX0c2MXMoxico000019Algeria#DZ.AL0c2ALAlger000026Algeria#DZ.BB0c2BBBordj Bou Arreridj000029CentralAfricanRepublic#CF.LB0c2LBLobaye000020NorthCarolina#0910c2HTHertford00001AGeorgia#2430c2RARandolph000017Ireland#0110c2LALaois00001CNorthAmerica#0130c2HTHaiti000018Kansas#0450c2DGDouglas00001FSouthCarolina#0170c2CACalhoun00001CIllinois#0810c2JEJefferson000018Missouri#0010c2ADAdair000024WorldwithCountries#1400c2FIFinland00001ENorthDakota#0150c2BRBurleigh000019Texas#0730c2CHECherokee000017Ohio#0350c2CUCuyahoga00001ANewMexico#0070c2COColfax000019Nebraska#0050c2ARArthur00001AWyoming#0270c2NINiobrara00002CEuropewithcountries#0090c2CZCzech Republic000018Tennessee#0950c2LALake00001FScotland#0120c2EAEast Lothian000022NewWorld#1850c2SBSolomon Islands00001BOklahoma#0470c2GAGarfield000015Iowa#0990c2JSJasper000017Texas#4350c2SUTSutton00001ANewJersey#0410c2WAWarren000018Indiana#0510c2GIGibson00001ANewYork#0230c2CTCortland000017Ontario#420c2SISimcoe000018Montenegro#130c2PVPlav00001EMiddleEast#080c2KGKyrgyzstan00001BSwitzerland#200c2TITicino000022SouthEuropeanRegion#060c2ITItaly00001CCanada#110c2SKSaskatchewan000026USACentralRegion#380c2NDNorth Dakota000023USASouthWestRegion#040c2AZArizona000018NewWorld#330c2GYGuyana000016Quebec#050c2ESEstrie000014USA#WY0c2WYWyoming00001APuertoRico#510c2DODorado000021Bahamas#090c2FPCity of Freeport000016Japan#390c2TOTochigi00001FNorwayRegion#070c2HOHordaland000019Nepal#NP.LU0c2LULumbini00001ANepal#NP.NA0c2NANarayani000021HongKong#HK.KC0c2KCKowloon City000019Uganda#UG.TR0c2TRTororo000021Kiribati#KI.LI0c2LILine Islands00001CPhilippines#PH.AB0c2ABAbra00001DRussia#RU.IN0c2INIngushetia000021China2#CN.XJ0c2XJXinjiang Uygur00001APalau#PW.NS0c2NSNgchesar000021Lebanon#LE.JA0c2JASouth Lebanon00001BTuvalu#TV.FN0c2FNFunafuti00001CUzbekistan#UZ.NW0c2NWNavoi00001AAlgeria#DZ.BC0c2BCBechar00001DBurma#MM.KH0c2KHKayah State000022Macedonia#MK.SO0c2SOSuto Orizari000026Philippines#PH.SC0c2SCSouth Cotabato00001EMissouri#1830c2SRSt. Charles00001AIreland#0120c2LELiatroim00001FNorthAmerica#0140c2HNHonduras00001FCalifornia#0870c2SCSanta Cruz000017Texas#2550c2KARKarnes000019Georgia#0630c2CTClayton000023WorldwithCountries#1410c2FRFrance000018Minnesota#1150c2PIPine000017Kentucky#0990c2HTHart00001CMichigan#1090c2MMMenominee000018Florida#0270c2DEDesoto00001CMississippi#0090c2BEBenton000025Europewithcountries#0100c2DKDenmark000020WestVirginia#0270c2HAHampshire000017Scotland#0130c2FIFife000018NewWorld#1860c2TOTonga000018Asia3#0280c2MYMalaysia00001EVirginia#1750c2SUSouthampton00001CColorado#0070c2ACArchuleta00001DSouthDakota#0450c2EDEdmunds000019Alabama#0230c2COChoctaw00002EOntario#430c2STStormont, Dundas and Glengary000020Montenegro#140c2PLPlu&#382;ine00001BMiddleEast#090c2LELebanon000018Switzerland#210c2URUri000026SouthEuropeanRegion#070c2MKMacedonia00001FCanada#120c2YTYukon Territory00001ANewWorld#340c2PYParaguay00001FQuebec#060c2MNMontr&eacute;al00001FBahamas#100c2CKCrooked Island000018Japan#400c2TKTokushima00002CNorwayRegion#080c2MRM&oslash;re og Romsdal00001EFiji#FJ.TH.WE0c2WETholo West000021SierraLeone#SL.NO.KM0c2KMKambia00001BNiger#NE.TL0c2TLTillabery00001BTajikistan#TJ.LE0c2LESogd00001BDjibouti#DJ.DK0c2DKDikhil00002BRussia#RU.JE0c2JEJewish Autonomous Region00001BUganda#UG.BR0c2BRKabarole00001DBotswana#BW.KL0c2KLKgatleng000019China2#CN.FJ0c2FJFujian00001BVietnam#VN.HT0c2HTHa Tinh00001FCapeVerde#CV.MO0c2MOMosteiros00001AAlgeria#DZ.AN0c2ANAnnaba00001ANewYork#0250c2DEDelaware00001CNorthCarolina#0930c2HOHoke00001AGeorgia#2450c2RIRichmond00001BIreland#0130c2LILuimneach00001ENorthAmerica#0150c2JMJamaica000018Kansas#0470c2EDEdwards000022SouthCarolina#0190c2CHCharleston000019Illinois#0830c2JRJersey000019Missouri#0030c2ANAndrew000024WorldwithCountries#1420c2DEGermany00001ANorthDakota#0170c2CACass00001ATexas#0750c2CHIChildress000014Ohio#0370c2DADarke000019NewMexico#0090c2CUCurry000019Nebraska#0070c2BABanner000016Wyoming#0290c2PAPark000025Europewithcountries#0110c2EEEstonia00001ETennessee#0970c2LULauderdale000022Scotland#0140c2ISInverness-shire000019NewWorld#1870c2TVTuvalu000019Oklahoma#0490c2GRGarvin000018Iowa#1010c2JEJefferson000018Texas#4370c2SWISwisher000017Indiana#0530c2GRGrant000018Ontario#440c2SUSudbury00001CMontenegro#150c2PUPljevlja000018MiddleEast#100c2MUOman00001BSwitzerland#220c2VAValais000022SouthEuropeanRegion#080c2MTMalta000025Canada#130c2NTNorthwest Territories000022USACentralRegion#400c2OKOklahoma000026USASouthWestRegion#060c2CACalifornia000016NewWorld#350c2PEPeru000019Quebec#070c2OUOutaouais00001BPuertoRico#530c2FJFajardo000022Bahamas#110c2EBEast Grand Bahama000014Japan#410c2TYTokyo00001ENorwayRegion#090c2NONordland00001FPhilippines#PH.RO0c2RORomblon00001BUganda#UG.BS0c2BSBushenyi000028EquatorialGuinea#GQ.BN0c2BNBioko Norte00001DVietnam#VN.HU0c2HUHau Giang000021Morocco#MA.DA0c2DADoukkala Abda00001CMissouri#1850c2SISt. Clair00001AIreland#0140c2LOLongfort00001DNorthAmerica#0160c2MXMexico00001BCalifornia#0890c2SHShasta000018Texas#2570c2KAUKaufman00001ALouisiana#0010c2ACAcadia000020Virginia#7200c2NRNorton (City)000018Georgia#0650c2CIClinch000023WorldwithCountries#1430c2GRGreece00001DMinnesota#1170c2PSPipestone00001CKentucky#1010c2HEHenderson00001AMichigan#1110c2MDMidland000017Florida#0290c2DIDixie00001DMississippi#0110c2BOBolivar000025Europewithcountries#0120c2FIFinland00001BArkansas#0010c2ARArkansas00001EWestVirginia#0290c2HNHancock000022Scotland#0150c2KCKincardineshire00001ANewWorld#1880c2VUVanuatu000018Asia3#0300c2MNMongolia00001FVirginia#1770c2SPSpotsylvania000017Colorado#0090c2BABaca000020SouthDakota#0470c2FRFall River000018Alabama#0250c2CLClarke000030NewCaledonia#NC.SU.IP0c2IPL'&Icirc;le-des-Pins00001COntario#450c2TBThunder Bay00001DMontenegro#160c2PGPodgorica00001CMiddleEast#110c2PKPakistan000019Switzerland#230c2VUVaud000027SouthEuropeanRegion#090c2MOMontenegro000017Canada#140c2NUNunavut00001ANewWorld#360c2SRSuriname00002CQuebec#080c2ATAbitibi-T&eacute;miscamingue00001BPuertoRico#540c2FLFlorida000016Bahamas#120c2EMExuma000016Japan#420c2TTTottori00002BNorwayRegion#100c2NTNord-Tr&oslash;ndelag00001EPhilippines#PH.QZ0c2QZQuezon000029Philippines#PH.SF0c2SFShariff Kabunsuan000023CentralAmerica2#CE.GD0c2GDGrenada000017Yemen#YE.MA0c2MAMarib00001EEastTimor#TL.MF0c2MFManufahi00001EMacedonia#MK.BG0c2BGBogdanci00001BSudan#SD.BN0c2BNBlue Nile00001ECoteDivoire#CI.BF0c2BFBafing00001DThailand#TH.YS0c2YSYasothon00001CKuwait#KW.KU0c2KUAl Kuwayt000019Cameroon#CM.NO0c2NONord000025CaymanIslands#KY.GT0c2GTGeorge Town00001ESyria#SY.DY0c2DYDayr az Zawr000015Togo#TG.KA0c2KAKara00001FGhana#GH.AA0c2AAGreater Accra000018Indiana#0550c2GEGreene00001ANewYork#0270c2DUDutchess00001CNorthCarolina#0950c2HYHyde00001AGeorgia#2470c2RORockdale000021Missouri#1860c2SGSte. Genevieve00001BIreland#0150c2LUL&uacute;000020NorthAmerica#0170c2NINicaragua000014Kansas#0490c2EKElk000020SouthCarolina#0210c2CECherokee00001DIllinois#0850c2JDJo Daviess00001BMissouri#0050c2ATAtchison000024WorldwithCountries#1440c2HUHungary00001ENorthDakota#0190c2CVCavalier000015Texas#0770c2CLAClay000029Virginia#5400c2CVCharlottesville (City)000017Ohio#0390c2DEDefiance00001BNewMexico#0110c2DBDe Baca000019Nebraska#0090c2BLBlaine000018Wyoming#0310c2PLPlatte000024Europewithcountries#0130c2FRFrance00001CTennessee#0990c2LWLawrence000020Scotland#0160c2KNKinross-shire000020NewWorld#1890c2NCNew Caledonia000018Oklahoma#0510c2GDGrady000016Iowa#1030c2JOJohnson000015Asia3#0310c2NPNepal000018Texas#4390c2TARTarrant00001COntario#460c2TITimiskaming00001FMontenegro#170c2RORo&#382;aje000019MiddleEast#120c2QAQatar000018Switzerland#240c2ZUZug000025SouthEuropeanRegion#100c2PTPortugal000024USASouthWestRegion#080c2COColorado000019NewWorld#370c2UYUruguay00001FQuebec#090c2COC&ocirc;te-Nord000022PuertoRico#550c2GCGu&aacute;nica00001ABahamas#130c2GCGrand Cay000015Japan#430c2TAToyama00001DNorwayRegion#110c2OPOppland000022FrenchGuiana#GF.SL.AP0c2APApatou000024MarshallIsland#MH.MH.LK0c2LKLikiep000021Philippines#PH.SG0c2SGSarangani00001DEastTimor#TL.LQ0c2LQLiquica00001FMacedonia#MK.AR0c2ARAracinovo000018Serbia#RS.MA0c2MAMacva000018Palau#PW.NW0c2NWNgiwal000018Uganda#UG.BU0c2BUBusia000024Libya#LY.JA0c2JAAl Jabal al Akhdar000019Nigeria#NG.EK0c2EKEkiti000020Mauritania#MR.GD0c2GDGuidimaka00001DMacedonia#MK.SS0c2SSSopiste00001FMissouri#1870c2SFSt. Francois00001AIreland#0160c2MAMaigh Eo00001DNorthAmerica#0180c2PAPanama00001BCalifornia#0910c2SISierra000018Texas#2590c2KENKendall000019Louisiana#0030c2ALAllen000016Georgia#0670c2CBCobb000024WorldwithCountries#1450c2ISIceland000018Minnesota#1190c2PLPolk000018Kentucky#1030c2HYHenry00001CMichigan#1130c2MIMissaukee000017Florida#0310c2DUDuval00001DMississippi#0130c2CACalhoun000025Europewithcountries#0140c2DEGermany000019Arkansas#0030c2ASAshley00001CWestVirginia#0310c2HRHardy000025Scotland#0170c2KIKirkcudbrightshire00001ANewWorld#1900c2BABahrain00001BVirginia#1790c2STStafford000017Colorado#0110c2BEBent00001BSouthDakota#0490c2FAFaulk000016Alabama#0270c2CYClay000018Ontario#470c2TOToronto000021Montenegro#180c2SA&Scaron;avnik00001FMiddleEast#130c2SASaudiArabia00001BSwitzerland#250c2ZRZurich000027SouthEuropeanRegion#110c2SMSan Marino00001BNewWorld#380c2VEVenezuela000025Quebec#100c2NONord-du-Qu&eacute;bec000016Kenya#010c2CECentral00001FBahamas#140c2HBHarbour Island000017Japan#440c2WAWakayama00001ANorwayRegion#120c2OSOslo000032DICT_RSS.FEEDS0c000001ANAME0c1A1NameL4000371BMVBP.BP0c00006B3SBBP.SB.GETJOB0c0SUBROUTINE SBBP.SB.GETJOB(entry,startpos,bytes)** Copyright (C) 2006 Sierra Bravo Corporation, All Rights Reserved** Programm: SBBP.SB.LISTPEQS* Written by: Luke Bucklin, Sierra Bravo* Date: 04/24/06* Description: Send an XML document of the print queue (LISTPEQS)*COMMON /SBPRINT/ LINK.LIST, LINK.LIST.JOB*EQU P.JOB      TO 1EQU P.PORT     TO 2EQU P.STATUS   TO 3EQU P.QUEUE    TO 4EQU P.BYTES    TO 5EQU P.DATE     TO 6EQU P.TIME     TO 7EQU P.OWNER    TO 8EQU P.PREVIEW  TO 9*LINK.LIST = "" ; LINK.LIST.JOB = ""*CHUNKSIZE = 50000*FRAMESIZE = SYSTEM(32) ;* D3-only*IF NOT(startpos MATCHES "1N0N") THEN startpos = 1IF NOT( bytes MATCHES "1N0N") THEN bytes=99999999*EXECUTE "LISTPEQS ":entry CAPTURING PEQS.OUTLINES = DCOUNT( PEQS.OUT, @AM )GOOD.LINE = 0PINFO = ""FOR PL = 1 TO LINES-1 UNTIL GOOD.LINE  LINE = PEQS.OUT<PL>  GOOD.LINE = 1  previewsize = 0; GET.PREVIEW = 0  CALL SUB.SB.PARSEPEQS(LINE,PINFO,previewsize,GET.PREVIEW,GOOD.LINE)NEXT PL**CRT '<job id="':entry:'">'*CRT ' <date>':OCONV(PINFO<P.DATE>,'D2/'):'</date>'*CRT ' <time>':OCONV(PINFO<P.TIME>,'MTS'):'</time>'*CRT "<data><![CDATA[":CHUNKS = 0NO.PAGES = 1LOOP  IF bytes > CHUNKSIZE THEN    sendbytes = CHUNKSIZE    bytes -= CHUNKSIZE  END ELSE    sendbytes = bytes    bytes = 0  END  OUTPUT = ""  CALL SUB.SB.GET.ENTRY(entry,startpos,sendbytes,OUTPUT,ERR)  CHUNKS += 1  IF NOT(ERR) THEN    CONVERT CHAR(0) TO "" IN OUTPUT    CALL SWAP(OUTPUT,CHAR(12),'[0x12]')    NO.PAGES = NO.PAGES + COUNT( OUTPUT, CHAR(12) )    CRT OUTPUT:  END ELSE EXIT  startpos += sendbytesWHILE bytes AND OUTPUT # "" DO REPEAT*CRT ']]></data><pages>':NO.PAGES:'</pages>'*CRT '</job>'STOP000A12SUB.SB.GET.ENTRY0c0SUBROUTINE SUB.SB.GET.ENTRY(JOB,START.POS,BYTES,OUTPUT,ERR)** Copyright (C) 2006 Sierra Bravo Corporation, All Rights Reserved** Programm: SUB.SB.GET.ENTRY* Written by: Luke Bucklin, Sierra Bravo* Date: 04/24/06* Description: Extract a segment of print queue content*COMMON /SBPRINT/ LINK.LIST, LINK.LIST.JOB*FRAMESIZE = SYSTEM(32) ;* D3-onlyOUTPUT = ""ERR = ""BYTES.TO.GET = BYTES*EXECUTE "LISTPEQS ":JOB:" E" CAPTURING JOB.LINEJOB.LINE = JOB.LINE<5>	FID = JOB.LINE[34,8]IF FID # "" THEN  * Get full sequential list of frame IDs  FSIZE = FRAMESIZE-1  IF START.POS > 1 OR BYTES > FSIZE THEN    IF LINK.LIST.JOB # JOB THEN      * We didn't just build this recently, so go ahead and build it now      * associate the LINK.LIST (in common) with the job so if we are asked      * to build this linked list again for this job, we can skip this part      * and just pull it from common      LINK.LIST = FID      LINK.LIST.JOB = JOB      EXECUTE "DUMP .":FID:" L" CAPTURING LINKAGE      START.ROW = INDEX(LINKAGE,'+',1)      START.ROW = DCOUNT(LINKAGE[1,START.ROW],@AM)      MAX.ROWS = DCOUNT( LINKAGE, @AM )      FOR LX = START.ROW TO MAX.ROWS        ROW = LINKAGE<LX>        IF TRIM(ROW) # "" THEN          XFRAME = TRIM(FIELD( ROW,'(',2))          XFRAME = FIELD(XFRAME,' ',1)          LINK.LIST<-1> = XFRAME        END      NEXT LX    END    *    * First frame is FRAMESIZE-1 bytes because the first    * byte is a throwaway.    *    START.TEMP = START.POS    SKIP.FRAMES = 0    LOOP UNTIL START.TEMP <= FSIZE DO      SKIP.FRAMES += 1      START.TEMP -= FSIZE      FSIZE = FRAMESIZE    REPEAT    IF SKIP.FRAMES THEN OFFSET = START.TEMP-1 ELSE OFFSET = START.TEMP    IF SKIP.FRAMES = 0 AND OFFSET = 0 THEN OFFSET = 1  END ELSE    LINK.LIST = FID    OFFSET = 1    SKIP.FRAMES = 0  END  MAX.FRAMES = DCOUNT( LINK.LIST, @AM )  FX.START = 1 + SKIP.FRAMES  FOR FX = FX.START TO MAX.FRAMES WHILE BYTES.TO.GET     FID = LINK.LIST<FX>    EXECUTE "DUMP .":FID:" SX" CAPTURING PREVX.OUT    IF LEN(PREVX.OUT) # FRAMESIZE*2 THEN      ERR = 1      EXIT    END    IF OFFSET THEN      PREVX.OUT = PREVX.OUT[(OFFSET*2)+1,FRAMESIZE*2]    END    DATLEN = LEN(PREVX.OUT) / 2    PREVX.OUT = OCONV( PREVX.OUT, 'MY' )    IF DATLEN > BYTES.TO.GET THEN      PREVX.OUT = PREVX.OUT[1,BYTES.TO.GET]      BYTES.TO.GET = 0    END ELSE      BYTES.TO.GET -= DATLEN    END    OUTPUT := PREVX.OUT    CONVERT CHAR(0) TO "" IN OUTPUT    CONVERT @AM TO "^" IN OUTPUT    OFFSET = 0  NEXT FXEND ELSE ERR = 1RETURN000703SUB.SB.PARSEPEQS0c0SUBROUTINE SUB.SB.PARSEPEQS(LINE,PINFO,previewsize,GET.PREVIEW,GOOD.LINE)*EQU P.JOB      TO 1EQU P.PORT     TO 2EQU P.STATUS   TO 3EQU P.QUEUE    TO 4EQU P.BYTES    TO 5EQU P.DATE     TO 6EQU P.TIME     TO 7EQU P.OWNER    TO 8EQU P.PREVIEW  TO 9*FRAMESIZE = SYSTEM(32) ;* D3-onlyIF NOT(FRAMESIZE MATCHES "1N0N") THEN FRAMESIZE = 4000*PINFO = ""*JOB = TRIM(LINE[1,4])IF JOB MATCHES "1N0N" THEN  PINFO<P.JOB> = JOB  *  L.PORT = TRIM(LINE[15,5])  PINFO<P.PORT> = L.PORT  *  L.STATUS = TRIM(LINE[23,15])  STATUS.MSG = ""  IF INDEX(L.STATUS,'h',1) THEN    STATUS.MSG := 'Hold,'  END  IF INDEX(L.STATUS,'l',1) THEN    STATUS.MSG := 'Locked,'  END  IF INDEX(L.STATUS,'o',1) THEN    STATUS.MSG := 'Generating,'  END  IF INDEX(L.STATUS,'s',1) THEN    STATUS.MSG := 'Spooled,'  END ELSE IF INDEX(L.STATUS,'p',1) THEN    STATUS.MSG := 'To print,'  END ELSE IF INDEX(L.STATUS,'x',1) THEN    STATUS.MSG := 'Canceled,'  END  IF STATUS.MSG # "" THEN STATUS.MSG = STATUS.MSG[1,LEN(STATUS.MSG)-1] ;* Get rid of the trailing comma  PINFO<P.STATUS> = STATUS.MSG  *  L.QUEUE = TRIM(LINE[42,5])  PINFO<P.QUEUE> = L.QUEUE  *  L.BYTES = TRIM(LINE[47,7])  L.BYTES = L.BYTES * FRAMESIZE  PINFO<P.BYTES> = L.BYTES  *  L.DATE = TRIM(LINE[55,8])  L.DATE = ICONV( L.DATE,'D' )  PINFO<P.DATE> = L.DATE  *  L.TIME = TRIM(LINE[64,8])  L.TIME = ICONV( L.TIME, 'MTS' )  PINFO<P.TIME> = L.TIME  *  L.OWNER = TRIM(LINE[73,20])  PINFO<P.OWNER> = L.OWNER  *  IF GET.PREVIEW THEN    *    * Get preview unless we are searching -that's a whole different process.    *    L.PREVIEW = ""    CALL SUB.SB.GET.ENTRY(JOB,1,previewsize,L.PREVIEW,ERR)    IF ERR # "" THEN GOOD.LINE = 0    PINFO<P.PREVIEW> = L.PREVIEW  ENDEND ELSE GOOD.LINE = 0RETURN001F30SBBP.SB.LISTPEQS0c0** Copyright (C) 2008 Sierra Bravo Corporation, All Rights Reserved** Programm: SBBP.SB.LISTPEQS* Written by: Luke Bucklin, Sierra Bravo* Adapted by: David Bucklin, Sierra Bravo*             CGI Version of the Bravo Print XML API* Date: 04/24/06* Description: Send an XML document of the print queue (LISTPEQS)*COMMON /SBPRINT/ LINK.LIST, LINK.LIST.JOBINCLUDE WBPD WWW.INCLUDE*LINK.LIST = "" ; LINK.LIST.JOB = ""*EQU P.JOB      TO 1EQU P.PORT     TO 2EQU P.STATUS   TO 3EQU P.QUEUE    TO 4EQU P.BYTES    TO 5EQU P.DATE     TO 6EQU P.TIME     TO 7EQU P.OWNER    TO 8EQU P.PREVIEW  TO 9*OPEN '','SBBP.FORMS' TO F.SBBP.FORMS ELSE STOP 201, 'SBBP.FORMS'*CALL WDB.VARS(VARS,VALS)*FRAMESIZE = SYSTEM(32) ;* D3-only*LOCATE "entrystart" IN VARS SETTING POS THEN  entrystart = VALS<POS>END ELSE entrystart = ""LOCATE "entries" IN VARS SETTING POS THEN  entries = VALS<POS>END ELSE entries = ""LOCATE "begindate" IN VARS SETTING POS THEN  begindate = VALS<POS>  begindate = ICONV(begindate,'D')END ELSE begindate = ""LOCATE "enddate" IN VARS SETTING POS THEN  enddate = VALS<POS>  enddate = ICONV(enddate,'D')END ELSE enddate = ""LOCATE "owner" IN VARS SETTING POS THEN  owner = VALS<POS>END ELSE owner = ""LOCATE "queue" IN VARS SETTING POS THEN  queue = VALS<POS>END ELSE queue = ""LOCATE "previewsize" IN VARS SETTING POS THEN  previewsize = VALS<POS>END ELSE previewsize = ""LOCATE "port" IN VARS SETTING POS THEN  port = VALS<POS>END ELSE port = ""LOCATE "searchstring" IN VARS SETTING POS THEN  searchstring = VALS<POS>END ELSE searchstring = ""IF searchstring # "" THEN GET.PREVIEW = 0 ELSE GET.PREVIEW = 1IF NOT(previewsize MATCHES "1N0N") THEN  previewsize = 500ENDLOCATE "entry" IN VARS SETTING POS THEN  entry = VALS<POS>END ELSE entry = ""LOCATE "action" IN VARS SETTING POS THEN  action = VALS<POS>END ELSE action = ""**ERROR = ""ALL.ENTRIES.FOUND = 0ENTRY.LIST = ''LOOP  LOCATE "entries[]" IN VARS SETTING POS THEN    ENTRY.LIST<-1> = VALS<POS>    VARS<POS> = "XXX"  END ELSE ALL.ENTRIES.FOUND = 1UNTIL ALL.ENTRIES.FOUND DO REPEATIF entry # "" THEN ENTRY.LIST<-1> = entryECNT = DCOUNT( ENTRY.LIST, @AM )FOR EX = 1 TO ECNT  entry = ENTRY.LIST<EX>  BEGIN CASE    CASE entry = ""      CMD = ''    CASE action = "delete"      CMD = "SP-KILL ":entry:"F"      EXECUTE CMD CAPTURING JUNK      CMD = "SP-EDIT ":entry:" MUD"    CASE action = "print"      EXECUTE "SP-KILL ":entry:"F" CAPTURING JUNK      IF queue # "" THEN        EXECUTE "SP-ASSIGN F":queue CAPTURING JUNK      END      CMD = "SP-EDIT ":entry:" MSRU"    CASE action = "release"      CMD = "SP-KILL ":entry:"F"    CASE action = "downloadtxt"      CRT "Content-Type: text/plain"      CRT "Content-Disposition: attachment;filename=":entry:".txt"      CRT      SESSION$CONTENT.SENT = 1      CALL SBBP.SB.GETJOB(entry,1,"")      STOP      CASE 1      CMD = ''  END CASE  IF CMD # "" THEN    EXECUTE CMD CAPTURING JUNK  ENDNEXT EX*CMD.SUFF = ""IF entrystart # "" THEN  CMD.SUFF = entrystart:"-9999 "ENDIF owner # "" THEN  CMD.SUFF := "'":owner:"' "END*EXECUTE "LISTPEQS ":CMD.SUFF CAPTURING PEQS.OUT*CRT "Content-Type: text/html"CRTSESSION$CONTENT.SENT = 1*READ FORM.DATA FROM F.SBBP.FORMS, 'listpeqs.html' ELSE FORM.DATA = ''FORM.HDR.POS = INDEX( FORM.DATA, '[QUEUE]', 1 )-1PART1 = FORM.DATA[1,FORM.HDR.POS]CONVERT @AM TO CHAR(13) IN PART1CRT PART1PART2 = FORM.DATA[FORM.HDR.POS+7,99999]XML = ""*LINES.SENT = 0LINES = DCOUNT( PEQS.OUT, @AM )FOR PL = 1 TO LINES-1  LINE = PEQS.OUT<PL>  GOOD.LINE = 1  CALL SUB.SB.PARSEPEQS(LINE,PINFO,previewsize,GET.PREVIEW,GOOD.LINE)  * Filtering  BEGIN CASE    CASE NOT(GOOD.LINE) ; NULL    CASE PINFO<P.JOB> = "" ; GOOD.LINE = 0    CASE begindate # "" AND enddate # ""      IF PINFO<P.DATE> < begindate OR PINFO<P.DATE> > enddate THEN GOOD.LINE = 0    CASE port # "" AND PINFO<P.PORT> # port ; GOOD.LINE = 0    CASE queue # "" AND	 PINFO<P.QUEUE> # queue ; GOOD.LINE = 0    CASE 1      NULL  END CASE  IF GOOD.LINE THEN    *     IF searchstring # "" THEN      JOB = PINFO<P.JOB>      GOSUB SEARCH.JOB    END  END  IF GOOD.LINE THEN    LINES.SENT += 1    *    PDATE = OCONV(PINFO<P.DATE>,'D2/')    PTIME = OCONV(PINFO<P.TIME>,'MTS')    *    IF LINES.SENT / 2 = INT(LINES.SENT/2) THEN      XML<-1> = '<tr class="even">'    END ELSE      XML<-1> = '<tr class="odd">'    END    XML<-1> = '<td><input type="checkbox" name="entries[]" value="':PINFO<P.JOB>:'" /></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?entry=':PINFO<P.JOB>:'&action=downloadtxt">':PINFO<P.JOB>:'</a></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?queue=':PINFO<P.QUEUE>:'">':PINFO<P.QUEUE>:'</a></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?owner=':PINFO<P.OWNER>:'">':PINFO<P.OWNER>:'</a></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?port=':PINFO<P.PORT>:'">':PINFO<P.PORT>:'</a></td>'    XML<-1> = '<td align="right">':OCONV(PINFO<P.BYTES>/1000,'MD,'):'</td>'    XML<-1> = '<td>':OCONV(PINFO<P.DATE>,'D2/'):' ':OCONV(PINFO<P.TIME>,'MTS'):'</td>'    XML<-1> = '<td>':PINFO<P.STATUS>:'</td>'    XML<-1> = \<td><a href="#" title="Print Job" onclick="Effect.SlideDown('printDialog\:PINFO<P.JOB>:\',{duration:0.25}); return false;"><img src="/db/images/button_print.gif"/></a>\*    XML<-1> = \<a href="/viewjob.php?entry=\:PINFO<P.JOB>:\&date=\:PDATE:\&time=\:PTIME:\" title="View Job"><img src="/db/images/button_preview.gif"/></a>\    XML<-1> = \<a href="/dbc/SBBP.SB.LISTPEQS?action=downloadtxt&entry=\:PINFO<P.JOB>:\&date=\:PDATE:\&time=\:PTIME:\" title="Download Job as TXT File"><img src="/db/images/button_downloadtxt.gif"/></a>\    XML<-1> = \<a href="/dbc/SBBP.SB.LISTPEQS?action=delete&entry=\:PINFO<P.JOB>:\&queue=&port=&owner=&searchstring=&begindate=&enddate=&search_type=" title="Delete Job" class="deletejob" onclick="return confirm('Are you sure you want to delete this job?')"><img src="/db/images/button_delete.gif"/></a>\    XML<-1> = '<div style="position:relative;">'    XML<-1> = '<div class="printDialog" id="printDialog':PINFO<P.JOB>:'" style="display:none;">'    XML<-1> = \<div> Queue <input type="text" value="0" style="width:40px;" maxlength="4" id="overrideQueue\:PINFO<P.JOB>:\"/>\    XML<-1> = \<span class="button"><button type="button" onclick="document.location='/dbc/SBBP.SB.LISTPEQS?action=print&entry=\:PINFO<P.JOB>:\&overridequeue='+$F('overrideQueue\:PINFO<P.JOB>:\')+'&queue=&port=&owner=&searchstring=&begindate=&enddate=&search_type='">Print</button></span>\    XML<-1> = \<span class="button"><button type="button" onclick="Effect.SlideUp('printDialog\:PINFO<P.JOB>:\',{duration:0.25});return false;">Cancel</button></span>\    XML<-1> = '</div> </div>'    XML<-1> = '<pre class="preview">'    XML<-1> = PINFO<P.PREVIEW>    XML<-1> = '</pre> </div> </td> </tr>'    CALL WEB.SEND(XML)    XML = ''    *    *IF LINES.SENT >= entries AND entries # "" THEN EXIT  ENDNEXT PLCALL WEB.SEND(PART2)STOP*SEARCH.JOB: * Search the job for the string*START.POS = 1GOOD.LINE = 0SEARCHBUFFSIZE = 15000LOOP  BUFFER = ""*  PRINT "Searching job # ":JOB:" ":START.POS:",":SEARCHBUFFSIZE  CALL SUB.SB.GET.ENTRY(JOB,START.POS,SEARCHBUFFSIZE,BUFFER,ERR)  IF NOT(ERR) THEN    FOUND.POS = INDEX( BUFFER, searchstring, 1 )    IF FOUND.POS THEN      BACK.UP = FOUND.POS - INT(previewsize/2) - 140      START.POS = START.POS + BACK.UP      CALL SUB.SB.GET.ENTRY(JOB,START.POS,previewsize,L.PREVIEW,ERR)      FOUND.NL = 0      FOR NL = 1 TO 250 UNTIL FOUND.NL      	CH = L.PREVIEW[NL,1]      	IF CH = CHAR(10) OR CH = CHAR(13) THEN      	  L.PREVIEW = L.PREVIEW[NL,previewsize]      	  FOUND.NL = 1      	END      NEXT NL      PINFO<P.PREVIEW> = L.PREVIEW      GOOD.LINE = 1    END ELSE      START.POS = START.POS + SEARCHBUFFSIZE - LEN(searchstring)    END  END ELSE EXITUNTIL ERR OR GOOD.LINE OR BUFFER = "" DO REPEATRETURN04E3EDMVDB.SUBS0c0000BE6SUB.TABLE.LIC.USED0c2SUBROUTINE SUB.TABLE.LIC.USED** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here** Modified by Peter Schellenbach of Zumasys 06-08-15:*  Changed test of ENUM after EXECUTE to test SYSTEM(11) instead.*W$TITLE = "Dashboard Users Logged On"     ;* Title for widget title barW$TYPE = "TABLE"                ;* Filled in by editorW$WIDTH = 2                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*OPEN 'WEB.SESSION' TO F.WEB.SESSION ELSE RETURN*IF WIDGET.USER.DATA(1) # "" THEN DELETE F.WEB.SESSION, WIDGET.USER.DATA(1)WIDGET.USER.DATA(1) = ""*TBL=""EXECUTE 'SELECT WEB.SESSION' RETURNING ENUM CAPTURING ETXT*PJS 06-08-15*IF ENUM[1,3]="404" ELSE RETURNIF SYSTEM(11) = 0 THEN RETURN ; *PJS 06-08-15*LOOP READNEXT ID ELSE ID="\\EOF"UNTIL ID="\\EOF" DO READ REC FROM F.WEB.SESSION,ID THEN   LOCATE "userid" IN REC<1> SETTING IX THEN     UID=REC<2,IX>     LOCATE "LastSessionAccess" IN REC<1> SETTING IX THEN       LSA=REC<2,IX>     END ELSE       LSA=00000*00000     END     LSA.DT=FIELD(LSA,"*",1)     LSA.TM=FIELD(LSA,"*",2)     LGN.DT=REC<3>     LGN.TM=REC<4>     LOCARG=LGN.DT:"*":LGN.TM:"*":LSA     LOCATE LOCARG IN TBL<1> BY "AR" SETTING IX ELSE NULL     TBL=INSERT(TBL,1,IX;LOCARG)     TBL=INSERT(TBL,2,IX;UID)     TBL=INSERT(TBL,3,IX;ID)   END ENDREPEAT** Set up column labelsW$TABLE.COL.LABELS<1,1> = "User Login ID"W$TABLE.COL.LABELS<1,2> = "Session#"W$TABLE.COL.LABELS<1,3> = "Login Date"W$TABLE.COL.LABELS<1,4> = "Login Time"W$TABLE.COL.LABELS<1,5> = "Last Act Date"W$TABLE.COL.LABELS<1,6> = "Last Act Time"** Column justification = left, right, centerW$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "right"W$TABLE.COL.JUST<1,3> = "right"W$TABLE.COL.JUST<1,4> = "right"W$TABLE.COL.JUST<1,5> = "right"W$TABLE.COL.JUST<1,6> = "right"** Table RowsTBL.MAX = DCOUNT(TBL<1>,CHAR(253))FOR ROW = 1 TO TBL.MAX W$TABLE.DATA<ROW,1> = TBL<2,ROW> IF TBL<3,ROW> = SESSION$ID THEN W$TABLE.DATA<ROW,2> = "*":ROW ELSE W$TABLE.DATA<ROW,2> = ROW W$TABLE.DATA<ROW,3> = OCONV(FIELD(TBL<1,ROW>,"*",1),"D2/") W$TABLE.DATA<ROW,4> = OCONV(FIELD(TBL<1,ROW>,"*",2),"MTS") W$TABLE.DATA<ROW,5> = OCONV(FIELD(TBL<1,ROW>,"*",3),"D2/") W$TABLE.DATA<ROW,6> = OCONV(FIELD(TBL<1,ROW>,"*",4),"MTS")NEXT ROW** TotalsW$TABLE.TOTALS<1,3> = TBL.MAXW$TABLE.TOTALS<1,4> = "Consumed"LIC.AVAIL = "Unlimited"IF ASSIGNED(G$LICENSE.COUNT) THEN IF NUM(G$LICENSE.COUNT) THEN   LIC.AVAIL = G$LICENSE.COUNT - TBL.MAX ENDENDW$TABLE.TOTALS<1,5> = LIC.AVAILW$TABLE.TOTALS<1,6> = "Available"*W$INPUT.PROMPT<1> = "Sessions"W$INPUT.TYPE<1> = "SELECT"W$INPUT.DEFAULT<1> = 0W$INPUT.UDPOS<1> = 1W$INPUT.BUTTON<1> = "Log Off"W$INPUT.SELOPTS<1> = "Nobody"W$INPUT.SELVALS<1> = 0FOR ROW = 1 TO TBL.MAX IF SESSION$ID = TBL<3,ROW> ELSE   W$INPUT.SELOPTS<1,-1> = ROW:" ":TBL<2,ROW>   W$INPUT.SELVALS<1,-1> = TBL<3,ROW> ENDNEXT ROW*RETURN002FD3MV.DEMO.MAP0c2    SUBROUTINE MV.DEMO.MAP* @(#) MV.DEMO.MAP Ported to jBASE 17:55:31  08 JUL 2015*  The following variable names were converted*   TABLE* ** Copyright (c) 2010 SB, Inc. All rights reserved.** 6-1-15 ZUMASYS CHANGED MAP ID DELIMITER TO # INSTEAD OF *    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Data Evolution - Demographics"    W$TYPE = "MAP:USASouthWestRegion"    W$WIDTH = 3*    IF G$QUERYMODE THEN RETURN*    TYPE.ID=WIDGET.USER.DATA(1)    BEGIN CASE    CASE TYPE.ID="04"        W$TYPE="MAP:Arizona"        WIDGET.USER.DATA(6)="Arizona"        ACT.FACT=.08    CASE TYPE.ID="06"        W$TYPE="MAP:California"        WIDGET.USER.DATA(6)="California"        ACT.FACT=.08    CASE TYPE.ID="32"        W$TYPE="MAP:Nevada"        WIDGET.USER.DATA(6)="Nevada"        ACT.FACT=.08    CASE TYPE.ID="49"        W$TYPE="MAP:Utah"        WIDGET.USER.DATA(6)="Utah"        ACT.FACT=.08    CASE 1        ACT.FACT=1    END CASE***_____Set Widget Variables_____    IF WIDGET.USER.DATA(4)="" THEN WIDGET.USER.DATA(4)="ALL"    IF WIDGET.USER.DATA(5)="" THEN WIDGET.USER.DATA(5)="Inquiry"**_____Open Files_____    OPEN 'Territories' TO F.TERR ELSE ABORT 201,'Territories'    OPEN 'SalesSum' TO F.SSUM ELSE ABORT 201,'SalesSum'    OPEN 'SalesReps' TO F.SREP ELSE ABORT 201,'SalesReps'**_____Set Period_____    WYR=OCONV(DATE(),"DY")    WMO=OCONV(DATE(),"DM") - 1    IF WMO<1 THEN WYR-=1;WMO=12    CAL.PERIOD=WYR'R%4':WMO'R%2'    IF WIDGET.USER.DATA(3) MATCHES "6N" THEN        END.PERIOD=WIDGET.USER.DATA(3)        WYR=END.PERIOD[1,4]        WMO=END.PERIOD[5,2]    END ELSE        END.PERIOD=CAL.PERIOD        WIDGET.USER.DATA(3)=END.PERIOD    END    WMO-=5    IF WMO<1 THEN WYR-=1; WMO+=12    BEG.PERIOD=WYR'R%4':WMO'R%2'**_____Set Up Input Prompts_____    W$INPUT.PROMPT<1>="Region"    W$INPUT.TYPE<1>="SELECT"    W$INPUT.SELOPTS<1,1>="SouthWest"    W$INPUT.SELVALS<1,1>=""    W$INPUT.SELOPTS<1,2>="California"    W$INPUT.SELVALS<1,2>="06"    W$INPUT.SELOPTS<1,3>="Nevada"    W$INPUT.SELVALS<1,3>="32"    W$INPUT.SELOPTS<1,4>="Utah"    W$INPUT.SELVALS<1,4>="49"    W$INPUT.SELOPTS<1,5>="Arizona"    W$INPUT.SELVALS<1,5>="04"    W$INPUT.UDPOS<1>=1    W$INPUT.DEFAULT<1>=WIDGET.USER.DATA(1)    W$INPUT.PROMPT<3>="Ending Period"    W$INPUT.TYPE<3>="SELECT"    WYR=CAL.PERIOD[1,4]-2    WMO=CAL.PERIOD[5,2]+1    IF WMO>12 THEN WYR+=1; WMO=1    SEL.PERIOD=WYR'R%4':WMO'R%2'    FOR PERIOD=CAL.PERIOD TO SEL.PERIOD STEP -1        WYR=PERIOD[1,4]        WMO=PERIOD[5,2]        IF WMO<1 THEN            WYR-=1            WMO=12            PERIOD=WYR'R%4':WMO'R%2'        END        WMO=OCONV(WMO*30-15,"DMA")[1,3]        WPERIOD=WMO:" ":WYR        W$INPUT.SELOPTS<3,-1>=WPERIOD        W$INPUT.SELVALS<3,-1>=PERIOD    NEXT PERIOD    W$INPUT.UDPOS<3>=3    W$INPUT.DEFAULT<3>=WIDGET.USER.DATA(3)    W$INPUT.PROMPT<4>="Sales Rep"    W$INPUT.TYPE<4>="SELECT"    W$INPUT.SELOPTS<4>="Everyone"    W$INPUT.SELVALS<4>="ALL"    SELECT F.SREP    SALESREPS=""    LOOP        READNEXT SREPINIT ELSE SREPINIT="\\EOF"    UNTIL SREPINIT="\\EOF" DO        READ SREPITEM FROM F.SREP,SREPINIT THEN            LOCATE SREPINIT IN SALESREPS<1> BY "AL" SETTING IX ELSE                SALESREPS=INSERT(SALESREPS,1,IX;SREPINIT)                SALESREPS=INSERT(SALESREPS,2,IX;SREPITEM<1>)            END        END    REPEAT    SREP.MAX=DCOUNT(SALESREPS<1>,CHAR(253))    FOR RVX=1 TO SREP.MAX        W$INPUT.SELOPTS<4,-1>=SALESREPS<2,RVX>        W$INPUT.SELVALS<4,-1>=SALESREPS<1,RVX>    NEXT RVX    W$INPUT.UDPOS<4>=4    W$INPUT.DEFAULT<4>=WIDGET.USER.DATA(4)    W$INPUT.PROMPT<5>="Demographic"    W$INPUT.TYPE<5>="SELECT"    W$INPUT.SELOPTS<5,1>="Inquiries"    W$INPUT.SELVALS<5,1>="Inquiry"    W$INPUT.SELOPTS<5,2>="Demos"    W$INPUT.SELVALS<5,2>="Demo"    W$INPUT.SELOPTS<5,3>="Quotes"    W$INPUT.SELVALS<5,3>="Quote"    W$INPUT.SELOPTS<5,4>="Orders"    W$INPUT.SELVALS<5,4>="Order"    W$INPUT.UDPOS<5>=5    W$INPUT.DEFAULT<5>=WIDGET.USER.DATA(5)    W$INPUT.BUTTON="Apply"**    STATES<1,1>="USASouthWestRegion*04"    STATES<1,2>="USASouthWestRegion*06"    STATES<1,3>="USASouthWestRegion*32"    STATES<1,4>="USASouthWestRegion*49"    COUNTIES=""*    W$TITLE = "Data Evolution - ":WIDGET.USER.DATA(5):" Demographics"    BEGIN CASE    CASE WIDGET.USER.DATA(5)="Inquiry"; AX=6 ;ACTIVE=1000*ACT.FACT    CASE WIDGET.USER.DATA(5)="Demo"   ; AX=7 ;ACTIVE=500*ACT.FACT    CASE WIDGET.USER.DATA(5)="Quote"  ; AX=8 ;ACTIVE=300*ACT.FACT    CASE WIDGET.USER.DATA(5)="Order"  ; AX=9 ;ACTIVE=100*ACT.FACT    END CASE*    TERRITORIES = ""    SELECT F.TERR    LOOP        READNEXT TERR ELSE TERR="\\EOF"    UNTIL TERR="\\EOF" DO        READ TERRITEM FROM F.TERR,TERR THEN            IF WIDGET.USER.DATA(4)="ALL" OR WIDGET.USER.DATA(4)=TERRITEM<2> THEN                LOCATE TERR IN TERRITORIES<1> BY "AR" SETTING IX ELSE                    TERRITORIES=INSERT(TERRITORIES,1,IX;TERR)                    TERRITORIES=INSERT(TERRITORIES,2,IX;TERRITEM<1>)                    TERRITORIES=INSERT(TERRITORIES,3,IX;TERRITEM<2>)                    TERRITORIES=INSERT(TERRITORIES,4,IX;TERRITEM<3>)                    IF TYPE.ID="" THEN                        MAP.IDS=FIELD(TERRITEM<4,1>,"*",1)[1,2]                        BEGIN CASE                        CASE MAP.IDS="Ar"; MAP.IDS="USASouthWestRegion*04"                        CASE MAP.IDS="Ca"; MAP.IDS="USASouthWestRegion*06"                        CASE MAP.IDS="Ne"; MAP.IDS="USASouthWestRegion*32"                        CASE MAP.IDS="Ut"; MAP.IDS="USASouthWestRegion*49"                        END CASE                        TERRITORIES=INSERT(TERRITORIES,5,IX;MAP.IDS)                    END ELSE                        CMAX=DCOUNT(TERRITEM<4>,CHAR(253))                        FOR CX=1 TO CMAX                            IF WIDGET.USER.DATA(6)=FIELD(TERRITEM<4,CX>,"*",1) THEN                                COUNTIES<1,-1>=TERRITEM<4,CX>                            END                        NEXT CX                    END                END            END        END    REPEAT*    TERR.MAX=DCOUNT(TERRITORIES<1>,CHAR(253))    IF WIDGET.USER.DATA(4)="ALL" THEN        SNAME="Everyone"    END ELSE        READV SNAME FROM F.SREP,WIDGET.USER.DATA(4),1 ELSE            SNAME="Unknown"        END    END*    QTYS=""    FOR PERIOD=BEG.PERIOD TO END.PERIOD        WYR=PERIOD[1,4]        WMO=PERIOD[5,2]        IF WMO>12 THEN PERIOD=(WYR+1)'R%4':"01"        FOR TERRX=1 TO TERR.MAX            TERR=TERRITORIES<1,TERRX>            READ SALES FROM F.SSUM,TERR:"*":PERIOD THEN                IF TYPE.ID="" THEN                    Table=TERRITORIES<5,TERRX>                    Table<2>=SUM(SALES<AX>)                    TBL.MAX=DCOUNT(Table<1>,CHAR(253))                    FOR TBLX=1 TO TBL.MAX                        LOCATE Table<1,TBLX> IN STATES<1> SETTING TX THEN                            QTYS<TX>+=Table<2,TBLX>                        END                    NEXT TBLX                END ELSE                    Table=SALES<10>                    Table<2>=SALES<AX>                    TBL.MAX=DCOUNT(Table<1>,CHAR(253))                    FOR TBLX=1 TO TBL.MAX                        LOCATE Table<1,TBLX> IN COUNTIES<1> SETTING TX THEN                            QTYS<TX>+=Table<2,TBLX>                        END                    NEXT TBLX                END            END        NEXT TERRX    NEXT PERIOD*    OPEN 'MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'*    IF TYPE.ID="" THEN        MAX=DCOUNT(STATES,CHAR(253))        FOR X=1 TO MAX            ID=STATES<1,X>            CONVERT '*' TO '#' IN ID    ;*6-1-15*            READ I FROM F.MVDB.MAP.DATA,ID THEN*6-1-15*      W$MAP.IDS<1,-1> = FIELD(ID,'*',2)                W$MAP.IDS<1,-1> = FIELD(ID,'#',2) ;*6-1-15*                W$MAP.VALUES<1,-1> = QTYS<X>+0                W$MAP.VALUE.TOOLTEXT<1,-1> := I<2>:' (':(QTYS<X>+0):')'                W$MAP.VALUE.DD<1,-1> = 1            END        NEXT X    END ELSE        MAX=DCOUNT(COUNTIES,CHAR(253))        FOR X=1 TO MAX            ID=COUNTIES<1,X>            CONVERT '*' TO '#' IN ID    ;*6-1-15*            READ I FROM F.MVDB.MAP.DATA,ID THEN*6-1-15*      W$MAP.IDS<1,-1> = FIELD(ID,'*',2)                W$MAP.IDS<1,-1> = FIELD(ID,'#',2) ;*6-1-15*                W$MAP.VALUES<1,-1> = QTYS<X>+0                W$MAP.VALUE.TOOLTEXT<1,-1> := I<2>:' (':(QTYS<X>+0):')'            END        NEXT X    END*    W$MAP.RANGE.NAME<1,1> = "No Activity"    W$MAP.RANGE.COLOR<1,1> = "#404040"    W$MAP.RANGE.NAME<1,2> = "Light Activity"    W$MAP.RANGE.COLOR<1,2> = "#4682B4"    W$MAP.RANGE.NAME<1,3> = "Moderate Activity"    W$MAP.RANGE.COLOR<1,3> = "#FF8C00"    W$MAP.RANGE.NAME<1,4> = "Heavy Activity"    W$MAP.RANGE.COLOR<1,4> = "#FF0000"*    W$MAP.RANGE.LOW<1,1> = 0    W$MAP.RANGE.HIGH<1,1> = 1    W$MAP.RANGE.LOW<1,2> = 1    W$MAP.RANGE.HIGH<1,2> = ACTIVE    W$MAP.RANGE.LOW<1,3> = ACTIVE    W$MAP.RANGE.HIGH<1,3> = ACTIVE*3    W$MAP.RANGE.LOW<1,4> = ACTIVE*3    W$MAP.RANGE.HIGH<1,4> = "999999"*    W$CHART.OPTIONS<-1> = 'animation="0"'    W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'    W$CHART.OPTIONS<-1> = 'legendShadow="1"'    W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'*    W$LINK.LABEL<1,1> = "California"    W$LINK.UD.VAL<1,1,1> = "06"    W$LINK.UD.POS<1,1,1> = "1"    W$LINK.UD.VAL<1,1,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,1,2> = "2"    W$LINK.UD.VAL<1,1,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,1,3> = "3"    W$LINK.UD.VAL<1,1,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,1,4> = "4"    W$LINK.UD.VAL<1,1,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,1,5> = "5"    W$LINK.UD.VAL<1,1,6> = "California"    W$LINK.UD.POS<1,1,6> = "6"    W$LINK.LOCATION<1,1> = "2"    W$LINK.DD.WIDGET<1,1> = "MV Demo Map"*    W$LINK.LABEL<1,2> = "Nevada"    W$LINK.UD.VAL<1,2,1> = "32"    W$LINK.UD.POS<1,2,1> = "1"    W$LINK.UD.VAL<1,2,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,2,2> = "2"    W$LINK.UD.VAL<1,2,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,2,3> = "3"    W$LINK.UD.VAL<1,2,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,2,4> = "4"    W$LINK.UD.VAL<1,2,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,2,5> = "5"    W$LINK.UD.VAL<1,2,6> = "Nevada"    W$LINK.UD.POS<1,2,6> = "6"    W$LINK.LOCATION<1,2> = "2"    W$LINK.DD.WIDGET<1,2> = "MV Demo Map"*    W$LINK.LABEL<1,3> = "Utah"    W$LINK.UD.VAL<1,3,1> = "49"    W$LINK.UD.POS<1,3,1> = "1"    W$LINK.UD.VAL<1,3,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,3,2> = "2"    W$LINK.UD.VAL<1,3,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,3,3> = "3"    W$LINK.UD.VAL<1,3,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,3,4> = "4"    W$LINK.UD.VAL<1,3,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,3,5> = "5"    W$LINK.UD.VAL<1,3,6> = "Utah"    W$LINK.UD.POS<1,3,6> = "6"    W$LINK.LOCATION<1,3> = "2"    W$LINK.DD.WIDGET<1,3> = "MV Demo Map"*    W$LINK.LABEL<1,4> = "Arizona"    W$LINK.UD.VAL<1,4,1> = "04"    W$LINK.UD.POS<1,4,1> = "1"    W$LINK.UD.VAL<1,4,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,4,2> = "2"    W$LINK.UD.VAL<1,4,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,4,3> = "3"    W$LINK.UD.VAL<1,4,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,4,4> = "4"    W$LINK.UD.VAL<1,4,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,4,5> = "5"    W$LINK.UD.VAL<1,4,6> = "Arizona"    W$LINK.UD.POS<1,4,6> = "6"    W$LINK.LOCATION<1,4> = "2"    W$LINK.DD.WIDGET<1,4> = "MV Demo Map"*    W$LINK.LABEL<1,5> = "SouthWest Region"    W$LINK.UD.VAL<1,5,1> = ""    W$LINK.UD.POS<1,5,1> = "1"    W$LINK.UD.VAL<1,5,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,5,2> = "2"    W$LINK.UD.VAL<1,5,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,5,3> = "3"    W$LINK.UD.VAL<1,5,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,5,4> = "4"    W$LINK.UD.VAL<1,5,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,5,5> = "5"    W$LINK.UD.VAL<1,5,6> = ""    W$LINK.UD.POS<1,5,6> = "6"    W$LINK.LOCATION<1,5> = "2"    W$LINK.DD.WIDGET<1,5> = "MV Demo Map"*    INCLUDE WBPD SOURCE.VIEW.ICON*    RETURN000365SUB.SOURCE.VIEW0c2SUBROUTINE SUB.SOURCE.VIEW** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: View BASIC Source Code**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TEXT"W$TITLE = "Source: ":WIDGET.USER.DATA(1):", ":WIDGET.USER.DATA(2)W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN WIDGET.USER.DATA(1) TO F.FILEVAR THEN  READ REC FROM F.FILEVAR, WIDGET.USER.DATA(2) ELSE REC = '"':WIDGET.USER.DATA(2):'" not on file.'END ELSE REC = '"':WIDGET.USER.DATA(1):'" is not a valid file name.'*W$TEXT.DATA = REC*W$LINK.ICON<1> = "script_edit.png"W$LINK.ICON.TXT<1> = "Edit BASIC Source"W$LINK.URL<1> = "/dbc/MVDB.WEB.ED?ed_file=":WIDGET.USER.DATA(1):"&ed_item=":WIDGET.USER.DATA(2)W$LINK.URL.OPTS<1> = 'target="ED_':WIDGET.USER.DATA(1):"_":WIDGET.USER.DATA(2):'"'W$LINK.LOCATION<1> = "C"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000405SUB.DEMO.DAYS.TO.PAY.PIE0c2SUBROUTINE SUB.DEMO.DAYS.TO.PAY.PIE**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FC2DPIE"W$WIDTH = 3W$TITLE = 'Chart - Days To Pay '*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEYEAR=WIDGET.USER.DATA(1)OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''LOCATE YEAR IN REC<67> SETTING YEAR.POS ELSE YEAR.POS=1YEAR.POS=4-YEAR.POS;   * NEED TO INVERT TO YYYY, YYYY-1, YYYY-2DAYS.POS=YEAR.POS+53W$TITLE:=YEARDAYS.TYPES='0 - 30 Days,31 - 60 Days,61 - 90 Days,Over 90 Days'CONVERT ',' TO CHAR(253) IN DAYS.TYPESPERIOD.PCTS=REC<DAYS.POS>MAX.DAYS.TYPES=DCOUNT(DAYS.TYPES,CHAR(253))FOR DAYS.CNTR = 1 TO MAX.DAYS.TYPES   PCT=PERIOD.PCTS<1,DAYS.CNTR>   W$PIE.LABELS<1,DAYS.CNTR>=DAYS.TYPES<1,DAYS.CNTR>   W$PIE.VALUES<1,DAYS.CNTR>=PCT NEXT DAYS.CNTRW$PIE.CAPTION='Days To Pay By Period For ':YEAR***RETURN00106BSUB.DEMO.AGAUGE0c2SUBROUTINE SUB.DEMO.AGAUGE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Angular Gauge widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Angular Gauge Chart Demo - Sales Volume"W$TYPE = "HLINEARGAUGE"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN  W$TYPE = WIDGET.USER.DATA(1)END ELSE WIDGET.USER.DATA(1) = "HLINEARGAUGE"IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1PALETTE = WIDGET.USER.DATA(2)IF WIDGET.USER.DATA(3) = "" THEN WIDGET.USER.DATA(3) = 725000CHART.VALUE = WIDGET.USER.DATA(3)IF WIDGET.USER.DATA(4) = "" THEN WIDGET.USER.DATA(4) = W$WIDTHW$WIDTH = WIDGET.USER.DATA(4)IF WIDGET.USER.DATA(5) = "" THEN WIDGET.USER.DATA(5) = 1NUM.CHARTS = WIDGET.USER.DATA(5);* Number of single-value meter style charts to produce*BEGIN CASE  CASE W$TYPE = "HLINEARGAUGE"    W$TITLE = "Linear"  CASE W$TYPE = "ANGULARGAUGE"    W$TITLE = "Angular"  CASE W$TYPE = "HLED"    W$TITLE = "Horizontal LED"  CASE W$TYPE = "VLED"    W$TITLE = "Vertical LED"  CASE W$TYPE = "THERMOMETER"    W$TITLE = "Thermometer"  CASE W$TYPE = "CYLINDER"    W$TITLE = "Cylinder"  CASE W$TYPE = "BULB"    W$TITLE = "Bulb"END CASEW$TITLE := " Gauge Chart Demo - Sales Volume"W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = 800000*W$FW.COLOR.RANGE<1,1> = 0W$FW.COLOR.RANGE<2,1> = 300000W$FW.COLOR.RANGE<3,1> = COLOR$RED*W$FW.COLOR.RANGE<1,2> = 300000W$FW.COLOR.RANGE<2,2> = 550000W$FW.COLOR.RANGE<3,2> = COLOR$YELLOW*W$FW.COLOR.RANGE<1,3> = 550000W$FW.COLOR.RANGE<2,3> = 600000W$FW.COLOR.RANGE<3,3> = COLOR$GREEN*W$FW.COLOR.RANGE<1,4> = 600000W$FW.COLOR.RANGE<2,4> = 800000W$FW.COLOR.RANGE<3,4> = COLOR$SILVER*IF WIDGET.USER.DATA(1) # "HLINEARGAUGE" AND WIDGET.USER.DATA(1) # "ANGULARGAUGE" THEN  * Create multiple values to make an array of charts  FOR N = 1 TO NUM.CHARTS    W$FW.METER.VALUE<1,N> = INT(CHART.VALUE*(N/NUM.CHARTS))  NEXT N  W$FW.THERMOMETER.COLOR = COLOR$REDEND ELSE  W$FW.DIAL.VALUES<1> = CHART.VALUE  W$FW.TRENDPOINT.VALUES<1,1> = 675000 ;* Low-limit of trendpoint  W$FW.TRENDPOINT.VALUES<2,1> = 685000 ;* High-limit of trendpoint  W$FW.TRENDPOINT.LABELS<1,1> = "Last Year"  W$FW.TRENDPOINT.OPTS<1,1> = 'color="':COLOR$GREEN:'" useMarker="1"'  *  W$FW.TRENDPOINT.VALUES<1,2> = 475000  W$FW.TRENDPOINT.LABELS<1,2> = "2 yrs ago"  W$FW.TRENDPOINT.OPTS<1,2> = 'color="':COLOR$BLACK:'" useMarker="1"'  *END** Set up a drill-down widget call*W$FW.DD.WIDGET<1,1> = "Drilldown Demo"W$FW.DD.UD.POS<1,1,1> = 1W$FW.DD.UD.VAL<1,1,1> = W$FW.METER.VALUE:W$FW.DIAL.VALUES<1>W$FW.DD.UD.POS<1,1,2> = 2W$FW.DD.UD.VAL<1,1,2> = WIDGET.USER.DATA(1)*W$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""*W$FW.CHART.PALETTE = PALETTE*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* Let it calculate thisW$FW.TICKMARKS<5> = 4 ;* 4 minor tickmarks between the major ones*W$INPUT.PROMPT = "Gauge Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "Linear":@VM:"Angular":@VM:"Horizontal LED":@VM:"Vertical LED":@VM:"Thermometer":@VM:"Cylinder":@VM:"Bulb"W$INPUT.SELVALS = "HLINEARGAUGE":@VM:"ANGULARGAUGE":@VM:"HLED":@VM:"VLED":@VM:"THERMOMETER":@VM:"CYLINDER":@VM:"BULB"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*W$INPUT.PROMPT<2> = "Palette"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*W$INPUT.PROMPT<3> = "Chart Value"W$INPUT.TYPE<3> = "TEXT"W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = CHART.VALUE*W$INPUT.PROMPT<4> = "Widget Width"W$INPUT.TYPE<4> = "SELECT"W$INPUT.SELOPTS<4> = "1 - Narrow":@VM:"2 - Medium":@VM:"3 - Full Width"W$INPUT.SELVALS<4> = "1":@VM:"2":@VM:"3"W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = W$WIDTH**W$INPUT.PROMPT<5> = "# of Charts"*W$INPUT.TYPE<5> = "TEXT"*W$INPUT.UDPOS<5> = 5*W$INPUT.DEFAULT<5> = NUM.CHARTS*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0003E1SUB.DEMO.PYRAMID0c2SUBROUTINE SUB.DEMO.PYRAMID** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Pyramid widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Pyramid Demo - Errors by Reason"W$TYPE = "PYRAMID"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*CATEG = ""CATEG<1> = 19CATEG<2> = 20CATEG<3> = 36CATEG<4> = 44*CATEG.NAMES = ''CATEG.NAMES<1> = "Shipping"CATEG.NAMES<2> = "Bad Choices"CATEG.NAMES<3> = "Errors"CATEG.NAMES<4> = "Bad Material"*W$FW.CAPTION = "Errors by Reason"W$FW.SUBCAPTION = "2008 Shipments"W$CHART.OPTIONS<-1> = "isSliced='1'"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$FW.LABELS<1,N> = CATEG.NAMES<N>  W$FW.VALUES<1,N> = CATEG<N>  *  * Set up a drill-down widget call for each category  *  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = CATEG.NAMES<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = CATEG<N>NEXT N*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0007E7SUB.SHOW.VARS0c2SUBROUTINE SUB.SHOW.VARS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Display global values**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TABLE"W$TITLE = "Variables"*IF G$QUERYMODE = 1 THEN RETURN*W$LINK.LOCATION<1,1> = 2W$LINK.LOCATION<1,2> = 1*W$LINK.LABEL<1,2> = "Do Nothing"W$LINK.UD.POS<1,2> = "5"W$LINK.UD.VAL<1,2> = "XXX"*IF WIDGET.USER.DATA(1) = "1" THEN  W$LINK.LABEL<1,1> = "Show"  W$LINK.UD.POS<1,1> = "1"  W$LINK.UD.VAL<1,1> = "0"  RETURNENDW$LINK.LABEL<1,1> = "Hide"W$LINK.UD.POS<1,1> = "1"W$LINK.UD.VAL<1,1> = "1"*W$TABLE.COL.LABELS<1,1> = "Variable"W$TABLE.COL.LABELS<1,2> = "Type"W$TABLE.COL.LABELS<1,3> = "Value"*W$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "left"W$TABLE.COL.JUST<1,3> = "left"*TYPE = "GLOBAL"ROW = 0NAME = "G$USERID" ; VAL = G$USERID ; GOSUB ADDVARNAME = "G$CURRENT.DB" ; VAL = G$CURRENT.DB ; GOSUB ADDVARNAME = "G$LOGIN.DATE" ; VAL = G$LOGIN.DATE ; GOSUB ADDVARNAME = "G$LOGIN.TIME" ; VAL = G$LOGIN.TIME ; GOSUB ADDVARNAME = "G$WIDGET.NAME" ; VAL = G$WIDGET.NAME ; GOSUB ADDVARNAME = "G$WIDGET.SUB" ; VAL = G$WIDGET.SUB ; GOSUB ADDVARNAME = "G$WIDGET.NAME.LIST" ; VAL = G$WIDGET.NAME.LISTCONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$WIDGET.SUB.LIST" ; VAL = G$WIDGET.SUB.LISTCONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$WIDGET.CALL.TIME" ; VAL = G$WIDGET.CALL.TIMECONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$WIDGET.CALL.DUR" ; VAL = G$WIDGET.CALL.DURCONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$LICENSE.COUNT" ; VAL = G$LICENSE.COUNT; GOSUB ADDVARNAME = "G$EDITION" ; VAL = G$EDITION; GOSUB ADDVARNAME = "G$SYSTEM.ID" ; VAL = G$SYSTEM.ID; GOSUB ADDVAR*TYPE = "CGI"FOR X = 1 TO DCOUNT( CGI$VARS, @AM )  NAME = CGI$VARS<X>  VAL = CGI$VALS<X>  GOSUB ADDVARNEXT X*W$PRINTABLE = 1*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN*ADDVAR: **ROW += 1W$TABLE.DATA<ROW,1> = NAMEW$TABLE.DATA<ROW,2> = TYPEW$TABLE.DATA<ROW,3> = VALRETURN000EFFSUB.ICON.GALLERY0c2SUBROUTINE SUB.ICON.GALLERY** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Icon Gallery*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Icon Gallery"W$TYPE = "HTML"W$WIDTH = 3W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN ;* Dont process, just provide title, type & width*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "UNABLE TO OPEN MVDB.CONTROL"  RETURNENDREAD ICON.LIST FROM F.MVDB.CONTROL, 'ICON.LIST' ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "UNABLE TO READ ICON.LIST FROM MVDB.CONTROL"  RETURNENDCONVERT @AM TO @VM IN ICON.LIST** WIDGET.USER.DATA(1) = User specified search string* WIDGET.USER.DATA(2) = Search string used to make filtered list (previous string)* WIDGET.USER.DATA(3) = Filtered list* WIDGET.USER.DATA(4) = Current page #*ICNT = DCOUNT( ICON.LIST, @VM )IF WIDGET.USER.DATA(2) # WIDGET.USER.DATA(1) THEN  NEW.FILTER = 1END ELSE NEW.FILTER = 0PAGENO = WIDGET.USER.DATA(4)IF NOT(PAGENO MATCHES "1N0N") THEN PAGENO = ""IF PAGENO = "" THEN PAGENO = 1IF NEW.FILTER THEN  WIDGET.USER.DATA(2) = WIDGET.USER.DATA(1)  SEARCH.STR = WIDGET.USER.DATA(1)  SEARCH.STR = OCONV( SEARCH.STR, 'MCU')  FILTERED.LIST = ""  FOR IX = 1 TO ICNT    IF INDEX(OCONV(ICON.LIST<1,IX>,'MCU'),SEARCH.STR,1) THEN      FILTERED.LIST<1,-1> = ICON.LIST<1,IX>    END  NEXT IX  WIDGET.USER.DATA(3) = FILTERED.LIST  WIDGET.USER.DATA(4) = 1 ;* Page 1  ICON.LIST = FILTERED.LIST  ICNT = DCOUNT( ICON.LIST, @VM )  WIDGET.USER.DATA(5) = "" ;* Next/Prev action not processed here.  WIDGET.USER.DATA(4) = 1 ;* Start on page 1 with a new filter  PAGENO = 1END ELSE  IF WIDGET.USER.DATA(2) # "" THEN    ICON.LIST = WIDGET.USER.DATA(3)    ICNT = DCOUNT( ICON.LIST, @VM)   ENDENDIF WIDGET.USER.DATA(5) = "NEXT" THEN  PAGENO += 1END ELSE IF WIDGET.USER.DATA(5) = "PREV" THEN  PAGENO -= 1  IF PAGENO < 1 THEN PAGENO = 1ENDWIDGET.USER.DATA(5) = ""WIDGET.USER.DATA(4) = PAGENOPER.ROW = 7ROWS.PER.PAGE = 10CALL GET.CGI('generatepdf',IS.PDF)IF IS.PDF THEN  * If generating a PDF, place all items on a single  * page, letting the PDF renderer handle pagination.  ROWS.PER.PAGE = (INT((ICNT-1)/PER.PAGE)+1)*PER.PAGEENDPER.PAGE = ROWS.PER.PAGE * PER.ROWMAX.NAME.CHARS = 22MAX.PAGE = INT( (ICNT-1) / PER.PAGE )+ 1IF PAGENO > MAX.PAGE THEN  PAGENO = 1  WIDGET.USER.DATA(4) = PAGENOENDSTART.POS = ((PAGENO-1) * PER.PAGE) ;* This is an offset, not an actual starting positionIF ICON.LIST = "" THEN  W$HTML.DATA = '<table><tr><td>No Results</td></tr></table>'END ELSE  W$HTML.DATA = '<table><tr><td colspan="':PER.ROW:'">Page ':PAGENO:' of ':MAX.PAGE:'</td></tr><tr>'  W$HTML.DATA := ''  IX = 1  LOOP    SHOW.NAME = ICON.LIST<1,IX+START.POS>    IF LEN(SHOW.NAME) > MAX.NAME.CHARS THEN      SHOW.NAME = SHOW.NAME[1,MAX.NAME.CHARS-3]:"..."    END    W$HTML.DATA := '<td align="center" width="115px" style="font-size:10px;"><img title="':ICON.LIST<1,IX+START.POS>:'" class="icon" src="/db/icons/':ICON.LIST<1,IX+START.POS>:'" /><br />':SHOW.NAME:'<br />':IX+START.POS:'</td>'  UNTIL IX = (PER.PAGE) OR (IX+START.POS) >= ICNT DO    IF NOT(MOD(IX,PER.ROW)) THEN      W$HTML.DATA := '</tr><tr>'    END    IX += 1  REPEAT  W$HTML.DATA := '</tr></table>'END*W$HTML.DATA := '<br />'*FOR N = 1 TO 5*  W$HTML.DATA := 'WIDGET.USER.DATA(':N:') = ':WIDGET.USER.DATA(N):'<br />'*NEXT N*W$INPUT.PROMPT<1> = "Search"W$INPUT.TYPE<1> = "TEXT"W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(1)W$INPUT.UDPOS<1> = 1W$INPUT.BUTTON = "Search"*IF PAGENO > 1 THEN  W$LINK.LABEL<1,-1> = "Prev Page"  W$LINK.LOCATION<1,-1> = 23  W$LINK.UD.POS<1,-1> = 5  W$LINK.UD.VAL<1,-1> = "PREV"END*IF PAGENO < MAX.PAGE THEN  W$LINK.LABEL<1,-1> = "Next Page"  W$LINK.LOCATION<1,-1> = 14  W$LINK.UD.POS<1,-1> = 5  W$LINK.UD.VAL<1,-1> = "NEXT"END*RETURN000436PURGE.NON.PLATFORM.WIDGETS0c2*** 6-22-15 TPARKER ** Purge all platform specific widgets not for this platform*** run by the post install command process*OPEN '','MVDB.CONTROL' TO FILE ELSE STOPREAD PLATFORM FROM FILE, 'PLATFORM' ELSE PLATFORM=''IF PLATFORM = '' THEN STOP*PJS 07-13-15 - comment out this line: IF LEN(PLATFORM) = 2 THEN PLATFORM=PLATFORM:' '*OPEN '','MVDB.WIDGETS' TO FI.MVDB.WIDGETS ELSE STOP*SELECT FI.MVDB.WIDGETS*LOOP   READNEXT ID ELSE ID='DONE'UNTIL ID = 'DONE' DO   WIDGET.PLATFORM=FIELD(ID,' ',1)   DELETE.IT=0   BEGIN CASE      CASE PLATFORM = WIDGET.PLATFORM; NULL      CASE WIDGET.PLATFORM = 'D3'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'UV'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'UD'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'QM'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'OI'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'RL'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'JB'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'D3'; DELETE.IT=1      CASE 1; NULL   END CASE   IF DELETE.IT THEN DELETE FI.MVDB.WIDGETS, IDREPEATEND000C95SUB.DEMO.SPARK0c2SUBROUTINE SUB.DEMO.SPARK** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Spark widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Spark Chart Demo - My Stock Price"W$TYPE = "SPARKLINE"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN  W$TYPE = WIDGET.USER.DATA(1)END ELSE WIDGET.USER.DATA(1) = "SPARKLINE"IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1PALETTE = WIDGET.USER.DATA(2)*VALUES = ""W$FW.VALUES<1,-1> = "2726"W$FW.VALUES<1,-1> = "3788"W$FW.VALUES<1,-1> = "3888"W$FW.VALUES<1,-1> = "2290"W$FW.VALUES<1,-1> = "3902"W$FW.VALUES<1,-1> = "2331"W$FW.VALUES<1,-1> = "3085"W$FW.VALUES<1,-1> = "2701"W$FW.VALUES<1,-1> = "3320"W$FW.VALUES<1,-1> = "2193"W$FW.VALUES<1,-1> = "3451"W$FW.VALUES<1,-1> = "2484"W$FW.VALUES<1,-1> = "3932"W$FW.VALUES<1,-1> = "3704"W$FW.VALUES<1,-1> = "2781"W$FW.VALUES<1,-1> = "2295"W$FW.VALUES<1,-1> = "2473"W$FW.VALUES<1,-1> = "3763"W$FW.VALUES<1,-1> = "2975"W$FW.VALUES<1,-1> = "2235"W$FW.VALUES<1,-1> = "3435"W$FW.VALUES<1,-1> = "2760"W$FW.VALUES<1,-1> = "2797"W$FW.VALUES<1,-1> = "3236"W$FW.VALUES<1,-1> = "2256"W$FW.VALUES<1,-1> = "2415"W$FW.VALUES<1,-1> = "2493"W$FW.VALUES<1,-1> = "3582"W$FW.VALUES<1,-1> = "2345"W$FW.VALUES<1,-1> = "3764"W$FW.VALUES<1,-1> = "2699"W$FW.VALUES<1,-1> = "2948"W$FW.VALUES<1,-1> = "3663"W$FW.VALUES<1,-1> = "3558"W$FW.VALUES<1,-1> = "3219"W$FW.VALUES<1,-1> = "2759"W$FW.VALUES<1,-1> = "2694"W$FW.VALUES<1,-1> = "3235"W$FW.VALUES<1,-1> = "2263"W$FW.VALUES<1,-1> = "2597"W$FW.VALUES<1,-1> = "2528"W$FW.VALUES<1,-1> = "2673"W$FW.VALUES<1,-1> = "2347"W$FW.VALUES<1,-1> = "2055"W$FW.VALUES<1,-1> = "3458"W$FW.VALUES<1,-1> = "2916"W$FW.VALUES<1,-1> = "3497"W$FW.VALUES<1,-1> = "2457"W$FW.VALUES<1,-1> = "2070"W$FW.VALUES<1,-1> = "3261"*IF WIDGET.USER.DATA(1) = "SPARKWINLOSS" THEN  VAL.LIST = W$FW.VALUES  FOR N = 2 TO DCOUNT( W$FW.VALUES<1>, @VM )    VAL = INT(W$FW.VALUES<1,N>)    IF VAL > INT(VAL.LIST<1,N-1>) THEN      VAL = "W" ;* Win    END ELSE IF VAL = INT(VAL.LIST<1,N-1>) THEN      VAL = "D" ;* Draw    END ELSE VAL = "L"    W$FW.VALUES<1,N> = VAL  NEXT N  W$FW.VALUES<1,1> = "W" ;* First month was a win.END ELSE  FOR N = 1 TO DCOUNT( W$FW.VALUES<1>, @VM )    W$FW.VALUES<1,N> = OCONV(W$FW.VALUES<1,N>,"MD2")  NEXT NEND*** Set up a drill-down widget call*W$FW.DD.WIDGET<1,1> = "Drilldown Demo"W$FW.DD.UD.POS<1,1> = 1W$FW.DD.UD.VAL<1,1> = W$FW.VALUES<1,1>*W$FW.SPARK.TREND.BEG<1,1> = W$FW.VALUES<1,1>W$FW.SPARK.TREND.END<1,1> = W$FW.VALUES<1,DCOUNT(W$FW.VALUES<1>,@VM)>*W$FW.CAPTION = "Cisco"W$FW.SUBCAPTION = "12 Months"W$FW.CHART.PALETTE = PALETTE*W$INPUT.PROMPT = "Spark Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "Column":@VM:"Line":@VM:"Win/Loss"W$INPUT.SELVALS = "SPARKCOLUMN":@VM:"SPARKLINE":@VM:"SPARKWINLOSS"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*W$INPUT.PROMPT<2> = "Palette"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0006D0SUB.DEMO.PIE0c2SUBROUTINE SUB.DEMO.PIE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: PIE Chart Demonstration widget**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Chart - Fuel Sales by Type"W$TYPE = "FC2DPIE"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "3D" THEN  W$TYPE = "FC3DPIE"END*SALES = ""SALES<1> = "28452536"SALES<2> = "31208425"SALES<3> = "30245519"SALES<4> = "40425111"SALES<5> = "36515188"SALES<6> = "39144100"SALES<7> = "41655215"SALES<8> = "36615152"SALES<9> = "43944161"SALES<10> = "42251594"SALES<11> = "48833151"SALES<12> = "50122415"*TOT.SALES = SUM(SALES)CATEG = ""CATEG<1> = INT(TOT.SALES*.4)CATEG<2> = INT(TOT.SALES*.2)CATEG<3> = INT(TOT.SALES*.3)CATEG<4> = INT(TOT.SALES*.1)*CATEG.NAMES = ''CATEG.NAMES<1> = "Regular"CATEG.NAMES<2> = "Mid-Grade"CATEG.NAMES<3> = "Premium"CATEG.NAMES<4> = "Ethanol"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$PIE.LABELS<1,N> = CATEG.NAMES<N>  W$PIE.VALUES<1,N> = CATEG<N>  *  * Set up a drill-down widget call for each category  *  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = CATEG.NAMES<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = CATEG<N>NEXT NIF WIDGET.USER.DATA(1) # "3D" THEN  W$PIE.VALUE.OPTS<1,3> = 'isSliced="1"'END*IF WIDGET.USER.DATA(1) = "3D" THEN*  W$LINK.LABEL<1> = "2D"  W$LINK.ICON.TXT<1> = "2D Chart"  W$LINK.UD.VAL<1> = "2D"  W$PIE.CAPTION = "3D Chart"END ELSE*  W$LINK.LABEL<1> = "3D"  W$LINK.ICON.TXT<1> = "3D Chart"  W$LINK.UD.VAL<1> = "3D"  W$PIE.CAPTION = "2D Chart"ENDW$LINK.ICON<1> = "chart_pie.png"W$LINK.UD.POS<1> = "1"W$LINK.LOCATION<1> = "C"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN00045DSUB.DEMO.FUNNEL0c2SUBROUTINE SUB.DEMO.FUNNEL** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Funnel widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Funnel Demo - Website Conversion Ratio"W$TYPE = "FUNNEL"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*CATEG = ""CATEG<1> = 385634CATEG<2> = 175631CATEG<3> = 84564CATEG<4> = 35654CATEG<5> = 12342*CATEG.NAMES = ''CATEG.NAMES<1> = "Website Visits"CATEG.NAMES<2> = "Downloads"CATEG.NAMES<3> = "Interested to buy"CATEG.NAMES<4> = "Contract finalized"CATEG.NAMES<5> = "Purchased"*W$FW.CAPTION = "Conversion Ratio"W$FW.SUBCAPTION = "May 2007"W$CHART.OPTIONS<-1> = "isSliced='1'"W$CHART.OPTIONS<-1> = "showPercentValues='1'"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$FW.LABELS<1,N> = CATEG.NAMES<N>  W$FW.VALUES<1,N> = CATEG<N>  *  * Set up a drill-down widget call for each category  *  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = CATEG.NAMES<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = CATEG<N>NEXT N*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0005B8SUB.PORTAL.AP.REPORTS0c2SUBROUTINE SUB.PORTAL.AP.REPORTS**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = 'AP Reporting'W$TYPE = "FC2DPIE"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.DASHBOARD.BALANCES ELSE   W$TYPE='TEXT'   W$TEXT='UNABLE TO OPEN DICT DASHBOARD.BALANCES'   RETURN ENDREAD AP.AMOUNTS FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AP.STATS' ELSE AP.AMOUNTS=''BEGIN CASE   CASE 1      W$TITLE = "Chart - AP Balances by Days Due"; CALL PORTAL.SHOW.LAST.UPDATED('AP')      AMTS=AP.AMOUNTS      W$PIE.CAPTION='Total AP Balance of '**   CASE WIDGET.USER.DATA(1) = 'AR'**      W$TITLE = "Chart - AR Balances by Days Due"**      AMTS=AR.AMOUNTS**      W$PIE.CARTION='Total AR Balance of 'END CASE*TOT.AMT=SUM(AMTS)W$PIE.CAPTION:=OCONV(TOT.AMT,'MD02,$')*CATEGORIES='Current'CATEGORIES<2>='1 - 30 Days'CATEGORIES<3>='31 - 60 Days'CATEGORIES<4>='61 - 90 Days'CATEGORIES<5>='Over 90 Days'*CATEGORY.AMTS=AMTS**W$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='showPercentageValues="0"'W$CHART.OPTIONS<-1>='showPercentageInLabel="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="0"'W$CHART.OPTIONS<-1>='thousandSeparator=","'W$CHART.OPTIONS<-1>='pieradius="150"'FOR N = 1 TO 5  W$PIE.LABELS<1,N> = CATEGORIES<N>  W$PIE.VALUES<1,N> = INT(CATEGORY.AMTS<N>/100 + .5)NEXT N**RETURNEND000101WEB.FORMS0c2SUBROUTINE WEB.FORMS** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Untitled HTML"W$TYPE = "HTML"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$HTML.DATA = '<h2>HTML Widget Content</h2>'RETURN0000DDCHECK.PASSWORD0c2OPEN 'MVDB.USERS' TO FILE ELSE STOPSELECT FILELOOP   READNEXT ID ELSE ID ='DONE'UNTIL ID = 'DONE' DO   READ REC FROM FILE, ID ELSE REC=''   CRT ID,OCONV(REC<1>,'U3060'),OCONV(ID,'U3060')REPEATEND0010F6SUB.DEMO.REV.GP.SALES.CHART0c2SUBROUTINE SUB.DEMO.REV.GP.SALES.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEEQU ANNUAL.OR.MONTHLY TO WIDGET.USER.DATA(2)IF ANNUAL.OR.MONTHLY = '' THEN ANNUAL.OR.MONTHLY='By Year'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''YEARS=REC<67>MAX.YEARS=DCOUNT(YEARS,CHAR(253))REVENUE.OR.GP=WIDGET.USER.DATA(1)IF INDEX(ANNUAL.OR.MONTHLY,'By Month',1) THEN GOTO DO.MONTHLY*BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE='YTD Sales'      W$BAR.YMEMO = "YTD Sales"      SALES.AMTS=REC<68>   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE='YTD Gross Profit'      W$BAR.YMEMO = "YTD Gross Profit"      SALES.AMTS=REC<69>   CASE 1      REC = ''      SALES.AMTS = ''END CASE***MAX.SALES.AMT=0N=0FIRST.YEAR=''CURRENT.YEAR=''MO.NO=DCOUNT(REC<68,3>,CHAR(252))FOR NN = 1 TO MAX.YEARS   SALES.AMT=0   FOR NNN = 1 TO MO.NO      SALES.AMT+=SALES.AMTS<1,NN,NNN>    NEXT NNN   SALES.AMT=OCONV(SALES.AMT,'MD02')  IF SALES.AMT THEN     N+=1     IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT     W$BAR.VALUES<1,N> = SALES.AMT     YEAR=YEARS<1,NN>     IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR     CURRENT.YEAR=YEAR     W$BAR.XLABELS<1,N> = YEAR     W$FW.DD.WIDGET<1,N> = "DEMO ANNUAL SALES BY REP"     W$FW.DD.UD.POS<1,N,1> = 1     W$FW.DD.UD.VAL<1,N,1> = REVENUE.OR.GP; * REVENUE OR GP     W$FW.DD.UD.POS<1,N,2> = 2     W$FW.DD.UD.VAL<1,N,2> = YEAR   ENDNEXT NNW$BAR.XMEMO = "Year (drilldown for ":W$BAR.YMEMO:" by Rep)"W$BAR.CAPTION=W$BAR.YMEMO:' From ':FIRST.YEAR:' to ':CURRENT.YEAR* ROUND MAX AMOUNT UP TO THE NEXT 250000MAX.SALES.AMT+=250000MAX.SALES.AMT=INT(MAX.SALES.AMT/250000) * 250000W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'*W$CHART.OPTIONS<-1>='yAxisMaxValue="1500000"'*DO.PROMPT:*W$INPUT.PROMPT<1> = "Display By"W$INPUT.TYPE<1> = "SELECT"W$INPUT.UDPOS<1> = 2OPTIONS='By Year':CHAR(253):'By Month Using Column Chart':CHAR(253):'By Month Using Line Chart'W$INPUT.SELOPTS<1>=OPTIONSW$INPUT.SELVALS<1>=OPTIONSLOCATE ANNUAL.OR.MONTHLY IN OPTIONS<1> SETTING DEFAULT.POS ELSE DEFAULT.POS=1W$INPUT.DEFAULT<1>=ANNUAL.OR.MONTHLYW$INPUT.BUTTON<1> = "GO"*RETURN*DO.MONTHLY:*IF INDEX(ANNUAL.OR.MONTHLY,'Column',1) THEN   W$TYPE='FCMSCOLUMN2D' END ELSE   W$TYPE='FCMSLINE' ENDW$WIDTH = 3W$CHART.OPTIONS<-1>='showValues="0"'BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE='Monthly Sales'      W$BAR.YMEMO = "Monthly Sales"      W$BAR.CAPTION='Monthly Sales by Year'      SALES.ATT=68   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE='Monthly Gross Profit'      W$BAR.YMEMO = "Monthly Gross Profit"      W$BAR.CAPTION='Monthly Gross Profit by Year'      SALES.ATT=69   CASE 1      SALES.ATT=68      REC=''END CASETODAY=OCONV(DATE(),'D4-')MM=TODAY[1,2]+0YYYY=TODAY[7,4]IF MM = 1 THEN YYYY=YYYY-1YYYY.SELECT=''YEARS=''W$BAR.VALUES=''FOR N = 1 TO 12  W$BAR.XLABELS<1,N> = OCONV(N*30-15,'DMA')[1,3]NEXT NIF MAX.YEARS > 5 THEN MAX.DISPLAY.YEARS=5 ELSE MAX.DISPLAY.YEARS=MAX.YEARSMS.VAL.CNTR=0FOR I = 1 TO MAX.DISPLAY.YEARS   YEAR=YYYY-MAX.DISPLAY.YEARS+I   YEARS<-1>=YEAR   W$BAR.LABELS<I>=YEAR   YYYY.SELECT:=' "':YEAR:'"'   SALES.AMTS=REC<SALES.ATT>   FOR MO.NO = 1 TO 12      MS.VAL.CNTR+=1      SALE.AMT=SALES.AMTS<1,I,MO.NO>      W$BAR.VALUES<I,MO.NO>=OCONV(SALE.AMT,'MD02')      W$FW.DD.WIDGET<1,MS.VAL.CNTR> = "DEMO SINGLE MONTH SALES BY REP"      W$FW.DD.UD.POS<1,MS.VAL.CNTR,1>=1      W$FW.DD.UD.VAL<1,MS.VAL.CNTR,1>=REVENUE.OR.GP      W$FW.DD.UD.POS<1,MS.VAL.CNTR,2>=2      W$FW.DD.UD.VAL<1,MS.VAL.CNTR,2> = 'MS.SERIES'      W$FW.DD.UD.POS<1,MS.VAL.CNTR,3> = 3      W$FW.DD.UD.VAL<1,MS.VAL.CNTR,3>='MS.LABEL'    NEXT MO.NO NEXT I**WRITE W$BAR.VALUES ON FILE.CONTROL, 'BAR.VALUES'W$BAR.XMEMO='Month (drilldown for month by Rep)'GOSUB DO.PROMPTRETURNEND000509SUB.RSS.FEEDS0c2SUBROUTINE SUB.RSS.FEEDS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Display a list of available RSS feeds**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD WWW.INCLUDE*W$TITLE = "RSS Feeds"W$TYPE = "TABLE"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "Cannot open RSS.FEEDS"  RETURNENDOPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "Cannot open MVDB.CONTROL"  RETURNEND*W$TABLE.COL.LABELS<1,1> = "ID"W$TABLE.COL.LABELS<1,2> = "Name / Description"W$TABLE.COL.LABELS<1,3> = "Subscribe"*EXECUTE "SSELECT RSS.FEEDS BY NAME" CAPTURING JUNKROW = 1LOOP  READNEXT FID ELSE EXIT  READ FEED.REC FROM F.RSS.FEEDS, FID ELSE CONTINUE  FEED.NAME = FEED.REC<1>  CALL RSS.XML.ENCODE(FEED.NAME,"")  FEED.DESC = FEED.REC<3>  FEED.URL = "http://":CGI$SERVER.NAME:CGI$PATH:'/RSS.MAIN?feed=':FID  W$TABLE.DATA<ROW,1> = FID  W$TABLE.DATA<ROW,2> = '<b>':FEED.NAME:'</b><br />':FEED.DESC  W$TABLE.DATA<ROW,3> = \<a href="\:FEED.URL:\">Standard Feed</a>\  FOR N = 1 TO DCOUNT( FEED.REC<6>, @VM )    W$TABLE.DATA<ROW,3> := '<br /><a href="':FEED.URL:'&':FEED.REC<7,N>:'">':FEED.REC<6,N>:'</a>'  NEXT N  ROW += 1REPEATRETURN00008BCALL.CREATE.WEBSERVICE.PASSWORD0c2CALL CREATE.WEBSERVICE.PASSWORD(PASSWORD,PASSTIME)CRT 'PASSTIME=':PASSTIMECRT 'PASSWORD=':PASSWORDEND000988SUB.CODE.TEMPLATES0c2SUBROUTINE SUB.CODE.TEMPLATES** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: * Description: List code templates*INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGET.TYPES*W$TITLE = "Widget code templates"W$TYPE = "HTML"W$WIDTH = 3W$PRINTABLE = 1*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN ;* Hidden mode  W$LINK.LABEL<1,1> = "Show Widget"  W$LINK.LOCATION<1,1> = "C"  W$LINK.UD.POS<1,1> = 1  W$LINK.UD.VAL<1,1> = ""  W$LINK.ICON<1,1> = "application_view_detail.png"  W$LINK.ICON.TXT<1,1> = "Show Widget"  W$TITLE := ' (Hidden)'  W$PRINTABLE = 0  RETURNENDOPEN '','MVDB.SUB.TEMPLATES' TO F.MVDB.SUB.TEMPLATES ELSE  W$HTML.DATA = '<h2>MVDB.SUB.TEMPLATES file cannot be opened.</h2>'  RETURNENDOPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE  W$HTML.DATA = '<h2>MVDB.WIDGET.TYPES file cannot be opened.</h2>'  RETURNEND*EXECUTE 'SSELECT MVDB.WIDGET.TYPES BY GROUP BY HANDLER WITH INACTIVE # "1"' CAPTURING JUNKW$HTML.DATA = '<table width="100%"><thead><tr><th>Widget Type/Template</th><th>Description</th><th>Lines</th><th>Use Template</th><th>Edit</th></tr><tbody>'LOOP  READNEXT ID ELSE EXIT  READ TREC FROM F.MVDB.SUB.TEMPLATES, ID ELSE TREC = ""  MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, ID ELSE MAT WIDGET.TYPES = ""  CLASS.NAME = FIELD(WT$ICON,'.',1)  CONVERT "_" TO "-" IN CLASS.NAME  W$HTML.DATA := '<tr><td>':ID:'</td>'  W$HTML.DATA := '<td><img height="20" width="20" src="/db/icons/':WT$ICON:'" />':WT$DESC:'</td>'  LINES = DCOUNT(TREC,@AM)  IF LINES = 0 THEN LINES = '&nbsp;'  W$HTML.DATA := '<td align="right">':LINES:'</td>'  IF FIELD(TREC,' ',1) = "USE" THEN    USE.TEMPLATE = FIELD( TREC, ' ', 2 )    USE.TEMPLATE = '<a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUB.TEMPLATES&ed_item=':USE.TEMPLATE:'" target="MVDB.SUB.TEMPLATES_':USE.TEMPLATE:'">':USE.TEMPLATE:'</a>'  END ELSE USE.TEMPLATE = '&nbsp;'  W$HTML.DATA := '<td>':USE.TEMPLATE:'</td>'  IF TREC = "" THEN ACTION = "Add" ELSE ACTION = "Edit"  W$HTML.DATA := '<td><a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUB.TEMPLATES&ed_item=':ID:'" target="MVDB.SUB.TEMPLATES_':ID:'">':ACTION:'</a></td>'  W$HTML.DATA := '</tr>'REPEATW$HTML.DATA := '</tbody></table>'*W$LINK.LABEL<1,1> = "Hide Widget"W$LINK.LOCATION<1,1> = "C"W$LINK.UD.POS<1,1> = 1W$LINK.UD.VAL<1,1> = "1"W$LINK.ICON<1,1> = "application.png"W$LINK.ICON.TXT<1,1> = "Hide Widget"*RETURN000D3BSUB.PORTAL.MARGINS0c2SUBROUTINE SUB.PORTAL.MARGINS** DEFINE PARAMETERS FOR PORTAL SALES REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOPDIM SETUP.PARAMS(25)*W$TITLE = "Portal Year to Year Margins"; CALL PORTAL.SHOW.LAST.UPDATED('SALES')W$TYPE = "HTML"W$WIDTH = 2D3=1*IF G$QUERYMODE THEN RETURN**OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE    ERROR.MSG='UNABLE TO OPEN MVDB.CONTROL'   GOTO DISPLAY.ERROR ENDOPEN '','DASHBOARD.CLOSING.STATS' TO FI.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR END*READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'END CASE**W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'*OTODAY=OCONV(DATE(),'D4-')*YEAR.TO.YEAR.MARGIN.PERCENTS:*W$TYPE='FCCOLUMN3D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYY BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'YEAR.TO.YEAR.REPORT'YEAR.TOTALS=''YEAR.GROSS.PROFITS=''YEARS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))YEAR.CNTR=0FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YEAR=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         IF AMOUNT OR GROSS.PROFIT THEN            YEAR.CNTR+=1            YEARS<YEAR.CNTR>=YEAR            AMOUNT=ICONV(AMOUNT,'MD2')            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            YEAR.TOTALS<YEAR.CNTR>=AMOUNT            YEAR.GROSS.PROFITS<YEAR.CNTR>=GROSS.PROFIT          END       END    ENDNEXT ROW.NOYEAR.TOTALS<YEAR.CNTR+1>=SUM(YEAR.TOTALS)YEAR.GROSS.PROFITS<YEAR.CNTR+1>=SUM(YEAR.GROSS.PROFITS)YEARS<YEAR.CNTR+1>='Average'*W$BAR.CAPTION = 'Year by Year Margin Percents'W$BAR.XMEMO = "Year"W$BAR.YMEMO = 'Margin Percents'*MAX.YEARS=DCOUNT(YEARS,CHAR(254))FOR YEAR.NO = 1 TO MAX.YEARS   YEAR.TOTAL=YEAR.TOTALS<YEAR.NO>   YEAR.GROSS.PROFIT=YEAR.GROSS.PROFITS<YEAR.NO>   MARGIN=INT(YEAR.GROSS.PROFIT * 1000 / YEAR.TOTAL + .5)   W$BAR.VALUES<1,YEAR.NO>=OCONV(MARGIN+0,'MD1')   W$BAR.XLABELS<1,YEAR.NO>=YEARS<YEAR.NO> NEXT YEAR.NORETURN*DISPLAY.ERROR:*W$HTML.DATA='<h3>':ERROR.MSG:'</h3>'RETURN**RETURNEND000597REFRESH.PORTAL.DATES0c2OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO DICT.FI ELSE STOP 201,'DICT DASHBOARD.CLOSING.STATS'READ LAST.AR.DATE FROM DICT.FI, 'LAST.AR.REFRESH' ELSE STOP 201,'LAST.AR.REFRESH'READ LAST.AP.DATE FROM DICT.FI, 'LAST.AP.REFRESH' ELSE STOP 201,'LAST.AP.REFRESH'READ LAST.SALES.DATE FROM DICT.FI, 'LAST.SALES.REFRESH' ELSE STOP 201,'LAST.SALES.REFRESH'*FI='AR'; LAST.DATE=LAST.AR.DATE<1>; ATTS=20:@AM:8; GOSUB UPDATE.DATESWRITE DATE():@AM:OCONV(DATE(),'D2-') ON DICT.FI, 'LAST.AR.REFRESH'FI='AP'; LAST.DATE=LAST.AP.DATE<1>; ATTS=20:@AM:8; GOSUB UPDATE.DATESWRITE DATE():@AM:OCONV(DATE(),'D2-') ON DICT.FI, 'LAST.AP.REFRESH'FI='SALES'; LAST.DATE=LAST.SALES.DATE<1>; ATTS=1; GOSUB UPDATE.DATESWRITE DATE():@AM:OCONV(DATE(),'D2-') ON DICT.FI, 'LAST.SALES.REFRESH'STOP*UPDATE.DATES:*MAX.ATTS=DCOUNT(ATTS,@AM)DIFF.DAYS=DATE()-LAST.DATEOPEN '',FI TO FI.FI ELSE STOP 201,FIEXECUTE "SELECT ":FILOOP   READNEXT ID ELSE ID = 'DONE'UNTIL ID = 'DONE' DO   READ REC FROM FI.FI, ID ELSE REC=''   FOR I = 1 TO MAX.ATTS      ATT.NO=ATTS<I>      IF ATT.NO <> '' THEN         DATES=REC<ATT.NO>         MAX.DATES=DCOUNT(DATES,@VM)         FOR II = 1 TO MAX.DATES            THIS.DATE=DATES<1,II>            IF THIS.DATE <> '' THEN               THIS.DATE+=DIFF.DAYS               REC<ATT.NO,II>=THIS.DATE             END          NEXT II       END    NEXT I   WRITE REC ON FI.FI, IDREPEATRETURN00013DSUB.LISTPEQS0c2SUBROUTINE SUB.LISTPEQS** Copyright (c) 2010 SB, Inc. All rights reserved.*INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "HTML"W$TITLE = "Print Queue"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$TEXT.DATA = '<iframe src="/dbc/SBBP.SB.LISTPEQS" width="100%" scrolling="auto" height="500"></iframe>'RETURN000812SUB.DEMO.BULLET0c2SUBROUTINE SUB.DEMO.BULLET** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Bullet widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Bullet Chart Demo - Sales Volume"W$TYPE = "VBULLET"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN  W$TYPE = WIDGET.USER.DATA(1)END ELSE WIDGET.USER.DATA(1) = "VBULLET"IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1PALETTE = WIDGET.USER.DATA(2)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = 800000*W$FW.COLOR.RANGE<1,1> = 0W$FW.COLOR.RANGE<2,1> = 400000W$FW.COLOR.RANGE<3,1> = COLOR$RED*W$FW.COLOR.RANGE<1,2> = 400000W$FW.COLOR.RANGE<2,2> = 650000W$FW.COLOR.RANGE<3,2> = "YELLOW"*W$FW.COLOR.RANGE<1,3> = 650000W$FW.COLOR.RANGE<2,3> = 800000W$FW.COLOR.RANGE<3,3> = "GREEN"*W$FW.METER.VALUE = 725000W$FW.METER.TARGET = 775000*W$FW.CAPTION = "July Sales"W$FW.SUBCAPTION = "Billings"*W$FW.CHART.PALETTE = PALETTE*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* Let it calculate thisW$FW.TICKMARKS<5> = 4 ;* 4 minor tickmarks between the major ones**W$CHART.OPTIONS = "paletteThemeColor='#a2287a'"*W$FW.BC.PLOT.COLOR = COLOR$BLUEW$FW.BC.TARGET.COLOR = COLOR$WHITE*W$FW.DD.WIDGET<1,1> = "Drilldown Demo"W$FW.DD.UD.POS<1,1,1> = 1W$FW.DD.UD.VAL<1,1,1> = W$FW.METER.VALUEW$FW.DD.UD.POS<1,1,2> = 2W$FW.DD.UD.VAL<1,1,2> = WIDGET.USER.DATA(1)*W$INPUT.PROMPT = "Bullet Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "Horizontal":@VM:"Vertical"W$INPUT.SELVALS = "HBULLET":@VM:"VBULLET"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*W$INPUT.PROMPT<2> = "Palette"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN002FEFSUB.PORTAL.AP.REPORT.SETUP0c2SUBROUTINE SUB.PORTAL.AP.REPORT.SETUP** DEFINE PARAMETERS FOR PORTAL AP REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOP*W$TITLE = "Portal AP Report Setup"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*EQUATE ACCOUNT TO WIDGET.USER.DATA(1)EQUATE REPORT.FILE TO WIDGET.USER.DATA(2)EQUATE DUE.DATE.DICT TO WIDGET.USER.DATA(3)EQUATE DATE.PAID.DICT TO WIDGET.USER.DATA(4)EQUATE INVOICE.AMT.DICT TO WIDGET.USER.DATA(5)EQUATE BALANCE.DICT TO WIDGET.USER.DATA(6)EQUATE DUE.DATE.AMC TO WIDGET.USER.DATA(8)EQUATE DATE.PAID.AMC TO WIDGET.USER.DATA(9)EQUATE INVOICE.AMT.AMC TO WIDGET.USER.DATA(10)EQUATE INVOICE.AMT.CONV TO WIDGET.USER.DATA(11)EQUATE INVOICE.AMT.COOR TO WIDGET.USER.DATA(12)EQUATE BALANCE.AMC TO WIDGET.USER.DATA(13)EQUATE BALANCE.CONV TO WIDGET.USER.DATA(14)EQUATE BALANCE.COOR TO WIDGET.USER.DATA(15)OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE   MESSAGE='No Platform Type Defined'   GOTO MESSAGE.DISPLAY ENDFIRST.TIME=0IF G$SUBMITTED <> '1' THEN   MATREAD WIDGET.USER.DATA FROM FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ELSE      MAT WIDGET.USER.DATA = ''      FIRST.TIME=1    END   IF NOT(FIRST.TIME) THEN      GOSUB VALIDATE.PREVIOUS.INPUTS    END END ELSE   GOSUB VALIDATE.PREVIOUS.INPUTS   MATWRITE WIDGET.USER.DATA ON FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ENDGOSUB SET.PROMPTSRETURN*SET.PROMPTS:*W$INPUT.PROMPT<1> = "AP File Account"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = ACCOUNT*W$INPUT.PROMPT<2> = "Name Of AP File"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = REPORT.FILE*W$INPUT.PROMPT<3> = "Due Date Dict Name"W$INPUT.TYPE<3> = 'TEXT'W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = DUE.DATE.DICT*W$INPUT.PROMPT<4> = "Date Paid Dict Name"W$INPUT.TYPE<4> = 'TEXT'W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = DATE.PAID.DICT*W$INPUT.PROMPT<5> = "Invoice Amount Dict Name"W$INPUT.TYPE<5> = 'TEXT'W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = INVOICE.AMT.DICT*W$INPUT.PROMPT<6> = "Remaining Balance Dict Name"W$INPUT.TYPE<6> = 'TEXT'W$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = BALANCE.DICT*RETURN*VALIDATE.PREVIOUS.INPUTS:*MESSAGE=''BEGIN CASE   CASE PLATFORM = 'D3'      MD.TYPE='MD'   CASE PLATFORM = 'JB'      MD.TYPE='MD'   CASE 1      MD.TYPE='VOC'END CASEOPEN '',MD.TYPE TO FI.MD ELSE   MESSAGE='Unable to open ':MD.TYPE:' for validation purposes'   GOTO MESSAGE.DISPLAY ENDVALID.ACCOUNT=1IF ACCOUNT <> '' THEN   QFILE.NAME='QFILE'   CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)   IF QFILE.NAME = '' THEN      MESSAGE<-1>=ACCOUNT:' is not a valid account!'      VALID.ACCOUNT=0    END**   IF PLATFORM = 'UD' THEN**      QFILE.NAME='QFILE'**      CALL CREATE.UD.QPOINTER(ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)**      IF QFILE.NAME = '' THEN**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END ELSE**      WRITE 'Q':@AM:ACCOUNT:@AM:MD.TYPE ON FI.MD, 'QFILE'**      OPEN '','QFILE' TO FI.ACCOUNT.MD ELSE**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END END ELSE   VALID.ACCOUNT=0   MESSAGE<-1>='No Account defined!' ENDIF REPORT.FILE <> '' THEN   IF NOT(VALID.ACCOUNT) THEN      MESSAGE<-1>='Unable to verify ':REPORT.FILE:' file because account not properly defined!'      VALID.REPORT.FILE=0    END ELSE      VALID.REPORT.FILE=1      CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)      IF QFILE.NAME = '' THEN         MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'         VALID.REPORT.FILE=0       END**      IF PLATFORM = 'UD' THEN**         QFILE.NAME='QFILE'**         CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)**         IF QFILE.NAME = '' THEN**            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**            VALID.REPORT.FILE=0**          END**       END ELSE**         WRITE 'Q':@AM:ACCOUNT:@AM:REPORT.FILE ON FI.MD, 'QFILE'**         OPEN '','QFILE' TO FI.REPORT.FILE ELSE**            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**            VALID.REPORT.FILE=0**          END**       END      IF VALID.REPORT.FILE THEN         HAVE.QFILE.REC=1         READ QFILE.REC FROM FI.MD, 'QFILE' ELSE            HAVE.QFILE.REC=0            MESSAGE<-1>='Unable to create QFILE pointer to ':ACCOUNT:' ':REPORT.FILE          END         IF HAVE.QFILE.REC THEN            WRITE QFILE.REC ON FI.MD, 'DASHBOARD.AP.FILE'            OPEN 'DICT','DASHBOARD.AP.FILE' TO FI.DICT.REPORT.FILE ELSE                MESSAGE<-1>='Unable to open DICT ':REPORT.FILE             END          END       END    END END ELSE   MESSAGE<-1>='No AP Report file defined!' ENDIF DUE.DATE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Due Date Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DUE.DATE.DICT:' Because No AP File!'    END ELSE      READ DUE.DATE.DICT.REC FROM FI.DICT.REPORT.FILE, DUE.DATE.DICT ELSE         DUE.DATE.DICT.REC=''         MESSAGE<-1>=DUE.DATE.DICT:' Does Not Exist!'       END      IF DUE.DATE.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DUE.DATE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DUE.DATE.DICT.REC<7>[1,1] <> 'D' AND DUE.DATE.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DUE.DATE.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DUE.DATE.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF DATE.PAID.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Date Paid Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DATE.PAID.DICT:' Because No AP File!'    END ELSE      READ DATE.PAID.DICT.REC FROM FI.DICT.REPORT.FILE, DATE.PAID.DICT ELSE         DATE.PAID.DICT.REC=''         MESSAGE<-1>=DATE.PAID.DICT:' Does Not Exist!'       END      IF DATE.PAID.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DATE.PAID.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DATE.PAID.DICT.REC<7>[1,1] <> 'D' AND DATE.PAID.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DATE.PAID.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DATE.PAID.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF INVOICE.AMT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Invoice Amount Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":INVOICE.AMT.DICT:' Because No AP File!'    END ELSE      READ INVOICE.AMT.DICT.REC FROM FI.DICT.REPORT.FILE, INVOICE.AMT.DICT ELSE         INVOICE.AMT.DICT.REC=''         MESSAGE<-1>=INVOICE.AMT.DICT:' Does Not Exist!'       END      IF INVOICE.AMT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=INVOICE.AMT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=INVOICE.AMT.DICT.REC<7>[1,2]               DICT.8.1.2=INVOICE.AMT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=INVOICE.AMT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':INVOICE.AMT.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF BALANCE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Balance Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":BALANCE.DICT:' Because No AP File!'    END ELSE      READ BALANCE.DICT.REC FROM FI.DICT.REPORT.FILE, BALANCE.DICT ELSE         BALANCE.DICT.REC=''         MESSAGE<-1>=BALANCE.DICT:' Does Not Exist!'       END      IF BALANCE.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=BALANCE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=BALANCE.DICT.REC<7>[1,2]               DICT.8.1.2=BALANCE.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=BALANCE.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               BALANCE.AMC=BALANCE.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':BALANCE.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDCREATE.INDEXES=1IF MESSAGE = '' THEN   MESSAGE='AP Report parameters properly defined!' END ELSE   IF INDEX(MESSAGE,'!',1) THEN      MESSAGE=INSERT(MESSAGE,1,0,0,'!!! ERRORS !!!')      CREATE.INDEXES=0    END ENDIF CREATE.INDEXES THEN   * CREATE PIPE DICTIONARY ITEM   IF PLATFORM = 'D3' OR PLATFORM = 'QM' OR PLATFORM = 'JB' THEN      PIPE='A'      PIPE<2>=0      PIPE<3>=' '      PIPE<8>='F;C|'      PIPE<9>='L'      PIPE<10>=1    END ELSE      PIPE='I'      PIPE<2>='"|"'      PIPE<4>='|'      PIPE<5>='1L'      PIPE<6>='S'    END   WRITE PIPE ON FI.DICT.REPORT.FILE, 'PIPE'   *   ** INDEX LOGIC   *   BEGIN CASE      CASE PLATFORM = 'D3'         INDEX.TEST='A':DUE.DATE.AMC:'(DY):':DUE.DATE.AMC:'(DM)'         READ FILE.DEF.REC FROM FI.DICT.REPORT.FILE, REPORT.FILE ELSE FILE.DEF.REC=''         IF FILE.DEF.REC <> '' AND NOT(INDEX(FILE.DEF.REC<8>,INDEX.TEST,1)) THEN            MESSAGE<-1>='Creating Indexes'            CMND1="CREATE-INDEX DASHBOARD.AP.FILE A":DUE.DATE.AMC            EXECUTE CMND1 CAPTURING RESULT1            CMND2="CREATE-INDEX DASHBOARD.AP.FILE ":INDEX.TEST            EXECUTE CMND2 CAPTURING RESULT2          END      CASE 1         EXECUTE "CREATE-INDEX DASHBOARD.AP.FILE ":DUE.DATE.DICT CAPTURING RESULT1   END CASE ENDGOSUB MESSAGE.DISPLAYRETURN*MESSAGE.DISPLAY:*MAX.MSG=DCOUNT(MESSAGE,CHAR(254))W$HTML.DATA='<h3>':MESSAGE<1>IF MAX.MSG > 1 THEN   FOR MSG.NO = 2 TO MAX.MSG      W$HTML.DATA:='<br>':MESSAGE<MSG.NO>    NEXT MSG.NO ENDW$HTML.DATA:='</h3>'RETURNEND0006AECREATE.QPOINTER0c2SUBROUTINE CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,FILENAME,CALL.IT,FI.QPOINTER)**OPEN '',CALL.IT TO FI.QPOINTER THEN**   IF CALL.IT <> 'QFILE' THEN RETURN** ENDCALL.IT.PARAM=CALL.ITCALL.IT=''PATH=@PATHBEGIN CASE   CASE PLATFORM = 'UD'      OPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE         UD.ACCOUNTS='F'         UD.ACCOUNTS<-1>='@UDTHOME/sys/UD.ACCOUNT'         UD.ACCOUNTS<-1>='@UDTHOME/sys/D_UD.ACCOUNT'         WRITE UD.ACCOUNTS ON FI.MD, 'UD.ACCOUNTS'         OPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE RETURN       END      READV PATH FROM FI.UD.ACCOUNTS, ACCOUNT, 1 ELSE RETURN      F.POINTER='F'      F.POINTER<2>=PATH:'/':FILENAME      F.POINTER<3>=PATH:'/D_':FILENAME      WRITE F.POINTER ON FI.MD, CALL.IT.PARAM   CASE PLATFORM = 'JB' AND ACCOUNT = 'MVDB'      IF INDEX(PATH,':\',1) THEN DELIM.TYPE='\' ELSE DELIM.TYPE='/'      F.POINTER='F'      F.POINTER<2>=PATH:DELIM.TYPE:FILENAME      F.POINTER<3>=PATH:DELIM.TYPE:FILENAME:']D'      WRITE F.POINTER ON FI.MD, CALL.IT.PARAM   CASE 1      QFILE.REC='Q':@AM:ACCOUNT:@AM:FILENAME      WRITE QFILE.REC ON FI.MD, CALL.IT.PARAMEND CASE* CHANGE CALL.IT TO SUCCESSFUL NAME* OTHERWISE IT WILL RETURN WITH NULL SAYING FAILURECALL.IT=CALL.IT.PARAMOPEN '',CALL.IT.PARAM TO FI.QPOINTER ELSE   CALL.IT=''   IF PLATFORM = 'JB' AND FILENAME = 'MD' THEN      * OTHER ACCOUNT MAY NOT HAVE AN MD AND THE ONLY REASON TO SET A      * QPOINTER TO IT IS TO TEST VALIDITY OF THE ACCOUNT SO JUST      * CHECK FOR THE EXISTENCE OF A SYSTEM RECORD      OPEN '','SYSTEM' TO FI.SYSTEM ELSE RETURN      READ ACCOUNT.EXIST FROM FI.SYSTEM, ACCOUNT ELSE RETURN      CALL.IT=CALL.IT.PARAM    END ENDRETURNEND000B60SUB.DEMO.SALES.CHART0c2SUBROUTINE SUB.DEMO.SALES.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''VAL.TYPE='$'DRILLDOWN.WIDGET=''DRILLDOWN.TYPE=''BEGIN CASE   CASE WIDGET.USER.DATA(1) = 'REVENUES'      W$TITLE='YTD Revenues'      W$BAR.YMEMO = "YTD Revenues"      SALES.AMTS=REC<68>   CASE WIDGET.USER.DATA(1) = 'GROSSPROFIT'      W$TITLE='YTD Gross Profit'      W$BAR.YMEMO = "YTD Gross Profit"      SALES.AMTS=REC<69>   CASE WIDGET.USER.DATA(1) = 'MARGIN'      VAL.TYPE='%'      W$TITLE='YTD Margin %'      W$BAR.YMEMO = "Margin %"      SALES.AMTS=REC<39>   CASE WIDGET.USER.DATA(1) = 'PARTS$'      W$TITLE='YTD Parts Revenue ($)'      W$BAR.YMEMO = "Parts Revenue ($)"      SALES.AMTS=REC<40>      DRILLDOWN.WIDGET='DEMO SALE TYPES PIE'      DRILLDOWN.TYPE='PARTS'   CASE WIDGET.USER.DATA(1) = 'SERVICES$'      W$TITLE='YTD Services Revenue ($)'      W$BAR.YMEMO = "Services Revenue ($)"      SALES.AMTS=REC<42>      DRILLDOWN.WIDGET='DEMO SALE TYPES PIE'      DRILLDOWN.TYPE='SERVICES'END CASE*YEARS=REC<38>MAX.YEARS=DCOUNT(YEARS,CHAR(253))**MAX.SALES.AMT=0N=0FIRST.YEAR=''FOR NN = 1 TO MAX.YEARS   SALES.AMT=SUM(SALES.AMTS<1,NN>)   BEGIN CASE      CASE VAL.TYPE = '$'         SALES.AMT=OCONV(SALES.AMT,'MD02')      CASE VAL.TYPE = '%'         SALES.AMT=OCONV(SALES.AMT,'MD01')      CASE 1         NULL   END CASE  IF SALES.AMT THEN     N+=1     IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT     W$BAR.VALUES<1,N> = SALES.AMT     YEAR=YEARS<1,NN>     IF DRILLDOWN.TYPE <> '' THEN        W$FW.DD.WIDGET<1,N>=DRILLDOWN.WIDGET        W$FW.DD.UD.POS<1,N,1>=1        W$FW.DD.UD.VAL<1,N,1>=YEAR        W$FW.DD.UD.POS<1,N,2>=2        W$FW.DD.UD.VAL<1,N,2>=DRILLDOWN.TYPE      END     IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR     CURRENT.YEAR=YEAR     W$BAR.XLABELS<1,N> = YEAR   ENDNEXT NNW$BAR.XMEMO = "Year"IF DRILLDOWN.TYPE <> '' THEN   W$BAR.XMEMO := " (drilldown for detail)" ENDW$BAR.CAPTION=W$BAR.YMEMO:' From ':FIRST.YEAR:' to ':CURRENT.YEARIF VAL.TYPE = '$' THEN   * ROUND MAX AMOUNT UP TO THE NEXT 250000   MAX.SALES.AMT+=250000   MAX.SALES.AMT=INT(MAX.SALES.AMT/250000) * 250000   W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'   W$CHART.OPTIONS<-1>='decimals="2"'   W$CHART.OPTIONS<-1>='DecimalPrecision="2"'   W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'   W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'   W$CHART.OPTIONS<-1>='formatNumberScale="1"' ENDIF VAL.TYPE = '%' THEN   W$CHART.OPTIONS<-1>='decimals="1"'   W$CHART.OPTIONS<-1>='forceDecimals="1"' ENDRETURN00B526SUB.PORTAL.SALES.REPORTS0c2SUBROUTINE SUB.PORTAL.SALES.REPORTS** DEFINE PARAMETERS FOR PORTAL SALES REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOPDIM SETUP.PARAMS(25)*W$TITLE = "Portal Sales Reports"; CALL PORTAL.SHOW.LAST.UPDATED('SALES')W$TYPE = "HTML"W$WIDTH = 3D3=1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEW$BAR.COLORS<1,5>=COLOR$YELLOWALF.MONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'EQUATE REPORT.TYPE TO WIDGET.USER.DATA(1)*IF REPORT.TYPE = '' THEN REPORT.TYPE='MTD Sales'*OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE    ERROR.MSG='UNABLE TO OPEN MVDB.CONTROL'   GOTO DISPLAY.ERROR ENDOPEN '','DASHBOARD.CLOSING.STATS' TO FI.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' ENDEQUATE ACCOUNT TO SETUP.PARAMS(1)EQUATE REPORT.FILE TO SETUP.PARAMS(2)EQUATE SALE.DATE.DICT TO SETUP.PARAMS(3)EQUATE SALE.MONTH.DICT TO SETUP.PARAMS(4)EQUATE SALE.YEAR.DICT TO SETUP.PARAMS(5)EQUATE SALE.AMOUNT.DICT TO SETUP.PARAMS(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO SETUP.PARAMS(7)EQUATE SALESMAN.DICT TO SETUP.PARAMS(8)EQUATE BRANCH.DICT TO SETUP.PARAMS(9)EQUATE REGION.DICT TO SETUP.PARAMS(10)EQUATE SALE.DATE.AMC TO SETUP.PARAMS(11)EQUATE SALE.AMOUNT.AMC TO SETUP.PARAMS(12)EQUATE SALE.AMOUNT.CONV TO SETUP.PARAMS(13)EQUATE SALE.AMOUNT.COOR TO SETUP.PARAMS(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO SETUP.PARAMS(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO SETUP.PARAMS(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO SETUP.PARAMS(17)EQUATE SALESMAN.AMC TO SETUP.PARAMS(18)EQUATE SALESMAN.TFILE TO SETUP.PARAMS(19)EQUATE BRANCH.AMC TO SETUP.PARAMS(20)EQUATE BRANCH.TFILE TO SETUP.PARAMS(21)EQUATE REGION.AMC TO SETUP.PARAMS(22)EQUATE REGION.TFILE TO SETUP.PARAMS(23)*READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='MD'END CASEOPEN '',MD.FILE.NAME TO FI.MD ELSE   ERROR.MSG='UNABLE TO OPEN ':MD.FILE.NAME   GOTO DISPLAY.ERROR END*IF ACCOUNT = '' OR REPORT.FILE = '' OR SALE.DATE.DICT = '' OR SALE.AMOUNT.DICT = '' THEN   ERROR.MSG='SALES FILE ACCOUNT, SALES FILE NAME, DATE OF SALE, AND AMOUNT OF SALE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'   GOTO DISPLAY.ERROR END*SALES.FILE.PATH='SALES.FILE.PATH'OPEN '',SALES.FILE.PATH TO FI.SALES.FILE.PATH ELSE**   EXECUTE "SET-FILE ":ACCOUNT:" ":REPORT.FILE CAPTURING DUMMY   QFILE.NAME=SALES.FILE.PATH   CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.SALES.FILE.PATH)   IF QFILE.NAME = '' THEN      MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'      GOTO DISPLAY.ERROR    END**    IF PLATFORM = 'UD' THEN**       QFILE.NAME='SALES.FILE.PATH'**       CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.SALES.FILE.PATH)**       IF QFILE.NAME = '' THEN**          ERROR.MSG='UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT'**          GOTO DISPLAY.ERROR**        END**     END ELSE**    **   READ MD.QFILE FROM FI.MD, 'QFILE' ELSE**    **      ERROR.MSG='UNABLE TO CREATE QFILE TO SALES FILE'**    **      GOTO DISPLAY.ERROR**    **    END**       MD.QFILE='Q'**       MD.QFILE<2>=ACCOUNT**       MD.QFILE<3>=REPORT.FILE**       WRITE MD.QFILE ON FI.MD, 'SALES.FILE.PATH'**       OPEN '','SALES.FILE.PATH' TO FI.SALES.FILE.PATH ELSE**          ERROR.MSG='UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT'**          GOTO DISPLAY.ERROR**        END**     END   EXECUTE "CREATE-INDEX SALES.FILE.PATH ":SALE.DATE.DICT CAPTURING DUMMY END*W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'*OTODAY=OCONV(DATE(),'D4-')*BEGIN CASE   CASE REPORT.TYPE = 'MTD Sales'; GOSUB MTD.SALES   CASE REPORT.TYPE = 'YTD Sales'; GOSUB YTD.SALES   CASE REPORT.TYPE = 'Year to Year Sales and GP'; GOSUB YEAR.TO.YEAR.SALES   CASE REPORT.TYPE = 'Year to Year Sales by Month'; GOSUB YEAR.TO.YEAR.SALES.BY.MONTH   CASE REPORT.TYPE = 'Year to Year GP by Month'; GOSUB YEAR.TO.YEAR.GP.BY.MONTH   CASE REPORT.TYPE = 'MTD Sales by Salesman'; GOSUB MTD.SALES.BY.SALESMAN   CASE REPORT.TYPE = 'YTD Sales by Salesman'; GOSUB YTD.SALES.BY.SALESMAN   CASE REPORT.TYPE = 'Year to Year Sales by Salesman'; GOSUB YEAR.TO.YEAR.BY.SALESMAN   CASE REPORT.TYPE = 'Year to Year GP by Salesman'; GOSUB YEAR.TO.YEAR.GP.BY.SALESMAN   CASE REPORT.TYPE = 'MTD Sales by Branch'; GOSUB MTD.SALES.BY.BRANCH   CASE REPORT.TYPE = 'YTD Sales by Branch'; GOSUB YTD.SALES.BY.BRANCH   CASE REPORT.TYPE = 'Year to Year Sales by Branch'; GOSUB YEAR.TO.YEAR.BY.BRANCH   CASE REPORT.TYPE = 'Year to Year GP by Branch'; GOSUB YEAR.TO.YEAR.GP.BY.BRANCH   CASE REPORT.TYPE = 'MTD Sales by Region'; GOSUB MTD.SALES.BY.REGION   CASE REPORT.TYPE = 'YTD Sales by Region'; GOSUB YTD.SALES.BY.REGION   CASE REPORT.TYPE = 'Year to Year Sales by Region'; GOSUB YEAR.TO.YEAR.BY.REGION   CASE REPORT.TYPE = 'Year to Year GP by Region'; GOSUB YEAR.TO.YEAR.GP.BY.REGIONEND CASE*W$INPUT.PROMPT<1> = "Report Type"W$INPUT.TYPE<1> = "SELECT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = REPORT.TYPESELOPTS='MTD Sales'SELOPTS<1,-1>='YTD Sales'SELOPTS<1,-1>='Year to Year Sales and GP'SELOPTS<1,-1>='Year to Year Sales by Month'SELOPTS<1,-1>='Year to Year GP by Month'SELOPTS<1,-1>='MTD Sales by Salesman'SELOPTS<1,-1>='YTD Sales by Salesman'SELOPTS<1,-1>='Year to Year Sales by Salesman'SELOPTS<1,-1>='Year to Year GP by Salesman'IF BRANCH.DICT <> '' THEN   SELOPTS<1,-1>='MTD Sales by Branch'   SELOPTS<1,-1>='YTD Sales by Branch'   SELOPTS<1,-1>='Year to Year Sales by Branch'   SELOPTS<1,-1>='Year to Year GP by Branch' ENDIF REGION.DICT <> '' THEN   SELOPTS<1,-1>='MTD Sales by Region'   SELOPTS<1,-1>='YTD Sales by Region'   SELOPTS<1,-1>='Year to Year Sales by Region'   SELOPTS<1,-1>='Year to Year GP by Region' ENDW$INPUT.SELOPTS=SELOPTSW$INPUT.SELVALS=SELOPTSRETURN*DISPLAY.ERROR:*W$HTML.DATA='<h3>':ERROR.MSG:'</h3>'RETURN*MTD.SALES:*GET.REPORT.TYPE='SALES'; GOSUB GET.CURRENT.REPORTIF REPORT.STATS.REC[1,5] = 'ERROR' OR REPORT.STATS.REC<1> = '' THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Date"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'DATES=REPORT.STATS.REC<1>NUM.DATES=DCOUNT(DATES,CHAR(253))AMOUNTS=REPORT.STATS.REC<2>SUM.AMOUNTS=SUM(AMOUNTS)COST.OF.SALES=REPORT.STATS.REC<3>SUM.COST.OF.SALES=SUM(COST.OF.SALES)SUM.GROSS.PROFIT=SUM.AMOUNTS-SUM.COST.OF.SALESW$BAR.YMEMO='Total Sales and Gross Profits'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM.AMOUNTS,'MD2,$'):" and Gross Profit of ":OCONV(SUM.GROSS.PROFIT,'MD2,$'):" by Date"IF NUM.DATES > 20 THEN   W$TYPE='FCMSBAR2D'   START.CNTR=NUM.DATES   END.CNTR=1   STEP.CNTR=(-1) END ELSE   W$TYPE='FCMSCOLUMN2D'   START.CNTR=1   END.CNTR=NUM.DATES   STEP.CNTR=1 ENDVALUE.CNTR=0FOR AMT.CNTR = START.CNTR TO END.CNTR STEP STEP.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT THEN      COST.OF.SALE=COST.OF.SALES<1,AMT.CNTR>      GROSS.PROFIT=AMOUNT-COST.OF.SALE      IF GROSS.PROFIT < 0 THEN GROSS.PROFIT=0      VALUE.CNTR+=1      ROW.DATE=ICONV(DATES<1,AMT.CNTR>,'D')      ROW.DATE=OCONV(ROW.DATE,'D0')      W$BAR.XLABELS<1,VALUE.CNTR>=ROW.DATE      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE DATES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYYMM BREAK-ON YYYYMM PIPE DET-SUPP TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Month"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'MONTHS=''MONTH.CNTR=0LAST.MONTH=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      MONTH=TRIM(FIELD(ROW,'|',1))[5,2]+0      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      GROSS.PROFIT=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         IF MONTH <> LAST.MONTH THEN            LAST.MONTH=MONTH            MONTH.CNTR+=1            MONTHS<1,MONTH.CNTR>=MONTH            AMOUNTS<1,MONTH.CNTR>=0            GROSS.PROFITS<1,MONTH.CNTR>=0          END         AMOUNTS<1,MONTH.CNTR>+=AMOUNT         GROSS.PROFITS<1,MONTH.CNTR>+=GROSS.PROFIT       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):"  And Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" By Month"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))W$TYPE='FCMSCOLUMN2D'VALUE.CNTR=0FOR AMT.CNTR = 1 TO YTD.MO   AMOUNT=AMOUNTS<1,AMT.CNTR>   GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>   IF AMOUNT > 0 AND GROSS.PROFIT >= 0 THEN      VALUE.CNTR+=1      MONTH=FIELD(ALF.MONTHS,',',AMT.CNTR)      W$BAR.XLABELS<1,VALUE.CNTR>=MONTH      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTRRETURN*YEAR.TO.YEAR.SALES:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSCOLUMN2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYY BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'YEAR.TO.YEAR.REPORT'YEAR.TOTALS=''YEAR.GROSS.PROFITS=''YEARS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))YEAR.CNTR=0FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YEAR=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         IF AMOUNT OR GROSS.PROFIT THEN            YEAR.CNTR+=1            YEARS<YEAR.CNTR>=YEAR            AMOUNT=ICONV(AMOUNT,'MD2')            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            YEAR.TOTALS<YEAR.CNTR>=AMOUNT            YEAR.GROSS.PROFITS<YEAR.CNTR>=GROSS.PROFIT          END       END    ENDNEXT ROW.NO*W$BAR.CAPTION = "Sales and Gross Profit by Year"W$BAR.XMEMO = "Year"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'W$BAR.YMEMO = "Total Sales and Gross Profit"*MAX.YEARS=DCOUNT(YEARS,CHAR(254))FOR YEAR.NO = 1 TO MAX.YEARS   YEAR.TOTAL=YEAR.TOTALS<YEAR.NO>   YEAR.GROSS.PROFIT=YEAR.GROSS.PROFITS<YEAR.NO>   W$BAR.VALUES<1,YEAR.NO>=OCONV(YEAR.TOTAL+0,'MD2')   W$BAR.VALUES<2,YEAR.NO>=OCONV(YEAR.GROSS.PROFIT+0,'MD2')   W$BAR.XLABELS<1,YEAR.NO>=YEARS<YEAR.NO> NEXT YEAR.NORETURN*YEAR.TO.YEAR.SALES.BY.MONTH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSCOLUMN2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYYMM BREAK-ON YYYYMM PIPE TOTAL AMOUNT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.MO.TOTALS=''YEAR.NO=1MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YYYYMM=TRIM(FIELD(ROW,'|',1))      YEAR=YYYYMM[1,4]      MO.NO=YYYYMM[5,2]+0      AMOUNT=TRIM(FIELD(ROW,'|',2))      IF YEAR <> '' AND MO.NO AND NUM(AMOUNT) THEN         YEAR.NO=YEAR-FIRST.YEAR+1         IF AMOUNT THEN            AMOUNT=ICONV(AMOUNT,'MD2')            YEAR.MO.TOTALS<YEAR.NO,MO.NO>+=AMOUNT          END       END    END NEXT ROW.NO*FOR I = 0 TO 4   W$BAR.LABELS<I+1> = FIRST.YEAR+I   W$BAR.LABEL.OPTS<I+1> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Monthly Sales by Year"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Sales"*FOR MO.NO = 1 TO 12   FOR YEAR.NO = 1 TO 5      W$BAR.VALUES<YEAR.NO,MO.NO>=OCONV(YEAR.MO.TOTALS<YEAR.NO,MO.NO>+0,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,MO.NO>=FIELD(ALF.MONTHS,',',MO.NO) NEXT MO.NORETURN*YEAR.TO.YEAR.GP.BY.MONTH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSCOLUMN2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYYMM BREAK-ON YYYYMM PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.MO.TOTALS=''YEAR.NO=1MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YYYYMM=TRIM(FIELD(ROW,'|',1))      YEAR=YYYYMM[1,4]      MO.NO=YYYYMM[5,2]+0      GROSS.PROFIT=TRIM(FIELD(ROW,'|',2))      IF YEAR <> '' AND MO.NO AND NUM(GROSS.PROFIT) THEN         YEAR.NO=YEAR-FIRST.YEAR+1         IF GROSS.PROFIT THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            YEAR.MO.TOTALS<YEAR.NO,MO.NO>+=GROSS.PROFIT          END       END    END NEXT ROW.NO*FOR I = 0 TO 4   W$BAR.LABELS<I+1> = FIRST.YEAR+I   W$BAR.LABEL.OPTS<I+1> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Monthly Gross Profit by Year"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Gross Profit"*FOR MO.NO = 1 TO 12   FOR YEAR.NO = 1 TO 5      W$BAR.VALUES<YEAR.NO,MO.NO>=OCONV(YEAR.MO.TOTALS<YEAR.NO,MO.NO>+0,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,MO.NO>=FIELD(ALF.MONTHS,',',MO.NO) NEXT MO.NORETURN*MTD.SALES.BY.SALESMAN:**OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':SALESMAN.DICT:' BREAK-ON ':SALESMAN.DICT:' PIPE TOTAL ':SALE.AMOUNT.DICT:' PIPE TOTAL ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Salesman"SALESMEN=''SALESMAN.CNTR=0LAST.SALESMAN=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      SALESMAN=TRIM(FIELD(ROW,'|',1))      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      COST.OF.SALE=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(COST.OF.SALE) THEN         IF AMOUNT > 0 THEN            IF SALESMAN <> LAST.SALESMAN THEN               LAST.SALESMAN=SALESMAN               SALESMAN.CNTR+=1               SALESMEN<1,SALESMAN.CNTR>=SALESMAN               AMOUNTS<1,SALESMAN.CNTR>=0               GROSS.PROFITS<1,SALESMAN.CNTR>=0             END            GROSS.PROFIT=AMOUNT-COST.OF.SALE            AMOUNTS<1,SALESMAN.CNTR>+=AMOUNT            GROSS.PROFITS<1,SALESMAN.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profits of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Salesman"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))IF SALESMAN.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * SALESMAN.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDW$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'VALUE.CNTR=0FOR AMT.CNTR = 1 TO NUM.AMOUNTS   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT > 0 THEN      GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>      VALUE.CNTR+=1      SALESMAN=SALESMEN<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=SALESMAN      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE SALESMEN:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES.BY.SALESMAN:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY SALESMAN BREAK-ON SALESMAN PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Salesman"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'SALESMEN=''SALESMAN.CNTR=0LAST.SALESMAN=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      SALESMAN=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         AMOUNT=ICONV(AMOUNT,'MD2')         IF AMOUNT > 0 THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            IF SALESMAN <> LAST.SALESMAN THEN               LAST.SALESMAN=SALESMAN               SALESMAN.CNTR+=1               SALESMEN<1,SALESMAN.CNTR>=SALESMAN               AMOUNTS<1,SALESMAN.CNTR>=0               GROSS.PROFITS<1,SALESMAN.CNTR>=0             END            AMOUNTS<1,SALESMAN.CNTR>+=AMOUNT            GROSS.PROFITS<1,SALESMAN.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Salesman"IF SALESMAN.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * SALESMAN.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDVALUE.CNTR=0FOR AMT.CNTR = 1 TO SALESMAN.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>   IF AMOUNT THEN      VALUE.CNTR+=1      SALESMAN=SALESMEN<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=SALESMAN      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTRRETURN*YEAR.TO.YEAR.BY.SALESMAN:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY SALESMAN BY YYYY BREAK-ON SALESMAN PIPE BREAK-ON YYYY PIPE TOTAL AMOUNT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.SALESMAN.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))SALESMEN=''SALESMEN.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   NUM.PIPES=COUNT(ROW,'|')   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      SALESMAN=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND SALESMAN <> '' THEN; *      IF SALESMAN <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE SALESMAN IN SALESMEN SETTING SALESMAN.POS ELSE               SALESMEN.CNTR+=1               SALESMEN<SALESMEN.CNTR>=SALESMAN               SALESMAN.POS=SALESMEN.CNTR             END            YEAR.SALESMAN.TOTALS<SALESMAN.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            AMOUNT=TRIM(FIELD(ROW,'|',3))            IF NUM(AMOUNT) THEN               AMOUNT=ICONV(AMOUNT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=AMOUNT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Sales by Salesman"W$BAR.XMEMO = "Salesman"W$BAR.YMEMO = "Sales"W$CHART.HEIGHT = 200 + (70 * SALESMEN.CNTR)*FOR SALESMAN.NO = 1 TO SALESMEN.CNTR   FOR YEAR.NO = 1 TO 5      SALESMAN.YEAR.AMT=YEAR.SALESMAN.TOTALS<SALESMAN.NO,YEAR.NO>+0      IF SALESMAN.YEAR.AMT < 0 THEN SALESMAN.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,SALESMAN.NO>=OCONV(SALESMAN.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,SALESMAN.NO>=SALESMEN<SALESMAN.NO> NEXT SALESMAN.NORETURN*YEAR.TO.YEAR.GP.BY.SALESMAN:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY SALESMAN BY YYYY BREAK-ON SALESMAN PIPE BREAK-ON YYYY PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDWRITE STACKED.1:@AM:STACKED.2 ON FI.MVDB.SUBS, 'YEAR.TO.YEAR.CMND'WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.SALESMAN.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))SALESMEN=''SALESMEN.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      SALESMAN=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND SALESMAN <> '' THEN; *      IF SALESMAN <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE SALESMAN IN SALESMEN SETTING SALESMAN.POS ELSE               SALESMEN.CNTR+=1               SALESMEN<SALESMEN.CNTR>=SALESMAN               SALESMAN.POS=SALESMEN.CNTR             END            YEAR.SALESMAN.TOTALS<SALESMAN.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))            IF NUM(GROSS.PROFIT) THEN               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=GROSS.PROFIT             END          END       END    ENDWRITE SALESMEN ON FI.MVDB.SUBS, 'SALESMEN'WRITE YEAR.SALESMAN.TOTALS ON FI.MVDB.SUBS, 'YEAR.SALESMAN.TOTALS'WRITE YEAR.TOTALS ON FI.MVDB.SUBS, 'YEAR.TOTALS' NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Gross Profit by Salesman"W$BAR.XMEMO = "Salesman"W$BAR.YMEMO = "Gross Profit"W$CHART.HEIGHT = 200 + (70 * SALESMEN.CNTR)*FOR SALESMAN.NO = 1 TO SALESMEN.CNTR   FOR YEAR.NO = 1 TO 5      SALESMAN.YEAR.AMT=YEAR.SALESMAN.TOTALS<SALESMAN.NO,YEAR.NO>+0      IF SALESMAN.YEAR.AMT < 0 THEN SALESMAN.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,SALESMAN.NO>=OCONV(SALESMAN.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,SALESMAN.NO>=SALESMEN<SALESMAN.NO> NEXT SALESMAN.NORETURN**MTD.SALES.BY.BRANCH:**OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':BRANCH.DICT:' BREAK-ON ':BRANCH.DICT:' PIPE TOTAL ':SALE.AMOUNT.DICT:' PIPE TOTAL ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Branch"BRANCHES=''BRANCH.CNTR=0LAST.BRANCH=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      BRANCH=TRIM(FIELD(ROW,'|',1))      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      COST.OF.SALE=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(COST.OF.SALE) THEN         IF AMOUNT > 0 THEN            IF BRANCH <> LAST.BRANCH THEN               LAST.BRANCH=BRANCH               BRANCH.CNTR+=1               BRANCHES<1,BRANCH.CNTR>=BRANCH               AMOUNTS<1,BRANCH.CNTR>=0               GROSS.PROFITS<1,BRANCH.CNTR>=0             END            GROSS.PROFIT=AMOUNT-COST.OF.SALE            AMOUNTS<1,BRANCH.CNTR>+=AMOUNT            GROSS.PROFITS<1,BRANCH.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Branch"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))IF BRANCH.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * BRANCH.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDW$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'VALUE.CNTR=0FOR AMT.CNTR = 1 TO NUM.AMOUNTS   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT > 0 THEN      GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>      VALUE.CNTR+=1      BRANCH=BRANCHES<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=BRANCH      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE BRANCHES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES.BY.BRANCH:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY BRANCH BREAK-ON BRANCH PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Branch"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'BRANCHES=''BRANCH.CNTR=0LAST.BRANCH=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      BRANCH=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         AMOUNT=ICONV(AMOUNT,'MD2')         IF AMOUNT > 0 THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            IF BRANCH <> LAST.BRANCH THEN               LAST.BRANCH=BRANCH               BRANCH.CNTR+=1               BRANCHES<1,BRANCH.CNTR>=BRANCH               AMOUNTS<1,BRANCH.CNTR>=0               GROSS.PROFITS<1,BRANCH.CNTR>=0             END            AMOUNTS<1,BRANCH.CNTR>+=AMOUNT            GROSS.PROFITS<1,BRANCH.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Branch"IF BRANCH.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * BRANCH.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDVALUE.CNTR=0FOR AMT.CNTR = 1 TO BRANCH.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT THEN      VALUE.CNTR+=1      BRANCH=BRANCHES<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=BRANCH      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFITS<1,AMT.CNTR>,'MD2')    END NEXT AMT.CNTR**WRITE DATES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'YTD.SALES.TEST'RETURN*YEAR.TO.YEAR.BY.BRANCH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY BRANCH BY YYYY BREAK-ON BRANCH PIPE BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.BRANCH.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))BRANCHES=''BRANCHES.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      BRANCH=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND BRANCH <> '' THEN; *      IF BRANCH <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE BRANCH IN BRANCHES SETTING BRANCH.POS ELSE               BRANCHES.CNTR+=1               BRANCHES<BRANCHES.CNTR>=BRANCH               BRANCH.POS=BRANCHES.CNTR             END            YEAR.BRANCH.TOTALS<BRANCH.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            AMOUNT=TRIM(FIELD(ROW,'|',3))            GROSS.PROFIT=TRIM(FIELD(ROW,'|',4))            IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN               AMOUNT=ICONV(AMOUNT,'MD2')               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=AMOUNT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Sales by Branch"W$BAR.XMEMO = "Branch"W$BAR.YMEMO = "Total Sales and Gross Profit"W$CHART.HEIGHT = 200 + (50 * BRANCHES.CNTR)*FOR BRANCH.NO = 1 TO BRANCHES.CNTR   FOR YEAR.NO = 1 TO 5      BRANCH.YEAR.AMT=YEAR.BRANCH.TOTALS<BRANCH.NO,YEAR.NO>+0      IF BRANCH.YEAR.AMT < 0 THEN BRANCH.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,BRANCH.NO>=OCONV(BRANCH.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,BRANCH.NO>=BRANCHES<BRANCH.NO> NEXT BRANCH.NORETURN*YEAR.TO.YEAR.GP.BY.BRANCH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY BRANCH BY YYYY BREAK-ON BRANCH PIPE BREAK-ON YYYY PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.BRANCH.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))BRANCHES=''BRANCHES.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      BRANCH=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND BRANCH <> '' THEN; *      IF BRANCH <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE BRANCH IN BRANCHES SETTING BRANCH.POS ELSE               BRANCHES.CNTR+=1               BRANCHES<BRANCHES.CNTR>=BRANCH               BRANCH.POS=BRANCHES.CNTR             END            YEAR.BRANCH.TOTALS<BRANCH.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))            IF NUM(GROSS.PROFIT) THEN               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=GROSS.PROFIT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Gross Profit by Branch"W$BAR.XMEMO = "Branch"W$BAR.YMEMO = "Gross Profit"W$CHART.HEIGHT = 200 + (70 * BRANCHES.CNTR)*FOR BRANCH.NO = 1 TO BRANCHES.CNTR   FOR YEAR.NO = 1 TO 5      BRANCH.YEAR.AMT=YEAR.BRANCH.TOTALS<BRANCH.NO,YEAR.NO>+0      IF BRANCH.YEAR.AMT < 0 THEN BRANCH.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,BRANCH.NO>=OCONV(BRANCH.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,BRANCH.NO>=BRANCHES<BRANCH.NO> NEXT BRANCH.NORETURN*MTD.SALES.BY.REGION:**OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':REGION.DICT:' BREAK-ON ':REGION.DICT:' PIPE TOTAL ':SALE.AMOUNT.DICT:' PIPE TOTAL ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "REGION"REGIONS=''REGION.CNTR=0LAST.REGION=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      REGION=TRIM(FIELD(ROW,'|',1))      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      COST.OF.SALE=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(COST.OF.SALE) THEN         IF AMOUNT > 0 THEN            IF REGION <> LAST.REGION THEN               LAST.REGION=REGION               REGION.CNTR+=1               REGIONS<1,REGION.CNTR>=REGION               AMOUNTS<1,REGION.CNTR>=0               GROSS.PROFITS<1,REGION.CNTR>=0             END            GROSS.PROFIT=AMOUNT-COST.OF.SALE            AMOUNTS<1,REGION.CNTR>+=AMOUNT            GROSS.PROFITS<1,REGION.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Region"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))IF REGION.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * REGION.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDW$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'VALUE.CNTR=0FOR AMT.CNTR = 1 TO NUM.AMOUNTS   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT > 0 THEN      GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>      VALUE.CNTR+=1      REGION=REGIONS<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=REGION      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE REGIONS:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES.BY.REGION:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY REGION BREAK-ON REGION PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Region"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'REGIONS=''REGION.CNTR=0LAST.REGION=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      REGION=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         AMOUNT=ICONV(AMOUNT,'MD2')         IF AMOUNT > 0 THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            IF REGION <> LAST.REGION THEN               LAST.REGION=REGION               REGION.CNTR+=1               REGIONS<1,REGION.CNTR>=REGION               AMOUNTS<1,REGION.CNTR>=0               GROSS.PROFITS<1,REGION.CNTR>=0             END            AMOUNTS<1,REGION.CNTR>+=AMOUNT            GROSS.PROFITS<1,REGION.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Region"IF REGION.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * REGION.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDVALUE.CNTR=0FOR AMT.CNTR = 1 TO REGION.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT THEN      VALUE.CNTR+=1      REGION=REGIONS<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=REGION      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFITS<1,AMT.CNTR>,'MD2')    END NEXT AMT.CNTR**WRITE DATES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'YTD.SALES.TEST'RETURN**YEAR.TO.YEAR.BY.REGION:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY REGION BY YYYY BREAK-ON REGION PIPE BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.REGION.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))REGIONS=''REGIONS.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      REGION=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND REGION <> '' THEN; *      IF REGION <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE REGION IN REGIONS SETTING REGION.POS ELSE               REGIONS.CNTR+=1               REGIONS<REGIONS.CNTR>=REGION               REGION.POS=REGIONS.CNTR             END            YEAR.REGION.TOTALS<REGION.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            AMOUNT=TRIM(FIELD(ROW,'|',3))            IF NUM(AMOUNT) THEN               AMOUNT=ICONV(AMOUNT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=AMOUNT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Sales by Region"W$BAR.XMEMO = "Region"W$BAR.YMEMO = "Sales"W$CHART.HEIGHT = 200 + (50 * REGIONS.CNTR)*FOR REGION.NO = 1 TO REGIONS.CNTR   FOR YEAR.NO = 1 TO 5      REGION.YEAR.AMT=YEAR.REGION.TOTALS<REGION.NO,YEAR.NO>+0      IF REGION.YEAR.AMT < 0 THEN REGION.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,REGION.NO>=OCONV(REGION.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,REGION.NO>=REGIONS<REGION.NO> NEXT REGION.NORETURN*YEAR.TO.YEAR.GP.BY.REGION:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY REGION BY YYYY BREAK-ON REGION PIPE BREAK-ON YYYY PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.REGION.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))REGIONS=''REGIONS.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      REGION=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND REGION <> '' THEN; *      IF REGION <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE REGION IN REGIONS SETTING REGION.POS ELSE               REGIONS.CNTR+=1               REGIONS<REGIONS.CNTR>=REGION               REGION.POS=REGIONS.CNTR             END            YEAR.REGION.TOTALS<REGION.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))            IF NUM(GROSS.PROFIT) THEN               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=GROSS.PROFIT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Gross Profit by Region"W$BAR.XMEMO = "Region"W$BAR.YMEMO = "Gross Profit"W$CHART.HEIGHT = 200 + (70 * REGIONS.CNTR)*FOR REGION.NO = 1 TO REGIONS.CNTR   FOR YEAR.NO = 1 TO 5      REGION.YEAR.AMT=YEAR.REGION.TOTALS<REGION.NO,YEAR.NO>+0      IF REGION.YEAR.AMT < 0 THEN REGION.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,REGION.NO>=OCONV(REGION.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,REGION.NO>=REGIONS<REGION.NO> NEXT REGION.NORETURN*VERIFY.CURRENT.DATA:*READ LAST.UPDATE FROM FI.DICT.DASHBOARD.CLOSING.STATS, '*LAST.UPDATE' ELSE LAST.UPDATE=0READ LAST.UPDATED FROM FI.DICT.DASHBOARD.CLOSING.STATS, '*LAST.UPDATED' ELSE LAST.UPDATED=0CUR.DATE=DATE(); CUR.TIME=TIME()CUR.TIME=FIELD(CUR.TIME,'.',1)LEN.CUR.TIME=LEN(CUR.TIME)CUR.TIME=STR('0',5-LEN.CUR.TIME):CUR.TIMECUR.DATE.TIME=CUR.DATE:CUR.TIMEDELTA.DATE.TIME=CUR.DATE.TIME-LAST.UPDATEDIF DELTA.DATE.TIME > 900 THEN   * REFRESH EVERY 15 MINUTES   LAST.UPDATED='UPDATING'   BEGIN CASE      CASE PLATFORM = 'D3' OR PLATFORM = 'JB'         EXECUTE "Z REFRESH.DASHBOARD.CLOSING.STATS" CAPTURING DUMMY      CASE 1         EXECUTE "PHANTOM REFRESH.DASHBOARD.CLOSING.STATS" CAPTURING DUMMY   END CASE ENDIF NOT(NUM(LAST.UPDATE)) THEN   IF INDEX(LAST.UPDATE,'UPDATING',1) THEN      LAST.UPDATE='Figures are currently updating.'      LAST.UPDATE<-1>='Try again in a couple of minutes.'    END   MAX.LINES=DCOUNT(LAST.UPDATE,CHAR(254))   ERROR.MSG=''   FOR I = 1 TO MAX.LINES      THIS.MSG=LAST.UPDATE<I>      IF ERROR.MSG <> '' THEN ERROR.MSG:='<br>'      ERROR.MSG:=THIS.MSG    NEXT I   RETURN TO DISPLAY.ERROR ENDRETURN*GET.CURRENT.REPORT:*BEGIN CASE   CASE GET.REPORT.TYPE = 'SALES'       FI.DICT=FI.DICT.DASHBOARD.CLOSING.STATS       LAST.DATE.INDICATOR='*LAST.UPDATE.SALES'       REPORT.STATS.ID='*CURRENT.SALES.STATS'END CASE*** IF MORE THAN 10 MINUTES SINCE LAST UPDATE THEN REFRESH DATA*RECALC.REQUESTED=0DATA.CURRENT=0LOOP   READ LAST.UPDATE FROM FI.DICT, LAST.DATE.INDICATOR ELSE LAST.UPDATE=''   IF NUM(LAST.UPDATE) THEN      CUR.TIME=OCONV(TIME(),'MT')      CONVERT ':' TO '' IN CUR.TIME      CUR.DATE.TIME=DATE():CUR.TIME      LAST.UPDATE.DELTA=CUR.DATE.TIME - LAST.UPDATE      IF LAST.UPDATE.DELTA < 10 THEN DATA.CURRENT=1    ENDUNTIL DATA.CURRENT DO   IF NUM(LAST.UPDATE) THEN      IF NOT(RECALC.REQUESTED) THEN         BEGIN CASE            CASE PLATFORM = 'D3' OR PLATFORM = 'JB'               EXECUTE "Z REFRESH.DASHBOARD.MTD.STATS ":REPORT.TYPE CAPTURING DUMMY            CASE 1               EXECUTE "PHANTOM REFRESH.DASHBOARD.MTD.STATS ":REPORT.TYPE CAPTURING DUMMY         END CASE         RECALC.REQUESTED=1       END    END   SLEEP 2REPEATREAD REPORT.STATS.REC FROM FI.DICT, REPORT.STATS.ID ELSE REPORT.STATS.REC=''WRITE REPORT.STATS.REC ON FI.MVDB.SUBS, 'REPORT.STATS.REC'RETURNEND0051AFREFRESH.DASHBOARD.MTD.STATS0c2** PHANTOM PROGRAM TO CALCULATE MTD SALES, AR, AP, AND NET INCOME NUMBERS*OPEN.ERRORS=''OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE OPEN.ERRORS:=' MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'DIM SETUP.PARAMS(25)IF PLATFORM = 'D3' THEN CMND=SENTENCE() ELSE CMND=@SENTENCECMND=TRIM(CMND)OPTION.PARAM=FIELD(CMND,' ',DCOUNT(CMND,' '))IF OPTION.PARAM = 'SALES' OR OPTION.PARAM = 'ALL' THEN   OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.CLOSING.STATS ELSE OPEN.ERRORS:=' DICT DASHBOARD.CLOSING.STATS' ENDIF OPTION.PARAM <> 'SALES' THEN   OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.BALANCES ELSE OPEN.ERRORS:=' DICT DASHBOARD.BALANCES' ENDEXECUTE "TERM 132,20000"*BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='MD'END CASEOPEN '',MD.FILE.NAME TO FI.MD ELSE   OPEN.ERRORS:=' ':MD.FILE.NAME ENDIF OPEN.ERRORS <> '' THEN STOP*DAYS.AGO.60=DATE()-60DAYS.AGO.1000=DATE()-1000ALL.GOOD=1BEGIN CASE   CASE OPTION.PARAM = 'SALES'; GOSUB CALC.SALES   CASE OPTION.PARAM = 'AR'; GOSUB CALC.AR   CASE OPTION.PARAM = 'AP'; GOSUB CALC.AP   CASE OPTION.PARAM = 'NET.INCOME'; GOSUB CALC.NET.INCOME   CASE OPTION.PARAM = 'ALL'      GOSUB CALC.SALES      GOSUB CALC.AR      GOSUB CALC.AP      GOSUB CALC.NET.INCOME      IF ALL.GOOD THEN         DICT.FILE=FI.DICT.BALANCES         TIME.STAMP.TYPE='ALL'         GOSUB UPDATE.TIME.STAMP       END   CASE 1; NULLEND CASESTOP*CALC.SALES:*DICT.FILE=FI.DICT.CLOSING.STATSMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' ENDEQUATE ACCOUNT TO SETUP.PARAMS(1)EQUATE REPORT.FILE TO SETUP.PARAMS(2)EQUATE SALE.DATE.DICT TO SETUP.PARAMS(3)EQUATE SALE.MONTH.DICT TO SETUP.PARAMS(4)EQUATE SALE.YEAR.DICT TO SETUP.PARAMS(5)EQUATE SALE.AMOUNT.DICT TO SETUP.PARAMS(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO SETUP.PARAMS(7)EQUATE SALESMAN.DICT TO SETUP.PARAMS(8)EQUATE BRANCH.DICT TO SETUP.PARAMS(9)EQUATE REGION.DICT TO SETUP.PARAMS(10)EQUATE SALE.DATE.AMC TO SETUP.PARAMS(11)EQUATE SALE.AMOUNT.AMC TO SETUP.PARAMS(12)EQUATE SALE.AMOUNT.CONV TO SETUP.PARAMS(13)EQUATE SALE.AMOUNT.COOR TO SETUP.PARAMS(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO SETUP.PARAMS(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO SETUP.PARAMS(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO SETUP.PARAMS(17)EQUATE SALESMAN.AMC TO SETUP.PARAMS(18)EQUATE SALESMAN.TFILE TO SETUP.PARAMS(19)EQUATE BRANCH.AMC TO SETUP.PARAMS(20)EQUATE BRANCH.TFILE TO SETUP.PARAMS(21)EQUATE REGION.AMC TO SETUP.PARAMS(22)EQUATE REGION.TFILE TO SETUP.PARAMS(23)OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'SALES.FILE.PATH='SALES.FILE.PATH'**IF PLATFORM = 'UD' THEN**   QFILE.NAME=SALES.FILE.PATH**   CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.QFILE)** END ELSE**   MD.QFILE='Q'**   MD.QFILE<2>=ACCOUNT**   MD.QFILE<3>=REPORT.FILE**   WRITE MD.QFILE ON FI.MD, 'SALES.FILE.PATH'** ENDQFILE.NAME=SALES.FILE.PATHCALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.QFILE)TIME.STAMP.TYPE='SALES'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':SALE.DATE.DICT:' ':SALE.DATE.DICT:' PIPE ':SALE.AMOUNT.DICT:' PIPE ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)WRITE STACKED.2 ON FI.MVDB.CONTROL, 'SALES.REPORT.CMND'WRITE REPORT ON FI.MVDB.CONTROL, 'SALES.REPORT.RESULT'IF NOT(SYSTEM.11) THEN   WRITE 'ERROR: NO SALES CLOSED SINCE BEGINNING OF MONTH' ON FI.DICT.CLOSING.STATS, '*CURRENT.SALES.STATS'   GOSUB UPDATE.TIME.STAMP   SALES.STATS=''**   RETURN** END END ELSE   DATES=''   DATE.CNTR=0   LAST.DATE=''   AMOUNTS=''   COSTS=''   MAX.ROWS=DCOUNT(REPORT,CHAR(254))   FOR ROW.NO = 1 TO MAX.ROWS      ROW=REPORT<ROW.NO>      IF INDEX(ROW,'|',1) THEN         ROW.DATE=TRIM(FIELD(ROW,'|',1))         AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')         COST=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')         IF NUM(AMOUNT) THEN            IF ROW.DATE <> LAST.DATE THEN               LAST.DATE=ROW.DATE               DATE.CNTR+=1               DATES<1,DATE.CNTR>=ROW.DATE               AMOUNTS<1,DATE.CNTR>=0               COSTS<1,DATE.CNTR>=0             END            AMOUNTS<1,DATE.CNTR>+=AMOUNT            COSTS<1,DATE.CNTR>+=COST          END       END    NEXT ROW.NO   VALUE.CNTR=0   SALES.STATS=''   FOR AMT.CNTR = 1 TO DATE.CNTR      COST=COSTS<1,AMT.CNTR>      AMOUNT=AMOUNTS<1,AMT.CNTR>      IF AMOUNT OR COST THEN         VALUE.CNTR+=1         ROW.DATE=ICONV(DATES<1,AMT.CNTR>,'D')         ROW.DATE=OCONV(ROW.DATE,'D0')         SALES.STATS<1,VALUE.CNTR>=ROW.DATE         SALES.STATS<2,VALUE.CNTR>=AMOUNT         SALES.STATS<3,VALUE.CNTR>=COST       END    NEXT AMT.CNTR ENDWRITE SALES.STATS ON DICT.FILE, '*CURRENT.SALES.STATS'*EXECUTE "REFRESH.DASHBOARD.CLOSING.STATS" CAPTURING DUMMY*GOSUB UPDATE.TIME.STAMPRETURN*CALC.AR:** PERIOD.AMOUNTS DATA LAYOUT* 1 PERIOD 1 AMOUNT* 2 PERIOS 2 AMOUNT* 3 PERIOD 3 AMOUNT* 4 PERIOD 4 AMOUNT* 5* 6 YEAR ] YEAR ] YEAR* 7 PERIOD 1 NUMBER \ PERIOD 2 NUMBER \ PERIOD 3 NUMBER \ PERIOD 4 NUMBER * 8 PERIOD 1 AMOUNT \ PERIOD 2 AMOUNT \ PERIOD 3 AMOUNT \ PERIOD 4 AMOUNT * 9 PERIOD 1 TOTAL DAYS ? PERIOD 2 TOTAL DAYS ? ETC* 10 YEAR 1 JAN # PAID\ FEB # PAID ... ] YEAR 2 JAN # PAID \* 11 YEAR 1 JAN # TOTAL DAYS \ FEB TOTAL DAYS ....* 12 CUSTOMER ] CUSTOMER ]* 13 CUSTOMER AMT DUE ] ] ]* 14 LARGEST DAYS DUE ] ] ]* 15 TOTAL DAYS LAST 1000 DAYS ] ] ]* 16 NUMBER OF ARS LAST 1000 DAYS ] ] ]* 17 TOTAL DAYS LAST 60 DAYS ] ] ]* 18 NUMBER OF ARS LAST 60 DAYS ] ] ]* 19 customers  ] ] ] for 50 highest amounts due* 20 amounts ] ] ] for 50 highest amounts due* 21 customers ] ] ] for 50 highest days due* 22 days due ] ] ] for 50 highest days due* 23 customer ] ] ] ] ] for 50 highest percent increase* 24 percentage increase from 1000 day average to 60 day average for highest 50**DICT.FILE=FI.DICT.BALANCESMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' END*EQUATE AR.ACCOUNT TO SETUP.PARAMS(1)EQUATE AR.REPORT.FILE TO SETUP.PARAMS(2)EQUATE AR.DUE.DATE.DICT TO SETUP.PARAMS(3)EQUATE AR.DATE.PAID.DICT TO SETUP.PARAMS(4)EQUATE AR.INVOICE.AMT.DICT TO SETUP.PARAMS(5)EQUATE AR.BALANCE.DICT TO SETUP.PARAMS(6)EQUATE AR.DUE.DATE.AMC TO SETUP.PARAMS(8)EQUATE AR.DATE.PAID.AMC TO SETUP.PARAMS(9)EQUATE AR.INVOICE.AMT.AMC TO SETUP.PARAMS(10)EQUATE AR.INVOICE.AMT.CONV TO SETUP.PARAMS(11)EQUATE AR.INVOICE.AMT.COOR TO SETUP.PARAMS(12)EQUATE AR.BALANCE.AMC TO SETUP.PARAMS(13)EQUATE AR.BALANCE.CONV TO SETUP.PARAMS(14)EQUATE AR.BALANCE.COOR TO SETUP.PARAMS(15)EQUATE AR.CUSTOMER.DICT TO SETUP.PARAMS(16)EQUATE AR.CUSTOMER.AMC TO SETUP.PARAMS(17)EQUATE AR.CUSTOMER.TFILE TO SETUP.PARAMS(18)*AR.FILE.PATH='AR.FILE.PATH'QFILE.NAME=AR.FILE.PATH**OPEN '',AR.FILE.PATH TO FI.AR.FILE.PATH ELSE**IF PLATFORM = 'UD' THEN**   QFILE.NAME=AR.FILE.PATH**   CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.AR.FILE.PATH)**   IF QFILE.NAME = '' THEN**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** END ELSE**   MD.QFILE='Q'**   MD.QFILE<2>=ACCOUNT**   MD.QFILE<3>=REPORT.FILE**   WRITE MD.QFILE ON FI.MD, 'AR.FILE.PATH'**   OPEN '','AR.FILE.PATH' TO FI.AR.FILE.PATH ELSE**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** ENDCALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)IF QFILE.NAME = '' THEN   WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'   GOSUB UPDATE.TIME.STAMP   ALL.GOOD=0   RETURN ENDEXECUTE "CREATE-INDEX AR.FILE.PATH ":AR.DUE.DATE.DICT CAPTURING DUMMY** END***EXECUTE 'SELECT ':AR.FILE.PATH:' WITH ':AR.BALANCE.DICT:' > "0"' CAPTURING DUMMY**IF NOT(SYSTEM(11)) THEN**   WRITE 'ERROR: NO OUTSTANDING RECEIVABLES' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'**   GOSUB UPDATE.TIME.STAMP**   ALL.GOOD=0**   RETURN** END**CMND='SORT ':AR.FILE.PATH:' BY ':AR.DUE.DATE.DICT:' BREAK-ON ':AR.DUE.DATE.DICT:' PIPE TOTAL ':AR.BALANCE.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CMND='SORT ':AR.FILE.PATH:' WITH ':AR.INVOICE.AMT.DICT:' > "0" BY ':AR.DUE.DATE.DICTCMND:=' PIPE ':AR.DUE.DATE.DICT:' PIPE ':AR.DATE.PAID.DICT:' PIPE ':AR.INVOICE.AMT.DICTCMND:=' PIPE ':AR.BALANCE.DICT:' PIPE ':AR.CUSTOMER.DICT:' HDR-SUPP COL-HDR-SUPP NOPAGE'WRITE CMND ON FI.MVDB.CONTROL, 'AR.REPORT.CMND'EXECUTE CMND CAPTURING REPORTCONVERT '$,' TO '' IN REPORTWRITE REPORT ON FI.MVDB.CONTROL, 'AR.REPORT'* SETUP AGING PERIODS OF 0, 1-30, 31-60, 61-90, AND 90+PERIODS=0:@AM:1:@AM:31:@AM:61:@AM:91PERIOD.AMOUNTS=''CUSTOMERS=''NUM.CUSTS=0CUST.AMT.DUES=''CUST.MOST.DAYS.DUE=''CUST.TOTAL.1000.DAYS=''CUST.NUM.1000.DAYS=''CUST.TOTAL.60.DAYS=''CUST.NUM.60.DAYS=''DATES=''DATE.CNTR=0LAST.DATE=''AMOUNTS=''ROW.NO=0* BUILD LAST 5 YEARSFIVE.YEARS=''FIRST.YEAR=(OCONV(DATE(),'D4-')[7,4])-4FOR YEAR.CNTR = 0 TO 4   FIVE.YEARS<1,-1>=FIRST.YEAR+YEAR.CNTR NEXT YEAR.CNTRPERIOD.AMOUNTS<6>=FIVE.YEARSMAX.ROWS=DCOUNT(REPORT,@AM)LOOP   ROW.NO+=1   ROW=REPORT<ROW.NO>UNTIL ROW.NO > MAX.ROWS DO   IF INDEX(ROW,'|',1) THEN      ROW.DATE=TRIM(FIELD(ROW,'|',2))      DUE.DATE=ICONV(ROW.DATE,'D')      IF DUE.DATE = ROW.DATE OR NOT(NUM(DUE.DATE)) THEN DUE.DATE=''      IF DUE.DATE THEN         DUE.YEAR=OCONV(DUE.DATE,'D4-')[7,4]         LOCATE DUE.YEAR IN FIVE.YEARS<1> SETTING YEAR.POS ELSE YEAR.POS=0         PAID.DATE=TRIM(FIELD(ROW,'|',3))         NEXT.ROW.NO=ROW.NO+1         LOOP            NEXT.ROW=TRIM(REPORT<NEXT.ROW.NO>)         UNTIL INDEX(NEXT.ROW,'|',1) OR NEXT.ROW = '' DO            NEXT.PAID.DATE=NEXT.ROW            IF NEXT.PAID.DATE <> '' THEN PAID.DATE=NEXT.PAID.DATE            NEXT.ROW.NO+=1         REPEAT         ROW.NO=NEXT.ROW.NO-1         IF PAID.DATE <> '' THEN            PAID.DATE=ICONV(PAID.DATE,'D')            PAID.MO=OCONV(PAID.DATE,'D2-')[1,2]            PAID.MO+=0            PAID.YEAR=OCONV(PAID.DATE,'D4-')[7,4]            LOCATE PAID.YEAR IN FIVE.YEARS<1> SETTING PAID.YEAR.POS ELSE PAID.YEAR.POS=0            PAID.DAYS=PAID.DATE-DUE.DATE          END ELSE            PAID.MO=''            PAID.YEAR=''            PAID.DAYS=''            PAID.YEAR.POS=''          END         INV.AMOUNT=ICONV(TRIM(FIELD(ROW,'|',4)),'MD2')         REM.BALANCE=ICONV(TRIM(FIELD(ROW,'|',5)),'MD2')         CUSTOMER=TRIM(FIELD(ROW,'|',6))         CUSTOMER.POS=0         IF NUM(INV.AMOUNT) AND NUM(REM.BALANCE) THEN            IF CUSTOMER <> '' THEN               IF REM.BALANCE OR PAID.DATE >= DAYS.AGO.1000 THEN                  LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUSTOMER.POS ELSE                     NUM.CUSTS+=1                     CUSTOMER.POS=NUM.CUSTS                     CUSTOMERS<1,CUSTOMER.POS>=CUSTOMER                   END                END             END            IF REM.BALANCE OR NOT(PAID.DATE) THEN               DAYS.DUE=DATE()-DUE.DATE             END ELSE               DAYS.DUE=PAID.DATE-DUE.DATE             END            IF DAYS.DUE < 0 THEN DAYS.DUE=0            LOCATE DAYS.DUE IN PERIODS BY "AR" SETTING PERIOD ELSE PERIOD=PERIOD-1            IF REM.BALANCE THEN               PERIOD.AMOUNTS<PERIOD>+=REM.BALANCE               IF CUSTOMER.POS AND DAYS.DUE THEN                  CUST.AMT.DUES<1,CUSTOMER.POS>=CUST.AMT.DUES<1,CUSTOMER.POS>+REM.BALANCE                  IF DAYS.DUE > CUST.MOST.DAYS.DUE<1,CUSTOMER.POS> THEN                     CUST.MOST.DAYS.DUE<1,CUSTOMER.POS>=DAYS.DUE                   END                END             END            IF DAYS.DUE AND CUSTOMER.POS THEN               IF PAID.DATE THEN                  PAID.OR.TODAY=PAID.DATE                END ELSE                  PAID.OR.TODAY=DATE()                END               IF PAID.OR.TODAY >= DAYS.AGO.1000 THEN; * PAID IN LAST 1000 DAYS                  CUST.TOTAL.1000.DAYS<1,CUSTOMER.POS>=CUST.TOTAL.1000.DAYS<1,CUSTOMER.POS>+DAYS.DUE                  CUST.NUM.1000.DAYS<1,CUSTOMER.POS>=CUST.NUM.1000.DAYS<1,CUSTOMER.POS>+1                  IF PAID.OR.TODAY >= DAYS.AGO.60 THEN; * PAID IN LAST 60 DAYS                     CUST.TOTAL.60.DAYS<1,CUSTOMER.POS>=CUST.TOTAL.60.DAYS<1,CUSTOMER.POS>+DAYS.DUE                     CUST.NUM.60.DAYS<1,CUSTOMER.POS>=CUST.NUM.60.DAYS<1,CUSTOMER.POS>+1                   END                END             END            IF PAID.YEAR.POS THEN               IF YEAR.POS AND PERIOD THEN                  PERIOD.AMOUNTS<7,YEAR.POS,PERIOD>=PERIOD.AMOUNTS<7,YEAR.POS,PERIOD>+1                  PERIOD.AMOUNTS<8,YEAR.POS,PERIOD>=PERIOD.AMOUNTS<8,YEAR.POS,PERIOD>+INV.AMOUNT                  PERIOD.AMOUNTS<9,YEAR.POS>=PERIOD.AMOUNTS<9,YEAR.POS>+DAYS.DUE                END               PERIOD.AMOUNTS<10,PAID.YEAR.POS,PAID.MO>=PERIOD.AMOUNTS<10,PAID.YEAR.POS,PAID.MO>+1               PERIOD.AMOUNTS<11,PAID.YEAR.POS,PAID.MO>=PERIOD.AMOUNTS<11,PAID.YEAR.POS,PAID.MO>+PAID.DAYS             END          END       END    ENDREPEATPERIOD.AMOUNTS<12>=CUSTOMERSPERIOD.AMOUNTS<13>=CUST.AMT.DUESPERIOD.AMOUNTS<14>=CUST.MOST.DAYS.DUEPERIOD.AMOUNTS<15>=CUST.TOTAL.1000.DAYSPERIOD.AMOUNTS<16>=CUST.NUM.1000.DAYSPERIOD.AMOUNTS<17>=CUST.TOTAL.60.DAYSPERIOD.AMOUNTS<18>=CUST.NUM.60.DAYS*** GET THE 50 HIGHEST AMOUNTS DUE*HIGHEST.AMTS=''HIGHEST.AMTS.CUSTS=''MAX.CUSTS=DCOUNT(CUSTOMERS,@VM)FOR I = 1 TO MAX.CUSTS   MAX.AMT=CUST.AMT.DUES<1,I>   IF MAX.AMT THEN      LOCATE MAX.AMT IN HIGHEST.AMTS<1> BY "DR" SETTING POS ELSE NULL      IF POS <= 50 THEN         HIGHEST.AMTS=INSERT(HIGHEST.AMTS,1,POS,0,MAX.AMT)         HIGHEST.AMTS.CUSTS=INSERT(HIGHEST.AMTS.CUSTS,1,POS,0,CUSTOMERS<1,I>)       END    END NEXT IPERIOD.AMOUNTS<19>=HIGHEST.AMTS.CUSTSPERIOD.AMOUNTS<20>=HIGHEST.AMTS*** GET THE 50 HIGHEST DUE DAYS*HIGHEST.DAYS=''HIGHEST.DAYS.CUSTS=''FOR I = 1 TO MAX.CUSTS   CUST.DAYS.DUE=CUST.MOST.DAYS.DUE<1,I>   IF CUST.DAYS.DUE THEN      LOCATE CUST.DAYS.DUE IN HIGHEST.DAYS<1> BY "DR" SETTING POS ELSE NULL      IF POS <= 50 THEN         HIGHEST.DAYS=INSERT(HIGHEST.DAYS,1,POS,0,CUST.DAYS.DUE)         HIGHEST.DAYS.CUSTS=INSERT(HIGHEST.DAYS.CUSTS,1,POS,0,CUSTOMERS<1,I>)       END    END NEXT IPERIOD.AMOUNTS<21>=HIGHEST.DAYS.CUSTSPERIOD.AMOUNTS<22>=HIGHEST.DAYS*** GET THE 50 CUSTOMERS WITH HIGHEST PERCENTAGE INCREASES*HIGHEST.INCREASE.PCTS=''HIGHEST.INCREASE.CUSTS=''HIGHEST.INCREASE.60.DAYS=''HIGHEST.INCREASE.1000.DAYS=''FOR I = 1 TO MAX.CUSTS   DAYS.1000=CUST.TOTAL.1000.DAYS<1,I>   NUM.1000=CUST.NUM.1000.DAYS<1,I>   DAYS.60=CUST.TOTAL.60.DAYS<1,I>   NUM.60=CUST.NUM.60.DAYS<1,I>   IF NUM.1000 THEN      AVG.1000=DAYS.1000 / NUM.1000    END ELSE AVG.1000=0   IF NUM.60 THEN      AVG.60=DAYS.60 / NUM.60    END ELSE AVG.60=0   AVG.INCREASE=AVG.60 - AVG.1000   IF AVG.INCREASE > 0 AND AVG.60 > 300 THEN;  * MUST BE DUE OVER 30 DAYS      IF AVG.1000 THEN         PCT.INCREASE=INT(AVG.INCREASE * 1000 / AVG.1000 + .5)         PCT.INCREASE=OCONV(PCT.INCREASE,'MD1')       END ELSE PCT.INCREASE=0      LOCATE PCT.INCREASE IN HIGHEST.INCREASE.PCTS<1> BY "DR" SETTING POS ELSE NULL      IF POS <= 50 THEN         HIGHEST.INCREASE.PCTS=INSERT(HIGHEST.INCREASE.PCTS,1,POS,0,PCT.INCREASE)         HIGHEST.INCREASE.CUSTS=INSERT(HIGHEST.INCREASE.CUSTS,1,POS,0,CUSTOMERS<1,I>)         HIGHEST.INCREASE.1000.DAYS=INSERT(HIGHEST.INCREASE.1000.DAYS,1,POS,0,OCONV(AVG.1000,'MD1'))         HIGHEST.INCREASE.60.DAYS=INSERT(HIGHEST.INCREASE.60.DAYS,1,POS,0,OCONV(AVG.60,'MD1'))       END    END NEXT IPERIOD.AMOUNTS<23>=HIGHEST.INCREASE.CUSTSPERIOD.AMOUNTS<24>=HIGHEST.INCREASE.PCTSPERIOD.AMOUNTS<25>=HIGHEST.INCREASE.60.DAYSPERIOD.AMOUNTS<26>=HIGHEST.INCREASE.1000.DAYS*TIME.STAMP.TYPE='AR'DICT.FILE=FI.DICT.BALANCESGOSUB UPDATE.TIME.STAMPWRITE PERIOD.AMOUNTS ON DICT.FILE, '*CURRENT.AR.STATS'RETURN*CALC.AP:*DICT.FILE=FI.DICT.BALANCESMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' END*EQUATE AP.ACCOUNT TO SETUP.PARAMS(1)EQUATE AP.REPORT.FILE TO SETUP.PARAMS(2)EQUATE AP.DUE.DATE.DICT TO SETUP.PARAMS(3)EQUATE AP.DATE.PAID.DICT TO SETUP.PARAMS(4)EQUATE AP.INVOICE.AMT.DICT TO SETUP.PARAMS(5)EQUATE AP.BALANCE.DICT TO SETUP.PARAMS(6)EQUATE AP.DUE.DATE.AMC TO SETUP.PARAMS(8)EQUATE AP.DATE.PAID.AMC TO SETUP.PARAMS(9)EQUATE AP.INVOICE.AMT.AMC TO SETUP.PARAMS(10)EQUATE AP.INVOICE.AMT.CONV TO SETUP.PARAMS(11)EQUATE AP.INVOICE.AMT.COOR TO SETUP.PARAMS(12)EQUATE AP.BALANCE.AMC TO SETUP.PARAMS(13)EQUATE AP.BALANCE.CONV TO SETUP.PARAMS(14)EQUATE AP.BALANCE.COOR TO SETUP.PARAMS(15)*AP.FILE.PATH='AP.FILE.PATH'QFILE.NAME=AP.FILE.PATH**OPEN '',AP.FILE.PATH TO FI.AP.FILE.PATH ELSE**IF PLATFORM = 'UD' THEN**   QFILE.NAME=AP.FILE.PATH**   CALL CREATE.UD.QPOINTER(ACCOUNT,AP.REPORT.FILE,QFILE.NAME,FI.AP.FILE.PATH)**   IF QFILE.NAME = '' THEN**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** END ELSE**   MD.QFILE='Q'**   MD.QFILE<2>=AP.ACCOUNT**   MD.QFILE<3>=AP.REPORT.FILE**   WRITE MD.QFILE ON FI.MD, 'AP.FILE.PATH'**   OPEN '','AP.FILE.PATH' TO FI.AP.FILE.PATH ELSE**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** ENDCALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)IF QFILE.NAME = '' THEN   WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'   GOSUB UPDATE.TIME.STAMP   ALL.GOOD=0   RETURN ENDEXECUTE "CREATE-INDEX AP.FILE.PATH ":AP.DUE.DATE.DICT CAPTURING DUMMY** END*STACKED.1='SELECT ':AP.FILE.PATH:' WITH ':AP.BALANCE.DICT:' > "0"'STACKED.2='SORT ':AP.FILE.PATH:' BY ':AP.DUE.DATE.DICT:' BREAK-ON ':AP.DUE.DATE.DICT:' PIPE TOTAL ':AP.BALANCE.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)WRITE STACKED.2 ON FI.MVDB.CONTROL, 'AP.CMND'WRITE REPORT ON FI.MVDB.CONTROL, 'AP.REPORT'IF NOT(SYSTEM.11) THEN   WRITE 'ERROR: NO OUTSTANDING PAYABLES' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'   GOSUB UPDATE.TIME.STAMP**   ALL.GOOD=0**   RETURN** END   PERIOD.AMOUNTS='' END ELSE   * SETUP AGING PERIODS OF 0, 1-30, 31-60, 61-90, AND 90+   PERIODS=0:@AM:1:@AM:31:@AM:61:@AM:91   PERIOD.AMOUNTS=''   DATES=''   DATE.CNTR=0   LAST.DATE=''   AMOUNTS=''   MAX.ROWS=DCOUNT(REPORT,CHAR(254))   FOR ROW.NO = 1 TO MAX.ROWS      ROW=REPORT<ROW.NO>      IF INDEX(ROW,'|',1) THEN         ROW.DATE=TRIM(FIELD(ROW,'|',1))         DUE.DATE=ICONV(ROW.DATE,'D')         IF DUE.DATE = ROW.DATE OR NOT(NUM(DUE.DATE)) THEN DUE.DATE=''         IF DUE.DATE THEN            AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')            IF NUM(AMOUNT) THEN               DAYS.DUE=DATE()-DUE.DATE               IF DAYS.DUE < 0 THEN DAYS.DUE=0               LOCATE DAYS.DUE IN PERIODS BY "AR" SETTING PERIOD ELSE PERIOD=PERIOD-1               PERIOD.AMOUNTS<PERIOD>+=AMOUNT             END          END       END    NEXT ROW.NO END*TIME.STAMP.TYPE='AP'DICT.FILE=FI.DICT.BALANCESGOSUB UPDATE.TIME.STAMPWRITE PERIOD.AMOUNTS ON DICT.FILE, '*CURRENT.AP.STATS'*CALC.NET.INCOME:*TIME.STAMP.TYPE='NET.INCOME'DICT.FILE=FI.DICT.BALANCESGOSUB UPDATE.TIME.STAMPWRITE 999 ON DICT.FILE, '*CURRENT.NET.INCOME.STATS'RETURN*UPDATE.TIME.STAMP:*TIME.STAMP=TIME()TIME.STAMP=STR('0',5-LEN(TIME.STAMP)):TIME.STAMPWRITE DATE():TIME.STAMP ON DICT.FILE, '*LAST.UPDATE.':TIME.STAMP.TYPEWRITE DATE():TIME.STAMP ON DICT.FILE, '*LAST.UPDATED.':TIME.STAMP.TYPERETURNEND0007DFSUB.DEMO.SINGLE.MONTH.SALES.BY.REP0c2SUBROUTINE SUB.DEMO.SINGLE.MONTH.SALES.BY.REP***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEMONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'CONVERT ',' TO CHAR(254) IN MONTHSOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPMATWRITE WIDGET.USER.DATA ON FILE.CONTROL, 'DEBUG'READV YEARS FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE', 67 ELSE   YEARS='2013,2014,2015'   CONVERT ',' TO CHAR(253) IN YEARS ENDREVENUE.OR.GP=WIDGET.USER.DATA(1)YEAR=WIDGET.USER.DATA(2)MONTH=WIDGET.USER.DATA(3)LOCATE MONTH IN MONTHS SETTING MONTH.SVM ELSE MONTH.SVM=1YEAR.DETAIL.ID=''BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE=MONTH:' ':YEAR:' Sales By Sales Rep'      W$BAR.YMEMO = "Sales"      YEAR.DETAIL.ID='SALES.':YEAR      MAX.ROUNDER=150000   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE=MONTH:' ':YEAR:' Gross Profit By Sales Rep'      W$BAR.YMEMO = "Gross Profit"      YEAR.DETAIL.ID='GPS.':YEAR      MAX.ROUNDER=50000END CASEREAD REC FROM FILE.CONTROL, YEAR.DETAIL.ID ELSE REC=''*REPS=REC<1>**MAX.SALES.AMT=0N=0FIRST.YEAR=''MAX.REPS=DCOUNT(REPS,CHAR(253))FOR NN = 1 TO MAX.REPS   REP=REPS<1,NN>   SALES.AMT=REC<2,NN,MONTH.SVM>   SALES.AMT=OCONV(SALES.AMT,'MD02')   IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT   W$BAR.VALUES<1,NN> = SALES.AMT   W$BAR.XLABELS<1,NN> = REPNEXT NNW$BAR.XMEMO = "Sales Rep"* ROUND MAX AMOUNT UP TO THE NEXT MAX.ROUNDERMAX.SALES.AMT+=MAX.ROUNDERMAX.SALES.AMT=INT(MAX.SALES.AMT/MAX.ROUNDER) * MAX.ROUNDERW$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'RETURN0002FASUB.TEST.WIDGET0c2SUBROUTINE SUB.TEST.WIDGET** Copyright (c) 2010 SB, Inc. All rights reserved.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Neat Pie Chart"W$TYPE = "FC2DPIE"W$WIDTH = 1 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$PIE.CAPTION = "MV Dashboard Survey"*W$PIE.LABELS<1,1> = "Love it"W$PIE.LABELS<1,2> = "Like it"W$PIE.LABELS<1,3> = "Very nice"W$PIE.LABELS<1,4> = "Awesome!"*W$PIE.VALUES<1,1> = "1560"W$PIE.VALUES<1,2> = "400"W$PIE.VALUES<1,3> = "1012"W$PIE.VALUES<1,4> = "4065"** For a 2D pie, a specific slice can be separated from the pie* by setting this value:* W$PIE.VALUE.OPTS<1,3> = 'isSliced="1"'** To show percentages instead of values, use this:W$CHART.OPTIONS<-1> = "showPercentValues='1'"RETURN003DCBSUB.PORTAL.DASHBOARD0c2SUBROUTINE SUB.PORTAL.DASHBOARD** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) Zumasys, Inc*WEB$TITLE='MVDashboard Portal Financial Picture'WEB.FORM.NAME='PORTAL.DASHBOARD'W$TYPE='HTML'W$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*EQUATE AR.AMOUNTS TO GLOBAL.USER.DATA(1)EQUATE AP.AMOUNTS TO GLOBAL.USER.DATA(2)OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE    ERROR.MSG<-1>='UNABLE TO OPEN MVDB.CONTROL'   GOTO DISPLAY.ERROR ENDREAD PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'END CASEOPEN '','DASHBOARD.CLOSING.STATS' TO FI.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.CLOSING.STATS ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN '','DASHBOARD.BALANCES' TO FI.DASHBOARD.BALANCES ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DASHBOARD.BALANCES'   GOTO DISPLAY.ERROR ENDREAD PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'ERROR.MSG=''DIM SALES.SETUP.PARAMS(20), AR.SETUP.PARAMS(20), AP.SETUP.PARAMS(20), NET.INCOME.SETUP.PARAMS(20)*MATREAD SALES.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SALES.SETUP.PARAMS='' ENDEQUATE SALES.ACCOUNT TO SALES.SETUP.PARAMS(1)EQUATE SALES.REPORT.FILE TO SALES.SETUP.PARAMS(2)EQUATE SALES.DATE.DICT TO SALES.SETUP.PARAMS(3)EQUATE SALES.AMOUNT.DICT TO SALES.SETUP.PARAMS(6)EQUATE GP.DICT.NAME TO SALES.SETUP.PARAMS(7)*IF SALES.ACCOUNT = '' OR SALES.REPORT.FILE = '' OR SALES.DATE.DICT = '' OR SALES.AMOUNT.DICT = '' THEN   ERROR.MSG<-1>='SALES FILE ACCOUNT, SALES FILE NAME, DATE OF SALE, AND AMOUNT OF SALE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED' END*** BUILD SAMPLE DATA IF USING MVDB FOR SALES ACCOUNT*IF SALES.ACCOUNT = 'MVDB' THEN   EXECUTE "BUILD.SAMPLE.PORTAL.FILES" CAPTURING DUMMY END**OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.DASHBOARD.BALANCES ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DICT DASHBOARD.BALANCES'   GOTO DISPLAY.ERROR ENDMATREAD AR.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ELSE   MAT AR.SETUP.PARAMS='' END*EQUATE AR.ACCOUNT TO AR.SETUP.PARAMS(1)EQUATE AR.REPORT.FILE TO AR.SETUP.PARAMS(2)EQUATE AR.DUE.DATE.DICT TO AR.SETUP.PARAMS(3)EQUATE AR.BALANCE.DICT TO AR.SETUP.PARAMS(6)****IF AR.ACCOUNT = '' OR AR.REPORT.FILE = '' OR AR.DUE.DATE.DICT = '' OR AR.BALANCE.DICT = '' THEN**   ERROR.MSG<-1>='AR FILE ACCOUNT, AR FILE NAME, DUE DATE, AND BALANCE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'***   GOTO DISPLAY.ERROR** END*MATREAD AP.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ELSE   MAT AP.SETUP.PARAMS='' END*EQUATE AP.ACCOUNT TO AP.SETUP.PARAMS(1)EQUATE AP.REPORT.FILE TO AP.SETUP.PARAMS(2)EQUATE AP.DUE.DATE.DICT TO AP.SETUP.PARAMS(3)EQUATE AP.BALANCE.DICT TO AP.SETUP.PARAMS(6)****IF AP.ACCOUNT = '' OR AP.REPORT.FILE = '' OR AP.DUE.DATE.DICT = '' OR AP.BALANCE.DICT = '' THEN**   ERROR.MSG<-1>='AP FILE ACCOUNT, AP FILE NAME, DUE DATE, AND BALANCE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'***   GOTO DISPLAY.ERROR** END***MATREAD NET.INCOME.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.NET.INCOME.REPORT.SETUP' ELSE**   MAT NET.INCOME.SETUP.PARAMS=''** END*EQUATE NET.INCOME.ACCOUNT TO NET.INCOME.SETUP.PARAMS(1)EQUATE NET.INCOME.REPORT.FILE TO NET.INCOME.SETUP.PARAMS(2)EQUATE NET.INCOME.DUE.DATE.DICT TO NET.INCOME.SETUP.PARAMS(3)EQUATE NET.INCOME.BALANCE.DICT TO NET.INCOME.SETUP.PARAMS(6)****IF NET.INCOME.ACCOUNT = '' OR NET.INCOME.REPORT.FILE = '' OR NET.INCOME.DUE.DATE.DICT = '' OR NET.INCOME.BALANCE.DICT = '' THEN**   ERROR.MSG<-1>='NET INCOME FILE ACCOUNT, NET INCOME FILE NAME, DUE DATE, AND BALANCE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'***   GOTO DISPLAY.ERROR** END*IF ERROR.MSG <> '' THEN***   GOTO DISPLAY.ERROR END** START ANY REQUIRED BACKGROUND CALCULATIONS*CUR.TIME=TIME()CUR.TIME=FIELD(CUR.TIME,'.',1)CUR.TIME=STR('0',5-LEN(CUR.TIME)):CUR.TIMECUR.DATE.TIME=DATE():CUR.TIME*** SALES*READU SALES FROM FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES' ELSE SALES=''BEGIN CASE   CASE SALES = 'UPDATING'; SALES.STATUS='UPDATING'   CASE NOT(NUM(SALES)); SALES.STATUS='NEED CALC'   CASE (CUR.DATE.TIME - SALES) < 900;   * LESS THAN 15 MINUTES      SALES.STATUS='GOOD'      READ SALES.REC FROM FI.DICT.CLOSING.STATS, '*CURRENT.SALES.STATS' ELSE         SALES.STATUS='NEED CALC'       END   CASE 1; SALES.STATUS='NEED CALC'END CASEIF SALES.STATUS <> 'NEED CALC' THEN   RELEASE FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES' END*** AR*READU AR FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR' ELSE AR=''BEGIN CASE   CASE AR = 'UPDATING'; AR.STATUS='UPDATING'   CASE NOT(NUM(AR)); AR.STATUS='NEED CALC'   CASE (CUR.DATE.TIME - AR) < 900;   * LESS THAN 15 MINUTES      AR.STATUS='GOOD'      READ AR.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AR.STATS' ELSE         AR.STATUS='NEED CALC'       END   CASE 1; AR.STATUS='NEED CALC'END CASEIF AR.STATUS <> 'NEED CALC' THEN   RELEASE FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR' END*** AP*READU AP FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP' ELSE AP=''BEGIN CASE   CASE AP = 'UPDATING'; AP.STATUS='UPDATING'   CASE NOT(NUM(AP)); AP.STATUS='NEED CALC'   CASE (CUR.DATE.TIME - AP) < 900;   * LESS THAN 15 MINUTES      AP.STATUS='GOOD'      READ AP.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AP.STATS' ELSE         AP.STATUS='NEED CALC'       END   CASE 1; AP.STATUS='NEED CALC'END CASEIF AP.STATUS <> 'NEED CALC' THEN   RELEASE FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP' END******* NET.INCOME*****READU NET.INCOME FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME' ELSE NET.INCOME=''**BEGIN CASE**   CASE NET.INCOME = 'UPDATING'; NET.INCOME.STATUS='UPDATING'**   CASE NOT(NUM(NET.INCOME)); NET.INCOME.STATUS='NEED CALC'**   CASE (CUR.DATE.TIME - NET.INCOME) < 900;   * LESS THAN 15 MINUTES**      NET.INCOME.STATUS='GOOD'**      READ NET.INCOME.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.NET.INCOME.STATS' ELSE**         NET.INCOME.STATUS='NEED CALC'**       END**   CASE 1; NET.INCOME.STATUS='NEED CALC'**END CASE**IF NET.INCOME.STATUS <> 'NEED CALC' THEN**   RELEASE FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME'** END*IF SALES.STATUS <> 'GOOD' OR AR.STATUS <> 'GOOD' OR AP.STATUS <> 'GOOD' THEN ; *OR NET.INCOME.STATUS <> 'GOOD' THEN   IF SALES.STATUS = 'NEED CALC' AND AR.STATUS = 'NEED CALC' AND AP.STATUS = 'NEED CALC' THEN; *AND NET.INCOME.STATUS = 'NEED CALC' THEN      TYPE.CALC='ALL'      GOSUB INITIATE.CALC.PHANTOM      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.ALL'      WRITE 'UPDATING' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES'      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR'      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP'**      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME'    END ELSE      IF SALES.STATUS = 'NEED CALC' THEN         TYPE.CALC='SALES'         GOSUB INITIATE.CALC.PHANTOM         WRITE 'UPDATING' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES'       END      IF AR.STATUS = 'NEED CALC' THEN         TYPE.CALC='AR'         GOSUB INITIATE.CALC.PHANTOM         WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR'       END      IF AP.STATUS = 'NEED CALC' THEN         TYPE.CALC='AP'         GOSUB INITIATE.CALC.PHANTOM         WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP'       END**      IF NET.INCOME.STATUS = 'NEED CALC' THEN**         TYPE.CALC='NET.INCOME'**         GOSUB INITIATE.CALC.PHANTOM**         WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME'**       END    END   *   NOW.GOOD=1   *   ** GIVE IT 10 SECONDS TO COMPLETE ANY CALCS AND TRY AGAIN   *   SLEEP 10   *   IF SALES.STATUS <> 'GOOD' THEN      READ SALES.STATUS FROM FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES' ELSE SALES.STATUS='UPDATING'      IF NUM(SALES.STATUS) THEN         READ SALES.REC FROM FI.DICT.CLOSING.STATS, '*CURRENT.SALES.STATS' ELSE            SALES.STATUS='UPDATING'            NOW.GOOD=0          END       END ELSE         NOW.GOOD=0       END    END   *   IF AR.STATUS <> 'GOOD' THEN      READ AR.STATUS FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR' ELSE AR.STATUS='UPDATING'      IF NUM(AR.STATUS) THEN         READ AR.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AR.STATS' ELSE            AR.STATUS='UPDATING'            NOW.GOOD=0          END       END ELSE         NOW.GOOD=0       END    END   *   IF AP.STATUS <> 'GOOD' THEN      READ AP.STATUS FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP' ELSE AP.STATUS='UPDATING'      IF NUM(AP.STATUS) THEN         READ AP.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AP.STATS' ELSE            AP.STATUS='UPDATING'            NOW.GOOD=0          END       END ELSE         NOW.GOOD=0       END    END**   IF NET.INCOME.STATUS <> 'GOOD' THEN**      READ NET.INCOME.STATUS FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME' ELSE NET.INCOME.STATUS='UPDATING'**      IF NUM(NET.INCOME.STATUS) THEN**         READ NET.INCOME.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.NET.INCOME.STATS' ELSE**            NET.INCOME.STATUS='UPDATING'**            NOW.GOOD=0**          END**       END ELSE**         NOW.GOOD=0**       END**    END   *   IF NOT(NOW.GOOD) THEN      *      ** USE PROMPTS AS A WAY OF SHOWING WHICH ARE CALCULATION.  NOTHING WILL BE DONE WITH THAT CONTENT OF THE      ** PROMPT WHEN THE GO BUTTON IS CLICKED.      *      W$INPUT.PROMPT<1> = "MTD Sales Calcs"      W$INPUT.TYPE<1> = "TEXT"      W$INPUT.UDPOS<1> = 1      W$INPUT.DEFAULT<1> = SALES.STATUS      *      IF AR.REPORT.FILE <> '' THEN         W$INPUT.PROMPT<2> = "AR Calcs"         W$INPUT.TYPE<2> = "TEXT"         W$INPUT.UDPOS<2> = 2         W$INPUT.DEFAULT<2> = AR.STATUS         *         IF AP.REPORT.FILE <> '' THEN            W$INPUT.PROMPT<3> = "AP Calcs"            W$INPUT.TYPE<3> = 'TEXT'            W$INPUT.UDPOS<3> = 3            W$INPUT.DEFAULT<3> = AP.STATUS          END       END      ***      W$INPUT.PROMPT<4> = "Net Income Calcs"**      W$INPUT.TYPE<4> = 'TEXT'**      W$INPUT.UDPOS<4> = 4**      W$INPUT.DEFAULT<4> = NET.INCOME.STATUS      *      ERROR.MSG<-1>='Figures are currently updating.'      ERROR.MSG<-1>='Try again in a minute or two.'      GOTO DISPLAY.ERROR   END END*DASH.REC=''MMM.YYYY=OCONV(DATE(),'D4')[4,8]DASH.REC<1>=MMM.YYYYYYYY=FIELD(MMM.YYYY,' ',2)DASH.REC<2>=YYYYDASH.REC<9>=DASH.REC<1>DASH.REC<10>=YYYYDASH.REC<15>=OCONV(DATE(),'D2-')MTD.SALES=SUM(SALES.REC<2>); DASH.REC<3>=MTD.SALESMTD.COST.OF.SALES=SUM(SALES.REC<3>)GROSS.PROFIT=MTD.SALES-MTD.COST.OF.SALESDASH.REC<5>=GROSS.PROFITPERCENT=INT((GROSS.PROFIT*1000)/MTD.SALES + .5)DASH.REC<7>=PERCENT*** USE DASHBOARD.CLOSING.STATS TO GET YEAR TO DATE TOTALS*STACKED.1=''STACKED.2='SORT DASHBOARD.CLOSING.STATS WITH YYYY = "':YYYY:'" BY YYYY BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL COST.OF.SALE ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)MAX.ROWS=DCOUNT(REPORT,CHAR(254))YTD.SALES=0YTD.COST.OF.SALES=0FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      TEST.YYYY=TRIM(FIELD(ROW,'|',1))      IF TEST.YYYY = YYYY THEN         YTD.SALES=TRIM(FIELD(ROW,'|',2))         YTD.SALES=ICONV(YTD.SALES,'MD2')         YTD.COST.OF.SALES=TRIM(FIELD(ROW,'|',3))         YTD.COST.OF.SALES=ICONV(YTD.COST.OF.SALES,'MD2')       END    END NEXT ROW.NODASH.REC<4>=YTD.SALESGROSS.PROFIT=YTD.SALES-YTD.COST.OF.SALESIF NOT(YTD.SALES) THEN   MARGIN=0 END ELSE   MARGIN=INT(GROSS.PROFIT*1000 / YTD.SALES + .5) ENDDASH.REC<6>=GROSS.PROFITDASH.REC<8>=MARGIN*TEMP.AR.REC=AR.REC<1>:@AM:AR.REC<2>:@AM:AR.REC<3>:@AM:AR.REC<4>:@AM:AR.REC<5>SUM.AR.BALANCES=SUM(TEMP.AR.REC)DASH.REC<28>=SUM.AR.BALANCESIF SUM.AR.BALANCES THEN   DAYS.CURRENT=AR.REC<1>; DASH.REC<30>=DAYS.CURRENT; DASH.REC<31>=INT(DAYS.CURRENT*1000/SUM.AR.BALANCES + .5)   DAYS.1.30=AR.REC<2>; DASH.REC<16>=DAYS.1.30; DASH.REC<17>=INT(DAYS.1.30*1000/SUM.AR.BALANCES + .5)   DAYS.31.60=AR.REC<3>; DASH.REC<19>=DAYS.31.60; DASH.REC<20>=INT(DAYS.31.60*1000/SUM.AR.BALANCES + .5)   DAYS.61.90=AR.REC<4>; DASH.REC<22>=DAYS.61.90; DASH.REC<23>=INT(DAYS.61.90*1000/SUM.AR.BALANCES + .5)   DAYS.91=AR.REC<5>; DASH.REC<25>=DAYS.91; DASH.REC<26>=INT(DAYS.91*1000/SUM.AR.BALANCES + .5) ENDCONVERT CHAR(254) TO CHAR(253) IN TEMP.AR.RECAR.AMOUNTS=TEMP.AR.REC*SUM.AP.BALANCES=SUM(AP.REC)DASH.REC<29>=SUM.AP.BALANCESDAYS.CURRENT=AP.REC<1>; DASH.REC<32>=DAYS.CURRENTDAYS.1.30=AP.REC<2>; DASH.REC<18>=DAYS.1.30DAYS.31.60=AP.REC<3>; DASH.REC<21>=DAYS.31.60DAYS.61.90=AP.REC<4>; DASH.REC<24>=DAYS.61.90DAYS.91=AP.REC<5>; DASH.REC<27>=DAYS.91TEMP.AP.REC=AP.RECCONVERT CHAR(254) TO CHAR(253) IN TEMP.AP.RECAP.AMOUNTS=TEMP.AP.REC** DEFAULT CONVERSIONS TO $CONVS=''FOR I = 3 TO 32      CONVS<I>='$' NEXT I* CHANGE THOSE THAT AREN'TCONVS<7>='%'; CONVS<8>='%'CONVS<17>='%'; CONVS<20>='%'; CONVS<23>='%'; CONVS<26>='%'; CONVS<31>='%'CONVS<1>=''; CONVS<2>=''CONVS<9>=''; CONVS<10>=''CONVS<13>=''; CONVS<14>=''; CONVS<15>=''**W$PRINTABLE=1W$PDFABLE=1OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE RETURNBEGIN CASE   CASE AR.REPORT.FILE <> '' AND AP.REPORT.FILE <> '' AND GP.DICT.NAME <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD'   CASE GP.DICT.NAME <> '' AND AR.REPORT.FILE <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.GP.AR'   CASE GP.DICT.NAME <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.GP'   CASE AR.REPORT.FILE <> '' AND AP.REPORT.FILE <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.AR.AP'   CASE AR.REPORT.FILE <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.AR'   CASE 1      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES'END CASEREAD HTML FROM FILE.WEB.FORMS, WEB.FORM.NAME ELSE HTML=''***USER.ID=G$USERID*W$TITLE='  Portal Dashboard'; CALL PORTAL.SHOW.LAST.UPDATED('ALL')**WRITE HTML ON FILE.WEB.FORMS, 'TEST.HTML'*** DYNAMIC VARIABLES*FOR I = 1 TO 32   INSERT.FIELD=DASH.REC<I>   IF INSERT.FIELD = '' THEN INSERT.FIELD=I   CONV=CONVS<I>   BEGIN CASE      CASE CONV = ''; NULL      CASE CONV = '$'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD2,$')      CASE CONV = '%'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD1'):'%'      CASE 1; INSERT.FIELD=OCONV(INSERT.FIELD,CONV)   END CASE   IF INSERT.FIELD = '' THEN INSERT.FIELD='&nbsp;'   CALL SWAP(HTML,'~':I:'~',INSERT.FIELD) NEXT I   *W$TEXT.DATA=HTMLWRITE HTML ON FILE.WEB.FORMS, 'LAST.':WEB.FORM.NAMERETURN**DISPLAY.ERROR:*W$TYPE='HTML'MAX.LINES=DCOUNT(ERROR.MSG,CHAR(254))IF MAX.LINES > 1 THEN   TEMP.ERROR.MSG=ERROR.MSG   ERROR.MSG=''   FOR ERROR.LINE = 1 TO MAX.LINES      THIS.MSG=TEMP.ERROR.MSG<ERROR.LINE>      IF ERROR.MSG <> '' THEN ERROR.MSG:='<br>'      ERROR.MSG:=THIS.MSG    NEXT ERROR.LINE ENDW$HTML.DATA='<h3>':ERROR.MSG:'</h3>'RETURN*INITIATE.CALC.PHANTOM:*BEGIN CASE   CASE PLATFORM = 'D3' OR PLATFORM = 'JB'      EXECUTE "Z REFRESH.DASHBOARD.MTD.STATS ":TYPE.CALC CAPTURING DUMMY   CASE 1      EXECUTE "PHANTOM REFRESH.DASHBOARD.MTD.STATS ":TYPE.CALC CAPTURING DUMMYEND CASERETURN0011F3SUB.RUNTIME.ERRORS0c2SUBROUTINE SUB.RUNTIME.ERRORS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Report Runtime Errors** jBASE version (N/A)*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "MVDB Runtime Errors"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN ;* Dont process, just provide title, type & width*IF WIDGET.USER.DATA(2) # "" THEN  ACCTFILTER = WIDGET.USER.DATA(2)  W$TITLE = "Runtime Errors (User/Account filter = ":ACCTFILTER:")"END ELSE  IF G$SUBMITTED THEN    ACCTFILTER = "ALL"  END ELSE ;* It's empty, but only becuase nobody has specified a value    ACCTFILTER = @ACCOUNT  END  WIDGET.USER.DATA(2) = ACCTFILTERENDIF WIDGET.USER.DATA(3) # "" THEN  PROGFILTER = WIDGET.USER.DATA(3)END ELSE PROGFILTER = ""STOP 201, 'RUNTIME-ERRORS'*XLINE = 'SSELECT DM,RUNTIME-ERRORS, BY-DSND DATE BY-DSND TIME'*IF ACCTFILTER # "ALL" THEN  *XLINE := ' WITH USERPIB = "[':ACCTFILTER:']"'  *WITH.USED = 1*END ELSE WITH.USED = 0*IF PROGFILTER # "ALL" AND PROGFILTER # "" THEN  *IF WITH.USED THEN XLINE := ' AND'  *XLINE := ' WITH PROGNAME = "':PROGFILTER:'"'*END*EXECUTE XLINE CAPTURING JUNK*IF WIDGET.USER.DATA(1) = 'CLEAR' THEN  *LOOP    *READNEXT ID ELSE EXIT    *DELETE F.RUNTIME.ERRORS, ID  *REPEAT  *WIDGET.USER.DATA(1) = ""*END*IF SYSTEM(11) THEN  *IF SYSTEM(11) > 100 THEN MAX.DISPLAY = 100 ELSE MAX.DISPLAY = SYSTEM(11)  *W$HTML.DATA = '<h3>1 - ':MAX.DISPLAY:' of ':SYSTEM(11):'</h3>'  *W$HTML.DATA := '<table><tr>'  *W$HTML.DATA := '<th>Date / Time</th><th>User</th><th>Error</th>'  *W$HTML.DATA := '</tr>'*END ELSE  *W$HTML.DATA = '<h3>No Errors</h3>'*END*ERR.CNT = 0*LOOP  *READNEXT ID ELSE EXIT  *READ RECORD FROM F.RUNTIME.ERRORS, ID ELSE CONTINUE  *DATA RECORD<2,1>  *EXECUTE "PRINT-ERR DM,MESSAGES, ":RECORD<1>:" (S" CAPTURING ERR  **  *CONVERT @AM TO " " IN ERR  *ERR = OCONV(ERR,'MCP')  *ERR = TRIM(ERR)  *PROG = RECORD<4>  *DESC = PROG:" ":ERR  *USERPIB = RECORD<3>  *STACK = ""  *FOR N = DCOUNT(RECORD<5>,@VM) TO 1 STEP -1    *STACK := RECORD<5,N>    *IF STACK # "" AND N # 1 THEN STACK := ' --> '  *NEXT N  *IF RECORD<5> # '' THEN DESC := "Stack: ":STACK  *MD = FIELD( RECORD<3>, ' ', 3 )  **  ** Try and find the source code to include in the feed.  **  *SREC = "" ; FNAME = ""  *OPEN MD:",MD," TO F.MD THEN    *FNAME = ""    *READ CREC FROM F.MD, RECORD<4> THEN      *IF CREC<1> = "VR" THEN ;* This is a catalog pointer, file name is in field 4        *FNAME = FIELD(CREC<4>,' ',1)      *END ELSE IF CREC<1> = "PQ" THEN        *IF FIELD(CREC<2>, ' ', 1 ) = "HRUN" THEN          *FNAME = FIELD( CREC<2>, ' ', 2 )        *END      *END    *END    *IF FNAME # "" THEN      *OPEN MD:",":FNAME:"," TO SFILE THEN        *READ SREC FROM SFILE, RECORD<4> ELSE SREC = ""      *END    *END  *END  *SOURCE.SNIP = ""  *IF SREC # "" THEN    *CALL SWAP(SREC,'&','&amp;')    *CALL SWAP(SREC,'<','&lt;')    *CALL SWAP(SREC,'>','&gt;')    *LINENO = RECORD<2,1>    *IF LINENO MATCHES "1N0N" THEN      *START.LINE = LINENO - 3      *IF START.LINE < 0 THEN START.LINE = 1    *END ELSE LINENO = 1 ; START.LINE = 1    *END.LINE = LINENO + 3    *SOURCE.SNIP = \<code style="font-size:12px" >\    *FOR LN = START.LINE TO END.LINE      *LINE = LN "R#4":" ":SREC<LN>      *SOURCE.SNIP := LINE:'<br />'    *NEXT LN    *SOURCE.SNIP := '</code>'    *EDIT.LINK = '<a href="/dbc/MVDB.WEB.ED?ed_acct=':MD:'&ed_file=':FNAME:'&ed_item=':PROG:'" target="':MD:'_':FNAME:'_':PROG:'">Edit Source</a>'    *SOURCE.SNIP := EDIT.LINK  *END ELSE    *SOURCE.SNIP = 'Unable to open source code for ':RECORD<4>:' in account ':MD  *END  *DATE = FIELD(ID,'*',1)  *TIME = FIELD(ID,'*',2)  **  *W$HTML.DATA<-1> = '<tr valign="top"><td>':OCONV(DATE,'D2/'):" ":OCONV(TIME,'MTS'):'</td>'  *W$HTML.DATA<-1> = '<td>':USERPIB:'</td>'  *W$HTML.DATA<-1> = '<td>':DESC:'</td>'  *W$HTML.DATA<-1> = '</tr>'  *W$HTML.DATA<-1> = '<tr valign="top"><td>&nbsp;</td><td colspan="2">':SOURCE.SNIP:'</td></tr>'  *ERR.CNT += 1*UNTIL ERR.CNT > 100 DO REPEAT*W$HTML.DATA<-1> = '</table>'***W$LINK.LABEL<1> = "Clear Errors"*W$LINK.LOCATION<1> = '1'*W$LINK.UD.POS<1> = 1*W$LINK.UD.VAL<1> = 'CLEAR'***W$LINK.LABEL<2> = "Print"*W$LINK.LOCATION<2> = "C"*W$LINK.ICON<2> = "print.png"*W$LINK.URL<2> = "javascript:printThis(this);"***W$INPUT.PROMPT<1> = "User/Acct Filter"*W$INPUT.TYPE<1> = "TEXT"*W$INPUT.UDPOS<1> = 2*W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(2)***W$INPUT.PROMPT<2> = "Program Filter"*W$INPUT.TYPE<2> = "TEXT"*W$INPUT.UDPOS<2> = 3*W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(3)*RETURN0006B0SUB.SYS.ERRS0c2SUBROUTINE SUB.SYS.ERRS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Show system errors**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TABLE"W$TITLE = "Recent System Errors"W$WIDTH = 3*IF G$QUERYMODE = "1" THEN RETURN*OPEN '','SYSTEM-ERRORS' TO F.SYSTEM.ERRORS ELSE RETURN*XLINE = 'SSELECT SYSTEM-ERRORS BY-DSND DATE BY-DSND TIME'EXECUTE XLINE CAPTURING JUNK*W$TABLE.COL.LABELS = "Date":@VM:"Time":@VM:"Message":@VM:"Last TCL":@VM:"Pib / User":@VM:"Data"W$TABLE.COL.JUST = "right":@VM:"right"** User data 2 is the number of items to skip forward or backward. Calculate* the offset by adding this number to the current offset position in field 1.* Then clear out the skip fowrad/backward value.*WIDGET.USER.DATA(1) = WIDGET.USER.DATA(1) + WIDGET.USER.DATA(2)WIDGET.USER.DATA(2) = 0IF WIDGET.USER.DATA(1) < 0 THEN WIDGET.USER.DATA(1) = 0*IF WIDGET.USER.DATA(1) > 0 THEN  W$TITLE := " (":WIDGET.USER.DATA(1)+1:" - ":WIDGET.USER.DATA(1)+11:")"END*OFFSET = WIDGET.USER.DATA(1)FOR SKIPITEM = 1 TO OFFSET  READNEXT THROWAWAY ELSE EXITNEXT SKIPITEMFOR X = 1 TO 10  READNEXT ID ELSE EXIT  READ EREC FROM F.SYSTEM.ERRORS, ID THEN    W$TABLE.DATA<X,1> = OCONV( FIELD( ID,'*',1),'D2/')    W$TABLE.DATA<X,2> = OCONV( FIELD( ID,'*',2),'MTS')    W$TABLE.DATA<X,3> = EREC<4,1>    W$TABLE.DATA<X,4> = EREC<22,DCOUNT(EREC<22>,@VM)>    W$TABLE.DATA<X,5> = EREC<12,1>    W$TABLE.DATA<X,6> = EREC<5,1>  ENDNEXT X*W$LINK.LABEL<1,1> = "Prev 10"W$LINK.LABEL<1,2> = "Next 10"W$LINK.LOCATION<1,1> = "23"W$LINK.LOCATION<1,2> = "14"W$LINK.UD.POS<1,1> = 2W$LINK.UD.POS<1,2> = 2W$LINK.UD.VAL<1,1> = "-10"W$LINK.UD.VAL<1,2> = "10"*RETURN00022DUD.EXECUTE.STACKED.CMNDS0c2SUBROUTINE UD.EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,NUM.RETURNED,REPORT)*REPORT=''NUM.RETURNED=1LIST_VAR = 1IF STACKED.1 <> '' THEN   MDPERFORM STACKED.1 RTNLIST LIST_VAR RETURNING RETNO CAPTURING CAPT   IF INDEX(RETNO,'No data',1) OR INDEX(CAPT,'No data',1) THEN      NUM.RETURNED=0      RETURN    END   MDPERFORM STACKED.2 PASSLIST LIST_VAR CAPTURING REPORT END ELSE   MDPERFORM STACKED.2 CAPTURING REPORT ENDIF INDEX(REPORT,'No records',1) THEN   NUM.RETURNED=0 ENDCONVERT '$,' TO '' IN REPORTRETURNEND002557BUILD.SAMPLE.PORTAL.FILES0c2OPEN '','PORTAL.SALES' TO FI.SALES ELSE STOP 201,'PORTAL.SALES'OPEN '','PORTAL.AR' TO FI.AR ELSE STOP 201,'PORTAL.AR'OPEN '','PORTAL.AP' TO FI.AP ELSE STOP 201,'PORTAL.AP'READ SALES.1 FROM FI.SALES, 1 ELSE SALES.1=''READ AR.1 FROM FI.AR, 1 ELSE AR.1=''READ AP.1 FROM FI.AP, 1 ELSE AP.1=''IF SALES.1 <> '' AND AR.1 <> '' AND AP.1 <> '' THEN STOPOTODAY=OCONV(DATE(),'D4-')OYYYY=OTODAY[7,4]OMM=OTODAY[1,2]+0REPS=''REPS<-1>='GREG GRIFFIN'REPS<-1>='KELLEY JOHNSON'REPS<-1>='KEVIN PEPE'REPS<-1>='KIM GONZALEZ'REPS<-1>='MICHAEL HOUSE'REPS<-1>='MICHELLE BLACK'REPS<-1>='MITCH STREET'REPS<-1>='NATALIE MCFARLAND'REPS<-1>='PETE COX'REPS<-1>='PHIL CRAMER'REPS<-1>='ROBERT HUNT'REPS<-1>='STEVE SMITH'REPS<-1>='TAMMY HENDER'REPS<-1>='TIFFANEY MILLER'BRANCHES=''BRANCHES<-1>='CHICAGO'BRANCHES<-1>='DALLAS'BRANCHES<-1>='DENVER'BRANCHES<-1>='FLORIDA'BRANCHES<-1>='NEW YORK'BRANCHES<-1>='NORCAL'BRANCHES<-1>='SOCAL'BRANCHES<-1>='VEGAS'REGIONS=''REGIONS<-1>='CENTRAL'REGIONS<-1>='EAST'REGIONS<-1>='MOUNTAIN'REGIONS<-1>='WEST'EXECUTE "CLEAR-FILE DATA PORTAL.SALES" CAPTURING DUMMYJAN12016=ICONV('1-1-16','D')DATE.RANGE=DATE()-JAN12016FOR I = 1 TO 10000   SALES.REC=''   CLOSE.DATE=JAN12016 + RND(DATE.RANGE) + 1   SALES.REC<1>=CLOSE.DATE   RND.REP=RND(14)+1   IF RND.REP < 12 THEN      RND.PCT=((RND(10)+1)/10)      RND.REP=INT(RND.REP * RND.PCT + .5)      IF NOT(RND.REP) THEN RND.REP=1    END   REP=REPS<RND.REP>   SALES.REC<5>=REP   AMOUNT=RND(975000)+25000; * 250 TO 10000   SALES.REC<8>=AMOUNT   COST.PCT=RND(40) + 50; * 50 TO 90 PERCENT   COST.PCT=COST.PCT / 100   COST=INT(AMOUNT * COST.PCT + .5)   SALES.REC<9>=COST   RND.BRANCH=RND(8)+1   IF RND.BRANCH < 6 THEN      RND.PCT=((RND(10)+1)/10)      RND.BRANCH=INT(RND.BRANCH * RND.PCT + .5)      IF NOT(RND.BRANCH) THEN RND.BRANCH=1    END   BRANCH=BRANCHES<RND.BRANCH>   SALES.REC<13>=BRANCH   RND.REGION=RND(4)+1   IF RND.REGION < 4 THEN      RND.PCT=((RND(10)+1)/10)      RND.REGION=INT(RND.REGION * RND.PCT + .5)      IF NOT(RND.REGION) THEN RND.REGION=1    END   REGION=REGIONS<RND.REGION>   SALES.REC<14>=REGION   WRITE SALES.REC ON FI.SALES, I NEXT ICUSTS=''CUSTS<-1>="ABC Computers"CUSTS<-1>="ABC Electronics Corp"CUSTS<-1>="Ajax Computer Electronics"CUSTS<-1>="Alfreds Futterkiste"CUSTS<-1>="Ana Trujillo Emparedados y helados"CUSTS<-1>="Antonio Moreno Taqueria"CUSTS<-1>="Around the Horn"CUSTS<-1>="B'S Beverages"CUSTS<-1>="Bakers Goods"CUSTS<-1>="Berglunds snabbkop"CUSTS<-1>="Best Computer Company"CUSTS<-1>="Better Bytes"CUSTS<-1>="Better Computing"CUSTS<-1>="Better Connection"CUSTS<-1>="Bills Shoes & Gopeds"CUSTS<-1>="Bits and Bytes Inc"CUSTS<-1>="Blauer See Delikatessen"CUSTS<-1>="Blondel pere et fils"CUSTS<-1>="Bobs Used Cycles"CUSTS<-1>="Bon app"CUSTS<-1>="Bottom-Dollar Markets"CUSTS<-1>="Cactus Comidas para llevar"CUSTS<-1>="Centro comercial Moctezuma"CUSTS<-1>="Chop-suey Chinese"CUSTS<-1>="Classic Computers"CUSTS<-1>="Comp Data Inc."CUSTS<-1>="Comp Products"CUSTS<-1>="Computer Fancy"CUSTS<-1>="Computer Portables Inc."CUSTS<-1>="Computer Sitters"CUSTS<-1>="Computer Tech"CUSTS<-1>="Computer Tips"CUSTS<-1>="Computer Town"CUSTS<-1>="Computer Trainers"CUSTS<-1>="Computer Warehouse"CUSTS<-1>="Computers Etc."CUSTS<-1>="Computers Galore"CUSTS<-1>="Computers Inc.Systems"CUSTS<-1>="Computers N More"CUSTS<-1>="Computers R Us"CUSTS<-1>="Consolidated Holdings"CUSTS<-1>="Cyber Products"CUSTS<-1>="Data Bits"CUSTS<-1>="Data Comp"CUSTS<-1>="Data Net"CUSTS<-1>="Die Wandernde Kuh"CUSTS<-1>="Disk Products"CUSTS<-1>="Disks N More"CUSTS<-1>="Drachenblut Delikatessen"CUSTS<-1>="Du monde entier"CUSTS<-1>="Eastern Connection"CUSTS<-1>="Electronic Company"CUSTS<-1>="Ernst Handel"CUSTS<-1>="Familia Arquibaldo"CUSTS<-1>="FISSA Fabrica Inter. Salchichas S.A."CUSTS<-1>="Folies gourmandes"CUSTS<-1>="For Computers Inc."CUSTS<-1>="France restauration"CUSTS<-1>="Franchi S.p.A."CUSTS<-1>="Frankenversand"CUSTS<-1>="Furia Bacalhau e Frutos do Mar"CUSTS<-1>="Future Computers"CUSTS<-1>="Future In Computing"CUSTS<-1>="Galeria del gastronomo"CUSTS<-1>="Godos Cocina Tipica"CUSTS<-1>="Gourmet Lanchonetes"CUSTS<-1>="Great Lakes Food Market"CUSTS<-1>="GROSELLA-Restaurante"CUSTS<-1>="Hanari Carnes"CUSTS<-1>="HILARION-Abastos"CUSTS<-1>="Hungry Coyote Import Store"CUSTS<-1>="HUNGRY HOWIES PIZZA"CUSTS<-1>="Hungry Owl All-Night Grocers"CUSTS<-1>="Intercom Products"CUSTS<-1>="Island Trading"CUSTS<-1>="Joe'S Computers"CUSTS<-1>="Koniglich Essen"CUSTS<-1>="La corne d'abondance"CUSTS<-1>="Lazy K Kountry Store"CUSTS<-1>="Lehmanns Marktstand"CUSTS<-1>="Let'S Stop N Shop"CUSTS<-1>="LILA-Supermercado"CUSTS<-1>="LINO-Delicateses"CUSTS<-1>="Logical Computers"CUSTS<-1>="Lonesome Pine Restaurant"CUSTS<-1>="Longo Toyota"CUSTS<-1>="Magazzini Alimentari Riuniti"CUSTS<-1>="Memory Capturers"CUSTS<-1>="Memory Plus Inc."CUSTS<-1>="Modem Products"CUSTS<-1>="Morgenstern Gesundkost"CUSTS<-1>="Net Connect"CUSTS<-1>="North/South"CUSTS<-1>="Number One in Computing"CUSTS<-1>="Oceano Atlantico Ltda."CUSTS<-1>="Old World Delicatessen"CUSTS<-1>="Ones & Zeros Inc."CUSTS<-1>="Ottilies Kaseladen"CUSTS<-1>="Paris specialites"CUSTS<-1>="Pericles Comidas clasicas"CUSTS<-1>="Piccolo und mehr"CUSTS<-1>="Printer Products"CUSTS<-1>="Que Delicia"CUSTS<-1>="Queen Cozinha"CUSTS<-1>="QUICK-Stop"CUSTS<-1>="Rancho grande"CUSTS<-1>="Rattlesnake Canyon Grocery"CUSTS<-1>="Real Computers"CUSTS<-1>="Reggiani Caseifici"CUSTS<-1>="Ricardo Adocicados"CUSTS<-1>="Richter Supermarkt"CUSTS<-1>="Sante Gourmet"CUSTS<-1>="Save-a-lot Markets"CUSTS<-1>="Secure Computers"CUSTS<-1>="Seven Seas Imports"CUSTS<-1>="Software Inc"CUSTS<-1>="Specialites du monde"CUSTS<-1>="Split Rail Beer & Ale"CUSTS<-1>="Supremes delices"CUSTS<-1>="The Big Cheese"CUSTS<-1>="The Cracker Box"CUSTS<-1>="The Only Computers"CUSTS<-1>="Tortuga Restaurante"CUSTS<-1>="Tradicao Hipermercados"CUSTS<-1>="Trail'S Head Gourmet Provisioners"CUSTS<-1>="TRG"CUSTS<-1>="USA Computers"CUSTS<-1>="Victuailles en stock"CUSTS<-1>="Vins et alcools Chevalier"CUSTS<-1>="Wartian Herkku"CUSTS<-1>="Wellington Importadora"CUSTS<-1>="White Clover Markets"CUSTS<-1>="White House"CUSTS<-1>="Wilman Kala"CUSTS<-1>="Wolski  Zajazd"EXECUTE "CLEAR-FILE DATA PORTAL.AR" CAPTURING DUMMYFOR I = 1 TO 5000   AR.REC=""   CUST=CUSTS<RND(135)+1>   AR.REC<1>=CUST   PCT=RND(100)+1   IF PCT > 4 THEN      * PAID      QTR=RND(18)+1; * BASED ON DATE BEFORE 7-1-20      BEGIN CASE         CASE OYYYY > 2020; QTR+=2         CASE OMM >= 10; QTR+=2         CASE OMM >= 7;  QTR+=1      END CASE      BEGIN CASE         CASE QTR <= 4;   * 2016            BREAKS=71:@AM:87:@AM:93            BOY=ICONV("01-01-16","D")            QTR.IN.YEAR=QTR         CASE QTR <= 8;   * 2017            BREAKS=73:@AM:89:@AM:94            BOY=ICONV("01-01-17","D")            QTR.IN.YEAR=QTR-4         CASE QTR <= 12;   * 2018            BREAKS=77:@AM:89:@AM:94            BOY=ICONV("01-01-18","D")            QTR.IN.YEAR=QTR-8         CASE QTR <= 16;   * 2019            BREAKS=77:@AM:90:@AM:94            BOY=ICONV("01-01-19","D")            QTR.IN.YEAR=QTR-12         CASE 1;          * 2020            BREAKS=71:@AM:87:@AM:93            BOY=ICONV("01-01-20","D")            QTR.IN.YEAR=QTR-16      END CASE      BOQ=BOY + (QTR.IN.YEAR-1)*90      DATE.PAID=BOQ + RND(90) + 1      DAYS.IN.PERIOD=RND(30)+1      PCT=RND(100)      LOCATE PCT IN BREAKS BY "AR" SETTING CATEGORY ELSE NULL      MOS.BEFORE=CATEGORY-1      DUE.DATE=DATE.PAID - (MOS.BEFORE*30) - DAYS.IN.PERIOD      AR.REC<20>=DUE.DATE      AR.REC<8>=DATE.PAID      AR.REC<50>=0; * BALANCE      AMOUNT=RND(975000)+25000; * 250 TO 10000      AR.REC<6>=AMOUNT      WRITE AR.REC ON FI.AR, I    END ELSE      BREAKS=60:@AM:81:@AM:91:@AM:96      PCT=RND(100)+1      LOCATE PCT IN BREAKS BY "AR" SETTING CATEGORY ELSE NULL      DAY.IN.MONTH=RND(30)      BEGIN CASE         CASE CATEGORY = 1            * NOT YET DUE            DUE.DATE=DATE()+DAY.IN.MONTH         CASE CATEGORY = 2            * 1-30            DUE.DATE=DATE()-DAY.IN.MONTH         CASE CATEGORY = 3            * 31-60            DUE.DATE=DATE() - (30 + DAY.IN.MONTH)         CASE CATEGORY = 4            * 60-90            DUE.DATE=DATE() - (60 + DAY.IN.MONTH)         CASE 1            * 90+            DUE.DATE=DATE() - (90 + RND(120))      END CASE      AR.REC<20>=DUE.DATE      AR.REC<8>=''; * DATE PAID      AMOUNT=RND(975000)+25000; * 250 TO 10000      AR.REC<6>=AMOUNT      AR.REC<50>=AMOUNT; * BALANCE      WRITE AR.REC ON FI.AR, I    END NEXT IEXECUTE "CLEAR-FILE DATA PORTAL.AP" CAPTURING DUMMYFOR I = 1 TO 100   AP.REC=""   BREAKS=56:@AM:90:@AM:95:@AM:97   PCT=RND(100)+1   LOCATE PCT IN BREAKS BY "AR" SETTING CATEGORY ELSE NULL   DAY.IN.MONTH=RND(30)   BEGIN CASE      CASE CATEGORY = 1         * NOT YET DUE         DUE.DATE=DATE()+DAY.IN.MONTH      CASE CATEGORY = 2         * 1-30         DUE.DATE=DATE()-DAY.IN.MONTH      CASE CATEGORY = 3         * 31-60         DUE.DATE=DATE() - (30 + DAY.IN.MONTH)      CASE CATEGORY = 4         * 60-90         DUE.DATE=DATE() - (60 + DAY.IN.MONTH)      CASE 1         * 90+         DUE.DATE=DATE() - (90 + DAY.IN.MONTH)   END CASE   AP.REC<20>=DUE.DATE   AP.REC<8>=''; * DATE PAID   AMOUNT=RND(975000)+25000; * 250 TO 10000   AP.REC<6>=AMOUNT   AP.REC<50>=AMOUNT; * BALANCE   WRITE AP.REC ON FI.AP, I NEXT I000715SUB.DEMO.MAP.CANADA0c2SUBROUTINE SUB.DEMO.MAP.CANADA** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: US Map demonstration* 6-1-15 ZUMASYS CONVERT MAP.DATA ID DELIMETER FROM * TO #** Modified by Peter Schellenbach of Zumasys 06-08-15:*  Changed test of ENUM after EXECUTE to test SYSTEM(11) instead.**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Canadian Provinces by Alphabet"W$TYPE = "MAP:Canada"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'*W$CHART.OPTIONS<-1> = 'animation="0"'W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'W$CHART.OPTIONS<-1> = 'legendShadow="1"'W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'**6-1-15*EXECUTE \SSELECT MVDB.MAP.DATA = "CANADA*]" BY A1\ RETURNING ENUM CAPTURING ETXTEXECUTE \SSELECT MVDB.MAP.DATA = "CANADA#]" BY A1\ RETURNING ENUM CAPTURING ETXT; *6-1-15*PJS 06-08-15*IF ENUM[1,3]="404" THENIF SYSTEM(11) THEN ; *PJS 06-08-15* LOOP   READNEXT ID ELSE ID="\\EOF" UNTIL ID="\\EOF" DO   READ I FROM F.MVDB.MAP.DATA,ID THEN*6-1-15*     W$MAP.IDS<1,-1> = FIELD(ID,'*',2)     W$MAP.IDS<1,-1> = FIELD(ID,'#',2); *6-1-15*     W$MAP.VALUES<1,-1> = (SEQ(I<1>[1,1]) - (SEQ('A')-1))     W$MAP.VALUE.TOOLTEXT<1,-1> := I<2>:' (':I<1>:')'   END REPEATEND*W$MAP.RANGE.NAME<1,1> = "Early in Alphabet"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "10"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Middle of Alphabet"W$MAP.RANGE.LOW<1,2> = "10"W$MAP.RANGE.HIGH<1,2> = "18"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Late in Alphabet"W$MAP.RANGE.LOW<1,3> = "18"W$MAP.RANGE.HIGH<1,3> = "27"W$MAP.RANGE.COLOR<1,3> = "RED"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN00029ESUB.DEMO.DNUT0c2SUBROUTINE SUB.DEMO.DNUT** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Doughnut Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Defects by Reason"W$TYPE = "FCDOUGHNUT2D"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*CATEG = ""CATEG<1> = 20CATEG<2> = 30CATEG<3> = 20CATEG<4> = 9*CATEG.NAMES = ''CATEG.NAMES<1> = "Choices"CATEG.NAMES<2> = "Material"CATEG.NAMES<3> = "Errors"CATEG.NAMES<4> = "Shipping"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$PIE.LABELS<1,N> = CATEG.NAMES<N>  W$PIE.VALUES<1,N> = CATEG<N>NEXT NW$PIE.CAPTION = "Defects"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN00250AREFRESH.DASHBOARD.CLOSING.STATS0c2HAVE.AR=1OPEN '','AR' TO FI.AR ELSE HAVE.AR=0IF HAVE.AR THEN   AR.CNTR=0   LOOP      AR.CNTR+=1      READ BULK.AR FROM FI.AR, 'AR.':AR.CNTR ELSE BULK.AR=''      MAX.ROWS=DCOUNT(BULK.AR,CHAR(254))   UNTIL NOT(MAX.ROWS) DOCRT 'AR.':AR.CNTR      DELETE FI.AR, 'AR.':AR.CNTR      AR.REC=''      AR.ID=''      REC.ROW=0      BULK.AR=OCONV(BULK.AR,'MCU')      FOR ROW.NO = 1 TO MAX.ROWS         ROW=BULK.AR<ROW.NO>         IF ROW[1,2] = '%%' THEN            IF AR.REC <> '' THEN               WRITE AR.REC ON FI.AR, AR.ID             END            AR.REC=''            AR.ID=FIELD(ROW,'%',3)            REC.ROW=0          END ELSE            REC.ROW+=1            AR.REC<REC.ROW>=ROW          END       NEXT ROW.NO      IF AR.REC <> '' THEN         WRITE AR.REC ON FI.AR, AR.ID       END   REPEAT ENDHAVE.AP=1OPEN '','AP' TO FI.AP ELSE HAVE.AP=0IF HAVE.AP THEN   AP.CNTR=0   LOOP      AP.CNTR+=1      READ BULK.AP FROM FI.AP, 'AP.':AP.CNTR ELSE BULK.AP=''      MAX.ROWS=DCOUNT(BULK.AP,CHAR(254))   UNTIL NOT(MAX.ROWS) DOCRT 'AP.':AP.CNTR      DELETE FI.AP, 'AP.':AP.CNTR      AP.REC=''      AP.ID=''      REC.ROW=0      BULK.AP=OCONV(BULK.AP,'MCU')      FOR ROW.NO = 1 TO MAX.ROWS         ROW=BULK.AP<ROW.NO>         IF ROW[1,2] = '%%' THEN            IF AP.REC <> '' THEN               WRITE AP.REC ON FI.AP, AP.ID             END            AP.REC=''            AP.ID=FIELD(ROW,'%',3)            REC.ROW=0          END ELSE            REC.ROW+=1            AP.REC<REC.ROW>=ROW          END       NEXT ROW.NO      IF AP.REC <> '' THEN         WRITE AP.REC ON FI.AP, AP.ID       END   REPEAT ENDHAVE.SALES=1OPEN '','SALES' TO FI.SALES ELSE HAVE.SALES=0IF HAVE.SALES THEN   SALES.CNTR=0   LOOP      SALES.CNTR+=1      READ BULK.SALES FROM FI.SALES, 'SALES.':SALES.CNTR ELSE BULK.SALES=''      MAX.ROWS=DCOUNT(BULK.SALES,CHAR(254))   UNTIL NOT(MAX.ROWS) DO      DELETE FI.SALES, 'SALES.':SALES.CNTR      SALES.REC=''      SALES.ID=''      REC.ROW=0      BULK.SALES=OCONV(BULK.SALES,'MCU')      FOR ROW.NO = 1 TO MAX.ROWS         ROW=BULK.SALES<ROW.NO>         IF ROW[1,2] = '%%' THEN            IF SALES.REC <> '' THEN               WRITE SALES.REC ON FI.SALES, SALES.ID             END            SALES.REC=''            SALES.ID=FIELD(ROW,'%',3)            REC.ROW=0          END ELSE            REC.ROW+=1            SALES.REC<REC.ROW>=ROW          END       NEXT ROW.NO      IF SALES.REC <> '' THEN         WRITE SALES.REC ON FI.SALES, SALES.ID       END   REPEAT ENDEXECUTE "TERM 132" CAPTURING DUMMYOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE NULLERRORS=''OPEN '','DASHBOARD.CLOSING.STATS' TO FI.CLOSING.STATS ELSE ERRORS<-1>='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'HAVE.DICT.STATS=1OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.CLOSING.STATS ELSE HAVE.DICT.STATS=0; ERRORS<-1>='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE NULLIF ERRORS <> '' THEN   WRITE ERRORS ON FI.MVDB.CONTROL, 'CLOSING.STATS.ERRORS'   IF HAVE.DICT.STATS THEN      WRITE 'CLOSING.STATS.ERRORS' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'    END   STOP ENDREAD PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'END CASE*DIM SETUP.PARAMS(30)MATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' ENDEQUATE ACCOUNT TO SETUP.PARAMS(1)EQUATE REPORT.FILE TO SETUP.PARAMS(2)EQUATE SALE.DATE.DICT TO SETUP.PARAMS(3)EQUATE SALE.MONTH.DICT TO SETUP.PARAMS(4)EQUATE SALE.YEAR.DICT TO SETUP.PARAMS(5)EQUATE SALE.AMOUNT.DICT TO SETUP.PARAMS(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO SETUP.PARAMS(7)EQUATE SALESMAN.DICT TO SETUP.PARAMS(8)EQUATE BRANCH.DICT TO SETUP.PARAMS(9)EQUATE REGION.DICT TO SETUP.PARAMS(10)EQUATE SALE.DATE.AMC TO SETUP.PARAMS(11)EQUATE SALE.AMOUNT.AMC TO SETUP.PARAMS(12)EQUATE SALE.AMOUNT.CONV TO SETUP.PARAMS(13)EQUATE SALE.AMOUNT.COOR TO SETUP.PARAMS(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO SETUP.PARAMS(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO SETUP.PARAMS(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO SETUP.PARAMS(17)EQUATE SALESMAN.AMC TO SETUP.PARAMS(18)EQUATE SALESMAN.TFILE TO SETUP.PARAMS(19)EQUATE BRANCH.AMC TO SETUP.PARAMS(20)EQUATE BRANCH.TFILE TO SETUP.PARAMS(21)EQUATE REGION.AMC TO SETUP.PARAMS(22)EQUATE REGION.TFILE TO SETUP.PARAMS(23)***FILE.PATH=ACCOUNT:',':REPORT.FILE:','FILE.PATH='DASHBOARD.SALES.FILE'*WRITE 'UPDATING' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'ODATE=OCONV(DATE(),'D4-')YYYY=ODATE[7,4]FIRST.YYYY=YYYY-4CMND='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YYYY:'"'EXECUTE CMND CAPTURING DUMMYSYSTEM.11=0LOOP   READNEXT DCS.ID ELSE DCS.ID='DONE'UNTIL DCS.ID = 'DONE' DO   SYSTEM.11=1   DELETE FI.CLOSING.STATS, DCS.IDREPEATIF SYSTEM.11 THEN   IF PLATFORM = 'D3' THEN      READV INDEX.DEFS FROM FI.DICT.CLOSING.STATS, 'DASHBOARD.CLOSING.STATS', 8 ELSE INDEX.DEFS=''      IF NOT(INDEX(INDEX.DEFS,'(G*1)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G*1)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G2*1)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G2*1)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G*2)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G*2)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G1*2)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G1*2)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G1*1)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G1*1)" CAPTURING DUMMY         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G3*1)" CAPTURING DUMMY         EXECUTE 'CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G3*1):"*":0(G1*1)' CAPTURING DUMMY       END    END ELSE      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS SALESMAN" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS BRANCH" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS SALESMAN*YYYYMM" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS YYYYMM*BRANCH" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS YYYYMM" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS REGION" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS REGION*YYYYMM" CAPTURING DUMMY    END END*FOR YEAR = FIRST.YYYY TO YYYY    WRITE 'UPDATING ':YEAR ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'   *  ** DO FOR EACH YEAR SEPARATELY TO LIMIT SIZE OF LIST RETURNING   *   STACKED.1='SELECT ':FILE.PATH:' WITH ':SALE.YEAR.DICT:' = "':YEAR:'"'**WRITE DUMMY ON FI.DICT.CLOSING.STATS, '*124.SELECT'   STACKED.2='SORT ':FILE.PATH:' WITH ':SALESMAN.DICT:' # "" BY ':SALE.MONTH.DICT:' BY ':SALESMAN.DICT:' ID-SUPP ':SALE.MONTH.DICT:' PIPE ':SALESMAN.DICT:' PIPE ':SALE.AMOUNT.DICT:' PIPE ':COST.OF.SALE.AMOUNT.DICT   STACKED.2:=' PIPE ':BRANCH.DICT:' PIPE ':REGION.DICT   STACKED.2:=' HDR-SUPP COL-HDR-SUPP NOPAGE'   CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)   IF SYSTEM.11 THEN      MAX.ROWS=DCOUNT(REPORT,CHAR(254))      STATS.IDS=''      STATS.AMTS=''      STATS.COS.AMTS=''      STATS.IDS.CNTR=0      FOR ROW.NO = 1 TO MAX.ROWS         ROW=REPORT<ROW.NO>         IF INDEX(ROW,'|',1) THEN            MONTH=TRIM(FIELD(ROW,'|',1))+0            IF MONTH < 10 THEN               YYYYMM=YEAR:'0':MONTH             END ELSE YYYYMM=YEAR:MONTH            REP=TRIM(FIELD(ROW,'|',2))            AMOUNT=TRIM(FIELD(ROW,'|',3))            CONVERT '$,' TO '' IN AMOUNT            AMOUNT=ICONV(AMOUNT,'MD2')            IF NOT(NUM(AMOUNT)) THEN AMOUNT=0            COST.OF.SALE.AMOUNT=TRIM(FIELD(ROW,'|',4))            CONVERT '$,' TO '' IN COST.OF.SALE.AMOUNT            COST.OF.SALE.AMOUNT=ICONV(COST.OF.SALE.AMOUNT,'MD2')            IF NOT(NUM(COST.OF.SALE.AMOUNT)) THEN COST.OF.SALE.AMOUNT=0            IF AMOUNT OR COST.OF.SALE.AMOUNT THEN               BRANCH=TRIM(FIELD(ROW,'|',5))               REGION=TRIM(FIELD(ROW,'|',6))               STATS.ID=REP:'*':YYYYMM:'*':BRANCH:'*':REGION               LOCATE STATS.ID IN STATS.IDS SETTING STATS.PNTR ELSE                  STATS.IDS.CNTR+=1                  STATS.PNTR=STATS.IDS.CNTR                  STATS.IDS<STATS.PNTR>=STATS.ID                END               STATS.AMTS<STATS.PNTR>+=AMOUNT               STATS.COS.AMTS<STATS.PNTR>+=COST.OF.SALE.AMOUNT             END          END       NEXT ROW.NO      MAX.STATS.IDS=DCOUNT(STATS.IDS,CHAR(254))      FOR ID.CNTR = 1 TO MAX.STATS.IDS         AMOUNT=STATS.AMTS<ID.CNTR>         COST.OF.SALE.AMOUNT=STATS.COS.AMTS<ID.CNTR>         IF AMOUNT > 0 OR COST.OF.SALE.AMOUNT THEN            WRITE AMOUNT:CHAR(254):COST.OF.SALE.AMOUNT ON FI.CLOSING.STATS, STATS.IDS<ID.CNTR>          END       NEXT ID.CNTR    END NEXT YEARTIME.STAMP=TIME()TIME.STAMP=FIELD(TIME.STAMP,'.',1)TIME.STAMP=STR('0',5-LEN(TIME.STAMP)):TIME.STAMPWRITE DATE():TIME.STAMP ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'WRITE DATE():TIME.STAMP ON FI.DICT.CLOSING.STATS, '*LAST.UPDATED'END0002FASUB.PORTAL.REPORTS.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.REPORTS.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Portal Reports Documentation"W$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here*OPEN '','WEB.FORMS' TO FI.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FI.WEB.FORMS, 'PORTAL.REPORT.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000667SUB.FREE0c2SUBROUTINE SUB.FREE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Display disk usage*INCLUDE WBPD MVDB.INCLUDE*IF WIDGET.USER.DATA(1) = "TEXT" THEN  W$TYPE = "TEXT"  W$PRINTABLE = 1END ELSE  W$TYPE = "FC3DPIE"ENDW$TITLE = "D3 Free Space"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "TEXT" THEN  W$TITLE := ' (Text Display)'  EXECUTE "FREE" CAPTURING OUTPUT  W$TEXT.DATA = OUTPUTEND ELSE  W$TITLE := ' (Chart Display)'  EXECUTE "WHAT (LSW" CAPTURING WHAT  ATTR = DCOUNT(WHAT,@AM)  LOOP WHILE WHAT<ATTR> = "" DO ATTR -= 1 REPEAT  *  WHAT = TRIM(WHAT<ATTR>)  FRAMESIZE = FIELD(WHAT, ' ', 8)  MAXFID = FIELD( WHAT, ' ', 6 )  SYSBASE = FIELD( WHAT, ' ', 4 )  SYS.BYTE = SYSBASE * FRAMESIZE  SYS.FRAME = SYS.BYTE/FRAMESIZE  AVAIL.FRAME = FIELD( WHAT, ' ', 7 )  USED.FRAME = (MAXFID-SYSBASE)-AVAIL.FRAME  *  MAXBYTE = MAXFID * FRAMESIZE  MAXMB = ICONV(MAXBYTE/1000000,"MD0")  SYS.MB = SYS.BYTE/1000000  USED.BYTE = USED.FRAME * FRAMESIZE  USED.MB = USED.BYTE/1000000  AVAIL.BYTE = AVAIL.FRAME * FRAMESIZE  AVAIL.MB = AVAIL.BYTE/1000000  *  W$PIE.LABELS<1,1> = "Used (":OCONV(SYS.MB+USED.MB,'MD0,'):")"  W$PIE.LABELS<1,2> = "Available (":OCONV(AVAIL.MB,'MD0,'):")"  *  W$PIE.VALUES<1,1> = SYS.MB+USED.MB  W$PIE.VALUES<1,2> = AVAIL.MB  *  W$PIE.CAPTION = "D3 Free Space"END** Set up links*W$LINK.LABEL<1,1> = "Pie"W$LINK.LABEL<1,2> = "Text"W$LINK.LOCATION<1,1> = "2"W$LINK.LOCATION<1,2> = "2"W$LINK.UD.POS<1,1> = 1W$LINK.UD.POS<1,2> = 1W$LINK.UD.VAL<1,1> = "FC3DPIE"W$LINK.UD.VAL<1,2> = "TEXT"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN	0002FESUB.PORTAL.RUN.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.RUN.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Running the Portal Dashboard Reports"W$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here*OPEN '','WEB.FORMS' TO FI.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FI.WEB.FORMS, 'PORTAL.REPORT.RUN.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000925SUB.DEMO.BULLETXX0c2    SUBROUTINE SUB.DEMO.BULLETXX* Changed by PORTBAS -> SUBROUTINE SUB.DEMO.BULLET* @(#) SUB.DEMO.BULLETXX Ported to jBASE 17:55:31  08 JUL 2015** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Bullet widget demo**#MAKE# RL $OPTIONS D3    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Bullet Chart Demo - Sales Volume"    W$TYPE = "VBULLET"    W$WIDTH = 2*    IF G$QUERYMODE THEN RETURN*    IF WIDGET.USER.DATA(1) # "" THEN        W$TYPE = WIDGET.USER.DATA(1)    END ELSE WIDGET.USER.DATA(1) = "VBULLET"    IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1    PALETTE = WIDGET.USER.DATA(2)*    W$FW.LOWER.LIMIT = 0    W$FW.UPPER.LIMIT = 800000*    W$FW.COLOR.RANGE<1,1> = 0    W$FW.COLOR.RANGE<2,1> = 400000    W$FW.COLOR.RANGE<3,1> = "RED"*    W$FW.COLOR.RANGE<1,2> = 400000    W$FW.COLOR.RANGE<2,2> = 650000    W$FW.COLOR.RANGE<3,2> = "YELLOW"*    W$FW.COLOR.RANGE<1,3> = 650000    W$FW.COLOR.RANGE<2,3> = 800000    W$FW.COLOR.RANGE<3,3> = "GREEN"*    W$FW.METER.VALUE = 725000    W$FW.METER.TARGET = 775000*    W$FW.CAPTION = "July Sales"    W$FW.SUBCAPTION = "Billings"    W$FW.CHART.PALETTE = PALETTE*    W$FW.NUMBER.PREFIX = "$"    W$FW.NUMBER.SUFFIX = ""*    W$FW.TICKMARKS<1> = 1     ;* Display tickmarks    W$FW.TICKMARKS<2> = 1     ;* Display values by tickmarks    W$FW.TICKMARKS<3> = "B"   ;* Show tickmarks below the graph    W$FW.TICKMARKS<4> = ""    ;* Let it calculate this    W$FW.TICKMARKS<5> = 4     ;* 4 minor tickmarks between the major ones**W$CHART.OPTIONS = "paletteThemeColor='#a2287a'"*    W$FW.DD.WIDGET<1,1> = "Drilldown Demo"    W$FW.DD.UD.POS<1,1,1> = 1    W$FW.DD.UD.VAL<1,1,1> = W$FW.METER.VALUE    W$FW.DD.UD.POS<1,1,2> = 2    W$FW.DD.UD.VAL<1,1,2> = WIDGET.USER.DATA(1)*    W$INPUT.PROMPT = "Bullet Chart Style"    W$INPUT.TYPE = "SELECT"    W$INPUT.SELOPTS = "Horizontal":@VM:"Vertical"    W$INPUT.SELVALS = "HBULLET":@VM:"VBULLET"    W$INPUT.UDPOS = 1    W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*    W$INPUT.PROMPT<2> = "Palette"    W$INPUT.TYPE<2> = "SELECT"    W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"    W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"    W$INPUT.UDPOS<2> = 2    W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*    INCLUDE WBPD SOURCE.VIEW.ICON*    RETURN000478SUB.DEMO.SS.LINE0c2SUBROUTINE SUB.DEMO.SS.LINE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Single Series Line Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Monthly Sales Summary"W$TYPE = "FCLINE"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*W$BAR.LABELS = "Sales (USD)"W$BAR.CAPTION = "Monthly Sales (USD)"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Sales (USD)"*SALES = ""SALES<1> = "28452536"SALES<2> = "31208425"SALES<3> = "30245519"SALES<4> = "40425111"SALES<5> = "36515188"SALES<6> = "39144100"SALES<7> = "41655215"SALES<8> = "36615152"SALES<9> = "43944161"SALES<10> = "42251594"SALES<11> = "48833151"SALES<12> = "50122415"*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = OCONV(SALES<N>,'MD02')*  W$BAR.XLABELS<1,N> = OCONV(ICONV(N:"/1",'D'),'DMA')[1,1]  W$BAR.XLABELS<1,N> = OCONV(N*30-15,'DMA')[1,3]NEXT N*W$BAR.TREND.BEG = OCONV(SALES<1>,'MD02')W$BAR.TREND.END = OCONV(SALES<12>,'MD02')W$BAR.TREND.OPTS = "thickness='2' displayValue='Trend'"W$CHART.OPTIONS<-1> = "showValues='0'"W$CHART.OPTIONS<-1> = "animation='1'"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0020BFBUILD.DEMO.FINANCIAL.PICTURE0c2SUBROUTINE BUILD.DEMO.FINANCIAL.PICTURE(YYYY,TODAY,LAST.EOM)OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''REC<1>=YYYYREC<2>=YYYY-1REC<3>=YYYY-1LAST.THREE=YYYY-2:CHAR(253):YYYY-1:CHAR(253):YYYY*OPEN '','MVDB.CONTROL' TO FILE.SALES ELSE STOP 201,'SALES'READ THIS.YEAR.SALES FROM FILE.SALES, 'MONTHLY.':YYYY ELSE THIS.YEAR.SALES=''READ LAST.YEAR.SALES FROM FILE.SALES, 'MONTHLY.':(YYYY-1) ELSE LAST.YEAR.SALES=''READ PREV.YEAR.SALES FROM FILE.SALES, 'MONTHLY.':(YYYY-2) ELSE PREV.YEAR.SALES=''READ PREV.YEAR.GPS FROM FILE.SALES, 'MONTHLY.GPS.':(YYYY-2) ELSE SALES.2.YEARS.AGO=''READ THIS.YEAR.GPS FROM FILE.SALES, 'MONTHLY.GPS.':YYYY ELSE THIS.YEAR.GPS=''READ LAST.YEAR.GPS FROM FILE.SALES, 'MONTHLY.GPS.':(YYYY-1) ELSE LAST.YEAR.GPS=''READ THIS.YEAR.PARTS FROM FILE.SALES, 'MONTHLY.PARTS.':YYYY ELSE THIS.YEAR.PARTS=''READ LAST.YEAR.PARTS FROM FILE.SALES, 'MONTHLY.PARTS.':(YYYY-1) ELSE LAST.YEAR.PARTS=''READ THIS.YEAR.SERVICES FROM FILE.SALES, 'MONTHLY.SERVICES.':YYYY ELSE THIS.YEAR.SERVICES=''READ LAST.YEAR.SERVICES FROM FILE.SALES, 'MONTHLY.SERVICES.':(YYYY-1) ELSE LAST.YEAR.SERVICES=''FY.LAST=SUM(LAST.YEAR.SALES)REC<7>=FY.LASTFY.PARTS=SUM(LAST.YEAR.PARTS)REC<18>=FY.PARTSFY.SERVICES=SUM(LAST.YEAR.SERVICES)REC<25>=FY.SERVICESLAST.MONTH.NO=OCONV(LAST.EOM,'D2-')[1,2]+0YTD.THIS=0YTD.LAST=0YTD.PREV=0GPS.THIS=0GPS.LAST=0GPS.PREV=0PARTS.THIS=0PARTS.LAST=0SERVICES.THIS=0SERVICES.LAST=0THIS.YEAR.MONTHLY.SALES=''THIS.YEAR.MONTHLY.GPS=''FOR MO.NO = 1 TO LAST.MONTH.NO   YTD.THIS+=THIS.YEAR.SALES<MO.NO>   THIS.YEAR.MONTHLY.SALES<1,1,MO.NO>=THIS.YEAR.SALES<MO.NO>   YTD.LAST+=LAST.YEAR.SALES<MO.NO>   YTD.PREV+=PREV.YEAR.SALES<MO.NO>   GPS.THIS+=THIS.YEAR.GPS<MO.NO>   THIS.YEAR.MONTHLY.GPS<1,1,MO.NO>=THIS.YEAR.GPS<MO.NO>   GPS.LAST+=LAST.YEAR.GPS<MO.NO>   GPS.PREV+=PREV.YEAR.GPS<MO.NO>   PARTS.THIS+=THIS.YEAR.PARTS<MO.NO>   PARTS.LAST+=LAST.YEAR.PARTS<MO.NO>   SERVICES.THIS+=THIS.YEAR.SERVICES<MO.NO>   SERVICES.LAST+=LAST.YEAR.SERVICES<MO.NO> NEXT MO.NOREC<67>=LAST.THREEREC<68,3>=THIS.YEAR.MONTHLY.SALESREC<69,3>=THIS.YEAR.MONTHLY.GPSREC<36>=YTD.PREVREC<37>=GPS.PREVCONVERT CHAR(254) TO CHAR(252) IN PREV.YEAR.SALESREC<68,1>=PREV.YEAR.SALESCONVERT CHAR(254) TO CHAR(252) IN PREV.YEAR.GPSREC<69,1>=PREV.YEAR.GPSCONVERT CHAR(254) TO CHAR(252) IN LAST.YEAR.SALESREC<68,2>=LAST.YEAR.SALESCONVERT CHAR(254) TO CHAR(252) IN LAST.YEAR.GPSREC<69,2>=LAST.YEAR.GPSLAST.FY.GPS=SUM(LAST.YEAR.GPS)REC<4>=YTD.THISREC<5>=YTD.LASTDELTA.SALES=YTD.THIS-YTD.LASTDELTA.PCT=(DELTA.SALES*100)/YTD.LASTREC<6>=DELTA.PCTREC<8>=GPS.THISREC<9>=GPS.LASTDELTA.GPS=GPS.THIS-GPS.LASTDELTA.PCT=(DELTA.GPS*100)/GPS.LASTREC<10>=DELTA.PCTREC<11>=LAST.FY.GPSTHIS.GPS.PCT=INT(GPS.THIS * 1000 / YTD.THIS + .5)REC<12>=THIS.GPS.PCTLAST.GPS.PCT=INT(GPS.LAST * 1000 / YTD.LAST + .5)PREV.GPS.PCT=INT(GPS.PREV * 1000 / YTD.PREV + .5)REC<13>=LAST.GPS.PCTFY.LAST.GPS.PCT=INT(LAST.FY.GPS * 1000 / FY.LAST + .5)REC<14>=FY.LAST.GPS.PCTREC<15>=PARTS.THISREC<22>=SERVICES.THISREC<16>=PARTS.LASTREC<23>=SERVICES.LASTDELTA.PARTS=PARTS.THIS-PARTS.LASTDELTA.PARTS.PCT=(DELTA.PARTS*100)/PARTS.LASTREC<17>=DELTA.PARTS.PCTDELTA.SERVICES=SERVICES.THIS-SERVICES.LASTDELTA.SERVICES.PCT=(DELTA.SERVICES*100)/SERVICES.LASTREC<24>=DELTA.SERVICES.PCTTHIS.PARTS.PCT=INT(PARTS.THIS * 1000 / YTD.THIS + .5)REC<19>=THIS.PARTS.PCTLAST.PARTS.PCT=INT(PARTS.LAST * 1000 / YTD.LAST + .5)REC<20>=LAST.PARTS.PCTFY.PARTS.PCT=INT(FY.PARTS * 1000 / FY.LAST + .5)REC<21>=FY.PARTS.PCTTHIS.SERVICES.PCT=INT(SERVICES.THIS * 1000 / YTD.THIS + .5)REC<26>=THIS.SERVICES.PCTLAST.SERVICES.PCT=INT(SERVICES.LAST * 1000 / YTD.LAST + .5)REC<27>=LAST.SERVICES.PCTFY.SERVICES.PCT=INT(FY.SERVICES * 1000 / FY.LAST + .5)REC<28>=FY.SERVICES.PCTREC<29>=YYYYREC<30>=OCONV(LAST.EOM,'D2/')REC<31>=YYYY-1REC<32>=YYYY-2*** DETERMINE PCT OF PARTS FOR PREVIOUS YEAR BETWEEN 40.0% AND 60.0%*DELTA=RND(200);  * -10.0 TO 10.0PREV.PART.PCT=500+(DELTA-100)PREV.PART.AMT=INT(YTD.PREV * PREV.PART.PCT/1000 + .5)PREV.SERVICE.AMT=YTD.PREV-PREV.PART.AMTPREV.SERVICE.PCT=1000-PREV.PART.PCT*** MARGINS, PARTS, AND SERVICES FOR DRILLDOWNS*REC<38>=LAST.THREEYEARS=LAST.THREEMAX.YEARS=DCOUNT(YEARS,CHAR(253))REC<39>=PREV.GPS.PCT:CHAR(253):LAST.GPS.PCT:CHAR(253):THIS.GPS.PCTREC<40>=PREV.PART.AMT:CHAR(253):PARTS.LAST:CHAR(253):PARTS.THISREC<41>=PREV.PART.PCT:CHAR(253):LAST.PARTS.PCT:CHAR(253):THIS.PARTS.PCTREC<42>=PREV.SERVICE.AMT:CHAR(253):SERVICES.LAST:CHAR(253):SERVICES.THISREC<43>=PREV.SERVICE.PCT:CHAR(253):LAST.SERVICES.PCT:CHAR(253):THIS.SERVICES.PCT*** NET INCOME 10% OF SALES*REC<33>=INT(GPS.THIS * .1 + .5)REC<34>=INT(LAST.FY.GPS * .1 + .5)REC<35>=INT(SUM(PREV.YEAR.GPS) * .1 + .5)*** HARD CODE DAYS TO PAY*REC<44>=35REC<45>=39REC<46>=41REC<54>=65:CHAR(253):20:CHAR(253):10:CHAR(253):5REC<55>=63:CHAR(253):21:CHAR(253):10:CHAR(253):6REC<56>=64:CHAR(253):19:CHAR(253):8:CHAR(253):9*** BUILD REP TOTALS*REPS='John,Katherine,Chris,Carrie,Sally,Jan,Bart,Linus,Max'CONVERT ',' TO CHAR(253) IN REPSMAX.REPS=DCOUNT(REPS,CHAR(253))REC<47>=REPSDEVIATION=35;  * 35% DEVIATIONMOS.IN.YEAR=''FOR YEAR.CNTR = 1 TO MAX.YEARS   YEAR.AMTS=REC<68,YEAR.CNTR>   MOS.IN.YEAR<1,YEAR.CNTR>=DCOUNT(YEAR.AMTS,CHAR(252))   ANN.SALES.AMT=SUM(YEAR.AMTS)   ANN.GP.AMT=SUM(REC<69,YEAR.CNTR>)   GP.FACTOR=ANN.GP.AMT/ANN.SALES.AMT   NUM.ITEMS=MAX.REPS   TOT.SCAT.AMT=ANN.SALES.AMT   GOSUB SCATTER.VALUES   FOR REP.CNTR = 1 TO MAX.REPS      REP.SALES.AMT=RETURN.AMOUNTS<1,1,REP.CNTR>      REC<48,REP.CNTR,YEAR.CNTR>=REP.SALES.AMT      REP.GP.AMT=INT(REP.SALES.AMT * GP.FACTOR + .5)      REC<49,REP.CNTR,YEAR.CNTR>=REP.GP.AMT    NEXT REP.CNTR NEXT YEAR.CNTR*** CREATE MONTHLIES FOR EACH REP AND SAVE IN SALES.YYYY*DEVIATION=20FOR YEAR.CNTR = 1 TO MAX.YEARS   YEAR=YEARS<1,YEAR.CNTR>   NUM.ITEMS=MOS.IN.YEAR<1,YEAR.CNTR>   SALES.REC=''   GPS.REC=''   FOR REP.CNTR = 1 TO MAX.REPS      REP=REPS<1,REP.CNTR>      SALES.REC<1,REP.CNTR>=REP      GPS.REC<1,REP.CNTR>=REP      TOT.SCAT.AMT=REC<48,REP.CNTR,YEAR.CNTR>      GOSUB SCATTER.VALUES      SALES.REC<2,REP.CNTR>=RETURN.AMOUNTS      TOT.SCAT.AMT=REC<49,REP.CNTR,YEAR.CNTR>      GOSUB SCATTER.VALUES      GPS.REC<2,REP.CNTR>=RETURN.AMOUNTS    NEXT REP.CNTR   WRITE SALES.REC ON FILE.CONTROL, 'SALES.':YEAR   WRITE GPS.REC ON FILE.CONTROL, 'GPS.':YEAR NEXT YEAR.CNTR*** BUILD SERVICES AND PARTS*PARTS='Doohickey A,Doohickey B,Doohickey C,Doohickey D'CONVERT ',' TO CHAR(253) IN PARTSMAX.PARTS=DCOUNT(PARTS,CHAR(253))REC<52>=PARTSDEVIATION=35FOR YEAR.CNTR = 1 TO MAX.YEARS   ANN.PART.AMT=REC<40,YEAR.CNTR>   NUM.ITEMS=MAX.PARTS   TOT.SCAT.AMT=ANN.PART.AMT   GOSUB SCATTER.VALUES   FOR PART.CNTR = 1 TO MAX.PARTS      REC<53,PART.CNTR,YEAR.CNTR>=RETURN.AMOUNTS<1,1,PART.CNTR>    NEXT PART.CNTR NEXT YEAR.CNTR*SERVICES='Diagnostics,Repair,Custom Machining,Preventative Maintenance'CONVERT ',' TO CHAR(253) IN SERVICESMAX.SERVICES=DCOUNT(SERVICES,CHAR(253))REC<50>=SERVICESDEVIATION=35FOR YEAR.CNTR = 1 TO MAX.YEARS   ANN.SERVICE.AMT=REC<42,YEAR.CNTR>   NUM.ITEMS=MAX.SERVICES   TOT.SCAT.AMT=ANN.SERVICE.AMT   GOSUB SCATTER.VALUES**CRT 'YEAR.CNTR=':YEAR.CNTR**CRT 'ANN.SERVICE.AMT=':ANN.SERVICE.AMT**CRT 'RETURN.AMOUNTS=':RETURN.AMOUNTS:; DEBUG   FOR SERVICE.CNTR = 1 TO MAX.SERVICES      REC<51,SERVICE.CNTR,YEAR.CNTR>=RETURN.AMOUNTS<1,1,SERVICE.CNTR>    NEXT SERVICE.CNTR NEXT YEAR.CNTRWRITE REC ON FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE'RETURN*SCATTER.VALUES:*RETURN.AMOUNTS=''RUNNING.AMT=0LINEAR.PCT=100/NUM.ITEMSMAX.DEVIATION=INT((LINEAR.PCT * DEVIATION/100) * 200)HALF.DEVIATION=INT(MAX.DEVIATION/2 + .5)RUNNING.PCT=0LESS.1=NUM.ITEMS-1MID.WAY=INT(NUM.ITEMS/2 + .5)FOR SCAT.CNTR = 1 TO LESS.1   RANDOM.SCAT=RND(MAX.DEVIATION)   PCT=LINEAR.PCT + ((HALF.DEVIATION-RANDOM.SCAT) / 100)   RUNNING.PCT+=PCT   AMT=INT(TOT.SCAT.AMT * PCT/100 + .5)   RUNNING.AMT+=AMT   IF MID.WAY THEN      IF RUNNING.AMT > (TOT.SCAT.AMT / 2 + .5) THEN         * RUNNING TOO HIGH SO REDUCT         MAX.DEVIATION=INT((LINEAR.PCT * DEVIATION/100) * 125)         HALF.DEVIATION=INT(MAX.DEVIATION/2 + .5)       END    END   RETURN.AMOUNTS<1,1,-1>=AMT NEXT SCAT.CNTRRETURN.AMOUNTS<1,1,-1>=TOT.SCAT.AMT - RUNNING.AMTRETURNEND0001CDSUB.PORTAL.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) Zumasys, Inc*W$TITLE='Portal Documentation'W$TYPE='HTML'W$WIDTH = 1                    ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FILE.WEB.FORMS, 'PORTAL.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORMRETURN00062BSUB.SYS.ERR.BAR0c2    SUBROUTINE SUB.SYS.ERR.BAR* Changed by PORTBAS -> SUBROUTINE SUB.SYS.ERRS* @(#) SUB.SYS.ERR.BAR Ported to jBASE 17:55:32  08 JUL 2015*  The following variable names were converted*   DATE* ** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Show system errors*    INCLUDE WBPD MVDB.INCLUDE*    W$TYPE = "FCCOLUMN2D"    W$TITLE = "System Errors by Day For Each Day"    W$WIDTH = 3*    IF G$QUERYMODE = "1" THEN RETURN*    OPEN '','SYSTEM-ERRORS' TO F.SYSTEM.ERRORS ELSE RETURN*    BASE.DATE = DATE() - 29    XLINE = 'SSELECT SYSTEM-ERRORS BY-DSND DATE BY-DSND TIME WITH DATE GT "':OCONV(BASE.DATE,'D2/'):'"'    EXECUTE XLINE CAPTURING JUNK**    W$BAR.LABELS<1> = "Errors from ":OCONV(BASE.DATE,'D2/'):" Thru ":OCONV(DATE(),'D2/')    W$BAR.TYPE = "clustered"*    LOOP        READNEXT ID ELSE EXIT        Date = FIELD(ID,'*',1)        IF Date < BASE.DATE THEN EXIT*        W$BAR.VALUES<1,(Date-BASE.DATE)+1> += 1    REPEAT*    FOR X = BASE.DATE TO DATE()        OFFSET = (BASE.DATE-X)+1        W$BAR.XLABELS<1,OFFSET> = OCONV(X,'DD')    NEXT X*    W$BAR.YMEMO = "Error Records"    W$BAR.XMEMO = "Day of Month"*    W$BAR.TREND.BEG<1> = "3"    W$BAR.TREND.END<1> = "13"    W$BAR.TREND.OPTS<1> = "thickness='4' color='ff0000' displayValue='Bad Trend'"    W$BAR.TREND.BEG<2> = "11"    W$BAR.TREND.END<2> = "8"    W$BAR.TREND.OPTS<2> = "thickness='10' color='00ff00' displayValue='Good Trend'"*    W$LINK.LABEL = "Detail"    W$LINK.LOCATION = "2"    W$LINK.DD.WIDGET = "System Errors"*    RETURN0002BASUB.SHOW.SESSION0c2SUBROUTINE SUB.SHOW.SESSION** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Show session contents*INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD WWW.INCLUDE*W$TYPE = "TABLE"W$TITLE = "Web Session Contents"W$WIDTH = 3* IF G$QUERYMODE THEN RETURN*READ REC FROM F.WEB.SESSION, SESSION$ID ELSE REC = ""W$TABLE.COL.LABELS<1,1> = "Variable"W$TABLE.COL.LABELS<1,2> = "Value"W$TABLE.DATA<1,1> = "Session ID"W$TABLE.DATA<1,2> = SESSION$IDFOR N = 1 TO DCOUNT(REC<1>, @VM)  W$TABLE.DATA<N+1,1> = REC<1,N>  VAL = REC<2,N>  CONVERT CHAR(2) TO "^" IN VAL  CONVERT CHAR(3) TO "]" IN VAL  CONVERT CHAR(4) TO "\" IN VAL  W$TABLE.DATA<N+1,2> = VALNEXT N*RETURN001133SUB.ADMIN.CONFIG0c2SUBROUTINE SUB.ADMIN.CONFIG** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Administrative configuration widget.*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Administrative Configuration Widget"W$TYPE = "HTML" ;* or HTML, FCPIE, FCBAR, etc.W$WIDTH = 2 ;* 1 = narrow, 2 = medium, 3 = full-width*IF G$QUERYMODE THEN RETURN ;* Dont process, just provide title, type & width*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TEXT.INFO = "Unable to open MVDB.CONTROL"  RETURNENDOPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE   W$TEXT.INFO = "Unable to open MVDB.THEMES"  RETURNENDW$TEXT.INFO = "" ;* No widget content at this point.*READ SETTINGS.REC FROM F.MVDB.CONTROL, 'MVDB.SETTINGS' ELSE SETTINGS.REC = ""IF G$SUBMITTED = 1 THEN  FOR N = 1 TO 15    SETTINGS.REC<N> = WIDGET.USER.DATA(N)  NEXT N  WRITE SETTINGS.REC ON F.MVDB.CONTROL, 'MVDB.SETTINGS'  W$HTML.DATA = "Settings saved."ENDIF SETTINGS.REC<1> # "" THEN  W$HTML.DATA := '<br /><a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=':SETTINGS.REC<1>:'" target="MVDB.SUBS_':SETTINGS.REC<1>:'">Edit Subroutine: ':SETTINGS.REC<1>:'</a>'ENDIF SETTINGS.REC<5> = "" THEN SETTINGS.REC<5> = 24IF SETTINGS.REC<3> = "" THEN SETTINGS.REC<3> = 20IF SETTINGS.REC<4> = "" THEN  LOCATE "SERVER_PORT" IN CGI$VARS SETTING POS THEN    SETTINGS.REC<4> = CGI$VALS<POS>  ENDENDIF SETTINGS.REC<9> = '' THEN SETTINGS.REC<9> = 'UTF-8'*W$INPUT.PROMPT<1> = "User Auth Sub"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = SETTINGS.REC<1>W$INPUT.PARAMS<1> = 'size="40"'*W$INPUT.PROMPT<2> = "Password Req?"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "Yes":@VM:"No"W$INPUT.SELVALS<2> = "0":@VM:"1"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = SETTINGS.REC<2>*W$INPUT.PROMPT<3> = "Failure Tolerance Period"W$INPUT.TYPE<3> = "TEXT"W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = SETTINGS.REC<3>W$INPUT.PARAMS<3> = 'size="5"'*W$INPUT.PROMPT<4> = "TCP Port"W$INPUT.TYPE<4> = "TEXT"W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = SETTINGS.REC<4>W$INPUT.PARAMS<4> = 'size="5"'*W$INPUT.PROMPT<5> = "Session Timeout (hours)"W$INPUT.TYPE<5> = "TEXT"W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = SETTINGS.REC<5>W$INPUT.PARAMS<5> = 'size="5"'*IF SETTINGS.REC<6> = '' THEN SETTINGS.REC<6> = 0W$INPUT.PROMPT<6> = "GMT Offset"W$INPUT.TYPE<6> = "SELECT"GMT.VAL.LIST = ''; GMT.OPT.LIST = ''FOR X = 12 TO 1 STEP -1  GMT.OPT.LIST<1,-1> = 'GMT -':X  GMT.VAL.LIST<1,-1> = X * (-1)NEXT XGMT.OPT.LIST<1,-1> = 'GMT'GMT.VAL.LIST<1,-1> = 0FOR X = 1 TO 12  GMT.OPT.LIST<1,-1> = 'GMT +':X  GMT.VAL.LIST<1,-1> = XNEXT XW$INPUT.SELOPTS<6> = GMT.OPT.LISTW$INPUT.SELVALS<6> = GMT.VAL.LISTW$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = SETTINGS.REC<6>*W$INPUT.PROMPT<7> = "Alternate Logo Image"W$INPUT.TYPE<7> = "TEXT"W$INPUT.UDPOS<7> = 7W$INPUT.DEFAULT<7> = SETTINGS.REC<7>*EXECUTE 'SSELECT MVDB.THEMES' CAPTURING JUNKTHEME.LIST = ''LOOP  READNEXT THEME.ID ELSE EXIT  READV CSS.NAME FROM F.MVDB.THEMES, THEME.ID, 1 ELSE CSS.NAME = ''  IF CSS.NAME # '' THEN    THEME.LIST<1,-1> = CSS.NAME    THEME.LIST<2,-1> = THEME.ID  ENDREPEATW$INPUT.PROMPT<8> = "Dashboard Theme"W$INPUT.TYPE<8> = "SELECT"W$INPUT.SELOPTS<8> = 'Default Theme':@VM:THEME.LIST<2>W$INPUT.SELVALS<8> = '':@VM:THEME.LIST<2>W$INPUT.UDPOS<8> = 8W$INPUT.DEFAULT<8> = SETTINGS.REC<8>*W$INPUT.PROMPT<9> = 'Character Set'W$INPUT.TYPE<9> = "TEXT"W$INPUT.UDPOS<9> = 9W$INPUT.DEFAULT<9> = SETTINGS.REC<9>*W$INPUT.PROMPT<10> = "Auto-Trim Sessions"W$INPUT.TYPE<10> = "SELECT"W$INPUT.SELOPTS<10> = 'No':@VM:'Yes'W$INPUT.SELVALS<10> = 'N':@VM:'Y'W$INPUT.UDPOS<10> = 10W$INPUT.DEFAULT<10> = SETTINGS.REC<10>*W$INPUT.PROMPT<11> = "Auto-Refresh"W$INPUT.TYPE<11> = "SELECT"W$INPUT.SELOPTS<11> = 'No':@VM:'Yes'W$INPUT.SELVALS<11> = 'N':@VM:'Y'W$INPUT.UDPOS<11> = 11W$INPUT.DEFAULT<11> = SETTINGS.REC<11>**WEBSERVICE*W$INPUT.PROMPT<12> = "Allow 'webservice' logins"W$INPUT.TYPE<12> = "SELECT"W$INPUT.SELOPTS<12> = 'No':@VM:'Yes'W$INPUT.SELVALS<12> = 'N':@VM:'Y'W$INPUT.UDPOS<12> = 12W$INPUT.DEFAULT<12> = SETTINGS.REC<12>**EMAILED REPORTS*W$INPUT.PROMPT<13> = "Allow 'emailed' logins"W$INPUT.TYPE<13> = "SELECT"W$INPUT.SELOPTS<13> = 'No':@VM:'Yes'W$INPUT.SELVALS<13> = 'N':@VM:'Y'W$INPUT.UDPOS<13> = 13W$INPUT.DEFAULT<13> = SETTINGS.REC<13>*W$INPUT.BUTTON = "Save"*RETURN003063SUB.PORTAL.AR.REPORTS0c2SUBROUTINE SUB.PORTAL.AR.REPORTS**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE='Portal AR'; CALL PORTAL.SHOW.LAST.UPDATED('AR')W$TYPE = "FC2DPIE"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*EQUATE REPORT.TYPE TO WIDGET.USER.DATA(1)W$PDFABLE=1OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.DASHBOARD.BALANCES ELSE   W$TYPE='TEXT'   W$TEXT.DATA='UNABLE TO OPEN DICT DASHBOARD.BALANCES'   RETURN END** LAYOUT OF THE *CURRENT.AR.STATS RECORD** PERIOD.AMOUNTS DATA LAYOUT* 1 PERIOD 1 AMOUNT* 2 PERIOS 2 AMOUNT* 3 PERIOD 3 AMOUNT* 4 PERIOD 4 AMOUNT* 5* 6 YEAR ] YEAR ] YEAR* 7 PERIOD 1 NUMBER \ PERIOD 2 NUMBER \ PERIOD 3 NUMBER \ PERIOD 4 NUMBER* 8 PERIOD 1 AMOUNT \ PERIOD 2 AMOUNT \ PERIOD 3 AMOUNT \ PERIOD 4 AMOUNT* 9 YEAR 1 TOTAL DAYS ] YEAR TOTAL DAYS ] YEAR 3 TOTAL DAYS ] YEAR 4 TOTAL DAYS* 10 YEAR 1 JAN # PAID\ FEB # PAID ... ] YEAR 2 JAN # PAID \* 11 YEAR 1 JAN # TOTAL DAYS \ FEB TOTAL DAYS ....*DIM AR.AMOUNTS(30)MATREAD AR.AMOUNTS FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AR.STATS' ELSE MAT AR.AMOUNTS=''EQUATE YEARS TO AR.AMOUNTS(6)NUM.YEARS=DCOUNT(YEARS,@VM)EQUATE ANNUAL.NUMBERS TO AR.AMOUNTS(7)EQUATE ANNUAL.AMOUNTS TO AR.AMOUNTS(8)EQUATE ANNUAL.TOTAL.DAYS TO AR.AMOUNTS(9)EQUATE MONTHLY.NUMBER.PAID TO AR.AMOUNTS(10)EQUATE MONTHLY.TOTAL.DAYS TO AR.AMOUNTS(11)EQUATE CUSTOMERS TO AR.AMOUNTS(12)EQUATE CUST.AMT.DUES TO AR.AMOUNTS(13)EQUATE CUST.MOST.DAYS.DUE TO AR.AMOUNTS(14)EQUATE CUST.TOTAL.1000.DAYS TO AR.AMOUNTS(15)EQUATE CUST.NUM.1000.DAYS TO AR.AMOUNTS(16)EQUATE CUST.TOTAL.60.DAYS TO AR.AMOUNTS(17)EQUATE CUST.NUM.60.DAYS TO AR.AMOUNTS(18)EQUATE HIGHEST.AMTS.CUSTS TO AR.AMOUNTS(19)EQUATE HIGHEST.AMTS TO AR.AMOUNTS(20)EQUATE HIGHEST.DAYS.CUSTS TO AR.AMOUNTS(21)EQUATE HIGHEST.DAYS TO AR.AMOUNTS(22)EQUATE HIGHEST.INCREASE.CUSTS TO AR.AMOUNTS(23)EQUATE HIGHEST.INCREASE.PCTS TO AR.AMOUNTS(24)EQUATE HIGHEST.INCREASE.60.DAY.AVG TO AR.AMOUNTS(25)EQUATE HIGHEST.INCREASE.1000.DAY.AVG TO AR.AMOUNTS(26)*W$INPUT.PROMPT<1>='Type of Report 'W$INPUT.TYPE<1>='SELECT'W$INPUT.SELOPTS<1>='Current Receivables':@VM:'Average Days by Year':@VM:'Average Days Last 12 Months'*** Add Average Days by Month for past 3 years with activity in every month*YEAR.POS=NUM.YEARSYEARS.ALREADY=0LOOP   YEAR.POS=YEAR.POS-1   IF NOT(YEAR.POS) THEN      JAN.NUMBER=0    END ELSE      JAN.NUMBER=MONTHLY.NUMBER.PAID<1,YEAR.POS,1>    ENDUNTIL NOT(JAN.NUMBER) OR YEARS.ALREADY >= 3 DO   YEAR=YEARS<1,YEAR.POS>   YEARS.ALREADY+=1   W$INPUT.SELOPTS<1,-1>='Average Days by Month ':YEARREPEAT**W$INPUT.SELOPTS<1,-1>='Customers By Largest Receivables'**W$INPUT.SELOPTS<1,-1>='Customers By Most Aged Receivables'**W$INPUT.SELOPTS<1,-1>='Customers By Largest Aging Increases'W$INPUT.SELOPTS<1,-1>='Customers Needing Aging Attention'W$INPUT.SELVALS=W$INPUT.SELOPTSIF REPORT.TYPE = '' THEN   REPORT.TYPE='Current Receivables' ENDW$INPUT.UDPOS = 1W$INPUT.DEFAULT<1>=REPORT.TYPE*BEGIN CASE   CASE REPORT.TYPE = 'Current Receivables'      GOSUB DO.CURRENT   CASE REPORT.TYPE = 'Average Days by Year'      GOSUB AVERAGE.DAYS.BY.YEAR   CASE REPORT.TYPE = 'Average Days Last 12 Months'      GOSUB AVERAGE.DAYS.LAST.12.MONTHS   CASE REPORT.TYPE[1,21] = 'Average Days by Month'      AVERAGE.YEAR=FIELD(REPORT.TYPE,' ',5)      GOSUB AVERAGE.DAYS.BY.MONTH.PER.YEAR   CASE REPORT.TYPE = 'CUSTOMERS BY LARGEST RECEIVABLES'      GOSUB CUSTOMERS.BY.LARGEST.RECEIVABLES   CASE REPORT.TYPE = 'CUSTOMERS BY MOST AGED RECEIVABLES'      GOSUB CUSTOMERS.BY.MOST.AGED.RECEIVABLES   CASE REPORT.TYPE = 'CUSTOMERS BY LARGEST AGING INCREASES'      GOSUB CUSTOMERS.BY.LARGEST.AGING.INCREASES   CASE REPORT.TYPE = 'Customers Needing Aging Attention'      GOSUB CUSTOMERS.BY.LARGEST.RECEIVABLES   CASE 1      W$TYPE='TEXT'      W$TEXT.DATA='INVALID REPORT TYPE=':REPORT.TYPEEND CASERETURN*DO.CURRENT:*W$TITLE = "Current - AR Balances by Days Due"; CALL PORTAL.SHOW.LAST.UPDATED('AR')AMTS=AR.AMOUNTS(1):@AM:AR.AMOUNTS(2):@AM:AR.AMOUNTS(3):@AM:AR.AMOUNTS(4):@AM:AR.AMOUNTS(5)W$PIE.CAPTION='Total AR Balance of '*TOT.AMT=SUM(AMTS)W$PIE.CAPTION:=OCONV(TOT.AMT,'MD02,$')*CATEGORIES='Current'CATEGORIES<2>='1 - 30 Days'CATEGORIES<3>='31 - 60 Days'CATEGORIES<4>='61 - 90 Days'CATEGORIES<5>='Over 90 Days'*CATEGORY.AMTS=AMTS**W$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='showPercentageValues="0"'W$CHART.OPTIONS<-1>='showPercentageInLabel="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="0"'W$CHART.OPTIONS<-1>='thousandSeparator=","'W$CHART.OPTIONS<-1>='pieradius="150"'FOR N = 1 TO 5  W$PIE.LABELS<1,N> = CATEGORIES<N>  W$PIE.VALUES<1,N> = INT(CATEGORY.AMTS<N>/100 + .5)NEXT N*RETURN*AVERAGE.DAYS.BY.YEAR:*W$TITLE = "Average Days To Pay"; CALL PORTAL.SHOW.LAST.UPDATED('AR')W$TYPE = "FCCOLUMN3D"*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEFIRST.YEAR=''; CURRENT.YEAR=''*W$BAR.XMEMO = "Year (drill down for detail)"W$BAR.YMEMO = "Average Days to Pay"*YEAR.NO=0*FOR NN = 1 TO NUM.YEARS  ANNUAL.BY.TYPE.NUMBER=ANNUAL.NUMBERS<1,NN>  BY.TYPE.NUMBER=SUM(ANNUAL.BY.TYPE.NUMBER)  TOTAL.DAYS=ANNUAL.TOTAL.DAYS<1,NN>  IF BY.TYPE.NUMBER AND TOTAL.DAYS THEN     AVERAGE.DAYS=INT(TOTAL.DAYS * 10 / BY.TYPE.NUMBER + .5)     AVERAGE.DAYS=OCONV(AVERAGE.DAYS,'MD1')     YEAR.NO+=1     YEAR=YEARS<1,NN>     IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR     CURRENT.YEAR=YEAR     W$BAR.VALUES<1,YEAR.NO> = AVERAGE.DAYS     W$BAR.XLABELS<1,YEAR.NO> = YEAR     W$FW.DD.WIDGET<1,YEAR.NO>='PORTAL DAYS TO PAY PIE'     W$FW.DD.UD.POS<1,YEAR.NO,1>=1     W$FW.DD.UD.VAL<1,YEAR.NO,1>=YEAR   ENDNEXT NN*W$BAR.CAPTION = "Average Days to Pay From ":FIRST.YEAR:' to ':CURRENT.YEARW$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="1"'W$CHART.OPTIONS<-1>='thousandSeparator=","'W$CHART.OPTIONS<-1>='pieradius="150"'*RETURN*AVERAGE.DAYS.LAST.12.MONTHS:*LAST.YEAR=YEARS<1,NUM.YEARS>**DEBUG=''MOS.IN.LAST.YEAR=DCOUNT(MONTHLY.NUMBER.PAID<1,NUM.YEARS>,CHAR(252))**DEBUG<-1>=MOS.IN.LAST.YEARMOS.IN.PREV.YEAR=12-MOS.IN.LAST.YEAR**DEBUG<-1>=MOS.IN.PREV.YEARIF MOS.IN.PREV.YEAR = 12 THEN   LAST.YEAR=LAST.YEAR-1   THIS.MONTHLY.NUMBERS=MONTHLY.NUMBER.PAID<1,NUM.YEARS-1>   THIS.MONTHLY.TOTAL.DAYS=MONTHLY.TOTAL.DAYS<1,NUM.YEARS-1>   MONTHLY.LABELS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'   CONVERT ',' TO CHAR(252) IN MONTHLY.LABELS   START.MONTH="January ":LAST.YEAR   END.MONTH="December ":LAST.YEAR END ELSE   FULL.MONTHS='January,February,March,April,May,June,July,August,September,October,November,December'   PREV.YEAR.MO.NO=12-MOS.IN.PREV.YEAR+1**DEBUG<-1>=PREV.YEAR.MO.NO   START.MONTH=FIELD(FULL.MONTHS,',',PREV.YEAR.MO.NO):' ':(LAST.YEAR-1)   END.MONTH=FIELD(FULL.MONTHS,',',MOS.IN.LAST.YEAR):' ':LAST.YEAR   ABREV.MONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'   COMMA.POS=INDEX(ABREV.MONTHS,',',PREV.YEAR.MO.NO-1)   MONTHLY.LABELS=ABREV.MONTHS[COMMA.POS+1,9999]:',':(ABREV.MONTHS[1,COMMA.POS-1])   CONVERT ',' TO CHAR(252) IN MONTHLY.LABELS   *   ** ISOLATE THE NUMBERS FOR THE PREVIOUS YEAR   *   THIS.MONTHLY.NUMBERS=MONTHLY.NUMBER.PAID<1,NUM.YEARS-1>   POS.BEFORE.FIRST=INDEX(THIS.MONTHLY.NUMBERS,CHAR(252),PREV.YEAR.MO.NO-1)   THIS.MONTHLY.NUMBERS=THIS.MONTHLY.NUMBERS[POS.BEFORE.FIRST+1,99999]   THIS.MONTHLY.NUMBERS:=CHAR(252):MONTHLY.NUMBER.PAID<1,NUM.YEARS>   THIS.MONTHLY.TOTAL.DAYS=MONTHLY.TOTAL.DAYS<1,NUM.YEARS-1>   POS.BEFORE.FIRST=INDEX(THIS.MONTHLY.TOTAL.DAYS,CHAR(252),PREV.YEAR.MO.NO-1)   THIS.MONTHLY.TOTAL.DAYS=THIS.MONTHLY.TOTAL.DAYS[POS.BEFORE.FIRST+1,99999]   THIS.MONTHLY.TOTAL.DAYS:=CHAR(252):MONTHLY.TOTAL.DAYS<1,NUM.YEARS>ENDGOSUB AVERAGE.DAYS.BY.MONTHRETURN*AVERAGE.DAYS.BY.MONTH.PER.YEAR:*LOCATE AVERAGE.YEAR IN YEARS<1> SETTING YEAR.POS ELSE RETURNTHIS.MONTHLY.NUMBERS=MONTHLY.NUMBER.PAID<1,YEAR.POS>THIS.MONTHLY.TOTAL.DAYS=MONTHLY.TOTAL.DAYS<1,YEAR.POS>START.MONTH="January ":AVERAGE.YEAREND.MONTH="December ":AVERAGE.YEARMONTHLY.LABELS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'CONVERT ',' TO CHAR(252) IN MONTHLY.LABELSGOSUB AVERAGE.DAYS.BY.MONTHRETURN*AVERAGE.DAYS.BY.MONTH:*W$TITLE = "Average Days To Pay"; CALL PORTAL.SHOW.LAST.UPDATED('AR')W$TYPE = "FCCOLUMN3D"*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUE*W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Average Days to Pay"*MONTH.NO=0*FOR NN = 1 TO 12  MONTHLY.NUMBER=THIS.MONTHLY.NUMBERS<1,1,NN>  MONTHLY.DAYS=THIS.MONTHLY.TOTAL.DAYS<1,1,NN>  MONTHLY.LABEL=MONTHLY.LABELS<1,1,NN>  IF MONTHLY.NUMBER AND MONTHLY.DAYS THEN     AVERAGE.DAYS=INT(MONTHLY.DAYS * 10 / MONTHLY.NUMBER + .5)     AVERAGE.DAYS=OCONV(AVERAGE.DAYS,'MD1')   END ELSE AVERAGE.DAYS=0  W$BAR.VALUES<1,NN> = AVERAGE.DAYS  W$BAR.XLABELS<1,NN> = MONTHLY.LABELNEXT NN*W$BAR.CAPTION = "Average Days to Pay From ":START.MONTH:' to ':END.MONTHW$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="1"'RETURN*CUSTOMERS.BY.LARGEST.RECEIVABLES:*W$TYPE='TABLE'W$WIDTH = 3MAX.HIGHEST.AMTS=DCOUNT(HIGHEST.AMTS.CUSTS,@VM)IF MAX.HIGHEST.AMTS > 50 THEN MAX.HIGHEST.AMTS=50W$TABLE.COL.LABELS<1,1> = "| --- Customers ---<br>| ":MAX.HIGHEST.AMTS:" With Most Amount Owed"W$TABLE.COL.LABELS<1,2> = "Amount<br>Owed"W$TABLE.COL.LABELS<1,3> = "Most Days|<br>&nbsp;&nbsp;&nbsp;&nbsp;Aged&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|"W$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "center"W$TABLE.COL.JUST<1,3> = "center"IF MAX.HIGHEST.AMTS > 50 THEN MAX.HIGHEST.AMTS=50W$TITLE = MAX.HIGHEST.AMTS:' Customers With Largest Receivables'; CALL PORTAL.SHOW.LAST.UPDATED('AR')FOR I = 1 TO MAX.HIGHEST.AMTS   CUSTOMER=HIGHEST.AMTS.CUSTS<1,I>   HIGHEST.AMT=HIGHEST.AMTS<1,I>   HIGHEST.AMT=OCONV(HIGHEST.AMT,'MD2,')   LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUST.POS ELSE CUST.POS=9999   CUST.HIGHEST.DAYS=CUST.MOST.DAYS.DUE<1,CUST.POS>   W$TABLE.DATA<I,1>=CUSTOMER   W$TABLE.DATA<I,2>=HIGHEST.AMT   W$TABLE.DATA<I,3>=CUST.HIGHEST.DAYS NEXT I*RETURN*CUSTOMERS.BY.MOST.AGED.RECEIVABLES:***W$TYPE='TABLE'**W$WIDTH = 2MAX.HIGHEST.DAYS=DCOUNT(HIGHEST.DAYS.CUSTS,@VM)IF MAX.HIGHEST.DAYS > 50 THEN MAX.HIGHEST.DAYS=50W$TABLE.COL.LABELS<1,4> = "| --- Customers ---<br>| ":MAX.HIGHEST.DAYS:" With Most Days Aged"W$TABLE.COL.LABELS<1,5> = "Most Days<br>Aged"W$TABLE.COL.LABELS<1,6> = "&nbsp;Amount&nbsp;|<br>&nbsp;&nbsp;&nbsp;Owed&nbsp;&nbsp;&nbsp;|"W$TABLE.COL.JUST<1,4> = "left"W$TABLE.COL.JUST<1,5> = "center"W$TABLE.COL.JUST<1,6> = "right"W$TITLE = MAX.HIGHEST.DAYS:' Customers With Most Aged Receivables'; CALL PORTAL.SHOW.LAST.UPDATED('AR')FOR I = 1 TO MAX.HIGHEST.DAYS   CUSTOMER=HIGHEST.DAYS.CUSTS<1,I>   HIGHEST.DAY=HIGHEST.DAYS<1,I>   LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUST.POS ELSE CUST.POS=9999   AMT.DUE=CUST.AMT.DUES<1,CUST.POS>   W$TABLE.DATA<I,4>=CUSTOMER   W$TABLE.DATA<I,5>=HIGHEST.DAY   W$TABLE.DATA<I,6>=OCONV(AMT.DUE,'MD2,') NEXT I*RETURN*CUSTOMERS.BY.LARGEST.AGING.INCREASES:**W$TYPE='TABLE'*W$WIDTH = 2MAX.HIGHEST.INCREASE=DCOUNT(HIGHEST.INCREASE.CUSTS,@VM)IF MAX.HIGHEST.INCREASE > 50 THEN MAX.HIGHEST.INCREASE=50W$TABLE.COL.LABELS<1,7> = "| --- Customers ---<br>| ":MAX.HIGHEST.INCREASE:" With Significant Aging Increase"W$TABLE.COL.LABELS<1,8> = "PCT<br>Increase"W$TABLE.COL.LABELS<1,9> = "60<br>Day Avg"W$TABLE.COL.LABELS<1,10> = "&nbsp;&nbsp;&nbsp;1000&nbsp;&nbsp;&nbsp;|<br>Day Avg|"W$TABLE.COL.JUST<1,7> = "left"W$TABLE.COL.JUST<1,8> = "center"W$TABLE.COL.JUST<1,9> = "center"W$TABLE.COL.JUST<1,10> = "center"W$TITLE = MAX.HIGHEST.INCREASE:' Customers With Largest Aging Increase'; CALL PORTAL.SHOW.LAST.UPDATED('AR')FOR I = 1 TO MAX.HIGHEST.INCREASE   CUSTOMER=HIGHEST.INCREASE.CUSTS<1,I>   HIGHEST.INCREASE.PCT=HIGHEST.INCREASE.PCTS<1,I>   LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUST.POS ELSE CUST.POS=9999   W$TABLE.DATA<I,7>=CUSTOMER   W$TABLE.DATA<I,8>=HIGHEST.INCREASE.PCT   W$TABLE.DATA<I,9>=HIGHEST.INCREASE.60.DAY.AVG<1,I>   W$TABLE.DATA<I,10>=HIGHEST.INCREASE.1000.DAY.AVG<1,I> NEXT IRETURN0014E0SUB.MOBILE.APPS0c2    SUBROUTINE SUB.MOBILE.APPS* @(#) SUB.MOBILE.APPS Ported to jBASE 17:55:32  08 JUL 2015*  The following variable names were converted*   STATUS* ** Dashboard Widget*    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Mobile Web App Registration"    W$TYPE = "TABLE"    W$WIDTH = 3     ;* Full width (1=1/3, 2=2/3, 3=3/3)*    IF G$QUERYMODE THEN RETURN** Set up column labels    W$TABLE.COL.LABELS<1,1> = "Subroutine Name"    W$TABLE.COL.LABELS<1,2> = "Application Name"    W$TABLE.COL.LABELS<1,3> = "Status"    W$TABLE.COL.LABELS<1,4> = "Action"** Column justification = left, right, center    W$TABLE.COL.JUST<1,1> = "left"    W$TABLE.COL.JUST<1,2> = "left"    W$TABLE.COL.JUST<1,3> = "left"    W$TABLE.COL.JUST<1,4> = "left"** Table Rows*    OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE        W$TYPE = "TEXT"        W$TEXT.DATA = "Unable to open MVDB.CONTROL"        RETURN    END    READ MOBI.APPS FROM F.MVDB.CONTROL, "MOBI.APPS" ELSE MOBI.APPS = ""*    IF WIDGET.USER.DATA(1) # "" THEN        BEGIN CASE        CASE G$SUBMITTED            SUBNAME = WIDGET.USER.DATA(1)            IF SUBNAME # "" THEN                LOCATE SUBNAME IN MOBI.APPS<1> BY "AL" SETTING POS THEN                    MOBI.APPS<2,POS> = WIDGET.USER.DATA(3)                    MOBI.APPS<3,POS> = WIDGET.USER.DATA(2)                END ELSE                    MOBI.APPS = INSERT( MOBI.APPS, 1, POS, 0, SUBNAME )                    MOBI.APPS = INSERT( MOBI.APPS, 2, POS, 0, WIDGET.USER.DATA(3) )                    MOBI.APPS = INSERT( MOBI.APPS, 3, POS, 0, WIDGET.USER.DATA(2) )                END            END        CASE WIDGET.USER.DATA(2) = "delete"            MOBI.APPS = DELETE( MOBI.APPS, 1, WIDGET.USER.DATA(1), 0 )            MOBI.APPS = DELETE( MOBI.APPS, 2, WIDGET.USER.DATA(1), 0 )            MOBI.APPS = DELETE( MOBI.APPS, 3, WIDGET.USER.DATA(1), 0 )        CASE WIDGET.USER.DATA(2) = "play"            MOBI.APPS<2,WIDGET.USER.DATA(1)> = "A"        CASE WIDGET.USER.DATA(2) = "pause"            MOBI.APPS<2,WIDGET.USER.DATA(1)> = "I"        CASE WIDGET.USER.DATA(2) = "default"            LOCATE "D" IN MOBI.APPS<2> SETTING CURR.D THEN                MOBI.APPS<2,CURR.D> = "A"            END            MOBI.APPS<2,WIDGET.USER.DATA(1)> = "D"        CASE 1        END CASE        WRITE MOBI.APPS ON F.MVDB.CONTROL, 'MOBI.APPS'        WIDGET.USER.DATA(1) = ""        WIDGET.USER.DATA(2) = ""        WIDGET.USER.DATA(3) = ""    END*    TOPROW = ""    FOR ROW = 1 TO DCOUNT(MOBI.APPS<1>, @VM )        SUB.NAME = MOBI.APPS<1,ROW>        ENC.SUB.NAME = SUB.NAME        CALL SUB.URL.ENCODE(ENC.SUB.NAME)        SUB.LINK = '<a href="/dbc/MVDB.WEB.ED?ed_file=MOBI.SUBS&ed_item=':ENC.SUB.NAME:'" target="MOBI.SUBS_':ENC.SUB.NAME:'">':SUB.NAME:'</a>'        W$TABLE.DATA<ROW,1> = SUB.LINK        W$TABLE.DATA<ROW,2> = MOBI.APPS<3,ROW>        Status = MOBI.APPS<2,ROW>        BEGIN CASE        CASE Status = "A"            Status = '<img src="/db/icons/bullet_green.png" />Active'        CASE Status = "I"            Status = '<img src="/db/icons/bullet_red.png" />Inactive'        CASE Status = "D"            Status = '<img src="/db/icons/bullet_green.png" /><b>Active/Default</b>'            Status := '&nbsp;<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=play"><img src="/db/icons/control_stop.png" title="Un-set Default" /></a>'            TOPROW = ROW        END CASE        W$TABLE.DATA<ROW,3> = Status        ACTIONS = '<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=delete" '        ACTIONS := \onClick='confirm("Delete this entry?");'><img src="/db/icons/delete.png" title="Delete" /></a>\        ACTIONS := '&nbsp;'        IF MOBI.APPS<2,ROW> = "A" OR MOBI.APPS<2,ROW> = "D" THEN            ICON = "control_pause.png"            ACTION = "pause"            ALT = "Set as inactive"        END ELSE            ICON = "control_play.png"            ACTION = "play"            ALT = "Set as active"        END        ACTIONS := '<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=':ACTION:'" ><img src="/db/icons/':ICON:'" title="':ALT:'" /></a>'        IF MOBI.APPS<2,ROW> # "D" THEN            ICON = "star.png"            ACTION = "default"            ALT = "Set as default"            ACTIONS := '&nbsp;<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=':ACTION:'" ><img src="/db/icons/':ICON:'" title="':ALT:'" /></a>'        END        W$TABLE.DATA<ROW,4> = ACTIONS    NEXT ROW*    IF TOPROW # "" THEN* Float this row to the top of the list (the default application)        ROW = W$TABLE.DATA<TOPROW>        W$TABLE.DATA = DELETE( W$TABLE.DATA, TOPROW, 0, 0 )        W$TABLE.DATA = INSERT( W$TABLE.DATA, 1, 0, 0, ROW )    END*    W$INPUT.PROMPT<1> = "Add Subroutine"    W$INPUT.TYPE<1> = "TEXT"    W$INPUT.UDPOS<1> = 1*    W$INPUT.PROMPT<2> = "Description"    W$INPUT.TYPE<2> = "TEXT"    W$INPUT.UDPOS<2> = 2*    W$INPUT.PROMPT<3> = "Status"    W$INPUT.TYPE<3> = "SELECT"    W$INPUT.UDPOS<3> = 3    W$INPUT.DEFAULT<3> = "A"    W$INPUT.SELOPTS<3> = "Active":@VM:"Default":@VM:"Inactive"    W$INPUT.SELVALS<3> = "A":@VM:"D":@VM:"I"*    RETURN0003F5EXECUTE.STACKED.CMNDS0c2SUBROUTINE EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,NUM.RETURNED,REPORT)*REPORT=''NUM.RETURNED=1IF STACKED.1 <> '' THEN   EXECUTE STACKED.1 CAPTURING DUMMY   NUM.RETURNED=SYSTEM(11)   IF NOT(NUM.RETURNED) THEN RETURN ENDBREAK.ON.POS2=INDEX(STACKED.2,'BREAK-ON ',2)IF BREAK.ON.POS2 THEN   BREAK.ON.POS=INDEX(STACKED.2,'BREAK-ON ',1)   PLATFORM=OCONV('PLATFORM','TMVDB.CONTROL;X;1;1')   IF PLATFORM = '' THEN PLATFORM='D3'   IF PLATFORM = 'JB' THEN      STR1=STACKED.2[1,BREAK.ON.POS-1]      STR2=STACKED.2[BREAK.ON.POS,9999999]      PIPE.POS=INDEX(STR2,' PIPE ',1)      IF PIPE.POS THEN         BREAK.VAR=STR2[1,PIPE.POS-1]         BREAK.VAR=TRIM(BREAK.VAR)         BREAK.VAR=FIELD(BREAK.VAR,' ',2)         BREAK.VAR=' BREAK-ON ':BREAK.VAR:' "':"'V'|":'" '         STR2=STR2[PIPE.POS,9999999]       END ELSE         BREAK.VAR=''       END      STACKED.2=STR1:BREAK.VAR:STR2    END ENDEXECUTE STACKED.2 CAPTURING REPORTCONVERT '$,' TO '' IN REPORTRETURNEND0000D7TEST.TOM0c2PROMPT ''INPUT A,1CRT AINPUT A,0CRT A****DATA "LIST SALES.FILE.PATH"****EXECUTE 'SELECT SALES.FILE.PATH WITH CLOSE.DATE = "5-1-20"'**IF 0 THEN XXX=@SENTENCE ELSE XXX=SENTENCE()**CRT XXX**CRT XXX0003E3CREATE.UD.QPOINTER0c2SUBROUTINE CREATE.UD.QPOINTER(ACCOUNT,FILENAME,CALL.IT,FI.QPOINTER)OPEN '',CALL.IT TO FI.QPOINTER THEN   IF CALL.IT <> 'QFILE' THEN RETURN ENDCALL.IT.PARAM=CALL.ITCALL.IT=''OPEN '','VOC' TO FI.VOC ELSE RETURNOPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE   UD.ACCOUNTS='F'   UD.ACCOUNTS<-1>='@UDTHOME/sys/UD.ACCOUNT'   UD.ACCOUNTS<-1>='@UDTHOME/sys/D_UD.ACCOUNT'   WRITE UD.ACCOUNTS ON FI.VOC, 'UD.ACCOUNTS'   OPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE RETURN ENDREADV PATH FROM FI.UD.ACCOUNTS, ACCOUNT, 1 ELSE RETURNF.POINTER='F'F.POINTER<2>=PATH:'/':FILENAMEF.POINTER<3>=PATH:'/D_':FILENAMEWRITE F.POINTER ON FI.VOC, CALL.IT.PARAMOPEN '',CALL.IT.PARAM TO FI.QPOINTER THEN   CALL.IT=CALL.IT.PARAM   RETURN ENDF.POINTER<3>=PATH:'/D_VOC'WRITE F.POINTER ON FI.VOC, CALL.IT.PARAMOPEN '',CALL.IT.PARAM TO FI.QPOINTER THEN   * CHANGE CALL.IT TO SUCCESSFUL NAME   * OTHERWISE IT WILL RETURN WITH NULL SAYING FAILURE   CALL.IT=CALL.IT.PARAM ENDRETURN00266FSUB.HERVE0c2SUBROUTINE SUB.HERVE** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Herve html to pdf test"     ;* Title for widget title barW$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                   ;* Full width (1=1/3, 2=2/3, 3=3/3)W$PDFABLE = 1                 ;* Can be converted to PDFW$PRINTABLE = 1               ;* Can be printed*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here*OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE NULLREAD HTML FROM FILE.WEB.FORMS, 'VALENCOURS2368' ELSE HTML=''**** Create a HTML string*** In this example, we are including our own styles & scripts in <head>.* This causes MV Dashboard to display this content in an <iframe>.* Because this content does not render properly using the built-in* DOCTYPE:**   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"*   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">** we supply our own DOCTYPE to override the standard DOCTYPE.*HTML = ''HTML<-1> = \<!DOCTYPE HTML PUBLIC>\HTML<-1> = \<html>\HTML<-1> = \<head>\HTML<-1> = \<title>Etat de la Valorisation des Encours</title>\HTML<-1> = \<style type="text/css"> \HTML<-1> = \body {background:#CCC; height:100%;}\HTML<-1> = \h1 { color:#000000; font-weight:bold; font-size:40px; }\HTML<-1> = \h2 { color:#000000; font-weight:bold; font-size:30px; }\HTML<-1> = \h3 { color:#000000; font-size:20px; }\HTML<-1> = \table { width: 97%; border: 1px solid #777; border-collapse:collapse; font-family:sans_serif, Verdana, Arial, Helvetica; }\HTML<-1> = \thead { background-color:#fa3; }\HTML<-1> = \tfoot { background-color:#fea; }\HTML<-1> = \td { border-style:solid; border-width:1px; border-color:silver; font-size:10px; }\HTML<-1> = \th { border-style:solid; border-width:1px; border-color:#6f5b85; font-size:11px; }\HTML<-1> = \.titre { color:blue; font-weight:bold; font-size:40px; }\HTML<-1> = \.stitre { color:BLACK; font-weight:bold; font-size:20px; }\HTML<-1> = \.over { background-color: #ef2e25; color: white; }\HTML<-1> = \.normal { background-color: white; }\HTML<-1> = \.lig0 { background-color: #dcdcdc; } /* lignes paires */\HTML<-1> = \.lig1 { background-color: #white; }  /* lignes impaires */\HTML<-1> = \.alink { font-weight: bold; text-decoration: none; color: blue; }\HTML<-1> = \#date { position: absolute; top: 10px; right: 15px; font-size: 14px; }\HTML<-1> = \#titre { position: absolute;top: 30px; left: 300px; font-weight: bold; font-size: 30px; }\HTML<-1> = \#stitre { position: absolute; top: 60px; left: 300px; font-weight: bold; font-size: 14px; }\HTML<-1> = \#dateheure { position: absolute; top: 0px; width: 95%; text-align: right; font-size: 12px; }\HTML<-1> = \#container { width: 100%; padding:15px;}\HTML<-1> = \#banniere { margin:auto; background:url(logo.png) no-repeat; width:1000px; height:100px; padding-top:10px;position: relative;}\HTML<-1> = \#content { width:1050px; background:#FFF; border-radius:15px; margin: auto; -moz-border-radius: 15px; display: block;}\HTML<-1> = \.titre_tab { font-size:14px; font-weight:bold; text-align:left; padding-left:5px;}\HTML<-1> = \.entete_tab_sem { background:#CCC;font-size:12px; font-weight:bold; text-align:center;}\HTML<-1> = \.entete_tab_we { background:#fa3;font-size:12px; font-weight:bold; text-align:center;}\HTML<-1> = \.cell_sem { text-align:center;background:#CFC;margin:0;padding:0;font-size:12px;}\HTML<-1> = \.cell_we { background:#Fea};\HTML<-1> = \</style>\HTML<-1> = \<script>\HTML<-1> = \  var affiche = "-";\HTML<-1> = \function changetout(max) {\HTML<-1> = \   var i    = 0;\HTML<-1> = \   var val  = "";\HTML<-1> = \   for (i=1; i <= max; i++) {\HTML<-1> = \        if (affiche == "-") { val = "G" } else { val = "D" }\HTML<-1> = \        val = val + i;\HTML<-1> = \        change(val);\HTML<-1> = \   }\HTML<-1> = \   document.getElementById("idth1").innerText = affiche;\HTML<-1> = \   if (affiche == "-") {\HTML<-1> = \       affiche = "+"\HTML<-1> = \   } else {\HTML<-1> = \       affiche = "-"\HTML<-1> = \   }\HTML<-1> = \}\HTML<-1> = \function change(lig) {\HTML<-1> = \   car1 = lig.slice(0,1);\HTML<-1> = \   car2 = lig.slice(1,lig.length);\HTML<-1> = \   obj = document.getElementById(lig);\HTML<-1> = \   val = obj.style.display;\HTML<-1> = \   obj.style.display = "none";\HTML<-1> = \   if (car1 == "G") {\HTML<-1> = \      val = "D" + car2;\HTML<-1> = \   } else {\HTML<-1> = \      val = "G" + car2;\HTML<-1> = \   }\HTML<-1> = \   document.getElementById(val).style.display = "";\HTML<-1> = \}\HTML<-1> = \</script>\HTML<-1> = \</head>\HTML<-1> = \<body>\HTML<-1> = \<div id="BANNIERE">\HTML<-1> = \<div id="titre">Etat de la Valorisation des Encours<br/></div>\HTML<-1> = \<div id="dateheure">le 14/12/2015 &agrave; 18:05:24</div></div>\HTML<-1> = \<div id="container">\HTML<-1> = \<table>\HTML<-1> = \<thead>\HTML<-1> = \<tr>\HTML<-1> = \<th colspan="4">Composant</th>\HTML<-1> = \<th colspan="2">OF</th>\HTML<-1> = \<th colspan="2">OF Lanc&eacute;</th>\HTML<-1> = \<th colspan="4">Pr&eacute;vu</th>\HTML<-1> = \<th colspan="4">R&eacute;el</th>\HTML<-1> = \</tr>\HTML<-1> = \<tr>\HTML<-1> = \<th>Type</th>\HTML<-1> = \<th>ABC</th>\HTML<-1> = \<th>Code</th>\HTML<-1> = \<th>D&eacute;signation</th>\HTML<-1> = \<th>No</th>\HTML<-1> = \<th>Etat</th>\HTML<-1> = \<th>No</th>\HTML<-1> = \<th>Qt&eacute;</th>\HTML<-1> = \<th>PU</th>\HTML<-1> = \<th>Co&ucirc;t</th>\HTML<-1> = \<th>Co&ucirc;t Prod</th>\HTML<-1> = \<th>No<br/>OF</th>\HTML<-1> = \<th>PU</th>\HTML<-1> = \<th>Co&ucirc;t</th>\HTML<-1> = \<th>Co&ucirc;t Prod</th>\HTML<-1> = \<th>No<br/>OF</th>\HTML<-1> = \</tr>\HTML<-1> = \</thead><tbody>\HTML<-1> = \<tr class="lig1"><td></td><td></td>\HTML<-1> = \<td>T370366-0204-A0</td><td></td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>76300</td><td align=right></td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right></td><td align=right></td><td align=right>0.00</td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="lig0"><td>MS</td><td></td>\HTML<-1> = \<td>1041</td><td>Bouchon AMORIM</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>76300</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>76300</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="ligtot"><td colspan="8">Total MS</td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \<tr class="lig1"><td>N</td><td></td>\HTML<-1> = \<td>0000750-R1052-0</td><td>Capsule R1052-0</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>76300</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>76300</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="lig0"><td>N</td><td></td>\HTML<-1> = \<td>6X75CL.DBT.SS.CR</td><td>CARTON DE 6 BTL DE 0.75</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>12743</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>12743</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="lig1"><td>N</td><td></td>\HTML<-1> = \<td>B01.001</td><td>Bouteille 0.75 all&eacute;g&eacute;e</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>76300</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>76300</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="lig0"><td>N</td><td></td>\HTML<-1> = \<td>P2E.EURO</td><td>Palette EURO<br/>80x120<br/>24kg &agrave; vide</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>130</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>130</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="ligtot"><td colspan="8">Total N</td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \<tr class="lig1"><td>P</td><td>2013</td>\HTML<-1> = \<td>U370018-0000B-1</td><td>PINOT GRIS<br/>QUALITE SYSTEM U<br/>MILLESIME 2013</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>573</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>574</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="ligtot"><td></td><td colspan="7">Total 2013</td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="ligtot"><td colspan="8">Total P</td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \</tr>\HTML<-1> = \</tbody>\HTML<-1> = \<tfoot><tr><td colspan="8">Total G&eacute;n&eacute;ral </td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \</tr><tr><td colspan="8"></td><td></td><td></td><td colspan="2" align=center>0</td><td></td><td></td><td colspan="2" align=center>0</td>\HTML<-1> = \</tr>\HTML<-1> = \</tfoot>\HTML<-1> = \</table>\HTML<-1> = \</div>\HTML<-1> = \</body>\HTML<-1> = \</html>\W$HTML.DATA = HTML**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000DFADEMO.FINANCIALS.DASHBOARD0c2SUBROUTINE DEMO.FINANCIALS.DASHBOARD** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*WEB$TITLE='Demo Company, Financial Picture'WEB.FORM.NAME='DEMO.FINANCIALS.DASHBOARD'W$TYPE='HTML'W$TITLE='Demo Financial Company'W$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.CONTROL' TO FILE ELSE STOPNOV15=ICONV('11-15-15','D')TODAY=DATE()IF TODAY > NOV15 THEN   TODAY=NOV15   TIME.DATE=OCONV(TIME(),'MTHS'):' ':OCONV(TODAY,'D4') END ELSE   TIME.DATE=TIMEDATE() ENDOTODAY=OCONV(TODAY,'D4-')TODAY.MO=OTODAY[1,2]+0TODAY.YYYY=OTODAY[7,4]IF INDEX(TIME.DATE,'CALCULATIONS THROUGH',1) THEN   * LAST CALCULATION WAS FOR END OF LAST YEAR   DASHBOARD.YYYY=TODAY.YYYY-1 END ELSE DASHBOARD.YYYY=TODAY.YYYYIF LEN(WIDGET.USER.DATA(1)) = 4 THEN   WRITE WIDGET.USER.DATA(1) ON FILE, 'DASHBOARD.YYYY' END ELSE   WIDGET.USER.DATA(1)=DASHBOARD.YYYY ENDCONVS=''LAST.YYYY=TODAY.YYYY-1LAST.EOM=ICONV(TODAY.MO:'-01-':TODAY.YYYY,'D')-1*** BUILD FRESH STATIC DATA IF A NEW RUN DATE*READ LAST.BUILT FROM FILE, 'LAST.STATIC.BUILD' ELSE LAST.BUILT=''IF LAST.BUILT <> DATE() THEN   CALL BUILD.DEMO.FINANCIAL.PICTURE(TODAY.YYYY,TODAY,LAST.EOM)   WRITE LAST.BUILT ON FILE, 'LAST.STATIC.BUILD' ENDREAD REC FROM FILE, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''** DEFAULT CONVERSIONS TO $FOR I = 4 TO 35   IF I < 29 OR I > 32 THEN      CONVS<I>='$'    END NEXT I* CHANGE THOSE THAT AREN'TCONVS<6>='%'; CONVS<10>='%'; CONVS<17>='%'; CONVS<24>='%'CONVS<12>='%'; CONVS<13>='%'; CONVS<14>='%'CONVS<19>='%'; CONVS<20>='%'; CONVS<21>='%'CONVS<26>='%'; CONVS<27>='%'; CONVS<28>='%'*MATWRITE WIDGET.USER.DATA ON FILE, 'TEST.LINK'*W$PRINTABLE=1W$PDFABLE=1OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE RETURNREAD HTML FROM FILE.WEB.FORMS, WEB.FORM.NAME ELSE HTML=''***USER.ID=G$USERID*W$TITLE:='  Demo Financials  -- last updated --  ':TIME.DATE**WRITE HTML ON FILE.WEB.FORMS, 'TEST.HTML'*** DYNAMIC VARIABLES**INSERT.FIELD=DB.REC<4>;  * CUSTOMER*IF INSERT.FIELD = '' THEN INSERT.FIELD='&nbsp;'*CALL SWAP(HTML,'~1~',INSERT.FIELD)FOR I = 1 TO 46   INSERT.FIELD=REC<I>IF INSERT.FIELD = '' THEN INSERT.FIELD=I   CONV=CONVS<I>   BEGIN CASE      CASE CONV = ''; NULL      CASE CONV = '$'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD2,$')      CASE CONV = '%'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD1'):'%'      CASE 1; INSERT.FIELD=OCONV(INSERT.FIELD,CONV)   END CASE   IF INSERT.FIELD = '' THEN INSERT.FIELD='&nbsp;'   CALL SWAP(HTML,'~':I:'~',INSERT.FIELD) NEXT I   *W$TEXT.DATA=HTMLIF 0 THEN; *IF TODAY.MO = 1 THEN   W$INPUT.PROMPT<1>='As of Date'   W$INPUT.TYPE<1> = "SELECT"   W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(1)   W$INPUT.UDPOS<1> = 1   W$INPUT.BUTTON<1> = "Apply"   W$INPUT.SELVALS<1>=TODAY.YYYY-1:CHAR(253):TODAY.YYYY   W$INPUT.SELOPTS<1>='12-31-':TODAY.YYYY-1:CHAR(253):OCONV(DATE(),'D4-')   ITIME=ICONV(FIELD(TIME.DATE,' ',1),'MT')   NEXT.TIME=ITIME+1800;  * 30 MINUTES   IF ABS(TIME()-NEXT.TIME) < 300 THEN;  * WITHIN 5 MINUTES TELL LONGER      NEXT.TIME+=1800    END   REFRESH.TIME=' - Wont refresh until app. ':OCONV(NEXT.TIME,'MTH')   IF DASHBOARD.YYYY = TODAY.YYYY THEN      * DECEMBER WILL REQUIRE A RECALC      W$INPUT.SELOPTS<1,1>:=REFRESH.TIME    END ELSE      * TODAY WILL REQUIRE A RECALC      W$INPUT.SELOPTS<1,2>:=REFRESH.TIME    END   * ENDWRITE HTML ON FILE.WEB.FORMS, 'LAST.':WEB.FORM.NAMERETURNEND000551SUB.SC.LIB.PIE0c2SUBROUTINE SUB.SC.LIB.PIE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Pie Demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*IF INDEX(G$WIDGET.NAME,'Progs',1) THEN  PIE.CNT = "PROG"  W$TITLE = "Source Code: Programs by Library"END ELSE  PIE.CNT = "LINES"  W$TITLE = "Source Code: Lines by Library"ENDW$TYPE = "FC3DPIE"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*DIM LIB.FILES(3), PROGS(3), LINES(3), LIBS(3)*LIBS(1) = "MVDB.SUBS"LIBS(2) = "RSS.BP"LIBS(3) = "WBPD"*MAT PROGS = 0; MAT LINES = 0*TOT.LINES = 0 ; TOT.PROGS = 0FOR N = 1 TO 3  OPEN LIBS(N) TO LIB.FILES(N) ELSE STOP 201, LIBS(N)  W$PIE.LABELS<1,N> = LIBS(N)  SELECT LIB.FILES(N)  LOOP    READNEXT ID ELSE EXIT    PROGS(N) += 1    IF PIE.CNT # "PROG" THEN      READ REC FROM LIB.FILES(N), ID THEN        LINES(N) += DCOUNT(REC, @AM)      END    END  REPEAT  TOT.LINES += LINES(N)  TOT.PROGS += PROGS(N)  IF PIE.CNT = "PROG" THEN    W$PIE.VALUES<1,N> = PROGS(N)  END ELSE    W$PIE.VALUES<1,N> = LINES(N)  END NEXT N*W$PIE.CAPTION = "By Program File"IF PIE.CNT = "PROG" THEN  W$CHART.OPTIONS<-1> = "subCaption='":TOT.PROGS:" Total Programs'"  W$CHART.OPTIONS<-1> = "showValues='1'"END ELSE  W$CHART.OPTIONS<-1> = "subCaption='":OCONV(TOT.LINES,'MD,'):" Total Lines'"END*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000512SUB.DEMO.NET.INCOME.CHART0c2SUBROUTINE SUB.DEMO.NET.INCOME.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Net Income"W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''YEARS=REC<67>NET.INCOMES=REC<75>MAX.YEARS=DCOUNT(YEARS,CHAR(253))FIRST.YEAR=YEARS<1,1>CURRENT.YEAR=YEARS<1,MAX.YEARS>*W$BAR.CAPTION = "Net Income From ":FIRST.YEAR:' to ':CURRENT.YEARW$BAR.XMEMO = "Year"W$BAR.YMEMO = "Net Income"**MAX.INCOME=0FOR N = 1 TO MAX.YEARS  NET.INCOME=OCONV(REC<36-N>,'MD02')  IF NET.INCOME > MAX.INCOME THEN MAX.INCOME=NET.INCOME  YEAR=YEARS<1,N>  W$BAR.VALUES<1,N> = NET.INCOME  W$BAR.XLABELS<1,N> = YEARNEXT N* ROUND MAX INCOME UP TO THE NEXT 250000MAX.INCOME+=250000MAX.INCOME=INT(MAX.INCOME/250000) * 250000W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.INCOME:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'W$CHART.OPTIONS<-1>='forceDecimals="1"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'**RETURN000068REBUILD.FILES0c2FILE='SALES'; EVERY.NUM=6; GOSUB MOVE.ITFILE='AR'; EVERY.NUM=3; GOSUB MOVE.ITFILE='AP000277SUB.GRID.TEST0c2SUBROUTINE SUB.GRID.TEST** Copyright (c) 2010 SB, Inc. All rights reserved.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Untitled TABLE"W$TYPE = "TABLE"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN** Set up column labelsW$TABLE.COL.LABELS<1,1> = "Column 1"W$TABLE.COL.LABELS<1,2> = "Column 2"** Column justification = left, right, centerW$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "right"** Table RowsFOR ROW = 1 TO 5  W$TABLE.DATA<ROW,1> = ROW:",1"  W$TABLE.DATA<ROW,2> = ROW:",2"NEXT ROW** TotalsW$TABLE.TOTALS<1,1> = "2"W$TABLE.TOTALS<1,2> = "4"RETURN000255SUB.DEMO.DRILLDOWN0c2SUBROUTINE SUB.DEMO.DRILLDOWN** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Demo drill-down widget*INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TEXT"W$TITLE = "Drilldown Widget"W$WIDTH = 3W$PRINTABLE = 1*IF G$QUERYMODE = 1 THEN RETURN*W$TEXT.DATA = "Source Widget: ":G$DD.REFERRERW$TEXT.DATA<-1> = " "W$TEXT.DATA<-1> = "Contents of WIDGET.USER.DATA:"W$TEXT.DATA<-1> = " "FOR X = 1 TO 100  IF WIDGET.USER.DATA(X) # "" THEN    W$TEXT.DATA<-1> = "WIDGET.USER.DATA(":X:") = ":WIDGET.USER.DATA(X)  ENDNEXT X*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000314SUB.PORTAL.SETUP.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.SETUP.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Portal Setup Instructions"     ;* Title for widget title barW$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here*OPEN '','WEB.FORMS' TO FI.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FI.WEB.FORMS, 'PORTAL.SETUP.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00552DSUB.PORTAL.SALES.REPORT.SETUP0c2SUBROUTINE SUB.PORTAL.SALES.REPORT.SETUP** DEFINE PARAMETERS FOR PORTAL SALES REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOP*W$TITLE = "Portal Sales Report Setup"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*EQUATE ACCOUNT TO WIDGET.USER.DATA(1)EQUATE REPORT.FILE TO WIDGET.USER.DATA(2)EQUATE SALE.DATE.DICT TO WIDGET.USER.DATA(3)EQUATE SALE.MONTH.DICT TO WIDGET.USER.DATA(4)EQUATE SALE.YEAR.DICT TO WIDGET.USER.DATA(5)EQUATE SALE.AMOUNT.DICT TO WIDGET.USER.DATA(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO WIDGET.USER.DATA(7)EQUATE SALESMAN.DICT TO WIDGET.USER.DATA(8)EQUATE BRANCH.DICT TO WIDGET.USER.DATA(9)EQUATE REGION.DICT TO WIDGET.USER.DATA(10)EQUATE SALE.DATE.AMC TO WIDGET.USER.DATA(11)EQUATE SALE.AMOUNT.AMC TO WIDGET.USER.DATA(12)EQUATE SALE.AMOUNT.CONV TO WIDGET.USER.DATA(13)EQUATE SALE.AMOUNT.COOR TO WIDGET.USER.DATA(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO WIDGET.USER.DATA(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO WIDGET.USER.DATA(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO WIDGET.USER.DATA(17)EQUATE SALESMAN.AMC TO WIDGET.USER.DATA(18)EQUATE SALESMAN.TFILE TO WIDGET.USER.DATA(19)EQUATE BRANCH.AMC TO WIDGET.USER.DATA(20)EQUATE BRANCH.TFILE TO WIDGET.USER.DATA(21)EQUATE REGION.AMC TO WIDGET.USER.DATA(22)EQUATE REGION.TFILE TO WIDGET.USER.DATA(23)OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE   MESSAGE='No Platform Type Defined'   GOTO MESSAGE.DISPLAY ENDFIRST.TIME=0IF G$SUBMITTED <> '1' THEN   IF PLATFORM = 'UV' OR PLATFORM = 'UD' THEN      OPEN '','UD.DICT.DASHBOARD.CLOSING.STATS' TO FI THEN         OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END      OPEN '','UD.DICT.SALES' TO FI THEN         OPEN 'DICT','PORTAL.SALES' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END      OPEN '','UD.DICT.AR' TO FI THEN         OPEN 'DICT','PORTAL.AR' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END      OPEN '','UD.DICT.AP' TO FI THEN         OPEN 'DICT','PORTAL.AP' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END    END   MATREAD WIDGET.USER.DATA FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE      MAT WIDGET.USER.DATA = ''      FIRST.TIME=1    END   IF NOT(FIRST.TIME) THEN      GOSUB VALIDATE.PREVIOUS.INPUTS    END END ELSE   GOSUB VALIDATE.PREVIOUS.INPUTS   MATWRITE WIDGET.USER.DATA ON FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ENDGOSUB SET.PROMPTSRETURN*SET.PROMPTS:*W$INPUT.PROMPT<1> = "Sales File Account"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = ACCOUNT*W$INPUT.PROMPT<2> = "Name Of Sales File"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = REPORT.FILE*W$INPUT.PROMPT<3> = "Date Of Sale Dict Name"W$INPUT.TYPE<3> = 'TEXT'W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = SALE.DATE.DICT*W$INPUT.PROMPT<4> = "Month Of Sale Dict Name"W$INPUT.TYPE<4> = 'TEXT'W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = SALE.MONTH.DICT*W$INPUT.PROMPT<5> = "Year Of Sale Dict Name"W$INPUT.TYPE<5> = 'TEXT'W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = SALE.YEAR.DICT*W$INPUT.PROMPT<6> = "Amount Of Sale Dict Name"W$INPUT.TYPE<6> = 'TEXT'W$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = SALE.AMOUNT.DICT*W$INPUT.PROMPT<7> = "Cost Of Sale Dict Name"W$INPUT.TYPE<7> = 'TEXT'W$INPUT.UDPOS<7> = 7W$INPUT.DEFAULT<7> = COST.OF.SALE.AMOUNT.DICT*W$INPUT.PROMPT<8> = "Salesman Dict Name"W$INPUT.TYPE<8> = 'TEXT'W$INPUT.UDPOS<8> = 8W$INPUT.DEFAULT<8> = SALESMAN.DICT*W$INPUT.PROMPT<9> = "Branch Dict Name"W$INPUT.TYPE<9> = 'TEXT'W$INPUT.UDPOS<9> = 9W$INPUT.DEFAULT<9> = BRANCH.DICT*W$INPUT.PROMPT<10> = "Region Dict Name"W$INPUT.TYPE<10> = 'TEXT'W$INPUT.UDPOS<10> = 10W$INPUT.DEFAULT<10> = REGION.DICT*RETURN*VALIDATE.PREVIOUS.INPUTS:*MESSAGE=''BEGIN CASE   CASE PLATFORM = 'D3'      MD.TYPE='MD'   CASE PLATFORM = 'JB'      MD.TYPE='MD'   CASE 1      MD.TYPE='VOC'END CASEOPEN '',MD.TYPE TO FI.MD ELSE   MESSAGE='Unable to open ':MD.TYPE:' for validation purposes'   GOTO MESSAGE.DISPLAY ENDVALID.ACCOUNT=1IF ACCOUNT <> '' THEN**   EXECUTE "SET-FILE ":ACCOUNT:" ":MD.TYPE:' QFILE' CAPTURING DUMMY     QFILE.NAME='QFILE'   CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)   IF QFILE.NAME = '' THEN      MESSAGE<-1>=ACCOUNT:' is not a valid account!'      VALID.ACCOUNT=0    END**   IF PLATFORM = 'UD' THEN**      QFILE.NAME='QFILE'**      CALL CREATE.UD.QPOINTER(ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)**      IF QFILE.NAME = '' THEN**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END ELSE**      WRITE 'Q':@AM:ACCOUNT:@AM:MD.TYPE ON FI.MD, 'QFILE'**      VALID.ACCOUNT=1**      OPEN '','QFILE' TO FI.ACCOUNT.MD ELSE**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END END ELSE   VALID.ACCOUNT=0   MESSAGE<-1>='No Account defined!' ENDIF REPORT.FILE <> '' THEN   IF NOT(VALID.ACCOUNT) THEN      MESSAGE<-1>='Unable to verify ':REPORT.FILE:' file because account not properly defined!'      VALID.REPORT.FILE=0    END ELSE      VALID.REPORT.FILE=1      QFILE.NAME='QFILE'      CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)      IF QFILE.NAME = '' THEN         MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'         VALID.REPORT.FILE=0       END**      EXECUTE "SET-FILE ":ACCOUNT:" ":REPORT.FILE:' QFILE' CAPTURING DUMMY**       IF PLATFORM = 'UD' THEN**          QFILE.NAME='QFILE'**          CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)**          IF QFILE.NAME = '' THEN**             MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**             VALID.REPORT.FILE=0**           END**        END ELSE**         WRITE 'Q':@AM:ACCOUNT:@AM:REPORT.FILE ON FI.MD, 'QFILE'**         OPEN '','QFILE' TO FI.REPORT.FILE ELSE**            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**            VALID.REPORT.FILE=0**          END**       END      IF VALID.REPORT.FILE THEN         HAVE.QFILE.REC=1         READ QFILE.REC FROM FI.MD, 'QFILE' ELSE            HAVE.QFILE.REC=0            MESSAGE<-1>='Unable to create QFILE pointer to ':ACCOUNT:' ':REPORT.FILE          END         IF HAVE.QFILE.REC THEN            WRITE QFILE.REC ON FI.MD, 'DASHBOARD.SALES.FILE'            OPEN 'DICT','DASHBOARD.SALES.FILE' TO FI.DICT.REPORT.FILE ELSE                MESSAGE<-1>='Unable to open DICT ':REPORT.FILE             END          END       END    END END ELSE   MESSAGE<-1>='No Sales Report file defined!' ENDIF SALE.DATE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Date Of Sale Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.DATE.DICT:' Because No Sales File!'    END ELSE      READ SALE.DATE.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.DATE.DICT ELSE         SALE.DATE.DICT.REC=''         MESSAGE<-1>=SALE.DATE.DICT:' Does Not Exist!'       END      IF SALE.DATE.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=SALE.DATE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF SALE.DATE.DICT.REC<7>[1,1] <> 'D' AND SALE.DATE.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               SALE.DATE.AMC=SALE.DATE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF SALE.DATE.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               SALE.DATE.AMC=SALE.DATE.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               SALE.DATE.AMC=SALE.DATE.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.DATE.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF SALE.AMOUNT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Sale Amount Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.AMOUNT.DICT:' Because No Sales File!'    END ELSE      READ SALE.AMOUNT.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.AMOUNT.DICT ELSE         SALE.AMOUNT.DICT.REC=''         MESSAGE<-1>=SALE.AMOUNT.DICT:' Does Not Exist!'       END      IF SALE.AMOUNT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=SALE.AMOUNT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=SALE.AMOUNT.DICT.REC<7>[1,2]               DICT.8.1.2=SALE.AMOUNT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               SALE.AMOUNT.AMC=SALE.AMOUNT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=SALE.AMOUNT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               SALE.AMOUNT.AMC=SALE.AMOUNT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               SALE.AMOUNT.AMC=SALE.AMOUNT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.AMOUNT.DICT:' Does Not Appear To Be An Amount!'          END       END    ENDIF COST.OF.SALE.AMOUNT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Cost of Sale Amount Dictionary Defined - Gross Profit and Margin reporting will not be possible'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":COST.OF.SALE.AMOUNT.DICT:' Because No Sales File!'    END ELSE      READ COST.OF.SALE.AMOUNT.DICT.REC FROM FI.DICT.REPORT.FILE, COST.OF.SALE.AMOUNT.DICT ELSE         COST.OF.SALE.AMOUNT.DICT.REC=''         MESSAGE<-1>=COST.OF.SALE.AMOUNT.DICT:' Does Not Exist!'       END      IF COST.OF.SALE.AMOUNT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=COST.OF.SALE.AMOUNT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=COST.OF.SALE.AMOUNT.DICT.REC<7>[1,2]               DICT.8.1.2=COST.OF.SALE.AMOUNT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               COST.OF.SALE.AMOUNT.AMC=COST.OF.SALE.AMOUNT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=COST.OF.SALE.AMOUNT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               COST.OF.SALE.AMOUNT.AMC=COST.OF.SALE.AMOUNT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               COST.OF.SALE.AMOUNT.AMC=COST.OF.SALE.AMOUNT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':COST.OF.SALE.AMOUNT.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF SALE.MONTH.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Month Of Sale Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.MONTH.DICT:' Because No Sales File!'    END ELSE      READ SALE.MONTH.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.MONTH.DICT ELSE         SALE.MONTH.DICT.REC=''         MESSAGE<-1>=SALE.MONTH.DICT:' Does Not Exist!'       END      IF SALE.MONTH.DICT.REC <> '' THEN         VALID.MONTH.DICT=1         DICT.TYPE=SALE.MONTH.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF SALE.MONTH.DICT.REC<7>[1,1] <> 'D' AND SALE.MONTH.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.MONTH.DICT=0                END               SALE.MONTH.AMC=SALE.MONTH.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF SALE.MONTH.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.MONTH.DICT=0                END               SALE.MONTH.AMC=SALE.MONTH.DICT.REC<2>            CASE 1               VALID.MONTH.DICT=0               SALE.MONTH.AMC=SALE.MONTH.DICT.REC<2>         END CASE         IF NOT(VALID.MONTH.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.MONTH.DICT:' Does Not Appear To Be A Date Month!'          END       END    END ENDIF SALE.YEAR.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Year Of Sale Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.YEAR.DICT:' Because No Sales File!'    END ELSE      READ SALE.YEAR.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.YEAR.DICT ELSE         SALE.YEAR.DICT.REC=''         MESSAGE<-1>=SALE.YEAR.DICT:' Does Not Exist!'       END      IF SALE.YEAR.DICT.REC <> '' THEN         VALID.YEAR.DICT=1         DICT.TYPE=SALE.YEAR.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF SALE.YEAR.DICT.REC<7>[1,1] <> 'D' AND NOT(INDEX(SALE.YEAR.DICT.REC<8>,'D',1)) THEN                  VALID.YEAR.DICT=0                END               SALE.YEAR.AMC=SALE.YEAR.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               ATT2=SALE.YEAR.DICT.REC<2>               IF INDEX(ATT2,"'D",1) OR INDEX(ATT2,'"D',1) OR ATT2[1,1] = 'D' THEN                  VALID.YEAR.DICT=1                END ELSE                  VALID.YEAR.DICT=0                END            CASE 1               VALID.YEAR.DICT=0               SALE.YEAR.AMC=SALE.YEAR.DICT.REC<2>         END CASE         IF NOT(VALID.YEAR.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.YEAR.DICT:' Does Not Appear To Be A Date Year!'          END       END    END ENDIF SALESMAN.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Salesman Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALESMAN.DICT:' Because No Sales File!'    END ELSE      READ SALESMAN.DICT.REC FROM FI.DICT.REPORT.FILE, SALESMAN.DICT ELSE         SALESMAN.DICT.REC=''         MESSAGE<-1>=SALESMAN.DICT:' Does Not Exist!'       END      IF SALESMAN.DICT.REC <> '' THEN         VALID.SALESMAN.DICT=1         DICT.TYPE=SALESMAN.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF SALESMAN.DICT.REC<7>[1,1] <> 'T' AND SALESMAN.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.SALESMAN.DICT=0                END ELSE                  IF SALESMAN.DICT.REC<7>[1,1] = 'T' THEN                     SALESMAN.TFILE=SALESMAN.DICT.REC<7>                   END ELSE                     SALESMAN.TFILE=SALESMAN.DICT.REC<8>                   END                END               SALESMAN.AMC=SALESMAN.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(SALESMAN.DICT.REC<3>,'TRANS',1) THEN                  VALID.SALESMAN.DICT=0                END ELSE                  SALESMAN.TFILE=SALESMAN.DICT.REC<3>                END               SALE.SALESMAN.AMC=SALESMAN.DICT.REC<2>            CASE 1               VALID.SALESMAN.DICT=0               SALE.SALESMAN.AMC=SALESMAN.DICT.REC<2>         END CASE         IF NOT(VALID.SALESMAN.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALESMAN.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDIF BRANCH.DICT <> '' THEN   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":BRANCH.DICT:' Because No Sales File!'    END ELSE      READ BRANCH.DICT.REC FROM FI.DICT.REPORT.FILE, BRANCH.DICT ELSE         BRANCH.DICT.REC=''         MESSAGE<-1>=BRANCH.DICT:' Does Not Exist!'       END      IF BRANCH.DICT.REC <> '' THEN         VALID.BRANCH.DICT=1         DICT.TYPE=BRANCH.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF BRANCH.DICT.REC<7>[1,1] <> 'T' AND BRANCH.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.BRANCH.DICT=0                END ELSE                  IF BRANCH.DICT.REC<7>[1,1] = 'T' THEN                     BRANCH.TFILE=BRANCH.DICT.REC<7>                   END ELSE                     BRANCH.TFILE=BRANCH.DICT.REC<8>                   END                END               BRANCH.AMC=BRANCH.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(BRANCH.DICT.REC<3>,'TRANS',1) THEN                  VALID.BRANCH.DICT=0                END ELSE                  BRANCH.TFILE=BRANCH.DICT.REC<3>                END               SALE.BRANCH.AMC=BRANCH.DICT.REC<2>            CASE 1               VALID.BRANCH.DICT=0               SALE.BRANCH.AMC=BRANCH.DICT.REC<2>         END CASE         IF NOT(VALID.BRANCH.DICT) THEN            MESSAGE<-1>='Dictionary Item ':BRANCH.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDIF REGION.DICT <> '' THEN   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":REGION.DICT:' Because No Sales File!'    END ELSE      READ REGION.DICT.REC FROM FI.DICT.REPORT.FILE, REGION.DICT ELSE         REGION.DICT.REC=''         MESSAGE<-1>=REGION.DICT:' Does Not Exist!'       END      IF REGION.DICT.REC <> '' THEN         VALID.REGION.DICT=1         DICT.TYPE=REGION.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF REGION.DICT.REC<7>[1,1] <> 'T' AND REGION.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.REGION.DICT=0                END ELSE                  IF REGION.DICT.REC<7>[1,1] = 'T' THEN                     REGION.TFILE=REGION.DICT.REC<7>                   END ELSE                     REGION.TFILE=REGION.DICT.REC<8>                   END                END               REGION.AMC=REGION.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(REGION.DICT.REC<3>,'TRANS',1) THEN                  VALID.REGION.DICT=0                END ELSE                  REGION.TFILE=REGION.DICT.REC<3>                END               SALE.REGION.AMC=REGION.DICT.REC<2>            CASE 1               VALID.REGION.DICT=0               SALE.REGION.AMC=REGION.DICT.REC<2>         END CASE         IF NOT(VALID.REGION.DICT) THEN            MESSAGE<-1>='Dictionary Item ':REGION.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDCREATE.INDEXES=1IF MESSAGE = '' THEN   MESSAGE='Sales Report parameters properly defined!' END ELSE   IF INDEX(MESSAGE,'!',1) THEN      MESSAGE=INSERT(MESSAGE,1,0,0,'!!! ERRORS !!!')      CREATE.INDEXES=0    END ENDIF CREATE.INDEXES THEN   * CREATE PIPE DICTIONARY ITEM   IF PLATFORM = 'D3' OR PLATFORM = 'QM' OR PLATFORM = 'JB' THEN      PIPE='A'      PIPE<2>=0      PIPE<3>=' '      PIPE<8>='F;C|'      PIPE<9>='L'      PIPE<10>=1    END ELSE      PIPE='I'      PIPE<2>='"|"'      PIPE<4>='|'      PIPE<5>='1L'      PIPE<6>='S'    END   WRITE PIPE ON FI.DICT.REPORT.FILE, 'PIPE'   *   ** INDEX LOGIC   *   BEGIN CASE      CASE PLATFORM = 'D3'         INDEX.TEST='A':SALE.DATE.AMC:'(DY):':SALE.DATE.AMC:'(DM)'         READ FILE.DEF.REC FROM FI.DICT.REPORT.FILE, REPORT.FILE ELSE FILE.DEF.REC=''         IF FILE.DEF.REC <> '' AND NOT(INDEX(FILE.DEF.REC<8>,INDEX.TEST,1)) THEN            MESSAGE<-1>='Creating Indexes'            CMND1="CREATE-INDEX DASHBOARD.SALES.FILE A":SALE.DATE.AMC            EXECUTE CMND1 CAPTURING RESULT1            CMND2="CREATE-INDEX DASHBOARD.SALES.FILE ":INDEX.TEST            EXECUTE CMND2 CAPTURING RESULT2          END      CASE 1         EXECUTE "CREATE-INDEX DASHBOARD.SALES.FILE ":SALE.DATE.DICT CAPTURING RESULT1   END CASE ENDGOSUB MESSAGE.DISPLAYRETURN*MESSAGE.DISPLAY:*MAX.MSG=DCOUNT(MESSAGE,CHAR(254))W$HTML.DATA='<h3>':MESSAGE<1>IF MAX.MSG > 1 THEN   FOR MSG.NO = 2 TO MAX.MSG      W$HTML.DATA:='<br>':MESSAGE<MSG.NO>    NEXT MSG.NO ENDW$HTML.DATA:='</h3>'RETURNEND00099ASUB.SC.LIB.COL0c2    SUBROUTINE SUB.SC.LIB.COL* Changed by PORTBAS -> SUBROUTINE SUB.SC.LIB.PIE* @(#) SUB.SC.LIB.COL Ported to jBASE 17:55:32  08 JUL 2015** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Pie Demo**#MAKE# RL $OPTIONS D3    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Source Code: Lines by Program"    W$TYPE = "FCBAR2D"    W$WIDTH = 2*    IF G$QUERYMODE THEN RETURN*    IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "1"    IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = "1"    N = WIDGET.USER.DATA(1)*    IF WIDGET.USER.DATA(2) = "1" THEN        CNT.TYPE = "LINES"    END ELSE        CNT.TYPE = "BYTES"    END*    W$BAR.LABELS<1> = "Lines by Program"*    DIM LIB.FILES(3), LIBS(3)*    LIBS(1) = "RSS.BP"    LIBS(2) = "WBPD"    LIBS(3) = "MVDB.SUBS"*    W$TITLE := " (":LIBS(N):")"*    TOT.LINES = 0 ; TOT.PROGS = 0    OPEN LIBS(N) TO LIB.FILES(N) ELSE STOP 201, LIBS(N)    SELECT LIB.FILES(N)    LOOP        READNEXT ID ELSE EXIT        READ REC FROM LIB.FILES(N), ID ELSE REC = ""        IF CNT.TYPE = "LINES" THEN            LINES = DCOUNT(REC, @AM)        END ELSE            LINES = LEN(REC)        END        W$BAR.XLABELS<1,-1> = ID        W$BAR.VALUES<1,-1> = LINES        TOT.PROGS += 1        TOT.LINES += LINES    REPEAT*    IF TOT.PROGS > 0 THEN        AVG = INT( TOT.LINES / TOT.PROGS )    END ELSE AVG = 0*    W$BAR.XMEMO = "Programs"    IF CNT.TYPE = "LINES" THEN        W$BAR.YMEMO = "Lines of Code"    END ELSE        W$BAR.YMEMO = "Bytes of Code"    END    W$BAR.TREND.BEG = AVG    W$BAR.TREND.OPTS = "color='20FF20' thickness='3' showOnTop='1'"*    W$CHART.HEIGHT = 200 + 8 * TOT.PROGS    W$CHART.OPTIONS<-1> = 'numDivLines="3"'*    W$BAR.CAPTION = "In Program File ":LIBS(N)*    W$INPUT.PROMPT<1> = "Program File"    W$INPUT.TYPE<1> = "SELECT"    W$INPUT.SELOPTS<1> = "RSS Feeds (RSS.BP)":@VM:"Includes (WBPD)":@VM:"Widget Subs (MVDB.SUBS)"    W$INPUT.SELVALS<1> = "1":@VM:"2":@VM:"3"    W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(1)    W$INPUT.UDPOS<1> = 1      ;* WIDGET.USER.DATA(1)*    W$INPUT.PROMPT<2> = "Count"    W$INPUT.TYPE<2> = "SELECT"    W$INPUT.SELOPTS<2> = "Lines of code":@VM:"Bytes of code"    W$INPUT.SELVALS<2> = "1":@VM:"2"    W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)    W$INPUT.UDPOS<2> = 2      ;* WIDGET.USER.DATA(2)    W$INPUT.BUTTON = "Go"*    INCLUDE WBPD SOURCE.VIEW.ICON*    RETURN000708SUB.DEMO.SS.COL0c2SUBROUTINE SUB.DEMO.SS.COL** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Single Series Column Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Monthly Unit Sales"W$TYPE = "FCCOLUMN2D"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "2D"BEGIN CASE  CASE WIDGET.USER.DATA(1) = "2D"    W$TYPE = "FCCOLUMN2D"  CASE WIDGET.USER.DATA(1) = "3D"    W$TYPE = "FCCOLUMN3D"  CASE WIDGET.USER.DATA(1) = "BAR"    W$TYPE = "FCBAR2D"  CASE WIDGET.USER.DATA(1) = "AREA2D"    W$TYPE = "FCAREA2D"  CASE 1    W$TYPE = WIDGET.USER.DATA(1)END CASE*W$BAR.CAPTION = "Revenue by Branch for Period 2008-08"W$BAR.XMEMO = "Branch"W$BAR.YMEMO = "Sales Revenue"*UNITS = ""UNITS<1> = "15177"UNITS<2> = "11700"UNITS<3> = "12833"UNITS<4> = "13529"UNITS<5> = "21953"UNITS<6> = "35792"UNITS<7> = "35202"UNITS<8> = "28206"UNITS<9> = "23168"UNITS<10> = "42657"UNITS<11> = "35595"UNITS<12> = "28328"UNITS<13> = "297674"UNITS<14> = "26111"UNITS<15> = "243295"UNITS<16> = "323846"UNITS<17> = "42615"UNITS<18> = "-29"UNITS<19> = "38787"UNITS<20> = "71023"UNITS<21> = "130106"*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = UNITS<N>*  W$BAR.XLABELS<1,N> = OCONV(ICONV(N:"/1",'D'),'DMA')[1,3]  W$BAR.XLABELS<1,N> = N  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = UNITS<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = NNEXT N*W$INPUT.PROMPT = "Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "2D Column":@VM:"3D Column":@VM:"Bar Chart":@VM:"2D Area Chart"W$INPUT.SELVALS = "2D":@VM:"3D":@VM:"BAR":@VM:"AREA2D"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000B92SUB.DEMO.MAP.USA0c2SUBROUTINE SUB.DEMO.MAP.USA** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: US Map demonstration* 6-1-15 ZUMASYS CHANGE MAP ID DELIMITER FROM * TO #**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - States by Alphabet"W$TYPE = "USAMAP"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'READ STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ''CONVERT "," TO @VM IN STATE.NAMES*W$CHART.OPTIONS<-1> = 'animation="0"'W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'W$CHART.OPTIONS<-1> = 'legendShadow="1"'W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'*IF WIDGET.USER.DATA(1) # "" THEN  * This is a drill-down run on this widget - we are now to display info for a specific state  OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'  EXECUTE 'SELECT MVDB.MAP.DATA WITH NAME = "':WIDGET.USER.DATA(2):'"' CAPTURING JUNK  N = 0  LOOP    READNEXT ID ELSE EXIT    READ REC FROM F.MVDB.MAP.DATA, ID THEN      N += 1      NAME = REC<2>*6-1-15*      W$MAP.IDS<1,N> = FIELD( ID, '*', 2 )      W$MAP.IDS<1,N> = FIELD( ID, '#', 2 ); *6-1-15      W$MAP.VALUES<1,N> = (SEQ(REC<2>[1,1]) - SEQ('A')) + 1      W$MAP.VALUE.TOOLTEXT<1,N> = NAME      W$FW.DD.WIDGET<1,N> = "Drilldown Demo"      W$FW.DD.UD.POS<1,N,1> = 1*6-1-15*      W$FW.DD.UD.VAL<1,N,1> = FIELD(ID,'*',1)      W$FW.DD.UD.VAL<1,N,1> = FIELD(ID,'#',1); *6-1-15*      W$FW.DD.UD.POS<1,N,2> = 2      W$FW.DD.UD.VAL<1,N,2> = ID      W$FW.DD.UD.POS<1,N,3> = 3      W$FW.DD.UD.VAL<1,N,3> = WIDGET.USER.DATA(2)      W$FW.DD.UD.POS<1,N,4> = 4      W$FW.DD.UD.VAL<1,N,4> = REC<2>    END  REPEAT  W$LINK.LABEL<1,1> = "Return to USA Map"  W$LINK.LOCATION<1,1> = "C"  W$LINK.UD.POS<1,1> = 1  W$LINK.UD.VAL<1,1> = ""  W$LINK.ICON<1,1> = "arrow_left.png"  W$LINK.ICON.TXT<1,1> = "Back to US Map"  *  W$LINK.LABEL<1,2> = "Return to USA Map"  W$LINK.LOCATION<1,2> = "1"  W$LINK.UD.POS<1,2> = 1  W$LINK.UD.VAL<1,2> = ""  *  W$TITLE = "Demo - ":WIDGET.USER.DATA(1):" Counties by Alphabet"END ELSE ;* National map display  STATE.CNT = DCOUNT( STATE.NAMES<1>, @VM )  FOR N = 1 TO STATE.CNT    W$MAP.IDS<1,N> = STATE.NAMES<1,N>    W$MAP.VALUES<1,N> = (SEQ(STATE.NAMES<1,N>[1,1]) - SEQ('A')) + 1    W$MAP.VALUE.TOOLTEXT<1,N> := STATE.NAMES<2,N>:' (':STATE.NAMES<1,N>:')'    W$MAP.VALUE.DD<1,N> = 1 ;* Allow drill-down  NEXT NEND*W$MAP.RANGE.NAME<1,1> = "Early in Alphabet"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "10"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Middle of Alphabet"W$MAP.RANGE.LOW<1,2> = "10"W$MAP.RANGE.HIGH<1,2> = "18"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Late in Alphabet"W$MAP.RANGE.LOW<1,3> = "18"W$MAP.RANGE.HIGH<1,3> = "27"W$MAP.RANGE.COLOR<1,3> = "RED"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000355SUB.EMAILED.REPORT0c2SUBROUTINE SUB.EMAILED.REPORT** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEEQU REPORT.ID TO WIDGET.USER.DATA(1)EMAILED.REPORT=''IF REPORT.ID = '' THEN   EMAILED.REPORT='No report id found' END ELSE   OPEN '','MVDB.EMAILED.HTML' TO F.MVDB.EMAILED.HTML ELSE      EMAILED.REPORT='No MVDB.EMAILED.HTML file on system'    END   IF EMAILED.REPORT = '' THEN      READ EMAILED.REPORT FROM F.MVDB.EMAILED.HTML, REPORT.ID ELSE         EMAILED.REPORT='No report data found for ':REPORT.ID       END    END ENDW$TYPE='TEXT'W$TITLE='View TEXT report'IF INDEX(EMAILED.REPORT,'HTML',1) THEN   W$TYPE='HTML'   W$TITLE='View HTML report' ENDW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)IF G$QUERYMODE THEN RETURNW$PRINTABLE=1W$PDFABLE=1W$TEXT.DATA=EMAILED.REPORTRETURNEND000C87SUB.MAP.VARIABLE0c2SUBROUTINE SUB.MAP.VARIABLE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Variable Map* 6-1-15 ZUMASYS CHANGE MAP.DATA DELIMITER TO #** Modified by Peter Schellenbach of Zumasys 06-08-15:*  Changed test of ENUM after EXECUTE to test SYSTEM(11) instead.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Variable Map"W$TYPE = "MAP:World"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "World"*OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'*W$CHART.OPTIONS<-1> = 'animation="0"'W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'W$CHART.OPTIONS<-1> = 'legendShadow="1"'W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'*LAST.WTYPE = ""SELOPT.MAX = 0SELOPTX = 1EXECUTE \SSELECT MVDB.MAP.DATA BY NAME BY A1\ RETURNING ENUM CAPTURING ETXT*PJS 06-08-15*IF ENUM[1,3]="404" THENIF SYSTEM(11) THEN ; *PJS 06-08-15* LOOP  READNEXT ID ELSE ID="\\EOF" UNTIL ID="\\EOF" DO*6-1-15*  WTYPE = FIELD(ID,"*",1)  WTYPE = FIELD(ID,"#",1); *6-1-15  IF WTYPE # LAST.WTYPE THEN    SELOPT.MAX += 1    W$INPUT.SELOPTS<1,SELOPT.MAX> = WTYPE    IF WTYPE = WIDGET.USER.DATA(1) THEN SELOPTX = SELOPT.MAX    LAST.WTYPE = WTYPE  END REPEATEND*IF WIDGET.USER.DATA(2) = "NEXT" AND SELOPTX < SELOPT.MAX THEN SELOPTX += 1 WIDGET.USER.DATA(1) = W$INPUT.SELOPTS<1,SELOPTX>ENDIF WIDGET.USER.DATA(2) = "PREV" AND SELOPTX > 1 THEN SELOPTX -= 1 WIDGET.USER.DATA(1) = W$INPUT.SELOPTS<1,SELOPTX>ENDWIDGET.USER.DATA(2) = ""*EXECUTE \SSELECT MVDB.MAP.DATA BY NAME BY A1\ RETURNING ENUM CAPTURING ETXTMAPX = 0*PJS 06-08-15*IF ENUM[1,3]="404" THENIF SYSTEM(11) THEN ; *PJS 06-08-15* LOOP  READNEXT ID ELSE ID="\\EOF" UNTIL ID="\\EOF" DO*6-1-15*  WTYPE = FIELD(ID,"*",1)  WTYPE = FIELD(ID,"#",1); *6-1-15*  IF WTYPE # LAST.WTYPE THEN    W$INPUT.SELOPTS<1,-1> = WTYPE    LAST.WTYPE = WTYPE  END  IF WTYPE = WIDGET.USER.DATA(1) THEN    READ I FROM F.MVDB.MAP.DATA,ID THEN      MAPX += 1*6-1-15*      W$MAP.IDS<1,MAPX> = FIELD(ID,'*',2)      W$MAP.IDS<1,MAPX> = FIELD(ID,'#',2); *6-1-15      W$MAP.VALUES<1,MAPX> = (SEQ(I<1>[1,1]) - (SEQ('A')-1))      W$MAP.VALUE.TOOLTEXT<1,MAPX> := I<2>:' (':I<1>:')'    END  END REPEATEND*W$TYPE = "MAP:":WIDGET.USER.DATA(1)W$MAP.RANGE.NAME<1,1> = "Early in Alphabet"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "10"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Middle of Alphabet"W$MAP.RANGE.LOW<1,2> = "10"W$MAP.RANGE.HIGH<1,2> = "18"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Late in Alphabet"W$MAP.RANGE.LOW<1,3> = "18"W$MAP.RANGE.HIGH<1,3> = "27"W$MAP.RANGE.COLOR<1,3> = "RED"*W$INPUT.PROMPT = "Map Of"W$INPUT.TYPE = "SELECT"W$INPUT.SELVALS = W$INPUT.SELOPTSW$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*IF SELOPTX > 1 THEN W$LINK.LABEL<1,-1> = "Prev Map" W$LINK.LOCATION<1,-1> = 23 W$LINK.UD.POS<1,-1> = 2 W$LINK.UD.VAL<1,-1> = "PREV"END*IF SELOPTX < SELOPT.MAX THEN W$LINK.LABEL<1,-1> = "Next Map" W$LINK.LOCATION<1,-1> = 14 W$LINK.UD.POS<1,-1> = 2 W$LINK.UD.VAL<1,-1> = "NEXT"END*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000261UV.EXECUTE.STACKED.CMNDS0c2SUBROUTINE UV.EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,NUM.RETURNED,REPORT)*REPORT=''NUM.RETURNED=1IF STACKED.1 <> '' THEN   EXECUTE STACKED.1 RTNLIST STACKED.LIST CAPTURING NUM.RETURNED   NUM.RETURNED=TRIM(NUM.RETURNED<2>)   NUM.RETURNED=FIELD(NUM.RETURNED,' ',1)   IF NOT(NUM.RETURNED) THEN RETURN   EXECUTE STACKED.2 PASSLIST STACKED.LIST CAPTURING REPORT END ELSE   EXECUTE STACKED.2 CAPTURING REPORT ENDIF INDEX(REPORT,'0 records',1) THEN   IF DCOUNT(REPORT,@AM) < 5 THEN      NUM.RETURNED=0      REPORT=''    END ENDCONVERT '$,' TO '' IN REPORTRETURNEND000FCCSUB.DEMO.MS.COL0c2SUBROUTINE SUB.DEMO.MS.COL** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Multi Series Column Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Monthly Unit Sales"W$TYPE = "FCMSCOLUMN2D"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "2D"BEGIN CASE  CASE WIDGET.USER.DATA(1) = "2D"    W$TYPE = "FCMSCOLUMN2D"  CASE WIDGET.USER.DATA(1) = "3D"    W$TYPE = "FCMSCOLUMN3D"  CASE WIDGET.USER.DATA(1) = "BAR"    W$TYPE = "FCMSBAR2D"  CASE WIDGET.USER.DATA(1) = "AREA2D"    W$TYPE = "FCMSAREA2D"  CASE WIDGET.USER.DATA(1) = "LINE"    W$TYPE = "FCMSLINE"  CASE WIDGET.USER.DATA(1) = "STACKEDAREA"    W$TYPE = "FCSTACKEDAREA2D"  CASE WIDGET.USER.DATA(1) = "STACKEDCOLUMN2D"    W$TYPE = "FCSTACKEDCOLUMN2D"  CASE WIDGET.USER.DATA(1) = "STACKEDCOLUMN3D"    W$TYPE = "FCSTACKEDCOLUMN3D"  CASE WIDGET.USER.DATA(1) = "STACKEDBAR"    W$TYPE = "FCSTACKEDBAR2D"  CASE 1    W$TYPE = WIDGET.USER.DATA(1):"?"END CASE*W$BAR.LABELS<1> = "Regular"W$BAR.LABELS<2> = "Mid-Grade"W$BAR.LABELS<3> = "Premium"W$BAR.LABELS<4> = "Ethanol"*W$BAR.CAPTION = "Monthly Sales by Type"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Sales (USD)"*SALES = ""SALES<1> = "28452536"SALES<2> = "31208425"SALES<3> = "30245519"SALES<4> = "40425111"SALES<5> = "36515188"SALES<6> = "39144100"SALES<7> = "41655215"SALES<8> = "36615152"SALES<9> = "43944161"SALES<10> = "42251594"SALES<11> = "48833151"SALES<12> = "50122415"*TOT.SALES = SUM(SALES)*LARGEST = 0LARGEST.N = 0FOR N = 1 TO 12  W$BAR.VALUES<1,N> = OCONV(SALES<N>*.4,'MD02')  W$BAR.VALUES<2,N> = OCONV(SALES<N>*.3,'MD02')  W$BAR.VALUES<3,N> = OCONV(SALES<N>*.1,'MD02')  W$BAR.VALUES<4,N> = OCONV(SALES<N>*.2,'MD02')  W$BAR.XLABELS<1,N> = OCONV(N*30-15,'DMA')[1,3]  IF SALES<N> > LARGEST THEN LARGEST = SALES<N> ; LARGEST.N = N NEXT NDD.SALES = OCONV(TOT.SALES*.4,'MD02')DD.SALES<2> = OCONV(TOT.SALES*.3,'MD02') DD.SALES<3> = OCONV(TOT.SALES*.1,'MD02') DD.SALES<4> = OCONV(TOT.SALES*.2,'MD02') **FOR N = 1 TO 4**  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"**  W$FW.DD.UD.POS<1,N,1> = 1**  W$FW.DD.UD.VAL<1,N,1> = DD.SALES<N>**  W$FW.DD.UD.POS<1,N,2> = 2**  W$FW.DD.UD.VAL<1,N,2> = W$BAR.LABELS<N> **NEXT N VAL.CNTR = 0FOR N = 1 TO 12**  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"**  W$FW.DD.UD.POS<1,N,1> = 1**  W$FW.DD.UD.VAL<1,N,1>=W$BAR.XLABELS<1,N>  FOR NN = 1 TO 4     VAL.CNTR+=1     W$FW.DD.WIDGET<1,VAL.CNTR> = "Drilldown Demo"     W$FW.DD.UD.POS<1,VAL.CNTR,1>=1     W$FW.DD.UD.VAL<1,VAL.CNTR,1>=VAL.CNTR     W$FW.DD.UD.POS<1,VAL.CNTR,2>=2**     W$FW.DD.UD.VAL<1,VAL.CNTR,2> = W$BAR.VALUES<NN,N>     W$FW.DD.UD.VAL<1,VAL.CNTR,2> = 'MS.VALUE'     W$FW.DD.UD.POS<1,VAL.CNTR,3> = 3**     W$FW.DD.UD.VAL<1,VAL.CNTR,3>=W$BAR.XLABELS<1,N>     W$FW.DD.UD.VAL<1,VAL.CNTR,3>='MS.LABEL'     W$FW.DD.UD.POS<1,VAL.CNTR,4> = 4     W$FW.DD.UD.VAL<1,VAL.CNTR,4>=W$BAR.LABELS<NN>   NEXT NN**  W$FW.DD.UD.POS<1,N,2> = 2**  W$FW.DD.UD.VAL<1,N,2> = W$BAR.LABELS<N>NEXT NMAX.VALUE = OCONV((LARGEST * .4)*1.1,'MD02') W$CHART.OPTIONS<-1> = "yAxisMaxValue='":MAX.VALUE:"'"*W$BAR.LABEL.OPTS<1> = "showValues='0'"W$BAR.LABEL.OPTS<2> = "showValues='0'"W$BAR.LABEL.OPTS<3> = "showValues='0'"W$BAR.LABEL.OPTS<4> = "showValues='0'"*IF W$TYPE = "FCMSAREA2D" THEN  W$BAR.LABEL.OPTS<1> := " areaAlpha='50'"  W$BAR.LABEL.OPTS<2> := " areaAlpha='70'"  W$BAR.LABEL.OPTS<3> := " areaAlpha='90'"  W$BAR.LABEL.OPTS<4> := " areaAlpha='40'"END*W$INPUT.PROMPT = "Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "2D Column":@VM:"3D Column":@VM:"Bar Chart":@VM:"2D Area Chart":@VM:"Line Chart":@VM:"Stacked Area Chart":@VM:"2D Stacked Column Chart":@VM:"3D Stacked Column Chart":@VM:"Stacked Bar Chart"W$INPUT.SELVALS = "2D":@VM:"3D":@VM:"BAR":@VM:"AREA2D":@VM:"LINE":@VM:"STACKEDAREA":@VM:"STACKEDCOLUMN2D":@VM:"STACKEDCOLUMN3D":@VM:"STACKEDBAR"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN00126FSUB.PDF.CONFIG0c2SUBROUTINE SUB.PDF.CONFIG** Copyright (c) 2016 Zumasys, Inc. All rights reserved.* Description: PDF configuration widget.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "PDF Configuration"   ;* Title for widget title barW$TYPE = "HTML"                 ;* Filled in by editorW$WIDTH = 2                     ;* Full width (1=1/3, 2=2/3, 3=3/3)W$PDFABLE = 1                   ;* Enable conversion to PDF*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TEXT.INFO = "Unable to open MVDB.CONTROL"  RETURNENDW$TEXT.INFO = "" ;* No widget content at this point.*IF SYSTEM(1017) = 'WINNT' THEN isWindows = 1 ELSE isWindows = 0 ;*JB*IF isWindows THEN DIRSEP = '\' ELSE DIRSEP = '/'*READ SETTINGS.REC FROM F.MVDB.CONTROL, 'PDF.SETTINGS' ELSE SETTINGS.REC = ""IF G$SUBMITTED = 1 THEN  * Save PDF settings  FOR N = 1 TO 4    SETTINGS.REC<N> = WIDGET.USER.DATA(N)  NEXT N  OK = 0  IF SETTINGS.REC<1> THEN    * Validate NATIVE.CONTENT file    OPEN 'NATIVE.CONTENT' TO F.NATIVE.CONTENT ELSE      EXECUTE 'CREATE-FILE DICT NATIVE.CONTENT 1' CAPTURING OUTPUT ;*JB*      EXECUTE 'CREATE-FILE DATA NATIVE.CONTENT TYPE=UD' CAPTURING OUTPUT ;*JB*    END    OPEN 'NATIVE.CONTENT' TO F.NATIVE.CONTENT THEN      * Verify that directory returned by browser matches directory referenced by NATIVE.CONTENT file      EXECUTE 'JSHOW NATIVE.CONTENT':DIRSEP CAPTURING OUTPUT      IF INDEX(OCONV(OUTPUT,'MCU'),'ERROR',1) = 0 THEN        * NATIVE.CONTENT is a directory! Yeah!        NATIVE.DIR = @PATH:DIRSEP:'NATIVE.CONTENT'        IF isWindows THEN CONVERT '/' TO '\' IN NATIVE.DIR ;*UV may have wrong separator!        IF isWindows THEN          OK = (OCONV(NATIVE.DIR,'MCU') = OCONV(SETTINGS.REC<3>,'MCU'))        END ELSE          OK = (NATIVE.DIR = SETTINGS.REC<3>)        END        IF NOT(OK) THEN          W$HTML.DATA = "MV file 'NATIVE.CONTENT' does not refer to PDF directory ":SETTINGS.REC<3>:"!"        END      END ELSE        W$HTML.DATA = "MV file 'NATIVE.CONTENT' is not a directory file!"      END    END  END ELSE    OK = 1  END  IF OK THEN    WRITE SETTINGS.REC ON F.MVDB.CONTROL, 'PDF.SETTINGS'    W$HTML.DATA = "Settings saved."  END ELSE    IF W$HTML.DATA = "" THEN W$HTML.DATA = "Unable to open PDF directory!"  ENDEND ELSE  * Initialize default settings  IF SETTINGS.REC<1> = "" THEN    SETTINGS.REC<1> = 0 ;* PDF generation is disabled  END  IF SETTINGS.REC<2> = "" THEN    IF isWindows THEN      * Windows      EXEPATH = 'C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe'      SETTINGS.REC<2> = 'cmd.exe /c ""':EXEPATH:'" [INPUT_FILE] [OUTPUT_FILE]"'    END ELSE      * Linux      EXEPATH = '/usr/local/bin/wkhtmltopdf'      SETTINGS.REC<2> = EXEPATH:' [INPUT_FILE] [OUTPUT_FILE]'    END  END  IF SETTINGS.REC<3> = "" THEN    IF isWindows THEN      * Windows      NATIVE.DIR = @PATH      CONVERT '/' TO '\' IN NATIVE.DIR ;* UV sometimes uses wrong separator      SETTINGS.REC<3> = NATIVE.DIR:'\NATIVE.CONTENT'    END ELSE      * Linux      NATIVE.DIR = @PATH      SETTINGS.REC<3> = NATIVE.DIR:'/NATIVE.CONTENT'    END  END  IF SETTINGS.REC<4> = "" THEN    SETTINGS.REC<4> = 0 ;* delete generated files immediately  ENDEND*W$INPUT.PROMPT<1> = "Enable PDF generation"W$INPUT.TYPE<1> = "SELECT"W$INPUT.SELOPTS<1> = "No":@VM:"Yes"W$INPUT.SELVALS<1> = "0":@VM:"1"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = SETTINGS.REC<1>*W$INPUT.PROMPT<2> = "PDF converter command"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2TMP = SETTINGS.REC<2>CALL SWAP(TMP, '"', '&quot;')W$INPUT.DEFAULT<2> = TMPW$INPUT.PARAMS<2> = 'size="100"'**D3 requires directory to store PDF files; other platforms use DIR type fileW$INPUT.PROMPT<3> = "Directory for PDF files"W$INPUT.TYPE<3> = "TEXT"W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = SETTINGS.REC<3>W$INPUT.PARAMS<3> = 'size="100"'*W$INPUT.PROMPT<4> = "Delete PDF files after"W$INPUT.TYPE<4> = "SELECT"W$INPUT.UDPOS<4> = 4W$INPUT.SELOPTS<4,1> = "immediately"; W$INPUT.SELVALS<4,1> = 0W$INPUT.SELOPTS<4,2> = "1 day"; W$INPUT.SELVALS<4,2> = 1W$INPUT.SELOPTS<4,3> = "2 days"; W$INPUT.SELVALS<4,3> = 2W$INPUT.SELOPTS<4,4> = "3 days"; W$INPUT.SELVALS<4,4> = 3W$INPUT.SELOPTS<4,5> = "4 days"; W$INPUT.SELVALS<4,5> = 4W$INPUT.SELOPTS<4,6> = "5 days"; W$INPUT.SELVALS<4,6> = 5W$INPUT.SELOPTS<4,7> = "6 days"; W$INPUT.SELVALS<4,7> = 6W$INPUT.SELOPTS<4,8> = "7 days"; W$INPUT.SELVALS<4,8> = 7W$INPUT.SELOPTS<4,9> = "14 days"; W$INPUT.SELVALS<4,9> = 14W$INPUT.SELOPTS<4,10> = "30 days"; W$INPUT.SELVALS<4,10> = 30W$INPUT.SELOPTS<4,11> = "never"; W$INPUT.SELVALS<4,11> = 999999W$INPUT.DEFAULT<4> = SETTINGS.REC<4>*W$INPUT.BUTTON = "Save"*RETURNEND0037E6SUB.PORTAL.AR.REPORT.SETUP0c2SUBROUTINE SUB.PORTAL.AR.REPORT.SETUP** DEFINE PARAMETERS FOR PORTAL AR REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOP*W$TITLE = "Portal AR Report Setup"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*EQUATE ACCOUNT TO WIDGET.USER.DATA(1)EQUATE REPORT.FILE TO WIDGET.USER.DATA(2)EQUATE DUE.DATE.DICT TO WIDGET.USER.DATA(3)EQUATE DATE.PAID.DICT TO WIDGET.USER.DATA(4)EQUATE INVOICE.AMT.DICT TO WIDGET.USER.DATA(5)EQUATE BALANCE.DICT TO WIDGET.USER.DATA(6)EQUATE DUE.DATE.AMC TO WIDGET.USER.DATA(8)EQUATE DATE.PAID.AMC TO WIDGET.USER.DATA(9)EQUATE INVOICE.AMT.AMC TO WIDGET.USER.DATA(10)EQUATE INVOICE.AMT.CONV TO WIDGET.USER.DATA(11)EQUATE INVOICE.AMT.COOR TO WIDGET.USER.DATA(12)EQUATE BALANCE.AMC TO WIDGET.USER.DATA(13)EQUATE BALANCE.CONV TO WIDGET.USER.DATA(14)EQUATE BALANCE.COOR TO WIDGET.USER.DATA(15)EQUATE CUSTOMER.DICT TO WIDGET.USER.DATA(16)EQUATE CUSTOMER.AMC TO WIDGET.USER.DATA(17)EQUATE CUSTOMER.TFILE TO WIDGET.USER.DATA(18)*OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE   MESSAGE='No Platform Type Defined'   GOTO MESSAGE.DISPLAY ENDFIRST.TIME=0IF G$SUBMITTED <> '1' THEN   MATREAD WIDGET.USER.DATA FROM FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ELSE      MAT WIDGET.USER.DATA = ''      FIRST.TIME=1    END   IF NOT(FIRST.TIME) THEN      GOSUB VALIDATE.PREVIOUS.INPUTS    END END ELSE   GOSUB VALIDATE.PREVIOUS.INPUTS   MATWRITE WIDGET.USER.DATA ON FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ENDGOSUB SET.PROMPTSRETURN*SET.PROMPTS:*W$INPUT.PROMPT<1> = "AR File Account"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = ACCOUNT*W$INPUT.PROMPT<2> = "Name Of AR File"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = REPORT.FILE*W$INPUT.PROMPT<3> = "Due Date Dict Name"W$INPUT.TYPE<3> = 'TEXT'W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = DUE.DATE.DICT*W$INPUT.PROMPT<4> = "Date Paid Dict Name"W$INPUT.TYPE<4> = 'TEXT'W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = DATE.PAID.DICT*W$INPUT.PROMPT<5> = "Invoice Amount Dict Name"W$INPUT.TYPE<5> = 'TEXT'W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = INVOICE.AMT.DICT*W$INPUT.PROMPT<6> = "Remaining Balance Dict Name"W$INPUT.TYPE<6> = 'TEXT'W$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = BALANCE.DICT*W$INPUT.PROMPT<7> = "Customer Dict Name"W$INPUT.TYPE<7> = 'TEXT'W$INPUT.UDPOS<7> = 16W$INPUT.DEFAULT<7> = CUSTOMER.DICT*RETURN*VALIDATE.PREVIOUS.INPUTS:*MESSAGE=''BEGIN CASE   CASE PLATFORM = 'D3'      MD.TYPE='MD'   CASE PLATFORM = 'JB'      MD.TYPE='MD'   CASE 1      MD.TYPE='VOC'END CASEOPEN '',MD.TYPE TO FI.MD ELSE   MESSAGE='Unable to open ':MD.TYPE:' for validation purposes'   GOTO MESSAGE.DISPLAY ENDVALID.ACCOUNT=1IF ACCOUNT <> '' THEN**   EXECUTE "SET-FILE ":ACCOUNT:" ":MD.TYPE:' QFILE' CAPTURING DUMMY    VALID.ACCOUNT=1    QFILE.NAME='QFILE'    CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)    IF QFILE.NAME = '' THEN       MESSAGE<-1>=ACCOUNT:' is not a valid account!'       VALID.ACCOUNT=0     END**    IF PLATFORM = 'UD' THEN**       QFILE.NAME='QFILE'**       CALL CREATE.UD.QPOINTER(ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)**       IF QFILE.NAME = '' THEN**          MESSAGE<-1>=ACCOUNT:' is not a valid account!'**          VALID.ACCOUNT=0**        END**     END ELSE**       WRITE 'Q':@AM:ACCOUNT:@AM:MD.TYPE ON FI.MD, 'QFILE'**       OPEN '','QFILE' TO FI.ACCOUNT.MD ELSE**          MESSAGE<-1>=ACCOUNT:' is not a valid account!'**          VALID.ACCOUNT=0**        END**    END END ELSE   VALID.ACCOUNT=0   MESSAGE<-1>='No Account defined!' ENDIF REPORT.FILE <> '' THEN   IF NOT(VALID.ACCOUNT) THEN      MESSAGE<-1>='Unable to verify ':REPORT.FILE:' file because account not properly defined!'      VALID.REPORT.FILE=0    END ELSE      VALID.REPORT.FILE=1      QFILE.NAME='QFILE'      CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)      IF QFILE.NAME = '' THEN         MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'         VALID.REPORT.FILE=0       END**      EXECUTE "SET-FILE ":ACCOUNT:" ":REPORT.FILE:' QFILE' CAPTURING DUMMY***       IF PLATFORM = 'UD' THEN***          QFILE.NAME='QFILE'***          CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)***          IF QFILE.NAME = '' THEN***            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'***            VALID.REPORT.FILE=0***          END***        END ELSE***          WRITE 'Q':@AM:ACCOUNT:@AM:REPORT.FILE ON FI.MD, 'QFILE'***          OPEN '','QFILE' TO FI.REPORT.FILE ELSE***             MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'***             VALID.REPORT.FILE=0***           END***        END      IF VALID.REPORT.FILE THEN         HAVE.QFILE.REC=1         READ QFILE.REC FROM FI.MD, 'QFILE' ELSE            HAVE.QFILE.REC=0            MESSAGE<-1>='Unable to create QFILE pointer to ':ACCOUNT:' ':REPORT.FILE          END         IF HAVE.QFILE.REC THEN            WRITE QFILE.REC ON FI.MD, 'DASHBOARD.AR.FILE'            OPEN 'DICT','DASHBOARD.AR.FILE' TO FI.DICT.REPORT.FILE ELSE                MESSAGE<-1>='Unable to open DICT ':REPORT.FILE             END          END       END    END END ELSE   MESSAGE<-1>='No AR Report file defined!' ENDIF DUE.DATE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Due Date Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DUE.DATE.DICT:' Because No AR File!'    END ELSE      READ DUE.DATE.DICT.REC FROM FI.DICT.REPORT.FILE, DUE.DATE.DICT ELSE         DUE.DATE.DICT.REC=''         MESSAGE<-1>=DUE.DATE.DICT:' Does Not Exist!'       END      IF DUE.DATE.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DUE.DATE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DUE.DATE.DICT.REC<7>[1,1] <> 'D' AND DUE.DATE.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DUE.DATE.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DUE.DATE.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF DATE.PAID.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Date Paid Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DATE.PAID.DICT:' Because No AR File!'    END ELSE      READ DATE.PAID.DICT.REC FROM FI.DICT.REPORT.FILE, DATE.PAID.DICT ELSE         DATE.PAID.DICT.REC=''         MESSAGE<-1>=DATE.PAID.DICT:' Does Not Exist!'       END      IF DATE.PAID.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DATE.PAID.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DATE.PAID.DICT.REC<7>[1,1] <> 'D' AND DATE.PAID.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DATE.PAID.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DATE.PAID.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF INVOICE.AMT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Invoice Amount Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":INVOICE.AMT.DICT:' Because No AR File!'    END ELSE      READ INVOICE.AMT.DICT.REC FROM FI.DICT.REPORT.FILE, INVOICE.AMT.DICT ELSE         INVOICE.AMT.DICT.REC=''         MESSAGE<-1>=INVOICE.AMT.DICT:' Does Not Exist!'       END      IF INVOICE.AMT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=INVOICE.AMT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=INVOICE.AMT.DICT.REC<7>[1,2]               DICT.8.1.2=INVOICE.AMT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=INVOICE.AMT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':INVOICE.AMT.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF BALANCE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Balance Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":BALANCE.DICT:' Because No AR File!'    END ELSE      READ BALANCE.DICT.REC FROM FI.DICT.REPORT.FILE, BALANCE.DICT ELSE         BALANCE.DICT.REC=''         MESSAGE<-1>=BALANCE.DICT:' Does Not Exist!'       END      IF BALANCE.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=BALANCE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=BALANCE.DICT.REC<7>[1,2]               DICT.8.1.2=BALANCE.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=BALANCE.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               BALANCE.AMC=BALANCE.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':BALANCE.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF CUSTOMER.DICT <> '' THEN   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":CUSTOMER.DICT:' Because No AR File!'    END ELSE      READ CUSTOMER.DICT.REC FROM FI.DICT.REPORT.FILE, CUSTOMER.DICT ELSE         CUSTOMER.DICT.REC=''         MESSAGE<-1>=CUSTOMER.DICT:' Does Not Exist!'       END      IF CUSTOMER.DICT.REC <> '' THEN         VALID.CUSTOMER.DICT=1         DICT.TYPE=CUSTOMER.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF CUSTOMER.DICT.REC<7>[1,1] <> 'T' AND CUSTOMER.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.CUSTOMER.DICT=0                END ELSE                  IF CUSTOMER.DICT.REC<7>[1,1] = 'T' THEN                     CUSTOMER.TFILE=CUSTOMER.DICT.REC<7>                   END ELSE                     CUSTOMER.TFILE=CUSTOMER.DICT.REC<8>                   END                END               CUSTOMER.AMC=CUSTOMER.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(CUSTOMER.DICT.REC<3>,'TRANS',1) THEN                  VALID.CUSTOMER.DICT=0                END ELSE                  CUSTOMER.TFILE=CUSTOMER.DICT.REC<3>                END            CASE 1               VALID.CUSTOMER.DICT=0         END CASE         IF NOT(VALID.CUSTOMER.DICT) THEN            MESSAGE<-1>='Dictionary Item ':CUSTOMER.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDCREATE.INDEXES=1IF MESSAGE = '' THEN   MESSAGE='AR Report parameters properly defined!' END ELSE   IF INDEX(MESSAGE,'!',1) THEN      MESSAGE=INSERT(MESSAGE,1,0,0,'!!! ERRORS !!!')      CREATE.INDEXES=0    END ENDIF CREATE.INDEXES THEN   * CREATE PIPE DICTIONARY ITEM   IF PLATFORM = 'D3' OR PLATFORM = 'QM' OR PLATFORM = 'JB' THEN      PIPE='A'      PIPE<2>=0      PIPE<3>=' '      PIPE<8>='F;C|'      PIPE<9>='L'      PIPE<10>=1    END ELSE      PIPE='I'      PIPE<2>='"|"'      PIPE<4>='|'      PIPE<5>='1L'      PIPE<6>='S'    END   WRITE PIPE ON FI.DICT.REPORT.FILE, 'PIPE'   *   ** INDEX LOGIC   *   BEGIN CASE      CASE PLATFORM = 'D3'         INDEX.TEST='A':DUE.DATE.AMC:'(DY):':DUE.DATE.AMC:'(DM)'         READ FILE.DEF.REC FROM FI.DICT.REPORT.FILE, REPORT.FILE ELSE FILE.DEF.REC=''         IF FILE.DEF.REC <> '' AND NOT(INDEX(FILE.DEF.REC<8>,INDEX.TEST,1)) THEN            MESSAGE<-1>='Creating Indexes'            CMND1="CREATE-INDEX DASHBOARD.AR.FILE A":DUE.DATE.AMC            EXECUTE CMND1 CAPTURING RESULT1            CMND2="CREATE-INDEX DASHBOARD.AR.FILE ":INDEX.TEST            EXECUTE CMND2 CAPTURING RESULT2          END      CASE 1         EXECUTE "CREATE-INDEX DASHBOARD.AR.FILE ":DUE.DATE.DICT CAPTURING RESULT1   END CASE ENDGOSUB MESSAGE.DISPLAYRETURN*MESSAGE.DISPLAY:*MAX.MSG=DCOUNT(MESSAGE,CHAR(254))W$HTML.DATA='<h3>':MESSAGE<1>IF MAX.MSG > 1 THEN   FOR MSG.NO = 2 TO MAX.MSG      W$HTML.DATA:='<br>':MESSAGE<MSG.NO>    NEXT MSG.NO ENDW$HTML.DATA:='</h3>'RETURNEND0003F4SUB.DEMO.DAYS.TO.PAY.CHART0c2SUBROUTINE SUB.DEMO.DAYS.TO.PAY.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Average Days To Pay"W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''YEARS=REC<67>MAX.YEARS=DCOUNT(YEARS,CHAR(253))FIRST.YEAR=0*W$BAR.XMEMO = "Year (drill down for detail)"W$BAR.YMEMO = "Average Days to Pay"*N=0*FOR NN = 1 TO MAX.YEARS  AVERAGE.DAYS=REC<47-NN>  YEAR=YEARS<1,NN>  IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR  CURRENT.YEAR=YEAR  W$BAR.VALUES<1,NN> = AVERAGE.DAYS  W$BAR.XLABELS<1,NN> = YEAR  W$FW.DD.WIDGET<1,NN>='DEMO DAYS TO PAY PIE'  W$FW.DD.UD.POS<1,NN,1>=1  W$FW.DD.UD.VAL<1,NN,1>=YEARNEXT NN*W$BAR.CAPTION = "Average Days to Pay From ":FIRST.YEAR:' to ':CURRENT.YEAR*RETURN000341PORTAL.SHOW.LAST.UPDATED0c2SUBROUTINE PORTAL.SHOW.LAST.UPDATED(CALC.TYPE)INCLUDE WBPD MVDB.INCLUDEIF CALC.TYPE = 'SALES' THEN   OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO DICT.FI ELSE RETURN END ELSE   OPEN 'DICT','DASHBOARD.BALANCES' TO DICT.FI ELSE RETURN ENDREAD LAST.UPDATED FROM DICT.FI, '*LAST.UPDATED.':CALC.TYPE ELSE RETURNCUR.DATE=DATE()CUR.TIME=TIME()CUR.TIME=FIELD(CUR.TIME,'.',1)CUR.TIME=STR('0',5-LEN(CUR.TIME)):CUR.TIMECUR.DATE.TIME=CUR.DATE:CUR.TIMEDELTA.DATE.TIME=CUR.DATE.TIME-LAST.UPDATED** IF LAST 5 MINUTES THEN NO MESSAGE NEEDED*IF DELTA.DATE.TIME < 300 THEN   W$TITLE=W$TITLE:' - Updated in Last 5 Minutes'   RETURN END*LAST.DATE=LAST.UPDATED[1,5]LAST.TIME=LAST.UPDATED[6,9]APPEND.IT=' - Last Updated ':OCONV(LAST.DATE,'D4-'):' at ':OCONV(LAST.TIME,'MTH')W$TITLE=W$TITLE:APPEND.ITRETURN0007C4SUB.DEMO.ANNUAL.SALES.BY.REP0c2SUBROUTINE SUB.DEMO.ANNUAL.SALES.BY.REP***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''REVENUE.OR.GP=WIDGET.USER.DATA(1)YEAR=WIDGET.USER.DATA(2)MONTH=WIDGET.USER.DATA(3)VAL.TYPE='$'DRILLDOWN.WIDGET=''DRILLDOWN.TYPE=''BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE=YEAR:' Sales By Sales Rep'      W$BAR.YMEMO = "Sales"      SALES.AMTS=REC<48>   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE=YEAR:' Gross Profit By Sales Rep'      W$BAR.YMEMO = "Gross Profit"      SALES.AMTS=REC<49>END CASE*REPS=REC<47>LOCATE YEAR IN REC<67> SETTING YEAR.SVM ELSE YEAR.SVM=1**MAX.SALES.AMT=0N=0FIRST.YEAR=''MAX.REPS=DCOUNT(REPS,CHAR(253))FOR NN = 1 TO MAX.REPS   REP=REPS<1,NN>   SALES.AMT=SUM(SALES.AMTS<1,NN,YEAR.SVM>)   SALES.AMT=OCONV(SALES.AMT,'MD02')   IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT   W$BAR.VALUES<1,NN> = SALES.AMT   W$BAR.XLABELS<1,NN> = REP   W$FW.DD.WIDGET<1,NN> = "DEMO MONTHLY SALES BY REP"   W$FW.DD.UD.POS<1,NN,1> = 1   W$FW.DD.UD.VAL<1,NN,1> = WIDGET.USER.DATA(1); * REVENUE OR GP   W$FW.DD.UD.POS<1,NN,2> = 2   W$FW.DD.UD.VAL<1,NN,2> = YEAR   W$FW.DD.UD.POS<1,NN,3> = 3   W$FW.DD.UD.VAL<1,NN,3> = REPNEXT NNW$BAR.XMEMO = "Sales Rep (drilldown for ":W$BAR.YMEMO:" by month)"* ROUND MAX AMOUNT UP TO THE NEXT 250000MAX.SALES.AMT+=250000MAX.SALES.AMT=INT(MAX.SALES.AMT/250000) * 250000W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'RETURN0004C7SUB.PORTAL.DAYS.TO.PAY.PIE0c2SUBROUTINE SUB.PORTAL.DAYS.TO.PAY.PIE**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FC2DPIE"W$WIDTH = 3W$TITLE = 'Chart - Days To Pay '*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEYEAR=WIDGET.USER.DATA(1)OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT ELSE RETURNREAD STATS.REC FROM FI.DICT, '*CURRENT.AR.STATS' ELSE RETURNWRITE 'READ' ON FI.DICT, 'DEBUG'LOCATE YEAR IN STATS.REC<6> SETTING YEAR.POS ELSE RETURNWRITEV YEAR.POS ON FI.DICT, 'DEBUG', 2NUMBERS=STATS.REC<7,YEAR.POS>WRITEV NUMBERS ON FI.DICT, 'DEBUG', 3TOT.NUMBERS=SUM(NUMBERS)TOT.NUMBERS=TOT.NUMBERS-NUMBERS<1,1,1>WRITEV TOT.NUMBERS ON FI.DICT, 'DEBUG', 4W$TITLE:=YEARDAYS.TYPES='0 - 30 Days,31 - 60 Days,61 - 90 Days,Over 90 Days'CONVERT ',' TO CHAR(253) IN DAYS.TYPESMAX.DAYS.TYPES=DCOUNT(DAYS.TYPES,CHAR(253))FOR DAYS.CNTR = 1 TO MAX.DAYS.TYPES   NUMBER=NUMBERS<1,1,DAYS.CNTR+1>   PCT=INT(NUMBER * 1000/TOT.NUMBERS + .5)   W$PIE.LABELS<1,DAYS.CNTR>=DAYS.TYPES<1,DAYS.CNTR>   W$PIE.VALUES<1,DAYS.CNTR>=(PCT/10) NEXT DAYS.CNTRW$PIE.CAPTION='Days To Pay By Period For ':YEAR***RETURN00060ASUB.USER.AUTH0c2SUBROUTINE SUB.USER.AUTH(USERID,PASSWORD,MODE,VALID,MESSAGE,MAT USER.ITEM)** Custom user authentication subroutine. Authenticate user from the USERS file.** Input Values:*  USERID - User ID entered by the user on the login form*  PASSWORD - Password entered by the user on the login form*  MODE - "AUTH" - User is logging in, authorize.*       - "READ" - User is already authorized, just provide the USER.ITEM*                  Ignore PASSWORD.*                  VALID and MESSAGE will be ignored by caller.* * Output values*  VALID - 1=User authenticated, 0=User NOT authenticated*  MESSAGE - Alternative Message to display when user is NOT authenticated.*  MAT USER.ITEM - Dashboard user information*INCLUDE WBPD FI.MVDB.USERS** USER.ITEM values that may be populated by this program:** EQU USER.DEFAULT.DB   TO USER.ITEM(2)* EQU USER.NAME         TO USER.ITEM(3)* EQU USER.ROLE         TO USER.ITEM(6)*MAT USER.ITEM = ""*OPEN '','DM,USERS,' TO F.USERS ELSE  MESSAGE = "Unable to open DM,USERS, file."  VALID = 0  RETURNENDREAD UREC FROM F.USERS, USERID ELSE  VALID = 0  RETURNENDIF MODE = "AUTH" THEN  IF PASSWORD # "" THEN EPWD = ICONV( PASSWORD, 'UC' ) ELSE EPWD = ""END ELSE  EPWD = "" ; UREC<7> = "" ;* Make them match since we're not really authenticatingENDIF EPWD = UREC<7> THEN  VALID = 1  USER.DEFAULT.DB = "Chart Demo"  USER.NAME = UREC<1>  IF UREC<2> = "DBADMIN" THEN    USER.ROLE = "Administrator"  END ELSE USER.ROLE = "User"  RETURNEND ELSE  VALID = 0ENDRETURN000403SUB.DEMO.SALES.PERCENTS0c2SUBROUTINE SUB.DEMO.SALES.PERCENTS***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCMSCOLUMN3D"W$WIDTH = 3W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''W$BAR.LABELS<1>='Parts'W$BAR.LABELS<2>='Services'W$BAR.CAPTION='YTD Percentage of Sales by Type'W$BAR.XMEMO='Year'W$BAR.YMEMO='Percent of Sales'*YEARS=REC<38>PART.AMTS=REC<40>PART.PCTS=REC<41>SERVICE.AMTS=REC<42>SERVICE.PCTS=REC<43>MAX.YEARS=DCOUNT(YEARS,CHAR(253))**FOR YEAR.CNTR = 1 TO MAX.YEARS   W$BAR.XLABELS<1,YEAR.CNTR>=YEARS<1,YEAR.CNTR>   W$BAR.VALUES<1,YEAR.CNTR>=OCONV(PART.PCTS<1,YEAR.CNTR>,'MD1')   W$BAR.VALUES<2,YEAR.CNTR>=OCONV(SERVICE.PCTS<1,YEAR.CNTR>,'MD1') NEXT YEAR.CNTRW$CHART.OPTIONS<-1>='decimals="1"'W$CHART.OPTIONS<-1>='forceDecimals="1"'RETURNEND00078BSUB.DEMO.MONTHLY.SALES.BY.REP0c2SUBROUTINE SUB.DEMO.MONTHLY.SALES.BY.REP***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN2D"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEMONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREVENUE.OR.GP=WIDGET.USER.DATA(1)YEAR=WIDGET.USER.DATA(2)REP=WIDGET.USER.DATA(3)BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE=YEAR:' Monthly Sales For Rep: ':REP      W$BAR.YMEMO = "Sales"      READ ANNUAL.REC FROM FILE.CONTROL, 'SALES.':YEAR ELSE ANNUAL.REC=''      LOCATE REP IN ANNUAL.REC<1> SETTING REP.POS ELSE REP.POS=1      SALES.AMTS=ANNUAL.REC<2,REP.POS>      MAX.ROUNDER=250000   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE=YEAR:' Monthly Gross Profits For Rep: ':REP      W$BAR.YMEMO = "Gross Profits"      READ ANNUAL.REC FROM FILE.CONTROL, 'GPS.':YEAR ELSE ANNUAL.REC=''      LOCATE REP IN ANNUAL.REC<1> SETTING REP.POS ELSE REP.POS=1      SALES.AMTS=ANNUAL.REC<2,REP.POS>      MAX.ROUNDER=50000END CASE*MAX.MOS=DCOUNT(SALES.AMTS,CHAR(252))MAX.SALES.AMT=0FIRST.MOS=''FOR NN = 1 TO MAX.MOS   MONTH=FIELD(MONTHS,',',NN)   SALES.AMT=SALES.AMTS<1,1,NN>   SALES.AMT=OCONV(SALES.AMT,'MD02')   IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT   W$BAR.VALUES<1,NN> = SALES.AMT   W$BAR.XLABELS<1,NN> = MONTHNEXT NNW$BAR.XMEMO = "Month"* ROUND MAX AMOUNT UP TO THE NEXT MAX.ROUNDERMAX.SALES.AMT+=MAX.ROUNDERMAX.SALES.AMT=INT(MAX.SALES.AMT/MAX.ROUNDER) * MAX.ROUNDERW$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'RETURN001DF6SUB.MW.CODE.FACTORY0c2SUBROUTINE SUB.MW.CODE.FACTORY** Copyright (c) 2010 SB, Inc. All rights reserved.** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Mobile Web Code Factory"W$TYPE = "HTML"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$HTML.DATA = '<form action="/dbc/MVDB.MAIN" method="GET">'W$HTML.DATA<-1> = '<input type="hidden" name="udview" value="':G$WIDGET.NAME:'" />'*NSELECTED = "" ; TSELECTED = "" ; FSELECTED = ""CODE.TEXT = ""IF WIDGET.USER.DATA(1) # WIDGET.USER.DATA(100) THEN  TMP1 = WIDGET.USER.DATA(1)  TMP100 = WIDGET.USER.DATA(100)  MAT WIDGET.USER.DATA = ""  WIDGET.USER.DATA(1) = TMP1  WIDGET.USER.DATA(100) = TMP100ENDW$HTML.DATA<-1> = '<table width="100%">'BEGIN CASE  CASE WIDGET.USER.DATA(1) = "N"    NSELECTED = "selected"    GOSUB TYPE.SELECTOR    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos2" value="2" />'    W$HTML.DATA<-1> = 'Nav Labels (comma-separated):</td><td><input type="text" name="udval2" value="':WIDGET.USER.DATA(2):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos3" value="3" />'    W$HTML.DATA<-1> = 'Nav Links (comma-separated):</td><td><input type="text" name="udval3" value="':WIDGET.USER.DATA(3):'" /></td></tr>'    W$HTML.DATA<-1> = '</table>'    *    IF WIDGET.USER.DATA(2) # "" THEN      CODE.TEXT = 'P$NAV.OPTS = ""'      VARNAME = "P$NAV.LABEL" ; LIST = WIDGET.USER.DATA(2)      GOSUB MAKE.CODE      VARNAME = "P$NAV.LINK" ; LIST = WIDGET.USER.DATA(3)      GOSUB MAKE.CODE    END    W$HTML.DATA<-1> = '<br /><input type="submit" value="Make Code" />'  CASE WIDGET.USER.DATA(1) = "T"    TSELECTED = "selected"    GOSUB TYPE.SELECTOR    *    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos2" value="2" />'    W$HTML.DATA<-1> = 'Column Headings (comma-separated):</td><td><input type="text" name="udval2" value="':WIDGET.USER.DATA(2):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos3" value="3" />'    W$HTML.DATA<-1> = 'Column Just (L/R) (comma-separated):</td><td><input type="text" name="udval3" value="':WIDGET.USER.DATA(3):'" /></td></tr>'    W$HTML.DATA<-1> = '</table>'    IF WIDGET.USER.DATA(2) # "" THEN      CODE.TEXT<-1> = 'MAT TABLE.DEFS = ""'      VARNAME = "TABLE$LABELS" ; LIST = WIDGET.USER.DATA(2)      GOSUB MAKE.CODE      VARNAME = "TABLE$ALIGN" ; LIST = WIDGET.USER.DATA(3)      GOSUB MAKE.CODE      *      CODE.TEXT<-1> = 'TABLE$DATA = "" ;* Fill in your data here'      CODE.TEXT<-1> = 'CALL SUB.MOBI.TABLE(MAT TABLE.DEFS)'    END    W$HTML.DATA<-1> = '<br /><input type="submit" value="Make Code" />'  CASE WIDGET.USER.DATA(1) = "F"    FSELECTED = "selected"    GOSUB TYPE.SELECTOR    *    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos2" value="2" />'    W$HTML.DATA<-1> = 'Field Labels (comma-separated):</td><td><input type="text" name="udval2" value="':WIDGET.USER.DATA(2):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos3" value="3" />'    W$HTML.DATA<-1> = 'Field Types (comma-separated):</td><td><input type="text" name="udval3" value="':WIDGET.USER.DATA(3):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos4" value="4" />'    W$HTML.DATA<-1> = 'Values (comma-separated):</td><td><input type="text" name="udval4" value="':WIDGET.USER.DATA(4):'" /></td></tr>'    *    IF WIDGET.USER.DATA(2) # "" THEN      *      DIM SEL.REF(20)      DIM SEL.LISTS(20)      DIM SEL.VALS(20)      TMP.TYPES = WIDGET.USER.DATA(3)      CALL SWAP(TMP.TYPES,'\,',CHAR(9))      CONVERT "," TO @AM IN TMP.TYPES      CONVERT " " TO "" IN TMP.TYPES      CONVERT CHAR(9) TO "," IN TMP.TYPES      TMP.NAMES = WIDGET.USER.DATA(2)      CALL SWAP(TMP.NAMES,'\,',CHAR(9))      CONVERT "," TO @AM IN TMP.NAMES      CONVERT CHAR(9) TO "," IN TMP.NAMES      SEL.POS = 0      POS.LIST = ""      UDPOS = 6 ;* Next user data position (hold 5 open)      LOOP        LOCATE "SELECT" IN TMP.TYPES SETTING POS THEN          TMP.TYPES<POS> = "XXX"          SEL.POS += 1          POS.LIST<-1> = POS          W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos':UDPOS:'" value="':UDPOS:'" />'          W$HTML.DATA<-1> = 'Options for "':TMP.NAMES<POS>:'":</td><td><input type="text" name="udval':UDPOS:'" value="':WIDGET.USER.DATA(UDPOS):'" /></td></tr>'          UDPOS += 1          W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos':UDPOS:'" value="':UDPOS:'" />'          W$HTML.DATA<-1> = 'Values for "':TMP.NAMES<POS>:'":</td><td><input type="text" name="udval':UDPOS:'" value="':WIDGET.USER.DATA(UDPOS):'" /></td></tr>'          UDPOS += 1        END ELSE EXIT      REPEAT      W$HTML.DATA<-1> = '</table>'      UDPOS = 5      CONVERT @AM TO "," IN POS.LIST      W$HTML.DATA<-1> = '<input type="hidden" name="udpos':UDPOS:'" value="5" />'      W$HTML.DATA<-1> = '<input type="hidden" name="udval':UDPOS:'" value="':POS.LIST:'" />'    END ELSE      W$HTML.DATA<-1> = '</table>'    END    W$HTML.DATA<-1> = '<input type="submit" value="Make Code" />'    *    IF WIDGET.USER.DATA(2) # "" THEN      CODE.TEXT<-1> = "FORM.ID = 1"      CODE.TEXT<-1> = 'INPUT.OPTS = "" ; SEL.LISTS = "" ; SEL.VALS = ""'      CODE.TEXT<-1> = 'FIELDSET.LABEL = "Fieldset Label"'      VARNAME = "LABELS" ; LIST = WIDGET.USER.DATA(2)      GOSUB MAKE.CODE      VARNAME = "INPUT.TYPES" ; LIST = WIDGET.USER.DATA(3)      GOSUB MAKE.CODE      VARNAME = "VALUES" ; LIST = WIDGET.USER.DATA(4)      GOSUB MAKE.CODE      *      POS.LIST = WIDGET.USER.DATA(5)      CONVERT "," TO @AM IN POS.LIST      POS.CNT = DCOUNT( POS.LIST, @AM )      SXPOS = 6      FOR SX = 1 TO POS.CNT        LIST = WIDGET.USER.DATA(SXPOS)        SXPOS += 1        VALS = WIDGET.USER.DATA(SXPOS)        SXPOS += 1        CONVERT "," TO @AM IN LIST        CONVERT "," TO @AM IN VALS        FOR SVX = 1 TO DCOUNT( LIST, @AM )          CODE.TEXT<-1> = "SEL.LISTS<":POS.LIST<SX>:",":SVX:"> = \":TRIM(LIST<SVX>):"\"          CODE.TEXT<-1> = "SEL.VALS<":POS.LIST<SX>:",":SVX:"> = \":TRIM(VALS<SVX>):"\"        NEXT SVX      NEXT SX      CODE.TEXT<-1> = 'FIELDSET.OPTIONS = ""'      CODE.TEXT<-1> = "CALL SUB.MOBI.FIELDSET(LABELS,VALUES,INPUT.TYPES,INPUT.OPTS,SEL.LISTS,SEL.VALS,FIELDSET.LABEL,FORM.ID,FIELDSET.OPTIONS)"    END  CASE 1    GOSUB TYPE.SELECTOR    MAT WIDGET.USER.DATA = ""    W$HTML.DATA<-1> = '</table>'END CASE*WIDGET.USER.DATA(100) = WIDGET.USER.DATA(1) ;* Current typeW$HTML.DATA<-1> = '</form>'IF CODE.TEXT # "" THEN  CALL SWAP(CODE.TEXT,'&','&amp;')  CALL SWAP(CODE.TEXT,'<','&lt;')  CALL SWAP(CODE.TEXT,'>','&gt;')  CALL SWAP(CODE.TEXT,@AM,'<br />')  W$HTML.DATA<-1> = '<hr />'  W$HTML.DATA<-1> = '<pre>'  W$HTML.DATA<-1> = CODE.TEXT  W$HTML.DATA<-1> = '</pre>'ENDRETURN*MAKE.CODE: **CALL SWAP(LIST,'\,',CHAR(9))CONVERT "," TO @AM IN LISTCONVERT CHAR(9) TO ',' IN LISTCNT = DCOUNT( LIST, @AM )CODE.TEXT<-1> = VARNAME:' = ""'FOR N = 1 TO CNT  WORD = TRIM(LIST<N>)  IF WORD # "" THEN    CODE.TEXT<-1> = VARNAME:'<':N:'> = \':WORD:'\'  ENDNEXT NRETURN*TYPE.SELECTOR: **W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos1" value="1" />'W$HTML.DATA<-1> = 'Create code for:</td><td><select name="udval1" onChange="this.form.submit();">'W$HTML.DATA<-1> = '<option value="">Select Code Type</option>'W$HTML.DATA<-1> = '<option value="N" ':NSELECTED:'>P$NAV Navigation</option>'W$HTML.DATA<-1> = '<option value="T" ':TSELECTED:'>Table</option>'W$HTML.DATA<-1> = '<option value="F" ':FSELECTED:'>Fieldset / Form</option>'W$HTML.DATA<-1> = '</select></td></tr>'RETURN0004B6SUB.DEMO.SALE.TYPES.PIE0c2SUBROUTINE SUB.DEMO.SALE.TYPES.PIE**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FC2DPIE"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEYEAR=WIDGET.USER.DATA(1)BEGIN CASE   CASE WIDGET.USER.DATA(2) = 'PARTS'      W$TITLE = 'Chart - ':YEAR:' Parts Revenue by Type'      TYPE.ATT=52      AMTS.ATT=53      W$PIE.CAPTION='Total Parts Revenue of '   CASE WIDGET.USER.DATA(2) = 'SERVICES'      W$TITLE = 'Chart - ':YEAR:' Services Revenue by Type'      TYPE.ATT=50      AMTS.ATT=51      W$PIE.CAPTION='Total Services Revenue of 'END CASE*OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''LOCATE YEAR IN REC<67> SETTING YEAR.POS ELSE YEAR.POS=1**W$PIE.VALUE.OPTS<1,3>='isSliced="1"'*TYPES=REC<TYPE.ATT>AMOUNTS=REC<AMTS.ATT>MAX.TYPES=DCOUNT(TYPES,CHAR(253))FOR TYPE.CNTR = 1 TO MAX.TYPES   W$PIE.LABELS<1,TYPE.CNTR>=TYPES<1,TYPE.CNTR>   W$PIE.VALUES<1,TYPE.CNTR>=AMOUNTS<1,TYPE.CNTR,YEAR.POS> NEXT TYPE.CNTRW$PIE.CAPTION:=OCONV(SUM(W$PIE.VALUES),'MD2,$')**RETURN000221SUB.LISTU0c2SUBROUTINE SUB.LISTU * * Copyright (c) 2010 SB, Inc. All rights reserved. * Description: List Users * *#MAKE# RL $OPTIONS D3 INCLUDE WBPD MVDB.INCLUDE * W$TYPE = "HTML" W$TITLE = "List Users" W$WIDTH = 1 W$PRINTABLE = 1 * IF G$QUERYMODE THEN RETURN * EXECUTE "LISTU" CAPTURING JUNK W$HTML.DATA = '<div  align="left">' W$HTML.DATA<-1> = '<pre>' FOR X = 1 TO DCOUNT( JUNK, @AM )  W$HTML.DATA<-1> = JUNK<X> NEXT X W$HTML.DATA<-1> = '</pre>' W$HTML.DATA<-1> = '</div>' * INCLUDE WBPD SOURCE.VIEW.ICON * RETURN 00007EDICT_WEB.SESSION0c000001CDATE0c1A3DATED2/R8000020AGE0c1A3AGEA;(D)-(3)R800001CTIME0c1A4TIMEMTSR80000F9MVDB.USERS0c0000027guest0c2guestChartsGuest UserUser00003Fadmin0c2adminAdministratorAdmin Userno emailAdministrator000037emailed0c2788CF490Administratoremailed reportUser000036webservice0c2788CF490AdministratorwebserviceUser000281DICT_DASHBOARD.CLOSING.STATS0c000001BAMOUNT0c1A1MD2R1200001CBRANCH0c1A0G2*1L10000021COST.OF.SALE0c1A2MD2R12000028GROSS.PROFIT0c1A0MD2F;1;2;-R12000014ID0c1A0L10000021LAST.AP.REFRESH0c11910904-25-20000021LAST.AR.REFRESH0c11910904-25-20000024LAST.SALES.REFRESH0c11910904-25-2000001APIPE0c1A0 F;C|L100001CREGION0c1A0G3*1L10000034REGION*YYYYMM0c1A0A;0(G3*1):"*":0(G1*1)L1000001DSALESMAN0c1A0G*1L20000024SALESMAN*YYYYMM0c1A0G*2L2000001EYYYY0c1A0G1*1T1,4L400001BYYYYMM0c1A0G1*1L6000023YYYYMM*BRANCH0c1A0G1*2L1000818EMVDB.SUB.TEMPLATES0c0000017FCBAR2D0c2USE FCAREA2D0009C3FCMSAREA2D0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create three arrays here. Two of them are single-dimention attribute*   or value separated lists, one that stores descriptions of each*   point along the X axis (major), another that stores descriptions*   of the components that make up each point along the X axis (minor).*   Example: Monthly sales by territory where each month is a point*   (major) and each territory is a component of that point (minor).*   The third array is a full dynamic array where each attribute is a*   territory (minor) and each value is a month (major).*   Array Examples:    TERRS="" ;* Each attribute is a short description of the territory    MNTHS="" ;* Each value is a short description of the month (Mon/YY)    SALES="" ;* Each attribute contains values (one per month) of the             ;* sales within a territory. SALES<3,2> corresponds to             ;* TERRS<1,3> and MNTHS<1,3>*   then you can load the widget's values and labels like:*     W$BAR.VALUES  = SALES*     W$BAR.XLABELS = MNTHS*     W$BAR.LABELS  = TERRS*   rather than loading them a value at a time as shown*   in the "FOR N = 1 TO 12" loop below.*W$BAR.CAPTION = "YOUR CHART CAPTION HERE"W$BAR.XMEMO = "X-Axis Text" ;* Text that appears below the X-Axis labels                            ;* Ex: Territory Sales by MonthW$BAR.YMEMO = "Y-Axis Text" ;* Text that appears beside the Y-Axis labels                            ;* Ex: Sales (USD)*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = N ;* Value  W$BAR.XLABELS<1,N> = "Label ":N ;* X-Axis labelNEXT NW$BAR.LABELS<1>="Label 1"W$BAR.LABELS<2>="Label 2"W$BAR.LABELS<3>="Label 3"** To suppress the actual values for any of the series:W$BAR.LABEL.OPTS<1> = "showValues='0'"W$BAR.LABEL.OPTS<2> = "showValues='0'"W$BAR.LABEL.OPTS<3> = "showValues='0'"** Specify the alpha (transparency level) for each of the seriesW$BAR.LABEL.OPTS<1> := " areaAlpha='50'"W$BAR.LABEL.OPTS<2> := " areaAlpha='70'"W$BAR.LABEL.OPTS<3> := " areaAlpha='90'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000561SPARKWINLOSS0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the actual data, the other contains benchmark data*   to which the actual data are compared.*   Example:      SALES: Each value is a single sales total for the month      GOALS: Each value is a single goal for the corresponding month*     you build the chart values by comparing each value within the*     two lists, setting each chart value to "W" (win), "L" (lose)*     or "D" (draw) based on the comparison*W$FW.CAPTION = "YOUR CHART CAPTION HERE"W$FW.SUBCAPTION = "YOUR CHART SUBCAPTION HERE"*MAX = DCOUNT(SALES,@VM)FOR N = 1 TO MAX  BEGIN CASE    CASE SALES<1,N> > GOALS<1,N>; W$FW.VALUES<1,N> = "W" ;* Win    CASE SALES<1,N> < GOALS<1,N>; W$FW.VALUES<1,N> = "L" ;* Loss    CASE 1                                               ;* Draw  END CASENEXT N**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001BFCDOUGHNUT2D0c2USE FC2DPIE00057BFC2DPIE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the data, the other contains a short description*   of that data.*   Example:*     TERRSALES: Each value is a single territory's sales for the month*     TERRNAMES: Each value is a short name for the territory*     then you can load the widget's values like:*       W$PIE.LABELS = TERRNAMES*       W$PIE.VALUES = TERRSALES*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 7" loop below.*FOR N = 1 TO 7  W$PIE.LABELS<1,N> = "Slice ":N  W$PIE.VALUES<1,N> = NNEXT N** For a 2D pie, a specific slice can be separated from the pie* by setting this value:* W$PIE.VALUE.OPTS<1,X> = 'isSliced="1"'*   where "X" is the number of the value you want separated** To show values instead of percentages, use this:* W$CHART.OPTIONS<-1> = "showPercentageValues='0'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001BCYLINDER0c2USE THERMOMETER000303TEXT0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create dynamic array, on text line per attribute*   Examples:*     READ TXTITM FROM FILE,ID ELSE TXTITM = "TXTITM NOT FOUND"*   or:*     EXECUTE "YOUR SORT STATEMENT" CAPTURING TXTITEM*W$TEXT.DATA = "YOUR DYNAMIC ARRAY HERE";* example: TXTITM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000016FCLINE0c2USE FCAREA2D000022FCSTACKEDCOLUMN3D0c2USE FCMSBAR2D000A7CHLED0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine a contant to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever.*   Example:*     SALES: Total sales for a period within the current year*     GOAL:  Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the higher of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given GOAL & SALES, calculate the ranges:             GOAL      = 100000             SALES     = 110000             RANGE.BAD = INT(GOAL*.7)             RANGE.OK  = INT(GOAL*.9)             RANGE.GOOD= INT(SALES*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* To* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Value & TargetW$FW.METER.VALUE  = SALES      ;* Your actual value** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001DFCMSCOLUMN3D0c2USE FCMSBAR2D00026AHTML0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create a HTML string from data previously read*W$HTML.DATA = "<h2>YOUR HTML STRING HERE</h2>"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001AFCCOLUMN2D0c2USE FCAREA2D00001CSPARKLINE0c2USE SPARKCOLUMN000ADBHBULLET0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine a contant to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever.*   Example:*     SALES: Total sales for a period within the current year*     GOAL:  Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the higher of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given GOAL & SALES, calculate the ranges:             GOAL      = 100000             SALES     = 110000             RANGE.BAD = INT(GOAL*.7)             RANGE.OK  = INT(GOAL*.9)             RANGE.GOOD= INT(SALES*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.CAPTION     = "YOUR MAIN CAPTION HERE"W$FW.SUBCAPTION  = "YOUR SUB-CAPTION HERE"  ;* Optional*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* To* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Value & TargetW$FW.METER.VALUE  = SALES      ;* Your actual valueW$FW.METER.TARGET = GOAL       ;* Your calculated target** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000010VLED0c2USE HLED000016FC3DPIE0c2USE FC2DPIE000905FCMSBAR2D0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create three arrays here. Two of them are single-dimention attribute*   or value separated lists, one that stores descriptions of each*   point along the X axis (major), another that stores descriptions*   of the components that make up each point along the X axis (minor).*   Example: Monthly sales by territory where each month is a point*   (major) and each territory is a component of that point (minor).*   The third array is a full dynamic array where each attribute is a*   territory (minor) and each value is a month (major).*   Array Examples:    TERRS="" ;* Each attribute is a short description of the territory    MNTHS="" ;* Each value is a short description of the month (Mon/YY)    SALES="" ;* Each attribute contains values (one per month) of the             ;* sales within a territory. SALES<3,2> corresponds to             ;* TERRS<1,3> and MNTHS<1,3>*   then you can load the widget's values and labels like:*     W$BAR.VALUES  = SALES*     W$BAR.XLABELS = MNTHS*     W$BAR.LABELS  = TERRS*   rather than loading them a value at a time as shown*   in the "FOR N = 1 TO 12" loop below.*W$BAR.CAPTION = "YOUR CHART CAPTION HERE"W$BAR.XMEMO = "X-Axis Text" ;* Text that appears below the X-Axis labels                            ;* Ex: Territory Sales by MonthW$BAR.YMEMO = "Y-Axis Text" ;* Text that appears beside the Y-Axis labels                            ;* Ex: Sales (USD)*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = N ;* Value  W$BAR.XLABELS<1,N> = "Label ":N ;* X-Axis labelNEXT NW$BAR.LABELS<1>="Label 1"W$BAR.LABELS<2>="Label 2"W$BAR.LABELS<3>="Label 3"** To suppress the actual values for any of the series:W$BAR.LABEL.OPTS<1> = "showValues='0'"W$BAR.LABEL.OPTS<2> = "showValues='0'"W$BAR.LABEL.OPTS<3> = "showValues='0'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00022EMAP0c2W$TITLE = "Untitled Map"** The W$TYPE variable needs to represent a valid map name*W$TYPE = "MAP:Canada"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$MAP.IDS<1,1> = "01"W$MAP.VALUES<1,1> = 5W$MAP.VALUE.OPTS<1,1> = 'toolText="This is Alberta!"'*W$MAP.RANGE.NAME<1,1> = "Not On The Map"W$MAP.RANGE.LOW<1,1> = "0"W$MAP.RANGE.HIGH<1,1> = "5"W$MAP.RANGE.COLOR<1,1> = "WHITE"W$MAP.RANGE.NAME<1,2> = "On The Map"W$MAP.RANGE.LOW<1,2> = "5"W$MAP.RANGE.HIGH<1,2> = "10"W$MAP.RANGE.COLOR<1,2> = "GREEN"*RETURN0004FFTABLE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create a work table from your data that you'll use to populate the*   widget's table data array where attributes represent rows and*   values represent columns. NOTE: If you are using the widget's*   Total row, you have to calculate the totals yourself and stick*   them in the appropriate W$TABLE.TOTALS value.** Set up column labelsW$TABLE.COL.LABELS<1,1> = "Column Heading 1"W$TABLE.COL.LABELS<1,2> = "Column Heading 2"W$TABLE.COL.LABELS<1,3> = "Column Heading 3"** Column justification = left, right, centerW$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "right"** Table RowsFOR ROW = 1 TO 5  W$TABLE.DATA<ROW,1> = ROW:",1"  W$TABLE.DATA<ROW,2> = ROW:",2"NEXT ROW** TotalsW$TABLE.TOTALS<1,1> = "2"W$TABLE.TOTALS<1,2> = "4"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000DE2ANGULARGAUGE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine some contants to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever. Also, gather*   information that will allow you to create ranges against which to*   compare the number and those constants, if any.*   Example:*     SALES.CY: Total sales for a period within the current year*     SALES.LY: Total sales within that same period last year*     SLS.GOAL: Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the highest of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given SLS.GOAL & SALES.CY, calculate the ranges:             SLS.GOAL  = 100000             SALES.CY  = 110000             SALES.LY  = 95000             RANGE.BAD = INT(SLS.GOAL*.7)             RANGE.OK  = INT(SLS.GOAL*.9)             RANGE.GOOD= INT(SALES.CY*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* ToW$FW.COLOR.RANGE<3,2> = COLOR$YELLOW;* Override color* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Main Dial ValueW$FW.DIAL.VALUES<1> = SALES.CY      ;* Your actual value** Trendpoints (optional)* By default, there are no trendpoints on the gauge.** First TrendpointW$FW.TRENDPOINT.VALUES<1,1> = SALES.LYW$FW.TRENDPOINT.LABELS<1,1> = "Last Year"W$FW.TRENDPOINT.OPTS<1,1> = 'color="':COLOR$BLACK:'" useMarker="1"'* Second TrendpointW$FW.TRENDPOINT.VALUES<1,2> = SLS.GOALW$FW.TRENDPOINT.LABELS<1,2> = "Goal"W$FW.TRENDPOINT.OPTS<1,2> = 'color="':COLOR$SILVER:'" useMarker="1"'** Plot an arc (optional) W$FW.TRENDPOINT.VALUES<2,1> = SALES.LY ;* Arc beginW$FW.TRENDPOINT.VALUES<2,2> = SALES.CY ;* Arc end** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001AFCCOLUMN3D0c2USE FCAREA2D000020FCSTACKEDAREA2D0c2USE FCMSBAR2D0005C4FCAREA2D0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the data, the other contains a short description*   of that data, like the month and year.*   Example:*     TERRSALES: Each value is a single territory's sales for the month*     TERRPERDS: Each value is a short description of the period (MM/YY)*     then you can load the widget's values like:*       W$BAR.XLABELS = TERRPERDS*       W$BAR.VALUES = TERRSALES*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 12" loop below.*W$BAR.CAPTION = "YOUR CHART CAPTION HERE"W$BAR.XMEMO = "X-Axis Text" ;* Text that appears below the X-Axis labels                            ;* Ex: Territory ABC Sales by MonthW$BAR.YMEMO = "Y-Axis Text" ;* Text that appears beside the Y-Axis labels                            ;* Ex: Sales (USD)*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = N ;* Value  W$BAR.XLABELS<1,N> = "Label ":N ;* X-Axis labelNEXT N**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN0006F3FUNNEL0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the data, the other contains a short description*   of that data. NOTE: The values should be ordered from largest to*   smallest (value<1,1> should be larger than value<1,2> and so on)*   or the funnel will look weird. For a pyramid, that order should*   be reversed (value<1,1> should be smaller than value<1,2>, etc).*   Example:*     KILLSTATS: Each value is a single territory's sales for the month*     STATDESCS: Each value is a short name for the territory*     then you can load the widget's values like:*       W$FC.LABELS = STATDESCS*       W$FC.VALUES = KILLSTATS*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 5" loop below.*   For a funnel chart, the last value in the list must represent the*   total of all the other values. This is not true for a pyramid chart.*FOR N = 1 TO 5  W$FW.LABELS<1,N> = "Section ":N  W$FW.VALUES<1,N> = NNEXT N*W$FW.CAPTION = "YOUR CAPTION HERE"W$FW.SUBCAPTION = "YOUR SUB-CAPTION HERE"** To show percentages instead of values, use this:* W$CHART.OPTIONS<-1> = "showPercentValues='1'"* To separate the sections from one another, use this:* W$CHART.OPTIONS<-1> = "isSliced='1'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN0006FCTHERMOMETER0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine a contant to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever.*   Example:*     SALES: Total sales for a period within the current year*     GOAL:  Sales goal for said current year period*   Example: Given GOAL & SALES, calculate the ranges:             GOAL      = 100000             SALES     = 110000*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = GOAL ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"W$FW.THERMOMETER.COLOR = COLOR$RED*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** ValueW$FW.METER.VALUE  = SALES      ;* Your actual value** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000019FCMSLINE0c2USE FCMSBAR2D000BB5USAMAP0c2W$TITLE = "Untitled Map"W$TYPE = "%TYPE%"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN** The IDs of each section of a USA map are the state abbreviations, including DC* A list of the state names can be obtained as follows:OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "Unable to open MVDB.CONTROL"  RETURNENDREAD STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ''CONVERT "," TO @VM IN STATE.NAMES*IF WIDGET.USER.DATA(1) # "" THEN  * User has clicked on a specific state. That state map will be displayed.  * This entire section of code can be removed if you dont want to allow  * drill-down to a state map.  *  * The map "name" for the sepcifc state is stored in WIDGET.USER.DATA(2).  * The IDs for the state map are the FIPS county codes.  * A list of county codes can be gathered for a specific state as follows:  OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE    W$TYPE = "TEXT"    W$TEXT.DATA = "Unable to open MVDB.MAP.DATA"    RETURN  END  EXECUTE 'SELECT MVDB.MAP.DATA WITH NAME = "':WIDGET.USER.DATA(2):'"' CAPTURING JUNK  N = 0  LOOP    READNEXT ID ELSE EXIT    READ REC FROM F.MVDB.MAP.DATA, ID THEN      N += 1      * The ID of the map data file is STATE * FIPS_Code      * Extract the FIPS code from the ID and use it as the ID for this      * value.      W$MAP.IDS<1,N> = FIELD( ID, '*', 2 )      W$MAP.VALUES<1,N> = N      * The county name can be found in REC<2>      W$MAP.VALUE.OPTS<1,N> = 'toolText="':REC<2>:'"'    END  REPEAT  * Since we are in drill-down mode, we need to give the user a way to get back  * to the national map. To get out of drill-down mode, WIDGET.USER.DATA(1) needs  * to be cleared. Using a link is an easy way to do that.  W$LINK.LABEL<1,2> = "Return to USA Map"  W$LINK.LOCATION<1,2> = "1"  W$LINK.UD.POS<1,2> = 1  W$LINK.UD.VAL<1,2> = ""  * Override the title to show the state name.  W$TITLE = "Demo - ":WIDGET.USER.DATA(1):" Counties by Alphabet"END ELSE ;* No state specified, full US Map  * Assign a value to each desired map segments (States) as follows  W$MAP.IDS<1,-1> = "TX"  W$MAP.VALUES<1,-1> = 100  W$MAP.VALUE.OPTS<1,-1> = 'toolText="Texas" ' ;* Multiple option settings are space-delimited  *  * With drill-down enabled, the widget will automatically be re-executed with the state ID in WIDGET.USER.DATA(1)  * Allow drill-down to the state level by setting this value:  W$MAP.VALUE.DD<1,-1> = 1END** Set up ranges of values. Note that the low range is inclusive, high range is exclusive.W$MAP.RANGE.NAME<1,1> = "Range 1-99"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "100"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Range 100-199"W$MAP.RANGE.LOW<1,2> = "100"W$MAP.RANGE.HIGH<1,2> = "200"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Range 200-300"W$MAP.RANGE.LOW<1,3> = "200"W$MAP.RANGE.HIGH<1,3> = "301"W$MAP.RANGE.COLOR<1,3> = "RED"*RETURN000DE2HLINEARGAUGE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine some contants to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever. Also, gather*   information that will allow you to create ranges against which to*   compare the number and those constants, if any.*   Example:*     SALES.CY: Total sales for a period within the current year*     SALES.LY: Total sales within that same period last year*     SLS.GOAL: Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the highest of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given SLS.GOAL & SALES.CY, calculate the ranges:             SLS.GOAL  = 100000             SALES.CY  = 110000             SALES.LY  = 95000             RANGE.BAD = INT(SLS.GOAL*.7)             RANGE.OK  = INT(SLS.GOAL*.9)             RANGE.GOOD= INT(SALES.CY*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$YELLOW;* Override color* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Main Dial ValueW$FW.DIAL.VALUES<1> = SALES.CY      ;* Your actual value** Trendpoints (optional)* By default, there are no trendpoints on the gauge.** First TrendpointW$FW.TRENDPOINT.VALUES<1,1> = SALES.LYW$FW.TRENDPOINT.LABELS<1,1> = "Last Year"W$FW.TRENDPOINT.OPTS<1,1> = 'color="':COLOR$BLACK:'" useMarker="1"'* Second TrendpointW$FW.TRENDPOINT.VALUES<1,2> = SLS.GOALW$FW.TRENDPOINT.LABELS<1,2> = "Goal"W$FW.TRENDPOINT.OPTS<1,2> = 'color="':COLOR$SILVER:'" useMarker="1"'** Plot an arc (optional) W$FW.TRENDPOINT.VALUES<2,1> = SALES.LY ;* Arc beginW$FW.TRENDPOINT.VALUES<2,2> = SALES.CY ;* Arc end** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001DFCMSCOLUMN2D0c2USE FCMSBAR2D000016VBULLET0c2USE HBULLET000022FCSTACKEDCOLUMN2D0c2USE FCMSBAR2D000009GANTT0c20003E6SPARKCOLUMN0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create one one-attribute, value-separated array here.*   Example:*     TERRSALES: Each value is a single territory's sales for the month*     then you can load the widget's values like:*       W$FW.VALUES = TERRSALES*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 12" loop below.*W$FW.CAPTION = "YOUR CHART CAPTION HERE"W$FW.SUBCAPTION = "YOUR CHART SUBCAPTION HERE"*FOR N = 1 TO 12  W$FW.VALUES<1,N> = N ;* ValueNEXT N**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000015PYRAMID0c2USE FUNNEL000010BULB0c2USE HLED00001FFCSTACKEDBAR2D0c2USE FCMSBAR2D00005CDICT_MVDB.WIDGETS0c000001FSUB0c1A1SUBROUTINEL2500001CUSERS0c1A2USERSL2000D86FWREST.BP0c000023CWSWAP0c2SUBROUTINE WSWAP(string,SUB1,SUB2)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine swaps one string for another*              **********************************************************************IDX.POS = 1LOOP  POS = INDEX(string, SUB1, IDX.POS)WHILE POS DO  string = string[1,POS-1]:SUB2:string[POS+LEN(SUB1),LEN(string)]  IDX.POS = IDX.POS + COUNT(SUB2,SUB1)REPEATRETURNEND000212WGETINFO0c2SUBROUTINE WGETINFO(InfoVal, InfoItem)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: March 2017* Description: return an element from WWW.INFO***********************************************************************INCLUDE WBPD WWW.INCLUDEIF NUM(InfoItem) AND InfoItem > 0 AND InfoItem <= 50 THEN IF INT(InfoItem) = InfoItem THEN  InfoVal = WWW.INFO(InfoItem) ENDENDRETURNEND0005B8WENCODEJSON0c2SUBROUTINE WENCODEJSON(ORIG.OPTION,IN.STR,OUT.STR)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 8/13/2016* Description: this program will convert all bad characters to an escaped character************************************************************************OPEN 'RESULT.FILE' TO RFILE ELSE STOP* WE NEED TO ENCODE* " = \"   (34)* \ = \\    (92)* / = \/* CHAR(7) = \b* CHAR(13) = \r* char(10) = \n* char(12) = \f* char(9)  = \t*WRITE IN.STR ON RFILE, 'IN.STR'OPTION=ORIG.OPTIONOUT.STR=''L=LEN(IN.STR)CONVERT @AM TO CHAR(10) IN IN.STR; * LETS SWITCH 254 TO CR BE DEFAULTFOR X=1 TO L  C=IN.STR[X,1]  SEQ.C=SEQ(C)  ENCODE=0  IF SEQ.C < 32 THEN ENCODE=1; * BELOW SPACE*IF SEQ.C > 32 AND SEQ.C < 48 THEN ENCODE=1; * LETS ENCODE ALL OF THIS !@$%^&*()  IF SEQ.C=34 THEN ENCODE=1  IF SEQ.C=92 THEN ENCODE=1  IF SEQ.C=47 THEN ENCODE=1  IF SEQ.C > 122 THEN ENCODE = 1; * LETS ENCODE ALL THE HIGH ENTRIES*IF SEQ.C >= 91 AND SEQ.C <= 96 THEN ENCODE=1  IF ENCODE THEN    BEGIN CASE      CASE SEQ.C=7; OUT.STR='\b'      CASE C='\'; OUT.STR:='\\'      CASE C='/'; OUT.STR:='\/'      CASE SEQ.C=10; OUT.STR:='\n'      CASE SEQ.C=13; OUT.STR:='\r'      CASE SEQ.C=12; OUT.STR:='\f'      CASE 1;  OUT.STR:='\u00':OCONV(C,'MX')    END CASE  END ELSE    OUT.STR=OUT.STR:C  ENDNEXT XRETURNEND000235WGETCOOKIE0c2SUBROUTINE WGETCOOKIE(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine gets the value of a cookie.*              **********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''TEMPVARS = OCONV(CGI$CVARS,'MCU')LOCATE OCONV(VarName,'MCU') IN TEMPVARS SETTING POS THEN  VarValue = CGI$CVALS<POS>ENDRETURNEND0058C4WDEBUG0c2* WDEBUG** Debug REST Services* Copyright (c) 2017 Zumasys Inc.* Rewritten by Peter Schellenbach, 10/18/2017** Based on original version:*  Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved*  Written by: Luke Bucklin, Sierra Bravo*  Date: Sometime, 2006-ish*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD FI.WDB.DEBUG*CLR.SCR = @(-1)CLR.EOS = @(-3)MAX.LINES = SYSTEM(3) - 4MAX.COLS = SYSTEM(2) - 1IF MAX.LINES <= 0 OR CLR.SCR = '' OR CLR.EOS = '' THEN  MAX.LINES = 20  CLR.SCR = ''  CLR.EOS = ''  PRMPT.LINE = CHAR(13):CHAR(10)END ELSE  PRMPT.LINE = @(0, MAX.LINES + 2):CLR.EOSENDPROMPT ''*PRINT CLR.SCR:PRINTPRINT 'WDEBUG Web Request Degug Tool'PRINTPRINT 'The WDEBUG tool allows you to inspect, modify and re-run web requests.'PRINT 'Whenever a request for a debuggable resource is processed by WDB.INIT,'PRINT 'a debug record for the request is added to the WDB.DEBUG file. WDEBUG'PRINT 'allows you to select a debug record, view the request details, edit the'PRINT 'request variables, re-run the request and view the response.'PRINTPRINT 'To debug web requests for a resource, set attribute 7 of the WDB.RESOURCE'PRINT 'record for the resource to 1, then issue the web request from the client'PRINT 'browser or other agent. WDEBUG will show a list of recent web requests to'PRINT 'select from.'PRINTPRINT 'Start WDEBUG with an active select list if you need to use special criteria'PRINT 'to select the record(s) you need to debug.'PRINTPRINT 'Press <enter> to continue':INPUT ANS*OPEN 'WDB.DEBUG' TO F.WDB.DEBUG ELSE  PRINT 'The WDB.DEBUG data file is required to use WDEBUG. Default installations'  PRINT 'only create the dictionary for this file. Please create the data section'  PRINT 'to use WDEBUG: CREATE-FILE DATA WDB.DEBUG 101.'  STOPEND*SESSION.FLAG = 0OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SESSION.FLAG = 1 ;* can restore session when running debug reqest*EDITOR = ''IDS = ''NUM.IDS = 0IF SYSTEM(11) THEN  LOOP    READNEXT ID ELSE EXIT    READV X FROM F.WDB.DEBUG, ID, 1 THEN      IDS<-1> = ID      NUM.IDS += 1    END ELSE      PRINT ID:' not found in WDB.DEBUG!'    END  REPEATENDUSE.SUPPLIED.LIST = (NUM.IDS > 0)*LOOP  IF NOT(USE.SUPPLIED.LIST) THEN* Select available WDB.DEBUG items    CMND = 'SSELECT WDB.DEBUG WITH TYPE = "C" "R" BY-DSND DATE BY-DSND TIME'    EXECUTE CMND CAPTURING RESULT    IF SYSTEM(11) = 0 THEN      PRINT "No items found."      STOP    END    IDS = ''    NUM.IDS = 0    LOOP      READNEXT ID ELSE EXIT      IDS<-1> = ID      NUM.IDS += 1    REPEAT  END*  TOP = 0  LOOP* Display page of items    PRINT CLR.SCR:    PRINT "Ln Date. Time.... Path................ Remote Address...... Request ID........."    FOR CNTR = 1 TO MAX.LINES UNTIL CNTR + TOP > NUM.IDS      DBG.ID = IDS<CNTR>      READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE CONTINUE      PATH.INFO = DBGREC<WDBG_PATH>      IF PATH.INFO = '' THEN PATH.INFO = DBGREC<WDBG_HANDLER>:'/':DBGREC<WDBG_RESOURCE>      PRINT CNTR "R#2 ":      PRINT OCONV(DBGREC<WDBG_DATE>, 'D0-') "L#5 ":      PRINT OCONV(DBGREC<WDBG_TIME>, 'MTS') "L#8 ":      PRINT PATH.INFO "L#20 ":      PRINT DBGREC<WDBG_REMOTE_ADDR> "L#20 ":      PRINT DBGREC<WDBG_REQUEST_ID>[1,20]    NEXT CNTR    IF TOP + MAX.LINES > NUM.IDS THEN BOT = NUM.IDS ELSE BOT = TOP + MAX.LINES    PRINT "Showing items ":(TOP + 1):"-":BOT:" of ":NUM.IDS*    LOOP      PRINT PRMPT.LINE:"Command: (Q)uit (R)efresh (C)lear (N)ext (P)rev (##) Line to debug: ":      INPUT COMMAND      IF COMMAND MATCHES '1N0N' THEN        IF COMMAND >= 1 AND COMMAND <= MAX.LINES AND COMMAND + TOP <= NUM.IDS THEN          DBG.ID = IDS<COMMAND + TOP>          GOSUB debug.request        END        COMMAND = ''      END ELSE        COMMAND = OCONV(COMMAND[1,1], 'MCU')        IF COMMAND = '' THEN COMMAND = 'N'        IF INDEX('ERCNPQ', COMMAND, 1) = 0 THEN COMMAND = ''      END    WHILE COMMAND = '' DO REPEAT*    BEGIN CASE      CASE COMMAND = 'N'        IF TOP + MAX.LINES < NUM.IDS THEN TOP += MAX.LINES      CASE COMMAND = 'P'        IF TOP - MAX.LINES >= 0 THEN TOP -= MAX.LINES    END CASE  WHILE COMMAND = 'N' OR COMMAND = 'P' DO REPEAT*UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'R' ; NULL    CASE COMMAND = 'C'      EXECUTE 'SELECT WDB.DEBUG WITH TYPE = "C" "R"'      PRINT 'Are you sure you want to clear these items from the WDB.DEBUG file? ':      INPUT ANS      ANS = OCONV(ANS[1,1],'MCU')      IF ANS = 'Y' THEN        IF SYSTEM(11) THEN          LOOP            READNEXT ID ELSE EXIT            DELETE F.WDB.DEBUG, ID          REPEAT        END      END ELSE        CLEARSELECT      END  END CASEREPEATSTOP**----------debug.request:*----------*READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE  PRINT "The selected item '":DBG.ID:"' is not available!"  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDEDIT.ID = 'D':DBG.ID[2, LEN(DBG.ID)]LOOP  PRINT PRMPT.LINE:"Debugging ":DBG.ID[1,28]:" - command: (Q)uit (V)iew (E)dit (R)un: ":  INPUT COMMAND  COMMAND = OCONV(COMMAND[1,1], 'MCU')UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'V'      GOSUB view.request    CASE COMMAND = 'E'      GOSUB edit.request    CASE COMMAND = 'R'      GOSUB run.request  END CASEREPEATRETURN**----------view.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDGOSUB to.editNUM.LNS = DCOUNT(EDIT.REC, @AM)I = 1LOOP WHILE I <= NUM.LNS DO  X = EDIT.REC<I>  IF LEN(X) > MAX.COLS THEN    X = FOLD(X, MAX.COLS)    EDIT.REC<I> = X    N = COUNT(X, @AM)    NUM.LNS += N    I += N  END  I += 1REPEATIF NUM.LNS = 0 THEN NUM.LNS = 1NUM.PGS = INT((NUM.LNS - 1) / MAX.LINES) + 1CUR.PG = 1LOOP  PG.TOP = (CUR.PG - 1) * MAX.LINES  IF PG.TOP + MAX.LINES > NUM.LNS THEN LPP = NUM.LNS - PG.TOP ELSE LPP = MAX.LINES  PRINT CLR.SCR:  PRINT 'Page ':CUR.PG:' of ':NUM.PGS:SPACE(10):DBG.ID  PRINT  FOR I = 1 TO LPP    PRINT EDIT.REC<I + PG.TOP>  NEXT I  PRINT PRMPT.LINE:'Command: (Q)uit (N)ext (P)rev (##) Goto page ':  INPUT COMMAND  IF COMMAND MATCHES '1N0N' THEN    IF COMMAND >= 1 AND COMMAND <= NUM.PGS THEN CUR.PG = COMMAND  END ELSE    COMMAND = OCONV(COMMAND[1,1], 'MCU')  ENDUNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'N' OR COMMAND = ''      IF CUR.PG < NUM.PGS THEN CUR.PG = CUR.PG + 1    CASE COMMAND = 'P'      IF CUR.PG > 1 THEN CUR.PG = CUR.PG - 1  END CASEREPEATRETURN**----------edit.request:*----------*IF EDITOR = '' THEN GOSUB choose.editorIF EDITOR <> '' THEN  EDIT.ID = 'D':DBG.ID  GOSUB to.edit  WRITE EDIT.REC ON F.WDB.DEBUG, EDIT.ID  CMND = EDITOR:' WDB.DEBUG ':EDIT.ID  EXECUTE CMND  READ EDIT.REC FROM F.WDB.DEBUG, EDIT.ID ELSE NULL  DELETE F.WDB.DEBUG, EDIT.ID  GOSUB from.editENDRETURN**----------run.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNEND*HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* Reconstruct query stringQSTR = ''QSEP = ''* headers and server variablesN = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_HEADER_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* form variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_CGI_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_CGI_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  URLENCODE.STRING = CHANGE(THE.BODY, @VM, CHAR(10))  GOSUB url.encode  QSTR := QSEP:'__body__=':NEW.STRINGEND* restore session stateIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    SESSION.REC = ''    SESSION.REC<1> = DBGREC<WDBG_SESSION_VARS>    SESSION.REC<2> = DBGREC<WDBG_SESSION_VALS>    SESSION.REC<3> = DBGREC<WDBG_SESSION_DATE>    SESSION.REC<4> = DBGREC<WDBG_SESSION_TIME>    WRITE SESSION.REC ON F.WEB.SESSION, SESSION.ID  ENDEND* break the query string into 1000 byte chunksN = INT((LEN(QSTR) - 1) / 1000) + 1* build the command lineRUN.ID = DBGREC<WDBG_REQUEST_ID>CMND = 'WDB.INIT ':HANDLER.NAME:'/':RESOURCE.NAME:' ':RUN.ID:'-1-':N:' %% _WDEBUG_MODE_'** run the commandPRINTPRINT 'Executing the request: ':CMNDPRINTMAT WWW.INFO = ""EXECSTART = SYSTEM(12)* send query string as stacked inputFOR I = 1 TO N  DATA QSTR[((I - 1) * 1000) + 1, 1000]NEXT IEXECUTE CMND CAPTURING RESPONSEEXECDUR = SYSTEM(12) - EXECSTARTPRINT 'Request complete. Press <enter> to parse results':INPUT ANS** update the request runtimeDBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_DURATION> = EXECDUR* process the responseLINT.BEFORE = ''LINT.AFTER = ''WARN = ''ERR = ''* Gather lint from before the start tag and after the complete tagDBGREC<WDBG_WARNING> = '' ;* WarningsDBGREC<WDBG_ERROR> = '' ;* ErrorsDBGREC<WDBG_LINT> = '' ;* LintIF RESPONSE<1> = "700 WDB-START" THEN  RESPONSE = DELETE(RESPONSE, 1)END ELSE  TAG = @AM:"700 WDB-START":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '700 WDB-START tag is missing from response'    LINT.BEFORE = RESPONSE    RESPONSE = ''  END ELSE    IF TAG.POS >= 1 THEN      LINT.BEFORE = RESPONSE[1, TAG.POS - 1]      RESPONSE = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    END  ENDENDN = DCOUNT(RESPONSE, @AM)IF RESPONSE<N> = "800 WDB-COMPLETE" THEN  RESPONSE = DELETE(RESPONSE, N)END ELSE  TAG = @AM:"800 WDB-COMPLETE":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '800 WDB-COMPLETE tag missing from response!'  END ELSE    LINT.AFTER = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    RESPONSE = RESPONSE[1, TAG.POS - 1]  ENDEND* Clean up lintIF TRIM(CHANGE(LINT.BEFORE, @AM, '')) = '' THEN LINT.BEFORE = ''IF TRIM(CHANGE(LINT.AFTER, @AM, '')) = '' THEN LINT.AFTER = ''IF LINT.BEFORE <> '' OR LINT.AFTER <> '' THEN  LINT = LINT.BEFORE  IF LINT.BEFORE <> '' AND LINT.AFTER <> '' THEN LINT := @AM:'...':@AM  LINT := LINT.AFTER  DBGREC<WDBG_LINT> = LOWER(LINT)END* Parse the response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''DBGREC<WDBG_RESPONSE_CONTENT> = ''NUM.VARS = 0STATUS.CODE = ''EOH = INDEX(RESPONSE, @AM:@AM, 1) ;* headers end at first blank line in responseIF EOH = 0 THEN EOH = LEN(RESPONSE) + 1N = DCOUNT(RESPONSE[1, EOH - 1], @AM)FOR I = 1 TO N  HDR.LINE = RESPONSE<I>  IF HDR.LINE[1,10] = '500 ERROR ' THEN    ERR = HDR.LINE[11, LEN(HDR.LINE)]    IF STATUS.CODE = '' THEN STATUS.CODE = 500  END ELSE    HDR.VAR = FIELD(HDR.LINE, ':', 1)    HDR.VAL = TRIMF(HDR.LINE[COL2() + 1, LEN(HDR.LINE)])    M = LEN(HDR.VAR)    FOR J = 1 TO M      IF NOT(HDR.VAR[J,1] MATCHES '1A') AND HDR.VAR[J,1] <> '-' THEN        HDR.VAR = ''        EXIT      END    NEXT J    IF HDR.LINE[LEN(HDR.VAR) + 1, 1] <> ':' THEN HDR.VAR = ''    IF HDR.VAR = '' THEN      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = '_BAD_'      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.LINE ;* invalid header line!    END ELSE      IF HDR.VAR = 'X-MVDB-STATUS' THEN        STATUS.CODE = HDR.VAL      END ELSE        NUM.VARS += 1        DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = HDR.VAR        DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.VAL      END    END  ENDNEXT IIF STATUS.CODE = '' THEN STATUS.CODE = 200DBGREC<WDBG_STATUS> = STATUS.CODE* save response contentIF EOH + 2 <= LEN(RESPONSE) THEN  DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(RESPONSE[EOH + 2, LEN(RESPONSE)])ENDDBGREC<WDBG_WARNING> = WARNDBGREC<WDBG_ERROR> = ERRRETURN**----------to.edit:*----------*EDIT.REC = ''EDIT.REC<-1> = '[INFO] (do not edit this section)'EDIT.REC<-1> = 'Date            = ':OCONV(DBGREC<WDBG_DATE>,'D4')EDIT.REC<-1> = 'Time            = ':OCONV(DBGREC<WDBG_TIME>,'MTS')EDIT.REC<-1> = 'Duration        = ':DBGREC<WDBG_DURATION>EDIT.REC<-1> = 'Port            = ':DBGREC<WDBG_PORT>EDIT.REC<-1> = 'Handler         = ':DBGREC<WDBG_HANDLER>EDIT.REC<-1> = 'Resource        = ':DBGREC<WDBG_RESOURCE>EDIT.REC<-1> = 'Controller      = ':DBGREC<WDBG_CONTROLLER>EDIT.REC<-1> = 'Program         = ':DBGREC<WDBG_PROGRAM>EDIT.REC<-1> = 'RequestID       = ':DBGREC<WDBG_REQUEST_ID>EDIT.REC<-1> = 'Method          = ':DBGREC<WDBG_METHOD>EDIT.REC<-1> = 'Path            = ':DBGREC<WDBG_PATH>EDIT.REC<-1> = 'RemoteAddr      = ':DBGREC<WDBG_REMOTE_ADDR>EDIT.REC<-1> = 'Status          = ':DBGREC<WDBG_STATUS>IF DBGREC<WDBG_WARNING> <> '' THEN  EDIT.REC<-1> = 'WARNING: ':DBGREC<WDBG_WARNING>ENDIF DBGREC<WDBG_ERROR> <> '' THEN  EDIT.REC<-1> = 'ERROR: ':DBGREC<WDBG_ERROR>ENDIF DBGREC<WDBG_LINT> <> '' THEN  EDIT.REC<-1> = 'LINT:':@AM:RAISE(DBGREC<WDBG_LINT>)END* Request headers and server variablesEDIT.REC<-1> = @AM:'[HEADERS]'N = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  HDR.VAL = DBGREC<WDBG_HEADER_VALS, I>  EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VALNEXT I* Query string variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[VARS]'  FOR I = 1 TO N    CGI.VAR = DBGREC<WDBG_CGI_VARS, I>    CGI.VAL = DBGREC<WDBG_CGI_VALS, I>    EDIT.REC<-1> = CGI.VAR:SPACE(16-LEN(CGI.VAR)):'= ':CGI.VAL  NEXT IEND* CookiesLOCATE 'HTTP_COOKIE' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  CSTRING = DBGREC<WDBG_HEADER_VALS, POS>END ELSE CSTRING = ''CONVERT ';' TO @AM IN CSTRINGN = DCOUNT(CSTRING, @AM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[COOKIES]'  FOR I = 1 TO N    COOKIE.VAR = TRIM(FIELD(CSTRING<I>, '=', 1))    COOKIE.VAL = CSTRING<I>[COL2() + 1, 99999]    EDIT.REC<-1> = COOKIE.VAR:SPACE(16-LEN(COOKIE.VAR)):'= ':COOKIE.VAL  NEXT IEND* REST parametersLOCATE 'PATH_INFO' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  PATH = DBGREC<WDBG_HEADER_VALS, POS>END ELSE PATH = ''IF PATH[1,1] = '/' THEN PATH = PATH[2,9999]N = DCOUNT(PATH, '/')IF N > 0 THEN  EDIT.REC<-1> = @AM:'[PARAMS]'  FOR I = 3 TO N    PARAM.VAR = 'Param[':(I-2):']'    EDIT.REC<-1> = PARAM.VAR:SPACE(16-LEN(PARAM.VAR)):'= ':FIELD(PATH, '/', I)  NEXT IEND* Session variablesIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    N = DCOUNT(DBGREC<WDBG_SESSION_VARS>, @VM)    IF N > 0 THEN      EDIT.REC<-1> = @AM:'[SESSION]'      EDIT.REC<-1> = '_SessionID      = ':SESSION.ID      IF DBGREC<WDBG_SESSION_DATE> <> '' THEN EDIT.REC<-1> = '_Date           = ':OCONV(DBGREC<20>, 'D4')      IF DBGREC<WDBG_SESSION_TIME> <> '' THEN EDIT.REC<-1> = '_Time           = ':OCONV(DBGREC<21>, 'MTS')      FOR I = 1 TO N        SESSION.VAR = DBGREC<WDBG_SESSION_VARS, I>        EDIT.REC<-1> = SESSION.VAR:SPACE(16-LEN(SESSION.VAR)):'= ':DBGREC<WDBG_SESSION_VALS, I>      NEXT I    END  ENDEND* Request bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  EDIT.REC<-1> = @AM:'[BODY]':@AM:RAISE(THE.BODY)END* Response headersN = DCOUNT(DBGREC<WDBG_RESPONSE_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[RESPONSE_HEADERS]'  FOR I = 1 TO N    HDR.VAR = DBGREC<WDBG_RESPONSE_VARS, I>    HDR.VAL = DBGREC<WDBG_RESPONSE_VALS, I>    EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VAL  NEXT IEND* Response contentTHE.CONTENT = DBGREC<WDBG_RESPONSE_CONTENT>IF THE.CONTENT <> '' THEN  EDIT.REC<-1> = @AM:'[RESPONSE_CONTENT]':@AM:RAISE(THE.CONTENT)END*RETURN**----------from.edit:*----------*SESSION.ID = ''HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* If COOKIES section exists, rebuild HTTP_COOKIE headerCOOKIES = ''SECT = 'COOKIES'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    COOKIE = EDIT.REC<I>    IF COOKIE <> '' THEN      COOKIE.NAME = TRIM(FIELD(COOKIE, '=', 1))      COOKIE.VAL = TRIMF(COOKIE[COL2() + 1, LEN(COOKIE)])      COOKIES := COOKIE.NAME:'=':COOKIE.VAL:';'      IF OCONV(COOKIE.NAME, 'MCU') = 'SESSIONID' THEN SESSION.ID = COOKIE.VAL    END  NEXT I  IF COOKIES[LEN(COOKIES), 1] = ';' THEN COOKIES = COOKIES[1, LEN(COOKIES) - 1]END* If PARAMS section exists, rebuild PATH_INFO headerPARAMS = ''SECT = 'PARAMS'GOSUB find.sectionIF SECT.START > 0 THEN  PNUM = 1  FOR I = SECT.START + 1 TO SECT.END    PARAM = EDIT.REC<I>    IF PARAM <> '' THEN      PARAM.NAME = TRIM(OCONV(FIELD(PARAM, '=', 1), 'MCU'))      PARAM.VAL = TRIMF(PARAM[COL2() + 1, LEN(PARAM)])      IF PARAM.NAME <> 'PARAM[':PNUM:']' THEN EXIT      PARAMS := '/':PARAM.VAL      PNUM += 1    END  NEXT I  IF PARAMS <> '' THEN PARAMS = '/':HANDLER.NAME:'/':RESOURCE.NAME:PARAMS ;* handler & resource come before paramsEND* Get headers and server variablesDBGREC<WDBG_HEADER_VARS> = ''DBGREC<WDBG_HEADER_VALS> = ''NUM.VARS = 0SECT = 'HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])* check for special headers      BEGIN CASE        CASE OCONV(VAR.NAME, 'MCU') = 'HTTP_COOKIE'          IF COOKIES <> '' THEN            VAR.VAL = COOKIES          END        CASE OCONV(VAR.NAME, 'MCU') = 'PATH_INFO'          IF PARAMS <> '' THEN            VAR.VAL = PARAMS          END          IF VAR.VAL[1,1] <> '/' THEN VAR.VAL = '/' : VAR.VAL          IF COUNT(VAR.VAL, '/') >= 2 THEN            HANDLER.NAME = FIELD(VAR.VAL, '/', 2)            RESOURCE.NAME = FIELD(VAR.VAL, '/', 3)          END          DBGREC<WDBG_PATH> = VAR.VAL        CASE OCONV(VAR.NAME, 'MCU') = 'REQUEST_METHOD'          DBGREC<WDBG_METHOD> = VAR.VAL              CASE OCONV(VAR.NAME, 'MCU') = 'REMOTE_ADDR'          DBGREC<WDBG_REMOTE_ADDR> = VAR.VAL      END CASE      NUM.VARS += 1      DBGREC<WDBG_HEADER_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_HEADER_VALS, NUM.VARS> = VAR.VAL    END  NEXT I  DBGREC<WDBG_HANDLER> = HANDLER.NAME  DBGREC<WDBG_RESOURCE> = RESOURCE.NAMEEND* Get form variablesDBGREC<WDBG_CGI_VARS> = ''DBGREC<WDBG_CGI_VALS> = ''NUM.VARS = 0SECT = 'VARS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_CGI_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_CGI_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get bodyDBGREC<WDBG_BODY> = ''SECT = 'BODY'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.BODY = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_BODY> = LOWER(THE.BODY)  ENDEND* Get session stateIF SESSION.FLAG AND SESSION.ID <> '' THEN  DBGREC<WDBG_SESSION_ID> = ''  DBGREC<WDBG_SESSION_VARS> = ''  DBGREC<WDBG_SESSION_VALS> = ''  DBGREC<WDBG_SESSION_DATE> = ''  DBGREC<WDBG_SESSION_TIME> = ''  NUM.VARS = 0  SECT = 'SESSION'  GOSUB find.section  IF SECT.START > 0 THEN    FOR I = SECT.START + 1 TO SECT.END      SESSION.LINE = EDIT.REC<I>      SESSION.VAR = TRIM(FIELD(SESSION.LINE, '=', 1))      SESSION.VAL = TRIMF(SESSION.LINE[COL2() + 1, LEN(SESSION.LINE)])      BEGIN CASE        CASE SESSION.VAR = '_SessionID'          DBGREC<WDBG_SESSION_ID> = SESSION.VAL        CASE SESSION.VAR = '_Date'          DBGREC<WDBG_SESSION_DATE> = ICONV(SESSION.VAL, 'D')        CASE SESSION.VAR = '_Time'          DBGREC<WDBG_SESSION_TIME> = ICONV(SESSION.VAL, 'MTS')        CASE 1          NUM.VARS += 1          DBGREC<WDBG_SESSION_VARS, NUM.VARS> = SESSION.VAR          DBGREC<WDBG_SESSION_VALS, NUM.VARS> = SESSION.VAL      END CASE    NEXT I  ENDEND* Get response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''NUM.VARS = 0SECT = 'RESPONSE_HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get response contentDBGREC<WDBG_RESPONSE_CONTENT> = ''SECT = 'RESPONSE_CONTENT'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.CONTENT = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(THE.CONTENT)  ENDENDRETURN**----------choose.editor:*----------*PRINTLOOP  PRINT 'Select the editor you want to use: 1 = ED, 2 = JED, 3 = other: ':  INPUT ANSUNTIL ANS EQ '' DO  BEGIN CASE    CASE ANS = 1      EDITOR = 'ED'      EXIT    CASE ANS = 2      EDITOR = 'JED'      EXIT    CASE ANS = 3      PRINT 'Enter the verb to invoke your editor: ':      INPUT TMP      PRINT TMP:' OK?':      INPUT ANS      ANS = OCONV(ANS[1,1], 'MCU')      IF ANS = 'Y' THEN        EDITOR = TMP        EXIT      END  END CASEREPEATRETURN**----------find.section:*----------*SECT.START = -1SECT.END = -1TAG = @AM:'[':SECT:']':@AMTAG.POS = INDEX(EDIT.REC, TAG, 1)IF TAG.POS = 0 THEN RETURN ;* Section not foundSECT.START = DCOUNT(EDIT.REC[1, TAG.POS], @AM)SECT.END = DCOUNT(EDIT.REC, @AM)FOR I = SECT.START + 1 TO SECT.END  SECT.LN = EDIT.REC<I>  IF SECT.LN MATCHES '"["1A0A"]"' OR SECT.LN MATCHES '"["1A0A"_"1A0A"]"' THEN* beginning of next section is end of current section    SECT.END = I - 1    EXIT  ENDNEXT IRETURN**----------url.encode:*----------*NEW.STRING = ""UE.LEN = LEN(URLENCODE.STRING)FOR UEX = 1 TO UE.LEN  UE.CHR = URLENCODE.STRING[UEX,1]  UE.CVAL = SEQ(UE.CHR)  BEGIN CASE    CASE UE.CVAL < 32; ENC.FLAG = 1   ;* control character    CASE UE.CVAL = 37 OR UE.CVAL = 38 OR UE.CVAL = 43 OR UE.CVAL = 61; ENC.FLAG = 1 ;* % & + =    CASE UE.CVAL = 127; ENC.FLAG = 1  ;* DEL control character    CASE UE.CVAL >= 252; ENC.FLAG = 1 ;* delimiter character    CASE 1 ; ENC.FLAG = 0  END CASE  IF ENC.FLAG THEN    UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')  END  NEW.STRING := UE.CHRNEXT UEXRETURN*END000210WSETINFO0c2SUBROUTINE WSETINFO(InfoVal, InfoItem)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: November 2017* Description: set an element in WWW.INFO***********************************************************************INCLUDE WBPD WWW.INCLUDEIF NUM(InfoItem) AND InfoItem > 0 AND InfoItem <= 50 THEN IF INT(InfoItem) = InfoItem THEN  WWW.INFO(InfoItem) = InfoVal ENDENDRETURNEND00041DWSETCOOKIE0c2SUBROUTINE WSETCOOKIE(COOKIENAME,COOKIEVAR,D,T,PATH,DOMAIN,SECURE)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine sets the value of a cookie.*              **********************************************************************INCLUDE WBPD WWW.INCLUDECOOKIE = COOKIENAME:'=':COOKIEVAR* FIGURE OUT EXPIRATIONIF D # '' THEN  EXPIRES='expires='  DAY=OCONV(D,'DWA')[1,3]  DAY=OCONV(DAY,'MCT')  EXPIRES:=DAY  EXPIRES:=', '  EXPIRES:=OCONV(D,'DD')  EXPIRES:=' '  MONTH=OCONV(D,'DMA')[1,3]  MONTH=OCONV(MONTH,'MCT')  EXPIRES:=MONTH  EXPIRES:=' '  EXPIRES:=OCONV(D,'DY')  EXPIRES:=' '  EXPIRES:=OCONV(T,'MTS')  COOKIE:=';':EXPIRESENDIF PATH # '' THEN  COOKIE:=';path="':PATH:'"'ENDIF DOMAIN # '' THEN  COOKIE:=';domain=':DOMAINENDIF SECURE # '' THEN  COOKIE:=';secure'ENDIF TRIM(COOKIE) # '' THEN  SESSION$COOKIES<-1>=COOKIEENDRETURNEND00022DWGETHEADER0c2SUBROUTINE WGETHEADER(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: extract value of an HTTP request header***********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''TEMPVARS = OCONV(CGI$HEADERVARS, 'MCU')LOCATE OCONV(VarName, 'MCU') IN TEMPVARS SETTING POS THEN  VarValue = CGI$HEADERVALS<POS>ENDRETURNEND00019EWGETBODY0c2SUBROUTINE WGETBODY(RequestBody)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: March 2017* Description: return the BODY of the request***********************************************************************INCLUDE WBPD WWW.INCLUDERequestBody = CGI$BODYRETURNEND0001F3WFLUSH0c2SUBROUTINE WFLUSH************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This program calls WSETBUFFER(FALSE) then *                calls WSEND("")*              **********************************************************************INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*CALL WSETBUFFER(FALSE)CALL WSEND("")RETURNEND001E5BWRESTTEST0c2PROGRAM WRESTTEST************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 01/31/2017* Description: this is a simple REST test***********************************************************************INCLUDE WBPD WWW.INFORESTVERSION = "1.1"JSTATUS = 'ok'JSTATUSMSG = ''** Supplied function for setting content type.*CALL WSETCONTENTTYPE("application/json")*** Set a custom header with supplied function.*CALL WSETHEADER("restversion",RESTVERSION)** Start building our json object, ugly way until objects.*JSON = '{'** Need to know all the variables*CALL WGETINFO(VARS,CGI_VARS)CALL WGETINFO(VALS,CGI_VALS)** Need to know all the headers*CALL WGETINFO(HEADERVARS,CGI_HEADERVARS)CALL WGETINFO(HEADERVALS,CGI_HEADERVALS)** Set our rest version, this will be replaced in the future with objects*CALL WBUILDJSON(JSON,"RestVersion",RESTVERSION,RERR)** WHO*EXECUTE 'WHO' CAPTURING WRESULTCALL WBUILDJSON(JSON,'Who',WRESULT<1,1,1>,RERR)** HOSTNAME**EXECUTE 'hostname' CAPTURING HOSTNAME*CALL WBUILDJSON(JSON,'hostname',HOSTNAME<1,1,1>,RERR)** IFCONFIG**EXECUTE 'ifconfig' CAPTURING RESULT*GOSUB exportresult*JSON:=', "ifconfig": ':R** PWD*EXECUTE '!pwd' CAPTURING PWDCALL WBUILDJSON(JSON,'pwd',PWD,RERR)** PS**EXECUTE 'ps' CAPTURING RESULT*GOSUB exportresult*JSON:=', "ps": ':R*CALL WBUILDJSON(JSON,'ps',PSRESULT,RERR)** JSHOW**EXECUTE 'jshow -v WRESTTEST' CAPTURING RESULT*GOSUB exportresult*JSON := ', "wresttest": ':R** Build out vars, we have to build a subobject and manually* put it into our main json object.* Right now the primary function of WBUILDJSON is to properly* encode the variable section.*JSONVARS = '{'FOR X = 1 TO DCOUNT(VARS, @AM)    * Lets test our WGETVAR routine    VARNAME = VARS<X>    *    * WGETVAR is our customer supplied function to get variables    * usually sent by browser as form variables, either in the body    * or in the URL query string.    *    CALL WGETVAR(THISVAR,VARNAME)    CALL WBUILDJSON(JSONVARS,VARNAME,THISVAR,RERR)NEXT XJSONVARS := '}'** Here is our messy add, todo is to adjust WBUILDJSON to be able* to do this.*JSON := ', "vars": ':JSONVARS** Get all our cookies*CALL WGETINFO(CVARS,CGI_CVARS)CALL WGETINFO(CVALS,CGI_CVALS)COOKIES = '{'NUM_COOKIES = DCOUNT(CVARS,@AM)FOR A = 1 TO NUM_COOKIES    COOKIENAME = CVARS<A>    *    * This is our customer supplied function to get cookies.    *    CALL WGETCOOKIE(COOKIEVALUE,COOKIENAME)    CALL WBUILDJSON(COOKIES,COOKIENAME,COOKIEVALUE,RERR)NEXT ACOOKIES := '}'JSON := ', "cookies": ':COOKIES** Build out headers*JSONHEADERS = '{'numheaders = DCOUNT(HEADERVARS, @AM)FOR X = 1 TO numheaders    HEADERNAME = HEADERVARS<X>    *    * This is our customer supplied function to get headers.    *    CALL WGETHEADER(THISVAR,HEADERNAME)    CALL WBUILDJSON(JSONHEADERS,HEADERNAME,THISVAR,RERR)NEXT XJSONHEADERS := '}'JSON := ', "headers": ':JSONHEADERS** This is where the raw body is put, this is used primarily for* AJAX functions where the body should be a json string.*CALL WGETBODY(BODY)CALL WBUILDJSON(JSON,'body',BODY,RERR)** Set our test cookie*COOKIE.NAME = 'wresttestcookie'COOKIE.VALUE = TIMEDATE()CONVERT ' :' TO '' IN COOKIE.VALUE** Our function for setting a cookie.  Hides all the formatting requirements* and correctly sets expiration date/time using PICK dates and times.** CALL WSETCOOKIE(NAME,VALUE,EXPDATE,EXPTIME,DOMAIN,PATH,SECURE)*CALL WSETCOOKIE(COOKIE.NAME,COOKIE.VALUE,DATE()+1,TIME()+300,'','','')** Now lets process our command requests** This section allows this REST request to perform some functions** Format is* ...api/wresttest/<key>/<command>/<opt1>/<opt2>/<opt3>/etc** key = basically a password and stored in the config file* command = a command to execute, leaving blank does the same as help* opt# = options that the commands would use** Remember that for us, key is the first REAL param, command is 2, opt# is 3 on*CALL WGETPARAM(REQKEY,1)IF REQKEY = '' THEN GOTO end.of.program; * no key then ignore** Function to get our options already broken out.*CALL WGETCONFIG(APIKEY,'APIKEY')IF APIKEY = '' THEN    *    * The way I like to handle errors, see end of program right before stop    *    JSTATUS = 'error'    JSTATUSMSG = 'No api key setup in WDB.RESOURCE'    GOTO end.of.programENDIF OCONV(APIKEY,'MX') # OCONV(REQKEY,'MX') THEN    JSTATUS = 'error'    JSTATUSMSG = 'Invalid api key'    GOTO end.of.programENDGOSUB processrest*end.of.program: *** Build our default status/result*CALL WBUILDJSON(JSON,'status',JSTATUS,RERR)CALL WBUILDJSON(JSON,'statusmsg',JSTATUSMSG,ERR)** Close out our object*JSON := '}'** Send string json to the client. This can be done anytime and multiple times.*CALL WSEND(JSON)*STOP*processrest: *** Build new object to store rest responses*RJSON = '{'** Get our command*CALL WGETPARAM(COMMAND,2)COMMAND = OCONV(COMMAND,'MCU')** Respond in REST response our requested command, nice for debugging*CALL WBUILDJSON(RJSON,'requestedcommand',COMMAND,RERR)** Now process our commands*BEGIN CASE    CASE COMMAND = 'DEBUGON'        CALL WGETPARAM(DEBUGLINE,3)        IF DEBUGLINE = '' OR NOT(NUM(DEBUGLINE)) THEN            JSTATUS = 'error'            JSTATUSMSG = 'You must put in a debug option as next paramater'        END ELSE            JSTATUSMSG = 'Setting debug to on for ':DEBUGLINE            CALL WSETCOOKIE('wrestapidebug',DEBUGLINE,DATE()+1,TIME()+300,'','',' ')        END    CASE COMMAND = 'DEBUGOFF'        CALL WSETCOOKIE('wrestapidebug','',DATE()-1,TIME(),'','','')    CASE COMMAND = 'ENV'        * Get environment variables        EXECUTE '!env' CAPTURING ENVIRONMENT        *        * New object to store response        *        J = '{'        NUMENV = DCOUNT(ENVIRONMENT,@AM)        FOR A = 1 TO NUMENV            ENV = ENVIRONMENT<A>            ENV.NAME = FIELD(ENV,'=',1)            ENV.VALUE = FIELD(ENV,'=',2,9999)            IF TRIM(ENV.NAME) # '' THEN                CALL WBUILDJSON(J,ENV.NAME,ENV.VALUE,RERR)            END        NEXT A        J := '}'        RJSON := ', "environment": ':J    CASE COMMAND = 'USERS'        EXECUTE 'LISTU' CAPTURING RESULT        GOSUB exportresult        RJSON := ', "users": ':R    *CASE COMMAND = 'JSHOW'        *CALL WGETPARAM(OPTN,3)        *CMND = 'jshow -v ':OPTN        *EXECUTE CMND CAPTURING RESULT        *GOSUB exportresult        *RJSON := ', "jshow": ':R    *CASE COMMAND = 'JLICENSINGINFO'        *EXECUTE 'JLICENSINGINFO' CAPTURING RESULT        *GOSUB exportresult        *RJSON := ', "jlicensinginfo": ':R    CASE 1; * DO HELP        C = '{'        CALL WBUILDJSON(C,'help','List all commands',RERR)        CALL WBUILDJSON(C,'debugon','Turn debug on, next param is line no',RERR)        CALL WBUILDJSON(C,'debugoff','Turn off debugging',RERR)        *CALL WBUILDJSON(C,'listweberrors','Lists web errors',RERR)        CALL WBUILDJSON(C,'env','List Environment Variables',RERR)        CALL WBUILDJSON(C,'users','List users',RERR)        *CALL WBUILDJSON(C,'jshow','Issue jshow, next param is program/file',RERR )        *CALL WBUILDJSON(C,'jlicensinginfo','Licensing information',RERR)        C := '}'        RJSON := ', "commands": ':CEND CASERJSON := '}'JSON := ', "rest": ':RJSONRETURN*exportresult: *NUM.LINES = DCOUNT(RESULT,@AM)R= '[ 'FOR XX = 1 TO NUM.LINES    LINE = RESULT<XX>    CALL WSWAP(LINE,CHAR(9),'     ')    CALL WENCODEJSON('',LINE,OUTLINE)    IF XX > 1 THEN R := ','    R := '"':OUTLINE:'"'NEXT XXR := ']'RETURN*END0002E8WBUILDJSON0c2SUBROUTINE WBUILDJSON(JSONSTRING,NAME,VALUE,RETURNERROR)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 8/13/2016* Description: build json string***********************************************************************RETURNERROR=''*CALL FIX.ESCAPE.DATA.JSON('\',NAME,OUT_NAME)*CALL FIX.ESCAPE.DATA.JSON('\',VALUE,OUT_VALUE)CALL WENCODEJSON('',NAME,OUT_NAME)CALL WENCODEJSON('',VALUE,OUT_VALUE)TEMP_STRING='"':OUT_NAME:'":"':OUT_VALUE:'"'L=LEN(JSONSTRING)LAST_C=JSONSTRING[L,1]IF LAST_C = "}" OR LAST_C='"' OR LAST_C = "]" THEN TEMP_STRING=', ':TEMP_STRINGJSONSTRING:=TEMP_STRINGRETURNEND00198FWSEND0c2SUBROUTINE WSEND(FORM)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Original Author: Luke J. Bucklin, Sierra Bravo* Date: 2/29/00* Modified By  : Mike Schmidt, Sierra Bravo* Modified By  : Peter Schellenbach & Patrick Payne, Zumasys* Purpose: Send the web page.* Forked off new version as WSEND for REST services based on original WEB.SEND** Modified by Peter Schellenbach 09-21-2017*  Removed extra @AM appended to the content to prevent extra CR from being sent in response** Modified by Peter Schellenbach 10-18-2017*  Removed duplicate debug info being sent in html or xml output. Removed logging*  code as this is handled by WDB.INIT / JAGENTWDBINIT when saving debug info.** Modified by Patrick Payne 04-29-2020*  Issue #5.  HTTP wants new lines to be CHAR(13):CHAR(10).  We cannot depend on*  pick PRINT statements to output the new line since one linux it will only do*  char(10).  All output statements are updated to*  PRINT <DATA>:NEW.LINE:    where new.line=CHAR(13):CHAR(1)*************************************************************************                1) Header Management: This program will check to see*                   if the content type has been written to the browser*                   before ever printing anything to standard out.  If*                   the headers have not been sent, the program will print*                   the headers using the SESSION$CONTENT.TYPE,*                   SESSION$HEADERS, and SESSION$COOKIES session variables.*                   The program will then set the SESSION$CONTENT.SENT*                   variable.*                   WARNING: This program assumes that the global SESSION*                   variables were setup prior to using this subroutine.*                   WARNING: The SESSION$OUTBUF.SIZE should not be relied*                   upon to prevent the buffer from exceeding the set limit.*                   This program simply flushes the buffer if it exceeds*                   the set size limit.**                2) Buffer Management: Instead of always printing every*                   thing to standard out, by default the program will*                   write everything passed into into the SESSION$OUTBUF*                   variable.  This program will then flush the buffer*                   under certain situations.  The first is if the buffer*                   size reaches the limit set in SESSION$OUTBUF.SIZE. If*                   this happens the prgram will flush the buffer then*                   reinitialize it.  The second is if the SESSION$OUTBUF.FLAG*                   is set to FALSE, then this program will always flush*                   the buffer.**                3) The program will display debug information if the global*                   variable SESSION$GLOBAL.DEBUG flag is >= 3.************************************************************************* Add the incoming string to the buffer.INCLUDE WBPD WWW.INCLUDE*NEW.LINE = CHAR(13):CHAR(10); * We need to force this as a new lineSHOW.SESSION.VARS = 0IF SESSION$GLOBAL.DEBUG >= 3 THEN  OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SHOW.SESSION.VARS = 1END*IF FORM <> '' THEN  CALL WSWAP(FORM,'<!-- CGI$PATH -->',CGI$PATH)*PJS 09-21-2017*SESSION$OUTBUF := FORM:@AM  SESSION$OUTBUF := FORM ; *PJS 09-21-2017*END** If the buffer is greater then the max size or the buffer flag is false then flush.IF LEN(SESSION$OUTBUF) >= SESSION$OUTBUF.SIZE OR NOT(SESSION$OUTBUF.FLAG) THEN* Before flushing, check to see if the headers have been send.  IF NOT(SESSION$CONTENT.SENT) THEN    IF SESSION$STATUS.CODE > 0 THEN* 04-21-17 send the status code before headers      PRINT "X-MVDB-STATUS: ":SESSION$STATUS.CODE:NEW.LINE:    END* The headers have not been sent so send them now.    IF SESSION$CONTENT.TYPE = "" THEN      CALL WSETCONTENTTYPE("application/json")    END* If there are any cookies that need to be set, do it now.    PRINT "Content-type: ":SESSION$CONTENT.TYPE:NEW.LINE:* If there are any cookies that need to be set, do it now.    FOR I = 1 TO DCOUNT(SESSION$COOKIES, @AM)      COOKIE = SESSION$COOKIES<I>      IF INDEX(COOKIE, "; path=", 1) + INDEX(COOKIE, ";path=", 1) = 0 THEN COOKIE := "; path=/"      PRINT "Set-Cookie: ":COOKIE:NEW.LINE:    NEXT I* If there are any additional headers that need to be set, do it now.    PRINT 'Cache-Control: no-cache'    FOR I = 1 TO DCOUNT(SESSION$HEADERS, @AM)      PRINT SESSION$HEADERS<I>:NEW.LINE:    NEXT I* Now print the blank line that ends the headers.    PRINT    IF INDEX(SESSION$CONTENT.TYPE,'html',1) THEN      IF INDEX(SESSION$OUTBUF<1>,'<!DOCTYPE',1) = 0 THEN        PRINT '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"':NEW.LINE:        PRINT '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">':NEW.LINE:      END    END* Set the SESSION$CONTENT.SENT variable so next time we know not to send the headers.    SESSION$CONTENT.SENT = 1* From this point on, do not buffer.    IF SESSION$OUTBUF.FLAG THEN      CALL WSETBUFFER(0)    END  END  LINE.CNT = DCOUNT(SESSION$OUTBUF, @AM)  FOR LINE.J = 1 TO LINE.CNT    PRINT SESSION$OUTBUF<LINE.J>:NEW.LINE:  NEXT LINE.J  IF SESSION$GLOBAL.DEBUG >= 3 THEN    IF INDEX(SESSION$CONTENT.TYPE,'xml',1) OR INDEX(SESSION$CONTENT.TYPE,'html',1) THEN* If the debug flag is set then dump all the session information to the browser.      PRINT '<!-- Debug Information generated by WEB.SEND.  This feature can be turned off by':NEW.LINE:      PRINT '     setting the SESSION$GLOBAL.DEBUG = "1" in the initalization program     -->':NEW.LINE:      PRINT '<!-- START DEBUG OUPUT ':NEW.LINE:      PRINT '     GET AND POST VARS:':NEW.LINE:      FOR I = 1 TO DCOUNT(CGI$VARS, @AM)        PRINT '     ':CGI$VARS<I>:' = ':CGI$VALS<I>:NEW.LINE:      NEXT I      PRINT      IF SHOW.SESSION.VARS THEN        PRINT '    SESSION VARIABLES:':NEW.LINE:        PRINT '    SESSION$ID = ':SESSION$ID:NEW.LINE:        READ REC FROM F.WEB.SESSION, SESSION$ID THEN          PRINT '    SESSION DATE = ':OCONV(REC<3>,'D4/'):NEW.LINE:          PRINT '    SESSION TIME = ':OCONV(REC<4>,'MTS,'):NEW.LINE:          FOR I = 1 TO DCOUNT(REC<1>, @VM)            PRINT '    ':REC<1,I>:' = ':REC<2,I>:NEW.LINE:          NEXT I        END      END      PRINT '    END DEBUG OUTPUT -->':NEW.LINE:      PRINT NEW.LINE:    END  END  SESSION$OUTBUF = ''ENDRETURNEND0014E9WPARSEJSON0c2SUBROUTINE WPARSEJSON(JSON_STRING,JSON_REQUEST,JSON_RESULT,JSON_ERRORS)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 8/13/2016* Description: this is to be a simple json parser, it will not be high performance!!************************************************************************* COMMAND WILL BE QM STYLE** object or #/object or #/object or #** lets do this VERY ugly, we know what we are looking for should be in the format* "key":  or "key" :*JSON_ERRORS=''JSON_RESULT=''MAX_LENGTH=LEN(JSON_STRING)FIRST_KEY=FIELD(JSON_REQUEST,'/',1); * WE CAN ONLY DO SINGLE DEPTH ON THIS VERSIONIF FIRST_KEY[1,1]='[' THEN  GOSUB getobject  RETURNENDSEARCH_STRING1='"':FIRST_KEY:'":'SEARCH_STRING2='"':FIRST_KEY:'" :'POS=INDEX(JSON_STRING,SEARCH_STRING1,1)IF NOT(POS) THEN  POS=INDEX(JSON_STRING,SEARCH_STRING2,1)ENDIF NOT(POS) THEN  JSON_ERRORS=-1  JSON_ERRORS<2>='COULD NOT FIND KEY ':FIRST_KEY  PRINT 'ERROR'  RETURNENDTEMP_DATA=JSON_STRING[POS,MAX_LENGTH]*PRINT 'TEMP_DATA=':TEMP_DATA* NOW LETS CHOP TO OUR FIRST :POS2=INDEX(TEMP_DATA,':',1)TEMP_DATA=TEMP_DATA[POS2+1,MAX_LENGTH]* NOT SURE IF WE HAVE TO DEAL WITH DATA BEING NOT IN QUOTES, TO MAKE SURE WE ARE GOING TO INSPECT THE NEXT TWO POSITIONS* AND MAKE SURE*PRINT 'TEMP_DATA=':TEMP_DATATEMP_DATA=TRIM(TEMP_DATA,' ','L')BEGIN CASE  CASE TEMP_DATA[1,1] = '"' OR TEMP_DATA[2,1] = '"'* QUOTES    TEMP_DATA=FIELD(TEMP_DATA,'"',2,9999)*PRINT 'TEMP_DATA=':TEMP_DATA* WE CANNOT RELY ON IT JUST BEING THE NEXT QUOTE DUE TO ESCAPING !!@#$#$    LEN_STRING=LEN(TEMP_DATA)    FOUND_QUOTE=0    LAST_C=''    FOR X=1 TO LEN_STRING UNTIL FOUND_QUOTE      C=TEMP_DATA[X,1]      NEXTC=TEMP_DATA[X+1,1]*PRINT 'C=':C:' NEXT_C=':NEXT_C      IF C='\' AND NEXTC='"' THEN        JSON_RESULT:='"'        X+=1        CONTINUE      END      IF C='"' THEN        FOUND_QUOTE=1        EXIT      END ELSE        JSON_RESULT:=C*PRINT 'JSON_RESULT=':JSON_RESULT      END      IF X > LEN_STRING THEN FOUND_QUOTE=1    NEXT X  CASE TEMP_DATA[1,1]='[' OR TEMP_DATA[2,1]='['; * WE ARE PULLING AN ARRAY.  THIS IS VERY MESSY.  IT CAN ONLY HANDLE A SINGLE ARRAY. ANY MORE NESTING AND WE ARE BROKE* WE NEED TO LOOP UNTIL WE SEE THE NEXT ] THAT IS NOT IS A INSIDE QUOTES    LEN$STRING=LEN(TEMP_DATA)    FOUND$BRACKET=0    LAST$C=''    INSIDE$QUOTES=0    FOR X=1 TO LEN$STRING UNTIL FOUND$BRACKET      C=TEMP_DATA[X,1]      BEGIN CASE        CASE C=']' AND NOT(INSIDE$QUOTES); FOUND$BRACKET=1        CASE C='"' AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C="'" AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C='"'; INSIDE$QUOTES=1        CASE C="'"; INSIDE$QUOTES=1      END CASE      JSON_RESULT:=C    NEXT X  CASE TEMP_DATA[1,1]='{' OR TEMP_DATA[2,1]='['; * WE ARE PULLING AN ARRAY.  THIS IS VERY MESSY.  IT CAN ONLY HANDLE A SINGLE ARRAY. ANY MORE NESTING AND WE ARE BROKE* WE NEED TO LOOP UNTIL WE SEE THE NEXT ] THAT IS NOT IS A INSIDE QUOTES    LEN$STRING=LEN(TEMP_DATA)    FOUND$BRACKET=0    LAST$C=''    INSIDE$QUOTES=0    FOR X=1 TO LEN$STRING UNTIL FOUND$BRACKET      C=TEMP_DATA[X,1]      BEGIN CASE        CASE C='}' AND NOT(INSIDE$QUOTES); FOUND$BRACKET=1        CASE C='"' AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C="'" AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C='"'; INSIDE$QUOTES=1        CASE C="'"; INSIDE$QUOTES=1      END CASE      JSON_RESULT:=C    NEXT X  CASE 1* IT SHOULD BE A NUMBER ONLY    IF TEMP_DATA[1,1]=' ' THEN TEMP_DATA=TEMP_DATA[2,MAX_LENGTH]* NEXT CHARACTER WILL EITHER BE A },OR SPACXE    NEXT1=INDEX(TEMP_DATA,' ',1)    NEXT2=INDEX(TEMP_DATA,'}',1)    NEXT3=INDEX(TEMP_DATA,',',1)    N=NEXT1    IF NEXT2 < N THEN N=NEXT2    IF NEXT3 < N THEN N=NEXT3    JSON_RESULT=TEMP_DATA[1,N-1]END CASERETURN*getobject: *OBJECTNUMBER=FIELD(FIRST_KEY,']',1)OBJECTNUMBER=FIELD(OBJECTNUMBER,'[',2)INSIDE$QUOTES=0OBJECTCOUNT=0CHARCNTR=0NESTCOUNT=0JSON_RESULT=''DOINGCOUNT=0LEN_JSON_STRING=LEN(JSON_STRING)IF OBJECTNUMBER='#' THEN  OBJECTNUMBER=99999999  DOINGCOUNT=1ENDLOOP  CHARCNTR+=1  IF CHARCNTR > LEN_JSON_STRING THEN EXIT  C=JSON_STRING[CHARCNTR,1]  BEGIN CASE    CASE NOT(INSIDE$QUOTES) AND C='"'      JSON_RESULT:=C      INSIDE$QUOTES=1    CASE INSIDE$QUOTES AND C='"'      JSON_RESULT:=C      INSIDE$QUOTES=0    CASE INSIDE$QUOTES      JSON_RESULT:=C    CASE C='{' AND NOT(NESTCOUNT)* WE HAVE THE START OF OUR OBJECT      JSON_RESULT=C      NESTCOUNT=1      OBJECTCOUNT+=1    CASE C='{' AND NOT(INSIDE$QUOTES)* GOING A NEXT DEEPER      JSON_RESULT:=C      NESTCOUNT+=1    CASE C='}'      JSON_RESULT:=C      NESTCOUNT=NESTCOUNT-1      IF NESTCOUNT = 0 THEN        IF OBJECTNUMBER=OBJECTCOUNT-1 THEN          EXIT; * WE HAVE OUR OBJECT        END ELSE          NESTCOUNT=0          JSON_RESULT=''; * RESET OUR OBJECT        END      END    CASE NESTCOUNT=0; * DO NOTHING    CASE 1      JSON_RESULT:=C  END CASE  IF 0 THEN    PRINT C,'NESTCOUNT=':NESTCOUNT:' OBJECTCOUNT=':OBJECTCOUNT:' INQUOTE=':INSIDE$QUOTES:' CHARCNTR=':CHARCNTR  END  IF DOINGCOUNT THEN JSON_RESULT=OBJECTCOUNTREPEATIF 0 THEN  PRINT JSON_RESULT  PRINT  PRINT JSON_STRING[1,CHARCNTR+50]  INPUT WAITENDRETURNEND0002BEWGETPARAM0c2SUBROUTINE WGETPARAM(ParamVal, ParamNum)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: March 2017* Description: return a parameter from the URL. Assume the* URL is in the format:**   http://api.hostname.com/api/resource/key/command/opt1/opt2/opt3** ParamNum = 1 ParamVal = key*            2            command*            3            opt1*            4            opt2*            5            opt3***********************************************************************INCLUDE WBPD WWW.INCLUDEParamVal = CGI$RESTPARAMS<ParamNum>RETURNEND0006A0WSETBUFFER0c2SUBROUTINE WSETBUFFER(B.VAL)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Updated by: Peter Schellenbach, Zumasys* Date: November 2017* Description  : This program sets the SESSION$OUTBUF.FLAG and optionally*                SESSION$OUTBUF.SIZE variables to enable or disable*                buffering of output generated by WSEND. If buffering*                is enabled, be sure to call WFLUSH to flush the final*                buffer content.**                B.VAL = 0 : disable buffering*                B.VAL = 1 : enable buffering using current buffer size*                B.VAL > 1 : enable buffering and set buffer size to*                            this value.**                By default buffering is disabled. If buffering will be*                used, call WSETBUFFER before the first call to WSEND.*                If the size of buffer content ever exceeds the buffer*                size, the buffer is flushed to the client along with*                any headers, and buffering is disabled.*              **********************************************************************INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*IF NUM(B.VAL) AND B.VAL > 0 AND B.VAL <= 1000000 THEN  * Set buffer size and enable buffering  SESSION$OUTBUF.SIZE = B.VAL  SESSION$OUTBUF.FLAG = TRUEEND ELSE  * Enable or disable buffering  IF B.VAL # TRUE AND B.VAL # FALSE THEN    IF B.VAL = "" THEN      B.VAL = FALSE    END ELSE      B.VAL = TRUE    END  END  SESSION$OUTBUF.FLAG = B.VALENDRETURNEND0002A5WSETHEADER0c2SUBROUTINE WSETHEADER(VarName, VarValue)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: set a value of HTTP response header** Updated by Peter Schellenbach, 09-21-2017 to call WSETCONTENTTYPE when setting the Content-Type header***********************************************************************INCLUDE WBPD WWW.INCLUDEIF OCONV(VarName,'MCU') = 'CONTENT-TYPE' THEN  CALL WSETCONTENTTYPE(VarValue)END ELSE  HEADER_LINE = VarName:': ':VarValue  SESSION$HEADERS<-1> = HEADER_LINEENDRETURNEND0001F5WGETCONFIG0c2SUBROUTINE WGETCONFIG(VarValue, VarName) ************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: extract a configuration value***********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''LOCATE VarName IN CGI$CONFIG<1,1> SETTING POS THEN  VarValue = CGI$CONFIG<1,2,POS>ENDRETURNEND000244WSETVAR0c2SUBROUTINE WSETVAR(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: update value of a request variable***********************************************************************INCLUDE WBPD WWW.INCLUDETEMPVARS = OCONV(CGI$VARS, 'MCU')LOCATE OCONV(VarName, 'MCU') IN TEMPVARS SETTING POS THEN  CGI$VALS<POS> = VarValueEND ELSE  CGI$VARS<-1> = VarName  CGI$VALS<-1> = VarValueENDRETURNEND000291WSETSTATUS0c2SUBROUTINE WSETSTATUS( STATUS.CODE )*********************************************************************** Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written By   : Peter Schellenbach* Date Written : 04/21/2017* Description  : This program sets the response status code sent*                back to client. Successful requests should return*                status code 200 (this is the default). Status code*                500 indicates a generic server failure.*              **********************************************************************INCLUDE WBPD WWW.INCLUDESESSION$STATUS.CODE = STATUS.CODERETURNEND000217WGETVAR0c2SUBROUTINE WGETVAR(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: extract value of a request variable***********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''TEMPVARS = OCONV(CGI$VARS, 'MCU')LOCATE OCONV(VarName, 'MCU') IN TEMPVARS SETTING POS THEN  VarValue = CGI$VALS<POS>ENDRETURNEND000256WSETCONTENTTYPE0c2SUBROUTINE WSETCONTENTTYPE(CONTENTTYPE)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine sets the SESSION$CONTENT.TYPE variable.*                This value is used in the Content-Type HTTP header*                in the response sent to the client.*              **********************************************************************INCLUDE WBPD WWW.INCLUDESESSION$CONTENT.TYPE=CONTENTTYPERETURNEND0000EERSS.FEEDS0c000005DFEEDS0c2Available RSS FeedsRSS Feeds available on this serverSUB.FEEDS.SELSUB.FEEDS.ITEM000078RUNTIME-ERRORS0c2Basic Runtime ErrorsData basic runtime errors.SUB.RE.SELSUB.RE.ITEMDashboard Accountaccount=TLDB006E09MVDB.CONTROL0c000024ECOMPILE.SETUP0c2BASIC %FILENAME% %ITEMNAME%* To configure the compile command when using the web editor* edit line # 1 of this record to contain the appropriate syntax.** Example # 1 - Standard compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME%** Example # 2 - FLASH compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME% (O** Example # 3 - Standard compile using COMPILE* 001 COMPILE %FILENAME% %ITEMNAME%** Only line # 1 of this record is used, all other lines of this record are ignored.* If this record is deleted, the default behavior is:* COMPILE %FILENAME% %ITEMNAME%0000A1FC2DPIE.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' pieRadius='[RADIUS]' animation='0' > [CHART.DATA]</graph>0000DEFC3DPIE.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' showPercentageInLabel='0' pieYScale='45' pieRadius='[RADIUS]' animation='0' pieFillAlpha='100' > [CHART.DATA]</graph>0000A9FCAREA2D.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]'> [CHART.DATA]</graph>0000A9FCBAR2D.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]' > [CHART.DATA]</graph>00009BFCCOLUMN2D.SETTINGS0c2<graph caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]' > [CHART.DATA]</graph>0000ADFCCOLUMN3D.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]'  decimalPrecision='0' animation='0' yaxisname='[YMEMO]' xaxisname='[XMEMO]' > [CHART.DATA]</graph>0000A6FCDOUGHNUT2D.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' pieRadius='[RADIUS]' animation='0' > [CHART.DATA]</graph>0000A7FCLINE.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]'> [CHART.DATA]</graph>000C53FCMAP.NAMES0c2AfghanistanAfricaAlabamaAlaskaAlbaniaAlbertaAlgeriaAndorraAngolaAntiguaArgentinaArizonaArkansasArmeniaAsia3AsiaGeorgiaAsiaAustralia2AustraliaAustriaAzerbaijanBahamasBahrainBangladeshBarbadosBelarusBelgiumBelizeBeninBhutanBoliviaBosniaHerzegovinaBotswanaBrazilRegionBrazilBritishColumbiaBruneiBulgariaBurkinaFasoBurmaBurundiCaliforniaCambodiaCameroonCanadaCapeVerdeCaymanIslandsCentralAfricanRepublicCentralAmerica2CentralAmericaCentralAmericawithCaribbeanCentralEuropeanRegionChadChileChina2ChinaColombiaColoradoComorosCongoConnecticutCostaRicaCoteDivoireCroatiaCubaCyprus2CyprusCzechRepublicDelawareDemocraticRepublicofCongoDenmarkRegionDenmarkDistrictofColumbiaDjiboutiDominicanRepublicDominicaEastEuropeanRegionEastTimorEcuadorEgyptElSalvadorEnglandRegionEnglandEquatorialGuineaEritreaEstoniaEthiopiaEurope2EuropeRegionEuropeEuropewithcountriesFalklandIslandFijiFinlandFloridaFranceDepartmentFranceFrenchGuianaGabonGambiaGeorgiaGermanyGhanaGreeceGreenlandGrenadaGuatemalaGuineaBissauGuineaGuyanaHaitiHawaiiHondurasHongKongHungaryRegionsHungaryIcelandIdahoIllinoisIndianaIndiaIndonesiaIowaIranIraqIrelandIsraelItalyJamaicaJapanJordanKansasKazakhstanKentuckyKenyaKiribatiKuwaitKyrgyzstanLaosLatviaLebanonLesothoLiberiaLibyaLiechtensteinLithuaniaLouisianaLuxembourgMacauMacedoniaMadagascarRegionsMadagascarMaineMalawiMalaysiaMaliMaltaManitobaMarshallIslandMarylandMassachusettsMauritaniaMauritiusMexicoMichiganMicronesiaMiddleEastMinnesotaMississippiMissouriMoldovaMonacoMongoliaMontanaMontenegroMoroccoMozambiqueNamibiaNauruNebraskaNepalNetherlandNevadaNewBrunswickNewCaledoniaNewfoundlandandLabradorNewHampshireNewJerseyNewMexicoNewWorldNewYorkNewZealandNicaraguaNigeriaNigerNorthAmericaNorthAmerica_WOCentralNorthCarolinaNorthDakotaNorthEuropeanRegionNorthIrelandNorthKoreaNorthWestTerritoriesNorwayRegionNorwayNovaScotiaNunavutOceaniaOhioOklahomaOmanOntarioOregonPakistanPalauPanamaPapuaNewGuineaParaguayPennsylvaniaPeruPhilippinesPolandCountiesPolandPortugalPrinceEdwardIslandPuertoRicoQatarQuebecRhodeIslandRomaniaRussiaRwandaSaintKittsandNevisSaintLuciaSaintVincentandtheGrenadinesSamoaSanMarinoSaoTomeandPrincipeSaskatchewanSaudiArabiaScotlandRegionScotlandSenegalSerbiaSeychellesSierraLeoneSingaporeSlovakiaSloveniaSolomonIslandSomaliaSouthAfricaSouthAmericaSouthCarolinaSouthDakotaSouthEuropeanRegionSouthKoreaSpainProvincesSpainSriLankaSudanSurinameSwazilandSwedenSwitzerlandSyriaTaiwanTajikistanTanzaniaTennesseeTexasThailandTibetTogoTongaTrinidadandTobagoTunisiaTurkeyTurkmenistanTuvaluUAEUgandaUK7UkraineUKUruguayUSACentralRegionUSANorthEastRegionUSANorthWestRegionUSARegionUSASouthEastRegionUSASouthWestRegionUSAUtahUzbekistanVanuatuVaticanCityVenezuelaVermontVietnamVirginiaWalesWashingtonWesternSaharaWestEuropeanRegionWestVirginiaWisconsinWorld8WorldWorldwithCountriesWyomingYemenYukonTerritoryZambiaZimbabwe0000B1FCMAP.SETTINGS0c2<map showCanvasBorder='1' canvasBorderColor='F1F1F1' canvasBorderThickness='2' borderColor='FFFFFF' connectorColor='000000' fillAlpha='70'>[CHART.DATA]</map>00009AFCMSAREA2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>000099FCMSBAR2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009CFCMSCOLUMN2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009CFCMSCOLUMN3D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>000098FCMSLINE.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009FFCSTACKEDAREA2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009EFCSTACKEDBAR2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>0000A1FCSTACKEDCOLUMN2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>0000A1FCSTACKEDCOLUMN3D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>0000FDFWBULLET.SETTINGS0c2<chart palette='[CHART.PALETTE]' lowerLimit='[LOWER.LIMIT]' upperLimit='[UPPER.LIMIT]' caption='[CAPTION]' subcaption='[SUBCAPTION]' numberPrefix='[NUMBER.PREFIX]' numberSuffix='[NUMBER.SUFFIX]' showValue='1' >[CHART.DATA]</chart>0000BAFWFP.SETTINGS0c2<chart numberPrefix='[NUMBER.PREFIX]' numberSuffix='[NUMBER.SUFFIX]' caption='[CAPTION]' subcaption='[SUBCAPTION]' decimals='1' baseFontSize='11' >[CHART.DATA]</chart>000122FWGAUGE.SETTINGS0c2<chart palette='[CHART.PALETTE]' lowerLimitDisplay='[LOWER.LIMIT.DISPLAY]' upperLimitDisplay='[UPPER.LIMIT.DISPLAY]' lowerLimit='[LOWER.LIMIT]' upperLimit='[UPPER.LIMIT]' numberPrefix='[NUMBER.PREFIX]' numberSuffix='[NUMBER.SUFFIX]' showValue='1' >[CHART.DATA]</chart>0000CAFWSPARK.SETTINGS0c2<chart yAxisMinValue='[LOWER.LIMIT]' yAxisMaxValue='[UPPER.LIMIT]' palette='[CHART.PALETTE]' caption='[CAPTION]' subcaption='[SUBCAPTION]' setAdaptiveYMin='1' >[CHART.DATA]</chart>004113ICON.LIST0c2accept.pngadd.pnganchor.pngapplication_add.pngapplication_cascade.pngapplication_delete.pngapplication_double.pngapplication_edit.pngapplication_error.pngapplication_form_add.pngapplication_form_delete.pngapplication_form_edit.pngapplication_form_magnify.pngapplication_form.pngapplication_get.pngapplication_go.pngapplication_home.pngapplication_key.pngapplication_lightning.pngapplication_link.pngapplication_osx.pngapplication_osx_terminal.pngapplication.pngapplication_put.pngapplication_side_boxes.pngapplication_side_contract.pngapplication_side_expand.pngapplication_side_list.pngapplication_side_tree.pngapplication_split.pngapplication_tile_horizontal.pngapplication_tile_vertical.pngapplication_view_columns.pngapplication_view_detail.pngapplication_view_gallery.pngapplication_view_icons.pngapplication_view_list.pngapplication_view_tile.pngapplication_xp.pngapplication_xp_terminal.pngarrow_branch.pngarrow_divide.pngarrow_down.pngarrow_inout.pngarrow_in.pngarrow_join.pngarrow_left.pngarrow_merge.pngarrow_out.pngarrow_redo.pngarrow_refresh.pngarrow_refresh_small.pngarrow_right.pngarrow_rotate_anticlockwise.pngarrow_rotate_clockwise.pngarrow_switch.pngarrow_turn_left.pngarrow_turn_right.pngarrow_undo.pngarrow_up.pngasterisk_orange.pngasterisk_yellow.pngattach.pngaward_star_add.pngaward_star_bronze_1.pngaward_star_bronze_2.pngaward_star_bronze_3.pngaward_star_delete.pngaward_star_gold_1.pngaward_star_gold_2.pngaward_star_gold_3.pngaward_star_silver_1.pngaward_star_silver_2.pngaward_star_silver_3.pngbasket_add.pngbasket_delete.pngbasket_edit.pngbasket_error.pngbasket_go.pngbasket.pngbasket_put.pngbasket_remove.pngbell_add.pngbell_delete.pngbell_error.pngbell_go.pngbell_link.pngbell.pngbin_closed.pngbin_empty.pngbin.pngbomb.pngbook_add.pngbook_addresses.pngbook_delete.pngbook_edit.pngbook_error.pngbook_go.pngbook_key.pngbook_link.pngbook_next.pngbook_open.pngbook.pngbook_previous.pngbox.pngbrick_add.pngbrick_delete.pngbrick_edit.pngbrick_error.pngbrick_go.pngbrick_link.pngbrick.pngbricks.pngbriefcase.pngbug_add.pngbug_delete.pngbug_edit.pngbug_error.pngbug_go.pngbug_link.pngbug.pngbuilding_add.pngbuilding_delete.pngbuilding_edit.pngbuilding_error.pngbuilding_go.pngbuilding_key.pngbuilding_link.pngbuilding.pngbullet_add.pngbullet_arrow_bottom.pngbullet_arrow_down.pngbullet_arrow_top.pngbullet_arrow_up.pngbullet_black.pngbullet_blue.pngbullet_delete.pngbullet_disk.pngbullet_error.pngbullet_feed.pngbullet_go.pngbullet_green.pngbullet_key.pngbullet_orange.pngbullet_picture.pngbullet_pink.pngbullet_purple.pngbullet_red.pngbullet_star.pngbullet_toggle_minus.pngbullet_toggle_plus.pngbullet_white.pngbullet_wrench.pngbullet_yellow.pngcake.pngcalculator_add.pngcalculator_delete.pngcalculator_edit.pngcalculator_error.pngcalculator_link.pngcalculator.pngcalendar_add.pngcalendar_delete.pngcalendar_edit.pngcalendar_link.pngcalendar.pngcalendar_view_day.pngcalendar_view_month.pngcalendar_view_week.pngcamera_add.pngcamera_delete.pngcamera_edit.pngcamera_error.pngcamera_go.pngcamera_link.pngcamera.pngcamera_small.pngcancel.pngcar_add.pngcar_delete.pngcar.pngcart_add.pngcart_delete.pngcart_edit.pngcart_error.pngcart_go.pngcart.pngcart_put.pngcart_remove.pngcd_add.pngcd_burn.pngcd_delete.pngcd_edit.pngcd_eject.pngcd_go.pngcd.pngchart_bar_add.pngchart_bar_delete.pngchart_bar_edit.pngchart_bar_error.pngchart_bar_link.pngchart_bar.pngchart_curve_add.pngchart_curve_delete.pngchart_curve_edit.pngchart_curve_error.pngchart_curve_go.pngchart_curve_link.pngchart_curve.pngchart_line_add.pngchart_line_delete.pngchart_line_edit.pngchart_line_error.pngchart_line_link.pngchart_line.pngchart_organisation_add.pngchart_organisation_delete.pngchart_organisation.pngchart_pie_add.pngchart_pie_delete.pngchart_pie_edit.pngchart_pie_error.pngchart_pie_link.pngchart_pie.pngclock_add.pngclock_delete.pngclock_edit.pngclock_error.pngclock_go.pngclock_link.pngclock_pause.pngclock_play.pngclock.pngclock_red.pngclock_stop.pngcog_add.pngcog_delete.pngcog_edit.pngcog_error.pngcog_go.pngcog.pngcoins_add.pngcoins_delete.pngcoins.pngcolor_swatch.pngcolor_wheel.pngcomment_add.pngcomment_delete.pngcomment_edit.pngcomment.pngcomments_add.pngcomments_delete.pngcomments.pngcompress.pngcomputer_add.pngcomputer_delete.pngcomputer_edit.pngcomputer_error.pngcomputer_go.pngcomputer_key.pngcomputer_link.pngcomputer.pngconnect.pngcontrast_decrease.pngcontrast_high.pngcontrast_increase.pngcontrast_low.pngcontrast.pngcontrol_eject_blue.pngcontrol_eject.pngcontrol_end_blue.pngcontrol_end.pngcontrol_equalizer_blue.pngcontrol_equalizer.pngcontrol_fastforward_blue.pngcontrol_fastforward.pngcontroller_add.pngcontroller_delete.pngcontroller_error.pngcontroller.pngcontrol_pause_blue.pngcontrol_pause.pngcontrol_play_blue.pngcontrol_play.pngcontrol_repeat_blue.pngcontrol_repeat.pngcontrol_rewind_blue.pngcontrol_rewind.pngcontrol_start_blue.pngcontrol_start.pngcontrol_stop_blue.pngcontrol_stop.pngcreditcards.pngcross.pngcss_add.pngcss_delete.pngcss_go.pngcss.pngcss_valid.pngcup_add.pngcup_delete.pngcup_edit.pngcup_error.pngcup_go.pngcup_key.pngcup_link.pngcup.pngcursor.pngcut.pngcut_red.pngdatabase_add.pngdatabase_connect.pngdatabase_delete.pngdatabase_edit.pngdatabase_error.pngdatabase_gear.pngdatabase_go.pngdatabase_key.pngdatabase_lightning.pngdatabase_link.pngdatabase.pngdatabase_refresh.pngdatabase_save.pngdatabase_table.pngdate_add.pngdate_delete.pngdate_edit.pngdate_error.pngdate_go.pngdate_link.pngdate_magnify.pngdate_next.pngdate.pngdate_previous.pngdelete.pngdisconnect.pngdisk_multiple.pngdisk.pngdoor_in.pngdoor_open.pngdoor_out.pngdoor.pngdrink_empty.pngdrink.pngdrive_add.pngdrive_burn.pngdrive_cd_empty.pngdrive_cd.pngdrive_delete.pngdrive_disk.pngdrive_edit.pngdrive_error.pngdrive_go.pngdrive_key.pngdrive_link.pngdrive_magnify.pngdrive_network.pngdrive.pngdrive_rename.pngdrive_user.pngdrive_web.pngdvd_add.pngdvd_delete.pngdvd_edit.pngdvd_error.pngdvd_go.pngdvd_key.pngdvd_link.pngdvd.pngemail_add.pngemail_attach.pngemail_delete.pngemail_edit.pngemail_error.pngemail_go.pngemail_link.pngemail_open_image.pngemail_open.pngemail.pngemoticon_evilgrin.pngemoticon_grin.pngemoticon_happy.pngemoticon_smile.pngemoticon_surprised.pngemoticon_tongue.pngemoticon_unhappy.pngemoticon_waii.pngemoticon_wink.pngerror_add.pngerror_delete.pngerror_go.pngerror.pngexclamation.pngeye.pngfeed_add.pngfeed_delete.pngfeed_disk.pngfeed_edit.pngfeed_error.pngfeed_go.pngfeed_key.pngfeed_link.pngfeed_magnify.pngfeed.pngfemale.pngfilm_add.pngfilm_delete.pngfilm_edit.pngfilm_error.pngfilm_go.pngfilm_key.pngfilm_link.pngfilm.pngfilm_save.pngfind.pngflag_blue.pngflag_green.pngflag_orange.pngflag_pink.pngflag_purple.pngflag_red.pngflag_yellow.pngfolder_add.pngfolder_bell.pngfolder_brick.pngfolder_bug.pngfolder_camera.pngfolder_database.pngfolder_delete.pngfolder_edit.pngfolder_error.pngfolder_explore.pngfolder_feed.pngfolder_find.pngfolder_go.pngfolder_heart.pngfolder_image.pngfolder_key.pngfolder_lightbulb.pngfolder_link.pngfolder_magnify.pngfolder_page.pngfolder_page_white.pngfolder_palette.pngfolder_picture.pngfolder.pngfolder_star.pngfolder_table.pngfolder_user.pngfolder_wrench.pngfont_add.pngfont_delete.pngfont_go.pngfont.pnggroup_add.pnggroup_delete.pnggroup_edit.pnggroup_error.pnggroup_gear.pnggroup_go.pnggroup_key.pnggroup_link.pnggroup.pngheart_add.pngheart_delete.pngheart.pnghelp.pnghourglass_add.pnghourglass_delete.pnghourglass_go.pnghourglass_link.pnghourglass.pnghouse_go.pnghouse_link.pnghouse.pnghtml_add.pnghtml_delete.pnghtml_go.pnghtml.pnghtml_valid.pngimage_add.pngimage_delete.pngimage_edit.pngimage_link.pngimage.pngimages.pnginformation.pngipod_cast_add.pngipod_cast_delete.pngipod_cast.pngipod.pngipod_sound.pngjoystick_add.pngjoystick_delete.pngjoystick_error.pngjoystick.pngkey_add.pngkeyboard_add.pngkeyboard_delete.pngkeyboard_magnify.pngkeyboard.pngkey_delete.pngkey_go.pngkey.pnglayers.pnglayout_add.pnglayout_content.pnglayout_delete.pnglayout_edit.pnglayout_error.pnglayout_header.pnglayout_link.pnglayout.pnglayout_sidebar.pnglightbulb_add.pnglightbulb_delete.pnglightbulb_off.pnglightbulb.pnglightning_add.pnglightning_delete.pnglightning_go.pnglightning.pnglink_add.pnglink_break.pnglink_delete.pnglink_edit.pnglink_error.pnglink_go.pnglink.pnglock_add.pnglock_break.pnglock_delete.pnglock_edit.pnglock_go.pnglock_open.pnglock.pnglorry_add.pnglorry_delete.pnglorry_error.pnglorry_flatbed.pnglorry_go.pnglorry_link.pnglorry.pngmagifier_zoom_out.pngmagnifier.pngmagnifier_zoom_in.pngmale.pngmap_add.pngmap_delete.pngmap_edit.pngmap_go.pngmap_magnify.pngmap.pngmedal_bronze_1.pngmedal_bronze_2.pngmedal_bronze_3.pngmedal_bronze_add.pngmedal_bronze_delete.pngmedal_gold_1.pngmedal_gold_2.pngmedal_gold_3.pngmedal_gold_add.pngmedal_gold_delete.pngmedal_silver_1.pngmedal_silver_2.pngmedal_silver_3.pngmedal_silver_add.pngmedal_silver_delete.pngmoney_add.pngmoney_delete.pngmoney_dollar.pngmoney_euro.pngmoney.pngmoney_pound.pngmoney_yen.pngmonitor_add.pngmonitor_delete.pngmonitor_edit.pngmonitor_error.pngmonitor_go.pngmonitor_lightning.pngmonitor_link.pngmonitor.pngmouse_add.pngmouse_delete.pngmouse_error.pngmouse.pngmusic.pngnew.pngnewspaper_add.pngnewspaper_delete.pngnewspaper_go.pngnewspaper_link.pngnewspaper.pngnote_add.pngnote_delete.pngnote_edit.pngnote_error.pngnote_go.pngnote.pngoverlays.pngpackage_add.pngpackage_delete.pngpackage_go.pngpackage_green.pngpackage_link.pngpackage.pngpage_add.pngpage_attach.pngpage_code.pngpage_copy.pngpage_delete.pngpage_edit.pngpage_error.pngpage_excel.pngpage_find.pngpage_gear.pngpage_go.pngpage_green.pngpage_key.pngpage_lightning.pngpage_link.pngpage_paintbrush.pngpage_paste.pngpage.pngpage_red.pngpage_refresh.pngpage_save.pngpage_white_acrobat.pngpage_white_actionscript.pngpage_white_add.pngpage_white_camera.pngpage_white_cd.pngpage_white_code.pngpage_white_code_red.pngpage_white_coldfusion.pngpage_white_compressed.pngpage_white_copy.pngpage_white_cplusplus.pngpage_white_c.pngpage_white_csharp.pngpage_white_cup.pngpage_white_database.pngpage_white_delete.pngpage_white_dvd.pngpage_white_edit.pngpage_white_error.pngpage_white_excel.pngpage_white_find.pngpage_white_flash.pngpage_white_freehand.pngpage_white_gear.pngpage_white_get.pngpage_white_go.pngpage_white_horizontal.pngpage_white_h.pngpage_white_key.pngpage_white_lightning.pngpage_white_link.pngpage_white_magnify.pngpage_white_medal.pngpage_white_office.pngpage_white_paintbrush.pngpage_white_paint.pngpage_white_paste.pngpage_white_php.pngpage_white_picture.pngpage_white.pngpage_white_powerpoint.pngpage_white_put.pngpage_white_ruby.pngpage_white_stack.pngpage_white_star.pngpage_white_swoosh.pngpage_white_text.pngpage_white_text_width.pngpage_white_tux.pngpage_white_vector.pngpage_white_visualstudio.pngpage_white_width.pngpage_white_word.pngpage_white_world.pngpage_white_wrench.pngpage_white_zip.pngpage_word.pngpage_world.pngpaintbrush.pngpaintcan.pngpalette.pngpaste_plain.pngpaste_word.pngpencil_add.pngpencil_delete.pngpencil_go.pngpencil.pngphone_add.pngphone_delete.pngphone.pngphone_sound.pngphoto_add.pngphoto_delete.pngphoto_link.pngphoto.pngphotos.pngpicture_add.pngpicture_delete.pngpicture_edit.pngpicture_empty.pngpicture_error.pngpicture_go.pngpicture_key.pngpicture_link.pngpicture.pngpicture_save.pngpictures.pngpilcrow.pngpill_add.pngpill_delete.pngpill_go.pngpill.pngplugin_add.pngplugin_delete.pngplugin_disabled.pngplugin_edit.pngplugin_error.pngplugin_go.pngplugin_link.pngplugin.pngprinter_add.pngprinter_delete.pngprinter_empty.pngprinter_error.pngprinter.pngrainbow.pngreport_add.pngreport_delete.pngreport_disk.pngreport_edit.pngreport_go.pngreport_key.pngreport_link.pngreport_magnify.pngreport_picture.pngreport.pngreport_user.pngreport_word.pngresultset_first.pngresultset_last.pngresultset_next.pngresultset_previous.pngrosette.pngrss_add.pngrss_delete.pngrss_go.pngrss.pngrss_valid.pngruby_add.pngruby_delete.pngruby_gear.pngruby_get.pngruby_go.pngruby_key.pngruby_link.pngruby.pngruby_put.pngscript_add.pngscript_code.pngscript_code_red.pngscript_delete.pngscript_edit.pngscript_error.pngscript_gear.pngscript_go.pngscript_key.pngscript_lightning.pngscript_link.pngscript_palette.pngscript.pngscript_save.pngserver_add.pngserver_chart.pngserver_compressed.pngserver_connect.pngserver_database.pngserver_delete.pngserver_edit.pngserver_error.pngserver_go.pngserver_key.pngserver_lightning.pngserver_link.pngserver.pngserver_uncompressed.pngshading.pngshape_align_bottom.pngshape_align_center.pngshape_align_left.pngshape_align_middle.pngshape_align_right.pngshape_align_top.pngshape_flip_horizontal.pngshape_flip_vertical.pngshape_group.pngshape_handles.pngshape_move_back.pngshape_move_backwards.pngshape_move_forwards.pngshape_move_front.pngshape_rotate_anticlockwise.pngshape_rotate_clockwise.pngshape_square_add.pngshape_square_delete.pngshape_square_edit.pngshape_square_error.pngshape_square_go.pngshape_square_key.pngshape_square_link.pngshape_square.pngshape_ungroup.pngshield_add.pngshield_delete.pngshield_go.pngshield.pngsitemap_color.pngsitemap.pngsound_add.pngsound_delete.pngsound_low.pngsound_mute.pngsound_none.pngsound.pngspellcheck.pngsport_8ball.pngsport_basketball.pngsport_football.pngsport_golf.pngsport_raquet.pngsport_shuttlecock.pngsport_soccer.pngsport_tennis.pngstar.pngstatus_away.pngstatus_busy.pngstatus_offline.pngstatus_online.pngstop.pngstyle_add.pngstyle_delete.pngstyle_edit.pngstyle_go.pngstyle.pngsum.pngtab_add.pngtab_delete.pngtab_edit.pngtab_go.pngtable_add.pngtable_delete.pngtable_edit.pngtable_error.pngtable_gear.pngtable_go.pngtable_key.pngtable_lightning.pngtable_link.pngtable_multiple.pngtable.pngtable_refresh.pngtable_relationship.pngtable_row_delete.pngtable_row_insert.pngtable_save.pngtable_sort.pngtab.pngtag_blue_add.pngtag_blue_delete.pngtag_blue_edit.pngtag_blue.pngtag_green.pngtag_orange.pngtag_pink.pngtag.pngtag_purple.pngtag_red.pngtag_yellow.pngtelephone_add.pngtelephone_delete.pngtelephone_edit.pngtelephone_error.pngtelephone_go.pngtelephone_key.pngtelephone_link.pngtelephone.pngtelevision_add.pngtelevision_delete.pngtelevision.pngtext_align_center.pngtext_align_justify.pngtext_align_left.pngtext_align_right.pngtext_allcaps.pngtext_bold.pngtext_columns.pngtext_dropcaps.pngtextfield_add.pngtextfield_delete.pngtextfield_key.pngtextfield.pngtextfield_rename.pngtext_heading_1.pngtext_heading_2.pngtext_heading_3.pngtext_heading_4.pngtext_heading_5.pngtext_heading_6.pngtext_horizontalrule.pngtext_indent.pngtext_indent_remove.pngtext_italic.pngtext_kerning.pngtext_letter_omega.pngtext_letterspacing.pngtext_linespacing.pngtext_list_bullets.pngtext_list_numbers.pngtext_lowercase.pngtext_padding_bottom.pngtext_padding_left.pngtext_padding_right.pngtext_padding_top.pngtext_replace.pngtext_signature.pngtext_smallcaps.pngtext_strikethrough.pngtext_subscript.pngtext_superscript.pngtext_underline.pngtext_uppercase.pngthumb_down.pngthumb_up.pngtick.pngtime_add.pngtime_delete.pngtime_go.pngtimeline_marker.pngtime.pngtransmit_add.pngtransmit_blue.pngtransmit_delete.pngtransmit_edit.pngtransmit_error.pngtransmit_go.pngtransmit.pngtux.pnguser_add.pnguser_comment.pnguser_delete.pnguser_edit.pnguser_female.pnguser_go.pnguser_gray.pnguser_green.pnguser_orange.pnguser.pnguser_red.pnguser_suit.pngvcard_add.pngvcard_delete.pngvcard_edit.pngvcard.pngvector_add.pngvector_delete.pngvector.pngwand.pngweather_clouds.pngweather_cloudy.pngweather_lightning.pngweather_rain.pngweather_snow.pngweather_sun.pngwebcam_add.pngwebcam_delete.pngwebcam_error.pngwebcam.pngworld_add.pngworld_delete.pngworld_edit.pngworld_go.pngworld_link.pngworld.pngwrench_orange.pngwrench.pngxhtml_add.pngxhtml_delete.pngxhtml_go.pngxhtml.pngxhtml_valid.pngzoom_in.pngzoom_out.pngzoom.png000092MOBI.APPS0c2SUB.D3ADMINSUB.MOBI.APP.MENUSUB.MOBI.WOSUB.TESTAIAAD3 AdministrationApplication ChooserDemo WO ApplicationDemo Application00007BMONTHLY.20130c277869980896869808900091077900940589703406719886071869680806870707428708058871070682570808878968000007BMONTHLY.20140c2865222009965220098889900865566006552260074665400798552008965230082541200654123007584120098655200000073MONTHLY.20150c29654320080145600888540009650110095012300965121008456320010523680098521000644144005888660000007FMONTHLY.GPS.20130c226517550288064103178601729914744209154142201961923275705280068082799822722781623247042583250054900007FMONTHLY.GPS.20140c2294639443200712235317797332386042323934924466243258618943111867631109141253129142744917536111721000076MONTHLY.GPS.20150c23679677832936845339654253798472034865781365450823197622741016726359493432331534221977139000073MONTHLY.NET.20140c229463943200712353177933238602323934244662425861893111867311091425312912744917361117200006CMONTHLY.NET.20150c2965432080145608885400965011095012309651210845632010523680985210064414405888660000081MONTHLY.PARTS.20140c2414378445224284147585401438425423609067336395560416464855854718841895322328312664074985847292673000078MONTHLY.PARTS.20150c24960869651350055533449464524318362544291449568374293538557601358540842633146503929950454000084MONTHLY.SERVICES.20140c245084356474093595130449942714058294319273826984038208715311051124064587832581034350913425136252700007BMONTHLY.SERVICES.20150c2469345042879554535509054512579173246800951555263416278154763544244436737329493612893614600000EPLATFORM0c2JB000288STATE.NAMES0c2AL,AK,AZ,AR,CA,CO,CT,DE,FL,GA,HI,ID,IL,IN,IA,KS,KY,LA,ME,MD,MA,MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,OH,OK,OR,PA,RI,SC,SD,TN,TX,UT,VT,VA,WA,WV,WI,WY,DCAlabama,Alaska,Arizona,Arkansas,California,Colorado,Connecticut,Delaware,Florida,Georgia,Hawaii,Idaho,Illinois,Indiana,Iowa,Kansas,Kentucky,Louisiana,Maine,Maryland,Massachusetts,Michigan,Minnesota,Mississippi,Missouri,Montana,Nebraska,Nevada,NewHampshire,NewJersey,NewMexico,NewYork,NorthCarolina,NorthDakota,Ohio,Oklahoma,Oregon,Pennsylvania,RhodeIsland,SouthCarolina,SouthDakota,Tennessee,Texas,Utah,Vermont,Virginia,Washington,WestVirginia,Wisconsin,Wyoming,DistrictofColumbia000040TLDB.SETTINGS0c2SUB.USER.AUTH110831-5iso-8859-1NN00005FTLDB.THEMES0c2cream_gray.css,ice.css,patriotic.css,tuscani.cssTheme 1,Theme 2,Theme 3,Theme 400024ECOMPILE.SETUP0c2BASIC %FILENAME% %ITEMNAME%* To configure the compile command when using the web editor* edit line # 1 of this record to contain the appropriate syntax.** Example # 1 - Standard compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME%** Example # 2 - FLASH compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME% (O** Example # 3 - Standard compile using COMPILE* 001 COMPILE %FILENAME% %ITEMNAME%** Only line # 1 of this record is used, all other lines of this record are ignored.* If this record is deleted, the default behavior is:* COMPILE %FILENAME% %ITEMNAME%0000A1FC2DPIE.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' pieRadius='[RADIUS]' animation='0' > [CHART.DATA]</graph>0000B3PORTAL.SALES.REPORT.SETUP0c2MVDBPORTAL.SALESCLOSE.DATECLOSE.DATE.MMCLOSE.DATE.YYYYEXT.AMTEXT.COSTREP.NAMEBRANCHREGION199MD24F8;9;10;-;(MR2);*05TREP;X;1;11314000070PORTAL.AR.REPORT.SETUP0c2MVDBPORTAL.ARDUE.DATEDATES.PAIDINVOICE.AMTBALANCECUST2086MD250MD2CUST1000062PORTAL.AP.REPORT.SETUP0c2MVDBPORTAL.APDUE.DATEDATE.PAIDINV.AMOUNTBALANCE2086MD250MD2053B71WDB.BP0c000021DSET.COOKIE0c2SUBROUTINE SET.COOKIE( C.VAL )*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 10/25/03* Description  : This program sets the SESSION$COOKIES variable.*              ***********************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*IF TRIM(C.VAL) # "" THEN  SESSION$COOKIES<-1> = C.VALEND*RETURN*000872CREATE.SESSION0c2SUBROUTINE CREATE.SESSION( SESSION.ID )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program creates a unique session record and*              returns the session id to the calling program.**          WARNING: This program relys on MvInternet to generate*                       its unique ID.  If you are testing your program*                       from TCL, this will FAIL and you will not get*                       any session ID returned.** Modified by  : Mike Schmidt, Sierra Bravo Corporation* Date Revised : 11/6/2003* Modification : Modified to add the date and time to attributes 3 and 4.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause** Modified By: Peter Schellenbach, Zumasys* Date: 10/25/2016* Description: Added INCLUDE WWW.INCLUDE so we have access to F.WEB.SESSION*              in /WWW/ COMMON, instead of opening file here. Use F.WEB.SESSION*              instead of WEB.SESSION for file variable. Removed PROCREAD /*              SENTENCE since CGI$UNIQUE.ID is also in /WWW/ COMMON.** Init*#MAKE# RL $OPTIONS D3EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*INCLUDE WBPD WWW.INCLUDE ; *PJS 10-25-16**SESSION.ID = ''**PJS 10-25-16*OPEN '','WEB.SESSION' TO WEB.SESSION ELSE SESSION.ID = 'ERROR'*PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ""; SESSION.ID = 'ERROR'*PJS 10-25-16*PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE(); *PJS 06-12-15**PJS 10-25-16*SESSION.ID = FIELD( TCL.LINE, ' ', 2 )*SESSION.ID = CGI$UNIQUE.ID ;* PJS 10-25-16*IF SESSION.ID = "" THEN SESSION.ID = "ERROR" ; *PJS 06-12-15*CONVERT '{' TO '' IN SESSION.IDCONVERT '}' TO '' IN SESSION.ID*IF (SESSION.ID # 'ERROR') THEN  SESSION.ID = SESSION.ID:'-':DATE():'-':TIME()  SESSION.REC = ""  SESSION.REC<3> = DATE()  SESSION.REC<4> = TIME()  WRITE SESSION.REC ON F.WEB.SESSION, SESSION.IDENDSESSION$ID = SESSION.IDCALL PUT.SESSION.VAR('LastSessionAccess', DATE():'*':TIME())*RETURN*END017464MVDB.MAIN0c2** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Dashboard Display Program** 1-5-15 TOM PARKER OF ZUMASYS - CHANGES TO SUPPORT MULTI-SERIES DRILLDOWNS* 1-26-15 TOM PARKER OF ZUMASYS - ALLOW PRINTABLE ON ALL CHART TYPE SINCE*         NEW FUSION CHARTS SUPPORT THEM* 3-4-15 TOM PARKER OF ZUMASYS - DONT STRIP OUT DECIMALS IN W$BAR.VALUES* 3-15-15 TOM PARKER OF ZUMASYS - ADDITIONAL CHANGE TO SUPPORT MULTI-SERIES* 6-4-15 PETER SCHELLENBACH OF ZUMASYS - MODIFIED FOR QM*          CHANGE OCONV(X,'U3060') TO MD5(X)** 07-09-15 Peter Schellenbach - use jshow command to test if auth subroutine is cataloged.** 11-30-15 TOM PARKER - PROVIDE WEBSERVICE ACCESS WITH EMBEDDED USER AND PASSWORD** 12-15-15 & 01-14-16 Tom Parker & Peter Schellenbach (*PDF*)*  Added support for PDF generation of any widget.*  Widget subroutine must set W$PDFABLE to 1 to enable PDF generation.*  PDF generation must be enabled in the PDF Configuration widget, on*  the Administrator dashboard.* 01-25-16 Tom Parker - Do not allow Go Back if doing webservice* 04-25-16 Tom Parker - Make Go Back button fully functional for backing*                       up from drilldowns* 6-1-16 TOM PARKER - FIX ISSUES WITH BACKING UP FROM DRILLDOWN* 06-27-16 Tom Parker & Peter Schellenback (*EXCEL*)*  Added support for EXCEL spreadsheet generation of many widgets.*  Widget type must be EXCEL'able to set W$EXCELABLE to 1 to generate icon** 09-23-16 Tom Parker - Eliminate GO_BACK button support and replace with*          logic to handle standard browser back button** 09-23-16 Peter Schellenbach*  Add support for alternate logo defined for each user (MVDB.USERS attr 7).*  Enable 'datepicker' style input fields.*  Fix single user login problem.*  * 10-07-16 Peter Schellenbach*  If form contains many widget input controls, use POST instead of GET*  for form submission to avoid URL length limitations.**  Because POST method for login and widget inputs causes browser to prompt*  for resubmit when using back or refresh button, the POST-REDIRECT-GET*  pattern is now used. When responding to POST, we return small javascript*  which REDIRECTS by setting window.location. This causes a GET from browser.*  * 10-25-16 Peter Schellenbach*  Refactored INIT.WWW so all dashboard specific initialization is now in*  MVDB.INIT which is called from here. Only use POST-REDIRECT-GET pattern*  for login page. Use POST without P-R-G for forms with more than 20 inputs*  so that we don't end up with a bogus URL in the browser location (the*  URL used for redirect is bogus, and cannot be used to create emailed or*  webservice URLs).**  Removed the saving of GLOBAL.USER.DATA and WIDGET.USER.DATA from this*  program and move it to MVDB.INIT, saving before letting MVDB.MAIN handle*  the request.** 11-02-16 Peter Schellenbach*  Fine-tuned widget sizes now that we have switched to application_larger.css*  instead of application_normal.css to maximuze the are used by the charts.*  Calculate the 1/3 widget size differently for the 2-column layout, which*  is 45 pixels wider than the same widget in 3-column layout. Old size values*  are commented out for reference (in case we need to support normal size again.)**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.USERSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*EQU TRUE TO 1, FALSE TO 0, AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MVDB.SUBS' TO F.MVDB.SUBS ELSE STOP 201, 'MVDB.SUBS'OPEN '','MVDB.USERS' TO F.MVDB.USERS ELSE STOP 201, 'MVDB.USERS'OPEN '','MVDB.DEFS' TO F.MVDB.DEFS ELSE STOP 201, 'MVDB.DEFS'OPEN '','MVDB.UDATA' TO F.MVDB.UDATA ELSE STOP 201, 'MVDB.UDATA'OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'*** 11-30-15 NEED AN INSTALL DATE TO CONTROL SINGLE USER WEBSERVICE ACCESS*READ INSTALL.DATE FROM F.MVDB.CONTROL, 'INSTALL.DATE' ELSE   INSTALL.DATE=DATE()   WRITE INSTALL.DATE ON F.MVDB.CONTROL, 'INSTALL.DATE' END*OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE STOP 201, 'MVDB.WIDGET.TYPES'OPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE STOP 201, 'MVDB.THEMES'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD/VOC'END*READ WIDGET.DIV FROM F.WEB.FORMS, "WIDGET.DIV" ELSE WIDGET.DIV = "Missing WIDGET.DIV"*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)EQU SITE$AUTO.TRIM    TO SITE$SETTINGS(10)EQU SITE$REFRESH TO SITE$SETTINGS(11)EQU SITE$ALLOW.WEBSVC TO SITE$SETTINGS(12)EQU SITE$ALLOW.EMAILD TO SITE$SETTINGS(13)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READ THEME.LIST FROM F.MVDB.CONTROL, "MVDB.THEMES" ELSE THEME.LIST = "cream_gray.css,ice.css,patriotic.css,tuscani.css" THEME.LIST<2> = "Theme 1,Theme 2,Theme 3,Theme 4" WRITE THEME.LIST ON F.MVDB.CONTROL, "MVDB.THEMES"ENDIF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDEND*MAT GLOBAL.INFO = ''G$QUERYMODE = FALSE ;* Not query mode**PDF** Read PDF configuration settingsDIM PDF$SETTINGS(10)EQU PDF$ENABLED   TO PDF$SETTINGS(1)EQU PDF$COMMAND   TO PDF$SETTINGS(2)EQU PDF$DIRECTORY TO PDF$SETTINGS(3)EQU PDF$LIFETIME  TO PDF$SETTINGS(4)MATREAD PDF$SETTINGS FROM F.MVDB.CONTROL,'PDF.SETTINGS' ELSE MAT PDF$SETTINGS=''IF PDF$ENABLED THEN CALL SUB.PDF.FUNC('cleanup','')** GET LICENSE INFORMATION*CALL SUB.MVDB.FEATURES(USER.LIMIT,MAPS.ENABLED,FUSION.WIDGETS.ENABLED,WATERMARK)*NAME.COLOR = "AQUA":VM:"BLACK":VM:"BLUE":VM:"FUCHSIA":VM:"GRAY":VM:"GREEN":VM:"LIME":VM:"MAROON":VM:"NAVY"NAME.COLOR = NAME.COLOR:VM:"OLIVE":VM:"PURPLE":VM:"RED":VM:"SILVER":VM:"TEAL":VM:"WHITE":VM:"YELLOW":VM:"GREY"NAME.COLOR<2> = "#00FFFF":VM:"#000000":VM:"#0000FF":VM:"#FF00FF":VM:"#808080":VM:"#008000":VM:"#00FF00":VM:"#800000":VM:"#000080"NAME.COLOR<2> = NAME.COLOR<2>:VM:"#808000":VM:"#800080":VM:"#FF0000":VM:"#C0C0C0":VM:"#008080":VM:"#FFFFFF":VM:"#FFFF00":VM:"#808080"*LOCATE "logout" IN CGI$VARS SETTING POS THEN  CALL DESTROY.SESSIONENDCALL GET.SESSION.VAR("userid",userid)CALL GET.SESSION.VAR("adminauth",adminauth)LOCATE "psid" IN CGI$VARS SETTING POS THEN  PURGE.SESSIONID = CGI$VALS<POS>  EXECUTE "MVDB.PURGE.SESSIONS ":PURGE.SESSIONID CAPTURING JUNKENDMAT USER.ITEM = "" ;* PJS 09-23-16: make sure this gets initialized, in case of webservice or emailed reports* 11-30-15 ESTABLISH WEBSERVICE VARIABLESDIM W$WEBSERVICE.DATA(5)MATREAD W$WEBSERVICE.DATA FROM F.MVDB.UDATA,SESSION$ID:"$WEBSERVICE" ELSE MAT W$WEBSERVICE.DATA=''EQU W$WEBSERVICE TO W$WEBSERVICE.DATA(1)EQU W$EMAILED.REPORT TO W$WEBSERVICE.DATA(2)HTML.ID=''IF userid = "" THEN  LOGIN.OK = FALSE  LOGIN.MSG = ""    loginid = "" ; password = ""  LOCATE "loginid" IN CGI$VARS SETTING POS THEN    loginid = CGI$VALS<POS>    LOCATE "password" IN CGI$VARS SETTING POS THEN      password = CGI$VALS<POS>    END  END*WEBSERVICE*  IF loginid # "" AND (password # "" OR SITE$NULL.PW.OK=1) THEN*WEBSERVICE*    IF SITE$AUTH.SUB # "" THEN*WEBSERVICE*      *PJS 07-09-15* BEGIN JBASE               *WEBSERVICE*      *READ CATPTR FROM F.MD, SITE$AUTH.SUB ELSE CATPTR = ""*WEBSERVICE*      *IF CATPTR<1> = "VR" THEN*WEBSERVICE*      *jBASE does not use catalog pointers - use jshow to test if subroutine is available*WEBSERVICE*      EXECUTE 'jshow -c ':SITE$AUTH.SUB CAPTURING JSHOW.OUT*WEBSERVICE*      IF INDEX(JSHOW.OUT,'Subroutine:',1) THEN*WEBSERVICE*      *PJS 07-09-15* END JBASE                *WEBSERVICE*        CALL @SITE$AUTH.SUB(loginid,password,"AUTH",LOGIN.OK,LOGIN.MSG,MAT USER.ITEM)*WEBSERVICE*        IF LOGIN.OK = "Y" THEN LOGIN.OK = TRUE*WEBSERVICE*        IF NOT(LOGIN.OK MATCHES "1N0N") THEN LOGIN.OK = FALSE*WEBSERVICE*      END ELSE*WEBSERVICE*        LOGIN.OK = FALSE*WEBSERVICE*        LOGIN.MSG = SITE$AUTH.SUB:" authentication subroutine not cataloged."*WEBSERVICE*      END*WEBSERVICE*    END ELSE*WEBSERVICE*      MATREAD USER.ITEM FROM F.MVDB.USERS, loginid THEN*WEBSERVICE*        IF OCONV(password,"U3060") = USER.PASSWORD THEN*WEBSERVICE*          LOGIN.OK = TRUE*WEBSERVICE*        END*WEBSERVICE*      END*WEBSERVICE*    END  *  ** 11-30-15 WEBSERVICE AND EMAILED REPORT CAPABILITY LOGIC  *  IF loginid = 'emailed' THEN W$EMAILED.REPORT=1  IF loginid = 'webservice' THEN W$WEBSERVICE=1  LOCATE "htmlid" IN CGI$VARS SETTING POS THEN    HTML.ID = CGI$VALS<POS>  END ELSE    HTML.ID='null'  END  IF loginid # "" AND (W$EMAILED.REPORT OR password # "" OR SITE$NULL.PW.OK=1) THEN     LOCATE 'passtime' IN CGI$VARS SETTING PASSTIME.POS ELSE PASSTIME.POS=0     IF PASSTIME.POS THEN        PASSTIME=CGI$VALS<PASSTIME.POS>        CONVERT ':' TO '' IN PASSTIME      END ELSE PASSTIME=''     BEGIN CASE        CASE PASSTIME AND loginid = 'webservice'           EXECUTE "MVDB.PURGE.SESSIONS webservice" CAPTURING JUNK; * PURGE ANY OLD webservices           IF PASSTIME MATCHES '6N' THEN              IPASSTIME = ICONV(PASSTIME[1,2]:':':PASSTIME[3,2]:':':PASSTIME[5,2],'MT')           END ELSE              IPASSTIME = -601 ;* Ensure the time is expired if not 6 digits!           END           BEGIN CASE              CASE SITE$ALLOW.WEBSVC # 'Y'                 * webservice login is not enabled                 LOGIN.OK = FALSE                 LOGIN.MSG = 'Webservice login is not enabled'              CASE USER.LIMIT < 2 AND DATE() > (INSTALL.DATE+30)                 * MUST HAVE A MULTI USER LICENSE TO USE WEBSERVICE AFTER                 * 30 DAY TRIAL PERIOD                 LOGIN.OK = FALSE                 LOGIN.MSG = 'Must have a multi-user license to use webservices'              CASE ABS(TIME()-IPASSTIME) > 600                 * TIME MUST BE WITHIN 10 MINUTES OF MACHINE TIME                 LOGIN.OK = FALSE                 *LOGIN.MSG = 'Request not synced with system time.'                 LOGIN.MSG = 'The request URL has expired. This may be due to differences in the system '                 LOGIN.MSG := 'clock on the MV Dashboard server and the clock used to generate the URL.'              CASE 1                 * VALID PASSWORD IS THE SUM OF MMDDYY + SSMMHH (FROM PASSTIME)                 * INVERT THE TIME TO SSMMHH                 EMITSSAP=''                 FOR TIME.I = 6 TO 1 STEP -1                    EMITSSAP:=PASSTIME[TIME.I,1]                  NEXT TIME.I                 *OTODAY=OCONV(DATE(),'D2-')                 *CONVERT '-' TO '' IN OTODAY                 TODAY.MM=OCONV(DATE(),'DM')'R%%'                 TODAY.DD=OCONV(DATE(),'DD')'R%%'                 TODAY.YY=OCONV(DATE(),'DY')'R%%'                 OTODAY = TODAY.MM:TODAY.DD:TODAY.YY ;* handle non-USA date formats properly                 CALCED.PASSWORD=OTODAY+EMITSSAP                 IF password MATCHES '6N' THEN CHECKED.PASSWORD = password + 0 ELSE CHECKED.PASSWORD = -1                 IF CALCED.PASSWORD = CHECKED.PASSWORD THEN                    LOGIN.OK = TRUE                    USER.ROLE=''*                    CALL PUT.SESSION.VAR("userid",loginid)                 END ELSE                    LOGIN.OK = FALSE                    LOGIN.MSG = 'Invalid password'                 END           END CASE        CASE loginid = 'emailed'           EXECUTE "MVDB.PURGE.SESSIONS emailed" CAPTURING JUNK; * PURGE ANY OLD emailed           OPEN '','MVDB.EMAILED.HTML' TO F.EMAILED.HTML ELSE STOP 201, 'MVDB.EMAILED.HTML'           *           ** PURGED ANY EMAIL REPORTS OVER 10 DAYS OLD           *           EXECUTE 'SELECT MVDB.EMAILED.HTML' CAPTURING JUNK           LOOP              READNEXT EMAILED.ID ELSE EMAILED.ID='DONE'           UNTIL EMAILED.ID='DONE' DO              IF (EMAILED.ID[1,5]+10) < DATE() THEN                 DELETE F.EMAILED.HTML, EMAILED.ID              END           REPEAT           IF SITE$ALLOW.EMAILD # 'Y' THEN              * emaild login is not enabled              LOGIN.OK = FALSE              LOGIN.MSG = 'Emailed login is not enabled'           END ELSE              READV TEST.HTML.REPORT FROM F.EMAILED.HTML, HTML.ID, 1 ELSE TEST.HTML.REPORT='NOTFOUND'              IF TEST.HTML.REPORT = 'NOTFOUND' THEN                 LOGIN.OK = FALSE                 LOGIN.MSG = 'Emailed report not found with id of ':HTML.ID              END ELSE                 USER.ROLE=''                 LOGIN.OK = TRUE                 INSERT.VARS='dbname':AM:'udview':AM:'udpos1':AM:'udval1'                 INSERT.VALS='Emailed Report':AM:'Emailed Report':AM:1:AM:HTML.ID                 CGI$VARS=INSERT(CGI$VARS,1,0,0,INSERT.VARS)                 CGI$VALS=INSERT(CGI$VALS,1,0,0,INSERT.VALS)              END           END        CASE SITE$AUTH.SUB # ""           *PJS 07-09-15* BEGIN JBASE                          *READ CATPTR FROM F.MD, SITE$AUTH.SUB ELSE CATPTR = ""           *IF CATPTR<1> = "VR" THEN           *jBASE does not use catalog pointers - use jshow to test if subroutine is available           EXECUTE 'jshow -c ':SITE$AUTH.SUB CAPTURING JSHOW.OUT           IF INDEX(JSHOW.OUT,'Subroutine:',1) THEN             *PJS 07-09-15* END JBASE                             CALL @SITE$AUTH.SUB(loginid,password,"AUTH",LOGIN.OK,LOGIN.MSG,MAT USER.ITEM)             IF LOGIN.OK = "Y" THEN LOGIN.OK = TRUE             IF NOT(LOGIN.OK MATCHES "1N0N") THEN LOGIN.OK = FALSE           END ELSE             LOGIN.OK = FALSE             LOGIN.MSG = SITE$AUTH.SUB:" authentication subroutine not cataloged."           END        CASE 1           MATREAD USER.ITEM FROM F.MVDB.USERS, loginid THEN             IF OCONV(password,"U3060") = USER.PASSWORD THEN               LOGIN.OK = TRUE*                 CALL PUT.SESSION.VAR("userid",loginid)             END           END     END CASE  END  IF LOGIN.OK THEN    EXECUTE "MVDB.PURGE.SESSIONS" CAPTURING JUNK ;* Purge out old session data    *    SELECT F.WEB.SESSION    ACTIVE.SESSIONS = ""    USER.ACTIVE.SESSIONS = ""    LOOP      READNEXT WSID ELSE EXIT      READ SREC FROM F.WEB.SESSION, WSID ELSE CONTINUE      LOCATE "userid" IN SREC<1> SETTING UPOS THEN        ASUSER = SREC<2,UPOS>        LOCATE "LastSessionAccess" IN SREC<1> SETTING UPOS THEN          ASDATE = FIELD(SREC<2,UPOS>,'*',1) ;* date          ASTIME = FIELD(SREC<2,UPOS>,'*',2) ;* time          ASAGE = (DATE()-ASDATE) * 86400          ASAGE += (TIME()-ASTIME)        END ELSE ASAGE = 0        IF OCONV(ASUSER,'MCU') = OCONV(loginid,'MCU') THEN          LOCATE ASAGE IN USER.ACTIVE.SESSIONS<3> BY "DR" SETTING ASPOS ELSE NULL          USER.ACTIVE.SESSIONS = INSERT( USER.ACTIVE.SESSIONS, 1, ASPOS, 0, WSID )          USER.ACTIVE.SESSIONS = INSERT( USER.ACTIVE.SESSIONS, 2, ASPOS, 0, ASUSER ) ;* User ID          USER.ACTIVE.SESSIONS = INSERT( USER.ACTIVE.SESSIONS, 3, ASPOS, 0, ASAGE )        END ELSE          LOCATE ASAGE IN ACTIVE.SESSIONS<3> BY "DR" SETTING ASPOS ELSE NULL          ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 1, ASPOS, 0, WSID )          ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 2, ASPOS, 0, ASUSER ) ;* User ID          ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 3, ASPOS, 0, ASAGE )        END      END    REPEAT    *Merge active sessions for this user in front of     *the other sessions to prefer those sessions for cleanup.    IF USER.ACTIVE.SESSIONS # '' THEN      ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 1, 1, 0, USER.ACTIVE.SESSIONS<1> )      ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 2, 1, 0, USER.ACTIVE.SESSIONS<2> )      ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 3, 1, 0, USER.ACTIVE.SESSIONS<3> )    END    ASCNT = DCOUNT( ACTIVE.SESSIONS<1>, @VM )    IF ASCNT > USER.LIMIT THEN      PURGE.LIST = ""      LOOP WHILE ASCNT > USER.LIMIT DO        PURGE.LIST := ACTIVE.SESSIONS<1,1>:" "        ACTIVE.SESSIONS = DELETE( ACTIVE.SESSIONS, 1, 1, 0 )        ACTIVE.SESSIONS = DELETE( ACTIVE.SESSIONS, 2, 1, 0 )        ACTIVE.SESSIONS = DELETE( ACTIVE.SESSIONS, 3, 1, 0 )        ASCNT -= 1      REPEAT      EXECUTE "MVDB.PURGE.SESSIONS ":PURGE.LIST CAPTURING JUNK    END    IF ASCNT = USER.LIMIT THEN      * Logging in will force a user to log off      IF SITE$AUTO.TRIM = 'Y' THEN        EXECUTE "MVDB.PURGE.SESSIONS ":ACTIVE.SESSIONS<1,1> CAPTURING JUNK      END ELSE        READ MSG.TEMPLATE FROM F.WEB.FORMS, "message.html" ELSE MSG.TEMPLATE = "message.html not found."        CALL SWAP(MSG.TEMPLATE,'<!-- MSG_TITLE -->',"User limit exceeded.")        CALL SWAP(MSG.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)        CALL SWAP(MSG.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)        MSG.CONTENT = \<p>Your maximum user limit has been reached. If you choose to log in, user "\:ACTIVE.SESSIONS<2,1>        MSG.CONTENT := \" will be logged out and the user's session data will be lost.</p>\        MSG.CONTENT := '<a href="/dbc/MVDB.MAIN?psid=':ACTIVE.SESSIONS<1,1>:'">Click here</a> to log ':ACTIVE.SESSIONS<2,1>:' out and try again.</a>'        CALL SWAP(MSG.TEMPLATE,'<!-- MSG_CONTENT -->',MSG.CONTENT)        CALL WEB.SEND(MSG.TEMPLATE)        GLOBAL.INFO(100) = 1        STOP      END    END    CALL PUT.SESSION.VAR("userid",loginid)    userid = loginid    CALL PUT.SESSION.VAR("login_date",DATE())    CALL PUT.SESSION.VAR("login_time",TIME())  END ELSE    READ LOGIN.PAGE FROM F.WEB.FORMS, "login.html" ELSE LOGIN.PAGE = "login.html not found."    IF loginid # "" THEN      IF LOGIN.MSG = "" THEN LOGIN.MSG = "Invalid user ID or Password"      CALL SWAP(LOGIN.PAGE,'<!-- ERROR -->',LOGIN.MSG)    END    CALL SWAP(LOGIN.PAGE,'<!-- SITE_LOGO -->',SITE.LOGO)    CALL SWAP(LOGIN.PAGE,'<!--CHARACTER_SET-->',SITE$CHARSET)        CALL SWAP(LOGIN.PAGE,'<!-- SITE_THEME -->',THEME.CSS)    CALL WEB.SEND(LOGIN.PAGE)    GLOBAL.INFO(100) = 1 ;* Intentional Stop    STOP  ENDEND ELSE  * Get the user item.  * If a custom authentication subroutine is in use, we have to call that  * subroutine again in order to get the user record populated  IF SITE$AUTH.SUB # "" THEN    *PJS 07-09-15* BEGIN JBASE                   *READ CATPTR FROM F.MD, SITE$AUTH.SUB ELSE CATPTR = ""    *IF CATPTR<1> = "VR" THEN    *jBASE does not use catalog pointers - use jshow to test if subroutine is available    EXECUTE 'jshow -c ':SITE$AUTH.SUB CAPTURING JSHOW.OUT    IF INDEX(JSHOW.OUT,'Subroutine:',1) THEN    *PJS 07-09-15* END JBASE                      CALL @SITE$AUTH.SUB(userid,"","READ",LOGIN.OK,LOGIN.MSG,MAT USER.ITEM)    END ELSE MAT USER.ITEM = ""  END ELSE    MATREAD USER.ITEM FROM F.MVDB.USERS, userid ELSE MAT USER.ITEM = ''  ENDENDIF USER.ROLE = "Administrator" AND NOT(adminauth) THEN  * The user is an admin based on the USER.ROLE setting in their user record  adminauth = 1  CALL PUT.SESSION.VAR("adminauth",adminauth)ENDG$ADMIN.USER = adminauth*G$USERID = userid* 10-07-16 Implement the POST-REDIRECT-GET pattern to prevent the browser* from prompting before resubmit when using back or refresh buttons after* a POST (used for login form only at this time).LOCATE "REQUEST_METHOD" IN CGI$VARS SETTING POS THEN  IF CGI$VALS<POS> = "POST" THEN    LOCATE "dblogin" IN CGI$VARS SETTING POS THEN      IF CGI$VALS<POS> THEN        * Redirect to MVDB.MAIN default dashboard after valid login        HTML = ''        HTML<-1> = '<html>'        HTML<-1> = '<body>'        HTML<-1> = '<script type="text/javascript">'        HTML<-1> = 'window.location="':CGI$PATH:'/MVDB.MAIN?dbname=";' ;* start with default dashboard after login        HTML<-1> = '</script>'        HTML<-1> = '</body>'        HTML<-1> = '</html>'        CALL WEB.SEND(HTML)        GLOBAL.INFO(100) = 1 ;* Intentional Stop        STOP      END    END    * handle P-R-G for widget input form submit*    WRITE CGI$VARS ON F.MVDB.UDATA,SESSION$ID:'$POSTVARS'*    WRITE CGI$VALS ON F.MVDB.UDATA,SESSION$ID:'$POSTVALS'*    HTML = ''*    HTML<-1> = '<html>'*    HTML<-1> = '<body>'*    HTML<-1> = '<script type="text/javascript">'*    HTML<-1> = 'window.location="':CGI$PATH:'/MVDB.MAIN?dbprg=1";'*    HTML<-1> = '</script>'*    HTML<-1> = '</body>'*    HTML<-1> = '</html>'*    CALL WEB.SEND(HTML)*    GLOBAL.INFO(100) = 1 ;* Intentional Stop*    STOP*  ENDEND*LOCATE "dbprg" IN CGI$VARS SETTING POS THEN*  IF CGI$VALS<POS> THEN*    READ CGI$VARS FROM F.MVDB.UDATA,SESSION$ID:'$POSTVARS' THEN*      READ CGI$VALS FROM F.MVDB.UDATA,SESSION$ID:'$POSTVALS' ELSE CGI$VALS = ''*    END*    DELETE F.MVDB.UDATA,SESSION$ID:'$POSTVARS'*    DELETE F.MVDB.UDATA,SESSION$ID:'$POSTVALS'*  END*END* END OF 10-07-16*LOCATE 'generatepdf' IN CGI$VARS SETTING GENERATE.PDF ELSE GENERATE.PDF=0; * 4-25-16LOCATE 'generateexcel' IN CGI$VARS SETTING GENERATE.EXCEL ELSE GENERATE.EXCEL=0; *EXCEL* 6-27-16W$EXCELABLE=0;   *EXCEL* 6-27-16GO.BACK=0;   * 4-25-16*GOBACK.REENTRY:; * 4-25-16** udview, if present, is the view name to which  the associated* udpos and udval parameters apply.LOCATE "udview" IN CGI$VARS SETTING POS THEN  udview = CGI$VALS<POS>END ELSE udview = ""*LOCATE "dbname" IN CGI$VARS SETTING POS THEN  CALL PUT.SESSION.VAR("current_db",CGI$VALS<POS>)END*LOCATE 'refresh' IN CGI$VARS SETTING POS THEN  *really, this should be stored in the user record per db key  IF CGI$VALS<POS> = '0' THEN CGI$VALS<POS> = ''  CALL GET.SESSION.VAR("current_db",r.current.db)  IF r.current.db = '' THEN r.current.db = USER.DEFAULT.DB  CALL PUT.SESSION.VAR(r.current.db:"!refresh",CGI$VALS<POS>)END*9-23-16***9-23-16*** 4-25-16 SUPPORT AUTOMATIC BACKOUT FROM A DRILLDOWN*9-23-16***9-23-16**EXCEL*IF NOT(GO.BACK) AND NOT(GENERATE.PDF) THEN*9-23-16*IF NOT(GO.BACK) AND NOT(GENERATE.PDF) AND NOT(GENERATE.EXCEL) THEN; *EXCEL* 6-27-16*9-23-16*   CALL DRILLDOWN.STACK.RTNE(F.MVDB.UDATA,DRILLDOWN.STACK,GO.BACK)*9-23-16*   IF GO.BACK THEN GOTO GOBACK.REENTRY*9-23-16*END ELSE*9-23-16*   DRILLDOWN.STACK = ""*9-23-16*ENDDRILLDOWN.STACK=''; *9-23-16G$DRILLDOWN.MODE = FALSELOCATE "dd" IN CGI$VARS SETTING POS THEN   IF CGI$VALS<POS> <> '' THEN      G$DRILLDOWN.MODE = TRUE   ENDEND*9-23-16** END OF 4-25-16*LOCATE "sw" IN CGI$VARS SETTING POS THEN  FORM.SUBMIT.WIDGET = CGI$VALS<POS>END ELSE FORM.SUBMIT.WIDGET = ""*IF G$DRILLDOWN.MODE THEN  * This is a drill-down call. Load up the "drilldown" dashboard  * and populate it only with this single widget.  LOCATE "dd_from" IN CGI$VARS SETTING POS THEN    G$DD.REFERRER = CGI$VALS<POS>  END  LOCATE "dd_from_db" IN CGI$VARS SETTING POS THEN    G$DD.FROM.DB = CGI$VALS<POS>  END  G$CURRENT.DB = "drilldown"  MAT DB.ITEM = ''  READV DD.FROM.DB.THEME FROM F.MVDB.DEFS, G$DD.FROM.DB, 7 ELSE DD.FROM.DB.THEME = ''  DB.THEME = DD.FROM.DB.THEME  DB.WIDGETS = udviewEND ELSE  CALL GET.SESSION.VAR("current_db",current.db)  IF current.db # "" THEN    G$CURRENT.DB = current.db  END ELSE    * No current dashboard is available in the session.    * Must be the first time through. Go get the default.    G$CURRENT.DB = USER.DEFAULT.DB    IF G$CURRENT.DB = '' THEN G$CURRENT.DB = "EMPTY" ;* Empty dashboard  END  *  MATREAD DB.ITEM FROM F.MVDB.DEFS, G$CURRENT.DB ELSE MAT DB.ITEM = ''ENDIF DB.THEME # '' THEN  READV THEME.CSS FROM F.MVDB.THEMES, DB.THEME, 1 ELSE THEME.CSS = ''END ELSE  READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''END** PJS 09-23-16: user altertnate logo overrides site logoIF USER.ALT.LOGO <> '' THEN  SITE.LOGO = USER.ALT.LOGOEND ELSEIF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  ENDENDIF NOT(INDEX(SITE.LOGO,'/',1)) THEN  SITE.LOGO = '/db/images/':SITE.LOGOEND*CALL GET.SESSION.VAR("login_date",login.date)CALL GET.SESSION.VAR("login_time",login.time)G$LOGIN.DATE = login.dateG$LOGIN.TIME = login.time**PDF** When generating a PDF, get name of widget to render into PDF.* When generating iframe content, get the HTML widget name to* show in the iframe.WIDGET.OWN.STYLE = FALSESINGLE.WIDGET = ""PDF.WIDGET.NAME = ""* 4-25-16 *IF PDF$ENABLED THEN* 4-25-16 *  LOCATE 'generatepdf' IN CGI$VARS SETTING POS ELSE POS=0* 4-25-16 *  IF POS THEN* 4-25-16 *    PDF.WIDGET.NAME = CGI$VALS<POS>* 4-25-16 *    SINGLE.WIDGET = PDF.WIDGET.NAME* 4-25-16 *  END* 4-25-16 *END*** 4-25-16 CHANGED LOGIC*IF PDF$ENABLED AND GENERATE.PDF THEN  PDF.WIDGET.NAME = CGI$VALS<GENERATE.PDF>  SINGLE.WIDGET = PDF.WIDGET.NAME  W$PDFABLE=1  DB.WIDGETS=PDF.WIDGET.NAMEEND* END OF 4-25-16***EXCEL* 6-27-16 ADDED LOGIC*IF GENERATE.EXCEL THEN  EXCEL.WIDGET.NAME = CGI$VALS<GENERATE.EXCEL>  SINGLE.WIDGET = EXCEL.WIDGET.NAME  W$EXCELABLE=1  DB.WIDGETS=EXCEL.WIDGET.NAMEEND ELSE EXCEL.WIDGET.NAME=''* END OF 6-27-16IFRAME.WIDGET.NAME = ""LOCATE 'iframewidget' IN CGI$VARS SETTING POS ELSE POS=0IF POS THEN  IFRAME.WIDGET.NAME = CGI$VALS<POS>  SINGLE.WIDGET = IFRAME.WIDGET.NAMEEND** Build a list of subroutines to call to create this dashboard*DISP.CNT = DCOUNT( DB.WIDGETS, VM )WIDGET.NAME.POS = FALSEFOR DX = 1 TO DISP.CNT  MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, DB.WIDGETS<1,DX> THEN    ADD.OK = TRUE    IF WIDGET.USERS = "ADMIN" THEN      IF NOT(adminauth) THEN ADD.OK = FALSE ;* Only usable by authenticated admins    END ELSE IF WIDGET.USERS # "" THEN ;* Some user restrictions have been assigned      LOCATE userid IN WIDGET.USERS<1> SETTING POS ELSE ADD.OK = FALSE    END    IF ADD.OK THEN      *PDF* if generating PDF or iframe content, exclude other widgets      *EXCEL* also applies to generating EXCEL      IF SINGLE.WIDGET = "" OR SINGLE.WIDGET = DB.WIDGETS<1,DX> THEN        WIDGET.NAME.POS += 1        G$WIDGET.NAME.LIST<1,WIDGET.NAME.POS> = DB.WIDGETS<1,DX>        G$WIDGET.SUB.LIST<1,WIDGET.NAME.POS> = WIDGET.SUB      END    END  ENDNEXT DX*DIM TEMPLATE.AREA(5)MAT TEMPLATE.AREA = ''*MAT GLOBAL.TEMP.DATA = '' ;* InitializeMATREAD GLOBAL.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$UG" ELSE MAT GLOBAL.USER.DATA = ''*CALL GET.SESSION.VAR("debug_widgets",DEBUG.WIDGETS) ;* Retrieve a list of widgets user is debuggingIF adminauth THEN ;* Only administrators can put widgets into debug mdoe.  LOCATE "debug_widget" IN CGI$VARS SETTING POS THEN    DEBUG.WIDGET = CGI$VALS<POS>    LOCATE DEBUG.WIDGET IN DEBUG.WIDGETS SETTING POS ELSE      DEBUG.WIDGETS<-1> = DEBUG.WIDGET      CALL PUT.SESSION.VAR("debug_widgets",DEBUG.WIDGETS)    END  END  LOCATE "undebug_widget" IN CGI$VARS SETTING POS THEN    UNDEBUG.WIDGET = CGI$VALS<POS>    LOCATE UNDEBUG.WIDGET IN DEBUG.WIDGETS SETTING DPOS THEN      DEBUG.WIDGETS = DELETE( DEBUG.WIDGETS, DPOS, 0, 0 )      CALL PUT.SESSION.VAR("debug_widgets",DEBUG.WIDGETS)    END  ENDEND*CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS) ;* Retrieve a list of failed widgets this sessionLOCATE "unfail_widget" IN CGI$VARS SETTING POS THEN  * The user has asked to take this widget out of failed mode and try running the widget again.  UNFAIL.WIDGET = CGI$VALS<POS>  LOCATE UNFAIL.WIDGET IN FAILED.WIDGETS SETTING DPOS THEN    FAILED.WIDGETS = DELETE( FAILED.WIDGETS, DPOS, 0, 0 )    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  ENDEND** Was there a running widget that didn't complete? If so, it's a failed widget that didn't return* control to MVDB.MAIN. Let's add it to the list of failed widgets this session so we can avoid* producing blank pages for the user.*CALL GET.SESSION.VAR("running_widget",FAILED.WIDGET)CALL GET.SESSION.VAR("running_widget_dt",FAILED.WIDGET.DT)IF FAILED.WIDGET # "" THEN  FW.DATE = FIELD( FAILED.WIDGET.DT, '*', 1 )  FW.TIME = FIELD( FAILED.WIDGET.DT, '*', 2 )  FW.LAPSE = TIME() - FW.TIME  FW.LAPSE += ((DATE() - FW.DATE) * 86400)  IF SITE$W.MAX.DUR = "" THEN SITE$W.MAX.DUR = 10 ;* Default  IF FW.LAPSE < SITE$W.MAX.DUR THEN FAILED.WIDGET = ""ENDIF FAILED.WIDGET # "" THEN  CALL PUT.SESSION.VAR("running_widget","")  CALL PUT.SESSION.VAR("running_widget_dt","")  LOCATE FAILED.WIDGET IN FAILED.WIDGETS SETTING FWPOS ELSE    FAILED.WIDGETS<-1> = FAILED.WIDGET    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  ENDEND** Widgets appearing in FAILED.WIDGETS and DEBUG.WIDGETS are both hijacked at runtime, and our* SUB.DEBUG.WIDGET subroutine is executed in place of the subroutine in the widget definition.* The difference is that FAILED.WIDGETS are widgets that this program has determined to have* failed. DEBUG.WIDGETS are functional widgets that the user has put into debug mode.* In both cases, the widget remains in this list until the user removes it using controls * within the SUB.DEBUG.WIDGET widget.*WIDGET.CNT = DCOUNT( G$WIDGET.NAME.LIST, VM )FOR VX = 1 TO WIDGET.CNT  WIDGET.NAME = G$WIDGET.NAME.LIST<1,VX>  MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, WIDGET.NAME ELSE MAT WIDGET.ITEM = ''*9-23-16** FIX 6-1-16 *  MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME ELSE MAT WIDGET.USER.DATA = ''*9-23-16** FIX 6-1-16 **9-23-16*  IF GO.BACK THEN *9-23-16*     MAT WIDGET.USER.DATA=''*9-23-16*   END ELSE*9-23-16*     MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME ELSE MAT WIDGET.USER.DATA = ''*9-23-16*   END*9-23-16** END OF 6-1-16  MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME ELSE MAT WIDGET.USER.DATA = ''; *9-23-16*  *  MAP.TYPE.SUFFIX = ""  IF WIDGET.NAME = udview THEN    * We need to set values in WIDGET.USER.DATA before calling this routine    * Process links.    UDN = 1    SEARCH.DONE = FALSE    LOOP      SEARCH.NAME = "udpos":UDN      LOCATE SEARCH.NAME IN CGI$VARS SETTING POS THEN        udpos = CGI$VALS<POS>        IF udpos MATCHES "1N0N" THEN          IF udpos < 1 OR udpos > 100 THEN UDN +=1 ; CONTINUE        END ELSE UDN += 1 ; CONTINUE        SEARCH.NAME = "udval":UDN        LOCATE SEARCH.NAME IN CGI$VARS SETTING POS THEN          WIDGET.USER.DATA(udpos) = CGI$VALS<POS>        END      END ELSE SEARCH.DONE = TRUE    UNTIL SEARCH.DONE DO      UDN += 1    REPEAT    * Process Inputs.    VARCNT = DCOUNT( CGI$VARS, AM )    FOR CGIVX = 1 TO VARCNT      IF CGI$VARS<CGIVX>[1,4] = "inp_" THEN        udpos = FIELD(CGI$VARS<CGIVX>,'_',2)        IF udpos MATCHES "1N0N" THEN          IF udpos >= 1 AND udpos <= 100 THEN            WIDGET.USER.DATA(udpos) = CGI$VALS<CGIVX>          END        END      END      *Look for checkboxes that didn't come back      *and stuff a zero in there.      IF CGI$VARS<CGIVX>[1,9] = 'mvdbcxbx_' THEN        udpos = FIELD(CGI$VARS<CGIVX>,'_',2)        LOCATE 'inp_':udpos IN CGI$VARS SETTING CXBX.POS ELSE          IF udpos >= 1 AND udpos <= 100 THEN            WIDGET.USER.DATA(udpos) = 0          END        END      END    NEXT CGIVX    *    LOCATE 'mapdd' IN CGI$VARS SETTING POS THEN      * This is a map drilldown. Get the map name from the state code      STATE.CODE = WIDGET.USER.DATA(1)      READ STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ""      CONVERT "," TO @VM IN STATE.NAMES      LOCATE STATE.CODE IN STATE.NAMES<1> SETTING STATE.POS THEN        WIDGET.USER.DATA(2) = STATE.NAMES<2,STATE.POS>        MAP.TYPE.SUFFIX = STATE.CODE ;* Add this to the widget type      END    END  END  *  * If this is a USA map widget set in drill-down mode for a specific state  * that state name will be in WIDGET.USER.DATA(1). This code below is necessary  * to ensure that the widget stays in the state map mode until the user  * changes it.  *  IF MAP.TYPE.SUFFIX = "" THEN MAP.TYPE.SUFFIX = WIDGET.USER.DATA(1)<1>  *  IF FORM.SUBMIT.WIDGET = WIDGET.NAME THEN    * The user clicked the "go" button on the form section of this widget.    G$SUBMITTED = 1  END ELSE    G$SUBMITTED = 0  END  *  * The widget debugger uses GLOBAL.INFO(90) to determine if the widget is in debug  * mode due to user request, or if it is being forced into debug mode by MVDB.MAIN  *  GLOBAL.INFO(90) = ""  GLOBAL.INFO(91) = G$WIDGET.SUB.LIST<1,VX> ;* Original subroutine name  WDEBUG.MODE = 0 ; WFAIL.MODE = 0  *  LOCATE WIDGET.NAME IN FAILED.WIDGETS SETTING DUM THEN    * This widget failed last time we tried to run it. Let's run the "Failed Widget" subroutine instead.    * This subroutine will have access to all of the information that would have been passed to the    * failed widget, so diagnostic information can be presented through this widget.    GLOBAL.INFO(90) = "FAIL"    SUBNAME = "SUB.DEBUG.WIDGET"    WFAIL.MODE = 1  END ELSE    LOCATE WIDGET.NAME IN DEBUG.WIDGETS SETTING DUM THEN      GLOBAL.INFO(90) = "DEBUG"      SUBNAME = "SUB.DEBUG.WIDGET"      WDEBUG.MODE = 1    END ELSE      SUBNAME = G$WIDGET.SUB.LIST<1,VX>    END  END  MAT WIDGET.INFO = "" ;* clear this one out for the new call  G$WIDGET.NAME = WIDGET.NAME  G$WIDGET.SUB = SUBNAME  G$WIDGET.CALL.TIME<1,VX> = DATE():"*":TIME()*#MAKE# RL IF 0 THEN  START.TIMER = SYSTEM(12)*#MAKE# RL END  *  *PJS 07-09-15* BEGIN JBASE  *JBASE does not use catalog pointers, so just let it error out if the subroutine isn't cataloged!  *READ TST FROM F.MD, SUBNAME THEN    CALL PUT.SESSION.VAR("running_widget",WIDGET.NAME)    DT.STAMP = DATE():"*":TIME()    CALL PUT.SESSION.VAR("running_widget_dt",DT.STAMP)    CALL @SUBNAME    CALL PUT.SESSION.VAR("running_widget","")    CALL PUT.SESSION.VAR("running_widget_dt","")  *END ELSE    *W$TITLE = WIDGET.NAME:" (ERROR)"    *W$TYPE = "TEXT"    *W$TEXT.DATA = SUBNAME:" not cataloged."  *END  *PJS 07-09-15* END JBASE    *  * Special handling for drill-down to a state level on a USA Map  IF W$TYPE = "USAMAP" AND MAP.TYPE.SUFFIX # "" THEN    W$TYPE := ":":MAP.TYPE.SUFFIX  END*#MAKE# RL IF 0 THEN  G$WIDGET.CALL.DUR<1,VX> = SYSTEM(12) - START.TIMER*#MAKE# RL END  MATWRITE WIDGET.USER.DATA ON F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME  *  IF NOT(W$HIDDEN) THEN    *EXCEL* 6-27-16 DETERMINE IF W$TYPE CAN GENERATE EXCEL    BEGIN CASE       CASE W$EXCELABLE; NULL       CASE W$TYPE = 'TABLE'; W$EXCELABLE=1       CASE INDEX(W$TYPE,'COLUMN',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'LINE',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'BAR',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'AREA',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'PIE',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'DOUGHNUT',1); W$EXCELABLE=1       CASE 1; W$EXCELABLE=0    END CASE    *EXCEL* END OF 6-27-16    GOSUB MAKE.HTML    LOCATE WIDGET.NAME IN DB.WIDGETS<1> SETTING DB.DEFS.POS THEN      AREA = DB.WIDGET.AREA<1,DB.DEFS.POS>      IF NOT(AREA MATCHES "1N0N") THEN AREA = 1      IF AREA < 1 OR AREA > 5 THEN AREA = 1    END ELSE AREA = 1            TEMPLATE.AREA(AREA)<-1> = HTML.DIV  ENDNEXT VX*MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA,SESSION$ID:"$UG"MATWRITE W$WEBSERVICE.DATA ON F.MVDB.UDATA,SESSION$ID:"$WEBSERVICE"; *11-30-15** Send template**PDF* Use special inner template for PDF & iframesIF IFRAME.WIDGET.NAME # "" THEN  * iframe content just contains widget-generated HTML, no extra styles, script, etc.  TEMPLATE = "<!-- AREA1 --><!-- AREA2 --><!-- AREA3 --><!-- AREA4 --><!-- AREA5 -->"END ELSE  IF PDF.WIDGET.NAME # "" THEN    IF WIDGET.OWN.STYLE THEN      * Widget HTML has <head> tag - supplies its own styles      TEMPLATE = "<!-- AREA1 --><!-- AREA2 --><!-- AREA3 --><!-- AREA4 --><!-- AREA5 -->"    END ELSE      * PDF template has single <div> for all "areas"      READ TEMPLATE FROM F.WEB.FORMS, "pdf_inner_template" ELSE TEMPLATE = "pdf_inner_template not found."    END  END ELSE    * normal widget template with area for header, 3 columns & footer    READ TEMPLATE FROM F.WEB.FORMS, "db_inner_template" ELSE TEMPLATE = "db_inner_template not found."  ENDENDCALL SWAP(TEMPLATE,'<!-- column_style -->',"layout":DB.TEMPLATE)*FOR AX = 1 TO 5  CALL SWAP(TEMPLATE,"<!-- AREA":AX:" -->",TEMPLATE.AREA(AX))NEXT AX**PDF* Use special PDF html template for PDF outputIF IFRAME.WIDGET.NAME # "" THEN  * iframe content just contains widget-generated HTML, no extra styles, script, etc.  MAIN.TEMPLATE = "<!-- DASHBOARD -->"END ELSE  IF PDF.WIDGET.NAME # "" THEN    IF WIDGET.OWN.STYLE THEN      * Widget HTML has <head> tag - supplies its own styles      MAIN.TEMPLATE = "<!-- DASHBOARD -->"    END ELSE      * PDF template does not include print, refresh, header or footer      READ MAIN.TEMPLATE FROM F.WEB.FORMS, "pdftemplate" ELSE MAIN.TEMPLATE = "pdftemplate missing."    END  END ELSE    * normal dashboard template    READ MAIN.TEMPLATE FROM F.WEB.FORMS, "dbtemplate" ELSE MAIN.TEMPLATE = "dbtemplate missing."  ENDEND** Insert header stuffADMIN.HEADER = ""IF adminauth = 1 THEN  ADMIN.HEADER := '<li class="admin_tab"><a href="':CGI$PATH:'/MVDB.ADMIN">Admin Area</a></li>'ENDADMIN.HEADER := '<li class="admin_tab"><a href="':CGI$PATH:'/MVDB.MAIN?logout">Log Out</a></li>'HEADER = '<div id="dashboard_nav"><ol class="dashboard_list">'CALL SWAP(MAIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)*11-30-15*EXECUTE "SSELECT MVDB.DEFS BY DB.SORT" CAPTURING JUNKIF NOT(W$EMAILED.REPORT) AND NOT(W$WEBSERVICE) THEN EXECUTE "SSELECT MVDB.DEFS BY DB.SORT" CAPTURING JUNK; *11-30-15DB.LIST = ''LOOP  READNEXT ID ELSE EXIT  DB.LIST<-1> = IDREPEATDB.CNT = DCOUNT( DB.LIST, AM )FOR DBX = 1 TO DB.CNT  ID = DB.LIST<DBX>  MATREAD DB.ITEM FROM F.MVDB.DEFS, ID ELSE MAT DB.ITEM = ""  ADD.OK = TRUE  IF DB.USERS.ALLOWED = "ADMIN" THEN    IF NOT(adminauth) THEN ADD.OK = FALSE ;* This is only for authenticated admins  END ELSE IF DB.USERS.ALLOWED # "" THEN ;* Some user restrictions have been assigned     LOCATE userid IN DB.USERS.ALLOWED<1> SETTING POS ELSE ADD.OK = FALSE   END   IF ADD.OK = TRUE THEN    IF ID = G$CURRENT.DB THEN      HEADER := '<li class="db_active"><a href="':CGI$PATH:'/MVDB.MAIN?dbname=':ID:'">':ID:'</a></li>'    END ELSE      HEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN?dbname=':ID:'">':ID:'</a></li>'    END    HEADER := CHAR(10)  ENDNEXT DBXHEADER := ADMIN.HEADERHEADER := '</ol></div>'IF THEME.CSS # '' THEN THEME.CSS = '<link rel="Stylesheet" href="/db/themes/':THEME.CSS:'" media="screen" type="text/css" />'CALL SWAP(MAIN.TEMPLATE,'<!-- HEADER -->',HEADER)CALL SWAP(MAIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)CALL SWAP(MAIN.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)* Insert footer stuffFOOTER = ''*01-25-16*IF G$DRILLDOWN.MODE THEN*4-25-16*IF G$DRILLDOWN.MODE AND NOT(W$WEBSERVICE) THEN; *01-25-16*4-25-16*  IF G$DD.FROM.DB # "" THEN*4-25-16*    URLENCODE.STRING = G$DD.FROM.DB*4-25-16*    GOSUB URL.ENCODE*4-25-16*    DB.URL = NEW.STRING*4-25-16*    FOOTER = '<a href="/dbc/MVDB.MAIN?dbname=':DB.URL:'">Go Back</a><br />'*4-25-16*  END*4-25-16*END*9-23-16***9-23-16*** 4-25-16 NEW SUPPORT FOR ALLOWING BACKUP*9-23-16***9-23-16*IF DRILLDOWN.STACK<2> <> '' THEN*9-23-16*   FOOTER='<a href="/dbc/MVDB.MAIN?dbname=go_back">Go Back</a><br />'*9-23-16* END*9-23-16** END OF 4-25-16IF WATERMARK # '' THEN  FOOTER := WATERMARK:'<br/>'ENDCALL SWAP(MAIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)*CALL GET.SESSION.VAR(G$CURRENT.DB:"!refresh",REFRESH.RATE)REFRESH = ""IF REFRESH.RATE # '' THEN  RATES = "1":VM:"2":VM:"3":VM:"4":VM:"5":VM:"6":VM:"7":VM:"8":VM:"9"  RATES<2> = "15":VM:"30":VM:"60":VM:"120":VM:"300":VM:"600":VM:"900":VM:"1800":VM:"3600"  LOCATE REFRESH.RATE IN RATES<1> SETTING RPOS THEN    REFRESH = "<meta http-equiv='refresh' content='":RATES<2,RPOS>:"'>"  ENDEND*IF SITE$REFRESH = 'Y' THEN  READ REFRESH.SLIDER FROM F.WEB.FORMS, 'RefreshSlider' ELSE REFRESH.SLIDER=''  CALL SWAP(MAIN.TEMPLATE,'<!-- RefreshSlider -->',REFRESH.SLIDER)  CALL SWAP(MAIN.TEMPLATE,'<!-- REFRESH_RATE -->',REFRESH.RATE)  CALL SWAP(MAIN.TEMPLATE,'<!-- REFRESH -->',REFRESH)  READ TRACK FROM F.WEB.FORMS, 'outerTrackWrapper' ELSE TRACK = ''  CALL SWAP(MAIN.TEMPLATE,'<!-- outerTrackWrapper -->',TRACK)  ENDCALL SWAP(MAIN.TEMPLATE,'<!-- DASHBOARD -->',TEMPLATE)**PDF* Generate the PDF from HTML in MAIN.TEMPLATEIF PDF$ENABLED AND W$PDFABLE AND PDF.WIDGET.NAME # "" THEN  CALL SUB.PDF.FUNC('generate', MAIN.TEMPLATE)  MAIN.TEMPLATE = ''END*EXCEL* Generate the EXCEL from HTML in MAIN.TEMPLATE* 6-27-16  *EXCEL*IF W$EXCELABLE AND EXCEL.WIDGET.NAME # "" THEN  CALL SUB.EXCEL.FUNC('generate', MAIN.TEMPLATE,EXCEL.WIDGET.NAME)END* END OF 6-27-16 *EXCEL***** 9-23-16 NEW DRILLDOWN AND BACKUP LOGIC REQUIRES SAVING GLOBAL.USER.DATA**         AT COMPLETION OF PROCESS**READ DD.STACK FROM F.MVDB.UDATA, SESSION$ID:'$DD.STACK' ELSE DD.STACK=''*DD.LEVEL=DCOUNT(DD.STACK,AM)*IF NOT(DD.LEVEL) THEN DD.LEVEL=1*MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA, SESSION$ID:'$DD.':DD.LEVEL:'.GUD'*MATWRITE WIDGET.USER.DATA ON F.MVDB.UDATA, SESSION$ID:'$':WIDGET.NAME:'$DD.':DD.LEVEL:'.WUD'; * 9-23-16*CALL WEB.SEND(MAIN.TEMPLATE)GLOBAL.INFO(100) = 1 ;* Process completed successfullySTOP*MAKE.HTML: **HTML = ''MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, W$TYPE ELSE MAT WIDGET.TYPES = ""WIDGET.OWN.STYLE = FALSE ;*PDF* set to TRUE if widget-generated HTML includes <head> tag*BEGIN CASE  CASE WT$GROUP = "LC" OR WT$GROUP = "BAR"    IF WT$GROUP = "BAR" THEN CHART.TYPE = "BAR" ELSE      CHART.TYPE = "FCLINECOL"      MULTI.SERIES = (WT$HANDLER = "M")    END    CALL XML.ENCODE(W$BAR.VALUES,"")    CALL XML.ENCODE(W$BAR.LABELS,"")    CALL XML.ENCODE(W$BAR.XLABELS,"")    CALL XML.ENCODE(W$BAR.XMEMO,"")    CALL XML.ENCODE(W$BAR.YMEMO,"")    CALL XML.ENCODE(W$BAR.CAPTION,"")    *1-26-15* W$PRINTABLE = 0  CASE WT$GROUP = "PIE"    CHART.TYPE = WT$HANDLER    CALL XML.ENCODE(W$PIE.LABELS,"")    CALL XML.ENCODE(W$PIE.VALUES,"")    CALL XML.ENCODE(W$PIE.CAPTION,"")    *1-26-15* W$PRINTABLE = 0  CASE WT$GROUP = "FW"    CHART.TYPE = WT$HANDLER    FW.NAME = WT$SWF    CALL XML.ENCODE(W$FW.LOWER.LIMIT.LABEL,"")    CALL XML.ENCODE(W$FW.UPPER.LIMIT.LABEL,"")    CALL XML.ENCODE(W$FW.CAPTION,"")    CALL XML.ENCODE(W$FW.SUBCAPTION,"")    CALL XML.ENCODE(W$FW.TRENDPOINT.LABELS,"")    *1-26-15* W$PRINTABLE = 0  CASE FIELD(W$TYPE,':',1) = "MAP"    CHART.TYPE = "MAP"    CHART.TYPE<2> = FIELD( W$TYPE,':',2)    *1-26-15* W$PRINTABLE = 0  CASE W$TYPE = "USAMAP"    CHART.TYPE = "MAP"    CHART.TYPE<2> = "USA"    *1-26-15* W$PRINTABLE = 0  CASE 1    CHART.TYPE = W$TYPEEND CASE*CHK.VAL = OCONV("123456","MD2$,")CURRENCY = CHK.VAL[1,1]THOUSAND = CHK.VAL[3,1]DECIMAL = CHK.VAL[7,1]**Make sure values are in the correct format for fusion charts*All the positions in WIDGET.INFO we're going to modifyCONV.POS.LIST = 41:AM:44:AM:45:AM:63:AM:73:AM:75:AM:61:AM:62:AMCONV.POS.LIST := 64:AM:54:AM:58:AM:59:AM:11:AM:17:AM:18:AM:66CONV.POS.LIST.LEN = DCOUNT(CONV.POS.LIST,AM)FOR CONV.POS = 1 TO CONV.POS.LIST.LEN  THIS.VAL = WIDGET.INFO(CONV.POS.LIST<CONV.POS>)  IF THIS.VAL # '' THEN    AM.CNT = DCOUNT(THIS.VAL,AM)    FOR ON.AM = 1 TO AM.CNT      VM.CNT = DCOUNT(THIS.VAL<ON.AM>,VM)      FOR ON.VM = 1 TO VM.CNT        SVM.CNT = DCOUNT(THIS.VAL<ON.AM,ON.VM>,SVM)        FOR ON.SVM = 1 TO SVM.CNT          CONV.VAL = THIS.VAL<ON.AM,ON.VM,ON.SVM>          IF OCONV(CONV.VAL,"MCN") # CONV.VAL THEN ;*output formatted            *Convert decimal to . and strip thousand separator            CONVERT DECIMAL:THOUSAND TO '.' IN CONV.VAL            THIS.VAL<ON.AM,ON.VM,ON.SVM> = CONV.VAL          END        NEXT ON.SVM      NEXT ON.VM    NEXT ON.AM    WIDGET.INFO(CONV.POS.LIST<CONV.POS>) = THIS.VAL  ENDNEXT CONV.POS*UPDATE.OPTS = W$CHART.OPTIONSOPTS.DELIM = AMGOSUB OPTS.UPDATEW$CHART.OPTIONS = UPDATE.OPTS*CONVERT '"' TO "'" IN W$FW.METER.VALUE.OPTSCONVERT '"' TO "'" IN W$FW.METER.TARGET.OPTSCONVERT '"' TO "'" IN W$FW.VALUE.OPTSCONVERT '"' TO "'" IN W$PIE.VALUE.OPTSCONVERT '"' TO "'" IN W$BAR.VALUE.OPTSCONVERT '"' TO "'" IN W$BAR.LABEL.OPTSCONVERT '"' TO "'" IN W$BAR.TREND.OPTSCONVERT '"' TO "'" IN W$BAR.XLABEL.OPTSCONVERT '"' TO "'" IN W$MAP.VALUE.OPTSCONVERT '"' TO "'" IN W$MAP.RANGE.OPTSCONVERT '"' TO "'" IN W$FW.SPARK.TREND.OPTSCONVERT '"' TO "'" IN W$FW.DIAL.OPTSCONVERT '"' TO "'" IN W$FW.TRENDPOINT.OPTS*CONVERT @VM TO " " IN W$FW.METER.TARGET.OPTSCONVERT @VM TO " " IN W$BAR.LABEL.OPTS*CONVERT @AM TO " " IN W$FW.METER.TARGET.OPTS** Set up default widget dimensions*  BEGIN CASE    CASE W$WIDTH = 1 AND DB.TEMPLATE = 3      *CHART.WIDTH = 220      *CHART.HEIGHT = 180      CHART.WIDTH = 260      CHART.HEIGHT = 240    CASE W$WIDTH = 1      *CHART.WIDTH = 220      *CHART.HEIGHT = 180      CHART.WIDTH = 300      CHART.HEIGHT = 270    CASE W$WIDTH = 2      *CHART.WIDTH = 400      *CHART.HEIGHT = 280      CHART.WIDTH = 520      CHART.HEIGHT = 350    CASE W$WIDTH = 3 OR 1      *CHART.WIDTH = 600      *CHART.HEIGHT = 400      CHART.WIDTH = 800      CHART.HEIGHT = 530  END CASE**DEBUG='CHART.TYPE=':CHART.TYPE*DEBUG<-1>='FUSION.WIDGETS.ENABLED=':FUSION.WIDGETS.ENABLED*TEMP.VARS=CGI$VARS; CONVERT CHAR(254) TO CHAR(253) IN TEMP.VARS*DEBUG<-1>='VARS=':TEMP.VARS*TEMP.VALS=CGI$VALS; CONVERT CHAR(254) TO CHAR(253) IN TEMP.VALS*DEBUG<-1>='VALS=':TEMP.VALS*WRITE DEBUG ON F.WEB.SESSION, 'DEBUG.TEST'*  BEGIN CASE    CASE CHART.TYPE[1,2] = "FW" AND FUSION.WIDGETS.ENABLED = 0 OR (CHART.TYPE<1> = "MAP" OR FIELD(W$TYPE,':',1) = "USAMAP" AND MAPS.ENABLED = 0)      W$TEXT.DATA = "Widget type ":W$TYPE<1>:" is not enabled."      W$TYPE = "TEXT"      W$INPUT.PROMPT = ""      W$LINK.LABEL = ""      W$LINK.ICON = ""      W$LINK.ICON.TXT = ""      W$LINK.LOCATION = ""      W$LINK.URL = ""      W$LINK.UD.POS = ""      W$LINK.UD.VAL = ""      W$LINK.DD.WIDGET = ""      W$LINK.URL.OPTS = ""      W$PRINTABLE = 0      W$HIDDEN = 0      HTML = '<pre>'      HTML<-1> = W$TEXT.DATA      HTML<-1> = '</pre>'    CASE CHART.TYPE = "FWGAUGE"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 260          *CHART.HEIGHT = 130          CHART.WIDTH = 260          CHART.HEIGHT = 240        CASE W$WIDTH = 1          *CHART.WIDTH = 260          *CHART.HEIGHT = 130          CHART.WIDTH = 300          CHART.HEIGHT = 270        CASE W$WIDTH = 2          *CHART.WIDTH = 400          *CHART.HEIGHT = 200          CHART.WIDTH = 520          CHART.HEIGHT = 270        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 750          *CHART.HEIGHT = 280          CHART.WIDTH = 1015          CHART.HEIGHT = 410      END CASE      *IF W$TYPE = "HLINEARGAUGE" OR W$TYPE = "HLED" THEN CHART.HEIGHT = 80      *IF W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" THEN CHART.WIDTH = 110 ; CHART.HEIGHT = 280      *IF W$TYPE = "CYLINDER" THEN CHART.WIDTH = 140      *IF W$TYPE = "BULB" THEN CHART.WIDTH = 110 ; CHART.HEIGHT = 130      IF W$TYPE = "HLINEARGAUGE" OR W$TYPE = "HLED" THEN CHART.HEIGHT = 80      IF W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" THEN CHART.WIDTH = 110      IF W$TYPE = "CYLINDER" THEN CHART.WIDTH = 140      IF W$TYPE = "BULB" THEN CHART.WIDTH = 110 ; CHART.HEIGHT = 130      IF W$TYPE = "ANGULARGAUGE" THEN        BEGIN CASE          CASE W$WIDTH = 1            CHART.HEIGHT = 130          CASE W$WIDTH = 2            CHART.HEIGHT = 200        END CASE      END      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML*      GOSUB TICKMARK.OPTIONS ;* Add chart options to support tickmarks*      IF W$TYPE = "THERMOMETER" AND W$FW.THERMOMETER.COLOR # "" THEN        LOCATE W$FW.THERMOMETER.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          W$FW.THERMOMETER.COLOR = NAME.COLOR<2,CPOS>        END        W$CHART.OPTIONS<-1> = "gaugeFillColor='":W$FW.THERMOMETER.COLOR:"'"      END* LJB 7-10-10 Removed DD restriction for angular and linear gauge charts. Not sure why it* was here in the first place*    IF W$TYPE = "HLED" OR W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" OR W$TYPE = "CYLINDER" OR W$TYPE = "BULB" THEN      IF W$FW.DD.WIDGET # "" THEN        FW.WIDGET.POS = 1        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          W$CHART.OPTIONS<-1> = " clickURL='":NEW.STRING:"'"        END      END*    END      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END*      PDATA = '<colorRange>'      COLOR.RANGE.OPTS = W$FW.COLOR.RANGE<4>      CONVERT '"' TO "'" IN COLOR.RANGE.OPTS      FOR PX = 1 TO DCOUNT( W$FW.COLOR.RANGE<1>, VM )        USE.COLOR = W$FW.COLOR.RANGE<3,PX>        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = "#FFFFFF" ;* White        END        CONVERT "#" TO "" IN USE.COLOR        UPDATE.OPTS = COLOR.RANGE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        COLOR.RANGE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<color minValue='":W$FW.COLOR.RANGE<1,PX>:"' maxValue='":W$FW.COLOR.RANGE<2,PX>:"' code='":USE.COLOR:"' ":COLOR.RANGE.OPTS<1,PX>:" />"      NEXT PX      PDATA := '</colorRange>'      METER.STYLE = 0      IF W$TYPE = "HLED" OR W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" OR W$TYPE = "CYLINDER" OR W$TYPE = "BULB" THEN        PDATA := '[METER_VALUE]'        METER.STYLE = 1      END ELSE        IF W$TYPE = "ANGULARGAUGE" THEN          PDATA := '<dials>'          DNODE = "dial"        END ELSE          PDATA := '<pointers>'          DNODE = 'pointer'        END        FOR PX = 1 TO DCOUNT( W$FW.DIAL.VALUES<1>, VM )          UPDATE.OPTS = W$FW.DIAL.OPTS<1,PX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.DIAL.OPTS<1,PX> = UPDATE.OPTS          PDATA := "<":DNODE:" value='":W$FW.DIAL.VALUES<1,PX>:"' ":W$FW.DIAL.OPTS<1,PX>          FW.WIDGET.POS = PX          GOSUB MAKE.FW.DD.URL          IF URL # "" THEN            URLENCODE.STRING = URL            GOSUB URL.ENCODE ;* Encode the entire URL            PDATA := " link='":NEW.STRING:"'"          END          PDATA := " />"        NEXT PX        PDATA := '</':DNODE:'s>'        PDATA := '<trendpoints>'        FOR PX = 1 TO DCOUNT( W$FW.TRENDPOINT.VALUES<1>, VM )          UPDATE.OPTS = W$FW.TRENDPOINT.OPTS<1,PX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.TRENDPOINT.OPTS<1,PX> = UPDATE.OPTS          PDATA := "<point startValue='":W$FW.TRENDPOINT.VALUES<1,PX>:"' "          IF W$FW.TRENDPOINT.VALUES<2,PX> # "" THEN PDATA := "endValue='":W$FW.TRENDPOINT.VALUES<2,PX>:"' "          PDATA := "displayValue='":W$FW.TRENDPOINT.LABELS<1,PX>:"' ":W$FW.TRENDPOINT.OPTS<1,PX>:" />"        NEXT PX        PDATA := '</trendpoints>'      END      CALL SWAP(SXML,'[CHART.PALETTE]',W$FW.CHART.PALETTE)      CALL SWAP(SXML,'[UPPER.LIMIT]',W$FW.UPPER.LIMIT)      CALL SWAP(SXML,'[LOWER.LIMIT]',W$FW.LOWER.LIMIT)      CALL SWAP(SXML,'[UPPER.LIMIT.DISPLAY]',W$FW.UPPER.LIMIT.LABEL)      CALL SWAP(SXML,'[LOWER.LIMIT.DISPLAY]',W$FW.LOWER.LIMIT.LABEL)      CALL SWAP(SXML,'[NUMBER.PREFIX]',W$FW.NUMBER.PREFIX)      CALL SWAP(SXML,'[NUMBER.SUFFIX]',W$FW.NUMBER.SUFFIX)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)*      IF METER.STYLE THEN        HTML = ''        MASTER.SXML = SXML        MASTER.PDATA = PDATA        MASTER.FW.TEMPLATE = FW.TEMPLATE        VAL.CNT = DCOUNT( W$FW.METER.VALUE<1>, @VM )        FOR MVX = 1 TO VAL.CNT          UPDATE.OPTS = W$FW.METER.VALUE.OPTS<1,MVX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.METER.VALUE.OPTS<1,MVX> = UPDATE.OPTS          VALDATA = '<value ':W$FW.METER.VALUE.OPTS<1,MVX>' >':W$FW.METER.VALUE<1,MVX>:'</value>'          CALL SWAP(PDATA,'[METER_VALUE]',VALDATA)          CALL SWAP(SXML,'[CHART.DATA]',PDATA)          CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX:'_':MVX)          CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)          HTML := FW.TEMPLATE          SXML = MASTER.SXML          PDATA = MASTER.PDATA          FW.TEMPLATE = MASTER.FW.TEMPLATE        NEXT MVX*        IF VAL.CNT > 1 THEN          IF W$TYPE = "FWBULB" THEN            SHRINK.MLT = 1            FOR NN = 2 TO VAL.CNT              SHRINK.MLT -= .2            NEXT NN            IF SHRINK.MLT < .25 THEN SHRINK.MLT = .25            CHART.WIDTH = INT( CHART.WIDTH * SHRINK.MLT )            CHART.HEIGHT = INT( CHART.WIDTH * SHRINK.MLT )          END        END      END ELSE        CALL SWAP(SXML,'[CHART.DATA]',PDATA)        CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)        CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)        HTML = FW.TEMPLATE      END    CASE CHART.TYPE = "FWBULLET"      IF W$TYPE = "HBULLET" THEN        BEGIN CASE          CASE W$WIDTH = 1 AND DB.TEMPLATE = 3            *HART.WIDTH = 220            *HART.HEIGHT = 60            CHART.WIDTH = 260            CHART.HEIGHT = 60          CASE W$WIDTH = 1            *CHART.WIDTH = 220            *CHART.HEIGHT = 60            CHART.WIDTH = 300            CHART.HEIGHT = 60          CASE W$WIDTH = 2            *CHART.WIDTH = 400            *CHART.HEIGHT = 60            CHART.WIDTH = 520            CHART.HEIGHT = 60          CASE W$WIDTH = 3 OR 1            *CHART.WIDTH = 750            *CHART.HEIGHT = 60            CHART.WIDTH = 1015            CHART.HEIGHT = 60        END CASE      END ELSE        BEGIN CASE          CASE W$WIDTH = 1 AND DB.TEMPLATE = 3            *CHART.WIDTH = 110            *CHART.HEIGHT = 180            CHART.WIDTH = 110            CHART.HEIGHT = 240          CASE W$WIDTH = 1            *CHART.WIDTH = 110            *CHART.HEIGHT = 180            CHART.WIDTH = 110            CHART.HEIGHT = 270          CASE W$WIDTH = 2            *CHART.WIDTH = 110            *CHART.HEIGHT = 280            CHART.WIDTH = 110            CHART.HEIGHT = 300          CASE W$WIDTH = 3 OR 1            *CHART.WIDTH = 110            *CHART.HEIGHT = 400            CHART.WIDTH = 110            CHART.HEIGHT = 410        END CASE      END      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML*      GOSUB TICKMARK.OPTIONS ;* Add chart options to support tickmarks*      IF W$FW.BC.PLOT.COLOR # "" THEN        USE.COLOR = W$FW.BC.PLOT.COLOR        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = ""        END        IF USE.COLOR # "" THEN W$CHART.OPTIONS<-1> = "plotFillColor='":USE.COLOR:'"'      END      IF W$FW.BC.TARGET.COLOR # "" THEN        USE.COLOR = W$FW.BC.TARGET.COLOR        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = ""        END        IF USE.COLOR # "" THEN W$CHART.OPTIONS<-1> = "targetColor='":USE.COLOR:'"'      END*      IF W$FW.DD.WIDGET # "" THEN        FW.WIDGET.POS = 1        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          W$CHART.OPTIONS<-1> = " clickURL='":NEW.STRING:"'"        END      END*      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END*      PDATA = '<colorRange>'      COLOR.RANGE.OPTS = W$FW.COLOR.RANGE<4>      UPDATE.OPTS = COLOR.RANGE.OPTS      OPTS.DELIM = ' '      GOSUB OPTS.UPDATE      COLOR.RANGE.OPTS = UPDATE.OPTS      FOR PX = 1 TO DCOUNT( W$FW.COLOR.RANGE<1>, VM )        USE.COLOR = W$FW.COLOR.RANGE<3,PX>        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = "#FFFFFF" ;* White        END        PDATA := "<color minValue='":W$FW.COLOR.RANGE<1,PX>:"' maxValue='":W$FW.COLOR.RANGE<2,PX>:"' code='":USE.COLOR:"' ":COLOR.RANGE.OPTS<1,PX>:" />"      NEXT PX      PDATA := '</colorRange>'      PDATA := '<value ':W$FW.METER.VALUE.OPTS:' >':W$FW.METER.VALUE:'</value>'      PDATA := '<target ':W$FW.METER.TARGET.OPTS:' >':W$FW.METER.TARGET:'</target>'      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CAPTION]',W$FW.CAPTION)      CALL SWAP(SXML,'[SUBCAPTION]',W$FW.SUBCAPTION)      CALL SWAP(SXML,'[CHART.PALETTE]',W$FW.CHART.PALETTE)      CALL SWAP(SXML,'[UPPER.LIMIT]',W$FW.UPPER.LIMIT)      CALL SWAP(SXML,'[LOWER.LIMIT]',W$FW.LOWER.LIMIT)      CALL SWAP(SXML,'[NUMBER.PREFIX]',W$FW.NUMBER.PREFIX)      CALL SWAP(SXML,'[NUMBER.SUFFIX]',W$FW.NUMBER.SUFFIX)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = FW.TEMPLATE    CASE CHART.TYPE = "FWSPARK"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 220          *CHART.HEIGHT = 40          CHART.WIDTH = 260          CHART.HEIGHT = 40        CASE W$WIDTH = 1          *CHART.WIDTH = 220          *CHART.HEIGHT = 40          CHART.WIDTH = 300          CHART.HEIGHT = 40        CASE W$WIDTH = 2          *CHART.WIDTH = 400          *CHART.HEIGHT = 40          CHART.WIDTH = 520          CHART.HEIGHT = 40        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 750          *CHART.HEIGHT = 40          CHART.WIDTH = 1015          CHART.HEIGHT = 40      END CASE      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML*      IF W$FW.DD.WIDGET # "" THEN        FW.WIDGET.POS = 1        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          W$CHART.OPTIONS<-1> = " clickURL='":NEW.STRING:"'"        END      END      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END*      PDATA = '<dataset>'      FOR PX = 1 TO DCOUNT( W$FW.VALUES<1>, VM )        UPDATE.OPTS = W$FW.VALUE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        W$FW.VALUE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<set value='":W$FW.VALUES<1,PX>:"' ":W$FW.VALUE.OPTS<1,PX>:" />"      NEXT PX      PDATA := '</dataset>'      IF W$FW.SPARK.TREND.BEG # "" THEN        PDATA := '<trendlines>'        FOR TLX = 1 TO DCOUNT( W$FW.SPARK.TREND.BEG, VM )          UPDATE.OPTS = W$FW.SPARK.TREND.OPTS<1,TLX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.SPARK.TREND.OPTS<1,TLX> = UPDATE.OPTS          PDATA := "<line startValue='":W$FW.SPARK.TREND.BEG<1,TLX>:"' endValue='":W$FW.SPARK.TREND.END<1,TLX>:"' ":W$FW.SPARK.TREND.OPTS<1,TLX>:" />"        NEXT TLX        PDATA := '</trendlines>'      END      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CAPTION]',W$FW.CAPTION)      CALL SWAP(SXML,'[SUBCAPTION]',W$FW.SUBCAPTION)      CALL SWAP(SXML,'[CHART.PALETTE]',W$FW.CHART.PALETTE)      CALL SWAP(SXML,'[UPPER.LIMIT]',W$FW.UPPER.LIMIT)      CALL SWAP(SXML,'[LOWER.LIMIT]',W$FW.LOWER.LIMIT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = FW.TEMPLATE    CASE CHART.TYPE = "FWFP"      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END      COLOR.LIST = W$FW.COLORS      GOSUB APPLY.COLOR.OPTS*      PDATA = ''      FOR PX = 1 TO DCOUNT( W$FW.LABELS<1>, VM )        UPDATE.OPTS = W$FW.VALUE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        W$FW.VALUE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<set label='":W$FW.LABELS<1,PX>:"' value='":W$FW.VALUES<1,PX>:"' color='":COLOR.ARRAY<1,PX>:"' ":W$FW.VALUE.OPTS<1,PX>        FW.WIDGET.POS = PX        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          PDATA := " link='":NEW.STRING:"'"        END        PDATA := " />"      NEXT PX      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CAPTION]',W$FW.CAPTION)      CALL SWAP(SXML,'[SUBCAPTION]',W$FW.SUBCAPTION)      CALL SWAP(SXML,'[NUMBER.PREFIX]',W$FW.NUMBER.PREFIX)      CALL SWAP(SXML,'[NUMBER.SUFFIX]',W$FW.NUMBER.SUFFIX)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = FW.TEMPLATE    CASE CHART.TYPE = "FCPIE"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 260          CHART.HEIGHT = 240        CASE W$WIDTH = 1          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 300          CHART.HEIGHT = 270        CASE W$WIDTH = 2          *CHART.WIDTH = 420          *CHART.HEIGHT = 240          CHART.WIDTH = 520          CHART.HEIGHT = 365        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 730          *CHART.HEIGHT = 320          CHART.WIDTH = 800          CHART.HEIGHT = 550      END CASE      PT.NAME = WT$SWF      PS.NAME = W$TYPE:".SETTINGS"      IF W$CHART.HEIGHT # "" THEN CHART.HEIGHT = W$CHART.HEIGHT      IF W$TYPE = "FC3DPIE" THEN        CHART.HEIGHT = INT(CHART.HEIGHT*.75)      END      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ PIE.TEMPLATE FROM F.WEB.FORMS, "FCF_template.html" ELSE PIE.TEMPLATE = "FCF_template.html not found"      PT.NAME = OCONV(PT.NAME,'MCL')      CALL SWAP(PIE.TEMPLATE,'[FCF_MODULE]',PT.NAME)*      READ SXML FROM F.MVDB.CONTROL, PS.NAME ELSE SXML = ''      CONVERT AM TO "" IN SXML      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'graph'        GOSUB APPLY.XML.OPTS      END      COLOR.LIST = W$PIE.COLORS      GOSUB APPLY.COLOR.OPTS      PDATA = ''      FOR PX = 1 TO DCOUNT( W$PIE.LABELS<1>, VM )        UPDATE.OPTS = W$PIE.VALUE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        W$PIE.VALUE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<set label='":W$PIE.LABELS<1,PX>:"' color='":COLOR.ARRAY<1,PX>:"' ":W$PIE.VALUE.OPTS<1,PX>:" value='":W$PIE.VALUES<1,PX>:"'"        FW.WIDGET.POS = PX        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          PDATA := " link='":NEW.STRING:"'"        END        PDATA := ' />'      NEXT PX      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CHART.TITLE]',W$PIE.CAPTION)      RADIUS = INT(CHART.WIDTH/2)-INT(CHART.WIDTH*.15)      CALL SWAP(SXML,'[RADIUS]',RADIUS)      CALL SWAP(PIE.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(PIE.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(PIE.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(PIE.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = PIE.TEMPLATE    CASE CHART.TYPE = "FCLINECOL"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 260          CHART.HEIGHT = 240        CASE W$WIDTH = 1          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 300          CHART.HEIGHT = 270        CASE W$WIDTH = 2          *CHART.WIDTH = 420          *CHART.HEIGHT = 240          CHART.WIDTH = 520          CHART.HEIGHT = 300        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 730          *CHART.HEIGHT = 320          CHART.WIDTH = 1015          CHART.HEIGHT = 425      END CASE      IF W$CHART.HEIGHT # "" THEN CHART.HEIGHT = W$CHART.HEIGHT      BT.NAME = WT$SWF      BS.NAME = W$TYPE:".SETTINGS"      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      COLOR.LIST = W$BAR.COLORS      GOSUB APPLY.COLOR.OPTS*      READ BAR.TEMPLATE FROM F.WEB.FORMS, "FCF_template.html" ELSE BAR.TEMPLATE = "FCF_template.html not found"      BT.NAME = OCONV(BT.NAME,'MCL')      CALL SWAP(BAR.TEMPLATE,'[FCF_MODULE]',BT.NAME)*      READ SXML FROM F.MVDB.CONTROL, BS.NAME ELSE SXML = ''      CONVERT AM TO "" IN SXML      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'graph'        GOSUB APPLY.XML.OPTS      END      PDATA = ''      IF MULTI.SERIES THEN        PDATA := '<categories>'        FOR PX = 1 TO DCOUNT( W$BAR.XLABELS<1>, VM )          PDATA := "<category label='":W$BAR.XLABELS<1,PX>:"' ":W$BAR.XLABEL.OPTS<1,PX>:" />"        NEXT PX        PDATA := '</categories>'        FOR PX = 1 TO DCOUNT( W$BAR.LABELS,AM)          PDATA := "<dataset seriesname='":W$BAR.LABELS<PX>:"' color='":COLOR.ARRAY<1,PX>:"' ":W$BAR.LABEL.OPTS<PX>:" >"          FOR PXV = 1 TO DCOUNT( W$BAR.VALUES<PX>,VM)            UPDATE.OPTS = W$BAR.VALUE.OPTS<PX,PXV>            OPTS.DELIM = ' '            GOSUB OPTS.UPDATE            W$BAR.VALUE.OPTS<PX,PXV> = UPDATE.OPTS            MS.VALUE=W$BAR.VALUES<PX,PXV>;  *ZUMASYS 1-5-15            MS.LABEL=W$BAR.XLABELS<1,PXV>; *ZUMASYS 1-5-15* 7-29-15 CHANGE ANY &lt;br&gt;'s to spaces            LOOP              BR.POS=INDEX(MS.LABEL,'&lt;br&gt;',1)            UNTIL NOT(BR.POS) DO              MS.LABEL=MS.LABEL[1,BR.POS-1]:' ':(MS.LABEL[BR.POS+10,9999])            REPEAT* END OF 7-29-15            MS.SERIES=W$BAR.LABELS<PX>;    *ZUMASYS 3-15-15*ZUMASYS 1-5-15*          PDATA := "<set value='":W$BAR.VALUES<PX,PXV>:"' ":W$BAR.VALUE.OPTS<PX,PXV>            PDATA := "<set value='":MS.VALUE:"' ":W$BAR.VALUE.OPTS<PX,PXV>; *ZUMASYS 1-5-15            FW.WIDGET.POS = PX            GOSUB MAKE.FW.DD.URL            IF URL # "" THEN              URLENCODE.STRING = URL              GOSUB URL.ENCODE ;* Encode the entire URL              PDATA := " link='":NEW.STRING:"'"            END            PDATA := ' />'          NEXT PXV          PDATA := '</dataset>'        NEXT PX      END ELSE        FOR PX = 1 TO DCOUNT( W$BAR.XLABELS<1>, VM )          IF INDEX(W$BAR.VALUES<1,PX>,'-',1) THEN            SIGN.MINUS = 1          END ELSE SIGN.MINUS = 0* 3-4-15 ZUMASYS - SUPPORT DECIMALS IN BAR.VALUES          THIS.BAR.VALUES=W$BAR.VALUES<1,PX>          IF INDEX(THIS.BAR.VALUES,'.',1) THEN            THIS.BAR.VALUES.1=OCONV(FIELD(THIS.BAR.VALUES,'.',1),'MCN')            THIS.BAR.VALUES.2=OCONV(FIELD(THIS.BAR.VALUES,'.',2),'MCN')            W$BAR.VALUES<1,PX>=THIS.BAR.VALUES.1:'.':THIS.BAR.VALUES.2          END ELSE            W$BAR.VALUES<1,PX> = OCONV(THIS.BAR.VALUES, 'MCN' )          END* END OF 3-4-15 ZUMASYS          IF SIGN.MINUS THEN W$BAR.VALUES<1,PX> = '-':W$BAR.VALUES<1,PX>          PDATA := "<set label='":W$BAR.XLABELS<1,PX>:"' value='":W$BAR.VALUES<1,PX>+0:"' "          IF NOT(INDEX(W$BAR.VALUE.OPTS<1,PX>,'color=',1)) THEN* Color setting is not being overridden by the W$BAR.VALUE.OPTS info            PDATA := "color='":COLOR.ARRAY<1,1>:"' "          END          UPDATE.OPTS = W$BAR.VALUE.OPTS<1,PX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$BAR.VALUE.OPTS<1,PX> = UPDATE.OPTS          PDATA := ' ':W$BAR.VALUE.OPTS<1,PX>          FW.WIDGET.POS = PX          GOSUB MAKE.FW.DD.URL          IF URL # "" THEN            URLENCODE.STRING = URL            GOSUB URL.ENCODE ;* Encode the entire URL            PDATA := " link='":NEW.STRING:"'"          END          PDATA := ' />'        NEXT PX      END      IF W$BAR.TREND.BEG # "" THEN        PDATA := '<trendLines>'        FOR TLX = 1 TO DCOUNT( W$BAR.TREND.BEG<1>, VM )          PDATA := "<line startValue='":W$BAR.TREND.BEG<1,TLX>:"' "          IF W$BAR.TREND.END<1,TLX> # "" THEN PDATA := "endValue='":W$BAR.TREND.END<1,TLX>:"' "          UPDATE.OPTS = W$BAR.TREND.OPTS<1,TLX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$BAR.TREND.OPTS<1,TLX> = UPDATE.OPTS          PDATA := W$BAR.TREND.OPTS<1,TLX>          PDATA := " />"        NEXT TLX        PDATA := '</trendLines>'      END      CONVERT '"' TO "'" IN PDATA      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CHART.TITLE]',W$BAR.CAPTION)      CALL SWAP(SXML,'[YMEMO]',W$BAR.YMEMO<1>)      CALL SWAP(SXML,'[XMEMO]',W$BAR.XMEMO<1>)      CALL SWAP(BAR.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(BAR.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(BAR.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(BAR.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = BAR.TEMPLATE    CASE CHART.TYPE<1> = "MAP" OR FIELD(W$TYPE,':',1) = "USAMAP"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          NULL        CASE W$WIDTH = 1          NULL        CASE W$WIDTH = 2          *CHART.WIDTH = 420          *CHART.HEIGHT = 240          CHART.WIDTH = 520          CHART.HEIGHT = 300        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 730          *CHART.HEIGHT = 320          CHART.WIDTH = 1015          CHART.HEIGHT = 425      END CASE      IF W$CHART.HEIGHT # "" THEN CHART.HEIGHT = W$CHART.HEIGHT      CALL XML.ENCODE(W$MAP.RANGE.NAME,"")      IF FIELD(W$TYPE,':',1) = "USAMAP" THEN        STATE.MAP = FIELD( W$TYPE,':',2)        IF STATE.MAP # "" THEN* This is a drill-down to a specific state detail. We need to match the* map name with the selected state.* selected state.          READ STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ""          CONVERT "," TO @VM IN STATE.NAMES          LOCATE STATE.MAP IN STATE.NAMES<1> SETTING STATE.POS THEN            MAP.NAME = STATE.NAMES<2,STATE.POS>          END ELSE            MAP.NAME = "USA"            W$TITLE := " - Error: Invalid State: ":STATE.MAP          END        END ELSE          MAP.NAME = "USA"        END      END ELSE        MAP.NAME = CHART.TYPE<2>      END      READ MAP.LIST FROM F.MVDB.CONTROL, 'FCMAP.NAMES' ELSE MAP.LIST = ""      LOCATE MAP.NAME IN MAP.LIST SETTING DUM THEN* This is a valid map name        MS.NAME = MAP.NAME:".SETTINGS"        READ SXML FROM F.MVDB.CONTROL, MS.NAME ELSE SXML = ''        IF SXML = "" THEN          MS.NAME = "FCMAP.SETTINGS"          READ SXML FROM F.MVDB.CONTROL, MS.NAME ELSE SXML = ''        END        MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)        MOVIE.WIDTH = CHART.WIDTH + 75*        READ MAP.TEMPLATE FROM F.WEB.FORMS, "FCMAP_template.html" ELSE MAP.TEMPLATE = "FMAP_template.html not found"        CALL SWAP(MAP.TEMPLATE,'[FCMAP_MODULE]',MAP.NAME)*        CONVERT AM TO "" IN SXML        IF W$CHART.OPTIONS # "" THEN          XML.OPTS = W$CHART.OPTIONS          NODE.NAME = 'map'          GOSUB APPLY.XML.OPTS        END*        MAPDATA = '<colorRange>'        FOR CX = 1 TO DCOUNT( W$MAP.RANGE.NAME<1>, @VM )          THIS.COLOR = W$MAP.RANGE.COLOR<1,CX>          LOCATE THIS.COLOR IN NAME.COLOR<1> SETTING CPOS THEN            USE.COLOR = NAME.COLOR<2,CPOS>          END ELSE USE.COLOR = THIS.COLOR          UPDATE.OPTS = W$MAP.RANGE.OPTS<1,CX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$MAP.RANGE.OPTS<1,CX> = UPDATE.OPTS          MAPDATA := "<color minValue='":W$MAP.RANGE.LOW<1,CX>:"' maxValue='":W$MAP.RANGE.HIGH<1,CX>:"' displayValue='":W$MAP.RANGE.NAME<1,CX>:"' color='":USE.COLOR          MAPDATA := "' ":W$MAP.RANGE.OPTS<1,CX>:" />"        NEXT CX        MAPDATA := '</colorRange>'        MAPDATA := '<data>'        FOR MX = 1 TO DCOUNT( W$MAP.IDS<1>, @VM )          IF W$MAP.VALUE.DD<1,MX> = 1 THEN            MAP.LINK = CGI$PATH:"/MVDB.MAIN?udview=":WIDGET.NAME:"&udpos1=1&udval1=":W$MAP.IDS<1,MX>:"&mapdd"          END ELSE IF W$MAP.VALUE.LINK<1,MX> # "" THEN            MAP.LINK = W$MAP.VALUE.LINK<1,MX>            IF W$MAP.LINK.MODE<1,MX> = "N" THEN MAP.LINK = "n-":MAP.LINK          END ELSE            IF W$FW.DD.WIDGET<1,MX> # "" THEN              FW.WIDGET.POS = MX              GOSUB MAKE.FW.DD.URL              MAP.LINK = URL            END ELSE              MAP.LINK = ""            END          END          IF MAP.LINK # "" THEN            URLENCODE.STRING = MAP.LINK            GOSUB URL.ENCODE            MAP.LINK = NEW.STRING            MAP.LINK = "link='":MAP.LINK:"' "          END          TOOLTEXT = W$MAP.VALUE.TOOLTEXT<1,MX>          CALL XML.ENCODE(TOOLTEXT,'')          UPDATE.OPTS = W$MAP.VALUE.OPTS<1,MX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$MAP.VALUE.OPTS<1,MX> = UPDATE.OPTS          MAPDATA := "<entity id='":W$MAP.IDS<1,MX>:"' value='":W$MAP.VALUES<1,MX>:"' ":W$MAP.VALUE.OPTS<1,MX>:" toolText='":TOOLTEXT:"' ":MAP.LINK:"/>"        NEXT MX        MAPDATA := '</data>'        CONVERT '"' TO "'" IN MAPDATA        CALL SWAP(SXML,'[CHART.DATA]',MAPDATA)        CALL SWAP(MAP.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)        CALL SWAP(MAP.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)        CALL SWAP(MAP.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)        CALL SWAP(MAP.TEMPLATE,'<!-- CHARTXML -->',SXML)        HTML = MAP.TEMPLATE      END ELSE        HTML = "Map name '":MAP.NAME:"' not found in MVDB.CONTROL, FCMAP.NAMES"      END    CASE W$TYPE = "TABLE"      HTML<-1> = '<table class="gridWidget" width="100%" >'      HTML<-1> = '<thead>'      HTML<-1> = '<tr>'      TABLE.COLS = DCOUNT( W$TABLE.COL.LABELS<1>, VM )      FOR CHX = 1 TO TABLE.COLS        IF W$TABLE.COL.JUST<1,CHX> # "" THEN          ALIGN = ' align="':W$TABLE.COL.JUST<1,CHX>:'"'        END ELSE ALIGN = ""        LABEL = W$TABLE.COL.LABELS<1,CHX>        IF LABEL = '' THEN LABEL = '&nbsp;'        HTML<-1> = '<th':ALIGN:' >':LABEL:'</th>'      NEXT CHX      HTML<-1> = '</tr>'      HTML<-1> = '</thead>'      HTML<-1> = '<tbody>'      TABLE.ROWS = DCOUNT( W$TABLE.DATA, AM )      FOR TRX = 1 TO TABLE.ROWS        HTML<-1> = '<tr>'        THIS.ROW = W$TABLE.DATA<TRX>        FOR TRC = 1 TO TABLE.COLS          IF W$TABLE.COL.JUST<1,TRC> # "" THEN            ALIGN = ' align="':W$TABLE.COL.JUST<1,TRC>:'"'          END ELSE ALIGN = ""          VALUE = THIS.ROW<1,TRC>          IF VALUE = '' THEN VALUE = '&nbsp;'          THIS.COL = '<td':ALIGN:'>':VALUE:'</td>'          HTML<-1> = THIS.COL        NEXT TRC        HTML<-1> = '</tr>'      NEXT TRX      HTML<-1> = '</tbody>'      HTML<-1> = '<tfoot>'      HTML<-1> = '<tr>'      FOR CHX = 1 TO TABLE.COLS        IF W$TABLE.COL.JUST<1,CHX> # "" THEN          ALIGN = ' align="':W$TABLE.COL.JUST<1,CHX>:'"'        END ELSE ALIGN = ""        VALUE = W$TABLE.TOTALS<1,CHX>        IF VALUE = '' THEN VALUE = '&nbsp;'        HTML<-1> = '<td':ALIGN:'>':VALUE:'</td>'      NEXT CHX      HTML<-1> = '</tr>'      HTML<-1> = '</tfoot>'      HTML<-1> = '</table>'    CASE W$TYPE = "TEXT"      HTML = '<pre>'      HTML<-1> = W$TEXT.DATA      HTML<-1> = '</pre>'    CASE W$TYPE = "HTML"      HTML = W$HTML.DATA*PDF* Check if widget-generated HTML includes a <head> tag, which we interpret as having its own styling      IF INDEX(HTML,'<head>',1)+INDEX(HTML,'<HEAD>',1) THEN WIDGET.OWN.STYLE = TRUE      IF WIDGET.OWN.STYLE AND IFRAME.WIDGET.NAME = "" AND PDF.WIDGET.NAME = "" THEN* Not rendering PDF or returning iframe content - change* widget content to iframe so styles render properly.        CALL REBUILD.URL.STRING(IFRAME.URL.STRING)        URLENCODE.STRING = WIDGET.NAME        GOSUB URL.ENCODE        IFRAME.URL.STRING = '/dbc/MVDB.MAIN?iframewidget=':NEW.STRING:'&':IFRAME.URL.STRING ;* stash widget name in URL string so we know which widget to use for iframe content        HTML = '<iframe src="':IFRAME.URL.STRING:'" width="100%" style="height: 100vh;">':WIDGET.NAME:'</iframe>'      END    CASE 1      HTML = "INVALID TYPE ":W$TYPE  END CASE*  IF IFRAME.WIDGET.NAME # "" THEN* Returning iframe content - no widget styling needed    HTML.DIV = '<!-- WIDGETDATA -->'  END ELSE    IF WIDGET.OWN.STYLE AND PDF.WIDGET.NAME # "" THEN* Render PDF from widget HTML that has a <head> tag - no widget styling needed      HTML.DIV = '<!-- WIDGETDATA -->'    END ELSE* normal widget styles      HTML.DIV = WIDGET.DIV    END  END*  Q1.LINKS = ''  Q2.LINKS = ''  Q3.LINKS = ''  Q4.LINKS = ''  Q5.LINKS = ''** Add source code edit link for administrative user*** FIX 6-1-16 ADD A GO BACK IN ICON LIST*  NEXT.LINK.POS = DCOUNT(W$LINK.LABEL<1>,@VM)  NEXT.LINK.POS2 = DCOUNT(W$LINK.ICON<1>,@VM)  IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS=NEXT.LINK.POS2  READ DD.STACK FROM F.MVDB.UDATA, SESSION$ID:'$DD.STACK' ELSE DD.STACK=''  MAX.DD.STACK=DCOUNT(DD.STACK,AM)  IF MAX.DD.STACK > 2 THEN    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = 'arrow_left.png'    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Go Back"    W$LINK.URL<1,NEXT.LINK.POS> = "javascript:history.back()"; * 9-23-16 *    W$LINK.LOCATION<1,NEXT.LINK.POS> = "C"  END* END FIX 6-1-16  IF adminauth = 1 THEN* 6-1-16 *  NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )* 6-1-16 *  NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )* 6-1-16 *  IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "script_edit.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Edit BASIC Source"    IF WDEBUG.MODE OR WFAIL.MODE THEN      USE.SUBNAME = GLOBAL.INFO(91) ;* Original subroutine name    END ELSE USE.SUBNAME = SUBNAME    URLENCODE.STRING = USE.SUBNAME    GOSUB URL.ENCODE    URL.SUBNAME = NEW.STRING    W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=":URL.SUBNAME    W$LINK.URL.OPTS<1,NEXT.LINK.POS> = 'target="ED_MVDB.SUBS_':URL.SUBNAME:'"'    W$LINK.LOCATION<1,NEXT.LINK.POS> = "C"** Add debug widget link for administrative user*    IF NOT(WFAIL.MODE) THEN      NEXT.LINK.POS += 1      W$LINK.ICON<1,NEXT.LINK.POS> = "information.png" ;* Change this to a real debug icon      IF WDEBUG.MODE THEN        W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Normal Mode"      END ELSE        W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Debug Mode"      END      URLENCODE.STRING = WIDGET.NAME      GOSUB URL.ENCODE      IF WDEBUG.MODE THEN        W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?undebug_widget=":NEW.STRING      END ELSE        W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?debug_widget=":NEW.STRING      END      W$LINK.LOCATION<1,NEXT.LINK.POS> = "C"    END  END  IF W$PRINTABLE = 1 THEN    NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )    NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )    IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "printer.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Print"    W$LINK.LABEL<1,NEXT.LINK.POS> = "Print"    W$LINK.URL<1,NEXT.LINK.POS> = "#"*W$LINK.URL.OPTS<1,NEXT.LINK.POS> = 'onClick="printThis(this);"'    W$LINK.URL.OPTS<1,NEXT.LINK.POS> = 'class="DansClass"'    W$LINK.LOCATION<1,NEXT.LINK.POS> = 'C'  END**PDF* If PDF generation is enabled, and supported for this widget, add a PDF icon to the control menu  IF PDF$ENABLED AND W$PDFABLE AND PDF.WIDGET.NAME = "" THEN    NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )    NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )    IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "page_white_acrobat.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Generate PDF"    W$LINK.LABEL<1,NEXT.LINK.POS> = "Generate PDF"    CALL REBUILD.URL.STRING(CURRENT.URL.STRING)    PDF.URL.STRING=CURRENT.URL.STRING    URLENCODE.STRING = WIDGET.NAME    GOSUB URL.ENCODE    PDF.URL.STRING := '&generatepdf=':NEW.STRING ;* stash widget name in URL string so we know which widget to render as PDF    W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?":PDF.URL.STRING    W$LINK.LOCATION<1,NEXT.LINK.POS> = 'C'  END** 6-27-16 *EXCEL* If EXCEL generation is supported for this widget, add a EXCEL icon to the control menu  IF W$EXCELABLE AND EXCEL.WIDGET.NAME = '' THEN    NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )    NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )    IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "page_white_excel.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Generate Spreadsheet"    W$LINK.LABEL<1,NEXT.LINK.POS> = "Generate Spreadsheet"    CALL REBUILD.URL.STRING(CURRENT.URL.STRING)    URLENCODE.STRING=CURRENT.URL.STRING    GOSUB URL.ENCODE    EXCEL.URL.STRING=NEW.STRING    URLENCODE.STRING = WIDGET.NAME    GOSUB URL.ENCODE    EXCEL.URL.STRING := '&generateexcel=':NEW.STRING ;* stash widget name in URL string so we know which widget to render as Excel spreadsheet    W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?":EXCEL.URL.STRING    W$LINK.LOCATION<1,NEXT.LINK.POS> = 'C'  END* END OF 6-27-16 *EXCEL**  LINK.CNT = DCOUNT( W$LINK.LABEL<1>, VM )  LINK.CNT2 = DCOUNT( W$LINK.ICON<1>, VM )  IF LINK.CNT2 > LINK.CNT THEN LINK.CNT = LINK.CNT2  FOR LX = 1 TO LINK.CNT    THIS.LABEL = W$LINK.LABEL<1,LX>    THIS.LOC = W$LINK.LOCATION<1,LX>    THIS.UD.POS = W$LINK.UD.POS<1,LX>    THIS.UD.VAL = W$LINK.UD.VAL<1,LX>    THIS.DD.WIDGET = W$LINK.DD.WIDGET<1,LX>    THIS.URL = W$LINK.URL<1,LX>    THIS.URL.OPTS = W$LINK.URL.OPTS<1,LX>*    IF THIS.LOC = '' THEN THIS.LOC = '1' ;* Set to quadrant 1 if not specified*    IF THIS.URL # "" THEN* Specific URL = ignore UD information and Drill down (DD) info.      URL = THIS.URL    END ELSE      IF THIS.DD.WIDGET # "" THEN TARGET.WIDGET = THIS.DD.WIDGET ELSE TARGET.WIDGET = WIDGET.NAME      URLENCODE.STRING = TARGET.WIDGET      GOSUB URL.ENCODE      TARGET.WIDGET = NEW.STRING      URL = CGI$PATH:"/MVDB.MAIN?udview=":TARGET.WIDGET      FOR UDX = 1 TO DCOUNT( THIS.UD.POS<1,1>,SVM )        URLENCODE.STRING = THIS.UD.VAL<1,1,UDX>        GOSUB URL.ENCODE        URL := "&udpos":UDX:"=":THIS.UD.POS<1,1,UDX>:"&udval":UDX:"=":NEW.STRING      NEXT UDX      IF THIS.DD.WIDGET # "" THEN        URL := "&dd"* Include the name of this widget in the drilldown link so the target widget knows the referrer        URLENCODE.STRING = WIDGET.NAME        GOSUB URL.ENCODE        URL := '&dd_from=':NEW.STRING      END    END    IF W$LINK.ICON<1,LX> # "" THEN      IMG.REF = '<img title="':W$LINK.ICON.TXT<1,LX>:'" class="icon" src="/db/icons/':W$LINK.ICON<1,LX>:'" />'    END ELSE IMG.REF = ''    IF INDEX(THIS.LOC,'C',1) AND IMG.REF # '' THEN ;* This is a Control Icon      LINK.DATA = '<a href="':URL:'" ':THIS.URL.OPTS:'>':IMG.REF:'</a>'    END ELSE      LINK.DATA = '<a href="':URL:'" ':THIS.URL.OPTS:'>':IMG.REF:THIS.LABEL:'</a>'    END*    IF INDEX(THIS.LOC,'1',1) THEN      Q1.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'2',1) THEN      Q2.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'3',1) THEN      Q3.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'4',1) THEN      Q4.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'C',1) THEN      Q5.LINKS := LINK.DATA:'&nbsp;'    END  NEXT LX  IF Q1.LINKS # "" THEN    Q1.LINKS = '<div class="widget_trcorner widget_corner">':Q1.LINKS:'</div>'  END  IF Q2.LINKS # "" THEN    Q2.LINKS = '<div class="widget_tlcorner widget_corner">':Q2.LINKS:'</div>'  END  IF Q3.LINKS # "" THEN    Q3.LINKS = '<div class="widget_blcorner widget_corner">':Q3.LINKS:'</div>'  END  IF Q4.LINKS # "" THEN    Q4.LINKS = '<div class="widget_brcorner widget_corner">':Q4.LINKS:'</div>'  END** Create the input section*  INP.CNT = DCOUNT( W$INPUT.PROMPT, AM )  INP.HTML = ''  IF INP.CNT THEN* PJS 10-07-16: Change method from GET to POST to eliminate URL length limitation* when form contains many input controls.    IF INP.CNT > 20 THEN      INP.HTML = '<form method="POST" class="widget_form" action="':CGI$PATH:'/MVDB.MAIN">'    END ELSE      INP.HTML = '<form method="GET" class="widget_form">'    END    FOR IX = 1 TO INP.CNT      INP.HTML<-1> = '<div class="widget_control">'      INP.HTML<-1> = '<label ':W$INPUT.PROMPT.PARAMS<IX>:'>':W$INPUT.PROMPT<IX>:':</label>'      BEGIN CASE        CASE W$INPUT.TYPE<IX> = "TEXT"          INP.HTML<-1> = '<input type="text" name="inp_':W$INPUT.UDPOS<IX>:'" value="':W$INPUT.DEFAULT<IX>:'" ':W$INPUT.PARAMS<IX>:'>'        CASE W$INPUT.TYPE<IX> = "PASSWORD"          INP.HTML<-1> = '<input type="password" name="inp_':W$INPUT.UDPOS<IX>:'" value="':W$INPUT.DEFAULT<IX>:'" ':W$INPUT.PARAMS<IX>:'>'        CASE W$INPUT.TYPE<IX> = "DATE"          INP.HTML<-1> = '<input class="datepicker" type="text" name="inp_':W$INPUT.UDPOS<IX>:'" value="':W$INPUT.DEFAULT<IX>:'" ':W$INPUT.PARAMS<IX>:'>'        CASE W$INPUT.TYPE<IX> = "SELECT"          INP.HTML<-1> = '<select name="inp_':W$INPUT.UDPOS<IX>:'" ':W$INPUT.PARAMS<IX>:'>'          SCNT = DCOUNT( W$INPUT.SELOPTS<IX>, VM )          IF W$INPUT.SELVALS<IX> = "" THEN W$INPUT.SELVALS<IX> = W$INPUT.SELOPTS<IX>          FOR SELX = 1 TO SCNT            IF W$INPUT.SELVALS<IX,SELX> = W$INPUT.DEFAULT<IX> THEN DFLT = "selected" ELSE DFLT = ""            INP.HTML<-1> = '<option value="':W$INPUT.SELVALS<IX,SELX>:'" ':DFLT:'>':W$INPUT.SELOPTS<IX,SELX>:'</option>'          NEXT SELX          INP.HTML<-1> = '</select>'        CASE W$INPUT.TYPE<IX> = "CHECKBOX"          INP.HTML<-1> = '<input type="checkbox" name="inp_':W$INPUT.UDPOS<IX>:'" value="1" ':W$INPUT.PARAMS<IX>          IF W$INPUT.DEFAULT<IX> = 1 THEN            INP.HTML := ' checked'          END          INP.HTML := '>'*add a hidden field to let up know that there was a checkbox on the form.*unchecked checkboxes don't get submitted with the rest of the form data.          INP.HTML<-1> = '<input type="hidden" name="mvdbcxbx_':W$INPUT.UDPOS<IX>:'" value="1">'        CASE 1 ; NULL      END CASE      INP.HTML<-1> = '</div>'    NEXT IX    IF W$INPUT.BUTTON = "" THEN W$INPUT.BUTTON = "Go"    INP.HTML<-1> = '<div class="widget_control"><input type="submit" value="':W$INPUT.BUTTON:'" ></div>'    INP.HTML<-1> = '<input type="hidden" name="udview" value="':WIDGET.NAME:'">'    INP.HTML<-1> = '<input type="hidden" name="sw" value="':WIDGET.NAME:'">'    IF G$DRILLDOWN.MODE THEN      INP.HTML<-1> = '<input type="hidden" name="dd" value="">'      INP.HTML<-1> = '<input type="hidden" name="dd_from" value="':G$DD.REFERRER:'">'      INP.HTML<-1> = '<input type="hidden" name="dd_from_db" value="':G$DD.FROM.DB:'">'    END    INP.HTML<-1> = '</form>'    INP.HTML = '<div class="widget_input">':INP.HTML:'</div>'  END**PDF* Omit the control icons in the PDF document  IF PDF.WIDGET.NAME # "" THEN    Q5.LINKS = ""  END*  ENC.TITLE = W$TITLE  CALL XML.ENCODE(ENC.TITLE,"")  CALL SWAP(HTML.DIV,'<!-- TITLE -->',ENC.TITLE)  CALL SWAP(HTML.DIV,'<!-- QUAD1 -->',Q1.LINKS)  CALL SWAP(HTML.DIV,'<!-- QUAD2 -->',Q2.LINKS)  CALL SWAP(HTML.DIV,'<!-- QUAD3 -->',Q3.LINKS)  CALL SWAP(HTML.DIV,'<!-- QUAD4 -->',Q4.LINKS)  CALL SWAP(HTML.DIV,'<!-- CONTROLS -->',Q5.LINKS)  CALL SWAP(HTML.DIV,'<!-- INPUT -->',INP.HTML)  CALL SWAP(HTML.DIV,'<!-- WIDGETDATA -->',HTML)  RETURN*APPLY.XML.OPTS: * Apply XML option overrides*  SXML.ATTRS = ""  ATTR.VAR.LIST = ''* Parse the attrbiutes from the XML tag.  CPOS = 3 + LEN(NODE.NAME) ;* Start after "<graph " or "<map " depending on the node name.  SXML.ATTR.POS = 0  SXML.LEN = LEN(SXML)  THIS.ATTR = ''  SXML.SUFFIX = '>[CHART.DATA]</':NODE.NAME:'>'  LOOP UNTIL CPOS > SXML.LEN DO    THIS.CH = SXML[CPOS,1]    BEGIN CASE      CASE THIS.CH = '<' ;* Nothing to do - beginning        THIS.ATTR = ''      CASE THIS.CH = ' '        GOSUB ADD.SXML.ATTR      CASE THIS.CH = '>' ;* Ending tag        GOSUB ADD.SXML.ATTR        SXML.SUFFIX = SXML[CPOS,999]        EXIT      CASE 1        THIS.ATTR := THIS.CH    END CASE    CPOS += 1  REPEAT  GOSUB ADD.SXML.ATTR*  CONVERT '"' TO "'" IN XML.OPTS  CONVERT @VM TO @AM IN XML.OPTS  XML.OPT.CNT = DCOUNT( XML.OPTS, AM )  FOR XOX = 1 TO XML.OPT.CNT    THIS.OPT = XML.OPTS<XOX>    OPT.VAR = FIELD( THIS.OPT, '=', 1 )    LOCATE OPT.VAR IN ATTR.VAR.LIST SETTING XOPOS THEN      SXML.ATTRS<XOPOS> = THIS.OPT    END ELSE      THIS.ATTR = THIS.OPT      GOSUB ADD.SXML.ATTR    END  NEXT XOX** Rebuild SXML*  SXML = '<':NODE.NAME:' '  FOR XOX = 1 TO SXML.ATTR.POS    SXML := SXML.ATTRS<XOX>:' '  NEXT XOX  SXML := SXML.SUFFIX  RETURN*ADD.SXML.ATTR: * Add an attrbiute to the list*  IF THIS.ATTR # '' THEN    SXML.ATTR.POS += 1    SXML.ATTRS<SXML.ATTR.POS> = THIS.ATTR    ATTR.VAR.LIST<SXML.ATTR.POS> = FIELD(THIS.ATTR,'=',1)    THIS.ATTR = ''  END  RETURN*APPLY.COLOR.OPTS: * Build COLOR.ARRAY from defaults and user settings*  COLOR.ARRAY = ''  DFLT.COLOR.ARRAY = ''  IF DB.THEME # '' THEN    READ THEME.REC FROM F.MVDB.THEMES, DB.THEME ELSE THEME.REC = ''    DFLT.COLOR.ARRAY = DELETE(THEME.REC,1,0,0)    CONVERT AM TO VM IN DFLT.COLOR.ARRAY  END ELSE IF SITE$THEME # '' THEN    READ THEME.REC FROM F.MVDB.THEMES, SITE$THEME ELSE THEME.REC = ''    DFLT.COLOR.ARRAY = DELETE(THEME.REC,1,0,0)    CONVERT AM TO VM IN DFLT.COLOR.ARRAY  END  IF DFLT.COLOR.ARRAY = '' THEN    DFLT.COLOR.ARRAY<1,-1> = '#ff8125'    DFLT.COLOR.ARRAY<1,-1> = '#584d43'    DFLT.COLOR.ARRAY<1,-1> = '#2e2a27'    DFLT.COLOR.ARRAY<1,-1> = '#7b746d'    DFLT.COLOR.ARRAY<1,-1> = '#e78859'    DFLT.COLOR.ARRAY<1,-1> = '#f04408'    DFLT.COLOR.ARRAY<1,-1> = '#bd5204'    DFLT.COLOR.ARRAY<1,-1> = '#733e30'  END  DFLT.MAX = DCOUNT( DFLT.COLOR.ARRAY<1>, VM )*  MAX.COLOR.AM = DCOUNT( COLOR.LIST, AM )  IF MAX.COLOR.AM = 0 THEN MAX.COLOR.AM = 1  FOR CLX = 1 TO MAX.COLOR.AM    MAX.COLOR.VAL = DCOUNT( COLOR.LIST<CLX>, VM )    IF MAX.COLOR.VAL < DFLT.MAX THEN MAX.COLOR.VAL = DFLT.MAX    FOR CLXV = 1 TO MAX.COLOR.VAL      IF COLOR.LIST<CLX,CLXV> # "" THEN        LOCATE OCONV(COLOR.LIST<CLX,CLXV>,"MCU") IN NAME.COLOR<1> SETTING COLOR.POS THEN          COLOR.LIST<CLX,CLXV> = NAME.COLOR<2,COLOR.POS>        END        COLOR.ARRAY<CLX,CLXV> = COLOR.LIST<CLX,CLXV>      END ELSE        COLOR.ARRAY<CLX,CLXV> = DFLT.COLOR.ARRAY<1,CLXV>      END    NEXT CLXV  NEXT CLX  RETURN*URL.ENCODE: **  NEW.STRING = ""  UE.LEN = LEN(URLENCODE.STRING)  FOR UEX = 1 TO UE.LEN    UE.CHR = URLENCODE.STRING[UEX,1]    UE.CVAL = SEQ(UE.CHR)    BEGIN CASE      CASE UE.CVAL <= 47 ; ENC.FLAG = 1      CASE UE.CVAL >= 58 AND UE.CVAL <= 64 ; ENC.FLAG = 1      CASE UE.CVAL >= 91 AND UE.CVAL <= 96 ; ENC.FLAG = 1      CASE UE.CVAL > 122 ; ENC.FLAG = 1      CASE 1 ; ENC.FLAG = 0    END CASE    IF ENC.FLAG THEN      UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')    END    NEW.STRING := UE.CHR  NEXT UEX  RETURN*TICKMARK.OPTIONS: * For charts that support tickmark options** Convert the settings in W$FW.TICKMARKS into the appropriate XML attributes to be* added to the <chart> tag via W$CHART.OPTIONS*  IF W$FW.TICKMARKS<1> = "0" THEN    W$CHART.OPTIONS<-1> = "showTickMarks='0'"    W$CHART.OPTIONS<-1> = "showTickValues='0'"  END ELSE    IF W$FW.TICKMARKS<2> = 0 THEN      W$CHART.OPTIONS<-1> = "showTickValues='0'"    END    IF W$FW.TICKMARKS<3> = "A" THEN      W$CHART.OPTIONS<-1> = "ticksBelowGraph='0'"    END    IF W$FW.TICKMARKS<4> # "" THEN      W$CHART.OPTIONS<-1> = "majorTMNumber='":W$FW.TICKMARKS<4>:"'"    END    IF W$FW.TICKMARKS<5> # "" THEN      W$CHART.OPTIONS<-1> = "minorTMNumber='":W$FW.TICKMARKS<5>:"'"    END  END  RETURN*MAKE.FW.DD.URL: **  TARGET.WIDGET = W$FW.DD.WIDGET<1,FW.WIDGET.POS>  IF TARGET.WIDGET = "" THEN    URL = ""    RETURN  END  URLENCODE.STRING = TARGET.WIDGET  GOSUB URL.ENCODE  TARGET.WIDGET = NEW.STRING  URL = CGI$PATH:"/MVDB.MAIN?udview=":TARGET.WIDGET  FOR UDX = 1 TO DCOUNT( W$FW.DD.UD.POS<1,FW.WIDGET.POS>,SVM )    URLENCODE.STRING = W$FW.DD.UD.VAL<1,FW.WIDGET.POS,UDX>* BEGIN ZUMASYS 1-5-15    BEGIN CASE      CASE URLENCODE.STRING = 'MS.LABEL'        URLENCODE.STRING=MS.LABEL      CASE URLENCODE.STRING = 'MS.VALUE'        URLENCODE.STRING=MS.VALUE      CASE URLENCODE.STRING = 'MS.SERIES'; *3-15-15        URLENCODE.STRING=MS.SERIES; *3-15-15      CASE 1; NULL    END CASE* END ZUMASYS 1-5-15    GOSUB URL.ENCODE    URL := "&udpos":UDX:"=":W$FW.DD.UD.POS<1,FW.WIDGET.POS,UDX>:"&udval":UDX:"=":NEW.STRING  NEXT UDX  URL := "&dd"* Include the name of this widget in the drilldown link so the target widget knows the referrer  URLENCODE.STRING = WIDGET.NAME  GOSUB URL.ENCODE  URL := '&dd_from=':NEW.STRING* Specify the dashboard to return to from this drilldown view.  IF G$DRILLDOWN.MODE THEN    SOURCE.DB = G$DD.FROM.DB  END ELSE SOURCE.DB = G$CURRENT.DB  URLENCODE.STRING = SOURCE.DB  GOSUB URL.ENCODE  URL := '&dd_from_db=':NEW.STRING  RETURN*OPTS.UPDATE:  IF NOT(INDEX(UPDATE.OPTS,'decimalSeparator',1)) THEN    UPDATE.OPTS := OPTS.DELIM:"decimalSeparator='":DECIMAL:"'"  END  IF NOT(INDEX(UPDATE.OPTS,'thousandSeparator',1)) THEN    UPDATE.OPTS := OPTS.DELIM:"thousandSeparator='":THOUSAND:"'"  END  RETURNEND0002F4SUB.URL.ENCODE0c2SUBROUTINE SUB.URL.ENCODE(URLENCODE.STRING)** (C) Copyright 2009, Sierra Bravo Corporation, All Rights Reserved* * Author: Luke Bucklin, Sierra Bravo Corporation* Date: August 7, 2009* Purpose: URL encode a text string*NEW.STRING = ""UE.LEN = LEN(URLENCODE.STRING)FOR UEX = 1 TO UE.LEN  UE.CHR = URLENCODE.STRING[UEX,1]  UE.CVAL = SEQ(UE.CHR)  BEGIN CASE    CASE UE.CVAL <= 47 ; ENC.FLAG = 1    CASE UE.CVAL >= 58 AND UE.CVAL <= 64 ; ENC.FLAG = 1    CASE UE.CVAL >= 91 AND UE.CVAL <= 96 ; ENC.FLAG = 1    CASE UE.CVAL > 122 ; ENC.FLAG = 1    CASE 1 ; ENC.FLAG = 0  END CASE  IF ENC.FLAG THEN    UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')  END  NEW.STRING := UE.CHRNEXT UEXURLENCODE.STRING = NEW.STRINGRETURNEND 0024B2MV.COMPILE0c2* MV.COMPILE - Sierra Bravo Precompiler** Copyright (C) 2006 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin* Date: 12/26/2006* Description: Precompiler** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause**PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ''PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE() ; *PJS 06-12-15*TCL.LINE = TRIM( TCL.LINE )VERB = FIELD(TCL.LINE,' ', 1)FILE = FIELD( TCL.LINE, ' ', 2 )ITEM.LIST = ''IF SYSTEM(11) THEN  LOOP    READNEXT ITEM ELSE EXIT    ITEM.LIST<-1> = ITEM  REPEATEND ELSE  POS = 3  LOOP    ITEM = FIELD( TCL.LINE, ' ', POS )  UNTIL ITEM = '' OR ITEM[1,1] = '(' DO    ITEM.LIST<-1> = ITEM    POS += 1  REPEATENDOPTS.POS = INDEX( TCL.LINE, '(', 1 )IF OPTS.POS THEN  OPTS = TCL.LINE[OPTS.POS,999]END ELSE OPTS = ''*OPEN FILE TO FILEVAR ELSE STOP 201, FILE*INC.FILE = FILE:".INC"OPEN INC.FILE TO INC.FILEVAR ELSE  EXECUTE "CREATE-FILE ":INC.FILE:" 1 51"  OPEN INC.FILE TO INC.FILEVAR ELSE STOP 201, INC.FILEENDOPEN '','MVPC.CONTROL' TO F.MVPC.CONTROL ELSE  EXECUTE "CREATE-FILE MVPC.CONTROL 3 11" CAPTURING JUNK  OPEN '','MVPC.CONTROL' TO F.MVPC.CONTROL ELSE STOP 201, 'MVPC.CONTROL'END*DELIMS = \"'\ONE.WORD.TOKENS = ""ONE.WORD.TOKENS<-1> = "notrim"ONE.WORD.TOKENS<-1> = "exists"*ITEM.CNT = DCOUNT( ITEM.LIST, @AM )FOR ITEM.X = 1 TO ITEM.CNT  PRINT "MV Precompiler Version 1.0 ":  INC.SOURCE = '** Auto-generated source code. Do not modify this file.'  INC.SOURCE<-1> = "VAR$ERR = ''"  INC.SOURCE<-1> = "CALL WDB.VARS(VARS,VALS)"  INC.SOURCE<-1> = "*"  INC.SOURCE<-1> = 'LOCATE "xmlQuery" IN VARS SETTING POS THEN'  INC.SOURCE<-1> = '  XML$QUERY = 1'  INC.SOURCE<-1> = 'END ELSE XML$QUERY = 0'  XML.INFO = '<vars>'  VAR.INFO = ''  VAR.INFO.POS = 1  ITEM = ITEM.LIST<ITEM.X>  READ SOURCE FROM FILEVAR, ITEM ELSE    PRINT "Item '":ITEM:"' not on file."    CONTINUE  END  DELETE INC.FILEVAR, ITEM  SOURCE.LINES = DCOUNT( SOURCE, @AM )  SLINE = 1  END.OF.PC = 0  PARSED.ANY = 0  PC.ERRORS = 0  LOOP    LINE = SOURCE<SLINE>    IF TRIM(LINE)[1,1] = "!" THEN      GOSUB PARSE.LINE      IF SYNTAX.ERROR # "" THEN        PRINT        PRINT "Syntax Error: ":SYNTAX.ERROR        PRINT SLINE:": ":LINE        PARSED = 0        PC.ERRORS += 1      END      IF PARSED THEN        PRINT ".":        PARSED.ANY = 1        THIS.INC = ""        IF REQUIRE.ERROR = "" THEN          REQUIRE.ERROR = FROMVAR:' required.'        END        IF ITERATIVE THEN          FROMVAR = FROMVAR[1,LEN(FROMVAR)-2]          VARNAME = VARNAME[1,LEN(VARNAME)-2]          THIS.INC<-1> = "VAR$CNT = DCOUNT( VARS, @AM )"          THIS.INC<-1> = "VAR$STRLEN = ":LEN(FROMVAR)          THIS.INC<-1> = VARNAME:" = ''"          IF VARTYPE = "date" THEN            THIS.INC<-1> = VARNAME:".I = ''"          END          THIS.INC<-1> = "FOR VAR$X = 1 TO VAR$CNT"          THIS.INC<-1> = \  IF VARS<VAR$X> MATCHES "'\:FROMVAR:\'1N0N" THEN\          THIS.INC<-1> = '    VAR$NUM = VARS<VAR$X>[VAR$STRLEN+1,99]'          THIS.INC<-1> = '    ':VARNAME:'<VAR$NUM> = VALS<VAR$X>'          IF VARTYPE = "date" THEN            THIS.INC<-1> = '    ':VARNAME:'.I<VAR$NUM> = ICONV(':VARNAME:'<VAR$NUM>,"D")'            THIS.INC<-1> = '    ':VARNAME:'<VAR$NUM> = OCONV(':VARNAME:'.I<VAR$NUM>,"D4/")'          END          THIS.INC<-1> = '  END'          THIS.INC<-1> = 'NEXT VAR$X'         END ELSE          THIS.INC<-1> = 'LOCATE "':FROMVAR:'" IN VARS SETTING POS THEN'          THIS.INC<-1> = '  ':VARNAME:' = VALS<POS>'          THIS.INC<-1> = '  ':VARNAME:'.EXISTS = 1'          IF VARTYPE = "date" THEN            THIS.INC<-1> = '  ':VARNAME:'.I = ICONV(':VARNAME:',"D")'            THIS.INC<-1> = '  ':VARNAME:' = OCONV(':VARNAME:'.I,"D4/")'          END          IF DEFAULT # "" THEN            THIS.INC<-1> = '  IF ':VARNAME:' = "" THEN ':VARNAME:' = "':DEFAULT:'"'          END          THIS.INC<-1> = 'END ELSE'          THIS.INC<-1> = '  ':VARNAME:'.EXISTS = 0'          IF VARTYPE = "date" THEN            THIS.INC<-1> = '  ':VARNAME:'.I = ""'          END          IF METHOD = "REQUIRE" AND EXISTS THEN            * Existence of variable is required            THIS.INC<-1> = '  ':VARNAME:' = ""'            THIS.INC<-1> = '  VAR$ERR<-1> = "':REQUIRE.ERROR:'"'          END ELSE            THIS.INC<-1> = '  ':VARNAME:' = "':DEFAULT:'"'          END          THIS.INC<-1> = 'END'          IF METHOD = "REQUIRE" AND NOT(EXISTS) THEN            THIS.INC<-1> = 'IF ':VARNAME:' = "" THEN'            THIS.INC<-1> = '  VAR$ERR<-1> = "':REQUIRE.ERROR:'"'            THIS.INC<-1> = 'END'          END          IF TRIM.VAL THEN            THIS.INC<-1> = VARNAME:" = TRIM(":VARNAME:")"          END        END        *        IF METHOD = "REQUIRE" THEN REQUIRED = 1 ELSE REQUIRED = 0        *        VAR.INFO<1,VAR.INFO.POS> = FROMVAR        VAR.INFO<2,VAR.INFO.POS> = REQUIRED        VAR.INFO<3,VAR.INFO.POS> = VARTYPE        VAR.INFO<4,VAR.INFO.POS> = ITERATIVE        VAR.INFO<5,VAR.INFO.POS> = DEFAULT        VAR.INFO<6,VAR.INFO.POS> = COMMENT        VAR.INFO<7,VAR.INFO.POS> = EXISTS        VAR.INFO.POS += 1        *        XML.INFO<-1> = '<var name="':FROMVAR:'" required="':REQUIRED:'" type="':VARTYPE:'" iterative="':ITERATIVE:'">'        CALL XML.ENCODE(DEFAULT,'')        CALL XML.ENCODE(COMMENT,'')        XML.INFO<-1> = ' <default>':DEFAULT:'</default>'        XML.INFO<-1> = ' <comment>':COMMENT:'</comment>'        XML.INFO<-1> = '</var>'        *        INC.SOURCE<-1> = THIS.INC      END    END ELSE      LINE = TRIM(LINE)      IF LINE = "INCLUDE ":FILE:".INC ":ITEM THEN END.OF.PC = 1    END  UNTIL SLINE > SOURCE.LINES OR END.OF.PC DO SLINE += 1 REPEAT  PRINT  IF PARSED.ANY THEN    XML.INFO<-1> = '</vars>'    INC.SOURCE<-1> = "* XML Info"    INC.SOURCE<-1> = \XML$INFO = '<?xml version="1.0" ?>'\    XICNT = DCOUNT( XML.INFO, @AM )    FOR XML.X = 1 TO XICNT      INC.SOURCE<-1> = 'XML$INFO<-1> = \':XML.INFO<XML.X>:'\'    NEXT XML.X    INC.SOURCE<-1> = 'IF XML$QUERY THEN'    INC.SOURCE<-1> = '  CALL XML.SEND(XML$INFO)'    INC.SOURCE<-1> = '  STOP'    INC.SOURCE<-1> = 'END'    WRITE INC.SOURCE ON INC.FILEVAR, ITEM    WRITE VAR.INFO ON INC.FILEVAR, "$":ITEM    *    READU FILE.LIST FROM F.MVPC.CONTROL, 'LIBRARIES' ELSE FILE.LIST = ''    LOCATE FILE IN FILE.LIST BY 'AL' SETTING POS THEN      RELEASE F.MVPC.CONTROL, 'LIBRARIES'    END ELSE      FILE.LIST = INSERT( FILE.LIST, 1, POS, 0, FILE )      WRITE FILE.LIST ON F.MVPC.CONTROL, 'LIBRARIES'    END  END  IF PC.ERRORS THEN    PRINT "Compile aborted"  END ELSE    XLINE = "D3.":VERB:" ":FILE:" ":ITEM:" ":OPTS    PRINT "D3 Compile: ":XLINE    EXECUTE XLINE  ENDNEXT ITEM.XSTOP*PARSE.LINE: * Parse a line into tokens*SYNTAX.ERROR = ""LINE = TRIM(LINE)LINE = LINE[2,9999] ;* Remove "!"*LINELEN = LEN(LINE)TOKEN.LIST = '' ; TOKEN.POS = 1TOKEN = ""VALUE = ""GETMODE = "TOKEN" ;* Start looking for tokensDELIM = ""IN.DELIM.STRING = 0PARSED = 0FOR LX = 1 TO LINELEN  CH = LINE[LX,1]  IF GETMODE = "TOKEN" THEN    BEGIN CASE      CASE CH MATCHES "1A" OR CH MATCHES "1N"        TOKEN := CH      CASE CH = " "        * End of word - Token complete        IF TOKEN # "" THEN          TOKEN.LIST<1,TOKEN.POS> = TOKEN          LOCATE TOKEN IN ONE.WORD.TOKENS SETTING POS ELSE            GETMODE = "VALUE"            VALUE.POS = TOKEN.POS            IN.DELIM.STRING = 0          END          TOKEN.POS += 1          TOKEN = ""        END    END CASE  END ELSE IF GETMODE = "VALUE" THEN    BEGIN CASE      CASE IN.DELIM.STRING AND CH = DELIM        TOKEN.LIST<2,VALUE.POS> = VALUE        VALUE = ""        DELIM = ""        GETMODE = "TOKEN"      CASE NOT(IN.DELIM.STRING) AND INDEX(DELIMS,CH,1) ;* This is a delimiter        IN.DELIM.STRING = 1        DELIM = CH      CASE CH = " " AND NOT(IN.DELIM.STRING)        TOKEN.LIST<2,VALUE.POS> = VALUE        VALUE = ""        GETMODE = "TOKEN"      CASE 1        VALUE := CH    END CASE  ENDNEXT LXIF TOKEN # "" THEN  TOKEN.LIST<1,-1> = TOKENEND ELSE IF VALUE # "" THEN  TOKEN.LIST<2,VALUE.POS> = VALUEEND*VARNAME = ""FROMVAR = ""COMMENT = ""DEFAULT = ""VARTYPE = "string"TRIM.VAL = 1EXISTS = 0REQUIRE.ERROR = ""*FOR TX = 1 TO DCOUNT( TOKEN.LIST<1>, @VM )  TOKEN = TOKEN.LIST<1,TX>  VALUE = TOKEN.LIST<2,TX>  BEGIN CASE    CASE TOKEN = "get" OR TOKEN = "require"      METHOD = TOKEN      VARNAME = VALUE      PARSED = 1    CASE TOKEN = "from"      FROMVAR = VALUE    CASE TOKEN = "type"      VARTYPE = OCONV(VALUE,'MCL')    CASE TOKEN = "default"      DEFAULT = VALUE    CASE TOKEN = "comment"      COMMENT = VALUE    CASE TOKEN = "notrim"      TRIM.VAL = 0    CASE TOKEN = "exists"      EXISTS = 1    CASE TOKEN = "error"      REQUIRE.ERROR = VALUE    CASE 1      SYNTAX.ERROR = "Invalid Token: '":TOKEN:'"'  END CASENEXT TX*IF NOT(PARSED) THEN RETURN*IF VARNAME = "" THEN  SYNTAX.ERROR = "No variable specified"  RETURNEND*IF FROMVAR = "" THEN FROMVAR = VARNAME*ITERATIVE = 0IF VARNAME[LEN(VARNAME)-1,2] = "[]" THEN  IF FROMVAR[LEN(FROMVAR)-1,2] = "[]" THEN    ITERATIVE = 1  END ELSE    SYNTAX.ERROR = "Iterative array mismatch: ":VARNAME:", ":FROMVAR  ENDEND*RETURN007F4DMVDB.WEB.ED0c2* @(#) MVDB.WEB.ED Ported to jBASE 17:00:17  08 JUL 2015*  The following variable names were converted*   LN* ** Copyright (C) 2009 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: August 6, 2009* Description: Web Editor for Bravo Dashboard** 3-9-15 TFP CHANGE FILENAME TO FILENAME.VAR TO PREVENT CONFLICT WITH filename* 06-12-15 Peter Schellenbach - change U50BB to @ACCOUNT* 07-09-15 Peter Schellenbach - comment out code using LOGTO to edit items in foriegn accounts,*                               use jshow command to get name of source file for subroutines.** Modified by Peter Schellenbach of Zumasys 11-02-16*  Added GLOBAL.INFO(100) = 1 before each of the STOP statements (except STOP due to errors)*  to indicate successful execution of this routine. Otherwise the controller program*  (MVDB.INIT) thinks an error has occurred and appends some debug info to the HTML output.**#MAKE# RL $OPTIONS D3    INCLUDE WBPD WWW.INCLUDE    INCLUDE WBPD MVDB.INCLUDE    INCLUDE WBPD FI.MVDB.WIDGET.TYPES***OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS' ;* this is in /WWW/ COMMON and is opened by MVDB.INIT    OPEN '','MV.WEB.ED.ARCHIVE' TO F.ED.ARCHIVE THEN        ARCHIVE = 1    END ELSE ARCHIVE = 0    OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'    READ ACCTS FROM F.MVDB.CONTROL, "ED.ACCOUNTS" ELSE ACCTS = ""*    DIM SITE$SETTINGS(100)    EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)    EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)    EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)    EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)    EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)    EQU SITE$CHARSET      TO SITE$SETTINGS(9)*    MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""    IF SITE$ALT.LOGO = '' THEN        SITE.LOGO = '/db/images/mv-logo.png'    END ELSE        SITE.LOGO = SITE$ALT.LOGO        IF NOT(INDEX(SITE.LOGO,'/',1)) THEN            SITE.LOGO = '/db/images/':SITE.LOGO        END    END    IF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*    CALL GET.SESSION.VAR("adminauth",adminauth)    IF adminauth # 1 THEN        FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'        FORM := '</head><body><p>Administrative priviledges are required. '        FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'        CALL WEB.SEND(FORM)        GLOBAL.INFO(100) = 1  ;* Intentional stop        STOP*  READ LOGIN.PAGE FROM F.WEB.FORMS, "admin_login.html" ELSE LOGIN.PAGE = "admin_login.html not found."*  CALL SWAP(LOGIN.PAGE,'<!-- SITE_LOGO -->',SITE.LOGO)*  GLOBAL.INFO(100) = 1 ;* Intentional stop*  CALL WEB.SEND(LOGIN.PAGE)*  STOP    END*    EDIT.SCRIPTS = "NEW_PROGRAM_DIALOG = 0;":CHAR(10)       ;* This will get overwritten later, if appropriate    ESC.APOS = "\'"    HMESSAGE = ""    FMESSAGE = ""    record = ""    LOCATE "ed_file" IN CGI$VARS SETTING POS THEN        filename = CGI$VALS<POS>    END ELSE        filename = ""        HMESSAGE<-1> = "No filename specified."    END    LOCATE "ed_item" IN CGI$VARS SETTING POS THEN        item = CGI$VALS<POS>    END ELSE        item = ""        HMESSAGE<-1> = "No item name specified."    END    LOCATE "ed_acct" IN CGI$VARS SETTING POS THEN        acct = CGI$VALS<POS>    END ELSE acct = ""*    LOCATE "action" IN CGI$VARS SETTING POS THEN        action = CGI$VALS<POS>    END ELSE action = "open"    IF action = "code_template" THEN        LOCATE "template" IN CGI$VARS SETTING POS THEN            template = CGI$VALS<POS>        END ELSE template = ""        OPEN '','MVDB.SUB.TEMPLATES' TO F.MVDB.SUB.TEMPLATES THEN            orig.template = template            LOOP                READ TEMPLATE.TEXT FROM F.MVDB.SUB.TEMPLATES, template ELSE TEMPLATE.TEXT = ""                IF TEMPLATE.TEXT = "" THEN TEMPLATE.TEXT = "No template for ":template            WHILE FIELD( TEMPLATE.TEXT, ' ', 1 ) = "USE" DO                template = FIELD( TEMPLATE.TEXT, ' ', 2 )            REPEAT            CALL SWAP(TEMPLATE.TEXT,'W$TYPE = "%TYPE%"','W$TYPE = "':orig.template:'"')        END ELSE            TEMPLATE.TEXT = "Unable to open MVDB.SUB.TEMPLATES"        END        SESSION$CONTENT.SENT = 1        CRT "Content-Type: text/html"        CRT        CALL WEB.SEND(TEMPLATE.TEXT)        GLOBAL.INFO(100) = 1 ;* Intentional stop        STOP    END    LOCATE "record" IN CGI$VARS SETTING POS THEN        record = CGI$VALS<POS>        CONVERT CHAR(10) TO @AM IN record        CONVERT CHAR(13) TO "" IN record    END    IF action = "compile" OR action = "save" THEN        READ HTML FROM F.WEB.FORMS, "ed_output.html" ELSE HTML = "Unable to read ed_output.html"        QUIET.MODE = 1    END ELSE        READ HTML FROM F.WEB.FORMS, "ed_template.html" ELSE HTML = "Unable to read ed_template.html"        QUIET.MODE = 0    END    CALL SWAP(HTML,'<!--CHARACTER_SET-->',SITE$CHARSET)    LOCATE "height" IN CGI$VARS SETTING POS THEN        height = CGI$VALS<POS>        CALL PUT.SESSION.VAR("ed_height",height)    END ELSE        CALL GET.SESSION.VAR("ed_height",height)    END    OUT.OF.ACCOUNT = 0    *PJS 06-12-15* myacct = OCONV( 'a', 'U50BB')    myacct = @ACCOUNT; *PJS 06-12-15*    IF acct = myacct THEN acct = ""    IF acct # "" AND HMESSAGE = "" THEN        *PJS 07-09-15* TODO: LOGTO not supported on jBASE        HMESSAGE = "Editing files is only supported in the ":myacct:" account on jBASE." ;*PJS 07-09-15*        *password = ""        *OPEN '','MDS' TO F.MDS THEN            *READ APTR FROM F.MDS, acct ELSE APTR = ""            *IF APTR<1>[1,1] = "D" OR APTR<1>[1,1] = "Q" THEN                *IF APTR<7> # "" THEN    ;* This account has a password                    *LOCATE acct IN ACCTS<1> SETTING APOS THEN                        *password = ACCTS<2,APOS>                    *END ELSE                        *HMESSAGE<-1> = "Account ":acct:" requies a password. Not found in MVDB.CONTROL, ED.ACCOUNTS"                    *END                *END            *END ELSE                *HMESSAGE<-1> = "Account ":acct:" is not valid."            *END        *END ELSE            *HMESSAGE<-1> = "Unable to open MDS file."        *END        *IF HMESSAGE = "" THEN            *DATA password            *EXECUTE "LOGTO ":acct:" (F" CAPTURING LOGTO.OUT ;* Switch over to specified account            *IF LOGTO.OUT = "" THEN                *OUT.OF.ACCOUNT = 1            *END ELSE                *HMESSAGE<-1> = "Error: ":LOGTO.OUT            *END        *END    END    IF HMESSAGE # "" THEN        IF filename = "" AND item = "" THEN            HMESSAGE = ""            CALL SWAP(HTML,'<!-- SYNTAX -->',"")            CALL SWAP(HTML,'<!-- WINDOW_HEIGHT -->',"")            CALL SWAP(HTML,'<!-- FILE -->',"")            CALL SWAP(HTML,'<!-- ITEM -->',"")            CALL SWAP(HTML,'<!-- BODY -->',"")            CALL SWAP(HTML,'<!-- LAST_COMPILE -->',"")            CALL SWAP(HTML,'<!-- COMPILE_OUTPUT -->',"")            CALL SWAP(HTML,'<!-- COMPILE_ERRLINE -->',"")            CALL SWAP(HTML,'<!-- ED_CONTENT -->',"''")            CALL SWAP(HTML,'<!-- EA_CALLS_CONTENT -->',"")            CALL SWAP(HTML,'<!-- EA_INCLUDES_CONTENT -->',"")            CALL SWAP(HTML,'<!-- EA_FILES_CONTENT -->',"")            CALL SWAP(HTML,'<!-- EA_ARCHIVE_CONTENT -->',"")            CALL SWAP(HTML,'<!-- NUM_OF_CALLS -->',0)            CALL SWAP(HTML,'<!-- NUM_OF_INCLUDES -->',0)            CALL SWAP(HTML,'<!-- NUM_OF_FILES -->',0)            CALL SWAP(HTML,'<!-- NUM_OF_ARCHIVES -->',0)            CALL SWAP(HTML,'<!-- ED_SCRIPTS -->',"")            CALL SWAP(HTML,'<!-- ED_INIT_SCRIPT -->',"openEditDialog();")            CALL WEB.SEND(HTML)        END ELSE            GOSUB ADD.MESSAGE            CALL WEB.SEND(HTML)        END        GLOBAL.INFO(100) = 1 ;* Intentional stop        STOP    END* This will be the master dictionary in the appropriate account.    OPEN '','MD' TO F.MD ELSE        OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'    END    BASIC.SUB = 0    OPEN filename TO F.FILE THEN        IF record # "" AND action # "open" THEN            ELINE = DCOUNT( record, @AM )            LOOP WHILE ELINE > 1 AND record<ELINE> = "" DO                record = DELETE( record, ELINE, 0, 0 )                ELINE -= 1            REPEAT            IF ARCHIVE AND filename # "MV.WEB.ED.ARCHIVE" THEN                READ oldrec FROM F.FILE, item THEN                    IF oldrec # record THEN                        NOW = TIME()                        TD.STAMP = NOW:"*":DATE()                        NOW2 = NOW "R%2"                        NOW2 = MOD(NOW2,16)       ;* Get it down to a hex digit                        IF acct = "" THEN USE.ACCT = myacct ELSE USE.ACCT = acct                        ARCHIVE.ID = USE.ACCT:"*":filename:"*":item:"*":OCONV(NOW2,'MCDX')                        oldrec = INSERT( oldrec, 1, 0, 0, TD.STAMP )                        WRITE oldrec ON F.ED.ARCHIVE, ARCHIVE.ID                    END                END            END            WRITE record ON F.FILE, item            IF record[1,3] = "SUB" THEN BASIC.SUB = 1            IF QUIET.MODE THEN                record = ""            END ELSE                HMESSAGE<-1> = item:" saved, ":LEN(record):" bytes."            END        END ELSE            READ record FROM F.FILE, item THEN                HMESSAGE<-1> = item:" opened, ":LEN(record):" bytes."            END ELSE                record = ""                HMESSAGE<-1> = "New Item: ":item            END            IF record = "" THEN                NEW.ITEM.FLAG = 1                BEGIN CASE                CASE filename = "RSS.BP"                    record = 'SUBROUTINE ':item                    record<-1> = '*'                    record<-1> = '* RSS Feed'                    record<-1> = '*'                    record<-1> = 'INCLUDE RSS.BP RSS.DATA.INC'                    record<-1> = '*'                    IF INDEX(item,'.SEL',1) THEN                        record<-1> = '* EXECUTE SELECT - Create active select list'                        record<-1> = 'RETURN'                        END ELSE IF INDEX(item,'.ITEM',1) THEN                            record<-1> = 'RSS$TITLE = "" ;* Title text'                            record<-1> = 'RSS$LINK = "" ;* Link to URL for full-view (if applicable)'                            record<-1> = 'RSS$AUTHOR = "" ;* Author'                            record<-1> = 'RSS$DATE = "" ;* Date of feed item (internal)'                            record<-1> = 'RSS$TIME = "" ;* Time of feed item (internal)'                            record<-1> = 'RSS$DESCRIPTION = "" ;* Feed description text (HTML)'                            record<-1> = '*'                            record<-1> = '* Programming to fill in the above values goes here.'                            record<-1> = '*'                            record<-1> = 'RETURN'                        END                    CASE filename = 'MVDB.SUBS'                        EDIT.SCRIPTS = "NEW_PROGRAM_DIALOG = 1;":CHAR(10)                        EDIT.SCRIPTS := 'widgetTypes = new Array();':CHAR(10)                        OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES THEN                            EXECUTE 'SSELECT MVDB.WIDGET.TYPES BY GROUP BY HANDLER WITH INACTIVE # "1"' CAPTURING JUNK                            LOOP                                READNEXT TYPE.ID ELSE EXIT                                MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, TYPE.ID THEN                                    CALL SWAP(WT$DESC,'"','\"')                                    CLASS.NAME = FIELD(WT$ICON,'.',1)                                    CONVERT "_" TO "-" IN CLASS.NAME                                    EDIT.SCRIPTS := 'widgetTypes["':TYPE.ID:'"] = new Array("':WT$DESC:'","':CLASS.NAME:'");':CHAR(10)                                END                            REPEAT                        END                        record = 'SUBROUTINE ':item                        record<-1> = '*'                        record<-1> = '* Dashboard Widget'                        record<-1> = '*'                        record<-1> = 'INCLUDE WBPD MVDB.INCLUDE'                        record<-1> = '*'                    CASE 1 ; NULL                    END CASE                END            END        END ELSE            HMESSAGE<-1> = "Unable to open file '":filename:"'"            GOSUB ADD.MESSAGE            CALL WEB.SEND(HTML)            GLOBAL.INFO(100) = 1 ;* Intentional stop            STOP        END*        OUTPUT = "" ;* Compiler output        COMP.ERRLINE = ""        BEGIN CASE        CASE HMESSAGE # "" ; NULL        CASE action = "compile"            READV BASIC.TEMPLATE FROM F.MVDB.CONTROL, "COMPILE.SETUP", 1 ELSE BASIC.TEMPLATE = ""            IF BASIC.TEMPLATE # "" THEN                CMD = BASIC.TEMPLATE                CALL SWAP(CMD,"%FILENAME%",filename)                CALL SWAP(CMD,"%ITEMNAME%",item)            END ELSE                CMD = "BASIC ":filename:" ":item            END            EXECUTE CMD CAPTURING CMPOUTPUT            OUTPUT<-1> = CMD            OUTPUT<-1> = CMPOUTPUT* If the compile failed, find the first error line #            CO = 1            LOOP UNTIL CO > DCOUNT( CMPOUTPUT, @AM ) DO                Ln = FIELD(TRIM(CMPOUTPUT<CO>),' ',1)                IF Ln MATCHES "4N" THEN                    COMP.ERRLINE = (Ln+0)                    EXIT                END ELSE CO += 1            REPEAT            IF BASIC.SUB = 1 THEN                CMD = "CATALOG ":filename:" ":item                EXECUTE CMD CAPTURING CATOUTPUT                OUTPUT<-1> = CMD                OUTPUT<-1> = CATOUTPUT            END        CASE action = "save"        CASE 1            NULL        END CASE*        SUBLIST = ''        INCLIST = ''        FILELIST = ''        IF record # "" THEN            GOSUB BUILD.SUBLIST            GOSUB BUILD.INCLIST            GOSUB BUILD.FILELIST        END        IF filename = "WEB.FORMS" THEN SYNTAX = "html" ELSE SYNTAX = "basic"** Last compile date/time?*        CSTRING = ""        IF SYNTAX = "basic" THEN            EXECUTE "SELECT DICT ":filename:" '":item:"' C/DATE C/TIME" CAPTURING JUNK            READNEXT CDATE ELSE CDATE = ""            READNEXT CTIME ELSE CTIME = ""            CLEARSELECT            IF CDATE MATCHES "1N0N" AND CTIME MATCHES "1N0N" THEN                CDATE = OCONV(CDATE, 'D2/')                CTIME = OCONV(CTIME, 'MTS')                CSTRING = "Last compiled on ":CDATE:" at ":CTIME:'<br />'            END        END        IF OUT.OF.ACCOUNT THEN            *PJS 07-09-15* TODO: LOGTO not supported in jBASE            *LOCATE myacct IN ACCTS<1> SETTING APOS THEN                *password = ACCTS<2,APOS>            *END ELSE password = ""            *DATA password            *EXECUTE "LOGTO ":myacct:" (F" CAPTURING LOGTO.OUT            *IF LOGTO.OUT # "" THEN** Fatal error - cannot get back to our account. Send crapy CGI error.                *PRINT "Content-type: text/html"                *PRINT                *PRINT "<html><body>Error returning to ":myacct:", ":LOGTO.OUT                *PRINT "Check MVDB.CONTROL, ED.ACCOUNTS settings.</body></html>"                *GLOBAL.INFO(100) = 1 ;* Intentional stop                *STOP            *END** Re-open the master dictionary in the local account.            *OPEN '','MD' TO F.MD ELSE                *OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'            *END        END        IF OUTPUT # "" THEN            CALL SWAP(OUTPUT,'&','&amp;')            CALL SWAP(OUTPUT,'<','&lt;')            CALL SWAP(OUTPUT,'>','&gt;')        END        GOSUB ADD.MESSAGE        IF record # "" THEN            CALL SWAP(record,'&','&amp;')            CALL SWAP(record,'<','&lt;')            CALL SWAP(record,'>','&gt;')        END        IF action = "compile" THEN            CALL SWAP(OUTPUT,@AM,"<br>")        END        IF QUIET.MODE THEN            FORM = ""        END ELSE            FORM = '<form id="ed_form" method="post" action="':CGI$PATH:'/MVDB.WEB.ED" >'            FORM<-1> = '<textarea id="file_1" style="height: 100%; width: 100%;" name="record">'            FORM<-1> = record            FORM<-1> = '</textarea>'            IF acct = "" THEN USE.ACCT = myacct ELSE USE.ACCT = acct            FORM<-1> = '<input type="hidden" name="ed_acct" value = "':USE.ACCT:'" />'            FORM<-1> = '<input type="hidden" name="ed_file" value="':filename:'" />'            FORM<-1> = '<input type="hidden" name="ed_item" value="':item:'" />'            FORM<-1> = '<input type="hidden" name="action" value="" />'            FORM<-1> = '</form>'        END        CALL SWAP(HTML,'<!-- SYNTAX -->',SYNTAX)        CALL SWAP(HTML,'<!-- WINDOW_HEIGHT -->',height)        CALL SWAP(HTML,'<!-- FILE -->',filename)        CALL SWAP(HTML,'<!-- ITEM -->',item)        CALL SWAP(HTML,'<!-- BODY -->',FORM)        CALL SWAP(HTML,'<!-- LAST_COMPILE -->',CSTRING)        CALL SWAP(HTML,'<!-- COMPILE_OUTPUT -->',OUTPUT)        CALL SWAP(HTML,'<!-- COMPILE_ERRLINE -->',COMP.ERRLINE)        CALL SWAP(HTML,'<!-- ED_CONTENT -->',record)*        SUB.CNT = DCOUNT( SUBLIST<1>, @VM )        INC.CNT = DCOUNT( INCLIST<1>, @VM )        FILE.CNT = DCOUNT( FILELIST<1>, @VM )        IF SUB.CNT > INC.CNT THEN MAX.CNT = SUB.CNT ELSE MAX.CNT = INC.CNT        IF FILE.CNT > MAX.CNT THEN MAX.CNT = FILE.CNT*        IF acct # "" THEN            URL.ACCT = acct            CALL SUB.URL.ENCODE(URL.ACCT)            ACCT.LINK = "ed_acct=":URL.ACCT:"&"        END ELSE ACCT.LINK = ""*        IF SUB.CNT THEN            EA.CALLS ='<table width="100%"><tbody><tr><th>File</th><th>Program</th><th>Line(s)</th></tr>'        END ELSE EA.CALLS = ""        IF INC.CNT THEN            EA.INCS ='<table width="100%"><tbody><tr><th>File</th><th>Program</th><th>Line(s)</th></tr>'        END ELSE EA.INCS = ""        IF FILE.CNT THEN            EA.FILES = '<table width="100%"><tbody><tr><th>File</th><th>Operation</th><th>Line(s)</th></tr>'        END ELSE EA.FILES = ""        FOR LX = 1 TO MAX.CNT            IF LX <= SUB.CNT THEN                URL.SUBFILE = SUBLIST<1,LX>                CALL SUB.URL.ENCODE(URL.SUBFILE)                URL.SUBITEM = SUBLIST<2,LX>                CALL SUB.URL.ENCODE(URL.SUBITEM)                PROGFNAME = SUBLIST<1,LX>                PROGNAME = SUBLIST<2,LX>                CALL SWAP(PROGNAME,"'","\'")                CALL SWAP(PROGFNAME,"'","\'")                IF SUBLIST<2,LX>[1,1] = "@" THEN  ;* This is a CALL @ function, so no link to open the subroutine                    EA.CALLS := '<tr><td>':PROGFNAME:'</td><td>':PROGNAME:'</a></td>'                END ELSE                    EA.CALLS := '<tr><td>':PROGFNAME:'</td><td><a target="':URL.SUBFILE:'_':URL.SUBITEM:'" href="/dbc/MVDB.WEB.ED?':ACCT.LINK:'ed_file=':URL.SUBFILE:'&ed_item=':URL.SUBITEM:'">':PROGNAME:'</a></td>'                END                EA.CALLS := '</td><td>'                CL.CNT = DCOUNT( SUBLIST<4,LX>, @SVM )                FOR LXL = 1 TO CL.CNT                    EA.CALLS := '<a href="#" onclick="javascript:editArea.go_to_line(':ESC.APOS:SUBLIST<4,LX,LXL>:ESC.APOS:'); return false;">':SUBLIST<4,LX,LXL>:'</a>'                    IF LXL < CL.CNT THEN EA.CALLS := ", "                NEXT LXL            END            IF LX <= INC.CNT THEN                URL.INCFILE = INCLIST<1,LX>                CALL SUB.URL.ENCODE(URL.INCFILE)                URL.INCITEM = INCLIST<2,LX>                CALL SUB.URL.ENCODE(URL.INCITEM)                INCFNAME = INCLIST<1,LX>                INCNAME = INCLIST<2,LX>                CALL SWAP(INCNAME,"'","\'")                CALL SWAP(INCFNAME,"'","\'")                EA.INCS := '<tr><td>':INCFNAME:'</td><td><a target="':URL.INCFILE:'_':URL.INCITEM:'" href="/dbc/MVDB.WEB.ED?':ACCT.LINK:'ed_file=':URL.INCFILE:'&ed_item=':URL.INCITEM:'">':INCNAME:'</a>'                EA.INCS := '</td><td>'                IN.CNT = DCOUNT( INCLIST<4,LX>, @SVM )                FOR LXL = 1 TO IN.CNT                    EA.INCS := '<a href="#" onclick="javascript:editArea.go_to_line(':ESC.APOS:INCLIST<4,LX,LXL>:ESC.APOS:'); return false;">':INCLIST<4,LX,LXL>:'</a> '                    IF LXL < IN.CNT THEN EA.INCS := ", "                NEXT LXL            END            IF LX <= FILE.CNT THEN                FOR FOPX = 1 TO DCOUNT( FILELIST<3,LX>, @SVM )                    IF FOPX = 1 THEN SHOW.FILENAME = FILELIST<1,LX> ELSE SHOW.FILENAME = '&nbsp;'                    EA.FILES := '<tr><td>':SHOW.FILENAME:'</td><td>':FILELIST<3,LX,FOPX>                    EA.FILES := '</td><td>'                    IN.CNT = DCOUNT( FILELIST<5,LX,FOPX>, "," )                    FOR LXL = 1 TO IN.CNT                        LNO = FIELD( FILELIST<5,LX,FOPX>,',',LXL)                        EA.FILES := '<a href="#" onclick="javascript:editArea.go_to_line(':ESC.APOS:LNO:ESC.APOS:'); return false;">':LNO:'</a>'                        IF LXL < IN.CNT THEN EA.FILES := ", "                    NEXT LXL                    EA.FILES := '</td></tr>'                NEXT FOPX            END        NEXT LX        IF SUB.CNT THEN            EA.CALLS := '</td></tr></tbody></table>'        END        IF INC.CNT THEN            EA.INCS := '</td></tr></tbody></table>'        END        IF FILE.CNT THEN            EA.FILES := '</tbody></table>'        END*        ARC.LIST = ""        ARC.CNT = 0        IF ARCHIVE THEN* Archiving is enabled. Find a list of archived copies of this file            IF acct = "" THEN USE.ACCT = myacct ELSE USE.ACCT = acct            CMD = 'SSELECT MV.WEB.ED.ARCHIVE WITH ACCT = "':USE.ACCT:'" AND WITH FILE.NAME = "':filename:'" AND WITH ITEM = "':item:'" BY-DSND DATE BY-DSND TIME'            EXECUTE CMD CAPTURING JUNK            IF SYSTEM(11) THEN                ARC.LIST = '<table width="100%"><tbody><tr><th>Date</th><th>Time</th><th>Open</th></tr>'                ARC.CNT = SYSTEM(11)                LOOP                    READNEXT AID ELSE EXIT                    READV DT.STAMP FROM F.ED.ARCHIVE, AID, 1 ELSE DT.STAMP = ""                    ARC.LIST := '<tr><td>':OCONV(FIELD(DT.STAMP,'*',2),'D2/'):'</td><td>':OCONV(FIELD(DT.STAMP,'*',1),'MTS'):'</td><td>'                    URL.AID = AID                    CALL SUB.URL.ENCODE(URL.AID)                    ARC.LIST := '<a href="/dbc/MVDB.WEB.ED?ed_acct=MVDB&ed_file=MV.WEB.ED.ARCHIVE&ed_item=':URL.AID:'" target="MVDB_MV.WEB.ED.ARCHIVE_':URL.AID:'">Open</a>'                    ARC.LIST := '</td></tr>'                REPEAT                ARC.LIST := '</tbody></table>'            END        END*        CALL SWAP(HTML,'<!-- EA_CALLS_CONTENT -->',EA.CALLS)        CALL SWAP(HTML,'<!-- EA_INCLUDES_CONTENT -->',EA.INCS)        CALL SWAP(HTML,'<!-- EA_FILES_CONTENT -->',EA.FILES)        CALL SWAP(HTML,'<!-- EA_ARCHIVE_CONTENT -->',ARC.LIST)        CALL SWAP(HTML,'<!-- NUM_OF_CALLS -->',SUB.CNT)        CALL SWAP(HTML,'<!-- NUM_OF_INCLUDES -->',INC.CNT)        CALL SWAP(HTML,'<!-- NUM_OF_FILES -->',FILE.CNT)        CALL SWAP(HTML,'<!-- NUM_OF_ARCHIVES -->',ARC.CNT)        CALL SWAP(HTML,'<!-- ED_SCRIPTS -->',EDIT.SCRIPTS)        CALL WEB.SEND(HTML)        GLOBAL.INFO(100) = 1 ;* Intentional stop        STOP*ADD.MESSAGE:        **        CALL SWAP(HTML,'<!-- HEADER -->',HMESSAGE)        CALL SWAP(HTML,'<!-- FOOTER -->',FMESSAGE)        RETURN*BUILD.SUBLIST:      * Build a list of subroutines called by this program*        IDX.POS = 1        LPOS = 1        LOOP            POS = INDEX( record, "CALL ", IDX.POS )        WHILE POS DO            LINE.NUM = DCOUNT(record[1,POS+1],@AM)            LINE = TRIM(record<LINE.NUM>)            IF LINE[1,1] # "*" AND LINE[1,1] # "!" THEN                CALL.POS = INDEX( LINE, 'CALL ', 1 )                QCPOS = CALL.POS                GOSUB QUOTE.CHECK       ;* Make sure the "CALL " is not in a quote                SKIP.LINE = 0                IF IN.QUOTE THEN SKIP.LINE = 1 ELSE                    MID.CMNT.POS = INDEX(LINE,';*',1)                    IF MID.CMNT.POS AND MID.CMNT.POS < CALL.POS THEN* Is the mid-line comment within a quote?                        QCPOS = MID.CMNT.POS                        GOSUB QUOTE.CHECK                        IF NOT(IN.QUOTE) THEN SKIP.LINE = 1                    END                END                IF SKIP.LINE THEN       ;* This is happening inside a literal string, ignore it.                    IDX.POS += 1                    CONTINUE                END                TEMP.STR = LINE[1,CALL.POS]                SUBNAME = LINE[CALL.POS+5,999]                IF INDEX( SUBNAME,'(',1) THEN                    SUBNAME = FIELD( SUBNAME, '(', 1 )                END ELSE SUBNAME = FIELD(SUBNAME,' ',1)                SUBNAME = TRIM(SUBNAME)*                *PJS 07-09-15* BEGIN JBASE                               *READ CATPTR FROM F.MD, SUBNAME ELSE CATPTR = ""                *IF CATPTR # "" THEN                *    SUBFILE = FIELD( CATPTR<4>, ' ', 1 )                *END ELSE SUBFILE = filename                               *jBASE does not use catalog pointers - use jshow to get source file name                EXECUTE 'jshow -c ':SUBNAME CAPTURING JSHOW.OUT                FNAME.POS = INDEX(JSHOW.OUT,SUBNAME:' source file ',1)                IF FNAME.POS > 0 THEN SUBFILE = TRIM(FIELD(JSHOW.OUT[FNAME.POS + LEN(SUBNAME) + 13, 9999], @AM, 1)) ELSE SUBFILE = filename                *PJS 07-09-15* END JBASE   *                                             UKEY = SUBFILE:"*":SUBNAME                LOCATE UKEY IN SUBLIST<3> SETTING FOUND.POS THEN                    SUBLIST<4,FOUND.POS,-1> = LINE.NUM                END ELSE                    SUBLIST<1,LPOS> = SUBFILE                    SUBLIST<2,LPOS> = SUBNAME                    SUBLIST<3,LPOS> = UKEY                    SUBLIST<4,LPOS> = LINE.NUM                    LPOS += 1                END            END            IDX.POS += 1        REPEAT        RETURN*BUILD.INCLIST:      * Build a list of include items used by this program*        IDX.POS = 1        LPOS = 1        LOOP            POS = INDEX( record, "INCLUDE ", IDX.POS )        WHILE POS DO            LINE.NUM = DCOUNT(record[1,POS+1],@AM)            LINE = TRIM(record<LINE.NUM>)            SEMI.POS = INDEX( LINE, ';', 1 )            IF SEMI.POS THEN LINE = LINE[1,SEMI.POS-1]            IF TRIM(LINE[1,8]) = "INCLUDE" THEN                INC.POS = INDEX( LINE, 'INCLUDE ', 1 )                QCPOS = INC.POS                GOSUB QUOTE.CHECK                IF IN.QUOTE THEN        ;* This is happening inside a literal string, ignore it.                    IDX.POS += 1                    CONTINUE                END                INCPARAM = LINE[INC.POS+8,999]                INCFILE = FIELD( INCPARAM, ' ', 1 )                INCITEM = FIELD( INCPARAM, ' ', 2 )                IF INCITEM = '' THEN                    INCITEM = INCFILE                    INCFILE = filename                END                UKEY = INCFILE:"*":INCITEM                LOCATE UKEY IN INCLIST<3> SETTING FOUND.POS THEN                    INCLIST<4,FOUND.POS,-1> = LINE.NUM                END ELSE                    INCLIST<1,LPOS> = INCFILE                    INCLIST<2,LPOS> = INCITEM                    INCLIST<3,LPOS> = UKEY                    INCLIST<4,LPOS> = LINE.NUM                    LPOS += 1                END            END            IDX.POS += 1        REPEAT        RETURN*BUILD.FILELIST:     * Build a list of files used by this program*        IDX.POS = 1        LPOS = 1        LOOP            POS = INDEX( record, "OPEN ",IDX.POS )        WHILE POS DO            LINE.NUM = DCOUNT(record[1,POS+1],@AM)            LINE = TRIM(record<LINE.NUM>)            IF LINE[1,1] # "*" AND LINE[1,1] # "!" THEN                OPOS = INDEX( LINE, 'OPEN ', 1 )                QCPOS = OPOS                GOSUB QUOTE.CHECK       ;* Make sure this doesn't appear inside a literal string                IF IN.QUOTE THEN                    IDX.POS += 1                    CONTINUE                END                CONVERT "'" TO '"' IN LINE        ;* Standaraize the quote character                CONVERT "\" TO '"' IN LINE* An open statement may look like this: OPEN "","FILENAME"  - Get rid of the "", if it exists                DPOS = INDEX( LINE, '"",', 1 )                IF DPOS THEN                    LINE = LINE[1,DPOS-1]:LINE[DPOS+3,999]                END                OPARAM = LINE[OPOS+5,999]                TPOS = INDEX( OPARAM, ' TO ', 1 )                IF NOT(TPOS) THEN                    IDX.POS += 1                    CONTINUE  ;* Must not be an open statement.                END                FILEVAR = OPARAM[TPOS+4,999]                FILEVAR = FIELD( TRIM( FILEVAR ), ' ', 1 )                OPARAM = OPARAM[1,TPOS]*3-9-15*    FILENAME = TRIM(OPARAM)*3-9-15*    IF FILENAME[1,1] = '"' THEN FILENAME = FIELD(FILENAME,'"',2)*3-9-15*    UKEY = FILENAME:"*":FILEVAR                FILENAME.VAR = TRIM(OPARAM)       ;*3-9-15*                IF FILENAME.VAR[1,1] = '"' THEN FILENAME.VAR = FIELD(FILENAME.VAR,'"',2)  ;*3-9-15*                UKEY = FILENAME.VAR:"*":FILEVAR   ;*3-9-15*                LOCATE UKEY IN FILELIST<4> SETTING FOUND.POS THEN                    FILELIST<5,FOUND.POS,-1> = LINE.NUM                END ELSE*3-9-15*      FILELIST<1,LPOS> = FILENAME                    FILELIST<1,LPOS> = FILENAME.VAR         ;*3-9-15*                    FILELIST<2,LPOS> = FILEVAR                    FILELIST<3,LPOS,1> = "Open"                    FILELIST<4,LPOS> = UKEY                    FILELIST<5,LPOS,1> = LINE.NUM                    F.R.IDX = 1; F.R.LINES = ""                    LOOP                        F.R.POS = INDEX( record, "FROM ":FILEVAR, F.R.IDX )                    WHILE F.R.POS DO                        F.R.IDX += 1                        IF F.R.LINES # "" THEN F.R.LINES := ","                        F.R.LINES := DCOUNT(record[1,F.R.POS+1],@AM)                    REPEAT                    IF F.R.IDX > 1 THEN* Read operation                        FILELIST<3,LPOS,-1> = "Read"                        FILELIST<5,LPOS,-1> = F.R.LINES                    END*                    F.W.IDX = 1 ; F.W.LINES = ""                    LOOP                        F.W.POS =  INDEX( record, "ON ":FILEVAR, F.W.IDX )                    WHILE F.W.POS DO                        F.W.IDX += 1                        IF F.W.LINES # "" THEN F.W.LINES := ","                        F.W.LINES := DCOUNT(record[1,F.W.POS+1],@AM)                    REPEAT                    IF F.W.IDX > 1 THEN* Write operation                        FILELIST<3,LPOS,-1> = "Write"                        FILELIST<5,LPOS,-1> = F.W.LINES                    END*                    F.D.IDX = 1 ; F.D.LINES = ""                    LOOP                        F.D.POS =  INDEX( record, "DELETE ":FILEVAR, F.D.IDX )                    WHILE F.D.POS DO                        F.D.IDX += 1                        IF F.D.LINES # "" THEN F.D.LINES := ","                        F.D.LINES := DCOUNT(record[1,F.D.POS+1],@AM)                    REPEAT                    IF F.D.IDX > 1 THEN* Delete operation                        FILELIST<3,LPOS,-1> = "Delete"                        FILELIST<5,LPOS,-1> = F.D.LINES                    END                    LPOS += 1                END            END            IDX.POS += 1        REPEAT        RETURN*QUOTE.CHECK:        * Is the data in LINE at QCPOS inside quotes?*        CURR.Q = ""        FOR SEEK.POS = 1 TO QCPOS            QCH = LINE[SEEK.POS,1]            BEGIN CASE            CASE CURR.Q # ""                IF QCH = CURR.Q THEN                    CURR.Q = ""                END            CASE QCH = "'" ; CURR.Q = QCH            CASE QCH = '"' ; CURR.Q = QCH            CASE QCH = '\' ; CURR.Q = QCH            END CASE        NEXT SEEK.POS        IF CURR.Q # "" THEN IN.QUOTE = 1 ELSE IN.QUOTE = 0        RETURN006251MVDB.ADMIN0c2* Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Administration area of Bravo Dashboard** 09-23-16 Peter Schellenbach*  Add support for alternate logo defined for each user (MVDB.USERS attr 7).*  Requires corresponding changes in WEB.FORMS admin_template.html and*  javascripts initAdminTemplate.js to edit the alternate logo field.**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.USERSINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*DIM DB.AREAS(5)*OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MVDB.SUBS' TO F.MVDB.SUBS ELSE STOP 201, 'MVDB.SUBS'OPEN '','MVDB.USERS' TO F.MVDB.USERS ELSE STOP 201, 'MVDB.USERS'OPEN '','MVDB.DEFS' TO F.MVDB.DEFS ELSE STOP 201, 'MVDB.DEFS'OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE STOP 201, 'MVDB.WIDGET.TYPES'OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'OPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE STOP 201, 'MVDB.THEMES'*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDENDIF THEME.CSS # '' THEN THEME.CSS = '<link rel="Stylesheet" href="/db/themes/':THEME.CSS:'" media="screen" type="text/css" />'IF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'**SESSION$GLOBAL.DEBUG = 1*GLOBAL.INFO(100) = 0CALL GET.SESSION.VAR("adminauth",adminauth)CALL PUT.SESSION.VAR("dd_mode",0)adminpass = ""IF adminauth # 1 THEN  FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'  FORM := '</head><body><p>Administrative priviledges are required. '  FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'  CALL WEB.SEND(FORM)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPEND*LOCATE "action" IN CGI$VARS SETTING POS THEN  action = CGI$VALS<POS>END ELSE action = ""LOCATE "filter" IN CGI$VARS SETTING POS THEN  filter = CGI$VALS<POS>END ELSE  CALL GET.SESSION.VAR("widget_filter",filter)ENDLOCATE "clearfilter" IN CGI$VARS SETTING POS THEN  filter = ""ENDCALL PUT.SESSION.VAR("widget_filter",filter)*LOCATE "unfail_widget" IN CGI$VARS SETTING POS THEN  UNFAIL.WIDGET = CGI$VALS<POS>  CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  LOCATE UNFAIL.WIDGET IN FAILED.WIDGETS SETTING DPOS THEN    FAILED.WIDGETS = DELETE( FAILED.WIDGETS, DPOS, 0, 0 )    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  END  action = "widgets"END*ACTIVE.MENU = ''HTML = ''SCRIPTS = ""BEGIN CASE  CASE action = "users" OR action = ""    GOSUB LOAD.USERS  CASE action = "widgets"    GOSUB LOAD.WIDGETS  CASE action = "save_widget"    LOCATE "save_widget" IN CGI$VARS SETTING POS THEN      LOCATE "save_widgetid" IN CGI$VARS SETTING POS THEN        save.widgetid = CGI$VALS<POS>        LOCATE "newwidget" IN CGI$VARS SETTING POS THEN          newwidget = (CGI$VALS<POS> = 1)        END ELSE newwidget = ""        IF newwidget = 1 THEN          LOCATE "new_widgetid" IN CGI$VARS SETTING POS THEN            save.widgetid = CGI$VALS<POS>          END        END ELSE newwidget = 0        IF newwidget THEN          MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, save.widgetid THEN            SQN = 1            LOOP              new.saveid = save.widgetid:"-":SQN              MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, new.saveid THEN                SQN += 1              END ELSE                save.widgetid = new.saveid                EXIT              END            REPEAT          END        END        IF save.widgetid # "" THEN          MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, save.widgetid ELSE MAT WIDGET.ITEM = ''          LOCATE "widget_sub" IN CGI$VARS SETTING POS THEN            WIDGET.SUB = CGI$VALS<POS>          END          LOCATE "widget_users" IN CGI$VARS SETTING POS THEN            USER.LIST = CGI$VALS<POS>            CONVERT "," TO @VM IN USER.LIST            WIDGET.USERS = USER.LIST          END ELSE WIDGET.USERS = ""          LOCATE "new_widget_name" IN CGI$VARS SETTING POS THEN            NEW.NAME = CGI$VALS<POS>            IF NEW.NAME = save.widgetid THEN NEW.NAME = ""          END ELSE NEW.NAME = ""          IF NEW.NAME # "" THEN            * A rename of the widget has occurred.            MATWRITE WIDGET.ITEM ON F.MVDB.WIDGETS, NEW.NAME            DELETE F.MVDB.WIDGETS, save.widgetid            * Rename instances of this widget name within dashboard definitions            SELECT F.MVDB.DEFS            LOOP              READNEXT DBID ELSE EXIT              MATREADU DB.ITEM FROM F.MVDB.DEFS, DBID ELSE CONTINUE              LOOP                LOCATE save.widgetid IN DB.WIDGETS<1> SETTING RPOS THEN                  FOUND = 1                  DB.WIDGETS<1,RPOS> = NEW.NAME                END ELSE FOUND = 0              WHILE FOUND DO REPEAT              MATWRITE DB.ITEM ON F.MVDB.DEFS, DBID            REPEAT          END ELSE            MATWRITE WIDGET.ITEM ON F.MVDB.WIDGETS, save.widgetid          END        END      END    END ELSE      LOCATE "delete_widget" IN CGI$VARS SETTING POS THEN        LOCATE "save_widgetid" IN CGI$VARS SETTING POS THEN          save.widgetid = CGI$VALS<POS>          DELETE F.MVDB.WIDGETS, save.widgetid        END      END    END    GOSUB LOAD.WIDGETS  CASE action = "dashboards"    GOSUB LOAD.DASHBOARDS  CASE action = "editdb" OR action = "adddb"    ACTIVE.MENU = "DASHBOARDS"    READ INNER.TEMPLATE FROM F.WEB.FORMS, "admin_dashboards.html" ELSE INNER.TEMPLATE = "admin_dashboards.html not found"    DASHBOARD.LIST = ''    EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNK    LOOP      READNEXT ID ELSE EXIT      DASHBOARD.LIST<-1> = ID    REPEAT    CALL SWAP(DASHBOARD.LIST, CHAR(254), '","')    DASHBOARD.LIST = '"':DASHBOARD.LIST:'"'    CALL SWAP(INNER.TEMPLATE,'<!-- list_of_dashboard_ids -->',DASHBOARD.LIST)    *    IF action = "adddb" THEN      edit.id = "new_db"      EDIT.PROMPT = '<input id="edit_dbid" type="text" value="Untitled Dashboard" name="edit_dbid"/>'      CALL SWAP(INNER.TEMPLATE,'<!-- save_dbid -->',edit.id)      CALL SWAP(INNER.TEMPLATE,'<!-- edit_dbid -->',EDIT.PROMPT)      MAT DB.ITEM = ''    END ELSE      LOCATE "edit_dbid" IN CGI$VARS SETTING POS THEN        edit.id = CGI$VALS<POS>      END ELSE edit.id = ""      *      MATREAD DB.ITEM FROM F.MVDB.DEFS, edit.id ELSE MAT DB.ITEM = ''      *      EDIT.PROMPT = '<input id="db_id" type="text" value="':edit.id:'" name="db_new_id" size="63" />'       CALL SWAP(INNER.TEMPLATE,'<!-- save_dbid -->',edit.id)      CALL SWAP(INNER.TEMPLATE,'<!-- edit_dbid -->',EDIT.PROMPT)    END    CALL MVDB.SUB.WIDGET.LIST(WIDGET.LIST)    *    SCRIPT1 = 'var widgetList = new Array("");':CHAR(10)    CALL SWAP(INNER.TEMPLATE,'<!-- db_desc -->',DB.DESC)    CALL SWAP(INNER.TEMPLATE,'<!-- db_sort -->',DB.SORT)    *    *DB.THEME db_theme select list    *    theme.select = '<select name="db_theme">'    theme.select := CHAR(10):'<option value="">Default Theme</option>'    EXECUTE 'SSELECT MVDB.THEMES' CAPTURING JUNK    THEME.LIST = ''    LOOP      READNEXT THEME.ID ELSE EXIT      READV CSS.NAME FROM F.MVDB.THEMES, THEME.ID, 1 ELSE CSS.NAME = ''      IF CSS.NAME # '' THEN        SELECTED = ''        IF THEME.ID = DB.THEME THEN SELECTED = ' selected'        theme.select := CHAR(10):'<option value="':THEME.ID:'"':SELECTED:'>':THEME.ID:'</option>'      END    REPEAT    theme.select := CHAR(10):'</select>':CHAR(10)    CALL SWAP(INNER.TEMPLATE,'<!-- db_theme -->',theme.select)        CALL SWAP(INNER.TEMPLATE,'<!-- db_sort -->',DB.SORT)    *    SHOW.USERS = DB.USERS.ALLOWED    CONVERT @VM TO "," IN SHOW.USERS    CALL SWAP(INNER.TEMPLATE,'<!-- db_users -->',SHOW.USERS)    *    ACTIVE1 = "" ; ACTIVE2 = "" ; ACTIVE3 = ""    IF DB.TEMPLATE = "" THEN DB.TEMPLATE = 1    SCRIPT1 := 'var defaultLayout=':DB.TEMPLATE:';':CHAR(10)    BEGIN CASE      CASE DB.TEMPLATE = 3 ; ACTIVE3 = 'class="active"'      CASE DB.TEMPLATE = 2 ; ACTIVE2 = 'class="active"'      CASE DB.TEMPLATE = 1 OR 1 ; ACTIVE1 = 'class="active"'    END CASE    LAYOUT.OPTS  = '<li ':ACTIVE1:'><label>1 column</label><img alt="1" src="/db/images/1-column-layout.png" /></li>'    LAYOUT.OPTS := '<li ':ACTIVE2:'><label>2 column</label><img alt="2" src="/db/images/2-column-layout.png" /></li>'    LAYOUT.OPTS := '<li ':ACTIVE3:'><label>3 column</label><img alt="3" src="/db/images/3-column-layout.png" /></li>'    *    CALL SWAP(INNER.TEMPLATE,'<!-- db_layout_opts -->',LAYOUT.OPTS)    *    * Create a list of widgets by area    *    MAT DB.AREAS = ""    FOR X = 1 TO DCOUNT( DB.WIDGETS, @VM )      WID = DB.WIDGETS<1,X>      CALL SWAP(WID,'"','\"')      LOCATE WID IN WIDGET.LIST<1> SETTING WPOS THEN        WWIDTH = WIDGET.LIST<6,WPOS>        WTYPE = WIDGET.LIST<4,WPOS>        FAIL.TEXT = WIDGET.LIST<8,WPOS>      END ELSE        WTYPE = "UNKNOWN"        WWIDTH = 1        FAIL.TEXT = ""      END      THIS.AREA = DB.WIDGET.AREA<1,X>      IF NOT(THIS.AREA MATCHES "1N") THEN THIS.AREA = 1      IF THIS.AREA < 1 OR THIS.AREA > 5 THEN THIS.AREA = 1      MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, WTYPE THEN        CLASS.NAME = FIELD(WT$ICON,'.',1)        CONVERT "_" TO "-" IN CLASS.NAME        WIDTH.CLASS = ""        BEGIN CASE          CASE WWIDTH = 1 ; WIDTH.CLASS = 'widget-small'          CASE WWIDTH = 2 ; WIDTH.CLASS = 'widget-medium'          CASE WWIDTH = 3 OR 1; WIDTH.CLASS = 'widget-large'        END CASE        SHOW.WID = WID        IF FAIL.TEXT # "" THEN SHOW.WID := " (":FAIL.TEXT:")"        DB.AREAS(THIS.AREA) := '<div name="':WID:'" class="':CLASS.NAME:'"><span type="':WTYPE:'" class="':WIDTH.CLASS:'" >':SHOW.WID:'</span></div>'      END    NEXT X    FOR X = 1 TO 5      CALL SWAP(INNER.TEMPLATE,'<!-- AREA_':X:'_WIDGETS -->',DB.AREAS(X))    NEXT X    *    * Build widget option list    *    WOPTS = ''    ALL.WIDGET.CNT = DCOUNT( WIDGET.LIST<1>, @VM )    FOR X = 1 TO ALL.WIDGET.CNT      USE.DESC = WIDGET.LIST<2,X>      WID = WIDGET.LIST<1,X>      WDESC = WIDGET.LIST<2,X>      WTYPE = WIDGET.LIST<4,X>      WWIDTH = WIDGET.LIST<6,X>      FAIL.TEXT = WIDGET.LIST<8,X>      CALL SWAP(WDESC,'"','\"')      CALL SWAP(WID,'"','\"')      MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, WTYPE THEN        CLASS.NAME = FIELD(WT$ICON,'.',1)        CONVERT "_" TO "-" IN CLASS.NAME        WIDTH.CLASS = ""        BEGIN CASE          CASE WWIDTH = 1 ; WIDTH.CLASS = 'widget-small'          CASE WWIDTH = 2 ; WIDTH.CLASS = 'widget-medium'          CASE WWIDTH = 3 OR 1; WIDTH.CLASS = 'widget-large'        END CASE        SHOW.WID = WID        IF FAIL.TEXT # "" THEN SHOW.WID := " (":FAIL.TEXT:")"        WOPTS := '<div class="':CLASS.NAME:'"><span name="':WID:'" class="widget-id ':WIDTH.CLASS:'" type="':WTYPE:'">':SHOW.WID:'</span></div>':CHAR(10)      END      SCRIPT1 := \widgetList["\:WID:\"] = new Array("\:WDESC:\","\:WTYPE:\","\:WIDGET.LIST<6,X>:\");\    NEXT X    *    GOSUB MAKE.DB.SCRIPT    SCRIPTS<-1> = SCRIPT1    *    CALL SWAP(INNER.TEMPLATE,'<!-- widget_list -->',WOPTS)    HTML = INNER.TEMPLATE  CASE action = "save_db"    LOCATE "save_db" IN CGI$VARS SETTING POS THEN      SAVE.OK = 1      rename.id = ""      LOCATE "save_dbid" IN CGI$VARS SETTING POS THEN        save.id = CGI$VALS<POS>        IF save.id = "new_db" THEN          LOCATE "edit_dbid" IN CGI$VARS SETTING POS THEN            save.id = CGI$VALS<POS>          END ELSE save.id = ""          IF save.id = "" THEN SAVE.OK = 0 ELSE            MATREAD DB.ITEM FROM F.MVDB.DEFS, save.id THEN SAVE.OK = 0          END        END ELSE          LOCATE "db_new_id" IN CGI$VARS SETTING POS THEN            rename.id = CGI$VALS<POS>          END        END        CONVERT '"\' TO '' IN rename.id        CONVERT '"\' TO '' IN save.id        IF SAVE.OK THEN          MATREAD DB.ITEM FROM F.MVDB.DEFS, save.id ELSE MAT DB.ITEM = ''          LOCATE "db_desc" IN CGI$VARS SETTING POS THEN            DB.DESC = CGI$VALS<POS>          END          LOCATE "db_theme" IN CGI$VARS SETTING POS THEN            DB.THEME = CGI$VALS<POS>          END          LOCATE "db_sort" IN CGI$VARS SETTING POS THEN            DB.SORT = CGI$VALS<POS>          END          LOCATE "db_layout" IN CGI$VARS SETTING POS THEN            DB.TEMPLATE = CGI$VALS<POS>          END          LOCATE "db_users" IN CGI$VARS SETTING POS THEN            DB.USERS.ALLOWED = CGI$VALS<POS>          END          CONVERT "," TO @VM IN DB.USERS.ALLOWED          *          LOCATE "widgets" IN CGI$VARS SETTING POS THEN            WIDGET.LIST = CGI$VALS<POS>          END ELSE WIDGET.LIST = ""          CONVERT CHAR(13) TO @AM IN WIDGET.LIST          CONVERT CHAR(10) TO "" IN WIDGET.LIST          WCNT = DCOUNT( WIDGET.LIST, @AM )          DB.WIDGETS = ''          DB.WIDGET.AREA = ''          DB.WIDGET.ORDER = ''          FOR WX = 1 TO WCNT            THIS.W = WIDGET.LIST<WX>            DB.WIDGET.AREA<1,WX> = FIELD( THIS.W, ',', 1 )            DB.WIDGET.ORDER<1,WX> = FIELD( THIS.W,',', 2 )            DB.WIDGETS<1,WX> = OCONV(THIS.W,'G2,99' )          NEXT WX          IF rename.id # "" AND rename.id # save.id THEN            DELETE F.MVDB.DEFS, save.id            MATWRITE DB.ITEM ON F.MVDB.DEFS, rename.id          END ELSE            MATWRITE DB.ITEM ON F.MVDB.DEFS, save.id          END        END      END    END ELSE      LOCATE "delete_db" IN CGI$VARS SETTING POS THEN        LOCATE "save_dbid" IN CGI$VARS SETTING POS THEN          del.id = CGI$VALS<POS>          DELETE F.MVDB.DEFS, del.id        END      END    END    GOSUB LOAD.DASHBOARDS  CASE action = "save_user"    LOCATE "save_userid" IN CGI$VARS SETTING POS THEN      save.userid = CGI$VALS<POS>      LOCATE "delete_user" IN CGI$VARS SETTING POS THEN        DELETE F.MVDB.USERS, save.userid      END ELSE        LOCATE "newuser" IN CGI$VARS SETTING POS THEN          newuser = 1          LOCATE "new_userid" IN CGI$VARS SETTING POS THEN            save.userid = CGI$VALS<POS>          END        END ELSE newuser = 0        SAVE.OK = 1        IF newuser THEN          MATREAD USER.ITEM FROM F.MVDB.USERS, save.userid THEN            SAVE.OK = 0          END        END        IF SAVE.OK AND save.userid # "" THEN          MATREAD USER.ITEM FROM F.MVDB.USERS, save.userid ELSE MAT USER.ITEM = ''          LOCATE "username" IN CGI$VARS SETTING POS THEN            USER.NAME = CGI$VALS<POS>          END          LOCATE "default_dashboard" IN CGI$VARS SETTING POS THEN            USER.DEFAULT.DB = CGI$VALS<POS>          END          LOCATE "user_password" IN CGI$VARS SETTING POS THEN            IF CGI$VALS<POS> # "" THEN              USER.PASSWORD = OCONV(CGI$VALS<POS>,"U3060")            END          END          LOCATE "user_role" IN CGI$VARS SETTING POS THEN            USER.ROLE = CGI$VALS<POS>          END          IF USER.ROLE = "" THEN USER.ROLE = "User"          * PJS 09-23-16 save optional user logo          LOCATE "opt_logo_path" IN CGI$VARS SETTING POS THEN            USER.ALT.LOGO = CGI$VALS<POS>          END ELSE            USER.ALT.LOGO = ""          END          MATWRITE USER.ITEM ON F.MVDB.USERS, save.userid        END      END    END    GOSUB LOAD.USERS  CASE 1    READ HTML FROM F.WEB.FORMS, "admin_menu.html" ELSE ADMIN.MENU = "admin_menu.html not found."END CASEREAD ADMIN.TEMPLATE FROM F.WEB.FORMS, "admin_template.html" ELSE ADMIN.TEMPLATE = "admin_template.html not found."CALL SWAP(ADMIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)HEADER = '<div id="dashboard_nav">'HEADER := '<ol class="dashboard_list">'IF ACTIVE.MENU = "USERS" THEN ACTIVE = 'class="db_active"' ELSE ACTIVE = ""HEADER := '<li ':ACTIVE:'><a href="':CGI$PATH:'/MVDB.ADMIN?action=users">Users</a></li>'IF ACTIVE.MENU = "WIDGETS" THEN ACTIVE = 'class="db_active"' ELSE ACTIVE = ""HEADER := '<li ':ACTIVE:'><a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets">Widgets</a></li>'IF ACTIVE.MENU = "DASHBOARDS" THEN ACTIVE = 'class="db_active"' ELSE ACTIVE = ""HEADER := '<li ':ACTIVE:'><a href="':CGI$PATH:'/MVDB.ADMIN?action=dashboards">Dashboards</a></li>'OPEN 'RSS.BP' TO F.RSS.BP THEN  HEADER := '<li><a href="':CGI$PATH:'/RSS.MAINT">RSS Feed Maintenance</a></li>'ENDOPEN 'MVPKG.DATA' TO F.MVPKG.DATA THEN  HEADER := '<li><a href="':CGI$PATH:'/MVPKG.MAIN">Package Manager</a></li>'ENDHEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN">Return to Dashboard</a></li>'HEADER := '</ol>'HEADER := '</div>'CALL SWAP(ADMIN.TEMPLATE,'<!-- HEADER -->',HEADER)FOOTER = ''CALL SWAP(ADMIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)*CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_MAIN -->',HTML)CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_SCRIPTS -->',SCRIPTS)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)CALL WEB.SEND(ADMIN.TEMPLATE)GLOBAL.INFO(100) = 1 ;* Process completed successfullySTOP*LOAD.USERS: **    ACTIVE.MENU = "USERS"    EXECUTE 'SSELECT MVDB.USERS' CAPTURING JUNK    HTML = '<table width="100%">'    HTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adduser" class="add-user">Add User</a></td></tr>'    HTML<-1> = '<tr><th>User ID</th>'    HTML<-1> = '<th>Name</th>'     HTML<-1> = '<th>Default Dashboard</th>'    HTML<-1> = '<th>Role</th>'    HTML<-1> = '<th>Action</th>'     HTML<-1> = '</tr>'    *    LOOP      READNEXT ID ELSE EXIT      MATREAD USER.ITEM FROM F.MVDB.USERS, ID ELSE MAT USER.ITEM = ""      IF USER.ROLE = "" THEN USER.ROLE = "User"      HTML<-1> = '<tr><td>':ID:'</td>'      HTML<-1> = '<td>':USER.NAME:'</td>'      HTML<-1> = '<td>':USER.DEFAULT.DB:'</td>'      CALL SWAP(ID,'"','\"')      CALL SWAP(USER.NAME,'"','\"')      CALL SWAP(USER.DEFAULT.DB,'"','\"')      CALL SWAP(USER.DEFAULT.DB,"'","&apos;")      * PJS 09-23-16: added USER.ALT.LOGO parameter to editUser()      ACTIONS = \&nbsp;<a href='javascript:editUser("\:ID:\","\:USER.NAME:\","\:USER.DEFAULT.DB:\","\:USER.ROLE:\","\:USER.ALT.LOGO:\");'><img title="Edit User" class="icon" src="/db/icons/user_edit.png" /></a>\      ACTIONS := \&nbsp;<a href='javascript:deleteUser("\:ID:\");'><img title="Delete User" class="icon" src="/db/icons/user_delete.png" /></a>\      HTML<-1> = '<td>':USER.ROLE:'</td>'      HTML<-1> = '<td>':ACTIONS:'</td>'      HTML<-1> = '</tr>'    REPEAT    HTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adduser" class="add-user">Add User</a></td></tr>'    HTML<-1> = '</table>'    *    GOSUB MAKE.DB.SCRIPTRETURN*LOAD.WIDGETS: **ACTIVE.MENU = "WIDGETS"CALL MVDB.SUB.WIDGET.LIST(WIDGET.LIST)FFORM = '<form action="':CGI$PATH:'/MVDB.ADMIN" method="get">'FFORM := '<input type="hidden" name="action" value="widgets">'FFORM := 'Filter: <input type="text" name="filter" value="':filter:'"> <input type=submit name=fbtn value="Go">'IF filter # "" THEN FFORM := ' <a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets&clearfilter">Clear Filter</a>'FFORM := '</form>'HTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="3"><a href="':CGI$PATH:'/MVDB.ADMIN?action=addwidget" class="add-widget">Add a Widget</a></td>'HTML<-1> = '<td colspan="4" align="right">':FFORM:'</td></tr>'HTML<-1> = '<tr><th colspan="2">Widget ID</th>'HTML<-1> = '<th>Type</th>' HTML<-1> = '<th>Description</th>' HTML<-1> = '<th>Subroutine</th>' HTML<-1> = '<th>Users Allowed</th>' HTML<-1> = '<th>Actions</th>' HTML<-1> = '</tr>'*WIDGET.CNT = DCOUNT( WIDGET.LIST<1>, @VM )FOR WDX = 1 TO WIDGET.CNT  ID = WIDGET.LIST<1,WDX>  WDESC = WIDGET.LIST<2,WDX>  WSUB = WIDGET.LIST<3,WDX>  WTYPE = WIDGET.LIST<4,WDX>  WTITLE = WIDGET.LIST<5,WDX>  WWIDTH = WIDGET.LIST<6,WDX>  FAIL.STATUS = WIDGET.LIST<7,WDX>  FAIL.TEXT = WIDGET.LIST<8,WDX>  MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, WTYPE ELSE MAT WIDGET.TYPES = ""  IF filter # "" THEN    FILTER.MATCH = 0    IF INDEX(WDESC,filter,1) THEN FILTER.MATCH = 1    IF INDEX(WTITLE,filter,1) THEN FILTER.MATCH = 1    IF INDEX(WSUB,filter,1) THEN FILTER.MATCH = 1  END ELSE FILTER.MATCH =1  IF FILTER.MATCH THEN    IF WT$ICON # "" THEN      ICON.IMG = '<img height="20" width="20" src="/db/icons/':WT$ICON:'" />'    END ELSE ICON.IMG = "&nbsp;"    ID.LINK = ID    CALL SUB.URL.ENCODE(ID.LINK)    ID.LINK = '<a href="':CGI$PATH:'/MVDB.MAIN?udview=':ID.LINK:'&dd" target="_blank" title="Open in new window">':ID:'</a>'    HTML<-1> = '<tr><td class="widget-name">':ID.LINK:'</td><td class="widget-icon">':ICON.IMG:'</td>'    HTML<-1> = '<td>':WTYPE:'</td>'    IF WTITLE = "" THEN WTITLE = WDESC    HTML<-1> = '<td>':WTITLE:'</td>'    ENC.WIDGET.SUB = WSUB    CALL SUB.URL.ENCODE(ENC.WIDGET.SUB)    HTML<-1> = '<td><a target="MVDB.SUBS_':ENC.WIDGET.SUB:'" href="':CGI$PATH:'/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=':ENC.WIDGET.SUB:'" title="Edit Source">':WSUB:'</a></td>'    MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, ID ELSE MAT WIDGET.ITEM = ""    IF WIDGET.USERS # "" THEN      SHOW.USERS = WIDGET.USERS      CONVERT @VM TO "," IN SHOW.USERS      PASS.USER.LIST = SHOW.USERS    END ELSE      SHOW.USERS = "Anybody"      PASS.USER.LIST = ""    END    HTML<-1> = '<td>':SHOW.USERS:'</td>'    CALL SWAP(WDESC,"'","\'")    CALL SWAP(WSUB,"'","\'")    CALL SWAP(PASS.USER.LIST,"'","\'")    URL.ID = ID    CALL SUB.URL.ENCODE(URL.ID)    CALL SWAP(ID,"'","\'")    ACTIONS = \<a href="javascript:editWidget('\:ID:\','\:WDESC:\','\:WSUB:\','\:PASS.USER.LIST:\');"><img title="Edit Widget" class="icon" src="/db/icons/cog_edit.png" /></a>\    ACTIONS := '&nbsp;'    ACTIONS := \<a href="javascript:copyWidget('Copy of \:ID:\','\:WDESC:\','\:WSUB:\','\:PASS.USER.LIST:\');"><img title="Copy Widget" class="icon" src="/db/icons/page_copy.png" /></a>\    ACTIONS := '&nbsp;'    ACTIONS := \<a href="javascript:deleteWidget('\:ID:\','\:WDESC:\','\:WSUB:\','\:PASS.USER.LIST:\');"><img title="Delete Widget" class="icon" src="/db/icons/cog_delete.png" /></a>\    IF FAIL.STATUS = 1 THEN      * This widget has a fatal error and has been added to the "failed_widgets" session variable. Allow the admin to reset this status.      ACTIONS := \&nbsp;<a href="/dbc/MVDB.ADMIN?unfail_widget=\:URL.ID:\&action=widgets"><img title="Reset Fail Status" class="icon" src="/db/icons/arrow_redo.png" /></a>\    END    HTML<-1> = '<td>':ACTIONS:'</td>'    HTML<-1> = '</tr>'  ENDNEXT WDXHTML<-1> = '<tr><td colspan="7"><a href="" class="add-widget">Add a Widget</a></td></tr>'HTML<-1> = '</table>'*SCRIPTS = 'var widgetList = new Array('EXECUTE "SSELECT MVDB.WIDGETS" CAPTURING JUNKFIRST = 1LOOP  READNEXT ID ELSE EXIT  CALL SWAP(ID,'"','\"')  IF NOT(FIRST) THEN SCRIPTS := ','  FIRST = 0  SCRIPTS := '"':ID:'"'REPEATSCRIPTS := ');'RETURN*LOAD.DASHBOARDS: **ACTIVE.MENU = "DASHBOARDS"EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNKHTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adddb" class="add-dashboard">Add A Dashboard</a></td></tr>'HTML<-1> = '<tr><th>Dashboard ID</th>'HTML<-1> = '<th>Description</th>' HTML<-1> = '<th>Users Allowed</th>' HTML<-1> = '<th>Actions</th>' HTML<-1> = '</tr>'*LOOP  READNEXT ID ELSE EXIT  MATREAD DB.ITEM FROM F.MVDB.DEFS, ID ELSE MAT DB.ITEM = ''  HTML<-1> = '<tr><td>':ID:'</td>'  HTML<-1> = '<td>':DB.DESC:'</td>'  IF DB.USERS.ALLOWED # "" THEN    SHOW.USERS = DB.USERS.ALLOWED    CONVERT @VM TO "," IN SHOW.USERS  END ELSE SHOW.USERS = "Anybody"  HTML<-1> = '<td>':SHOW.USERS:'</td>'  ACTIONS = '<a href="':CGI$PATH:'/MVDB.ADMIN?action=editdb&edit_dbid=':ID:'"><img title="Edit Dashboard" class="icon" src="/db/icons/layout_edit.png" /></a>&nbsp;'  ACTIONS := \<a onClick="return confirm('DELETE: Are you sure?');" href="\:CGI$PATH:\/MVDB.ADMIN?action=save_db&delete_db=1&save_dbid=\:ID:\"><img title="Delete Dashboard" class="icon" src="/db/icons/layout_delete.png" /></a>\  HTML<-1> = '<td>':ACTIONS:'</td>'  HTML<-1> = '</tr>'REPEATHTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adddb" class="add-dashboard">Add A Dashboard</a></td></tr>'HTML<-1> = '</table>'RETURN*MAKE.DB.SCRIPT: **SCRIPTS = 'var dashboardList = new Array('EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNKFIRST = 1LOOP  READNEXT ID ELSE EXIT  CALL SWAP(ID,'"','\"')  IF NOT(FIRST) THEN SCRIPTS := ','  FIRST = 0  SCRIPTS := '"':ID:'"'REPEATSCRIPTS := ');'RETURN0002DCGET.SESSION.VAR0c2SUBROUTINE GET.SESSION.VAR( var, VAL )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program reads a value from the current web*              session record.*#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)VAL = ''*READ REC FROM F.WEB.SESSION, SESSION$ID THEN  LOCATE var IN REC<1> SETTING POS THEN    VAL = REC<2,POS>  END ELSE    VAL = ''  ENDEND*CONVERT CHAR(2) TO @AM IN VALCONVERT CHAR(3) TO @VM IN VALCONVERT CHAR(4) TO @SVM IN VAL*CALL PUT.SESSION.VAR('LastSessionAccess', DATE():'*':TIME())*RETURN*000E53SUB.EXCEL.FUNC0c2SUBROUTINE SUB.EXCEL.FUNC(ACTION,SPREADSHEET,CSV.WIDGET.NAME)** Copyright (c) 2020 Zumasys, Inc. All rights reserved.* Description: EXCEL utility functions*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE***SPREADSHEET=''** ISOLATE THE TITLE*BEGIN CASE  CASE ACTION = 'generate'         * Use widget name to create a filename for the CSV file         OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'         CALL SUB.GET.NEXT.ID(UNIQUE.ID,F.MVDB.CONTROL)             CSV.FILE.NAME = CSV.WIDGET.NAME:'_' :UNIQUE.ID         CALL SET.CONTENT.TYPE('text/csv')         SESSION$HEADERS<-1> = 'Content-Disposition: attachment; filename="':CSV.FILE.NAME:'.csv"'         * Build the CSV content         GOSUB BUILD.SPREADSHEET.CONTENT         SPREADSHEET=CHANGE(SPREADSHEET,CHAR(254),CHAR(13):CHAR(10))         CSV.SIZE=LEN(SPREADSHEET)         SESSION$HEADERS<-1>='Content-Length:':CSV.SIZEEND CASERETURN*BUILD.SPREADSHEET.CONTENT:*BEGIN CASE   CASE W$TYPE = 'TABLE'      GOSUB TYPE.IS.TABLE      DASHBOARD.TYPE='Report'   CASE INDEX(W$TYPE,'COLUMN',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'BAR',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'LINE',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'AREA',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'PIE',1)      GOSUB TYPE.IS.PIE      DASHBOARD.TYPE='Pie'   CASE INDEX(W$TYPE,'DOUGHNUT',1)      GOSUB TYPE.IS.PIE      DASHBOARD.TYPE='Pie'END CASE** STRIP OUT HTML STUFF AND CONVERT TO CSV*MAX.ROWS=DCOUNT(SPREADSHEET,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=SPREADSHEET<ROW.NO>   *   * <br> to space   *   LOOP      POS=INDEX(ROW,'<br>',1)   UNTIL NOT(POS) DO      ROW=ROW[1,POS-1]:' ':(ROW[POS+4,9999])   REPEAT   *   * ISOLATE XXX IN ]<a hrev.....">XXX</a>]   *   LOOP      POS=INDEX(ROW,'</a>',1)   UNTIL NOT(POS) DO      VAL.NO=DCOUNT(ROW[1,POS],CHAR(253))      VAL=ROW<1,VAL.NO>      POS=INDEX(VAL,'</a>',1)      VAL=VAL[1,POS-1]      POS=INDEX(VAL,'">',1)      VAL=VAL[POS+2,999]      ROW<1,VAL.NO>=VAL   REPEAT   MAX.VALS=DCOUNT(ROW,CHAR(253))   FOR VAL.NO = 1 TO MAX.VALS      IF DASHBOARD.TYPE = 'Chart' AND VAL.NO > 1 THEN         VAL=ROW<1,VAL.NO>         IF NUM(VAL) AND NOT(INDEX(VAL,',',1)) THEN VAL=OCONV(VAL,'MD0,')         ROW<1,VAL.NO>=VAL       END      ROW<1,VAL.NO>='"':ROW<1,VAL.NO>:'"'    NEXT VAL.NO   SPREADSHEET<ROW.NO>=ROW NEXT ROW.NOCONVERT CHAR(253) TO ',' IN SPREADSHEETRETURN*TYPE.IS.TABLE:*SPREADSHEET<-1>=W$TABLE.COL.LABELSSPREADSHEET<-1>=W$TABLE.DATASPREADSHEET<-1>=W$TABLE.TOTALSRETURN*TYPE.IS.BAR.OR.COLUMN:*SPREADSHEET<-1>='Displayed as: ':W$BAR.YMEMOCOL.HEADINGS=W$BAR.LABELSCONVERT CHAR(254) TO CHAR(253) IN COL.HEADINGS;  * MULTI-SERIES MAY HAVE SEVERALIF COL.HEADINGS<1,2> = '' THEN;  * ONLY ONE THEN USE W$BAR.YMEMO   COL.HEADINGS=W$BAR.YMEMO ENDCOL.HEADINGS=INSERT(COL.HEADINGS,1,1,0,W$BAR.XMEMO)SPREADSHEET<-1>=COL.HEADINGSNUM.ROWS=DCOUNT(W$BAR.XLABELS,CHAR(253))NUM.COL.VALUES=DCOUNT(W$BAR.VALUES,CHAR(254))FOR ROW.NO = 1 TO NUM.ROWS   THIS.ROW=W$BAR.XLABELS<1,ROW.NO>   FOR COL.NO = 1 TO NUM.COL.VALUES      THIS.COL=W$BAR.VALUES<COL.NO,ROW.NO>      IF NUM(THIS.COL) THEN         IF THIS.COL > 999 THEN            THIS.COL=OCONV(THIS.COL,'MD0,')          END       END      THIS.ROW<1,COL.NO+1>=THIS.COL    NEXT COL.NO   SPREADSHEET<-1>=THIS.ROW NEXT ROW.NORETURN*TYPE.IS.PIE:*SPREADSHEET<-1>=W$PIE.LABELSSPREADSHEET<-1>=W$PIE.VALUESRETURNEND0009A5XML.DATA0c2CALL WDB.VARS(VARS, VALS)DISPLAY.TERM = 1WEB.DATA = ''LINE.CNT = 1NUM.BYTES = 0****************************************** q = number of bytes to quit early on* default is full dump****************************************LOCATE 'q' IN VARS SETTING POS THEN  q = VALS<POS>END ELSE  q = ''END****************************************** l = number of lines of text to print* default is 10000****************************************LOCATE 'l' IN VARS SETTING POS THEN  l = VALS<POS>END ELSE  l = 10000END****************************************** b = number of characters per line* default is 10****************************************LOCATE 'b' IN VARS SETTING POS THEN  b = VALS<POS>END ELSE  b = 10END****************************************** w = use web.load or print* if w is 0, then use WEB.LOAD* default is 0****************************************LOCATE 'w' IN VARS SETTING POS THEN  w = VALS<POS>END ELSE  w = 0END****************************************** p = number of seconds to pause before*     starting to send output* default is 0****************************************LOCATE 'p' IN VARS SETTING POS THEN  p = VALS<POS>END ELSE  p = 0END****************************************** s = which quit string to use* default = 800 WDB-COMPLETE****************************************LOCATE 's' IN VARS SETTING POS THEN  s = VALS<POS>END ELSE  s = '800 WDB-COMPLETE'END****************************************** MAIN PROGRAM****************************************IF w # 0 THEN  SLEEP pENDFOR X = 1 TO l  NUM.CHARS = LEN(LINE.CNT) + 1  LINE = ''  NUM.ZEROS = b - NUM.CHARS  FOR Y = 1 TO NUM.ZEROS    LINE := '0'    NUM.BYTES += 1  NEXT Y  LINE := LINE.CNT  NUM.BYTES += LEN(LINE.CNT) + 1 ; * this is for the line counter and the line break  GOSUB CHECK.EARLY.TERMINATE  IF w = 0 THEN    WEB.DATA<-1> = LINE    IF TERM.DATA # '' THEN      WEB.DATA<-1> = TERM.DATA    END  END ELSE    PRINT LINE    IF TERM.DATA # '' THEN      PRINT TERM.DATA    END  END  LINE.CNT += 1NEXT XIF w = 0 THEN  SLEEP p  CALL WEB.SEND(WEB.DATA)ENDSTOP*********************************************************************************CHECK.EARLY.TERMINATE:********************************************************************************TERM.DATA = ''IF q # '' AND NUM.BYTES >= q AND DISPLAY.TERM = 1 THEN  TERM.DATA = s:CHAR(10):CHAR(10)  DISPLAY.TERM = 0ENDRETURN*0001C9DESTROY.SESSION0c2SUBROUTINE DESTROY.SESSION** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program removes the session records**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE* Init*EQU FALSE TO 0, TRUE TO 1*EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*CALL SET.COOKIE("sessionid=; path=/")*DELETE F.WEB.SESSION, SESSION$IDRETURN*002494RSS.MAINT0c2** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: March 10, 2009* Description: RSS Feed Maintenance** 07-09-15 Peter Schellenbach - use jshow command to test if subroutine exists.*                               INCLUDE WBPD WWW.INCLUDEINCLUDE RSS.BP RSS.DATA.INC*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE STOP 201, 'RSS.FEEDS'OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD'ENDOPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'OPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE STOP 201, 'MVDB.THEMES'*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDENDIF THEME.CSS # '' THEN THEME.CSS = '<link rel="Stylesheet" href="/db/themes/':THEME.CSS:'" media="screen" type="text/css" />'IF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*CALL GET.SESSION.VAR("adminauth",adminauth)CALL PUT.SESSION.VAR("dd_mode",0)adminpass = ""IF adminauth # 1 THEN  FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'  FORM := '</head><body><p>Administrative priviledges are required. '  FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'  CALL WEB.SEND(FORM)  STOPEND*LOCATE "action" IN CGI$VARS SETTING POS THEN  action = CGI$VALS<POS>END ELSE action = ""LOCATE "id" IN CGI$VARS SETTING POS THEN  id = CGI$VALS<POS>END ELSE id = ""LOCATE "cancel_edit" IN CGI$VARS SETTING POS THEN  action = "list"END*HTML = ''BEGIN CASE  CASE action = "edit" OR action = "add" AND 0 ;* This code is depricated    IF action = "edit" THEN      READ FEED.REC FROM F.RSS.FEEDS, id ELSE FEED.REC = ""    END ELSE FEED.REC = ""    FEED.NAME = FEED.REC<1>    FEED.DESC = FEED.REC<3>    CRLF = CHAR(13):CHAR(10)    CALL SWAP(FEED.DESC,'<br />',CRLF)    SEL.SUB = FEED.REC<4>    ITEM.SUB = FEED.REC<5>    READ INNER.TEMPLATE FROM F.WEB.FORMS, "rss_edit.html" ELSE INNER.TEMPLATE = "rss_edit.html missing"    IF action = "add" THEN      edit_id = '<input type="text" name="new_id" value="">'      id = "NEW"    END ELSE      edit_id = id    END    CALL SWAP(INNER.TEMPLATE,'<!-- feed_id -->',id)    CALL SWAP(INNER.TEMPLATE,'<!-- edit_feed_id -->',edit_id)    CALL SWAP(INNER.TEMPLATE,'<!-- feed_name -->',FEED.NAME)    CALL SWAP(INNER.TEMPLATE,'<!-- feed_desc -->',FEED.DESC)    CALL SWAP(INNER.TEMPLATE,'<!-- sel_sub -->',SEL.SUB)    CALL SWAP(INNER.TEMPLATE,'<!-- item_sub -->',ITEM.SUB)    *    SEL.SUB.MSG = '' ; ITEM.SUB.MSG = ''    IF SEL.SUB # "" THEN      *PJS 07-09-15* BEGIN JBASE                     *READ TST FROM F.MD, SEL.SUB ELSE      *  SEL.SUB.MSG = 'Not Cataloged'      *END      *jBASE does not use catalog pointers - use jshow to get source file name      EXECUTE 'jshow -c ':SEL.SUB CAPTURING JSHOW.OUT      IF INDEX(JSHOW.OUT,'Subroutine:',1) = 0 THEN SEL.SUB.MSG = 'Not Cataloged'      *PJS 07-09-15* END JBASE          END    IF ITEM.SUB # "" THEN      *PJS 07-09-15* BEGIN JBASE                     *READ TST FROM F.MD, ITEM.SUB ELSE      *  ITEM.SUB.MSG = 'Not Cataloged'      *END      *jBASE does not use catalog pointers - use jshow to get source file name      EXECUTE 'jshow -c ':ITEM.SUB CAPTURING JSHOW.OUT      IF INDEX(JSHOW.OUT,'Subroutine:',1) = 0 THEN ITEM.SUB.MSG = 'Not Cataloged'      *PJS 07-09-15* END JBASE          END    CALL SWAP(INNER.TEMPLATE,'<!-- sel_sub_msg -->',SEL.SUB.MSG)    CALL SWAP(INNER.TEMPLATE,'<!-- item_sub_msg -->',ITEM.SUB.MSG)    *    FEED.MODE.NAMES = FEED.REC<6>    FEED.MODE.PARAMS = FEED.REC<7>    FEED.MODES = ""    FOR N = 1 TO DCOUNT( FEED.MODE.NAMES<1>, @VM )      FEED.MODES<-1> = FEED.MODE.NAMES<1,N>:',':FEED.MODE.PARAMS<1,N>    NEXT N    CALL SWAP(FEED.MODES,@AM,CRLF)    CALL SWAP(INNER.TEMPLATE,'<!-- feed_modes -->',FEED.MODES)    HTML = INNER.TEMPLATE  CASE action = "delete" AND id # ""    DELETE F.RSS.FEEDS, id    GOSUB LOAD.FEEDS  CASE action = "save" AND id # ""    FEED.REC = ""    LOCATE "feed_name" IN CGI$VARS SETTING POS THEN      name = CGI$VALS<POS>    END ELSE name = ""    LOCATE "feed_desc" IN CGI$VARS SETTING POS THEN      desc = CGI$VALS<POS>    END ELSE desc = ""    CONVERT CHAR(13) TO "" IN desc    CALL SWAP(desc,CHAR(10),'<br />')    LOCATE "sel_sub" IN CGI$VARS SETTING POS THEN      sel_sub = CGI$VALS<POS>    END ELSE sel_sub = ""    LOCATE "item_sub" IN CGI$VARS SETTING POS THEN      item_sub = CGI$VALS<POS>    END ELSE item_sub = ""    FEED.REC<1> = name    FEED.REC<3> = desc    FEED.REC<4> = sel_sub    FEED.REC<5> = item_sub    LOCATE "feed_modes" IN CGI$VARS SETTING POS THEN      feed_modes = CGI$VALS<POS>    END ELSE feed.modes = ""    CONVERT CHAR(13) TO "" IN feed_modes    CONVERT CHAR(10) TO @AM IN feed_modes    FOR N = 1 TO DCOUNT( feed_modes, @AM )      IF TRIM( feed_modes<N> ) # "" THEN        FEED.REC<6,N> = TRIM( FIELD( feed_modes<N>, ',',  1 ) )        FEED.REC<7,N> = TRIM( FIELD( feed_modes<N>, ',',  2 ) )      END    NEXT N    IF id = "NEW" THEN      LOCATE "new_id" IN CGI$VARS SETTING POS THEN        id = CGI$VALS<POS>      END      IF id = "NEW" THEN id="NEW1"    END    IF id # "" THEN      WRITE FEED.REC ON F.RSS.FEEDS, id    END    GOSUB LOAD.FEEDS  CASE 1 ; * Action = list (default)    GOSUB LOAD.FEEDSEND CASE*READ ADMIN.TEMPLATE FROM F.WEB.FORMS, "rss_admin_template.html" ELSE ADMIN.TEMPLATE = "rss_admin_template.html not found."CALL SWAP(ADMIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)HEADER = '<div id="dashboard_nav">'HEADER := '<ol class="dashboard_list">'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=users">Users</a></li>'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets">Widgets</a></li>'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=dashboards">Dashboards</a></li>'HEADER := '<li class="db_active"><a href="':CGI$PATH:'/RSS.MAINT">RSS Feed Maintenance</a></li>'OPEN 'MVPKG.DATA' TO F.MVPKG.DATA THEN  HEADER := '<li><a href="':CGI$PATH:'/MVPKG.MAIN">Package Manager</a></li>'ENDHEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN">Return to Dashboard</a></li>'HEADER := '</ol>'HEADER := '</div>'CALL SWAP(ADMIN.TEMPLATE,'<!-- HEADER -->',HEADER)FOOTER = ''CALL SWAP(ADMIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_MAIN -->',HTML)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)CALL WEB.SEND(ADMIN.TEMPLATE)STOP*LOAD.FEEDS: **HTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="6"><a href="" class="add-feed">Add a Feed</a></td></tr>'HTML<-1> = '<tr><th>ID</th><th>Name</th><th>Feed URL</th><th>Sel SUB</th><th>Item SUB</th><th>Action</th></tr>'EXECUTE "SSELECT RSS.FEEDS BY NAME" CAPTURING JUNKLOOP  READNEXT FID ELSE EXIT  READ FEED.REC FROM F.RSS.FEEDS, FID ELSE CONTINUE  FEED.NAME = FEED.REC<1>  CALL RSS.XML.ENCODE(FEED.NAME,"")  FEED.URL = "http://":CGI$SERVER.NAME:CGI$PATH:'/RSS.MAIN?feed=':FID  FEED.URL = '<a target="_blank" href="':FEED.URL:'">':FEED.URL:'</a>'  FEED.DESC = FEED.REC<3>  SEL.SUB = FEED.REC<4>  ITEM.SUB = FEED.REC<5>  URL.SEL.SUB = SEL.SUB  URL.ITEM.SUB = ITEM.SUB  CALL SUB.URL.ENCODE(URL.SEL.SUB)  CALL SUB.URL.ENCODE(URL.ITEM.SUB)  ROW = '<tr><td>':FID:'</td><td>':FEED.NAME:'</td><td>':FEED.URL:'</td><td><a href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=':SEL.SUB:'" target="RSS.BP_':URL.SEL.SUB:'">':SEL.SUB:'</a></td><td><a href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=':ITEM.SUB:'" target="RSS.BP_':URL.ITEM.SUB:'">':ITEM.SUB:'</a></td>'  ROW := \<td>\  IF FID = "FEEDS" THEN    ROW := '&nbsp;'  END ELSE    FEED.MODE.NAMES = FEED.REC<6>    FEED.MODE.PARAMS = FEED.REC<7>    FEED.MODES = ""    FOR N = 1 TO DCOUNT( FEED.MODE.NAMES<1>, @VM )      FEED.MODES<-1> = FEED.MODE.NAMES<1,N>:',':FEED.MODE.PARAMS<1,N>    NEXT N    CALL SWAP(FEED.MODES,@AM,'\n')    CALL SWAP(FEED.MODES,'"','\"')    CALL SWAP(FEED.NAME,'"','\"')    CALL SWAP(FEED.DESC,'"','\"')    CALL SWAP(SEL.SUB,'"','\"')    CALL SWAP(ITEM.SUB,'"','\"')    ROW := \<a href="javascript:editFeed('\:FID:\','\:FEED.NAME:\','\:FEED.DESC:\','\:SEL.SUB:\','RSS.BP_\:URL.SEL.SUB:\','\:ITEM.SUB:\','RSS.BP_\:URL.ITEM.SUB:\','\:FEED.MODES:\');"><img title="Edit Feed" class="icon" src="/db/icons/feed_edit.png" /></a> &nbsp;\    ROW := \<a onClick="return confirm('DELETE: Are you sure?');" href="/dbc/RSS.MAINT?action=delete&id=\:FID:\"><img title="Delete Feed" class="icon" src="/db/icons/feed_delete.png" /></a>\  END  ROW := '</td></tr>'  HTML<-1> = ROWREPEATHTML<-1> = '<tr><td colspan="6"><a href="" class="add-feed">Add a Feed</a></td></tr>'HTML<-1> = '</table>'RETURN0003F5VALIDATE.SESSION0c2SUBROUTINE VALIDATE.SESSION( FLAG )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo* Date Written : 11/7/2003* Description  : This program will validate the session.*             ****************************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)FLAG = FALSEIF SESSION$ID # "" THEN  READ REC FROM F.WEB.SESSION, SESSION$ID THEN    SESSION.DATE = REC<3>        SESSION.TIME = REC<4>    CURRENT.DATE = DATE()    CURRENT.TIME = TIME()    MAX.SECONDS = 86400; * Total number of seconds in a day    MAX.DIFF.AMOUNT = SESSION$TIME.OUT * 60 ; * Get the time in seconds    CURRENT.TIME = ((CURRENT.DATE - SESSION.DATE) * MAX.SECONDS) + CURRENT.TIME    DIFF.TIME = CURRENT.TIME - SESSION.TIME    IF DIFF.TIME <= MAX.DIFF.AMOUNT THEN      FLAG = TRUE    END  ENDEND*RETURN*0002B5WEB.FLUSH0c2SUBROUTINE WEB.FLUSH*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 11/06/03* Description  : This program sets the calls SET.BUFFER(FALSE) then *                calls WEB.SEND("") if the SESSION$OUTPUT variables*                length is greater then 0.*              ***********************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*CALL SET.BUFFER(FALSE)*IF LEN(SESSION$OUTBUF) > 0 THEN  CALL WEB.SEND("")*END*RETURN*0006C9SET.BUFFER0c2SUBROUTINE SET.BUFFER( B.VAL )*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 11/06/03* Updated by: Peter Schellenbach, Zumasys* Date Updated : 11/30/17* Description  : This program sets the SESSION$OUTBUF.FLAG and optionally*                SESSION$OUTBUF.SIZE variables to enable or disable*                buffering of output generated by WSEND. If buffering*                is enabled, be sure to call WFLUSH to flush the final*                buffer content.**                B.VAL = 0 : disable buffering*                B.VAL = 1 : enable buffering using current buffer size*                B.VAL > 1 : enable buffering and set buffer size to*                            this value.**                By default buffering is disabled. If buffering will be*                used, call WSETBUFFER before the first call to WSEND.*                If the size of buffer content ever exceeds the buffer*                size, the buffer is flushed to the client along with*                any headers, and buffering is disabled.*              **********************************************************************INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*IF NUM(B.VAL) AND B.VAL > 0 AND B.VAL <= 1000000 THEN  * Set buffer size and enable buffering  SESSION$OUTBUF.SIZE = B.VAL  SESSION$OUTBUF.FLAG = TRUEEND ELSE  * Enable or disable buffering  IF B.VAL # TRUE AND B.VAL # FALSE THEN    IF B.VAL = "" THEN      B.VAL = FALSE    END ELSE      B.VAL = TRUE    END  END  SESSION$OUTBUF.FLAG = B.VALENDRETURNEND000296SET.CONTENT.TYPE0c2SUBROUTINE SET.CONTENT.TYPE( C.TYPE )*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 10/25/03* Description  : This program sets the SESSION$CONTENT.TYPE variable.*              ***********************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*IF C.TYPE = "" THEN  C.TYPE = "text/html"END*SESSION$CONTENT.TYPE = C.TYPE*RETURN*000DEEINIT.WWW0c2*********************************************************************** Copyright (C) 2004 Sierra Bravo Corporation, All Rights Reserved** This software is the property of Sierra Bravo Corporation and may* not be duplicated or modified without the express written permission* of Sierra Bravo Corporation.** Written By   : Michael Derheim, Sierra Bravo Corporation* Description  : Initialize the standard WWW includes. Parse cookies, etc.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause**********************************************************************************************************************************************                                                                    *  * 10-25-16 Peter Schellenbach                                        **                                                                    *  ***       THIS PROGRAM IS OBSOLETE AND IS NO LONGER USED! ***        **                                                                    *  **********************************************************************************************************************************************#MAKE# RL $OPTIONS D3*INCLUDE WBPD WWW.INCLUDE*OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, 'WEB.SESSION'*MAT WWW.INFO = ""**PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ''PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE() ; *PJS 06-12-15**CGI$UNIQUE.ID = FIELD( TCL.LINE, ' ', 2)** Populate the vars and vals*CALL WDB.VARS(VARS,VALS)CGI$VARS = VARSCGI$VALS = VALS*LOCATE "APPSVR_ID" IN CGI$VARS SETTING POS THEN  CGI$APPSVR.ID = CGI$VALS<POS>  CGI$VARS = DELETE( CGI$VARS, POS, 0, 0 )  CGI$VALS = DELETE( CGI$VALS, POS, 0, 0 )END ELSE  CGI$APPSVR.ID = ""END** How many active users are online?*SELECT F.WEB.SESSIONUSER.COUNT = 0LOOP  READNEXT WSID ELSE EXIT  READ SREC FROM F.WEB.SESSION, WSID ELSE CONTINUE  LOCATE "userid" IN SREC<1> SETTING UPOS THEN USER.COUNT += 1REPEATPRINT "Client-Count: ":USER.COUNT** Load the Cookie variables and valuiesLOCATE 'HTTP_COOKIE' IN VARS SETTING POS THEN  CSTRING = VALS<POS>END ELSE CSTRING = ''*CONVERT ';' TO @AM IN CSTRINGNUM.COOKIES = DCOUNT(CSTRING, @AM)FOR Y = 1 TO NUM.COOKIES  CGI$CVARS<Y> = TRIM(FIELD(CSTRING<Y>,'=',1))  CGI$CVALS<Y> = CSTRING<Y>[(1+INDEX(CSTRING<Y>,'=',1)),99999]NEXT Y* Load the session ID if there is oneCALL GET.SESSION.ID( SESSION$ID, VARS, VALS )IF (SESSION$ID = '') THEN  CALL CREATE.SESSION(SESSION$ID)  CALL SET.COOKIE("sessionid=":SESSION$ID)ENDSESSION$GLOBAL.DEBUG = 0SESSION$DEBUG.TEXT = ''* Clear the out buffer and set some generic varsSESSION$CONTENT.SENT = 0OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, "WEB.SESSION"OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS'*LOCATE "HTTP_HOST" IN CGI$VARS SETTING POS THEN  CGI$SERVER.NAME = CGI$VALS<POS>END ELSE CGI$SERVER.NAME = ""LOCATE "SERVER_PORT" IN CGI$VARS SETTING POS THEN  CGI$SERVER.PORT = CGI$VALS<POS>END ELSE CGI$SERVER.PORT = ""IF CGI$SERVER.PORT = "" OR CGI$SERVER.PORT = "0" THEN  OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL THEN    READV TCP.PORT FROM F.MVDB.CONTROL, 'MVDB.SETTINGS', 4 ELSE TCP.PORT = ""  END  CGI$SERVER.PORT = TCP.PORTENDIF CGI$SERVER.PORT # "" THEN CGI$SERVER.NAME := ":":CGI$SERVER.PORTLOCATE "SIMPLEWEB_HANDLER" IN CGI$VARS SETTING POS THEN  CGI$PATH = CGI$VALS<POS>  IF CGI$PATH[1,1] # "/" THEN CGI$PATH = "/":CGI$PATHEND ELSE CGI$PATH = "/dbc"STOP*END0058C6MV.DEBUG0c2* WDEBUG** Debug REST Services* Copyright (c) 2017 Zumasys Inc.* Rewritten by Peter Schellenbach, 10/18/2017** Based on original version:*  Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved*  Written by: Luke Bucklin, Sierra Bravo*  Date: Sometime, 2006-ish*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD FI.WDB.DEBUG*CLR.SCR = @(-1)CLR.EOS = @(-3)MAX.LINES = SYSTEM(3) - 4MAX.COLS = SYSTEM(2) - 1IF MAX.LINES <= 0 OR CLR.SCR = '' OR CLR.EOS = '' THEN  MAX.LINES = 20  CLR.SCR = ''  CLR.EOS = ''  PRMPT.LINE = CHAR(13):CHAR(10)END ELSE  PRMPT.LINE = @(0, MAX.LINES + 2):CLR.EOSENDPROMPT ''*PRINT CLR.SCR:PRINTPRINT 'WDEBUG Web Request Degug Tool'PRINTPRINT 'The WDEBUG tool allows you to inspect, modify and re-run web requests.'PRINT 'Whenever a request for a debuggable resource is processed by WDB.INIT,'PRINT 'a debug record for the request is added to the WDB.DEBUG file. WDEBUG'PRINT 'allows you to select a debug record, view the request details, edit the'PRINT 'request variables, re-run the request and view the response.'PRINTPRINT 'To debug web requests for a resource, set attribute 7 of the WDB.RESOURCE'PRINT 'record for the resource to 1, then issue the web request from the client'PRINT 'browser or other agent. WDEBUG will show a list of recent web requests to'PRINT 'select from.'PRINTPRINT 'Start WDEBUG with an active select list if you need to use special criteria'PRINT 'to select the record(s) you need to debug.'PRINTPRINT 'Press <enter> to continue':INPUT ANS*OPEN 'WDB.DEBUG' TO F.WDB.DEBUG ELSE  PRINT 'The WDB.DEBUG data file is required to use WDEBUG. Default installations'  PRINT 'only create the dictionary for this file. Please create the data section'  PRINT 'to use WDEBUG: CREATE-FILE DATA WDB.DEBUG 101.'  STOPEND*SESSION.FLAG = 0OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SESSION.FLAG = 1 ;* can restore session when running debug reqest*EDITOR = ''IDS = ''NUM.IDS = 0IF SYSTEM(11) THEN  LOOP    READNEXT ID ELSE EXIT    READV X FROM F.WDB.DEBUG, ID, 1 THEN      IDS<-1> = ID      NUM.IDS += 1    END ELSE      PRINT ID:' not found in WDB.DEBUG!'    END  REPEATENDUSE.SUPPLIED.LIST = (NUM.IDS > 0)*LOOP  IF NOT(USE.SUPPLIED.LIST) THEN* Select available WDB.DEBUG items    CMND = 'SSELECT WDB.DEBUG WITH TYPE = "C" "R" BY-DSND DATE BY-DSND TIME'    EXECUTE CMND CAPTURING RESULT    IF SYSTEM(11) = 0 THEN      PRINT "No items found."      STOP    END    IDS = ''    NUM.IDS = 0    LOOP      READNEXT ID ELSE EXIT      IDS<-1> = ID      NUM.IDS += 1    REPEAT  END*  TOP = 0  LOOP* Display page of items    PRINT CLR.SCR:    PRINT "Ln Date. Time.... Path................ Remote Address...... Request ID........."    FOR CNTR = 1 TO MAX.LINES UNTIL CNTR + TOP > NUM.IDS      DBG.ID = IDS<CNTR>      READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE CONTINUE      PATH.INFO = DBGREC<WDBG_PATH>      IF PATH.INFO = '' THEN PATH.INFO = DBGREC<WDBG_HANDLER>:'/':DBGREC<WDBG_RESOURCE>      PRINT CNTR "R#2 ":      PRINT OCONV(DBGREC<WDBG_DATE>, 'D0-') "L#5 ":      PRINT OCONV(DBGREC<WDBG_TIME>, 'MTS') "L#8 ":      PRINT PATH.INFO "L#20 ":      PRINT DBGREC<WDBG_REMOTE_ADDR> "L#20 ":      PRINT DBGREC<WDBG_REQUEST_ID>[1,20]    NEXT CNTR    IF TOP + MAX.LINES > NUM.IDS THEN BOT = NUM.IDS ELSE BOT = TOP + MAX.LINES    PRINT "Showing items ":(TOP + 1):"-":BOT:" of ":NUM.IDS*    LOOP      PRINT PRMPT.LINE:"Command: (Q)uit (R)efresh (C)lear (N)ext (P)rev (##) Line to debug: ":      INPUT COMMAND      IF COMMAND MATCHES '1N0N' THEN        IF COMMAND >= 1 AND COMMAND <= MAX.LINES AND COMMAND + TOP <= NUM.IDS THEN          DBG.ID = IDS<COMMAND + TOP>          GOSUB debug.request        END        COMMAND = ''      END ELSE        COMMAND = OCONV(COMMAND[1,1], 'MCU')        IF COMMAND = '' THEN COMMAND = 'N'        IF INDEX('ERCNPQ', COMMAND, 1) = 0 THEN COMMAND = ''      END    WHILE COMMAND = '' DO REPEAT*    BEGIN CASE      CASE COMMAND = 'N'        IF TOP + MAX.LINES < NUM.IDS THEN TOP += MAX.LINES      CASE COMMAND = 'P'        IF TOP - MAX.LINES >= 0 THEN TOP -= MAX.LINES    END CASE  WHILE COMMAND = 'N' OR COMMAND = 'P' DO REPEAT*UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'R' ; NULL    CASE COMMAND = 'C'      EXECUTE 'SELECT WDB.DEBUG WITH TYPE = "C" "R"'      PRINT 'Are you sure you want to clear these items from the WDB.DEBUG file? ':      INPUT ANS      ANS = OCONV(ANS[1,1],'MCU')      IF ANS = 'Y' THEN        IF SYSTEM(11) THEN          LOOP            READNEXT ID ELSE EXIT            DELETE F.WDB.DEBUG, ID          REPEAT        END      END ELSE        CLEARSELECT      END  END CASEREPEATSTOP**----------debug.request:*----------*READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE  PRINT "The selected item '":DBG.ID:"' is not available!"  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDEDIT.ID = 'D':DBG.ID[2, LEN(DBG.ID)]LOOP  PRINT PRMPT.LINE:"Debugging ":DBG.ID[1,28]:" - command: (Q)uit (V)iew (E)dit (R)un: ":  INPUT COMMAND  COMMAND = OCONV(COMMAND[1,1], 'MCU')UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'V'      GOSUB view.request    CASE COMMAND = 'E'      GOSUB edit.request    CASE COMMAND = 'R'      GOSUB run.request  END CASEREPEATRETURN**----------view.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDGOSUB to.editNUM.LNS = DCOUNT(EDIT.REC, @AM)I = 1LOOP WHILE I <= NUM.LNS DO  X = EDIT.REC<I>  IF LEN(X) > MAX.COLS THEN    X = FOLD(X, MAX.COLS)    EDIT.REC<I> = X    N = COUNT(X, @AM)    NUM.LNS += N    I += N  END  I += 1REPEATIF NUM.LNS = 0 THEN NUM.LNS = 1NUM.PGS = INT((NUM.LNS - 1) / MAX.LINES) + 1CUR.PG = 1LOOP  PG.TOP = (CUR.PG - 1) * MAX.LINES  IF PG.TOP + MAX.LINES > NUM.LNS THEN LPP = NUM.LNS - PG.TOP ELSE LPP = MAX.LINES  PRINT CLR.SCR:  PRINT 'Page ':CUR.PG:' of ':NUM.PGS:SPACE(10):DBG.ID  PRINT  FOR I = 1 TO LPP    PRINT EDIT.REC<I + PG.TOP>  NEXT I  PRINT PRMPT.LINE:'Command: (Q)uit (N)ext (P)rev (##) Goto page ':  INPUT COMMAND  IF COMMAND MATCHES '1N0N' THEN    IF COMMAND >= 1 AND COMMAND <= NUM.PGS THEN CUR.PG = COMMAND  END ELSE    COMMAND = OCONV(COMMAND[1,1], 'MCU')  ENDUNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'N' OR COMMAND = ''      IF CUR.PG < NUM.PGS THEN CUR.PG = CUR.PG + 1    CASE COMMAND = 'P'      IF CUR.PG > 1 THEN CUR.PG = CUR.PG - 1  END CASEREPEATRETURN**----------edit.request:*----------*IF EDITOR = '' THEN GOSUB choose.editorIF EDITOR <> '' THEN  EDIT.ID = 'D':DBG.ID  GOSUB to.edit  WRITE EDIT.REC ON F.WDB.DEBUG, EDIT.ID  CMND = EDITOR:' WDB.DEBUG ':EDIT.ID  EXECUTE CMND  READ EDIT.REC FROM F.WDB.DEBUG, EDIT.ID ELSE NULL  DELETE F.WDB.DEBUG, EDIT.ID  GOSUB from.editENDRETURN**----------run.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNEND*HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* Reconstruct query stringQSTR = ''QSEP = ''* headers and server variablesN = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_HEADER_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* form variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_CGI_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_CGI_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  URLENCODE.STRING = CHANGE(THE.BODY, @VM, CHAR(10))  GOSUB url.encode  QSTR := QSEP:'__body__=':NEW.STRINGEND* restore session stateIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    SESSION.REC = ''    SESSION.REC<1> = DBGREC<WDBG_SESSION_VARS>    SESSION.REC<2> = DBGREC<WDBG_SESSION_VALS>    SESSION.REC<3> = DBGREC<WDBG_SESSION_DATE>    SESSION.REC<4> = DBGREC<WDBG_SESSION_TIME>    WRITE SESSION.REC ON F.WEB.SESSION, SESSION.ID  ENDEND* break the query string into 1000 byte chunksN = INT((LEN(QSTR) - 1) / 1000) + 1* build the command lineRUN.ID = DBGREC<WDBG_REQUEST_ID>CMND = 'WDB.INIT ':HANDLER.NAME:'/':RESOURCE.NAME:' ':RUN.ID:'-1-':N:' %% _WDEBUG_MODE_'** run the commandPRINTPRINT 'Executing the request: ':CMNDPRINTMAT WWW.INFO = ""EXECSTART = SYSTEM(12)* send query string as stacked inputFOR I = 1 TO N  DATA QSTR[((I - 1) * 1000) + 1, 1000]NEXT IEXECUTE CMND CAPTURING RESPONSEEXECDUR = SYSTEM(12) - EXECSTARTPRINT 'Request complete. Press <enter> to parse results':INPUT ANS** update the request runtimeDBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_DURATION> = EXECDUR* process the responseLINT.BEFORE = ''LINT.AFTER = ''WARN = ''ERR = ''* Gather lint from before the start tag and after the complete tagDBGREC<WDBG_WARNING> = '' ;* WarningsDBGREC<WDBG_ERROR> = '' ;* ErrorsDBGREC<WDBG_LINT> = '' ;* LintIF RESPONSE<1> = "700 WDB-START" THEN  RESPONSE = DELETE(RESPONSE, 1)END ELSE  TAG = @AM:"700 WDB-START":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '700 WDB-START tag is missing from response'    LINT.BEFORE = RESPONSE    RESPONSE = ''  END ELSE    IF TAG.POS >= 1 THEN      LINT.BEFORE = RESPONSE[1, TAG.POS - 1]      RESPONSE = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    END  ENDENDN = DCOUNT(RESPONSE, @AM)IF RESPONSE<N> = "800 WDB-COMPLETE" THEN  RESPONSE = DELETE(RESPONSE, N)END ELSE  TAG = @AM:"800 WDB-COMPLETE":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '800 WDB-COMPLETE tag missing from response!'  END ELSE    LINT.AFTER = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    RESPONSE = RESPONSE[1, TAG.POS - 1]  ENDEND* Clean up lintIF TRIM(CHANGE(LINT.BEFORE, @AM, '')) = '' THEN LINT.BEFORE = ''IF TRIM(CHANGE(LINT.AFTER, @AM, '')) = '' THEN LINT.AFTER = ''IF LINT.BEFORE <> '' OR LINT.AFTER <> '' THEN  LINT = LINT.BEFORE  IF LINT.BEFORE <> '' AND LINT.AFTER <> '' THEN LINT := @AM:'...':@AM  LINT := LINT.AFTER  DBGREC<WDBG_LINT> = LOWER(LINT)END* Parse the response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''DBGREC<WDBG_RESPONSE_CONTENT> = ''NUM.VARS = 0STATUS.CODE = ''EOH = INDEX(RESPONSE, @AM:@AM, 1) ;* headers end at first blank line in responseIF EOH = 0 THEN EOH = LEN(RESPONSE) + 1N = DCOUNT(RESPONSE[1, EOH - 1], @AM)FOR I = 1 TO N  HDR.LINE = RESPONSE<I>  IF HDR.LINE[1,10] = '500 ERROR ' THEN    ERR = HDR.LINE[11, LEN(HDR.LINE)]    IF STATUS.CODE = '' THEN STATUS.CODE = 500  END ELSE    HDR.VAR = FIELD(HDR.LINE, ':', 1)    HDR.VAL = TRIMF(HDR.LINE[COL2() + 1, LEN(HDR.LINE)])    M = LEN(HDR.VAR)    FOR J = 1 TO M      IF NOT(HDR.VAR[J,1] MATCHES '1A') AND HDR.VAR[J,1] <> '-' THEN        HDR.VAR = ''        EXIT      END    NEXT J    IF HDR.LINE[LEN(HDR.VAR) + 1, 1] <> ':' THEN HDR.VAR = ''    IF HDR.VAR = '' THEN      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = '_BAD_'      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.LINE ;* invalid header line!    END ELSE      IF HDR.VAR = 'X-MVDB-STATUS' THEN        STATUS.CODE = HDR.VAL      END ELSE        NUM.VARS += 1        DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = HDR.VAR        DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.VAL      END    END  ENDNEXT IIF STATUS.CODE = '' THEN STATUS.CODE = 200DBGREC<WDBG_STATUS> = STATUS.CODE* save response contentIF EOH + 2 <= LEN(RESPONSE) THEN  DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(RESPONSE[EOH + 2, LEN(RESPONSE)])ENDDBGREC<WDBG_WARNING> = WARNDBGREC<WDBG_ERROR> = ERRRETURN**----------to.edit:*----------*EDIT.REC = ''EDIT.REC<-1> = '[INFO] (do not edit this section)'EDIT.REC<-1> = 'Date            = ':OCONV(DBGREC<WDBG_DATE>,'D4')EDIT.REC<-1> = 'Time            = ':OCONV(DBGREC<WDBG_TIME>,'MTS')EDIT.REC<-1> = 'Duration        = ':DBGREC<WDBG_DURATION>EDIT.REC<-1> = 'Port            = ':DBGREC<WDBG_PORT>EDIT.REC<-1> = 'Handler         = ':DBGREC<WDBG_HANDLER>EDIT.REC<-1> = 'Resource        = ':DBGREC<WDBG_RESOURCE>EDIT.REC<-1> = 'Controller      = ':DBGREC<WDBG_CONTROLLER>EDIT.REC<-1> = 'Program         = ':DBGREC<WDBG_PROGRAM>EDIT.REC<-1> = 'RequestID       = ':DBGREC<WDBG_REQUEST_ID>EDIT.REC<-1> = 'Method          = ':DBGREC<WDBG_METHOD>EDIT.REC<-1> = 'Path            = ':DBGREC<WDBG_PATH>EDIT.REC<-1> = 'RemoteAddr      = ':DBGREC<WDBG_REMOTE_ADDR>EDIT.REC<-1> = 'Status          = ':DBGREC<WDBG_STATUS>IF DBGREC<WDBG_WARNING> <> '' THEN  EDIT.REC<-1> = 'WARNING: ':DBGREC<WDBG_WARNING>ENDIF DBGREC<WDBG_ERROR> <> '' THEN  EDIT.REC<-1> = 'ERROR: ':DBGREC<WDBG_ERROR>ENDIF DBGREC<WDBG_LINT> <> '' THEN  EDIT.REC<-1> = 'LINT:':@AM:RAISE(DBGREC<WDBG_LINT>)END* Request headers and server variablesEDIT.REC<-1> = @AM:'[HEADERS]'N = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  HDR.VAL = DBGREC<WDBG_HEADER_VALS, I>  EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VALNEXT I* Query string variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[VARS]'  FOR I = 1 TO N    CGI.VAR = DBGREC<WDBG_CGI_VARS, I>    CGI.VAL = DBGREC<WDBG_CGI_VALS, I>    EDIT.REC<-1> = CGI.VAR:SPACE(16-LEN(CGI.VAR)):'= ':CGI.VAL  NEXT IEND* CookiesLOCATE 'HTTP_COOKIE' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  CSTRING = DBGREC<WDBG_HEADER_VALS, POS>END ELSE CSTRING = ''CONVERT ';' TO @AM IN CSTRINGN = DCOUNT(CSTRING, @AM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[COOKIES]'  FOR I = 1 TO N    COOKIE.VAR = TRIM(FIELD(CSTRING<I>, '=', 1))    COOKIE.VAL = CSTRING<I>[COL2() + 1, 99999]    EDIT.REC<-1> = COOKIE.VAR:SPACE(16-LEN(COOKIE.VAR)):'= ':COOKIE.VAL  NEXT IEND* REST parametersLOCATE 'PATH_INFO' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  PATH = DBGREC<WDBG_HEADER_VALS, POS>END ELSE PATH = ''IF PATH[1,1] = '/' THEN PATH = PATH[2,9999]N = DCOUNT(PATH, '/')IF N > 0 THEN  EDIT.REC<-1> = @AM:'[PARAMS]'  FOR I = 3 TO N    PARAM.VAR = 'Param[':(I-2):']'    EDIT.REC<-1> = PARAM.VAR:SPACE(16-LEN(PARAM.VAR)):'= ':FIELD(PATH, '/', I)  NEXT IEND* Session variablesIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    N = DCOUNT(DBGREC<WDBG_SESSION_VARS>, @VM)    IF N > 0 THEN      EDIT.REC<-1> = @AM:'[SESSION]'      EDIT.REC<-1> = '_SessionID      = ':SESSION.ID      IF DBGREC<WDBG_SESSION_DATE> <> '' THEN EDIT.REC<-1> = '_Date           = ':OCONV(DBGREC<20>, 'D4')      IF DBGREC<WDBG_SESSION_TIME> <> '' THEN EDIT.REC<-1> = '_Time           = ':OCONV(DBGREC<21>, 'MTS')      FOR I = 1 TO N        SESSION.VAR = DBGREC<WDBG_SESSION_VARS, I>        EDIT.REC<-1> = SESSION.VAR:SPACE(16-LEN(SESSION.VAR)):'= ':DBGREC<WDBG_SESSION_VALS, I>      NEXT I    END  ENDEND* Request bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  EDIT.REC<-1> = @AM:'[BODY]':@AM:RAISE(THE.BODY)END* Response headersN = DCOUNT(DBGREC<WDBG_RESPONSE_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[RESPONSE_HEADERS]'  FOR I = 1 TO N    HDR.VAR = DBGREC<WDBG_RESPONSE_VARS, I>    HDR.VAL = DBGREC<WDBG_RESPONSE_VALS, I>    EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VAL  NEXT IEND* Response contentTHE.CONTENT = DBGREC<WDBG_RESPONSE_CONTENT>IF THE.CONTENT <> '' THEN  EDIT.REC<-1> = @AM:'[RESPONSE_CONTENT]':@AM:RAISE(THE.CONTENT)END*RETURN**----------from.edit:*----------*SESSION.ID = ''HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* If COOKIES section exists, rebuild HTTP_COOKIE headerCOOKIES = ''SECT = 'COOKIES'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    COOKIE = EDIT.REC<I>    IF COOKIE <> '' THEN      COOKIE.NAME = TRIM(FIELD(COOKIE, '=', 1))      COOKIE.VAL = TRIMF(COOKIE[COL2() + 1, LEN(COOKIE)])      COOKIES := COOKIE.NAME:'=':COOKIE.VAL:';'      IF OCONV(COOKIE.NAME, 'MCU') = 'SESSIONID' THEN SESSION.ID = COOKIE.VAL    END  NEXT I  IF COOKIES[LEN(COOKIES), 1] = ';' THEN COOKIES = COOKIES[1, LEN(COOKIES) - 1]END* If PARAMS section exists, rebuild PATH_INFO headerPARAMS = ''SECT = 'PARAMS'GOSUB find.sectionIF SECT.START > 0 THEN  PNUM = 1  FOR I = SECT.START + 1 TO SECT.END    PARAM = EDIT.REC<I>    IF PARAM <> '' THEN      PARAM.NAME = TRIM(OCONV(FIELD(PARAM, '=', 1), 'MCU'))      PARAM.VAL = TRIMF(PARAM[COL2() + 1, LEN(PARAM)])      IF PARAM.NAME <> 'PARAM[':PNUM:']' THEN EXIT      PARAMS := '/':PARAM.VAL      PNUM += 1    END  NEXT I  IF PARAMS <> '' THEN PARAMS = '/':HANDLER.NAME:'/':RESOURCE.NAME:PARAMS ;* handler & resource come before paramsEND* Get headers and server variablesDBGREC<WDBG_HEADER_VARS> = ''DBGREC<WDBG_HEADER_VALS> = ''NUM.VARS = 0SECT = 'HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])* check for special headers      BEGIN CASE        CASE OCONV(VAR.NAME, 'MCU') = 'HTTP_COOKIE'          IF COOKIES <> '' THEN            VAR.VAL = COOKIES          END        CASE OCONV(VAR.NAME, 'MCU') = 'PATH_INFO'          IF PARAMS <> '' THEN            VAR.VAL = PARAMS          END          IF VAR.VAL[1,1] <> '/' THEN VAR.VAL = '/' : VAR.VAL          IF COUNT(VAR.VAL, '/') >= 2 THEN            HANDLER.NAME = FIELD(VAR.VAL, '/', 2)            RESOURCE.NAME = FIELD(VAR.VAL, '/', 3)          END          DBGREC<WDBG_PATH> = VAR.VAL        CASE OCONV(VAR.NAME, 'MCU') = 'REQUEST_METHOD'          DBGREC<WDBG_METHOD> = VAR.VAL              CASE OCONV(VAR.NAME, 'MCU') = 'REMOTE_ADDR'          DBGREC<WDBG_REMOTE_ADDR> = VAR.VAL      END CASE      NUM.VARS += 1      DBGREC<WDBG_HEADER_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_HEADER_VALS, NUM.VARS> = VAR.VAL    END  NEXT I  DBGREC<WDBG_HANDLER> = HANDLER.NAME  DBGREC<WDBG_RESOURCE> = RESOURCE.NAMEEND* Get form variablesDBGREC<WDBG_CGI_VARS> = ''DBGREC<WDBG_CGI_VALS> = ''NUM.VARS = 0SECT = 'VARS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_CGI_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_CGI_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get bodyDBGREC<WDBG_BODY> = ''SECT = 'BODY'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.BODY = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_BODY> = LOWER(THE.BODY)  ENDEND* Get session stateIF SESSION.FLAG AND SESSION.ID <> '' THEN  DBGREC<WDBG_SESSION_ID> = ''  DBGREC<WDBG_SESSION_VARS> = ''  DBGREC<WDBG_SESSION_VALS> = ''  DBGREC<WDBG_SESSION_DATE> = ''  DBGREC<WDBG_SESSION_TIME> = ''  NUM.VARS = 0  SECT = 'SESSION'  GOSUB find.section  IF SECT.START > 0 THEN    FOR I = SECT.START + 1 TO SECT.END      SESSION.LINE = EDIT.REC<I>      SESSION.VAR = TRIM(FIELD(SESSION.LINE, '=', 1))      SESSION.VAL = TRIMF(SESSION.LINE[COL2() + 1, LEN(SESSION.LINE)])      BEGIN CASE        CASE SESSION.VAR = '_SessionID'          DBGREC<WDBG_SESSION_ID> = SESSION.VAL        CASE SESSION.VAR = '_Date'          DBGREC<WDBG_SESSION_DATE> = ICONV(SESSION.VAL, 'D')        CASE SESSION.VAR = '_Time'          DBGREC<WDBG_SESSION_TIME> = ICONV(SESSION.VAL, 'MTS')        CASE 1          NUM.VARS += 1          DBGREC<WDBG_SESSION_VARS, NUM.VARS> = SESSION.VAR          DBGREC<WDBG_SESSION_VALS, NUM.VARS> = SESSION.VAL      END CASE    NEXT I  ENDEND* Get response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''NUM.VARS = 0SECT = 'RESPONSE_HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get response contentDBGREC<WDBG_RESPONSE_CONTENT> = ''SECT = 'RESPONSE_CONTENT'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.CONTENT = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(THE.CONTENT)  ENDENDRETURN**----------choose.editor:*----------*PRINTLOOP  PRINT 'Select the editor you want to use: 1 = ED, 2 = JED, 3 = other: ':  INPUT ANSUNTIL ANS EQ '' DO  BEGIN CASE    CASE ANS = 1      EDITOR = 'ED'      EXIT    CASE ANS = 2      EDITOR = 'JED'      EXIT    CASE ANS = 3      PRINT 'Enter the verb to invoke your editor: ':      INPUT TMP      PRINT TMP:' OK?':      INPUT ANS      ANS = OCONV(ANS[1,1], 'MCU')      IF ANS = 'Y' THEN        EDITOR = TMP        EXIT      END  END CASEREPEATRETURN**----------find.section:*----------*SECT.START = -1SECT.END = -1TAG = @AM:'[':SECT:']':@AMTAG.POS = INDEX(EDIT.REC, TAG, 1)IF TAG.POS = 0 THEN RETURN ;* Section not foundSECT.START = DCOUNT(EDIT.REC[1, TAG.POS], @AM)SECT.END = DCOUNT(EDIT.REC, @AM)FOR I = SECT.START + 1 TO SECT.END  SECT.LN = EDIT.REC<I>  IF SECT.LN MATCHES '"["1A0A"]"' OR SECT.LN MATCHES '"["1A0A"_"1A0A"]"' THEN* beginning of next section is end of current section    SECT.END = I - 1    EXIT  ENDNEXT IRETURN**----------url.encode:*----------*NEW.STRING = ""UE.LEN = LEN(URLENCODE.STRING)FOR UEX = 1 TO UE.LEN  UE.CHR = URLENCODE.STRING[UEX,1]  UE.CVAL = SEQ(UE.CHR)  BEGIN CASE    CASE UE.CVAL < 32; ENC.FLAG = 1   ;* control character    CASE UE.CVAL = 37 OR UE.CVAL = 38 OR UE.CVAL = 43 OR UE.CVAL = 61; ENC.FLAG = 1 ;* % & + =    CASE UE.CVAL = 127; ENC.FLAG = 1  ;* DEL control character    CASE UE.CVAL >= 252; ENC.FLAG = 1 ;* delimiter character    CASE 1 ; ENC.FLAG = 0  END CASE  IF ENC.FLAG THEN    UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')  END  NEW.STRING := UE.CHRNEXT UEXRETURN*END000FB6SUB.DEBUG.WIDGET0c2    SUBROUTINE SUB.DEBUG.WIDGET* @(#) SUB.DEBUG.WIDGET Ported to jBASE 17:00:17  08 JUL 2015*  The following variable names were converted*   PROG,LN,DATE,TIME* * 07-09-15 Peter Schellenbach - removed D3 runtime error code - if there is a way to*   get jBASE runtime errors, create new SUB.GET.RUNTIME.ERRORS subroutine and call*   it to get the errors.** 01-20-16 Peter Schellenbach - added code to insert extra widget info after runtime errors.*   Call new SUB.LOG.DEBUG.INFO in widget code to save extra widget info for display here.*    INCLUDE WBPD MVDB.INCLUDE*    W$TYPE = "HTML"    W$TITLE = "Widget Debug: ":G$WIDGET.NAME    IF GLOBAL.INFO(90) = "FAIL" THEN        W$TITLE := " (Widget Failed)"    END ELSE        W$TITLE := ' (Debug Mode)'    END    W$WIDTH = 3     ;* Maybe we can track the last known width of this widget*    IF G$QUERYMODE THEN RETURN*    OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE        W$HTML.DATA = '<h2>Unable to open WEB.FORMS</h2>'        RETURN    END    READ W$HTML.DATA FROM F.WEB.FORMS, "widget_debug.html" ELSE W$HTML.DATA = "<h2>Error: widget_debug.html is missing.</h2>"*    WIDGET.SUB.NAME = GLOBAL.INFO(91)   ;* Set by MVDB.MAIN before re-assigning the subroutine name to this program.*    EDIT.LINK = ''    IF G$ADMIN.USER THEN* Add a link to edit the subroutine        URL.SUBNAME = WIDGET.SUB.NAME        CALL SUB.URL.ENCODE(URL.SUBNAME)        EDIT.LINK = '<a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=':URL.SUBNAME:'" target="MVDB.SUBS_':URL.SUBNAME:'">Edit Subroutine</a>'    END*    UDINFO = ""    FOR UDPOS = 1 TO 100        IF WIDGET.USER.DATA(UDPOS) # "" THEN            UDINFO := '<tr><td>':UDPOS:'</td><td>':WIDGET.USER.DATA(UDPOS):'</td></tr>':CHAR(10)        END    NEXT UDPOS*    URL.WIDGET.NAME = G$WIDGET.NAME    CALL SUB.URL.ENCODE(URL.WIDGET.NAME)    IF GLOBAL.INFO(90) = "FAIL" THEN        DB.REASON = "<hr />This widget has been disabled for one of the following reasons:"        DB.REASON := '<ul><li>The widget subroutine has an error causing it to terminate unexpectedly.</li>'        DB.REASON := '<li>The page was refreshed or a new dashboard page was loaded before the widget subroutine finished running.</li>'        DB.REASON := '<li>The widget is running, but it is taking too long for it to finish.</li>'        DB.REASON := '<li>The widget subroutine encountered a system error and could not finish running.</li></ul>'        REMOVE.LINK = '<a href="/dbc/MVDB.MAIN?unfail_widget=':URL.WIDGET.NAME:'">click here</a>'        REMEDY =  "When the problem has been corrected, ":REMOVE.LINK:" to take this widget out of debug mode.<hr />"    END ELSE        DB.REASON = ""        REMEDY = ""    END** Runtime errors?*    RE.INFO = ""    *PJS 07-09-15 JBASE TODO: get runtime errors*    MAX.ERRS = 50    *TODO: CALL SUB.GET.RUNTIME.ERRORS(RE.INFO, '', WIDGET.SUB.NAME, MAX.ERRS, G$ADMIN.USER)    RE.INFO := CHAR(10): '</table>'    *    *PJS 01-20-16 Check for widget debug info and add to runtime errors section.    * To use this feature, widget code can call SUB.LOG.DEBUG.INFO with widget    * name and a message. The last 100 lines of message text are saved in WDB.DEBUG    * for the widget and displayed here after runtime errors by the debug widget.    OPEN 'WDB.DEBUG' TO F.WDB.DEBUG THEN        READ EXTRA.INFO FROM F.WDB.DEBUG,G$WIDGET.NAME THEN            CALL SWAP(EXTRA.INFO,@AM,CHAR(10))            RE.INFO := '<pre>':CHAR(10):EXTRA.INFO:CHAR(10):'</pre>':CHAR(10)        END    END     *    CALL SWAP(W$HTML.DATA,'<!-- WIDGET_NAME -->',G$WIDGET.NAME)    CALL SWAP(W$HTML.DATA,'<!-- WIDGET_SUB_NAME -->',WIDGET.SUB.NAME)    CALL SWAP(W$HTML.DATA,'<!-- WIDGET_EDIT_LINK -->',EDIT.LINK)    CALL SWAP(W$HTML.DATA,'<!-- DEBUG_REASON -->',DB.REASON)    CALL SWAP(W$HTML.DATA,'<!-- REMEDY -->',REMEDY)    CALL SWAP(W$HTML.DATA,'<!-- WIDGET_USER_DATA -->',UDINFO)    CALL SWAP(W$HTML.DATA,'<!-- RUNTIME_ERRORS -->',RE.INFO)    RETURN000474MVAPPS.STATUS0c2** Program: MVAPPS.STATUS* Author: Luke Bucklin, Sierra Bravo Corporation* Date: January 4, 2010* Purpose: Provide app status information to the mvappsvr config app*APP.LIST = ""APP.CNT = 0PRINT "MVAPPS START"OPEN '','MVAPPS.INSTALLED' TO F.MVAPPS.INSTALLED THEN  EXECUTE 'SSELECT MVAPPS.INSTALLED' CAPTURING JUNK  LOOP    READNEXT ID ELSE EXIT    READ REC FROM F.MVAPPS.INSTALLED, ID THEN      APP.CNT += 1      APP.LIST<1,APP.CNT> = ID      APP.LIST<2,APP.CNT> = REC<1>      APP.LIST<3,APP.CNT> = REC<2>      APP.LIST<4,APP.CNT> = REC<3>      APP.LIST<5,APP.CNT> = OCONV(REC<4>,'D2/')    END  REPEATENDAPP.NAMES = APP.LIST<2>CONVERT "|" TO "\" IN APP.NAMESAPP.LIST<2> = APP.NAMESPRINT "MVAPPS-VERSION: 1.0"DATA "VERSION"EXECUTE "APP.INSTALLER" CAPTURING AIVLOCATE "Installer Version" IN AIV SETTING POS THEN  VNO = AIV<POS+1>END ELSE VNO = "?"IF NOT(VNO MATCHES "1N0N'.'0X") THEN VNO = "?"PRINT "INSTALLER-VERSION: ":VNOPRINT 'APP-COUNT: ':APP.CNTFOR N = 1 TO APP.CNT  PRINT 'APP: ':APP.LIST<2,N>:",":APP.LIST<3,N>:",":APP.LIST<4,N>:",":APP.LIST<5,N>NEXT NPRINT "MVAPPS END"STOPEND000789SUB.MVDB.FEATURES0c2SUBROUTINE SUB.MVDB.FEATURES(USER.LIMIT,MAPS.ENABLED,FUSION.WIDGETS.ENABLED,WATERMARK)INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*** Decipher the license data*CDIGIT = CGI$APPSVR.ID[1,1]LSEG1 = CGI$APPSVR.ID[2,5]LSEG2 = CGI$APPSVR.ID[7,7]LSEG3 = CGI$APPSVR.ID[14,8]UID4 = CGI$UNIQUE.ID "R%4"UID3 = UID4 "R%3"UID2 = UID4 "R%2"UIDL1 = UID4 "R%1"UIDL2 = UID4[3,1]*CHKVAL = 0FOR N = 2 TO 21  CHKVAL += SEQ(CGI$APPSVR.ID[N,1])NEXT NCHKVAL = MOD(CHKVAL,16)** SEGMENT 1: Extract license edition*SEG1 = OCONV(LSEG1,'MCXD')SEG1 = SEG1 / (4*(UID4+1))LICENSE.EDITION = SEG1-1** SEGMENT 2: Extract user limit*SEG2 = OCONV(LSEG2,'MCXD')SEG2 = SEG2 / (3*(UID3+1))LICENSE.CNT = SEG2** SEGMENT 3: Extract system id*SEG3 = OCONV(LSEG3,'MCXD')SEG3 = SEG3 / (UIDL1 + UIDL2 + 2)LICENSE.SYSID = SEG3*WWW.INFO(46) = OCONV(CHKVAL,'MCDX'):'/':OCONV(LSEG3,'MCXD'):" / ":(UIDL1 + UIDL2 + 2):" = ":LICENSE.SYSIDWWW.INFO(47) = LICENSE.CNT:'/':LICENSE.EDITIONWWW.INFO(48) = LICENSE.SYSID*USER.LIMIT = LICENSE.CNTMAPS.ENABLED = 0FUSION.WIDGETS.ENABLED = 0WATERMARK = ''EDITION = ''BEGIN CASE  CASE LICENSE.EDITION = 1    FUSION.WIDGETS.ENABLED = 1    MAPS.ENABLED = 1    WATERMARK = 'Development Version'    EDITION = 'Development Edition'  CASE LICENSE.EDITION = 2     EDITION = 'Standard Edition'  CASE LICENSE.EDITION = 3    FUSION.WIDGETS.ENABLED = 1    EDITION = 'Professional Edition'  CASE LICENSE.EDITION = 4    FUSION.WIDGETS.ENABLED = 1    MAPS.ENABLED = 1    EDITION = 'Enterprise Edition'  CASE LICENSE.EDITION = 5    FUSION.WIDGETS.ENABLED = 1    MAPS.ENABLED = 1    WATERMARK = 'Evaluation Version'    EDITION = 'Evaluation'  CASE 1    EDITION = 'Edition unavailable'END CASE**Populate globals for user reference*G$LICENSE.COUNT = LICENSE.CNTG$EDITION = EDITION ;*:' | ':CGI$APPSVR.ID:' | ':CGI$UNIQUE.IDG$SYSTEM.ID = LICENSE.SYSID*RETURN007424MVPKG.MAIN0c2* @(#) MVPKG.MAIN Ported to jBASE 17:00:17  08 JUL 2015* Copyright (C) 2010 Sierra Bravo Corporation, All Rights Reserved** Written by: Dave Bucklin, Sierra Bravo* Date: May, 2010* Description: Administration area of Bravo Dashboard**#MAKE# RL $OPTIONS D3    INCLUDE WBPD WWW.INCLUDE    INCLUDE WBPD MVDB.INCLUDE*JB INCLUDE WBPD MVPKG.INCLUDE    INCLUDE WBPD FI.MVDB.WIDGETS    INCLUDE WBPD FI.MVDB.DEFS    INCLUDE WBPD FI.MVDB.WIDGET.TYPES*    EQU TRUE TO 1, FALSE TO 0, AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*    OPEN '','MVPKG.DATA' TO F.MVPKG.DATA ELSE STOP 201, 'MVPKG.DATA'    OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'    OPEN '','MVDB.SUBS' TO F.MVDB.SUBS ELSE STOP 201, 'MVDB.SUBS'    OPEN '','MVDB.DEFS' TO F.MVDB.DEFS ELSE STOP 201, 'MVDB.DEFS'    OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE STOP 201, 'MVDB.WIDGET.TYPES'    OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'    OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS'    OPEN '','MD' TO F.MD ELSE        OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD'    END*    DIM PKG.REC(40)    DIM SITE$SETTINGS(100)    EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)    EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)    EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)    EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)    EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)    EQU SITE$THEME        TO SITE$SETTINGS(8)    EQU SITE$CHARSET      TO SITE$SETTINGS(9)*    EQU STEP$WIDGETS TO 1    EQU STEP$DASHBOARDS TO 2    EQU STEP$ITEMS TO 3    EQU STEP$WEB.FILES TO 4    EQU STEP$SETTINGS TO 5    EQU STEP$SUMMARY TO 6*    MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""    IF SITE$ALT.LOGO = '' THEN        SITE.LOGO = '/db/images/mv-logo.png'    END ELSE        SITE.LOGO = SITE$ALT.LOGO        IF NOT(INDEX(SITE.LOGO,'/',1)) THEN            SITE.LOGO = '/db/images/':SITE.LOGO        END    END    IF SITE$THEME # '' THEN SITE$THEME = '<link rel="Stylesheet" href="/db/themes/':SITE$THEME:'" media="screen" type="text/css" />'    IF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*    CALL GET.SESSION.VAR("adminauth",adminauth)    CALL PUT.SESSION.VAR("dd_mode",0)    adminpass = ""    IF adminauth # 1 THEN        FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'        FORM := '</head><body><p>Administrative priviledges are required. '        FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'        CALL WEB.SEND(FORM)        STOP    END*    HTML = ''    LOCATE "action" IN CGI$VARS SETTING POS THEN        action = CGI$VALS<POS>    END ELSE action = ""    LOCATE 'pkg_id' IN CGI$VARS SETTING POS THEN        PKG.ID = CGI$VALS<POS>    END ELSE PKG.ID = ''*    BEGIN CASE    CASE action = 'rebuild'        MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID THEN*translate this package definition into something usable by the package builder            OPEN 'MAKE.FILE,':PKG.ID TO F.MAKE.FILE ELSE                EXECUTE "CREATE-FILE DATA MAKE.FILE,":PKG.ID:" 11"                OPEN 'MAKE.FILE,':PKG.ID TO F.MAKE.FILE ELSE STOP 201, 'MAKE.FILE,':PKG.ID            END            CLEARFILE F.MAKE.FILE**Dashboards*            WIDGET.LIST = ''  ;*composite of dashboard and individual widgets            DB.LIST = ''            FILE.LIST = ''            DB.CNT = DCOUNT(PKG$DASHBOARDS<1>,VM)            FOR ON.DB = 1 TO DB.CNT                IF PKG$DASHBOARDS.OVR<1,ON.DB> = 1 THEN LIST.POS = 2 ELSE LIST.POS = 1                IF PKG$DASHBOARDS.ADD<1,ON.DB> = 1 THEN*add the widgets from this db                    READV WIDGETS FROM F.MVDB.DEFS, PKG$DASHBOARDS<1,ON.DB>, 2 ELSE WIDGETS = ''                    WCNT = DCOUNT(WIDGETS<1>,VM)                    FOR ON.W = 1 TO WCNT                        LOCATE WIDGETS<1,ON.W> IN WIDGET.LIST<LIST.POS> SETTING DUM ELSE                            WIDGET.LIST = INSERT(WIDGET.LIST,LIST.POS,0,0,WIDGETS<1,ON.W>)                        END                    NEXT ON.W                END                DB.LIST<LIST.POS,-1> = PKG$DASHBOARDS<1,ON.DB>            NEXT ON.DB*DB.LIST = PKG$DASHBOARDS*CONVERT VM TO AM IN DB.LIST*WRITE DB.LIST ON F.MAKE.FILE, 'DATA_MVDB.DEFS'            PKG.LIST = DB.LIST<1>            CONVERT VM TO AM IN PKG.LIST            IF DCOUNT(PKG.LIST,AM) THEN                WRITE PKG.LIST ON F.MAKE.FILE, 'DATA_MVDB.DEFS'                FILE.LIST<-1> = 'MVDB.DEFS'            END            O.PKG.LIST = DB.LIST<2>            CONVERT VM TO AM IN O.PKG.LIST            IF DCOUNT(O.PKG.LIST,AM) THEN                WRITE O.PKG.LIST ON F.MAKE.FILE, 'DATA_O:MVDB.DEFS'                FILE.LIST<-1> = 'O:MVDD.DEFS'            END**Widget defs and subs*            WCNT = DCOUNT(PKG$WIDGETS<1>,VM)            FOR ON.W = 1 TO WCNT                IF PKG$WIDGETS.OVR<1,ON.DB> = 1 THEN LIST.POS = 2 ELSE LIST.POS = 1                LOCATE PKG$WIDGETS<1,ON.W> IN WIDGET.LIST<LIST.POS> SETTING DUM ELSE                    WIDGET.LIST = INSERT(WIDGET.LIST,LIST.POS,0,0,WIDGETS<1,ON.W>)                END            NEXT ON.W*WRITE WIDGET.LIST ON F.MAKE.FILE, 'DATA_MVDB.WIDGETS'            WGT.LIST = WIDGET.LIST<1>            CONVERT VM TO AM IN WGT.LIST            IF DCOUNT(WGT.LIST,AM) THEN                WRITE WGT.LIST ON F.MAKE.FILE, 'DATA_MVDB.WIDGETS'                FILE.LIST<-1> = 'MVDB.WIDGETS'            END            O.WGT.LIST = WIDGET.LIST<2>            CONVERT VM TO AM IN O.WGT.LIST            IF DCOUNT(WGT.LIST,AM) THEN                WRITE O.WGT.LIST ON F.MAKE.FILE, 'DATA_O:MVDB.WIDGETS'                FILE.LIST<-1> = 'O:MVDB.WIDGETS'            END*            COMPILE.COMMANDS = ''            SUB.LIST = ''            WCNT = DCOUNT(WIDGET.LIST,AM)            FOR ON.W = 1 TO WCNT                READV SUB.NAME FROM F.MVDB.WIDGETS, WIDGET.LIST<ON.W>, 1 THEN                    LOCATE SUB.NAME IN SUB.LIST SETTING DUM ELSE                        SUB.LIST = INSERT(SUB.LIST,1,0,0,SUB.NAME)                        IF PKG$COMPILE.OPT = 1 THEN                            COMPILE.COMMANDS<-1> = 'COMPILE MVDB.SUBS ':SUB.NAME                            IF PKG$FLASH.OPT = 1 THEN COMPILE.COMMANDS := " (O"                        END                    END                END            NEXT ON.W            WRITE SUB.LIST ON F.MAKE.FILE, 'DATA_MVDB.SUBS'**Additional files and items*            FILE.CNT = DCOUNT(PKG$FILES<1>,VM)            FOR ON.FILE = 1 TO FILE.CNT                FNAME = PKG$FILES<1,ON.FILE>                ITEM.LIST = ''                IF PKG$LIST<1,ON.FILE> # '' THEN                    EXECUTE 'GET-LIST ':PKG$LIST.FILE<1,ON.FILE>:' ':PKG$LIST<1,ON.FILE> CAPTURING JUNK                    LOOP                        READNEXT ID ELSE EXIT                        ITEM.LIST<-1> = ID                    REPEAT                END ELSE                    IF PKG$ITEMS<1,ON.FILE> = '*' THEN                        EXECUTE 'SELECT ':PKG$FILES.DICT<1,ON.FILE>:' ':PKG$FILES<1,ON.FILE> CAPTURING JUNK                        LOOP                            READNEXT ID ELSE EXIT                            ITEM.LIST<-1> = ID                        REPEAT                    END ELSE                        ITEM.LIST = PKG$ITEMS<1,ON.FILE>                        CONVERT SVM TO AM IN ITEM.LIST                    END                END                IF PKG$FILES.OVR<1,ON.FILE> = 1 THEN FNAME = 'O:':FNAME                IF PKG$FILES.DICT<1,ON.FILE> = 'DICT' THEN                    WRITE ITEM.LIST ON F.MAKE.FILE, "DICT_":FNAME                END ELSE                    WRITE ITEM.LIST ON F.MAKE.FILE, "DATA_":FNAME                END                LOCATE FNAME IN FILE.LIST SETTING DUM ELSE                    FILE.LIST<-1> = FNAME                END            NEXT ON.FILE*            WRITE FILE.LIST ON F.MAKE.FILE, 'FILE.LIST'*            PRE.COMMANDS = PKG$PRE.CMD            CONVERT VM TO AM IN PRE.COMMANDS            WRITE PRE.COMMANDS ON F.MAKE.FILE, 'PRE.COMMANDS'            POST.COMMANDS = PKG$POST.CMD            CONVERT VM TO AM IN POST.COMMANDS            POST.COMMANDS<-1> = COMPILE.COMMANDS            WRITE POST.COMMANDS ON F.MAKE.FILE, 'POST.COMMANDS'*            CALL MVDB.BUILD.PACKAGE(PKG.ID,PATH,SIZE)            PKG$BUILD.TS = DATE() : TIME() "R%5"            PKG$BUILD.SEQ += 1            PKG$SIZE = SIZE            PKG$PATH = PATH            MATWRITE PKG.REC ON F.MVPKG.DATA, PKG.ID        END        GOSUB LOAD.PKGS    CASE action = 'addfile'        LOCATE 'file_name' IN CGI$VARS SETTING POS THEN            FILE.NAME = CGI$VALS<POS>        END ELSE FILE.NAME = ''        LOCATE 'file_dict' IN CGI$VARS SETTING POS THEN            FILE.DICT = CGI$VALS<POS>        END ELSE FILE.DICT = ''        LOCATE 'file_ovr' IN CGI$VARS SETTING POS THEN            FILE.OVR = CGI$VALS<POS>        END ELSE FILE.OVR = ''        LOCATE 'list_file' IN CGI$VARS SETTING POS THEN            LIST.FILE = CGI$VALS<POS>        END ELSE LIST.FILE = ''        LOCATE 'list_name' IN CGI$VARS SETTING POS THEN            LIST.NAME = CGI$VALS<POS>        END ELSE LIST.NAME = ''        LOCATE 'items' IN CGI$VARS SETTING POS THEN            ITEMS = CGI$VALS<POS>            CONVERT ',' TO SVM IN ITEMS        END ELSE ITEMS = ''        IF PKG.ID # '' AND FILE.NAME # '' AND ((LIST.NAME # '' AND LIST.FILE # '') OR ITEMS # '') THEN            MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID THEN                ADD.POS = DCOUNT(PKG$FILES<1>,VM) + 1                PKG$FILES<1,ADD.POS> = FILE.NAME                PKG$FILES.DICT<1,ADD.POS> = FILE.DICT                PKG$ITEMS<1,ADD.POS> = ITEMS                PKG$LIST<1,ADD.POS> = LIST.NAME                PKG$LIST.FILE<1,ADD.POS> = LIST.FILE*PKG$FILES.OVR<1,ADD.POS> = FILE.OVR                DATA 'LIST ':FILE.DICT:' ':FILE.NAME:' TOTAL SIZE DET-SUPP'                IF LIST.NAME # '' THEN                    EXECUTE 'SELECT ':LIST.FILE:' ':LIST.NAME CAPTURING OUTPUT                    END ELSE IF ITEMS = "*" THEN                        EXECUTE 'SELECT ':FILE.DICT:' ':FILE.NAME CAPTURING OUTPUT                    END ELSE                        ITEM.LIST = ITEMS                        CALL SWAP(ITEM.LIST,SVM,'""')                        EXECUTE 'SELECT ':FILE.DICT:' ':FILE.NAME:' "':ITEM.LIST:'"' CAPTURING OUTPUT                    END                    PKG$FILES.SIZE<1,ADD.POS> = TRIM(OUTPUT<7>) + 0                    MATWRITE PKG.REC ON F.MVPKG.DATA, PKG.ID                END                GOSUB EDIT.PACKAGE            END ELSE                PRINT "Error 1"            END        CASE action = 'edit'            MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID THEN                GOSUB EDIT.PACKAGE            END        CASE action = 'save'            VAR.CNT = DCOUNT(CGI$VARS,AM)            MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID ELSE MAT PKG.REC = ''*Clear these so we can rebuild them. We have the technology.            PKG$WIDGETS = ''            PKG$WIDGETS.OVR = ''            PKG$DASHBOARDS = ''            PKG$DASHBOARDS.OVR = ''            PKG$DASHBOARDS.ADD = ''            PKG$FILES.OVR = ''            PKG$WEB.IMAGE = ''            PKG$WEB.CSS = ''            PKG$WEB.JS = ''            PKG$WEB.ICON = ''            PKG$WEB.IMAGE.OVR = ''            PKG$WEB.CSS.OVR = ''            PKG$WEB.JS.OVR = ''            PKG$WEB.ICON.OVR = ''            WIDGET.ADD.POS = 1            DB.ADD.POS = 1            IMAGE.ADD.POS = 1            CSS.ADD.POS = 1            JS.ADD.POS = 1            ICON.ADD.POS = 1            FOR ON.VAR = 1 TO VAR.CNT                THIS.VAR = CGI$VARS<ON.VAR>                THIS.VAL = CGI$VALS<ON.VAR>                BEGIN CASE                CASE THIS.VAL = ''*Get widgets                CASE THIS.VAR[1,11] = 'widget_ovr_'                CASE THIS.VAR[1,7] = 'widget_'                    WIDGET.ID = THIS.VAR[8,99]                    OVR = 'widget_ovr_':WIDGET.ID                    OVR.FLAG = 0                    LOCATE OVR IN CGI$VARS SETTING POS THEN                        OVR.FLAG = 1                    END                    PKG$WIDGETS<1,WIDGET.ADD.POS> = WIDGET.ID                    PKG$WIDGETS.OVR<1,WIDGET.ADD.POS> = OVR.FLAG                    WIDGET.ADD.POS += 1*Get Dashboards                CASE THIS.VAR[1,10] = 'dashboard_'                    DB.ID = THIS.VAR[11,99]                    OVR = 'db_ovr_':DB.ID                    ADD = 'db_add_':DB.ID                    OVR.FLAG = 0; ADD.FLAG = 0                    LOCATE OVR IN CGI$VARS SETTING POS THEN                        OVR.FLAG = 1                    END                    LOCATE ADD IN CGI$VARS SETTING POS THEN                        ADD.FLAG = 1                    END                    PKG$DASHBOARDS<1,DB.ADD.POS> = DB.ID                    PKG$DASHBOARDS.OVR<1,DB.ADD.POS> = OVR.FLAG                    PKG$DASHBOARDS.ADD<1,DB.ADD.POS> = ADD.FLAG                    DB.ADD.POS += 1*Get file overwite flags                CASE THIS.VAR[1,10] = 'files_ovr_'                    OVR.POS = FIELD(THIS.VAR,'_',3)                    PKG$FILES.OVR<1,OVR.POS> = 1*Get web files                CASE THIS.VAR = 'web_images'                    CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)                    PKG$WEB.IMAGE = TRIM(THIS.VAL,VM)                CASE THIS.VAR = 'web_icons'                    CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)                    PKG$WEB.ICON = TRIM(THIS.VAL,VM)                CASE THIS.VAR = 'web_css'                    CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)                    PKG$WEB.CSS = TRIM(THIS.VAL,VM)                CASE THIS.VAR = 'web_js'                    CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)                    PKG$WEB.JS = TRIM(THIS.VAL,VM)                END CASE            NEXT ON.VAR*Get settings            LOCATE 'pkg_pre_cmd' IN CGI$VARS SETTING POS THEN                PKG$PRE.CMD = CGI$VALS<POS>                CALL SWAP(PKG$PRE.CMD,CHAR(13):CHAR(10),VM)            END ELSE PKG$PRE.CMD = ''            LOCATE 'pkg_post_cmd' IN CGI$VARS SETTING POS THEN                PKG$POST.CMD = CGI$VALS<POS>                CALL SWAP(PKG$POST.CMD,CHAR(13):CHAR(10),VM)            END ELSE PKG$POST.CMD = ''            LOCATE 'compile_opt' IN CGI$VARS SETTING POS THEN                PKG$COMPILE.OPT = 1            END ELSE PKG$COMPILE.OPT = 0            LOCATE 'flash_opt' IN CGI$VARS SETTING POS THEN                PKG$FLASH.OPT = 1            END ELSE PKG$FLASH.OPT = 1            LOCATE 'access_opt' IN CGI$VARS SETTING POS THEN                PKG$ACCESS.OPT = 1            END ELSE PKG$ACCESS.OPT = 0            LOCATE 'pkg_name' IN CGI$VARS SETTING POS THEN                PKG$NAME = CGI$VALS<POS>            END            LOCATE 'pkg_desc' IN CGI$VARS SETTING POS THEN                PKG$DESC = CGI$VALS<POS>            END            MATWRITE PKG.REC ON F.MVPKG.DATA, PKG.ID            GOSUB LOAD.PKGS        CASE action = 'delete'            DELETE F.MVPKG.DATA, PKG.ID            EXECUTE 'DELETE-FILE MAKE.FILE,':PKG.ID CAPTURING JUNK            GOSUB LOAD.PKGS        CASE 1            GOSUB LOAD.PKGS        END CASE*        READ ADMIN.TEMPLATE FROM F.WEB.FORMS, "pkg_list_template.html" ELSE ADMIN.TEMPLATE = "pkg_list_template.html not found."        CALL SWAP(ADMIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)        HEADER = '<div id="dashboard_nav">'        HEADER := '<ol class="dashboard_list">'        HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=users">Users</a></li>'        HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets">Widgets</a></li>'        HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=dashboards">Dashboards</a></li>'        OPEN 'RSS.BP' TO F.RSS.BP THEN            HEADER := '<li><a href="':CGI$PATH:'/RSS.MAINT">RSS Feed Maintenance</a></li>'        END        HEADER := '<li class="db_active"><a href="':CGI$PATH:'/RSS.MAINT">Package Manager</a></li>'        HEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN">Return to Dashboard</a></li>'        HEADER := '</ol>'        HEADER := '</div>'        CALL SWAP(ADMIN.TEMPLATE,'<!-- HEADER -->',HEADER)        FOOTER = ''        CALL SWAP(ADMIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)        CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_MAIN -->',HTML)        CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)        CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_THEME -->',SITE$THEME)        CALL WEB.SEND(ADMIN.TEMPLATE)        STOP*LOAD.PKGS:*        HTML = '<table width="100%">'        HTML<-1> = '<tr><td colspan="6"><a href="':CGI$PATH:'/MVPKG.MAIN?action=editpkg" class="add-pkg">Add a Package</a></td></tr>'        HTML<-1> = '<tr><th>Package</th><th>Last Build</th><th>Size</th><th>Build#</th><th>Description</th><th>Action</th></tr>'        EXECUTE "SSELECT MVPKG.DATA BY NAME" CAPTURING JUNK        LOOP            READNEXT FID ELSE EXIT            MATREAD PKG.REC FROM F.MVPKG.DATA, FID ELSE CONTINUE            IF PKG$SIZE # '' THEN                BEGIN CASE                CASE PKG$SIZE >= PWR(10,9)                    PKG$SIZE = OCONV(PKG$SIZE,"MD29"):' GB'                CASE PKG$SIZE >= PWR(10,6)                    PKG$SIZE = OCONV(PKG$SIZE,"MD26"):' MB'                CASE PKG$SIZE >= PWR(10,3)                    PKG$SIZE = OCONV(PKG$SIZE,"MD23"):' kB'                CASE 1                    PKG$SIZE := ' bytes'                END CASE            END            BUILD.DATE = OCONV(PKG$BUILD.TS[1,5],"D2/")            BUILD.TIME = OCONV(PKG$BUILD.TS[6,5],"MTS")            ROW = '<tr><td>':PKG$NAME:'</td><td>':BUILD.DATE:' ':BUILD.TIME:'</td>'            ROW := '<td>':PKG$SIZE:'</td><td>':PKG$BUILD.SEQ:'</td><td>':PKG$DESC:'</td>'            ROW := '<td><a href="/dbc/MVPKG.MAIN?action=edit&pkg_id=':FID:'"><img src="/db/icons/brick_edit.png" title="Edit"></a> '            ROW := \<a onClick="return confirm('DELETE: Are you sure?');" href="/dbc/MVPKG.MAIN?action=delete&pkg_id=\:FID:\"><img src="/db/icons/brick_delete.png" title="Delete"></a> \            ROW := '<a href="/dbc/MVPKG.MAIN?action=rebuild&pkg_id=':FID:'"><img src="/db/icons/brick_go.png" title="Rebuild"></a>'            ROW := '<a href="/dbc/MVPKG.MAIN?action=download&pkg_id=':FID:'"><img src="/db/icons/arrow_down.png" title="Download"></a></td></tr>'            HTML<-1> = ROW        REPEAT        HTML<-1> = '<tr><td colspan="6"><a href="':CGI$PATH:'/MVPKG.MAIN?action=editpkg" class="add-pkg">Add a Package</a></td></tr>'        HTML<-1> = '</table>'        RETURN*EDIT.PACKAGE:        CALL MVDB.SUB.WIDGET.LIST(WIDGET.LIST)        HTML<-1> = '<form action="':CGI$PATH:'/MVPKG.MAIN" method="POST">'        HTML<-1> = 'Package Name: <input type="text" name="pkg_name" value="':PKG$NAME:'"><br/>'        HTML<-1> = 'Description: <input type="text" name="pkg_desc" value="':PKG$DESC:'"><br/>'        HTML<-1> = '<input type="hidden" name="action" value="save">'        HTML<-1> = '<input type="hidden" name="pkg_id" value="':PKG.ID:'">'        HTML<-1> = '<div id="submit"><input class="ui-state-default ui-corner-all" type="submit" value="Save" /></div> '        HTML<-1> = '<div id="tabs"> '        HTML<-1> = '<ul><li><a href="#tabs-1">Widgets</a></li>'        HTML<-1> = '<li><a href="#tabs-2">Dashboards</a></li>'        HTML<-1> = '<li><a href="#tabs-3">File Items</a></li>'        HTML<-1> = '<li><a href="#tabs-4">Web Files</a></li>'        HTML<-1> = '<li><a href="#tabs-5">Settings</a></li></ul>'        HTML<-1> = '<div id="tabs-1" class="tab_content">'*        HTML<-1> = '<table width="100%">'        HTML<-1> = '<tr><th>Selected</th><th>Widget</th><th>Type</th><th>Subroutine</th><th>Overwrite</th></tr>'        WIDGET.CNT = DCOUNT(WIDGET.LIST<1>,VM)        FOR W.POS = 1 TO WIDGET.CNT            IF WIDGET.LIST<7,W.POS> = 1 THEN CLASS = 'error' ELSE CLASS = 'p'            LOCATE WIDGET.LIST<1,W.POS> IN PKG$WIDGETS<1> SETTING POS THEN                CHECKED = 'checked'            END ELSE CHECKED = ''            HTML<-1> = '<tr class="':CLASS:'"><td><input type="checkbox" name="widget_':WIDGET.LIST<1,W.POS>:'" value="checked" ':CHECKED:'></td>'            HTML := '<td>':WIDGET.LIST<1,W.POS>:'</td><td>':WIDGET.LIST<4,W.POS>:'</td><td>':WIDGET.LIST<3,W.POS>:'</td>'            IF PKG$WIDGETS.OVR<1,POS> = 1 THEN                CHECKED = 'checked'            END ELSE CHECKED = ''            HTML := '<td><input type="checkbox" name="widget_ovr_':WIDGET.LIST<1,W.POS>:'" value="checked" ':CHECKED:'></td></tr>'        NEXT W.POS        HTML<-1> = '</table>'*        EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNK        HTML<-1> = '</div><!--#tabs-1-->'        HTML<-1> = '<div id="tabs-2" class="tab_content"> '        HTML<-1> = '<table width="100%">'        HTML<-1> = '<tr><th>Selected</th><th>Dashboard ID</th><th>Description</th><th>Include Widgets</th><th>Overwrite</th></tr>'*        DB.POS = 1        LOOP            READNEXT ID ELSE EXIT            MATREAD DB.ITEM FROM F.MVDB.DEFS, ID ELSE MAT DB.ITEM = ''            HTML<-1> = '<tr>'            LOCATE ID IN PKG$DASHBOARDS<1> SETTING POS THEN                CHECKED = 'checked'            END ELSE CHECKED = ''            HTML<-1> = '<td><input type="checkbox" name="dashboard_':ID:'" value="checked" ':CHECKED:'></td>'            HTML<-1> = '<td>':ID:'</td>'            HTML<-1> = '<td>':DB.DESC:'</td>'            ADD.CHECKED = ''; OVR.CHECKED = ''            IF CHECKED # '' THEN                IF PKG$DASHBOARDS.ADD<1,POS> = 1 THEN                    ADD.CHECKED = 'checked'                END                IF PKG$DASHBOARDS.OVR<1,POS> = 1 THEN                    OVR.CHECKED = 'checked'                END            END*HTML<-1> = '<td><input type="checkbox" name="db_add_':ID:'" value="checked" ':ADD.CHECKED:'></td>'            HTML<-1> = '<td><input type="button" value="Add Widgets to Package"></td>'            HTML<-1> = '<td><input type="checkbox" name="db_ovr_':ID:'" value="checked" ':OVR.CHECKED:'></td>'            HTML<-1> = '</tr>'            DB.POS += 1        REPEAT        HTML<-1> = '</table>'*        HTML<-1> = '</div><!--#tabs-2-->'        HTML<-1> = '<div id="tabs-3" class="tab_content">'        HTML<-1> = '<table width="100%">'        HTML<-1> = '<tr><td colspan="5"><a href="/dbc/MVPKG.MAIN?action=addfile" class="add-file">Add a File</a></td></tr>'        HTML<-1> = '<tr><th>File Name</th><th>Items/List</th><th>Size</th><th>Overwrite</th><th>Action</th></tr>'        FILE.CNT = DCOUNT(PKG$FILES<1>,VM)        FOR ON.FILE = 1 TO FILE.CNT            FILE.ERR = 0; ITEM.ERR = 0            OPEN PKG$FILES.DICT<1,ON.FILE>,PKG$FILES<1,ON.FILE> TO PKG.FILEVAR ELSE FILE.ERR = 1            HTML<-1> = '<tr><td '            IF FILE.ERR THEN HTML := 'class="error"'            HTML := '>':PKG$FILES.DICT<1,ON.FILE>:' ':PKG$FILES<1,ON.FILE>:'</td>'            IF PKG$LIST<1,ON.FILE> # '' THEN                OPEN PKG$LIST.FILE<1,ON.FILE> TO LISTFILE THEN                    READV TST FROM LISTFILE, PKG$LIST<1,ON.FILE>, 1 ELSE                        ITEM.ERR = 1                    END                END ELSE ITEM.ERR = 1                HTML<-1> = '<td '                IF ITEM.ERR THEN HTML := 'class="error"'                HTML := '>List: '                IF PKG$LIST.FILE<1,ON.FILE> # '' THEN                    HTML := PKG$LIST.FILE:', '                END                HTML := PKG$LIST<1,ON.FILE>:'</td>'            END ELSE                IF NOT(FILE.ERR = 1) THEN                    IF PKG$ITEMS<1,ON.FILE> # '*' THEN                        ITEM.CNT = DCOUNT(PKG$ITEMS<1,ON.FILE>,SVM)                        FOR ON.ITEM = 1 TO ITEM.CNT                            READV TST FROM PKG.FILEVAR, PKG$ITEMS<1,ON.FILE,ON.ITEM>, 1 ELSE                                ITEM.ERR = 1                            END                        NEXT ON.ITEM                    END                END ELSE ITEM.ERR = 1                SHOW.ITEMS = PKG$ITEMS<1,ON.FILE>                CONVERT SVM TO ',' IN SHOW.ITEMS                IF LEN(SHOW.ITEMS) > 20 THEN                    SHOW.ITEMS = SHOW.ITEMS[1,20]:'...'                END                HTML<-1> = '<td '                IF ITEM.ERR THEN HTML := 'class="error"'                HTML := '>':SHOW.ITEMS:'</td>'            END            SHOW.SIZE = PKG$FILES.SIZE<1,ON.FILE>            IF SHOW.SIZE # '' THEN                BEGIN CASE                CASE SHOW.SIZE >= PWR(10,9)                    SHOW.SIZE = OCONV(SHOW.SIZE,"MD29"):' GB'                CASE SHOW.SIZE >= PWR(10,6)                    SHOW.SIZE = OCONV(SHOW.SIZE,"MD26"):' MB'                CASE SHOW.SIZE >= PWR(10,3)                    SHOW.SIZE = OCONV(SHOW.SIZE,"MD23"):' kB'                CASE 1                    SHOW.SIZE := ' bytes'                END CASE            END            HTML<-1> = '<td>':SHOW.SIZE:'</td>'            IF PKG$FILES.OVR<1,ON.FILE> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''            HTML<-1> = '<td><input type="checkbox" name="files_ovr_':ON.FILE:'" ':CHECKED:'></td>'            HTML<-1> = \<td><a href="javascript:editFile('\:PKG$FILES.DICT<1,ON.FILE>:',':PKG$FILES<1,ON.FILE>:',':PKG$LIST.FILE<1,ON.FILE>:',':PKG$LIST<1,ON.FILE>:',':PKG$ITEMS<1,ON.FILE>:\');"><img title="Edit" class="icon" src="/db/icons/pencil.png"></a>\            HTML<-1> = \<a href="javascript:deleteFile('\:ON.FILE:\')"><img title="Delete" class="icon" src="/db/icons/delete.png"></a>\            HTML<-1> = '</td></tr>'        NEXT ON.FILE        HTML<-1> = '<tr><td colspan="5"><a href="/dbc/MVPKG.MAIN?action=addfile" class="add-file">Add a File</a></td></tr></table>'*        HTML<-1> = '</div><!--#tabs-3-->'        HTML<-1> = '<div id="tabs-4" class="tab_content">'        HTML<-1> = '<div id="accordion">'        HTML<-1> = '<h3><a href="#">Images</a></h3><div>'        IMAGE.CNT = DCOUNT(PKG$WEB.IMAGE<1>,VM)        HTML<-1> = '<textarea rows="8" cols="40" name="web_images">'        FOR ON.IMAGE = 1 TO IMAGE.CNT            IF PKG$WEB.IMAGE.OVR<1,ON.IMAGE> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''*HTML<-1> = '<li><input type="checkbox" name="image_ovr_':ON.IMAGE:'" value="1" ':CHECKED:'><input type="text" name="image_':ON.IMAGE:'" value="':PKG$WEB.IMAGE<1,ON.IMAGE>:'"></li>'            HTML<-1> = PKG$WEB.IMAGE<1,ON.IMAGE>        NEXT ON.IMAGE        HTML<-1> = '</textarea></div>'        HTML<-1> = '<h3><a href="#">CSS</a></h3><div>'        CSS.CNT = DCOUNT(PKG$WEB.CSS<1>,VM)        HTML<-1> = '<textarea rows="8" cols="40" name="web_css">'        FOR ON.CSS = 1 TO CSS.CNT            IF PKG$WEB.CSS.OVR<1,ON.CSS> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''*HTML<-1> = '<li><input type="checkbox" name="css_ovr_':ON.CSS:'" value="checked" ':CHECKED:'><input type="text" name="css_':ON.CSS:'" value="':PKG$WEB.CSS<1,ON.CSS>:'"></li>'            HTML<-1> = PKG$WEB.CSS<1,ON.CSS>        NEXT ON.CSS        HTML<-1> = '</textarea></div>'        HTML<-1> = '<h3><a href="#">Javascript</a></h3><div>'        JS.CNT = DCOUNT(PKG$WEB.JS<1>,VM)        HTML<-1> = '<textarea rows="8" cols="40" name="web_js">'        FOR ON.JS = 1 TO JS.CNT            IF PKG$WEB.JS.OVR<1,ON.JS> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''*HTML<-1> = '<li><input type="checkbox" name="js_ovr_':ON.JS:'" value="checked" ':CHECKED:'><input type="text" name="js_':ON.JS:'" value="':PKG$WEB.JS<1,ON.JS>:'"></li>'            HTML<-1> = PKG$WEB.JS<1,ON.JS>        NEXT ON.JS        HTML<-1> = '</textarea></div>'        HTML<-1> = '<h3><a href="#">Icons</a></h3><div>'        ICON.CNT = DCOUNT(PKG$WEB.ICON<1>,VM)        HTML<-1> = '<textarea rows="8" cols="40" name="web_icons">'        FOR ON.ICON = 1 TO ICON.CNT            IF PKG$WEB.ICON.OVR<1,ON.ICON> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''*HTML<-1> = '<li><input type="checkbox" name="icon_ovr_':ON.ICON:'" value="checked" ':CHECKED:'><input type="text" name="icon_':ON.ICON:'" value="':PKG$WEB.ICON<1,ON.ICON>:'"></li>'            HTML<-1> = PKG$WEB.ICON<1,ON.ICON>        NEXT ON.ICON        HTML<-1> = '</textarea></div>'        HTML<-1> = '</div>'*        HTML<-1> = '</div><!--#tabs-4-->'        HTML<-1> = '<div id="tabs-5" class="tab_content">'*HTML<-1> = '<b>Settings</b>'        HTML<-1> = '<ul><li>Pre-Install Commands</li>'        CALL SWAP(PKG$PRE.CMD,VM,CHAR(13):CHAR(10))        HTML<-1> = '<li><textarea rows="5" cols="50" name="pkg_pre_cmd">':PKG$PRE.CMD:'</textarea></li>'        HTML<-1> = '<li>Post-Install Commands</li>'        CALL SWAP(PKG$POST.CMD,VM,CHAR(13):CHAR(10))        HTML<-1> = '<li><textarea rows="5" cols="50" name="pkg_post_cmd">':PKG$POST.CMD:'</textarea></li>'        IF PKG$COMPILE.OPT = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''        HTML<-1> = '<li><input type="checkbox" name="compile_opt" value="checked" ':CHECKED:'> Compile widget subroutines</li>'        IF PKG$FLASH.OPT = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''        HTML<-1> = '<li><input type="checkbox" name="flash_opt" value="checked" ':CHECKED:'> Flash compile widget subroutines</li>'        IF PKG$ACCESS.OPT = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''        HTML<-1> = '<li><input type="checkbox" name="access_opt" value="checked" ':CHECKED:'> Include dashboard and widget user access settings</li>'        HTML<-1> = '</ul></div></div></form>'        RETURN000F05RSS.MAIN0c2* RSS.MAIN** Program: RSS.MAIN* Author: Luke Bucklin* Date: 2/23/2009** Purpose: Create an RSS feed using user-defined subroutine calls** 07-09-15 Peter Schellenbach - jBASE does not use catalog pointers, so just CALL the*   subroutine and hope it doesn't crash!*                               INCLUDE WBPD WWW.INCLUDEINCLUDE RSS.BP RSS.DATA.INC*CALL SET.CONTENT.TYPE("application/xml")*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE STOP 201, 'RSS.FEEDS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'ENDOPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'*FEED.REC = ""LOCATE "feed" IN CGI$VARS SETTING POS THEN  feed = CGI$VALS<POS>  READ FEED.REC FROM F.RSS.FEEDS, feed ELSE FEED.REC = ""ENDIF FEED.REC = "" THEN  feed = "FEEDS"  READ FEED.REC FROM F.RSS.FEEDS, feed ELSE    CALL SET.CONTENT.TYPE("application/xml")    CALL WEB.SEND('<H1>No feeds configured</H1>')    STOP  ENDENDSEL.SUB = FEED.REC<4>ITEM.SUB = FEED.REC<5>MAT RSS.DATA = ""RSS$FEED.REC = FEED.REC*PJS 07-09-15 JBASE* jBASE does not use catalog pointers - just call the subroutine!*READ CATPTR FROM F.MD, SEL.SUB ELSE CATPTR = ""*IF CATPTR<1> = "VR" THEN  CALL @SEL.SUB(CGI$VARS,CGI$VALS,feed,F.FEED.FILE,MAT RSS.DATA)*END ELSE*  RSS$FEED.REC<1> = "Feed error: ":SEL.SUB:" not cataloged."*ENDFEED.REC = RSS$FEED.RECCALL RSS.XML.ENCODE(FEED.REC,1)FEED.TITLE = FEED.REC<1>FEED.LINK = "http://":CGI$SERVER.NAME:CGI$PATH:'/RSS.MAIN?feed=':feedIF FEED.REC<2> # "" THEN FEED.LINK := "&":FEED.REC<2>FEED.DESC = FEED.REC<3>XML = ""XML<-1> = '<?xml version="1.0" ?>'XML<-1> = '<rss version="2.0">'XML<-1> = '<channel>'XML<-1> = ' <title>':FEED.TITLE:'</title>'XML<-1> = ' <link>':FEED.LINK:'</link>'SHOW.DESC = FEED.DESCIF SHOW.DESC = "" THEN SHOW.DESC = FEED.TITLEXML<-1> = ' <description>':SHOW.DESC:'</description>'XML<-1> = ' <generator>Sierra Bravo Pick RSS</generator>'XDATE = DATE()XTIME = TIME()GOSUB MAKE.DATE.TIMEXML<-1> = ' <lastBuildDate>':DATE.TIME:'</lastBuildDate>'*IF SYSTEM(11) THEN  SELECT TO ID.LISTEND ELSE ID.LIST = ""SUB.ERR = 0LOOP  READNEXT RID FROM ID.LIST ELSE EXIT  READ FEED.REC FROM F.FEED.FILE, RID ELSE EXIT  *PJS 07-09-15 JBASE* jBASE does not use catalog pointers - just call the subroutine!  *READ CATPTR FROM F.MD, ITEM.SUB ELSE CATPTR = ""  *IF CATPTR<1> = "VR" THEN    CALL @ITEM.SUB(CGI$VARS,CGI$VALS,F.FEED.FILE,RID,FEED.REC,MAT RSS.DATA)  *END ELSE  *  SUB.ERR = 1  *  MAT RSS.DATA = ""  *  RSS$TITLE = "Subroutine ":ITEM.SUB:" not cataloged."  *  RSS$DESCRIPTION = "Feed Error"  *  RSS$DATE = ICONV("1/1/2000",'D')  *  RSS$TIME = ICONV("12:00:00",'MT')  *END  FOR XX = 1 TO 5    CALL RSS.XML.ENCODE(RSS.DATA(XX),1)  NEXT XX  XML<-1> = '<item>'  XML<-1> = ' <title>':RSS$TITLE:'</title>'  IF INDEX(RSS$LINK,'//',1) THEN    LINK = RSS$LINK  END ELSE IF RSS$LINK # "" THEN    LINK = "http://":CGI$SERVER.NAME:CGI$PATH:'/':RSS$LINK  END ELSE    LINK = ""  END  XML<-1> = ' <link>':LINK:'</link>'  XML<-1> = ' <author>':RSS$AUTHOR:'</author>'  XML<-1> = ' <description><![CDATA['  XML<-1> = RSS$DESCRIPTION  XML<-1> =']]></description>'  XDATE = RSS$DATE  XTIME = RSS$TIME  GOSUB MAKE.DATE.TIME  XML<-1> = '<pubDate>':DATE.TIME:'</pubDate>'  XML<-1> = '</item>'  CALL WEB.SEND(XML)  XML = ''REPEATXML<-1> = '</channel>'XML<-1> = '</rss>'CALL WEB.SEND(XML)STOP*MAKE.DATE.TIME: **READV GMT.OFFSET FROM F.MVDB.CONTROL, 'MVDB.SETTINGS', 6 ELSE GMT.OFFSET = 0IF XTIME = "" THEN XTIME = TIME()IF XDATE = "" THEN XDATE = DATE()*XTIME += ICONV("5:00",'MT')XTIME += 3600 * (GMT.OFFSET * (-1))IF XTIME > 86400 THEN  XTIME -= 86400  XDATE += 1ENDDATE.TIME = OCONV(XDATE,'DWA')[1,3]:', ':OCONV(XDATE,'DD'):' ':OCONV(XDATE,'DMA')[1,3]:' ':OCONV(XDATE,'DY'):' ':OCONV(XTIME,'MTS')RETURN000DDDMVDB.PURGE.SESSIONS0c2* @(#) MVDB.PURGE.SESSIONS Ported to jBASE 17:00:17  08 JUL 2015*  The following variable names were converted*   DATE,TIME* ** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Purge old session data** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed TCLREAD to use SENTENCE() - its more portable* 11-30-15 TOM PARKER - PURGE BASED ON PASSED USERID* 01-25-16 TOM PARKER - DONT AUTO PURGE EMAILED AND WEBSERVICE LOGINS FOR 10 MINUTES**#MAKE# RL $OPTIONS D3    OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, 'WEB.SESSION'    OPEN '','MVDB.UDATA' TO F.MVDB.UDATA ELSE STOP 201, 'MVDB.UDATA'    OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'*    READ SETTINGS.REC FROM F.MVDB.CONTROL, 'MVDB.SETTINGS' ELSE SETTINGS.REC = ""    PURGE.AGE = SETTINGS.REC<5> * 3600  ;* Specified in hours    IF PURGE.AGE = 0 THEN PURGE.AGE = 8 * 3600**PJS 06-12-15*TCLREAD TCL.LINE    TCL.LINE = SENTENCE()     ;*PJS 06-12-15*    PS.LIST = OCONV( TCL.LINE, 'G1 999' )    PS.LIST = TRIM( PS.LIST )    CONVERT " " TO @AM IN PS.LIST*11-30-15*    IF PS.LIST # "" THEN*11-30-15*        XLINE = "SELECT WEB.SESSION "*11-30-15*        FOR N = 1 TO DCOUNT(PS.LIST,@AM)*11-30-15*            XLINE := "'":PS.LIST<N>:"' "*11-30-15*        NEXT N*11-30-15*        EXECUTE XLINE CAPTURING JUNK*11-30-15*        FORCE.PURGE = 1*11-30-15*    END ELSE*11-30-15*        EXECUTE 'SSELECT WEB.SESSION' CAPTURING JUNK*11-30-15*        FORCE.PURGE = 0*11-30-15*    END    EXECUTE 'SSELECT WEB.SESSION' CAPTURING JUNK; *11-30-15*    PURGE.LIST = ''    LOOP        READNEXT SESS.ID ELSE EXIT        READ SESS.REC FROM F.WEB.SESSION,SESS.ID ELSE SESS.REC = ''        PURGE.THIS = 0        PURGE.WEBSERVICE=0;  *01-25-16**11-30-15*        IF FORCE.PURGE THEN*11-30-15*            PURGE.THIS = 1*11-30-15*        END ELSE        LOCATE SESS.ID IN PS.LIST SETTING PURGE.THIS ELSE           PURGE.THIS=0           LOCATE 'userid' IN SESS.REC<1> SETTING USERID.POS ELSE USERID.POS=0           IF USERID.POS THEN              USERID=SESS.REC<2,USERID.POS>*01-25-16*              LOCATE USERID IN PS.LIST SETTING PURGE.THIS ELSE PURGE.THIS=0              LOCATE USERID IN PS.LIST SETTING PURGE.WEBSERVICE ELSE PURGE.WEBSERVICE=0; *01-25-16            END         END        IF NOT(PURGE.THIS) THEN            LOCATE "LastSessionAccess" IN SESS.REC<1> SETTING VPOS THEN                Date = FIELD(SESS.REC<2,VPOS>,'*',1)                Time = FIELD(SESS.REC<2,VPOS>,'*',2)*                AGE = (DATE()-Date) * 86400                AGE += (TIME()-Time)**01-25-16*                IF AGE > PURGE.AGE THEN                IF PURGE.WEBSERVICE THEN THIS.PURGE.AGE=600 ELSE THIS.PURGE.AGE=PURGE.AGE; * 01-25-16                IF AGE > THIS.PURGE.AGE THEN; * 01-25-16                    PURGE.THIS = 1                END            END ELSE PURGE.THIS = 1        END        IF PURGE.THIS THEN            DELETE F.WEB.SESSION, SESS.ID            PURGE.LIST<-1> = SESS.ID        END    REPEAT*    EXECUTE 'SELECT MVDB.UDATA' CAPTURING JUNK    LOOP        READNEXT ID ELSE EXIT        SID = FIELD( ID, '$', 1 )        LOCATE SID IN PURGE.LIST SETTING POS THEN            DELETE F.MVDB.UDATA, ID        END ELSE            READ TST FROM F.WEB.SESSION, SID ELSE                DELETE F.MVDB.UDATA, ID            END        END    REPEAT    STOP002CF9APP.INSTALLER0c2** Copyright (C) 2009 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo Corporation* Date: 07/15/2009* Description: Application installer** Modified By: Dave Bucklin, Nerdery Interactive Labs* Date: 02/04/2011* Description: Add overwrite flag, clashes handling specific to MVDashboard** Modified By: Mike Street, Zumasys* Date: 03/02/2015* Description: Adapt for jBASE** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed READSEQ to READBLK - original D3 code was block-oriented, not line-oriented.**JB INCLUDE DM,BP,UNIX.H FCNTL.H*JB INCLUDE DM,BP,UNIX.H MODE.H*JB CHAR BUFFER[10000]*    BUFFER = ""*    INSTALL.LOG.ON = 0    INSTALL.LOG.ID = "INSTALL*":DATE():"*":TIME()    INSTALL.LOG = ""    PROCESS.STATUS = 0    OVR.FLAG = 0    PROMPT ""    PRINT "File path: ":        INPUT PACKAGE.FILE    IF PACKAGE.FILE = "VERSION" THEN        PRINT        PRINT "Installer Version"        PRINT "1.0"        STOP    END*    returnCode = ""*    OPENSEQ PACKAGE.FILE READONLY TO HANDLE SETTING returnCode ELSE        PRINT "Unable to open sequential file, returnCode = " : returnCode        STOP    END*JB   HANDLE = %OPEN(PACKAGE.FILE,O$RDONLY+O$BINARY)*JB   IF NOT(HANDLE) THEN*JB       PRINT "Unable to open file." ; STOP*JB   END*    L = 0    PACKET = ""    LOOP    *JB     L = %READ(HANDLE,BUFFER,10000)*JB        READBLK BUFFER FROM HANDLE, 10000 ELSE   IF PACKET = '' THEN      CRT 'CANT READ BUFFER'      STOP    END   BUFFER='' END        L=LEN(BUFFER)*END JB*    WHILE L > 0 DO        PACKET := BUFFER    REPEAT    IF PACKET = "" THEN        PRINT "No package."        STOP    END    INSTALL.ID = TIMEDATE()    KEEP.SOURCE = "1"*    PRINT    PRINT "Installing..."*    OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE        CMD = "CREATE-FILE MV.PACKED.FILE 1 31"        GOSUB EXEC.CMD        OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE            ERRFILE = "MV.PACKED.FILE"            GOSUB OPEN.ERR            STOP        END    END    WRITE PACKET ON F.PACKED.FILE, "PACKAGE"    OPEN '','MD' TO F.MD ELSE        ERRFILE = "MD"        GOSUB OPEN.ERR        STOP    END    OPEN "MV.INSTALL" TO F.INSTALL ELSE        CMD = "CREATE-FILE MV.INSTALL 1 11"        GOSUB EXEC.CMD        OPEN "MV.INSTALL" TO F.INSTALL ELSE            ERRFILE = "MV.INSTALL"            GOSUB OPEN.ERR            STOP        END    END    OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE        CMD = "CREATE-FILE MV.INSTALL.CF 1 11"        GOSUB EXEC.CMD        OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE            ERRFILE = "MV.INSTALL.CF"            GOSUB OPEN.ERR            STOP        END    END    OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE        CMD = "CREATE-FILE MVAPPS.INSTALLED 3 31"        GOSUB EXEC.CMD        OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE            ERRFILE = "MVAPPS.INSTALLED"            GOSUB OPEN.ERR            STOP        END    END    OPEN "DICT","MVDB.CLASHES" TO FD.MVDB.CLASHES ELSE        CMD = "CREATE-FILE DICT MVDB.CLASHES 3"        GOSUB EXEC.CMD    END    INSTALL.LOG.ON = 1*    CLEARFILE F.INSTALL    DELETE F.INSTALL.CF, "MVAPPS-PRE-SCRIPT"      ;* Get rid of this just in case one is left over    DELETE F.INSTALL.CF, "MVAPPS-POST-SCRIPT"    DELETE F.INSTALL.CF, "PACKAGE.INFO"    TARGET = F.INSTALL    TARGET.NAME = "MV.INSTALL"    GOSUB UNPACK* All individual file packages are now in INSTALL* Unpack the MD scripts    READ PACKET FROM F.INSTALL, "MV.INSTALL.CF" THEN        TARGET = F.INSTALL.CF        TARGET.NAME = "MV.INSTALL.CF"        GOSUB UNPACK        DELETE F.INSTALL, "MV.INSTALL.CF"    END** Execute scripts that are required prior to compilation*    READ CMD FROM F.INSTALL.CF, "MVAPPS-PRE-SCRIPT" THEN        LOG.LINE = TIMEDATE():": Processing PRE-INSTALL commands..."        INSTALL.LOG<-1> = LOG.LINE* Execute commands that need to be run before the install process begins        GOSUB EXEC.CMD        LOG.LINE = TIMEDATE():": Completed PRE-INSTALL commands."        INSTALL.LOG<-1> = LOG.LINE    END    READ PACKAGE.INFO FROM F.INSTALL.CF, "PACKAGE.INFO" ELSE PACKAGE.INFO = ""    PACKAGE.ID = PACKAGE.INFO<6>    PACKAGE.INFO<4> = DATE()    PACKAGE.INFO<5> = TIME()*    SELECT F.INSTALL    LOOP        READNEXT PKG.ID ELSE EXIT        IF PKG.ID # "" THEN            READ PACKET FROM F.INSTALL, PKG.ID THEN                TARGET.FILE = FIELD(PKG.ID," ",1)                IF TARGET.FILE[1,7] = "BINARY:" THEN TARGET.FILE=TARGET.FILE[8,999]        ;*JB                DICT.MOD = FIELD( PKG.ID," ",2)                DATA.MOD = FIELD( PKG.ID," ",3)                DICT = ""                IF FIELD( PKG.ID,'_',1 ) = "DICT" THEN                    TARGET.FILE = FIELD( PKG.ID, '_', 2 )                    IF TARGET.FILE[1,7] = "BINARY:" THEN TARGET.FILE=TARGET.FILE[8,999]    ;*JB                    DICT = "DICT"                END                OPEN DICT,TARGET.FILE TO F.TARGET ELSE                    IF NOT(INDEX(TARGET.FILE,':',1)) THEN                        IF DICT.MOD = "" THEN DICT.MOD = 3                        IF DATA.MOD = "" THEN DATA.MOD = 31                        CMD = "CREATE-FILE ":TARGET.FILE:" ":DICT.MOD:" ":DATA.MOD                        GOSUB EXEC.CMD                    END                    OPEN DICT,TARGET.FILE TO F.TARGET ELSE                        PRINT "Unable to create file ":TARGET.FILE                        GOSUB CLEANUP                        STOP                    END                END                TARGET = F.TARGET                TARGET.NAME = TRIM(DICT:" ":TARGET.FILE)                GOSUB UNPACK            END        END    REPEAT** Execute script required post compilation*    READ CMD FROM F.INSTALL.CF, "MVAPPS-POST-SCRIPT" THEN        LOG.LINE = TIMEDATE():": Processing POST-INSTALL commands..."        INSTALL.LOG<-1> = LOG.LINE* Use compile options if they are present.        OPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL THEN            READ COMPILE.SETUP FROM F.MVDB.CONTROL, 'COMPILE.SETUP' THEN                COMPILE.VERB = FIELD(COMPILE.SETUP<1>,' ',1)                IF COMPILE.VERB # '' THEN                    OPTS = FIELD(COMPILE.SETUP<1>,'(',2)                    IF OPTS # '' THEN OPTS = "(":OPTS                    CMD.CNT = DCOUNT( CMD, @AM )                    FOR CMD.XX = 1 TO CMD.CNT                        IF FIELD(CMD<CMD.XX>,' ',1) = 'BASIC' OR FIELD(CMD<CMD.XX>,' ',1) = 'COMPILE' THEN*make sure we use the right verb and options from the compile.setup                            CMD<CMD.XX> = COMPILE.VERB:' ':CMD<CMD.XX>[INDEX(CMD<CMD.XX>,' ',1)+1,999]:' ':OPTS                        END                    NEXT CMD.XX                END            END        END* Execute commands that need to be run at the end of the install process        GOSUB EXEC.CMD        LOG.LINE = TIMEDATE():": Completed POST-INSTALL commands."        INSTALL.LOG<-1> = LOG.LINE    END**JB*    IF NOT(KEEP.SOURCE) THEN*JB*        FOR X = 1 TO DCOUNT( SOURCE.FILES, @AM )*JB*            CMD = "CLEAR-FILE DATA ":SOURCE.FILES<X>*JB*            GOSUB EXEC.CMD*JB*        NEXT X*JB*    END    READ INSTALL.LIST FROM F.INSTALL.CF, "LAST.INSTALL" ELSE INSTALL.LIST = ""    INSTALL.LIST = INSERT( INSTALL.LIST, 1, 0, 0, INSTALL.ID )    WRITE INSTALL.LIST ON F.INSTALL.CF, "LAST.INSTALL"    GOSUB CLEANUP    INSTALL.LOG<-1> = TIMEDATE():": Install complete."    WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID    WRITE PACKAGE.INFO ON F.MVAPPS.INSTALLED, PACKAGE.ID    PROCESS.STATUS = 1    GOSUB SEND.DATA    STOP*********UNPACK:   **********    PRINT "Unpacking ":TARGET.NAME:"... ":*    BYTES = 0    CNT = 0    LOOP        PLENGTH = OCONV( PACKET[1,6], 'MCXD' )        REC = PACKET[7,PLENGTH]        PACKET = PACKET[PLENGTH+7,9999999]        ID = REC<1>        REC = DELETE( REC, 1, 0, 0 )        TYP = REC[1,2]        OVR.FLAG = REC[3,1]        REC = REC[4,9999999]        IF TYP = "0x" THEN            REC = OCONV( REC, 'MY' )            END ELSE IF TYP # "0c" THEN                REC = TYP:REC            END*            CNT += 1            BYTES += LEN(REC)            IF OVR.FLAG THEN                IF DICT = "" THEN*If we're not installing DICT items, compare for CLASHES                    READ CLASH FROM TARGET, ID THEN                        BEGIN CASE*Preserve dashboard user passwords                        CASE TARGET.FILE = "MVDB.USERS"                            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>*Preserve dashboard access profile                        CASE TARGET.FILE = "MVDB.DEFS"                            IF CLASH<5> # REC<5> THEN REC<5> = CLASH<5>*Preserve widget access profile                        CASE TARGET.FILE = "MVDB.WIDGETS"                            IF CLASH<2> # REC<2> THEN REC<2> = CLASH<2>*Preserve widget compile option                        CASE TARGET.FILE = "MVDB.CONTROL" AND ID = "COMPILE.SETUP"                            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>                        END CASE                        IF CLASH # '' AND REC # CLASH THEN                            CLASH.NAME = TARGET.NAME                            CONVERT " " TO "_" IN CLASH.NAME                            OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE                                CMD = "CREATE-FILE DATA MVDB.CLASHES,":CLASH.NAME:" 7"                                GOSUB EXEC.CMD                                OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE                                    PRINT "Unable to create file MVDB.CLASHES,":CLASH.NAME                                    GOSUB CLEANUP                                    STOP                                END                            END                            WRITE CLASH ON F.CLASHES, ID                            CLOSE F.CLASHES                        END                    END                END                WRITE REC ON TARGET, ID            END ELSE                READ TST FROM TARGET, ID ELSE                    WRITE REC ON TARGET, ID                END            END            IF NOT(MOD(CNT,500)) THEN PRINT "*":        UNTIL PACKET = "" DO REPEAT        IF CNT # 1 THEN PLURAL = "s" ELSE PLURAL = ""        PRINT CNT:" record":PLURAL:"."        LOG.LINE = TIMEDATE():": UNPACKED ":CNT:" RECORDS TO ":TARGET.NAME        INSTALL.LOG<-1> = LOG.LINE        RETURN**********CLEANUP:  ***********        CLEARFILE F.INSTALL        CLEARFILE F.PACKED.FILE        RETURN*EXEC.CMD: **        CMD.CNT = DCOUNT( CMD, @AM )        FOR CMD.XX = 1 TO CMD.CNT            THIS.CMD = CMD<CMD.XX>            LOG.LINE = TIMEDATE():": EXEC: ":THIS.CMD            INSTALL.LOG<-1> = LOG.LINE            EXECUTE THIS.CMD CAPTURING JUNK            IF INSTALL.LOG.ON THEN                WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID            END        NEXT CMD.XX        RETURN*OPEN.ERR: **        LOG.LINE = TIMEDATE():": FILE OPEN ERROR: ":ERRFILE        INSTALL.LOG<-1> = LOG.LINE        PRINT LOG.LINE        GOSUB SEND.DATA        RETURN*SEND.DATA:**        PRINT        IF PROCESS.STATUS = 1 THEN INSTALL.STATUS = "Success" ELSE INSTALL.STATUS = "Failed"        PRINT "Install process finished. Status: ":INSTALL.STATUS        RETURN    END0019BBWEB.SEND0c2SUBROUTINE WEB.SEND(FORM)********************** (C) Copyright 2003 Sierra Bravo Corporation, All rights reserved.** Program: WEB.SEND* Library: WBP*  Author: Luke J. Bucklin*    Date: 2/29/00** Purpose: Send the web page.** Modified By  : Mike Schmidt, Sierra Bravo* Date Revised : 11/06/2003* Modification : The program was modified to account for the following:*                1) Header Management: This program will check to see*                   if the content type has been written to the browser*                   before ever printing anything to standard out.  If*                   the headers have not been sent, the program will print*                   the headers using the SESSION$CONTENT.TYPE,*                   SESSION$HEADERS, and SESSION$COOKIES session variables.*                   The program will then set the SESSION$CONTENT.SENT*                   variable.*                   WARNING: This program assumes that the global SESSION*                   variables were setup prior to using this subroutine.*                   WARNING: The SESSION$OUTBUF.SIZE should not be relied*                   upon to prevent the buffer from exceeding the set limit.*                   This program simply flushes the buffer if it exceeds*                   the set size limit.**                2) Buffer Management: Instead of always printing every*                   thing to standard out, by default the program will*                   write everything passed into into the SESSION$OUTBUF*                   variable.  This program will then flush the buffer*                   under certain situations.  The first is if the buffer*                   size reaches the limit set in SESSION$OUTBUF.SIZE. If*                   this happens the prgram will flush the buffer then*                   reinitialize it.  The second is if the SESSION$OUTBUF.FLAG*                   is set to FALSE, then this program will always flush*                   the buffer.**                3) The program will display debug information if the global*                   variable SESSION$GLOBAL.DEBUG flag is >= 3.** Modified by Peter Schellenbach of Zumasys 12-15-15 for new PDF generation feature*   do not append form & @AM to output buffer if form is null*   do not add DOCTYPE to output unless content type is html*   do not include debug output if content type is not html or xml** 09-23-16 Tom Parker - Eliminate GO_BACK button support and replace with*          logic to handle standard browser back button (need to prevent browser*          from caching MVDB pages).** 04-21-17 Peter Schellenbach - send response status code before Content-type,*          if set (X-MVDB-STATUS private header).** 10-18-17 Peter Schellenbach - removed duplicate debug info section. Changed condition*          for sending debug info to SESSION$GLOBAL.DEBUG >= 3 instead of = 1.*          Eliminate extra AM appended to the form data.*********************** Add the incoming string to the buffer.INCLUDE WBPD WWW.INCLUDE*IF NOT(ASSIGNED(SESSION$CONTENT.SENT)) THEN  MAT WWW.INFO = ""  SESSION$CONTENT.SENT = 1END*SHOW.SESSION.VARS = 0IF SESSION$GLOBAL.DEBUG >= 3 THEN  OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SHOW.SESSION.VARS = 1END*IF FORM <> '' THEN  CALL SWAP(FORM,'<!-- CGI$PATH -->',CGI$PATH)  *PJS 09-21-2017*SESSION$OUTBUF := FORM:@AM  SESSION$OUTBUF := FORM ; *PJS 09-21-2017*END** If the buffer is greater then the max size or the buffer flag is false then flush.IF LEN(SESSION$OUTBUF) >= SESSION$OUTBUF.SIZE OR NOT(SESSION$OUTBUF.FLAG) THEN* Before flushing, check to see if the headers have been send.  IF NOT(SESSION$CONTENT.SENT) THEN    IF SESSION$STATUS.CODE > 0 THEN* 04-21-17 send the status code before headers      PRINT "X-MVDB-STATUS: ":SESSION$STATUS.CODE    END* The headers have not been sent so send them now.    IF SESSION$CONTENT.TYPE = "" THEN      CALL SET.CONTENT.TYPE("")    END* If there are any cookies that need to be set, do it now.    PRINT "Content-type: ":SESSION$CONTENT.TYPE* If there are any cookies that need to be set, do it now.    FOR I = 1 TO DCOUNT(SESSION$COOKIES,@AM)      COOKIE = SESSION$COOKIES<I>      IF INDEX(COOKIE, "; path=", 1) + INDEX(COOKIE, ";path=", 1) = 0 THEN COOKIE := "; path=/"      PRINT "Set-Cookie: ":COOKIE    NEXT I* If there are any additional headers that need to be set, do it now.* 9-23-16 *    PRINT 'Cache-Control: no-cache'    PRINT 'Expires: Mon, 26 Jul 1997 05:00:00 GMT'; * 9-26-13 *    PRINT 'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'; * 9-26-13 *    PRINT 'Pragma: no-cache'; * 9-26-13 *    FOR I = 1 TO DCOUNT(SESSION$HEADERS,@AM)      PRINT SESSION$HEADERS<I>    NEXT I* Now print the blank line that ends the headers.    PRINT    IF INDEX(SESSION$CONTENT.TYPE,'html',1) THEN      IF INDEX(SESSION$OUTBUF<1>,'<!DOCTYPE',1) = 0 THEN        PRINT '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'        PRINT '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'      END    END* Set the SESSION$CONTENT.SENT variable so next time we know not to send the headers.    SESSION$CONTENT.SENT = 1* From this point on, do not buffer.    IF SESSION$OUTBUF.FLAG THEN      CALL SET.BUFFER(0)    END  END  LINE.CNT = DCOUNT( SESSION$OUTBUF, @AM )  FOR LINE.J = 1 TO LINE.CNT    PRINT SESSION$OUTBUF<LINE.J>  NEXT LINE.J  IF SESSION$GLOBAL.DEBUG >= 3 THEN    IF INDEX(SESSION$CONTENT.TYPE,'xml',1) OR INDEX(SESSION$CONTENT.TYPE,'html',1) THEN* If the debug flag is set then dump all the session information to the browser.      PRINT '<!-- Debug Information generated by WEB.SEND.  This feature can be turned off by'      PRINT '     setting the SESSION$GLOBAL.DEBUG = "1" in the initalization program     -->'      PRINT '<!-- START DEBUG OUPUT '      PRINT '     GET AND POST VARS:'      FOR I = 1 TO DCOUNT(CGI$VARS,@AM)        PRINT '     ':CGI$VARS<I>:' = ':CGI$VALS<I>      NEXT I      PRINT      IF SHOW.SESSION.VARS THEN        PRINT '    SESSION VARIABLES:'        PRINT '    SESSION$ID = ':SESSION$ID        READ REC FROM F.WEB.SESSION, SESSION$ID THEN          PRINT '    SESSION DATE = ':OCONV(REC<3>,'D4/')          PRINT '    SESSION TIME = ':OCONV(REC<4>,'MTS,')          FOR I = 1 TO DCOUNT(REC<1>,@VM)            PRINT '    ':REC<1,I>:' = ':REC<2,I>          NEXT I        END      END        PRINT '    END DEBUG OUTPUT -->'        PRINT      END    END  SESSION$OUTBUF = ''  END  RETURNEND00009CWDB.VIEW0c2*CALL WDB.VARS(VARS,VALS)HEADING "Variable" "L#20":" ":"Value"FOR N = 1 TO DCOUNT( VARS, @AM )  PRINT VARS<N> "L#20":" ":VALS<N>NEXT NSTOP00169DSUB.PDF.FUNC0c2SUBROUTINE SUB.PDF.FUNC(ACTION, MAIN.TEMPLATE)** Copyright (c) 2016 Zumasys, Inc. All rights reserved.* Description: PDF utility functions*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*DIM PDF$SETTINGS(10)EQU PDF$ENABLED   TO PDF$SETTINGS(1)EQU PDF$COMMAND   TO PDF$SETTINGS(2)EQU PDF$DIRECTORY TO PDF$SETTINGS(3)EQU PDF$LIFETIME  TO PDF$SETTINGS(4)*IF SYSTEM(1017) = 'WINNT' THEN isWindows = 1 ELSE isWindows = 0 ;*UD**OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'MATREAD PDF$SETTINGS FROM F.MVDB.CONTROL,'PDF.SETTINGS' ELSE MAT PDF$SETTINGS=''*OPEN '','WDB.DEBUG' TO F.WDB.DEBUG THEN LOGGING = 1 ELSE LOGGING = 0*BEGIN CASE  CASE ACTION = 'generate'    * HTML templates may have references to css, javascript, images, etc. so swap these to be file references    IF LOGGING THEN      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'SUB.PDF.FUNC generate')    END    IF isWindows THEN DIRSEP = '\' ELSE DIRSEP = '/'    LOCATE 'INSTALL_PATH' IN CGI$VARS SETTING POS THEN      DBROOT = CGI$VALS<POS>    END ELSE      IF isWindows THEN        DBROOT = 'C:\Program Files (x86)\Zumasys\MV Dashboard\bin\mvappsvr'      END ELSE        DBROOT = '/usr/local/mvappsvr/bin/mvappsvr'      END    END    IF isWindows THEN CONVERT '\' TO '/' IN DBROOT ;* HTML path uses forward slash    NDS = DCOUNT(DBROOT,'/')    POS = INDEX(DBROOT,'/',NDS-2)    IF POS = 0 THEN POS = LEN(DBROOT)    DBROOT = DBROOT[1,POS]:'docroot/db/'    *IF LOGGING THEN    *  SAVE.MAIN.TEMPLATE = MAIN.TEMPLATE    *END    *    * TODO: the SWAP() below handles any references to images, css & scripts    * that are found in the HTML to be rendered, but if there are references    * to images within css these are not handled. Need to figure out how to    * handle these.    *    CALL SWAP(MAIN.TEMPLATE,'/db/',DBROOT)    *    ** CLONED FROM WEB.SEND    CALL SWAP(MAIN.TEMPLATE,'<!-- CGI$PATH -->',CGI$PATH)    IF INDEX(MAIN.TEMPLATE<1>,'<!DOCTYPE',1) = 0 THEN          MAIN.TEMPLATE = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"':@AM:'"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">':MAIN.TEMPLATE    END    ** END CLONE FROM WEB.SEND    *    * Open the native content directory & get path to same    OPEN 'NATIVE.CONTENT' TO F.NATIVE.DIR ELSE      PRINT '500 ERROR: CANNOT OPEN NATIVE.CONTENT'      STOP ;* intentional stop    END    NATIVE.DIR = PDF$DIRECTORY    IF isWindows THEN CONVERT '/' TO '\' IN NATIVE.DIR ;*UV may have wrong separator!    IF NATIVE.DIR[LEN(NATIVE.DIR),1] NE DIRSEP THEN NATIVE.DIR = NATIVE.DIR : DIRSEP    *    * Generate unique ID for HTML & PDF files in NATIVE.CONTENT    CALL SUB.GET.NEXT.ID(UNIQUE.ID,F.MVDB.CONTROL)    HTM.ID=UNIQUE.ID:'.htm'    PDF.ID=UNIQUE.ID:'.pdf'    *    * Save HTML in native content directory    WRITE MAIN.TEMPLATE ON F.NATIVE.DIR,HTM.ID    *    * Build command line for PDF converter    INPFILE = NATIVE.DIR:HTM.ID    OUTFILE = NATIVE.DIR:PDF.ID    CMDLINE = PDF$COMMAND    IF CMDLINE = '' THEN      PRINT '500 ERROR: PDF CONVERT COMMAND MISSING'      STOP ;* intentional stop    END    CALL SWAP(CMDLINE,'[INPUT_FILE]',INPFILE)    CALL SWAP(CMDLINE,'[OUTPUT_FILE]',OUTFILE)    CMDLINE = @IM:'k':CMDLINE ;*JB* quotes around INPFILE & OUTFILE OK    *    * Execute the PDF convert command    EXECUTE CMDLINE CAPTURING OUTPUT    *TODO: check for errors creating PDF file    IF LOGGING THEN      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'Command line: ':CMDLINE)      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'docroot/db: ':DBROOT)      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'Command output:':@AM:OUTPUT)      *CALL SWAP(SAVE.MAIN.TEMPLATE,'&','&amp;')      *CALL SWAP(SAVE.MAIN.TEMPLATE,'<','&lt;')      *CALL SWAP(SAVE.MAIN.TEMPLATE,'>','&gt;')      *CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'MAIN.TEMPLATE':@AM:SAVE.MAIN.TEMPLATE)    END    *    * Send content file name to mvappsvr using special header    PRINT 'X-MVDB-CONTENT-FILE: ':OUTFILE    CALL SET.CONTENT.TYPE('application/pdf')    SESSION$HEADERS<-1> = 'Content-Disposition: attachment; filename=':PDF.ID    *    * Remove HTML file from native content directory    IF NOT(LOGGING) THEN      DELETE F.NATIVE.DIR,HTM.ID    END    *    * All done!    *  CASE ACTION = 'cleanup'    IF PDF$LIFETIME >= 999999 THEN RETURN ;* Keep PDF files forever    IF PDF$LIFETIME = 0 THEN Freq = 3600 ELSE Freq = 86400    Today = DATE()    Now = (Today * 86400) + TIME()    READU PDF.CLEANUP.REC FROM F.MVDB.CONTROL,'PDF.CLEANUP.TASK' THEN      Prev = PDF.CLEANUP.REC<1>    END ELSE      Prev = Now - Freq    END    IF Now < Prev + Freq THEN      RELEASE F.MVDB.CONTROL,'PDF.CLEANUP.TASK'      RETURN    END    IF OCONV('0','D2/')[1,2] # '31' THEN USA.DATE=1 ELSE USA.DATE=0    * Preform cleanup once per day (or once per hour for immediate removal)    PDF.CLEANUP.REC = Now    WRITE PDF.CLEANUP.REC ON F.MVDB.CONTROL,'PDF.CLEANUP.TASK' ON ERROR      NULL    END    OPEN 'NATIVE.CONTENT' TO F.NATIVE.DIR ELSE RETURN    SELECT F.NATIVE.DIR    DONE = 0    LOOP      READNEXT PDF.ID ELSE DONE = 1    UNTIL DONE DO      IF PDF.ID MATCHES '18N.pdf' OR PDF.ID MATCHES '18N.PDF' THEN        IF USA.DATE THEN          PDFTime = (ICONV(PDF.ID[5,2]:'/':PDF.ID[7,2]:'/':PDF.ID[1,4],'D') * 86400) + (PDF.ID[9,2] * 3600) + (PDF.ID[11,2] * 60) + PDF.ID[13,2]        END ELSE          PDFTime = (ICONV(PDF.ID[7,2]:'/':PDF.ID[5,2]:'/':PDF.ID[1,4],'D') * 86400) + (PDF.ID[9,2] * 3600) + (PDF.ID[11,2] * 60) + PDF.ID[13,2]        END        Expires = PDFTime + (PDF$LIFETIME * 86400) + 1800        IF Expires < Now THEN          DELETE F.NATIVE.DIR,PDF.ID ON ERROR            NULL          END        END      END    REPEAT    *END CASERETURNEND00031FDELETE.SESSION.VAR0c2    SUBROUTINE DELETE.SESSION.VAR( Var )* @(#) DELETE.SESSION.VAR Ported to jBASE 17:00:16  08 JUL 2015*  The following variable names were converted*   VAR* ** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program reads a value from the current web*              session record.* Init*#MAKE# RL $OPTIONS D3    INCLUDE WBPD WWW.INCLUDE    EQU FALSE TO 0, TRUE TO 1    EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*    READ REC FROM F.WEB.SESSION, SESSION$ID THEN        LOCATE Var IN REC<1> SETTING POS THEN            DELETE REC<1,POS>            DELETE REC<2,POS>            WRITE REC ON F.WEB.SESSION, SESSION$ID        END    END*    RETURN000338XML.ENCODE0c2SUBROUTINE XML.ENCODE(STRING.TO.PARSE, FLAG)** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: David Kam (Probably), Sierra Bravo* Date: Unknown* Description: Encode text prior to inserting into XML documents**#MAKE# RL $OPTIONS D3IF STRING.TO.PARSE # '' THEN  IF INDEX(STRING.TO.PARSE,'<!CDATA[',1) > 0 THEN    FLAG = 'X'  END  IF INDEX(STRING.TO.PARSE,']]>',1) > 0 THEN    FLAG = 'X'  END  IF FLAG = 'C' THEN    STRING.TO.PARSE = '<[!CDATA[':STRING.TO.PARSE:']]>'  END ELSE    CALL SWAP(STRING.TO.PARSE,'&','&amp;')    CALL SWAP(STRING.TO.PARSE,'<','&lt;')    CALL SWAP(STRING.TO.PARSE,'>','&gt;')    CALL SWAP(STRING.TO.PARSE,'"','&quot;')    CALL SWAP(STRING.TO.PARSE,"'",'&#39;') ;*dmb 12/7/10 &apos; wasn't rendering correctly in IE8  ENDENDRETURN0004A5TIMEOUT.SESSION0c2** Copyright (C) 2004 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 06/03/04* Description: This program is used to timeout session records.  This program*              should be run at regular intervals to remove unused session records.*            *#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)VAL = ''*TODAY = DATE()NOW   = TIME()*OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP*CMD = 'SELECT WEB.SESSION'EXECUTE CMD CAPTURING JUNK*LOOP  READNEXT ID ELSE EXIT  READU REC FROM F.WEB.SESSION, ID THEN    LOCATE 'LastSessionAccess' IN REC<1> SETTING POS THEN      LAST.ACCESS = REC<2,POS>      LA.DAY = FIELD(LAST.ACCESS,'*',1)      LA.TIME = FIELD(LAST.ACCESS,'*',2)      IF (LA.DAY < (TODAY-1)) THEN        * If it is two days old, then get rid of it.        DELETE F.WEB.SESSION, ID      END    END ELSE      TOTAL.VARS = DCOUNT(REC<1>, @VM)      REC<1,TOTAL.VARS+1> = 'LastSessionAccess'      REC<2,TOTAL.VARS+1> = DATE():'*':TIME()      WRITE REC ON F.WEB.SESSION, ID    END  ENDREPEAT*END0000A8GET.CGI0c2SUBROUTINE GET.CGI(VARNAME,VALUE)*INCLUDE WBPD WWW.INCLUDE*LOCATE VARNAME IN CGI$VARS SETTING POS THEN  VALUE = CGI$VALS<POS>END ELSE VALUE = ""RETURN0014B5DRILLDOWN.STACK.RTNE0c2SUBROUTINE DRILLDOWN.STACK.RTNE(F.MVDB.UDATA,DD.STACK,GO.BACK)** 4-25-16 Tom Parker - Created to support drilldown cookie concept to *                      allow for automatic go back functionality* 09-23-16 Tom Parker - Made obsolete with changes in philosophy on how*                       to handle going back from drilldownsINCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.USERSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*EQU TRUE TO 1, FALSE TO 0, AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*MATREAD GLOBAL.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:'$UG' ELSE MAT GLOBAL.USER.DATA=''STACK.ID=SESSION$ID:'$DD.STACK'READ DD.STACK FROM F.MVDB.UDATA, STACK.ID ELSE DD.STACK=''IF DD.STACK <> '' THEN   LAST.STACK.CNTR=DCOUNT(DD.STACK,AM)   LAST.STACK.ENTRY.ID=SESSION$ID:'$DD.':LAST.STACK.CNTR   READ LAST.CGI.REC FROM F.MVDB.UDATA, LAST.STACK.ENTRY.ID:'.VARS' ELSE LAST.CGI.REC='' END ELSE   LAST.STACK.CNTR=0   LAST.CGI.REC='' ENDVAL.VARS=CGI$VARS; CONVERT AM TO VM IN VAL.VARSCGI.REC=VAL.VARSVAL.VALS=CGI$VALS; CONVERT AM TO VM IN VAL.VALSCGI.REC<2>=VAL.VALSLOCATE 'dd' IN CGI$VARS SETTING POS ELSE POS=999DD.VAR=CGI$VALS<POS>* DBNAME WILL BE GO_BACK IF PULLING BACK FROM DRILLDOWNLOCATE 'dbname' IN CGI$VARS SETTING POS ELSE POS=999DBNAME=CGI$VALS<POS>*** IF DOING A BACKUP PULL IN INFORMATION FROM PREVIOUS*IF (DBNAME = "GO_BACK" OR DBNAME = "go_back") AND LAST.STACK.CNTR > 1 THEN   DELETE.STACK.ENTRY.ID=SESSION$ID:'$DD.':LAST.STACK.CNTR   DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.GUD'   DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.WUD'   DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.VARS'   DD.STACK=DELETE(DD.STACK,LAST.STACK.CNTR,0,0)   WRITE DD.STACK ON F.MVDB.UDATA, STACK.ID   NEW.STACK.ENTRY.ID=SESSION$ID:'$DD.':LAST.STACK.CNTR-1   READ CGI.REC FROM F.MVDB.UDATA, NEW.STACK.ENTRY.ID:'.VARS' ELSE CGI.REC=''   CGI$VARS=CGI.REC<1>   CONVERT VM TO AM IN CGI$VARS   CGI$VALS=CGI.REC<2>   CONVERT VM TO AM IN CGI$VALS   MATREAD GLOBAL.USER.DATA FROM F.MVDB.UDATA, NEW.STACK.ENTRY.ID:'.GUD' ELSE MAT GLOBAL.USER.DATA=''   MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA, SESSION$ID:'$UG'**   MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, NEW.STACK.ENTRY.ID:'.WUD' ELSE MAT WIDGET.USER.DATA=''   GO.BACK=1   RETURN END*** IF FROM A SUBMIT BUTTON THEN SIMPLY REFRESH LAST STACK ENTRY** BUT MAKE SURE IT HAS DRILLDOWN IF PREVIOUS DID** SAME APPLIES TO DEBUG AND UNDEBUG BUTTON*LOCATE 'debug_widget' IN CGI$VARS SETTING DEBUG.POS ELSE DEBUG.POS=0LOCATE 'undebug_widget' IN CGI$VARS SETTING UNDEBUG.POS ELSE UNDEBUG.POS=0LOCATE 'sw' IN CGI$VARS SETTING POS ELSE POS=999SW.VAR=CGI$VALS<POS>INP.POS=INDEX(VM:VAL.VARS,VM:'inp_',1)IF (SW.VAR <> '' AND INP.POS) OR DEBUG.POS OR UNDEBUG.POS THEN   LOCATE 'dd' IN LAST.CGI.REC<1> SETTING DD.POS ELSE DD.POS=999   DD.VAL=LAST.CGI.REC<2,DD.POS>   IF DD.VAL <> '' THEN      LOCATE 'dd' IN CGI$VARS SETTING DD.POS ELSE DD.POS=DCOUNT(CGI$VARS,AM)+1      IF CGI$VALS<DD.POS> = '' THEN         CGI.REC<1,DD.POS>='dd'         CGI.REC<2,DD.POS>=DD.VAL         CGI$VARS<DD.POS>='dd'         CGI$VALS<DD.POS>=DD.VAL       END    END   * DEBUG POSITION MAY HAVE CHANGED SO FIND AGAIN   IF DEBUG.POS THEN      LOCATE 'debug_widget' IN CGI.REC<1> SETTING DEBUG.POS ELSE DEBUG.POS=0      IF DEBUG.POS THEN         CGI.REC=DELETE(CGI.REC,1,DEBUG.POS,0)         CGI.REC=DELETE(CGI.REC,2,DEBUG.POS,0)       END    END   IF UNDEBUG.POS THEN      LOCATE 'undebug_widget' IN CGI.REC<1> SETTING UNDEBUG.POS ELSE UNDEBUG.POS=0      IF UNDEBUG.POS THEN         CGI.REC=DELETE(CGI.REC,1,UNDEBUG.POS,0)         CGI.REC=DELETE(CGI.REC,2,UNDEBUG.POS,0)       END    END   STACK.ENTRY.ID=LAST.STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END**** SIMPLY WRITE OUT THIS SESSION INFORMATION IF:**    1.  NOTHING YET ON THE STACK**    2.  ONLY ONE ENTRY ON THE STACK AND THIS ISN'T A DRILL DOWN*IF NOT(LAST.STACK.CNTR) OR (LAST.STACK.CNTR = 1 AND DD.VAR = '') THEN   *   STACK.ENTRY.ID=SESSION$ID:'$DD.1'   DD.STACK=STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END*** ID DOING A DRILLDOWN THEN PUSH ONTO STACK*IF DD.VAR <> '' THEN   NEXT.STACK.CNTR=LAST.STACK.CNTR+1   STACK.ENTRY.ID=SESSION$ID:'$DD.':NEXT.STACK.CNTR   DD.STACK<NEXT.STACK.CNTR>=STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END*** IF NO CHANGE IN CGI VARS THEN REFRESH LAST STACK ENTRY*IF CGI.REC = LAST.CGI.REC THEN   STACK.ENTRY.ID=LAST.STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END*** ALL ELSE SHOULD BE A NEW DASHBOARD SO START OVER WITH STACK** AFTER PURGING ALL PREVIOUSLY STACKED ITEMS*IF LAST.STACK.CNTR > 1 THEN   FOR DELETE.CNTR = LAST.STACK.CNTR TO 2 STEP -1      DELETE.STACK.ENTRY.ID=SESSION$ID:'$DD.':DELETE.CNTR      DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.GUD'      DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.WUD'      DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.VARS'    NEXT DELETE.CNTR ENDSTACK.ENTRY.ID=SESSION$ID:'$DD.1'DD.STACK=STACK.ENTRY.IDGOSUB WRITE.STACK*RETURN*WRITE.STACK:*WRITE DD.STACK ON F.MVDB.UDATA, STACK.IDWRITE CGI.REC ON F.MVDB.UDATA, STACK.ENTRY.ID:'.VARS'MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA, STACK.ENTRY.ID:'.GUD'RETURN*END000D0CMVDB.DEBUG0c2** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: December, 2007* Description: Dashboard & Widget Debugger**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGETSPROMPT ''*OPEN '','MVDB.DEBUG.INFO' TO F.MVDB.DEBUG.INFO ELSE  EXECUTE 'CREATE-FILE MVDB.DEBUG.INFO 1 3' CAPTURING JUNK  OPEN '','MVDB.DEBUG.INFO' TO F.MVDB.DEBUG.INFO ELSE STOP 201, 'MVDB.DEBUG.INFO'ENDOPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'*MY.PORT = FIELD( OCONV( '', 'U50BB' ), ' ', 1 )DEBUG.ID = MY.PORT*READ DB.REC FROM F.MVDB.DEBUG.INFO, DEBUG.ID ELSE DB.REC = ''*WIDGET.ID = DB.REC<1>*PRINT "Bravo Dashboard Debugger"PRINTOK = 0LOOP  PRINT "Widget (?=list)":  IF WIDGET.ID # "" THEN PRINT " (":WIDGET.ID:")":  PRINT ": ":  INPUT USE.WIDGET.ID  IF USE.WIDGET.ID # '' THEN WIDGET.ID = USE.WIDGET.ID  BEGIN CASE    CASE WIDGET.ID = ''      STOP    CASE WIDGET.ID = "?"      EXECUTE "SORT MVDB.WIDGETS"      PRINT      WIDGET.ID = ''    CASE 1      MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, WIDGET.ID THEN        OK = 1      END ELSE        PRINT "Invalid widget ID: ":WIDGET.ID      END  END CASEUNTIL OK DO REPEATDB.REC<1> = WIDGET.ID*USERID = DB.REC<2>PRINTOK = 0LOOP  PRINT "User ID (?=list)":  IF USERID # "" THEN PRINT " (":USERID:")":  PRINT ": ":  INPUT USE.USERID  IF USE.USERID # '' THEN USERID = USE.USERID  BEGIN CASE    CASE USERID = "?"      EXECUTE 'SORT MVDB.USERS'      PRINT      USERID = ''    CASE 1      OK = 1  END CASEUNTIL OK DO REPEAT*DB.REC<2> = USERID*G$CURRENT.DB = DB.REC<3>PRINTOK = 0LOOP  PRINT "Dashboard ID (?=list)":  IF G$CURRENT.DB # "" THEN PRINT " (":G$CURRENT.DB:")":  PRINT ": ":  INPUT USE.DB  IF USE.DB # '' THEN G$CURRENT.DB = USE.DB  BEGIN CASE    CASE USE.DB = "?"      EXECUTE 'SORT MVDB.DEFS'      PRINT      G$CURRENT.DB = ''    CASE 1      OK = 1  END CASEUNTIL OK DO REPEAT*DB.REC<3> = G$CURRENT.DB** Pull in user data*MATREAD WIDGET.USER.DATA FROM F.MVDB.DEBUG.INFO,DEBUG.ID:"$":WIDGET.ID ELSE MAT WIDGET.USER.DATA = ''*LOOP  PRINT "Widget User Data"  PRINT "----------------"  FOR X = 1 TO 100    IF WIDGET.USER.DATA(X) # '' THEN      PRINT X "R#3":". '":WIDGET.USER.DATA(X):"'"    END  NEXT X  PRINT  PRINT "User Data field # to change or ENTER to continue: ":  INPUT UPOSWHILE UPOS MATCHES "1N0N" DO  PRINT "Position ":UPOS  PRINT "Current Value: ":WIDGET.USER.DATA(UPOS)  PRINT "New Value: ":  INPUT NEW.VAL  WIDGET.USER.DATA(UPOS) = NEW.VALREPEAT*MATWRITE WIDGET.USER.DATA ON F.MVDB.DEBUG.INFO, DEBUG.ID:"$":WIDGET.ID*WRITE DB.REC ON F.MVDB.DEBUG.INFO, DEBUG.ID*MAT WIDGET.INFO = ''G$WIDGET.NAME = WIDGET.IDG$WIDGET.SUB = WIDGET.SUBG$USERID = USERIDG$QUERYMODE = ''G$DRILLDOWNMODE = 0*PRINTPRINT "Use Debugger (y/N): ":INPUT USE.DEBUGIF USE.DEBUG = "Y" THEN DEBUG ELSE  PRINT "Calling ":WIDGET.SUBEND*#MAKE# RL IF 0 THENSTART.TIMER = SYSTEM(12)*#MAKE# RL ENDUSE.SUB.NAME = WIDGET.SUBCALL @USE.SUB.NAME*#MAKE# RL IF 0 THENDURATION = SYSTEM(12) - START.TIMER*#MAKE# RL END ELSE*#MAKE# RL   DURATION = "Unavailable"*#MAKE# RL ENDMATWRITE WIDGET.USER.DATA ON F.MVDB.DEBUG.INFO, DEBUG.ID:"$":WIDGET.IDPRINT "Call completed. Duration: ":DURATIONSTOP000BACMVDB.SUB.WIDGET.LIST0c2SUBROUTINE MVDB.SUB.WIDGET.LIST(WIDGET.LIST)** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Produce a list of defined widgets.** 07-09-15 Peter Schellenbach - use jshow command to test if subroutine exists.*                               *#MAKE# RL $OPTIONS D3OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'END*INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGETS*CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS) ;* Retrieve a list of failed widgets this sessionCALL GET.SESSION.VAR("running_widget",FAILED.WIDGET)CALL GET.SESSION.VAR("running_widget_dt",FAILED.WIDGET.DT)IF FAILED.WIDGET # "" THEN  FW.DATE = FIELD( FAILED.WIDGET.DT, '*', 1 )  FW.TIME = FIELD( FAILED.WIDGET.DT, '*', 2 )  FW.LAPSE = TIME() - FW.TIME  FW.LAPSE += ((DATE() - FW.DATE) * 86400)  IF FW.LAPSE < 2 THEN FAILED.WIDGET = "" ;* No more than 2 seconds to run a widget in query modeENDIF FAILED.WIDGET # "" THEN  CALL PUT.SESSION.VAR("running_widget","")  CALL PUT.SESSION.VAR("running_widget_dt","")  LOCATE FAILED.WIDGET IN FAILED.WIDGETS SETTING FWPOS ELSE    FAILED.WIDGETS<-1> = FAILED.WIDGET    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  ENDEND*WIDGET.LIST = ''*EXECUTE 'SSELECT MVDB.WIDGETS' CAPTURING JUNK*DP = 0LOOP  READNEXT ID ELSE EXIT  MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, ID ELSE MAT WIDGET.ITEM = ''  DP += 1  WIDGET.LIST<1,DP> = ID  SUBNAME = WIDGET.SUB  G$QUERYMODE = 1  G$WIDGET.NAME = ID  MAT WIDGET.INFO = ''  MAT WIDGET.USER.DATA = ''  MAT GLOBAL.TEMP.DATA = ''  MAT GLOBAL.USER.DATA = ''  FAIL.STATUS = 0 ;* Okay  FAIL.TEXT = ""  LOCATE ID IN FAILED.WIDGETS SETTING POS THEN    W$TYPE = "FAILED"    W$TITLE = "Failed Widget - ":SUBNAME    W$WIDTH = 3    FAIL.STATUS = 1 ;* Failed    FAIL.TEXT = "Subroutine Failed"  END ELSE    *PJS 07-09-15* BEGIN JBASE                   *READ CATPTR FROM F.MD, SUBNAME THEN    *jBASE does not use catalog pointers - use jshow to get source file name    EXECUTE 'jshow -c ':SUBNAME CAPTURING JSHOW.OUT    IF INDEX(JSHOW.OUT,'Subroutine:',1) THEN    *PJS 07-09-15* END JBASE            CALL PUT.SESSION.VAR("running_widget",ID)      DT.STAMP = DATE():"*":TIME()      CALL PUT.SESSION.VAR("running_widget_dt",DT.STAMP)      CALL @SUBNAME      CALL PUT.SESSION.VAR("running_widget","")      CALL PUT.SESSION.VAR("running_widget_dt","")    END ELSE      W$TYPE = "FAILED"      W$TITLE = "Not Cataloged - ":SUBNAME      W$WIDTH = 3      FAIL.TEXT = "Subroutine Not Cataloged"    END  END  IF FIELD(W$TYPE,':',1) = "MAP" THEN W$TYPE = "MAP"  WIDGET.LIST<3,DP> = SUBNAME  WIDGET.LIST<4,DP> = W$TYPE  WIDGET.LIST<5,DP> = W$TITLE  WIDGET.LIST<6,DP> = W$WIDTH  WIDGET.LIST<7,DP> = FAIL.STATUS  WIDGET.LIST<8,DP> = FAIL.TEXTREPEATRETURN00042EGET.SESSION.ID0c2SUBROUTINE GET.SESSION.ID( SESSION.ID, VARS, VALS )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program extracts the session id from the VARS and VALS*              The programmer could just as easily parse out the HTTP_COOKIE*              header and get the value, but this just standardizes the *              process.*             * Init*#MAKE# RL $OPTIONS D3EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)SESSION.ID = ''*NUM.VARS = DCOUNT(VARS, AM)FOR X = 1 TO NUM.VARS  IF (VARS<X> = 'HTTP_COOKIE') THEN    CSTRING = VALS<X>        CALL SWAP( CSTRING, '%3B ', ';')    CONVERT ';' TO AM IN CSTRING    NUM.COOKIES = DCOUNT(CSTRING, AM)    FOR Y = 1 TO NUM.COOKIES      CVAR = TRIM(FIELD(CSTRING<Y>,'=',1))      CVAL = CSTRING<Y>[(1+INDEX(CSTRING<Y>,'=',1)),99999]      IF (CVAR = 'sessionid') THEN        SESSION.ID = TRIM(CVAL)        EXIT      END    NEXT Y  ENDNEXT X*RETURN*0001C5RSS.XML.ENCODE0c2SUBROUTINE RSS.XML.ENCODE(STRING.TO.PARSE, FLAG)** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: David Kam (Probably), Sierra Bravo* Date: Unknown* Description: Encode text prior to inserting into XML documents*SWAP.CHARS = \&<>\FOR SW = 1 TO LEN(SWAP.CHARS)  CH = SWAP.CHARS[SW,1]  HX = OCONV(SEQ(CH),'MCDX')  SWTO = "&#x":HX "R%2":";"  CALL SWAP(STRING.TO.PARSE,CH,SWTO)NEXT SWRETURN000536PUT.SESSION.VAR0c2SUBROUTINE PUT.SESSION.VAR( var, VAL )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program inserts a variable in the the current*              session record.  If the variable already exists, it*              is replaced.  If it does not exist, then it is created.*#MAKE# RL $OPTIONS D3* InitINCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)IF SESSION$ID = "" THEN RETURN** Need to get rid of the VM,SVM, and AM chars so that we can* store multi-valued data in the record. I am changing them to* very small ASCII codes that are usually not used.  This should* be pretty safe.*CONVERT AM TO CHAR(2) IN VALCONVERT VM TO CHAR(3) IN VALCONVERT SVM TO CHAR(4) IN VAL*READ REC FROM F.WEB.SESSION, SESSION$ID ELSE REC = ''TOTAL.VARS = DCOUNT(REC<1>, VM)LOCATE var IN REC<1> SETTING POS THEN  REC<2,POS> = VALEND ELSE  NEXT.REC = TOTAL.VARS + 1  REC<1,NEXT.REC> = var  REC<2,NEXT.REC> = VALENDWRITE REC ON F.WEB.SESSION, SESSION$IDCONVERT CHAR(2) TO AM IN VALCONVERT CHAR(3) TO VM IN VALCONVERT CHAR(4) TO SVM IN VAL*IF (var # 'LastSessionAccess') THEN  CALL PUT.SESSION.VAR('LastSessionAccess', DATE():'*':TIME())END*RETURN000B3EWDB.VARS0c2SUBROUTINE WDB.VARS( VARS, VALS )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 12/24/03* Description: This program is used to gather the vars and vals from a*              web request.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause** Modified By: Peter Schellenbach, Zumasys* Date: 10/25/2016* Description: Added INCLUDE WWW.INCLUDE so we have access to CGI$UNIQUE.ID*              in /WWW/ COMMON, instead of using PROCREAD / SENTENCE.**#MAKE# RL $OPTIONS D3*INCLUDE WBPD WWW.INCLUDE ; *PJS 10-25-16**VARS = ''VALS = ''VAR.POS = 1DIM TEMP(50)**PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ''*PJS 10-25-16*PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE() ; *PJS 06-12-15**PJS 10-25-16*UNIQUE.ID = FIELD( TCL.LINE, ' ', 2)UNIQUE.ID = CGI$UNIQUE.ID ;*PJS 10-25-16**OPEN '','WDB.Q' TO WDB.Q ELSE RETURN*IF (UNIQUE.ID # '') THEN  READ QSTRING FROM WDB.Q, UNIQUE.ID ELSE QSTRING = ''  CONVERT @AM TO '' IN QSTRING  QLENGTH=LEN(QSTRING)  IF QSTRING[1,1] = '"' AND QSTRING[LEN(QSTRING),1] = '"' THEN    QSTRING = QSTRING[2,LEN(QSTRING)-2] ;* UNIDATA hack  END  CONVERT '&' TO @AM IN QSTRING  FOR X = 1 TO DCOUNT( QSTRING, @AM )    IF (TRIM(FIELD(QSTRING<X>,'=',1)) # '') THEN      HEX.STRING = FIELD(QSTRING<X>, '=', 1) ; GOSUB CONVERT.HEX      VARS<VAR.POS> = HEX.STRING      EQ.POS = INDEX(QSTRING<X>,'=',1)      HEX.STRING = QSTRING<X>[EQ.POS+1,QLENGTH] ; GOSUB CONVERT.HEX      VALS<VAR.POS> = HEX.STRING      VAR.POS += 1    END  NEXT XENDRETURN*------------CONVERT.HEX:*------------HSLEN = LEN(HEX.STRING)IF HSLEN > 5000 THEN*IF 0 THEN  CHUNKLEN = INT( HSLEN / 50 )  START.POS = 1  FOR CHX = 1 TO 49    CUT.POINT = (START.POS-1) + CHUNKLEN    NCC = 0    LOOP UNTIL HEX.STRING[CUT.POINT+1,1] = "%" OR NCC > 1 DO      CUT.POINT += 1      NCC += 1    REPEAT    TEMP(CHX) = HEX.STRING[START.POS,CHUNKLEN+NCC]    START.POS += CHUNKLEN + NCC  NEXT CHX  TEMP(50) = HEX.STRING[START.POS,QLENGTH]  MAX.TEMP.LOC = 50END ELSE  TEMP(1) = HEX.STRING  MAX.TEMP.LOC = 1ENDHEX.STRING = ""FOR TEMP.LOC = 1 TO MAX.TEMP.LOC   IDX = 1  CONVERT '+' TO ' ' IN TEMP(TEMP.LOC)  LOOP    LOC = INDEX( TEMP(TEMP.LOC), '%', IDX )  WHILE LOC DO    IF TEMP(TEMP.LOC)[LOC+1,1] = "%" THEN      IDX += 2    END ELSE      SWAP.VAL = TEMP(TEMP.LOC)[LOC+1,2]      SWAP.VAL = OCONV( SWAP.VAL, 'MCU' )      SWAP.VAL = OCONV(SWAP.VAL,'MCXD')      IF SWAP.VAL MATCHES "1N0N" THEN SWAP.VAL = CHAR(SWAP.VAL)  *    SWAP.VAL = CHAR(OCONV(SWAP.VAL,'MCXD'))      TEMP(TEMP.LOC)=TEMP(TEMP.LOC)[1,LOC-1]:SWAP.VAL:TEMP(TEMP.LOC)[LOC+3,QLENGTH]      IF SWAP.VAL = '%' THEN        IDX += 1      END    END  REPEAT  HEX.STRING := TEMP(TEMP.LOC)NEXT TEMP.LOC*RETURN002077MVDB.BUILD.PACKAGE0c2    SUBROUTINE MVDB.BUILD.PACKAGE(MAKE.FILE,LOCATION,SIZE)**   INCLUDE DM,BP,UNIX.H FCNTL.H*   INCLUDE DM,BP,UNIX.H MODE.H*   INCLUDE WBPD MVPKG.INCLUDE*    EQU FALSE TO 0, TRUE TO 1    EQU AM TO CHAR(254), VM TO CHAR(253)*JB CHAR BUFFER[10000]    BUFFER = ""    DIM PKG.REC(40)    LOCATION = ''    SIZE = 0*    OPEN "MAKE.FILE,":MAKE.FILE TO F.MAKE.FILE ELSE        OPEN MAKE.FILE TO F.MAKE.FILE ELSE STOP 201, MAKE.FILE    END    OPEN '','MVAPPS.INSTALLED' TO F.MVAPPS.INSTALLED ELSE        EXECUTE "CREATE-FILE MVAPPS.INSTALLED 3 11" CAPTURING JUNK        OPEN '','MVAPPS.INSTALLED' TO F.MVAPPS.INSTALLED ELSE STOP 201, 'MVAPPS.INSTALLED'    END    OPEN '','MVPKG.DATA' TO F.MVPKG.DATA ELSE        EXECUTE "CREATE-FILE MVPKG.DATA 3 11" CAPTURING JUNK        OPEN '','MVPKG.DATA' TO F.MVPKG.DATA ELSE STOP 201, 'MVPKG.DATA'    END    OPEN '','PACKED.FILE' TO TARGET.FILE ELSE        EXECUTE "CREATE-FILE PACKED.FILE 3 31" CAPTURING JUNK        OPEN '','PACKED.FILE' TO TARGET.FILE ELSE STOP 201, 'PACKED.FILE'    END    MATREAD PKG.REC FROM F.MVPKG.DATA, MAKE.FILE ELSE RETURN    PACKAGE.NAME = PKG$NAME    PACKAGE.NAME = OCONV(PACKAGE.NAME,"MCAN")    PACKAGE.DESCRIPTION = PKG$DESC    PACKAGE.VERSION = PKG$BUILD.SEQ + 1    IF MAKE.FILE = '' OR PACKAGE.NAME = '' THEN RETURN*    PACKAGE.INFO = ""    PACKAGE.MODE = 1* Set up the temporary storage area for the scripts    OPEN "MAKE.TEMP" TO F.MAKE.TEMP ELSE        EXECUTE "CREATE-FILE MAKE.TEMP 1 31" CAPTURING JUNK        OPEN "MAKE.TEMP" TO F.MAKE.TEMP ELSE STOP 201, "MAKE.TEMP"    END    CLEARFILE F.MAKE.TEMP    OPEN "PACKED.FILE" TO F.PACKED.FILE ELSE        EXECUTE "CREATE-FILE PACKED.FILE 1 31" CAPTURING JUNK        OPEN "PACKED.FILE" TO F.PACKED.FILE ELSE STOP 201, "PACKED.FILE"    END    CLEARFILE F.PACKED.FILE    BINARY.OPT = " (B"    PACKAGE.INFO<1> = PACKAGE.DESCRIPTION    PACKAGE.INFO<2> = PACKAGE.VERSION    PACKAGE.INFO<3> = "db"    PACKAGE.INFO<6> = PACKAGE.NAME*    TARGET = "D3"    SCRIPT = ""    SCRIPT.SEG = 0*    READ COMMANDS FROM F.MAKE.FILE, TARGET:"*PRE.COMMANDS" ELSE        READ COMMANDS FROM F.MAKE.FILE, "PRE.COMMANDS" ELSE COMMANDS = ""    END    GOSUB ADD.COMMANDS*    WRITE SCRIPT ON F.MAKE.TEMP, "MVAPPS-PRE-SCRIPT"    WRITE PACKAGE.INFO ON F.MAKE.TEMP, "PACKAGE.INFO"    SCRIPT = ""*    READ FILE.LIST FROM F.MAKE.FILE, TARGET:"*FILE.LIST" ELSE        READ FILE.LIST FROM F.MAKE.FILE, "FILE.LIST" ELSE FILE.LIST = ""    END    FOR FX = 1 TO DCOUNT( FILE.LIST, @AM )        FNAME = FILE.LIST<FX>        FX.OVR = FALSE        IF FNAME[1,2] = 'O:' THEN            FNAME=FNAME[3,999]            FX.OVR = TRUE        END        OPEN FNAME TO FVAR THEN            READ ITEM.LIST FROM F.MAKE.FILE, TARGET:"*DATA_":FNAME ELSE                READ ITEM.LIST FROM F.MAKE.FILE, "DATA_":FNAME ELSE ITEM.LIST = ""            END            IF ITEM.LIST<1> = "*" THEN                SELECT FVAR                ITEM.LIST = ''                LOOP                    READNEXT ITEM.LIST.ID ELSE EXIT                    ITEM.LIST<-1> = ITEM.LIST.ID                REPEAT            END            WRITE ITEM.LIST ON F.MAKE.TEMP, FNAME            EXECUTE "QSELECT MAKE.TEMP '":FNAME:"'" CAPTURING JUNK            IF SYSTEM(11) THEN                GOSUB PACK.FILE            END            DELETE F.MAKE.TEMP, FNAME            OPEN "DICT",FNAME TO D.FVAR THEN                READ ITEM.LIST FROM F.MAKE.FILE, TARGET:"*DICT_":FNAME ELSE                    READ ITEM.LIST FROM F.MAKE.FILE, "DICT_":FNAME ELSE ITEM.LIST = ""                END                FNAME = "DICT ":FNAME                IF ITEM.LIST<1> = "*" THEN                    SELECT D.FVAR                    ITEM.LIST = ''                    LOOP                        READNEXT ITEM.LIST.ID ELSE EXIT                        ITEM.LIST<-1> = ITEM.LIST.ID                    REPEAT                END                WRITE ITEM.LIST ON F.MAKE.TEMP, FNAME                EXECUTE "QSELECT MAKE.TEMP '":FNAME:"'" CAPTURING JUNK                IF SYSTEM(11) THEN                    GOSUB PACK.FILE                END                DELETE F.MAKE.TEMP, FNAME            END        END    NEXT FX*    READ COMMANDS FROM F.MAKE.FILE, TARGET:"*POST.COMMANDS" ELSE        READ COMMANDS FROM F.MAKE.FILE, "POST.COMMANDS" ELSE COMMANDS = ""    END    SCRIPT = ""    GOSUB ADD.COMMANDS    WRITE SCRIPT ON F.MAKE.TEMP, "MVAPPS-POST-SCRIPT"    EXECUTE 'SELECT MAKE.TEMP "MVAPPS-PRE-SCRIPT" "MVAPPS-POST-SCRIPT" "PACKAGE.INFO"' CAPTURING JUNK    FNAME = "MAKE.TEMP"    GOSUB PACK.FILE** Change the name of the file containing the scripts from MAKE.TEMP to MD* so they can be executed upon arrival.*    READ REC FROM F.PACKED.FILE, "MAKE.TEMP" ELSE REC = ""    WRITE REC ON F.PACKED.FILE, "MV.INSTALL.CF"    DELETE F.PACKED.FILE, "MAKE.TEMP"*    FNAME = "PACKED.FILE"    GOSUB PACK.FILE    READ PACKAGE FROM F.PACKED.FILE, "PACKED.FILE" ELSE RETURN    CLEARFILE F.PACKED.FILE    WRITE PACKAGE ON F.PACKED.FILE, PACKAGE.NAME:'-':PACKAGE.VERSION    OUT.DIR = "/tmp/"*   HANDLE = %OPEN(OUT.DIR:PACKAGE.NAME,O$CREAT+O$TRUNC+O$RDWR+O$BINARY)    OPENSEQ OUT.DIR:PACKAGE.NAME TO HANDLE THEN        ORIG.LEN =LEN(PACKAGE)        WTOT = 0        LOOP            IF LEN(PACKAGE) >= 10000 THEN                BUFFER = PACKAGE[1,10000]                BLEN = 10000                PACKAGE = PACKAGE[10001,9999999]            END ELSE                BUFFER = PACKAGE                BLEN = LEN(PACKAGE)                PACKAGE = ""            END*JB         W = %WRITE(HANDLE,BUFFER,BLEN)            WRITESEQ BUFFER APPEND TO HANDLE ELSE RETURN            WTOT += W        WHILE PACKAGE # "" DO REPEAT        LOCATION = OUT.DIR:PACKAGE.NAME        SIZE = WTOT    END    RETURN*ADD.COMMANDS:       **    FOR CMDX = 1 TO DCOUNT( COMMANDS, @AM )        SCRIPT<-1> = COMMANDS<CMDX>    NEXT CMDX    RETURN*CHECK.DPOINTER:     * Check to see if the record contains a dpointer*    D.POINTER = FALSE    IF OCONV(REC<1>[1,1],'MCU') = "D" THEN        IF FILE.TYPE = "DICT" THEN            IF REC<2> MATCHES "3N0N" AND REC<3> MATCHES "1N0N" THEN                D.POINTER = TRUE            END        END    END    RETURN*PACK.FILE:    ARG.LIST = TRIM( FNAME )    BINARY = 1*    FILE.TYPE = 'DATA'    FILE.NAME = FIELD( ARG.LIST, ' ', 1 )    POS = 2    IF FILE.NAME = "DATA" OR FILE.NAME = "DICT" THEN        FILE.TYPE = FILE.NAME        FILE.NAME = FIELD( ARG.LIST, ' ', 2 )        POS = 3    END    IF FILE.TYPE = "DATA" THEN FILE.TYPE = ""*    OPEN FILE.TYPE,FILE.NAME TO PACK.FILE ELSE RETURN    PACK.FILE.ID = ''    IF FILE.TYPE # "" THEN PACK.FILE.ID = FILE.TYPE:"_"    IF FX.OVR THEN PACK.FILE.ID := 'O:'    PACK.FILE.ID := FILE.NAME**Packing PACK.FILE.ID*    IF INDEX(FILE.NAME,'BINARY:',1) THEN        HEX.MODE = 1    END ELSE HEX.MODE = 0    CHK.FILE.NAME = FILE.NAME    Count = 0    SELECT PACK.FILE    EOF = FALSE    PACK.REC = ""    DLIST = ""    SEPARATOR = @AM    LOOP        READNEXT CHK.REC.ID ELSE EOF = TRUE    UNTIL EOF DO        READ REC FROM PACK.FILE, CHK.REC.ID ELSE REC = ""*Remove db/widget user access data?        IF PKG$ACCESS.OPT # 1 THEN            IF FILE.NAME = 'MVDB.DEFS' THEN                REC<5> = ''                END ELSE IF FILE.NAME = 'MVDB.WIDGETS' THEN                    REC<2> = ''                END            END            GOSUB CHECK.DPOINTER            IF NOT( D.POINTER ) THEN                Count = Count + 1                IF HEX.MODE THEN                    REC = CHK.REC.ID:SEPARATOR:"0x":OCONV(REC,'MX')                END ELSE                    REC = CHK.REC.ID:SEPARATOR:"0c":REC                END                LENGTH = OCONV( LEN(REC), 'MCDX' ) "R%6"                PACK.REC = PACK.REC:LENGTH:REC            END ELSE                DLIST<-1> = CHK.REC.ID            END        REPEAT*        FOR D = 1 TO DCOUNT( DLIST, AM )*PRINT*PRINT "Item '":DLIST<D>:"' is a D-Pointer.  Not packed."        NEXT D        IF PACK.REC # "" THEN            WRITE PACK.REC ON TARGET.FILE, PACK.FILE.ID        END*PRINT PACK.FILE.ID:" packed.  ":Count:" records packed into ":PACK.FILE.ID        RETURN000546USER.UPDATE0c2*On a new install, this should encrypt the default, plaintext passwords.*On an upgrade, it will encrypt all user passwords if they have not been encrypted by this program.* 1-2-15 TFP don't if the password is the same as the encryption of the user*        name then don't encrypt again** 06-19-17 PJS After initial installation, scan for any MVDB.USERS records where* the password in USER.REC<1> is the same as the user ID. These are default users* 'admin' and 'guest', and the default plaintext password on attr 1 is encrypted* and the user record updated. The USER.UPDATE flag in MVDB.CONTROL is updated to* 2 so this process will not be repeated during upgrades.*OPEN 'MVDB.USERS' TO F.MVDB.USERS ELSE STOP 201, 'MVDB.USERS'OPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'READV USER.UPDATE.FLAG FROM F.MVDB.CONTROL, "USER.UPDATE", 1 ELSE USER.UPDATE.FLAG = ''IF USER.UPDATE.FLAG + 0 < 1 THEN  SELECT F.MVDB.USERS  LOOP    READNEXT USER.ID ELSE EXIT    READ USER.REC FROM F.MVDB.USERS, USER.ID THEN      IF USER.ID = USER.REC<1> THEN        ENCRYPTED.PSWD = OCONV(USER.REC<1>, "U3060")        USER.REC<1> = ENCRYPTED.PSWD        WRITE USER.REC ON F.MVDB.USERS, USER.ID      END    END  REPEATENDIF USER.UPDATE.FLAG + 0 < 2 THEN  WRITEV 2 ON F.MVDB.CONTROL, "USER.UPDATE", 1ENDSTOPEND00029BSET.STATUS.CODE0c2SUBROUTINE SET.STATUS.CODE( STATUS.CODE )*********************************************************************** Copyright (C) 2020 Zumasys, Inc., All Rights Reserved** Written By   : Peter Schellenbach* Date Written : 04/21/2017* Description  : This program sets the response status code sent*                back to client. Successful requests should return*                status code 200 (this is the default). Status code*                500 indicates a generic server failure.*              **********************************************************************INCLUDE WBPD WWW.INCLUDESESSION$STATUS.CODE = STATUS.CODE*RETURN*0001E6WDB.TEST0c2INCLUDE WBPD WWW.INCLUDEPRINT "junk before content"PRINT CHAR(10)PRINT "Content-type: text/html"PRINT ""CALL WDB.VARS( VARS, VALS )PRINT "<pre>"PRINT "Vars: "FOR X = 1 TO DCOUNT(VARS, @AM)  PRINT VARS<X>:" = ":VALS<X>NEXT XPRINTFOR N = 45 TO 49  PRINT "WWW.INFO(":N:"): ":WWW.INFO(N)NEXT NPRINT "</pre>"PRINT '<form method="POST" action="/dbc/WDB.TEST">'PRINT '<input type="text" name="thing">'PRINT '<input type="submit" value="submit">'PRINT '</form>'*00019ACREATE.WEBSERVICE.PASSWORD0c2SUBROUTINE CREATE.WEBSERVICE.PASSWORD(PASSWORD,PASSTIME)* VALID PASSWORD IS THE SUM OF MMDDYY + SSMMHH (FROM PASSTIME)* INVERT THE TIME TO SSMMHHPASSTIME=OCONV(TIME(),'MTS')CONVERT ':' TO '' IN PASSTIMEEMITSSAP=''FOR TIME.I = 6 TO 1 STEP -1  EMITSSAP:=PASSTIME[TIME.I,1]NEXT TIME.IOTODAY=OCONV(DATE(),'D2-')CONVERT '-' TO '' IN OTODAYPASSWORD=OTODAY+EMITSSAPRETURNEND004341WDB.INIT0c2** Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 12/24/03* Description: This program is the man entry point for web transactions.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause.*              When reading MD PROC item, if its missing, read again*              with '.PROC' suffix on ID. This way we can keep the PROC*              in the MD as a flag that the function is allowed, but not*              require it in the MD, since jBASE does not place catalog*              items in the MD.** Modified By: Peter Schellenbach, Zumasys* Date: 07/28/2015* Description: jBASE SYSTEM(19) replacement using DATE(), SYSTEM(12) & RND() to create unique ID** Modified By: Peter Schellenbach, Zumasys* Date: 10/25/2016* Description: This program was made more generic, so that it can serve*              as the main entry point for both MVDB and REST services.*              The MVDB specific code has been refactored into MVDB.INIT.*              A new WDB.RESOURCE file is used to determine supported*              resources and the name of the program to handle the resource.*              For example, the MVDB.MAIN record in the WDB.RESOURCE file*              defines MVDB.INIT as the handler for the MVDB.RESOURCE.**              Removed PROCREAD (and calling PROC from MD). Only use*              SENTENCE now.** Modified By: Peter Schellenbach, Zumasys* Date: 04/21/2017* Description: Updated to use CONFIG record in WDB.RESOURCE to** Modified By: Peter Schellenbach, Zumasys* Date: 06/16/2017* Description: For REST, separate header & request vars from rest of cgi vars.*              Fix VARS variable conflict in APPEND.REC to use QSTR and save*              QSTR in WDB.DEBUG record instead of VARS. Change program name*              in WDB.DEBUG record ID to RSRC.ID so MV.DEBUG can recreate the*              WDB.INIT command line.** Modified By: Peter Schellenbach, Zumasys* Date: 10/18/2017* Description: Save detailed debug info in WDB.DEBUG record to enable reproducing*              original environment when debugging requests.*              WDB.DEBUG: initialized from WDB.RESOURCE record attr 7, set when*              WDB.INIT should create debug records in WDB.DEBUG file for use by WDEBUG.*              WDEBUG.MODE: set if WDB.INIT is being called by WDEBUG instead of mvappsvr.** Modified By: Peter Schellenbach, Zumasys* Date: 11/29/2017* Description: Provide for execution of dashboard or REST service in a different*              account. New RSRC.ACCOUNT field added to WDB.RESOURCE records.*              Use LOGTO to switch accounts prior to executing the resource*              handler program.*#ifdef WIN32    dir_delim_ch = "\"#else    dir_delim_ch = "/"#endif*DEFC JBASELogto(STRING, INT)*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD FI.WDB.RESOURCEINCLUDE WBPD FI.WDB.DEBUG*MAT WWW.INFO = ''STATUS.CODE = 0LOGGING = 0LOG.REC = ''WDB.DEBUG = 0WDEBUG.MODE = 0*OPEN 'WDB.Q' TO Q ELSE  ERR = 'Cannot open Queue file'  GOSUB SEND.ERRORENDOPEN 'WDB.RESOURCE' TO F.RESOURCE ELSE  ERR = 'Cannot open resource file'  GOSUB SEND.ERROREND** Read and parse config settings**  Important config settings:*   LOGLEVEL - see below*   DEFAULT_HANDLER - if a "handler" is not included in RESOURCE.NAME, use this default handler*   DEFAULT_RESOURCE - if a "resource" is not included in RESOURCE.NAME, use this default resource**   Note: PATH_INFO is the part of the URL beginning with a forward slash (/) after the*   server/port and before the query string. It is interpreted as:*     /<handler>/<resource>/<REST parameter>/<another REST parameter> ...**   MVAppSvr will pass <handler>/<resource> as 2nd command line argument, unless the default*   handler is being used, then only <resource> is passed.*READ TEMPCONFIG FROM F.RESOURCE, 'CONFIG' ELSE TEMPCONFIG = ''NUMCONFIG = DCOUNT(TEMPCONFIG, @AM)CGI$CONFIG = ''CONFIGCNTR = 0FOR A = 2 TO NUMCONFIG  CONFIGNAME = TEMPCONFIG<A,1>  CONFIGVALUE = TEMPCONFIG<A,2>  IF CONFIGNAME <> '' THEN    LOCATE CONFIGNAME IN CGI$CONFIG<1,1> SETTING POS ELSE      CONFIGCNTR += 1      CGI$CONFIG<1,1,CONFIGCNTR> = CONFIGNAME    END    CGI$CONFIG<1,2,CONFIGCNTR> = CONFIGVALUE  ENDNEXT A** Get the logging level from config**  Log levels:*   0 - no logging*   1 - log errors*   2 - log all requests*   3 - log everything (debug mode)**  Log info is written to the WDB.LOG file. Requests and errors are logged*  using a unique ID.*SESSION$GLOBAL.DEBUG = 0LOCATE 'LOGLEVEL' IN CGI$CONFIG<1,1> SETTING POS THEN  TEMPVALUE = CGI$CONFIG<1,2,POS>  IF TEMPVALUE MATCHES '1N' THEN SESSION$GLOBAL.DEBUG = TEMPVALUE + 0ENDLOGGING = SESSION$GLOBAL.DEBUGIF LOGGING THEN  OPEN 'WDB.LOG' TO F.LOG ELSE LOGGING = 0END** Get default handler*DEFAULT.HANDLER = 'DBC' ;* ensure this is defined!LOCATE 'DEFAULT_HANDLER' IN CGI$CONFIG<1,1> SETTING POS THEN  DEFAULT.HANDLER = OCONV(CGI$CONFIG<1,2,POS>, 'MCU')END** Parse the command line*TCL.LINE = SENTENCE()RESOURCE.NAME = OCONV(FIELD(TCL.LINE, ' ', 2), 'MCU')INIT.VARS = FIELD(TCL.LINE, ' ', 3)VAR.STRING = FIELD(TCL.LINE, ' ', 4)XTRA.OPTS = FIELD(TCL.LINE, ' ', 5)*UNIQUE.ID = FIELD(INIT.VARS, '-', 1)ONCOM     = FIELD(INIT.VARS, '-', 2)COMCOUNT  = FIELD(INIT.VARS, '-', 3)** Get handler from RESOURCE.NAME argument*IF DCOUNT(RESOURCE.NAME, '/') = 2 THEN  HANDLER.NAME = OCONV(FIELD(RESOURCE.NAME, '/', 1), 'MCU')  RESOURCE.NAME = OCONV(FIELD(RESOURCE.NAME, '/', 2), 'MCU')END ELSE  HANDLER.NAME = DEFAULT.HANDLER  RESOURCE.NAME = OCONV(RESOURCE.NAME, 'MCU')END** Get the resource record from WDB.RESOURCE file*RSRC.ID = HANDLER.NAME:'*':RESOURCE.NAMEMAT RSRC.ITEM = ''MATREAD RSRC.ITEM FROM F.RESOURCE, RSRC.ID ELSE  IF HANDLER.NAME = DEFAULT.HANDLER THEN    MATREAD RSRC.ITEM FROM F.RESOURCE,RESOURCE.NAME ELSE NULL  ENDEND** Sort out the debug modes**  WDEBUG.MODE is set when the request was initiated by WDEBUG rather than web.*  WDB.DEBUG is set when the resource indicates to log debug info for web requests.*  WDEBUG.MODE and WDB.DEBUG are exclusive!*  SESSION$WDEBUG.MODE can be tested by resource handlers to break into debugger, or ???IF INDEX(XTRA.OPTS, '_WDEBUG_MODE_', 1) THEN WDEBUG.MODE = 1SESSION$WDEBUG.MODE = WDEBUG.MODEIF NOT(WDEBUG.MODE) THEN  WDB.DEBUG = RSRC.DEBUG.MODE  IF WDB.DEBUG THEN    OPEN 'WDB.DEBUG' TO F.WDB.DEBUG ELSE WDB.DEBUG = 0  ENDEND** Validate the resource - return error if invalid or disabled*IF (RSRC.TYPE = 'P') AND RSRC.ENABLED THEN  CGI.MODE = RSRC.PARSE.CGI  IF ONCOM = 1 AND VAR.STRING = '%%' THEN* READ VARS FROM STDIN INSTEAD OF COMMAND LINE    PROMPT ''    ECHO OFF    FOR ONCOM = 1 TO COMCOUNT      INPUT VAR.STRING      IF ONCOM < COMCOUNT THEN        GOSUB APPEND.REC      END    NEXT ONCOM    ECHO ON    ONCOM = COMCOUNT  END  IF (ONCOM = COMCOUNT) THEN    GOSUB APPEND.REC    IF LOGGING > 1 THEN      LOG.REC<1> = RESOURCE.NAME      LOG.REC<2> = DATE()      LOG.REC<3> = SYSTEM(12) ;* START TIME      LOG.REC<6> = COMCOUNT    END** Populate the vars and vals*    CGI$UNIQUE.ID = UNIQUE.ID    IF RSRC.PROGRAM <> '' THEN      CGI$RESOURCE.NAME = RSRC.PROGRAM    END ELSE      CGI$RESOURCE.NAME = RESOURCE.NAME    END    IF CGI.MODE THEN** Parse CGI, request & header variables*      CALL WDB.VARS(VARS, VALS)      LOCATE "APPSVR_ID" IN VARS SETTING POS THEN        CGI$APPSVR.ID = VALS<POS>        VARS = DELETE(VARS, POS, 0, 0)        VALS = DELETE(VALS, POS, 0, 0)      END ELSE        CGI$APPSVR.ID = ""      END      LOCATE "__body__" IN VARS SETTING POS THEN        CGI$BODY = VALS<POS>        VARS = DELETE(VARS, POS, 0, 0)        VALS = DELETE(VALS, POS, 0, 0)      END** Copy CGI variables to CGI$VARS/CGI$VALS and request & header variables to CGI$HEADERVARS/CGI$HEADERVALS*      REQUEST.VAR.NAMES = 'SIMPLEWEB_MODULE':@AM:'SIMPLEWEB_HANDLER':@AM:'REMOTE_ADDR':@AM:'REMOTE_HOST':@AM:'REMOTE_USER':@AM      REQUEST.VAR.NAMES := 'REQUEST_METHOD':@AM:'PROTOCOL_VERSION':@AM:'PATH_INFO':@AM:'CONTENT_TYPE':@AM:'SERVER_PORT':@AM:'INSTALL_PATH'      NUM.VARS = DCOUNT(VARS, @AM)      HDR.VAR.NUM = 1      CGI.VAR.NUM = 1      FOR Y = 1 TO NUM.VARS        IS.HDR.VAR = 0        VAR.NAME = VARS<Y>        IF VAR.NAME[1,5] = 'HTTP_' THEN          IS.HDR.VAR = 1        END ELSE          LOCATE VAR.NAME IN REQUEST.VAR.NAMES SETTING POS THEN IS.HDR.VAR = 1        END        IF IS.HDR.VAR THEN          CGI$HEADERVARS<HDR.VAR.NUM> = VAR.NAME          CGI$HEADERVALS<HDR.VAR.NUM> = VALS<Y>          HDR.VAR.NUM += 1        END ELSE          CGI$VARS<CGI.VAR.NUM> = VAR.NAME          CGI$VALS<CGI.VAR.NUM> = VALS<Y>          CGI.VAR.NUM += 1        END      NEXT Y** Load the Cookie variables and values*      LOCATE 'HTTP_COOKIE' IN VARS SETTING POS THEN        CSTRING = VALS<POS>      END ELSE CSTRING = ''      CONVERT ';' TO @AM IN CSTRING      NUM.COOKIES = DCOUNT(CSTRING, @AM)      FOR Y = 1 TO NUM.COOKIES        CGI$CVARS<Y> = TRIM(FIELD(CSTRING<Y>,'=',1))        CGI$CVALS<Y> = CSTRING<Y>[1 + COL2(),99999]      NEXT Y** Get server info*      LOCATE "HTTP_HOST" IN VARS SETTING POS THEN        CGI$SERVER.NAME = VALS<POS>      END ELSE CGI$SERVER.NAME = ""      LOCATE "SERVER_PORT" IN VARS SETTING POS THEN        CGI$SERVER.PORT = VALS<POS>      END ELSE CGI$SERVER.PORT = ""      IF CGI$SERVER.PORT = "" OR CGI$SERVER.PORT = "0" THEN        OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL THEN          READV TCP.PORT FROM F.MVDB.CONTROL, 'MVDB.SETTINGS', 4 ELSE TCP.PORT = ""        END        CGI$SERVER.PORT = TCP.PORT      END      IF CGI$SERVER.PORT # "" AND INDEX(CGI$SERVER.NAME, ':', 1) = 0 THEN CGI$SERVER.NAME := ":":CGI$SERVER.PORT ;*PJS 10-25-16* Only append port if its not already in the HTTP_HOST header      LOCATE "SIMPLEWEB_HANDLER" IN VARS SETTING POS THEN        CGI$PATH = VALS<POS>        IF CGI$PATH[1,1] # "/" THEN CGI$PATH = "/":CGI$PATH      END ELSE CGI$PATH = "/dbc"** Extract REST parameters*      LOCATE "PATH_INFO" IN VARS SETTING POS THEN        PATH = VALS<POS>        IF PATH[1,1] = '/' THEN PATH = PATH[2,9999]        Y = INDEX(PATH, '/', 2)        IF Y > 0 THEN          CGI$RESTPARAMS = PATH[Y + 1, 99999]          CONVERT '/' TO @AM IN CGI$RESTPARAMS        END      END    END** Clear the out buffer and set some generic vars*    SESSION$CONTENT.SENT = 0** LOGTO the account containing the resource, if not the current account*    IF RSRC.ACCOUNT <> '' THEN      IF INDEX(RSRC.ACCOUNT, dir_delim_ch, 1) > 0 THEN        * resource account is a path        ACCT.PATH = RSRC.ACCOUNT      END ELSE        * resource account name in SYSTEM file        ACCT.PATH = ''        SYSTEM.FILENAME = SYSTEM(1008)        IF SYSTEM.FILENAME <> '' THEN          OPEN SYSTEM.FILENAME TO F.SYSTEM THEN            ACCT.NAME = FIELD(RSRC.ACCOUNT, ',', 1) ;* remove the password if any            READ ACCT.REC FROM F.SYSTEM, ACCT.NAME THEN              IF ACCT.REC<1> = 'D' AND ACCT.REC<2> <> '' THEN                ACCT.PATH = ACCT.REC<2>              END            END            CLOSE F.SYSTEM          END        END      END      * check if resource path is ourself      IF OCONV(ACCT.PATH, 'MCU') = OCONV(@PATH, 'MCU') THEN        RSRC.ACCOUNT = ''      END    END    IF RSRC.ACCOUNT <> '' THEN      ACCT.FROM = @PATH      * NOTE: JBASE does not support logto(path) at this time!      RC = JBASELogto(RSRC.ACCOUNT, 4)      ACCT.TO = @PATH      IF RC = 0 OR ACCT.FROM = ACCT.TO THEN* LOGTO failed!               STATUS.CODE = 404        ERR = 'Resource account unavailable'        GOTO SEND.ERROR      END    END*    * Run the controller program for the resource*    PRINT    PRINT "700 WDB-START"    IF WDB.DEBUG THEN      EXECDUR = ''      IF RSRC.PROGRAM <> '' THEN        DBG.ID = 'R/':RSRC.PROGRAM:'/':UNIQUE.ID      END ELSE        DBG.ID = 'R/':RSRC.CONTROLLER:'/':UNIQUE.ID      END      GOSUB CREATE.DEBUG.REC      EXECSTART = SYSTEM(12)      EXECUTE RSRC.CONTROLLER:' ':UNIQUE.ID CAPTURING RESPONSE      EXECDUR = SYSTEM(12) - EXECSTART      DELETE F.WDB.DEBUG, DBG.ID      DBG.ID = 'C':DBG.ID[2, LEN(DBG.ID)]      GOSUB UPDATE.DEBUG.REC      N = DCOUNT(RESPONSE, @AM)      FOR I = 1 TO N        PRINT RESPONSE<I>      NEXT I    END ELSE      EXECUTE RSRC.CONTROLLER:' ':UNIQUE.ID    END** Wrap up*    * this call has been moved to MVDB.INIT: CALL WEB.FLUSH    PRINT "800 WDB-COMPLETE"    DELETE Q, UNIQUE.ID    IF LOGGING > 1 THEN      LOG.REC<4> = SYSTEM(12) ;* END TIME      LOG.REC<5> = LOG.REC<4> - LOG.REC<3>      LOG.REC<7> = 1 ;* this is a request      GOSUB UPDATE.LOG    END  END ELSE    GOSUB APPEND.REC    PRINT    PRINT "700 WDB-START"    PRINT "800 WDB-COMPLETE"  ENDEND ELSE  IF (ONCOM = COMCOUNT) OR (ONCOM = 1 AND VAR.STRING = '%%') THEN* Final (or only) command part has been received - log the error now    IF LOGGING THEN      LOG.REC<1> = RESOURCE.NAME      LOG.REC<2> = DATE()      LOG.REC<3> = SYSTEM(12)      LOG.REC<6> = COMCOUNT      LOG.REC<7> = 2 ;* this is an error      BEGIN CASE        CASE RSRC.TYPE = ''          LOG.REC<8> = 'Undefined resource'        CASE RSRC.TYPE <> 'P'          LOG.REC<8> = 'Invalid resource'        CASE NOT(RSRC.ENABLED)          LOG.REC<8> = 'Disabled resource'        CASE 1          LOG.REC<8> = 'Unknown error'      END CASE      GOSUB UPDATE.LOG    END    STATUS.CODE = 404    ERR = 'Invalid Resource'    GOSUB SEND.ERROR  END ELSE    PRINT    PRINT "700 WDB-START"    PRINT "800 WDB-COMPLETE"  ENDENDSTOP*SEND.ERROR:*PRINTPRINT "700 WDB-START"IF STATUS.CODE > 0 THEN  PRINT 'X-MVDB-STATUS: ':STATUS.CODEENDPRINT '500 ERROR ':ERRPRINT "800 WDB-COMPLETE"STOP*----------APPEND.REC:*----------READU QSTR FROM Q, UNIQUE.ID ELSE QSTR = ''QSTR<ONCOM> = VAR.STRINGWRITE QSTR ON Q, UNIQUE.IDRETURN*----------UPDATE.LOG:*----------*JB*LOG.ID = SYSTEM(19)LOG.ID = (DATE() 'R%5'):(SYSTEM(12) 'R%8'):(RND(1000) 'R%4') ;*JB* we need a unique ID (this is not guaranteed unique, but should suffice)WRITE LOG.REC ON F.LOG, LOG.IDRETURN*----------CREATE.DEBUG.REC:*----------DBGREC = ''DBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_PORT> = FIELD(OCONV('','U50BB'),' ',1) ;*PortDBGREC<WDBG_HANDLER> = HANDLER.NAMEDBGREC<WDBG_RESOURCE> = RESOURCE.NAMEDBGREC<WDBG_CONTROLLER> = RSRC.CONTROLLERDBGREC<WDBG_PROGRAM> = RSRC.PROGRAMDBGREC<WDBG_REQUEST_ID> = UNIQUE.IDLOCATE "REQUEST_METHOD" IN VARS SETTING POS THEN  DBGREC<WDBG_METHOD> = VALS<POS>ENDLOCATE "PATH_INFO" IN VARS SETTING POS THEN  DBGREC<WDBG_PATH> = VALS<POS>ENDLOCATE "REMOTE_ADDR" IN VARS SETTING POS THEN  DBGREC<WDBG_REMOTE_ADDR> = VALS<POS>END* save headers variablesDBGREC<WDBG_HEADER_VARS> = LOWER(CGI$HEADERVARS)DBGREC<WDBG_HEADER_VALS> = LOWER(CGI$HEADERVALS)IF CGI$APPSVR.ID <> '' THEN  N = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM) + 1  DBGREC<WDBG_HEADER_VARS, N> = 'APPSVR_ID'  DBGREC<WDBG_HEADER_VALS, N> = CGI$APPSVR.IDEND* save form variablesDBGREC<WDBG_CGI_VARS> = LOWER(CGI$VARS)DBGREC<WDBG_CGI_VALS> = LOWER(CGI$VALS)* Request bodyDBGREC<WDBG_BODY> = CHANGE(CHANGE(CGI$BODY, CHAR(13), ''), CHAR(10), @VM)* Session variablesTEMPVARS = OCONV(CGI$CVARS, 'MCU')LOCATE 'SESSIONID' IN TEMPVARS SETTING POS THEN  SID = CGI$CVALS<POS>  SREC = ''  OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN    READ SREC FROM F.WEB.SESSION, SID ELSE NULL  END  DBGREC<WDBG_SESSION_ID> = SID  DBGREC<WDBG_SESSION_VARS> = SREC<1>  DBGREC<WDBG_SESSION_VALS> = SREC<2>  DBGREC<WDBG_SESSION_DATE> = SREC<3>  DBGREC<WDBG_SESSION_TIME> = SREC<4>END* save debug info before processing requestWRITE DBGREC ON F.WDB.DEBUG, DBG.IDRETURN*----------UPDATE.DEBUG.REC:*----------DBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_DURATION> = EXECDURIF STATUS.CODE > 0 THEN DBGREC<WDBG_STATUS> = STATUS.CODE ELSE DBGREC<WDBG_STATUS> = 200* save response headersNUM.VARS = 0EOH = INDEX(RESPONSE, @AM:@AM, 1) ;* headers end at first blank line in responseIF EOH = 0 THEN EOH = LEN(RESPONSE) + 1N = DCOUNT(RESPONSE[1, EOH - 1], @AM)FOR I = 1 TO N  HDR.LINE = RESPONSE<I>  HDR.VAR = FIELD(HDR.LINE, ':', 1)  HDR.VAL = TRIMF(HDR.LINE[COL2() + 1, LEN(HDR.LINE)])  M = LEN(HDR.VAR)  FOR J = 1 TO M    IF NOT(HDR.VAR[J,1] MATCHES '1A') AND HDR.VAR[J,1] <> '-' THEN      HDR.VAR = ''      EXIT    END  NEXT J  IF HDR.LINE[LEN(HDR.VAR) + 1, 1] <> ':' THEN HDR.VAR = ''  IF HDR.VAR = '' THEN    NUM.VARS += 1    DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = '_BAD_'    DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.LINE ;* invalid header line!  END ELSE    NUM.VARS += 1    DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = HDR.VAR    DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.VAL  ENDNEXT I* save response contentIF EOH + 2 <= LEN(RESPONSE) THEN  DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(RESPONSE[EOH + 2, LEN(RESPONSE)])ENDWRITE DBGREC ON F.WDB.DEBUG, DBG.IDRETURN*END0002D0SUB.GET.NEXT.ID0c2SUBROUTINE SUB.GET.NEXT.ID(NewID,F.CONTROL)** Copyright (c) 2020 Zumasys, Inc. All rights reserved.* Description: generate a (probably) unique ID based on current time, date and counter** Pass MVDB.CONTROL file variable, returns new ID* Up to 10,000 IDs can be generated per second without collision* Returned ID format: YYYYMMDDHHMMSSNNNN*D = DATE()T = TIME()HHMMSS = OCONV(OCONV(T,'MTS'),'MCN')YYYY = OCONV(D,'DY')IF LEN(YYYY) < 4 THEN YYYY=YYYY+2000MM = OCONV(D,'DM') 'R%%'DD = OCONV(D,'DD') 'R%%'CTR = 1READVU CTR FROM F.CONTROL,'NEXT.ID.COUNTER',1 ELSE CTR = 1ENDWRITE CTR+1 ON F.CONTROL,'NEXT.ID.COUNTER' ON ERROR NULLENDNewID = YYYY:MM:DD:HHMMSS:(CTR 'R%%%%')RETURNEND0002A6SUB.LOG.DEBUG.INFO0c2SUBROUTINE SUB.LOG.DEBUG.INFO(WIDGET.NAME,MESSAGE)** Copyright (c) 2020 Zumasys, Inc. All rights reserved.** Pass widget name and message to log. When widget is placed in debug mode,* up to 100 lines of log content are displayed.*EQU MAX.LINES TO 100*OPEN 'WDB.DEBUG' TO F.WDB.DEBUG THEN  READ EXTRA.INFO FROM F.WDB.DEBUG,WIDGET.NAME ELSE EXTRA.INFO = ''  EXTRA.INFO<-1> = TIMEDATE():' ':MESSAGE  N = DCOUNT(EXTRA.INFO,@AM)  IF N > MAX.LINES THEN    * DISCARD ALL EXCEPT LAST 100 LINES    M = N - MAX.LINES    K = INDEX(EXTRA.INFO,@AM,M)    EXTRA.INFO = EXTRA.INFO[K+1,999999]  END  WRITE EXTRA.INFO ON F.WDB.DEBUG,WIDGET.NAMERETURNEND000677REBUILD.URL.STRING0c2SUBROUTINE REBUILD.URL.STRING(URL.STRING)* 12-15-15* 9-23-16 TPARKER - LOGIC TOTALLY REWRITTENINCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEURL.STRING=''*** NEED CGI$VARS ALPHABETIZED TO INSURE URL ALWAYS IN SAME ORDER** BUT EXCLUDE THOSE ADDED BY MVAPPSVR*MAX.VARS=DCOUNT(CGI$VARS,@AM)ALPHA.VARS=''ALPHA.VALS=''FOR VAR.CNTR = 1 TO MAX.VARS   var=CGI$VARS<VAR.CNTR>   BEGIN CASE      CASE var = 'SIMPLEWEB_MODULE'; var=''      CASE var = 'REMOTE_ADDR'; var=''      CASE var = 'REMOTE_HOST'; var=''      CASE var = 'REMOTE_USER'; var=''      CASE var = 'REQUEST_METHOD'; var=''      CASE var = 'PROTOCOL_VERSION'; var=''      CASE var = 'HTTP_REFERER'; var=''      CASE var = 'HTTP_USER_AGENT'; var=''      CASE var = 'HTTP_HOST'; var=''      CASE var = 'HTTP_ACCEPT'; var=''      CASE var = 'HTTP_COOKIE'; var=''      CASE var = 'HTTP_CONNECTION'; var=''      CASE var = 'SIMPLEWEB_HANDLER'; var=''      CASE var = 'PATH_INFO'; var=''      CASE var = 'CONTENT_TYPE'; var=''      CASE var = 'SERVER_PORT'; var=''      CASE var = 'INSTALL_PATH'; var=''      CASE var = 'APPSVR_ID'; var=''      CASE var = '__body__'; var=''      CASE 1; NULL   END CASE   IF var <> '' THEN      val=CGI$VALS<VAR.CNTR>      LOCATE var IN ALPHA.VARS BY "AL" SETTING POS ELSE NULL      ALPHA.VARS=INSERT(ALPHA.VARS,POS,0,0,var)      ALPHA.VALS=INSERT(ALPHA.VALS,POS,0,0,val)    END NEXT VAR.CNTRMAX.VAR.CNTR=DCOUNT(ALPHA.VARS,@AM)FOR VAR.CNTR = 1 TO MAX.VAR.CNTR   var=ALPHA.VARS<VAR.CNTR>   val=ALPHA.VALS<VAR.CNTR>   URL.STRING:='&':var:'=':val NEXT VAR.CNTRURL.STRING=URL.STRING[2,999999]RETURNEND0023EFMVDB.INIT0c2*** Copyright (C) 2020 Zumasys, Inc., All Rights Reserved* Description: perform common dashboard startup functions** 9-23-16 TPARKER MODIFICATIONS TO ELIMINATE GO_BACK AND REPLACE WITH*         STANDARD BROWSER BACK BUTTION** 10-25-16 Peter Schellenbach - moved this out of INIT.WWW and into*          this new MVDB.INIT program to handle all MVDB-specific*          initialization, then launch individual MVDB resource*          programs (MVDB.MAIN, MVDB.ADMIN, MVDB.WEB.ED).**          Additional browser back button fixes:*            - do not save and restore SESSION as this reflects the login status*              and after a logout, using browser back and forward, then logging*              back in may cause unexpected logout by using browser back or forward.*              Only current_db is restored when backing up.*            - push current state before letting MVDB.MAIN process the request.*              Since any Go button click or link click only affects a single widget,*              only WIDGET.USER.DATA for that specific needs to be pushed. The widget*              can be identified by examining CGI variables 'sw' and 'udview' at the*              next level. We do not know which widget state to save at level 'n'*              until we receive a request for level 'n+1' which specifies user input*              or drilldown for a specific widget. At this time the widget state*              is saved for the previous stack level.*            - no need to save and restore CGI variables, as these are all supplied*              in the query string in the URL, and when going back up the stack,*              the URL and query string matches the stack, so the CGI variables*              are identical.*            - include the PATH_INFO in the URL when pushing on stack, since we*              need to handle other resources (MVDB.ADMIN, MVDB.WEB.ED) besides*              MVDB.MAIN.*EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*OPEN 'WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, 'WEB.SESSION'OPEN 'WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS' ;** this is in /WWW/ common **OPEN 'MVDB.UDATA' TO F.MVDB.UDATA ELSE STOP 201, 'MVDB.UDATA'*IF CGI$RESOURCE.NAME = '' THEN CGI$RESOURCE.NAME = 'MVDB.MAIN' ;* safe default*MAT GLOBAL.INFO = ''** Combine headers & cgi vars (MVDB programs don't use CGI$HEADERVARS/CGI$HEADERVALS*IF CGI$HEADERVARS <> "" THEN  IF CGI$VARS = "" THEN    CGI$VARS = CGI$HEADERVARS    CGI$VALS = CGI$HEADERVALS  END ELSE    NUM.HDR.VARS = COUNT(CGI$HEADERVARS, @AM)    NUM.HDR.VALS = COUNT(CGI$HEADERVALS, @AM)    IF NUM.HDR.VARS >= NUM.HDR.VALS THEN      * Since there may be missing (null) vals at end of CGI$HEADERVALS,      * add appropriate number of @AM to keep vars & vals in sync!      CGI$VARS = CGI$HEADERVARS : @AM : CGI$VARS      CGI$VALS = CGI$HEADERVALS : STR(@AM, NUM.HDR.VARS - NUM.HDR.VALS + 1) : CGI$VALS    END  ENDEND** Validate the HTTP method*METHOD = 'UNKNOWN'LOCATE "REQUEST_METHOD" IN CGI$VARS SETTING POS THEN METHOD = OCONV(CGI$VALS<POS>, 'MCU')IF METHOD <> 'GET' AND METHOD <> 'POST' THEN  PRINT '500 ERROR Unsupported HTTP Method ':METHOD  STOPEND** Load the session ID if there is one*CALL GET.SESSION.ID(SESSION$ID, CGI$VARS, CGI$VALS)IF (SESSION$ID = '') THEN  CALL CREATE.SESSION(SESSION$ID)  CALL SET.COOKIE("sessionid=":SESSION$ID)END** How many active users are online?*SELECT F.WEB.SESSIONUSER.COUNT = 0LOOP  READNEXT WSID ELSE EXIT  READ SREC FROM F.WEB.SESSION, WSID ELSE CONTINUE  LOCATE "userid" IN SREC<1> SETTING UPOS THEN USER.COUNT += 1REPEATPRINT "Client-Count: ":USER.COUNT** Browser "back" button handler*READ DD.STACK FROM F.MVDB.UDATA, SESSION$ID:'$DD.STACK' ELSE DD.STACK=''NEW.STACK.ITEM = 1MAX.DDS = 0CALL REBUILD.URL.STRING(URL.STRING)LOCATE "PATH_INFO" IN CGI$VARS SETTING POS THEN  URL.PATH =  CGI$VALS<POS>  IF URL.PATH = "" OR URL.PATH = "/" THEN URL.PATH = CGI$PATH:"/MVDB.MAIN"  IF URL.PATH[1,1] # "/" THEN URL.PATH = "/":URL.PATHEND ELSE URL.PATH = "/dbc/MVDB.MAIN"URL = URL.PATH:'?':URL.STRING**W$GOBACK=0***CALL SUB.LOG.DEBUG.INFO('MVDB.INIT','BEGIN REQUEST, SESSION=':SESSION$ID:' URL=':URL:' CUR STACK LEVEL=':DCOUNT(DD.STACK,AM):' METHOD=':METHOD)*IF DD.STACK <> '' THEN  MAX.DDS = DCOUNT(DD.STACK,AM)  IF INDEX(DD.STACK,URL,1) THEN    DD.POS = MAX.DDS    LOOP      IF DD.POS THEN        IF URL = DD.STACK<DD.POS> THEN          NEW.STACK.ITEM = 0        END      END    UNTIL NOT(DD.POS) OR NOT(NEW.STACK.ITEM) DO      DD.POS = DD.POS - 1    REPEAT    IF DD.POS THEN*** BACK BUTTON USED SO POP OFF PREVIOUS DRILLDOWNS*      GOSUB PURGE.URLS.AFTER.BACK      READ GUD FROM F.MVDB.UDATA, SESSION$ID:'$DD.':DD.POS:'.GUD' ELSE GUD=''      WRITE GUD ON F.MVDB.UDATA, SESSION$ID:'$UG'      READ WUD FROM F.MVDB.UDATA, SESSION$ID:'$DD.':DD.POS:'.WUD' ELSE WUD = ''      URL.WIDGET = WUD<1>      IF URL.WIDGET <> 'NULL' THEN        WRITE DELETE(WUD,1,0,0) ON F.MVDB.UDATA, SESSION$ID:'$':URL.WIDGET      END      READ SESSION FROM F.MVDB.UDATA, SESSION$ID:'$DD.':DD.POS:'.SESSION' ELSE SESSION=''      LOCATE "userid" IN SESSION<1> SETTING POS THEN userid = SESSION<2,POS> ELSE userid = ''      IF userid <> '' THEN* Restore current dashboard from drilldown stack, but leave other session variables alone        LOCATE "current_db" IN SESSION<1> SETTING POS THEN current_db = SESSION<2,POS> ELSE current_db = ''        CALL PUT.SESSION.VAR("current_db", current_db)      END**        W$GOBACK=1    END  ENDEND*IF NEW.STACK.ITEM THEN* POST-REDIRECT-GET pattern causes extra GET after POST, but only* the GET is on browser history, so skip duplicate URLs based on* special CGI variables 'dblogin' and 'dbprg' (note: dbprg is not* being used at this time).  LOCATE "dblogin" IN CGI$VARS SETTING POS THEN dblogin = CGI$VALS<POS> ELSE dblogin = 0  LOCATE "dbprg" IN CGI$VARS SETTING POS THEN dbprg = CGI$VALS<POS> ELSE dbprg = 0  IF NOT(dblogin) AND NOT(dbprg) THEN* Push the new URL and session state onto the stack    MAX.DDS += 1    DD.STACK<MAX.DDS> = URL* Save global user before running request    READ GUD FROM F.MVDB.UDATA, SESSION$ID:"$UG" ELSE GUD = ''    WRITE GUD ON F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS:'.GUD'* Get widget name from request CGI variables & save widget user data before running request    GOSUB GET.URL.WIDGET    IF URL.WIDGET = '' THEN      DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS-1:'.WUD'    END ELSE      READ WUD FROM F.MVDB.UDATA, SESSION$ID:'$':URL.WIDGET ELSE WUD = ''      WRITE INSERT(WUD,1,0,0,URL.WIDGET) ON F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS-1:'.WUD'    END    READ SESSION FROM F.WEB.SESSION, SESSION$ID ELSE SESSION = ''    IF SESSION = '' THEN      DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS:'.SESSION'    END ELSE      WRITE SESSION ON F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS:'.SESSION'    END  ENDENDIF DD.STACK = '' THEN  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.STACK'END ELSE  WRITE DD.STACK ON F.MVDB.UDATA, SESSION$ID:'$DD.STACK'END** Run the MVDB program for this resource and check for failure*LOOP  TRY.AGAIN = 0  APP.FAILURE = 0  EXECUTE CGI$RESOURCE.NAME  IF GLOBAL.INFO(100) # 1 THEN* The dashboard controller quit unexpectedly. If there is a running* widget, it is likely causing the failure. Fail it, and try again.    APP.FAILURE = 1    CALL GET.SESSION.VAR("running_widget",FAILED.WIDGET)    IF FAILED.WIDGET # "" THEN      CALL PUT.SESSION.VAR("running_widget","")      CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS)      LOCATE FAILED.WIDGET IN FAILED.WIDGETS SETTING FWPOS ELSE        FAILED.WIDGETS<-1> = FAILED.WIDGET        CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)        TRY.AGAIN = 1      END    END    LOCATE "unfail_widget" IN CGI$VARS SETTING DPOS THEN      CGI$VARS = DELETE( CGI$VARS, DPOS, 0, 0 )      CGI$VALS = DELETE( CGI$VALS, DPOS, 0, 0 )    END  ENDWHILE TRY.AGAIN DO REPEATIF APP.FAILURE THEN  CALL WEB.SEND("An application error occured in program ":CGI$RESOURCE.NAME:".<hr>")  HTML = '<table><tr><th>Variable</th><th>Value</th></tr>'  FOR X = 1 TO DCOUNT( CGI$VARS, @AM )    HTML<-1> = '<tr><td>':CGI$VARS<X>:'</td><td>':CGI$VALS<X>:'</td></tr>'  NEXT X  HTML<-1> = '</table>'  CALL WEB.SEND(HTML)END* Final WEB.FLUSH call moved from WDB.INIT to here (makes deploying MVConnect to other accounts simpler)CALL WEB.FLUSH** Done*STOP** SUPPORT ROUTINES FOR BACK BUTTON HANDLER*PURGE.URLS.AFTER.BACK:*FIRST.PURGE = DD.POS + 1IF FIRST.PURGE > MAX.DDS THEN RETURNFOR PURGE.CNTR = MAX.DDS TO FIRST.PURGE STEP -1  DD.STACK = DELETE(DD.STACK,PURGE.CNTR,0,0)  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':PURGE.CNTR:'.GUD'  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':PURGE.CNTR:'.WUD'  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':PURGE.CNTR:'.SESSION'NEXT PURGE.CNTRRETURN*GET.URL.WIDGET:*URL.WIDGET='NULL'LOCATE "sw" IN CGI$VARS SETTING POS THEN  URL.WIDGET = CGI$VALS<POS>END ELSE  LOCATE "udview" IN CGI$VARS SETTING POS THEN    URL.WIDGET = CGI$VALS<POS>  ENDENDRETURN*END000103SWAP0c2SUBROUTINE SWAP(string,SUB1,SUB2)**#MAKE# RL $OPTIONS D3IDX.POS = 1LOOP  POS = INDEX( string, SUB1, IDX.POS )WHILE POS DO  string = string[1,POS-1]:SUB2:string[POS+LEN(SUB1),LEN(string)]  IDX.POS = IDX.POS + COUNT(SUB2,SUB1)REPEATRETURNEND016F3DMVBP.FORMS0c0016F29listpeqs.html0c2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Print Queue</title><style type="text/css">html {margin:0;padding:0;}body{margin:0;padding:0;font-family:Arial, Helvetica, sans-serif;font-size:12px;background: url(/db/images/background_body.gif) 0 0 repeat-x;}/* *html body {height:100%;}*/body.popup{margin:5px 5px 5px 5px;}p, td, th{font-size:1em;}pre {font-size:1em;}#container {position:relative;margin:0 auto;padding:15px 20px 0 20px;}#header {}#maincontent{background: url(/db/images/background_maincontent.gif) 0 0 no-repeat;padding:0 0 0 20px;margin:0 0 0 0;position:relative;}#content {background: url(/db/images/background_maincontent.gif) 100% 0 no-repeat;padding:5px 20px 50px 0;position:relative;min-height:320px;_height:320px;}/* =HEADER STYLES=================================================================*/#header #navbar {position:absolute;top:0;right:-1px;height:30px;list-style:none;margin:0;padding:0 5px 0 0;background: url(/db/images/background_navbar.gif) 0 0 repeat-x;}#header #navbar li {height:10px;float:left;position:relative;}#header #navbar li.myreports {background: url(/db/images/background_navbarleft.gif) 0 0 no-repeat;padding-left:15px;}#header #navbar li.completed {background: url(/db/images/background_navbarright.gif) 100% 0 no-repeat;padding-right:15px;}#header #navbar li.admin {background: url(/db/images/background_tabfirst.gif) 0 12px no-repeat;padding-left:15px;}#header #navbar li.admin a{background: url(/db/images/background_tabfirst.gif) 100% 12px no-repeat;margin:0;padding:7px 12px 0 3px;line-height:24px;height:24px;color: #333333;}#header #navbar li.profile {background: url(/db/images/background_tabfirst.gif) 0 12px no-repeat;padding-left:15px;}body.admin #header #navbar li.profile {background: url(/db/images/background_tab.gif) 0 12px no-repeat;}#header #navbar li.profile a{background: url(/db/images/background_tabright.gif) 100% 12px no-repeat;padding:7px 15px 0 0;margin:0;line-height:24px;height:24px;color: #333333;}#header #navbar li a {float:left;height:32px;line-height:32px;margin:0;padding: 0 8px;text-decoration:none;}#header #navbar li a:hover {text-decoration:underline}#header #navbar li.active a {background: url(/db/images/background_navbaractive.gif) 50% 0 no-repeat;height:30px;font-weight:normal;}#header #navbar a {color: #FFFFFF;}#header #logo {position:absolute;left:10px;top:20px;}#header #welcome {position:absolute;right:15px;top:40px;font-size:.9em;color:#333333;}#errors, #messages {padding:20px 20px 20px 40px;border:1px solid #CCCCCC;background: #EEEEEE;clear:both;margin-bottom:40px;position:relative;}/* =FOOTER STYLES=================================================================*/#footer {text-align:center;font-size:.8em;color: #999999;clear:both;}#footer a {color: #999999;text-decoration:none;}/* =HEADER STYLES=================================================================*/h1 {font-weight:normal;font-size:26px;letter-spacing:-1px;margin:0 0 10px 0;}h2 {font-size:22px;margin:10px 0 0 0;font-weight:normal;}h3 {margin:15px 0 5px 0;font-weight:normal;font-size:16px;border-bottom: 1px solid #999999;position:relative;}h4 {margin:0;font-weight:normal;font-size:12px;}/* =BASIC STYLES=================================================================*/p{margin: 0 0 10px 0;line-height:1.3em;}label{font-weight:bold;}/* =TABLE STYLES=================================================================*/.listing{border:1px solid #cccccc;border-collapse:collapse;clear: both;width:100%;margin: 0 0 5px 0;}.listing th, .form .listing th {background-color:#cccccc;padding:5px;text-align:left;vertical-align:top;border-bottom: 1px solid #cccccc;color: #333333;}table.sortable th a{color: #333333;text-decoration:none;}.listing td, .form .listing td{padding:5px;border-bottom:1px solid #cccccc;vertical-align:top;}.even td, .even th{background: #EEEEEE;}.odd td, .odd th{background: #FFFFFF;}.even .odd th, .even .odd td {background: #FFFFFF;}fieldset {padding:0 10px 10px 10px;margin: 0 0 10px 0;position:relative;}legend {margin-top:5px;font-size:22px;margin-bottom:10px;font-weight:normal;color: #000000;letter-spacing:-1px;}.form {border-collapse:collapse;margin: 0;padding: 0;}.form th{text-align:right;padding:5px 0 5px 5px;background:none;vertical-align:top;}.form td{text-align:left;padding:3px;vertical-align:top;}span.button button {background: url(/db/images/background_button.gif) 100% 0 no-repeat;border:none;padding:0 5px 0 0;height:23px;color:#333333;}span.button {background: url(/db/images/background_button.gif) 0 0 no-repeat;padding: 0 0 0 5px;}html>body span.button {padding: 5px 0 5px 5px;}input.text {border: 1px solid #999999;}input.date {width:55px;background: url(/db/images/icon_calendar.gif) 2px 50% no-repeat;padding-left:20px;border: 1px solid #999999;}/* =PAGING STYLES=================================================================*/.paging{text-align:right;}.wizardtab {position:relative;}.tabnav {text-align:right;padding-top:10px;}.note {font-size:smaller;color: #666666;margin:0;}a:link, a:visited {text-decoration: underline;color: #ff8125;}a:hover {text-decoration: underline;color: #333;}a img {border:none;}#printqueue tr:hover td, #printqueue tr.hover td {background:#CCCCCC;}#printqueue tr:hover .preview, #printqueue tr.hover .preview {display:block;z-index:200;}.preview {position:absolute;right:25px;top:25px;margin-top:-5px;border-top:1px solid #666666;border-right:1px solid #666666;border-left:1px solid #666666;font-size:.8em;padding:20px 20px 10px 20px;background: url(/db/images/background_preview.gif) 0 100% repeat-x;display:none;_width: 60em;min-width:60em;}a.thumbnail pre {float:left;margin:5px;border-top:1px solid #666666;border-right:1px solid #666666;border-left:1px solid #666666;font-size:4px;padding:5em 5em 4em 5em;background: url(/db/images/background_preview.gif) 0 100% repeat-x;position:relative;}a.thumbnail {text-decoration:none;color:#666666;}a.thumbnail:hover {color:#000000}.queued td{background:#FFCC33;}div.page {background: #FFFFFF;border-top:1px solid #BBBBBB;border-right:1px solid #999999;border-left:1px solid #333333;border-bottom:1px solid #000000;margin:10px 0;padding:20px;float:left;clear:both;_width:60em;min-width:60em;font-size:.9em;}.printDialog {position:absolute; top:5px; right:0; width:220px; background:#FFFFFF; border: 1px solid #CCCCCC; border-top:none;}.printDialog div {padding:0 5px 5px 5px;}.even .printDialog {background: #EEEEEE;}tr.hover .printDialog, tr:hover .printDialog {background:#CCCCCC;z-index:201;}#alerts {margin: 50px 0 -30px 0;}form {margin: 0;padding: 0;}#search_box {margin: 0;position: absolute;top: 20px;right: 20px;text-align: right;}</style><script><!--var BaseURL = "/";--></script><script type="text/javascript" language="javascript">/*Behaviour v1.1 by Ben Nolan, June 2005. Based largely on the workof Simon Willison (see comments by Simon below).Description:Uses css selectors to apply javascript behaviours to enableunobtrusive javascript in html documents.Usage:   var myrules = {'b.someclass' : function(element){element.onclick = function(){alert(this.innerHTML);}},'#someid u' : function(element){element.onmouseover = function(){this.innerHTML = "BLAH!";}}};Behaviour.register(myrules);License:My stuff is BSD licensed. Not sure about Simon's.More information:http://ripcord.co.nz/behaviour/*/   var Behaviour = {list : new Array,register : function(sheet){Behaviour.list.push(sheet);},start : function(){Behaviour.addLoadEvent(function(){Behaviour.apply();});},apply : function(){for (h=0;sheet=Behaviour.list[h];h++){for (selector in sheet){list = document.getElementsBySelector(selector);if (!list){continue;}for (i=0;element=list[i];i++){sheet[selector](element);}}}},addLoadEvent : function(func){var oldonload = window.onload;if (typeof window.onload != 'function') {window.onload = func;} else {window.onload = function() {oldonload();func();}}}}Behaviour.start();/*The following code is Copyright (C) Simon Willison 2004.document.getElementsBySelector(selector)- returns an array of element objects from the current documentmatching the CSS selector. Selectors can contain element names, class names and ids and can be nested. For example:elements = document.getElementsBySelect('div#main p a.external')Will return an array of all 'a' elements with 'external' in their class attribute that are contained inside 'p' elements that are contained inside the 'div' element which has id="main"New in version 0.4: Support for CSS2 and CSS3 attribute selectors:See http://www.w3.org/TR/css3-selectors/#attribute-selectorsVersion 0.4 - Simon Willison, March 25th 2003-- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows-- Opera 7 fails */function getAllChildren(e) {return e.all ? e.all : e.getElementsByTagName('*');}document.getElementsBySelector = function(selector) {if (!document.getElementsByTagName) {return new Array();}var tokens = selector.split(' ');var currentContext = new Array(document);for (var i = 0; i < tokens.length; i++) {token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;if (token.indexOf('#') > -1) {var bits = token.split('#');var tagName = bits[0];var id = bits[1];var element = document.getElementById(id);if (tagName && element.nodeName.toLowerCase() != tagName) {return new Array();}currentContext = new Array(element);continue; // Skip to next token}if (token.indexOf('.') > -1) {var bits = token.split('.');var tagName = bits[0];var className = bits[1];if (!tagName) {tagName = '*';}var found = new Array;var foundCount = 0;for (var h = 0; h < currentContext.length; h++) {var elements;if (tagName == '*') {elements = getAllChildren(currentContext[h]);} else {elements = currentContext[h].getElementsByTagName(tagName);}for (var j = 0; j < elements.length; j++) {found[foundCount++] = elements[j];}}currentContext = new Array;var currentContextIndex = 0;for (var k = 0; k < found.length; k++) {if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) {currentContext[currentContextIndex++] = found[k];}}continue; // Skip to next token}if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {var tagName = RegExp.$1;var attrName = RegExp.$2;var attrOperator = RegExp.$3;var attrValue = RegExp.$4;if (!tagName) {tagName = '*';}var found = new Array;var foundCount = 0;for (var h = 0; h < currentContext.length; h++) {var elements;if (tagName == '*') {elements = getAllChildren(currentContext[h]);} else {elements = currentContext[h].getElementsByTagName(tagName);}for (var j = 0; j < elements.length; j++) {found[foundCount++] = elements[j];}}currentContext = new Array;var currentContextIndex = 0;var checkFunction; // This function will be used to filter the elementsswitch (attrOperator) {case '=': // EqualitycheckFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };break;case '~': // Match one of space seperated words checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };break;case '|': // Match start with value followed by optional hyphencheckFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };break;case '^': // Match starts with valuecheckFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };break;case '$': // Match ends with value - fails with "Warning" in Opera 7checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };break;case '*': // Match ends with valuecheckFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };break;default :checkFunction = function(e) { return e.getAttribute(attrName); };}currentContext = new Array;var currentContextIndex = 0;for (var k = 0; k < found.length; k++) {if (checkFunction(found[k])) {currentContext[currentContextIndex++] = found[k];}}continue; // Skip to next token}if (!currentContext[0]){return;}tagName = token;var found = new Array;var foundCount = 0;for (var h = 0; h < currentContext.length; h++) {var elements = currentContext[h].getElementsByTagName(tagName);for (var j = 0; j < elements.length; j++) {found[foundCount++] = elements[j];}}currentContext = found;}return currentContext;}/* That revolting regular expression explained /^(\w+)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/\---/  \---/\-------------/    \-------/|      |         |               ||      |         |           The value|      |    ~,|,^,$,* or =|   Attribute Tag*/</script><script type="text/javascript" language="javascript">/*  Prototype JavaScript framework, version 1.4.0*  (c) 2005 Sam Stephenson <sam@conio.net>**  THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff*  against the source tree, available from the Prototype darcs repository.**  Prototype is freely distributable under the terms of an MIT-style license.**  For details, see the Prototype web site: http://prototype.conio.net/*/*--------------------------------------------------------------------------*/var Prototype = {Version: '1.4.0',ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',emptyFunction: function() {},K: function(x) {return x}}var Class = {create: function() {return function() {this.initialize.apply(this, arguments);}}}var Abstract = new Object();Object.extend = function(destination, source) {for (property in source) {destination[property] = source[property];}return destination;}Object.inspect = function(object) {try {if (object == undefined) return 'undefined';if (object == null) return 'null';return object.inspect ? object.inspect() : object.toString();} catch (e) {if (e instanceof RangeError) return '...';throw e;}}Function.prototype.bind = function() {var __method = this, args = $A(arguments), object = args.shift();return function() {return __method.apply(object, args.concat($A(arguments)));}}Function.prototype.bindAsEventListener = function(object) {var __method = this;return function(event) {return __method.call(object, event || window.event);}}Object.extend(Number.prototype, {toColorPart: function() {var digits = this.toString(16);if (this < 16) return '0' + digits;return digits;},succ: function() {return this + 1;},times: function(iterator) {$R(0, this, true).each(iterator);return this;}});var Try = {these: function() {var returnValue;for (var i = 0; i < arguments.length; i++) {var lambda = arguments[i];try {returnValue = lambda();break;} catch (e) {}}return returnValue;}}/*--------------------------------------------------------------------------*/var PeriodicalExecuter = Class.create();PeriodicalExecuter.prototype = {initialize: function(callback, frequency) {this.callback = callback;this.frequency = frequency;this.currentlyExecuting = false;this.registerCallback();},registerCallback: function() {setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);},onTimerEvent: function() {if (!this.currentlyExecuting) {try {this.currentlyExecuting = true;this.callback();} finally {this.currentlyExecuting = false;}}}}/*--------------------------------------------------------------------------*/function $() {var elements = new Array();for (var i = 0; i < arguments.length; i++) {var element = arguments[i];if (typeof element == 'string')element = document.getElementById(element);if (arguments.length == 1)return element;elements.push(element);}return elements;}Object.extend(String.prototype, {stripTags: function() {return this.replace(/<\/?[^>]+>/gi, '');},stripScripts: function() {return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');},extractScripts: function() {var matchAll = new RegExp(Prototype.ScriptFragment, 'img');var matchOne = new RegExp(Prototype.ScriptFragment, 'im');return (this.match(matchAll) || []).map(function(scriptTag) {return (scriptTag.match(matchOne) || ['', ''])[1];});},evalScripts: function() {return this.extractScripts().map(eval);},escapeHTML: function() {var div = document.createElement('div');var text = document.createTextNode(this);div.appendChild(text);return div.innerHTML;},unescapeHTML: function() {var div = document.createElement('div');div.innerHTML = this.stripTags();return div.childNodes[0] ? div.childNodes[0].nodeValue : '';},toQueryParams: function() {var pairs = this.match(/^\??(.*)$/)[1].split('&');return pairs.inject({}, function(params, pairString) {var pair = pairString.split('=');params[pair[0]] = pair[1];return params;});},toArray: function() {return this.split('');},camelize: function() {var oStringList = this.split('-');if (oStringList.length == 1) return oStringList[0];var camelizedString = this.indexOf('-') == 0? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1): oStringList[0];for (var i = 1, len = oStringList.length; i < len; i++) {var s = oStringList[i];camelizedString += s.charAt(0).toUpperCase() + s.substring(1);}return camelizedString;},inspect: function() {return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'";}});String.prototype.parseQuery = String.prototype.toQueryParams;var $break    = new Object();var $continue = new Object();var Enumerable = {each: function(iterator) {var index = 0;try {this._each(function(value) {try {iterator(value, index++);} catch (e) {if (e != $continue) throw e;}});} catch (e) {if (e != $break) throw e;}},all: function(iterator) {var result = true;this.each(function(value, index) {result = result && !!(iterator || Prototype.K)(value, index);if (!result) throw $break;});return result;},any: function(iterator) {var result = true;this.each(function(value, index) {if (result = !!(iterator || Prototype.K)(value, index))throw $break;});return result;},collect: function(iterator) {var results = [];this.each(function(value, index) {results.push(iterator(value, index));});return results;},detect: function (iterator) {var result;this.each(function(value, index) {if (iterator(value, index)) {result = value;throw $break;}});return result;},findAll: function(iterator) {var results = [];this.each(function(value, index) {if (iterator(value, index))results.push(value);});return results;},grep: function(pattern, iterator) {var results = [];this.each(function(value, index) {var stringValue = value.toString();if (stringValue.match(pattern))results.push((iterator || Prototype.K)(value, index));})return results;},include: function(object) {var found = false;this.each(function(value) {if (value == object) {found = true;throw $break;}});return found;},inject: function(memo, iterator) {this.each(function(value, index) {memo = iterator(memo, value, index);});return memo;},invoke: function(method) {var args = $A(arguments).slice(1);return this.collect(function(value) {return value[method].apply(value, args);});},max: function(iterator) {var result;this.each(function(value, index) {value = (iterator || Prototype.K)(value, index);if (value >= (result || value))result = value;});return result;},min: function(iterator) {var result;this.each(function(value, index) {value = (iterator || Prototype.K)(value, index);if (value <= (result || value))result = value;});return result;},partition: function(iterator) {var trues = [], falses = [];this.each(function(value, index) {((iterator || Prototype.K)(value, index) ?trues : falses).push(value);});return [trues, falses];},pluck: function(property) {var results = [];this.each(function(value, index) {results.push(value[property]);});return results;},reject: function(iterator) {var results = [];this.each(function(value, index) {if (!iterator(value, index))results.push(value);});return results;},sortBy: function(iterator) {return this.collect(function(value, index) {return {value: value, criteria: iterator(value, index)};}).sort(function(left, right) {var a = left.criteria, b = right.criteria;return a < b ? -1 : a > b ? 1 : 0;}).pluck('value');},toArray: function() {return this.collect(Prototype.K);},zip: function() {var iterator = Prototype.K, args = $A(arguments);if (typeof args.last() == 'function')iterator = args.pop();var collections = [this].concat(args).map($A);return this.map(function(value, index) {iterator(value = collections.pluck(index));return value;});},inspect: function() {return '#<Enumerable:' + this.toArray().inspect() + '>';}}Object.extend(Enumerable, {map:     Enumerable.collect,find:    Enumerable.detect,select:  Enumerable.findAll,member:  Enumerable.include,entries: Enumerable.toArray});var $A = Array.from = function(iterable) {if (!iterable) return [];if (iterable.toArray) {return iterable.toArray();} else {var results = [];for (var i = 0; i < iterable.length; i++)results.push(iterable[i]);return results;}}Object.extend(Array.prototype, Enumerable);Array.prototype._reverse = Array.prototype.reverse;Object.extend(Array.prototype, {_each: function(iterator) {for (var i = 0; i < this.length; i++)iterator(this[i]);},clear: function() {this.length = 0;return this;},first: function() {return this[0];},last: function() {return this[this.length - 1];},compact: function() {return this.select(function(value) {return value != undefined || value != null;});},flatten: function() {return this.inject([], function(array, value) {return array.concat(value.constructor == Array ?value.flatten() : [value]);});},without: function() {var values = $A(arguments);return this.select(function(value) {return !values.include(value);});},indexOf: function(object) {for (var i = 0; i < this.length; i++)if (this[i] == object) return i;return -1;},reverse: function(inline) {return (inline !== false ? this : this.toArray())._reverse();},shift: function() {var result = this[0];for (var i = 0; i < this.length - 1; i++)this[i] = this[i + 1];this.length--;return result;},inspect: function() {return '[' + this.map(Object.inspect).join(', ') + ']';}});var Hash = {_each: function(iterator) {for (key in this) {var value = this[key];if (typeof value == 'function') continue;var pair = [key, value];pair.key = key;pair.value = value;iterator(pair);}},keys: function() {return this.pluck('key');},values: function() {return this.pluck('value');},merge: function(hash) {return $H(hash).inject($H(this), function(mergedHash, pair) {mergedHash[pair.key] = pair.value;return mergedHash;});},toQueryString: function() {return this.map(function(pair) {return pair.map(encodeURIComponent).join('=');}).join('&');},inspect: function() {return '#<Hash:{' + this.map(function(pair) {return pair.map(Object.inspect).join(': ');}).join(', ') + '}>';}}function $H(object) {var hash = Object.extend({}, object || {});Object.extend(hash, Enumerable);Object.extend(hash, Hash);return hash;}ObjectRange = Class.create();Object.extend(ObjectRange.prototype, Enumerable);Object.extend(ObjectRange.prototype, {initialize: function(start, end, exclusive) {this.start = start;this.end = end;this.exclusive = exclusive;},_each: function(iterator) {var value = this.start;do {iterator(value);value = value.succ();} while (this.include(value));},include: function(value) {if (value < this.start)return false;if (this.exclusive)return value < this.end;return value <= this.end;}});var $R = function(start, end, exclusive) {return new ObjectRange(start, end, exclusive);}var Ajax = {getTransport: function() {return Try.these(function() {return new ActiveXObject('Msxml2.XMLHTTP')},function() {return new ActiveXObject('Microsoft.XMLHTTP')},function() {return new XMLHttpRequest()}) || false;},activeRequestCount: 0}Ajax.Responders = {responders: [],_each: function(iterator) {this.responders._each(iterator);},register: function(responderToAdd) {if (!this.include(responderToAdd))this.responders.push(responderToAdd);},unregister: function(responderToRemove) {this.responders = this.responders.without(responderToRemove);},dispatch: function(callback, request, transport, json) {this.each(function(responder) {if (responder[callback] && typeof responder[callback] == 'function') {try {responder[callback].apply(responder, [request, transport, json]);} catch (e) {}}});}};Object.extend(Ajax.Responders, Enumerable);Ajax.Responders.register({onCreate: function() {Ajax.activeRequestCount++;},onComplete: function() {Ajax.activeRequestCount--;}});Ajax.Base = function() {};Ajax.Base.prototype = {setOptions: function(options) {this.options = {method:       'post',asynchronous: true,parameters:   ''}Object.extend(this.options, options || {});},responseIsSuccess: function() {return this.transport.status == undefined|| this.transport.status == 0|| (this.transport.status >= 200 && this.transport.status < 300);},responseIsFailure: function() {return !this.responseIsSuccess();}}Ajax.Request = Class.create();Ajax.Request.Events =['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];Ajax.Request.prototype = Object.extend(new Ajax.Base(), {initialize: function(url, options) {this.transport = Ajax.getTransport();this.setOptions(options);this.request(url);},request: function(url) {var parameters = this.options.parameters || '';if (parameters.length > 0) parameters += '&_=';try {this.url = url;if (this.options.method == 'get' && parameters.length > 0)this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;Ajax.Responders.dispatch('onCreate', this, this.transport);this.transport.open(this.options.method, this.url,this.options.asynchronous);if (this.options.asynchronous) {this.transport.onreadystatechange = this.onStateChange.bind(this);setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);}this.setRequestHeaders();var body = this.options.postBody ? this.options.postBody : parameters;this.transport.send(this.options.method == 'post' ? body : null);} catch (e) {this.dispatchException(e);}},setRequestHeaders: function() {var requestHeaders =['X-Requested-With', 'XMLHttpRequest','X-Prototype-Version', Prototype.Version];if (this.options.method == 'post') {requestHeaders.push('Content-type','application/x-www-form-urlencoded');/* Force "Connection: close" for Mozilla browsers to work around* a bug where XMLHttpReqeuest sends an incorrect Content-length* header. See Mozilla Bugzilla #246651.*/if (this.transport.overrideMimeType)requestHeaders.push('Connection', 'close');}if (this.options.requestHeaders)requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);for (var i = 0; i < requestHeaders.length; i += 2)this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);},onStateChange: function() {var readyState = this.transport.readyState;if (readyState != 1)this.respondToReadyState(this.transport.readyState);},header: function(name) {try {return this.transport.getResponseHeader(name);} catch (e) {}},evalJSON: function() {try {return eval(this.header('X-JSON'));} catch (e) {}},evalResponse: function() {try {return eval(this.transport.responseText);} catch (e) {this.dispatchException(e);}},respondToReadyState: function(readyState) {var event = Ajax.Request.Events[readyState];var transport = this.transport, json = this.evalJSON();if (event == 'Complete') {try {(this.options['on' + this.transport.status]|| this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]|| Prototype.emptyFunction)(transport, json);} catch (e) {this.dispatchException(e);}if ((this.header('Content-type') || '').match(/^text\/javascript/i))this.evalResponse();}try {(this.options['on' + event] || Prototype.emptyFunction)(transport, json);Ajax.Responders.dispatch('on' + event, this, transport, json);} catch (e) {this.dispatchException(e);}/* Avoid memory leak in MSIE: clean up the oncomplete event handler */if (event == 'Complete')this.transport.onreadystatechange = Prototype.emptyFunction;},dispatchException: function(exception) {(this.options.onException || Prototype.emptyFunction)(this, exception);Ajax.Responders.dispatch('onException', this, exception);}});Ajax.Updater = Class.create();Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {initialize: function(container, url, options) {this.containers = {success: container.success ? $(container.success) : $(container),failure: container.failure ? $(container.failure) :(container.success ? null : $(container))}this.transport = Ajax.getTransport();this.setOptions(options);var onComplete = this.options.onComplete || Prototype.emptyFunction;this.options.onComplete = (function(transport, object) {this.updateContent();onComplete(transport, object);}).bind(this);this.request(url);},updateContent: function() {var receiver = this.responseIsSuccess() ?this.containers.success : this.containers.failure;var response = this.transport.responseText;if (!this.options.evalScripts)response = response.stripScripts();if (receiver) {if (this.options.insertion) {new this.options.insertion(receiver, response);} else {Element.update(receiver, response);}}if (this.responseIsSuccess()) {if (this.onComplete)setTimeout(this.onComplete.bind(this), 10);}}});Ajax.PeriodicalUpdater = Class.create();Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {initialize: function(container, url, options) {this.setOptions(options);this.onComplete = this.options.onComplete;this.frequency = (this.options.frequency || 2);this.decay = (this.options.decay || 1);this.updater = {};this.container = container;this.url = url;this.start();},start: function() {this.options.onComplete = this.updateComplete.bind(this);this.onTimerEvent();},stop: function() {this.updater.onComplete = undefined;clearTimeout(this.timer);(this.onComplete || Prototype.emptyFunction).apply(this, arguments);},updateComplete: function(request) {if (this.options.decay) {this.decay = (request.responseText == this.lastText ?this.decay * this.options.decay : 1);this.lastText = request.responseText;}this.timer = setTimeout(this.onTimerEvent.bind(this),this.decay * this.frequency * 1000);},onTimerEvent: function() {this.updater = new Ajax.Updater(this.container, this.url, this.options);}});document.getElementsByClassName = function(className, parentElement) {var children = ($(parentElement) || document.body).getElementsByTagName('*');return $A(children).inject([], function(elements, child) {if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))elements.push(child);return elements;});}/*--------------------------------------------------------------------------*/if (!window.Element) {var Element = new Object();}Object.extend(Element, {visible: function(element) {return $(element).style.display != 'none';},toggle: function() {for (var i = 0; i < arguments.length; i++) {var element = $(arguments[i]);Element[Element.visible(element) ? 'hide' : 'show'](element);}},hide: function() {for (var i = 0; i < arguments.length; i++) {var element = $(arguments[i]);element.style.display = 'none';}},show: function() {for (var i = 0; i < arguments.length; i++) {var element = $(arguments[i]);element.style.display = '';}},remove: function(element) {element = $(element);element.parentNode.removeChild(element);},update: function(element, html) {$(element).innerHTML = html.stripScripts();setTimeout(function() {html.evalScripts()}, 10);},getHeight: function(element) {element = $(element);return element.offsetHeight;},classNames: function(element) {return new Element.ClassNames(element);},hasClassName: function(element, className) {if (!(element = $(element))) return;return Element.classNames(element).include(className);},addClassName: function(element, className) {if (!(element = $(element))) return;return Element.classNames(element).add(className);},removeClassName: function(element, className) {if (!(element = $(element))) return;return Element.classNames(element).remove(className);},cleanWhitespace: function(element) {element = $(element);for (var i = 0; i < element.childNodes.length; i++) {var node = element.childNodes[i];if (node.nodeType == 3 && !/\S/.test(node.nodeValue))Element.remove(node);}},empty: function(element) {return $(element).innerHTML.match(/^\s*$/);},scrollTo: function(element) {element = $(element);var x = element.x ? element.x : element.offsetLeft,y = element.y ? element.y : element.offsetTop;window.scrollTo(x, y);},getStyle: function(element, style) {element = $(element);var value = element.style[style.camelize()];if (!value) {if (document.defaultView && document.defaultView.getComputedStyle) {var css = document.defaultView.getComputedStyle(element, null);value = css ? css.getPropertyValue(style) : null;} else if (element.currentStyle) {value = element.currentStyle[style.camelize()];}}if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))if (Element.getStyle(element, 'position') == 'static') value = 'auto';return value == 'auto' ? null : value;},setStyle: function(element, style) {element = $(element);for (name in style)element.style[name.camelize()] = style[name];},getDimensions: function(element) {element = $(element);if (Element.getStyle(element, 'display') != 'none')return {width: element.offsetWidth, height: element.offsetHeight};var els = element.style;var originalVisibility = els.visibility;var originalPosition = els.position;els.visibility = 'hidden';els.position = 'absolute';els.display = '';var originalWidth = element.clientWidth;var originalHeight = element.clientHeight;els.display = 'none';els.position = originalPosition;els.visibility = originalVisibility;return {width: originalWidth, height: originalHeight};},makePositioned: function(element) {element = $(element);var pos = Element.getStyle(element, 'position');if (pos == 'static' || !pos) {element._madePositioned = true;element.style.position = 'relative';if (window.opera) {element.style.top = 0;element.style.left = 0;}}},undoPositioned: function(element) {element = $(element);if (element._madePositioned) {element._madePositioned = undefined;element.style.position =element.style.top =element.style.left =element.style.bottom =element.style.right = '';}},makeClipping: function(element) {element = $(element);if (element._overflow) return;element._overflow = element.style.overflow;if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')element.style.overflow = 'hidden';},undoClipping: function(element) {element = $(element);if (element._overflow) return;element.style.overflow = element._overflow;element._overflow = undefined;}});var Toggle = new Object();Toggle.display = Element.toggle;/*--------------------------------------------------------------------------*/Abstract.Insertion = function(adjacency) {this.adjacency = adjacency;}Abstract.Insertion.prototype = {initialize: function(element, content) {this.element = $(element);this.content = content.stripScripts();if (this.adjacency && this.element.insertAdjacentHTML) {try {this.element.insertAdjacentHTML(this.adjacency, this.content);} catch (e) {if (this.element.tagName.toLowerCase() == 'tbody') {this.insertContent(this.contentFromAnonymousTable());} else {throw e;}}} else {this.range = this.element.ownerDocument.createRange();if (this.initializeRange) this.initializeRange();this.insertContent([this.range.createContextualFragment(this.content)]);}setTimeout(function() {content.evalScripts()}, 10);},contentFromAnonymousTable: function() {var div = document.createElement('div');div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';return $A(div.childNodes[0].childNodes[0].childNodes);}}var Insertion = new Object();Insertion.Before = Class.create();Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {initializeRange: function() {this.range.setStartBefore(this.element);},insertContent: function(fragments) {fragments.each((function(fragment) {this.element.parentNode.insertBefore(fragment, this.element);}).bind(this));}});Insertion.Top = Class.create();Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {initializeRange: function() {this.range.selectNodeContents(this.element);this.range.collapse(true);},insertContent: function(fragments) {fragments.reverse(false).each((function(fragment) {this.element.insertBefore(fragment, this.element.firstChild);}).bind(this));}});Insertion.Bottom = Class.create();Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {initializeRange: function() {this.range.selectNodeContents(this.element);this.range.collapse(this.element);},insertContent: function(fragments) {fragments.each((function(fragment) {this.element.appendChild(fragment);}).bind(this));}});Insertion.After = Class.create();Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {initializeRange: function() {this.range.setStartAfter(this.element);},insertContent: function(fragments) {fragments.each((function(fragment) {this.element.parentNode.insertBefore(fragment,this.element.nextSibling);}).bind(this));}});/*--------------------------------------------------------------------------*/Element.ClassNames = Class.create();Element.ClassNames.prototype = {initialize: function(element) {this.element = $(element);},_each: function(iterator) {this.element.className.split(/\s+/).select(function(name) {return name.length > 0;})._each(iterator);},set: function(className) {this.element.className = className;},add: function(classNameToAdd) {if (this.include(classNameToAdd)) return;this.set(this.toArray().concat(classNameToAdd).join(' '));},remove: function(classNameToRemove) {if (!this.include(classNameToRemove)) return;this.set(this.select(function(className) {return className != classNameToRemove;}).join(' '));},toString: function() {return this.toArray().join(' ');}}Object.extend(Element.ClassNames.prototype, Enumerable);var Field = {clear: function() {for (var i = 0; i < arguments.length; i++)$(arguments[i]).value = '';},focus: function(element) {$(element).focus();},present: function() {for (var i = 0; i < arguments.length; i++)if ($(arguments[i]).value == '') return false;return true;},select: function(element) {$(element).select();},activate: function(element) {element = $(element);element.focus();if (element.select)element.select();}}/*--------------------------------------------------------------------------*/var Form = {serialize: function(form) {var elements = Form.getElements($(form));var queryComponents = new Array();for (var i = 0; i < elements.length; i++) {var queryComponent = Form.Element.serialize(elements[i]);if (queryComponent)queryComponents.push(queryComponent);}return queryComponents.join('&');},getElements: function(form) {form = $(form);var elements = new Array();for (tagName in Form.Element.Serializers) {var tagElements = form.getElementsByTagName(tagName);for (var j = 0; j < tagElements.length; j++)elements.push(tagElements[j]);}return elements;},getInputs: function(form, typeName, name) {form = $(form);var inputs = form.getElementsByTagName('input');if (!typeName && !name)return inputs;var matchingInputs = new Array();for (var i = 0; i < inputs.length; i++) {var input = inputs[i];if ((typeName && input.type != typeName) ||(name && input.name != name))continue;matchingInputs.push(input);}return matchingInputs;},disable: function(form) {var elements = Form.getElements(form);for (var i = 0; i < elements.length; i++) {var element = elements[i];element.blur();element.disabled = 'true';}},enable: function(form) {var elements = Form.getElements(form);for (var i = 0; i < elements.length; i++) {var element = elements[i];element.disabled = '';}},findFirstElement: function(form) {return Form.getElements(form).find(function(element) {return element.type != 'hidden' && !element.disabled &&['input', 'select', 'textarea'].include(element.tagName.toLowerCase());});},focusFirstElement: function(form) {Field.activate(Form.findFirstElement(form));},reset: function(form) {$(form).reset();}}Form.Element = {serialize: function(element) {element = $(element);var method = element.tagName.toLowerCase();var parameter = Form.Element.Serializers[method](element);if (parameter) {var key = encodeURIComponent(parameter[0]);if (key.length == 0) return;if (parameter[1].constructor != Array)parameter[1] = [parameter[1]];return parameter[1].map(function(value) {return key + '=' + encodeURIComponent(value);}).join('&');}},getValue: function(element) {element = $(element);var method = element.tagName.toLowerCase();var parameter = Form.Element.Serializers[method](element);if (parameter)return parameter[1];}}Form.Element.Serializers = {input: function(element) {switch (element.type.toLowerCase()) {case 'submit':case 'hidden':case 'password':case 'text':return Form.Element.Serializers.textarea(element);case 'checkbox':case 'radio':return Form.Element.Serializers.inputSelector(element);}return false;},inputSelector: function(element) {if (element.checked)return [element.name, element.value];},textarea: function(element) {return [element.name, element.value];},select: function(element) {return Form.Element.Serializers[element.type == 'select-one' ?'selectOne' : 'selectMany'](element);},selectOne: function(element) {var value = '', opt, index = element.selectedIndex;if (index >= 0) {opt = element.options[index];value = opt.value;if (!value && !('value' in opt))value = opt.text;}return [element.name, value];},selectMany: function(element) {var value = new Array();for (var i = 0; i < element.length; i++) {var opt = element.options[i];if (opt.selected) {var optValue = opt.value;if (!optValue && !('value' in opt))optValue = opt.text;value.push(optValue);}}return [element.name, value];}}/*--------------------------------------------------------------------------*/var $F = Form.Element.getValue;/*--------------------------------------------------------------------------*/Abstract.TimedObserver = function() {}Abstract.TimedObserver.prototype = {initialize: function(element, frequency, callback) {this.frequency = frequency;this.element   = $(element);this.callback  = callback;this.lastValue = this.getValue();this.registerCallback();},registerCallback: function() {setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);},onTimerEvent: function() {var value = this.getValue();if (this.lastValue != value) {this.callback(this.element, value);this.lastValue = value;}}}Form.Element.Observer = Class.create();Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {getValue: function() {return Form.Element.getValue(this.element);}});Form.Observer = Class.create();Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {getValue: function() {return Form.serialize(this.element);}});/*--------------------------------------------------------------------------*/Abstract.EventObserver = function() {}Abstract.EventObserver.prototype = {initialize: function(element, callback) {this.element  = $(element);this.callback = callback;this.lastValue = this.getValue();if (this.element.tagName.toLowerCase() == 'form')this.registerFormCallbacks();elsethis.registerCallback(this.element);},onElementEvent: function() {var value = this.getValue();if (this.lastValue != value) {this.callback(this.element, value);this.lastValue = value;}},registerFormCallbacks: function() {var elements = Form.getElements(this.element);for (var i = 0; i < elements.length; i++)this.registerCallback(elements[i]);},registerCallback: function(element) {if (element.type) {switch (element.type.toLowerCase()) {case 'checkbox':case 'radio':Event.observe(element, 'click', this.onElementEvent.bind(this));break;case 'password':case 'text':case 'textarea':case 'select-one':case 'select-multiple':Event.observe(element, 'change', this.onElementEvent.bind(this));break;}}}}Form.Element.EventObserver = Class.create();Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {getValue: function() {return Form.Element.getValue(this.element);}});Form.EventObserver = Class.create();Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {getValue: function() {return Form.serialize(this.element);}});if (!window.Event) {var Event = new Object();}Object.extend(Event, {KEY_BACKSPACE: 8,KEY_TAB:       9,KEY_RETURN:   13,KEY_ESC:      27,KEY_LEFT:     37,KEY_UP:       38,KEY_RIGHT:    39,KEY_DOWN:     40,KEY_DELETE:   46,element: function(event) {return event.target || event.srcElement;},isLeftClick: function(event) {return (((event.which) && (event.which == 1)) ||((event.button) && (event.button == 1)));},pointerX: function(event) {return event.pageX || (event.clientX +(document.documentElement.scrollLeft || document.body.scrollLeft));},pointerY: function(event) {return event.pageY || (event.clientY +(document.documentElement.scrollTop || document.body.scrollTop));},stop: function(event) {if (event.preventDefault) {event.preventDefault();event.stopPropagation();} else {event.returnValue = false;event.cancelBubble = true;}},findElement: function(event, tagName) {var element = Event.element(event);while (element.parentNode && (!element.tagName ||(element.tagName.toUpperCase() != tagName.toUpperCase())))element = element.parentNode;return element;},observers: false,_observeAndCache: function(element, name, observer, useCapture) {if (!this.observers) this.observers = [];if (element.addEventListener) {this.observers.push([element, name, observer, useCapture]);element.addEventListener(name, observer, useCapture);} else if (element.attachEvent) {this.observers.push([element, name, observer, useCapture]);element.attachEvent('on' + name, observer);}},unloadCache: function() {if (!Event.observers) return;for (var i = 0; i < Event.observers.length; i++) {Event.stopObserving.apply(this, Event.observers[i]);Event.observers[i][0] = null;}Event.observers = false;},observe: function(element, name, observer, useCapture) {var element = $(element);useCapture = useCapture || false;if (name == 'keypress' &&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)|| element.attachEvent))name = 'keydown';this._observeAndCache(element, name, observer, useCapture);},stopObserving: function(element, name, observer, useCapture) {var element = $(element);useCapture = useCapture || false;if (name == 'keypress' &&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)|| element.detachEvent))name = 'keydown';if (element.removeEventListener) {element.removeEventListener(name, observer, useCapture);} else if (element.detachEvent) {element.detachEvent('on' + name, observer);}}});/* prevent memory leaks in IE */Event.observe(window, 'unload', Event.unloadCache, false);var Position = {includeScrollOffsets: false,prepare: function() {this.deltaX =  window.pageXOffset|| document.documentElement.scrollLeft|| document.body.scrollLeft|| 0;this.deltaY =  window.pageYOffset|| document.documentElement.scrollTop|| document.body.scrollTop|| 0;},realOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.scrollTop  || 0;valueL += element.scrollLeft || 0;element = element.parentNode;} while (element);return [valueL, valueT];},cumulativeOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;element = element.offsetParent;} while (element);return [valueL, valueT];},positionedOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;element = element.offsetParent;if (element) {p = Element.getStyle(element, 'position');if (p == 'relative' || p == 'absolute') break;}} while (element);return [valueL, valueT];},offsetParent: function(element) {if (element.offsetParent) return element.offsetParent;if (element == document.body) return element;while ((element = element.parentNode) && element != document.body)if (Element.getStyle(element, 'position') != 'static')return element;return document.body;},within: function(element, x, y) {if (this.includeScrollOffsets)return this.withinIncludingScrolloffsets(element, x, y);this.xcomp = x;this.ycomp = y;this.offset = this.cumulativeOffset(element);return (y >= this.offset[1] &&y <  this.offset[1] + element.offsetHeight &&x >= this.offset[0] &&x <  this.offset[0] + element.offsetWidth);},withinIncludingScrolloffsets: function(element, x, y) {var offsetcache = this.realOffset(element);this.xcomp = x + offsetcache[0] - this.deltaX;this.ycomp = y + offsetcache[1] - this.deltaY;this.offset = this.cumulativeOffset(element);return (this.ycomp >= this.offset[1] &&this.ycomp <  this.offset[1] + element.offsetHeight &&this.xcomp >= this.offset[0] &&this.xcomp <  this.offset[0] + element.offsetWidth);},overlap: function(mode, element) {if (!mode) return 0;if (mode == 'vertical')return ((this.offset[1] + element.offsetHeight) - this.ycomp) /element.offsetHeight;if (mode == 'horizontal')return ((this.offset[0] + element.offsetWidth) - this.xcomp) /element.offsetWidth;},clone: function(source, target) {source = $(source);target = $(target);target.style.position = 'absolute';var offsets = this.cumulativeOffset(source);target.style.top    = offsets[1] + 'px';target.style.left   = offsets[0] + 'px';target.style.width  = source.offsetWidth + 'px';target.style.height = source.offsetHeight + 'px';},page: function(forElement) {var valueT = 0, valueL = 0;var element = forElement;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;if (element.offsetParent==document.body)if (Element.getStyle(element,'position')=='absolute') break;} while (element = element.offsetParent);element = forElement;do {valueT -= element.scrollTop  || 0;valueL -= element.scrollLeft || 0;} while (element = element.parentNode);return [valueL, valueT];},clone: function(source, target) {var options = Object.extend({setLeft:    true,setTop:     true,setWidth:   true,setHeight:  true,offsetTop:  0,offsetLeft: 0}, arguments[2] || {})source = $(source);var p = Position.page(source);target = $(target);var delta = [0, 0];var parent = null;if (Element.getStyle(target,'position') == 'absolute') {parent = Position.offsetParent(target);delta = Position.page(parent);}if (parent == document.body) {delta[0] -= document.body.offsetLeft;delta[1] -= document.body.offsetTop;}if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';if(options.setWidth)  target.style.width = source.offsetWidth + 'px';if(options.setHeight) target.style.height = source.offsetHeight + 'px';},absolutize: function(element) {element = $(element);if (element.style.position == 'absolute') return;Position.prepare();var offsets = Position.positionedOffset(element);var top     = offsets[1];var left    = offsets[0];var width   = element.clientWidth;var height  = element.clientHeight;element._originalLeft   = left - parseFloat(element.style.left  || 0);element._originalTop    = top  - parseFloat(element.style.top || 0);element._originalWidth  = element.style.width;element._originalHeight = element.style.height;element.style.position = 'absolute';element.style.top    = top + 'px';;element.style.left   = left + 'px';;element.style.width  = width + 'px';;element.style.height = height + 'px';;},relativize: function(element) {element = $(element);if (element.style.position == 'relative') return;Position.prepare();element.style.position = 'relative';var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);element.style.top    = top + 'px';element.style.left   = left + 'px';element.style.height = element._originalHeight;element.style.width  = element._originalWidth;}}if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {Position.cumulativeOffset = function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;if (element.offsetParent == document.body)if (Element.getStyle(element, 'position') == 'absolute') break;element = element.offsetParent;} while (element);return [valueL, valueT];}}</script><!-- <script type="text/javascript" language="javascript" src="/scripts/scriptaculous.js"></script> --><script type="text/javascript" language="javascript">/* ------------- element ext -------------- */  String.prototype.parseColor = function() {  var color = '#';  if(this.slice(0,4) == 'rgb(') {  var cols = this.slice(4,this.length-1).split(',');  var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  } else {  if(this.slice(0,1) == '#') {  if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  if(this.length==7) color = this.toLowerCase();  }  }  return(color.length==7 ? color : (arguments[0] || this));  }Element.collectTextNodes = function(element) {  return $A($(element).childNodes).collect( function(node) {return (node.nodeType==3 ? node.nodeValue : (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));}).flatten().join('');}Element.collectTextNodesIgnoreClass = function(element, className) {  return $A($(element).childNodes).collect( function(node) {return (node.nodeType==3 ? node.nodeValue : ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? Element.collectTextNodes(node) : ''));}).flatten().join('');}Element.setStyle = function(element, style) {element = $(element);for(k in style) element.style[k.camelize()] = style[k];}Element.setContentZoom = function(element, percent) {  Element.setStyle(element, {fontSize: (percent/100) + 'em'});   if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);  }Element.getOpacity = function(element){  var opacity;if (opacity = Element.getStyle(element, 'opacity'))  return parseFloat(opacity);  if (opacity = (Element.getStyle(element, 'filter') || '').match(/alpha\(opacity=(.*)\)/))  if(opacity[1]) return parseFloat(opacity[1]) / 100;  return 1.0;  }Element.setOpacity = function(element, value){  element= $(element);  if (value == 1){Element.setStyle(element, { opacity: (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : null });if(/MSIE/.test(navigator.userAgent))  Element.setStyle(element, {filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')});  } else {  if(value < 0.00001) value = 0;  Element.setStyle(element, {opacity: value});if(/MSIE/.test(navigator.userAgent))  Element.setStyle(element, { filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') +'alpha(opacity='+value*100+')' });  }   }  Element.getInlineOpacity = function(element){  return $(element).style.opacity || '';}  Element.childrenWithClassName = function(element, className) {  return $A($(element).getElementsByTagName('*')).select(function(c) { return Element.hasClassName(c, className) });}Array.prototype.call = function() {var args = arguments;this.each(function(f){ f.apply(this, args) });}/*--------------------------------------------------------------------------*/var Effect = {tagifyText: function(element) {var tagifyStyle = 'position:relative';if(/MSIE/.test(navigator.userAgent)) tagifyStyle += ';zoom:1';element = $(element);$A(element.childNodes).each( function(child) {if(child.nodeType==3) {child.nodeValue.toArray().each( function(character) {element.insertBefore(Builder.node('span',{style: tagifyStyle},character == ' ' ? String.fromCharCode(160) : character), child);});Element.remove(child);}});},multiple: function(element, effect) {var elements;if(((typeof element == 'object') || (typeof element == 'function')) && (element.length))elements = element;elseelements = $(element).childNodes;var options = Object.extend({speed: 0.1,delay: 0.0}, arguments[2] || {});var masterDelay = options.delay;$A(elements).each( function(element, index) {new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));});},PAIRS: {'slide':  ['SlideDown','SlideUp'],'blind':  ['BlindDown','BlindUp'],'appear': ['Appear','Fade']},toggle: function(element, effect) {element = $(element);effect = (effect || 'appear').toLowerCase();var options = Object.extend({queue: { position:'end', scope:(element.id || 'global') }}, arguments[2] || {});Effect[Element.visible(element) ? Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);}};var Effect2 = Effect; // deprecated/* ------------- transitions ------------- */Effect.Transitions = {}Effect.Transitions.linear = function(pos) {return pos;}Effect.Transitions.sinoidal = function(pos) {return (-Math.cos(pos*Math.PI)/2) + 0.5;}Effect.Transitions.reverse  = function(pos) {return 1-pos;}Effect.Transitions.flicker = function(pos) {return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;}Effect.Transitions.wobble = function(pos) {return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;}Effect.Transitions.pulse = function(pos) {return (Math.floor(pos*10) % 2 == 0 ? (pos*10-Math.floor(pos*10)) : 1-(pos*10-Math.floor(pos*10)));}Effect.Transitions.none = function(pos) {return 0;}Effect.Transitions.full = function(pos) {return 1;}/* ------------- core effects ------------- */Effect.ScopedQueue = Class.create();Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {initialize: function() {this.effects  = [];this.interval = null;},_each: function(iterator) {this.effects._each(iterator);},add: function(effect) {var timestamp = new Date().getTime();var position = (typeof effect.options.queue == 'string') ? effect.options.queue : effect.options.queue.position;switch(position) {case 'front':this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {e.startOn  += effect.finishOn;e.finishOn += effect.finishOn;});break;case 'end':timestamp = this.effects.pluck('finishOn').max() || timestamp;break;}effect.startOn  += timestamp;effect.finishOn += timestamp;this.effects.push(effect);if(!this.interval) this.interval = setInterval(this.loop.bind(this), 40);},remove: function(effect) {this.effects = this.effects.reject(function(e) { return e==effect });if(this.effects.length == 0) {clearInterval(this.interval);this.interval = null;}},loop: function() {var timePos = new Date().getTime();this.effects.invoke('loop', timePos);}});Effect.Queues = {instances: $H(),get: function(queueName) {if(typeof queueName != 'string') return queueName;if(!this.instances[queueName])this.instances[queueName] = new Effect.ScopedQueue();return this.instances[queueName];}}Effect.Queue = Effect.Queues.get('global');Effect.DefaultOptions = {transition: Effect.Transitions.sinoidal,duration:   1.0,   // secondsfps:        25.0,  // max. 25fps due to Effect.Queue implementationsync:       false, // true for combiningfrom:       0.0,to:         1.0,delay:      0.0,queue:      'parallel'}Effect.Base = function() {};Effect.Base.prototype = {position: null,start: function(options) {this.options      = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});this.currentFrame = 0;this.state        = 'idle';this.startOn      = this.options.delay*1000;this.finishOn     = this.startOn + (this.options.duration*1000);this.event('beforeStart');if(!this.options.sync)Effect.Queues.get(typeof this.options.queue == 'string' ? 'global' : this.options.queue.scope).add(this);},loop: function(timePos) {if(timePos >= this.startOn) {if(timePos >= this.finishOn) {this.render(1.0);this.cancel();this.event('beforeFinish');if(this.finish) this.finish(); this.event('afterFinish');return;  }var pos   = (timePos - this.startOn) / (this.finishOn - this.startOn);var frame = Math.round(pos * this.options.fps * this.options.duration);if(frame > this.currentFrame) {this.render(pos);this.currentFrame = frame;}}},render: function(pos) {if(this.state == 'idle') {this.state = 'running';this.event('beforeSetup');if(this.setup) this.setup();this.event('afterSetup');}if(this.state == 'running') {if(this.options.transition) pos = this.options.transition(pos);pos *= (this.options.to-this.options.from);pos += this.options.from;this.position = pos;this.event('beforeUpdate');if(this.update) this.update(pos);this.event('afterUpdate');}},cancel: function() {if(!this.options.sync)Effect.Queues.get(typeof this.options.queue == 'string' ? 'global' : this.options.queue.scope).remove(this);this.state = 'finished';},event: function(eventName) {if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);if(this.options[eventName]) this.options[eventName](this);},inspect: function() {return '#<Effect:' + $H(this).inspect() + ',options:' + $H(this.options).inspect() + '>';}}Effect.Parallel = Class.create();Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {initialize: function(effects) {this.effects = effects || [];this.start(arguments[1]);},update: function(position) {this.effects.invoke('render', position);},finish: function(position) {this.effects.each( function(effect) {effect.render(1.0);effect.cancel();effect.event('beforeFinish');if(effect.finish) effect.finish(position);effect.event('afterFinish');});}});Effect.Opacity = Class.create();Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);if(/MSIE/.test(navigator.userAgent) && (!this.element.hasLayout))Element.setStyle(this.element, {zoom: 1});var options = Object.extend({from: Element.getOpacity(this.element) || 0.0,to:   1.0}, arguments[1] || {});this.start(options);},update: function(position) {Element.setOpacity(this.element, position);}});Effect.Move = Class.create();Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);var options = Object.extend({x:    0,y:    0,mode: 'relative'}, arguments[1] || {});this.start(options);},setup: function() {Element.makePositioned(this.element);this.originalLeft = parseFloat(Element.getStyle(this.element,'left') || '0');this.originalTop  = parseFloat(Element.getStyle(this.element,'top')  || '0');if(this.options.mode == 'absolute') {this.options.x = this.options.x - this.originalLeft;this.options.y = this.options.y - this.originalTop;}},update: function(position) {Element.setStyle(this.element, {left: this.options.x  * position + this.originalLeft + 'px',top:  this.options.y  * position + this.originalTop  + 'px'});}});Effect.MoveBy = function(element, toTop, toLeft) {return new Effect.Move(element, Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));};Effect.Scale = Class.create();Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {initialize: function(element, percent) {this.element = $(element)var options = Object.extend({scaleX: true,scaleY: true,scaleContent: true,scaleFromCenter: false,scaleMode: 'box',        // 'box' or 'contents' or {} with provided valuesscaleFrom: 100.0,scaleTo:   percent}, arguments[2] || {});this.start(options);},setup: function() {this.restoreAfterFinish = this.options.restoreAfterFinish || false;this.elementPositioning = Element.getStyle(this.element,'position');this.originalStyle = {};['top','left','width','height','fontSize'].each( function(k) {this.originalStyle[k] = this.element.style[k];}.bind(this));this.originalTop  = this.element.offsetTop;this.originalLeft = this.element.offsetLeft;var fontSize = Element.getStyle(this.element,'font-size') || '100%';['em','px','%'].each( function(fontSizeType) {if(fontSize.indexOf(fontSizeType)>0) {this.fontSize     = parseFloat(fontSize);this.fontSizeType = fontSizeType;}}.bind(this));this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;this.dims = null;if(this.options.scaleMode=='box')this.dims = [this.element.offsetHeight, this.element.offsetWidth];if(/^content/.test(this.options.scaleMode))this.dims = [this.element.scrollHeight, this.element.scrollWidth];if(!this.dims)this.dims = [this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth];},update: function(position) {var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);if(this.options.scaleContent && this.fontSize)Element.setStyle(this.element, {fontSize: this.fontSize * currentScale + this.fontSizeType });this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);},finish: function(position) {if (this.restoreAfterFinish) Element.setStyle(this.element, this.originalStyle);},setDimensions: function(height, width) {var d = {};if(this.options.scaleX) d.width = width + 'px';if(this.options.scaleY) d.height = height + 'px';if(this.options.scaleFromCenter) {var topd  = (height - this.dims[0])/2;var leftd = (width  - this.dims[1])/2;if(this.elementPositioning == 'absolute') {if(this.options.scaleY) d.top = this.originalTop-topd + 'px';if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';} else {if(this.options.scaleY) d.top = -topd + 'px';if(this.options.scaleX) d.left = -leftd + 'px';}}Element.setStyle(this.element, d);}});Effect.Highlight = Class.create();Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});this.start(options);},setup: function() {if(Element.getStyle(this.element, 'display')=='none') { this.cancel(); return; }this.oldStyle = {backgroundImage: Element.getStyle(this.element, 'background-image') };Element.setStyle(this.element, {backgroundImage: 'none'});if(!this.options.endcolor)this.options.endcolor = Element.getStyle(this.element, 'background-color').parseColor('#ffffff');if(!this.options.restorecolor)this.options.restorecolor = Element.getStyle(this.element, 'background-color');this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));},update: function(position) {Element.setStyle(this.element,{backgroundColor: $R(0,2).inject('#',function(m,v,i){return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });},finish: function() {Element.setStyle(this.element, Object.extend(this.oldStyle, {backgroundColor: this.options.restorecolor}));}});Effect.ScrollTo = Class.create();Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);this.start(arguments[1] || {});},setup: function() {Position.prepare();var offsets = Position.cumulativeOffset(this.element);if(this.options.offset) offsets[1] += this.options.offset;var max = window.innerHeight ? window.height - window.innerHeight :document.body.scrollHeight - (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight);this.scrollStart = Position.deltaY;this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;},update: function(position) {Position.prepare();window.scrollTo(Position.deltaX, this.scrollStart + (position*this.delta));}});/* ------------- combination effects ------------- */Effect.Fade = function(element) {var oldOpacity = Element.getInlineOpacity(element);var options = Object.extend({from: Element.getOpacity(element) || 1.0,to:   0.0,afterFinishInternal: function(effect) { with(Element) { if(effect.options.to!=0) return;hide(effect.element);setStyle(effect.element, {opacity: oldOpacity}); }}}, arguments[1] || {});return new Effect.Opacity(element,options);}Effect.Appear = function(element) {var options = Object.extend({from: (Element.getStyle(element, 'display') == 'none' ? 0.0 : Element.getOpacity(element) || 0.0),to:   1.0,beforeSetup: function(effect) { with(Element) {setOpacity(effect.element, effect.options.from);show(effect.element); }}}, arguments[1] || {});return new Effect.Opacity(element,options);}Effect.Puff = function(element) {element = $(element);var oldStyle = { opacity: Element.getInlineOpacity(element), position: Element.getStyle(element, 'position') };return new Effect.Parallel([ new Effect.Scale(element, 200, { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], Object.extend({ duration: 1.0, beforeSetupInternal: function(effect) { with(Element) {setStyle(effect.effects[0].element, {position: 'absolute'}); }},afterFinishInternal: function(effect) { with(Element) {hide(effect.effects[0].element);setStyle(effect.effects[0].element, oldStyle); }}}, arguments[1] || {}));}Effect.BlindUp = function(element) {element = $(element);Element.makeClipping(element);return new Effect.Scale(element, 0, Object.extend({ scaleContent: false, scaleX: false, restoreAfterFinish: true,afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping].call(effect.element); }} }, arguments[1] || {}));}Effect.BlindDown = function(element) {element = $(element);var oldHeight = Element.getStyle(element, 'height');var elementDimensions = Element.getDimensions(element);return new Effect.Scale(element, 100, Object.extend({ scaleContent: false, scaleX: false,scaleFrom: 0,scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},restoreAfterFinish: true,afterSetup: function(effect) { with(Element) {makeClipping(effect.element);setStyle(effect.element, {height: '0px'});show(effect.element); }},  afterFinishInternal: function(effect) { with(Element) {undoClipping(effect.element);setStyle(effect.element, {height: oldHeight});}}}, arguments[1] || {}));}Effect.SwitchOff = function(element) {element = $(element);var oldOpacity = Element.getInlineOpacity(element);return new Effect.Appear(element, { duration: 0.4,from: 0,transition: Effect.Transitions.flicker,afterFinishInternal: function(effect) {new Effect.Scale(effect.element, 1, { duration: 0.3, scaleFromCenter: true,scaleX: false, scaleContent: false, restoreAfterFinish: true,beforeSetup: function(effect) { with(Element) {[makePositioned,makeClipping].call(effect.element);}},afterFinishInternal: function(effect) { with(Element) {[hide,undoClipping,undoPositioned].call(effect.element);setStyle(effect.element, {opacity: oldOpacity});}}})}});}Effect.DropOut = function(element) {element = $(element);var oldStyle = {top: Element.getStyle(element, 'top'),left: Element.getStyle(element, 'left'),opacity: Element.getInlineOpacity(element) };return new Effect.Parallel([ new Effect.Move(element, {x: 0, y: 100, sync: true }), new Effect.Opacity(element, { sync: true, to: 0.0 }) ],Object.extend({ duration: 0.5,beforeSetup: function(effect) { with(Element) {makePositioned(effect.effects[0].element); }},afterFinishInternal: function(effect) { with(Element) {[hide, undoPositioned].call(effect.effects[0].element);setStyle(effect.effects[0].element, oldStyle); }} }, arguments[1] || {}));}Effect.Shake = function(element) {element = $(element);var oldStyle = {top: Element.getStyle(element, 'top'),left: Element.getStyle(element, 'left') };return new Effect.Move(element, { x:  20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { with(Element) {undoPositioned(effect.element);setStyle(effect.element, oldStyle);}}}) }}) }}) }}) }}) }});}Effect.SlideDown = function(element) {element = $(element);Element.cleanWhitespace(element);var oldInnerBottom = Element.getStyle(element.firstChild, 'bottom');var elementDimensions = Element.getDimensions(element);return new Effect.Scale(element, 100, Object.extend({ scaleContent: false, scaleX: false, scaleFrom: 0,scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},restoreAfterFinish: true,afterSetup: function(effect) { with(Element) {makePositioned(effect.element);makePositioned(effect.element.firstChild);if(window.opera) setStyle(effect.element, {top: ''});makeClipping(effect.element);setStyle(effect.element, {height: '0px'});show(element); }},afterUpdateInternal: function(effect) { with(Element) {setStyle(effect.element.firstChild, {bottom:(effect.dims[0] - effect.element.clientHeight) + 'px' }); }},afterFinishInternal: function(effect) { with(Element) {undoClipping(effect.element); undoPositioned(effect.element.firstChild);undoPositioned(effect.element);setStyle(effect.element.firstChild, {bottom: oldInnerBottom}); }}}, arguments[1] || {}));}Effect.SlideUp = function(element) {element = $(element);Element.cleanWhitespace(element);var oldInnerBottom = Element.getStyle(element.firstChild, 'bottom');return new Effect.Scale(element, 0, Object.extend({ scaleContent: false, scaleX: false, scaleMode: 'box',scaleFrom: 100,restoreAfterFinish: true,beforeStartInternal: function(effect) { with(Element) {makePositioned(effect.element);makePositioned(effect.element.firstChild);if(window.opera) setStyle(effect.element, {top: ''});makeClipping(effect.element);show(element); }},  afterUpdateInternal: function(effect) { with(Element) {setStyle(effect.element.firstChild, {bottom:(effect.dims[0] - effect.element.clientHeight) + 'px' }); }},afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping].call(effect.element); undoPositioned(effect.element.firstChild);undoPositioned(effect.element);setStyle(effect.element.firstChild, {bottom: oldInnerBottom}); }}}, arguments[1] || {}));}Effect.Squish = function(element) {return new Effect.Scale(element, window.opera ? 1 : 0, { restoreAfterFinish: true,beforeSetup: function(effect) { with(Element) {makeClipping(effect.element); }},  afterFinishInternal: function(effect) { with(Element) {hide(effect.element); undoClipping(effect.element); }}});}Effect.Grow = function(element) {element = $(element);var options = Object.extend({direction: 'center',moveTransistion: Effect.Transitions.sinoidal,scaleTransition: Effect.Transitions.sinoidal,opacityTransition: Effect.Transitions.full}, arguments[1] || {});var oldStyle = {top: element.style.top,left: element.style.left,height: element.style.height,width: element.style.width,opacity: Element.getInlineOpacity(element) };var dims = Element.getDimensions(element);    var initialMoveX, initialMoveY;var moveX, moveY;switch (options.direction) {case 'top-left':initialMoveX = initialMoveY = moveX = moveY = 0; break;case 'top-right':initialMoveX = dims.width;initialMoveY = moveY = 0;moveX = -dims.width;break;case 'bottom-left':initialMoveX = moveX = 0;initialMoveY = dims.height;moveY = -dims.height;break;case 'bottom-right':initialMoveX = dims.width;initialMoveY = dims.height;moveX = -dims.width;moveY = -dims.height;break;case 'center':initialMoveX = dims.width / 2;initialMoveY = dims.height / 2;moveX = -dims.width / 2;moveY = -dims.height / 2;break;}return new Effect.Move(element, {x: initialMoveX,y: initialMoveY,duration: 0.01, beforeSetup: function(effect) { with(Element) {hide(effect.element);makeClipping(effect.element);makePositioned(effect.element);}},afterFinishInternal: function(effect) {new Effect.Parallel([ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),new Effect.Scale(effect.element, 100, {scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})], Object.extend({beforeSetup: function(effect) { with(Element) {setStyle(effect.effects[0].element, {height: '0px'});show(effect.effects[0].element); }},afterFinishInternal: function(effect) { with(Element) {[undoClipping, undoPositioned].call(effect.effects[0].element); setStyle(effect.effects[0].element, oldStyle); }}}, options))}});}Effect.Shrink = function(element) {element = $(element);var options = Object.extend({direction: 'center',moveTransistion: Effect.Transitions.sinoidal,scaleTransition: Effect.Transitions.sinoidal,opacityTransition: Effect.Transitions.none}, arguments[1] || {});var oldStyle = {top: element.style.top,left: element.style.left,height: element.style.height,width: element.style.width,opacity: Element.getInlineOpacity(element) };var dims = Element.getDimensions(element);var moveX, moveY;switch (options.direction) {case 'top-left':moveX = moveY = 0;break;case 'top-right':moveX = dims.width;moveY = 0;break;case 'bottom-left':moveX = 0;moveY = dims.height;break;case 'bottom-right':moveX = dims.width;moveY = dims.height;break;case 'center':  moveX = dims.width / 2;moveY = dims.height / 2;break;}return new Effect.Parallel([ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })], Object.extend({            beforeStartInternal: function(effect) { with(Element) {[makePositioned, makeClipping].call(effect.effects[0].element) }},afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping, undoPositioned].call(effect.effects[0].element);setStyle(effect.effects[0].element, oldStyle); }}}, options));}Effect.Pulsate = function(element) {element = $(element);var options    = arguments[1] || {};var oldOpacity = Element.getInlineOpacity(element);var transition = options.transition || Effect.Transitions.sinoidal;var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos)) };reverser.bind(transition);return new Effect.Opacity(element, Object.extend(Object.extend({  duration: 3.0, from: 0,afterFinishInternal: function(effect) { Element.setStyle(effect.element, {opacity: oldOpacity}); }}, options), {transition: reverser}));}Effect.Fold = function(element) {element = $(element);var oldStyle = {top: element.style.top,left: element.style.left,width: element.style.width,height: element.style.height };Element.makeClipping(element);return new Effect.Scale(element, 5, Object.extend({   scaleContent: false,scaleX: false,afterFinishInternal: function(effect) {new Effect.Scale(element, 1, { scaleContent: false, scaleY: false,afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping].call(effect.element); setStyle(effect.element, oldStyle);}} });}}, arguments[1] || {}));}</script><script type="text/javascript" language="javascript">addEvent(window, "load", sortables_init);var SORT_COLUMN_INDEX;function sortables_init() {if (!document.getElementsByTagName) return;tbls = document.getElementsByTagName("table");for (ti=0;ti<tbls.length;ti++) {thisTbl = tbls[ti];if (Element.hasClassName(thisTbl,'sortable') && (thisTbl.id)) {ts_makeSortable(thisTbl);}}}function ts_makeSortable(table) {if (table.rows && table.rows.length > 0) {var firstRow = table.rows[0];}if (!firstRow) return;for (var i=0;i<firstRow.cells.length;i++) {var cell = firstRow.cells[i];var txt = ts_getInnerText(cell);if(txt!="" && txt!=" " && !Element.hasClassName(cell,"nosort")){cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this);return false;">'+txt+'<span class="sortarrow"></span></a>';}}}function ts_getInnerText(el) {if (typeof el == "string") return el;if (typeof el == "undefined") { return el };if (el.innerText) return el.innerText;//Not needed but it is fastervar str = "";var cs = el.childNodes;var l = cs.length;for (var i = 0; i < l; i++) {switch (cs[i].nodeType) {case 1: //ELEMENT_NODEstr += ts_getInnerText(cs[i]);break;case 3://TEXT_NODEstr += cs[i].nodeValue;break;}}return str;}function ts_resortTable(lnk) {var span;for (var ci=0;ci<lnk.childNodes.length;ci++) {if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];}var spantext = ts_getInnerText(span);var td = lnk.parentNode;var column = td.cellIndex;var table = getParent(td,'TABLE');if (table.rows.length <= 1) return;var itm = ts_getInnerText(table.rows[1].cells[column]);sortfn = ts_sort_caseinsensitive;if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;if (itm.match(/^[$]/)) sortfn = ts_sort_currency;if (itm.match(/^[\d\.]+$/)) sortfn = ts_sort_numeric;SORT_COLUMN_INDEX = column;var firstRow = new Array();var newRows = new Array();for (i=0;i<table.rows[0].length;i++) { firstRow[i] = table.rows[0][i]; }for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows[j]; }newRows.sort(sortfn);if (span.getAttribute("sortdir") == 'down') {ARROW = '<img src="/db/images/icon_down.gif"/>';newRows.reverse();span.setAttribute('sortdir','up');} else {ARROW = '<img src="/db/images/icon_up.gif"/>';span.setAttribute('sortdir','down');}for (i=0;i<newRows.length;i++) { if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) table.tBodies[0].appendChild(newRows[i]);}for (i=0;i<newRows.length;i++) { if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows[i]);}var allspans = document.getElementsByTagName("span");for (var ci=0;ci<allspans.length;ci++) {if (allspans[ci].className == 'sortarrow') {if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?allspans[ci].innerHTML = '&nbsp;&nbsp;&nbsp;';}}}span.innerHTML = ARROW;ts_stripeTable(table);}function getParent(el, pTagName) {if (el == null) return null;else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())// Gecko bug, supposed to be uppercasereturn el;elsereturn getParent(el.parentNode, pTagName);}function ts_sort_date(a,b) {aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);if (aa.length == 10) {dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);} else {yr = aa.substr(6,2);if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }dt1 = yr+aa.substr(3,2)+aa.substr(0,2);}if (bb.length == 10) {dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);} else {yr = bb.substr(6,2);if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }dt2 = yr+bb.substr(3,2)+bb.substr(0,2);}if (dt1==dt2) return 0;if (dt1<dt2) return -1;return 1;}function ts_sort_currency(a,b) { aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');return parseFloat(aa) - parseFloat(bb);}function ts_sort_numeric(a,b) { aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));if (isNaN(aa)) aa = 0;bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX])); if (isNaN(bb)) bb = 0;return aa-bb;}function ts_sort_caseinsensitive(a,b) {aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();if (aa==bb) return 0;if (aa<bb) return -1;return 1;}function ts_sort_default(a,b) {aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);if (aa==bb) return 0;if (aa<bb) return -1;return 1;}function ts_stripeTable(tbl) {var table = $(tbl);var tbody;if(tbody = table.getElementsByTagName("tbody")[0]) {table = tbody;}for(i=0;i<table.rows.length;i++) {if(i%2) {newClass = "even";oldClass = "odd";} else {newClass = "odd";oldClass = "even";}Element.removeClassName(table.rows[i],oldClass);Element.addClassName(table.rows[i],newClass);}}function addEvent(elm, evType, fn, useCapture){if (elm.addEventListener){elm.addEventListener(evType, fn, useCapture);return true;} else if (elm.attachEvent){var r = elm.attachEvent("on"+evType, fn);return r;} else {alert("Handler could not be removed");}} </script><script type="text/javascript" language="javascript">function createStyleRule(selector, declaration) {if (!document.getElementsByTagName ||!(document.createElement || document.createElementNS)) return;var agt = navigator.userAgent.toLowerCase();var is_ie = ((agt.indexOf("msie") != -1) &&  (agt.indexOf("opera") == -1));var is_iewin = (is_ie &&  (agt.indexOf("win") != -1));var is_iemac = (is_ie &&  (agt.indexOf("mac") != -1));if (is_iemac) return; // script doesn't work properly in IE/Macvar head = document.getElementsByTagName("head")[0]; var style = (typeof document.createElementNS != "undefined") ?document.createElementNS("http://www.w3.org/1999/xhtml", "style") :document.createElement("style");if (!is_iewin) {var styleRule = document.createTextNode(selector + " {" + declaration + "}");style.appendChild(styleRule); // bugs in IE/Win}style.setAttribute("type", "text/css");style.setAttribute("media", "screen"); head.appendChild(style);if (is_iewin &&  document.styleSheets &&  document.styleSheets.length > 0) {var lastStyle = document.styleSheets[document.styleSheets.length - 1];if (typeof lastStyle.addRule == "object") {lastStyle.addRule(selector, declaration);}}}function zoomThumbnails(value) {if(!document.all) {var newValue = Math.round(value);var cssRule = "font-size: "+newValue+"px";createStyleRule("a.thumbnail pre",cssRule);}}function zoomThumbnailsUpdate(value) {var newValue = Math.round(value);var cssRule = "font-size: "+newValue+"px";createStyleRule("a.thumbnail pre",cssRule);}var myrules = {'#printqueue tr' : function(element){element.onmouseover = function(){Element.addClassName(element,"hover");},element.onmouseout = function(){Element.removeClassName(element,"hover");}},'a.deletejob' : function(element){if(document.all) {element.onclick = function(e) {return confirm("Are you sure you want to delete this job?");}}},'input.date' : function(dateField){if(!$(dateField.id+"trigger")) {if(dateField.id=="") {dateField.id = dateField.name;}Calendar.setup({inputField : dateField.id, ifFormat : "%m/%d/%y",showsTime : true,button : dateField.id, //*step : 1,weekNumbers: false,/* range: [2004,2005,2006], */showsTime: false,onUpdate: function(e) {var row = $(dateField.id).parentNode;while(row.tagName!="TR") {row = row.parentNode;}Element.removeClassName(row,"error");}});}}};function selectAll() {form = document.forms['printqueueform'];if (form.elements['entries[]'].length) {  for(var i = 0; i < form.elements['entries[]'].length; i++) {    form.elements['entries[]'][i].checked = 1;  }} else {  form.elements['entries[]'].checked = 1;}}function deselectAll() {form = document.forms['printqueueform'];if (form.elements['entries[]'].length) {  for(var i = 0; i < form.elements['entries[]'].length; i++) {    form.elements['entries[]'][i].checked = 0;  }} else {  form.elements['entries[]'].checked = 0;}}function showAdvSearch() {Effect.Fade('filter', {duration: 1.0});setTimeout("Effect.Appear('advanced_search', {duration: 1.0})", 940);$('search_link').innerHTML = 'Hide Advanced Search';$('search_link').onclick = hideAdvSearch;}function hideAdvSearch() {Effect.Fade('advanced_search', {duration: 1.0});setTimeout("Effect.Appear('filter', {duration: 1.0})", 940);$('search_link').innerHTML = 'Advanced Search';$('search_link').onclick = showAdvSearch;}Behaviour.register(myrules);</script></head><body class=""><div id="container"><!-- <div id="header"><a href="/" id="logo"><img src="/db/images/logo_bravoprint.gif" /></a><ul id="navbar"><li class="active"><a href="/dbc/SBBP.SB.LISTPEQS">Print Queue</a></li></ul></div>--><div id="maincontent"><div id="content"><!-- <h1>Print Queue</h1><div id="alerts"></div>--><div style="margin-left:12px; margin-bottom:30px;"> <div class="printDialog" id="printDialogSelected" style="display:none;left:92px;top:27px;"><div>Queue <input type="text" value="" style="width:40px;" maxlength="4" name="overridequeue"/><span class="button"><button type="submit" onclick="this.form.submit(); return false;">Print</button></span> <span class="button"><button type="button" onclick="Effect.SlideUp('printDialogSelected',{duration:0.25}); return false;">Cancel</button></span></div></div></div><form action="/dbc/SBBP.SB.LISTPEQS" method="post" id="printqueueform"><input type="hidden" value="" name="action" id="action"/><input type="hidden" value="" name="overridequeue" id="overridequeue"/><input type="hidden" value="" name="queue" id="queue"/><input type="hidden" value="" name="port" id="port"/><input type="hidden" value="" name="owner" id="owner"/><input type="hidden" value="" name="searchstring" id="searchstring"/><input type="hidden" value="" name="begindate" id="begindate"/><input type="hidden" value="" name="enddate" id="enddate"/><input type="hidden" value="" name="search_type" id="search_type"/><div style="float: left;margin: 0 0 10px 12px;"><img src="/db/images/graphic_withselected_up.gif"/> <a href="#" title="Select All" onclick="selectAll();return false;">Select All</a> |<a href="#" title="Deselect All" onclick="deselectAll();return false;">Deselect All</a> | With Selected: <span id="queueOverride">Print to Queue <input type="text" value="" name="queuet" id="queuet" style="width:40px;vertical-align:bottom;"/></span><a href="#" title="Print Selected" onclick="$('overridequeue').value=$('queuet').value;$('action').value='print';$('printqueueform').submit(); return false;"><img src="/db/images/button_print.gif"/></a><a href="#" title="Delete Selected" onclick="if(confirm('Are you sure you want to delete the selected jobs?')) { $('action').value='delete';$('printqueueform').submit(); return false;} else { return false; }"><img src="/db/images/button_delete.gif"/></a></div><table class="listing sortable" id="printqueue"><thead><tr><th style="width:20px;"></th><th>Job</th><th>Queue</th><th>User</th><th>Port</th><th>Size (k)</th><th>Datetime</th><th>Status</th><th style="width:120px;"></th></tr></thead><tbody>[QUEUE]</tbody></table><div style="margin: 0 0 0 12px;"><img src="/db/images/graphic_withselected.gif"/> <a href="#" title="Select All" onclick="selectAll();return false;">Select All</a> |<a href="#" title="Deselect All" onclick="deselectAll();return false;">Deselect All</a> | With Selected: <span id="queueOverride">Print to Queue <input type="text" value="" name="queueb" id="queueb" style="width:40px;vertical-align:bottom;"/></span><a href="#" title="Print Selected" onclick="$('overridequeue').value=$('queueb').value;$('action').value='print';$('printqueueform').submit(); return false;"><img src="/db/images/button_print.gif"/></a><a href="#" title="Delete Selected" onclick="if(confirm('Are you sure you want to delete the selected jobs?')) { $('action').value='delete';$('printqueueform').submit(); return false;} else { return false; }"><img src="/db/images/button_delete.gif"/></a><br/> </div></form></div></div></div><div id="footer"></div></body></html>                                       ./mvappsvr/core/jb/jbasecmd.sh                                                                      0000644 0000000 0000000 00000000717 13005675162 015230  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   #!/bin/ksh
export JBCRELEASEDIR=$1
export HOME=$2
export JBCGLOBALDIR=$JBCRELEASEDIR
export PATH=$HOME/bin:$JBCRELEASEDIR/bin:$PATH
export LD_LIBRARY_PATH=$JBCRELEASEDIR/lib:$LD_LIBRARY_PATH
export JBCDEV_BIN=$HOME/bin
export JBCDEV_LIB=$HOME/lib
export JBCOBJECTLIST=$HOME/lib
export JEDIFILENAME_MD=$HOME/MD]D
export JBCEMULATE=ap
export JBASE_ERRMSG_ZERO_USED=2
export JBASE_ERRMSG_NON_NUMERIC=2
export JBASE_ERRMSG_DIVIDE_ZERO=2
cd $HOME
shift 2
umask 002
$*
                                                 ./mvappsvr/core/jb/APP.INSTALLER                                                                    0000644 0000000 0000000 00000026351 13674161107 015026  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   *
* Copyright (C) 2009 Sierra Bravo Corporation, All Rights Reserved
*
* Written by: Luke Bucklin, Sierra Bravo Corporation
* Date: 07/15/2009
* Description: Application installer
*
* Modified By: Dave Bucklin, Nerdery Interactive Labs
* Date: 02/04/2011
* Description: Add overwrite flag, clashes handling specific to MVDashboard
*
* Modified By: Mike Street, Zumasys
* Date: 03/02/2015
* Description: Adapt for jBASE
*
* Modified By: Peter Schellenbach, Zumasys
* Date: 06/12/2015
* Description: Changed READSEQ to READBLK - original D3 code was block-oriented, not line-oriented.
*
*JB INCLUDE DM,BP,UNIX.H FCNTL.H
*JB INCLUDE DM,BP,UNIX.H MODE.H
*JB CHAR BUFFER[10000]
*
    BUFFER = ""
*
    INSTALL.LOG.ON = 0
    INSTALL.LOG.ID = "INSTALL*":DATE():"*":TIME()
    INSTALL.LOG = ""
    PROCESS.STATUS = 0
    OVR.FLAG = 0
    PROMPT ""
    PRINT "File path: ":    
    INPUT PACKAGE.FILE
    IF PACKAGE.FILE = "VERSION" THEN
        PRINT
        PRINT "Installer Version"
        PRINT "1.0"
        STOP
    END
*
    returnCode = ""
*
    OPENSEQ PACKAGE.FILE READONLY TO HANDLE SETTING returnCode ELSE
        PRINT "Unable to open sequential file, returnCode = " : returnCode
        STOP
    END
*JB   HANDLE = %OPEN(PACKAGE.FILE,O$RDONLY+O$BINARY)
*JB   IF NOT(HANDLE) THEN
*JB       PRINT "Unable to open file." ; STOP
*JB   END
*
    L = 0
    PACKET = ""
    LOOP    
*JB     L = %READ(HANDLE,BUFFER,10000)
*JB
        READBLK BUFFER FROM HANDLE, 10000 ELSE
   IF PACKET = '' THEN
      CRT 'CANT READ BUFFER'
      STOP
    END
   BUFFER=''
 END
        L=LEN(BUFFER)
*END JB*
    WHILE L > 0 DO
        PACKET := BUFFER
    REPEAT
    IF PACKET = "" THEN
        PRINT "No package."
        STOP
    END
    INSTALL.ID = TIMEDATE()
    KEEP.SOURCE = "1"
*
    PRINT
    PRINT "Installing..."
*
    OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE
        CMD = "CREATE-FILE MV.PACKED.FILE 1 31"
        GOSUB EXEC.CMD
        OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE
            ERRFILE = "MV.PACKED.FILE"
            GOSUB OPEN.ERR
            STOP
        END
    END
    WRITE PACKET ON F.PACKED.FILE, "PACKAGE"

    OPEN '','MD' TO F.MD ELSE
        ERRFILE = "MD"
        GOSUB OPEN.ERR
        STOP
    END
    OPEN "MV.INSTALL" TO F.INSTALL ELSE
        CMD = "CREATE-FILE MV.INSTALL 1 11"
        GOSUB EXEC.CMD
        OPEN "MV.INSTALL" TO F.INSTALL ELSE
            ERRFILE = "MV.INSTALL"
            GOSUB OPEN.ERR
            STOP
        END
    END
    OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE
        CMD = "CREATE-FILE MV.INSTALL.CF 1 11"
        GOSUB EXEC.CMD
        OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE
            ERRFILE = "MV.INSTALL.CF"
            GOSUB OPEN.ERR
            STOP
        END
    END
    OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE
        CMD = "CREATE-FILE MVAPPS.INSTALLED 3 31"
        GOSUB EXEC.CMD
        OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE
            ERRFILE = "MVAPPS.INSTALLED"
            GOSUB OPEN.ERR
            STOP
        END
    END
    OPEN "DICT","MVDB.CLASHES" TO FD.MVDB.CLASHES ELSE
        CMD = "CREATE-FILE DICT MVDB.CLASHES 3"
        GOSUB EXEC.CMD
    END
    INSTALL.LOG.ON = 1
*
    CLEARFILE F.INSTALL
    DELETE F.INSTALL.CF, "MVAPPS-PRE-SCRIPT"      ;* Get rid of this just in case one is left over
    DELETE F.INSTALL.CF, "MVAPPS-POST-SCRIPT"
    DELETE F.INSTALL.CF, "PACKAGE.INFO"
    TARGET = F.INSTALL
    TARGET.NAME = "MV.INSTALL"
    GOSUB UNPACK
* All individual file packages are now in INSTALL
* Unpack the MD scripts
    READ PACKET FROM F.INSTALL, "MV.INSTALL.CF" THEN
        TARGET = F.INSTALL.CF
        TARGET.NAME = "MV.INSTALL.CF"
        GOSUB UNPACK
        DELETE F.INSTALL, "MV.INSTALL.CF"
    END
*
* Execute scripts that are required prior to compilation
*
    READ CMD FROM F.INSTALL.CF, "MVAPPS-PRE-SCRIPT" THEN
        LOG.LINE = TIMEDATE():": Processing PRE-INSTALL commands..."
        INSTALL.LOG<-1> = LOG.LINE
* Execute commands that need to be run before the install process begins
        GOSUB EXEC.CMD
        LOG.LINE = TIMEDATE():": Completed PRE-INSTALL commands."
        INSTALL.LOG<-1> = LOG.LINE
    END
    READ PACKAGE.INFO FROM F.INSTALL.CF, "PACKAGE.INFO" ELSE PACKAGE.INFO = ""
    PACKAGE.ID = PACKAGE.INFO<6>
    PACKAGE.INFO<4> = DATE()
    PACKAGE.INFO<5> = TIME()
*
    SELECT F.INSTALL
    LOOP
        READNEXT PKG.ID ELSE EXIT
        IF PKG.ID # "" THEN
            READ PACKET FROM F.INSTALL, PKG.ID THEN
                TARGET.FILE = FIELD(PKG.ID," ",1)
                IF TARGET.FILE[1,7] = "BINARY:" THEN TARGET.FILE=TARGET.FILE[8,999]        ;*JB
                DICT.MOD = FIELD( PKG.ID," ",2)
                DATA.MOD = FIELD( PKG.ID," ",3)
                DICT = ""
                IF FIELD( PKG.ID,'_',1 ) = "DICT" THEN
                    TARGET.FILE = FIELD( PKG.ID, '_', 2 )
                    IF TARGET.FILE[1,7] = "BINARY:" THEN TARGET.FILE=TARGET.FILE[8,999]    ;*JB
                    DICT = "DICT"
                END
                OPEN DICT,TARGET.FILE TO F.TARGET ELSE
                    IF NOT(INDEX(TARGET.FILE,':',1)) THEN
                        IF DICT.MOD = "" THEN DICT.MOD = 3
                        IF DATA.MOD = "" THEN DATA.MOD = 31
                        CMD = "CREATE-FILE ":TARGET.FILE:" ":DICT.MOD:" ":DATA.MOD
                        GOSUB EXEC.CMD
                    END
                    OPEN DICT,TARGET.FILE TO F.TARGET ELSE
                        PRINT "Unable to create file ":TARGET.FILE
                        GOSUB CLEANUP
                        STOP
                    END
                END
                TARGET = F.TARGET
                TARGET.NAME = TRIM(DICT:" ":TARGET.FILE)
                GOSUB UNPACK
            END
        END
    REPEAT
*
* Execute script required post compilation
*
    READ CMD FROM F.INSTALL.CF, "MVAPPS-POST-SCRIPT" THEN
        LOG.LINE = TIMEDATE():": Processing POST-INSTALL commands..."
        INSTALL.LOG<-1> = LOG.LINE
* Use compile options if they are present.
        OPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL THEN
            READ COMPILE.SETUP FROM F.MVDB.CONTROL, 'COMPILE.SETUP' THEN
                COMPILE.VERB = FIELD(COMPILE.SETUP<1>,' ',1)
                IF COMPILE.VERB # '' THEN
                    OPTS = FIELD(COMPILE.SETUP<1>,'(',2)
                    IF OPTS # '' THEN OPTS = "(":OPTS
                    CMD.CNT = DCOUNT( CMD, @AM )
                    FOR CMD.XX = 1 TO CMD.CNT
                        IF FIELD(CMD<CMD.XX>,' ',1) = 'BASIC' OR FIELD(CMD<CMD.XX>,' ',1) = 'COMPILE' THEN
*make sure we use the right verb and options from the compile.setup
                            CMD<CMD.XX> = COMPILE.VERB:' ':CMD<CMD.XX>[INDEX(CMD<CMD.XX>,' ',1)+1,999]:' ':OPTS
                        END
                    NEXT CMD.XX
                END
            END
        END
* Execute commands that need to be run at the end of the install process
        GOSUB EXEC.CMD
        LOG.LINE = TIMEDATE():": Completed POST-INSTALL commands."
        INSTALL.LOG<-1> = LOG.LINE
    END
*
*JB*    IF NOT(KEEP.SOURCE) THEN
*JB*        FOR X = 1 TO DCOUNT( SOURCE.FILES, @AM )
*JB*            CMD = "CLEAR-FILE DATA ":SOURCE.FILES<X>
*JB*            GOSUB EXEC.CMD
*JB*        NEXT X
*JB*    END
    READ INSTALL.LIST FROM F.INSTALL.CF, "LAST.INSTALL" ELSE INSTALL.LIST = ""
    INSTALL.LIST = INSERT( INSTALL.LIST, 1, 0, 0, INSTALL.ID )
    WRITE INSTALL.LIST ON F.INSTALL.CF, "LAST.INSTALL"
    GOSUB CLEANUP
    INSTALL.LOG<-1> = TIMEDATE():": Install complete."
    WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID
    WRITE PACKAGE.INFO ON F.MVAPPS.INSTALLED, PACKAGE.ID
    PROCESS.STATUS = 1
    GOSUB SEND.DATA
    STOP
*********
UNPACK:   *
*********
    PRINT "Unpacking ":TARGET.NAME:"... ":
*
    BYTES = 0
    CNT = 0
    LOOP
        PLENGTH = OCONV( PACKET[1,6], 'MCXD' )
        REC = PACKET[7,PLENGTH]
        PACKET = PACKET[PLENGTH+7,9999999]
        ID = REC<1>
        REC = DELETE( REC, 1, 0, 0 )
        TYP = REC[1,2]
        OVR.FLAG = REC[3,1]
        REC = REC[4,9999999]
        IF TYP = "0x" THEN
            REC = OCONV( REC, 'MY' )
            END ELSE IF TYP # "0c" THEN
                REC = TYP:REC
            END
*
            CNT += 1
            BYTES += LEN(REC)
            IF OVR.FLAG THEN
                IF DICT = "" THEN
*If we're not installing DICT items, compare for CLASHES
                    READ CLASH FROM TARGET, ID THEN
                        BEGIN CASE
*Preserve dashboard user passwords
                        CASE TARGET.FILE = "MVDB.USERS"
                            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>
*Preserve dashboard access profile
                        CASE TARGET.FILE = "MVDB.DEFS"
                            IF CLASH<5> # REC<5> THEN REC<5> = CLASH<5>
*Preserve widget access profile
                        CASE TARGET.FILE = "MVDB.WIDGETS"
                            IF CLASH<2> # REC<2> THEN REC<2> = CLASH<2>
*Preserve widget compile option
                        CASE TARGET.FILE = "MVDB.CONTROL" AND ID = "COMPILE.SETUP"
                            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>
                        END CASE
                        IF CLASH # '' AND REC # CLASH THEN
                            CLASH.NAME = TARGET.NAME
                            CONVERT " " TO "_" IN CLASH.NAME
                            OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE
                                CMD = "CREATE-FILE DATA MVDB.CLASHES,":CLASH.NAME:" 7"
                                GOSUB EXEC.CMD
                                OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE
                                    PRINT "Unable to create file MVDB.CLASHES,":CLASH.NAME
                                    GOSUB CLEANUP
                                    STOP
                                END
                            END
                            WRITE CLASH ON F.CLASHES, ID
                            CLOSE F.CLASHES
                        END
                    END
                END
                WRITE REC ON TARGET, ID
            END ELSE
                READ TST FROM TARGET, ID ELSE
                    WRITE REC ON TARGET, ID
                END
            END
            IF NOT(MOD(CNT,500)) THEN PRINT "*":
        UNTIL PACKET = "" DO REPEAT
        IF CNT # 1 THEN PLURAL = "s" ELSE PLURAL = ""
        PRINT CNT:" record":PLURAL:"."
        LOG.LINE = TIMEDATE():": UNPACKED ":CNT:" RECORDS TO ":TARGET.NAME
        INSTALL.LOG<-1> = LOG.LINE
        RETURN
**********
CLEANUP:  *
**********
        CLEARFILE F.INSTALL
        CLEARFILE F.PACKED.FILE
        RETURN
*
EXEC.CMD: *
*
        CMD.CNT = DCOUNT( CMD, @AM )
        FOR CMD.XX = 1 TO CMD.CNT
            THIS.CMD = CMD<CMD.XX>
            LOG.LINE = TIMEDATE():": EXEC: ":THIS.CMD
            INSTALL.LOG<-1> = LOG.LINE
            EXECUTE THIS.CMD CAPTURING JUNK
            IF INSTALL.LOG.ON THEN
                WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID
            END
        NEXT CMD.XX
        RETURN
*
OPEN.ERR: *
*
        LOG.LINE = TIMEDATE():": FILE OPEN ERROR: ":ERRFILE
        INSTALL.LOG<-1> = LOG.LINE
        PRINT LOG.LINE
        GOSUB SEND.DATA
        RETURN
*
SEND.DATA:*
*
        PRINT
        IF PROCESS.STATUS = 1 THEN INSTALL.STATUS = "Success" ELSE INSTALL.STATUS = "Failed"
        PRINT "Install process finished. Status: ":INSTALL.STATUS
        RETURN
    END
                                                                                                                                                                                                                                                                                       ./mvappsvr/core/jb/MVDB.SETUP                                                                       0000644 0000000 0000000 00000000334 13674161107 014472  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PQ
HCREATE-FILE DICT ./MD 11
P
Hupdatemd
P
HCREATE-FILE WDB.BP TYPE=UD
P
HCOPY 
A2
H APP.INSTALLER (O
STON
H(WDB.BP
P
HBASIC WDB.BP APP.INSTALLER
P
HCATALOG WDB.BP APP.INSTALLER
P
HAPP.INSTALLER
STON
A2
H/MVDB-FULL<
P
X
                                                                                                                                                                                                                                                                                                    ./mvappsvr/core/jb/dbdoc.html                                                                       0000644 0000000 0000000 00000010726 12571716373 015075  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <ol>
    <li id="database_required">
        <h3 class="docs_sub_item">Required Parameters</h3>
        <p>The "Required Parameters" section includes all of the parameters that must be set for the software to 
           operate correctly.
           <br><br>
           <u>jBASE Path</u>
              This field must contain the full operating system path to your jBASE installation (JBCRELEASEDIR).  Typically, this is 
              /opt/jbase5/5.2 on Unix and Linux, or C:\jBASE5 on Windows, 
              but varies based on your installation of jBASE.

<!--       <br><br>
           <u>jBASE User ID</u>
              The jBASE User ID identifies the jBASE user name that is used to access the database account which houses
              your MultiValue software.  This value currently is not used.

           <br><br>
           <u>jBASE Password</u>
              This field contains the password for the dashboard database account.  This value currently is not used.
-->
           <br><br>
           <u>jBASE Account</u>
              This field contains the database account name that is used to house your application server software.  When
              initially configuring the software, use this field to set the account name. For jBASE installations, this is
              the name of the account directory. Do not enter a full path in this field.

           <br><br>
           <u>Account Parent Directory</u>
              This field should be filled out to the full operating system path of the parent directory which will contain the dashboard account directory.
              The dashboard software installation will create the dashboard account in this directory.

        </p>
    </li>
    <li id="database_optional">
        <h3 class="docs_sub_item">Optional Parameters</h3>
        <p>The "Optional Parameters" section includes options that may enhance the operation of your software but are not
           required for its operation.
<!--
           <br><br>
           <u>Working Directory</u>
              This field contains the initial working directory that is used for the software.  Typically, this can be set to
              any temporary storage directory or the installation directory of the application server software.
-->
           <br><br>
           <u>Segment Size</u>
              This field contains the maximum length of the data string that is sent to the MultiValue database during any
              request.  The default value for this field is 3000, but it can be adjusted up or down as needed.  Typically, this
              field would be adjusted down if you are experiencing any data loss with data inside the request URI.

           <br><br>
           <u>DB Retries</u>
              This field contains the number of times that the software will attempt to connect to your MultiValue database
              before giving up and displaying an error message.  A common reason that the system would not be able to connect
              to the database would be that the system has exceeded its licensed number of user sessions.  Configuring this
              parameter to a higher number would cause the system to attempt to get a user license multiple times per connection.

              Typically, this should be set to "3" or some other integer.
        </p>
    </li>
    <li id="database_install">
        <h3 class="docs_sub_item">Install Dashboard Software</h3>
        <p>
          The "Install Dashboard Software" section of this tab is used to install or re-install the core software package to your
          MultiValue database.  This section is typically only necessary during the initial installation process, however it could
          also be used as part of an upgrade process or re-initialization of the software.

<!--       <br><br>
           <u>root or Administrator Username</u>
              This field should be filled out to include the username of your "root" or "Administrator" user, or any user with full database privileges.

           <br><br>
           <u>root or Administrator Password</u>
              This field should be filled out to include the password for your "root" or "Administrator" user as configured above. 
-->
           <br><br>
           <u>Package Directory</u>
              This field should be filled out to include the system directory which contains the core software packages.  These
              packages were installed with your software and the correct directory will typically be already filled in.

        </p>
    </li>

</ol>
                                          ./mvappsvr/core/jb/dbconfig.html                                                                    0000644 0000000 0000000 00000013140 12571716373 015566  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <div class="database_setup">
    <form name="database_setup" id="database_setup" method="get">
    
        <div class="pipe">
            <input type="hidden" name="feature" value="database_setup">
            <input type="hidden" name="tab" value="database">
            <input type="hidden" name="submit_form" value="true">
            <table cellpadding="0">
                <tr>
                    <th>jBASE Path:</th>
                    <td><input type="text" name="dbbinary" id="dbbinary" value="[DBBINARY]"/><a href="javascript:showHelp('dbbinary_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
<!--             <tr>
                    <th>jBASE User ID:</th>
                    <td><input type="text" name="dbusername" id="dbusername" value="[DBUSERNAME]"/><a href="javascript:showHelp('dbusername_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>jBASE Password:</th>
                    <td><input type="text" name="dbpassword" id="dbpassword" value="[DBPASSWORD]"/><a href="javascript:showHelp('dbpassword_help', 'required_help_box');" class="info">More info</a></td>
                </tr> -->
                <tr>
                    <th>jBASE Account:</th>
                    <td><input type="text" name="dbaccount" id="dbaccount" value="[DBACCOUNT]"/><a href="javascript:showHelp('dbaccount_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>Account Parent Directory:</th>
                    <td><input type="text" name="dbacctpath" id="dbacctpath" value="[DBACCTPATH]"/><a href="javascript:showHelp('dbacctpath_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
            </table>
        </div>

        <div class="pipe">
            <h2 class="">Optional Parameters</h2>
            <table cellpadding="0">
<!--            <tr>
                    <th>Working Directory:</th>
                    <td><input type="text" name="dbworkingdir" id="dbworkingdir" value="[DBWORKINGDIR]"/><a href="javascript:showHelp('dbworkingdir_help', 'optional_help_box');" class="info">More info</a></td>
                </tr> -->
                <tr>
                    <th>Segment Size:</th>
                    <td><input type="text" name="maxrequest" id="maxrequest" value="[MAXREQUEST]"/><a href="javascript:showHelp('maxrequest_help', 'optional_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>DB Retrys:</th>
                    <td><input type="text" name="dbfails" id="dbfails" value="[DBFAILS]"/><a href="javascript:showHelp('dbfails_help', 'optional_help_box');" class="info">More info</a></td>
                </tr>
            </table>
        </div>
        <a href="javascript:saveDB();" class="save">Save Changes</a>                
        <br>
    </form>
</div>
            
[DBINSTALL]

<div class="database_install">
    <br><br>
            
    <form name="install_dashboard" id="install_dashboard" method="get">
        <input type="hidden" name="tab" value="database">
        <input type="hidden" name="feature" value="install_dashboard">
        <input type="hidden" name="submit_form" value="true">
        <div class="pipe">
            <h2>Install Dashboard Software</h2>
            <table cellpadding="0">
<!--            <tr>
                    <th>root or Administrator Username:</th>
                    <td><input type="hidden" name="dm_username" id="dm_username" value="[DM_USERNAME]"/><a href="javascript:showHelp('dm_user_help', 'install_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>root or Administrator Password:</th>
                    <td><input type="hidden" name="dm_password" id="dm_password" value="[DM_PASSWORD]"/><a href="javascript:showHelp('dm_pass_help', 'install_help_box');" class="info">More info</a></td>
                </tr> -->
                <tr>
                    <th>Package Directory:</th>
                    <td><input type="text" name="db_package" id="db_package" value="[DB_PACKAGE]"/><a href="javascript:showHelp('db_package_help', 'install_help_box');" class="info">More info</a></td>
                </tr>
            </table>
        </div>
        <a href="javascript:installDB();" class="save">Install</a>
        <div class="clear"></div>
    </form>
</div>

<script>
function validateDB(form){
    if (form.dbbinary.value == "") {
        alert("Missing required field!");
        form.dbbinary.focus();
        return (false);
    }
    if (form.dbaccount.value == "") {
        alert("Missing required field!");
        form.dbaccount.focus();
        return (false);
    }
/*  if (form.dbusername.value == "") {
        alert("Missing required field!");
        form.dbusername.focus();
        return (false);
    } */
    if (form.dbacctpath.value == "") {
        alert("Missing required field!");
        form.dbacctpath.focus();
        return (false);
    }
    return (true);
}
function saveDB(){
    document.database_setup.action = ""; //server side script location
    if(validateDB(document.database_setup)){
        document.database_setup.submit();
    }
}
function validateInstall(form) {
    if (form.db_package.value == "") {
        alert("Missing required field!");
        form.db_package.focus();
        return (false);
    }
    return (true);
}
function installDB(){
    document.install_dashboard.action = ""; //server side script location
    if(validateInstall(document.install_dashboard)){
        document.install_dashboard.submit();
    }
}
</script>
                                                                                                                                                                                                                                                                                                                                                                                                                                ./mvappsvr/core/jb/platform.conf                                                                    0000644 0000000 0000000 00000007714 13364666755 015643  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ;#############################################################################;
; jBASE Platform Definitions
;#############################################################################;  

[db_platform]

; Database platform type (should be same as core subdirectory name where platform files are located)
dbType = jb

; The following tokens are replaced by configuration settings and installation options when processing
; installation commands, installation data files, required file list, and the mvconnector command line.
; Most of these correspond to a "db..." setting or option, as defined below.
; [DBBINARY], [DBACCOUNT], [DBUSERNAME], [DBPASSWORD], [DBVME], [DBWORKINGDIR], [DBAPPNAME], [DBHOSTNAME]
; [DM_USERNAME], [DM_PASSWORD], [DM_ACCT_PASS], [DBACCTPATH]
; [DB_PACKAGE] - this is the full path to the directory containing the platform core files, including this 'platform.conf' file.
; [PACKAGE_FOLDER] - exactly the same as [DB_PACKAGE] except uses forward slashes for directory separator under Windows (d3).
; [DBCMDLINE] - the command line passed to the database server. This is formed internally and varies depending on the function.
;
; Installation commands can have optional parts, enclosed in { }. Within the curly brackets, there must be one
; token enclosed in [ ]. If the token is null, the entire part enclosed in { } is removed from the command. Otherwise
; only the curly brackets are removed. This allows using a command that has an optional password (or other parameter)
; to be written like {,[DM_ACCT_PASS]} where, the leading comma will be removed if DM_ACCT_PASS is null.


; Database installation commands (up to 9, executed in sequence). To feed data to the database command STDIN,
; use an 'echo' command and pipe it to the database command. On Linux, use 'printf', on Windows, use 'echo'.
; The install command line must be less than 2048 characters!

; create the account directory
install_command1 = "( umask 002 ; mkdir -p [DBACCTPATH]/[DBACCOUNT] ) 2>&1"
 
; run jbase PROC to install the package using jpq command
install_command2 = "( umask 002 ; cd [DBACCTPATH]/[DBACCOUNT] ; jpq [DB_PACKAGE]/MVDB.SETUP [DB_PACKAGE] ) 2>&1"

; List of files/directories that must exist before installation can begin
install_files = [DBBINARY],[DB_PACKAGE]/APP.INSTALLER,[DB_PACKAGE]/MVDB.SETUP,[DB_PACKAGE]/MVDB-FULL,[DBACCTPATH]

; mvconnector command line
dbCommand = "( umask 002 ; temp='[DBCMDLINE]' ; $temp <&0 ) 2>&1"

; mvconnector required parameters
dbRequired = dbBinary,dbAcctPath,dbAccount

; mvconnector environment variables (separate variables using commas; tokens may be used in the value for a variable)
dbEnvVars = "HOME=[DBACCTPATH]/[DBACCOUNT],JBCRELEASEDIR=[DBBINARY],JBCGLOBALDIR=$JBCRELEASEDIR,JBCDEV_BIN=$HOME/bin,JBCDEV_LIB=$HOME/lib,LD_LIBRARY_PATH=$JBCRELEASEDIR/lib,JBCOBJECTLIST=$HOME/lib,JEDIFILENAME_MD=$HOME/MD]D,JBCEMULATE=ap,JBASE_ERRMSG_ZERO_USED=2,JBASE_ERRMSG_NON_NUMERIC=2,JBASE_ERRMSG_DIVIDE_ZERO=2,PATH=$HOME/bin:$JBCRELEASEDIR/bin:$PATH"

; Full path to database command executable
dbBinary = "/opt/jbase/CurrentVersion"

; Account name where dashboard is installed
dbAccount = MVDB

; User name to log on to the dashboard account
dbUsername =

; Password for dashboard account user
dbPassword =

; Working directory path (QM, U2, JB)
; jBASE note: this variable is not referenced in dbconfig.html, so it will get
; copied as-is to dbc_database.conf, and when the database command line is
; constructed, the token substitution will take place. This is very important!
dbWorkingDir = "[DBACCTPATH]/[DBACCOUNT]"

; Path to parent directory which will contain the dashboard account directory (QM, JB, U2)
dbAcctPath = /home

; Maximum length of command line sent to database
maxRequest = 1000

; Number of times to retry database requests
dbFails = 3

; Mode for passing query string (0 = command line, otherwise pipe to stdin - newline is LF=1, CR/LF=2, CR=3)
dbVarMode = 1

; Root or administrator user name
dm_username = 

; Root or administrator password
dm_password = 
                                                    ./mvappsvr/core/qm/                                                                                 0000777 0000000 0000000 00000000000 13364666755 013165  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/core/qm/dbhelp.html                                                                      0000666 0000000 0000000 00000001675 12534142432 015275  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <div class="help_box" id="required_help_box">
    <h3>More Info</h3>
    <div id="dbbinary_help" class="help">The path to the QM executable.</div>
    <div id="dbaccount_help" class="help">The name of the QM account that will hold your software.</div>
</div>

<div class="help_box" id="optional_help_box">
    <h3>More Info</h3>
    <div id="dbworkingdir_help" class="help">The working directory used by the app server.</div>
    <div id="maxrequest_help" class="help">The maximum number of characters to be issued in a single QM request.</div>
    <div id="dbfails_help" class="help">The number of times to retry on a failure to connect to QM.</div>
</div>

<div class="help_box" id="install_help_box">
    <h3>More Info</h3>
    <div id="db_acct_path_help" class="help">The parent directory in which the dashboard account directory will be created.</div>
    <div id="db_package_help" class="help">The path to the installation package files.</div>
</div>
                                                                   ./mvappsvr/core/qm/MVDB-FULL                                                                        0000644 0000000 0000000 00005531740 13674161114 014372  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   001161RSS.BP0c00000ECSUB.TEMPLATE.SEL0c2SUBROUTINE SUB.XXX.SEL(VARS,VALS,FEED,F.FILE,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*OPEN "FILE" TO F.FILE ELSE STOP 201, "FILE"*XLINE = 'SSELECT FILE .... WITH PARAMS ...'EXECUTE XLINE CAPTURING JUNKRETURN0002EESUB.RE.SEL0c2SUBROUTINE SUB.RE.SEL(VARS,VALS,FEED,F.RUNTIME.ERRORS,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*FEED.TITLE = RSS$FEED.REC<1>LOCATE "account" IN VARS SETTING POS THEN  account = VALS<POS>  FEED.TITLE := '(Account: ':account:')'END ELSE account = ""LOCATE "user" IN VARS SETTING POS THEN  user = VALS<POS>  FEED.TITLE := '(User: ':user:')'END ELSE user = ""RSS$FEED.REC<1> = FEED.TITLE*OPEN '','RUNTIME-ERRORS' TO F.RUNTIME.ERRORS ELSE STOP 201, 'RUNTIME-ERRORS'XLINE = 'SSELECT RUNTIME-ERRORS BY-DSND DATE BY-DSND TIME'IF account # "" THEN  XLINE := ' WITH USERPIB = "[ ':account:'"'END ELSE IF user # "" THEN  XLINE := ' WITH USERPIB = "[ ':user:' ]"'ENDXLINE := " SAMPLING 100"EXECUTE XLINE CAPTURING JUNKRETURN0001F2RSS.DATA.INC0c2DIM RSS.DATA(20)*EQU RSS$TITLE       TO RSS.DATA(1)EQU RSS$LINK        TO RSS.DATA(2)EQU RSS$AUTHOR      TO RSS.DATA(3)EQU RSS$DATE        TO RSS.DATA(4)EQU RSS$TIME        TO RSS.DATA(5)EQU RSS$DESCRIPTION TO RSS.DATA(6)*EQU RSS$FEED.REC    TO RSS.DATA(14)EQU RSS$USER1       TO RSS.DATA(15)EQU RSS$USER2       TO RSS.DATA(16)EQU RSS$USER3       TO RSS.DATA(17)EQU RSS$USER4       TO RSS.DATA(18)EQU RSS$USER5       TO RSS.DATA(19)EQU RSS$USER6       TO RSS.DATA(20)0000EESUB.FEEDS.SEL0c2SUBROUTINE SUB.FEEDS.SEL(VARS,VALS,FEED,F.RSS.FEEDS,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE STOP 201, 'RSS.FEEDS'*EXECUTE 'SSELECT RSS.FEEDS # "FEEDS"' CAPTURING JUNKRETURN000196SUB.FEEDS.ITEM0c2SUBROUTINE SUB.FEEDS.ITEM(VARS,VALS,F.RSS.FEEDS,FEED.ID,FEED.REC,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*RSS$TITLE = FEED.REC<1>RSS$LINK = "RSS.MAIN?feed=":FEED.IDIF FEED.REC<2> # "" THEN  PARAMS = FEED.REC<2>  IF PARAMS[1,1] # "&" THEN PARAMS = "&":PARAMS  RSS$LINK := PARAMSENDRSS$AUTHOR = "RSS Feed"RSS$DATE = DATE()RSS$TIME = TIME()RSS$DESCRIPTION = FEED.REC<3>RETURN0007FCSUB.RE.ITEM0c2SUBROUTINE SUB.RE.ITEM(VARS,VALS,F.RUNTIME.ERRORS,ITEM.ID,RECORD,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*RSS$TITLE = ""RSS$LINK = ""RSS$AUTHOR = ""RSS$DATE = ""RSS$TIME = ""RSS$DESCRIPTION = ""*DATA RECORD<2,1>EXECUTE "PRINT-ERR DM,MESSAGES, ":RECORD<1>:" (S" CAPTURING ERR*CONVERT @AM TO " " IN ERRERR = OCONV(ERR,'MCP')ERR = TRIM(ERR)RSS$TITLE = OCONV(FIELD(ITEM.ID,'*',1),'D0/'):" @ ":OCONV(FIELD(ITEM.ID,'*',2),'MTS'):": ":RECORD<4>:" ":ERR*RSS$AUTHOR=RECORD<3>*RSS$DESCRIPTION = 'Pib /User: ':RECORD<3>:'<br />'STACK = ""FOR N = DCOUNT(RECORD<5>,@VM) TO 1 STEP -1  STACK := RECORD<5,N>  IF STACK # "" AND N # 1 THEN STACK := ' --> 'NEXT NIF RECORD<5> # '' THEN RSS$DESCRIPTION := "Stack: ":STACK:'<hr />'MD = FIELD( RECORD<3>, ' ', 3 )** Try and find the source code to include in the feed.*SREC = ""OPEN MD:",MD," TO F.MD THEN  FNAME = ""  READ CREC FROM F.MD, RECORD<4> THEN    IF CREC<1> = "VR" THEN ;* This is a catalog pointer, file name is in field 4      FNAME = FIELD(CREC<4>,' ',1)    END ELSE IF CREC<1> = "PQ" THEN      IF FIELD(CREC<2>, ' ', 1 ) = "HRUN" THEN        FNAME = FIELD( CREC<2>, ' ', 2 )      END    END  END  IF FNAME # "" THEN    OPEN MD:",":FNAME:"," TO SFILE THEN      READ SREC FROM SFILE, RECORD<4> ELSE SREC = ""    END  ENDENDIF SREC # "" THEN  CALL SWAP(SREC,'&','&amp;')  CALL SWAP(SREC,'<','&lt;')  CALL SWAP(SREC,'>','&gt;')  LINENO = RECORD<2,1>  IF LINENO MATCHES "1N0N" THEN    START.LINE = LINENO - 10    IF START.LINE < 0 THEN START.LINE = 1  END ELSE LINENO = 1 ; START.LINE = 1  END.LINE = LINENO + 10  RSS$DESCRIPTION := '<pre>'  FOR LINUM = START.LINE TO END.LINE    LINE = LINUM "R#4":" ":SREC<LINUM>    IF LINUM = LINENO THEN LINE = '</pre><b>':LINE:'</b><pre>'    RSS$DESCRIPTION := LINE:CHAR(10)  NEXT LINUM  RSS$DESCRIPTION := '</pre>'END ELSE  RSS$DESCRIPTION := 'Unable to open source code for ':RECORD<4>:' in account ':MDEND*RSS$DATE = FIELD(ITEM.ID,'*',1)RSS$TIME = FIELD(ITEM.ID,'*',2)*RETURN0000E1SUB.TEMPLATE.ITEM0c2SUBROUTINE SUB.XXX.ITEM(VARS,VALS,F.FILE,ITEM.ID,RECORD,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*RSS$TITLE = ""RSS$LINK = ""RSS$AUTHOR = ""RSS$DATE = ""RSS$TIME = ""RSS$DESCRIPTION = ""*RETURN006E51DICT_DASHBOARD.BALANCES0c0000020*CURRENT.NET.INCOME.STATS0c199900001C*LAST.UPDATE.AR0c119113113100001F*LAST.UPDATE.SALES0c119097194000003E*CURRENT.AP.STATS0c1423319241590398927280931250503169201000002ADEBUG0c1READ314223005483206198389200001C*LAST.UPDATE.AP0c119113113100001C*LAST.UPDATE.ALL0c1UPDATING000024*LAST.UPDATE.NET.INCOME0c119113113100001E**LAST.UPDATE.ALL0c1191131131006CBD*CURRENT.AR.STATS0c114560890843071741194510422787790138344612016201720182019202036015203171161151422300548320619813973235509172233548101395385164696370847879531219774039141932813118439101515435988140169672622764976385961979776243395735633981366076359266443141739321371082983421997626385139191577600893225799874558530587911002831044901802010031636438139934238540935140144850748349747242343943941742042845745147745945648141552450947752038749845516142125826659488757142751552545881502172726122803193629216560167136903585464649433786660648167835910164720249247515103226424798771241101583062896Du monde entier2927113415302442Real Computers30182549HUNGRY HOWIES PIZZA280124812761Bobs Used CyclesIntercom ProductsBetter Computing2622Drachenblut Delikatessen12922374Comp ConsultingQue DeliciaElectronic Company2891Berglunds snabbkop258914022965Cyber ProductsFrankenversandPiccolo und mehr1423290227042632212816191795288628711140102111223023Queen CozinhaFolies gourmandesOnes & Zeros Inc.17032713Computer TechVictuailles en stockMemory Capturers1416Disk Products28872953Ajax Computer Electronics166028632908Comp Products11232996TRGGaleria del gastronomoJoe's Computers2935USA ComputersGodos Cocina Tipica2449Bottom-Dollar MarketsBakers Goods255216771117Computer TipsEastern ConnectionAround the HornData Comp3002233527242758160823983028ABC Electronics CorpHanari CarnesFranchi S.p.A.29972809The Big Cheese2915Wartian HerkkuChop-suey Chinese28432969White Clover MarketsVins et alcools Chevalier2970299112062727For Computers Inc.Bills Shoes & Gopeds27592308HILARION-AbastosWellington Importadora226312513015Classic ComputersWolski Zajazd271025742827293730191920Better BytesBlauer See DelikatessenData Net15171012283029072959Software Inc130815991103168415442778288513811010110514341032GROSELLA-RestauranteBon app'300922931252Pericles Comidas clasicas2854170528032947Longo ToyotaBest Computer Company19582967Specialites du monde20472814Alfreds FutterkistePrinter Products2497Computers N More2394272210721076Logical Computers2974Save-a-lot Markets2513Net Connect2882Bits and Bytes IncComputer Sitters135113502560Die Wandernde Kuh21152554Richter Supermarkt205625312784134426241653179918292940290127331569Supremes delices2958296627083012Ottilies KaseladenWhite HouseTortuga Restaurante2607297916051219Great Lakes Food Market25682465298610782648292028671152290615861106France restauration1058151129422516254524432982Gourmet Lanchonetes294328313029Computers Inc.Systems30322456North/South2628Princesa Isabel Vinhos1214Old World DelicatessenErnst Handel2651295013723033301428942931303129621290259628952459300429441556211327573034203527032929303512651469Ricardo Adocicados102410541358121815642690303625212933290025323037B's Beverages3024280630413038141113071119212612382538136627442406304027931452118417802434Antonio Moreno Taqueria3039Consolidated Holdings148030072313304630473048141930503053305430553056141330573058304210302670Familia Arquibaldo1382255811573061306330643065306730693070Hungry Coyote Import Stor2837171730713075Data Bits300028551155129930431592292523593044Modem Products3076194330783080Wilman Kala12113051308230593083308610972782308727833088308917753077306812891171309230932095307230731057138830953096309730982571296030743099Let's Stop N Shop31001034176224051965ABC Computers3101310331043105310631073081140131083109311031112880311210993114308430851257306628562859104715413011LINO-Delicateses3091306231213122312331243125126931273126312831292941313131323102309420893137313631133006313931401287314131421415246226001540314431452694299510833146311631493150315131173118Comercio Mineiro31533154315631153157Cactus Comidas para lleva31583159139131601050311931623163316431302387Computer Fancy3166129318593167312011833138316831713170317431433176318031812994Computer Town3148317831823183318431851453102810151651LILA-Supermercado31883191319331953196300513343179319932003201320232083209313532113212321332143215285710403161316528773169137431722740293626563219322032213177322232231261Computers R Us280032253227322832303231323231893190119931923194319732333235323832391046Paris specialites32403241320432053206320732423246321032473248319831733254325732583262321632633265286532173175FISSA Fabrica Inter. Salc325332673268327232731486101332743277Vaffeljernet29733280322428223281328232833285328632293287299332343284Computer TrainersBolido Comidas preparadas3237324332443245324932902664325032511087Romero y tomillo32923293325532563259329132941060326117453264329732983260181832693270327128733302The Cracker Box3186327532763303326632263278327911823305330731333312331326893315Lehmanns Marktstand331633173296Better ConnectionNumber One in Computing331833013322329523693321332328783324332532993300330624483304332633273309332933103330333133322938331133363337334033423344334533492031Comp Data Inc.33513350335233533354332033193357335833603328335933633364336533333366336733351118336833383371334333723373249133743022337533763377337911253381338216793384338633553387Oceano Atlantico Ltda.33832729The Only Computers3391339033623392339333953396337033973398339933693400340233783403340433803385340634072105338834083389Rancho grande34123415128634173419340133942879342434251764340534271368342834293432160134353434343610743409341027743438343934403441341834431198344434453446344734143448Island Trading34133416342023373452100634263431345334333454Future In Computing33473455Sante Gourmet264410953442346234633468346934712592267734493473345028293476Disks N More3477347934803481Split Rail Beer & Ale34843485346534873489345734903467264734613459349234942817346434963499Simons bistro346635003501350434743475Future Computers21553505350634823470341135083509347227012325349135101490Lazy K Kountry Store349335143502Tradicao Hipermercados35153516351735182819351135193521349513933503352235243526352835293530Reggiani Caseifici350734223532Toms Spezialitaten352035343536353735403512115935433545348635133548Computers Etc.355635513553355435583559166735603561Maison Dewey35632502356435273525356635673568301635383539127035733574Blondel pere et fils354235233547QUICK-StopSeven Seas Imports3544357935803550355212433583358435883586358735903589297535923593258335553549359535963598359936003569357135723602360314763575237035653605360636073610357835823611358535763013361536163591359435973617361836221598360436013624362636273581Rattlesnake Canyon Grocer3629363036093608361236133634363536313636363936403641364236433644364536463647364836493650362136523619363736253655Computer Portables Inc.36583628Koniglich Essen36613662366522543666366736323675367636683677Mere Paillarde36793680368136823683368436853686368736883689369036913692369336943695369636973698365336993700370137023704363837053706370737083709371137123713371436543716371737183719372037221407365637233726372737283729365936633664373127953734373337363738373937413742374437463743366936702000367136723673367437511082367837533754375537563757375836573710371537603761376237633764376537213725376737683769372437702912Morgenstern Gesundkost377137723773Lonesome Pine RestaurantLa corne d'abondance3774373737783745374837473752378037833750378437853786378837913790111425203766379437963798Computer Warehouse3793377537491291Memory Plus Inc.37762252380138023777380437813806380737823810378738123789381338153792382136143822375938243823379537993827382838293830Computers Galore38323833383438033835380538373836383838402099380838113841288138433844381738143740La maison d'Asie38193816382038473848380938313826385430083825384938563857383938533860Laughing Bacchus Wine Cel38623864380038423846384538683869385038703852Ana Trujillo Emparedados3871387238743858Secure Computers387638753859388038833884386338863887388838893891386538923873389538963877387938973881385538823898Furia Bacalhau e Frutos dMagazzini Alimentari Riun126339003901389939043905390639073909391038943890173339133912391438673866Hungry Owl All-Night Groc3893388539163918391939033920Centro comercial Moctezum3908117327063878134839172500005847741433950510000250000500000750000436147808920015840016055016080344854231045482908400234862711531510000007488798710033505010699601006005504369963465284121400296015836400465005726351734075433519715625485577374000390050712600635027887500259745885282305506111000032540156656801788761251480008656020000006300021000206250175683225004437002521922037608900855100157993238400228490268300970025250030163594755040700577500178503200100000016060054745039354356850124225010135501030532989753200712500250000301582350000850000510001020000691933795185000279347323002300408000386003980015251019900635452182000595001500139009146382507400036817552220001283175484035118000299004818891703750120440719607400139003000001500005833299116104310414086102241465411715224824297117252317933209918242925255111472576241164055422179541311661130851522925427232511255529258654835330252424248322424541478614621722252225202723913423188992424117532255242224222423942201834552083634178147131111928954542514135165136751532093215800180191551216584204394102775228881421083386266104113473235430207012161533318622993105111235348791196732385310611094275934622814671447655351566174116714137139736301964581404714809126917194304192822193165586155124674115672090236607662383928142847252636173797135964911383564787536887636616247739550588912185269118660108197129514113553031080949191126225960171221371669457210124213903009566111905113231676249116715541122133487727775722284458159200714494057587016934017544932208525375198106034636424092452137112173296190212585275145753665037151520290563425505175242938442254159218104148429119215799342198226413231194601472962093723816710738201264317296472139285816627998871342721888228232907579102127443922457436337326136540109121122117010651184752121551318816241283881013811741515936927764639439144461348162911284511711105376202222163354007893661842861451051642087106206718149492541264444158438692172753766244129461218333215811111114517915812151921217373273151122122931146178177426413775219152912116010269127935611091639871140512407204122112121734114752034165421019281919778151371414141418232394014914994880469112272911881313131347911201037106819930109101809361012399794716901019244852248921212123225703151211502132010993514999920191264103059139556101599247391491010386543192381997291074815217243928149278740918999947718992598751416336273529341111192487942245101810104026036131351625599983314199228284010559187068935910927311416154109199493101893313198139937910027251184914718227214212060152964886103619101322513918794413229189607376569371973749803319611699239467945925012997130515010101855922153851043729310183918104118191914099910252275959101898851099375406109178772010289277959303799963999122660193199994143253203651301179799134116891088610925828538970224148184202972413994003311440181002813227109966229125613610199997599928101301251412831872718995857449688379100103353099997352181322310202117991870932139233089156241311855155149371246391895933618899318309916520443111101701657899108418912962493713517829999996631152953936912291866929101891798223925993296710106428387915374991021111107399573415174106152296992310281099917274301215611629934952436610612880360281421933232591310436412031339181820515091012154816113513969989191399109144210121117179916307596439305913251218911861595441181394213918199282013919332010109999915229915991024927201312101010109999231095679101691096702119135419999271910963883988197591097856291919109101025119191222911394791322081818999544995187936339109454210959311847999101499109279895435249813369471049999152935913691699992318910233681311311099839155101132791888749111181872693020991085219999119914491813424218919109991028151069781266010109991099117791391112259999141351435103542216711519311366951762104152431133011728149524744201427662542551184264653738455310414078948654232233014864654458588253365237374817136717784913139913235412871319423119514352831561877277682542313840741710384268917404511313865106642321415233813108951299251293726812042206546356381125017263201116288118282937141245362773182011371531060151318144236102619121754117711125162123613661155138284932562123711418614422101112131443474112310126231551722317113131851272104439678611621321411291116131117332023391251115381752151741158215512845116236481189225461818912115017126751211771311112211131262823911121111131214113126111614131133341212371411111811154211119111122412731115111171111120198101121224111131133112111139211113255412221121513101211361611101113291161413125131411131213112159213232114111311271311121212231111311123211121231121211433111111918326469112102121118111242322221111252131211411114411741131211141113111122221111216143411111141216114321124134192111381212232311132111111211131113911619122221202114312213111113211153112212112815211231122212134211201113291114311162111111113171111113142121411212431121181111211112151821131111122113521211113111188111413111134416211211112111113321112216311142112361121111114111111111011111711010211611442111112213211112111111119111111111111111111111122111111024112111132111131112111145122111121221213141412211511111111111227313111211111131116122151171111214111211111111951411612171123311221152111141112111121212121111141111232111111111111111111111111582210675557814361401043104161403542422447109163244104384824226202110190344316368592922762955125971531521649021825576973236203051753151283050207543961822248819254416341632115301573764837019951173170115574894918416223165479134631512182046216305533818746391813081633445612226251231458732151784213521699113377552917936214011019617863738213835229312432862949241813921140674755414112210831072417297147698851821365652171131401731022741504898152011332091010505836513555890896124523109412173399326364434304427601033653225599213422940403144322125222833484942942029421066211131341919818586720826361968271698013616762977155961119972692011852191199424291010999102815106978126601010999109911779139111225999914135114112492111110266311111424241332431776173742221416209234223211322636262242153521158311042116221211472231111551222121213125141341234211151212211312211114111311142304121111111142213516345211132111511111271115311423212315111153331113121112231331311311611122121233231311265252113821111212212114122616322241111131142121111111141111232111111111111111111111111Cyber ProductsSoftware IncComputer WarehouseBits and Bytes IncComputers Etc.Future In ComputingComp ProductsLogical ComputersABC ComputersComputers Inc.SystemsBetter BytesSecure ComputersOnes & Zeros Inc.Modem ProductsIntercom ProductsMemory Plus Inc.Better ConnectionNet ConnectComputer TipsMemory CapturersComp Data Inc.Future ComputersNumber One in ComputingComputers R UsJoe's ComputersComputer FancyDisk ProductsPrinter ProductsData BitsDisks N MoreFor Computers Inc.Electronic CompanyUSA ComputersData NetBest Computer CompanyThe Only ComputersData CompComputer SittersComputer Portables Inc.Alfreds FutterkisteComputers N MoreReal ComputersComputer TownClassic ComputersComputer TrainersBetter ComputingComp ConsultingComputer TechComputers GaloreAna Trujillo EmparedadosAntonio Moreno TaqueriaBerglunds snabbkopBlauer See DelikatessenBlondel pere et filsBolido Comidas preparadasBon app'Bottom-Dollar MarketsB's BeveragesCactus Comidas para llevaChop-suey ChineseComercio MineiroConsolidated HoldingsDrachenblut DelikatessenDu monde entierErnst HandelFamilia ArquibaldoFISSA Fabrica Inter. SalcFolies gourmandesFrankenversandFrance restaurationFranchi S.p.A.Galeria del gastronomoEastern ConnectionGodos Cocina TipicaGourmet LanchonetesGreat Lakes Food MarketGROSELLA-RestauranteHanari CarnesNorth/SouthAround the HornHILARION-Abastos2497Ottilies Kaseladen80892004855773368175532540152793473235000023486272305506228490220000001734075170375016080341579932143395012831751242250111000010699601045482103053210200001013550100000010000009475509084008875008551008500008364007500007488797156257126007125006996346656806354526350275885285847745775005726355474505100005000004854234840354818894437004361474335194080003935433900503350503225003016352960152525002521922500002500002062502037601606001605501584001480001214001153151006008710086560761257400065284630005504346500259741788Drachenblut DelikatessenComp ConsultingFuture In ComputingComercio MineiroIntercom ProductsIsland TradingKoniglich EssenNumber One in ComputingLa corne d'abondanceFuture ComputersLogical ComputersEastern ConnectionMemory Plus Inc.Computers Inc.SystemsMemory CapturersComputers GaloreBolido Comidas preparadasData NetBetter ConnectionFolies gourmandesLa maison d'AsieFrance restaurationComputers Etc.Godos Cocina TipicaComputer TechComputer SittersBest Computer CompanyBetter ComputingLaughing Bacchus Wine CelCyber ProductsLazy K Kountry StoreHanari CarnesAna Trujillo EmparedadosSecure ComputersLehmanns MarktstandLet's Stop N ShopBerglunds snabbkopGourmet LanchonetesLILA-SupermercadoLINO-DelicatesesGROSELLA-RestauranteDu monde entierLonesome Pine RestaurantBlondel pere et filsHungry Coyote Import StorPrinter ProductsMagazzini Alimentari RiunFuria Bacalhau e Frutos dComputer TrainersABC ComputersNet ConnectOnes & Zeros Inc.Maison DeweyMere PaillardeErnst HandelAlfreds FutterkisteElectronic CompanyComputer WarehouseMorgenstern GesundkostDisks N MoreAround the HornReal ComputersData BitsNorth/SouthFor Computers Inc.Joe's ComputersThe Only ComputersOceano Atlantico Ltda.Cactus Comidas para llevaModem ProductsFamilia ArquibaldoAntonio Moreno TaqueriaOld World DelicatessenSoftware IncClassic ComputersHILARION-AbastosBottom-Dollar MarketsFISSA Fabrica Inter. SalcComputer Town1859Computer FancyBon app'Chop-suey ChineseGaleria del gastronomoDisk ProductsFrankenversandB's BeveragesComputer TipsComputers N MoreData CompFranchi S.p.A.Bits and Bytes IncConsolidated HoldingsBlauer See DelikatessenComp Products2521USA ComputersOttilies KaseladenBetter Bytes2497Great Lakes Food Market10431041391330299272239217208188179179178152152147147147146146131130117117117116116116111102999992898686868583837658555555555454545454545342424040363434333329292929252525252525252525252524242424242424242423232220181311118776541Comercio MineiroParis specialitesDrachenblut DelikatessenThe Cracker Box257.9233.392.670.731.536.1104.351.88.810.854.230.4000257DICT_PORTAL.SALES0c0000033CLOSE.DATE.YMO0c1A0A;1(DY):1(D2-)(G-1)R1000002BCLOSE.DATE.MM0c1A1CLOSE MONTHDMR800002CCLOSE.DATE.YM0c1A0A;1(DY):1(DM)R10000028CLOSE.DATE0c1S1CLOSE DATED2-R8000022REP.NAME0c1A5Rep.NameL2500002CCLOSE.DATE.YYYY0c1A1CLOSE DATEDYR800001APIPE0c1A0 F;C|L1000045GROSS.PROFIT0c1A0gross profitMD2A;N(EXT.AMT)-N(EXT.COST)R10000019BRANCH0c1A13L15000019REGION0c1A14L15000026EXT.AMT0c1A8Ext.AmountMD2R10000025EXT.COST0c1A9Ext.CostMD2R10000018CNT0c1A0F;C1R50000E2DICT_PORTAL.AP0c0000026DATE.PAID0c1A8Date PaidD2-R8000029INV.AMOUNT0c1A6Inv.AmountMD2R13000025DUE.DATE0c1A20Due.DateD2-R8000024BALANCE0c1A50BalanceMD2R1300001APIPE0c1A0 F;C|L100015EDICT_MVDB.WIDGET.TYPES0c000001ATYPE0c1A1TYPEL15000018SWF0c1A2SWFL15000020HANDLER0c1A3HANDLERL1500001AICON0c1A4ICONL2500001ADESC0c1A6DESCL3000001710c1A1TYPEL1500001720c1A6DESCL3000001730c1A4ICONL2500001CGROUP0c1A5GROUPL15000021INACTIVE0c1A7INACTIVEL1000C72MVDB.WIDGET.TYPES0c0000043FC2DPIE0c2FC2DPIEPie2DFCPIEpie_widget_icon.jpgPIE2D Pie Chart00005CSPARKCOLUMN0c2SPARKCOLUMNSparkColumnFWSPARKspark_widget_icon.gifFWSpark Column Chart1000055VBULLET0c2VBULLETVBulletFWBULLETbullet_widget_icon.gifFWVertical Bullet Chart1000054SPARKLINE0c2SPARKLINESparkLineFWSPARKspark_widget_icon.gifFWSpark Line Chart1000057HBULLET0c2HBULLETHBulletFWBULLETbullet_widget_icon.gifFWHorizontal Bullet Chart100004AFCCOLUMN3D0c2FCCOLUMN3DColumn3DScol_widget_icon.jpgLC3D Column Chart00005DFCMSCOLUMN3D0c2FCMSCOLUMN3DMSColumn3DMcol_widget_icon.jpgLC3D Multi-Series Column Chart000039TABLE0c2TABLETABLEtable_widget_icon.jpgTable Widget000060HLINEARGAUGE0c2HLINEARGAUGEHLinearGaugeFWGAUGElinear_widget_icon.jpgFWLinear Gauge Chart1000045FUNNEL0c2FUNNELFunnelFWFPfunnel_widget_icon.gifFWFunnel Chart1000061SPARKWINLOSS0c2SPARKWINLOSSSparkWinLossFWSPARKspark_widget_icon.gifFWSpark Win/Loss Chart100005BTHERMOMETER0c2THERMOMETERThermometerFWGAUGEtherm_widget_icon.jpgFWThermometer Chart100004APYRAMID0c2PYRAMIDPyramidFWFPpyramid_widget_icon.jpgFWPyramid Chart1000060ANGULARGAUGE0c2ANGULARGAUGEAngularGaugeFWGAUGEangle_widget_icon.jpgFWAngular Gauge Chart100003AUSAMAP0c2MAPMAPmap_widget_icon.jpgMAPUSA Map Chart1000043FCAREA2D0c2FCAREA2DArea2DSarea_widget_icon.gifLC2D Area Chart000051FCMSBAR2D0c2FCMSBAR2DMSBar2DMbar_widget_icon.gifLC2D Multi-Series Bar Chart000067FCSTACKEDCOLUMN2D0c2FCSTACKEDCOLUMN2DStackedColumn2DMcol_widget_icon.jpgLC2D Stacked Column Chart000059FCDOUGHNUT2D0c2FCDOUGHNUT2DDoughnut2DFCPIEdonut_widget_icon.jpgPIE2D Doughnut Chart00003ATEXT0c2TEXTTEXTtext_widget_icon.pngPreformatted Text000052CYLINDER0c2CYLINDERCylinderFWGAUGEcylinder_widget_icon.jpgFWCylinder Chart1000054FCMSAREA2D0c2FCMSAREA2DMSAreaMarea_widget_icon.gifLC2D Multi-Series Area Chart000034HTML0c2HTMLHTMLhtml_widget_icon.pngHTML Widget00003AFCLINE0c2FCLINELineSline_widget_icon.gifLCLine Chart00004DFCMSLINE0c2FCMSLINEMSLineMline_widget_icon.gifLCMulti-Series Line Chart000043FC3DPIE0c2FC3DPIEPie3DFCPIEpie_widget_icon.jpgPIE3D Pie Chart000045VLED0c2VLEDVLEDFWGAUGEled_widget_icon.jpgFWVertical LED Gauge1000047HLED0c2HLEDHLEDFWGAUGEled_widget_icon.jpgFWHorizontal LED Gauge100004AFCCOLUMN2D0c2FCCOLUMN2DColumn2DScol_widget_icon.jpgLC2D Column Chart00003EFCBAR2D0c2FCBAR2DBar2DSbar_widget_icon.gifLC2D Bar Chart00005DFCMSCOLUMN2D0c2FCMSCOLUMN2DMSColumn2DMcol_widget_icon.jpgLC2D Multi-Series Column Chart000067FCSTACKEDCOLUMN3D0c2FCSTACKEDCOLUMN3DStackedColumn3DMcol_widget_icon.jpgLC3D Stacked Column Chart00005BFCSTACKEDBAR2D0c2FCSTACKEDBAR2DStackedBar2DMbar_widget_icon.gifLC2D Stacked Bar Chart00003CGANTT0c2GANTTGanttgantt_widget_icon.gifFWGantt Chart1000042FAILED0c2FAILEDFAILEDtext_widget_icon.pngPreformatted Text1000033MAP0c2MAPMAPmap_widget_icon.jpgMAPMap Chart100003EBULB0c2BULBBulbFWGAUGEbulb_widget_icon.jpgFWBulb Gauge1000061FCSTACKEDAREA2D0c2FCSTACKEDAREA2DStackedArea2DMarea_widget_icon.gifLC2D Staacked Area Chart00FF47WOBJ.BP0c0000B9CWOBJ.PARSEOBJECT0c2SUBROUTINE WOBJ.PARSEOBJECT(JSTR,INDEXPOS,PARSEOBJECT)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json object************************************************************************INCLUDE WOBJ.INCLUDE*IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT - STARTING"*PARSEOBJECT=""CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*IF JSTR[INDEXPOS,1] <> "{" THEN    PSERRORS<-1> = "Invalid Object at position ":INDEXPOS:" : ":JSTR[INDEXPOS,1]    RETURNEND*LEN.JSTR = LEN(JSTR)INDEXPOS+=1**JSONOBJECT(JSONOBJECT$NODECNTR)+=1NODEID=JSONOBJECT(JSONOBJECT$NODECNTR); * WE NEED TO STAY AT THIS NODEID POSITIONJSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEID>="O"; *SET AS OBJECTIF WOBJ.DEBUG THEN    PRINT "PARSEOBJECT: SETTING NODETYPE NODEID:":NODEID:" = O"END*LOOP    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    C=JSTR[INDEXPOS,1]    BEGIN CASE        CASE C="}"            INDEXPOS+=1            IF WOBJ.DEBUG > 1 THEN PRINT "PARSEOBJECT: EXIT CHAR }"            EXIT        CASE C=","            INDEXPOS+=1            CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)        CASE INDEXPOS > LEN.JSTR            PSERRORS<-1>="Missing '}': ":JSTR[LEN.JSTR-20,20]            EXIT    END CASE    *    * ADD KEY/VALUE PAIR    *    JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>+=1    PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" PARSEOBJECT CALLING PARSEKEY"    CALL WOBJ.PARSEKEY(JSTR,INDEXPOS,SKEY)    JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEID,PARTPOS>=SKEY    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" BACK FROM PARSEKEY: ":SKEY[1,10]    *    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" CALLING PARSEVALUE"    CALL WOBJ.PARSEVALUE(JSTR,INDEXPOS,PARSEVALUE)    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" BACK FROM PARSEVALUE N=":NODEID:" P=":PARTPOS:" T=":PARSEVALUE<1>:" F=":PARSEVALUE<2>    BEGIN CASE        CASE PARSEVALUE=""            PSERRORS<-1>="Invalid value syntax for node ":SKEY            RETURN        CASE PARSEVALUE<1>="A" OR PARSEVALUE<1>="O"            * ARRAY            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEID,PARTPOS>=PARSEVALUE<2>        CASE 1            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            V=PARSEVALUE<2>            IF INDEX(V,LF,1) OR INDEX(V,CR,1) THEN                V=OCONV(V,"MX0C")                E="H"            END ELSE                E="A"            END            JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEID,PARTPOS>=V            JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEID,PARTPOS>=E    END CASEREPEATPARSEOBJECT="O"PARSEOBJECT<2>=NODEIDIF WOBJ.DEBUG THEN PRINT "PARSEOBJECT - END OF ROUTINE"RETURNEND0003E3WOBJ.INCLUDE0c2************************************************************************* Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: WOBJ includes for json library************************************************************************COMMON /MVIWOBJ/ PSERRORS,JSONOBJECT(20),WOBJ.DEBUG,PRETTIFY,PRETTIFYCR,INDENT.DEPTH*EQU CR TO CHAR(13), LF TO CHAR(10), TB TO CHAR(9), BS TO CHAR(8), FF TO CHAR(12)NL = CR:LF*EQU INVALID_JSON TO 1EQU INVALID_OBJECT TO 2EQU INVALID_ARRAY TO 3EQU INVALID_BOOLEAN TO 4EQU INVALID_NULL TO 5EQU INVALID_KEY TO 6*EQU JSONOBJECT$NODECNTR TO 2* ARRAY OF NODESEQU JSONOBJECT$NODETYPE TO 3EQU JSONOBJECT$NODELENGTH TO 4EQU JSONOBJECT$NODEPARTS.KEY TO 5EQU JSONOBJECT$NODEPARTS.TYPE TO 6EQU JSONOBJECT$NODEPARTS.FLINK TO 7EQU JSONOBJECT$NODEPARTS.BLINK TO 8EQU JSONOBJECT$NODEPARTS.ENCODING TO 9EQU JSONOBJECT$NODEPARTS.VALUE TO 10* END OF ARRAY OF NODES000248WOBJ.NUMBER.TOSTRING0c2SUBROUTINE WOBJ.NUMBER.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert json number to string************************************************************************INCLUDE WOBJ.INCLUDE*CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)*CALL WOBJ.ENCODE(VALUE,OUT.VALUE)JSON:=OUT.VALUE*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=":VALUERETURNEND000797WOBJ.PARSEKEY0c2SUBROUTINE WOBJ.PARSEKEY(JSTR,INDEXPOS,PARSEKEY)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json property key************************************************************************INCLUDE WOBJ.INCLUDE*PARSEKEY=""IF WOBJ.DEBUG THEN PRINT "PARSEKEY: ENTERING ":INDEXPOS*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*LEN.JSTR = LEN(JSTR)*IFDQUOTE = 0IFSQUOTE = 0LOOPWHILE INDEXPOS > 0 AND INDEXPOS <= LEN.JSTR DO    C = JSTR[INDEXPOS,1]    IF WOBJ.DEBUG > 0 THEN PRINT "PARSEKEY: ":INDEXPOS,C,SEQ(C),PARSEKEY    BEGIN CASE        CASE C = '"'            IF NOT(IFDQUOTE) THEN IFDQUOTE=1 ELSE IFDQUOTE=0            INDEXPOS+=1            IF NOT(IFDQUOTE) THEN                CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)                IF JSTR[INDEXPOS,1] <> ":" THEN                    PSERRORS<-1>="Invalid Key at position ":INDEXPOS:" : ":PARSEKEY                    EXIT                END            END        CASE C = "'"            IF NOT(IFSQUOTE) THEN IFSQUOTE=1 ELSE IFSQUOTE=0            INDEXPOS+=1            IF NOT(IFSQUOTE) THEN                CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)                IF JSTR[INDEXPOS,1] <> ":" THEN                    PSERRORS<-1>="Invalid Key at position ":INDEXPOS:" : ":PARSEKEY                    EXIT                END            END        CASE C = ":"            INDEXPOS+=1            IF NOT(IFDQUOTE) AND NOT(IFSQUOTE) THEN                IF WOBJ.DEBUG THEN PRINT "EXITING"                EXIT            END            PARSEKEY:=C        CASE 1            IF C=LF OR C=CR OR C=TB OR C=" " THEN                NULL            END ELSE                PARSEKEY:=C            END            INDEXPOS+=1    END CASEREPEAT*IF WOBJ.DEBUG THEN PRINT "PARSEKEY: ":PARSEKEYRETURNEND00021FWOBJ.SKIPCHAR0c2SUBROUTINE WOBJ.SKIPCHAR(JSTR,INDEXPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: skip all whitespace************************************************************************INCLUDE WOBJ.INCLUDE*WS = " ()":TB:CR:LF:@AMLEN.JSTR=LEN(JSTR)LOOP WHILE INDEXPOS <= LEN.JSTR DO    IF INDEX(WS,JSTR[INDEXPOS,1],1) = 0 THEN EXIT    INDEXPOS += 1REPEATRETURNEND00030EWOBJ.PARSENULL0c2SUBROUTINE WOBJ.PARSENULL(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json null keyword************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""SAVE.INDEXPOS=INDEXPOS*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)IF OCONV(JSTR[INDEXPOS,4],"MCL") = "null" THEN    INDEXPOS+=4    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    C=JSTR[INDEXPOS,1]    IF INDEX(",]}",C,1)=0 THEN        * invalid terminator - not null    END ELSE        PARSESTRING="null"        RETURN    ENDENDPARSESTRING=""INDEXPOS=SAVE.INDEXPOSRETURNEND000741WOBJ.ARRAY.TOSTRING0c2SUBROUTINE WOBJ.ARRAY.TOSTRING(JSON,POS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert json array to string************************************************************************INCLUDE WOBJ.INCLUDE*JSON:="["; * START OUR STRINGINDENT.DEPTH+=1*IF PRETTIFY THEN JSON:=NLNUMBER.PARTS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,POS>IF WOBJ.DEBUG THEN PRINT "ARRAY.TOSTRING: POS=":POS:" NUMBER.PARTS=":NUMBER.PARTSFOR P=1 TO NUMBER.PARTS    PART.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,POS,P>    IF WOBJ.DEBUG THEN PRINT "ARRAY.TOSTRING: POS=":POS:" P=":P:" T=":PART.TYPE    IF PRETTIFY AND P=1 THEN JSON:=NL    CALL WOBJ.PRETTIFY.INDENT(JSON,POS)    BEGIN CASE        CASE PART.TYPE="S"            CALL WOBJ.STRING.TOSTRING(JSON,POS,P)        CASE PART.TYPE="B"            CALL WOBJ.BOOLEAN.TOSTRING(JSON,POS,P)        CASE PART.TYPE="D"            CALL WOBJ.NUMBER.TOSTRING(JSON,POS,P)        CASE PART.TYPE="N"            CALL WOBJ.NULL.TOSTRING(JSON,POS,P)        CASE PART.TYPE="O"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "OBJ FLINK=":PART.FLINK            CALL WOBJ.OBJECT.TOSTRING(JSON,PART.FLINK)        CASE PART.TYPE="A"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "FL=":PART.FLINK            CALL WOBJ.ARRAY.TOSTRING(JSON,PART.FLINK)    END CASE    IF P <> NUMBER.PARTS THEN        JSON:=", "        IF PRETTIFY THEN JSON:=NL    ENDNEXT P*IF PRETTIFY AND NUMBER.PARTS THEN    JSON:=NL    CALL WOBJ.PRETTIFY.INDENT(JSON,POS)ENDJSON:="]"*IF PRETTIFY THEN JSON:=NLINDENT.DEPTH-=1RETURNEND00066CWOBJ.ENCODE0c2SUBROUTINE WOBJ.ENCODE(IN.STR,OUT.STR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: encode json string*************************************************************************** THIS PROGRAM WILL CONVERT ALL BAD CHARACTERS TO AN ESCAPED CHARACTER***INCLUDE WOBJ.INCLUDE**OPEN 'RESULT.FILE' TO RFILE ELSE STOP* WE NEED TO ENCODE* " = \"   (34)* \ = \\    (92)* / = \/* CHAR(7) = \b* CHAR(13) = \r* char(10) = \n* char(12) = \f* char(9)  = \tOUT.STR=''L=LEN(IN.STR)CONVERT @AM TO LF IN IN.STR; * LETS SWITCH 254 TO LF BE DEFAULTFOR X=1 TO L    C=IN.STR[X,1]    SEQ.C=SEQ(C)    ENCODE=0    *IF SEQ.C < 32 THEN ENCODE=1; * BELOW SPACE    *IF SEQ.C > 32 AND SEQ.C < 48 THEN ENCODE=1; * LETS ENCODE ALL OF THIS !@$%^&*()    IF SEQ.C=34 THEN ENCODE=1    IF SEQ.C=92 THEN ENCODE=1    * IF SEQ.C=47 THEN ENCODE=1    *IF SEQ.C > 126 THEN ENCODE = 1; * LETS ENCODE ALL THE HIGH ENTRIES    *IF SEQ.C >= 91 AND SEQ.C <= 96 THEN ENCODE=1    IF ENCODE THEN        BEGIN CASE            CASE SEQ.C=7; OUT.STR='\b'            CASE C='\'; OUT.STR:='\\'                *CASE C='/'; OUT.STR:='\/'            CASE C='"'; OUT.STR:='\"'            CASE SEQ.C=10                OUT.STR:='\n'                IF PRETTIFYCR THEN OUT.STR:=NL            CASE SEQ.C=13; OUT.STR:='\r'            CASE SEQ.C=12; OUT.STR:='\f'            CASE 1; OUT.STR:='\u00':OCONV(C,'MX0C')        END CASE    END ELSE        OUT.STR=OUT.STR:C    ENDNEXT XRETURNEND0003B5WOBJ.PARSEBOOLEAN0c2SUBROUTINE WOBJ.PARSEBOOLEAN(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json boolean value************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)SAVE.INDEXPOS=INDEXPOSBEGIN CASE    CASE OCONV(JSTR[INDEXPOS,4],"MCL") = "true"        PARSESTRING="true"        INDEXPOS+=4    CASE OCONV(JSTR[INDEXPOS,5],"MCL") = "false"        PARSESTRING="false"        INDEXPOS+=5    CASE 1        * not boolean        INDEXPOS=SAVE.INDEXPOS        RETURNEND CASECALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)C=JSTR[INDEXPOS,1]IF INDEX(",]}",C,1)=0 THEN    * invalid terminator - not boolean    PARSESTRING=""    INDEXPOS=SAVE.INDEXPOSENDRETURNEND001224WOBJ.FINDNODE0c2SUBROUTINE WOBJ.FINDNODE(INNODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: find a json node in parsed object structure************************************************************************INCLUDE WOBJ.INCLUDE** NEED TO BREAK OUR NODE REQUEST UP INTO IT'S SEPERATE PARTS*RERR=""LASTNODE=""*OBJECT.SEPERATOR = "."NODES=INNODECONVERT OBJECT.SEPERATOR TO @AM IN NODES*NODEPOS=1; * WE ALWAYS START WITH THE FIRST ONE.PARTPOS=0; * START AS ZERO 6/19/2017 - PAPCHILDPOS=0;* SET WHEN OUR NODE IS AN OBJECT OR ARRAYPARTTYPE=""*NUMBER.NODES=DCOUNT(NODES,@AM)IF INDEX(NODES,"[",1) THEN* We need to trick this into seeing an array as another node level    ORIG.NODES=NODES    NODES=""    FOR A=1 TO NUMBER.NODES        NODE=ORIG.NODES<A>        IF INDEX(NODE,"[",1) THEN            NUMBER.ARRAYS = COUNT(NODE,"[")            ACTUAL.NODE=FIELD(NODE,"[",1)            NODES<-1>=ACTUAL.NODE            FOR B=1 TO NUMBER.ARRAYS                K=INDEX(NODE,"]",B)                NODES<-1>=NODE[1,K]            NEXT B        END ELSE            NODES<-1>=NODE        END    NEXT AENDNUMBER.NODES=DCOUNT(NODES,@AM)IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: number of parts in ":INNODE:": ":NUMBER.NODESFOR A=1 TO NUMBER.NODES    NODE=NODES<A>    LASTNODE=NODE    NODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEPOS>    IF WOBJ.DEBUG THEN PRINT "  part ":A:" key=":NODE:" pos=":NODEPOS:" type=":NODETYPE    BEGIN CASE        CASE NODETYPE="O"            JUSTNODE=FIELD(NODE,"[",1)            IF WOBJ.DEBUG THEN                PRINT "    locating ":JUSTNODE                PRINT "          in ":JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>                NUM.SUBS=DCOUNT(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>,CHAR(252))                PRINT 'NUM.SUBS=':NUM.SUBS            END            LOCATE JUSTNODE IN JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS> SETTING PARTPOS ELSE PARTPOS=0            IF NOT(PARTPOS) THEN                TEMP.NODE=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>                LOCATE JUSTNODE IN TEMP.NODE<1,1> SETTING PARTPOS ELSE PARTPOS=0                IF WOBJ.DEBUG THEN                    PRINT 'TEMP.NODE=':TEMP.NODE                    PRINT 'JUSTNODE=':JUSTNODE                    PRINT 'PARTPOS=':PARTPOS                END            END        CASE NODETYPE="A"            NUMBER.ARRAYS=COUNT(NODE,"[")            ST=INDEX(NODE,"[",NUMBER.ARRAYS)            EN=INDEX(NODE,"]",NUMBER.ARRAYS)            IF ST>1 AND EN>ST THEN                PARTPOS=NODE[ST+1,EN-ST-1]            END ELSE                PARTPOS=''            END            IF NOT((PARTPOS MATCHES '1N0N') OR (PARTPOS = '-1')) THEN                RERR=2                RERR<2>="Numeric subscript required for array element"                IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: ":RERR<2>                RETURN            END            IF PARTPOS<0 THEN PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> ;* ALLOW -1, SINCE WOBJ.SET USES THAT TO CREATE NEXT ELEMENT            PARTPOS += 1            IF PARTPOS > JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> THEN                IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: PARTPOS=":PARTPOS:" LEN=":JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>:" NODEPOS=":NODEPOS                PARTPOS=0            END    END CASE    IF NOT(PARTPOS) THEN        RERR=1        RERR<2>="Node ":NODE:" not found at level ":NODEPOS        IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: ":RERR<2>        RETURN    END    PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    IF (PARTTYPE="A" OR PARTTYPE="O") THEN        IF A=NUMBER.NODES THEN* RETURN CHILD OBJECT NODE POSITION            CHILDPOS=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>        END ELSE* FOLLOW FORWARD LINK TO CHILD NODE            NODEPOS=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>        END    END ELSE        IF A<>NUMBER.NODES THEN            RERR=1            RERR<2>="Node ":NODE:" not found at level ":NODEPOS            IF WOBJ.DEBUG THEN                PRINT "WOBJ.FINDNODE: ":RERR<2>                PRINT "    Node type ":PARTTYPE:" cannot have properties or array elements"            END            RETURN        END    ENDNEXT AIF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: nodepos=":NODEPOS:" partpos=":PARTPOS:" type=":PARTTYPE:" childpos=":CHILDPOSRETURNEND001968WOBJ.SET0c2SUBROUTINE WOBJ.SET(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: set json node to value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: allow Object and Array properties to be set, passing*   a JSON string representation of the node.************************************************************************INCLUDE WOBJ.INCLUDE*IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: NODE=":NODE:" ACTION=":ACTION*SACTION=FIELD(ACTION,".",2)IF NODE="" THEN    IF SACTION <> "OBJECT" THEN            RERR=1        RERR<2>="Node cannot be null"    END ELSE        CALL WOBJ.PARSE(VALUE,NEWOBJ)        IF PSERRORS#"" THEN            RERR=2            RERR<2> = PSERRORS            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET.OBJECT: parse failure: ":RERR<2>        END    END            RETURNEND*CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" LASTNODE=":LASTNODE:" RERROR=":RERR<2>*IF NOT(NODEPOS) THEN    RERR=1    RERR<2>="Node not found"    RETURNEND** CHECK THE NODE WE ARE SETTING PROPERTY TONODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEPOS>IF NODETYPE#"O" AND NODETYPE#"A" THEN    RERR=1    RERR<2>="Parent node must be an object or array"    RETURNEND*IGNORE.RERR=""IF NODETYPE="O" THEN PARTKEY=LASTNODE ELSE PARTKEY=""*IF NOT(PARTPOS) THEN* ENSURE PARENT NODE EXISTS    NUM.PARTS=DCOUNT(NODE,".")    FINAL.NODE=FIELD(NODE,".",NUM.PARTS)    IF INDEX(FINAL.NODE,"[",1) THEN        NUMBER.ARRAYS=COUNT(FINAL.NODE,"[")        PARENT.NODE=NODE[1,LEN(NODE)-LEN(FINAL.NODE)+INDEX(FINAL.NODE,"[",NUMBER.ARRAYS)-1]    END ELSE        NUMBER.ARRAYS=0        PARENT.NODE=NODE[1,LEN(NODE)-LEN(FINAL.NODE)-1]    END    IF NUM.PARTS > 1 OR NUMBER.ARRAYS > 0 THEN        CALL WOBJ.FINDNODE(PARENT.NODE,PARENT.NODEPOS,PARENT.PARTPOS,PARENT.CHILDPOS,PARENT.LASTNODE,"")        IF NOT(PARENT.PARTPOS) THEN            RERR=1            RERR<2>="Parent node not found"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END    END** WE NEED TO ADD A NEW ELEMENT    IF NODETYPE="O" THEN        PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>        PARTPOS += 1        JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>=PARTPOS        CALL WOBJ.SET.PART(NODEPOS,PARTPOS,"N",PARTKEY,"",IGNORE.RERR) ; * DUMMY NULL ELEMENT WILL BE REPLACED IN FINAL WOBJ.SET.PART CALL    END ELSE        NUMBER.ARRAYS=COUNT(LASTNODE,"[")        ST=INDEX(LASTNODE,"[",NUMBER.ARRAYS)        EN=INDEX(LASTNODE,"]",NUMBER.ARRAYS)        IF ST>1 AND EN>ST THEN            PARTPOS=LASTNODE[ST+1,EN-ST-1]        END ELSE            PARTPOS=''        END        IF NOT((PARTPOS MATCHES '1N0N') OR (PARTPOS = '-1')) THEN            RERR=2            RERR<2>="Numeric subscript required for setting array element"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END        IF PARTPOS<0 THEN            PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>+1        END ELSE            PARTPOS += 1 ; * ZERO-BASED ARRAY INDEX -> 1 BASED PARTPOS        END        LASTPARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>+1        FOR P=LASTPARTPOS TO PARTPOS            CALL WOBJ.SET.PART(NODEPOS,P,"N",PARTKEY,"",IGNORE.RERR)        NEXT P        IF PARTPOS>JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> THEN            JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>=PARTPOS        END    ENDEND*PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: PARTTYPE=":PARTTYPE*IF PARTTYPE="O" OR PARTTYPE="A" THEN** DELETE NESTED NODE BEFORE SETTING NEW VALUE    IF NODETYPE="A" THEN** ARRAYS ARE SPECIAL, BECAUSE WE DO NOT WANT TO DELETE THE ARRAY POSITION* THAT WE ARE SETTING, WHICH WILL SLIDE THE ARRAY DOWN BY ONE. INSTEAD,* INSERT A NULL ELEMENT AFTER THE ONE WE NEED TO DELETE, THEN AFTER* DELETING, WE CAN SIMPLY REPLACE THE NULL NODE.*        JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,NODEPOS,PARTPOS+1,"N")        JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> += 1    END*    CALL WOBJ.DELETE("DELETE",NODE,"",IGNORE.RERR)* BECAUSE DELETING MAY ALTER JSONOBJECT STRUCTURE, REFRESH NODEPOS & PARTPOS    CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,IGNORE.RERR)    IF NODETYPE="O" THEN        IF PARTPOS=0 THEN            PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>            PARTPOS += 1            JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>=PARTPOS            CALL WOBJ.SET.PART(NODEPOS,PARTPOS,"N",PARTKEY,"",IGNORE.RERR)        END ELSE            RERR=2            RERR<2>="While setting node ":NODE:", existing object was deleted, yet it is still here!"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END    END ELSE        IF PARTPOS=0 THEN            RERR=2            RERR<2>="While setting node ":NODE:", existing array element was deleted, but dummy element is missing!"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END    ENDEND** NOW WE ARE SAFE TO SET NEW VALUEBEGIN CASE    CASE SACTION="ARRAY" OR SACTION="OBJECT"        PARTTYPE=SACTION[1,1]    CASE SACTION="NULL"        PARTTYPE="N"    CASE SACTION="NUMBER"        PARTTYPE="D"    CASE SACTION="BOOLEAN"        PARTTYPE="B"    CASE SACTION="STRING" OR SACTION=""        PARTTYPE="S"    CASE 1        RERR=1        RERR<2>="Unknown value type ":SACTION:", assume STRING"        PARTTYPE="S"END CASECALL WOBJ.SET.PART(NODEPOS,PARTPOS,PARTTYPE,PARTKEY,VALUE,RERR)RETURNEND000E1FWOBJ.SET.PART0c2SUBROUTINE WOBJ.SET.PART(NODEPOS,PARTPOS,PARTTYPE,PARTKEY,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: set json part value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: allow Object and Array properties to be set, passing*   a JSON string representation of the node.************************************************************************INCLUDE WOBJ.INCLUDE*ENCODING=""FLINK=""* VALIDATE THE VALUE DATABEGIN CASE    CASE PARTTYPE="O" OR PARTTYPE="A"        OUT.VALUE=""    CASE PARTTYPE="N"        OUT.VALUE=""        IF VALUE#"" THEN            RERR=1            RERR<2>="Value ignored for NULL property"        END    CASE PARTTYPE="D"        OUT.VALUE=VALUE        IF VALUE="" THEN            OUT.VALUE=0        END ELSE            IF NOT(NUM(VALUE)) THEN                RERR=1                RERR<2>="Non-numeric value for NUMBER property; zero used"                OUT.VALUE=0            END        END    CASE PARTTYPE="B"        OUT.VALUE=OCONV(VALUE,"MCL")        IF OUT.VALUE#"true" AND OUT.VALUE#"false" THEN            RERR=1            RERR<2>="Invalid boolean value: must be true or false; false used"            OUT.VALUE="false"        END            CASE 1        ENCODING="H"        BEGIN CASE            CASE INDEX(VALUE,@AM,1)            CASE INDEX(VALUE,@VM,1)            CASE INDEX(VALUE,@SVM,1)            CASE INDEX(VALUE,LF,1)            CASE INDEX(VALUE,CR,1)            CASE 1                ENCODING="A"                OUT.VALUE=VALUE        END CASE        IF ENCODING="H" THEN OUT.VALUE=OCONV(VALUE,"MX0C")END CASE*IF PARTTYPE="O" OR PARTTYPE="A" THEN* SET UP THE NEW OBJECT    FLINK=JSONOBJECT(JSONOBJECT$NODECNTR)+1    IF VALUE="" THEN        JSONOBJECT(JSONOBJECT$NODECNTR)=FLINK ; * UPDATE NODE COUNT FOR NULL OBJECT    END ELSE* PARSE OBJECT OR ARRAY                MATBUILD SAVEJSONOBJECT FROM JSONOBJECT ; * SAVE CURRENT OBJECT IN CASE OF PARSE FAILURE        INDEXPOS=1        IF PARTTYPE="O" THEN            CALL WOBJ.PARSEOBJECT(VALUE,INDEXPOS,PARSERESULT)        END ELSE            CALL WOBJ.PARSEARRAY(VALUE,INDEXPOS,PARSERESULT)        END        IF PARSERESULT="" THEN            RERR=2            IF PARTTYPE="O" THEN                RERR<2>="Object parse failure"            END ELSE                RERR<2>="Array parse failure"            END        END ELSE* MAKE SURE WE CONSUMED ENTIRE JSTR            CALL WOBJ.SKIPCHAR(VALUE,INDEXPOS)            IF INDEXPOS <= LEN(VALUE) THEN                RERR=2                RERR<2>="Extra data (":(LEN(VALUE)-INDEXPOS+1):" characters) after final close brace ignored"            END                    END        IF RERR<1> >= 2 THEN* OBJECT OR ARRAY PARSE ERROR            MATPARSE JSONOBJECT FROM SAVEJSONOBJECT            PARTTYPE="N"            FLINK=""        END    ENDEND* SET THE PART PROPERTIESJSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>        =    PARTTYPEJSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS,PARTPOS>         =    PARTKEYJSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEPOS,PARTPOS>       =    OUT.VALUEJSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEPOS,PARTPOS>    =    ENCODINGJSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>       =    FLINKIF WOBJ.DEBUG THEN PRINT "WOBJ.SET.PART: T=":PARTTYPE:" K=":PARTKEY:" E=":ENCODING:" OUT.VALUE=":OUT.VALUE*RETURNEND001A13WOBJ.DELETE0c2SUBROUTINE WOBJ.DELETE(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: delete a json node in parsed object structure************************************************************************INCLUDE WOBJ.INCLUDE*VALUE=""DONE=0LOOP    CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)    IF WOBJ.DEBUG THEN PRINT "WOBJ.DELETE: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" RERROR=":RERR<2>    IF NOT(NODEPOS) OR NOT(PARTPOS) THEN        RERR=1        RERR<2>="Node not found"        RETURN    END        NODETYPE = JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE NODETYPE = 'O' AND CHILDPOS > 0* DELETE NESTED OBJECTS BEFORE DELETING PARENT NODE            NEST.COUNT = 0            NUM.PARTS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,CHILDPOS>            FOR I=1 TO NUM.PARTS                PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,CHILDPOS,I>                IF PARTTYPE = 'O' OR PARTTYPE = 'A' THEN                    PARTKEY=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,CHILDPOS,I>                    CALL WOBJ.DELETE(ACTION,NODE:".":PARTKEY,VALUE,RERR)                    NEST.COUNT += 1                    EXIT ;* AFTER MODIFYING THE JSONOBJECT STRUCTURE, NEED TO CALL FINDNODE AGAIN                END            NEXT I            IF NEST.COUNT = 0 THEN* DELETE OBJECT NODE                JSONOBJECT(JSONOBJECT$NODETYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODETYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODELENGTH)=DELETE(JSONOBJECT(JSONOBJECT$NODELENGTH),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODECNTR) -= 1* ADJUST LINKS TO ACCOUNT FOR DELETED NODE                NUM.NODES = JSONOBJECT(JSONOBJECT$NODECNTR)                FOR I = 1 TO NUM.NODES                    NUM.PARTS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,I>                    FOR J = 1 TO NUM.PARTS                        FLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J>                        IF FLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J> = FLINK - 1                        END                        BLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J>                        IF BLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J> = BLINK - 1                        END                    NEXT J                NEXT I                DONE = 1            END        CASE NODETYPE = 'A' AND CHILDPOS > 0* DELETE NESTED OBJECTS BEFORE DELETING PARENT NODE            NEST.COUNT = 0            NUM.ELEMS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,CHILDPOS>            FOR I = 1 TO NUM.ELEMS                PARTTYPE = JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,CHILDPOS,I>                IF PARTTYPE = 'O' OR PARTTYPE = 'A' THEN* DELETE NESTED OBJECTS BEFORE DELETING PARENT NODE                    CALL WOBJ.DELETE(ACTION,NODE:"[":(I-1):"]",VALUE,RERR)                    NEST.COUNT += 1                    EXIT ;* AFTER MODIFYING THE JSONOBJECT STRUCTURE, NEED TO CALL FINDNODE AGAIN                END            NEXT I* AFTER MODIFYING THE JSONOBJECT STRUCTURE, NEED TO CALL FINDNODE AGAIN            IF NEST.COUNT = 0 THEN* DELETE ARRAY NODE                JSONOBJECT(JSONOBJECT$NODETYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODETYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODELENGTH)=DELETE(JSONOBJECT(JSONOBJECT$NODELENGTH),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODECNTR) -= 1* ADJUST LINKS TO ACCOUNT FOR DELETED NODE                NUM.NODES = JSONOBJECT(JSONOBJECT$NODECNTR)                FOR I = 1 TO NUM.NODES                    NUM.PARTS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,I>                    FOR J = 1 TO NUM.PARTS                        FLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J>                        IF FLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J> = FLINK - 1                        END                        BLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J>                        IF BLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J> = BLINK - 1                        END                    NEXT J                NEXT I                DONE = 1            END        CASE 1            DONE = 1    END CASEUNTIL DONE DO REPEAT* DELETE SIMPLE NODEJSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> -= 1*RETURNEND001C67WOBJ.TEST0c2************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: WOBJ.TEST - QC Testing tool for WOBJ************************************************************************* Build test json to parse*INCLUDE WOBJ.CHOOSE.WOBJJSON =  \{\JSON := \ "stringtest":"stringtestvalue",\JSON := \ "numbertest": 100.12,\JSON := \ "booleantesttrue": True, \JSON := \ "booleantestfalse": False, \JSON := \ "nulltest": null \JSON := \}\** Lets build the objCALL @WOBJ.RTNE(TESTOBJ,"VERSION","",VERSION,"",RERR)PRINT "VERSION: ":VERSIONCALL @WOBJ.RTNE(TESTOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.ARRAY","arraytest","[]","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","arraytest[-1]","1","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","arraytest[-1]","2","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.OBJECT","objecttest",'{ "objecttestv1":"ok" }',"",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","stringtest","stringtestvalue","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.NUMBER","numbertest",100.12,"",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.BOOLEAN","booleantesttrue","True","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.BOOLEAN","booleantestfalse","False","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.NULL","nulltest","NULL","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"TOSTRING","",JSON,"",RERR)TESTOBJ=""** TEST 1 - PARSE*TEST="parse"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"FROMSTRING","",JSON,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Parse ok"   TEST.STATUS=1ENDGOSUB end.test** TEST 2 - GetString*TEST="GetString"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","stringtest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="String Found: (":VALUE:")"   IF VALUE="stringtestvalue" THEN      TEST.STATUS=1   END ELSE       TEST.STATUS=0   ENDENDGOSUB end.test** TEST 3 - GetNumber*TEST="GetNumber"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","numbertest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Number Found: (":VALUE:")"   BEGIN CASE      CASE NOT(NUM(VALUE))      CASE VALUE=100.12         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 4 - GETBoolean*TEST="GetBooleanTrue"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","booleantesttrue",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Boolean Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="true"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 5 - GETBoolean*TEST="GetBooleanFalse"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","booleantestfalse",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Boolean Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="false"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 6 - get null*TEST="GetNull"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","nulltest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="testnull Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="null"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 7 - get length*TEST="LENGTH"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"LENGTH","arraytest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="LENGTH(arraytest) Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="2"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 8 get array sub part*TEST="get array part"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","arraytest[1]",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="arraytest[2] Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="2"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 9 - get object keys*TEST="KEYS"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"KEYS","objecttest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="KEYS Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="objecttestv1"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 10- add item and retrieve*TEST="addstring2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","string2","string2","",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Added string2"ENDGOSUB end.test** TEST 11 - get string2*TEST="getstring2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","string2",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="string2 Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="string2"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 12- add item and retrieve*TEST="addnull2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.NULL","null2","null","",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Add Null2"ENDGOSUB end.test** TEST 11 - get NULL2*TEST="getnull2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","null2",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="null2 Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="null"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 12 - Add blank Object*TEST="Add blank object"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.OBJECT","nullobject","","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET","nullobject.nullfield","nullvalue","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"GET","nullobject.nullfield",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) AND VALUE="nullvalue" THEN   TEST.MSG="nullfield found "   TEST.STATUS=1END ELSE   TEST.MSG="nullfield not found "ENDTEST.MSG:=' (':VALUE:')'GOSUB end.test** TEST 13 - Add blank array*TEST="Add blank array"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.ARRAY","nullarray","","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET","nullarray[-1]","nullvalue","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"GET","nullarray[0]",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) AND VALUE="nullvalue" THEN   TEST.MSG="nullfield found "   TEST.STATUS=1END ELSE   TEST.MSG="nullfield not found "ENDTEST.MSG:=' (':VALUE:')'GOSUB end.test** TEST 14 - Test TOJSONTEST="Test TOJSON"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"TOJSON","",TJSON,"PRETTIFY",RERR)GOSUB process.errorTEST.STATUS=0TEST.MSG="Testing JSON"IF NOT(RERR<1>) THEN   IF INDEX(TJSON,"arraytest",1) THEN   TEST.MSG="nullfield found "   TEST.STATUS=1   ENDEND ELSE   TEST.MSG=""ENDGOSUB end.test** TEST 15 - Test FROMJSONTEST="Test FROMJSON"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ2,"FROMJSON","",TJSON,"",RERR)CALL @WOBJ.RTNE(TESTOBJ2,"GET","stringtest",VALUE,"",RERR)GOSUB process.errorTEST.MSG="stringtestvalue=(":VALUE:")"TEST.STATUS=0IF NOT(RERR<1>) THEN   IF VALUE="stringtestvalue" THEN   TEST.STATUS=1   ENDENDGOSUB end.testCALL @WOBJ.RTNE(TESTOBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR)PRINT OUT.JSONSTOP*GOSUB start.testRETURN*process.error: *IF RERR<1> THEN   TEST.STATUS=-1   TEST.MSG=RERR<1>ENDRETURN**start.test: *TEST.STATUS=0TEST.MSG="Success"PRINT "Test: ":TEST[1,20]"L(#20)":RETURN*end.test: *PRINT "  ":TEST.MSG[1,60]"L(#60)":PRINT " ":IF TEST.STATUS THEN PRINT "[Ok    ]" ELSE PRINT @(-13):"[Failed]":@(-14)RETURN0009CEWOBJ.OBJECT.TOSTRING0c2SUBROUTINE WOBJ.OBJECT.TOSTRING(JSON,POS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert parsed json object node to string************************************************************************INCLUDE WOBJ.INCLUDE*JSON:="{"; * START OUR STRINGINDENT.DEPTH+=1*IF PRETTIFY THEN JSON:=NLNUMBER.PARTS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,POS>IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: POS=":POS:" NUMBER.PARTS=":NUMBER.PARTS** OPTION TO SORT THIS**SORTTYPE="NSBASIC"SORTTYPE=""BEGIN CASE     CASE 1        KEYS=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,POS>        CONVERT @SVM TO @AM IN KEYS        SORTED.KEYS=KEYSEND CASEACTUAL.KEYS=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,POS>FOR PP=1 TO NUMBER.PARTS    PART.KEY=SORTED.KEYS<PP>    LOCATE PART.KEY IN ACTUAL.KEYS<1,1> SETTING P ELSE        IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: COULD NOT LOCATE ":PART.KEY:" IN ":ACTUAL.KEYS    END    PART.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,POS,P>    PART.KEY=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,POS,P>    IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: POS=":POS:" P=":P:" T=":PART.TYPE:" K=":PART.KEY    IF PP=1 AND PRETTIFY THEN JSON:=NL    CALL WOBJ.ENCODE(PART.KEY,OUT.PART.KEY)    CALL WOBJ.PRETTIFY.INDENT(JSON,POS)    JSON:='"':OUT.PART.KEY:'": '    BEGIN CASE        CASE PART.TYPE="S"            CALL WOBJ.STRING.TOSTRING(JSON,POS,P)        CASE PART.TYPE="B"            CALL WOBJ.BOOLEAN.TOSTRING(JSON,POS,P)        CASE PART.TYPE="D"            CALL WOBJ.NUMBER.TOSTRING(JSON,POS,P)        CASE PART.TYPE="N"            CALL WOBJ.NULL.TOSTRING(JSON,POS,P)        CASE PART.TYPE="O"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: FL=":PART.FLINK            CALL WOBJ.OBJECT.TOSTRING(JSON,PART.FLINK)        CASE PART.TYPE="A"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: FL=":PART.FLINK            CALL WOBJ.ARRAY.TOSTRING(JSON,PART.FLINK)    END CASE    IF PP <> NUMBER.PARTS THEN        JSON:=", "        IF PRETTIFY THEN JSON:=NL    ENDNEXT PP*IF PRETTIFY THEN    JSON:=NL    PASS.POS=POS-1    CALL WOBJ.PRETTIFY.INDENT(JSON,PASS.POS)ENDJSON:="}"*IF PRETTIFY THEN JSON:=NLINDENT.DEPTH -= 1RETURNEND000459WOBJ.KEYS0c2SUBROUTINE WOBJ.KEYS(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: return list of elements in a json node in parsed object structure************************************************************************INCLUDE WOBJ.INCLUDE*VALUE=""CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)**IF WOBJ.DEBUG THEN PRINT "WOBJ.KEYS: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" LASTNODE=":LASTNODE:" RERR=":RERR<2>*IF NOT(NODEPOS) THEN    RERR=1    RERR<2>="Node not found"     RETURNENDIF NODE#"" AND NOT(PARTPOS) THEN    RERR=1    RERR<2>="Node not found"     RETURNENDIF NODE="" THEN    NODEPOS=1    CHILDPOS=1ENDIF NOT(CHILDPOS) THEN   RERR=1   RERR<2>="Node is not an object"   RETURNENDNODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,CHILDPOS>IF NODETYPE#"O" THEN   RERR=1   RERR<2>="Node is not an object"   RETURNENDVALUE=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,CHILDPOS>RETURNEND0001C5COMPILE.TXT0c2WOBJWOBJ.ARRAY.TOSTRINGWOBJ.BOOLEAN.TOSTRINGWOBJ.DECODE.PARTWOBJ.DELETEWOBJ.ENCODEWOBJ.FINDNODEWOBJ.GETWOBJ.INCLUDEWOBJ.KEYSWOBJ.NULL.TOSTRINGWOBJ.NUMBER.TOSTRINGWOBJ.OBJECT.TOSTRINGWOBJ.PARSEWOBJ.PARSEARRAYWOBJ.PARSEBOOLEANWOBJ.PARSEKEYWOBJ.PARSENULLWOBJ.PARSENUMBERWOBJ.PARSEOBJECTWOBJ.PARSESTRINGWOBJ.PARSEVALUEWOBJ.PRETTIFY.INDENTWOBJ.SETWOBJ.SET.PARTWOBJ.SKIPCHARWOBJ.STRING.TOSTRINGWOBJ.TESTWOBJ.TOSTRING0002C7WOBJ.TOSTRING0c2SUBROUTINE WOBJ.TOSTRING(JSON)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: internal convert json object to string************************************************************************INCLUDE WOBJ.INCLUDE*POS=1OBJ.TYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,POS>IF OBJ.TYPE="" OR POS > JSONOBJECT$NODECNTR THEN RETURNIF WOBJ.DEBUG THEN PRINT "FIRST OBJECT=":OBJ.TYPEBEGIN CASE    CASE OBJ.TYPE="A"        CALL WOBJ.ARRAY.TOSTRING(JSON,POS)    CASE OBJ.TYPE="O"        CALL WOBJ.OBJECT.TOSTRING(JSON,POS)END CASERETURNEND0002AFWOBJ.DECODE.PART0c2SUBROUTINE WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: decode json part value************************************************************************INCLUDE WOBJ.INCLUDE*PARTENCODING =  JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEPOS,PARTPOS>PARTVALUE    =  JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEPOS,PARTPOS>*BEGIN CASE    CASE PARTENCODING="H"        VALUE=ICONV(PARTVALUE,"MX0C"); * UV    CASE 1        VALUE=PARTVALUEEND CASE*RETURNEND000529WOBJ.GET0c2SUBROUTINE WOBJ.GET(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: get json element value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: if specified node is an Object or Array, return*   a JSON string representation of the node.************************************************************************INCLUDE WOBJ.INCLUDE*VALUE=""IF NODE="" THEN    CALL WOBJ.OBJECT.TOSTRING(VALUE,1) ; * Root object    RETURNEND*CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF NODEPOS > 0 AND PARTPOS > 0 THEN    OBJ.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE OBJ.TYPE="O"            CALL WOBJ.OBJECT.TOSTRING(VALUE,CHILDPOS)        CASE OBJ.TYPE="A"            CALL WOBJ.ARRAY.TOSTRING(VALUE,CHILDPOS)        CASE OBJ.TYPE="N"            VALUE="null"; * 4/23/202 - Return null value        CASE 1            CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)    END CASEEND ELSE    VALUE="" ; * NODE NOT FOUND!ENDIF WOBJ.DEBUG THEN PRINT "WOBJ.GET: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" VALUE=":VALUERETURNEND0008BCWOBJ.PARSESTRING0c2SUBROUTINE WOBJ.PARSESTRING(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json string value************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""*SAVE.INDEXPOS=INDEXPOSCALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)IFQUOTE = JSTR[INDEXPOS,1]INDEXPOS+=1LEN.JSTR=LEN(JSTR)*LOOPWHILE INDEXPOS > 0 AND INDEXPOS < LEN.JSTR DO    C = JSTR[INDEXPOS,1]    IF WOBJ.DEBUG > 1 THEN PRINT "PARSESTRING: LOOKING AT (":C:")"    BEGIN CASE        CASE C = "\"            INDEXPOS+=1            C=JSTR[INDEXPOS,1]            BEGIN CASE                CASE C = \"\ OR C = "\" OR C= "/" OR C = "'"                    PARSESTRING:=C                    INDEXPOS+=1                CASE C = "b"                    PARSESTRING:=BS                    INDEXPOS+=1                CASE C = "f"                    PARSESTRING:=FF                    INDEXPOS+=1                CASE C = "n"                    PARSESTRING:=LF                    INDEXPOS+=1                CASE C = "r"                    PARSESTRING:=CR                    INDEXPOS+=1                CASE C = "t"                    PARSESTRING:=TB                    INDEXPOS+=1                CASE C = "u"                    INDEXPOS+=1                    CODE=JSTR[INDEXPOS,4]                    IF CODE[1,2]="00" THEN                        PARSESTRING:=ICONV(CODE[3,2],"MX0C")                    END ELSE                        PARSESTRING:="_" ;* Poor substitute for invalid Unicode character!                        PSERRORS<-1> = "Invalid Unicode character at position ":INDEXPOS-1:" : u":CODE                    END                    INDEXPOS+=4            END CASE        CASE C = IFQUOTE            INDEXPOS+=1            EXIT        CASE 1            PARSESTRING:=C            INDEXPOS+=1    END CASEREPEATIF C # IFQUOTE THEN    * string not terminated!    PARSESTRING=""    INDEXPOS=SAVE.INDEXPOSENDIF WOBJ.DEBUG THEN PRINT "PARSESTRING: EXITING: ":PARSESTRINGRETURNEND000120WOBJ.UNASSIGNED.INCLUDE0c2IF NOT(ASSIGNED(PASSEDOBJ)) THEN RERR='PARAM1 BLANK'IF NOT(ASSIGNED(ACTION)) THEN RERR='PARAM2 (ACTION) NOT ASSIGNED'IF NOT(ASSIGNED(NODE)) THEN RERR='PARAM3 (NODE) NOT ASSIGNED'IF NOT(ASSIGNED(VALUE)) THEN VALUE=""IF NOT(ASSIGNED(OPTIONS)) THEN OPTIONS=""000258WOBJ.BOOLEAN.TOSTRING0c2SUBROUTINE WOBJ.BOOLEAN.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert json boolean to string************************************************************************INCLUDE WOBJ.INCLUDE*CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)*CALL WOBJ.ENCODE(VALUE,OUT.VALUE)JSON:=OCONV(OUT.VALUE,"MCL")*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=":VALUERETURNEND0001E4WOBJ.NULL.TOSTRING0c2SUBROUTINE WOBJ.NULL.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: json null to string************************************************************************INCLUDE WOBJ.INCLUDE*JSON:="null"*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=null"RETURNEND0001E1WOBJ.PRETTIFY.INDENT0c2SUBROUTINE WOBJ.PRETTIFY.INDENT(JSON,POS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: indent json string************************************************************************INCLUDE WOBJ.INCLUDE*INDENTSTEP=2*IF PRETTIFY THEN    JSON:=STR(" ",(INDENT.DEPTH*INDENTSTEP))END*RETURNEND00024DWOBJ.STRING.TOSTRING0c2SUBROUTINE WOBJ.STRING.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: return json node as string************************************************************************INCLUDE WOBJ.INCLUDE*CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)*CALL WOBJ.ENCODE(VALUE,OUT.VALUE)JSON:='"':OUT.VALUE:'"'*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=":VALUERETURNEND000971WOBJ.PARSEVALUE0c2SUBROUTINE WOBJ.PARSEVALUE(JSTR,INDEXPOS,PARSEVALUE)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json value************************************************************************INCLUDE WOBJ.INCLUDE*PARSEVALUE=""*IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - STARTING"CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*C=JSTR[INDEXPOS,1]LEN.JSTR=LEN(JSTR)*IF WOBJ.DEBUG THEN PRINT "PARSEVALUE LOOKING AT ":C** WE WILL BE ADDING A NEW ITEM TO OUR OBJECT ARRAY*BEGIN CASE    CASE C="{"        CALL WOBJ.PARSEOBJECT(JSTR,INDEXPOS,PARSEVALUE)    CASE C="["        IF WOBJ.DEBUG THEN PRINT "PARSEVALUE CALLING PARSEARRAY"        CALL WOBJ.PARSEARRAY(JSTR,INDEXPOS,PARSEVALUE)    CASE C='"' OR C="'"        IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSESTRING"        CALL WOBJ.PARSESTRING(JSTR,INDEXPOS,PARSEVALUE)        PARSEVALUE=INSERT(PARSEVALUE,1;"S")    CASE 1        IF C="t" OR C="T" OR C="f" OR C="F" THEN            IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSEBOOLEAN"            CALL WOBJ.PARSEBOOLEAN(JSTR,INDEXPOS,PARSEVALUE)            IF PARSEVALUE#"" THEN                PARSEVALUE=INSERT(PARSEVALUE,1;"B")            END        END        IF PARSEVALUE="" AND (C="n" OR C="N") THEN            IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSENULL"            CALL WOBJ.PARSENULL(JSTR,INDEXPOS,PARSEVALUE)            IF PARSEVALUE#"" THEN                 PARSEVALUE=INSERT(PARSEVALUE,1;"N")            END        END        IF PARSEVALUE="" THEN            IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSENUMBER"            CALL WOBJ.PARSENUMBER(JSTR,INDEXPOS,PARSEVALUE)            IF PARSEVALUE#"" THEN                PARSEVALUE=INSERT(PARSEVALUE,1;"D")            END        END        IF PARSEVALUE="" THEN            * Treat unidentified value as string            LOOP            WHILE INDEXPOS > 0 AND INDEXPOS < LEN.JSTR DO                C = JSTR[INDEXPOS,1]                IF INDEX(",]}",C,1) THEN                    EXIT                END                PARSEVALUE:=C                INDEXPOS+=1            REPEAT            PARSEVALUE=INSERT(PARSEVALUE,1;"S")        ENDEND CASEIF WOBJ.DEBUG THEN PRINT "PARSEVALUE - END OF ROUTINE"*RETURNEND000180WOBJ.CHOOSE.WOBJ0c2* Code to determine default wobj library to use* This needs to change for MVDBTOOLKIT build, defaults to WOBJWOBJ.RTNE="WOBJ"NO.MD.FILE=0OPEN "MD" TO FILE.MD ELSE    OPEN "VOC" TO FILE.MD ELSE NO.MD.FILE=1ENDIF NOT(NO.MD.FILE) THEN    READ WOBJ.CONF FROM FILE.MD, "WOBJ.CONF" ELSE WOBJ.CONF=""    IF WOBJ.CONF<3> # "" THEN WOBJ.RTNE=WOBJ.CONF<3>END0014F3WOBJ0c2SUBROUTINE WOBJ(PASSEDOBJ,ACTION,NODE,VALUE,OPTIONS,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: WOBJ json library main routine************************************************************************WOBJ.VERSION = "2.0"*INCLUDE WOBJ.INCLUDE** 4/21/2020 Merged in udo object supportPLATFORM=""* HOW TO DEFINE CONFIGURATION FOR WOBJ??NO.MD.FILE=0OPEN "MD" TO MD.FILE ELSE   OPEN "VOC" TO MD.FILE ELSE NO.MD.FILE=1ENDWOBJ.CONF=""IF NOT(NO.MD.FILE) THEN   READ WOBJ.CONF FROM MD.FILE, "WOBJ.CONF" ELSE WOBJ.CONF=""ENDIF WOBJ.CONF="" THEN   NO.DICT.WOBJ.BP=0   OPEN "DICT","WOBJ.BP" TO DICT.WOBJ.BP ELSE NO.DICT.WOBJ.BP=1   IF NOT(NO.DICT.WOBJ.BP) THEN      READ WOBJ.CONF FROM DICT.WOBJ.BP, "WOBJ.CONF" ELSE WOBJ.CONF=""   ENDENDPLATFORM=WOBJ.CONF<2>* 5/11/2020 - Moved unassigned check to here** Doing inline include due to Assign/Unassigned (unidata)* WOBJ.UNASSIGNED.INCLUDE*$INCLUDE WOBJ.UNASSIGNED.INCLUDEINCLUDE WOBJ.UNASSIGNED.INCLUDEIF INDEX(OPTIONS,"PRETTIFY",1) THEN PRETTIFY=1 ELSE PRETTIFY=0IF INDEX(OPTIONS,"PRETTIFYCR",1) THEN PRETTIFYCR=1 ELSE PRETTIFYCR=0IF INDEX(OPTIONS,"DEBUG",1) THEN WOBJ.DEBUG=1 ELSE WOBJ.DEBUG=0IF INDEX(OPTIONS,"UDO=1",1) THEN PLATFORM="UDO"IF INDEX(OPTIONS,"UDO=0",1) AND PLATFORM="UDO" THEN PLATFORM=""IF INDEX(OPTIONS,"NATIVE",1) THEN PLATFORM=""* 5/11/2020 - pap Patch to allow default setting for a *             set.object or set.array*IF ACTION="SET.OBJECT" AND VALUE="" THEN VALUE="{}"IF ACTION="SET.ARRAY" AND VALUE="" THEN VALUE="[]"IF ACTION="FROMJSON" THEN ACTION="FROMSTRING"IF ACTION="TOJSON" THEN ACTION="TOSTRING"BEGIN CASE   CASE PLATFORM='UDO'      CALL WOBJ.UDO(PASSEDOBJ,ACTION,NODE,VALUE,OPTIONS,RERR)      RETURN   CASE 1END CASE*MAT JSONOBJECT = ""RERR=""INDENT.DEPTH=0*BEGIN CASE    CASE ACTION="FROMSTRING"* THIS EXISTS EARLIER DUE TO MATPARSE BELOW        CALL WOBJ.PARSE(VALUE,NEWOBJ)        PASSEDOBJ=NEWOBJ        IF PSERRORS # "" THEN            RERR=2            RERR<2> = PSERRORS        END        IF WOBJ.DEBUG THEN PRINT "WOBJ: FROMSTRING ACTION: VALUE=":VALUE:" RERR=":RERR<2>        RETURN    CASE ACTION="VERSION"        VALUE=WOBJ.VERSION        RETURNEND CASERERR=''*IF NOT(ASSIGNED(PASSEDOBJ)) THEN RERR='PARAM1 BLANK'*IF NOT(ASSIGNED(ACTION)) THEN RERR='PARAM2 (ACTION) NOT ASSIGNED'*IF NOT(ASSIGNED(NODE)) THEN RERR='PARAM3 (NODE) NOT ASSIGNED'*IF NOT(ASSIGNED(VALUE)) THEN VALUE=""*IF NOT(ASSIGNED(OPTIONS)) THEN OPTIONS=""IF RERR <> "" THEN   RERR<2>=RERR   RERR<1>=1   PRINT RERR<1>   RETURNEND** MATPARSE JSONOBJECT FROM PASSEDOBJ; * all except unidataMATPARSE JSONOBJECT FROM PASSEDOBJ, @AM; * Unidata*IF WOBJ.DEBUG THEN PRINT "ACTION=":ACTIONBEGIN CASE    CASE ACTION="TOSTRING"        VALUE=""        IF NODE # "" THEN            RERR=1            RERR<2>="Node ignored - returning the root node"            IF WOBJ.DEBUG THEN PRINT "WOBJ: TOSTRING ACTION: NODE ":NODE:" IGNORED"        END        CALL WOBJ.TOSTRING(VALUE)    CASE ACTION="GET"        GOSUB action.get    CASE FIELD(ACTION,".",1)="SET"        GOSUB action.set    CASE ACTION="DELETE"        GOSUB action.delete    CASE ACTION="KEYS"        GOSUB action.keys    CASE ACTION="LENGTH"        GOSUB action.length    CASE ACTION="TYPE"        GOSUB action.type    CASE 1        VALUE=""        RERR=1        RERR<2>="Invalid action '":ACTION:"'"        IF WOBJ.DEBUG THEN PRINT "WOBJ: INVALID ACTION: ":ACTIONEND CASE*MATBUILD PASSEDOBJ FROM JSONOBJECT*RETURN*action.get: *CALL WOBJ.GET(ACTION,NODE,VALUE,RERR)RETURN*action.set: *CALL WOBJ.SET(ACTION,NODE,VALUE,RERR)RETURN*action.delete: *CALL WOBJ.DELETE(ACTION,NODE,VALUE,RERR)RETURN*action.keys: *CALL WOBJ.KEYS(ACTION,NODE,VALUE,RERR)RETURN*action.length: *CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF PARTPOS THEN    IF CHILDPOS THEN        VALUE=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,CHILDPOS>+0    END ELSE        VALUE=1 ;* SIMPLE NODE HAS LENGTH OF 1    ENDEND ELSE    IF NODE="" THEN        VALUE=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,1>+0    END ELSE        VALUE=0 ;* NODE NOT FOUND!    ENDENDIF WOBJ.DEBUG THEN PRINT "WOBJ: LENGTH ACTION: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" LENGTH=":VALUE:" RERR=":RERR<2>RETURN*action.type: *CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF PARTPOS THEN    PARTTYPE = JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE PARTTYPE='O'            VALUE='OBJECT'        CASE PARTTYPE='A'            VALUE='ARRAY'        CASE PARTTYPE='D'            VALUE='NUMBER'        CASE PARTTYPE='S'            VALUE='STRING'        CASE PARTTYPE='N'            VALUE='NULL'        CASE PARTTYPE='B'            VALUE='BOOLEAN'        CASE 1            VALUE='UNKNOWN'    END CASEEND ELSE    IF NODE="" THEN        VALUE="OBJECT"    END ELSE        VALUE="UNDEFINED" ;* NODE NOT FOUND!    ENDENDIF WOBJ.DEBUG THEN PRINT "WOBJ: TYPE ACTION: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" TYPE=":VALUE:" RERR=":RERR<2>RETURN*END00038DWOBJ.PARSENUMBER0c2SUBROUTINE WOBJ.PARSENUMBER(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json numeric value************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)SAVE.INDEXPOS=INDEXPOS*JSTR.LENGTH=LEN(JSTR)*LOOP WHILE INDEXPOS > 0 AND INDEXPOS <= JSTR.LENGTH DO    C=JSTR[INDEXPOS,1]    IF NUM(C) OR C="+" OR C="-" OR C="." OR C="E" OR C="e" THEN        PARSESTRING:=C        INDEXPOS+=1    END ELSE        EXIT    ENDREPEATCALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)C=JSTR[INDEXPOS,1]IF INDEX(",]}",C,1)=0 THEN    * invalid terminator - not a number    PARSESTRING=""    INDEXPOS=SAVE.INDEXPOSENDRETURNEND000419WOBJ.PARSE0c2SUBROUTINE WOBJ.PARSE(JSTR,JSONOBJECTRETURN)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json string into object************************************************************************INCLUDE WOBJ.INCLUDE*PSERRORS=""MAT JSONOBJECT=""JSONOBJECTRETURN=""*INDEXPOS=1CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)C=JSTR[INDEXPOS,1]IF C # "{" THEN    IF C # "" THEN        PSERRORS<-1>="Leading brace for JSON object missing"    END    RETURNEND*CALL WOBJ.PARSEOBJECT(JSTR,INDEXPOS,PARSERESULT)IF PARSERESULT="" THEN    IF PSERRORS="" THEN PSERRORS<-1>="Parse failure"END ELSE    * MAKE SURE WE CONSUMED ENTIRE JSTR    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    IF INDEXPOS <= LEN(JSTR) THEN        PSERRORS<-1>="Extra data (":(LEN(JSTR)-INDEXPOS+1):" characters) after final close brace ignored"    ENDEND*MATBUILD JSONOBJECTRETURN FROM JSONOBJECT*RETURNEND000A0FWOBJ.PARSEARRAY0c2SUBROUTINE WOBJ.PARSEARRAY(JSTR,INDEXPOS,PARSEARRAY)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json array************************************************************************INCLUDE WOBJ.INCLUDE*PARSEVARRAY=""IF WOBJ.DEBUG THEN PRINT "PARSEARRAY - STARTING"*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*IF JSTR[INDEXPOS,1] <> "[" THEN    PSERRORS<-1>="Invalid Array at position ":INDEXPOS:" : ":JSTR[INDEXPOS,20]    RETURNEND*LEN.JSTR = LEN(JSTR)INDEXPOS+=1*JSONOBJECT(JSONOBJECT$NODECNTR)+=1NODEID=JSONOBJECT(JSONOBJECT$NODECNTR)JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEID>="A"; *SET AS OBJECT*LOOP    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    C=JSTR[INDEXPOS,1]    IF WOBJ.DEBUG THEN PRINT "PARSEARRAY: ":NODEID:" - LOOKING AT ":C    BEGIN CASE        CASE C = "]"            IF WOBJ.DEBUG THEN PRINT "PARSEARRAY: ":NODEID:" EXIT ON ]"            INDEXPOS+=1            EXIT        CASE C = ","            INDEXPOS+=1            CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)        CASE INDEXPOS > LEN.JSTR            PSERRORS<-1>="Missing ']': ":JSTR[LEN(JSTR)-20,20]            RETURN    END CASE    *    CALL WOBJ.PARSEVALUE(JSTR,INDEXPOS,PARSEVALUE)    *    JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>+=1    PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>    BEGIN CASE        CASE PARSEVALUE=""            PSERRORS<-1>="Invalid value syntax for array element ":(PARTPOS-1)            IF WOBJ.DEBUG THEN PRINT "PARSEARRAY ":NODEID:" invalid value syntax"            RETURN        CASE PARSEVALUE<1>="A" OR PARSEVALUE<1>="O"            * ARRAY OR OBJECT            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEID,PARTPOS>=PARSEVALUE<2>        CASE 1            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            V=PARSEVALUE<2>            IF INDEX(V,LF,1) OR INDEX(V,CR,1) THEN                V=OCONV(V,"MX0C")                E="H"            END ELSE                E="A"            END            JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEID,PARTPOS>=V            JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEID,PARTPOS>=E    END CASE    IF WOBJ.DEBUG THEN PRINT "PARSEARRAY ":NODEID:" ":PARSEVALUE<1>:" ":PARSEVALUE<2>REPEATPARSEARRAY="A"PARSEARRAY<2>=NODEIDIF WOBJ.DEBUG THEN PRINT "PARSEARRAY - EXITING"RETURNEND000165DICT_PORTAL.AR0c000002BINVOICE.AMT0c1A6Invoice.AmtMD2R13000025DUE.DATE0c1A20Due.DateD2-R8000024BALANCE0c1A50BalanceMD2R13000029DATES.PAID0c1A8CheckDatesD2-R800001APIPE0c1A0 F;C|L100001ACUST0c1A1CustL2500001EBIG.CUST0c1A1CustL40000034CUST.NAME0c1A1Cust.NameTPORTAL.AR;X;1;1L25000A7FMVDB.WIDGETS0c0000025AdminConfig0c2SUB.ADMIN.CONFIGADMIN000025Code Templates0c2SUB.CODE.TEMPLATES000014D3 Free0c2SUB.FREE00001CD3 LISTPEQS0c2SUB.LISTPEQS000016D3 LISTU0c2SUB.LISTU000028D3 Runtime Errors0c2SUB.RUNTIME.ERRORS000024D3 Sys Err Chart0c2SUB.SYS.ERR.BAR000021D3 System Errors0c2SUB.SYS.ERRS00002DDashboard License Usage0c2SUB.TABLE.LIC.USED000038DEMO ANNUAL SALES BY REP0c2SUB.DEMO.ANNUAL.SALES.BY.REP000035DEMO AVERAGE DAYS CHART0c2SUB.DEMO.DAYS.TO.PAY.CHART000030DEMO DAYS TO PAY PIE0c2SUB.DEMO.DAYS.TO.PAY.PIE00004BDEMO FINANCIAL PICTURE0c2DEMO.FINANCIALS.DASHBOARDDemo Financial Picture00003ADEMO MONTHLY SALES BY REP0c2SUB.DEMO.MONTHLY.SALES.BY.REP000032DEMO NET INCOME CHART0c2SUB.DEMO.NET.INCOME.CHART000036DEMO REV.GP SALES CHART0c2SUB.DEMO.REV.GP.SALES.CHART00002EDEMO SALE TYPES PIE0c2SUB.DEMO.SALE.TYPES.PIE000028DEMO SALES CHART0c2SUB.DEMO.SALES.CHART00002EDEMO SALES PERCENTS0c2SUB.DEMO.SALES.PERCENTS000044DEMO SINGLE MONTH SALES BY REP0c2SUB.DEMO.SINGLE.MONTH.SALES.BY.REP000020Demo- MS Col0c2SUB.DEMO.MS.COL00001FDemo-Doughnut0c2SUB.DEMO.DNUT000019Demo-Pie0c2SUB.DEMO.PIE00001EDemo-SS Col0c2SUB.DEMO.SS.COL000021Demo-SS Line0c2SUB.DEMO.SS.LINE000025Drilldown Demo0c2SUB.DEMO.DRILLDOWN000024Emailed Report0c2SUB.EMAILED.REPORT00001EGRID TEST0c2SUB.GRID.TESTSAI000021Icon Gallery0c2SUB.ICON.GALLERY000022Mobile Manager0c2SUB.MOBILE.APPS000026MW CodeFactory0c2SUB.MW.CODE.FACTORY000021PDFConfig0c2SUB.PDF.CONFIGADMIN000028QM Runtime Errors0c2SUB.RUNTIME.ERRORS00001BRSS Feeds0c2SUB.RSS.FEEDS000028SC-Lines By Lib (Pie)0c2SUB.SC.LIB.PIE000023SC-Lines By Prog0c2SUB.SC.LIB.COL000028SC-Progs by Lib (Pie)0c2SUB.SC.LIB.PIE00001BShow Vars0c2SUB.SHOW.VARS000021Source Viewer0c2SUB.SOURCE.VIEW000025System - Session0c2SUB.SHOW.SESSION000028PORTAL DASHBOARD0c2SUB.PORTAL.DASHBOARD000030PORTAL SALES REPORTS0c2SUB.PORTAL.SALES.REPORTS000034PORTAL AR REPORT SETUP0c2SUB.PORTAL.AR.REPORT.SETUP00002APORTAL AR REPORTS0c2SUB.PORTAL.AR.REPORTS00002APORTAL AP REPORTS0c2SUB.PORTAL.AP.REPORTS000034PORTAL AP REPORT SETUP0c2SUB.PORTAL.AP.REPORT.SETUP000024PORTAL MARGINS0c2SUB.PORTAL.MARGINS00003APORTAL SALES REPORT SETUP0c2SUB.PORTAL.SALES.REPORT.SETUP000040DISPLAY PORTAL AP BALANCE PIE CHART0c2SUB.PORTAL.AP.BALANCE.PIE000040DISPLAY PORTAL AR BALANCE PIE CHART0c2SUB.PORTAL.AR.BALANCE.PIE000034PORTAL DAYS TO PAY PIE0c2SUB.PORTAL.DAYS.TO.PAY.PIE00003CPORTAL SETUP DOCUMENTATION0c2SUB.PORTAL.SETUP.DOCUMENTATION000030PORTAL.DOCUMENTATION0c2SUB.PORTAL.DOCUMENTATION000040PORTAL.REPORTS.DOCUMENTATION0c2SUB.PORTAL.REPORTS.DOCUMENTATION000038PORTAL.RUN.DOCUMENTATION0c2SUB.PORTAL.RUN.DOCUMENTATION012057MVDBTOOLKIT.BP0c00010ABMVDBTOOLKIT.WFILEIO.D30c2      SUBROUTINE MVDBTOOLKIT.WFILEIO.D3(FOBJ)      **********************************************************************      *      * Copyright (C) 2017 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: June 7th 2018      * Description: WFILEIO MULTI PLATFORM WORKING WITH O/S FILES      *      **********************************************************************      *      * INOBJ      *      * { "ACTION":"READ,WRTE,DELETE",      *   "PATH":"PATH TO THE FILE",      *   "DATA":"DATA FOR A WRITE",      *   "dosletter":"OPTIONAL DOS LETTER TO ADD TO PATH",      *   "NEWLINE":"CR,LF,CRLF,DOS,UNIX",      *   "PERMISSIONS":"TBD"      *   "response": {      *       "data":"responsedata",      *       "status":1-ok, else no,      *       "statusmsg":"statusmsg"      *   }      * }      *      * need to know the existing platform      *PLATFORM.DELIM="\"      *PLATFORM.TYPE="WINDOWS"      *PLATFORM.MV="D3"      INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ            CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MV,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.DELIM,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)      FSTATUS=1      FSTATUSMSG="OK"      CALL @WOBJ.RTNE(FOBJ,"GET","action",FILEIO.ACTION,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","path",FILEIO.PATH,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","data",FILEIO.DATA,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","dosletter",FILEIO.DOSLETTER,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","newline",FILEIO.NEWLINE,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","permissions",FILEIO.PERMISSIONS,"",RERR)      *CALL @WOBJ.RTNE(OUTOBJ,"FROMSTRING","","{}","",RERR)      FILEIO.ACTION=OCONV(FILEIO.ACTION,"MCU")      FILEIO.NEWLINE=OCONV(FILEIO.NEWLINE,"MCU")      CALL @WOBJ.RTNE(FOBJ,"GET","work.parsed_fileio_file_name",PARSED.FILEIO.FILE.NAME,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.fileio_just_path",FILEIO.JUST.PATH,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MVTYPE,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.FILEDELIM,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","path",ORIG.PATH,"",RERR)      * FOR RIGHT NOW ON JBASE WE WILL JUST OPEN THE FILE USING FULL PATHING      * THIS DOES NOT DO ANYTHING!!!      BEGIN CASE         CASE PLATFORM.TYPE="WINDOWS"            REAL.PATH="dos:":PLATFORM.TYPE         CASE 1            REAL.PATH="unix:":PLATFORM.TYPE      END CASE      **      OPEN FILEIO.JUST.PATH TO FI ELSE         IF INDEX(FILEIO.JUST.PATH,"AppData\Local\Temp",1) OR INDEX(FILEIO.JUST.PATH,'\tmp',1) THEN            * SPECIAL PATCH FOR D3/WINDOWS.  D3 is running as a system user and it appears            * the Temp directory does not always exist            EXECUTE '!mkdir ':FILEIO.JUST.PATH         END         OPEN FILEIO.JUST.PATH TO FI ELSE            FSTATUS=0            FSTATUSMSG="Could not open file ":FILEIO.JUST.PATH            GOTO end.of.run         END      END      BEGIN CASE         CASE FILEIO.ACTION="READ"            GOSUB fileio.read         CASE FILEIO.ACTION="WRITE"            GOSUB fileio.write         CASE FILEIO.ACTION="DELETE"            GOSUB fileio.delete         CASE 1            FSTATUS=0            FSTATUSMSG="Invalid action"            GOTO end.of.run      END CASEend.of.run: *      CALL @WOBJ.RTNE(FOBJ,"SET.NUMBER", "response.status", FSTATUS,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"SET.STRING", "response.statusmsg", FSTATUSMSG, "", RERR)      RETURNfileio.read: *      REC=""      READ REC FROM FI, PARSED.FILEIO.FILE.NAME ELSE         FSTATUS=0         FSTATUSMSG="Could not find ":PARSED.FILEIO.FILE.NAME      END      CALL @WOBJ.RTNE(FOBJ,"SET.STRING","response.data",REC,"",RERR)      IF 0 THEN         PRINT "PATH   :":FILEIO.JUST.PATH         PRINT "ID     :":PARSED.FILEIO.FILE.NAME         PRINT "REC    :":REC      END      RETURNfileio.write: *      WRITE FILEIO.DATA ON FI, PARSED.FILEIO.FILE.NAME      RETURNfileio.delete: *      DELETE FI, PARSED.FILEIO.FILE.NAME      RETURN002F4DMVDBTOOLKIT.TEST0c2PRINT @(-1):"MVDBTOOLKIT.TEST"PRINTINCLUDE MVDBTOOLKIT.TEST.INCLUDEINCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJTEST.PLATFORM=FIELD(CMND,' ',2)TEST.MVTYPE=FIELD(CMND,' ',3)CALL MVDBTOOLKIT.WPLATFORM(PLATFORM.OBJ)IF TEST.PLATFORM = "" THEN   CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",TEST.PLATFORM,"",RERR)ENDIF TEST.MVTYPE = "" THEN   CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",TEST.MVTYPE,"",RERR)ENDIF TEST.PLATFORM = "" THEN   PRINT "Enter Platform: ":; INPUT TEST.PLATFORMENDIF TEST.MVTYPE = "" THEN   PRINT "Enter MVType: ":; INPUT TEST.MVTYPEENDIF TEST.PLATFORM='' OR TEST.MVTYPE='' THEN    PRINT "Usage: MVDBTOOLKIT PLATFORM MVTYPE"    PRINT    PRINT "PLATFORM=WINDOWS or LINUX"    PRINT "MVTYPE=JBASE,D3,UNIVERSE,UNIDATA"    STOPEND* GET ENVIRONMENTCALL MVDBTOOLKIT.WPLATFORM(PLATFORM.OBJ)CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","curllocation",CURLLOCATION,"",RERR)CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",PLATFORM,"",RERR)TEST='platform'; GOSUB start.testTEST.MSG=PLATFORM:"=":TEST.PLATFORMIF PLATFORM # TEST.PLATFORM THEN TEST.STATUS=0 ELSE TEST.STATUS=1GOSUB end.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",RESULT,"",RERR)TEST='mvtype'; GOSUB start.testTEST.MSG=RESULT:"=":TEST.MVTYPEIF RESULT # TEST.MVTYPE THEN TEST.STATUS=0 ELSE TEST.STATUS=1GOSUB end.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.DIR,"",RERR)CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","filedelim",FILEDELIM,"",RERR)TEST='filedelim'; GOSUB start.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","filedelim",FILEDELIM,"",RERR)TEST.MSG=FILEDELIMTEST.STATUS=1BEGIN CASE   CASE OCONV(PLATFORM,"MCU") = "LINUX" AND FILEDELIM="/"   CASE OCONV(PLATFORM,"MCU") = "WINDOWS" AND FILEDELIM="\"   CASE 1; TEST.STATUS=0END CASEGOSUB end.testTEST='tmpdir'; GOSUB start.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.DIR,"",RERR)TEST.MSG=TMP.DIRTEST.STATUS=1IF TMP.DIR="" THEN TEST.STATUS=0GOSUB end.testTEST='MVDBTOOLKIT.SWAP'GOSUB start.testS='TEST LINE TEST LINE'ORIG.STRING=SCALL MVDBTOOLKIT.SWAP(S,"ES","XX")IF S = "TXXT LINE TXXT LINE" THEN TEST.STATUS=1 ELSE TEST.STATUS=0TEST.MSG=SGOSUB end.test* Test 1 GetenvTEST="getenv"GOSUB start.testCALL MVDBTOOLKIT.WGETENV("PATH",PATH)IF PATH # "" THEN    TEST.MSG=PATH[1,60]    TEST.STATUS=1END ELSE    TEST.MSG=""    TEST.STATUS=0ENDGOSUB end.test* Test WEXECUTETEST="wexecute"; GOSUB start.testCMND='echo MVDBTOOLKIT.TEST'CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)CALL MVDBTOOLKIT.WEXECUTE(COBJ)CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)IF INDEX(CMND.RESULT,"MVDBTOOLKIT.TEST",1) THEN    TEST.MSG=CMND.RESULT    TEST.STATUS=1END ELSE    TEST.MSG=CMND.RESULT    TEST.STATUS=0ENDCONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSGGOSUB end.test* Test WFILEIOTEST="WFILEIO-WRITE"USER.NO=FIELD(OCONV('','U50BB'),' ',1)GOSUB start.testCALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)TMP.FILE.NAME=TMP.DIR:FILEDELIM:'TMP-':USER.NO:'.txt'TEST.MSG=TMP.FILE.NAMECALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.FILE.NAME,"",RERR)SAVE.FOBJ=FOBJTMP.DATA=TIMEDATE()CALL @WOBJ.RTNE(FOBJ,"SET","data",TMP.DATA,"",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUS.MSG,"",RERR)TEST.STATUS=RESPONSE.STATUSIF NOT(RESPONSE.STATUS) THEN TEST.MSG:=RESPONSE.STATUS.MSGGOSUB end.testIF NOT(TEST.STATUS) THEN STOP "Test Failed, no reason to continue"TEST='WFILEIO-READ'GOSUB start.test* NOW READ IT BACK INCALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)TEST.MSG="(":TMP.DATA:')=(':RESPONSE.DATA:")"TEST.STATUS=1IF TMP.DATA # RESPONSE.DATA THEN TEST.STATUS=0GOSUB end.testTEST="WFILEIO-DELETE"; GOSUB start.testFOBJ=SAVE.FOBJCALL @WOBJ.RTNE(FOBJ,"SET","action","DELETE","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)FOBJ=SAVE.FOBJCALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)RESPONSE.DATA=""CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUSMSG,"",RERR)TEST.STATUS=1TEST.MSG=TMP.FILE.NAME:' ':RESPONSE.STATUSIF RESPONSE.STATUS=0 AND RESPONSE.DATA="" THEN NULL ELSE TEST.STATUS=0GOSUB end.test* Let get our current directoryTEST="pwd"; GOSUB start.testIF OCONV(PLATFORM,"MCU") = "WINDOWS" THEN   CMND='echo %CD%'END ELSE   CMND='pwd'ENDCALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)CALL MVDBTOOLKIT.WEXECUTE(COBJ)CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)IF 1 THEN    TEST.MSG=CMND.RESULT    TEST.STATUS=1END ELSE    TEST.MSG=CMND.RESULT    TEST.STATUS=0ENDCONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSGGOSUB end.testMVDBTOOLKIT.LOCATION = CMND.RESULTIF 0 THEN* Lets verify we have curl!!!IF CURLLOCATION="" THEN CURLLOCATION="curl"TEST="default curl"; GOSUB start.testCMND=CURLLOCATION:' -V'CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)CALL MVDBTOOLKIT.WEXECUTE(COBJ)CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)BEGIN CASE   CASE INDEX(CMND.RESULT,"libcurl",1) AND 0    TEST.MSG=CMND.RESULT    TEST.STATUS=1   CASE OCONV(PLATFORM,"MCU")="WINDOWS"    TEST.MSG=CMND.RESULT    TEST.STATUS=2   CASE 1    TEST.MSG=0END CASECONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSGGOSUB end.test* Start looking for curlIF TEST.STATUS=2 THEN   CURLLOCATION="c:\progra~1\git\mingw64\bin\curl.exe"   TEST="git curl"; GOSUB start.test   CMND=CURLLOCATION:' -V'   CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)   CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)   CALL MVDBTOOLKIT.WEXECUTE(COBJ)   CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)   BEGIN CASE      CASE INDEX(CMND.RESULT,"libcurl",1) AND 0         TEST.MSG=CMND.RESULT         TEST.STATUS=1      CASE OCONV(PLATFORM,"MCU")="WINDOWS"         TEST.MSG=CMND.RESULT         TEST.STATUS=2      CASE 1         TEST.MSG=CMND.RESULT         TEST.STATUS=0   END CASE   CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG   GOSUB end.testENDIF TEST.STATUS=2 THEN   CURLLOCATION=MVDBTOOLKIT.LOCATION:"\mvdbtoolkit\curl\windows64\curl.exe"   TEST="mvdbtoolkit curl"; GOSUB start.test   CMND=CURLLOCATION:' -V'   CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)   CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)   CALL MVDBTOOLKIT.WEXECUTE(COBJ)   CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)   BEGIN CASE      CASE INDEX(CMND.RESULT,"libcurl",1) AND 0         TEST.MSG=CMND.RESULT         TEST.STATUS=1       CASE 1         TEST.STATUS=0         TEST.MSG=CMND   END CASE   CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG   GOSUB end.testENDENDTEST="WCALL"GOSUB start.testCALL @WOBJ.RTNE(OBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","method","POST","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","debug","N","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","url","https://httpbin.org/anything?field1=value1","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","insecure","Y","",RERR)  CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","headers","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","headers.X-TEST-HEADER","headertest","",RERR)  CALL @WOBJ.RTNE(OBJ,"SET.ARRAY","formfields","[]","",RERR) CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","formfields[-1]","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","formfields[0].name","field2","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","formfields[0].value","VALUE2$","",RERR) CALL @WOBJ.RTNE(SOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(SOBJ,"SET","name","field3","",RERR) CALL @WOBJ.RTNE(SOBJ,"SET","value","<EXAMPLE HTML>","",RERR) CALL @WOBJ.RTNE(SOBJ,"TOSTRING","",SJSON,"",RERR) CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","formfields[-1]",SJSON,"",RERR) CALL MVDBTOOLKIT.WCALL(OBJ) CALL @WOBJ.RTNE(OBJ,"GET","response.data",RESPONSE,"",RERR) OPEN "MVDBTOOLKIT.BP" TO FILE ELSE STOP *PRINT "RESPONSE=":RESPONSE WRITE RESPONSE ON FILE, "MVDBTOOLKIT.TEST.JSON" CALL @WOBJ.RTNE(OBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR) WRITE OUT.JSON ON FILE, "MVDBTOOLKIT.WCALL.JSON"  CALL @WOBJ.RTNE(OBJ,"GET","response.status",RESPONSE.STATUS,"",RERR) *PRINT 'RESPONSE.STATUS=':RESPONSE.STATUS:'  ': *IF RESPONSE.STATUS="200" THEN PRINT "OK" ELSE PRINT "FAIL" TEST.MSG=RESPONSE.STATUS IF RESPONSE.STATUS="200" THEN    TEST.STATUS=1 END ELSE    TEST.STATUS=0 END GOSUB end.test TEST='WCALL.HTTPTYPE' GOSUB start.test CALL @WOBJ.RTNE(OBJ,"GET","response.http_type",RESPONSE.HTTP.TYPE,"",RERR) *PRINT 'RESPONSE.HTTP_TYPE=':RESPONSE.HTTP.TYPE TEST.MSG=RESPONSE.HTTP.TYPE IF INDEX(TEST.MSG,'HTTP/',1) THEN    TEST.STATUS=1 END ELSE    TEST.STATUS=0 END GOSUB end.test CALL @WOBJ.RTNE(ROBJ,"FROMSTRING","",RESPONSE,"",RERR) TEST="WCALL.FIELD1" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","args.field1",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="value1" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.testTEST="WCALL.field2" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","form.field2",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="VALUE2$" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.testTEST="WCALL.field3" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","form.field3",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="<EXAMPLE HTML>" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.test TEST="WCALL.HEADER" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","headers.X-Test-Header",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="headertest" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.testTEST="WCALL.BODY"GOSUB start.test CALL @WOBJ.RTNE(OBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","method","POST","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","debug","N","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","url","https://httpbin.org/anything?field1=value1","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","insecure","N","",RERR) CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","headers","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","Content-Type","application/json","",RERR)  CALL @WOBJ.RTNE(TESTOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(TESTOBJ,"SET","test","value","",RERR) CALL @WOBJ.RTNE(TESTOBJ,"TOSTRING","",TESTJSON,"PRETTIFY",RERR) CALL @WOBJ.RTNE(OBJ,"SET.STRING","body",TESTJSON,"",RERR)  CALL MVDBTOOLKIT.WCALL(OBJ) CALL @WOBJ.RTNE(OBJ,"GET","response.data",RESPONSE,"",RERR)  WRITE RESPONSE ON FILE, "MVDBTOOLKIT.TESTBODY.JSON" CALL @WOBJ.RTNE(OBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR) WRITE OUT.JSON ON FILE, "MVDBTOOLKIT.WCALLBODY.JSON" CALL @WOBJ.RTNE(OBJ,"GET","response.status",RESPONSE.STATUS,"",RERR) *PRINT 'RESPONSE.STATUS=':RESPONSE.STATUS:'  ': *IF RESPONSE.STATUS="200" THEN PRINT "OK" ELSE PRINT "FAIL" TEST.MSG=RESPONSE.STATUS IF RESPONSE.STATUS="200" THEN    TEST.STATUS=1 END ELSE    TEST.STATUS=0 END GOSUB end.test TEST="WCALL.BODY.RESULT" GOSUB start.test * The testing web site does not send raw body back very well * we will just look for what we expect CONVERT CHAR(254):CHAR(253):CHAR(252):CHAR(10):CHAR(13) TO '' IN RESPONSE POS=INDEX(RESPONSE,'"form"',1) IF POS THEN RESPONSE=RESPONSE[POS,9999] TEST.MSG=RESPONSE IF INDEX(RESPONSE,'"test',1) AND INDEX(RESPONSE,'"value',1) THEN     TEST.STATUS=1 END ELSE     TEST.STATUS=0 END GOSUB end.test STOP*GOSUB start.testRETURN*process.error: *IF RERR<1> THEN   TEST.STATUS=-1   TEST.MSG=RERR<1>ENDRETURN**start.test: *TEST.STATUS=0TEST.MSG="Success"PRINT "":TEST[1,15]"L(#15)":RETURN*end.test: *PRINT "  ":TEST.MSG[1,50]"L(#50)":PRINT " ":PRE=''; AFT=''BEGIN CASE   CASE TEST.STATUS=2; ERROR="Warning"; PRE=''; AFT=''   CASE TEST.STATUS; ERROR="Passed"   CASE 1; ERROR="Passed"; PRE=@(-13); AFT=@(-14)END CASEPRINT PRE:"[":PRINT ERROR"L(#7)":PRINT "]":AFTRETURN 000CDEMVDBTOOLKIT.WCALLBODY.JSON0c2{  "method": "POST",   "debug": "N",   "url": "https://httpbin.org/anything?field1=value1",   "insecure": "N",   "headers": {    },   "Content-Type": "application/json",   "body": "{  \"test\": \"value\"  }",   "response": {    "headers": {      "Date": "Thu, 30 Apr 2020 05:09:09 GMT",       "Content-Type": "application/json",       "Content-Length": "608",       "Connection": "keep-alive",       "Server": "gunicorn/19.9.0",       "Access-Control-Allow-Origin": "*",       "Access-Control-Allow-Credentials": "true"      },     "status": 200,     "http_type": "HTTP/1.1",     "statusmsg": "OK",     "log": [      "* About to connect() to httpbin.org port 443 (#0)",       "*   Trying 34.230.193.231... connected",       "* Connected to httpbin.org (34.230.193.231) port 443 (#0)",       "* Initializing NSS with certpath: sql:/etc/pki/nssdb",       "*   CAfile: /etc/pki/tls/certs/ca-bundle.crt",       "  CApath: none",       "* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",       "* Server certificate:",       "* 	subject: CN=httpbin.org",       "* 	start date: Jan 18 00:00:00 2020 GMT",       "* 	expire date: Feb 18 12:00:00 2021 GMT",       "* 	common name: httpbin.org",       "* 	issuer: CN=Amazon,OU=Server CA 1B,O=Amazon,C=US",       "> POST /anything?field1=value1 HTTP/1.1",       "",       "> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",       "",       "> Host: httpbin.org",       "",       "> Accept: */*",       "",       "> Content-Length: 26",       "",       "> Content-Type: application/x-www-form-urlencoded",       "",       "> ",       "",       "} [data not shown]",       "< HTTP/1.1 200 OK",       "",       "< Date: Thu, 30 Apr 2020 05:09:09 GMT",       "",       "< Content-Type: application/json",       "",       "< Content-Length: 608",       "",       "< Connection: keep-alive",       "",       "< Server: gunicorn/19.9.0",       "",       "< Access-Control-Allow-Origin: *",       "",       "< Access-Control-Allow-Credentials: true",       "",       "< ",       "",       "{ [data not shown]",       "* Connection #0 to host httpbin.org left intact",       "* Closing connection #0"      ],     "data": "{  \"args\": {    \"field1\": \"value1\"  },   \"data\": \"\",   \"files\": {},   \"form\": {    \"{\\r\\n  \\\"test\\\": \\\"value\\\"\\r\\n  }\\n\": \"\"  },   \"headers\": {    \"Accept\": \"*/*\",     \"Content-Length\": \"26\",     \"Content-Type\": \"application/x-www-form-urlencoded\",     \"Host\": \"httpbin.org\",     \"User-Agent\": \"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2\",     \"X-Amzn-Trace-Id\": \"Root=1-5eaa5d75-49623fd72c6a4d01cec7a532\"  },   \"json\": null,   \"method\": \"POST\",   \"origin\": \"98.173.13.82\",   \"url\": \"https://httpbin.org/anything?field1=value1\"}",     "curl_cmnd": "curl -s -m 45 -X POST -D \"/tmp/WCALL-1.headers\" -v --stderr \"/tmp/WCALL-1.stderr\" --data-binary \"@/tmp/WCALL-1.body\" \"https://httpbin.org/anything?field1=value1\""    }  }000CE2MVDBTOOLKIT.WFILEIO.QM0c2SUBROUTINE MVDBTOOLKIT.WFILEIO.QM(FOBJ)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 7th 2018* Description: WFILEIO MULTI PLATFORM WORKING WITH O/S FILES - Clone of universe************************************************************************* INOBJ** { "ACTION":"READ,WRTE,DELETE",*   "PATH":"PATH TO THE FILE",*   "DATA":"DATA FOR A WRITE",*   "dosletter":"OPTIONAL DOS LETTER TO ADD TO PATH",*   "NEWLINE":"CR,LF,CRLF,DOS,UNIX",*   "PERMISSIONS":"TBD",*   "debug":"Y or N",*   "response": {*       "data":"responsedata",*       "status":1-ok, else no,*       "statusmsg":"statusmsg" *   }* }** need to know the existing platform*PLATFORM.DELIM="\"*PLATFORM.TYPE="WINDOWS"*PLATFORM.MV="D3"INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL @WOBJ.RTNE(FOBJ,"GET","debug",DO.DEBUG,"",RERR)IF OCONV(DO.DEBUG[1,1],"MCU") = "Y" OR DO.DEBUG="1" THEN DO.DEBUG=1 ELSE DO.DEBUG=""CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)FSTATUS=1FSTATUSMSG="OK"CALL @WOBJ.RTNE(FOBJ,"GET","action",FILEIO.ACTION,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","path",FILEIO.PATH,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","data",FILEIO.DATA,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","dosletter",FILEIO.DOSLETTER,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","newline",FILEIO.NEWLINE,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","permissions",FILEIO.PERMISSIONS,"",RERR)*CALL @WOBJ.RTNE(OUTOBJ,"FROMSTRING","","{}","",RERR)FILEIO.ACTION=OCONV(FILEIO.ACTION,"MCU")FILEIO.NEWLINE=OCONV(FILEIO.NEWLINE,"MCU")CALL @WOBJ.RTNE(FOBJ,"GET","work.parsed_fileio_file_name",PARSED.FILEIO.FILE.NAME,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.fileio_just_path",FILEIO.JUST.PATH,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MVTYPE,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.FILEDELIM,"",RERR)* FOR RIGHT NOW ON JBASE WE WILL JUST OPEN THE FILE USING FULL PATHINGOPENPATH FILEIO.JUST.PATH TO FI ELSE    FSTATUS=0    FSTATUSMSG="Could not open file ":FILEIO.JUST.PATH    GOTO end.of.runENDBEGIN CASE    CASE FILEIO.ACTION="READ"        GOSUB fileio.read    CASE FILEIO.ACTION="WRITE"        GOSUB fileio.write    CASE FILEIO.ACTION="DELETE"        GOSUB fileio.delete    CASE 1        FSTATUS=0        FSTATUSMSG="Invalid action"        GOTO end.of.runEND CASEend.of.run: *CALL @WOBJ.RTNE(FOBJ,"SET.NUMBER", "response.status", FSTATUS,"",RERR)CALL @WOBJ.RTNE(FOBJ,"SET.STRING", "response.statusmsg", FSTATUSMSG, "", RERR)RETURNfileio.read: *REC=""READ REC FROM FI, PARSED.FILEIO.FILE.NAME ELSE    FSTATUS=0    FSTATUSMSG="Could not find ":PARSED.FILEIO.FILE.NAMEENDCALL @WOBJ.RTNE(FOBJ,"SET.STRING","response.data",REC,"",RERR)IF 0 THEN    PRINT "PATH   :":FILEIO.JUST.PATH    PRINT "ID     :":PARSED.FILEIO.FILE.NAME    PRINT "REC    :":RECENDRETURNfileio.write: *WRITE FILEIO.DATA ON FI, PARSED.FILEIO.FILE.NAMERETURNfileio.delete: *DELETE FI, PARSED.FILEIO.FILE.NAMERETURN000EA0MVDBTOOLKIT.WCALL.JSON0c2{  "method": "POST",   "debug": "N",   "url": "https://httpbin.org/anything?field1=value1",   "insecure": "Y",   "headers": {    "X-TEST-HEADER": "headertest"    },   "formfields": [    {      "name": "field2",       "value": "VALUE2$"      },     {      "name": "field3",       "value": "<EXAMPLE HTML>"      }    ],   "response": {    "headers": {      "Date": "Thu, 30 Apr 2020 05:09:09 GMT",       "Content-Type": "application/json",       "Content-Length": "693",       "Connection": "keep-alive",       "Server": "gunicorn/19.9.0",       "Access-Control-Allow-Origin": "*",       "Access-Control-Allow-Credentials": "true"      },     "status": 200,     "http_type": "HTTP/1.1",     "statusmsg": "OK",     "log": [      "* About to connect() to httpbin.org port 443 (#0)",       "*   Trying 34.230.193.231... connected",       "* Connected to httpbin.org (34.230.193.231) port 443 (#0)",       "* Initializing NSS with certpath: sql:/etc/pki/nssdb",       "*   CAfile: /etc/pki/tls/certs/ca-bundle.crt",       "  CApath: none",       "* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",       "* Server certificate:",       "* 	subject: CN=httpbin.org",       "* 	start date: Jan 18 00:00:00 2020 GMT",       "* 	expire date: Feb 18 12:00:00 2021 GMT",       "* 	common name: httpbin.org",       "* 	issuer: CN=Amazon,OU=Server CA 1B,O=Amazon,C=US",       "> POST /anything?field1=value1 HTTP/1.1",       "",       "> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",       "",       "> Host: httpbin.org",       "",       "> Accept: */*",       "",       "> X-TEST-HEADER: headertest",       "",       "> Content-Length: 257",       "",       "> Expect: 100-continue",       "",       "> Content-Type: multipart/form-data; boundary=----------------------------9f61f37bacb1",       "",       "> ",       "",       "< HTTP/1.1 100 Continue",       "",       "} [data not shown]",       "< HTTP/1.1 200 OK",       "",       "< Date: Thu, 30 Apr 2020 05:09:09 GMT",       "",       "< Content-Type: application/json",       "",       "< Content-Length: 693",       "",       "< Connection: keep-alive",       "",       "< Server: gunicorn/19.9.0",       "",       "< Access-Control-Allow-Origin: *",       "",       "< Access-Control-Allow-Credentials: true",       "",       "< ",       "",       "{ [data not shown]",       "* Connection #0 to host httpbin.org left intact",       "* Closing connection #0"      ],     "data": "{  \"args\": {    \"field1\": \"value1\"  },   \"data\": \"\",   \"files\": {},   \"form\": {    \"field2\": \"VALUE2$\",     \"field3\": \"<EXAMPLE HTML>\"  },   \"headers\": {    \"Accept\": \"*/*\",     \"Content-Length\": \"257\",     \"Content-Type\": \"multipart/form-data; boundary=----------------------------9f61f37bacb1\",     \"Host\": \"httpbin.org\",     \"User-Agent\": \"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2\",     \"X-Amzn-Trace-Id\": \"Root=1-5eaa5d75-64172de2a2432626bf6a5f61\",     \"X-Test-Header\": \"headertest\"  },   \"json\": null,   \"method\": \"POST\",   \"origin\": \"98.173.13.82\",   \"url\": \"https://httpbin.org/anything?field1=value1\"}",     "curl_cmnd": "curl -s -m 45 -X POST -H \"X-TEST-HEADER: headertest\" -D \"/tmp/WCALL-1.headers\" -v --stderr \"/tmp/WCALL-1.stderr\" --form-string field2=\"VALUE2$\" --form-string field3=\"<EXAMPLE HTML>\" \"https://httpbin.org/anything?field1=value1\""    }  }00131FMVDBTOOLKIT.WFILEIO0c2SUBROUTINE MVDBTOOLKIT.WFILEIO(INOBJ)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 7th 2018* Description: WFILEIO MULTI PLATFORM WORKING WITH O/S FILES************************************************************************* INOBJ** { "ACTION":"READ,WRITE,DELETE",*   "PATH":"PATH TO THE FILE",*   "DATA":"DATA FOR A WRITE",*   "dosletter":"OPTIONAL DOS LETTER TO ADD TO PATH",*   "NEWLINE":"CR,LF,CRLF,DOS,UNIX",*   "PERMISSIONS":"TBD"*   "response": {*       "data":"responsedata",*       "status":1-ok, else no,*       "statusmsg":"statusmsg" *   }* }** need to know the existing platform*PLATFORM.DELIM="\"*PLATFORM.TYPE="WINDOWS"*PLATFORM.MV="D3"CALL MVDBTOOLKIT.WPLATFORM(POBJ)INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL @WOBJ.RTNE(POBJ,"GET","mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM.TYPE,"",RERR)FSTATUS=1FSTATUSMSG="OK"CALL @WOBJ.RTNE(INOBJ,"GET","action",FILEIO.ACTION,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","path",FILEIO.PATH,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","data",FILEIO.DATA,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","dosletter",FILEIO.DOSLETTER,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","newline",FILEIO.NEWLINE,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","permissions",FILEIO.PERMISSIONS,"",RERR)*CALL @WOBJ.RTNE(OUTOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(INOBJ,"SET.OBJECT","response","{}","",RERR)FILEIO.ACTION=OCONV(FILEIO.ACTION,"MCU")FILEIO.NEWLINE=OCONV(FILEIO.NEWLINE,"MCU")IF FILEIO.ACTION = "" THEN    FSTATUS=0    FSTATUSMSG="No action defined"    GOTO end.of.runENDIF FILEIO.PATH = "" THEN    FSTATUS=0    FSTATUSMSG="No path defined"    GOTO end.of.runENDPARSED.FILEIO.PATH=""L=LEN(FILEIO.PATH)FOR X=1 TO L   C=FILEIO.PATH[X,1]   IF C=PLATFORM.DELIM THEN      PARSED.FILEIO.PATH:=@AM   END ELSE      PARSED.FILEIO.PATH:=C   ENDNEXT X*PARSED.FILEIO.PATH=EXCHANGE(FILEIO.PATH,PLATFORM.DELIM,@AM)PARSED.FILEIO.PATH=FILEIO.PATHCONVERT PLATFORM.DELIM TO @AM IN PARSED.FILEIO.PATHPARSED.FILEIO.PARTS=DCOUNT(PARSED.FILEIO.PATH,@AM)* JBASE DOES NOT APPEAR TO HONOR WINDOWS ENVIROMENT VARIABLES IN THE OPEN* THIS IS MAKING %USERPROFILE% NOT WORK** WE ARE GOING TO LOOP THRU THE THE PARTS AN EXPAND THEM OURSELVES** THIS HAS BEEN TESTED ON JBASE WINDOWS SO FAR.*FOR P=1 TO PARSED.FILEIO.PARTS    THIS.PART=PARSED.FILEIO.PATH<P>    IF THIS.PART[1,1]='%' OR THIS.PART[1,1]="$" THEN        CONVERT '%$' TO '' IN THIS.PART * 9/4/2019 PAP Modified this to use mvdbtoolkit.wgetenv  *       IF GETENV(THIS.PART,NEW.THIS.PART) THEN *           PARSED.FILEIO.PATH<P>=NEW.THIS.PART *       END         CALL MVDBTOOLKIT.WGETENV(THIS.PART,NEW.THIS.PART)         IF NEW.THIS.PART # "" THEN PARSED.FILEIO.PATH<P>=NEW.THIS.PART    ENDNEXT PPARSED.FILEIO.FILE.NAME=PARSED.FILEIO.PATH<PARSED.FILEIO.PARTS>FILEIO.JUST.PATH=DELETE(PARSED.FILEIO.PATH,PARSED.FILEIO.PARTS)*FILEIO.JUST.PATH=EXCHANGE(FILEIO.JUST.PATH,@AM,PLATFORM.DELIM)CONVERT @AM TO PLATFORM.DELIM IN FILEIO.JUST.PATHCALL @WOBJ.RTNE(INOBJ,"SET.OBJECT","work","{}","",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.parsed_fileio_file_name",PARSED.FILEIO.FILE.NAME,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.fileio_just_path",FILEIO.JUST.PATH,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.platform",PLATFORM.TYPE,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET.OBJECT","response","{}","",RERR)* lets have a seperate routine for each platformBEGIN CASE    CASE FILEIO.ACTION="READ"    CASE FILEIO.ACTION="WRITE"    CASE FILEIO.ACTION="DELETE"    CASE 1        FSTATUS=0        FSTATUSMSG="Invalid action"        CALL @WOBJ.RTNE(INOBJ,"SET.NUMBER", "response.status", FSTATUS,"",RERR)        CALL @WOBJ.RTNE(INOBJ,"SET.STRING", "response.statusmsg", FSTATUSMSG, "", RERR)        GOTO end.of.runEND CASEBEGIN CASE    CASE PLATFORM.MV="D3"        FILEIO.RTNE="MVDBTOOLKIT.WFILEIO.D3"        CALL MVDBTOOLKIT.WFILEIO.D3(INOBJ)    CASE PLATFORM.MV="JBASE"        FILEIO.RTNE="MVDBTOOLKIT.W.FILEIO.JBASE"        CALL MVDBTOOLKIT.WFILEIO.JBASE(INOBJ)    CASE PLATFORM.MV="UNIVERSE"        FILEIO.RTNE="MVDBTOOLKIT.WFILEIO.UNIVERSE"        CALL MVDBTOOLKIT.WFILEIO.UNIVERSE(INOBJ)    CASE PLATFORM.MV="UNIDATA"        FILEIO.RTNE="MVDBTOOLKIT.WFILEIO.UNIDATA"        CALL MVDBTOOLKIT.WFILEIO.UNIDATA(INOBJ)    CASE PLATFORM.MV="QM"        * QM SUPPORTS OPENPATH        CALL MVDBTOOLKIT.WFILEIO.QM(INOBJ)   CASE 1        DEBUG        FSTATUS=0        FSTATUSMSG="Invalid Platform ":PLATFORM.MV        GOTO end.of.runEND CASEend.of.run: *RETURN0002CDMVDBTOOLKIT.TEST.JSON0c2{  "args": {    "field1": "value1"  },   "data": "",   "files": {},   "form": {    "field2": "VALUE2$",     "field3": "<EXAMPLE HTML>"  },   "headers": {    "Accept": "*/*",     "Content-Length": "257",     "Content-Type": "multipart/form-data; boundary=----------------------------9f61f37bacb1",     "Host": "httpbin.org",     "User-Agent": "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",     "X-Amzn-Trace-Id": "Root=1-5eaa5d75-64172de2a2432626bf6a5f61",     "X-Test-Header": "headertest"  },   "json": null,   "method": "POST",   "origin": "98.173.13.82",   "url": "https://httpbin.org/anything?field1=value1"}00027CMVDBTOOLKIT.TESTBODY.JSON0c2{  "args": {    "field1": "value1"  },   "data": "",   "files": {},   "form": {    "{\r\n  \"test\": \"value\"\r\n  }\n": ""  },   "headers": {    "Accept": "*/*",     "Content-Length": "26",     "Content-Type": "application/x-www-form-urlencoded",     "Host": "httpbin.org",     "User-Agent": "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",     "X-Amzn-Trace-Id": "Root=1-5eaa5d75-49623fd72c6a4d01cec7a532"  },   "json": null,   "method": "POST",   "origin": "98.173.13.82",   "url": "https://httpbin.org/anything?field1=value1"}00005EMVDBTOOLKIT.SWAP.DEFAULT0c2SUBROUTINE MVDBTOOLKIT.SWAP.DEFAULT(V,F,T)V=SWAP(V,F,T)RETURN00033CMVDBTOOLKIT.WGETENV0c2SUBROUTINE MVDBTOOLKIT.WGETENV(VAR.NAME,RETURN.VALUE)INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL MVDBTOOLKIT.WPLATFORM(POBJ)CALL @WOBJ.RTNE(POBJ,"GET","mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM.TYPE,"",RERR)* THIS FUNCTION IS A CROSS PLATFORM WGET VAR FUNCTIONBEGIN CASE    CASE PLATFORM.MV="D3" AND PLATFORM.TYPE="LINUX"        FILEIO.RTNE="MVDBTOOLKIT.WGETENV.D3"        CALL MVDBTOOLKIT.WGETENV.D3(VAR.NAME,RETURN.VALUE)    CASE PLATFORM.MV="JBASE"        FILEIO.RTNE="MVDBTOOLKIT.WGETENV.JBASE"        CALL MVDBTOOLKIT.WGETENV.JBASE(VAR.NAME,RETURN.VALUE)    CASE 1        CALL MVDBTOOLKIT.WGETENV.GENERIC(VAR.NAME,RETURN.VALUE,PLATFORM.MV,PLATFORM.TYPE)END CASEend.of.run: *RETURN000156MVDBTOOLKIT.WEXECUTE.INCLUDE0c2* COMMON FOR EXECUTE *COMMON /MVDBWEX/ EXECUTE.COMMANDCOMMON /MVDBWEX/ EXECUTE.DIRECTORYCOMMON /MVDBWEX/ EXECUTE.DOCAPTURECOMMON /MVDBWEX/ EXECUTE.RETURNINGCOMMON /MVDBWEX/ EXECUTE.RTNDATACOMMON /MVDBWEX/ EXECUTE.PASSLISTCOMMON /MVDBWEX/ MV.TYPECOMMON /MVDBWEX/ PLATFORMCOMMON /MVDBWEX/ EXECUTE.DEBUG000498MVDBTOOLKIT.WEXECUTE.D30c2SUBROUTINE MVDBTOOLKIT.WEXECUTE.D3(EOBJ)INCLUDE MVDBTOOLKIT.WEXECUTE.INCLUDE************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 12, 2018* Description: Execute library JBASE VERSION***********************************************************************INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJE.RESULTS=""E.RETURNING=""E.RTNDATA=""BEGIN CASE    CASE EXECUTE.DOCAPTURE="N"        EXECUTE '!':EXECUTE.COMMAND     CASE 1        EXECUTE '!':EXECUTE.COMMAND CAPTURING E.RESULTEND CASEIF EXECUTE.DEBUG="1"OR OCONV(EXECUTE.DEBUG[1,1],'MCU')='Y' THEN   WRITE.DEBUG=1   OPEN 'RESULT.FILE' TO RFILE ELSE WRITE.DEBUG=0   IF WRITE.DEBUG THEN       WRITE EXECUTE.COMMAND ON RFILE, 'WEXECUTE'   ENDENDCONVERT CHAR(0) TO '' IN E.RESULTCONVERT CHAR(255) TO '' IN E.RESULTCALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)IF MV.TYPE='UNIDATA' THEN E.RESULT=E.RESULT[1,LEN(E.RESULT)-1]CALL @WOBJ.RTNE(EOBJ,"SET.STRING","result.result",E.RESULT,"",RERR)RETURN0004E5MVDBTOOLKIT.WGETENV.GENERIC0c2SUBROUTINE MVDBTOOLKIT.WGETENV.GENERIC(VAR.NAME, RETURN.VALUE, MVTYPE, PLATFORM)RETURN.VALUE=""* WE ARE GOING TO JUST SHELL OUT AND GET THE ENVIRONMENT VARIABLE BASED* ON THE PLATFORMBEGIN CASE    CASE MVTYPE="UNIVERSE" AND PLATFORM="LINUX"        CMND='sh -c "echo $':VAR.NAME:'"'    CASE MVTYPE="UNIVERSE" AND PLATFORM="WINDOWS"        CMND='dos /c "echo %':VAR.NAME:'%"'    CASE (MVTYPE="JBASE" OR MVTYPE="D3") AND PLATFORM="LINUX"        CMND='!echo $':VAR.NAME    CASE MVTYPE="JBASE" AND PLATFORM="WINDOWS"         CMND='echo %':VAR.NAME:'%'    CASE MVTYPE="D3" AND PLATFORM="WINDOWS"        CMND='!echo %':VAR.NAME:'%'    CASE MVTYPE='UNIDATA' AND PLATFORM="WINDOWS"        CMND='!echo %':VAR.NAME:'%'    CASE MVTYPE='UNIDATA' AND PLATFORM="LINUX"        CMND='!echo $':VAR.NAME    CASE MVTYPE='QM' AND PLATFORM="WINDOWS"        * QM DOES HAVE SYSTEM(1025) TO GET ENVIRONMENT STUFF        * STICKING WITH THIS FOR NOW        CMND='!echo %':VAR.NAME:'%'    CASE MVTYPE='QM' AND PLATFORM="LINUX"        CMND='!echo $':VAR.NAME    CASE 1        CMND=''END CASEEXECUTE CMND CAPTURING RETURN.VALUEIF MVTYPE='UNIDATA' THEN    RETURN.VALUE=RETURN.VALUE[1,LEN(RETURN.VALUE)-1]ENDRETURN000322MVDBTOOLKIT.EXPAND.PATH0c2SUBROUTINE MVDBTOOLKIT.EXPAND.PATH(PASSED.PATH)INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL MVDBTOOLKIT.WPLATFORM(POBJ)CALL @WOBJ.RTNE(POBJ,"GET","mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM.TYPE,"",RERR)PARSED.PATH=PASSED.PATHCONVERT PLATFORM.DELIM TO @AM IN PARSED.PATHPARSED.PARTS=DCOUNT(PARSED.PATH,@AM)FOR P=1 TO PARSED.PARTS    THIS.PART=PARSED.PATH<P>    IF THIS.PART[1,1]='%' OR THIS.PART[1,1]="$" THEN        CONVERT '%$' TO '' IN THIS.PART         CALL MVDBTOOLKIT.WGETENV(THIS.PART,NEW.THIS.PART)         IF NEW.THIS.PART # "" THEN PARSED.PATH<P>=NEW.THIS.PART    ENDNEXT PCONVERT @AM TO PLATFORM.DELIM IN PARSED.PATHPASSED.PATH=PARSED.PATHRETURN00002DMVDBTOOLKIT.TEST.INCLUDE0c2CMND = SENTENCE()0001E1MVDBTOOLKIT.SWAP0c2SUBROUTINE MVDBTOOLKIT.SWAP(V,F,T)* MVDBTOOLKIT.SWAPINCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ* PLATFORM INDEPENDENT SWAP COMMANDCALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)BEGIN CASE    CASE MV.TYPE='UNIVERSE'        CALL MVDBTOOLKIT.SWAP.UNIVERSE(V,F,T)    CASE MV.TYPE='UNIDATA'        CALL MVDBTOOLKIT.SWAP.UNIDATA(V,F,T)    CASE 1        CALL MVDBTOOLKIT.SWAP.DEFAULT(V,F,T)END CASERETURN0004AFMVDBTOOLKIT.WEXECUTE.QM0c2SUBROUTINE MVDBTOOLKIT.WEXECUTE.QM(EOBJ)INCLUDE MVDBTOOLKIT.WEXECUTE.INCLUDE************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 12, 2018* Description: Execute library QM VERSION - CLONED FROM D3 VERSION***********************************************************************INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJE.RESULTS=""E.RETURNING=""E.RTNDATA=""BEGIN CASE    CASE EXECUTE.DOCAPTURE="N"        EXECUTE '!':EXECUTE.COMMAND     CASE 1        EXECUTE '!':EXECUTE.COMMAND CAPTURING E.RESULTEND CASEIF EXECUTE.DEBUG="1"OR OCONV(EXECUTE.DEBUG[1,1],'MCU')='Y' THEN   WRITE.DEBUG=1   OPEN 'RESULT.FILE' TO RFILE ELSE WRITE.DEBUG=0   IF WRITE.DEBUG THEN       WRITE EXECUTE.COMMAND ON RFILE, 'WEXECUTE'   ENDENDCONVERT CHAR(0) TO '' IN E.RESULTCONVERT CHAR(255) TO '' IN E.RESULTCALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)IF MV.TYPE='UNIDATA' THEN E.RESULT=E.RESULT[1,LEN(E.RESULT)-1]CALL @WOBJ.RTNE(EOBJ,"SET.STRING","result.result",E.RESULT,"",RERR)RETURN000778MVDBTOOLKIT.WPLATFORM0c2      SUBROUTINE MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)      **********************************************************************      *      * Copyright (C) 2017 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: June 12, 2018      * Description: WPLATFORM OBJ      *      **********************************************************************      *      *      * PLATFORMOBJ      *      * {      *   "platform":" WINDOWS OR LINUX",      *   "mvtype"  :" JBASE, D3, UNIDATA, UNIVERSE, OPENQM",      *   "tmpdir"  :"tmp dir"      * }      * nEW lINE      INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ            USE.DICT=1      OPEN "DICT","MVDBTOOLKIT.BP" TO DICT.MVDBTOOLKIT.BP ELSE USE.DICT=0      IF USE.DICT THEN         READ PLATFORMOBJ.JSON FROM DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON" ELSE PLATFORMOBJ.JSON=""      END      OPEN "MD" TO FI.MD ELSE         OPEN "VOC" TO FI.MD ELSE RETURN      END      * 02/06/2020 - Changed md item name to MV.PLATFORM.JSON to make it not tied to this package            IF PLATFORMOBJ.JSON="" THEN         CRT "No MV.PLATFORM.JSON IN MD!!!"         STOP      END      CONVERT CHAR(254) TO '' IN PLATFORMOBJ.JSON      CALL @WOBJ.RTNE(PLATFORMOBJ,"FROMSTRING","",PLATFORMOBJ.JSON,"",RERR)      * 9/2/2019 PAP - We now figure out filedelim vs passing it in original config filedelim      CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)      IF PLATFORM="WINDOWS" THEN DELIM = "\" ELSE DELIM = "/"      CALL @WOBJ.RTNE(PLATFORMOBJ,"SET","filedelim",DELIM,"",RERR)      CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","tmpdir",TMP.DIR,"",RERR)      CALL @WOBJ.RTNE(PLATFORMOBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR)      WRITE OUT.JSON ON DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON"      RETURN0006D0MVDBTOOLKIT.ENCODE0c2SUBROUTINE MVDBTOOLKIT.ENCODE(IN.STR,OUT.STR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: encode json string*************************************************************************** THIS PROGRAM WILL CONVERT ALL BAD CHARACTERS TO AN ESCAPED CHARACTER***EQU CR TO CHAR(13), LF TO CHAR(10), TB TO CHAR(9), BS TO CHAR(8), FF TO CHAR(12)NL = CR:LFPRETTIFYCR=""**OPEN 'RESULT.FILE' TO RFILE ELSE STOP* WE NEED TO ENCODE* " = \"   (34)* \ = \\    (92)* / = \/* CHAR(7) = \b* CHAR(13) = \r* char(10) = \n* char(12) = \f* char(9)  = \tOUT.STR=''L=LEN(IN.STR)CONVERT @AM TO LF IN IN.STR; * LETS SWITCH 254 TO LF BE DEFAULTFOR X=1 TO L    C=IN.STR[X,1]    SEQ.C=SEQ(C)    ENCODE=0    *IF SEQ.C < 32 THEN ENCODE=1; * BELOW SPACE    *IF SEQ.C > 32 AND SEQ.C < 48 THEN ENCODE=1; * LETS ENCODE ALL OF THIS !@$%^&*()    IF SEQ.C=34 THEN ENCODE=1    IF SEQ.C=92 THEN ENCODE=1    * IF SEQ.C=47 THEN ENCODE=1    *IF SEQ.C > 126 THEN ENCODE = 1; * LETS ENCODE ALL THE HIGH ENTRIES    *IF SEQ.C >= 91 AND SEQ.C <= 96 THEN ENCODE=1    IF ENCODE THEN        BEGIN CASE            CASE SEQ.C=7; OUT.STR='\b'            CASE C='\'; OUT.STR:='\\'                *CASE C='/'; OUT.STR:='\/'            CASE C='"'; OUT.STR:='\"'            CASE SEQ.C=10                OUT.STR:='\n'                IF PRETTIFYCR THEN OUT.STR:=NL            CASE SEQ.C=13; OUT.STR:='\r'            CASE SEQ.C=12; OUT.STR:='\f'            CASE 1; OUT.STR:='\u00':OCONV(C,'MX0C')        END CASE    END ELSE        OUT.STR=OUT.STR:C    ENDNEXT XRETURNEND002A1DMVDBTOOLKIT.WCALL0c2SUBROUTINE MVDBTOOLKIT.WCALL(PASSED.WOBJ)************************************************************************ Copyright (C) 2018 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 15, 2018* Description: WCALL Library************************************************************************ @WOBJ.RTNE* { "method":"GET,PUT,POST,ETC",*    "url":"URL TO CALL",*    "headers": { "HEADERNAME":"VALUE", "HEADERNAME":"VALUE" },*    "body":"BODY",*    "formfields": [*         {*            "name":"field name",*            "value":"field value",*            "fieldtype":"blank or file" for now*         }*     ],*    "datafields": [*         {*            "name":"field name",*            "value":"field value",*            "fieldtype":"blank or file" for now*         }*     ],*    "insecure":"Yes,Y,YES - Sets the -k on curl",*    "timeout": ## (default is 45),*    "options":"options to add to curl command",*    "debug":"Y or N",*    "response": {*        "result":"RESULT",*        "status":"STATUS",*        "statusmsg":"STATUS MSG",*        "http_type": "http type",*        "curl_cmnd":"Actual curl command created",*         "error": "error",*         "log": [ "log output line1", "log output line 2" ],*        "headers": { "headername":"header value","headername2":"headervalue" }*    }*  }INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL MVDBTOOLKIT.WPLATFORM(POBJ)CALL @WOBJ.RTNE(POBJ,"GET","mvtype",MV.TYPE,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",FILE.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","curllocation",CURLLOCATION,"",RERR); * change #19IF MV.TYPE="" THEN   CALL @WOBJ.RTNE(POBJ,"GET","error",THIS.ERROR,"",RERR)   PRINT "NO MV TYPE: ":THIS.ERROR   RETURNENDITEMS.TO.DELETE=""; * PATH TO EACH FILE TO DELETECALL @WOBJ.RTNE(POBJ,"GET","tmpdir",TMP.DIR,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","debug",DO.DEBUG,"",RERR)IF OCONV(DO.DEBUG[1,1],"MCU")="Y" OR DO.DEBUG="1" THEN DO.DEBUG=1 ELSE DO.DEBUG=""CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","method",WEB.METHOD,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","url",WEB.URL,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","body",WEB.BODY,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","timeout",WEB.TIMEOUT,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"KEYS","headers",WEB.HEADERS,"",RERR)IF NOT(WEB.TIMEOUT) THEN WEB.TIMEOUT=45CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","insecure",WEB.INSECURE,"",RERR)IF OCONV(WEB.INSECURE[1,1],'MCU') = "Y" THEN WEB.INSECURE=1 ELSE WEB.INSECURE=0CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.OBJECT","response","{}","",RERR)IF TMP.DIR="" THEN BEGIN CASE    CASE PLATFORM="LINUX"       TMP.DIR="/tmp"    CASE INDEX(PLATFORM,"WINDOWS",1) AND MV.TYPE="JBASE"       TMP.DIR="%HOME%"    CASE INDEX(PLATFORM,"WINDOWS",1)       TMP.DIR="%USERPROFILE%\AppData\Local\Temp"    CASE 1       TMP.DIR="/tmp" END CASEENDCALL MVDBTOOLKIT.EXPAND.PATH(TMP.DIR)* 4/6/2020 - Change #19.  IF CURLLOCATION # "" THEN   CMND=CURLLOCATIONEND ELSE   CMND="curl"ENDCMND:=" -s"CMND:=' -m ':WEB.TIMEOUTCMND:=' -X ':WEB.METHODCALL @WOBJ.RTNE(PASSED.WOBJ,"GET","options",WEB.OPTIONS,"",RERR)IF WEB.OPTIONS # "" THEN   CMND:=' ':WEB.OPTIONSENDWEB.NUM.HEADERS=DCOUNT(WEB.HEADERS,@SVM)FOR H=1 TO WEB.NUM.HEADERS   HEADER.NAME=WEB.HEADERS<1,1,H>   CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","headers.":HEADER.NAME,HEADER.VALUE,"",RERR)   CALL MVDBTOOLKIT.ENCODE(HEADER.VALUE,ENCODED.HEADER.VALUE)   CMND:=' -H "':HEADER.NAME:': ':ENCODED.HEADER.VALUE:'"'NEXT HUSER.NO=FIELD(OCONV('','U50BB'),' ',1)SESSION.ID="WCALL-":USER.NOTMP.DIR:=FILE.DELIM* add in dumping of headersCMND:=\ -D "\:TMP.DIR:SESSION.ID:\.headers"\ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:'.headers'* write out stderrCMND:=\ -v --stderr "\:TMP.DIR:SESSION.ID:\.stderr"\ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:\.stderr\CALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)SAVE.FOBJ=FOBJIF WEB.BODY # "" THEN   *CALL @WOBJ.RTNE(EOBJ,"SET.ARRAY","data","[]","",RERR)   *CALL @WOBJ.RTNE(EOBJ,"SET.STRING","data[0]",WEB.BODY,"",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","data",WEB.BODY,"",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:'.body',"",RERR)   ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:'.body'   CALL MVDBTOOLKIT.WFILEIO(FOBJ)   CMND:=' --data-binary "@':TMP.DIR:SESSION.ID:'.body"'   *CMND:='  --data-binary @-'END* form fields *CALL @WOBJ.RTNE(PASSED.WOBJ,"LENGTH","formfields",NUM.FORMFIELDS,"",RERR)FOR X=1 TO NUM.FORMFIELDS P="formfields[":X-1:"]" CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.name',FIELD.NAME,"",RERR) CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.value',FIELD.VALUE,"",RERR) CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.fieldtype',FIELD.TYPE,"",RERR) IF TRIM(FIELD.NAME) # "" THEN    * < > @ ALL MEAN SPECIAL THINGS WITH A -F.  If that exists in the file you need    * to use --form-string    BEGIN CASE       CASE INDEX(FIELD.VALUE,CHAR(13),1) OR INDEX(FIELD.VALUE,CHAR(10),1)         * WE NEED TO WRITE THIS OUT!         TMP.CMND="-F "            CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)            CALL @WOBJ.RTNE(FOBJ,"SET","data",FIELD.VALUE,"",RERR)            CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:'.field':X-1,"",RERR)            ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:'.field':X-1            FIELD.VALUE="@":TMP.DIR:SESSION.ID:'.field':X-1            CALL MVDBTOOLKIT.WFILEIO(FOBJ)         * NEED TO WRITE THE CONTENT OUT TO A TMP FILE *       CASE INDEX(FIELD.VALUE,'!',1) OR INDEX(FIELD.VALUE,'<',1) OR INDEX(FIELD.VALUE,'>',1) OR INDEX(FIELD.VALUE,'@',1) OR INDEX(FIELD.VALUE,'$',1) AND FIELD.TYPE # "file"         TMP.CMND="--form-string "       CASE 1         TMP.CMND="-F "    END CASE    TMP.CMND:=FIELD.NAME:'="'    TMP.CMND:=FIELD.VALUE:'"'    CMND:=' ':TMP.CMND ENDNEXT X* form fields *CALL @WOBJ.RTNE(PASSED.WOBJ,"LENGTH","datafields",NUM.FORMFIELDS,"",RERR)FOR X=1 TO NUM.FORMFIELDS      P="datafields[":X-1:"]"      CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.name',FIELD.NAME,"",RERR)      CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.value',FIELD.VALUE,"",RERR)      CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.fieldtype',FIELD.TYPE,"",RERR)      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,'@','%40')      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,'$','%24')      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,'/','%2F')      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,':','%3A')      IF TRIM(FIELD.NAME) # "" THEN         TMP.CMND="-d "         TMP.CMND:=FIELD.NAME:'="'         TMP.CMND:=FIELD.VALUE:'"'         CMND:=' ':TMP.CMND      ENDNEXT X* NOW ADD THE URLCALL MVDBTOOLKIT.SWAP(WEB.URL,' ','%20')CALL MVDBTOOLKIT.SWAP(WEB.URL,'@','%40')CALL MVDBTOOLKIT.SWAP(WEB.URL,'$','%24')*WEB.URL=SWAP(WEB.URL,'/','%2F')CMND:=' "':WEB.URL:'"'* CALL WEXECUTECALL @WOBJ.RTNE(EOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(EOBJ,"SET","command",CMND,"",RERR)CALL @WOBJ.RTNE(EOBJ,"SET","debug",DO.DEBUG,"",RERR); * LAY IN DEBUGGING PARAMIF WEB.BODY # "" THEN   * CALL @WOBJ.RTNE(EOBJ,"SET","data[0]",WEB.BODY,"",RERR)ENDCALL MVDBTOOLKIT.WEXECUTE(EOBJ); * DO THE CALL* READ IN THE HEADERSCALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:".headers","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.HEADERS,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.headers",RESPONSE.HEADERS,"",RERR)* Lets break the headers down into an arrayCALL @WOBJ.RTNE(PASSED.WOBJ,"SET.OBJECT","response.headers","{}","",RERR)NUM.HEADERS=DCOUNT(RESPONSE.HEADERS,@AM)HTTP.TYPE=''; HTTP.STATUS.CODE=''; HTTP.MSG=''FOR H=1 TO NUM.HEADERS   HEADER.LINE=RESPONSE.HEADERS<H>   IF HEADER.LINE[1,4]="HTTP" AND NOT(INDEX(HEADER.LINE,":",1)) THEN      HTTP.TYPE=FIELD(HEADER.LINE,' ',1)      HTTP.STATUS.CODE=FIELD(HEADER.LINE,' ',2)      HTTP.STATUS.MSG=FIELD(HEADER.LINE,' ',3,99)   END ELSE      HEADER.NAME=TRIM(FIELD(HEADER.LINE,':',1))      CONVERT CHAR(13):CHAR(10) TO '' IN HEADER.NAME; * CATCHES BLANK LINES      HEADER.VALUE=FIELD(HEADER.LINE,':',2,999999)      IF  HEADER.VALUE[1,1]=' ' THEN HEADER.VALUE=HEADER.VALUE[2,LEN(HEADER.VALUE)]; * messy left trim      CONVERT CHAR(13):CHAR(10) TO '' IN HEADER.VALUE; * STRIP AN NEW LINES      IF HEADER.NAME # "" THEN         * NOW PUT THE HEADER INTO OUR ARRAY         CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.headers.":HEADER.NAME,HEADER.VALUE,"",RERR)      END   ENDNEXT HCALL @WOBJ.RTNE(PASSED.WOBJ,"SET.NUMBER","response.status",HTTP.STATUS.CODE,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.http_type",HTTP.TYPE,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.statusmsg",HTTP.STATUS.MSG,"",RERR)* READ IN STDERR (LOG) AND POST AS A ARRAYFOBJ=SAVE.FOBJCALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:'.stderr',"",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.STDERR,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.ARRAY","response.log","[]","",RERR)CONVERT CHAR(13) TO @AM IN RESPONSE.STDERRCONVERT CHAR(10) TO "" IN RESPONSE.STDERRNUM.LINES=DCOUNT(RESPONSE.STDERR,@AM)* 4/2/2020 pap  - Look for bad curl statement!!GOOD.CURL=1CURL.BAD.MSG=""FOR L=1 TO NUM.LINES    LINE=RESPONSE.STDERR<L>    BEGIN CASE      CASE INDEX(LINE,'curl:',1)         * LETS CAPTURE THE FIRST ONE         IF CURL.BAD.MSG = "" THEN CURL.BAD.MSG=TRIM(FIELD(LINE,':',2,999))         GOOD.CURL=0      CASE INDEX(LINE,'warning:',1)    END CASE    CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.log[-1]",LINE,"",RERR)NEXT LIF NOT(GOOD.CURL) THEN   CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.NUMBER","response.status","400","",RERR)   CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.statusmsg",CURL.BAD.MSG,"",RERR)END*CALL @WOBJ.RTNE(EOBJ,"TOSTRING","",TEST.JSON,"PRETTIFY",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","result.result",EXECUTE.RESULT,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.data",EXECUTE.RESULT,"",RERR)end.of.call: ** XDELETE REQUIRED FILESNUM.ITEMS.TO.DELETE=DCOUNT(ITEMS.TO.DELETE,@AM)FOR I=1 TO NUM.ITEMS.TO.DELETE      ITEM.TO.DELETE=ITEMS.TO.DELETE<I>      FOBJ=SAVE.FOBJ      CALL @WOBJ.RTNE(FOBJ,"SET","action","DELETE","",RERR)      CALL @WOBJ.RTNE(FOBJ,"SET","path",ITEM.TO.DELETE,"",RERR)      IF DO.DEBUG THEN         CRT "Normally trying to delete: ":ITEM.TO.DELETE      END ELSE         CALL MVDBTOOLKIT.WFILEIO(FOBJ)      ENDNEXT ICALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.curl_cmnd",CMND,"",RERR)RETURN00018CMVDBTOOLKIT.WOBJ.CHOOSE.WOBJ0c2* Code to determine default wobj library to use* This needs to change for MVDBTOOLKIT build, defaults to WOBJWOBJ.RTNE="WOBJ"NO.MD.FILE=0OPEN "MD" TO FILE.MD ELSE    OPEN "VOC" TO FILE.MD ELSE NO.MD.FILE=1ENDIF NOT(NO.MD.FILE) THEN    READ WOBJ.CONF FROM FILE.MD, "WOBJ.CONF" ELSE WOBJ.CONF=""    IF WOBJ.CONF<3> # "" THEN WOBJ.RTNE=WOBJ.CONF<3>END0001BCMVDBTOOLKIT.WGETENV.D30c2SUBROUTINE MVDBTOOLKIT.WGETENV.D3(VAR.NAME, RETURN.VALUE)RETURN.VALUE=""* Gets and displays the PATH environment variablecfunction unix.builtinpointer=(char*)%getenv(VAR.NAME)if pointer = 0 then   RETURN.VALUE=""end else* We got a C pointer the path variable. Copy it* into pick variable   char path[1024]   %strcpy(path, (char*)pointer)   path = field(path,char(0),1)   RETURN.VALUE=pathendRETURN003E55MVDBTOOLKIT.CONFIG0c2      PRINT @(-1):"MVDBTOOLKIT.CONFIG"      PRINT      COMMON /MVMKCOM/ MVMAKE.SUB.COMMON.INFO      MVMAKE.SUB.COMMON.INFO=""; * DO NOT USE FOR THIS VERSION      IF MVMAKE.SUB.COMMON.INFO="" OR MVMAKE.SUB.COMMON.INFO = "0" THEN         *    CRT "MVDBTOOLKIT.CONFIG MUST BE CALLED FROM MVMAKE"         *    STOP      END      INCLUDE MVDBTOOLKIT.TEST.INCLUDE      INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ      OPEN "DICT","MVDBTOOLKIT.BP" TO DICT.MVDBTOOLKIT.BP ELSE STOP      * 4/29/2020 - pap - This entire excercise it to get MV.PLATFORM.JSON populated the      *                   first time.  MVMAKE already asked the questions, if the file did      *                   not exist those answers will be passed to use via the common.      *                   The reason mvmake cannot fix this is the file to the dictionary      *                   is created later.  If MVmake tries to write it out it has to      *                   read it in properly due to items this process populates, such as      *                   TMPDIR.  If the package does not properly install then      *                   WOBJ may not be available.  Better to do it all here.      *      *                   Therefore we manually read the file, update PLATFORM and MVTYPE      *                   and write it back.  We then call WPLATFORM and move on as normal      READ PLATFORM.JSON FROM DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON" ELSE PLATFORM.JSON="{}"      IF TRIM(PLATFORM.JSON) = "" THEN PLATFORM.JSON="{}"      CALL @WOBJ.RTNE(PLATFORM.OBJ,"FROMSTRING","",PLATFORM.JSON,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",MVTYPE,"",RERR)      IF MVMAKE.SUB.COMMON.INFO<2> # "" THEN PLATFORM=MVMAKE.SUB.COMMON.INFO<2>      IF MVMAKE.SUB.COMMON.INFO<3> # "" THEN MVTYPE=MVMAKE.SUB.COMMON.INFO<3>      IF PLATFORM="" OR MVTYPE="" THEN         ** LETS FIGURE OUT THE PLATFORM **         EXECUTE 'jdiag' CAPTURING RESULT         RESULT=OCONV(RESULT,"MCU")         IF INDEX(RESULT,'JBASE',1) THEN            MVTYPE="JBASE"            OS.POS=INDEX(RESULT,"OS RELEASE",1)            OS.TYPE=RESULT[OS.POS,9999]            OS.TYPE=OS.TYPE<1,1,1>            OS.TYPE=OCONV(OS.TYPE,"MCU")            IF INDEX(OS.TYPE,"WINDOWS",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE 'WHICH' CAPTURING RESULT         RESULT=OCONV(RESULT,"MCU")         IF INDEX(RESULT,"D3",1) THEN            MVTYPE="D3"            IF INDEX(RESULT,"WINDOWS",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE 'CT ERRMSG 335 (N' CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"MVBASE",1) THEN            MVTYPE="MVBASE"; * NOT SUPPORTED            GOTO end.of.mvtype         END         EXECUTE "VERSION" CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"UNIDATA",1) THEN            MVTYPE="UNIDATA"            EXECUTE '!SET' CAPTURING OS.TYPE            OS.TYPE=OCONV(OS.TYPE,'MCU')            IF INDEX(OS.TYPE,"WINDIR",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE "CT VOC QM.ACCOUNTS" CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"QMSYS",1) THEN            MVTYPE="QM"            EXECUTE '!SET' CAPTURING OS.TYPE            OS.TYPE=OCONV(OS.TYPE,'MCU')            IF INDEX(OS.TYPE,"WINDIR",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE 'CT VOC UVPROMPT' CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"1 V",1) THEN            MVTYPE="UNIVERSE"            EXECUTE 'sh -c "pwd"' CAPTURING RESULT            IF INDEX(OCONV(RESULT,"MCU"),"NOT AVAILABLE",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         ENDend.of.mvtype: *         IF PLATFORM="" THEN            PRINT "NO PLATFORM FOUND"; STOP            PRINT "ENTER PLATFORM (LINUX OR WINDOWS)[":PLATFORM:"]: ":; INPUT TMP.ANS            IF TMP.ANS # "" THEN PLATFORM=TMP.ANS            PLATFORM=OCONV(PLATFORM,"MCU")            BEGIN CASE               CASE PLATFORM="WINDOWS"                  D3.PREFIX="dos"                  PLATFORM.DELIM="\"               CASE PLATFORM="LINUX"                  D3.PREFIX="unix"                  PLATFORM.DELIM="/"               CASE 1                  CRT "Invalid Platform ":PLATFORM; STOP            END CASE         END         IF MVTYPE="" THEN            PRINT "NO MVTYPE FOUND"; STOP            PRINT "ENTER MVTYPE (JBASE, QM, D3, UNIVERSE, UNIDATA)[":MVTYPE:"] ":; INPUT TMP.ANS            IF TMP.ANS # "" THEN MVTYPE = TMP.ANS            MVTYPE=OCONV(MVTYPE,"MCU")            BEGIN CASE               CASE MVTYPE="JBASE"               CASE MVTYPE="QM"               CASE MVTYPE="D3"               CASE MVTYPE="UNIVERSE"               CASE MVTYPE="UNIDATA"               CASE 1                  CRT "Invalid MVTYPE"; STOP            END CASE         END      END      MVMAKE.SUB.COMMON.INFO<1>='REBUILD'      MVMAKE.SUB.COMMON.INFO<2>=PLATFORM      MVMAKE.SUB.COMMON.INFO<3>=MVTYPE      PRINT "Platform:      ":PLATFORM      PRINT "MV type :      ":MVTYPE      PRINT      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","mvtype",MVTYPE,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","platform",MVMAKE.SUB.COMMON.INFO<2>,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","mvtype",MVMAKE.SUB.COMMON.INFO<3>,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"TOSTRING","",PLATFORM.JSON,"PRETTIFY",RERR)      CONVERT CHAR(13) TO @AM IN PLATFORM.JSON      CONVERT CHAR(10) TO '' IN PLATFORM.JSON      WRITE PLATFORM.JSON ON DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON"      CALL MVDBTOOLKIT.WPLATFORM(PLATFORM.OBJ)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",MVTYPE,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","filedelim",FILEDELIM,"",RERR)      IF PLATFORM = "" THEN         CRT "No platform configured!!!"; STOP      END      IF MVTYPE = "" THEN         CRT "No MVType configured!!!"; STOP      END      * GET ENVIRONMENT      * Let get our current directory      TEST="pwd"; GOSUB start.test      IF OCONV(PLATFORM,"MCU") = "WINDOWS" THEN         CMND='echo %CD%'      END ELSE         CMND='pwd'      END      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      CONVERT CHAR(13):CHAR(10) TO '' IN CMND.RESULT      TEST.STATUS=1      TEST.MSG=CMND.RESULT      GOSUB end.test      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.PATH,"",RERR)      IF TMP.PATH="" THEN         IF MVMAKE.SUB.COMMON.INFO<5>="" THEN MVMAKE.SUB.COMMON.INFO<5>="mvdbtoolkit"         BEGIN CASE            CASE MVTYPE="D3" AND PLATFORM="LINUX"               * DANG D3 HAS IT'S OWN DANG FILE SYSTEM, LETS JUST CREATE A TMP DIR AND MOVE               TMP.PATH="/tmp"            CASE MVTYPE="D3" AND PLATFORM="LINUX"               TMP.DATH="c:\tmp"               EXECUTE '!mkdir c:\tmp'            CASE OCONV(MVMAKE.SUB.COMMON.INFO<5>,"MCU") = "MVDBTOOLKIT"               * WE HAVE RELATIVE POSITIONING               TMP.PATH=CMND.RESULT:FILEDELIM:"TMP"               MVDBTOOLKIT.LOCATION=CMND.RESULT            CASE 1               TMP.PATH=MVMAKE.SUB.COMMON.INFO<5>:FILEDELIM:"TMP"               MVDBTOOLKIT.LOCATION=MVMAKE.SUB.COMMON.INFO<5>         END CASE      END      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","tmpdir",TMP.PATH,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","mvdbtoolkitlocation",MVDBTOOLKIT.LOCATION,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","curllocation",CURLLOCATION,"",RERR)      TEST='tmpdir'; GOSUB start.test      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.DIR,"",RERR)      TEST.MSG=TMP.DIR      TEST.STATUS=1      IF TMP.DIR="" THEN TEST.STATUS=0      GOSUB end.test      TEST='MVDBTOOLKIT.SWAP'      GOSUB start.test      S='TEST LINE TEST LINE'      ORIG.STRING=S      CALL MVDBTOOLKIT.SWAP(S,"ES","XX")      IF S = "TXXT LINE TXXT LINE" THEN TEST.STATUS=1 ELSE TEST.STATUS=0      TEST.MSG=S      GOSUB end.test      * Test 1 Getenv      TEST="getenv"      GOSUB start.test      CALL MVDBTOOLKIT.WGETENV("PATH",PATH)      IF PATH # "" THEN         TEST.MSG=PATH[1,60]         TEST.STATUS=1      END ELSE         TEST.MSG=""         TEST.STATUS=0      END      GOSUB end.test      * Test WEXECUTE      TEST="wexecute"; GOSUB start.test      CMND='echo MVDBTOOLKIT.TEST'      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      IF INDEX(CMND.RESULT,"MVDBTOOLKIT.TEST",1) THEN         TEST.MSG=CMND.RESULT         TEST.STATUS=1      END ELSE         TEST.MSG=CMND.RESULT         TEST.STATUS=0      END      CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG      GOSUB end.test      * Test WFILEIO      TEST="WFILEIO-WRITE"      USER.NO=FIELD(OCONV('','U50BB'),' ',1)      GOSUB start.test      CALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)      TMP.FILE.NAME=TMP.DIR:FILEDELIM:'TMP-':USER.NO:'.txt'      TEST.MSG=TMP.FILE.NAME      CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.FILE.NAME,"",RERR)      SAVE.FOBJ=FOBJ      TMP.DATA=TIMEDATE()      CALL @WOBJ.RTNE(FOBJ,"SET","data",TMP.DATA,"",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUS.MSG,"",RERR)      TEST.STATUS=RESPONSE.STATUS      IF NOT(RESPONSE.STATUS) THEN TEST.MSG:=RESPONSE.STATUS.MSG      GOSUB end.test      IF NOT(TEST.STATUS) THEN STOP "Test Failed, no reason to continue"      TEST='WFILEIO-READ'      GOSUB start.test      * NOW READ IT BACK IN      CALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)      TEST.MSG="(":TMP.DATA:')=(':RESPONSE.DATA:")"      TEST.STATUS=1      IF TMP.DATA # RESPONSE.DATA THEN TEST.STATUS=0      GOSUB end.test      TEST="WFILEIO-DELETE"; GOSUB start.test      FOBJ=SAVE.FOBJ      CALL @WOBJ.RTNE(FOBJ,"SET","action","DELETE","",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      FOBJ=SAVE.FOBJ      CALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      RESPONSE.DATA=""      CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUSMSG,"",RERR)      TEST.STATUS=1      TEST.MSG=TMP.FILE.NAME:' ':RESPONSE.STATUS      IF RESPONSE.STATUS=0 AND RESPONSE.DATA="" THEN NULL ELSE TEST.STATUS=0      GOSUB end.test      * Let get our current directory      TEST="pwd"; GOSUB start.test      IF OCONV(PLATFORM,"MCU") = "WINDOWS" THEN         CMND='echo %CD%'      END ELSE         CMND='pwd'      END      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      IF 1 THEN         TEST.MSG=CMND.RESULT         TEST.STATUS=1      END ELSE         TEST.MSG=CMND.RESULT         TEST.STATUS=0      END      CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG      GOSUB end.test      MVDBTOOLKIT.LOCATION = CMND.RESULT      * Lets verify we have curl!!!      IF CURLLOCATION="" THEN CURLLOCATION="curl"      TEST="default curl"; GOSUB start.test      CMND=CURLLOCATION:' -V'      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      BEGIN CASE         CASE INDEX(CMND.RESULT,"libcurl",1) AND 1            TEST.MSG=CMND.RESULT            TEST.STATUS=1         CASE OCONV(PLATFORM,"MCU")="WINDOWS"            TEST.MSG=CMND.RESULT            CURLLOCATION=""            TEST.STATUS=2         CASE 1            TEST.MSG=0      END CASE      CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG      GOSUB end.test      * THIS IS SLOPPY CODE      IF CURLLOCATION="" AND PLATFORM="WINDOWS" THEN         * Start looking for curl         IF TEST.STATUS=2 THEN            CURLLOCATION="C:\PROGRA~2\Zumasys\MVDASH~1\bin\curl.exe"            TEST="curl via mvconnect"; GOSUB start.test            CMND=CURLLOCATION:' -V'            CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)            CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)            CALL MVDBTOOLKIT.WEXECUTE(COBJ)            CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)            BEGIN CASE               CASE INDEX(CMND.RESULT,"libcurl",1) AND 1                  TEST.MSG=CMND.RESULT                  TEST.STATUS=1               CASE OCONV(PLATFORM,"MCU")="WINDOWS"                  TEST.MSG=CMND.RESULT                  TEST.STATUS=2               CASE 1                  TEST.MSG=CMND.RESULT                  TEST.STATUS=0            END CASE            CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG            GOSUB end.test         END         IF TEST.STATUS=2 THEN            CURLLOCATION="c:\progra~1\git\mingw64\bin\curl.exe"            TEST="curl via git"; GOSUB start.test            CMND=CURLLOCATION:' -V'            CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)            CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)            CALL MVDBTOOLKIT.WEXECUTE(COBJ)            CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)            BEGIN CASE               CASE INDEX(CMND.RESULT,"libcurl",1) AND 0                  TEST.MSG=CMND.RESULT                  TEST.STATUS=1               CASE 1                  TEST.STATUS=0                  TEST.MSG=CMND            END CASE            CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG            GOSUB end.test         END         IF CURLLOCATION # "" THEN            CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","curllocation",CURLLOCATION,"",RERR)         END      END      CALL @WOBJ.RTNE(PLATFORM.OBJ,"TOSTRING","",PLATFORM.JSON,"PRETTIFY",RERR)      CONVERT CHAR(13) TO @AM IN PLATFORM.JSON      CONVERT CHAR(10) TO '' IN PLATFORM.JSON      WRITE PLATFORM.JSON ON DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON"      STOP      *      RETURN      *process.error: *      IF RERR<1> THEN         TEST.STATUS=-1         TEST.MSG=RERR<1>      END      RETURN      *      *start.test: *      TEST.STATUS=0      TEST.MSG="Success"      PRINT "":TEST[1,15]"L(#15)":      RETURN      *end.test: *      PRINT "  ":TEST.MSG[1,50]"L(#50)":      PRINT " ":      PRE=''; AFT=''      BEGIN CASE         CASE TEST.STATUS=2; ERROR="Warning"; PRE=''; AFT=''         CASE TEST.STATUS; ERROR="Passed"         CASE 1; ERROR="Failed"; PRE=@(-13); AFT=@(-14)      END CASE      PRINT PRE:"[":      PRINT ERROR"L(#7)":      PRINT "]":AFT      RETURN000CA7MVDBTOOLKIT.WEXECUTE0c2SUBROUTINE MVDBTOOLKIT.WEXECUTE(EOBJ)INCLUDE MVDBTOOLKIT.WEXECUTE.INCLUDE************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 12, 2018* Description: Execute library************************************************************************* EOBJ* { "command":"COMMAND TO USE",*    "directory":"OPTIONAL DIRECTORY TO RUN IN",*    "debug":"YES OR NO",*    "docapture":"YES OR NO, DEFAULT YES",*    "returning":"YES OR NO, DEFAULT YES",*    "rtndata":"YES OR NO, DEFAULT NO",*    "passlist":"ACTUAL PASSLIST"*    "data": ["ARRAY OF DATA STATEMENTS"],*    "result: {w*                "result":"RESULT IF CAPTURED",*                "rtndata":"RESULT OF RTNDATA",*                "returning":"RESULT OF RETURNING",*                "debug":"DEBUG INFORMATION IF TURNED ON"*    }*    }INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ* With native objects we cannot do this.  We will need* a platform specific way of recognizing this.* Perhaps changes itself to WOBJ?IF ''="NEW" THEN    * CREATE A NEW OBJECT AND RETURN IT    EJSON=\{ "command":"",\    EJSON:=\ "directory":"",\    EJSON:=\ "debug":"NO",\    EJSON:=\ "returning":"YES",\    EJSON:=\ "rtndata":"YES",\    EJSON:=\ "passlist":"",\    EJSON:=\ "data: []"\    EJSON:=\}\    CALL @WOBJ.RTNE(EOBJ,"FROMSTRING","",EJSON,"",RERR)    RETURNENDCALL @WOBJ.RTNE(EOBJ,"GET","command"      ,EXECUTE.COMMAND        ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","directory"    ,EXECUTE.DIRECTORY      ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","docapture"    ,EXECUTE.DOCAPTURE      ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","returning"    ,EXECUTE.RETURNING      ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","rtndata"      ,EXECUTE.RTNDATA        ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","passlist"     ,EXECUTE.PASSLIST       ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","debug"        ,EXECUTE.DEBUG          ,"",RERR)IF EXECUTE.DEBUG = "" THEN    CALL @WOBJ.RTNE(EOBJ,"GET","DEBUG",EXECUTE.DEBUG,"",RERR)ENDIF OCONV(EXECUTE.DEBUG[1,1],"MCU") = "Y" OR EXECUTE.DEBUG="1" THEN EXECUTE.DEBUG=1 ELSE EXECUTE.DEBUG=0IF EXECUTE.DEBUG THEN    *CRT "EXECUTE.COMMAND: ":EXECUTE.COMMAND    *CRT "DIRECTORY      : ":EXECUTE.DIRECTORY    *CRT "OCAPTURE       : ":EXECUTE.OCAPTURE    *CRT "RETURNING      : ":EXECUTE.RETURNINGENDCALL @WOBJ.RTNE(EOBJ,"TOSTRING","",TEST.JSON,"",RERR)* ERROR HANDLING TODOCALL @WOBJ.RTNE(EOBJ,"SET.OBJECT","result","{}","",RERR)CALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)BEGIN CASE   CASE MV.TYPE='D3'       CALL MVDBTOOLKIT.WEXECUTE.D3(EOBJ)   CASE MV.TYPE='UNIDATA'       CALL MVDBTOOLKIT.WEXECUTE.UNIDATA(EOBJ)   CASE MV.TYPE="QM"       CALL MVDBTOOLKIT.WEXECUTE.QM(EOBJ)   CASE MV.TYPE="JBASE"       CALL MVDBTOOLKIT.WEXECUTE.JBASE(EOBJ)   CASE MV.TYPE="UNIVERSE"       CALL MVDBTOOLKIT.WEXECUTE.UNIVERSE(EOBJ)   CASE 1        CALL @WOBJ.RTNE(EOBJ,"SET","result.error","Invalid mvplatform=":MV.TYPE,"",RERR)END CASE**EXECUTE CHAR(255):'k':CMND CAPTURING RESULT*CONVERT CHAR(0) TO '' IN RESULT*CONVERT CHAR(255) TO '' IN RESULTRETURN003F7CMVSENDGRID.BP0c0000BAEMVSENDGRID.TEST0c2* PROGRAM MVSENDGRID.TEST*PRINT "Enter email to send test to: ":; INPUT TEST.EMAIL.TOPRINT "Enter full path to file to send (leave blank to not send a file): ":; INPUT FILE.TO.SENDIF FILE.TO.SEND # "" THEN   PRINT "Type of file: 1-pdf, 2=text: ":; INPUT ANS   BEGIN CASE     CASE ANS="1"; FILE.TYPE="application/pdf"     CASE ANS="2"; FILE.TYPE="text/plain"     CASE 1       PRINT "Invalid choice"       STOP   END CASE   PRINT "Actual file name (no path): ":; INPUT FILE.NAME   IF FILE.NAME="" THEN STOPENDWOBJ="WOBJ"OBJ="MAILSEND_V2"CALL MVSENDGRID.API(OBJ)*CALL @WOBJ(OBJ,"TOSTRING","",JSON,"PRETTIFY",1)CALL @WOBJ(OBJ,"SET","params.to[0].email",TEST.EMAIL.TO,"",RERR)CALL @WOBJ(OBJ,"SET","params.to[0].name","Test Email","",RERR)* SINCE CC IS A OPTION, THERE IS NOT A PRE-POPULATED OBJECT, WE MUST ADD ONECALL @WOBJ(OBJ,"SET.OBJECT","params.bcc[0]","{}","",RERR)CALL @WOBJ(OBJ,"SET","params.bcc[0].email",TEST.EMAIL.TO,"",RERR)CALL @WOBJ(OBJ,"SET","params.bcc[0].name","Test Email","",RERR)CALL @WOBJ(OBJ,"SET","params.from","noreply@zumasys.com","",RERR)CALL @WOBJ(OBJ,"SET","params.subject","Sample email ":TIMEDATE(),"",RERR)NL=CHAR(13):CHAR(10)TEXT="Line 1"TEXT:=NL:"Line 2"TEXT:=NL:"Line 3"CALL @WOBJ(OBJ,"SET","params.text",TEXT,"",RERR)IF FILE.TO.SEND # "" THENCALL @WOBJ(OBJ,"SET.ARRAY","params.files","[]","",RERR)  CALL @WOBJ(SOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ(SOBJ,"SET","sourcefile",FILE.TO.SEND,"",RERR) CALL @WOBJ(SOBJ,"SET","filename",FILE.NAME,"",RERR) CALL @WOBJ(SOBJ,"SET","type",FILE.TYPE,"",RERR) CALL @WOBJ(SOBJ,"TOSTRING","",SJSON,"",RERR) CALL @WOBJ(OBJ,"SET.OBJECT","params.files[-1]",SJSON,"",RERR)  END  CALL @WOBJ(OBJ,"TOSTRING","",JSON,"PRETTIFY",RERR)PRINT "Press return to see the jSON option payload before calling MVSENDGRID.API ":; INPUT WAIT PRINT JSONPRINTPRINT "Press return to call MVSENDGRID.  If you request a file that does not exist the routine does not catch that and your call will fail. ":; INPUT ANSCALL MVSENDGRID.API(OBJ)CALL @WOBJ(OBJ,"GET","result.status",STATUSCODE,"",RERR)PRINT "Result status=":STATUSCODECALL @WOBJ(OBJ,"GET","result.statusmsg",STATUSMSG,"",RERR)PRINT "Result msg   =":STATUSMSGIF STATUSCODE = "ok" OR STATUSCODE[1,1] = "2" THEN NULL ELSE    PRINT "Failed: ":STATUSMSGENDPRINT "Press return to see result OBJECT from call: ":; INPUT WAITCALL @WOBJ(OBJ,"TOSTRING","",JSON,"PRETTIFY",RERR)PRINT JSONPRINT "Press return to see curl log: ":; INPUT ANS* 04/2/2020 - Better to send curl object as json vs getting into issues with @am,@vm,@svm!!CALL @WOBJ(OBJ,"GET","result.wcalldebug",COBJ.JSON,"",RERR)CALL @WOBJ(COBJ,"FROMSTRING","",COBJ.JSON,"",RERR)CALL @WOBJ(COBJ,"LENGTH","response.log",CURL.LOG.LENGTH,"",RERR)FOR X=1 TO CURL.LOG.LENGTH    TAG="response.log[":X-1:"]"    CALL @WOBJ(COBJ,"GET",TAG,CLINE,"",RERR)    PRINT CLINENEXT XPRINT "PRESS RETURN TO CONTINUE: ":; INPUT OK.TO.CONTINUE0033B1MVSENDGRID.API0c2      SUBROUTINE MVSENDGRID.API(OBJ)      **********************************************************************      *      * Copyright (C) 2018 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: 4/2/2019      * Description: SENDGRID wrapper      **********************************************************************      *      * Purpose of this program is to front end the sendgrid library of functions      *      * It will utilize the object model concept and try to wrap all sendgrid      * functions into this one library      *      * Items to do      *      * Add File option. (COMPLETED)      * qc tests to validate fields sent (OUTSTANDING)      * Config to get user name/password/etc (COMPLETED)      * Return Message/Status (COMPLETED)      * REMOVE ALL DEBUG STATEMENTS (COMPLETED)      *      * OBJ      * { "api":"mailsend_v2",      *    "params": {      *       "to": [      *         {      *           "email":"email address",      *           "name":"Nice name"      *         }      *       ],      *       "cc": [      *         {      *           "email":"email address",      *           "name":"Nice name"      *         }      *       ],      *       "bcc": [      *         {      *           "email":"email address",      *           "name":"Nice name"      *         }      *       ],      *       "debug":"Y or N",      *       "replyto":"address",      *       "from":"From email address",      *       "fromname":"From name",      *       "subject":"Subject",      *       "text":"Plain text of your email",      *       "html":"Html version of your email",      *       "files": [      *           {      *              "sourcefile":"path to file",      *              "filename":"file name to present file as",      *              "type":"type of file, application/pdf for example"      *           }      *       ]      *    },      *   "result": {      *      "status":"error or ok",      *      "statusmsg:"status msg"      *    }      *      *  }      *      * Starting with mailsend_v2 - We are using this version because it allows      * attachments without having to base64 and include them into the json payload      * v2 uses curl and a normal form-data post to get attachments.      *      * curl https://api.sendgrid.com/api/mail.send.json \      *-F to=recipient@domain.com -F toname=test -F subject="Example Subject" \      *-F text="testing text body" --form-string html="<strong>testing html body</strong>" \      *-F from=test@yourdomain.com -F api_user=your_sendgrid_username -F api_key=your_sendgrid_password \      *-F files\[attachment.gz\]=@f.php.gz      *      *      * This intial part will initialize a object for a user.      *      WOBJ="WOBJ"      FIELD.TYPE=""      INIT.FUNCTION=OCONV(OBJ<1,1,1>,"MCU")      BEGIN CASE         CASE INIT.FUNCTION="MAILSEND_V2"            GOSUB mailsendv2.init            RETURN      END CASE      CALL @WOBJ(OBJ,"GET","api",API,"",RERR)      CALL @WOBJ(OBJ,"GET","debug",DO.DEBUG,"",RERR)      IF OCONV(DO.DEBUG[1,1],"MCU") = "Y" OR DO.DEBUG="1" THEN DO.DEBUG=1 ELSE DO.DEBUG=0      CALL @WOBJ(OBJ,"SET.OBJECT","result","{}","",RERR)      API=OCONV(API,'MCU')      APISTATUS="ok"      APISTATUSMSG=""      OPEN "DICT","MVSENDGRID.BP" TO DICT.MVSENDGRID.BP ELSE         APISTATUS="error"         APISTATUSMSG="Could not open DICT MVSENDGRID.BP"         GOTO end.of.routine      END      READ CONFIG FROM DICT.MVSENDGRID.BP, "CONFIG.JSON" ELSE         APISTATUS="error"         APISTATUSMSG="NO CONFIG.JSON IN DICT MVSENDGRID.BP"         GOTO end.of.routine      END      CALL @WOBJ(CONFIGOBJ,"FROMSTRING","",CONFIG,"",RERR)      BEGIN CASE         CASE API="MAILSEND_V2"            GOSUB mailsendv2         CASE 1            APISTATUS="error"            APISTATUSMSG="Invalid api request (":API:")"      END CASE      * lets do a larger check for a failed call         CALL @WOBJ(COBJ,"GET","response.status",STATUSCODE,"",RERR)         CALL @WOBJ(COBJ,"GET","response.statusmsg",STATUSMSG,"",RERR)         IF STATUSCODE[1,1] # "2" THEN            APISTATUS=STATUSCODE            APISTATUSMSG=STATUSMSG         END         * LETS PACKAGE THE ENTIRE CURL RESPONSE FOR DEBUGGING PURPOSES.         CALL @WOBJ(COBJ,"TOSTRING","",COBJ.JSON,"",RERR); * SAFER TO PULL JSON         CALL @WOBJ(OBJ,"SET","result.wcalldebug",COBJ.JSON,"",RERR)end.of.routine: *      CALL @WOBJ(OBJ,"SET","result.status",APISTATUS,"",RERR)      CALL @WOBJ(OBJ,"SET","result.statusmsg",APISTATUSMSG,"",RERR)      RETURN      STOPmailsendv2.init: * Initialize a email v2 object      OBJ=""      CALL @WOBJ(OBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(OBJ,"SET","api","mailsend_v2","",RERR)      CALL @WOBJ(OBJ,"SET.OBJECT","params","{}","",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.to",'[{"email":"","name"}]',"",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.cc",'[]',"",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.bcc",'[]',"",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.files",'[]',"",RERR)      RETURNmailsendv2: * Send an email      * V2 USES USER NAME AND PASSWORD      CALL @WOBJ(CONFIGOBJ,"GET","username",SENDGRID.USERNAME,"",RERR)      CALL @WOBJ(CONFIGOBJ,"GET","password",SENDGRID.PASSWORD,"",RERR)      IF SENDGRID.USERNAME="" THEN         APISTATUS="error"         APISTATUSMSG="No username defined in CONFIG.JSON"         RETURN      END      IF SENDGRID.PASSWORD="" THEN         APISTATUS="error"         AISTATUSMSG="No password defined in CONFIG.JSON"         RETURN      END      CALL @WOBJ(OBJ,"LENGTH","params.to",NUMBER.TOO,"",RERR)      IF NOT(NUMBER.TOO) THEN         APISTATUS="error"         APISTATUS="Must supply array of to"         RETURN      END      TOO.LABEL="to"; TOO.NAMES.LABEL="toname"      IF NUMBER.TOO > 1 THEN TOO.LABEL:='[]'; TOO.NAMES.LABEL:='[]'      TOO=''; TOO.NAMES=''      CALL @WOBJ(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(COBJ,"SET","method","POST","",RERR)      CALL @WOBJ(COBJ,"SET","url","https://api.sendgrid.com/api/mail.send.json","",RERR)      CALL @WOBJ(COBJ,"SET","insecure","Y","",RERR)      CALL @WOBJ(COBJ,"SET.OBJECT","headers","{}","",RERR)      CALL @WOBJ(COBJ,"SET.ARRAY","formfields","[]","",RERR)      FIELD.NAME="api_user"; FIELD.VALUE=SENDGRID.USERNAME; GOSUB set.field      FIELD.NAME="api_key"; FIELD.VALUE=SENDGRID.PASSWORD; GOSUB set.field      FOR X=1 TO NUMBER.TOO         P="params.to[":X-1:"]"         CALL @WOBJ(OBJ,"GET",P:".email",THIS.TO,"",RERR)         CALL @WOBJ(OBJ,"GET",P:".name",THIS.NAME,"",RERR)         IF INDEX(THIS.TO,'@',1) THEN            TOO<-1>=THIS.TO            TOO.NAMES<-1>=THIS.NAME         END      NEXT X      CONVERT CHAR(254) TO '&' IN TOO      CONVERT CHAR(254) TO '&' IN TOO.NAMES      CALL @WOBJ(SOBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(SOBJ,"SET","name",TOO.LABEL,"",RERR)      CALL @WOBJ(SOBJ,"SET","value",TOO,"",RERR)      CALL @WOBJ(SOBJ,"TOSTRING","",SJSON,"",RERR)      CALL @WOBJ(COBJ,"SET.OBJECT","formfields[-1]",SJSON,"",RERR)      FIELD.NAME=TOO.NAMES.LABEL; FIELD.VALUE=TOO.NAMES; GOSUB set.field      * DO CC            CALL @WOBJ(OBJ,"LENGTH","params.cc",NUMBER.CC,"",RERR)      IF NUMBER.CC THEN               CC=''; CC.NAMES=''         FOR X=1 TO NUMBER.CC            P="params.cc[":X-1:"]"            CALL @WOBJ(OBJ,"GET",P:".email",THIS.CC,"",RERR)            CALL @WOBJ(OBJ,"GET",P:".name",THIS.NAME,"",RERR)            IF INDEX(THIS.CC,'@',1) THEN               CC<-1>=THIS.CC               CC.NAMES<-1>=THIS.NAME            END                     NEXT X            CONVERT CHAR(254) TO '&' IN CC         CONVERT CHAR(254) TO '&' IN CC.NAMES          CC.LABEL="cc"; CC.NAMES.LABEL="ccname"         IF NUMBER.CC > 1 THEN CC.LABEL:='[]'; CC.NAMES.LABEL:='[]'         FIELD.NAME=CC.LABEL; FIELD.VALUE=CC; GOSUB set.field         FIELD.NAME=CC.NAMES.LABEL; VALUE=CC.NAMES; GOSUB set.field       END      * DO BCC            CALL @WOBJ(OBJ,"LENGTH","params.bcc",NUMBER.BCC,"",RERR)      IF NUMBER.BCC THEN               BCC=''; BCC.NAMES=''         FOR X=1 TO NUMBER.BCC            P="params.bcc[":X-1:"]"            CALL @WOBJ(OBJ,"GET",P:".email",THIS.BCC,"",RERR)            CALL @WOBJ(OBJ,"GET",P:".name",THIS.NAME,"",RERR)            IF INDEX(THIS.BCC,'@',1) THEN               BCC<-1>=THIS.BCC               BCC.NAMES<-1>=THIS.NAME            END                     NEXT X            CONVERT CHAR(254) TO '&' IN BCC         CONVERT CHAR(254) TO '&' IN BCC.NAMES          BCC.LABEL="bcc"; BCC.NAMES.LABEL="bccname"         IF NUMBER.BCC > 1 THEN BCC.LABEL:='[]'; BCC.NAMES.LABEL:='[]'         FIELD.NAME=BCC.LABEL; FIELD.VALUE=BCC; GOSUB set.field         FIELD.NAME=BCC.NAMES.LABEL; VALUE=BCC.NAMES; GOSUB set.field       END          CALL @WOBJ(OBJ,"GET","params.from",FROMEMAIL,"",RERR)      IF FROMEMAIL="" THEN         APISTATUS="error"         APISTATUSMSG="Must supply from"         RETURN      END      FIELD.NAME="from"; FIELD.VALUE=FROMEMAIL; GOSUB set.field      ** GET BODY **      CALL @WOBJ(OBJ,"GET","params.text",TEXT.BODY,"",RERR)      CALL @WOBJ(OBJ,"GET","params.html",HTML.BODY,"",RERR)      IF HTML.BODY="" AND TEXT.BODY="" THEN         APISTATUS="error"         APISTATUSMSG="Must supply either a text or html message"         RETURN      END      * If our text.body has new lines in it we MUST write it out      * to a file and then pass it as a file handle!!!      *       *IF INDEX(TEXT.BODY,CHAR(13),1) OR INDEX(TEXT.BODY,CHAR(10),1) THEN      * 4/2/2020 - This fix is moving to wcall      IF 0 THEN         CALL @WOBJ(FOBJ,"FROMSTRING","","{}","",RERR)         CALL @WOBJ(FOBJ,"SET","action","WRITE","",RERR)         TMP.DIR="/tmp"; * This needs to be fixed to be dynamic         TEXT.FILE.NAME=TMP.DIR:'/':@USER.NO:"_body.txt"         CALL @WOBJ(FOBJ,"SET","path",TEXT.FILE.NAME,"",RERR)         CALL @WOBJ(FOBJ,"SET","data",TEXT.BODY,"",RERR)         CALL MVDBTOOLKIT.WFILEIO(FOBJ)         FIELD.NAME="text"; FIELD.VALUE="@":TEXT.FILE.NAME; FIELD.TYPE="file"; GOSUB set.field      END ELSE         FIELD.NAME="text"; FIELD.VALUE=TEXT.BODY; GOSUB set.field      END            * NEED TO ADD THE HTML            IF HTML.BODY = "" AND TEXT.BODY # "" THEN         * WE NEED TO BUILD OUT A SIMPLE HTML VERSION, BASICALLY DOING NEW LINES         HAS.CR=DCOUNT(TEXT.BODY,CHAR(13))         HAS.LF=DCOUNT(TEXT.BODY,CHAR(10))         HTML.BODY=TEXT.BODY         BEGIN CASE            CASE HAS.CR AND HAS.LF               CONVERT CHAR(10) TO '' IN HTML.BODY               CONVERT CHAR(13) TO @AM IN HTML.BODY            CASE HAS.LF               CONVERT CHAR(10) TO @AM IN HTML.BODY            CASE HAS.CR               CONVERT CHAR(13) TO @AM IN HTML.BODY         END CASE         NUM.LINES=DCOUNT(HTML.BODY,@AM)         NEW.HTML.BODY=""         FOR A=1 TO NUM.LINES            LINE=HTML.BODY<A>            IF A > 1 THEN NEW.HTML.BODY:='<BR>'            NEW.HTML.BODY:=LINE        NEXT A        HTML.BODY=NEW.HTML.BODY      END            IF HTML.BODY # "" THEN         *HTML.BODY="HTML VERSION<BR>":HTML.BODY         FIELD.NAME="html"; FIELD.VALUE=HTML.BODY; GOSUB set.field      END            ** SUBJECT **      CALL @WOBJ(OBJ,"GET","params.subject",SUBJECT,"",RERR)      IF SUBJECT="" THEN         APISTATUS="error"         APISTATUSMSG="Must supply subject"         RETURN      END      FIELD.NAME="subject"; FIELD.VALUE=SUBJECT; GOSUB set.field      ** file uploads **      CALL @WOBJ(OBJ,"LENGTH","params.files",NUM.FILES,"",RERR)      IF NUM.FILES THEN         FOR X=1 TO NUM.FILES            P="params.files[":X-1:"]"            CALL @WOBJ(OBJ,"GET",P:'.sourcefile',SOURCEFILE,"",RERR)            CALL @WOBJ(OBJ,"GET",P:'.filename',FILENAME,"",RERR)            CALL @WOBJ(OBJ,"GET",P:'.type',FILETYPE,"",RERR)            FIELD.NAME='files[':FILENAME:']'            FIELD.VALUE='@':SOURCEFILE            IF FILETYPE # "" THEN FIELD.VALUE:=";type=":FILETYPE            FIELD.TYPE='file'            GOSUB set.field         NEXT X      END      CALL @WOBJ(COBJ,"TOSTRING","",CJSON,"PRETTIFY",RERR)      IF DO.DEBUG THEN         CALL @WOBJ(COBJ,"SET","debug","Y","",RERR); * SET TO DO DEBUGGING      END      CALL MVDBTOOLKIT.WCALL(COBJ)      CALL @WOBJ(COBJ,"TOSTRING","",TJSON,"PRETTIFY",RERR)      CALL @WOBJ(COBJ,"GET","response.data",RESPONSE,"",RERR)      CALL @WOBJ(ROBJ,"FROMSTRING","",RESPONSE,"",RERR)      CALL @WOBJ(ROBJ,"GET","message",APISTATUSMSG,"",RERR)      RETURNset.field: *      CALL @WOBJ(SOBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(SOBJ,"SET","name",FIELD.NAME,"",RERR)      CALL @WOBJ(SOBJ,"SET","value",FIELD.VALUE,"",RERR)      IF FIELD.TYPE # "" THEN         CALL @WOBJ(SOBJ,"SET","fieldtype",FIELD.TYPE,"",RERR)      END      FIELD.TYPE=""      CALL @WOBJ(SOBJ,"TOSTRING","",SJSON,"",RERR)      CALL @WOBJ(COBJ,"SET.OBJECT","formfields[-1]",SJSON,"",RERR)      RETURN00012BMVDB.THEMES0c0000045Theme 20c2theme2.css#004489#e1e1d6#d3d9df#989898#565656#dbdbce000045Theme 30c2theme3.css#557260#6A8B92#8A9875#34626B#eaeeea#3291b100003DTheme 10c2theme1.css#2d3956#455372#616a7f#e7e7e7#e0e9e900003DTheme 40c2theme4.css#77bed2#d5e1dd#999999#747e80#333333000218WDB.RESOURCE0c0000036RSS.MAINT0c2PRSS MaintenanceMVDB.INITRSS.MAINT11000033MVPKG.MAIN0c2PMV PackageMVDB.INITMVPKG.MAIN1000003FMVDB.WEB.ED0c2PMV Dashboard EditorMVDB.INITMVDB.WEB.ED11000043MVDB.ADMIN0c2PMV Dashboard AdministratorMVDB.INITMVDB.ADMIN1100002DRSS.MAIN0c2PRSS FeedMVDB.INITRSS.MAIN11000047CONFIG0c2CDEFAULT_HANDLERDBCDEFAULT_RESOURCEMVDB.MAINAPIKEY1234500003BAPI*WRESTTEST0c2PSample REST testWRESTTESTWRESTTEST1100003EMVDB.MAIN0c2PMV Dashboard ControllerMVDB.INITMVDB.MAIN110000AFDICT_MVSENDGRID.BP0c0000093CONFIG.JSON0c1{   "username":"patrickpayne@yahoo.com",   "password":"SendGridPassword1",   "apikey":"Api Key for v3 apis (none built yet)" }f000120DICT_MVDB.DEFS0c0000022TEMPLATE0c1A1TEMPLATEL15000022DISPLAYS0c1A2DISPLAYSL30000024DISP.AREA0c1A3DISP AREAL10000027DISP.ORDER0c1A4DISP ORDERL1000001CUSERS0c1A5USERSL2000001ADESC0c1A6DESCL4000001FDB.SORT0c1A8DB.SORTR70046DBWBPD0c0000151FI.MVDB.DEFS0c2DIM DB.ITEM(30)*EQU DB.TEMPLATE         TO DB.ITEM(1)EQU DB.WIDGETS          TO DB.ITEM(2)EQU DB.WIDGET.AREA      TO DB.ITEM(3)EQU DB.WIDGET.ORDER     TO DB.ITEM(4)EQU DB.USERS.ALLOWED    TO DB.ITEM(5)EQU DB.DESC             TO DB.ITEM(6)EQU DB.THEME            TO DB.ITEM(7)EQU DB.SORT             TO DB.ITEM(8)00012EFI.MVDB.USERS0c2DIM USER.ITEM(20)*EQU USER.PASSWORD     TO USER.ITEM(1)EQU USER.DEFAULT.DB   TO USER.ITEM(2)EQU USER.NAME         TO USER.ITEM(3)EQU USER.LAST.LOGIN   TO USER.ITEM(4)EQU USER.EMAIL        TO USER.ITEM(5)EQU USER.ROLE         TO USER.ITEM(6)EQU USER.ALT.LOGO     TO USER.ITEM(7)000100FI.MVDB.WIDGET.TYPES0c2DIM WIDGET.TYPES(10)*EQU WT$TYPE     TO WIDGET.TYPES(1)EQU WT$SWF      TO WIDGET.TYPES(2)EQU WT$HANDLER  TO WIDGET.TYPES(3)EQU WT$ICON     TO WIDGET.TYPES(4)EQU WT$GROUP    TO WIDGET.TYPES(5)EQU WT$DESC     TO WIDGET.TYPES(6)000070FI.MVDB.WIDGETS0c2DIM WIDGET.ITEM(20)*EQU WIDGET.SUB    TO WIDGET.ITEM(1)EQU WIDGET.USERS  TO WIDGET.ITEM(2)000166FI.WDB.RESOURCE0c2DIM RSRC.ITEM(20)*EQU RSRC.TYPE           TO RSRC.ITEM(1)EQU RSRC.DESCRIPTION    TO RSRC.ITEM(2)EQU RSRC.CONTROLLER     TO RSRC.ITEM(3)EQU RSRC.PROGRAM        TO RSRC.ITEM(4)EQU RSRC.PARSE.CGI      TO RSRC.ITEM(5)EQU RSRC.ENABLED        TO RSRC.ITEM(6)EQU RSRC.DEBUG.MODE     TO RSRC.ITEM(7)EQU RSRC.ACCOUNT        TO RSRC.ITEM(8)000484FI.WDB.DEBUG0c2** WDB.DEBUG record layout*EQU WDBG_DATE                TO 1EQU WDBG_TIME                TO 2EQU WDBG_DURATION            TO 3EQU WDBG_PORT                TO 4EQU WDBG_HANDLER             TO 5EQU WDBG_RESOURCE            TO 6EQU WDBG_CONTROLLER          TO 7EQU WDBG_PROGRAM             TO 8EQU WDBG_REQUEST_ID          TO 9EQU WDBG_REQUEST             TO 10EQU WDBG_METHOD              TO 11EQU WDBG_PATH                TO 12EQU WDBG_REMOTE_ADDR         TO 13EQU WDBG_STATUS              TO 14EQU WDBG_HEADER_VARS         TO 15EQU WDBG_HEADER_VALS         TO 16EQU WDBG_CGI_VARS            TO 17EQU WDBG_CGI_VALS            TO 18EQU WDBG_BODY                TO 19EQU WDBG_RESPONSE_VARS       TO 20EQU WDBG_RESPONSE_VALS       TO 21EQU WDBG_RESPONSE_CONTENT    TO 22EQU WDBG_RESERVED1           TO 23EQU WDBG_RESERVED2           TO 24EQU WDBG_SESSION_ID          TO 25EQU WDBG_SESSION_VARS        TO 26EQU WDBG_SESSION_VALS        TO 27EQU WDBG_SESSION_DATE        TO 28EQU WDBG_SESSION_TIME        TO 29EQU WDBG_WARNING             TO 30EQU WDBG_ERROR               TO 31EQU WDBG_LINT                TO 3200323EMVDB.INCLUDE0c2*COMMON /MVDB/ GLOBAL.INFO(100), GLOBAL.USER.DATA(20), GLOBAL.TEMP.DATA(20), WIDGET.INFO(200), WIDGET.USER.DATA(100)** GLOBAL.INFO equates. GLOBAL.INFO is a place for variables that are * globally accessible to all view subroutines. This information is not* written to disk - it is valid only for the duration of the execution.*EQU G$USERID            TO GLOBAL.INFO(1) ;* UserID currently logged inEQU G$CURRENT.DB        TO GLOBAL.INFO(2) ;* Current dashboard nameEQU G$LOGIN.DATE        TO GLOBAL.INFO(3) ;* Date user logged in (from session)EQU G$LOGIN.TIME        TO GLOBAL.INFO(4) ;* Time user logged in (from session)EQU G$WIDGET.NAME       TO GLOBAL.INFO(5) ;* Current view being executedEQU G$WIDGET.SUB        TO GLOBAL.INFO(6) ;* Current subruotine being calledEQU G$WIDGET.NAME.LIST  TO GLOBAL.INFO(7) ;* List of views called/to be calledEQU G$WIDGET.SUB.LIST   TO GLOBAL.INFO(8) ;* w/ G$WIDGET.NAME.LISTEQU G$WIDGET.CALL.TIME  TO GLOBAL.INFO(9) ;* w/ G$WIDGET.NAME.LIST (timedate stamp)EQU G$WIDGET.CALL.DUR   TO GLOBAL.INFO(10) ;* w/ G$WIDGET.NAME.LIST (duration in MS)EQU G$QUERYMODE         TO GLOBAL.INFO(11) ;* Used to query subroutines without running themEQU G$SUBMITTED         TO GLOBAL.INFO(12) ;* 1=User clicked submit on input area of this widgetEQU G$ADMIN.USER        TO GLOBAL.INFO(14) ;* 1=User as an admin; 0=User is not an adminEQU G$LICENSE.COUNT     TO GLOBAL.INFO(15) ;* Count of licenses (concurrent users)EQU G$EDITION           TO GLOBAL.INFO(16) ;* Edition NameEQU G$SYSTEM.ID         TO GLOBAL.INFO(17) ;* System ID** GLOBAL.INFO(90...100) reserved for internal use.*EQU G$DRILLDOWN.MODE    TO GLOBAL.INFO(24)EQU G$DD.REFERRER       TO GLOBAL.INFO(25)EQU G$DD.FROM.DB        TO GLOBAL.INFO(26)** GLOBAL.USER.DATA stores persistent variable data throughout the course* of a dashboard user's login session. This allows for persistent sharing* of information between dashboard subroutines.** GLOBAL.TEMP.DATA stores temporary variable data for the course of a single* execution. Data is not stored with the session and is destoryed after each* page load.** WIDGET.INFO holds the information for a specific dashboard WIDGET.*EQU W$TYPE           TO WIDGET.INFO(1)EQU W$TITLE          TO WIDGET.INFO(2)EQU W$LINK.LABEL     TO WIDGET.INFO(3)EQU W$LINK.LOCATION  TO WIDGET.INFO(4)  ;* Quandrant(s) to show (1-4)EQU W$LINK.UD.POS    TO WIDGET.INFO(5)  ;* WIDGET.USER.DATA(x)EQU W$LINK.UD.VAL    TO WIDGET.INFO(6)  ;* ^^ = this_valueEQU W$LINK.DD.WIDGET TO WIDGET.INFO(7)  ;* Drill-down widget nameEQU W$LINK.DD.PARAMS TO WIDGET.INFO(8)  ;* Drill down params (UNUSED)EQU W$LINK.URL       TO WIDGET.INFO(26) ;* Specific URL - UD/DD params ignoredEQU W$LINK.URL.OPTS  TO WIDGET.INFO(27) ;* Specific URL - UD/DD params ignoredEQU W$LINK.ICON      TO WIDGET.INFO(28) ;* Icon GIF name ("C" location only)EQU W$LINK.ICON.TXT  TO WIDGET.INFO(29) ;* Hover text for imageEQU W$WIDTH          TO WIDGET.INFO(9)  ;* 1, 2 or 3EQU W$PRINTABLE      TO WIDGET.INFO(24) ;* 1=Add print function/icon to control barEQU W$EXCELABLE        TO WIDGET.INFO(88) ;* 1=Add EXCEL function/icon to control barEQU W$PDFABLE        TO WIDGET.INFO(87) ;* 1=Add PDF function/icon to control barEQU W$HIDDEN         TO WIDGET.INFO(25) ;* 1=Do not display this widget** Pie chart equates*EQU W$PIE.LABELS     TO WIDGET.INFO(10)EQU W$PIE.VALUES     TO WIDGET.INFO(11)EQU W$PIE.COLORS     TO WIDGET.INFO(12) ;* #000000 - #FFFFFF* Below settings are Fusion Charts onlyEQU W$PIE.CAPTION    TO WIDGET.INFO(14)EQU W$PIE.VALUE.OPTS TO WIDGET.INFO(15)** Bar chart equates*EQU W$BAR.LABELS      TO WIDGET.INFO(10) ;* Labels for each Series (AM)EQU W$BAR.VALUES      TO WIDGET.INFO(11) ;* Values matrix (AM/VM)EQU W$BAR.COLORS      TO WIDGET.INFO(12) ;* #000000 - #FFFFFFEQU W$BAR.XLABELS     TO WIDGET.INFO(13) ;* Labels for each set (X Axis)EQU W$BAR.XMEMO       TO WIDGET.INFO(14) ;* X-Axis TextEQU W$BAR.YMEMO       TO WIDGET.INFO(15) ;* Y-Axis TextEQU W$BAR.TYPE        TO WIDGET.INFO(16) ;* 'clustered', 'stacked', '100% stacked'* Below settings are Fusion Charts onlyEQU W$BAR.TREND.BEG   TO WIDGET.INFO(17) ;* Trendline beginning valueEQU W$BAR.TREND.END   TO WIDGET.INFO(18) ;* Trendline ending valueEQU W$BAR.TREND.OPTS  TO WIDGET.INFO(19) ;* Options for the trendlineEQU W$BAR.VALUE.OPTS  TO WIDGET.INFO(20)EQU W$BAR.LABEL.OPTS  TO WIDGET.INFO(21)EQU W$BAR.XLABEL.OPTS TO WIDGET.INFO(22)EQU W$BAR.CAPTION     TO WIDGET.INFO(23)** Table chart equtes*EQU W$TABLE.COL.LABELS     TO WIDGET.INFO(10)EQU W$TABLE.COL.JUST       TO WIDGET.INFO(11)EQU W$TABLE.DATA           TO WIDGET.INFO(12)EQU W$TABLE.TOTALS         TO WIDGET.INFO(13)** Text display equates*EQU W$TEXT.DATA         TO WIDGET.INFO(10)*EQU W$HTML.DATA         TO WIDGET.INFO(10) ;* HTML Blob** Global display equates*EQU W$CHART.OPTIONS  TO WIDGET.INFO(30) ;* Fusion Charts OnlyEQU W$CHART.HEIGHT   TO WIDGET.INFO(31) ;* Override (in pixels)** WIDGET.USER.DATA holds widget-specific user information which* is persistent through the user's session. Values can be set in* this by using the LINK.XXXX feature. This feature will create links* on the widget display that, when clicked, will set values in* WIDGET.USER.DATA as perscribed*EQU W$INPUT.PROMPT   TO WIDGET.INFO(32) ;* Prompt Text (AM)EQU W$INPUT.TYPE     TO WIDGET.INFO(33) ;* TEXT or SELECT (AM)EQU W$INPUT.SELOPTS  TO WIDGET.INFO(34) ;* Text Options for SELECT (AM)(VM)EQU W$INPUT.SELVALS  TO WIDGET.INFO(35) ;* Select Values for SELECT (AM)(VM)EQU W$INPUT.DEFAULT  TO WIDGET.INFO(36) ;* Default Value (AM)EQU W$INPUT.UDPOS    TO WIDGET.INFO(37) ;* User Data Pisition to store answer (AM)EQU W$INPUT.PARAMS   TO WIDGET.INFO(38) ;* Additonal HTML in <input> or <select> tag (AM)EQU W$INPUT.BUTTON   TO WIDGET.INFO(39) ;* Button Label for Submit (AM)*EQU W$MAP.IDS         TO WIDGET.INFO(40) ;* ID for associated value. Ex. USA Map, this is a state Abbr.EQU W$MAP.VALUES      TO WIDGET.INFO(41) ;* Value associtated with the ID (map segment)EQU W$MAP.VALUE.OPTS  TO WIDGET.INFO(42) ;* Optional parameters to be inserted into the <entity> tag.EQU W$MAP.RANGE.NAME  TO WIDGET.INFO(43) ;* Display Name of the range/group (VM)EQU W$MAP.RANGE.LOW   TO WIDGET.INFO(44) ;* Range low limit (VM)EQU W$MAP.RANGE.HIGH  TO WIDGET.INFO(45) ;* Range high limit (VM)EQU W$MAP.RANGE.COLOR TO WIDGET.INFO(46) ;* Range color (optional override)EQU W$MAP.RANGE.OPTS  TO WIDGET.INFO(47) ;* optional parameters to be inserted into the <color> tag** The following value is only relevant for map type USA - when the W$MAP.IDS are state abbreviations.* For each W$MAP.IDS entry, this value can be set to allow drill-down for this state. When used,* it will reload the same widget, providing it with the drill-down state info in WIDGET.USER.INFO(1).* The use of this feature precludes the use of the W$MAP.VALUE.LINK feature below.** See also the FusionWidgets drill-down feature described later. This can be used to drill-down to a* specific widget from a map position when the map drilldown features described here are NOT used.*EQU W$MAP.VALUE.DD    TO WIDGET.INFO(48) ;* "1"=Enable Drill-Down for this State (from USA Map). If used, *                                           WIDGET.USER.INFO will contain the state map info:*                                           (1) = State Code (2-character)*                                           (2) = State Map Name (for use with MVDB.MAP.DATA)*EQU W$MAP.VALUE.LINK  TO WIDGET.INFO(49) ;* Link URL (Ignored if Drill-Down state is used)EQU W$MAP.LINK.MODE   TO WIDGET.INFO(50) ;* "N" = New Window, Blank = This Window** Fusion Widgets*EQU W$FW.CAPTION          TO WIDGET.INFO(51) ;* Widget captionEQU W$FW.SUBCAPTION       TO WIDGET.INFO(52) ;* SubcaptionEQU W$FW.LABELS           TO WIDGET.INFO(53) ;* (VM) Labels for each sectionEQU W$FW.VALUES           TO WIDGET.INFO(54) ;* (VM) Values for each sectionEQU W$FW.VALUE.OPTS       TO WIDGET.INFO(55) ;* (VM) XML attributes to be included in the <set> tagEQU W$FW.COLORS           TO WIDGET.INFO(56) ;* (VM) Alternate array of colors to useEQU W$FW.CHART.PALETTE    TO WIDGET.INFO(57) ;* 1-5 - Selects color theme for Spark Charts, Bullet Charts ** Fusion Widgets - Spark Charts*EQU W$FW.SPARK.TREND.BEG  TO WIDGET.INFO(58) ;* Trendline begin valueEQU W$FW.SPARK.TREND.END  TO WIDGET.INFO(59) ;* Trendline end valueEQU W$FW.SPARK.TREND.OPTS TO WIDGET.INFO(60) ;* Trendline options** Linear charts (Bullet Charts, Guages)*EQU W$FW.LOWER.LIMIT      TO WIDGET.INFO(61)EQU W$FW.UPPER.LIMIT      TO WIDGET.INFO(62)EQU W$FW.COLOR.RANGE      TO WIDGET.INFO(63) ;* <1> Range lower limit*                                               <2> Range upper limit*                                               <3> Range Color (This seems to be ignored on bullet charts)*                                               <4> Range options (attributes to appear in <color> tagEQU W$FW.METER.VALUE       TO WIDGET.INFO(64) ;* The numeric value of the meter guageEQU W$FW.METER.VALUE.OPTS  TO WIDGET.INFO(65) ;* Optional attributes to appear in the <value> tagEQU W$FW.METER.TARGET      TO WIDGET.INFO(66) ;* Target value for the meter (where appropriate) (Bullet)EQU W$FW.METER.TARGET.OPTS TO WIDGET.INFO(67) ;* Option attributes to appear in the <target> tag*EQU W$FW.NUMBER.PREFIX    TO WIDGET.INFO(68) ;* Such as "$"EQU W$FW.NUMBER.SUFFIX    TO WIDGET.INFO(69) ;* Such as "K" or "MM"EQU W$FW.TICKMARKS        TO WIDGET.INFO(70) ;* Tickmark Properties for Bullets, Gauges*                                               <1> 1 or 0 ; Show Tick Marks (1 = default)*                                               <2> 1 or 0 ; Show Tick Values next to the marks (1 = default)*                                               <3> A or B ; Show Above or Below graph (B = default)*                                               <4> Number of major tickmarks (default is calculated)*                                               <5> Number of minor tickmarks between major ones (default is none)*EQU W$FW.LOWER.LIMIT.LABEL  TO WIDGET.INFO(71) ;* For gauges, these are the labels asssociated with theEQU W$FW.UPPER.LIMIT.LABEL  TO WIDGET.INFO(72) ;* lower and upper limitsEQU W$FW.DIAL.VALUES        TO WIDGET.INFO(73) ;* (VM) value associated with each dial on the gaugeEQU W$FW.DIAL.OPTS          TO WIDGET.INFO(74) ;* Optional atributes to appear in the <dial> tagEQU W$FW.TRENDPOINT.VALUES  TO WIDGET.INFO(75) ;* (VM) Trendpoints on gauges*                                               * Optionally, <2> may be used to specify an ending value*                                               * to plot an arc on a gauge between <1,X> and <2,X>EQU W$FW.TRENDPOINT.LABELS  TO WIDGET.INFO(76) ;* (VM) Associated trendpoint label textEQU W$FW.TRENDPOINT.OPTS    TO WIDGET.INFO(77) ;* Optional attributes to appear in the <point> tag*EQU W$FW.THERMOMETER.COLOR  TO WIDGET.INFO(78) ;* Fill color for Thermometer and Cylinder charts** The values below allow you to set up drill-down parameters for most FusionWidgets and FusionCharts* values. These values correspond with W$FW.VALUES, W$FW.METER.VALUE, W$FW.DIAL.VALUES, W$PIE.VALUES,* W$BAR.VALUES and also with W$FW.MAP.IDS when NOT using the built-in drill-down facilities in the* USAMAP type. It may be used when a state map is being created.* EQU W$FW.DD.UD.POS          TO WIDGET.INFO(79) ;* WIDGET.USER.DATA(x) location to store the user-defined valueEQU W$FW.DD.UD.VAL          TO WIDGET.INFO(80) ;* ^^ = this_value - gets stored in WIDGET.USER.DATA(x) positionEQU W$FW.DD.WIDGET          TO WIDGET.INFO(81) ;* Drill-down widget name to be invokedEQU W$FW.DD.PARAMS          TO WIDGET.INFO(82) ;* Drill down params (UNUSED)*EQU W$FW.BC.PLOT.COLOR      TO WIDGET.INFO(83) ;* Plot color of bullet-chart plot lineEQU W$FW.BC.TARGET.COLOR    TO WIDGET.INFO(84) ;* Color of bullet-chart target lineEQU W$MAP.VALUE.TOOLTEXT    TO WIDGET.INFO(85) ;* toolText value for mapEQU W$INPUT.PROMPT.PARAMS   TO WIDGET.INFO(86) ;* Prompt text styling options. Goes into label tag.** Color Names*EQU COLOR$RED      TO "#FF0000"EQU COLOR$MAROON   TO "#800000"EQU COLOR$FUCHSIA  TO "#FF00FF"EQU COLOR$MAGENTA  TO "#FF00FF"EQU COLOR$ORANGE   TO "#FFA500"EQU COLOR$YELLOW   TO "#FFFF00"EQU COLOR$LIME     TO "#00FF00"EQU COLOR$GREEN    TO "#008000"EQU COLOR$OLIVE    TO "#808000"EQU COLOR$CYAN     TO "#00FFFF"EQU COLOR$AQUA     TO "#00FFFF"EQU COLOR$TEAL     TO "#008080"EQU COLOR$BLUE     TO "#0000FF"EQU COLOR$NAVY     TO "#000080"EQU COLOR$PURPLE   TO "#800080"EQU COLOR$BLACK    TO "#000000"EQU COLOR$SILVER   TO "#C0C0C0"EQU COLOR$GRAY     TO "#808080"EQU COLOR$GREY     TO "#808080"EQU COLOR$WHITE    TO "#FFFFFF"000014SOURCE.VIEW.ICON0c20005EBWWW.INCLUDE0c2** Standard web include*COMMON /WWW/ WWW.INFO(50), F.WEB.SESSIONEQU SESSION$ID               TO WWW.INFO(1)EQU SESSION$CONTENT.TYPE     TO WWW.INFO(2)EQU SESSION$CONTENT.SENT     TO WWW.INFO(3)EQU SESSION$OUTBUF           TO WWW.INFO(4)EQU SESSION$HEADERS          TO WWW.INFO(5)EQU SESSION$COOKIES          TO WWW.INFO(6)EQU SESSION$OUTBUF.SIZE      TO WWW.INFO(7)EQU SESSION$OUTBUF.FLAG      TO WWW.INFO(8)EQU SESSION$TIME.OUT         TO WWW.INFO(9)EQU SESSION$GLOBAL.DEBUG     TO WWW.INFO(10)EQU SESSION$STATUS.CODE      TO WWW.INFO(11)EQU SESSION$WDEBUG.MODE      TO WWW.INFO(12)EQU CONFIG$WDB.RESOURCE      TO WWW.INFO(15)EQU CGI$VARS                 TO WWW.INFO(25)EQU CGI$VALS                 TO WWW.INFO(26)EQU CGI$CVARS                TO WWW.INFO(27)EQU CGI$CVALS                TO WWW.INFO(28)EQU CGI$SERVER.NAME          TO WWW.INFO(29)EQU CGI$PATH                 TO WWW.INFO(30)EQU CGI$SERVER.PORT          TO WWW.INFO(31)EQU CGI$BODY                 TO WWW.INFO(32)EQU CGI$HEADERVALS           TO WWW.INFO(33)EQU CGI$HEADERVARS           TO WWW.INFO(34)EQU CGI$RESTPARAMS           TO WWW.INFO(35)EQU CGI$CONFIG               TO WWW.INFO(36)EQU F.WEB.FORMS              TO WWW.INFO(40)EQU CGI$APPSVR.ID            TO WWW.INFO(45)EQU CGI$RESERVED1            TO WWW.INFO(46)EQU CGI$RESERVED2            TO WWW.INFO(47)EQU CGI$RESERVED3            TO WWW.INFO(48)EQU CGI$UNIQUE.ID            TO WWW.INFO(49)EQU CGI$RESOURCE.NAME        TO WWW.INFO(50)000481WWW.INFO0c2** Element index for standard web common /WWW/ WWW.INFO array*EQU SESSION_ID               TO 1EQU SESSION_CONTENT.TYPE     TO 2EQU SESSION_CONTENT.SENT     TO 3EQU SESSION_OUTBUF           TO 4EQU SESSION_HEADERS          TO 5EQU SESSION_COOKIES          TO 6EQU SESSION_OUTBUF.SIZE      TO 7EQU SESSION_OUTBUF.FLAG      TO 8EQU SESSION_TIME.OUT         TO 9EQU SESSION_GLOBAL.DEBUG     TO 10EQU SESSION_STATUS.CODE      TO 11EQU SESSION_WDEBUG_MODE      TO 12EQU CONFIG_WDB.RESOURCE      TO 15EQU CGI_VARS                 TO 25EQU CGI_VALS                 TO 26EQU CGI_CVARS                TO 27EQU CGI_CVALS                TO 28 EQU CGI_SERVER.NAME          TO 29EQU CGI_PATH                 TO 30EQU CGI_SERVER.PORT          TO 31EQU CGI_BODY                 TO 32EQU CGI_HEADERVALS           TO 33EQU CGI_HEADERVARS           TO 34EQU CGI_RESTPARAMS           TO 35EQU CGI_CONFIG               TO 36EQU CGI_APPSVR.ID            TO 45EQU CGI_RESERVED1            TO 46EQU CGI_RESERVED2            TO 47EQU CGI_RESERVED3            TO 48EQU CGI_UNIQUE.ID            TO 49EQU CGI_RESOURCE.NAME        TO 500000CEDICT_WDB.LOG0c000001CDATE0c1A2DATED2/R800001CDURATION0c1A5MSR10000020PROGRAM0c1A1PROGRAML30000020AGE0c1A2AGEA;(D)-(2)R8000028TIME0c1A3TIMEMTSA;(3)/"1000"R800096AMV.INSTALL.CF0c000046EMVAPPS-PRE-SCRIPT0c0PTERM CASE NOINVERTCREATE-FILE DICT WDB.LOGCREATE-FILE DICT WDB.DEBUGCREATE-FILE RSS.BP DIRECTORYCREATE-FILE RSS.FEEDSCREATE-FILE MV.WEB.ED.ARCHIVECREATE-FILE MVDB.CONTROLCREATE-FILE MVDB.DEFSCREATE-FILE MVDB.SUB.TEMPLATESCREATE-FILE MVDB.SUBS DIRECTORYCREATE-FILE MVDB.WIDGET.TYPESCREATE-FILE MVDB.WIDGETSCREATE-FILE MVDB.MAP.DATACREATE-FILE MVDB.UDATACREATE-FILE MVDB.USERSCREATE-FILE MVPC.CONTROLCREATE-FILE WBPD DIRECTORYCREATE-FILE WDB.BP DIRECTORYCREATE-FILE WEB.FORMSCREATE-FILE WDB.QCREATE-FILE WEB.SESSIONCREATE-FILE MVAPPS.INSTALLEDCREATE-FILE MVBP.FORMSCREATE-FILE MVDB.THEMESCREATE-FILE MVBP.BP DIRECTORYCREATE-FILE MVDB.EMAILED.HTMLCREATE-FILE WDB.RESOURCECREATE-FILE WREST.BP DIRECTORYCREATE-FILE WOBJ.BP DIRECTORYCREATE-FILE MVDBTOOLKIT.BP DIRECTORYCREATE-FILE MVMAKE.BP DIRECTORYCREATE-FILE DASHBOARD.CLOSING.STATSCREATE-FILE DASHBOARD.BALANCESCREATE-FILE PORTAL.SALESCREATE-FILE PORTAL.ARCREATE-FILE PORTAL.APCREATE-FILE UD.DICT.DASHBOARD.CLOSING.STATSCREATE-FILE UD.DICT.SALESCREATE-FILE UD.DICT.ARCREATE-FILE UD.DICT.APCREATE-FILE MVSENDGRID.BP DIRECTORY000488MVAPPS-POST-SCRIPT0c0DELETE VOC DOWNLOAD.XLS INIT.WWW MV.COMPILE MVAPPS.STATUS MVDB.ADMIN MVDB.MAIN MVDB.WEB.ED MVPKG.MAIN PACK-FILE RSS.MAIN RSS.MAINT WDB.INIT WDB.TEST WDB.VIEW XML.DATABASIC MVDB.SUBS * NO.PAGE NO.QUERYCATALOG MVDB.SUBS * LOCAL NO.PAGE NO.QUERYBASIC RSS.BP * NO.PAGE NO.QUERYCATALOG RSS.BP * LOCAL NO.PAGE NO.QUERYBASIC WDB.BP * NO.PAGE NO.QUERYCATALOG WDB.BP * LOCAL NO.PAGE NO.QUERYBASIC WDB.BP MVDB.DEBUG DEBUGGING NO.PAGE NO.QUERYCATALOG WDB.BP MVDB.DEBUG LOCAL NO.PAGE NO.QUERY* COMPILE WDB.BP APP.INSTALLER (OWBASIC MVBP.BP * NO.PAGE NO.QUERYCATALOG MVBP.BP * LOCAL NO.PAGE NO.QUERYBASIC WOBJ.BP * NO.PAGE NO.QUERYCATALOG WOBJ.BP * LOCAL NO.PAGE NO.QUERYBASIC WREST.BP * NO.PAGE NO.QUERYCATALOG WREST.BP * LOCAL NO.PAGE NO.QUERY* DELETE DICT WDB.LOG WDB.LOG* DELETE DICT WDB.DEBUG WDB.DEBUGRUN WDB.BP USER.UPDATE* CLEAR.FILE DATA WDB.BP* CLEAR.FILE DATA RSS.BP* CLEAR.FILE DATA MVBP.BPRUN MVDB.SUBS PURGE.NON.PLATFORM.WIDGETSBASIC MVDBTOOLKIT.BP * NO.PAGE NO.QUERYCATALOG MVDBTOOLKIT.BP * NO.PAGE NO.QUERYCREATE-FILE TMP DIRECTORYBASIC MVSENDGRID.BP * NO.PAGE NO.QUERYCATALOG MVSENDGID.BP * NO.PAGE NO.QUERY000051PACKAGE.INFO0c0MultiValue Dashboard/Portal Reports/MVConnect1.7.4dbMVDB18000052EDICT_WDB.DEBUG0c000001CDATE0c1A1DATED2/R8000019PORT0c1A4PORTR4000026REQUEST.ID0c1A9REQUEST IDL2500001BPATH0c1A12PATHL25000029REMOTE.ADDR0c1A13REMOTE ADDRL1400001DTYPE0c1A0TYPEG0/1L4000026CONTROLLER0c1A7CONTROLLERL12000033RESPONSE.CONTENT0c1A22RESPONSE CONTENTT6000002DSESSION.DATE0c1A28SESSION DATED2/R800002BSESSION.VARS0c1A26SESSION VARSL1200002BSESSION.VALS0c1A27SESSION VALSL20000017DUR0c1A3DURR7000019REQ0c1A10REQL40000020AGE0c1A1AGEA;(D)-(1)R8000020PROGRAM0c1A8PROGRAML2500001ESTATUS0c1A14STATUSR600001BBODY0c1A19BODYT60000027SESSION.ID0c1A25SESSION IDL2500001BLINT0c1A32LINTT6000001CTIME0c1A2TIMEMTSR8000020HANDLER0c1A5HANDLERL10000022RESOURCE0c1A6RESOURCEL1200001EMETHOD0c1A11METHODL6000029HEADER.VARS0c1A15HEADER VARSL12000029HEADER.VALS0c1A16HEADER VALSL20000023CGI.VARS0c1A17CGI VARSL12000023CGI.VALS0c1A18CGI VALSL2000002DRESPONSE.VARS0c1A20RESPONSE VARSL1200002DRESPONSE.VALS0c1A21RESPONSE VALSL2000002DSESSION.TIME0c1A29SESSION TIMEMTSR8000021WARNING0c1A30WARNINGT6000001DERROR0c1A31ERRORT60018DDBWEB.FORMS0c0000C4DPORTAL.DASHBOARD.SALES.AR.AP0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center">AP Balance</td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000200outerTrackWrapper0c2    <div id="outerTrackWrapper">		<div id="trackWrapper">			<div id="trackMsg" style="width: 165px; height: 34px; float: left;"><div id="dispRate">&nbsp;</div></div>			<div id="track1" style="width:200px; height:34px; float: right; margin: 0 10px 0 0; background: url(/db/images/trackSlider.png) 0px center no-repeat;">				<div id="handle1" style="width:12px; height:34px; margin: 6px 0 0 0; float: left;"><img src="/db/images/sliderHandle.png" alt="" /></div>			</div>		</div>	</div>0002E9ed_output.html0c2<div class="ed_error"><!-- HEADER --><!-- FOOTER --></div><div id="compile_output" class="compile_output"><!-- COMPILE_OUTPUT --></div><div id="compile_errline"><!-- COMPILE_ERRLINE --></div><div id="last_compile"><!-- LAST_COMPILE --></div><div id="ed_content"><!-- ED_CONTENT --></div><div id="num_calls"><!-- NUM_OF_CALLS --></div><div id="num_includes"><!-- NUM_OF_INCLUDES --></div><div id="num_files"><!-- NUM_OF_FILES --></div><div id="num_archives"><!-- NUM_OF_FILES --></div><div id="calls_content"><!-- EA_CALLS_CONTENT --></div><div id="includes_content"><!-- EA_INCLUDES_CONTENT --></div><div id="files_content"><!-- EA_FILES_CONTENT --></div><div id="archive_content"><!-- EA_ARCHIVE_CONTENT --></div>000253FCF_template.html0c2<!-- start FC script -->        <div id="<!-- chart_div_id -->">        </div>        <script type="text/javascript">        FusionCharts.ready(function () {            var myChart = new FusionCharts({              "type": "[FCF_MODULE]",              "renderAt": "<!-- chart_div_id -->",              "width": "<!-- chart_width -->",              "height": "<!-- chart_height -->",              "dataFormat": "xml",              "dataSource": "<!-- CHARTXML -->"            });          myChart.render();        });        </script><!-- end of FC script -->000E8DPORTAL.DASHBOARD0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL MARGINS&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center">AP Balance</td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>0010E6admin_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>	<script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>	    <script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>            	    <script src="/db/javascripts/jquery.form.js" type="text/javascript" charset="utf-8"></script>    	        	<script src="/db/javascripts/jquery.url.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/initAdminTemplate.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/sortable.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/tablesort.js" type="text/javascript" charset="utf-8"></script>			<link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/ingrid.css" type="text/css" charset="utf-8" />    <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />    <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]-->    <!-- SITE_THEME -->		<title>MultiValue Dashboard Admin</title>		<script type="text/javascript">	<!-- ADMIN_SCRIPTS -->	</script></head><body><div id="header"><!-- HEADER --></div>	<div id="logo">    	<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">	</div><div id="mainWrapper"><div id="main"><!-- Add new user form --><div id="new-user" title="New user" style="display:none;" ><form id="new-user-form" method="get" action="/dbc/MVDB.ADMIN"><div id="new-user-messages"></div><table><tbody><tr> <td align="right">User ID:</td> <td><input id="new-userid" type="text" value="" name="new_userid"/></td></tr><tr> <td align="right">Name:</td> <td><input id="username" type="text" value="" name="username"/></td></tr><tr id='default-dashboard'> <td align="right">Default Dashboard:</td> <td id="default-dashboard-container"><!-- default_dashboard --></td> <td/></tr><tr> <td align="right">Role:</td> <td>   <select id="user-role" name="user_role">      <option value="User">User</option>      <option value="Administrator">Administrator</option>   </select> </td></tr><tr> <td align="right">Optional Logo Path:</td> <td><input id="opt_logo_path" type="text" value="" name="opt_logo_path"/></td></tr><tr> <td align="right">Password:</td> <td><input id="user-password" type="password" value="" name="user_password"/></td></tr><tr> <td align="right">Confirm Password:</td> <td><input id="confirm-password" type="password" value="" name="confirm_password"/></td></tr></tbody></table><input type="hidden" value="save_user" name="action"/></form></div><!-- Add new widget form --><div id="new-widget" title="New widget" style="display:none;" ><form id="new-widget-form" method="get" action="/dbc/MVDB.ADMIN"><div id="widget-messages"></div><table><tbody><tr> <td align="right">Widget Name: *</td> <td><input id="widget_id" type="text" value="" name="new_widgetid" /></td></tr><tr> <td align="right">Subroutine: *</td> <td><input id="widget_sub" type="text" value="" name="widget_sub" /><!-- edit_source_link --></td></tr><tr> <td align="right">Users:</td> <td><input id="widget_users" type="text" value="" name="widget_users" /><br/><font size="1">comma-separated</font></td></tr></tbody></table><!--input type="submit" value="Delete Widget" name="delete_widget"/ --><p><input id="save_widgetid" type="hidden" value="" name="save_widgetid" /><input id="widget_action" type="hidden" value="save_widget" name="action" /><input id="save_widget" type="hidden" value="Save" name="save_widget" /></p></form></div><a href="edit-sub" id="edit-sub-link" target="_blank" style="display: none;">Edit subroutine</a><!-- ADMIN_MAIN --></div></div><div id="footer">    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a>    </div><!-- FOOTER --></div></body></html>002E52PORTAL.REPORT.DOCUMENTATION0c2<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 15 (filtered)"><style><!-- /* Font Definitions */ @font-face	{font-family:Wingdings;	panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face	{font-family:"Cambria Math";	panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face	{font-family:Calibri;	panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{margin:0in;	margin-bottom:.0001pt;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}.MsoChpDefault	{font-family:"Calibri",sans-serif;}.MsoPapDefault	{margin-bottom:8.0pt;	line-height:107%;}@page WordSection1	{size:8.5in 11.0in;	margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1	{page:WordSection1;} /* List Definitions */ ol	{margin-bottom:0in;}ul	{margin-bottom:0in;}--></style></head><body lang=EN-US><div class=WordSection1><p class=MsoNormal><b><span style='font-size:14.0pt'>Portal Dashboard Reports</span></b></p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal><b><span style='font-size:12.0pt'>High level dashboardsummarizing Sales, Gross Profit, Margin, AR, and AP</span></b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Month to Date and Year to Date numbers</p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>AR Balance amounts and percentages for the aging periods of current,1-30, 31-60, 61-90, and 90+</p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>AP Balance amounts for the aging periods of current, 1-30, 31-60,61-90, and 90+</p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Drilldown functionality to see detail for Sales, Gross Profit,Margin, and aging for AR and AP</p><p class=MsoNormal><b>&nbsp;</b></p><p class=MsoNormal><b><span style='font-size:12.0pt'>Sales, Gross Profit, andMargin Reports:</span></b></p><p class=MsoNormal><b><span style='font-size:12.0pt'>&nbsp;</span></b></p><p class=MsoNormal><b>MTD Sales</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing daily activity broken out by Sales and GP</p><p class=MsoNormal><b>YTD Sales</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing each month of the current year broken out by Salesand GP</p><p class=MsoNormal><b>Year to Year Sales and GP</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Sales and GP for each of the past few years</p><p class=MsoNormal><b>Year to Year Sales by Month</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Sales by month, comparing each of the past fewyears.</p><p class=MsoNormal><b>Year to Year GP by Month</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing GP by month, comparing each of the past fewyears.</p><p class=MsoNormal><b>MTD Sales by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Month to Date Sales and GP broken out by Salesperson.</p><p class=MsoNormal><b>YTD Sales by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Date Sales and GP broken out by Salesperson.</p><p class=MsoNormal><b>Year to Year Sales by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year Sales broken out by Salesperson</p><p class=MsoNormal><b>Year to Year GP by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year GP broken out by Salesperson</p><p class=MsoNormal><b>MTD Sales by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Month to Date Sales and GP broken out by Branch.</p><p class=MsoNormal><b>YTD Sales by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Date Sales and GP broken out by Branch.</p><p class=MsoNormal><b>Year to Year Sales by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year Sales broken out by Branch.</p><p class=MsoNormal><b>Year to Year GP by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year GP broken out by Branch.</p><p class=MsoNormal><b>MTD Sales by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Month to Date Sales and GP broken out by Region.</p><p class=MsoNormal><b>YTD Sales by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Date Sales and GP broken out by Region.</p><p class=MsoNormal><b>Year to Year Sales by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year Sales broken out by Region.</p><p class=MsoNormal><b>Year to Year GP by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year GP broken out by Region.</p><p class=MsoListParagraph style='margin-left:0in'>&nbsp;</p><p class=MsoListParagraph style='margin-left:0in'><b><span style='font-size:12.0pt'>AR Reports</span></b></p><p class=MsoListParagraph style='margin-left:0in'><b><span style='font-size:12.0pt'>&nbsp;</span></b></p><p class=MsoNormal><b>Current AR Aging</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Pie chart breaking out all receivables broken out by current, 0-30,31-60, 61-90, and 90+</p><p class=MsoNormal><b>Average AR Aging Days by Year</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart comparing the average days to pay for the past fewyears.</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on a year to see a pie chart showing the AR aging forthe year broken out by 0-30, 31-60, 61-90, and 90+.</p><p class=MsoNormal><b>Average Days to Pay Last 12 Months</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart comparing the average days to pay, by month, for thepast 12 months.</p><p class=MsoNormal><b>Average Days by Month YYYY</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart comparing the average days to pay for each month inyear YYYY. This option will appear for the past few years with YYYY showing theyear.</p><p class=MsoNormal><b>Customers Needing Aging Attention</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Table report showing the categories of:</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>50 Customers with the most amount owed</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>50 Customers with the most days aged.</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>50 Customers aged over 30 days where their average aging over thepast 60 days is longer than it has been over the past 1000 days.</p><p class=MsoNormal><b><span style='font-size:12.0pt'>&nbsp;</span></b></p><p class=MsoNormal><b><span style='font-size:12.0pt'>AP Reports</span></b></p><p class=MsoNormal><b>&nbsp;</b></p><p class=MsoNormal><b>Current AP Aging</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Pie chart breaking out all payables broken out by current, 0-30,31-60, 61-90, and 90+</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p></div></body></html>002160web_ed_settings.html0c2<html xmlns="http://www.w3.org/1999/xhtml">  <head>    <title>D3 Web Editor Settings</title>    <meta http-equiv="content-type" content="text/html; charset=<!--CHARACTER_SET-->" />    <link rel="stylesheet" type="text/css" href="/db/css/reset.css" media="screen" />    <link rel="stylesheet" type="text/css" href="/db/css/screen.css" media="screen" />    <!--[if IE]>    <link rel="stylesheet" type="text/css" href="/db/css/screen_ie.css" media="screen" />    <![endif]-->    <script src="/db/javascripts/jquery.tools.min.js" type="text/javascript"></script>    <script src="/db/javascripts/global.js" type="text/javascript"></script>  </head>  <body>    <div id="header" class="group">      <div id="logo">D3 Web Editor Settings</div>    </div>        <div id="main" class="group">      <div id="content" class="group">        <div id="section" class="group">          <ul class="tabs group">             <li><a href="#">General Settings</a></li>             <li><a href="#">Accounts</a></li>             <li><a href="#">Program Files</a></li>           </ul>          <div class="panes">             <div class="pane">              <form action="/dbc/WEB.ED.SETTINGS" method="POST">                <fieldset>                  <legend>Compiling Defaults</legend>                  <ul class="form">                    <li class="enable">                      <input type="checkbox" class="checkbox" id="enable_compiling" name="enable_compiling" [ENABLE_COMPILING] />                      <label for="enable_compiling">Enable Compiling</label>                    </li>                    <li>                      <label>Compile Verb:</label>                      <input type="text" class="text" name="compile_verb" value="[COMPILE_VERB]" />                    </li>                    <li>                      <label>Compile Options:</label>                      <input type="text" class="text" name="compile_opts" value="[COMPILE_OPTS]" />                    </li>                    <li>                      <label for="flash">Flash Compile (0 option)</label>                      <input type="checkbox" class="checkbox" id="flash" name="flash_compile" [FLASH_COMPILE] />                    </li>                    <li>                      <label for="catalog">Catalog after compile</label>                      <input type="checkbox" class="checkbox" id="catalog" name="catalog" [CATALOG] />                    </li>                  </ul>                </fieldset>                <fieldset>                  <legend>Options</legend>                  <ul class="form">                    <li>                      <label>Text Size:</label>                      <select name="text_size">                        [TEXT_SIZE_OPTS]                      </select>                    </li>                    <li>                      <label>Default Account:</label>                      <input type="text" class="text" name="default_account" value="[DEFAULT_ACCOUNT]" />                    </li>                    <li>                      <label>Default File:</label>                      <input type="text" class="text" name="default_file" value="[DEFAULT_FILE]"  />                    </li>                  </ul>                </fieldset>                <fieldset>                  <ul>                    <li>                      <input type="checkbox" class="checkbox" id="default" name="global_default" [GLOBAL_DEFAULT] />                      <label for="default">Set as default settings for all users</label>                    </li>                  </ul>                </fieldset>              </form>            </div>             <div class="pane">              <div class="table">                <table cellspacing="0">                  <thead>                    <tr>                      <th>Account</th>                      <th>Password</th>                      <th>Settings</th>                      <th>Options</th>                    </tr>                  </thead>                  <tbody>                  [ACCOUNT_LIST]                  </tbody>                </table>              </div>              <div>                <form action="/dbc/WEB.ED.SETTINGS" method="POST">                  <fieldset>                    <label for="account">Account</label>                    <input type="text" class="text" name="add_account" value="" />                    <input type="submit" value="Add" class="submit"/>                  </fieldset>                </form>              </div>            </div>            <div class="pane">              <div class="table">                <table cellspacing="0">                  <thead>                    <tr>                      <th>Account</th>                      <th>File</th>                      <th>Settings</th>                      <th>Options</th>                    </tr>                  </thead>                  <tbody>                  [FILE_LIST]                  </tbody>                </table>              </div>              <div class="footer_form">                <form action="#">                  <fieldset>                    <label for="account">Account</label>                    <input type="text" class="text" style="margin-right: 10px;"/>                    <label for="account">File</label>                    <input type="text" class="text"/>                    <input type="submit" value="Add" class="submit"/>                  </fieldset>                </form>              </div>            </div>           </div>        </div>      </div>    </div>    <!-- modals -->     <div class="modal" id="edit_account_settings">       <form action="#">        <fieldset>          <legend>Settings for Account: 00000</legend>          <ul class="form">            <li>              <label>Password for LOGTO this account:</label>              <input type="password" class="text"/>            </li>            <li class="enable">              <input type="checkbox" class="checkbox" id="enable_compiling_edit_account_settings"/>              <label for="enable_compiling_edit_account_settings">Enable Compiling</label>            </li>            <li>              <label>Compile Verb:</label>              <input type="text" class="text"/>            </li>            <li>              <label>Compile Options:</label>              <input type="text" class="text"/>            </li>            <li>              <label for="flash_edit_account_settings">Flash Compile (0 option)</label>              <input type="checkbox" class="checkbox" id="flash_edit_account_settings"/>            </li>            <li>              <label for="catalog_edit_account_settings">Catalog after compile</label>              <input type="checkbox" class="checkbox" id="catalog_edit_account_settings"/>            </li>          </ul>        </fieldset>        <div class="buttons">          <input type="submit" value="Save"/>          <input type="submit" value="Cancel" class="close"/>        </div>      </form>    </div>    <div class="modal" id="edit_compile_settings">       <form action="#">        <fieldset>          <legend>Compile Settings for 00000, 00000</legend>          <ul class="form">            <li class="enable">              <input type="checkbox" class="checkbox" id="enable_compiling_edit_compile_settings"/>              <label for="enable_compiling_edit_compile_settings">Enable Compiling</label>            </li>            <li>              <label>Compile Verb:</label>              <input type="text" class="text"/>            </li>            <li>              <label>Compile Options:</label>              <input type="text" class="text"/>            </li>            <li>              <label for="flash_edit_compile_settings">Flash Compile (0 option)</label>              <input type="checkbox" class="checkbox" id="flash_edit_compile_settings"/>            </li>            <li>              <label for="catalog_edit_compile_settings">Catalog after compile</label>              <input type="checkbox" class="checkbox" id="catalog_edit_compile_settings"/>            </li>          </ul>        </fieldset>        <div class="buttons">          <input type="submit" value="Save"/>          <input type="submit" value="Cancel" class="close"/>        </div>      </form>    </div>  </body></html>00110Eadmin_dashboards.html0c2<!-- Add new dashboard form --><script type="text/javascript">dashboard_ids = [<!-- list_of_dashboard_ids -->];</script><div id="dashboard-controls" class="ui-dialog">	<div class="button-pane-dialog">		<button id="save-dashboard" type="button" class="ui-state-default ui-corner-all">Save</button>		<button id="delete-dashboard" type="button" class="ui-state-default ui-corner-all">Delete</button>	</div></div><div id="dashboard-accordion" class="ui-accordion ui-widget ui-helper-reset">	<h3 id='dashboard-properties-header' class="ui-accordion-header ui-helper-reset ui-state-active ui-corner-top"><span class="ui-icon ui-icon-triangle-1-s"></span>Properties</h3>	<div id='dashboard-properties' title='New Dashboard' class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active" style="height: 350px;">			<div id="dashboard-messages"></div>		<form id="new-dashboard-form" method="post" action="/dbc/MVDB.ADMIN">		<div>				<input id="old_dbid" type="hidden" value="<!-- save_dbid -->" name="save_dbid" />			<input type="hidden" value="save_db" name="action" />				<input type="hidden" value="Save" name="save_db" />		</div>				<table>		<tbody><tr>		 <td  align="right">Dashboard ID:</td>		 <td id="dbid-container">		 <!-- edit_dbid -->		 </td>		</tr>		<tr>		 <td align="right">Description:</td>		 <td><input id="db_desc" type="text" value="<!-- db_desc -->" name="db_desc" size="63" /></td>		</tr>		<tr>		 <td align="right">Layout:</td>		 <td><input type="hidden" id="db_layout" name="db_layout" value="<!-- " />		 	<ul class='db-layout'>		 	<!-- db_layout_opts -->			</ul> 	     	    		 </td>		</tr>		<tr>		 <td align="right">Allowed Users:</td>		 <td><input id="db_users" type="text" value="<!-- db_users -->" name="db_users" size="63" /></td>		</tr>		<tr>		<td> </td><td>Leave blank to allow all users. Separate user IDs with commas to restrict acces to specific users.</td>		</tr>		<tr>		 <td align="right">Theme:</td>		 <td><!-- db_theme --></td>		</tr>		<tr>		 <td align="right">Sort Value:</td>		 <td><input id="db_sort" type="text" value="<!-- db_sort -->" name="db_sort" size="8" /></td>		</tr>		</tbody></table>		</form>	</div>	    <h3 class="ui-accordion-header ui-helper-reset ui-state-active ui-corner-top"><span class="ui-icon ui-icon-triangle-1-s"></span> Dashboard</h3>    <div id="dashboard-content" class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active">    		<div id="layout-header" class="one-column area">    		  <h4>HEADER</h4>              <!-- AREA_1_WIDGETS -->    		</div>	    	<div id="layout-body">		    <div class="one-column active">		    	<div class="area">		    	  <h4>AREA 1</h4>                  <!-- AREA_2_WIDGETS -->		    	</div>		    </div>		    <div class="two-column">		    	<div class="area first">		    	  <h4>AREA 1</h4>                  <!-- AREA_2_WIDGETS -->		    	</div>		   	    <div class="area last">		   	      <h4>AREA 2</h4>                  <!-- AREA_3_WIDGETS -->		   	    </div>        		    </div>		    <div class="three-column">		       	<div class="area first">		       	  <h4>AREA 1</h4>                  <!-- AREA_2_WIDGETS -->		       	</div>		    	<div class="area middle">		    	  <h4>AREA 2</h4>                  <!-- AREA_3_WIDGETS -->		    	</div>        		       	<div class="area last">		       	  <h4>AREA 3</h4>                  <!-- AREA_4_WIDGETS -->		        </div>    			    </div>            	    	</div>    		<div id="layout-footer" class="one-column area">    		  <h4>FOOTER</h4>              <!-- AREA_5_WIDGETS -->    		</div>    </div></div>    <div id="widget-toolbox" class="ui-accordion">	<h3 class="widget-header ui-accordion-header ui-state-active ui-state-focus"><span class="ui-icon ui-icon-triangle-1-s"></span>Widgets (draggable)</h3>		<div id="widget-icons"  class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active">		<!-- widget_list -->		</div></div><div id='change-layout-message' title="Change layout?" style="display: none; text-align: left;">	<p>Your layout areas currently have one or more widgets. Clicking 'Change' will move these widgets to the first column area.</p></div>000621login.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>	<link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />	<title>MultiValue Dashboard :: Login</title></head><body onLoad="document.loginform.loginid.focus();">	<div id="header">		<div id="logo">		  <BR /><img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">	   </div>	<!-- HEADER -->	</div>	<div id="dashboard">		<b><!-- ERROR --></b>		<div style="text-align:center;">			<h1><img src="/db/images/graphic_lock.gif" style="vertical-align:bottom;"/> Please Login</h1>			<div style="width:180px;text-align:left;margin:10px auto" id="loginbox">				<form name="loginform" action="<!-- CGI$PATH -->/MVDB.MAIN?dblogin=1" method="post">					<div class="ctrl">						<label for="login">Login</label>						<input id="getlogin" type="text" name="loginid" value="" class="text">					</div>					<div class="ctrl">						<label for="password">Password</label>						<input type="password" name="password" value="" class="password">					</div>						<div class="ctrl">						<input type="submit" value="Login" style="float:right">					</div>					</form>			</div>		</div>		</div>	<div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a></div>	</body></html>000273FCMAP_template.html0c2<!-- Fusion Chart Script -->	<div id="<!-- chart_div_id -->">	</div>	<input type="hidden" class="chartSource" value="/db/Maps/FCMap_[FCMAP_MODULE].swf" />	<input type="hidden" class="chartXML" value="<!-- CHARTXML -->" />	<input type="hidden" class="chartClass" value="fcmap" />	<script type="text/javascript">		// <![CDATA[		   var map = new FusionMaps("/db/Maps/FCMap_[FCMAP_MODULE].swf", "ChartId", "<!-- chart_width -->", "<!-- chart_height -->", "0", "1");		   map.setDataXML("<!-- CHARTXML -->");		   		   map.render("<!-- chart_div_id -->");		// ]]>	</script><!-- end of FC script -->0010C9SAVE.PORTAL.DASHBOARD0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Sales Reports">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Sales Reports">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Margins&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="38%" bgcolor="white">&nbsp;</td><td width="31%" align="center">MDT ~9~</td><td width="31%" align="center">YTD ~10~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="38%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY NET INCOME CHART">Net Income</a></td><td width="31%" align="right">~11~</td><td width="31%" align="right">~12~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="38%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY AVERAGE DAYS CHART">Average Days To Pay</a></td><td width="31%" align="center">~13~</td><td width="31%" align="center">~14~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Margins&udview=Portal Margins">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center">AP Balance</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000251FW_template.html0c2<!-- start FW script -->        <div id="<!-- chart_div_id -->">        </div>        <script type="text/javascript">        FusionCharts.ready(function () {            var myChart = new FusionCharts({              "type": "[FW_MODULE]",              "renderAt": "<!-- chart_div_id -->",              "width": "<!-- chart_width -->",              "height": "<!-- chart_height -->",              "dataFormat": "xml",              "dataSource": "<!-- CHARTXML -->"            });          myChart.render();        });        </script><!-- end of FW script -->000603PORTAL.DASHBOARD.SALES.GP0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL MARGINS&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000163db_inner_template0c2<div id="area1" class="area"> <!-- AREA1 --></div><div class="content <!-- column_style -->">  <div id="area2" class="area">   <!-- AREA2 -->  </div>  <div id="area3" class="area">   <!-- AREA3 -->  </div>  <div id="area4" class="area">   <!-- AREA4 -->  </div></div><div id="area5" class="area">  <!-- AREA5 --></div>000C40PORTAL.DASHBOARD.SALES.AR0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center"></td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>0013E6DEMO.FINANCIALS.DASHBOARD0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><th width=24% align="left" bgcolor="red">Sales</th><th width=19% bgcolor="white">&nbsp;</th><th width=19% bgcolor="white">&nbsp;</th><th width=19% bgcolor="white">&nbsp;</th><th width=19% bgcolor="white">&nbsp;</th></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% bgcolor="white">&nbsp;</td><td width=19% align="center">YTD~1~</td><td width=19% align="center">YTD~2~</td><td width=19% align="center">%(+/-)</td><td width=19% align="center">FY~3~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO REV.GP SALES CHART&udview=DEMO REV.GP SALES CHART&dd=dd&udpos1=1&udval1=REVENUES">Sales</a></td><td width=19% align="right">~4~</td><td width=19% align="right">~5~</td><td width=19% align="right">~6~</td><td width=19% align="right">~7~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO REV.GP SALES CHART&udview=DEMO REV.GP SALES CHART&dd=dd&udpos1=1&udval1=GROSSPROFIT">Gross Profit (GP$)</a></td><td width=19% align="right">~8~</td><td width=19% align="right">~9~</td><td width=19% align="right">~10~</td><td width=19% align="right">~11~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES CHART&udview=DEMO SALES CHART&dd=dd&udpos1=1&udval1=MARGIN">Margin (GP%)</a></td><td width=19% align="right">~12~</td><td width=19% align="right">~13~</td><td width=19% align="right"></td><td width=19% align="right">~14~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES CHART&udview=DEMO SALES CHART&dd=dd&udpos1=1&udval1=PARTS$">Parts Revenue ($)</a></td><td width=19% align="right">~15~</td><td width=19% align="right">~16~</td><td width=19% align="right">~17~</td><td width=19% align="right">~18~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES PERCENTS&udview=DEMO SALES PERCENTS&dd=dd&udpos1=1&udval1=PARTSPERCENT">Parts Revenue (%)</a></td><td width=19% align="right">~19~</td><td width=19% align="right">~20~</td><td width=19% align="right"></td><td width=19% align="right">~21~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES CHART&udview=DEMO SALES CHART&dd=dd&udpos1=1&udval1=SERVICES$">Services Revenue ($)</a></td><td width=19% align="right">~22~</td><td width=19% align="right">~23~</td><td width=19% align="right">~24~</td><td width=19% align="right">~25~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES PERCENTS&udview=DEMO SALES PERCENTS&dd=dd&udpos1=1&udval1=SERVICESPERCENT">Services Revenue (%)</a></td><td width=19% align="right">~26~</td><td width=19% align="right">~27~</td><td width=19% align="right"></td><td width=19% align="right">~28~</td></tr></thead></table><table width="100%" cols="4" border="0"><table width="100%" cols="4" border="0"><table width="100%" cols="4" border="0"><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><th width=24% align="left" bgcolor="red">Financials</th><th width=25% bgcolor="white">&nbsp;</th><th width=25% bgcolor="white">&nbsp;</th><th width=25% bgcolor="white">&nbsp;</th></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" bgcolor="white">&nbsp;</td><td width="25%" align="center">~29~ thru ~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="center">~32~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO NET INCOME CHART&udview=DEMO NET INCOME CHART&dd=dd">Net Income</a></td><td width="25%" align="right">~33~</td><td width="25%" align="right">~34~</td><td width="25%" align="right">~35~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO AVERAGE DAYS CHART&udview=DEMO AVERAGE DAYS CHART&dd=dd">Average Days To Pay</a></td><td width="25%" align="center">~44~</td><td width="25%" align="center">~45~</td><td width="25%" align="center">~46~</td></table>0005A9admin_login.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>	<link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <!-- SITE_THEME -->	<title>MultiValue Dashboard :: Administrative Login</title></head><body onLoad="document.loginform.adminpass.focus();">	<div id="header">		<div id="logo">			<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">	   </div>	<!-- HEADER -->	</div>	<div id="dashboard">		<b><!-- ERROR --></b>		<div style="text-align:center;">			<h1><img src="/db/images/graphic_lock.gif" style="vertical-align:bottom;"/> Please Login</h1>			<div style="width:180px;text-align:left;margin:10px auto" id="loginbox">				<form name="loginform" action="<!-- CGI$PATH -->/MVDB.ADMIN" method="post">					<div class="ctrl">						<label for="password">Password</label>						<input type="password" name="adminpass" value="" class="password">					</div>						<div class="ctrl">						<input type="submit" value="Login" style="float:right">					</div>					</form>			</div>		</div>		</div>	<div id="signature">MultiValue Dashboard - copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a></div>	</body></html>000E90PORTAL.DASHBOARD.SALES.GP.AR0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL MARGINS&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center"> </td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000E1Eed_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" ><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->" />    <title>Editing <!-- ITEM --></title>    <script language="Javascript" type="text/javascript" src="/db/edit_area/edit_area_full.js"></script>    <script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>	    <!--script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script--><script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>    	        <script src="/db/javascripts/jquery.form.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>    	        <!--script src="/db/javascripts/shortcut.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script-->    <script language="Javascript" type="text/javascript">	    	        	CALLS = <!-- NUM_OF_CALLS -->;        INCLUDES = <!-- NUM_OF_INCLUDES -->;        FILES = <!-- NUM_OF_FILES -->;                        ARCHIVES = <!-- NUM_OF_ARCHIVES -->;        CALLS_CONTENT = '<!-- EA_CALLS_CONTENT -->';        INCLUDES_CONTENT = '<!-- EA_INCLUDES_CONTENT -->';        FILES_CONTENT = '<!-- EA_FILES_CONTENT -->';        ARCHIVE_CONTENT = '<!-- EA_ARCHIVE_CONTENT -->';        LAST_COMPILE = '<!-- LAST_COMPILE -->';               	<!-- ED_SCRIPTS -->        // initialisation        	editAreaLoader.init({            id: "file_1" // id of the textarea to transform            ,start_highlight: true  // if start with highlight            ,allow_resize: "both"            ,allow_toggle: false            ,word_wrap: true            ,language: "en"            ,begin_toolbar: "load, save"            ,toolbar: "search, go_to_line, |, undo, redo, |, select_font,|, change_smooth_selection, highlight, reset_highlight, word_wrap, |, help"             ,save_callback: 'saveCompileItem'            ,EA_load_callback: "editAreaLoadComplete"             ,load_callback: 'openItem'            ,fullscreen: true            ,closebottomtab_callback: 'closeActiveTab'            ,syntax: "<!-- SYNTAX -->"        });	    <!-- WINDOW_HEIGHT - Put this where it needs to go -->    </script>        <script src="/db/javascripts/edit_area_init.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>     <script language="javascript" type="text/javascript">       	<!-- ED_INIT_SCRIPT -->    </script>       <link rel="StyleSheet" href="/db/css/web_editor.css" media="screen" type="text/css" />       <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />       <!--[if lte IE 8]>       <link rel="Stylesheet" href="/db/css/ie.css" media="screen" type="text/css" />       <![endif]--></head><body><div id="open-item-container" title="Open Item" style="display:none;"><span id="messages"> </span><form id="open-item-form" name="open-item-form" action="" method="post"><label>Account:</label><input id="ed_acct" type="text" value="" name="ed_acct" /><label>File: </label><input id="ed_file" type="text" value="" name="ed_file"/><label>Item: </label><input id="ed_item" type="text" value="" name="ed_item"/><input id="open-action" type="hidden" name="action" value="open" /></form></div><div id="compile-output-container" title="Compile output"><div id="compile-content"></div></div><!-- HEADER --><hr /><!-- BODY --><hr /><!-- FOOTER --><!-- COMPILE_OUTPUT --><hr /></body></html>000082pdf_inner_template0c2<div id="areas" class="area"> <!-- AREA1 --><!-- AREA2 --><!-- AREA3 --><!-- AREA4 --><!-- AREA5 --></div>000202WIDGET.DIV0c2<div class="widget">  <div class="widget_header">   <div class="widget_controls"><!-- CONTROLS --></div>   <h3 class="title"><!-- TITLE --></h3>   <!-- INPUT -->   <div class="widget_content_header"><!-- QUAD2 --><!-- QUAD1 -->        <div class="clear"></div>     </div>  </div>  <div class="widget_content"><div class="widget_content_padding"><!-- WIDGETDATA --></div></div>  <div class="widget_content_footer">   <!-- QUAD3 --><!-- QUAD4 -->  <div class="clear" ></div> </div></div>000348PORTAL.DASHBOARD.SALES0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table></div>001A1BPORTAL.REPORT.RUN.DOCUMENTATION0c2<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 15 (filtered)"><style><!-- /* Font Definitions */ @font-face	{font-family:Wingdings;	panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face	{font-family:"Cambria Math";	panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face	{font-family:Calibri;	panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:0in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}.MsoChpDefault	{font-family:"Calibri",sans-serif;}.MsoPapDefault	{margin-bottom:8.0pt;	line-height:107%;}@page WordSection1	{size:8.5in 11.0in;	margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1	{page:WordSection1;} /* List Definitions */ ol	{margin-bottom:0in;}ul	{margin-bottom:0in;}--></style></head><body lang=EN-US><div class=WordSection1><p class=MsoNormal style='margin-bottom:12.0pt'><b><span style='font-size:14.0pt;line-height:107%'>Running the Portal Dashboard Reports</span></b></p><p class=MsoListParagraphCxSpFirst style='margin-bottom:12.0pt;text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Run the Portal Reports Setup to configure the elements necessaryto run the reports. See the Portal Reports Setup Documentation </p><p class=MsoListParagraphCxSpMiddle style='margin-bottom:12.0pt;text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Run the Portal Dashboard to view the summary of sales andfinancials.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>The dashboard wants to have calculations refreshed within thepast 15 minutes. If, when starting the dashboard, it has been over 15 minutessince the last calculations, a temporary display will show that figures areupdating. After a satisfactory delay of a minute or so, click the Go buttonand the summary of sales and financials page should display. If not, repeatuntil it displays.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Leaving the dashboard running with Auto-Refresh slider activated forabout every 5 minutes will automatically refresh the dashboard display andtrigger a background recalculation of numbers when necessary.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>The title section of each dashboard page shows the date and timethe last calculations were run.</p><p class=MsoListParagraphCxSpMiddle style='margin-bottom:12.0pt;text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>On the summary of sales and financials, those labels underlinedand displayed in a color can drilled down on to display additional dashboards.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on <u><span style='color:#C45911'>Sales</span></u> toinitiate the Portal Sales Reports dashboard</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on <u><span style='color:#C45911'>Gross Profit (GP$)</span></u><spanstyle='color:#C45911'> </span>to initiate the same Portal Sales Reportsdashboard</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on <u><span style='color:#C45911'>Margin (GP%)</span></u><spanstyle='color:#C45911'> </span>to initiate the Portal Year to Year Marginsdashboard</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on the <u><span style='color:#C45911'>Balances as ofMM-DD-YY</span></u><span style='color:#C45911'> </span>to initiate the AR andAP dashboard</p><p class=MsoListParagraphCxSpLast style='margin-bottom:12.0pt;text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>After doing a drill downs, the browser back button can be used tonavigate back to the previous dashboard, or simply clicking on the PortalDashboard tab will re-initialize back to the summary of sales and financials.</p></div></body></html>00015Cadmin_menu.html0c2<ol class="admin_nav_links">  <li><a href="<!-- CGI$PATH -->/MVDB.ADMIN?action=users" class="bullet_link">Users</a>  <li><a href="<!-- CGI$PATH -->/MVDB.ADMIN?action=widgets" class="bullet_link">Widgets</a>  <li><a href="<!-- CGI$PATH -->/MVDB.ADMIN?action=dashboards" class="bullet_link">Dashboards</a>    <!-- RSS --></ol>000281message.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>    <link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <title>MultiValue Dashboard :: Login</title></head><body><div id="header"><div id="logo">  <br /><img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard"></div></div><div id="dashboard"><h1><!-- MSG_TITLE --></h1><!-- MSG_CONTENT --></div></body></html>000C78dbtemplate0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>    <meta http-equiv="X-UA-Compatible" content="IE=edge,IE=11,IE=10,IE=9,IE=8,IE=7" />    <link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/print.css" type="text/css" charset="utf-8" media="print" />    <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]-->            <!-- SITE_THEME -->        <!-- end styles -->                <script type="text/javascript" src="/db/javascripts/prototype-1.6.1.js"></script>    <script type="text/javascript" src="/db/javascripts/jquery-1.3.2.min.js"></script>    <script type="text/javascript" src="/db/javascripts/jquery-ui-1.8.custom.min.js"></script>    <script type="text/javascript">jQuery.noConflict();</script>    <script type="text/javascript" src="/db/fw/fusioncharts.js"></script>    <script type="text/javascript" src="/db/javascripts/sortable.js"></script>    <script type="text/javascript" src="/db/javascripts/tablesort.js"></script>    <script type="text/javascript" src="/db/javascripts/grid-widget.js"></script>    <script type="text/javascript" src="/db/javascripts/printing.js"></script>    <script type="text/javascript" src="/db/javascripts/slider.js"></script>        <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />    <style type="text/css" media="screen" >            /* put the left rounded edge on the track */            #track1-left {                position: absolute;                width: 5px;                height: 9px;                background: transparent url(/db/images/bg_slider_track.png) no-repeat top left;            }                        /* put the track and the right rounded edge on the track */            #track1 {                background: transparent url(/db/images/bg_slider_track.png) no-repeat top right;            }    </style>    <script>            jQuery(function() {                    jQuery(".datepicker").datepicker();            });    </script>    <title>MultiValue Dashboard</title>    <!-- REFRESH -->    </head><body><div id="printFrame" class="printme"></div><div id="header"><!-- HEADER --></div>    <div style="clear:both"></div>    <div id="logo">        <img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">    </div>    <!-- RefreshSlider --><div id="dashboardWrapper">    <div id="dashboard">        <!-- DASHBOARD -->        <div class="clear"></div>    </div>    <div class="clear"></div>    <br/></div><div id="footer">    <!-- FOOTER -->    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a></div></div><script type="text/javascript">/*jQuery(document).ready(function(){       jQuery('.widgetized').tablesort();     });*/</script>    </body></html>000548rss_edit.html0c2<form action="<!-- CGI$PATH -->/RSS.MAINT" method="post"><input type="hidden" name="id" value="<!-- feed_id -->"><input type="hidden" name="action" value="save"><table><tr> <td align="right">Feed ID:</td> <td><!-- edit_feed_id --></td></tr><tr> <td align="right">Name:</td> <td><input type="text" name="feed_name" value="<!-- feed_name -->"></td></tr><tr> <td align="right">Description:</td> <td><textarea name="feed_desc" rows="5" cols="50"><!-- feed_desc --></textarea></td></tr><tr> <td align="right">Select Subroutine:</td> <td><input type="text" name="sel_sub" value="<!-- sel_sub -->"> <!-- sel_sub_msg --> <a target="RSS.BP_<!-- sel_sub -->" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=<!-- sel_sub -->">Edit Source</a></td></tr><tr> <td align="right">Item Subroutine:</td> <td><input type="text" name="item_sub" value="<!-- item_sub -->"> <!-- item_sub_msg --> <a target="RSS.BP_<!-- item_sub -->" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=<!-- item_sub -->">Edit Source</a></td></tr><tr>  <td align="right">Modes:</td>  <td><textarea name="feed_modes" rows="10" cols="50"><!-- feed_modes --></textarea></td></tr><!-- EXTRA --><tr><td colspan="2"><input type="submit" name="save_feed" value="Save">&nbsp;<input type="submit" name="cancel_edit" value="Cancel"></td> </tr></table></form>000B5Frss_admin_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/><link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" /> <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" /> <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />  <script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>            	<script src="/db/javascripts/jquery.form.js" type="text/javascript" charset="utf-8"></script>    	        <script src="/db/javascripts/jquery.url.js" type="text/javascript" charset="utf-8"></script> 		<script src="/db/javascripts/rss_admin.js" type="text/javascript"></script><!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]--><!-- SITE_THEME --><title>RSS Feed Admin</title></head><body><div id="header"><!-- HEADER -->  <div id="logo">  	<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">  </div></div><div id="mainWrapper">		<div id="rss-dialog" title="New RSS Feed">		<div id="rss-messages"></div>		<form id="rss-form" method="post" action="/dbc/RSS.MAINT">			<input id="feed_id" type="hidden" value="NEW" name="id"/>			<input type="hidden" value="save" name="action"/>			<input type="hidden" value="Save" name="save_feed"/>						<table>			<tbody><tr>			 <td align="right">Feed ID:</td>			 <td><input id="new_id" type="text" value="" name="new_id"/></td>			</tr>			<tr>			 <td align="right">Name:</td>			 <td><input id="feed_name" type="text" value="" name="feed_name"/></td>			</tr>			<tr>			 <td align="right">Description:</td>			 <td><textarea id="feed_desc" cols="50" rows="5" name="feed_desc"></textarea></td>			</tr>			<tr>			 <td align="right">Select Subroutine:</td>			 <td><input id="select_sub" type="text" value="" name="sel_sub"/>  <a id="edit-sub-link" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&amp;ed_item=" target="RSS.BP_">Edit Source</a></td>			</tr>			<tr>			 <td align="right">Item Subroutine:</td>			 <td><input id="item_sub" type="text" value="" name="item_sub"/>  <a id="edit-item-link" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&amp;ed_item=" target="RSS.BP_">Edit Source</a></td>			</tr>			<tr>			  <td align="right">Modes:</td>			  <td><textarea id="feed_modes" cols="50" rows="10" name="feed_modes"></textarea></td>			</tr>			</tbody></table>		</form>	</div><!-- ADMIN_MAIN --></div><div id="footer">    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard/?tldb">Zumasys</a>    </div></div></body></html>0008E5RefreshSlider0c2<!-- outerTrackWrapper -->    <script type="text/javascript" language="javascript">  // <![CDATA[  // horizontal slider control  var slider1 = new Control.Slider('handle1', 'track1', {    range: $R(0, 9),    values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],    sliderValue: 1, // won't work if set to 0 due to a bug in script.aculo.us    onSlide: function(v) { showRefresh(v); },    onChange: function(v) { if ($('horizontal-slider')) {                    $('horizontal-slider').value = v; $('slider-form').submit();                     }    }  });  function setSliderValue(slider, value) {    // due to onChange code above we need this or     // a 0 will be put in the text box when you delete the value    //if (value == '') return;    if (isNaN(value)) {      slider.setValue(0.1);    } else {      slider.setValue(value);    }  }  function showRefresh(value) {    var dispRate = '';    switch (value) {      case 0:        dispRate = 'Auto-Refresh: Off';        break ;      case 1:        dispRate = 'Auto-Refresh: 15 seconds';        break ;      case 2:        dispRate = 'Auto-Refresh: 30 seconds';        break ;            case 3:        dispRate = 'Auto-Refresh: 1 minute';        break ;      case 4:        dispRate = 'Auto-Refresh: 2 minutes';        break ;            case 5:        dispRate = 'Auto-Refresh: 5 minutes';        break ;            case 6:        dispRate = 'Auto-Refresh: 10 minutes';        break ;            case 7:        dispRate = 'Auto-Refresh: 15 minutes';        break ;            case 8:        dispRate = 'Auto-Refresh: 30 minutes';        break ;            case 9:        dispRate = 'Auto-Refresh: 1 hour';        break ;            default:        dispRate = 'Auto-Refresh: Off';        break ;    }    document.getElementById('dispRate').innerHTML = dispRate;  }  var refreshRate = '<!-- REFRESH_RATE -->';  showRefresh(parseInt(refreshRate));    if (refreshRate != '') {    setSliderValue(slider1, refreshRate);  } else {    setSliderValue(slider1, 0.1);    }  // ]]></script><form name="reForm" method="post" action="" id="slider-form">  <input type="hidden" id="horizontal-slider" name="refresh" value="<!-- REFRESH_RATE -->" /></form>         00026APORTAL.DOCUMENTATION0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=100% align="center"><a href="/dbc/MVDB.MAIN?dbname=PORTAL RUN DOCUMENTATION">Running the Portal Dashboard Reports</a></td></tr><tr><td width=100% align="center"><a href="/dbc/MVDB.MAIN?dbname=PORTAL.SETUP.DOCUMENTATION">Portal Reports Setup Documentation</a></td></tr><tr><td width=100% align="center"><a href="/dbc/MVDB.MAIN?dbname=PORTAL.REPORTS.DOCUMENTATION">Glossary of Portal Dashboard Reports</a></td></tr></tdead></table></div>002FA4PORTAL.SETUP.DOCUMENTATION0c2<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 15 (filtered)"><style><!-- /* Font Definitions */ @font-face	{font-family:Wingdings;	panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face	{font-family:"Cambria Math";	panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face	{font-family:Calibri;	panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:0in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}.MsoChpDefault	{font-family:"Calibri",sans-serif;}.MsoPapDefault	{margin-bottom:8.0pt;	line-height:107%;}@page WordSection1	{size:8.5in 11.0in;	margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1	{page:WordSection1;} /* List Definitions */ ol	{margin-bottom:0in;}ul	{margin-bottom:0in;}--></style></head><body lang=EN-US><div class=WordSection1><p class=MsoNormal><b><span style='font-size:14.0pt;line-height:107%'>PortalSales Report Setup:</span></b></p><p class=MsoNormal>This setup process identifies the fields necessary forderiving sales, gross profit, and margin numbers. It allows for sales numbersto be broken out by sales person and, if applicable, by branch and/or region.</p><p class=MsoNormal><b>Sales File Account</b>  Multi-value systems normallyhave multiple accounts where data may reside. The sales reports will be drivenby a file of sales. This field needs the name of the account where that fileresides.</p><p class=MsoNormal><b>Name of Sales File</b>  The name of the file containingthe sales information.</p><p class=MsoNormal><b>Date of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that contains the date the sale was complete.</p><p class=MsoNormal><b>Month of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that displays the numeric value of the month the salewas completed. If the system doesnt have this dictionary item, there shouldbe one created using the Date of Sale Dict Name as a guide.</p><p class=MsoNormal><b>Year of Sale Dict Name </b> The name of the dictionaryitem in the sales file that displays the 4 digit year the sale was completed. Ifthe system doesnt have this dictionary item, there should be one created usingthe Date of Sale Dict Name as a guide.</p><p class=MsoNormal><b>Amount of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that contains the total amount of the sales transaction.This dictionary </p><p class=MsoNormal><b>Cost of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that contains the cost of the sales transaction. Thisis used for determining gross profit and margin. If this information is notavailable in the system, the field should be left blank, disabling reportsassociated with gross profit and margin.</p><p class=MsoNormal><b>Salesman Dict Name</b>  The name of the dictionary itemin the sales file that contains the primary salesman on the transaction. Mostsystems will have a salesman code in the sales file and another file thatcontains the actual names of the salesmen. This dictionary item should be onethat displays the actual name. </p><p class=MsoNormal><b>Branch Dict Name</b>  The name of the dictionary itemin the sales file that contains the branch being credited with thetransaction. Most systems will have a branch code in the sales file andanother file that contains the actual names of the branches. This dictionaryitem should be one that displays the actual name. This field only applies ifsales can be broken out by a branch. </p><p class=MsoNormal><b>Region Dict Name</b>  The name of the dictionary itemin the sales file that contains the region being credited with thetransaction. Most systems will have a region code in the sales file andanother file that contains the actual names of the regions. This dictionaryitem should be one that displays the actual name. This field only applies ifsales can be broken out by a region. </p><p class=MsoNormal><b>Go</b>  No validation is made on Portal Sales ReportSetup fields until this button is clicked. When validating, checks are madefor:</p><p class=MsoListParagraphCxSpFirst style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid file name in the account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Existence of each of the dictionary names entered</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Salesman Dict Name looking to another file for the actual name ofthe salesman. An ignorable warning is issued if that is not the case.</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Branch Dict Name looking to another file for the actual name ofthe branch. An ignorable warning is issued if that is not the case.</p><p class=MsoListParagraphCxSpLast style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Region Dict Name looking to another file for the actual name ofthe region. An ignorable warning is issued if that is not the case.</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal><b><span style='font-size:14.0pt;line-height:107%'>Portal ARReport Setup:</span></b></p><p class=MsoNormal>This setup process identifies the fields necessary for evaluatingaccount receivables. It breaks out statistics by amounts, aging categories, percentages,and periods for comparison purposes. It also identifies by customer whenviewing most amounts owed, most days aged, and accounts with significant changesin payment patterns.</p><p class=MsoNormal><b>AR File Account</b>  The AR reports will be driven by afile of receivables or invoices. This field needs the name of the accountwhere that file resides.</p><p class=MsoNormal><b>Name of AR File</b>  The name of the file containing thereceivables with amounts and payment information.</p><p class=MsoNormal><b>Due Date Dict Name</b>  The name of the dictionary itemin the AR file showing the due date of the receivable.</p><p class=MsoNormal><b>Date Paid Dict Name</b>  The name of the dictionary itemin the AR file showing the date the receivable was paid.</p><p class=MsoNormal><b>Invoice Amount Dict Name</b>  The name of the dictionaryitem in the AR file that contains the original amount owed. </p><p class=MsoNormal><b>Remaining Balance Dict Name</b>  The name of thedictionary item in the AR file that contains the remaining balance. </p><p class=MsoNormal><b>Customer Dict Name</b>  The name of the dictionary itemin the AR file that contains the customer. Most systems will have a customercode in the AR file and another file that contains the actual names of the customers.This dictionary item should be one that displays the actual name. </p><p class=MsoNormal><b>Go</b>  No validation is made on Portal AR Report Setupfields until this button is clicked. When validating, checks are made for:</p><p class=MsoListParagraphCxSpFirst style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid file name in the account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Existence of each of the dictionary names entered</p><p class=MsoListParagraphCxSpLast style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Customer Dict Name looking to another file for the actual name ofthe salesman. An ignorable warning is issued if that is not the case.</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal><b><span style='font-size:14.0pt;line-height:107%'>Portal APReport Setup:</span></b></p><p class=MsoNormal>This setup process identifies the fields necessary for evaluatingaccount payables. It breaks out statistics by amounts, aging categories, and percentages.</p><p class=MsoNormal><b>AP File Account</b>  The AP reports will be driven by afile of payables. This field needs the name of the account where that fileresides.</p><p class=MsoNormal><b>Name of AP File</b>  The name of the file containing thepayables with amounts and payment information.</p><p class=MsoNormal><b>Due Date Dict Name</b>  The name of the dictionary itemin the AP file showing the due date of the payable.</p><p class=MsoNormal><b>Date Paid Dict Name</b>  The name of the dictionary itemin the AP file showing the date the payable was paid.</p><p class=MsoNormal><b>Invoice Amount Dict Name</b>  The name of the dictionaryitem in the AP file that contains the original amount owed. </p><p class=MsoNormal><b>Remaining Balance Dict Name</b>  The name of thedictionary item in the AP file that contains the remaining balance. </p><p class=MsoNormal><b>Go</b>  No validation is made on Portal AP Report Setupfields until this button is clicked. When validating, checks are made for:</p><p class=MsoListParagraphCxSpFirst style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid file name in the account</p><p class=MsoListParagraphCxSpLast style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Existence of each of the dictionary names entered</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p></div></body></html>000666pdftemplate0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>    <link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]-->            <!-- SITE_THEME -->        <!-- end styles -->                <script type="text/javascript" src="/db/javascripts/prototype-1.6.1.js"></script>    <script type="text/javascript" src="/db/javascripts/jquery-1.3.2.min.js"></script>    <script type="text/javascript">jQuery.noConflict();</script>    <script type="text/javascript" src="/db/fw/fusioncharts.js"></script>    <script type="text/javascript" src="/db/javascripts/sortable.js"></script>    <script type="text/javascript" src="/db/javascripts/tablesort.js"></script>    <script type="text/javascript" src="/db/javascripts/grid-widget.js"></script>    <script type="text/javascript" src="/db/javascripts/printing.js"></script>    <script type="text/javascript" src="/db/javascripts/slider.js"></script>        <title>MultiValue Dashboard</title>    </head><body><div style="clear:both"></div><div id="logo">    <img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard"></div><div id="dashboardWrapper">    <div id="dashboard">        <!-- DASHBOARD -->        <div class="clear"></div>    </div>    <div class="clear"></div>    <br/></div></body></html>00022Bwidget_debug.html0c2<table width="100%"><tr><td>Widget Name:</td><td><!-- WIDGET_NAME --></td></tr><tr><td>Widget Subroutine:</td><td><!-- WIDGET_SUB_NAME --> <!-- WIDGET_EDIT_LINK --></td></tr></table><!-- DEBUG_REASON --><br /><!-- REMEDY -->Runtime errors for <!-- WIDGET_SUB_NAME --><br /><table width="100%"><tr><th>Date / Time</th><th>User</th><th>Error</th></tr><!-- RUNTIME_ERRORS --><table width="100%"><tr><td colspan="2">WIDGET.USER.DATA values:</td></tr><tr><th>Position</th><th>Value</th></tr><!-- WIDGET_USER_DATA --></table>000F48pkg_list_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>	    <script src="http://alpha.bravo:83/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>            	    <script src="http://alpha.bravo:83/db/javascripts/jquery.form.js" type="text/javascript" charset="utf-8"></script>    	        	<script src="http://alpha.bravo:83/db/javascripts/jquery.url.js" type="text/javascript" charset="utf-8"></script> 	<script src="http://alpha.bravo:83/db/javascripts/initAdminTemplate.js" type="text/javascript" charset="utf-8"></script> 	<script src="http://alpha.bravo:83/db/javascripts/sortable.js" type="text/javascript" charset="utf-8"></script> 	<script src="http://alpha.bravo:83/db/javascripts/tablesort.js" type="text/javascript" charset="utf-8"></script> 		<script type="text/javascript"> 		$(function() {			$("#tabs").tabs();			$("#accordion").accordion({ autoHeight: false });			$('#edit_dialog').dialog({ autoOpen: false, modal: true });			$('#edit_form').click(function() {				$('#edit_dialog').dialog('open');			});			$('#delete_dialog').dialog({ autoOpen: false, modal: true });			$('#delete_form').click(function() {				$('#delete_dialog').dialog('open');			});		});			</script> 		<link rel="stylesheet" href="http://alpha.bravo:83/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" /> 	<link rel="stylesheet" href="http://alpha.bravo:83/db/css/application.css" type="text/css" charset="utf-8" /> 	<link rel="stylesheet" href="http://alpha.bravo:83/db/css/ingrid.css" type="text/css" charset="utf-8" />     <link rel="StyleSheet" href="http://alpha.bravo:83/db/css/jquery-ui.css" media="screen" type="text/css" />     <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]--> 	 <!-- SITE_THEME --><title>Package Management</title></head><body><div id="edit_dialog"><p>      <form id="new-file-form" method="get" action="/dbc/MVPKG.MAIN">       <div id="new-file-messages"></div>       <table><tbody>      <tr>         <td colspan="2">File:<input id="file-name" type="text" value="" name="file_name"/></td>       </tr>      <tr>        <td><input type="radio" name="file_dict" value="DICT" id="file-dict"></td><td>DICT</td>      </tr>      <tr>        <td><input type="radio" name="file_dict" value="DATA" id="file-dict"></td><td>DATA</td>      </tr>      <tr>         <td><input type="radio" name="items_type" vaue="savedlist" id="items-type"></td><td>Saved List<br/>        file:<input type="text" name="savedlist_file" id="savedlist-file"><br/>        list:<input type="text" name="savedlist_id" id="savedlist-id"></td>      </tr>       <tr>         <td><input type="radio" name="items_type" value="all" id="items-type"></td><td>All Items</td>      </tr>       <tr>         <td><input type="radio" name="items_type" value="items" id="items-type"></td>         <td>Item: <input type="text" name="items_items" id="items-items"></td>       </tr>       </tbody></table>       <input type="hidden" value="save_user" name="action"/>       </form>       <div class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix">        <button type="button" class="ui-state-default ui-corner-all">Cancel</button>        <button type="button" class="ui-state-default ui-corner-all">Save</button>      </div></p></div><div id="header"><!-- HEADER -->  <div id="logo">  	<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">  </div></div><div id="mainWrapper"><!-- ADMIN_MAIN --></div></div><div id="footer">    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a>    </div></div></body></html>0007E2MVDB.DEFS0c00000B1Administrator0c21AdminConfigPDFConfigDashboard License UsageCode TemplatesD3 Runtime ErrorsSystem - SessionShow Vars11122551121212ADMINadminAdmin30000091Chart Demo0c22Demo-PieDemo-SS LineDemo-DoughnutDemo-SS ColDemo- MS Col2223312312ADMINguestadminDemonstration ChartsTheme 11000062Demo Financial Company0c21DEMO FINANCIAL PICTURE21ADMINguestadminDemo Financial Company00005CDEMO AVERAGE DAYS CHART0c21DEMO AVERAGE DAYS CHART21dummydisplay average days chart00003DDEMO NET INCOME CHART0c21DEMO NET INCOME CHART21dummy00005BDEMO REV.GP SALES CHART0c21DEMO REV.GP SALES CHART21dummyDisplay Rev.Gp Sales Chart000047DEMO SALES CHART0c21DEMO SALES CHART21dummyDisplay Sales Chart000050DEMO SALES PERCENTS0c21DEMO SALES PERCENTS21dummyDisplay Sales Percents000055Emailed Report0c21Emailed Report21Display contents of an emailed report link000041Icons0c21Icon Gallery11ADMINguestadminIcon Gallery50000085PORTAL REPORTS SETUP0c21PORTAL SALES REPORT SETUPPORTAL AR REPORT SETUPPORTAL AP REPORT SETUP222123Portal Reports Setup00003DPORTAL MARGINS0c21PORTAL MARGINS21dummyPortal Margins000046PORTAL AR REPORTS0c22PORTAL AR REPORTS31dummyPortal AR Reports00004FPORTAL SALES REPORTS0c21PORTAL SALES REPORTS21dummyPortal Sales Reports00003EPORTAL DASHBOARD0c21PORTAL DASHBOARD21Portal Dashboard000061PORTAL.SETUP.DOCUMENTATION0c21PORTAL SETUP DOCUMENTATION21dummyPortal Setup Documentation000068PORTAL.REPORTS.DOCUMENTATION0c21PORTAL.REPORTS.DOCUMENTATION21dummyPortal Reports Documentation00005FPORTAL DASHBOARD DOCUMENTATION0c23PORTAL.DOCUMENTATION31Portal Dashboard Documentation00005CPORTAL RUN DOCUMENTATION0c21PORTAL.RUN.DOCUMENTATION21dummyPortal Run Documentation00007FDISPLAY PORTAL BALANCE PIE CHART0c21PORTAL AR REPORTSPORTAL AP REPORTS2212dummyPie chart to display AR & AP balances0000B3DICT_MVDB.MAP.DATA0c0000022NAME0c1A0Map NameG0*1L4000001FLONG0c1A2Long NameL25000023INTERNAL.ID0c1A0IDG1*1L10000021SHORT0c1A1Short NameL10046BE6MVDB.MAP.DATA0c0000023FrenchGuiana#GF.CY.CY0c2CYCayenne000018Fiji#FJ.CE.RW0c2RWRewa00001CMacau#MO.IL.CO0c2COColoane00001CChina2#CN.GD0c2GDGuangdong000024FranceDepartment#FR.ES0c2ESEssonne000026FranceDepartment#FR.FI0c2FIFinistere000019Congo#CG.CU0c2CUCuvette000019Algeria#DZ.AR0c2ARAdrar00001AMacedonia#MK.ST0c2STStip00001AIndiana#0570c2HAHamilton000016NewYork#0290c2ERErie00001FNorthCarolina#0970c2IRIredell000018Georgia#2490c2SCSchley00001BIreland#0170c2MEM&iacute;00002CNorthAmerica#0190c2KNSt. Kitts &amp; Nevis000016Kansas#0510c2ELEllis00001FSouthCarolina#0230c2CSChester00001AIllinois#0870c2JHJohnson00001AMissouri#0070c2AUAudrain000024WorldwithCountries#1460c2IRIreland00001CNorthDakota#0210c2DIDickey000018Texas#0790c2COCCochran000017Ohio#0410c2DLDelaware000023NewMexico#0130c2DADo&ntilde;a Ana000018Nebraska#0110c2BOBoone00001AWyoming#0330c2SHSheridan000024Europewithcountries#0150c2GRGreece000018Malaysia#0010c2JOJohor000019Tennessee#1010c2LELewis00001EScotland#0180c2LALanarkshire000017NewWorld#1910c2IZIraq000018Oklahoma#0530c2GNGrant000014Iowa#1050c2JNJones00001DAlaska#2700c2WHWade Hampton000017Texas#4410c2TAYTaylor000025NewCaledonia#NC.NO.PT0c2PTPouembout000019Ontario#480c2WAWaterloo000019Montenegro#190c2TITivat000019MiddleEast#140c2SYSyria000019Switzerland#260c2JUJura000023SouthEuropeanRegion#120c2CSSerbia000019NewWorld#390c2DZAlgeria00003AQuebec#110c2GAGasp&eacute;sie-&Icirc;les-de-la-Madeleine000014Kenya#020c2COCoast00001BPuertoRico#570c2GMGuayama00001ABahamas#150c2HTHope Town000017Japan#450c2YAYamagata000024NorwayRegion#130c2OT&Oslash;stfold000026PolandCounties#PL.DS.LM0c2DLMLegnica000027MarshallIsland#MH.MH.KW0c2KWKwajalein000021Macedonia#MK.SU0c2SUStudenicani00001FHongKong#HK.KI0c2KIKwai Tsing000019Palau#PW.PE0c2PEPeleliu000018Uganda#UG.BW0c2BWBukwa00001CVietnam#VN.HY0c2HYHung Yen00001EGambia#GM.UR0c2URUpper River000034Nigeria#NG.FC0c2FCAbuja(Federal Capital Territory)00001BSenegal#SN.KL0c2KLKaolack000025Morocco#MA.CO0c2COChaouia Ouardigha00001DBurma#MM.KN0c2KNKayin State00001CMissouri#1890c2SOSt. Louis000024Ireland#0180c2MOMuineach&aacute;in000020NorthAmerica#0200c2LCSt. Lucia00001DCalifornia#0930c2SYSiskiyou000025Alaska#0900c2FAFairbanks North Star000017Texas#2610c2KEDKenedy00001DLouisiana#0050c2ASAscension000018Georgia#0690c2CFCoffee000022WorldwithCountries#1470c2ITItaly000018Minnesota#1210c2POPope00001AKentucky#1050c2HKHickman000019Michigan#1150c2MRMonroe00001AFlorida#0330c2ESEscambia00001DMississippi#0150c2CRCarroll000025Europewithcountries#0160c2HUHungary000018Malaysia#0020c2KEKedah000019Arkansas#0050c2BABaxter00001EEngland#0010c2BEBedfordshire00001FWestVirginia#0330c2HIHarrison00001DScotland#0190c2MIMidlothian000019NewWorld#1920c2IEIsrael00001BAsia3#0340c2PHPhilippines000018Virginia#1810c2SRSurry00001AColorado#0130c2BOBoulder00001BSouthDakota#0510c2GRGrant00001AAlabama#0290c2CBCleburne00001ENorwayRegion#140c2RORogaland00001BAustralia#VI0c2VIVictoria00001BOntario#490c2WEWellington00001AMontenegro#200c2ULUlcinj00001EMiddleEast#150c2TITajikistan000022SouthEuropeanRegion#130c2ESSpain000018NewWorld#400c2AOAngola00002BQuebec#120c2CAChaudi&egrave;re-Appalaches000016Kenya#030c2EAEastern000017Bahamas#160c2INInagua000018Japan#460c2YMYamaguchi00001DFiji#FJ.EA.LM0c2LMLomaiviti000027PolandCounties#PL.PK.PM0c2PPMPrzemysl00001CMacedonia#MK.TL0c2TLBitola00001ARwanda#RW.ES0c2ESEastern00001AUganda#UG.TY0c2TYMityana00001BMacedonia#MK.CA0c2CACaska000026EquatorialGuinea#GQ.BS0c2BSBioko Sur000015Iran#IR.IL0c2ILIlam000021FranceDepartment#FR.EU0c2EUEure000021FranceDepartment#FR.GA0c2GAGard000023Mauritius#MU.PA0c2PAPamplemousses000019Nigeria#NG.EN0c2ENEnugu000022Algeria#DZ.AT0c2ATAin Temouchent00001AAlgeria#DZ.BJ0c2BJBejaia000018Texas#4430c2TERTerrell000019Indiana#0590c2HNHancock000017NewYork#0310c2ESEssex00001FNorthCarolina#0990c2JAJackson00001BVirginia#0010c2ACAccomack000019Georgia#2510c2SRScreven000023Ireland#0190c2OFUa F&aacute;ilghe000037NorthAmerica#0210c2VCSt. Vincent &amp; the Grenadines00001AKansas#0530c2EWEllsworth000024SouthCarolina#0250c2CTChesterfield000017Illinois#0890c2KAKane000018Missouri#0090c2BYBarry000023WorldwithCountries#1480c2LVLatvia00001CNorthDakota#0230c2DVDivide000015Texas#0810c2COKCoke000013Ohio#0430c2ERErie000019Spain#0010c2ANAndalucia000018NewMexico#0150c2EDEddy00001CNebraska#0130c2BXBox Butte00001AWyoming#0350c2SUSublette000025Europewithcountries#0170c2ISIceland00001BMalaysia#0030c2KLKelantan00001BEngland#0020c2BRBerkshire00001BTennessee#1030c2LILincoln000018Scotland#0200c2MOMoray000019NewWorld#1930c2JOJordan000018Oklahoma#0550c2GEGreer000015Iowa#1070c2KEKeokuk00001DColorado#0140c2BRBroomfield000026NorwayRegion#150c2SOSogn og Fjordane000015Ontario#500c2YOYork000020Montenegro#210c2ZA&#381;abljak00001AMiddleEast#160c2TUTurkey000023SouthEuropeanRegion#140c2TKTurkey000026USACentralRegion#460c2SDSouth Dakota000017NewWorld#410c2BJBenin000015Quebec#130c2LVLaval00001EPuertoRico#590c2GLGuayanilla00001CBahamas#170c2LILong Island000018Japan#470c2YNYamanashi000023MarshallIsland#MH.MH.ME0c2MEMejit000026Philippines#PH.SK0c2SKSultan Kudarat00001FCoteDivoire#CI.SV0c2SVSavanes000020Macedonia#MK.AV0c2AVKavadartsi00001ARussia#RU.IV0c2IVIvanovo000025Russia#RU.KB0c2KBKabardino-Balkaria00001AEurope2#EU.PL0c2PLPoland00001BQatar#QA.DA0c2DAAd Dawhah00001BAlgeria#DZ.TL0c2TLTlemcen000019Panama#PA.PN0c2PNPanama000022Uzbekistan#UZ.QA0c2QAKashkadarya000018Alabama#0310c2CFCoffee000019Vermont#0010c2ADAddison000022Ireland#0200c2RORos Com&aacute;n00002CNorthAmerica#0220c2TTTrinidad &amp; Tobago00001BCalifornia#0950c2SOSolano000015Texas#2630c2KETKent00001ELouisiana#0070c2AUAssumption00001AGeorgia#0710c2CQColquitt00002AWorldwithCountries#1490c2LNLiechtenstein00001AMinnesota#1230c2RMRamsey00001AKentucky#1070c2HOHopkins00001BMichigan#1170c2MNMontcalm000019Florida#0350c2FLFlagler000016Spain#0020c2ARAragon00001FMississippi#0170c2CHChickasaw000025Europewithcountries#0180c2IEIreland000019Malaysia#0040c2MEMelaka000019Arkansas#0070c2BEBenton000021England#0030c2BUBuckinghamshire00001EWestVirginia#0350c2JAJackson00001DScotland#0210c2NANairnshire000019NewWorld#1940c2KUKuwait000022Asia3#0360c2RURussian Federation000019Virginia#1830c2SSSussex00001AColorado#0150c2CHChaffee00001DSouthDakota#0530c2GEGregory00001CWorld#NA0c2NANorth America000031NorwayRegion#160c2STS&oslash;r-Tr&oslash;ndelag000024Australia#WA0c2WAWestern Australia000020MiddleEast#170c2TXTurkmenistan000023SouthEuropeanRegion#150c2CYCyprus00001ANewWorld#420c2BWBotswana000021Quebec#140c2LALanaudi&egrave;re000016Kenya#050c2NANairobi00001DBahamas#180c2MCMangrove Cay000019Jordan#JO.JA0c2JAJarash000029CentralAfricanRepublic#CF.MB0c2MBMbomou000026Philippines#PH.SL0c2SLSouthern Leyte00001DMongolia#MN.OG0c2OGOmnogovi00001DPhilippines#PH.AK0c2AKAklan00001EPhilippines#PH.BA0c2BABataan000026Russia#RU.KC0c2KCKarachay-Cherkessia000024Libya#LY.HZ0c2HZAl Hizam al Akhdar000020Algeria#DZ.TM0c2TMTamanghasset000019Algeria#DZ.BL0c2BLBlida000016Texas#4450c2TEYTerry00001AIndiana#0610c2HRHarrison00001ANewYork#0330c2FRFranklin000020NorthCarolina#1010c2JOJohnston00001CVirginia#0030c2ALAlbemarle00001AGeorgia#2530c2SMSeminole00001AIreland#0210c2SLSligeach000024NorthAmerica#0230c2USUnited States000017Kansas#0550c2FIFinney000021SouthCarolina#0270c2CDClarendon00001BIllinois#0910c2KNKankakee000019Missouri#0110c2BRBarton000026WorldwithCountries#1500c2LTLithuania00001ANorthDakota#0250c2DNDunn000018Texas#0830c2COLColeman000018Ohio#0450c2FAFairfield000018Spain#0030c2ASAsturias000019NewMexico#0170c2GRGrant000017Nebraska#0150c2BYBoyd00001CWyoming#0370c2SWSweetwater000023Europewithcountries#0190c2ITItaly000022Malaysia#0050c2NSNegeri Sembilan000020England#0040c2CACambridgeshire00001ATennessee#1050c2LOLoudon000019Scotland#0220c2OROrkney00001ANewWorld#1950c2LBLebanon000019Oklahoma#0570c2HAHarmon000016Iowa#1090c2KOKossuth00001ENorwayRegion#170c2TETelemark000020Moldova#460c2BAB&#259;l&#355;i000026MiddleEast#180c2AEUnitedArabEmirates000029SouthEuropeanRegion#160c2VAVatican City00001FUSACentralRegion#480c2TXTexas00001ENewWorld#430c2BFBurkina Faso00001BQuebec#150c2LULaurentides00001CKenya#060c2NENorth Eastern00001CPuertoRico#610c2GBGuaynabo00001ABahamas#190c2MGMayaguana000022Macau#MO.MA.SA0c2SASanto Antonio000019Fiji#FJ.CE.SR0c2SRSerua00001AMacau#MO.IL.CT0c2CTCotai000019Ghana#GH.AH0c2AHAshanti00001DPhilippines#PH.SM0c2SMSamar000020Mongolia#MN.OH0c2OHOvorkhangai00001EMacedonia#MK.BN0c2BNBrvenica00001DPhilippines#PH.AL0c2ALAlbay00001CRussia#RU.KD0c2KDKrasnodar00001CMicronesia#FM.CH0c2CHChuuk000019Guinea#GN.KA0c2KAKankan000017Benin#BJ.DO0c2DODonga00001BAlgeria#DZ.TN0c2TNTindouf00001DAlgeria#DZ.BM0c2BMBoumerdes00001CSouthDakota#0550c2HAHaakon000019Alabama#0330c2CRColbert00001CVermont#0030c2BEBennington000021Ireland#0220c2TITiobraid Arainn000020NorthAmerica#0240c2GLGreenland00001BCalifornia#0970c2SMSonoma000015Texas#2650c2KERKerr00001DLouisiana#0090c2AVAvoyelles00001AGeorgia#0730c2CUColumbia000027WorldwithCountries#1510c2LULuxembourg00001CMinnesota#1250c2RLRed Lake00001AKentucky#1090c2JAJackson00001EMichigan#1190c2MOMontmorency00001AFlorida#0370c2FRFranklin00002BSpain#0040c2BABaleares (Balearic Islands)00001DMississippi#0190c2COChoctaw000024Europewithcountries#0200c2LVLatvia000019Malaysia#0060c2PAPahang000018Arkansas#0090c2BOBoone00001AEngland#0050c2CHCheshire000020WestVirginia#0370c2JEJefferson00001FScotland#0230c2PBPeeblesshire000017NewWorld#1960c2MUOman000019Asia3#0380c2SGSingapore00001BVirginia#1850c2TATazewell00001BColorado#0170c2CECheyenne000020NewCaledonia#NC.NO.PY0c2PYPoya00001BNorwayRegion#180c2TRTroms000016Moldova#470c2CACahul00001EMiddleEast#190c2UZUzbekistan000022USASouthWestRegion#150c2HIHawaii000019NewWorld#440c2BIBurundi000028Quebec#160c2MOMont&eacute;r&eacute;gie000015Kenya#070c2NYNyanza00001FBahamas#200c2MIMoore's Island00001FLiberia#LR.GB0c2GBGrand Bassa00001CMacedonia#MK.CE0c2CECentar00001BRussia#RU.KE0c2KEKemerovo000019Guinea#GN.KB0c2KBKoubia00001FCameroon#CM.NW0c2NWNord-Ouest000021Lebanon#LE.JL0c2JLMount Lebanon000021FranceDepartment#FR.GE0c2GEGers000024Cambodia#KH.OC0c2OCOddar Meancheay00001EAlgeria#DZ.TO0c2TOTizi Ouzou000016Tonga#TO.EU0c2EU'Eua000026Kazakhstan#KZ.WK0c2WKWest Kazakhstan000019Senegal#SN.LG0c2LGLouga00001DTexas#4470c2THRThrockmorton00001BIndiana#0630c2HDHendricks000018NewYork#0350c2FUFulton00001DNorthCarolina#1030c2JNJones00001CVirginia#0050c2AEAlleghany00001AGeorgia#2550c2SPSpalding00001DIreland#0230c2WAPort Lairge000022NorthAmerica#0250c2PRPuerto Rico000015Kansas#0570c2FOFord000020SouthCarolina#0290c2CLColleton00001AIllinois#0930c2KDKendall000018Missouri#0130c2BABates000026WorldwithCountries#1520c2MKMacedonia00001ANorthDakota#0270c2EDEddy000017Texas#0850c2CONCollin000016Ohio#0470c2FYFayette000015Spain#0050c2CECeuta00001DNewMexico#0190c2GUGuadalupe000018Nebraska#0170c2BRBrown000017Wyoming#0390c2TETeton00002BEuropewithcountries#0210c2LILiechtenstein000018Malaysia#0070c2PEPerak00001AEngland#0060c2COCornwall00001ATennessee#1070c2MCMcMinn00001DScotland#0240c2PEPerthshire000018NewWorld#1970c2OMQatar000019Oklahoma#0590c2HRHarper000012Iowa#1110c2LELee000019Asia3#0390c2LKSri Lanka000019Wisconsin#0010c2ADAdams000020NorwayRegion#190c2VAVest-Agder000023Moldova#480c2CUChi&#351;in&#259;u000019MiddleEast#200c2YMYemen00001ANewWorld#450c2CMCameroon000027Quebec#170c2CQCentre-du-Qu&eacute;bec00001AKenya#080c2RVRift Valley00001APuertoRico#630c2GRGurabo00001FBahamas#210c2NWNew Providence000021Macau#MO.MA.SC0c2SCSao Lourenco000022MarshallIsland#MH.MH.MI0c2MIMili00001CMacedonia#MK.UG0c2UGStruga00001CSudan#SD.UN0c2UNUpper Nile000026Kazakhstan#KZ.EK0c2EKEast Kazakhstan000028Philippines#PH.AN0c2ANAgusan del Norte000026Libya#LY.JI0c2JIAl Jifarah(Al Jfara)00001CBotswana#BW.KW0c2KWKweneng000019China2#CN.HA0c2HAHainan000016Nauru#NR.IJ0c2IJIjuw00001AAlgeria#DZ.TP0c2TPTipaza00001CSouthDakota#0570c2HMHamlin000019Alabama#0350c2CNConecuh000020Australia2#QLD0c2QLDQueensland00001BVermont#0050c2CACaledonia000019Missouri#1950c2SASaline00001FIreland#0240c2WEIarmh&iacute;000025NorthAmerica#0260c2KYCayman Islands00001FCalifornia#0990c2SLStanislaus000017Texas#2670c2KIMKimble00001ELouisiana#0110c2BEBeauregard000024Virginia#7300c2PBPetersburg (City)000016Georgia#0750c2COCook000022WorldwithCountries#1530c2MTMalta00001BMinnesota#1270c2RWRedwood00001CKentucky#1110c2JEJefferson00001BMichigan#1210c2MUMuskegon000019Florida#0390c2GAGadsden000029Spain#0060c2CACanarias (Canary Islands)00001FMississippi#0210c2CLClaiborne000027Europewithcountries#0220c2LTLithuania000019Malaysia#0080c2PRPerlis00001AArkansas#0110c2BRBradley000019England#0070c2CUCumbria00001EWestVirginia#0390c2KAKanawha00001FScotland#0250c2RERenfrewshire00001FNewWorld#1980c2SASaudi Arabia000019Virginia#1870c2WAWarren00001EColorado#0190c2CLClear Creek00001ENorwayRegion#200c2VEVestfold000027Moldova#490c2SNSt&acirc;nga Nistrului00001CNewWorld#460c2CVCape Verde000016Kenya#090c2WEWestern00001CBahamas#220c2NBNorth Abaco000025PolandCounties#PL.LU.LM0c2LLMLublin000024MarshallIsland#MH.MH.MJ0c2MJMajuro00001FLiberia#LR.GD0c2GDGrand Gedeh00001DGhana#GH.BA0c2BABrong-Ahafo000027Mauritania#MR.HC0c2HCHodh Ech Chargui00001CMacedonia#MK.TR0c2TRTearce00001AUganda#UG.UU0c2UUKanungu000019Uganda#UG.WA0c2WAWakiso000019Malawi#MW.SA0c2SASalima000019Russia#RU.KG0c2KGKaluga000019Guinea#GN.KD0c2KDKindia000018China2#CN.HB0c2HBHebei00001AGambia#GM.WE0c2WEWestern000022Bhutan#BT.WP0c2WPWangdi Phodrang00001BWisconsin#0030c2ASAshland000016Texas#4490c2TITTitus000017Indiana#0650c2HYHenry000019NewYork#0370c2GEGenesee00001BNorthCarolina#1050c2LELee000021Maryland#5100c2BABaltimore City000019Virginia#0070c2AMAmelia00001AGeorgia#2570c2SEStephens00001DIreland#0250c2WXLoch Garman000019Kansas#0590c2FRFranklin000022SouthCarolina#0310c2DADarlington000017Illinois#0950c2KOKnox000019Missouri#0150c2BTBenton000024WorldwithCountries#1540c2MVMoldova00001CNorthDakota#0290c2EMEmmons00001ETexas#0870c2CSWCollingsworth000024Virginia#5500c2CPChesapeake (City)000017Ohio#0490c2FRFranklin000019Spain#0070c2CNCantabria00001BNewMexico#0210c2HAHarding00001ANebraska#0190c2BFBuffalo000017Wyoming#0410c2UIUinta000028Europewithcountries#0230c2LULuxembourg00001FMalaysia#0090c2PPPulau Pinang00001CEngland#0080c2DEDerbyshire00001BTennessee#1090c2MYMcNairy000026Scotland#0260c2RCRoss &amp; Cromarty000018NewWorld#1990c2SYSyria00001AOklahoma#0610c2HSHaskell000013Iowa#1130c2LILinn00001ENorwayRegion#210c2SVSvalbard00001CMoldova#500c2EDEdine&#355;00002ANewWorld#470c2CPCentral African Republic00001BPuertoRico#650c2HAHatillo00001DBahamas#230c2NNNorth Andros000017Macau#MO.MA.SE0c2SESe00001BFiji#FJ.CE.TL0c2TLTailevu000020Philippines#PH.SQ0c2SQSiquijor00001CMacedonia#MK.BR0c2BRBerovo000027Macedonia#MK.CH0c2CHCesinovo Oblesevo00001EPhilippines#PH.AP0c2APApayao00001DRussia#RU.KH0c2KHKhabarovsk000019China2#CN.YN0c2YNYunnan000029Guinea#GN.KE0c2KEK&eacute;rouan&eacute;00001ETurkmenistan#TM.LE0c2LELebap00001AAlgeria#DZ.TR0c2TRTiaret00001ANamibia#NA.ER0c2ERErongo00001AColorado#0210c2COConejos00001ASouthDakota#0590c2HNHand000017Alabama#0370c2CSCoosa00001CVermont#0070c2CHChittenden00001BMissouri#1970c2SYSchuyler000026Ireland#0260c2WICill Mhant&aacute;in00001BCalifornia#1010c2SUSutter000015Texas#2690c2KINKing00001DLouisiana#0130c2BIBienville000018Georgia#0770c2CWCoweta000023WorldwithCountries#1550c2MCMonaco00001CMinnesota#1290c2RERenville00001CKentucky#1130c2JSJessamine00001AMichigan#1230c2NENewaygo00001BFlorida#0410c2GIGilchrist000022Spain#0080c2CLCastilla-La Mancha00001CMississippi#0230c2CKClarke000027Europewithcountries#0240c2MKMacedonia000018Malaysia#0100c2SASabah00001AArkansas#0130c2CACalhoun000017England#0090c2DVDevon000020SouthAmerica#0010c2ARArgentina00001CWestVirginia#0410c2LELewis000020Scotland#0270c2RORoxburghshire000025NewWorld#2000c2AEUnitedArabEmirates000018Asia3#0420c2THThailand000013USA#HI0c2HIHawaii00001FNorwayRegion#220c2JMJan Mayen000023Moldova#510c2GAG&#259;g&#259;uzia000016NewWorld#480c2TDChad000020Bahamas#240c2NENorth Eleuthera000017Fiji#FJ.EA.LU0c2LULau000026MarshallIsland#MH.MH.ML0c2MLMaloelap000019Algeria#DZ.CH0c2CHChlef00001DMauritania#MR.GO0c2GOGorgol000020Philippines#PH.SR0c2SRSorsogon00001EMacedonia#MK.BS0c2BSBosilovo00001AMacedonia#MK.CI0c2CICair00001FPhilippines#PH.AQ0c2AQAntique00001FPhilippines#PH.BG0c2BGBenguet00001ARussia#RU.KI0c2KIKarelia00001BQatar#QA.US0c2USUmm Salal000024FranceDepartment#FR.GI0c2GIGironde00001EAlgeria#DZ.TS0c2TSTissemsilt00002ASaoTomeandPrincipe#ST.AG0c2AGAgua Grande00001AWisconsin#0050c2BABarron000024Alaska#2800c2WPWrangell-Petersburg00001ATexas#4510c2TOGTom Green000018Indiana#0670c2HOHoward000018NewYork#0390c2GRGreene00001ENorthCarolina#1070c2LNLenoir00001AVirginia#0090c2AHAmherst000019Georgia#2590c2STStewart000022Ireland#0270c2NLNorthern Ireland000016Kansas#0610c2GEGeary00001ESouthCarolina#0330c2DIDillon000017Illinois#0970c2LALake00001CMissouri#0170c2BNBollinger000027WorldwithCountries#1560c2MGMontenegro00001CNorthDakota#0310c2FOFoster000019Texas#0890c2CORColorado000015Ohio#0510c2FUFulton00001FSpain#0090c2CYCastilla y Leon00001BNewMexico#0230c2HIHidalgo000017Nebraska#0210c2BUBurt00001AWyoming#0430c2WAWashakie000023Europewithcountries#0250c2MTMalta00001AMalaysia#0110c2SRSarawak000018England#0100c2DODorset000019Tennessee#1110c2MAMacon00001ESouthAmerica#0020c2BOBolivia00001FScotland#0280c2SESelkirkshire000018NewWorld#2010c2YMYemen000019Oklahoma#0630c2HUHughes000015Iowa#1150c2LOLouisa000030MadagascarRegions#MG.FI.HM0c2HMHaute Matsiatra00001EBahamas#250c2RIRagged Island00001FGuatemala#010c2AVAlta Verapaz000022Moldova#520c2LAL&#259;pu&#351;na00001AVenezuela#010c2ZAmazonas000019NewWorld#490c2KMComoros00001FPuertoRico#670c2HOHormigueros00001AAlgeria#DZ.BS0c2BSBiskra000023Burma#MM.MD0c2MDMandalay Division000018Jordan#JO.IR0c2IRIrbid00001FMacedonia#MK.VA0c2VAValandovo000027Philippines#PH.SS0c2SSSurigao del Sur000017Niger#NE.DF0c2DFDiffa000019China2#CN.XZ0c2XZXizang000025CoteDivoire#CI.BS0c2BSBas-Sassandra000018China2#CN.HE0c2HEHenan000022Madagascar#MG.AS0c2ASAntsiranana00001CEurope2#EU.PT0c2PTPortugal00001DVirginia#1910c2WSWashington00001BColorado#0230c2CSCostilla00001CSouthDakota#0610c2HSHanson00001BAlabama#0390c2CVCovington000017Vermont#0090c2ESEssex00001BMissouri#1990c2SLScotland00001BCalifornia#1030c2TETehama000017Alaska#1000c2HAHaines000017Texas#2710c2KIEKinney00001BLouisiana#0150c2BOBossier00001AGeorgia#0790c2CDCrawford000028WorldwithCountries#1570c2NLNetherlands000018Minnesota#1310c2RIRice00001AKentucky#1150c2JOJohnson00001AMichigan#1250c2OKOakland000018Florida#0430c2GLGlades000019Spain#0100c2CTCatalonia00001AMississippi#0250c2CYClay000025Europewithcountries#0260c2MDMoldova00001BMalaysia#0120c2SLSelangor00001AArkansas#0150c2CRCarroll000018England#0110c2DUDurham00001DSouthAmerica#0030c2BRBrazil00001EWestVirginia#0430c2LILincoln00001BScotland#0290c2SHShetland00001ENewWorld#2020c2PRPuerto Rico000018Bahamas#260c2RCRum Cay000011USA#IA0c2IAIowa00001FGuatemala#020c2BVBaja Verapaz000016Moldova#530c2OROrhei000020Mozambique#010c2CDCabo Delgado000023Venezuela#020c2BAnzo&aacute;tegui000023USACentralRegion#550c2WIWisconsin000018Portugal#020c2AVAveiro00001FNewWorld#500c2CICote d Ivoire000019Algeria#DZ.BT0c2BTBatna000025Mauritania#MR.HG0c2HGHodh El Gharbi000029Philippines#PH.ST0c2STSurigao del Norte00001EEastTimor#TL.MT0c2MTManatuto00001BMacedonia#MK.BU0c2BUButel00001EMacedonia#MK.DA0c2DADebartsa000026Philippines#PH.AS0c2ASAgusan del Sur00001FPhilippines#PH.BI0c2BIBiliran00001CRussia#RU.KK0c2KKKhakassia000027EquatorialGuinea#GQ.CS0c2CSCentro Sur00001BQatar#QA.WA0c2WAAl Wakrah00002BIran#IR.KB0c2KBKohgiluyeh and Buyer Ahmed000029FranceDepartment#FR.HA0c2HAHautes Alpes00002AFalklandIsland#NA.FK0c2FKFalkland Island00001ACapeVerde#CV.PA0c2PAPaul00002ABrazilRegion#BR.NE0c2NENorth East Region000014Iowa#1170c2LULucas00001CWisconsin#0070c2BYBayfield000018Alaska#2820c2YAYakutat000017Texas#4530c2TRATravis00001CIndiana#0690c2HUHuntington00001ANewYork#0410c2HAHamilton00001FNorthCarolina#1090c2LILincoln00001DVirginia#0110c2APAppomattox000018Georgia#2610c2SUSumter000015Kansas#0630c2GOGove000022SouthCarolina#0350c2DODorchester000022Virginia#7350c2PQPoquoson (City)00001BIllinois#0990c2LSLa Salle000018Missouri#0190c2BOBoone000023WorldwithCountries#1580c2NONorway000023NorthDakota#0330c2GVGolden Valley000016Texas#0910c2COMComal000015Ohio#0530c2GAGallia000024Spain#0110c2CVCommunidad Valencian000017NewMexico#0250c2LELea000019Nebraska#0230c2BLButler000018Wyoming#0450c2WEWeston000024Europewithcountries#0270c2MCMonaco00001DMalaysia#0130c2TETerengganu000017England#0120c2ESEssex00001BTennessee#1130c2MDMadison00001CSouthAmerica#0040c2CLChile000020Scotland#0300c2STStirlingshire000021NewWorld#2030c2KYCayman Islands00001AOklahoma#0650c2JAJackson000029MadagascarRegions#MG.FI.HO0c2HOIhorombe000014World8#010c2ASAsia00001DBahamas#270c2SSSan Salvador000020Guatemala#030c2CMChimaltenango000017Moldova#540c2SOSoroca000018Mozambique#020c2GAGaza000017Venezuela#030c2CApure000020Chile#010c2VSValpara&iacute;so000016Portugal#030c2BEBeja000032NewWorld#510c2CDDemocratic Republic of the Congo00001BPuertoRico#690c2HUHumacao00001AAlgeria#DZ.BU0c2BUBouira00001EMacedonia#MK.UM0c2UMKumanovo000020Macedonia#MK.VC0c2VCVranestica00001CPhilippines#PH.SU0c2SUSulu000020Tanzania#TZ.PN0c2PNPemba North00001EHongKong#HK.KU0c2KUKwun Tong000029CoteDivoire#CI.VB0c2VBVallee du Bandama00001ALaos#LA.PH0c2PHPhongsali00001BMacedonia#MK.DB0c2DBDebar00001BRussia#RU.KL0c2KLKalmykia000019Uganda#UG.DO0c2DODokolo00001EMadagascar#MG.TL0c2TLToliara00001EVietnam#VN.KG0c2KGKien Giang000020Mauritius#MU.PL0c2PLPort Louis00001FVirginia#1930c2WEWestmoreland00001AColorado#0250c2CRCrowley00001DSouthDakota#0630c2HDHarding00001AAlabama#0410c2CWCrenshaw00001AVermont#0110c2FRFranklin000018Missouri#2010c2SCScott00001CCalifornia#1050c2TRTrinity000018Texas#2730c2KLEKleberg000019Louisiana#0170c2CACaddo000017Georgia#0810c2CPCrisp000023WorldwithCountries#1590c2PLPoland000018Minnesota#1330c2RCRock000019Kentucky#1170c2KEKenton000019Michigan#1270c2OAOceana000016Florida#0450c2GUGulf00001BSpain#0120c2EXExtremadura00001DMississippi#0270c2CMCoahoma000028Europewithcountries#0280c2MOMontenegro000019Arkansas#0170c2CHChicot000021England#0130c2GLGloucestershire00001FSouthAmerica#0050c2COColombia00001CWestVirginia#0450c2LOLogan00001DScotland#0310c2SUSutherland000016World8#020c2EUEurope00001CBahamas#280c2SBSouth Abaco00001DGuatemala#040c2CQChiquimula000018Moldova#550c2TITighina00001DMozambique#030c2INInhambane000018Venezuela#040c2DAragua000045Chile#020c2AIAis&eacute;n del General Carlos Iba&ntilde;ezdel Campo000017Portugal#040c2BRBraga00001ANewWorld#520c2DJDjibouti000021Burma#MM.MG0c2MGMagway Division000018Jordan#JO.KA0c2KAKarak000021Macedonia#MK.VD0c2VDKisela Voda000017Bhutan#BT.GA0c2GAGasa000025CentralAmerica2#CE.GT0c2GTGuatemala00001EPhilippines#PH.AU0c2AUAurora000020Philippines#PH.BK0c2BKBukidnon000021Russia#RU.KM0c2KMKhantia-Mansia000020Madagascar#MG.TM0c2TMToamasina00001BLibya#LY.KF0c2KFAl Kufrah00001ACameroon#CM.OU0c2OUOuest00001AIran#IR.KD0c2KDKordestan000028FranceDepartment#FR.HC0c2HCHaute Corse00001DVietnam#VN.KH0c2KHKhanh Hoa00001CSyria#SY.HA0c2HAAl Hasakah000023Madagascar#MG.AV0c2AVAntananarivo000039DemocraticRepublicoftheCongo#CD.KC0c2KCKasai Occidental00001DKyrgyzstan#KG.BA0c2BABatken00001COklahoma#0670c2JEJefferson000013Iowa#1190c2LYLyon000017Asia3#0470c2VNVietnam000019Wisconsin#0090c2BRBrown000018Texas#4550c2TRITrinity000019Indiana#0710c2JAJackson00001ANewYork#0430c2HEHerkimer000020NorthCarolina#1110c2MDMcDowell00001CVirginia#0130c2ARArlington000018Georgia#2630c2TBTalbot000017Kansas#0650c2GHGraham000021SouthCarolina#0370c2EDEdgefield00001BIllinois#1010c2LWLawrence00001BMissouri#0210c2BCBuchanan000025WorldwithCountries#1600c2PTPortugal000021NorthDakota#0350c2GFGrand Forks000019Texas#0930c2COAComanche000015Ohio#0550c2GEGeauga000017Spain#0130c2GAGalicia00001BNewMexico#0270c2LILincoln000017Nebraska#0250c2CACass000029Europewithcountries#0290c2NLNetherlands00001FMalaysia#0150c2KLKuala Lumpur00001BEngland#0140c2HAHampshire00001ATennessee#1150c2MRMarion00001ESouthAmerica#0060c2ECEcuador00001FScotland#0320c2WEWest Lothian000016World8#030c2AFAfrica00001DBahamas#290c2SNSouth Andros00002FWorldwithCountries#010c2AGAntigua and Barbuda000012USA#ID0c2IDIdaho00001EGuatemala#050c2PREl Progreso000018Moldova#560c2UNUngheni00001AMozambique#040c2MPMaputo000019Venezuela#050c2EBarinas00001AChile#030c2ANAntofagasta000021Portugal#050c2BABragan&ccedil;a000017NewWorld#530c2EGEgypt000023Australia2#SA0c2SASouth Australia00001FBarbados#010c2CCChrist Church00001BPuertoRico#710c2ISIsabela000028PolandCounties#PL.MZ.OM0c2MOMOstroleka00001DLiberia#LR.GK0c2GKGrand Kru00001BMacedonia#MK.VE0c2VEVeles000025Sudan#SD.WB0c2WBWest Bahr Al Ghazal00001BYemen#YE.MR0c2MRAl Mahrah00001CPhilippines#PH.CB0c2CBCebu00001EGabon#GA.MO0c2MOMoyen-Ogooue00001ERussia#RU.KN0c2KNKaliningrad00001BChina2#CN.ZJ0c2ZJZhejiang000022FranceDepartment#FR.YO0c2YOYonne00001EGuinea#GN.LA0c2LALab&eacute;000018China2#CN.GS0c2GSGansu000017Iran#IR.KE0c2KEKerman00002BFranceDepartment#FR.HD0c2HDHauts-de-Seine00001EPakistan#PK.IS0c2ISIslamabad00001DTurkmenistan#TM.MA0c2MAMary00001FEurope2#EU.RD0c2RDRhodes (Gr)000017Virginia#1950c2WIWise000019Colorado#0270c2CUCuster00001CSouthDakota#0650c2HGHughes000019Alabama#0430c2CUCullman00001CVermont#0130c2GIGrand Isle00001AMissouri#2030c2SNShannon00001BCalifornia#1070c2TUTulare000015Texas#2750c2KNOKnox00001DLouisiana#0190c2CLCalcasieu000016Georgia#0830c2DADade000024WorldwithCountries#1610c2RORomania00001AMinnesota#1350c2RORoseau000018Kentucky#1190c2KNKnott000019Michigan#1290c2OGOgemaw00001AFlorida#0470c2HTHamilton000018Spain#0140c2LALa Rioja00001ENewMexico#0280c2LALos Alamos00001CMississippi#0290c2CPCopiah000024Europewithcountries#0300c2NONorway000019Malaysia#0160c2LALabuan000018Arkansas#0190c2CLClark00001FEngland#0150c2HEHerefordshire000027SouthAmerica#0070c2FKFalkland Islands00001FWestVirginia#0470c2MDMcDowell00001EScotland#0330c2WIWigtonshire00001DWorld8#040c2NANorth America000020Bahamas#300c2SESouth Eleuthera000023WorldwithCountries#020c2BSBahamas00001CGuatemala#060c2ESEscuintla00001AMozambique#050c2SOSofala000020Venezuela#060c2FBol&iacute;var00001FChile#040c2ARAraucan&iacute;a000020Portugal#060c2CBCastelo Branco000023NewWorld#540c2GQEquatorial Guinea00001EBarbados#020c2ANSaint Andrew000017Fiji#FJ.NO.BU0c2BUBua00001EFiji#FJ.NO.CK0c2CKCakaudrova000019Laos#LA.OU0c2OUOudomxai00001DMacedonia#MK.DE0c2DEDolneni000017Sudan#SD.EB0c2EBLakes000019Serbia#RS.MR0c2MRMorava000017Russia#RU.KO0c2KOKomi000024FranceDepartment#FR.HE0c2HEHerault000025Cambodia#KH.OM0c2OMBanteay Meanchey000019Tonga#TO.HA0c2HAHa'apai00001BOklahoma#0690c2JOJohnston000016Iowa#1210c2MAMadison000016Asia3#0490c2TWTaiwan00001BWisconsin#0110c2BUBuffalo000016Texas#4570c2TYLTyler000018Indiana#0730c2JSJasper00001BNewYork#0450c2JEJefferson00001DNorthCarolina#1130c2MAMacon00001AVirginia#0150c2AUAugusta00001CGeorgia#2650c2TATaliaferro000016Kansas#0670c2GTGrant000021SouthCarolina#0390c2FAFairfield000016Illinois#1030c2LELee000019Missouri#0230c2BUButler000027WorldwithCountries#1620c2SMSan Marino00001BNorthDakota#0370c2GRGrant000017Texas#0950c2CCHConcho000015Ohio#0570c2GRGreene000016Spain#0150c2MAMadrid000018NewMexico#0290c2LULuna000018Nebraska#0270c2CECedar000017Hawaii#0010c2HAHawaii000024Europewithcountries#0310c2PLPoland00001CMalaysia#0170c2PUPutrajaya00001FEngland#0160c2HRHertfordshire00001CTennessee#1170c2MSMarshall000024SouthAmerica#0080c2GFFrench Guiana00001DWorld8#050c2SASouth America00001EBahamas#310c2SWSpanish Wells000024WorldwithCountries#030c2BBBarbados00001CGuatemala#070c2GUGuatemala00001BMozambique#060c2NANampula00001AVenezuela#070c2GCarabobo000016Chile#050c2ATAtacama000019Portugal#070c2COCoimbra000019NewWorld#550c2EREritrea00001EBarbados#030c2GESaint George00001APuertoRico#730c2JYJayuya000029NewBrunswick#CA.NB.FC0c2FCFundy Coastal00001FAlgeria#DZ.CO0c2COConstantine00001DSudan#SD.WD0c2WDWest Darfur000019Gabon#GA.NG0c2NGNgounie000020CoteDivoire#CI.DE0c2DEDenguele00001BChina2#CN.HK0c2HKHongKong00001BVietnam#VN.LA0c2LALong An000021Pakistan#PK.JK0c2JKAzad Kashmir000024TrinidadandTobago#TT.MA0c2MAMayaro000020SaudiArabia#SA.QS0c2QSAl Qasim000020SaudiArabia#SA.RI0c2RIAr Riyad000019Asia3#0500c2HKHong Kong000018Virginia#1970c2WYWythe000018Colorado#0290c2DEDelta000020SouthDakota#0670c2HTHutchinson000016Alabama#0450c2DADale00001AVermont#0150c2LALamoille000019Missouri#2050c2SHShelby00001DCalifornia#1090c2TOTuolumne000016Texas#2770c2LAMLamar00001CLouisiana#0210c2CDCaldwell000024Virginia#7400c2PMPortsmouth (City)000018Georgia#0850c2DWDawson000023WorldwithCountries#1630c2CSSerbia00001DMinnesota#1370c2SLSt. Louis000017Kentucky#1210c2KOKnox00001CMichigan#1310c2ONOntonagon000018Florida#0490c2HAHardee000017Spain#0160c2MEMelilla00001FMississippi#0310c2CGCovington000026Europewithcountries#0320c2PTPortugal000017Arkansas#0210c2CYClay00001DSouthAmerica#0090c2GYGuyana00001DWestVirginia#0490c2MAMarion000022NewCaledonia#NC.SU.LF0c2LFLa Foa000028Saskatchewan#CA.SK.NR0c2NRNorth Region00001FWorld8#060c2CACentral America000022Bahamas#320c2WBWest Grand Bahama000022WorldwithCountries#040c2BZBelize000020Guatemala#080c2HUHuehuetenango00001AMozambique#070c2NINiassa000019Venezuela#080c2HCojedes000024Chile#060c2BIB&iacute;o-B&iacute;o00001EPortugal#080c2EV&Eacute;vora00001ANewWorld#560c2ETEthiopia00001DBarbados#040c2JMSaint James000025PolandCounties#PL.WP.KM0c2WKMKalisz000021Morocco#MA.FB0c2FBFes-Boulemane00001FMacedonia#MK.VH0c2VHVrapciste000020Sudan#SD.WE0c2WEWest Equatoria00001DBhutan#BT.GE0c2GEGeylegphug000031CentralAfricanRepublic#CF.MP0c2MPOmbella-M'Poko000024CentralAmerica2#CE.HN0c2HNHonduras000020Tanzania#TZ.PS0c2PSPemba South00001DPhilippines#PH.BO0c2BOBohol000019Malawi#MW.RU0c2RURumphi00001CRussia#RU.KQ0c2KQKamchatka00001BGuinea#GN.KN0c2KNKoundara000023Kuwait#KW.MU0c2MUMubarak Al Kabir00001FChina2#CN.HL0c2HLHeilongjiang00002AFranceDepartment#FR.HG0c2HGHaute Garonne00001BNigeria#NG.ZA0c2ZAZamfara000019Togo#TG.MA0c2MAMaritime000016Oklahoma#0710c2KAKay000016Iowa#1230c2MHMahaska000015Asia3#0510c2MOMacau00001BWisconsin#0130c2BNBurnett000017Texas#4590c2UPSUpshur000015Indiana#0750c2JYJay000017NewYork#0470c2KIKings00001FNorthCarolina#1150c2MSMadison000017Virginia#0170c2BABath00001AGeorgia#2670c2TTTattnall000015Kansas#0690c2GYGray000020SouthCarolina#0410c2FLFlorence00001DIllinois#1050c2LILivingston00001BMissouri#0250c2CACaldwell000025WorldwithCountries#1640c2SKSlovakia00001CNorthDakota#0390c2GNGriggs000016Texas#0970c2CKECooke000027Virginia#5600c2CFClifton Forge (City)000017Ohio#0590c2GUGuernsey000016Spain#0170c2MUMurcia00001CNewMexico#0310c2MKMcKinley000018Nebraska#0290c2CHChase000019Hawaii#0030c2HOHonolulu000025Europewithcountries#0330c2RORomania000016England#0180c2KEKent000019Tennessee#1190c2MUMaury00001FSouthAmerica#0100c2PYParaguay000017World8#070c2OCOceania000022WorldwithCountries#050c2CACanada000019Guatemala#090c2IZIzabal000018Mozambique#080c2TETete00001FVenezuela#090c2YDelta Amacuro000017Chile#070c2COCoquimbo000016Portugal#090c2FAFaro000017NewWorld#570c2GAGabon00001DTurkey#020c2ADAd&#305;yaman00001CBarbados#050c2JNSaint John000025PuertoRico#750c2JDJuana D&iacute;az000025MarshallIsland#MH.MH.NK0c2NKNamorik000020Sudan#SD.EE0c2EEEast Equatoria00001CGuinea#GN.KO0c2KOKouroussa000021Guinea#GN.LE0c2LEL&eacute;louma00001BLibya#LY.JU0c2JUAl Jufrah000019Malawi#MW.BA0c2BABalaka00001FBotswana#BW.NE0c2NENorth East000027Singapore#SG.CS0c2CSCentral Singapore00001DBurkinaFaso#BF.YG0c2YGYagha000017Virginia#1990c2YOYork000019Colorado#0310c2DNDenver00001CMontana#0010c2BEBeaverhead00001ASouthDakota#0690c2HYHyde000018Alabama#0470c2DLDallas000018Vermont#0170c2OROrange00001BMissouri#2070c2SDStoddard00001CCalifornia#1110c2VEVentura000015Texas#2790c2LABLamb00001BLouisiana#0230c2CMCameron000019Georgia#0870c2DEDecatur000025WorldwithCountries#1650c2SISlovenia000019Minnesota#1390c2SCScott000018Kentucky#1230c2LALarue00001AMichigan#1330c2OEOsceola000018Florida#0510c2HEHendry000017Spain#0180c2NANavarra00001CMississippi#0330c2DEDeSoto000028Europewithcountries#0340c2SMSan Marino00001BArkansas#0230c2CBCleburne00001CEngland#0190c2LALancashire00001BSouthAmerica#0110c2PEPeru00001FWestVirginia#0510c2MRMarshall00001BWorld8#080c2MEMiddle East000026WorldwithCountries#060c2CRCosta Rica000019Guatemala#100c2JAJalapa000020Azerbaijan#010c2ARAb&#351;eron00001CMozambique#090c2ZMZambezia000018Chile#080c2LIO'Higgins000017NewWorld#580c2GHGhana00001ETurkey#030c2AFAfyonkarahisar00001EBarbados#060c2JSSaint Joseph000018Bahrain#010c2CACapital000024PolandCounties#PL.WP.KO0c2WKOKonin000025PolandCounties#PL.WP.LE0c2WLELeszno000025Uzbekistan#UZ.QR0c2QRKarakalpakstan00001EBurkinaFaso#BF.GG0c2GGGnagna00001CLiberia#LR.GP0c2GPGbarpolu00001FMacedonia#MK.VJ0c2VJBogovinje00001AZambia#ZM.LP0c2LPLuapula00001EPhilippines#PH.TR0c2TRTarlac00001BYemen#YE.MW0c2MWMl Mahwit000023Macedonia#MK.CS0c2CSCucer Sandevo00001FPhilippines#PH.CG0c2CGCagayan000018Russia#RU.KS0c2KSKursk00002ACoteDivoire#CI.DH0c2DHDix-Huit Montagnes000021China2#CN.GX0c2GXGuangxi Zhuang000018China2#CN.HN0c2HNHunan00001FIran#IR.KJ0c2KJSouth Khorasan00001CVietnam#VN.LD0c2LDLam Dong00001BCapeVerde#CV.PI0c2PIPraia00001DOklahoma#0730c2KIKingfisher000015Iowa#1250c2MRMarion00001BWisconsin#0150c2CACalumet00001EAlaska#2900c2YKYukon-Koyukuk000016Texas#4610c2UPTUpton00001BIndiana#0770c2JEJefferson000017NewYork#0490c2LELewis00001ENorthCarolina#1170c2MTMartin00001AVirginia#0190c2BEBedford000018Georgia#2690c2TYTaylor000018Kansas#0710c2GLGreeley000022SouthCarolina#0430c2GEGeorgetown000018Illinois#1070c2LOLogan00001BMissouri#0270c2CWCallaway000022WorldwithCountries#1660c2ESSpain00001FNorthDakota#0410c2HEHettinger000018Texas#0990c2CRYCoryell000017Ohio#0610c2HAHamilton00002BSpain#0190c2PAPais Vasco (Basque Country)000018NewMexico#0330c2MOMora000019Nebraska#0310c2CRCherry000018Hawaii#0050c2KAKalawao000024Europewithcountries#0350c2CSSerbia000020England#0200c2LELeicestershire000019Tennessee#1210c2MIMeigs00001FSouthAmerica#0120c2SRSuriname000020WorldwithCountries#070c2CUCuba00001AGuatemala#110c2JUJutiapa000026Azerbaijan#020c2ACA&#287;cab&#601;di00001AMozambique#100c2MNManica00001FVenezuela#110c2IFalc&oacute;n000018Chile#090c2LLLos Lagos000018Portugal#110c2GUGuarda000018NewWorld#590c2GNGuinea00001ETurkey#040c2AGA&#287;r&#305;00001CBarbados#070c2LUSaint Lucy00001APuertoRico#770c2JCJuncos000018Bahrain#020c2CECentral000024PolandCounties#PL.PD.LM0c2PLMLomza00001CPanama#PA.SB0c2SBKuna Yala000017Sudan#SD.WH0c2WHUnity00001BRussia#RU.KT0c2KTKostroma000018Tunisia#TN.SF0c2SFSfax00001EOman#OM.SH0c2SHAsh Sharqiyah000024Singapore#SG.EA0c2EAEast Singapore000021Cambodia#KH.PH0c2PHPreah Vihear00001CGhana#GH.UE0c2UEUpper East00001AColorado#0330c2DODolores00001AMontana#0030c2BHBig Horn00001DSouthDakota#0710c2JAJackson000018Alabama#0490c2DEDekalb00001AAsia#0010c2AFAfghanistan000019Vermont#0190c2OLOrleans000018Missouri#2090c2STStone000019California#1130c2YOYolo000017Alaska#1100c2JUJuneau000019Texas#2810c2LAPLampasas00001DLouisiana#0250c2CTCatahoula000018Georgia#0890c2DKDeKalb000023WorldwithCountries#1670c2SESweden00001DMinnesota#1410c2SHSherburne000019Kentucky#1250c2LULaurel000019Michigan#1350c2OCOscoda00001AFlorida#0530c2HNHernando00001DMississippi#0350c2FOForrest00001CPennsylvania#0010c2ADAdams000026Europewithcountries#0360c2SKSlovakia00001CArkansas#0250c2CVCleveland00001EEngland#0210c2LILincolnshire00001ESouthAmerica#0130c2UYUruguay00001CWestVirginia#0530c2MSMason000027Manitoba#CA.MB.NR0c2NRNorthern Region000019Bahrain#030c2MUMuharraq000024WorldwithCountries#080c2DMDominica00001FGuatemala#120c2PEPet&eacute;n00001EAzerbaijan#030c2AMA&#287;dam000020Mozambique#110c2MTMaputo(City)000019Venezuela#120c2JGuarico000037Chile#100c2MAMagallanes y la Ant&aacute;rtica Chilena00001FNewWorld#600c2GWGuinea-Bissau000016Turkey#050c2AMAmasya00001FBarbados#080c2MISaint Michael000026PolandCounties#PL.PK.RM0c2PRMRzeszow00001ANamibia#NA.HA0c2HAHardap00001AAlgeria#DZ.DJ0c2DJDjelfa00001BBurma#MM.MO0c2MOMon State00001EMacedonia#MK.VL0c2VLVasilevo000021Philippines#PH.TT0c2TTTawi-Tawi00001ATanzania#TZ.PW0c2PWPwani000022Macedonia#MK.DK0c2DKDemir Kapija00001FPhilippines#PH.BS0c2BSBasilan000019Russia#RU.KU0c2KUKurgan000025FranceDepartment#FR.YV0c2YVYvelines00001AChina2#CN.GZ0c2GZGuizhou000018Nigeria#NG.YO0c2YOYobe000016Syria#SY.HI0c2HIHoms000025BrazilRegion#BR.NO0c2NONorth Region000018Oklahoma#0750c2KOKiowa000017Iowa#1270c2MSMarshall00001CWisconsin#0170c2CHChippewa000017Texas#4630c2UVAUvalde000016Asia#0020c2AMArmenia00001AIndiana#0790c2JNJennings00001CNewYork#0510c2LILivingston000023NorthCarolina#1190c2MKMecklenburg000018Virginia#0210c2BLBland000019Georgia#2710c2TFTelfair00001AKansas#0730c2GWGreenwood000022SouthCarolina#0450c2GRGreenville00001CIllinois#1090c2MUMcDonough000019Missouri#0290c2CMCamden000028WorldwithCountries#1680c2CHSwitzerland00001CNorthDakota#0430c2KIKidder000017Texas#1010c2COTCottle000016Ohio#0630c2HNHancock000019NewMexico#0350c2OTOtero00001BNebraska#0330c2CYCheyenne000016Hawaii#0070c2KUKauai000026Europewithcountries#0370c2SLSlovenia000018England#0220c2LOLondon00001ATennessee#1230c2MOMonroe000020SouthAmerica#0140c2VEVenezuela000019Bahrain#040c2NONorthern00002AWorldwithCountries#090c2DODominican Rep.000015USA#IL0c2ILIllinois000021Guatemala#130c2QZQuetzaltenango000023Azerbaijan#040c2ASA&#287;da&#351;000016Venezuela#130c2KLara000014Chile#110c2MLMaule000022USASouthWestRegion#320c2NVNevada000018Portugal#130c2LELeiria000017NewWorld#610c2KEKenya00001DBarbados#090c2PESaint Peter000019PuertoRico#790c2LJLajas000019Nigeria#NG.GO0c2GOGombe000020Uzbekistan#UZ.SA0c2SASamarkand000019Zambia#ZM.LS0c2LSLusaka00001DMacedonia#MK.DL0c2DLDelcevo000020Philippines#PH.BT0c2BTBatangas000018Russia#RU.KV0c2KVKirov00001EGuinea#GN.KS0c2KSKissidougou000028FranceDepartment#FR.HL0c2HLHaute Loire00001AColorado#0350c2DUDouglas000018Montana#0050c2BLBlaine00001DSouthDakota#0730c2JEJerauld000018Alabama#0510c2ELElmore000019Asia#0030c2AZAzerbaijan000019Vermont#0210c2RURutland00001BMissouri#2110c2SUSullivan000019California#1150c2YUYuba000019Texas#2830c2LASLa Salle00001DLouisiana#0270c2CBClaiborne000017Georgia#0910c2DODodge000024WorldwithCountries#1690c2UAUkraine00001AMinnesota#1430c2SBSibley00001BKentucky#1270c2LWLawrence000019Michigan#1370c2OSOtsego00001BFlorida#0550c2HLHighlands00001EMississippi#0370c2FRFranklin000020Pennsylvania#0030c2ALAllegheny000023Europewithcountries#0380c2ESSpain00001BArkansas#0270c2CMColumbia00001DWestVirginia#0550c2MEMercer000019Bahrain#050c2SOSouthern000027WorldwithCountries#100c2SVEl Salvador000020Guatemala#140c2QCQuich&eacute;000020Azerbaijan#050c2AFA&#287;stafa000018Venezuela#140c2LMerida00002BChile#120c2RMSantiago Metropolitan Region000018Portugal#140c2LILisboa000019NewWorld#620c2LSLesotho000017Turkey#070c2ALAntalya00001EBarbados#100c2PHSaint Philip000023WorldwithCountries#110c2GDGrenada000014USA#IN0c2INIndiana00001DGuatemala#150c2RERetalhuleu00001DNewZealand#E70c2AUKAuckland00001DAzerbaijan#060c2AUA&#287;su000019Venezuela#150c2MMiranda00001EChile#130c2TATarapac&aacute;000019NewWorld#630c2LILiberia000016Turkey#080c2AVArtvin00001EBarbados#110c2THSaint Thomas000019PuertoRico#810c2LRLares000023PolandCounties#PL.LD.LO0c2LLOLodz00001DAlgeria#DZ.EB0c2EBEl Bayadh00001FSudan#SD.WK0c2WKWest Kurdufan000015Bhutan#BT.HA0c2HAHa000021CentralAmerica2#CE.HT0c2HTHaiti000021Macedonia#MK.DM0c2DMDemir Hisar00001FPhilippines#PH.BU0c2BUBulacan000017Niger#NE.DS0c2DSDosso00001ERussia#RU.MC0c2MCMoscow City000024Singapore#SG.WE0c2WEWest Singapore000028FranceDepartment#FR.HM0c2HMHaute Marne00001CKyrgyzstan#KG.TL0c2TLTalas000025Mauritius#MU.PW0c2PWPlaines Wilhems00001AOklahoma#0770c2LALatimer000014Iowa#1290c2MIMills000019Wisconsin#0190c2CLClark00001ATexas#4650c2VAVVal Verde000019Indiana#0810c2JOJohnson000019NewYork#0530c2MAMadison000020NorthCarolina#1210c2MIMitchell00001CVirginia#0230c2BOBotetourt000019Georgia#2730c2TLTerrell000019Kansas#0750c2HMHamilton000021SouthCarolina#0470c2GWGreenwood00001AIllinois#1110c2MHMcHenry000021Missouri#0310c2CGCape Girardeau00002BWorldwithCountries#1700c2UKUnited Kingdom00001DNorthDakota#0450c2LMLaMoure000016Texas#1030c2CRACrane000015Ohio#0650c2HRHardin000018NewMexico#0370c2QUQuay000017Nebraska#0350c2CLClay000015Hawaii#0090c2MAMaui000024Europewithcountries#0390c2SESweden000019England#0240c2NONorfolk00001ETennessee#1250c2MGMontgomery000025WorldwithCountries#120c2GTGuatemala000026Guatemala#160c2SASacatep&eacute;quez000022NewZealand#E80c2BOPBay of Plenty000025Azerbaijan#070c2ABAli Bayraml&#305;000019Venezuela#160c2NMonagas000025USASouthWestRegion#350c2NMNewMexico00001CPortugal#160c2PAPortalegre000017NewWorld#640c2LRLibya00001ATurkey#090c2AYAyd&#305;n000024PolandCounties#PL.MZ.PM0c2MPMPlock000036DemocraticRepublicoftheCongo#CD.KN0c2KNKinshasa City00002FCentralAfricanRepublic#CF.NM0c2NMNana-Mambere000029Philippines#PH.CL0c2CLCompostela Valley000019Malawi#MW.TH0c2THThyolo00001ERussia#RU.KX0c2KXKrasnoyarsk00001CRussia#RU.LN0c2LNLeningrad000028FranceDepartment#FR.HN0c2HNHaute Saone00001CVietnam#VN.LI0c2LILai Chau00001BOman#OM.BA0c2BAAl Batinah000018Syria#SY.HL0c2HLAleppo00001BCambodia#KH.PL0c2PLPailin000020CapeVerde#CV.PN0c2PNPorto Novo000018Colorado#0370c2EAEagle00001CMontana#0070c2BRBroadwater00001BSouthDakota#0750c2JOJones00001AAlabama#0530c2ESEscambia000019Asia#0050c2BDBangladesh00001CVermont#0230c2WAWashington000018Missouri#2130c2TATaney000017Texas#2850c2LAVLavaca00001DLouisiana#0290c2COConcordia000017Georgia#0930c2DLDooly000029WorldwithCountries#1710c2VAVatican City00001BMinnesota#1450c2SAStearns000016Kentucky#1290c2LELee000019Michigan#1390c2OTOttawa00001EFlorida#0570c2HBHillsborough00001CMississippi#0390c2GOGeorge000020Pennsylvania#0050c2ARArmstrong000029Europewithcountries#0400c2CHSwitzerland000019Arkansas#0290c2CWConway000022England#0250c2NRNorthamptonshire00001EWestVirginia#0570c2MIMineral000025NewCaledonia#NC.SU.MD0c2MDMont-Dore000028NewCaledonia#NC.IL.OV0c2OVOuv&eacute;a000025PuertoRico#830c2LMLas Mar&iacute;as000021WorldwithCountries#130c2HTHaiti00001DGuatemala#170c2SMSan Marcos00001FNewZealand#E90c2CANCanterbury00001AAzerbaijan#080c2AAAstara00001FVenezuela#170c2ONueva Esparta000017Portugal#170c2POPorto00001CNewWorld#650c2MSMadagascar00001ETurkey#100c2BKBal&#305;kesir000027NovaScotia#CA.NS.ST0c2STSunrise Trail000025SaudiArabia#SA.SH0c2SHAsh Sharqiyah00001BEurope2#EU.AD0c2ADAndorra00001EBurkinaFaso#BF.GM0c2GMGourma000024PapuaNewGuinea#PG.MB0c2MBMilne Bay00001DGuineaBissau#GW.GA0c2GAGabu000026EquatorialGuinea#GQ.WN0c2WNWele Nzas000020Philippines#PH.CM0c2CMCamiguin000029Tibet#TI.XP0c2XPXigaz&ecirc; Prefecture00001BRussia#RU.ME0c2MEMariy-El00001DTunisia#TN.TA0c2TATataouine00001BVietnam#VN.KT0c2KTKon Tum000016Syria#SY.HM0c2HMHama00001BEurope2#EU.RO0c2RORomania00001AEurope2#EU.SE0c2SESweden00001BOklahoma#0790c2LFLe Flore000017Iowa#1310c2MTMitchell00001CWisconsin#0210c2COColumbia00001ATexas#4670c2VAZVan Zandt000015Asia#0060c2BTBhutan000016Indiana#0830c2KNKnox000018NewYork#0550c2MNMonroe000022NorthCarolina#1230c2MGMontgomery00001CVirginia#0250c2BRBrunswick000018Georgia#2750c2THThomas000017Kansas#0770c2HPHarper00001FSouthCarolina#0490c2HAHampton000019Illinois#1130c2MLMcLean00001AMissouri#0330c2CRCarroll000023WorldwithCountries#1720c2CYCyprus00001BNorthDakota#0470c2LOLogan000019Texas#1050c2CKTCrockett000017Ohio#0670c2HIHarrison00001ENewMexico#0390c2RARio Arriba000019Nebraska#0370c2COColfax000025Europewithcountries#0410c2UAUkraine000020England#0260c2NTNorthumberland000019Tennessee#1270c2MEMoore000028NewCaledonia#NC.NO.BE0c2BEB&eacute;lep000024WorldwithCountries#140c2HNHonduras00001DGuatemala#180c2SRSanta Rosa000018Azerbaijan#090c2BABaki00001CVenezuela#180c2PPortuguesa000021Portugal#180c2SASantar&eacute;m000018NewWorld#660c2MWMalawi000017Turkey#110c2BCBilecik00001CSudan#SD.WN0c2WNWhite Nile000021Macedonia#MK.CZ0c2CZCentar Zupa000027Philippines#PH.CN0c2CNCamarines Norte000019Serbia#RS.NS0c2NSNisava00001ARussia#RU.LP0c2LPLipetsk00001BTunisia#TN.SL0c2SLSiliana00001AGuinea#GN.MC0c2MCMacenta000020SolomonIsland#SB.IS0c2ISIsabel000018China2#CN.HU0c2HUHubei00001DTunisia#TN.BA0c2BABen Arous00002CFranceDepartment#FR.HP0c2HPHautes Pyrenees000017Syria#SY.ID0c2IDIdlib000024TrinidadandTobago#TT.NA0c2NANariva000019Colorado#0390c2ELElbert000018Montana#0090c2CACarbon00001FSouthDakota#0770c2KIKingsbury000018Alabama#0550c2ETEtowah000015Asia#0070c2BNBrunei000019Vermont#0250c2WIWindham000018Missouri#2150c2TETexas000014Texas#2870c2LEELee00001BLouisiana#0310c2DSDe Soto000021Virginia#7500c2RARadford (City)00001BGeorgia#0950c2DUDougherty000023WorldwithCountries#1730c2TKTurkey00001AMinnesota#1470c2SESteele000019Kentucky#1310c2LSLeslie00001FMichigan#1410c2PRPresque Isle000018Florida#0590c2HMHolmes00001CMississippi#0410c2GRGreene00001DPennsylvania#0070c2BEBeaver00002CEuropewithcountries#0420c2UKUnited Kingdom00001CArkansas#0310c2CICraighead000021England#0270c2NGNottinghamshire00001CWestVirginia#0590c2MNMingo00001FPuertoRico#850c2LPLas Piedras000023WorldwithCountries#150c2JMJamaica000020Guatemala#190c2SOSolol&aacute;00001DNewZealand#F10c2GISGisborne00001BAzerbaijan#100c2BLBalakan000017Venezuela#190c2RSucre000020Portugal#190c2SESet&uacute;bal000016NewWorld#670c2MLMali00001BTurkey#120c2BGBing&ouml;l000017Ghana#GH.TV0c2TVVolta000023Europe2#EU.AF0c2AFAland (Finland)00002CMorocco#MA.GB0c2GBGharb-Chrarda Beni Hssen00001DChad#TD.HD0c2HDHadjer-Lamis000021PapuaNewGuinea#PG.MD0c2MDMadang00001ARussia#RU.MG0c2MGMagadan00001BGuinea#GN.MD0c2MDMandiana00001BCambodia#KH.PO0c2POPursat00001AOklahoma#0810c2LILincoln000015Iowa#1330c2MOMonona00001CWisconsin#0230c2CRCrawford000019Texas#4690c2VICVictoria000016Asia#0080c2MMBurma (00001BIndiana#0850c2KOKosciusko00001CNewYork#0570c2MOMontgomery00001DNorthCarolina#1250c2MOMoore00001BVirginia#0270c2BUBuchanan000016Georgia#2770c2TITift000017Kansas#0790c2HVHarvey00001DSouthCarolina#0510c2HOHorry000018Illinois#1150c2MAMacon000019Missouri#0350c2CTCarter00001DNorthDakota#0490c2MHMcHenry000017Texas#1070c2CSBCrosby00002AVirginia#5700c2COColonial Heights (City)000014Ohio#0690c2HYHenry00001DNewMexico#0410c2RSRoosevelt000019Nebraska#0390c2CUCuming00002AEuropewithcountries#0430c2VAVatican City00001DEngland#0280c2OXOxfordshire00001ATennessee#1290c2MNMorgan000022WorldwithCountries#160c2MXMexico000020Guatemala#200c2SUSuchitepequez000020NewZealand#F20c2HKBHawke's Bay000020Egypt_346255#010c2ALAlexandria000019Azerbaijan#110c2BRBarda000019Venezuela#200c2STachira000022Portugal#200c2VCViana do Castelo00001CNewWorld#680c2MRMauritania000016Turkey#130c2BTBitlis000022MarshallIsland#MH.MH.NU0c2NUNamu000025NovaScotia#CA.NS.CB0c2CBCape Breton000037DemocraticRepublicoftheCongo#CD.KR0c2KRKasai Oriental000019Senegal#SN.MT0c2MTMatam000024Morocco#MA.GC0c2GCGrand Casablanca00001EMauritania#MR.IN0c2INInchiri00001DMacedonia#MK.DR0c2DRDrugovo00001DPhilippines#PH.CP0c2CPCapiz00001FGabon#GA.OI0c2OIOgooue-Ivindo000017Guinea#GN.LO0c2LOLola000020Swaziland#SZ.SH0c2SHShiselweni00001FIran#IR.KS0c2KSNorth Khorasan000026FranceDepartment#FR.HR0c2HRHaut Rhin00001FCambodia#KH.PP0c2PPPhnom Penh00001AColorado#0410c2EPEl Paso000018Montana#0110c2CRCarter00001ASouthDakota#0790c2LALake000019Alabama#0570c2FAFayette000017Asia#0090c2KHCambodia000019Vermont#0270c2WNWindsor000019Missouri#2170c2VEVernon000015Texas#2890c2LEOLeon000024Louisiana#0330c2EBEast Baton Rouge000019Georgia#0970c2DGDouglas000026WorldwithCountries#1750c2AUAustralia00001BMinnesota#1490c2STStevens00001AKentucky#1330c2LTLetcher00001CMichigan#1430c2RORoscommon00001EFlorida#0610c2IRIndian river00001DMississippi#0430c2GEGrenada00001EPennsylvania#0090c2BDBedford000024Europewithcountries#0440c2CYCyprus00001BArkansas#0330c2CFCrawford000021WestVirginia#0610c2MLMonongalia000020PuertoRico#870c2LZLo&iacute;za000025WorldwithCountries#170c2NINicaragua000025Guatemala#210c2TOTotonicap&aacute;n000026NewZealand#F30c2MWTManawatu-Wanganui00001BEgypt_346255#020c2ANAswan000021Azerbaijan#120c2BQBeyl&#601;qan00001CSanMarino#010c2ACAcquaviva00001AVenezuela#210c2TTrujillo00001BPortugal#210c2VRVila Real000019NewWorld#690c2MAMorocco000014Turkey#140c2BLBolu000033NorthWestTerritories#CA.NT.NC0c2NCNahanni Country00001FMacau#MO.MA.SZ0c2SZSao Lazaro000028SaoTomeandPrincipe#ST.CG0c2CGCantagalo00001DSaudiArabia#SA.TB0c2TBTabuk00001ASriLanka#LK.GL0c2GLGalle00001FSriLanka#LK.HB0c2HBHambantota000020SaudiArabia#SA.BA0c2BAAl Bahah00001ATanzania#TZ.RK0c2RKRukwa00001BLibya#LY.MB0c2MBAl Margab00001BMalawi#MW.BL0c2BLBlantyre00001ATunisia#TN.AN0c2ANAriana000029FranceDepartment#FR.HS0c2HSHaute Savoie000018Oklahoma#0830c2LOLogan000015Iowa#1350c2MNMonroe000018Wisconsin#0250c2DADane000017Texas#4710c2WAKWalker000014Asia#0100c2CNChina00001AIndiana#0870c2LALagrange000018NewYork#0590c2NANassau00001CNorthCarolina#1270c2NANash00001DVirginia#0290c2BCBuckingham000018Georgia#2790c2TMToombs000018Kansas#0810c2HSHaskell00001ESouthCarolina#0530c2JAJasper00001BIllinois#1170c2MPMacoupin000017Missouri#0370c2CSCass000021WorldwithCountries#1760c2FJFiji00001ENorthDakota#0510c2MIMcIntosh00001ATexas#1090c2CUBCulberson000017Ohio#0710c2HGHighland00001CNewMexico#0430c2SASandoval000019Nebraska#0410c2CSCuster000024Europewithcountries#0450c2TKTurkey00001CEngland#0300c2SHShropshire000019Tennessee#1310c2OBObion000026MadagascarRegions#MG.MA.SF0c2SFSofia000022WorldwithCountries#180c2PAPanama000019Guatemala#220c2ZAZacapa000020NewZealand#F40c2MBHMarlborough00001BEgypt_346255#030c2ATAsyut000022Azerbaijan#130c2BSBil&#601;suvar00001ESanMarino#020c2CHChiesanuova000019Venezuela#220c2UYaracuy000017Portugal#220c2VIViseu00001CNewWorld#700c2MZMozambique000016Turkey#150c2BDBurdur000030DemocraticRepublicoftheCongo#CD.KT0c2KTKatanga00001FUzbekistan#UZ.SI0c2SISirdaryo000025Morocco#MA.GE0c2GEGuelmim Es Semara000017Sudan#SD.WR0c2WRWarab00001ASamoa #WS.PA0c2PAPalauli000019Serbia#RS.PC0c2PCPcinja00001BVietnam#VN.LO0c2LOLao Cai00001EThailand#TH.KK0c2KKKhon Kaen00001DWestVirginia#0630c2MOMonroe00001EAustralia2#TAS0c2TASTasmania00001AColorado#0430c2FRFremont000019Montana#0130c2CSCascade00001ESouthDakota#0810c2LWLawrence00001AAlabama#0590c2FRFranklin000019Missouri#2190c2WAWarren000018Texas#2910c2LIBLiberty000020Louisiana#0350c2ECEast Carroll000017Georgia#0990c2EAEarly000025WorldwithCountries#1770c2KIKiribati000019Minnesota#1510c2SWSwift000018Kentucky#1350c2LILewis00001AMichigan#1450c2SASaginaw000019Florida#0630c2JSJackson00001DMississippi#0450c2HAHancock00001CPennsylvania#0110c2BRBerks000024Europewithcountries#0460c2RURussia00001DArkansas#0350c2CTCrittenden00001AEngland#0310c2SOSomerset000015Turkey#160c2BUBursa00001CPuertoRico#890c2LQLuquillo000031WorldwithCountries#190c2KNSt. Kitts &amp; Nevis00001BNewZealand#F50c2NSNNelson00001DEgypt_346255#040c2BHBeheira000026Azerbaijan#140c2CBC&#601;bray&#305;l00001CSanMarino#030c2DODomagnano000017Venezuela#230c2VZulia000019NewWorld#710c2NANamibia00001FBurkinaFaso#BF.YT0c2YTYatenga00001DMacedonia#MK.VV0c2VVVevcani000016Chad#TD.GR0c2GRGuera000025Philippines#PH.CS0c2CSCamarines Sur00001DGabon#GA.OL0c2OLOgooue-Lolo000019Serbia#RS.PD0c2PDDanube000020Iran#IR.KV0c2KVRazavi Khorasan00001CThailand#TH.KL0c2KLKalasin00001DThailand#TH.LB0c2LBLop Buri00001CEurope2#EU.SK0c2SKSlovakia00001AEurope2#EU.RU0c2RURussia00001DMauritius#MU.SA0c2SASavanne00001BTennessee#1330c2OVOverton000017Oklahoma#0850c2LVLove000019Iowa#1370c2MGMontgomery000019Wisconsin#0270c2DODodge000017Texas#4730c2WALWaller000019Asia#0120c2TPEast Timor000016Indiana#0890c2LKLake00001ANewYork#0610c2NYNew York000023NorthCarolina#1290c2NHNew Hanover00001BVirginia#0310c2CACampbell000017Georgia#2810c2TOTowns000019Kansas#0830c2HGHodgeman00001FSouthCarolina#0550c2KEKershaw00001AIllinois#1190c2MIMadison000018Missouri#0390c2CECedar00002DWorldwithCountries#1780c2MHMarshall Islands00001ENorthDakota#0530c2MKMcKenzie000017Texas#1110c2DALDallam000016Ohio#0730c2HOHocking00001CNewMexico#0450c2SJSan Juan000019Nebraska#0430c2DADakota000026Europewithcountries#0470c2SCScotland00001FEngland#0320c2STStaffordshire000022NewCaledonia#NC.NO.CA0c2CACanala000020Turkey#170c2CK&Ccedil;anakkale000025WorldwithCountries#200c2LCSt. Lucia00001ENewZealand#F60c2NTLNorthland00001FEgypt_346255#050c2BNBeni Suef000022Azerbaijan#150c2CLC&#601;lilabad00001ASanMarino#040c2FAFaetano000026Venezuela#240c2WDependencies Federal000017NewWorld#720c2NENiger00002AEurope2#EU.BA0c2BABosnia and Herzegovina00001FUzbekistan#UZ.TA0c2TATashkent000019Ghana#GH.CP0c2CPCentral00001ALesotho#LS.LE0c2LELeribe000021Panama#PA.BC0c2BCBocas del Toro00001CTanzania#TZ.SD0c2SDSingida000023Philippines#PH.CT0c2CTCatanduanes000021Gabon#GA.OM0c2OMOgooue-Maritime000018Serbia#RS.PE0c2PEPecki000029FranceDepartment#FR.HV0c2HVHaute Vienne00002BFranceDepartment#FR.IL0c2ILIndre et Loire00001CEurope2#EU.SL0c2SLSlovenia00001DWestVirginia#0650c2MGMorgan00001BColorado#0450c2GAGarfield00001AMontana#0150c2CHChouteau00001DSouthDakota#0830c2LILincoln000018Alabama#0610c2GEGeneva000016Asia#0130c2GEGeorgia00001DMissouri#2210c2WSWashington000020Alaska#1220c2KEKenai Peninsula00001ATexas#2930c2LIMLimestone000022Louisiana#0370c2EFEast Feliciana000018Georgia#1010c2ECEchols000027WorldwithCountries#1790c2FMMicronesia000018Minnesota#1530c2TOTodd00001AKentucky#1370c2LNLincoln00001CMichigan#1470c2SCSt. Clair00001BFlorida#0650c2JEJefferson00001EMississippi#0470c2HRHarrison00001CPennsylvania#0130c2BLBlair000025Europewithcountries#0480c2ENEngland000018Arkansas#0370c2CSCross000019England#0330c2SUSuffolk000019NewWorld#730c2NGNigeria000027USANorthEastRegion#090c2CTConnecticut000021PuertoRico#910c2MTManat&iacute;00003CWorldwithCountries#210c2VCSt. Vincent &amp; the Grenadines00001ANewZealand#F70c2OTAOtago00001BEgypt_346255#060c2CACairo00002BAzerbaijan#160c2DSDa&#351;k&#601;s&#601;n00001DSanMarino#050c2FIFiorentino000022Venezuela#250c2ADistrito Capital00001EEurope2#EU.SM0c2SMSan Marino000021Kyrgyzstan#KG.DA0c2DAJalal Abad00001BEurope2#EU.AL0c2ALAlbania000019Jordan#JO.MA0c2MAMafraq00001BRussia#RU.MM0c2MMMurmansk00001ATunisia#TN.SS0c2SSSousse000021Thailand#TH.KN0c2KNKanchanaburi000018England#0340c2SRSurrey000019Tennessee#1350c2PEPerry00001AOklahoma#0870c2MCMcClain000018Iowa#1390c2MUMuscatine000018Wisconsin#0290c2DRDoor000015Texas#4750c2WARWard000014Asia#0140c2INIndia00001AIndiana#0910c2LPLa Porte000019NewYork#0630c2NINiagara000023NorthCarolina#1310c2NTNorthampton00001BVirginia#0330c2CRCaroline00001AGeorgia#2830c2TETreutlen000018Kansas#0850c2JAJackson000021SouthCarolina#0570c2LALancaster000019Illinois#1210c2MSMarion00001BMissouri#0410c2CNChariton000022WorldwithCountries#1800c2NRNauru00001CNorthDakota#0550c2MLMcLean000017Texas#1130c2DASDallas000015Ohio#0750c2HLHolmes00001ENewMexico#0470c2SMSan Miguel000018Nebraska#0450c2DWDawes000023Europewithcountries#0490c2WAWales000034NewfoundlandandLabrador#CA.NF.AV0c2AVAvalon Region000018NewWorld#740c2RWRwanda00001CTurkey#190c2CM&Ccedil;orum000024USANorthEastRegion#100c2DEDelaware000031WorldwithCountries#220c2TTTrinidad &amp; Tobago00001ENewZealand#F80c2STLSouthland00001EEgypt_346255#070c2DADakahlia00002BAzerbaijan#170c2DVD&#601;v&#601;&ccedil;i000021SanMarino#060c2BMBorgo Maggiore000018Venezuela#260c2XVargas00001FBurkinaFaso#BF.ZM0c2ZMZondoma00001CSriLanka#LK.GQ0c2GQGampaha000019Somalia#SO.MU0c2MUMudug000017Nepal#NP.RA0c2RARapti000024Kiribati#KI.PI0c2PIPhoenix Islands00001EPhilippines#PH.CV0c2CVCavite000018Gabon#GA.NY0c2NYNyanga000020Lebanon#LE.NA0c2NAAn Nabatiyah000019Iran#IR.LO0c2LOLorestan000022FranceDepartment#FR.IN0c2INIndre00001CVietnam#VN.LS0c2LSLang Son000019Thailand#TH.LE0c2LELoei00002BEuropewithcountries#0500c2NINorth Ireland000019Arkansas#0390c2DADallas00001AEngland#0350c2ESE.Sussex00001FWestVirginia#0670c2NINicholas000019Colorado#0470c2GIGilpin000018Montana#0170c2CUCuster00001BSouthDakota#0850c2LYLyman000018Alabama#0630c2GRGreene000018Asia#0150c2IDIndonesia000018Missouri#2230c2WYWayne000019Texas#2950c2LIPLipscomb00001ELouisiana#0390c2EVEvangeline00001BGeorgia#1030c2EFEffingham000028WorldwithCountries#1810c2NZNew Zealand00001CMinnesota#1550c2TRTraverse00001DKentucky#1390c2LGLivingston00001DMichigan#1490c2SJSt. Joseph00001BFlorida#0670c2LYLafayette00001BMississippi#0490c2HIHinds00001FPennsylvania#0150c2BFBradford000021NewCaledonia#NC.NO.TO0c2TOTouho000027NewWorld#750c2STSao Tome and Principe000017Turkey#200c2DNDenizli000030USANorthEastRegion#110c2DCDistrict of Columbia00001BPuertoRico#930c2MRMaricao000029WorldwithCountries#230c2USUnited States00001DNewZealand#F90c2TKITaranaki00001EEgypt_346255#080c2DMDamietta00001FAzerbaijan#180c2FUF&uuml;zuli00001DSanMarino#070c2SMSan Marino00001DAsiaGeorgia#010c2ABAbkhazia00001ABelgium#010c2ANAntwerpen000016Mali#ML.KD0c2KDKidal000017Guinea#GN.ML0c2MLMali000018Tunisia#TN.BJ0c2BJBeja00001AIran#IR.KZ0c2KZKhuzestan000023Thailand#TH.KP0c2KPKamphaeng Phet000028Eritrea#ER.SK0c2SKSemenawi Keyih Bahri00001EEngland#0360c2WAWarwickshire00001BTennessee#1370c2PIPickett00001COklahoma#0890c2MTMcCurtain000016Iowa#1410c2OBO'Brien00001BWisconsin#0310c2DUDouglas00001BTexas#4770c2WASWashington000013Asia#0160c2IRIran00001AIndiana#0930c2LWLawrence000018NewYork#0650c2ONOneida00001ENorthCarolina#1330c2ONOnslow00001AVirginia#0350c2CLCarroll000017Georgia#2850c2TRTroup00001AKansas#0870c2JFJefferson00001FSouthCarolina#0590c2LULaurens00001BIllinois#1230c2MNMarshall00001CMissouri#0430c2CHChristian000022WorldwithCountries#1820c2PWPalau00001CNorthDakota#0570c2MEMercer000017Texas#1150c2DAWDawson000014Ohio#0770c2HUHuron00001CNewMexico#0490c2SFSanta Fe000019Nebraska#0470c2DSDawson000023NewCaledonia#NC.SU.MO0c2MOMoindou000026Manitoba#CA.MB.PM0c2PMPembina Region000019NewWorld#760c2SNSenegal00001FTurkey#210c2DYDiyarbak&#305;r000025WorldwithCountries#240c2GLGreenland00001CEgypt_346255#090c2FYFaiyum00002AAzerbaijan#190c2GDG&#601;d&#601;b&#601;y000019Ukraine#010c2CKCherkasy000020SanMarino#080c2MGMontegiardino00001BAsiaGeorgia#020c2AJAdjara000018Belgium#020c2HAHainaut00001BEurope2#EU.BE0c2BEBelgium00001BAlgeria#DZ.EO0c2EOEl Oued000019Jordan#JO.MD0c2MDMadaba000023CentralAmerica2#CE.JM0c2JMJamaica00001ETanzania#TZ.SH0c2SHShinyanga000034PapuaNewGuinea#PG.NC0c2NCNational Capital District00001EUzbekistan#UZ.AN0c2ANAndijon00001AHongKong#HK.NO0c2NONorth00001AMicronesia#FM.YA0c2YAYap000018Serbia#RS.PI0c2PIPirot000018Guinea#GN.MM0c2MMMamou00001ALibya#LY.MI0c2MIMisratah00001FBotswana#BW.NW0c2NWNorth West00001BVietnam#VN.NA0c2NANghe An00001CThailand#TH.LG0c2LGLampang000018Arkansas#0410c2DEDesha00001BWestVirginia#0690c2OHOhio000018Colorado#0490c2GRGrand000019Montana#0190c2DADaniels00001CSouthDakota#0870c2MCMcCook000016Alabama#0650c2HAHale00001FVirginia#0360c2CCCharles City00001AMissouri#2250c2WBWebster000015Utah#0010c2BVBeaver000019Texas#2970c2LIVLive Oak00001CLouisiana#0410c2FRFranklin000022Virginia#7600c2RIRichmond (City)000018Georgia#1050c2ELElbert00002DWorldwithCountries#1830c2PGPapua New Guinea00001BMinnesota#1570c2WBWabasha000018Kentucky#1410c2LOLogan00001AMichigan#1510c2SNSanilac000016Florida#0690c2LALake00001CMississippi#0510c2HOHolmes00001CPennsylvania#0170c2BUBucks000035NewfoundlandandLabrador#CA.NF.CE0c2CECentral Region00001BNewWorld#770c2SCSeycelles000016Turkey#220c2EDEdirne00001BPuertoRico#950c2MBMaunabo000020SaintLucia#010c2ARAnse-la-Raye000025WorldwithCountries#250c2ARArgentina00001CNewZealand#G10c2WKOWaikato00001DEgypt_346255#100c2GHGharbia000023Azerbaijan#200c2GAG&#601;nc&#601;00001AUkraine#020c2CHChernihiv00001DSanMarino#090c2SESerravalle00001AAsiaGeorgia#030c2GUGuria000016Belgium#030c2LILiege000022SouthAfrica#020c2NLKwaZulu-Natal000023Hungary#010c2BKB&aacute;cs-Kiskun00001ECambodia#KH.PY0c2PYPrey Veng000024CapeVerde#CV.RG0c2RGRibeira Grande00001DCameroon#CM.AD0c2ADAdamaoua00001EKazakhstan#KZ.ZM0c2ZMZhambyl00001DBurkinaFaso#BF.HO0c2HOHouet00001CSaudiArabia#SA.AS0c2ASAsir00002ECentralAfricanRepublic#CF.OP0c2OPOuham-Pende000020PapuaNewGuinea#PG.MN0c2MNManus00001ABurundi#BI.RT0c2RTRutana000026Sudan#SD.GD0c2GDAl Qadarif (Gedarif)000026Philippines#PH.DO0c2DODavao Oriental00001BRussia#RU.NG0c2NGNovgorod000019Libya#LY.MJ0c2MJAl Marj000018China2#CN.JL0c2JLJilin00001DVietnam#VN.NB0c2NBNinh Binh00001AThailand#TH.KR0c2KRKrabi00001BEngland#0380c2WIWiltshire000018Tennessee#1390c2POPolk000017France#0020c2ALAlsace00001BOklahoma#0910c2MLMcIntosh000016Iowa#1430c2OSOsceola000018Wisconsin#0330c2DNDunn000015Texas#4790c2WEBWebb000019Indiana#0950c2MAMadison00001ANewYork#0670c2OOOnondaga00001ENorthCarolina#1350c2OROrange00001CVirginia#0370c2CHCharlotte000018Georgia#2870c2TUTurner000017Kansas#0890c2JWJewell00001BSouthCarolina#0610c2LELee000018Illinois#1250c2MOMason000018Missouri#0450c2CKClark000022WorldwithCountries#1840c2WSSamoa00001CNorthDakota#0590c2MOMorton00001BTexas#1170c2DESDeaf Smith000023Virginia#5800c2CICovington (City)000016Ohio#0790c2JAJackson00001ANewMexico#0510c2SISierra000018Nebraska#0490c2DEDeuel000020USASouthWestRegion#490c2UTUtah00001ENewWorld#780c2SLSierra Leone000020Turkey#230c2EGElaz&#305;&#287;00001BSaintLucia#020c2DADauphin000023WorldwithCountries#260c2BOBolivia00001FNewZealand#G20c2WGNWellington00001AEgypt_346255#110c2GZGiza00001CAzerbaijan#210c2GRGoranboy00001BUkraine#030c2CVChernivtsi00001AGreenland#010c2NGAvannaa00001CAsiaGeorgia#040c2IMImereti000018Belgium#040c2LMLimburg00001FSouthAfrica#030c2FSFree State000018Hungary#020c2BABaranya000034NorthWestTerritories#CA.NT.MV0c2MVMackenzie Valley00002AFrenchGuiana#GL.SL.AY0c2AYAwala Yalimapo000028Mauritius#MU.RR0c2RRRiviere Du Rempart00001CGhana#GH.UW0c2UWUpper West00001CEurope2#EU.BG0c2BGBulgaria000022BurkinaFaso#BF.GZ0c2GZGanzourgou00001BZambia#ZM.NO0c2NONorthern00001FMongolia#MN.SB0c2SBSukhbaatar000022CoteDivoire#CI.WR0c2WRWorodougou00001BRussia#RU.MR0c2MRMordovia00001BMalawi#MW.CK0c2CKChikwawa000017Arkansas#0430c2DRDrew000020England#0390c2WOWorcestershire000020WestVirginia#0710c2PEPendleton00001AFrance#0030c2AQAquitaine00001BColorado#0510c2GUGunnison000018Montana#0210c2DWDawson00001FSouthDakota#0890c2MPMcPherson000017Alabama#0670c2HEHenry000014Asia#0190c2JPJapan000018Missouri#2270c2WOWorth000018Utah#0030c2BEBox Elder000016Texas#2990c2LANLlano000019Louisiana#0430c2GRGrant000019Georgia#1070c2EMEmanuel00002CWorldwithCountries#1850c2SBSolomon Islands00001AMinnesota#1590c2WDWadena000017Kentucky#1430c2LYLyon00001EMichigan#1530c2SHSchoolcraft000015Florida#0710c2LELee00001FMississippi#0530c2HUHumphreys00001DPennsylvania#0190c2BTButler00002BMadagascarRegions#MG.AV.AG0c2AGAnalamanga000019NewWorld#790c2SOSomalia000018Turkey#240c2ENErzincan000021PuertoRico#970c2MGMayag&uuml;ez00001CSaintLucia#030c2CACastries000022WorldwithCountries#270c2BRBrazil00001FNewZealand#G30c2WTCWest Coast00001EEgypt_346255#120c2ISIsmailia000026Azerbaijan#220c2GYG&ouml;y&ccedil;ay00001FUkraine#040c2DPDnipropetrovsk000017Greenland#020c2EGTunu00001CAsiaGeorgia#050c2KAKakheti00001BBelgium#050c2LULuxembourg000016Greece#010c2ATAttica000024Hungary#030c2BEB&eacute;k&eacute;s000025PolandCounties#PL.PM.SL0c2PSLSlupsk00001CBurkinaFaso#BF.ZR0c2ZRZiro00001FQatar#QA.GH0c2GHAl Ghuwariyah00001AEritrea#ER.AN0c2ANAnseba00001DUK7#UK.NI0c2NINorth Ireland000019Russia#RU.MS0c2MSMoscow00001ATunisia#TN.TO0c2TOTozeur000017Uganda#UG.GL0c2GLGulu000022FranceDepartment#FR.IS0c2ISIsere00001CVietnam#VN.ND0c2NDNam Dinh00001APalau#PW.AM0c2AMAimeliik00001EEngland#0400c2NYN. Yorkshire00001ATennessee#1410c2PUPutnam000019France#0040c2AUAuvergne000018Oklahoma#0930c2MAMajor000013Iowa#1450c2PAPage00001EWisconsin#0350c2ECEau Claire000018Texas#4810c2WHAWharton000018Indiana#0970c2MRMarion000019NewYork#0690c2OTOntario00001FNorthCarolina#1370c2PAPamlico000018Georgia#2890c2TWTwiggs000018Kansas#0910c2JOJohnson000021SouthCarolina#0630c2LXLexington000019Illinois#1270c2MCMassac000017Missouri#0470c2CYClay000022WorldwithCountries#1860c2TOTonga00001FNorthDakota#0610c2MUMountrail000016Texas#1190c2DELDelta000018Ohio#0810c2JEJefferson00001BNewMexico#0530c2SOSocorro000018Nebraska#0510c2DIDixon00002AMadagascarRegions#MG.MA.BE0c2BEBetsiboka00003APrinceEdwardIsland#CA.PE.NC0c2NCNorth Cape Coastal Drive000027Manitoba#CA.MB.PR0c2PRParkland Region00002BMadagascarRegions#MG.TM.AI0c2AIAtsinanana00001ENewWorld#800c2ZASouth Africa000017Turkey#250c2EMErzurum00001CSaintLucia#040c2CHChoiseul000021WorldwithCountries#280c2CLChile000016USA#LA0c2LALouisiana000024Egypt_346255#130c2KSKafr el-Sheikh000022Azerbaijan#230c2HAHac&#305;qabul000018Ukraine#050c2DTDonetsk00001ALatvia#010c2AIAizkraukle000018Greenland#030c2VGKitaa000021AsiaGeorgia#060c2KKKvemo Kartli000019Haiti#030c2NONord-Ouest000016Belgium#060c2NANamur00001EGreece#020c2CGCentral Greece000021SouthAfrica#050c2ECEastern Cape000033Hungary#040c2BOBorsod-Aba&uacute;j-Zempl&eacute;n000017Nigeria#NG.IM0c2IMImo00001BTanzania#TZ.RV0c2RVRuvuma00001BTanzania#TZ.TB0c2TBTabora00001CMacedonia#MK.ET0c2ETTetovo00001DSerbia#RS.PM0c2PMPomoravlje00001BBurundi#BI.BB0c2BBBubanza000020Tunisia#TN.SZ0c2SZSidi Bou Zid00001APalau#PW.SO0c2SOSonsorol000018Iran#IR.MK0c2MKMarkazi000018Palau#PW.AN0c2ANAngaur00001EPennsylvania#0210c2CACambria00001BArkansas#0450c2FAFaulkner00001FEngland#0410c2TWTyne And Wear000020WestVirginia#0730c2PLPleasants000019France#0050c2BRBretagne00001BColorado#0530c2HIHinsdale00001CMontana#0230c2DLDeer Lodge00001ESouthDakota#0910c2MAMarshall000019Alabama#0690c2HOHouston000019Asia#0210c2KZKazakhstan000019Missouri#2290c2WRWright000022Alaska#1300c2KGKetchikan Gateway000014Utah#0050c2CACache000017Texas#3010c2LOVLoving00001ALouisiana#0450c2IBIberia000017Georgia#1090c2EVEvans000023WorldwithCountries#1870c2TVTuvalu00001AMinnesota#1610c2WSWaseca00001CKentucky#1450c2MKMcCracken00001DMichigan#1550c2SWShiawassee000016Florida#0730c2LOLeon00001FMississippi#0550c2ISIssaquena000017NewWorld#810c2SDSudan00001ETurkey#260c2ESEski&#351;ehir000018PuertoRico#990c2MCMoca00001BSaintLucia#050c2DEDennery000024WorldwithCountries#290c2COColombia00001CEgypt_346255#140c2MTMatruh000024Azerbaijan#240c2IM&#304;mi&#351;li000020Ukraine#060c2IFIvano-Frankivsk00001CLatvia#020c2ALAl&#363;ksne000026AsiaGeorgia#070c2MMMtskheta-Mtianeti000020Belgium#070c2OVOost-Vlaanderen000021Greece#030c2CMCentral Macedonia00001CSouthAfrica#060c2GTGauteng000019Hungary#050c2BUBudapest000029PolandCounties#PL.PK.TM0c2PTMTarnobrzeg000018Nauru#NR.ME0c2MEMeneng00001BEurope2#EU.UA0c2UAUkraine00001AEurope2#EU.TK0c2TKTurkey00001BEurope2#EU.AT0c2ATAustria00001BAlgeria#DZ.ET0c2ETEl Tarf000021PapuaNewGuinea#PG.MR0c2MRMorobe000025Philippines#PH.DS0c2DSDavao del Sur00002FHungaryRegions#HU.SG0c2SGSouthern Great Plain000018England#0420c2MSMersey000018Tennessee#1430c2RHRhea00001BMaryland#0010c2ALAllegany00001AFrance#0060c2BUBourgogne00001BOklahoma#0950c2MRMarshall000018Iowa#1470c2PLPalo Alto00001CWisconsin#0370c2FLFlorence000018Texas#4830c2WHEWheeler00001CAsia#0220c2KPKorea (north)00001AIndiana#0990c2MSMarshall000018NewYork#0710c2OROrange000022NorthCarolina#1390c2PSPasquotank00001FVirginia#0410c2CSChesterfield000017Georgia#2910c2UNUnion000017Kansas#0930c2KEKearny000021SouthCarolina#0650c2MCMcCormick000019Illinois#1290c2MDMenard00001AMissouri#0490c2CIClinton000024WorldwithCountries#1880c2VUVanuatu00001CNorthDakota#0630c2NENelson000017Texas#1210c2DENDenton000013Ohio#0830c2KNKnox000018NewMexico#0550c2TATaos000018Nebraska#0530c2DODodge00001BNewWorld#820c2SZSwaziland000023USANorthEastRegion#180c2INIndiana00001ESaintLucia#060c2GIGros Islet000023WorldwithCountries#300c2ECEcuador00001BEgypt_346255#150c2MNMinya00002CAzerbaijan#250c2IS&#304;smay&#305;ll&#305;000018Ukraine#070c2KKKharkiv000015Latvia#030c2BLBalvi000036AsiaGeorgia#080c2RLRacha-Lechkhumi and Kvemo Svaneti000020Belgium#080c2WVWest-Vlaanderen000015Greece#040c2CRCrete00001FSouthAfrica#070c2MPMpumalanga000020Hungary#060c2CSCsongr&aacute;d000025PolandCounties#PL.MA.TM0c2MTMTarnow00001AMali#ML.KK0c2KKKoulikoro000022Uzbekistan#UZ.SU0c2SUSurxondaryo000024Uzbekistan#UZ.TK0c2TKTashkent City000018Panama#PA.CC0c2CCCocle000026PapuaNewGuinea#PG.NI0c2NINew Ireland00001ABurundi#BI.RY0c2RYRuyigi00001FMacedonia#MK.GB0c2GBGazi Baba00001BRussia#RU.OB0c2OBOrenburg000018Malawi#MW.DE0c2DEDedza00002CFranceDepartment#FR.IV0c2IVIlle et Vilaine00001EPennsylvania#0230c2CMCameron00001BArkansas#0470c2FRFranklin00001EEngland#0430c2GMG.Manchester000021WestVirginia#0750c2POPocahontas000017France#0070c2CECentre00001BColorado#0550c2HUHuerfano000018Montana#0250c2FAFallon00001BSouthDakota#0930c2MEMeade000019Alabama#0710c2JAJackson00001CAsia#0230c2KRKorea (south)000015Utah#0070c2CRCarbon000018Texas#3030c2LUBLubbock00001DLouisiana#0470c2IEIberville000018Georgia#1110c2FAFannin00002AWorldwithCountries#1890c2NCNew Caledonia00001EMinnesota#1630c2WAWashington00001BKentucky#1470c2MRMcCreary00001AMichigan#1570c2TUTuscola000016Florida#0750c2LVLevy00001EMississippi#0570c2ITItawamba00001ANewWorld#830c2TZTanzania000017Turkey#280c2GIGiresun00001BSaintLucia#070c2LBLaborie00002CWorldwithCountries#310c2FKFalkland Islands00001DEgypt_346255#160c2MFMonufia00002BAzerbaijan#260c2KAK&#601;lb&#601;c&#601;r000018Ukraine#080c2KSKherson000016Latvia#040c2BUBauska000024NorthEuropeanRegion#010c2DKDenmark000027AsiaGeorgia#090c2SJSamtskhe-Javakheti000019Haiti#060c2ARArtibonite00001FBelgium#090c2BWBrabant Wallon000029Greece#050c2EMEast Macedonia and Thrace000022SouthAfrica#080c2NCNorthern Cape00001CThailand#TH.LN0c2LNLamphun00001DThailand#TH.MD0c2MDMukdahan000024CapeVerde#CV.SC0c2SCSanta Catarina000023SaoTomeandPrincipe#ST.CU0c2CUCaue00001BKyrgyzstan#KG.CU0c2CUChuy00001CLesotho#LS.MF0c2MFMefeteng00001FZimbabwe#ZW.MA0c2MAManicaland000015Benin#BJ.ZO0c2ZOZou00001BIran#IR.MN0c2MNMazandaran00001CEngland#0440c2WMW.Midlands000019Tennessee#1450c2RORoane00001FMaryland#0030c2ANAnne Arundel000022France#0080c2CHChampagne-Ardenne000018Oklahoma#0970c2MYMayes000017Iowa#1490c2PYPlymouth00001FWisconsin#0390c2FDFond du Lac000018Texas#4850c2WICWichita000018Indiana#1010c2MTMartin000019NewYork#0730c2OLOrleans00001ENorthCarolina#1410c2PEPender000019Virginia#0430c2CKClarke000017Georgia#2930c2UPUpson000018Kansas#0950c2KMKingman00001ESouthCarolina#0670c2MAMarion000019Illinois#1310c2MRMercer000017Missouri#0510c2CLCole000024WorldwithCountries#1900c2BABahrain00001CNorthDakota#0650c2OLOliver000017Texas#1230c2DEWDewitt000013Ohio#0850c2LALake00001CNewMexico#0570c2TRTorrance00001ANebraska#0550c2DUDouglas00001DHungary#080c2FEFej&eacute;r000016NewWorld#840c2TGTogo00001ASaintLucia#080c2MIMicoud000029WorldwithCountries#320c2GFFrench Guiana000020Egypt_346255#170c2NVNew Valley000026Azerbaijan#270c2KUK&uuml;rd&#601;mir00001DUkraine#090c2KMKhmelnytskyi00001ALatvia#050c2CEC&#275;sis000024NorthEuropeanRegion#020c2EEEstonia000021AsiaGeorgia#100c2SKShida Kartli000015Haiti#070c2CECentre000016Greece#060c2EPEpirus00001CSouthAfrica#090c2LPLimpopo000024PolandCounties#PL.MZ.RM0c2MRMRadom000024SierraLeone#SL.NO.PL0c2PLPort Loko000017Palau#PW.AR0c2ARAirai00001EOman#OM.DA0c2DAAd Dakhiliyah000022CapeVerde#CV.SD0c2SDSao Domingos000029BurkinaFaso#BF.ZW0c2ZWZoundw&eacute;ogo000030DemocraticRepublicoftheCongo#CD.MN0c2MNManiema00001ASomalia#SO.NU0c2NUNugaal00001CNepal#NP.SA0c2SASagarmatha000027Philippines#PH.DV0c2DVDavao del Norte00001BRussia#RU.NN0c2NNNenetsia000018Libya#LY.MQ0c2MQMurzuq00001AChina2#CN.JS0c2JSJiangsu00001DPennsylvania#0250c2CRCarbon000019Arkansas#0490c2FUFulton000019England#0450c2RNRutland00001EWestVirginia#0770c2PRPreston000016France#0090c2COCorse00001AColorado#0570c2JAJackson000018Montana#0270c2FEFergus00001ESouthDakota#0950c2MLMellette00001BAlabama#0730c2JEJefferson00002BIndia#0010c2ANAndaman and Nicobar Islands000019Asia#0250c2KGKyrgyzstan000016Utah#0090c2DADaggett000015Texas#3050c2LYNLynn00001BLouisiana#0490c2JAJackson000019Georgia#1130c2FYFayette000021WorldwithCountries#1910c2IZIraq00001CMinnesota#1650c2WTWatonwan000019Kentucky#1490c2MLMcLean00001CMichigan#1590c2VBVan Buren000019Florida#0770c2LILiberty00001DMississippi#0590c2JAJackson000029NewCaledonia#NC.SU.NO0c2NONoum&eacute;a00002DMadagascarRegions#MG.TM.AN0c2ANAnalanjirofo000027Hungary#090c2GMGy&#337;r-Moson-Sopron000019NewWorld#850c2TNTunisia000024USANorthEastRegion#210c2KYKentucky000026DominicanRepublic#010c2AZ&Aacute;zua000024SaintLucia#090c2SOSoufri&egrave;re000022WorldwithCountries#330c2GYGuyana000021Egypt_346255#180c2NSNorth Sinai000025Azerbaijan#280c2LCLa&ccedil;&#305;n00001BUkraine#100c2KHKirovohrad00001ALatvia#060c2DADaugavpils000024NorthEuropeanRegion#030c2FIFinland00002BAsiaGeorgia#110c2SZSamegrelo-Zemo Svaneti00001EGreece#070c2IOIonian Islands00001FSouthAfrica#100c2NWNorth West000013Japan#10c2AIAichi000021Lesotho#LS.MH0c2MHMohale's Hoek000028Zimbabwe#ZW.MC0c2MCMashonaland Central000020Russia#RU.NO0c2NONorth Ossetia000019Tunisia#TN.TU0c2TUTunis00001DMalawi#MW.CR0c2CRChiradzulu00001FEngland#0460c2IWIsle of Wight00001DTennessee#1470c2RBRobertson00001CMaryland#0050c2BLBaltimore000025France#0100c2FRFranche-Comt&eacute;000019Oklahoma#0990c2MUMurray000019Iowa#1510c2PCPocahontas00001AWisconsin#0410c2FOForest00001ATexas#4870c2WIBWilbarger00001EIndia#0020c2APAndhra Pradesh00001AWashington#0010c2ADAdams000013Asia#0260c2LALaos000017Indiana#1030c2MIMiami000018NewYork#0750c2OSOswego000022NorthCarolina#1430c2PRPerquimans000018Virginia#0450c2CGCraig000018Georgia#2950c2WKWalker000016Kansas#0970c2KWKiowa000020SouthCarolina#0690c2MRMarlboro000019Illinois#1330c2MEMonroe000019Missouri#0530c2COCooper000023WorldwithCountries#1920c2IEIsrael00001DNorthDakota#0670c2PEPembina000018Texas#1250c2DICDickens000017Ohio#0870c2LWLawrence000019NewMexico#0590c2UNUnion000018Nebraska#0570c2DNDundy00002AYukonTerritory#CA.YT.ST0c2STSilver Trail000030MadagascarRegions#MG.TM.AO0c2AOAlaotra-Mangoro000023Hungary#100c2HBHajd&uacute;-Bihar000018NewWorld#860c2UGUganda000015Turkey#310c2HTHatay000023DominicanRepublic#020c2BRBahoruco00001ESaintLucia#100c2VFVieux Fort000024WorldwithCountries#340c2PYParaguay000020Afghanistan#010c2BDSBadakhshan00001FEgypt_346255#190c2PSPort Said000026Azerbaijan#290c2LNL&#601;nk&#601;ran000017Ukraine#110c2KRCrimea000022Latvia#070c2DGVDaugavpils (city)000024NorthEuropeanRegion#040c2ISIceland00001CAsiaGeorgia#120c2TBTbilisi000013Haiti#090c2NDNord00001CGreece#080c2NANorth Aegean000021SouthAfrica#110c2WCWestern Cape000013Japan#20c2AKAkita000023Pakistan#PK.NA0c2NANorthern Areas000020CapeVerde#CV.SF0c2SFSao Filipe00001ANigeria#NG.JI0c2JIJigawa000017Jordan#JO.MN0c2MNMaan000020Zambia#ZM.NW0c2NWNorth-Western000025CentralAmerica2#CE.LC0c2LCSt. Lucia000018Laos#LA.SL0c2SLSalavan00001DPennsylvania#0270c2CECentre00001AArkansas#0510c2GAGarland00001AEngland#0470c2WSW.Sussex00001DWestVirginia#0790c2PUPutnam00001EFrance#0110c2LLIle-de-France00001CColorado#0590c2JEJefferson00001AMontana#0290c2FLFlathead00001BSouthDakota#0970c2MIMiner000017Alabama#0750c2LALamar000021India#0030c2ARArunachal Pradesh000014Utah#0110c2DVDavis00001ATexas#3070c2MCUMcCulloch00001DLouisiana#0510c2JEJefferson000021Virginia#7700c2RORoanoke (City)000017Georgia#1150c2FLFloyd000023WorldwithCountries#1930c2JOJordan00001AMinnesota#1670c2WLWilkin00001CNevada#5100c2CACarson City00001AKentucky#1510c2MIMadison00001CMichigan#1610c2WAWashtenaw000019Florida#0790c2MSMadison00001CMississippi#0610c2JSJasper000016Hungary#110c2HEHeves000020NewWorld#870c2WAWestern Sahara000016Turkey#320c2ICMersin000021USANorthEastRegion#230c2MEMaine000023DominicanRepublic#030c2BHBarahona00001BSaintLucia#110c2PRPraslin000020WorldwithCountries#350c2PEPeru00001DAfghanistan#020c2BDGBadghis00001EEgypt_346255#200c2QAQalyubia00002DAzerbaijan#300c2LAL&#601;nk&#601;ran (City)000016Latvia#080c2DODobele000024NorthEuropeanRegion#050c2IEIreland000017Haiti#100c2NENord-Est00001BArmenia#010c2AGAragatsotn00001BGreece#090c2PEPeloponnese000014Japan#30c2AOAomori000021Thailand#TH.MH0c2MHMae Hong Son00001FCambodia#KH.RO0c2RORatanakiri00001CBurkinaFaso#BF.IO0c2IOIoba00001BPanama#PA.CH0c2CHChiriqui000031CentralAmerica2#CE.KN0c2KNSt. Kitts &amp; Nevis00001BAngola#AO.BG0c2BGBenguela000018Uganda#UG.YU0c2YUYumbe000025Zimbabwe#ZW.ME0c2MEMashonaland East00001AMalawi#MW.CT0c2CTChitipa00001DEngland#0480c2EYE.Yorkshire00001ETennessee#1490c2RURutherford000025France#0120c2LALanguedoc-Roussillon00001BOklahoma#1010c2MKMuskogee000013Iowa#1530c2POPolk000019Wisconsin#0430c2GRGrant000018Texas#4890c2WIAWillacy000015India#0040c2ASAssam00001BWashington#0030c2ASAsotin000017Asia#0280c2MYMalaysia000018Indiana#1050c2MOMonroe000018NewYork#0770c2OGOtsego00001ENorthCarolina#1450c2POPerson00001BVirginia#0470c2CUCulpeper000018Georgia#2970c2WNWalton000018Kansas#0990c2LBLabette000020SouthCarolina#0710c2NBNewberry00001DIllinois#1350c2MYMontgomery00001BMissouri#0550c2CFCrawford000023WorldwithCountries#1940c2KUKuwait00001CNorthDakota#0690c2PIPierce000017Texas#1270c2DIMDimmit00001DDenmark#0010c2AR&Aring;rhus000022Virginia#5900c2DADanville (City)000016Ohio#0890c2LILicking00001CNewMexico#0610c2VAValencia00001BNebraska#0590c2FIFillmore000026YukonTerritory#CA.YT.CA0c2CACampbell000029Hungary#120c2KEKom&aacute;rom-Esztergom000018NewWorld#880c2ZMZambia000017Turkey#330c2IPIsparta000024USANorthEastRegion#240c2MDMaryland000029DominicanRepublic#040c2DADajab&oacute;n000016UAE#010c2AZAbu Dhabi000024WorldwithCountries#360c2SRSuriname000013USA#KS0c2KSKansas00001DAfghanistan#030c2BGLBaghlan00001AEgypt_346255#210c2QEQena000019Azerbaijan#310c2LELerik00001CUkraine#130c2KVKiev Oblast000017Latvia#090c2GUGulbene000023NorthEuropeanRegion#060c2LVLatvia000014Haiti#110c2OUOuest000017Armenia#020c2ARArarat00001CGreece#100c2SASouth Aegean000026PolandCounties#PL.WN.OM0c2WOMOlsztyn000013Japan#40c2CHChiba00001BSriLanka#LK.JA0c2JAJaffna00001ELesotho#LS.MK0c2MKMokhotlong000016Nepal#NP.SE0c2SESeti000023PapuaNewGuinea#PG.NO0c2NONorthern00001CMongolia#MN.SL0c2SLSelenge00001BTanzania#TZ.AS0c2ASArusha00001EPennsylvania#0290c2CHChester000018Arkansas#0530c2GRGrant00001DEngland#0490c2SYS.Yorkshire00001EWestVirginia#0810c2RARaleigh000019France#0130c2LILimousin000018Colorado#0610c2KIKiowa00001AMontana#0310c2GAGallatin00001FSouthDakota#0990c2MNMinnehaha00001CAlabama#0770c2LULauderdale000015India#0050c2BIBihar000017Utah#0130c2DUDuchesne000019Texas#3090c2MCLMcLennan000023Louisiana#0530c2JDJefferson Davis000019Georgia#1170c2FOForsyth000024WorldwithCountries#1950c2LBLebanon00001AMinnesota#1690c2WIWinona00001ADenmark#0020c2BOBornholm00001BKentucky#1530c2MGMagoffin000018Michigan#1630c2WYWayne000019Florida#0810c2MNManatee00001FMississippi#0630c2JEJefferson000026MadagascarRegions#MG.MA.BO0c2BOBoeny00001ANewWorld#890c2ZWZimbabwe00001DTurkey#340c2IB&#304;stanbul000029USANorthEastRegion#250c2MAMassachusetts000012UAE#020c2AJAjman000023WorldwithCountries#370c2UYUruguay00001ECentralAmerica#010c2BHBelize00001DEgypt_346255#220c2RSRed Sea000020Azerbaijan#320c2MAMasall&#305;000018Ukraine#140c2LHLuhansk00001ELatvia#100c2JKJ&#275;kabpils000026NorthEuropeanRegion#070c2LTLithuania000012Haiti#120c2SDSud000018Armenia#030c2AVArmavir000018Greece#110c2THThessaly000013Japan#50c2EHEhime00001AChina2#CN.JX0c2JXJiangxi00001FEurope2#EU.CH0c2CHSwitzerland000016Angola#AO.BI0c2BIBie00001BBurundi#BI.CA0c2CACankuzo00001ERussia#RU.NS0c2NSNovosibirsk000020CoteDivoire#CI.FR0c2FRFromager000019Uganda#UG.IB0c2IBIbanda000017Libya#LY.NL0c2NLNalut00001DEngland#0500c2WYW.Yorkshire000019Tennessee#1510c2SCScott00001AMaryland#0090c2CACalvert000019France#0140c2LOLorraine000018Oklahoma#1030c2NONoble00001CIowa#1550c2PTPottawattamie000019Wisconsin#0450c2GEGreen00001BTexas#4910c2WIMWilliamson00001BWashington#0050c2BEBenton000017Asia#0300c2MNMongolia00001CIndiana#1070c2MNMontgomery000018NewYork#0790c2PUPutnam00001CNorthCarolina#1470c2PIPitt00001DVirginia#0490c2CMCumberland000016Georgia#2990c2WAWare000015Kansas#1010c2LELane00001ESouthCarolina#0730c2OCOconee000019Illinois#1370c2MGMorgan000017Missouri#0570c2DDDade000021WorldwithCountries#1960c2OMOman00001CNorthDakota#0710c2RARamsey000017Texas#1290c2DONDonley00001FDenmark#0030c2FRFrederiksberg000014Ohio#0910c2LOLogan00001BNebraska#0610c2FRFranklin000025Hungary#140c2NON&oacute;gr&aacute;d000018NewWorld#900c2GMGambia00001ATurkey#350c2IZ&#304;zmir000024USANorthEastRegion#260c2MIMichigan000021DominicanRepublic#060c2DUDuarte000012UAE#030c2DUDubai000025WorldwithCountries#380c2VEVenezuela00001AUSA#MA0c2MAMassachusetts000022CentralAmerica#020c2CSCosta Rica00001CAfghanistan#050c2BAMBamyan00001DEgypt_346255#230c2SQSharqia00002AAzerbaijan#330c2MIMing&#601;&ccedil;evir000015Ukraine#150c2LVLviv000017Latvia#110c2JLJelgava000023NorthEuropeanRegion#080c2NONorway000016Haiti#130c2SESud-Est00001CCzechRepublic#520c2PRPraha00001CArmenia#040c2GRGegharkunik00001BGreece#120c2WGWest Greece000013Japan#60c2FUFukui000018Thailand#TH.NA0c2NANan000023Madagascar#MG.FI0c2FIFianarantsoa00001BMacedonia#MK.ZA0c2ZAZajas000025Mississippi#0650c2JDJefferson Davis00001EPennsylvania#0310c2CIClarion000019Arkansas#0550c2GEGreene00001FWestVirginia#0830c2RNRandolph00002CFrance#0150c2MIMidi-Pyr&eacute;n&eacute;es00001DColorado#0630c2KCKit Carson00001AMontana#0330c2GRGarfield00001BSouthDakota#1010c2MOMoody00001AAlabama#0790c2LWLawrence00001CIndia#0070c2CAChhattisgarh000014Asia#0310c2NPNepal000014Utah#0150c2EMEmery000019Texas#3110c2MCMMcMullen00001DLouisiana#0550c2LALafayette00001AGeorgia#1190c2FRFranklin000022WorldwithCountries#1970c2QAQatar00001AMinnesota#1710c2WRWright00001FDenmark#0040c2FEFrederiksborg000019Kentucky#1550c2MHMarion00001AMichigan#1650c2WEWexford000018Florida#0830c2MRMarion000026NewCaledonia#NC.SU.PA0c2PAPa&iuml;ta000017NewWorld#910c2CGCongo000015UAE#040c2FUFujairah000023WorldwithCountries#390c2DZAlgeria000023CentralAmerica#030c2ESEl Salvador00001BAfghanistan#060c2FRAFarah00001BEgypt_346255#240c2SHSohag000021Azerbaijan#340c2NANaftalan city000019Ukraine#160c2MYMykolaiv00001FLatvia#120c2JELJelgava (city)00002BNorthEuropeanRegion#090c2UKUnited Kingdom000019Haiti#140c2GAGrand'Anse000017Armenia#050c2KTKotayk00001EGreece#130c2WMWest Macedonia000027PolandCounties#PL.ZP.SM0c2ZSMSzczecin000015Japan#70c2FKFukuoka00001BTunisia#TN.BZ0c2BZBizerte000021FranceDepartment#FR.JU0c2JUJura00002DFranceDepartment#FR.LA0c2LALoire Atlantique000025Thailand#TH.NB0c2NBNong Bua Lam Phu000022Europe2#EU.UK0c2UKUnited Kingdom000020Europe2#EU.VA0c2VAVatican City00001ECambodia#KH.SI0c2SISiem Reap000019Ghana#GH.WP0c2WPWestern000032DemocraticRepublicoftheCongo#CD.NK0c2NKNord-Kivu000019Namibia#NA.KA0c2KAKaras00001ANigeria#NG.KD0c2KDKaduna00001BComoros #KM.MO0c2MOMoheli000018Panama#PA.CL0c2CLColon00001ECoteDivoire#CI.ZA0c2ZAZanzan00001DZimbabwe#ZW.MI0c2MIMidlands000025Philippines#PH.ES0c2ESEastern Samar000024Burundi#BI.BM0c2BMBujumbura Mairie00001BNebraska#0630c2FOFrontier00001ETennessee#1530c2SQSequatchie00001BMaryland#0110c2CRCaroline000023France#0160c2NONord-Pas-de-Calais000019Oklahoma#1050c2NWNowata000018Iowa#1570c2PWPoweshiek00001EWisconsin#0470c2GLGreen Lake000017Texas#4930c2WILWilson00001BWashington#0070c2CHChelan000018Indiana#1090c2MGMorgan000018NewYork#0810c2QUQueens00001CNorthCarolina#1490c2PLPolk00001CVirginia#0510c2DIDickenson000018Georgia#3010c2WRWarren00001CKansas#1030c2LVLeavenworth000022SouthCarolina#0750c2OROrangeburg00001FVirginia#7750c2SASalem (City)00001BIllinois#1390c2MTMoultrie000019Missouri#0590c2DLDallas000029WorldwithCountries#1980c2SASaudi Arabia00001CNorthDakota#0730c2RNRansom000016Texas#1310c2DUVDuval000015Denmark#0050c2FYFyn000015Ohio#0930c2LRLorain000015Hungary#160c2PEPest00001BNewWorld#920c2MIMauritius000019Turkey#370c2KSKastamonu000024DominicanRepublic#080c2ESEspaillat00001BUAE#050c2RKRas Al Khaimah000022WorldwithCountries#400c2AOAngola000021CentralAmerica#040c2GTGuatemala00001CWorld#SA0c2SASouth America000018Andorra#020c2CACanillo00001CAfghanistan#070c2FYBFaryab000021Egypt_346255#250c2SSSouth Sinai00003DAzerbaijan#350c2NXNax&ccedil;&#305;van &#350;&#601;h&#601;r000017Ukraine#170c2ODOdessa000024Latvia#130c2JURJ&#363;rmala (city)000023NorthEuropeanRegion#100c2SESweden000015Haiti#150c2NINippes000015Armenia#060c2LOLori000024FrenchGuiana#GF.CY.IR0c2IRIracoubo000017Japan#80c2FSFukushima000019CapeVerde#CV.SL0c2SLSal000019Nigeria#NG.KE0c2KEKebbi000019Ghana#GH.EP0c2EPEastern000018Niger#NE.ZI0c2ZIZinder00001ATanzania#TZ.TN0c2TNTanga000029PapuaNewGuinea#PG.NS0c2NSNorth Solomons00001AAngola#AO.CB0c2CBCabinda000018Russia#RU.OL0c2OLOryal000018Uganda#UG.HO0c2HOHoima000017Malawi#MW.DO0c2DODowa000021Virginia#5950c2EMEmporia (City)000018Florida#0850c2MAMartin00001BMississippi#0670c2JOJones000021Pennsylvania#0330c2CLClearfield00001CArkansas#0570c2HEHempstead00001EWestVirginia#0850c2RIRitchie000020France#0170c2NRBasse-Normandie000017Colorado#0650c2LALake000019Montana#0350c2GCGlacier000020SouthDakota#1030c2PEPennington000015Alabama#0810c2LELee000017Asia#0330c2PKPakistan000017Utah#0170c2GAGarfield000018Texas#3130c2MADMadison00001BOceania#0010c2AUAustralia00001DLouisiana#0570c2LFLafourche000018Georgia#1210c2FUFulton000022WorldwithCountries#1990c2SYSyria000023Minnesota#1730c2YMYellow Medicine000027Denmark#0060c2KOK&oslash;benhavns Amt00001BKentucky#1570c2MSMarshall00002DSaskatchewan#CA.SK.SE0c2SESouth East Region000017Hungary#170c2SOSomogy00001DNewWorld#930c2AFAfghanistan000017Turkey#380c2KYKayseri000025Australia2#WA0c2WAWestern Australia000028DominicanRepublic#090c2INIndependencia000014UAE#060c2SHSharjah000021WorldwithCountries#410c2BJBenin000015USA#MD0c2MDMaryland000020CentralAmerica#050c2HOHonduras000017Andorra#030c2ENEncamp00001CAfghanistan#080c2GHAGhazni00001AEgypt_346255#260c2SZSuez000023Azerbaijan#360c2NENeft&ccedil;ala000018Ukraine#180c2PLPoltava00001DLatvia#140c2KRKr&#257;slava00001ABolivia#010c2HChuquisaca000017Armenia#070c2SHShirak00002CDistrictofColumbia#US.DC.NE0c2NENorth East000012Japan#90c2GIGifu000018Cameroon#CM.SU0c2SUSud000029FranceDepartment#FR.LC0c2LCLoir et Cher000019Syria#SY.LA0c2LALatakia00001ACambodia#KH.TA0c2TATakeo000020CapeVerde#CV.SM0c2SMSao Miguel000021Mauritius#MU.BL0c2BLBlack River00001FBurkinaFaso#BF.KA0c2KAKadiogo00001AAlgeria#DZ.GL0c2GLGuelma000021Angola#AO.CC0c2CCCuando Cubango00001DUzbekistan#UZ.BU0c2BUBuxoro00001DSerbia#RS.PZ0c2PZPrizrenski000017Russia#RU.OM0c2OMOmsk000018Libya#LY.MZ0c2MZMizdah000014Ohio#0950c2LULucas00001CFlorida#0860c2DAMiami-Dade000019Nebraska#0650c2FUFurnas00001ATennessee#1550c2SBSevier000014UK#0010c2ENEngland00001AMaryland#0130c2COCarroll000021France#0180c2PDPays de la Loire00001BOklahoma#1070c2OKOkfuskee000017Iowa#1590c2RGRinggold000018Wisconsin#0490c2IOIowa000018Texas#4950c2WINWinkler000015India#0100c2DEDelhi00001CWashington#0090c2CMClallam00001AAsia#0340c2PHPhilippines000018Indiana#1110c2NENewton00001CNewYork#0830c2RERensselaer000020NorthCarolina#1510c2RARandolph00001CVirginia#0530c2DNDinwiddie00001CGeorgia#3030c2WGWashington000018Kansas#1050c2LCLincoln00001FSouthCarolina#0770c2PIPickens000016Oceania#0020c2FJFiji000017Illinois#1410c2OGOgle00001AMissouri#0610c2DADaviess00002FWorldwithCountries#2000c2AEUnitedArabEmirates00001ENorthDakota#0750c2RVRenville000019Texas#1330c2EASEastland000022Denmark#0070c2KBK&oslash;benhavn00001FNewCaledonia#NC.NO.VO0c2VOVoh00002EHungary#180c2SZSzabolcs-Szatm&aacute;r-Bereg000019NewWorld#940c2AMArmenia00001FTurkey#390c2KLK&#305;rklareli000028DominicanRepublic#100c2ALLa Altagracia00001AUAE#070c2UQUmm Al Quwain000024WorldwithCountries#420c2BWBotswana000015USA#KY0c2KYKentucky000012USA#ME0c2MEMaine000021CentralAmerica#060c2NUNicaragua00001BAndorra#040c2LMLa Massana00001BAfghanistan#090c2GHOGhowr00001BEgypt_346255#270c2LXLuxor00001DAzerbaijan#370c2OGO&#287;uz000016Ukraine#190c2RVRivne00001CLatvia#150c2KUKuld&#299;ga00001ABolivia#020c2CCochabamba000017Armenia#080c2SUSyunik000026PolandCounties#PL.MZ.SM0c2MSMSiedlce000023FranceDepartment#FR.LD0c2LDLandes000021CapeVerde#CV.SN0c2SNSao Nicolau00001FCambodia#KH.BA0c2BABattambang00001CMacedonia#MK.ZE0c2ZEZelino000016Chad#TD.KA0c2KAKanem000022Guyana#GY.MA0c2MAMahaica-Berbice000030HungaryRegions#HU.ST0c2STSouthern Transdanubia000023Libya#LY.NQ0c2NQAn Nuqat al Khams000018Florida#0870c2MOMonroe00001CMississippi#0690c2KEKemper00001EPennsylvania#0350c2CNClinton00001DArkansas#0590c2HSHot Spring00001CWestVirginia#0870c2RORoane000015UK#0020c2SCScotland000019France#0190c2PIPicardie00001BColorado#0670c2LPLa Plata00001FMontana#0370c2GVGolden Valley00001DSouthDakota#1050c2PRPerkins00001BAlabama#0830c2LILimestone000013India#0110c2GOGoa000014Utah#0190c2GRGrand000017Texas#3150c2MARMarion00001AOceania#0030c2KIKiribati00001CLouisiana#0590c2LSLa Salle000018Georgia#1230c2GIGilmer000022WorldwithCountries#2010c2YMYemen00001DDenmark#0080c2NONordjylland000019Kentucky#1590c2MTMartin00002AMadagascarRegions#MG.AV.BN0c2BNBongolava000017Armenia#090c2TVTavush00001CNewWorld#950c2AZAzerbaijan000022Turkey#400c2KHK&#305;r&#351;ehir000033DominicanRepublic#110c2EPEl&iacute;as Pi&ntilde;a000028WorldwithCountries#430c2BFBurkina Faso000017Sweden#020c2KBlekinge00001ECentralAmerica#070c2PMPanama000017Andorra#050c2OROrdina00001DAfghanistan#100c2HELHelmand00001CEgypt_346255#280c2HWHelwan000029Azerbaijan#380c2QAQ&#601;b&#601;l&#601;00001CLatvia#160c2LELiep&#257;ja000017Bolivia#030c2BEl Beni00001ECameroon#CM.SW0c2SWSud-Ouest00001EVietnam#VN.NT0c2NTNinh Thuan000017Nauru#NR.NI0c2NINibok000022Thailand#TH.NF0c2NFNakhon Phanom000018Angola#AO.BO0c2BOBengo000019Nepal#NP.BA0c2BABagmati000017Russia#RU.PE0c2PEPerm00001EMongolia#MN.AR0c2ARArkhangai000021Mongolia#MN.BH0c2BHBayankhongor000017Laos#LA.AT0c2ATAttapu000016Denmark#0090c2RIRibe000016Ohio#0970c2MAMadison000017Nebraska#0670c2GAGage00001ATennessee#1570c2SHShelby00001AUK#0030c2NINorth Ireland000018Maryland#0150c2CECecil000021France#0200c2PCPoitou-Charentes00001BOklahoma#1090c2OLOklahoma000012Iowa#1610c2SASac000018Wisconsin#0510c2IRIron000015Texas#4970c2WISWise000017India#0120c2GUGujarat00001AWashington#0110c2CAClark000021Asia#0360c2RURussian Federation000017Indiana#1130c2NONoble00001ANewYork#0850c2RIRichmond000020NorthCarolina#1530c2RIRichmond000017Georgia#3050c2WYWayne000015Kansas#1070c2LNLinn000020SouthCarolina#0790c2RIRichland000022Oceania#0040c2MHMarshall Islands000019Illinois#1430c2PEPeoria000019Missouri#0630c2DKDeKalb000028WorldwithCountries#2020c2PRPuerto Rico00001ENorthDakota#0770c2RIRichland000016Texas#1350c2ECTEctor00001CArmenia#100c2VDVayots Dzor00002CCentralAmericawithCaribbeans#010c2BHBelize00002CHungary#200c2JNJ&aacute;sz-Nagykun-Szolnok00001CNewWorld#960c2BDBangladesh000017Turkey#410c2KCKocaeli000024DominicanRepublic#120c2ROLa Romana000023WorldwithCountries#440c2BIBurundi00001DSweden#030c2XG&auml;vleborg000032Andorra#060c2SJSant Juli&agrave; de L&ograve;ria00001BAfghanistan#110c2HERHerat000024Egypt_346255#290c2SO6th of October000017Azerbaijan#390c2QXQax000015Ukraine#210c2SMSumy000024Latvia#170c2LPXLiep&#257;ja (city)000016Bolivia#040c2LLa Paz000018China2#CN.MA0c2MAMacao00001ECapeVerde#CV.TF0c2TFTarrafal000016Mali#ML.KY0c2KYKayes00001BEurope2#EU.BY0c2BYBelarus00001BEurope2#EU.DE0c2DEGermany00001ALesotho#LS.MS0c2MSMaseru00001CLaos#LA.SV0c2SVSavannakhet000023Macedonia#MK.GP0c2GPGjorce Petrov000027Zimbabwe#ZW.MN0c2MNMatabeleland North00001ABurundi#BI.BR0c2BRBururi00001DRussia#RU.NZ0c2NZNizhegorod000016Laos#LA.BK0c2BKBokeo000024Denmark#0100c2RNRingkj&oslash;bing000018Kentucky#1610c2MOMason000018Florida#0890c2NANassau00001FMississippi#0710c2LALafayette00001FPennsylvania#0370c2COColumbia000019Arkansas#0610c2HWHoward00001EWestVirginia#0890c2SUSummers000012UK#0040c2WAWales000031France#0210c2PRProvence-Alpes-C&ocirc;te D'Azur00001AColorado#0690c2LRLarimer000019Montana#0390c2GNGranite00001CSouthDakota#1070c2POPotter000019Alabama#0850c2LOLowndes000017India#0130c2HAHaryana000013Utah#0210c2IRIron000017Texas#3170c2MATMartin00001COceania#0050c2FMMicronesia00001BLouisiana#0610c2LILincoln00001AGeorgia#1250c2GLGlascock00002BWorldwithCountries#2030c2KYCayman Islands000018Armenia#110c2ERYerevan000030CentralAmericawithCaribbeans#020c2CSCosta Rica000016Hungary#210c2TOTolna000018NewWorld#970c2BTBhutan000029USANorthEastRegion#330c2NHNew Hampshire000024WorldwithCountries#450c2CMCameroon000021Andorra#070c2ALAndorra la Vella000019Azerbaijan#400c2QZQazax000019Ukraine#220c2TPTernopil00001CLatvia#180c2LMLimba&#382;i000015Bolivia#050c2OOruro00002BFranceDepartment#FR.LG0c2LGLot et Garonne000025DenmarkRegion#DK.HS0c2HSHovenstaden00001FBurma#MM.RA0c2RARakhine State00001CBurundi#BI.CI0c2CICibitoke00001CLaos#LA.BL0c2BLBolikhamxai00001ADenmark#0110c2RORoskilde000021Virginia#6000c2FAFairfax (City)000017Ohio#0990c2MHMahoning000019Nebraska#0690c2GRGarden000019Tennessee#1590c2SMSmith00001AMaryland#0170c2CHCharles000022France#0220c2RHRh&ocirc;ne-Alpes000021SpainProvinces#0010c2ABAlbacete00001BOklahoma#1110c2OMOkmulgee000014Iowa#1630c2SCScott00001BWisconsin#0530c2JAJackson000015Texas#4990c2WODWood000020India#0140c2HPHimachal Pradesh00001DWashington#0130c2CLColumbia000018Asia#0380c2SGSingapore000016Indiana#1150c2OHOhio00001ANewYork#0870c2RORockland00001FNorthCarolina#1550c2RORobeson000018Virginia#0570c2ESEssex000019Georgia#3070c2WSWebster000016Kansas#1090c2LGLogan00001ESouthCarolina#0810c2SASaluda000017Oceania#0060c2NRNauru000018Illinois#1450c2PRPerry000017Missouri#0650c2DEDent00001DNorthDakota#0790c2RORolette000018Texas#1370c2EDWEdwards000026Denmark#0120c2SOS&oslash;nderjylland000018Kentucky#1630c2MDMeade00001AFlorida#0910c2OLOkaloosa00001BMississippi#0730c2LMLamar00001FPennsylvania#0390c2CWCrawford00001FArkansas#0630c2INIndependence00001DWestVirginia#0910c2TATaylor000020France#0230c2HNHaute-Normandie000025SpainProvinces#0020c2AL&Aacute;lava00001DColorado#0710c2LSLas Animas000016Montana#0410c2HIHill00001DSouthDakota#1090c2RORoberts000017Alabama#0870c2MAMacon000021India#0150c2JKJammu and Kashmir000018Asia#0390c2LKSri Lanka000013Utah#0230c2JUJuab000016Texas#3190c2MASMason00001DOceania#0070c2NZNew Zealand00001ELouisiana#0630c2LVLivingston000017Georgia#1270c2GYGlynn000024Germany#0010c2BABaden-Wuerttemberg000031CentralAmericawithCaribbeans#030c2ESEl Salvador000014Hungary#220c2VAVas000025EuropeRegion#010c2NRNorthern Region000018NewWorld#980c2BNBrunei00001CTurkey#430c2KUK&uuml;tahya000026USANorthEastRegion#340c2NJNew Jersey00003FDominicanRepublic#140c2MTMar&iacute;a Trinidad S&aacute;nchez000026WorldwithCountries#460c2CVCape Verde000015USA#MI0c2MIMichigan000016Sweden#050c2IGotland000023Andorra#080c2EEEscaldes-Engordany00001BAfghanistan#130c2KABKabul00001CAzerbaijan#410c2QOQobustan00001AUkraine#230c2VIVinnytsia000015Latvia#190c2LULudza000015World#AF0c2AFAfrica000015Bolivia#060c2NPando000020SolomonIsland#SB.MK0c2MKMakira000022Thailand#TH.MS0c2MSMaha Sarakham000019Togo#TG.PL0c2PLPlateaux00001BCameroon#CM.CE0c2CECentre00001ANamibia#NA.KH0c2KHKhomas000019Nigeria#NG.LA0c2LALagos000017Angola#AO.UI0c2UIUige00002ACentralAmerica2#CE.KY0c2KYCayman Islands00001FMongolia#MN.UB0c2UBUlan Bator00001DMacedonia#MK.GR0c2GRGradsko000022Denmark#0130c2STStorstr&oslash;m000015Ohio#1010c2MRMarion00001BNebraska#0710c2GFGarfield00001BTennessee#1610c2STStewart00001DMaryland#0190c2DODorchester000021SpainProvinces#0030c2AIAlicante000018Oklahoma#1130c2OSOsage000015Iowa#1650c2SHShelby00001DWisconsin#0550c2JEJefferson000017Texas#5010c2YOAYoakum000019India#0160c2JHJharkhand00001CWashington#0150c2COCowlitz000018Indiana#1170c2OROrange00001ENewYork#0890c2SLSt. Lawrence000022NorthCarolina#1570c2RCRockingham00001AVirginia#0590c2FIFairfax000019Georgia#3090c2WEWheeler000015Kansas#1110c2LYLyon000023SouthCarolina#0830c2SPSpartanburg000017Oceania#0080c2PWPalau000018Illinois#1470c2PIPiatt00001AMissouri#0670c2DODouglas000018Germany#0020c2BYBayern00001DNorthDakota#0810c2SASargent000016Texas#1390c2ELIEllis00003BPrinceEdwardIsland#CA.PE.PC0c2PCPoints East Coastal Drive00002FCentralAmericawithCaribbeans#040c2GTGuatemala000020Hungary#230c2VEVeszpr&eacute;m000025EuropeRegion#020c2SRSouthern Region000021NewWorld#990c2MMBurma (Myanmar)000017Turkey#440c2MLMalatya000027DominicanRepublic#150c2MCMonte Cristi000034WorldwithCountries#470c2CPCentral African Republic000016Sweden#060c2NHalland00001CAfghanistan#140c2KAPKapisa000018Azerbaijan#420c2QBQuba000016Ukraine#240c2VOVolyn000016Latvia#200c2MAMadona00001DBolivia#070c2PPotos&iacute;000024PolandCounties#PL.OP.OM0c2OOMOpole000026MarshallIsland#MH.MH.RL0c2RLRongelap000021SolomonIsland#SB.ML0c2MLMalaita00001BChina2#CN.LN0c2LNLiaoning00001CAlgeria#DZ.GR0c2GRGhardaia000018Liberia#LR.LF0c2LFLofa000025Sudan#SD.GZ0c2GZAl Jazirah (Gezira)000017Yemen#YE.AB0c2ABAbyan000023Burundi#BI.BU0c2BUBujumbura Rural000031Guinea#GN.NZ0c2NZNz&eacute;r&eacute;kor&eacute;000017Denmark#0140c2VEVejle00001AKentucky#1650c2MEMenifee00001CFlorida#0930c2OKOkeechobee000020Mississippi#0750c2LULauderdale000021Pennsylvania#0410c2CUCumberland000018Arkansas#0650c2IZIzard00001DWestVirginia#0930c2TUTucker000027SpainProvinces#0040c2AMAlmer&iacute;a00001AColorado#0730c2LILincoln00001BMontana#0430c2JEJefferson00001DSouthDakota#1110c2SASanborn000019Alabama#0890c2MDMadison000019India#0170c2KAKarnataka000019Asia#0410c2TJTajikistan00001EAlaska#1500c2KOKodiak Island000013Utah#0250c2KAKane00001ATexas#3210c2MAGMatagorda000022Oceania#0090c2PGPapua New Guinea00001BLouisiana#0650c2MAMadison000018Georgia#1290c2GOGordon000018Germany#0030c2BEBerlin00002ECentralAmericawithCaribbeans#050c2HOHonduras000015Hungary#240c2ZAZala000024EuropeRegion#030c2WRWestern Region000016Turkey#450c2MNManisa000024USANorthEastRegion#360c2NYNew York000025DominicanRepublic#160c2PNPedernales000020WorldwithCountries#480c2TDChad00001CSweden#070c2ZJ&auml;mtland000020Azerbaijan#430c2QDQubadl&#305;00001CUkraine#250c2ZKZakarpattia000014Latvia#210c2OGOgre00001ABolivia#080c2SSanta Cruz00001EThailand#TH.NK0c2NKNong Khai00001FCambodia#KH.SR0c2SRSvay Rieng00001AEurope2#EU.CS0c2CSSerbia000020Macedonia#MK.ZK0c2ZKZelenikovo000017Yemen#YE.SD0c2SDSadah00001DSamoa #WS.SA0c2SASatupaitea00001EMacedonia#MK.GT0c2GTGostivar00001ESerbia#RS.SC0c2SCNorth Backa00001ENorthDakota#0830c2SHSheridan000018Texas#1410c2ELPEl Paso000024Denmark#0150c2VSVestsj&aelig;lland000015Ohio#1030c2MEMedina000019Nebraska#0730c2GOGosper00001AMinnesota#0010c2AIAitkin00001FConnecticut#0010c2FAFairfield00001CTennessee#1630c2SLSullivan00001CMaryland#0210c2FRFrederick000021SpainProvinces#0050c2ASAsturias000019Oklahoma#1150c2OTOttawa000014Iowa#1670c2SISioux00001AWisconsin#0570c2JUJuneau000016Texas#5030c2YOUYoung000016India#0180c2KEKerala00001CWashington#0170c2DODouglas000017Asia#0420c2THThailand000016Indiana#1190c2OWOwen00001ANewYork#0910c2SASaratoga00001DNorthCarolina#1590c2RWRowan00001BVirginia#0610c2FUFauquier000017Georgia#3110c2WTWhite00001AKansas#1130c2MPMcpherson00001ESouthCarolina#0850c2SUSumter000017Oceania#0100c2WSSamoa000017Illinois#1490c2PKPike00001AMissouri#0690c2DUDunklin00001DGermany#0040c2BRBrandenburg000027MadagascarRegions#MG.TL.ME0c2MEMenabe00002FMadagascarRegions#MG.AV.VA0c2VAVakinankaratra00002FCentralAmericawithCaribbeans#060c2NUNicaragua000024EuropeRegion#040c2EREastern Region000022Turkey#460c2KMKahramanmara&#351;000023WorldwithCountries#490c2KMComoros000022Sweden#080c2FJ&ouml;nk&ouml;ping000019Azerbaijan#440c2QRQusar00001BUkraine#260c2ZPZaporizhia00001BLatvia#220c2PRPrei&#316;i000016Bolivia#090c2TTarija000022SierraLeone#SL.SO.MO0c2MOMoyamba000027FrenchGuiana#GF.SL.GS0c2GSGrand Santi000033PolandCounties#PL.LD.PM0c2LPMPiotrkow Trybunalski000017Samoa #WS.AA0c2AAAana00002ABrazilRegion#BR.SE0c2SESouth East Region00001ATuvalu#TV.NA0c2NANanumea000018Nigeria#NG.KN0c2KNKano000018Mongolia#MN.TO0c2TOTov000027Zimbabwe#ZW.MS0c2MSMatabeleland South000020Serbia#RS.SD0c2SDCentral Banat000019Serbia#RS.RN0c2RNRasina000016Yemen#YE.AD0c2ADAdan000019Uganda#UG.IN0c2INIganga000018Germany#0050c2BMBremen000018Denmark#0160c2VIViborg000019Kentucky#1670c2MCMercer000018Florida#0950c2OROrange00001EMississippi#0770c2LWLawrence00001EPennsylvania#0430c2DADauphin00001AArkansas#0670c2JAJackson00001CWestVirginia#0950c2TYTyler00001ESpainProvinces#0060c2AVAvila000018Colorado#0750c2LOLogan00001EMontana#0450c2JBJudith Basin00001DSouthDakota#1130c2SHShannon000019Alabama#0910c2MRMarengo00001BIndia#0190c2LALakshadweep000016Utah#0270c2MIMillard000019Texas#3230c2MAVMaverick000021Oceania#0110c2SBSolomon Islands00001DLouisiana#0670c2MOMorehouse000017Georgia#1310c2GRGrady00002CCentralAmericawithCaribbeans#070c2PMPanama000024EuropeRegion#050c2CRCentral Region000027DominicanRepublic#180c2PPPuerto Plata000029WorldwithCountries#500c2CICote d Ivoire00001BUSA#NC0c2NCNorth Carolina000015Sweden#090c2HKalmar00001CAfghanistan#170c2LOWLowgar00001FAzerbaijan#450c2STSaatl&#305;000019Ukraine#270c2ZTZhytomyr00001CLatvia#230c2RER&#275;zekne000021SierraLeone#SL.EA.KE0c2KEKenema000025FranceDepartment#FR.MB0c2MBMorbihan000020Cambodia#KH.ST0c2STStung Treng000021CapeVerde#CV.SV0c2SVSao Vicente00001CSriLanka#LK.KE0c2KEKegalle000018Nigeria#NG.KO0c2KOKogi00001BEurope2#EU.DK0c2DKDenmark000022BurkinaFaso#BF.KJ0c2KJKomondjari00001FMacedonia#MK.GV0c2GVGevgelija000017Nepal#NP.BH0c2BHBheri000020Mongolia#MN.BO0c2BOBayan Olgii000017Guinea#GN.PI0c2PIPita000019Germany#0060c2HAHamburg00001BNorthDakota#0850c2SISioux000016Texas#1430c2ERAErath000014Ohio#1050c2MIMeigs000018Nebraska#0750c2GTGrant000019Minnesota#0030c2ANAnoka00001EConnecticut#0030c2HAHartford00001ATennessee#1650c2SUSumner00001AMaryland#0230c2GAGarrett000020SpainProvinces#0070c2BABadajoz000019Oklahoma#1170c2PAPawnee000014Iowa#1690c2STStory00001BWisconsin#0590c2KEKenosha000017Texas#5050c2ZAPZapata00001EIndia#0200c2MPMadhya Pradesh00001AWashington#0190c2FEFerry00001BAsia#0440c2TMTurkmenistan000017Indiana#1210c2PAParke00001DNewYork#0930c2SCSchenectady000022NorthCarolina#1610c2RURutherford000018Virginia#0630c2FLFloyd00001BGeorgia#3130c2WHWhitfield000017Kansas#1150c2MNMarion00001DSouthCarolina#0870c2UNUnion000017Oceania#0120c2TOTonga000017Illinois#1510c2POPope00001BMissouri#0710c2FRFranklin00002ACentralAmericawithCaribbeans#080c2CUCuba00001ATurkey#480c2MGMu&#287;la000020USANorthEastRegion#390c2OHOhio000022DominicanRepublic#190c2SCSalcedo00003CWorldwithCountries#510c2CDDemocratic Republic of the Congo000016USA#MN0c2MNMinnesota000019USA#ND0c2NDNorth Dakota000017Sweden#100c2WDalarnas00001FAfghanistan#180c2NANNangarhar00001DAzerbaijan#460c2SBSabirabad000024Latvia#240c2REZR&#275;zekne (city)000024Paraguay#010c2AAAlto Paran&aacute;000023PolandCounties#PL.WP.PI0c2WPIPila00001ALaos#LA.CH0c2CHChampasak000021Thailand#TH.NN0c2NNNakhon Nayok00002AHungaryRegions#HU.CH0c2CHCentral Hungary000023Qatar#QA.JB0c2JBJariyan Al Batnah000018Germany#0070c2HEHessen00001BKentucky#1690c2MFMetcalfe000019Florida#0970c2OSOsceola00001BMississippi#0790c2LKLeake00001FPennsylvania#0450c2DLDelaware00001CArkansas#0690c2JEJefferson00001DWestVirginia#0970c2UPUpshur000021SpainProvinces#0080c2BLBaleares000017Colorado#0770c2MEMesa000016Montana#0470c2LALake00001BSouthDakota#1150c2SPSpink000018Alabama#0930c2MIMarion00001BIndia#0210c2MAMaharashtra000015Utah#0290c2MOMorgan000017Texas#3250c2MEDMedina000018Oceania#0130c2TVTuvalu000020Louisiana#0690c2NANatchitoches000018Georgia#1330c2GEGreene00002DCentralAmericawithCaribbeans#090c2BSBahamas000018Turkey#490c2MSMu&#351;000028DominicanRepublic#200c2SMSaman&aacute;000024WorldwithCountries#520c2DJDjibouti000015USA#MO0c2MOMissouri000015USA#NE0c2NENebraska00001CAfghanistan#190c2NIMNimruz000022Azerbaijan#470c2SK&#350;&#601;ki000019Latvia#250c2RIR&#299;ga000019Paraguay#020c2AMAmambay00001BEastTimor#TL.AL0c2ALAileu00001EEastTimor#TL.BB0c2BBBobonaro00001FThailand#TH.NO0c2NONonthaburi00001FSriLanka#LK.KG0c2KGKurunegala00001EKyrgyzstan#KG.GB0c2GBBishkek000029BurkinaFaso#BF.KL0c2KLKoulp&eacute;logo00001ERwanda#RW.KV0c2KVKigali City000019Yemen#YE.SH0c2SHShabwah00001FAngola#AO.CN0c2CNCuanza Norte00001DZimbabwe#ZW.MV0c2MVMasvingo000028Germany#0080c2MEMecklenburg-Vorpommern00001BNorthDakota#0870c2SLSlope000016Texas#1450c2FALFalls000015Ohio#1070c2MCMercer00001ANebraska#0770c2GEGreeley00001AMinnesota#0050c2BEBecker000020Connecticut#0050c2LILitchfield00001ATennessee#1670c2TITipton00001AMaryland#0250c2HAHarford000022SpainProvinces#0090c2BRBarcelona000018Oklahoma#1190c2PYPayne000013Iowa#1710c2TATama00001CWisconsin#0610c2KWKewaunee000017Texas#5070c2ZAVZavala000017India#0220c2MNManipur00001DWashington#0210c2FRFranklin000019Asia#0460c2UZUzbekistan000017Indiana#1230c2PEPerry00001BNewYork#0950c2SHSchoharie00001FNorthCarolina#1630c2SASampson00001BVirginia#0650c2FVFluvanna000018Georgia#3150c2WCWilcox000019Kansas#1170c2MSMarshall000024SouthCarolina#0890c2WIWilliamsburg000019Oceania#0140c2VUVanuatu00001AIllinois#1530c2PUPulaski00001CMissouri#0730c2GAGasconade000034CentralAmericawithCaribbeans#100c2KYCayman Islands00001DTurkey#500c2NVNev&#351;ehir000038DominicanRepublic#210c2SZS&aacute;nchez Ram&iacute;rez000021WorldwithCountries#530c2EGEgypt000018Sweden#120c2GKronoberg000029Azerbaijan#480c2SA&#350;&#601;ki (City)000021Latvia#260c2RIXR&#299;ga (city)000025MarshallIsland#MH.MH.RR0c2RRRongrik00001CEastTimor#TL.AM0c2AMAmbeno00001CEastTimor#TL.BC0c2BCBaucau000020FranceDepartment#FR.LO0c2LOLot000022Thailand#TH.NP0c2NPNakhon Pathom00001CKuwait#KW.AH0c2AHAl Ahmadi000024BurkinaFaso#BF.KM0c2KMKomo&eacute;000025Zimbabwe#ZW.MW0c2MWMashonaland West000028CentralAfricanRepublic#CF.AC0c2ACOuham00001FGermany#0090c2NINiedersachsen000019Kentucky#1710c2MNMonroe00001CFlorida#0990c2PBPalm beach000019Mississippi#0810c2LELee00001APennsylvania#0470c2ELElk00001AArkansas#0710c2JOJohnson00001CWestVirginia#0990c2WAWayne000020SpainProvinces#0100c2BIBizkaia00001AColorado#0790c2MIMineral000021Montana#0490c2LCLewis and Clark00001DSouthDakota#1170c2STStanley00001AAlabama#0950c2MSMarshall000019India#0230c2MEMeghalaya000016Asia#0470c2VNVietnam000014Utah#0310c2PIPiute000017Texas#3270c2MENMenard00001FOceania#0150c2NCNew Caledonia00001BLouisiana#0710c2OROrleans000022Virginia#7900c2SNStaunton (City)00001AGeorgia#1350c2GWGwinnett00002DCentralAmericawithCaribbeans#110c2JMJamaica000028USANorthEastRegion#420c2PAPennsylvania00002DWorldwithCountries#540c2GQEquatorial Guinea00001AAzerbaijan#490c2SLSalyan000016Latvia#270c2SASaldus000021Paraguay#040c2CGCaaguaz&uacute;00002ANovaScotia#CA.NS.ET0c2ETEvangeline Trail00001CEastTimor#TL.AN0c2ANAinaro00001BUganda#UG.IS0c2ISIsingiro000018Uganda#UG.JI0c2JIJinja000024CaymanIslands#KY.NS0c2NSNorth Side00001BEthiopia#ET.OR0c2OROromia000020CapeVerde#CV.SZ0c2SZSanta Cruz00001CTuvalu#TV.NF0c2NFNukufetau000028Eritrea#ER.DK0c2DKDebubawi Keyih Bahri000016Mali#ML.MO0c2MOMopti00001BPanama#PA.VR0c2VRVeraguas00001BEurope2#EU.EE0c2EEEstonia00001AEurope2#EU.CY0c2CYCyprus000030BurkinaFaso#BF.KN0c2KNK&eacute;n&eacute;dougou000030CentralAfricanRepublic#CF.SE0c2SESangha-Mbaere000014Chad#TD.LC0c2LCLac000018Serbia#RS.RS0c2RSRaska000025Germany#0100c2NONordrhein-Westfalen00001BNorthDakota#0890c2STStark000017Texas#1470c2FANFannin000026Virginia#6100c2FCFalls Church (City)000014Ohio#1090c2MMMiami000017Nebraska#0790c2HAHall00001CMinnesota#0070c2BLBeltrami00001FConnecticut#0070c2MIMiddlesex000019Michigan#0010c2ALAlcona00001DTennessee#1690c2TRTrousdale000019Maryland#0270c2HOHoward00001FSpainProvinces#0110c2BUBurgos00001COklahoma#1210c2PIPittsburg000015Iowa#1730c2TYTaylor00001DWisconsin#0630c2LCLa Crosse000017India#0240c2MIMizoram00001DWashington#0230c2GFGarfield000016Indiana#1250c2PIPike00001ANewYork#0970c2SUSchuyler000020NorthCarolina#1650c2SCScotland00001BVirginia#0670c2FKFranklin000018Georgia#3170c2WLWilkes000016Kansas#1190c2MEMeade00001CSouthCarolina#0910c2YOYork000019Illinois#1550c2PTPutnam000019Missouri#0750c2GNGentry00002BCentralAmericawithCaribbeans#120c2HTHaiti000019Estonia#010c2HAHarjumaa000014Turkey#520c2OROrdu000023DominicanRepublic#230c2JUSan Juan000023WorldwithCountries#550c2EREritrea00001AUSA#NH0c2NHNew Hampshire00001ASweden#140c2BDNorrbotten000024Azerbaijan#500c2SI&#350;amax&#305;000015Latvia#280c2TATalsi000020Paraguay#050c2CZCaazap&aacute;000025PolandCounties#PL.WP.PM0c2WPMPoznan00002BMarshallIsland#MH.MH.AI0c2AIAilinglapalap00001EVietnam#VN.QB0c2QBQuang Binh000026Thailand#TH.NR0c2NRNakhon Ratchasima00001BPakistan#PK.PB0c2PBPunjab00001CTuvalu#TV.NG0c2NGNanumanga00001BNigeria#NG.KT0c2KTKatsina000022Europe2#EU.CZ0c2CZCzech Republic000025BurkinaFaso#BF.LE0c2LEL&eacute;raba000022Burma#MM.SA0c2SASagaing Division00001DMacedonia#MK.ZR0c2ZRZrnovci000019Panama#PA.DR0c2DRDarien000017Yemen#YE.TA0c2TATaizz000021Germany#0110c2RHRheinland-Pfalz00001DKentucky#1730c2MYMontgomery000017Florida#1010c2PAPasco00001DMississippi#0830c2LFLeflore00001BPennsylvania#0490c2ERErie00001CArkansas#0730c2LALafayette00001EWestVirginia#1010c2WEWebster000027SpainProvinces#0120c2CAC&aacute;ceres000019Colorado#0810c2MOMoffat000019Montana#0510c2LBLiberty00001BSouthDakota#1190c2SUSully000018Alabama#0970c2MOMobile000018India#0250c2NANagaland000015Asia#0490c2TWTaiwan000013Utah#0330c2RIRich000018Texas#3290c2MIDMidland00001CLouisiana#0730c2OUOuachita00001BGeorgia#1370c2HAHabersham000038CentralAmericawithCaribbeans#130c2DODominican Republic000018Estonia#020c2HIHiiumaa000014Turkey#530c2RIRize000028USANorthEastRegion#440c2RIRhode Island000036DominicanRepublic#240c2PMSan Pedro de Macor&iacute;s000024WorldwithCountries#560c2ETEthiopia000018USA#MS0c2MSMississippi00001ASweden#150c2T&Ouml;rebro00001EAfghanistan#230c2KANKandahar000024Azerbaijan#510c2SM&#350;&#601;mkir000016Latvia#290c2TUTukums000019Paraguay#060c2CECentral000024MarshallIsland#MH.MH.TA0c2TATaongi00001CRussia#RU.PR0c2PRPrimorsky00001BMongolia#MN.BU0c2BUBulgan000020Mongolia#MN.DA0c2DADarkhan Uul000019Uganda#UG.KA0c2KAKabale00001FBotswana#BW.SE0c2SESouth East000022FranceDepartment#FR.LR0c2LRLoire000023FranceDepartment#FR.MH0c2MHManche000021Thailand#TH.NS0c2NSNakhon Sawan000028Pakistan#PK.NW0c2NWNorth West Frontier000021BurkinaFaso#BF.KP0c2KPKompienga00003ATajikistan#TJ.RR0c2RRRegions of Republican Subordination00001AYemen#YE.BA0c2BAAl Bayda000019Missouri#0770c2GEGreene00001AGermany#0120c2SASaarland00001CNorthDakota#0910c2SESteele000018Texas#1490c2FAYFayette000015Ohio#1110c2MOMonroe00001BNebraska#0810c2HMHamilton00001AMinnesota#0090c2BNBenton00001FConnecticut#0090c2NHNew Haven000018Michigan#0030c2AGAlger00001ATennessee#1710c2UIUnicoi000017Maryland#0290c2KEKent000025SpainProvinces#0130c2CDC&aacute;diz00001BOklahoma#1230c2POPontotoc000014Iowa#1750c2UNUnion00001DWisconsin#0650c2LALafayette000016India#0260c2OROrissa00001AWashington#0250c2GAGrant000018Asia#0500c2HKHong Kong000018Indiana#1270c2POPorter000018NewYork#0990c2SESeneca00001ENorthCarolina#1670c2STStanly00001CVirginia#0690c2FDFrederick00001BGeorgia#3190c2WIWilkinson000016Kansas#1210c2MIMiami00001BIllinois#1570c2RARandolph000035NewfoundlandandLabrador#CA.NF.WS0c2WSWestern Region000031CentralAmericawithCaribbeans#140c2PRPuerto Rico00001CEstonia#030c2IVIda-Virumaa000017Turkey#540c2SKSakarya000023DominicanRepublic#250c2STSantiago000021WorldwithCountries#570c2GAGabon000014USA#MT0c2MTMontana000017USA#NJ0c2NJNew Jersey000025Sweden#160c2E&Ouml;sterg&ouml;tland00001CAfghanistan#240c2KDZKondoz000019Azerbaijan#520c2SXSamux000015Latvia#300c2VKValka000023Paraguay#070c2CNConcepci&oacute;n000023SierraLeone#SL.EA.KL0c2KLKailahun000018Russia#RU.PS0c2PSPskov00001BLibya#LY.QB0c2QBAl Qubbah000028Thailand#TH.NT0c2NTNakhon Si Thammarat00001CTuvalu#TV.NI0c2NINiulakita000020SriLanka#LK.KL0c2KLKilinochchi00001BCapeVerde#CV.BR0c2BRBrava00001DAngola#AO.CS0c2CSCuanza Sul000016Georgia#1390c2HLHall000019Germany#0130c2SCSachsen000019Kentucky#1750c2MAMorgan00001AFlorida#1030c2PLPinellas00001DMississippi#0850c2LNLincoln00001EPennsylvania#0510c2FAFayette00001BArkansas#0750c2LWLawrence00001DWestVirginia#1030c2WTWetzel000022SpainProvinces#0140c2CNCantabria00001CColorado#0830c2MNMontezuma000019Montana#0530c2LILincoln00001ASouthDakota#1210c2TOTodd000018Alabama#0990c2MNMonroe000014Asia#0510c2MOMacau000018Utah#0350c2SLSalt Lake000016Texas#3310c2MILMilam00001FLouisiana#0750c2PLPlaquemines000035NewfoundlandandLabrador#CA.NF.ES0c2ESEastern Region000038CentralAmericawithCaribbeans#150c2KNSt.Kitts and Nevis00001EEstonia#040c2JRJ&auml;rvamaa000016Turkey#550c2SSSamsun000034DominicanRepublic#260c2SRSantiago Rodr&iacute;guez000021WorldwithCountries#580c2GHGhana000025Azerbaijan#530c2SYSiy&#601;z&#601;n000018Latvia#310c2VMValmiera00001CParaguay#080c2CRCordillera000017Serbia#RS.SM0c2SMSrem000017Yemen#YE.AM0c2AMAmran000023FranceDepartment#FR.LT0c2LTLoiret000019Nigeria#NG.KW0c2KWKwara000022BurkinaFaso#BF.KR0c2KRKouritenga00001BLiberia#LR.MG0c2MGMargibi00001BBhutan#BT.LH0c2LHLhuntshi000016Yemen#YE.SN0c2SNSana000019Sudan#SD.JG0c2JGJungoli00001BIllinois#1590c2RIRichland000019Missouri#0790c2GRGrundy000020Germany#0140c2SHSachsen-Anhalt00001ENorthDakota#0930c2SUStutsman000017Texas#1510c2FISFisher000019Ohio#1130c2MGMontgomery000019Nebraska#0830c2HRHarlan00001DMinnesota#0110c2BSBig Stone000020Connecticut#0110c2NLNew London00001AMichigan#0050c2AEAllegan000019Tennessee#1730c2UNUnion00001DMaryland#0310c2MOMontgomery000029SpainProvinces#0150c2CSCastell&oacute;n00001FOklahoma#1250c2PWPottawatomie000018Iowa#1770c2VBVan Buren00001CWisconsin#0670c2LNLanglade000016India#0280c2PUPunjab000021Washington#0270c2GRGrays Harbor000017Indiana#1290c2PSPosey000019NewYork#1010c2STSteuben00001ENorthCarolina#1690c2SOStokes000018Virginia#0710c2GIGiles000017Georgia#3210c2WOWorth000018Africa#0010c2DZAlgeria000019Kansas#1230c2MCMitchell00002DSaskatchewan#CA.SK.SW0c2SWSouth West Region00002DCentralAmericawithCaribbeans#160c2AGAntigua000021Estonia#050c2JNJ&otilde;gevamaa000015Romania#010c2ABAlba000023DominicanRepublic#270c2VAValverde000022WorldwithCountries#590c2GNGuinea000020Sweden#180c2DS&ouml;dermanland00001CAfghanistan#260c2TAKTakhar000021Azerbaijan#540c2SQSumqay&#305;t000019Latvia#320c2VEVentspils000013World#AS0c2ASAsia00001FSierraLeone#SL.EA.KN0c2KNKono00002CDistrictofColumbia#US.DC.NW0c2NWNorth West000028PolandCounties#PL.MZ.CI0c2MCICieckanow00001ESerbia#RS.SN0c2SNNorth Banat00001BMongolia#MN.DD0c2DDDornod000026CoteDivoire#CI.HT0c2HTHaut-Sassandra00001EUganda#UG.KD0c2KDKaberamaido000025BrazilRegion#BR.SO0c2SOSouth Region00001ANamibia#NA.KU0c2KUKunene00001DBurkinaFaso#BF.KS0c2KSKossi000019Angola#AO.CU0c2CUCunene000019Georgia#1410c2HNHancock000024Germany#0150c2SSSchleswig-Holstein00001DKentucky#1770c2MBMuhlenberg000016Florida#1050c2POPolk00001DMississippi#0870c2LDLowndes00001DPennsylvania#0530c2FOForest000016Arkansas#0770c2LELee00001BWestVirginia#1050c2WIWirt00001ESpainProvinces#0160c2CECeuta00001BColorado#0850c2MTMontrose000018Montana#0550c2MCMcCone00001BSouthDakota#1230c2TRTripp00001CAlabama#1010c2MTMontgomery000019India#0290c2RARajasthan000017Africa#0020c2AOAngola000017Utah#0370c2SJSan Juan000016Texas#3330c2MISMills000021Louisiana#0770c2PCPointe Coupee000018Arizona#0010c2APApache00002ECentralAmericawithCaribbeans#170c2DMDominica000015Romania#020c2ARArad000015Turkey#570c2SPSinop000023DominicanRepublic#280c2SEEl Seibo000029WorldwithCountries#600c2GWGuinea-Bissau000017USA#NM0c2NMNew Mexico00001CAfghanistan#270c2WARWardak000022Azerbaijan#550c2SU&#350;u&#351;a000021Latvia#330c2VENVentspils (city)00001FParaguay#100c2GUGuair&aacute;000022FrenchGuiana#GF.CY.KR0c2KRKourou00001BUganda#UG.KE0c2KEKamwenge000020Samoa #WS.AL0c2ALAiga-i-le-Tai00002BFranceDepartment#FR.ML0c2MLMaine et Loire00001EVietnam#VN.QG0c2QGQuang Ngai00001FKyrgyzstan#KG.YK0c2YKYsyk Kol00001FThailand#TH.NW0c2NWNarathiwat00001CThailand#TH.PC0c2PCPhichit00001DTuvalu#TV.NL0c2NLNukulaelae000019Panama#PA.EM0c2EMEmbera000025CentralAmerica2#CE.NI0c2NINicaragua00001DMacedonia#MK.IL0c2ILIlinden00001EIllinois#1610c2RORock Island00001BMissouri#0810c2HAHarrison00001CGermany#0160c2THThueringen00001CNorthDakota#0950c2TOTowner000016Texas#1530c2FLOFloyd000015Ohio#1150c2MNMorgan000018Nebraska#0850c2HYHayes00001EMinnesota#0130c2BUBlue Earth00001DConnecticut#0130c2TOTolland000019Michigan#0070c2APAlpena00001DTennessee#1750c2VBVan Buren000022Maryland#0330c2PGPrince George's000024SpainProvinces#0170c2CRCiudad Real00001DOklahoma#1270c2PUPushmataha000016Iowa#1790c2WAWapello00001BWisconsin#0690c2LILincoln000016India#0300c2SISikkim00001BWashington#0290c2ISIsland000019Indiana#1310c2PUPulaski000019NewYork#1030c2SFSuffolk00001DNorthCarolina#1710c2SUSurry00001DVirginia#0730c2GLGloucester000016Africa#0030c2BJBenin00001BKansas#1250c2MGMontgomery00002ECentralAmericawithCaribbeans#180c2LCSt.Lucia000023Estonia#070c2LNL&auml;&auml;nemaa00001BRomania#030c2AGArge&#351;000015Turkey#580c2SVSivas000025DominicanRepublic#290c2HMHato Mayor000021WorldwithCountries#610c2KEKenya00001BAfghanistan#280c2ZABZabol000029Azerbaijan#560c2SS&#350;u&#351;a (City)000018World#AU0c2AUAustralia00001FParaguay#110c2ITItap&uacute;a000019Uganda#UG.KF0c2KFKotido000019Oman#OM.WU0c2WUAl Wusta00002FFranceDepartment#FR.MM0c2MMMeurthe et Moselle000019Congo#CG.KO0c2KOKouilou00001ACongo#CG.LE0c2LELekoumou00001FCapeVerde#CV.BV0c2BVBoa Vista00001AAlgeria#DZ.IL0c2ILIllizi00001EUzbekistan#UZ.FA0c2FAFargona000023Laos#LA.VI0c2VIVientiane Province000020Philippines#PH.GU0c2GUGuimaras00001AGeorgia#1430c2HRHaralson000019Kentucky#1790c2NENelson000018Florida#1070c2PNPutnam00001DMississippi#0890c2MAMadison00001FPennsylvania#0550c2FRFranklin00001AArkansas#0790c2LILincoln00001BWestVirginia#1070c2WOWood000027SpainProvinces#0180c2COC&oacute;rdoba000019Colorado#0870c2MGMorgan000019Montana#0570c2MAMadison00001CSouthDakota#1250c2TUTurner000018Alabama#1030c2MGMorgan00001AIndia#0310c2TNTamil Nadu000019Africa#0040c2BWBotswana000023Alaska#1640c2PLPeninsula and Lake000016Utah#0390c2SASanpete000019Texas#3350c2MITMitchell00001BLouisiana#0790c2RARapides000019Arizona#0030c2COCochise000028YukonTerritory#CA.YT.WH0c2WHWhitehorse000018Nicaragua#010c2BOBoaco000044CentralAmericawithCaribbeans#190c2VCSt.Vincent and the Grenadlines000028Estonia#080c2LVL&auml;&auml;ne-Virumaa00001BRomania#040c2BCBac&#259;u00001DTurkey#590c2TGTekirda&#287;000023USANorthEastRegion#500c2VTVermont00001BAustria#010c2BUBurgenland000022DominicanRepublic#300c2VELa Vega000023WorldwithCountries#620c2LSLesotho000016Sweden#210c2CUppsala00001DAfghanistan#290c2PKAPaktika000024Azerbaijan#570c2TAT&#601;rt&#601;r00001AParaguay#120c2MIMisiones00001BTanzania#TZ.DO0c2DODodoma00001EMongolia#MN.DG0c2DGDornogovi000019Uganda#UG.KG0c2KGKiboga000020Thailand#TH.PE0c2PEPhetchaburi00001ASomalia#SO.SA0c2SASanaag00001CBurma#MM.SH0c2SHShan State000020Philippines#PH.ZM0c2ZMZambales000018Chad#TD.MA0c2MAMandoul000019Sudan#SD.KA0c2KAKassala000034CentralAfricanRepublic#CF.BB0c2BBBamingui-Bangoran00001FPhilippines#PH.IB0c2IBIsabela00001CIllinois#1630c2SCSt. Clair000018Missouri#0830c2HEHenry00001CNorthDakota#0970c2TRTraill000016Texas#1550c2FOAFoard000015Ohio#1170c2MWMorrow00001CNebraska#0870c2HTHitchcock000019Minnesota#0150c2BWBrown00001DConnecticut#0150c2WIWindham000019Michigan#0090c2ANAntrim00001ATennessee#1770c2WRWarren00001FMaryland#0350c2QAQueen Anne's00001FSpainProvinces#0190c2CUCuenca00001EOklahoma#1290c2RMRoger Mills000015Iowa#1810c2WRWarren00001DWisconsin#0710c2MAManitowoc000017India#0320c2TRTripura00001EWashington#0310c2JEJefferson000018Indiana#1330c2PTPutnam00001ANewYork#1050c2SVSullivan00001DNorthCarolina#1730c2SWSwain00001CVirginia#0750c2GOGoochland00001DAfrica#0050c2BFBurkina Faso000017Kansas#1270c2MRMorris000019Nicaragua#020c2CACarazo00002ECentralAmericawithCaribbeans#200c2BBBarbados000016Romania#050c2BHBihor000015Turkey#600c2TTTokat000024USANorthEastRegion#510c2VAVirginia00001DAustria#020c2KAK&auml;rnten000030DominicanRepublic#310c2MNMonse&ntilde;or Nouel000023WorldwithCountries#630c2LILiberia00001CSweden#220c2SV&auml;rmland00001BAfghanistan#300c2BALBalkh000019Azerbaijan#580c2TOTovuz000028Paraguay#130c2NE&Ntilde;eembuc&uacute;00001BUganda#UG.KH0c2KHKiruhura00001BSerbia#RS.BG0c2BGBelgrade000024FranceDepartment#FR.MO0c2MOMoselle00001BVietnam#VN.PT0c2PTPhu Tho00002FHungaryRegions#HU.CT0c2CTCentral Transdanubia000027Europe2#EU.FD0c2FDFaroe Islands (Den)000028BurkinaFaso#BF.KW0c2KWKourw&eacute;ogo00002BPhilippines#PH.ZN0c2ZNZamboanga del Norte00001DLouisiana#0810c2RERed River00001AArizona#0050c2CCCoconino000021Virginia#8000c2SFSuffolk (City)000018Georgia#1450c2HIHarris00001BKentucky#1810c2NINicholas00001BFlorida#1090c2SJSt. Johns00001CMississippi#0910c2MRMarion00001CPuertoRico#1010c2MVMorovis00001DPennsylvania#0570c2FUFulton00001FArkansas#0810c2LRLittle River00001EWestVirginia#1090c2WYWyoming000029SpainProvinces#0200c2GUGuip&uacute;zcoa000018Colorado#0890c2OTOtero000019Montana#0590c2MEMeagher00001BSouthDakota#1270c2UNUnion000017Alabama#1050c2PEPerry00001DIndia#0330c2UPUttar Pradesh000014Iowa#0010c2ADAdair000018Africa#0060c2BIBurundi000015Utah#0410c2SESevier000019Texas#3370c2MONMontague000019Cyprus#010c2FAFamagusta00001DNicaragua#030c2CIChinandega00002ACzechRepublic#780c2JMJihomoravsk&yacute;00002DCentralAmericawithCaribbeans#210c2GDGrenada00002FRomania#060c2BNBistri&#355;a-N&#259;s&#259;ud000017Turkey#610c2TBTrabzon00001EDominica#020c2ANSaint Andrew000026Austria#030c2NINieder&ouml;sterreich000026DominicanRepublic#320c2MPMonte Plata000021WorldwithCountries#640c2LRLibya000021Sweden#230c2ACV&auml;sterbotten00001DAfghanistan#310c2JOWJowzjan000018Azerbaijan#590c2UCUcar00001EAntigua#030c2SGESaint George000022MarshallIsland#MH.MH.AR0c2ARArno000018Russia#RU.PZ0c2PZPenza000019Uganda#UG.KI0c2KIKibale000023FranceDepartment#FR.LZ0c2LZLozere00001DThailand#TH.PG0c2PGPhangnga00002ATrinidadandTobago#TT.SA0c2SASaint Andrew000019Eritrea#ER.DU0c2DUDebub000019Illinois#1650c2SASaline00001AMissouri#0850c2HKHickory00001BNorthDakota#0990c2WAWalsh00001ATexas#1570c2FBEFort Bend000022Virginia#6200c2FRFranklin (City)000018Ohio#1190c2MKMuskingum000017Nebraska#0890c2HOHolt00001BMinnesota#0170c2CACarlton000018Kentucky#0010c2ADAdair000019Michigan#0110c2ARArenac00001ETennessee#1790c2WSWashington00001DMaryland#0370c2SMSt. Mary's00001FSpainProvinces#0210c2GIGirona000019Oklahoma#1310c2RORogers000019Iowa#1830c2WSWashington00001CWisconsin#0730c2MRMarathon00001BIndia#0340c2UTUttaranchal000019Washington#0330c2KGKing00001AIndiana#1350c2RARandolph000017NewYork#1070c2TITioga000024NorthCarolina#1750c2TRTransylvania00001AVirginia#0770c2GRGrayson000019Africa#0070c2CMCameroon000017Kansas#1290c2MTMorton000017Cyprus#020c2KYKyrenia00001CNicaragua#040c2COChontales00002CCzechRepublic#790c2JCJiho&#269;esk&yacute;00003BCentralAmericawithCaribbeans#220c2TTTrinidad &amp; Tobago00001EEstonia#110c2PRP&auml;rnumaa00001ERomania#070c2BTBoto&#351;ani000017Turkey#620c2TCTunceli00001DDominica#030c2DASaint David000024Austria#040c2OBOber&ouml;sterreich00002FDominicanRepublic#330c2CRSan Crist&oacute;bal000026WorldwithCountries#650c2MSMadagascar000011USA#OH0c2OHOhio000022Sweden#240c2YV&auml;sternorrland00001EAfghanistan#320c2SAMSamangan000021Azerbaijan#600c2XZXa&ccedil;maz00001CAntigua#040c2SJOSaint John000022Paraguay#150c2PGParaguar&iacute;000024FrenchGuiana#GF.CY.MC0c2MCMacouria00001BUganda#UG.KJ0c2KJKyenjojo000019Tunisia#TN.GB0c2GBGabes00001FThailand#TH.PH0c2PHPhetchabun000018Togo#TG.SA0c2SASavanes00001DSriLanka#LK.KT0c2KTKalutara000025Somalia#SO.SD0c2SDShabeellaha Dhexe00001ACongo#CG.LI0c2LILikouala00001EBurkinaFaso#BF.LO0c2LOLoroum000034Morocco#MA.LB0c2LBLaayoune Boujdour Sakia El Hamra000020Macedonia#MK.JG0c2JGJegunovtse00001CLouisiana#0830c2RIRichland000016Arizona#0070c2GIGila000016Georgia#1470c2HTHart000017Kentucky#1830c2OHOhio00001BFlorida#1110c2SLSt. Lucie00001EMississippi#0930c2MSMarshall000021PuertoRico#1030c2NGNag&uuml;abo00001DPennsylvania#0590c2GRGreene000018Arkansas#0830c2LOLogan000020SpainProvinces#0220c2GRGranada000018Colorado#0910c2OUOuray000019Montana#0610c2MIMineral00001ESouthDakota#1290c2WAWalworth000019Alabama#1070c2PIPickens00001BIndia#0350c2WBWest Bengal000014Iowa#0030c2AAAdams00001BAfrica#0080c2CVCape Verde000015Utah#0430c2SUSummit00001BTexas#3390c2MOTMontgomery00003EYukonTerritory#CA.YT.WL0c2WLWatson Lake &amp; Southern Lakes000017Cyprus#030c2LALarnaca000020Nicaragua#050c2ESEstel&iacute;000024CzechRepublic#800c2VYVyso&#269;ina000020Estonia#120c2PLP&otilde;lvamaa00001CRomania#080c2BRBr&#259;ila000023Turkey#630c2SU&#350;anl&#305;urfa00001EDominica#040c2GOSaint George000029USANorthEastRegion#540c2WVWest Virginia000019Austria#050c2SASalzburg00002CDominicanRepublic#340c2NCDistrito Nacional000022WorldwithCountries#660c2MWMalawi00001FSweden#250c2UV&auml;stmanland00001FAfghanistan#330c2SARSar-e Pol000021Azerbaijan#610c2XAXank&#601;ndi00001CAntigua#050c2SMASaint Mary000022Paraguay#160c2PHPresidente Hayes00001EPhilippines#PH.IF0c2IFIfugao000022Tanzania#TZ.DS0c2DSDar es Salaam00001BSerbia#RS.SU0c2SUSumadija00001AUganda#UG.KK0c2KKKatakwi00001ABenin#BJ.LI0c2LILittoral00001DBotswana#BW.SO0c2SOSouthern00001DChina2#CN.NM0c2NMNei Mongol000022FranceDepartment#FR.MR0c2MRMarne00001DVietnam#VN.QM0c2QMQuang Nam00001CThailand#TH.PI0c2PIPattani00001DNigeria#NG.NA0c2NANassarawa00001FLiberia#LR.MO0c2MOMontserrado000022Chad#TD.LO0c2LOLogone Occidental00001FChad#TD.ME0c2MEMayo-Kebbi Est000018Mongolia#MN.UV0c2UVUvs00001FBurma#MM.BA0c2BABago Division00001BIllinois#1670c2SNSangamon000017Missouri#0870c2HLHolt00001ANorthDakota#1010c2WRWard000019Texas#1590c2FRAFranklin000014Ohio#1210c2NONoble000019Nebraska#0910c2HKHooker00001AMinnesota#0190c2CRCarver000018Kentucky#0030c2ALAllen000019Michigan#0130c2BABaraga000019Tennessee#1810c2WAWayne00001BMaryland#0390c2SOSomerset000024SpainProvinces#0230c2GAGuadalajara00001BOklahoma#1330c2SESeminole000014Iowa#1850c2WYWayne00001DWisconsin#0750c2MIMarinette00001BWashington#0350c2KTKitsap000018Indiana#1370c2RIRipley00001ANewYork#1090c2TOTompkins00001FNorthCarolina#1770c2TYTyrrell000019Virginia#0790c2GEGreene000029Africa#0090c2CRCentral African Republic000017Kansas#1310c2NMNemaha000023USASouthEastRegion#010c2ALAlabama000017Cyprus#040c2NINicosia00001ANicaragua#060c2GRGranada000029CzechRepublic#810c2KAKarlovarsk&yacute;000019Estonia#130c2RARaplamaa00001CRomania#090c2BVBra&#351;ov000019Turkey#640c2USU&#351;ak00001CDominica#050c2JNSaint John00001BAustria#060c2STSteiermark000022DominicanRepublic#350c2PVPeravia000020WorldwithCountries#670c2MLMali000019Sweden#260c2ABStockholm000029Iceland#030c2AR&Aacute;rness&yacute;sla00001BAfghanistan#340c2KNRKonar00001AAzerbaijan#620c2XRXanlar00001CAntigua#060c2SPASaint Paul00001BParaguay#170c2SPSan Pedro000029CentralAfricanRepublic#CF.BG0c2BGBangui000022FranceDepartment#FR.MS0c2MSMeuse000023FranceDepartment#FR.NI0c2NINievre00001EVietnam#VN.QN0c2QNQuang Ninh000029TrinidadandTobago#TT.SD0c2SDSaint David00001AQatar#QA.KH0c2KHAl Khawr00001BSriLanka#LK.MB0c2MBMannar000021Mauritania#MR.NO0c2NONouakchott00001ALouisiana#0850c2SASabine000018Arizona#0090c2GRGraham000017Georgia#1490c2HEHeard000019Kentucky#1850c2OLOldham00001CFlorida#1130c2SRSanta rosa00001CMississippi#0950c2MOMonroe00001EPuertoRico#1050c2NRNaranjito000021Pennsylvania#0610c2HUHuntingdon000019Arkansas#0850c2LKLonoke00001FSpainProvinces#0240c2HUHuelva00001CTennessee#0010c2ANAnderson000017Colorado#0930c2PAPark00001AMontana#0630c2MSMissoula000016Alabama#1090c2PKPike00001ANevada#0010c2CHChurchill000018Iowa#0050c2ALAllamakee000015Africa#0100c2TDChad000022Alaska#1700c2MAMatanuska-Susitna000015Utah#0450c2TOTooele000016Texas#3410c2MORMoore000018Cyprus#050c2LILimassol00001BNicaragua#070c2JIJinotega00003BCzechRepublic#820c2KRKr&aacute;lov&eacute;hradeck&yacute;000019Estonia#140c2SASaaremaa00001ARomania#100c2BIBucharest000013Turkey#650c2VAVan00001EDominica#060c2JHSaint Joseph000016Austria#070c2TITirol000032DominicanRepublic#360c2JOSan Jos&eacute; de Ocoa000026WorldwithCountries#680c2MRMauritania000015USA#OK0c2OKOklahoma000019USA#PA0c2PAPennsylvania00001ASweden#270c2MSk&aring;ne000035Iceland#040c2ABAustur-Bar&eth;astrandars&yacute;sla00001DAfghanistan#350c2LAGLaghman000022Azerbaijan#630c2XIX&#305;z&#305;00001DAntigua#070c2SPESaint Peter00001BEurope2#SOME ISLANDS0c2000030NorthWestTerritories#CA.NT.AC0c2ACArctic Coast00002BNovaScotia#CA.NS.HD0c2HDHalifax Dartmouth00001AUganda#UG.KM0c2KMKampala000017Samoa #WS.AT0c2ATAtua00001BVietnam#VN.PY0c2PYPhu Yen000028Thailand#TH.PK0c2PKPrachuap Khiri Khan000019Tuvalu#TV.NT0c2NTNiutao00001BEurope2#EU.FI0c2FIFinland000019Europe2#EU.ES0c2ESSpain000029Philippines#PH.ZS0c2ZSZamboanga del Sur000017Kansas#1330c2NONeosho00001BIllinois#1690c2SHSchuyler000019Missouri#0890c2HWHoward00001BNorthDakota#1030c2WEWells00001ATexas#1610c2FRSFreestone000015Ohio#1230c2OTOttawa000019Nebraska#0930c2HWHoward000018Minnesota#0210c2CSCass00001BKentucky#0050c2ANAnderson000018Michigan#0150c2BRBarry00001BTennessee#1830c2WEWeakley000019Maryland#0410c2TATalbot00001FSpainProvinces#0250c2HEHuesca00001BOklahoma#1350c2SQSequoyah000016Iowa#1870c2WEWebster00001DWisconsin#0770c2MQMarquette00001DWashington#0370c2KIKittitas000016Indiana#1390c2RURush000018NewYork#1110c2ULUlster00001DNorthCarolina#1790c2UNUnion00001EVirginia#0810c2GVGreensville000018Africa#0110c2KMComoros00002BNewCaledonia#NC.SU.SA0c2SASarram&eacute;a000022Paraguay#190c2CYCanindey&uacute;000016Cyprus#060c2PAPaphos00001ENicaragua#080c2LELe&oacute;n000027CzechRepublic#830c2LILibereck&yacute;00001BRomania#110c2BZBuz&#259;u000016Turkey#660c2YZYozgat00001CDominica#070c2LUSaint Luke00001BAustria#080c2VOVorarlberg000028DominicanRepublic#370c2SDSanto Domingo000023WorldwithCountries#690c2MAMorocco000013USA#NV0c2NVNevada000028Sweden#280c2OV&auml;stra G&ouml;taland000034Iceland#050c2AHAustur-H&uacute;navatnss&yacute;sla00001CAfghanistan#360c2PIAPaktia00001FAzerbaijan#640c2XCXocal&#305;00001EAntigua#080c2SPHSaint Philip000020Nunavut#CA.NU.KT0c2KTKitikmeot00001ASudan#SD.KH0c2KHKhartoum00001EPhilippines#PH.II0c2IIIloilo000019Russia#RU.SA0c2SASamara00001CUganda#UG.KN0c2KNKalangala000019Tunisia#TN.GF0c2GFGafsa000020Thailand#TH.PL0c2PLPhatthalung000016Tuvalu#TV.NU0c2NUNui000025Somalia#SO.SH0c2SHShabeellaha Hoose00001FSenegal#SN.TC0c2TCTambacounda000019Algeria#DZ.JJ0c2JJJijel000020Chad#TD.LR0c2LRLogone Oriental000017Texas#3430c2MOIMorris00001FLouisiana#0870c2SBSt. Bernard00001AArizona#0110c2GEGreenlee000017Georgia#1510c2HYHenry000017Kentucky#1870c2OWOwen00001AFlorida#1150c2SSSarasota000020Mississippi#0970c2MTMontgomery00001DPuertoRico#1070c2OROrocovis00001EPennsylvania#0630c2INIndiana00001AArkansas#0870c2MAMadison000024SpainProvinces#0260c2JAJa&eacute;n000016Oregon#0010c2BABaker00001BTennessee#0030c2BDBedford00001DWisconsin#0780c2MNMenominee00001BColorado#0950c2PHPhillips00001DMontana#0650c2MUMusselshell00001AAlabama#1110c2RARandolph000016Nevada#0030c2CLClark000018Iowa#0070c2APAppanoose00001EAfrica#0120c2CICote d Ivoire000015Utah#0470c2UIUintah000019Nicaragua#090c2MDMadriz000027CzechRepublic#840c2OLOlomouck&yacute;000023Romania#120c2CSCara&#351;-Severin00001CDominica#080c2MASaint Mark000015Austria#090c2WIWien000026WorldwithCountries#700c2MZMozambique00002FIceland#060c2ASAustur-Skaftafellss&yacute;sla00001BAfghanistan#370c2KHOKhost000021Azerbaijan#650c2XDXocav&#601;nd000022MarshallIsland#MH.MH.TO0c2TOToke000027PolandCounties#PL.MZ.WA0c2MWAWarszawa000024MarshallIsland#MH.MH.BN0c2BNBikini00001EMacedonia#MK.KB0c2KBKarbinci00001DNepal#NP.DH0c2DHDhawalagiri00001ASerbia#RS.TO0c2TOToplica000027Tajikistan#TJ.BK0c2BKBadakhshoni Kuni00001CEastTimor#TL.BT0c2BTLautem000014Iran#IR.QM0c2QMQom00002ATrinidadandTobago#TT.SG0c2SGSaint George00001EQatar#QA.JU0c2JUAl Jumaliyah00001ASriLanka#LK.KY0c2KYKandy000019Liberia#LR.NI0c2NINimba000022Kazakhstan#KZ.MG0c2MGMangghystau00001DHongKong#HK.SK0c2SKSai Kung000015Kansas#1350c2NSNess000018Arizona#0120c2LPLa Paz000018Illinois#1710c2STScott000019Missouri#0910c2HOHowell00001ENorthDakota#1050c2WIWilliams000015Texas#1630c2FRIFrio000017Ohio#1250c2PAPaulding00001CNebraska#0950c2JEJefferson00001CMinnesota#0230c2CHChippewa00001AKentucky#0070c2BABallard000016Michigan#0170c2BYBay000019Tennessee#1850c2WHWhite00001DMaryland#0430c2WAWashington000029SpainProvinces#0270c2LCLa Coru&ntilde;a00001BOklahoma#1370c2STStephens000018Iowa#1890c2WIWinnebago00001DWisconsin#0790c2MEMilwaukee00001EWashington#0390c2KLKlickitat00001CIndiana#1410c2SJSt. Joseph000018NewYork#1130c2WAWarren00001DNorthCarolina#1810c2VAVance00001AVirginia#0830c2HLHalifax000031Africa#0130c2CDDemocratic Republic of the Congo000024USASouthEastRegion#050c2ARArkansas00001ANicaragua#100c2MNManagua00002DCzechRepublic#850c2MOMoravskoslezsk&yacute;000015Romania#130c2CJCluj000016Turkey#680c2ANAnkara00001FDominica#090c2PKSaint Patrick000023WorldwithCountries#710c2NANamibia00002EIceland#070c2BOBorgarfjar&eth;ars&yacute;sla000014China#010c2AHAnhui00001EAfghanistan#380c2NURNurestan000026Azerbaijan#660c2YRYard&#305;ml&#305;00001FNunavut#CA.NU.KV0c2KVKeewatin00002ECentralAfricanRepublic#CF.BK0c2BKBasse-Kotto00001CUganda#UG.KP0c2KPKapchorwa00001DOman#OM.ZA0c2ZAAdh Dhahirah000016Serbia#RS.BO0c2BOBor000018UK7#UK.SC0c2SCScotland000017Texas#3450c2MOEMotley00001FLouisiana#0890c2SCSt. Charles00001AArizona#0130c2MAMaricopa000020NorthCarolina#0010c2ALAlamance000019Georgia#1530c2HOHouston000019Kentucky#1890c2OSOwsley00001AFlorida#1170c2SOSeminole00001DMississippi#0990c2NENeshoba00001DPuertoRico#1090c2PTPatillas000020Pennsylvania#0650c2JEJefferson000013Idaho#0010c2ADAda000019Arkansas#0890c2MRMarion000021SpainProvinces#0280c2LRLa Rioja000017Oregon#0030c2BEBenton00001ATennessee#0050c2BEBenton000019Colorado#0970c2PIPitkin000016Montana#0670c2PAPark00001DSouthDakota#1350c2YAYankton000019Alabama#1130c2RURussell000018Nevada#0050c2DODouglas000016Iowa#0090c2AUAudubon000019Africa#0140c2DJDjibouti000013Utah#0490c2UTUtah000032Paraguay#220c2ASAsunci&oacute;n Capitol District000019Nicaragua#110c2MSMasaya000028CzechRepublic#860c2PAPardubick&yacute;000019Estonia#180c2TATartumaa00001FRomania#140c2CTConstan&#355;a000028Turkey#690c2GUG&uuml;m&uuml;&#351;hane00001CDominica#100c2PLSaint Paul000021WorldwithCountries#720c2NENiger000015USA#NY0c2NYNew York000021Iceland#080c2DADalas&yacute;sla000017China#020c2ZJZhejiang00001DAfghanistan#390c2ORUOruzgan00001AAzerbaijan#670c2YVYevlax000025Laos#LA.VT0c2VTVientiane Prefecture00001FEastTimor#TL.CL0c2CLCova-Lima000018Uganda#UG.KQ0c2KQAmuru000020BurkinaFaso#BF.NB0c2NBNoumbiel000022CentralAmerica2#CE.PA0c2PAPanama000022PapuaNewGuinea#PG.SA0c2SASanduan000017Kansas#1370c2NTNorton000019Illinois#1730c2SEShelby000017Missouri#0930c2IRIron000017Texas#1650c2GAIGaines000014Ohio#1270c2PEPerry00001ANebraska#0970c2JOJohnson00001BMinnesota#0250c2CGChisago000019Kentucky#0090c2BRBarren000019Michigan#0190c2BEBenzie00001ETennessee#1870c2WLWilliamson00001BMaryland#0450c2WIWicomico000023SpainProvinces#0290c2LPLas Palmas000018Oklahoma#1390c2TETexas000019Iowa#1910c2WNWinneshiek00001AWisconsin#0810c2MOMonroe00001AWashington#0410c2LELewis000017Indiana#1430c2SCScott00001CNewYork#1150c2WSWashington00001CNorthCarolina#1830c2WAWake00001AVirginia#0850c2HNHanover000016Africa#0150c2EGEgypt00001FParaguay#230c2AGAlto Paraguay00001CNicaragua#120c2MTMatagalpa00002BCzechRepublic#870c2PLPlze&#328;sk&yacute;000019Estonia#190c2VGValgamaa00001CWales#010c2BGBlaenau Gwent000018Romania#150c2CVCovasna000020Ecuador#010c2WGal&aacute;pagos000017Turkey#700c2HKHakkari00001DDominica#110c2PRSaint Peter000023WorldwithCountries#730c2NGNigeria00002CIceland#090c2EYEyjafjar&eth;ars&yacute;sla000016China#030c2JXJiangxi00001CAfghanistan#400c2PARParvan000021Azerbaijan#680c2YEYevlax (City)00001CLaos#LA.XA0c2XAXaignabouli000019Russia#RU.RO0c2RORostov00001CTunisia#TN.ZA0c2ZAZaghouan000019Uganda#UG.KR0c2KRKisoro00001ARussia#RU.AD0c2ADAdygaya000024FranceDepartment#FR.MY0c2MYMayenne000021FranceDepartment#FR.NO0c2NONord00001DVietnam#VN.QT0c2QTQuang Tri00001BSriLanka#LK.MH0c2MHMatara00001FTurkmenistan#TM.BA0c2BABalkan000016Utah#0510c2WAWasatch00001CTexas#3470c2NACNacogdoches00001ELouisiana#0910c2SHSt. Helena000018Arizona#0150c2MOMohave000028Virginia#8100c2VBVirginia Beach (City)000021NorthCarolina#0030c2AEAlexander000017Georgia#1550c2IRIrwin00001CKentucky#1910c2PEPendleton000018Florida#1190c2STSumter00001CMississippi#1010c2NWNewton000024PuertoRico#1110c2PNPe&ntilde;uelas00001EPennsylvania#0670c2JUJuniata000015Idaho#0030c2AAAdams000019Arkansas#0910c2MIMiller000024SpainProvinces#0300c2LELe&oacute;n00001AOregon#0050c2CLClackamas00001BTennessee#0070c2BLBledsoe00001AColorado#0990c2PRProwers00001BMontana#0690c2PEPetroleum00001DSouthDakota#1370c2ZIZiebach00001BAlabama#1150c2SCSt. Clair000015Nevada#0070c2ELElko000015Iowa#0110c2BEBenton000022Africa#0160c2GQEquatorial Guinea00001CNorthIreland#010c2ANAntrim000021Paraguay#240c2BQBoquer&oacute;n000020Nicaragua#130c2NSNueva Segovia000033CzechRepublic#880c2STSt&#345;edo&#269;esk&yacute;00001CEstonia#200c2VDViljandimaa000017Wales#020c2BBBridgend000025Romania#160c2DBD&acirc;mbovi&#355;a000015Ecuador#020c2AAzuay000015Turkey#710c2KOKonya000022WorldwithCountries#740c2RWRwanda000027Iceland#100c2GUGullbringus&yacute;sla000016China#040c2JSJiangsu00001EAfghanistan#410c2DAYDaykundi000021Azerbaijan#690c2ZGZ&#601;ngilan000028NovaScotia#CA.NS.GT0c2GTGlooscap Trail000025PolandCounties#PL.SK.KM0c2SKMKielce000023MarshallIsland#MH.MH.BR0c2BRBikar000022SierraLeone#SL.NO.BM0c2BMBombali000024Philippines#PH.IN0c2INIlocos Norte000019Uganda#UG.KS0c2KSKasese000017Uganda#UG.LI0c2LILira000025EquatorialGuinea#GQ.KN0c2KNKie Ntem000022Tibet#TI.LP0c2LPLhasa Prefecture00001CSerbia#RS.BR0c2BRBranicevo00001DTurkmenistan#TM.AL0c2ALAhal000019Nigeria#NG.NI0c2NINiger000019Senegal#SN.TH0c2THThies000020Gambia#GM.MC0c2MCCentral River000029Philippines#PH.ZY0c2ZYZamboanga Sibugay00001DHongKong#HK.SO0c2SOSouthern000016Kansas#1390c2OSOsage000018Illinois#1750c2SRStark00001AMissouri#0950c2JKJackson00001ATexas#1670c2GALGalveston000028Virginia#6300c2FEFredericksburg (City)000017Ohio#1290c2PIPickaway00001ANebraska#0990c2KEKearney000018Minnesota#0270c2CLClay000017Kentucky#0110c2BTBath00001AMichigan#0210c2BIBerrien00001ATennessee#1890c2WIWilson00001DMaryland#0470c2WOWorchester00001FSpainProvinces#0310c2LILleida00001AOklahoma#1410c2TITillman000017Iowa#1930c2WOWoodbury00001AWisconsin#0830c2OCOconto00001CWashington#0430c2LILincoln000018Indiana#1450c2SHShelby000017NewYork#1170c2WYWayne00001ENorthCarolina#1850c2WRWarren00001AVirginia#0870c2HCHenrico000018Africa#0170c2EREritrea00001CAzerbaijan#700c2ZQZaqatala00001ANorthIreland#020c2ADArds000026Nicaragua#140c2SJR&iacute;o San Juan00002CCzechRepublic#890c2US&Uacute;steck&yacute;00001FEstonia#210c2VRV&otilde;rumaa000019Wales#030c2CPCaerphilly000015Romania#170c2DJDolj00001EEcuador#030c2BBol&iacute;var000016Turkey#720c2MRMardin000031WorldwithCountries#750c2STSao Tome and Principe000013USA#OR0c2OROregon000014China#050c2JLJilin00001EAfghanistan#420c2PANPanjshir000026Alberta#CA.AB.AC0c2ACAlberta Central000026PolandCounties#PL.LD.SI0c2LSISieradz000022MarshallIsland#MH.MH.UJ0c2UJUjae000024SierraLeone#SL.NO.TO0c2TOTonkolili000022Macedonia#MK.KG0c2KGKrivogastani00001BVanuatu#VU.ML0c2MLMalampa00001AThailand#TH.PR0c2PRPhrae000021Cameroon#CM.EN0c2ENExtreme-Nord00001FSriLanka#Lk.MJ0c2MJMoneragala00001EEritrea#ER.GB0c2GBGash-Barka00001FBurkinaFaso#BF.MO0c2MOMouhoun000019Bhutan#BT.MO0c2MOMongar00001BRwanda#RW.NO0c2NONorthern000019Utah#0530c2WSWashington000018Texas#3490c2NAVNavarro00001DLouisiana#0930c2SJSt. James000018Arizona#0170c2NANavajo000021NorthCarolina#0050c2AGAlleghany000019Georgia#1570c2JAJackson000018Kentucky#1930c2PRPerry00001AFlorida#1210c2SNSuwannee00001DMississippi#1030c2NONoxubee00001APuertoRico#1130c2POPonce000021Pennsylvania#0690c2LALackawanna000017Idaho#0050c2BABannock00001EArkansas#0930c2MSMississippi00001DSpainProvinces#0320c2LULugo000018Oregon#0070c2CAClatsop00001ATennessee#0090c2BUBlount000019Colorado#1010c2PUPueblo00001AMontana#0710c2PHPhillips000018Alabama#1170c2SHShelby00001ANevada#0090c2ESEsmeralda000019Iowa#0130c2BHBlack Hawk000019Africa#0180c2ETEthiopia00001FAzerbaijan#710c2ZRZ&#601;rdab00001CNorthIreland#030c2AMArmagh000018Nicaragua#150c2RIRivas00002CCzechRepublic#900c2ZLZl&iacute;nsk&yacute;000016Wales#040c2CACardiff00001CRomania#180c2GLGala&#355;i00001CEcuador#040c2FCa&ntilde;ar00001ATurkey#730c2NGNi&#287;de000023WorldwithCountries#760c2SNSenegal000016China#060c2QHQinghai00002DPolandCounties#PL.LU.BM0c2LBMBiala-Podlaska00001CMacedonia#MK.KH0c2KHKicevo00001DMongolia#MN.DU0c2DUDundgovi000017Uganda#UG.KU0c2KUKumi000019Uganda#UG.MA0c2MAMasaka000020Thailand#TH.PS0c2PSPhitsanulok000018Somalia#SO.SO0c2SOSool00001FSenegal#SN.ST0c2STSaint-Louis00001CLiberia#LR.MY0c2MYMaryland00001BZambia#ZM.SO0c2SOSouthern00001CChad#TD.MO0c2MOMoyen Chari000016Africa#0190c2GAGabon000018Kansas#1410c2OBOsborne00001DIllinois#1770c2SPStephenson000019Missouri#0970c2JAJasper00001CCalifornia#0010c2ALAlameda000016Texas#1690c2GARGarza000013Ohio#1310c2PKPike000018Nebraska#1010c2KIKeith00001EMinnesota#0290c2CWClearwater000017Kentucky#0130c2BEBell000019Michigan#0230c2BNBranch00001FSpainProvinces#0330c2MAMadrid000018Oklahoma#1430c2TUTulsa000014Iowa#1950c2WHWorth00001AWisconsin#0850c2ONOneida00001BNewWorld#1000c2KHCambodia00001AWashington#0450c2MAMason000019Indiana#1470c2SPSpencer00001DNewYork#1190c2WEWestchester000022NorthCarolina#1870c2WSWashington000018Virginia#0890c2HYHenry00002CNewCaledonia#NC.NO.HI0c2HIHiengh&egrave;ne00001EAzerbaijan#720c2BBBab&#601;k00001FNorthIreland#040c2BLBallymena00001EWales#050c2CICarmarthenshire000015Romania#190c2GJGorj000016Ecuador#050c2CCarchi000015Turkey#740c2SISiirt000025WorldwithCountries#770c2SCSeycelles000015China#070c2FJFujian000025MarshallIsland#MH.MH.UL0c2ULUjelang000017Laos#LA.XE0c2XEXekong000017Libya#LY.SB0c2SBSabha00001EChina2#CN.NX0c2NXNingxia Hui000021FranceDepartment#FR.OI0c2OIOise000021Thailand#TH.PT0c2PTPathum Thani00001CBotswana#BW.CE0c2CECentral00001AEurope2#EU.FR0c2FRFrance00001DAlgeria#DZ.KH0c2KHKhenchela00001CSaudiArabia#SA.HA0c2HAHail000016Africa#0200c2GHGhana000015Alaska#1800c2NONome000014Utah#0550c2WYWayne000017Texas#3510c2NEWNewton000028Louisiana#0950c2STSt. John the Baptist000016Arizona#0190c2PIPima00001DNorthCarolina#0070c2ANAnson000018Georgia#1590c2JSJasper000017Kentucky#1950c2PIPike000018Florida#1230c2TATaylor00001FMississippi#1050c2OKOktibbeha000021PuertoRico#1150c2QBQuebradillas000020Pennsylvania#0710c2LNLancaster000019Idaho#0070c2BEBear Lake000019Arkansas#0950c2MNMonroe000026SpainProvinces#0340c2MLM&aacute;laga000019Oregon#0090c2COColumbia00001BTennessee#0110c2BRBradley00001DColorado#1030c2RBRio Blanco000019Montana#0730c2POPondera000018Alabama#1190c2SUSumter000018NewWorld#1010c2CNChina000017Nevada#0110c2EUEureka000014Iowa#0150c2BOBoone000019Azerbaijan#730c2CFCulfa000020NorthIreland#050c2BYBallymoney000023USASouthEastRegion#120c2FLFlorida00004BNicaragua#170c2ANRegi&oacute;n Aut&oacute;noma del Atl&aacute;ntico Norte000019Wales#060c2CGCeredigion000019Romania#200c2HRHarghita00001AEcuador#060c2HChimborazo000017Turkey#750c2AKAksaray000028WorldwithCountries#780c2SLSierra Leone00001BChina#080c2HLHeilongjiang000026PolandCounties#PL.PD.SM0c2PSMSuwalki000021HongKong#HK.SS0c2SSSham Shui Po00001CSamoa #WS.TU0c2TUTuamasaga00001AUganda#UG.MC0c2MCMasindi00001BThailand#TH.PU0c2PUPhuket000020Ethiopia#ET.AA0c2AAAddis Ababa000022Europe2#EU.GI0c2GIGibraltar (UK)000026Burma#MM.TN0c2TNTanintharyi Division00001BVirginia#0910c2HIHighland000017Africa#0210c2GNGuinea000017Kansas#1430c2OTOttawa00001BIllinois#1790c2TATazewell00001CMissouri#0990c2JEJefferson00001BCalifornia#0030c2APAlpine00001ATexas#1710c2GIEGillespie000016Ohio#1330c2POPortage00001CNebraska#1030c2KPKeya Paha000018Minnesota#0310c2COCook000018Kentucky#0150c2BNBoone00001AMichigan#0250c2CACalhoun000020SpainProvinces#0350c2MEMelilla00001AOklahoma#1450c2WAWagoner000015Iowa#1970c2WGWright00001DWisconsin#0870c2OUOutagamie00001DNewWorld#1020c2TPEast Timor00001DWashington#0470c2OKOkanogan000018Indiana#1490c2STStarke000019NewYork#1210c2WOWyoming00001FNorthCarolina#1890c2WTWatauga00002FSaskatchewan#CA.SK.WC0c2WCWest Central Region000026Manitoba#CA.MB.CR0c2CRCentral Region000026Azerbaijan#740c2KNK&#601;ng&#601;rli00001FNorthIreland#060c2BBBanbridge000023USASouthEastRegion#130c2GAGeorgia000049Nicaragua#180c2ASRegi&oacute;n Aut&oacute;noma del Atl&aacute;ntico Sur000014Wales#070c2CWConwy00001ARomania#210c2HDHunedoara000018Ecuador#070c2XCotopaxi000016Turkey#760c2BMBatman000023WorldwithCountries#790c2SOSomalia00002AIceland#150c2KJKj&oacute;sars&yacute;sla000014China#090c2HEHenan00002CPolandCounties#PL.SL.BM0c2SBMBielsko-Biala00002BPolandCounties#PL.LD.SM0c2LSMSkierniewice00002DPapuaNewGuinea#PG.SH0c2SHSouthern Highlands00001CHongKong#HK.ST0c2STSha Tin000022Philippines#PH.IS0c2ISIlocos Sur000018Malawi#MW.ZO0c2ZOZomba000018Russia#RU.SK0c2SKSakha00001DMicronesia#FM.KO0c2KOKosrae000019Uganda#UG.KX0c2KXKamuli00001AUganda#UG.MD0c2MDMubende000024EquatorialGuinea#GQ.LI0c2LILitoral000022Tibet#TI.NA0c2NANgari Prefecture000027Iran#IR.SB0c2SBSistan and Baluchestan000031FranceDepartment#FR.PA0c2PAPyrenees Atlantiques00002BTrinidadandTobago#TT.SP0c2SPSaint Patrick00001EGambia#GM.LR0c2LRLower River00001FLesotho#LS.QN0c2QNQacha's Nek000015Iowa#0170c2BRBremer00001EAfrica#0220c2GWGuinea-Bissau000014Utah#0570c2WEWeber000016Texas#3530c2NOLNolan00001ELouisiana#0970c2SLSt. Landry000017Arizona#0210c2PNPinal00001CNorthCarolina#0090c2ASAshe00001CGeorgia#1610c2JDJeff Davis000019Kentucky#1970c2POPowell000017Florida#1250c2UNUnion00001CMississippi#1070c2PAPanola000022PuertoRico#1170c2RCRinc&oacute;n00001FPennsylvania#0730c2LWLawrence000017Idaho#0090c2BNBenewah00001DArkansas#0970c2MTMontgomery00001FSpainProvinces#0360c2MUMurcia000015Oregon#0110c2CSCoos000018Israel#0010c2CECentral00001CTennessee#0130c2CACampbell00001DColorado#1050c2RGRio Grande00001EMontana#0750c2PRPowder River00001BAlabama#1210c2TATalladega00001ANewWorld#1030c2GEGeorgia000019Nevada#0130c2HUHumboldt00002FSaskatchewan#CA.SK.EC0c2ECEast Central Region00001BAzerbaijan#750c2OROrdubad00001DNorthIreland#070c2BFBelfast00001BWales#080c2DBDenbighshire00001ERomania#220c2ILIalomi&#355;a000016Ecuador#080c2OEl Oro000017Turkey#770c2BBBayburt000028WorldwithCountries#800c2ZASouth Africa000014China#100c2HBHebei000025Burma#MM.AY0c2AYAyeyarwady Division00001BRussia#RU.SL0c2SLSakhalin000019Russia#RU.TB0c2TBTambov00001AGuinea#GN.SI0c2SISiguiri00001AUganda#UG.KY0c2KYKayunga000018Uganda#UG.ME0c2MEMbale000018Cameroon#CM.ES0c2ESEst000028CentralAfricanRepublic#CF.UK0c2UKOuaka00001DNorthCarolina#1910c2WYWayne000020Virginia#0930c2IWIsle of Wight000016Africa#0230c2KEKenya000017Kansas#1450c2PNPawnee000018Illinois#1810c2UNUnion00001AMissouri#1010c2JOJohnson00001BCalifornia#0050c2AMAmador00001ATexas#1730c2GLAGlasscock000015Ohio#1350c2PRPreble00001ANebraska#1050c2KMKimball00001EMinnesota#0330c2CTCottonwood00001AKentucky#0170c2BOBourbon000017Michigan#0270c2CSCass000020SpainProvinces#0370c2NANavarra000016Israel#0020c2HAHaifa00001DOklahoma#1470c2WSWashington00001BWisconsin#0890c2OZOzaukee000018NewWorld#1040c2INIndia00001CWashington#0490c2PAPacific000019Indiana#1510c2SUSteuben000017NewYork#1230c2YAYates00002AAzerbaijan#760c2SDS&#601;d&#601;r&#601;k000023NorthIreland#080c2CFCarrickfergus000019Wales#090c2FLFlintshire00001ARomania#230c2ISIa&#351;i00001AEcuador#090c2EEsmeraldas000017Turkey#780c2KRKaraman000021WorldwithCountries#810c2SDSudan000028Iceland#170c2MYM&yacute;ras&yacute;sla000014China#110c2HNHunan00001CLaos#LA.XI0c2XIXiangkhoang00001FPhilippines#PH.KA0c2KAKalinga00001BRussia#RU.SM0c2SMSmolensk00001CMongolia#MN.DZ0c2DZZavkhan00001AUganda#UG.MF0c2MFManafwa000018Russia#RU.AL0c2ALAltai00002AFranceDepartment#FR.PC0c2PCPas de Calais00001CVietnam#VN.AG0c2AGAn Giang00001FSriLanka#LK.MP0c2MPMullailivu00001BMauritius#MU.FL0c2FLFlacq000022Chad#TD.NJ0c2NJVille De Ndjamena000017Nevada#0150c2LALander000017Iowa#0190c2BUBuchanan000018Africa#0240c2LSLesotho000017Texas#3550c2NUENueces00001ELouisiana#0990c2SMSt. Martin00001CArizona#0230c2SCSanta Cruz00001DNorthCarolina#0110c2AVAvery00001BGeorgia#1630c2JEJefferson00001AKentucky#1990c2PUPulaski000019Florida#1270c2VOVolusia000018Illinois#0010c2ADAdams000021Mississippi#1090c2PRPearl River000026PuertoRico#1190c2RGR&iacute;o Grande00001EPennsylvania#0750c2LELebanon000017Idaho#0110c2BIBingham000019Arkansas#0990c2NENevada000020SpainProvinces#0380c2OUOurense000016Oregon#0130c2CRCrook00001AIsrael#0030c2JEJerusalem00001ATennessee#0150c2CNCannon000018Colorado#1070c2RORoutt000018Montana#0770c2PWPowell00001CAlabama#1230c2TLTallapoosa00001CNewWorld#1050c2IDIndonesia00001FAzerbaijan#770c2SH&#350;ahbuz000021NorthIreland#090c2CSCastlereagh000016Wales#100c2GDGwynedd000016Ecuador#100c2GGuayas000023Turkey#790c2KKK&#305;r&#305;kkale000025WorldwithCountries#820c2SZSwaziland000014China#120c2HUHubei000032FrenchGuiana#GF.CY.MT0c2MTMontsinery Tonnegrande00001APanama#PA.HE0c2HEHerrera00001DHongKong#HK.TM0c2TMTuen Mun00001BMacedonia#MK.KN0c2KNKonce00001CCoteDivoire#CI.LC0c2LCLacs00001AEastTimor#TL.DL0c2DLDili000019Uganda#UG.MG0c2MGMayuge000016Benin#BJ.MO0c2MOMono00002FHungaryRegions#HU.WT0c2WTWestern Transdanubia000017Russia#RU.AM0c2AMAmur000028FranceDepartment#FR.PD0c2PDPuy de Dome00001BThailand#TH.PY0c2PYPhayao00001BThailand#TH.RE0c2RERoi Et000020Namibia#NA.OD0c2ODOtjozondjupa000018Nigeria#NG.OG0c2OGOgun000022BurkinaFaso#BF.OB0c2OBOubritenga00001ENorthCarolina#1930c2WIWilkes00001DVirginia#0950c2JCJames City000018Africa#0250c2LILiberia00001CAlaska#1850c2NSNorth Slope000019Kansas#1470c2PLPhillips00001CIllinois#1830c2VEVermilion000017Missouri#1030c2KNKnox00001ACalifornia#0070c2BUButte000017Texas#1750c2GOLGoliad000015Ohio#1370c2PUPutnam000017Nebraska#1070c2KNKnox00001DMinnesota#0350c2CICrow Wing000017Kentucky#0190c2BYBoyd00001DMichigan#0290c2CHCharlevoix000021SpainProvinces#0390c2PAPalencia000019Israel#0040c2NRNorthern00001AOklahoma#1490c2WHWashita000019Wisconsin#0910c2PEPepin000017NewWorld#1060c2IAIran000021Washington#0510c2PEPend Oreille00001AIndiana#1530c2SLSullivan000029NewCaledonia#NC.NO.HO0c2HOHoua&iuml;lou000023Azerbaijan#780c2SR&#350;&#601;rur00001FNorthIreland#100c2CLColeraine00001FWales#110c2AYIsle of Anglesey00001FRomania#250c2MMMaramure&#351;000018Ecuador#110c2IImbabura00001FNorthKorea#010c2CHAChagang-do000020Turkey#800c2SR&#350;&#305;rnak000024WorldwithCountries#830c2TZTanzania00003DIceland#190c2NINor&eth;ur-&Iacute;safjar&eth;ars&yacute;sla000017China#130c2XJXinjiang00001ASomalia#SO.BK0c2BKBakool00001CBurma#MM.CH0c2CHChin State00001ESamoa #WS.VF0c2VFVaao Fonoti000018Niger#NE.MA0c2MAMaradi000018Yemen#YE.DH0c2DHDhamar00001BMongolia#MN.ER0c2EROrkhon00001AUganda#UG.MH0c2MHMaracha00001BLibya#LY.SH0c2SHAsh Shati000017Iran#IR.QZ0c2QZQazvin00001ALebanon#LE.BA0c2BABeirut000019Ethiopia#ET.AF0c2AFAfar000022BurkinaFaso#BF.NM0c2NMNamentenga00001DGambia#GM.NB0c2NBNorth Bank000018Nevada#0170c2LILincoln00001AIowa#0210c2BVBuena Vista000016Africa#0260c2LRLibya00001ATexas#3570c2OCHOchiltree00001CLouisiana#1010c2SRSt. Mary000019Arizona#0250c2YAYavapai000024Virginia#8200c2WBWaynesboro (City)000020NorthCarolina#0130c2BEBeaufort000019Georgia#1650c2JKJenkins00001CKentucky#2010c2RORobertson000019Florida#1290c2WKWakulla00001CIllinois#0030c2ALAlexander00001BMississippi#1110c2PEPerry000022PuertoRico#1210c2SBSabana Grande00001DPennsylvania#0770c2LHLehigh000016Idaho#0130c2BLBlaine000019Arkansas#1010c2NWNewton000023SpainProvinces#0400c2POPontevedra000016Oregon#0150c2CUCurry000019Israel#0050c2SOSouthern00001BTennessee#0170c2CRCarroll00001BColorado#1090c2SASaguache000019Montana#0790c2PIPrairie00001CAlabama#1250c2TUTuscaloosa000018NewWorld#1070c2JPJapan00001FNorthIreland#110c2CKCookstown00001CWales#120c2MMMonmouthshire00001FRomania#260c2MHMehedin&#355;i000014Ecuador#120c2LLoja000015Turkey#810c2AAAdana000020WorldwithCountries#840c2TGTogo000033Iceland#200c2NMNor&eth;ur-M&uacute;las&yacute;sla00001FFiji#FJ.TH.NO0c2NOTholo North000027Kazakhstan#KZ.NK0c2NKNorth Kazakhstan00001ADjibouti#DJ.OB0c2OBObock000024Guyana#GY.PM0c2PMPomeroon-Supenaam000019Russia#RU.RZ0c2RZRyazan000026Russia#RU.SP0c2SPSt. Petersburg City000018Uganda#UG.MI0c2MIMpigi00001AQatar#QA.ME0c2MEMesaieed00001FBurkinaFaso#BF.OD0c2ODOudalan00002EMorocco#MA.MK0c2MKMarrakech Tensift Al Haouz000021Chad#TD.MW0c2MWMayo-Kebbi Ouest00001DIndiana#1550c2SWSwitzerland00001ENorthCarolina#1950c2WLWilson000021Virginia#0970c2KQKing and Queen00001BAfrica#0270c2MGMadagascar00001DKansas#1490c2PTPottawatomie000019Illinois#1850c2WAWabash00001AMissouri#1050c2LDLaclede00001ECalifornia#0090c2CACalaveras000019Texas#1770c2GONGonzales00001FVirginia#6400c2GAGalax (City)000017Ohio#1390c2RIRichland00001CNebraska#1090c2LALancaster00001AMinnesota#0370c2DADakota000018Kentucky#0210c2BLBoyle00001CMichigan#0310c2CECheboygan000022SpainProvinces#0410c2SASalamanca000019Israel#0060c2TATel Aviv000018Oklahoma#1510c2WOWoods00001AWisconsin#0930c2PIPierce00001DNewWorld#1080c2KZKazakhstan00001BWashington#0530c2PIPierce000014China#150c2GSGansu00001FNorthIreland#120c2CRCraigavon00001DWales#130c2MTMerthyr Tydfil00001BRomania#270c2MSMure&#351;00001FEcuador#130c2RLos R&iacute;os000028NorthKorea#030c2HANHamgy&#335;ng-namdo000028Turkey#820c2CI&Ccedil;ank&#305;r&#305;000023WorldwithCountries#850c2TNTunisia000037Iceland#210c2NONor&eth;ur-&THORN;ingeyjars&yacute;sla000022SierraLeone#SL.SO.PU0c2PUPujehun000024MarshallIsland#MH.MH.UT0c2UTUtirik000018Chad#TD.OD0c2ODOuaddai000019Somalia#SO.AW0c2AWAwdal00001BHongKong#HK.TP0c2TPTai Po00001ABurundi#BI.GI0c2GIGitega000022Tibet#TI.NG0c2NGNagqu Prefecture00001AVietnam#VN.SL0c2SLSon La00001DVietnam#VN.TB0c2TBThai Binh00001BPalau#PW.HA0c2HAHatohobei00001BSriLanka#LK.MT0c2MTMatale000017Congo#CG.NI0c2NINiari000024TrinidadandTobago#TT.CA0c2CACaroni00001BLesotho#LS.QT0c2QTQuthing000015Nevada#0190c2LYLyon000015Iowa#0230c2BTButler000017Africa#0280c2MWMalawi000021Alaska#1880c2NANorthwest Arctic000017Texas#3590c2OLDOldham00001FLouisiana#1030c2SYSt. Tammany000016Arizona#0270c2YUYuma00001ENorthCarolina#0150c2BRBertie000019Georgia#1670c2JOJohnson00001DKentucky#2030c2RCRockcastle000018Florida#1310c2WTWalton000017Illinois#0050c2BOBond00001AMississippi#1130c2PIPike00001CPuertoRico#1230c2SASalinas00001EPennsylvania#0790c2LZLuzerne000015Idaho#0150c2BOBoise00001BArkansas#1030c2OUOuachita00002FSpainProvinces#0420c2SCSanta Cruz de Tenerife00001AOregon#0170c2DEDeschutes00001ATennessee#0190c2CTCarter00001BColorado#1110c2SJSan Juan000019Montana#0810c2RARavalli000018Alabama#1270c2WAWalker000020NewWorld#1090c2KPKorea (north)000020NewCaledonia#NC.SU.TH0c2THThio000016China#160c2GXGuangxi00001BNorthIreland#130c2LDDerry00001CLuxembourg#020c2CACapellen000020Wales#140c2NPNeath Port Talbot00001BRomania#280c2NTNeam&#355;00001DEcuador#140c2MManab&iacute;000019Turkey#830c2GAGaziantep000022WorldwithCountries#860c2UGUganda000024PolandCounties#PL.LU.CM0c2LCMChelm000024Alberta#CA.AB.AN0c2ANAlberta North00001CSomalia#SO.BN0c2BNBanaadir00001EEastTimor#TL.VQ0c2VQViqueque00001ARussia#RU.SR0c2SRSaratov00001FMongolia#MN.GA0c2GAGovi Altai00001FCoteDivoire#CI.LG0c2LGLagunes000030Guinea#GN.TE0c2TET&eacute;lim&eacute;l&eacute;00001EUganda#UG.NA0c2NANakasongola000021FranceDepartment#FR.OR0c2OROrne00001ALibya#LY.AJ0c2AJAjdabiya000019Monaco#EU.MN0c2MNMonaco000025DenmarkRegion#DK.MJ0c2MJMidtjylland00001BNamibia#NA.OH0c2OHOmaheke00001CSomalia#SO.TO0c2TOTogdheer00001CAlgeria#DZ.LG0c2LGLaghouat00001CIndiana#1570c2TITippecanoe00001ENorthCarolina#1970c2YAYadkin00001EVirginia#0990c2KGKing George000015Africa#0290c2MLMali000016Kansas#1510c2PRPratt000019Illinois#1870c2WRWarren00001CMissouri#1070c2LFLafayette00001BCalifornia#0110c2COColusa000015Texas#1790c2GRAGray000013Ohio#1410c2RORoss00001ANebraska#1110c2LILincoln000019Minnesota#0390c2DDDodge00001AKentucky#0230c2BKBracken00001BMichigan#0330c2CIChippewa000020SpainProvinces#0430c2SESegovia00001BOklahoma#1530c2WDWoodward000018Wisconsin#0950c2POPolk000020NewWorld#1100c2KRKorea (south)00001DWashington#0550c2SJSan Juan00002DPrinceEdwardIsland#CA.PE.AL0c2ALAnne's Land000016Belarus#010c2BRBrest00001ANorthIreland#140c2DWDown000024Luxembourg#030c2ESEsch-sur-Alzette000016Wales#150c2NONewport000014Romania#290c2OTOlt00001BColombia#010c2AMAAmazonas00001FEcuador#150c2SMorona-Santiago000014Turkey#840c2KAKars00002AWorldwithCountries#870c2WAWestern Sahara00002FIceland#230c2RARang&aacute;rvallas&yacute;sla000023FrenchGuiana#GF.CY.MY0c2MYMatoury000033NorthWestTerritories#CA.NT.BL0c2BLBigLake Country00001DMacedonia#MK.KS0c2KSKrusevo00001DMacedonia#MK.LI0c2LILipkovo00001AZambia#ZM.CE0c2CECentral000019Yemen#YE.DL0c2DLAl Dali00001BLibya#LY.TB0c2TBTarabulus00002DSolomonIsland#SB.RB0c2RBRennell and Bellona00001ERussia#RU.AR0c2ARArkhangelsk000018Guinea#GN.BE0c2BEBeyla00001APakistan#PK.SD0c2SDSindh00001CSwaziland#SZ.HH0c2HHHhohho00001ALibya#LY.BA0c2BABenghazi000018Nauru#NR.AB0c2ABAnabar00001AEurope2#EU.GR0c2GRGreece00001DNewWorld#1110c2KGKyrgyzstan000018Nevada#0210c2MIMineral000016Iowa#0250c2CACalhoun00001BAfrica#0300c2MRMauritania000017Texas#3610c2ORAOrange00001ELouisiana#1050c2TATangipahoa00001ENorthCarolina#0170c2BLBladen000017Georgia#1690c2JNJones000018Kentucky#2050c2RWRowan00001CFlorida#1330c2WGWashington000018Illinois#0070c2BNBoone00001EMississippi#1150c2POPontotoc000026PuertoRico#1250c2SGSan Germ&aacute;n00001FPennsylvania#0810c2LYLycoming000016Idaho#0170c2BRBonner000018Arkansas#1050c2PEPerry000020SpainProvinces#0440c2SVSevilla000018Oregon#0190c2DODouglas00001CTennessee#0210c2CHCheatham00001DColorado#1130c2SMSan Miguel00001AMontana#0830c2RIRichland00001CAlabama#1290c2WSWashington000016China#180c2GZGuizhou000017Belarus#020c2HOHomyel000030NorthIreland#150c2DNDungannon and South Tyrone000025USASouthEastRegion#220c2LALouisiana00001ELuxembourg#040c2LULuxembourg00001CWales#160c2PEPembrokeshire000018Romania#300c2PHPrahova00001AJamacia#010c2CLClarendon00001CColombia#020c2ANTAntioquia000023NorthKorea#060c2HWNHwanghae-namdo000019Turkey#850c2ZOZonguldak000022WorldwithCountries#880c2ZMZambia00001ELiechtenstein#010c2BABalzers000022MarshallIsland#MH.MH.EB0c2EBEbon00001CRussia#RU.ST0c2STStavropol000019Uganda#UG.LW0c2LWLuwero00001CRussia#RU.AS0c2ASAstrakhan000018Guinea#GN.BF0c2BFBoffa00001AThailand#TH.SA0c2SASatun000024TrinidadandTobago#TT.TO0c2TOTobago00001DVietnam#VN.BD0c2BDBinh Dinh000018Angola#AO.ZA0c2ZAZaire00002CBrazilRegion#BR.CW0c2CWCentral West Region00001FBurkinaFaso#BF.NR0c2NRNahouri000017NewWorld#1120c2LALaos00001BWashington#0570c2SASkagit000018Indiana#1590c2TPTipton00001ENorthCarolina#1990c2YNYancey00001FVirginia#1010c2KWKing William00001DRhodeIsland#0010c2BRBristol000018Kansas#1530c2RARawlins00001DIllinois#1890c2WSWashington00001BMissouri#1090c2LALawrence000021California#0130c2CNContra costa000018Texas#1810c2GRYGrayson000017Ohio#1430c2SASandusky000018Nebraska#1130c2LOLogan00001BMinnesota#0410c2DUDouglas00001CKentucky#0250c2BHBreathitt000018Michigan#0350c2CLClare00001ESpainProvinces#0450c2SOSoria00001BWisconsin#0970c2PRPortage000027Manitoba#CA.MB.WI0c2WIWinnipeq Region000017China#190c2LNLiaoning000017Belarus#030c2HRHrodna00001FNorthIreland#160c2FEFermanagh00001ALuxembourg#050c2MEMersch000014Wales#170c2POPowys00001BRomania#310c2SJS&#259;laj000018Jamacia#020c2HAHanover000019Colombia#030c2ARAArauca000017Ecuador#170c2YPastaza000023NorthKorea#070c2HWBHwanghae-bukto000017Turkey#860c2ARArdahan000018SouthKorea#010c2CJJeju000024WorldwithCountries#890c2ZWZimbabwe00001DLiechtenstein#020c2ESEschen00002BNewBrunswick#CA.NB.MR0c2MRMiramichi River00002APolandCounties#PL.SL.CM0c2SCMCzestochowa000025PolandCounties#PL.PM.GM0c2PGMGdansk000028PolandCounties#PL.PD.BM0c2PBMBialystok000027CentralAmerica2#CE.PR0c2PRPuerto Rico00001CSenegal#SN.DB0c2DBDiourbel000019Uganda#UG.MN0c2MNMukono00001EThailand#TH.SB0c2SBSing Buri000031DemocraticRepublicoftheCongo#CD.SK0c2SKSud-Kivu00001CNamibia#NA.OK0c2OKOkavango000018Nigeria#NG.ON0c2ONOndo000018Alabama#1310c2WIWilcox00001BNewWorld#1130c2MYMalaysia000014Nevada#0230c2NYNye000016Iowa#0270c2CRCarroll000018Africa#0320c2MAMorocco00001BTexas#3630c2PALPalo Pinto00001ALouisiana#1070c2TETensas000021NorthCarolina#0190c2BSBrunswick000017Georgia#1710c2LALamar00001AKentucky#2070c2RSRussell000018Illinois#0090c2BRBrown00001EMississippi#1170c2PSPrentiss000027PuertoRico#1270c2SJSan Juan (capital)00001DPennsylvania#0830c2MKMcKean000019Texas#0010c2ANDAnderson00001AIdaho#0190c2BVBonneville00001BArkansas#1070c2PHPhillips000022SpainProvinces#0460c2TATarragona000018Oregon#0210c2GIGilliam00001BTennessee#0230c2CSChester00001BColorado#1150c2SESedgwick00001BMontana#0850c2RORoosevelt00001ELiechtenstein#030c2GAGamprin000019China#200c2NMNei Mongol000019Belarus#040c2MAMahilyow00001BNorthIreland#170c2LRLarne00001BMalta#010c2GHG&#295;awdex00001CLuxembourg#060c2CLClervaux000018Taiwan#010c2CGChanghua000021Wales#180c2RTRhondda Cynon Taff00001ARomania#320c2SMSatu Mare000023Colombia#040c2ATLAtl&aacute;ntico000019Ecuador#180c2PPichincha000021NorthKorea#080c2KAEKaes&#335;ng00001BTurkey#870c2BRBart&#305;n000022WorldwithCountries#900c2GMGambia000029CentralAfricanRepublic#CF.VK0c2VKVakaga000018Somalia#SO.BR0c2BRBari00001DRussia#RU.SV0c2SVSverdlovsk000017Russia#RU.TL0c2TLTula000018Uganda#UG.NE0c2NENebbi000020Russia#RU.BK0c2BKBashkortostan000017Iran#IR.SM0c2SMSemnan00001EVietnam#VN.TG0c2TGTien Giang000049Ethiopia#ET.SN0c2SNSouthern (Nations,Nationalities and People's Region)000025DenmarkRegion#DK.ND0c2NDNordjylland000028WesternSahara#AF.WS0c2WSWestern Sahara00001BEthiopia#ET.AM0c2AMAmhara000017Togo#TG.CE0c2CECentre00001BEurope2#EU.GU0c2GUGuersey00001BNewWorld#1140c2MNMongolia00001DWashington#0590c2SKSkamania000017Indiana#1610c2UNUnion00001CVirginia#1030c2LALancaster00001BAfrica#0330c2MZMozambique00001ARhodeIsland#0030c2KEKent000015Kansas#1550c2RNReno000018Illinois#1910c2WYWayne000018Missouri#1110c2LELewis00001ECalifornia#0150c2DEDel Norte000016Texas#1830c2GREGregg000015Ohio#1450c2SCScioto000017Nebraska#1150c2LULoup00001DMinnesota#0430c2FAFaribault00001FKentucky#0270c2BGBreckinridge00001AMichigan#0370c2CNClinton00001FSpainProvinces#0470c2TETeruel000019Wisconsin#0990c2PCPrice00001DLiechtenstein#040c2MAMauren00001AChina#210c2NXNingxia Hui00001ENorthIreland#180c2LMLimavady00001CFinland#010c2AL&Aring;land000016Malta#020c2KEKemmuna00001CLuxembourg#070c2DIDiekirch000016Taiwan#020c2CHChiayi000019Lithuania#560c2ALAlytus000016Wales#190c2SWSwansea000016Romania#330c2SBSibiu00001BJamacia#040c2MAManchester00001AEcuador#190c2TTungurahua000024NorthKorea#090c2KANKangw&#335;n-do00001FTurkey#880c2IGI&#287;d&#305;r000020SouthKorea#030c2CBJeollabuk-do000021WorldwithCountries#910c2CGCongo000023MarshallIsland#MH.MH.EE0c2EEEbeya000024Alberta#CA.AB.AS0c2ASAlberta South00002CDistrictofColumbia#US.DC.SE0c2SESouth East00001ARwanda#RW.OU0c2OUWestern00001BLaos#LA.XS0c2XSXaisomboun000022Guyana#GY.PT0c2PTPotaro-Siparuni000018Jordan#JO.AJ0c2AJAjlun00001BRussia#RU.BL0c2BLBelgorod00001AChina2#CN.QH0c2QHQinghai00001DVietnam#VN.TH0c2THThanh Hoa00001BThailand#TH.RN0c2RNRanong00001BEthiopia#ET.SO0c2SOSomali000019Lebanon#LE.BI0c2BIBeqaa000021Lebanon#LE.AS0c2ASNorth Lebanon00001DVietnam#VN.BG0c2BGBac Giang000022Thailand#TH.AC0c2ACAmnat Charoen000026BurkinaFaso#BF.PA0c2PAPassor&eacute;000019Montana#0870c2RSRosebud000019Alabama#1330c2WNWinston000018NewWorld#1150c2NPNepal000013Iowa#0290c2CSCass000018Africa#0340c2NANamibia000017Texas#3650c2PANPanola00001ELouisiana#1090c2TRTerrebonne000020NorthCarolina#0210c2BUBuncombe000018Georgia#1730c2LNLanier00001FAlaska#0130c2AEAleutians East000018Kentucky#2090c2SCScott000019Illinois#0110c2BUBureau00001DMississippi#1190c2QUQuitman000020PuertoRico#1290c2SLSan Lorenzo00001DPennsylvania#0850c2MEMercer000018Texas#0030c2ANRAndrews000018Idaho#0210c2BUBoundary000017Arkansas#1090c2PIPike00001FSpainProvinces#0480c2TOToledo000016Oregon#0230c2GRGrant00001DTennessee#0250c2CBClaiborne000019Colorado#1170c2SUSummit00002DIceland#280c2SKSkagafjar&eth;ars&yacute;sla00001ELiechtenstein#050c2PLPlanken000016Belarus#060c2MIMinsk00002FSaintVincentandtheGrenadines#010c2CHCharlotte00001DNorthIreland#190c2LBLisburn000014Malta#030c2MAMalta00001BLuxembourg#080c2RERedange00001DTaiwan#030c2CSChiayi (City)000019Lithuania#570c2KUKaunas000016Wales#200c2TFTorfaen000018Romania#340c2SVSuceava000020Ecuador#200c2ZZamora-Chinchipe00001CTurkey#890c2KBKarab&uuml;k000025WorldwithCountries#920c2MIMauritius000032DemocraticRepublicoftheCongo#CD.BC0c2BCBas-Congo00001EHongKong#HK.TW0c2TWTsuen Wan000018Jordan#JO.BA0c2BABalqa00001CMacedonia#MK.KX0c2KXKarpos000025Macedonia#MK.MD0c2MDMakedonski Brod00001BRussia#RU.UD0c2UDUdmurtia000023CoteDivoire#CI.MC0c2MCMoyen-Comoe000017Oman#OM.JA0c2JADhofar00001ANamibia#NA.ON0c2ONOshana000026Ethiopia#ET.BE0c2BEBenshangul- Gumaz00001BAlgeria#DZ.MC0c2MCMascara00001BNewWorld#1160c2PKPakistan00001EWashington#0610c2SNSnohomish00001DIndiana#1630c2VAVanderburgh000016Virginia#1050c2LELee000016Africa#0350c2NENiger00001DRhodeIsland#0050c2NPNewport000019Kansas#1570c2RPRepublic000018Illinois#1930c2WHWhite00001AMissouri#1130c2LCLincoln00001ECalifornia#0170c2ELEl Dorado000017Texas#1850c2GRIGrimes000015Ohio#1470c2SESeneca00001CNebraska#1170c2MPMcPherson00001CMinnesota#0450c2FIFillmore00001AKentucky#0290c2BIBullitt00001BMichigan#0390c2CRCrawford000021SpainProvinces#0490c2VAValencia00001AWisconsin#1010c2RARacine000027WorldwithCountries#930c2AFAfghanistan00003CIceland#290c2SHSn&aelig;fellsnes-og Hnappadalss&yacute;sla00001ELiechtenstein#060c2RURuggell000019Belarus#070c2VIVitsebsk000032SaintVincentandtheGrenadines#020c2ANSaint Andrew000021NorthIreland#200c2MFMagherafelt000019Luxembourg#090c2WIWiltz000017Taiwan#040c2HHHsinchu000020Lithuania#580c2KLKlaip&#279;da000020Wales#210c2VGVale of Glamorgan00001ARomania#350c2TRTeleorman000028NorthKorea#110c2PYBP'y&#335;ngan-bukto000015Turkey#900c2KIKilis000025SouthKorea#050c2GBChungcheongbuk-do000027Alberta#CA.AB.CA0c2CACalgary and Area000023MarshallIsland#MH.MH.WH0c2WHWotho00001DMacedonia#MK.KY0c2KYKratovo00001CMacedonia#MK.LO0c2LOLozovo000026Sudan#SD.NB0c2NBNorth Bahr Al Ghazal000019Nepal#NP.GA0c2GAGandaki000018Russia#RU.TO0c2TOTomsk000016Libya#LY.SR0c2SRSurt000030FranceDepartment#FR.PO0c2POPyrenees Orientales00001DVietnam#VN.ST0c2STSoc Trang00001EGuinea#GN.BK0c2BKBok&eacute;00001EVietnam#VN.BI0c2BIBinh Duong000021Turkmenistan#TM.DA0c2DADashoguz000024Morocco#MA.MT0c2MTMeknes-Tafilalet000019Algeria#DZ.MD0c2MDMedea000019Montana#0890c2SASanders00001ENewWorld#1170c2PHPhilippines000019Nevada#0270c2PEPershing000014Iowa#0310c2CECedar000018Africa#0360c2NGNigeria000017Texas#3670c2PARParker000019Louisiana#1110c2UNUnion000026Virginia#8300c2WLWilliamsburg (City)00001DNorthCarolina#0230c2BKBurke000019Georgia#1750c2LULaurens000019Kentucky#2110c2SHShelby00001AIllinois#0130c2CACalhoun00001CMississippi#1210c2RARankin000018Europe#0010c2ALAlbania000029PuertoRico#1310c2SSSan Sebasti&aacute;n00001EPennsylvania#0870c2MIMifflin000019Texas#0050c2ANGAngelina000015Idaho#0230c2BTButte00001BArkansas#1110c2POPoinsett000023SpainProvinces#0500c2VLValladolid000017Oregon#0250c2HAHarney000018Tennessee#0270c2CYClay000019Colorado#1190c2TETeller000023WorldwithCountries#940c2AMArmenia000024Iceland#300c2STStrandas&yacute;sla00001DLiechtenstein#070c2SNSchaan000015China#240c2SXShanxi000031SaintVincentandtheGrenadines#030c2DASaint David00001BNorthIreland#210c2MYMoyle000027USASouthEastRegion#280c2MSMississippi00001BLuxembourg#100c2VIVianden00001ETaiwan#050c2HSHsinchu (City)000023Lithuania#590c2MRMarijampol&#279;000016Wales#220c2WXWrexham00001BRomania#360c2TMTimi&#351;000019Jamacia#070c2POPortland000021Colombia#080c2CAQCaquet&aacute;000020Ecuador#220c2USucumb&iacute;os000024NorthKorea#120c2PYOP'y&#335;ngyang000018Turkey#910c2OSOsmaniye00001ESouthKorea#060c2KWGangwon-do00001FKazakhstan#KZ.PA0c2PAPavlodar000018Jordan#JO.AM0c2AMAmman000023Macedonia#MK.KZ0c2KZKriva Palanka000021Libya#LY.SS0c2SSSabratah Surman000024Tibet#TI.NP0c2NPNyinchi Prefecture00001DThailand#TH.SG0c2SGSongkhla000038Pakistan#PK.TA0c2TAFederally Administered Tribal Areas000016Nauru#NR.AI0c2AIAiwo000018Nigeria#NG.OS0c2OSOsun00001BEurope2#EU.IE0c2IEIreland00002FSaudiArabia#SA.HS0c2HSAl Hudud Ash Shamaliyah00001CMacedonia#MK.MG0c2MGMogila00001ESudan#SD.ND0c2NDNorth Darfur00001DPhilippines#PH.LE0c2LELeyte000019Uganda#UG.MT0c2MTMoroto000017Iran#IR.TH0c2THTehran000020Thailand#TH.SH0c2SHSuphan Buri00001BEthiopia#ET.TI0c2TITigray00001BVietnam#VN.BK0c2BKBac Can000020Pakistan#PK.BA0c2BABalochistan000020Mauritius#MU.GP0c2GPGrand Port00001EBurkinaFaso#BF.NY0c2NYNayala000025NewWorld#1180c2RURussian Federation00001CWashington#0630c2SPSpokane00001CIndiana#1650c2VEVermillion00001AVirginia#1070c2LOLoudoun000020RhodeIsland#0070c2PRProvidence000015Kansas#1590c2RCRice00001CIllinois#1950c2WTWhiteside000017Missouri#1150c2LNLinn00001BCalifornia#0190c2FRFresno00001FAlaska#0160c2AWAleutians West00001ATexas#1870c2GUAGuadalupe000021Virginia#6500c2HAHampton (City)000015Ohio#1490c2SHShelby00001ANebraska#1190c2MAMadison000018Europe#0020c2ADAndorra00001CMinnesota#0470c2FRFreeborn000019Kentucky#0310c2BUButler000018Michigan#0410c2DEDelta00001FSpainProvinces#0510c2ZAZamora00001CWisconsin#1030c2RIRichland000027NewCaledonia#NC.SU.BP0c2BPBoulouparis000026WorldwithCountries#950c2AZAzerbaijan000032Iceland#310c2SMSu&eth;ur-M&uacute;las&yacute;sla000023Liechtenstein#080c2SBSchellenberg000017China#250c2SDShandong000032SaintVincentandtheGrenadines#040c2GESaint George000026NorthIreland#220c2NMNewry and Mourne00001ELuxembourg#110c2ECEchternach000017Taiwan#060c2HLHualien000026Lithuania#600c2PNPanev&#279;&#382;ys000017Romania#370c2TLTulcea00001DJamacia#080c2SDSaint Andrew000018Colombia#090c2CAUCauca000014Ecuador#230c2NNapo000020NorthKorea#130c2YANYanggang-do000016Turkey#920c2YLYalova00001BFiji#FJ.NO.MC0c2MCMacuata000023MarshallIsland#MH.MH.WJ0c2WJWotje00001EAlgeria#DZ.MG0c2MGMostaganem00001CSamoa #WS.VS0c2VSVaisigano000020Guinea#GN.TO0c2TOTougu&eacute;00001BUganda#UG.NK0c2NKNakaseke00001EThailand#TH.SI0c2SISi Sa Ket000020Kuwait#KW.FA0c2FAAl Farwaniyah000018Iran#IR.AR0c2ARArdebil00001CVietnam#VN.BL0c2BLBac Lieu00001CVietnam#VN.CB0c2CBCao Bang000017Nauru#NR.BA0c2BABaiti00001DColorado#1210c2WAWashington00001AMontana#0910c2SHSheridan00001CNewWorld#1190c2SGSingapore000017Nevada#0290c2STStorey00001AIowa#0330c2CGCerro Gordo000017Africa#0380c2RWRwanda000017Texas#3690c2PAMParmer00001DLouisiana#1130c2VEVermilion000020NorthCarolina#0250c2CACabarrus000015Georgia#1770c2LELee00001AKentucky#2130c2SISimpson00001AIllinois#0150c2CRCarroll00001BMississippi#1230c2SCScott000018Europe#0030c2ATAustria000021PuertoRico#1330c2SISanta Isabel00001DPennsylvania#0890c2MOMonroe000018Texas#0070c2ARAAransas000015Idaho#0250c2CACamas000017Arkansas#1130c2PLPolk000021SpainProvinces#0520c2ZRZaragoza00001BOregon#0270c2HRHood River000019Tennessee#0290c2CKCocke000032MadagascarRegions#MG.FI.AA0c2AAAtsimo-Atsinanana000026WorldwithCountries#960c2BDBangladesh000019USA#RI0c2RIRhode Island000036Iceland#320c2SUSu&eth;ur-&THORN;ingeyjars&yacute;sla00001ELiechtenstein#090c2TNTriesen000016China#260c2SAShaanxi000033SaintVincentandtheGrenadines#050c2PASaint Patrick000022NorthIreland#230c2NWNewtownabbey000018Finland#060c2LALapland000020Luxembourg#120c2GRGrevenmacher00001FTaiwan#070c2KHKaohsiung(City)000022Lithuania#610c2SA&Scaron;iauliai000017Indonesia#010c2ACAceh000017Romania#380c2VSVaslui00001AJamacia#090c2SNSaint Ann000018Colombia#100c2CESCesar000018Ecuador#240c2DOrellana00001ANorthKorea#140c2NAMNampo00001ATurkey#930c2DUD&uuml;zce000017Somalia#SO.BY0c2BYBay00001DZambia#ZM.CO0c2COCopperbelt00001EPhilippines#PH.LG0c2LGLaguna000022PapuaNewGuinea#PG.CE0c2CECentral00001ARussia#RU.BR0c2BRBryansk00001CVietnam#VN.TN0c2TNTay Ninh00001FThailand#TH.RT0c2RTRatchaburi00001BNamibia#NA.OS0c2OSOmusati00001BNigeria#NG.PL0c2PLPlateau000018Wisconsin#1050c2RORock00001CNewWorld#1200c2LKSri Lanka00001CWashington#0650c2STStevens000016Indiana#1670c2VIVigo000019Virginia#1090c2LULouisa000020RhodeIsland#0090c2WAWashington000016Kansas#1610c2RLRiley000017Illinois#1970c2WIWill00001DMissouri#1170c2LILivingston00001ACalifornia#0210c2GLGlenn000015Texas#1890c2HAEHale000014Ohio#1510c2STStark00001ANebraska#1210c2MEMerrick000018Europe#0040c2BYBelarus00001BMinnesota#0490c2GOGoodhue00001BKentucky#0330c2CACaldwell00001CMichigan#0430c2DIDickinson000023NewCaledonia#NC.SU.BR0c2BRBourail000022WorldwithCountries#970c2BTBhutan000022Liechtenstein#100c2TBTriesenberg000030SaintVincentandtheGrenadines#060c2GTGrenadines000020NorthIreland#240c2NDNorth Down00001ALuxembourg#130c2RMRemich000019Taiwan#080c2KCKaohsiung00001FLithuania#620c2TATaurag&#279;000017Indonesia#020c2BABali00001DRomania#390c2VLV&acirc;lcea000020Jamacia#100c2SCSaint Catherine00001FColombia#110c2CHOChoc&oacute;000028NorthKorea#150c2PYNP'y&#335;ngan-namdo000016Iraq#010c2ANAl-Anbar000019Senegal#SN.DK0c2DKDakar00001FLesotho#LS.BB0c2BBButha-Buthe000018Jordan#JO.AQ0c2AQAqaba00001CRussia#RU.TT0c2TTTatarstan00001FUK7#UK.CI0c2CIChannel Islands00001CEastTimor#TL.ER0c2ERErmera00001CUganda#UG.NM0c2NMNamutumba000025Libya#LY.TM0c2TMTarhunah Masallatah00001CTunisia#TN.JE0c2JEJendouba00001CThailand#TH.SK0c2SKSa Kaeo000024Qatar#QA.MS0c2MSMadinat Ach Shamal00001CVietnam#VN.BN0c2BNBac Ninh000021SriLanka#LK.NW0c2NWNuwara Eliya00001CNamibia#NA.OT0c2OTOshikoto000017Colorado#1230c2WLWeld00001CMontana#0930c2SBSilver Bow00001DNewWorld#1210c2TJTajikistan000017Nevada#0310c2WAWashoe000017Iowa#0350c2CHCherokee000026Africa#0400c2STSao Tome and Principe000016Texas#3710c2PECPecos00001ALouisiana#1150c2VNVernon000020NorthCarolina#0270c2CLCaldwell000019Georgia#1790c2LILiberty00001AKentucky#2150c2SPSpencer000017Illinois#0170c2CSCass00001DMississippi#1250c2SHSharkey000018Europe#0050c2BEBelgium00001DPuertoRico#1350c2TAToa Alta000021Pennsylvania#0910c2MTMontgomery000017Texas#0090c2ARCArcher000016Idaho#0270c2CNCanyon000017Arkansas#1150c2PPPope000018Oregon#0290c2JAJackson00001ATennessee#0310c2CFCoffee000026Manitoba#CA.MB.WR0c2WRWestern Region000022WorldwithCountries#980c2BNBrunei000035Iceland#340c2VBVestur-Bar&eth;astrandars&yacute;sla00001CLiechtenstein#110c2VAVaduz00001BNorthIreland#250c2OMOmagh000015Finland#080c2OUOulu00001ETaiwan#090c2CLKeelung (City)000021Lithuania#630c2TETel&scaron;iai00001BIndonesia#030c2BEBengkulu00002ABritishColumbia#010c2ACAlberni-Clayoquot000018Romania#400c2VNVrancea000020Jamacia#110c2SESaint Elizabeth000021Colombia#120c2CORC&oacute;rdoba000017Iraq#020c2BAAl-Basrah000019SouthKorea#100c2PUBusan000033NorthWestTerritories#CA.NT.DC0c2DCDiamond Capital000028PolandCounties#PL.DS.WM0c2DWMWalbrzych000029Macedonia#MK.MK0c2MKMakedonska Kamenica000026Macedonia#MK.NA0c2NAStaro Nagoricane00001CComoros #KM.AN0c2ANAnjouan000017Russia#RU.TU0c2TUTuva00001AMongolia#MN.HD0c2HDKhovd00001FSamoa #WS.FA0c2FAFaasaleleaga00002DLibya#LY.TN0c2TNTajura wa an Nawahi Al Arba00001BIran#IR.BK0c2BKKermanshah000018Wisconsin#1070c2RURusk00001BNewWorld#1220c2THThailand00001DWashington#0670c2THThurston000018Indiana#1690c2WAWabash00001CVirginia#1110c2LNLunenburg000018Africa#0410c2SNSenegal00002FAlaska#2010c2PWPrince of Wales-Outer Ketchika000016Kansas#1630c2RORooks00001DIllinois#1990c2WLWilliamson00001BMissouri#1190c2MNMcDonald00001DCalifornia#0230c2HUHumboldt00001AAlaska#0200c2ANAnchorage000015Texas#1910c2HALHall000015Ohio#1530c2SUSummit00001ANebraska#1230c2MOMorrill000027Europe#0060c2BABosnia and Herzegovina000019Minnesota#0510c2GRGrant00001BKentucky#0350c2CLCalloway000018Michigan#0450c2EAEaton000026Manitoba#CA.MB.ER0c2EREastern Region000023NewCaledonia#NC.NO.KA0c2KAKouaoua00002BWorldwithCountries#990c2MMBurma (Myanmar)000034Iceland#350c2VHVestur-H&uacute;navatnss&yacute;sla000015China#290c2YNYunnan00001ENorthIreland#260c2SBStrabane000019Bangladesh#810c2DADhaka00001CSuriname#100c2BRBrokopondo000016Taiwan#100c2KMKinmen000018Lithuania#640c2UTUtena00001AIndonesia#040c2JKJakarta000028BritishColumbia#020c2BNBulkley-Nechako000028Romania#410c2CLC&#259;l&#259;ra&#351;i00001CJamacia#120c2SJSaint James000028NorthKorea#170c2HABHamgy&#335;ng-bukto00001EIraq#030c2MUAl-Muthann&#257;000019SouthKorea#110c2SOSeoul000028PolandCounties#PL.KP.BM0c2KBMBydgoszcz000019Algeria#DZ.NA0c2NANaama000023Tanzania#TZ.ZN0c2ZNZanzibar North000018Angola#AO.HL0c2HLHuila000021PapuaNewGuinea#PG.CH0c2CHChimbu000017Russia#RU.TV0c2TVTver00001CRussia#RU.UL0c2ULUlyanovsk000017Uganda#UG.MY0c2MYMoyo00001BRussia#RU.BU0c2BUBuryatia00001BRussia#RU.CK0c2CKChukotka00001BRussia#RU.DA0c2DADagestan00001FVietnam#VN.TQ0c2TQTuyen Quang000027CaymanIslands#KY.SO0c2SOLittle Cayman000024Thailand#TH.SM0c2SMSamut Songkhram000020Madagascar#MG.MA0c2MAMahajanga00001EVietnam#VN.BP0c2BPBinh Phuoc000017Nigeria#NG.OY0c2OYOyo00001BEurope2#EU.HU0c2HUHungary00001CTennessee#0330c2COCrockett000017Colorado#1250c2YUYuma00001CMontana#0950c2SWStillwater00001FNewWorld#1230c2TMTurkmenistan00001BNevada#0330c2WPWhite Pine000018Iowa#0370c2CKChickasaw00001AAfrica#0420c2SYSeycelles000015Texas#3730c2POLPolk00001ELouisiana#1170c2WAWashington00001ENorthCarolina#0290c2CMCamden000019Georgia#1810c2LCLincoln000019Kentucky#2170c2TATaylor00001CIllinois#0190c2CHChampaign00001DMississippi#1270c2SISimpson000019Europe#0070c2BGBulgaria00001DPuertoRico#1370c2TBToa Baja00001EPennsylvania#0930c2MUMontour00001ATexas#0110c2ARSArmstrong000017Idaho#0290c2CRCaribou00001AArkansas#1170c2PRPrairie00001AOregon#0310c2JEJefferson00001BUSA#SC0c2SCSouth Carolina000039Iceland#360c2VIVestur-&Iacute;safjar&eth;ars&yacute;sla000018China#300c2GDGuangdong00001ABangladesh#820c2KHKhulna000025Australia#NT0c2NTNorthern Territory00001CSuriname#110c2CMCommewijne00001ATaiwan#110c2LKLienchiang00001ALithuania#650c2VLVilnius000018Indonesia#050c2JAJambi000020BritishColumbia#030c2CACapital000018Romania#420c2GRGiurgiu00001BJamacia#130c2SMSaint Mary00001BColombia#140c2GUVGuaviare00001FNorthKorea#180c2NAJRas&#335;n000020Iraq#040c2QAAl-Q&#257;disiyyah00001BSouthKorea#120c2INIncheon000026MarshallIsland#MH.MH.EN0c2ENEnewetak000024PolandCounties#PL.KP.TO0c2KTOTorun00001BFiji#FJ.WE.LT0c2LTLautoka000018Algeria#DZ.ML0c2MLMila000019Angola#AO.HM0c2HMHuambo00001CGuineaBissau#GW.OI0c2OIOio000019Lesotho#LS.BE0c2BEBerea00001AJordan#JO.AT0c2ATTafilah000023Philippines#PH.MA0c2MAMaguindanao00001CGabon#GA.WN0c2WNWoleu-Ntem000018Niger#NE.NI0c2NINiamey00001CHongKong#HK.EA0c2EAEastern000020Uganda#UG.NP0c2NPNakapiripirit00001ERussia#RU.CL0c2CLChelyabinsk000021Thailand#TH.SN0c2SNSakon Nakhon00001BSyria#SY.RA0c2RAAr Raqqah00001DNamibia#NA.OW0c2OWOhangwena00001DWisconsin#1090c2SCSt. Croix00001DNewWorld#1240c2UZUzbekistan00001EWashington#0690c2WKWahkiakum000018Indiana#1710c2WRWarren00001AVirginia#1130c2MAMadison00001DAfrica#0430c2SLSierra Leone000015Kansas#1650c2RHRush00001CIllinois#2010c2WBWinnebago000018Missouri#1210c2MOMacon00001DCalifornia#0250c2IMImperial000019Texas#1930c2HAMHamilton000017Ohio#1550c2TRTrumbull000018Nebraska#1250c2NANance000019Georgia#0010c2APAppling000018Europe#0080c2HYCroatia00001CMinnesota#0530c2HEHennepin00001EAustralia2#VIC0c2VICVictoria00001BKentucky#0370c2CBCampbell000018Michigan#0470c2EMEmmet000019USA#SD0c2SDSouth Dakota00002FIceland#370c2VSVestur-Skaftafellss&yacute;sla000023USARegion#010c2NENorthEast Region000015China#310c2HAHainan000015World#EU0c2EUEurope00001CBangladesh#830c2RJRajshahi000019Suriname#120c2CRCoronie000016Taiwan#120c2MLMiaoli000020BritishColumbia#040c2CRCariboo000016Romania#430c2IFIlfov00001DJamacia#140c2STSaint Thomas000021Colombia#150c2GUAGuain&iacute;a000023Iraq#050c2SUAs-Sulaym&#257;niyyah00001FArgentina#010c2BABuenos Aires00001FSouthKorea#130c2KGGyeonggi-do000020Europe2#EU.IM0c2IMIsles of Man00001FSaudiArabia#SA.JF0c2JFAl Jawf00001DHongKong#HK.WC0c2WCWan Chai000020Sudan#SD.NK0c2NKNorth Kurdufan00001FPhilippines#PH.MB0c2MBMasbate00001DMongolia#MN.HG0c2HGKhovsgol000022CoteDivoire#CI.NC0c2NCN'zi-Comoe000022Cyprus2#CY.TC0c2TCTurkish Cyprus00001BThailand#TH.RY0c2RYRayong00001EThailand#TH.SO0c2SOSukhothai000026TrinidadandTobago#TT.VI0c2VIVictoria00001BVietnam#VN.BR0c2BRBen Tre00001ETennessee#0350c2CMCumberland00001DMontana#0970c2SGSweet Grass00001ANewWorld#1250c2VNVietnam000015Iowa#0390c2CLClarke000018Africa#0440c2SOSomalia000017Texas#3750c2POTPotter00001BLouisiana#1190c2WEWebster000020NorthCarolina#0310c2CRCarteret000016Georgia#1830c2LOLong000017Kentucky#2190c2TOTodd00001CIllinois#0210c2CIChristian00001BMississippi#1290c2SMSmith00001FEurope#0090c2CZCzech Republic000022PuertoRico#1390c2TJTrujillo Alto000022Pennsylvania#0950c2NONorthampton000019Texas#0130c2ATAAtascosa000016Idaho#0310c2CSCassia00001AArkansas#1190c2PUPulaski00001AOregon#0330c2JOJosephine000027NorthAmerica_WOCentral#0050c2CACanada000023USARegion#020c2NWNorthWest Region000016China#320c2SCSichuan00001EBangladesh#840c2CGChittagong00001BSuriname#130c2MAMarowijne000016Taiwan#130c2NTNantou00001FIndonesia#070c2JTCentral Java000026BritishColumbia#050c2CNCentral Coast000019Jamacia#150c2TRTrelawny000018Colombia#160c2HUIHuila000018Norway#010c2AKAkershus000018Iraq#060c2BBB&#257;bil00001CArgentina#020c2CTCatamarca000024SouthKorea#140c2KBGyeongsangbuk-do00001DBhutan#BT.PM0c2PMPemagatsel000031DemocraticRepublicoftheCongo#CD.BN0c2BNBandundu00001AZambia#ZM.EA0c2EAEastern00002APhilippines#PH.MC0c2MCOccidental Mindoro000019Russia#RU.TY0c2TYTyumen000028HongKong#HK.CW0c2CWCentral and Western00001BRussia#RU.CN0c2CNChechnya000022Vietnam#VN.TT0c2TTThua Thien Hue00001AGuinea#GN.CK0c2CKConakry000021Thailand#TH.SP0c2SPSamut Prakan000019Nauru#NR.AR0c2ARAnibare000018Wisconsin#1110c2SASauk000019NewWorld#1260c2TWTaiwan000020Washington#0710c2WLWalla walla000019Indiana#1730c2WIWarrick00001AVirginia#1150c2MTMathews00001DAfrica#0450c2ZASouth Africa000018Kansas#1670c2RSRussell00001BIllinois#2030c2WFWoodford00001AMissouri#1230c2MDMadison000019California#0270c2INInyo000019Texas#1950c2HANHansford000019Ohio#1570c2TUTuscarawas000019Nebraska#1270c2NENemaha00001AGeorgia#0030c2ATAtkinson000018Europe#0100c2DKDenmark00001BMinnesota#0550c2HUHouston00001BKentucky#0390c2CRCarlisle00001AMichigan#0490c2GEGenesee000019SouthKorea#150c2TGDaegu000023USARegion#030c2SESouthEast Region00002AUSASouthEastRegion#370c2NCNorth Carolina00001BBangladesh#850c2BABarisal000021Finland#130c2SFSouthern Finland00001ASuriname#140c2NINickerie000016Taiwan#140c2PHPenghu00001CIndonesia#080c2JIEast Java000029BritishColumbia#060c2CKCentral Kootenay000016Albania#400c2BRBerat00001DJamacia#160c2WEWestmoreland00001DColombia#170c2LAGLa Guajira00001ANorway#020c2AAAust-Agder00001AIraq#070c2BGBaghd&#257;d000018Argentina#030c2CCChaco000026PolandCounties#PL.DS.WR0c2DWRWroclaw000023FrenchGuiana#GF.CY.OU0c2OUOuanary00001BEurope2#EU.HY0c2HYCroatia00001AEurope2#EU.JE0c2JEJersey00001CBrunei#BN.TE0c2TETemburong00001ABhutan#BT.PN0c2PNPunakha000027Philippines#PH.LN0c2LNLanao del Norte00002APhilippines#PH.MD0c2MDMisamis Occidental00001FMongolia#MN.GS0c2GSGovisumber00001AChina2#CN.SA0c2SAShaanxi000019Guinea#GN.DB0c2DBDabola00001AThailand#TH.TG0c2TGTrang00001DSyria#SY.RD0c2RDRif Dimashq00001CTennessee#0370c2DADavidson000017Montana#0990c2TETeton00001CNewWorld#1270c2HKHong Kong000013Iowa#0410c2CYClay000016Africa#0460c2SDSudan000019Texas#3770c2PREPresidio000024Louisiana#1210c2WBWest Baton Rouge000024Virginia#8400c2WTWinchester (City)00001FNorthCarolina#0330c2CSCaswell000019Georgia#1850c2LWLowndes000018Kentucky#2210c2TRTrigg000018Illinois#0230c2CLClark00001BMississippi#1310c2STStone000018Europe#0110c2EEEstonia00001BPuertoRico#1410c2UTUtuado000025Pennsylvania#0970c2NTNorthumberland000017Texas#0150c2AUSAustin000015Idaho#0330c2CLClark00001BArkansas#1210c2RARandolph000018Oregon#0350c2KLKlamath000020SouthKorea#160c2CNJeollanam-do000023USARegion#040c2SWSouthWest Region000017Peru#010c2AMAAmazonas000018Uruguay#010c2ARArtigas00001ABangladesh#860c2SYSylhet000020Finland#140c2EFEastern Finland000016Suriname#150c2PRPara000018Taiwan#150c2PTPingtung000029BritishColumbia#070c2COCentral Okanagan00001BAlbania#410c2DIDib&euml;r000019Jamacia#170c2KIKingston000018Iraq#080c2DADah&#363;k000019Argentina#040c2CHChubut000019Fiji#FJ.WE.ND0c2NDNandi000024MarshallIsland#MH.MH.ER0c2ERErikub000020FrenchGuiana#GF.SL.MN0c2MNMana00001CBurkinaFaso#BF.PO0c2POPoni00002AMorocco#MA.OL0c2OLOued Ed Dahab-Lagouira00002FTanzania#TZ.ZS0c2ZSZanzibar Central and South000019Brunei#BN.BE0c2BEBelait00001EMacedonia#MK.NG0c2NGNegotino00001CRussia#RU.VG0c2VGVolgograd00001BUganda#UG.NT0c2NTNtungamo00001ATunisia#TN.KB0c2KBKebili00001CVietnam#VN.TV0c2TVTra Vinh000017Nauru#NR.UA0c2UAUaboe00001DThailand#TH.SR0c2SRSaraburi00001EVietnam#VN.BU0c2BUBinh Thuan00001BVietnam#VN.DA0c2DADa Nang000024SaoTomeandPrincipe#ST.LE0c2LELemba000018Nauru#NR.AT0c2ATAnetan00001AWisconsin#1130c2SWSawyer000018NewWorld#1280c2MOMacau00001CWashington#0730c2WAWhatcom00001CIndiana#1750c2WSWashington00001EVirginia#1170c2MEMecklenburg00001AAfrica#0470c2SZSwaziland000017Kansas#1690c2SASaline000019Missouri#1250c2MEMaries000019California#0290c2KEKern000019Texas#1970c2HARHardeman000026Virginia#6600c2HRHarrisonburg (City)000014Ohio#1590c2UNUnion00001BNebraska#1290c2NUNuckolls000017Georgia#0050c2BABacon000018Europe#0120c2FIFinland00001BMinnesota#0570c2HBHubbard00001AKentucky#0410c2COCarroll00001AMichigan#0510c2GLGladwin000027NewCaledonia#NC.NO.KG0c2KGKaala-Gomen000036SaintKittsandNevis#010c2CCChrist Church Nichola Town000021Argentina#050c2CBC&oacute;rdoba000025SouthKorea#170c2GNChungcheongnam-do000021USARegion#050c2CRCentral Region000015Peru#020c2ANCAncash00001AUruguay#020c2CACanelones000020Finland#150c2WFWestern Finland00001CSuriname#160c2PMParamaribo000018Taiwan#160c2THTaichung00001DIndonesia#100c2YOYogyakarta000029BritishColumbia#080c2CSColumbia-Shuswap00001CAlbania#420c2DRDurr&euml;s000017Colombia#190c2METMeta000018Norway#040c2BUBuskerud00001FIraq#090c2DQDh&#299; Q&#257;r000016Mali#ML.SG0c2SGSegou00001AZambia#ZM.WE0c2WEWestern000029Macedonia#MK.MR0c2MRMavrovo and Rostusa00001ASudan#SD.NO0c2NONorthern000019Uganda#UG.OK0c2OKKoboko00001AVanuatu#VU.PM0c2PMPenama00001AChina2#CN.SC0c2SCSichuan000022FranceDepartment#FR.RH0c2RHRhone00001DVietnam#VN.VC0c2VCVinh Phuc000021Thailand#TH.SS0c2SSSamut Sakhon000021Vietnam#VN.BV0c2BVBaRia-VungTau00001DVietnam#VN.DB0c2DBDien Bien00001BTennessee#0390c2DEDecatur000017Montana#1010c2TOToole00001ANewWorld#1290c2ALAlbania000016Iowa#0430c2CTClayton000019Africa#0480c2TZTanzania000016Texas#3790c2RAIRains000020Louisiana#1230c2WCWest Carroll00001FNorthCarolina#0350c2CTCatawba000019Georgia#1870c2LPLumpkin00001AKentucky#2230c2TITrimble000017Illinois#0250c2CYClay00001FMississippi#1330c2SUSunflower000017Europe#0130c2FRFrance00001EPuertoRico#1430c2VAVega Alta00001CPennsylvania#0990c2PEPerry000017Texas#0170c2BAIBailey00001AIdaho#0350c2CWClearwater00001EArkansas#1230c2SFSt. Francis000015Oregon#0370c2LALake000032SaintKittsandNevis#020c2ASSaint Anne Sandy Point00001DArgentina#060c2CNCorrientes00001BSouthKorea#180c2KJGwangju000014China#360c2TBTibet000017Peru#030c2APUApurimac00001CUruguay#030c2CLCerro Largo00001BSuriname#170c2SASaramacca000022USANorthWestRegion#020c2AKAlaska00001FTaiwan#170c2TGTaichung (City)000022Indonesia#110c2KBWest Kalimantan000029BritishColumbia#090c2CMComox-Strathcona000018Albania#430c2ELElbasan000020Colombia#200c2NARNari&ntilde;o000018Norway#050c2FIFinnmark00001EIraq#100c2DIDiy&#257;l&#257;00002DSierraLeone#SL.WE.WR0c2WRWestern Area Rural000027FrenchGuiana#GF.SL.MP0c2MPMaripasoula000038NorthWestTerritories#CA.NT.WB0c2WBWood Buffalo Country00001CMauritania#MR.AD0c2ADAdrar000018Jordan#JO.AZ0c2AZZarqa00001DMacedonia#MK.NI0c2NIVinitsa000020CoteDivoire#CI.MR0c2MRMarahoue00001AGabon#GA.ES0c2ESEstuaire00001BChina2#CN.SD0c2SDShandong000018Guinea#GN.CO0c2COCoyah000020Thailand#TH.ST0c2STSurat Thani00001BLibya#LY.BU0c2BUAl Butnan000018Iran#IR.BS0c2BSBushehr00001AVietnam#VN.CM0c2CMCa Mau00001BVietnam#VN.DC0c2DCDac Lac00001BWisconsin#1150c2SHShawano00001ANewWorld#1300c2ADAndorra00001CWashington#0750c2WHWhitman000017Indiana#1770c2WYWayne00001CVirginia#1190c2MIMiddlesex000015Africa#0490c2TGTogo000016Kansas#1710c2SCScott000019Missouri#1270c2MAMarion00001ACalifornia#0310c2KIKings000017Texas#1990c2HADHardin000017Ohio#1610c2VWVan Wert00001CNetherland#0010c2DRDrenthe000017Nebraska#1310c2OTOtoe000017Georgia#0070c2BKBaker000018Europe#0140c2DEGermany00001AMinnesota#0590c2ISIsanti000019Kentucky#0430c2CTCarter00001AMichigan#0530c2GOGogebic000033SaintKittsandNevis#030c2GBSaint George Basseterre000023Argentina#070c2DFDistrito Federal00001BSouthKorea#190c2TJDaejeon000017Peru#040c2AREArequipa000018Uruguay#040c2COColonia00001CSuriname#180c2SISipaliwini000016Taiwan#180c2TATainan000023Indonesia#120c2KSSouth Kalimantan000028BritishColumbia#100c2CVCowichan Valley000015Albania#440c2FRFier000025Colombia#210c2NSANorte de Santander000017Norway#060c2HEHedmark000018Iraq#110c2ARArb&#299;l000025CaymanIslands#KY.CB0c2CBCayman Brac00001EThailand#TH.AT0c2ATAng Thong00001ACongo#CG.PL0c2PLPlateaux00001BEurope2#EU.IS0c2ISIceland000019Algeria#DZ.MS0c2MSMsila00001DLiberia#LR.RG0c2RGRiver Gee000017Bhutan#BT.PR0c2PRParo000019Laos#LA.HO0c2HOHouaphan000017Benin#BJ.OU0c2OUOueme00001FVietnam#VN.TY0c2TYThai Nguyen00001AThailand#TH.SU0c2SUSurin000018Thailand#TH.TK0c2TKTak00001BVietnam#VN.CN0c2CNCan Tho00001ATennessee#0410c2DKDeKalb00001AMontana#1030c2TRTreasure00001ANewWorld#1310c2ATAustria000016Iowa#0450c2CNClinton000018Texas#3810c2RANRandall000022Louisiana#1250c2WFWest Feliciana00001FNorthCarolina#0370c2CHChatham00001AGeorgia#1890c2MCMcduffie000018Kentucky#2250c2UNUnion00001ENetherland#0020c2FLFlevoland00001AIllinois#0270c2CNClinton000022Mississippi#1350c2TATallahatchie000017Europe#0150c2GRGreece00001EPuertoRico#1450c2VBVega Baja000023Pennsylvania#1010c2PHPhiladelphia000018Texas#0190c2BANBandera000016Idaho#0370c2CUCuster000019Arkansas#1250c2SASaline000015Oregon#0390c2LELane00002FMadagascarRegions#MG.FI.AM0c2AMAmoron'i Mania000033SaintKittsandNevis#040c2GGSaint George Gingerland000024Argentina#080c2EREntre R&iacute;os000024SouthKorea#200c2KNGyeongsangnam-do000017Peru#050c2AYAAyacucho000018Uruguay#050c2DUDurazno000018Suriname#190c2WAWanica00001DTaiwan#190c2TNTainan (City)000025Indonesia#130c2KTCentral Kalimantan000026BritishColumbia#110c2EKEast Kootenay000021Albania#450c2GJGjirokast&euml;r00001BColombia#220c2PUTPutumayo000019Norway#070c2HOHordaland000015Iraq#120c2KAKarbala000019Europe2#EU.IT0c2ITItaly000022Tanzania#TZ.ZW0c2ZWZanzibar West00001DUzbekistan#UZ.JI0c2JIJizzax000015UK7#UK.WA0c2WAWales000025Philippines#PH.LS0c2LSLanao del Sur00002FCentralAmerica2#CE.AG0c2AGAntigua and Barbuda00001CMongolia#MN.HN0c2HNKhentii000018Uganda#UG.PD0c2PDPader000019Benin#BJ.PL0c2PLPlateau000017Tunisia#TN.KF0c2KFKef00001CLibya#LY.BW0c2BWBani Walid00001DWisconsin#1170c2SESheboygan00001ANewWorld#1320c2BYBelarus00001BWashington#0770c2YAYakima000017Indiana#1790c2WEWells00001DVirginia#1210c2MOMontgomery000018Africa#0510c2TNTunisia000019Kansas#1730c2SGSedgwick000019Missouri#1290c2MCMercer000019California#0330c2LALake000017Texas#2010c2HASHarris000015Ohio#1630c2VIVinton00001ENetherland#0030c2FRFriesland000019Nebraska#1330c2PAPawnee000019Georgia#0090c2BDBaldwin000018Europe#0160c2HUHungary00001AMinnesota#0610c2ITItasca000018Kentucky#0450c2CSCasey000021Michigan#0550c2GTGrand Traverse000027MadagascarRegions#MG.TL.AD0c2ADAndroy000030SaintKittsandNevis#050c2JWSaint James Windward00001AArgentina#090c2FMFormosa000019SouthKorea#210c2ULUlsan000018Peru#060c2CAJCajamarca000017Uruguay#060c2FSFlores000013USA#AK0c2AKAlaska000016Taiwan#200c2TPTaipei000022Indonesia#140c2KIEast Kalimantan000026BritishColumbia#120c2FVFraser Valley000022Albania#460c2KOKor&ccedil;&euml;000021Colombia#230c2QUIQuind&iacute;o000026Norway#080c2MRM&oslash;re og Romsdal000017Iraq#130c2TSAt-Ta'mim00002DSierraLeone#SL.WE.WU0c2WUWestern Area Urban00002CDistrictofColumbia#US.DC.SW0c2SWSouth West000015Nauru#NR.BO0c2BOBoe00001EThailand#TH.CB0c2CBChon Buri000018Mali#ML.SK0c2SKSikasso00001DLiberia#LR.RI0c2RIRivercess000021Kazakhstan#KZ.QG0c2QGQaraghandy00001BRussia#RU.VL0c2VLVladimir000020SolomonIsland#SB.TE0c2TETemotu00001BTennessee#0430c2DIDickson000018Montana#1050c2VAValley00001ANewWorld#1330c2BEBelgium000017Iowa#0470c2CFCrawford000017Africa#0520c2UGUganda000017Texas#3830c2REAReagan000018Louisiana#1270c2WIWinn000020NorthCarolina#0390c2CECherokee00001AGeorgia#1910c2MIMcintosh000019Kentucky#2270c2WAWarren00001FNetherland#0040c2GEGelderland000018Illinois#0290c2COColes00001AMississippi#1370c2TETate000018Europe#0170c2ISIceland00001CPuertoRico#1470c2VQVieques00001BPennsylvania#1030c2PIPike000018Texas#0210c2BASBastrop000016Idaho#0390c2ELElmore000018Arkansas#1270c2SCScott000018Oregon#0410c2LILincoln000036NewfoundlandandLabrador#CA.NF.LA0c2LALabrador Region000031SaintKittsandNevis#060c2JCSaint John Capesterre000018Argentina#100c2JYJujuy000015Peru#070c2CALCallao000018Uruguay#070c2FDFlorida000014USA#AL0c2ALAlabama00001DTaiwan#210c2TCTaipei (City)00001AIndonesia#150c2LALampung00002BBritishColumbia#130c2FGFraser-Fort George00001BAlbania#470c2KUKuk&euml;s00001CColombia#240c2RISRisaralda000021EnglandRegion#010c2NENorth East000018Norway#090c2NONordland000019Iraq#140c2MAMays&#257;n000027Alberta#CA.AB.CR0c2CRCanadian Rockies000021Thailand#TH.CC0c2CCChachoengsao00001BMali#ML.TB0c2TBTombouctou00001EEthiopia#ET.DD0c2DDDire Dawa000016Congo#CG.PO0c2POPool00001CMorocco#MA.OR0c2OROriental000022Algeria#DZ.OB0c2OBOum el-Bouaghi000017Mali#ML.BA0c2BABamako00001CMacedonia#MK.OC0c2OCKocani000020Philippines#PH.LU0c2LULa Union000025CoteDivoire#CI.MV0c2MVMoyen-Cavally00001CRussia#RU.CV0c2CVChuvashia00001BChina2#CN.SH0c2SHShanghai00001DGuinea#GN.DI0c2DIDinguiraye00001EThailand#TH.UD0c2UDUttaradit00001ASyria#SY.QU0c2QUQuneitra00002CIran#IR.CM0c2CMChahar Mahall and Bakhtiari000021FranceDepartment#FR.AB0c2ABAube00001AWisconsin#1190c2TATaylor000029NewWorld#1340c2BHBosnia and Herzegovina000017Indiana#1810c2WHWhite00001FAfrica#0530c2WSWestern Sahara000017Kansas#1750c2SWSeward000019Missouri#1310c2MLMiller00001BCalifornia#0350c2LSLassen000019Texas#2030c2HRSHarrison000015Ohio#1650c2WAWarren00001ENetherland#0050c2GRGroningen00001ANebraska#1350c2PEPerkins000017Georgia#0110c2BNBanks000018Europe#0180c2IEIreland00001BMinnesota#0630c2JAJackson00001CKentucky#0470c2CHChristian00001AMichigan#0570c2GAGratiot000022NewCaledonia#NC.NO.KM0c2KMKoumac000031MadagascarRegions#MG.TL.AF0c2AFAtsimo-Andrefana00002ESaintKittsandNevis#070c2JFSaint John Figtree00001BArgentina#110c2LPLa Pampa000014Peru#080c2CUSCusco00001AUruguay#080c2LALavalleja00002AUSASouthEastRegion#450c2SCSouth Carolina000017Taiwan#220c2TTTaitung00002ABritishColumbia#140c2GVGreater Vancouver00001BAlbania#480c2LELezh&euml;000034Colombia#250c2SAPSan Andr&eacute;s and Providencia000021EnglandRegion#020c2NWNorth West00001ENorway#100c2NTNord-Trondelag00001EIraq#150c2NIN&#299;naw&#257;00001BMacedonia#MK.OD0c2ODOhrid000025Singapore#SG.NO0c2NONorth Singapore000018China2#CN.AH0c2AHAnhui000015Oregon#0430c2LNLinn000018Tennessee#0450c2DYDyer00001BMontana#1070c2WHWheatland00001BNewWorld#1350c2BGBulgaria00001CMaine#0010c2ANAndroscoggin000015Iowa#0490c2DADallas000017Africa#0540c2ZMZambia000015Texas#3850c2RELReal000017Indiana#0010c2ADAdams00001ENorthCarolina#0410c2COChowan000017Georgia#1930c2MAMacon00001DKentucky#2290c2WSWashington00001CNetherland#0060c2LILimburg000017Illinois#0310c2CKCook00001CMississippi#1390c2TPTippah000016Europe#0190c2ITItaly00001DPuertoRico#1490c2VLVillalba00001DPennsylvania#1050c2POPotter000017Texas#0230c2BAYBaylor000018Idaho#0410c2FRFranklin000019Arkansas#1290c2SESearcy000027NewCaledonia#NC.NO.KN0c2KNKon&eacute;00002CSaintKittsandNevis#080c2MCSaint Mary Cayon00001BArgentina#120c2LRLa Rioja00001CPuertoRico#010c2AJAdjuntas00001BPeru#090c2HUVHuancavelica00001AUruguay#090c2MAMaldonado000017Taiwan#230c2TYTaoyuan000025Indonesia#170c2NBWest Nusa Tenggara000028BritishColumbia#150c2KSKitimat-Stikine00001DAlbania#490c2SHShkod&euml;r00001CColombia#260c2SANSantander00001FScotlandRegion#780c2BOBorders00002FEnglandRegion#030c2YHYorkshire and the Humber000017Norway#110c2OPOppland000025ElSalvador#010c2AHAhuachap&aacute;n000018Iraq#160c2WAW&#257;sit000028Alberta#CA.AB.EA0c2EAEdmonton and Area000021FranceDepartment#FR.AD0c2ADAude000020SriLanka#LK.PR0c2PRPolonnaruwa000023Brunei#BN.BM0c2BMBrunei and Muara000020Philippines#PH.NC0c2NCCotabato00001ARussia#RU.VO0c2VOVologda00001DSamoa #WS.GE0c2GEGagaemauga000024Kiribati#KI.GI0c2GIGilbert Islands00001FGuyana#GY.BA0c2BABarima-Waini00001AMalawi#MW.KR0c2KRKaronga00002BFranceDepartment#FR.SE0c2SESeine et Marne000027NorthAmerica_WOCentral#0160c2MXMexico00001FWisconsin#1210c2TRTrempealeau00001ANewWorld#1360c2HYCroatia000019Indiana#1830c2WLWhitley000019Virginia#1250c2NENelson000019Africa#0550c2ZWZimbabwe000018Kansas#1770c2SNShawnee00001FMexico#0010c2AGAguascalientes00001EMissouri#1330c2MSMississippi000020California#0370c2LOLos Angeles000018Texas#2050c2HRTHartley000019Ohio#1670c2WSWashington000022Netherland#0070c2NONoord-Brabant000019Nebraska#1370c2PHPhelps000018Georgia#0130c2BWBarrow000017Europe#0200c2LVLatvia00001BMinnesota#0650c2KAKanabec000018Kentucky#0490c2CKClark00001CMichigan#0590c2HIHillsdale000016Iraq#170c2NAAn-Najaf000031SaintKittsandNevis#090c2PPSaint Paul Capesterre00001AArgentina#130c2MZMendoza00001DGrenada#010c2ANSaint Andrew000016Peru#100c2HUCHuanuco00001BUruguay#100c2MOMontevideo000025USASouthEastRegion#470c2TNTennessee000015Taiwan#240c2ILYilan000025Indonesia#180c2NTEast Nusa Tenggara00002ABritishColumbia#160c2KBKootenay Boundary00001CAlbania#500c2TRTiran&euml;000018Colombia#270c2SUCSucre00001FScotlandRegion#790c2CECentral000024EnglandRegion#040c2EMEast Midlands000014Norway#120c2OSOslo000022ElSalvador#020c2CACaba&ntilde;as000022Fiji#FJ.WE.NN0c2NNNadroga-Navosa00001ANigeria#NG.RI0c2RIRivers000028Philippines#PH.MN0c2MNMisamis Oriental000029Philippines#PH.ND0c2NDNegros Occidental000024CentralAmerica2#CE.BB0c2BBBarbados00001AMalawi#MW.KS0c2KSKasungu00001BMalawi#MW.LI0c2LILilongwe000019China2#CN.TA0c2TATaiwan000019Guinea#GN.DL0c2DLDalaba000018Oregon#0450c2MAMalheur00001BTennessee#0470c2FAFayette000018Montana#1090c2WIWibaux000021NewWorld#1370c2CZCzech Republic000019Maine#0030c2ARAroostook000014Iowa#0510c2DVDavis000017Africa#0560c2GMGambia00001ATexas#3870c2REDRed River000017Indiana#0030c2ALAllen000020Mexico#0020c2BABaja California00001CNorthCarolina#0430c2CYClay000019Georgia#1950c2MDMadison000018Kentucky#2310c2WYWayne000022Netherland#0080c2NHNoord-Holland00001BIllinois#0330c2CFCrawford000020Mississippi#1410c2TITishomingo00001EEurope#0210c2LILiechtenstein00001CPuertoRico#1510c2YBYabucoa000021Pennsylvania#1070c2SCSchuylkill000014Texas#0250c2BEEBee000017Idaho#0430c2FEFremont00001CArkansas#1310c2SBSebastian000033PrinceEdwardIsland#CA.PE.CS0c2CSCharlotte's Shore000020ElSalvador#030c2CHChalatenango000024Iraq#180c2SDSal&#257;h ad-D&#299;n000032SaintKittsandNevis#100c2PLSaint Paul Charlestown00001BArgentina#140c2MNMisiones00001APuertoRico#030c2ADAguada00001CGrenada#020c2DASaint David000012Peru#110c2ICAIca000020Uruguay#110c2PAPaysand&uacute;000016Taiwan#250c2YLYunlin000029BritishColumbia#170c2MWMount Waddington00001BAlbania#510c2VLVlor&euml;000019Colombia#280c2TOLTolima00002DScotlandRegion#800c2DGDumfries and Galloway000024EnglandRegion#050c2WMWest Midlands00001ENorway#130c2OT&Oslash;stfold000025SaoTomeandPrincipe#ST.LO0c2LOLobata000021Burma#MM.YA0c2YAYangon Division00001FLesotho#LS.TT0c2TTThaba-Tseka000023Philippines#PH.NE0c2NENueva Ecija00001BTanzania#TZ.IR0c2IRIringa00001DVietnam#VN.VL0c2VLVinh Long00001APalau#PW.KA0c2KAKayangel00001AWisconsin#1230c2VEVernon00001ANewWorld#1380c2DKDenmark00001BVirginia#1270c2NKNew Kent000016Africa#0570c2CGCongo000019Kansas#1790c2SDSheridan000024Mexico#0030c2BCBaja California Sur00001BMissouri#1350c2MIMoniteau00001BCalifornia#0390c2MAMadera000018Texas#2070c2HSKHaskell000022Virginia#6700c2HOHopewell (City)000014Ohio#1690c2WYWayne00001FNetherland#0090c2OVOverijssel000019Nebraska#1390c2PIPierce000018Georgia#0150c2BTBartow00001AEurope#0220c2LTLithuania00001DMinnesota#0670c2KNKandiyohi000017Kentucky#0510c2CYClay00001BMichigan#0610c2HOHoughton000018Norway#140c2RORogaland000024ElSalvador#040c2CUCuscatl&aacute;n000032SaintKittsandNevis#110c2PBSaint Peter Basseterre000021Argentina#150c2NQNeuqu&eacute;n00001DGrenada#030c2GESaint George000014Peru#120c2JUNJunin00001AUruguay#120c2RNRio Negro000020BritishColumbia#180c2NANanaimo000022Colombia#290c2VACValle del Cauca00001CScotlandRegion#810c2FIFife00001BEnglandRegion#060c2EAEast000023FranceDepartment#FR.AG0c2AGAriege000017Nauru#NR.BU0c2BUBuada000025CaymanIslands#KY.BT0c2BTBodden Town00001DThailand#TH.BR0c2BRBuri Ram000023Somalia#SO.WO0c2WOWoqooyi Galbeed00001BAlgeria#DZ.OG0c2OGOuargla000022PapuaNewGuinea#PG.WE0c2WEWestern00001BRussia#RU.VR0c2VRVoronezh00001ALibya#LY.WA0c2WAAl Wahah000019Malawi#MW.LK0c2LKLikoma00001BMalawi#MW.MA0c2MAMachinga000022Massachusetts#0010c2BABarnstable000017Oregon#0470c2MRMarion00001CTennessee#0490c2FEFentress00001DMontana#1110c2YSYellowstone00001ANewWorld#1390c2EEEstonia00001AMaine#0050c2CUCumberland000018Oklahoma#0010c2ADAdair000016Iowa#0530c2DEDecatur00001AAfrica#0580c2MUMauritius000017Texas#3890c2REVReeves00001DIndiana#0050c2BABartholomew000019Mexico#0040c2CACampeche000021NorthCarolina#0450c2CVCleveland000018Georgia#1970c2MRMarion00001AKentucky#2330c2WBWebster00001CNetherland#0100c2UTUtrecht00001DIllinois#0350c2CMCumberland00001CMississippi#1430c2TUTunica00001BEurope#0230c2LULuxembourg00001APuertoRico#1530c2YUYauco00001DPennsylvania#1090c2SNSnyder000015Texas#0270c2BELBell00001ENewHampshire#0010c2BEBelknap000013Idaho#0450c2GEGem000019Arkansas#1330c2SVSevier00001DEnglandRegion#070c2LOLondon000020Norway#150c2SOSogn og Fjordane00001FElSalvador#050c2LILa Libertad000030SaintKittsandNevis#120c2TLSaint Thomas Lowland00001CArgentina#160c2RNRio Negro00001DPuertoRico#050c2ALAguadilla00001BGrenada#040c2JOSaint John00001APeru#130c2LALLa Libertad000017Uruguay#130c2RVRivera000015USA#AR0c2ARArkansas000023Indonesia#210c2STCentral Sulawesi000027BritishColumbia#190c2NONorth Okanagan000020Colombia#300c2VAUVaup&eacute;s000020ScotlandRegion#820c2GPGrampian000025PolandCounties#PL.WN.EM0c2WEMElblag000024FranceDepartment#FR.AH0c2AHArdeche00001FMacedonia#MK.NS0c2NSNovo Selo000022Philippines#PH.MQ0c2MQMarinduque00001AUganda#UG.PL0c2PLPallisa00001FSamoa #WS.GI0c2GIGagaifomauga000019Thailand#TH.TT0c2TTTrat000019Wisconsin#1250c2VIVilas00001ANewWorld#1400c2FIFinland000018Kansas#1810c2SHSherman000018Mexico#0050c2CHChiapas000019Missouri#1370c2MRMonroe00001ACalifornia#0410c2MRMarin000015Texas#2090c2HYSHays000017Ohio#1710c2WIWilliams00001CNetherland#0110c2ZEZeeland000019Nebraska#1410c2PLPlatte00001AGeorgia#0170c2BHBen hill00001AEurope#0240c2MKMacedonia00001BMinnesota#0690c2KIKittson00001AKentucky#0530c2CNClinton000018Michigan#0630c2HUHuron000025MadagascarRegions#MG.AS.SV0c2SVSava000021EnglandRegion#080c2SESouth East00002BNorway#160c2STS&oslash;r-Tr&oslash;ndelag00001AElSalvador#060c2PALa Paz000036SaintKittsandNevis#130c2TMSaint Thomas Middle Island000018Argentina#170c2SASalta00001BGrenada#050c2MASaint Mark000019Peru#140c2LAMLambayeque000016Uruguay#140c2RORocha000026Indonesia#220c2SGSouth East Sulawesi000029BritishColumbia#200c2NRNorthern Rockies00001AColombia#310c2CIDVichada000020ScotlandRegion#830c2HIHighland000026NovaScotia#CA.NS.MD0c2MDMarine Drive00001AFiji#FJ.CE.NM0c2NMNamosi000020FranceDepartment#FR.AI0c2AIAin00001CVietnam#VN.DN0c2DNDong Nai000020Kazakhstan#KZ.QO0c2QOQyzylorda000018Nigeria#NG.AB0c2ABAbia00001ASenegal#SN.FK0c2FKFatick00001DUzbekistan#UZ.KH0c2KHXorazm000028Philippines#PH.MR0c2MROriental Mindoro00001DSerbia#RS.ZC0c2ZCWest Backa00001AMalawi#MW.MC0c2MCMchinji000020Iran#IR.WA0c2WAWest Azarbaijan000021Massachusetts#0030c2BEBerkshire000017Oregon#0490c2MOMorrow00001CTennessee#0510c2FRFranklin000019NewWorld#1410c2FRFrance000018Maine#0070c2FRFranklin00001AOklahoma#0030c2ALAlfalfa000017Iowa#0550c2DLDelaware000016Alaska#2200c2SISitka000017Delaware#0010c2KEKent000018Texas#3910c2REFRefugio000018Indiana#0070c2BEBenton00001AMexico#0060c2CIChihuahua000020NorthCarolina#0470c2CUColumbus00001CGeorgia#1990c2MEMeriwether000016Kansas#0010c2ALAllen00001AKentucky#2350c2WHWhitley000021Netherland#0120c2ZUZuid-Holland000019Illinois#0370c2DEDeKalb00001BMississippi#1450c2UNUnion000016Europe#0250c2MTMalta00001FPennsylvania#1110c2SOSomerset000016Texas#0290c2BEXBexar00001ENewHampshire#0030c2CACarroll000017Idaho#0470c2GOGooding000018Arkansas#1350c2SHSharp000021EnglandRegion#090c2SWSouth West000018Norway#170c2TETelemark000023ElSalvador#070c2UNLa Uni&oacute;n00001BArgentina#180c2SJSan Juan000020PuertoRico#070c2ABAguas Buenas00001EGrenada#060c2PASaint Patrick000013Peru#150c2LIMLima000016Uruguay#150c2SASalto000022Honduras#010c2ATAtl&aacute;ntida00002DBritishColumbia#210c2OSOkanagan-Similkameen00001BColombia#320c2CASCasanare00001FScotlandRegion#840c2LOLothian000021SierraLeone#SL.SO.BN0c2BNBonthe000020Iran#IR.EA0c2EAEast Azarbaijan00001CVietnam#VN.DO0c2DODac Nong00001DSriLanka#LK.PX0c2PXPuttalam00001DMauritania#MR.TG0c2TGTagant00002CPapuaNewGuinea#PG.WH0c2WHWestern Highlands000021HongKong#HK.WT0c2WTWong Tai Sin00001FPapuaNewGuinea#PG.EG0c2EGEnga00001BYemen#YE.HD0c2HDHadramawt00001FLibya#LY.WD0c2WDWadi al Hayat000021FranceDepartment#FR.TA0c2TATarn00001CWisconsin#1270c2WAWalworth00001ANewWorld#1420c2DEGermany00001EVirginia#1310c2NTNorthampton000016Kansas#1830c2SMSmith000025Mexico#0070c2COCoahuila de Zaragoza00001DMissouri#1390c2MYMontgomery00001DCalifornia#0430c2MIMariposa000019Texas#2110c2HEPHemphill000013Ohio#1730c2WOWood000017Nebraska#1430c2POPolk000019Georgia#0190c2BIBerrien000018Europe#0260c2MDMoldova00001FMinnesota#0710c2KOKoochiching00001DKentucky#0550c2CDCrittenden000019Michigan#0650c2INIngham000026MadagascarRegions#MG.AV.IT0c2ITItasy000015Norway#180c2TRTroms000022ElSalvador#080c2MOMoraz&aacute;n000032SaintKittsandNevis#150c2TPTrinity Palmetto Point00001BArgentina#190c2SLSan Luis000015Peru#160c2LORLoreto000019Uruguay#160c2SJSan Jose000017USA#CA0c2CACalifornia000027Croatia#010c2BBBjelovarsko-Bilogorska00001BHonduras#020c2CHCholuteca00001FIndonesia#240c2SBWest Sumatra000024BritishColumbia#220c2PRPeace River00001FColombia#330c2CUNCundinamarca00001DSierraLeone#SL.SO.BO0c2BOBo000025PolandCounties#PL.PK.KM0c2PKMKrosno00001DNunavut#CA.NU.QK0c2QKBaffin00001BBotswana#BW.GH0c2GHGhanzi00001CNauru#NR.DE0c2DEDenigomodu000019Brunei#BN.TU0c2TUTutong000019Liberia#LR.SI0c2SISinoe00001BNigeria#NG.AD0c2ADAdamawa000025Panama#PA.KM0c2KMKuna de Madungandi00001DMacedonia#MK.NV0c2NVNovatsi000029Philippines#PH.MT0c2MTMountain Province00002CPapuaNewGuinea#PG.EH0c2EHEastern Highlands000017Uganda#UG.OY0c2OYOyam00002BFranceDepartment#FR.SL0c2SLSaone et Loire000032FranceDepartment#FR.TB0c2TBTerritoire de Belfort00001FMassachusetts#0050c2BRBristol00001AOregon#0510c2MUMultnomah00002ENorthAmerica_WOCentral#0230c2USUnited States00001ATennessee#0530c2GIGibson000019NewWorld#1430c2GRGreece000017Maine#0090c2HAHancock000018Oklahoma#0050c2ATAtoka000019Iowa#0570c2DMDes Moines00001DDelaware#0030c2NENew castle000018Texas#3930c2ROBRoberts00001BIndiana#0090c2BLBlackford000017Mexico#0080c2CLColima00001ENorthCarolina#0490c2CNCraven000018Georgia#2010c2MLMiller000019Kansas#0030c2ANAnderson000018Kentucky#2370c2WOWolfe00001AIllinois#0390c2DWDe Witt00001EMississippi#1470c2WAWalthall000017Europe#0270c2MCMonaco00001FPennsylvania#1130c2SUSullivan000017Texas#0310c2BLABlanco00001FNewHampshire#0050c2CHCheshire000015Idaho#0490c2IDIdaho000018Arkansas#1370c2STStone000029NewCaledonia#NC.SU.DU0c2DUDumb&eacute;a000022NewCaledonia#NC.SU.FA0c2FAFarino00001ANorway#190c2VAVest-Agder00001EElSalvador#090c2SMSan Miguel00001DArgentina#200c2SCSanta Cruz00001CPuertoRico#090c2AIAibonito00001CPeru#170c2MDDMadre de Dios000018Uruguay#170c2SOSoriano000021Croatia#020c2SPBrodsko-Posavska00001EHonduras#030c2CLCol&oacute;n000021USANorthWestRegion#160c2IDIdaho000025BritishColumbia#230c2POPowell River000032Colombia#340c2DCBogot&aacute; (Distrito Capital)000025PolandCounties#PL.MA.KM0c2MKMKrakow000026FrenchGuiana#GF.SL.PA0c2PAPapaichton000023FranceDepartment#FR.AL0c2ALAllier00001CKyrgyzstan#KG.NA0c2NANaryn00001FThailand#TH.CM0c2CMChiang Mai00001CTunisia#TN.KR0c2KRKairouan00002BFranceDepartment#FR.SM0c2SMSeine Maritime00001FThailand#TH.UN0c2UNUdon Thani000018Syria#SY.TA0c2TATartus000018Michigan#0670c2IOIonia00002ANorthAmerica_WOCentral#0240c2GLGreenland00001CWisconsin#1290c2WSWashburn00001ANewWorld#1440c2HUHungary000021Virginia#1330c2NHNorthumberland00001CSouthDakota#0030c2AUAurora000019Kansas#1850c2SFStafford000018Mexico#0090c2DUDurango000019Missouri#1410c2MGMorgan00001ECalifornia#0450c2MEMendocino00001ATexas#2130c2HNDHenderson000016Ohio#1750c2WDWyandot00001DNebraska#1450c2RWRed Willow000016Georgia#0210c2BBBibb00001BEurope#0280c2MOMontenegro000021Minnesota#0730c2LQLac Qui Parle00001DKentucky#0570c2CMCumberland000018Norway#200c2VEVestfold000020ElSalvador#100c2SSSan Salvador00001BArgentina#210c2SFSanta Fe000016USA#TN0c2TNTennessee000017Peru#180c2MOQMoquegua000022Uruguay#180c2TATacuaremb&oacute;00002CCroatia#030c2DNDubrova&#269;ko-Neretvanska00001BHonduras#040c2CMComayagua000017Ontario#010c2ALAlgoma000020Indonesia#260c2SUNorth Sumatra00002FBritishColumbia#240c2SQSkeena-Queen Charlotte000021Colombia#350c2BOLBol&iacute;var000023ScotlandRegion#870c2SCStrathclyde00003DNorthWestTerritories#CA.NT.WR0c2WRWaterfalls Valley (Route)00002ANovaScotia#CA.NS.LR0c2LRLighthouse Route00002CFranceDepartment#FR.AM0c2AMAlpes Maritimes00001DThailand#TH.CN0c2CNChai Nat00001DSaudiArabia#SA.JZ0c2JZJizan000018Chad#TD.SA0c2SASalamat00001FKazakhstan#KZ.QS0c2QSQostanay00001DMauritania#MR.AS0c2ASAssaba00001DZimbabwe#ZW.BU0c2BUBulawayo00001BMalawi#MW.MG0c2MGMangochi00001DTunisia#TN.KS0c2KSKasserine000017Oman#OM.MA0c2MAMuscat000018Arkansas#1390c2UNUnion00001DMassachusetts#0070c2DUDukes000015Oregon#0530c2POPolk000019Tennessee#0550c2GLGiles00001ANewWorld#1450c2ISIceland000018Maine#0110c2KEKennebec000019Oklahoma#0070c2BEBeaver000018Iowa#0590c2DIDickinson000019Delaware#0050c2SUSussex00001ATexas#3950c2ROERobertson00001CNewJersey#0010c2ATAtlantic000017Indiana#0110c2BOBoone00001BMexico#0100c2GUGuanajuato000022NorthCarolina#0510c2CBCumberland000019Kansas#0050c2ATAtchison00001BKentucky#2390c2WDWoodford00001AIllinois#0410c2DODouglas00001CMississippi#1490c2WRWarren000025WorldwithCountries#1000c2KHCambodia00001CEurope#0290c2NLNetherlands000022Pennsylvania#1150c2SQSusquehanna000017Texas#0330c2BORBorden00001BNewHampshire#0070c2COCoos000019Idaho#0510c2JEJefferson00001DElSalvador#110c2SASanta Ana000026Argentina#220c2SESantiago del Estero000021PuertoRico#110c2ANA&ntilde;asco000014Peru#190c2PASPasco00001FUruguay#190c2TTTreinta y Tres000019Croatia#040c2ISIstarska00001EHonduras#050c2CPCop&aacute;n000016Ontario#020c2BRBrant000026Poland#720c2DSDolno&#347;l&#261;skie000022Cuba#010c2PRPinar del R&iacute;o00002ABritishColumbia#250c2SLSquamish-Lillooet000020Colombia#360c2BOYBoyac&aacute;00001FScotlandRegion#880c2TATayside000022FrenchGuiana#GF.CY.RK0c2RKRegina000025FranceDepartment#FR.AN0c2ANArdennes00002DFranceDepartment#FR.BD0c2BDBouches du Rhone00001DSomalia#SO.GA0c2GAGalguduud000027CentralAmerica2#CE.SV0c2SVEl Salvador00001EMacedonia#MK.PE0c2PEPetrovec00001ANepal#NP.JA0c2JAJanakpur000017UK7#UK.EN0c2ENEngland00001AChina2#CN.TJ0c2TJTianjin000022FranceDepartment#FR.SO0c2SOSomme000021Guinea#GN.DU0c2DUDubr&eacute;ka00001AGuinea#GN.FA0c2FAFaranah00001AKentucky#0590c2DADaviess000018Michigan#0690c2ISIosco00001EWisconsin#1310c2WHWashington00001ANewWorld#1460c2IRIreland00001BVirginia#1350c2NWNottoway00001CSouthDakota#0050c2BEBeadle000018Kansas#1870c2STStanton000019Mexico#0110c2GEGuerrero00001DMissouri#1430c2NMNew Madrid00001BCalifornia#0470c2MCMerced000018Texas#2150c2HIDHidalgo000023Virginia#6780c2LXLexington (City)00001DNebraska#1470c2RIRichardson00001AGeorgia#0230c2BLBleckley000022WorldwithCountries#1010c2CNChina000017Europe#0300c2NONorway000018Minnesota#0750c2LALake00001FElSalvador#120c2SVSan Vicente000023Argentina#230c2TFTierra del Fuego000014Peru#200c2PIUPiura000020Croatia#050c2KAKarlova&#269;ka00001FHonduras#060c2CRCort&eacute;s000016Ontario#030c2BUBruce000022Poland#730c2KPKujawsko-Pomorskie000021Cuba#020c2CHCiudad de La Habana000019Indonesia#280c2MAMaluku000020BritishColumbia#260c2STStikine000019Colombia#370c2CALCaldas000025ScotlandRegion#890c2WIWestern Isles000018Libya#LY.DR0c2DRDarnah000022SolomonIsland#SB.CH0c2CHChoiseul00001AChina2#CN.BJ0c2BJBeijing00001DVietnam#VN.DT0c2DTDong Thap00001DThailand#TH.CP0c2CPChumphon00001AEurope2#EU.KO0c2KOKosovo000022Tibet#TI.QP0c2QPQamdo Prefecture00001ENewHampshire#0090c2GRGrafton000016Idaho#0530c2JRJerome00001CArkansas#1410c2VBVan Buren00001DMassachusetts#0090c2ESEssex000018Oregon#0550c2SHSherman00001CTennessee#0570c2GRGrainger000018NewWorld#1470c2ITItaly000014Maine#0130c2KNKnox00001AOklahoma#0090c2BCBeckham000016Iowa#0610c2DUDubuque000019Texas#3970c2ROCRockwall00001ANewJersey#0030c2BEBergen000017Indiana#0130c2BRBrown000018Mexico#0120c2HIHidalgo000021NorthCarolina#0530c2CKCurrituck00001AGeorgia#2050c2MTMitchell000017Kansas#0070c2BABarber000019Illinois#0430c2DPDuPage000020Mississippi#1510c2WSWashington000027WorldwithCountries#1020c2TPEast Timor000017Europe#0310c2PLPoland00001CPennsylvania#1170c2TITioga000017Texas#0350c2BOSBosque00001DElSalvador#130c2SOSonsonate000021Argentina#240c2TMTucum&aacute;n00001BPuertoRico#130c2ACArecibo000013Peru#210c2PUNPuno000014USA#AZ0c2AZArizona000036Croatia#060c2KKKoprivni&#269;ko-Kri&#382;eva&#269;ka000023Honduras#070c2EPEl Para&iacute;so00001DOntario#040c2CKChatham-Kent000023Poland#740c2LD&#321;&oacute;dzkie000016Cuba#030c2MAMatanzas00001FIndonesia#290c2MUNorth Maluku000027BritishColumbia#270c2SCSunshine Coast00001CColombia#380c2MAGMagdalena00002BFrenchGuiana#GF.CY.RM0c2RMRemire Montjoly00001DFiji#FJ.CE.NT0c2NTNaitasiri000034FranceDepartment#FR.AP0c2APAlpes de Haute Provence000023BurkinaFaso#BF.SE0c2SES&eacute;no00002BPapuaNewGuinea#PG.WN0c2WNWest New Britain000029Guyana#GY.UD0c2UDUpper Demerara-Berbice00001DKazakhstan#KZ.AA0c2AAAlmaty00001ASerbia#RS.ZJ0c2ZJZajecar000018Yemen#YE.HJ0c2HJHajjah00001BBurundi#BI.KI0c2KIKirundo00001AMalawi#MW.MJ0c2MJMulanje00002CFranceDepartment#FR.TG0c2TGTarn et Garonne000025Thailand#TH.UR0c2URUbon Ratchathani00001BKentucky#0610c2EDEdmonson000017Michigan#0710c2IRIron00001CWisconsin#1330c2WUWaukesha000019NewWorld#1480c2LVLatvia000019Virginia#1370c2OROrange00001DSouthDakota#0070c2BNBennett000018Kansas#1890c2SVStevens000018Mexico#0130c2JAJalisco000019Missouri#1450c2NENewton00001ACalifornia#0490c2MOModoc000015Texas#2170c2HILHill000023Virginia#6800c2LYLynchburg (City)000017Nebraska#1490c2RORock00001AGeorgia#0250c2BEBrantley000024WorldwithCountries#1030c2GEGeorgia000019Europe#0320c2PTPortugal000025Minnesota#0770c2LWLake of the Woods000023ElSalvador#140c2USUsulut&aacute;n000019Peru#220c2SAMSan Martin000023Croatia#070c2KZKrapinsko-Zagorska00002AHonduras#080c2FMFrancisco Moraz&aacute;n000019Ontario#050c2COCochrane000019Poland#750c2LULubelskie000021Cuba#040c2IJIsla de la Juventud00001CIndonesia#300c2JRWest Java000028BritishColumbia#280c2TNThompson-Nicola00001FThailand#TH.CR0c2CRChiang Rai00001ANigeria#NG.TA0c2TATaraba00001DMacedonia#MK.PH0c2PHPehcevo00002BPapuaNewGuinea#PG.EN0c2ENEast New Britain000018Uganda#UG.RA0c2RARakai00001DMalawi#MW.NA0c2NANkhata Bay000023NewHampshire#0110c2HBHillsborough000018Idaho#0550c2KOKootenai00001DArkansas#1430c2WAWashington000020Massachusetts#0110c2FRFranklin00001AOregon#0570c2TITillamook00001ATennessee#0590c2GEGreene000020NewWorld#1490c2LNLiechtenstein000017Maine#0150c2LILincoln000019Oklahoma#0110c2BLBlaine000014Iowa#0630c2EMEmmet000018Texas#3990c2RUNRunnels00001ENewJersey#0050c2BUBurlington000019Indiana#0150c2CACarroll000017Mexico#0140c2MEMexico00001CNorthCarolina#0550c2DADare000018Georgia#2070c2MOMonroe000017Kansas#0090c2BTBarton000018Illinois#0450c2EDEdgar00001BMississippi#1530c2WYWayne000022WorldwithCountries#1040c2INIndia000018Europe#0330c2RORomania00001CPennsylvania#1190c2UNUnion000016Texas#0370c2BOIBowie00001APuertoRico#150c2ARArroyo000014Peru#230c2TACTacna000023Croatia#080c2LSLi&#269;ko-Senjska000020Honduras#090c2GDGracias a Dios000019Ontario#060c2DUDufferin000018Poland#760c2LBLubuskie00001BCuba#050c2CMCamag&uuml;ey000021Indonesia#310c2SANorth Sulawesi000028PolandCounties#PL.KP.WL0c2KWLWloclawek000021FrenchGuiana#GF.CY.RO0c2RORoura000026FrenchGuiana#GF.CY.SE0c2SESaint Elie000022CaymanIslands#KY.WB0c2WBWest Bay000020Thailand#TH.UT0c2UTUthai Thani000018Congo#CG.SA0c2SASangha000026BurkinaFaso#BF.SG0c2SGSangui&eacute;000018Algeria#DZ.OR0c2OROran00001BBhutan#BT.SG0c2SGShemgang00001DNigeria#NG.AK0c2AKAkwa Ibom00001ANigeria#NG.BA0c2BABauchi000018Somalia#SO.GE0c2GEGedo00001DMacedonia#MK.OS0c2OSOslomej000022Kazakhstan#KZ.AC0c2ACAlmaty City00001BSerbia#RS.ZL0c2ZLZlatibor000015Yemen#YE.IB0c2IBIbb000019China2#CN.SX0c2SXShanxi00002EFranceDepartment#FR.SS0c2SSSeine-Saint-Denis00001AKentucky#0630c2ELElliott00001BMichigan#0730c2IAIsabella00001BWisconsin#1350c2WPWaupaca00001CNewWorld#1500c2LTLithuania000017Virginia#1390c2PAPage00001FSouthDakota#0090c2BHBon Homme000017Kansas#1910c2SUSumner000024Mexico#0150c2MIMichoacan de Ocampo00001AMissouri#1470c2NONodaway000019California#0510c2MNMono000018Texas#2190c2HOCHockley000019Nebraska#1510c2SASaline000018Georgia#0270c2BOBrooks000015Brazil#0010c2ACAcre000026WorldwithCountries#1050c2IDIndonesia00001BEurope#0340c2SMSan Marino00001CMinnesota#0790c2LSLe Sueur000026YukonTerritory#CA.YT.KL0c2KLKlondike000015Peru#240c2TUMTumbes000020Croatia#090c2MEMe&#273;imurska000021Honduras#100c2INIntibuc&aacute;000017Ontario#070c2DRDurham000020Poland#770c2MAMa&#322;opolskie000020Indonesia#320c2SLSouth Sumatra00002CMacau#MO.MA.NF0c2NFNossa Senhora de Fatima000022FranceDepartment#FR.AS0c2ASAisne000020Thailand#TH.CT0c2CTChanthaburi000021Europe2#EU.LI0c2LILiechtenstein000027Philippines#PH.NR0c2NRNegros Oriental000019Vanuatu#VU.SE0c2SEShefa00001CTunisia#TN.ME0c2MEMedenine000023FranceDepartment#FR.ST0c2STSarthe00001EPennsylvania#1210c2VEVenango000019Texas#0390c2BRZBrazoria000020NewHampshire#0130c2MEMerrimack000015Idaho#0570c2LALatah000018Arkansas#1450c2WHWhite000014Ohio#0010c2ADAdams00001FMassachusetts#0130c2HAHampden000019Oregon#0590c2UMUmatilla00001ATennessee#0610c2GUGrundy00001DNewWorld#1510c2LULuxembourg000016Maine#0170c2OXOxford000018Oklahoma#0130c2BRBryan000016Iowa#0650c2FAFayette000015Texas#4010c2RUSRusk00001ANewJersey#0070c2CACamden000016Indiana#0170c2CSCass000018Mexico#0160c2MOMorelos000020NorthCarolina#0570c2DVDavidson00001CGeorgia#2090c2MGMontgomery000018Kansas#0110c2BBBourbon000022Virginia#6830c2MNManassas (City)00001AIllinois#0470c2EWEdwards00001DMississippi#1550c2WBWebster000018Brazil#0020c2ALAlagoas000021WorldwithCountries#1060c2IAIran000017Europe#0350c2CSSerbia00001ASlovenia#010c2PMPomurska000015USA#VA0c2VAVirginia00001FPuertoRico#170c2BCBarceloneta000016Peru#250c2UCAUcayali000027Croatia#100c2OBOsje&#269;ko-Baranjska00002AHonduras#110c2IBIslas de la Bah&iacute;a000016Ontario#080c2ELElgin00001BPoland#780c2MZMazowieckie000023Cuba#070c2CACiego de &Aacute;vila000019Indonesia#330c2BTBanten000029FrenchGuiana#GF.CY.SG0c2SGSaint Georges000015Iran#IR.FA0c2FAFars00001ESriLanka#LK.RN0c2RNRatnapura000018Liberia#LR.BG0c2BGBong000026Philippines#PH.NS0c2NSNorthern Samar000020Tanzania#TZ.KL0c2KLKilimanjaro00001EMicronesia#FM.PO0c2POPohnpei000017Palau#PW.KO0c2KOKoror000019Kentucky#0650c2ESEstill00001AMichigan#0750c2JAJackson00001CWisconsin#1370c2WRWaushara00001CNewWorld#1520c2MKMacedonia00001AVirginia#1410c2PTPatrick00001FSouthDakota#0110c2BRBrookings000017Kansas#1930c2THThomas000018Mexico#0170c2NANayarit000019Missouri#1490c2OROregon00001DCalifornia#0530c2MTMonterey000017Alaska#0500c2BEBethel000015Texas#2210c2HODHood000018Nebraska#1530c2SRSarpy000017Georgia#0290c2BRBryan000016Brazil#0030c2APAmapa000022WorldwithCountries#1070c2JPJapan000019Europe#0360c2SKSlovakia00001BMinnesota#0810c2LILincoln000027NewCaledonia#NC.SU.YA0c2YAYat&eacute;00001BSlovenia#020c2PDPodravska00001FPeru#260c2LPLima Metropolitan00002ECroatia#110c2PSPo&#382;e&scaron;ko-Slavonska000018Honduras#120c2LPLa Paz000016Ontario#090c2ESEssex000018Poland#790c2OPOpolskie000018Cuba#080c2CFCienfuegos00001CIndonesia#340c2GOGorontalo00001DSwaziland#SZ.MA0c2MAManzini000021SolomonIsland#SB.CN0c2CNCentral00001BQatar#QA.RA0c2RAAr Rayyan00002AFranceDepartment#FR.CA0c2CACotes d'Armor00001ANigeria#NG.SO0c2SOSokoto00001AGhana#GH.NP0c2NPNorthern00001DMauritania#MR.TR0c2TRTrarza000022SaudiArabia#SA.MD0c2MDAl Madinah000023Bhutan#BT.SJ0c2SJSamdrup Jongkhar000021SriLanka#LK.AD0c2ADAnuradhapura00001BNigeria#NG.AN0c2ANAnambra000023Panama#PA.KW0c2KWKuna de Wargandi00001BTanzania#TZ.KM0c2KMKigoma000023FranceDepartment#FR.SV0c2SVSavoie00001DPennsylvania#1230c2WAWarren000017Texas#0410c2BAZBrazos000021NewHampshire#0150c2RGRockingham000015Idaho#0590c2LELemhi00001BArkansas#1470c2WOWoodruff000014Ohio#0030c2ALAllen000021Massachusetts#0150c2HPHampshire000016Oregon#0610c2UNUnion00001BTennessee#0630c2HAHamblen000018NewWorld#1530c2MTMalta000019Maine#0190c2PEPenobscot000018Oklahoma#0150c2CACaddo000032Australia2#ACT0c2ACTAustralian Capital Territory000014Iowa#0670c2FLFloyd000026Alaska#2320c2SHSkagway-Hoonah-Angoon000017Texas#4030c2SABSabine00001CNewJersey#0090c2CMCape May000017Indiana#0190c2CLClark00001BMexico#0180c2NUNuevo Leon00001DNorthCarolina#0590c2DIDavie000018Georgia#2110c2MNMorgan000016Kansas#0130c2BRBrown000027Virginia#6850c2MPManassas Park (City)00001CIllinois#0490c2EFEffingham00001FMississippi#1570c2WLWilkinson000019Brazil#0040c2AMAmazonas000027WorldwithCountries#1080c2KZKazakhstan000019Europe#0370c2SLSlovenia000026MadagascarRegions#MG.TL.AY0c2AYAnosy000034MadagascarRegions#MG.FI.VF0c2VFVatovavy Fitovinany000020Slovenia#030c2KOKoro&scaron;ka000025NewWorld#010c2AGAntigua and Barbuda000020PuertoRico#190c2BQBarranquitas000023Croatia#120c2PGPrimorsko-Goranska000019Honduras#130c2LELempira00001AOntario#100c2FRFrontenac00001CPoland#800c2PKPodkarpackie000014Cuba#090c2GRGranma000022Indonesia#350c2BBBangka-Belitung000032PolandCounties#PL.LB.GM0c2LGMGorzow Wielkopolski000025FrenchGuiana#GF.CY.SI0c2SISinnamary00001CSyria#SY.SU0c2SUAs Suwayda000024FranceDepartment#FR.AV0c2AVAveyron000022CaymanIslands#KY.EE0c2EEEast End00001DBurkinaFaso#BF.TA0c2TATapoa00001CBhutan#BT.TA0c2TATashigang00001BRwanda#RW.SU0c2SUSouthern000019Nigeria#NG.BE0c2BEBenue000031CentralAmerica2#CE.TT0c2TTTrinidad &amp; Tobago00001EHongKong#HK.YL0c2YLYuen Long00001DMauritania#MR.BR0c2BRBrakna00002FCentralAfricanRepublic#CF.HK0c2HKHaute -Kotto000023CentralAmerica2#CE.BS0c2BSBahamas000025PapuaNewGuinea#PG.ES0c2ESEast Sepik00001ALaos#LA.KH0c2KHKhammouan00001ATunisia#TN.MH0c2MHMahdia000018Minnesota#0830c2LYLyon00001AKentucky#0670c2FAFayette00001CMichigan#0770c2KMKalamazoo00001DWisconsin#1390c2WNWinnebago00001ANewWorld#1540c2MVMoldova00001FVirginia#1430c2PIPittsylvania00001BSouthDakota#0130c2BWBrown000016Kansas#1950c2TRTrego000017Mexico#0190c2OAOaxaca000018Missouri#1510c2OSOsage000019California#0550c2NANapa000018Texas#2230c2HOPHopkins00001BNebraska#1550c2SUSaunders000019Georgia#0310c2BCBulloch000016Brazil#0050c2BABahia00002AWorldwithCountries#1090c2KPKorea (north)000016Europe#0380c2ESSpain00001BSlovenia#040c2SASavinjska000019NewWorld#020c2BSBahamas000012USA#TX0c2TXTexas000021USA#DC0c2DCDistrict of Columbia000028Croatia#130c2SB&Scaron;ibensko-Kninska00001CHonduras#140c2OCOcotepeque00001DAustralia#QU0c2QUQueensland000022Australia#SA0c2SASouth Australia000020Ontario#110c2GSGreater Sudbury000019Poland#810c2PDPodlaskie00001FCuba#100c2GUGuant&aacute;namo000018Indonesia#360c2PAPapua00001AEurope2#EU.MC0c2MCMonaco000022Cambodia#KH.KA0c2KASihanoukville000019Chad#TD.TA0c2TATandjile000023BurkinaFaso#BF.BA0c2BABal&eacute;00001EMacedonia#MK.PN0c2PNPlasnica000025Philippines#PH.NV0c2NVNueva Vizcaya00002AWorldwithCountries#1100c2KRKorea (south)000017Europe#0390c2SESweden000021Pennsylvania#1250c2WSWashington000019Texas#0430c2BREBrewster000020NewHampshire#0170c2STStrafford000015Idaho#0610c2LWLewis000017Arkansas#1490c2YEYell000016Ohio#0050c2ASAshland000021Massachusetts#0170c2MIMiddlesex000018Oregon#0630c2WAWallowa00001CTennessee#0650c2HMHamilton000017Italy#0010c2ABAbruzzo000019NewWorld#1550c2MCMonaco00001BMaine#0210c2PIPiscataquis00001BOklahoma#0170c2CNCanadian000017Iowa#0690c2FRFranklin00001ETexas#4050c2SAUSan Augustine00001ENewJersey#0110c2CUCumberland000016Indiana#0210c2CYClay000017Mexico#0200c2PUPuebla00001ENorthCarolina#0610c2DUDuplin000018Georgia#2130c2MUMurray000017Kansas#0150c2BUButler00001AIllinois#0510c2FAFayette00001DMississippi#1590c2WNWinston000016Brazil#0060c2CECeara00001ASlovenia#050c2ZSZasavska00001ANewWorld#030c2BBBarbados000022PuertoRico#210c2BYBayam&oacute;n00002DCroatia#140c2SMSisa&#269;ko-Moslava&#269;ka000019Honduras#150c2OLOlancho00001BCostaRica#010c2ALAlajuela000015Ontario#120c2GRGrey000019Poland#820c2PMPomorskie000017Cuba#110c2LHLa Habana000017Indonesia#370c2RIRiau000019Guinea#GN.GA0c2GAGaoual00001FThailand#TH.CY0c2CYChaiyaphum00001BEurope2#EU.MD0c2MDMoldova00001ESenegal#SN.ZG0c2ZGZiguinchor000018Cambodia#KH.KB0c2KBKep00001CBurkinaFaso#BF.SM0c2SMSoum000019Bhutan#BT.SM0c2SMSamchi000020GuineaBissau#GW.QU0c2QUQuinara000022BurkinaFaso#BF.BB0c2BBBougouriba00001EDjibouti#DJ.TA0c2TATadjourah00002ECentralAfricanRepublic#CF.HM0c2HMHaut-Mbomou000016Chad#TD.BA0c2BABatha000019Nepal#NP.KA0c2KAKarnali00001DGabon#GA.HO0c2HOHaut-Ogooue000027WorldwithCountries#1110c2KGKyrgyzstan00001CEurope#0400c2CHSwitzerland00001AMinnesota#0850c2MLMcLeod00001AKentucky#0690c2FLFleming00001BMichigan#0790c2KAKalkaska000018Wisconsin#1410c2WOWood00001AItaly#0020c2BABasilicata00001DNewWorld#1560c2MGMontenegro00001BVirginia#1450c2POPowhatan00001BSouthDakota#0150c2BUBrule00001AKansas#1970c2WBWabaunsee000025Mexico#0210c2QUQueretaro de Arteaga000018Missouri#1530c2OZOzark00001BCalifornia#0570c2NENevada000018Texas#2250c2HOUHouston00001FNebraska#1570c2SBScotts Bluff000017Georgia#0330c2BUBurke000021Brazil#0070c2DFDistrito Federal000021Slovenia#060c2PSSpodnjeposavska000018NewWorld#040c2BZBelize000015USA#CO0c2COColorado000015USA#DE0c2DEDelaware000014Japan#100c2GUGumma000025Croatia#150c2SDSplitsko-Dalmatinska000026Honduras#160c2SBSanta B&aacute;rbara00001ACostaRica#020c2CACartago00001AOntario#130c2HAHaldimand000021Poland#830c2SL&#346;l&#261;skie00001CCuba#120c2HOHolgu&iacute;n000021Indonesia#380c2SNSouth Sulawesi00001AEritrea#ER.MA0c2MAMaekel000027Kazakhstan#KZ.SK0c2SKSouth Kazakhstan00003CCentralAmerica2#CE.VC0c2VCSt. Vincent &amp; the Grenadines00001CMacedonia#MK.PP0c2PPPrilep00001ABurundi#BI.KR0c2KRKaruzi00001AMalawi#MW.NI0c2NINtchisi000021WorldwithCountries#1120c2LALaos000018Europe#0410c2UAUkraine00001CPennsylvania#1270c2WYWayne000018Texas#0450c2BRIBriscoe00001FNewHampshire#0190c2SUSullivan000017Idaho#0630c2LILincoln000018Ohio#0070c2AHAshtabula000021Massachusetts#0190c2NTNantucket000016Oregon#0650c2WSWasco00001BTennessee#0670c2HNHancock000018Italy#0030c2CACalabria00001ENewWorld#1570c2NLNetherlands000019Maine#0230c2SASagadahoc000019Oklahoma#0190c2CRCarter000016Iowa#0710c2FEFremont00001CTexas#4070c2SAJSan Jacinto000019NewJersey#0130c2ESEssex000019Indiana#0230c2CIClinton00001DMexico#0220c2QRQuintana Roo00001ENorthCarolina#0630c2DRDurham00001AGeorgia#2150c2MSMuscogee00001CNewZealand#F100c2TASTasman000016Kansas#0170c2CSChase000017Illinois#0530c2FOFord00001FMississippi#1610c2YAYalobusha00001FBrazil#0080c2ESEspirito Santo000027Slovenia#070c2DOJugovzhodna Slovenija000018NewWorld#050c2CACanada00001DPuertoRico#230c2CRCabo Rojo000018Japan#110c2HIHiroshima000021Croatia#160c2VAVara&#382;dinska000017Honduras#170c2VAValle00001CBulgaria#380c2EBlagoevgrad00001DCostaRica#030c2GUGuanacaste00001BOntario#140c2HLHaliburton000023USANorthWestRegion#300c2MTMontana000028Poland#840c2SK&#346;wi&#281;tokrzyskie000017Cuba#130c2LTLas Tunas000022Indonesia#390c2IBWest Irian Jaya000025PolandCounties#PL.LU.ZM0c2LZMZamosc00002BNewBrunswick#CA.NB.AC0c2ACAcadian Coastal00001ATunisia#TN.NB0c2NBNabeul00001BVietnam#VN.YB0c2YBYen Bai000018Liberia#LR.BM0c2BMBomi00001BTanzania#TZ.KR0c2KRKagera000016Brazil#0090c2GOGoias000025WorldwithCountries#1130c2MYMalaysia00001FEurope#0420c2UKUnited Kingdom00001CMinnesota#0870c2MAMahnomen000018Kentucky#0710c2FOFloyd000017Michigan#0810c2KNKent000018Italy#0040c2CMCampania000019NewWorld#1580c2NONorway000020Virginia#1470c2PEPrince Edward00001DSouthDakota#0170c2BFBuffalo000018Kansas#1990c2WAWallace000020Mexico#0230c2SASan Luis Potosi00001BMissouri#1550c2PMPemiscot00001BCalifornia#0590c2OROrange000017Texas#2270c2HOWHoward000026Virginia#6900c2MVMartinsville (City)000019Nebraska#1590c2SESeward000017Georgia#0350c2BSButts000026MadagascarRegions#MG.AS.DI0c2DIDiana000023WestEuropeanRegion#010c2BEBelgium000023Slovenia#080c2LJOsrednjeslovenska00001CNewWorld#060c2CRCosta Rica000017Japan#120c2HOHokkaido00002BCroatia#170c2VPViroviti&#269;ko-Podravska000016Honduras#180c2YOYoro000017Bulgaria#390c2ABurgas00001ACostaRica#040c2HEHeredia000017Ontario#150c2HTHalton000028Poland#850c2WNWarmi&#324;sko-Mazurskie000024Cuba#140c2SSSancti Sp&iacute;ritus00001FIndonesia#400c2KRRiau Islands00001CKuwait#KW.JA0c2JAAl Jahrah000026SaoTomeandPrincipe#ST.MZ0c2MZMe Zoxi000031DemocraticRepublicoftheCongo#CD.EQ0c2EQEquateur00001DPanama#PA.LS0c2LSLos Santos00001ATanzania#TZ.LI0c2LILindi00001DYemen#YE.HU0c2HUAl Hudaydah000019Yemen#YE.JA0c2JAAl Jawf00001CUganda#UG.RK0c2RKRukungiri00001DMalawi#MW.NK0c2NKNkhotakota000019Brazil#0100c2MAMaranhao000025WorldwithCountries#1140c2MNMongolia00001DEurope#0430c2VAVatican City000023Pennsylvania#1290c2WEWestmoreland000017Texas#0470c2BROBrooks000017Idaho#0650c2MAMadison000024Virginia#5100c2AXAlexandria (City)000015Ohio#0090c2ATAthens00001FMassachusetts#0210c2NONorfolk000018Wyoming#0010c2ALAlbany00001BOregon#0670c2WHWashington00001CTennessee#0690c2HRHardeman00001EItaly#0050c2EMEmilia-Romagna000019NewWorld#1590c2PLPoland000018Maine#0250c2SOSomerset00001BOklahoma#0210c2CHCherokee000015Iowa#0730c2GRGreene00001DTexas#4090c2SAPSan Patricio00001ENewJersey#0150c2GLGloucester00001AIndiana#0250c2CRCrawford000018Mexico#0240c2SISinaloa000021NorthCarolina#0650c2EDEdgecombe000018Georgia#2170c2NENewton00001BKansas#0190c2CQChautauqua00001BIllinois#0550c2FRFranklin00001BMississippi#1630c2YZYazoo000024YukonTerritory#CA.YT.KU0c2KUKluane000020Indonesia#410c2SRWest Sulawesi000022WestEuropeanRegion#020c2FRFrance00001BSlovenia#090c2GOGorenjska000016NewWorld#070c2CUCuba00001APuertoRico#250c2CGCaguas000014Japan#130c2HYHyogo000025Croatia#180c2VSVukovarsko-Srijemska000019Bulgaria#400c2TXDobrich000019Ontario#160c2HMHamilton00001DPoland#860c2WPWielkopolskie00001ECuba#150c2SCSantiago de Cuba00001CSerbia#RS.JA0c2JAJablanica000019Vanuatu#VU.SN0c2SNSanma00001BTunisia#TN.MN0c2MNManouba000024Guinea#GN.FO0c2FOFor&eacute;cariah00001ATuvalu#TV.VI0c2VIVaitupu000018Iran#IR.ES0c2ESEsfahan000025FranceDepartment#FR.BR0c2BRBas Rhin000021FranceDepartment#FR.CH0c2CHCher00001ESaudiArabia#SA.MK0c2MKMakkah00001DKazakhstan#KZ.AM0c2AMAqmola00001BBurundi#BI.MA0c2MAMakamba000023Guyana#GY.DE0c2DEDemerara-Mahaica000019Georgia#0370c2CLCalhoun00001CBrazil#0110c2MTMato Grosso000022WorldwithCountries#1150c2NPNepal000017Europe#0440c2CYCyprus00001CMinnesota#0890c2MRMarshall00001BKentucky#0730c2FRFranklin00001BMichigan#0830c2KEKeweenaw000019Florida#0010c2ALAlachua00001EWestVirginia#0010c2BABarbour000025Italy#0060c2FIFriuli-Venezia Giulia00001BNewWorld#1600c2PTPortugal000017Asia3#0020c2AMArmenia000020Virginia#1490c2PGPrince George00001BSouthDakota#0190c2BTButte00001BKansas#2010c2WSWashington000017Mexico#0250c2SOSonora000018Missouri#1570c2PRPerry00001BCalifornia#0610c2PLPlacer000019Texas#2290c2HUDHudspeth00001BNebraska#1610c2SHSheridan000026WestEuropeanRegion#030c2LULuxembourg00002ASlovenia#100c2NONotranjsko-kra&scaron;ka00001ANewWorld#080c2DMDominica000011USA#UT0c2UTUtah000016Japan#140c2IBIbaraki000019Croatia#190c2ZDZadarska000019Bulgaria#410c2EBGabrovo00001FCostaRica#060c2LILim&oacute;n000019Ontario#170c2HSHastings000022Poland#870c2ZPZachodniopomorskie000019Cuba#160c2VCVilla Clara000015Iran#IR.YA0c2YAYazd00001AUganda#UG.AB0c2ABKaabong00001AKuwait#KW.HW0c2HWHawalli000020SriLanka#LK.TC0c2TCTrincomalee000024Ethiopia#ET.GA0c2GAGambela peoples000024Cambodia#KH.KG0c2KGKampong Chhnang00001EBurkinaFaso#BF.SR0c2SRSourou000024Mauritania#MR.TZ0c2TZTiris Zemmour000033CentralAmerica2#CE.VG0c2VGVirgin Islands, British00001FMacedonia#MK.PT0c2PTProbistip000022CentralAmerica2#CE.BZ0c2BZBelize000019Tanzania#TZ.MA0c2MAMara000019Malawi#MW.MW0c2MWMwanza000023Brazil#0120c2MSMato Grosso do Sul000025WorldwithCountries#1160c2PKPakistan000017Europe#0450c2TKTurkey00001EPennsylvania#1310c2WOWyoming000016Texas#0490c2BOWBrown000018Idaho#0670c2MIMinidoka000017Ohio#0110c2AUAuglaize000020Massachusetts#0230c2PLPlymouth00001AWyoming#0030c2BHBig Horn000018Oregon#0690c2WEWheeler00001ATennessee#0710c2HDHardin000015Italy#0070c2LALazio00001ANewWorld#1610c2RORomania000015Maine#0270c2WAWaldo00001AOklahoma#0230c2COChoctaw000015Iowa#0750c2GUGrundy00001AAsia3#0030c2AZAzerbaijan000024Alaska#2400c2SFSoutheast Fairbanks000019Texas#4110c2SASSan Saba00001ANewJersey#0170c2HUHudson000019Indiana#0270c2DADaviess000018Mexico#0260c2TATabasco00001FNorthCarolina#0670c2FOForsyth000018Georgia#2190c2OCOconee000019Kansas#0210c2CKCherokee000019Illinois#0570c2FUFulton000022WestEuropeanRegion#040c2MCMonaco000020Slovenia#110c2SPGori&scaron;ka000020NewWorld#090c2DODominican Rep.000017USA#WA0c2WAWashington000019PuertoRico#270c2CACamuy000018USA#CT0c2CTConnecticut000017Japan#150c2ISIshikawa000020Croatia#200c2ZGZagreba&#269;ka00001DBulgaria#420c2COGrad Sofiya00001DCostaRica#070c2PUPuntarenas000016Ontario#180c2HUHuron00001ESerbia#RS.JC0c2JCSouth Backa000019Vanuatu#VU.TF0c2TFTafea00001APalau#PW.ME0c2MEMelekeok000017Uganda#UG.AC0c2ACApac000019Benin#BJ.AK0c2AKAtacora000021Seychelles#SC.SY0c2SYSeychelles00001DEurope2#EU.LT0c2LTLithuania00001BCambodia#KH.KH0c2KHKratie00001FBurkinaFaso#BF.SS0c2SSSissili00001FSriLanka#LK.BC0c2BCBatticaloa00001EPanama#PA.NB0c2NBNgobe Bugle000022HongKong#HK.YT0c2YTYan Tsim Mong000030CentralAfricanRepublic#CF.HS0c2HSMambere-Kadei00001ATanzania#TZ.MB0c2MBMbeya00001ANebraska#1630c2SMSherman000018Georgia#0390c2CMCamden00001DBrazil#0130c2MGMinas Gerais000028WorldwithCountries#1170c2PHPhilippines000017Europe#0460c2RURussia00001AMinnesota#0910c2MTMartin000019Kentucky#0750c2FUFulton000017Michigan#0850c2LKLake000017Florida#0030c2BABaker00001FWestVirginia#0030c2BEBerkeley000017Italy#0080c2LILiguria00001DNewWorld#1620c2SMSan Marino00001ESouthDakota#0210c2CACampbell000018Kansas#2030c2WHWichita00001BMexico#0270c2TMTamaulipas000019Missouri#1590c2PTPettis00001BCalifornia#0630c2PUPlumas00001CAlaska#0600c2BRBristol Bay000015Texas#2310c2HUNHunt000028Manitoba#CA.MB.IR0c2IRInterlake Region000027WestEuropeanRegion#050c2NLNetherlands000026Slovenia#120c2JPObalno-kra&scaron;ka00001DNewWorld#100c2SVEl Salvador000014Japan#160c2IWIwate00001CCroatia#210c2GZGrad Zagreb000018Bulgaria#430c2XHaskovo000022CostaRica#080c2SJSan Jos&eacute;00001FOntario#190c2KLKawartha Lakes00002BPolandCounties#PL.LB.ZM0c2BZMZielona Gora000027PolandCounties#PL.ZP.KM0c2ZKMKoszalin000017Guinea#GN.FR0c2FRFria00001BUganda#UG.AD0c2ADAdjumani000019Benin#BJ.AL0c2ALAlibori00001DSwaziland#SZ.LU0c2LULubombo00001ALibya#LY.GD0c2GDGhadamis000024DenmarkRegion#DK.SD0c2SDSyddanmark00001EEurope2#EU.LU0c2LULuxembourg00001DEurope2#EU.MK0c2MKMacedonia000022BurkinaFaso#BF.ST0c2STSanmatenga00001CSriLanka#LK.BD0c2BDBadulla00001BNamibia#NA.CA0c2CACaprivi000030CentralAmerica2#CE.VI0c2VIVirgin Islands, U.S.000026CentralAmerica2#CE.CR0c2CRCosta Rica00001DRussia#RU.ZB0c2ZBZabaykalsk000019Uganda#UG.RO0c2ROKaliro00001CUganda#UG.SE0c2SESembabule000021SolomonIsland#SB.WE0c2WEWestern00001BIllinois#0590c2GAGallatin000015Brazil#0140c2PAPara000023WorldwithCountries#1180c2RURussia00001BPennsylvania#1330c2YOYork000019Texas#0510c2BUSBurleson000019Idaho#0690c2NPNez perce000016Ohio#0130c2BEBelmont00001FMassachusetts#0250c2SUSuffolk00001AWyoming#0050c2CMCampbell000018Oregon#0710c2YAYamhill00001BTennessee#0730c2HWHawkins000019Italy#0090c2LOLombardia000019NewWorld#1630c2CSSerbia00001AMaine#0290c2WSWashington00001BOklahoma#0250c2CICimarron000016Iowa#0770c2GTGuthrie00001AAsia3#0050c2BDBangladesh00001BTexas#4130c2SCHSchleicher00001DNewJersey#0190c2HTHunterdon00001AIndiana#0290c2DEDearborn000018NewYork#0010c2ALAlbany000019Mexico#0280c2TLTlaxcala000020NorthCarolina#0690c2FRFranklin00001CGeorgia#2210c2OGOglethorpe000019Kansas#0230c2CNCheyenne000019NewWorld#110c2GDGrenada000024PuertoRico#290c2CVCan&oacute;vanas00002DBosniaHerzegovina#010c2BOBosanskopodrinjski000015Japan#170c2KAKagawa00001ABulgaria#440c2KKurdzhali000017Ontario#200c2KEKenora000016Fiji#FJ.WE.RA0c2RARa000025FranceDepartment#FR.VC0c2VCVaucluse00001CChina2#CN.CQ0c2CQChongqing000023FranceDepartment#FR.CL0c2CLCantal000022FranceDepartment#FR.DB0c2DBDoubs000024SaoTomeandPrincipe#ST.PA0c2PAPague00001AEurope2#EU.LV0c2LVLatvia000019Nigeria#NG.BO0c2BOBorno00001BSomalia#SO.HI0c2HIHiiraan00002FGuyana#GY.UT0c2UTUpper Takutu-Upper Essequibo00001AChad#TD.BI0c2BIWadi Fira00001BBurundi#BI.KY0c2KYKayanza000019Djibouti#DJ.AR0c2ARArta000019Malawi#MW.MZ0c2MZMzimba000018Nebraska#1650c2SISioux000018Brazil#0150c2PBParaiba000026WorldwithCountries#1190c2SGSingapore00001AMinnesota#0930c2MKMeeker00001BKentucky#0770c2GAGallatin000019Michigan#0870c2LPLapeer000021Virginia#5150c2BFBedford (City)000015Florida#0050c2BYBay00001CWestVirginia#0050c2BOBoone000016Italy#0100c2MAMarche00001BNewWorld#1640c2SKSlovakia000016Asia3#0060c2BTBhutan000021Virginia#1530c2PWPrince William000021SouthDakota#0230c2CMCharles Mix000019Alabama#0010c2AUAutauga000017Kansas#2050c2WLWilson00001FMexico#0290c2VEVeracruz-Llave000019Missouri#1610c2PHPhelps00001ECalifornia#0650c2RIRiverside00001BTexas#2330c2HUTHutchinson000022USACentralRegion#170c2ILIllinois00001BNewWorld#120c2GTGuatemala000038BosniaHerzegovina#020c2HNHercegova&#269;ko-neretvanski000018Japan#180c2KGKagoshima00001BAustralia#TA0c2TATasmania00001CBulgaria#450c2KHKyustendil000018Ontario#210c2LALambton00001CTunisia#TN.MS0c2MSMonastir000023FranceDepartment#FR.VD0c2VDVendee000019Oman#OM.MU0c2MUMusandam00002EFranceDepartment#FR.CM0c2CMCharente Maritime00001BTonga#TO.TT0c2TTTongatapu00001DCambodia#KH.KK0c2KKKoh Kong00001BSriLanka#LK.AP0c2APAmpara00001EAngola#AO.LN0c2LNLunda Norte000029BurkinaFaso#BF.BK0c2BKBoulkiemd&eacute;00001FPhilippines#PH.PL0c2PLPalawan00001DKazakhstan#KZ.AR0c2ARAtyrau00001ARussia#RU.YN0c2YNYamalia00001FDjibouti#DJ.AS0c2ASAli Sabieh000019Illinois#0610c2GRGreene000017Brazil#0160c2PRParana000026WorldwithCountries#1200c2LKSri Lanka000017Texas#0530c2BUNBurnet000016Idaho#0710c2ONOneida000014Ohio#0150c2BRBrown000021Massachusetts#0270c2WOWorcester000018Wyoming#0070c2CACarbon00001BTennessee#0750c2HYHaywood000016Italy#0110c2MOMolise00001BNewWorld#1650c2SISlovenia000014Maine#0310c2YOYork00001COklahoma#0270c2CECleveland000017Iowa#0790c2HAHamilton000016Asia3#0070c2BNBrunei000017Texas#4150c2SCUScurry00001ANewJersey#0210c2MEMercer000019Indiana#0310c2DCDecatur00001ANewYork#0030c2AEAllegany000018Mexico#0300c2YUYucatan00001ENorthCarolina#0710c2GAGaston00001AGeorgia#2230c2PDPaulding000016Kansas#0250c2CAClark000017NewWorld#130c2HTHaiti00001CPuertoRico#310c2CNCarolina00002ABosniaHerzegovina#030c2KSKanton Sarajevo000017Japan#190c2KNKanagawa000018Bulgaria#460c2OBLovech000017Ontario#220c2LNLanark000026CentralEuropeanRegion#010c2ATAustria00001AMacau#MO.IL.TA0c2TATaipa000028NewBrunswick#CA.NB.RV0c2RVRiver Valley000025FranceDepartment#FR.DD0c2DDDordogne000018Tonga#TO.VA0c2VAVava'u00001ABhutan#BT.TM0c2TMThimphu00001FBurkinaFaso#BF.BL0c2BLBoulgou00001BMacedonia#MK.RE0c2REResen000020Philippines#PH.PM0c2PMPampanga00001DKazakhstan#KZ.AS0c2ASAstana000020CentralAmerica2#CE.CU0c2CUCuba00001AUganda#UG.RR0c2RRMbarara000022Guyana#GY.CU0c2CUCuyuni-Mazaruni00001ANebraska#1670c2STStanton000019Georgia#0430c2CNCandler00001BBrazil#0170c2PEPernambuco000027WorldwithCountries#1210c2TJTajikistan00001EMinnesota#0950c2MIMille Lacs00001AKentucky#0790c2GRGarrard00001BMichigan#0890c2LLLeelanau00001AFlorida#0070c2BFBradford00001EWestVirginia#0070c2BRBraxton000018Italy#0120c2PIPiemonte000018NewWorld#1660c2ESSpain000017Asia3#0080c2MMBurma (00001AVirginia#1550c2PUPulaski00001BSouthDakota#0250c2CLClark000019Alabama#0030c2BABaldwin000018Kansas#2070c2WOWoodson00001AMexico#0310c2ZAZacatecas000017Missouri#1630c2PIPike00001FCalifornia#0670c2SASacramento000016Texas#2350c2IRIIrion00001EUSACentralRegion#190c2IAIowa00001ANewWorld#140c2HNHonduras00002ABosniaHerzegovina#040c2SRSrednjebosanski000014Japan#200c2KOKochi000018Bulgaria#470c2MMontana000024Ontario#230c2LGLeeds and Grenville00002CCentralEuropeanRegion#020c2CZCzechRepublic00001BSwitzerland#010c2AAAargau000037NorthWestTerritories#CA.NT.GS0c2GSGreat Slave Gateway000019Malawi#MW.NS0c2NSNsanje000024Tibet#TI.SP0c2SPShannan Prefecture000026FranceDepartment#FR.CO0c2COCote d'Or00001EEurope2#EU.MO0c2MOMontenegro000021Cambodia#KH.KM0c2KMKampong Cham00001CAlgeria#DZ.RE0c2RERelizane00001BBurkinaFaso#BF.BM0c2BMBam000022Philippines#PH.PN0c2PNPangasinan00001DKazakhstan#KZ.AT0c2ATAqtobe00001FGuineaBissau#GW.BA0c2BABafata00001AUganda#UG.SI0c2SISironko000029Guyana#GY.EB0c2EBEast Berbice-Corentyne000019Illinois#0630c2GUGrundy000016Brazil#0180c2PIPiaui000025WorldwithCountries#1220c2THThailand000019Texas#0550c2CALCaldwell000016Idaho#0730c2OWOwyhee000015Ohio#0170c2BTButler00001AWyoming#0090c2COConverse00001DTennessee#0770c2HSHenderson000016Italy#0130c2PUPuglia000019NewWorld#1670c2SESweden000017Oklahoma#0290c2CLCoal000016Iowa#0810c2HNHancock000018Asia3#0090c2KHCambodia00001CTexas#4170c2SHAShackelford00001DNewJersey#0230c2MIMiddlesex000019Indiana#0330c2DKDe Kalb000017NewYork#0050c2BRBronx000021Mexico#0320c2DIDistrito Federal00001DNorthCarolina#0730c2GTGates000017Georgia#2250c2PAPeach000015Kansas#0270c2CYClay000027MadagascarRegions#MG.MA.ML0c2MLMelaky000022Switzerland#020c2ARAusser-Rhoden000020USACentralRegion#200c2KSKansas000019NewWorld#150c2JMJamaica000021PuertoRico#330c2CTCata&ntilde;o000024BosniaHerzegovina#050c2TUTuzlanski000017Japan#210c2KUKumamoto00001CBulgaria#480c2PAPazardzhik000025Ontario#240c2LELennox and Addington000026CentralEuropeanRegion#030c2DEGermany00001DLibya#LY.YJ0c2YJYafran-Jadu000023FranceDepartment#FR.VG0c2VGVosges000017Uganda#UG.AI0c2AIAbim000017Nauru#NR.YA0c2YAYaren00001CBenin#BJ.AQ0c2AQAtlantique00001AVietnam#VN.HA0c2HAHa Tay00001BCambodia#KH.KN0c2KNKandal000019Bhutan#BT.TO0c2TOTongsa000024Liberia#LR.CM0c2CMGrand Cape Mount00001CSudan#SD.RN0c2RNRiver Nile00001ESudan#SD.SD0c2SDSouth Darfur000024CentralAmerica2#CE.DM0c2DMDominica000026Virginia#7000c2NNNewport News (City)000019Nebraska#1690c2THThayer000019Georgia#0450c2CRCarroll00001FBrazil#0190c2RJRio de Janeiro000029WorldwithCountries#1230c2TMTurkmenistan00001CMinnesota#0970c2MSMorrison000018Kentucky#0810c2GNGrant00001AMichigan#0910c2LELenawee000019Florida#0090c2BVBrevard00001DWestVirginia#0090c2BKBrooke000018Italy#0140c2SASardegna00001ENewWorld#1680c2CHSwitzerland000015Asia3#0100c2CNChina00001FVirginia#1570c2RPRappahannock00001ASouthDakota#0270c2CYClay000019Alabama#0050c2BRBarbour00001AKansas#2090c2WYWyandotte000019Missouri#1650c2PAPlatte00001FCalifornia#0690c2SNSan Benito000015Texas#2370c2JACJack000025Australia2#NSW0c2NSWNew South Wales000029NewCaledonia#NC.NO.OG0c2OGOu&eacute;goa000025Switzerland#030c2BLBasel-Landschaft000018NewWorld#160c2MXMexico000027BosniaHerzegovina#060c2USUnsko-sanski000014Japan#220c2KYKyoto000018Bulgaria#490c2PKPernik00001BOntario#250c2MAManitoulin000022USANorthWestRegion#410c2OROregon000028Slovakia#010c2BCBansk&aacute; Bystrica000026CentralEuropeanRegion#040c2HUHungary00001CLibya#LY.ZA0c2ZAAz Zawiyah000019Malawi#MW.NU0c2NUNtcheu00001BVietnam#VN.GL0c2GLGia Lai000024Morocco#MA.SM0c2SMSouss Massa Draa00001ESaudiArabia#SA.NJ0c2NJNajran000018Guinea#GN.YO0c2YOYomou00001ELaos#LA.LM0c2LMLouang Namtha00001BIllinois#0650c2HAHamilton000024Brazil#0200c2RNRio Grande do Norte000027WorldwithCountries#1240c2UZUzbekistan000018Texas#0570c2CAHCalhoun000017Idaho#0750c2PAPayette000021Virginia#5200c2BSBristol (City)000016Ohio#0190c2CACarroll000017Wyoming#0110c2CRCrook000019Tennessee#0790c2HEHenry000017Italy#0150c2SISicilia00001ANewWorld#1690c2UAUkraine00001BOklahoma#0310c2CMComanche000015Iowa#0830c2HRHardin000017Texas#4190c2SHEShelby00001CNewJersey#0250c2MOMonmouth00001AIndiana#0350c2DLDelaware000018NewYork#0070c2BOBroome00001ENorthCarolina#0750c2GRGraham000019Georgia#2270c2PCPickens000016Kansas#0290c2CDCloud000021SouthCarolina#0010c2ABAbbeville000020Switzerland#040c2BSBasel-Stadt00001BNewWorld#170c2NINicaragua000016USA#WI0c2WIWisconsin000019PuertoRico#350c2CYCayey000038BosniaHerzegovina#070c2ZAZapadnobosanska &#381;upanija000012Japan#230c2MIMie000018Bulgaria#500c2EHPleven00001AOntario#260c2MIMiddlesex00001CSlovakia#020c2BLBratislava00002CCentralEuropeanRegion#050c2LILiechtenstein00001DPalau#PW.NC0c2NCNgarchelong000016Iran#IR.GI0c2GIGilan000023FranceDepartment#FR.CR0c2CRCreuse00001FVietnam#VN.HC0c2HCHo Chi Minh00001BCambodia#KH.KP0c2KPKampot000020Morocco#MA.TD0c2TDTadla Azilal00001CAngola#AO.LS0c2LSLunda Sul00001FUzbekistan#UZ.NG0c2NGNamangan000029Mauritania#MR.DN0c2DNDakhlet Nouadhibou00002ECentralAmerica2#CE.DO0c2DODominican Republic000016Nepal#NP.KO0c2KOKosi00001CRussia#RU.YS0c2YSYaroslavl000019Nebraska#1710c2TOThomas000019Georgia#0470c2CSCatoosa000022Brazil#0210c2RSRio Grande do Sul000024WorldwithCountries#1250c2VNVietnam000019Minnesota#0990c2MWMower000019Kentucky#0830c2GVGraves00001DMichigan#0930c2LILivingston000019Florida#0110c2BWBroward00001DWestVirginia#0110c2CACabell000017Italy#0160c2TOToscana000021NewWorld#1700c2UKUnited Kingdom00001AAsia3#0120c2TPEast Timor00001BVirginia#1590c2RCRichmond00001FSouthDakota#0290c2COCodington000016Alabama#0070c2BIBibb000017Missouri#1670c2POPolk000023California#0710c2SBSan Bernardino00001FAlaska#0680c2DEDenali Borough000018Texas#2390c2JAKJackson000019Switzerland#050c2BEBern000018NewWorld#180c2PAPanama000014USA#VT0c2VTVermont000030BosniaHerzegovina#080c2ZDZeni&#269;ko-Dobojski000015Japan#240c2MYMiyagi000019Bulgaria#510c2PBPlovdiv000018Ontario#270c2MUMuskoka00001FSlovakia#030c2KIKo&scaron;ice000025CentralEuropeanRegion#060c2PLPoland000024MarshallIsland#MH.MH.JL0c2JLJaluit00001BSerbia#RS.KB0c2KBKolubara000017Iran#IR.ZA0c2ZAZanjan00001APalau#PW.ND0c2NDNgaraard000029FranceDepartment#FR.CS0c2CSCorse du Sud00001DVietnam#VN.HD0c2HDHai Duong000015Nauru#NR.EW0c2EWEwa000028DenmarkRegion#DK.SL0c2SLSj&aelig;lland000022Ethiopia#ET.HA0c2HAHarari people000022Comoros #KM.GC0c2GCGrande Comore00001AIllinois#0670c2HCHancock000019Brazil#0220c2RORondonia000023WorldwithCountries#1260c2TWTaiwan00001BNorthDakota#0010c2ADAdams000019Texas#0590c2CANCallahan000015Idaho#0770c2POPower000018Ohio#0210c2CHChampaign000019Wyoming#0130c2FRFremont00001BTennessee#0810c2HIHickman000023Italy#0170c2TRTrentino-Alto Adige00001FNewWorld#1710c2VAVatican City000019Oklahoma#0330c2CTCotton000017Iowa#0850c2HIHarrison000017Asia3#0130c2GEGeorgia000018Texas#4210c2SHRSherman00001ANewJersey#0270c2MRMorris000018Indiana#0370c2DUDubois00001DNewYork#0090c2CACattaraugus000021NorthCarolina#0770c2GNGranville000018Georgia#2290c2PEPierce000017Kansas#0310c2CFCoffey00001DSouthCarolina#0030c2AIAiken00001DSwitzerland#060c2FRFribourg000027NewWorld#190c2KNSt. Kitts &amp; Nevis000019PuertoRico#370c2CBCeiba000031BosniaHerzegovina#090c2ZP&#381;upanija Posavska000017Japan#250c2MAMiyazaki000019Bulgaria#520c2PPRazgrad000018Ontario#280c2NINiagara000017Slovakia#040c2NINitra000027CentralEuropeanRegion#070c2SKSlovakia00002BPolandCounties#PL.DS.JM0c2DJMJelenia Gora000019Uganda#UG.AM0c2AMAmuria000025FranceDepartment#FR.CT0c2CTCharente00001AKyrgyzstan#KG.OS0c2OSOsh000019Europe2#EU.MT0c2MTMalta00002BMorocco#MA.RZ0c2RZRabat Sale Zemmour Zaer000019Angola#AO.LU0c2LULuanda000019Angola#AO.NA0c2NANamibe00001FChad#TD.CG0c2CGChari-Baguirmi00001ELaos#LA.LP0c2LPLouangphabang000017Texas#2410c2JASJasper00001BNebraska#1730c2TUThurston00001AGeorgia#0490c2CHCharlton000018Brazil#0230c2RRRoraima000026WorldwithCountries#1270c2HKHong Kong00001AMinnesota#1010c2MUMurray00001AKentucky#0850c2GYGrayson000017Michigan#0950c2LULuce000019Florida#0130c2CACalhoun00001EWestVirginia#0130c2CHCalhoun000016Italy#0180c2UMUmbria000019NewWorld#1720c2CYCyprus000015Asia3#0140c2INIndia00001AVirginia#1610c2RNRoanoke00001CSouthDakota#0310c2CSCorson000018Alabama#0090c2BLBlount00001AMissouri#1690c2PLPulaski00001ECalifornia#0730c2SDSan Diego00001BAlaska#0700c2DIDillingham00001BSwitzerland#070c2GEGeneve00001BNewWorld#200c2LCSt. Lucia000041BosniaHerzegovina#100c2ZZ&#381;upanija Zapadnohercegova&#269;ka000015Japan#260c2NANagano000015Bulgaria#530c2PRuse00001AOntario#290c2NPNipissing00001FSlovakia#050c2PVPre&scaron;ov000027CentralEuropeanRegion#080c2SLSlovenia00002DNewBrunswick#CA.NB.AR0c2ARAppalachian Range000018Niger#NE.AG0c2AGAgadez00001ESerbia#RS.JN0c2JNSouth Banat000019Uganda#UG.BD0c2BDBudaka00001ASyria#SY.DI0c2DIDamascus000020Cambodia#KH.KS0c2KSKampong Spe00001ACapeVerde#CV.MA0c2MAMaio00001EAlgeria#DZ.SA0c2SASouk Ahras00001AAngola#AO.ML0c2MLMalanje000019Sudan#SD.RS0c2RSRed Sea000018Sudan#SD.SI0c2SISennar000019Kansas#0330c2CMComanche000021SouthCarolina#0050c2ALAllendale000019Illinois#0690c2HRHardin00001FBrazil#0240c2SCSanta Catarina000022WorldwithCountries#1280c2MOMacau00001CNorthDakota#0030c2BABarnes000018Texas#0610c2CAMCameron000018Idaho#0790c2SHShoshone000014Ohio#0230c2CLClark000018Wyoming#0150c2GOGoshen00001BTennessee#0830c2HOHouston00001DItaly#0190c2VAValle d'Aosta000019NewWorld#1730c2TKTurkey000018Oklahoma#0350c2CGCraig000014Iowa#0870c2HEHenry000019Asia3#0150c2IDIndonesia000016Texas#4230c2SMISmith000019NewJersey#0290c2OCOcean000019Indiana#0390c2ELElkhart000018NewYork#0110c2CYCayuga00001ENorthCarolina#0790c2GEGreene000016Georgia#2310c2PIPike00002ANorthAmerica#0010c2AGAntigua and Barbuda000021NewCaledonia#NC.IL.LI0c2LILifou000029NewCaledonia#NC.NO.PB0c2PBPou&eacute;bo00001BSwitzerland#080c2GLGlarus000022USACentralRegion#260c2MIMichigan000032NewWorld#210c2VCSt. Vincent &amp; the Grenadines00001APuertoRico#390c2CLCiales00002BBosniaHerzegovina#110c2RSRepublika Srpska000017Japan#270c2NGNagasaki000017Bulgaria#540c2HShumen000018Ontario#300c2NONorfolk00001FMontenegro#010c2ANAndrijevica000025Slovakia#060c2TCTren&#269;&iacute;n00002ACentralEuropeanRegion#090c2CHSwitzerland000020FrenchGuiana#GF.SL.SA0c2SASaul000028PolandCounties#PL.MA.NM0c2MNMNowy Sacz00001AFiji#FJ.EA.KD0c2KDKadavu000019Vanuatu#VU.TR0c2TRTorba000029FranceDepartment#FR.VM0c2VMVal-de-Marne00001DCameroon#CM.LT0c2LTLittoral000025FranceDepartment#FR.CV0c2CVCalvados00001CVietnam#VN.HG0c2HGHa Giang00001FEurope2#EU.NL0c2NLNetherlands000021Cambodia#KH.KT0c2KTKampong Thom00001BBurkinaFaso#BF.TU0c2TUTuy00002CMorocco#MA.TH0c2THTaza Al Hoceima Taounate000022Algeria#DZ.SB0c2SBSidi Bel Abbes00001BNigeria#NG.BY0c2BYBayelsa000019Nigeria#NG.DE0c2DEDelta00001DMacedonia#MK.RM0c2RMRosoman000023CoteDivoire#CI.SB0c2SBSud-Bandama00001BTexas#2430c2JEDJeff Davis000019Nebraska#1750c2VAValley000019Georgia#0510c2CAChatham00001ABrazil#0250c2SPSao Paulo000024WorldwithCountries#1290c2ALAlbania00001CMinnesota#1030c2NINicollet000018Kentucky#0870c2GEGreen00001BMichigan#0970c2MKMackinac00001BFlorida#0150c2CHCharlotte00001BWestVirginia#0150c2CLClay000020Scotland#0010c2ABAberdeenshire000016Italy#0200c2VEVeneto000019NewWorld#1740c2RURussia00001DVirginia#1630c2RKRockbridge00001CSouthDakota#0330c2CUCuster000019Alabama#0110c2BUBullock000019Missouri#1710c2PUPutnam00001ENorthAmerica#0020c2BSBahamas000022California#0750c2SFSan Francisco000024Switzerland#090c2GRGraub&uuml;nden000023USACentralRegion#270c2MNMinnesota000027NewWorld#220c2TTTrinidad &amp; Tobago000026Australia2#NT0c2NTNorthern Territory000013Japan#280c2NRNara00001ABulgaria#550c2CCSilistra00001FOntario#310c2NRNorthumberland000017Montenegro#020c2BABar000018Slovakia#070c2TATrnava000019Uganda#UG.TG0c2TGKitgum000023FranceDepartment#FR.VN0c2VNVienne000018Iran#IR.HD0c2HDHamadan000022FranceDepartment#FR.DM0c2DMDrome000032DemocraticRepublicoftheCongo#CD.HC0c2HCOrientale000019Congo#CG.BO0c2BOBouenza000019Gambia#GM.BJ0c2BJBanjul00001CMacedonia#MK.SD0c2SDDojran00001EMacedonia#MK.RN0c2RNRankovce000020Sudan#SD.SK0c2SKSouth Kurdufan00001BBhutan#BT.BU0c2BUBumthang00001ABhutan#BT.CK0c2CKChhukha000017Bhutan#BT.DA0c2DADaga00002FCentralAfricanRepublic#CF.KB0c2KBNana-Grebizi000026Chad#TD.BT0c2BTBorkou-Ennedi-Tibesti00001DTanzania#TZ.MO0c2MOMorogoro000021CoteDivoire#CI.SC0c2SCSud-Comoe000017Kansas#0350c2CLCowley000020SouthCarolina#0070c2ANAnderson00001CIllinois#0710c2HEHenderson000018Brazil#0260c2SESergipe000024WorldwithCountries#1300c2ADAndorra00001CNorthDakota#0050c2BEBenson000015Texas#0630c2CAPCamp000015Idaho#0810c2TETeton000017Ohio#0250c2CEClermont00001DWyoming#0170c2HSHot Springs00001DTennessee#0850c2HPHumphreys000018Scotland#0020c2ANAngus000019Italy#0210c2SMSanmarino00001CNewWorld#1750c2AUAustralia000018Oklahoma#0370c2CKCreek000015Iowa#0890c2HOHoward00001ATexas#4250c2SOMSomervell00001BNewJersey#0310c2PAPassaic000019Indiana#0410c2FAFayette00001CNewYork#0130c2CHChautauqua000020NorthCarolina#0810c2GUGuilford000016Georgia#2330c2POPolk00001DIreland#0010c2CACeatharlach00001FNorthAmerica#0030c2BBBarbados000027NewCaledonia#NC.IL.MA0c2MAMar&eacute;00002CNewCaledonia#NC.NO.PD0c2PDPoindimi&eacute;000021Switzerland#100c2IRInner-Rhoden000017Canada#010c2ABAlberta00001FNewWorld#230c2USUnited States000019PuertoRico#410c2CDCidra000016Japan#290c2NINiigata000018Bulgaria#560c2CHSliven000017Ontario#320c2OTOttawa00001AMontenegro#030c2BEBerane00001DSlovakia#080c2ZI&#381;ilina000019Uganda#UG.SR0c2SRSoroti00001EMacedonia#MK.AD0c2ADAerodrom00001BMalawi#MW.PH0c2PHPhalombe000027FranceDepartment#FR.VO0c2VOVal d'Oise00002AGuinea#GN.GU0c2GUGu&eacute;ck&eacute;dou000019Uganda#UG.BG0c2BGBugiri000018Benin#BJ.BO0c2BOBorgou000020Cyprus2#CY.GC0c2GCGreek Cyprus000019Iran#IR.GO0c2GOGolestan000019Algeria#DZ.SD0c2SDSaida00001ANepal#NP.MA0c2MAMahakali00001FPapuaNewGuinea#PG.GU0c2GUGulf000019Burundi#BI.NG0c2NGNgozi00001ATexas#2450c2JEFJefferson00001DNebraska#1770c2WAWashington00001FGeorgia#0530c2CCChattahoochee00001ABrazil#0270c2TOTocantins000024WorldwithCountries#1310c2ATAustria00001AMinnesota#1050c2NONobles00001AKentucky#0890c2GUGreenup000019Michigan#0990c2MBMacomb000018Florida#0170c2CICitrus000020WestVirginia#0170c2DODoddridge000019Scotland#0030c2ARArgyll000017NewWorld#1760c2FJFiji00001DVirginia#1650c2RGRockingham00001DSouthDakota#0350c2DADavison000018Alabama#0130c2BTButler000018Missouri#1730c2RSRalls00001FIreland#0020c2CVCabh&aacute;n00001DNorthAmerica#0040c2BZBelize000020California#0770c2SJSan Joaquin00001BSwitzerland#110c2LULuzern000020Canada#020c2BCBritish Columbia000022USACentralRegion#290c2MOMissouri00001BNewWorld#240c2GLGreenland000013Japan#300c2OIOita000022Australia#SW0c2SWNew South Wales000019Bulgaria#570c2CMSmolyan000017Ontario#330c2OXOxford000020Montenegro#040c2BPBijelo Polje00002BFranceDepartment#FR.VP0c2VPVille de Paris000018Benin#BJ.CF0c2CFCouffo000019Libya#LY.GR0c2GRGharyan00001AEurope2#EU.NO0c2NONorway00001AMauritius#MU.MO0c2MOMoka00001FNigeria#NG.CR0c2CRCross River00001DBurkinaFaso#BF.BW0c2BWBanwa00001DAlgeria#DZ.AD0c2ADAin Defla00001FGuineaBissau#GW.CA0c2CACacheu000019Kansas#0370c2CRCrawford00001FSouthCarolina#0090c2BABamberg000018Illinois#0730c2HNHenry00001ABelgium#0100c2BRBrussels000024WorldwithCountries#1320c2BYBelarus00001ENorthDakota#0070c2BIBillings000017Texas#0650c2CARCarson00001AIdaho#0830c2TFTwin falls000016Ohio#0270c2CIClinton000019Wyoming#0190c2JOJohnson000025Europewithcountries#0010c2ALAlbania00001BTennessee#0870c2JAJackson00001BScotland#0040c2AYAyrshire00001BNewWorld#1770c2KIKiribati000019Oklahoma#0390c2CSCuster000017Iowa#0910c2HUHumboldt000015Asia3#0190c2JPJapan000016Texas#4270c2STAStarr000019NewJersey#0330c2SASalem000017Indiana#0430c2FLFloyd000019NewYork#0150c2CEChemung00001FNorthCarolina#0830c2HAHalifax000019Georgia#2350c2PLPulaski00001DIreland#0030c2CLCl&aacute;r00001DNorthAmerica#0050c2CACanada000019Montenegro#050c2BUBudva000024Switzerland#120c2NENeuch&acirc;tel000018Canada#030c2MBManitoba00001BNewWorld#250c2ARArgentina000019PuertoRico#430c2COCoamo000018Bahamas#010c2AKAcklins000016Japan#310c2OKOkayama000017Bulgaria#580c2CSofiya00001COntario#340c2PSParry Sound000024SierraLeone#SL.NO.KD0c2KDKoinadugu00001DDjibouti#DJ.DB0c2DBDjibouti000024EquatorialGuinea#GQ.AN0c2ANAnnobon00001AIran#IR.HG0c2HGHormozgan000024FranceDepartment#FR.CZ0c2CZCorreze000019Algeria#DZ.SF0c2SFSetif000020Bhutan#BT.TY0c2TYTashi Yangtse00001DCongo#CG.BR0c2BRBrazzaville00001FGuineaBissau#GW.BL0c2BLBolama000019Texas#2470c2JIHJim Hogg000021Virginia#7100c2NONorfolk (City)000018Nebraska#1790c2WYWayne00001BGeorgia#0550c2CGChattooga000020Belgium#0110c2VBVlaams-Brabant000024WorldwithCountries#1330c2BEBelgium00001AMinnesota#1070c2NRNorman00001AKentucky#0910c2HAHancock00001BMichigan#1010c2MSManistee000016Florida#0190c2CLClay00001BMississippi#0010c2ADAdams000025Europewithcountries#0020c2ADAndorra00001EWestVirginia#0190c2FAFayette00001DScotland#0050c2BABanffshire000023NewWorld#1780c2MHMarshall Islands00001AVirginia#1670c2RURussell000019SouthDakota#0370c2DYDay000019Alabama#0150c2CACalhoun00001BMissouri#1750c2RORandolph00001AIreland#0040c2COCorcaigh000021NorthAmerica#0060c2CRCosta Rica000024California#0790c2SPSan Luis Obispo00001BMontenegro#060c2CECetinje00001FMiddleEast#010c2AFAfghanistan00001ESwitzerland#130c2NINidwalden00001DCanada#040c2NBNew Brunswick000022USACentralRegion#310c2NENebraska000019NewWorld#260c2BOBolivia00001EBahamas#020c2BRBerry Islands000016Japan#320c2ONOkinawa00001EBulgaria#590c2CTStara Zagora000015Ontario#350c2PEPeel000022FrenchGuiana#GF.CY.CM0c2CMCamopi000020FranceDepartment#FR.VR0c2VRVar00001EPalau#PW.NL0c2NLNgeremlengui00001BUganda#UG.AT0c2ATAmolatar00001BUganda#UG.BJ0c2BJButaleja000016Libya#LY.GT0c2GTGhat00001DSriLanka#LK.VA0c2VAVavuniya000021Somalia#SO.JD0c2JDJubbada Dhexe000017Yemen#YE.LA0c2LALahij00001FGuineaBissau#GW.BM0c2BMBiombo000018Kansas#0390c2DCDecatur000020SouthCarolina#0110c2BRBarnwell00001BIllinois#0750c2IRIroquois000033WorldwithCountries#1340c2BHBosnia and Herzegovina00001FNorthDakota#0090c2BOBottineau000015Texas#0670c2CASCass000016Idaho#0850c2VAValley000025Virginia#5300c2BVBuena Vista (City)000019Ohio#0290c2COColumbiana00001ENewMexico#0010c2BEBernalillo000019Wyoming#0210c2LALaramie000025Europewithcountries#0030c2ATAustria00001DTennessee#0890c2JEJefferson00001FScotland#0060c2BEBerwickshire00001DNewWorld#1790c2FMMicronesia00001BOklahoma#0410c2DEDelaware000012Iowa#0930c2IDIda00001AAsia3#0210c2KZKazakhstan000019Texas#4290c2STEStephens00001CNewJersey#0350c2SOSomerset00001AIndiana#0450c2FOFountain00001ANewYork#0170c2CNChenango00001FNorthCarolina#0850c2HRHarnett000018Georgia#2370c2PUPutnam000025Ireland#0050c2DOD&uacute;n na nGall00001BNorthAmerica#0070c2CUCuba00002ENewCaledonia#NC.NO.PH0c2PHPon&eacute;rihouen00001FMontenegro#070c2DADanilovgrad00001BMiddleEast#020c2BABahrain00001DSwitzerland#140c2OBObwalden000023EastEuropeanRegion#010c2BYBelarus000029Canada#050c2NLNewfoundland and Labrador000018NewWorld#270c2BRBrazil000022PuertoRico#450c2CMComer&iacute;o000016Belize#010c2BZBelize000017Bahamas#030c2BIBimini000014Japan#330c2OSOsaka00001ENorwayRegion#010c2AKAkershus00001CBulgaria#600c2TTurgovishte000016Ontario#360c2PRPerth000027PolandCounties#PL.SL.KA0c2SKAKatowice00001ECoteDivoire#CI.AG0c2AGAgneby00001APalau#PW.NM0c2NMNgardmau00001AVietnam#VN.HM0c2HMHa Nam000020GuineaBissau#GW.TO0c2TOTombali000025BurkinaFaso#BF.BZ0c2BZBaz&egrave;ga000027CentralAfricanRepublic#CF.KG0c2KGKemo00001BTanzania#TZ.MT0c2MTMtwara000017Nepal#NP.ME0c2MEMechi00001FNorthAmerica#0080c2DMDominica00001ECalifornia#0810c2SESan Mateo00001ATexas#2490c2JIWJim Wells00001ANebraska#1810c2WBWebster00001AGeorgia#0570c2CECherokee000025WorldwithCountries#1350c2BGBulgaria00001BMinnesota#1090c2OLOlmsted000019Kentucky#0930c2HRHardin00001CMichigan#1030c2MQMarquette000019Florida#0210c2COCollier00001CMississippi#0030c2ALAlcorn000025Europewithcountries#0040c2BYBelarus00001DWestVirginia#0210c2GIGilmer000017Scotland#0070c2BUBute000018NewWorld#1800c2NRNauru00001DAsia3#0220c2KPKorea (north)000018Virginia#1690c2SCScott000018Colorado#0010c2ADAdams00001BSouthDakota#0390c2DUDeuel00001AAlabama#0170c2CHChambers000016Missouri#1770c2RARay00002AIreland#0060c2DUBaile &Aacute;tha Cliath000026USANorthWestRegion#530c2WAWashington00001FMontenegro#080c2HNHerceg Novi000018MiddleEast#030c2INIran000021Switzerland#150c2SGSankt Gallen000024SouthEuropeanRegion#010c2ALAlbania000024EastEuropeanRegion#020c2BGBulgaria000017NewWorld#280c2CLChile000014Belize#020c2CYCayo00001CBahamas#040c2BPBlack Point000013Japan#340c2SASaga000020NorwayRegion#020c2AAAust-Agder000016Bulgaria#610c2BVarna00001DOntario#370c2PTPeterborough00001CBurundi#BI.MV0c2MVMuramvya000019Uganda#UG.BL0c2BLBulisa000028FranceDepartment#FR.DS0c2DSDeux Sevres000019Vietnam#VN.HN0c2HNHanoi000022Morocco#MA.TO0c2TOTanger Tetouan00001ANigeria#NG.EB0c2EBEbonyi00001EBurma#MM.KC0c2KCKachin State00001FPhilippines#PH.QR0c2QRQuirino000019Georgia#2390c2QUQuitman00001AIreland#0070c2GAGaillimh000025NorthAmerica#0090c2DODominican Rep.00001AKansas#0410c2DKDickinson000020SouthCarolina#0130c2BEBeaufort00001AIllinois#0770c2JAJackson000024WorldwithCountries#1360c2HYCroatia00001CNorthDakota#0110c2BWBowman000017Texas#0690c2CATCastro00001AIdaho#0870c2WAWashington000018Ohio#0310c2CSCoshocton00001ANewMexico#0030c2CACatron000018Nebraska#0010c2ADAdams000019Wyoming#0230c2LILincoln000025Europewithcountries#0050c2BEBelgium00001BTennessee#0910c2JOJohnson00001CScotland#0080c2CACaithness00001ENewWorld#1810c2NZNew Zealand000018Oklahoma#0430c2DWDewey000013Iowa#0950c2IWIowa00001DAsia3#0230c2KRKorea (south)000019Texas#4310c2STRSterling00001ANewJersey#0370c2SUSussex00001AIndiana#0470c2FRFranklin000019NewYork#0190c2CLClinton00001FNorthCarolina#0870c2HWHaywood000022Montenegro#090c2KLKola&scaron;in000018MiddleEast#040c2IZIraq000021Switzerland#160c2SCSchaffhausen000024SouthEuropeanRegion#020c2ADAndorra000023EastEuropeanRegion#030c2MDMoldova00001BCanada#070c2NSNova Scotia00001ANewWorld#290c2COColombia000021Quebec#010c2BSBas-Saint-Laurent00001BPuertoRico#470c2CZCorozal000017Belize#030c2CZCorozal00001BBahamas#050c2CICat Island000016Japan#350c2SISaitama000020Bulgaria#620c2BTVeliko Turnovo000025Ontario#380c2PCPrescott and Russell000019Burundi#BI.MW0c2MWMwaro00001CHongKong#HK.IS0c2ISIslands00001BMacedonia#MK.AJ0c2AJSaraj000023Sudan#SD.BG0c2BGCentral Equatoria000026Serbia#RS.KM0c2KMKosovsko Mitrovacki000017Uganda#UG.AW0c2AWArua000019Thailand#TH.YL0c2YLYala000025SolomonIsland#SB.GC0c2GCGuadalcanal00001EBotswana#BW.KG0c2KGKgalagadi00001CVietnam#VN.HO0c2HOHoa Binh000016Syria#SY.DR0c2DRDara00001FMacedonia#MK.RU0c2RUStrumitsa00001ABhutan#BT.CR0c2CRChirang00001DPhilippines#PH.RI0c2RIRizal00001FKazakhstan#KZ.BY0c2BYBayqonyr00001BMissouri#1790c2REReynolds000020Ireland#0080c2KECiarra&iacute;000022NorthAmerica#0100c2SVEl Salvador000022California#0830c2SRSanta Barbara000018Texas#2510c2JOHJohnson00001ANebraska#1830c2WHWheeler000018Georgia#0590c2CKClarke00002BWorldwithCountries#1370c2CZCzech Republic00001EMinnesota#1110c2OTOtter Tail000019Kentucky#0950c2HLHarlan000018Michigan#1050c2MAMason00001AFlorida#0230c2CUColumbia00001BMississippi#0050c2AMAmite000034Europewithcountries#0060c2BABosnia and Herzegovina00001CWestVirginia#0230c2GRGrant000023Scotland#0090c2CLClackmannanshire000018NewWorld#1820c2PWPalau00001DVirginia#1710c2SHShenandoah00001AColorado#0030c2ALAlamosa00001FAlaska#2610c2VCValdez-Cordova00001BSouthDakota#0410c2DEDewey00001AAlabama#0190c2CECherokee000019Montenegro#100c2KTKotor00001AMiddleEast#050c2ISIsrael00001BSwitzerland#170c2SHSchwyz000035SouthEuropeanRegion#030c2BABosnia &amp; Herzegovina000023EastEuropeanRegion#040c2RORomania000017Canada#080c2ONOntario000019NewWorld#300c2ECEcuador000027Quebec#020c2SLSaguenay-Lac-Saint-Jean00001AUSA#WV0c2WVWest Virginia00001BBelize#040c2OWOrange Walk00001EBahamas#060c2CBCentral Abaco000014USA#GA0c2GAGeorgia000014Japan#360c2SHShiga00001ENorwayRegion#040c2BUBuskerud000017Bulgaria#630c2BHVidin00001EOntario#390c2PNPrince Edward000022MarshallIsland#MH.MH.KN0c2KNKnox00001BTanzania#TZ.MW0c2MWMwanza00001ARussia#RU.IK0c2IKIrkutsk00001APalau#PW.NP0c2NPNgatpang00001DUganda#UG.BN0c2BNBundibugyo00001ABenin#BJ.CL0c2CLCollines00002FHungaryRegions#HU.NG0c2NGNorthern Great Plain00001CVietnam#VN.HP0c2HPHaiPhong00001AAlgeria#DZ.SK0c2SKSkikda000017Nigeria#NG.ED0c2EDEdo000021Somalia#SO.JH0c2JHJubbada Hoose00001DMacedonia#MK.RV0c2RVRadovis000022Macedonia#MK.SL0c2SLSveti Nikole000018Niger#NE.TH0c2THTahoua000021NorthCarolina#0890c2HDHenderson000017Georgia#2410c2RBRabun00001BIreland#0090c2KICill Dara00001ENorthAmerica#0110c2GDGrenada000019Kansas#0430c2DPDoniphan000020SouthCarolina#0150c2BKBerkeley000019Illinois#0790c2JSJasper000024WorldwithCountries#1380c2DKDenmark00001BNorthDakota#0130c2BUBurke000019Texas#0710c2CHAChambers000017Ohio#0330c2CWCrawford00001ANewMexico#0050c2CHChaves00001BNebraska#0030c2ANAntelope000019Wyoming#0250c2NANatrona000026Europewithcountries#0070c2BGBulgaria000018Tennessee#0930c2KNKnox000021Scotland#0100c2DMDumbartonshire000023NewWorld#1830c2PGPapua New Guinea000018Oklahoma#0450c2ELEllis000016Iowa#0970c2JAJackson00001ATexas#4330c2STOStonewall000019NewJersey#0390c2UNUnion000018Indiana#0490c2FUFulton00001ANewYork#0210c2COColumbia000029YukonTerritory#CA.YT.NO0c2NONorth Yukon000023USANorthWestRegion#560c2WYWyoming00001CMontenegro#110c2MKMojkovac00001AMiddleEast#060c2JOJordan00001ESwitzerland#180c2SOSolothurn000024SouthEuropeanRegion#040c2HYCroatia000023EastEuropeanRegion#050c2UAUkraine000024Canada#090c2PEPrince Edward Island000022NewWorld#310c2FKFalkland Islands000022Quebec#030c2CNCapitale-Nationale00001BPuertoRico#490c2CUCulebra00001BBelize#050c2SCStann Creek00001FBahamas#070c2CNCentral Andros000014USA#FL0c2FLFlorida000016Japan#370c2SMShimane00001ENorwayRegion#050c2FIFinnmark000018Bulgaria#640c2BPVratsa00001COntario#400c2RARainy River000024MarshallIsland#MH.MH.KO0c2KOKosrae00001EFiji#FJ.TH.EA0c2EATholo East00001ETajikistan#TJ.KL0c2KLKhatlon00001BBurundi#BI.MY0c2MYMuyinga000032Guyana#GY.ES0c2ESEssequibo Islands-West Demerara00001BSerbia#RS.KO0c2KOKosovski00002BHungaryRegions#HU.NH0c2NHNorthern Hungary000029FranceDepartment#FR.EL0c2ELEure et Loir00001BAlgeria#DZ.TB0c2TBTebessa00001CSriLanka#LK.CO0c2COColombo000014Mali#ML.GA0c2GAGao000019Senegal#SN.KD0c2KDKolda000019Missouri#1810c2RIRipley000020Ireland#0100c2KLCill Chainnigh000020NorthAmerica#0120c2GTGuatemala000020California#0850c2STSanta Clara000016Texas#2530c2JONJones000017Nebraska#1850c2YOYork000016Georgia#0610c2CYClay000024WorldwithCountries#1390c2EEEstonia00001EMinnesota#1130c2PEPennington00001BKentucky#0970c2HIHarrison00001AMichigan#1070c2MCMecosta00001ANewMexico#0060c2CICibola00001CMississippi#0070c2ATAttala000025Europewithcountries#0080c2HYCroatia000021WestVirginia#0250c2GEGreenbrier000020Scotland#0110c2DUDumfriesshire000018NewWorld#1840c2WSSamoa000014Asia3#0260c2LALaos000018Virginia#1730c2SMSmyth00001BColorado#0050c2ARArapahoe00001DSouthDakota#0430c2DODouglas000019Alabama#0210c2CIChilton000020NewCaledonia#NC.NO.PM0c2PMPoum000017Bulgaria#650c2YYambol000018Ontario#410c2RERenfrew000026Montenegro#120c2NKNik&scaron;i&#263;00001AMiddleEast#070c2KUKuwait00001CSwitzerland#190c2THThurgau000023SouthEuropeanRegion#050c2GRGreece000022EastEuropeanRegion#060c2RURussia000016Canada#100c2QCQuebec00001FNewWorld#320c2GFFrench Guiana000018Quebec#040c2MAMauricie000016Belize#060c2TOToledo000022Bahamas#080c2CECentral Eleuthera000017Japan#380c2SZShizouka00001DNorwayRegion#060c2HEHedmark000029FrenchGuiana#GF.SL.SL0c2SLSaint Laurent000016Fiji#FJ.WE.BA0c2BABa00001CTanzania#TZ.MY0c2MYManyara00001FGuineaBissau#GW.BS0c2BSBissau00001BUK7#UK.IM0c2IMIsle of Man00001BZimbabwe#ZW.HA0c2HAHarare000026Serbia#RS.KP0c2KPKosovsko Pomoravski000025Singapore#SG.SO0c2SOSouth Singapore00001FCambodia#KH.MK0c2MKMondulkiri00001FCongo#CG.CO0c2COCuvette Ouest000019Angola#AO.MX0c2MXMoxico000019Algeria#DZ.AL0c2ALAlger000026Algeria#DZ.BB0c2BBBordj Bou Arreridj000029CentralAfricanRepublic#CF.LB0c2LBLobaye000020NorthCarolina#0910c2HTHertford00001AGeorgia#2430c2RARandolph000017Ireland#0110c2LALaois00001CNorthAmerica#0130c2HTHaiti000018Kansas#0450c2DGDouglas00001FSouthCarolina#0170c2CACalhoun00001CIllinois#0810c2JEJefferson000018Missouri#0010c2ADAdair000024WorldwithCountries#1400c2FIFinland00001ENorthDakota#0150c2BRBurleigh000019Texas#0730c2CHECherokee000017Ohio#0350c2CUCuyahoga00001ANewMexico#0070c2COColfax000019Nebraska#0050c2ARArthur00001AWyoming#0270c2NINiobrara00002CEuropewithcountries#0090c2CZCzech Republic000018Tennessee#0950c2LALake00001FScotland#0120c2EAEast Lothian000022NewWorld#1850c2SBSolomon Islands00001BOklahoma#0470c2GAGarfield000015Iowa#0990c2JSJasper000017Texas#4350c2SUTSutton00001ANewJersey#0410c2WAWarren000018Indiana#0510c2GIGibson00001ANewYork#0230c2CTCortland000017Ontario#420c2SISimcoe000018Montenegro#130c2PVPlav00001EMiddleEast#080c2KGKyrgyzstan00001BSwitzerland#200c2TITicino000022SouthEuropeanRegion#060c2ITItaly00001CCanada#110c2SKSaskatchewan000026USACentralRegion#380c2NDNorth Dakota000023USASouthWestRegion#040c2AZArizona000018NewWorld#330c2GYGuyana000016Quebec#050c2ESEstrie000014USA#WY0c2WYWyoming00001APuertoRico#510c2DODorado000021Bahamas#090c2FPCity of Freeport000016Japan#390c2TOTochigi00001FNorwayRegion#070c2HOHordaland000019Nepal#NP.LU0c2LULumbini00001ANepal#NP.NA0c2NANarayani000021HongKong#HK.KC0c2KCKowloon City000019Uganda#UG.TR0c2TRTororo000021Kiribati#KI.LI0c2LILine Islands00001CPhilippines#PH.AB0c2ABAbra00001DRussia#RU.IN0c2INIngushetia000021China2#CN.XJ0c2XJXinjiang Uygur00001APalau#PW.NS0c2NSNgchesar000021Lebanon#LE.JA0c2JASouth Lebanon00001BTuvalu#TV.FN0c2FNFunafuti00001CUzbekistan#UZ.NW0c2NWNavoi00001AAlgeria#DZ.BC0c2BCBechar00001DBurma#MM.KH0c2KHKayah State000022Macedonia#MK.SO0c2SOSuto Orizari000026Philippines#PH.SC0c2SCSouth Cotabato00001EMissouri#1830c2SRSt. Charles00001AIreland#0120c2LELiatroim00001FNorthAmerica#0140c2HNHonduras00001FCalifornia#0870c2SCSanta Cruz000017Texas#2550c2KARKarnes000019Georgia#0630c2CTClayton000023WorldwithCountries#1410c2FRFrance000018Minnesota#1150c2PIPine000017Kentucky#0990c2HTHart00001CMichigan#1090c2MMMenominee000018Florida#0270c2DEDesoto00001CMississippi#0090c2BEBenton000025Europewithcountries#0100c2DKDenmark000020WestVirginia#0270c2HAHampshire000017Scotland#0130c2FIFife000018NewWorld#1860c2TOTonga000018Asia3#0280c2MYMalaysia00001EVirginia#1750c2SUSouthampton00001CColorado#0070c2ACArchuleta00001DSouthDakota#0450c2EDEdmunds000019Alabama#0230c2COChoctaw00002EOntario#430c2STStormont, Dundas and Glengary000020Montenegro#140c2PLPlu&#382;ine00001BMiddleEast#090c2LELebanon000018Switzerland#210c2URUri000026SouthEuropeanRegion#070c2MKMacedonia00001FCanada#120c2YTYukon Territory00001ANewWorld#340c2PYParaguay00001FQuebec#060c2MNMontr&eacute;al00001FBahamas#100c2CKCrooked Island000018Japan#400c2TKTokushima00002CNorwayRegion#080c2MRM&oslash;re og Romsdal00001EFiji#FJ.TH.WE0c2WETholo West000021SierraLeone#SL.NO.KM0c2KMKambia00001BNiger#NE.TL0c2TLTillabery00001BTajikistan#TJ.LE0c2LESogd00001BDjibouti#DJ.DK0c2DKDikhil00002BRussia#RU.JE0c2JEJewish Autonomous Region00001BUganda#UG.BR0c2BRKabarole00001DBotswana#BW.KL0c2KLKgatleng000019China2#CN.FJ0c2FJFujian00001BVietnam#VN.HT0c2HTHa Tinh00001FCapeVerde#CV.MO0c2MOMosteiros00001AAlgeria#DZ.AN0c2ANAnnaba00001ANewYork#0250c2DEDelaware00001CNorthCarolina#0930c2HOHoke00001AGeorgia#2450c2RIRichmond00001BIreland#0130c2LILuimneach00001ENorthAmerica#0150c2JMJamaica000018Kansas#0470c2EDEdwards000022SouthCarolina#0190c2CHCharleston000019Illinois#0830c2JRJersey000019Missouri#0030c2ANAndrew000024WorldwithCountries#1420c2DEGermany00001ANorthDakota#0170c2CACass00001ATexas#0750c2CHIChildress000014Ohio#0370c2DADarke000019NewMexico#0090c2CUCurry000019Nebraska#0070c2BABanner000016Wyoming#0290c2PAPark000025Europewithcountries#0110c2EEEstonia00001ETennessee#0970c2LULauderdale000022Scotland#0140c2ISInverness-shire000019NewWorld#1870c2TVTuvalu000019Oklahoma#0490c2GRGarvin000018Iowa#1010c2JEJefferson000018Texas#4370c2SWISwisher000017Indiana#0530c2GRGrant000018Ontario#440c2SUSudbury00001CMontenegro#150c2PUPljevlja000018MiddleEast#100c2MUOman00001BSwitzerland#220c2VAValais000022SouthEuropeanRegion#080c2MTMalta000025Canada#130c2NTNorthwest Territories000022USACentralRegion#400c2OKOklahoma000026USASouthWestRegion#060c2CACalifornia000016NewWorld#350c2PEPeru000019Quebec#070c2OUOutaouais00001BPuertoRico#530c2FJFajardo000022Bahamas#110c2EBEast Grand Bahama000014Japan#410c2TYTokyo00001ENorwayRegion#090c2NONordland00001FPhilippines#PH.RO0c2RORomblon00001BUganda#UG.BS0c2BSBushenyi000028EquatorialGuinea#GQ.BN0c2BNBioko Norte00001DVietnam#VN.HU0c2HUHau Giang000021Morocco#MA.DA0c2DADoukkala Abda00001CMissouri#1850c2SISt. Clair00001AIreland#0140c2LOLongfort00001DNorthAmerica#0160c2MXMexico00001BCalifornia#0890c2SHShasta000018Texas#2570c2KAUKaufman00001ALouisiana#0010c2ACAcadia000020Virginia#7200c2NRNorton (City)000018Georgia#0650c2CIClinch000023WorldwithCountries#1430c2GRGreece00001DMinnesota#1170c2PSPipestone00001CKentucky#1010c2HEHenderson00001AMichigan#1110c2MDMidland000017Florida#0290c2DIDixie00001DMississippi#0110c2BOBolivar000025Europewithcountries#0120c2FIFinland00001BArkansas#0010c2ARArkansas00001EWestVirginia#0290c2HNHancock000022Scotland#0150c2KCKincardineshire00001ANewWorld#1880c2VUVanuatu000018Asia3#0300c2MNMongolia00001FVirginia#1770c2SPSpotsylvania000017Colorado#0090c2BABaca000020SouthDakota#0470c2FRFall River000018Alabama#0250c2CLClarke000030NewCaledonia#NC.SU.IP0c2IPL'&Icirc;le-des-Pins00001COntario#450c2TBThunder Bay00001DMontenegro#160c2PGPodgorica00001CMiddleEast#110c2PKPakistan000019Switzerland#230c2VUVaud000027SouthEuropeanRegion#090c2MOMontenegro000017Canada#140c2NUNunavut00001ANewWorld#360c2SRSuriname00002CQuebec#080c2ATAbitibi-T&eacute;miscamingue00001BPuertoRico#540c2FLFlorida000016Bahamas#120c2EMExuma000016Japan#420c2TTTottori00002BNorwayRegion#100c2NTNord-Tr&oslash;ndelag00001EPhilippines#PH.QZ0c2QZQuezon000029Philippines#PH.SF0c2SFShariff Kabunsuan000023CentralAmerica2#CE.GD0c2GDGrenada000017Yemen#YE.MA0c2MAMarib00001EEastTimor#TL.MF0c2MFManufahi00001EMacedonia#MK.BG0c2BGBogdanci00001BSudan#SD.BN0c2BNBlue Nile00001ECoteDivoire#CI.BF0c2BFBafing00001DThailand#TH.YS0c2YSYasothon00001CKuwait#KW.KU0c2KUAl Kuwayt000019Cameroon#CM.NO0c2NONord000025CaymanIslands#KY.GT0c2GTGeorge Town00001ESyria#SY.DY0c2DYDayr az Zawr000015Togo#TG.KA0c2KAKara00001FGhana#GH.AA0c2AAGreater Accra000018Indiana#0550c2GEGreene00001ANewYork#0270c2DUDutchess00001CNorthCarolina#0950c2HYHyde00001AGeorgia#2470c2RORockdale000021Missouri#1860c2SGSte. Genevieve00001BIreland#0150c2LUL&uacute;000020NorthAmerica#0170c2NINicaragua000014Kansas#0490c2EKElk000020SouthCarolina#0210c2CECherokee00001DIllinois#0850c2JDJo Daviess00001BMissouri#0050c2ATAtchison000024WorldwithCountries#1440c2HUHungary00001ENorthDakota#0190c2CVCavalier000015Texas#0770c2CLAClay000029Virginia#5400c2CVCharlottesville (City)000017Ohio#0390c2DEDefiance00001BNewMexico#0110c2DBDe Baca000019Nebraska#0090c2BLBlaine000018Wyoming#0310c2PLPlatte000024Europewithcountries#0130c2FRFrance00001CTennessee#0990c2LWLawrence000020Scotland#0160c2KNKinross-shire000020NewWorld#1890c2NCNew Caledonia000018Oklahoma#0510c2GDGrady000016Iowa#1030c2JOJohnson000015Asia3#0310c2NPNepal000018Texas#4390c2TARTarrant00001COntario#460c2TITimiskaming00001FMontenegro#170c2RORo&#382;aje000019MiddleEast#120c2QAQatar000018Switzerland#240c2ZUZug000025SouthEuropeanRegion#100c2PTPortugal000024USASouthWestRegion#080c2COColorado000019NewWorld#370c2UYUruguay00001FQuebec#090c2COC&ocirc;te-Nord000022PuertoRico#550c2GCGu&aacute;nica00001ABahamas#130c2GCGrand Cay000015Japan#430c2TAToyama00001DNorwayRegion#110c2OPOppland000022FrenchGuiana#GF.SL.AP0c2APApatou000024MarshallIsland#MH.MH.LK0c2LKLikiep000021Philippines#PH.SG0c2SGSarangani00001DEastTimor#TL.LQ0c2LQLiquica00001FMacedonia#MK.AR0c2ARAracinovo000018Serbia#RS.MA0c2MAMacva000018Palau#PW.NW0c2NWNgiwal000018Uganda#UG.BU0c2BUBusia000024Libya#LY.JA0c2JAAl Jabal al Akhdar000019Nigeria#NG.EK0c2EKEkiti000020Mauritania#MR.GD0c2GDGuidimaka00001DMacedonia#MK.SS0c2SSSopiste00001FMissouri#1870c2SFSt. Francois00001AIreland#0160c2MAMaigh Eo00001DNorthAmerica#0180c2PAPanama00001BCalifornia#0910c2SISierra000018Texas#2590c2KENKendall000019Louisiana#0030c2ALAllen000016Georgia#0670c2CBCobb000024WorldwithCountries#1450c2ISIceland000018Minnesota#1190c2PLPolk000018Kentucky#1030c2HYHenry00001CMichigan#1130c2MIMissaukee000017Florida#0310c2DUDuval00001DMississippi#0130c2CACalhoun000025Europewithcountries#0140c2DEGermany000019Arkansas#0030c2ASAshley00001CWestVirginia#0310c2HRHardy000025Scotland#0170c2KIKirkcudbrightshire00001ANewWorld#1900c2BABahrain00001BVirginia#1790c2STStafford000017Colorado#0110c2BEBent00001BSouthDakota#0490c2FAFaulk000016Alabama#0270c2CYClay000018Ontario#470c2TOToronto000021Montenegro#180c2SA&Scaron;avnik00001FMiddleEast#130c2SASaudiArabia00001BSwitzerland#250c2ZRZurich000027SouthEuropeanRegion#110c2SMSan Marino00001BNewWorld#380c2VEVenezuela000025Quebec#100c2NONord-du-Qu&eacute;bec000016Kenya#010c2CECentral00001FBahamas#140c2HBHarbour Island000017Japan#440c2WAWakayama00001ANorwayRegion#120c2OSOslo000032DICT_RSS.FEEDS0c000001ANAME0c1A1NameL4000371BMVBP.BP0c00006B3SBBP.SB.GETJOB0c0SUBROUTINE SBBP.SB.GETJOB(entry,startpos,bytes)** Copyright (C) 2006 Sierra Bravo Corporation, All Rights Reserved** Programm: SBBP.SB.LISTPEQS* Written by: Luke Bucklin, Sierra Bravo* Date: 04/24/06* Description: Send an XML document of the print queue (LISTPEQS)*COMMON /SBPRINT/ LINK.LIST, LINK.LIST.JOB*EQU P.JOB      TO 1EQU P.PORT     TO 2EQU P.STATUS   TO 3EQU P.QUEUE    TO 4EQU P.BYTES    TO 5EQU P.DATE     TO 6EQU P.TIME     TO 7EQU P.OWNER    TO 8EQU P.PREVIEW  TO 9*LINK.LIST = "" ; LINK.LIST.JOB = ""*CHUNKSIZE = 50000*FRAMESIZE = SYSTEM(32) ;* D3-only*IF NOT(startpos MATCHES "1N0N") THEN startpos = 1IF NOT( bytes MATCHES "1N0N") THEN bytes=99999999*EXECUTE "LISTPEQS ":entry CAPTURING PEQS.OUTLINES = DCOUNT( PEQS.OUT, @AM )GOOD.LINE = 0PINFO = ""FOR PL = 1 TO LINES-1 UNTIL GOOD.LINE  LINE = PEQS.OUT<PL>  GOOD.LINE = 1  previewsize = 0; GET.PREVIEW = 0  CALL SUB.SB.PARSEPEQS(LINE,PINFO,previewsize,GET.PREVIEW,GOOD.LINE)NEXT PL**CRT '<job id="':entry:'">'*CRT ' <date>':OCONV(PINFO<P.DATE>,'D2/'):'</date>'*CRT ' <time>':OCONV(PINFO<P.TIME>,'MTS'):'</time>'*CRT "<data><![CDATA[":CHUNKS = 0NO.PAGES = 1LOOP  IF bytes > CHUNKSIZE THEN    sendbytes = CHUNKSIZE    bytes -= CHUNKSIZE  END ELSE    sendbytes = bytes    bytes = 0  END  OUTPUT = ""  CALL SUB.SB.GET.ENTRY(entry,startpos,sendbytes,OUTPUT,ERR)  CHUNKS += 1  IF NOT(ERR) THEN    CONVERT CHAR(0) TO "" IN OUTPUT    CALL SWAP(OUTPUT,CHAR(12),'[0x12]')    NO.PAGES = NO.PAGES + COUNT( OUTPUT, CHAR(12) )    CRT OUTPUT:  END ELSE EXIT  startpos += sendbytesWHILE bytes AND OUTPUT # "" DO REPEAT*CRT ']]></data><pages>':NO.PAGES:'</pages>'*CRT '</job>'STOP000A12SUB.SB.GET.ENTRY0c0SUBROUTINE SUB.SB.GET.ENTRY(JOB,START.POS,BYTES,OUTPUT,ERR)** Copyright (C) 2006 Sierra Bravo Corporation, All Rights Reserved** Programm: SUB.SB.GET.ENTRY* Written by: Luke Bucklin, Sierra Bravo* Date: 04/24/06* Description: Extract a segment of print queue content*COMMON /SBPRINT/ LINK.LIST, LINK.LIST.JOB*FRAMESIZE = SYSTEM(32) ;* D3-onlyOUTPUT = ""ERR = ""BYTES.TO.GET = BYTES*EXECUTE "LISTPEQS ":JOB:" E" CAPTURING JOB.LINEJOB.LINE = JOB.LINE<5>	FID = JOB.LINE[34,8]IF FID # "" THEN  * Get full sequential list of frame IDs  FSIZE = FRAMESIZE-1  IF START.POS > 1 OR BYTES > FSIZE THEN    IF LINK.LIST.JOB # JOB THEN      * We didn't just build this recently, so go ahead and build it now      * associate the LINK.LIST (in common) with the job so if we are asked      * to build this linked list again for this job, we can skip this part      * and just pull it from common      LINK.LIST = FID      LINK.LIST.JOB = JOB      EXECUTE "DUMP .":FID:" L" CAPTURING LINKAGE      START.ROW = INDEX(LINKAGE,'+',1)      START.ROW = DCOUNT(LINKAGE[1,START.ROW],@AM)      MAX.ROWS = DCOUNT( LINKAGE, @AM )      FOR LX = START.ROW TO MAX.ROWS        ROW = LINKAGE<LX>        IF TRIM(ROW) # "" THEN          XFRAME = TRIM(FIELD( ROW,'(',2))          XFRAME = FIELD(XFRAME,' ',1)          LINK.LIST<-1> = XFRAME        END      NEXT LX    END    *    * First frame is FRAMESIZE-1 bytes because the first    * byte is a throwaway.    *    START.TEMP = START.POS    SKIP.FRAMES = 0    LOOP UNTIL START.TEMP <= FSIZE DO      SKIP.FRAMES += 1      START.TEMP -= FSIZE      FSIZE = FRAMESIZE    REPEAT    IF SKIP.FRAMES THEN OFFSET = START.TEMP-1 ELSE OFFSET = START.TEMP    IF SKIP.FRAMES = 0 AND OFFSET = 0 THEN OFFSET = 1  END ELSE    LINK.LIST = FID    OFFSET = 1    SKIP.FRAMES = 0  END  MAX.FRAMES = DCOUNT( LINK.LIST, @AM )  FX.START = 1 + SKIP.FRAMES  FOR FX = FX.START TO MAX.FRAMES WHILE BYTES.TO.GET     FID = LINK.LIST<FX>    EXECUTE "DUMP .":FID:" SX" CAPTURING PREVX.OUT    IF LEN(PREVX.OUT) # FRAMESIZE*2 THEN      ERR = 1      EXIT    END    IF OFFSET THEN      PREVX.OUT = PREVX.OUT[(OFFSET*2)+1,FRAMESIZE*2]    END    DATLEN = LEN(PREVX.OUT) / 2    PREVX.OUT = OCONV( PREVX.OUT, 'MY' )    IF DATLEN > BYTES.TO.GET THEN      PREVX.OUT = PREVX.OUT[1,BYTES.TO.GET]      BYTES.TO.GET = 0    END ELSE      BYTES.TO.GET -= DATLEN    END    OUTPUT := PREVX.OUT    CONVERT CHAR(0) TO "" IN OUTPUT    CONVERT @AM TO "^" IN OUTPUT    OFFSET = 0  NEXT FXEND ELSE ERR = 1RETURN000703SUB.SB.PARSEPEQS0c0SUBROUTINE SUB.SB.PARSEPEQS(LINE,PINFO,previewsize,GET.PREVIEW,GOOD.LINE)*EQU P.JOB      TO 1EQU P.PORT     TO 2EQU P.STATUS   TO 3EQU P.QUEUE    TO 4EQU P.BYTES    TO 5EQU P.DATE     TO 6EQU P.TIME     TO 7EQU P.OWNER    TO 8EQU P.PREVIEW  TO 9*FRAMESIZE = SYSTEM(32) ;* D3-onlyIF NOT(FRAMESIZE MATCHES "1N0N") THEN FRAMESIZE = 4000*PINFO = ""*JOB = TRIM(LINE[1,4])IF JOB MATCHES "1N0N" THEN  PINFO<P.JOB> = JOB  *  L.PORT = TRIM(LINE[15,5])  PINFO<P.PORT> = L.PORT  *  L.STATUS = TRIM(LINE[23,15])  STATUS.MSG = ""  IF INDEX(L.STATUS,'h',1) THEN    STATUS.MSG := 'Hold,'  END  IF INDEX(L.STATUS,'l',1) THEN    STATUS.MSG := 'Locked,'  END  IF INDEX(L.STATUS,'o',1) THEN    STATUS.MSG := 'Generating,'  END  IF INDEX(L.STATUS,'s',1) THEN    STATUS.MSG := 'Spooled,'  END ELSE IF INDEX(L.STATUS,'p',1) THEN    STATUS.MSG := 'To print,'  END ELSE IF INDEX(L.STATUS,'x',1) THEN    STATUS.MSG := 'Canceled,'  END  IF STATUS.MSG # "" THEN STATUS.MSG = STATUS.MSG[1,LEN(STATUS.MSG)-1] ;* Get rid of the trailing comma  PINFO<P.STATUS> = STATUS.MSG  *  L.QUEUE = TRIM(LINE[42,5])  PINFO<P.QUEUE> = L.QUEUE  *  L.BYTES = TRIM(LINE[47,7])  L.BYTES = L.BYTES * FRAMESIZE  PINFO<P.BYTES> = L.BYTES  *  L.DATE = TRIM(LINE[55,8])  L.DATE = ICONV( L.DATE,'D' )  PINFO<P.DATE> = L.DATE  *  L.TIME = TRIM(LINE[64,8])  L.TIME = ICONV( L.TIME, 'MTS' )  PINFO<P.TIME> = L.TIME  *  L.OWNER = TRIM(LINE[73,20])  PINFO<P.OWNER> = L.OWNER  *  IF GET.PREVIEW THEN    *    * Get preview unless we are searching -that's a whole different process.    *    L.PREVIEW = ""    CALL SUB.SB.GET.ENTRY(JOB,1,previewsize,L.PREVIEW,ERR)    IF ERR # "" THEN GOOD.LINE = 0    PINFO<P.PREVIEW> = L.PREVIEW  ENDEND ELSE GOOD.LINE = 0RETURN001F30SBBP.SB.LISTPEQS0c0** Copyright (C) 2008 Sierra Bravo Corporation, All Rights Reserved** Programm: SBBP.SB.LISTPEQS* Written by: Luke Bucklin, Sierra Bravo* Adapted by: David Bucklin, Sierra Bravo*             CGI Version of the Bravo Print XML API* Date: 04/24/06* Description: Send an XML document of the print queue (LISTPEQS)*COMMON /SBPRINT/ LINK.LIST, LINK.LIST.JOBINCLUDE WBPD WWW.INCLUDE*LINK.LIST = "" ; LINK.LIST.JOB = ""*EQU P.JOB      TO 1EQU P.PORT     TO 2EQU P.STATUS   TO 3EQU P.QUEUE    TO 4EQU P.BYTES    TO 5EQU P.DATE     TO 6EQU P.TIME     TO 7EQU P.OWNER    TO 8EQU P.PREVIEW  TO 9*OPEN '','SBBP.FORMS' TO F.SBBP.FORMS ELSE STOP 201, 'SBBP.FORMS'*CALL WDB.VARS(VARS,VALS)*FRAMESIZE = SYSTEM(32) ;* D3-only*LOCATE "entrystart" IN VARS SETTING POS THEN  entrystart = VALS<POS>END ELSE entrystart = ""LOCATE "entries" IN VARS SETTING POS THEN  entries = VALS<POS>END ELSE entries = ""LOCATE "begindate" IN VARS SETTING POS THEN  begindate = VALS<POS>  begindate = ICONV(begindate,'D')END ELSE begindate = ""LOCATE "enddate" IN VARS SETTING POS THEN  enddate = VALS<POS>  enddate = ICONV(enddate,'D')END ELSE enddate = ""LOCATE "owner" IN VARS SETTING POS THEN  owner = VALS<POS>END ELSE owner = ""LOCATE "queue" IN VARS SETTING POS THEN  queue = VALS<POS>END ELSE queue = ""LOCATE "previewsize" IN VARS SETTING POS THEN  previewsize = VALS<POS>END ELSE previewsize = ""LOCATE "port" IN VARS SETTING POS THEN  port = VALS<POS>END ELSE port = ""LOCATE "searchstring" IN VARS SETTING POS THEN  searchstring = VALS<POS>END ELSE searchstring = ""IF searchstring # "" THEN GET.PREVIEW = 0 ELSE GET.PREVIEW = 1IF NOT(previewsize MATCHES "1N0N") THEN  previewsize = 500ENDLOCATE "entry" IN VARS SETTING POS THEN  entry = VALS<POS>END ELSE entry = ""LOCATE "action" IN VARS SETTING POS THEN  action = VALS<POS>END ELSE action = ""**ERROR = ""ALL.ENTRIES.FOUND = 0ENTRY.LIST = ''LOOP  LOCATE "entries[]" IN VARS SETTING POS THEN    ENTRY.LIST<-1> = VALS<POS>    VARS<POS> = "XXX"  END ELSE ALL.ENTRIES.FOUND = 1UNTIL ALL.ENTRIES.FOUND DO REPEATIF entry # "" THEN ENTRY.LIST<-1> = entryECNT = DCOUNT( ENTRY.LIST, @AM )FOR EX = 1 TO ECNT  entry = ENTRY.LIST<EX>  BEGIN CASE    CASE entry = ""      CMD = ''    CASE action = "delete"      CMD = "SP-KILL ":entry:"F"      EXECUTE CMD CAPTURING JUNK      CMD = "SP-EDIT ":entry:" MUD"    CASE action = "print"      EXECUTE "SP-KILL ":entry:"F" CAPTURING JUNK      IF queue # "" THEN        EXECUTE "SP-ASSIGN F":queue CAPTURING JUNK      END      CMD = "SP-EDIT ":entry:" MSRU"    CASE action = "release"      CMD = "SP-KILL ":entry:"F"    CASE action = "downloadtxt"      CRT "Content-Type: text/plain"      CRT "Content-Disposition: attachment;filename=":entry:".txt"      CRT      SESSION$CONTENT.SENT = 1      CALL SBBP.SB.GETJOB(entry,1,"")      STOP      CASE 1      CMD = ''  END CASE  IF CMD # "" THEN    EXECUTE CMD CAPTURING JUNK  ENDNEXT EX*CMD.SUFF = ""IF entrystart # "" THEN  CMD.SUFF = entrystart:"-9999 "ENDIF owner # "" THEN  CMD.SUFF := "'":owner:"' "END*EXECUTE "LISTPEQS ":CMD.SUFF CAPTURING PEQS.OUT*CRT "Content-Type: text/html"CRTSESSION$CONTENT.SENT = 1*READ FORM.DATA FROM F.SBBP.FORMS, 'listpeqs.html' ELSE FORM.DATA = ''FORM.HDR.POS = INDEX( FORM.DATA, '[QUEUE]', 1 )-1PART1 = FORM.DATA[1,FORM.HDR.POS]CONVERT @AM TO CHAR(13) IN PART1CRT PART1PART2 = FORM.DATA[FORM.HDR.POS+7,99999]XML = ""*LINES.SENT = 0LINES = DCOUNT( PEQS.OUT, @AM )FOR PL = 1 TO LINES-1  LINE = PEQS.OUT<PL>  GOOD.LINE = 1  CALL SUB.SB.PARSEPEQS(LINE,PINFO,previewsize,GET.PREVIEW,GOOD.LINE)  * Filtering  BEGIN CASE    CASE NOT(GOOD.LINE) ; NULL    CASE PINFO<P.JOB> = "" ; GOOD.LINE = 0    CASE begindate # "" AND enddate # ""      IF PINFO<P.DATE> < begindate OR PINFO<P.DATE> > enddate THEN GOOD.LINE = 0    CASE port # "" AND PINFO<P.PORT> # port ; GOOD.LINE = 0    CASE queue # "" AND	 PINFO<P.QUEUE> # queue ; GOOD.LINE = 0    CASE 1      NULL  END CASE  IF GOOD.LINE THEN    *     IF searchstring # "" THEN      JOB = PINFO<P.JOB>      GOSUB SEARCH.JOB    END  END  IF GOOD.LINE THEN    LINES.SENT += 1    *    PDATE = OCONV(PINFO<P.DATE>,'D2/')    PTIME = OCONV(PINFO<P.TIME>,'MTS')    *    IF LINES.SENT / 2 = INT(LINES.SENT/2) THEN      XML<-1> = '<tr class="even">'    END ELSE      XML<-1> = '<tr class="odd">'    END    XML<-1> = '<td><input type="checkbox" name="entries[]" value="':PINFO<P.JOB>:'" /></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?entry=':PINFO<P.JOB>:'&action=downloadtxt">':PINFO<P.JOB>:'</a></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?queue=':PINFO<P.QUEUE>:'">':PINFO<P.QUEUE>:'</a></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?owner=':PINFO<P.OWNER>:'">':PINFO<P.OWNER>:'</a></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?port=':PINFO<P.PORT>:'">':PINFO<P.PORT>:'</a></td>'    XML<-1> = '<td align="right">':OCONV(PINFO<P.BYTES>/1000,'MD,'):'</td>'    XML<-1> = '<td>':OCONV(PINFO<P.DATE>,'D2/'):' ':OCONV(PINFO<P.TIME>,'MTS'):'</td>'    XML<-1> = '<td>':PINFO<P.STATUS>:'</td>'    XML<-1> = \<td><a href="#" title="Print Job" onclick="Effect.SlideDown('printDialog\:PINFO<P.JOB>:\',{duration:0.25}); return false;"><img src="/db/images/button_print.gif"/></a>\*    XML<-1> = \<a href="/viewjob.php?entry=\:PINFO<P.JOB>:\&date=\:PDATE:\&time=\:PTIME:\" title="View Job"><img src="/db/images/button_preview.gif"/></a>\    XML<-1> = \<a href="/dbc/SBBP.SB.LISTPEQS?action=downloadtxt&entry=\:PINFO<P.JOB>:\&date=\:PDATE:\&time=\:PTIME:\" title="Download Job as TXT File"><img src="/db/images/button_downloadtxt.gif"/></a>\    XML<-1> = \<a href="/dbc/SBBP.SB.LISTPEQS?action=delete&entry=\:PINFO<P.JOB>:\&queue=&port=&owner=&searchstring=&begindate=&enddate=&search_type=" title="Delete Job" class="deletejob" onclick="return confirm('Are you sure you want to delete this job?')"><img src="/db/images/button_delete.gif"/></a>\    XML<-1> = '<div style="position:relative;">'    XML<-1> = '<div class="printDialog" id="printDialog':PINFO<P.JOB>:'" style="display:none;">'    XML<-1> = \<div> Queue <input type="text" value="0" style="width:40px;" maxlength="4" id="overrideQueue\:PINFO<P.JOB>:\"/>\    XML<-1> = \<span class="button"><button type="button" onclick="document.location='/dbc/SBBP.SB.LISTPEQS?action=print&entry=\:PINFO<P.JOB>:\&overridequeue='+$F('overrideQueue\:PINFO<P.JOB>:\')+'&queue=&port=&owner=&searchstring=&begindate=&enddate=&search_type='">Print</button></span>\    XML<-1> = \<span class="button"><button type="button" onclick="Effect.SlideUp('printDialog\:PINFO<P.JOB>:\',{duration:0.25});return false;">Cancel</button></span>\    XML<-1> = '</div> </div>'    XML<-1> = '<pre class="preview">'    XML<-1> = PINFO<P.PREVIEW>    XML<-1> = '</pre> </div> </td> </tr>'    CALL WEB.SEND(XML)    XML = ''    *    *IF LINES.SENT >= entries AND entries # "" THEN EXIT  ENDNEXT PLCALL WEB.SEND(PART2)STOP*SEARCH.JOB: * Search the job for the string*START.POS = 1GOOD.LINE = 0SEARCHBUFFSIZE = 15000LOOP  BUFFER = ""*  PRINT "Searching job # ":JOB:" ":START.POS:",":SEARCHBUFFSIZE  CALL SUB.SB.GET.ENTRY(JOB,START.POS,SEARCHBUFFSIZE,BUFFER,ERR)  IF NOT(ERR) THEN    FOUND.POS = INDEX( BUFFER, searchstring, 1 )    IF FOUND.POS THEN      BACK.UP = FOUND.POS - INT(previewsize/2) - 140      START.POS = START.POS + BACK.UP      CALL SUB.SB.GET.ENTRY(JOB,START.POS,previewsize,L.PREVIEW,ERR)      FOUND.NL = 0      FOR NL = 1 TO 250 UNTIL FOUND.NL      	CH = L.PREVIEW[NL,1]      	IF CH = CHAR(10) OR CH = CHAR(13) THEN      	  L.PREVIEW = L.PREVIEW[NL,previewsize]      	  FOUND.NL = 1      	END      NEXT NL      PINFO<P.PREVIEW> = L.PREVIEW      GOOD.LINE = 1    END ELSE      START.POS = START.POS + SEARCHBUFFSIZE - LEN(searchstring)    END  END ELSE EXITUNTIL ERR OR GOOD.LINE OR BUFFER = "" DO REPEATRETURN04D96AMVDB.SUBS0c0000BE6SUB.TABLE.LIC.USED0c2SUBROUTINE SUB.TABLE.LIC.USED** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here** Modified by Peter Schellenbach of Zumasys 06-08-15:*  Changed test of ENUM after EXECUTE to test SYSTEM(11) instead.*W$TITLE = "Dashboard Users Logged On"     ;* Title for widget title barW$TYPE = "TABLE"                ;* Filled in by editorW$WIDTH = 2                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*OPEN 'WEB.SESSION' TO F.WEB.SESSION ELSE RETURN*IF WIDGET.USER.DATA(1) # "" THEN DELETE F.WEB.SESSION, WIDGET.USER.DATA(1)WIDGET.USER.DATA(1) = ""*TBL=""EXECUTE 'SELECT WEB.SESSION' RETURNING ENUM CAPTURING ETXT*PJS 06-08-15*IF ENUM[1,3]="404" ELSE RETURNIF SYSTEM(11) = 0 THEN RETURN ; *PJS 06-08-15*LOOP READNEXT ID ELSE ID="\\EOF"UNTIL ID="\\EOF" DO READ REC FROM F.WEB.SESSION,ID THEN   LOCATE "userid" IN REC<1> SETTING IX THEN     UID=REC<2,IX>     LOCATE "LastSessionAccess" IN REC<1> SETTING IX THEN       LSA=REC<2,IX>     END ELSE       LSA=00000*00000     END     LSA.DT=FIELD(LSA,"*",1)     LSA.TM=FIELD(LSA,"*",2)     LGN.DT=REC<3>     LGN.TM=REC<4>     LOCARG=LGN.DT:"*":LGN.TM:"*":LSA     LOCATE LOCARG IN TBL<1> BY "AR" SETTING IX ELSE NULL     TBL=INSERT(TBL,1,IX;LOCARG)     TBL=INSERT(TBL,2,IX;UID)     TBL=INSERT(TBL,3,IX;ID)   END ENDREPEAT** Set up column labelsW$TABLE.COL.LABELS<1,1> = "User Login ID"W$TABLE.COL.LABELS<1,2> = "Session#"W$TABLE.COL.LABELS<1,3> = "Login Date"W$TABLE.COL.LABELS<1,4> = "Login Time"W$TABLE.COL.LABELS<1,5> = "Last Act Date"W$TABLE.COL.LABELS<1,6> = "Last Act Time"** Column justification = left, right, centerW$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "right"W$TABLE.COL.JUST<1,3> = "right"W$TABLE.COL.JUST<1,4> = "right"W$TABLE.COL.JUST<1,5> = "right"W$TABLE.COL.JUST<1,6> = "right"** Table RowsTBL.MAX = DCOUNT(TBL<1>,CHAR(253))FOR ROW = 1 TO TBL.MAX W$TABLE.DATA<ROW,1> = TBL<2,ROW> IF TBL<3,ROW> = SESSION$ID THEN W$TABLE.DATA<ROW,2> = "*":ROW ELSE W$TABLE.DATA<ROW,2> = ROW W$TABLE.DATA<ROW,3> = OCONV(FIELD(TBL<1,ROW>,"*",1),"D2/") W$TABLE.DATA<ROW,4> = OCONV(FIELD(TBL<1,ROW>,"*",2),"MTS") W$TABLE.DATA<ROW,5> = OCONV(FIELD(TBL<1,ROW>,"*",3),"D2/") W$TABLE.DATA<ROW,6> = OCONV(FIELD(TBL<1,ROW>,"*",4),"MTS")NEXT ROW** TotalsW$TABLE.TOTALS<1,3> = TBL.MAXW$TABLE.TOTALS<1,4> = "Consumed"LIC.AVAIL = "Unlimited"IF ASSIGNED(G$LICENSE.COUNT) THEN IF NUM(G$LICENSE.COUNT) THEN   LIC.AVAIL = G$LICENSE.COUNT - TBL.MAX ENDENDW$TABLE.TOTALS<1,5> = LIC.AVAILW$TABLE.TOTALS<1,6> = "Available"*W$INPUT.PROMPT<1> = "Sessions"W$INPUT.TYPE<1> = "SELECT"W$INPUT.DEFAULT<1> = 0W$INPUT.UDPOS<1> = 1W$INPUT.BUTTON<1> = "Log Off"W$INPUT.SELOPTS<1> = "Nobody"W$INPUT.SELVALS<1> = 0FOR ROW = 1 TO TBL.MAX IF SESSION$ID = TBL<3,ROW> ELSE   W$INPUT.SELOPTS<1,-1> = ROW:" ":TBL<2,ROW>   W$INPUT.SELVALS<1,-1> = TBL<3,ROW> ENDNEXT ROW*RETURN002FD3MV.DEMO.MAP0c2    SUBROUTINE MV.DEMO.MAP* @(#) MV.DEMO.MAP Ported to jBASE 17:55:31  08 JUL 2015*  The following variable names were converted*   TABLE* ** Copyright (c) 2010 SB, Inc. All rights reserved.** 6-1-15 ZUMASYS CHANGED MAP ID DELIMITER TO # INSTEAD OF *    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Data Evolution - Demographics"    W$TYPE = "MAP:USASouthWestRegion"    W$WIDTH = 3*    IF G$QUERYMODE THEN RETURN*    TYPE.ID=WIDGET.USER.DATA(1)    BEGIN CASE    CASE TYPE.ID="04"        W$TYPE="MAP:Arizona"        WIDGET.USER.DATA(6)="Arizona"        ACT.FACT=.08    CASE TYPE.ID="06"        W$TYPE="MAP:California"        WIDGET.USER.DATA(6)="California"        ACT.FACT=.08    CASE TYPE.ID="32"        W$TYPE="MAP:Nevada"        WIDGET.USER.DATA(6)="Nevada"        ACT.FACT=.08    CASE TYPE.ID="49"        W$TYPE="MAP:Utah"        WIDGET.USER.DATA(6)="Utah"        ACT.FACT=.08    CASE 1        ACT.FACT=1    END CASE***_____Set Widget Variables_____    IF WIDGET.USER.DATA(4)="" THEN WIDGET.USER.DATA(4)="ALL"    IF WIDGET.USER.DATA(5)="" THEN WIDGET.USER.DATA(5)="Inquiry"**_____Open Files_____    OPEN 'Territories' TO F.TERR ELSE ABORT 201,'Territories'    OPEN 'SalesSum' TO F.SSUM ELSE ABORT 201,'SalesSum'    OPEN 'SalesReps' TO F.SREP ELSE ABORT 201,'SalesReps'**_____Set Period_____    WYR=OCONV(DATE(),"DY")    WMO=OCONV(DATE(),"DM") - 1    IF WMO<1 THEN WYR-=1;WMO=12    CAL.PERIOD=WYR'R%4':WMO'R%2'    IF WIDGET.USER.DATA(3) MATCHES "6N" THEN        END.PERIOD=WIDGET.USER.DATA(3)        WYR=END.PERIOD[1,4]        WMO=END.PERIOD[5,2]    END ELSE        END.PERIOD=CAL.PERIOD        WIDGET.USER.DATA(3)=END.PERIOD    END    WMO-=5    IF WMO<1 THEN WYR-=1; WMO+=12    BEG.PERIOD=WYR'R%4':WMO'R%2'**_____Set Up Input Prompts_____    W$INPUT.PROMPT<1>="Region"    W$INPUT.TYPE<1>="SELECT"    W$INPUT.SELOPTS<1,1>="SouthWest"    W$INPUT.SELVALS<1,1>=""    W$INPUT.SELOPTS<1,2>="California"    W$INPUT.SELVALS<1,2>="06"    W$INPUT.SELOPTS<1,3>="Nevada"    W$INPUT.SELVALS<1,3>="32"    W$INPUT.SELOPTS<1,4>="Utah"    W$INPUT.SELVALS<1,4>="49"    W$INPUT.SELOPTS<1,5>="Arizona"    W$INPUT.SELVALS<1,5>="04"    W$INPUT.UDPOS<1>=1    W$INPUT.DEFAULT<1>=WIDGET.USER.DATA(1)    W$INPUT.PROMPT<3>="Ending Period"    W$INPUT.TYPE<3>="SELECT"    WYR=CAL.PERIOD[1,4]-2    WMO=CAL.PERIOD[5,2]+1    IF WMO>12 THEN WYR+=1; WMO=1    SEL.PERIOD=WYR'R%4':WMO'R%2'    FOR PERIOD=CAL.PERIOD TO SEL.PERIOD STEP -1        WYR=PERIOD[1,4]        WMO=PERIOD[5,2]        IF WMO<1 THEN            WYR-=1            WMO=12            PERIOD=WYR'R%4':WMO'R%2'        END        WMO=OCONV(WMO*30-15,"DMA")[1,3]        WPERIOD=WMO:" ":WYR        W$INPUT.SELOPTS<3,-1>=WPERIOD        W$INPUT.SELVALS<3,-1>=PERIOD    NEXT PERIOD    W$INPUT.UDPOS<3>=3    W$INPUT.DEFAULT<3>=WIDGET.USER.DATA(3)    W$INPUT.PROMPT<4>="Sales Rep"    W$INPUT.TYPE<4>="SELECT"    W$INPUT.SELOPTS<4>="Everyone"    W$INPUT.SELVALS<4>="ALL"    SELECT F.SREP    SALESREPS=""    LOOP        READNEXT SREPINIT ELSE SREPINIT="\\EOF"    UNTIL SREPINIT="\\EOF" DO        READ SREPITEM FROM F.SREP,SREPINIT THEN            LOCATE SREPINIT IN SALESREPS<1> BY "AL" SETTING IX ELSE                SALESREPS=INSERT(SALESREPS,1,IX;SREPINIT)                SALESREPS=INSERT(SALESREPS,2,IX;SREPITEM<1>)            END        END    REPEAT    SREP.MAX=DCOUNT(SALESREPS<1>,CHAR(253))    FOR RVX=1 TO SREP.MAX        W$INPUT.SELOPTS<4,-1>=SALESREPS<2,RVX>        W$INPUT.SELVALS<4,-1>=SALESREPS<1,RVX>    NEXT RVX    W$INPUT.UDPOS<4>=4    W$INPUT.DEFAULT<4>=WIDGET.USER.DATA(4)    W$INPUT.PROMPT<5>="Demographic"    W$INPUT.TYPE<5>="SELECT"    W$INPUT.SELOPTS<5,1>="Inquiries"    W$INPUT.SELVALS<5,1>="Inquiry"    W$INPUT.SELOPTS<5,2>="Demos"    W$INPUT.SELVALS<5,2>="Demo"    W$INPUT.SELOPTS<5,3>="Quotes"    W$INPUT.SELVALS<5,3>="Quote"    W$INPUT.SELOPTS<5,4>="Orders"    W$INPUT.SELVALS<5,4>="Order"    W$INPUT.UDPOS<5>=5    W$INPUT.DEFAULT<5>=WIDGET.USER.DATA(5)    W$INPUT.BUTTON="Apply"**    STATES<1,1>="USASouthWestRegion*04"    STATES<1,2>="USASouthWestRegion*06"    STATES<1,3>="USASouthWestRegion*32"    STATES<1,4>="USASouthWestRegion*49"    COUNTIES=""*    W$TITLE = "Data Evolution - ":WIDGET.USER.DATA(5):" Demographics"    BEGIN CASE    CASE WIDGET.USER.DATA(5)="Inquiry"; AX=6 ;ACTIVE=1000*ACT.FACT    CASE WIDGET.USER.DATA(5)="Demo"   ; AX=7 ;ACTIVE=500*ACT.FACT    CASE WIDGET.USER.DATA(5)="Quote"  ; AX=8 ;ACTIVE=300*ACT.FACT    CASE WIDGET.USER.DATA(5)="Order"  ; AX=9 ;ACTIVE=100*ACT.FACT    END CASE*    TERRITORIES = ""    SELECT F.TERR    LOOP        READNEXT TERR ELSE TERR="\\EOF"    UNTIL TERR="\\EOF" DO        READ TERRITEM FROM F.TERR,TERR THEN            IF WIDGET.USER.DATA(4)="ALL" OR WIDGET.USER.DATA(4)=TERRITEM<2> THEN                LOCATE TERR IN TERRITORIES<1> BY "AR" SETTING IX ELSE                    TERRITORIES=INSERT(TERRITORIES,1,IX;TERR)                    TERRITORIES=INSERT(TERRITORIES,2,IX;TERRITEM<1>)                    TERRITORIES=INSERT(TERRITORIES,3,IX;TERRITEM<2>)                    TERRITORIES=INSERT(TERRITORIES,4,IX;TERRITEM<3>)                    IF TYPE.ID="" THEN                        MAP.IDS=FIELD(TERRITEM<4,1>,"*",1)[1,2]                        BEGIN CASE                        CASE MAP.IDS="Ar"; MAP.IDS="USASouthWestRegion*04"                        CASE MAP.IDS="Ca"; MAP.IDS="USASouthWestRegion*06"                        CASE MAP.IDS="Ne"; MAP.IDS="USASouthWestRegion*32"                        CASE MAP.IDS="Ut"; MAP.IDS="USASouthWestRegion*49"                        END CASE                        TERRITORIES=INSERT(TERRITORIES,5,IX;MAP.IDS)                    END ELSE                        CMAX=DCOUNT(TERRITEM<4>,CHAR(253))                        FOR CX=1 TO CMAX                            IF WIDGET.USER.DATA(6)=FIELD(TERRITEM<4,CX>,"*",1) THEN                                COUNTIES<1,-1>=TERRITEM<4,CX>                            END                        NEXT CX                    END                END            END        END    REPEAT*    TERR.MAX=DCOUNT(TERRITORIES<1>,CHAR(253))    IF WIDGET.USER.DATA(4)="ALL" THEN        SNAME="Everyone"    END ELSE        READV SNAME FROM F.SREP,WIDGET.USER.DATA(4),1 ELSE            SNAME="Unknown"        END    END*    QTYS=""    FOR PERIOD=BEG.PERIOD TO END.PERIOD        WYR=PERIOD[1,4]        WMO=PERIOD[5,2]        IF WMO>12 THEN PERIOD=(WYR+1)'R%4':"01"        FOR TERRX=1 TO TERR.MAX            TERR=TERRITORIES<1,TERRX>            READ SALES FROM F.SSUM,TERR:"*":PERIOD THEN                IF TYPE.ID="" THEN                    Table=TERRITORIES<5,TERRX>                    Table<2>=SUM(SALES<AX>)                    TBL.MAX=DCOUNT(Table<1>,CHAR(253))                    FOR TBLX=1 TO TBL.MAX                        LOCATE Table<1,TBLX> IN STATES<1> SETTING TX THEN                            QTYS<TX>+=Table<2,TBLX>                        END                    NEXT TBLX                END ELSE                    Table=SALES<10>                    Table<2>=SALES<AX>                    TBL.MAX=DCOUNT(Table<1>,CHAR(253))                    FOR TBLX=1 TO TBL.MAX                        LOCATE Table<1,TBLX> IN COUNTIES<1> SETTING TX THEN                            QTYS<TX>+=Table<2,TBLX>                        END                    NEXT TBLX                END            END        NEXT TERRX    NEXT PERIOD*    OPEN 'MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'*    IF TYPE.ID="" THEN        MAX=DCOUNT(STATES,CHAR(253))        FOR X=1 TO MAX            ID=STATES<1,X>            CONVERT '*' TO '#' IN ID    ;*6-1-15*            READ I FROM F.MVDB.MAP.DATA,ID THEN*6-1-15*      W$MAP.IDS<1,-1> = FIELD(ID,'*',2)                W$MAP.IDS<1,-1> = FIELD(ID,'#',2) ;*6-1-15*                W$MAP.VALUES<1,-1> = QTYS<X>+0                W$MAP.VALUE.TOOLTEXT<1,-1> := I<2>:' (':(QTYS<X>+0):')'                W$MAP.VALUE.DD<1,-1> = 1            END        NEXT X    END ELSE        MAX=DCOUNT(COUNTIES,CHAR(253))        FOR X=1 TO MAX            ID=COUNTIES<1,X>            CONVERT '*' TO '#' IN ID    ;*6-1-15*            READ I FROM F.MVDB.MAP.DATA,ID THEN*6-1-15*      W$MAP.IDS<1,-1> = FIELD(ID,'*',2)                W$MAP.IDS<1,-1> = FIELD(ID,'#',2) ;*6-1-15*                W$MAP.VALUES<1,-1> = QTYS<X>+0                W$MAP.VALUE.TOOLTEXT<1,-1> := I<2>:' (':(QTYS<X>+0):')'            END        NEXT X    END*    W$MAP.RANGE.NAME<1,1> = "No Activity"    W$MAP.RANGE.COLOR<1,1> = "#404040"    W$MAP.RANGE.NAME<1,2> = "Light Activity"    W$MAP.RANGE.COLOR<1,2> = "#4682B4"    W$MAP.RANGE.NAME<1,3> = "Moderate Activity"    W$MAP.RANGE.COLOR<1,3> = "#FF8C00"    W$MAP.RANGE.NAME<1,4> = "Heavy Activity"    W$MAP.RANGE.COLOR<1,4> = "#FF0000"*    W$MAP.RANGE.LOW<1,1> = 0    W$MAP.RANGE.HIGH<1,1> = 1    W$MAP.RANGE.LOW<1,2> = 1    W$MAP.RANGE.HIGH<1,2> = ACTIVE    W$MAP.RANGE.LOW<1,3> = ACTIVE    W$MAP.RANGE.HIGH<1,3> = ACTIVE*3    W$MAP.RANGE.LOW<1,4> = ACTIVE*3    W$MAP.RANGE.HIGH<1,4> = "999999"*    W$CHART.OPTIONS<-1> = 'animation="0"'    W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'    W$CHART.OPTIONS<-1> = 'legendShadow="1"'    W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'*    W$LINK.LABEL<1,1> = "California"    W$LINK.UD.VAL<1,1,1> = "06"    W$LINK.UD.POS<1,1,1> = "1"    W$LINK.UD.VAL<1,1,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,1,2> = "2"    W$LINK.UD.VAL<1,1,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,1,3> = "3"    W$LINK.UD.VAL<1,1,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,1,4> = "4"    W$LINK.UD.VAL<1,1,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,1,5> = "5"    W$LINK.UD.VAL<1,1,6> = "California"    W$LINK.UD.POS<1,1,6> = "6"    W$LINK.LOCATION<1,1> = "2"    W$LINK.DD.WIDGET<1,1> = "MV Demo Map"*    W$LINK.LABEL<1,2> = "Nevada"    W$LINK.UD.VAL<1,2,1> = "32"    W$LINK.UD.POS<1,2,1> = "1"    W$LINK.UD.VAL<1,2,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,2,2> = "2"    W$LINK.UD.VAL<1,2,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,2,3> = "3"    W$LINK.UD.VAL<1,2,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,2,4> = "4"    W$LINK.UD.VAL<1,2,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,2,5> = "5"    W$LINK.UD.VAL<1,2,6> = "Nevada"    W$LINK.UD.POS<1,2,6> = "6"    W$LINK.LOCATION<1,2> = "2"    W$LINK.DD.WIDGET<1,2> = "MV Demo Map"*    W$LINK.LABEL<1,3> = "Utah"    W$LINK.UD.VAL<1,3,1> = "49"    W$LINK.UD.POS<1,3,1> = "1"    W$LINK.UD.VAL<1,3,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,3,2> = "2"    W$LINK.UD.VAL<1,3,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,3,3> = "3"    W$LINK.UD.VAL<1,3,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,3,4> = "4"    W$LINK.UD.VAL<1,3,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,3,5> = "5"    W$LINK.UD.VAL<1,3,6> = "Utah"    W$LINK.UD.POS<1,3,6> = "6"    W$LINK.LOCATION<1,3> = "2"    W$LINK.DD.WIDGET<1,3> = "MV Demo Map"*    W$LINK.LABEL<1,4> = "Arizona"    W$LINK.UD.VAL<1,4,1> = "04"    W$LINK.UD.POS<1,4,1> = "1"    W$LINK.UD.VAL<1,4,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,4,2> = "2"    W$LINK.UD.VAL<1,4,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,4,3> = "3"    W$LINK.UD.VAL<1,4,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,4,4> = "4"    W$LINK.UD.VAL<1,4,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,4,5> = "5"    W$LINK.UD.VAL<1,4,6> = "Arizona"    W$LINK.UD.POS<1,4,6> = "6"    W$LINK.LOCATION<1,4> = "2"    W$LINK.DD.WIDGET<1,4> = "MV Demo Map"*    W$LINK.LABEL<1,5> = "SouthWest Region"    W$LINK.UD.VAL<1,5,1> = ""    W$LINK.UD.POS<1,5,1> = "1"    W$LINK.UD.VAL<1,5,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,5,2> = "2"    W$LINK.UD.VAL<1,5,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,5,3> = "3"    W$LINK.UD.VAL<1,5,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,5,4> = "4"    W$LINK.UD.VAL<1,5,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,5,5> = "5"    W$LINK.UD.VAL<1,5,6> = ""    W$LINK.UD.POS<1,5,6> = "6"    W$LINK.LOCATION<1,5> = "2"    W$LINK.DD.WIDGET<1,5> = "MV Demo Map"*    INCLUDE WBPD SOURCE.VIEW.ICON*    RETURN000365SUB.SOURCE.VIEW0c2SUBROUTINE SUB.SOURCE.VIEW** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: View BASIC Source Code**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TEXT"W$TITLE = "Source: ":WIDGET.USER.DATA(1):", ":WIDGET.USER.DATA(2)W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN WIDGET.USER.DATA(1) TO F.FILEVAR THEN  READ REC FROM F.FILEVAR, WIDGET.USER.DATA(2) ELSE REC = '"':WIDGET.USER.DATA(2):'" not on file.'END ELSE REC = '"':WIDGET.USER.DATA(1):'" is not a valid file name.'*W$TEXT.DATA = REC*W$LINK.ICON<1> = "script_edit.png"W$LINK.ICON.TXT<1> = "Edit BASIC Source"W$LINK.URL<1> = "/dbc/MVDB.WEB.ED?ed_file=":WIDGET.USER.DATA(1):"&ed_item=":WIDGET.USER.DATA(2)W$LINK.URL.OPTS<1> = 'target="ED_':WIDGET.USER.DATA(1):"_":WIDGET.USER.DATA(2):'"'W$LINK.LOCATION<1> = "C"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000405SUB.DEMO.DAYS.TO.PAY.PIE0c2SUBROUTINE SUB.DEMO.DAYS.TO.PAY.PIE**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FC2DPIE"W$WIDTH = 3W$TITLE = 'Chart - Days To Pay '*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEYEAR=WIDGET.USER.DATA(1)OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''LOCATE YEAR IN REC<67> SETTING YEAR.POS ELSE YEAR.POS=1YEAR.POS=4-YEAR.POS;   * NEED TO INVERT TO YYYY, YYYY-1, YYYY-2DAYS.POS=YEAR.POS+53W$TITLE:=YEARDAYS.TYPES='0 - 30 Days,31 - 60 Days,61 - 90 Days,Over 90 Days'CONVERT ',' TO CHAR(253) IN DAYS.TYPESPERIOD.PCTS=REC<DAYS.POS>MAX.DAYS.TYPES=DCOUNT(DAYS.TYPES,CHAR(253))FOR DAYS.CNTR = 1 TO MAX.DAYS.TYPES   PCT=PERIOD.PCTS<1,DAYS.CNTR>   W$PIE.LABELS<1,DAYS.CNTR>=DAYS.TYPES<1,DAYS.CNTR>   W$PIE.VALUES<1,DAYS.CNTR>=PCT NEXT DAYS.CNTRW$PIE.CAPTION='Days To Pay By Period For ':YEAR***RETURN00106BSUB.DEMO.AGAUGE0c2SUBROUTINE SUB.DEMO.AGAUGE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Angular Gauge widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Angular Gauge Chart Demo - Sales Volume"W$TYPE = "HLINEARGAUGE"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN  W$TYPE = WIDGET.USER.DATA(1)END ELSE WIDGET.USER.DATA(1) = "HLINEARGAUGE"IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1PALETTE = WIDGET.USER.DATA(2)IF WIDGET.USER.DATA(3) = "" THEN WIDGET.USER.DATA(3) = 725000CHART.VALUE = WIDGET.USER.DATA(3)IF WIDGET.USER.DATA(4) = "" THEN WIDGET.USER.DATA(4) = W$WIDTHW$WIDTH = WIDGET.USER.DATA(4)IF WIDGET.USER.DATA(5) = "" THEN WIDGET.USER.DATA(5) = 1NUM.CHARTS = WIDGET.USER.DATA(5);* Number of single-value meter style charts to produce*BEGIN CASE  CASE W$TYPE = "HLINEARGAUGE"    W$TITLE = "Linear"  CASE W$TYPE = "ANGULARGAUGE"    W$TITLE = "Angular"  CASE W$TYPE = "HLED"    W$TITLE = "Horizontal LED"  CASE W$TYPE = "VLED"    W$TITLE = "Vertical LED"  CASE W$TYPE = "THERMOMETER"    W$TITLE = "Thermometer"  CASE W$TYPE = "CYLINDER"    W$TITLE = "Cylinder"  CASE W$TYPE = "BULB"    W$TITLE = "Bulb"END CASEW$TITLE := " Gauge Chart Demo - Sales Volume"W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = 800000*W$FW.COLOR.RANGE<1,1> = 0W$FW.COLOR.RANGE<2,1> = 300000W$FW.COLOR.RANGE<3,1> = COLOR$RED*W$FW.COLOR.RANGE<1,2> = 300000W$FW.COLOR.RANGE<2,2> = 550000W$FW.COLOR.RANGE<3,2> = COLOR$YELLOW*W$FW.COLOR.RANGE<1,3> = 550000W$FW.COLOR.RANGE<2,3> = 600000W$FW.COLOR.RANGE<3,3> = COLOR$GREEN*W$FW.COLOR.RANGE<1,4> = 600000W$FW.COLOR.RANGE<2,4> = 800000W$FW.COLOR.RANGE<3,4> = COLOR$SILVER*IF WIDGET.USER.DATA(1) # "HLINEARGAUGE" AND WIDGET.USER.DATA(1) # "ANGULARGAUGE" THEN  * Create multiple values to make an array of charts  FOR N = 1 TO NUM.CHARTS    W$FW.METER.VALUE<1,N> = INT(CHART.VALUE*(N/NUM.CHARTS))  NEXT N  W$FW.THERMOMETER.COLOR = COLOR$REDEND ELSE  W$FW.DIAL.VALUES<1> = CHART.VALUE  W$FW.TRENDPOINT.VALUES<1,1> = 675000 ;* Low-limit of trendpoint  W$FW.TRENDPOINT.VALUES<2,1> = 685000 ;* High-limit of trendpoint  W$FW.TRENDPOINT.LABELS<1,1> = "Last Year"  W$FW.TRENDPOINT.OPTS<1,1> = 'color="':COLOR$GREEN:'" useMarker="1"'  *  W$FW.TRENDPOINT.VALUES<1,2> = 475000  W$FW.TRENDPOINT.LABELS<1,2> = "2 yrs ago"  W$FW.TRENDPOINT.OPTS<1,2> = 'color="':COLOR$BLACK:'" useMarker="1"'  *END** Set up a drill-down widget call*W$FW.DD.WIDGET<1,1> = "Drilldown Demo"W$FW.DD.UD.POS<1,1,1> = 1W$FW.DD.UD.VAL<1,1,1> = W$FW.METER.VALUE:W$FW.DIAL.VALUES<1>W$FW.DD.UD.POS<1,1,2> = 2W$FW.DD.UD.VAL<1,1,2> = WIDGET.USER.DATA(1)*W$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""*W$FW.CHART.PALETTE = PALETTE*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* Let it calculate thisW$FW.TICKMARKS<5> = 4 ;* 4 minor tickmarks between the major ones*W$INPUT.PROMPT = "Gauge Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "Linear":@VM:"Angular":@VM:"Horizontal LED":@VM:"Vertical LED":@VM:"Thermometer":@VM:"Cylinder":@VM:"Bulb"W$INPUT.SELVALS = "HLINEARGAUGE":@VM:"ANGULARGAUGE":@VM:"HLED":@VM:"VLED":@VM:"THERMOMETER":@VM:"CYLINDER":@VM:"BULB"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*W$INPUT.PROMPT<2> = "Palette"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*W$INPUT.PROMPT<3> = "Chart Value"W$INPUT.TYPE<3> = "TEXT"W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = CHART.VALUE*W$INPUT.PROMPT<4> = "Widget Width"W$INPUT.TYPE<4> = "SELECT"W$INPUT.SELOPTS<4> = "1 - Narrow":@VM:"2 - Medium":@VM:"3 - Full Width"W$INPUT.SELVALS<4> = "1":@VM:"2":@VM:"3"W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = W$WIDTH**W$INPUT.PROMPT<5> = "# of Charts"*W$INPUT.TYPE<5> = "TEXT"*W$INPUT.UDPOS<5> = 5*W$INPUT.DEFAULT<5> = NUM.CHARTS*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0003E1SUB.DEMO.PYRAMID0c2SUBROUTINE SUB.DEMO.PYRAMID** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Pyramid widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Pyramid Demo - Errors by Reason"W$TYPE = "PYRAMID"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*CATEG = ""CATEG<1> = 19CATEG<2> = 20CATEG<3> = 36CATEG<4> = 44*CATEG.NAMES = ''CATEG.NAMES<1> = "Shipping"CATEG.NAMES<2> = "Bad Choices"CATEG.NAMES<3> = "Errors"CATEG.NAMES<4> = "Bad Material"*W$FW.CAPTION = "Errors by Reason"W$FW.SUBCAPTION = "2008 Shipments"W$CHART.OPTIONS<-1> = "isSliced='1'"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$FW.LABELS<1,N> = CATEG.NAMES<N>  W$FW.VALUES<1,N> = CATEG<N>  *  * Set up a drill-down widget call for each category  *  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = CATEG.NAMES<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = CATEG<N>NEXT N*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0007E7SUB.SHOW.VARS0c2SUBROUTINE SUB.SHOW.VARS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Display global values**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TABLE"W$TITLE = "Variables"*IF G$QUERYMODE = 1 THEN RETURN*W$LINK.LOCATION<1,1> = 2W$LINK.LOCATION<1,2> = 1*W$LINK.LABEL<1,2> = "Do Nothing"W$LINK.UD.POS<1,2> = "5"W$LINK.UD.VAL<1,2> = "XXX"*IF WIDGET.USER.DATA(1) = "1" THEN  W$LINK.LABEL<1,1> = "Show"  W$LINK.UD.POS<1,1> = "1"  W$LINK.UD.VAL<1,1> = "0"  RETURNENDW$LINK.LABEL<1,1> = "Hide"W$LINK.UD.POS<1,1> = "1"W$LINK.UD.VAL<1,1> = "1"*W$TABLE.COL.LABELS<1,1> = "Variable"W$TABLE.COL.LABELS<1,2> = "Type"W$TABLE.COL.LABELS<1,3> = "Value"*W$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "left"W$TABLE.COL.JUST<1,3> = "left"*TYPE = "GLOBAL"ROW = 0NAME = "G$USERID" ; VAL = G$USERID ; GOSUB ADDVARNAME = "G$CURRENT.DB" ; VAL = G$CURRENT.DB ; GOSUB ADDVARNAME = "G$LOGIN.DATE" ; VAL = G$LOGIN.DATE ; GOSUB ADDVARNAME = "G$LOGIN.TIME" ; VAL = G$LOGIN.TIME ; GOSUB ADDVARNAME = "G$WIDGET.NAME" ; VAL = G$WIDGET.NAME ; GOSUB ADDVARNAME = "G$WIDGET.SUB" ; VAL = G$WIDGET.SUB ; GOSUB ADDVARNAME = "G$WIDGET.NAME.LIST" ; VAL = G$WIDGET.NAME.LISTCONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$WIDGET.SUB.LIST" ; VAL = G$WIDGET.SUB.LISTCONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$WIDGET.CALL.TIME" ; VAL = G$WIDGET.CALL.TIMECONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$WIDGET.CALL.DUR" ; VAL = G$WIDGET.CALL.DURCONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$LICENSE.COUNT" ; VAL = G$LICENSE.COUNT; GOSUB ADDVARNAME = "G$EDITION" ; VAL = G$EDITION; GOSUB ADDVARNAME = "G$SYSTEM.ID" ; VAL = G$SYSTEM.ID; GOSUB ADDVAR*TYPE = "CGI"FOR X = 1 TO DCOUNT( CGI$VARS, @AM )  NAME = CGI$VARS<X>  VAL = CGI$VALS<X>  GOSUB ADDVARNEXT X*W$PRINTABLE = 1*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN*ADDVAR: **ROW += 1W$TABLE.DATA<ROW,1> = NAMEW$TABLE.DATA<ROW,2> = TYPEW$TABLE.DATA<ROW,3> = VALRETURN000EFFSUB.ICON.GALLERY0c2SUBROUTINE SUB.ICON.GALLERY** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Icon Gallery*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Icon Gallery"W$TYPE = "HTML"W$WIDTH = 3W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN ;* Dont process, just provide title, type & width*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "UNABLE TO OPEN MVDB.CONTROL"  RETURNENDREAD ICON.LIST FROM F.MVDB.CONTROL, 'ICON.LIST' ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "UNABLE TO READ ICON.LIST FROM MVDB.CONTROL"  RETURNENDCONVERT @AM TO @VM IN ICON.LIST** WIDGET.USER.DATA(1) = User specified search string* WIDGET.USER.DATA(2) = Search string used to make filtered list (previous string)* WIDGET.USER.DATA(3) = Filtered list* WIDGET.USER.DATA(4) = Current page #*ICNT = DCOUNT( ICON.LIST, @VM )IF WIDGET.USER.DATA(2) # WIDGET.USER.DATA(1) THEN  NEW.FILTER = 1END ELSE NEW.FILTER = 0PAGENO = WIDGET.USER.DATA(4)IF NOT(PAGENO MATCHES "1N0N") THEN PAGENO = ""IF PAGENO = "" THEN PAGENO = 1IF NEW.FILTER THEN  WIDGET.USER.DATA(2) = WIDGET.USER.DATA(1)  SEARCH.STR = WIDGET.USER.DATA(1)  SEARCH.STR = OCONV( SEARCH.STR, 'MCU')  FILTERED.LIST = ""  FOR IX = 1 TO ICNT    IF INDEX(OCONV(ICON.LIST<1,IX>,'MCU'),SEARCH.STR,1) THEN      FILTERED.LIST<1,-1> = ICON.LIST<1,IX>    END  NEXT IX  WIDGET.USER.DATA(3) = FILTERED.LIST  WIDGET.USER.DATA(4) = 1 ;* Page 1  ICON.LIST = FILTERED.LIST  ICNT = DCOUNT( ICON.LIST, @VM )  WIDGET.USER.DATA(5) = "" ;* Next/Prev action not processed here.  WIDGET.USER.DATA(4) = 1 ;* Start on page 1 with a new filter  PAGENO = 1END ELSE  IF WIDGET.USER.DATA(2) # "" THEN    ICON.LIST = WIDGET.USER.DATA(3)    ICNT = DCOUNT( ICON.LIST, @VM)   ENDENDIF WIDGET.USER.DATA(5) = "NEXT" THEN  PAGENO += 1END ELSE IF WIDGET.USER.DATA(5) = "PREV" THEN  PAGENO -= 1  IF PAGENO < 1 THEN PAGENO = 1ENDWIDGET.USER.DATA(5) = ""WIDGET.USER.DATA(4) = PAGENOPER.ROW = 7ROWS.PER.PAGE = 10CALL GET.CGI('generatepdf',IS.PDF)IF IS.PDF THEN  * If generating a PDF, place all items on a single  * page, letting the PDF renderer handle pagination.  ROWS.PER.PAGE = (INT((ICNT-1)/PER.PAGE)+1)*PER.PAGEENDPER.PAGE = ROWS.PER.PAGE * PER.ROWMAX.NAME.CHARS = 22MAX.PAGE = INT( (ICNT-1) / PER.PAGE )+ 1IF PAGENO > MAX.PAGE THEN  PAGENO = 1  WIDGET.USER.DATA(4) = PAGENOENDSTART.POS = ((PAGENO-1) * PER.PAGE) ;* This is an offset, not an actual starting positionIF ICON.LIST = "" THEN  W$HTML.DATA = '<table><tr><td>No Results</td></tr></table>'END ELSE  W$HTML.DATA = '<table><tr><td colspan="':PER.ROW:'">Page ':PAGENO:' of ':MAX.PAGE:'</td></tr><tr>'  W$HTML.DATA := ''  IX = 1  LOOP    SHOW.NAME = ICON.LIST<1,IX+START.POS>    IF LEN(SHOW.NAME) > MAX.NAME.CHARS THEN      SHOW.NAME = SHOW.NAME[1,MAX.NAME.CHARS-3]:"..."    END    W$HTML.DATA := '<td align="center" width="115px" style="font-size:10px;"><img title="':ICON.LIST<1,IX+START.POS>:'" class="icon" src="/db/icons/':ICON.LIST<1,IX+START.POS>:'" /><br />':SHOW.NAME:'<br />':IX+START.POS:'</td>'  UNTIL IX = (PER.PAGE) OR (IX+START.POS) >= ICNT DO    IF NOT(MOD(IX,PER.ROW)) THEN      W$HTML.DATA := '</tr><tr>'    END    IX += 1  REPEAT  W$HTML.DATA := '</tr></table>'END*W$HTML.DATA := '<br />'*FOR N = 1 TO 5*  W$HTML.DATA := 'WIDGET.USER.DATA(':N:') = ':WIDGET.USER.DATA(N):'<br />'*NEXT N*W$INPUT.PROMPT<1> = "Search"W$INPUT.TYPE<1> = "TEXT"W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(1)W$INPUT.UDPOS<1> = 1W$INPUT.BUTTON = "Search"*IF PAGENO > 1 THEN  W$LINK.LABEL<1,-1> = "Prev Page"  W$LINK.LOCATION<1,-1> = 23  W$LINK.UD.POS<1,-1> = 5  W$LINK.UD.VAL<1,-1> = "PREV"END*IF PAGENO < MAX.PAGE THEN  W$LINK.LABEL<1,-1> = "Next Page"  W$LINK.LOCATION<1,-1> = 14  W$LINK.UD.POS<1,-1> = 5  W$LINK.UD.VAL<1,-1> = "NEXT"END*RETURN000436PURGE.NON.PLATFORM.WIDGETS0c2*** 6-22-15 TPARKER ** Purge all platform specific widgets not for this platform*** run by the post install command process*OPEN '','MVDB.CONTROL' TO FILE ELSE STOPREAD PLATFORM FROM FILE, 'PLATFORM' ELSE PLATFORM=''IF PLATFORM = '' THEN STOP*PJS 07-13-15 - comment out this line: IF LEN(PLATFORM) = 2 THEN PLATFORM=PLATFORM:' '*OPEN '','MVDB.WIDGETS' TO FI.MVDB.WIDGETS ELSE STOP*SELECT FI.MVDB.WIDGETS*LOOP   READNEXT ID ELSE ID='DONE'UNTIL ID = 'DONE' DO   WIDGET.PLATFORM=FIELD(ID,' ',1)   DELETE.IT=0   BEGIN CASE      CASE PLATFORM = WIDGET.PLATFORM; NULL      CASE WIDGET.PLATFORM = 'D3'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'UV'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'UD'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'QM'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'OI'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'RL'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'JB'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'D3'; DELETE.IT=1      CASE 1; NULL   END CASE   IF DELETE.IT THEN DELETE FI.MVDB.WIDGETS, IDREPEATEND000C95SUB.DEMO.SPARK0c2SUBROUTINE SUB.DEMO.SPARK** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Spark widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Spark Chart Demo - My Stock Price"W$TYPE = "SPARKLINE"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN  W$TYPE = WIDGET.USER.DATA(1)END ELSE WIDGET.USER.DATA(1) = "SPARKLINE"IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1PALETTE = WIDGET.USER.DATA(2)*VALUES = ""W$FW.VALUES<1,-1> = "2726"W$FW.VALUES<1,-1> = "3788"W$FW.VALUES<1,-1> = "3888"W$FW.VALUES<1,-1> = "2290"W$FW.VALUES<1,-1> = "3902"W$FW.VALUES<1,-1> = "2331"W$FW.VALUES<1,-1> = "3085"W$FW.VALUES<1,-1> = "2701"W$FW.VALUES<1,-1> = "3320"W$FW.VALUES<1,-1> = "2193"W$FW.VALUES<1,-1> = "3451"W$FW.VALUES<1,-1> = "2484"W$FW.VALUES<1,-1> = "3932"W$FW.VALUES<1,-1> = "3704"W$FW.VALUES<1,-1> = "2781"W$FW.VALUES<1,-1> = "2295"W$FW.VALUES<1,-1> = "2473"W$FW.VALUES<1,-1> = "3763"W$FW.VALUES<1,-1> = "2975"W$FW.VALUES<1,-1> = "2235"W$FW.VALUES<1,-1> = "3435"W$FW.VALUES<1,-1> = "2760"W$FW.VALUES<1,-1> = "2797"W$FW.VALUES<1,-1> = "3236"W$FW.VALUES<1,-1> = "2256"W$FW.VALUES<1,-1> = "2415"W$FW.VALUES<1,-1> = "2493"W$FW.VALUES<1,-1> = "3582"W$FW.VALUES<1,-1> = "2345"W$FW.VALUES<1,-1> = "3764"W$FW.VALUES<1,-1> = "2699"W$FW.VALUES<1,-1> = "2948"W$FW.VALUES<1,-1> = "3663"W$FW.VALUES<1,-1> = "3558"W$FW.VALUES<1,-1> = "3219"W$FW.VALUES<1,-1> = "2759"W$FW.VALUES<1,-1> = "2694"W$FW.VALUES<1,-1> = "3235"W$FW.VALUES<1,-1> = "2263"W$FW.VALUES<1,-1> = "2597"W$FW.VALUES<1,-1> = "2528"W$FW.VALUES<1,-1> = "2673"W$FW.VALUES<1,-1> = "2347"W$FW.VALUES<1,-1> = "2055"W$FW.VALUES<1,-1> = "3458"W$FW.VALUES<1,-1> = "2916"W$FW.VALUES<1,-1> = "3497"W$FW.VALUES<1,-1> = "2457"W$FW.VALUES<1,-1> = "2070"W$FW.VALUES<1,-1> = "3261"*IF WIDGET.USER.DATA(1) = "SPARKWINLOSS" THEN  VAL.LIST = W$FW.VALUES  FOR N = 2 TO DCOUNT( W$FW.VALUES<1>, @VM )    VAL = INT(W$FW.VALUES<1,N>)    IF VAL > INT(VAL.LIST<1,N-1>) THEN      VAL = "W" ;* Win    END ELSE IF VAL = INT(VAL.LIST<1,N-1>) THEN      VAL = "D" ;* Draw    END ELSE VAL = "L"    W$FW.VALUES<1,N> = VAL  NEXT N  W$FW.VALUES<1,1> = "W" ;* First month was a win.END ELSE  FOR N = 1 TO DCOUNT( W$FW.VALUES<1>, @VM )    W$FW.VALUES<1,N> = OCONV(W$FW.VALUES<1,N>,"MD2")  NEXT NEND*** Set up a drill-down widget call*W$FW.DD.WIDGET<1,1> = "Drilldown Demo"W$FW.DD.UD.POS<1,1> = 1W$FW.DD.UD.VAL<1,1> = W$FW.VALUES<1,1>*W$FW.SPARK.TREND.BEG<1,1> = W$FW.VALUES<1,1>W$FW.SPARK.TREND.END<1,1> = W$FW.VALUES<1,DCOUNT(W$FW.VALUES<1>,@VM)>*W$FW.CAPTION = "Cisco"W$FW.SUBCAPTION = "12 Months"W$FW.CHART.PALETTE = PALETTE*W$INPUT.PROMPT = "Spark Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "Column":@VM:"Line":@VM:"Win/Loss"W$INPUT.SELVALS = "SPARKCOLUMN":@VM:"SPARKLINE":@VM:"SPARKWINLOSS"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*W$INPUT.PROMPT<2> = "Palette"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0006D0SUB.DEMO.PIE0c2SUBROUTINE SUB.DEMO.PIE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: PIE Chart Demonstration widget**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Chart - Fuel Sales by Type"W$TYPE = "FC2DPIE"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "3D" THEN  W$TYPE = "FC3DPIE"END*SALES = ""SALES<1> = "28452536"SALES<2> = "31208425"SALES<3> = "30245519"SALES<4> = "40425111"SALES<5> = "36515188"SALES<6> = "39144100"SALES<7> = "41655215"SALES<8> = "36615152"SALES<9> = "43944161"SALES<10> = "42251594"SALES<11> = "48833151"SALES<12> = "50122415"*TOT.SALES = SUM(SALES)CATEG = ""CATEG<1> = INT(TOT.SALES*.4)CATEG<2> = INT(TOT.SALES*.2)CATEG<3> = INT(TOT.SALES*.3)CATEG<4> = INT(TOT.SALES*.1)*CATEG.NAMES = ''CATEG.NAMES<1> = "Regular"CATEG.NAMES<2> = "Mid-Grade"CATEG.NAMES<3> = "Premium"CATEG.NAMES<4> = "Ethanol"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$PIE.LABELS<1,N> = CATEG.NAMES<N>  W$PIE.VALUES<1,N> = CATEG<N>  *  * Set up a drill-down widget call for each category  *  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = CATEG.NAMES<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = CATEG<N>NEXT NIF WIDGET.USER.DATA(1) # "3D" THEN  W$PIE.VALUE.OPTS<1,3> = 'isSliced="1"'END*IF WIDGET.USER.DATA(1) = "3D" THEN*  W$LINK.LABEL<1> = "2D"  W$LINK.ICON.TXT<1> = "2D Chart"  W$LINK.UD.VAL<1> = "2D"  W$PIE.CAPTION = "3D Chart"END ELSE*  W$LINK.LABEL<1> = "3D"  W$LINK.ICON.TXT<1> = "3D Chart"  W$LINK.UD.VAL<1> = "3D"  W$PIE.CAPTION = "2D Chart"ENDW$LINK.ICON<1> = "chart_pie.png"W$LINK.UD.POS<1> = "1"W$LINK.LOCATION<1> = "C"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN00045DSUB.DEMO.FUNNEL0c2SUBROUTINE SUB.DEMO.FUNNEL** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Funnel widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Funnel Demo - Website Conversion Ratio"W$TYPE = "FUNNEL"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*CATEG = ""CATEG<1> = 385634CATEG<2> = 175631CATEG<3> = 84564CATEG<4> = 35654CATEG<5> = 12342*CATEG.NAMES = ''CATEG.NAMES<1> = "Website Visits"CATEG.NAMES<2> = "Downloads"CATEG.NAMES<3> = "Interested to buy"CATEG.NAMES<4> = "Contract finalized"CATEG.NAMES<5> = "Purchased"*W$FW.CAPTION = "Conversion Ratio"W$FW.SUBCAPTION = "May 2007"W$CHART.OPTIONS<-1> = "isSliced='1'"W$CHART.OPTIONS<-1> = "showPercentValues='1'"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$FW.LABELS<1,N> = CATEG.NAMES<N>  W$FW.VALUES<1,N> = CATEG<N>  *  * Set up a drill-down widget call for each category  *  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = CATEG.NAMES<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = CATEG<N>NEXT N*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0005B8SUB.PORTAL.AP.REPORTS0c2SUBROUTINE SUB.PORTAL.AP.REPORTS**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = 'AP Reporting'W$TYPE = "FC2DPIE"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.DASHBOARD.BALANCES ELSE   W$TYPE='TEXT'   W$TEXT='UNABLE TO OPEN DICT DASHBOARD.BALANCES'   RETURN ENDREAD AP.AMOUNTS FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AP.STATS' ELSE AP.AMOUNTS=''BEGIN CASE   CASE 1      W$TITLE = "Chart - AP Balances by Days Due"; CALL PORTAL.SHOW.LAST.UPDATED('AP')      AMTS=AP.AMOUNTS      W$PIE.CAPTION='Total AP Balance of '**   CASE WIDGET.USER.DATA(1) = 'AR'**      W$TITLE = "Chart - AR Balances by Days Due"**      AMTS=AR.AMOUNTS**      W$PIE.CARTION='Total AR Balance of 'END CASE*TOT.AMT=SUM(AMTS)W$PIE.CAPTION:=OCONV(TOT.AMT,'MD02,$')*CATEGORIES='Current'CATEGORIES<2>='1 - 30 Days'CATEGORIES<3>='31 - 60 Days'CATEGORIES<4>='61 - 90 Days'CATEGORIES<5>='Over 90 Days'*CATEGORY.AMTS=AMTS**W$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='showPercentageValues="0"'W$CHART.OPTIONS<-1>='showPercentageInLabel="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="0"'W$CHART.OPTIONS<-1>='thousandSeparator=","'W$CHART.OPTIONS<-1>='pieradius="150"'FOR N = 1 TO 5  W$PIE.LABELS<1,N> = CATEGORIES<N>  W$PIE.VALUES<1,N> = INT(CATEGORY.AMTS<N>/100 + .5)NEXT N**RETURNEND000101WEB.FORMS0c2SUBROUTINE WEB.FORMS** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Untitled HTML"W$TYPE = "HTML"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$HTML.DATA = '<h2>HTML Widget Content</h2>'RETURN000193CHECK.PASSWORD0c2* 6-4-15 PETER SCHELLENBACH OF ZUMASYS - MODIFIED FOR QM*          CHANGE OCONV(X,'U3060') TO MD5(X)**#MAKE# RL $OPTIONS D3OPEN 'MVDB.USERS' TO FILE ELSE STOPSELECT FILELOOP   READNEXT ID ELSE ID ='DONE'UNTIL ID = 'DONE' DO   READ REC FROM FILE, ID ELSE REC=''*6-4-15 QM*   CRT ID,OCONV(REC<1>,'U3060'),OCONV(ID,'U3060')   CRT ID,MD5(REC<1>),MD5(ID) ; *6-4-15 QM*REPEATEND0010F6SUB.DEMO.REV.GP.SALES.CHART0c2SUBROUTINE SUB.DEMO.REV.GP.SALES.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEEQU ANNUAL.OR.MONTHLY TO WIDGET.USER.DATA(2)IF ANNUAL.OR.MONTHLY = '' THEN ANNUAL.OR.MONTHLY='By Year'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''YEARS=REC<67>MAX.YEARS=DCOUNT(YEARS,CHAR(253))REVENUE.OR.GP=WIDGET.USER.DATA(1)IF INDEX(ANNUAL.OR.MONTHLY,'By Month',1) THEN GOTO DO.MONTHLY*BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE='YTD Sales'      W$BAR.YMEMO = "YTD Sales"      SALES.AMTS=REC<68>   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE='YTD Gross Profit'      W$BAR.YMEMO = "YTD Gross Profit"      SALES.AMTS=REC<69>   CASE 1      REC = ''      SALES.AMTS = ''END CASE***MAX.SALES.AMT=0N=0FIRST.YEAR=''CURRENT.YEAR=''MO.NO=DCOUNT(REC<68,3>,CHAR(252))FOR NN = 1 TO MAX.YEARS   SALES.AMT=0   FOR NNN = 1 TO MO.NO      SALES.AMT+=SALES.AMTS<1,NN,NNN>    NEXT NNN   SALES.AMT=OCONV(SALES.AMT,'MD02')  IF SALES.AMT THEN     N+=1     IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT     W$BAR.VALUES<1,N> = SALES.AMT     YEAR=YEARS<1,NN>     IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR     CURRENT.YEAR=YEAR     W$BAR.XLABELS<1,N> = YEAR     W$FW.DD.WIDGET<1,N> = "DEMO ANNUAL SALES BY REP"     W$FW.DD.UD.POS<1,N,1> = 1     W$FW.DD.UD.VAL<1,N,1> = REVENUE.OR.GP; * REVENUE OR GP     W$FW.DD.UD.POS<1,N,2> = 2     W$FW.DD.UD.VAL<1,N,2> = YEAR   ENDNEXT NNW$BAR.XMEMO = "Year (drilldown for ":W$BAR.YMEMO:" by Rep)"W$BAR.CAPTION=W$BAR.YMEMO:' From ':FIRST.YEAR:' to ':CURRENT.YEAR* ROUND MAX AMOUNT UP TO THE NEXT 250000MAX.SALES.AMT+=250000MAX.SALES.AMT=INT(MAX.SALES.AMT/250000) * 250000W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'*W$CHART.OPTIONS<-1>='yAxisMaxValue="1500000"'*DO.PROMPT:*W$INPUT.PROMPT<1> = "Display By"W$INPUT.TYPE<1> = "SELECT"W$INPUT.UDPOS<1> = 2OPTIONS='By Year':CHAR(253):'By Month Using Column Chart':CHAR(253):'By Month Using Line Chart'W$INPUT.SELOPTS<1>=OPTIONSW$INPUT.SELVALS<1>=OPTIONSLOCATE ANNUAL.OR.MONTHLY IN OPTIONS<1> SETTING DEFAULT.POS ELSE DEFAULT.POS=1W$INPUT.DEFAULT<1>=ANNUAL.OR.MONTHLYW$INPUT.BUTTON<1> = "GO"*RETURN*DO.MONTHLY:*IF INDEX(ANNUAL.OR.MONTHLY,'Column',1) THEN   W$TYPE='FCMSCOLUMN2D' END ELSE   W$TYPE='FCMSLINE' ENDW$WIDTH = 3W$CHART.OPTIONS<-1>='showValues="0"'BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE='Monthly Sales'      W$BAR.YMEMO = "Monthly Sales"      W$BAR.CAPTION='Monthly Sales by Year'      SALES.ATT=68   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE='Monthly Gross Profit'      W$BAR.YMEMO = "Monthly Gross Profit"      W$BAR.CAPTION='Monthly Gross Profit by Year'      SALES.ATT=69   CASE 1      SALES.ATT=68      REC=''END CASETODAY=OCONV(DATE(),'D4-')MM=TODAY[1,2]+0YYYY=TODAY[7,4]IF MM = 1 THEN YYYY=YYYY-1YYYY.SELECT=''YEARS=''W$BAR.VALUES=''FOR N = 1 TO 12  W$BAR.XLABELS<1,N> = OCONV(N*30-15,'DMA')[1,3]NEXT NIF MAX.YEARS > 5 THEN MAX.DISPLAY.YEARS=5 ELSE MAX.DISPLAY.YEARS=MAX.YEARSMS.VAL.CNTR=0FOR I = 1 TO MAX.DISPLAY.YEARS   YEAR=YYYY-MAX.DISPLAY.YEARS+I   YEARS<-1>=YEAR   W$BAR.LABELS<I>=YEAR   YYYY.SELECT:=' "':YEAR:'"'   SALES.AMTS=REC<SALES.ATT>   FOR MO.NO = 1 TO 12      MS.VAL.CNTR+=1      SALE.AMT=SALES.AMTS<1,I,MO.NO>      W$BAR.VALUES<I,MO.NO>=OCONV(SALE.AMT,'MD02')      W$FW.DD.WIDGET<1,MS.VAL.CNTR> = "DEMO SINGLE MONTH SALES BY REP"      W$FW.DD.UD.POS<1,MS.VAL.CNTR,1>=1      W$FW.DD.UD.VAL<1,MS.VAL.CNTR,1>=REVENUE.OR.GP      W$FW.DD.UD.POS<1,MS.VAL.CNTR,2>=2      W$FW.DD.UD.VAL<1,MS.VAL.CNTR,2> = 'MS.SERIES'      W$FW.DD.UD.POS<1,MS.VAL.CNTR,3> = 3      W$FW.DD.UD.VAL<1,MS.VAL.CNTR,3>='MS.LABEL'    NEXT MO.NO NEXT I**WRITE W$BAR.VALUES ON FILE.CONTROL, 'BAR.VALUES'W$BAR.XMEMO='Month (drilldown for month by Rep)'GOSUB DO.PROMPTRETURNEND000509SUB.RSS.FEEDS0c2SUBROUTINE SUB.RSS.FEEDS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Display a list of available RSS feeds**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD WWW.INCLUDE*W$TITLE = "RSS Feeds"W$TYPE = "TABLE"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "Cannot open RSS.FEEDS"  RETURNENDOPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "Cannot open MVDB.CONTROL"  RETURNEND*W$TABLE.COL.LABELS<1,1> = "ID"W$TABLE.COL.LABELS<1,2> = "Name / Description"W$TABLE.COL.LABELS<1,3> = "Subscribe"*EXECUTE "SSELECT RSS.FEEDS BY NAME" CAPTURING JUNKROW = 1LOOP  READNEXT FID ELSE EXIT  READ FEED.REC FROM F.RSS.FEEDS, FID ELSE CONTINUE  FEED.NAME = FEED.REC<1>  CALL RSS.XML.ENCODE(FEED.NAME,"")  FEED.DESC = FEED.REC<3>  FEED.URL = "http://":CGI$SERVER.NAME:CGI$PATH:'/RSS.MAIN?feed=':FID  W$TABLE.DATA<ROW,1> = FID  W$TABLE.DATA<ROW,2> = '<b>':FEED.NAME:'</b><br />':FEED.DESC  W$TABLE.DATA<ROW,3> = \<a href="\:FEED.URL:\">Standard Feed</a>\  FOR N = 1 TO DCOUNT( FEED.REC<6>, @VM )    W$TABLE.DATA<ROW,3> := '<br /><a href="':FEED.URL:'&':FEED.REC<7,N>:'">':FEED.REC<6,N>:'</a>'  NEXT N  ROW += 1REPEATRETURN00008BCALL.CREATE.WEBSERVICE.PASSWORD0c2CALL CREATE.WEBSERVICE.PASSWORD(PASSWORD,PASSTIME)CRT 'PASSTIME=':PASSTIMECRT 'PASSWORD=':PASSWORDEND000988SUB.CODE.TEMPLATES0c2SUBROUTINE SUB.CODE.TEMPLATES** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: * Description: List code templates*INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGET.TYPES*W$TITLE = "Widget code templates"W$TYPE = "HTML"W$WIDTH = 3W$PRINTABLE = 1*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN ;* Hidden mode  W$LINK.LABEL<1,1> = "Show Widget"  W$LINK.LOCATION<1,1> = "C"  W$LINK.UD.POS<1,1> = 1  W$LINK.UD.VAL<1,1> = ""  W$LINK.ICON<1,1> = "application_view_detail.png"  W$LINK.ICON.TXT<1,1> = "Show Widget"  W$TITLE := ' (Hidden)'  W$PRINTABLE = 0  RETURNENDOPEN '','MVDB.SUB.TEMPLATES' TO F.MVDB.SUB.TEMPLATES ELSE  W$HTML.DATA = '<h2>MVDB.SUB.TEMPLATES file cannot be opened.</h2>'  RETURNENDOPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE  W$HTML.DATA = '<h2>MVDB.WIDGET.TYPES file cannot be opened.</h2>'  RETURNEND*EXECUTE 'SSELECT MVDB.WIDGET.TYPES BY GROUP BY HANDLER WITH INACTIVE # "1"' CAPTURING JUNKW$HTML.DATA = '<table width="100%"><thead><tr><th>Widget Type/Template</th><th>Description</th><th>Lines</th><th>Use Template</th><th>Edit</th></tr><tbody>'LOOP  READNEXT ID ELSE EXIT  READ TREC FROM F.MVDB.SUB.TEMPLATES, ID ELSE TREC = ""  MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, ID ELSE MAT WIDGET.TYPES = ""  CLASS.NAME = FIELD(WT$ICON,'.',1)  CONVERT "_" TO "-" IN CLASS.NAME  W$HTML.DATA := '<tr><td>':ID:'</td>'  W$HTML.DATA := '<td><img height="20" width="20" src="/db/icons/':WT$ICON:'" />':WT$DESC:'</td>'  LINES = DCOUNT(TREC,@AM)  IF LINES = 0 THEN LINES = '&nbsp;'  W$HTML.DATA := '<td align="right">':LINES:'</td>'  IF FIELD(TREC,' ',1) = "USE" THEN    USE.TEMPLATE = FIELD( TREC, ' ', 2 )    USE.TEMPLATE = '<a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUB.TEMPLATES&ed_item=':USE.TEMPLATE:'" target="MVDB.SUB.TEMPLATES_':USE.TEMPLATE:'">':USE.TEMPLATE:'</a>'  END ELSE USE.TEMPLATE = '&nbsp;'  W$HTML.DATA := '<td>':USE.TEMPLATE:'</td>'  IF TREC = "" THEN ACTION = "Add" ELSE ACTION = "Edit"  W$HTML.DATA := '<td><a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUB.TEMPLATES&ed_item=':ID:'" target="MVDB.SUB.TEMPLATES_':ID:'">':ACTION:'</a></td>'  W$HTML.DATA := '</tr>'REPEATW$HTML.DATA := '</tbody></table>'*W$LINK.LABEL<1,1> = "Hide Widget"W$LINK.LOCATION<1,1> = "C"W$LINK.UD.POS<1,1> = 1W$LINK.UD.VAL<1,1> = "1"W$LINK.ICON<1,1> = "application.png"W$LINK.ICON.TXT<1,1> = "Hide Widget"*RETURN000D3BSUB.PORTAL.MARGINS0c2SUBROUTINE SUB.PORTAL.MARGINS** DEFINE PARAMETERS FOR PORTAL SALES REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOPDIM SETUP.PARAMS(25)*W$TITLE = "Portal Year to Year Margins"; CALL PORTAL.SHOW.LAST.UPDATED('SALES')W$TYPE = "HTML"W$WIDTH = 2D3=1*IF G$QUERYMODE THEN RETURN**OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE    ERROR.MSG='UNABLE TO OPEN MVDB.CONTROL'   GOTO DISPLAY.ERROR ENDOPEN '','DASHBOARD.CLOSING.STATS' TO FI.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR END*READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'END CASE**W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'*OTODAY=OCONV(DATE(),'D4-')*YEAR.TO.YEAR.MARGIN.PERCENTS:*W$TYPE='FCCOLUMN3D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYY BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'YEAR.TO.YEAR.REPORT'YEAR.TOTALS=''YEAR.GROSS.PROFITS=''YEARS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))YEAR.CNTR=0FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YEAR=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         IF AMOUNT OR GROSS.PROFIT THEN            YEAR.CNTR+=1            YEARS<YEAR.CNTR>=YEAR            AMOUNT=ICONV(AMOUNT,'MD2')            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            YEAR.TOTALS<YEAR.CNTR>=AMOUNT            YEAR.GROSS.PROFITS<YEAR.CNTR>=GROSS.PROFIT          END       END    ENDNEXT ROW.NOYEAR.TOTALS<YEAR.CNTR+1>=SUM(YEAR.TOTALS)YEAR.GROSS.PROFITS<YEAR.CNTR+1>=SUM(YEAR.GROSS.PROFITS)YEARS<YEAR.CNTR+1>='Average'*W$BAR.CAPTION = 'Year by Year Margin Percents'W$BAR.XMEMO = "Year"W$BAR.YMEMO = 'Margin Percents'*MAX.YEARS=DCOUNT(YEARS,CHAR(254))FOR YEAR.NO = 1 TO MAX.YEARS   YEAR.TOTAL=YEAR.TOTALS<YEAR.NO>   YEAR.GROSS.PROFIT=YEAR.GROSS.PROFITS<YEAR.NO>   MARGIN=INT(YEAR.GROSS.PROFIT * 1000 / YEAR.TOTAL + .5)   W$BAR.VALUES<1,YEAR.NO>=OCONV(MARGIN+0,'MD1')   W$BAR.XLABELS<1,YEAR.NO>=YEARS<YEAR.NO> NEXT YEAR.NORETURN*DISPLAY.ERROR:*W$HTML.DATA='<h3>':ERROR.MSG:'</h3>'RETURN**RETURNEND000597REFRESH.PORTAL.DATES0c2OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO DICT.FI ELSE STOP 201,'DICT DASHBOARD.CLOSING.STATS'READ LAST.AR.DATE FROM DICT.FI, 'LAST.AR.REFRESH' ELSE STOP 201,'LAST.AR.REFRESH'READ LAST.AP.DATE FROM DICT.FI, 'LAST.AP.REFRESH' ELSE STOP 201,'LAST.AP.REFRESH'READ LAST.SALES.DATE FROM DICT.FI, 'LAST.SALES.REFRESH' ELSE STOP 201,'LAST.SALES.REFRESH'*FI='AR'; LAST.DATE=LAST.AR.DATE<1>; ATTS=20:@AM:8; GOSUB UPDATE.DATESWRITE DATE():@AM:OCONV(DATE(),'D2-') ON DICT.FI, 'LAST.AR.REFRESH'FI='AP'; LAST.DATE=LAST.AP.DATE<1>; ATTS=20:@AM:8; GOSUB UPDATE.DATESWRITE DATE():@AM:OCONV(DATE(),'D2-') ON DICT.FI, 'LAST.AP.REFRESH'FI='SALES'; LAST.DATE=LAST.SALES.DATE<1>; ATTS=1; GOSUB UPDATE.DATESWRITE DATE():@AM:OCONV(DATE(),'D2-') ON DICT.FI, 'LAST.SALES.REFRESH'STOP*UPDATE.DATES:*MAX.ATTS=DCOUNT(ATTS,@AM)DIFF.DAYS=DATE()-LAST.DATEOPEN '',FI TO FI.FI ELSE STOP 201,FIEXECUTE "SELECT ":FILOOP   READNEXT ID ELSE ID = 'DONE'UNTIL ID = 'DONE' DO   READ REC FROM FI.FI, ID ELSE REC=''   FOR I = 1 TO MAX.ATTS      ATT.NO=ATTS<I>      IF ATT.NO <> '' THEN         DATES=REC<ATT.NO>         MAX.DATES=DCOUNT(DATES,@VM)         FOR II = 1 TO MAX.DATES            THIS.DATE=DATES<1,II>            IF THIS.DATE <> '' THEN               THIS.DATE+=DIFF.DAYS               REC<ATT.NO,II>=THIS.DATE             END          NEXT II       END    NEXT I   WRITE REC ON FI.FI, IDREPEATRETURN00013DSUB.LISTPEQS0c2SUBROUTINE SUB.LISTPEQS** Copyright (c) 2010 SB, Inc. All rights reserved.*INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "HTML"W$TITLE = "Print Queue"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$TEXT.DATA = '<iframe src="/dbc/SBBP.SB.LISTPEQS" width="100%" scrolling="auto" height="500"></iframe>'RETURN000812SUB.DEMO.BULLET0c2SUBROUTINE SUB.DEMO.BULLET** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Bullet widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Bullet Chart Demo - Sales Volume"W$TYPE = "VBULLET"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN  W$TYPE = WIDGET.USER.DATA(1)END ELSE WIDGET.USER.DATA(1) = "VBULLET"IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1PALETTE = WIDGET.USER.DATA(2)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = 800000*W$FW.COLOR.RANGE<1,1> = 0W$FW.COLOR.RANGE<2,1> = 400000W$FW.COLOR.RANGE<3,1> = COLOR$RED*W$FW.COLOR.RANGE<1,2> = 400000W$FW.COLOR.RANGE<2,2> = 650000W$FW.COLOR.RANGE<3,2> = "YELLOW"*W$FW.COLOR.RANGE<1,3> = 650000W$FW.COLOR.RANGE<2,3> = 800000W$FW.COLOR.RANGE<3,3> = "GREEN"*W$FW.METER.VALUE = 725000W$FW.METER.TARGET = 775000*W$FW.CAPTION = "July Sales"W$FW.SUBCAPTION = "Billings"*W$FW.CHART.PALETTE = PALETTE*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* Let it calculate thisW$FW.TICKMARKS<5> = 4 ;* 4 minor tickmarks between the major ones**W$CHART.OPTIONS = "paletteThemeColor='#a2287a'"*W$FW.BC.PLOT.COLOR = COLOR$BLUEW$FW.BC.TARGET.COLOR = COLOR$WHITE*W$FW.DD.WIDGET<1,1> = "Drilldown Demo"W$FW.DD.UD.POS<1,1,1> = 1W$FW.DD.UD.VAL<1,1,1> = W$FW.METER.VALUEW$FW.DD.UD.POS<1,1,2> = 2W$FW.DD.UD.VAL<1,1,2> = WIDGET.USER.DATA(1)*W$INPUT.PROMPT = "Bullet Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "Horizontal":@VM:"Vertical"W$INPUT.SELVALS = "HBULLET":@VM:"VBULLET"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*W$INPUT.PROMPT<2> = "Palette"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN002FEFSUB.PORTAL.AP.REPORT.SETUP0c2SUBROUTINE SUB.PORTAL.AP.REPORT.SETUP** DEFINE PARAMETERS FOR PORTAL AP REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOP*W$TITLE = "Portal AP Report Setup"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*EQUATE ACCOUNT TO WIDGET.USER.DATA(1)EQUATE REPORT.FILE TO WIDGET.USER.DATA(2)EQUATE DUE.DATE.DICT TO WIDGET.USER.DATA(3)EQUATE DATE.PAID.DICT TO WIDGET.USER.DATA(4)EQUATE INVOICE.AMT.DICT TO WIDGET.USER.DATA(5)EQUATE BALANCE.DICT TO WIDGET.USER.DATA(6)EQUATE DUE.DATE.AMC TO WIDGET.USER.DATA(8)EQUATE DATE.PAID.AMC TO WIDGET.USER.DATA(9)EQUATE INVOICE.AMT.AMC TO WIDGET.USER.DATA(10)EQUATE INVOICE.AMT.CONV TO WIDGET.USER.DATA(11)EQUATE INVOICE.AMT.COOR TO WIDGET.USER.DATA(12)EQUATE BALANCE.AMC TO WIDGET.USER.DATA(13)EQUATE BALANCE.CONV TO WIDGET.USER.DATA(14)EQUATE BALANCE.COOR TO WIDGET.USER.DATA(15)OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE   MESSAGE='No Platform Type Defined'   GOTO MESSAGE.DISPLAY ENDFIRST.TIME=0IF G$SUBMITTED <> '1' THEN   MATREAD WIDGET.USER.DATA FROM FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ELSE      MAT WIDGET.USER.DATA = ''      FIRST.TIME=1    END   IF NOT(FIRST.TIME) THEN      GOSUB VALIDATE.PREVIOUS.INPUTS    END END ELSE   GOSUB VALIDATE.PREVIOUS.INPUTS   MATWRITE WIDGET.USER.DATA ON FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ENDGOSUB SET.PROMPTSRETURN*SET.PROMPTS:*W$INPUT.PROMPT<1> = "AP File Account"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = ACCOUNT*W$INPUT.PROMPT<2> = "Name Of AP File"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = REPORT.FILE*W$INPUT.PROMPT<3> = "Due Date Dict Name"W$INPUT.TYPE<3> = 'TEXT'W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = DUE.DATE.DICT*W$INPUT.PROMPT<4> = "Date Paid Dict Name"W$INPUT.TYPE<4> = 'TEXT'W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = DATE.PAID.DICT*W$INPUT.PROMPT<5> = "Invoice Amount Dict Name"W$INPUT.TYPE<5> = 'TEXT'W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = INVOICE.AMT.DICT*W$INPUT.PROMPT<6> = "Remaining Balance Dict Name"W$INPUT.TYPE<6> = 'TEXT'W$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = BALANCE.DICT*RETURN*VALIDATE.PREVIOUS.INPUTS:*MESSAGE=''BEGIN CASE   CASE PLATFORM = 'D3'      MD.TYPE='MD'   CASE PLATFORM = 'JB'      MD.TYPE='MD'   CASE 1      MD.TYPE='VOC'END CASEOPEN '',MD.TYPE TO FI.MD ELSE   MESSAGE='Unable to open ':MD.TYPE:' for validation purposes'   GOTO MESSAGE.DISPLAY ENDVALID.ACCOUNT=1IF ACCOUNT <> '' THEN   QFILE.NAME='QFILE'   CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)   IF QFILE.NAME = '' THEN      MESSAGE<-1>=ACCOUNT:' is not a valid account!'      VALID.ACCOUNT=0    END**   IF PLATFORM = 'UD' THEN**      QFILE.NAME='QFILE'**      CALL CREATE.UD.QPOINTER(ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)**      IF QFILE.NAME = '' THEN**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END ELSE**      WRITE 'Q':@AM:ACCOUNT:@AM:MD.TYPE ON FI.MD, 'QFILE'**      OPEN '','QFILE' TO FI.ACCOUNT.MD ELSE**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END END ELSE   VALID.ACCOUNT=0   MESSAGE<-1>='No Account defined!' ENDIF REPORT.FILE <> '' THEN   IF NOT(VALID.ACCOUNT) THEN      MESSAGE<-1>='Unable to verify ':REPORT.FILE:' file because account not properly defined!'      VALID.REPORT.FILE=0    END ELSE      VALID.REPORT.FILE=1      CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)      IF QFILE.NAME = '' THEN         MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'         VALID.REPORT.FILE=0       END**      IF PLATFORM = 'UD' THEN**         QFILE.NAME='QFILE'**         CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)**         IF QFILE.NAME = '' THEN**            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**            VALID.REPORT.FILE=0**          END**       END ELSE**         WRITE 'Q':@AM:ACCOUNT:@AM:REPORT.FILE ON FI.MD, 'QFILE'**         OPEN '','QFILE' TO FI.REPORT.FILE ELSE**            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**            VALID.REPORT.FILE=0**          END**       END      IF VALID.REPORT.FILE THEN         HAVE.QFILE.REC=1         READ QFILE.REC FROM FI.MD, 'QFILE' ELSE            HAVE.QFILE.REC=0            MESSAGE<-1>='Unable to create QFILE pointer to ':ACCOUNT:' ':REPORT.FILE          END         IF HAVE.QFILE.REC THEN            WRITE QFILE.REC ON FI.MD, 'DASHBOARD.AP.FILE'            OPEN 'DICT','DASHBOARD.AP.FILE' TO FI.DICT.REPORT.FILE ELSE                MESSAGE<-1>='Unable to open DICT ':REPORT.FILE             END          END       END    END END ELSE   MESSAGE<-1>='No AP Report file defined!' ENDIF DUE.DATE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Due Date Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DUE.DATE.DICT:' Because No AP File!'    END ELSE      READ DUE.DATE.DICT.REC FROM FI.DICT.REPORT.FILE, DUE.DATE.DICT ELSE         DUE.DATE.DICT.REC=''         MESSAGE<-1>=DUE.DATE.DICT:' Does Not Exist!'       END      IF DUE.DATE.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DUE.DATE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DUE.DATE.DICT.REC<7>[1,1] <> 'D' AND DUE.DATE.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DUE.DATE.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DUE.DATE.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF DATE.PAID.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Date Paid Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DATE.PAID.DICT:' Because No AP File!'    END ELSE      READ DATE.PAID.DICT.REC FROM FI.DICT.REPORT.FILE, DATE.PAID.DICT ELSE         DATE.PAID.DICT.REC=''         MESSAGE<-1>=DATE.PAID.DICT:' Does Not Exist!'       END      IF DATE.PAID.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DATE.PAID.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DATE.PAID.DICT.REC<7>[1,1] <> 'D' AND DATE.PAID.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DATE.PAID.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DATE.PAID.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF INVOICE.AMT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Invoice Amount Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":INVOICE.AMT.DICT:' Because No AP File!'    END ELSE      READ INVOICE.AMT.DICT.REC FROM FI.DICT.REPORT.FILE, INVOICE.AMT.DICT ELSE         INVOICE.AMT.DICT.REC=''         MESSAGE<-1>=INVOICE.AMT.DICT:' Does Not Exist!'       END      IF INVOICE.AMT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=INVOICE.AMT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=INVOICE.AMT.DICT.REC<7>[1,2]               DICT.8.1.2=INVOICE.AMT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=INVOICE.AMT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':INVOICE.AMT.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF BALANCE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Balance Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":BALANCE.DICT:' Because No AP File!'    END ELSE      READ BALANCE.DICT.REC FROM FI.DICT.REPORT.FILE, BALANCE.DICT ELSE         BALANCE.DICT.REC=''         MESSAGE<-1>=BALANCE.DICT:' Does Not Exist!'       END      IF BALANCE.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=BALANCE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=BALANCE.DICT.REC<7>[1,2]               DICT.8.1.2=BALANCE.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=BALANCE.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               BALANCE.AMC=BALANCE.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':BALANCE.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDCREATE.INDEXES=1IF MESSAGE = '' THEN   MESSAGE='AP Report parameters properly defined!' END ELSE   IF INDEX(MESSAGE,'!',1) THEN      MESSAGE=INSERT(MESSAGE,1,0,0,'!!! ERRORS !!!')      CREATE.INDEXES=0    END ENDIF CREATE.INDEXES THEN   * CREATE PIPE DICTIONARY ITEM   IF PLATFORM = 'D3' OR PLATFORM = 'QM' OR PLATFORM = 'JB' THEN      PIPE='A'      PIPE<2>=0      PIPE<3>=' '      PIPE<8>='F;C|'      PIPE<9>='L'      PIPE<10>=1    END ELSE      PIPE='I'      PIPE<2>='"|"'      PIPE<4>='|'      PIPE<5>='1L'      PIPE<6>='S'    END   WRITE PIPE ON FI.DICT.REPORT.FILE, 'PIPE'   *   ** INDEX LOGIC   *   BEGIN CASE      CASE PLATFORM = 'D3'         INDEX.TEST='A':DUE.DATE.AMC:'(DY):':DUE.DATE.AMC:'(DM)'         READ FILE.DEF.REC FROM FI.DICT.REPORT.FILE, REPORT.FILE ELSE FILE.DEF.REC=''         IF FILE.DEF.REC <> '' AND NOT(INDEX(FILE.DEF.REC<8>,INDEX.TEST,1)) THEN            MESSAGE<-1>='Creating Indexes'            CMND1="CREATE-INDEX DASHBOARD.AP.FILE A":DUE.DATE.AMC            EXECUTE CMND1 CAPTURING RESULT1            CMND2="CREATE-INDEX DASHBOARD.AP.FILE ":INDEX.TEST            EXECUTE CMND2 CAPTURING RESULT2          END      CASE 1         EXECUTE "CREATE-INDEX DASHBOARD.AP.FILE ":DUE.DATE.DICT CAPTURING RESULT1   END CASE ENDGOSUB MESSAGE.DISPLAYRETURN*MESSAGE.DISPLAY:*MAX.MSG=DCOUNT(MESSAGE,CHAR(254))W$HTML.DATA='<h3>':MESSAGE<1>IF MAX.MSG > 1 THEN   FOR MSG.NO = 2 TO MAX.MSG      W$HTML.DATA:='<br>':MESSAGE<MSG.NO>    NEXT MSG.NO ENDW$HTML.DATA:='</h3>'RETURNEND0006AECREATE.QPOINTER0c2SUBROUTINE CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,FILENAME,CALL.IT,FI.QPOINTER)**OPEN '',CALL.IT TO FI.QPOINTER THEN**   IF CALL.IT <> 'QFILE' THEN RETURN** ENDCALL.IT.PARAM=CALL.ITCALL.IT=''PATH=@PATHBEGIN CASE   CASE PLATFORM = 'UD'      OPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE         UD.ACCOUNTS='F'         UD.ACCOUNTS<-1>='@UDTHOME/sys/UD.ACCOUNT'         UD.ACCOUNTS<-1>='@UDTHOME/sys/D_UD.ACCOUNT'         WRITE UD.ACCOUNTS ON FI.MD, 'UD.ACCOUNTS'         OPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE RETURN       END      READV PATH FROM FI.UD.ACCOUNTS, ACCOUNT, 1 ELSE RETURN      F.POINTER='F'      F.POINTER<2>=PATH:'/':FILENAME      F.POINTER<3>=PATH:'/D_':FILENAME      WRITE F.POINTER ON FI.MD, CALL.IT.PARAM   CASE PLATFORM = 'JB' AND ACCOUNT = 'MVDB'      IF INDEX(PATH,':\',1) THEN DELIM.TYPE='\' ELSE DELIM.TYPE='/'      F.POINTER='F'      F.POINTER<2>=PATH:DELIM.TYPE:FILENAME      F.POINTER<3>=PATH:DELIM.TYPE:FILENAME:']D'      WRITE F.POINTER ON FI.MD, CALL.IT.PARAM   CASE 1      QFILE.REC='Q':@AM:ACCOUNT:@AM:FILENAME      WRITE QFILE.REC ON FI.MD, CALL.IT.PARAMEND CASE* CHANGE CALL.IT TO SUCCESSFUL NAME* OTHERWISE IT WILL RETURN WITH NULL SAYING FAILURECALL.IT=CALL.IT.PARAMOPEN '',CALL.IT.PARAM TO FI.QPOINTER ELSE   CALL.IT=''   IF PLATFORM = 'JB' AND FILENAME = 'MD' THEN      * OTHER ACCOUNT MAY NOT HAVE AN MD AND THE ONLY REASON TO SET A      * QPOINTER TO IT IS TO TEST VALIDITY OF THE ACCOUNT SO JUST      * CHECK FOR THE EXISTENCE OF A SYSTEM RECORD      OPEN '','SYSTEM' TO FI.SYSTEM ELSE RETURN      READ ACCOUNT.EXIST FROM FI.SYSTEM, ACCOUNT ELSE RETURN      CALL.IT=CALL.IT.PARAM    END ENDRETURNEND000B60SUB.DEMO.SALES.CHART0c2SUBROUTINE SUB.DEMO.SALES.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''VAL.TYPE='$'DRILLDOWN.WIDGET=''DRILLDOWN.TYPE=''BEGIN CASE   CASE WIDGET.USER.DATA(1) = 'REVENUES'      W$TITLE='YTD Revenues'      W$BAR.YMEMO = "YTD Revenues"      SALES.AMTS=REC<68>   CASE WIDGET.USER.DATA(1) = 'GROSSPROFIT'      W$TITLE='YTD Gross Profit'      W$BAR.YMEMO = "YTD Gross Profit"      SALES.AMTS=REC<69>   CASE WIDGET.USER.DATA(1) = 'MARGIN'      VAL.TYPE='%'      W$TITLE='YTD Margin %'      W$BAR.YMEMO = "Margin %"      SALES.AMTS=REC<39>   CASE WIDGET.USER.DATA(1) = 'PARTS$'      W$TITLE='YTD Parts Revenue ($)'      W$BAR.YMEMO = "Parts Revenue ($)"      SALES.AMTS=REC<40>      DRILLDOWN.WIDGET='DEMO SALE TYPES PIE'      DRILLDOWN.TYPE='PARTS'   CASE WIDGET.USER.DATA(1) = 'SERVICES$'      W$TITLE='YTD Services Revenue ($)'      W$BAR.YMEMO = "Services Revenue ($)"      SALES.AMTS=REC<42>      DRILLDOWN.WIDGET='DEMO SALE TYPES PIE'      DRILLDOWN.TYPE='SERVICES'END CASE*YEARS=REC<38>MAX.YEARS=DCOUNT(YEARS,CHAR(253))**MAX.SALES.AMT=0N=0FIRST.YEAR=''FOR NN = 1 TO MAX.YEARS   SALES.AMT=SUM(SALES.AMTS<1,NN>)   BEGIN CASE      CASE VAL.TYPE = '$'         SALES.AMT=OCONV(SALES.AMT,'MD02')      CASE VAL.TYPE = '%'         SALES.AMT=OCONV(SALES.AMT,'MD01')      CASE 1         NULL   END CASE  IF SALES.AMT THEN     N+=1     IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT     W$BAR.VALUES<1,N> = SALES.AMT     YEAR=YEARS<1,NN>     IF DRILLDOWN.TYPE <> '' THEN        W$FW.DD.WIDGET<1,N>=DRILLDOWN.WIDGET        W$FW.DD.UD.POS<1,N,1>=1        W$FW.DD.UD.VAL<1,N,1>=YEAR        W$FW.DD.UD.POS<1,N,2>=2        W$FW.DD.UD.VAL<1,N,2>=DRILLDOWN.TYPE      END     IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR     CURRENT.YEAR=YEAR     W$BAR.XLABELS<1,N> = YEAR   ENDNEXT NNW$BAR.XMEMO = "Year"IF DRILLDOWN.TYPE <> '' THEN   W$BAR.XMEMO := " (drilldown for detail)" ENDW$BAR.CAPTION=W$BAR.YMEMO:' From ':FIRST.YEAR:' to ':CURRENT.YEARIF VAL.TYPE = '$' THEN   * ROUND MAX AMOUNT UP TO THE NEXT 250000   MAX.SALES.AMT+=250000   MAX.SALES.AMT=INT(MAX.SALES.AMT/250000) * 250000   W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'   W$CHART.OPTIONS<-1>='decimals="2"'   W$CHART.OPTIONS<-1>='DecimalPrecision="2"'   W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'   W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'   W$CHART.OPTIONS<-1>='formatNumberScale="1"' ENDIF VAL.TYPE = '%' THEN   W$CHART.OPTIONS<-1>='decimals="1"'   W$CHART.OPTIONS<-1>='forceDecimals="1"' ENDRETURN00B526SUB.PORTAL.SALES.REPORTS0c2SUBROUTINE SUB.PORTAL.SALES.REPORTS** DEFINE PARAMETERS FOR PORTAL SALES REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOPDIM SETUP.PARAMS(25)*W$TITLE = "Portal Sales Reports"; CALL PORTAL.SHOW.LAST.UPDATED('SALES')W$TYPE = "HTML"W$WIDTH = 3D3=1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEW$BAR.COLORS<1,5>=COLOR$YELLOWALF.MONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'EQUATE REPORT.TYPE TO WIDGET.USER.DATA(1)*IF REPORT.TYPE = '' THEN REPORT.TYPE='MTD Sales'*OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE    ERROR.MSG='UNABLE TO OPEN MVDB.CONTROL'   GOTO DISPLAY.ERROR ENDOPEN '','DASHBOARD.CLOSING.STATS' TO FI.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' ENDEQUATE ACCOUNT TO SETUP.PARAMS(1)EQUATE REPORT.FILE TO SETUP.PARAMS(2)EQUATE SALE.DATE.DICT TO SETUP.PARAMS(3)EQUATE SALE.MONTH.DICT TO SETUP.PARAMS(4)EQUATE SALE.YEAR.DICT TO SETUP.PARAMS(5)EQUATE SALE.AMOUNT.DICT TO SETUP.PARAMS(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO SETUP.PARAMS(7)EQUATE SALESMAN.DICT TO SETUP.PARAMS(8)EQUATE BRANCH.DICT TO SETUP.PARAMS(9)EQUATE REGION.DICT TO SETUP.PARAMS(10)EQUATE SALE.DATE.AMC TO SETUP.PARAMS(11)EQUATE SALE.AMOUNT.AMC TO SETUP.PARAMS(12)EQUATE SALE.AMOUNT.CONV TO SETUP.PARAMS(13)EQUATE SALE.AMOUNT.COOR TO SETUP.PARAMS(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO SETUP.PARAMS(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO SETUP.PARAMS(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO SETUP.PARAMS(17)EQUATE SALESMAN.AMC TO SETUP.PARAMS(18)EQUATE SALESMAN.TFILE TO SETUP.PARAMS(19)EQUATE BRANCH.AMC TO SETUP.PARAMS(20)EQUATE BRANCH.TFILE TO SETUP.PARAMS(21)EQUATE REGION.AMC TO SETUP.PARAMS(22)EQUATE REGION.TFILE TO SETUP.PARAMS(23)*READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='MD'END CASEOPEN '',MD.FILE.NAME TO FI.MD ELSE   ERROR.MSG='UNABLE TO OPEN ':MD.FILE.NAME   GOTO DISPLAY.ERROR END*IF ACCOUNT = '' OR REPORT.FILE = '' OR SALE.DATE.DICT = '' OR SALE.AMOUNT.DICT = '' THEN   ERROR.MSG='SALES FILE ACCOUNT, SALES FILE NAME, DATE OF SALE, AND AMOUNT OF SALE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'   GOTO DISPLAY.ERROR END*SALES.FILE.PATH='SALES.FILE.PATH'OPEN '',SALES.FILE.PATH TO FI.SALES.FILE.PATH ELSE**   EXECUTE "SET-FILE ":ACCOUNT:" ":REPORT.FILE CAPTURING DUMMY   QFILE.NAME=SALES.FILE.PATH   CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.SALES.FILE.PATH)   IF QFILE.NAME = '' THEN      MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'      GOTO DISPLAY.ERROR    END**    IF PLATFORM = 'UD' THEN**       QFILE.NAME='SALES.FILE.PATH'**       CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.SALES.FILE.PATH)**       IF QFILE.NAME = '' THEN**          ERROR.MSG='UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT'**          GOTO DISPLAY.ERROR**        END**     END ELSE**    **   READ MD.QFILE FROM FI.MD, 'QFILE' ELSE**    **      ERROR.MSG='UNABLE TO CREATE QFILE TO SALES FILE'**    **      GOTO DISPLAY.ERROR**    **    END**       MD.QFILE='Q'**       MD.QFILE<2>=ACCOUNT**       MD.QFILE<3>=REPORT.FILE**       WRITE MD.QFILE ON FI.MD, 'SALES.FILE.PATH'**       OPEN '','SALES.FILE.PATH' TO FI.SALES.FILE.PATH ELSE**          ERROR.MSG='UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT'**          GOTO DISPLAY.ERROR**        END**     END   EXECUTE "CREATE-INDEX SALES.FILE.PATH ":SALE.DATE.DICT CAPTURING DUMMY END*W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'*OTODAY=OCONV(DATE(),'D4-')*BEGIN CASE   CASE REPORT.TYPE = 'MTD Sales'; GOSUB MTD.SALES   CASE REPORT.TYPE = 'YTD Sales'; GOSUB YTD.SALES   CASE REPORT.TYPE = 'Year to Year Sales and GP'; GOSUB YEAR.TO.YEAR.SALES   CASE REPORT.TYPE = 'Year to Year Sales by Month'; GOSUB YEAR.TO.YEAR.SALES.BY.MONTH   CASE REPORT.TYPE = 'Year to Year GP by Month'; GOSUB YEAR.TO.YEAR.GP.BY.MONTH   CASE REPORT.TYPE = 'MTD Sales by Salesman'; GOSUB MTD.SALES.BY.SALESMAN   CASE REPORT.TYPE = 'YTD Sales by Salesman'; GOSUB YTD.SALES.BY.SALESMAN   CASE REPORT.TYPE = 'Year to Year Sales by Salesman'; GOSUB YEAR.TO.YEAR.BY.SALESMAN   CASE REPORT.TYPE = 'Year to Year GP by Salesman'; GOSUB YEAR.TO.YEAR.GP.BY.SALESMAN   CASE REPORT.TYPE = 'MTD Sales by Branch'; GOSUB MTD.SALES.BY.BRANCH   CASE REPORT.TYPE = 'YTD Sales by Branch'; GOSUB YTD.SALES.BY.BRANCH   CASE REPORT.TYPE = 'Year to Year Sales by Branch'; GOSUB YEAR.TO.YEAR.BY.BRANCH   CASE REPORT.TYPE = 'Year to Year GP by Branch'; GOSUB YEAR.TO.YEAR.GP.BY.BRANCH   CASE REPORT.TYPE = 'MTD Sales by Region'; GOSUB MTD.SALES.BY.REGION   CASE REPORT.TYPE = 'YTD Sales by Region'; GOSUB YTD.SALES.BY.REGION   CASE REPORT.TYPE = 'Year to Year Sales by Region'; GOSUB YEAR.TO.YEAR.BY.REGION   CASE REPORT.TYPE = 'Year to Year GP by Region'; GOSUB YEAR.TO.YEAR.GP.BY.REGIONEND CASE*W$INPUT.PROMPT<1> = "Report Type"W$INPUT.TYPE<1> = "SELECT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = REPORT.TYPESELOPTS='MTD Sales'SELOPTS<1,-1>='YTD Sales'SELOPTS<1,-1>='Year to Year Sales and GP'SELOPTS<1,-1>='Year to Year Sales by Month'SELOPTS<1,-1>='Year to Year GP by Month'SELOPTS<1,-1>='MTD Sales by Salesman'SELOPTS<1,-1>='YTD Sales by Salesman'SELOPTS<1,-1>='Year to Year Sales by Salesman'SELOPTS<1,-1>='Year to Year GP by Salesman'IF BRANCH.DICT <> '' THEN   SELOPTS<1,-1>='MTD Sales by Branch'   SELOPTS<1,-1>='YTD Sales by Branch'   SELOPTS<1,-1>='Year to Year Sales by Branch'   SELOPTS<1,-1>='Year to Year GP by Branch' ENDIF REGION.DICT <> '' THEN   SELOPTS<1,-1>='MTD Sales by Region'   SELOPTS<1,-1>='YTD Sales by Region'   SELOPTS<1,-1>='Year to Year Sales by Region'   SELOPTS<1,-1>='Year to Year GP by Region' ENDW$INPUT.SELOPTS=SELOPTSW$INPUT.SELVALS=SELOPTSRETURN*DISPLAY.ERROR:*W$HTML.DATA='<h3>':ERROR.MSG:'</h3>'RETURN*MTD.SALES:*GET.REPORT.TYPE='SALES'; GOSUB GET.CURRENT.REPORTIF REPORT.STATS.REC[1,5] = 'ERROR' OR REPORT.STATS.REC<1> = '' THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Date"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'DATES=REPORT.STATS.REC<1>NUM.DATES=DCOUNT(DATES,CHAR(253))AMOUNTS=REPORT.STATS.REC<2>SUM.AMOUNTS=SUM(AMOUNTS)COST.OF.SALES=REPORT.STATS.REC<3>SUM.COST.OF.SALES=SUM(COST.OF.SALES)SUM.GROSS.PROFIT=SUM.AMOUNTS-SUM.COST.OF.SALESW$BAR.YMEMO='Total Sales and Gross Profits'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM.AMOUNTS,'MD2,$'):" and Gross Profit of ":OCONV(SUM.GROSS.PROFIT,'MD2,$'):" by Date"IF NUM.DATES > 20 THEN   W$TYPE='FCMSBAR2D'   START.CNTR=NUM.DATES   END.CNTR=1   STEP.CNTR=(-1) END ELSE   W$TYPE='FCMSCOLUMN2D'   START.CNTR=1   END.CNTR=NUM.DATES   STEP.CNTR=1 ENDVALUE.CNTR=0FOR AMT.CNTR = START.CNTR TO END.CNTR STEP STEP.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT THEN      COST.OF.SALE=COST.OF.SALES<1,AMT.CNTR>      GROSS.PROFIT=AMOUNT-COST.OF.SALE      IF GROSS.PROFIT < 0 THEN GROSS.PROFIT=0      VALUE.CNTR+=1      ROW.DATE=ICONV(DATES<1,AMT.CNTR>,'D')      ROW.DATE=OCONV(ROW.DATE,'D0')      W$BAR.XLABELS<1,VALUE.CNTR>=ROW.DATE      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE DATES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYYMM BREAK-ON YYYYMM PIPE DET-SUPP TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Month"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'MONTHS=''MONTH.CNTR=0LAST.MONTH=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      MONTH=TRIM(FIELD(ROW,'|',1))[5,2]+0      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      GROSS.PROFIT=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         IF MONTH <> LAST.MONTH THEN            LAST.MONTH=MONTH            MONTH.CNTR+=1            MONTHS<1,MONTH.CNTR>=MONTH            AMOUNTS<1,MONTH.CNTR>=0            GROSS.PROFITS<1,MONTH.CNTR>=0          END         AMOUNTS<1,MONTH.CNTR>+=AMOUNT         GROSS.PROFITS<1,MONTH.CNTR>+=GROSS.PROFIT       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):"  And Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" By Month"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))W$TYPE='FCMSCOLUMN2D'VALUE.CNTR=0FOR AMT.CNTR = 1 TO YTD.MO   AMOUNT=AMOUNTS<1,AMT.CNTR>   GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>   IF AMOUNT > 0 AND GROSS.PROFIT >= 0 THEN      VALUE.CNTR+=1      MONTH=FIELD(ALF.MONTHS,',',AMT.CNTR)      W$BAR.XLABELS<1,VALUE.CNTR>=MONTH      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTRRETURN*YEAR.TO.YEAR.SALES:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSCOLUMN2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYY BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'YEAR.TO.YEAR.REPORT'YEAR.TOTALS=''YEAR.GROSS.PROFITS=''YEARS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))YEAR.CNTR=0FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YEAR=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         IF AMOUNT OR GROSS.PROFIT THEN            YEAR.CNTR+=1            YEARS<YEAR.CNTR>=YEAR            AMOUNT=ICONV(AMOUNT,'MD2')            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            YEAR.TOTALS<YEAR.CNTR>=AMOUNT            YEAR.GROSS.PROFITS<YEAR.CNTR>=GROSS.PROFIT          END       END    ENDNEXT ROW.NO*W$BAR.CAPTION = "Sales and Gross Profit by Year"W$BAR.XMEMO = "Year"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'W$BAR.YMEMO = "Total Sales and Gross Profit"*MAX.YEARS=DCOUNT(YEARS,CHAR(254))FOR YEAR.NO = 1 TO MAX.YEARS   YEAR.TOTAL=YEAR.TOTALS<YEAR.NO>   YEAR.GROSS.PROFIT=YEAR.GROSS.PROFITS<YEAR.NO>   W$BAR.VALUES<1,YEAR.NO>=OCONV(YEAR.TOTAL+0,'MD2')   W$BAR.VALUES<2,YEAR.NO>=OCONV(YEAR.GROSS.PROFIT+0,'MD2')   W$BAR.XLABELS<1,YEAR.NO>=YEARS<YEAR.NO> NEXT YEAR.NORETURN*YEAR.TO.YEAR.SALES.BY.MONTH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSCOLUMN2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYYMM BREAK-ON YYYYMM PIPE TOTAL AMOUNT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.MO.TOTALS=''YEAR.NO=1MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YYYYMM=TRIM(FIELD(ROW,'|',1))      YEAR=YYYYMM[1,4]      MO.NO=YYYYMM[5,2]+0      AMOUNT=TRIM(FIELD(ROW,'|',2))      IF YEAR <> '' AND MO.NO AND NUM(AMOUNT) THEN         YEAR.NO=YEAR-FIRST.YEAR+1         IF AMOUNT THEN            AMOUNT=ICONV(AMOUNT,'MD2')            YEAR.MO.TOTALS<YEAR.NO,MO.NO>+=AMOUNT          END       END    END NEXT ROW.NO*FOR I = 0 TO 4   W$BAR.LABELS<I+1> = FIRST.YEAR+I   W$BAR.LABEL.OPTS<I+1> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Monthly Sales by Year"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Sales"*FOR MO.NO = 1 TO 12   FOR YEAR.NO = 1 TO 5      W$BAR.VALUES<YEAR.NO,MO.NO>=OCONV(YEAR.MO.TOTALS<YEAR.NO,MO.NO>+0,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,MO.NO>=FIELD(ALF.MONTHS,',',MO.NO) NEXT MO.NORETURN*YEAR.TO.YEAR.GP.BY.MONTH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSCOLUMN2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYYMM BREAK-ON YYYYMM PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.MO.TOTALS=''YEAR.NO=1MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YYYYMM=TRIM(FIELD(ROW,'|',1))      YEAR=YYYYMM[1,4]      MO.NO=YYYYMM[5,2]+0      GROSS.PROFIT=TRIM(FIELD(ROW,'|',2))      IF YEAR <> '' AND MO.NO AND NUM(GROSS.PROFIT) THEN         YEAR.NO=YEAR-FIRST.YEAR+1         IF GROSS.PROFIT THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            YEAR.MO.TOTALS<YEAR.NO,MO.NO>+=GROSS.PROFIT          END       END    END NEXT ROW.NO*FOR I = 0 TO 4   W$BAR.LABELS<I+1> = FIRST.YEAR+I   W$BAR.LABEL.OPTS<I+1> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Monthly Gross Profit by Year"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Gross Profit"*FOR MO.NO = 1 TO 12   FOR YEAR.NO = 1 TO 5      W$BAR.VALUES<YEAR.NO,MO.NO>=OCONV(YEAR.MO.TOTALS<YEAR.NO,MO.NO>+0,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,MO.NO>=FIELD(ALF.MONTHS,',',MO.NO) NEXT MO.NORETURN*MTD.SALES.BY.SALESMAN:**OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':SALESMAN.DICT:' BREAK-ON ':SALESMAN.DICT:' PIPE TOTAL ':SALE.AMOUNT.DICT:' PIPE TOTAL ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Salesman"SALESMEN=''SALESMAN.CNTR=0LAST.SALESMAN=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      SALESMAN=TRIM(FIELD(ROW,'|',1))      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      COST.OF.SALE=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(COST.OF.SALE) THEN         IF AMOUNT > 0 THEN            IF SALESMAN <> LAST.SALESMAN THEN               LAST.SALESMAN=SALESMAN               SALESMAN.CNTR+=1               SALESMEN<1,SALESMAN.CNTR>=SALESMAN               AMOUNTS<1,SALESMAN.CNTR>=0               GROSS.PROFITS<1,SALESMAN.CNTR>=0             END            GROSS.PROFIT=AMOUNT-COST.OF.SALE            AMOUNTS<1,SALESMAN.CNTR>+=AMOUNT            GROSS.PROFITS<1,SALESMAN.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profits of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Salesman"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))IF SALESMAN.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * SALESMAN.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDW$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'VALUE.CNTR=0FOR AMT.CNTR = 1 TO NUM.AMOUNTS   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT > 0 THEN      GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>      VALUE.CNTR+=1      SALESMAN=SALESMEN<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=SALESMAN      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE SALESMEN:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES.BY.SALESMAN:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY SALESMAN BREAK-ON SALESMAN PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Salesman"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'SALESMEN=''SALESMAN.CNTR=0LAST.SALESMAN=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      SALESMAN=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         AMOUNT=ICONV(AMOUNT,'MD2')         IF AMOUNT > 0 THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            IF SALESMAN <> LAST.SALESMAN THEN               LAST.SALESMAN=SALESMAN               SALESMAN.CNTR+=1               SALESMEN<1,SALESMAN.CNTR>=SALESMAN               AMOUNTS<1,SALESMAN.CNTR>=0               GROSS.PROFITS<1,SALESMAN.CNTR>=0             END            AMOUNTS<1,SALESMAN.CNTR>+=AMOUNT            GROSS.PROFITS<1,SALESMAN.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Salesman"IF SALESMAN.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * SALESMAN.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDVALUE.CNTR=0FOR AMT.CNTR = 1 TO SALESMAN.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>   IF AMOUNT THEN      VALUE.CNTR+=1      SALESMAN=SALESMEN<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=SALESMAN      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTRRETURN*YEAR.TO.YEAR.BY.SALESMAN:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY SALESMAN BY YYYY BREAK-ON SALESMAN PIPE BREAK-ON YYYY PIPE TOTAL AMOUNT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.SALESMAN.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))SALESMEN=''SALESMEN.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   NUM.PIPES=COUNT(ROW,'|')   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      SALESMAN=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND SALESMAN <> '' THEN; *      IF SALESMAN <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE SALESMAN IN SALESMEN SETTING SALESMAN.POS ELSE               SALESMEN.CNTR+=1               SALESMEN<SALESMEN.CNTR>=SALESMAN               SALESMAN.POS=SALESMEN.CNTR             END            YEAR.SALESMAN.TOTALS<SALESMAN.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            AMOUNT=TRIM(FIELD(ROW,'|',3))            IF NUM(AMOUNT) THEN               AMOUNT=ICONV(AMOUNT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=AMOUNT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Sales by Salesman"W$BAR.XMEMO = "Salesman"W$BAR.YMEMO = "Sales"W$CHART.HEIGHT = 200 + (70 * SALESMEN.CNTR)*FOR SALESMAN.NO = 1 TO SALESMEN.CNTR   FOR YEAR.NO = 1 TO 5      SALESMAN.YEAR.AMT=YEAR.SALESMAN.TOTALS<SALESMAN.NO,YEAR.NO>+0      IF SALESMAN.YEAR.AMT < 0 THEN SALESMAN.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,SALESMAN.NO>=OCONV(SALESMAN.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,SALESMAN.NO>=SALESMEN<SALESMAN.NO> NEXT SALESMAN.NORETURN*YEAR.TO.YEAR.GP.BY.SALESMAN:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY SALESMAN BY YYYY BREAK-ON SALESMAN PIPE BREAK-ON YYYY PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDWRITE STACKED.1:@AM:STACKED.2 ON FI.MVDB.SUBS, 'YEAR.TO.YEAR.CMND'WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.SALESMAN.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))SALESMEN=''SALESMEN.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      SALESMAN=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND SALESMAN <> '' THEN; *      IF SALESMAN <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE SALESMAN IN SALESMEN SETTING SALESMAN.POS ELSE               SALESMEN.CNTR+=1               SALESMEN<SALESMEN.CNTR>=SALESMAN               SALESMAN.POS=SALESMEN.CNTR             END            YEAR.SALESMAN.TOTALS<SALESMAN.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))            IF NUM(GROSS.PROFIT) THEN               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=GROSS.PROFIT             END          END       END    ENDWRITE SALESMEN ON FI.MVDB.SUBS, 'SALESMEN'WRITE YEAR.SALESMAN.TOTALS ON FI.MVDB.SUBS, 'YEAR.SALESMAN.TOTALS'WRITE YEAR.TOTALS ON FI.MVDB.SUBS, 'YEAR.TOTALS' NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Gross Profit by Salesman"W$BAR.XMEMO = "Salesman"W$BAR.YMEMO = "Gross Profit"W$CHART.HEIGHT = 200 + (70 * SALESMEN.CNTR)*FOR SALESMAN.NO = 1 TO SALESMEN.CNTR   FOR YEAR.NO = 1 TO 5      SALESMAN.YEAR.AMT=YEAR.SALESMAN.TOTALS<SALESMAN.NO,YEAR.NO>+0      IF SALESMAN.YEAR.AMT < 0 THEN SALESMAN.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,SALESMAN.NO>=OCONV(SALESMAN.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,SALESMAN.NO>=SALESMEN<SALESMAN.NO> NEXT SALESMAN.NORETURN**MTD.SALES.BY.BRANCH:**OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':BRANCH.DICT:' BREAK-ON ':BRANCH.DICT:' PIPE TOTAL ':SALE.AMOUNT.DICT:' PIPE TOTAL ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Branch"BRANCHES=''BRANCH.CNTR=0LAST.BRANCH=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      BRANCH=TRIM(FIELD(ROW,'|',1))      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      COST.OF.SALE=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(COST.OF.SALE) THEN         IF AMOUNT > 0 THEN            IF BRANCH <> LAST.BRANCH THEN               LAST.BRANCH=BRANCH               BRANCH.CNTR+=1               BRANCHES<1,BRANCH.CNTR>=BRANCH               AMOUNTS<1,BRANCH.CNTR>=0               GROSS.PROFITS<1,BRANCH.CNTR>=0             END            GROSS.PROFIT=AMOUNT-COST.OF.SALE            AMOUNTS<1,BRANCH.CNTR>+=AMOUNT            GROSS.PROFITS<1,BRANCH.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Branch"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))IF BRANCH.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * BRANCH.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDW$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'VALUE.CNTR=0FOR AMT.CNTR = 1 TO NUM.AMOUNTS   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT > 0 THEN      GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>      VALUE.CNTR+=1      BRANCH=BRANCHES<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=BRANCH      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE BRANCHES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES.BY.BRANCH:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY BRANCH BREAK-ON BRANCH PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Branch"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'BRANCHES=''BRANCH.CNTR=0LAST.BRANCH=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      BRANCH=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         AMOUNT=ICONV(AMOUNT,'MD2')         IF AMOUNT > 0 THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            IF BRANCH <> LAST.BRANCH THEN               LAST.BRANCH=BRANCH               BRANCH.CNTR+=1               BRANCHES<1,BRANCH.CNTR>=BRANCH               AMOUNTS<1,BRANCH.CNTR>=0               GROSS.PROFITS<1,BRANCH.CNTR>=0             END            AMOUNTS<1,BRANCH.CNTR>+=AMOUNT            GROSS.PROFITS<1,BRANCH.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Branch"IF BRANCH.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * BRANCH.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDVALUE.CNTR=0FOR AMT.CNTR = 1 TO BRANCH.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT THEN      VALUE.CNTR+=1      BRANCH=BRANCHES<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=BRANCH      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFITS<1,AMT.CNTR>,'MD2')    END NEXT AMT.CNTR**WRITE DATES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'YTD.SALES.TEST'RETURN*YEAR.TO.YEAR.BY.BRANCH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY BRANCH BY YYYY BREAK-ON BRANCH PIPE BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.BRANCH.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))BRANCHES=''BRANCHES.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      BRANCH=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND BRANCH <> '' THEN; *      IF BRANCH <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE BRANCH IN BRANCHES SETTING BRANCH.POS ELSE               BRANCHES.CNTR+=1               BRANCHES<BRANCHES.CNTR>=BRANCH               BRANCH.POS=BRANCHES.CNTR             END            YEAR.BRANCH.TOTALS<BRANCH.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            AMOUNT=TRIM(FIELD(ROW,'|',3))            GROSS.PROFIT=TRIM(FIELD(ROW,'|',4))            IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN               AMOUNT=ICONV(AMOUNT,'MD2')               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=AMOUNT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Sales by Branch"W$BAR.XMEMO = "Branch"W$BAR.YMEMO = "Total Sales and Gross Profit"W$CHART.HEIGHT = 200 + (50 * BRANCHES.CNTR)*FOR BRANCH.NO = 1 TO BRANCHES.CNTR   FOR YEAR.NO = 1 TO 5      BRANCH.YEAR.AMT=YEAR.BRANCH.TOTALS<BRANCH.NO,YEAR.NO>+0      IF BRANCH.YEAR.AMT < 0 THEN BRANCH.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,BRANCH.NO>=OCONV(BRANCH.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,BRANCH.NO>=BRANCHES<BRANCH.NO> NEXT BRANCH.NORETURN*YEAR.TO.YEAR.GP.BY.BRANCH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY BRANCH BY YYYY BREAK-ON BRANCH PIPE BREAK-ON YYYY PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.BRANCH.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))BRANCHES=''BRANCHES.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      BRANCH=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND BRANCH <> '' THEN; *      IF BRANCH <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE BRANCH IN BRANCHES SETTING BRANCH.POS ELSE               BRANCHES.CNTR+=1               BRANCHES<BRANCHES.CNTR>=BRANCH               BRANCH.POS=BRANCHES.CNTR             END            YEAR.BRANCH.TOTALS<BRANCH.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))            IF NUM(GROSS.PROFIT) THEN               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=GROSS.PROFIT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Gross Profit by Branch"W$BAR.XMEMO = "Branch"W$BAR.YMEMO = "Gross Profit"W$CHART.HEIGHT = 200 + (70 * BRANCHES.CNTR)*FOR BRANCH.NO = 1 TO BRANCHES.CNTR   FOR YEAR.NO = 1 TO 5      BRANCH.YEAR.AMT=YEAR.BRANCH.TOTALS<BRANCH.NO,YEAR.NO>+0      IF BRANCH.YEAR.AMT < 0 THEN BRANCH.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,BRANCH.NO>=OCONV(BRANCH.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,BRANCH.NO>=BRANCHES<BRANCH.NO> NEXT BRANCH.NORETURN*MTD.SALES.BY.REGION:**OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':REGION.DICT:' BREAK-ON ':REGION.DICT:' PIPE TOTAL ':SALE.AMOUNT.DICT:' PIPE TOTAL ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "REGION"REGIONS=''REGION.CNTR=0LAST.REGION=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      REGION=TRIM(FIELD(ROW,'|',1))      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      COST.OF.SALE=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(COST.OF.SALE) THEN         IF AMOUNT > 0 THEN            IF REGION <> LAST.REGION THEN               LAST.REGION=REGION               REGION.CNTR+=1               REGIONS<1,REGION.CNTR>=REGION               AMOUNTS<1,REGION.CNTR>=0               GROSS.PROFITS<1,REGION.CNTR>=0             END            GROSS.PROFIT=AMOUNT-COST.OF.SALE            AMOUNTS<1,REGION.CNTR>+=AMOUNT            GROSS.PROFITS<1,REGION.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Region"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))IF REGION.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * REGION.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDW$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'VALUE.CNTR=0FOR AMT.CNTR = 1 TO NUM.AMOUNTS   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT > 0 THEN      GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>      VALUE.CNTR+=1      REGION=REGIONS<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=REGION      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE REGIONS:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES.BY.REGION:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY REGION BREAK-ON REGION PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Region"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'REGIONS=''REGION.CNTR=0LAST.REGION=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      REGION=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         AMOUNT=ICONV(AMOUNT,'MD2')         IF AMOUNT > 0 THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            IF REGION <> LAST.REGION THEN               LAST.REGION=REGION               REGION.CNTR+=1               REGIONS<1,REGION.CNTR>=REGION               AMOUNTS<1,REGION.CNTR>=0               GROSS.PROFITS<1,REGION.CNTR>=0             END            AMOUNTS<1,REGION.CNTR>+=AMOUNT            GROSS.PROFITS<1,REGION.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Region"IF REGION.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * REGION.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDVALUE.CNTR=0FOR AMT.CNTR = 1 TO REGION.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT THEN      VALUE.CNTR+=1      REGION=REGIONS<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=REGION      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFITS<1,AMT.CNTR>,'MD2')    END NEXT AMT.CNTR**WRITE DATES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'YTD.SALES.TEST'RETURN**YEAR.TO.YEAR.BY.REGION:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY REGION BY YYYY BREAK-ON REGION PIPE BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.REGION.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))REGIONS=''REGIONS.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      REGION=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND REGION <> '' THEN; *      IF REGION <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE REGION IN REGIONS SETTING REGION.POS ELSE               REGIONS.CNTR+=1               REGIONS<REGIONS.CNTR>=REGION               REGION.POS=REGIONS.CNTR             END            YEAR.REGION.TOTALS<REGION.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            AMOUNT=TRIM(FIELD(ROW,'|',3))            IF NUM(AMOUNT) THEN               AMOUNT=ICONV(AMOUNT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=AMOUNT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Sales by Region"W$BAR.XMEMO = "Region"W$BAR.YMEMO = "Sales"W$CHART.HEIGHT = 200 + (50 * REGIONS.CNTR)*FOR REGION.NO = 1 TO REGIONS.CNTR   FOR YEAR.NO = 1 TO 5      REGION.YEAR.AMT=YEAR.REGION.TOTALS<REGION.NO,YEAR.NO>+0      IF REGION.YEAR.AMT < 0 THEN REGION.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,REGION.NO>=OCONV(REGION.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,REGION.NO>=REGIONS<REGION.NO> NEXT REGION.NORETURN*YEAR.TO.YEAR.GP.BY.REGION:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY REGION BY YYYY BREAK-ON REGION PIPE BREAK-ON YYYY PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.REGION.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))REGIONS=''REGIONS.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      REGION=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND REGION <> '' THEN; *      IF REGION <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE REGION IN REGIONS SETTING REGION.POS ELSE               REGIONS.CNTR+=1               REGIONS<REGIONS.CNTR>=REGION               REGION.POS=REGIONS.CNTR             END            YEAR.REGION.TOTALS<REGION.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))            IF NUM(GROSS.PROFIT) THEN               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=GROSS.PROFIT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Gross Profit by Region"W$BAR.XMEMO = "Region"W$BAR.YMEMO = "Gross Profit"W$CHART.HEIGHT = 200 + (70 * REGIONS.CNTR)*FOR REGION.NO = 1 TO REGIONS.CNTR   FOR YEAR.NO = 1 TO 5      REGION.YEAR.AMT=YEAR.REGION.TOTALS<REGION.NO,YEAR.NO>+0      IF REGION.YEAR.AMT < 0 THEN REGION.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,REGION.NO>=OCONV(REGION.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,REGION.NO>=REGIONS<REGION.NO> NEXT REGION.NORETURN*VERIFY.CURRENT.DATA:*READ LAST.UPDATE FROM FI.DICT.DASHBOARD.CLOSING.STATS, '*LAST.UPDATE' ELSE LAST.UPDATE=0READ LAST.UPDATED FROM FI.DICT.DASHBOARD.CLOSING.STATS, '*LAST.UPDATED' ELSE LAST.UPDATED=0CUR.DATE=DATE(); CUR.TIME=TIME()CUR.TIME=FIELD(CUR.TIME,'.',1)LEN.CUR.TIME=LEN(CUR.TIME)CUR.TIME=STR('0',5-LEN.CUR.TIME):CUR.TIMECUR.DATE.TIME=CUR.DATE:CUR.TIMEDELTA.DATE.TIME=CUR.DATE.TIME-LAST.UPDATEDIF DELTA.DATE.TIME > 900 THEN   * REFRESH EVERY 15 MINUTES   LAST.UPDATED='UPDATING'   BEGIN CASE      CASE PLATFORM = 'D3' OR PLATFORM = 'JB'         EXECUTE "Z REFRESH.DASHBOARD.CLOSING.STATS" CAPTURING DUMMY      CASE 1         EXECUTE "PHANTOM REFRESH.DASHBOARD.CLOSING.STATS" CAPTURING DUMMY   END CASE ENDIF NOT(NUM(LAST.UPDATE)) THEN   IF INDEX(LAST.UPDATE,'UPDATING',1) THEN      LAST.UPDATE='Figures are currently updating.'      LAST.UPDATE<-1>='Try again in a couple of minutes.'    END   MAX.LINES=DCOUNT(LAST.UPDATE,CHAR(254))   ERROR.MSG=''   FOR I = 1 TO MAX.LINES      THIS.MSG=LAST.UPDATE<I>      IF ERROR.MSG <> '' THEN ERROR.MSG:='<br>'      ERROR.MSG:=THIS.MSG    NEXT I   RETURN TO DISPLAY.ERROR ENDRETURN*GET.CURRENT.REPORT:*BEGIN CASE   CASE GET.REPORT.TYPE = 'SALES'       FI.DICT=FI.DICT.DASHBOARD.CLOSING.STATS       LAST.DATE.INDICATOR='*LAST.UPDATE.SALES'       REPORT.STATS.ID='*CURRENT.SALES.STATS'END CASE*** IF MORE THAN 10 MINUTES SINCE LAST UPDATE THEN REFRESH DATA*RECALC.REQUESTED=0DATA.CURRENT=0LOOP   READ LAST.UPDATE FROM FI.DICT, LAST.DATE.INDICATOR ELSE LAST.UPDATE=''   IF NUM(LAST.UPDATE) THEN      CUR.TIME=OCONV(TIME(),'MT')      CONVERT ':' TO '' IN CUR.TIME      CUR.DATE.TIME=DATE():CUR.TIME      LAST.UPDATE.DELTA=CUR.DATE.TIME - LAST.UPDATE      IF LAST.UPDATE.DELTA < 10 THEN DATA.CURRENT=1    ENDUNTIL DATA.CURRENT DO   IF NUM(LAST.UPDATE) THEN      IF NOT(RECALC.REQUESTED) THEN         BEGIN CASE            CASE PLATFORM = 'D3' OR PLATFORM = 'JB'               EXECUTE "Z REFRESH.DASHBOARD.MTD.STATS ":REPORT.TYPE CAPTURING DUMMY            CASE 1               EXECUTE "PHANTOM REFRESH.DASHBOARD.MTD.STATS ":REPORT.TYPE CAPTURING DUMMY         END CASE         RECALC.REQUESTED=1       END    END   SLEEP 2REPEATREAD REPORT.STATS.REC FROM FI.DICT, REPORT.STATS.ID ELSE REPORT.STATS.REC=''WRITE REPORT.STATS.REC ON FI.MVDB.SUBS, 'REPORT.STATS.REC'RETURNEND0051AFREFRESH.DASHBOARD.MTD.STATS0c2** PHANTOM PROGRAM TO CALCULATE MTD SALES, AR, AP, AND NET INCOME NUMBERS*OPEN.ERRORS=''OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE OPEN.ERRORS:=' MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'DIM SETUP.PARAMS(25)IF PLATFORM = 'D3' THEN CMND=SENTENCE() ELSE CMND=@SENTENCECMND=TRIM(CMND)OPTION.PARAM=FIELD(CMND,' ',DCOUNT(CMND,' '))IF OPTION.PARAM = 'SALES' OR OPTION.PARAM = 'ALL' THEN   OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.CLOSING.STATS ELSE OPEN.ERRORS:=' DICT DASHBOARD.CLOSING.STATS' ENDIF OPTION.PARAM <> 'SALES' THEN   OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.BALANCES ELSE OPEN.ERRORS:=' DICT DASHBOARD.BALANCES' ENDEXECUTE "TERM 132,20000"*BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='MD'END CASEOPEN '',MD.FILE.NAME TO FI.MD ELSE   OPEN.ERRORS:=' ':MD.FILE.NAME ENDIF OPEN.ERRORS <> '' THEN STOP*DAYS.AGO.60=DATE()-60DAYS.AGO.1000=DATE()-1000ALL.GOOD=1BEGIN CASE   CASE OPTION.PARAM = 'SALES'; GOSUB CALC.SALES   CASE OPTION.PARAM = 'AR'; GOSUB CALC.AR   CASE OPTION.PARAM = 'AP'; GOSUB CALC.AP   CASE OPTION.PARAM = 'NET.INCOME'; GOSUB CALC.NET.INCOME   CASE OPTION.PARAM = 'ALL'      GOSUB CALC.SALES      GOSUB CALC.AR      GOSUB CALC.AP      GOSUB CALC.NET.INCOME      IF ALL.GOOD THEN         DICT.FILE=FI.DICT.BALANCES         TIME.STAMP.TYPE='ALL'         GOSUB UPDATE.TIME.STAMP       END   CASE 1; NULLEND CASESTOP*CALC.SALES:*DICT.FILE=FI.DICT.CLOSING.STATSMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' ENDEQUATE ACCOUNT TO SETUP.PARAMS(1)EQUATE REPORT.FILE TO SETUP.PARAMS(2)EQUATE SALE.DATE.DICT TO SETUP.PARAMS(3)EQUATE SALE.MONTH.DICT TO SETUP.PARAMS(4)EQUATE SALE.YEAR.DICT TO SETUP.PARAMS(5)EQUATE SALE.AMOUNT.DICT TO SETUP.PARAMS(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO SETUP.PARAMS(7)EQUATE SALESMAN.DICT TO SETUP.PARAMS(8)EQUATE BRANCH.DICT TO SETUP.PARAMS(9)EQUATE REGION.DICT TO SETUP.PARAMS(10)EQUATE SALE.DATE.AMC TO SETUP.PARAMS(11)EQUATE SALE.AMOUNT.AMC TO SETUP.PARAMS(12)EQUATE SALE.AMOUNT.CONV TO SETUP.PARAMS(13)EQUATE SALE.AMOUNT.COOR TO SETUP.PARAMS(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO SETUP.PARAMS(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO SETUP.PARAMS(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO SETUP.PARAMS(17)EQUATE SALESMAN.AMC TO SETUP.PARAMS(18)EQUATE SALESMAN.TFILE TO SETUP.PARAMS(19)EQUATE BRANCH.AMC TO SETUP.PARAMS(20)EQUATE BRANCH.TFILE TO SETUP.PARAMS(21)EQUATE REGION.AMC TO SETUP.PARAMS(22)EQUATE REGION.TFILE TO SETUP.PARAMS(23)OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'SALES.FILE.PATH='SALES.FILE.PATH'**IF PLATFORM = 'UD' THEN**   QFILE.NAME=SALES.FILE.PATH**   CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.QFILE)** END ELSE**   MD.QFILE='Q'**   MD.QFILE<2>=ACCOUNT**   MD.QFILE<3>=REPORT.FILE**   WRITE MD.QFILE ON FI.MD, 'SALES.FILE.PATH'** ENDQFILE.NAME=SALES.FILE.PATHCALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.QFILE)TIME.STAMP.TYPE='SALES'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':SALE.DATE.DICT:' ':SALE.DATE.DICT:' PIPE ':SALE.AMOUNT.DICT:' PIPE ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)WRITE STACKED.2 ON FI.MVDB.CONTROL, 'SALES.REPORT.CMND'WRITE REPORT ON FI.MVDB.CONTROL, 'SALES.REPORT.RESULT'IF NOT(SYSTEM.11) THEN   WRITE 'ERROR: NO SALES CLOSED SINCE BEGINNING OF MONTH' ON FI.DICT.CLOSING.STATS, '*CURRENT.SALES.STATS'   GOSUB UPDATE.TIME.STAMP   SALES.STATS=''**   RETURN** END END ELSE   DATES=''   DATE.CNTR=0   LAST.DATE=''   AMOUNTS=''   COSTS=''   MAX.ROWS=DCOUNT(REPORT,CHAR(254))   FOR ROW.NO = 1 TO MAX.ROWS      ROW=REPORT<ROW.NO>      IF INDEX(ROW,'|',1) THEN         ROW.DATE=TRIM(FIELD(ROW,'|',1))         AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')         COST=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')         IF NUM(AMOUNT) THEN            IF ROW.DATE <> LAST.DATE THEN               LAST.DATE=ROW.DATE               DATE.CNTR+=1               DATES<1,DATE.CNTR>=ROW.DATE               AMOUNTS<1,DATE.CNTR>=0               COSTS<1,DATE.CNTR>=0             END            AMOUNTS<1,DATE.CNTR>+=AMOUNT            COSTS<1,DATE.CNTR>+=COST          END       END    NEXT ROW.NO   VALUE.CNTR=0   SALES.STATS=''   FOR AMT.CNTR = 1 TO DATE.CNTR      COST=COSTS<1,AMT.CNTR>      AMOUNT=AMOUNTS<1,AMT.CNTR>      IF AMOUNT OR COST THEN         VALUE.CNTR+=1         ROW.DATE=ICONV(DATES<1,AMT.CNTR>,'D')         ROW.DATE=OCONV(ROW.DATE,'D0')         SALES.STATS<1,VALUE.CNTR>=ROW.DATE         SALES.STATS<2,VALUE.CNTR>=AMOUNT         SALES.STATS<3,VALUE.CNTR>=COST       END    NEXT AMT.CNTR ENDWRITE SALES.STATS ON DICT.FILE, '*CURRENT.SALES.STATS'*EXECUTE "REFRESH.DASHBOARD.CLOSING.STATS" CAPTURING DUMMY*GOSUB UPDATE.TIME.STAMPRETURN*CALC.AR:** PERIOD.AMOUNTS DATA LAYOUT* 1 PERIOD 1 AMOUNT* 2 PERIOS 2 AMOUNT* 3 PERIOD 3 AMOUNT* 4 PERIOD 4 AMOUNT* 5* 6 YEAR ] YEAR ] YEAR* 7 PERIOD 1 NUMBER \ PERIOD 2 NUMBER \ PERIOD 3 NUMBER \ PERIOD 4 NUMBER * 8 PERIOD 1 AMOUNT \ PERIOD 2 AMOUNT \ PERIOD 3 AMOUNT \ PERIOD 4 AMOUNT * 9 PERIOD 1 TOTAL DAYS ? PERIOD 2 TOTAL DAYS ? ETC* 10 YEAR 1 JAN # PAID\ FEB # PAID ... ] YEAR 2 JAN # PAID \* 11 YEAR 1 JAN # TOTAL DAYS \ FEB TOTAL DAYS ....* 12 CUSTOMER ] CUSTOMER ]* 13 CUSTOMER AMT DUE ] ] ]* 14 LARGEST DAYS DUE ] ] ]* 15 TOTAL DAYS LAST 1000 DAYS ] ] ]* 16 NUMBER OF ARS LAST 1000 DAYS ] ] ]* 17 TOTAL DAYS LAST 60 DAYS ] ] ]* 18 NUMBER OF ARS LAST 60 DAYS ] ] ]* 19 customers  ] ] ] for 50 highest amounts due* 20 amounts ] ] ] for 50 highest amounts due* 21 customers ] ] ] for 50 highest days due* 22 days due ] ] ] for 50 highest days due* 23 customer ] ] ] ] ] for 50 highest percent increase* 24 percentage increase from 1000 day average to 60 day average for highest 50**DICT.FILE=FI.DICT.BALANCESMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' END*EQUATE AR.ACCOUNT TO SETUP.PARAMS(1)EQUATE AR.REPORT.FILE TO SETUP.PARAMS(2)EQUATE AR.DUE.DATE.DICT TO SETUP.PARAMS(3)EQUATE AR.DATE.PAID.DICT TO SETUP.PARAMS(4)EQUATE AR.INVOICE.AMT.DICT TO SETUP.PARAMS(5)EQUATE AR.BALANCE.DICT TO SETUP.PARAMS(6)EQUATE AR.DUE.DATE.AMC TO SETUP.PARAMS(8)EQUATE AR.DATE.PAID.AMC TO SETUP.PARAMS(9)EQUATE AR.INVOICE.AMT.AMC TO SETUP.PARAMS(10)EQUATE AR.INVOICE.AMT.CONV TO SETUP.PARAMS(11)EQUATE AR.INVOICE.AMT.COOR TO SETUP.PARAMS(12)EQUATE AR.BALANCE.AMC TO SETUP.PARAMS(13)EQUATE AR.BALANCE.CONV TO SETUP.PARAMS(14)EQUATE AR.BALANCE.COOR TO SETUP.PARAMS(15)EQUATE AR.CUSTOMER.DICT TO SETUP.PARAMS(16)EQUATE AR.CUSTOMER.AMC TO SETUP.PARAMS(17)EQUATE AR.CUSTOMER.TFILE TO SETUP.PARAMS(18)*AR.FILE.PATH='AR.FILE.PATH'QFILE.NAME=AR.FILE.PATH**OPEN '',AR.FILE.PATH TO FI.AR.FILE.PATH ELSE**IF PLATFORM = 'UD' THEN**   QFILE.NAME=AR.FILE.PATH**   CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.AR.FILE.PATH)**   IF QFILE.NAME = '' THEN**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** END ELSE**   MD.QFILE='Q'**   MD.QFILE<2>=ACCOUNT**   MD.QFILE<3>=REPORT.FILE**   WRITE MD.QFILE ON FI.MD, 'AR.FILE.PATH'**   OPEN '','AR.FILE.PATH' TO FI.AR.FILE.PATH ELSE**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** ENDCALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)IF QFILE.NAME = '' THEN   WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'   GOSUB UPDATE.TIME.STAMP   ALL.GOOD=0   RETURN ENDEXECUTE "CREATE-INDEX AR.FILE.PATH ":AR.DUE.DATE.DICT CAPTURING DUMMY** END***EXECUTE 'SELECT ':AR.FILE.PATH:' WITH ':AR.BALANCE.DICT:' > "0"' CAPTURING DUMMY**IF NOT(SYSTEM(11)) THEN**   WRITE 'ERROR: NO OUTSTANDING RECEIVABLES' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'**   GOSUB UPDATE.TIME.STAMP**   ALL.GOOD=0**   RETURN** END**CMND='SORT ':AR.FILE.PATH:' BY ':AR.DUE.DATE.DICT:' BREAK-ON ':AR.DUE.DATE.DICT:' PIPE TOTAL ':AR.BALANCE.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CMND='SORT ':AR.FILE.PATH:' WITH ':AR.INVOICE.AMT.DICT:' > "0" BY ':AR.DUE.DATE.DICTCMND:=' PIPE ':AR.DUE.DATE.DICT:' PIPE ':AR.DATE.PAID.DICT:' PIPE ':AR.INVOICE.AMT.DICTCMND:=' PIPE ':AR.BALANCE.DICT:' PIPE ':AR.CUSTOMER.DICT:' HDR-SUPP COL-HDR-SUPP NOPAGE'WRITE CMND ON FI.MVDB.CONTROL, 'AR.REPORT.CMND'EXECUTE CMND CAPTURING REPORTCONVERT '$,' TO '' IN REPORTWRITE REPORT ON FI.MVDB.CONTROL, 'AR.REPORT'* SETUP AGING PERIODS OF 0, 1-30, 31-60, 61-90, AND 90+PERIODS=0:@AM:1:@AM:31:@AM:61:@AM:91PERIOD.AMOUNTS=''CUSTOMERS=''NUM.CUSTS=0CUST.AMT.DUES=''CUST.MOST.DAYS.DUE=''CUST.TOTAL.1000.DAYS=''CUST.NUM.1000.DAYS=''CUST.TOTAL.60.DAYS=''CUST.NUM.60.DAYS=''DATES=''DATE.CNTR=0LAST.DATE=''AMOUNTS=''ROW.NO=0* BUILD LAST 5 YEARSFIVE.YEARS=''FIRST.YEAR=(OCONV(DATE(),'D4-')[7,4])-4FOR YEAR.CNTR = 0 TO 4   FIVE.YEARS<1,-1>=FIRST.YEAR+YEAR.CNTR NEXT YEAR.CNTRPERIOD.AMOUNTS<6>=FIVE.YEARSMAX.ROWS=DCOUNT(REPORT,@AM)LOOP   ROW.NO+=1   ROW=REPORT<ROW.NO>UNTIL ROW.NO > MAX.ROWS DO   IF INDEX(ROW,'|',1) THEN      ROW.DATE=TRIM(FIELD(ROW,'|',2))      DUE.DATE=ICONV(ROW.DATE,'D')      IF DUE.DATE = ROW.DATE OR NOT(NUM(DUE.DATE)) THEN DUE.DATE=''      IF DUE.DATE THEN         DUE.YEAR=OCONV(DUE.DATE,'D4-')[7,4]         LOCATE DUE.YEAR IN FIVE.YEARS<1> SETTING YEAR.POS ELSE YEAR.POS=0         PAID.DATE=TRIM(FIELD(ROW,'|',3))         NEXT.ROW.NO=ROW.NO+1         LOOP            NEXT.ROW=TRIM(REPORT<NEXT.ROW.NO>)         UNTIL INDEX(NEXT.ROW,'|',1) OR NEXT.ROW = '' DO            NEXT.PAID.DATE=NEXT.ROW            IF NEXT.PAID.DATE <> '' THEN PAID.DATE=NEXT.PAID.DATE            NEXT.ROW.NO+=1         REPEAT         ROW.NO=NEXT.ROW.NO-1         IF PAID.DATE <> '' THEN            PAID.DATE=ICONV(PAID.DATE,'D')            PAID.MO=OCONV(PAID.DATE,'D2-')[1,2]            PAID.MO+=0            PAID.YEAR=OCONV(PAID.DATE,'D4-')[7,4]            LOCATE PAID.YEAR IN FIVE.YEARS<1> SETTING PAID.YEAR.POS ELSE PAID.YEAR.POS=0            PAID.DAYS=PAID.DATE-DUE.DATE          END ELSE            PAID.MO=''            PAID.YEAR=''            PAID.DAYS=''            PAID.YEAR.POS=''          END         INV.AMOUNT=ICONV(TRIM(FIELD(ROW,'|',4)),'MD2')         REM.BALANCE=ICONV(TRIM(FIELD(ROW,'|',5)),'MD2')         CUSTOMER=TRIM(FIELD(ROW,'|',6))         CUSTOMER.POS=0         IF NUM(INV.AMOUNT) AND NUM(REM.BALANCE) THEN            IF CUSTOMER <> '' THEN               IF REM.BALANCE OR PAID.DATE >= DAYS.AGO.1000 THEN                  LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUSTOMER.POS ELSE                     NUM.CUSTS+=1                     CUSTOMER.POS=NUM.CUSTS                     CUSTOMERS<1,CUSTOMER.POS>=CUSTOMER                   END                END             END            IF REM.BALANCE OR NOT(PAID.DATE) THEN               DAYS.DUE=DATE()-DUE.DATE             END ELSE               DAYS.DUE=PAID.DATE-DUE.DATE             END            IF DAYS.DUE < 0 THEN DAYS.DUE=0            LOCATE DAYS.DUE IN PERIODS BY "AR" SETTING PERIOD ELSE PERIOD=PERIOD-1            IF REM.BALANCE THEN               PERIOD.AMOUNTS<PERIOD>+=REM.BALANCE               IF CUSTOMER.POS AND DAYS.DUE THEN                  CUST.AMT.DUES<1,CUSTOMER.POS>=CUST.AMT.DUES<1,CUSTOMER.POS>+REM.BALANCE                  IF DAYS.DUE > CUST.MOST.DAYS.DUE<1,CUSTOMER.POS> THEN                     CUST.MOST.DAYS.DUE<1,CUSTOMER.POS>=DAYS.DUE                   END                END             END            IF DAYS.DUE AND CUSTOMER.POS THEN               IF PAID.DATE THEN                  PAID.OR.TODAY=PAID.DATE                END ELSE                  PAID.OR.TODAY=DATE()                END               IF PAID.OR.TODAY >= DAYS.AGO.1000 THEN; * PAID IN LAST 1000 DAYS                  CUST.TOTAL.1000.DAYS<1,CUSTOMER.POS>=CUST.TOTAL.1000.DAYS<1,CUSTOMER.POS>+DAYS.DUE                  CUST.NUM.1000.DAYS<1,CUSTOMER.POS>=CUST.NUM.1000.DAYS<1,CUSTOMER.POS>+1                  IF PAID.OR.TODAY >= DAYS.AGO.60 THEN; * PAID IN LAST 60 DAYS                     CUST.TOTAL.60.DAYS<1,CUSTOMER.POS>=CUST.TOTAL.60.DAYS<1,CUSTOMER.POS>+DAYS.DUE                     CUST.NUM.60.DAYS<1,CUSTOMER.POS>=CUST.NUM.60.DAYS<1,CUSTOMER.POS>+1                   END                END             END            IF PAID.YEAR.POS THEN               IF YEAR.POS AND PERIOD THEN                  PERIOD.AMOUNTS<7,YEAR.POS,PERIOD>=PERIOD.AMOUNTS<7,YEAR.POS,PERIOD>+1                  PERIOD.AMOUNTS<8,YEAR.POS,PERIOD>=PERIOD.AMOUNTS<8,YEAR.POS,PERIOD>+INV.AMOUNT                  PERIOD.AMOUNTS<9,YEAR.POS>=PERIOD.AMOUNTS<9,YEAR.POS>+DAYS.DUE                END               PERIOD.AMOUNTS<10,PAID.YEAR.POS,PAID.MO>=PERIOD.AMOUNTS<10,PAID.YEAR.POS,PAID.MO>+1               PERIOD.AMOUNTS<11,PAID.YEAR.POS,PAID.MO>=PERIOD.AMOUNTS<11,PAID.YEAR.POS,PAID.MO>+PAID.DAYS             END          END       END    ENDREPEATPERIOD.AMOUNTS<12>=CUSTOMERSPERIOD.AMOUNTS<13>=CUST.AMT.DUESPERIOD.AMOUNTS<14>=CUST.MOST.DAYS.DUEPERIOD.AMOUNTS<15>=CUST.TOTAL.1000.DAYSPERIOD.AMOUNTS<16>=CUST.NUM.1000.DAYSPERIOD.AMOUNTS<17>=CUST.TOTAL.60.DAYSPERIOD.AMOUNTS<18>=CUST.NUM.60.DAYS*** GET THE 50 HIGHEST AMOUNTS DUE*HIGHEST.AMTS=''HIGHEST.AMTS.CUSTS=''MAX.CUSTS=DCOUNT(CUSTOMERS,@VM)FOR I = 1 TO MAX.CUSTS   MAX.AMT=CUST.AMT.DUES<1,I>   IF MAX.AMT THEN      LOCATE MAX.AMT IN HIGHEST.AMTS<1> BY "DR" SETTING POS ELSE NULL      IF POS <= 50 THEN         HIGHEST.AMTS=INSERT(HIGHEST.AMTS,1,POS,0,MAX.AMT)         HIGHEST.AMTS.CUSTS=INSERT(HIGHEST.AMTS.CUSTS,1,POS,0,CUSTOMERS<1,I>)       END    END NEXT IPERIOD.AMOUNTS<19>=HIGHEST.AMTS.CUSTSPERIOD.AMOUNTS<20>=HIGHEST.AMTS*** GET THE 50 HIGHEST DUE DAYS*HIGHEST.DAYS=''HIGHEST.DAYS.CUSTS=''FOR I = 1 TO MAX.CUSTS   CUST.DAYS.DUE=CUST.MOST.DAYS.DUE<1,I>   IF CUST.DAYS.DUE THEN      LOCATE CUST.DAYS.DUE IN HIGHEST.DAYS<1> BY "DR" SETTING POS ELSE NULL      IF POS <= 50 THEN         HIGHEST.DAYS=INSERT(HIGHEST.DAYS,1,POS,0,CUST.DAYS.DUE)         HIGHEST.DAYS.CUSTS=INSERT(HIGHEST.DAYS.CUSTS,1,POS,0,CUSTOMERS<1,I>)       END    END NEXT IPERIOD.AMOUNTS<21>=HIGHEST.DAYS.CUSTSPERIOD.AMOUNTS<22>=HIGHEST.DAYS*** GET THE 50 CUSTOMERS WITH HIGHEST PERCENTAGE INCREASES*HIGHEST.INCREASE.PCTS=''HIGHEST.INCREASE.CUSTS=''HIGHEST.INCREASE.60.DAYS=''HIGHEST.INCREASE.1000.DAYS=''FOR I = 1 TO MAX.CUSTS   DAYS.1000=CUST.TOTAL.1000.DAYS<1,I>   NUM.1000=CUST.NUM.1000.DAYS<1,I>   DAYS.60=CUST.TOTAL.60.DAYS<1,I>   NUM.60=CUST.NUM.60.DAYS<1,I>   IF NUM.1000 THEN      AVG.1000=DAYS.1000 / NUM.1000    END ELSE AVG.1000=0   IF NUM.60 THEN      AVG.60=DAYS.60 / NUM.60    END ELSE AVG.60=0   AVG.INCREASE=AVG.60 - AVG.1000   IF AVG.INCREASE > 0 AND AVG.60 > 300 THEN;  * MUST BE DUE OVER 30 DAYS      IF AVG.1000 THEN         PCT.INCREASE=INT(AVG.INCREASE * 1000 / AVG.1000 + .5)         PCT.INCREASE=OCONV(PCT.INCREASE,'MD1')       END ELSE PCT.INCREASE=0      LOCATE PCT.INCREASE IN HIGHEST.INCREASE.PCTS<1> BY "DR" SETTING POS ELSE NULL      IF POS <= 50 THEN         HIGHEST.INCREASE.PCTS=INSERT(HIGHEST.INCREASE.PCTS,1,POS,0,PCT.INCREASE)         HIGHEST.INCREASE.CUSTS=INSERT(HIGHEST.INCREASE.CUSTS,1,POS,0,CUSTOMERS<1,I>)         HIGHEST.INCREASE.1000.DAYS=INSERT(HIGHEST.INCREASE.1000.DAYS,1,POS,0,OCONV(AVG.1000,'MD1'))         HIGHEST.INCREASE.60.DAYS=INSERT(HIGHEST.INCREASE.60.DAYS,1,POS,0,OCONV(AVG.60,'MD1'))       END    END NEXT IPERIOD.AMOUNTS<23>=HIGHEST.INCREASE.CUSTSPERIOD.AMOUNTS<24>=HIGHEST.INCREASE.PCTSPERIOD.AMOUNTS<25>=HIGHEST.INCREASE.60.DAYSPERIOD.AMOUNTS<26>=HIGHEST.INCREASE.1000.DAYS*TIME.STAMP.TYPE='AR'DICT.FILE=FI.DICT.BALANCESGOSUB UPDATE.TIME.STAMPWRITE PERIOD.AMOUNTS ON DICT.FILE, '*CURRENT.AR.STATS'RETURN*CALC.AP:*DICT.FILE=FI.DICT.BALANCESMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' END*EQUATE AP.ACCOUNT TO SETUP.PARAMS(1)EQUATE AP.REPORT.FILE TO SETUP.PARAMS(2)EQUATE AP.DUE.DATE.DICT TO SETUP.PARAMS(3)EQUATE AP.DATE.PAID.DICT TO SETUP.PARAMS(4)EQUATE AP.INVOICE.AMT.DICT TO SETUP.PARAMS(5)EQUATE AP.BALANCE.DICT TO SETUP.PARAMS(6)EQUATE AP.DUE.DATE.AMC TO SETUP.PARAMS(8)EQUATE AP.DATE.PAID.AMC TO SETUP.PARAMS(9)EQUATE AP.INVOICE.AMT.AMC TO SETUP.PARAMS(10)EQUATE AP.INVOICE.AMT.CONV TO SETUP.PARAMS(11)EQUATE AP.INVOICE.AMT.COOR TO SETUP.PARAMS(12)EQUATE AP.BALANCE.AMC TO SETUP.PARAMS(13)EQUATE AP.BALANCE.CONV TO SETUP.PARAMS(14)EQUATE AP.BALANCE.COOR TO SETUP.PARAMS(15)*AP.FILE.PATH='AP.FILE.PATH'QFILE.NAME=AP.FILE.PATH**OPEN '',AP.FILE.PATH TO FI.AP.FILE.PATH ELSE**IF PLATFORM = 'UD' THEN**   QFILE.NAME=AP.FILE.PATH**   CALL CREATE.UD.QPOINTER(ACCOUNT,AP.REPORT.FILE,QFILE.NAME,FI.AP.FILE.PATH)**   IF QFILE.NAME = '' THEN**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** END ELSE**   MD.QFILE='Q'**   MD.QFILE<2>=AP.ACCOUNT**   MD.QFILE<3>=AP.REPORT.FILE**   WRITE MD.QFILE ON FI.MD, 'AP.FILE.PATH'**   OPEN '','AP.FILE.PATH' TO FI.AP.FILE.PATH ELSE**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** ENDCALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)IF QFILE.NAME = '' THEN   WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'   GOSUB UPDATE.TIME.STAMP   ALL.GOOD=0   RETURN ENDEXECUTE "CREATE-INDEX AP.FILE.PATH ":AP.DUE.DATE.DICT CAPTURING DUMMY** END*STACKED.1='SELECT ':AP.FILE.PATH:' WITH ':AP.BALANCE.DICT:' > "0"'STACKED.2='SORT ':AP.FILE.PATH:' BY ':AP.DUE.DATE.DICT:' BREAK-ON ':AP.DUE.DATE.DICT:' PIPE TOTAL ':AP.BALANCE.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)WRITE STACKED.2 ON FI.MVDB.CONTROL, 'AP.CMND'WRITE REPORT ON FI.MVDB.CONTROL, 'AP.REPORT'IF NOT(SYSTEM.11) THEN   WRITE 'ERROR: NO OUTSTANDING PAYABLES' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'   GOSUB UPDATE.TIME.STAMP**   ALL.GOOD=0**   RETURN** END   PERIOD.AMOUNTS='' END ELSE   * SETUP AGING PERIODS OF 0, 1-30, 31-60, 61-90, AND 90+   PERIODS=0:@AM:1:@AM:31:@AM:61:@AM:91   PERIOD.AMOUNTS=''   DATES=''   DATE.CNTR=0   LAST.DATE=''   AMOUNTS=''   MAX.ROWS=DCOUNT(REPORT,CHAR(254))   FOR ROW.NO = 1 TO MAX.ROWS      ROW=REPORT<ROW.NO>      IF INDEX(ROW,'|',1) THEN         ROW.DATE=TRIM(FIELD(ROW,'|',1))         DUE.DATE=ICONV(ROW.DATE,'D')         IF DUE.DATE = ROW.DATE OR NOT(NUM(DUE.DATE)) THEN DUE.DATE=''         IF DUE.DATE THEN            AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')            IF NUM(AMOUNT) THEN               DAYS.DUE=DATE()-DUE.DATE               IF DAYS.DUE < 0 THEN DAYS.DUE=0               LOCATE DAYS.DUE IN PERIODS BY "AR" SETTING PERIOD ELSE PERIOD=PERIOD-1               PERIOD.AMOUNTS<PERIOD>+=AMOUNT             END          END       END    NEXT ROW.NO END*TIME.STAMP.TYPE='AP'DICT.FILE=FI.DICT.BALANCESGOSUB UPDATE.TIME.STAMPWRITE PERIOD.AMOUNTS ON DICT.FILE, '*CURRENT.AP.STATS'*CALC.NET.INCOME:*TIME.STAMP.TYPE='NET.INCOME'DICT.FILE=FI.DICT.BALANCESGOSUB UPDATE.TIME.STAMPWRITE 999 ON DICT.FILE, '*CURRENT.NET.INCOME.STATS'RETURN*UPDATE.TIME.STAMP:*TIME.STAMP=TIME()TIME.STAMP=STR('0',5-LEN(TIME.STAMP)):TIME.STAMPWRITE DATE():TIME.STAMP ON DICT.FILE, '*LAST.UPDATE.':TIME.STAMP.TYPEWRITE DATE():TIME.STAMP ON DICT.FILE, '*LAST.UPDATED.':TIME.STAMP.TYPERETURNEND0007DFSUB.DEMO.SINGLE.MONTH.SALES.BY.REP0c2SUBROUTINE SUB.DEMO.SINGLE.MONTH.SALES.BY.REP***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEMONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'CONVERT ',' TO CHAR(254) IN MONTHSOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPMATWRITE WIDGET.USER.DATA ON FILE.CONTROL, 'DEBUG'READV YEARS FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE', 67 ELSE   YEARS='2013,2014,2015'   CONVERT ',' TO CHAR(253) IN YEARS ENDREVENUE.OR.GP=WIDGET.USER.DATA(1)YEAR=WIDGET.USER.DATA(2)MONTH=WIDGET.USER.DATA(3)LOCATE MONTH IN MONTHS SETTING MONTH.SVM ELSE MONTH.SVM=1YEAR.DETAIL.ID=''BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE=MONTH:' ':YEAR:' Sales By Sales Rep'      W$BAR.YMEMO = "Sales"      YEAR.DETAIL.ID='SALES.':YEAR      MAX.ROUNDER=150000   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE=MONTH:' ':YEAR:' Gross Profit By Sales Rep'      W$BAR.YMEMO = "Gross Profit"      YEAR.DETAIL.ID='GPS.':YEAR      MAX.ROUNDER=50000END CASEREAD REC FROM FILE.CONTROL, YEAR.DETAIL.ID ELSE REC=''*REPS=REC<1>**MAX.SALES.AMT=0N=0FIRST.YEAR=''MAX.REPS=DCOUNT(REPS,CHAR(253))FOR NN = 1 TO MAX.REPS   REP=REPS<1,NN>   SALES.AMT=REC<2,NN,MONTH.SVM>   SALES.AMT=OCONV(SALES.AMT,'MD02')   IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT   W$BAR.VALUES<1,NN> = SALES.AMT   W$BAR.XLABELS<1,NN> = REPNEXT NNW$BAR.XMEMO = "Sales Rep"* ROUND MAX AMOUNT UP TO THE NEXT MAX.ROUNDERMAX.SALES.AMT+=MAX.ROUNDERMAX.SALES.AMT=INT(MAX.SALES.AMT/MAX.ROUNDER) * MAX.ROUNDERW$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'RETURN0002FASUB.TEST.WIDGET0c2SUBROUTINE SUB.TEST.WIDGET** Copyright (c) 2010 SB, Inc. All rights reserved.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Neat Pie Chart"W$TYPE = "FC2DPIE"W$WIDTH = 1 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$PIE.CAPTION = "MV Dashboard Survey"*W$PIE.LABELS<1,1> = "Love it"W$PIE.LABELS<1,2> = "Like it"W$PIE.LABELS<1,3> = "Very nice"W$PIE.LABELS<1,4> = "Awesome!"*W$PIE.VALUES<1,1> = "1560"W$PIE.VALUES<1,2> = "400"W$PIE.VALUES<1,3> = "1012"W$PIE.VALUES<1,4> = "4065"** For a 2D pie, a specific slice can be separated from the pie* by setting this value:* W$PIE.VALUE.OPTS<1,3> = 'isSliced="1"'** To show percentages instead of values, use this:W$CHART.OPTIONS<-1> = "showPercentValues='1'"RETURN003DCBSUB.PORTAL.DASHBOARD0c2SUBROUTINE SUB.PORTAL.DASHBOARD** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) Zumasys, Inc*WEB$TITLE='MVDashboard Portal Financial Picture'WEB.FORM.NAME='PORTAL.DASHBOARD'W$TYPE='HTML'W$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*EQUATE AR.AMOUNTS TO GLOBAL.USER.DATA(1)EQUATE AP.AMOUNTS TO GLOBAL.USER.DATA(2)OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE    ERROR.MSG<-1>='UNABLE TO OPEN MVDB.CONTROL'   GOTO DISPLAY.ERROR ENDREAD PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'END CASEOPEN '','DASHBOARD.CLOSING.STATS' TO FI.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.CLOSING.STATS ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN '','DASHBOARD.BALANCES' TO FI.DASHBOARD.BALANCES ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DASHBOARD.BALANCES'   GOTO DISPLAY.ERROR ENDREAD PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'ERROR.MSG=''DIM SALES.SETUP.PARAMS(20), AR.SETUP.PARAMS(20), AP.SETUP.PARAMS(20), NET.INCOME.SETUP.PARAMS(20)*MATREAD SALES.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SALES.SETUP.PARAMS='' ENDEQUATE SALES.ACCOUNT TO SALES.SETUP.PARAMS(1)EQUATE SALES.REPORT.FILE TO SALES.SETUP.PARAMS(2)EQUATE SALES.DATE.DICT TO SALES.SETUP.PARAMS(3)EQUATE SALES.AMOUNT.DICT TO SALES.SETUP.PARAMS(6)EQUATE GP.DICT.NAME TO SALES.SETUP.PARAMS(7)*IF SALES.ACCOUNT = '' OR SALES.REPORT.FILE = '' OR SALES.DATE.DICT = '' OR SALES.AMOUNT.DICT = '' THEN   ERROR.MSG<-1>='SALES FILE ACCOUNT, SALES FILE NAME, DATE OF SALE, AND AMOUNT OF SALE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED' END*** BUILD SAMPLE DATA IF USING MVDB FOR SALES ACCOUNT*IF SALES.ACCOUNT = 'MVDB' THEN   EXECUTE "BUILD.SAMPLE.PORTAL.FILES" CAPTURING DUMMY END**OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.DASHBOARD.BALANCES ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DICT DASHBOARD.BALANCES'   GOTO DISPLAY.ERROR ENDMATREAD AR.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ELSE   MAT AR.SETUP.PARAMS='' END*EQUATE AR.ACCOUNT TO AR.SETUP.PARAMS(1)EQUATE AR.REPORT.FILE TO AR.SETUP.PARAMS(2)EQUATE AR.DUE.DATE.DICT TO AR.SETUP.PARAMS(3)EQUATE AR.BALANCE.DICT TO AR.SETUP.PARAMS(6)****IF AR.ACCOUNT = '' OR AR.REPORT.FILE = '' OR AR.DUE.DATE.DICT = '' OR AR.BALANCE.DICT = '' THEN**   ERROR.MSG<-1>='AR FILE ACCOUNT, AR FILE NAME, DUE DATE, AND BALANCE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'***   GOTO DISPLAY.ERROR** END*MATREAD AP.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ELSE   MAT AP.SETUP.PARAMS='' END*EQUATE AP.ACCOUNT TO AP.SETUP.PARAMS(1)EQUATE AP.REPORT.FILE TO AP.SETUP.PARAMS(2)EQUATE AP.DUE.DATE.DICT TO AP.SETUP.PARAMS(3)EQUATE AP.BALANCE.DICT TO AP.SETUP.PARAMS(6)****IF AP.ACCOUNT = '' OR AP.REPORT.FILE = '' OR AP.DUE.DATE.DICT = '' OR AP.BALANCE.DICT = '' THEN**   ERROR.MSG<-1>='AP FILE ACCOUNT, AP FILE NAME, DUE DATE, AND BALANCE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'***   GOTO DISPLAY.ERROR** END***MATREAD NET.INCOME.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.NET.INCOME.REPORT.SETUP' ELSE**   MAT NET.INCOME.SETUP.PARAMS=''** END*EQUATE NET.INCOME.ACCOUNT TO NET.INCOME.SETUP.PARAMS(1)EQUATE NET.INCOME.REPORT.FILE TO NET.INCOME.SETUP.PARAMS(2)EQUATE NET.INCOME.DUE.DATE.DICT TO NET.INCOME.SETUP.PARAMS(3)EQUATE NET.INCOME.BALANCE.DICT TO NET.INCOME.SETUP.PARAMS(6)****IF NET.INCOME.ACCOUNT = '' OR NET.INCOME.REPORT.FILE = '' OR NET.INCOME.DUE.DATE.DICT = '' OR NET.INCOME.BALANCE.DICT = '' THEN**   ERROR.MSG<-1>='NET INCOME FILE ACCOUNT, NET INCOME FILE NAME, DUE DATE, AND BALANCE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'***   GOTO DISPLAY.ERROR** END*IF ERROR.MSG <> '' THEN***   GOTO DISPLAY.ERROR END** START ANY REQUIRED BACKGROUND CALCULATIONS*CUR.TIME=TIME()CUR.TIME=FIELD(CUR.TIME,'.',1)CUR.TIME=STR('0',5-LEN(CUR.TIME)):CUR.TIMECUR.DATE.TIME=DATE():CUR.TIME*** SALES*READU SALES FROM FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES' ELSE SALES=''BEGIN CASE   CASE SALES = 'UPDATING'; SALES.STATUS='UPDATING'   CASE NOT(NUM(SALES)); SALES.STATUS='NEED CALC'   CASE (CUR.DATE.TIME - SALES) < 900;   * LESS THAN 15 MINUTES      SALES.STATUS='GOOD'      READ SALES.REC FROM FI.DICT.CLOSING.STATS, '*CURRENT.SALES.STATS' ELSE         SALES.STATUS='NEED CALC'       END   CASE 1; SALES.STATUS='NEED CALC'END CASEIF SALES.STATUS <> 'NEED CALC' THEN   RELEASE FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES' END*** AR*READU AR FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR' ELSE AR=''BEGIN CASE   CASE AR = 'UPDATING'; AR.STATUS='UPDATING'   CASE NOT(NUM(AR)); AR.STATUS='NEED CALC'   CASE (CUR.DATE.TIME - AR) < 900;   * LESS THAN 15 MINUTES      AR.STATUS='GOOD'      READ AR.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AR.STATS' ELSE         AR.STATUS='NEED CALC'       END   CASE 1; AR.STATUS='NEED CALC'END CASEIF AR.STATUS <> 'NEED CALC' THEN   RELEASE FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR' END*** AP*READU AP FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP' ELSE AP=''BEGIN CASE   CASE AP = 'UPDATING'; AP.STATUS='UPDATING'   CASE NOT(NUM(AP)); AP.STATUS='NEED CALC'   CASE (CUR.DATE.TIME - AP) < 900;   * LESS THAN 15 MINUTES      AP.STATUS='GOOD'      READ AP.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AP.STATS' ELSE         AP.STATUS='NEED CALC'       END   CASE 1; AP.STATUS='NEED CALC'END CASEIF AP.STATUS <> 'NEED CALC' THEN   RELEASE FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP' END******* NET.INCOME*****READU NET.INCOME FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME' ELSE NET.INCOME=''**BEGIN CASE**   CASE NET.INCOME = 'UPDATING'; NET.INCOME.STATUS='UPDATING'**   CASE NOT(NUM(NET.INCOME)); NET.INCOME.STATUS='NEED CALC'**   CASE (CUR.DATE.TIME - NET.INCOME) < 900;   * LESS THAN 15 MINUTES**      NET.INCOME.STATUS='GOOD'**      READ NET.INCOME.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.NET.INCOME.STATS' ELSE**         NET.INCOME.STATUS='NEED CALC'**       END**   CASE 1; NET.INCOME.STATUS='NEED CALC'**END CASE**IF NET.INCOME.STATUS <> 'NEED CALC' THEN**   RELEASE FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME'** END*IF SALES.STATUS <> 'GOOD' OR AR.STATUS <> 'GOOD' OR AP.STATUS <> 'GOOD' THEN ; *OR NET.INCOME.STATUS <> 'GOOD' THEN   IF SALES.STATUS = 'NEED CALC' AND AR.STATUS = 'NEED CALC' AND AP.STATUS = 'NEED CALC' THEN; *AND NET.INCOME.STATUS = 'NEED CALC' THEN      TYPE.CALC='ALL'      GOSUB INITIATE.CALC.PHANTOM      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.ALL'      WRITE 'UPDATING' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES'      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR'      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP'**      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME'    END ELSE      IF SALES.STATUS = 'NEED CALC' THEN         TYPE.CALC='SALES'         GOSUB INITIATE.CALC.PHANTOM         WRITE 'UPDATING' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES'       END      IF AR.STATUS = 'NEED CALC' THEN         TYPE.CALC='AR'         GOSUB INITIATE.CALC.PHANTOM         WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR'       END      IF AP.STATUS = 'NEED CALC' THEN         TYPE.CALC='AP'         GOSUB INITIATE.CALC.PHANTOM         WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP'       END**      IF NET.INCOME.STATUS = 'NEED CALC' THEN**         TYPE.CALC='NET.INCOME'**         GOSUB INITIATE.CALC.PHANTOM**         WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME'**       END    END   *   NOW.GOOD=1   *   ** GIVE IT 10 SECONDS TO COMPLETE ANY CALCS AND TRY AGAIN   *   SLEEP 10   *   IF SALES.STATUS <> 'GOOD' THEN      READ SALES.STATUS FROM FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES' ELSE SALES.STATUS='UPDATING'      IF NUM(SALES.STATUS) THEN         READ SALES.REC FROM FI.DICT.CLOSING.STATS, '*CURRENT.SALES.STATS' ELSE            SALES.STATUS='UPDATING'            NOW.GOOD=0          END       END ELSE         NOW.GOOD=0       END    END   *   IF AR.STATUS <> 'GOOD' THEN      READ AR.STATUS FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR' ELSE AR.STATUS='UPDATING'      IF NUM(AR.STATUS) THEN         READ AR.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AR.STATS' ELSE            AR.STATUS='UPDATING'            NOW.GOOD=0          END       END ELSE         NOW.GOOD=0       END    END   *   IF AP.STATUS <> 'GOOD' THEN      READ AP.STATUS FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP' ELSE AP.STATUS='UPDATING'      IF NUM(AP.STATUS) THEN         READ AP.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AP.STATS' ELSE            AP.STATUS='UPDATING'            NOW.GOOD=0          END       END ELSE         NOW.GOOD=0       END    END**   IF NET.INCOME.STATUS <> 'GOOD' THEN**      READ NET.INCOME.STATUS FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME' ELSE NET.INCOME.STATUS='UPDATING'**      IF NUM(NET.INCOME.STATUS) THEN**         READ NET.INCOME.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.NET.INCOME.STATS' ELSE**            NET.INCOME.STATUS='UPDATING'**            NOW.GOOD=0**          END**       END ELSE**         NOW.GOOD=0**       END**    END   *   IF NOT(NOW.GOOD) THEN      *      ** USE PROMPTS AS A WAY OF SHOWING WHICH ARE CALCULATION.  NOTHING WILL BE DONE WITH THAT CONTENT OF THE      ** PROMPT WHEN THE GO BUTTON IS CLICKED.      *      W$INPUT.PROMPT<1> = "MTD Sales Calcs"      W$INPUT.TYPE<1> = "TEXT"      W$INPUT.UDPOS<1> = 1      W$INPUT.DEFAULT<1> = SALES.STATUS      *      IF AR.REPORT.FILE <> '' THEN         W$INPUT.PROMPT<2> = "AR Calcs"         W$INPUT.TYPE<2> = "TEXT"         W$INPUT.UDPOS<2> = 2         W$INPUT.DEFAULT<2> = AR.STATUS         *         IF AP.REPORT.FILE <> '' THEN            W$INPUT.PROMPT<3> = "AP Calcs"            W$INPUT.TYPE<3> = 'TEXT'            W$INPUT.UDPOS<3> = 3            W$INPUT.DEFAULT<3> = AP.STATUS          END       END      ***      W$INPUT.PROMPT<4> = "Net Income Calcs"**      W$INPUT.TYPE<4> = 'TEXT'**      W$INPUT.UDPOS<4> = 4**      W$INPUT.DEFAULT<4> = NET.INCOME.STATUS      *      ERROR.MSG<-1>='Figures are currently updating.'      ERROR.MSG<-1>='Try again in a minute or two.'      GOTO DISPLAY.ERROR   END END*DASH.REC=''MMM.YYYY=OCONV(DATE(),'D4')[4,8]DASH.REC<1>=MMM.YYYYYYYY=FIELD(MMM.YYYY,' ',2)DASH.REC<2>=YYYYDASH.REC<9>=DASH.REC<1>DASH.REC<10>=YYYYDASH.REC<15>=OCONV(DATE(),'D2-')MTD.SALES=SUM(SALES.REC<2>); DASH.REC<3>=MTD.SALESMTD.COST.OF.SALES=SUM(SALES.REC<3>)GROSS.PROFIT=MTD.SALES-MTD.COST.OF.SALESDASH.REC<5>=GROSS.PROFITPERCENT=INT((GROSS.PROFIT*1000)/MTD.SALES + .5)DASH.REC<7>=PERCENT*** USE DASHBOARD.CLOSING.STATS TO GET YEAR TO DATE TOTALS*STACKED.1=''STACKED.2='SORT DASHBOARD.CLOSING.STATS WITH YYYY = "':YYYY:'" BY YYYY BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL COST.OF.SALE ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)MAX.ROWS=DCOUNT(REPORT,CHAR(254))YTD.SALES=0YTD.COST.OF.SALES=0FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      TEST.YYYY=TRIM(FIELD(ROW,'|',1))      IF TEST.YYYY = YYYY THEN         YTD.SALES=TRIM(FIELD(ROW,'|',2))         YTD.SALES=ICONV(YTD.SALES,'MD2')         YTD.COST.OF.SALES=TRIM(FIELD(ROW,'|',3))         YTD.COST.OF.SALES=ICONV(YTD.COST.OF.SALES,'MD2')       END    END NEXT ROW.NODASH.REC<4>=YTD.SALESGROSS.PROFIT=YTD.SALES-YTD.COST.OF.SALESIF NOT(YTD.SALES) THEN   MARGIN=0 END ELSE   MARGIN=INT(GROSS.PROFIT*1000 / YTD.SALES + .5) ENDDASH.REC<6>=GROSS.PROFITDASH.REC<8>=MARGIN*TEMP.AR.REC=AR.REC<1>:@AM:AR.REC<2>:@AM:AR.REC<3>:@AM:AR.REC<4>:@AM:AR.REC<5>SUM.AR.BALANCES=SUM(TEMP.AR.REC)DASH.REC<28>=SUM.AR.BALANCESIF SUM.AR.BALANCES THEN   DAYS.CURRENT=AR.REC<1>; DASH.REC<30>=DAYS.CURRENT; DASH.REC<31>=INT(DAYS.CURRENT*1000/SUM.AR.BALANCES + .5)   DAYS.1.30=AR.REC<2>; DASH.REC<16>=DAYS.1.30; DASH.REC<17>=INT(DAYS.1.30*1000/SUM.AR.BALANCES + .5)   DAYS.31.60=AR.REC<3>; DASH.REC<19>=DAYS.31.60; DASH.REC<20>=INT(DAYS.31.60*1000/SUM.AR.BALANCES + .5)   DAYS.61.90=AR.REC<4>; DASH.REC<22>=DAYS.61.90; DASH.REC<23>=INT(DAYS.61.90*1000/SUM.AR.BALANCES + .5)   DAYS.91=AR.REC<5>; DASH.REC<25>=DAYS.91; DASH.REC<26>=INT(DAYS.91*1000/SUM.AR.BALANCES + .5) ENDCONVERT CHAR(254) TO CHAR(253) IN TEMP.AR.RECAR.AMOUNTS=TEMP.AR.REC*SUM.AP.BALANCES=SUM(AP.REC)DASH.REC<29>=SUM.AP.BALANCESDAYS.CURRENT=AP.REC<1>; DASH.REC<32>=DAYS.CURRENTDAYS.1.30=AP.REC<2>; DASH.REC<18>=DAYS.1.30DAYS.31.60=AP.REC<3>; DASH.REC<21>=DAYS.31.60DAYS.61.90=AP.REC<4>; DASH.REC<24>=DAYS.61.90DAYS.91=AP.REC<5>; DASH.REC<27>=DAYS.91TEMP.AP.REC=AP.RECCONVERT CHAR(254) TO CHAR(253) IN TEMP.AP.RECAP.AMOUNTS=TEMP.AP.REC** DEFAULT CONVERSIONS TO $CONVS=''FOR I = 3 TO 32      CONVS<I>='$' NEXT I* CHANGE THOSE THAT AREN'TCONVS<7>='%'; CONVS<8>='%'CONVS<17>='%'; CONVS<20>='%'; CONVS<23>='%'; CONVS<26>='%'; CONVS<31>='%'CONVS<1>=''; CONVS<2>=''CONVS<9>=''; CONVS<10>=''CONVS<13>=''; CONVS<14>=''; CONVS<15>=''**W$PRINTABLE=1W$PDFABLE=1OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE RETURNBEGIN CASE   CASE AR.REPORT.FILE <> '' AND AP.REPORT.FILE <> '' AND GP.DICT.NAME <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD'   CASE GP.DICT.NAME <> '' AND AR.REPORT.FILE <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.GP.AR'   CASE GP.DICT.NAME <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.GP'   CASE AR.REPORT.FILE <> '' AND AP.REPORT.FILE <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.AR.AP'   CASE AR.REPORT.FILE <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.AR'   CASE 1      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES'END CASEREAD HTML FROM FILE.WEB.FORMS, WEB.FORM.NAME ELSE HTML=''***USER.ID=G$USERID*W$TITLE='  Portal Dashboard'; CALL PORTAL.SHOW.LAST.UPDATED('ALL')**WRITE HTML ON FILE.WEB.FORMS, 'TEST.HTML'*** DYNAMIC VARIABLES*FOR I = 1 TO 32   INSERT.FIELD=DASH.REC<I>   IF INSERT.FIELD = '' THEN INSERT.FIELD=I   CONV=CONVS<I>   BEGIN CASE      CASE CONV = ''; NULL      CASE CONV = '$'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD2,$')      CASE CONV = '%'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD1'):'%'      CASE 1; INSERT.FIELD=OCONV(INSERT.FIELD,CONV)   END CASE   IF INSERT.FIELD = '' THEN INSERT.FIELD='&nbsp;'   CALL SWAP(HTML,'~':I:'~',INSERT.FIELD) NEXT I   *W$TEXT.DATA=HTMLWRITE HTML ON FILE.WEB.FORMS, 'LAST.':WEB.FORM.NAMERETURN**DISPLAY.ERROR:*W$TYPE='HTML'MAX.LINES=DCOUNT(ERROR.MSG,CHAR(254))IF MAX.LINES > 1 THEN   TEMP.ERROR.MSG=ERROR.MSG   ERROR.MSG=''   FOR ERROR.LINE = 1 TO MAX.LINES      THIS.MSG=TEMP.ERROR.MSG<ERROR.LINE>      IF ERROR.MSG <> '' THEN ERROR.MSG:='<br>'      ERROR.MSG:=THIS.MSG    NEXT ERROR.LINE ENDW$HTML.DATA='<h3>':ERROR.MSG:'</h3>'RETURN*INITIATE.CALC.PHANTOM:*BEGIN CASE   CASE PLATFORM = 'D3' OR PLATFORM = 'JB'      EXECUTE "Z REFRESH.DASHBOARD.MTD.STATS ":TYPE.CALC CAPTURING DUMMY   CASE 1      EXECUTE "PHANTOM REFRESH.DASHBOARD.MTD.STATS ":TYPE.CALC CAPTURING DUMMYEND CASERETURN0007D8SUB.RUNTIME.ERRORS0c2SUBROUTINE SUB.RUNTIME.ERRORS** Modified by Peter Schellenbach of Zumasys 06-08-15*   QM uses errlog file in the QMSYS directory to log runtime*   errors - call SUB.GET.RUNTIME.ERRORS subroutine to get*   QM runtime error info.**INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "MVDB Runtime Errors"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN ;* Dont process, just provide title, type & width*IF WIDGET.USER.DATA(2) # "" THEN ACCTFILTER = WIDGET.USER.DATA(2) W$TITLE = "Runtime Errors (User/Account filter = ":ACCTFILTER:")"END ELSE IF G$SUBMITTED THEN  ACCTFILTER = ""  WIDGET.USER.DATA(2) = "ALL" END ELSE ;* It's empty, but only becuase nobody has specified a value  ACCTFILTER = @ACCOUNT  WIDGET.USER.DATA(2) = ACCTFILTER ENDENDIF WIDGET.USER.DATA(3) # "" THEN PROGFILTER = WIDGET.USER.DATA(3)END ELSE PROGFILTER = ""* Call runtime error subroutineRE.INFO = ''ERR.CNT = 100 ; * Max errors to returnCALL SUB.GET.RUNTIME.ERRORS(RE.INFO, ACCTFILTER, PROGFILTER, ERR.CNT, 1) ; * "is admin" is TRUE since D3 version never checksIF WIDGET.USER.DATA(1) = 'CLEAR' AND ERR.CNT > 0 THEN RE.INFO = '<h3><i>Clearing runtime errors not supported on QM.</i></h3>':CHAR(10):RE.INFOENDIF ERR.CNT THEN W$HTML.DATA = '<h3>1 - ':ERR.CNT:'</h3>' W$HTML.DATA := '<table><tr>' W$HTML.DATA := '<th>Date / Time</th><th>User</th><th>Error</th>' W$HTML.DATA := '</tr>' W$HTML.DATA := RE.INFOEND ELSE W$HTML.DATA = '<h3>No Errors</h3>'ENDW$HTML.DATA<-1> = '</table>'*W$LINK.LABEL<1> = "Clear Errors"W$LINK.LOCATION<1> = '1'W$LINK.UD.POS<1> = 1W$LINK.UD.VAL<1> = 'CLEAR'*W$LINK.LABEL<2> = "Print"W$LINK.LOCATION<2> = "C"W$LINK.ICON<2> = "print.png"W$LINK.URL<2> = "javascript:printThis(this);"*W$INPUT.PROMPT<1> = "User/Acct Filter"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 2W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(2)*W$INPUT.PROMPT<2> = "Program Filter"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 3W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(3)*RETURN0006B0SUB.SYS.ERRS0c2SUBROUTINE SUB.SYS.ERRS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Show system errors**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TABLE"W$TITLE = "Recent System Errors"W$WIDTH = 3*IF G$QUERYMODE = "1" THEN RETURN*OPEN '','SYSTEM-ERRORS' TO F.SYSTEM.ERRORS ELSE RETURN*XLINE = 'SSELECT SYSTEM-ERRORS BY-DSND DATE BY-DSND TIME'EXECUTE XLINE CAPTURING JUNK*W$TABLE.COL.LABELS = "Date":@VM:"Time":@VM:"Message":@VM:"Last TCL":@VM:"Pib / User":@VM:"Data"W$TABLE.COL.JUST = "right":@VM:"right"** User data 2 is the number of items to skip forward or backward. Calculate* the offset by adding this number to the current offset position in field 1.* Then clear out the skip fowrad/backward value.*WIDGET.USER.DATA(1) = WIDGET.USER.DATA(1) + WIDGET.USER.DATA(2)WIDGET.USER.DATA(2) = 0IF WIDGET.USER.DATA(1) < 0 THEN WIDGET.USER.DATA(1) = 0*IF WIDGET.USER.DATA(1) > 0 THEN  W$TITLE := " (":WIDGET.USER.DATA(1)+1:" - ":WIDGET.USER.DATA(1)+11:")"END*OFFSET = WIDGET.USER.DATA(1)FOR SKIPITEM = 1 TO OFFSET  READNEXT THROWAWAY ELSE EXITNEXT SKIPITEMFOR X = 1 TO 10  READNEXT ID ELSE EXIT  READ EREC FROM F.SYSTEM.ERRORS, ID THEN    W$TABLE.DATA<X,1> = OCONV( FIELD( ID,'*',1),'D2/')    W$TABLE.DATA<X,2> = OCONV( FIELD( ID,'*',2),'MTS')    W$TABLE.DATA<X,3> = EREC<4,1>    W$TABLE.DATA<X,4> = EREC<22,DCOUNT(EREC<22>,@VM)>    W$TABLE.DATA<X,5> = EREC<12,1>    W$TABLE.DATA<X,6> = EREC<5,1>  ENDNEXT X*W$LINK.LABEL<1,1> = "Prev 10"W$LINK.LABEL<1,2> = "Next 10"W$LINK.LOCATION<1,1> = "23"W$LINK.LOCATION<1,2> = "14"W$LINK.UD.POS<1,1> = 2W$LINK.UD.POS<1,2> = 2W$LINK.UD.VAL<1,1> = "-10"W$LINK.UD.VAL<1,2> = "10"*RETURN00022DUD.EXECUTE.STACKED.CMNDS0c2SUBROUTINE UD.EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,NUM.RETURNED,REPORT)*REPORT=''NUM.RETURNED=1LIST_VAR = 1IF STACKED.1 <> '' THEN   MDPERFORM STACKED.1 RTNLIST LIST_VAR RETURNING RETNO CAPTURING CAPT   IF INDEX(RETNO,'No data',1) OR INDEX(CAPT,'No data',1) THEN      NUM.RETURNED=0      RETURN    END   MDPERFORM STACKED.2 PASSLIST LIST_VAR CAPTURING REPORT END ELSE   MDPERFORM STACKED.2 CAPTURING REPORT ENDIF INDEX(REPORT,'No records',1) THEN   NUM.RETURNED=0 ENDCONVERT '$,' TO '' IN REPORTRETURNEND002557BUILD.SAMPLE.PORTAL.FILES0c2OPEN '','PORTAL.SALES' TO FI.SALES ELSE STOP 201,'PORTAL.SALES'OPEN '','PORTAL.AR' TO FI.AR ELSE STOP 201,'PORTAL.AR'OPEN '','PORTAL.AP' TO FI.AP ELSE STOP 201,'PORTAL.AP'READ SALES.1 FROM FI.SALES, 1 ELSE SALES.1=''READ AR.1 FROM FI.AR, 1 ELSE AR.1=''READ AP.1 FROM FI.AP, 1 ELSE AP.1=''IF SALES.1 <> '' AND AR.1 <> '' AND AP.1 <> '' THEN STOPOTODAY=OCONV(DATE(),'D4-')OYYYY=OTODAY[7,4]OMM=OTODAY[1,2]+0REPS=''REPS<-1>='GREG GRIFFIN'REPS<-1>='KELLEY JOHNSON'REPS<-1>='KEVIN PEPE'REPS<-1>='KIM GONZALEZ'REPS<-1>='MICHAEL HOUSE'REPS<-1>='MICHELLE BLACK'REPS<-1>='MITCH STREET'REPS<-1>='NATALIE MCFARLAND'REPS<-1>='PETE COX'REPS<-1>='PHIL CRAMER'REPS<-1>='ROBERT HUNT'REPS<-1>='STEVE SMITH'REPS<-1>='TAMMY HENDER'REPS<-1>='TIFFANEY MILLER'BRANCHES=''BRANCHES<-1>='CHICAGO'BRANCHES<-1>='DALLAS'BRANCHES<-1>='DENVER'BRANCHES<-1>='FLORIDA'BRANCHES<-1>='NEW YORK'BRANCHES<-1>='NORCAL'BRANCHES<-1>='SOCAL'BRANCHES<-1>='VEGAS'REGIONS=''REGIONS<-1>='CENTRAL'REGIONS<-1>='EAST'REGIONS<-1>='MOUNTAIN'REGIONS<-1>='WEST'EXECUTE "CLEAR-FILE DATA PORTAL.SALES" CAPTURING DUMMYJAN12016=ICONV('1-1-16','D')DATE.RANGE=DATE()-JAN12016FOR I = 1 TO 10000   SALES.REC=''   CLOSE.DATE=JAN12016 + RND(DATE.RANGE) + 1   SALES.REC<1>=CLOSE.DATE   RND.REP=RND(14)+1   IF RND.REP < 12 THEN      RND.PCT=((RND(10)+1)/10)      RND.REP=INT(RND.REP * RND.PCT + .5)      IF NOT(RND.REP) THEN RND.REP=1    END   REP=REPS<RND.REP>   SALES.REC<5>=REP   AMOUNT=RND(975000)+25000; * 250 TO 10000   SALES.REC<8>=AMOUNT   COST.PCT=RND(40) + 50; * 50 TO 90 PERCENT   COST.PCT=COST.PCT / 100   COST=INT(AMOUNT * COST.PCT + .5)   SALES.REC<9>=COST   RND.BRANCH=RND(8)+1   IF RND.BRANCH < 6 THEN      RND.PCT=((RND(10)+1)/10)      RND.BRANCH=INT(RND.BRANCH * RND.PCT + .5)      IF NOT(RND.BRANCH) THEN RND.BRANCH=1    END   BRANCH=BRANCHES<RND.BRANCH>   SALES.REC<13>=BRANCH   RND.REGION=RND(4)+1   IF RND.REGION < 4 THEN      RND.PCT=((RND(10)+1)/10)      RND.REGION=INT(RND.REGION * RND.PCT + .5)      IF NOT(RND.REGION) THEN RND.REGION=1    END   REGION=REGIONS<RND.REGION>   SALES.REC<14>=REGION   WRITE SALES.REC ON FI.SALES, I NEXT ICUSTS=''CUSTS<-1>="ABC Computers"CUSTS<-1>="ABC Electronics Corp"CUSTS<-1>="Ajax Computer Electronics"CUSTS<-1>="Alfreds Futterkiste"CUSTS<-1>="Ana Trujillo Emparedados y helados"CUSTS<-1>="Antonio Moreno Taqueria"CUSTS<-1>="Around the Horn"CUSTS<-1>="B'S Beverages"CUSTS<-1>="Bakers Goods"CUSTS<-1>="Berglunds snabbkop"CUSTS<-1>="Best Computer Company"CUSTS<-1>="Better Bytes"CUSTS<-1>="Better Computing"CUSTS<-1>="Better Connection"CUSTS<-1>="Bills Shoes & Gopeds"CUSTS<-1>="Bits and Bytes Inc"CUSTS<-1>="Blauer See Delikatessen"CUSTS<-1>="Blondel pere et fils"CUSTS<-1>="Bobs Used Cycles"CUSTS<-1>="Bon app"CUSTS<-1>="Bottom-Dollar Markets"CUSTS<-1>="Cactus Comidas para llevar"CUSTS<-1>="Centro comercial Moctezuma"CUSTS<-1>="Chop-suey Chinese"CUSTS<-1>="Classic Computers"CUSTS<-1>="Comp Data Inc."CUSTS<-1>="Comp Products"CUSTS<-1>="Computer Fancy"CUSTS<-1>="Computer Portables Inc."CUSTS<-1>="Computer Sitters"CUSTS<-1>="Computer Tech"CUSTS<-1>="Computer Tips"CUSTS<-1>="Computer Town"CUSTS<-1>="Computer Trainers"CUSTS<-1>="Computer Warehouse"CUSTS<-1>="Computers Etc."CUSTS<-1>="Computers Galore"CUSTS<-1>="Computers Inc.Systems"CUSTS<-1>="Computers N More"CUSTS<-1>="Computers R Us"CUSTS<-1>="Consolidated Holdings"CUSTS<-1>="Cyber Products"CUSTS<-1>="Data Bits"CUSTS<-1>="Data Comp"CUSTS<-1>="Data Net"CUSTS<-1>="Die Wandernde Kuh"CUSTS<-1>="Disk Products"CUSTS<-1>="Disks N More"CUSTS<-1>="Drachenblut Delikatessen"CUSTS<-1>="Du monde entier"CUSTS<-1>="Eastern Connection"CUSTS<-1>="Electronic Company"CUSTS<-1>="Ernst Handel"CUSTS<-1>="Familia Arquibaldo"CUSTS<-1>="FISSA Fabrica Inter. Salchichas S.A."CUSTS<-1>="Folies gourmandes"CUSTS<-1>="For Computers Inc."CUSTS<-1>="France restauration"CUSTS<-1>="Franchi S.p.A."CUSTS<-1>="Frankenversand"CUSTS<-1>="Furia Bacalhau e Frutos do Mar"CUSTS<-1>="Future Computers"CUSTS<-1>="Future In Computing"CUSTS<-1>="Galeria del gastronomo"CUSTS<-1>="Godos Cocina Tipica"CUSTS<-1>="Gourmet Lanchonetes"CUSTS<-1>="Great Lakes Food Market"CUSTS<-1>="GROSELLA-Restaurante"CUSTS<-1>="Hanari Carnes"CUSTS<-1>="HILARION-Abastos"CUSTS<-1>="Hungry Coyote Import Store"CUSTS<-1>="HUNGRY HOWIES PIZZA"CUSTS<-1>="Hungry Owl All-Night Grocers"CUSTS<-1>="Intercom Products"CUSTS<-1>="Island Trading"CUSTS<-1>="Joe'S Computers"CUSTS<-1>="Koniglich Essen"CUSTS<-1>="La corne d'abondance"CUSTS<-1>="Lazy K Kountry Store"CUSTS<-1>="Lehmanns Marktstand"CUSTS<-1>="Let'S Stop N Shop"CUSTS<-1>="LILA-Supermercado"CUSTS<-1>="LINO-Delicateses"CUSTS<-1>="Logical Computers"CUSTS<-1>="Lonesome Pine Restaurant"CUSTS<-1>="Longo Toyota"CUSTS<-1>="Magazzini Alimentari Riuniti"CUSTS<-1>="Memory Capturers"CUSTS<-1>="Memory Plus Inc."CUSTS<-1>="Modem Products"CUSTS<-1>="Morgenstern Gesundkost"CUSTS<-1>="Net Connect"CUSTS<-1>="North/South"CUSTS<-1>="Number One in Computing"CUSTS<-1>="Oceano Atlantico Ltda."CUSTS<-1>="Old World Delicatessen"CUSTS<-1>="Ones & Zeros Inc."CUSTS<-1>="Ottilies Kaseladen"CUSTS<-1>="Paris specialites"CUSTS<-1>="Pericles Comidas clasicas"CUSTS<-1>="Piccolo und mehr"CUSTS<-1>="Printer Products"CUSTS<-1>="Que Delicia"CUSTS<-1>="Queen Cozinha"CUSTS<-1>="QUICK-Stop"CUSTS<-1>="Rancho grande"CUSTS<-1>="Rattlesnake Canyon Grocery"CUSTS<-1>="Real Computers"CUSTS<-1>="Reggiani Caseifici"CUSTS<-1>="Ricardo Adocicados"CUSTS<-1>="Richter Supermarkt"CUSTS<-1>="Sante Gourmet"CUSTS<-1>="Save-a-lot Markets"CUSTS<-1>="Secure Computers"CUSTS<-1>="Seven Seas Imports"CUSTS<-1>="Software Inc"CUSTS<-1>="Specialites du monde"CUSTS<-1>="Split Rail Beer & Ale"CUSTS<-1>="Supremes delices"CUSTS<-1>="The Big Cheese"CUSTS<-1>="The Cracker Box"CUSTS<-1>="The Only Computers"CUSTS<-1>="Tortuga Restaurante"CUSTS<-1>="Tradicao Hipermercados"CUSTS<-1>="Trail'S Head Gourmet Provisioners"CUSTS<-1>="TRG"CUSTS<-1>="USA Computers"CUSTS<-1>="Victuailles en stock"CUSTS<-1>="Vins et alcools Chevalier"CUSTS<-1>="Wartian Herkku"CUSTS<-1>="Wellington Importadora"CUSTS<-1>="White Clover Markets"CUSTS<-1>="White House"CUSTS<-1>="Wilman Kala"CUSTS<-1>="Wolski  Zajazd"EXECUTE "CLEAR-FILE DATA PORTAL.AR" CAPTURING DUMMYFOR I = 1 TO 5000   AR.REC=""   CUST=CUSTS<RND(135)+1>   AR.REC<1>=CUST   PCT=RND(100)+1   IF PCT > 4 THEN      * PAID      QTR=RND(18)+1; * BASED ON DATE BEFORE 7-1-20      BEGIN CASE         CASE OYYYY > 2020; QTR+=2         CASE OMM >= 10; QTR+=2         CASE OMM >= 7;  QTR+=1      END CASE      BEGIN CASE         CASE QTR <= 4;   * 2016            BREAKS=71:@AM:87:@AM:93            BOY=ICONV("01-01-16","D")            QTR.IN.YEAR=QTR         CASE QTR <= 8;   * 2017            BREAKS=73:@AM:89:@AM:94            BOY=ICONV("01-01-17","D")            QTR.IN.YEAR=QTR-4         CASE QTR <= 12;   * 2018            BREAKS=77:@AM:89:@AM:94            BOY=ICONV("01-01-18","D")            QTR.IN.YEAR=QTR-8         CASE QTR <= 16;   * 2019            BREAKS=77:@AM:90:@AM:94            BOY=ICONV("01-01-19","D")            QTR.IN.YEAR=QTR-12         CASE 1;          * 2020            BREAKS=71:@AM:87:@AM:93            BOY=ICONV("01-01-20","D")            QTR.IN.YEAR=QTR-16      END CASE      BOQ=BOY + (QTR.IN.YEAR-1)*90      DATE.PAID=BOQ + RND(90) + 1      DAYS.IN.PERIOD=RND(30)+1      PCT=RND(100)      LOCATE PCT IN BREAKS BY "AR" SETTING CATEGORY ELSE NULL      MOS.BEFORE=CATEGORY-1      DUE.DATE=DATE.PAID - (MOS.BEFORE*30) - DAYS.IN.PERIOD      AR.REC<20>=DUE.DATE      AR.REC<8>=DATE.PAID      AR.REC<50>=0; * BALANCE      AMOUNT=RND(975000)+25000; * 250 TO 10000      AR.REC<6>=AMOUNT      WRITE AR.REC ON FI.AR, I    END ELSE      BREAKS=60:@AM:81:@AM:91:@AM:96      PCT=RND(100)+1      LOCATE PCT IN BREAKS BY "AR" SETTING CATEGORY ELSE NULL      DAY.IN.MONTH=RND(30)      BEGIN CASE         CASE CATEGORY = 1            * NOT YET DUE            DUE.DATE=DATE()+DAY.IN.MONTH         CASE CATEGORY = 2            * 1-30            DUE.DATE=DATE()-DAY.IN.MONTH         CASE CATEGORY = 3            * 31-60            DUE.DATE=DATE() - (30 + DAY.IN.MONTH)         CASE CATEGORY = 4            * 60-90            DUE.DATE=DATE() - (60 + DAY.IN.MONTH)         CASE 1            * 90+            DUE.DATE=DATE() - (90 + RND(120))      END CASE      AR.REC<20>=DUE.DATE      AR.REC<8>=''; * DATE PAID      AMOUNT=RND(975000)+25000; * 250 TO 10000      AR.REC<6>=AMOUNT      AR.REC<50>=AMOUNT; * BALANCE      WRITE AR.REC ON FI.AR, I    END NEXT IEXECUTE "CLEAR-FILE DATA PORTAL.AP" CAPTURING DUMMYFOR I = 1 TO 100   AP.REC=""   BREAKS=56:@AM:90:@AM:95:@AM:97   PCT=RND(100)+1   LOCATE PCT IN BREAKS BY "AR" SETTING CATEGORY ELSE NULL   DAY.IN.MONTH=RND(30)   BEGIN CASE      CASE CATEGORY = 1         * NOT YET DUE         DUE.DATE=DATE()+DAY.IN.MONTH      CASE CATEGORY = 2         * 1-30         DUE.DATE=DATE()-DAY.IN.MONTH      CASE CATEGORY = 3         * 31-60         DUE.DATE=DATE() - (30 + DAY.IN.MONTH)      CASE CATEGORY = 4         * 60-90         DUE.DATE=DATE() - (60 + DAY.IN.MONTH)      CASE 1         * 90+         DUE.DATE=DATE() - (90 + DAY.IN.MONTH)   END CASE   AP.REC<20>=DUE.DATE   AP.REC<8>=''; * DATE PAID   AMOUNT=RND(975000)+25000; * 250 TO 10000   AP.REC<6>=AMOUNT   AP.REC<50>=AMOUNT; * BALANCE   WRITE AP.REC ON FI.AP, I NEXT I000715SUB.DEMO.MAP.CANADA0c2SUBROUTINE SUB.DEMO.MAP.CANADA** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: US Map demonstration* 6-1-15 ZUMASYS CONVERT MAP.DATA ID DELIMETER FROM * TO #** Modified by Peter Schellenbach of Zumasys 06-08-15:*  Changed test of ENUM after EXECUTE to test SYSTEM(11) instead.**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Canadian Provinces by Alphabet"W$TYPE = "MAP:Canada"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'*W$CHART.OPTIONS<-1> = 'animation="0"'W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'W$CHART.OPTIONS<-1> = 'legendShadow="1"'W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'**6-1-15*EXECUTE \SSELECT MVDB.MAP.DATA = "CANADA*]" BY A1\ RETURNING ENUM CAPTURING ETXTEXECUTE \SSELECT MVDB.MAP.DATA = "CANADA#]" BY A1\ RETURNING ENUM CAPTURING ETXT; *6-1-15*PJS 06-08-15*IF ENUM[1,3]="404" THENIF SYSTEM(11) THEN ; *PJS 06-08-15* LOOP   READNEXT ID ELSE ID="\\EOF" UNTIL ID="\\EOF" DO   READ I FROM F.MVDB.MAP.DATA,ID THEN*6-1-15*     W$MAP.IDS<1,-1> = FIELD(ID,'*',2)     W$MAP.IDS<1,-1> = FIELD(ID,'#',2); *6-1-15*     W$MAP.VALUES<1,-1> = (SEQ(I<1>[1,1]) - (SEQ('A')-1))     W$MAP.VALUE.TOOLTEXT<1,-1> := I<2>:' (':I<1>:')'   END REPEATEND*W$MAP.RANGE.NAME<1,1> = "Early in Alphabet"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "10"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Middle of Alphabet"W$MAP.RANGE.LOW<1,2> = "10"W$MAP.RANGE.HIGH<1,2> = "18"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Late in Alphabet"W$MAP.RANGE.LOW<1,3> = "18"W$MAP.RANGE.HIGH<1,3> = "27"W$MAP.RANGE.COLOR<1,3> = "RED"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN00029ESUB.DEMO.DNUT0c2SUBROUTINE SUB.DEMO.DNUT** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Doughnut Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Defects by Reason"W$TYPE = "FCDOUGHNUT2D"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*CATEG = ""CATEG<1> = 20CATEG<2> = 30CATEG<3> = 20CATEG<4> = 9*CATEG.NAMES = ''CATEG.NAMES<1> = "Choices"CATEG.NAMES<2> = "Material"CATEG.NAMES<3> = "Errors"CATEG.NAMES<4> = "Shipping"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$PIE.LABELS<1,N> = CATEG.NAMES<N>  W$PIE.VALUES<1,N> = CATEG<N>NEXT NW$PIE.CAPTION = "Defects"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN00250AREFRESH.DASHBOARD.CLOSING.STATS0c2HAVE.AR=1OPEN '','AR' TO FI.AR ELSE HAVE.AR=0IF HAVE.AR THEN   AR.CNTR=0   LOOP      AR.CNTR+=1      READ BULK.AR FROM FI.AR, 'AR.':AR.CNTR ELSE BULK.AR=''      MAX.ROWS=DCOUNT(BULK.AR,CHAR(254))   UNTIL NOT(MAX.ROWS) DOCRT 'AR.':AR.CNTR      DELETE FI.AR, 'AR.':AR.CNTR      AR.REC=''      AR.ID=''      REC.ROW=0      BULK.AR=OCONV(BULK.AR,'MCU')      FOR ROW.NO = 1 TO MAX.ROWS         ROW=BULK.AR<ROW.NO>         IF ROW[1,2] = '%%' THEN            IF AR.REC <> '' THEN               WRITE AR.REC ON FI.AR, AR.ID             END            AR.REC=''            AR.ID=FIELD(ROW,'%',3)            REC.ROW=0          END ELSE            REC.ROW+=1            AR.REC<REC.ROW>=ROW          END       NEXT ROW.NO      IF AR.REC <> '' THEN         WRITE AR.REC ON FI.AR, AR.ID       END   REPEAT ENDHAVE.AP=1OPEN '','AP' TO FI.AP ELSE HAVE.AP=0IF HAVE.AP THEN   AP.CNTR=0   LOOP      AP.CNTR+=1      READ BULK.AP FROM FI.AP, 'AP.':AP.CNTR ELSE BULK.AP=''      MAX.ROWS=DCOUNT(BULK.AP,CHAR(254))   UNTIL NOT(MAX.ROWS) DOCRT 'AP.':AP.CNTR      DELETE FI.AP, 'AP.':AP.CNTR      AP.REC=''      AP.ID=''      REC.ROW=0      BULK.AP=OCONV(BULK.AP,'MCU')      FOR ROW.NO = 1 TO MAX.ROWS         ROW=BULK.AP<ROW.NO>         IF ROW[1,2] = '%%' THEN            IF AP.REC <> '' THEN               WRITE AP.REC ON FI.AP, AP.ID             END            AP.REC=''            AP.ID=FIELD(ROW,'%',3)            REC.ROW=0          END ELSE            REC.ROW+=1            AP.REC<REC.ROW>=ROW          END       NEXT ROW.NO      IF AP.REC <> '' THEN         WRITE AP.REC ON FI.AP, AP.ID       END   REPEAT ENDHAVE.SALES=1OPEN '','SALES' TO FI.SALES ELSE HAVE.SALES=0IF HAVE.SALES THEN   SALES.CNTR=0   LOOP      SALES.CNTR+=1      READ BULK.SALES FROM FI.SALES, 'SALES.':SALES.CNTR ELSE BULK.SALES=''      MAX.ROWS=DCOUNT(BULK.SALES,CHAR(254))   UNTIL NOT(MAX.ROWS) DO      DELETE FI.SALES, 'SALES.':SALES.CNTR      SALES.REC=''      SALES.ID=''      REC.ROW=0      BULK.SALES=OCONV(BULK.SALES,'MCU')      FOR ROW.NO = 1 TO MAX.ROWS         ROW=BULK.SALES<ROW.NO>         IF ROW[1,2] = '%%' THEN            IF SALES.REC <> '' THEN               WRITE SALES.REC ON FI.SALES, SALES.ID             END            SALES.REC=''            SALES.ID=FIELD(ROW,'%',3)            REC.ROW=0          END ELSE            REC.ROW+=1            SALES.REC<REC.ROW>=ROW          END       NEXT ROW.NO      IF SALES.REC <> '' THEN         WRITE SALES.REC ON FI.SALES, SALES.ID       END   REPEAT ENDEXECUTE "TERM 132" CAPTURING DUMMYOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE NULLERRORS=''OPEN '','DASHBOARD.CLOSING.STATS' TO FI.CLOSING.STATS ELSE ERRORS<-1>='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'HAVE.DICT.STATS=1OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.CLOSING.STATS ELSE HAVE.DICT.STATS=0; ERRORS<-1>='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE NULLIF ERRORS <> '' THEN   WRITE ERRORS ON FI.MVDB.CONTROL, 'CLOSING.STATS.ERRORS'   IF HAVE.DICT.STATS THEN      WRITE 'CLOSING.STATS.ERRORS' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'    END   STOP ENDREAD PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'END CASE*DIM SETUP.PARAMS(30)MATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' ENDEQUATE ACCOUNT TO SETUP.PARAMS(1)EQUATE REPORT.FILE TO SETUP.PARAMS(2)EQUATE SALE.DATE.DICT TO SETUP.PARAMS(3)EQUATE SALE.MONTH.DICT TO SETUP.PARAMS(4)EQUATE SALE.YEAR.DICT TO SETUP.PARAMS(5)EQUATE SALE.AMOUNT.DICT TO SETUP.PARAMS(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO SETUP.PARAMS(7)EQUATE SALESMAN.DICT TO SETUP.PARAMS(8)EQUATE BRANCH.DICT TO SETUP.PARAMS(9)EQUATE REGION.DICT TO SETUP.PARAMS(10)EQUATE SALE.DATE.AMC TO SETUP.PARAMS(11)EQUATE SALE.AMOUNT.AMC TO SETUP.PARAMS(12)EQUATE SALE.AMOUNT.CONV TO SETUP.PARAMS(13)EQUATE SALE.AMOUNT.COOR TO SETUP.PARAMS(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO SETUP.PARAMS(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO SETUP.PARAMS(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO SETUP.PARAMS(17)EQUATE SALESMAN.AMC TO SETUP.PARAMS(18)EQUATE SALESMAN.TFILE TO SETUP.PARAMS(19)EQUATE BRANCH.AMC TO SETUP.PARAMS(20)EQUATE BRANCH.TFILE TO SETUP.PARAMS(21)EQUATE REGION.AMC TO SETUP.PARAMS(22)EQUATE REGION.TFILE TO SETUP.PARAMS(23)***FILE.PATH=ACCOUNT:',':REPORT.FILE:','FILE.PATH='DASHBOARD.SALES.FILE'*WRITE 'UPDATING' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'ODATE=OCONV(DATE(),'D4-')YYYY=ODATE[7,4]FIRST.YYYY=YYYY-4CMND='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YYYY:'"'EXECUTE CMND CAPTURING DUMMYSYSTEM.11=0LOOP   READNEXT DCS.ID ELSE DCS.ID='DONE'UNTIL DCS.ID = 'DONE' DO   SYSTEM.11=1   DELETE FI.CLOSING.STATS, DCS.IDREPEATIF SYSTEM.11 THEN   IF PLATFORM = 'D3' THEN      READV INDEX.DEFS FROM FI.DICT.CLOSING.STATS, 'DASHBOARD.CLOSING.STATS', 8 ELSE INDEX.DEFS=''      IF NOT(INDEX(INDEX.DEFS,'(G*1)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G*1)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G2*1)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G2*1)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G*2)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G*2)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G1*2)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G1*2)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G1*1)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G1*1)" CAPTURING DUMMY         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G3*1)" CAPTURING DUMMY         EXECUTE 'CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G3*1):"*":0(G1*1)' CAPTURING DUMMY       END    END ELSE      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS SALESMAN" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS BRANCH" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS SALESMAN*YYYYMM" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS YYYYMM*BRANCH" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS YYYYMM" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS REGION" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS REGION*YYYYMM" CAPTURING DUMMY    END END*FOR YEAR = FIRST.YYYY TO YYYY    WRITE 'UPDATING ':YEAR ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'   *  ** DO FOR EACH YEAR SEPARATELY TO LIMIT SIZE OF LIST RETURNING   *   STACKED.1='SELECT ':FILE.PATH:' WITH ':SALE.YEAR.DICT:' = "':YEAR:'"'**WRITE DUMMY ON FI.DICT.CLOSING.STATS, '*124.SELECT'   STACKED.2='SORT ':FILE.PATH:' WITH ':SALESMAN.DICT:' # "" BY ':SALE.MONTH.DICT:' BY ':SALESMAN.DICT:' ID-SUPP ':SALE.MONTH.DICT:' PIPE ':SALESMAN.DICT:' PIPE ':SALE.AMOUNT.DICT:' PIPE ':COST.OF.SALE.AMOUNT.DICT   STACKED.2:=' PIPE ':BRANCH.DICT:' PIPE ':REGION.DICT   STACKED.2:=' HDR-SUPP COL-HDR-SUPP NOPAGE'   CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)   IF SYSTEM.11 THEN      MAX.ROWS=DCOUNT(REPORT,CHAR(254))      STATS.IDS=''      STATS.AMTS=''      STATS.COS.AMTS=''      STATS.IDS.CNTR=0      FOR ROW.NO = 1 TO MAX.ROWS         ROW=REPORT<ROW.NO>         IF INDEX(ROW,'|',1) THEN            MONTH=TRIM(FIELD(ROW,'|',1))+0            IF MONTH < 10 THEN               YYYYMM=YEAR:'0':MONTH             END ELSE YYYYMM=YEAR:MONTH            REP=TRIM(FIELD(ROW,'|',2))            AMOUNT=TRIM(FIELD(ROW,'|',3))            CONVERT '$,' TO '' IN AMOUNT            AMOUNT=ICONV(AMOUNT,'MD2')            IF NOT(NUM(AMOUNT)) THEN AMOUNT=0            COST.OF.SALE.AMOUNT=TRIM(FIELD(ROW,'|',4))            CONVERT '$,' TO '' IN COST.OF.SALE.AMOUNT            COST.OF.SALE.AMOUNT=ICONV(COST.OF.SALE.AMOUNT,'MD2')            IF NOT(NUM(COST.OF.SALE.AMOUNT)) THEN COST.OF.SALE.AMOUNT=0            IF AMOUNT OR COST.OF.SALE.AMOUNT THEN               BRANCH=TRIM(FIELD(ROW,'|',5))               REGION=TRIM(FIELD(ROW,'|',6))               STATS.ID=REP:'*':YYYYMM:'*':BRANCH:'*':REGION               LOCATE STATS.ID IN STATS.IDS SETTING STATS.PNTR ELSE                  STATS.IDS.CNTR+=1                  STATS.PNTR=STATS.IDS.CNTR                  STATS.IDS<STATS.PNTR>=STATS.ID                END               STATS.AMTS<STATS.PNTR>+=AMOUNT               STATS.COS.AMTS<STATS.PNTR>+=COST.OF.SALE.AMOUNT             END          END       NEXT ROW.NO      MAX.STATS.IDS=DCOUNT(STATS.IDS,CHAR(254))      FOR ID.CNTR = 1 TO MAX.STATS.IDS         AMOUNT=STATS.AMTS<ID.CNTR>         COST.OF.SALE.AMOUNT=STATS.COS.AMTS<ID.CNTR>         IF AMOUNT > 0 OR COST.OF.SALE.AMOUNT THEN            WRITE AMOUNT:CHAR(254):COST.OF.SALE.AMOUNT ON FI.CLOSING.STATS, STATS.IDS<ID.CNTR>          END       NEXT ID.CNTR    END NEXT YEARTIME.STAMP=TIME()TIME.STAMP=FIELD(TIME.STAMP,'.',1)TIME.STAMP=STR('0',5-LEN(TIME.STAMP)):TIME.STAMPWRITE DATE():TIME.STAMP ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'WRITE DATE():TIME.STAMP ON FI.DICT.CLOSING.STATS, '*LAST.UPDATED'END0002FASUB.PORTAL.REPORTS.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.REPORTS.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Portal Reports Documentation"W$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here*OPEN '','WEB.FORMS' TO FI.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FI.WEB.FORMS, 'PORTAL.REPORT.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000667SUB.FREE0c2SUBROUTINE SUB.FREE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Display disk usage*INCLUDE WBPD MVDB.INCLUDE*IF WIDGET.USER.DATA(1) = "TEXT" THEN  W$TYPE = "TEXT"  W$PRINTABLE = 1END ELSE  W$TYPE = "FC3DPIE"ENDW$TITLE = "D3 Free Space"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "TEXT" THEN  W$TITLE := ' (Text Display)'  EXECUTE "FREE" CAPTURING OUTPUT  W$TEXT.DATA = OUTPUTEND ELSE  W$TITLE := ' (Chart Display)'  EXECUTE "WHAT (LSW" CAPTURING WHAT  ATTR = DCOUNT(WHAT,@AM)  LOOP WHILE WHAT<ATTR> = "" DO ATTR -= 1 REPEAT  *  WHAT = TRIM(WHAT<ATTR>)  FRAMESIZE = FIELD(WHAT, ' ', 8)  MAXFID = FIELD( WHAT, ' ', 6 )  SYSBASE = FIELD( WHAT, ' ', 4 )  SYS.BYTE = SYSBASE * FRAMESIZE  SYS.FRAME = SYS.BYTE/FRAMESIZE  AVAIL.FRAME = FIELD( WHAT, ' ', 7 )  USED.FRAME = (MAXFID-SYSBASE)-AVAIL.FRAME  *  MAXBYTE = MAXFID * FRAMESIZE  MAXMB = ICONV(MAXBYTE/1000000,"MD0")  SYS.MB = SYS.BYTE/1000000  USED.BYTE = USED.FRAME * FRAMESIZE  USED.MB = USED.BYTE/1000000  AVAIL.BYTE = AVAIL.FRAME * FRAMESIZE  AVAIL.MB = AVAIL.BYTE/1000000  *  W$PIE.LABELS<1,1> = "Used (":OCONV(SYS.MB+USED.MB,'MD0,'):")"  W$PIE.LABELS<1,2> = "Available (":OCONV(AVAIL.MB,'MD0,'):")"  *  W$PIE.VALUES<1,1> = SYS.MB+USED.MB  W$PIE.VALUES<1,2> = AVAIL.MB  *  W$PIE.CAPTION = "D3 Free Space"END** Set up links*W$LINK.LABEL<1,1> = "Pie"W$LINK.LABEL<1,2> = "Text"W$LINK.LOCATION<1,1> = "2"W$LINK.LOCATION<1,2> = "2"W$LINK.UD.POS<1,1> = 1W$LINK.UD.POS<1,2> = 1W$LINK.UD.VAL<1,1> = "FC3DPIE"W$LINK.UD.VAL<1,2> = "TEXT"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN	0002FESUB.PORTAL.RUN.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.RUN.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Running the Portal Dashboard Reports"W$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here*OPEN '','WEB.FORMS' TO FI.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FI.WEB.FORMS, 'PORTAL.REPORT.RUN.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000925SUB.DEMO.BULLETXX0c2    SUBROUTINE SUB.DEMO.BULLETXX* Changed by PORTBAS -> SUBROUTINE SUB.DEMO.BULLET* @(#) SUB.DEMO.BULLETXX Ported to jBASE 17:55:31  08 JUL 2015** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Bullet widget demo**#MAKE# RL $OPTIONS D3    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Bullet Chart Demo - Sales Volume"    W$TYPE = "VBULLET"    W$WIDTH = 2*    IF G$QUERYMODE THEN RETURN*    IF WIDGET.USER.DATA(1) # "" THEN        W$TYPE = WIDGET.USER.DATA(1)    END ELSE WIDGET.USER.DATA(1) = "VBULLET"    IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1    PALETTE = WIDGET.USER.DATA(2)*    W$FW.LOWER.LIMIT = 0    W$FW.UPPER.LIMIT = 800000*    W$FW.COLOR.RANGE<1,1> = 0    W$FW.COLOR.RANGE<2,1> = 400000    W$FW.COLOR.RANGE<3,1> = "RED"*    W$FW.COLOR.RANGE<1,2> = 400000    W$FW.COLOR.RANGE<2,2> = 650000    W$FW.COLOR.RANGE<3,2> = "YELLOW"*    W$FW.COLOR.RANGE<1,3> = 650000    W$FW.COLOR.RANGE<2,3> = 800000    W$FW.COLOR.RANGE<3,3> = "GREEN"*    W$FW.METER.VALUE = 725000    W$FW.METER.TARGET = 775000*    W$FW.CAPTION = "July Sales"    W$FW.SUBCAPTION = "Billings"    W$FW.CHART.PALETTE = PALETTE*    W$FW.NUMBER.PREFIX = "$"    W$FW.NUMBER.SUFFIX = ""*    W$FW.TICKMARKS<1> = 1     ;* Display tickmarks    W$FW.TICKMARKS<2> = 1     ;* Display values by tickmarks    W$FW.TICKMARKS<3> = "B"   ;* Show tickmarks below the graph    W$FW.TICKMARKS<4> = ""    ;* Let it calculate this    W$FW.TICKMARKS<5> = 4     ;* 4 minor tickmarks between the major ones**W$CHART.OPTIONS = "paletteThemeColor='#a2287a'"*    W$FW.DD.WIDGET<1,1> = "Drilldown Demo"    W$FW.DD.UD.POS<1,1,1> = 1    W$FW.DD.UD.VAL<1,1,1> = W$FW.METER.VALUE    W$FW.DD.UD.POS<1,1,2> = 2    W$FW.DD.UD.VAL<1,1,2> = WIDGET.USER.DATA(1)*    W$INPUT.PROMPT = "Bullet Chart Style"    W$INPUT.TYPE = "SELECT"    W$INPUT.SELOPTS = "Horizontal":@VM:"Vertical"    W$INPUT.SELVALS = "HBULLET":@VM:"VBULLET"    W$INPUT.UDPOS = 1    W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*    W$INPUT.PROMPT<2> = "Palette"    W$INPUT.TYPE<2> = "SELECT"    W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"    W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"    W$INPUT.UDPOS<2> = 2    W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*    INCLUDE WBPD SOURCE.VIEW.ICON*    RETURN000478SUB.DEMO.SS.LINE0c2SUBROUTINE SUB.DEMO.SS.LINE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Single Series Line Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Monthly Sales Summary"W$TYPE = "FCLINE"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*W$BAR.LABELS = "Sales (USD)"W$BAR.CAPTION = "Monthly Sales (USD)"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Sales (USD)"*SALES = ""SALES<1> = "28452536"SALES<2> = "31208425"SALES<3> = "30245519"SALES<4> = "40425111"SALES<5> = "36515188"SALES<6> = "39144100"SALES<7> = "41655215"SALES<8> = "36615152"SALES<9> = "43944161"SALES<10> = "42251594"SALES<11> = "48833151"SALES<12> = "50122415"*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = OCONV(SALES<N>,'MD02')*  W$BAR.XLABELS<1,N> = OCONV(ICONV(N:"/1",'D'),'DMA')[1,1]  W$BAR.XLABELS<1,N> = OCONV(N*30-15,'DMA')[1,3]NEXT N*W$BAR.TREND.BEG = OCONV(SALES<1>,'MD02')W$BAR.TREND.END = OCONV(SALES<12>,'MD02')W$BAR.TREND.OPTS = "thickness='2' displayValue='Trend'"W$CHART.OPTIONS<-1> = "showValues='0'"W$CHART.OPTIONS<-1> = "animation='1'"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0020BFBUILD.DEMO.FINANCIAL.PICTURE0c2SUBROUTINE BUILD.DEMO.FINANCIAL.PICTURE(YYYY,TODAY,LAST.EOM)OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''REC<1>=YYYYREC<2>=YYYY-1REC<3>=YYYY-1LAST.THREE=YYYY-2:CHAR(253):YYYY-1:CHAR(253):YYYY*OPEN '','MVDB.CONTROL' TO FILE.SALES ELSE STOP 201,'SALES'READ THIS.YEAR.SALES FROM FILE.SALES, 'MONTHLY.':YYYY ELSE THIS.YEAR.SALES=''READ LAST.YEAR.SALES FROM FILE.SALES, 'MONTHLY.':(YYYY-1) ELSE LAST.YEAR.SALES=''READ PREV.YEAR.SALES FROM FILE.SALES, 'MONTHLY.':(YYYY-2) ELSE PREV.YEAR.SALES=''READ PREV.YEAR.GPS FROM FILE.SALES, 'MONTHLY.GPS.':(YYYY-2) ELSE SALES.2.YEARS.AGO=''READ THIS.YEAR.GPS FROM FILE.SALES, 'MONTHLY.GPS.':YYYY ELSE THIS.YEAR.GPS=''READ LAST.YEAR.GPS FROM FILE.SALES, 'MONTHLY.GPS.':(YYYY-1) ELSE LAST.YEAR.GPS=''READ THIS.YEAR.PARTS FROM FILE.SALES, 'MONTHLY.PARTS.':YYYY ELSE THIS.YEAR.PARTS=''READ LAST.YEAR.PARTS FROM FILE.SALES, 'MONTHLY.PARTS.':(YYYY-1) ELSE LAST.YEAR.PARTS=''READ THIS.YEAR.SERVICES FROM FILE.SALES, 'MONTHLY.SERVICES.':YYYY ELSE THIS.YEAR.SERVICES=''READ LAST.YEAR.SERVICES FROM FILE.SALES, 'MONTHLY.SERVICES.':(YYYY-1) ELSE LAST.YEAR.SERVICES=''FY.LAST=SUM(LAST.YEAR.SALES)REC<7>=FY.LASTFY.PARTS=SUM(LAST.YEAR.PARTS)REC<18>=FY.PARTSFY.SERVICES=SUM(LAST.YEAR.SERVICES)REC<25>=FY.SERVICESLAST.MONTH.NO=OCONV(LAST.EOM,'D2-')[1,2]+0YTD.THIS=0YTD.LAST=0YTD.PREV=0GPS.THIS=0GPS.LAST=0GPS.PREV=0PARTS.THIS=0PARTS.LAST=0SERVICES.THIS=0SERVICES.LAST=0THIS.YEAR.MONTHLY.SALES=''THIS.YEAR.MONTHLY.GPS=''FOR MO.NO = 1 TO LAST.MONTH.NO   YTD.THIS+=THIS.YEAR.SALES<MO.NO>   THIS.YEAR.MONTHLY.SALES<1,1,MO.NO>=THIS.YEAR.SALES<MO.NO>   YTD.LAST+=LAST.YEAR.SALES<MO.NO>   YTD.PREV+=PREV.YEAR.SALES<MO.NO>   GPS.THIS+=THIS.YEAR.GPS<MO.NO>   THIS.YEAR.MONTHLY.GPS<1,1,MO.NO>=THIS.YEAR.GPS<MO.NO>   GPS.LAST+=LAST.YEAR.GPS<MO.NO>   GPS.PREV+=PREV.YEAR.GPS<MO.NO>   PARTS.THIS+=THIS.YEAR.PARTS<MO.NO>   PARTS.LAST+=LAST.YEAR.PARTS<MO.NO>   SERVICES.THIS+=THIS.YEAR.SERVICES<MO.NO>   SERVICES.LAST+=LAST.YEAR.SERVICES<MO.NO> NEXT MO.NOREC<67>=LAST.THREEREC<68,3>=THIS.YEAR.MONTHLY.SALESREC<69,3>=THIS.YEAR.MONTHLY.GPSREC<36>=YTD.PREVREC<37>=GPS.PREVCONVERT CHAR(254) TO CHAR(252) IN PREV.YEAR.SALESREC<68,1>=PREV.YEAR.SALESCONVERT CHAR(254) TO CHAR(252) IN PREV.YEAR.GPSREC<69,1>=PREV.YEAR.GPSCONVERT CHAR(254) TO CHAR(252) IN LAST.YEAR.SALESREC<68,2>=LAST.YEAR.SALESCONVERT CHAR(254) TO CHAR(252) IN LAST.YEAR.GPSREC<69,2>=LAST.YEAR.GPSLAST.FY.GPS=SUM(LAST.YEAR.GPS)REC<4>=YTD.THISREC<5>=YTD.LASTDELTA.SALES=YTD.THIS-YTD.LASTDELTA.PCT=(DELTA.SALES*100)/YTD.LASTREC<6>=DELTA.PCTREC<8>=GPS.THISREC<9>=GPS.LASTDELTA.GPS=GPS.THIS-GPS.LASTDELTA.PCT=(DELTA.GPS*100)/GPS.LASTREC<10>=DELTA.PCTREC<11>=LAST.FY.GPSTHIS.GPS.PCT=INT(GPS.THIS * 1000 / YTD.THIS + .5)REC<12>=THIS.GPS.PCTLAST.GPS.PCT=INT(GPS.LAST * 1000 / YTD.LAST + .5)PREV.GPS.PCT=INT(GPS.PREV * 1000 / YTD.PREV + .5)REC<13>=LAST.GPS.PCTFY.LAST.GPS.PCT=INT(LAST.FY.GPS * 1000 / FY.LAST + .5)REC<14>=FY.LAST.GPS.PCTREC<15>=PARTS.THISREC<22>=SERVICES.THISREC<16>=PARTS.LASTREC<23>=SERVICES.LASTDELTA.PARTS=PARTS.THIS-PARTS.LASTDELTA.PARTS.PCT=(DELTA.PARTS*100)/PARTS.LASTREC<17>=DELTA.PARTS.PCTDELTA.SERVICES=SERVICES.THIS-SERVICES.LASTDELTA.SERVICES.PCT=(DELTA.SERVICES*100)/SERVICES.LASTREC<24>=DELTA.SERVICES.PCTTHIS.PARTS.PCT=INT(PARTS.THIS * 1000 / YTD.THIS + .5)REC<19>=THIS.PARTS.PCTLAST.PARTS.PCT=INT(PARTS.LAST * 1000 / YTD.LAST + .5)REC<20>=LAST.PARTS.PCTFY.PARTS.PCT=INT(FY.PARTS * 1000 / FY.LAST + .5)REC<21>=FY.PARTS.PCTTHIS.SERVICES.PCT=INT(SERVICES.THIS * 1000 / YTD.THIS + .5)REC<26>=THIS.SERVICES.PCTLAST.SERVICES.PCT=INT(SERVICES.LAST * 1000 / YTD.LAST + .5)REC<27>=LAST.SERVICES.PCTFY.SERVICES.PCT=INT(FY.SERVICES * 1000 / FY.LAST + .5)REC<28>=FY.SERVICES.PCTREC<29>=YYYYREC<30>=OCONV(LAST.EOM,'D2/')REC<31>=YYYY-1REC<32>=YYYY-2*** DETERMINE PCT OF PARTS FOR PREVIOUS YEAR BETWEEN 40.0% AND 60.0%*DELTA=RND(200);  * -10.0 TO 10.0PREV.PART.PCT=500+(DELTA-100)PREV.PART.AMT=INT(YTD.PREV * PREV.PART.PCT/1000 + .5)PREV.SERVICE.AMT=YTD.PREV-PREV.PART.AMTPREV.SERVICE.PCT=1000-PREV.PART.PCT*** MARGINS, PARTS, AND SERVICES FOR DRILLDOWNS*REC<38>=LAST.THREEYEARS=LAST.THREEMAX.YEARS=DCOUNT(YEARS,CHAR(253))REC<39>=PREV.GPS.PCT:CHAR(253):LAST.GPS.PCT:CHAR(253):THIS.GPS.PCTREC<40>=PREV.PART.AMT:CHAR(253):PARTS.LAST:CHAR(253):PARTS.THISREC<41>=PREV.PART.PCT:CHAR(253):LAST.PARTS.PCT:CHAR(253):THIS.PARTS.PCTREC<42>=PREV.SERVICE.AMT:CHAR(253):SERVICES.LAST:CHAR(253):SERVICES.THISREC<43>=PREV.SERVICE.PCT:CHAR(253):LAST.SERVICES.PCT:CHAR(253):THIS.SERVICES.PCT*** NET INCOME 10% OF SALES*REC<33>=INT(GPS.THIS * .1 + .5)REC<34>=INT(LAST.FY.GPS * .1 + .5)REC<35>=INT(SUM(PREV.YEAR.GPS) * .1 + .5)*** HARD CODE DAYS TO PAY*REC<44>=35REC<45>=39REC<46>=41REC<54>=65:CHAR(253):20:CHAR(253):10:CHAR(253):5REC<55>=63:CHAR(253):21:CHAR(253):10:CHAR(253):6REC<56>=64:CHAR(253):19:CHAR(253):8:CHAR(253):9*** BUILD REP TOTALS*REPS='John,Katherine,Chris,Carrie,Sally,Jan,Bart,Linus,Max'CONVERT ',' TO CHAR(253) IN REPSMAX.REPS=DCOUNT(REPS,CHAR(253))REC<47>=REPSDEVIATION=35;  * 35% DEVIATIONMOS.IN.YEAR=''FOR YEAR.CNTR = 1 TO MAX.YEARS   YEAR.AMTS=REC<68,YEAR.CNTR>   MOS.IN.YEAR<1,YEAR.CNTR>=DCOUNT(YEAR.AMTS,CHAR(252))   ANN.SALES.AMT=SUM(YEAR.AMTS)   ANN.GP.AMT=SUM(REC<69,YEAR.CNTR>)   GP.FACTOR=ANN.GP.AMT/ANN.SALES.AMT   NUM.ITEMS=MAX.REPS   TOT.SCAT.AMT=ANN.SALES.AMT   GOSUB SCATTER.VALUES   FOR REP.CNTR = 1 TO MAX.REPS      REP.SALES.AMT=RETURN.AMOUNTS<1,1,REP.CNTR>      REC<48,REP.CNTR,YEAR.CNTR>=REP.SALES.AMT      REP.GP.AMT=INT(REP.SALES.AMT * GP.FACTOR + .5)      REC<49,REP.CNTR,YEAR.CNTR>=REP.GP.AMT    NEXT REP.CNTR NEXT YEAR.CNTR*** CREATE MONTHLIES FOR EACH REP AND SAVE IN SALES.YYYY*DEVIATION=20FOR YEAR.CNTR = 1 TO MAX.YEARS   YEAR=YEARS<1,YEAR.CNTR>   NUM.ITEMS=MOS.IN.YEAR<1,YEAR.CNTR>   SALES.REC=''   GPS.REC=''   FOR REP.CNTR = 1 TO MAX.REPS      REP=REPS<1,REP.CNTR>      SALES.REC<1,REP.CNTR>=REP      GPS.REC<1,REP.CNTR>=REP      TOT.SCAT.AMT=REC<48,REP.CNTR,YEAR.CNTR>      GOSUB SCATTER.VALUES      SALES.REC<2,REP.CNTR>=RETURN.AMOUNTS      TOT.SCAT.AMT=REC<49,REP.CNTR,YEAR.CNTR>      GOSUB SCATTER.VALUES      GPS.REC<2,REP.CNTR>=RETURN.AMOUNTS    NEXT REP.CNTR   WRITE SALES.REC ON FILE.CONTROL, 'SALES.':YEAR   WRITE GPS.REC ON FILE.CONTROL, 'GPS.':YEAR NEXT YEAR.CNTR*** BUILD SERVICES AND PARTS*PARTS='Doohickey A,Doohickey B,Doohickey C,Doohickey D'CONVERT ',' TO CHAR(253) IN PARTSMAX.PARTS=DCOUNT(PARTS,CHAR(253))REC<52>=PARTSDEVIATION=35FOR YEAR.CNTR = 1 TO MAX.YEARS   ANN.PART.AMT=REC<40,YEAR.CNTR>   NUM.ITEMS=MAX.PARTS   TOT.SCAT.AMT=ANN.PART.AMT   GOSUB SCATTER.VALUES   FOR PART.CNTR = 1 TO MAX.PARTS      REC<53,PART.CNTR,YEAR.CNTR>=RETURN.AMOUNTS<1,1,PART.CNTR>    NEXT PART.CNTR NEXT YEAR.CNTR*SERVICES='Diagnostics,Repair,Custom Machining,Preventative Maintenance'CONVERT ',' TO CHAR(253) IN SERVICESMAX.SERVICES=DCOUNT(SERVICES,CHAR(253))REC<50>=SERVICESDEVIATION=35FOR YEAR.CNTR = 1 TO MAX.YEARS   ANN.SERVICE.AMT=REC<42,YEAR.CNTR>   NUM.ITEMS=MAX.SERVICES   TOT.SCAT.AMT=ANN.SERVICE.AMT   GOSUB SCATTER.VALUES**CRT 'YEAR.CNTR=':YEAR.CNTR**CRT 'ANN.SERVICE.AMT=':ANN.SERVICE.AMT**CRT 'RETURN.AMOUNTS=':RETURN.AMOUNTS:; DEBUG   FOR SERVICE.CNTR = 1 TO MAX.SERVICES      REC<51,SERVICE.CNTR,YEAR.CNTR>=RETURN.AMOUNTS<1,1,SERVICE.CNTR>    NEXT SERVICE.CNTR NEXT YEAR.CNTRWRITE REC ON FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE'RETURN*SCATTER.VALUES:*RETURN.AMOUNTS=''RUNNING.AMT=0LINEAR.PCT=100/NUM.ITEMSMAX.DEVIATION=INT((LINEAR.PCT * DEVIATION/100) * 200)HALF.DEVIATION=INT(MAX.DEVIATION/2 + .5)RUNNING.PCT=0LESS.1=NUM.ITEMS-1MID.WAY=INT(NUM.ITEMS/2 + .5)FOR SCAT.CNTR = 1 TO LESS.1   RANDOM.SCAT=RND(MAX.DEVIATION)   PCT=LINEAR.PCT + ((HALF.DEVIATION-RANDOM.SCAT) / 100)   RUNNING.PCT+=PCT   AMT=INT(TOT.SCAT.AMT * PCT/100 + .5)   RUNNING.AMT+=AMT   IF MID.WAY THEN      IF RUNNING.AMT > (TOT.SCAT.AMT / 2 + .5) THEN         * RUNNING TOO HIGH SO REDUCT         MAX.DEVIATION=INT((LINEAR.PCT * DEVIATION/100) * 125)         HALF.DEVIATION=INT(MAX.DEVIATION/2 + .5)       END    END   RETURN.AMOUNTS<1,1,-1>=AMT NEXT SCAT.CNTRRETURN.AMOUNTS<1,1,-1>=TOT.SCAT.AMT - RUNNING.AMTRETURNEND0001CDSUB.PORTAL.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) Zumasys, Inc*W$TITLE='Portal Documentation'W$TYPE='HTML'W$WIDTH = 1                    ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FILE.WEB.FORMS, 'PORTAL.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORMRETURN00062BSUB.SYS.ERR.BAR0c2    SUBROUTINE SUB.SYS.ERR.BAR* Changed by PORTBAS -> SUBROUTINE SUB.SYS.ERRS* @(#) SUB.SYS.ERR.BAR Ported to jBASE 17:55:32  08 JUL 2015*  The following variable names were converted*   DATE* ** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Show system errors*    INCLUDE WBPD MVDB.INCLUDE*    W$TYPE = "FCCOLUMN2D"    W$TITLE = "System Errors by Day For Each Day"    W$WIDTH = 3*    IF G$QUERYMODE = "1" THEN RETURN*    OPEN '','SYSTEM-ERRORS' TO F.SYSTEM.ERRORS ELSE RETURN*    BASE.DATE = DATE() - 29    XLINE = 'SSELECT SYSTEM-ERRORS BY-DSND DATE BY-DSND TIME WITH DATE GT "':OCONV(BASE.DATE,'D2/'):'"'    EXECUTE XLINE CAPTURING JUNK**    W$BAR.LABELS<1> = "Errors from ":OCONV(BASE.DATE,'D2/'):" Thru ":OCONV(DATE(),'D2/')    W$BAR.TYPE = "clustered"*    LOOP        READNEXT ID ELSE EXIT        Date = FIELD(ID,'*',1)        IF Date < BASE.DATE THEN EXIT*        W$BAR.VALUES<1,(Date-BASE.DATE)+1> += 1    REPEAT*    FOR X = BASE.DATE TO DATE()        OFFSET = (BASE.DATE-X)+1        W$BAR.XLABELS<1,OFFSET> = OCONV(X,'DD')    NEXT X*    W$BAR.YMEMO = "Error Records"    W$BAR.XMEMO = "Day of Month"*    W$BAR.TREND.BEG<1> = "3"    W$BAR.TREND.END<1> = "13"    W$BAR.TREND.OPTS<1> = "thickness='4' color='ff0000' displayValue='Bad Trend'"    W$BAR.TREND.BEG<2> = "11"    W$BAR.TREND.END<2> = "8"    W$BAR.TREND.OPTS<2> = "thickness='10' color='00ff00' displayValue='Good Trend'"*    W$LINK.LABEL = "Detail"    W$LINK.LOCATION = "2"    W$LINK.DD.WIDGET = "System Errors"*    RETURN0002BASUB.SHOW.SESSION0c2SUBROUTINE SUB.SHOW.SESSION** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Show session contents*INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD WWW.INCLUDE*W$TYPE = "TABLE"W$TITLE = "Web Session Contents"W$WIDTH = 3* IF G$QUERYMODE THEN RETURN*READ REC FROM F.WEB.SESSION, SESSION$ID ELSE REC = ""W$TABLE.COL.LABELS<1,1> = "Variable"W$TABLE.COL.LABELS<1,2> = "Value"W$TABLE.DATA<1,1> = "Session ID"W$TABLE.DATA<1,2> = SESSION$IDFOR N = 1 TO DCOUNT(REC<1>, @VM)  W$TABLE.DATA<N+1,1> = REC<1,N>  VAL = REC<2,N>  CONVERT CHAR(2) TO "^" IN VAL  CONVERT CHAR(3) TO "]" IN VAL  CONVERT CHAR(4) TO "\" IN VAL  W$TABLE.DATA<N+1,2> = VALNEXT N*RETURN001133SUB.ADMIN.CONFIG0c2SUBROUTINE SUB.ADMIN.CONFIG** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Administrative configuration widget.*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Administrative Configuration Widget"W$TYPE = "HTML" ;* or HTML, FCPIE, FCBAR, etc.W$WIDTH = 2 ;* 1 = narrow, 2 = medium, 3 = full-width*IF G$QUERYMODE THEN RETURN ;* Dont process, just provide title, type & width*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TEXT.INFO = "Unable to open MVDB.CONTROL"  RETURNENDOPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE   W$TEXT.INFO = "Unable to open MVDB.THEMES"  RETURNENDW$TEXT.INFO = "" ;* No widget content at this point.*READ SETTINGS.REC FROM F.MVDB.CONTROL, 'MVDB.SETTINGS' ELSE SETTINGS.REC = ""IF G$SUBMITTED = 1 THEN  FOR N = 1 TO 15    SETTINGS.REC<N> = WIDGET.USER.DATA(N)  NEXT N  WRITE SETTINGS.REC ON F.MVDB.CONTROL, 'MVDB.SETTINGS'  W$HTML.DATA = "Settings saved."ENDIF SETTINGS.REC<1> # "" THEN  W$HTML.DATA := '<br /><a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=':SETTINGS.REC<1>:'" target="MVDB.SUBS_':SETTINGS.REC<1>:'">Edit Subroutine: ':SETTINGS.REC<1>:'</a>'ENDIF SETTINGS.REC<5> = "" THEN SETTINGS.REC<5> = 24IF SETTINGS.REC<3> = "" THEN SETTINGS.REC<3> = 20IF SETTINGS.REC<4> = "" THEN  LOCATE "SERVER_PORT" IN CGI$VARS SETTING POS THEN    SETTINGS.REC<4> = CGI$VALS<POS>  ENDENDIF SETTINGS.REC<9> = '' THEN SETTINGS.REC<9> = 'UTF-8'*W$INPUT.PROMPT<1> = "User Auth Sub"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = SETTINGS.REC<1>W$INPUT.PARAMS<1> = 'size="40"'*W$INPUT.PROMPT<2> = "Password Req?"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "Yes":@VM:"No"W$INPUT.SELVALS<2> = "0":@VM:"1"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = SETTINGS.REC<2>*W$INPUT.PROMPT<3> = "Failure Tolerance Period"W$INPUT.TYPE<3> = "TEXT"W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = SETTINGS.REC<3>W$INPUT.PARAMS<3> = 'size="5"'*W$INPUT.PROMPT<4> = "TCP Port"W$INPUT.TYPE<4> = "TEXT"W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = SETTINGS.REC<4>W$INPUT.PARAMS<4> = 'size="5"'*W$INPUT.PROMPT<5> = "Session Timeout (hours)"W$INPUT.TYPE<5> = "TEXT"W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = SETTINGS.REC<5>W$INPUT.PARAMS<5> = 'size="5"'*IF SETTINGS.REC<6> = '' THEN SETTINGS.REC<6> = 0W$INPUT.PROMPT<6> = "GMT Offset"W$INPUT.TYPE<6> = "SELECT"GMT.VAL.LIST = ''; GMT.OPT.LIST = ''FOR X = 12 TO 1 STEP -1  GMT.OPT.LIST<1,-1> = 'GMT -':X  GMT.VAL.LIST<1,-1> = X * (-1)NEXT XGMT.OPT.LIST<1,-1> = 'GMT'GMT.VAL.LIST<1,-1> = 0FOR X = 1 TO 12  GMT.OPT.LIST<1,-1> = 'GMT +':X  GMT.VAL.LIST<1,-1> = XNEXT XW$INPUT.SELOPTS<6> = GMT.OPT.LISTW$INPUT.SELVALS<6> = GMT.VAL.LISTW$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = SETTINGS.REC<6>*W$INPUT.PROMPT<7> = "Alternate Logo Image"W$INPUT.TYPE<7> = "TEXT"W$INPUT.UDPOS<7> = 7W$INPUT.DEFAULT<7> = SETTINGS.REC<7>*EXECUTE 'SSELECT MVDB.THEMES' CAPTURING JUNKTHEME.LIST = ''LOOP  READNEXT THEME.ID ELSE EXIT  READV CSS.NAME FROM F.MVDB.THEMES, THEME.ID, 1 ELSE CSS.NAME = ''  IF CSS.NAME # '' THEN    THEME.LIST<1,-1> = CSS.NAME    THEME.LIST<2,-1> = THEME.ID  ENDREPEATW$INPUT.PROMPT<8> = "Dashboard Theme"W$INPUT.TYPE<8> = "SELECT"W$INPUT.SELOPTS<8> = 'Default Theme':@VM:THEME.LIST<2>W$INPUT.SELVALS<8> = '':@VM:THEME.LIST<2>W$INPUT.UDPOS<8> = 8W$INPUT.DEFAULT<8> = SETTINGS.REC<8>*W$INPUT.PROMPT<9> = 'Character Set'W$INPUT.TYPE<9> = "TEXT"W$INPUT.UDPOS<9> = 9W$INPUT.DEFAULT<9> = SETTINGS.REC<9>*W$INPUT.PROMPT<10> = "Auto-Trim Sessions"W$INPUT.TYPE<10> = "SELECT"W$INPUT.SELOPTS<10> = 'No':@VM:'Yes'W$INPUT.SELVALS<10> = 'N':@VM:'Y'W$INPUT.UDPOS<10> = 10W$INPUT.DEFAULT<10> = SETTINGS.REC<10>*W$INPUT.PROMPT<11> = "Auto-Refresh"W$INPUT.TYPE<11> = "SELECT"W$INPUT.SELOPTS<11> = 'No':@VM:'Yes'W$INPUT.SELVALS<11> = 'N':@VM:'Y'W$INPUT.UDPOS<11> = 11W$INPUT.DEFAULT<11> = SETTINGS.REC<11>**WEBSERVICE*W$INPUT.PROMPT<12> = "Allow 'webservice' logins"W$INPUT.TYPE<12> = "SELECT"W$INPUT.SELOPTS<12> = 'No':@VM:'Yes'W$INPUT.SELVALS<12> = 'N':@VM:'Y'W$INPUT.UDPOS<12> = 12W$INPUT.DEFAULT<12> = SETTINGS.REC<12>**EMAILED REPORTS*W$INPUT.PROMPT<13> = "Allow 'emailed' logins"W$INPUT.TYPE<13> = "SELECT"W$INPUT.SELOPTS<13> = 'No':@VM:'Yes'W$INPUT.SELVALS<13> = 'N':@VM:'Y'W$INPUT.UDPOS<13> = 13W$INPUT.DEFAULT<13> = SETTINGS.REC<13>*W$INPUT.BUTTON = "Save"*RETURN003063SUB.PORTAL.AR.REPORTS0c2SUBROUTINE SUB.PORTAL.AR.REPORTS**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE='Portal AR'; CALL PORTAL.SHOW.LAST.UPDATED('AR')W$TYPE = "FC2DPIE"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*EQUATE REPORT.TYPE TO WIDGET.USER.DATA(1)W$PDFABLE=1OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.DASHBOARD.BALANCES ELSE   W$TYPE='TEXT'   W$TEXT.DATA='UNABLE TO OPEN DICT DASHBOARD.BALANCES'   RETURN END** LAYOUT OF THE *CURRENT.AR.STATS RECORD** PERIOD.AMOUNTS DATA LAYOUT* 1 PERIOD 1 AMOUNT* 2 PERIOS 2 AMOUNT* 3 PERIOD 3 AMOUNT* 4 PERIOD 4 AMOUNT* 5* 6 YEAR ] YEAR ] YEAR* 7 PERIOD 1 NUMBER \ PERIOD 2 NUMBER \ PERIOD 3 NUMBER \ PERIOD 4 NUMBER* 8 PERIOD 1 AMOUNT \ PERIOD 2 AMOUNT \ PERIOD 3 AMOUNT \ PERIOD 4 AMOUNT* 9 YEAR 1 TOTAL DAYS ] YEAR TOTAL DAYS ] YEAR 3 TOTAL DAYS ] YEAR 4 TOTAL DAYS* 10 YEAR 1 JAN # PAID\ FEB # PAID ... ] YEAR 2 JAN # PAID \* 11 YEAR 1 JAN # TOTAL DAYS \ FEB TOTAL DAYS ....*DIM AR.AMOUNTS(30)MATREAD AR.AMOUNTS FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AR.STATS' ELSE MAT AR.AMOUNTS=''EQUATE YEARS TO AR.AMOUNTS(6)NUM.YEARS=DCOUNT(YEARS,@VM)EQUATE ANNUAL.NUMBERS TO AR.AMOUNTS(7)EQUATE ANNUAL.AMOUNTS TO AR.AMOUNTS(8)EQUATE ANNUAL.TOTAL.DAYS TO AR.AMOUNTS(9)EQUATE MONTHLY.NUMBER.PAID TO AR.AMOUNTS(10)EQUATE MONTHLY.TOTAL.DAYS TO AR.AMOUNTS(11)EQUATE CUSTOMERS TO AR.AMOUNTS(12)EQUATE CUST.AMT.DUES TO AR.AMOUNTS(13)EQUATE CUST.MOST.DAYS.DUE TO AR.AMOUNTS(14)EQUATE CUST.TOTAL.1000.DAYS TO AR.AMOUNTS(15)EQUATE CUST.NUM.1000.DAYS TO AR.AMOUNTS(16)EQUATE CUST.TOTAL.60.DAYS TO AR.AMOUNTS(17)EQUATE CUST.NUM.60.DAYS TO AR.AMOUNTS(18)EQUATE HIGHEST.AMTS.CUSTS TO AR.AMOUNTS(19)EQUATE HIGHEST.AMTS TO AR.AMOUNTS(20)EQUATE HIGHEST.DAYS.CUSTS TO AR.AMOUNTS(21)EQUATE HIGHEST.DAYS TO AR.AMOUNTS(22)EQUATE HIGHEST.INCREASE.CUSTS TO AR.AMOUNTS(23)EQUATE HIGHEST.INCREASE.PCTS TO AR.AMOUNTS(24)EQUATE HIGHEST.INCREASE.60.DAY.AVG TO AR.AMOUNTS(25)EQUATE HIGHEST.INCREASE.1000.DAY.AVG TO AR.AMOUNTS(26)*W$INPUT.PROMPT<1>='Type of Report 'W$INPUT.TYPE<1>='SELECT'W$INPUT.SELOPTS<1>='Current Receivables':@VM:'Average Days by Year':@VM:'Average Days Last 12 Months'*** Add Average Days by Month for past 3 years with activity in every month*YEAR.POS=NUM.YEARSYEARS.ALREADY=0LOOP   YEAR.POS=YEAR.POS-1   IF NOT(YEAR.POS) THEN      JAN.NUMBER=0    END ELSE      JAN.NUMBER=MONTHLY.NUMBER.PAID<1,YEAR.POS,1>    ENDUNTIL NOT(JAN.NUMBER) OR YEARS.ALREADY >= 3 DO   YEAR=YEARS<1,YEAR.POS>   YEARS.ALREADY+=1   W$INPUT.SELOPTS<1,-1>='Average Days by Month ':YEARREPEAT**W$INPUT.SELOPTS<1,-1>='Customers By Largest Receivables'**W$INPUT.SELOPTS<1,-1>='Customers By Most Aged Receivables'**W$INPUT.SELOPTS<1,-1>='Customers By Largest Aging Increases'W$INPUT.SELOPTS<1,-1>='Customers Needing Aging Attention'W$INPUT.SELVALS=W$INPUT.SELOPTSIF REPORT.TYPE = '' THEN   REPORT.TYPE='Current Receivables' ENDW$INPUT.UDPOS = 1W$INPUT.DEFAULT<1>=REPORT.TYPE*BEGIN CASE   CASE REPORT.TYPE = 'Current Receivables'      GOSUB DO.CURRENT   CASE REPORT.TYPE = 'Average Days by Year'      GOSUB AVERAGE.DAYS.BY.YEAR   CASE REPORT.TYPE = 'Average Days Last 12 Months'      GOSUB AVERAGE.DAYS.LAST.12.MONTHS   CASE REPORT.TYPE[1,21] = 'Average Days by Month'      AVERAGE.YEAR=FIELD(REPORT.TYPE,' ',5)      GOSUB AVERAGE.DAYS.BY.MONTH.PER.YEAR   CASE REPORT.TYPE = 'CUSTOMERS BY LARGEST RECEIVABLES'      GOSUB CUSTOMERS.BY.LARGEST.RECEIVABLES   CASE REPORT.TYPE = 'CUSTOMERS BY MOST AGED RECEIVABLES'      GOSUB CUSTOMERS.BY.MOST.AGED.RECEIVABLES   CASE REPORT.TYPE = 'CUSTOMERS BY LARGEST AGING INCREASES'      GOSUB CUSTOMERS.BY.LARGEST.AGING.INCREASES   CASE REPORT.TYPE = 'Customers Needing Aging Attention'      GOSUB CUSTOMERS.BY.LARGEST.RECEIVABLES   CASE 1      W$TYPE='TEXT'      W$TEXT.DATA='INVALID REPORT TYPE=':REPORT.TYPEEND CASERETURN*DO.CURRENT:*W$TITLE = "Current - AR Balances by Days Due"; CALL PORTAL.SHOW.LAST.UPDATED('AR')AMTS=AR.AMOUNTS(1):@AM:AR.AMOUNTS(2):@AM:AR.AMOUNTS(3):@AM:AR.AMOUNTS(4):@AM:AR.AMOUNTS(5)W$PIE.CAPTION='Total AR Balance of '*TOT.AMT=SUM(AMTS)W$PIE.CAPTION:=OCONV(TOT.AMT,'MD02,$')*CATEGORIES='Current'CATEGORIES<2>='1 - 30 Days'CATEGORIES<3>='31 - 60 Days'CATEGORIES<4>='61 - 90 Days'CATEGORIES<5>='Over 90 Days'*CATEGORY.AMTS=AMTS**W$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='showPercentageValues="0"'W$CHART.OPTIONS<-1>='showPercentageInLabel="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="0"'W$CHART.OPTIONS<-1>='thousandSeparator=","'W$CHART.OPTIONS<-1>='pieradius="150"'FOR N = 1 TO 5  W$PIE.LABELS<1,N> = CATEGORIES<N>  W$PIE.VALUES<1,N> = INT(CATEGORY.AMTS<N>/100 + .5)NEXT N*RETURN*AVERAGE.DAYS.BY.YEAR:*W$TITLE = "Average Days To Pay"; CALL PORTAL.SHOW.LAST.UPDATED('AR')W$TYPE = "FCCOLUMN3D"*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEFIRST.YEAR=''; CURRENT.YEAR=''*W$BAR.XMEMO = "Year (drill down for detail)"W$BAR.YMEMO = "Average Days to Pay"*YEAR.NO=0*FOR NN = 1 TO NUM.YEARS  ANNUAL.BY.TYPE.NUMBER=ANNUAL.NUMBERS<1,NN>  BY.TYPE.NUMBER=SUM(ANNUAL.BY.TYPE.NUMBER)  TOTAL.DAYS=ANNUAL.TOTAL.DAYS<1,NN>  IF BY.TYPE.NUMBER AND TOTAL.DAYS THEN     AVERAGE.DAYS=INT(TOTAL.DAYS * 10 / BY.TYPE.NUMBER + .5)     AVERAGE.DAYS=OCONV(AVERAGE.DAYS,'MD1')     YEAR.NO+=1     YEAR=YEARS<1,NN>     IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR     CURRENT.YEAR=YEAR     W$BAR.VALUES<1,YEAR.NO> = AVERAGE.DAYS     W$BAR.XLABELS<1,YEAR.NO> = YEAR     W$FW.DD.WIDGET<1,YEAR.NO>='PORTAL DAYS TO PAY PIE'     W$FW.DD.UD.POS<1,YEAR.NO,1>=1     W$FW.DD.UD.VAL<1,YEAR.NO,1>=YEAR   ENDNEXT NN*W$BAR.CAPTION = "Average Days to Pay From ":FIRST.YEAR:' to ':CURRENT.YEARW$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="1"'W$CHART.OPTIONS<-1>='thousandSeparator=","'W$CHART.OPTIONS<-1>='pieradius="150"'*RETURN*AVERAGE.DAYS.LAST.12.MONTHS:*LAST.YEAR=YEARS<1,NUM.YEARS>**DEBUG=''MOS.IN.LAST.YEAR=DCOUNT(MONTHLY.NUMBER.PAID<1,NUM.YEARS>,CHAR(252))**DEBUG<-1>=MOS.IN.LAST.YEARMOS.IN.PREV.YEAR=12-MOS.IN.LAST.YEAR**DEBUG<-1>=MOS.IN.PREV.YEARIF MOS.IN.PREV.YEAR = 12 THEN   LAST.YEAR=LAST.YEAR-1   THIS.MONTHLY.NUMBERS=MONTHLY.NUMBER.PAID<1,NUM.YEARS-1>   THIS.MONTHLY.TOTAL.DAYS=MONTHLY.TOTAL.DAYS<1,NUM.YEARS-1>   MONTHLY.LABELS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'   CONVERT ',' TO CHAR(252) IN MONTHLY.LABELS   START.MONTH="January ":LAST.YEAR   END.MONTH="December ":LAST.YEAR END ELSE   FULL.MONTHS='January,February,March,April,May,June,July,August,September,October,November,December'   PREV.YEAR.MO.NO=12-MOS.IN.PREV.YEAR+1**DEBUG<-1>=PREV.YEAR.MO.NO   START.MONTH=FIELD(FULL.MONTHS,',',PREV.YEAR.MO.NO):' ':(LAST.YEAR-1)   END.MONTH=FIELD(FULL.MONTHS,',',MOS.IN.LAST.YEAR):' ':LAST.YEAR   ABREV.MONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'   COMMA.POS=INDEX(ABREV.MONTHS,',',PREV.YEAR.MO.NO-1)   MONTHLY.LABELS=ABREV.MONTHS[COMMA.POS+1,9999]:',':(ABREV.MONTHS[1,COMMA.POS-1])   CONVERT ',' TO CHAR(252) IN MONTHLY.LABELS   *   ** ISOLATE THE NUMBERS FOR THE PREVIOUS YEAR   *   THIS.MONTHLY.NUMBERS=MONTHLY.NUMBER.PAID<1,NUM.YEARS-1>   POS.BEFORE.FIRST=INDEX(THIS.MONTHLY.NUMBERS,CHAR(252),PREV.YEAR.MO.NO-1)   THIS.MONTHLY.NUMBERS=THIS.MONTHLY.NUMBERS[POS.BEFORE.FIRST+1,99999]   THIS.MONTHLY.NUMBERS:=CHAR(252):MONTHLY.NUMBER.PAID<1,NUM.YEARS>   THIS.MONTHLY.TOTAL.DAYS=MONTHLY.TOTAL.DAYS<1,NUM.YEARS-1>   POS.BEFORE.FIRST=INDEX(THIS.MONTHLY.TOTAL.DAYS,CHAR(252),PREV.YEAR.MO.NO-1)   THIS.MONTHLY.TOTAL.DAYS=THIS.MONTHLY.TOTAL.DAYS[POS.BEFORE.FIRST+1,99999]   THIS.MONTHLY.TOTAL.DAYS:=CHAR(252):MONTHLY.TOTAL.DAYS<1,NUM.YEARS>ENDGOSUB AVERAGE.DAYS.BY.MONTHRETURN*AVERAGE.DAYS.BY.MONTH.PER.YEAR:*LOCATE AVERAGE.YEAR IN YEARS<1> SETTING YEAR.POS ELSE RETURNTHIS.MONTHLY.NUMBERS=MONTHLY.NUMBER.PAID<1,YEAR.POS>THIS.MONTHLY.TOTAL.DAYS=MONTHLY.TOTAL.DAYS<1,YEAR.POS>START.MONTH="January ":AVERAGE.YEAREND.MONTH="December ":AVERAGE.YEARMONTHLY.LABELS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'CONVERT ',' TO CHAR(252) IN MONTHLY.LABELSGOSUB AVERAGE.DAYS.BY.MONTHRETURN*AVERAGE.DAYS.BY.MONTH:*W$TITLE = "Average Days To Pay"; CALL PORTAL.SHOW.LAST.UPDATED('AR')W$TYPE = "FCCOLUMN3D"*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUE*W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Average Days to Pay"*MONTH.NO=0*FOR NN = 1 TO 12  MONTHLY.NUMBER=THIS.MONTHLY.NUMBERS<1,1,NN>  MONTHLY.DAYS=THIS.MONTHLY.TOTAL.DAYS<1,1,NN>  MONTHLY.LABEL=MONTHLY.LABELS<1,1,NN>  IF MONTHLY.NUMBER AND MONTHLY.DAYS THEN     AVERAGE.DAYS=INT(MONTHLY.DAYS * 10 / MONTHLY.NUMBER + .5)     AVERAGE.DAYS=OCONV(AVERAGE.DAYS,'MD1')   END ELSE AVERAGE.DAYS=0  W$BAR.VALUES<1,NN> = AVERAGE.DAYS  W$BAR.XLABELS<1,NN> = MONTHLY.LABELNEXT NN*W$BAR.CAPTION = "Average Days to Pay From ":START.MONTH:' to ':END.MONTHW$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="1"'RETURN*CUSTOMERS.BY.LARGEST.RECEIVABLES:*W$TYPE='TABLE'W$WIDTH = 3MAX.HIGHEST.AMTS=DCOUNT(HIGHEST.AMTS.CUSTS,@VM)IF MAX.HIGHEST.AMTS > 50 THEN MAX.HIGHEST.AMTS=50W$TABLE.COL.LABELS<1,1> = "| --- Customers ---<br>| ":MAX.HIGHEST.AMTS:" With Most Amount Owed"W$TABLE.COL.LABELS<1,2> = "Amount<br>Owed"W$TABLE.COL.LABELS<1,3> = "Most Days|<br>&nbsp;&nbsp;&nbsp;&nbsp;Aged&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|"W$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "center"W$TABLE.COL.JUST<1,3> = "center"IF MAX.HIGHEST.AMTS > 50 THEN MAX.HIGHEST.AMTS=50W$TITLE = MAX.HIGHEST.AMTS:' Customers With Largest Receivables'; CALL PORTAL.SHOW.LAST.UPDATED('AR')FOR I = 1 TO MAX.HIGHEST.AMTS   CUSTOMER=HIGHEST.AMTS.CUSTS<1,I>   HIGHEST.AMT=HIGHEST.AMTS<1,I>   HIGHEST.AMT=OCONV(HIGHEST.AMT,'MD2,')   LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUST.POS ELSE CUST.POS=9999   CUST.HIGHEST.DAYS=CUST.MOST.DAYS.DUE<1,CUST.POS>   W$TABLE.DATA<I,1>=CUSTOMER   W$TABLE.DATA<I,2>=HIGHEST.AMT   W$TABLE.DATA<I,3>=CUST.HIGHEST.DAYS NEXT I*RETURN*CUSTOMERS.BY.MOST.AGED.RECEIVABLES:***W$TYPE='TABLE'**W$WIDTH = 2MAX.HIGHEST.DAYS=DCOUNT(HIGHEST.DAYS.CUSTS,@VM)IF MAX.HIGHEST.DAYS > 50 THEN MAX.HIGHEST.DAYS=50W$TABLE.COL.LABELS<1,4> = "| --- Customers ---<br>| ":MAX.HIGHEST.DAYS:" With Most Days Aged"W$TABLE.COL.LABELS<1,5> = "Most Days<br>Aged"W$TABLE.COL.LABELS<1,6> = "&nbsp;Amount&nbsp;|<br>&nbsp;&nbsp;&nbsp;Owed&nbsp;&nbsp;&nbsp;|"W$TABLE.COL.JUST<1,4> = "left"W$TABLE.COL.JUST<1,5> = "center"W$TABLE.COL.JUST<1,6> = "right"W$TITLE = MAX.HIGHEST.DAYS:' Customers With Most Aged Receivables'; CALL PORTAL.SHOW.LAST.UPDATED('AR')FOR I = 1 TO MAX.HIGHEST.DAYS   CUSTOMER=HIGHEST.DAYS.CUSTS<1,I>   HIGHEST.DAY=HIGHEST.DAYS<1,I>   LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUST.POS ELSE CUST.POS=9999   AMT.DUE=CUST.AMT.DUES<1,CUST.POS>   W$TABLE.DATA<I,4>=CUSTOMER   W$TABLE.DATA<I,5>=HIGHEST.DAY   W$TABLE.DATA<I,6>=OCONV(AMT.DUE,'MD2,') NEXT I*RETURN*CUSTOMERS.BY.LARGEST.AGING.INCREASES:**W$TYPE='TABLE'*W$WIDTH = 2MAX.HIGHEST.INCREASE=DCOUNT(HIGHEST.INCREASE.CUSTS,@VM)IF MAX.HIGHEST.INCREASE > 50 THEN MAX.HIGHEST.INCREASE=50W$TABLE.COL.LABELS<1,7> = "| --- Customers ---<br>| ":MAX.HIGHEST.INCREASE:" With Significant Aging Increase"W$TABLE.COL.LABELS<1,8> = "PCT<br>Increase"W$TABLE.COL.LABELS<1,9> = "60<br>Day Avg"W$TABLE.COL.LABELS<1,10> = "&nbsp;&nbsp;&nbsp;1000&nbsp;&nbsp;&nbsp;|<br>Day Avg|"W$TABLE.COL.JUST<1,7> = "left"W$TABLE.COL.JUST<1,8> = "center"W$TABLE.COL.JUST<1,9> = "center"W$TABLE.COL.JUST<1,10> = "center"W$TITLE = MAX.HIGHEST.INCREASE:' Customers With Largest Aging Increase'; CALL PORTAL.SHOW.LAST.UPDATED('AR')FOR I = 1 TO MAX.HIGHEST.INCREASE   CUSTOMER=HIGHEST.INCREASE.CUSTS<1,I>   HIGHEST.INCREASE.PCT=HIGHEST.INCREASE.PCTS<1,I>   LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUST.POS ELSE CUST.POS=9999   W$TABLE.DATA<I,7>=CUSTOMER   W$TABLE.DATA<I,8>=HIGHEST.INCREASE.PCT   W$TABLE.DATA<I,9>=HIGHEST.INCREASE.60.DAY.AVG<1,I>   W$TABLE.DATA<I,10>=HIGHEST.INCREASE.1000.DAY.AVG<1,I> NEXT IRETURN0014E0SUB.MOBILE.APPS0c2    SUBROUTINE SUB.MOBILE.APPS* @(#) SUB.MOBILE.APPS Ported to jBASE 17:55:32  08 JUL 2015*  The following variable names were converted*   STATUS* ** Dashboard Widget*    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Mobile Web App Registration"    W$TYPE = "TABLE"    W$WIDTH = 3     ;* Full width (1=1/3, 2=2/3, 3=3/3)*    IF G$QUERYMODE THEN RETURN** Set up column labels    W$TABLE.COL.LABELS<1,1> = "Subroutine Name"    W$TABLE.COL.LABELS<1,2> = "Application Name"    W$TABLE.COL.LABELS<1,3> = "Status"    W$TABLE.COL.LABELS<1,4> = "Action"** Column justification = left, right, center    W$TABLE.COL.JUST<1,1> = "left"    W$TABLE.COL.JUST<1,2> = "left"    W$TABLE.COL.JUST<1,3> = "left"    W$TABLE.COL.JUST<1,4> = "left"** Table Rows*    OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE        W$TYPE = "TEXT"        W$TEXT.DATA = "Unable to open MVDB.CONTROL"        RETURN    END    READ MOBI.APPS FROM F.MVDB.CONTROL, "MOBI.APPS" ELSE MOBI.APPS = ""*    IF WIDGET.USER.DATA(1) # "" THEN        BEGIN CASE        CASE G$SUBMITTED            SUBNAME = WIDGET.USER.DATA(1)            IF SUBNAME # "" THEN                LOCATE SUBNAME IN MOBI.APPS<1> BY "AL" SETTING POS THEN                    MOBI.APPS<2,POS> = WIDGET.USER.DATA(3)                    MOBI.APPS<3,POS> = WIDGET.USER.DATA(2)                END ELSE                    MOBI.APPS = INSERT( MOBI.APPS, 1, POS, 0, SUBNAME )                    MOBI.APPS = INSERT( MOBI.APPS, 2, POS, 0, WIDGET.USER.DATA(3) )                    MOBI.APPS = INSERT( MOBI.APPS, 3, POS, 0, WIDGET.USER.DATA(2) )                END            END        CASE WIDGET.USER.DATA(2) = "delete"            MOBI.APPS = DELETE( MOBI.APPS, 1, WIDGET.USER.DATA(1), 0 )            MOBI.APPS = DELETE( MOBI.APPS, 2, WIDGET.USER.DATA(1), 0 )            MOBI.APPS = DELETE( MOBI.APPS, 3, WIDGET.USER.DATA(1), 0 )        CASE WIDGET.USER.DATA(2) = "play"            MOBI.APPS<2,WIDGET.USER.DATA(1)> = "A"        CASE WIDGET.USER.DATA(2) = "pause"            MOBI.APPS<2,WIDGET.USER.DATA(1)> = "I"        CASE WIDGET.USER.DATA(2) = "default"            LOCATE "D" IN MOBI.APPS<2> SETTING CURR.D THEN                MOBI.APPS<2,CURR.D> = "A"            END            MOBI.APPS<2,WIDGET.USER.DATA(1)> = "D"        CASE 1        END CASE        WRITE MOBI.APPS ON F.MVDB.CONTROL, 'MOBI.APPS'        WIDGET.USER.DATA(1) = ""        WIDGET.USER.DATA(2) = ""        WIDGET.USER.DATA(3) = ""    END*    TOPROW = ""    FOR ROW = 1 TO DCOUNT(MOBI.APPS<1>, @VM )        SUB.NAME = MOBI.APPS<1,ROW>        ENC.SUB.NAME = SUB.NAME        CALL SUB.URL.ENCODE(ENC.SUB.NAME)        SUB.LINK = '<a href="/dbc/MVDB.WEB.ED?ed_file=MOBI.SUBS&ed_item=':ENC.SUB.NAME:'" target="MOBI.SUBS_':ENC.SUB.NAME:'">':SUB.NAME:'</a>'        W$TABLE.DATA<ROW,1> = SUB.LINK        W$TABLE.DATA<ROW,2> = MOBI.APPS<3,ROW>        Status = MOBI.APPS<2,ROW>        BEGIN CASE        CASE Status = "A"            Status = '<img src="/db/icons/bullet_green.png" />Active'        CASE Status = "I"            Status = '<img src="/db/icons/bullet_red.png" />Inactive'        CASE Status = "D"            Status = '<img src="/db/icons/bullet_green.png" /><b>Active/Default</b>'            Status := '&nbsp;<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=play"><img src="/db/icons/control_stop.png" title="Un-set Default" /></a>'            TOPROW = ROW        END CASE        W$TABLE.DATA<ROW,3> = Status        ACTIONS = '<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=delete" '        ACTIONS := \onClick='confirm("Delete this entry?");'><img src="/db/icons/delete.png" title="Delete" /></a>\        ACTIONS := '&nbsp;'        IF MOBI.APPS<2,ROW> = "A" OR MOBI.APPS<2,ROW> = "D" THEN            ICON = "control_pause.png"            ACTION = "pause"            ALT = "Set as inactive"        END ELSE            ICON = "control_play.png"            ACTION = "play"            ALT = "Set as active"        END        ACTIONS := '<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=':ACTION:'" ><img src="/db/icons/':ICON:'" title="':ALT:'" /></a>'        IF MOBI.APPS<2,ROW> # "D" THEN            ICON = "star.png"            ACTION = "default"            ALT = "Set as default"            ACTIONS := '&nbsp;<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=':ACTION:'" ><img src="/db/icons/':ICON:'" title="':ALT:'" /></a>'        END        W$TABLE.DATA<ROW,4> = ACTIONS    NEXT ROW*    IF TOPROW # "" THEN* Float this row to the top of the list (the default application)        ROW = W$TABLE.DATA<TOPROW>        W$TABLE.DATA = DELETE( W$TABLE.DATA, TOPROW, 0, 0 )        W$TABLE.DATA = INSERT( W$TABLE.DATA, 1, 0, 0, ROW )    END*    W$INPUT.PROMPT<1> = "Add Subroutine"    W$INPUT.TYPE<1> = "TEXT"    W$INPUT.UDPOS<1> = 1*    W$INPUT.PROMPT<2> = "Description"    W$INPUT.TYPE<2> = "TEXT"    W$INPUT.UDPOS<2> = 2*    W$INPUT.PROMPT<3> = "Status"    W$INPUT.TYPE<3> = "SELECT"    W$INPUT.UDPOS<3> = 3    W$INPUT.DEFAULT<3> = "A"    W$INPUT.SELOPTS<3> = "Active":@VM:"Default":@VM:"Inactive"    W$INPUT.SELVALS<3> = "A":@VM:"D":@VM:"I"*    RETURN0003F5EXECUTE.STACKED.CMNDS0c2SUBROUTINE EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,NUM.RETURNED,REPORT)*REPORT=''NUM.RETURNED=1IF STACKED.1 <> '' THEN   EXECUTE STACKED.1 CAPTURING DUMMY   NUM.RETURNED=SYSTEM(11)   IF NOT(NUM.RETURNED) THEN RETURN ENDBREAK.ON.POS2=INDEX(STACKED.2,'BREAK-ON ',2)IF BREAK.ON.POS2 THEN   BREAK.ON.POS=INDEX(STACKED.2,'BREAK-ON ',1)   PLATFORM=OCONV('PLATFORM','TMVDB.CONTROL;X;1;1')   IF PLATFORM = '' THEN PLATFORM='D3'   IF PLATFORM = 'JB' THEN      STR1=STACKED.2[1,BREAK.ON.POS-1]      STR2=STACKED.2[BREAK.ON.POS,9999999]      PIPE.POS=INDEX(STR2,' PIPE ',1)      IF PIPE.POS THEN         BREAK.VAR=STR2[1,PIPE.POS-1]         BREAK.VAR=TRIM(BREAK.VAR)         BREAK.VAR=FIELD(BREAK.VAR,' ',2)         BREAK.VAR=' BREAK-ON ':BREAK.VAR:' "':"'V'|":'" '         STR2=STR2[PIPE.POS,9999999]       END ELSE         BREAK.VAR=''       END      STACKED.2=STR1:BREAK.VAR:STR2    END ENDEXECUTE STACKED.2 CAPTURING REPORTCONVERT '$,' TO '' IN REPORTRETURNEND0000D7TEST.TOM0c2PROMPT ''INPUT A,1CRT AINPUT A,0CRT A****DATA "LIST SALES.FILE.PATH"****EXECUTE 'SELECT SALES.FILE.PATH WITH CLOSE.DATE = "5-1-20"'**IF 0 THEN XXX=@SENTENCE ELSE XXX=SENTENCE()**CRT XXX**CRT XXX0003E3CREATE.UD.QPOINTER0c2SUBROUTINE CREATE.UD.QPOINTER(ACCOUNT,FILENAME,CALL.IT,FI.QPOINTER)OPEN '',CALL.IT TO FI.QPOINTER THEN   IF CALL.IT <> 'QFILE' THEN RETURN ENDCALL.IT.PARAM=CALL.ITCALL.IT=''OPEN '','VOC' TO FI.VOC ELSE RETURNOPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE   UD.ACCOUNTS='F'   UD.ACCOUNTS<-1>='@UDTHOME/sys/UD.ACCOUNT'   UD.ACCOUNTS<-1>='@UDTHOME/sys/D_UD.ACCOUNT'   WRITE UD.ACCOUNTS ON FI.VOC, 'UD.ACCOUNTS'   OPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE RETURN ENDREADV PATH FROM FI.UD.ACCOUNTS, ACCOUNT, 1 ELSE RETURNF.POINTER='F'F.POINTER<2>=PATH:'/':FILENAMEF.POINTER<3>=PATH:'/D_':FILENAMEWRITE F.POINTER ON FI.VOC, CALL.IT.PARAMOPEN '',CALL.IT.PARAM TO FI.QPOINTER THEN   CALL.IT=CALL.IT.PARAM   RETURN ENDF.POINTER<3>=PATH:'/D_VOC'WRITE F.POINTER ON FI.VOC, CALL.IT.PARAMOPEN '',CALL.IT.PARAM TO FI.QPOINTER THEN   * CHANGE CALL.IT TO SUCCESSFUL NAME   * OTHERWISE IT WILL RETURN WITH NULL SAYING FAILURE   CALL.IT=CALL.IT.PARAM ENDRETURN00266FSUB.HERVE0c2SUBROUTINE SUB.HERVE** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Herve html to pdf test"     ;* Title for widget title barW$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                   ;* Full width (1=1/3, 2=2/3, 3=3/3)W$PDFABLE = 1                 ;* Can be converted to PDFW$PRINTABLE = 1               ;* Can be printed*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here*OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE NULLREAD HTML FROM FILE.WEB.FORMS, 'VALENCOURS2368' ELSE HTML=''**** Create a HTML string*** In this example, we are including our own styles & scripts in <head>.* This causes MV Dashboard to display this content in an <iframe>.* Because this content does not render properly using the built-in* DOCTYPE:**   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"*   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">** we supply our own DOCTYPE to override the standard DOCTYPE.*HTML = ''HTML<-1> = \<!DOCTYPE HTML PUBLIC>\HTML<-1> = \<html>\HTML<-1> = \<head>\HTML<-1> = \<title>Etat de la Valorisation des Encours</title>\HTML<-1> = \<style type="text/css"> \HTML<-1> = \body {background:#CCC; height:100%;}\HTML<-1> = \h1 { color:#000000; font-weight:bold; font-size:40px; }\HTML<-1> = \h2 { color:#000000; font-weight:bold; font-size:30px; }\HTML<-1> = \h3 { color:#000000; font-size:20px; }\HTML<-1> = \table { width: 97%; border: 1px solid #777; border-collapse:collapse; font-family:sans_serif, Verdana, Arial, Helvetica; }\HTML<-1> = \thead { background-color:#fa3; }\HTML<-1> = \tfoot { background-color:#fea; }\HTML<-1> = \td { border-style:solid; border-width:1px; border-color:silver; font-size:10px; }\HTML<-1> = \th { border-style:solid; border-width:1px; border-color:#6f5b85; font-size:11px; }\HTML<-1> = \.titre { color:blue; font-weight:bold; font-size:40px; }\HTML<-1> = \.stitre { color:BLACK; font-weight:bold; font-size:20px; }\HTML<-1> = \.over { background-color: #ef2e25; color: white; }\HTML<-1> = \.normal { background-color: white; }\HTML<-1> = \.lig0 { background-color: #dcdcdc; } /* lignes paires */\HTML<-1> = \.lig1 { background-color: #white; }  /* lignes impaires */\HTML<-1> = \.alink { font-weight: bold; text-decoration: none; color: blue; }\HTML<-1> = \#date { position: absolute; top: 10px; right: 15px; font-size: 14px; }\HTML<-1> = \#titre { position: absolute;top: 30px; left: 300px; font-weight: bold; font-size: 30px; }\HTML<-1> = \#stitre { position: absolute; top: 60px; left: 300px; font-weight: bold; font-size: 14px; }\HTML<-1> = \#dateheure { position: absolute; top: 0px; width: 95%; text-align: right; font-size: 12px; }\HTML<-1> = \#container { width: 100%; padding:15px;}\HTML<-1> = \#banniere { margin:auto; background:url(logo.png) no-repeat; width:1000px; height:100px; padding-top:10px;position: relative;}\HTML<-1> = \#content { width:1050px; background:#FFF; border-radius:15px; margin: auto; -moz-border-radius: 15px; display: block;}\HTML<-1> = \.titre_tab { font-size:14px; font-weight:bold; text-align:left; padding-left:5px;}\HTML<-1> = \.entete_tab_sem { background:#CCC;font-size:12px; font-weight:bold; text-align:center;}\HTML<-1> = \.entete_tab_we { background:#fa3;font-size:12px; font-weight:bold; text-align:center;}\HTML<-1> = \.cell_sem { text-align:center;background:#CFC;margin:0;padding:0;font-size:12px;}\HTML<-1> = \.cell_we { background:#Fea};\HTML<-1> = \</style>\HTML<-1> = \<script>\HTML<-1> = \  var affiche = "-";\HTML<-1> = \function changetout(max) {\HTML<-1> = \   var i    = 0;\HTML<-1> = \   var val  = "";\HTML<-1> = \   for (i=1; i <= max; i++) {\HTML<-1> = \        if (affiche == "-") { val = "G" } else { val = "D" }\HTML<-1> = \        val = val + i;\HTML<-1> = \        change(val);\HTML<-1> = \   }\HTML<-1> = \   document.getElementById("idth1").innerText = affiche;\HTML<-1> = \   if (affiche == "-") {\HTML<-1> = \       affiche = "+"\HTML<-1> = \   } else {\HTML<-1> = \       affiche = "-"\HTML<-1> = \   }\HTML<-1> = \}\HTML<-1> = \function change(lig) {\HTML<-1> = \   car1 = lig.slice(0,1);\HTML<-1> = \   car2 = lig.slice(1,lig.length);\HTML<-1> = \   obj = document.getElementById(lig);\HTML<-1> = \   val = obj.style.display;\HTML<-1> = \   obj.style.display = "none";\HTML<-1> = \   if (car1 == "G") {\HTML<-1> = \      val = "D" + car2;\HTML<-1> = \   } else {\HTML<-1> = \      val = "G" + car2;\HTML<-1> = \   }\HTML<-1> = \   document.getElementById(val).style.display = "";\HTML<-1> = \}\HTML<-1> = \</script>\HTML<-1> = \</head>\HTML<-1> = \<body>\HTML<-1> = \<div id="BANNIERE">\HTML<-1> = \<div id="titre">Etat de la Valorisation des Encours<br/></div>\HTML<-1> = \<div id="dateheure">le 14/12/2015 &agrave; 18:05:24</div></div>\HTML<-1> = \<div id="container">\HTML<-1> = \<table>\HTML<-1> = \<thead>\HTML<-1> = \<tr>\HTML<-1> = \<th colspan="4">Composant</th>\HTML<-1> = \<th colspan="2">OF</th>\HTML<-1> = \<th colspan="2">OF Lanc&eacute;</th>\HTML<-1> = \<th colspan="4">Pr&eacute;vu</th>\HTML<-1> = \<th colspan="4">R&eacute;el</th>\HTML<-1> = \</tr>\HTML<-1> = \<tr>\HTML<-1> = \<th>Type</th>\HTML<-1> = \<th>ABC</th>\HTML<-1> = \<th>Code</th>\HTML<-1> = \<th>D&eacute;signation</th>\HTML<-1> = \<th>No</th>\HTML<-1> = \<th>Etat</th>\HTML<-1> = \<th>No</th>\HTML<-1> = \<th>Qt&eacute;</th>\HTML<-1> = \<th>PU</th>\HTML<-1> = \<th>Co&ucirc;t</th>\HTML<-1> = \<th>Co&ucirc;t Prod</th>\HTML<-1> = \<th>No<br/>OF</th>\HTML<-1> = \<th>PU</th>\HTML<-1> = \<th>Co&ucirc;t</th>\HTML<-1> = \<th>Co&ucirc;t Prod</th>\HTML<-1> = \<th>No<br/>OF</th>\HTML<-1> = \</tr>\HTML<-1> = \</thead><tbody>\HTML<-1> = \<tr class="lig1"><td></td><td></td>\HTML<-1> = \<td>T370366-0204-A0</td><td></td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>76300</td><td align=right></td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right></td><td align=right></td><td align=right>0.00</td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="lig0"><td>MS</td><td></td>\HTML<-1> = \<td>1041</td><td>Bouchon AMORIM</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>76300</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>76300</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="ligtot"><td colspan="8">Total MS</td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \<tr class="lig1"><td>N</td><td></td>\HTML<-1> = \<td>0000750-R1052-0</td><td>Capsule R1052-0</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>76300</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>76300</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="lig0"><td>N</td><td></td>\HTML<-1> = \<td>6X75CL.DBT.SS.CR</td><td>CARTON DE 6 BTL DE 0.75</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>12743</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>12743</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="lig1"><td>N</td><td></td>\HTML<-1> = \<td>B01.001</td><td>Bouteille 0.75 all&eacute;g&eacute;e</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>76300</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>76300</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="lig0"><td>N</td><td></td>\HTML<-1> = \<td>P2E.EURO</td><td>Palette EURO<br/>80x120<br/>24kg &agrave; vide</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>130</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>130</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="ligtot"><td colspan="8">Total N</td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \<tr class="lig1"><td>P</td><td>2013</td>\HTML<-1> = \<td>U370018-0000B-1</td><td>PINOT GRIS<br/>QUALITE SYSTEM U<br/>MILLESIME 2013</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>573</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>574</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="ligtot"><td></td><td colspan="7">Total 2013</td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="ligtot"><td colspan="8">Total P</td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \</tr>\HTML<-1> = \</tbody>\HTML<-1> = \<tfoot><tr><td colspan="8">Total G&eacute;n&eacute;ral </td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \</tr><tr><td colspan="8"></td><td></td><td></td><td colspan="2" align=center>0</td><td></td><td></td><td colspan="2" align=center>0</td>\HTML<-1> = \</tr>\HTML<-1> = \</tfoot>\HTML<-1> = \</table>\HTML<-1> = \</div>\HTML<-1> = \</body>\HTML<-1> = \</html>\W$HTML.DATA = HTML**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000DFADEMO.FINANCIALS.DASHBOARD0c2SUBROUTINE DEMO.FINANCIALS.DASHBOARD** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*WEB$TITLE='Demo Company, Financial Picture'WEB.FORM.NAME='DEMO.FINANCIALS.DASHBOARD'W$TYPE='HTML'W$TITLE='Demo Financial Company'W$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.CONTROL' TO FILE ELSE STOPNOV15=ICONV('11-15-15','D')TODAY=DATE()IF TODAY > NOV15 THEN   TODAY=NOV15   TIME.DATE=OCONV(TIME(),'MTHS'):' ':OCONV(TODAY,'D4') END ELSE   TIME.DATE=TIMEDATE() ENDOTODAY=OCONV(TODAY,'D4-')TODAY.MO=OTODAY[1,2]+0TODAY.YYYY=OTODAY[7,4]IF INDEX(TIME.DATE,'CALCULATIONS THROUGH',1) THEN   * LAST CALCULATION WAS FOR END OF LAST YEAR   DASHBOARD.YYYY=TODAY.YYYY-1 END ELSE DASHBOARD.YYYY=TODAY.YYYYIF LEN(WIDGET.USER.DATA(1)) = 4 THEN   WRITE WIDGET.USER.DATA(1) ON FILE, 'DASHBOARD.YYYY' END ELSE   WIDGET.USER.DATA(1)=DASHBOARD.YYYY ENDCONVS=''LAST.YYYY=TODAY.YYYY-1LAST.EOM=ICONV(TODAY.MO:'-01-':TODAY.YYYY,'D')-1*** BUILD FRESH STATIC DATA IF A NEW RUN DATE*READ LAST.BUILT FROM FILE, 'LAST.STATIC.BUILD' ELSE LAST.BUILT=''IF LAST.BUILT <> DATE() THEN   CALL BUILD.DEMO.FINANCIAL.PICTURE(TODAY.YYYY,TODAY,LAST.EOM)   WRITE LAST.BUILT ON FILE, 'LAST.STATIC.BUILD' ENDREAD REC FROM FILE, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''** DEFAULT CONVERSIONS TO $FOR I = 4 TO 35   IF I < 29 OR I > 32 THEN      CONVS<I>='$'    END NEXT I* CHANGE THOSE THAT AREN'TCONVS<6>='%'; CONVS<10>='%'; CONVS<17>='%'; CONVS<24>='%'CONVS<12>='%'; CONVS<13>='%'; CONVS<14>='%'CONVS<19>='%'; CONVS<20>='%'; CONVS<21>='%'CONVS<26>='%'; CONVS<27>='%'; CONVS<28>='%'*MATWRITE WIDGET.USER.DATA ON FILE, 'TEST.LINK'*W$PRINTABLE=1W$PDFABLE=1OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE RETURNREAD HTML FROM FILE.WEB.FORMS, WEB.FORM.NAME ELSE HTML=''***USER.ID=G$USERID*W$TITLE:='  Demo Financials  -- last updated --  ':TIME.DATE**WRITE HTML ON FILE.WEB.FORMS, 'TEST.HTML'*** DYNAMIC VARIABLES**INSERT.FIELD=DB.REC<4>;  * CUSTOMER*IF INSERT.FIELD = '' THEN INSERT.FIELD='&nbsp;'*CALL SWAP(HTML,'~1~',INSERT.FIELD)FOR I = 1 TO 46   INSERT.FIELD=REC<I>IF INSERT.FIELD = '' THEN INSERT.FIELD=I   CONV=CONVS<I>   BEGIN CASE      CASE CONV = ''; NULL      CASE CONV = '$'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD2,$')      CASE CONV = '%'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD1'):'%'      CASE 1; INSERT.FIELD=OCONV(INSERT.FIELD,CONV)   END CASE   IF INSERT.FIELD = '' THEN INSERT.FIELD='&nbsp;'   CALL SWAP(HTML,'~':I:'~',INSERT.FIELD) NEXT I   *W$TEXT.DATA=HTMLIF 0 THEN; *IF TODAY.MO = 1 THEN   W$INPUT.PROMPT<1>='As of Date'   W$INPUT.TYPE<1> = "SELECT"   W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(1)   W$INPUT.UDPOS<1> = 1   W$INPUT.BUTTON<1> = "Apply"   W$INPUT.SELVALS<1>=TODAY.YYYY-1:CHAR(253):TODAY.YYYY   W$INPUT.SELOPTS<1>='12-31-':TODAY.YYYY-1:CHAR(253):OCONV(DATE(),'D4-')   ITIME=ICONV(FIELD(TIME.DATE,' ',1),'MT')   NEXT.TIME=ITIME+1800;  * 30 MINUTES   IF ABS(TIME()-NEXT.TIME) < 300 THEN;  * WITHIN 5 MINUTES TELL LONGER      NEXT.TIME+=1800    END   REFRESH.TIME=' - Wont refresh until app. ':OCONV(NEXT.TIME,'MTH')   IF DASHBOARD.YYYY = TODAY.YYYY THEN      * DECEMBER WILL REQUIRE A RECALC      W$INPUT.SELOPTS<1,1>:=REFRESH.TIME    END ELSE      * TODAY WILL REQUIRE A RECALC      W$INPUT.SELOPTS<1,2>:=REFRESH.TIME    END   * ENDWRITE HTML ON FILE.WEB.FORMS, 'LAST.':WEB.FORM.NAMERETURNEND000551SUB.SC.LIB.PIE0c2SUBROUTINE SUB.SC.LIB.PIE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Pie Demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*IF INDEX(G$WIDGET.NAME,'Progs',1) THEN  PIE.CNT = "PROG"  W$TITLE = "Source Code: Programs by Library"END ELSE  PIE.CNT = "LINES"  W$TITLE = "Source Code: Lines by Library"ENDW$TYPE = "FC3DPIE"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*DIM LIB.FILES(3), PROGS(3), LINES(3), LIBS(3)*LIBS(1) = "MVDB.SUBS"LIBS(2) = "RSS.BP"LIBS(3) = "WBPD"*MAT PROGS = 0; MAT LINES = 0*TOT.LINES = 0 ; TOT.PROGS = 0FOR N = 1 TO 3  OPEN LIBS(N) TO LIB.FILES(N) ELSE STOP 201, LIBS(N)  W$PIE.LABELS<1,N> = LIBS(N)  SELECT LIB.FILES(N)  LOOP    READNEXT ID ELSE EXIT    PROGS(N) += 1    IF PIE.CNT # "PROG" THEN      READ REC FROM LIB.FILES(N), ID THEN        LINES(N) += DCOUNT(REC, @AM)      END    END  REPEAT  TOT.LINES += LINES(N)  TOT.PROGS += PROGS(N)  IF PIE.CNT = "PROG" THEN    W$PIE.VALUES<1,N> = PROGS(N)  END ELSE    W$PIE.VALUES<1,N> = LINES(N)  END NEXT N*W$PIE.CAPTION = "By Program File"IF PIE.CNT = "PROG" THEN  W$CHART.OPTIONS<-1> = "subCaption='":TOT.PROGS:" Total Programs'"  W$CHART.OPTIONS<-1> = "showValues='1'"END ELSE  W$CHART.OPTIONS<-1> = "subCaption='":OCONV(TOT.LINES,'MD,'):" Total Lines'"END*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000512SUB.DEMO.NET.INCOME.CHART0c2SUBROUTINE SUB.DEMO.NET.INCOME.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Net Income"W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''YEARS=REC<67>NET.INCOMES=REC<75>MAX.YEARS=DCOUNT(YEARS,CHAR(253))FIRST.YEAR=YEARS<1,1>CURRENT.YEAR=YEARS<1,MAX.YEARS>*W$BAR.CAPTION = "Net Income From ":FIRST.YEAR:' to ':CURRENT.YEARW$BAR.XMEMO = "Year"W$BAR.YMEMO = "Net Income"**MAX.INCOME=0FOR N = 1 TO MAX.YEARS  NET.INCOME=OCONV(REC<36-N>,'MD02')  IF NET.INCOME > MAX.INCOME THEN MAX.INCOME=NET.INCOME  YEAR=YEARS<1,N>  W$BAR.VALUES<1,N> = NET.INCOME  W$BAR.XLABELS<1,N> = YEARNEXT N* ROUND MAX INCOME UP TO THE NEXT 250000MAX.INCOME+=250000MAX.INCOME=INT(MAX.INCOME/250000) * 250000W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.INCOME:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'W$CHART.OPTIONS<-1>='forceDecimals="1"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'**RETURN000068REBUILD.FILES0c2FILE='SALES'; EVERY.NUM=6; GOSUB MOVE.ITFILE='AR'; EVERY.NUM=3; GOSUB MOVE.ITFILE='AP000277SUB.GRID.TEST0c2SUBROUTINE SUB.GRID.TEST** Copyright (c) 2010 SB, Inc. All rights reserved.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Untitled TABLE"W$TYPE = "TABLE"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN** Set up column labelsW$TABLE.COL.LABELS<1,1> = "Column 1"W$TABLE.COL.LABELS<1,2> = "Column 2"** Column justification = left, right, centerW$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "right"** Table RowsFOR ROW = 1 TO 5  W$TABLE.DATA<ROW,1> = ROW:",1"  W$TABLE.DATA<ROW,2> = ROW:",2"NEXT ROW** TotalsW$TABLE.TOTALS<1,1> = "2"W$TABLE.TOTALS<1,2> = "4"RETURN000255SUB.DEMO.DRILLDOWN0c2SUBROUTINE SUB.DEMO.DRILLDOWN** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Demo drill-down widget*INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TEXT"W$TITLE = "Drilldown Widget"W$WIDTH = 3W$PRINTABLE = 1*IF G$QUERYMODE = 1 THEN RETURN*W$TEXT.DATA = "Source Widget: ":G$DD.REFERRERW$TEXT.DATA<-1> = " "W$TEXT.DATA<-1> = "Contents of WIDGET.USER.DATA:"W$TEXT.DATA<-1> = " "FOR X = 1 TO 100  IF WIDGET.USER.DATA(X) # "" THEN    W$TEXT.DATA<-1> = "WIDGET.USER.DATA(":X:") = ":WIDGET.USER.DATA(X)  ENDNEXT X*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000314SUB.PORTAL.SETUP.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.SETUP.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Portal Setup Instructions"     ;* Title for widget title barW$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here*OPEN '','WEB.FORMS' TO FI.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FI.WEB.FORMS, 'PORTAL.SETUP.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00552DSUB.PORTAL.SALES.REPORT.SETUP0c2SUBROUTINE SUB.PORTAL.SALES.REPORT.SETUP** DEFINE PARAMETERS FOR PORTAL SALES REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOP*W$TITLE = "Portal Sales Report Setup"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*EQUATE ACCOUNT TO WIDGET.USER.DATA(1)EQUATE REPORT.FILE TO WIDGET.USER.DATA(2)EQUATE SALE.DATE.DICT TO WIDGET.USER.DATA(3)EQUATE SALE.MONTH.DICT TO WIDGET.USER.DATA(4)EQUATE SALE.YEAR.DICT TO WIDGET.USER.DATA(5)EQUATE SALE.AMOUNT.DICT TO WIDGET.USER.DATA(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO WIDGET.USER.DATA(7)EQUATE SALESMAN.DICT TO WIDGET.USER.DATA(8)EQUATE BRANCH.DICT TO WIDGET.USER.DATA(9)EQUATE REGION.DICT TO WIDGET.USER.DATA(10)EQUATE SALE.DATE.AMC TO WIDGET.USER.DATA(11)EQUATE SALE.AMOUNT.AMC TO WIDGET.USER.DATA(12)EQUATE SALE.AMOUNT.CONV TO WIDGET.USER.DATA(13)EQUATE SALE.AMOUNT.COOR TO WIDGET.USER.DATA(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO WIDGET.USER.DATA(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO WIDGET.USER.DATA(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO WIDGET.USER.DATA(17)EQUATE SALESMAN.AMC TO WIDGET.USER.DATA(18)EQUATE SALESMAN.TFILE TO WIDGET.USER.DATA(19)EQUATE BRANCH.AMC TO WIDGET.USER.DATA(20)EQUATE BRANCH.TFILE TO WIDGET.USER.DATA(21)EQUATE REGION.AMC TO WIDGET.USER.DATA(22)EQUATE REGION.TFILE TO WIDGET.USER.DATA(23)OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE   MESSAGE='No Platform Type Defined'   GOTO MESSAGE.DISPLAY ENDFIRST.TIME=0IF G$SUBMITTED <> '1' THEN   IF PLATFORM = 'UV' OR PLATFORM = 'UD' THEN      OPEN '','UD.DICT.DASHBOARD.CLOSING.STATS' TO FI THEN         OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END      OPEN '','UD.DICT.SALES' TO FI THEN         OPEN 'DICT','PORTAL.SALES' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END      OPEN '','UD.DICT.AR' TO FI THEN         OPEN 'DICT','PORTAL.AR' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END      OPEN '','UD.DICT.AP' TO FI THEN         OPEN 'DICT','PORTAL.AP' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END    END   MATREAD WIDGET.USER.DATA FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE      MAT WIDGET.USER.DATA = ''      FIRST.TIME=1    END   IF NOT(FIRST.TIME) THEN      GOSUB VALIDATE.PREVIOUS.INPUTS    END END ELSE   GOSUB VALIDATE.PREVIOUS.INPUTS   MATWRITE WIDGET.USER.DATA ON FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ENDGOSUB SET.PROMPTSRETURN*SET.PROMPTS:*W$INPUT.PROMPT<1> = "Sales File Account"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = ACCOUNT*W$INPUT.PROMPT<2> = "Name Of Sales File"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = REPORT.FILE*W$INPUT.PROMPT<3> = "Date Of Sale Dict Name"W$INPUT.TYPE<3> = 'TEXT'W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = SALE.DATE.DICT*W$INPUT.PROMPT<4> = "Month Of Sale Dict Name"W$INPUT.TYPE<4> = 'TEXT'W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = SALE.MONTH.DICT*W$INPUT.PROMPT<5> = "Year Of Sale Dict Name"W$INPUT.TYPE<5> = 'TEXT'W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = SALE.YEAR.DICT*W$INPUT.PROMPT<6> = "Amount Of Sale Dict Name"W$INPUT.TYPE<6> = 'TEXT'W$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = SALE.AMOUNT.DICT*W$INPUT.PROMPT<7> = "Cost Of Sale Dict Name"W$INPUT.TYPE<7> = 'TEXT'W$INPUT.UDPOS<7> = 7W$INPUT.DEFAULT<7> = COST.OF.SALE.AMOUNT.DICT*W$INPUT.PROMPT<8> = "Salesman Dict Name"W$INPUT.TYPE<8> = 'TEXT'W$INPUT.UDPOS<8> = 8W$INPUT.DEFAULT<8> = SALESMAN.DICT*W$INPUT.PROMPT<9> = "Branch Dict Name"W$INPUT.TYPE<9> = 'TEXT'W$INPUT.UDPOS<9> = 9W$INPUT.DEFAULT<9> = BRANCH.DICT*W$INPUT.PROMPT<10> = "Region Dict Name"W$INPUT.TYPE<10> = 'TEXT'W$INPUT.UDPOS<10> = 10W$INPUT.DEFAULT<10> = REGION.DICT*RETURN*VALIDATE.PREVIOUS.INPUTS:*MESSAGE=''BEGIN CASE   CASE PLATFORM = 'D3'      MD.TYPE='MD'   CASE PLATFORM = 'JB'      MD.TYPE='MD'   CASE 1      MD.TYPE='VOC'END CASEOPEN '',MD.TYPE TO FI.MD ELSE   MESSAGE='Unable to open ':MD.TYPE:' for validation purposes'   GOTO MESSAGE.DISPLAY ENDVALID.ACCOUNT=1IF ACCOUNT <> '' THEN**   EXECUTE "SET-FILE ":ACCOUNT:" ":MD.TYPE:' QFILE' CAPTURING DUMMY     QFILE.NAME='QFILE'   CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)   IF QFILE.NAME = '' THEN      MESSAGE<-1>=ACCOUNT:' is not a valid account!'      VALID.ACCOUNT=0    END**   IF PLATFORM = 'UD' THEN**      QFILE.NAME='QFILE'**      CALL CREATE.UD.QPOINTER(ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)**      IF QFILE.NAME = '' THEN**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END ELSE**      WRITE 'Q':@AM:ACCOUNT:@AM:MD.TYPE ON FI.MD, 'QFILE'**      VALID.ACCOUNT=1**      OPEN '','QFILE' TO FI.ACCOUNT.MD ELSE**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END END ELSE   VALID.ACCOUNT=0   MESSAGE<-1>='No Account defined!' ENDIF REPORT.FILE <> '' THEN   IF NOT(VALID.ACCOUNT) THEN      MESSAGE<-1>='Unable to verify ':REPORT.FILE:' file because account not properly defined!'      VALID.REPORT.FILE=0    END ELSE      VALID.REPORT.FILE=1      QFILE.NAME='QFILE'      CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)      IF QFILE.NAME = '' THEN         MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'         VALID.REPORT.FILE=0       END**      EXECUTE "SET-FILE ":ACCOUNT:" ":REPORT.FILE:' QFILE' CAPTURING DUMMY**       IF PLATFORM = 'UD' THEN**          QFILE.NAME='QFILE'**          CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)**          IF QFILE.NAME = '' THEN**             MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**             VALID.REPORT.FILE=0**           END**        END ELSE**         WRITE 'Q':@AM:ACCOUNT:@AM:REPORT.FILE ON FI.MD, 'QFILE'**         OPEN '','QFILE' TO FI.REPORT.FILE ELSE**            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**            VALID.REPORT.FILE=0**          END**       END      IF VALID.REPORT.FILE THEN         HAVE.QFILE.REC=1         READ QFILE.REC FROM FI.MD, 'QFILE' ELSE            HAVE.QFILE.REC=0            MESSAGE<-1>='Unable to create QFILE pointer to ':ACCOUNT:' ':REPORT.FILE          END         IF HAVE.QFILE.REC THEN            WRITE QFILE.REC ON FI.MD, 'DASHBOARD.SALES.FILE'            OPEN 'DICT','DASHBOARD.SALES.FILE' TO FI.DICT.REPORT.FILE ELSE                MESSAGE<-1>='Unable to open DICT ':REPORT.FILE             END          END       END    END END ELSE   MESSAGE<-1>='No Sales Report file defined!' ENDIF SALE.DATE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Date Of Sale Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.DATE.DICT:' Because No Sales File!'    END ELSE      READ SALE.DATE.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.DATE.DICT ELSE         SALE.DATE.DICT.REC=''         MESSAGE<-1>=SALE.DATE.DICT:' Does Not Exist!'       END      IF SALE.DATE.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=SALE.DATE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF SALE.DATE.DICT.REC<7>[1,1] <> 'D' AND SALE.DATE.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               SALE.DATE.AMC=SALE.DATE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF SALE.DATE.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               SALE.DATE.AMC=SALE.DATE.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               SALE.DATE.AMC=SALE.DATE.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.DATE.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF SALE.AMOUNT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Sale Amount Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.AMOUNT.DICT:' Because No Sales File!'    END ELSE      READ SALE.AMOUNT.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.AMOUNT.DICT ELSE         SALE.AMOUNT.DICT.REC=''         MESSAGE<-1>=SALE.AMOUNT.DICT:' Does Not Exist!'       END      IF SALE.AMOUNT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=SALE.AMOUNT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=SALE.AMOUNT.DICT.REC<7>[1,2]               DICT.8.1.2=SALE.AMOUNT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               SALE.AMOUNT.AMC=SALE.AMOUNT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=SALE.AMOUNT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               SALE.AMOUNT.AMC=SALE.AMOUNT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               SALE.AMOUNT.AMC=SALE.AMOUNT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.AMOUNT.DICT:' Does Not Appear To Be An Amount!'          END       END    ENDIF COST.OF.SALE.AMOUNT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Cost of Sale Amount Dictionary Defined - Gross Profit and Margin reporting will not be possible'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":COST.OF.SALE.AMOUNT.DICT:' Because No Sales File!'    END ELSE      READ COST.OF.SALE.AMOUNT.DICT.REC FROM FI.DICT.REPORT.FILE, COST.OF.SALE.AMOUNT.DICT ELSE         COST.OF.SALE.AMOUNT.DICT.REC=''         MESSAGE<-1>=COST.OF.SALE.AMOUNT.DICT:' Does Not Exist!'       END      IF COST.OF.SALE.AMOUNT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=COST.OF.SALE.AMOUNT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=COST.OF.SALE.AMOUNT.DICT.REC<7>[1,2]               DICT.8.1.2=COST.OF.SALE.AMOUNT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               COST.OF.SALE.AMOUNT.AMC=COST.OF.SALE.AMOUNT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=COST.OF.SALE.AMOUNT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               COST.OF.SALE.AMOUNT.AMC=COST.OF.SALE.AMOUNT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               COST.OF.SALE.AMOUNT.AMC=COST.OF.SALE.AMOUNT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':COST.OF.SALE.AMOUNT.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF SALE.MONTH.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Month Of Sale Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.MONTH.DICT:' Because No Sales File!'    END ELSE      READ SALE.MONTH.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.MONTH.DICT ELSE         SALE.MONTH.DICT.REC=''         MESSAGE<-1>=SALE.MONTH.DICT:' Does Not Exist!'       END      IF SALE.MONTH.DICT.REC <> '' THEN         VALID.MONTH.DICT=1         DICT.TYPE=SALE.MONTH.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF SALE.MONTH.DICT.REC<7>[1,1] <> 'D' AND SALE.MONTH.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.MONTH.DICT=0                END               SALE.MONTH.AMC=SALE.MONTH.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF SALE.MONTH.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.MONTH.DICT=0                END               SALE.MONTH.AMC=SALE.MONTH.DICT.REC<2>            CASE 1               VALID.MONTH.DICT=0               SALE.MONTH.AMC=SALE.MONTH.DICT.REC<2>         END CASE         IF NOT(VALID.MONTH.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.MONTH.DICT:' Does Not Appear To Be A Date Month!'          END       END    END ENDIF SALE.YEAR.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Year Of Sale Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.YEAR.DICT:' Because No Sales File!'    END ELSE      READ SALE.YEAR.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.YEAR.DICT ELSE         SALE.YEAR.DICT.REC=''         MESSAGE<-1>=SALE.YEAR.DICT:' Does Not Exist!'       END      IF SALE.YEAR.DICT.REC <> '' THEN         VALID.YEAR.DICT=1         DICT.TYPE=SALE.YEAR.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF SALE.YEAR.DICT.REC<7>[1,1] <> 'D' AND NOT(INDEX(SALE.YEAR.DICT.REC<8>,'D',1)) THEN                  VALID.YEAR.DICT=0                END               SALE.YEAR.AMC=SALE.YEAR.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               ATT2=SALE.YEAR.DICT.REC<2>               IF INDEX(ATT2,"'D",1) OR INDEX(ATT2,'"D',1) OR ATT2[1,1] = 'D' THEN                  VALID.YEAR.DICT=1                END ELSE                  VALID.YEAR.DICT=0                END            CASE 1               VALID.YEAR.DICT=0               SALE.YEAR.AMC=SALE.YEAR.DICT.REC<2>         END CASE         IF NOT(VALID.YEAR.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.YEAR.DICT:' Does Not Appear To Be A Date Year!'          END       END    END ENDIF SALESMAN.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Salesman Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALESMAN.DICT:' Because No Sales File!'    END ELSE      READ SALESMAN.DICT.REC FROM FI.DICT.REPORT.FILE, SALESMAN.DICT ELSE         SALESMAN.DICT.REC=''         MESSAGE<-1>=SALESMAN.DICT:' Does Not Exist!'       END      IF SALESMAN.DICT.REC <> '' THEN         VALID.SALESMAN.DICT=1         DICT.TYPE=SALESMAN.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF SALESMAN.DICT.REC<7>[1,1] <> 'T' AND SALESMAN.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.SALESMAN.DICT=0                END ELSE                  IF SALESMAN.DICT.REC<7>[1,1] = 'T' THEN                     SALESMAN.TFILE=SALESMAN.DICT.REC<7>                   END ELSE                     SALESMAN.TFILE=SALESMAN.DICT.REC<8>                   END                END               SALESMAN.AMC=SALESMAN.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(SALESMAN.DICT.REC<3>,'TRANS',1) THEN                  VALID.SALESMAN.DICT=0                END ELSE                  SALESMAN.TFILE=SALESMAN.DICT.REC<3>                END               SALE.SALESMAN.AMC=SALESMAN.DICT.REC<2>            CASE 1               VALID.SALESMAN.DICT=0               SALE.SALESMAN.AMC=SALESMAN.DICT.REC<2>         END CASE         IF NOT(VALID.SALESMAN.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALESMAN.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDIF BRANCH.DICT <> '' THEN   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":BRANCH.DICT:' Because No Sales File!'    END ELSE      READ BRANCH.DICT.REC FROM FI.DICT.REPORT.FILE, BRANCH.DICT ELSE         BRANCH.DICT.REC=''         MESSAGE<-1>=BRANCH.DICT:' Does Not Exist!'       END      IF BRANCH.DICT.REC <> '' THEN         VALID.BRANCH.DICT=1         DICT.TYPE=BRANCH.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF BRANCH.DICT.REC<7>[1,1] <> 'T' AND BRANCH.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.BRANCH.DICT=0                END ELSE                  IF BRANCH.DICT.REC<7>[1,1] = 'T' THEN                     BRANCH.TFILE=BRANCH.DICT.REC<7>                   END ELSE                     BRANCH.TFILE=BRANCH.DICT.REC<8>                   END                END               BRANCH.AMC=BRANCH.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(BRANCH.DICT.REC<3>,'TRANS',1) THEN                  VALID.BRANCH.DICT=0                END ELSE                  BRANCH.TFILE=BRANCH.DICT.REC<3>                END               SALE.BRANCH.AMC=BRANCH.DICT.REC<2>            CASE 1               VALID.BRANCH.DICT=0               SALE.BRANCH.AMC=BRANCH.DICT.REC<2>         END CASE         IF NOT(VALID.BRANCH.DICT) THEN            MESSAGE<-1>='Dictionary Item ':BRANCH.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDIF REGION.DICT <> '' THEN   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":REGION.DICT:' Because No Sales File!'    END ELSE      READ REGION.DICT.REC FROM FI.DICT.REPORT.FILE, REGION.DICT ELSE         REGION.DICT.REC=''         MESSAGE<-1>=REGION.DICT:' Does Not Exist!'       END      IF REGION.DICT.REC <> '' THEN         VALID.REGION.DICT=1         DICT.TYPE=REGION.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF REGION.DICT.REC<7>[1,1] <> 'T' AND REGION.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.REGION.DICT=0                END ELSE                  IF REGION.DICT.REC<7>[1,1] = 'T' THEN                     REGION.TFILE=REGION.DICT.REC<7>                   END ELSE                     REGION.TFILE=REGION.DICT.REC<8>                   END                END               REGION.AMC=REGION.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(REGION.DICT.REC<3>,'TRANS',1) THEN                  VALID.REGION.DICT=0                END ELSE                  REGION.TFILE=REGION.DICT.REC<3>                END               SALE.REGION.AMC=REGION.DICT.REC<2>            CASE 1               VALID.REGION.DICT=0               SALE.REGION.AMC=REGION.DICT.REC<2>         END CASE         IF NOT(VALID.REGION.DICT) THEN            MESSAGE<-1>='Dictionary Item ':REGION.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDCREATE.INDEXES=1IF MESSAGE = '' THEN   MESSAGE='Sales Report parameters properly defined!' END ELSE   IF INDEX(MESSAGE,'!',1) THEN      MESSAGE=INSERT(MESSAGE,1,0,0,'!!! ERRORS !!!')      CREATE.INDEXES=0    END ENDIF CREATE.INDEXES THEN   * CREATE PIPE DICTIONARY ITEM   IF PLATFORM = 'D3' OR PLATFORM = 'QM' OR PLATFORM = 'JB' THEN      PIPE='A'      PIPE<2>=0      PIPE<3>=' '      PIPE<8>='F;C|'      PIPE<9>='L'      PIPE<10>=1    END ELSE      PIPE='I'      PIPE<2>='"|"'      PIPE<4>='|'      PIPE<5>='1L'      PIPE<6>='S'    END   WRITE PIPE ON FI.DICT.REPORT.FILE, 'PIPE'   *   ** INDEX LOGIC   *   BEGIN CASE      CASE PLATFORM = 'D3'         INDEX.TEST='A':SALE.DATE.AMC:'(DY):':SALE.DATE.AMC:'(DM)'         READ FILE.DEF.REC FROM FI.DICT.REPORT.FILE, REPORT.FILE ELSE FILE.DEF.REC=''         IF FILE.DEF.REC <> '' AND NOT(INDEX(FILE.DEF.REC<8>,INDEX.TEST,1)) THEN            MESSAGE<-1>='Creating Indexes'            CMND1="CREATE-INDEX DASHBOARD.SALES.FILE A":SALE.DATE.AMC            EXECUTE CMND1 CAPTURING RESULT1            CMND2="CREATE-INDEX DASHBOARD.SALES.FILE ":INDEX.TEST            EXECUTE CMND2 CAPTURING RESULT2          END      CASE 1         EXECUTE "CREATE-INDEX DASHBOARD.SALES.FILE ":SALE.DATE.DICT CAPTURING RESULT1   END CASE ENDGOSUB MESSAGE.DISPLAYRETURN*MESSAGE.DISPLAY:*MAX.MSG=DCOUNT(MESSAGE,CHAR(254))W$HTML.DATA='<h3>':MESSAGE<1>IF MAX.MSG > 1 THEN   FOR MSG.NO = 2 TO MAX.MSG      W$HTML.DATA:='<br>':MESSAGE<MSG.NO>    NEXT MSG.NO ENDW$HTML.DATA:='</h3>'RETURNEND00099ASUB.SC.LIB.COL0c2    SUBROUTINE SUB.SC.LIB.COL* Changed by PORTBAS -> SUBROUTINE SUB.SC.LIB.PIE* @(#) SUB.SC.LIB.COL Ported to jBASE 17:55:32  08 JUL 2015** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Pie Demo**#MAKE# RL $OPTIONS D3    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Source Code: Lines by Program"    W$TYPE = "FCBAR2D"    W$WIDTH = 2*    IF G$QUERYMODE THEN RETURN*    IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "1"    IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = "1"    N = WIDGET.USER.DATA(1)*    IF WIDGET.USER.DATA(2) = "1" THEN        CNT.TYPE = "LINES"    END ELSE        CNT.TYPE = "BYTES"    END*    W$BAR.LABELS<1> = "Lines by Program"*    DIM LIB.FILES(3), LIBS(3)*    LIBS(1) = "RSS.BP"    LIBS(2) = "WBPD"    LIBS(3) = "MVDB.SUBS"*    W$TITLE := " (":LIBS(N):")"*    TOT.LINES = 0 ; TOT.PROGS = 0    OPEN LIBS(N) TO LIB.FILES(N) ELSE STOP 201, LIBS(N)    SELECT LIB.FILES(N)    LOOP        READNEXT ID ELSE EXIT        READ REC FROM LIB.FILES(N), ID ELSE REC = ""        IF CNT.TYPE = "LINES" THEN            LINES = DCOUNT(REC, @AM)        END ELSE            LINES = LEN(REC)        END        W$BAR.XLABELS<1,-1> = ID        W$BAR.VALUES<1,-1> = LINES        TOT.PROGS += 1        TOT.LINES += LINES    REPEAT*    IF TOT.PROGS > 0 THEN        AVG = INT( TOT.LINES / TOT.PROGS )    END ELSE AVG = 0*    W$BAR.XMEMO = "Programs"    IF CNT.TYPE = "LINES" THEN        W$BAR.YMEMO = "Lines of Code"    END ELSE        W$BAR.YMEMO = "Bytes of Code"    END    W$BAR.TREND.BEG = AVG    W$BAR.TREND.OPTS = "color='20FF20' thickness='3' showOnTop='1'"*    W$CHART.HEIGHT = 200 + 8 * TOT.PROGS    W$CHART.OPTIONS<-1> = 'numDivLines="3"'*    W$BAR.CAPTION = "In Program File ":LIBS(N)*    W$INPUT.PROMPT<1> = "Program File"    W$INPUT.TYPE<1> = "SELECT"    W$INPUT.SELOPTS<1> = "RSS Feeds (RSS.BP)":@VM:"Includes (WBPD)":@VM:"Widget Subs (MVDB.SUBS)"    W$INPUT.SELVALS<1> = "1":@VM:"2":@VM:"3"    W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(1)    W$INPUT.UDPOS<1> = 1      ;* WIDGET.USER.DATA(1)*    W$INPUT.PROMPT<2> = "Count"    W$INPUT.TYPE<2> = "SELECT"    W$INPUT.SELOPTS<2> = "Lines of code":@VM:"Bytes of code"    W$INPUT.SELVALS<2> = "1":@VM:"2"    W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)    W$INPUT.UDPOS<2> = 2      ;* WIDGET.USER.DATA(2)    W$INPUT.BUTTON = "Go"*    INCLUDE WBPD SOURCE.VIEW.ICON*    RETURN000708SUB.DEMO.SS.COL0c2SUBROUTINE SUB.DEMO.SS.COL** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Single Series Column Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Monthly Unit Sales"W$TYPE = "FCCOLUMN2D"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "2D"BEGIN CASE  CASE WIDGET.USER.DATA(1) = "2D"    W$TYPE = "FCCOLUMN2D"  CASE WIDGET.USER.DATA(1) = "3D"    W$TYPE = "FCCOLUMN3D"  CASE WIDGET.USER.DATA(1) = "BAR"    W$TYPE = "FCBAR2D"  CASE WIDGET.USER.DATA(1) = "AREA2D"    W$TYPE = "FCAREA2D"  CASE 1    W$TYPE = WIDGET.USER.DATA(1)END CASE*W$BAR.CAPTION = "Revenue by Branch for Period 2008-08"W$BAR.XMEMO = "Branch"W$BAR.YMEMO = "Sales Revenue"*UNITS = ""UNITS<1> = "15177"UNITS<2> = "11700"UNITS<3> = "12833"UNITS<4> = "13529"UNITS<5> = "21953"UNITS<6> = "35792"UNITS<7> = "35202"UNITS<8> = "28206"UNITS<9> = "23168"UNITS<10> = "42657"UNITS<11> = "35595"UNITS<12> = "28328"UNITS<13> = "297674"UNITS<14> = "26111"UNITS<15> = "243295"UNITS<16> = "323846"UNITS<17> = "42615"UNITS<18> = "-29"UNITS<19> = "38787"UNITS<20> = "71023"UNITS<21> = "130106"*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = UNITS<N>*  W$BAR.XLABELS<1,N> = OCONV(ICONV(N:"/1",'D'),'DMA')[1,3]  W$BAR.XLABELS<1,N> = N  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = UNITS<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = NNEXT N*W$INPUT.PROMPT = "Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "2D Column":@VM:"3D Column":@VM:"Bar Chart":@VM:"2D Area Chart"W$INPUT.SELVALS = "2D":@VM:"3D":@VM:"BAR":@VM:"AREA2D"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000B92SUB.DEMO.MAP.USA0c2SUBROUTINE SUB.DEMO.MAP.USA** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: US Map demonstration* 6-1-15 ZUMASYS CHANGE MAP ID DELIMITER FROM * TO #**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - States by Alphabet"W$TYPE = "USAMAP"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'READ STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ''CONVERT "," TO @VM IN STATE.NAMES*W$CHART.OPTIONS<-1> = 'animation="0"'W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'W$CHART.OPTIONS<-1> = 'legendShadow="1"'W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'*IF WIDGET.USER.DATA(1) # "" THEN  * This is a drill-down run on this widget - we are now to display info for a specific state  OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'  EXECUTE 'SELECT MVDB.MAP.DATA WITH NAME = "':WIDGET.USER.DATA(2):'"' CAPTURING JUNK  N = 0  LOOP    READNEXT ID ELSE EXIT    READ REC FROM F.MVDB.MAP.DATA, ID THEN      N += 1      NAME = REC<2>*6-1-15*      W$MAP.IDS<1,N> = FIELD( ID, '*', 2 )      W$MAP.IDS<1,N> = FIELD( ID, '#', 2 ); *6-1-15      W$MAP.VALUES<1,N> = (SEQ(REC<2>[1,1]) - SEQ('A')) + 1      W$MAP.VALUE.TOOLTEXT<1,N> = NAME      W$FW.DD.WIDGET<1,N> = "Drilldown Demo"      W$FW.DD.UD.POS<1,N,1> = 1*6-1-15*      W$FW.DD.UD.VAL<1,N,1> = FIELD(ID,'*',1)      W$FW.DD.UD.VAL<1,N,1> = FIELD(ID,'#',1); *6-1-15*      W$FW.DD.UD.POS<1,N,2> = 2      W$FW.DD.UD.VAL<1,N,2> = ID      W$FW.DD.UD.POS<1,N,3> = 3      W$FW.DD.UD.VAL<1,N,3> = WIDGET.USER.DATA(2)      W$FW.DD.UD.POS<1,N,4> = 4      W$FW.DD.UD.VAL<1,N,4> = REC<2>    END  REPEAT  W$LINK.LABEL<1,1> = "Return to USA Map"  W$LINK.LOCATION<1,1> = "C"  W$LINK.UD.POS<1,1> = 1  W$LINK.UD.VAL<1,1> = ""  W$LINK.ICON<1,1> = "arrow_left.png"  W$LINK.ICON.TXT<1,1> = "Back to US Map"  *  W$LINK.LABEL<1,2> = "Return to USA Map"  W$LINK.LOCATION<1,2> = "1"  W$LINK.UD.POS<1,2> = 1  W$LINK.UD.VAL<1,2> = ""  *  W$TITLE = "Demo - ":WIDGET.USER.DATA(1):" Counties by Alphabet"END ELSE ;* National map display  STATE.CNT = DCOUNT( STATE.NAMES<1>, @VM )  FOR N = 1 TO STATE.CNT    W$MAP.IDS<1,N> = STATE.NAMES<1,N>    W$MAP.VALUES<1,N> = (SEQ(STATE.NAMES<1,N>[1,1]) - SEQ('A')) + 1    W$MAP.VALUE.TOOLTEXT<1,N> := STATE.NAMES<2,N>:' (':STATE.NAMES<1,N>:')'    W$MAP.VALUE.DD<1,N> = 1 ;* Allow drill-down  NEXT NEND*W$MAP.RANGE.NAME<1,1> = "Early in Alphabet"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "10"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Middle of Alphabet"W$MAP.RANGE.LOW<1,2> = "10"W$MAP.RANGE.HIGH<1,2> = "18"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Late in Alphabet"W$MAP.RANGE.LOW<1,3> = "18"W$MAP.RANGE.HIGH<1,3> = "27"W$MAP.RANGE.COLOR<1,3> = "RED"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000355SUB.EMAILED.REPORT0c2SUBROUTINE SUB.EMAILED.REPORT** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEEQU REPORT.ID TO WIDGET.USER.DATA(1)EMAILED.REPORT=''IF REPORT.ID = '' THEN   EMAILED.REPORT='No report id found' END ELSE   OPEN '','MVDB.EMAILED.HTML' TO F.MVDB.EMAILED.HTML ELSE      EMAILED.REPORT='No MVDB.EMAILED.HTML file on system'    END   IF EMAILED.REPORT = '' THEN      READ EMAILED.REPORT FROM F.MVDB.EMAILED.HTML, REPORT.ID ELSE         EMAILED.REPORT='No report data found for ':REPORT.ID       END    END ENDW$TYPE='TEXT'W$TITLE='View TEXT report'IF INDEX(EMAILED.REPORT,'HTML',1) THEN   W$TYPE='HTML'   W$TITLE='View HTML report' ENDW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)IF G$QUERYMODE THEN RETURNW$PRINTABLE=1W$PDFABLE=1W$TEXT.DATA=EMAILED.REPORTRETURNEND000C87SUB.MAP.VARIABLE0c2SUBROUTINE SUB.MAP.VARIABLE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Variable Map* 6-1-15 ZUMASYS CHANGE MAP.DATA DELIMITER TO #** Modified by Peter Schellenbach of Zumasys 06-08-15:*  Changed test of ENUM after EXECUTE to test SYSTEM(11) instead.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Variable Map"W$TYPE = "MAP:World"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "World"*OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'*W$CHART.OPTIONS<-1> = 'animation="0"'W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'W$CHART.OPTIONS<-1> = 'legendShadow="1"'W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'*LAST.WTYPE = ""SELOPT.MAX = 0SELOPTX = 1EXECUTE \SSELECT MVDB.MAP.DATA BY NAME BY A1\ RETURNING ENUM CAPTURING ETXT*PJS 06-08-15*IF ENUM[1,3]="404" THENIF SYSTEM(11) THEN ; *PJS 06-08-15* LOOP  READNEXT ID ELSE ID="\\EOF" UNTIL ID="\\EOF" DO*6-1-15*  WTYPE = FIELD(ID,"*",1)  WTYPE = FIELD(ID,"#",1); *6-1-15  IF WTYPE # LAST.WTYPE THEN    SELOPT.MAX += 1    W$INPUT.SELOPTS<1,SELOPT.MAX> = WTYPE    IF WTYPE = WIDGET.USER.DATA(1) THEN SELOPTX = SELOPT.MAX    LAST.WTYPE = WTYPE  END REPEATEND*IF WIDGET.USER.DATA(2) = "NEXT" AND SELOPTX < SELOPT.MAX THEN SELOPTX += 1 WIDGET.USER.DATA(1) = W$INPUT.SELOPTS<1,SELOPTX>ENDIF WIDGET.USER.DATA(2) = "PREV" AND SELOPTX > 1 THEN SELOPTX -= 1 WIDGET.USER.DATA(1) = W$INPUT.SELOPTS<1,SELOPTX>ENDWIDGET.USER.DATA(2) = ""*EXECUTE \SSELECT MVDB.MAP.DATA BY NAME BY A1\ RETURNING ENUM CAPTURING ETXTMAPX = 0*PJS 06-08-15*IF ENUM[1,3]="404" THENIF SYSTEM(11) THEN ; *PJS 06-08-15* LOOP  READNEXT ID ELSE ID="\\EOF" UNTIL ID="\\EOF" DO*6-1-15*  WTYPE = FIELD(ID,"*",1)  WTYPE = FIELD(ID,"#",1); *6-1-15*  IF WTYPE # LAST.WTYPE THEN    W$INPUT.SELOPTS<1,-1> = WTYPE    LAST.WTYPE = WTYPE  END  IF WTYPE = WIDGET.USER.DATA(1) THEN    READ I FROM F.MVDB.MAP.DATA,ID THEN      MAPX += 1*6-1-15*      W$MAP.IDS<1,MAPX> = FIELD(ID,'*',2)      W$MAP.IDS<1,MAPX> = FIELD(ID,'#',2); *6-1-15      W$MAP.VALUES<1,MAPX> = (SEQ(I<1>[1,1]) - (SEQ('A')-1))      W$MAP.VALUE.TOOLTEXT<1,MAPX> := I<2>:' (':I<1>:')'    END  END REPEATEND*W$TYPE = "MAP:":WIDGET.USER.DATA(1)W$MAP.RANGE.NAME<1,1> = "Early in Alphabet"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "10"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Middle of Alphabet"W$MAP.RANGE.LOW<1,2> = "10"W$MAP.RANGE.HIGH<1,2> = "18"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Late in Alphabet"W$MAP.RANGE.LOW<1,3> = "18"W$MAP.RANGE.HIGH<1,3> = "27"W$MAP.RANGE.COLOR<1,3> = "RED"*W$INPUT.PROMPT = "Map Of"W$INPUT.TYPE = "SELECT"W$INPUT.SELVALS = W$INPUT.SELOPTSW$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*IF SELOPTX > 1 THEN W$LINK.LABEL<1,-1> = "Prev Map" W$LINK.LOCATION<1,-1> = 23 W$LINK.UD.POS<1,-1> = 2 W$LINK.UD.VAL<1,-1> = "PREV"END*IF SELOPTX < SELOPT.MAX THEN W$LINK.LABEL<1,-1> = "Next Map" W$LINK.LOCATION<1,-1> = 14 W$LINK.UD.POS<1,-1> = 2 W$LINK.UD.VAL<1,-1> = "NEXT"END*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000261UV.EXECUTE.STACKED.CMNDS0c2SUBROUTINE UV.EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,NUM.RETURNED,REPORT)*REPORT=''NUM.RETURNED=1IF STACKED.1 <> '' THEN   EXECUTE STACKED.1 RTNLIST STACKED.LIST CAPTURING NUM.RETURNED   NUM.RETURNED=TRIM(NUM.RETURNED<2>)   NUM.RETURNED=FIELD(NUM.RETURNED,' ',1)   IF NOT(NUM.RETURNED) THEN RETURN   EXECUTE STACKED.2 PASSLIST STACKED.LIST CAPTURING REPORT END ELSE   EXECUTE STACKED.2 CAPTURING REPORT ENDIF INDEX(REPORT,'0 records',1) THEN   IF DCOUNT(REPORT,@AM) < 5 THEN      NUM.RETURNED=0      REPORT=''    END ENDCONVERT '$,' TO '' IN REPORTRETURNEND000FCCSUB.DEMO.MS.COL0c2SUBROUTINE SUB.DEMO.MS.COL** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Multi Series Column Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Monthly Unit Sales"W$TYPE = "FCMSCOLUMN2D"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "2D"BEGIN CASE  CASE WIDGET.USER.DATA(1) = "2D"    W$TYPE = "FCMSCOLUMN2D"  CASE WIDGET.USER.DATA(1) = "3D"    W$TYPE = "FCMSCOLUMN3D"  CASE WIDGET.USER.DATA(1) = "BAR"    W$TYPE = "FCMSBAR2D"  CASE WIDGET.USER.DATA(1) = "AREA2D"    W$TYPE = "FCMSAREA2D"  CASE WIDGET.USER.DATA(1) = "LINE"    W$TYPE = "FCMSLINE"  CASE WIDGET.USER.DATA(1) = "STACKEDAREA"    W$TYPE = "FCSTACKEDAREA2D"  CASE WIDGET.USER.DATA(1) = "STACKEDCOLUMN2D"    W$TYPE = "FCSTACKEDCOLUMN2D"  CASE WIDGET.USER.DATA(1) = "STACKEDCOLUMN3D"    W$TYPE = "FCSTACKEDCOLUMN3D"  CASE WIDGET.USER.DATA(1) = "STACKEDBAR"    W$TYPE = "FCSTACKEDBAR2D"  CASE 1    W$TYPE = WIDGET.USER.DATA(1):"?"END CASE*W$BAR.LABELS<1> = "Regular"W$BAR.LABELS<2> = "Mid-Grade"W$BAR.LABELS<3> = "Premium"W$BAR.LABELS<4> = "Ethanol"*W$BAR.CAPTION = "Monthly Sales by Type"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Sales (USD)"*SALES = ""SALES<1> = "28452536"SALES<2> = "31208425"SALES<3> = "30245519"SALES<4> = "40425111"SALES<5> = "36515188"SALES<6> = "39144100"SALES<7> = "41655215"SALES<8> = "36615152"SALES<9> = "43944161"SALES<10> = "42251594"SALES<11> = "48833151"SALES<12> = "50122415"*TOT.SALES = SUM(SALES)*LARGEST = 0LARGEST.N = 0FOR N = 1 TO 12  W$BAR.VALUES<1,N> = OCONV(SALES<N>*.4,'MD02')  W$BAR.VALUES<2,N> = OCONV(SALES<N>*.3,'MD02')  W$BAR.VALUES<3,N> = OCONV(SALES<N>*.1,'MD02')  W$BAR.VALUES<4,N> = OCONV(SALES<N>*.2,'MD02')  W$BAR.XLABELS<1,N> = OCONV(N*30-15,'DMA')[1,3]  IF SALES<N> > LARGEST THEN LARGEST = SALES<N> ; LARGEST.N = N NEXT NDD.SALES = OCONV(TOT.SALES*.4,'MD02')DD.SALES<2> = OCONV(TOT.SALES*.3,'MD02') DD.SALES<3> = OCONV(TOT.SALES*.1,'MD02') DD.SALES<4> = OCONV(TOT.SALES*.2,'MD02') **FOR N = 1 TO 4**  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"**  W$FW.DD.UD.POS<1,N,1> = 1**  W$FW.DD.UD.VAL<1,N,1> = DD.SALES<N>**  W$FW.DD.UD.POS<1,N,2> = 2**  W$FW.DD.UD.VAL<1,N,2> = W$BAR.LABELS<N> **NEXT N VAL.CNTR = 0FOR N = 1 TO 12**  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"**  W$FW.DD.UD.POS<1,N,1> = 1**  W$FW.DD.UD.VAL<1,N,1>=W$BAR.XLABELS<1,N>  FOR NN = 1 TO 4     VAL.CNTR+=1     W$FW.DD.WIDGET<1,VAL.CNTR> = "Drilldown Demo"     W$FW.DD.UD.POS<1,VAL.CNTR,1>=1     W$FW.DD.UD.VAL<1,VAL.CNTR,1>=VAL.CNTR     W$FW.DD.UD.POS<1,VAL.CNTR,2>=2**     W$FW.DD.UD.VAL<1,VAL.CNTR,2> = W$BAR.VALUES<NN,N>     W$FW.DD.UD.VAL<1,VAL.CNTR,2> = 'MS.VALUE'     W$FW.DD.UD.POS<1,VAL.CNTR,3> = 3**     W$FW.DD.UD.VAL<1,VAL.CNTR,3>=W$BAR.XLABELS<1,N>     W$FW.DD.UD.VAL<1,VAL.CNTR,3>='MS.LABEL'     W$FW.DD.UD.POS<1,VAL.CNTR,4> = 4     W$FW.DD.UD.VAL<1,VAL.CNTR,4>=W$BAR.LABELS<NN>   NEXT NN**  W$FW.DD.UD.POS<1,N,2> = 2**  W$FW.DD.UD.VAL<1,N,2> = W$BAR.LABELS<N>NEXT NMAX.VALUE = OCONV((LARGEST * .4)*1.1,'MD02') W$CHART.OPTIONS<-1> = "yAxisMaxValue='":MAX.VALUE:"'"*W$BAR.LABEL.OPTS<1> = "showValues='0'"W$BAR.LABEL.OPTS<2> = "showValues='0'"W$BAR.LABEL.OPTS<3> = "showValues='0'"W$BAR.LABEL.OPTS<4> = "showValues='0'"*IF W$TYPE = "FCMSAREA2D" THEN  W$BAR.LABEL.OPTS<1> := " areaAlpha='50'"  W$BAR.LABEL.OPTS<2> := " areaAlpha='70'"  W$BAR.LABEL.OPTS<3> := " areaAlpha='90'"  W$BAR.LABEL.OPTS<4> := " areaAlpha='40'"END*W$INPUT.PROMPT = "Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "2D Column":@VM:"3D Column":@VM:"Bar Chart":@VM:"2D Area Chart":@VM:"Line Chart":@VM:"Stacked Area Chart":@VM:"2D Stacked Column Chart":@VM:"3D Stacked Column Chart":@VM:"Stacked Bar Chart"W$INPUT.SELVALS = "2D":@VM:"3D":@VM:"BAR":@VM:"AREA2D":@VM:"LINE":@VM:"STACKEDAREA":@VM:"STACKEDCOLUMN2D":@VM:"STACKEDCOLUMN3D":@VM:"STACKEDBAR"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN001151SUB.PDF.CONFIG0c2SUBROUTINE SUB.PDF.CONFIG** Copyright (c) 2016 Zumasys, Inc. All rights reserved.* Description: PDF configuration widget.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "PDF Configuration"   ;* Title for widget title barW$TYPE = "HTML"                 ;* Filled in by editorW$WIDTH = 2                     ;* Full width (1=1/3, 2=2/3, 3=3/3)W$PDFABLE = 1                   ;* Enable conversion to PDF*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TEXT.INFO = "Unable to open MVDB.CONTROL"  RETURNENDW$TEXT.INFO = "" ;* No widget content at this point.*IF SYSTEM(91) THEN isWindows = 1 ELSE isWindows = 0 ;*QM, UV, UDIF isWindows THEN DIRSEP = '\' ELSE DIRSEP = '/'*READ SETTINGS.REC FROM F.MVDB.CONTROL, 'PDF.SETTINGS' ELSE SETTINGS.REC = ""IF G$SUBMITTED = 1 THEN  * Save PDF settings  FOR N = 1 TO 4    SETTINGS.REC<N> = WIDGET.USER.DATA(N)  NEXT N  OK = 0  IF SETTINGS.REC<1> THEN    * Validate NATIVE.CONTENT file    OPEN 'NATIVE.CONTENT' TO F.NATIVE.CONTENT ELSE      EXECUTE 'CREATE-FILE NATIVE.CONTENT DIRECTORY' CAPTURING OUTPUT ;*QM*    END    OPEN 'NATIVE.CONTENT' TO F.NATIVE.CONTENT THEN      * Verify that directory returned by browser matches directory referenced by NATIVE.CONTENT file      NATIVE.DIR = FILEINFO(F.NATIVE.CONTENT,2)      IF isWindows THEN CONVERT '/' TO '\' IN NATIVE.DIR ;*UV may have wrong separator!      IF NATIVE.DIR[LEN(NATIVE.DIR),1] = DIRSEP THEN NATIVE.DIR = NATIVE.DIR[1,LEN(NATIVE.DIR)-1]      IF isWindows THEN        OK = (OCONV(NATIVE.DIR,'MCU') = OCONV(SETTINGS.REC<3>,'MCU'))      END ELSE        OK = (NATIVE.DIR = SETTINGS.REC<3>)      END      IF NOT(OK) THEN        W$HTML.DATA = "MV file 'NATIVE.CONTENT' does not refer to PDF directory ":SETTINGS.REC<3>:"!"      END    END  END ELSE    OK = 1  END  IF OK THEN    WRITE SETTINGS.REC ON F.MVDB.CONTROL, 'PDF.SETTINGS'    W$HTML.DATA = "Settings saved."  END ELSE    IF W$HTML.DATA = "" THEN W$HTML.DATA = "Unable to open PDF directory!"  ENDEND ELSE  * Initialize default settings  IF SETTINGS.REC<1> = "" THEN    SETTINGS.REC<1> = 0 ;* PDF generation is disabled  END  IF SETTINGS.REC<2> = "" THEN    IF isWindows THEN      * Windows      EXEPATH = '"C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe"'      SETTINGS.REC<2> = EXEPATH:' [INPUT_FILE] [OUTPUT_FILE]'    END ELSE      * Linux      EXEPATH = '/usr/local/bin/wkhtmltopdf'      SETTINGS.REC<2> = EXEPATH:' [INPUT_FILE] [OUTPUT_FILE]'    END  END  IF SETTINGS.REC<3> = "" THEN    IF isWindows THEN      * Windows      NATIVE.DIR = @PATH      CONVERT '/' TO '\' IN NATIVE.DIR ;* UV sometimes uses wrong separator      SETTINGS.REC<3> = NATIVE.DIR:'\NATIVE.CONTENT'    END ELSE      * Linux      NATIVE.DIR = @PATH      SETTINGS.REC<3> = NATIVE.DIR:'/NATIVE.CONTENT'    END  END  IF SETTINGS.REC<4> = "" THEN    SETTINGS.REC<4> = 0 ;* delete generated files immediately  ENDEND*W$INPUT.PROMPT<1> = "Enable PDF generation"W$INPUT.TYPE<1> = "SELECT"W$INPUT.SELOPTS<1> = "No":@VM:"Yes"W$INPUT.SELVALS<1> = "0":@VM:"1"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = SETTINGS.REC<1>*W$INPUT.PROMPT<2> = "PDF converter command"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2TMP = SETTINGS.REC<2>CALL SWAP(TMP, '"', '&quot;')W$INPUT.DEFAULT<2> = TMPW$INPUT.PARAMS<2> = 'size="100"'**D3 requires directory to store PDF files; other platforms use DIR type fileW$INPUT.PROMPT<3> = "Directory for PDF files"W$INPUT.TYPE<3> = "TEXT"W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = SETTINGS.REC<3>W$INPUT.PARAMS<3> = 'size="100"'*W$INPUT.PROMPT<4> = "Delete PDF files after"W$INPUT.TYPE<4> = "SELECT"W$INPUT.UDPOS<4> = 4W$INPUT.SELOPTS<4,1> = "immediately"; W$INPUT.SELVALS<4,1> = 0W$INPUT.SELOPTS<4,2> = "1 day"; W$INPUT.SELVALS<4,2> = 1W$INPUT.SELOPTS<4,3> = "2 days"; W$INPUT.SELVALS<4,3> = 2W$INPUT.SELOPTS<4,4> = "3 days"; W$INPUT.SELVALS<4,4> = 3W$INPUT.SELOPTS<4,5> = "4 days"; W$INPUT.SELVALS<4,5> = 4W$INPUT.SELOPTS<4,6> = "5 days"; W$INPUT.SELVALS<4,6> = 5W$INPUT.SELOPTS<4,7> = "6 days"; W$INPUT.SELVALS<4,7> = 6W$INPUT.SELOPTS<4,8> = "7 days"; W$INPUT.SELVALS<4,8> = 7W$INPUT.SELOPTS<4,9> = "14 days"; W$INPUT.SELVALS<4,9> = 14W$INPUT.SELOPTS<4,10> = "30 days"; W$INPUT.SELVALS<4,10> = 30W$INPUT.SELOPTS<4,11> = "never"; W$INPUT.SELVALS<4,11> = 999999W$INPUT.DEFAULT<4> = SETTINGS.REC<4>*W$INPUT.BUTTON = "Save"*RETURN0037E6SUB.PORTAL.AR.REPORT.SETUP0c2SUBROUTINE SUB.PORTAL.AR.REPORT.SETUP** DEFINE PARAMETERS FOR PORTAL AR REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOP*W$TITLE = "Portal AR Report Setup"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*EQUATE ACCOUNT TO WIDGET.USER.DATA(1)EQUATE REPORT.FILE TO WIDGET.USER.DATA(2)EQUATE DUE.DATE.DICT TO WIDGET.USER.DATA(3)EQUATE DATE.PAID.DICT TO WIDGET.USER.DATA(4)EQUATE INVOICE.AMT.DICT TO WIDGET.USER.DATA(5)EQUATE BALANCE.DICT TO WIDGET.USER.DATA(6)EQUATE DUE.DATE.AMC TO WIDGET.USER.DATA(8)EQUATE DATE.PAID.AMC TO WIDGET.USER.DATA(9)EQUATE INVOICE.AMT.AMC TO WIDGET.USER.DATA(10)EQUATE INVOICE.AMT.CONV TO WIDGET.USER.DATA(11)EQUATE INVOICE.AMT.COOR TO WIDGET.USER.DATA(12)EQUATE BALANCE.AMC TO WIDGET.USER.DATA(13)EQUATE BALANCE.CONV TO WIDGET.USER.DATA(14)EQUATE BALANCE.COOR TO WIDGET.USER.DATA(15)EQUATE CUSTOMER.DICT TO WIDGET.USER.DATA(16)EQUATE CUSTOMER.AMC TO WIDGET.USER.DATA(17)EQUATE CUSTOMER.TFILE TO WIDGET.USER.DATA(18)*OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE   MESSAGE='No Platform Type Defined'   GOTO MESSAGE.DISPLAY ENDFIRST.TIME=0IF G$SUBMITTED <> '1' THEN   MATREAD WIDGET.USER.DATA FROM FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ELSE      MAT WIDGET.USER.DATA = ''      FIRST.TIME=1    END   IF NOT(FIRST.TIME) THEN      GOSUB VALIDATE.PREVIOUS.INPUTS    END END ELSE   GOSUB VALIDATE.PREVIOUS.INPUTS   MATWRITE WIDGET.USER.DATA ON FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ENDGOSUB SET.PROMPTSRETURN*SET.PROMPTS:*W$INPUT.PROMPT<1> = "AR File Account"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = ACCOUNT*W$INPUT.PROMPT<2> = "Name Of AR File"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = REPORT.FILE*W$INPUT.PROMPT<3> = "Due Date Dict Name"W$INPUT.TYPE<3> = 'TEXT'W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = DUE.DATE.DICT*W$INPUT.PROMPT<4> = "Date Paid Dict Name"W$INPUT.TYPE<4> = 'TEXT'W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = DATE.PAID.DICT*W$INPUT.PROMPT<5> = "Invoice Amount Dict Name"W$INPUT.TYPE<5> = 'TEXT'W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = INVOICE.AMT.DICT*W$INPUT.PROMPT<6> = "Remaining Balance Dict Name"W$INPUT.TYPE<6> = 'TEXT'W$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = BALANCE.DICT*W$INPUT.PROMPT<7> = "Customer Dict Name"W$INPUT.TYPE<7> = 'TEXT'W$INPUT.UDPOS<7> = 16W$INPUT.DEFAULT<7> = CUSTOMER.DICT*RETURN*VALIDATE.PREVIOUS.INPUTS:*MESSAGE=''BEGIN CASE   CASE PLATFORM = 'D3'      MD.TYPE='MD'   CASE PLATFORM = 'JB'      MD.TYPE='MD'   CASE 1      MD.TYPE='VOC'END CASEOPEN '',MD.TYPE TO FI.MD ELSE   MESSAGE='Unable to open ':MD.TYPE:' for validation purposes'   GOTO MESSAGE.DISPLAY ENDVALID.ACCOUNT=1IF ACCOUNT <> '' THEN**   EXECUTE "SET-FILE ":ACCOUNT:" ":MD.TYPE:' QFILE' CAPTURING DUMMY    VALID.ACCOUNT=1    QFILE.NAME='QFILE'    CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)    IF QFILE.NAME = '' THEN       MESSAGE<-1>=ACCOUNT:' is not a valid account!'       VALID.ACCOUNT=0     END**    IF PLATFORM = 'UD' THEN**       QFILE.NAME='QFILE'**       CALL CREATE.UD.QPOINTER(ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)**       IF QFILE.NAME = '' THEN**          MESSAGE<-1>=ACCOUNT:' is not a valid account!'**          VALID.ACCOUNT=0**        END**     END ELSE**       WRITE 'Q':@AM:ACCOUNT:@AM:MD.TYPE ON FI.MD, 'QFILE'**       OPEN '','QFILE' TO FI.ACCOUNT.MD ELSE**          MESSAGE<-1>=ACCOUNT:' is not a valid account!'**          VALID.ACCOUNT=0**        END**    END END ELSE   VALID.ACCOUNT=0   MESSAGE<-1>='No Account defined!' ENDIF REPORT.FILE <> '' THEN   IF NOT(VALID.ACCOUNT) THEN      MESSAGE<-1>='Unable to verify ':REPORT.FILE:' file because account not properly defined!'      VALID.REPORT.FILE=0    END ELSE      VALID.REPORT.FILE=1      QFILE.NAME='QFILE'      CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)      IF QFILE.NAME = '' THEN         MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'         VALID.REPORT.FILE=0       END**      EXECUTE "SET-FILE ":ACCOUNT:" ":REPORT.FILE:' QFILE' CAPTURING DUMMY***       IF PLATFORM = 'UD' THEN***          QFILE.NAME='QFILE'***          CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)***          IF QFILE.NAME = '' THEN***            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'***            VALID.REPORT.FILE=0***          END***        END ELSE***          WRITE 'Q':@AM:ACCOUNT:@AM:REPORT.FILE ON FI.MD, 'QFILE'***          OPEN '','QFILE' TO FI.REPORT.FILE ELSE***             MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'***             VALID.REPORT.FILE=0***           END***        END      IF VALID.REPORT.FILE THEN         HAVE.QFILE.REC=1         READ QFILE.REC FROM FI.MD, 'QFILE' ELSE            HAVE.QFILE.REC=0            MESSAGE<-1>='Unable to create QFILE pointer to ':ACCOUNT:' ':REPORT.FILE          END         IF HAVE.QFILE.REC THEN            WRITE QFILE.REC ON FI.MD, 'DASHBOARD.AR.FILE'            OPEN 'DICT','DASHBOARD.AR.FILE' TO FI.DICT.REPORT.FILE ELSE                MESSAGE<-1>='Unable to open DICT ':REPORT.FILE             END          END       END    END END ELSE   MESSAGE<-1>='No AR Report file defined!' ENDIF DUE.DATE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Due Date Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DUE.DATE.DICT:' Because No AR File!'    END ELSE      READ DUE.DATE.DICT.REC FROM FI.DICT.REPORT.FILE, DUE.DATE.DICT ELSE         DUE.DATE.DICT.REC=''         MESSAGE<-1>=DUE.DATE.DICT:' Does Not Exist!'       END      IF DUE.DATE.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DUE.DATE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DUE.DATE.DICT.REC<7>[1,1] <> 'D' AND DUE.DATE.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DUE.DATE.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DUE.DATE.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF DATE.PAID.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Date Paid Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DATE.PAID.DICT:' Because No AR File!'    END ELSE      READ DATE.PAID.DICT.REC FROM FI.DICT.REPORT.FILE, DATE.PAID.DICT ELSE         DATE.PAID.DICT.REC=''         MESSAGE<-1>=DATE.PAID.DICT:' Does Not Exist!'       END      IF DATE.PAID.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DATE.PAID.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DATE.PAID.DICT.REC<7>[1,1] <> 'D' AND DATE.PAID.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DATE.PAID.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DATE.PAID.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF INVOICE.AMT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Invoice Amount Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":INVOICE.AMT.DICT:' Because No AR File!'    END ELSE      READ INVOICE.AMT.DICT.REC FROM FI.DICT.REPORT.FILE, INVOICE.AMT.DICT ELSE         INVOICE.AMT.DICT.REC=''         MESSAGE<-1>=INVOICE.AMT.DICT:' Does Not Exist!'       END      IF INVOICE.AMT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=INVOICE.AMT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=INVOICE.AMT.DICT.REC<7>[1,2]               DICT.8.1.2=INVOICE.AMT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=INVOICE.AMT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':INVOICE.AMT.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF BALANCE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Balance Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":BALANCE.DICT:' Because No AR File!'    END ELSE      READ BALANCE.DICT.REC FROM FI.DICT.REPORT.FILE, BALANCE.DICT ELSE         BALANCE.DICT.REC=''         MESSAGE<-1>=BALANCE.DICT:' Does Not Exist!'       END      IF BALANCE.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=BALANCE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=BALANCE.DICT.REC<7>[1,2]               DICT.8.1.2=BALANCE.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=BALANCE.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               BALANCE.AMC=BALANCE.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':BALANCE.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF CUSTOMER.DICT <> '' THEN   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":CUSTOMER.DICT:' Because No AR File!'    END ELSE      READ CUSTOMER.DICT.REC FROM FI.DICT.REPORT.FILE, CUSTOMER.DICT ELSE         CUSTOMER.DICT.REC=''         MESSAGE<-1>=CUSTOMER.DICT:' Does Not Exist!'       END      IF CUSTOMER.DICT.REC <> '' THEN         VALID.CUSTOMER.DICT=1         DICT.TYPE=CUSTOMER.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF CUSTOMER.DICT.REC<7>[1,1] <> 'T' AND CUSTOMER.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.CUSTOMER.DICT=0                END ELSE                  IF CUSTOMER.DICT.REC<7>[1,1] = 'T' THEN                     CUSTOMER.TFILE=CUSTOMER.DICT.REC<7>                   END ELSE                     CUSTOMER.TFILE=CUSTOMER.DICT.REC<8>                   END                END               CUSTOMER.AMC=CUSTOMER.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(CUSTOMER.DICT.REC<3>,'TRANS',1) THEN                  VALID.CUSTOMER.DICT=0                END ELSE                  CUSTOMER.TFILE=CUSTOMER.DICT.REC<3>                END            CASE 1               VALID.CUSTOMER.DICT=0         END CASE         IF NOT(VALID.CUSTOMER.DICT) THEN            MESSAGE<-1>='Dictionary Item ':CUSTOMER.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDCREATE.INDEXES=1IF MESSAGE = '' THEN   MESSAGE='AR Report parameters properly defined!' END ELSE   IF INDEX(MESSAGE,'!',1) THEN      MESSAGE=INSERT(MESSAGE,1,0,0,'!!! ERRORS !!!')      CREATE.INDEXES=0    END ENDIF CREATE.INDEXES THEN   * CREATE PIPE DICTIONARY ITEM   IF PLATFORM = 'D3' OR PLATFORM = 'QM' OR PLATFORM = 'JB' THEN      PIPE='A'      PIPE<2>=0      PIPE<3>=' '      PIPE<8>='F;C|'      PIPE<9>='L'      PIPE<10>=1    END ELSE      PIPE='I'      PIPE<2>='"|"'      PIPE<4>='|'      PIPE<5>='1L'      PIPE<6>='S'    END   WRITE PIPE ON FI.DICT.REPORT.FILE, 'PIPE'   *   ** INDEX LOGIC   *   BEGIN CASE      CASE PLATFORM = 'D3'         INDEX.TEST='A':DUE.DATE.AMC:'(DY):':DUE.DATE.AMC:'(DM)'         READ FILE.DEF.REC FROM FI.DICT.REPORT.FILE, REPORT.FILE ELSE FILE.DEF.REC=''         IF FILE.DEF.REC <> '' AND NOT(INDEX(FILE.DEF.REC<8>,INDEX.TEST,1)) THEN            MESSAGE<-1>='Creating Indexes'            CMND1="CREATE-INDEX DASHBOARD.AR.FILE A":DUE.DATE.AMC            EXECUTE CMND1 CAPTURING RESULT1            CMND2="CREATE-INDEX DASHBOARD.AR.FILE ":INDEX.TEST            EXECUTE CMND2 CAPTURING RESULT2          END      CASE 1         EXECUTE "CREATE-INDEX DASHBOARD.AR.FILE ":DUE.DATE.DICT CAPTURING RESULT1   END CASE ENDGOSUB MESSAGE.DISPLAYRETURN*MESSAGE.DISPLAY:*MAX.MSG=DCOUNT(MESSAGE,CHAR(254))W$HTML.DATA='<h3>':MESSAGE<1>IF MAX.MSG > 1 THEN   FOR MSG.NO = 2 TO MAX.MSG      W$HTML.DATA:='<br>':MESSAGE<MSG.NO>    NEXT MSG.NO ENDW$HTML.DATA:='</h3>'RETURNEND0003F4SUB.DEMO.DAYS.TO.PAY.CHART0c2SUBROUTINE SUB.DEMO.DAYS.TO.PAY.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Average Days To Pay"W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''YEARS=REC<67>MAX.YEARS=DCOUNT(YEARS,CHAR(253))FIRST.YEAR=0*W$BAR.XMEMO = "Year (drill down for detail)"W$BAR.YMEMO = "Average Days to Pay"*N=0*FOR NN = 1 TO MAX.YEARS  AVERAGE.DAYS=REC<47-NN>  YEAR=YEARS<1,NN>  IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR  CURRENT.YEAR=YEAR  W$BAR.VALUES<1,NN> = AVERAGE.DAYS  W$BAR.XLABELS<1,NN> = YEAR  W$FW.DD.WIDGET<1,NN>='DEMO DAYS TO PAY PIE'  W$FW.DD.UD.POS<1,NN,1>=1  W$FW.DD.UD.VAL<1,NN,1>=YEARNEXT NN*W$BAR.CAPTION = "Average Days to Pay From ":FIRST.YEAR:' to ':CURRENT.YEAR*RETURN000341PORTAL.SHOW.LAST.UPDATED0c2SUBROUTINE PORTAL.SHOW.LAST.UPDATED(CALC.TYPE)INCLUDE WBPD MVDB.INCLUDEIF CALC.TYPE = 'SALES' THEN   OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO DICT.FI ELSE RETURN END ELSE   OPEN 'DICT','DASHBOARD.BALANCES' TO DICT.FI ELSE RETURN ENDREAD LAST.UPDATED FROM DICT.FI, '*LAST.UPDATED.':CALC.TYPE ELSE RETURNCUR.DATE=DATE()CUR.TIME=TIME()CUR.TIME=FIELD(CUR.TIME,'.',1)CUR.TIME=STR('0',5-LEN(CUR.TIME)):CUR.TIMECUR.DATE.TIME=CUR.DATE:CUR.TIMEDELTA.DATE.TIME=CUR.DATE.TIME-LAST.UPDATED** IF LAST 5 MINUTES THEN NO MESSAGE NEEDED*IF DELTA.DATE.TIME < 300 THEN   W$TITLE=W$TITLE:' - Updated in Last 5 Minutes'   RETURN END*LAST.DATE=LAST.UPDATED[1,5]LAST.TIME=LAST.UPDATED[6,9]APPEND.IT=' - Last Updated ':OCONV(LAST.DATE,'D4-'):' at ':OCONV(LAST.TIME,'MTH')W$TITLE=W$TITLE:APPEND.ITRETURN0007C4SUB.DEMO.ANNUAL.SALES.BY.REP0c2SUBROUTINE SUB.DEMO.ANNUAL.SALES.BY.REP***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''REVENUE.OR.GP=WIDGET.USER.DATA(1)YEAR=WIDGET.USER.DATA(2)MONTH=WIDGET.USER.DATA(3)VAL.TYPE='$'DRILLDOWN.WIDGET=''DRILLDOWN.TYPE=''BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE=YEAR:' Sales By Sales Rep'      W$BAR.YMEMO = "Sales"      SALES.AMTS=REC<48>   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE=YEAR:' Gross Profit By Sales Rep'      W$BAR.YMEMO = "Gross Profit"      SALES.AMTS=REC<49>END CASE*REPS=REC<47>LOCATE YEAR IN REC<67> SETTING YEAR.SVM ELSE YEAR.SVM=1**MAX.SALES.AMT=0N=0FIRST.YEAR=''MAX.REPS=DCOUNT(REPS,CHAR(253))FOR NN = 1 TO MAX.REPS   REP=REPS<1,NN>   SALES.AMT=SUM(SALES.AMTS<1,NN,YEAR.SVM>)   SALES.AMT=OCONV(SALES.AMT,'MD02')   IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT   W$BAR.VALUES<1,NN> = SALES.AMT   W$BAR.XLABELS<1,NN> = REP   W$FW.DD.WIDGET<1,NN> = "DEMO MONTHLY SALES BY REP"   W$FW.DD.UD.POS<1,NN,1> = 1   W$FW.DD.UD.VAL<1,NN,1> = WIDGET.USER.DATA(1); * REVENUE OR GP   W$FW.DD.UD.POS<1,NN,2> = 2   W$FW.DD.UD.VAL<1,NN,2> = YEAR   W$FW.DD.UD.POS<1,NN,3> = 3   W$FW.DD.UD.VAL<1,NN,3> = REPNEXT NNW$BAR.XMEMO = "Sales Rep (drilldown for ":W$BAR.YMEMO:" by month)"* ROUND MAX AMOUNT UP TO THE NEXT 250000MAX.SALES.AMT+=250000MAX.SALES.AMT=INT(MAX.SALES.AMT/250000) * 250000W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'RETURN0004C7SUB.PORTAL.DAYS.TO.PAY.PIE0c2SUBROUTINE SUB.PORTAL.DAYS.TO.PAY.PIE**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FC2DPIE"W$WIDTH = 3W$TITLE = 'Chart - Days To Pay '*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEYEAR=WIDGET.USER.DATA(1)OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT ELSE RETURNREAD STATS.REC FROM FI.DICT, '*CURRENT.AR.STATS' ELSE RETURNWRITE 'READ' ON FI.DICT, 'DEBUG'LOCATE YEAR IN STATS.REC<6> SETTING YEAR.POS ELSE RETURNWRITEV YEAR.POS ON FI.DICT, 'DEBUG', 2NUMBERS=STATS.REC<7,YEAR.POS>WRITEV NUMBERS ON FI.DICT, 'DEBUG', 3TOT.NUMBERS=SUM(NUMBERS)TOT.NUMBERS=TOT.NUMBERS-NUMBERS<1,1,1>WRITEV TOT.NUMBERS ON FI.DICT, 'DEBUG', 4W$TITLE:=YEARDAYS.TYPES='0 - 30 Days,31 - 60 Days,61 - 90 Days,Over 90 Days'CONVERT ',' TO CHAR(253) IN DAYS.TYPESMAX.DAYS.TYPES=DCOUNT(DAYS.TYPES,CHAR(253))FOR DAYS.CNTR = 1 TO MAX.DAYS.TYPES   NUMBER=NUMBERS<1,1,DAYS.CNTR+1>   PCT=INT(NUMBER * 1000/TOT.NUMBERS + .5)   W$PIE.LABELS<1,DAYS.CNTR>=DAYS.TYPES<1,DAYS.CNTR>   W$PIE.VALUES<1,DAYS.CNTR>=(PCT/10) NEXT DAYS.CNTRW$PIE.CAPTION='Days To Pay By Period For ':YEAR***RETURN00060ASUB.USER.AUTH0c2SUBROUTINE SUB.USER.AUTH(USERID,PASSWORD,MODE,VALID,MESSAGE,MAT USER.ITEM)** Custom user authentication subroutine. Authenticate user from the USERS file.** Input Values:*  USERID - User ID entered by the user on the login form*  PASSWORD - Password entered by the user on the login form*  MODE - "AUTH" - User is logging in, authorize.*       - "READ" - User is already authorized, just provide the USER.ITEM*                  Ignore PASSWORD.*                  VALID and MESSAGE will be ignored by caller.* * Output values*  VALID - 1=User authenticated, 0=User NOT authenticated*  MESSAGE - Alternative Message to display when user is NOT authenticated.*  MAT USER.ITEM - Dashboard user information*INCLUDE WBPD FI.MVDB.USERS** USER.ITEM values that may be populated by this program:** EQU USER.DEFAULT.DB   TO USER.ITEM(2)* EQU USER.NAME         TO USER.ITEM(3)* EQU USER.ROLE         TO USER.ITEM(6)*MAT USER.ITEM = ""*OPEN '','DM,USERS,' TO F.USERS ELSE  MESSAGE = "Unable to open DM,USERS, file."  VALID = 0  RETURNENDREAD UREC FROM F.USERS, USERID ELSE  VALID = 0  RETURNENDIF MODE = "AUTH" THEN  IF PASSWORD # "" THEN EPWD = ICONV( PASSWORD, 'UC' ) ELSE EPWD = ""END ELSE  EPWD = "" ; UREC<7> = "" ;* Make them match since we're not really authenticatingENDIF EPWD = UREC<7> THEN  VALID = 1  USER.DEFAULT.DB = "Chart Demo"  USER.NAME = UREC<1>  IF UREC<2> = "DBADMIN" THEN    USER.ROLE = "Administrator"  END ELSE USER.ROLE = "User"  RETURNEND ELSE  VALID = 0ENDRETURN000403SUB.DEMO.SALES.PERCENTS0c2SUBROUTINE SUB.DEMO.SALES.PERCENTS***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCMSCOLUMN3D"W$WIDTH = 3W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''W$BAR.LABELS<1>='Parts'W$BAR.LABELS<2>='Services'W$BAR.CAPTION='YTD Percentage of Sales by Type'W$BAR.XMEMO='Year'W$BAR.YMEMO='Percent of Sales'*YEARS=REC<38>PART.AMTS=REC<40>PART.PCTS=REC<41>SERVICE.AMTS=REC<42>SERVICE.PCTS=REC<43>MAX.YEARS=DCOUNT(YEARS,CHAR(253))**FOR YEAR.CNTR = 1 TO MAX.YEARS   W$BAR.XLABELS<1,YEAR.CNTR>=YEARS<1,YEAR.CNTR>   W$BAR.VALUES<1,YEAR.CNTR>=OCONV(PART.PCTS<1,YEAR.CNTR>,'MD1')   W$BAR.VALUES<2,YEAR.CNTR>=OCONV(SERVICE.PCTS<1,YEAR.CNTR>,'MD1') NEXT YEAR.CNTRW$CHART.OPTIONS<-1>='decimals="1"'W$CHART.OPTIONS<-1>='forceDecimals="1"'RETURNEND00078BSUB.DEMO.MONTHLY.SALES.BY.REP0c2SUBROUTINE SUB.DEMO.MONTHLY.SALES.BY.REP***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN2D"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEMONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREVENUE.OR.GP=WIDGET.USER.DATA(1)YEAR=WIDGET.USER.DATA(2)REP=WIDGET.USER.DATA(3)BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE=YEAR:' Monthly Sales For Rep: ':REP      W$BAR.YMEMO = "Sales"      READ ANNUAL.REC FROM FILE.CONTROL, 'SALES.':YEAR ELSE ANNUAL.REC=''      LOCATE REP IN ANNUAL.REC<1> SETTING REP.POS ELSE REP.POS=1      SALES.AMTS=ANNUAL.REC<2,REP.POS>      MAX.ROUNDER=250000   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE=YEAR:' Monthly Gross Profits For Rep: ':REP      W$BAR.YMEMO = "Gross Profits"      READ ANNUAL.REC FROM FILE.CONTROL, 'GPS.':YEAR ELSE ANNUAL.REC=''      LOCATE REP IN ANNUAL.REC<1> SETTING REP.POS ELSE REP.POS=1      SALES.AMTS=ANNUAL.REC<2,REP.POS>      MAX.ROUNDER=50000END CASE*MAX.MOS=DCOUNT(SALES.AMTS,CHAR(252))MAX.SALES.AMT=0FIRST.MOS=''FOR NN = 1 TO MAX.MOS   MONTH=FIELD(MONTHS,',',NN)   SALES.AMT=SALES.AMTS<1,1,NN>   SALES.AMT=OCONV(SALES.AMT,'MD02')   IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT   W$BAR.VALUES<1,NN> = SALES.AMT   W$BAR.XLABELS<1,NN> = MONTHNEXT NNW$BAR.XMEMO = "Month"* ROUND MAX AMOUNT UP TO THE NEXT MAX.ROUNDERMAX.SALES.AMT+=MAX.ROUNDERMAX.SALES.AMT=INT(MAX.SALES.AMT/MAX.ROUNDER) * MAX.ROUNDERW$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'RETURN001DF6SUB.MW.CODE.FACTORY0c2SUBROUTINE SUB.MW.CODE.FACTORY** Copyright (c) 2010 SB, Inc. All rights reserved.** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Mobile Web Code Factory"W$TYPE = "HTML"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$HTML.DATA = '<form action="/dbc/MVDB.MAIN" method="GET">'W$HTML.DATA<-1> = '<input type="hidden" name="udview" value="':G$WIDGET.NAME:'" />'*NSELECTED = "" ; TSELECTED = "" ; FSELECTED = ""CODE.TEXT = ""IF WIDGET.USER.DATA(1) # WIDGET.USER.DATA(100) THEN  TMP1 = WIDGET.USER.DATA(1)  TMP100 = WIDGET.USER.DATA(100)  MAT WIDGET.USER.DATA = ""  WIDGET.USER.DATA(1) = TMP1  WIDGET.USER.DATA(100) = TMP100ENDW$HTML.DATA<-1> = '<table width="100%">'BEGIN CASE  CASE WIDGET.USER.DATA(1) = "N"    NSELECTED = "selected"    GOSUB TYPE.SELECTOR    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos2" value="2" />'    W$HTML.DATA<-1> = 'Nav Labels (comma-separated):</td><td><input type="text" name="udval2" value="':WIDGET.USER.DATA(2):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos3" value="3" />'    W$HTML.DATA<-1> = 'Nav Links (comma-separated):</td><td><input type="text" name="udval3" value="':WIDGET.USER.DATA(3):'" /></td></tr>'    W$HTML.DATA<-1> = '</table>'    *    IF WIDGET.USER.DATA(2) # "" THEN      CODE.TEXT = 'P$NAV.OPTS = ""'      VARNAME = "P$NAV.LABEL" ; LIST = WIDGET.USER.DATA(2)      GOSUB MAKE.CODE      VARNAME = "P$NAV.LINK" ; LIST = WIDGET.USER.DATA(3)      GOSUB MAKE.CODE    END    W$HTML.DATA<-1> = '<br /><input type="submit" value="Make Code" />'  CASE WIDGET.USER.DATA(1) = "T"    TSELECTED = "selected"    GOSUB TYPE.SELECTOR    *    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos2" value="2" />'    W$HTML.DATA<-1> = 'Column Headings (comma-separated):</td><td><input type="text" name="udval2" value="':WIDGET.USER.DATA(2):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos3" value="3" />'    W$HTML.DATA<-1> = 'Column Just (L/R) (comma-separated):</td><td><input type="text" name="udval3" value="':WIDGET.USER.DATA(3):'" /></td></tr>'    W$HTML.DATA<-1> = '</table>'    IF WIDGET.USER.DATA(2) # "" THEN      CODE.TEXT<-1> = 'MAT TABLE.DEFS = ""'      VARNAME = "TABLE$LABELS" ; LIST = WIDGET.USER.DATA(2)      GOSUB MAKE.CODE      VARNAME = "TABLE$ALIGN" ; LIST = WIDGET.USER.DATA(3)      GOSUB MAKE.CODE      *      CODE.TEXT<-1> = 'TABLE$DATA = "" ;* Fill in your data here'      CODE.TEXT<-1> = 'CALL SUB.MOBI.TABLE(MAT TABLE.DEFS)'    END    W$HTML.DATA<-1> = '<br /><input type="submit" value="Make Code" />'  CASE WIDGET.USER.DATA(1) = "F"    FSELECTED = "selected"    GOSUB TYPE.SELECTOR    *    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos2" value="2" />'    W$HTML.DATA<-1> = 'Field Labels (comma-separated):</td><td><input type="text" name="udval2" value="':WIDGET.USER.DATA(2):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos3" value="3" />'    W$HTML.DATA<-1> = 'Field Types (comma-separated):</td><td><input type="text" name="udval3" value="':WIDGET.USER.DATA(3):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos4" value="4" />'    W$HTML.DATA<-1> = 'Values (comma-separated):</td><td><input type="text" name="udval4" value="':WIDGET.USER.DATA(4):'" /></td></tr>'    *    IF WIDGET.USER.DATA(2) # "" THEN      *      DIM SEL.REF(20)      DIM SEL.LISTS(20)      DIM SEL.VALS(20)      TMP.TYPES = WIDGET.USER.DATA(3)      CALL SWAP(TMP.TYPES,'\,',CHAR(9))      CONVERT "," TO @AM IN TMP.TYPES      CONVERT " " TO "" IN TMP.TYPES      CONVERT CHAR(9) TO "," IN TMP.TYPES      TMP.NAMES = WIDGET.USER.DATA(2)      CALL SWAP(TMP.NAMES,'\,',CHAR(9))      CONVERT "," TO @AM IN TMP.NAMES      CONVERT CHAR(9) TO "," IN TMP.NAMES      SEL.POS = 0      POS.LIST = ""      UDPOS = 6 ;* Next user data position (hold 5 open)      LOOP        LOCATE "SELECT" IN TMP.TYPES SETTING POS THEN          TMP.TYPES<POS> = "XXX"          SEL.POS += 1          POS.LIST<-1> = POS          W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos':UDPOS:'" value="':UDPOS:'" />'          W$HTML.DATA<-1> = 'Options for "':TMP.NAMES<POS>:'":</td><td><input type="text" name="udval':UDPOS:'" value="':WIDGET.USER.DATA(UDPOS):'" /></td></tr>'          UDPOS += 1          W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos':UDPOS:'" value="':UDPOS:'" />'          W$HTML.DATA<-1> = 'Values for "':TMP.NAMES<POS>:'":</td><td><input type="text" name="udval':UDPOS:'" value="':WIDGET.USER.DATA(UDPOS):'" /></td></tr>'          UDPOS += 1        END ELSE EXIT      REPEAT      W$HTML.DATA<-1> = '</table>'      UDPOS = 5      CONVERT @AM TO "," IN POS.LIST      W$HTML.DATA<-1> = '<input type="hidden" name="udpos':UDPOS:'" value="5" />'      W$HTML.DATA<-1> = '<input type="hidden" name="udval':UDPOS:'" value="':POS.LIST:'" />'    END ELSE      W$HTML.DATA<-1> = '</table>'    END    W$HTML.DATA<-1> = '<input type="submit" value="Make Code" />'    *    IF WIDGET.USER.DATA(2) # "" THEN      CODE.TEXT<-1> = "FORM.ID = 1"      CODE.TEXT<-1> = 'INPUT.OPTS = "" ; SEL.LISTS = "" ; SEL.VALS = ""'      CODE.TEXT<-1> = 'FIELDSET.LABEL = "Fieldset Label"'      VARNAME = "LABELS" ; LIST = WIDGET.USER.DATA(2)      GOSUB MAKE.CODE      VARNAME = "INPUT.TYPES" ; LIST = WIDGET.USER.DATA(3)      GOSUB MAKE.CODE      VARNAME = "VALUES" ; LIST = WIDGET.USER.DATA(4)      GOSUB MAKE.CODE      *      POS.LIST = WIDGET.USER.DATA(5)      CONVERT "," TO @AM IN POS.LIST      POS.CNT = DCOUNT( POS.LIST, @AM )      SXPOS = 6      FOR SX = 1 TO POS.CNT        LIST = WIDGET.USER.DATA(SXPOS)        SXPOS += 1        VALS = WIDGET.USER.DATA(SXPOS)        SXPOS += 1        CONVERT "," TO @AM IN LIST        CONVERT "," TO @AM IN VALS        FOR SVX = 1 TO DCOUNT( LIST, @AM )          CODE.TEXT<-1> = "SEL.LISTS<":POS.LIST<SX>:",":SVX:"> = \":TRIM(LIST<SVX>):"\"          CODE.TEXT<-1> = "SEL.VALS<":POS.LIST<SX>:",":SVX:"> = \":TRIM(VALS<SVX>):"\"        NEXT SVX      NEXT SX      CODE.TEXT<-1> = 'FIELDSET.OPTIONS = ""'      CODE.TEXT<-1> = "CALL SUB.MOBI.FIELDSET(LABELS,VALUES,INPUT.TYPES,INPUT.OPTS,SEL.LISTS,SEL.VALS,FIELDSET.LABEL,FORM.ID,FIELDSET.OPTIONS)"    END  CASE 1    GOSUB TYPE.SELECTOR    MAT WIDGET.USER.DATA = ""    W$HTML.DATA<-1> = '</table>'END CASE*WIDGET.USER.DATA(100) = WIDGET.USER.DATA(1) ;* Current typeW$HTML.DATA<-1> = '</form>'IF CODE.TEXT # "" THEN  CALL SWAP(CODE.TEXT,'&','&amp;')  CALL SWAP(CODE.TEXT,'<','&lt;')  CALL SWAP(CODE.TEXT,'>','&gt;')  CALL SWAP(CODE.TEXT,@AM,'<br />')  W$HTML.DATA<-1> = '<hr />'  W$HTML.DATA<-1> = '<pre>'  W$HTML.DATA<-1> = CODE.TEXT  W$HTML.DATA<-1> = '</pre>'ENDRETURN*MAKE.CODE: **CALL SWAP(LIST,'\,',CHAR(9))CONVERT "," TO @AM IN LISTCONVERT CHAR(9) TO ',' IN LISTCNT = DCOUNT( LIST, @AM )CODE.TEXT<-1> = VARNAME:' = ""'FOR N = 1 TO CNT  WORD = TRIM(LIST<N>)  IF WORD # "" THEN    CODE.TEXT<-1> = VARNAME:'<':N:'> = \':WORD:'\'  ENDNEXT NRETURN*TYPE.SELECTOR: **W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos1" value="1" />'W$HTML.DATA<-1> = 'Create code for:</td><td><select name="udval1" onChange="this.form.submit();">'W$HTML.DATA<-1> = '<option value="">Select Code Type</option>'W$HTML.DATA<-1> = '<option value="N" ':NSELECTED:'>P$NAV Navigation</option>'W$HTML.DATA<-1> = '<option value="T" ':TSELECTED:'>Table</option>'W$HTML.DATA<-1> = '<option value="F" ':FSELECTED:'>Fieldset / Form</option>'W$HTML.DATA<-1> = '</select></td></tr>'RETURN0004B6SUB.DEMO.SALE.TYPES.PIE0c2SUBROUTINE SUB.DEMO.SALE.TYPES.PIE**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FC2DPIE"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEYEAR=WIDGET.USER.DATA(1)BEGIN CASE   CASE WIDGET.USER.DATA(2) = 'PARTS'      W$TITLE = 'Chart - ':YEAR:' Parts Revenue by Type'      TYPE.ATT=52      AMTS.ATT=53      W$PIE.CAPTION='Total Parts Revenue of '   CASE WIDGET.USER.DATA(2) = 'SERVICES'      W$TITLE = 'Chart - ':YEAR:' Services Revenue by Type'      TYPE.ATT=50      AMTS.ATT=51      W$PIE.CAPTION='Total Services Revenue of 'END CASE*OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''LOCATE YEAR IN REC<67> SETTING YEAR.POS ELSE YEAR.POS=1**W$PIE.VALUE.OPTS<1,3>='isSliced="1"'*TYPES=REC<TYPE.ATT>AMOUNTS=REC<AMTS.ATT>MAX.TYPES=DCOUNT(TYPES,CHAR(253))FOR TYPE.CNTR = 1 TO MAX.TYPES   W$PIE.LABELS<1,TYPE.CNTR>=TYPES<1,TYPE.CNTR>   W$PIE.VALUES<1,TYPE.CNTR>=AMOUNTS<1,TYPE.CNTR,YEAR.POS> NEXT TYPE.CNTRW$PIE.CAPTION:=OCONV(SUM(W$PIE.VALUES),'MD2,$')**RETURN000221SUB.LISTU0c2SUBROUTINE SUB.LISTU * * Copyright (c) 2010 SB, Inc. All rights reserved. * Description: List Users * *#MAKE# RL $OPTIONS D3 INCLUDE WBPD MVDB.INCLUDE * W$TYPE = "HTML" W$TITLE = "List Users" W$WIDTH = 1 W$PRINTABLE = 1 * IF G$QUERYMODE THEN RETURN * EXECUTE "LISTU" CAPTURING JUNK W$HTML.DATA = '<div  align="left">' W$HTML.DATA<-1> = '<pre>' FOR X = 1 TO DCOUNT( JUNK, @AM )  W$HTML.DATA<-1> = JUNK<X> NEXT X W$HTML.DATA<-1> = '</pre>' W$HTML.DATA<-1> = '</div>' * INCLUDE WBPD SOURCE.VIEW.ICON * RETURN 0000A2VOC0c000001C$BASIC.OPTIONS0c2X$MODE D300003AMVAPPS.INSTALLER0c2PQHRUN WDB.BP APP.INSTALLERSTONA2P000033LOGIN0c2PAPTERM CASE NOINVERTTERM DUMBOPTION D30000F9MVDB.USERS0c0000027guest0c2guestChartsGuest UserUser00003Fadmin0c2adminAdministratorAdmin Userno emailAdministrator000037emailed0c2788CF490Administratoremailed reportUser000036webservice0c2788CF490AdministratorwebserviceUser000281DICT_DASHBOARD.CLOSING.STATS0c000001BAMOUNT0c1A1MD2R1200001CBRANCH0c1A0G2*1L10000021COST.OF.SALE0c1A2MD2R12000028GROSS.PROFIT0c1A0MD2F;1;2;-R12000014ID0c1A0L10000021LAST.AP.REFRESH0c11910904-25-20000021LAST.AR.REFRESH0c11910904-25-20000024LAST.SALES.REFRESH0c11910904-25-2000001APIPE0c1A0 F;C|L100001CREGION0c1A0G3*1L10000034REGION*YYYYMM0c1A0A;0(G3*1):"*":0(G1*1)L1000001DSALESMAN0c1A0G*1L20000024SALESMAN*YYYYMM0c1A0G*2L2000001EYYYY0c1A0G1*1T1,4L400001BYYYYMM0c1A0G1*1L6000023YYYYMM*BRANCH0c1A0G1*2L1000818EMVDB.SUB.TEMPLATES0c0000017FCBAR2D0c2USE FCAREA2D0009C3FCMSAREA2D0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create three arrays here. Two of them are single-dimention attribute*   or value separated lists, one that stores descriptions of each*   point along the X axis (major), another that stores descriptions*   of the components that make up each point along the X axis (minor).*   Example: Monthly sales by territory where each month is a point*   (major) and each territory is a component of that point (minor).*   The third array is a full dynamic array where each attribute is a*   territory (minor) and each value is a month (major).*   Array Examples:    TERRS="" ;* Each attribute is a short description of the territory    MNTHS="" ;* Each value is a short description of the month (Mon/YY)    SALES="" ;* Each attribute contains values (one per month) of the             ;* sales within a territory. SALES<3,2> corresponds to             ;* TERRS<1,3> and MNTHS<1,3>*   then you can load the widget's values and labels like:*     W$BAR.VALUES  = SALES*     W$BAR.XLABELS = MNTHS*     W$BAR.LABELS  = TERRS*   rather than loading them a value at a time as shown*   in the "FOR N = 1 TO 12" loop below.*W$BAR.CAPTION = "YOUR CHART CAPTION HERE"W$BAR.XMEMO = "X-Axis Text" ;* Text that appears below the X-Axis labels                            ;* Ex: Territory Sales by MonthW$BAR.YMEMO = "Y-Axis Text" ;* Text that appears beside the Y-Axis labels                            ;* Ex: Sales (USD)*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = N ;* Value  W$BAR.XLABELS<1,N> = "Label ":N ;* X-Axis labelNEXT NW$BAR.LABELS<1>="Label 1"W$BAR.LABELS<2>="Label 2"W$BAR.LABELS<3>="Label 3"** To suppress the actual values for any of the series:W$BAR.LABEL.OPTS<1> = "showValues='0'"W$BAR.LABEL.OPTS<2> = "showValues='0'"W$BAR.LABEL.OPTS<3> = "showValues='0'"** Specify the alpha (transparency level) for each of the seriesW$BAR.LABEL.OPTS<1> := " areaAlpha='50'"W$BAR.LABEL.OPTS<2> := " areaAlpha='70'"W$BAR.LABEL.OPTS<3> := " areaAlpha='90'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000561SPARKWINLOSS0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the actual data, the other contains benchmark data*   to which the actual data are compared.*   Example:      SALES: Each value is a single sales total for the month      GOALS: Each value is a single goal for the corresponding month*     you build the chart values by comparing each value within the*     two lists, setting each chart value to "W" (win), "L" (lose)*     or "D" (draw) based on the comparison*W$FW.CAPTION = "YOUR CHART CAPTION HERE"W$FW.SUBCAPTION = "YOUR CHART SUBCAPTION HERE"*MAX = DCOUNT(SALES,@VM)FOR N = 1 TO MAX  BEGIN CASE    CASE SALES<1,N> > GOALS<1,N>; W$FW.VALUES<1,N> = "W" ;* Win    CASE SALES<1,N> < GOALS<1,N>; W$FW.VALUES<1,N> = "L" ;* Loss    CASE 1                                               ;* Draw  END CASENEXT N**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001BFCDOUGHNUT2D0c2USE FC2DPIE00057BFC2DPIE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the data, the other contains a short description*   of that data.*   Example:*     TERRSALES: Each value is a single territory's sales for the month*     TERRNAMES: Each value is a short name for the territory*     then you can load the widget's values like:*       W$PIE.LABELS = TERRNAMES*       W$PIE.VALUES = TERRSALES*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 7" loop below.*FOR N = 1 TO 7  W$PIE.LABELS<1,N> = "Slice ":N  W$PIE.VALUES<1,N> = NNEXT N** For a 2D pie, a specific slice can be separated from the pie* by setting this value:* W$PIE.VALUE.OPTS<1,X> = 'isSliced="1"'*   where "X" is the number of the value you want separated** To show values instead of percentages, use this:* W$CHART.OPTIONS<-1> = "showPercentageValues='0'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001BCYLINDER0c2USE THERMOMETER000303TEXT0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create dynamic array, on text line per attribute*   Examples:*     READ TXTITM FROM FILE,ID ELSE TXTITM = "TXTITM NOT FOUND"*   or:*     EXECUTE "YOUR SORT STATEMENT" CAPTURING TXTITEM*W$TEXT.DATA = "YOUR DYNAMIC ARRAY HERE";* example: TXTITM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000016FCLINE0c2USE FCAREA2D000022FCSTACKEDCOLUMN3D0c2USE FCMSBAR2D000A7CHLED0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine a contant to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever.*   Example:*     SALES: Total sales for a period within the current year*     GOAL:  Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the higher of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given GOAL & SALES, calculate the ranges:             GOAL      = 100000             SALES     = 110000             RANGE.BAD = INT(GOAL*.7)             RANGE.OK  = INT(GOAL*.9)             RANGE.GOOD= INT(SALES*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* To* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Value & TargetW$FW.METER.VALUE  = SALES      ;* Your actual value** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001DFCMSCOLUMN3D0c2USE FCMSBAR2D00026AHTML0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create a HTML string from data previously read*W$HTML.DATA = "<h2>YOUR HTML STRING HERE</h2>"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001AFCCOLUMN2D0c2USE FCAREA2D00001CSPARKLINE0c2USE SPARKCOLUMN000ADBHBULLET0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine a contant to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever.*   Example:*     SALES: Total sales for a period within the current year*     GOAL:  Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the higher of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given GOAL & SALES, calculate the ranges:             GOAL      = 100000             SALES     = 110000             RANGE.BAD = INT(GOAL*.7)             RANGE.OK  = INT(GOAL*.9)             RANGE.GOOD= INT(SALES*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.CAPTION     = "YOUR MAIN CAPTION HERE"W$FW.SUBCAPTION  = "YOUR SUB-CAPTION HERE"  ;* Optional*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* To* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Value & TargetW$FW.METER.VALUE  = SALES      ;* Your actual valueW$FW.METER.TARGET = GOAL       ;* Your calculated target** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000010VLED0c2USE HLED000016FC3DPIE0c2USE FC2DPIE000905FCMSBAR2D0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create three arrays here. Two of them are single-dimention attribute*   or value separated lists, one that stores descriptions of each*   point along the X axis (major), another that stores descriptions*   of the components that make up each point along the X axis (minor).*   Example: Monthly sales by territory where each month is a point*   (major) and each territory is a component of that point (minor).*   The third array is a full dynamic array where each attribute is a*   territory (minor) and each value is a month (major).*   Array Examples:    TERRS="" ;* Each attribute is a short description of the territory    MNTHS="" ;* Each value is a short description of the month (Mon/YY)    SALES="" ;* Each attribute contains values (one per month) of the             ;* sales within a territory. SALES<3,2> corresponds to             ;* TERRS<1,3> and MNTHS<1,3>*   then you can load the widget's values and labels like:*     W$BAR.VALUES  = SALES*     W$BAR.XLABELS = MNTHS*     W$BAR.LABELS  = TERRS*   rather than loading them a value at a time as shown*   in the "FOR N = 1 TO 12" loop below.*W$BAR.CAPTION = "YOUR CHART CAPTION HERE"W$BAR.XMEMO = "X-Axis Text" ;* Text that appears below the X-Axis labels                            ;* Ex: Territory Sales by MonthW$BAR.YMEMO = "Y-Axis Text" ;* Text that appears beside the Y-Axis labels                            ;* Ex: Sales (USD)*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = N ;* Value  W$BAR.XLABELS<1,N> = "Label ":N ;* X-Axis labelNEXT NW$BAR.LABELS<1>="Label 1"W$BAR.LABELS<2>="Label 2"W$BAR.LABELS<3>="Label 3"** To suppress the actual values for any of the series:W$BAR.LABEL.OPTS<1> = "showValues='0'"W$BAR.LABEL.OPTS<2> = "showValues='0'"W$BAR.LABEL.OPTS<3> = "showValues='0'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00022EMAP0c2W$TITLE = "Untitled Map"** The W$TYPE variable needs to represent a valid map name*W$TYPE = "MAP:Canada"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$MAP.IDS<1,1> = "01"W$MAP.VALUES<1,1> = 5W$MAP.VALUE.OPTS<1,1> = 'toolText="This is Alberta!"'*W$MAP.RANGE.NAME<1,1> = "Not On The Map"W$MAP.RANGE.LOW<1,1> = "0"W$MAP.RANGE.HIGH<1,1> = "5"W$MAP.RANGE.COLOR<1,1> = "WHITE"W$MAP.RANGE.NAME<1,2> = "On The Map"W$MAP.RANGE.LOW<1,2> = "5"W$MAP.RANGE.HIGH<1,2> = "10"W$MAP.RANGE.COLOR<1,2> = "GREEN"*RETURN0004FFTABLE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create a work table from your data that you'll use to populate the*   widget's table data array where attributes represent rows and*   values represent columns. NOTE: If you are using the widget's*   Total row, you have to calculate the totals yourself and stick*   them in the appropriate W$TABLE.TOTALS value.** Set up column labelsW$TABLE.COL.LABELS<1,1> = "Column Heading 1"W$TABLE.COL.LABELS<1,2> = "Column Heading 2"W$TABLE.COL.LABELS<1,3> = "Column Heading 3"** Column justification = left, right, centerW$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "right"** Table RowsFOR ROW = 1 TO 5  W$TABLE.DATA<ROW,1> = ROW:",1"  W$TABLE.DATA<ROW,2> = ROW:",2"NEXT ROW** TotalsW$TABLE.TOTALS<1,1> = "2"W$TABLE.TOTALS<1,2> = "4"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000DE2ANGULARGAUGE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine some contants to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever. Also, gather*   information that will allow you to create ranges against which to*   compare the number and those constants, if any.*   Example:*     SALES.CY: Total sales for a period within the current year*     SALES.LY: Total sales within that same period last year*     SLS.GOAL: Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the highest of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given SLS.GOAL & SALES.CY, calculate the ranges:             SLS.GOAL  = 100000             SALES.CY  = 110000             SALES.LY  = 95000             RANGE.BAD = INT(SLS.GOAL*.7)             RANGE.OK  = INT(SLS.GOAL*.9)             RANGE.GOOD= INT(SALES.CY*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* ToW$FW.COLOR.RANGE<3,2> = COLOR$YELLOW;* Override color* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Main Dial ValueW$FW.DIAL.VALUES<1> = SALES.CY      ;* Your actual value** Trendpoints (optional)* By default, there are no trendpoints on the gauge.** First TrendpointW$FW.TRENDPOINT.VALUES<1,1> = SALES.LYW$FW.TRENDPOINT.LABELS<1,1> = "Last Year"W$FW.TRENDPOINT.OPTS<1,1> = 'color="':COLOR$BLACK:'" useMarker="1"'* Second TrendpointW$FW.TRENDPOINT.VALUES<1,2> = SLS.GOALW$FW.TRENDPOINT.LABELS<1,2> = "Goal"W$FW.TRENDPOINT.OPTS<1,2> = 'color="':COLOR$SILVER:'" useMarker="1"'** Plot an arc (optional) W$FW.TRENDPOINT.VALUES<2,1> = SALES.LY ;* Arc beginW$FW.TRENDPOINT.VALUES<2,2> = SALES.CY ;* Arc end** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001AFCCOLUMN3D0c2USE FCAREA2D000020FCSTACKEDAREA2D0c2USE FCMSBAR2D0005C4FCAREA2D0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the data, the other contains a short description*   of that data, like the month and year.*   Example:*     TERRSALES: Each value is a single territory's sales for the month*     TERRPERDS: Each value is a short description of the period (MM/YY)*     then you can load the widget's values like:*       W$BAR.XLABELS = TERRPERDS*       W$BAR.VALUES = TERRSALES*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 12" loop below.*W$BAR.CAPTION = "YOUR CHART CAPTION HERE"W$BAR.XMEMO = "X-Axis Text" ;* Text that appears below the X-Axis labels                            ;* Ex: Territory ABC Sales by MonthW$BAR.YMEMO = "Y-Axis Text" ;* Text that appears beside the Y-Axis labels                            ;* Ex: Sales (USD)*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = N ;* Value  W$BAR.XLABELS<1,N> = "Label ":N ;* X-Axis labelNEXT N**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN0006F3FUNNEL0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the data, the other contains a short description*   of that data. NOTE: The values should be ordered from largest to*   smallest (value<1,1> should be larger than value<1,2> and so on)*   or the funnel will look weird. For a pyramid, that order should*   be reversed (value<1,1> should be smaller than value<1,2>, etc).*   Example:*     KILLSTATS: Each value is a single territory's sales for the month*     STATDESCS: Each value is a short name for the territory*     then you can load the widget's values like:*       W$FC.LABELS = STATDESCS*       W$FC.VALUES = KILLSTATS*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 5" loop below.*   For a funnel chart, the last value in the list must represent the*   total of all the other values. This is not true for a pyramid chart.*FOR N = 1 TO 5  W$FW.LABELS<1,N> = "Section ":N  W$FW.VALUES<1,N> = NNEXT N*W$FW.CAPTION = "YOUR CAPTION HERE"W$FW.SUBCAPTION = "YOUR SUB-CAPTION HERE"** To show percentages instead of values, use this:* W$CHART.OPTIONS<-1> = "showPercentValues='1'"* To separate the sections from one another, use this:* W$CHART.OPTIONS<-1> = "isSliced='1'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN0006FCTHERMOMETER0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine a contant to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever.*   Example:*     SALES: Total sales for a period within the current year*     GOAL:  Sales goal for said current year period*   Example: Given GOAL & SALES, calculate the ranges:             GOAL      = 100000             SALES     = 110000*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = GOAL ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"W$FW.THERMOMETER.COLOR = COLOR$RED*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** ValueW$FW.METER.VALUE  = SALES      ;* Your actual value** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000019FCMSLINE0c2USE FCMSBAR2D000BB5USAMAP0c2W$TITLE = "Untitled Map"W$TYPE = "%TYPE%"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN** The IDs of each section of a USA map are the state abbreviations, including DC* A list of the state names can be obtained as follows:OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "Unable to open MVDB.CONTROL"  RETURNENDREAD STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ''CONVERT "," TO @VM IN STATE.NAMES*IF WIDGET.USER.DATA(1) # "" THEN  * User has clicked on a specific state. That state map will be displayed.  * This entire section of code can be removed if you dont want to allow  * drill-down to a state map.  *  * The map "name" for the sepcifc state is stored in WIDGET.USER.DATA(2).  * The IDs for the state map are the FIPS county codes.  * A list of county codes can be gathered for a specific state as follows:  OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE    W$TYPE = "TEXT"    W$TEXT.DATA = "Unable to open MVDB.MAP.DATA"    RETURN  END  EXECUTE 'SELECT MVDB.MAP.DATA WITH NAME = "':WIDGET.USER.DATA(2):'"' CAPTURING JUNK  N = 0  LOOP    READNEXT ID ELSE EXIT    READ REC FROM F.MVDB.MAP.DATA, ID THEN      N += 1      * The ID of the map data file is STATE * FIPS_Code      * Extract the FIPS code from the ID and use it as the ID for this      * value.      W$MAP.IDS<1,N> = FIELD( ID, '*', 2 )      W$MAP.VALUES<1,N> = N      * The county name can be found in REC<2>      W$MAP.VALUE.OPTS<1,N> = 'toolText="':REC<2>:'"'    END  REPEAT  * Since we are in drill-down mode, we need to give the user a way to get back  * to the national map. To get out of drill-down mode, WIDGET.USER.DATA(1) needs  * to be cleared. Using a link is an easy way to do that.  W$LINK.LABEL<1,2> = "Return to USA Map"  W$LINK.LOCATION<1,2> = "1"  W$LINK.UD.POS<1,2> = 1  W$LINK.UD.VAL<1,2> = ""  * Override the title to show the state name.  W$TITLE = "Demo - ":WIDGET.USER.DATA(1):" Counties by Alphabet"END ELSE ;* No state specified, full US Map  * Assign a value to each desired map segments (States) as follows  W$MAP.IDS<1,-1> = "TX"  W$MAP.VALUES<1,-1> = 100  W$MAP.VALUE.OPTS<1,-1> = 'toolText="Texas" ' ;* Multiple option settings are space-delimited  *  * With drill-down enabled, the widget will automatically be re-executed with the state ID in WIDGET.USER.DATA(1)  * Allow drill-down to the state level by setting this value:  W$MAP.VALUE.DD<1,-1> = 1END** Set up ranges of values. Note that the low range is inclusive, high range is exclusive.W$MAP.RANGE.NAME<1,1> = "Range 1-99"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "100"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Range 100-199"W$MAP.RANGE.LOW<1,2> = "100"W$MAP.RANGE.HIGH<1,2> = "200"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Range 200-300"W$MAP.RANGE.LOW<1,3> = "200"W$MAP.RANGE.HIGH<1,3> = "301"W$MAP.RANGE.COLOR<1,3> = "RED"*RETURN000DE2HLINEARGAUGE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine some contants to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever. Also, gather*   information that will allow you to create ranges against which to*   compare the number and those constants, if any.*   Example:*     SALES.CY: Total sales for a period within the current year*     SALES.LY: Total sales within that same period last year*     SLS.GOAL: Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the highest of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given SLS.GOAL & SALES.CY, calculate the ranges:             SLS.GOAL  = 100000             SALES.CY  = 110000             SALES.LY  = 95000             RANGE.BAD = INT(SLS.GOAL*.7)             RANGE.OK  = INT(SLS.GOAL*.9)             RANGE.GOOD= INT(SALES.CY*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$YELLOW;* Override color* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Main Dial ValueW$FW.DIAL.VALUES<1> = SALES.CY      ;* Your actual value** Trendpoints (optional)* By default, there are no trendpoints on the gauge.** First TrendpointW$FW.TRENDPOINT.VALUES<1,1> = SALES.LYW$FW.TRENDPOINT.LABELS<1,1> = "Last Year"W$FW.TRENDPOINT.OPTS<1,1> = 'color="':COLOR$BLACK:'" useMarker="1"'* Second TrendpointW$FW.TRENDPOINT.VALUES<1,2> = SLS.GOALW$FW.TRENDPOINT.LABELS<1,2> = "Goal"W$FW.TRENDPOINT.OPTS<1,2> = 'color="':COLOR$SILVER:'" useMarker="1"'** Plot an arc (optional) W$FW.TRENDPOINT.VALUES<2,1> = SALES.LY ;* Arc beginW$FW.TRENDPOINT.VALUES<2,2> = SALES.CY ;* Arc end** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001DFCMSCOLUMN2D0c2USE FCMSBAR2D000016VBULLET0c2USE HBULLET000022FCSTACKEDCOLUMN2D0c2USE FCMSBAR2D000009GANTT0c20003E6SPARKCOLUMN0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create one one-attribute, value-separated array here.*   Example:*     TERRSALES: Each value is a single territory's sales for the month*     then you can load the widget's values like:*       W$FW.VALUES = TERRSALES*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 12" loop below.*W$FW.CAPTION = "YOUR CHART CAPTION HERE"W$FW.SUBCAPTION = "YOUR CHART SUBCAPTION HERE"*FOR N = 1 TO 12  W$FW.VALUES<1,N> = N ;* ValueNEXT N**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000015PYRAMID0c2USE FUNNEL000010BULB0c2USE HLED00001FFCSTACKEDBAR2D0c2USE FCMSBAR2D00005CDICT_MVDB.WIDGETS0c000001FSUB0c1A1SUBROUTINEL2500001CUSERS0c1A2USERSL2000D895WREST.BP0c000023CWSWAP0c2SUBROUTINE WSWAP(string,SUB1,SUB2)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine swaps one string for another*              **********************************************************************IDX.POS = 1LOOP  POS = INDEX(string, SUB1, IDX.POS)WHILE POS DO  string = string[1,POS-1]:SUB2:string[POS+LEN(SUB1),LEN(string)]  IDX.POS = IDX.POS + COUNT(SUB2,SUB1)REPEATRETURNEND000212WGETINFO0c2SUBROUTINE WGETINFO(InfoVal, InfoItem)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: March 2017* Description: return an element from WWW.INFO***********************************************************************INCLUDE WBPD WWW.INCLUDEIF NUM(InfoItem) AND InfoItem > 0 AND InfoItem <= 50 THEN IF INT(InfoItem) = InfoItem THEN  InfoVal = WWW.INFO(InfoItem) ENDENDRETURNEND0005BFWENCODEJSON0c2SUBROUTINE WENCODEJSON(ORIG.OPTION,IN.STR,OUT.STR)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 8/13/2016* Description: this program will convert all bad characters to an escaped character************************************************************************OPEN 'RESULT.FILE' TO RFILE ELSE STOP* WE NEED TO ENCODE* " = \"   (34)* \ = \\    (92)* / = \/* CHAR(7) = \b* CHAR(13) = \r* char(10) = \n* char(12) = \f* char(9)  = \t*WRITE IN.STR ON RFILE, 'IN.STR'OPTION=ORIG.OPTIONOUT.STR=''L=LEN(IN.STR)CONVERT @AM TO CHAR(10) IN IN.STR; * LETS SWITCH 254 TO CR BE DEFAULTFOR X=1 TO L  C=IN.STR[X,1]  SEQ.C=SEQ(C)  ENCODE=0  IF SEQ.C < 32 THEN ENCODE=1; * BELOW SPACE*IF SEQ.C > 32 AND SEQ.C < 48 THEN ENCODE=1; * LETS ENCODE ALL OF THIS !@$%^&*()  IF SEQ.C=34 THEN ENCODE=1  IF SEQ.C=92 THEN ENCODE=1  IF SEQ.C=47 THEN ENCODE=1  IF SEQ.C > 122 THEN ENCODE = 1; * LETS ENCODE ALL THE HIGH ENTRIES*IF SEQ.C >= 91 AND SEQ.C <= 96 THEN ENCODE=1  IF ENCODE THEN    BEGIN CASE      CASE SEQ.C=7; OUT.STR='\b'      CASE C='\'; OUT.STR:='\\'      CASE C='/'; OUT.STR:='\/'      CASE SEQ.C=10; OUT.STR:='\n'      CASE SEQ.C=13; OUT.STR:='\r'      CASE SEQ.C=12; OUT.STR:='\f'      CASE 1;  OUT.STR:='\u00':OCONV(C,'MX0C');*QM*    END CASE  END ELSE    OUT.STR=OUT.STR:C  ENDNEXT XRETURNEND000235WGETCOOKIE0c2SUBROUTINE WGETCOOKIE(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine gets the value of a cookie.*              **********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''TEMPVARS = OCONV(CGI$CVARS,'MCU')LOCATE OCONV(VarName,'MCU') IN TEMPVARS SETTING POS THEN  VarValue = CGI$CVALS<POS>ENDRETURNEND0058D9WDEBUG0c2* WDEBUG** Debug REST Services* Copyright (c) 2017 Zumasys Inc.* Rewritten by Peter Schellenbach, 10/18/2017** Based on original version:*  Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved*  Written by: Luke Bucklin, Sierra Bravo*  Date: Sometime, 2006-ish*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD FI.WDB.DEBUG*CLR.SCR = @(-1)CLR.EOS = @(-3)MAX.LINES = SYSTEM(3) - 4MAX.COLS = SYSTEM(2) - 1IF MAX.LINES <= 0 OR CLR.SCR = '' OR CLR.EOS = '' THEN  MAX.LINES = 20  CLR.SCR = ''  CLR.EOS = ''  PRMPT.LINE = CHAR(13):CHAR(10)END ELSE  PRMPT.LINE = @(0, MAX.LINES + 2):CLR.EOSENDPROMPT ''*PRINT CLR.SCR:PRINTPRINT 'WDEBUG Web Request Degug Tool'PRINTPRINT 'The WDEBUG tool allows you to inspect, modify and re-run web requests.'PRINT 'Whenever a request for a debuggable resource is processed by WDB.INIT,'PRINT 'a debug record for the request is added to the WDB.DEBUG file. WDEBUG'PRINT 'allows you to select a debug record, view the request details, edit the'PRINT 'request variables, re-run the request and view the response.'PRINTPRINT 'To debug web requests for a resource, set attribute 7 of the WDB.RESOURCE'PRINT 'record for the resource to 1, then issue the web request from the client'PRINT 'browser or other agent. WDEBUG will show a list of recent web requests to'PRINT 'select from.'PRINTPRINT 'Start WDEBUG with an active select list if you need to use special criteria'PRINT 'to select the record(s) you need to debug.'PRINTPRINT 'Press <enter> to continue':INPUT ANS*OPEN 'WDB.DEBUG' TO F.WDB.DEBUG ELSE  PRINT 'The WDB.DEBUG data file is required to use WDEBUG. Default installations'  PRINT 'only create the dictionary for this file. Please create the data section'  PRINT 'to use WDEBUG: CREATE-FILE DATA WDB.DEBUG 101.'  STOPEND*SESSION.FLAG = 0OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SESSION.FLAG = 1 ;* can restore session when running debug reqest*EDITOR = ''IDS = ''NUM.IDS = 0IF SYSTEM(11) THEN  LOOP    READNEXT ID ELSE EXIT    READV X FROM F.WDB.DEBUG, ID, 1 THEN      IDS<-1> = ID      NUM.IDS += 1    END ELSE      PRINT ID:' not found in WDB.DEBUG!'    END  REPEATENDUSE.SUPPLIED.LIST = (NUM.IDS > 0)*LOOP  IF NOT(USE.SUPPLIED.LIST) THEN* Select available WDB.DEBUG items    CMND = 'SSELECT WDB.DEBUG WITH TYPE = "C" "R" BY-DSND DATE BY-DSND TIME'    EXECUTE CMND CAPTURING RESULT    IF SYSTEM(11) = 0 THEN      PRINT "No items found."      STOP    END    IDS = ''    NUM.IDS = 0    LOOP      READNEXT ID ELSE EXIT      IDS<-1> = ID      NUM.IDS += 1    REPEAT  END*  TOP = 0  LOOP* Display page of items    PRINT CLR.SCR:    PRINT "Ln Date. Time.... Path................ Remote Address...... Request ID........."    FOR CNTR = 1 TO MAX.LINES UNTIL CNTR + TOP > NUM.IDS      DBG.ID = IDS<CNTR>      READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE CONTINUE      PATH.INFO = DBGREC<WDBG_PATH>      IF PATH.INFO = '' THEN PATH.INFO = DBGREC<WDBG_HANDLER>:'/':DBGREC<WDBG_RESOURCE>      PRINT CNTR "R#2 ":      PRINT OCONV(DBGREC<WDBG_DATE>, 'D0-') "L#5 ":      PRINT OCONV(DBGREC<WDBG_TIME>, 'MTS') "L#8 ":      PRINT PATH.INFO "L#20 ":      PRINT DBGREC<WDBG_REMOTE_ADDR> "L#20 ":      PRINT DBGREC<WDBG_REQUEST_ID>[1,20]    NEXT CNTR    IF TOP + MAX.LINES > NUM.IDS THEN BOT = NUM.IDS ELSE BOT = TOP + MAX.LINES    PRINT "Showing items ":(TOP + 1):"-":BOT:" of ":NUM.IDS*    LOOP      PRINT PRMPT.LINE:"Command: (Q)uit (R)efresh (C)lear (N)ext (P)rev (##) Line to debug: ":      INPUT COMMAND      IF COMMAND MATCHES '1N0N' THEN        IF COMMAND >= 1 AND COMMAND <= MAX.LINES AND COMMAND + TOP <= NUM.IDS THEN          DBG.ID = IDS<COMMAND + TOP>          GOSUB debug.request        END        COMMAND = ''      END ELSE        COMMAND = OCONV(COMMAND[1,1], 'MCU')        IF COMMAND = '' THEN COMMAND = 'N'        IF INDEX('ERCNPQ', COMMAND, 1) = 0 THEN COMMAND = ''      END    WHILE COMMAND = '' DO REPEAT*    BEGIN CASE      CASE COMMAND = 'N'        IF TOP + MAX.LINES < NUM.IDS THEN TOP += MAX.LINES      CASE COMMAND = 'P'        IF TOP - MAX.LINES >= 0 THEN TOP -= MAX.LINES    END CASE  WHILE COMMAND = 'N' OR COMMAND = 'P' DO REPEAT*UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'R' ; NULL    CASE COMMAND = 'C'      EXECUTE 'SELECT WDB.DEBUG WITH TYPE = "C" "R"'      PRINT 'Are you sure you want to clear these items from the WDB.DEBUG file? ':      INPUT ANS      ANS = OCONV(ANS[1,1],'MCU')      IF ANS = 'Y' THEN        IF SYSTEM(11) THEN          LOOP            READNEXT ID ELSE EXIT            DELETE F.WDB.DEBUG, ID          REPEAT        END      END ELSE        CLEARSELECT      END  END CASEREPEATSTOP**----------debug.request:*----------*READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE  PRINT "The selected item '":DBG.ID:"' is not available!"  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDEDIT.ID = 'D':DBG.ID[2, LEN(DBG.ID)]LOOP  PRINT PRMPT.LINE:"Debugging ":DBG.ID[1,28]:" - command: (Q)uit (V)iew (E)dit (R)un: ":  INPUT COMMAND  COMMAND = OCONV(COMMAND[1,1], 'MCU')UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'V'      GOSUB view.request    CASE COMMAND = 'E'      GOSUB edit.request    CASE COMMAND = 'R'      GOSUB run.request  END CASEREPEATRETURN**----------view.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDGOSUB to.editNUM.LNS = DCOUNT(EDIT.REC, @AM)I = 1LOOP WHILE I <= NUM.LNS DO  X = EDIT.REC<I>  IF LEN(X) > MAX.COLS THEN    X = FOLD(X, MAX.COLS, @AM)    EDIT.REC<I> = X    N = COUNT(X, @AM)    NUM.LNS += N    I += N  END  I += 1REPEATIF NUM.LNS = 0 THEN NUM.LNS = 1NUM.PGS = INT((NUM.LNS - 1) / MAX.LINES) + 1CUR.PG = 1LOOP  PG.TOP = (CUR.PG - 1) * MAX.LINES  IF PG.TOP + MAX.LINES > NUM.LNS THEN LPP = NUM.LNS - PG.TOP ELSE LPP = MAX.LINES  PRINT CLR.SCR:  PRINT 'Page ':CUR.PG:' of ':NUM.PGS:SPACE(10):DBG.ID  PRINT  FOR I = 1 TO LPP    PRINT EDIT.REC<I + PG.TOP>  NEXT I  PRINT PRMPT.LINE:'Command: (Q)uit (N)ext (P)rev (##) Goto page ':  INPUT COMMAND  IF COMMAND MATCHES '1N0N' THEN    IF COMMAND >= 1 AND COMMAND <= NUM.PGS THEN CUR.PG = COMMAND  END ELSE    COMMAND = OCONV(COMMAND[1,1], 'MCU')  ENDUNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'N' OR COMMAND = ''      IF CUR.PG < NUM.PGS THEN CUR.PG = CUR.PG + 1    CASE COMMAND = 'P'      IF CUR.PG > 1 THEN CUR.PG = CUR.PG - 1  END CASEREPEATRETURN**----------edit.request:*----------*IF EDITOR = '' THEN GOSUB choose.editorIF EDITOR <> '' THEN  EDIT.ID = 'D':DBG.ID  GOSUB to.edit  WRITE EDIT.REC ON F.WDB.DEBUG, EDIT.ID  CMND = EDITOR:' WDB.DEBUG ':EDIT.ID  EXECUTE CMND  READ EDIT.REC FROM F.WDB.DEBUG, EDIT.ID ELSE NULL  DELETE F.WDB.DEBUG, EDIT.ID  GOSUB from.editENDRETURN**----------run.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNEND*HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* Reconstruct query stringQSTR = ''QSEP = ''* headers and server variablesN = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_HEADER_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* form variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_CGI_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_CGI_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  URLENCODE.STRING = CHANGE(THE.BODY, @VM, CHAR(10))  GOSUB url.encode  QSTR := QSEP:'__body__=':NEW.STRINGEND* restore session stateIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    SESSION.REC = ''    SESSION.REC<1> = DBGREC<WDBG_SESSION_VARS>    SESSION.REC<2> = DBGREC<WDBG_SESSION_VALS>    SESSION.REC<3> = DBGREC<WDBG_SESSION_DATE>    SESSION.REC<4> = DBGREC<WDBG_SESSION_TIME>    WRITE SESSION.REC ON F.WEB.SESSION, SESSION.ID  ENDEND* break the query string into 1000 byte chunksN = INT((LEN(QSTR) - 1) / 1000) + 1* build the command lineRUN.ID = DBGREC<WDBG_REQUEST_ID>CMND = 'WDB.INIT ':HANDLER.NAME:'/':RESOURCE.NAME:' ':RUN.ID:'-1-':N:' %% _WDEBUG_MODE_'** run the commandPRINTPRINT 'Executing the request: ':CMNDPRINTMAT WWW.INFO = ""EXECSTART = SYSTEM(1020) ;*QM** send query string as stacked inputFOR I = 1 TO N  DATA QSTR[((I - 1) * 1000) + 1, 1000]NEXT IEXECUTE CMND CAPTURING RESPONSEEXECDUR = SYSTEM(1020) - EXECSTART ;*QM*PRINT 'Request complete. Press <enter> to parse results':INPUT ANS** update the request runtimeDBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_DURATION> = EXECDUR* process the responseLINT.BEFORE = ''LINT.AFTER = ''WARN = ''ERR = ''* Gather lint from before the start tag and after the complete tagDBGREC<WDBG_WARNING> = '' ;* WarningsDBGREC<WDBG_ERROR> = '' ;* ErrorsDBGREC<WDBG_LINT> = '' ;* LintIF RESPONSE<1> = "700 WDB-START" THEN  RESPONSE = DELETE(RESPONSE, 1)END ELSE  TAG = @AM:"700 WDB-START":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '700 WDB-START tag is missing from response'    LINT.BEFORE = RESPONSE    RESPONSE = ''  END ELSE    IF TAG.POS >= 1 THEN      LINT.BEFORE = RESPONSE[1, TAG.POS - 1]      RESPONSE = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    END  ENDENDN = DCOUNT(RESPONSE, @AM)IF RESPONSE<N> = "800 WDB-COMPLETE" THEN  RESPONSE = DELETE(RESPONSE, N)END ELSE  TAG = @AM:"800 WDB-COMPLETE":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '800 WDB-COMPLETE tag missing from response!'  END ELSE    LINT.AFTER = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    RESPONSE = RESPONSE[1, TAG.POS - 1]  ENDEND* Clean up lintIF TRIM(CHANGE(LINT.BEFORE, @AM, '')) = '' THEN LINT.BEFORE = ''IF TRIM(CHANGE(LINT.AFTER, @AM, '')) = '' THEN LINT.AFTER = ''IF LINT.BEFORE <> '' OR LINT.AFTER <> '' THEN  LINT = LINT.BEFORE  IF LINT.BEFORE <> '' AND LINT.AFTER <> '' THEN LINT := @AM:'...':@AM  LINT := LINT.AFTER  DBGREC<WDBG_LINT> = LOWER(LINT)END* Parse the response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''DBGREC<WDBG_RESPONSE_CONTENT> = ''NUM.VARS = 0STATUS.CODE = ''EOH = INDEX(RESPONSE, @AM:@AM, 1) ;* headers end at first blank line in responseIF EOH = 0 THEN EOH = LEN(RESPONSE) + 1N = DCOUNT(RESPONSE[1, EOH - 1], @AM)FOR I = 1 TO N  HDR.LINE = RESPONSE<I>  IF HDR.LINE[1,10] = '500 ERROR ' THEN    ERR = HDR.LINE[11, LEN(HDR.LINE)]    IF STATUS.CODE = '' THEN STATUS.CODE = 500  END ELSE    HDR.VAR = FIELD(HDR.LINE, ':', 1)    HDR.VAL = TRIMF(HDR.LINE[COL2() + 1, LEN(HDR.LINE)])    M = LEN(HDR.VAR)    FOR J = 1 TO M      IF NOT(HDR.VAR[J,1] MATCHES '1A') AND HDR.VAR[J,1] <> '-' THEN        HDR.VAR = ''        EXIT      END    NEXT J    IF HDR.LINE[LEN(HDR.VAR) + 1, 1] <> ':' THEN HDR.VAR = ''    IF HDR.VAR = '' THEN      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = '_BAD_'      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.LINE ;* invalid header line!    END ELSE      IF HDR.VAR = 'X-MVDB-STATUS' THEN        STATUS.CODE = HDR.VAL      END ELSE        NUM.VARS += 1        DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = HDR.VAR        DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.VAL      END    END  ENDNEXT IIF STATUS.CODE = '' THEN STATUS.CODE = 200DBGREC<WDBG_STATUS> = STATUS.CODE* save response contentIF EOH + 2 <= LEN(RESPONSE) THEN  DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(RESPONSE[EOH + 2, LEN(RESPONSE)])ENDDBGREC<WDBG_WARNING> = WARNDBGREC<WDBG_ERROR> = ERRRETURN**----------to.edit:*----------*EDIT.REC = ''EDIT.REC<-1> = '[INFO] (do not edit this section)'EDIT.REC<-1> = 'Date            = ':OCONV(DBGREC<WDBG_DATE>,'D4')EDIT.REC<-1> = 'Time            = ':OCONV(DBGREC<WDBG_TIME>,'MTS')EDIT.REC<-1> = 'Duration        = ':DBGREC<WDBG_DURATION>EDIT.REC<-1> = 'Port            = ':DBGREC<WDBG_PORT>EDIT.REC<-1> = 'Handler         = ':DBGREC<WDBG_HANDLER>EDIT.REC<-1> = 'Resource        = ':DBGREC<WDBG_RESOURCE>EDIT.REC<-1> = 'Controller      = ':DBGREC<WDBG_CONTROLLER>EDIT.REC<-1> = 'Program         = ':DBGREC<WDBG_PROGRAM>EDIT.REC<-1> = 'RequestID       = ':DBGREC<WDBG_REQUEST_ID>EDIT.REC<-1> = 'Method          = ':DBGREC<WDBG_METHOD>EDIT.REC<-1> = 'Path            = ':DBGREC<WDBG_PATH>EDIT.REC<-1> = 'RemoteAddr      = ':DBGREC<WDBG_REMOTE_ADDR>EDIT.REC<-1> = 'Status          = ':DBGREC<WDBG_STATUS>IF DBGREC<WDBG_WARNING> <> '' THEN  EDIT.REC<-1> = 'WARNING: ':DBGREC<WDBG_WARNING>ENDIF DBGREC<WDBG_ERROR> <> '' THEN  EDIT.REC<-1> = 'ERROR: ':DBGREC<WDBG_ERROR>ENDIF DBGREC<WDBG_LINT> <> '' THEN  EDIT.REC<-1> = 'LINT:':@AM:RAISE(DBGREC<WDBG_LINT>)END* Request headers and server variablesEDIT.REC<-1> = @AM:'[HEADERS]'N = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  HDR.VAL = DBGREC<WDBG_HEADER_VALS, I>  EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VALNEXT I* Query string variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[VARS]'  FOR I = 1 TO N    CGI.VAR = DBGREC<WDBG_CGI_VARS, I>    CGI.VAL = DBGREC<WDBG_CGI_VALS, I>    EDIT.REC<-1> = CGI.VAR:SPACE(16-LEN(CGI.VAR)):'= ':CGI.VAL  NEXT IEND* CookiesLOCATE 'HTTP_COOKIE' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  CSTRING = DBGREC<WDBG_HEADER_VALS, POS>END ELSE CSTRING = ''CONVERT ';' TO @AM IN CSTRINGN = DCOUNT(CSTRING, @AM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[COOKIES]'  FOR I = 1 TO N    COOKIE.VAR = TRIM(FIELD(CSTRING<I>, '=', 1))    COOKIE.VAL = CSTRING<I>[COL2() + 1, 99999]    EDIT.REC<-1> = COOKIE.VAR:SPACE(16-LEN(COOKIE.VAR)):'= ':COOKIE.VAL  NEXT IEND* REST parametersLOCATE 'PATH_INFO' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  PATH = DBGREC<WDBG_HEADER_VALS, POS>END ELSE PATH = ''IF PATH[1,1] = '/' THEN PATH = PATH[2,9999]N = DCOUNT(PATH, '/')IF N > 0 THEN  EDIT.REC<-1> = @AM:'[PARAMS]'  FOR I = 3 TO N    PARAM.VAR = 'Param[':(I-2):']'    EDIT.REC<-1> = PARAM.VAR:SPACE(16-LEN(PARAM.VAR)):'= ':FIELD(PATH, '/', I)  NEXT IEND* Session variablesIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    N = DCOUNT(DBGREC<WDBG_SESSION_VARS>, @VM)    IF N > 0 THEN      EDIT.REC<-1> = @AM:'[SESSION]'      EDIT.REC<-1> = '_SessionID      = ':SESSION.ID      IF DBGREC<WDBG_SESSION_DATE> <> '' THEN EDIT.REC<-1> = '_Date           = ':OCONV(DBGREC<20>, 'D4')      IF DBGREC<WDBG_SESSION_TIME> <> '' THEN EDIT.REC<-1> = '_Time           = ':OCONV(DBGREC<21>, 'MTS')      FOR I = 1 TO N        SESSION.VAR = DBGREC<WDBG_SESSION_VARS, I>        EDIT.REC<-1> = SESSION.VAR:SPACE(16-LEN(SESSION.VAR)):'= ':DBGREC<WDBG_SESSION_VALS, I>      NEXT I    END  ENDEND* Request bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  EDIT.REC<-1> = @AM:'[BODY]':@AM:RAISE(THE.BODY)END* Response headersN = DCOUNT(DBGREC<WDBG_RESPONSE_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[RESPONSE_HEADERS]'  FOR I = 1 TO N    HDR.VAR = DBGREC<WDBG_RESPONSE_VARS, I>    HDR.VAL = DBGREC<WDBG_RESPONSE_VALS, I>    EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VAL  NEXT IEND* Response contentTHE.CONTENT = DBGREC<WDBG_RESPONSE_CONTENT>IF THE.CONTENT <> '' THEN  EDIT.REC<-1> = @AM:'[RESPONSE_CONTENT]':@AM:RAISE(THE.CONTENT)END*RETURN**----------from.edit:*----------*SESSION.ID = ''HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* If COOKIES section exists, rebuild HTTP_COOKIE headerCOOKIES = ''SECT = 'COOKIES'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    COOKIE = EDIT.REC<I>    IF COOKIE <> '' THEN      COOKIE.NAME = TRIM(FIELD(COOKIE, '=', 1))      COOKIE.VAL = TRIMF(COOKIE[COL2() + 1, LEN(COOKIE)])      COOKIES := COOKIE.NAME:'=':COOKIE.VAL:';'      IF OCONV(COOKIE.NAME, 'MCU') = 'SESSIONID' THEN SESSION.ID = COOKIE.VAL    END  NEXT I  IF COOKIES[LEN(COOKIES), 1] = ';' THEN COOKIES = COOKIES[1, LEN(COOKIES) - 1]END* If PARAMS section exists, rebuild PATH_INFO headerPARAMS = ''SECT = 'PARAMS'GOSUB find.sectionIF SECT.START > 0 THEN  PNUM = 1  FOR I = SECT.START + 1 TO SECT.END    PARAM = EDIT.REC<I>    IF PARAM <> '' THEN      PARAM.NAME = TRIM(OCONV(FIELD(PARAM, '=', 1), 'MCU'))      PARAM.VAL = TRIMF(PARAM[COL2() + 1, LEN(PARAM)])      IF PARAM.NAME <> 'PARAM[':PNUM:']' THEN EXIT      PARAMS := '/':PARAM.VAL      PNUM += 1    END  NEXT I  IF PARAMS <> '' THEN PARAMS = '/':HANDLER.NAME:'/':RESOURCE.NAME:PARAMS ;* handler & resource come before paramsEND* Get headers and server variablesDBGREC<WDBG_HEADER_VARS> = ''DBGREC<WDBG_HEADER_VALS> = ''NUM.VARS = 0SECT = 'HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])* check for special headers      BEGIN CASE        CASE OCONV(VAR.NAME, 'MCU') = 'HTTP_COOKIE'          IF COOKIES <> '' THEN            VAR.VAL = COOKIES          END        CASE OCONV(VAR.NAME, 'MCU') = 'PATH_INFO'          IF PARAMS <> '' THEN            VAR.VAL = PARAMS          END          IF VAR.VAL[1,1] <> '/' THEN VAR.VAL = '/' : VAR.VAL          IF COUNT(VAR.VAL, '/') >= 2 THEN            HANDLER.NAME = FIELD(VAR.VAL, '/', 2)            RESOURCE.NAME = FIELD(VAR.VAL, '/', 3)          END          DBGREC<WDBG_PATH> = VAR.VAL        CASE OCONV(VAR.NAME, 'MCU') = 'REQUEST_METHOD'          DBGREC<WDBG_METHOD> = VAR.VAL              CASE OCONV(VAR.NAME, 'MCU') = 'REMOTE_ADDR'          DBGREC<WDBG_REMOTE_ADDR> = VAR.VAL      END CASE      NUM.VARS += 1      DBGREC<WDBG_HEADER_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_HEADER_VALS, NUM.VARS> = VAR.VAL    END  NEXT I  DBGREC<WDBG_HANDLER> = HANDLER.NAME  DBGREC<WDBG_RESOURCE> = RESOURCE.NAMEEND* Get form variablesDBGREC<WDBG_CGI_VARS> = ''DBGREC<WDBG_CGI_VALS> = ''NUM.VARS = 0SECT = 'VARS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_CGI_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_CGI_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get bodyDBGREC<WDBG_BODY> = ''SECT = 'BODY'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.BODY = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_BODY> = LOWER(THE.BODY)  ENDEND* Get session stateIF SESSION.FLAG AND SESSION.ID <> '' THEN  DBGREC<WDBG_SESSION_ID> = ''  DBGREC<WDBG_SESSION_VARS> = ''  DBGREC<WDBG_SESSION_VALS> = ''  DBGREC<WDBG_SESSION_DATE> = ''  DBGREC<WDBG_SESSION_TIME> = ''  NUM.VARS = 0  SECT = 'SESSION'  GOSUB find.section  IF SECT.START > 0 THEN    FOR I = SECT.START + 1 TO SECT.END      SESSION.LINE = EDIT.REC<I>      SESSION.VAR = TRIM(FIELD(SESSION.LINE, '=', 1))      SESSION.VAL = TRIMF(SESSION.LINE[COL2() + 1, LEN(SESSION.LINE)])      BEGIN CASE        CASE SESSION.VAR = '_SessionID'          DBGREC<WDBG_SESSION_ID> = SESSION.VAL        CASE SESSION.VAR = '_Date'          DBGREC<WDBG_SESSION_DATE> = ICONV(SESSION.VAL, 'D')        CASE SESSION.VAR = '_Time'          DBGREC<WDBG_SESSION_TIME> = ICONV(SESSION.VAL, 'MTS')        CASE 1          NUM.VARS += 1          DBGREC<WDBG_SESSION_VARS, NUM.VARS> = SESSION.VAR          DBGREC<WDBG_SESSION_VALS, NUM.VARS> = SESSION.VAL      END CASE    NEXT I  ENDEND* Get response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''NUM.VARS = 0SECT = 'RESPONSE_HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get response contentDBGREC<WDBG_RESPONSE_CONTENT> = ''SECT = 'RESPONSE_CONTENT'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.CONTENT = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(THE.CONTENT)  ENDENDRETURN**----------choose.editor:*----------*PRINTLOOP  PRINT 'Select the editor you want to use: 1 = ED, 2 = SED, 3 = other: ':  INPUT ANSUNTIL ANS EQ '' DO  BEGIN CASE    CASE ANS = 1      EDITOR = 'ED'      EXIT    CASE ANS = 2      EDITOR = 'SED'      EXIT    CASE ANS = 3      PRINT 'Enter the verb to invoke your editor: ':      INPUT TMP      PRINT TMP:' OK?':      INPUT ANS      ANS = OCONV(ANS[1,1], 'MCU')      IF ANS = 'Y' THEN        EDITOR = TMP        EXIT      END  END CASEREPEATRETURN**----------find.section:*----------*SECT.START = -1SECT.END = -1TAG = @AM:'[':SECT:']':@AMTAG.POS = INDEX(EDIT.REC, TAG, 1)IF TAG.POS = 0 THEN RETURN ;* Section not foundSECT.START = DCOUNT(EDIT.REC[1, TAG.POS], @AM)SECT.END = DCOUNT(EDIT.REC, @AM)FOR I = SECT.START + 1 TO SECT.END  SECT.LN = EDIT.REC<I>  IF SECT.LN MATCHES '"["1A0A"]"' OR SECT.LN MATCHES '"["1A0A"_"1A0A"]"' THEN* beginning of next section is end of current section    SECT.END = I - 1    EXIT  ENDNEXT IRETURN**----------url.encode:*----------*NEW.STRING = ""UE.LEN = LEN(URLENCODE.STRING)FOR UEX = 1 TO UE.LEN  UE.CHR = URLENCODE.STRING[UEX,1]  UE.CVAL = SEQ(UE.CHR)  BEGIN CASE    CASE UE.CVAL < 32; ENC.FLAG = 1   ;* control character    CASE UE.CVAL = 37 OR UE.CVAL = 38 OR UE.CVAL = 43 OR UE.CVAL = 61; ENC.FLAG = 1 ;* % & + =    CASE UE.CVAL = 127; ENC.FLAG = 1  ;* DEL control character    CASE UE.CVAL >= 252; ENC.FLAG = 1 ;* delimiter character    CASE 1 ; ENC.FLAG = 0  END CASE  IF ENC.FLAG THEN    UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')  END  NEW.STRING := UE.CHRNEXT UEXRETURN*END000210WSETINFO0c2SUBROUTINE WSETINFO(InfoVal, InfoItem)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: November 2017* Description: set an element in WWW.INFO***********************************************************************INCLUDE WBPD WWW.INCLUDEIF NUM(InfoItem) AND InfoItem > 0 AND InfoItem <= 50 THEN IF INT(InfoItem) = InfoItem THEN  WWW.INFO(InfoItem) = InfoVal ENDENDRETURNEND00041DWSETCOOKIE0c2SUBROUTINE WSETCOOKIE(COOKIENAME,COOKIEVAR,D,T,PATH,DOMAIN,SECURE)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine sets the value of a cookie.*              **********************************************************************INCLUDE WBPD WWW.INCLUDECOOKIE = COOKIENAME:'=':COOKIEVAR* FIGURE OUT EXPIRATIONIF D # '' THEN  EXPIRES='expires='  DAY=OCONV(D,'DWA')[1,3]  DAY=OCONV(DAY,'MCT')  EXPIRES:=DAY  EXPIRES:=', '  EXPIRES:=OCONV(D,'DD')  EXPIRES:=' '  MONTH=OCONV(D,'DMA')[1,3]  MONTH=OCONV(MONTH,'MCT')  EXPIRES:=MONTH  EXPIRES:=' '  EXPIRES:=OCONV(D,'DY')  EXPIRES:=' '  EXPIRES:=OCONV(T,'MTS')  COOKIE:=';':EXPIRESENDIF PATH # '' THEN  COOKIE:=';path="':PATH:'"'ENDIF DOMAIN # '' THEN  COOKIE:=';domain=':DOMAINENDIF SECURE # '' THEN  COOKIE:=';secure'ENDIF TRIM(COOKIE) # '' THEN  SESSION$COOKIES<-1>=COOKIEENDRETURNEND00022DWGETHEADER0c2SUBROUTINE WGETHEADER(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: extract value of an HTTP request header***********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''TEMPVARS = OCONV(CGI$HEADERVARS, 'MCU')LOCATE OCONV(VarName, 'MCU') IN TEMPVARS SETTING POS THEN  VarValue = CGI$HEADERVALS<POS>ENDRETURNEND00019EWGETBODY0c2SUBROUTINE WGETBODY(RequestBody)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: March 2017* Description: return the BODY of the request***********************************************************************INCLUDE WBPD WWW.INCLUDERequestBody = CGI$BODYRETURNEND0001F3WFLUSH0c2SUBROUTINE WFLUSH************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This program calls WSETBUFFER(FALSE) then *                calls WSEND("")*              **********************************************************************INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*CALL WSETBUFFER(FALSE)CALL WSEND("")RETURNEND001E65WRESTTEST0c2PROGRAM WRESTTEST************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 01/31/2017* Description: this is a simple REST test***********************************************************************INCLUDE WBPD WWW.INFORESTVERSION = "1.1"JSTATUS = 'ok'JSTATUSMSG = ''** Supplied function for setting content type.*CALL WSETCONTENTTYPE("application/json")*** Set a custom header with supplied function.*CALL WSETHEADER("restversion",RESTVERSION)** Start building our json object, ugly way until objects.*JSON = '{'** Need to know all the variables*CALL WGETINFO(VARS,CGI_VARS)CALL WGETINFO(VALS,CGI_VALS)** Need to know all the headers*CALL WGETINFO(HEADERVARS,CGI_HEADERVARS)CALL WGETINFO(HEADERVALS,CGI_HEADERVALS)** Set our rest version, this will be replaced in the future with objects*CALL WBUILDJSON(JSON,"RestVersion",RESTVERSION,RERR)** WHO*EXECUTE 'WHO' CAPTURING WRESULTCALL WBUILDJSON(JSON,'Who',WRESULT<1,1,1>,RERR)** HOSTNAME**EXECUTE 'hostname' CAPTURING HOSTNAME*CALL WBUILDJSON(JSON,'hostname',HOSTNAME<1,1,1>,RERR)** IFCONFIG**EXECUTE 'ifconfig' CAPTURING RESULT*GOSUB exportresult*JSON:=', "ifconfig": ':R** PWD*EXECUTE '!pwd' CAPTURING PWDCALL WBUILDJSON(JSON,'pwd',PWD,RERR)** PS**EXECUTE 'ps' CAPTURING RESULT*GOSUB exportresult*JSON:=', "ps": ':R*CALL WBUILDJSON(JSON,'ps',PSRESULT,RERR)** JSHOW**EXECUTE 'jshow -v WRESTTEST' CAPTURING RESULT*GOSUB exportresult*JSON := ', "wresttest": ':R** Build out vars, we have to build a subobject and manually* put it into our main json object.* Right now the primary function of WBUILDJSON is to properly* encode the variable section.*JSONVARS = '{'FOR X = 1 TO DCOUNT(VARS, @AM)    * Lets test our WGETVAR routine    VARNAME = VARS<X>    *    * WGETVAR is our customer supplied function to get variables    * usually sent by browser as form variables, either in the body    * or in the URL query string.    *    CALL WGETVAR(THISVAR,VARNAME)    CALL WBUILDJSON(JSONVARS,VARNAME,THISVAR,RERR)NEXT XJSONVARS := '}'** Here is our messy add, todo is to adjust WBUILDJSON to be able* to do this.*JSON := ', "vars": ':JSONVARS** Get all our cookies*CALL WGETINFO(CVARS,CGI_CVARS)CALL WGETINFO(CVALS,CGI_CVALS)COOKIES = '{'NUM_COOKIES = DCOUNT(CVARS,@AM)FOR A = 1 TO NUM_COOKIES    COOKIENAME = CVARS<A>    *    * This is our customer supplied function to get cookies.    *    CALL WGETCOOKIE(COOKIEVALUE,COOKIENAME)    CALL WBUILDJSON(COOKIES,COOKIENAME,COOKIEVALUE,RERR)NEXT ACOOKIES := '}'JSON := ', "cookies": ':COOKIES** Build out headers*JSONHEADERS = '{'numheaders = DCOUNT(HEADERVARS, @AM)FOR X = 1 TO numheaders    HEADERNAME = HEADERVARS<X>    *    * This is our customer supplied function to get headers.    *    CALL WGETHEADER(THISVAR,HEADERNAME)    CALL WBUILDJSON(JSONHEADERS,HEADERNAME,THISVAR,RERR)NEXT XJSONHEADERS := '}'JSON := ', "headers": ':JSONHEADERS** This is where the raw body is put, this is used primarily for* AJAX functions where the body should be a json string.*CALL WGETBODY(BODY)CALL WBUILDJSON(JSON,'body',BODY,RERR)** Set our test cookie*COOKIE.NAME = 'wresttestcookie'COOKIE.VALUE = TIMEDATE()CONVERT ' :' TO '' IN COOKIE.VALUE** Our function for setting a cookie.  Hides all the formatting requirements* and correctly sets expiration date/time using PICK dates and times.** CALL WSETCOOKIE(NAME,VALUE,EXPDATE,EXPTIME,DOMAIN,PATH,SECURE)*CALL WSETCOOKIE(COOKIE.NAME,COOKIE.VALUE,DATE()+1,TIME()+300,'','','')** Now lets process our command requests** This section allows this REST request to perform some functions** Format is* ...api/wresttest/<key>/<command>/<opt1>/<opt2>/<opt3>/etc** key = basically a password and stored in the config file* command = a command to execute, leaving blank does the same as help* opt# = options that the commands would use** Remember that for us, key is the first REAL param, command is 2, opt# is 3 on*CALL WGETPARAM(REQKEY,1)IF REQKEY = '' THEN GOTO end.of.program; * no key then ignore** Function to get our options already broken out.*CALL WGETCONFIG(APIKEY,'APIKEY')IF APIKEY = '' THEN    *    * The way I like to handle errors, see end of program right before stop    *    JSTATUS = 'error'    JSTATUSMSG = 'No api key setup in WDB.RESOURCE'    GOTO end.of.programENDIF OCONV(APIKEY,'MX0C') # OCONV(REQKEY,'MX0C') THEN ;*QM*    JSTATUS = 'error'    JSTATUSMSG = 'Invalid api key'    GOTO end.of.programENDGOSUB processrest*end.of.program: *** Build our default status/result*CALL WBUILDJSON(JSON,'status',JSTATUS,RERR)CALL WBUILDJSON(JSON,'statusmsg',JSTATUSMSG,ERR)** Close out our object*JSON := '}'** Send string json to the client. This can be done anytime and multiple times.*CALL WSEND(JSON)*STOP*processrest: *** Build new object to store rest responses*RJSON = '{'** Get our command*CALL WGETPARAM(COMMAND,2)COMMAND = OCONV(COMMAND,'MCU')** Respond in REST response our requested command, nice for debugging*CALL WBUILDJSON(RJSON,'requestedcommand',COMMAND,RERR)** Now process our commands*BEGIN CASE    CASE COMMAND = 'DEBUGON'        CALL WGETPARAM(DEBUGLINE,3)        IF DEBUGLINE = '' OR NOT(NUM(DEBUGLINE)) THEN            JSTATUS = 'error'            JSTATUSMSG = 'You must put in a debug option as next paramater'        END ELSE            JSTATUSMSG = 'Setting debug to on for ':DEBUGLINE            CALL WSETCOOKIE('wrestapidebug',DEBUGLINE,DATE()+1,TIME()+300,'','',' ')        END    CASE COMMAND = 'DEBUGOFF'        CALL WSETCOOKIE('wrestapidebug','',DATE()-1,TIME(),'','','')    CASE COMMAND = 'ENV'        * Get environment variables        EXECUTE '!env' CAPTURING ENVIRONMENT        *        * New object to store response        *        J = '{'        NUMENV = DCOUNT(ENVIRONMENT,@AM)        FOR A = 1 TO NUMENV            ENV = ENVIRONMENT<A>            ENV.NAME = FIELD(ENV,'=',1)            ENV.VALUE = FIELD(ENV,'=',2,9999)            IF TRIM(ENV.NAME) # '' THEN                CALL WBUILDJSON(J,ENV.NAME,ENV.VALUE,RERR)            END        NEXT A        J := '}'        RJSON := ', "environment": ':J    CASE COMMAND = 'USERS'        EXECUTE 'LISTU' CAPTURING RESULT        GOSUB exportresult        RJSON := ', "users": ':R    *CASE COMMAND = 'JSHOW'        *CALL WGETPARAM(OPTN,3)        *CMND = 'jshow -v ':OPTN        *EXECUTE CMND CAPTURING RESULT        *GOSUB exportresult        *RJSON := ', "jshow": ':R    *CASE COMMAND = 'JLICENSINGINFO'        *EXECUTE 'JLICENSINGINFO' CAPTURING RESULT        *GOSUB exportresult        *RJSON := ', "jlicensinginfo": ':R    CASE 1; * DO HELP        C = '{'        CALL WBUILDJSON(C,'help','List all commands',RERR)        CALL WBUILDJSON(C,'debugon','Turn debug on, next param is line no',RERR)        CALL WBUILDJSON(C,'debugoff','Turn off debugging',RERR)        *CALL WBUILDJSON(C,'listweberrors','Lists web errors',RERR)        CALL WBUILDJSON(C,'env','List Environment Variables',RERR)        CALL WBUILDJSON(C,'users','List users',RERR)        *CALL WBUILDJSON(C,'jshow','Issue jshow, next param is program/file',RERR )        *CALL WBUILDJSON(C,'jlicensinginfo','Licensing information',RERR)        C := '}'        RJSON := ', "commands": ':CEND CASERJSON := '}'JSON := ', "rest": ':RJSONRETURN*exportresult: *NUM.LINES = DCOUNT(RESULT,@AM)R= '[ 'FOR XX = 1 TO NUM.LINES    LINE = RESULT<XX>    CALL WSWAP(LINE,CHAR(9),'     ')    CALL WENCODEJSON('',LINE,OUTLINE)    IF XX > 1 THEN R := ','    R := '"':OUTLINE:'"'NEXT XXR := ']'RETURN*END0002E8WBUILDJSON0c2SUBROUTINE WBUILDJSON(JSONSTRING,NAME,VALUE,RETURNERROR)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 8/13/2016* Description: build json string***********************************************************************RETURNERROR=''*CALL FIX.ESCAPE.DATA.JSON('\',NAME,OUT_NAME)*CALL FIX.ESCAPE.DATA.JSON('\',VALUE,OUT_VALUE)CALL WENCODEJSON('',NAME,OUT_NAME)CALL WENCODEJSON('',VALUE,OUT_VALUE)TEMP_STRING='"':OUT_NAME:'":"':OUT_VALUE:'"'L=LEN(JSONSTRING)LAST_C=JSONSTRING[L,1]IF LAST_C = "}" OR LAST_C='"' OR LAST_C = "]" THEN TEMP_STRING=', ':TEMP_STRINGJSONSTRING:=TEMP_STRINGRETURNEND00198FWSEND0c2SUBROUTINE WSEND(FORM)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Original Author: Luke J. Bucklin, Sierra Bravo* Date: 2/29/00* Modified By  : Mike Schmidt, Sierra Bravo* Modified By  : Peter Schellenbach & Patrick Payne, Zumasys* Purpose: Send the web page.* Forked off new version as WSEND for REST services based on original WEB.SEND** Modified by Peter Schellenbach 09-21-2017*  Removed extra @AM appended to the content to prevent extra CR from being sent in response** Modified by Peter Schellenbach 10-18-2017*  Removed duplicate debug info being sent in html or xml output. Removed logging*  code as this is handled by WDB.INIT / JAGENTWDBINIT when saving debug info.** Modified by Patrick Payne 04-29-2020*  Issue #5.  HTTP wants new lines to be CHAR(13):CHAR(10).  We cannot depend on*  pick PRINT statements to output the new line since one linux it will only do*  char(10).  All output statements are updated to*  PRINT <DATA>:NEW.LINE:    where new.line=CHAR(13):CHAR(1)*************************************************************************                1) Header Management: This program will check to see*                   if the content type has been written to the browser*                   before ever printing anything to standard out.  If*                   the headers have not been sent, the program will print*                   the headers using the SESSION$CONTENT.TYPE,*                   SESSION$HEADERS, and SESSION$COOKIES session variables.*                   The program will then set the SESSION$CONTENT.SENT*                   variable.*                   WARNING: This program assumes that the global SESSION*                   variables were setup prior to using this subroutine.*                   WARNING: The SESSION$OUTBUF.SIZE should not be relied*                   upon to prevent the buffer from exceeding the set limit.*                   This program simply flushes the buffer if it exceeds*                   the set size limit.**                2) Buffer Management: Instead of always printing every*                   thing to standard out, by default the program will*                   write everything passed into into the SESSION$OUTBUF*                   variable.  This program will then flush the buffer*                   under certain situations.  The first is if the buffer*                   size reaches the limit set in SESSION$OUTBUF.SIZE. If*                   this happens the prgram will flush the buffer then*                   reinitialize it.  The second is if the SESSION$OUTBUF.FLAG*                   is set to FALSE, then this program will always flush*                   the buffer.**                3) The program will display debug information if the global*                   variable SESSION$GLOBAL.DEBUG flag is >= 3.************************************************************************* Add the incoming string to the buffer.INCLUDE WBPD WWW.INCLUDE*NEW.LINE = CHAR(13):CHAR(10); * We need to force this as a new lineSHOW.SESSION.VARS = 0IF SESSION$GLOBAL.DEBUG >= 3 THEN  OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SHOW.SESSION.VARS = 1END*IF FORM <> '' THEN  CALL WSWAP(FORM,'<!-- CGI$PATH -->',CGI$PATH)*PJS 09-21-2017*SESSION$OUTBUF := FORM:@AM  SESSION$OUTBUF := FORM ; *PJS 09-21-2017*END** If the buffer is greater then the max size or the buffer flag is false then flush.IF LEN(SESSION$OUTBUF) >= SESSION$OUTBUF.SIZE OR NOT(SESSION$OUTBUF.FLAG) THEN* Before flushing, check to see if the headers have been send.  IF NOT(SESSION$CONTENT.SENT) THEN    IF SESSION$STATUS.CODE > 0 THEN* 04-21-17 send the status code before headers      PRINT "X-MVDB-STATUS: ":SESSION$STATUS.CODE:NEW.LINE:    END* The headers have not been sent so send them now.    IF SESSION$CONTENT.TYPE = "" THEN      CALL WSETCONTENTTYPE("application/json")    END* If there are any cookies that need to be set, do it now.    PRINT "Content-type: ":SESSION$CONTENT.TYPE:NEW.LINE:* If there are any cookies that need to be set, do it now.    FOR I = 1 TO DCOUNT(SESSION$COOKIES, @AM)      COOKIE = SESSION$COOKIES<I>      IF INDEX(COOKIE, "; path=", 1) + INDEX(COOKIE, ";path=", 1) = 0 THEN COOKIE := "; path=/"      PRINT "Set-Cookie: ":COOKIE:NEW.LINE:    NEXT I* If there are any additional headers that need to be set, do it now.    PRINT 'Cache-Control: no-cache'    FOR I = 1 TO DCOUNT(SESSION$HEADERS, @AM)      PRINT SESSION$HEADERS<I>:NEW.LINE:    NEXT I* Now print the blank line that ends the headers.    PRINT    IF INDEX(SESSION$CONTENT.TYPE,'html',1) THEN      IF INDEX(SESSION$OUTBUF<1>,'<!DOCTYPE',1) = 0 THEN        PRINT '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"':NEW.LINE:        PRINT '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">':NEW.LINE:      END    END* Set the SESSION$CONTENT.SENT variable so next time we know not to send the headers.    SESSION$CONTENT.SENT = 1* From this point on, do not buffer.    IF SESSION$OUTBUF.FLAG THEN      CALL WSETBUFFER(0)    END  END  LINE.CNT = DCOUNT(SESSION$OUTBUF, @AM)  FOR LINE.J = 1 TO LINE.CNT    PRINT SESSION$OUTBUF<LINE.J>:NEW.LINE:  NEXT LINE.J  IF SESSION$GLOBAL.DEBUG >= 3 THEN    IF INDEX(SESSION$CONTENT.TYPE,'xml',1) OR INDEX(SESSION$CONTENT.TYPE,'html',1) THEN* If the debug flag is set then dump all the session information to the browser.      PRINT '<!-- Debug Information generated by WEB.SEND.  This feature can be turned off by':NEW.LINE:      PRINT '     setting the SESSION$GLOBAL.DEBUG = "1" in the initalization program     -->':NEW.LINE:      PRINT '<!-- START DEBUG OUPUT ':NEW.LINE:      PRINT '     GET AND POST VARS:':NEW.LINE:      FOR I = 1 TO DCOUNT(CGI$VARS, @AM)        PRINT '     ':CGI$VARS<I>:' = ':CGI$VALS<I>:NEW.LINE:      NEXT I      PRINT      IF SHOW.SESSION.VARS THEN        PRINT '    SESSION VARIABLES:':NEW.LINE:        PRINT '    SESSION$ID = ':SESSION$ID:NEW.LINE:        READ REC FROM F.WEB.SESSION, SESSION$ID THEN          PRINT '    SESSION DATE = ':OCONV(REC<3>,'D4/'):NEW.LINE:          PRINT '    SESSION TIME = ':OCONV(REC<4>,'MTS,'):NEW.LINE:          FOR I = 1 TO DCOUNT(REC<1>, @VM)            PRINT '    ':REC<1,I>:' = ':REC<2,I>:NEW.LINE:          NEXT I        END      END      PRINT '    END DEBUG OUTPUT -->':NEW.LINE:      PRINT NEW.LINE:    END  END  SESSION$OUTBUF = ''ENDRETURNEND0014E9WPARSEJSON0c2SUBROUTINE WPARSEJSON(JSON_STRING,JSON_REQUEST,JSON_RESULT,JSON_ERRORS)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 8/13/2016* Description: this is to be a simple json parser, it will not be high performance!!************************************************************************* COMMAND WILL BE QM STYLE** object or #/object or #/object or #** lets do this VERY ugly, we know what we are looking for should be in the format* "key":  or "key" :*JSON_ERRORS=''JSON_RESULT=''MAX_LENGTH=LEN(JSON_STRING)FIRST_KEY=FIELD(JSON_REQUEST,'/',1); * WE CAN ONLY DO SINGLE DEPTH ON THIS VERSIONIF FIRST_KEY[1,1]='[' THEN  GOSUB getobject  RETURNENDSEARCH_STRING1='"':FIRST_KEY:'":'SEARCH_STRING2='"':FIRST_KEY:'" :'POS=INDEX(JSON_STRING,SEARCH_STRING1,1)IF NOT(POS) THEN  POS=INDEX(JSON_STRING,SEARCH_STRING2,1)ENDIF NOT(POS) THEN  JSON_ERRORS=-1  JSON_ERRORS<2>='COULD NOT FIND KEY ':FIRST_KEY  PRINT 'ERROR'  RETURNENDTEMP_DATA=JSON_STRING[POS,MAX_LENGTH]*PRINT 'TEMP_DATA=':TEMP_DATA* NOW LETS CHOP TO OUR FIRST :POS2=INDEX(TEMP_DATA,':',1)TEMP_DATA=TEMP_DATA[POS2+1,MAX_LENGTH]* NOT SURE IF WE HAVE TO DEAL WITH DATA BEING NOT IN QUOTES, TO MAKE SURE WE ARE GOING TO INSPECT THE NEXT TWO POSITIONS* AND MAKE SURE*PRINT 'TEMP_DATA=':TEMP_DATATEMP_DATA=TRIM(TEMP_DATA,' ','L')BEGIN CASE  CASE TEMP_DATA[1,1] = '"' OR TEMP_DATA[2,1] = '"'* QUOTES    TEMP_DATA=FIELD(TEMP_DATA,'"',2,9999)*PRINT 'TEMP_DATA=':TEMP_DATA* WE CANNOT RELY ON IT JUST BEING THE NEXT QUOTE DUE TO ESCAPING !!@#$#$    LEN_STRING=LEN(TEMP_DATA)    FOUND_QUOTE=0    LAST_C=''    FOR X=1 TO LEN_STRING UNTIL FOUND_QUOTE      C=TEMP_DATA[X,1]      NEXTC=TEMP_DATA[X+1,1]*PRINT 'C=':C:' NEXT_C=':NEXT_C      IF C='\' AND NEXTC='"' THEN        JSON_RESULT:='"'        X+=1        CONTINUE      END      IF C='"' THEN        FOUND_QUOTE=1        EXIT      END ELSE        JSON_RESULT:=C*PRINT 'JSON_RESULT=':JSON_RESULT      END      IF X > LEN_STRING THEN FOUND_QUOTE=1    NEXT X  CASE TEMP_DATA[1,1]='[' OR TEMP_DATA[2,1]='['; * WE ARE PULLING AN ARRAY.  THIS IS VERY MESSY.  IT CAN ONLY HANDLE A SINGLE ARRAY. ANY MORE NESTING AND WE ARE BROKE* WE NEED TO LOOP UNTIL WE SEE THE NEXT ] THAT IS NOT IS A INSIDE QUOTES    LEN$STRING=LEN(TEMP_DATA)    FOUND$BRACKET=0    LAST$C=''    INSIDE$QUOTES=0    FOR X=1 TO LEN$STRING UNTIL FOUND$BRACKET      C=TEMP_DATA[X,1]      BEGIN CASE        CASE C=']' AND NOT(INSIDE$QUOTES); FOUND$BRACKET=1        CASE C='"' AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C="'" AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C='"'; INSIDE$QUOTES=1        CASE C="'"; INSIDE$QUOTES=1      END CASE      JSON_RESULT:=C    NEXT X  CASE TEMP_DATA[1,1]='{' OR TEMP_DATA[2,1]='['; * WE ARE PULLING AN ARRAY.  THIS IS VERY MESSY.  IT CAN ONLY HANDLE A SINGLE ARRAY. ANY MORE NESTING AND WE ARE BROKE* WE NEED TO LOOP UNTIL WE SEE THE NEXT ] THAT IS NOT IS A INSIDE QUOTES    LEN$STRING=LEN(TEMP_DATA)    FOUND$BRACKET=0    LAST$C=''    INSIDE$QUOTES=0    FOR X=1 TO LEN$STRING UNTIL FOUND$BRACKET      C=TEMP_DATA[X,1]      BEGIN CASE        CASE C='}' AND NOT(INSIDE$QUOTES); FOUND$BRACKET=1        CASE C='"' AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C="'" AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C='"'; INSIDE$QUOTES=1        CASE C="'"; INSIDE$QUOTES=1      END CASE      JSON_RESULT:=C    NEXT X  CASE 1* IT SHOULD BE A NUMBER ONLY    IF TEMP_DATA[1,1]=' ' THEN TEMP_DATA=TEMP_DATA[2,MAX_LENGTH]* NEXT CHARACTER WILL EITHER BE A },OR SPACXE    NEXT1=INDEX(TEMP_DATA,' ',1)    NEXT2=INDEX(TEMP_DATA,'}',1)    NEXT3=INDEX(TEMP_DATA,',',1)    N=NEXT1    IF NEXT2 < N THEN N=NEXT2    IF NEXT3 < N THEN N=NEXT3    JSON_RESULT=TEMP_DATA[1,N-1]END CASERETURN*getobject: *OBJECTNUMBER=FIELD(FIRST_KEY,']',1)OBJECTNUMBER=FIELD(OBJECTNUMBER,'[',2)INSIDE$QUOTES=0OBJECTCOUNT=0CHARCNTR=0NESTCOUNT=0JSON_RESULT=''DOINGCOUNT=0LEN_JSON_STRING=LEN(JSON_STRING)IF OBJECTNUMBER='#' THEN  OBJECTNUMBER=99999999  DOINGCOUNT=1ENDLOOP  CHARCNTR+=1  IF CHARCNTR > LEN_JSON_STRING THEN EXIT  C=JSON_STRING[CHARCNTR,1]  BEGIN CASE    CASE NOT(INSIDE$QUOTES) AND C='"'      JSON_RESULT:=C      INSIDE$QUOTES=1    CASE INSIDE$QUOTES AND C='"'      JSON_RESULT:=C      INSIDE$QUOTES=0    CASE INSIDE$QUOTES      JSON_RESULT:=C    CASE C='{' AND NOT(NESTCOUNT)* WE HAVE THE START OF OUR OBJECT      JSON_RESULT=C      NESTCOUNT=1      OBJECTCOUNT+=1    CASE C='{' AND NOT(INSIDE$QUOTES)* GOING A NEXT DEEPER      JSON_RESULT:=C      NESTCOUNT+=1    CASE C='}'      JSON_RESULT:=C      NESTCOUNT=NESTCOUNT-1      IF NESTCOUNT = 0 THEN        IF OBJECTNUMBER=OBJECTCOUNT-1 THEN          EXIT; * WE HAVE OUR OBJECT        END ELSE          NESTCOUNT=0          JSON_RESULT=''; * RESET OUR OBJECT        END      END    CASE NESTCOUNT=0; * DO NOTHING    CASE 1      JSON_RESULT:=C  END CASE  IF 0 THEN    PRINT C,'NESTCOUNT=':NESTCOUNT:' OBJECTCOUNT=':OBJECTCOUNT:' INQUOTE=':INSIDE$QUOTES:' CHARCNTR=':CHARCNTR  END  IF DOINGCOUNT THEN JSON_RESULT=OBJECTCOUNTREPEATIF 0 THEN  PRINT JSON_RESULT  PRINT  PRINT JSON_STRING[1,CHARCNTR+50]  INPUT WAITENDRETURNEND0002BEWGETPARAM0c2SUBROUTINE WGETPARAM(ParamVal, ParamNum)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: March 2017* Description: return a parameter from the URL. Assume the* URL is in the format:**   http://api.hostname.com/api/resource/key/command/opt1/opt2/opt3** ParamNum = 1 ParamVal = key*            2            command*            3            opt1*            4            opt2*            5            opt3***********************************************************************INCLUDE WBPD WWW.INCLUDEParamVal = CGI$RESTPARAMS<ParamNum>RETURNEND0006A0WSETBUFFER0c2SUBROUTINE WSETBUFFER(B.VAL)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Updated by: Peter Schellenbach, Zumasys* Date: November 2017* Description  : This program sets the SESSION$OUTBUF.FLAG and optionally*                SESSION$OUTBUF.SIZE variables to enable or disable*                buffering of output generated by WSEND. If buffering*                is enabled, be sure to call WFLUSH to flush the final*                buffer content.**                B.VAL = 0 : disable buffering*                B.VAL = 1 : enable buffering using current buffer size*                B.VAL > 1 : enable buffering and set buffer size to*                            this value.**                By default buffering is disabled. If buffering will be*                used, call WSETBUFFER before the first call to WSEND.*                If the size of buffer content ever exceeds the buffer*                size, the buffer is flushed to the client along with*                any headers, and buffering is disabled.*              **********************************************************************INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*IF NUM(B.VAL) AND B.VAL > 0 AND B.VAL <= 1000000 THEN  * Set buffer size and enable buffering  SESSION$OUTBUF.SIZE = B.VAL  SESSION$OUTBUF.FLAG = TRUEEND ELSE  * Enable or disable buffering  IF B.VAL # TRUE AND B.VAL # FALSE THEN    IF B.VAL = "" THEN      B.VAL = FALSE    END ELSE      B.VAL = TRUE    END  END  SESSION$OUTBUF.FLAG = B.VALENDRETURNEND0002A5WSETHEADER0c2SUBROUTINE WSETHEADER(VarName, VarValue)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: set a value of HTTP response header** Updated by Peter Schellenbach, 09-21-2017 to call WSETCONTENTTYPE when setting the Content-Type header***********************************************************************INCLUDE WBPD WWW.INCLUDEIF OCONV(VarName,'MCU') = 'CONTENT-TYPE' THEN  CALL WSETCONTENTTYPE(VarValue)END ELSE  HEADER_LINE = VarName:': ':VarValue  SESSION$HEADERS<-1> = HEADER_LINEENDRETURNEND0001F5WGETCONFIG0c2SUBROUTINE WGETCONFIG(VarValue, VarName) ************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: extract a configuration value***********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''LOCATE VarName IN CGI$CONFIG<1,1> SETTING POS THEN  VarValue = CGI$CONFIG<1,2,POS>ENDRETURNEND000244WSETVAR0c2SUBROUTINE WSETVAR(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: update value of a request variable***********************************************************************INCLUDE WBPD WWW.INCLUDETEMPVARS = OCONV(CGI$VARS, 'MCU')LOCATE OCONV(VarName, 'MCU') IN TEMPVARS SETTING POS THEN  CGI$VALS<POS> = VarValueEND ELSE  CGI$VARS<-1> = VarName  CGI$VALS<-1> = VarValueENDRETURNEND000291WSETSTATUS0c2SUBROUTINE WSETSTATUS( STATUS.CODE )*********************************************************************** Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written By   : Peter Schellenbach* Date Written : 04/21/2017* Description  : This program sets the response status code sent*                back to client. Successful requests should return*                status code 200 (this is the default). Status code*                500 indicates a generic server failure.*              **********************************************************************INCLUDE WBPD WWW.INCLUDESESSION$STATUS.CODE = STATUS.CODERETURNEND000217WGETVAR0c2SUBROUTINE WGETVAR(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: extract value of a request variable***********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''TEMPVARS = OCONV(CGI$VARS, 'MCU')LOCATE OCONV(VarName, 'MCU') IN TEMPVARS SETTING POS THEN  VarValue = CGI$VALS<POS>ENDRETURNEND000256WSETCONTENTTYPE0c2SUBROUTINE WSETCONTENTTYPE(CONTENTTYPE)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine sets the SESSION$CONTENT.TYPE variable.*                This value is used in the Content-Type HTTP header*                in the response sent to the client.*              **********************************************************************INCLUDE WBPD WWW.INCLUDESESSION$CONTENT.TYPE=CONTENTTYPERETURNEND0000EERSS.FEEDS0c000005DFEEDS0c2Available RSS FeedsRSS Feeds available on this serverSUB.FEEDS.SELSUB.FEEDS.ITEM000078RUNTIME-ERRORS0c2Basic Runtime ErrorsData basic runtime errors.SUB.RE.SELSUB.RE.ITEMDashboard Accountaccount=TLDB006E09MVDB.CONTROL0c000024ECOMPILE.SETUP0c2BASIC %FILENAME% %ITEMNAME%* To configure the compile command when using the web editor* edit line # 1 of this record to contain the appropriate syntax.** Example # 1 - Standard compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME%** Example # 2 - FLASH compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME% (O** Example # 3 - Standard compile using COMPILE* 001 COMPILE %FILENAME% %ITEMNAME%** Only line # 1 of this record is used, all other lines of this record are ignored.* If this record is deleted, the default behavior is:* COMPILE %FILENAME% %ITEMNAME%0000A1FC2DPIE.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' pieRadius='[RADIUS]' animation='0' > [CHART.DATA]</graph>0000DEFC3DPIE.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' showPercentageInLabel='0' pieYScale='45' pieRadius='[RADIUS]' animation='0' pieFillAlpha='100' > [CHART.DATA]</graph>0000A9FCAREA2D.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]'> [CHART.DATA]</graph>0000A9FCBAR2D.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]' > [CHART.DATA]</graph>00009BFCCOLUMN2D.SETTINGS0c2<graph caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]' > [CHART.DATA]</graph>0000ADFCCOLUMN3D.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]'  decimalPrecision='0' animation='0' yaxisname='[YMEMO]' xaxisname='[XMEMO]' > [CHART.DATA]</graph>0000A6FCDOUGHNUT2D.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' pieRadius='[RADIUS]' animation='0' > [CHART.DATA]</graph>0000A7FCLINE.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]'> [CHART.DATA]</graph>000C53FCMAP.NAMES0c2AfghanistanAfricaAlabamaAlaskaAlbaniaAlbertaAlgeriaAndorraAngolaAntiguaArgentinaArizonaArkansasArmeniaAsia3AsiaGeorgiaAsiaAustralia2AustraliaAustriaAzerbaijanBahamasBahrainBangladeshBarbadosBelarusBelgiumBelizeBeninBhutanBoliviaBosniaHerzegovinaBotswanaBrazilRegionBrazilBritishColumbiaBruneiBulgariaBurkinaFasoBurmaBurundiCaliforniaCambodiaCameroonCanadaCapeVerdeCaymanIslandsCentralAfricanRepublicCentralAmerica2CentralAmericaCentralAmericawithCaribbeanCentralEuropeanRegionChadChileChina2ChinaColombiaColoradoComorosCongoConnecticutCostaRicaCoteDivoireCroatiaCubaCyprus2CyprusCzechRepublicDelawareDemocraticRepublicofCongoDenmarkRegionDenmarkDistrictofColumbiaDjiboutiDominicanRepublicDominicaEastEuropeanRegionEastTimorEcuadorEgyptElSalvadorEnglandRegionEnglandEquatorialGuineaEritreaEstoniaEthiopiaEurope2EuropeRegionEuropeEuropewithcountriesFalklandIslandFijiFinlandFloridaFranceDepartmentFranceFrenchGuianaGabonGambiaGeorgiaGermanyGhanaGreeceGreenlandGrenadaGuatemalaGuineaBissauGuineaGuyanaHaitiHawaiiHondurasHongKongHungaryRegionsHungaryIcelandIdahoIllinoisIndianaIndiaIndonesiaIowaIranIraqIrelandIsraelItalyJamaicaJapanJordanKansasKazakhstanKentuckyKenyaKiribatiKuwaitKyrgyzstanLaosLatviaLebanonLesothoLiberiaLibyaLiechtensteinLithuaniaLouisianaLuxembourgMacauMacedoniaMadagascarRegionsMadagascarMaineMalawiMalaysiaMaliMaltaManitobaMarshallIslandMarylandMassachusettsMauritaniaMauritiusMexicoMichiganMicronesiaMiddleEastMinnesotaMississippiMissouriMoldovaMonacoMongoliaMontanaMontenegroMoroccoMozambiqueNamibiaNauruNebraskaNepalNetherlandNevadaNewBrunswickNewCaledoniaNewfoundlandandLabradorNewHampshireNewJerseyNewMexicoNewWorldNewYorkNewZealandNicaraguaNigeriaNigerNorthAmericaNorthAmerica_WOCentralNorthCarolinaNorthDakotaNorthEuropeanRegionNorthIrelandNorthKoreaNorthWestTerritoriesNorwayRegionNorwayNovaScotiaNunavutOceaniaOhioOklahomaOmanOntarioOregonPakistanPalauPanamaPapuaNewGuineaParaguayPennsylvaniaPeruPhilippinesPolandCountiesPolandPortugalPrinceEdwardIslandPuertoRicoQatarQuebecRhodeIslandRomaniaRussiaRwandaSaintKittsandNevisSaintLuciaSaintVincentandtheGrenadinesSamoaSanMarinoSaoTomeandPrincipeSaskatchewanSaudiArabiaScotlandRegionScotlandSenegalSerbiaSeychellesSierraLeoneSingaporeSlovakiaSloveniaSolomonIslandSomaliaSouthAfricaSouthAmericaSouthCarolinaSouthDakotaSouthEuropeanRegionSouthKoreaSpainProvincesSpainSriLankaSudanSurinameSwazilandSwedenSwitzerlandSyriaTaiwanTajikistanTanzaniaTennesseeTexasThailandTibetTogoTongaTrinidadandTobagoTunisiaTurkeyTurkmenistanTuvaluUAEUgandaUK7UkraineUKUruguayUSACentralRegionUSANorthEastRegionUSANorthWestRegionUSARegionUSASouthEastRegionUSASouthWestRegionUSAUtahUzbekistanVanuatuVaticanCityVenezuelaVermontVietnamVirginiaWalesWashingtonWesternSaharaWestEuropeanRegionWestVirginiaWisconsinWorld8WorldWorldwithCountriesWyomingYemenYukonTerritoryZambiaZimbabwe0000B1FCMAP.SETTINGS0c2<map showCanvasBorder='1' canvasBorderColor='F1F1F1' canvasBorderThickness='2' borderColor='FFFFFF' connectorColor='000000' fillAlpha='70'>[CHART.DATA]</map>00009AFCMSAREA2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>000099FCMSBAR2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009CFCMSCOLUMN2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009CFCMSCOLUMN3D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>000098FCMSLINE.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009FFCSTACKEDAREA2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009EFCSTACKEDBAR2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>0000A1FCSTACKEDCOLUMN2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>0000A1FCSTACKEDCOLUMN3D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>0000FDFWBULLET.SETTINGS0c2<chart palette='[CHART.PALETTE]' lowerLimit='[LOWER.LIMIT]' upperLimit='[UPPER.LIMIT]' caption='[CAPTION]' subcaption='[SUBCAPTION]' numberPrefix='[NUMBER.PREFIX]' numberSuffix='[NUMBER.SUFFIX]' showValue='1' >[CHART.DATA]</chart>0000BAFWFP.SETTINGS0c2<chart numberPrefix='[NUMBER.PREFIX]' numberSuffix='[NUMBER.SUFFIX]' caption='[CAPTION]' subcaption='[SUBCAPTION]' decimals='1' baseFontSize='11' >[CHART.DATA]</chart>000122FWGAUGE.SETTINGS0c2<chart palette='[CHART.PALETTE]' lowerLimitDisplay='[LOWER.LIMIT.DISPLAY]' upperLimitDisplay='[UPPER.LIMIT.DISPLAY]' lowerLimit='[LOWER.LIMIT]' upperLimit='[UPPER.LIMIT]' numberPrefix='[NUMBER.PREFIX]' numberSuffix='[NUMBER.SUFFIX]' showValue='1' >[CHART.DATA]</chart>0000CAFWSPARK.SETTINGS0c2<chart yAxisMinValue='[LOWER.LIMIT]' yAxisMaxValue='[UPPER.LIMIT]' palette='[CHART.PALETTE]' caption='[CAPTION]' subcaption='[SUBCAPTION]' setAdaptiveYMin='1' >[CHART.DATA]</chart>004113ICON.LIST0c2accept.pngadd.pnganchor.pngapplication_add.pngapplication_cascade.pngapplication_delete.pngapplication_double.pngapplication_edit.pngapplication_error.pngapplication_form_add.pngapplication_form_delete.pngapplication_form_edit.pngapplication_form_magnify.pngapplication_form.pngapplication_get.pngapplication_go.pngapplication_home.pngapplication_key.pngapplication_lightning.pngapplication_link.pngapplication_osx.pngapplication_osx_terminal.pngapplication.pngapplication_put.pngapplication_side_boxes.pngapplication_side_contract.pngapplication_side_expand.pngapplication_side_list.pngapplication_side_tree.pngapplication_split.pngapplication_tile_horizontal.pngapplication_tile_vertical.pngapplication_view_columns.pngapplication_view_detail.pngapplication_view_gallery.pngapplication_view_icons.pngapplication_view_list.pngapplication_view_tile.pngapplication_xp.pngapplication_xp_terminal.pngarrow_branch.pngarrow_divide.pngarrow_down.pngarrow_inout.pngarrow_in.pngarrow_join.pngarrow_left.pngarrow_merge.pngarrow_out.pngarrow_redo.pngarrow_refresh.pngarrow_refresh_small.pngarrow_right.pngarrow_rotate_anticlockwise.pngarrow_rotate_clockwise.pngarrow_switch.pngarrow_turn_left.pngarrow_turn_right.pngarrow_undo.pngarrow_up.pngasterisk_orange.pngasterisk_yellow.pngattach.pngaward_star_add.pngaward_star_bronze_1.pngaward_star_bronze_2.pngaward_star_bronze_3.pngaward_star_delete.pngaward_star_gold_1.pngaward_star_gold_2.pngaward_star_gold_3.pngaward_star_silver_1.pngaward_star_silver_2.pngaward_star_silver_3.pngbasket_add.pngbasket_delete.pngbasket_edit.pngbasket_error.pngbasket_go.pngbasket.pngbasket_put.pngbasket_remove.pngbell_add.pngbell_delete.pngbell_error.pngbell_go.pngbell_link.pngbell.pngbin_closed.pngbin_empty.pngbin.pngbomb.pngbook_add.pngbook_addresses.pngbook_delete.pngbook_edit.pngbook_error.pngbook_go.pngbook_key.pngbook_link.pngbook_next.pngbook_open.pngbook.pngbook_previous.pngbox.pngbrick_add.pngbrick_delete.pngbrick_edit.pngbrick_error.pngbrick_go.pngbrick_link.pngbrick.pngbricks.pngbriefcase.pngbug_add.pngbug_delete.pngbug_edit.pngbug_error.pngbug_go.pngbug_link.pngbug.pngbuilding_add.pngbuilding_delete.pngbuilding_edit.pngbuilding_error.pngbuilding_go.pngbuilding_key.pngbuilding_link.pngbuilding.pngbullet_add.pngbullet_arrow_bottom.pngbullet_arrow_down.pngbullet_arrow_top.pngbullet_arrow_up.pngbullet_black.pngbullet_blue.pngbullet_delete.pngbullet_disk.pngbullet_error.pngbullet_feed.pngbullet_go.pngbullet_green.pngbullet_key.pngbullet_orange.pngbullet_picture.pngbullet_pink.pngbullet_purple.pngbullet_red.pngbullet_star.pngbullet_toggle_minus.pngbullet_toggle_plus.pngbullet_white.pngbullet_wrench.pngbullet_yellow.pngcake.pngcalculator_add.pngcalculator_delete.pngcalculator_edit.pngcalculator_error.pngcalculator_link.pngcalculator.pngcalendar_add.pngcalendar_delete.pngcalendar_edit.pngcalendar_link.pngcalendar.pngcalendar_view_day.pngcalendar_view_month.pngcalendar_view_week.pngcamera_add.pngcamera_delete.pngcamera_edit.pngcamera_error.pngcamera_go.pngcamera_link.pngcamera.pngcamera_small.pngcancel.pngcar_add.pngcar_delete.pngcar.pngcart_add.pngcart_delete.pngcart_edit.pngcart_error.pngcart_go.pngcart.pngcart_put.pngcart_remove.pngcd_add.pngcd_burn.pngcd_delete.pngcd_edit.pngcd_eject.pngcd_go.pngcd.pngchart_bar_add.pngchart_bar_delete.pngchart_bar_edit.pngchart_bar_error.pngchart_bar_link.pngchart_bar.pngchart_curve_add.pngchart_curve_delete.pngchart_curve_edit.pngchart_curve_error.pngchart_curve_go.pngchart_curve_link.pngchart_curve.pngchart_line_add.pngchart_line_delete.pngchart_line_edit.pngchart_line_error.pngchart_line_link.pngchart_line.pngchart_organisation_add.pngchart_organisation_delete.pngchart_organisation.pngchart_pie_add.pngchart_pie_delete.pngchart_pie_edit.pngchart_pie_error.pngchart_pie_link.pngchart_pie.pngclock_add.pngclock_delete.pngclock_edit.pngclock_error.pngclock_go.pngclock_link.pngclock_pause.pngclock_play.pngclock.pngclock_red.pngclock_stop.pngcog_add.pngcog_delete.pngcog_edit.pngcog_error.pngcog_go.pngcog.pngcoins_add.pngcoins_delete.pngcoins.pngcolor_swatch.pngcolor_wheel.pngcomment_add.pngcomment_delete.pngcomment_edit.pngcomment.pngcomments_add.pngcomments_delete.pngcomments.pngcompress.pngcomputer_add.pngcomputer_delete.pngcomputer_edit.pngcomputer_error.pngcomputer_go.pngcomputer_key.pngcomputer_link.pngcomputer.pngconnect.pngcontrast_decrease.pngcontrast_high.pngcontrast_increase.pngcontrast_low.pngcontrast.pngcontrol_eject_blue.pngcontrol_eject.pngcontrol_end_blue.pngcontrol_end.pngcontrol_equalizer_blue.pngcontrol_equalizer.pngcontrol_fastforward_blue.pngcontrol_fastforward.pngcontroller_add.pngcontroller_delete.pngcontroller_error.pngcontroller.pngcontrol_pause_blue.pngcontrol_pause.pngcontrol_play_blue.pngcontrol_play.pngcontrol_repeat_blue.pngcontrol_repeat.pngcontrol_rewind_blue.pngcontrol_rewind.pngcontrol_start_blue.pngcontrol_start.pngcontrol_stop_blue.pngcontrol_stop.pngcreditcards.pngcross.pngcss_add.pngcss_delete.pngcss_go.pngcss.pngcss_valid.pngcup_add.pngcup_delete.pngcup_edit.pngcup_error.pngcup_go.pngcup_key.pngcup_link.pngcup.pngcursor.pngcut.pngcut_red.pngdatabase_add.pngdatabase_connect.pngdatabase_delete.pngdatabase_edit.pngdatabase_error.pngdatabase_gear.pngdatabase_go.pngdatabase_key.pngdatabase_lightning.pngdatabase_link.pngdatabase.pngdatabase_refresh.pngdatabase_save.pngdatabase_table.pngdate_add.pngdate_delete.pngdate_edit.pngdate_error.pngdate_go.pngdate_link.pngdate_magnify.pngdate_next.pngdate.pngdate_previous.pngdelete.pngdisconnect.pngdisk_multiple.pngdisk.pngdoor_in.pngdoor_open.pngdoor_out.pngdoor.pngdrink_empty.pngdrink.pngdrive_add.pngdrive_burn.pngdrive_cd_empty.pngdrive_cd.pngdrive_delete.pngdrive_disk.pngdrive_edit.pngdrive_error.pngdrive_go.pngdrive_key.pngdrive_link.pngdrive_magnify.pngdrive_network.pngdrive.pngdrive_rename.pngdrive_user.pngdrive_web.pngdvd_add.pngdvd_delete.pngdvd_edit.pngdvd_error.pngdvd_go.pngdvd_key.pngdvd_link.pngdvd.pngemail_add.pngemail_attach.pngemail_delete.pngemail_edit.pngemail_error.pngemail_go.pngemail_link.pngemail_open_image.pngemail_open.pngemail.pngemoticon_evilgrin.pngemoticon_grin.pngemoticon_happy.pngemoticon_smile.pngemoticon_surprised.pngemoticon_tongue.pngemoticon_unhappy.pngemoticon_waii.pngemoticon_wink.pngerror_add.pngerror_delete.pngerror_go.pngerror.pngexclamation.pngeye.pngfeed_add.pngfeed_delete.pngfeed_disk.pngfeed_edit.pngfeed_error.pngfeed_go.pngfeed_key.pngfeed_link.pngfeed_magnify.pngfeed.pngfemale.pngfilm_add.pngfilm_delete.pngfilm_edit.pngfilm_error.pngfilm_go.pngfilm_key.pngfilm_link.pngfilm.pngfilm_save.pngfind.pngflag_blue.pngflag_green.pngflag_orange.pngflag_pink.pngflag_purple.pngflag_red.pngflag_yellow.pngfolder_add.pngfolder_bell.pngfolder_brick.pngfolder_bug.pngfolder_camera.pngfolder_database.pngfolder_delete.pngfolder_edit.pngfolder_error.pngfolder_explore.pngfolder_feed.pngfolder_find.pngfolder_go.pngfolder_heart.pngfolder_image.pngfolder_key.pngfolder_lightbulb.pngfolder_link.pngfolder_magnify.pngfolder_page.pngfolder_page_white.pngfolder_palette.pngfolder_picture.pngfolder.pngfolder_star.pngfolder_table.pngfolder_user.pngfolder_wrench.pngfont_add.pngfont_delete.pngfont_go.pngfont.pnggroup_add.pnggroup_delete.pnggroup_edit.pnggroup_error.pnggroup_gear.pnggroup_go.pnggroup_key.pnggroup_link.pnggroup.pngheart_add.pngheart_delete.pngheart.pnghelp.pnghourglass_add.pnghourglass_delete.pnghourglass_go.pnghourglass_link.pnghourglass.pnghouse_go.pnghouse_link.pnghouse.pnghtml_add.pnghtml_delete.pnghtml_go.pnghtml.pnghtml_valid.pngimage_add.pngimage_delete.pngimage_edit.pngimage_link.pngimage.pngimages.pnginformation.pngipod_cast_add.pngipod_cast_delete.pngipod_cast.pngipod.pngipod_sound.pngjoystick_add.pngjoystick_delete.pngjoystick_error.pngjoystick.pngkey_add.pngkeyboard_add.pngkeyboard_delete.pngkeyboard_magnify.pngkeyboard.pngkey_delete.pngkey_go.pngkey.pnglayers.pnglayout_add.pnglayout_content.pnglayout_delete.pnglayout_edit.pnglayout_error.pnglayout_header.pnglayout_link.pnglayout.pnglayout_sidebar.pnglightbulb_add.pnglightbulb_delete.pnglightbulb_off.pnglightbulb.pnglightning_add.pnglightning_delete.pnglightning_go.pnglightning.pnglink_add.pnglink_break.pnglink_delete.pnglink_edit.pnglink_error.pnglink_go.pnglink.pnglock_add.pnglock_break.pnglock_delete.pnglock_edit.pnglock_go.pnglock_open.pnglock.pnglorry_add.pnglorry_delete.pnglorry_error.pnglorry_flatbed.pnglorry_go.pnglorry_link.pnglorry.pngmagifier_zoom_out.pngmagnifier.pngmagnifier_zoom_in.pngmale.pngmap_add.pngmap_delete.pngmap_edit.pngmap_go.pngmap_magnify.pngmap.pngmedal_bronze_1.pngmedal_bronze_2.pngmedal_bronze_3.pngmedal_bronze_add.pngmedal_bronze_delete.pngmedal_gold_1.pngmedal_gold_2.pngmedal_gold_3.pngmedal_gold_add.pngmedal_gold_delete.pngmedal_silver_1.pngmedal_silver_2.pngmedal_silver_3.pngmedal_silver_add.pngmedal_silver_delete.pngmoney_add.pngmoney_delete.pngmoney_dollar.pngmoney_euro.pngmoney.pngmoney_pound.pngmoney_yen.pngmonitor_add.pngmonitor_delete.pngmonitor_edit.pngmonitor_error.pngmonitor_go.pngmonitor_lightning.pngmonitor_link.pngmonitor.pngmouse_add.pngmouse_delete.pngmouse_error.pngmouse.pngmusic.pngnew.pngnewspaper_add.pngnewspaper_delete.pngnewspaper_go.pngnewspaper_link.pngnewspaper.pngnote_add.pngnote_delete.pngnote_edit.pngnote_error.pngnote_go.pngnote.pngoverlays.pngpackage_add.pngpackage_delete.pngpackage_go.pngpackage_green.pngpackage_link.pngpackage.pngpage_add.pngpage_attach.pngpage_code.pngpage_copy.pngpage_delete.pngpage_edit.pngpage_error.pngpage_excel.pngpage_find.pngpage_gear.pngpage_go.pngpage_green.pngpage_key.pngpage_lightning.pngpage_link.pngpage_paintbrush.pngpage_paste.pngpage.pngpage_red.pngpage_refresh.pngpage_save.pngpage_white_acrobat.pngpage_white_actionscript.pngpage_white_add.pngpage_white_camera.pngpage_white_cd.pngpage_white_code.pngpage_white_code_red.pngpage_white_coldfusion.pngpage_white_compressed.pngpage_white_copy.pngpage_white_cplusplus.pngpage_white_c.pngpage_white_csharp.pngpage_white_cup.pngpage_white_database.pngpage_white_delete.pngpage_white_dvd.pngpage_white_edit.pngpage_white_error.pngpage_white_excel.pngpage_white_find.pngpage_white_flash.pngpage_white_freehand.pngpage_white_gear.pngpage_white_get.pngpage_white_go.pngpage_white_horizontal.pngpage_white_h.pngpage_white_key.pngpage_white_lightning.pngpage_white_link.pngpage_white_magnify.pngpage_white_medal.pngpage_white_office.pngpage_white_paintbrush.pngpage_white_paint.pngpage_white_paste.pngpage_white_php.pngpage_white_picture.pngpage_white.pngpage_white_powerpoint.pngpage_white_put.pngpage_white_ruby.pngpage_white_stack.pngpage_white_star.pngpage_white_swoosh.pngpage_white_text.pngpage_white_text_width.pngpage_white_tux.pngpage_white_vector.pngpage_white_visualstudio.pngpage_white_width.pngpage_white_word.pngpage_white_world.pngpage_white_wrench.pngpage_white_zip.pngpage_word.pngpage_world.pngpaintbrush.pngpaintcan.pngpalette.pngpaste_plain.pngpaste_word.pngpencil_add.pngpencil_delete.pngpencil_go.pngpencil.pngphone_add.pngphone_delete.pngphone.pngphone_sound.pngphoto_add.pngphoto_delete.pngphoto_link.pngphoto.pngphotos.pngpicture_add.pngpicture_delete.pngpicture_edit.pngpicture_empty.pngpicture_error.pngpicture_go.pngpicture_key.pngpicture_link.pngpicture.pngpicture_save.pngpictures.pngpilcrow.pngpill_add.pngpill_delete.pngpill_go.pngpill.pngplugin_add.pngplugin_delete.pngplugin_disabled.pngplugin_edit.pngplugin_error.pngplugin_go.pngplugin_link.pngplugin.pngprinter_add.pngprinter_delete.pngprinter_empty.pngprinter_error.pngprinter.pngrainbow.pngreport_add.pngreport_delete.pngreport_disk.pngreport_edit.pngreport_go.pngreport_key.pngreport_link.pngreport_magnify.pngreport_picture.pngreport.pngreport_user.pngreport_word.pngresultset_first.pngresultset_last.pngresultset_next.pngresultset_previous.pngrosette.pngrss_add.pngrss_delete.pngrss_go.pngrss.pngrss_valid.pngruby_add.pngruby_delete.pngruby_gear.pngruby_get.pngruby_go.pngruby_key.pngruby_link.pngruby.pngruby_put.pngscript_add.pngscript_code.pngscript_code_red.pngscript_delete.pngscript_edit.pngscript_error.pngscript_gear.pngscript_go.pngscript_key.pngscript_lightning.pngscript_link.pngscript_palette.pngscript.pngscript_save.pngserver_add.pngserver_chart.pngserver_compressed.pngserver_connect.pngserver_database.pngserver_delete.pngserver_edit.pngserver_error.pngserver_go.pngserver_key.pngserver_lightning.pngserver_link.pngserver.pngserver_uncompressed.pngshading.pngshape_align_bottom.pngshape_align_center.pngshape_align_left.pngshape_align_middle.pngshape_align_right.pngshape_align_top.pngshape_flip_horizontal.pngshape_flip_vertical.pngshape_group.pngshape_handles.pngshape_move_back.pngshape_move_backwards.pngshape_move_forwards.pngshape_move_front.pngshape_rotate_anticlockwise.pngshape_rotate_clockwise.pngshape_square_add.pngshape_square_delete.pngshape_square_edit.pngshape_square_error.pngshape_square_go.pngshape_square_key.pngshape_square_link.pngshape_square.pngshape_ungroup.pngshield_add.pngshield_delete.pngshield_go.pngshield.pngsitemap_color.pngsitemap.pngsound_add.pngsound_delete.pngsound_low.pngsound_mute.pngsound_none.pngsound.pngspellcheck.pngsport_8ball.pngsport_basketball.pngsport_football.pngsport_golf.pngsport_raquet.pngsport_shuttlecock.pngsport_soccer.pngsport_tennis.pngstar.pngstatus_away.pngstatus_busy.pngstatus_offline.pngstatus_online.pngstop.pngstyle_add.pngstyle_delete.pngstyle_edit.pngstyle_go.pngstyle.pngsum.pngtab_add.pngtab_delete.pngtab_edit.pngtab_go.pngtable_add.pngtable_delete.pngtable_edit.pngtable_error.pngtable_gear.pngtable_go.pngtable_key.pngtable_lightning.pngtable_link.pngtable_multiple.pngtable.pngtable_refresh.pngtable_relationship.pngtable_row_delete.pngtable_row_insert.pngtable_save.pngtable_sort.pngtab.pngtag_blue_add.pngtag_blue_delete.pngtag_blue_edit.pngtag_blue.pngtag_green.pngtag_orange.pngtag_pink.pngtag.pngtag_purple.pngtag_red.pngtag_yellow.pngtelephone_add.pngtelephone_delete.pngtelephone_edit.pngtelephone_error.pngtelephone_go.pngtelephone_key.pngtelephone_link.pngtelephone.pngtelevision_add.pngtelevision_delete.pngtelevision.pngtext_align_center.pngtext_align_justify.pngtext_align_left.pngtext_align_right.pngtext_allcaps.pngtext_bold.pngtext_columns.pngtext_dropcaps.pngtextfield_add.pngtextfield_delete.pngtextfield_key.pngtextfield.pngtextfield_rename.pngtext_heading_1.pngtext_heading_2.pngtext_heading_3.pngtext_heading_4.pngtext_heading_5.pngtext_heading_6.pngtext_horizontalrule.pngtext_indent.pngtext_indent_remove.pngtext_italic.pngtext_kerning.pngtext_letter_omega.pngtext_letterspacing.pngtext_linespacing.pngtext_list_bullets.pngtext_list_numbers.pngtext_lowercase.pngtext_padding_bottom.pngtext_padding_left.pngtext_padding_right.pngtext_padding_top.pngtext_replace.pngtext_signature.pngtext_smallcaps.pngtext_strikethrough.pngtext_subscript.pngtext_superscript.pngtext_underline.pngtext_uppercase.pngthumb_down.pngthumb_up.pngtick.pngtime_add.pngtime_delete.pngtime_go.pngtimeline_marker.pngtime.pngtransmit_add.pngtransmit_blue.pngtransmit_delete.pngtransmit_edit.pngtransmit_error.pngtransmit_go.pngtransmit.pngtux.pnguser_add.pnguser_comment.pnguser_delete.pnguser_edit.pnguser_female.pnguser_go.pnguser_gray.pnguser_green.pnguser_orange.pnguser.pnguser_red.pnguser_suit.pngvcard_add.pngvcard_delete.pngvcard_edit.pngvcard.pngvector_add.pngvector_delete.pngvector.pngwand.pngweather_clouds.pngweather_cloudy.pngweather_lightning.pngweather_rain.pngweather_snow.pngweather_sun.pngwebcam_add.pngwebcam_delete.pngwebcam_error.pngwebcam.pngworld_add.pngworld_delete.pngworld_edit.pngworld_go.pngworld_link.pngworld.pngwrench_orange.pngwrench.pngxhtml_add.pngxhtml_delete.pngxhtml_go.pngxhtml.pngxhtml_valid.pngzoom_in.pngzoom_out.pngzoom.png000092MOBI.APPS0c2SUB.D3ADMINSUB.MOBI.APP.MENUSUB.MOBI.WOSUB.TESTAIAAD3 AdministrationApplication ChooserDemo WO ApplicationDemo Application00007BMONTHLY.20130c277869980896869808900091077900940589703406719886071869680806870707428708058871070682570808878968000007BMONTHLY.20140c2865222009965220098889900865566006552260074665400798552008965230082541200654123007584120098655200000073MONTHLY.20150c29654320080145600888540009650110095012300965121008456320010523680098521000644144005888660000007FMONTHLY.GPS.20130c226517550288064103178601729914744209154142201961923275705280068082799822722781623247042583250054900007FMONTHLY.GPS.20140c2294639443200712235317797332386042323934924466243258618943111867631109141253129142744917536111721000076MONTHLY.GPS.20150c23679677832936845339654253798472034865781365450823197622741016726359493432331534221977139000073MONTHLY.NET.20140c229463943200712353177933238602323934244662425861893111867311091425312912744917361117200006CMONTHLY.NET.20150c2965432080145608885400965011095012309651210845632010523680985210064414405888660000081MONTHLY.PARTS.20140c2414378445224284147585401438425423609067336395560416464855854718841895322328312664074985847292673000078MONTHLY.PARTS.20150c24960869651350055533449464524318362544291449568374293538557601358540842633146503929950454000084MONTHLY.SERVICES.20140c245084356474093595130449942714058294319273826984038208715311051124064587832581034350913425136252700007BMONTHLY.SERVICES.20150c2469345042879554535509054512579173246800951555263416278154763544244436737329493612893614600000EPLATFORM0c2QM000288STATE.NAMES0c2AL,AK,AZ,AR,CA,CO,CT,DE,FL,GA,HI,ID,IL,IN,IA,KS,KY,LA,ME,MD,MA,MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,OH,OK,OR,PA,RI,SC,SD,TN,TX,UT,VT,VA,WA,WV,WI,WY,DCAlabama,Alaska,Arizona,Arkansas,California,Colorado,Connecticut,Delaware,Florida,Georgia,Hawaii,Idaho,Illinois,Indiana,Iowa,Kansas,Kentucky,Louisiana,Maine,Maryland,Massachusetts,Michigan,Minnesota,Mississippi,Missouri,Montana,Nebraska,Nevada,NewHampshire,NewJersey,NewMexico,NewYork,NorthCarolina,NorthDakota,Ohio,Oklahoma,Oregon,Pennsylvania,RhodeIsland,SouthCarolina,SouthDakota,Tennessee,Texas,Utah,Vermont,Virginia,Washington,WestVirginia,Wisconsin,Wyoming,DistrictofColumbia000040TLDB.SETTINGS0c2SUB.USER.AUTH110831-5iso-8859-1NN00005FTLDB.THEMES0c2cream_gray.css,ice.css,patriotic.css,tuscani.cssTheme 1,Theme 2,Theme 3,Theme 400024ECOMPILE.SETUP0c2BASIC %FILENAME% %ITEMNAME%* To configure the compile command when using the web editor* edit line # 1 of this record to contain the appropriate syntax.** Example # 1 - Standard compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME%** Example # 2 - FLASH compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME% (O** Example # 3 - Standard compile using COMPILE* 001 COMPILE %FILENAME% %ITEMNAME%** Only line # 1 of this record is used, all other lines of this record are ignored.* If this record is deleted, the default behavior is:* COMPILE %FILENAME% %ITEMNAME%0000A1FC2DPIE.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' pieRadius='[RADIUS]' animation='0' > [CHART.DATA]</graph>0000B3PORTAL.SALES.REPORT.SETUP0c2MVDBPORTAL.SALESCLOSE.DATECLOSE.DATE.MMCLOSE.DATE.YYYYEXT.AMTEXT.COSTREP.NAMEBRANCHREGION199MD24F8;9;10;-;(MR2);*05TREP;X;1;11314000070PORTAL.AR.REPORT.SETUP0c2MVDBPORTAL.ARDUE.DATEDATES.PAIDINVOICE.AMTBALANCECUST2086MD250MD2CUST1000062PORTAL.AP.REPORT.SETUP0c2MVDBPORTAL.APDUE.DATEDATE.PAIDINV.AMOUNTBALANCE2086MD250MD2050C20WDB.BP0c0001019SUB.GET.RUNTIME.ERRORS0c2SUBROUTINE SUB.GET.RUNTIME.ERRORS(RE.INFO, ACCTNAME, PROGNAME, ERR.CNT, IS.ADMIN.USER)** Copyright (c) 2015 Zumasys, Inc. All rights reserved.* Description: Gather Runtime Errors (QM version)*MAX.ERRS = ERR.CNTERR.CNT = 0RE.INFO = ""OPEN "","MD" TO MD ELSE OPEN "","VOC" TO MD ELSE RETURNENDOPENSEQ @QMSYS:@DS:'errlog' READONLY TO F.ERRLOG ON ERROR RETURNEND ELSE RETURNEND** Read errlog contents, create error records, perform selection, create list of selected error recordsRECORD = ''RECORDS = ''READSEQ RECORD FROM F.ERRLOG ON ERROR NULL ELSE NULLLOOP LOOP  LINE = ''  READSEQ LINE FROM F.ERRLOG ON ERROR NULL ELSE NULL WHILE LINE[1,1] EQ ' ' DO  RECORD<-1> = TRIM(LINE) REPEAT IF RECORD = '' THEN EXIT * * Extract ACCT & DESC from record ACCT = TRIM(FIELD(FIELD(RECORD<1>[20,9999],',',3),')',1)) DESC = TRIM(RECORD<2>) * * Check if record meets selection criteria IF ACCTNAME = '' OR ACCTNAME = ACCT THEN  IF PROGNAME = '' OR INDEX(RECORD<2>, PROGNAME,1) > 0 THEN   *   * Extract TIME, DATE, USER, PIB, PID from record   TIME = RECORD<1>[1,9] ; DATE = RECORD<1>[11,8]   PIB = FIELD(RECORD<1>[20,9999],' ',2)   PID = FIELD(RECORD<1>[20,9999],' ',4)   USER = TRIM(FIELD(RECORD<1>[20,9999],',',2))   *   * Stash record in our collection in opposite order, since log file is oldest-to-newest   RECORD = TIME:@VM:DATE:@VM:PIB:@VM:PID:@VM:USER:@VM:ACCT:@VM:DESC   INS RECORD BEFORE RECORDS<1>   ERR.CNT += 1   IF ERR.CNT > MAX.ERRS THEN    DEL RECORDS<ERR.CNT>    ERR.CNT -= 1   END  END END RECORD = LINEREPEATCLOSESEQ F.ERRLOG ON ERROR NULL** Build RE.INFO string from selected error recordsFOR REC.NUM = 1 TO ERR.CNT DESC = RECORDS<REC.NUM,7> * * get line number LINENO = '' K = COUNT(DESC,' at line ') IF K > 0 THEN  K = INDEX(DESC,' at line ',K)  IF K > 0 THEN   LINENO = FIELD(DESC[K + 9,9999],' ',1)  END END * * get program file name PROG = ''; FNAME = '' PROGFNAME = DESC[K + 8 + COL2() + 1,9999] IF FIELD(PROGFNAME,' ',1) = 'of' THEN  PROGFNAME = PROGFNAME[COL2() + 1,9999]  K = COUNT(PROGFNAME,@DS)  IF K = 0 THEN   PROG = PROGFNAME   * see if we can read catalog record from MD to determine file name   READ CATREC FROM MD,PROGFNAME THEN    IF CATREC<1> = 'V' AND CATREC<2> = 'CS' THEN     PROGFNAME = CATREC<3>     K = COUNT(PROGFNAME,@DS)    END   END  END  IF K > 0 THEN   PROG = FIELD(PROGFNAME,@DS,K+1)   FNAME = FIELD(PROGFNAME,@DS,K)   IF FNAME[LEN(FNAME)-3,4] = '.OUT' THEN FNAME = FNAME[1,LEN(FNAME)-4]  END END * * recheck program name IF PROGNAME = '' OR PROG = PROGNAME THEN  *  * Try and find the source code to include in the feed.  *  SREC = ""  IF FNAME <> '' AND PROG <> '' THEN   OPEN FNAME TO SFILE THEN    READ SREC FROM SFILE, PROG ELSE SREC = ""   END  END  SOURCE.SNIP = ""  IF SREC # "" THEN   CALL SWAP(SREC,'&','&amp;')   CALL SWAP(SREC,'<','&lt;')   CALL SWAP(SREC,'>','&gt;')   IF LINENO MATCHES "1N0N" THEN    START.LINE = LINENO - 3    IF START.LINE < 0 THEN START.LINE = 1   END ELSE LINENO = 1 ; START.LINE = 1   END.LINE = LINENO + 3   SOURCE.SNIP = \<code style="font-size:12px" >\   FOR LN = START.LINE TO END.LINE    LINE = LN "R#4":" ":SREC<LN>    SOURCE.SNIP := LINE:'<br />'   NEXT LN   SOURCE.SNIP := '</code>'   IF IS.ADMIN.USER THEN    * Add a link to edit the subroutine    URL.PROG = PROG    CALL SUB.URL.ENCODE(URL.PROG)    EDIT.LINK = '<a href="/dbc/MVDB.WEB.ED?ed_file=':FNAME:'&ed_item=':URL.PROG:'" target="':FNAME:'_':URL.PROG:'">Edit Source</a>'    SOURCE.SNIP := EDIT.LINK   END  END ELSE   IF PROG = '' THEN    SOURCE.SNIP = 'Unable to identify program name'   END ELSE    SOURCE.SNIP = 'Unable to open source code for ':PROG   END  END  *  RE.INFO := CHAR(10): '<tr valign="top"><td>':RECORDS<REC.NUM,2>:" ":RECORDS<REC.NUM,1>:'</td>'  RE.INFO := CHAR(10): '<td>':RECORDS<REC.NUM,3>:'</td>'  RE.INFO := CHAR(10): '<td>':DESC:'</td>'  RE.INFO := CHAR(10): '</tr>'  RE.INFO := CHAR(10): '<tr valign="top"><td>&nbsp;</td><td colspan="2">':SOURCE.SNIP:'</td></tr>' ENDNEXT REC.NUMRETURNEND00021DSET.COOKIE0c2SUBROUTINE SET.COOKIE( C.VAL )*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 10/25/03* Description  : This program sets the SESSION$COOKIES variable.*              ***********************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*IF TRIM(C.VAL) # "" THEN  SESSION$COOKIES<-1> = C.VALEND*RETURN*000872CREATE.SESSION0c2SUBROUTINE CREATE.SESSION( SESSION.ID )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program creates a unique session record and*              returns the session id to the calling program.**          WARNING: This program relys on MvInternet to generate*                       its unique ID.  If you are testing your program*                       from TCL, this will FAIL and you will not get*                       any session ID returned.** Modified by  : Mike Schmidt, Sierra Bravo Corporation* Date Revised : 11/6/2003* Modification : Modified to add the date and time to attributes 3 and 4.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause** Modified By: Peter Schellenbach, Zumasys* Date: 10/25/2016* Description: Added INCLUDE WWW.INCLUDE so we have access to F.WEB.SESSION*              in /WWW/ COMMON, instead of opening file here. Use F.WEB.SESSION*              instead of WEB.SESSION for file variable. Removed PROCREAD /*              SENTENCE since CGI$UNIQUE.ID is also in /WWW/ COMMON.** Init*#MAKE# RL $OPTIONS D3EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*INCLUDE WBPD WWW.INCLUDE ; *PJS 10-25-16**SESSION.ID = ''**PJS 10-25-16*OPEN '','WEB.SESSION' TO WEB.SESSION ELSE SESSION.ID = 'ERROR'*PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ""; SESSION.ID = 'ERROR'*PJS 10-25-16*PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE(); *PJS 06-12-15**PJS 10-25-16*SESSION.ID = FIELD( TCL.LINE, ' ', 2 )*SESSION.ID = CGI$UNIQUE.ID ;* PJS 10-25-16*IF SESSION.ID = "" THEN SESSION.ID = "ERROR" ; *PJS 06-12-15*CONVERT '{' TO '' IN SESSION.IDCONVERT '}' TO '' IN SESSION.ID*IF (SESSION.ID # 'ERROR') THEN  SESSION.ID = SESSION.ID:'-':DATE():'-':TIME()  SESSION.REC = ""  SESSION.REC<3> = DATE()  SESSION.REC<4> = TIME()  WRITE SESSION.REC ON F.WEB.SESSION, SESSION.IDENDSESSION$ID = SESSION.IDCALL PUT.SESSION.VAR('LastSessionAccess', DATE():'*':TIME())*RETURN*END01731CMVDB.MAIN0c2** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Dashboard Display Program** 1-5-15 TOM PARKER OF ZUMASYS - CHANGES TO SUPPORT MULTI-SERIES DRILLDOWNS* 1-26-15 TOM PARKER OF ZUMASYS - ALLOW PRINTABLE ON ALL CHART TYPE SINCE*         NEW FUSION CHARTS SUPPORT THEM* 3-4-15 TOM PARKER OF ZUMASYS - DONT STRIP OUT DECIMALS IN W$BAR.VALUES* 3-15-15 TOM PARKER OF ZUMASYS - ADDITIONAL CHANGE TO SUPPORT MULTI-SERIES* 6-4-15 PETER SCHELLENBACH OF ZUMASYS - MODIFIED FOR QM*          CHANGE OCONV(X,'U3060') TO MD5(X)** Modified by Peter Schellenbach of Zumasys 06-08-15 for QM compatiblity:*   Change SYSTEM(12) to SYSTEM(1020).** Modified by Peter Schellenbach of Zumasys 07-09-15 for QM compatibility:*   When testing for cataloged program, check if line 1 is 'V', not 'VR'.** 11-30-15 TOM PARKER - PROVIDE WEBSERVICE ACCESS WITH EMBEDDED USER AND PASSWORD** 12-15-15 & 01-14-16 Tom Parker & Peter Schellenbach (*PDF*)*  Added support for PDF generation of any widget.*  Widget subroutine must set W$PDFABLE to 1 to enable PDF generation.*  PDF generation must be enabled in the PDF Configuration widget, on*  the Administrator dashboard.* 01-25-16 Tom Parker - Do not allow Go Back if doing webservice* 04-25-16 Tom Parker - Make Go Back button fully functional for backing*                       up from drilldowns* 6-1-16 TOM PARKER - FIX ISSUES WITH BACKING UP FROM DRILLDOWN* 06-27-16 Tom Parker & Peter Schellenback (*EXCEL*)*  Added support for EXCEL spreadsheet generation of many widgets.*  Widget type must be EXCEL'able to set W$EXCELABLE to 1 to generate icon** 09-23-16 Tom Parker - Eliminate GO_BACK button support and replace with*          logic to handle standard browser back button** 09-23-16 Peter Schellenbach*  Add support for alternate logo defined for each user (MVDB.USERS attr 7).*  Enable 'datepicker' style input fields.*  Fix single user login problem.** 10-07-16 Peter Schellenbach*  If form contains many widget input controls, use POST instead of GET*  for form submission to avoid URL length limitations.**  Because POST method for login and widget inputs causes browser to prompt*  for resubmit when using back or refresh button, the POST-REDIRECT-GET*  pattern is now used. When responding to POST, we return small javascript*  which REDIRECTS by setting window.location. This causes a GET from browser.** 10-25-16 Peter Schellenbach*  Refactored INIT.WWW so all dashboard specific initialization is now in*  MVDB.INIT which is called from here. Only use POST-REDIRECT-GET pattern*  for login page. Use POST without P-R-G for forms with more than 20 inputs*  so that we don't end up with a bogus URL in the browser location (the*  URL used for redirect is bogus, and cannot be used to create emailed or*  webservice URLs).**  Removed the saving of GLOBAL.USER.DATA and WIDGET.USER.DATA from this*  program and move it to MVDB.INIT, saving before letting MVDB.MAIN handle*  the request.** 11-02-16 Peter Schellenbach*  Fine-tuned widget sizes now that we have switched to application_larger.css*  instead of application_normal.css to maximuze the are used by the charts.*  Calculate the 1/3 widget size differently for the 2-column layout, which*  is 45 pixels wider than the same widget in 3-column layout. Old size values*  are commented out for reference (in case we need to support normal size again.)**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.USERSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*EQU TRUE TO 1, FALSE TO 0, AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MVDB.SUBS' TO F.MVDB.SUBS ELSE STOP 201, 'MVDB.SUBS'OPEN '','MVDB.USERS' TO F.MVDB.USERS ELSE STOP 201, 'MVDB.USERS'OPEN '','MVDB.DEFS' TO F.MVDB.DEFS ELSE STOP 201, 'MVDB.DEFS'OPEN '','MVDB.UDATA' TO F.MVDB.UDATA ELSE STOP 201, 'MVDB.UDATA'OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'*** 11-30-15 NEED AN INSTALL DATE TO CONTROL SINGLE USER WEBSERVICE ACCESS*READ INSTALL.DATE FROM F.MVDB.CONTROL, 'INSTALL.DATE' ELSE  INSTALL.DATE=DATE()  WRITE INSTALL.DATE ON F.MVDB.CONTROL, 'INSTALL.DATE'END*OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE STOP 201, 'MVDB.WIDGET.TYPES'OPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE STOP 201, 'MVDB.THEMES'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD/VOC'END*READ WIDGET.DIV FROM F.WEB.FORMS, "WIDGET.DIV" ELSE WIDGET.DIV = "Missing WIDGET.DIV"*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)EQU SITE$AUTO.TRIM    TO SITE$SETTINGS(10)EQU SITE$REFRESH TO SITE$SETTINGS(11)EQU SITE$ALLOW.WEBSVC TO SITE$SETTINGS(12)EQU SITE$ALLOW.EMAILD TO SITE$SETTINGS(13)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READ THEME.LIST FROM F.MVDB.CONTROL, "MVDB.THEMES" ELSE  THEME.LIST = "cream_gray.css,ice.css,patriotic.css,tuscani.css"  THEME.LIST<2> = "Theme 1,Theme 2,Theme 3,Theme 4"  WRITE THEME.LIST ON F.MVDB.CONTROL, "MVDB.THEMES"ENDIF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDEND*MAT GLOBAL.INFO = ''G$QUERYMODE = FALSE ;* Not query mode**PDF** Read PDF configuration settingsDIM PDF$SETTINGS(10)EQU PDF$ENABLED   TO PDF$SETTINGS(1)EQU PDF$COMMAND   TO PDF$SETTINGS(2)EQU PDF$DIRECTORY TO PDF$SETTINGS(3)EQU PDF$LIFETIME  TO PDF$SETTINGS(4)MATREAD PDF$SETTINGS FROM F.MVDB.CONTROL,'PDF.SETTINGS' ELSE MAT PDF$SETTINGS=''IF PDF$ENABLED THEN CALL SUB.PDF.FUNC('cleanup','')** GET LICENSE INFORMATION*CALL SUB.MVDB.FEATURES(USER.LIMIT,MAPS.ENABLED,FUSION.WIDGETS.ENABLED,WATERMARK)*NAME.COLOR = "AQUA":VM:"BLACK":VM:"BLUE":VM:"FUCHSIA":VM:"GRAY":VM:"GREEN":VM:"LIME":VM:"MAROON":VM:"NAVY"NAME.COLOR = NAME.COLOR:VM:"OLIVE":VM:"PURPLE":VM:"RED":VM:"SILVER":VM:"TEAL":VM:"WHITE":VM:"YELLOW":VM:"GREY"NAME.COLOR<2> = "#00FFFF":VM:"#000000":VM:"#0000FF":VM:"#FF00FF":VM:"#808080":VM:"#008000":VM:"#00FF00":VM:"#800000":VM:"#000080"NAME.COLOR<2> = NAME.COLOR<2>:VM:"#808000":VM:"#800080":VM:"#FF0000":VM:"#C0C0C0":VM:"#008080":VM:"#FFFFFF":VM:"#FFFF00":VM:"#808080"*LOCATE "logout" IN CGI$VARS SETTING POS THEN  CALL DESTROY.SESSIONENDCALL GET.SESSION.VAR("userid",userid)CALL GET.SESSION.VAR("adminauth",adminauth)LOCATE "psid" IN CGI$VARS SETTING POS THEN  PURGE.SESSIONID = CGI$VALS<POS>  EXECUTE "MVDB.PURGE.SESSIONS ":PURGE.SESSIONID CAPTURING JUNKENDMAT USER.ITEM = "" ;* PJS 09-23-16: make sure this gets initialized, in case of webservice or emailed reports* 11-30-15 ESTABLISH WEBSERVICE VARIABLESDIM W$WEBSERVICE.DATA(5)MATREAD W$WEBSERVICE.DATA FROM F.MVDB.UDATA,SESSION$ID:"$WEBSERVICE" ELSE MAT W$WEBSERVICE.DATA=''EQU W$WEBSERVICE TO W$WEBSERVICE.DATA(1)EQU W$EMAILED.REPORT TO W$WEBSERVICE.DATA(2)HTML.ID=''IF userid = "" THEN  LOGIN.OK = FALSE  LOGIN.MSG = ""  loginid = "" ; password = ""  LOCATE "loginid" IN CGI$VARS SETTING POS THEN    loginid = CGI$VALS<POS>    LOCATE "password" IN CGI$VARS SETTING POS THEN      password = CGI$VALS<POS>    END  END*WEBSERVICE*  IF loginid # "" AND (password # "" OR SITE$NULL.PW.OK=1) THEN*WEBSERVICE*    IF SITE$AUTH.SUB # "" THEN*WEBSERVICE*      READ CATPTR FROM F.MD, SITE$AUTH.SUB ELSE CATPTR = ""*WEBSERVICE*      *PJS 07-09-15 QM* IF CATPTR<1> = "VR" THEN*WEBSERVICE*      IF CATPTR<1> = "V" THEN ; *PJS 07-09-15 QM**WEBSERVICE*        CALL @SITE$AUTH.SUB(loginid,password,"AUTH",LOGIN.OK,LOGIN.MSG,MAT USER.ITEM)*WEBSERVICE*        IF LOGIN.OK = "Y" THEN LOGIN.OK = TRUE*WEBSERVICE*        IF NOT(LOGIN.OK MATCHES "1N0N") THEN LOGIN.OK = FALSE*WEBSERVICE*      END ELSE*WEBSERVICE*        LOGIN.OK = FALSE*WEBSERVICE*        LOGIN.MSG = SITE$AUTH.SUB:" authentication subroutine not cataloged."*WEBSERVICE*      END*WEBSERVICE*    END ELSE*WEBSERVICE*      MATREAD USER.ITEM FROM F.MVDB.USERS, loginid THEN*WEBSERVICE*        *6-4-15 QM* IF OCONV(password,"U3060") = USER.PASSWORD THEN*WEBSERVICE*        IF MD5(password) = USER.PASSWORD THEN ; *6-4-15 QM**WEBSERVICE*          LOGIN.OK = TRUE*WEBSERVICE*        END*WEBSERVICE*      END*WEBSERVICE*    END*** 11-30-15 WEBSERVICE AND EMAILED REPORT CAPABILITY LOGIC*  IF loginid = 'emailed' THEN W$EMAILED.REPORT=1  IF loginid = 'webservice' THEN W$WEBSERVICE=1  LOCATE "htmlid" IN CGI$VARS SETTING POS THEN    HTML.ID = CGI$VALS<POS>  END ELSE    HTML.ID='null'  END  IF loginid # "" AND (W$EMAILED.REPORT OR password # "" OR SITE$NULL.PW.OK=1) THEN    LOCATE 'passtime' IN CGI$VARS SETTING PASSTIME.POS ELSE PASSTIME.POS=0    IF PASSTIME.POS THEN      PASSTIME=CGI$VALS<PASSTIME.POS>      CONVERT ':' TO '' IN PASSTIME    END ELSE PASSTIME=''    BEGIN CASE      CASE PASSTIME AND loginid = 'webservice'        EXECUTE "MVDB.PURGE.SESSIONS webservice" CAPTURING JUNK; * PURGE ANY OLD webservices        IF PASSTIME MATCHES '6N' THEN          IPASSTIME = ICONV(PASSTIME[1,2]:':':PASSTIME[3,2]:':':PASSTIME[5,2],'MT')        END ELSE          IPASSTIME = -601 ;* Ensure the time is expired if not 6 digits!        END        BEGIN CASE          CASE SITE$ALLOW.WEBSVC # 'Y'* webservice login is not enabled            LOGIN.OK = FALSE            LOGIN.MSG = 'Webservice login is not enabled'          CASE USER.LIMIT < 2 AND DATE() > (INSTALL.DATE+30)* MUST HAVE A MULTI USER LICENSE TO USE WEBSERVICE AFTER* 30 DAY TRIAL PERIOD            LOGIN.OK = FALSE            LOGIN.MSG = 'Must have a multi-user license to use webservices'          CASE ABS(TIME()-IPASSTIME) > 600* TIME MUST BE WITHIN 10 MINUTES OF MACHINE TIME            LOGIN.OK = FALSE*LOGIN.MSG = 'Request not synced with system time.'            LOGIN.MSG = 'The request URL has expired. This may be due to differences in the system '            LOGIN.MSG := 'clock on the MV Dashboard server and the clock used to generate the URL.'          CASE 1* VALID PASSWORD IS THE SUM OF MMDDYY + SSMMHH (FROM PASSTIME)* INVERT THE TIME TO SSMMHH            EMITSSAP=''            FOR TIME.I = 6 TO 1 STEP -1              EMITSSAP:=PASSTIME[TIME.I,1]            NEXT TIME.I*OTODAY=OCONV(DATE(),'D2-')*CONVERT '-' TO '' IN OTODAY            TODAY.MM=OCONV(DATE(),'DM')'R%%'            TODAY.DD=OCONV(DATE(),'DD')'R%%'            TODAY.YY=OCONV(DATE(),'DY')'R%%'            OTODAY = TODAY.MM:TODAY.DD:TODAY.YY ;* handle non-USA date formats properly            CALCED.PASSWORD=OTODAY+EMITSSAP            IF password MATCHES '6N' THEN CHECKED.PASSWORD = password + 0 ELSE CHECKED.PASSWORD = -1            IF CALCED.PASSWORD = CHECKED.PASSWORD THEN              LOGIN.OK = TRUE              USER.ROLE=''*                    CALL PUT.SESSION.VAR("userid",loginid)            END ELSE              LOGIN.OK = FALSE              LOGIN.MSG = 'Invalid password'            END        END CASE      CASE loginid = 'emailed'        EXECUTE "MVDB.PURGE.SESSIONS emailed" CAPTURING JUNK; * PURGE ANY OLD emailed        OPEN '','MVDB.EMAILED.HTML' TO F.EMAILED.HTML ELSE STOP 201, 'MVDB.EMAILED.HTML'*** PURGED ANY EMAIL REPORTS OVER 10 DAYS OLD*        EXECUTE 'SELECT MVDB.EMAILED.HTML' CAPTURING JUNK        LOOP          READNEXT EMAILED.ID ELSE EMAILED.ID='DONE'        UNTIL EMAILED.ID='DONE' DO          IF (EMAILED.ID[1,5]+10) < DATE() THEN            DELETE F.EMAILED.HTML, EMAILED.ID          END        REPEAT        IF SITE$ALLOW.EMAILD # 'Y' THEN* emaild login is not enabled          LOGIN.OK = FALSE          LOGIN.MSG = 'Emailed login is not enabled'        END ELSE          READV TEST.HTML.REPORT FROM F.EMAILED.HTML, HTML.ID, 1 ELSE TEST.HTML.REPORT='NOTFOUND'          IF TEST.HTML.REPORT = 'NOTFOUND' THEN            LOGIN.OK = FALSE            LOGIN.MSG = 'Emailed report not found with ID of ':HTML.ID          END ELSE            USER.ROLE=''            LOGIN.OK = TRUE            INSERT.VARS='dbname':AM:'udview':AM:'udpos1':AM:'udval1'            INSERT.VALS='Emailed Report':AM:'Emailed Report':AM:1:AM:HTML.ID            CGI$VARS=INSERT(CGI$VARS,1,0,0,INSERT.VARS)            CGI$VALS=INSERT(CGI$VALS,1,0,0,INSERT.VALS)          END        END      CASE SITE$AUTH.SUB # ""        READ CATPTR FROM F.MD, SITE$AUTH.SUB ELSE CATPTR = ""*PJS 07-09-15 QM* IF CATPTR<1> = "VR" THEN        IF CATPTR<1> = "V" THEN ; *PJS 07-09-15 QM*          CALL @SITE$AUTH.SUB(loginid,password,"AUTH",LOGIN.OK,LOGIN.MSG,MAT USER.ITEM)          IF LOGIN.OK = "Y" THEN LOGIN.OK = TRUE          IF NOT(LOGIN.OK MATCHES "1N0N") THEN LOGIN.OK = FALSE        END ELSE          LOGIN.OK = FALSE          LOGIN.MSG = SITE$AUTH.SUB:" authentication subroutine not cataloged."        END      CASE 1        MATREAD USER.ITEM FROM F.MVDB.USERS, loginid THEN*6-4-15 QM* IF OCONV(password,"U3060") = USER.PASSWORD THEN          IF MD5(password) = USER.PASSWORD THEN ; *6-4-15 QM*            LOGIN.OK = TRUE*                 CALL PUT.SESSION.VAR("userid",loginid)          END        END    END CASE  END  IF LOGIN.OK THEN    EXECUTE "MVDB.PURGE.SESSIONS" CAPTURING JUNK ;* Purge out old session data*    SELECT F.WEB.SESSION    ACTIVE.SESSIONS = ""    USER.ACTIVE.SESSIONS = ""    LOOP      READNEXT WSID ELSE EXIT      READ SREC FROM F.WEB.SESSION, WSID ELSE CONTINUE      LOCATE "userid" IN SREC<1> SETTING UPOS THEN        ASUSER = SREC<2,UPOS>        LOCATE "LastSessionAccess" IN SREC<1> SETTING UPOS THEN          ASDATE = FIELD(SREC<2,UPOS>,'*',1) ;* date          ASTIME = FIELD(SREC<2,UPOS>,'*',2) ;* time          ASAGE = (DATE()-ASDATE) * 86400          ASAGE += (TIME()-ASTIME)        END ELSE ASAGE = 0        IF OCONV(ASUSER,'MCU') = OCONV(loginid,'MCU') THEN          LOCATE ASAGE IN USER.ACTIVE.SESSIONS<3> BY "DR" SETTING ASPOS ELSE NULL          USER.ACTIVE.SESSIONS = INSERT( USER.ACTIVE.SESSIONS, 1, ASPOS, 0, WSID )          USER.ACTIVE.SESSIONS = INSERT( USER.ACTIVE.SESSIONS, 2, ASPOS, 0, ASUSER ) ;* User ID          USER.ACTIVE.SESSIONS = INSERT( USER.ACTIVE.SESSIONS, 3, ASPOS, 0, ASAGE )        END ELSE          LOCATE ASAGE IN ACTIVE.SESSIONS<3> BY "DR" SETTING ASPOS ELSE NULL          ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 1, ASPOS, 0, WSID )          ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 2, ASPOS, 0, ASUSER ) ;* User ID          ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 3, ASPOS, 0, ASAGE )        END      END    REPEAT*Merge active sessions for this user in front of*the other sessions to prefer those sessions for cleanup.    IF USER.ACTIVE.SESSIONS # '' THEN      ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 1, 1, 0, USER.ACTIVE.SESSIONS<1> )      ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 2, 1, 0, USER.ACTIVE.SESSIONS<2> )      ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 3, 1, 0, USER.ACTIVE.SESSIONS<3> )    END    ASCNT = DCOUNT( ACTIVE.SESSIONS<1>, @VM )    IF ASCNT > USER.LIMIT THEN      PURGE.LIST = ""      LOOP WHILE ASCNT > USER.LIMIT DO        PURGE.LIST := ACTIVE.SESSIONS<1,1>:" "        ACTIVE.SESSIONS = DELETE( ACTIVE.SESSIONS, 1, 1, 0 )        ACTIVE.SESSIONS = DELETE( ACTIVE.SESSIONS, 2, 1, 0 )        ACTIVE.SESSIONS = DELETE( ACTIVE.SESSIONS, 3, 1, 0 )        ASCNT -= 1      REPEAT      EXECUTE "MVDB.PURGE.SESSIONS ":PURGE.LIST CAPTURING JUNK    END    IF ASCNT = USER.LIMIT THEN* Logging in will force a user to log off      IF SITE$AUTO.TRIM = 'Y' THEN        EXECUTE "MVDB.PURGE.SESSIONS ":ACTIVE.SESSIONS<1,1> CAPTURING JUNK      END ELSE        READ MSG.TEMPLATE FROM F.WEB.FORMS, "message.html" ELSE MSG.TEMPLATE = "message.html not found."        CALL SWAP(MSG.TEMPLATE,'<!-- MSG_TITLE -->',"User limit exceeded.")        CALL SWAP(MSG.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)        CALL SWAP(MSG.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)        MSG.CONTENT = \<p>Your maximum user limit has been reached. If you choose to log in, user "\:ACTIVE.SESSIONS<2,1>        MSG.CONTENT := \" will be logged out and the user's session data will be lost.</p>\        MSG.CONTENT := '<a href="/dbc/MVDB.MAIN?psid=':ACTIVE.SESSIONS<1,1>:'">Click here</a> to log ':ACTIVE.SESSIONS<2,1>:' out and try again.</a>'        CALL SWAP(MSG.TEMPLATE,'<!-- MSG_CONTENT -->',MSG.CONTENT)        CALL WEB.SEND(MSG.TEMPLATE)        GLOBAL.INFO(100) = 1        STOP      END    END    CALL PUT.SESSION.VAR("userid",loginid)    userid = loginid    CALL PUT.SESSION.VAR("login_date",DATE())    CALL PUT.SESSION.VAR("login_time",TIME())  END ELSE    READ LOGIN.PAGE FROM F.WEB.FORMS, "login.html" ELSE LOGIN.PAGE = "login.html not found."    IF loginid # "" THEN      IF LOGIN.MSG = "" THEN LOGIN.MSG = "Invalid user ID or Password"      CALL SWAP(LOGIN.PAGE,'<!-- ERROR -->',LOGIN.MSG)    END    CALL SWAP(LOGIN.PAGE,'<!-- SITE_LOGO -->',SITE.LOGO)    CALL SWAP(LOGIN.PAGE,'<!--CHARACTER_SET-->',SITE$CHARSET)    CALL SWAP(LOGIN.PAGE,'<!-- SITE_THEME -->',THEME.CSS)    CALL WEB.SEND(LOGIN.PAGE)    GLOBAL.INFO(100) = 1 ;* Intentional Stop    STOP  ENDEND ELSE* Get the user item.* If a custom authentication subroutine is in use, we have to call that* subroutine again in order to get the user record populated  IF SITE$AUTH.SUB # "" THEN    READ CATPTR FROM F.MD, SITE$AUTH.SUB ELSE CATPTR = ""*PJS 07-09-15 QM* IF CATPTR<1> = "VR" THEN    IF CATPTR<1> = "V" THEN ; *PJS 07-09-15 QM*      CALL @SITE$AUTH.SUB(userid,"","READ",LOGIN.OK,LOGIN.MSG,MAT USER.ITEM)    END ELSE MAT USER.ITEM = ""  END ELSE    MATREAD USER.ITEM FROM F.MVDB.USERS, userid ELSE MAT USER.ITEM = ''  ENDENDIF USER.ROLE = "Administrator" AND NOT(adminauth) THEN* The user is an admin based on the USER.ROLE setting in their user record  adminauth = 1  CALL PUT.SESSION.VAR("adminauth",adminauth)ENDG$ADMIN.USER = adminauth*G$USERID = userid* 10-07-16 Implement the POST-REDIRECT-GET pattern to prevent the browser* from prompting before resubmit when using back or refresh buttons after* a POST (used for login form only at this time).LOCATE "REQUEST_METHOD" IN CGI$VARS SETTING POS THEN  IF CGI$VALS<POS> = "POST" THEN    LOCATE "dblogin" IN CGI$VARS SETTING POS THEN      IF CGI$VALS<POS> THEN* Redirect to MVDB.MAIN default dashboard after valid login        HTML = ''        HTML<-1> = '<html>'        HTML<-1> = '<body>'        HTML<-1> = '<script type="text/javascript">'        HTML<-1> = 'window.location="':CGI$PATH:'/MVDB.MAIN?dbname=";' ;* start with default dashboard after login        HTML<-1> = '</script>'        HTML<-1> = '</body>'        HTML<-1> = '</html>'        CALL WEB.SEND(HTML)        GLOBAL.INFO(100) = 1 ;* Intentional Stop        STOP      END    END* handle P-R-G for widget input form submit*    WRITE CGI$VARS ON F.MVDB.UDATA,SESSION$ID:'$POSTVARS'*    WRITE CGI$VALS ON F.MVDB.UDATA,SESSION$ID:'$POSTVALS'*    HTML = ''*    HTML<-1> = '<html>'*    HTML<-1> = '<body>'*    HTML<-1> = '<script type="text/javascript">'*    HTML<-1> = 'window.location="':CGI$PATH:'/MVDB.MAIN?dbprg=1";'*    HTML<-1> = '</script>'*    HTML<-1> = '</body>'*    HTML<-1> = '</html>'*    CALL WEB.SEND(HTML)*    GLOBAL.INFO(100) = 1 ;* Intentional Stop*    STOP*  END  END*LOCATE "dbprg" IN CGI$VARS SETTING POS THEN*  IF CGI$VALS<POS> THEN*    READ CGI$VARS FROM F.MVDB.UDATA,SESSION$ID:'$POSTVARS' THEN*      READ CGI$VALS FROM F.MVDB.UDATA,SESSION$ID:'$POSTVALS' ELSE CGI$VALS = ''*    END*    DELETE F.MVDB.UDATA,SESSION$ID:'$POSTVARS'*    DELETE F.MVDB.UDATA,SESSION$ID:'$POSTVALS'*  END*END* END OF 10-07-16*  LOCATE 'generatepdf' IN CGI$VARS SETTING GENERATE.PDF ELSE GENERATE.PDF=0; * 4-25-16  LOCATE 'generateexcel' IN CGI$VARS SETTING GENERATE.EXCEL ELSE GENERATE.EXCEL=0; *EXCEL* 6-27-16  W$EXCELABLE=0;   *EXCEL* 6-27-16  GO.BACK=0;   * 4-25-16*GOBACK.REENTRY: ; * 4-25-16** udview, if present, is the view name to which  the associated* udpos and udval parameters apply.  LOCATE "udview" IN CGI$VARS SETTING POS THEN    udview = CGI$VALS<POS>  END ELSE udview = ""*  LOCATE "dbname" IN CGI$VARS SETTING POS THEN    CALL PUT.SESSION.VAR("current_db",CGI$VALS<POS>)  END*  LOCATE 'refresh' IN CGI$VARS SETTING POS THEN*really, this should be stored in the user record per db key    IF CGI$VALS<POS> = '0' THEN CGI$VALS<POS> = ''    CALL GET.SESSION.VAR("current_db",r.current.db)    IF r.current.db = '' THEN r.current.db = USER.DEFAULT.DB    CALL PUT.SESSION.VAR(r.current.db:"!refresh",CGI$VALS<POS>)  END*9-23-16***9-23-16*** 4-25-16 SUPPORT AUTOMATIC BACKOUT FROM A DRILLDOWN*9-23-16***9-23-16**EXCEL*IF NOT(GO.BACK) AND NOT(GENERATE.PDF) THEN*9-23-16*IF NOT(GO.BACK) AND NOT(GENERATE.PDF) AND NOT(GENERATE.EXCEL) THEN; *EXCEL* 6-27-16*9-23-16*   CALL DRILLDOWN.STACK.RTNE(F.MVDB.UDATA,DRILLDOWN.STACK,GO.BACK)*9-23-16*   IF GO.BACK THEN GOTO GOBACK.REENTRY*9-23-16*END ELSE*9-23-16*   DRILLDOWN.STACK = ""*9-23-16*END  DRILLDOWN.STACK=''; *9-23-16  G$DRILLDOWN.MODE = FALSE  LOCATE "dd" IN CGI$VARS SETTING POS THEN    IF CGI$VALS<POS> <> '' THEN      G$DRILLDOWN.MODE = TRUE    END  END*9-23-16** END OF 4-25-16*  LOCATE "sw" IN CGI$VARS SETTING POS THEN    FORM.SUBMIT.WIDGET = CGI$VALS<POS>  END ELSE FORM.SUBMIT.WIDGET = ""*  IF G$DRILLDOWN.MODE THEN* This is a drill-down call. Load up the "drilldown" dashboard* and populate it only with this single widget.    LOCATE "dd_from" IN CGI$VARS SETTING POS THEN      G$DD.REFERRER = CGI$VALS<POS>    END    LOCATE "dd_from_db" IN CGI$VARS SETTING POS THEN      G$DD.FROM.DB = CGI$VALS<POS>    END    G$CURRENT.DB = "drilldown"    MAT DB.ITEM = ''    READV DD.FROM.DB.THEME FROM F.MVDB.DEFS, G$DD.FROM.DB, 7 ELSE DD.FROM.DB.THEME = ''    DB.THEME = DD.FROM.DB.THEME    DB.WIDGETS = udview  END ELSE    CALL GET.SESSION.VAR("current_db",current.db)    IF current.db # "" THEN      G$CURRENT.DB = current.db    END ELSE* No current dashboard is available in the session.* Must be the first time through. Go get the default.      G$CURRENT.DB = USER.DEFAULT.DB      IF G$CURRENT.DB = '' THEN G$CURRENT.DB = "EMPTY" ;* Empty dashboard    END*    MATREAD DB.ITEM FROM F.MVDB.DEFS, G$CURRENT.DB ELSE MAT DB.ITEM = ''  END  IF DB.THEME # '' THEN    READV THEME.CSS FROM F.MVDB.THEMES, DB.THEME, 1 ELSE THEME.CSS = ''  END ELSE    READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''  END** PJS 09-23-16: user altertnate logo overrides site logo  IF USER.ALT.LOGO <> '' THEN    SITE.LOGO = USER.ALT.LOGO  END ELSE    IF SITE$ALT.LOGO = '' THEN      SITE.LOGO = '/db/images/mv-logo.png'    END ELSE      SITE.LOGO = SITE$ALT.LOGO    END  END  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  END*  CALL GET.SESSION.VAR("login_date",login.date)  CALL GET.SESSION.VAR("login_time",login.time)  G$LOGIN.DATE = login.date  G$LOGIN.TIME = login.time**PDF** When generating a PDF, get name of widget to render into PDF.* When generating iframe content, get the HTML widget name to* show in the iframe.  WIDGET.OWN.STYLE = FALSE  SINGLE.WIDGET = ""  PDF.WIDGET.NAME = ""* 4-25-16 *IF PDF$ENABLED THEN* 4-25-16 *  LOCATE 'generatepdf' IN CGI$VARS SETTING POS ELSE POS=0* 4-25-16 *  IF POS THEN* 4-25-16 *    PDF.WIDGET.NAME = CGI$VALS<POS>* 4-25-16 *    SINGLE.WIDGET = PDF.WIDGET.NAME* 4-25-16 *  END* 4-25-16 *END*** 4-25-16 CHANGED LOGIC*  IF PDF$ENABLED AND GENERATE.PDF THEN    PDF.WIDGET.NAME = CGI$VALS<GENERATE.PDF>    SINGLE.WIDGET = PDF.WIDGET.NAME    W$PDFABLE=1    DB.WIDGETS=PDF.WIDGET.NAME  END* END OF 4-25-16***EXCEL* 6-27-16 ADDED LOGIC*  IF GENERATE.EXCEL THEN    EXCEL.WIDGET.NAME = CGI$VALS<GENERATE.EXCEL>    SINGLE.WIDGET = EXCEL.WIDGET.NAME    W$EXCELABLE=1    DB.WIDGETS=EXCEL.WIDGET.NAME  END ELSE EXCEL.WIDGET.NAME=''* END OF 6-27-16  IFRAME.WIDGET.NAME = ""  LOCATE 'iframewidget' IN CGI$VARS SETTING POS ELSE POS=0  IF POS THEN    IFRAME.WIDGET.NAME = CGI$VALS<POS>    SINGLE.WIDGET = IFRAME.WIDGET.NAME  END** Build a list of subroutines to call to create this dashboard*  DISP.CNT = DCOUNT( DB.WIDGETS, VM )  WIDGET.NAME.POS = FALSE  FOR DX = 1 TO DISP.CNT    MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, DB.WIDGETS<1,DX> THEN      ADD.OK = TRUE      IF WIDGET.USERS = "ADMIN" THEN        IF NOT(adminauth) THEN ADD.OK = FALSE ;* Only usable by authenticated admins      END ELSE IF WIDGET.USERS # "" THEN ;* Some user restrictions have been assigned        LOCATE userid IN WIDGET.USERS<1> SETTING POS ELSE ADD.OK = FALSE      END      IF ADD.OK THEN*PDF* if generating PDF or iframe content, exclude other widgets*EXCEL* also applies to generating EXCEL        IF SINGLE.WIDGET = "" OR SINGLE.WIDGET = DB.WIDGETS<1,DX> THEN          WIDGET.NAME.POS += 1          G$WIDGET.NAME.LIST<1,WIDGET.NAME.POS> = DB.WIDGETS<1,DX>          G$WIDGET.SUB.LIST<1,WIDGET.NAME.POS> = WIDGET.SUB        END      END    END  NEXT DX*  DIM TEMPLATE.AREA(5)  MAT TEMPLATE.AREA = ''*  MAT GLOBAL.TEMP.DATA = '' ;* Initialize  MATREAD GLOBAL.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$UG" ELSE MAT GLOBAL.USER.DATA = ''*  CALL GET.SESSION.VAR("debug_widgets",DEBUG.WIDGETS) ;* Retrieve a list of widgets user is debugging  IF adminauth THEN ;* Only administrators can put widgets into debug mdoe.    LOCATE "debug_widget" IN CGI$VARS SETTING POS THEN      DEBUG.WIDGET = CGI$VALS<POS>      LOCATE DEBUG.WIDGET IN DEBUG.WIDGETS SETTING POS ELSE        DEBUG.WIDGETS<-1> = DEBUG.WIDGET        CALL PUT.SESSION.VAR("debug_widgets",DEBUG.WIDGETS)      END    END    LOCATE "undebug_widget" IN CGI$VARS SETTING POS THEN      UNDEBUG.WIDGET = CGI$VALS<POS>      LOCATE UNDEBUG.WIDGET IN DEBUG.WIDGETS SETTING DPOS THEN        DEBUG.WIDGETS = DELETE( DEBUG.WIDGETS, DPOS, 0, 0 )        CALL PUT.SESSION.VAR("debug_widgets",DEBUG.WIDGETS)      END    END  END*  CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS) ;* Retrieve a list of failed widgets this session  LOCATE "unfail_widget" IN CGI$VARS SETTING POS THEN* The user has asked to take this widget out of failed mode and try running the widget again.    UNFAIL.WIDGET = CGI$VALS<POS>    LOCATE UNFAIL.WIDGET IN FAILED.WIDGETS SETTING DPOS THEN      FAILED.WIDGETS = DELETE( FAILED.WIDGETS, DPOS, 0, 0 )      CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)    END  END** Was there a running widget that didn't complete? If so, it's a failed widget that didn't return* control to MVDB.MAIN. Let's add it to the list of failed widgets this session so we can avoid* producing blank pages for the user.*  CALL GET.SESSION.VAR("running_widget",FAILED.WIDGET)  CALL GET.SESSION.VAR("running_widget_dt",FAILED.WIDGET.DT)  IF FAILED.WIDGET # "" THEN    FW.DATE = FIELD( FAILED.WIDGET.DT, '*', 1 )    FW.TIME = FIELD( FAILED.WIDGET.DT, '*', 2 )    FW.LAPSE = TIME() - FW.TIME    FW.LAPSE += ((DATE() - FW.DATE) * 86400)    IF SITE$W.MAX.DUR = "" THEN SITE$W.MAX.DUR = 10 ;* Default    IF FW.LAPSE < SITE$W.MAX.DUR THEN FAILED.WIDGET = ""  END  IF FAILED.WIDGET # "" THEN    CALL PUT.SESSION.VAR("running_widget","")    CALL PUT.SESSION.VAR("running_widget_dt","")    LOCATE FAILED.WIDGET IN FAILED.WIDGETS SETTING FWPOS ELSE      FAILED.WIDGETS<-1> = FAILED.WIDGET      CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)    END  END** Widgets appearing in FAILED.WIDGETS and DEBUG.WIDGETS are both hijacked at runtime, and our* SUB.DEBUG.WIDGET subroutine is executed in place of the subroutine in the widget definition.* The difference is that FAILED.WIDGETS are widgets that this program has determined to have* failed. DEBUG.WIDGETS are functional widgets that the user has put into debug mode.* In both cases, the widget remains in this list until the user removes it using controls* within the SUB.DEBUG.WIDGET widget.*  WIDGET.CNT = DCOUNT( G$WIDGET.NAME.LIST, VM )  FOR VX = 1 TO WIDGET.CNT    WIDGET.NAME = G$WIDGET.NAME.LIST<1,VX>    MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, WIDGET.NAME ELSE MAT WIDGET.ITEM = ''*9-23-16** FIX 6-1-16 *  MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME ELSE MAT WIDGET.USER.DATA = ''*9-23-16** FIX 6-1-16 **9-23-16*  IF GO.BACK THEN*9-23-16*     MAT WIDGET.USER.DATA=''*9-23-16*   END ELSE*9-23-16*     MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME ELSE MAT WIDGET.USER.DATA = ''*9-23-16*   END*9-23-16** END OF 6-1-16    MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME ELSE MAT WIDGET.USER.DATA = ''; *9-23-16**    MAP.TYPE.SUFFIX = ""    IF WIDGET.NAME = udview THEN* We need to set values in WIDGET.USER.DATA before calling this routine* Process links.      UDN = 1      SEARCH.DONE = FALSE      LOOP        SEARCH.NAME = "udpos":UDN        LOCATE SEARCH.NAME IN CGI$VARS SETTING POS THEN          udpos = CGI$VALS<POS>          IF udpos MATCHES "1N0N" THEN            IF udpos < 1 OR udpos > 100 THEN UDN +=1 ; CONTINUE          END ELSE UDN += 1 ; CONTINUE          SEARCH.NAME = "udval":UDN          LOCATE SEARCH.NAME IN CGI$VARS SETTING POS THEN            WIDGET.USER.DATA(udpos) = CGI$VALS<POS>          END        END ELSE SEARCH.DONE = TRUE      UNTIL SEARCH.DONE DO        UDN += 1      REPEAT* Process Inputs.      VARCNT = DCOUNT( CGI$VARS, AM )      FOR CGIVX = 1 TO VARCNT        IF CGI$VARS<CGIVX>[1,4] = "inp_" THEN          udpos = FIELD(CGI$VARS<CGIVX>,'_',2)          IF udpos MATCHES "1N0N" THEN            IF udpos >= 1 AND udpos <= 100 THEN              WIDGET.USER.DATA(udpos) = CGI$VALS<CGIVX>            END          END        END*Look for checkboxes that didn't come back*and stuff a zero in there.        IF CGI$VARS<CGIVX>[1,9] = 'mvdbcxbx_' THEN          udpos = FIELD(CGI$VARS<CGIVX>,'_',2)          LOCATE 'inp_':udpos IN CGI$VARS SETTING CXBX.POS ELSE            IF udpos >= 1 AND udpos <= 100 THEN              WIDGET.USER.DATA(udpos) = 0            END          END        END      NEXT CGIVX*      LOCATE 'mapdd' IN CGI$VARS SETTING POS THEN* This is a map drilldown. Get the map name from the state code        STATE.CODE = WIDGET.USER.DATA(1)        READ STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ""        CONVERT "," TO @VM IN STATE.NAMES        LOCATE STATE.CODE IN STATE.NAMES<1> SETTING STATE.POS THEN          WIDGET.USER.DATA(2) = STATE.NAMES<2,STATE.POS>          MAP.TYPE.SUFFIX = STATE.CODE ;* Add this to the widget type        END      END    END** If this is a USA map widget set in drill-down mode for a specific state* that state name will be in WIDGET.USER.DATA(1). This code below is necessary* to ensure that the widget stays in the state map mode until the user* changes it.*    IF MAP.TYPE.SUFFIX = "" THEN MAP.TYPE.SUFFIX = WIDGET.USER.DATA(1)<1>*    IF FORM.SUBMIT.WIDGET = WIDGET.NAME THEN* The user clicked the "go" button on the form section of this widget.      G$SUBMITTED = 1    END ELSE      G$SUBMITTED = 0    END** The widget debugger uses GLOBAL.INFO(90) to determine if the widget is in debug* mode due to user request, or if it is being forced into debug mode by MVDB.MAIN*    GLOBAL.INFO(90) = ""    GLOBAL.INFO(91) = G$WIDGET.SUB.LIST<1,VX> ;* Original subroutine name    WDEBUG.MODE = 0 ; WFAIL.MODE = 0*    LOCATE WIDGET.NAME IN FAILED.WIDGETS SETTING DUM THEN* This widget failed last time we tried to run it. Let's run the "Failed Widget" subroutine instead.* This subroutine will have access to all of the information that would have been passed to the* failed widget, so diagnostic information can be presented through this widget.      GLOBAL.INFO(90) = "FAIL"      SUBNAME = "SUB.DEBUG.WIDGET"      WFAIL.MODE = 1    END ELSE      LOCATE WIDGET.NAME IN DEBUG.WIDGETS SETTING DUM THEN        GLOBAL.INFO(90) = "DEBUG"        SUBNAME = "SUB.DEBUG.WIDGET"        WDEBUG.MODE = 1      END ELSE        SUBNAME = G$WIDGET.SUB.LIST<1,VX>      END    END    MAT WIDGET.INFO = "" ;* clear this one out for the new call    G$WIDGET.NAME = WIDGET.NAME    G$WIDGET.SUB = SUBNAME    G$WIDGET.CALL.TIME<1,VX> = DATE():"*":TIME()*#MAKE# RL IF 0 THEN*PJS 06-08-15*START.TIMER = SYSTEM(12)    START.TIMER = SYSTEM(1020) ; *PJS 06-08-15* QM*#MAKE# RL END    READ TST FROM F.MD, SUBNAME THEN      CALL PUT.SESSION.VAR("running_widget",WIDGET.NAME)      DT.STAMP = DATE():"*":TIME()      CALL PUT.SESSION.VAR("running_widget_dt",DT.STAMP)      CALL @SUBNAME      CALL PUT.SESSION.VAR("running_widget","")      CALL PUT.SESSION.VAR("running_widget_dt","")    END ELSE      W$TITLE = WIDGET.NAME:" (ERROR)"      W$TYPE = "TEXT"      W$TEXT.DATA = SUBNAME:" not cataloged."    END* Special handling for drill-down to a state level on a USA Map    IF W$TYPE = "USAMAP" AND MAP.TYPE.SUFFIX # "" THEN      W$TYPE := ":":MAP.TYPE.SUFFIX    END*#MAKE# RL IF 0 THEN*PJS 06-08-15*G$WIDGET.CALL.DUR<1,VX> = SYSTEM(12) - START.TIMER    G$WIDGET.CALL.DUR<1,VX> = SYSTEM(1020) - START.TIMER ; *PJS 06-08-15* QM*#MAKE# RL END    MATWRITE WIDGET.USER.DATA ON F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME*    IF NOT(W$HIDDEN) THEN*EXCEL* 6-27-16 DETERMINE IF W$TYPE CAN GENERATE EXCEL      BEGIN CASE        CASE W$EXCELABLE; NULL        CASE W$TYPE = 'TABLE'; W$EXCELABLE=1        CASE INDEX(W$TYPE,'COLUMN',1); W$EXCELABLE=1        CASE INDEX(W$TYPE,'LINE',1); W$EXCELABLE=1        CASE INDEX(W$TYPE,'BAR',1); W$EXCELABLE=1        CASE INDEX(W$TYPE,'AREA',1); W$EXCELABLE=1        CASE INDEX(W$TYPE,'PIE',1); W$EXCELABLE=1        CASE INDEX(W$TYPE,'DOUGHNUT',1); W$EXCELABLE=1        CASE 1; W$EXCELABLE=0      END CASE*EXCEL* END OF 6-27-16      GOSUB MAKE.HTML      LOCATE WIDGET.NAME IN DB.WIDGETS<1> SETTING DB.DEFS.POS THEN        AREA = DB.WIDGET.AREA<1,DB.DEFS.POS>        IF NOT(AREA MATCHES "1N0N") THEN AREA = 1        IF AREA < 1 OR AREA > 5 THEN AREA = 1      END ELSE AREA = 1      TEMPLATE.AREA(AREA)<-1> = HTML.DIV    END  NEXT VX*  MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA,SESSION$ID:"$UG"  MATWRITE W$WEBSERVICE.DATA ON F.MVDB.UDATA,SESSION$ID:"$WEBSERVICE"; *11-30-15** Send template**PDF* Use special inner template for PDF & iframes  IF IFRAME.WIDGET.NAME # "" THEN* iframe content just contains widget-generated HTML, no extra styles, script, etc.    TEMPLATE = "<!-- AREA1 --><!-- AREA2 --><!-- AREA3 --><!-- AREA4 --><!-- AREA5 -->"  END ELSE    IF PDF.WIDGET.NAME # "" THEN      IF WIDGET.OWN.STYLE THEN* Widget HTML has <head> tag - supplies its own styles        TEMPLATE = "<!-- AREA1 --><!-- AREA2 --><!-- AREA3 --><!-- AREA4 --><!-- AREA5 -->"      END ELSE* PDF template has single <div> for all "areas"        READ TEMPLATE FROM F.WEB.FORMS, "pdf_inner_template" ELSE TEMPLATE = "pdf_inner_template not found."      END    END ELSE* normal widget template with area for header, 3 columns & footer      READ TEMPLATE FROM F.WEB.FORMS, "db_inner_template" ELSE TEMPLATE = "db_inner_template not found."    END  END  CALL SWAP(TEMPLATE,'<!-- column_style -->',"layout":DB.TEMPLATE)*  FOR AX = 1 TO 5    CALL SWAP(TEMPLATE,"<!-- AREA":AX:" -->",TEMPLATE.AREA(AX))  NEXT AX**PDF* Use special PDF html template for PDF output  IF IFRAME.WIDGET.NAME # "" THEN* iframe content just contains widget-generated HTML, no extra styles, script, etc.    MAIN.TEMPLATE = "<!-- DASHBOARD -->"  END ELSE    IF PDF.WIDGET.NAME # "" THEN      IF WIDGET.OWN.STYLE THEN* Widget HTML has <head> tag - supplies its own styles        MAIN.TEMPLATE = "<!-- DASHBOARD -->"      END ELSE* PDF template does not include print, refresh, header or footer        READ MAIN.TEMPLATE FROM F.WEB.FORMS, "pdftemplate" ELSE MAIN.TEMPLATE = "pdftemplate missing."      END    END ELSE* normal dashboard template      READ MAIN.TEMPLATE FROM F.WEB.FORMS, "dbtemplate" ELSE MAIN.TEMPLATE = "dbtemplate missing."    END  END** Insert header stuff  ADMIN.HEADER = ""  IF adminauth = 1 THEN    ADMIN.HEADER := '<li class="admin_tab"><a href="':CGI$PATH:'/MVDB.ADMIN">Admin Area</a></li>'  END  ADMIN.HEADER := '<li class="admin_tab"><a href="':CGI$PATH:'/MVDB.MAIN?logout">Log Out</a></li>'  HEADER = '<div id="dashboard_nav"><ol class="dashboard_list">'  CALL SWAP(MAIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)*11-30-15*EXECUTE "SSELECT MVDB.DEFS BY DB.SORT" CAPTURING JUNK  IF NOT(W$EMAILED.REPORT) AND NOT(W$WEBSERVICE) THEN EXECUTE "SSELECT MVDB.DEFS BY DB.SORT" CAPTURING JUNK; *11-30-15  DB.LIST = ''  LOOP    READNEXT ID ELSE EXIT    DB.LIST<-1> = ID  REPEAT  DB.CNT = DCOUNT( DB.LIST, AM )  FOR DBX = 1 TO DB.CNT    ID = DB.LIST<DBX>    MATREAD DB.ITEM FROM F.MVDB.DEFS, ID ELSE MAT DB.ITEM = ""    ADD.OK = TRUE    IF DB.USERS.ALLOWED = "ADMIN" THEN      IF NOT(adminauth) THEN ADD.OK = FALSE ;* This is only for authenticated admins    END ELSE IF DB.USERS.ALLOWED # "" THEN ;* Some user restrictions have been assigned      LOCATE userid IN DB.USERS.ALLOWED<1> SETTING POS ELSE ADD.OK = FALSE    END    IF ADD.OK = TRUE THEN      IF ID = G$CURRENT.DB THEN        HEADER := '<li class="db_active"><a href="':CGI$PATH:'/MVDB.MAIN?dbname=':ID:'">':ID:'</a></li>'      END ELSE        HEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN?dbname=':ID:'">':ID:'</a></li>'      END      HEADER := CHAR(10)    END  NEXT DBX  HEADER := ADMIN.HEADER  HEADER := '</ol></div>'  IF THEME.CSS # '' THEN THEME.CSS = '<link rel="Stylesheet" href="/db/themes/':THEME.CSS:'" media="screen" type="text/css" />'  CALL SWAP(MAIN.TEMPLATE,'<!-- HEADER -->',HEADER)  CALL SWAP(MAIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)  CALL SWAP(MAIN.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)* Insert footer stuff  FOOTER = ''*01-25-16*IF G$DRILLDOWN.MODE THEN*4-25-16*IF G$DRILLDOWN.MODE AND NOT(W$WEBSERVICE) THEN; *01-25-16*4-25-16*  IF G$DD.FROM.DB # "" THEN*4-25-16*    URLENCODE.STRING = G$DD.FROM.DB*4-25-16*    GOSUB URL.ENCODE*4-25-16*    DB.URL = NEW.STRING*4-25-16*    FOOTER = '<a href="/dbc/MVDB.MAIN?dbname=':DB.URL:'">Go Back</a><br />'*4-25-16*  END*4-25-16*END*9-23-16***9-23-16*** 4-25-16 NEW SUPPORT FOR ALLOWING BACKUP*9-23-16***9-23-16*IF DRILLDOWN.STACK<2> <> '' THEN*9-23-16*   FOOTER='<a href="/dbc/MVDB.MAIN?dbname=go_back">Go Back</a><br />'*9-23-16* END*9-23-16** END OF 4-25-16  IF WATERMARK # '' THEN    FOOTER := WATERMARK:'<br/>'  END  CALL SWAP(MAIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)*  CALL GET.SESSION.VAR(G$CURRENT.DB:"!refresh",REFRESH.RATE)  REFRESH = ""  IF REFRESH.RATE # '' THEN    RATES = "1":VM:"2":VM:"3":VM:"4":VM:"5":VM:"6":VM:"7":VM:"8":VM:"9"    RATES<2> = "15":VM:"30":VM:"60":VM:"120":VM:"300":VM:"600":VM:"900":VM:"1800":VM:"3600"    LOCATE REFRESH.RATE IN RATES<1> SETTING RPOS THEN      REFRESH = "<meta http-equiv='refresh' content='":RATES<2,RPOS>:"'>"    END  END*  IF SITE$REFRESH = 'Y' THEN    READ REFRESH.SLIDER FROM F.WEB.FORMS, 'RefreshSlider' ELSE REFRESH.SLIDER=''    CALL SWAP(MAIN.TEMPLATE,'<!-- RefreshSlider -->',REFRESH.SLIDER)    CALL SWAP(MAIN.TEMPLATE,'<!-- REFRESH_RATE -->',REFRESH.RATE)    CALL SWAP(MAIN.TEMPLATE,'<!-- REFRESH -->',REFRESH)    READ TRACK FROM F.WEB.FORMS, 'outerTrackWrapper' ELSE TRACK = ''    CALL SWAP(MAIN.TEMPLATE,'<!-- outerTrackWrapper -->',TRACK)  END  CALL SWAP(MAIN.TEMPLATE,'<!-- DASHBOARD -->',TEMPLATE)**PDF* Generate the PDF from HTML in MAIN.TEMPLATE  IF PDF$ENABLED AND W$PDFABLE AND PDF.WIDGET.NAME # "" THEN    CALL SUB.PDF.FUNC('generate', MAIN.TEMPLATE)    MAIN.TEMPLATE = ''  END*EXCEL* Generate the EXCEL from HTML in MAIN.TEMPLATE* 6-27-16  *EXCEL*  IF W$EXCELABLE AND EXCEL.WIDGET.NAME # "" THEN    CALL SUB.EXCEL.FUNC('generate', MAIN.TEMPLATE,EXCEL.WIDGET.NAME)  END* END OF 6-27-16 *EXCEL***** 9-23-16 NEW DRILLDOWN AND BACKUP LOGIC REQUIRES SAVING GLOBAL.USER.DATA**         AT COMPLETION OF PROCESS**READ DD.STACK FROM F.MVDB.UDATA, SESSION$ID:'$DD.STACK' ELSE DD.STACK=''*DD.LEVEL=DCOUNT(DD.STACK,AM)*IF NOT(DD.LEVEL) THEN DD.LEVEL=1*MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA, SESSION$ID:'$DD.':DD.LEVEL:'.GUD'*MATWRITE WIDGET.USER.DATA ON F.MVDB.UDATA, SESSION$ID:'$':WIDGET.NAME:'$DD.':DD.LEVEL:'.WUD'; * 9-23-16*  CALL WEB.SEND(MAIN.TEMPLATE)  GLOBAL.INFO(100) = 1 ;* Process completed successfully  STOP*MAKE.HTML: **  HTML = ''  MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, W$TYPE ELSE MAT WIDGET.TYPES = ""  WIDGET.OWN.STYLE = FALSE ;*PDF* set to TRUE if widget-generated HTML includes <head> tag*  BEGIN CASE    CASE WT$GROUP = "LC" OR WT$GROUP = "BAR"      IF WT$GROUP = "BAR" THEN CHART.TYPE = "BAR" ELSE        CHART.TYPE = "FCLINECOL"        MULTI.SERIES = (WT$HANDLER = "M")      END      CALL XML.ENCODE(W$BAR.VALUES,"")      CALL XML.ENCODE(W$BAR.LABELS,"")      CALL XML.ENCODE(W$BAR.XLABELS,"")      CALL XML.ENCODE(W$BAR.XMEMO,"")      CALL XML.ENCODE(W$BAR.YMEMO,"")      CALL XML.ENCODE(W$BAR.CAPTION,"")*1-26-15* W$PRINTABLE = 0    CASE WT$GROUP = "PIE"      CHART.TYPE = WT$HANDLER      CALL XML.ENCODE(W$PIE.LABELS,"")      CALL XML.ENCODE(W$PIE.VALUES,"")      CALL XML.ENCODE(W$PIE.CAPTION,"")*1-26-15* W$PRINTABLE = 0    CASE WT$GROUP = "FW"      CHART.TYPE = WT$HANDLER      FW.NAME = WT$SWF      CALL XML.ENCODE(W$FW.LOWER.LIMIT.LABEL,"")      CALL XML.ENCODE(W$FW.UPPER.LIMIT.LABEL,"")      CALL XML.ENCODE(W$FW.CAPTION,"")      CALL XML.ENCODE(W$FW.SUBCAPTION,"")      CALL XML.ENCODE(W$FW.TRENDPOINT.LABELS,"")*1-26-15* W$PRINTABLE = 0    CASE FIELD(W$TYPE,':',1) = "MAP"      CHART.TYPE = "MAP"      CHART.TYPE<2> = FIELD( W$TYPE,':',2)*1-26-15* W$PRINTABLE = 0    CASE W$TYPE = "USAMAP"      CHART.TYPE = "MAP"      CHART.TYPE<2> = "USA"*1-26-15* W$PRINTABLE = 0    CASE 1      CHART.TYPE = W$TYPE  END CASE*  CHK.VAL = OCONV("123456","MD2$,")  CURRENCY = CHK.VAL[1,1]  THOUSAND = CHK.VAL[3,1]  DECIMAL = CHK.VAL[7,1]**Make sure values are in the correct format for fusion charts*All the positions in WIDGET.INFO we're going to modify  CONV.POS.LIST = 41:AM:44:AM:45:AM:63:AM:73:AM:75:AM:61:AM:62:AM  CONV.POS.LIST := 64:AM:54:AM:58:AM:59:AM:11:AM:17:AM:18:AM:66  CONV.POS.LIST.LEN = DCOUNT(CONV.POS.LIST,AM)  FOR CONV.POS = 1 TO CONV.POS.LIST.LEN    THIS.VAL = WIDGET.INFO(CONV.POS.LIST<CONV.POS>)    IF THIS.VAL # '' THEN      AM.CNT = DCOUNT(THIS.VAL,AM)      FOR ON.AM = 1 TO AM.CNT        VM.CNT = DCOUNT(THIS.VAL<ON.AM>,VM)        FOR ON.VM = 1 TO VM.CNT          SVM.CNT = DCOUNT(THIS.VAL<ON.AM,ON.VM>,SVM)          FOR ON.SVM = 1 TO SVM.CNT            CONV.VAL = THIS.VAL<ON.AM,ON.VM,ON.SVM>            IF OCONV(CONV.VAL,"MCN") # CONV.VAL THEN ;*output formatted*Convert decimal to . and strip thousand separator              CONVERT DECIMAL:THOUSAND TO '.' IN CONV.VAL              THIS.VAL<ON.AM,ON.VM,ON.SVM> = CONV.VAL            END          NEXT ON.SVM        NEXT ON.VM      NEXT ON.AM      WIDGET.INFO(CONV.POS.LIST<CONV.POS>) = THIS.VAL    END  NEXT CONV.POS*  UPDATE.OPTS = W$CHART.OPTIONS  OPTS.DELIM = AM  GOSUB OPTS.UPDATE  W$CHART.OPTIONS = UPDATE.OPTS*  CONVERT '"' TO "'" IN W$FW.METER.VALUE.OPTS  CONVERT '"' TO "'" IN W$FW.METER.TARGET.OPTS  CONVERT '"' TO "'" IN W$FW.VALUE.OPTS  CONVERT '"' TO "'" IN W$PIE.VALUE.OPTS  CONVERT '"' TO "'" IN W$BAR.VALUE.OPTS  CONVERT '"' TO "'" IN W$BAR.LABEL.OPTS  CONVERT '"' TO "'" IN W$BAR.TREND.OPTS  CONVERT '"' TO "'" IN W$BAR.XLABEL.OPTS  CONVERT '"' TO "'" IN W$MAP.VALUE.OPTS  CONVERT '"' TO "'" IN W$MAP.RANGE.OPTS  CONVERT '"' TO "'" IN W$FW.SPARK.TREND.OPTS  CONVERT '"' TO "'" IN W$FW.DIAL.OPTS  CONVERT '"' TO "'" IN W$FW.TRENDPOINT.OPTS*  CONVERT @VM TO " " IN W$FW.METER.TARGET.OPTS  CONVERT @VM TO " " IN W$BAR.LABEL.OPTS*  CONVERT @AM TO " " IN W$FW.METER.TARGET.OPTS** Set up default widget dimensions*  BEGIN CASE    CASE W$WIDTH = 1 AND DB.TEMPLATE = 3      *CHART.WIDTH = 220      *CHART.HEIGHT = 180      CHART.WIDTH = 260      CHART.HEIGHT = 240    CASE W$WIDTH = 1      *CHART.WIDTH = 220      *CHART.HEIGHT = 180      CHART.WIDTH = 300      CHART.HEIGHT = 270    CASE W$WIDTH = 2      *CHART.WIDTH = 400      *CHART.HEIGHT = 280      CHART.WIDTH = 520      CHART.HEIGHT = 350    CASE W$WIDTH = 3 OR 1      *CHART.WIDTH = 600      *CHART.HEIGHT = 400      CHART.WIDTH = 800      CHART.HEIGHT = 530  END CASE**DEBUG='CHART.TYPE=':CHART.TYPE*DEBUG<-1>='FUSION.WIDGETS.ENABLED=':FUSION.WIDGETS.ENABLED*TEMP.VARS=CGI$VARS; CONVERT CHAR(254) TO CHAR(253) IN TEMP.VARS*DEBUG<-1>='VARS=':TEMP.VARS*TEMP.VALS=CGI$VALS; CONVERT CHAR(254) TO CHAR(253) IN TEMP.VALS*DEBUG<-1>='VALS=':TEMP.VALS*WRITE DEBUG ON F.WEB.SESSION, 'DEBUG.TEST'*  BEGIN CASE    CASE CHART.TYPE[1,2] = "FW" AND FUSION.WIDGETS.ENABLED = 0 OR (CHART.TYPE<1> = "MAP" OR FIELD(W$TYPE,':',1) = "USAMAP" AND MAPS.ENABLED = 0)      W$TEXT.DATA = "Widget type ":W$TYPE<1>:" is not enabled."      W$TYPE = "TEXT"      W$INPUT.PROMPT = ""      W$LINK.LABEL = ""      W$LINK.ICON = ""      W$LINK.ICON.TXT = ""      W$LINK.LOCATION = ""      W$LINK.URL = ""      W$LINK.UD.POS = ""      W$LINK.UD.VAL = ""      W$LINK.DD.WIDGET = ""      W$LINK.URL.OPTS = ""      W$PRINTABLE = 0      W$HIDDEN = 0      HTML = '<pre>'      HTML<-1> = W$TEXT.DATA      HTML<-1> = '</pre>'    CASE CHART.TYPE = "FWGAUGE"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 260          *CHART.HEIGHT = 130          CHART.WIDTH = 260          CHART.HEIGHT = 240        CASE W$WIDTH = 1          *CHART.WIDTH = 260          *CHART.HEIGHT = 130          CHART.WIDTH = 300          CHART.HEIGHT = 270        CASE W$WIDTH = 2          *CHART.WIDTH = 400          *CHART.HEIGHT = 200          CHART.WIDTH = 520          CHART.HEIGHT = 270        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 750          *CHART.HEIGHT = 280          CHART.WIDTH = 1015          CHART.HEIGHT = 410      END CASE      *IF W$TYPE = "HLINEARGAUGE" OR W$TYPE = "HLED" THEN CHART.HEIGHT = 80      *IF W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" THEN CHART.WIDTH = 110 ; CHART.HEIGHT = 280      *IF W$TYPE = "CYLINDER" THEN CHART.WIDTH = 140      *IF W$TYPE = "BULB" THEN CHART.WIDTH = 110 ; CHART.HEIGHT = 130      IF W$TYPE = "HLINEARGAUGE" OR W$TYPE = "HLED" THEN CHART.HEIGHT = 80      IF W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" THEN CHART.WIDTH = 110      IF W$TYPE = "CYLINDER" THEN CHART.WIDTH = 140      IF W$TYPE = "BULB" THEN CHART.WIDTH = 110 ; CHART.HEIGHT = 130      IF W$TYPE = "ANGULARGAUGE" THEN        BEGIN CASE          CASE W$WIDTH = 1            CHART.HEIGHT = 130          CASE W$WIDTH = 2            CHART.HEIGHT = 200        END CASE      END      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML*      GOSUB TICKMARK.OPTIONS ;* Add chart options to support tickmarks*      IF W$TYPE = "THERMOMETER" AND W$FW.THERMOMETER.COLOR # "" THEN        LOCATE W$FW.THERMOMETER.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          W$FW.THERMOMETER.COLOR = NAME.COLOR<2,CPOS>        END        W$CHART.OPTIONS<-1> = "gaugeFillColor='":W$FW.THERMOMETER.COLOR:"'"      END* LJB 7-10-10 Removed DD restriction for angular and linear gauge charts. Not sure why it* was here in the first place*    IF W$TYPE = "HLED" OR W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" OR W$TYPE = "CYLINDER" OR W$TYPE = "BULB" THEN      IF W$FW.DD.WIDGET # "" THEN        FW.WIDGET.POS = 1        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          W$CHART.OPTIONS<-1> = " clickURL='":NEW.STRING:"'"        END      END*    END      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END*      PDATA = '<colorRange>'      COLOR.RANGE.OPTS = W$FW.COLOR.RANGE<4>      CONVERT '"' TO "'" IN COLOR.RANGE.OPTS      FOR PX = 1 TO DCOUNT( W$FW.COLOR.RANGE<1>, VM )        USE.COLOR = W$FW.COLOR.RANGE<3,PX>        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = "#FFFFFF" ;* White        END        CONVERT "#" TO "" IN USE.COLOR        UPDATE.OPTS = COLOR.RANGE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        COLOR.RANGE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<color minValue='":W$FW.COLOR.RANGE<1,PX>:"' maxValue='":W$FW.COLOR.RANGE<2,PX>:"' code='":USE.COLOR:"' ":COLOR.RANGE.OPTS<1,PX>:" />"      NEXT PX      PDATA := '</colorRange>'      METER.STYLE = 0      IF W$TYPE = "HLED" OR W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" OR W$TYPE = "CYLINDER" OR W$TYPE = "BULB" THEN        PDATA := '[METER_VALUE]'        METER.STYLE = 1      END ELSE        IF W$TYPE = "ANGULARGAUGE" THEN          PDATA := '<dials>'          DNODE = "dial"        END ELSE          PDATA := '<pointers>'          DNODE = 'pointer'        END        FOR PX = 1 TO DCOUNT( W$FW.DIAL.VALUES<1>, VM )          UPDATE.OPTS = W$FW.DIAL.OPTS<1,PX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.DIAL.OPTS<1,PX> = UPDATE.OPTS          PDATA := "<":DNODE:" value='":W$FW.DIAL.VALUES<1,PX>:"' ":W$FW.DIAL.OPTS<1,PX>          FW.WIDGET.POS = PX          GOSUB MAKE.FW.DD.URL          IF URL # "" THEN            URLENCODE.STRING = URL            GOSUB URL.ENCODE ;* Encode the entire URL            PDATA := " link='":NEW.STRING:"'"          END          PDATA := " />"        NEXT PX        PDATA := '</':DNODE:'s>'        PDATA := '<trendpoints>'        FOR PX = 1 TO DCOUNT( W$FW.TRENDPOINT.VALUES<1>, VM )          UPDATE.OPTS = W$FW.TRENDPOINT.OPTS<1,PX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.TRENDPOINT.OPTS<1,PX> = UPDATE.OPTS          PDATA := "<point startValue='":W$FW.TRENDPOINT.VALUES<1,PX>:"' "          IF W$FW.TRENDPOINT.VALUES<2,PX> # "" THEN PDATA := "endValue='":W$FW.TRENDPOINT.VALUES<2,PX>:"' "          PDATA := "displayValue='":W$FW.TRENDPOINT.LABELS<1,PX>:"' ":W$FW.TRENDPOINT.OPTS<1,PX>:" />"        NEXT PX        PDATA := '</trendpoints>'      END      CALL SWAP(SXML,'[CHART.PALETTE]',W$FW.CHART.PALETTE)      CALL SWAP(SXML,'[UPPER.LIMIT]',W$FW.UPPER.LIMIT)      CALL SWAP(SXML,'[LOWER.LIMIT]',W$FW.LOWER.LIMIT)      CALL SWAP(SXML,'[UPPER.LIMIT.DISPLAY]',W$FW.UPPER.LIMIT.LABEL)      CALL SWAP(SXML,'[LOWER.LIMIT.DISPLAY]',W$FW.LOWER.LIMIT.LABEL)      CALL SWAP(SXML,'[NUMBER.PREFIX]',W$FW.NUMBER.PREFIX)      CALL SWAP(SXML,'[NUMBER.SUFFIX]',W$FW.NUMBER.SUFFIX)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)*      IF METER.STYLE THEN        HTML = ''        MASTER.SXML = SXML        MASTER.PDATA = PDATA        MASTER.FW.TEMPLATE = FW.TEMPLATE        VAL.CNT = DCOUNT( W$FW.METER.VALUE<1>, @VM )        FOR MVX = 1 TO VAL.CNT          UPDATE.OPTS = W$FW.METER.VALUE.OPTS<1,MVX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.METER.VALUE.OPTS<1,MVX> = UPDATE.OPTS          VALDATA = '<value ':W$FW.METER.VALUE.OPTS<1,MVX>' >':W$FW.METER.VALUE<1,MVX>:'</value>'          CALL SWAP(PDATA,'[METER_VALUE]',VALDATA)          CALL SWAP(SXML,'[CHART.DATA]',PDATA)          CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX:'_':MVX)          CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)          HTML := FW.TEMPLATE          SXML = MASTER.SXML          PDATA = MASTER.PDATA          FW.TEMPLATE = MASTER.FW.TEMPLATE        NEXT MVX*        IF VAL.CNT > 1 THEN          IF W$TYPE = "FWBULB" THEN            SHRINK.MLT = 1            FOR NN = 2 TO VAL.CNT              SHRINK.MLT -= .2            NEXT NN            IF SHRINK.MLT < .25 THEN SHRINK.MLT = .25            CHART.WIDTH = INT( CHART.WIDTH * SHRINK.MLT )            CHART.HEIGHT = INT( CHART.WIDTH * SHRINK.MLT )          END        END      END ELSE        CALL SWAP(SXML,'[CHART.DATA]',PDATA)        CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)        CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)        HTML = FW.TEMPLATE      END    CASE CHART.TYPE = "FWBULLET"      IF W$TYPE = "HBULLET" THEN        BEGIN CASE          CASE W$WIDTH = 1 AND DB.TEMPLATE = 3            *CHART.WIDTH = 220            *CHART.HEIGHT = 60            CHART.WIDTH = 260            CHART.HEIGHT = 60          CASE W$WIDTH = 1            *CHART.WIDTH = 220            *CHART.HEIGHT = 60            CHART.WIDTH = 300            CHART.HEIGHT = 60          CASE W$WIDTH = 2            *CHART.WIDTH = 400            *CHART.HEIGHT = 60            CHART.WIDTH = 520            CHART.HEIGHT = 60          CASE W$WIDTH = 3 OR 1            *CHART.WIDTH = 750            *CHART.HEIGHT = 60            CHART.WIDTH = 1015            CHART.HEIGHT = 60        END CASE      END ELSE        BEGIN CASE          CASE W$WIDTH = 1 AND DB.TEMPLATE = 3            *CHART.WIDTH = 110            *CHART.HEIGHT = 180            CHART.WIDTH = 110            CHART.HEIGHT = 240          CASE W$WIDTH = 1            *CHART.WIDTH = 110            *CHART.HEIGHT = 180            CHART.WIDTH = 110            CHART.HEIGHT = 270          CASE W$WIDTH = 2            *CHART.WIDTH = 110            *CHART.HEIGHT = 280            CHART.WIDTH = 110            CHART.HEIGHT = 300          CASE W$WIDTH = 3 OR 1            *CHART.WIDTH = 110            *CHART.HEIGHT = 400            CHART.WIDTH = 110            CHART.HEIGHT = 410        END CASE      END      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML*      GOSUB TICKMARK.OPTIONS ;* Add chart options to support tickmarks*      IF W$FW.BC.PLOT.COLOR # "" THEN        USE.COLOR = W$FW.BC.PLOT.COLOR        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = ""        END        IF USE.COLOR # "" THEN W$CHART.OPTIONS<-1> = "plotFillColor='":USE.COLOR:'"'      END      IF W$FW.BC.TARGET.COLOR # "" THEN        USE.COLOR = W$FW.BC.TARGET.COLOR        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = ""        END        IF USE.COLOR # "" THEN W$CHART.OPTIONS<-1> = "targetColor='":USE.COLOR:'"'      END*      IF W$FW.DD.WIDGET # "" THEN        FW.WIDGET.POS = 1        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          W$CHART.OPTIONS<-1> = " clickURL='":NEW.STRING:"'"        END      END*      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END*      PDATA = '<colorRange>'      COLOR.RANGE.OPTS = W$FW.COLOR.RANGE<4>      UPDATE.OPTS = COLOR.RANGE.OPTS      OPTS.DELIM = ' '      GOSUB OPTS.UPDATE      COLOR.RANGE.OPTS = UPDATE.OPTS      FOR PX = 1 TO DCOUNT( W$FW.COLOR.RANGE<1>, VM )        USE.COLOR = W$FW.COLOR.RANGE<3,PX>        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = "#FFFFFF" ;* White        END        PDATA := "<color minValue='":W$FW.COLOR.RANGE<1,PX>:"' maxValue='":W$FW.COLOR.RANGE<2,PX>:"' code='":USE.COLOR:"' ":COLOR.RANGE.OPTS<1,PX>:" />"      NEXT PX      PDATA := '</colorRange>'      PDATA := '<value ':W$FW.METER.VALUE.OPTS:' >':W$FW.METER.VALUE:'</value>'      PDATA := '<target ':W$FW.METER.TARGET.OPTS:' >':W$FW.METER.TARGET:'</target>'      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CAPTION]',W$FW.CAPTION)      CALL SWAP(SXML,'[SUBCAPTION]',W$FW.SUBCAPTION)      CALL SWAP(SXML,'[CHART.PALETTE]',W$FW.CHART.PALETTE)      CALL SWAP(SXML,'[UPPER.LIMIT]',W$FW.UPPER.LIMIT)      CALL SWAP(SXML,'[LOWER.LIMIT]',W$FW.LOWER.LIMIT)      CALL SWAP(SXML,'[NUMBER.PREFIX]',W$FW.NUMBER.PREFIX)      CALL SWAP(SXML,'[NUMBER.SUFFIX]',W$FW.NUMBER.SUFFIX)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = FW.TEMPLATE    CASE CHART.TYPE = "FWSPARK"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 220          *CHART.HEIGHT = 40          CHART.WIDTH = 260          CHART.HEIGHT = 40        CASE W$WIDTH = 1          *CHART.WIDTH = 220          *CHART.HEIGHT = 40          CHART.WIDTH = 300          CHART.HEIGHT = 40        CASE W$WIDTH = 2          *CHART.WIDTH = 400          *CHART.HEIGHT = 40          CHART.WIDTH = 520          CHART.HEIGHT = 40        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 750          *CHART.HEIGHT = 40          CHART.WIDTH = 1015          CHART.HEIGHT = 40      END CASE      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML*      IF W$FW.DD.WIDGET # "" THEN        FW.WIDGET.POS = 1        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          W$CHART.OPTIONS<-1> = " clickURL='":NEW.STRING:"'"        END      END      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END*      PDATA = '<dataset>'      FOR PX = 1 TO DCOUNT( W$FW.VALUES<1>, VM )        UPDATE.OPTS = W$FW.VALUE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        W$FW.VALUE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<set value='":W$FW.VALUES<1,PX>:"' ":W$FW.VALUE.OPTS<1,PX>:" />"      NEXT PX      PDATA := '</dataset>'      IF W$FW.SPARK.TREND.BEG # "" THEN        PDATA := '<trendlines>'        FOR TLX = 1 TO DCOUNT( W$FW.SPARK.TREND.BEG, VM )          UPDATE.OPTS = W$FW.SPARK.TREND.OPTS<1,TLX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.SPARK.TREND.OPTS<1,TLX> = UPDATE.OPTS          PDATA := "<line startValue='":W$FW.SPARK.TREND.BEG<1,TLX>:"' endValue='":W$FW.SPARK.TREND.END<1,TLX>:"' ":W$FW.SPARK.TREND.OPTS<1,TLX>:" />"        NEXT TLX        PDATA := '</trendlines>'      END      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CAPTION]',W$FW.CAPTION)      CALL SWAP(SXML,'[SUBCAPTION]',W$FW.SUBCAPTION)      CALL SWAP(SXML,'[CHART.PALETTE]',W$FW.CHART.PALETTE)      CALL SWAP(SXML,'[UPPER.LIMIT]',W$FW.UPPER.LIMIT)      CALL SWAP(SXML,'[LOWER.LIMIT]',W$FW.LOWER.LIMIT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = FW.TEMPLATE    CASE CHART.TYPE = "FWFP"      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END      COLOR.LIST = W$FW.COLORS      GOSUB APPLY.COLOR.OPTS*      PDATA = ''      FOR PX = 1 TO DCOUNT( W$FW.LABELS<1>, VM )        UPDATE.OPTS = W$FW.VALUE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        W$FW.VALUE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<set label='":W$FW.LABELS<1,PX>:"' value='":W$FW.VALUES<1,PX>:"' color='":COLOR.ARRAY<1,PX>:"' ":W$FW.VALUE.OPTS<1,PX>        FW.WIDGET.POS = PX        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          PDATA := " link='":NEW.STRING:"'"        END        PDATA := " />"      NEXT PX      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CAPTION]',W$FW.CAPTION)      CALL SWAP(SXML,'[SUBCAPTION]',W$FW.SUBCAPTION)      CALL SWAP(SXML,'[NUMBER.PREFIX]',W$FW.NUMBER.PREFIX)      CALL SWAP(SXML,'[NUMBER.SUFFIX]',W$FW.NUMBER.SUFFIX)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = FW.TEMPLATE    CASE CHART.TYPE = "FCPIE"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 260          CHART.HEIGHT = 240        CASE W$WIDTH = 1          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 300          CHART.HEIGHT = 270        CASE W$WIDTH = 2          *CHART.WIDTH = 420          *CHART.HEIGHT = 240          CHART.WIDTH = 520          CHART.HEIGHT = 365        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 730          *CHART.HEIGHT = 320          CHART.WIDTH = 800          CHART.HEIGHT = 550      END CASE      PT.NAME = WT$SWF      PS.NAME = W$TYPE:".SETTINGS"      IF W$CHART.HEIGHT # "" THEN CHART.HEIGHT = W$CHART.HEIGHT      IF W$TYPE = "FC3DPIE" THEN        CHART.HEIGHT = INT(CHART.HEIGHT*.75)      END      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ PIE.TEMPLATE FROM F.WEB.FORMS, "FCF_template.html" ELSE PIE.TEMPLATE = "FCF_template.html not found"      PT.NAME = OCONV(PT.NAME,'MCL')      CALL SWAP(PIE.TEMPLATE,'[FCF_MODULE]',PT.NAME)*      READ SXML FROM F.MVDB.CONTROL, PS.NAME ELSE SXML = ''      CONVERT AM TO "" IN SXML      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'graph'        GOSUB APPLY.XML.OPTS      END      COLOR.LIST = W$PIE.COLORS      GOSUB APPLY.COLOR.OPTS      PDATA = ''      FOR PX = 1 TO DCOUNT( W$PIE.LABELS<1>, VM )        UPDATE.OPTS = W$PIE.VALUE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        W$PIE.VALUE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<set label='":W$PIE.LABELS<1,PX>:"' color='":COLOR.ARRAY<1,PX>:"' ":W$PIE.VALUE.OPTS<1,PX>:" value='":W$PIE.VALUES<1,PX>:"'"        FW.WIDGET.POS = PX        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          PDATA := " link='":NEW.STRING:"'"        END        PDATA := ' />'      NEXT PX      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CHART.TITLE]',W$PIE.CAPTION)      RADIUS = INT(CHART.WIDTH/2)-INT(CHART.WIDTH*.15)      CALL SWAP(SXML,'[RADIUS]',RADIUS)      CALL SWAP(PIE.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(PIE.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(PIE.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(PIE.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = PIE.TEMPLATE    CASE CHART.TYPE = "FCLINECOL"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 260          CHART.HEIGHT = 240        CASE W$WIDTH = 1          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 300          CHART.HEIGHT = 270        CASE W$WIDTH = 2          *CHART.WIDTH = 420          *CHART.HEIGHT = 240          CHART.WIDTH = 520          CHART.HEIGHT = 300        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 730          *CHART.HEIGHT = 320          CHART.WIDTH = 1015          CHART.HEIGHT = 425      END CASE      IF W$CHART.HEIGHT # "" THEN CHART.HEIGHT = W$CHART.HEIGHT      BT.NAME = WT$SWF      BS.NAME = W$TYPE:".SETTINGS"      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      COLOR.LIST = W$BAR.COLORS      GOSUB APPLY.COLOR.OPTS*      READ BAR.TEMPLATE FROM F.WEB.FORMS, "FCF_template.html" ELSE BAR.TEMPLATE = "FCF_template.html not found"      BT.NAME = OCONV(BT.NAME,'MCL')      CALL SWAP(BAR.TEMPLATE,'[FCF_MODULE]',BT.NAME)*      READ SXML FROM F.MVDB.CONTROL, BS.NAME ELSE SXML = ''      CONVERT AM TO "" IN SXML      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'graph'        GOSUB APPLY.XML.OPTS      END      PDATA = ''      IF MULTI.SERIES THEN        PDATA := '<categories>'        FOR PX = 1 TO DCOUNT( W$BAR.XLABELS<1>, VM )          PDATA := "<category label='":W$BAR.XLABELS<1,PX>:"' ":W$BAR.XLABEL.OPTS<1,PX>:" />"        NEXT PX        PDATA := '</categories>'        FOR PX = 1 TO DCOUNT( W$BAR.LABELS,AM)          PDATA := "<dataset seriesname='":W$BAR.LABELS<PX>:"' color='":COLOR.ARRAY<1,PX>:"' ":W$BAR.LABEL.OPTS<PX>:" >"          FOR PXV = 1 TO DCOUNT( W$BAR.VALUES<PX>,VM)            UPDATE.OPTS = W$BAR.VALUE.OPTS<PX,PXV>            OPTS.DELIM = ' '            GOSUB OPTS.UPDATE            W$BAR.VALUE.OPTS<PX,PXV> = UPDATE.OPTS            MS.VALUE=W$BAR.VALUES<PX,PXV>;  *ZUMASYS 1-5-15            MS.LABEL=W$BAR.XLABELS<1,PXV>; *ZUMASYS 1-5-15* 7-29-15 CHANGE ANY &lt;br&gt;'s to spaces            LOOP              BR.POS=INDEX(MS.LABEL,'&lt;br&gt;',1)            UNTIL NOT(BR.POS) DO              MS.LABEL=MS.LABEL[1,BR.POS-1]:' ':(MS.LABEL[BR.POS+10,9999])            REPEAT* END OF 7-29-15            MS.SERIES=W$BAR.LABELS<PX>;    *ZUMASYS 3-15-15*ZUMASYS 1-5-15*          PDATA := "<set value='":W$BAR.VALUES<PX,PXV>:"' ":W$BAR.VALUE.OPTS<PX,PXV>            PDATA := "<set value='":MS.VALUE:"' ":W$BAR.VALUE.OPTS<PX,PXV>; *ZUMASYS 1-5-15            FW.WIDGET.POS = PX            GOSUB MAKE.FW.DD.URL            IF URL # "" THEN              URLENCODE.STRING = URL              GOSUB URL.ENCODE ;* Encode the entire URL              PDATA := " link='":NEW.STRING:"'"            END            PDATA := ' />'          NEXT PXV          PDATA := '</dataset>'        NEXT PX      END ELSE        FOR PX = 1 TO DCOUNT( W$BAR.XLABELS<1>, VM )          IF INDEX(W$BAR.VALUES<1,PX>,'-',1) THEN            SIGN.MINUS = 1          END ELSE SIGN.MINUS = 0* 3-4-15 ZUMASYS - SUPPORT DECIMALS IN BAR.VALUES          THIS.BAR.VALUES=W$BAR.VALUES<1,PX>          IF INDEX(THIS.BAR.VALUES,'.',1) THEN            THIS.BAR.VALUES.1=OCONV(FIELD(THIS.BAR.VALUES,'.',1),'MCN')            THIS.BAR.VALUES.2=OCONV(FIELD(THIS.BAR.VALUES,'.',2),'MCN')            W$BAR.VALUES<1,PX>=THIS.BAR.VALUES.1:'.':THIS.BAR.VALUES.2          END ELSE            W$BAR.VALUES<1,PX> = OCONV(THIS.BAR.VALUES, 'MCN' )          END* END OF 3-4-15 ZUMASYS          IF SIGN.MINUS THEN W$BAR.VALUES<1,PX> = '-':W$BAR.VALUES<1,PX>          PDATA := "<set label='":W$BAR.XLABELS<1,PX>:"' value='":W$BAR.VALUES<1,PX>+0:"' "          IF NOT(INDEX(W$BAR.VALUE.OPTS<1,PX>,'color=',1)) THEN* Color setting is not being overridden by the W$BAR.VALUE.OPTS info            PDATA := "color='":COLOR.ARRAY<1,1>:"' "          END          UPDATE.OPTS = W$BAR.VALUE.OPTS<1,PX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$BAR.VALUE.OPTS<1,PX> = UPDATE.OPTS          PDATA := ' ':W$BAR.VALUE.OPTS<1,PX>          FW.WIDGET.POS = PX          GOSUB MAKE.FW.DD.URL          IF URL # "" THEN            URLENCODE.STRING = URL            GOSUB URL.ENCODE ;* Encode the entire URL            PDATA := " link='":NEW.STRING:"'"          END          PDATA := ' />'        NEXT PX      END      IF W$BAR.TREND.BEG # "" THEN        PDATA := '<trendLines>'        FOR TLX = 1 TO DCOUNT( W$BAR.TREND.BEG<1>, VM )          PDATA := "<line startValue='":W$BAR.TREND.BEG<1,TLX>:"' "          IF W$BAR.TREND.END<1,TLX> # "" THEN PDATA := "endValue='":W$BAR.TREND.END<1,TLX>:"' "          UPDATE.OPTS = W$BAR.TREND.OPTS<1,TLX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$BAR.TREND.OPTS<1,TLX> = UPDATE.OPTS          PDATA := W$BAR.TREND.OPTS<1,TLX>          PDATA := " />"        NEXT TLX        PDATA := '</trendLines>'      END      CONVERT '"' TO "'" IN PDATA      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CHART.TITLE]',W$BAR.CAPTION)      CALL SWAP(SXML,'[YMEMO]',W$BAR.YMEMO<1>)      CALL SWAP(SXML,'[XMEMO]',W$BAR.XMEMO<1>)      CALL SWAP(BAR.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(BAR.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(BAR.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(BAR.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = BAR.TEMPLATE    CASE CHART.TYPE<1> = "MAP" OR FIELD(W$TYPE,':',1) = "USAMAP"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          NULL        CASE W$WIDTH = 1          NULL        CASE W$WIDTH = 2          *CHART.WIDTH = 420          *CHART.HEIGHT = 240          CHART.WIDTH = 520          CHART.HEIGHT = 300        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 730          *CHART.HEIGHT = 320          CHART.WIDTH = 1015          CHART.HEIGHT = 425      END CASE      IF W$CHART.HEIGHT # "" THEN CHART.HEIGHT = W$CHART.HEIGHT      CALL XML.ENCODE(W$MAP.RANGE.NAME,"")      IF FIELD(W$TYPE,':',1) = "USAMAP" THEN        STATE.MAP = FIELD( W$TYPE,':',2)        IF STATE.MAP # "" THEN* This is a drill-down to a specific state detail. We need to match the* map name with the selected state.* selected state.          READ STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ""          CONVERT "," TO @VM IN STATE.NAMES          LOCATE STATE.MAP IN STATE.NAMES<1> SETTING STATE.POS THEN            MAP.NAME = STATE.NAMES<2,STATE.POS>          END ELSE            MAP.NAME = "USA"            W$TITLE := " - Error: Invalid State: ":STATE.MAP          END        END ELSE          MAP.NAME = "USA"        END      END ELSE        MAP.NAME = CHART.TYPE<2>      END      READ MAP.LIST FROM F.MVDB.CONTROL, 'FCMAP.NAMES' ELSE MAP.LIST = ""      LOCATE MAP.NAME IN MAP.LIST SETTING DUM THEN* This is a valid map name        MS.NAME = MAP.NAME:".SETTINGS"        READ SXML FROM F.MVDB.CONTROL, MS.NAME ELSE SXML = ''        IF SXML = "" THEN          MS.NAME = "FCMAP.SETTINGS"          READ SXML FROM F.MVDB.CONTROL, MS.NAME ELSE SXML = ''        END        MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)        MOVIE.WIDTH = CHART.WIDTH + 75*        READ MAP.TEMPLATE FROM F.WEB.FORMS, "FCMAP_template.html" ELSE MAP.TEMPLATE = "FMAP_template.html not found"        CALL SWAP(MAP.TEMPLATE,'[FCMAP_MODULE]',MAP.NAME)*        CONVERT AM TO "" IN SXML        IF W$CHART.OPTIONS # "" THEN          XML.OPTS = W$CHART.OPTIONS          NODE.NAME = 'map'          GOSUB APPLY.XML.OPTS        END*        MAPDATA = '<colorRange>'        FOR CX = 1 TO DCOUNT( W$MAP.RANGE.NAME<1>, @VM )          THIS.COLOR = W$MAP.RANGE.COLOR<1,CX>          LOCATE THIS.COLOR IN NAME.COLOR<1> SETTING CPOS THEN            USE.COLOR = NAME.COLOR<2,CPOS>          END ELSE USE.COLOR = THIS.COLOR          UPDATE.OPTS = W$MAP.RANGE.OPTS<1,CX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$MAP.RANGE.OPTS<1,CX> = UPDATE.OPTS          MAPDATA := "<color minValue='":W$MAP.RANGE.LOW<1,CX>:"' maxValue='":W$MAP.RANGE.HIGH<1,CX>:"' displayValue='":W$MAP.RANGE.NAME<1,CX>:"' color='":USE.COLOR          MAPDATA := "' ":W$MAP.RANGE.OPTS<1,CX>:" />"        NEXT CX        MAPDATA := '</colorRange>'        MAPDATA := '<data>'        FOR MX = 1 TO DCOUNT( W$MAP.IDS<1>, @VM )          IF W$MAP.VALUE.DD<1,MX> = 1 THEN            MAP.LINK = CGI$PATH:"/MVDB.MAIN?udview=":WIDGET.NAME:"&udpos1=1&udval1=":W$MAP.IDS<1,MX>:"&mapdd"          END ELSE IF W$MAP.VALUE.LINK<1,MX> # "" THEN            MAP.LINK = W$MAP.VALUE.LINK<1,MX>            IF W$MAP.LINK.MODE<1,MX> = "N" THEN MAP.LINK = "n-":MAP.LINK          END ELSE            IF W$FW.DD.WIDGET<1,MX> # "" THEN              FW.WIDGET.POS = MX              GOSUB MAKE.FW.DD.URL              MAP.LINK = URL            END ELSE              MAP.LINK = ""            END          END          IF MAP.LINK # "" THEN            URLENCODE.STRING = MAP.LINK            GOSUB URL.ENCODE            MAP.LINK = NEW.STRING            MAP.LINK = "link='":MAP.LINK:"' "          END          TOOLTEXT = W$MAP.VALUE.TOOLTEXT<1,MX>          CALL XML.ENCODE(TOOLTEXT,'')          UPDATE.OPTS = W$MAP.VALUE.OPTS<1,MX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$MAP.VALUE.OPTS<1,MX> = UPDATE.OPTS          MAPDATA := "<entity id='":W$MAP.IDS<1,MX>:"' value='":W$MAP.VALUES<1,MX>:"' ":W$MAP.VALUE.OPTS<1,MX>:" toolText='":TOOLTEXT:"' ":MAP.LINK:"/>"        NEXT MX        MAPDATA := '</data>'        CONVERT '"' TO "'" IN MAPDATA        CALL SWAP(SXML,'[CHART.DATA]',MAPDATA)        CALL SWAP(MAP.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)        CALL SWAP(MAP.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)        CALL SWAP(MAP.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)        CALL SWAP(MAP.TEMPLATE,'<!-- CHARTXML -->',SXML)        HTML = MAP.TEMPLATE      END ELSE        HTML = "Map name '":MAP.NAME:"' not found in MVDB.CONTROL, FCMAP.NAMES"      END    CASE W$TYPE = "TABLE"      HTML<-1> = '<table class="gridWidget" width="100%" >'      HTML<-1> = '<thead>'      HTML<-1> = '<tr>'      TABLE.COLS = DCOUNT( W$TABLE.COL.LABELS<1>, VM )      FOR CHX = 1 TO TABLE.COLS        IF W$TABLE.COL.JUST<1,CHX> # "" THEN          ALIGN = ' align="':W$TABLE.COL.JUST<1,CHX>:'"'        END ELSE ALIGN = ""        LABEL = W$TABLE.COL.LABELS<1,CHX>        IF LABEL = '' THEN LABEL = '&nbsp;'        HTML<-1> = '<th':ALIGN:' >':LABEL:'</th>'      NEXT CHX      HTML<-1> = '</tr>'      HTML<-1> = '</thead>'      HTML<-1> = '<tbody>'      TABLE.ROWS = DCOUNT( W$TABLE.DATA, AM )      FOR TRX = 1 TO TABLE.ROWS        HTML<-1> = '<tr>'        THIS.ROW = W$TABLE.DATA<TRX>        FOR TRC = 1 TO TABLE.COLS          IF W$TABLE.COL.JUST<1,TRC> # "" THEN            ALIGN = ' align="':W$TABLE.COL.JUST<1,TRC>:'"'          END ELSE ALIGN = ""          VALUE = THIS.ROW<1,TRC>          IF VALUE = '' THEN VALUE = '&nbsp;'          THIS.COL = '<td':ALIGN:'>':VALUE:'</td>'          HTML<-1> = THIS.COL        NEXT TRC        HTML<-1> = '</tr>'      NEXT TRX      HTML<-1> = '</tbody>'      HTML<-1> = '<tfoot>'      HTML<-1> = '<tr>'      FOR CHX = 1 TO TABLE.COLS        IF W$TABLE.COL.JUST<1,CHX> # "" THEN          ALIGN = ' align="':W$TABLE.COL.JUST<1,CHX>:'"'        END ELSE ALIGN = ""        VALUE = W$TABLE.TOTALS<1,CHX>        IF VALUE = '' THEN VALUE = '&nbsp;'        HTML<-1> = '<td':ALIGN:'>':VALUE:'</td>'      NEXT CHX      HTML<-1> = '</tr>'      HTML<-1> = '</tfoot>'      HTML<-1> = '</table>'    CASE W$TYPE = "TEXT"      HTML = '<pre>'      HTML<-1> = W$TEXT.DATA      HTML<-1> = '</pre>'    CASE W$TYPE = "HTML"      HTML = W$HTML.DATA*PDF* Check if widget-generated HTML includes a <head> tag, which we interpret as having its own styling      IF INDEX(HTML,'<head>',1)+INDEX(HTML,'<HEAD>',1) THEN WIDGET.OWN.STYLE = TRUE      IF WIDGET.OWN.STYLE AND IFRAME.WIDGET.NAME = "" AND PDF.WIDGET.NAME = "" THEN* Not rendering PDF or returning iframe content - change* widget content to iframe so styles render properly.        CALL REBUILD.URL.STRING(IFRAME.URL.STRING)        URLENCODE.STRING = WIDGET.NAME        GOSUB URL.ENCODE        IFRAME.URL.STRING = '/dbc/MVDB.MAIN?iframewidget=':NEW.STRING:'&':IFRAME.URL.STRING ;* stash widget name in URL string so we know which widget to use for iframe content        HTML = '<iframe src="':IFRAME.URL.STRING:'" width="100%" style="height: 100vh;">':WIDGET.NAME:'</iframe>'      END    CASE 1      HTML = "INVALID TYPE ":W$TYPE  END CASE*  IF IFRAME.WIDGET.NAME # "" THEN* Returning iframe content - no widget styling needed    HTML.DIV = '<!-- WIDGETDATA -->'  END ELSE    IF WIDGET.OWN.STYLE AND PDF.WIDGET.NAME # "" THEN* Render PDF from widget HTML that has a <head> tag - no widget styling needed      HTML.DIV = '<!-- WIDGETDATA -->'    END ELSE* normal widget styles      HTML.DIV = WIDGET.DIV    END  END*  Q1.LINKS = ''  Q2.LINKS = ''  Q3.LINKS = ''  Q4.LINKS = ''  Q5.LINKS = ''** Add source code edit link for administrative user*** FIX 6-1-16 ADD A GO BACK IN ICON LIST*  NEXT.LINK.POS = DCOUNT(W$LINK.LABEL<1>,@VM)  NEXT.LINK.POS2 = DCOUNT(W$LINK.ICON<1>,@VM)  IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS=NEXT.LINK.POS2  READ DD.STACK FROM F.MVDB.UDATA, SESSION$ID:'$DD.STACK' ELSE DD.STACK=''  MAX.DD.STACK=DCOUNT(DD.STACK,AM)  IF MAX.DD.STACK > 2 THEN    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = 'arrow_left.png'    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Go Back"    W$LINK.URL<1,NEXT.LINK.POS> = "javascript:history.back()"; * 9-23-16 *    W$LINK.LOCATION<1,NEXT.LINK.POS> = "C"  END* END FIX 6-1-16  IF adminauth = 1 THEN* 6-1-16 *  NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )* 6-1-16 *  NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )* 6-1-16 *  IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "script_edit.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Edit BASIC Source"    IF WDEBUG.MODE OR WFAIL.MODE THEN      USE.SUBNAME = GLOBAL.INFO(91) ;* Original subroutine name    END ELSE USE.SUBNAME = SUBNAME    URLENCODE.STRING = USE.SUBNAME    GOSUB URL.ENCODE    URL.SUBNAME = NEW.STRING    W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=":URL.SUBNAME    W$LINK.URL.OPTS<1,NEXT.LINK.POS> = 'target="ED_MVDB.SUBS_':URL.SUBNAME:'"'    W$LINK.LOCATION<1,NEXT.LINK.POS> = "C"** Add debug widget link for administrative user*    IF NOT(WFAIL.MODE) THEN      NEXT.LINK.POS += 1      W$LINK.ICON<1,NEXT.LINK.POS> = "information.png" ;* Change this to a real debug icon      IF WDEBUG.MODE THEN        W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Normal Mode"      END ELSE        W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Debug Mode"      END      URLENCODE.STRING = WIDGET.NAME      GOSUB URL.ENCODE      IF WDEBUG.MODE THEN        W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?undebug_widget=":NEW.STRING      END ELSE        W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?debug_widget=":NEW.STRING      END      W$LINK.LOCATION<1,NEXT.LINK.POS> = "C"    END  END  IF W$PRINTABLE = 1 THEN    NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )    NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )    IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "printer.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Print"    W$LINK.LABEL<1,NEXT.LINK.POS> = "Print"    W$LINK.URL<1,NEXT.LINK.POS> = "#"*W$LINK.URL.OPTS<1,NEXT.LINK.POS> = 'onClick="printThis(this);"'    W$LINK.URL.OPTS<1,NEXT.LINK.POS> = 'class="DansClass"'    W$LINK.LOCATION<1,NEXT.LINK.POS> = 'C'  END**PDF* If PDF generation is enabled, and supported for this widget, add a PDF icon to the control menu  IF PDF$ENABLED AND W$PDFABLE AND PDF.WIDGET.NAME = "" THEN    NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )    NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )    IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "page_white_acrobat.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Generate PDF"    W$LINK.LABEL<1,NEXT.LINK.POS> = "Generate PDF"    CALL REBUILD.URL.STRING(CURRENT.URL.STRING)    PDF.URL.STRING=CURRENT.URL.STRING    URLENCODE.STRING = WIDGET.NAME    GOSUB URL.ENCODE    PDF.URL.STRING := '&generatepdf=':NEW.STRING ;* stash widget name in URL string so we know which widget to render as PDF    W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?":PDF.URL.STRING    W$LINK.LOCATION<1,NEXT.LINK.POS> = 'C'  END** 6-27-16 *EXCEL* If EXCEL generation is supported for this widget, add a EXCEL icon to the control menu  IF W$EXCELABLE AND EXCEL.WIDGET.NAME = '' THEN    NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )    NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )    IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "page_white_excel.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Generate Spreadsheet"    W$LINK.LABEL<1,NEXT.LINK.POS> = "Generate Spreadsheet"    CALL REBUILD.URL.STRING(CURRENT.URL.STRING)    URLENCODE.STRING=CURRENT.URL.STRING    GOSUB URL.ENCODE    EXCEL.URL.STRING=NEW.STRING    URLENCODE.STRING = WIDGET.NAME    GOSUB URL.ENCODE    EXCEL.URL.STRING := '&generateexcel=':NEW.STRING ;* stash widget name in URL string so we know which widget to render as Excel spreadsheet    W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?":EXCEL.URL.STRING    W$LINK.LOCATION<1,NEXT.LINK.POS> = 'C'  END* END OF 6-27-16 *EXCEL**  LINK.CNT = DCOUNT( W$LINK.LABEL<1>, VM )  LINK.CNT2 = DCOUNT( W$LINK.ICON<1>, VM )  IF LINK.CNT2 > LINK.CNT THEN LINK.CNT = LINK.CNT2  FOR LX = 1 TO LINK.CNT    THIS.LABEL = W$LINK.LABEL<1,LX>    THIS.LOC = W$LINK.LOCATION<1,LX>    THIS.UD.POS = W$LINK.UD.POS<1,LX>    THIS.UD.VAL = W$LINK.UD.VAL<1,LX>    THIS.DD.WIDGET = W$LINK.DD.WIDGET<1,LX>    THIS.URL = W$LINK.URL<1,LX>    THIS.URL.OPTS = W$LINK.URL.OPTS<1,LX>*    IF THIS.LOC = '' THEN THIS.LOC = '1' ;* Set to quadrant 1 if not specified*    IF THIS.URL # "" THEN* Specific URL = ignore UD information and Drill down (DD) info.      URL = THIS.URL    END ELSE      IF THIS.DD.WIDGET # "" THEN TARGET.WIDGET = THIS.DD.WIDGET ELSE TARGET.WIDGET = WIDGET.NAME      URLENCODE.STRING = TARGET.WIDGET      GOSUB URL.ENCODE      TARGET.WIDGET = NEW.STRING      URL = CGI$PATH:"/MVDB.MAIN?udview=":TARGET.WIDGET      FOR UDX = 1 TO DCOUNT( THIS.UD.POS<1,1>,SVM )        URLENCODE.STRING = THIS.UD.VAL<1,1,UDX>        GOSUB URL.ENCODE        URL := "&udpos":UDX:"=":THIS.UD.POS<1,1,UDX>:"&udval":UDX:"=":NEW.STRING      NEXT UDX      IF THIS.DD.WIDGET # "" THEN        URL := "&dd"* Include the name of this widget in the drilldown link so the target widget knows the referrer        URLENCODE.STRING = WIDGET.NAME        GOSUB URL.ENCODE        URL := '&dd_from=':NEW.STRING      END    END    IF W$LINK.ICON<1,LX> # "" THEN      IMG.REF = '<img title="':W$LINK.ICON.TXT<1,LX>:'" class="icon" src="/db/icons/':W$LINK.ICON<1,LX>:'" />'    END ELSE IMG.REF = ''    IF INDEX(THIS.LOC,'C',1) AND IMG.REF # '' THEN ;* This is a Control Icon      LINK.DATA = '<a href="':URL:'" ':THIS.URL.OPTS:'>':IMG.REF:'</a>'    END ELSE      LINK.DATA = '<a href="':URL:'" ':THIS.URL.OPTS:'>':IMG.REF:THIS.LABEL:'</a>'    END*    IF INDEX(THIS.LOC,'1',1) THEN      Q1.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'2',1) THEN      Q2.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'3',1) THEN      Q3.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'4',1) THEN      Q4.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'C',1) THEN      Q5.LINKS := LINK.DATA:'&nbsp;'    END  NEXT LX  IF Q1.LINKS # "" THEN    Q1.LINKS = '<div class="widget_trcorner widget_corner">':Q1.LINKS:'</div>'  END  IF Q2.LINKS # "" THEN    Q2.LINKS = '<div class="widget_tlcorner widget_corner">':Q2.LINKS:'</div>'  END  IF Q3.LINKS # "" THEN    Q3.LINKS = '<div class="widget_blcorner widget_corner">':Q3.LINKS:'</div>'  END  IF Q4.LINKS # "" THEN    Q4.LINKS = '<div class="widget_brcorner widget_corner">':Q4.LINKS:'</div>'  END** Create the input section*  INP.CNT = DCOUNT( W$INPUT.PROMPT, AM )  INP.HTML = ''  IF INP.CNT THEN* PJS 10-07-16: Change method from GET to POST to eliminate URL length limitation* when form contains many input controls.    IF INP.CNT > 20 THEN      INP.HTML = '<form method="POST" class="widget_form" action="':CGI$PATH:'/MVDB.MAIN">'    END ELSE      INP.HTML = '<form method="GET" class="widget_form">'    END    FOR IX = 1 TO INP.CNT      INP.HTML<-1> = '<div class="widget_control">'      INP.HTML<-1> = '<label ':W$INPUT.PROMPT.PARAMS<IX>:'>':W$INPUT.PROMPT<IX>:':</label>'      BEGIN CASE        CASE W$INPUT.TYPE<IX> = "TEXT"          INP.HTML<-1> = '<input type="text" name="inp_':W$INPUT.UDPOS<IX>:'" value="':W$INPUT.DEFAULT<IX>:'" ':W$INPUT.PARAMS<IX>:'>'        CASE W$INPUT.TYPE<IX> = "PASSWORD"          INP.HTML<-1> = '<input type="password" name="inp_':W$INPUT.UDPOS<IX>:'" value="':W$INPUT.DEFAULT<IX>:'" ':W$INPUT.PARAMS<IX>:'>'        CASE W$INPUT.TYPE<IX> = "DATE"          INP.HTML<-1> = '<input class="datepicker" type="text" name="inp_':W$INPUT.UDPOS<IX>:'" value="':W$INPUT.DEFAULT<IX>:'" ':W$INPUT.PARAMS<IX>:'>'        CASE W$INPUT.TYPE<IX> = "SELECT"          INP.HTML<-1> = '<select name="inp_':W$INPUT.UDPOS<IX>:'" ':W$INPUT.PARAMS<IX>:'>'          SCNT = DCOUNT( W$INPUT.SELOPTS<IX>, VM )          IF W$INPUT.SELVALS<IX> = "" THEN W$INPUT.SELVALS<IX> = W$INPUT.SELOPTS<IX>          FOR SELX = 1 TO SCNT            IF W$INPUT.SELVALS<IX,SELX> = W$INPUT.DEFAULT<IX> THEN DFLT = "selected" ELSE DFLT = ""            INP.HTML<-1> = '<option value="':W$INPUT.SELVALS<IX,SELX>:'" ':DFLT:'>':W$INPUT.SELOPTS<IX,SELX>:'</option>'          NEXT SELX          INP.HTML<-1> = '</select>'        CASE W$INPUT.TYPE<IX> = "CHECKBOX"          INP.HTML<-1> = '<input type="checkbox" name="inp_':W$INPUT.UDPOS<IX>:'" value="1" ':W$INPUT.PARAMS<IX>          IF W$INPUT.DEFAULT<IX> = 1 THEN            INP.HTML := ' checked'          END          INP.HTML := '>'*add a hidden field to let up know that there was a checkbox on the form.*unchecked checkboxes don't get submitted with the rest of the form data.          INP.HTML<-1> = '<input type="hidden" name="mvdbcxbx_':W$INPUT.UDPOS<IX>:'" value="1">'        CASE 1 ; NULL      END CASE      INP.HTML<-1> = '</div>'    NEXT IX    IF W$INPUT.BUTTON = "" THEN W$INPUT.BUTTON = "Go"    INP.HTML<-1> = '<div class="widget_control"><input type="submit" value="':W$INPUT.BUTTON:'" ></div>'    INP.HTML<-1> = '<input type="hidden" name="udview" value="':WIDGET.NAME:'">'    INP.HTML<-1> = '<input type="hidden" name="sw" value="':WIDGET.NAME:'">'    IF G$DRILLDOWN.MODE THEN      INP.HTML<-1> = '<input type="hidden" name="dd" value="">'      INP.HTML<-1> = '<input type="hidden" name="dd_from" value="':G$DD.REFERRER:'">'      INP.HTML<-1> = '<input type="hidden" name="dd_from_db" value="':G$DD.FROM.DB:'">'    END    INP.HTML<-1> = '</form>'    INP.HTML = '<div class="widget_input">':INP.HTML:'</div>'  END**PDF* Omit the control icons in the PDF document  IF PDF.WIDGET.NAME # "" THEN    Q5.LINKS = ""  END*  ENC.TITLE = W$TITLE  CALL XML.ENCODE(ENC.TITLE,"")  CALL SWAP(HTML.DIV,'<!-- TITLE -->',ENC.TITLE)  CALL SWAP(HTML.DIV,'<!-- QUAD1 -->',Q1.LINKS)  CALL SWAP(HTML.DIV,'<!-- QUAD2 -->',Q2.LINKS)  CALL SWAP(HTML.DIV,'<!-- QUAD3 -->',Q3.LINKS)  CALL SWAP(HTML.DIV,'<!-- QUAD4 -->',Q4.LINKS)  CALL SWAP(HTML.DIV,'<!-- CONTROLS -->',Q5.LINKS)  CALL SWAP(HTML.DIV,'<!-- INPUT -->',INP.HTML)  CALL SWAP(HTML.DIV,'<!-- WIDGETDATA -->',HTML)  RETURN*APPLY.XML.OPTS: * Apply XML option overrides*  SXML.ATTRS = ""  ATTR.VAR.LIST = ''* Parse the attrbiutes from the XML tag.  CPOS = 3 + LEN(NODE.NAME) ;* Start after "<graph " or "<map " depending on the node name.  SXML.ATTR.POS = 0  SXML.LEN = LEN(SXML)  THIS.ATTR = ''  SXML.SUFFIX = '>[CHART.DATA]</':NODE.NAME:'>'  LOOP UNTIL CPOS > SXML.LEN DO    THIS.CH = SXML[CPOS,1]    BEGIN CASE      CASE THIS.CH = '<' ;* Nothing to do - beginning        THIS.ATTR = ''      CASE THIS.CH = ' '        GOSUB ADD.SXML.ATTR      CASE THIS.CH = '>' ;* Ending tag        GOSUB ADD.SXML.ATTR        SXML.SUFFIX = SXML[CPOS,999]        EXIT      CASE 1        THIS.ATTR := THIS.CH    END CASE    CPOS += 1  REPEAT  GOSUB ADD.SXML.ATTR*  CONVERT '"' TO "'" IN XML.OPTS  CONVERT @VM TO @AM IN XML.OPTS  XML.OPT.CNT = DCOUNT( XML.OPTS, AM )  FOR XOX = 1 TO XML.OPT.CNT    THIS.OPT = XML.OPTS<XOX>    OPT.VAR = FIELD( THIS.OPT, '=', 1 )    LOCATE OPT.VAR IN ATTR.VAR.LIST SETTING XOPOS THEN      SXML.ATTRS<XOPOS> = THIS.OPT    END ELSE      THIS.ATTR = THIS.OPT      GOSUB ADD.SXML.ATTR    END  NEXT XOX** Rebuild SXML*  SXML = '<':NODE.NAME:' '  FOR XOX = 1 TO SXML.ATTR.POS    SXML := SXML.ATTRS<XOX>:' '  NEXT XOX  SXML := SXML.SUFFIX  RETURN*ADD.SXML.ATTR: * Add an attrbiute to the list*  IF THIS.ATTR # '' THEN    SXML.ATTR.POS += 1    SXML.ATTRS<SXML.ATTR.POS> = THIS.ATTR    ATTR.VAR.LIST<SXML.ATTR.POS> = FIELD(THIS.ATTR,'=',1)    THIS.ATTR = ''  END  RETURN*APPLY.COLOR.OPTS: * Build COLOR.ARRAY from defaults and user settings*  COLOR.ARRAY = ''  DFLT.COLOR.ARRAY = ''  IF DB.THEME # '' THEN    READ THEME.REC FROM F.MVDB.THEMES, DB.THEME ELSE THEME.REC = ''    DFLT.COLOR.ARRAY = DELETE(THEME.REC,1,0,0)    CONVERT AM TO VM IN DFLT.COLOR.ARRAY  END ELSE IF SITE$THEME # '' THEN    READ THEME.REC FROM F.MVDB.THEMES, SITE$THEME ELSE THEME.REC = ''    DFLT.COLOR.ARRAY = DELETE(THEME.REC,1,0,0)    CONVERT AM TO VM IN DFLT.COLOR.ARRAY  END  IF DFLT.COLOR.ARRAY = '' THEN    DFLT.COLOR.ARRAY<1,-1> = '#ff8125'    DFLT.COLOR.ARRAY<1,-1> = '#584d43'    DFLT.COLOR.ARRAY<1,-1> = '#2e2a27'    DFLT.COLOR.ARRAY<1,-1> = '#7b746d'    DFLT.COLOR.ARRAY<1,-1> = '#e78859'    DFLT.COLOR.ARRAY<1,-1> = '#f04408'    DFLT.COLOR.ARRAY<1,-1> = '#bd5204'    DFLT.COLOR.ARRAY<1,-1> = '#733e30'  END  DFLT.MAX = DCOUNT( DFLT.COLOR.ARRAY<1>, VM )*  MAX.COLOR.AM = DCOUNT( COLOR.LIST, AM )  IF MAX.COLOR.AM = 0 THEN MAX.COLOR.AM = 1  FOR CLX = 1 TO MAX.COLOR.AM    MAX.COLOR.VAL = DCOUNT( COLOR.LIST<CLX>, VM )    IF MAX.COLOR.VAL < DFLT.MAX THEN MAX.COLOR.VAL = DFLT.MAX    FOR CLXV = 1 TO MAX.COLOR.VAL      IF COLOR.LIST<CLX,CLXV> # "" THEN        LOCATE OCONV(COLOR.LIST<CLX,CLXV>,"MCU") IN NAME.COLOR<1> SETTING COLOR.POS THEN          COLOR.LIST<CLX,CLXV> = NAME.COLOR<2,COLOR.POS>        END        COLOR.ARRAY<CLX,CLXV> = COLOR.LIST<CLX,CLXV>      END ELSE        COLOR.ARRAY<CLX,CLXV> = DFLT.COLOR.ARRAY<1,CLXV>      END    NEXT CLXV  NEXT CLX  RETURN*URL.ENCODE: **  NEW.STRING = ""  UE.LEN = LEN(URLENCODE.STRING)  FOR UEX = 1 TO UE.LEN    UE.CHR = URLENCODE.STRING[UEX,1]    UE.CVAL = SEQ(UE.CHR)    BEGIN CASE      CASE UE.CVAL <= 47 ; ENC.FLAG = 1      CASE UE.CVAL >= 58 AND UE.CVAL <= 64 ; ENC.FLAG = 1      CASE UE.CVAL >= 91 AND UE.CVAL <= 96 ; ENC.FLAG = 1      CASE UE.CVAL > 122 ; ENC.FLAG = 1      CASE 1 ; ENC.FLAG = 0    END CASE    IF ENC.FLAG THEN      UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')    END    NEW.STRING := UE.CHR  NEXT UEX  RETURN*TICKMARK.OPTIONS: * For charts that support tickmark options** Convert the settings in W$FW.TICKMARKS into the appropriate XML attributes to be* added to the <chart> tag via W$CHART.OPTIONS*  IF W$FW.TICKMARKS<1> = "0" THEN    W$CHART.OPTIONS<-1> = "showTickMarks='0'"    W$CHART.OPTIONS<-1> = "showTickValues='0'"  END ELSE    IF W$FW.TICKMARKS<2> = 0 THEN      W$CHART.OPTIONS<-1> = "showTickValues='0'"    END    IF W$FW.TICKMARKS<3> = "A" THEN      W$CHART.OPTIONS<-1> = "ticksBelowGraph='0'"    END    IF W$FW.TICKMARKS<4> # "" THEN      W$CHART.OPTIONS<-1> = "majorTMNumber='":W$FW.TICKMARKS<4>:"'"    END    IF W$FW.TICKMARKS<5> # "" THEN      W$CHART.OPTIONS<-1> = "minorTMNumber='":W$FW.TICKMARKS<5>:"'"    END  END  RETURN*MAKE.FW.DD.URL: **  TARGET.WIDGET = W$FW.DD.WIDGET<1,FW.WIDGET.POS>  IF TARGET.WIDGET = "" THEN    URL = ""    RETURN  END  URLENCODE.STRING = TARGET.WIDGET  GOSUB URL.ENCODE  TARGET.WIDGET = NEW.STRING  URL = CGI$PATH:"/MVDB.MAIN?udview=":TARGET.WIDGET  FOR UDX = 1 TO DCOUNT( W$FW.DD.UD.POS<1,FW.WIDGET.POS>,SVM )    URLENCODE.STRING = W$FW.DD.UD.VAL<1,FW.WIDGET.POS,UDX>* BEGIN ZUMASYS 1-5-15    BEGIN CASE      CASE URLENCODE.STRING = 'MS.LABEL'        URLENCODE.STRING=MS.LABEL      CASE URLENCODE.STRING = 'MS.VALUE'        URLENCODE.STRING=MS.VALUE      CASE URLENCODE.STRING = 'MS.SERIES'; *3-15-15        URLENCODE.STRING=MS.SERIES; *3-15-15      CASE 1; NULL    END CASE* END ZUMASYS 1-5-15    GOSUB URL.ENCODE    URL := "&udpos":UDX:"=":W$FW.DD.UD.POS<1,FW.WIDGET.POS,UDX>:"&udval":UDX:"=":NEW.STRING  NEXT UDX  URL := "&dd"* Include the name of this widget in the drilldown link so the target widget knows the referrer  URLENCODE.STRING = WIDGET.NAME  GOSUB URL.ENCODE  URL := '&dd_from=':NEW.STRING* Specify the dashboard to return to from this drilldown view.  IF G$DRILLDOWN.MODE THEN    SOURCE.DB = G$DD.FROM.DB  END ELSE SOURCE.DB = G$CURRENT.DB  URLENCODE.STRING = SOURCE.DB  GOSUB URL.ENCODE  URL := '&dd_from_db=':NEW.STRING  RETURN*OPTS.UPDATE:  IF NOT(INDEX(UPDATE.OPTS,'decimalSeparator',1)) THEN    UPDATE.OPTS := OPTS.DELIM:"decimalSeparator='":DECIMAL:"'"  END  IF NOT(INDEX(UPDATE.OPTS,'thousandSeparator',1)) THEN    UPDATE.OPTS := OPTS.DELIM:"thousandSeparator='":THOUSAND:"'"  END  RETURNEND0002F4SUB.URL.ENCODE0c2SUBROUTINE SUB.URL.ENCODE(URLENCODE.STRING)** (C) Copyright 2009, Sierra Bravo Corporation, All Rights Reserved* * Author: Luke Bucklin, Sierra Bravo Corporation* Date: August 7, 2009* Purpose: URL encode a text string*NEW.STRING = ""UE.LEN = LEN(URLENCODE.STRING)FOR UEX = 1 TO UE.LEN  UE.CHR = URLENCODE.STRING[UEX,1]  UE.CVAL = SEQ(UE.CHR)  BEGIN CASE    CASE UE.CVAL <= 47 ; ENC.FLAG = 1    CASE UE.CVAL >= 58 AND UE.CVAL <= 64 ; ENC.FLAG = 1    CASE UE.CVAL >= 91 AND UE.CVAL <= 96 ; ENC.FLAG = 1    CASE UE.CVAL > 122 ; ENC.FLAG = 1    CASE 1 ; ENC.FLAG = 0  END CASE  IF ENC.FLAG THEN    UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')  END  NEW.STRING := UE.CHRNEXT UEXURLENCODE.STRING = NEW.STRINGRETURNEND 0024B2MV.COMPILE0c2* MV.COMPILE - Sierra Bravo Precompiler** Copyright (C) 2006 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin* Date: 12/26/2006* Description: Precompiler** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause**PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ''PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE() ; *PJS 06-12-15*TCL.LINE = TRIM( TCL.LINE )VERB = FIELD(TCL.LINE,' ', 1)FILE = FIELD( TCL.LINE, ' ', 2 )ITEM.LIST = ''IF SYSTEM(11) THEN  LOOP    READNEXT ITEM ELSE EXIT    ITEM.LIST<-1> = ITEM  REPEATEND ELSE  POS = 3  LOOP    ITEM = FIELD( TCL.LINE, ' ', POS )  UNTIL ITEM = '' OR ITEM[1,1] = '(' DO    ITEM.LIST<-1> = ITEM    POS += 1  REPEATENDOPTS.POS = INDEX( TCL.LINE, '(', 1 )IF OPTS.POS THEN  OPTS = TCL.LINE[OPTS.POS,999]END ELSE OPTS = ''*OPEN FILE TO FILEVAR ELSE STOP 201, FILE*INC.FILE = FILE:".INC"OPEN INC.FILE TO INC.FILEVAR ELSE  EXECUTE "CREATE-FILE ":INC.FILE:" 1 51"  OPEN INC.FILE TO INC.FILEVAR ELSE STOP 201, INC.FILEENDOPEN '','MVPC.CONTROL' TO F.MVPC.CONTROL ELSE  EXECUTE "CREATE-FILE MVPC.CONTROL 3 11" CAPTURING JUNK  OPEN '','MVPC.CONTROL' TO F.MVPC.CONTROL ELSE STOP 201, 'MVPC.CONTROL'END*DELIMS = \"'\ONE.WORD.TOKENS = ""ONE.WORD.TOKENS<-1> = "notrim"ONE.WORD.TOKENS<-1> = "exists"*ITEM.CNT = DCOUNT( ITEM.LIST, @AM )FOR ITEM.X = 1 TO ITEM.CNT  PRINT "MV Precompiler Version 1.0 ":  INC.SOURCE = '** Auto-generated source code. Do not modify this file.'  INC.SOURCE<-1> = "VAR$ERR = ''"  INC.SOURCE<-1> = "CALL WDB.VARS(VARS,VALS)"  INC.SOURCE<-1> = "*"  INC.SOURCE<-1> = 'LOCATE "xmlQuery" IN VARS SETTING POS THEN'  INC.SOURCE<-1> = '  XML$QUERY = 1'  INC.SOURCE<-1> = 'END ELSE XML$QUERY = 0'  XML.INFO = '<vars>'  VAR.INFO = ''  VAR.INFO.POS = 1  ITEM = ITEM.LIST<ITEM.X>  READ SOURCE FROM FILEVAR, ITEM ELSE    PRINT "Item '":ITEM:"' not on file."    CONTINUE  END  DELETE INC.FILEVAR, ITEM  SOURCE.LINES = DCOUNT( SOURCE, @AM )  SLINE = 1  END.OF.PC = 0  PARSED.ANY = 0  PC.ERRORS = 0  LOOP    LINE = SOURCE<SLINE>    IF TRIM(LINE)[1,1] = "!" THEN      GOSUB PARSE.LINE      IF SYNTAX.ERROR # "" THEN        PRINT        PRINT "Syntax Error: ":SYNTAX.ERROR        PRINT SLINE:": ":LINE        PARSED = 0        PC.ERRORS += 1      END      IF PARSED THEN        PRINT ".":        PARSED.ANY = 1        THIS.INC = ""        IF REQUIRE.ERROR = "" THEN          REQUIRE.ERROR = FROMVAR:' required.'        END        IF ITERATIVE THEN          FROMVAR = FROMVAR[1,LEN(FROMVAR)-2]          VARNAME = VARNAME[1,LEN(VARNAME)-2]          THIS.INC<-1> = "VAR$CNT = DCOUNT( VARS, @AM )"          THIS.INC<-1> = "VAR$STRLEN = ":LEN(FROMVAR)          THIS.INC<-1> = VARNAME:" = ''"          IF VARTYPE = "date" THEN            THIS.INC<-1> = VARNAME:".I = ''"          END          THIS.INC<-1> = "FOR VAR$X = 1 TO VAR$CNT"          THIS.INC<-1> = \  IF VARS<VAR$X> MATCHES "'\:FROMVAR:\'1N0N" THEN\          THIS.INC<-1> = '    VAR$NUM = VARS<VAR$X>[VAR$STRLEN+1,99]'          THIS.INC<-1> = '    ':VARNAME:'<VAR$NUM> = VALS<VAR$X>'          IF VARTYPE = "date" THEN            THIS.INC<-1> = '    ':VARNAME:'.I<VAR$NUM> = ICONV(':VARNAME:'<VAR$NUM>,"D")'            THIS.INC<-1> = '    ':VARNAME:'<VAR$NUM> = OCONV(':VARNAME:'.I<VAR$NUM>,"D4/")'          END          THIS.INC<-1> = '  END'          THIS.INC<-1> = 'NEXT VAR$X'         END ELSE          THIS.INC<-1> = 'LOCATE "':FROMVAR:'" IN VARS SETTING POS THEN'          THIS.INC<-1> = '  ':VARNAME:' = VALS<POS>'          THIS.INC<-1> = '  ':VARNAME:'.EXISTS = 1'          IF VARTYPE = "date" THEN            THIS.INC<-1> = '  ':VARNAME:'.I = ICONV(':VARNAME:',"D")'            THIS.INC<-1> = '  ':VARNAME:' = OCONV(':VARNAME:'.I,"D4/")'          END          IF DEFAULT # "" THEN            THIS.INC<-1> = '  IF ':VARNAME:' = "" THEN ':VARNAME:' = "':DEFAULT:'"'          END          THIS.INC<-1> = 'END ELSE'          THIS.INC<-1> = '  ':VARNAME:'.EXISTS = 0'          IF VARTYPE = "date" THEN            THIS.INC<-1> = '  ':VARNAME:'.I = ""'          END          IF METHOD = "REQUIRE" AND EXISTS THEN            * Existence of variable is required            THIS.INC<-1> = '  ':VARNAME:' = ""'            THIS.INC<-1> = '  VAR$ERR<-1> = "':REQUIRE.ERROR:'"'          END ELSE            THIS.INC<-1> = '  ':VARNAME:' = "':DEFAULT:'"'          END          THIS.INC<-1> = 'END'          IF METHOD = "REQUIRE" AND NOT(EXISTS) THEN            THIS.INC<-1> = 'IF ':VARNAME:' = "" THEN'            THIS.INC<-1> = '  VAR$ERR<-1> = "':REQUIRE.ERROR:'"'            THIS.INC<-1> = 'END'          END          IF TRIM.VAL THEN            THIS.INC<-1> = VARNAME:" = TRIM(":VARNAME:")"          END        END        *        IF METHOD = "REQUIRE" THEN REQUIRED = 1 ELSE REQUIRED = 0        *        VAR.INFO<1,VAR.INFO.POS> = FROMVAR        VAR.INFO<2,VAR.INFO.POS> = REQUIRED        VAR.INFO<3,VAR.INFO.POS> = VARTYPE        VAR.INFO<4,VAR.INFO.POS> = ITERATIVE        VAR.INFO<5,VAR.INFO.POS> = DEFAULT        VAR.INFO<6,VAR.INFO.POS> = COMMENT        VAR.INFO<7,VAR.INFO.POS> = EXISTS        VAR.INFO.POS += 1        *        XML.INFO<-1> = '<var name="':FROMVAR:'" required="':REQUIRED:'" type="':VARTYPE:'" iterative="':ITERATIVE:'">'        CALL XML.ENCODE(DEFAULT,'')        CALL XML.ENCODE(COMMENT,'')        XML.INFO<-1> = ' <default>':DEFAULT:'</default>'        XML.INFO<-1> = ' <comment>':COMMENT:'</comment>'        XML.INFO<-1> = '</var>'        *        INC.SOURCE<-1> = THIS.INC      END    END ELSE      LINE = TRIM(LINE)      IF LINE = "INCLUDE ":FILE:".INC ":ITEM THEN END.OF.PC = 1    END  UNTIL SLINE > SOURCE.LINES OR END.OF.PC DO SLINE += 1 REPEAT  PRINT  IF PARSED.ANY THEN    XML.INFO<-1> = '</vars>'    INC.SOURCE<-1> = "* XML Info"    INC.SOURCE<-1> = \XML$INFO = '<?xml version="1.0" ?>'\    XICNT = DCOUNT( XML.INFO, @AM )    FOR XML.X = 1 TO XICNT      INC.SOURCE<-1> = 'XML$INFO<-1> = \':XML.INFO<XML.X>:'\'    NEXT XML.X    INC.SOURCE<-1> = 'IF XML$QUERY THEN'    INC.SOURCE<-1> = '  CALL XML.SEND(XML$INFO)'    INC.SOURCE<-1> = '  STOP'    INC.SOURCE<-1> = 'END'    WRITE INC.SOURCE ON INC.FILEVAR, ITEM    WRITE VAR.INFO ON INC.FILEVAR, "$":ITEM    *    READU FILE.LIST FROM F.MVPC.CONTROL, 'LIBRARIES' ELSE FILE.LIST = ''    LOCATE FILE IN FILE.LIST BY 'AL' SETTING POS THEN      RELEASE F.MVPC.CONTROL, 'LIBRARIES'    END ELSE      FILE.LIST = INSERT( FILE.LIST, 1, POS, 0, FILE )      WRITE FILE.LIST ON F.MVPC.CONTROL, 'LIBRARIES'    END  END  IF PC.ERRORS THEN    PRINT "Compile aborted"  END ELSE    XLINE = "D3.":VERB:" ":FILE:" ":ITEM:" ":OPTS    PRINT "D3 Compile: ":XLINE    EXECUTE XLINE  ENDNEXT ITEM.XSTOP*PARSE.LINE: * Parse a line into tokens*SYNTAX.ERROR = ""LINE = TRIM(LINE)LINE = LINE[2,9999] ;* Remove "!"*LINELEN = LEN(LINE)TOKEN.LIST = '' ; TOKEN.POS = 1TOKEN = ""VALUE = ""GETMODE = "TOKEN" ;* Start looking for tokensDELIM = ""IN.DELIM.STRING = 0PARSED = 0FOR LX = 1 TO LINELEN  CH = LINE[LX,1]  IF GETMODE = "TOKEN" THEN    BEGIN CASE      CASE CH MATCHES "1A" OR CH MATCHES "1N"        TOKEN := CH      CASE CH = " "        * End of word - Token complete        IF TOKEN # "" THEN          TOKEN.LIST<1,TOKEN.POS> = TOKEN          LOCATE TOKEN IN ONE.WORD.TOKENS SETTING POS ELSE            GETMODE = "VALUE"            VALUE.POS = TOKEN.POS            IN.DELIM.STRING = 0          END          TOKEN.POS += 1          TOKEN = ""        END    END CASE  END ELSE IF GETMODE = "VALUE" THEN    BEGIN CASE      CASE IN.DELIM.STRING AND CH = DELIM        TOKEN.LIST<2,VALUE.POS> = VALUE        VALUE = ""        DELIM = ""        GETMODE = "TOKEN"      CASE NOT(IN.DELIM.STRING) AND INDEX(DELIMS,CH,1) ;* This is a delimiter        IN.DELIM.STRING = 1        DELIM = CH      CASE CH = " " AND NOT(IN.DELIM.STRING)        TOKEN.LIST<2,VALUE.POS> = VALUE        VALUE = ""        GETMODE = "TOKEN"      CASE 1        VALUE := CH    END CASE  ENDNEXT LXIF TOKEN # "" THEN  TOKEN.LIST<1,-1> = TOKENEND ELSE IF VALUE # "" THEN  TOKEN.LIST<2,VALUE.POS> = VALUEEND*VARNAME = ""FROMVAR = ""COMMENT = ""DEFAULT = ""VARTYPE = "string"TRIM.VAL = 1EXISTS = 0REQUIRE.ERROR = ""*FOR TX = 1 TO DCOUNT( TOKEN.LIST<1>, @VM )  TOKEN = TOKEN.LIST<1,TX>  VALUE = TOKEN.LIST<2,TX>  BEGIN CASE    CASE TOKEN = "get" OR TOKEN = "require"      METHOD = TOKEN      VARNAME = VALUE      PARSED = 1    CASE TOKEN = "from"      FROMVAR = VALUE    CASE TOKEN = "type"      VARTYPE = OCONV(VALUE,'MCL')    CASE TOKEN = "default"      DEFAULT = VALUE    CASE TOKEN = "comment"      COMMENT = VALUE    CASE TOKEN = "notrim"      TRIM.VAL = 0    CASE TOKEN = "exists"      EXISTS = 1    CASE TOKEN = "error"      REQUIRE.ERROR = VALUE    CASE 1      SYNTAX.ERROR = "Invalid Token: '":TOKEN:'"'  END CASENEXT TX*IF NOT(PARSED) THEN RETURN*IF VARNAME = "" THEN  SYNTAX.ERROR = "No variable specified"  RETURNEND*IF FROMVAR = "" THEN FROMVAR = VARNAME*ITERATIVE = 0IF VARNAME[LEN(VARNAME)-1,2] = "[]" THEN  IF FROMVAR[LEN(FROMVAR)-1,2] = "[]" THEN    ITERATIVE = 1  END ELSE    SYNTAX.ERROR = "Iterative array mismatch: ":VARNAME:", ":FROMVAR  ENDEND*RETURN0063BEMVDB.WEB.ED0c2** Copyright (C) 2009 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: August 6, 2009* Description: Web Editor for Bravo Dashboard** 3-9-15 TFP CHANGE FILENAME TO FILENAME.VAR TO PREVENT CONFLICT WITH filename** Modified by Peter Schellenbach of Zumasys 06-10-15 for QM compatibility*   Change U50BB to @ACCOUNT*   Change MDS to QM.ACCOUNTS*   Change LOGTO syntax for QM** Modified by Peter Schellenbach of Zumasys 07-09-15 for QM compatibility*   Parse file path in catalog pointer to find subroutine source file** 8-8-16 PJS Add CATALOG options "LOCAL NO.PAGE NO.QUERY" to ensure catalog record in VOC and no prompts** Modified by Peter Schellenbach of Zumasys 11-02-16*  Added GLOBAL.INFO(100) = 1 before each of the STOP statements (except STOP due to errors)*  to indicate successful execution of this routine. Otherwise the controller program*  (MVDB.INIT) thinks an error has occurred and appends some debug info to the HTML output.**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGET.TYPES***OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS' ;* this is in /WWW/ COMMON and is opened by MVDB.INITOPEN '','MV.WEB.ED.ARCHIVE' TO F.ED.ARCHIVE THEN  ARCHIVE = 1END ELSE ARCHIVE = 0OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'READ ACCTS FROM F.MVDB.CONTROL, "ED.ACCOUNTS" ELSE ACCTS = ""*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$CHARSET      TO SITE$SETTINGS(9)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDENDIF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*CALL GET.SESSION.VAR("adminauth",adminauth)IF adminauth # 1 THEN  FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'  FORM := '</head><body><p>Administrative priviledges are required. '  FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'  CALL WEB.SEND(FORM)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOP*  READ LOGIN.PAGE FROM F.WEB.FORMS, "admin_login.html" ELSE LOGIN.PAGE = "admin_login.html not found."*  CALL SWAP(LOGIN.PAGE,'<!-- SITE_LOGO -->',SITE.LOGO)  *  GLOBAL.INFO(100) = 1 ;* Intentional stop*  CALL WEB.SEND(LOGIN.PAGE)*  STOPEND*EDIT.SCRIPTS = "NEW_PROGRAM_DIALOG = 0;":CHAR(10) ;* This will get overwritten later, if appropriateESC.APOS = "\'"HMESSAGE = ""FMESSAGE = ""record = ""LOCATE "ed_file" IN CGI$VARS SETTING POS THEN  filename = CGI$VALS<POS>END ELSE  filename = ""  HMESSAGE<-1> = "No filename specified."ENDLOCATE "ed_item" IN CGI$VARS SETTING POS THEN  item = CGI$VALS<POS>END ELSE  item = ""  HMESSAGE<-1> = "No item name specified."ENDLOCATE "ed_acct" IN CGI$VARS SETTING POS THEN  acct = CGI$VALS<POS>END ELSE acct = ""*LOCATE "action" IN CGI$VARS SETTING POS THEN  action = CGI$VALS<POS>END ELSE action = "open"IF action = "code_template" THEN  LOCATE "template" IN CGI$VARS SETTING POS THEN    template = CGI$VALS<POS>  END ELSE template = ""  OPEN '','MVDB.SUB.TEMPLATES' TO F.MVDB.SUB.TEMPLATES THEN    orig.template = template    LOOP      READ TEMPLATE.TEXT FROM F.MVDB.SUB.TEMPLATES, template ELSE TEMPLATE.TEXT = ""      IF TEMPLATE.TEXT = "" THEN TEMPLATE.TEXT = "No template for ":template    WHILE FIELD( TEMPLATE.TEXT, ' ', 1 ) = "USE" DO      template = FIELD( TEMPLATE.TEXT, ' ', 2 )    REPEAT    CALL SWAP(TEMPLATE.TEXT,'W$TYPE = "%TYPE%"','W$TYPE = "':orig.template:'"')  END ELSE    TEMPLATE.TEXT = "Unable to open MVDB.SUB.TEMPLATES"  END  SESSION$CONTENT.SENT = 1  CRT "Content-Type: text/html"  CRT  CALL WEB.SEND(TEMPLATE.TEXT)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPENDLOCATE "record" IN CGI$VARS SETTING POS THEN  record = CGI$VALS<POS>  CONVERT CHAR(10) TO @AM IN record  CONVERT CHAR(13) TO "" IN recordENDIF action = "compile" OR action = "save" THEN  READ HTML FROM F.WEB.FORMS, "ed_output.html" ELSE HTML = "Unable to read ed_output.html"  QUIET.MODE = 1END ELSE  READ HTML FROM F.WEB.FORMS, "ed_template.html" ELSE HTML = "Unable to read ed_template.html"  QUIET.MODE = 0ENDCALL SWAP(HTML,'<!--CHARACTER_SET-->',SITE$CHARSET)LOCATE "height" IN CGI$VARS SETTING POS THEN  height = CGI$VALS<POS>  CALL PUT.SESSION.VAR("ed_height",height)END ELSE  CALL GET.SESSION.VAR("ed_height",height)ENDOUT.OF.ACCOUNT = 0myacct = @ACCOUNT ; * OCONV( 'a', 'U50BB') *PJS 06-10-15*IF acct = myacct THEN acct = ""IF acct # "" AND HMESSAGE = "" THEN  password = ""  OPEN '','QM.ACCOUNTS' TO F.ACCOUNTS THEN    READ APTR FROM F.ACCOUNTS, acct ELSE APTR = ""    IF APTR<1> <> "" THEN*      IF APTR<7> # "" THEN ;* This account has a password*        LOCATE acct IN ACCTS<1> SETTING APOS THEN*          password = ACCTS<2,APOS>*        END ELSE*          HMESSAGE<-1> = "Account ":acct:" requies a password. Not found in MVDB.CONTROL, ED.ACCOUNTS"*        END*      END    END ELSE      HMESSAGE<-1> = "Account ":acct:" is not valid."    END  END ELSE    HMESSAGE<-1> = "Unable to open QM.ACCOUNTS file."  END  IF HMESSAGE = "" THEN*    DATA password    EXECUTE "LOGTO ":acct CAPTURING LOGTO.OUT ;* Switch over to specified account    IF LOGTO.OUT = "" THEN      OUT.OF.ACCOUNT = 1    END ELSE      HMESSAGE<-1> = "Error: ":LOGTO.OUT    END  ENDENDIF HMESSAGE # "" THEN  IF filename = "" AND item = "" THEN    HMESSAGE = ""    CALL SWAP(HTML,'<!-- SYNTAX -->',"")    CALL SWAP(HTML,'<!-- WINDOW_HEIGHT -->',"")    CALL SWAP(HTML,'<!-- FILE -->',"")    CALL SWAP(HTML,'<!-- ITEM -->',"")    CALL SWAP(HTML,'<!-- BODY -->',"")    CALL SWAP(HTML,'<!-- LAST_COMPILE -->',"")    CALL SWAP(HTML,'<!-- COMPILE_OUTPUT -->',"")    CALL SWAP(HTML,'<!-- COMPILE_ERRLINE -->',"")    CALL SWAP(HTML,'<!-- ED_CONTENT -->',"''")    CALL SWAP(HTML,'<!-- EA_CALLS_CONTENT -->',"")    CALL SWAP(HTML,'<!-- EA_INCLUDES_CONTENT -->',"")    CALL SWAP(HTML,'<!-- EA_FILES_CONTENT -->',"")    CALL SWAP(HTML,'<!-- EA_ARCHIVE_CONTENT -->',"")    CALL SWAP(HTML,'<!-- NUM_OF_CALLS -->',0)    CALL SWAP(HTML,'<!-- NUM_OF_INCLUDES -->',0)    CALL SWAP(HTML,'<!-- NUM_OF_FILES -->',0)    CALL SWAP(HTML,'<!-- NUM_OF_ARCHIVES -->',0)    CALL SWAP(HTML,'<!-- ED_SCRIPTS -->',"")    CALL SWAP(HTML,'<!-- ED_INIT_SCRIPT -->',"openEditDialog();")    CALL WEB.SEND(HTML)  END ELSE    GOSUB ADD.MESSAGE    CALL WEB.SEND(HTML)  END  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPEND* This will be the master dictionary in the appropriate account.OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'ENDBASIC.SUB = 0OPEN filename TO F.FILE THEN  IF record # "" AND action # "open" THEN    ELINE = DCOUNT( record, @AM )    LOOP WHILE ELINE > 1 AND record<ELINE> = "" DO      record = DELETE( record, ELINE, 0, 0 )      ELINE -= 1    REPEAT    IF ARCHIVE AND filename # "MV.WEB.ED.ARCHIVE" THEN      READ oldrec FROM F.FILE, item THEN        IF oldrec # record THEN          NOW = TIME()          TD.STAMP = NOW:"*":DATE()          NOW2 = NOW "R%2"          NOW2 = MOD(NOW2,16) ;* Get it down to a hex digit          IF acct = "" THEN USE.ACCT = myacct ELSE USE.ACCT = acct          ARCHIVE.ID = USE.ACCT:"*":filename:"*":item:"*":OCONV(NOW2,'MCDX')          oldrec = INSERT( oldrec, 1, 0, 0, TD.STAMP )          WRITE oldrec ON F.ED.ARCHIVE, ARCHIVE.ID        END      END    END    WRITE record ON F.FILE, item    IF record[1,3] = "SUB" THEN BASIC.SUB = 1    IF QUIET.MODE THEN      record = ""    END ELSE      HMESSAGE<-1> = item:" saved, ":LEN(record):" bytes."    END  END ELSE    READ record FROM F.FILE, item THEN      HMESSAGE<-1> = item:" opened, ":LEN(record):" bytes."    END ELSE      record = ""      HMESSAGE<-1> = "New Item: ":item    END    IF record = "" THEN      NEW.ITEM.FLAG = 1      BEGIN CASE        CASE filename = "RSS.BP"          record = 'SUBROUTINE ':item          record<-1> = '*'          record<-1> = '* RSS Feed'          record<-1> = '*'          record<-1> = 'INCLUDE RSS.BP RSS.DATA.INC'          record<-1> = '*'          IF INDEX(item,'.SEL',1) THEN            record<-1> = '* EXECUTE SELECT - Create active select list'            record<-1> = 'RETURN'          END ELSE IF INDEX(item,'.ITEM',1) THEN            record<-1> = 'RSS$TITLE = "" ;* Title text'            record<-1> = 'RSS$LINK = "" ;* Link to URL for full-view (if applicable)'            record<-1> = 'RSS$AUTHOR = "" ;* Author'            record<-1> = 'RSS$DATE = "" ;* Date of feed item (internal)'            record<-1> = 'RSS$TIME = "" ;* Time of feed item (internal)'            record<-1> = 'RSS$DESCRIPTION = "" ;* Feed description text (HTML)'            record<-1> = '*'            record<-1> = '* Programming to fill in the above values goes here.'            record<-1> = '*'            record<-1> = 'RETURN'          END        CASE filename = 'MVDB.SUBS'          EDIT.SCRIPTS = "NEW_PROGRAM_DIALOG = 1;":CHAR(10)          EDIT.SCRIPTS := 'widgetTypes = new Array();':CHAR(10)          OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES THEN            EXECUTE 'SSELECT MVDB.WIDGET.TYPES BY GROUP BY HANDLER WITH INACTIVE # "1"' CAPTURING JUNK            LOOP              READNEXT TYPE.ID ELSE EXIT              MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, TYPE.ID THEN                CALL SWAP(WT$DESC,'"','\"')                CLASS.NAME = FIELD(WT$ICON,'.',1)                CONVERT "_" TO "-" IN CLASS.NAME                EDIT.SCRIPTS := 'widgetTypes["':TYPE.ID:'"] = new Array("':WT$DESC:'","':CLASS.NAME:'");':CHAR(10)              END            REPEAT          END          record = 'SUBROUTINE ':item          record<-1> = '*'          record<-1> = '* Dashboard Widget'          record<-1> = '*'          record<-1> = 'INCLUDE WBPD MVDB.INCLUDE'          record<-1> = '*'        CASE 1 ; NULL      END CASE    END  ENDEND ELSE  HMESSAGE<-1> = "Unable to open file '":filename:"'"  GOSUB ADD.MESSAGE  CALL WEB.SEND(HTML)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPEND*OUTPUT = "" ;* Compiler outputCOMP.ERRLINE = ""BEGIN CASE  CASE HMESSAGE # "" ; NULL  CASE action = "compile"    READV BASIC.TEMPLATE FROM F.MVDB.CONTROL, "COMPILE.SETUP", 1 ELSE BASIC.TEMPLATE = ""    IF BASIC.TEMPLATE # "" THEN      CMD = BASIC.TEMPLATE      CALL SWAP(CMD,"%FILENAME%",filename)      CALL SWAP(CMD,"%ITEMNAME%",item)    END ELSE      CMD = "BASIC ":filename:" ":item    END    EXECUTE CMD CAPTURING CMPOUTPUT    OUTPUT<-1> = CMD    OUTPUT<-1> = CMPOUTPUT    * If the compile failed, find the first error line #    CO = 1    LOOP UNTIL CO > DCOUNT( CMPOUTPUT, @AM ) DO      LN = FIELD(TRIM(CMPOUTPUT<CO>),' ',1)      IF LN MATCHES "4N" THEN        COMP.ERRLINE = (LN+0)        EXIT      END ELSE CO += 1    REPEAT    IF BASIC.SUB = 1 THEN      CMD = "CATALOG ":filename:" ":item:" LOCAL NO.PAGE NO.QUERY" ;* PJS 08-08-16 QM options to save catalog pointer in VOC without prompts      EXECUTE CMD CAPTURING CATOUTPUT      OUTPUT<-1> = CMD      OUTPUT<-1> = CATOUTPUT    END  CASE action = "save"  CASE 1    NULLEND CASE*SUBLIST = ''INCLIST = ''FILELIST = ''IF record # "" THEN  GOSUB BUILD.SUBLIST  GOSUB BUILD.INCLIST  GOSUB BUILD.FILELISTENDIF filename = "WEB.FORMS" THEN SYNTAX = "html" ELSE SYNTAX = "basic"** Last compile date/time?*CSTRING = ""IF SYNTAX = "basic" THEN  EXECUTE "SELECT DICT ":filename:" '":item:"' C/DATE C/TIME" CAPTURING JUNK  READNEXT CDATE ELSE CDATE = ""  READNEXT CTIME ELSE CTIME = ""  CLEARSELECT  IF CDATE MATCHES "1N0N" AND CTIME MATCHES "1N0N" THEN    CDATE = OCONV(CDATE, 'D2/')    CTIME = OCONV(CTIME, 'MTS')    CSTRING = "Last compiled on ":CDATE:" at ":CTIME:'<br />'  ENDENDIF OUT.OF.ACCOUNT THEN  LOCATE myacct IN ACCTS<1> SETTING APOS THEN    password = ACCTS<2,APOS>  END ELSE password = ""*  DATA password  EXECUTE "LOGTO ":myacct CAPTURING LOGTO.OUT  IF LOGTO.OUT # "" THEN    * Fatal error - cannot get back to our account. Send crapy CGI error.    PRINT "Content-type: text/html"    PRINT    PRINT "<html><body>Error returning to ":myacct:", ":LOGTO.OUT    PRINT "Check MVDB.CONTROL, ED.ACCOUNTS settings.</body></html>"    GLOBAL.INFO(100) = 1 ;* Intentional stop    STOP  END  * Re-open the master dictionary in the local account.  OPEN '','MD' TO F.MD ELSE    OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'  ENDENDIF OUTPUT # "" THEN  CALL SWAP(OUTPUT,'&','&amp;')  CALL SWAP(OUTPUT,'<','&lt;')  CALL SWAP(OUTPUT,'>','&gt;')ENDGOSUB ADD.MESSAGEIF record # "" THEN  CALL SWAP(record,'&','&amp;')  CALL SWAP(record,'<','&lt;')  CALL SWAP(record,'>','&gt;')ENDIF action = "compile" THEN  CALL SWAP(OUTPUT,@AM,"<br>")ENDIF QUIET.MODE THEN  FORM = ""END ELSE  FORM = '<form id="ed_form" method="post" action="':CGI$PATH:'/MVDB.WEB.ED" >'  FORM<-1> = '<textarea id="file_1" style="height: 100%; width: 100%;" name="record">'  FORM<-1> = record  FORM<-1> = '</textarea>'  IF acct = "" THEN USE.ACCT = myacct ELSE USE.ACCT = acct  FORM<-1> = '<input type="hidden" name="ed_acct" value = "':USE.ACCT:'" />'  FORM<-1> = '<input type="hidden" name="ed_file" value="':filename:'" />'  FORM<-1> = '<input type="hidden" name="ed_item" value="':item:'" />'  FORM<-1> = '<input type="hidden" name="action" value="" />'  FORM<-1> = '</form>'ENDCALL SWAP(HTML,'<!-- SYNTAX -->',SYNTAX)CALL SWAP(HTML,'<!-- WINDOW_HEIGHT -->',height)CALL SWAP(HTML,'<!-- FILE -->',filename)CALL SWAP(HTML,'<!-- ITEM -->',item)CALL SWAP(HTML,'<!-- BODY -->',FORM)CALL SWAP(HTML,'<!-- LAST_COMPILE -->',CSTRING)CALL SWAP(HTML,'<!-- COMPILE_OUTPUT -->',OUTPUT)CALL SWAP(HTML,'<!-- COMPILE_ERRLINE -->',COMP.ERRLINE)CALL SWAP(HTML,'<!-- ED_CONTENT -->',record)*SUB.CNT = DCOUNT( SUBLIST<1>, @VM )INC.CNT = DCOUNT( INCLIST<1>, @VM )FILE.CNT = DCOUNT( FILELIST<1>, @VM )IF SUB.CNT > INC.CNT THEN MAX.CNT = SUB.CNT ELSE MAX.CNT = INC.CNTIF FILE.CNT > MAX.CNT THEN MAX.CNT = FILE.CNT*IF acct # "" THEN  URL.ACCT = acct  CALL SUB.URL.ENCODE(URL.ACCT)  ACCT.LINK = "ed_acct=":URL.ACCT:"&"END ELSE ACCT.LINK = ""*IF SUB.CNT THEN  EA.CALLS ='<table width="100%"><tbody><tr><th>File</th><th>Program</th><th>Line(s)</th></tr>'END ELSE EA.CALLS = ""IF INC.CNT THEN  EA.INCS ='<table width="100%"><tbody><tr><th>File</th><th>Program</th><th>Line(s)</th></tr>'END ELSE EA.INCS = ""IF FILE.CNT THEN  EA.FILES = '<table width="100%"><tbody><tr><th>File</th><th>Operation</th><th>Line(s)</th></tr>'END ELSE EA.FILES = ""FOR LX = 1 TO MAX.CNT  IF LX <= SUB.CNT THEN    URL.SUBFILE = SUBLIST<1,LX>    CALL SUB.URL.ENCODE(URL.SUBFILE)    URL.SUBITEM = SUBLIST<2,LX>    CALL SUB.URL.ENCODE(URL.SUBITEM)    PROGFNAME = SUBLIST<1,LX>    PROGNAME = SUBLIST<2,LX>    CALL SWAP(PROGNAME,"'","\'")    CALL SWAP(PROGFNAME,"'","\'")    IF SUBLIST<2,LX>[1,1] = "@" THEN ;* This is a CALL @ function, so no link to open the subroutine      EA.CALLS := '<tr><td>':PROGFNAME:'</td><td>':PROGNAME:'</a></td>'    END ELSE      EA.CALLS := '<tr><td>':PROGFNAME:'</td><td><a target="':URL.SUBFILE:'_':URL.SUBITEM:'" href="/dbc/MVDB.WEB.ED?':ACCT.LINK:'ed_file=':URL.SUBFILE:'&ed_item=':URL.SUBITEM:'">':PROGNAME:'</a></td>'    END    EA.CALLS := '</td><td>'    CL.CNT = DCOUNT( SUBLIST<4,LX>, @SVM )    FOR LXL = 1 TO CL.CNT      EA.CALLS := '<a href="#" onclick="javascript:editArea.go_to_line(':ESC.APOS:SUBLIST<4,LX,LXL>:ESC.APOS:'); return false;">':SUBLIST<4,LX,LXL>:'</a>'      IF LXL < CL.CNT THEN EA.CALLS := ", "    NEXT LXL  END  IF LX <= INC.CNT THEN    URL.INCFILE = INCLIST<1,LX>    CALL SUB.URL.ENCODE(URL.INCFILE)    URL.INCITEM = INCLIST<2,LX>    CALL SUB.URL.ENCODE(URL.INCITEM)    INCFNAME = INCLIST<1,LX>    INCNAME = INCLIST<2,LX>    CALL SWAP(INCNAME,"'","\'")    CALL SWAP(INCFNAME,"'","\'")    EA.INCS := '<tr><td>':INCFNAME:'</td><td><a target="':URL.INCFILE:'_':URL.INCITEM:'" href="/dbc/MVDB.WEB.ED?':ACCT.LINK:'ed_file=':URL.INCFILE:'&ed_item=':URL.INCITEM:'">':INCNAME:'</a>'    EA.INCS := '</td><td>'    IN.CNT = DCOUNT( INCLIST<4,LX>, @SVM )    FOR LXL = 1 TO IN.CNT      EA.INCS := '<a href="#" onclick="javascript:editArea.go_to_line(':ESC.APOS:INCLIST<4,LX,LXL>:ESC.APOS:'); return false;">':INCLIST<4,LX,LXL>:'</a> '      IF LXL < IN.CNT THEN EA.INCS := ", "    NEXT LXL  END  IF LX <= FILE.CNT THEN    FOR FOPX = 1 TO DCOUNT( FILELIST<3,LX>, @SVM )      IF FOPX = 1 THEN SHOW.FILENAME = FILELIST<1,LX> ELSE SHOW.FILENAME = '&nbsp;'      EA.FILES := '<tr><td>':SHOW.FILENAME:'</td><td>':FILELIST<3,LX,FOPX>      EA.FILES := '</td><td>'      IN.CNT = DCOUNT( FILELIST<5,LX,FOPX>, "," )      FOR LXL = 1 TO IN.CNT        LNO = FIELD( FILELIST<5,LX,FOPX>,',',LXL)        EA.FILES := '<a href="#" onclick="javascript:editArea.go_to_line(':ESC.APOS:LNO:ESC.APOS:'); return false;">':LNO:'</a>'        IF LXL < IN.CNT THEN EA.FILES := ", "      NEXT LXL      EA.FILES := '</td></tr>'    NEXT FOPX  ENDNEXT LXIF SUB.CNT THEN  EA.CALLS := '</td></tr></tbody></table>'ENDIF INC.CNT THEN  EA.INCS := '</td></tr></tbody></table>'ENDIF FILE.CNT THEN  EA.FILES := '</tbody></table>'END*ARC.LIST = ""ARC.CNT = 0IF ARCHIVE THEN  * Archiving is enabled. Find a list of archived copies of this file  IF acct = "" THEN USE.ACCT = myacct ELSE USE.ACCT = acct  CMD = 'SSELECT MV.WEB.ED.ARCHIVE WITH ACCT = "':USE.ACCT:'" AND WITH FILE.NAME = "':filename:'" AND WITH ITEM = "':item:'" BY-DSND DATE BY-DSND TIME'  EXECUTE CMD CAPTURING JUNK  IF SYSTEM(11) THEN    ARC.LIST = '<table width="100%"><tbody><tr><th>Date</th><th>Time</th><th>Open</th></tr>'    ARC.CNT = SYSTEM(11)    LOOP      READNEXT AID ELSE EXIT      READV DT.STAMP FROM F.ED.ARCHIVE, AID, 1 ELSE DT.STAMP = ""      ARC.LIST := '<tr><td>':OCONV(FIELD(DT.STAMP,'*',2),'D2/'):'</td><td>':OCONV(FIELD(DT.STAMP,'*',1),'MTS'):'</td><td>'      URL.AID = AID      CALL SUB.URL.ENCODE(URL.AID)      ARC.LIST := '<a href="/dbc/MVDB.WEB.ED?ed_acct=MVDB&ed_file=MV.WEB.ED.ARCHIVE&ed_item=':URL.AID:'" target="MVDB_MV.WEB.ED.ARCHIVE_':URL.AID:'">Open</a>'      ARC.LIST := '</td></tr>'    REPEAT    ARC.LIST := '</tbody></table>'  ENDEND*CALL SWAP(HTML,'<!-- EA_CALLS_CONTENT -->',EA.CALLS)CALL SWAP(HTML,'<!-- EA_INCLUDES_CONTENT -->',EA.INCS)CALL SWAP(HTML,'<!-- EA_FILES_CONTENT -->',EA.FILES)CALL SWAP(HTML,'<!-- EA_ARCHIVE_CONTENT -->',ARC.LIST)CALL SWAP(HTML,'<!-- NUM_OF_CALLS -->',SUB.CNT)CALL SWAP(HTML,'<!-- NUM_OF_INCLUDES -->',INC.CNT)CALL SWAP(HTML,'<!-- NUM_OF_FILES -->',FILE.CNT)CALL SWAP(HTML,'<!-- NUM_OF_ARCHIVES -->',ARC.CNT)CALL SWAP(HTML,'<!-- ED_SCRIPTS -->',EDIT.SCRIPTS)CALL WEB.SEND(HTML)GLOBAL.INFO(100) = 1 ;* Intentional stopSTOP*ADD.MESSAGE: **CALL SWAP(HTML,'<!-- HEADER -->',HMESSAGE)CALL SWAP(HTML,'<!-- FOOTER -->',FMESSAGE)RETURN*BUILD.SUBLIST: * Build a list of subroutines called by this program*IDX.POS = 1LPOS = 1LOOP  POS = INDEX( record, "CALL ", IDX.POS )WHILE POS DO  LINE.NUM = DCOUNT(record[1,POS+1],@AM)  LINE = TRIM(record<LINE.NUM>)  IF LINE[1,1] # "*" AND LINE[1,1] # "!" THEN    CALL.POS = INDEX( LINE, 'CALL ', 1 )    QCPOS = CALL.POS    GOSUB QUOTE.CHECK ;* Make sure the "CALL " is not in a quote    SKIP.LINE = 0    IF IN.QUOTE THEN SKIP.LINE = 1 ELSE      MID.CMNT.POS = INDEX(LINE,';*',1)      IF MID.CMNT.POS AND MID.CMNT.POS < CALL.POS THEN        * Is the mid-line comment within a quote?        QCPOS = MID.CMNT.POS        GOSUB QUOTE.CHECK        IF NOT(IN.QUOTE) THEN SKIP.LINE = 1      END    END    IF SKIP.LINE THEN ;* This is happening inside a literal string, ignore it.      IDX.POS += 1      CONTINUE    END    TEMP.STR = LINE[1,CALL.POS]    SUBNAME = LINE[CALL.POS+5,999]    IF INDEX( SUBNAME,'(',1) THEN      SUBNAME = FIELD( SUBNAME, '(', 1 )    END ELSE SUBNAME = FIELD(SUBNAME,' ',1)    SUBNAME = TRIM(SUBNAME)    *    READ CATPTR FROM F.MD, SUBNAME ELSE CATPTR = ""    IF CATPTR # "" THEN      *PJS 07-09-15 BEGIN QM*      *SUBFILE = FIELD( CATPTR<4>, ' ', 1 )      SUBFILE=filename      NDS = DCOUNT(CATPTR<3>, @DS)      IF NDS >= 2 THEN        SUBPATH = FIELD(CATPTR<3>,@DS,NDS-1)        IF SUBPATH[LEN(SUBPATH)-3,4]='.OUT' THEN SUBFILE=SUBPATH[1,LEN(SUBPATH)-4]      END      *PJS 07-09-15 END QM*    END ELSE SUBFILE = filename        UKEY = SUBFILE:"*":SUBNAME    LOCATE UKEY IN SUBLIST<3> SETTING FOUND.POS THEN      SUBLIST<4,FOUND.POS,-1> = LINE.NUM    END ELSE      SUBLIST<1,LPOS> = SUBFILE      SUBLIST<2,LPOS> = SUBNAME      SUBLIST<3,LPOS> = UKEY      SUBLIST<4,LPOS> = LINE.NUM      LPOS += 1    END  END  IDX.POS += 1REPEATRETURN*BUILD.INCLIST: * Build a list of include items used by this program*IDX.POS = 1LPOS = 1LOOP  POS = INDEX( record, "INCLUDE ", IDX.POS )WHILE POS DO  LINE.NUM = DCOUNT(record[1,POS+1],@AM)  LINE = TRIM(record<LINE.NUM>)  SEMI.POS = INDEX( LINE, ';', 1 )  IF SEMI.POS THEN LINE = LINE[1,SEMI.POS-1]  IF TRIM(LINE[1,8]) = "INCLUDE" THEN    INC.POS = INDEX( LINE, 'INCLUDE ', 1 )    QCPOS = INC.POS    GOSUB QUOTE.CHECK    IF IN.QUOTE THEN ;* This is happening inside a literal string, ignore it.      IDX.POS += 1      CONTINUE    END    INCPARAM = LINE[INC.POS+8,999]    INCFILE = FIELD( INCPARAM, ' ', 1 )    INCITEM = FIELD( INCPARAM, ' ', 2 )    IF INCITEM = '' THEN      INCITEM = INCFILE      INCFILE = filename    END    UKEY = INCFILE:"*":INCITEM    LOCATE UKEY IN INCLIST<3> SETTING FOUND.POS THEN      INCLIST<4,FOUND.POS,-1> = LINE.NUM    END ELSE      INCLIST<1,LPOS> = INCFILE      INCLIST<2,LPOS> = INCITEM      INCLIST<3,LPOS> = UKEY      INCLIST<4,LPOS> = LINE.NUM      LPOS += 1    END  END  IDX.POS += 1REPEATRETURN*BUILD.FILELIST: * Build a list of files used by this program*IDX.POS = 1LPOS = 1LOOP  POS = INDEX( record, "OPEN ",IDX.POS )WHILE POS DO  LINE.NUM = DCOUNT(record[1,POS+1],@AM)  LINE = TRIM(record<LINE.NUM>)  IF LINE[1,1] # "*" AND LINE[1,1] # "!" THEN    OPOS = INDEX( LINE, 'OPEN ', 1 )    QCPOS = OPOS    GOSUB QUOTE.CHECK ;* Make sure this doesn't appear inside a literal string    IF IN.QUOTE THEN      IDX.POS += 1      CONTINUE    END    CONVERT "'" TO '"' IN LINE ;* Standaraize the quote character    CONVERT "\" TO '"' IN LINE    * An open statement may look like this: OPEN "","FILENAME"  - Get rid of the "", if it exists    DPOS = INDEX( LINE, '"",', 1 )    IF DPOS THEN      LINE = LINE[1,DPOS-1]:LINE[DPOS+3,999]    END    OPARAM = LINE[OPOS+5,999]    TPOS = INDEX( OPARAM, ' TO ', 1 )    IF NOT(TPOS) THEN      IDX.POS += 1      CONTINUE ;* Must not be an open statement.    END    FILEVAR = OPARAM[TPOS+4,999]    FILEVAR = FIELD( TRIM( FILEVAR ), ' ', 1 )    OPARAM = OPARAM[1,TPOS]*3-9-15*    FILENAME = TRIM(OPARAM)*3-9-15*    IF FILENAME[1,1] = '"' THEN FILENAME = FIELD(FILENAME,'"',2)*3-9-15*    UKEY = FILENAME:"*":FILEVAR    FILENAME.VAR = TRIM(OPARAM); *3-9-15*    IF FILENAME.VAR[1,1] = '"' THEN FILENAME.VAR = FIELD(FILENAME.VAR,'"',2); *3-9-15*    UKEY = FILENAME.VAR:"*":FILEVAR; *3-9-15*    LOCATE UKEY IN FILELIST<4> SETTING FOUND.POS THEN      FILELIST<5,FOUND.POS,-1> = LINE.NUM    END ELSE*3-9-15*      FILELIST<1,LPOS> = FILENAME      FILELIST<1,LPOS> = FILENAME.VAR; *3-9-15*      FILELIST<2,LPOS> = FILEVAR      FILELIST<3,LPOS,1> = "Open"      FILELIST<4,LPOS> = UKEY      FILELIST<5,LPOS,1> = LINE.NUM      F.R.IDX = 1; F.R.LINES = ""      LOOP        F.R.POS = INDEX( record, "FROM ":FILEVAR, F.R.IDX )      WHILE F.R.POS DO        F.R.IDX += 1        IF F.R.LINES # "" THEN F.R.LINES := ","        F.R.LINES := DCOUNT(record[1,F.R.POS+1],@AM)      REPEAT      IF F.R.IDX > 1 THEN        * Read operation        FILELIST<3,LPOS,-1> = "Read"        FILELIST<5,LPOS,-1> = F.R.LINES      END      *      F.W.IDX = 1 ; F.W.LINES = ""      LOOP        F.W.POS =  INDEX( record, "ON ":FILEVAR, F.W.IDX )      WHILE F.W.POS DO        F.W.IDX += 1        IF F.W.LINES # "" THEN F.W.LINES := ","        F.W.LINES := DCOUNT(record[1,F.W.POS+1],@AM)      REPEAT      IF F.W.IDX > 1 THEN        * Write operation        FILELIST<3,LPOS,-1> = "Write"        FILELIST<5,LPOS,-1> = F.W.LINES      END      *      F.D.IDX = 1 ; F.D.LINES = ""      LOOP        F.D.POS =  INDEX( record, "DELETE ":FILEVAR, F.D.IDX )      WHILE F.D.POS DO        F.D.IDX += 1        IF F.D.LINES # "" THEN F.D.LINES := ","        F.D.LINES := DCOUNT(record[1,F.D.POS+1],@AM)      REPEAT      IF F.D.IDX > 1 THEN        * Delete operation        FILELIST<3,LPOS,-1> = "Delete"        FILELIST<5,LPOS,-1> = F.D.LINES      END      LPOS += 1    END  END  IDX.POS += 1REPEATRETURN*QUOTE.CHECK: * Is the data in LINE at QCPOS inside quotes?*CURR.Q = ""FOR SEEK.POS = 1 TO QCPOS  QCH = LINE[SEEK.POS,1]  BEGIN CASE    CASE CURR.Q # ""      IF QCH = CURR.Q THEN        CURR.Q = ""      END    CASE QCH = "'" ; CURR.Q = QCH    CASE QCH = '"' ; CURR.Q = QCH    CASE QCH = '\' ; CURR.Q = QCH  END CASENEXT SEEK.POSIF CURR.Q # "" THEN IN.QUOTE = 1 ELSE IN.QUOTE = 0RETURN006302MVDB.ADMIN0c2* Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Administration area of Bravo Dashboard** 6-4-15 PETER SCHELLENBACH OF ZUMASYS - MODIFIED FOR QM*          CHANGE OCONV(X,'U3060') TO MD5(X)** 09-23-16 Peter Schellenbach*  Add support for alternate logo defined for each user (MVDB.USERS attr 7).*  Requires corresponding changes in WEB.FORMS admin_template.html and*  javascripts initAdminTemplate.js to edit the alternate logo field.**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.USERSINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*DIM DB.AREAS(5)*OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MVDB.SUBS' TO F.MVDB.SUBS ELSE STOP 201, 'MVDB.SUBS'OPEN '','MVDB.USERS' TO F.MVDB.USERS ELSE STOP 201, 'MVDB.USERS'OPEN '','MVDB.DEFS' TO F.MVDB.DEFS ELSE STOP 201, 'MVDB.DEFS'OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE STOP 201, 'MVDB.WIDGET.TYPES'OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'OPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE STOP 201, 'MVDB.THEMES'*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDENDIF THEME.CSS # '' THEN THEME.CSS = '<link rel="Stylesheet" href="/db/themes/':THEME.CSS:'" media="screen" type="text/css" />'IF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'**SESSION$GLOBAL.DEBUG = 1*GLOBAL.INFO(100) = 0CALL GET.SESSION.VAR("adminauth",adminauth)CALL PUT.SESSION.VAR("dd_mode",0)adminpass = ""IF adminauth # 1 THEN  FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'  FORM := '</head><body><p>Administrative priviledges are required. '  FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'  CALL WEB.SEND(FORM)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPEND*LOCATE "action" IN CGI$VARS SETTING POS THEN  action = CGI$VALS<POS>END ELSE action = ""LOCATE "filter" IN CGI$VARS SETTING POS THEN  filter = CGI$VALS<POS>END ELSE  CALL GET.SESSION.VAR("widget_filter",filter)ENDLOCATE "clearfilter" IN CGI$VARS SETTING POS THEN  filter = ""ENDCALL PUT.SESSION.VAR("widget_filter",filter)*LOCATE "unfail_widget" IN CGI$VARS SETTING POS THEN  UNFAIL.WIDGET = CGI$VALS<POS>  CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  LOCATE UNFAIL.WIDGET IN FAILED.WIDGETS SETTING DPOS THEN    FAILED.WIDGETS = DELETE( FAILED.WIDGETS, DPOS, 0, 0 )    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  END  action = "widgets"END*ACTIVE.MENU = ''HTML = ''SCRIPTS = ""BEGIN CASE  CASE action = "users" OR action = ""    GOSUB LOAD.USERS  CASE action = "widgets"    GOSUB LOAD.WIDGETS  CASE action = "save_widget"    LOCATE "save_widget" IN CGI$VARS SETTING POS THEN      LOCATE "save_widgetid" IN CGI$VARS SETTING POS THEN        save.widgetid = CGI$VALS<POS>        LOCATE "newwidget" IN CGI$VARS SETTING POS THEN          newwidget = (CGI$VALS<POS> = 1)        END ELSE newwidget = ""        IF newwidget = 1 THEN          LOCATE "new_widgetid" IN CGI$VARS SETTING POS THEN            save.widgetid = CGI$VALS<POS>          END        END ELSE newwidget = 0        IF newwidget THEN          MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, save.widgetid THEN            SQN = 1            LOOP              new.saveid = save.widgetid:"-":SQN              MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, new.saveid THEN                SQN += 1              END ELSE                save.widgetid = new.saveid                EXIT              END            REPEAT          END        END        IF save.widgetid # "" THEN          MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, save.widgetid ELSE MAT WIDGET.ITEM = ''          LOCATE "widget_sub" IN CGI$VARS SETTING POS THEN            WIDGET.SUB = CGI$VALS<POS>          END          LOCATE "widget_users" IN CGI$VARS SETTING POS THEN            USER.LIST = CGI$VALS<POS>            CONVERT "," TO @VM IN USER.LIST            WIDGET.USERS = USER.LIST          END ELSE WIDGET.USERS = ""          LOCATE "new_widget_name" IN CGI$VARS SETTING POS THEN            NEW.NAME = CGI$VALS<POS>            IF NEW.NAME = save.widgetid THEN NEW.NAME = ""          END ELSE NEW.NAME = ""          IF NEW.NAME # "" THEN            * A rename of the widget has occurred.            MATWRITE WIDGET.ITEM ON F.MVDB.WIDGETS, NEW.NAME            DELETE F.MVDB.WIDGETS, save.widgetid            * Rename instances of this widget name within dashboard definitions            SELECT F.MVDB.DEFS            LOOP              READNEXT DBID ELSE EXIT              MATREADU DB.ITEM FROM F.MVDB.DEFS, DBID ELSE CONTINUE              LOOP                LOCATE save.widgetid IN DB.WIDGETS<1> SETTING RPOS THEN                  FOUND = 1                  DB.WIDGETS<1,RPOS> = NEW.NAME                END ELSE FOUND = 0              WHILE FOUND DO REPEAT              MATWRITE DB.ITEM ON F.MVDB.DEFS, DBID            REPEAT          END ELSE            MATWRITE WIDGET.ITEM ON F.MVDB.WIDGETS, save.widgetid          END        END      END    END ELSE      LOCATE "delete_widget" IN CGI$VARS SETTING POS THEN        LOCATE "save_widgetid" IN CGI$VARS SETTING POS THEN          save.widgetid = CGI$VALS<POS>          DELETE F.MVDB.WIDGETS, save.widgetid        END      END    END    GOSUB LOAD.WIDGETS  CASE action = "dashboards"    GOSUB LOAD.DASHBOARDS  CASE action = "editdb" OR action = "adddb"    ACTIVE.MENU = "DASHBOARDS"    READ INNER.TEMPLATE FROM F.WEB.FORMS, "admin_dashboards.html" ELSE INNER.TEMPLATE = "admin_dashboards.html not found"    DASHBOARD.LIST = ''    EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNK    LOOP      READNEXT ID ELSE EXIT      DASHBOARD.LIST<-1> = ID    REPEAT    CALL SWAP(DASHBOARD.LIST, CHAR(254), '","')    DASHBOARD.LIST = '"':DASHBOARD.LIST:'"'    CALL SWAP(INNER.TEMPLATE,'<!-- list_of_dashboard_ids -->',DASHBOARD.LIST)    *    IF action = "adddb" THEN      edit.id = "new_db"      EDIT.PROMPT = '<input id="edit_dbid" type="text" value="Untitled Dashboard" name="edit_dbid"/>'      CALL SWAP(INNER.TEMPLATE,'<!-- save_dbid -->',edit.id)      CALL SWAP(INNER.TEMPLATE,'<!-- edit_dbid -->',EDIT.PROMPT)      MAT DB.ITEM = ''    END ELSE      LOCATE "edit_dbid" IN CGI$VARS SETTING POS THEN        edit.id = CGI$VALS<POS>      END ELSE edit.id = ""      *      MATREAD DB.ITEM FROM F.MVDB.DEFS, edit.id ELSE MAT DB.ITEM = ''      *      EDIT.PROMPT = '<input id="db_id" type="text" value="':edit.id:'" name="db_new_id" size="63" />'       CALL SWAP(INNER.TEMPLATE,'<!-- save_dbid -->',edit.id)      CALL SWAP(INNER.TEMPLATE,'<!-- edit_dbid -->',EDIT.PROMPT)    END    CALL MVDB.SUB.WIDGET.LIST(WIDGET.LIST)    *    SCRIPT1 = 'var widgetList = new Array("");':CHAR(10)    CALL SWAP(INNER.TEMPLATE,'<!-- db_desc -->',DB.DESC)    CALL SWAP(INNER.TEMPLATE,'<!-- db_sort -->',DB.SORT)    *    *DB.THEME db_theme select list    *    theme.select = '<select name="db_theme">'    theme.select := CHAR(10):'<option value="">Default Theme</option>'    EXECUTE 'SSELECT MVDB.THEMES' CAPTURING JUNK    THEME.LIST = ''    LOOP      READNEXT THEME.ID ELSE EXIT      READV CSS.NAME FROM F.MVDB.THEMES, THEME.ID, 1 ELSE CSS.NAME = ''      IF CSS.NAME # '' THEN        SELECTED = ''        IF THEME.ID = DB.THEME THEN SELECTED = ' selected'        theme.select := CHAR(10):'<option value="':THEME.ID:'"':SELECTED:'>':THEME.ID:'</option>'      END    REPEAT    theme.select := CHAR(10):'</select>':CHAR(10)    CALL SWAP(INNER.TEMPLATE,'<!-- db_theme -->',theme.select)        CALL SWAP(INNER.TEMPLATE,'<!-- db_sort -->',DB.SORT)    *    SHOW.USERS = DB.USERS.ALLOWED    CONVERT @VM TO "," IN SHOW.USERS    CALL SWAP(INNER.TEMPLATE,'<!-- db_users -->',SHOW.USERS)    *    ACTIVE1 = "" ; ACTIVE2 = "" ; ACTIVE3 = ""    IF DB.TEMPLATE = "" THEN DB.TEMPLATE = 1    SCRIPT1 := 'var defaultLayout=':DB.TEMPLATE:';':CHAR(10)    BEGIN CASE      CASE DB.TEMPLATE = 3 ; ACTIVE3 = 'class="active"'      CASE DB.TEMPLATE = 2 ; ACTIVE2 = 'class="active"'      CASE DB.TEMPLATE = 1 OR 1 ; ACTIVE1 = 'class="active"'    END CASE    LAYOUT.OPTS  = '<li ':ACTIVE1:'><label>1 column</label><img alt="1" src="/db/images/1-column-layout.png" /></li>'    LAYOUT.OPTS := '<li ':ACTIVE2:'><label>2 column</label><img alt="2" src="/db/images/2-column-layout.png" /></li>'    LAYOUT.OPTS := '<li ':ACTIVE3:'><label>3 column</label><img alt="3" src="/db/images/3-column-layout.png" /></li>'    *    CALL SWAP(INNER.TEMPLATE,'<!-- db_layout_opts -->',LAYOUT.OPTS)    *    * Create a list of widgets by area    *    MAT DB.AREAS = ""    FOR X = 1 TO DCOUNT( DB.WIDGETS, @VM )      WID = DB.WIDGETS<1,X>      CALL SWAP(WID,'"','\"')      LOCATE WID IN WIDGET.LIST<1> SETTING WPOS THEN        WWIDTH = WIDGET.LIST<6,WPOS>        WTYPE = WIDGET.LIST<4,WPOS>        FAIL.TEXT = WIDGET.LIST<8,WPOS>      END ELSE        WTYPE = "UNKNOWN"        WWIDTH = 1        FAIL.TEXT = ""      END      THIS.AREA = DB.WIDGET.AREA<1,X>      IF NOT(THIS.AREA MATCHES "1N") THEN THIS.AREA = 1      IF THIS.AREA < 1 OR THIS.AREA > 5 THEN THIS.AREA = 1      MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, WTYPE THEN        CLASS.NAME = FIELD(WT$ICON,'.',1)        CONVERT "_" TO "-" IN CLASS.NAME        WIDTH.CLASS = ""        BEGIN CASE          CASE WWIDTH = 1 ; WIDTH.CLASS = 'widget-small'          CASE WWIDTH = 2 ; WIDTH.CLASS = 'widget-medium'          CASE WWIDTH = 3 OR 1; WIDTH.CLASS = 'widget-large'        END CASE        SHOW.WID = WID        IF FAIL.TEXT # "" THEN SHOW.WID := " (":FAIL.TEXT:")"        DB.AREAS(THIS.AREA) := '<div name="':WID:'" class="':CLASS.NAME:'"><span type="':WTYPE:'" class="':WIDTH.CLASS:'" >':SHOW.WID:'</span></div>'      END    NEXT X    FOR X = 1 TO 5      CALL SWAP(INNER.TEMPLATE,'<!-- AREA_':X:'_WIDGETS -->',DB.AREAS(X))    NEXT X    *    * Build widget option list    *    WOPTS = ''    ALL.WIDGET.CNT = DCOUNT( WIDGET.LIST<1>, @VM )    FOR X = 1 TO ALL.WIDGET.CNT      USE.DESC = WIDGET.LIST<2,X>      WID = WIDGET.LIST<1,X>      WDESC = WIDGET.LIST<2,X>      WTYPE = WIDGET.LIST<4,X>      WWIDTH = WIDGET.LIST<6,X>      FAIL.TEXT = WIDGET.LIST<8,X>      CALL SWAP(WDESC,'"','\"')      CALL SWAP(WID,'"','\"')      MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, WTYPE THEN        CLASS.NAME = FIELD(WT$ICON,'.',1)        CONVERT "_" TO "-" IN CLASS.NAME        WIDTH.CLASS = ""        BEGIN CASE          CASE WWIDTH = 1 ; WIDTH.CLASS = 'widget-small'          CASE WWIDTH = 2 ; WIDTH.CLASS = 'widget-medium'          CASE WWIDTH = 3 OR 1; WIDTH.CLASS = 'widget-large'        END CASE        SHOW.WID = WID        IF FAIL.TEXT # "" THEN SHOW.WID := " (":FAIL.TEXT:")"        WOPTS := '<div class="':CLASS.NAME:'"><span name="':WID:'" class="widget-id ':WIDTH.CLASS:'" type="':WTYPE:'">':SHOW.WID:'</span></div>':CHAR(10)      END      SCRIPT1 := \widgetList["\:WID:\"] = new Array("\:WDESC:\","\:WTYPE:\","\:WIDGET.LIST<6,X>:\");\    NEXT X    *    GOSUB MAKE.DB.SCRIPT    SCRIPTS<-1> = SCRIPT1    *    CALL SWAP(INNER.TEMPLATE,'<!-- widget_list -->',WOPTS)    HTML = INNER.TEMPLATE  CASE action = "save_db"    LOCATE "save_db" IN CGI$VARS SETTING POS THEN      SAVE.OK = 1      rename.id = ""      LOCATE "save_dbid" IN CGI$VARS SETTING POS THEN        save.id = CGI$VALS<POS>        IF save.id = "new_db" THEN          LOCATE "edit_dbid" IN CGI$VARS SETTING POS THEN            save.id = CGI$VALS<POS>          END ELSE save.id = ""          IF save.id = "" THEN SAVE.OK = 0 ELSE            MATREAD DB.ITEM FROM F.MVDB.DEFS, save.id THEN SAVE.OK = 0          END        END ELSE          LOCATE "db_new_id" IN CGI$VARS SETTING POS THEN            rename.id = CGI$VALS<POS>          END        END        CONVERT '"\' TO '' IN rename.id        CONVERT '"\' TO '' IN save.id        IF SAVE.OK THEN          MATREAD DB.ITEM FROM F.MVDB.DEFS, save.id ELSE MAT DB.ITEM = ''          LOCATE "db_desc" IN CGI$VARS SETTING POS THEN            DB.DESC = CGI$VALS<POS>          END          LOCATE "db_theme" IN CGI$VARS SETTING POS THEN            DB.THEME = CGI$VALS<POS>          END          LOCATE "db_sort" IN CGI$VARS SETTING POS THEN            DB.SORT = CGI$VALS<POS>          END          LOCATE "db_layout" IN CGI$VARS SETTING POS THEN            DB.TEMPLATE = CGI$VALS<POS>          END          LOCATE "db_users" IN CGI$VARS SETTING POS THEN            DB.USERS.ALLOWED = CGI$VALS<POS>          END          CONVERT "," TO @VM IN DB.USERS.ALLOWED          *          LOCATE "widgets" IN CGI$VARS SETTING POS THEN            WIDGET.LIST = CGI$VALS<POS>          END ELSE WIDGET.LIST = ""          CONVERT CHAR(13) TO @AM IN WIDGET.LIST          CONVERT CHAR(10) TO "" IN WIDGET.LIST          WCNT = DCOUNT( WIDGET.LIST, @AM )          DB.WIDGETS = ''          DB.WIDGET.AREA = ''          DB.WIDGET.ORDER = ''          FOR WX = 1 TO WCNT            THIS.W = WIDGET.LIST<WX>            DB.WIDGET.AREA<1,WX> = FIELD( THIS.W, ',', 1 )            DB.WIDGET.ORDER<1,WX> = FIELD( THIS.W,',', 2 )            DB.WIDGETS<1,WX> = OCONV(THIS.W,'G2,99' )          NEXT WX          IF rename.id # "" AND rename.id # save.id THEN            DELETE F.MVDB.DEFS, save.id            MATWRITE DB.ITEM ON F.MVDB.DEFS, rename.id          END ELSE            MATWRITE DB.ITEM ON F.MVDB.DEFS, save.id          END        END      END    END ELSE      LOCATE "delete_db" IN CGI$VARS SETTING POS THEN        LOCATE "save_dbid" IN CGI$VARS SETTING POS THEN          del.id = CGI$VALS<POS>          DELETE F.MVDB.DEFS, del.id        END      END    END    GOSUB LOAD.DASHBOARDS  CASE action = "save_user"    LOCATE "save_userid" IN CGI$VARS SETTING POS THEN      save.userid = CGI$VALS<POS>      LOCATE "delete_user" IN CGI$VARS SETTING POS THEN        DELETE F.MVDB.USERS, save.userid      END ELSE        LOCATE "newuser" IN CGI$VARS SETTING POS THEN          newuser = 1          LOCATE "new_userid" IN CGI$VARS SETTING POS THEN            save.userid = CGI$VALS<POS>          END        END ELSE newuser = 0        SAVE.OK = 1        IF newuser THEN          MATREAD USER.ITEM FROM F.MVDB.USERS, save.userid THEN            SAVE.OK = 0          END        END        IF SAVE.OK AND save.userid # "" THEN          MATREAD USER.ITEM FROM F.MVDB.USERS, save.userid ELSE MAT USER.ITEM = ''          LOCATE "username" IN CGI$VARS SETTING POS THEN            USER.NAME = CGI$VALS<POS>          END          LOCATE "default_dashboard" IN CGI$VARS SETTING POS THEN            USER.DEFAULT.DB = CGI$VALS<POS>          END          LOCATE "user_password" IN CGI$VARS SETTING POS THEN            IF CGI$VALS<POS> # "" THEN*6-4-15 QM*             USER.PASSWORD = OCONV(CGI$VALS<POS>,"U3060")              USER.PASSWORD = MD5(CGI$VALS<POS>) ; *6-4-15 QM*            END          END          LOCATE "user_role" IN CGI$VARS SETTING POS THEN            USER.ROLE = CGI$VALS<POS>          END          IF USER.ROLE = "" THEN USER.ROLE = "User"          * PJS 09-23-16 save optional user logo          LOCATE "opt_logo_path" IN CGI$VARS SETTING POS THEN            USER.ALT.LOGO = CGI$VALS<POS>          END ELSE            USER.ALT.LOGO = ""          END          MATWRITE USER.ITEM ON F.MVDB.USERS, save.userid        END      END    END    GOSUB LOAD.USERS  CASE 1    READ HTML FROM F.WEB.FORMS, "admin_menu.html" ELSE ADMIN.MENU = "admin_menu.html not found."END CASEREAD ADMIN.TEMPLATE FROM F.WEB.FORMS, "admin_template.html" ELSE ADMIN.TEMPLATE = "admin_template.html not found."CALL SWAP(ADMIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)HEADER = '<div id="dashboard_nav">'HEADER := '<ol class="dashboard_list">'IF ACTIVE.MENU = "USERS" THEN ACTIVE = 'class="db_active"' ELSE ACTIVE = ""HEADER := '<li ':ACTIVE:'><a href="':CGI$PATH:'/MVDB.ADMIN?action=users">Users</a></li>'IF ACTIVE.MENU = "WIDGETS" THEN ACTIVE = 'class="db_active"' ELSE ACTIVE = ""HEADER := '<li ':ACTIVE:'><a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets">Widgets</a></li>'IF ACTIVE.MENU = "DASHBOARDS" THEN ACTIVE = 'class="db_active"' ELSE ACTIVE = ""HEADER := '<li ':ACTIVE:'><a href="':CGI$PATH:'/MVDB.ADMIN?action=dashboards">Dashboards</a></li>'OPEN 'RSS.BP' TO F.RSS.BP THEN  HEADER := '<li><a href="':CGI$PATH:'/RSS.MAINT">RSS Feed Maintenance</a></li>'ENDOPEN 'MVPKG.DATA' TO F.MVPKG.DATA THEN  HEADER := '<li><a href="':CGI$PATH:'/MVPKG.MAIN">Package Manager</a></li>'ENDHEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN">Return to Dashboard</a></li>'HEADER := '</ol>'HEADER := '</div>'CALL SWAP(ADMIN.TEMPLATE,'<!-- HEADER -->',HEADER)FOOTER = ''CALL SWAP(ADMIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)*CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_MAIN -->',HTML)CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_SCRIPTS -->',SCRIPTS)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)CALL WEB.SEND(ADMIN.TEMPLATE)GLOBAL.INFO(100) = 1 ;* Process completed successfullySTOP*LOAD.USERS: **    ACTIVE.MENU = "USERS"    EXECUTE 'SSELECT MVDB.USERS' CAPTURING JUNK    HTML = '<table width="100%">'    HTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adduser" class="add-user">Add User</a></td></tr>'    HTML<-1> = '<tr><th>User ID</th>'    HTML<-1> = '<th>Name</th>'     HTML<-1> = '<th>Default Dashboard</th>'    HTML<-1> = '<th>Role</th>'    HTML<-1> = '<th>Action</th>'     HTML<-1> = '</tr>'    *    LOOP      READNEXT ID ELSE EXIT      MATREAD USER.ITEM FROM F.MVDB.USERS, ID ELSE MAT USER.ITEM = ""      IF USER.ROLE = "" THEN USER.ROLE = "User"      HTML<-1> = '<tr><td>':ID:'</td>'      HTML<-1> = '<td>':USER.NAME:'</td>'      HTML<-1> = '<td>':USER.DEFAULT.DB:'</td>'      CALL SWAP(ID,'"','\"')      CALL SWAP(USER.NAME,'"','\"')      CALL SWAP(USER.DEFAULT.DB,'"','\"')      CALL SWAP(USER.DEFAULT.DB,"'","&apos;")      * PJS 09-23-16: added USER.ALT.LOGO parameter to editUser()      ACTIONS = \&nbsp;<a href='javascript:editUser("\:ID:\","\:USER.NAME:\","\:USER.DEFAULT.DB:\","\:USER.ROLE:\","\:USER.ALT.LOGO:\");'><img title="Edit User" class="icon" src="/db/icons/user_edit.png" /></a>\      ACTIONS := \&nbsp;<a href='javascript:deleteUser("\:ID:\");'><img title="Delete User" class="icon" src="/db/icons/user_delete.png" /></a>\      HTML<-1> = '<td>':USER.ROLE:'</td>'      HTML<-1> = '<td>':ACTIONS:'</td>'      HTML<-1> = '</tr>'    REPEAT    HTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adduser" class="add-user">Add User</a></td></tr>'    HTML<-1> = '</table>'    *    GOSUB MAKE.DB.SCRIPTRETURN*LOAD.WIDGETS: **ACTIVE.MENU = "WIDGETS"CALL MVDB.SUB.WIDGET.LIST(WIDGET.LIST)FFORM = '<form action="':CGI$PATH:'/MVDB.ADMIN" method="get">'FFORM := '<input type="hidden" name="action" value="widgets">'FFORM := 'Filter: <input type="text" name="filter" value="':filter:'"> <input type=submit name=fbtn value="Go">'IF filter # "" THEN FFORM := ' <a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets&clearfilter">Clear Filter</a>'FFORM := '</form>'HTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="3"><a href="':CGI$PATH:'/MVDB.ADMIN?action=addwidget" class="add-widget">Add a Widget</a></td>'HTML<-1> = '<td colspan="4" align="right">':FFORM:'</td></tr>'HTML<-1> = '<tr><th colspan="2">Widget ID</th>'HTML<-1> = '<th>Type</th>' HTML<-1> = '<th>Description</th>' HTML<-1> = '<th>Subroutine</th>' HTML<-1> = '<th>Users Allowed</th>' HTML<-1> = '<th>Actions</th>' HTML<-1> = '</tr>'*WIDGET.CNT = DCOUNT( WIDGET.LIST<1>, @VM )FOR WDX = 1 TO WIDGET.CNT  ID = WIDGET.LIST<1,WDX>  WDESC = WIDGET.LIST<2,WDX>  WSUB = WIDGET.LIST<3,WDX>  WTYPE = WIDGET.LIST<4,WDX>  WTITLE = WIDGET.LIST<5,WDX>  WWIDTH = WIDGET.LIST<6,WDX>  FAIL.STATUS = WIDGET.LIST<7,WDX>  FAIL.TEXT = WIDGET.LIST<8,WDX>  MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, WTYPE ELSE MAT WIDGET.TYPES = ""  IF filter # "" THEN    FILTER.MATCH = 0    IF INDEX(WDESC,filter,1) THEN FILTER.MATCH = 1    IF INDEX(WTITLE,filter,1) THEN FILTER.MATCH = 1    IF INDEX(WSUB,filter,1) THEN FILTER.MATCH = 1  END ELSE FILTER.MATCH =1  IF FILTER.MATCH THEN    IF WT$ICON # "" THEN      ICON.IMG = '<img height="20" width="20" src="/db/icons/':WT$ICON:'" />'    END ELSE ICON.IMG = "&nbsp;"    ID.LINK = ID    CALL SUB.URL.ENCODE(ID.LINK)    ID.LINK = '<a href="':CGI$PATH:'/MVDB.MAIN?udview=':ID.LINK:'&dd" target="_blank" title="Open in new window">':ID:'</a>'    HTML<-1> = '<tr><td class="widget-name">':ID.LINK:'</td><td class="widget-icon">':ICON.IMG:'</td>'    HTML<-1> = '<td>':WTYPE:'</td>'    IF WTITLE = "" THEN WTITLE = WDESC    HTML<-1> = '<td>':WTITLE:'</td>'    ENC.WIDGET.SUB = WSUB    CALL SUB.URL.ENCODE(ENC.WIDGET.SUB)    HTML<-1> = '<td><a target="MVDB.SUBS_':ENC.WIDGET.SUB:'" href="':CGI$PATH:'/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=':ENC.WIDGET.SUB:'" title="Edit Source">':WSUB:'</a></td>'    MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, ID ELSE MAT WIDGET.ITEM = ""    IF WIDGET.USERS # "" THEN      SHOW.USERS = WIDGET.USERS      CONVERT @VM TO "," IN SHOW.USERS      PASS.USER.LIST = SHOW.USERS    END ELSE      SHOW.USERS = "Anybody"      PASS.USER.LIST = ""    END    HTML<-1> = '<td>':SHOW.USERS:'</td>'    CALL SWAP(WDESC,"'","\'")    CALL SWAP(WSUB,"'","\'")    CALL SWAP(PASS.USER.LIST,"'","\'")    URL.ID = ID    CALL SUB.URL.ENCODE(URL.ID)    CALL SWAP(ID,"'","\'")    ACTIONS = \<a href="javascript:editWidget('\:ID:\','\:WDESC:\','\:WSUB:\','\:PASS.USER.LIST:\');"><img title="Edit Widget" class="icon" src="/db/icons/cog_edit.png" /></a>\    ACTIONS := '&nbsp;'    ACTIONS := \<a href="javascript:copyWidget('Copy of \:ID:\','\:WDESC:\','\:WSUB:\','\:PASS.USER.LIST:\');"><img title="Copy Widget" class="icon" src="/db/icons/page_copy.png" /></a>\    ACTIONS := '&nbsp;'    ACTIONS := \<a href="javascript:deleteWidget('\:ID:\','\:WDESC:\','\:WSUB:\','\:PASS.USER.LIST:\');"><img title="Delete Widget" class="icon" src="/db/icons/cog_delete.png" /></a>\    IF FAIL.STATUS = 1 THEN      * This widget has a fatal error and has been added to the "failed_widgets" session variable. Allow the admin to reset this status.      ACTIONS := \&nbsp;<a href="/dbc/MVDB.ADMIN?unfail_widget=\:URL.ID:\&action=widgets"><img title="Reset Fail Status" class="icon" src="/db/icons/arrow_redo.png" /></a>\    END    HTML<-1> = '<td>':ACTIONS:'</td>'    HTML<-1> = '</tr>'  ENDNEXT WDXHTML<-1> = '<tr><td colspan="7"><a href="" class="add-widget">Add a Widget</a></td></tr>'HTML<-1> = '</table>'*SCRIPTS = 'var widgetList = new Array('EXECUTE "SSELECT MVDB.WIDGETS" CAPTURING JUNKFIRST = 1LOOP  READNEXT ID ELSE EXIT  CALL SWAP(ID,'"','\"')  IF NOT(FIRST) THEN SCRIPTS := ','  FIRST = 0  SCRIPTS := '"':ID:'"'REPEATSCRIPTS := ');'RETURN*LOAD.DASHBOARDS: **ACTIVE.MENU = "DASHBOARDS"EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNKHTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adddb" class="add-dashboard">Add A Dashboard</a></td></tr>'HTML<-1> = '<tr><th>Dashboard ID</th>'HTML<-1> = '<th>Description</th>' HTML<-1> = '<th>Users Allowed</th>' HTML<-1> = '<th>Actions</th>' HTML<-1> = '</tr>'*LOOP  READNEXT ID ELSE EXIT  MATREAD DB.ITEM FROM F.MVDB.DEFS, ID ELSE MAT DB.ITEM = ''  HTML<-1> = '<tr><td>':ID:'</td>'  HTML<-1> = '<td>':DB.DESC:'</td>'  IF DB.USERS.ALLOWED # "" THEN    SHOW.USERS = DB.USERS.ALLOWED    CONVERT @VM TO "," IN SHOW.USERS  END ELSE SHOW.USERS = "Anybody"  HTML<-1> = '<td>':SHOW.USERS:'</td>'  ACTIONS = '<a href="':CGI$PATH:'/MVDB.ADMIN?action=editdb&edit_dbid=':ID:'"><img title="Edit Dashboard" class="icon" src="/db/icons/layout_edit.png" /></a>&nbsp;'  ACTIONS := \<a onClick="return confirm('DELETE: Are you sure?');" href="\:CGI$PATH:\/MVDB.ADMIN?action=save_db&delete_db=1&save_dbid=\:ID:\"><img title="Delete Dashboard" class="icon" src="/db/icons/layout_delete.png" /></a>\  HTML<-1> = '<td>':ACTIONS:'</td>'  HTML<-1> = '</tr>'REPEATHTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adddb" class="add-dashboard">Add A Dashboard</a></td></tr>'HTML<-1> = '</table>'RETURN*MAKE.DB.SCRIPT: **SCRIPTS = 'var dashboardList = new Array('EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNKFIRST = 1LOOP  READNEXT ID ELSE EXIT  CALL SWAP(ID,'"','\"')  IF NOT(FIRST) THEN SCRIPTS := ','  FIRST = 0  SCRIPTS := '"':ID:'"'REPEATSCRIPTS := ');'RETURN0002DCGET.SESSION.VAR0c2SUBROUTINE GET.SESSION.VAR( var, VAL )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program reads a value from the current web*              session record.*#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)VAL = ''*READ REC FROM F.WEB.SESSION, SESSION$ID THEN  LOCATE var IN REC<1> SETTING POS THEN    VAL = REC<2,POS>  END ELSE    VAL = ''  ENDEND*CONVERT CHAR(2) TO @AM IN VALCONVERT CHAR(3) TO @VM IN VALCONVERT CHAR(4) TO @SVM IN VAL*CALL PUT.SESSION.VAR('LastSessionAccess', DATE():'*':TIME())*RETURN*000E53SUB.EXCEL.FUNC0c2SUBROUTINE SUB.EXCEL.FUNC(ACTION,SPREADSHEET,CSV.WIDGET.NAME)** Copyright (c) 2020 Zumasys, Inc. All rights reserved.* Description: EXCEL utility functions*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE***SPREADSHEET=''** ISOLATE THE TITLE*BEGIN CASE  CASE ACTION = 'generate'         * Use widget name to create a filename for the CSV file         OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'         CALL SUB.GET.NEXT.ID(UNIQUE.ID,F.MVDB.CONTROL)             CSV.FILE.NAME = CSV.WIDGET.NAME:'_' :UNIQUE.ID         CALL SET.CONTENT.TYPE('text/csv')         SESSION$HEADERS<-1> = 'Content-Disposition: attachment; filename="':CSV.FILE.NAME:'.csv"'         * Build the CSV content         GOSUB BUILD.SPREADSHEET.CONTENT         SPREADSHEET=CHANGE(SPREADSHEET,CHAR(254),CHAR(13):CHAR(10))         CSV.SIZE=LEN(SPREADSHEET)         SESSION$HEADERS<-1>='Content-Length:':CSV.SIZEEND CASERETURN*BUILD.SPREADSHEET.CONTENT:*BEGIN CASE   CASE W$TYPE = 'TABLE'      GOSUB TYPE.IS.TABLE      DASHBOARD.TYPE='Report'   CASE INDEX(W$TYPE,'COLUMN',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'BAR',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'LINE',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'AREA',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'PIE',1)      GOSUB TYPE.IS.PIE      DASHBOARD.TYPE='Pie'   CASE INDEX(W$TYPE,'DOUGHNUT',1)      GOSUB TYPE.IS.PIE      DASHBOARD.TYPE='Pie'END CASE** STRIP OUT HTML STUFF AND CONVERT TO CSV*MAX.ROWS=DCOUNT(SPREADSHEET,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=SPREADSHEET<ROW.NO>   *   * <br> to space   *   LOOP      POS=INDEX(ROW,'<br>',1)   UNTIL NOT(POS) DO      ROW=ROW[1,POS-1]:' ':(ROW[POS+4,9999])   REPEAT   *   * ISOLATE XXX IN ]<a hrev.....">XXX</a>]   *   LOOP      POS=INDEX(ROW,'</a>',1)   UNTIL NOT(POS) DO      VAL.NO=DCOUNT(ROW[1,POS],CHAR(253))      VAL=ROW<1,VAL.NO>      POS=INDEX(VAL,'</a>',1)      VAL=VAL[1,POS-1]      POS=INDEX(VAL,'">',1)      VAL=VAL[POS+2,999]      ROW<1,VAL.NO>=VAL   REPEAT   MAX.VALS=DCOUNT(ROW,CHAR(253))   FOR VAL.NO = 1 TO MAX.VALS      IF DASHBOARD.TYPE = 'Chart' AND VAL.NO > 1 THEN         VAL=ROW<1,VAL.NO>         IF NUM(VAL) AND NOT(INDEX(VAL,',',1)) THEN VAL=OCONV(VAL,'MD0,')         ROW<1,VAL.NO>=VAL       END      ROW<1,VAL.NO>='"':ROW<1,VAL.NO>:'"'    NEXT VAL.NO   SPREADSHEET<ROW.NO>=ROW NEXT ROW.NOCONVERT CHAR(253) TO ',' IN SPREADSHEETRETURN*TYPE.IS.TABLE:*SPREADSHEET<-1>=W$TABLE.COL.LABELSSPREADSHEET<-1>=W$TABLE.DATASPREADSHEET<-1>=W$TABLE.TOTALSRETURN*TYPE.IS.BAR.OR.COLUMN:*SPREADSHEET<-1>='Displayed as: ':W$BAR.YMEMOCOL.HEADINGS=W$BAR.LABELSCONVERT CHAR(254) TO CHAR(253) IN COL.HEADINGS;  * MULTI-SERIES MAY HAVE SEVERALIF COL.HEADINGS<1,2> = '' THEN;  * ONLY ONE THEN USE W$BAR.YMEMO   COL.HEADINGS=W$BAR.YMEMO ENDCOL.HEADINGS=INSERT(COL.HEADINGS,1,1,0,W$BAR.XMEMO)SPREADSHEET<-1>=COL.HEADINGSNUM.ROWS=DCOUNT(W$BAR.XLABELS,CHAR(253))NUM.COL.VALUES=DCOUNT(W$BAR.VALUES,CHAR(254))FOR ROW.NO = 1 TO NUM.ROWS   THIS.ROW=W$BAR.XLABELS<1,ROW.NO>   FOR COL.NO = 1 TO NUM.COL.VALUES      THIS.COL=W$BAR.VALUES<COL.NO,ROW.NO>      IF NUM(THIS.COL) THEN         IF THIS.COL > 999 THEN            THIS.COL=OCONV(THIS.COL,'MD0,')          END       END      THIS.ROW<1,COL.NO+1>=THIS.COL    NEXT COL.NO   SPREADSHEET<-1>=THIS.ROW NEXT ROW.NORETURN*TYPE.IS.PIE:*SPREADSHEET<-1>=W$PIE.LABELSSPREADSHEET<-1>=W$PIE.VALUESRETURNEND0009A5XML.DATA0c2CALL WDB.VARS(VARS, VALS)DISPLAY.TERM = 1WEB.DATA = ''LINE.CNT = 1NUM.BYTES = 0****************************************** q = number of bytes to quit early on* default is full dump****************************************LOCATE 'q' IN VARS SETTING POS THEN  q = VALS<POS>END ELSE  q = ''END****************************************** l = number of lines of text to print* default is 10000****************************************LOCATE 'l' IN VARS SETTING POS THEN  l = VALS<POS>END ELSE  l = 10000END****************************************** b = number of characters per line* default is 10****************************************LOCATE 'b' IN VARS SETTING POS THEN  b = VALS<POS>END ELSE  b = 10END****************************************** w = use web.load or print* if w is 0, then use WEB.LOAD* default is 0****************************************LOCATE 'w' IN VARS SETTING POS THEN  w = VALS<POS>END ELSE  w = 0END****************************************** p = number of seconds to pause before*     starting to send output* default is 0****************************************LOCATE 'p' IN VARS SETTING POS THEN  p = VALS<POS>END ELSE  p = 0END****************************************** s = which quit string to use* default = 800 WDB-COMPLETE****************************************LOCATE 's' IN VARS SETTING POS THEN  s = VALS<POS>END ELSE  s = '800 WDB-COMPLETE'END****************************************** MAIN PROGRAM****************************************IF w # 0 THEN  SLEEP pENDFOR X = 1 TO l  NUM.CHARS = LEN(LINE.CNT) + 1  LINE = ''  NUM.ZEROS = b - NUM.CHARS  FOR Y = 1 TO NUM.ZEROS    LINE := '0'    NUM.BYTES += 1  NEXT Y  LINE := LINE.CNT  NUM.BYTES += LEN(LINE.CNT) + 1 ; * this is for the line counter and the line break  GOSUB CHECK.EARLY.TERMINATE  IF w = 0 THEN    WEB.DATA<-1> = LINE    IF TERM.DATA # '' THEN      WEB.DATA<-1> = TERM.DATA    END  END ELSE    PRINT LINE    IF TERM.DATA # '' THEN      PRINT TERM.DATA    END  END  LINE.CNT += 1NEXT XIF w = 0 THEN  SLEEP p  CALL WEB.SEND(WEB.DATA)ENDSTOP*********************************************************************************CHECK.EARLY.TERMINATE:********************************************************************************TERM.DATA = ''IF q # '' AND NUM.BYTES >= q AND DISPLAY.TERM = 1 THEN  TERM.DATA = s:CHAR(10):CHAR(10)  DISPLAY.TERM = 0ENDRETURN*0001C9DESTROY.SESSION0c2SUBROUTINE DESTROY.SESSION** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program removes the session records**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE* Init*EQU FALSE TO 0, TRUE TO 1*EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*CALL SET.COOKIE("sessionid=; path=/")*DELETE F.WEB.SESSION, SESSION$IDRETURN*0021C5RSS.MAINT0c2** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: March 10, 2009* Description: RSS Feed Maintenance*INCLUDE WBPD WWW.INCLUDEINCLUDE RSS.BP RSS.DATA.INC*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE STOP 201, 'RSS.FEEDS'OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD'ENDOPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'OPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE STOP 201, 'MVDB.THEMES'*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDENDIF THEME.CSS # '' THEN THEME.CSS = '<link rel="Stylesheet" href="/db/themes/':THEME.CSS:'" media="screen" type="text/css" />'IF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*CALL GET.SESSION.VAR("adminauth",adminauth)CALL PUT.SESSION.VAR("dd_mode",0)adminpass = ""IF adminauth # 1 THEN  FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'  FORM := '</head><body><p>Administrative priviledges are required. '  FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'  CALL WEB.SEND(FORM)  STOPEND*LOCATE "action" IN CGI$VARS SETTING POS THEN  action = CGI$VALS<POS>END ELSE action = ""LOCATE "id" IN CGI$VARS SETTING POS THEN  id = CGI$VALS<POS>END ELSE id = ""LOCATE "cancel_edit" IN CGI$VARS SETTING POS THEN  action = "list"END*HTML = ''BEGIN CASE  CASE action = "edit" OR action = "add" AND 0 ;* This code is depricated    IF action = "edit" THEN      READ FEED.REC FROM F.RSS.FEEDS, id ELSE FEED.REC = ""    END ELSE FEED.REC = ""    FEED.NAME = FEED.REC<1>    FEED.DESC = FEED.REC<3>    CRLF = CHAR(13):CHAR(10)    CALL SWAP(FEED.DESC,'<br />',CRLF)    SEL.SUB = FEED.REC<4>    ITEM.SUB = FEED.REC<5>    READ INNER.TEMPLATE FROM F.WEB.FORMS, "rss_edit.html" ELSE INNER.TEMPLATE = "rss_edit.html missing"    IF action = "add" THEN      edit_id = '<input type="text" name="new_id" value="">'      id = "NEW"    END ELSE      edit_id = id    END    CALL SWAP(INNER.TEMPLATE,'<!-- feed_id -->',id)    CALL SWAP(INNER.TEMPLATE,'<!-- edit_feed_id -->',edit_id)    CALL SWAP(INNER.TEMPLATE,'<!-- feed_name -->',FEED.NAME)    CALL SWAP(INNER.TEMPLATE,'<!-- feed_desc -->',FEED.DESC)    CALL SWAP(INNER.TEMPLATE,'<!-- sel_sub -->',SEL.SUB)    CALL SWAP(INNER.TEMPLATE,'<!-- item_sub -->',ITEM.SUB)    *    SEL.SUB.MSG = '' ; ITEM.SUB.MSG = ''    IF SEL.SUB # "" THEN      READ TST FROM F.MD, SEL.SUB ELSE        SEL.SUB.MSG = 'Not Cataloged'      END    END    IF ITEM.SUB # "" THEN      READ TST FROM F.MD, ITEM.SUB ELSE        ITEM.SUB.MSG = 'Not Cataloged'      END    END    CALL SWAP(INNER.TEMPLATE,'<!-- sel_sub_msg -->',SEL.SUB.MSG)    CALL SWAP(INNER.TEMPLATE,'<!-- item_sub_msg -->',ITEM.SUB.MSG)    *    FEED.MODE.NAMES = FEED.REC<6>    FEED.MODE.PARAMS = FEED.REC<7>    FEED.MODES = ""    FOR N = 1 TO DCOUNT( FEED.MODE.NAMES<1>, @VM )      FEED.MODES<-1> = FEED.MODE.NAMES<1,N>:',':FEED.MODE.PARAMS<1,N>    NEXT N    CALL SWAP(FEED.MODES,@AM,CRLF)    CALL SWAP(INNER.TEMPLATE,'<!-- feed_modes -->',FEED.MODES)    HTML = INNER.TEMPLATE  CASE action = "delete" AND id # ""    DELETE F.RSS.FEEDS, id    GOSUB LOAD.FEEDS  CASE action = "save" AND id # ""    FEED.REC = ""    LOCATE "feed_name" IN CGI$VARS SETTING POS THEN      name = CGI$VALS<POS>    END ELSE name = ""    LOCATE "feed_desc" IN CGI$VARS SETTING POS THEN      desc = CGI$VALS<POS>    END ELSE desc = ""    CONVERT CHAR(13) TO "" IN desc    CALL SWAP(desc,CHAR(10),'<br />')    LOCATE "sel_sub" IN CGI$VARS SETTING POS THEN      sel_sub = CGI$VALS<POS>    END ELSE sel_sub = ""    LOCATE "item_sub" IN CGI$VARS SETTING POS THEN      item_sub = CGI$VALS<POS>    END ELSE item_sub = ""    FEED.REC<1> = name    FEED.REC<3> = desc    FEED.REC<4> = sel_sub    FEED.REC<5> = item_sub    LOCATE "feed_modes" IN CGI$VARS SETTING POS THEN      feed_modes = CGI$VALS<POS>    END ELSE feed.modes = ""    CONVERT CHAR(13) TO "" IN feed_modes    CONVERT CHAR(10) TO @AM IN feed_modes    FOR N = 1 TO DCOUNT( feed_modes, @AM )      IF TRIM( feed_modes<N> ) # "" THEN        FEED.REC<6,N> = TRIM( FIELD( feed_modes<N>, ',',  1 ) )        FEED.REC<7,N> = TRIM( FIELD( feed_modes<N>, ',',  2 ) )      END    NEXT N    IF id = "NEW" THEN      LOCATE "new_id" IN CGI$VARS SETTING POS THEN        id = CGI$VALS<POS>      END      IF id = "NEW" THEN id="NEW1"    END    IF id # "" THEN      WRITE FEED.REC ON F.RSS.FEEDS, id    END    GOSUB LOAD.FEEDS  CASE 1 ; * Action = list (default)    GOSUB LOAD.FEEDSEND CASE*READ ADMIN.TEMPLATE FROM F.WEB.FORMS, "rss_admin_template.html" ELSE ADMIN.TEMPLATE = "rss_admin_template.html not found."CALL SWAP(ADMIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)HEADER = '<div id="dashboard_nav">'HEADER := '<ol class="dashboard_list">'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=users">Users</a></li>'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets">Widgets</a></li>'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=dashboards">Dashboards</a></li>'HEADER := '<li class="db_active"><a href="':CGI$PATH:'/RSS.MAINT">RSS Feed Maintenance</a></li>'OPEN 'MVPKG.DATA' TO F.MVPKG.DATA THEN  HEADER := '<li><a href="':CGI$PATH:'/MVPKG.MAIN">Package Manager</a></li>'ENDHEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN">Return to Dashboard</a></li>'HEADER := '</ol>'HEADER := '</div>'CALL SWAP(ADMIN.TEMPLATE,'<!-- HEADER -->',HEADER)FOOTER = ''CALL SWAP(ADMIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_MAIN -->',HTML)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)CALL WEB.SEND(ADMIN.TEMPLATE)STOP*LOAD.FEEDS: **HTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="6"><a href="" class="add-feed">Add a Feed</a></td></tr>'HTML<-1> = '<tr><th>ID</th><th>Name</th><th>Feed URL</th><th>Sel SUB</th><th>Item SUB</th><th>Action</th></tr>'EXECUTE "SSELECT RSS.FEEDS BY NAME" CAPTURING JUNKLOOP  READNEXT FID ELSE EXIT  READ FEED.REC FROM F.RSS.FEEDS, FID ELSE CONTINUE  FEED.NAME = FEED.REC<1>  CALL RSS.XML.ENCODE(FEED.NAME,"")  FEED.URL = "http://":CGI$SERVER.NAME:CGI$PATH:'/RSS.MAIN?feed=':FID  FEED.URL = '<a target="_blank" href="':FEED.URL:'">':FEED.URL:'</a>'  FEED.DESC = FEED.REC<3>  SEL.SUB = FEED.REC<4>  ITEM.SUB = FEED.REC<5>  URL.SEL.SUB = SEL.SUB  URL.ITEM.SUB = ITEM.SUB  CALL SUB.URL.ENCODE(URL.SEL.SUB)  CALL SUB.URL.ENCODE(URL.ITEM.SUB)  ROW = '<tr><td>':FID:'</td><td>':FEED.NAME:'</td><td>':FEED.URL:'</td><td><a href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=':SEL.SUB:'" target="RSS.BP_':URL.SEL.SUB:'">':SEL.SUB:'</a></td><td><a href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=':ITEM.SUB:'" target="RSS.BP_':URL.ITEM.SUB:'">':ITEM.SUB:'</a></td>'  ROW := \<td>\  IF FID = "FEEDS" THEN    ROW := '&nbsp;'  END ELSE    FEED.MODE.NAMES = FEED.REC<6>    FEED.MODE.PARAMS = FEED.REC<7>    FEED.MODES = ""    FOR N = 1 TO DCOUNT( FEED.MODE.NAMES<1>, @VM )      FEED.MODES<-1> = FEED.MODE.NAMES<1,N>:',':FEED.MODE.PARAMS<1,N>    NEXT N    CALL SWAP(FEED.MODES,@AM,'\n')    CALL SWAP(FEED.MODES,'"','\"')    CALL SWAP(FEED.NAME,'"','\"')    CALL SWAP(FEED.DESC,'"','\"')    CALL SWAP(SEL.SUB,'"','\"')    CALL SWAP(ITEM.SUB,'"','\"')    ROW := \<a href="javascript:editFeed('\:FID:\','\:FEED.NAME:\','\:FEED.DESC:\','\:SEL.SUB:\','RSS.BP_\:URL.SEL.SUB:\','\:ITEM.SUB:\','RSS.BP_\:URL.ITEM.SUB:\','\:FEED.MODES:\');"><img title="Edit Feed" class="icon" src="/db/icons/feed_edit.png" /></a> &nbsp;\    ROW := \<a onClick="return confirm('DELETE: Are you sure?');" href="/dbc/RSS.MAINT?action=delete&id=\:FID:\"><img title="Delete Feed" class="icon" src="/db/icons/feed_delete.png" /></a>\  END  ROW := '</td></tr>'  HTML<-1> = ROWREPEATHTML<-1> = '<tr><td colspan="6"><a href="" class="add-feed">Add a Feed</a></td></tr>'HTML<-1> = '</table>'RETURN0003F5VALIDATE.SESSION0c2SUBROUTINE VALIDATE.SESSION( FLAG )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo* Date Written : 11/7/2003* Description  : This program will validate the session.*             ****************************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)FLAG = FALSEIF SESSION$ID # "" THEN  READ REC FROM F.WEB.SESSION, SESSION$ID THEN    SESSION.DATE = REC<3>        SESSION.TIME = REC<4>    CURRENT.DATE = DATE()    CURRENT.TIME = TIME()    MAX.SECONDS = 86400; * Total number of seconds in a day    MAX.DIFF.AMOUNT = SESSION$TIME.OUT * 60 ; * Get the time in seconds    CURRENT.TIME = ((CURRENT.DATE - SESSION.DATE) * MAX.SECONDS) + CURRENT.TIME    DIFF.TIME = CURRENT.TIME - SESSION.TIME    IF DIFF.TIME <= MAX.DIFF.AMOUNT THEN      FLAG = TRUE    END  ENDEND*RETURN*0002B5WEB.FLUSH0c2SUBROUTINE WEB.FLUSH*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 11/06/03* Description  : This program sets the calls SET.BUFFER(FALSE) then *                calls WEB.SEND("") if the SESSION$OUTPUT variables*                length is greater then 0.*              ***********************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*CALL SET.BUFFER(FALSE)*IF LEN(SESSION$OUTBUF) > 0 THEN  CALL WEB.SEND("")*END*RETURN*0006C9SET.BUFFER0c2SUBROUTINE SET.BUFFER( B.VAL )*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 11/06/03* Updated by: Peter Schellenbach, Zumasys* Date Updated : 11/30/17* Description  : This program sets the SESSION$OUTBUF.FLAG and optionally*                SESSION$OUTBUF.SIZE variables to enable or disable*                buffering of output generated by WSEND. If buffering*                is enabled, be sure to call WFLUSH to flush the final*                buffer content.**                B.VAL = 0 : disable buffering*                B.VAL = 1 : enable buffering using current buffer size*                B.VAL > 1 : enable buffering and set buffer size to*                            this value.**                By default buffering is disabled. If buffering will be*                used, call WSETBUFFER before the first call to WSEND.*                If the size of buffer content ever exceeds the buffer*                size, the buffer is flushed to the client along with*                any headers, and buffering is disabled.*              **********************************************************************INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*IF NUM(B.VAL) AND B.VAL > 0 AND B.VAL <= 1000000 THEN  * Set buffer size and enable buffering  SESSION$OUTBUF.SIZE = B.VAL  SESSION$OUTBUF.FLAG = TRUEEND ELSE  * Enable or disable buffering  IF B.VAL # TRUE AND B.VAL # FALSE THEN    IF B.VAL = "" THEN      B.VAL = FALSE    END ELSE      B.VAL = TRUE    END  END  SESSION$OUTBUF.FLAG = B.VALENDRETURNEND000296SET.CONTENT.TYPE0c2SUBROUTINE SET.CONTENT.TYPE( C.TYPE )*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 10/25/03* Description  : This program sets the SESSION$CONTENT.TYPE variable.*              ***********************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*IF C.TYPE = "" THEN  C.TYPE = "text/html"END*SESSION$CONTENT.TYPE = C.TYPE*RETURN*000DEEINIT.WWW0c2*********************************************************************** Copyright (C) 2004 Sierra Bravo Corporation, All Rights Reserved** This software is the property of Sierra Bravo Corporation and may* not be duplicated or modified without the express written permission* of Sierra Bravo Corporation.** Written By   : Michael Derheim, Sierra Bravo Corporation* Description  : Initialize the standard WWW includes. Parse cookies, etc.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause**********************************************************************************************************************************************                                                                    *  * 10-25-16 Peter Schellenbach                                        **                                                                    *  ***       THIS PROGRAM IS OBSOLETE AND IS NO LONGER USED! ***        **                                                                    *  **********************************************************************************************************************************************#MAKE# RL $OPTIONS D3*INCLUDE WBPD WWW.INCLUDE*OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, 'WEB.SESSION'*MAT WWW.INFO = ""**PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ''PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE() ; *PJS 06-12-15**CGI$UNIQUE.ID = FIELD( TCL.LINE, ' ', 2)** Populate the vars and vals*CALL WDB.VARS(VARS,VALS)CGI$VARS = VARSCGI$VALS = VALS*LOCATE "APPSVR_ID" IN CGI$VARS SETTING POS THEN  CGI$APPSVR.ID = CGI$VALS<POS>  CGI$VARS = DELETE( CGI$VARS, POS, 0, 0 )  CGI$VALS = DELETE( CGI$VALS, POS, 0, 0 )END ELSE  CGI$APPSVR.ID = ""END** How many active users are online?*SELECT F.WEB.SESSIONUSER.COUNT = 0LOOP  READNEXT WSID ELSE EXIT  READ SREC FROM F.WEB.SESSION, WSID ELSE CONTINUE  LOCATE "userid" IN SREC<1> SETTING UPOS THEN USER.COUNT += 1REPEATPRINT "Client-Count: ":USER.COUNT** Load the Cookie variables and valuiesLOCATE 'HTTP_COOKIE' IN VARS SETTING POS THEN  CSTRING = VALS<POS>END ELSE CSTRING = ''*CONVERT ';' TO @AM IN CSTRINGNUM.COOKIES = DCOUNT(CSTRING, @AM)FOR Y = 1 TO NUM.COOKIES  CGI$CVARS<Y> = TRIM(FIELD(CSTRING<Y>,'=',1))  CGI$CVALS<Y> = CSTRING<Y>[(1+INDEX(CSTRING<Y>,'=',1)),99999]NEXT Y* Load the session ID if there is oneCALL GET.SESSION.ID( SESSION$ID, VARS, VALS )IF (SESSION$ID = '') THEN  CALL CREATE.SESSION(SESSION$ID)  CALL SET.COOKIE("sessionid=":SESSION$ID)ENDSESSION$GLOBAL.DEBUG = 0SESSION$DEBUG.TEXT = ''* Clear the out buffer and set some generic varsSESSION$CONTENT.SENT = 0OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, "WEB.SESSION"OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS'*LOCATE "HTTP_HOST" IN CGI$VARS SETTING POS THEN  CGI$SERVER.NAME = CGI$VALS<POS>END ELSE CGI$SERVER.NAME = ""LOCATE "SERVER_PORT" IN CGI$VARS SETTING POS THEN  CGI$SERVER.PORT = CGI$VALS<POS>END ELSE CGI$SERVER.PORT = ""IF CGI$SERVER.PORT = "" OR CGI$SERVER.PORT = "0" THEN  OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL THEN    READV TCP.PORT FROM F.MVDB.CONTROL, 'MVDB.SETTINGS', 4 ELSE TCP.PORT = ""  END  CGI$SERVER.PORT = TCP.PORTENDIF CGI$SERVER.PORT # "" THEN CGI$SERVER.NAME := ":":CGI$SERVER.PORTLOCATE "SIMPLEWEB_HANDLER" IN CGI$VARS SETTING POS THEN  CGI$PATH = CGI$VALS<POS>  IF CGI$PATH[1,1] # "/" THEN CGI$PATH = "/":CGI$PATHEND ELSE CGI$PATH = "/dbc"STOP*END0058DBMV.DEBUG0c2* WDEBUG** Debug REST Services* Copyright (c) 2017 Zumasys Inc.* Rewritten by Peter Schellenbach, 10/18/2017** Based on original version:*  Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved*  Written by: Luke Bucklin, Sierra Bravo*  Date: Sometime, 2006-ish*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD FI.WDB.DEBUG*CLR.SCR = @(-1)CLR.EOS = @(-3)MAX.LINES = SYSTEM(3) - 4MAX.COLS = SYSTEM(2) - 1IF MAX.LINES <= 0 OR CLR.SCR = '' OR CLR.EOS = '' THEN  MAX.LINES = 20  CLR.SCR = ''  CLR.EOS = ''  PRMPT.LINE = CHAR(13):CHAR(10)END ELSE  PRMPT.LINE = @(0, MAX.LINES + 2):CLR.EOSENDPROMPT ''*PRINT CLR.SCR:PRINTPRINT 'WDEBUG Web Request Degug Tool'PRINTPRINT 'The WDEBUG tool allows you to inspect, modify and re-run web requests.'PRINT 'Whenever a request for a debuggable resource is processed by WDB.INIT,'PRINT 'a debug record for the request is added to the WDB.DEBUG file. WDEBUG'PRINT 'allows you to select a debug record, view the request details, edit the'PRINT 'request variables, re-run the request and view the response.'PRINTPRINT 'To debug web requests for a resource, set attribute 7 of the WDB.RESOURCE'PRINT 'record for the resource to 1, then issue the web request from the client'PRINT 'browser or other agent. WDEBUG will show a list of recent web requests to'PRINT 'select from.'PRINTPRINT 'Start WDEBUG with an active select list if you need to use special criteria'PRINT 'to select the record(s) you need to debug.'PRINTPRINT 'Press <enter> to continue':INPUT ANS*OPEN 'WDB.DEBUG' TO F.WDB.DEBUG ELSE  PRINT 'The WDB.DEBUG data file is required to use WDEBUG. Default installations'  PRINT 'only create the dictionary for this file. Please create the data section'  PRINT 'to use WDEBUG: CREATE-FILE DATA WDB.DEBUG 101.'  STOPEND*SESSION.FLAG = 0OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SESSION.FLAG = 1 ;* can restore session when running debug reqest*EDITOR = ''IDS = ''NUM.IDS = 0IF SYSTEM(11) THEN  LOOP    READNEXT ID ELSE EXIT    READV X FROM F.WDB.DEBUG, ID, 1 THEN      IDS<-1> = ID      NUM.IDS += 1    END ELSE      PRINT ID:' not found in WDB.DEBUG!'    END  REPEATENDUSE.SUPPLIED.LIST = (NUM.IDS > 0)*LOOP  IF NOT(USE.SUPPLIED.LIST) THEN* Select available WDB.DEBUG items    CMND = 'SSELECT WDB.DEBUG WITH TYPE = "C" "R" BY-DSND DATE BY-DSND TIME'    EXECUTE CMND CAPTURING RESULT    IF SYSTEM(11) = 0 THEN      PRINT "No items found."      STOP    END    IDS = ''    NUM.IDS = 0    LOOP      READNEXT ID ELSE EXIT      IDS<-1> = ID      NUM.IDS += 1    REPEAT  END*  TOP = 0  LOOP* Display page of items    PRINT CLR.SCR:    PRINT "Ln Date. Time.... Path................ Remote Address...... Request ID........."    FOR CNTR = 1 TO MAX.LINES UNTIL CNTR + TOP > NUM.IDS      DBG.ID = IDS<CNTR>      READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE CONTINUE      PATH.INFO = DBGREC<WDBG_PATH>      IF PATH.INFO = '' THEN PATH.INFO = DBGREC<WDBG_HANDLER>:'/':DBGREC<WDBG_RESOURCE>      PRINT CNTR "R#2 ":      PRINT OCONV(DBGREC<WDBG_DATE>, 'D0-') "L#5 ":      PRINT OCONV(DBGREC<WDBG_TIME>, 'MTS') "L#8 ":      PRINT PATH.INFO "L#20 ":      PRINT DBGREC<WDBG_REMOTE_ADDR> "L#20 ":      PRINT DBGREC<WDBG_REQUEST_ID>[1,20]    NEXT CNTR    IF TOP + MAX.LINES > NUM.IDS THEN BOT = NUM.IDS ELSE BOT = TOP + MAX.LINES    PRINT "Showing items ":(TOP + 1):"-":BOT:" of ":NUM.IDS*    LOOP      PRINT PRMPT.LINE:"Command: (Q)uit (R)efresh (C)lear (N)ext (P)rev (##) Line to debug: ":      INPUT COMMAND      IF COMMAND MATCHES '1N0N' THEN        IF COMMAND >= 1 AND COMMAND <= MAX.LINES AND COMMAND + TOP <= NUM.IDS THEN          DBG.ID = IDS<COMMAND + TOP>          GOSUB debug.request        END        COMMAND = ''      END ELSE        COMMAND = OCONV(COMMAND[1,1], 'MCU')        IF COMMAND = '' THEN COMMAND = 'N'        IF INDEX('ERCNPQ', COMMAND, 1) = 0 THEN COMMAND = ''      END    WHILE COMMAND = '' DO REPEAT*    BEGIN CASE      CASE COMMAND = 'N'        IF TOP + MAX.LINES < NUM.IDS THEN TOP += MAX.LINES      CASE COMMAND = 'P'        IF TOP - MAX.LINES >= 0 THEN TOP -= MAX.LINES    END CASE  WHILE COMMAND = 'N' OR COMMAND = 'P' DO REPEAT*UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'R' ; NULL    CASE COMMAND = 'C'      EXECUTE 'SELECT WDB.DEBUG WITH TYPE = "C" "R"'      PRINT 'Are you sure you want to clear these items from the WDB.DEBUG file? ':      INPUT ANS      ANS = OCONV(ANS[1,1],'MCU')      IF ANS = 'Y' THEN        IF SYSTEM(11) THEN          LOOP            READNEXT ID ELSE EXIT            DELETE F.WDB.DEBUG, ID          REPEAT        END      END ELSE        CLEARSELECT      END  END CASEREPEATSTOP**----------debug.request:*----------*READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE  PRINT "The selected item '":DBG.ID:"' is not available!"  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDEDIT.ID = 'D':DBG.ID[2, LEN(DBG.ID)]LOOP  PRINT PRMPT.LINE:"Debugging ":DBG.ID[1,28]:" - command: (Q)uit (V)iew (E)dit (R)un: ":  INPUT COMMAND  COMMAND = OCONV(COMMAND[1,1], 'MCU')UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'V'      GOSUB view.request    CASE COMMAND = 'E'      GOSUB edit.request    CASE COMMAND = 'R'      GOSUB run.request  END CASEREPEATRETURN**----------view.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDGOSUB to.editNUM.LNS = DCOUNT(EDIT.REC, @AM)I = 1LOOP WHILE I <= NUM.LNS DO  X = EDIT.REC<I>  IF LEN(X) > MAX.COLS THEN    X = FOLD(X, MAX.COLS, @AM)    EDIT.REC<I> = X    N = COUNT(X, @AM)    NUM.LNS += N    I += N  END  I += 1REPEATIF NUM.LNS = 0 THEN NUM.LNS = 1NUM.PGS = INT((NUM.LNS - 1) / MAX.LINES) + 1CUR.PG = 1LOOP  PG.TOP = (CUR.PG - 1) * MAX.LINES  IF PG.TOP + MAX.LINES > NUM.LNS THEN LPP = NUM.LNS - PG.TOP ELSE LPP = MAX.LINES  PRINT CLR.SCR:  PRINT 'Page ':CUR.PG:' of ':NUM.PGS:SPACE(10):DBG.ID  PRINT  FOR I = 1 TO LPP    PRINT EDIT.REC<I + PG.TOP>  NEXT I  PRINT PRMPT.LINE:'Command: (Q)uit (N)ext (P)rev (##) Goto page ':  INPUT COMMAND  IF COMMAND MATCHES '1N0N' THEN    IF COMMAND >= 1 AND COMMAND <= NUM.PGS THEN CUR.PG = COMMAND  END ELSE    COMMAND = OCONV(COMMAND[1,1], 'MCU')  ENDUNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'N' OR COMMAND = ''      IF CUR.PG < NUM.PGS THEN CUR.PG = CUR.PG + 1    CASE COMMAND = 'P'      IF CUR.PG > 1 THEN CUR.PG = CUR.PG - 1  END CASEREPEATRETURN**----------edit.request:*----------*IF EDITOR = '' THEN GOSUB choose.editorIF EDITOR <> '' THEN  EDIT.ID = 'D':DBG.ID  GOSUB to.edit  WRITE EDIT.REC ON F.WDB.DEBUG, EDIT.ID  CMND = EDITOR:' WDB.DEBUG ':EDIT.ID  EXECUTE CMND  READ EDIT.REC FROM F.WDB.DEBUG, EDIT.ID ELSE NULL  DELETE F.WDB.DEBUG, EDIT.ID  GOSUB from.editENDRETURN**----------run.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNEND*HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* Reconstruct query stringQSTR = ''QSEP = ''* headers and server variablesN = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_HEADER_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* form variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_CGI_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_CGI_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  URLENCODE.STRING = CHANGE(THE.BODY, @VM, CHAR(10))  GOSUB url.encode  QSTR := QSEP:'__body__=':NEW.STRINGEND* restore session stateIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    SESSION.REC = ''    SESSION.REC<1> = DBGREC<WDBG_SESSION_VARS>    SESSION.REC<2> = DBGREC<WDBG_SESSION_VALS>    SESSION.REC<3> = DBGREC<WDBG_SESSION_DATE>    SESSION.REC<4> = DBGREC<WDBG_SESSION_TIME>    WRITE SESSION.REC ON F.WEB.SESSION, SESSION.ID  ENDEND* break the query string into 1000 byte chunksN = INT((LEN(QSTR) - 1) / 1000) + 1* build the command lineRUN.ID = DBGREC<WDBG_REQUEST_ID>CMND = 'WDB.INIT ':HANDLER.NAME:'/':RESOURCE.NAME:' ':RUN.ID:'-1-':N:' %% _WDEBUG_MODE_'** run the commandPRINTPRINT 'Executing the request: ':CMNDPRINTMAT WWW.INFO = ""EXECSTART = SYSTEM(1020) ;*QM** send query string as stacked inputFOR I = 1 TO N  DATA QSTR[((I - 1) * 1000) + 1, 1000]NEXT IEXECUTE CMND CAPTURING RESPONSEEXECDUR = SYSTEM(1020) - EXECSTART ;*QM*PRINT 'Request complete. Press <enter> to parse results':INPUT ANS** update the request runtimeDBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_DURATION> = EXECDUR* process the responseLINT.BEFORE = ''LINT.AFTER = ''WARN = ''ERR = ''* Gather lint from before the start tag and after the complete tagDBGREC<WDBG_WARNING> = '' ;* WarningsDBGREC<WDBG_ERROR> = '' ;* ErrorsDBGREC<WDBG_LINT> = '' ;* LintIF RESPONSE<1> = "700 WDB-START" THEN  RESPONSE = DELETE(RESPONSE, 1)END ELSE  TAG = @AM:"700 WDB-START":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '700 WDB-START tag is missing from response'    LINT.BEFORE = RESPONSE    RESPONSE = ''  END ELSE    IF TAG.POS >= 1 THEN      LINT.BEFORE = RESPONSE[1, TAG.POS - 1]      RESPONSE = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    END  ENDENDN = DCOUNT(RESPONSE, @AM)IF RESPONSE<N> = "800 WDB-COMPLETE" THEN  RESPONSE = DELETE(RESPONSE, N)END ELSE  TAG = @AM:"800 WDB-COMPLETE":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '800 WDB-COMPLETE tag missing from response!'  END ELSE    LINT.AFTER = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    RESPONSE = RESPONSE[1, TAG.POS - 1]  ENDEND* Clean up lintIF TRIM(CHANGE(LINT.BEFORE, @AM, '')) = '' THEN LINT.BEFORE = ''IF TRIM(CHANGE(LINT.AFTER, @AM, '')) = '' THEN LINT.AFTER = ''IF LINT.BEFORE <> '' OR LINT.AFTER <> '' THEN  LINT = LINT.BEFORE  IF LINT.BEFORE <> '' AND LINT.AFTER <> '' THEN LINT := @AM:'...':@AM  LINT := LINT.AFTER  DBGREC<WDBG_LINT> = LOWER(LINT)END* Parse the response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''DBGREC<WDBG_RESPONSE_CONTENT> = ''NUM.VARS = 0STATUS.CODE = ''EOH = INDEX(RESPONSE, @AM:@AM, 1) ;* headers end at first blank line in responseIF EOH = 0 THEN EOH = LEN(RESPONSE) + 1N = DCOUNT(RESPONSE[1, EOH - 1], @AM)FOR I = 1 TO N  HDR.LINE = RESPONSE<I>  IF HDR.LINE[1,10] = '500 ERROR ' THEN    ERR = HDR.LINE[11, LEN(HDR.LINE)]    IF STATUS.CODE = '' THEN STATUS.CODE = 500  END ELSE    HDR.VAR = FIELD(HDR.LINE, ':', 1)    HDR.VAL = TRIMF(HDR.LINE[COL2() + 1, LEN(HDR.LINE)])    M = LEN(HDR.VAR)    FOR J = 1 TO M      IF NOT(HDR.VAR[J,1] MATCHES '1A') AND HDR.VAR[J,1] <> '-' THEN        HDR.VAR = ''        EXIT      END    NEXT J    IF HDR.LINE[LEN(HDR.VAR) + 1, 1] <> ':' THEN HDR.VAR = ''    IF HDR.VAR = '' THEN      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = '_BAD_'      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.LINE ;* invalid header line!    END ELSE      IF HDR.VAR = 'X-MVDB-STATUS' THEN        STATUS.CODE = HDR.VAL      END ELSE        NUM.VARS += 1        DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = HDR.VAR        DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.VAL      END    END  ENDNEXT IIF STATUS.CODE = '' THEN STATUS.CODE = 200DBGREC<WDBG_STATUS> = STATUS.CODE* save response contentIF EOH + 2 <= LEN(RESPONSE) THEN  DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(RESPONSE[EOH + 2, LEN(RESPONSE)])ENDDBGREC<WDBG_WARNING> = WARNDBGREC<WDBG_ERROR> = ERRRETURN**----------to.edit:*----------*EDIT.REC = ''EDIT.REC<-1> = '[INFO] (do not edit this section)'EDIT.REC<-1> = 'Date            = ':OCONV(DBGREC<WDBG_DATE>,'D4')EDIT.REC<-1> = 'Time            = ':OCONV(DBGREC<WDBG_TIME>,'MTS')EDIT.REC<-1> = 'Duration        = ':DBGREC<WDBG_DURATION>EDIT.REC<-1> = 'Port            = ':DBGREC<WDBG_PORT>EDIT.REC<-1> = 'Handler         = ':DBGREC<WDBG_HANDLER>EDIT.REC<-1> = 'Resource        = ':DBGREC<WDBG_RESOURCE>EDIT.REC<-1> = 'Controller      = ':DBGREC<WDBG_CONTROLLER>EDIT.REC<-1> = 'Program         = ':DBGREC<WDBG_PROGRAM>EDIT.REC<-1> = 'RequestID       = ':DBGREC<WDBG_REQUEST_ID>EDIT.REC<-1> = 'Method          = ':DBGREC<WDBG_METHOD>EDIT.REC<-1> = 'Path            = ':DBGREC<WDBG_PATH>EDIT.REC<-1> = 'RemoteAddr      = ':DBGREC<WDBG_REMOTE_ADDR>EDIT.REC<-1> = 'Status          = ':DBGREC<WDBG_STATUS>IF DBGREC<WDBG_WARNING> <> '' THEN  EDIT.REC<-1> = 'WARNING: ':DBGREC<WDBG_WARNING>ENDIF DBGREC<WDBG_ERROR> <> '' THEN  EDIT.REC<-1> = 'ERROR: ':DBGREC<WDBG_ERROR>ENDIF DBGREC<WDBG_LINT> <> '' THEN  EDIT.REC<-1> = 'LINT:':@AM:RAISE(DBGREC<WDBG_LINT>)END* Request headers and server variablesEDIT.REC<-1> = @AM:'[HEADERS]'N = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  HDR.VAL = DBGREC<WDBG_HEADER_VALS, I>  EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VALNEXT I* Query string variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[VARS]'  FOR I = 1 TO N    CGI.VAR = DBGREC<WDBG_CGI_VARS, I>    CGI.VAL = DBGREC<WDBG_CGI_VALS, I>    EDIT.REC<-1> = CGI.VAR:SPACE(16-LEN(CGI.VAR)):'= ':CGI.VAL  NEXT IEND* CookiesLOCATE 'HTTP_COOKIE' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  CSTRING = DBGREC<WDBG_HEADER_VALS, POS>END ELSE CSTRING = ''CONVERT ';' TO @AM IN CSTRINGN = DCOUNT(CSTRING, @AM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[COOKIES]'  FOR I = 1 TO N    COOKIE.VAR = TRIM(FIELD(CSTRING<I>, '=', 1))    COOKIE.VAL = CSTRING<I>[COL2() + 1, 99999]    EDIT.REC<-1> = COOKIE.VAR:SPACE(16-LEN(COOKIE.VAR)):'= ':COOKIE.VAL  NEXT IEND* REST parametersLOCATE 'PATH_INFO' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  PATH = DBGREC<WDBG_HEADER_VALS, POS>END ELSE PATH = ''IF PATH[1,1] = '/' THEN PATH = PATH[2,9999]N = DCOUNT(PATH, '/')IF N > 0 THEN  EDIT.REC<-1> = @AM:'[PARAMS]'  FOR I = 3 TO N    PARAM.VAR = 'Param[':(I-2):']'    EDIT.REC<-1> = PARAM.VAR:SPACE(16-LEN(PARAM.VAR)):'= ':FIELD(PATH, '/', I)  NEXT IEND* Session variablesIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    N = DCOUNT(DBGREC<WDBG_SESSION_VARS>, @VM)    IF N > 0 THEN      EDIT.REC<-1> = @AM:'[SESSION]'      EDIT.REC<-1> = '_SessionID      = ':SESSION.ID      IF DBGREC<WDBG_SESSION_DATE> <> '' THEN EDIT.REC<-1> = '_Date           = ':OCONV(DBGREC<20>, 'D4')      IF DBGREC<WDBG_SESSION_TIME> <> '' THEN EDIT.REC<-1> = '_Time           = ':OCONV(DBGREC<21>, 'MTS')      FOR I = 1 TO N        SESSION.VAR = DBGREC<WDBG_SESSION_VARS, I>        EDIT.REC<-1> = SESSION.VAR:SPACE(16-LEN(SESSION.VAR)):'= ':DBGREC<WDBG_SESSION_VALS, I>      NEXT I    END  ENDEND* Request bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  EDIT.REC<-1> = @AM:'[BODY]':@AM:RAISE(THE.BODY)END* Response headersN = DCOUNT(DBGREC<WDBG_RESPONSE_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[RESPONSE_HEADERS]'  FOR I = 1 TO N    HDR.VAR = DBGREC<WDBG_RESPONSE_VARS, I>    HDR.VAL = DBGREC<WDBG_RESPONSE_VALS, I>    EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VAL  NEXT IEND* Response contentTHE.CONTENT = DBGREC<WDBG_RESPONSE_CONTENT>IF THE.CONTENT <> '' THEN  EDIT.REC<-1> = @AM:'[RESPONSE_CONTENT]':@AM:RAISE(THE.CONTENT)END*RETURN**----------from.edit:*----------*SESSION.ID = ''HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* If COOKIES section exists, rebuild HTTP_COOKIE headerCOOKIES = ''SECT = 'COOKIES'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    COOKIE = EDIT.REC<I>    IF COOKIE <> '' THEN      COOKIE.NAME = TRIM(FIELD(COOKIE, '=', 1))      COOKIE.VAL = TRIMF(COOKIE[COL2() + 1, LEN(COOKIE)])      COOKIES := COOKIE.NAME:'=':COOKIE.VAL:';'      IF OCONV(COOKIE.NAME, 'MCU') = 'SESSIONID' THEN SESSION.ID = COOKIE.VAL    END  NEXT I  IF COOKIES[LEN(COOKIES), 1] = ';' THEN COOKIES = COOKIES[1, LEN(COOKIES) - 1]END* If PARAMS section exists, rebuild PATH_INFO headerPARAMS = ''SECT = 'PARAMS'GOSUB find.sectionIF SECT.START > 0 THEN  PNUM = 1  FOR I = SECT.START + 1 TO SECT.END    PARAM = EDIT.REC<I>    IF PARAM <> '' THEN      PARAM.NAME = TRIM(OCONV(FIELD(PARAM, '=', 1), 'MCU'))      PARAM.VAL = TRIMF(PARAM[COL2() + 1, LEN(PARAM)])      IF PARAM.NAME <> 'PARAM[':PNUM:']' THEN EXIT      PARAMS := '/':PARAM.VAL      PNUM += 1    END  NEXT I  IF PARAMS <> '' THEN PARAMS = '/':HANDLER.NAME:'/':RESOURCE.NAME:PARAMS ;* handler & resource come before paramsEND* Get headers and server variablesDBGREC<WDBG_HEADER_VARS> = ''DBGREC<WDBG_HEADER_VALS> = ''NUM.VARS = 0SECT = 'HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])* check for special headers      BEGIN CASE        CASE OCONV(VAR.NAME, 'MCU') = 'HTTP_COOKIE'          IF COOKIES <> '' THEN            VAR.VAL = COOKIES          END        CASE OCONV(VAR.NAME, 'MCU') = 'PATH_INFO'          IF PARAMS <> '' THEN            VAR.VAL = PARAMS          END          IF VAR.VAL[1,1] <> '/' THEN VAR.VAL = '/' : VAR.VAL          IF COUNT(VAR.VAL, '/') >= 2 THEN            HANDLER.NAME = FIELD(VAR.VAL, '/', 2)            RESOURCE.NAME = FIELD(VAR.VAL, '/', 3)          END          DBGREC<WDBG_PATH> = VAR.VAL        CASE OCONV(VAR.NAME, 'MCU') = 'REQUEST_METHOD'          DBGREC<WDBG_METHOD> = VAR.VAL              CASE OCONV(VAR.NAME, 'MCU') = 'REMOTE_ADDR'          DBGREC<WDBG_REMOTE_ADDR> = VAR.VAL      END CASE      NUM.VARS += 1      DBGREC<WDBG_HEADER_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_HEADER_VALS, NUM.VARS> = VAR.VAL    END  NEXT I  DBGREC<WDBG_HANDLER> = HANDLER.NAME  DBGREC<WDBG_RESOURCE> = RESOURCE.NAMEEND* Get form variablesDBGREC<WDBG_CGI_VARS> = ''DBGREC<WDBG_CGI_VALS> = ''NUM.VARS = 0SECT = 'VARS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_CGI_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_CGI_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get bodyDBGREC<WDBG_BODY> = ''SECT = 'BODY'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.BODY = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_BODY> = LOWER(THE.BODY)  ENDEND* Get session stateIF SESSION.FLAG AND SESSION.ID <> '' THEN  DBGREC<WDBG_SESSION_ID> = ''  DBGREC<WDBG_SESSION_VARS> = ''  DBGREC<WDBG_SESSION_VALS> = ''  DBGREC<WDBG_SESSION_DATE> = ''  DBGREC<WDBG_SESSION_TIME> = ''  NUM.VARS = 0  SECT = 'SESSION'  GOSUB find.section  IF SECT.START > 0 THEN    FOR I = SECT.START + 1 TO SECT.END      SESSION.LINE = EDIT.REC<I>      SESSION.VAR = TRIM(FIELD(SESSION.LINE, '=', 1))      SESSION.VAL = TRIMF(SESSION.LINE[COL2() + 1, LEN(SESSION.LINE)])      BEGIN CASE        CASE SESSION.VAR = '_SessionID'          DBGREC<WDBG_SESSION_ID> = SESSION.VAL        CASE SESSION.VAR = '_Date'          DBGREC<WDBG_SESSION_DATE> = ICONV(SESSION.VAL, 'D')        CASE SESSION.VAR = '_Time'          DBGREC<WDBG_SESSION_TIME> = ICONV(SESSION.VAL, 'MTS')        CASE 1          NUM.VARS += 1          DBGREC<WDBG_SESSION_VARS, NUM.VARS> = SESSION.VAR          DBGREC<WDBG_SESSION_VALS, NUM.VARS> = SESSION.VAL      END CASE    NEXT I  ENDEND* Get response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''NUM.VARS = 0SECT = 'RESPONSE_HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get response contentDBGREC<WDBG_RESPONSE_CONTENT> = ''SECT = 'RESPONSE_CONTENT'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.CONTENT = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(THE.CONTENT)  ENDENDRETURN**----------choose.editor:*----------*PRINTLOOP  PRINT 'Select the editor you want to use: 1 = ED, 2 = SED, 3 = other: ':  INPUT ANSUNTIL ANS EQ '' DO  BEGIN CASE    CASE ANS = 1      EDITOR = 'ED'      EXIT    CASE ANS = 2      EDITOR = 'SED'      EXIT    CASE ANS = 3      PRINT 'Enter the verb to invoke your editor: ':      INPUT TMP      PRINT TMP:' OK?':      INPUT ANS      ANS = OCONV(ANS[1,1], 'MCU')      IF ANS = 'Y' THEN        EDITOR = TMP        EXIT      END  END CASEREPEATRETURN**----------find.section:*----------*SECT.START = -1SECT.END = -1TAG = @AM:'[':SECT:']':@AMTAG.POS = INDEX(EDIT.REC, TAG, 1)IF TAG.POS = 0 THEN RETURN ;* Section not foundSECT.START = DCOUNT(EDIT.REC[1, TAG.POS], @AM)SECT.END = DCOUNT(EDIT.REC, @AM)FOR I = SECT.START + 1 TO SECT.END  SECT.LN = EDIT.REC<I>  IF SECT.LN MATCHES '"["1A0A"]"' OR SECT.LN MATCHES '"["1A0A"_"1A0A"]"' THEN* beginning of next section is end of current section    SECT.END = I - 1    EXIT  ENDNEXT IRETURN**----------url.encode:*----------*NEW.STRING = ""UE.LEN = LEN(URLENCODE.STRING)FOR UEX = 1 TO UE.LEN  UE.CHR = URLENCODE.STRING[UEX,1]  UE.CVAL = SEQ(UE.CHR)  BEGIN CASE    CASE UE.CVAL < 32; ENC.FLAG = 1   ;* control character    CASE UE.CVAL = 37 OR UE.CVAL = 38 OR UE.CVAL = 43 OR UE.CVAL = 61; ENC.FLAG = 1 ;* % & + =    CASE UE.CVAL = 127; ENC.FLAG = 1  ;* DEL control character    CASE UE.CVAL >= 252; ENC.FLAG = 1 ;* delimiter character    CASE 1 ; ENC.FLAG = 0  END CASE  IF ENC.FLAG THEN    UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')  END  NEW.STRING := UE.CHRNEXT UEXRETURN*END000DB8SUB.DEBUG.WIDGET0c2SUBROUTINE SUB.DEBUG.WIDGET** Modified by Peter Schellenbach of Zumasys 06-08-15*   QM uses errlog file in the QMSYS directory to log runtime*   errors - call SUB.GET.RUNTIME.ERRORS subroutine to get*   QM runtime error info.** 01-20-16 Peter Schellenbach - added code to insert extra widget info after runtime errors.*   Call new SUB.LOG.DEBUG.INFO in widget code to save extra widget info for display here.*INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "HTML"W$TITLE = "Widget Debug: ":G$WIDGET.NAMEIF GLOBAL.INFO(90) = "FAIL" THEN  W$TITLE := " (Widget Failed)"END ELSE  W$TITLE := ' (Debug Mode)'ENDW$WIDTH = 3 ;* Maybe we can track the last known width of this widget*IF G$QUERYMODE THEN RETURN*OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE  W$HTML.DATA = '<h2>Unable to open WEB.FORMS</h2>'  RETURNENDREAD W$HTML.DATA FROM F.WEB.FORMS, "widget_debug.html" ELSE W$HTML.DATA = "<h2>Error: widget_debug.html is missing.</h2>"*WIDGET.SUB.NAME = GLOBAL.INFO(91) ;* Set by MVDB.MAIN before re-assigning the subroutine name to this program.*EDIT.LINK = ''IF G$ADMIN.USER THEN  * Add a link to edit the subroutine  URL.SUBNAME = WIDGET.SUB.NAME  CALL SUB.URL.ENCODE(URL.SUBNAME)  EDIT.LINK = '<a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=':URL.SUBNAME:'" target="MVDB.SUBS_':URL.SUBNAME:'">Edit Subroutine</a>'END*UDINFO = ""FOR UDPOS = 1 TO 100  IF WIDGET.USER.DATA(UDPOS) # "" THEN    UDINFO := '<tr><td>':UDPOS:'</td><td>':WIDGET.USER.DATA(UDPOS):'</td></tr>':CHAR(10)  ENDNEXT UDPOS*URL.WIDGET.NAME = G$WIDGET.NAMECALL SUB.URL.ENCODE(URL.WIDGET.NAME)IF GLOBAL.INFO(90) = "FAIL" THEN  DB.REASON = "<hr />This widget has been disabled for one of the following reasons:"  DB.REASON := '<ul><li>The widget subroutine has an error causing it to terminate unexpectedly.</li>'  DB.REASON := '<li>The page was refreshed or a new dashboard page was loaded before the widget subroutine finished running.</li>'  DB.REASON := '<li>The widget is running, but it is taking too long for it to finish.</li>'  DB.REASON := '<li>The widget subroutine encountered a system error and could not finish running.</li></ul>'  REMOVE.LINK = '<a href="/dbc/MVDB.MAIN?unfail_widget=':URL.WIDGET.NAME:'">click here</a>'  REMEDY =  "When the problem has been corrected, ":REMOVE.LINK:" to take this widget out of debug mode.<hr />"END ELSE  DB.REASON = ""  REMEDY = ""ENDRE.INFO = ''MAX.ERRS = 50CALL SUB.GET.RUNTIME.ERRORS(RE.INFO, '', WIDGET.SUB.NAME, MAX.ERRS, G$ADMIN.USER)RE.INFO := CHAR(10): '</table>'**PJS 01-20-16 Check for widget debug info and add to runtime errors section.* To use this feature, widget code can call SUB.LOG.DEBUG.INFO with widget* name and a message. The last 100 lines of message text are saved in WDB.DEBUG* for the widget and displayed here after runtime errors by the debug widget.OPEN 'WDB.DEBUG' TO F.WDB.DEBUG THEN    READ EXTRA.INFO FROM F.WDB.DEBUG,G$WIDGET.NAME THEN        CALL SWAP(EXTRA.INFO,@AM,CHAR(10))        RE.INFO := '<pre>':CHAR(10):EXTRA.INFO:CHAR(10):'</pre>':CHAR(10)    ENDEND    *CALL SWAP(W$HTML.DATA,'<!-- WIDGET_NAME -->',G$WIDGET.NAME)CALL SWAP(W$HTML.DATA,'<!-- WIDGET_SUB_NAME -->',WIDGET.SUB.NAME)CALL SWAP(W$HTML.DATA,'<!-- WIDGET_EDIT_LINK -->',EDIT.LINK)CALL SWAP(W$HTML.DATA,'<!-- DEBUG_REASON -->',DB.REASON)CALL SWAP(W$HTML.DATA,'<!-- REMEDY -->',REMEDY)CALL SWAP(W$HTML.DATA,'<!-- WIDGET_USER_DATA -->',UDINFO)CALL SWAP(W$HTML.DATA,'<!-- RUNTIME_ERRORS -->',RE.INFO)RETURNEND000474MVAPPS.STATUS0c2** Program: MVAPPS.STATUS* Author: Luke Bucklin, Sierra Bravo Corporation* Date: January 4, 2010* Purpose: Provide app status information to the mvappsvr config app*APP.LIST = ""APP.CNT = 0PRINT "MVAPPS START"OPEN '','MVAPPS.INSTALLED' TO F.MVAPPS.INSTALLED THEN  EXECUTE 'SSELECT MVAPPS.INSTALLED' CAPTURING JUNK  LOOP    READNEXT ID ELSE EXIT    READ REC FROM F.MVAPPS.INSTALLED, ID THEN      APP.CNT += 1      APP.LIST<1,APP.CNT> = ID      APP.LIST<2,APP.CNT> = REC<1>      APP.LIST<3,APP.CNT> = REC<2>      APP.LIST<4,APP.CNT> = REC<3>      APP.LIST<5,APP.CNT> = OCONV(REC<4>,'D2/')    END  REPEATENDAPP.NAMES = APP.LIST<2>CONVERT "|" TO "\" IN APP.NAMESAPP.LIST<2> = APP.NAMESPRINT "MVAPPS-VERSION: 1.0"DATA "VERSION"EXECUTE "APP.INSTALLER" CAPTURING AIVLOCATE "Installer Version" IN AIV SETTING POS THEN  VNO = AIV<POS+1>END ELSE VNO = "?"IF NOT(VNO MATCHES "1N0N'.'0X") THEN VNO = "?"PRINT "INSTALLER-VERSION: ":VNOPRINT 'APP-COUNT: ':APP.CNTFOR N = 1 TO APP.CNT  PRINT 'APP: ':APP.LIST<2,N>:",":APP.LIST<3,N>:",":APP.LIST<4,N>:",":APP.LIST<5,N>NEXT NPRINT "MVAPPS END"STOPEND000789SUB.MVDB.FEATURES0c2SUBROUTINE SUB.MVDB.FEATURES(USER.LIMIT,MAPS.ENABLED,FUSION.WIDGETS.ENABLED,WATERMARK)INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*** Decipher the license data*CDIGIT = CGI$APPSVR.ID[1,1]LSEG1 = CGI$APPSVR.ID[2,5]LSEG2 = CGI$APPSVR.ID[7,7]LSEG3 = CGI$APPSVR.ID[14,8]UID4 = CGI$UNIQUE.ID "R%4"UID3 = UID4 "R%3"UID2 = UID4 "R%2"UIDL1 = UID4 "R%1"UIDL2 = UID4[3,1]*CHKVAL = 0FOR N = 2 TO 21  CHKVAL += SEQ(CGI$APPSVR.ID[N,1])NEXT NCHKVAL = MOD(CHKVAL,16)** SEGMENT 1: Extract license edition*SEG1 = OCONV(LSEG1,'MCXD')SEG1 = SEG1 / (4*(UID4+1))LICENSE.EDITION = SEG1-1** SEGMENT 2: Extract user limit*SEG2 = OCONV(LSEG2,'MCXD')SEG2 = SEG2 / (3*(UID3+1))LICENSE.CNT = SEG2** SEGMENT 3: Extract system id*SEG3 = OCONV(LSEG3,'MCXD')SEG3 = SEG3 / (UIDL1 + UIDL2 + 2)LICENSE.SYSID = SEG3*WWW.INFO(46) = OCONV(CHKVAL,'MCDX'):'/':OCONV(LSEG3,'MCXD'):" / ":(UIDL1 + UIDL2 + 2):" = ":LICENSE.SYSIDWWW.INFO(47) = LICENSE.CNT:'/':LICENSE.EDITIONWWW.INFO(48) = LICENSE.SYSID*USER.LIMIT = LICENSE.CNTMAPS.ENABLED = 0FUSION.WIDGETS.ENABLED = 0WATERMARK = ''EDITION = ''BEGIN CASE  CASE LICENSE.EDITION = 1    FUSION.WIDGETS.ENABLED = 1    MAPS.ENABLED = 1    WATERMARK = 'Development Version'    EDITION = 'Development Edition'  CASE LICENSE.EDITION = 2     EDITION = 'Standard Edition'  CASE LICENSE.EDITION = 3    FUSION.WIDGETS.ENABLED = 1    EDITION = 'Professional Edition'  CASE LICENSE.EDITION = 4    FUSION.WIDGETS.ENABLED = 1    MAPS.ENABLED = 1    EDITION = 'Enterprise Edition'  CASE LICENSE.EDITION = 5    FUSION.WIDGETS.ENABLED = 1    MAPS.ENABLED = 1    WATERMARK = 'Evaluation Version'    EDITION = 'Evaluation'  CASE 1    EDITION = 'Edition unavailable'END CASE**Populate globals for user reference*G$LICENSE.COUNT = LICENSE.CNTG$EDITION = EDITION ;*:' | ':CGI$APPSVR.ID:' | ':CGI$UNIQUE.IDG$SYSTEM.ID = LICENSE.SYSID*RETURN0062E2MVPKG.MAIN0c2* Copyright (C) 2010 Sierra Bravo Corporation, All Rights Reserved** Written by: Dave Bucklin, Sierra Bravo* Date: May, 2010* Description: Administration area of Bravo Dashboard**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD MVPKG.INCLUDEINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*EQU TRUE TO 1, FALSE TO 0, AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*OPEN '','MVPKG.DATA' TO F.MVPKG.DATA ELSE STOP 201, 'MVPKG.DATA'OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MVDB.SUBS' TO F.MVDB.SUBS ELSE STOP 201, 'MVDB.SUBS'OPEN '','MVDB.DEFS' TO F.MVDB.DEFS ELSE STOP 201, 'MVDB.DEFS'OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE STOP 201, 'MVDB.WIDGET.TYPES'OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD'END*DIM PKG.REC(40)DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)*EQU STEP$WIDGETS TO 1EQU STEP$DASHBOARDS TO 2EQU STEP$ITEMS TO 3EQU STEP$WEB.FILES TO 4EQU STEP$SETTINGS TO 5EQU STEP$SUMMARY TO 6*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDENDIF SITE$THEME # '' THEN SITE$THEME = '<link rel="Stylesheet" href="/db/themes/':SITE$THEME:'" media="screen" type="text/css" />'IF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*CALL GET.SESSION.VAR("adminauth",adminauth)CALL PUT.SESSION.VAR("dd_mode",0)adminpass = ""IF adminauth # 1 THEN  FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'  FORM := '</head><body><p>Administrative priviledges are required. '  FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'  CALL WEB.SEND(FORM)  STOPEND*HTML = ''LOCATE "action" IN CGI$VARS SETTING POS THEN  action = CGI$VALS<POS>END ELSE action = ""LOCATE 'pkg_id' IN CGI$VARS SETTING POS THEN  PKG.ID = CGI$VALS<POS>END ELSE PKG.ID = ''*BEGIN CASE  CASE action = 'rebuild'     MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID THEN       *translate this package definition into something usable by the package builder       OPEN 'MAKE.FILE,':PKG.ID TO F.MAKE.FILE ELSE         EXECUTE "CREATE-FILE DATA MAKE.FILE,":PKG.ID:" 11"         OPEN 'MAKE.FILE,':PKG.ID TO F.MAKE.FILE ELSE STOP 201, 'MAKE.FILE,':PKG.ID       END       CLEARFILE F.MAKE.FILE       *       *Dashboards       *       WIDGET.LIST = '' ;*composite of dashboard and individual widgets       DB.LIST = ''       FILE.LIST = ''       DB.CNT = DCOUNT(PKG$DASHBOARDS<1>,VM)       FOR ON.DB = 1 TO DB.CNT         IF PKG$DASHBOARDS.OVR<1,ON.DB> = 1 THEN LIST.POS = 2 ELSE LIST.POS = 1         IF PKG$DASHBOARDS.ADD<1,ON.DB> = 1 THEN           *add the widgets from this db           READV WIDGETS FROM F.MVDB.DEFS, PKG$DASHBOARDS<1,ON.DB>, 2 ELSE WIDGETS = ''           WCNT = DCOUNT(WIDGETS<1>,VM)           FOR ON.W = 1 TO WCNT             LOCATE WIDGETS<1,ON.W> IN WIDGET.LIST<LIST.POS> SETTING DUM ELSE               WIDGET.LIST = INSERT(WIDGET.LIST,LIST.POS,0,0,WIDGETS<1,ON.W>)             END           NEXT ON.W         END         DB.LIST<LIST.POS,-1> = PKG$DASHBOARDS<1,ON.DB>       NEXT ON.DB       *DB.LIST = PKG$DASHBOARDS       *CONVERT VM TO AM IN DB.LIST       *WRITE DB.LIST ON F.MAKE.FILE, 'DATA_MVDB.DEFS'       PKG.LIST = DB.LIST<1>       CONVERT VM TO AM IN PKG.LIST       IF DCOUNT(PKG.LIST,AM) THEN         WRITE PKG.LIST ON F.MAKE.FILE, 'DATA_MVDB.DEFS'         FILE.LIST<-1> = 'MVDB.DEFS'       END                O.PKG.LIST = DB.LIST<2>       CONVERT VM TO AM IN O.PKG.LIST       IF DCOUNT(O.PKG.LIST,AM) THEN         WRITE O.PKG.LIST ON F.MAKE.FILE, 'DATA_O:MVDB.DEFS'         FILE.LIST<-1> = 'O:MVDD.DEFS'       END       *       *Widget defs and subs       *       WCNT = DCOUNT(PKG$WIDGETS<1>,VM)       FOR ON.W = 1 TO WCNT         IF PKG$WIDGETS.OVR<1,ON.DB> = 1 THEN LIST.POS = 2 ELSE LIST.POS = 1         LOCATE PKG$WIDGETS<1,ON.W> IN WIDGET.LIST<LIST.POS> SETTING DUM ELSE           WIDGET.LIST = INSERT(WIDGET.LIST,LIST.POS,0,0,WIDGETS<1,ON.W>)         END       NEXT ON.W       *WRITE WIDGET.LIST ON F.MAKE.FILE, 'DATA_MVDB.WIDGETS'       WGT.LIST = WIDGET.LIST<1>       CONVERT VM TO AM IN WGT.LIST       IF DCOUNT(WGT.LIST,AM) THEN         WRITE WGT.LIST ON F.MAKE.FILE, 'DATA_MVDB.WIDGETS'         FILE.LIST<-1> = 'MVDB.WIDGETS'       END       O.WGT.LIST = WIDGET.LIST<2>       CONVERT VM TO AM IN O.WGT.LIST       IF DCOUNT(WGT.LIST,AM) THEN         WRITE O.WGT.LIST ON F.MAKE.FILE, 'DATA_O:MVDB.WIDGETS'         FILE.LIST<-1> = 'O:MVDB.WIDGETS'       END       *       COMPILE.COMMANDS = ''       SUB.LIST = ''       WCNT = DCOUNT(WIDGET.LIST,AM)       FOR ON.W = 1 TO WCNT         READV SUB.NAME FROM F.MVDB.WIDGETS, WIDGET.LIST<ON.W>, 1 THEN           LOCATE SUB.NAME IN SUB.LIST SETTING DUM ELSE             SUB.LIST = INSERT(SUB.LIST,1,0,0,SUB.NAME)             IF PKG$COMPILE.OPT = 1 THEN               COMPILE.COMMANDS<-1> = 'COMPILE MVDB.SUBS ':SUB.NAME               IF PKG$FLASH.OPT = 1 THEN COMPILE.COMMANDS := " (O"             END           END         END       NEXT ON.W       WRITE SUB.LIST ON F.MAKE.FILE, 'DATA_MVDB.SUBS'       *       *Additional files and items       *       FILE.CNT = DCOUNT(PKG$FILES<1>,VM)       FOR ON.FILE = 1 TO FILE.CNT         FNAME = PKG$FILES<1,ON.FILE>         ITEM.LIST = ''         IF PKG$LIST<1,ON.FILE> # '' THEN           EXECUTE 'GET-LIST ':PKG$LIST.FILE<1,ON.FILE>:' ':PKG$LIST<1,ON.FILE> CAPTURING JUNK           LOOP             READNEXT ID ELSE EXIT             ITEM.LIST<-1> = ID           REPEAT         END ELSE           IF PKG$ITEMS<1,ON.FILE> = '*' THEN             EXECUTE 'SELECT ':PKG$FILES.DICT<1,ON.FILE>:' ':PKG$FILES<1,ON.FILE> CAPTURING JUNK             LOOP               READNEXT ID ELSE EXIT               ITEM.LIST<-1> = ID             REPEAT           END ELSE             ITEM.LIST = PKG$ITEMS<1,ON.FILE>             CONVERT SVM TO AM IN ITEM.LIST           END         END         IF PKG$FILES.OVR<1,ON.FILE> = 1 THEN FNAME = 'O:':FNAME         IF PKG$FILES.DICT<1,ON.FILE> = 'DICT' THEN           WRITE ITEM.LIST ON F.MAKE.FILE, "DICT_":FNAME         END ELSE           WRITE ITEM.LIST ON F.MAKE.FILE, "DATA_":FNAME         END         LOCATE FNAME IN FILE.LIST SETTING DUM ELSE           FILE.LIST<-1> = FNAME         END       NEXT ON.FILE       *       WRITE FILE.LIST ON F.MAKE.FILE, 'FILE.LIST'       *       PRE.COMMANDS = PKG$PRE.CMD       CONVERT VM TO AM IN PRE.COMMANDS       WRITE PRE.COMMANDS ON F.MAKE.FILE, 'PRE.COMMANDS'       POST.COMMANDS = PKG$POST.CMD       CONVERT VM TO AM IN POST.COMMANDS       POST.COMMANDS<-1> = COMPILE.COMMANDS       WRITE POST.COMMANDS ON F.MAKE.FILE, 'POST.COMMANDS'       *       CALL MVDB.BUILD.PACKAGE(PKG.ID,PATH,SIZE)       PKG$BUILD.TS = DATE() : TIME() "R%5"       PKG$BUILD.SEQ += 1       PKG$SIZE = SIZE       PKG$PATH = PATH       MATWRITE PKG.REC ON F.MVPKG.DATA, PKG.ID     END     GOSUB LOAD.PKGS  CASE action = 'addfile'    LOCATE 'file_name' IN CGI$VARS SETTING POS THEN      FILE.NAME = CGI$VALS<POS>    END ELSE FILE.NAME = ''    LOCATE 'file_dict' IN CGI$VARS SETTING POS THEN      FILE.DICT = CGI$VALS<POS>    END ELSE FILE.DICT = ''    LOCATE 'file_ovr' IN CGI$VARS SETTING POS THEN      FILE.OVR = CGI$VALS<POS>    END ELSE FILE.OVR = ''    LOCATE 'list_file' IN CGI$VARS SETTING POS THEN      LIST.FILE = CGI$VALS<POS>    END ELSE LIST.FILE = ''    LOCATE 'list_name' IN CGI$VARS SETTING POS THEN      LIST.NAME = CGI$VALS<POS>    END ELSE LIST.NAME = ''    LOCATE 'items' IN CGI$VARS SETTING POS THEN      ITEMS = CGI$VALS<POS>      CONVERT ',' TO SVM IN ITEMS    END ELSE ITEMS = ''    IF PKG.ID # '' AND FILE.NAME # '' AND ((LIST.NAME # '' AND LIST.FILE # '') OR ITEMS # '') THEN      MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID THEN        ADD.POS = DCOUNT(PKG$FILES<1>,VM) + 1        PKG$FILES<1,ADD.POS> = FILE.NAME        PKG$FILES.DICT<1,ADD.POS> = FILE.DICT        PKG$ITEMS<1,ADD.POS> = ITEMS        PKG$LIST<1,ADD.POS> = LIST.NAME        PKG$LIST.FILE<1,ADD.POS> = LIST.FILE        *PKG$FILES.OVR<1,ADD.POS> = FILE.OVR        DATA 'LIST ':FILE.DICT:' ':FILE.NAME:' TOTAL SIZE DET-SUPP'        IF LIST.NAME # '' THEN          EXECUTE 'SELECT ':LIST.FILE:' ':LIST.NAME CAPTURING OUTPUT        END ELSE IF ITEMS = "*" THEN          EXECUTE 'SELECT ':FILE.DICT:' ':FILE.NAME CAPTURING OUTPUT        END ELSE          ITEM.LIST = ITEMS          CALL SWAP(ITEM.LIST,SVM,'""')          EXECUTE 'SELECT ':FILE.DICT:' ':FILE.NAME:' "':ITEM.LIST:'"' CAPTURING OUTPUT        END        PKG$FILES.SIZE<1,ADD.POS> = TRIM(OUTPUT<7>) + 0        MATWRITE PKG.REC ON F.MVPKG.DATA, PKG.ID      END      GOSUB EDIT.PACKAGE          END ELSE      PRINT "Error 1"    END  CASE action = 'edit'    MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID THEN      GOSUB EDIT.PACKAGE    END  CASE action = 'save'    VAR.CNT = DCOUNT(CGI$VARS,AM)    MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID ELSE MAT PKG.REC = ''    *Clear these so we can rebuild them. We have the technology.    PKG$WIDGETS = ''    PKG$WIDGETS.OVR = ''    PKG$DASHBOARDS = ''    PKG$DASHBOARDS.OVR = ''    PKG$DASHBOARDS.ADD = ''    PKG$FILES.OVR = ''    PKG$WEB.IMAGE = ''    PKG$WEB.CSS = ''    PKG$WEB.JS = ''    PKG$WEB.ICON = ''    PKG$WEB.IMAGE.OVR = ''    PKG$WEB.CSS.OVR = ''    PKG$WEB.JS.OVR = ''    PKG$WEB.ICON.OVR = ''    WIDGET.ADD.POS = 1    DB.ADD.POS = 1    IMAGE.ADD.POS = 1    CSS.ADD.POS = 1    JS.ADD.POS = 1    ICON.ADD.POS = 1    FOR ON.VAR = 1 TO VAR.CNT      THIS.VAR = CGI$VARS<ON.VAR>      THIS.VAL = CGI$VALS<ON.VAR>      BEGIN CASE        CASE THIS.VAL = ''        *Get widgets        CASE THIS.VAR[1,11] = 'widget_ovr_'        CASE THIS.VAR[1,7] = 'widget_'          WIDGET.ID = THIS.VAR[8,99]          OVR = 'widget_ovr_':WIDGET.ID          OVR.FLAG = 0          LOCATE OVR IN CGI$VARS SETTING POS THEN            OVR.FLAG = 1          END          PKG$WIDGETS<1,WIDGET.ADD.POS> = WIDGET.ID          PKG$WIDGETS.OVR<1,WIDGET.ADD.POS> = OVR.FLAG          WIDGET.ADD.POS += 1        *Get Dashboards                  CASE THIS.VAR[1,10] = 'dashboard_'          DB.ID = THIS.VAR[11,99]          OVR = 'db_ovr_':DB.ID          ADD = 'db_add_':DB.ID          OVR.FLAG = 0; ADD.FLAG = 0          LOCATE OVR IN CGI$VARS SETTING POS THEN            OVR.FLAG = 1          END          LOCATE ADD IN CGI$VARS SETTING POS THEN            ADD.FLAG = 1          END          PKG$DASHBOARDS<1,DB.ADD.POS> = DB.ID          PKG$DASHBOARDS.OVR<1,DB.ADD.POS> = OVR.FLAG          PKG$DASHBOARDS.ADD<1,DB.ADD.POS> = ADD.FLAG          DB.ADD.POS += 1        *Get file overwite flags        CASE THIS.VAR[1,10] = 'files_ovr_'          OVR.POS = FIELD(THIS.VAR,'_',3)          PKG$FILES.OVR<1,OVR.POS> = 1        *Get web files        CASE THIS.VAR = 'web_images'          CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)          PKG$WEB.IMAGE = TRIM(THIS.VAL,VM)        CASE THIS.VAR = 'web_icons'          CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)          PKG$WEB.ICON = TRIM(THIS.VAL,VM)        CASE THIS.VAR = 'web_css'          CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)          PKG$WEB.CSS = TRIM(THIS.VAL,VM)        CASE THIS.VAR = 'web_js'          CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)          PKG$WEB.JS = TRIM(THIS.VAL,VM)      END CASE    NEXT ON.VAR    *Get settings    LOCATE 'pkg_pre_cmd' IN CGI$VARS SETTING POS THEN      PKG$PRE.CMD = CGI$VALS<POS>      CALL SWAP(PKG$PRE.CMD,CHAR(13):CHAR(10),VM)    END ELSE PKG$PRE.CMD = ''    LOCATE 'pkg_post_cmd' IN CGI$VARS SETTING POS THEN      PKG$POST.CMD = CGI$VALS<POS>      CALL SWAP(PKG$POST.CMD,CHAR(13):CHAR(10),VM)          END ELSE PKG$POST.CMD = ''    LOCATE 'compile_opt' IN CGI$VARS SETTING POS THEN      PKG$COMPILE.OPT = 1    END ELSE PKG$COMPILE.OPT = 0    LOCATE 'flash_opt' IN CGI$VARS SETTING POS THEN      PKG$FLASH.OPT = 1    END ELSE PKG$FLASH.OPT = 1    LOCATE 'access_opt' IN CGI$VARS SETTING POS THEN      PKG$ACCESS.OPT = 1    END ELSE PKG$ACCESS.OPT = 0    LOCATE 'pkg_name' IN CGI$VARS SETTING POS THEN      PKG$NAME = CGI$VALS<POS>    END    LOCATE 'pkg_desc' IN CGI$VARS SETTING POS THEN      PKG$DESC = CGI$VALS<POS>    END    MATWRITE PKG.REC ON F.MVPKG.DATA, PKG.ID    GOSUB LOAD.PKGS  CASE action = 'delete'    DELETE F.MVPKG.DATA, PKG.ID    EXECUTE 'DELETE-FILE MAKE.FILE,':PKG.ID CAPTURING JUNK    GOSUB LOAD.PKGS  CASE 1    GOSUB LOAD.PKGSEND CASE*READ ADMIN.TEMPLATE FROM F.WEB.FORMS, "pkg_list_template.html" ELSE ADMIN.TEMPLATE = "pkg_list_template.html not found."CALL SWAP(ADMIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)HEADER = '<div id="dashboard_nav">'HEADER := '<ol class="dashboard_list">'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=users">Users</a></li>'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets">Widgets</a></li>'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=dashboards">Dashboards</a></li>'OPEN 'RSS.BP' TO F.RSS.BP THEN  HEADER := '<li><a href="':CGI$PATH:'/RSS.MAINT">RSS Feed Maintenance</a></li>'ENDHEADER := '<li class="db_active"><a href="':CGI$PATH:'/RSS.MAINT">Package Manager</a></li>'HEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN">Return to Dashboard</a></li>'HEADER := '</ol>'HEADER := '</div>'CALL SWAP(ADMIN.TEMPLATE,'<!-- HEADER -->',HEADER)FOOTER = ''CALL SWAP(ADMIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_MAIN -->',HTML)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_THEME -->',SITE$THEME)CALL WEB.SEND(ADMIN.TEMPLATE)STOP*LOAD.PKGS:*HTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="6"><a href="':CGI$PATH:'/MVPKG.MAIN?action=editpkg" class="add-pkg">Add a Package</a></td></tr>'HTML<-1> = '<tr><th>Package</th><th>Last Build</th><th>Size</th><th>Build#</th><th>Description</th><th>Action</th></tr>'EXECUTE "SSELECT MVPKG.DATA BY NAME" CAPTURING JUNKLOOP  READNEXT FID ELSE EXIT  MATREAD PKG.REC FROM F.MVPKG.DATA, FID ELSE CONTINUE  IF PKG$SIZE # '' THEN    BEGIN CASE      CASE PKG$SIZE >= PWR(10,9)        PKG$SIZE = OCONV(PKG$SIZE,"MD29"):' GB'            CASE PKG$SIZE >= PWR(10,6)        PKG$SIZE = OCONV(PKG$SIZE,"MD26"):' MB'            CASE PKG$SIZE >= PWR(10,3)        PKG$SIZE = OCONV(PKG$SIZE,"MD23"):' kB'      CASE 1        PKG$SIZE := ' bytes'    END CASE  END  BUILD.DATE = OCONV(PKG$BUILD.TS[1,5],"D2/")  BUILD.TIME = OCONV(PKG$BUILD.TS[6,5],"MTS")  ROW = '<tr><td>':PKG$NAME:'</td><td>':BUILD.DATE:' ':BUILD.TIME:'</td>'  ROW := '<td>':PKG$SIZE:'</td><td>':PKG$BUILD.SEQ:'</td><td>':PKG$DESC:'</td>'  ROW := '<td><a href="/dbc/MVPKG.MAIN?action=edit&pkg_id=':FID:'"><img src="/db/icons/brick_edit.png" title="Edit"></a> '  ROW := \<a onClick="return confirm('DELETE: Are you sure?');" href="/dbc/MVPKG.MAIN?action=delete&pkg_id=\:FID:\"><img src="/db/icons/brick_delete.png" title="Delete"></a> \  ROW := '<a href="/dbc/MVPKG.MAIN?action=rebuild&pkg_id=':FID:'"><img src="/db/icons/brick_go.png" title="Rebuild"></a>'  ROW := '<a href="/dbc/MVPKG.MAIN?action=download&pkg_id=':FID:'"><img src="/db/icons/arrow_down.png" title="Download"></a></td></tr>'  HTML<-1> = ROWREPEATHTML<-1> = '<tr><td colspan="6"><a href="':CGI$PATH:'/MVPKG.MAIN?action=editpkg" class="add-pkg">Add a Package</a></td></tr>'HTML<-1> = '</table>'RETURN*EDIT.PACKAGE:CALL MVDB.SUB.WIDGET.LIST(WIDGET.LIST)HTML<-1> = '<form action="':CGI$PATH:'/MVPKG.MAIN" method="POST">'HTML<-1> = 'Package Name: <input type="text" name="pkg_name" value="':PKG$NAME:'"><br/>'HTML<-1> = 'Description: <input type="text" name="pkg_desc" value="':PKG$DESC:'"><br/>'HTML<-1> = '<input type="hidden" name="action" value="save">'HTML<-1> = '<input type="hidden" name="pkg_id" value="':PKG.ID:'">'HTML<-1> = '<div id="submit"><input class="ui-state-default ui-corner-all" type="submit" value="Save" /></div> 'HTML<-1> = '<div id="tabs"> 'HTML<-1> = '<ul><li><a href="#tabs-1">Widgets</a></li>'HTML<-1> = '<li><a href="#tabs-2">Dashboards</a></li>'HTML<-1> = '<li><a href="#tabs-3">File Items</a></li>'HTML<-1> = '<li><a href="#tabs-4">Web Files</a></li>'HTML<-1> = '<li><a href="#tabs-5">Settings</a></li></ul>'HTML<-1> = '<div id="tabs-1" class="tab_content">'*HTML<-1> = '<table width="100%">'HTML<-1> = '<tr><th>Selected</th><th>Widget</th><th>Type</th><th>Subroutine</th><th>Overwrite</th></tr>'WIDGET.CNT = DCOUNT(WIDGET.LIST<1>,VM)FOR W.POS = 1 TO WIDGET.CNT  IF WIDGET.LIST<7,W.POS> = 1 THEN CLASS = 'error' ELSE CLASS = 'p'  LOCATE WIDGET.LIST<1,W.POS> IN PKG$WIDGETS<1> SETTING POS THEN    CHECKED = 'checked'  END ELSE CHECKED = ''  HTML<-1> = '<tr class="':CLASS:'"><td><input type="checkbox" name="widget_':WIDGET.LIST<1,W.POS>:'" value="checked" ':CHECKED:'></td>'  HTML := '<td>':WIDGET.LIST<1,W.POS>:'</td><td>':WIDGET.LIST<4,W.POS>:'</td><td>':WIDGET.LIST<3,W.POS>:'</td>'  IF PKG$WIDGETS.OVR<1,POS> = 1 THEN    CHECKED = 'checked'  END ELSE CHECKED = ''  HTML := '<td><input type="checkbox" name="widget_ovr_':WIDGET.LIST<1,W.POS>:'" value="checked" ':CHECKED:'></td></tr>'NEXT W.POSHTML<-1> = '</table>'*EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNKHTML<-1> = '</div><!--#tabs-1-->'HTML<-1> = '<div id="tabs-2" class="tab_content"> 'HTML<-1> = '<table width="100%">'HTML<-1> = '<tr><th>Selected</th><th>Dashboard ID</th><th>Description</th><th>Include Widgets</th><th>Overwrite</th></tr>'*DB.POS = 1LOOP  READNEXT ID ELSE EXIT  MATREAD DB.ITEM FROM F.MVDB.DEFS, ID ELSE MAT DB.ITEM = ''  HTML<-1> = '<tr>'  LOCATE ID IN PKG$DASHBOARDS<1> SETTING POS THEN    CHECKED = 'checked'  END ELSE CHECKED = ''  HTML<-1> = '<td><input type="checkbox" name="dashboard_':ID:'" value="checked" ':CHECKED:'></td>'        HTML<-1> = '<td>':ID:'</td>'  HTML<-1> = '<td>':DB.DESC:'</td>'  ADD.CHECKED = ''; OVR.CHECKED = ''  IF CHECKED # '' THEN    IF PKG$DASHBOARDS.ADD<1,POS> = 1 THEN      ADD.CHECKED = 'checked'    END    IF PKG$DASHBOARDS.OVR<1,POS> = 1 THEN      OVR.CHECKED = 'checked'    END  END  *HTML<-1> = '<td><input type="checkbox" name="db_add_':ID:'" value="checked" ':ADD.CHECKED:'></td>'  HTML<-1> = '<td><input type="button" value="Add Widgets to Package"></td>'  HTML<-1> = '<td><input type="checkbox" name="db_ovr_':ID:'" value="checked" ':OVR.CHECKED:'></td>'  HTML<-1> = '</tr>'  DB.POS += 1REPEATHTML<-1> = '</table>'*HTML<-1> = '</div><!--#tabs-2-->'HTML<-1> = '<div id="tabs-3" class="tab_content">'HTML<-1> = '<table width="100%">'HTML<-1> = '<tr><td colspan="5"><a href="/dbc/MVPKG.MAIN?action=addfile" class="add-file">Add a File</a></td></tr>'    HTML<-1> = '<tr><th>File Name</th><th>Items/List</th><th>Size</th><th>Overwrite</th><th>Action</th></tr>'FILE.CNT = DCOUNT(PKG$FILES<1>,VM)FOR ON.FILE = 1 TO FILE.CNT  FILE.ERR = 0; ITEM.ERR = 0  OPEN PKG$FILES.DICT<1,ON.FILE>,PKG$FILES<1,ON.FILE> TO PKG.FILEVAR ELSE FILE.ERR = 1  HTML<-1> = '<tr><td '  IF FILE.ERR THEN HTML := 'class="error"'  HTML := '>':PKG$FILES.DICT<1,ON.FILE>:' ':PKG$FILES<1,ON.FILE>:'</td>'  IF PKG$LIST<1,ON.FILE> # '' THEN    OPEN PKG$LIST.FILE<1,ON.FILE> TO LISTFILE THEN      READV TST FROM LISTFILE, PKG$LIST<1,ON.FILE>, 1 ELSE        ITEM.ERR = 1      END    END ELSE ITEM.ERR = 1    HTML<-1> = '<td '    IF ITEM.ERR THEN HTML := 'class="error"'    HTML := '>List: '    IF PKG$LIST.FILE<1,ON.FILE> # '' THEN      HTML := PKG$LIST.FILE:', '    END    HTML := PKG$LIST<1,ON.FILE>:'</td>'  END ELSE    IF NOT(FILE.ERR = 1) THEN      IF PKG$ITEMS<1,ON.FILE> # '*' THEN        ITEM.CNT = DCOUNT(PKG$ITEMS<1,ON.FILE>,SVM)        FOR ON.ITEM = 1 TO ITEM.CNT          READV TST FROM PKG.FILEVAR, PKG$ITEMS<1,ON.FILE,ON.ITEM>, 1 ELSE            ITEM.ERR = 1          END        NEXT ON.ITEM      END    END ELSE ITEM.ERR = 1    SHOW.ITEMS = PKG$ITEMS<1,ON.FILE>    CONVERT SVM TO ',' IN SHOW.ITEMS    IF LEN(SHOW.ITEMS) > 20 THEN      SHOW.ITEMS = SHOW.ITEMS[1,20]:'...'    END    HTML<-1> = '<td '    IF ITEM.ERR THEN HTML := 'class="error"'    HTML := '>':SHOW.ITEMS:'</td>'  END  SHOW.SIZE = PKG$FILES.SIZE<1,ON.FILE>  IF SHOW.SIZE # '' THEN    BEGIN CASE      CASE SHOW.SIZE >= PWR(10,9)        SHOW.SIZE = OCONV(SHOW.SIZE,"MD29"):' GB'            CASE SHOW.SIZE >= PWR(10,6)        SHOW.SIZE = OCONV(SHOW.SIZE,"MD26"):' MB'            CASE SHOW.SIZE >= PWR(10,3)        SHOW.SIZE = OCONV(SHOW.SIZE,"MD23"):' kB'      CASE 1        SHOW.SIZE := ' bytes'    END CASE  END    HTML<-1> = '<td>':SHOW.SIZE:'</td>'  IF PKG$FILES.OVR<1,ON.FILE> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''  HTML<-1> = '<td><input type="checkbox" name="files_ovr_':ON.FILE:'" ':CHECKED:'></td>'  HTML<-1> = \<td><a href="javascript:editFile('\:PKG$FILES.DICT<1,ON.FILE>:',':PKG$FILES<1,ON.FILE>:',':PKG$LIST.FILE<1,ON.FILE>:',':PKG$LIST<1,ON.FILE>:',':PKG$ITEMS<1,ON.FILE>:\');"><img title="Edit" class="icon" src="/db/icons/pencil.png"></a>\  HTML<-1> = \<a href="javascript:deleteFile('\:ON.FILE:\')"><img title="Delete" class="icon" src="/db/icons/delete.png"></a>\  HTML<-1> = '</td></tr>'NEXT ON.FILEHTML<-1> = '<tr><td colspan="5"><a href="/dbc/MVPKG.MAIN?action=addfile" class="add-file">Add a File</a></td></tr></table>'*HTML<-1> = '</div><!--#tabs-3-->'HTML<-1> = '<div id="tabs-4" class="tab_content">'HTML<-1> = '<div id="accordion">'HTML<-1> = '<h3><a href="#">Images</a></h3><div>'IMAGE.CNT = DCOUNT(PKG$WEB.IMAGE<1>,VM)HTML<-1> = '<textarea rows="8" cols="40" name="web_images">'FOR ON.IMAGE = 1 TO IMAGE.CNT  IF PKG$WEB.IMAGE.OVR<1,ON.IMAGE> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''  *HTML<-1> = '<li><input type="checkbox" name="image_ovr_':ON.IMAGE:'" value="1" ':CHECKED:'><input type="text" name="image_':ON.IMAGE:'" value="':PKG$WEB.IMAGE<1,ON.IMAGE>:'"></li>'  HTML<-1> = PKG$WEB.IMAGE<1,ON.IMAGE>NEXT ON.IMAGEHTML<-1> = '</textarea></div>'HTML<-1> = '<h3><a href="#">CSS</a></h3><div>'CSS.CNT = DCOUNT(PKG$WEB.CSS<1>,VM)HTML<-1> = '<textarea rows="8" cols="40" name="web_css">'FOR ON.CSS = 1 TO CSS.CNT  IF PKG$WEB.CSS.OVR<1,ON.CSS> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''  *HTML<-1> = '<li><input type="checkbox" name="css_ovr_':ON.CSS:'" value="checked" ':CHECKED:'><input type="text" name="css_':ON.CSS:'" value="':PKG$WEB.CSS<1,ON.CSS>:'"></li>'  HTML<-1> = PKG$WEB.CSS<1,ON.CSS>NEXT ON.CSSHTML<-1> = '</textarea></div>'HTML<-1> = '<h3><a href="#">Javascript</a></h3><div>'JS.CNT = DCOUNT(PKG$WEB.JS<1>,VM)HTML<-1> = '<textarea rows="8" cols="40" name="web_js">'FOR ON.JS = 1 TO JS.CNT  IF PKG$WEB.JS.OVR<1,ON.JS> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''  *HTML<-1> = '<li><input type="checkbox" name="js_ovr_':ON.JS:'" value="checked" ':CHECKED:'><input type="text" name="js_':ON.JS:'" value="':PKG$WEB.JS<1,ON.JS>:'"></li>'  HTML<-1> = PKG$WEB.JS<1,ON.JS>NEXT ON.JSHTML<-1> = '</textarea></div>'HTML<-1> = '<h3><a href="#">Icons</a></h3><div>'ICON.CNT = DCOUNT(PKG$WEB.ICON<1>,VM)HTML<-1> = '<textarea rows="8" cols="40" name="web_icons">'FOR ON.ICON = 1 TO ICON.CNT  IF PKG$WEB.ICON.OVR<1,ON.ICON> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''  *HTML<-1> = '<li><input type="checkbox" name="icon_ovr_':ON.ICON:'" value="checked" ':CHECKED:'><input type="text" name="icon_':ON.ICON:'" value="':PKG$WEB.ICON<1,ON.ICON>:'"></li>'  HTML<-1> = PKG$WEB.ICON<1,ON.ICON>NEXT ON.ICONHTML<-1> = '</textarea></div>'HTML<-1> = '</div>'*HTML<-1> = '</div><!--#tabs-4-->'HTML<-1> = '<div id="tabs-5" class="tab_content">'*HTML<-1> = '<b>Settings</b>'HTML<-1> = '<ul><li>Pre-Install Commands</li>'CALL SWAP(PKG$PRE.CMD,VM,CHAR(13):CHAR(10))HTML<-1> = '<li><textarea rows="5" cols="50" name="pkg_pre_cmd">':PKG$PRE.CMD:'</textarea></li>'HTML<-1> = '<li>Post-Install Commands</li>'CALL SWAP(PKG$POST.CMD,VM,CHAR(13):CHAR(10))    HTML<-1> = '<li><textarea rows="5" cols="50" name="pkg_post_cmd">':PKG$POST.CMD:'</textarea></li>'IF PKG$COMPILE.OPT = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''HTML<-1> = '<li><input type="checkbox" name="compile_opt" value="checked" ':CHECKED:'> Compile widget subroutines</li>'IF PKG$FLASH.OPT = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''    HTML<-1> = '<li><input type="checkbox" name="flash_opt" value="checked" ':CHECKED:'> Flash compile widget subroutines</li>'IF PKG$ACCESS.OPT = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''HTML<-1> = '<li><input type="checkbox" name="access_opt" value="checked" ':CHECKED:'> Include dashboard and widget user access settings</li>'HTML<-1> = '</ul></div></div></form>'RETURN    000EAFRSS.MAIN0c2* RSS.MAIN** Program: RSS.MAIN* Author: Luke Bucklin* Date: 2/23/2009** Purpose: Create an RSS feed using user-defined subroutine calls** Modified by Peter Schellenbach of Zumasys 07-17-15 for QM compatiblity:*   When testing for cataloged program, check if line 1 is 'V', not 'VR'.*INCLUDE WBPD WWW.INCLUDEINCLUDE RSS.BP RSS.DATA.INC*CALL SET.CONTENT.TYPE("application/xml")*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE STOP 201, 'RSS.FEEDS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'ENDOPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'*FEED.REC = ""LOCATE "feed" IN CGI$VARS SETTING POS THEN  feed = CGI$VALS<POS>  READ FEED.REC FROM F.RSS.FEEDS, feed ELSE FEED.REC = ""ENDIF FEED.REC = "" THEN  feed = "FEEDS"  READ FEED.REC FROM F.RSS.FEEDS, feed ELSE    CALL SET.CONTENT.TYPE("application/xml")    CALL WEB.SEND('<H1>No feeds configured</H1>')    STOP  ENDENDSEL.SUB = FEED.REC<4>ITEM.SUB = FEED.REC<5>MAT RSS.DATA = ""RSS$FEED.REC = FEED.RECREAD CATPTR FROM F.MD, SEL.SUB ELSE CATPTR = ""*PJS 07-17-15*IF CATPTR<1> = "VR" THENIF CATPTR<1> = "V" THEN ; *PJS 07-17-15*  CALL @SEL.SUB(CGI$VARS,CGI$VALS,feed,F.FEED.FILE,MAT RSS.DATA)END ELSE  RSS$FEED.REC<1> = "Feed error: ":SEL.SUB:" not cataloged."ENDFEED.REC = RSS$FEED.RECCALL RSS.XML.ENCODE(FEED.REC,1)FEED.TITLE = FEED.REC<1>FEED.LINK = "http://":CGI$SERVER.NAME:CGI$PATH:'/RSS.MAIN?feed=':feedIF FEED.REC<2> # "" THEN FEED.LINK := "&":FEED.REC<2>FEED.DESC = FEED.REC<3>XML = ""XML<-1> = '<?xml version="1.0" ?>'XML<-1> = '<rss version="2.0">'XML<-1> = '<channel>'XML<-1> = ' <title>':FEED.TITLE:'</title>'XML<-1> = ' <link>':FEED.LINK:'</link>'SHOW.DESC = FEED.DESCIF SHOW.DESC = "" THEN SHOW.DESC = FEED.TITLEXML<-1> = ' <description>':SHOW.DESC:'</description>'XML<-1> = ' <generator>Sierra Bravo Pick RSS</generator>'XDATE = DATE()XTIME = TIME()GOSUB MAKE.DATE.TIMEXML<-1> = ' <lastBuildDate>':DATE.TIME:'</lastBuildDate>'*IF SYSTEM(11) THEN  SELECT TO ID.LISTEND ELSE ID.LIST = ""SUB.ERR = 0LOOP  READNEXT RID FROM ID.LIST ELSE EXIT  READ FEED.REC FROM F.FEED.FILE, RID ELSE EXIT  READ CATPTR FROM F.MD, ITEM.SUB ELSE CATPTR = ""*PJS 07-17-15*  IF CATPTR<1> = "VR" THEN  IF CATPTR<1> = "V" THEN ; *PJS 07-17-15*    CALL @ITEM.SUB(CGI$VARS,CGI$VALS,F.FEED.FILE,RID,FEED.REC,MAT RSS.DATA)  END ELSE    SUB.ERR = 1    MAT RSS.DATA = ""    RSS$TITLE = "Subroutine ":ITEM.SUB:" not cataloged."    RSS$DESCRIPTION = "Feed Error"    RSS$DATE = ICONV("1/1/2000",'D')    RSS$TIME = ICONV("12:00:00",'MT')  END  FOR XX = 1 TO 5    CALL RSS.XML.ENCODE(RSS.DATA(XX),1)  NEXT XX  XML<-1> = '<item>'  XML<-1> = ' <title>':RSS$TITLE:'</title>'  IF INDEX(RSS$LINK,'//',1) THEN    LINK = RSS$LINK  END ELSE IF RSS$LINK # "" THEN    LINK = "http://":CGI$SERVER.NAME:CGI$PATH:'/':RSS$LINK  END ELSE    LINK = ""  END  XML<-1> = ' <link>':LINK:'</link>'  XML<-1> = ' <author>':RSS$AUTHOR:'</author>'  XML<-1> = ' <description><![CDATA['  XML<-1> = RSS$DESCRIPTION  XML<-1> =']]></description>'  XDATE = RSS$DATE  XTIME = RSS$TIME  GOSUB MAKE.DATE.TIME  XML<-1> = '<pubDate>':DATE.TIME:'</pubDate>'  XML<-1> = '</item>'  CALL WEB.SEND(XML)  XML = ''REPEATXML<-1> = '</channel>'XML<-1> = '</rss>'CALL WEB.SEND(XML)STOP*MAKE.DATE.TIME: **READV GMT.OFFSET FROM F.MVDB.CONTROL, 'MVDB.SETTINGS', 6 ELSE GMT.OFFSET = 0IF XTIME = "" THEN XTIME = TIME()IF XDATE = "" THEN XDATE = DATE()*XTIME += ICONV("5:00",'MT')XTIME += 3600 * (GMT.OFFSET * (-1))IF XTIME > 86400 THEN  XTIME -= 86400  XDATE += 1ENDDATE.TIME = OCONV(XDATE,'DWA')[1,3]:', ':OCONV(XDATE,'DD'):' ':OCONV(XDATE,'DMA')[1,3]:' ':OCONV(XDATE,'DY'):' ':OCONV(XTIME,'MTS')RETURN000DDDMVDB.PURGE.SESSIONS0c2* @(#) MVDB.PURGE.SESSIONS Ported to jBASE 17:00:17  08 JUL 2015*  The following variable names were converted*   DATE,TIME* ** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Purge old session data** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed TCLREAD to use SENTENCE() - its more portable* 11-30-15 TOM PARKER - PURGE BASED ON PASSED USERID* 01-25-16 TOM PARKER - DONT AUTO PURGE EMAILED AND WEBSERVICE LOGINS FOR 10 MINUTES**#MAKE# RL $OPTIONS D3    OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, 'WEB.SESSION'    OPEN '','MVDB.UDATA' TO F.MVDB.UDATA ELSE STOP 201, 'MVDB.UDATA'    OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'*    READ SETTINGS.REC FROM F.MVDB.CONTROL, 'MVDB.SETTINGS' ELSE SETTINGS.REC = ""    PURGE.AGE = SETTINGS.REC<5> * 3600  ;* Specified in hours    IF PURGE.AGE = 0 THEN PURGE.AGE = 8 * 3600**PJS 06-12-15*TCLREAD TCL.LINE    TCL.LINE = SENTENCE()     ;*PJS 06-12-15*    PS.LIST = OCONV( TCL.LINE, 'G1 999' )    PS.LIST = TRIM( PS.LIST )    CONVERT " " TO @AM IN PS.LIST*11-30-15*    IF PS.LIST # "" THEN*11-30-15*        XLINE = "SELECT WEB.SESSION "*11-30-15*        FOR N = 1 TO DCOUNT(PS.LIST,@AM)*11-30-15*            XLINE := "'":PS.LIST<N>:"' "*11-30-15*        NEXT N*11-30-15*        EXECUTE XLINE CAPTURING JUNK*11-30-15*        FORCE.PURGE = 1*11-30-15*    END ELSE*11-30-15*        EXECUTE 'SSELECT WEB.SESSION' CAPTURING JUNK*11-30-15*        FORCE.PURGE = 0*11-30-15*    END    EXECUTE 'SSELECT WEB.SESSION' CAPTURING JUNK; *11-30-15*    PURGE.LIST = ''    LOOP        READNEXT SESS.ID ELSE EXIT        READ SESS.REC FROM F.WEB.SESSION,SESS.ID ELSE SESS.REC = ''        PURGE.THIS = 0        PURGE.WEBSERVICE=0;  *01-25-16**11-30-15*        IF FORCE.PURGE THEN*11-30-15*            PURGE.THIS = 1*11-30-15*        END ELSE        LOCATE SESS.ID IN PS.LIST SETTING PURGE.THIS ELSE           PURGE.THIS=0           LOCATE 'userid' IN SESS.REC<1> SETTING USERID.POS ELSE USERID.POS=0           IF USERID.POS THEN              USERID=SESS.REC<2,USERID.POS>*01-25-16*              LOCATE USERID IN PS.LIST SETTING PURGE.THIS ELSE PURGE.THIS=0              LOCATE USERID IN PS.LIST SETTING PURGE.WEBSERVICE ELSE PURGE.WEBSERVICE=0; *01-25-16            END         END        IF NOT(PURGE.THIS) THEN            LOCATE "LastSessionAccess" IN SESS.REC<1> SETTING VPOS THEN                Date = FIELD(SESS.REC<2,VPOS>,'*',1)                Time = FIELD(SESS.REC<2,VPOS>,'*',2)*                AGE = (DATE()-Date) * 86400                AGE += (TIME()-Time)**01-25-16*                IF AGE > PURGE.AGE THEN                IF PURGE.WEBSERVICE THEN THIS.PURGE.AGE=600 ELSE THIS.PURGE.AGE=PURGE.AGE; * 01-25-16                IF AGE > THIS.PURGE.AGE THEN; * 01-25-16                    PURGE.THIS = 1                END            END ELSE PURGE.THIS = 1        END        IF PURGE.THIS THEN            DELETE F.WEB.SESSION, SESS.ID            PURGE.LIST<-1> = SESS.ID        END    REPEAT*    EXECUTE 'SELECT MVDB.UDATA' CAPTURING JUNK    LOOP        READNEXT ID ELSE EXIT        SID = FIELD( ID, '$', 1 )        LOCATE SID IN PURGE.LIST SETTING POS THEN            DELETE F.MVDB.UDATA, ID        END ELSE            READ TST FROM F.WEB.SESSION, SID ELSE                DELETE F.MVDB.UDATA, ID            END        END    REPEAT    STOP00280AAPP.INSTALLER0c2* QM VERSION OF APP.INSTALLER CLONED FROM D3 VERSION 3-3-15 TPARKER$MODE D3** Copyright (C) 2009 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo Corporation* Date: 07/15/2009* Description: Application installer** Modified By: Dave Bucklin, Nerdery Interactive Labs* Date: 02/04/2011* Description: Add overwrite flag, clashes handling specific to MVDashboard**QMINCLUDE DM,BP,UNIX.H FCNTL.H*QMINCLUDE DM,BP,UNIX.H MODE.H**QMCHAR BUFFER[10000]*INSTALL.LOG.ON = 0INSTALL.LOG.ID = "INSTALL*":DATE():"*":TIME()INSTALL.LOG = ""PROCESS.STATUS = 0OVR.FLAG = 0*PROMPT ""PRINT "File path: ":INPUT PACKAGE.FILEIF PACKAGE.FILE = "VERSION" THEN  PRINT  PRINT "Installer Version"  PRINT "1.0"  STOPEND*QMHANDLE = %OPEN(PACKAGE.FILE,O$RDONLY+O$BINARY)*QMOPENSEQ PACKAGE.FILE TO SOURCE.VAR ELSE   CRT 'NO ':PACKAGE.FILE   STOP END*END QM*QMIF NOT(HANDLE) THENIF 0 THEN; *QM  PRINT "Unable to open file." ; STOPEND*PACKET = ""LOOP*QM  L = %READ(HANDLE,BUFFER,10000)*QMREADBLK BUFFER FROM SOURCE.VAR, 10000 ELSE   IF PACKET = '' THEN      CRT 'CANT READ BUFFER'      STOP    END   BUFFER='' ENDL=LEN(BUFFER)*END QMWHILE L > 0 DO  PACKET := BUFFER[1,L]REPEATCLOSESEQ SOURCE.VAR ;* PJS 01-28-16: bug fix (used to be PACKAGE.FILE, but should be file variable!)IF PACKET = "" THEN  PRINT "No package."  STOPENDINSTALL.ID = TIMEDATE()KEEP.SOURCE = "1"*PRINTPRINT "Installing..."*OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE*  CMD = "CREATE-FILE MV.PACKED.FILE 1 31"  CMD = "CREATE.FILE MV.PACKED.FILE"  GOSUB EXEC.CMD  OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE    ERRFILE = "MV.PACKED.FILE"    GOSUB OPEN.ERR    STOP  ENDENDWRITE PACKET ON F.PACKED.FILE, "PACKAGE" ON ERROR NULL*OPEN '','MD' TO F.MD ELSE  ERRFILE = "MD"  GOSUB OPEN.ERR  STOPENDOPEN "MV.INSTALL" TO F.INSTALL ELSE*  CMD = "CREATE-FILE MV.INSTALL 1 11"  CMD = "CREATE.FILE MV.INSTALL"  GOSUB EXEC.CMD  OPEN "MV.INSTALL" TO F.INSTALL ELSE    ERRFILE = "MV.INSTALL"    GOSUB OPEN.ERR    STOP  ENDENDOPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE*  CMD = "CREATE-FILE MV.INSTALL.CF 1 11"  CMD = "CREATE.FILE MV.INSTALL.CF"  GOSUB EXEC.CMD  OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE    ERRFILE = "MV.INSTALL.CF"    GOSUB OPEN.ERR    STOP  ENDENDOPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE*  CMD = "CREATE-FILE MVAPPS.INSTALLED 3 31"  CMD = "CREATE.FILE MVAPPS.INSTALLED"  GOSUB EXEC.CMD  OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE    ERRFILE = "MVAPPS.INSTALLED"    GOSUB OPEN.ERR    STOP  ENDENDOPEN "DICT","MVDB.CLASHES" TO FD.MVDB.CLASHES ELSE*  CMD = "CREATE-FILE DICT MVDB.CLASHES 3"  CMD = "CREATE.FILE DICT MVDB.CLASHES"  GOSUB EXEC.CMDENDINSTALL.LOG.ON = 1*CLEARFILE F.INSTALLDELETE F.INSTALL.CF, "MVAPPS-PRE-SCRIPT" ;* Get rid of this just in case one is left overDELETE F.INSTALL.CF, "MVAPPS-POST-SCRIPT"DELETE F.INSTALL.CF, "PACKAGE.INFO"TARGET = F.INSTALLTARGET.NAME = "MV.INSTALL"GOSUB UNPACK* All individual file packages are now in INSTALL* Unpack the MD scriptsREAD PACKET FROM F.INSTALL, "MV.INSTALL.CF" THEN  TARGET = F.INSTALL.CF  TARGET.NAME = "MV.INSTALL.CF"  GOSUB UNPACK  DELETE F.INSTALL, "MV.INSTALL.CF"END** Execute script that are required prior to compilation*READ CMD FROM F.INSTALL.CF, "MVAPPS-PRE-SCRIPT" THEN  LOG.LINE = TIMEDATE():": Processing PRE-INSTALL commands..."  INSTALL.LOG<-1> = LOG.LINE  * Execute commands that need to be run before the install process begins  GOSUB EXEC.CMD  LOG.LINE = TIMEDATE():": Completed PRE-INSTALL commands."  INSTALL.LOG<-1> = LOG.LINEENDREAD PACKAGE.INFO FROM F.INSTALL.CF, "PACKAGE.INFO" ELSE PACKAGE.INFO = ""PACKAGE.ID = PACKAGE.INFO<6>PACKAGE.INFO<4> = DATE()PACKAGE.INFO<5> = TIME()*SELECT F.INSTALLLOOP  READNEXT PKG.ID ELSE EXIT  IF PKG.ID # "" THEN    READ PACKET FROM F.INSTALL, PKG.ID THEN      TARGET.FILE = FIELD(PKG.ID," ",1)IF TARGET.FILE[1,7] = 'BINARY:' THEN TARGET.FILE=TARGET.FILE[8,999]; **QM      DICT.MOD = FIELD( PKG.ID," ",2)      DATA.MOD = FIELD( PKG.ID," ",3)      DICT = ""      IF FIELD( PKG.ID,'_',1 ) = "DICT" THEN        TARGET.FILE = FIELD( PKG.ID, '_', 2 )IF TARGET.FILE[1,7] = 'BINARY:' THEN TARGET.FILE=TARGET.FILE[8,99]; *QM        DICT = "DICT"      END      OPEN DICT,TARGET.FILE TO F.TARGET ELSE        IF NOT(INDEX(TARGET.FILE,':',1)) THEN*QM*          IF DICT.MOD = "" THEN DICT.MOD = 3*QM*          IF DATA.MOD = "" THEN DATA.MOD = 31*QM*          CMD = "CREATE-FILE ":TARGET.FILE:" ":DICT.MOD:" ":DATA.MOD          CMD = 'CREATE.FILE ':TARGET.FILE          GOSUB EXEC.CMD        END        OPEN DICT,TARGET.FILE TO F.TARGET ELSE          PRINT "Unable to create file ":TARGET.FILE          GOSUB CLEANUP          STOP        END      END      TARGET = F.TARGET      TARGET.NAME = TRIM(DICT:" ":TARGET.FILE)      GOSUB UNPACK    END  ENDREPEAT** Execute script required post compilation*READ CMD FROM F.INSTALL.CF, "MVAPPS-POST-SCRIPT" THEN  LOG.LINE = TIMEDATE():": Processing POST-INSTALL commands..."  INSTALL.LOG<-1> = LOG.LINE  * Use compile options if they are present.  OPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL THEN    READ COMPILE.SETUP FROM F.MVDB.CONTROL, 'COMPILE.SETUP' THEN      COMPILE.VERB = FIELD(COMPILE.SETUP<1>,' ',1)      IF COMPILE.VERB # '' THEN        OPTS = FIELD(COMPILE.SETUP<1>,'(',2)        IF OPTS # '' THEN OPTS = "(":OPTS        CMD.CNT = DCOUNT( CMD, @AM )        FOR CMD.XX = 1 TO CMD.CNT          IF FIELD(CMD<CMD.XX>,' ',1) = 'BASIC' OR FIELD(CMD<CMD.XX>,' ',1) = 'COMPILE' THEN            *make sure we use the right verb and options from the compile.setup            CMD<CMD.XX> = COMPILE.VERB:' ':CMD<CMD.XX>[INDEX(CMD<CMD.XX>,' ',1)+1,999]:' ':OPTS          END        NEXT CMD.XX      END    END  END  * Execute commands that need to be run at the end of the install process  GOSUB EXEC.CMD  LOG.LINE = TIMEDATE():": Completed POST-INSTALL commands."  INSTALL.LOG<-1> = LOG.LINEEND**QM*IF NOT(KEEP.SOURCE) THEN*QM*  FOR X = 1 TO DCOUNT( SOURCE.FILES, @AM )*QM*    CMD = "CLEAR-FILE DATA ":SOURCE.FILES<X>*QM*    GOSUB EXEC.CMD*QM*  NEXT X*QM*ENDREAD INSTALL.LIST FROM F.INSTALL.CF, "LAST.INSTALL" ELSE INSTALL.LIST = ""INSTALL.LIST = INSERT( INSTALL.LIST, 1, 0, 0, INSTALL.ID )WRITE INSTALL.LIST ON F.INSTALL.CF, "LAST.INSTALL"GOSUB CLEANUPINSTALL.LOG<-1> = TIMEDATE():": Install complete."WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.IDWRITE PACKAGE.INFO ON F.MVAPPS.INSTALLED, PACKAGE.IDPROCESS.STATUS = 1GOSUB SEND.DATASTOP*********UNPACK: **********PRINT "Unpacking ":TARGET.NAME:"... ":*BYTES = 0CNT = 0LOOP  PLENGTH = OCONV( PACKET[1,6], 'MCXD' )  REC = PACKET[7,PLENGTH]  PACKET = PACKET[PLENGTH+7,9999999]  ID = REC<1>  REC = DELETE( REC, 1, 0, 0 )  TYP = REC[1,2]  OVR.FLAG = REC[3,1]  REC = REC[4,9999999]  IF TYP = "0x" THEN    *REC = OCONV( REC, 'MY' )    REC = ICONV( REC, 'MX0C' )  END ELSE IF TYP # "0c" THEN    REC = TYP:REC  END  *  CNT += 1  BYTES += LEN(REC)  IF OVR.FLAG THEN    IF DICT = "" THEN      *If we're not installing DICT items, compare for CLASHES      READ CLASH FROM TARGET, ID THEN        BEGIN CASE          *Preserve dashboard user passwords          CASE TARGET.FILE = "MVDB.USERS"            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>          *Preserve dashboard access profile          CASE TARGET.FILE = "MVDB.DEFS"            IF CLASH<5> # REC<5> THEN REC<5> = CLASH<5>          *Preserve widget access profile          CASE TARGET.FILE = "MVDB.WIDGETS"            IF CLASH<2> # REC<2> THEN REC<2> = CLASH<2>          *Preserve widget compile option          CASE TARGET.FILE = "MVDB.CONTROL" AND ID = "COMPILE.SETUP"            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>        END CASE        IF CLASH # '' AND REC # CLASH THEN          CLASH.NAME = TARGET.NAME          CONVERT " " TO "_" IN CLASH.NAME          OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE*            CMD = "CREATE-FILE DATA MVDB.CLASHES,":CLASH.NAME:" 7"            CMD = "CREATE.FILE DATA MVDB.CLASHES,":CLASH.NAME            GOSUB EXEC.CMD            OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE              PRINT "Unable to create file MVDB.CLASHES,":CLASH.NAME              GOSUB CLEANUP              STOP            END          END          WRITE CLASH ON F.CLASHES, ID          CLOSE F.CLASHES        END      END    END    WRITE REC ON TARGET, ID ON ERROR NULL  END ELSE    READ TST FROM TARGET, ID ELSE      WRITE REC ON TARGET, ID ON ERROR NULL    END  END  IF NOT(MOD(CNT,500)) THEN PRINT "*":UNTIL PACKET = "" DO REPEATIF CNT # 1 THEN PLURAL = "s" ELSE PLURAL = ""PRINT CNT:" record":PLURAL:"."LOG.LINE = TIMEDATE():": UNPACKED ":CNT:" RECORDS TO ":TARGET.NAMEINSTALL.LOG<-1> = LOG.LINERETURN**********CLEANUP: ***********CLEARFILE F.INSTALLCLEARFILE F.PACKED.FILERETURN*EXEC.CMD: **CMD.CNT = DCOUNT( CMD, @AM )FOR CMD.XX = 1 TO CMD.CNT  THIS.CMD = CMD<CMD.XX>*QMCRT THIS.CMD*QM*IF FIELD(THIS.CMD,' ',1) = 'CREATE-FILE' THENTEST.CMD=FIELD(THIS.CMD,' ',1); *QMIF THIS.CMD = 'CREATE-FILE' OR THIS.CMD = 'CREATE.FILE' THEN; *QM  CRT FIELD(THIS.CMD,' ',1)  BINARY.POS=INDEX(THIS.CMD,'BINARY:',1)  IF BINARY.POS THEN     THIS.CMD=THIS.CMD[1,BINARY.POS-1]:(THIS.CMD[BINARY.POS+7,999])   END  LOOP     SP.CNT=DCOUNT(THIS.CMD,' ')      LAST.CMD=THIS.CMDCRT FIELD(THIS.CMD,' ',SP.CNT)      IF NUM(FIELD(THIS.CMD,' ',SP.CNT)) THEN         POS=INDEX(THIS.CMD,' ',SP.CNT-1)         THIS.CMD=THIS.CMD[1,POS-1]       ENDCRT THIS.CMD   UNTIL THIS.CMD = LAST.CMD DO REPEAT END*END QMCRT THIS.CMD  LOG.LINE = TIMEDATE():": EXEC: ":THIS.CMD  INSTALL.LOG<-1> = LOG.LINE  EXECUTE THIS.CMD CAPTURING JUNK  IF INSTALL.LOG.ON THEN    WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID  ENDNEXT CMD.XXRETURN*OPEN.ERR: **LOG.LINE = TIMEDATE():": FILE OPEN ERROR: ":ERRFILEINSTALL.LOG<-1> = LOG.LINEPRINT LOG.LINEGOSUB SEND.DATARETURN*SEND.DATA: **PRINTIF PROCESS.STATUS = 1 THEN INSTALL.STATUS = "Success" ELSE INSTALL.STATUS = "Failed"PRINT "Install process finished. Status: ":INSTALL.STATUSRETURNEND0019BBWEB.SEND0c2SUBROUTINE WEB.SEND(FORM)********************** (C) Copyright 2003 Sierra Bravo Corporation, All rights reserved.** Program: WEB.SEND* Library: WBP*  Author: Luke J. Bucklin*    Date: 2/29/00** Purpose: Send the web page.** Modified By  : Mike Schmidt, Sierra Bravo* Date Revised : 11/06/2003* Modification : The program was modified to account for the following:*                1) Header Management: This program will check to see*                   if the content type has been written to the browser*                   before ever printing anything to standard out.  If*                   the headers have not been sent, the program will print*                   the headers using the SESSION$CONTENT.TYPE,*                   SESSION$HEADERS, and SESSION$COOKIES session variables.*                   The program will then set the SESSION$CONTENT.SENT*                   variable.*                   WARNING: This program assumes that the global SESSION*                   variables were setup prior to using this subroutine.*                   WARNING: The SESSION$OUTBUF.SIZE should not be relied*                   upon to prevent the buffer from exceeding the set limit.*                   This program simply flushes the buffer if it exceeds*                   the set size limit.**                2) Buffer Management: Instead of always printing every*                   thing to standard out, by default the program will*                   write everything passed into into the SESSION$OUTBUF*                   variable.  This program will then flush the buffer*                   under certain situations.  The first is if the buffer*                   size reaches the limit set in SESSION$OUTBUF.SIZE. If*                   this happens the prgram will flush the buffer then*                   reinitialize it.  The second is if the SESSION$OUTBUF.FLAG*                   is set to FALSE, then this program will always flush*                   the buffer.**                3) The program will display debug information if the global*                   variable SESSION$GLOBAL.DEBUG flag is >= 3.** Modified by Peter Schellenbach of Zumasys 12-15-15 for new PDF generation feature*   do not append form & @AM to output buffer if form is null*   do not add DOCTYPE to output unless content type is html*   do not include debug output if content type is not html or xml** 09-23-16 Tom Parker - Eliminate GO_BACK button support and replace with*          logic to handle standard browser back button (need to prevent browser*          from caching MVDB pages).** 04-21-17 Peter Schellenbach - send response status code before Content-type,*          if set (X-MVDB-STATUS private header).** 10-18-17 Peter Schellenbach - removed duplicate debug info section. Changed condition*          for sending debug info to SESSION$GLOBAL.DEBUG >= 3 instead of = 1.*          Eliminate extra AM appended to the form data.*********************** Add the incoming string to the buffer.INCLUDE WBPD WWW.INCLUDE*IF NOT(ASSIGNED(SESSION$CONTENT.SENT)) THEN  MAT WWW.INFO = ""  SESSION$CONTENT.SENT = 1END*SHOW.SESSION.VARS = 0IF SESSION$GLOBAL.DEBUG >= 3 THEN  OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SHOW.SESSION.VARS = 1END*IF FORM <> '' THEN  CALL SWAP(FORM,'<!-- CGI$PATH -->',CGI$PATH)  *PJS 09-21-2017*SESSION$OUTBUF := FORM:@AM  SESSION$OUTBUF := FORM ; *PJS 09-21-2017*END** If the buffer is greater then the max size or the buffer flag is false then flush.IF LEN(SESSION$OUTBUF) >= SESSION$OUTBUF.SIZE OR NOT(SESSION$OUTBUF.FLAG) THEN* Before flushing, check to see if the headers have been send.  IF NOT(SESSION$CONTENT.SENT) THEN    IF SESSION$STATUS.CODE > 0 THEN* 04-21-17 send the status code before headers      PRINT "X-MVDB-STATUS: ":SESSION$STATUS.CODE    END* The headers have not been sent so send them now.    IF SESSION$CONTENT.TYPE = "" THEN      CALL SET.CONTENT.TYPE("")    END* If there are any cookies that need to be set, do it now.    PRINT "Content-type: ":SESSION$CONTENT.TYPE* If there are any cookies that need to be set, do it now.    FOR I = 1 TO DCOUNT(SESSION$COOKIES,@AM)      COOKIE = SESSION$COOKIES<I>      IF INDEX(COOKIE, "; path=", 1) + INDEX(COOKIE, ";path=", 1) = 0 THEN COOKIE := "; path=/"      PRINT "Set-Cookie: ":COOKIE    NEXT I* If there are any additional headers that need to be set, do it now.* 9-23-16 *    PRINT 'Cache-Control: no-cache'    PRINT 'Expires: Mon, 26 Jul 1997 05:00:00 GMT'; * 9-26-13 *    PRINT 'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'; * 9-26-13 *    PRINT 'Pragma: no-cache'; * 9-26-13 *    FOR I = 1 TO DCOUNT(SESSION$HEADERS,@AM)      PRINT SESSION$HEADERS<I>    NEXT I* Now print the blank line that ends the headers.    PRINT    IF INDEX(SESSION$CONTENT.TYPE,'html',1) THEN      IF INDEX(SESSION$OUTBUF<1>,'<!DOCTYPE',1) = 0 THEN        PRINT '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'        PRINT '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'      END    END* Set the SESSION$CONTENT.SENT variable so next time we know not to send the headers.    SESSION$CONTENT.SENT = 1* From this point on, do not buffer.    IF SESSION$OUTBUF.FLAG THEN      CALL SET.BUFFER(0)    END  END  LINE.CNT = DCOUNT( SESSION$OUTBUF, @AM )  FOR LINE.J = 1 TO LINE.CNT    PRINT SESSION$OUTBUF<LINE.J>  NEXT LINE.J  IF SESSION$GLOBAL.DEBUG >= 3 THEN    IF INDEX(SESSION$CONTENT.TYPE,'xml',1) OR INDEX(SESSION$CONTENT.TYPE,'html',1) THEN* If the debug flag is set then dump all the session information to the browser.      PRINT '<!-- Debug Information generated by WEB.SEND.  This feature can be turned off by'      PRINT '     setting the SESSION$GLOBAL.DEBUG = "1" in the initalization program     -->'      PRINT '<!-- START DEBUG OUPUT '      PRINT '     GET AND POST VARS:'      FOR I = 1 TO DCOUNT(CGI$VARS,@AM)        PRINT '     ':CGI$VARS<I>:' = ':CGI$VALS<I>      NEXT I      PRINT      IF SHOW.SESSION.VARS THEN        PRINT '    SESSION VARIABLES:'        PRINT '    SESSION$ID = ':SESSION$ID        READ REC FROM F.WEB.SESSION, SESSION$ID THEN          PRINT '    SESSION DATE = ':OCONV(REC<3>,'D4/')          PRINT '    SESSION TIME = ':OCONV(REC<4>,'MTS,')          FOR I = 1 TO DCOUNT(REC<1>,@VM)            PRINT '    ':REC<1,I>:' = ':REC<2,I>          NEXT I        END      END        PRINT '    END DEBUG OUTPUT -->'        PRINT      END    END  SESSION$OUTBUF = ''  END  RETURNEND00009CWDB.VIEW0c2*CALL WDB.VARS(VARS,VALS)HEADING "Variable" "L#20":" ":"Value"FOR N = 1 TO DCOUNT( VARS, @AM )  PRINT VARS<N> "L#20":" ":VALS<N>NEXT NSTOP001698SUB.PDF.FUNC0c2SUBROUTINE SUB.PDF.FUNC(ACTION, MAIN.TEMPLATE)** Copyright (c) 2016 Zumasys, Inc. All rights reserved.* Description: PDF utility functions*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*DIM PDF$SETTINGS(10)EQU PDF$ENABLED   TO PDF$SETTINGS(1)EQU PDF$COMMAND   TO PDF$SETTINGS(2)EQU PDF$DIRECTORY TO PDF$SETTINGS(3)EQU PDF$LIFETIME  TO PDF$SETTINGS(4)*IF SYSTEM(91) THEN isWindows = 1 ELSE isWindows = 0 ;*QM**OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'MATREAD PDF$SETTINGS FROM F.MVDB.CONTROL,'PDF.SETTINGS' ELSE MAT PDF$SETTINGS=''*OPEN '','WDB.DEBUG' TO F.WDB.DEBUG THEN LOGGING = 1 ELSE LOGGING = 0*BEGIN CASE  CASE ACTION = 'generate'    * HTML templates may have references to css, javascript, images, etc. so swap these to be file references    IF LOGGING THEN      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'SUB.PDF.FUNC generate')    END    IF isWindows THEN DIRSEP = '\' ELSE DIRSEP = '/'    LOCATE 'INSTALL_PATH' IN CGI$VARS SETTING POS THEN      DBROOT = CGI$VALS<POS>    END ELSE      IF isWindows THEN        DBROOT = 'C:\Program Files (x86)\Zumasys\MV Dashboard\bin\mvappsvr'      END ELSE        DBROOT = '/usr/local/mvappsvr/bin/mvappsvr'      END    END    IF isWindows THEN CONVERT '\' TO '/' IN DBROOT ;* HTML path uses forward slash    NDS = DCOUNT(DBROOT,'/')    POS = INDEX(DBROOT,'/',NDS-2)    IF POS = 0 THEN POS = LEN(DBROOT)    DBROOT = DBROOT[1,POS]:'docroot/db/'    *IF LOGGING THEN    *  SAVE.MAIN.TEMPLATE = MAIN.TEMPLATE    *END    *    * TODO: the SWAP() below handles any references to images, css & scripts    * that are found in the HTML to be rendered, but if there are references    * to images within css these are not handled. Need to figure out how to    * handle these.    *    CALL SWAP(MAIN.TEMPLATE,'/db/',DBROOT)    *    ** CLONED FROM WEB.SEND    CALL SWAP(MAIN.TEMPLATE,'<!-- CGI$PATH -->',CGI$PATH)    IF INDEX(MAIN.TEMPLATE<1>,'<!DOCTYPE',1) = 0 THEN          MAIN.TEMPLATE = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"':@AM:'"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">':MAIN.TEMPLATE    END    ** END CLONE FROM WEB.SEND    *    * Open the native content directory & get path to same    OPEN 'NATIVE.CONTENT' TO F.NATIVE.DIR ELSE      PRINT '500 ERROR: CANNOT OPEN NATIVE.CONTENT'      STOP ;* intentional stop    END    NATIVE.DIR = PDF$DIRECTORY    IF isWindows THEN CONVERT '/' TO '\' IN NATIVE.DIR ;*UV may have wrong separator!    IF NATIVE.DIR[LEN(NATIVE.DIR),1] NE DIRSEP THEN NATIVE.DIR = NATIVE.DIR : DIRSEP    *    * Generate unique ID for HTML & PDF files in NATIVE.CONTENT    CALL SUB.GET.NEXT.ID(UNIQUE.ID,F.MVDB.CONTROL)    HTM.ID=UNIQUE.ID:'.htm'    PDF.ID=UNIQUE.ID:'.pdf'    *    * Save HTML in native content directory    WRITE MAIN.TEMPLATE ON F.NATIVE.DIR,HTM.ID    *    * Build command line for PDF converter    INPFILE = NATIVE.DIR:HTM.ID    OUTFILE = NATIVE.DIR:PDF.ID    CMDLINE = PDF$COMMAND    IF CMDLINE = '' THEN      PRINT '500 ERROR: PDF CONVERT COMMAND MISSING'      STOP ;* intentional stop    END    CALL SWAP(CMDLINE,'[INPUT_FILE]',INPFILE)    CALL SWAP(CMDLINE,'[OUTPUT_FILE]',OUTFILE)    CMDLINE = 'SH ':CMDLINE ;*QM* quotes not allowed around INPFILE & OUTFILE    *    * Execute the PDF convert command    EXECUTE CMDLINE CAPTURING OUTPUT    *TODO: check for errors creating PDF file    IF LOGGING THEN      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'Command line: ':CMDLINE)      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'docroot/db: ':DBROOT)      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'Command output:':@AM:OUTPUT)      *CALL SWAP(SAVE.MAIN.TEMPLATE,'&','&amp;')      *CALL SWAP(SAVE.MAIN.TEMPLATE,'<','&lt;')      *CALL SWAP(SAVE.MAIN.TEMPLATE,'>','&gt;')      *CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'MAIN.TEMPLATE':@AM:SAVE.MAIN.TEMPLATE)    END    *    * Send content file name to mvappsvr using special header    PRINT 'X-MVDB-CONTENT-FILE: ':OUTFILE    CALL SET.CONTENT.TYPE('application/pdf')    SESSION$HEADERS<-1> = 'Content-Disposition: attachment; filename=':PDF.ID    *    * Remove HTML file from native content directory    IF NOT(LOGGING) THEN      DELETE F.NATIVE.DIR,HTM.ID    END    *    * All done!    *  CASE ACTION = 'cleanup'    IF PDF$LIFETIME >= 999999 THEN RETURN ;* Keep PDF files forever    IF PDF$LIFETIME = 0 THEN Freq = 3600 ELSE Freq = 86400    Today = DATE()    Now = (Today * 86400) + TIME()    READU PDF.CLEANUP.REC FROM F.MVDB.CONTROL,'PDF.CLEANUP.TASK' THEN      Prev = PDF.CLEANUP.REC<1>    END ELSE      Prev = Now - Freq    END    IF Now < Prev + Freq THEN      RELEASE F.MVDB.CONTROL,'PDF.CLEANUP.TASK'      RETURN    END    IF OCONV('0','D2/')[1,2] # '31' THEN USA.DATE=1 ELSE USA.DATE=0    * Preform cleanup once per day (or once per hour for immediate removal)    PDF.CLEANUP.REC = Now    WRITE PDF.CLEANUP.REC ON F.MVDB.CONTROL,'PDF.CLEANUP.TASK' ON ERROR      NULL    END    OPEN 'NATIVE.CONTENT' TO F.NATIVE.DIR ELSE RETURN    SELECT F.NATIVE.DIR    DONE = 0    LOOP      READNEXT PDF.ID ELSE DONE = 1    UNTIL DONE DO      IF PDF.ID MATCHES '18N.pdf' OR PDF.ID MATCHES '18N.PDF' THEN        IF USA.DATE THEN          PDFTime = (ICONV(PDF.ID[5,2]:'/':PDF.ID[7,2]:'/':PDF.ID[1,4],'D') * 86400) + (PDF.ID[9,2] * 3600) + (PDF.ID[11,2] * 60) + PDF.ID[13,2]        END ELSE          PDFTime = (ICONV(PDF.ID[7,2]:'/':PDF.ID[5,2]:'/':PDF.ID[1,4],'D') * 86400) + (PDF.ID[9,2] * 3600) + (PDF.ID[11,2] * 60) + PDF.ID[13,2]        END        Expires = PDFTime + (PDF$LIFETIME * 86400) + 1800        IF Expires < Now THEN          DELETE F.NATIVE.DIR,PDF.ID ON ERROR            NULL          END        END      END    REPEAT    *END CASERETURNEND00031FDELETE.SESSION.VAR0c2    SUBROUTINE DELETE.SESSION.VAR( Var )* @(#) DELETE.SESSION.VAR Ported to jBASE 17:00:16  08 JUL 2015*  The following variable names were converted*   VAR* ** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program reads a value from the current web*              session record.* Init*#MAKE# RL $OPTIONS D3    INCLUDE WBPD WWW.INCLUDE    EQU FALSE TO 0, TRUE TO 1    EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*    READ REC FROM F.WEB.SESSION, SESSION$ID THEN        LOCATE Var IN REC<1> SETTING POS THEN            DELETE REC<1,POS>            DELETE REC<2,POS>            WRITE REC ON F.WEB.SESSION, SESSION$ID        END    END*    RETURN000338XML.ENCODE0c2SUBROUTINE XML.ENCODE(STRING.TO.PARSE, FLAG)** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: David Kam (Probably), Sierra Bravo* Date: Unknown* Description: Encode text prior to inserting into XML documents**#MAKE# RL $OPTIONS D3IF STRING.TO.PARSE # '' THEN  IF INDEX(STRING.TO.PARSE,'<!CDATA[',1) > 0 THEN    FLAG = 'X'  END  IF INDEX(STRING.TO.PARSE,']]>',1) > 0 THEN    FLAG = 'X'  END  IF FLAG = 'C' THEN    STRING.TO.PARSE = '<[!CDATA[':STRING.TO.PARSE:']]>'  END ELSE    CALL SWAP(STRING.TO.PARSE,'&','&amp;')    CALL SWAP(STRING.TO.PARSE,'<','&lt;')    CALL SWAP(STRING.TO.PARSE,'>','&gt;')    CALL SWAP(STRING.TO.PARSE,'"','&quot;')    CALL SWAP(STRING.TO.PARSE,"'",'&#39;') ;*dmb 12/7/10 &apos; wasn't rendering correctly in IE8  ENDENDRETURN0004A5TIMEOUT.SESSION0c2** Copyright (C) 2004 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 06/03/04* Description: This program is used to timeout session records.  This program*              should be run at regular intervals to remove unused session records.*            *#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)VAL = ''*TODAY = DATE()NOW   = TIME()*OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP*CMD = 'SELECT WEB.SESSION'EXECUTE CMD CAPTURING JUNK*LOOP  READNEXT ID ELSE EXIT  READU REC FROM F.WEB.SESSION, ID THEN    LOCATE 'LastSessionAccess' IN REC<1> SETTING POS THEN      LAST.ACCESS = REC<2,POS>      LA.DAY = FIELD(LAST.ACCESS,'*',1)      LA.TIME = FIELD(LAST.ACCESS,'*',2)      IF (LA.DAY < (TODAY-1)) THEN        * If it is two days old, then get rid of it.        DELETE F.WEB.SESSION, ID      END    END ELSE      TOTAL.VARS = DCOUNT(REC<1>, @VM)      REC<1,TOTAL.VARS+1> = 'LastSessionAccess'      REC<2,TOTAL.VARS+1> = DATE():'*':TIME()      WRITE REC ON F.WEB.SESSION, ID    END  ENDREPEAT*END0000A8GET.CGI0c2SUBROUTINE GET.CGI(VARNAME,VALUE)*INCLUDE WBPD WWW.INCLUDE*LOCATE VARNAME IN CGI$VARS SETTING POS THEN  VALUE = CGI$VALS<POS>END ELSE VALUE = ""RETURN0014B5DRILLDOWN.STACK.RTNE0c2SUBROUTINE DRILLDOWN.STACK.RTNE(F.MVDB.UDATA,DD.STACK,GO.BACK)** 4-25-16 Tom Parker - Created to support drilldown cookie concept to *                      allow for automatic go back functionality* 09-23-16 Tom Parker - Made obsolete with changes in philosophy on how*                       to handle going back from drilldownsINCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.USERSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*EQU TRUE TO 1, FALSE TO 0, AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*MATREAD GLOBAL.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:'$UG' ELSE MAT GLOBAL.USER.DATA=''STACK.ID=SESSION$ID:'$DD.STACK'READ DD.STACK FROM F.MVDB.UDATA, STACK.ID ELSE DD.STACK=''IF DD.STACK <> '' THEN   LAST.STACK.CNTR=DCOUNT(DD.STACK,AM)   LAST.STACK.ENTRY.ID=SESSION$ID:'$DD.':LAST.STACK.CNTR   READ LAST.CGI.REC FROM F.MVDB.UDATA, LAST.STACK.ENTRY.ID:'.VARS' ELSE LAST.CGI.REC='' END ELSE   LAST.STACK.CNTR=0   LAST.CGI.REC='' ENDVAL.VARS=CGI$VARS; CONVERT AM TO VM IN VAL.VARSCGI.REC=VAL.VARSVAL.VALS=CGI$VALS; CONVERT AM TO VM IN VAL.VALSCGI.REC<2>=VAL.VALSLOCATE 'dd' IN CGI$VARS SETTING POS ELSE POS=999DD.VAR=CGI$VALS<POS>* DBNAME WILL BE GO_BACK IF PULLING BACK FROM DRILLDOWNLOCATE 'dbname' IN CGI$VARS SETTING POS ELSE POS=999DBNAME=CGI$VALS<POS>*** IF DOING A BACKUP PULL IN INFORMATION FROM PREVIOUS*IF (DBNAME = "GO_BACK" OR DBNAME = "go_back") AND LAST.STACK.CNTR > 1 THEN   DELETE.STACK.ENTRY.ID=SESSION$ID:'$DD.':LAST.STACK.CNTR   DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.GUD'   DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.WUD'   DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.VARS'   DD.STACK=DELETE(DD.STACK,LAST.STACK.CNTR,0,0)   WRITE DD.STACK ON F.MVDB.UDATA, STACK.ID   NEW.STACK.ENTRY.ID=SESSION$ID:'$DD.':LAST.STACK.CNTR-1   READ CGI.REC FROM F.MVDB.UDATA, NEW.STACK.ENTRY.ID:'.VARS' ELSE CGI.REC=''   CGI$VARS=CGI.REC<1>   CONVERT VM TO AM IN CGI$VARS   CGI$VALS=CGI.REC<2>   CONVERT VM TO AM IN CGI$VALS   MATREAD GLOBAL.USER.DATA FROM F.MVDB.UDATA, NEW.STACK.ENTRY.ID:'.GUD' ELSE MAT GLOBAL.USER.DATA=''   MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA, SESSION$ID:'$UG'**   MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, NEW.STACK.ENTRY.ID:'.WUD' ELSE MAT WIDGET.USER.DATA=''   GO.BACK=1   RETURN END*** IF FROM A SUBMIT BUTTON THEN SIMPLY REFRESH LAST STACK ENTRY** BUT MAKE SURE IT HAS DRILLDOWN IF PREVIOUS DID** SAME APPLIES TO DEBUG AND UNDEBUG BUTTON*LOCATE 'debug_widget' IN CGI$VARS SETTING DEBUG.POS ELSE DEBUG.POS=0LOCATE 'undebug_widget' IN CGI$VARS SETTING UNDEBUG.POS ELSE UNDEBUG.POS=0LOCATE 'sw' IN CGI$VARS SETTING POS ELSE POS=999SW.VAR=CGI$VALS<POS>INP.POS=INDEX(VM:VAL.VARS,VM:'inp_',1)IF (SW.VAR <> '' AND INP.POS) OR DEBUG.POS OR UNDEBUG.POS THEN   LOCATE 'dd' IN LAST.CGI.REC<1> SETTING DD.POS ELSE DD.POS=999   DD.VAL=LAST.CGI.REC<2,DD.POS>   IF DD.VAL <> '' THEN      LOCATE 'dd' IN CGI$VARS SETTING DD.POS ELSE DD.POS=DCOUNT(CGI$VARS,AM)+1      IF CGI$VALS<DD.POS> = '' THEN         CGI.REC<1,DD.POS>='dd'         CGI.REC<2,DD.POS>=DD.VAL         CGI$VARS<DD.POS>='dd'         CGI$VALS<DD.POS>=DD.VAL       END    END   * DEBUG POSITION MAY HAVE CHANGED SO FIND AGAIN   IF DEBUG.POS THEN      LOCATE 'debug_widget' IN CGI.REC<1> SETTING DEBUG.POS ELSE DEBUG.POS=0      IF DEBUG.POS THEN         CGI.REC=DELETE(CGI.REC,1,DEBUG.POS,0)         CGI.REC=DELETE(CGI.REC,2,DEBUG.POS,0)       END    END   IF UNDEBUG.POS THEN      LOCATE 'undebug_widget' IN CGI.REC<1> SETTING UNDEBUG.POS ELSE UNDEBUG.POS=0      IF UNDEBUG.POS THEN         CGI.REC=DELETE(CGI.REC,1,UNDEBUG.POS,0)         CGI.REC=DELETE(CGI.REC,2,UNDEBUG.POS,0)       END    END   STACK.ENTRY.ID=LAST.STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END**** SIMPLY WRITE OUT THIS SESSION INFORMATION IF:**    1.  NOTHING YET ON THE STACK**    2.  ONLY ONE ENTRY ON THE STACK AND THIS ISN'T A DRILL DOWN*IF NOT(LAST.STACK.CNTR) OR (LAST.STACK.CNTR = 1 AND DD.VAR = '') THEN   *   STACK.ENTRY.ID=SESSION$ID:'$DD.1'   DD.STACK=STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END*** ID DOING A DRILLDOWN THEN PUSH ONTO STACK*IF DD.VAR <> '' THEN   NEXT.STACK.CNTR=LAST.STACK.CNTR+1   STACK.ENTRY.ID=SESSION$ID:'$DD.':NEXT.STACK.CNTR   DD.STACK<NEXT.STACK.CNTR>=STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END*** IF NO CHANGE IN CGI VARS THEN REFRESH LAST STACK ENTRY*IF CGI.REC = LAST.CGI.REC THEN   STACK.ENTRY.ID=LAST.STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END*** ALL ELSE SHOULD BE A NEW DASHBOARD SO START OVER WITH STACK** AFTER PURGING ALL PREVIOUSLY STACKED ITEMS*IF LAST.STACK.CNTR > 1 THEN   FOR DELETE.CNTR = LAST.STACK.CNTR TO 2 STEP -1      DELETE.STACK.ENTRY.ID=SESSION$ID:'$DD.':DELETE.CNTR      DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.GUD'      DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.WUD'      DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.VARS'    NEXT DELETE.CNTR ENDSTACK.ENTRY.ID=SESSION$ID:'$DD.1'DD.STACK=STACK.ENTRY.IDGOSUB WRITE.STACK*RETURN*WRITE.STACK:*WRITE DD.STACK ON F.MVDB.UDATA, STACK.IDWRITE CGI.REC ON F.MVDB.UDATA, STACK.ENTRY.ID:'.VARS'MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA, STACK.ENTRY.ID:'.GUD'RETURN*END000E3BMVDB.DEBUG0c2** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: December, 2007* Description: Dashboard & Widget Debugger** Modified by Peter Schellenbach of Zumasys 06-08-15 for QM compatiblity:*   Change SYSTEM(12) to SYSTEM(1020).*   Change U50BB to @USERNO**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGETSPROMPT ''*OPEN '','MVDB.DEBUG.INFO' TO F.MVDB.DEBUG.INFO ELSE  EXECUTE 'CREATE-FILE MVDB.DEBUG.INFO 1 3' CAPTURING JUNK  OPEN '','MVDB.DEBUG.INFO' TO F.MVDB.DEBUG.INFO ELSE STOP 201, 'MVDB.DEBUG.INFO'ENDOPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'*MY.PORT = @USERNO ; * FIELD( OCONV( '', 'U50BB' ), ' ', 1 ) *PJS 06-08-15*DEBUG.ID = MY.PORT*READ DB.REC FROM F.MVDB.DEBUG.INFO, DEBUG.ID ELSE DB.REC = ''*WIDGET.ID = DB.REC<1>*PRINT "Bravo Dashboard Debugger"PRINTOK = 0LOOP  PRINT "Widget (?=list)":  IF WIDGET.ID # "" THEN PRINT " (":WIDGET.ID:")":  PRINT ": ":  INPUT USE.WIDGET.ID  IF USE.WIDGET.ID # '' THEN WIDGET.ID = USE.WIDGET.ID  BEGIN CASE    CASE WIDGET.ID = ''      STOP    CASE WIDGET.ID = "?"      EXECUTE "SORT MVDB.WIDGETS"      PRINT      WIDGET.ID = ''    CASE 1      MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, WIDGET.ID THEN        OK = 1      END ELSE        PRINT "Invalid widget ID: ":WIDGET.ID      END  END CASEUNTIL OK DO REPEATDB.REC<1> = WIDGET.ID*USERID = DB.REC<2>PRINTOK = 0LOOP  PRINT "User ID (?=list)":  IF USERID # "" THEN PRINT " (":USERID:")":  PRINT ": ":  INPUT USE.USERID  IF USE.USERID # '' THEN USERID = USE.USERID  BEGIN CASE    CASE USERID = "?"      EXECUTE 'SORT MVDB.USERS'      PRINT      USERID = ''    CASE 1      OK = 1  END CASEUNTIL OK DO REPEAT*DB.REC<2> = USERID*G$CURRENT.DB = DB.REC<3>PRINTOK = 0LOOP  PRINT "Dashboard ID (?=list)":  IF G$CURRENT.DB # "" THEN PRINT " (":G$CURRENT.DB:")":  PRINT ": ":  INPUT USE.DB  IF USE.DB # '' THEN G$CURRENT.DB = USE.DB  BEGIN CASE    CASE USE.DB = "?"      EXECUTE 'SORT MVDB.DEFS'      PRINT      G$CURRENT.DB = ''    CASE 1      OK = 1  END CASEUNTIL OK DO REPEAT*DB.REC<3> = G$CURRENT.DB** Pull in user data*MATREAD WIDGET.USER.DATA FROM F.MVDB.DEBUG.INFO,DEBUG.ID:"$":WIDGET.ID ELSE MAT WIDGET.USER.DATA = ''*LOOP  PRINT "Widget User Data"  PRINT "----------------"  FOR X = 1 TO 100    IF WIDGET.USER.DATA(X) # '' THEN      PRINT X "R#3":". '":WIDGET.USER.DATA(X):"'"    END  NEXT X  PRINT  PRINT "User Data field # to change or ENTER to continue: ":  INPUT UPOSWHILE UPOS MATCHES "1N0N" DO  PRINT "Position ":UPOS  PRINT "Current Value: ":WIDGET.USER.DATA(UPOS)  PRINT "New Value: ":  INPUT NEW.VAL  WIDGET.USER.DATA(UPOS) = NEW.VALREPEAT*MATWRITE WIDGET.USER.DATA ON F.MVDB.DEBUG.INFO, DEBUG.ID:"$":WIDGET.ID*WRITE DB.REC ON F.MVDB.DEBUG.INFO, DEBUG.ID*MAT WIDGET.INFO = ''G$WIDGET.NAME = WIDGET.IDG$WIDGET.SUB = WIDGET.SUBG$USERID = USERIDG$QUERYMODE = ''G$DRILLDOWNMODE = 0*PRINTPRINT "Use Debugger (y/N): ":INPUT USE.DEBUGIF USE.DEBUG = "Y" THEN DEBUG ELSE  PRINT "Calling ":WIDGET.SUBEND*#MAKE# RL IF 0 THEN*PJS 06-08-15*START.TIMER = SYSTEM(12)START.TIMER = SYSTEM(1020) ; *PJS 06-08-15* QM*#MAKE# RL ENDUSE.SUB.NAME = WIDGET.SUBCALL @USE.SUB.NAME*#MAKE# RL IF 0 THEN*PJS 06-08-15*DURATION = SYSTEM(12) - START.TIMERDURATION = SYSTEM(1020) - START.TIMER ; *PJS 06-08-15* QM*#MAKE# RL END ELSE*#MAKE# RL   DURATION = "Unavailable"*#MAKE# RL ENDMATWRITE WIDGET.USER.DATA ON F.MVDB.DEBUG.INFO, DEBUG.ID:"$":WIDGET.IDPRINT "Call completed. Duration: ":DURATIONSTOP000A3BMVDB.SUB.WIDGET.LIST0c2SUBROUTINE MVDB.SUB.WIDGET.LIST(WIDGET.LIST)** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Produce a list of defined widgets.**#MAKE# RL $OPTIONS D3OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'END*INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGETS*CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS) ;* Retrieve a list of failed widgets this sessionCALL GET.SESSION.VAR("running_widget",FAILED.WIDGET)CALL GET.SESSION.VAR("running_widget_dt",FAILED.WIDGET.DT)IF FAILED.WIDGET # "" THEN  FW.DATE = FIELD( FAILED.WIDGET.DT, '*', 1 )  FW.TIME = FIELD( FAILED.WIDGET.DT, '*', 2 )  FW.LAPSE = TIME() - FW.TIME  FW.LAPSE += ((DATE() - FW.DATE) * 86400)  IF FW.LAPSE < 2 THEN FAILED.WIDGET = "" ;* No more than 2 seconds to run a widget in query modeENDIF FAILED.WIDGET # "" THEN  CALL PUT.SESSION.VAR("running_widget","")  CALL PUT.SESSION.VAR("running_widget_dt","")  LOCATE FAILED.WIDGET IN FAILED.WIDGETS SETTING FWPOS ELSE    FAILED.WIDGETS<-1> = FAILED.WIDGET    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  ENDEND*WIDGET.LIST = ''*EXECUTE 'SSELECT MVDB.WIDGETS' CAPTURING JUNK*DP = 0LOOP  READNEXT ID ELSE EXIT  MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, ID ELSE MAT WIDGET.ITEM = ''  DP += 1  WIDGET.LIST<1,DP> = ID  SUBNAME = WIDGET.SUB  G$QUERYMODE = 1  G$WIDGET.NAME = ID  MAT WIDGET.INFO = ''  MAT WIDGET.USER.DATA = ''  MAT GLOBAL.TEMP.DATA = ''  MAT GLOBAL.USER.DATA = ''  FAIL.STATUS = 0 ;* Okay  FAIL.TEXT = ""  LOCATE ID IN FAILED.WIDGETS SETTING POS THEN    W$TYPE = "FAILED"    W$TITLE = "Failed Widget - ":SUBNAME    W$WIDTH = 3    FAIL.STATUS = 1 ;* Failed    FAIL.TEXT = "Subroutine Failed"  END ELSE    READ CATPTR FROM F.MD, SUBNAME THEN      CALL PUT.SESSION.VAR("running_widget",ID)      DT.STAMP = DATE():"*":TIME()      CALL PUT.SESSION.VAR("running_widget_dt",DT.STAMP)      CALL @SUBNAME      CALL PUT.SESSION.VAR("running_widget","")      CALL PUT.SESSION.VAR("running_widget_dt","")    END ELSE      W$TYPE = "FAILED"      W$TITLE = "Not Cataloged - ":SUBNAME      W$WIDTH = 3      FAIL.TEXT = "Subroutine Not Cataloged"    END  END  IF FIELD(W$TYPE,':',1) = "MAP" THEN W$TYPE = "MAP"  WIDGET.LIST<3,DP> = SUBNAME  WIDGET.LIST<4,DP> = W$TYPE  WIDGET.LIST<5,DP> = W$TITLE  WIDGET.LIST<6,DP> = W$WIDTH  WIDGET.LIST<7,DP> = FAIL.STATUS  WIDGET.LIST<8,DP> = FAIL.TEXTREPEATRETURN00042EGET.SESSION.ID0c2SUBROUTINE GET.SESSION.ID( SESSION.ID, VARS, VALS )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program extracts the session id from the VARS and VALS*              The programmer could just as easily parse out the HTTP_COOKIE*              header and get the value, but this just standardizes the *              process.*             * Init*#MAKE# RL $OPTIONS D3EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)SESSION.ID = ''*NUM.VARS = DCOUNT(VARS, AM)FOR X = 1 TO NUM.VARS  IF (VARS<X> = 'HTTP_COOKIE') THEN    CSTRING = VALS<X>        CALL SWAP( CSTRING, '%3B ', ';')    CONVERT ';' TO AM IN CSTRING    NUM.COOKIES = DCOUNT(CSTRING, AM)    FOR Y = 1 TO NUM.COOKIES      CVAR = TRIM(FIELD(CSTRING<Y>,'=',1))      CVAL = CSTRING<Y>[(1+INDEX(CSTRING<Y>,'=',1)),99999]      IF (CVAR = 'sessionid') THEN        SESSION.ID = TRIM(CVAL)        EXIT      END    NEXT Y  ENDNEXT X*RETURN*0001C5RSS.XML.ENCODE0c2SUBROUTINE RSS.XML.ENCODE(STRING.TO.PARSE, FLAG)** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: David Kam (Probably), Sierra Bravo* Date: Unknown* Description: Encode text prior to inserting into XML documents*SWAP.CHARS = \&<>\FOR SW = 1 TO LEN(SWAP.CHARS)  CH = SWAP.CHARS[SW,1]  HX = OCONV(SEQ(CH),'MCDX')  SWTO = "&#x":HX "R%2":";"  CALL SWAP(STRING.TO.PARSE,CH,SWTO)NEXT SWRETURN000536PUT.SESSION.VAR0c2SUBROUTINE PUT.SESSION.VAR( var, VAL )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program inserts a variable in the the current*              session record.  If the variable already exists, it*              is replaced.  If it does not exist, then it is created.*#MAKE# RL $OPTIONS D3* InitINCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)IF SESSION$ID = "" THEN RETURN** Need to get rid of the VM,SVM, and AM chars so that we can* store multi-valued data in the record. I am changing them to* very small ASCII codes that are usually not used.  This should* be pretty safe.*CONVERT AM TO CHAR(2) IN VALCONVERT VM TO CHAR(3) IN VALCONVERT SVM TO CHAR(4) IN VAL*READ REC FROM F.WEB.SESSION, SESSION$ID ELSE REC = ''TOTAL.VARS = DCOUNT(REC<1>, VM)LOCATE var IN REC<1> SETTING POS THEN  REC<2,POS> = VALEND ELSE  NEXT.REC = TOTAL.VARS + 1  REC<1,NEXT.REC> = var  REC<2,NEXT.REC> = VALENDWRITE REC ON F.WEB.SESSION, SESSION$IDCONVERT CHAR(2) TO AM IN VALCONVERT CHAR(3) TO VM IN VALCONVERT CHAR(4) TO SVM IN VAL*IF (var # 'LastSessionAccess') THEN  CALL PUT.SESSION.VAR('LastSessionAccess', DATE():'*':TIME())END*RETURN000B3EWDB.VARS0c2SUBROUTINE WDB.VARS( VARS, VALS )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 12/24/03* Description: This program is used to gather the vars and vals from a*              web request.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause** Modified By: Peter Schellenbach, Zumasys* Date: 10/25/2016* Description: Added INCLUDE WWW.INCLUDE so we have access to CGI$UNIQUE.ID*              in /WWW/ COMMON, instead of using PROCREAD / SENTENCE.**#MAKE# RL $OPTIONS D3*INCLUDE WBPD WWW.INCLUDE ; *PJS 10-25-16**VARS = ''VALS = ''VAR.POS = 1DIM TEMP(50)**PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ''*PJS 10-25-16*PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE() ; *PJS 06-12-15**PJS 10-25-16*UNIQUE.ID = FIELD( TCL.LINE, ' ', 2)UNIQUE.ID = CGI$UNIQUE.ID ;*PJS 10-25-16**OPEN '','WDB.Q' TO WDB.Q ELSE RETURN*IF (UNIQUE.ID # '') THEN  READ QSTRING FROM WDB.Q, UNIQUE.ID ELSE QSTRING = ''  CONVERT @AM TO '' IN QSTRING  QLENGTH=LEN(QSTRING)  IF QSTRING[1,1] = '"' AND QSTRING[LEN(QSTRING),1] = '"' THEN    QSTRING = QSTRING[2,LEN(QSTRING)-2] ;* UNIDATA hack  END  CONVERT '&' TO @AM IN QSTRING  FOR X = 1 TO DCOUNT( QSTRING, @AM )    IF (TRIM(FIELD(QSTRING<X>,'=',1)) # '') THEN      HEX.STRING = FIELD(QSTRING<X>, '=', 1) ; GOSUB CONVERT.HEX      VARS<VAR.POS> = HEX.STRING      EQ.POS = INDEX(QSTRING<X>,'=',1)      HEX.STRING = QSTRING<X>[EQ.POS+1,QLENGTH] ; GOSUB CONVERT.HEX      VALS<VAR.POS> = HEX.STRING      VAR.POS += 1    END  NEXT XENDRETURN*------------CONVERT.HEX:*------------HSLEN = LEN(HEX.STRING)IF HSLEN > 5000 THEN*IF 0 THEN  CHUNKLEN = INT( HSLEN / 50 )  START.POS = 1  FOR CHX = 1 TO 49    CUT.POINT = (START.POS-1) + CHUNKLEN    NCC = 0    LOOP UNTIL HEX.STRING[CUT.POINT+1,1] = "%" OR NCC > 1 DO      CUT.POINT += 1      NCC += 1    REPEAT    TEMP(CHX) = HEX.STRING[START.POS,CHUNKLEN+NCC]    START.POS += CHUNKLEN + NCC  NEXT CHX  TEMP(50) = HEX.STRING[START.POS,QLENGTH]  MAX.TEMP.LOC = 50END ELSE  TEMP(1) = HEX.STRING  MAX.TEMP.LOC = 1ENDHEX.STRING = ""FOR TEMP.LOC = 1 TO MAX.TEMP.LOC   IDX = 1  CONVERT '+' TO ' ' IN TEMP(TEMP.LOC)  LOOP    LOC = INDEX( TEMP(TEMP.LOC), '%', IDX )  WHILE LOC DO    IF TEMP(TEMP.LOC)[LOC+1,1] = "%" THEN      IDX += 2    END ELSE      SWAP.VAL = TEMP(TEMP.LOC)[LOC+1,2]      SWAP.VAL = OCONV( SWAP.VAL, 'MCU' )      SWAP.VAL = OCONV(SWAP.VAL,'MCXD')      IF SWAP.VAL MATCHES "1N0N" THEN SWAP.VAL = CHAR(SWAP.VAL)  *    SWAP.VAL = CHAR(OCONV(SWAP.VAL,'MCXD'))      TEMP(TEMP.LOC)=TEMP(TEMP.LOC)[1,LOC-1]:SWAP.VAL:TEMP(TEMP.LOC)[LOC+3,QLENGTH]      IF SWAP.VAL = '%' THEN        IDX += 1      END    END  REPEAT  HEX.STRING := TEMP(TEMP.LOC)NEXT TEMP.LOC*RETURN0005AEUSER.UPDATE0c2*On a new install, this should encrypt the default, plaintext passwords.*On an upgrade, it will encrypt all user passwords if they have not been encrypted by this program.* 1-2-15 TFP don't if the password is the same as the encryption of the user*        name then don't encrypt again* 6-4-15 PETER SCHELLENBACH OF ZUMASYS - MODIFIED FOR QM*          CHANGE OCONV(X,'U3060') TO MD5(X)** 06-19-17 PJS After initial installation, scan for any MVDB.USERS records where* the password in USER.REC<1> is the same as the user ID. These are default users* 'admin' and 'guest', and the default plaintext password on attr 1 is encrypted* and the user record updated. The USER.UPDATE flag in MVDB.CONTROL is updated to* 2 so this process will not be repeated during upgrades.*OPEN 'MVDB.USERS' TO F.MVDB.USERS ELSE STOP 201, 'MVDB.USERS'OPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'READV USER.UPDATE.FLAG FROM F.MVDB.CONTROL, "USER.UPDATE", 1 ELSE USER.UPDATE.FLAG = ''IF USER.UPDATE.FLAG + 0 < 1 THEN  SELECT F.MVDB.USERS  LOOP    READNEXT USER.ID ELSE EXIT    READ USER.REC FROM F.MVDB.USERS, USER.ID THEN      IF USER.ID = USER.REC<1> THEN        ENCRYPTED.PSWD = MD5(USER.REC<1>); *6-4-15 QM*        USER.REC<1> = ENCRYPTED.PSWD        WRITE USER.REC ON F.MVDB.USERS, USER.ID      END    END  REPEATENDIF USER.UPDATE.FLAG + 0 < 2 THEN  WRITEV 2 ON F.MVDB.CONTROL, "USER.UPDATE", 1ENDSTOPEND001A44MVDB.BUILD.PACKAGE0c2SUBROUTINE MVDB.MAKE.SCRIPT(MAKE.FILE,LOCATION,SIZE)*INCLUDE DM,BP,UNIX.H FCNTL.HINCLUDE DM,BP,UNIX.H MODE.HINCLUDE WBPD MVPKG.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253)CHAR BUFFER[10000]DIM PKG.REC(40)LOCATION = ''SIZE = 0*OPEN "MAKE.FILE,":MAKE.FILE TO F.MAKE.FILE ELSE  OPEN MAKE.FILE TO F.MAKE.FILE ELSE STOP 201, MAKE.FILEENDOPEN '','MVAPPS.INSTALLED' TO F.MVAPPS.INSTALLED ELSE  EXECUTE "CREATE-FILE MVAPPS.INSTALLED 3 11" CAPTURING JUNK  OPEN '','MVAPPS.INSTALLED' TO F.MVAPPS.INSTALLED ELSE STOP 201, 'MVAPPS.INSTALLED'ENDOPEN '','MVPKG.DATA' TO F.MVPKG.DATA ELSE  EXECUTE "CREATE-FILE MVPKG.DATA 3 11" CAPTURING JUNK  OPEN '','MVPKG.DATA' TO F.MVPKG.DATA ELSE STOP 201, 'MVPKG.DATA'ENDOPEN '','PACKED.FILE' TO TARGET.FILE ELSE   EXECUTE "CREATE-FILE PACKED.FILE 3 31" CAPTURING JUNK  OPEN '','PACKED.FILE' TO TARGET.FILE ELSE STOP 201, 'PACKED.FILE'ENDMATREAD PKG.REC FROM F.MVPKG.DATA, MAKE.FILE ELSE RETURNPACKAGE.NAME = PKG$NAMEPACKAGE.NAME = OCONV(PACKAGE.NAME,"MCAN")PACKAGE.DESCRIPTION = PKG$DESCPACKAGE.VERSION = PKG$BUILD.SEQ + 1IF MAKE.FILE = '' OR PACKAGE.NAME = '' THEN RETURN*PACKAGE.INFO = ""PACKAGE.MODE = 1* Set up the temporary storage area for the scriptsOPEN "MAKE.TEMP" TO F.MAKE.TEMP ELSE  EXECUTE "CREATE-FILE MAKE.TEMP 1 31" CAPTURING JUNK  OPEN "MAKE.TEMP" TO F.MAKE.TEMP ELSE STOP 201, "MAKE.TEMP"ENDCLEARFILE F.MAKE.TEMPOPEN "PACKED.FILE" TO F.PACKED.FILE ELSE  EXECUTE "CREATE-FILE PACKED.FILE 1 31" CAPTURING JUNK  OPEN "PACKED.FILE" TO F.PACKED.FILE ELSE STOP 201, "PACKED.FILE"ENDCLEARFILE F.PACKED.FILEBINARY.OPT = " (B"PACKAGE.INFO<1> = PACKAGE.DESCRIPTIONPACKAGE.INFO<2> = PACKAGE.VERSIONPACKAGE.INFO<3> = "db"PACKAGE.INFO<6> = PACKAGE.NAME*TARGET = "D3"SCRIPT = ""SCRIPT.SEG = 0*READ COMMANDS FROM F.MAKE.FILE, TARGET:"*PRE.COMMANDS" ELSE  READ COMMANDS FROM F.MAKE.FILE, "PRE.COMMANDS" ELSE COMMANDS = ""ENDGOSUB ADD.COMMANDS*WRITE SCRIPT ON F.MAKE.TEMP, "MVAPPS-PRE-SCRIPT"WRITE PACKAGE.INFO ON F.MAKE.TEMP, "PACKAGE.INFO"SCRIPT = ""*READ FILE.LIST FROM F.MAKE.FILE, TARGET:"*FILE.LIST" ELSE  READ FILE.LIST FROM F.MAKE.FILE, "FILE.LIST" ELSE FILE.LIST = ""ENDFOR FX = 1 TO DCOUNT( FILE.LIST, @AM )  FNAME = FILE.LIST<FX>  FX.OVR = FALSE  IF FNAME[1,2] = 'O:' THEN    FNAME=FNAME[3,999]    FX.OVR = TRUE  END  OPEN FNAME TO FVAR THEN    READ ITEM.LIST FROM F.MAKE.FILE, TARGET:"*DATA_":FNAME ELSE      READ ITEM.LIST FROM F.MAKE.FILE, "DATA_":FNAME ELSE ITEM.LIST = ""    END    IF ITEM.LIST<1> = "*" THEN      SELECT FVAR      ITEM.LIST = ''      LOOP        READNEXT ITEM.LIST.ID ELSE EXIT        ITEM.LIST<-1> = ITEM.LIST.ID      REPEAT    END    WRITE ITEM.LIST ON F.MAKE.TEMP, FNAME    EXECUTE "QSELECT MAKE.TEMP '":FNAME:"'" CAPTURING JUNK    IF SYSTEM(11) THEN      GOSUB PACK.FILE    END    DELETE F.MAKE.TEMP, FNAME    OPEN "DICT",FNAME TO D.FVAR THEN      READ ITEM.LIST FROM F.MAKE.FILE, TARGET:"*DICT_":FNAME ELSE        READ ITEM.LIST FROM F.MAKE.FILE, "DICT_":FNAME ELSE ITEM.LIST = ""      END      FNAME = "DICT ":FNAME      IF ITEM.LIST<1> = "*" THEN        SELECT D.FVAR        ITEM.LIST = ''        LOOP          READNEXT ITEM.LIST.ID ELSE EXIT          ITEM.LIST<-1> = ITEM.LIST.ID        REPEAT      END      WRITE ITEM.LIST ON F.MAKE.TEMP, FNAME      EXECUTE "QSELECT MAKE.TEMP '":FNAME:"'" CAPTURING JUNK      IF SYSTEM(11) THEN        GOSUB PACK.FILE      END      DELETE F.MAKE.TEMP, FNAME    END  ENDNEXT FX*READ COMMANDS FROM F.MAKE.FILE, TARGET:"*POST.COMMANDS" ELSE   READ COMMANDS FROM F.MAKE.FILE, "POST.COMMANDS" ELSE COMMANDS = ""ENDSCRIPT = ""GOSUB ADD.COMMANDSWRITE SCRIPT ON F.MAKE.TEMP, "MVAPPS-POST-SCRIPT"EXECUTE 'SELECT MAKE.TEMP "MVAPPS-PRE-SCRIPT" "MVAPPS-POST-SCRIPT" "PACKAGE.INFO"' CAPTURING JUNKFNAME = "MAKE.TEMP"GOSUB PACK.FILE** Change the name of the file containing the scripts from MAKE.TEMP to MD* so they can be executed upon arrival.*READ REC FROM F.PACKED.FILE, "MAKE.TEMP"WRITE REC ON F.PACKED.FILE, "MV.INSTALL.CF"DELETE F.PACKED.FILE, "MAKE.TEMP"*FNAME = "PACKED.FILE"GOSUB PACK.FILEREAD PACKAGE FROM F.PACKED.FILE, "PACKED.FILE" ELSE RETURNCLEARFILE F.PACKED.FILEWRITE PACKAGE ON F.PACKED.FILE, PACKAGE.NAME:'-':PACKAGE.VERSIONOUT.DIR = "/tmp/"HANDLE = %OPEN(OUT.DIR:PACKAGE.NAME,O$CREAT+O$TRUNC+O$RDWR+O$BINARY)ORIG.LEN =LEN(PACKAGE)WTOT = 0LOOP  IF LEN(PACKAGE) >= 10000 THEN    BUFFER = PACKAGE[1,10000]    BLEN = 10000    PACKAGE = PACKAGE[10001,9999999]  END ELSE    BUFFER = PACKAGE    BLEN = LEN(PACKAGE)    PACKAGE = ""  END  W = %WRITE(HANDLE,BUFFER,BLEN)  WTOT += WWHILE PACKAGE # "" DO REPEATLOCATION = OUT.DIR:PACKAGE.NAMESIZE = WTOTRETURN*ADD.COMMANDS: **FOR CMDX = 1 TO DCOUNT( COMMANDS, @AM )  SCRIPT<-1> = COMMANDS<CMDX>NEXT CMDXRETURN*CHECK.DPOINTER: * Check to see if the record contains a dpointer*D.POINTER = FALSEIF OCONV(REC<1>[1,1],'MCU') = "D" THEN  IF FILE.TYPE = "DICT" THEN    IF REC<2> MATCHES "3N0N" AND REC<3> MATCHES "1N0N" THEN      D.POINTER = TRUE    END  ENDENDRETURN*PACK.FILE:ARG.LIST = TRIM( FNAME )BINARY = 1*FILE.TYPE = 'DATA'FILE.NAME = FIELD( ARG.LIST, ' ', 1 )POS = 2IF FILE.NAME = "DATA" OR FILE.NAME = "DICT" THEN  FILE.TYPE = FILE.NAME  FILE.NAME = FIELD( ARG.LIST, ' ', 2 )  POS = 3ENDIF FILE.TYPE = "DATA" THEN FILE.TYPE = ""*OPEN FILE.TYPE,FILE.NAME TO PACK.FILE ELSE RETURNPACK.FILE.ID = ''IF FILE.TYPE # "" THEN PACK.FILE.ID = FILE.TYPE:"_"IF FX.OVR THEN PACK.FILE.ID := 'O:'PACK.FILE.ID := FILE.NAME**Packing PACK.FILE.ID*IF INDEX(FILE.NAME,'BINARY:',1) THEN  HEX.MODE = 1END ELSE HEX.MODE = 0CHK.FILE.NAME = FILE.NAMECOUNT = 0SELECT PACK.FILEEOF = FALSEPACK.REC = ""DLIST = ""SEPARATOR = @AMLOOP  READNEXT CHK.REC.ID ELSE EOF = TRUEUNTIL EOF DO  READ REC FROM PACK.FILE, CHK.REC.ID ELSE REC = ""  *Remove db/widget user access data?  IF PKG$ACCESS.OPT # 1 THEN    IF FILE.NAME = 'MVDB.DEFS' THEN      REC<5> = ''    END ELSE IF FILE.NAME = 'MVDB.WIDGETS' THEN      REC<2> = ''    END  END  GOSUB CHECK.DPOINTER  IF NOT( D.POINTER ) THEN    COUNT = COUNT + 1    IF HEX.MODE THEN      REC = CHK.REC.ID:SEPARATOR:"0x":OCONV(REC,'MX')    END ELSE      REC = CHK.REC.ID:SEPARATOR:"0c":REC    END    LENGTH = OCONV( LEN(REC), 'MCDX' ) "R%6"    PACK.REC = PACK.REC:LENGTH:REC  END ELSE    DLIST<-1> = CHK.REC.ID  ENDREPEAT*FOR D = 1 TO DCOUNT( DLIST, AM )  *PRINT  *PRINT "Item '":DLIST<D>:"' is a D-Pointer.  Not packed."NEXT DIF PACK.REC # "" THEN  WRITE PACK.REC ON TARGET.FILE, PACK.FILE.IDEND*PRINT PACK.FILE.ID:" packed.  ":COUNT:" records packed into ":PACK.FILE.IDRETURN00029BSET.STATUS.CODE0c2SUBROUTINE SET.STATUS.CODE( STATUS.CODE )*********************************************************************** Copyright (C) 2020 Zumasys, Inc., All Rights Reserved** Written By   : Peter Schellenbach* Date Written : 04/21/2017* Description  : This program sets the response status code sent*                back to client. Successful requests should return*                status code 200 (this is the default). Status code*                500 indicates a generic server failure.*              **********************************************************************INCLUDE WBPD WWW.INCLUDESESSION$STATUS.CODE = STATUS.CODE*RETURN*0001E6WDB.TEST0c2INCLUDE WBPD WWW.INCLUDEPRINT "junk before content"PRINT CHAR(10)PRINT "Content-type: text/html"PRINT ""CALL WDB.VARS( VARS, VALS )PRINT "<pre>"PRINT "Vars: "FOR X = 1 TO DCOUNT(VARS, @AM)  PRINT VARS<X>:" = ":VALS<X>NEXT XPRINTFOR N = 45 TO 49  PRINT "WWW.INFO(":N:"): ":WWW.INFO(N)NEXT NPRINT "</pre>"PRINT '<form method="POST" action="/dbc/WDB.TEST">'PRINT '<input type="text" name="thing">'PRINT '<input type="submit" value="submit">'PRINT '</form>'*00019ACREATE.WEBSERVICE.PASSWORD0c2SUBROUTINE CREATE.WEBSERVICE.PASSWORD(PASSWORD,PASSTIME)* VALID PASSWORD IS THE SUM OF MMDDYY + SSMMHH (FROM PASSTIME)* INVERT THE TIME TO SSMMHHPASSTIME=OCONV(TIME(),'MTS')CONVERT ':' TO '' IN PASSTIMEEMITSSAP=''FOR TIME.I = 6 TO 1 STEP -1  EMITSSAP:=PASSTIME[TIME.I,1]NEXT TIME.IOTODAY=OCONV(DATE(),'D2-')CONVERT '-' TO '' IN OTODAYPASSWORD=OTODAY+EMITSSAPRETURNEND004148WDB.INIT0c2** Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 12/24/03* Description: This program is the man entry point for web transactions.** Modified by Peter Schellenbach of Zumasys 06-08-15 for QM compatiblity:*   Change SYSTEM(12) to SYSTEM(1020).*   Change U50BB to @USERNO*   Change PROCREAD to use SENTENCE() in the ELSE clause** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause.*              When reading MD PROC item, if its missing, read again*              with '.PROC' suffix on ID. This way we can keep the PROC*              in the MD as a flag that the function is allowed, but not*              require it in the MD, since jBASE does not place catalog*              items in the MD.** Modified By: Peter Schellenbach, Zumasys* Date: 10/25/2016* Description: This program was made more generic, so that it can serve*              as the main entry point for both MVDB and REST services.*              The MVDB specific code has been refactored into MVDB.INIT.*              A new WDB.RESOURCE file is used to determine supported*              resources and the name of the program to handle the resource.*              For example, the MVDB.MAIN record in the WDB.RESOURCE file*              defines MVDB.INIT as the handler for the MVDB.RESOURCE.**              Removed PROCREAD (and calling PROC from MD). Only use*              SENTENCE now.** Modified By: Peter Schellenbach, Zumasys* Date: 04/21/2017* Description: Updated to use CONFIG record in WDB.RESOURCE to** Modified By: Peter Schellenbach, Zumasys* Date: 06/16/2017* Description: For REST, separate header & request vars from rest of cgi vars.*              Fix VARS variable conflict in APPEND.REC to use QSTR and save*              QSTR in WDB.DEBUG record instead of VARS. Change program name*              in WDB.DEBUG record ID to RSRC.ID so MV.DEBUG can recreate the*              WDB.INIT command line.** Modified By: Peter Schellenbach, Zumasys* Date: 10/18/2017* Description: Save detailed debug info in WDB.DEBUG record to enable reproducing*              original environment when debugging requests.*              WDB.DEBUG: initialized from WDB.RESOURCE record attr 7, set when*              WDB.INIT should create debug records in WDB.DEBUG file for use by WDEBUG.*              WDEBUG.MODE: set if WDB.INIT is being called by WDEBUG instead of mvappsvr.** Modified By: Peter Schellenbach, Zumasys* Date: 11/29/2017* Description: Provide for execution of dashboard or REST service in a different*              account. New RSRC.ACCOUNT field added to WDB.RESOURCE records.*              Use LOGTO to switch accounts prior to executing the resource*              handler program.*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD FI.WDB.RESOURCEINCLUDE WBPD FI.WDB.DEBUG*MAT WWW.INFO = ''STATUS.CODE = 0LOGGING = 0LOG.REC = ''WDB.DEBUG = 0WDEBUG.MODE = 0*OPEN 'WDB.Q' TO Q ELSE  ERR = 'Cannot open Queue file'  GOSUB SEND.ERRORENDOPEN 'WDB.RESOURCE' TO F.RESOURCE ELSE  ERR = 'Cannot open resource file'  GOSUB SEND.ERROREND** Read and parse config settings**  Important config settings:*   LOGLEVEL - see below*   DEFAULT_HANDLER - if a "handler" is not included in RESOURCE.NAME, use this default handler*   DEFAULT_RESOURCE - if a "resource" is not included in RESOURCE.NAME, use this default resource**   Note: PATH_INFO is the part of the URL beginning with a forward slash (/) after the*   server/port and before the query string. It is interpreted as:*     /<handler>/<resource>/<REST parameter>/<another REST parameter> ...**   MVAppSvr will pass <handler>/<resource> as 2nd command line argument, unless the default*   handler is being used, then only <resource> is passed.*READ TEMPCONFIG FROM F.RESOURCE, 'CONFIG' ELSE TEMPCONFIG = ''NUMCONFIG = DCOUNT(TEMPCONFIG, @AM)CGI$CONFIG = ''CONFIGCNTR = 0FOR A = 2 TO NUMCONFIG  CONFIGNAME = TEMPCONFIG<A,1>  CONFIGVALUE = TEMPCONFIG<A,2>  IF CONFIGNAME <> '' THEN    LOCATE CONFIGNAME IN CGI$CONFIG<1,1> SETTING POS ELSE      CONFIGCNTR += 1      CGI$CONFIG<1,1,CONFIGCNTR> = CONFIGNAME    END    CGI$CONFIG<1,2,CONFIGCNTR> = CONFIGVALUE  ENDNEXT A** Get the logging level from config**  Log levels:*   0 - no logging*   1 - log errors*   2 - log all requests*   3 - log everything (debug mode)**  Log info is written to the WDB.LOG file. Requests and errors are logged*  using a unique ID.*SESSION$GLOBAL.DEBUG = 0LOCATE 'LOGLEVEL' IN CGI$CONFIG<1,1> SETTING POS THEN  TEMPVALUE = CGI$CONFIG<1,2,POS>  IF TEMPVALUE MATCHES '1N' THEN SESSION$GLOBAL.DEBUG = TEMPVALUE + 0ENDLOGGING = SESSION$GLOBAL.DEBUGIF LOGGING THEN  OPEN 'WDB.LOG' TO F.LOG ELSE LOGGING = 0END** Get default handler*DEFAULT.HANDLER = 'DBC' ;* ensure this is defined!LOCATE 'DEFAULT_HANDLER' IN CGI$CONFIG<1,1> SETTING POS THEN  DEFAULT.HANDLER = OCONV(CGI$CONFIG<1,2,POS>, 'MCU')END** Parse the command line*TCL.LINE = SENTENCE()RESOURCE.NAME = OCONV(FIELD(TCL.LINE, ' ', 2), 'MCU')INIT.VARS = FIELD(TCL.LINE, ' ', 3)VAR.STRING = FIELD(TCL.LINE, ' ', 4)XTRA.OPTS = FIELD(TCL.LINE, ' ', 5)*UNIQUE.ID = FIELD(INIT.VARS, '-', 1)ONCOM     = FIELD(INIT.VARS, '-', 2)COMCOUNT  = FIELD(INIT.VARS, '-', 3)** Get handler from RESOURCE.NAME argument*IF DCOUNT(RESOURCE.NAME, '/') = 2 THEN  HANDLER.NAME = OCONV(FIELD(RESOURCE.NAME, '/', 1), 'MCU')  RESOURCE.NAME = OCONV(FIELD(RESOURCE.NAME, '/', 2), 'MCU')END ELSE  HANDLER.NAME = DEFAULT.HANDLER  RESOURCE.NAME = OCONV(RESOURCE.NAME, 'MCU')END** Get the resource record from WDB.RESOURCE file*RSRC.ID = HANDLER.NAME:'*':RESOURCE.NAMEMAT RSRC.ITEM = ''MATREAD RSRC.ITEM FROM F.RESOURCE, RSRC.ID ELSE  IF HANDLER.NAME = DEFAULT.HANDLER THEN    MATREAD RSRC.ITEM FROM F.RESOURCE,RESOURCE.NAME ELSE NULL  ENDEND** Sort out the debug modes**  WDEBUG.MODE is set when the request was initiated by WDEBUG rather than web.*  WDB.DEBUG is set when the resource indicates to log debug info for web requests.*  WDEBUG.MODE and WDB.DEBUG are exclusive!*  SESSION$WDEBUG.MODE can be tested by resource handlers to break into debugger, or ???IF INDEX(XTRA.OPTS, '_WDEBUG_MODE_', 1) THEN WDEBUG.MODE = 1SESSION$WDEBUG.MODE = WDEBUG.MODEIF NOT(WDEBUG.MODE) THEN  WDB.DEBUG = RSRC.DEBUG.MODE  IF WDB.DEBUG THEN    OPEN 'WDB.DEBUG' TO F.WDB.DEBUG ELSE WDB.DEBUG = 0  ENDEND** Validate the resource - return error if invalid or disabled*IF (RSRC.TYPE = 'P') AND RSRC.ENABLED THEN  CGI.MODE = RSRC.PARSE.CGI  IF ONCOM = 1 AND VAR.STRING = '%%' THEN* READ VARS FROM STDIN INSTEAD OF COMMAND LINE    PROMPT ''    ECHO OFF    FOR ONCOM = 1 TO COMCOUNT      INPUT VAR.STRING      IF ONCOM < COMCOUNT THEN        GOSUB APPEND.REC      END    NEXT ONCOM    ECHO ON    ONCOM = COMCOUNT  END  IF (ONCOM = COMCOUNT) THEN    GOSUB APPEND.REC    IF LOGGING > 1 THEN      LOG.REC<1> = RESOURCE.NAME      LOG.REC<2> = DATE()*PJS 06-08-15*LOG.REC<3> = SYSTEM(12) ;* START TIME      LOG.REC<3> = SYSTEM(1020) ;* START TIME *PJS 06-08-15* QM      LOG.REC<6> = COMCOUNT    END** Populate the vars and vals*    CGI$UNIQUE.ID = UNIQUE.ID    IF RSRC.PROGRAM <> '' THEN      CGI$RESOURCE.NAME = RSRC.PROGRAM    END ELSE      CGI$RESOURCE.NAME = RESOURCE.NAME    END    IF CGI.MODE THEN** Parse CGI, request & header variables*      CALL WDB.VARS(VARS, VALS)      LOCATE "APPSVR_ID" IN VARS SETTING POS THEN        CGI$APPSVR.ID = VALS<POS>        VARS = DELETE(VARS, POS, 0, 0)        VALS = DELETE(VALS, POS, 0, 0)      END ELSE        CGI$APPSVR.ID = ""      END      LOCATE "__body__" IN VARS SETTING POS THEN        CGI$BODY = VALS<POS>        VARS = DELETE(VARS, POS, 0, 0)        VALS = DELETE(VALS, POS, 0, 0)      END** Copy CGI variables to CGI$VARS/CGI$VALS and request & header variables to CGI$HEADERVARS/CGI$HEADERVALS*      REQUEST.VAR.NAMES = 'SIMPLEWEB_MODULE':@AM:'SIMPLEWEB_HANDLER':@AM:'REMOTE_ADDR':@AM:'REMOTE_HOST':@AM:'REMOTE_USER':@AM      REQUEST.VAR.NAMES := 'REQUEST_METHOD':@AM:'PROTOCOL_VERSION':@AM:'PATH_INFO':@AM:'CONTENT_TYPE':@AM:'SERVER_PORT':@AM:'INSTALL_PATH'      NUM.VARS = DCOUNT(VARS, @AM)      HDR.VAR.NUM = 1      CGI.VAR.NUM = 1      FOR Y = 1 TO NUM.VARS        IS.HDR.VAR = 0        VAR.NAME = VARS<Y>        IF VAR.NAME[1,5] = 'HTTP_' THEN          IS.HDR.VAR = 1        END ELSE          LOCATE VAR.NAME IN REQUEST.VAR.NAMES SETTING POS THEN IS.HDR.VAR = 1        END        IF IS.HDR.VAR THEN          CGI$HEADERVARS<HDR.VAR.NUM> = VAR.NAME          CGI$HEADERVALS<HDR.VAR.NUM> = VALS<Y>          HDR.VAR.NUM += 1        END ELSE          CGI$VARS<CGI.VAR.NUM> = VAR.NAME          CGI$VALS<CGI.VAR.NUM> = VALS<Y>          CGI.VAR.NUM += 1        END      NEXT Y** Load the Cookie variables and values*      LOCATE 'HTTP_COOKIE' IN VARS SETTING POS THEN        CSTRING = VALS<POS>      END ELSE CSTRING = ''      CONVERT ';' TO @AM IN CSTRING      NUM.COOKIES = DCOUNT(CSTRING, @AM)      FOR Y = 1 TO NUM.COOKIES        CGI$CVARS<Y> = TRIM(FIELD(CSTRING<Y>,'=',1))        CGI$CVALS<Y> = CSTRING<Y>[1 + COL2(),99999]      NEXT Y** Get server info*      LOCATE "HTTP_HOST" IN VARS SETTING POS THEN        CGI$SERVER.NAME = VALS<POS>      END ELSE CGI$SERVER.NAME = ""      LOCATE "SERVER_PORT" IN VARS SETTING POS THEN        CGI$SERVER.PORT = VALS<POS>      END ELSE CGI$SERVER.PORT = ""      IF CGI$SERVER.PORT = "" OR CGI$SERVER.PORT = "0" THEN        OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL THEN          READV TCP.PORT FROM F.MVDB.CONTROL, 'MVDB.SETTINGS', 4 ELSE TCP.PORT = ""        END        CGI$SERVER.PORT = TCP.PORT      END      IF CGI$SERVER.PORT # "" AND INDEX(CGI$SERVER.NAME, ':', 1) = 0 THEN CGI$SERVER.NAME := ":":CGI$SERVER.PORT ;*PJS 10-25-16* Only append port if its not already in the HTTP_HOST header      LOCATE "SIMPLEWEB_HANDLER" IN VARS SETTING POS THEN        CGI$PATH = VALS<POS>        IF CGI$PATH[1,1] # "/" THEN CGI$PATH = "/":CGI$PATH      END ELSE CGI$PATH = "/dbc"** Extract REST parameters*      LOCATE "PATH_INFO" IN VARS SETTING POS THEN        PATH = VALS<POS>        IF PATH[1,1] = '/' THEN PATH = PATH[2,9999]        Y = INDEX(PATH, '/', 2)        IF Y > 0 THEN          CGI$RESTPARAMS = PATH[Y + 1, 99999]          CONVERT '/' TO @AM IN CGI$RESTPARAMS        END      END    END** Clear the out buffer and set some generic vars*    SESSION$CONTENT.SENT = 0** LOGTO the account containing the resource, if not the current account*    IF RSRC.ACCOUNT <> '' THEN      IF OCONV(RSRC.ACCOUNT, 'MCU') = OCONV(@WHO, 'MCU') THEN        RSRC.ACCOUNT = ''      END ELSE        IF OCONV(RSRC.ACCOUNT, 'MCU') = OCONV(@PATH, 'MCU') THEN          RSRC.ACCOUNT = ''        END      END    END    IF RSRC.ACCOUNT <> '' THEN      ACCT.FROM = @PATH      EXECUTE 'LOGTO ':RSRC.ACCOUNT CAPTURING DUMMY      ACCT.TO = @PATH      IF ACCT.FROM = ACCT.TO THEN* LOGTO failed!               STATUS.CODE = 404        ERR = 'Resource account unavailable'        GOTO SEND.ERROR      END    END*    * Run the controller program for the resource*    PRINT    PRINT "700 WDB-START"    IF WDB.DEBUG THEN      EXECDUR = ''      IF RSRC.PROGRAM <> '' THEN        DBG.ID = 'R/':RSRC.PROGRAM:'/':UNIQUE.ID      END ELSE        DBG.ID = 'R/':RSRC.CONTROLLER:'/':UNIQUE.ID      END      GOSUB CREATE.DEBUG.REC*PJS 06-08-15*EXECSTART = SYSTEM(12)      EXECSTART = SYSTEM(1020) ; *PJS 06-08-15* QM      EXECUTE RSRC.CONTROLLER:' ':UNIQUE.ID CAPTURING RESPONSE*PJS 06-08-15*EXECDUR = SYSTEM(12) - EXECSTART      EXECDUR = SYSTEM(1020) - EXECSTART ; *PJS 06-08-15* QM      DELETE F.WDB.DEBUG, DBG.ID      DBG.ID = 'C':DBG.ID[2, LEN(DBG.ID)]      GOSUB UPDATE.DEBUG.REC      N = DCOUNT(RESPONSE, @AM)      FOR I = 1 TO N        PRINT RESPONSE<I>      NEXT I    END ELSE      EXECUTE RSRC.CONTROLLER:' ':UNIQUE.ID    END** Wrap up*    * this call has been moved to MVDB.INIT: CALL WEB.FLUSH    PRINT "800 WDB-COMPLETE"    DELETE Q, UNIQUE.ID    IF LOGGING > 1 THEN*PJS 06-08-15*LOG.REC<4> = SYSTEM(12) ;* END TIME      LOG.REC<4> = SYSTEM(1020) ;* END TIME *PJS 06-08-15* QM      LOG.REC<5> = LOG.REC<4> - LOG.REC<3>      LOG.REC<7> = 1 ;* this is a request      GOSUB UPDATE.LOG    END  END ELSE    GOSUB APPEND.REC    PRINT    PRINT "700 WDB-START"    PRINT "800 WDB-COMPLETE"  ENDEND ELSE  IF (ONCOM = COMCOUNT) OR (ONCOM = 1 AND VAR.STRING = '%%') THEN* Final (or only) command part has been received - log the error now    IF LOGGING THEN      LOG.REC<1> = RESOURCE.NAME      LOG.REC<2> = DATE()*PJS 06-08-15*LOG.REC<3> = SYSTEM(12)      LOG.REC<3> = SYSTEM(1020) ;*PJS 06-08-15* QM      LOG.REC<6> = COMCOUNT      LOG.REC<7> = 2 ;* this is an error      BEGIN CASE        CASE RSRC.TYPE = ''          LOG.REC<8> = 'Undefined resource'        CASE RSRC.TYPE <> 'P'          LOG.REC<8> = 'Invalid resource'        CASE NOT(RSRC.ENABLED)          LOG.REC<8> = 'Disabled resource'        CASE 1          LOG.REC<8> = 'Unknown error'      END CASE      GOSUB UPDATE.LOG    END    STATUS.CODE = 404    ERR = 'Invalid Resource'    GOSUB SEND.ERROR  END ELSE    PRINT    PRINT "700 WDB-START"    PRINT "800 WDB-COMPLETE"  ENDENDSTOP*SEND.ERROR:*PRINTPRINT "700 WDB-START"IF STATUS.CODE > 0 THEN  PRINT 'X-MVDB-STATUS: ':STATUS.CODEENDPRINT '500 ERROR ':ERRPRINT "800 WDB-COMPLETE"STOP*----------APPEND.REC:*----------READU QSTR FROM Q, UNIQUE.ID ELSE QSTR = ''QSTR<ONCOM> = VAR.STRINGWRITE QSTR ON Q, UNIQUE.IDRETURN*----------UPDATE.LOG:*----------LOG.ID = SYSTEM(19)WRITE LOG.REC ON F.LOG, LOG.IDRETURN*----------CREATE.DEBUG.REC:*----------DBGREC = ''DBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_PORT> = @USERNO ; * FIELD(OCONV('','U50BB'),' ',1) ;*Port  *PJS 06-08-15*DBGREC<WDBG_HANDLER> = HANDLER.NAMEDBGREC<WDBG_RESOURCE> = RESOURCE.NAMEDBGREC<WDBG_CONTROLLER> = RSRC.CONTROLLERDBGREC<WDBG_PROGRAM> = RSRC.PROGRAMDBGREC<WDBG_REQUEST_ID> = UNIQUE.IDLOCATE "REQUEST_METHOD" IN VARS SETTING POS THEN  DBGREC<WDBG_METHOD> = VALS<POS>ENDLOCATE "PATH_INFO" IN VARS SETTING POS THEN  DBGREC<WDBG_PATH> = VALS<POS>ENDLOCATE "REMOTE_ADDR" IN VARS SETTING POS THEN  DBGREC<WDBG_REMOTE_ADDR> = VALS<POS>END* save headers variablesDBGREC<WDBG_HEADER_VARS> = LOWER(CGI$HEADERVARS)DBGREC<WDBG_HEADER_VALS> = LOWER(CGI$HEADERVALS)IF CGI$APPSVR.ID <> '' THEN  N = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM) + 1  DBGREC<WDBG_HEADER_VARS, N> = 'APPSVR_ID'  DBGREC<WDBG_HEADER_VALS, N> = CGI$APPSVR.IDEND* save form variablesDBGREC<WDBG_CGI_VARS> = LOWER(CGI$VARS)DBGREC<WDBG_CGI_VALS> = LOWER(CGI$VALS)* Request bodyDBGREC<WDBG_BODY> = CHANGE(CHANGE(CGI$BODY, CHAR(13), ''), CHAR(10), @VM)* Session variablesTEMPVARS = OCONV(CGI$CVARS, 'MCU')LOCATE 'SESSIONID' IN TEMPVARS SETTING POS THEN  SID = CGI$CVALS<POS>  SREC = ''  OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN    READ SREC FROM F.WEB.SESSION, SID ELSE NULL  END  DBGREC<WDBG_SESSION_ID> = SID  DBGREC<WDBG_SESSION_VARS> = SREC<1>  DBGREC<WDBG_SESSION_VALS> = SREC<2>  DBGREC<WDBG_SESSION_DATE> = SREC<3>  DBGREC<WDBG_SESSION_TIME> = SREC<4>END* save debug info before processing requestWRITE DBGREC ON F.WDB.DEBUG, DBG.IDRETURN*----------UPDATE.DEBUG.REC:*----------DBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_DURATION> = EXECDURIF STATUS.CODE > 0 THEN DBGREC<WDBG_STATUS> = STATUS.CODE ELSE DBGREC<WDBG_STATUS> = 200* save response headersNUM.VARS = 0EOH = INDEX(RESPONSE, @AM:@AM, 1) ;* headers end at first blank line in responseIF EOH = 0 THEN EOH = LEN(RESPONSE) + 1N = DCOUNT(RESPONSE[1, EOH - 1], @AM)FOR I = 1 TO N  HDR.LINE = RESPONSE<I>  HDR.VAR = FIELD(HDR.LINE, ':', 1)  HDR.VAL = TRIMF(HDR.LINE[COL2() + 1, LEN(HDR.LINE)])  M = LEN(HDR.VAR)  FOR J = 1 TO M    IF NOT(HDR.VAR[J,1] MATCHES '1A') AND HDR.VAR[J,1] <> '-' THEN      HDR.VAR = ''      EXIT    END  NEXT J  IF HDR.LINE[LEN(HDR.VAR) + 1, 1] <> ':' THEN HDR.VAR = ''  IF HDR.VAR = '' THEN    NUM.VARS += 1    DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = '_BAD_'    DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.LINE ;* invalid header line!  END ELSE    NUM.VARS += 1    DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = HDR.VAR    DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.VAL  ENDNEXT I* save response contentIF EOH + 2 <= LEN(RESPONSE) THEN  DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(RESPONSE[EOH + 2, LEN(RESPONSE)])ENDWRITE DBGREC ON F.WDB.DEBUG, DBG.IDRETURN*END0002D0SUB.GET.NEXT.ID0c2SUBROUTINE SUB.GET.NEXT.ID(NewID,F.CONTROL)** Copyright (c) 2020 Zumasys, Inc. All rights reserved.* Description: generate a (probably) unique ID based on current time, date and counter** Pass MVDB.CONTROL file variable, returns new ID* Up to 10,000 IDs can be generated per second without collision* Returned ID format: YYYYMMDDHHMMSSNNNN*D = DATE()T = TIME()HHMMSS = OCONV(OCONV(T,'MTS'),'MCN')YYYY = OCONV(D,'DY')IF LEN(YYYY) < 4 THEN YYYY=YYYY+2000MM = OCONV(D,'DM') 'R%%'DD = OCONV(D,'DD') 'R%%'CTR = 1READVU CTR FROM F.CONTROL,'NEXT.ID.COUNTER',1 ELSE CTR = 1ENDWRITE CTR+1 ON F.CONTROL,'NEXT.ID.COUNTER' ON ERROR NULLENDNewID = YYYY:MM:DD:HHMMSS:(CTR 'R%%%%')RETURNEND0002A6SUB.LOG.DEBUG.INFO0c2SUBROUTINE SUB.LOG.DEBUG.INFO(WIDGET.NAME,MESSAGE)** Copyright (c) 2020 Zumasys, Inc. All rights reserved.** Pass widget name and message to log. When widget is placed in debug mode,* up to 100 lines of log content are displayed.*EQU MAX.LINES TO 100*OPEN 'WDB.DEBUG' TO F.WDB.DEBUG THEN  READ EXTRA.INFO FROM F.WDB.DEBUG,WIDGET.NAME ELSE EXTRA.INFO = ''  EXTRA.INFO<-1> = TIMEDATE():' ':MESSAGE  N = DCOUNT(EXTRA.INFO,@AM)  IF N > MAX.LINES THEN    * DISCARD ALL EXCEPT LAST 100 LINES    M = N - MAX.LINES    K = INDEX(EXTRA.INFO,@AM,M)    EXTRA.INFO = EXTRA.INFO[K+1,999999]  END  WRITE EXTRA.INFO ON F.WDB.DEBUG,WIDGET.NAMERETURNEND000677REBUILD.URL.STRING0c2SUBROUTINE REBUILD.URL.STRING(URL.STRING)* 12-15-15* 9-23-16 TPARKER - LOGIC TOTALLY REWRITTENINCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEURL.STRING=''*** NEED CGI$VARS ALPHABETIZED TO INSURE URL ALWAYS IN SAME ORDER** BUT EXCLUDE THOSE ADDED BY MVAPPSVR*MAX.VARS=DCOUNT(CGI$VARS,@AM)ALPHA.VARS=''ALPHA.VALS=''FOR VAR.CNTR = 1 TO MAX.VARS   var=CGI$VARS<VAR.CNTR>   BEGIN CASE      CASE var = 'SIMPLEWEB_MODULE'; var=''      CASE var = 'REMOTE_ADDR'; var=''      CASE var = 'REMOTE_HOST'; var=''      CASE var = 'REMOTE_USER'; var=''      CASE var = 'REQUEST_METHOD'; var=''      CASE var = 'PROTOCOL_VERSION'; var=''      CASE var = 'HTTP_REFERER'; var=''      CASE var = 'HTTP_USER_AGENT'; var=''      CASE var = 'HTTP_HOST'; var=''      CASE var = 'HTTP_ACCEPT'; var=''      CASE var = 'HTTP_COOKIE'; var=''      CASE var = 'HTTP_CONNECTION'; var=''      CASE var = 'SIMPLEWEB_HANDLER'; var=''      CASE var = 'PATH_INFO'; var=''      CASE var = 'CONTENT_TYPE'; var=''      CASE var = 'SERVER_PORT'; var=''      CASE var = 'INSTALL_PATH'; var=''      CASE var = 'APPSVR_ID'; var=''      CASE var = '__body__'; var=''      CASE 1; NULL   END CASE   IF var <> '' THEN      val=CGI$VALS<VAR.CNTR>      LOCATE var IN ALPHA.VARS BY "AL" SETTING POS ELSE NULL      ALPHA.VARS=INSERT(ALPHA.VARS,POS,0,0,var)      ALPHA.VALS=INSERT(ALPHA.VALS,POS,0,0,val)    END NEXT VAR.CNTRMAX.VAR.CNTR=DCOUNT(ALPHA.VARS,@AM)FOR VAR.CNTR = 1 TO MAX.VAR.CNTR   var=ALPHA.VARS<VAR.CNTR>   val=ALPHA.VALS<VAR.CNTR>   URL.STRING:='&':var:'=':val NEXT VAR.CNTRURL.STRING=URL.STRING[2,999999]RETURNEND0023EFMVDB.INIT0c2*** Copyright (C) 2020 Zumasys, Inc., All Rights Reserved* Description: perform common dashboard startup functions** 9-23-16 TPARKER MODIFICATIONS TO ELIMINATE GO_BACK AND REPLACE WITH*         STANDARD BROWSER BACK BUTTION** 10-25-16 Peter Schellenbach - moved this out of INIT.WWW and into*          this new MVDB.INIT program to handle all MVDB-specific*          initialization, then launch individual MVDB resource*          programs (MVDB.MAIN, MVDB.ADMIN, MVDB.WEB.ED).**          Additional browser back button fixes:*            - do not save and restore SESSION as this reflects the login status*              and after a logout, using browser back and forward, then logging*              back in may cause unexpected logout by using browser back or forward.*              Only current_db is restored when backing up.*            - push current state before letting MVDB.MAIN process the request.*              Since any Go button click or link click only affects a single widget,*              only WIDGET.USER.DATA for that specific needs to be pushed. The widget*              can be identified by examining CGI variables 'sw' and 'udview' at the*              next level. We do not know which widget state to save at level 'n'*              until we receive a request for level 'n+1' which specifies user input*              or drilldown for a specific widget. At this time the widget state*              is saved for the previous stack level.*            - no need to save and restore CGI variables, as these are all supplied*              in the query string in the URL, and when going back up the stack,*              the URL and query string matches the stack, so the CGI variables*              are identical.*            - include the PATH_INFO in the URL when pushing on stack, since we*              need to handle other resources (MVDB.ADMIN, MVDB.WEB.ED) besides*              MVDB.MAIN.*EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*OPEN 'WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, 'WEB.SESSION'OPEN 'WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS' ;** this is in /WWW/ common **OPEN 'MVDB.UDATA' TO F.MVDB.UDATA ELSE STOP 201, 'MVDB.UDATA'*IF CGI$RESOURCE.NAME = '' THEN CGI$RESOURCE.NAME = 'MVDB.MAIN' ;* safe default*MAT GLOBAL.INFO = ''** Combine headers & cgi vars (MVDB programs don't use CGI$HEADERVARS/CGI$HEADERVALS*IF CGI$HEADERVARS <> "" THEN  IF CGI$VARS = "" THEN    CGI$VARS = CGI$HEADERVARS    CGI$VALS = CGI$HEADERVALS  END ELSE    NUM.HDR.VARS = COUNT(CGI$HEADERVARS, @AM)    NUM.HDR.VALS = COUNT(CGI$HEADERVALS, @AM)    IF NUM.HDR.VARS >= NUM.HDR.VALS THEN      * Since there may be missing (null) vals at end of CGI$HEADERVALS,      * add appropriate number of @AM to keep vars & vals in sync!      CGI$VARS = CGI$HEADERVARS : @AM : CGI$VARS      CGI$VALS = CGI$HEADERVALS : STR(@AM, NUM.HDR.VARS - NUM.HDR.VALS + 1) : CGI$VALS    END  ENDEND** Validate the HTTP method*METHOD = 'UNKNOWN'LOCATE "REQUEST_METHOD" IN CGI$VARS SETTING POS THEN METHOD = OCONV(CGI$VALS<POS>, 'MCU')IF METHOD <> 'GET' AND METHOD <> 'POST' THEN  PRINT '500 ERROR Unsupported HTTP Method ':METHOD  STOPEND** Load the session ID if there is one*CALL GET.SESSION.ID(SESSION$ID, CGI$VARS, CGI$VALS)IF (SESSION$ID = '') THEN  CALL CREATE.SESSION(SESSION$ID)  CALL SET.COOKIE("sessionid=":SESSION$ID)END** How many active users are online?*SELECT F.WEB.SESSIONUSER.COUNT = 0LOOP  READNEXT WSID ELSE EXIT  READ SREC FROM F.WEB.SESSION, WSID ELSE CONTINUE  LOCATE "userid" IN SREC<1> SETTING UPOS THEN USER.COUNT += 1REPEATPRINT "Client-Count: ":USER.COUNT** Browser "back" button handler*READ DD.STACK FROM F.MVDB.UDATA, SESSION$ID:'$DD.STACK' ELSE DD.STACK=''NEW.STACK.ITEM = 1MAX.DDS = 0CALL REBUILD.URL.STRING(URL.STRING)LOCATE "PATH_INFO" IN CGI$VARS SETTING POS THEN  URL.PATH =  CGI$VALS<POS>  IF URL.PATH = "" OR URL.PATH = "/" THEN URL.PATH = CGI$PATH:"/MVDB.MAIN"  IF URL.PATH[1,1] # "/" THEN URL.PATH = "/":URL.PATHEND ELSE URL.PATH = "/dbc/MVDB.MAIN"URL = URL.PATH:'?':URL.STRING**W$GOBACK=0***CALL SUB.LOG.DEBUG.INFO('MVDB.INIT','BEGIN REQUEST, SESSION=':SESSION$ID:' URL=':URL:' CUR STACK LEVEL=':DCOUNT(DD.STACK,AM):' METHOD=':METHOD)*IF DD.STACK <> '' THEN  MAX.DDS = DCOUNT(DD.STACK,AM)  IF INDEX(DD.STACK,URL,1) THEN    DD.POS = MAX.DDS    LOOP      IF DD.POS THEN        IF URL = DD.STACK<DD.POS> THEN          NEW.STACK.ITEM = 0        END      END    UNTIL NOT(DD.POS) OR NOT(NEW.STACK.ITEM) DO      DD.POS = DD.POS - 1    REPEAT    IF DD.POS THEN*** BACK BUTTON USED SO POP OFF PREVIOUS DRILLDOWNS*      GOSUB PURGE.URLS.AFTER.BACK      READ GUD FROM F.MVDB.UDATA, SESSION$ID:'$DD.':DD.POS:'.GUD' ELSE GUD=''      WRITE GUD ON F.MVDB.UDATA, SESSION$ID:'$UG'      READ WUD FROM F.MVDB.UDATA, SESSION$ID:'$DD.':DD.POS:'.WUD' ELSE WUD = ''      URL.WIDGET = WUD<1>      IF URL.WIDGET <> 'NULL' THEN        WRITE DELETE(WUD,1,0,0) ON F.MVDB.UDATA, SESSION$ID:'$':URL.WIDGET      END      READ SESSION FROM F.MVDB.UDATA, SESSION$ID:'$DD.':DD.POS:'.SESSION' ELSE SESSION=''      LOCATE "userid" IN SESSION<1> SETTING POS THEN userid = SESSION<2,POS> ELSE userid = ''      IF userid <> '' THEN* Restore current dashboard from drilldown stack, but leave other session variables alone        LOCATE "current_db" IN SESSION<1> SETTING POS THEN current_db = SESSION<2,POS> ELSE current_db = ''        CALL PUT.SESSION.VAR("current_db", current_db)      END**        W$GOBACK=1    END  ENDEND*IF NEW.STACK.ITEM THEN* POST-REDIRECT-GET pattern causes extra GET after POST, but only* the GET is on browser history, so skip duplicate URLs based on* special CGI variables 'dblogin' and 'dbprg' (note: dbprg is not* being used at this time).  LOCATE "dblogin" IN CGI$VARS SETTING POS THEN dblogin = CGI$VALS<POS> ELSE dblogin = 0  LOCATE "dbprg" IN CGI$VARS SETTING POS THEN dbprg = CGI$VALS<POS> ELSE dbprg = 0  IF NOT(dblogin) AND NOT(dbprg) THEN* Push the new URL and session state onto the stack    MAX.DDS += 1    DD.STACK<MAX.DDS> = URL* Save global user before running request    READ GUD FROM F.MVDB.UDATA, SESSION$ID:"$UG" ELSE GUD = ''    WRITE GUD ON F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS:'.GUD'* Get widget name from request CGI variables & save widget user data before running request    GOSUB GET.URL.WIDGET    IF URL.WIDGET = '' THEN      DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS-1:'.WUD'    END ELSE      READ WUD FROM F.MVDB.UDATA, SESSION$ID:'$':URL.WIDGET ELSE WUD = ''      WRITE INSERT(WUD,1,0,0,URL.WIDGET) ON F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS-1:'.WUD'    END    READ SESSION FROM F.WEB.SESSION, SESSION$ID ELSE SESSION = ''    IF SESSION = '' THEN      DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS:'.SESSION'    END ELSE      WRITE SESSION ON F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS:'.SESSION'    END  ENDENDIF DD.STACK = '' THEN  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.STACK'END ELSE  WRITE DD.STACK ON F.MVDB.UDATA, SESSION$ID:'$DD.STACK'END** Run the MVDB program for this resource and check for failure*LOOP  TRY.AGAIN = 0  APP.FAILURE = 0  EXECUTE CGI$RESOURCE.NAME  IF GLOBAL.INFO(100) # 1 THEN* The dashboard controller quit unexpectedly. If there is a running* widget, it is likely causing the failure. Fail it, and try again.    APP.FAILURE = 1    CALL GET.SESSION.VAR("running_widget",FAILED.WIDGET)    IF FAILED.WIDGET # "" THEN      CALL PUT.SESSION.VAR("running_widget","")      CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS)      LOCATE FAILED.WIDGET IN FAILED.WIDGETS SETTING FWPOS ELSE        FAILED.WIDGETS<-1> = FAILED.WIDGET        CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)        TRY.AGAIN = 1      END    END    LOCATE "unfail_widget" IN CGI$VARS SETTING DPOS THEN      CGI$VARS = DELETE( CGI$VARS, DPOS, 0, 0 )      CGI$VALS = DELETE( CGI$VALS, DPOS, 0, 0 )    END  ENDWHILE TRY.AGAIN DO REPEATIF APP.FAILURE THEN  CALL WEB.SEND("An application error occured in program ":CGI$RESOURCE.NAME:".<hr>")  HTML = '<table><tr><th>Variable</th><th>Value</th></tr>'  FOR X = 1 TO DCOUNT( CGI$VARS, @AM )    HTML<-1> = '<tr><td>':CGI$VARS<X>:'</td><td>':CGI$VALS<X>:'</td></tr>'  NEXT X  HTML<-1> = '</table>'  CALL WEB.SEND(HTML)END* Final WEB.FLUSH call moved from WDB.INIT to here (makes deploying MVConnect to other accounts simpler)CALL WEB.FLUSH** Done*STOP** SUPPORT ROUTINES FOR BACK BUTTON HANDLER*PURGE.URLS.AFTER.BACK:*FIRST.PURGE = DD.POS + 1IF FIRST.PURGE > MAX.DDS THEN RETURNFOR PURGE.CNTR = MAX.DDS TO FIRST.PURGE STEP -1  DD.STACK = DELETE(DD.STACK,PURGE.CNTR,0,0)  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':PURGE.CNTR:'.GUD'  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':PURGE.CNTR:'.WUD'  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':PURGE.CNTR:'.SESSION'NEXT PURGE.CNTRRETURN*GET.URL.WIDGET:*URL.WIDGET='NULL'LOCATE "sw" IN CGI$VARS SETTING POS THEN  URL.WIDGET = CGI$VALS<POS>END ELSE  LOCATE "udview" IN CGI$VARS SETTING POS THEN    URL.WIDGET = CGI$VALS<POS>  ENDENDRETURN*END000103SWAP0c2SUBROUTINE SWAP(string,SUB1,SUB2)**#MAKE# RL $OPTIONS D3IDX.POS = 1LOOP  POS = INDEX( string, SUB1, IDX.POS )WHILE POS DO  string = string[1,POS-1]:SUB2:string[POS+LEN(SUB1),LEN(string)]  IDX.POS = IDX.POS + COUNT(SUB2,SUB1)REPEATRETURNEND016F3DMVBP.FORMS0c0016F29listpeqs.html0c2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Print Queue</title><style type="text/css">html {margin:0;padding:0;}body{margin:0;padding:0;font-family:Arial, Helvetica, sans-serif;font-size:12px;background: url(/db/images/background_body.gif) 0 0 repeat-x;}/* *html body {height:100%;}*/body.popup{margin:5px 5px 5px 5px;}p, td, th{font-size:1em;}pre {font-size:1em;}#container {position:relative;margin:0 auto;padding:15px 20px 0 20px;}#header {}#maincontent{background: url(/db/images/background_maincontent.gif) 0 0 no-repeat;padding:0 0 0 20px;margin:0 0 0 0;position:relative;}#content {background: url(/db/images/background_maincontent.gif) 100% 0 no-repeat;padding:5px 20px 50px 0;position:relative;min-height:320px;_height:320px;}/* =HEADER STYLES=================================================================*/#header #navbar {position:absolute;top:0;right:-1px;height:30px;list-style:none;margin:0;padding:0 5px 0 0;background: url(/db/images/background_navbar.gif) 0 0 repeat-x;}#header #navbar li {height:10px;float:left;position:relative;}#header #navbar li.myreports {background: url(/db/images/background_navbarleft.gif) 0 0 no-repeat;padding-left:15px;}#header #navbar li.completed {background: url(/db/images/background_navbarright.gif) 100% 0 no-repeat;padding-right:15px;}#header #navbar li.admin {background: url(/db/images/background_tabfirst.gif) 0 12px no-repeat;padding-left:15px;}#header #navbar li.admin a{background: url(/db/images/background_tabfirst.gif) 100% 12px no-repeat;margin:0;padding:7px 12px 0 3px;line-height:24px;height:24px;color: #333333;}#header #navbar li.profile {background: url(/db/images/background_tabfirst.gif) 0 12px no-repeat;padding-left:15px;}body.admin #header #navbar li.profile {background: url(/db/images/background_tab.gif) 0 12px no-repeat;}#header #navbar li.profile a{background: url(/db/images/background_tabright.gif) 100% 12px no-repeat;padding:7px 15px 0 0;margin:0;line-height:24px;height:24px;color: #333333;}#header #navbar li a {float:left;height:32px;line-height:32px;margin:0;padding: 0 8px;text-decoration:none;}#header #navbar li a:hover {text-decoration:underline}#header #navbar li.active a {background: url(/db/images/background_navbaractive.gif) 50% 0 no-repeat;height:30px;font-weight:normal;}#header #navbar a {color: #FFFFFF;}#header #logo {position:absolute;left:10px;top:20px;}#header #welcome {position:absolute;right:15px;top:40px;font-size:.9em;color:#333333;}#errors, #messages {padding:20px 20px 20px 40px;border:1px solid #CCCCCC;background: #EEEEEE;clear:both;margin-bottom:40px;position:relative;}/* =FOOTER STYLES=================================================================*/#footer {text-align:center;font-size:.8em;color: #999999;clear:both;}#footer a {color: #999999;text-decoration:none;}/* =HEADER STYLES=================================================================*/h1 {font-weight:normal;font-size:26px;letter-spacing:-1px;margin:0 0 10px 0;}h2 {font-size:22px;margin:10px 0 0 0;font-weight:normal;}h3 {margin:15px 0 5px 0;font-weight:normal;font-size:16px;border-bottom: 1px solid #999999;position:relative;}h4 {margin:0;font-weight:normal;font-size:12px;}/* =BASIC STYLES=================================================================*/p{margin: 0 0 10px 0;line-height:1.3em;}label{font-weight:bold;}/* =TABLE STYLES=================================================================*/.listing{border:1px solid #cccccc;border-collapse:collapse;clear: both;width:100%;margin: 0 0 5px 0;}.listing th, .form .listing th {background-color:#cccccc;padding:5px;text-align:left;vertical-align:top;border-bottom: 1px solid #cccccc;color: #333333;}table.sortable th a{color: #333333;text-decoration:none;}.listing td, .form .listing td{padding:5px;border-bottom:1px solid #cccccc;vertical-align:top;}.even td, .even th{background: #EEEEEE;}.odd td, .odd th{background: #FFFFFF;}.even .odd th, .even .odd td {background: #FFFFFF;}fieldset {padding:0 10px 10px 10px;margin: 0 0 10px 0;position:relative;}legend {margin-top:5px;font-size:22px;margin-bottom:10px;font-weight:normal;color: #000000;letter-spacing:-1px;}.form {border-collapse:collapse;margin: 0;padding: 0;}.form th{text-align:right;padding:5px 0 5px 5px;background:none;vertical-align:top;}.form td{text-align:left;padding:3px;vertical-align:top;}span.button button {background: url(/db/images/background_button.gif) 100% 0 no-repeat;border:none;padding:0 5px 0 0;height:23px;color:#333333;}span.button {background: url(/db/images/background_button.gif) 0 0 no-repeat;padding: 0 0 0 5px;}html>body span.button {padding: 5px 0 5px 5px;}input.text {border: 1px solid #999999;}input.date {width:55px;background: url(/db/images/icon_calendar.gif) 2px 50% no-repeat;padding-left:20px;border: 1px solid #999999;}/* =PAGING STYLES=================================================================*/.paging{text-align:right;}.wizardtab {position:relative;}.tabnav {text-align:right;padding-top:10px;}.note {font-size:smaller;color: #666666;margin:0;}a:link, a:visited {text-decoration: underline;color: #ff8125;}a:hover {text-decoration: underline;color: #333;}a img {border:none;}#printqueue tr:hover td, #printqueue tr.hover td {background:#CCCCCC;}#printqueue tr:hover .preview, #printqueue tr.hover .preview {display:block;z-index:200;}.preview {position:absolute;right:25px;top:25px;margin-top:-5px;border-top:1px solid #666666;border-right:1px solid #666666;border-left:1px solid #666666;font-size:.8em;padding:20px 20px 10px 20px;background: url(/db/images/background_preview.gif) 0 100% repeat-x;display:none;_width: 60em;min-width:60em;}a.thumbnail pre {float:left;margin:5px;border-top:1px solid #666666;border-right:1px solid #666666;border-left:1px solid #666666;font-size:4px;padding:5em 5em 4em 5em;background: url(/db/images/background_preview.gif) 0 100% repeat-x;position:relative;}a.thumbnail {text-decoration:none;color:#666666;}a.thumbnail:hover {color:#000000}.queued td{background:#FFCC33;}div.page {background: #FFFFFF;border-top:1px solid #BBBBBB;border-right:1px solid #999999;border-left:1px solid #333333;border-bottom:1px solid #000000;margin:10px 0;padding:20px;float:left;clear:both;_width:60em;min-width:60em;font-size:.9em;}.printDialog {position:absolute; top:5px; right:0; width:220px; background:#FFFFFF; border: 1px solid #CCCCCC; border-top:none;}.printDialog div {padding:0 5px 5px 5px;}.even .printDialog {background: #EEEEEE;}tr.hover .printDialog, tr:hover .printDialog {background:#CCCCCC;z-index:201;}#alerts {margin: 50px 0 -30px 0;}form {margin: 0;padding: 0;}#search_box {margin: 0;position: absolute;top: 20px;right: 20px;text-align: right;}</style><script><!--var BaseURL = "/";--></script><script type="text/javascript" language="javascript">/*Behaviour v1.1 by Ben Nolan, June 2005. Based largely on the workof Simon Willison (see comments by Simon below).Description:Uses css selectors to apply javascript behaviours to enableunobtrusive javascript in html documents.Usage:   var myrules = {'b.someclass' : function(element){element.onclick = function(){alert(this.innerHTML);}},'#someid u' : function(element){element.onmouseover = function(){this.innerHTML = "BLAH!";}}};Behaviour.register(myrules);License:My stuff is BSD licensed. Not sure about Simon's.More information:http://ripcord.co.nz/behaviour/*/   var Behaviour = {list : new Array,register : function(sheet){Behaviour.list.push(sheet);},start : function(){Behaviour.addLoadEvent(function(){Behaviour.apply();});},apply : function(){for (h=0;sheet=Behaviour.list[h];h++){for (selector in sheet){list = document.getElementsBySelector(selector);if (!list){continue;}for (i=0;element=list[i];i++){sheet[selector](element);}}}},addLoadEvent : function(func){var oldonload = window.onload;if (typeof window.onload != 'function') {window.onload = func;} else {window.onload = function() {oldonload();func();}}}}Behaviour.start();/*The following code is Copyright (C) Simon Willison 2004.document.getElementsBySelector(selector)- returns an array of element objects from the current documentmatching the CSS selector. Selectors can contain element names, class names and ids and can be nested. For example:elements = document.getElementsBySelect('div#main p a.external')Will return an array of all 'a' elements with 'external' in their class attribute that are contained inside 'p' elements that are contained inside the 'div' element which has id="main"New in version 0.4: Support for CSS2 and CSS3 attribute selectors:See http://www.w3.org/TR/css3-selectors/#attribute-selectorsVersion 0.4 - Simon Willison, March 25th 2003-- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows-- Opera 7 fails */function getAllChildren(e) {return e.all ? e.all : e.getElementsByTagName('*');}document.getElementsBySelector = function(selector) {if (!document.getElementsByTagName) {return new Array();}var tokens = selector.split(' ');var currentContext = new Array(document);for (var i = 0; i < tokens.length; i++) {token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;if (token.indexOf('#') > -1) {var bits = token.split('#');var tagName = bits[0];var id = bits[1];var element = document.getElementById(id);if (tagName && element.nodeName.toLowerCase() != tagName) {return new Array();}currentContext = new Array(element);continue; // Skip to next token}if (token.indexOf('.') > -1) {var bits = token.split('.');var tagName = bits[0];var className = bits[1];if (!tagName) {tagName = '*';}var found = new Array;var foundCount = 0;for (var h = 0; h < currentContext.length; h++) {var elements;if (tagName == '*') {elements = getAllChildren(currentContext[h]);} else {elements = currentContext[h].getElementsByTagName(tagName);}for (var j = 0; j < elements.length; j++) {found[foundCount++] = elements[j];}}currentContext = new Array;var currentContextIndex = 0;for (var k = 0; k < found.length; k++) {if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) {currentContext[currentContextIndex++] = found[k];}}continue; // Skip to next token}if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {var tagName = RegExp.$1;var attrName = RegExp.$2;var attrOperator = RegExp.$3;var attrValue = RegExp.$4;if (!tagName) {tagName = '*';}var found = new Array;var foundCount = 0;for (var h = 0; h < currentContext.length; h++) {var elements;if (tagName == '*') {elements = getAllChildren(currentContext[h]);} else {elements = currentContext[h].getElementsByTagName(tagName);}for (var j = 0; j < elements.length; j++) {found[foundCount++] = elements[j];}}currentContext = new Array;var currentContextIndex = 0;var checkFunction; // This function will be used to filter the elementsswitch (attrOperator) {case '=': // EqualitycheckFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };break;case '~': // Match one of space seperated words checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };break;case '|': // Match start with value followed by optional hyphencheckFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };break;case '^': // Match starts with valuecheckFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };break;case '$': // Match ends with value - fails with "Warning" in Opera 7checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };break;case '*': // Match ends with valuecheckFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };break;default :checkFunction = function(e) { return e.getAttribute(attrName); };}currentContext = new Array;var currentContextIndex = 0;for (var k = 0; k < found.length; k++) {if (checkFunction(found[k])) {currentContext[currentContextIndex++] = found[k];}}continue; // Skip to next token}if (!currentContext[0]){return;}tagName = token;var found = new Array;var foundCount = 0;for (var h = 0; h < currentContext.length; h++) {var elements = currentContext[h].getElementsByTagName(tagName);for (var j = 0; j < elements.length; j++) {found[foundCount++] = elements[j];}}currentContext = found;}return currentContext;}/* That revolting regular expression explained /^(\w+)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/\---/  \---/\-------------/    \-------/|      |         |               ||      |         |           The value|      |    ~,|,^,$,* or =|   Attribute Tag*/</script><script type="text/javascript" language="javascript">/*  Prototype JavaScript framework, version 1.4.0*  (c) 2005 Sam Stephenson <sam@conio.net>**  THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff*  against the source tree, available from the Prototype darcs repository.**  Prototype is freely distributable under the terms of an MIT-style license.**  For details, see the Prototype web site: http://prototype.conio.net/*/*--------------------------------------------------------------------------*/var Prototype = {Version: '1.4.0',ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',emptyFunction: function() {},K: function(x) {return x}}var Class = {create: function() {return function() {this.initialize.apply(this, arguments);}}}var Abstract = new Object();Object.extend = function(destination, source) {for (property in source) {destination[property] = source[property];}return destination;}Object.inspect = function(object) {try {if (object == undefined) return 'undefined';if (object == null) return 'null';return object.inspect ? object.inspect() : object.toString();} catch (e) {if (e instanceof RangeError) return '...';throw e;}}Function.prototype.bind = function() {var __method = this, args = $A(arguments), object = args.shift();return function() {return __method.apply(object, args.concat($A(arguments)));}}Function.prototype.bindAsEventListener = function(object) {var __method = this;return function(event) {return __method.call(object, event || window.event);}}Object.extend(Number.prototype, {toColorPart: function() {var digits = this.toString(16);if (this < 16) return '0' + digits;return digits;},succ: function() {return this + 1;},times: function(iterator) {$R(0, this, true).each(iterator);return this;}});var Try = {these: function() {var returnValue;for (var i = 0; i < arguments.length; i++) {var lambda = arguments[i];try {returnValue = lambda();break;} catch (e) {}}return returnValue;}}/*--------------------------------------------------------------------------*/var PeriodicalExecuter = Class.create();PeriodicalExecuter.prototype = {initialize: function(callback, frequency) {this.callback = callback;this.frequency = frequency;this.currentlyExecuting = false;this.registerCallback();},registerCallback: function() {setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);},onTimerEvent: function() {if (!this.currentlyExecuting) {try {this.currentlyExecuting = true;this.callback();} finally {this.currentlyExecuting = false;}}}}/*--------------------------------------------------------------------------*/function $() {var elements = new Array();for (var i = 0; i < arguments.length; i++) {var element = arguments[i];if (typeof element == 'string')element = document.getElementById(element);if (arguments.length == 1)return element;elements.push(element);}return elements;}Object.extend(String.prototype, {stripTags: function() {return this.replace(/<\/?[^>]+>/gi, '');},stripScripts: function() {return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');},extractScripts: function() {var matchAll = new RegExp(Prototype.ScriptFragment, 'img');var matchOne = new RegExp(Prototype.ScriptFragment, 'im');return (this.match(matchAll) || []).map(function(scriptTag) {return (scriptTag.match(matchOne) || ['', ''])[1];});},evalScripts: function() {return this.extractScripts().map(eval);},escapeHTML: function() {var div = document.createElement('div');var text = document.createTextNode(this);div.appendChild(text);return div.innerHTML;},unescapeHTML: function() {var div = document.createElement('div');div.innerHTML = this.stripTags();return div.childNodes[0] ? div.childNodes[0].nodeValue : '';},toQueryParams: function() {var pairs = this.match(/^\??(.*)$/)[1].split('&');return pairs.inject({}, function(params, pairString) {var pair = pairString.split('=');params[pair[0]] = pair[1];return params;});},toArray: function() {return this.split('');},camelize: function() {var oStringList = this.split('-');if (oStringList.length == 1) return oStringList[0];var camelizedString = this.indexOf('-') == 0? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1): oStringList[0];for (var i = 1, len = oStringList.length; i < len; i++) {var s = oStringList[i];camelizedString += s.charAt(0).toUpperCase() + s.substring(1);}return camelizedString;},inspect: function() {return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'";}});String.prototype.parseQuery = String.prototype.toQueryParams;var $break    = new Object();var $continue = new Object();var Enumerable = {each: function(iterator) {var index = 0;try {this._each(function(value) {try {iterator(value, index++);} catch (e) {if (e != $continue) throw e;}});} catch (e) {if (e != $break) throw e;}},all: function(iterator) {var result = true;this.each(function(value, index) {result = result && !!(iterator || Prototype.K)(value, index);if (!result) throw $break;});return result;},any: function(iterator) {var result = true;this.each(function(value, index) {if (result = !!(iterator || Prototype.K)(value, index))throw $break;});return result;},collect: function(iterator) {var results = [];this.each(function(value, index) {results.push(iterator(value, index));});return results;},detect: function (iterator) {var result;this.each(function(value, index) {if (iterator(value, index)) {result = value;throw $break;}});return result;},findAll: function(iterator) {var results = [];this.each(function(value, index) {if (iterator(value, index))results.push(value);});return results;},grep: function(pattern, iterator) {var results = [];this.each(function(value, index) {var stringValue = value.toString();if (stringValue.match(pattern))results.push((iterator || Prototype.K)(value, index));})return results;},include: function(object) {var found = false;this.each(function(value) {if (value == object) {found = true;throw $break;}});return found;},inject: function(memo, iterator) {this.each(function(value, index) {memo = iterator(memo, value, index);});return memo;},invoke: function(method) {var args = $A(arguments).slice(1);return this.collect(function(value) {return value[method].apply(value, args);});},max: function(iterator) {var result;this.each(function(value, index) {value = (iterator || Prototype.K)(value, index);if (value >= (result || value))result = value;});return result;},min: function(iterator) {var result;this.each(function(value, index) {value = (iterator || Prototype.K)(value, index);if (value <= (result || value))result = value;});return result;},partition: function(iterator) {var trues = [], falses = [];this.each(function(value, index) {((iterator || Prototype.K)(value, index) ?trues : falses).push(value);});return [trues, falses];},pluck: function(property) {var results = [];this.each(function(value, index) {results.push(value[property]);});return results;},reject: function(iterator) {var results = [];this.each(function(value, index) {if (!iterator(value, index))results.push(value);});return results;},sortBy: function(iterator) {return this.collect(function(value, index) {return {value: value, criteria: iterator(value, index)};}).sort(function(left, right) {var a = left.criteria, b = right.criteria;return a < b ? -1 : a > b ? 1 : 0;}).pluck('value');},toArray: function() {return this.collect(Prototype.K);},zip: function() {var iterator = Prototype.K, args = $A(arguments);if (typeof args.last() == 'function')iterator = args.pop();var collections = [this].concat(args).map($A);return this.map(function(value, index) {iterator(value = collections.pluck(index));return value;});},inspect: function() {return '#<Enumerable:' + this.toArray().inspect() + '>';}}Object.extend(Enumerable, {map:     Enumerable.collect,find:    Enumerable.detect,select:  Enumerable.findAll,member:  Enumerable.include,entries: Enumerable.toArray});var $A = Array.from = function(iterable) {if (!iterable) return [];if (iterable.toArray) {return iterable.toArray();} else {var results = [];for (var i = 0; i < iterable.length; i++)results.push(iterable[i]);return results;}}Object.extend(Array.prototype, Enumerable);Array.prototype._reverse = Array.prototype.reverse;Object.extend(Array.prototype, {_each: function(iterator) {for (var i = 0; i < this.length; i++)iterator(this[i]);},clear: function() {this.length = 0;return this;},first: function() {return this[0];},last: function() {return this[this.length - 1];},compact: function() {return this.select(function(value) {return value != undefined || value != null;});},flatten: function() {return this.inject([], function(array, value) {return array.concat(value.constructor == Array ?value.flatten() : [value]);});},without: function() {var values = $A(arguments);return this.select(function(value) {return !values.include(value);});},indexOf: function(object) {for (var i = 0; i < this.length; i++)if (this[i] == object) return i;return -1;},reverse: function(inline) {return (inline !== false ? this : this.toArray())._reverse();},shift: function() {var result = this[0];for (var i = 0; i < this.length - 1; i++)this[i] = this[i + 1];this.length--;return result;},inspect: function() {return '[' + this.map(Object.inspect).join(', ') + ']';}});var Hash = {_each: function(iterator) {for (key in this) {var value = this[key];if (typeof value == 'function') continue;var pair = [key, value];pair.key = key;pair.value = value;iterator(pair);}},keys: function() {return this.pluck('key');},values: function() {return this.pluck('value');},merge: function(hash) {return $H(hash).inject($H(this), function(mergedHash, pair) {mergedHash[pair.key] = pair.value;return mergedHash;});},toQueryString: function() {return this.map(function(pair) {return pair.map(encodeURIComponent).join('=');}).join('&');},inspect: function() {return '#<Hash:{' + this.map(function(pair) {return pair.map(Object.inspect).join(': ');}).join(', ') + '}>';}}function $H(object) {var hash = Object.extend({}, object || {});Object.extend(hash, Enumerable);Object.extend(hash, Hash);return hash;}ObjectRange = Class.create();Object.extend(ObjectRange.prototype, Enumerable);Object.extend(ObjectRange.prototype, {initialize: function(start, end, exclusive) {this.start = start;this.end = end;this.exclusive = exclusive;},_each: function(iterator) {var value = this.start;do {iterator(value);value = value.succ();} while (this.include(value));},include: function(value) {if (value < this.start)return false;if (this.exclusive)return value < this.end;return value <= this.end;}});var $R = function(start, end, exclusive) {return new ObjectRange(start, end, exclusive);}var Ajax = {getTransport: function() {return Try.these(function() {return new ActiveXObject('Msxml2.XMLHTTP')},function() {return new ActiveXObject('Microsoft.XMLHTTP')},function() {return new XMLHttpRequest()}) || false;},activeRequestCount: 0}Ajax.Responders = {responders: [],_each: function(iterator) {this.responders._each(iterator);},register: function(responderToAdd) {if (!this.include(responderToAdd))this.responders.push(responderToAdd);},unregister: function(responderToRemove) {this.responders = this.responders.without(responderToRemove);},dispatch: function(callback, request, transport, json) {this.each(function(responder) {if (responder[callback] && typeof responder[callback] == 'function') {try {responder[callback].apply(responder, [request, transport, json]);} catch (e) {}}});}};Object.extend(Ajax.Responders, Enumerable);Ajax.Responders.register({onCreate: function() {Ajax.activeRequestCount++;},onComplete: function() {Ajax.activeRequestCount--;}});Ajax.Base = function() {};Ajax.Base.prototype = {setOptions: function(options) {this.options = {method:       'post',asynchronous: true,parameters:   ''}Object.extend(this.options, options || {});},responseIsSuccess: function() {return this.transport.status == undefined|| this.transport.status == 0|| (this.transport.status >= 200 && this.transport.status < 300);},responseIsFailure: function() {return !this.responseIsSuccess();}}Ajax.Request = Class.create();Ajax.Request.Events =['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];Ajax.Request.prototype = Object.extend(new Ajax.Base(), {initialize: function(url, options) {this.transport = Ajax.getTransport();this.setOptions(options);this.request(url);},request: function(url) {var parameters = this.options.parameters || '';if (parameters.length > 0) parameters += '&_=';try {this.url = url;if (this.options.method == 'get' && parameters.length > 0)this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;Ajax.Responders.dispatch('onCreate', this, this.transport);this.transport.open(this.options.method, this.url,this.options.asynchronous);if (this.options.asynchronous) {this.transport.onreadystatechange = this.onStateChange.bind(this);setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);}this.setRequestHeaders();var body = this.options.postBody ? this.options.postBody : parameters;this.transport.send(this.options.method == 'post' ? body : null);} catch (e) {this.dispatchException(e);}},setRequestHeaders: function() {var requestHeaders =['X-Requested-With', 'XMLHttpRequest','X-Prototype-Version', Prototype.Version];if (this.options.method == 'post') {requestHeaders.push('Content-type','application/x-www-form-urlencoded');/* Force "Connection: close" for Mozilla browsers to work around* a bug where XMLHttpReqeuest sends an incorrect Content-length* header. See Mozilla Bugzilla #246651.*/if (this.transport.overrideMimeType)requestHeaders.push('Connection', 'close');}if (this.options.requestHeaders)requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);for (var i = 0; i < requestHeaders.length; i += 2)this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);},onStateChange: function() {var readyState = this.transport.readyState;if (readyState != 1)this.respondToReadyState(this.transport.readyState);},header: function(name) {try {return this.transport.getResponseHeader(name);} catch (e) {}},evalJSON: function() {try {return eval(this.header('X-JSON'));} catch (e) {}},evalResponse: function() {try {return eval(this.transport.responseText);} catch (e) {this.dispatchException(e);}},respondToReadyState: function(readyState) {var event = Ajax.Request.Events[readyState];var transport = this.transport, json = this.evalJSON();if (event == 'Complete') {try {(this.options['on' + this.transport.status]|| this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]|| Prototype.emptyFunction)(transport, json);} catch (e) {this.dispatchException(e);}if ((this.header('Content-type') || '').match(/^text\/javascript/i))this.evalResponse();}try {(this.options['on' + event] || Prototype.emptyFunction)(transport, json);Ajax.Responders.dispatch('on' + event, this, transport, json);} catch (e) {this.dispatchException(e);}/* Avoid memory leak in MSIE: clean up the oncomplete event handler */if (event == 'Complete')this.transport.onreadystatechange = Prototype.emptyFunction;},dispatchException: function(exception) {(this.options.onException || Prototype.emptyFunction)(this, exception);Ajax.Responders.dispatch('onException', this, exception);}});Ajax.Updater = Class.create();Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {initialize: function(container, url, options) {this.containers = {success: container.success ? $(container.success) : $(container),failure: container.failure ? $(container.failure) :(container.success ? null : $(container))}this.transport = Ajax.getTransport();this.setOptions(options);var onComplete = this.options.onComplete || Prototype.emptyFunction;this.options.onComplete = (function(transport, object) {this.updateContent();onComplete(transport, object);}).bind(this);this.request(url);},updateContent: function() {var receiver = this.responseIsSuccess() ?this.containers.success : this.containers.failure;var response = this.transport.responseText;if (!this.options.evalScripts)response = response.stripScripts();if (receiver) {if (this.options.insertion) {new this.options.insertion(receiver, response);} else {Element.update(receiver, response);}}if (this.responseIsSuccess()) {if (this.onComplete)setTimeout(this.onComplete.bind(this), 10);}}});Ajax.PeriodicalUpdater = Class.create();Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {initialize: function(container, url, options) {this.setOptions(options);this.onComplete = this.options.onComplete;this.frequency = (this.options.frequency || 2);this.decay = (this.options.decay || 1);this.updater = {};this.container = container;this.url = url;this.start();},start: function() {this.options.onComplete = this.updateComplete.bind(this);this.onTimerEvent();},stop: function() {this.updater.onComplete = undefined;clearTimeout(this.timer);(this.onComplete || Prototype.emptyFunction).apply(this, arguments);},updateComplete: function(request) {if (this.options.decay) {this.decay = (request.responseText == this.lastText ?this.decay * this.options.decay : 1);this.lastText = request.responseText;}this.timer = setTimeout(this.onTimerEvent.bind(this),this.decay * this.frequency * 1000);},onTimerEvent: function() {this.updater = new Ajax.Updater(this.container, this.url, this.options);}});document.getElementsByClassName = function(className, parentElement) {var children = ($(parentElement) || document.body).getElementsByTagName('*');return $A(children).inject([], function(elements, child) {if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))elements.push(child);return elements;});}/*--------------------------------------------------------------------------*/if (!window.Element) {var Element = new Object();}Object.extend(Element, {visible: function(element) {return $(element).style.display != 'none';},toggle: function() {for (var i = 0; i < arguments.length; i++) {var element = $(arguments[i]);Element[Element.visible(element) ? 'hide' : 'show'](element);}},hide: function() {for (var i = 0; i < arguments.length; i++) {var element = $(arguments[i]);element.style.display = 'none';}},show: function() {for (var i = 0; i < arguments.length; i++) {var element = $(arguments[i]);element.style.display = '';}},remove: function(element) {element = $(element);element.parentNode.removeChild(element);},update: function(element, html) {$(element).innerHTML = html.stripScripts();setTimeout(function() {html.evalScripts()}, 10);},getHeight: function(element) {element = $(element);return element.offsetHeight;},classNames: function(element) {return new Element.ClassNames(element);},hasClassName: function(element, className) {if (!(element = $(element))) return;return Element.classNames(element).include(className);},addClassName: function(element, className) {if (!(element = $(element))) return;return Element.classNames(element).add(className);},removeClassName: function(element, className) {if (!(element = $(element))) return;return Element.classNames(element).remove(className);},cleanWhitespace: function(element) {element = $(element);for (var i = 0; i < element.childNodes.length; i++) {var node = element.childNodes[i];if (node.nodeType == 3 && !/\S/.test(node.nodeValue))Element.remove(node);}},empty: function(element) {return $(element).innerHTML.match(/^\s*$/);},scrollTo: function(element) {element = $(element);var x = element.x ? element.x : element.offsetLeft,y = element.y ? element.y : element.offsetTop;window.scrollTo(x, y);},getStyle: function(element, style) {element = $(element);var value = element.style[style.camelize()];if (!value) {if (document.defaultView && document.defaultView.getComputedStyle) {var css = document.defaultView.getComputedStyle(element, null);value = css ? css.getPropertyValue(style) : null;} else if (element.currentStyle) {value = element.currentStyle[style.camelize()];}}if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))if (Element.getStyle(element, 'position') == 'static') value = 'auto';return value == 'auto' ? null : value;},setStyle: function(element, style) {element = $(element);for (name in style)element.style[name.camelize()] = style[name];},getDimensions: function(element) {element = $(element);if (Element.getStyle(element, 'display') != 'none')return {width: element.offsetWidth, height: element.offsetHeight};var els = element.style;var originalVisibility = els.visibility;var originalPosition = els.position;els.visibility = 'hidden';els.position = 'absolute';els.display = '';var originalWidth = element.clientWidth;var originalHeight = element.clientHeight;els.display = 'none';els.position = originalPosition;els.visibility = originalVisibility;return {width: originalWidth, height: originalHeight};},makePositioned: function(element) {element = $(element);var pos = Element.getStyle(element, 'position');if (pos == 'static' || !pos) {element._madePositioned = true;element.style.position = 'relative';if (window.opera) {element.style.top = 0;element.style.left = 0;}}},undoPositioned: function(element) {element = $(element);if (element._madePositioned) {element._madePositioned = undefined;element.style.position =element.style.top =element.style.left =element.style.bottom =element.style.right = '';}},makeClipping: function(element) {element = $(element);if (element._overflow) return;element._overflow = element.style.overflow;if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')element.style.overflow = 'hidden';},undoClipping: function(element) {element = $(element);if (element._overflow) return;element.style.overflow = element._overflow;element._overflow = undefined;}});var Toggle = new Object();Toggle.display = Element.toggle;/*--------------------------------------------------------------------------*/Abstract.Insertion = function(adjacency) {this.adjacency = adjacency;}Abstract.Insertion.prototype = {initialize: function(element, content) {this.element = $(element);this.content = content.stripScripts();if (this.adjacency && this.element.insertAdjacentHTML) {try {this.element.insertAdjacentHTML(this.adjacency, this.content);} catch (e) {if (this.element.tagName.toLowerCase() == 'tbody') {this.insertContent(this.contentFromAnonymousTable());} else {throw e;}}} else {this.range = this.element.ownerDocument.createRange();if (this.initializeRange) this.initializeRange();this.insertContent([this.range.createContextualFragment(this.content)]);}setTimeout(function() {content.evalScripts()}, 10);},contentFromAnonymousTable: function() {var div = document.createElement('div');div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';return $A(div.childNodes[0].childNodes[0].childNodes);}}var Insertion = new Object();Insertion.Before = Class.create();Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {initializeRange: function() {this.range.setStartBefore(this.element);},insertContent: function(fragments) {fragments.each((function(fragment) {this.element.parentNode.insertBefore(fragment, this.element);}).bind(this));}});Insertion.Top = Class.create();Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {initializeRange: function() {this.range.selectNodeContents(this.element);this.range.collapse(true);},insertContent: function(fragments) {fragments.reverse(false).each((function(fragment) {this.element.insertBefore(fragment, this.element.firstChild);}).bind(this));}});Insertion.Bottom = Class.create();Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {initializeRange: function() {this.range.selectNodeContents(this.element);this.range.collapse(this.element);},insertContent: function(fragments) {fragments.each((function(fragment) {this.element.appendChild(fragment);}).bind(this));}});Insertion.After = Class.create();Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {initializeRange: function() {this.range.setStartAfter(this.element);},insertContent: function(fragments) {fragments.each((function(fragment) {this.element.parentNode.insertBefore(fragment,this.element.nextSibling);}).bind(this));}});/*--------------------------------------------------------------------------*/Element.ClassNames = Class.create();Element.ClassNames.prototype = {initialize: function(element) {this.element = $(element);},_each: function(iterator) {this.element.className.split(/\s+/).select(function(name) {return name.length > 0;})._each(iterator);},set: function(className) {this.element.className = className;},add: function(classNameToAdd) {if (this.include(classNameToAdd)) return;this.set(this.toArray().concat(classNameToAdd).join(' '));},remove: function(classNameToRemove) {if (!this.include(classNameToRemove)) return;this.set(this.select(function(className) {return className != classNameToRemove;}).join(' '));},toString: function() {return this.toArray().join(' ');}}Object.extend(Element.ClassNames.prototype, Enumerable);var Field = {clear: function() {for (var i = 0; i < arguments.length; i++)$(arguments[i]).value = '';},focus: function(element) {$(element).focus();},present: function() {for (var i = 0; i < arguments.length; i++)if ($(arguments[i]).value == '') return false;return true;},select: function(element) {$(element).select();},activate: function(element) {element = $(element);element.focus();if (element.select)element.select();}}/*--------------------------------------------------------------------------*/var Form = {serialize: function(form) {var elements = Form.getElements($(form));var queryComponents = new Array();for (var i = 0; i < elements.length; i++) {var queryComponent = Form.Element.serialize(elements[i]);if (queryComponent)queryComponents.push(queryComponent);}return queryComponents.join('&');},getElements: function(form) {form = $(form);var elements = new Array();for (tagName in Form.Element.Serializers) {var tagElements = form.getElementsByTagName(tagName);for (var j = 0; j < tagElements.length; j++)elements.push(tagElements[j]);}return elements;},getInputs: function(form, typeName, name) {form = $(form);var inputs = form.getElementsByTagName('input');if (!typeName && !name)return inputs;var matchingInputs = new Array();for (var i = 0; i < inputs.length; i++) {var input = inputs[i];if ((typeName && input.type != typeName) ||(name && input.name != name))continue;matchingInputs.push(input);}return matchingInputs;},disable: function(form) {var elements = Form.getElements(form);for (var i = 0; i < elements.length; i++) {var element = elements[i];element.blur();element.disabled = 'true';}},enable: function(form) {var elements = Form.getElements(form);for (var i = 0; i < elements.length; i++) {var element = elements[i];element.disabled = '';}},findFirstElement: function(form) {return Form.getElements(form).find(function(element) {return element.type != 'hidden' && !element.disabled &&['input', 'select', 'textarea'].include(element.tagName.toLowerCase());});},focusFirstElement: function(form) {Field.activate(Form.findFirstElement(form));},reset: function(form) {$(form).reset();}}Form.Element = {serialize: function(element) {element = $(element);var method = element.tagName.toLowerCase();var parameter = Form.Element.Serializers[method](element);if (parameter) {var key = encodeURIComponent(parameter[0]);if (key.length == 0) return;if (parameter[1].constructor != Array)parameter[1] = [parameter[1]];return parameter[1].map(function(value) {return key + '=' + encodeURIComponent(value);}).join('&');}},getValue: function(element) {element = $(element);var method = element.tagName.toLowerCase();var parameter = Form.Element.Serializers[method](element);if (parameter)return parameter[1];}}Form.Element.Serializers = {input: function(element) {switch (element.type.toLowerCase()) {case 'submit':case 'hidden':case 'password':case 'text':return Form.Element.Serializers.textarea(element);case 'checkbox':case 'radio':return Form.Element.Serializers.inputSelector(element);}return false;},inputSelector: function(element) {if (element.checked)return [element.name, element.value];},textarea: function(element) {return [element.name, element.value];},select: function(element) {return Form.Element.Serializers[element.type == 'select-one' ?'selectOne' : 'selectMany'](element);},selectOne: function(element) {var value = '', opt, index = element.selectedIndex;if (index >= 0) {opt = element.options[index];value = opt.value;if (!value && !('value' in opt))value = opt.text;}return [element.name, value];},selectMany: function(element) {var value = new Array();for (var i = 0; i < element.length; i++) {var opt = element.options[i];if (opt.selected) {var optValue = opt.value;if (!optValue && !('value' in opt))optValue = opt.text;value.push(optValue);}}return [element.name, value];}}/*--------------------------------------------------------------------------*/var $F = Form.Element.getValue;/*--------------------------------------------------------------------------*/Abstract.TimedObserver = function() {}Abstract.TimedObserver.prototype = {initialize: function(element, frequency, callback) {this.frequency = frequency;this.element   = $(element);this.callback  = callback;this.lastValue = this.getValue();this.registerCallback();},registerCallback: function() {setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);},onTimerEvent: function() {var value = this.getValue();if (this.lastValue != value) {this.callback(this.element, value);this.lastValue = value;}}}Form.Element.Observer = Class.create();Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {getValue: function() {return Form.Element.getValue(this.element);}});Form.Observer = Class.create();Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {getValue: function() {return Form.serialize(this.element);}});/*--------------------------------------------------------------------------*/Abstract.EventObserver = function() {}Abstract.EventObserver.prototype = {initialize: function(element, callback) {this.element  = $(element);this.callback = callback;this.lastValue = this.getValue();if (this.element.tagName.toLowerCase() == 'form')this.registerFormCallbacks();elsethis.registerCallback(this.element);},onElementEvent: function() {var value = this.getValue();if (this.lastValue != value) {this.callback(this.element, value);this.lastValue = value;}},registerFormCallbacks: function() {var elements = Form.getElements(this.element);for (var i = 0; i < elements.length; i++)this.registerCallback(elements[i]);},registerCallback: function(element) {if (element.type) {switch (element.type.toLowerCase()) {case 'checkbox':case 'radio':Event.observe(element, 'click', this.onElementEvent.bind(this));break;case 'password':case 'text':case 'textarea':case 'select-one':case 'select-multiple':Event.observe(element, 'change', this.onElementEvent.bind(this));break;}}}}Form.Element.EventObserver = Class.create();Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {getValue: function() {return Form.Element.getValue(this.element);}});Form.EventObserver = Class.create();Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {getValue: function() {return Form.serialize(this.element);}});if (!window.Event) {var Event = new Object();}Object.extend(Event, {KEY_BACKSPACE: 8,KEY_TAB:       9,KEY_RETURN:   13,KEY_ESC:      27,KEY_LEFT:     37,KEY_UP:       38,KEY_RIGHT:    39,KEY_DOWN:     40,KEY_DELETE:   46,element: function(event) {return event.target || event.srcElement;},isLeftClick: function(event) {return (((event.which) && (event.which == 1)) ||((event.button) && (event.button == 1)));},pointerX: function(event) {return event.pageX || (event.clientX +(document.documentElement.scrollLeft || document.body.scrollLeft));},pointerY: function(event) {return event.pageY || (event.clientY +(document.documentElement.scrollTop || document.body.scrollTop));},stop: function(event) {if (event.preventDefault) {event.preventDefault();event.stopPropagation();} else {event.returnValue = false;event.cancelBubble = true;}},findElement: function(event, tagName) {var element = Event.element(event);while (element.parentNode && (!element.tagName ||(element.tagName.toUpperCase() != tagName.toUpperCase())))element = element.parentNode;return element;},observers: false,_observeAndCache: function(element, name, observer, useCapture) {if (!this.observers) this.observers = [];if (element.addEventListener) {this.observers.push([element, name, observer, useCapture]);element.addEventListener(name, observer, useCapture);} else if (element.attachEvent) {this.observers.push([element, name, observer, useCapture]);element.attachEvent('on' + name, observer);}},unloadCache: function() {if (!Event.observers) return;for (var i = 0; i < Event.observers.length; i++) {Event.stopObserving.apply(this, Event.observers[i]);Event.observers[i][0] = null;}Event.observers = false;},observe: function(element, name, observer, useCapture) {var element = $(element);useCapture = useCapture || false;if (name == 'keypress' &&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)|| element.attachEvent))name = 'keydown';this._observeAndCache(element, name, observer, useCapture);},stopObserving: function(element, name, observer, useCapture) {var element = $(element);useCapture = useCapture || false;if (name == 'keypress' &&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)|| element.detachEvent))name = 'keydown';if (element.removeEventListener) {element.removeEventListener(name, observer, useCapture);} else if (element.detachEvent) {element.detachEvent('on' + name, observer);}}});/* prevent memory leaks in IE */Event.observe(window, 'unload', Event.unloadCache, false);var Position = {includeScrollOffsets: false,prepare: function() {this.deltaX =  window.pageXOffset|| document.documentElement.scrollLeft|| document.body.scrollLeft|| 0;this.deltaY =  window.pageYOffset|| document.documentElement.scrollTop|| document.body.scrollTop|| 0;},realOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.scrollTop  || 0;valueL += element.scrollLeft || 0;element = element.parentNode;} while (element);return [valueL, valueT];},cumulativeOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;element = element.offsetParent;} while (element);return [valueL, valueT];},positionedOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;element = element.offsetParent;if (element) {p = Element.getStyle(element, 'position');if (p == 'relative' || p == 'absolute') break;}} while (element);return [valueL, valueT];},offsetParent: function(element) {if (element.offsetParent) return element.offsetParent;if (element == document.body) return element;while ((element = element.parentNode) && element != document.body)if (Element.getStyle(element, 'position') != 'static')return element;return document.body;},within: function(element, x, y) {if (this.includeScrollOffsets)return this.withinIncludingScrolloffsets(element, x, y);this.xcomp = x;this.ycomp = y;this.offset = this.cumulativeOffset(element);return (y >= this.offset[1] &&y <  this.offset[1] + element.offsetHeight &&x >= this.offset[0] &&x <  this.offset[0] + element.offsetWidth);},withinIncludingScrolloffsets: function(element, x, y) {var offsetcache = this.realOffset(element);this.xcomp = x + offsetcache[0] - this.deltaX;this.ycomp = y + offsetcache[1] - this.deltaY;this.offset = this.cumulativeOffset(element);return (this.ycomp >= this.offset[1] &&this.ycomp <  this.offset[1] + element.offsetHeight &&this.xcomp >= this.offset[0] &&this.xcomp <  this.offset[0] + element.offsetWidth);},overlap: function(mode, element) {if (!mode) return 0;if (mode == 'vertical')return ((this.offset[1] + element.offsetHeight) - this.ycomp) /element.offsetHeight;if (mode == 'horizontal')return ((this.offset[0] + element.offsetWidth) - this.xcomp) /element.offsetWidth;},clone: function(source, target) {source = $(source);target = $(target);target.style.position = 'absolute';var offsets = this.cumulativeOffset(source);target.style.top    = offsets[1] + 'px';target.style.left   = offsets[0] + 'px';target.style.width  = source.offsetWidth + 'px';target.style.height = source.offsetHeight + 'px';},page: function(forElement) {var valueT = 0, valueL = 0;var element = forElement;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;if (element.offsetParent==document.body)if (Element.getStyle(element,'position')=='absolute') break;} while (element = element.offsetParent);element = forElement;do {valueT -= element.scrollTop  || 0;valueL -= element.scrollLeft || 0;} while (element = element.parentNode);return [valueL, valueT];},clone: function(source, target) {var options = Object.extend({setLeft:    true,setTop:     true,setWidth:   true,setHeight:  true,offsetTop:  0,offsetLeft: 0}, arguments[2] || {})source = $(source);var p = Position.page(source);target = $(target);var delta = [0, 0];var parent = null;if (Element.getStyle(target,'position') == 'absolute') {parent = Position.offsetParent(target);delta = Position.page(parent);}if (parent == document.body) {delta[0] -= document.body.offsetLeft;delta[1] -= document.body.offsetTop;}if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';if(options.setWidth)  target.style.width = source.offsetWidth + 'px';if(options.setHeight) target.style.height = source.offsetHeight + 'px';},absolutize: function(element) {element = $(element);if (element.style.position == 'absolute') return;Position.prepare();var offsets = Position.positionedOffset(element);var top     = offsets[1];var left    = offsets[0];var width   = element.clientWidth;var height  = element.clientHeight;element._originalLeft   = left - parseFloat(element.style.left  || 0);element._originalTop    = top  - parseFloat(element.style.top || 0);element._originalWidth  = element.style.width;element._originalHeight = element.style.height;element.style.position = 'absolute';element.style.top    = top + 'px';;element.style.left   = left + 'px';;element.style.width  = width + 'px';;element.style.height = height + 'px';;},relativize: function(element) {element = $(element);if (element.style.position == 'relative') return;Position.prepare();element.style.position = 'relative';var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);element.style.top    = top + 'px';element.style.left   = left + 'px';element.style.height = element._originalHeight;element.style.width  = element._originalWidth;}}if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {Position.cumulativeOffset = function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;if (element.offsetParent == document.body)if (Element.getStyle(element, 'position') == 'absolute') break;element = element.offsetParent;} while (element);return [valueL, valueT];}}</script><!-- <script type="text/javascript" language="javascript" src="/scripts/scriptaculous.js"></script> --><script type="text/javascript" language="javascript">/* ------------- element ext -------------- */  String.prototype.parseColor = function() {  var color = '#';  if(this.slice(0,4) == 'rgb(') {  var cols = this.slice(4,this.length-1).split(',');  var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  } else {  if(this.slice(0,1) == '#') {  if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  if(this.length==7) color = this.toLowerCase();  }  }  return(color.length==7 ? color : (arguments[0] || this));  }Element.collectTextNodes = function(element) {  return $A($(element).childNodes).collect( function(node) {return (node.nodeType==3 ? node.nodeValue : (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));}).flatten().join('');}Element.collectTextNodesIgnoreClass = function(element, className) {  return $A($(element).childNodes).collect( function(node) {return (node.nodeType==3 ? node.nodeValue : ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? Element.collectTextNodes(node) : ''));}).flatten().join('');}Element.setStyle = function(element, style) {element = $(element);for(k in style) element.style[k.camelize()] = style[k];}Element.setContentZoom = function(element, percent) {  Element.setStyle(element, {fontSize: (percent/100) + 'em'});   if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);  }Element.getOpacity = function(element){  var opacity;if (opacity = Element.getStyle(element, 'opacity'))  return parseFloat(opacity);  if (opacity = (Element.getStyle(element, 'filter') || '').match(/alpha\(opacity=(.*)\)/))  if(opacity[1]) return parseFloat(opacity[1]) / 100;  return 1.0;  }Element.setOpacity = function(element, value){  element= $(element);  if (value == 1){Element.setStyle(element, { opacity: (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : null });if(/MSIE/.test(navigator.userAgent))  Element.setStyle(element, {filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')});  } else {  if(value < 0.00001) value = 0;  Element.setStyle(element, {opacity: value});if(/MSIE/.test(navigator.userAgent))  Element.setStyle(element, { filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') +'alpha(opacity='+value*100+')' });  }   }  Element.getInlineOpacity = function(element){  return $(element).style.opacity || '';}  Element.childrenWithClassName = function(element, className) {  return $A($(element).getElementsByTagName('*')).select(function(c) { return Element.hasClassName(c, className) });}Array.prototype.call = function() {var args = arguments;this.each(function(f){ f.apply(this, args) });}/*--------------------------------------------------------------------------*/var Effect = {tagifyText: function(element) {var tagifyStyle = 'position:relative';if(/MSIE/.test(navigator.userAgent)) tagifyStyle += ';zoom:1';element = $(element);$A(element.childNodes).each( function(child) {if(child.nodeType==3) {child.nodeValue.toArray().each( function(character) {element.insertBefore(Builder.node('span',{style: tagifyStyle},character == ' ' ? String.fromCharCode(160) : character), child);});Element.remove(child);}});},multiple: function(element, effect) {var elements;if(((typeof element == 'object') || (typeof element == 'function')) && (element.length))elements = element;elseelements = $(element).childNodes;var options = Object.extend({speed: 0.1,delay: 0.0}, arguments[2] || {});var masterDelay = options.delay;$A(elements).each( function(element, index) {new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));});},PAIRS: {'slide':  ['SlideDown','SlideUp'],'blind':  ['BlindDown','BlindUp'],'appear': ['Appear','Fade']},toggle: function(element, effect) {element = $(element);effect = (effect || 'appear').toLowerCase();var options = Object.extend({queue: { position:'end', scope:(element.id || 'global') }}, arguments[2] || {});Effect[Element.visible(element) ? Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);}};var Effect2 = Effect; // deprecated/* ------------- transitions ------------- */Effect.Transitions = {}Effect.Transitions.linear = function(pos) {return pos;}Effect.Transitions.sinoidal = function(pos) {return (-Math.cos(pos*Math.PI)/2) + 0.5;}Effect.Transitions.reverse  = function(pos) {return 1-pos;}Effect.Transitions.flicker = function(pos) {return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;}Effect.Transitions.wobble = function(pos) {return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;}Effect.Transitions.pulse = function(pos) {return (Math.floor(pos*10) % 2 == 0 ? (pos*10-Math.floor(pos*10)) : 1-(pos*10-Math.floor(pos*10)));}Effect.Transitions.none = function(pos) {return 0;}Effect.Transitions.full = function(pos) {return 1;}/* ------------- core effects ------------- */Effect.ScopedQueue = Class.create();Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {initialize: function() {this.effects  = [];this.interval = null;},_each: function(iterator) {this.effects._each(iterator);},add: function(effect) {var timestamp = new Date().getTime();var position = (typeof effect.options.queue == 'string') ? effect.options.queue : effect.options.queue.position;switch(position) {case 'front':this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {e.startOn  += effect.finishOn;e.finishOn += effect.finishOn;});break;case 'end':timestamp = this.effects.pluck('finishOn').max() || timestamp;break;}effect.startOn  += timestamp;effect.finishOn += timestamp;this.effects.push(effect);if(!this.interval) this.interval = setInterval(this.loop.bind(this), 40);},remove: function(effect) {this.effects = this.effects.reject(function(e) { return e==effect });if(this.effects.length == 0) {clearInterval(this.interval);this.interval = null;}},loop: function() {var timePos = new Date().getTime();this.effects.invoke('loop', timePos);}});Effect.Queues = {instances: $H(),get: function(queueName) {if(typeof queueName != 'string') return queueName;if(!this.instances[queueName])this.instances[queueName] = new Effect.ScopedQueue();return this.instances[queueName];}}Effect.Queue = Effect.Queues.get('global');Effect.DefaultOptions = {transition: Effect.Transitions.sinoidal,duration:   1.0,   // secondsfps:        25.0,  // max. 25fps due to Effect.Queue implementationsync:       false, // true for combiningfrom:       0.0,to:         1.0,delay:      0.0,queue:      'parallel'}Effect.Base = function() {};Effect.Base.prototype = {position: null,start: function(options) {this.options      = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});this.currentFrame = 0;this.state        = 'idle';this.startOn      = this.options.delay*1000;this.finishOn     = this.startOn + (this.options.duration*1000);this.event('beforeStart');if(!this.options.sync)Effect.Queues.get(typeof this.options.queue == 'string' ? 'global' : this.options.queue.scope).add(this);},loop: function(timePos) {if(timePos >= this.startOn) {if(timePos >= this.finishOn) {this.render(1.0);this.cancel();this.event('beforeFinish');if(this.finish) this.finish(); this.event('afterFinish');return;  }var pos   = (timePos - this.startOn) / (this.finishOn - this.startOn);var frame = Math.round(pos * this.options.fps * this.options.duration);if(frame > this.currentFrame) {this.render(pos);this.currentFrame = frame;}}},render: function(pos) {if(this.state == 'idle') {this.state = 'running';this.event('beforeSetup');if(this.setup) this.setup();this.event('afterSetup');}if(this.state == 'running') {if(this.options.transition) pos = this.options.transition(pos);pos *= (this.options.to-this.options.from);pos += this.options.from;this.position = pos;this.event('beforeUpdate');if(this.update) this.update(pos);this.event('afterUpdate');}},cancel: function() {if(!this.options.sync)Effect.Queues.get(typeof this.options.queue == 'string' ? 'global' : this.options.queue.scope).remove(this);this.state = 'finished';},event: function(eventName) {if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);if(this.options[eventName]) this.options[eventName](this);},inspect: function() {return '#<Effect:' + $H(this).inspect() + ',options:' + $H(this.options).inspect() + '>';}}Effect.Parallel = Class.create();Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {initialize: function(effects) {this.effects = effects || [];this.start(arguments[1]);},update: function(position) {this.effects.invoke('render', position);},finish: function(position) {this.effects.each( function(effect) {effect.render(1.0);effect.cancel();effect.event('beforeFinish');if(effect.finish) effect.finish(position);effect.event('afterFinish');});}});Effect.Opacity = Class.create();Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);if(/MSIE/.test(navigator.userAgent) && (!this.element.hasLayout))Element.setStyle(this.element, {zoom: 1});var options = Object.extend({from: Element.getOpacity(this.element) || 0.0,to:   1.0}, arguments[1] || {});this.start(options);},update: function(position) {Element.setOpacity(this.element, position);}});Effect.Move = Class.create();Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);var options = Object.extend({x:    0,y:    0,mode: 'relative'}, arguments[1] || {});this.start(options);},setup: function() {Element.makePositioned(this.element);this.originalLeft = parseFloat(Element.getStyle(this.element,'left') || '0');this.originalTop  = parseFloat(Element.getStyle(this.element,'top')  || '0');if(this.options.mode == 'absolute') {this.options.x = this.options.x - this.originalLeft;this.options.y = this.options.y - this.originalTop;}},update: function(position) {Element.setStyle(this.element, {left: this.options.x  * position + this.originalLeft + 'px',top:  this.options.y  * position + this.originalTop  + 'px'});}});Effect.MoveBy = function(element, toTop, toLeft) {return new Effect.Move(element, Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));};Effect.Scale = Class.create();Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {initialize: function(element, percent) {this.element = $(element)var options = Object.extend({scaleX: true,scaleY: true,scaleContent: true,scaleFromCenter: false,scaleMode: 'box',        // 'box' or 'contents' or {} with provided valuesscaleFrom: 100.0,scaleTo:   percent}, arguments[2] || {});this.start(options);},setup: function() {this.restoreAfterFinish = this.options.restoreAfterFinish || false;this.elementPositioning = Element.getStyle(this.element,'position');this.originalStyle = {};['top','left','width','height','fontSize'].each( function(k) {this.originalStyle[k] = this.element.style[k];}.bind(this));this.originalTop  = this.element.offsetTop;this.originalLeft = this.element.offsetLeft;var fontSize = Element.getStyle(this.element,'font-size') || '100%';['em','px','%'].each( function(fontSizeType) {if(fontSize.indexOf(fontSizeType)>0) {this.fontSize     = parseFloat(fontSize);this.fontSizeType = fontSizeType;}}.bind(this));this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;this.dims = null;if(this.options.scaleMode=='box')this.dims = [this.element.offsetHeight, this.element.offsetWidth];if(/^content/.test(this.options.scaleMode))this.dims = [this.element.scrollHeight, this.element.scrollWidth];if(!this.dims)this.dims = [this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth];},update: function(position) {var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);if(this.options.scaleContent && this.fontSize)Element.setStyle(this.element, {fontSize: this.fontSize * currentScale + this.fontSizeType });this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);},finish: function(position) {if (this.restoreAfterFinish) Element.setStyle(this.element, this.originalStyle);},setDimensions: function(height, width) {var d = {};if(this.options.scaleX) d.width = width + 'px';if(this.options.scaleY) d.height = height + 'px';if(this.options.scaleFromCenter) {var topd  = (height - this.dims[0])/2;var leftd = (width  - this.dims[1])/2;if(this.elementPositioning == 'absolute') {if(this.options.scaleY) d.top = this.originalTop-topd + 'px';if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';} else {if(this.options.scaleY) d.top = -topd + 'px';if(this.options.scaleX) d.left = -leftd + 'px';}}Element.setStyle(this.element, d);}});Effect.Highlight = Class.create();Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});this.start(options);},setup: function() {if(Element.getStyle(this.element, 'display')=='none') { this.cancel(); return; }this.oldStyle = {backgroundImage: Element.getStyle(this.element, 'background-image') };Element.setStyle(this.element, {backgroundImage: 'none'});if(!this.options.endcolor)this.options.endcolor = Element.getStyle(this.element, 'background-color').parseColor('#ffffff');if(!this.options.restorecolor)this.options.restorecolor = Element.getStyle(this.element, 'background-color');this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));},update: function(position) {Element.setStyle(this.element,{backgroundColor: $R(0,2).inject('#',function(m,v,i){return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });},finish: function() {Element.setStyle(this.element, Object.extend(this.oldStyle, {backgroundColor: this.options.restorecolor}));}});Effect.ScrollTo = Class.create();Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);this.start(arguments[1] || {});},setup: function() {Position.prepare();var offsets = Position.cumulativeOffset(this.element);if(this.options.offset) offsets[1] += this.options.offset;var max = window.innerHeight ? window.height - window.innerHeight :document.body.scrollHeight - (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight);this.scrollStart = Position.deltaY;this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;},update: function(position) {Position.prepare();window.scrollTo(Position.deltaX, this.scrollStart + (position*this.delta));}});/* ------------- combination effects ------------- */Effect.Fade = function(element) {var oldOpacity = Element.getInlineOpacity(element);var options = Object.extend({from: Element.getOpacity(element) || 1.0,to:   0.0,afterFinishInternal: function(effect) { with(Element) { if(effect.options.to!=0) return;hide(effect.element);setStyle(effect.element, {opacity: oldOpacity}); }}}, arguments[1] || {});return new Effect.Opacity(element,options);}Effect.Appear = function(element) {var options = Object.extend({from: (Element.getStyle(element, 'display') == 'none' ? 0.0 : Element.getOpacity(element) || 0.0),to:   1.0,beforeSetup: function(effect) { with(Element) {setOpacity(effect.element, effect.options.from);show(effect.element); }}}, arguments[1] || {});return new Effect.Opacity(element,options);}Effect.Puff = function(element) {element = $(element);var oldStyle = { opacity: Element.getInlineOpacity(element), position: Element.getStyle(element, 'position') };return new Effect.Parallel([ new Effect.Scale(element, 200, { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], Object.extend({ duration: 1.0, beforeSetupInternal: function(effect) { with(Element) {setStyle(effect.effects[0].element, {position: 'absolute'}); }},afterFinishInternal: function(effect) { with(Element) {hide(effect.effects[0].element);setStyle(effect.effects[0].element, oldStyle); }}}, arguments[1] || {}));}Effect.BlindUp = function(element) {element = $(element);Element.makeClipping(element);return new Effect.Scale(element, 0, Object.extend({ scaleContent: false, scaleX: false, restoreAfterFinish: true,afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping].call(effect.element); }} }, arguments[1] || {}));}Effect.BlindDown = function(element) {element = $(element);var oldHeight = Element.getStyle(element, 'height');var elementDimensions = Element.getDimensions(element);return new Effect.Scale(element, 100, Object.extend({ scaleContent: false, scaleX: false,scaleFrom: 0,scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},restoreAfterFinish: true,afterSetup: function(effect) { with(Element) {makeClipping(effect.element);setStyle(effect.element, {height: '0px'});show(effect.element); }},  afterFinishInternal: function(effect) { with(Element) {undoClipping(effect.element);setStyle(effect.element, {height: oldHeight});}}}, arguments[1] || {}));}Effect.SwitchOff = function(element) {element = $(element);var oldOpacity = Element.getInlineOpacity(element);return new Effect.Appear(element, { duration: 0.4,from: 0,transition: Effect.Transitions.flicker,afterFinishInternal: function(effect) {new Effect.Scale(effect.element, 1, { duration: 0.3, scaleFromCenter: true,scaleX: false, scaleContent: false, restoreAfterFinish: true,beforeSetup: function(effect) { with(Element) {[makePositioned,makeClipping].call(effect.element);}},afterFinishInternal: function(effect) { with(Element) {[hide,undoClipping,undoPositioned].call(effect.element);setStyle(effect.element, {opacity: oldOpacity});}}})}});}Effect.DropOut = function(element) {element = $(element);var oldStyle = {top: Element.getStyle(element, 'top'),left: Element.getStyle(element, 'left'),opacity: Element.getInlineOpacity(element) };return new Effect.Parallel([ new Effect.Move(element, {x: 0, y: 100, sync: true }), new Effect.Opacity(element, { sync: true, to: 0.0 }) ],Object.extend({ duration: 0.5,beforeSetup: function(effect) { with(Element) {makePositioned(effect.effects[0].element); }},afterFinishInternal: function(effect) { with(Element) {[hide, undoPositioned].call(effect.effects[0].element);setStyle(effect.effects[0].element, oldStyle); }} }, arguments[1] || {}));}Effect.Shake = function(element) {element = $(element);var oldStyle = {top: Element.getStyle(element, 'top'),left: Element.getStyle(element, 'left') };return new Effect.Move(element, { x:  20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { with(Element) {undoPositioned(effect.element);setStyle(effect.element, oldStyle);}}}) }}) }}) }}) }}) }});}Effect.SlideDown = function(element) {element = $(element);Element.cleanWhitespace(element);var oldInnerBottom = Element.getStyle(element.firstChild, 'bottom');var elementDimensions = Element.getDimensions(element);return new Effect.Scale(element, 100, Object.extend({ scaleContent: false, scaleX: false, scaleFrom: 0,scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},restoreAfterFinish: true,afterSetup: function(effect) { with(Element) {makePositioned(effect.element);makePositioned(effect.element.firstChild);if(window.opera) setStyle(effect.element, {top: ''});makeClipping(effect.element);setStyle(effect.element, {height: '0px'});show(element); }},afterUpdateInternal: function(effect) { with(Element) {setStyle(effect.element.firstChild, {bottom:(effect.dims[0] - effect.element.clientHeight) + 'px' }); }},afterFinishInternal: function(effect) { with(Element) {undoClipping(effect.element); undoPositioned(effect.element.firstChild);undoPositioned(effect.element);setStyle(effect.element.firstChild, {bottom: oldInnerBottom}); }}}, arguments[1] || {}));}Effect.SlideUp = function(element) {element = $(element);Element.cleanWhitespace(element);var oldInnerBottom = Element.getStyle(element.firstChild, 'bottom');return new Effect.Scale(element, 0, Object.extend({ scaleContent: false, scaleX: false, scaleMode: 'box',scaleFrom: 100,restoreAfterFinish: true,beforeStartInternal: function(effect) { with(Element) {makePositioned(effect.element);makePositioned(effect.element.firstChild);if(window.opera) setStyle(effect.element, {top: ''});makeClipping(effect.element);show(element); }},  afterUpdateInternal: function(effect) { with(Element) {setStyle(effect.element.firstChild, {bottom:(effect.dims[0] - effect.element.clientHeight) + 'px' }); }},afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping].call(effect.element); undoPositioned(effect.element.firstChild);undoPositioned(effect.element);setStyle(effect.element.firstChild, {bottom: oldInnerBottom}); }}}, arguments[1] || {}));}Effect.Squish = function(element) {return new Effect.Scale(element, window.opera ? 1 : 0, { restoreAfterFinish: true,beforeSetup: function(effect) { with(Element) {makeClipping(effect.element); }},  afterFinishInternal: function(effect) { with(Element) {hide(effect.element); undoClipping(effect.element); }}});}Effect.Grow = function(element) {element = $(element);var options = Object.extend({direction: 'center',moveTransistion: Effect.Transitions.sinoidal,scaleTransition: Effect.Transitions.sinoidal,opacityTransition: Effect.Transitions.full}, arguments[1] || {});var oldStyle = {top: element.style.top,left: element.style.left,height: element.style.height,width: element.style.width,opacity: Element.getInlineOpacity(element) };var dims = Element.getDimensions(element);    var initialMoveX, initialMoveY;var moveX, moveY;switch (options.direction) {case 'top-left':initialMoveX = initialMoveY = moveX = moveY = 0; break;case 'top-right':initialMoveX = dims.width;initialMoveY = moveY = 0;moveX = -dims.width;break;case 'bottom-left':initialMoveX = moveX = 0;initialMoveY = dims.height;moveY = -dims.height;break;case 'bottom-right':initialMoveX = dims.width;initialMoveY = dims.height;moveX = -dims.width;moveY = -dims.height;break;case 'center':initialMoveX = dims.width / 2;initialMoveY = dims.height / 2;moveX = -dims.width / 2;moveY = -dims.height / 2;break;}return new Effect.Move(element, {x: initialMoveX,y: initialMoveY,duration: 0.01, beforeSetup: function(effect) { with(Element) {hide(effect.element);makeClipping(effect.element);makePositioned(effect.element);}},afterFinishInternal: function(effect) {new Effect.Parallel([ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),new Effect.Scale(effect.element, 100, {scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})], Object.extend({beforeSetup: function(effect) { with(Element) {setStyle(effect.effects[0].element, {height: '0px'});show(effect.effects[0].element); }},afterFinishInternal: function(effect) { with(Element) {[undoClipping, undoPositioned].call(effect.effects[0].element); setStyle(effect.effects[0].element, oldStyle); }}}, options))}});}Effect.Shrink = function(element) {element = $(element);var options = Object.extend({direction: 'center',moveTransistion: Effect.Transitions.sinoidal,scaleTransition: Effect.Transitions.sinoidal,opacityTransition: Effect.Transitions.none}, arguments[1] || {});var oldStyle = {top: element.style.top,left: element.style.left,height: element.style.height,width: element.style.width,opacity: Element.getInlineOpacity(element) };var dims = Element.getDimensions(element);var moveX, moveY;switch (options.direction) {case 'top-left':moveX = moveY = 0;break;case 'top-right':moveX = dims.width;moveY = 0;break;case 'bottom-left':moveX = 0;moveY = dims.height;break;case 'bottom-right':moveX = dims.width;moveY = dims.height;break;case 'center':  moveX = dims.width / 2;moveY = dims.height / 2;break;}return new Effect.Parallel([ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })], Object.extend({            beforeStartInternal: function(effect) { with(Element) {[makePositioned, makeClipping].call(effect.effects[0].element) }},afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping, undoPositioned].call(effect.effects[0].element);setStyle(effect.effects[0].element, oldStyle); }}}, options));}Effect.Pulsate = function(element) {element = $(element);var options    = arguments[1] || {};var oldOpacity = Element.getInlineOpacity(element);var transition = options.transition || Effect.Transitions.sinoidal;var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos)) };reverser.bind(transition);return new Effect.Opacity(element, Object.extend(Object.extend({  duration: 3.0, from: 0,afterFinishInternal: function(effect) { Element.setStyle(effect.element, {opacity: oldOpacity}); }}, options), {transition: reverser}));}Effect.Fold = function(element) {element = $(element);var oldStyle = {top: element.style.top,left: element.style.left,width: element.style.width,height: element.style.height };Element.makeClipping(element);return new Effect.Scale(element, 5, Object.extend({   scaleContent: false,scaleX: false,afterFinishInternal: function(effect) {new Effect.Scale(element, 1, { scaleContent: false, scaleY: false,afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping].call(effect.element); setStyle(effect.element, oldStyle);}} });}}, arguments[1] || {}));}</script><script type="text/javascript" language="javascript">addEvent(window, "load", sortables_init);var SORT_COLUMN_INDEX;function sortables_init() {if (!document.getElementsByTagName) return;tbls = document.getElementsByTagName("table");for (ti=0;ti<tbls.length;ti++) {thisTbl = tbls[ti];if (Element.hasClassName(thisTbl,'sortable') && (thisTbl.id)) {ts_makeSortable(thisTbl);}}}function ts_makeSortable(table) {if (table.rows && table.rows.length > 0) {var firstRow = table.rows[0];}if (!firstRow) return;for (var i=0;i<firstRow.cells.length;i++) {var cell = firstRow.cells[i];var txt = ts_getInnerText(cell);if(txt!="" && txt!=" " && !Element.hasClassName(cell,"nosort")){cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this);return false;">'+txt+'<span class="sortarrow"></span></a>';}}}function ts_getInnerText(el) {if (typeof el == "string") return el;if (typeof el == "undefined") { return el };if (el.innerText) return el.innerText;//Not needed but it is fastervar str = "";var cs = el.childNodes;var l = cs.length;for (var i = 0; i < l; i++) {switch (cs[i].nodeType) {case 1: //ELEMENT_NODEstr += ts_getInnerText(cs[i]);break;case 3://TEXT_NODEstr += cs[i].nodeValue;break;}}return str;}function ts_resortTable(lnk) {var span;for (var ci=0;ci<lnk.childNodes.length;ci++) {if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];}var spantext = ts_getInnerText(span);var td = lnk.parentNode;var column = td.cellIndex;var table = getParent(td,'TABLE');if (table.rows.length <= 1) return;var itm = ts_getInnerText(table.rows[1].cells[column]);sortfn = ts_sort_caseinsensitive;if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;if (itm.match(/^[$]/)) sortfn = ts_sort_currency;if (itm.match(/^[\d\.]+$/)) sortfn = ts_sort_numeric;SORT_COLUMN_INDEX = column;var firstRow = new Array();var newRows = new Array();for (i=0;i<table.rows[0].length;i++) { firstRow[i] = table.rows[0][i]; }for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows[j]; }newRows.sort(sortfn);if (span.getAttribute("sortdir") == 'down') {ARROW = '<img src="/db/images/icon_down.gif"/>';newRows.reverse();span.setAttribute('sortdir','up');} else {ARROW = '<img src="/db/images/icon_up.gif"/>';span.setAttribute('sortdir','down');}for (i=0;i<newRows.length;i++) { if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) table.tBodies[0].appendChild(newRows[i]);}for (i=0;i<newRows.length;i++) { if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows[i]);}var allspans = document.getElementsByTagName("span");for (var ci=0;ci<allspans.length;ci++) {if (allspans[ci].className == 'sortarrow') {if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?allspans[ci].innerHTML = '&nbsp;&nbsp;&nbsp;';}}}span.innerHTML = ARROW;ts_stripeTable(table);}function getParent(el, pTagName) {if (el == null) return null;else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())// Gecko bug, supposed to be uppercasereturn el;elsereturn getParent(el.parentNode, pTagName);}function ts_sort_date(a,b) {aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);if (aa.length == 10) {dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);} else {yr = aa.substr(6,2);if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }dt1 = yr+aa.substr(3,2)+aa.substr(0,2);}if (bb.length == 10) {dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);} else {yr = bb.substr(6,2);if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }dt2 = yr+bb.substr(3,2)+bb.substr(0,2);}if (dt1==dt2) return 0;if (dt1<dt2) return -1;return 1;}function ts_sort_currency(a,b) { aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');return parseFloat(aa) - parseFloat(bb);}function ts_sort_numeric(a,b) { aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));if (isNaN(aa)) aa = 0;bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX])); if (isNaN(bb)) bb = 0;return aa-bb;}function ts_sort_caseinsensitive(a,b) {aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();if (aa==bb) return 0;if (aa<bb) return -1;return 1;}function ts_sort_default(a,b) {aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);if (aa==bb) return 0;if (aa<bb) return -1;return 1;}function ts_stripeTable(tbl) {var table = $(tbl);var tbody;if(tbody = table.getElementsByTagName("tbody")[0]) {table = tbody;}for(i=0;i<table.rows.length;i++) {if(i%2) {newClass = "even";oldClass = "odd";} else {newClass = "odd";oldClass = "even";}Element.removeClassName(table.rows[i],oldClass);Element.addClassName(table.rows[i],newClass);}}function addEvent(elm, evType, fn, useCapture){if (elm.addEventListener){elm.addEventListener(evType, fn, useCapture);return true;} else if (elm.attachEvent){var r = elm.attachEvent("on"+evType, fn);return r;} else {alert("Handler could not be removed");}} </script><script type="text/javascript" language="javascript">function createStyleRule(selector, declaration) {if (!document.getElementsByTagName ||!(document.createElement || document.createElementNS)) return;var agt = navigator.userAgent.toLowerCase();var is_ie = ((agt.indexOf("msie") != -1) &&  (agt.indexOf("opera") == -1));var is_iewin = (is_ie &&  (agt.indexOf("win") != -1));var is_iemac = (is_ie &&  (agt.indexOf("mac") != -1));if (is_iemac) return; // script doesn't work properly in IE/Macvar head = document.getElementsByTagName("head")[0]; var style = (typeof document.createElementNS != "undefined") ?document.createElementNS("http://www.w3.org/1999/xhtml", "style") :document.createElement("style");if (!is_iewin) {var styleRule = document.createTextNode(selector + " {" + declaration + "}");style.appendChild(styleRule); // bugs in IE/Win}style.setAttribute("type", "text/css");style.setAttribute("media", "screen"); head.appendChild(style);if (is_iewin &&  document.styleSheets &&  document.styleSheets.length > 0) {var lastStyle = document.styleSheets[document.styleSheets.length - 1];if (typeof lastStyle.addRule == "object") {lastStyle.addRule(selector, declaration);}}}function zoomThumbnails(value) {if(!document.all) {var newValue = Math.round(value);var cssRule = "font-size: "+newValue+"px";createStyleRule("a.thumbnail pre",cssRule);}}function zoomThumbnailsUpdate(value) {var newValue = Math.round(value);var cssRule = "font-size: "+newValue+"px";createStyleRule("a.thumbnail pre",cssRule);}var myrules = {'#printqueue tr' : function(element){element.onmouseover = function(){Element.addClassName(element,"hover");},element.onmouseout = function(){Element.removeClassName(element,"hover");}},'a.deletejob' : function(element){if(document.all) {element.onclick = function(e) {return confirm("Are you sure you want to delete this job?");}}},'input.date' : function(dateField){if(!$(dateField.id+"trigger")) {if(dateField.id=="") {dateField.id = dateField.name;}Calendar.setup({inputField : dateField.id, ifFormat : "%m/%d/%y",showsTime : true,button : dateField.id, //*step : 1,weekNumbers: false,/* range: [2004,2005,2006], */showsTime: false,onUpdate: function(e) {var row = $(dateField.id).parentNode;while(row.tagName!="TR") {row = row.parentNode;}Element.removeClassName(row,"error");}});}}};function selectAll() {form = document.forms['printqueueform'];if (form.elements['entries[]'].length) {  for(var i = 0; i < form.elements['entries[]'].length; i++) {    form.elements['entries[]'][i].checked = 1;  }} else {  form.elements['entries[]'].checked = 1;}}function deselectAll() {form = document.forms['printqueueform'];if (form.elements['entries[]'].length) {  for(var i = 0; i < form.elements['entries[]'].length; i++) {    form.elements['entries[]'][i].checked = 0;  }} else {  form.elements['entries[]'].checked = 0;}}function showAdvSearch() {Effect.Fade('filter', {duration: 1.0});setTimeout("Effect.Appear('advanced_search', {duration: 1.0})", 940);$('search_link').innerHTML = 'Hide Advanced Search';$('search_link').onclick = hideAdvSearch;}function hideAdvSearch() {Effect.Fade('advanced_search', {duration: 1.0});setTimeout("Effect.Appear('filter', {duration: 1.0})", 940);$('search_link').innerHTML = 'Advanced Search';$('search_link').onclick = showAdvSearch;}Behaviour.register(myrules);</script></head><body class=""><div id="container"><!-- <div id="header"><a href="/" id="logo"><img src="/db/images/logo_bravoprint.gif" /></a><ul id="navbar"><li class="active"><a href="/dbc/SBBP.SB.LISTPEQS">Print Queue</a></li></ul></div>--><div id="maincontent"><div id="content"><!-- <h1>Print Queue</h1><div id="alerts"></div>--><div style="margin-left:12px; margin-bottom:30px;"> <div class="printDialog" id="printDialogSelected" style="display:none;left:92px;top:27px;"><div>Queue <input type="text" value="" style="width:40px;" maxlength="4" name="overridequeue"/><span class="button"><button type="submit" onclick="this.form.submit(); return false;">Print</button></span> <span class="button"><button type="button" onclick="Effect.SlideUp('printDialogSelected',{duration:0.25}); return false;">Cancel</button></span></div></div></div><form action="/dbc/SBBP.SB.LISTPEQS" method="post" id="printqueueform"><input type="hidden" value="" name="action" id="action"/><input type="hidden" value="" name="overridequeue" id="overridequeue"/><input type="hidden" value="" name="queue" id="queue"/><input type="hidden" value="" name="port" id="port"/><input type="hidden" value="" name="owner" id="owner"/><input type="hidden" value="" name="searchstring" id="searchstring"/><input type="hidden" value="" name="begindate" id="begindate"/><input type="hidden" value="" name="enddate" id="enddate"/><input type="hidden" value="" name="search_type" id="search_type"/><div style="float: left;margin: 0 0 10px 12px;"><img src="/db/images/graphic_withselected_up.gif"/> <a href="#" title="Select All" onclick="selectAll();return false;">Select All</a> |<a href="#" title="Deselect All" onclick="deselectAll();return false;">Deselect All</a> | With Selected: <span id="queueOverride">Print to Queue <input type="text" value="" name="queuet" id="queuet" style="width:40px;vertical-align:bottom;"/></span><a href="#" title="Print Selected" onclick="$('overridequeue').value=$('queuet').value;$('action').value='print';$('printqueueform').submit(); return false;"><img src="/db/images/button_print.gif"/></a><a href="#" title="Delete Selected" onclick="if(confirm('Are you sure you want to delete the selected jobs?')) { $('action').value='delete';$('printqueueform').submit(); return false;} else { return false; }"><img src="/db/images/button_delete.gif"/></a></div><table class="listing sortable" id="printqueue"><thead><tr><th style="width:20px;"></th><th>Job</th><th>Queue</th><th>User</th><th>Port</th><th>Size (k)</th><th>Datetime</th><th>Status</th><th style="width:120px;"></th></tr></thead><tbody>[QUEUE]</tbody></table><div style="margin: 0 0 0 12px;"><img src="/db/images/graphic_withselected.gif"/> <a href="#" title="Select All" onclick="selectAll();return false;">Select All</a> |<a href="#" title="Deselect All" onclick="deselectAll();return false;">Deselect All</a> | With Selected: <span id="queueOverride">Print to Queue <input type="text" value="" name="queueb" id="queueb" style="width:40px;vertical-align:bottom;"/></span><a href="#" title="Print Selected" onclick="$('overridequeue').value=$('queueb').value;$('action').value='print';$('printqueueform').submit(); return false;"><img src="/db/images/button_print.gif"/></a><a href="#" title="Delete Selected" onclick="if(confirm('Are you sure you want to delete the selected jobs?')) { $('action').value='delete';$('printqueueform').submit(); return false;} else { return false; }"><img src="/db/images/button_delete.gif"/></a><br/> </div></form></div></div></div><div id="footer"></div></body></html>                                ./mvappsvr/core/qm/APP.INSTALLER                                                                    0000644 0000000 0000000 00000023772 13674161114 015052  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   * QM VERSION OF APP.INSTALLER CLONED FROM D3 VERSION 3-3-15 TPARKER
$MODE D3
*
* Copyright (C) 2009 Sierra Bravo Corporation, All Rights Reserved
*
* Written by: Luke Bucklin, Sierra Bravo Corporation
* Date: 07/15/2009
* Description: Application installer
*
* Modified By: Dave Bucklin, Nerdery Interactive Labs
* Date: 02/04/2011
* Description: Add overwrite flag, clashes handling specific to MVDashboard
*
*QMINCLUDE DM,BP,UNIX.H FCNTL.H
*QMINCLUDE DM,BP,UNIX.H MODE.H
*
*QMCHAR BUFFER[10000]
*
INSTALL.LOG.ON = 0
INSTALL.LOG.ID = "INSTALL*":DATE():"*":TIME()
INSTALL.LOG = ""
PROCESS.STATUS = 0
OVR.FLAG = 0
*
PROMPT ""
PRINT "File path: ":
INPUT PACKAGE.FILE
IF PACKAGE.FILE = "VERSION" THEN
  PRINT
  PRINT "Installer Version"
  PRINT "1.0"
  STOP
END
*QMHANDLE = %OPEN(PACKAGE.FILE,O$RDONLY+O$BINARY)
*QM
OPENSEQ PACKAGE.FILE TO SOURCE.VAR ELSE
   CRT 'NO ':PACKAGE.FILE
   STOP
 END
*END QM
*QMIF NOT(HANDLE) THEN
IF 0 THEN; *QM
  PRINT "Unable to open file." ; STOP
END
*
PACKET = ""
LOOP
*QM  L = %READ(HANDLE,BUFFER,10000)
*QM
READBLK BUFFER FROM SOURCE.VAR, 10000 ELSE
   IF PACKET = '' THEN
      CRT 'CANT READ BUFFER'
      STOP
    END
   BUFFER=''
 END
L=LEN(BUFFER)
*END QM
WHILE L > 0 DO
  PACKET := BUFFER[1,L]
REPEAT
CLOSESEQ SOURCE.VAR ;* PJS 01-28-16: bug fix (used to be PACKAGE.FILE, but should be file variable!)
IF PACKET = "" THEN
  PRINT "No package."
  STOP
END
INSTALL.ID = TIMEDATE()
KEEP.SOURCE = "1"
*
PRINT
PRINT "Installing..."
*
OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE
*  CMD = "CREATE-FILE MV.PACKED.FILE 1 31"
  CMD = "CREATE.FILE MV.PACKED.FILE"
  GOSUB EXEC.CMD
  OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE
    ERRFILE = "MV.PACKED.FILE"
    GOSUB OPEN.ERR
    STOP
  END
END
WRITE PACKET ON F.PACKED.FILE, "PACKAGE" ON ERROR NULL
*
OPEN '','MD' TO F.MD ELSE
  ERRFILE = "MD"
  GOSUB OPEN.ERR
  STOP
END
OPEN "MV.INSTALL" TO F.INSTALL ELSE
*  CMD = "CREATE-FILE MV.INSTALL 1 11"
  CMD = "CREATE.FILE MV.INSTALL"
  GOSUB EXEC.CMD
  OPEN "MV.INSTALL" TO F.INSTALL ELSE
    ERRFILE = "MV.INSTALL"
    GOSUB OPEN.ERR
    STOP
  END
END
OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE
*  CMD = "CREATE-FILE MV.INSTALL.CF 1 11"
  CMD = "CREATE.FILE MV.INSTALL.CF"
  GOSUB EXEC.CMD
  OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE
    ERRFILE = "MV.INSTALL.CF"
    GOSUB OPEN.ERR
    STOP
  END
END
OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE
*  CMD = "CREATE-FILE MVAPPS.INSTALLED 3 31"
  CMD = "CREATE.FILE MVAPPS.INSTALLED"
  GOSUB EXEC.CMD
  OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE
    ERRFILE = "MVAPPS.INSTALLED"
    GOSUB OPEN.ERR
    STOP
  END
END
OPEN "DICT","MVDB.CLASHES" TO FD.MVDB.CLASHES ELSE
*  CMD = "CREATE-FILE DICT MVDB.CLASHES 3"
  CMD = "CREATE.FILE DICT MVDB.CLASHES"
  GOSUB EXEC.CMD
END
INSTALL.LOG.ON = 1
*
CLEARFILE F.INSTALL
DELETE F.INSTALL.CF, "MVAPPS-PRE-SCRIPT" ;* Get rid of this just in case one is left over
DELETE F.INSTALL.CF, "MVAPPS-POST-SCRIPT"
DELETE F.INSTALL.CF, "PACKAGE.INFO"
TARGET = F.INSTALL
TARGET.NAME = "MV.INSTALL"
GOSUB UNPACK
* All individual file packages are now in INSTALL
* Unpack the MD scripts
READ PACKET FROM F.INSTALL, "MV.INSTALL.CF" THEN
  TARGET = F.INSTALL.CF
  TARGET.NAME = "MV.INSTALL.CF"
  GOSUB UNPACK
  DELETE F.INSTALL, "MV.INSTALL.CF"
END
*
* Execute script that are required prior to compilation
*
READ CMD FROM F.INSTALL.CF, "MVAPPS-PRE-SCRIPT" THEN
  LOG.LINE = TIMEDATE():": Processing PRE-INSTALL commands..."
  INSTALL.LOG<-1> = LOG.LINE
  * Execute commands that need to be run before the install process begins
  GOSUB EXEC.CMD
  LOG.LINE = TIMEDATE():": Completed PRE-INSTALL commands."
  INSTALL.LOG<-1> = LOG.LINE
END
READ PACKAGE.INFO FROM F.INSTALL.CF, "PACKAGE.INFO" ELSE PACKAGE.INFO = ""
PACKAGE.ID = PACKAGE.INFO<6>
PACKAGE.INFO<4> = DATE()
PACKAGE.INFO<5> = TIME()
*
SELECT F.INSTALL
LOOP
  READNEXT PKG.ID ELSE EXIT
  IF PKG.ID # "" THEN
    READ PACKET FROM F.INSTALL, PKG.ID THEN
      TARGET.FILE = FIELD(PKG.ID," ",1)
IF TARGET.FILE[1,7] = 'BINARY:' THEN TARGET.FILE=TARGET.FILE[8,999]; **QM
      DICT.MOD = FIELD( PKG.ID," ",2)
      DATA.MOD = FIELD( PKG.ID," ",3)
      DICT = ""
      IF FIELD( PKG.ID,'_',1 ) = "DICT" THEN
        TARGET.FILE = FIELD( PKG.ID, '_', 2 )
IF TARGET.FILE[1,7] = 'BINARY:' THEN TARGET.FILE=TARGET.FILE[8,99]; *QM
        DICT = "DICT"
      END
      OPEN DICT,TARGET.FILE TO F.TARGET ELSE
        IF NOT(INDEX(TARGET.FILE,':',1)) THEN
*QM*          IF DICT.MOD = "" THEN DICT.MOD = 3
*QM*          IF DATA.MOD = "" THEN DATA.MOD = 31
*QM*          CMD = "CREATE-FILE ":TARGET.FILE:" ":DICT.MOD:" ":DATA.MOD
          CMD = 'CREATE.FILE ':TARGET.FILE
          GOSUB EXEC.CMD
        END
        OPEN DICT,TARGET.FILE TO F.TARGET ELSE
          PRINT "Unable to create file ":TARGET.FILE
          GOSUB CLEANUP
          STOP
        END
      END
      TARGET = F.TARGET
      TARGET.NAME = TRIM(DICT:" ":TARGET.FILE)
      GOSUB UNPACK
    END
  END
REPEAT
*
* Execute script required post compilation
*
READ CMD FROM F.INSTALL.CF, "MVAPPS-POST-SCRIPT" THEN
  LOG.LINE = TIMEDATE():": Processing POST-INSTALL commands..."
  INSTALL.LOG<-1> = LOG.LINE
  * Use compile options if they are present.
  OPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL THEN
    READ COMPILE.SETUP FROM F.MVDB.CONTROL, 'COMPILE.SETUP' THEN
      COMPILE.VERB = FIELD(COMPILE.SETUP<1>,' ',1)
      IF COMPILE.VERB # '' THEN
        OPTS = FIELD(COMPILE.SETUP<1>,'(',2)
        IF OPTS # '' THEN OPTS = "(":OPTS
        CMD.CNT = DCOUNT( CMD, @AM )
        FOR CMD.XX = 1 TO CMD.CNT
          IF FIELD(CMD<CMD.XX>,' ',1) = 'BASIC' OR FIELD(CMD<CMD.XX>,' ',1) = 'COMPILE' THEN
            *make sure we use the right verb and options from the compile.setup
            CMD<CMD.XX> = COMPILE.VERB:' ':CMD<CMD.XX>[INDEX(CMD<CMD.XX>,' ',1)+1,999]:' ':OPTS
          END
        NEXT CMD.XX
      END
    END
  END
  * Execute commands that need to be run at the end of the install process
  GOSUB EXEC.CMD
  LOG.LINE = TIMEDATE():": Completed POST-INSTALL commands."
  INSTALL.LOG<-1> = LOG.LINE
END
*
*QM*IF NOT(KEEP.SOURCE) THEN
*QM*  FOR X = 1 TO DCOUNT( SOURCE.FILES, @AM )
*QM*    CMD = "CLEAR-FILE DATA ":SOURCE.FILES<X>
*QM*    GOSUB EXEC.CMD
*QM*  NEXT X
*QM*END
READ INSTALL.LIST FROM F.INSTALL.CF, "LAST.INSTALL" ELSE INSTALL.LIST = ""
INSTALL.LIST = INSERT( INSTALL.LIST, 1, 0, 0, INSTALL.ID )
WRITE INSTALL.LIST ON F.INSTALL.CF, "LAST.INSTALL"
GOSUB CLEANUP
INSTALL.LOG<-1> = TIMEDATE():": Install complete."
WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID
WRITE PACKAGE.INFO ON F.MVAPPS.INSTALLED, PACKAGE.ID
PROCESS.STATUS = 1
GOSUB SEND.DATA
STOP
*********
UNPACK: *
*********
PRINT "Unpacking ":TARGET.NAME:"... ":
*
BYTES = 0
CNT = 0
LOOP
  PLENGTH = OCONV( PACKET[1,6], 'MCXD' )
  REC = PACKET[7,PLENGTH]
  PACKET = PACKET[PLENGTH+7,9999999]
  ID = REC<1>
  REC = DELETE( REC, 1, 0, 0 )
  TYP = REC[1,2]
  OVR.FLAG = REC[3,1]
  REC = REC[4,9999999]
  IF TYP = "0x" THEN
    *REC = OCONV( REC, 'MY' )
    REC = ICONV( REC, 'MX0C' )
  END ELSE IF TYP # "0c" THEN
    REC = TYP:REC
  END
  *
  CNT += 1
  BYTES += LEN(REC)
  IF OVR.FLAG THEN
    IF DICT = "" THEN
      *If we're not installing DICT items, compare for CLASHES
      READ CLASH FROM TARGET, ID THEN
        BEGIN CASE
          *Preserve dashboard user passwords
          CASE TARGET.FILE = "MVDB.USERS"
            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>
          *Preserve dashboard access profile
          CASE TARGET.FILE = "MVDB.DEFS"
            IF CLASH<5> # REC<5> THEN REC<5> = CLASH<5>
          *Preserve widget access profile
          CASE TARGET.FILE = "MVDB.WIDGETS"
            IF CLASH<2> # REC<2> THEN REC<2> = CLASH<2>
          *Preserve widget compile option
          CASE TARGET.FILE = "MVDB.CONTROL" AND ID = "COMPILE.SETUP"
            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>
        END CASE
        IF CLASH # '' AND REC # CLASH THEN
          CLASH.NAME = TARGET.NAME
          CONVERT " " TO "_" IN CLASH.NAME
          OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE
*            CMD = "CREATE-FILE DATA MVDB.CLASHES,":CLASH.NAME:" 7"
            CMD = "CREATE.FILE DATA MVDB.CLASHES,":CLASH.NAME
            GOSUB EXEC.CMD
            OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE
              PRINT "Unable to create file MVDB.CLASHES,":CLASH.NAME
              GOSUB CLEANUP
              STOP
            END
          END
          WRITE CLASH ON F.CLASHES, ID
          CLOSE F.CLASHES
        END
      END
    END
    WRITE REC ON TARGET, ID ON ERROR NULL
  END ELSE
    READ TST FROM TARGET, ID ELSE
      WRITE REC ON TARGET, ID ON ERROR NULL
    END
  END
  IF NOT(MOD(CNT,500)) THEN PRINT "*":
UNTIL PACKET = "" DO REPEAT
IF CNT # 1 THEN PLURAL = "s" ELSE PLURAL = ""
PRINT CNT:" record":PLURAL:"."
LOG.LINE = TIMEDATE():": UNPACKED ":CNT:" RECORDS TO ":TARGET.NAME
INSTALL.LOG<-1> = LOG.LINE
RETURN
**********
CLEANUP: *
**********
CLEARFILE F.INSTALL
CLEARFILE F.PACKED.FILE
RETURN
*
EXEC.CMD: *
*
CMD.CNT = DCOUNT( CMD, @AM )
FOR CMD.XX = 1 TO CMD.CNT
  THIS.CMD = CMD<CMD.XX>
*QM
CRT THIS.CMD
*QM*IF FIELD(THIS.CMD,' ',1) = 'CREATE-FILE' THEN
TEST.CMD=FIELD(THIS.CMD,' ',1); *QM
IF THIS.CMD = 'CREATE-FILE' OR THIS.CMD = 'CREATE.FILE' THEN; *QM
  CRT FIELD(THIS.CMD,' ',1)
  BINARY.POS=INDEX(THIS.CMD,'BINARY:',1)
  IF BINARY.POS THEN
     THIS.CMD=THIS.CMD[1,BINARY.POS-1]:(THIS.CMD[BINARY.POS+7,999])
   END
  LOOP
     SP.CNT=DCOUNT(THIS.CMD,' ')
      LAST.CMD=THIS.CMD
CRT FIELD(THIS.CMD,' ',SP.CNT)
      IF NUM(FIELD(THIS.CMD,' ',SP.CNT)) THEN
         POS=INDEX(THIS.CMD,' ',SP.CNT-1)
         THIS.CMD=THIS.CMD[1,POS-1]
       END
CRT THIS.CMD
   UNTIL THIS.CMD = LAST.CMD DO REPEAT
 END
*END QM
CRT THIS.CMD
  LOG.LINE = TIMEDATE():": EXEC: ":THIS.CMD
  INSTALL.LOG<-1> = LOG.LINE
  EXECUTE THIS.CMD CAPTURING JUNK
  IF INSTALL.LOG.ON THEN
    WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID
  END
NEXT CMD.XX
RETURN
*
OPEN.ERR: *
*
LOG.LINE = TIMEDATE():": FILE OPEN ERROR: ":ERRFILE
INSTALL.LOG<-1> = LOG.LINE
PRINT LOG.LINE
GOSUB SEND.DATA
RETURN
*
SEND.DATA: *
*
PRINT
IF PROCESS.STATUS = 1 THEN INSTALL.STATUS = "Success" ELSE INSTALL.STATUS = "Failed"
PRINT "Install process finished. Status: ":INSTALL.STATUS
RETURN
END
      ./mvappsvr/core/qm/MVDB.SETUP                                                                       0000644 0000000 0000000 00000000342 13674161114 014511  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PQ
HALIAS COPY
P
HCREATE.FILE WDB.BP DIRECTORY NO.QUERY
P
HCOPY FROM WDB.BP.CORE TO WDB.BP APP.INSTALLER NO.QUERY OVERWRITING
P
HBASIC WDB.BP APP.INSTALLER NO.PAGE NO.QUERY
P
HRUN WDB.BP APP.INSTALLER NO.PAGE
STON
A2
P
HOFF
P
                                                                                                                                                                                                                                                                                              ./mvappsvr/core/qm/dbdoc.html                                                                       0000666 0000000 0000000 00000006636 12534142432 015114  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <ol>
    <li id="database_required">
        <h3 class="docs_sub_item">Required Parameters</h3>
        <p>The "Required Parameters" section includes all of the parameters that must be set for the software to 
           operate correctly.
           <br><br>
           <u>QM Path</u>
              This field must contain the full operating system path to your QM executable.  Typically, this is 
              /usr/qmsys/bin/qm on Unix and Linux, or C:\QMSYS\bin\qm.exe on Windows, 
              but varies based on your installation of QM.

           <br><br>
           <u>QM Account</u>
              This field contains the database account name that is used to house your application server software.  When
              initially configuring the software, use this field to set the account name. 

           <br><br>
        </p>
    </li>
    <li id="database_optional">
        <h3 class="docs_sub_item">Optional Parameters</h3>
        <p>The "Optional Parameters" section includes options that may enhance the operation of your software but are not
           required for its operation.

           <br><br>
           <u>Working Directory</u>
              This field contains the initial working directory that is used for the software.  Typically, this can be set to
              any temporary storage directory or the installation directory of the application server software.

           <br><br>
           <u>Segment Size</u>
              This field contains the maximum length of the data string that is sent to the MultiValue database during any
              request.  The default value for this field is 3000, but it can be adjusted up or down as needed.  Typically, this
              field would be adjusted down if you are experiencing any data loss with data inside the request URI.

           <br><br>
           <u>DB Retries</u>
              This field contains the number of times that the software will attempt to connect to your MultiValue database
              before giving up and displaying an error message.  A common reason that the system would not be able to connect
              to the database would be that the system has exceeded its licensed number of user sessions.  Configuring this
              parameter to a higher number would cause the system to attempt to get a user license multiple times per connection.

              Typically, this should be set to "3" or some other integer.
        </p>
    </li>
    <li id="database_install">
        <h3 class="docs_sub_item">Install Dashboard Software</h3>
        <p>
          The "Install Dashboard Software" section of this tab is used to install or re-install the core software package to your
          MultiValue database.  This section is typically only necessary during the initial installation process, however it could
          also be used as part of an upgrade process or re-initialization of the software.

           <br><br>
           <u>Account Parent Directory</u>
              This field should be filled out to the full operating system path of the parent directory which will contain the dashboard account directory.

           <br><br>
           <u>Package Directory</u>
              This field should be filled out to include the system directory which contains the core software packages.  These
              packages were installed with your software and the correct directory will typically be already filled in.

        </p>
    </li>

</ol>
                                                                                                  ./mvappsvr/core/qm/dbconfig.html                                                                    0000644 0000000 0000000 00000010401 12572062126 015574  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <div class="database_setup">
    <form name="database_setup" id="database_setup" method="get">

        <div class="pipe">
            <input type="hidden" name="feature" value="database_setup">
            <input type="hidden" name="tab" value="database">
            <input type="hidden" name="submit_form" value="true">
            <table cellpadding="0">
                <tr>
                    <th>QM Path:</th>
                    <td><input type="text" name="dbbinary" id="dbbinary" value="[DBBINARY]"/><a href="javascript:showHelp('dbbinary_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>QM Account:</th>
                    <td><input type="text" name="dbaccount" id="dbaccount" value="[DBACCOUNT]"/><a href="javascript:showHelp('dbaccount_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
            </table>                
        </div>

        <div class="pipe">
            <h2>Optional Parameters</h2>
            <table cellpadding="0">
                <tr>
                    <th>Working Directory:</th>
                    <td><input type="text" name="dbworkingdir" id="dbworkingdir" value="[DBWORKINGDIR]"/><a href="javascript:showHelp('dbworkingdir_help', 'optional_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>Segment Size:</th>
                    <td><input type="text" name="maxrequest" id="maxrequest" value="[MAXREQUEST]"/><a href="javascript:showHelp('maxrequest_help', 'optional_help_box');" class="info">More info</a></td>
                </tr>
                 <tr>
                    <th>DB Retrys:</th>
                    <td><input type="text" name="dbfails" id="dbfails" value="[DBFAILS]"/><a href="javascript:showHelp('dbfails_help', 'optional_help_box');" class="info">More info</a></td>
                </tr>
            </table>
        </div>
        <a href="javascript:saveDB();" class="save">Save Changes</a>                
        <br>
    </form>
</div>

[DBINSTALL]

<div class="database_install">
    <br><br>
    <form name="install_dashboard" id="install_dashboard" method="get">
        <input type="hidden" name="tab" value="database">
        <input type="hidden" name="feature" value="install_dashboard">
        <input type="hidden" name="submit_form" value="true">
        <div class="pipe">
            <h2>Install Dashboard Software</h2>
            <table cellpadding="0">
                <tr>
                    <th>Account Parent Directory:</th>
                    <td><input type="text" name="dbacctpath" id="dbacctpath" value="[DBACCTPATH]"/><a href="javascript:showHelp('db_acct_path_help', 'install_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>Package Directory:</th>
                    <td><input type="text" name="db_package" id="db_package" value="[DB_PACKAGE]"/><a href="javascript:showHelp('db_package_help', 'install_help_box');" class="info">More info</a></td>
                </tr>
            </table>
        </div>
        <a href="javascript:installDB();" class="save">Install</a>
        <div class="clear"></div>
    </form>
</div>

<script>
function validateDB(form){
    if (form.dbbinary.value == "") {
        alert("Missing required field!");
        form.dbbinary.focus();
        return (false);
    }
    if (form.dbaccount.value == "") {
        alert("Missing required field!");
        form.dbaccount.focus();
        return (false);
    }
        return (true);
}
function saveDB(){
    document.database_setup.action = ""; //server side script location
    if(validateDB(document.database_setup)){
        document.database_setup.submit();
    }
}
function validateInstall(form) {
    if (form.dbacctpath.value == "") {
        alert("Missing required field!");
        form.dbacctpath.focus();
        return (false);
    }
    if (form.db_package.value == "") {
        alert("Missing required field!");
        form.db_package.focus();
        return (false);
    }
    return (true);
}
function installDB(){
    document.install_dashboard.action = ""; //server side script location
    if(validateInstall(document.install_dashboard)){
        document.install_dashboard.submit();
    }
}
</script>
                                                                                                                                                                                                                                                               ./mvappsvr/core/qm/platform.conf                                                                    0000644 0000000 0000000 00000006552 13364666755 015664  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ;#############################################################################;
; QM Platform Definitions
;#############################################################################;  

[db_platform]

; Database platform type (should be same as core subdirectory name where platform files are located)
dbType = qm


; The following tokens are replaced by configuration settings and installation options when processing
; installation commands, installation data files, required file list, and the mvconnector command line.
; Most of these correspond to a "db..." setting or option, as defined below.
; [DBBINARY], [DBACCOUNT], [DBUSERNAME], [DBPASSWORD], [DBVME], [DBWORKINGDIR], [DBAPPNAME], [DBHOSTNAME]
; [DM_USERNAME], [DM_PASSWORD], [DM_ACCT_PASS], [DBACCTPATH]
; [DB_PACKAGE] - this is the full path to the directory containing the platform core files, including this 'platform.conf' file.
; [PACKAGE_FOLDER] - exactly the same as [DB_PACKAGE] except uses forward slashes for directory separator under Windows (d3).
; [DBCMDLINE] - the command line passed to the database server. This is formed internally and varies depending on the function.
;
; Installation commands can have optional parts, enclosed in { }. Within the curly brackets, there must be one
; token enclosed in [ ]. If the token is null, the entire part enclosed in { } is removed from the command. Otherwise
; only the curly brackets are removed. This allows using a command that has an optional password (or other parameter)
; to be written like {,[DM_ACCT_PASS]} where, the leading comma will be removed if DM_ACCT_PASS is null.
;
; Database installation commands (up to 9, executed in sequence). To feed data to the database command STDIN,
; use an 'echo' command and pipe it to the database command. On Linux, use 'printf', on Windows, use 'echo'.
; The install command line must be less than 2048 characters!

; Run the qm.exe executable in the QMSYS account.
install_command1 = printf "PTERM CASE NOINVERT\rCREATE.ACCOUNT [DBACCOUNT] \"[DBACCTPATH]/[DBACCOUNT]\" NO.QUERY\rLOGTO [DBACCOUNT]\rED VOC WDB.BP.CORE MVDB.SETUP.PROC\rDE9999\rI\rF\r[DB_PACKAGE]\r@QMSYS/DIR_DICT\r\rFI\rDE9999\rI\rPQ\r(WDB.BP.CORE MVDB.SETUP\r\rFI\rMVDB.SETUP.PROC [DB_PACKAGE]/MVDB-FULL\rOFF\r" | [DBBINARY] -aQMSYS -term DUMB -quiet

; List of files/directories that must exist before installation can begin
install_files = [DBBINARY],[DB_PACKAGE]/APP.INSTALLER,[DB_PACKAGE]/MVDB.SETUP,[DB_PACKAGE]/MVDB-FULL,[DBACCTPATH]

; mvconnector command line
dbCommand = "[DBBINARY] -a[DBACCOUNT] -quiet "[DBCMDLINE]""

; mvconnector required parameters
dbRequired = dbBinary,dbAccount

; mvconnector environment variables (separate variables using commas; tokens may be used in the value for a variable)
dbEnvVars =

; Full path to database command executable
dbBinary = "/usr/qmsys/bin/qm"

; Account name where dashboard is installed
dbAccount = MVDB

; User name to log on to the dashboard account
dbUsername = 

; Password for dashboard account user
dbPassword =

; Working directory path (QM, U2, JB)
dbWorkingDir = /tmp

; Path to parent directory which will contain the dashboard account directory (QM, JB, U2)
dbAcctPath =

; Maximum length of command line sent to database
maxRequest = 1000

; Number of times to retry database requests
dbFails = 3

; Mode for passing query string (0 = command line, otherwise pipe to stdin - newline is LF=1, CR/LF=2, CR=3)
dbVarMode = 1
                                                                                                                                                      ./mvappsvr/core/d3/                                                                                 0000777 0000000 0000000 00000000000 13652367217 013045  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/core/d3/dbhelp.html                                                                      0000666 0000000 0000000 00000003343 12534142432 015160  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <div class="help_box" id="required_help_box">
    <h3>More Info</h3>
    <div id="dbbinary_help" class="help">The path to the d3 executable.</div>
    <div id="dbusername_help" class="help">The d3 User ID that logs into the dashboard account.</div>
    <div id="dbpassword_help" class="help">The password (if any) required to log in with the user ID specified above. For a new install, specify the password you wish to assign to the new dashboard user specified above.</div>
    <div id="dbvme_help" class="help">The d3 virtual machine name.</div>
    <div id="dbaccount_help" class="help">The name of the d3 account that will hold your software.</div>
</div>

<div class="help_box" id="optional_help_box">
    <h3>More Info</h3>
    <div id="dbworkingdir_help" class="help">The working directory used by the app server.</div>
    <div id="maxrequest_help" class="help">The maximum number of characters to be issued in a single D3 request.</div>
    <div id="dbfails_help" class="help">The number of times to retry on a failure to connect to D3.</div>
</div>

<div class="help_box" id="install_help_box">
    <h3>More Info</h3>
    <div id="dm_user_help" class="help">A user ID that will grant access to TCL in the DM account.</div>
    <div id="dm_pass_help" class="help">The password (if any) required to log in as the user specified above.</div>
    <div id="dm_behavior_help" class="help">This process needs to know if it will be prompted to provide the Master Dictionary name when logging in as the user specified above.</div>
    <div id="dm_acct_pass_help" class="help">If the DM account (not the user specified above) has a password, enter it here.</div>
    <div id="db_package_help" class="help">The path to the installation package files.</div>
</div>
                                                                                                                                                                                                                                                                                             ./mvappsvr/core/d3/MVDB-FULL                                                                        0000410 0000000 0000000 00005471334 13674161102 014251  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   001161RSS.BP0c00000ECSUB.TEMPLATE.SEL0c2SUBROUTINE SUB.XXX.SEL(VARS,VALS,FEED,F.FILE,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*OPEN "FILE" TO F.FILE ELSE STOP 201, "FILE"*XLINE = 'SSELECT FILE .... WITH PARAMS ...'EXECUTE XLINE CAPTURING JUNKRETURN0002EESUB.RE.SEL0c2SUBROUTINE SUB.RE.SEL(VARS,VALS,FEED,F.RUNTIME.ERRORS,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*FEED.TITLE = RSS$FEED.REC<1>LOCATE "account" IN VARS SETTING POS THEN  account = VALS<POS>  FEED.TITLE := '(Account: ':account:')'END ELSE account = ""LOCATE "user" IN VARS SETTING POS THEN  user = VALS<POS>  FEED.TITLE := '(User: ':user:')'END ELSE user = ""RSS$FEED.REC<1> = FEED.TITLE*OPEN '','RUNTIME-ERRORS' TO F.RUNTIME.ERRORS ELSE STOP 201, 'RUNTIME-ERRORS'XLINE = 'SSELECT RUNTIME-ERRORS BY-DSND DATE BY-DSND TIME'IF account # "" THEN  XLINE := ' WITH USERPIB = "[ ':account:'"'END ELSE IF user # "" THEN  XLINE := ' WITH USERPIB = "[ ':user:' ]"'ENDXLINE := " SAMPLING 100"EXECUTE XLINE CAPTURING JUNKRETURN0001F2RSS.DATA.INC0c2DIM RSS.DATA(20)*EQU RSS$TITLE       TO RSS.DATA(1)EQU RSS$LINK        TO RSS.DATA(2)EQU RSS$AUTHOR      TO RSS.DATA(3)EQU RSS$DATE        TO RSS.DATA(4)EQU RSS$TIME        TO RSS.DATA(5)EQU RSS$DESCRIPTION TO RSS.DATA(6)*EQU RSS$FEED.REC    TO RSS.DATA(14)EQU RSS$USER1       TO RSS.DATA(15)EQU RSS$USER2       TO RSS.DATA(16)EQU RSS$USER3       TO RSS.DATA(17)EQU RSS$USER4       TO RSS.DATA(18)EQU RSS$USER5       TO RSS.DATA(19)EQU RSS$USER6       TO RSS.DATA(20)0000EESUB.FEEDS.SEL0c2SUBROUTINE SUB.FEEDS.SEL(VARS,VALS,FEED,F.RSS.FEEDS,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE STOP 201, 'RSS.FEEDS'*EXECUTE 'SSELECT RSS.FEEDS # "FEEDS"' CAPTURING JUNKRETURN000196SUB.FEEDS.ITEM0c2SUBROUTINE SUB.FEEDS.ITEM(VARS,VALS,F.RSS.FEEDS,FEED.ID,FEED.REC,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*RSS$TITLE = FEED.REC<1>RSS$LINK = "RSS.MAIN?feed=":FEED.IDIF FEED.REC<2> # "" THEN  PARAMS = FEED.REC<2>  IF PARAMS[1,1] # "&" THEN PARAMS = "&":PARAMS  RSS$LINK := PARAMSENDRSS$AUTHOR = "RSS Feed"RSS$DATE = DATE()RSS$TIME = TIME()RSS$DESCRIPTION = FEED.REC<3>RETURN0007FCSUB.RE.ITEM0c2SUBROUTINE SUB.RE.ITEM(VARS,VALS,F.RUNTIME.ERRORS,ITEM.ID,RECORD,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*RSS$TITLE = ""RSS$LINK = ""RSS$AUTHOR = ""RSS$DATE = ""RSS$TIME = ""RSS$DESCRIPTION = ""*DATA RECORD<2,1>EXECUTE "PRINT-ERR DM,MESSAGES, ":RECORD<1>:" (S" CAPTURING ERR*CONVERT @AM TO " " IN ERRERR = OCONV(ERR,'MCP')ERR = TRIM(ERR)RSS$TITLE = OCONV(FIELD(ITEM.ID,'*',1),'D0/'):" @ ":OCONV(FIELD(ITEM.ID,'*',2),'MTS'):": ":RECORD<4>:" ":ERR*RSS$AUTHOR=RECORD<3>*RSS$DESCRIPTION = 'Pib /User: ':RECORD<3>:'<br />'STACK = ""FOR N = DCOUNT(RECORD<5>,@VM) TO 1 STEP -1  STACK := RECORD<5,N>  IF STACK # "" AND N # 1 THEN STACK := ' --> 'NEXT NIF RECORD<5> # '' THEN RSS$DESCRIPTION := "Stack: ":STACK:'<hr />'MD = FIELD( RECORD<3>, ' ', 3 )** Try and find the source code to include in the feed.*SREC = ""OPEN MD:",MD," TO F.MD THEN  FNAME = ""  READ CREC FROM F.MD, RECORD<4> THEN    IF CREC<1> = "VR" THEN ;* This is a catalog pointer, file name is in field 4      FNAME = FIELD(CREC<4>,' ',1)    END ELSE IF CREC<1> = "PQ" THEN      IF FIELD(CREC<2>, ' ', 1 ) = "HRUN" THEN        FNAME = FIELD( CREC<2>, ' ', 2 )      END    END  END  IF FNAME # "" THEN    OPEN MD:",":FNAME:"," TO SFILE THEN      READ SREC FROM SFILE, RECORD<4> ELSE SREC = ""    END  ENDENDIF SREC # "" THEN  CALL SWAP(SREC,'&','&amp;')  CALL SWAP(SREC,'<','&lt;')  CALL SWAP(SREC,'>','&gt;')  LINENO = RECORD<2,1>  IF LINENO MATCHES "1N0N" THEN    START.LINE = LINENO - 10    IF START.LINE < 0 THEN START.LINE = 1  END ELSE LINENO = 1 ; START.LINE = 1  END.LINE = LINENO + 10  RSS$DESCRIPTION := '<pre>'  FOR LINUM = START.LINE TO END.LINE    LINE = LINUM "R#4":" ":SREC<LINUM>    IF LINUM = LINENO THEN LINE = '</pre><b>':LINE:'</b><pre>'    RSS$DESCRIPTION := LINE:CHAR(10)  NEXT LINUM  RSS$DESCRIPTION := '</pre>'END ELSE  RSS$DESCRIPTION := 'Unable to open source code for ':RECORD<4>:' in account ':MDEND*RSS$DATE = FIELD(ITEM.ID,'*',1)RSS$TIME = FIELD(ITEM.ID,'*',2)*RETURN0000E1SUB.TEMPLATE.ITEM0c2SUBROUTINE SUB.XXX.ITEM(VARS,VALS,F.FILE,ITEM.ID,RECORD,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*RSS$TITLE = ""RSS$LINK = ""RSS$AUTHOR = ""RSS$DATE = ""RSS$TIME = ""RSS$DESCRIPTION = ""*RETURN006E51DICT_DASHBOARD.BALANCES0c0000020*CURRENT.NET.INCOME.STATS0c199900001C*LAST.UPDATE.AR0c119113113100001F*LAST.UPDATE.SALES0c119097194000003E*CURRENT.AP.STATS0c1423319241590398927280931250503169201000002ADEBUG0c1READ314223005483206198389200001C*LAST.UPDATE.AP0c119113113100001C*LAST.UPDATE.ALL0c1UPDATING000024*LAST.UPDATE.NET.INCOME0c119113113100001E**LAST.UPDATE.ALL0c1191131131006CBD*CURRENT.AR.STATS0c114560890843071741194510422787790138344612016201720182019202036015203171161151422300548320619813973235509172233548101395385164696370847879531219774039141932813118439101515435988140169672622764976385961979776243395735633981366076359266443141739321371082983421997626385139191577600893225799874558530587911002831044901802010031636438139934238540935140144850748349747242343943941742042845745147745945648141552450947752038749845516142125826659488757142751552545881502172726122803193629216560167136903585464649433786660648167835910164720249247515103226424798771241101583062896Du monde entier2927113415302442Real Computers30182549HUNGRY HOWIES PIZZA280124812761Bobs Used CyclesIntercom ProductsBetter Computing2622Drachenblut Delikatessen12922374Comp ConsultingQue DeliciaElectronic Company2891Berglunds snabbkop258914022965Cyber ProductsFrankenversandPiccolo und mehr1423290227042632212816191795288628711140102111223023Queen CozinhaFolies gourmandesOnes & Zeros Inc.17032713Computer TechVictuailles en stockMemory Capturers1416Disk Products28872953Ajax Computer Electronics166028632908Comp Products11232996TRGGaleria del gastronomoJoe's Computers2935USA ComputersGodos Cocina Tipica2449Bottom-Dollar MarketsBakers Goods255216771117Computer TipsEastern ConnectionAround the HornData Comp3002233527242758160823983028ABC Electronics CorpHanari CarnesFranchi S.p.A.29972809The Big Cheese2915Wartian HerkkuChop-suey Chinese28432969White Clover MarketsVins et alcools Chevalier2970299112062727For Computers Inc.Bills Shoes & Gopeds27592308HILARION-AbastosWellington Importadora226312513015Classic ComputersWolski Zajazd271025742827293730191920Better BytesBlauer See DelikatessenData Net15171012283029072959Software Inc130815991103168415442778288513811010110514341032GROSELLA-RestauranteBon app'300922931252Pericles Comidas clasicas2854170528032947Longo ToyotaBest Computer Company19582967Specialites du monde20472814Alfreds FutterkistePrinter Products2497Computers N More2394272210721076Logical Computers2974Save-a-lot Markets2513Net Connect2882Bits and Bytes IncComputer Sitters135113502560Die Wandernde Kuh21152554Richter Supermarkt205625312784134426241653179918292940290127331569Supremes delices2958296627083012Ottilies KaseladenWhite HouseTortuga Restaurante2607297916051219Great Lakes Food Market25682465298610782648292028671152290615861106France restauration1058151129422516254524432982Gourmet Lanchonetes294328313029Computers Inc.Systems30322456North/South2628Princesa Isabel Vinhos1214Old World DelicatessenErnst Handel2651295013723033301428942931303129621290259628952459300429441556211327573034203527032929303512651469Ricardo Adocicados102410541358121815642690303625212933290025323037B's Beverages3024280630413038141113071119212612382538136627442406304027931452118417802434Antonio Moreno Taqueria3039Consolidated Holdings148030072313304630473048141930503053305430553056141330573058304210302670Familia Arquibaldo1382255811573061306330643065306730693070Hungry Coyote Import Stor2837171730713075Data Bits300028551155129930431592292523593044Modem Products3076194330783080Wilman Kala12113051308230593083308610972782308727833088308917753077306812891171309230932095307230731057138830953096309730982571296030743099Let's Stop N Shop31001034176224051965ABC Computers3101310331043105310631073081140131083109311031112880311210993114308430851257306628562859104715413011LINO-Delicateses3091306231213122312331243125126931273126312831292941313131323102309420893137313631133006313931401287314131421415246226001540314431452694299510833146311631493150315131173118Comercio Mineiro31533154315631153157Cactus Comidas para lleva31583159139131601050311931623163316431302387Computer Fancy3166129318593167312011833138316831713170317431433176318031812994Computer Town3148317831823183318431851453102810151651LILA-Supermercado31883191319331953196300513343179319932003201320232083209313532113212321332143215285710403161316528773169137431722740293626563219322032213177322232231261Computers R Us280032253227322832303231323231893190119931923194319732333235323832391046Paris specialites32403241320432053206320732423246321032473248319831733254325732583262321632633265286532173175FISSA Fabrica Inter. Salc325332673268327232731486101332743277Vaffeljernet29733280322428223281328232833285328632293287299332343284Computer TrainersBolido Comidas preparadas3237324332443245324932902664325032511087Romero y tomillo32923293325532563259329132941060326117453264329732983260181832693270327128733302The Cracker Box3186327532763303326632263278327911823305330731333312331326893315Lehmanns Marktstand331633173296Better ConnectionNumber One in Computing331833013322329523693321332328783324332532993300330624483304332633273309332933103330333133322938331133363337334033423344334533492031Comp Data Inc.33513350335233533354332033193357335833603328335933633364336533333366336733351118336833383371334333723373249133743022337533763377337911253381338216793384338633553387Oceano Atlantico Ltda.33832729The Only Computers3391339033623392339333953396337033973398339933693400340233783403340433803385340634072105338834083389Rancho grande34123415128634173419340133942879342434251764340534271368342834293432160134353434343610743409341027743438343934403441341834431198344434453446344734143448Island Trading34133416342023373452100634263431345334333454Future In Computing33473455Sante Gourmet264410953442346234633468346934712592267734493473345028293476Disks N More3477347934803481Split Rail Beer & Ale34843485346534873489345734903467264734613459349234942817346434963499Simons bistro346635003501350434743475Future Computers21553505350634823470341135083509347227012325349135101490Lazy K Kountry Store349335143502Tradicao Hipermercados35153516351735182819351135193521349513933503352235243526352835293530Reggiani Caseifici350734223532Toms Spezialitaten352035343536353735403512115935433545348635133548Computers Etc.355635513553355435583559166735603561Maison Dewey35632502356435273525356635673568301635383539127035733574Blondel pere et fils354235233547QUICK-StopSeven Seas Imports3544357935803550355212433583358435883586358735903589297535923593258335553549359535963598359936003569357135723602360314763575237035653605360636073610357835823611358535763013361536163591359435973617361836221598360436013624362636273581Rattlesnake Canyon Grocer3629363036093608361236133634363536313636363936403641364236433644364536463647364836493650362136523619363736253655Computer Portables Inc.36583628Koniglich Essen36613662366522543666366736323675367636683677Mere Paillarde36793680368136823683368436853686368736883689369036913692369336943695369636973698365336993700370137023704363837053706370737083709371137123713371436543716371737183719372037221407365637233726372737283729365936633664373127953734373337363738373937413742374437463743366936702000367136723673367437511082367837533754375537563757375836573710371537603761376237633764376537213725376737683769372437702912Morgenstern Gesundkost377137723773Lonesome Pine RestaurantLa corne d'abondance3774373737783745374837473752378037833750378437853786378837913790111425203766379437963798Computer Warehouse3793377537491291Memory Plus Inc.37762252380138023777380437813806380737823810378738123789381338153792382136143822375938243823379537993827382838293830Computers Galore38323833383438033835380538373836383838402099380838113841288138433844381738143740La maison d'Asie38193816382038473848380938313826385430083825384938563857383938533860Laughing Bacchus Wine Cel38623864380038423846384538683869385038703852Ana Trujillo Emparedados3871387238743858Secure Computers387638753859388038833884386338863887388838893891386538923873389538963877387938973881385538823898Furia Bacalhau e Frutos dMagazzini Alimentari Riun126339003901389939043905390639073909391038943890173339133912391438673866Hungry Owl All-Night Groc3893388539163918391939033920Centro comercial Moctezum3908117327063878134839172500005847741433950510000250000500000750000436147808920015840016055016080344854231045482908400234862711531510000007488798710033505010699601006005504369963465284121400296015836400465005726351734075433519715625485577374000390050712600635027887500259745885282305506111000032540156656801788761251480008656020000006300021000206250175683225004437002521922037608900855100157993238400228490268300970025250030163594755040700577500178503200100000016060054745039354356850124225010135501030532989753200712500250000301582350000850000510001020000691933795185000279347323002300408000386003980015251019900635452182000595001500139009146382507400036817552220001283175484035118000299004818891703750120440719607400139003000001500005833299116104310414086102241465411715224824297117252317933209918242925255111472576241164055422179541311661130851522925427232511255529258654835330252424248322424541478614621722252225202723913423188992424117532255242224222423942201834552083634178147131111928954542514135165136751532093215800180191551216584204394102775228881421083386266104113473235430207012161533318622993105111235348791196732385310611094275934622814671447655351566174116714137139736301964581404714809126917194304192822193165586155124674115672090236607662383928142847252636173797135964911383564787536887636616247739550588912185269118660108197129514113553031080949191126225960171221371669457210124213903009566111905113231676249116715541122133487727775722284458159200714494057587016934017544932208525375198106034636424092452137112173296190212585275145753665037151520290563425505175242938442254159218104148429119215799342198226413231194601472962093723816710738201264317296472139285816627998871342721888228232907579102127443922457436337326136540109121122117010651184752121551318816241283881013811741515936927764639439144461348162911284511711105376202222163354007893661842861451051642087106206718149492541264444158438692172753766244129461218333215811111114517915812151921217373273151122122931146178177426413775219152912116010269127935611091639871140512407204122112121734114752034165421019281919778151371414141418232394014914994880469112272911881313131347911201037106819930109101809361012399794716901019244852248921212123225703151211502132010993514999920191264103059139556101599247391491010386543192381997291074815217243928149278740918999947718992598751416336273529341111192487942245101810104026036131351625599983314199228284010559187068935910927311416154109199493101893313198139937910027251184914718227214212060152964886103619101322513918794413229189607376569371973749803319611699239467945925012997130515010101855922153851043729310183918104118191914099910252275959101898851099375406109178772010289277959303799963999122660193199994143253203651301179799134116891088610925828538970224148184202972413994003311440181002813227109966229125613610199997599928101301251412831872718995857449688379100103353099997352181322310202117991870932139233089156241311855155149371246391895933618899318309916520443111101701657899108418912962493713517829999996631152953936912291866929101891798223925993296710106428387915374991021111107399573415174106152296992310281099917274301215611629934952436610612880360281421933232591310436412031339181820515091012154816113513969989191399109144210121117179916307596439305913251218911861595441181394213918199282013919332010109999915229915991024927201312101010109999231095679101691096702119135419999271910963883988197591097856291919109101025119191222911394791322081818999544995187936339109454210959311847999101499109279895435249813369471049999152935913691699992318910233681311311099839155101132791888749111181872693020991085219999119914491813424218919109991028151069781266010109991099117791391112259999141351435103542216711519311366951762104152431133011728149524744201427662542551184264653738455310414078948654232233014864654458588253365237374817136717784913139913235412871319423119514352831561877277682542313840741710384268917404511313865106642321415233813108951299251293726812042206546356381125017263201116288118282937141245362773182011371531060151318144236102619121754117711125162123613661155138284932562123711418614422101112131443474112310126231551722317113131851272104439678611621321411291116131117332023391251115381752151741158215512845116236481189225461818912115017126751211771311112211131262823911121111131214113126111614131133341212371411111811154211119111122412731115111171111120198101121224111131133112111139211113255412221121513101211361611101113291161413125131411131213112159213232114111311271311121212231111311123211121231121211433111111918326469112102121118111242322221111252131211411114411741131211141113111122221111216143411111141216114321124134192111381212232311132111111211131113911619122221202114312213111113211153112212112815211231122212134211201113291114311162111111113171111113142121411212431121181111211112151821131111122113521211113111188111413111134416211211112111113321112216311142112361121111114111111111011111711010211611442111112213211112111111119111111111111111111111122111111024112111132111131112111145122111121221213141412211511111111111227313111211111131116122151171111214111211111111951411612171123311221152111141112111121212121111141111232111111111111111111111111582210675557814361401043104161403542422447109163244104384824226202110190344316368592922762955125971531521649021825576973236203051753151283050207543961822248819254416341632115301573764837019951173170115574894918416223165479134631512182046216305533818746391813081633445612226251231458732151784213521699113377552917936214011019617863738213835229312432862949241813921140674755414112210831072417297147698851821365652171131401731022741504898152011332091010505836513555890896124523109412173399326364434304427601033653225599213422940403144322125222833484942942029421066211131341919818586720826361968271698013616762977155961119972692011852191199424291010999102815106978126601010999109911779139111225999914135114112492111110266311111424241332431776173742221416209234223211322636262242153521158311042116221211472231111551222121213125141341234211151212211312211114111311142304121111111142213516345211132111511111271115311423212315111153331113121112231331311311611122121233231311265252113821111212212114122616322241111131142121111111141111232111111111111111111111111Cyber ProductsSoftware IncComputer WarehouseBits and Bytes IncComputers Etc.Future In ComputingComp ProductsLogical ComputersABC ComputersComputers Inc.SystemsBetter BytesSecure ComputersOnes & Zeros Inc.Modem ProductsIntercom ProductsMemory Plus Inc.Better ConnectionNet ConnectComputer TipsMemory CapturersComp Data Inc.Future ComputersNumber One in ComputingComputers R UsJoe's ComputersComputer FancyDisk ProductsPrinter ProductsData BitsDisks N MoreFor Computers Inc.Electronic CompanyUSA ComputersData NetBest Computer CompanyThe Only ComputersData CompComputer SittersComputer Portables Inc.Alfreds FutterkisteComputers N MoreReal ComputersComputer TownClassic ComputersComputer TrainersBetter ComputingComp ConsultingComputer TechComputers GaloreAna Trujillo EmparedadosAntonio Moreno TaqueriaBerglunds snabbkopBlauer See DelikatessenBlondel pere et filsBolido Comidas preparadasBon app'Bottom-Dollar MarketsB's BeveragesCactus Comidas para llevaChop-suey ChineseComercio MineiroConsolidated HoldingsDrachenblut DelikatessenDu monde entierErnst HandelFamilia ArquibaldoFISSA Fabrica Inter. SalcFolies gourmandesFrankenversandFrance restaurationFranchi S.p.A.Galeria del gastronomoEastern ConnectionGodos Cocina TipicaGourmet LanchonetesGreat Lakes Food MarketGROSELLA-RestauranteHanari CarnesNorth/SouthAround the HornHILARION-Abastos2497Ottilies Kaseladen80892004855773368175532540152793473235000023486272305506228490220000001734075170375016080341579932143395012831751242250111000010699601045482103053210200001013550100000010000009475509084008875008551008500008364007500007488797156257126007125006996346656806354526350275885285847745775005726355474505100005000004854234840354818894437004361474335194080003935433900503350503225003016352960152525002521922500002500002062502037601606001605501584001480001214001153151006008710086560761257400065284630005504346500259741788Drachenblut DelikatessenComp ConsultingFuture In ComputingComercio MineiroIntercom ProductsIsland TradingKoniglich EssenNumber One in ComputingLa corne d'abondanceFuture ComputersLogical ComputersEastern ConnectionMemory Plus Inc.Computers Inc.SystemsMemory CapturersComputers GaloreBolido Comidas preparadasData NetBetter ConnectionFolies gourmandesLa maison d'AsieFrance restaurationComputers Etc.Godos Cocina TipicaComputer TechComputer SittersBest Computer CompanyBetter ComputingLaughing Bacchus Wine CelCyber ProductsLazy K Kountry StoreHanari CarnesAna Trujillo EmparedadosSecure ComputersLehmanns MarktstandLet's Stop N ShopBerglunds snabbkopGourmet LanchonetesLILA-SupermercadoLINO-DelicatesesGROSELLA-RestauranteDu monde entierLonesome Pine RestaurantBlondel pere et filsHungry Coyote Import StorPrinter ProductsMagazzini Alimentari RiunFuria Bacalhau e Frutos dComputer TrainersABC ComputersNet ConnectOnes & Zeros Inc.Maison DeweyMere PaillardeErnst HandelAlfreds FutterkisteElectronic CompanyComputer WarehouseMorgenstern GesundkostDisks N MoreAround the HornReal ComputersData BitsNorth/SouthFor Computers Inc.Joe's ComputersThe Only ComputersOceano Atlantico Ltda.Cactus Comidas para llevaModem ProductsFamilia ArquibaldoAntonio Moreno TaqueriaOld World DelicatessenSoftware IncClassic ComputersHILARION-AbastosBottom-Dollar MarketsFISSA Fabrica Inter. SalcComputer Town1859Computer FancyBon app'Chop-suey ChineseGaleria del gastronomoDisk ProductsFrankenversandB's BeveragesComputer TipsComputers N MoreData CompFranchi S.p.A.Bits and Bytes IncConsolidated HoldingsBlauer See DelikatessenComp Products2521USA ComputersOttilies KaseladenBetter Bytes2497Great Lakes Food Market10431041391330299272239217208188179179178152152147147147146146131130117117117116116116111102999992898686868583837658555555555454545454545342424040363434333329292929252525252525252525252524242424242424242423232220181311118776541Comercio MineiroParis specialitesDrachenblut DelikatessenThe Cracker Box257.9233.392.670.731.536.1104.351.88.810.854.230.4000257DICT_PORTAL.SALES0c0000033CLOSE.DATE.YMO0c1A0A;1(DY):1(D2-)(G-1)R1000002BCLOSE.DATE.MM0c1A1CLOSE MONTHDMR800002CCLOSE.DATE.YM0c1A0A;1(DY):1(DM)R10000028CLOSE.DATE0c1S1CLOSE DATED2-R8000022REP.NAME0c1A5Rep.NameL2500002CCLOSE.DATE.YYYY0c1A1CLOSE DATEDYR800001APIPE0c1A0 F;C|L1000045GROSS.PROFIT0c1A0gross profitMD2A;N(EXT.AMT)-N(EXT.COST)R10000019BRANCH0c1A13L15000019REGION0c1A14L15000026EXT.AMT0c1A8Ext.AmountMD2R10000025EXT.COST0c1A9Ext.CostMD2R10000018CNT0c1A0F;C1R50000E2DICT_PORTAL.AP0c0000026DATE.PAID0c1A8Date PaidD2-R8000029INV.AMOUNT0c1A6Inv.AmountMD2R13000025DUE.DATE0c1A20Due.DateD2-R8000024BALANCE0c1A50BalanceMD2R1300001APIPE0c1A0 F;C|L100015EDICT_MVDB.WIDGET.TYPES0c000001ATYPE0c1A1TYPEL15000018SWF0c1A2SWFL15000020HANDLER0c1A3HANDLERL1500001AICON0c1A4ICONL2500001ADESC0c1A6DESCL3000001710c1A1TYPEL1500001720c1A6DESCL3000001730c1A4ICONL2500001CGROUP0c1A5GROUPL15000021INACTIVE0c1A7INACTIVEL1000C72MVDB.WIDGET.TYPES0c0000043FC2DPIE0c2FC2DPIEPie2DFCPIEpie_widget_icon.jpgPIE2D Pie Chart00005CSPARKCOLUMN0c2SPARKCOLUMNSparkColumnFWSPARKspark_widget_icon.gifFWSpark Column Chart1000055VBULLET0c2VBULLETVBulletFWBULLETbullet_widget_icon.gifFWVertical Bullet Chart1000054SPARKLINE0c2SPARKLINESparkLineFWSPARKspark_widget_icon.gifFWSpark Line Chart1000057HBULLET0c2HBULLETHBulletFWBULLETbullet_widget_icon.gifFWHorizontal Bullet Chart100004AFCCOLUMN3D0c2FCCOLUMN3DColumn3DScol_widget_icon.jpgLC3D Column Chart00005DFCMSCOLUMN3D0c2FCMSCOLUMN3DMSColumn3DMcol_widget_icon.jpgLC3D Multi-Series Column Chart000039TABLE0c2TABLETABLEtable_widget_icon.jpgTable Widget000060HLINEARGAUGE0c2HLINEARGAUGEHLinearGaugeFWGAUGElinear_widget_icon.jpgFWLinear Gauge Chart1000045FUNNEL0c2FUNNELFunnelFWFPfunnel_widget_icon.gifFWFunnel Chart1000061SPARKWINLOSS0c2SPARKWINLOSSSparkWinLossFWSPARKspark_widget_icon.gifFWSpark Win/Loss Chart100005BTHERMOMETER0c2THERMOMETERThermometerFWGAUGEtherm_widget_icon.jpgFWThermometer Chart100004APYRAMID0c2PYRAMIDPyramidFWFPpyramid_widget_icon.jpgFWPyramid Chart1000060ANGULARGAUGE0c2ANGULARGAUGEAngularGaugeFWGAUGEangle_widget_icon.jpgFWAngular Gauge Chart100003AUSAMAP0c2MAPMAPmap_widget_icon.jpgMAPUSA Map Chart1000043FCAREA2D0c2FCAREA2DArea2DSarea_widget_icon.gifLC2D Area Chart000051FCMSBAR2D0c2FCMSBAR2DMSBar2DMbar_widget_icon.gifLC2D Multi-Series Bar Chart000067FCSTACKEDCOLUMN2D0c2FCSTACKEDCOLUMN2DStackedColumn2DMcol_widget_icon.jpgLC2D Stacked Column Chart000059FCDOUGHNUT2D0c2FCDOUGHNUT2DDoughnut2DFCPIEdonut_widget_icon.jpgPIE2D Doughnut Chart00003ATEXT0c2TEXTTEXTtext_widget_icon.pngPreformatted Text000052CYLINDER0c2CYLINDERCylinderFWGAUGEcylinder_widget_icon.jpgFWCylinder Chart1000054FCMSAREA2D0c2FCMSAREA2DMSAreaMarea_widget_icon.gifLC2D Multi-Series Area Chart000034HTML0c2HTMLHTMLhtml_widget_icon.pngHTML Widget00003AFCLINE0c2FCLINELineSline_widget_icon.gifLCLine Chart00004DFCMSLINE0c2FCMSLINEMSLineMline_widget_icon.gifLCMulti-Series Line Chart000043FC3DPIE0c2FC3DPIEPie3DFCPIEpie_widget_icon.jpgPIE3D Pie Chart000045VLED0c2VLEDVLEDFWGAUGEled_widget_icon.jpgFWVertical LED Gauge1000047HLED0c2HLEDHLEDFWGAUGEled_widget_icon.jpgFWHorizontal LED Gauge100004AFCCOLUMN2D0c2FCCOLUMN2DColumn2DScol_widget_icon.jpgLC2D Column Chart00003EFCBAR2D0c2FCBAR2DBar2DSbar_widget_icon.gifLC2D Bar Chart00005DFCMSCOLUMN2D0c2FCMSCOLUMN2DMSColumn2DMcol_widget_icon.jpgLC2D Multi-Series Column Chart000067FCSTACKEDCOLUMN3D0c2FCSTACKEDCOLUMN3DStackedColumn3DMcol_widget_icon.jpgLC3D Stacked Column Chart00005BFCSTACKEDBAR2D0c2FCSTACKEDBAR2DStackedBar2DMbar_widget_icon.gifLC2D Stacked Bar Chart00003CGANTT0c2GANTTGanttgantt_widget_icon.gifFWGantt Chart1000042FAILED0c2FAILEDFAILEDtext_widget_icon.pngPreformatted Text1000033MAP0c2MAPMAPmap_widget_icon.jpgMAPMap Chart100003EBULB0c2BULBBulbFWGAUGEbulb_widget_icon.jpgFWBulb Gauge1000061FCSTACKEDAREA2D0c2FCSTACKEDAREA2DStackedArea2DMarea_widget_icon.gifLC2D Staacked Area Chart00FF47WOBJ.BP0c0000B9CWOBJ.PARSEOBJECT0c2SUBROUTINE WOBJ.PARSEOBJECT(JSTR,INDEXPOS,PARSEOBJECT)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json object************************************************************************INCLUDE WOBJ.INCLUDE*IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT - STARTING"*PARSEOBJECT=""CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*IF JSTR[INDEXPOS,1] <> "{" THEN    PSERRORS<-1> = "Invalid Object at position ":INDEXPOS:" : ":JSTR[INDEXPOS,1]    RETURNEND*LEN.JSTR = LEN(JSTR)INDEXPOS+=1**JSONOBJECT(JSONOBJECT$NODECNTR)+=1NODEID=JSONOBJECT(JSONOBJECT$NODECNTR); * WE NEED TO STAY AT THIS NODEID POSITIONJSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEID>="O"; *SET AS OBJECTIF WOBJ.DEBUG THEN    PRINT "PARSEOBJECT: SETTING NODETYPE NODEID:":NODEID:" = O"END*LOOP    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    C=JSTR[INDEXPOS,1]    BEGIN CASE        CASE C="}"            INDEXPOS+=1            IF WOBJ.DEBUG > 1 THEN PRINT "PARSEOBJECT: EXIT CHAR }"            EXIT        CASE C=","            INDEXPOS+=1            CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)        CASE INDEXPOS > LEN.JSTR            PSERRORS<-1>="Missing '}': ":JSTR[LEN.JSTR-20,20]            EXIT    END CASE    *    * ADD KEY/VALUE PAIR    *    JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>+=1    PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" PARSEOBJECT CALLING PARSEKEY"    CALL WOBJ.PARSEKEY(JSTR,INDEXPOS,SKEY)    JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEID,PARTPOS>=SKEY    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" BACK FROM PARSEKEY: ":SKEY[1,10]    *    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" CALLING PARSEVALUE"    CALL WOBJ.PARSEVALUE(JSTR,INDEXPOS,PARSEVALUE)    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" BACK FROM PARSEVALUE N=":NODEID:" P=":PARTPOS:" T=":PARSEVALUE<1>:" F=":PARSEVALUE<2>    BEGIN CASE        CASE PARSEVALUE=""            PSERRORS<-1>="Invalid value syntax for node ":SKEY            RETURN        CASE PARSEVALUE<1>="A" OR PARSEVALUE<1>="O"            * ARRAY            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEID,PARTPOS>=PARSEVALUE<2>        CASE 1            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            V=PARSEVALUE<2>            IF INDEX(V,LF,1) OR INDEX(V,CR,1) THEN                V=OCONV(V,"MX0C")                E="H"            END ELSE                E="A"            END            JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEID,PARTPOS>=V            JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEID,PARTPOS>=E    END CASEREPEATPARSEOBJECT="O"PARSEOBJECT<2>=NODEIDIF WOBJ.DEBUG THEN PRINT "PARSEOBJECT - END OF ROUTINE"RETURNEND0003E3WOBJ.INCLUDE0c2************************************************************************* Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: WOBJ includes for json library************************************************************************COMMON /MVIWOBJ/ PSERRORS,JSONOBJECT(20),WOBJ.DEBUG,PRETTIFY,PRETTIFYCR,INDENT.DEPTH*EQU CR TO CHAR(13), LF TO CHAR(10), TB TO CHAR(9), BS TO CHAR(8), FF TO CHAR(12)NL = CR:LF*EQU INVALID_JSON TO 1EQU INVALID_OBJECT TO 2EQU INVALID_ARRAY TO 3EQU INVALID_BOOLEAN TO 4EQU INVALID_NULL TO 5EQU INVALID_KEY TO 6*EQU JSONOBJECT$NODECNTR TO 2* ARRAY OF NODESEQU JSONOBJECT$NODETYPE TO 3EQU JSONOBJECT$NODELENGTH TO 4EQU JSONOBJECT$NODEPARTS.KEY TO 5EQU JSONOBJECT$NODEPARTS.TYPE TO 6EQU JSONOBJECT$NODEPARTS.FLINK TO 7EQU JSONOBJECT$NODEPARTS.BLINK TO 8EQU JSONOBJECT$NODEPARTS.ENCODING TO 9EQU JSONOBJECT$NODEPARTS.VALUE TO 10* END OF ARRAY OF NODES000248WOBJ.NUMBER.TOSTRING0c2SUBROUTINE WOBJ.NUMBER.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert json number to string************************************************************************INCLUDE WOBJ.INCLUDE*CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)*CALL WOBJ.ENCODE(VALUE,OUT.VALUE)JSON:=OUT.VALUE*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=":VALUERETURNEND000797WOBJ.PARSEKEY0c2SUBROUTINE WOBJ.PARSEKEY(JSTR,INDEXPOS,PARSEKEY)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json property key************************************************************************INCLUDE WOBJ.INCLUDE*PARSEKEY=""IF WOBJ.DEBUG THEN PRINT "PARSEKEY: ENTERING ":INDEXPOS*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*LEN.JSTR = LEN(JSTR)*IFDQUOTE = 0IFSQUOTE = 0LOOPWHILE INDEXPOS > 0 AND INDEXPOS <= LEN.JSTR DO    C = JSTR[INDEXPOS,1]    IF WOBJ.DEBUG > 0 THEN PRINT "PARSEKEY: ":INDEXPOS,C,SEQ(C),PARSEKEY    BEGIN CASE        CASE C = '"'            IF NOT(IFDQUOTE) THEN IFDQUOTE=1 ELSE IFDQUOTE=0            INDEXPOS+=1            IF NOT(IFDQUOTE) THEN                CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)                IF JSTR[INDEXPOS,1] <> ":" THEN                    PSERRORS<-1>="Invalid Key at position ":INDEXPOS:" : ":PARSEKEY                    EXIT                END            END        CASE C = "'"            IF NOT(IFSQUOTE) THEN IFSQUOTE=1 ELSE IFSQUOTE=0            INDEXPOS+=1            IF NOT(IFSQUOTE) THEN                CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)                IF JSTR[INDEXPOS,1] <> ":" THEN                    PSERRORS<-1>="Invalid Key at position ":INDEXPOS:" : ":PARSEKEY                    EXIT                END            END        CASE C = ":"            INDEXPOS+=1            IF NOT(IFDQUOTE) AND NOT(IFSQUOTE) THEN                IF WOBJ.DEBUG THEN PRINT "EXITING"                EXIT            END            PARSEKEY:=C        CASE 1            IF C=LF OR C=CR OR C=TB OR C=" " THEN                NULL            END ELSE                PARSEKEY:=C            END            INDEXPOS+=1    END CASEREPEAT*IF WOBJ.DEBUG THEN PRINT "PARSEKEY: ":PARSEKEYRETURNEND00021FWOBJ.SKIPCHAR0c2SUBROUTINE WOBJ.SKIPCHAR(JSTR,INDEXPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: skip all whitespace************************************************************************INCLUDE WOBJ.INCLUDE*WS = " ()":TB:CR:LF:@AMLEN.JSTR=LEN(JSTR)LOOP WHILE INDEXPOS <= LEN.JSTR DO    IF INDEX(WS,JSTR[INDEXPOS,1],1) = 0 THEN EXIT    INDEXPOS += 1REPEATRETURNEND00030EWOBJ.PARSENULL0c2SUBROUTINE WOBJ.PARSENULL(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json null keyword************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""SAVE.INDEXPOS=INDEXPOS*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)IF OCONV(JSTR[INDEXPOS,4],"MCL") = "null" THEN    INDEXPOS+=4    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    C=JSTR[INDEXPOS,1]    IF INDEX(",]}",C,1)=0 THEN        * invalid terminator - not null    END ELSE        PARSESTRING="null"        RETURN    ENDENDPARSESTRING=""INDEXPOS=SAVE.INDEXPOSRETURNEND000741WOBJ.ARRAY.TOSTRING0c2SUBROUTINE WOBJ.ARRAY.TOSTRING(JSON,POS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert json array to string************************************************************************INCLUDE WOBJ.INCLUDE*JSON:="["; * START OUR STRINGINDENT.DEPTH+=1*IF PRETTIFY THEN JSON:=NLNUMBER.PARTS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,POS>IF WOBJ.DEBUG THEN PRINT "ARRAY.TOSTRING: POS=":POS:" NUMBER.PARTS=":NUMBER.PARTSFOR P=1 TO NUMBER.PARTS    PART.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,POS,P>    IF WOBJ.DEBUG THEN PRINT "ARRAY.TOSTRING: POS=":POS:" P=":P:" T=":PART.TYPE    IF PRETTIFY AND P=1 THEN JSON:=NL    CALL WOBJ.PRETTIFY.INDENT(JSON,POS)    BEGIN CASE        CASE PART.TYPE="S"            CALL WOBJ.STRING.TOSTRING(JSON,POS,P)        CASE PART.TYPE="B"            CALL WOBJ.BOOLEAN.TOSTRING(JSON,POS,P)        CASE PART.TYPE="D"            CALL WOBJ.NUMBER.TOSTRING(JSON,POS,P)        CASE PART.TYPE="N"            CALL WOBJ.NULL.TOSTRING(JSON,POS,P)        CASE PART.TYPE="O"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "OBJ FLINK=":PART.FLINK            CALL WOBJ.OBJECT.TOSTRING(JSON,PART.FLINK)        CASE PART.TYPE="A"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "FL=":PART.FLINK            CALL WOBJ.ARRAY.TOSTRING(JSON,PART.FLINK)    END CASE    IF P <> NUMBER.PARTS THEN        JSON:=", "        IF PRETTIFY THEN JSON:=NL    ENDNEXT P*IF PRETTIFY AND NUMBER.PARTS THEN    JSON:=NL    CALL WOBJ.PRETTIFY.INDENT(JSON,POS)ENDJSON:="]"*IF PRETTIFY THEN JSON:=NLINDENT.DEPTH-=1RETURNEND00066CWOBJ.ENCODE0c2SUBROUTINE WOBJ.ENCODE(IN.STR,OUT.STR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: encode json string*************************************************************************** THIS PROGRAM WILL CONVERT ALL BAD CHARACTERS TO AN ESCAPED CHARACTER***INCLUDE WOBJ.INCLUDE**OPEN 'RESULT.FILE' TO RFILE ELSE STOP* WE NEED TO ENCODE* " = \"   (34)* \ = \\    (92)* / = \/* CHAR(7) = \b* CHAR(13) = \r* char(10) = \n* char(12) = \f* char(9)  = \tOUT.STR=''L=LEN(IN.STR)CONVERT @AM TO LF IN IN.STR; * LETS SWITCH 254 TO LF BE DEFAULTFOR X=1 TO L    C=IN.STR[X,1]    SEQ.C=SEQ(C)    ENCODE=0    *IF SEQ.C < 32 THEN ENCODE=1; * BELOW SPACE    *IF SEQ.C > 32 AND SEQ.C < 48 THEN ENCODE=1; * LETS ENCODE ALL OF THIS !@$%^&*()    IF SEQ.C=34 THEN ENCODE=1    IF SEQ.C=92 THEN ENCODE=1    * IF SEQ.C=47 THEN ENCODE=1    *IF SEQ.C > 126 THEN ENCODE = 1; * LETS ENCODE ALL THE HIGH ENTRIES    *IF SEQ.C >= 91 AND SEQ.C <= 96 THEN ENCODE=1    IF ENCODE THEN        BEGIN CASE            CASE SEQ.C=7; OUT.STR='\b'            CASE C='\'; OUT.STR:='\\'                *CASE C='/'; OUT.STR:='\/'            CASE C='"'; OUT.STR:='\"'            CASE SEQ.C=10                OUT.STR:='\n'                IF PRETTIFYCR THEN OUT.STR:=NL            CASE SEQ.C=13; OUT.STR:='\r'            CASE SEQ.C=12; OUT.STR:='\f'            CASE 1; OUT.STR:='\u00':OCONV(C,'MX0C')        END CASE    END ELSE        OUT.STR=OUT.STR:C    ENDNEXT XRETURNEND0003B5WOBJ.PARSEBOOLEAN0c2SUBROUTINE WOBJ.PARSEBOOLEAN(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json boolean value************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)SAVE.INDEXPOS=INDEXPOSBEGIN CASE    CASE OCONV(JSTR[INDEXPOS,4],"MCL") = "true"        PARSESTRING="true"        INDEXPOS+=4    CASE OCONV(JSTR[INDEXPOS,5],"MCL") = "false"        PARSESTRING="false"        INDEXPOS+=5    CASE 1        * not boolean        INDEXPOS=SAVE.INDEXPOS        RETURNEND CASECALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)C=JSTR[INDEXPOS,1]IF INDEX(",]}",C,1)=0 THEN    * invalid terminator - not boolean    PARSESTRING=""    INDEXPOS=SAVE.INDEXPOSENDRETURNEND001224WOBJ.FINDNODE0c2SUBROUTINE WOBJ.FINDNODE(INNODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: find a json node in parsed object structure************************************************************************INCLUDE WOBJ.INCLUDE** NEED TO BREAK OUR NODE REQUEST UP INTO IT'S SEPERATE PARTS*RERR=""LASTNODE=""*OBJECT.SEPERATOR = "."NODES=INNODECONVERT OBJECT.SEPERATOR TO @AM IN NODES*NODEPOS=1; * WE ALWAYS START WITH THE FIRST ONE.PARTPOS=0; * START AS ZERO 6/19/2017 - PAPCHILDPOS=0;* SET WHEN OUR NODE IS AN OBJECT OR ARRAYPARTTYPE=""*NUMBER.NODES=DCOUNT(NODES,@AM)IF INDEX(NODES,"[",1) THEN* We need to trick this into seeing an array as another node level    ORIG.NODES=NODES    NODES=""    FOR A=1 TO NUMBER.NODES        NODE=ORIG.NODES<A>        IF INDEX(NODE,"[",1) THEN            NUMBER.ARRAYS = COUNT(NODE,"[")            ACTUAL.NODE=FIELD(NODE,"[",1)            NODES<-1>=ACTUAL.NODE            FOR B=1 TO NUMBER.ARRAYS                K=INDEX(NODE,"]",B)                NODES<-1>=NODE[1,K]            NEXT B        END ELSE            NODES<-1>=NODE        END    NEXT AENDNUMBER.NODES=DCOUNT(NODES,@AM)IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: number of parts in ":INNODE:": ":NUMBER.NODESFOR A=1 TO NUMBER.NODES    NODE=NODES<A>    LASTNODE=NODE    NODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEPOS>    IF WOBJ.DEBUG THEN PRINT "  part ":A:" key=":NODE:" pos=":NODEPOS:" type=":NODETYPE    BEGIN CASE        CASE NODETYPE="O"            JUSTNODE=FIELD(NODE,"[",1)            IF WOBJ.DEBUG THEN                PRINT "    locating ":JUSTNODE                PRINT "          in ":JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>                NUM.SUBS=DCOUNT(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>,CHAR(252))                PRINT 'NUM.SUBS=':NUM.SUBS            END            LOCATE JUSTNODE IN JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS> SETTING PARTPOS ELSE PARTPOS=0            IF NOT(PARTPOS) THEN                TEMP.NODE=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>                LOCATE JUSTNODE IN TEMP.NODE<1,1> SETTING PARTPOS ELSE PARTPOS=0                IF WOBJ.DEBUG THEN                    PRINT 'TEMP.NODE=':TEMP.NODE                    PRINT 'JUSTNODE=':JUSTNODE                    PRINT 'PARTPOS=':PARTPOS                END            END        CASE NODETYPE="A"            NUMBER.ARRAYS=COUNT(NODE,"[")            ST=INDEX(NODE,"[",NUMBER.ARRAYS)            EN=INDEX(NODE,"]",NUMBER.ARRAYS)            IF ST>1 AND EN>ST THEN                PARTPOS=NODE[ST+1,EN-ST-1]            END ELSE                PARTPOS=''            END            IF NOT((PARTPOS MATCHES '1N0N') OR (PARTPOS = '-1')) THEN                RERR=2                RERR<2>="Numeric subscript required for array element"                IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: ":RERR<2>                RETURN            END            IF PARTPOS<0 THEN PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> ;* ALLOW -1, SINCE WOBJ.SET USES THAT TO CREATE NEXT ELEMENT            PARTPOS += 1            IF PARTPOS > JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> THEN                IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: PARTPOS=":PARTPOS:" LEN=":JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>:" NODEPOS=":NODEPOS                PARTPOS=0            END    END CASE    IF NOT(PARTPOS) THEN        RERR=1        RERR<2>="Node ":NODE:" not found at level ":NODEPOS        IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: ":RERR<2>        RETURN    END    PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    IF (PARTTYPE="A" OR PARTTYPE="O") THEN        IF A=NUMBER.NODES THEN* RETURN CHILD OBJECT NODE POSITION            CHILDPOS=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>        END ELSE* FOLLOW FORWARD LINK TO CHILD NODE            NODEPOS=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>        END    END ELSE        IF A<>NUMBER.NODES THEN            RERR=1            RERR<2>="Node ":NODE:" not found at level ":NODEPOS            IF WOBJ.DEBUG THEN                PRINT "WOBJ.FINDNODE: ":RERR<2>                PRINT "    Node type ":PARTTYPE:" cannot have properties or array elements"            END            RETURN        END    ENDNEXT AIF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: nodepos=":NODEPOS:" partpos=":PARTPOS:" type=":PARTTYPE:" childpos=":CHILDPOSRETURNEND001968WOBJ.SET0c2SUBROUTINE WOBJ.SET(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: set json node to value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: allow Object and Array properties to be set, passing*   a JSON string representation of the node.************************************************************************INCLUDE WOBJ.INCLUDE*IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: NODE=":NODE:" ACTION=":ACTION*SACTION=FIELD(ACTION,".",2)IF NODE="" THEN    IF SACTION <> "OBJECT" THEN            RERR=1        RERR<2>="Node cannot be null"    END ELSE        CALL WOBJ.PARSE(VALUE,NEWOBJ)        IF PSERRORS#"" THEN            RERR=2            RERR<2> = PSERRORS            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET.OBJECT: parse failure: ":RERR<2>        END    END            RETURNEND*CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" LASTNODE=":LASTNODE:" RERROR=":RERR<2>*IF NOT(NODEPOS) THEN    RERR=1    RERR<2>="Node not found"    RETURNEND** CHECK THE NODE WE ARE SETTING PROPERTY TONODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEPOS>IF NODETYPE#"O" AND NODETYPE#"A" THEN    RERR=1    RERR<2>="Parent node must be an object or array"    RETURNEND*IGNORE.RERR=""IF NODETYPE="O" THEN PARTKEY=LASTNODE ELSE PARTKEY=""*IF NOT(PARTPOS) THEN* ENSURE PARENT NODE EXISTS    NUM.PARTS=DCOUNT(NODE,".")    FINAL.NODE=FIELD(NODE,".",NUM.PARTS)    IF INDEX(FINAL.NODE,"[",1) THEN        NUMBER.ARRAYS=COUNT(FINAL.NODE,"[")        PARENT.NODE=NODE[1,LEN(NODE)-LEN(FINAL.NODE)+INDEX(FINAL.NODE,"[",NUMBER.ARRAYS)-1]    END ELSE        NUMBER.ARRAYS=0        PARENT.NODE=NODE[1,LEN(NODE)-LEN(FINAL.NODE)-1]    END    IF NUM.PARTS > 1 OR NUMBER.ARRAYS > 0 THEN        CALL WOBJ.FINDNODE(PARENT.NODE,PARENT.NODEPOS,PARENT.PARTPOS,PARENT.CHILDPOS,PARENT.LASTNODE,"")        IF NOT(PARENT.PARTPOS) THEN            RERR=1            RERR<2>="Parent node not found"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END    END** WE NEED TO ADD A NEW ELEMENT    IF NODETYPE="O" THEN        PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>        PARTPOS += 1        JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>=PARTPOS        CALL WOBJ.SET.PART(NODEPOS,PARTPOS,"N",PARTKEY,"",IGNORE.RERR) ; * DUMMY NULL ELEMENT WILL BE REPLACED IN FINAL WOBJ.SET.PART CALL    END ELSE        NUMBER.ARRAYS=COUNT(LASTNODE,"[")        ST=INDEX(LASTNODE,"[",NUMBER.ARRAYS)        EN=INDEX(LASTNODE,"]",NUMBER.ARRAYS)        IF ST>1 AND EN>ST THEN            PARTPOS=LASTNODE[ST+1,EN-ST-1]        END ELSE            PARTPOS=''        END        IF NOT((PARTPOS MATCHES '1N0N') OR (PARTPOS = '-1')) THEN            RERR=2            RERR<2>="Numeric subscript required for setting array element"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END        IF PARTPOS<0 THEN            PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>+1        END ELSE            PARTPOS += 1 ; * ZERO-BASED ARRAY INDEX -> 1 BASED PARTPOS        END        LASTPARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>+1        FOR P=LASTPARTPOS TO PARTPOS            CALL WOBJ.SET.PART(NODEPOS,P,"N",PARTKEY,"",IGNORE.RERR)        NEXT P        IF PARTPOS>JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> THEN            JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>=PARTPOS        END    ENDEND*PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: PARTTYPE=":PARTTYPE*IF PARTTYPE="O" OR PARTTYPE="A" THEN** DELETE NESTED NODE BEFORE SETTING NEW VALUE    IF NODETYPE="A" THEN** ARRAYS ARE SPECIAL, BECAUSE WE DO NOT WANT TO DELETE THE ARRAY POSITION* THAT WE ARE SETTING, WHICH WILL SLIDE THE ARRAY DOWN BY ONE. INSTEAD,* INSERT A NULL ELEMENT AFTER THE ONE WE NEED TO DELETE, THEN AFTER* DELETING, WE CAN SIMPLY REPLACE THE NULL NODE.*        JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,NODEPOS,PARTPOS+1,"N")        JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> += 1    END*    CALL WOBJ.DELETE("DELETE",NODE,"",IGNORE.RERR)* BECAUSE DELETING MAY ALTER JSONOBJECT STRUCTURE, REFRESH NODEPOS & PARTPOS    CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,IGNORE.RERR)    IF NODETYPE="O" THEN        IF PARTPOS=0 THEN            PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>            PARTPOS += 1            JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>=PARTPOS            CALL WOBJ.SET.PART(NODEPOS,PARTPOS,"N",PARTKEY,"",IGNORE.RERR)        END ELSE            RERR=2            RERR<2>="While setting node ":NODE:", existing object was deleted, yet it is still here!"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END    END ELSE        IF PARTPOS=0 THEN            RERR=2            RERR<2>="While setting node ":NODE:", existing array element was deleted, but dummy element is missing!"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END    ENDEND** NOW WE ARE SAFE TO SET NEW VALUEBEGIN CASE    CASE SACTION="ARRAY" OR SACTION="OBJECT"        PARTTYPE=SACTION[1,1]    CASE SACTION="NULL"        PARTTYPE="N"    CASE SACTION="NUMBER"        PARTTYPE="D"    CASE SACTION="BOOLEAN"        PARTTYPE="B"    CASE SACTION="STRING" OR SACTION=""        PARTTYPE="S"    CASE 1        RERR=1        RERR<2>="Unknown value type ":SACTION:", assume STRING"        PARTTYPE="S"END CASECALL WOBJ.SET.PART(NODEPOS,PARTPOS,PARTTYPE,PARTKEY,VALUE,RERR)RETURNEND000E1FWOBJ.SET.PART0c2SUBROUTINE WOBJ.SET.PART(NODEPOS,PARTPOS,PARTTYPE,PARTKEY,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: set json part value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: allow Object and Array properties to be set, passing*   a JSON string representation of the node.************************************************************************INCLUDE WOBJ.INCLUDE*ENCODING=""FLINK=""* VALIDATE THE VALUE DATABEGIN CASE    CASE PARTTYPE="O" OR PARTTYPE="A"        OUT.VALUE=""    CASE PARTTYPE="N"        OUT.VALUE=""        IF VALUE#"" THEN            RERR=1            RERR<2>="Value ignored for NULL property"        END    CASE PARTTYPE="D"        OUT.VALUE=VALUE        IF VALUE="" THEN            OUT.VALUE=0        END ELSE            IF NOT(NUM(VALUE)) THEN                RERR=1                RERR<2>="Non-numeric value for NUMBER property; zero used"                OUT.VALUE=0            END        END    CASE PARTTYPE="B"        OUT.VALUE=OCONV(VALUE,"MCL")        IF OUT.VALUE#"true" AND OUT.VALUE#"false" THEN            RERR=1            RERR<2>="Invalid boolean value: must be true or false; false used"            OUT.VALUE="false"        END            CASE 1        ENCODING="H"        BEGIN CASE            CASE INDEX(VALUE,@AM,1)            CASE INDEX(VALUE,@VM,1)            CASE INDEX(VALUE,@SVM,1)            CASE INDEX(VALUE,LF,1)            CASE INDEX(VALUE,CR,1)            CASE 1                ENCODING="A"                OUT.VALUE=VALUE        END CASE        IF ENCODING="H" THEN OUT.VALUE=OCONV(VALUE,"MX0C")END CASE*IF PARTTYPE="O" OR PARTTYPE="A" THEN* SET UP THE NEW OBJECT    FLINK=JSONOBJECT(JSONOBJECT$NODECNTR)+1    IF VALUE="" THEN        JSONOBJECT(JSONOBJECT$NODECNTR)=FLINK ; * UPDATE NODE COUNT FOR NULL OBJECT    END ELSE* PARSE OBJECT OR ARRAY                MATBUILD SAVEJSONOBJECT FROM JSONOBJECT ; * SAVE CURRENT OBJECT IN CASE OF PARSE FAILURE        INDEXPOS=1        IF PARTTYPE="O" THEN            CALL WOBJ.PARSEOBJECT(VALUE,INDEXPOS,PARSERESULT)        END ELSE            CALL WOBJ.PARSEARRAY(VALUE,INDEXPOS,PARSERESULT)        END        IF PARSERESULT="" THEN            RERR=2            IF PARTTYPE="O" THEN                RERR<2>="Object parse failure"            END ELSE                RERR<2>="Array parse failure"            END        END ELSE* MAKE SURE WE CONSUMED ENTIRE JSTR            CALL WOBJ.SKIPCHAR(VALUE,INDEXPOS)            IF INDEXPOS <= LEN(VALUE) THEN                RERR=2                RERR<2>="Extra data (":(LEN(VALUE)-INDEXPOS+1):" characters) after final close brace ignored"            END                    END        IF RERR<1> >= 2 THEN* OBJECT OR ARRAY PARSE ERROR            MATPARSE JSONOBJECT FROM SAVEJSONOBJECT            PARTTYPE="N"            FLINK=""        END    ENDEND* SET THE PART PROPERTIESJSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>        =    PARTTYPEJSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS,PARTPOS>         =    PARTKEYJSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEPOS,PARTPOS>       =    OUT.VALUEJSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEPOS,PARTPOS>    =    ENCODINGJSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>       =    FLINKIF WOBJ.DEBUG THEN PRINT "WOBJ.SET.PART: T=":PARTTYPE:" K=":PARTKEY:" E=":ENCODING:" OUT.VALUE=":OUT.VALUE*RETURNEND001A13WOBJ.DELETE0c2SUBROUTINE WOBJ.DELETE(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: delete a json node in parsed object structure************************************************************************INCLUDE WOBJ.INCLUDE*VALUE=""DONE=0LOOP    CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)    IF WOBJ.DEBUG THEN PRINT "WOBJ.DELETE: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" RERROR=":RERR<2>    IF NOT(NODEPOS) OR NOT(PARTPOS) THEN        RERR=1        RERR<2>="Node not found"        RETURN    END        NODETYPE = JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE NODETYPE = 'O' AND CHILDPOS > 0* DELETE NESTED OBJECTS BEFORE DELETING PARENT NODE            NEST.COUNT = 0            NUM.PARTS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,CHILDPOS>            FOR I=1 TO NUM.PARTS                PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,CHILDPOS,I>                IF PARTTYPE = 'O' OR PARTTYPE = 'A' THEN                    PARTKEY=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,CHILDPOS,I>                    CALL WOBJ.DELETE(ACTION,NODE:".":PARTKEY,VALUE,RERR)                    NEST.COUNT += 1                    EXIT ;* AFTER MODIFYING THE JSONOBJECT STRUCTURE, NEED TO CALL FINDNODE AGAIN                END            NEXT I            IF NEST.COUNT = 0 THEN* DELETE OBJECT NODE                JSONOBJECT(JSONOBJECT$NODETYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODETYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODELENGTH)=DELETE(JSONOBJECT(JSONOBJECT$NODELENGTH),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODECNTR) -= 1* ADJUST LINKS TO ACCOUNT FOR DELETED NODE                NUM.NODES = JSONOBJECT(JSONOBJECT$NODECNTR)                FOR I = 1 TO NUM.NODES                    NUM.PARTS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,I>                    FOR J = 1 TO NUM.PARTS                        FLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J>                        IF FLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J> = FLINK - 1                        END                        BLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J>                        IF BLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J> = BLINK - 1                        END                    NEXT J                NEXT I                DONE = 1            END        CASE NODETYPE = 'A' AND CHILDPOS > 0* DELETE NESTED OBJECTS BEFORE DELETING PARENT NODE            NEST.COUNT = 0            NUM.ELEMS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,CHILDPOS>            FOR I = 1 TO NUM.ELEMS                PARTTYPE = JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,CHILDPOS,I>                IF PARTTYPE = 'O' OR PARTTYPE = 'A' THEN* DELETE NESTED OBJECTS BEFORE DELETING PARENT NODE                    CALL WOBJ.DELETE(ACTION,NODE:"[":(I-1):"]",VALUE,RERR)                    NEST.COUNT += 1                    EXIT ;* AFTER MODIFYING THE JSONOBJECT STRUCTURE, NEED TO CALL FINDNODE AGAIN                END            NEXT I* AFTER MODIFYING THE JSONOBJECT STRUCTURE, NEED TO CALL FINDNODE AGAIN            IF NEST.COUNT = 0 THEN* DELETE ARRAY NODE                JSONOBJECT(JSONOBJECT$NODETYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODETYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODELENGTH)=DELETE(JSONOBJECT(JSONOBJECT$NODELENGTH),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODECNTR) -= 1* ADJUST LINKS TO ACCOUNT FOR DELETED NODE                NUM.NODES = JSONOBJECT(JSONOBJECT$NODECNTR)                FOR I = 1 TO NUM.NODES                    NUM.PARTS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,I>                    FOR J = 1 TO NUM.PARTS                        FLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J>                        IF FLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J> = FLINK - 1                        END                        BLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J>                        IF BLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J> = BLINK - 1                        END                    NEXT J                NEXT I                DONE = 1            END        CASE 1            DONE = 1    END CASEUNTIL DONE DO REPEAT* DELETE SIMPLE NODEJSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> -= 1*RETURNEND001C67WOBJ.TEST0c2************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: WOBJ.TEST - QC Testing tool for WOBJ************************************************************************* Build test json to parse*INCLUDE WOBJ.CHOOSE.WOBJJSON =  \{\JSON := \ "stringtest":"stringtestvalue",\JSON := \ "numbertest": 100.12,\JSON := \ "booleantesttrue": True, \JSON := \ "booleantestfalse": False, \JSON := \ "nulltest": null \JSON := \}\** Lets build the objCALL @WOBJ.RTNE(TESTOBJ,"VERSION","",VERSION,"",RERR)PRINT "VERSION: ":VERSIONCALL @WOBJ.RTNE(TESTOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.ARRAY","arraytest","[]","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","arraytest[-1]","1","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","arraytest[-1]","2","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.OBJECT","objecttest",'{ "objecttestv1":"ok" }',"",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","stringtest","stringtestvalue","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.NUMBER","numbertest",100.12,"",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.BOOLEAN","booleantesttrue","True","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.BOOLEAN","booleantestfalse","False","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.NULL","nulltest","NULL","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"TOSTRING","",JSON,"",RERR)TESTOBJ=""** TEST 1 - PARSE*TEST="parse"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"FROMSTRING","",JSON,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Parse ok"   TEST.STATUS=1ENDGOSUB end.test** TEST 2 - GetString*TEST="GetString"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","stringtest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="String Found: (":VALUE:")"   IF VALUE="stringtestvalue" THEN      TEST.STATUS=1   END ELSE       TEST.STATUS=0   ENDENDGOSUB end.test** TEST 3 - GetNumber*TEST="GetNumber"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","numbertest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Number Found: (":VALUE:")"   BEGIN CASE      CASE NOT(NUM(VALUE))      CASE VALUE=100.12         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 4 - GETBoolean*TEST="GetBooleanTrue"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","booleantesttrue",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Boolean Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="true"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 5 - GETBoolean*TEST="GetBooleanFalse"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","booleantestfalse",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Boolean Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="false"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 6 - get null*TEST="GetNull"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","nulltest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="testnull Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="null"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 7 - get length*TEST="LENGTH"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"LENGTH","arraytest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="LENGTH(arraytest) Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="2"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 8 get array sub part*TEST="get array part"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","arraytest[1]",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="arraytest[2] Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="2"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 9 - get object keys*TEST="KEYS"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"KEYS","objecttest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="KEYS Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="objecttestv1"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 10- add item and retrieve*TEST="addstring2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","string2","string2","",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Added string2"ENDGOSUB end.test** TEST 11 - get string2*TEST="getstring2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","string2",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="string2 Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="string2"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 12- add item and retrieve*TEST="addnull2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.NULL","null2","null","",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Add Null2"ENDGOSUB end.test** TEST 11 - get NULL2*TEST="getnull2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","null2",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="null2 Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="null"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 12 - Add blank Object*TEST="Add blank object"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.OBJECT","nullobject","","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET","nullobject.nullfield","nullvalue","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"GET","nullobject.nullfield",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) AND VALUE="nullvalue" THEN   TEST.MSG="nullfield found "   TEST.STATUS=1END ELSE   TEST.MSG="nullfield not found "ENDTEST.MSG:=' (':VALUE:')'GOSUB end.test** TEST 13 - Add blank array*TEST="Add blank array"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.ARRAY","nullarray","","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET","nullarray[-1]","nullvalue","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"GET","nullarray[0]",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) AND VALUE="nullvalue" THEN   TEST.MSG="nullfield found "   TEST.STATUS=1END ELSE   TEST.MSG="nullfield not found "ENDTEST.MSG:=' (':VALUE:')'GOSUB end.test** TEST 14 - Test TOJSONTEST="Test TOJSON"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"TOJSON","",TJSON,"PRETTIFY",RERR)GOSUB process.errorTEST.STATUS=0TEST.MSG="Testing JSON"IF NOT(RERR<1>) THEN   IF INDEX(TJSON,"arraytest",1) THEN   TEST.MSG="nullfield found "   TEST.STATUS=1   ENDEND ELSE   TEST.MSG=""ENDGOSUB end.test** TEST 15 - Test FROMJSONTEST="Test FROMJSON"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ2,"FROMJSON","",TJSON,"",RERR)CALL @WOBJ.RTNE(TESTOBJ2,"GET","stringtest",VALUE,"",RERR)GOSUB process.errorTEST.MSG="stringtestvalue=(":VALUE:")"TEST.STATUS=0IF NOT(RERR<1>) THEN   IF VALUE="stringtestvalue" THEN   TEST.STATUS=1   ENDENDGOSUB end.testCALL @WOBJ.RTNE(TESTOBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR)PRINT OUT.JSONSTOP*GOSUB start.testRETURN*process.error: *IF RERR<1> THEN   TEST.STATUS=-1   TEST.MSG=RERR<1>ENDRETURN**start.test: *TEST.STATUS=0TEST.MSG="Success"PRINT "Test: ":TEST[1,20]"L(#20)":RETURN*end.test: *PRINT "  ":TEST.MSG[1,60]"L(#60)":PRINT " ":IF TEST.STATUS THEN PRINT "[Ok    ]" ELSE PRINT @(-13):"[Failed]":@(-14)RETURN0009CEWOBJ.OBJECT.TOSTRING0c2SUBROUTINE WOBJ.OBJECT.TOSTRING(JSON,POS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert parsed json object node to string************************************************************************INCLUDE WOBJ.INCLUDE*JSON:="{"; * START OUR STRINGINDENT.DEPTH+=1*IF PRETTIFY THEN JSON:=NLNUMBER.PARTS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,POS>IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: POS=":POS:" NUMBER.PARTS=":NUMBER.PARTS** OPTION TO SORT THIS**SORTTYPE="NSBASIC"SORTTYPE=""BEGIN CASE     CASE 1        KEYS=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,POS>        CONVERT @SVM TO @AM IN KEYS        SORTED.KEYS=KEYSEND CASEACTUAL.KEYS=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,POS>FOR PP=1 TO NUMBER.PARTS    PART.KEY=SORTED.KEYS<PP>    LOCATE PART.KEY IN ACTUAL.KEYS<1,1> SETTING P ELSE        IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: COULD NOT LOCATE ":PART.KEY:" IN ":ACTUAL.KEYS    END    PART.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,POS,P>    PART.KEY=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,POS,P>    IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: POS=":POS:" P=":P:" T=":PART.TYPE:" K=":PART.KEY    IF PP=1 AND PRETTIFY THEN JSON:=NL    CALL WOBJ.ENCODE(PART.KEY,OUT.PART.KEY)    CALL WOBJ.PRETTIFY.INDENT(JSON,POS)    JSON:='"':OUT.PART.KEY:'": '    BEGIN CASE        CASE PART.TYPE="S"            CALL WOBJ.STRING.TOSTRING(JSON,POS,P)        CASE PART.TYPE="B"            CALL WOBJ.BOOLEAN.TOSTRING(JSON,POS,P)        CASE PART.TYPE="D"            CALL WOBJ.NUMBER.TOSTRING(JSON,POS,P)        CASE PART.TYPE="N"            CALL WOBJ.NULL.TOSTRING(JSON,POS,P)        CASE PART.TYPE="O"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: FL=":PART.FLINK            CALL WOBJ.OBJECT.TOSTRING(JSON,PART.FLINK)        CASE PART.TYPE="A"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: FL=":PART.FLINK            CALL WOBJ.ARRAY.TOSTRING(JSON,PART.FLINK)    END CASE    IF PP <> NUMBER.PARTS THEN        JSON:=", "        IF PRETTIFY THEN JSON:=NL    ENDNEXT PP*IF PRETTIFY THEN    JSON:=NL    PASS.POS=POS-1    CALL WOBJ.PRETTIFY.INDENT(JSON,PASS.POS)ENDJSON:="}"*IF PRETTIFY THEN JSON:=NLINDENT.DEPTH -= 1RETURNEND000459WOBJ.KEYS0c2SUBROUTINE WOBJ.KEYS(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: return list of elements in a json node in parsed object structure************************************************************************INCLUDE WOBJ.INCLUDE*VALUE=""CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)**IF WOBJ.DEBUG THEN PRINT "WOBJ.KEYS: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" LASTNODE=":LASTNODE:" RERR=":RERR<2>*IF NOT(NODEPOS) THEN    RERR=1    RERR<2>="Node not found"     RETURNENDIF NODE#"" AND NOT(PARTPOS) THEN    RERR=1    RERR<2>="Node not found"     RETURNENDIF NODE="" THEN    NODEPOS=1    CHILDPOS=1ENDIF NOT(CHILDPOS) THEN   RERR=1   RERR<2>="Node is not an object"   RETURNENDNODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,CHILDPOS>IF NODETYPE#"O" THEN   RERR=1   RERR<2>="Node is not an object"   RETURNENDVALUE=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,CHILDPOS>RETURNEND0001C5COMPILE.TXT0c2WOBJWOBJ.ARRAY.TOSTRINGWOBJ.BOOLEAN.TOSTRINGWOBJ.DECODE.PARTWOBJ.DELETEWOBJ.ENCODEWOBJ.FINDNODEWOBJ.GETWOBJ.INCLUDEWOBJ.KEYSWOBJ.NULL.TOSTRINGWOBJ.NUMBER.TOSTRINGWOBJ.OBJECT.TOSTRINGWOBJ.PARSEWOBJ.PARSEARRAYWOBJ.PARSEBOOLEANWOBJ.PARSEKEYWOBJ.PARSENULLWOBJ.PARSENUMBERWOBJ.PARSEOBJECTWOBJ.PARSESTRINGWOBJ.PARSEVALUEWOBJ.PRETTIFY.INDENTWOBJ.SETWOBJ.SET.PARTWOBJ.SKIPCHARWOBJ.STRING.TOSTRINGWOBJ.TESTWOBJ.TOSTRING0002C7WOBJ.TOSTRING0c2SUBROUTINE WOBJ.TOSTRING(JSON)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: internal convert json object to string************************************************************************INCLUDE WOBJ.INCLUDE*POS=1OBJ.TYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,POS>IF OBJ.TYPE="" OR POS > JSONOBJECT$NODECNTR THEN RETURNIF WOBJ.DEBUG THEN PRINT "FIRST OBJECT=":OBJ.TYPEBEGIN CASE    CASE OBJ.TYPE="A"        CALL WOBJ.ARRAY.TOSTRING(JSON,POS)    CASE OBJ.TYPE="O"        CALL WOBJ.OBJECT.TOSTRING(JSON,POS)END CASERETURNEND0002AFWOBJ.DECODE.PART0c2SUBROUTINE WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: decode json part value************************************************************************INCLUDE WOBJ.INCLUDE*PARTENCODING =  JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEPOS,PARTPOS>PARTVALUE    =  JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEPOS,PARTPOS>*BEGIN CASE    CASE PARTENCODING="H"        VALUE=ICONV(PARTVALUE,"MX0C"); * UV    CASE 1        VALUE=PARTVALUEEND CASE*RETURNEND000529WOBJ.GET0c2SUBROUTINE WOBJ.GET(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: get json element value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: if specified node is an Object or Array, return*   a JSON string representation of the node.************************************************************************INCLUDE WOBJ.INCLUDE*VALUE=""IF NODE="" THEN    CALL WOBJ.OBJECT.TOSTRING(VALUE,1) ; * Root object    RETURNEND*CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF NODEPOS > 0 AND PARTPOS > 0 THEN    OBJ.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE OBJ.TYPE="O"            CALL WOBJ.OBJECT.TOSTRING(VALUE,CHILDPOS)        CASE OBJ.TYPE="A"            CALL WOBJ.ARRAY.TOSTRING(VALUE,CHILDPOS)        CASE OBJ.TYPE="N"            VALUE="null"; * 4/23/202 - Return null value        CASE 1            CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)    END CASEEND ELSE    VALUE="" ; * NODE NOT FOUND!ENDIF WOBJ.DEBUG THEN PRINT "WOBJ.GET: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" VALUE=":VALUERETURNEND0008BCWOBJ.PARSESTRING0c2SUBROUTINE WOBJ.PARSESTRING(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json string value************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""*SAVE.INDEXPOS=INDEXPOSCALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)IFQUOTE = JSTR[INDEXPOS,1]INDEXPOS+=1LEN.JSTR=LEN(JSTR)*LOOPWHILE INDEXPOS > 0 AND INDEXPOS < LEN.JSTR DO    C = JSTR[INDEXPOS,1]    IF WOBJ.DEBUG > 1 THEN PRINT "PARSESTRING: LOOKING AT (":C:")"    BEGIN CASE        CASE C = "\"            INDEXPOS+=1            C=JSTR[INDEXPOS,1]            BEGIN CASE                CASE C = \"\ OR C = "\" OR C= "/" OR C = "'"                    PARSESTRING:=C                    INDEXPOS+=1                CASE C = "b"                    PARSESTRING:=BS                    INDEXPOS+=1                CASE C = "f"                    PARSESTRING:=FF                    INDEXPOS+=1                CASE C = "n"                    PARSESTRING:=LF                    INDEXPOS+=1                CASE C = "r"                    PARSESTRING:=CR                    INDEXPOS+=1                CASE C = "t"                    PARSESTRING:=TB                    INDEXPOS+=1                CASE C = "u"                    INDEXPOS+=1                    CODE=JSTR[INDEXPOS,4]                    IF CODE[1,2]="00" THEN                        PARSESTRING:=ICONV(CODE[3,2],"MX0C")                    END ELSE                        PARSESTRING:="_" ;* Poor substitute for invalid Unicode character!                        PSERRORS<-1> = "Invalid Unicode character at position ":INDEXPOS-1:" : u":CODE                    END                    INDEXPOS+=4            END CASE        CASE C = IFQUOTE            INDEXPOS+=1            EXIT        CASE 1            PARSESTRING:=C            INDEXPOS+=1    END CASEREPEATIF C # IFQUOTE THEN    * string not terminated!    PARSESTRING=""    INDEXPOS=SAVE.INDEXPOSENDIF WOBJ.DEBUG THEN PRINT "PARSESTRING: EXITING: ":PARSESTRINGRETURNEND000120WOBJ.UNASSIGNED.INCLUDE0c2IF NOT(ASSIGNED(PASSEDOBJ)) THEN RERR='PARAM1 BLANK'IF NOT(ASSIGNED(ACTION)) THEN RERR='PARAM2 (ACTION) NOT ASSIGNED'IF NOT(ASSIGNED(NODE)) THEN RERR='PARAM3 (NODE) NOT ASSIGNED'IF NOT(ASSIGNED(VALUE)) THEN VALUE=""IF NOT(ASSIGNED(OPTIONS)) THEN OPTIONS=""000258WOBJ.BOOLEAN.TOSTRING0c2SUBROUTINE WOBJ.BOOLEAN.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert json boolean to string************************************************************************INCLUDE WOBJ.INCLUDE*CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)*CALL WOBJ.ENCODE(VALUE,OUT.VALUE)JSON:=OCONV(OUT.VALUE,"MCL")*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=":VALUERETURNEND0001E4WOBJ.NULL.TOSTRING0c2SUBROUTINE WOBJ.NULL.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: json null to string************************************************************************INCLUDE WOBJ.INCLUDE*JSON:="null"*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=null"RETURNEND0001E1WOBJ.PRETTIFY.INDENT0c2SUBROUTINE WOBJ.PRETTIFY.INDENT(JSON,POS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: indent json string************************************************************************INCLUDE WOBJ.INCLUDE*INDENTSTEP=2*IF PRETTIFY THEN    JSON:=STR(" ",(INDENT.DEPTH*INDENTSTEP))END*RETURNEND00024DWOBJ.STRING.TOSTRING0c2SUBROUTINE WOBJ.STRING.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: return json node as string************************************************************************INCLUDE WOBJ.INCLUDE*CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)*CALL WOBJ.ENCODE(VALUE,OUT.VALUE)JSON:='"':OUT.VALUE:'"'*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=":VALUERETURNEND000971WOBJ.PARSEVALUE0c2SUBROUTINE WOBJ.PARSEVALUE(JSTR,INDEXPOS,PARSEVALUE)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json value************************************************************************INCLUDE WOBJ.INCLUDE*PARSEVALUE=""*IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - STARTING"CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*C=JSTR[INDEXPOS,1]LEN.JSTR=LEN(JSTR)*IF WOBJ.DEBUG THEN PRINT "PARSEVALUE LOOKING AT ":C** WE WILL BE ADDING A NEW ITEM TO OUR OBJECT ARRAY*BEGIN CASE    CASE C="{"        CALL WOBJ.PARSEOBJECT(JSTR,INDEXPOS,PARSEVALUE)    CASE C="["        IF WOBJ.DEBUG THEN PRINT "PARSEVALUE CALLING PARSEARRAY"        CALL WOBJ.PARSEARRAY(JSTR,INDEXPOS,PARSEVALUE)    CASE C='"' OR C="'"        IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSESTRING"        CALL WOBJ.PARSESTRING(JSTR,INDEXPOS,PARSEVALUE)        PARSEVALUE=INSERT(PARSEVALUE,1;"S")    CASE 1        IF C="t" OR C="T" OR C="f" OR C="F" THEN            IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSEBOOLEAN"            CALL WOBJ.PARSEBOOLEAN(JSTR,INDEXPOS,PARSEVALUE)            IF PARSEVALUE#"" THEN                PARSEVALUE=INSERT(PARSEVALUE,1;"B")            END        END        IF PARSEVALUE="" AND (C="n" OR C="N") THEN            IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSENULL"            CALL WOBJ.PARSENULL(JSTR,INDEXPOS,PARSEVALUE)            IF PARSEVALUE#"" THEN                 PARSEVALUE=INSERT(PARSEVALUE,1;"N")            END        END        IF PARSEVALUE="" THEN            IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSENUMBER"            CALL WOBJ.PARSENUMBER(JSTR,INDEXPOS,PARSEVALUE)            IF PARSEVALUE#"" THEN                PARSEVALUE=INSERT(PARSEVALUE,1;"D")            END        END        IF PARSEVALUE="" THEN            * Treat unidentified value as string            LOOP            WHILE INDEXPOS > 0 AND INDEXPOS < LEN.JSTR DO                C = JSTR[INDEXPOS,1]                IF INDEX(",]}",C,1) THEN                    EXIT                END                PARSEVALUE:=C                INDEXPOS+=1            REPEAT            PARSEVALUE=INSERT(PARSEVALUE,1;"S")        ENDEND CASEIF WOBJ.DEBUG THEN PRINT "PARSEVALUE - END OF ROUTINE"*RETURNEND000180WOBJ.CHOOSE.WOBJ0c2* Code to determine default wobj library to use* This needs to change for MVDBTOOLKIT build, defaults to WOBJWOBJ.RTNE="WOBJ"NO.MD.FILE=0OPEN "MD" TO FILE.MD ELSE    OPEN "VOC" TO FILE.MD ELSE NO.MD.FILE=1ENDIF NOT(NO.MD.FILE) THEN    READ WOBJ.CONF FROM FILE.MD, "WOBJ.CONF" ELSE WOBJ.CONF=""    IF WOBJ.CONF<3> # "" THEN WOBJ.RTNE=WOBJ.CONF<3>END0014F3WOBJ0c2SUBROUTINE WOBJ(PASSEDOBJ,ACTION,NODE,VALUE,OPTIONS,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: WOBJ json library main routine************************************************************************WOBJ.VERSION = "2.0"*INCLUDE WOBJ.INCLUDE** 4/21/2020 Merged in udo object supportPLATFORM=""* HOW TO DEFINE CONFIGURATION FOR WOBJ??NO.MD.FILE=0OPEN "MD" TO MD.FILE ELSE   OPEN "VOC" TO MD.FILE ELSE NO.MD.FILE=1ENDWOBJ.CONF=""IF NOT(NO.MD.FILE) THEN   READ WOBJ.CONF FROM MD.FILE, "WOBJ.CONF" ELSE WOBJ.CONF=""ENDIF WOBJ.CONF="" THEN   NO.DICT.WOBJ.BP=0   OPEN "DICT","WOBJ.BP" TO DICT.WOBJ.BP ELSE NO.DICT.WOBJ.BP=1   IF NOT(NO.DICT.WOBJ.BP) THEN      READ WOBJ.CONF FROM DICT.WOBJ.BP, "WOBJ.CONF" ELSE WOBJ.CONF=""   ENDENDPLATFORM=WOBJ.CONF<2>* 5/11/2020 - Moved unassigned check to here** Doing inline include due to Assign/Unassigned (unidata)* WOBJ.UNASSIGNED.INCLUDE*$INCLUDE WOBJ.UNASSIGNED.INCLUDEINCLUDE WOBJ.UNASSIGNED.INCLUDEIF INDEX(OPTIONS,"PRETTIFY",1) THEN PRETTIFY=1 ELSE PRETTIFY=0IF INDEX(OPTIONS,"PRETTIFYCR",1) THEN PRETTIFYCR=1 ELSE PRETTIFYCR=0IF INDEX(OPTIONS,"DEBUG",1) THEN WOBJ.DEBUG=1 ELSE WOBJ.DEBUG=0IF INDEX(OPTIONS,"UDO=1",1) THEN PLATFORM="UDO"IF INDEX(OPTIONS,"UDO=0",1) AND PLATFORM="UDO" THEN PLATFORM=""IF INDEX(OPTIONS,"NATIVE",1) THEN PLATFORM=""* 5/11/2020 - pap Patch to allow default setting for a *             set.object or set.array*IF ACTION="SET.OBJECT" AND VALUE="" THEN VALUE="{}"IF ACTION="SET.ARRAY" AND VALUE="" THEN VALUE="[]"IF ACTION="FROMJSON" THEN ACTION="FROMSTRING"IF ACTION="TOJSON" THEN ACTION="TOSTRING"BEGIN CASE   CASE PLATFORM='UDO'      CALL WOBJ.UDO(PASSEDOBJ,ACTION,NODE,VALUE,OPTIONS,RERR)      RETURN   CASE 1END CASE*MAT JSONOBJECT = ""RERR=""INDENT.DEPTH=0*BEGIN CASE    CASE ACTION="FROMSTRING"* THIS EXISTS EARLIER DUE TO MATPARSE BELOW        CALL WOBJ.PARSE(VALUE,NEWOBJ)        PASSEDOBJ=NEWOBJ        IF PSERRORS # "" THEN            RERR=2            RERR<2> = PSERRORS        END        IF WOBJ.DEBUG THEN PRINT "WOBJ: FROMSTRING ACTION: VALUE=":VALUE:" RERR=":RERR<2>        RETURN    CASE ACTION="VERSION"        VALUE=WOBJ.VERSION        RETURNEND CASERERR=''*IF NOT(ASSIGNED(PASSEDOBJ)) THEN RERR='PARAM1 BLANK'*IF NOT(ASSIGNED(ACTION)) THEN RERR='PARAM2 (ACTION) NOT ASSIGNED'*IF NOT(ASSIGNED(NODE)) THEN RERR='PARAM3 (NODE) NOT ASSIGNED'*IF NOT(ASSIGNED(VALUE)) THEN VALUE=""*IF NOT(ASSIGNED(OPTIONS)) THEN OPTIONS=""IF RERR <> "" THEN   RERR<2>=RERR   RERR<1>=1   PRINT RERR<1>   RETURNEND** MATPARSE JSONOBJECT FROM PASSEDOBJ; * all except unidataMATPARSE JSONOBJECT FROM PASSEDOBJ, @AM; * Unidata*IF WOBJ.DEBUG THEN PRINT "ACTION=":ACTIONBEGIN CASE    CASE ACTION="TOSTRING"        VALUE=""        IF NODE # "" THEN            RERR=1            RERR<2>="Node ignored - returning the root node"            IF WOBJ.DEBUG THEN PRINT "WOBJ: TOSTRING ACTION: NODE ":NODE:" IGNORED"        END        CALL WOBJ.TOSTRING(VALUE)    CASE ACTION="GET"        GOSUB action.get    CASE FIELD(ACTION,".",1)="SET"        GOSUB action.set    CASE ACTION="DELETE"        GOSUB action.delete    CASE ACTION="KEYS"        GOSUB action.keys    CASE ACTION="LENGTH"        GOSUB action.length    CASE ACTION="TYPE"        GOSUB action.type    CASE 1        VALUE=""        RERR=1        RERR<2>="Invalid action '":ACTION:"'"        IF WOBJ.DEBUG THEN PRINT "WOBJ: INVALID ACTION: ":ACTIONEND CASE*MATBUILD PASSEDOBJ FROM JSONOBJECT*RETURN*action.get: *CALL WOBJ.GET(ACTION,NODE,VALUE,RERR)RETURN*action.set: *CALL WOBJ.SET(ACTION,NODE,VALUE,RERR)RETURN*action.delete: *CALL WOBJ.DELETE(ACTION,NODE,VALUE,RERR)RETURN*action.keys: *CALL WOBJ.KEYS(ACTION,NODE,VALUE,RERR)RETURN*action.length: *CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF PARTPOS THEN    IF CHILDPOS THEN        VALUE=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,CHILDPOS>+0    END ELSE        VALUE=1 ;* SIMPLE NODE HAS LENGTH OF 1    ENDEND ELSE    IF NODE="" THEN        VALUE=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,1>+0    END ELSE        VALUE=0 ;* NODE NOT FOUND!    ENDENDIF WOBJ.DEBUG THEN PRINT "WOBJ: LENGTH ACTION: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" LENGTH=":VALUE:" RERR=":RERR<2>RETURN*action.type: *CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF PARTPOS THEN    PARTTYPE = JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE PARTTYPE='O'            VALUE='OBJECT'        CASE PARTTYPE='A'            VALUE='ARRAY'        CASE PARTTYPE='D'            VALUE='NUMBER'        CASE PARTTYPE='S'            VALUE='STRING'        CASE PARTTYPE='N'            VALUE='NULL'        CASE PARTTYPE='B'            VALUE='BOOLEAN'        CASE 1            VALUE='UNKNOWN'    END CASEEND ELSE    IF NODE="" THEN        VALUE="OBJECT"    END ELSE        VALUE="UNDEFINED" ;* NODE NOT FOUND!    ENDENDIF WOBJ.DEBUG THEN PRINT "WOBJ: TYPE ACTION: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" TYPE=":VALUE:" RERR=":RERR<2>RETURN*END00038DWOBJ.PARSENUMBER0c2SUBROUTINE WOBJ.PARSENUMBER(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json numeric value************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)SAVE.INDEXPOS=INDEXPOS*JSTR.LENGTH=LEN(JSTR)*LOOP WHILE INDEXPOS > 0 AND INDEXPOS <= JSTR.LENGTH DO    C=JSTR[INDEXPOS,1]    IF NUM(C) OR C="+" OR C="-" OR C="." OR C="E" OR C="e" THEN        PARSESTRING:=C        INDEXPOS+=1    END ELSE        EXIT    ENDREPEATCALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)C=JSTR[INDEXPOS,1]IF INDEX(",]}",C,1)=0 THEN    * invalid terminator - not a number    PARSESTRING=""    INDEXPOS=SAVE.INDEXPOSENDRETURNEND000419WOBJ.PARSE0c2SUBROUTINE WOBJ.PARSE(JSTR,JSONOBJECTRETURN)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json string into object************************************************************************INCLUDE WOBJ.INCLUDE*PSERRORS=""MAT JSONOBJECT=""JSONOBJECTRETURN=""*INDEXPOS=1CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)C=JSTR[INDEXPOS,1]IF C # "{" THEN    IF C # "" THEN        PSERRORS<-1>="Leading brace for JSON object missing"    END    RETURNEND*CALL WOBJ.PARSEOBJECT(JSTR,INDEXPOS,PARSERESULT)IF PARSERESULT="" THEN    IF PSERRORS="" THEN PSERRORS<-1>="Parse failure"END ELSE    * MAKE SURE WE CONSUMED ENTIRE JSTR    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    IF INDEXPOS <= LEN(JSTR) THEN        PSERRORS<-1>="Extra data (":(LEN(JSTR)-INDEXPOS+1):" characters) after final close brace ignored"    ENDEND*MATBUILD JSONOBJECTRETURN FROM JSONOBJECT*RETURNEND000A0FWOBJ.PARSEARRAY0c2SUBROUTINE WOBJ.PARSEARRAY(JSTR,INDEXPOS,PARSEARRAY)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json array************************************************************************INCLUDE WOBJ.INCLUDE*PARSEVARRAY=""IF WOBJ.DEBUG THEN PRINT "PARSEARRAY - STARTING"*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*IF JSTR[INDEXPOS,1] <> "[" THEN    PSERRORS<-1>="Invalid Array at position ":INDEXPOS:" : ":JSTR[INDEXPOS,20]    RETURNEND*LEN.JSTR = LEN(JSTR)INDEXPOS+=1*JSONOBJECT(JSONOBJECT$NODECNTR)+=1NODEID=JSONOBJECT(JSONOBJECT$NODECNTR)JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEID>="A"; *SET AS OBJECT*LOOP    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    C=JSTR[INDEXPOS,1]    IF WOBJ.DEBUG THEN PRINT "PARSEARRAY: ":NODEID:" - LOOKING AT ":C    BEGIN CASE        CASE C = "]"            IF WOBJ.DEBUG THEN PRINT "PARSEARRAY: ":NODEID:" EXIT ON ]"            INDEXPOS+=1            EXIT        CASE C = ","            INDEXPOS+=1            CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)        CASE INDEXPOS > LEN.JSTR            PSERRORS<-1>="Missing ']': ":JSTR[LEN(JSTR)-20,20]            RETURN    END CASE    *    CALL WOBJ.PARSEVALUE(JSTR,INDEXPOS,PARSEVALUE)    *    JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>+=1    PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>    BEGIN CASE        CASE PARSEVALUE=""            PSERRORS<-1>="Invalid value syntax for array element ":(PARTPOS-1)            IF WOBJ.DEBUG THEN PRINT "PARSEARRAY ":NODEID:" invalid value syntax"            RETURN        CASE PARSEVALUE<1>="A" OR PARSEVALUE<1>="O"            * ARRAY OR OBJECT            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEID,PARTPOS>=PARSEVALUE<2>        CASE 1            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            V=PARSEVALUE<2>            IF INDEX(V,LF,1) OR INDEX(V,CR,1) THEN                V=OCONV(V,"MX0C")                E="H"            END ELSE                E="A"            END            JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEID,PARTPOS>=V            JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEID,PARTPOS>=E    END CASE    IF WOBJ.DEBUG THEN PRINT "PARSEARRAY ":NODEID:" ":PARSEVALUE<1>:" ":PARSEVALUE<2>REPEATPARSEARRAY="A"PARSEARRAY<2>=NODEIDIF WOBJ.DEBUG THEN PRINT "PARSEARRAY - EXITING"RETURNEND000165DICT_PORTAL.AR0c000002BINVOICE.AMT0c1A6Invoice.AmtMD2R13000025DUE.DATE0c1A20Due.DateD2-R8000024BALANCE0c1A50BalanceMD2R13000029DATES.PAID0c1A8CheckDatesD2-R800001APIPE0c1A0 F;C|L100001ACUST0c1A1CustL2500001EBIG.CUST0c1A1CustL40000034CUST.NAME0c1A1Cust.NameTPORTAL.AR;X;1;1L25000A7FMVDB.WIDGETS0c0000025AdminConfig0c2SUB.ADMIN.CONFIGADMIN000025Code Templates0c2SUB.CODE.TEMPLATES000014D3 Free0c2SUB.FREE00001CD3 LISTPEQS0c2SUB.LISTPEQS000016D3 LISTU0c2SUB.LISTU000028D3 Runtime Errors0c2SUB.RUNTIME.ERRORS000024D3 Sys Err Chart0c2SUB.SYS.ERR.BAR000021D3 System Errors0c2SUB.SYS.ERRS00002DDashboard License Usage0c2SUB.TABLE.LIC.USED000038DEMO ANNUAL SALES BY REP0c2SUB.DEMO.ANNUAL.SALES.BY.REP000035DEMO AVERAGE DAYS CHART0c2SUB.DEMO.DAYS.TO.PAY.CHART000030DEMO DAYS TO PAY PIE0c2SUB.DEMO.DAYS.TO.PAY.PIE00004BDEMO FINANCIAL PICTURE0c2DEMO.FINANCIALS.DASHBOARDDemo Financial Picture00003ADEMO MONTHLY SALES BY REP0c2SUB.DEMO.MONTHLY.SALES.BY.REP000032DEMO NET INCOME CHART0c2SUB.DEMO.NET.INCOME.CHART000036DEMO REV.GP SALES CHART0c2SUB.DEMO.REV.GP.SALES.CHART00002EDEMO SALE TYPES PIE0c2SUB.DEMO.SALE.TYPES.PIE000028DEMO SALES CHART0c2SUB.DEMO.SALES.CHART00002EDEMO SALES PERCENTS0c2SUB.DEMO.SALES.PERCENTS000044DEMO SINGLE MONTH SALES BY REP0c2SUB.DEMO.SINGLE.MONTH.SALES.BY.REP000020Demo- MS Col0c2SUB.DEMO.MS.COL00001FDemo-Doughnut0c2SUB.DEMO.DNUT000019Demo-Pie0c2SUB.DEMO.PIE00001EDemo-SS Col0c2SUB.DEMO.SS.COL000021Demo-SS Line0c2SUB.DEMO.SS.LINE000025Drilldown Demo0c2SUB.DEMO.DRILLDOWN000024Emailed Report0c2SUB.EMAILED.REPORT00001EGRID TEST0c2SUB.GRID.TESTSAI000021Icon Gallery0c2SUB.ICON.GALLERY000022Mobile Manager0c2SUB.MOBILE.APPS000026MW CodeFactory0c2SUB.MW.CODE.FACTORY000021PDFConfig0c2SUB.PDF.CONFIGADMIN000028QM Runtime Errors0c2SUB.RUNTIME.ERRORS00001BRSS Feeds0c2SUB.RSS.FEEDS000028SC-Lines By Lib (Pie)0c2SUB.SC.LIB.PIE000023SC-Lines By Prog0c2SUB.SC.LIB.COL000028SC-Progs by Lib (Pie)0c2SUB.SC.LIB.PIE00001BShow Vars0c2SUB.SHOW.VARS000021Source Viewer0c2SUB.SOURCE.VIEW000025System - Session0c2SUB.SHOW.SESSION000028PORTAL DASHBOARD0c2SUB.PORTAL.DASHBOARD000030PORTAL SALES REPORTS0c2SUB.PORTAL.SALES.REPORTS000034PORTAL AR REPORT SETUP0c2SUB.PORTAL.AR.REPORT.SETUP00002APORTAL AR REPORTS0c2SUB.PORTAL.AR.REPORTS00002APORTAL AP REPORTS0c2SUB.PORTAL.AP.REPORTS000034PORTAL AP REPORT SETUP0c2SUB.PORTAL.AP.REPORT.SETUP000024PORTAL MARGINS0c2SUB.PORTAL.MARGINS00003APORTAL SALES REPORT SETUP0c2SUB.PORTAL.SALES.REPORT.SETUP000040DISPLAY PORTAL AP BALANCE PIE CHART0c2SUB.PORTAL.AP.BALANCE.PIE000040DISPLAY PORTAL AR BALANCE PIE CHART0c2SUB.PORTAL.AR.BALANCE.PIE000034PORTAL DAYS TO PAY PIE0c2SUB.PORTAL.DAYS.TO.PAY.PIE00003CPORTAL SETUP DOCUMENTATION0c2SUB.PORTAL.SETUP.DOCUMENTATION000030PORTAL.DOCUMENTATION0c2SUB.PORTAL.DOCUMENTATION000040PORTAL.REPORTS.DOCUMENTATION0c2SUB.PORTAL.REPORTS.DOCUMENTATION000038PORTAL.RUN.DOCUMENTATION0c2SUB.PORTAL.RUN.DOCUMENTATION010ED1MVDBTOOLKIT.BP0c00010ABMVDBTOOLKIT.WFILEIO.D30c2      SUBROUTINE MVDBTOOLKIT.WFILEIO.D3(FOBJ)      **********************************************************************      *      * Copyright (C) 2017 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: June 7th 2018      * Description: WFILEIO MULTI PLATFORM WORKING WITH O/S FILES      *      **********************************************************************      *      * INOBJ      *      * { "ACTION":"READ,WRTE,DELETE",      *   "PATH":"PATH TO THE FILE",      *   "DATA":"DATA FOR A WRITE",      *   "dosletter":"OPTIONAL DOS LETTER TO ADD TO PATH",      *   "NEWLINE":"CR,LF,CRLF,DOS,UNIX",      *   "PERMISSIONS":"TBD"      *   "response": {      *       "data":"responsedata",      *       "status":1-ok, else no,      *       "statusmsg":"statusmsg"      *   }      * }      *      * need to know the existing platform      *PLATFORM.DELIM="\"      *PLATFORM.TYPE="WINDOWS"      *PLATFORM.MV="D3"      INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ            CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MV,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.DELIM,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)      FSTATUS=1      FSTATUSMSG="OK"      CALL @WOBJ.RTNE(FOBJ,"GET","action",FILEIO.ACTION,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","path",FILEIO.PATH,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","data",FILEIO.DATA,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","dosletter",FILEIO.DOSLETTER,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","newline",FILEIO.NEWLINE,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","permissions",FILEIO.PERMISSIONS,"",RERR)      *CALL @WOBJ.RTNE(OUTOBJ,"FROMSTRING","","{}","",RERR)      FILEIO.ACTION=OCONV(FILEIO.ACTION,"MCU")      FILEIO.NEWLINE=OCONV(FILEIO.NEWLINE,"MCU")      CALL @WOBJ.RTNE(FOBJ,"GET","work.parsed_fileio_file_name",PARSED.FILEIO.FILE.NAME,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.fileio_just_path",FILEIO.JUST.PATH,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MVTYPE,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.FILEDELIM,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","path",ORIG.PATH,"",RERR)      * FOR RIGHT NOW ON JBASE WE WILL JUST OPEN THE FILE USING FULL PATHING      * THIS DOES NOT DO ANYTHING!!!      BEGIN CASE         CASE PLATFORM.TYPE="WINDOWS"            REAL.PATH="dos:":PLATFORM.TYPE         CASE 1            REAL.PATH="unix:":PLATFORM.TYPE      END CASE      **      OPEN FILEIO.JUST.PATH TO FI ELSE         IF INDEX(FILEIO.JUST.PATH,"AppData\Local\Temp",1) OR INDEX(FILEIO.JUST.PATH,'\tmp',1) THEN            * SPECIAL PATCH FOR D3/WINDOWS.  D3 is running as a system user and it appears            * the Temp directory does not always exist            EXECUTE '!mkdir ':FILEIO.JUST.PATH         END         OPEN FILEIO.JUST.PATH TO FI ELSE            FSTATUS=0            FSTATUSMSG="Could not open file ":FILEIO.JUST.PATH            GOTO end.of.run         END      END      BEGIN CASE         CASE FILEIO.ACTION="READ"            GOSUB fileio.read         CASE FILEIO.ACTION="WRITE"            GOSUB fileio.write         CASE FILEIO.ACTION="DELETE"            GOSUB fileio.delete         CASE 1            FSTATUS=0            FSTATUSMSG="Invalid action"            GOTO end.of.run      END CASEend.of.run: *      CALL @WOBJ.RTNE(FOBJ,"SET.NUMBER", "response.status", FSTATUS,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"SET.STRING", "response.statusmsg", FSTATUSMSG, "", RERR)      RETURNfileio.read: *      REC=""      READ REC FROM FI, PARSED.FILEIO.FILE.NAME ELSE         FSTATUS=0         FSTATUSMSG="Could not find ":PARSED.FILEIO.FILE.NAME      END      CALL @WOBJ.RTNE(FOBJ,"SET.STRING","response.data",REC,"",RERR)      IF 0 THEN         PRINT "PATH   :":FILEIO.JUST.PATH         PRINT "ID     :":PARSED.FILEIO.FILE.NAME         PRINT "REC    :":REC      END      RETURNfileio.write: *      WRITE FILEIO.DATA ON FI, PARSED.FILEIO.FILE.NAME      RETURNfileio.delete: *      DELETE FI, PARSED.FILEIO.FILE.NAME      RETURN002F4DMVDBTOOLKIT.TEST0c2PRINT @(-1):"MVDBTOOLKIT.TEST"PRINTINCLUDE MVDBTOOLKIT.TEST.INCLUDEINCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJTEST.PLATFORM=FIELD(CMND,' ',2)TEST.MVTYPE=FIELD(CMND,' ',3)CALL MVDBTOOLKIT.WPLATFORM(PLATFORM.OBJ)IF TEST.PLATFORM = "" THEN   CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",TEST.PLATFORM,"",RERR)ENDIF TEST.MVTYPE = "" THEN   CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",TEST.MVTYPE,"",RERR)ENDIF TEST.PLATFORM = "" THEN   PRINT "Enter Platform: ":; INPUT TEST.PLATFORMENDIF TEST.MVTYPE = "" THEN   PRINT "Enter MVType: ":; INPUT TEST.MVTYPEENDIF TEST.PLATFORM='' OR TEST.MVTYPE='' THEN    PRINT "Usage: MVDBTOOLKIT PLATFORM MVTYPE"    PRINT    PRINT "PLATFORM=WINDOWS or LINUX"    PRINT "MVTYPE=JBASE,D3,UNIVERSE,UNIDATA"    STOPEND* GET ENVIRONMENTCALL MVDBTOOLKIT.WPLATFORM(PLATFORM.OBJ)CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","curllocation",CURLLOCATION,"",RERR)CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",PLATFORM,"",RERR)TEST='platform'; GOSUB start.testTEST.MSG=PLATFORM:"=":TEST.PLATFORMIF PLATFORM # TEST.PLATFORM THEN TEST.STATUS=0 ELSE TEST.STATUS=1GOSUB end.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",RESULT,"",RERR)TEST='mvtype'; GOSUB start.testTEST.MSG=RESULT:"=":TEST.MVTYPEIF RESULT # TEST.MVTYPE THEN TEST.STATUS=0 ELSE TEST.STATUS=1GOSUB end.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.DIR,"",RERR)CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","filedelim",FILEDELIM,"",RERR)TEST='filedelim'; GOSUB start.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","filedelim",FILEDELIM,"",RERR)TEST.MSG=FILEDELIMTEST.STATUS=1BEGIN CASE   CASE OCONV(PLATFORM,"MCU") = "LINUX" AND FILEDELIM="/"   CASE OCONV(PLATFORM,"MCU") = "WINDOWS" AND FILEDELIM="\"   CASE 1; TEST.STATUS=0END CASEGOSUB end.testTEST='tmpdir'; GOSUB start.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.DIR,"",RERR)TEST.MSG=TMP.DIRTEST.STATUS=1IF TMP.DIR="" THEN TEST.STATUS=0GOSUB end.testTEST='MVDBTOOLKIT.SWAP'GOSUB start.testS='TEST LINE TEST LINE'ORIG.STRING=SCALL MVDBTOOLKIT.SWAP(S,"ES","XX")IF S = "TXXT LINE TXXT LINE" THEN TEST.STATUS=1 ELSE TEST.STATUS=0TEST.MSG=SGOSUB end.test* Test 1 GetenvTEST="getenv"GOSUB start.testCALL MVDBTOOLKIT.WGETENV("PATH",PATH)IF PATH # "" THEN    TEST.MSG=PATH[1,60]    TEST.STATUS=1END ELSE    TEST.MSG=""    TEST.STATUS=0ENDGOSUB end.test* Test WEXECUTETEST="wexecute"; GOSUB start.testCMND='echo MVDBTOOLKIT.TEST'CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)CALL MVDBTOOLKIT.WEXECUTE(COBJ)CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)IF INDEX(CMND.RESULT,"MVDBTOOLKIT.TEST",1) THEN    TEST.MSG=CMND.RESULT    TEST.STATUS=1END ELSE    TEST.MSG=CMND.RESULT    TEST.STATUS=0ENDCONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSGGOSUB end.test* Test WFILEIOTEST="WFILEIO-WRITE"USER.NO=FIELD(OCONV('','U50BB'),' ',1)GOSUB start.testCALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)TMP.FILE.NAME=TMP.DIR:FILEDELIM:'TMP-':USER.NO:'.txt'TEST.MSG=TMP.FILE.NAMECALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.FILE.NAME,"",RERR)SAVE.FOBJ=FOBJTMP.DATA=TIMEDATE()CALL @WOBJ.RTNE(FOBJ,"SET","data",TMP.DATA,"",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUS.MSG,"",RERR)TEST.STATUS=RESPONSE.STATUSIF NOT(RESPONSE.STATUS) THEN TEST.MSG:=RESPONSE.STATUS.MSGGOSUB end.testIF NOT(TEST.STATUS) THEN STOP "Test Failed, no reason to continue"TEST='WFILEIO-READ'GOSUB start.test* NOW READ IT BACK INCALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)TEST.MSG="(":TMP.DATA:')=(':RESPONSE.DATA:")"TEST.STATUS=1IF TMP.DATA # RESPONSE.DATA THEN TEST.STATUS=0GOSUB end.testTEST="WFILEIO-DELETE"; GOSUB start.testFOBJ=SAVE.FOBJCALL @WOBJ.RTNE(FOBJ,"SET","action","DELETE","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)FOBJ=SAVE.FOBJCALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)RESPONSE.DATA=""CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUSMSG,"",RERR)TEST.STATUS=1TEST.MSG=TMP.FILE.NAME:' ':RESPONSE.STATUSIF RESPONSE.STATUS=0 AND RESPONSE.DATA="" THEN NULL ELSE TEST.STATUS=0GOSUB end.test* Let get our current directoryTEST="pwd"; GOSUB start.testIF OCONV(PLATFORM,"MCU") = "WINDOWS" THEN   CMND='echo %CD%'END ELSE   CMND='pwd'ENDCALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)CALL MVDBTOOLKIT.WEXECUTE(COBJ)CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)IF 1 THEN    TEST.MSG=CMND.RESULT    TEST.STATUS=1END ELSE    TEST.MSG=CMND.RESULT    TEST.STATUS=0ENDCONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSGGOSUB end.testMVDBTOOLKIT.LOCATION = CMND.RESULTIF 0 THEN* Lets verify we have curl!!!IF CURLLOCATION="" THEN CURLLOCATION="curl"TEST="default curl"; GOSUB start.testCMND=CURLLOCATION:' -V'CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)CALL MVDBTOOLKIT.WEXECUTE(COBJ)CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)BEGIN CASE   CASE INDEX(CMND.RESULT,"libcurl",1) AND 0    TEST.MSG=CMND.RESULT    TEST.STATUS=1   CASE OCONV(PLATFORM,"MCU")="WINDOWS"    TEST.MSG=CMND.RESULT    TEST.STATUS=2   CASE 1    TEST.MSG=0END CASECONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSGGOSUB end.test* Start looking for curlIF TEST.STATUS=2 THEN   CURLLOCATION="c:\progra~1\git\mingw64\bin\curl.exe"   TEST="git curl"; GOSUB start.test   CMND=CURLLOCATION:' -V'   CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)   CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)   CALL MVDBTOOLKIT.WEXECUTE(COBJ)   CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)   BEGIN CASE      CASE INDEX(CMND.RESULT,"libcurl",1) AND 0         TEST.MSG=CMND.RESULT         TEST.STATUS=1      CASE OCONV(PLATFORM,"MCU")="WINDOWS"         TEST.MSG=CMND.RESULT         TEST.STATUS=2      CASE 1         TEST.MSG=CMND.RESULT         TEST.STATUS=0   END CASE   CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG   GOSUB end.testENDIF TEST.STATUS=2 THEN   CURLLOCATION=MVDBTOOLKIT.LOCATION:"\mvdbtoolkit\curl\windows64\curl.exe"   TEST="mvdbtoolkit curl"; GOSUB start.test   CMND=CURLLOCATION:' -V'   CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)   CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)   CALL MVDBTOOLKIT.WEXECUTE(COBJ)   CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)   BEGIN CASE      CASE INDEX(CMND.RESULT,"libcurl",1) AND 0         TEST.MSG=CMND.RESULT         TEST.STATUS=1       CASE 1         TEST.STATUS=0         TEST.MSG=CMND   END CASE   CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG   GOSUB end.testENDENDTEST="WCALL"GOSUB start.testCALL @WOBJ.RTNE(OBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","method","POST","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","debug","N","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","url","https://httpbin.org/anything?field1=value1","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","insecure","Y","",RERR)  CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","headers","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","headers.X-TEST-HEADER","headertest","",RERR)  CALL @WOBJ.RTNE(OBJ,"SET.ARRAY","formfields","[]","",RERR) CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","formfields[-1]","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","formfields[0].name","field2","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","formfields[0].value","VALUE2$","",RERR) CALL @WOBJ.RTNE(SOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(SOBJ,"SET","name","field3","",RERR) CALL @WOBJ.RTNE(SOBJ,"SET","value","<EXAMPLE HTML>","",RERR) CALL @WOBJ.RTNE(SOBJ,"TOSTRING","",SJSON,"",RERR) CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","formfields[-1]",SJSON,"",RERR) CALL MVDBTOOLKIT.WCALL(OBJ) CALL @WOBJ.RTNE(OBJ,"GET","response.data",RESPONSE,"",RERR) OPEN "MVDBTOOLKIT.BP" TO FILE ELSE STOP *PRINT "RESPONSE=":RESPONSE WRITE RESPONSE ON FILE, "MVDBTOOLKIT.TEST.JSON" CALL @WOBJ.RTNE(OBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR) WRITE OUT.JSON ON FILE, "MVDBTOOLKIT.WCALL.JSON"  CALL @WOBJ.RTNE(OBJ,"GET","response.status",RESPONSE.STATUS,"",RERR) *PRINT 'RESPONSE.STATUS=':RESPONSE.STATUS:'  ': *IF RESPONSE.STATUS="200" THEN PRINT "OK" ELSE PRINT "FAIL" TEST.MSG=RESPONSE.STATUS IF RESPONSE.STATUS="200" THEN    TEST.STATUS=1 END ELSE    TEST.STATUS=0 END GOSUB end.test TEST='WCALL.HTTPTYPE' GOSUB start.test CALL @WOBJ.RTNE(OBJ,"GET","response.http_type",RESPONSE.HTTP.TYPE,"",RERR) *PRINT 'RESPONSE.HTTP_TYPE=':RESPONSE.HTTP.TYPE TEST.MSG=RESPONSE.HTTP.TYPE IF INDEX(TEST.MSG,'HTTP/',1) THEN    TEST.STATUS=1 END ELSE    TEST.STATUS=0 END GOSUB end.test CALL @WOBJ.RTNE(ROBJ,"FROMSTRING","",RESPONSE,"",RERR) TEST="WCALL.FIELD1" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","args.field1",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="value1" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.testTEST="WCALL.field2" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","form.field2",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="VALUE2$" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.testTEST="WCALL.field3" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","form.field3",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="<EXAMPLE HTML>" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.test TEST="WCALL.HEADER" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","headers.X-Test-Header",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="headertest" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.testTEST="WCALL.BODY"GOSUB start.test CALL @WOBJ.RTNE(OBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","method","POST","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","debug","N","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","url","https://httpbin.org/anything?field1=value1","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","insecure","N","",RERR) CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","headers","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","Content-Type","application/json","",RERR)  CALL @WOBJ.RTNE(TESTOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(TESTOBJ,"SET","test","value","",RERR) CALL @WOBJ.RTNE(TESTOBJ,"TOSTRING","",TESTJSON,"PRETTIFY",RERR) CALL @WOBJ.RTNE(OBJ,"SET.STRING","body",TESTJSON,"",RERR)  CALL MVDBTOOLKIT.WCALL(OBJ) CALL @WOBJ.RTNE(OBJ,"GET","response.data",RESPONSE,"",RERR)  WRITE RESPONSE ON FILE, "MVDBTOOLKIT.TESTBODY.JSON" CALL @WOBJ.RTNE(OBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR) WRITE OUT.JSON ON FILE, "MVDBTOOLKIT.WCALLBODY.JSON" CALL @WOBJ.RTNE(OBJ,"GET","response.status",RESPONSE.STATUS,"",RERR) *PRINT 'RESPONSE.STATUS=':RESPONSE.STATUS:'  ': *IF RESPONSE.STATUS="200" THEN PRINT "OK" ELSE PRINT "FAIL" TEST.MSG=RESPONSE.STATUS IF RESPONSE.STATUS="200" THEN    TEST.STATUS=1 END ELSE    TEST.STATUS=0 END GOSUB end.test TEST="WCALL.BODY.RESULT" GOSUB start.test * The testing web site does not send raw body back very well * we will just look for what we expect CONVERT CHAR(254):CHAR(253):CHAR(252):CHAR(10):CHAR(13) TO '' IN RESPONSE POS=INDEX(RESPONSE,'"form"',1) IF POS THEN RESPONSE=RESPONSE[POS,9999] TEST.MSG=RESPONSE IF INDEX(RESPONSE,'"test',1) AND INDEX(RESPONSE,'"value',1) THEN     TEST.STATUS=1 END ELSE     TEST.STATUS=0 END GOSUB end.test STOP*GOSUB start.testRETURN*process.error: *IF RERR<1> THEN   TEST.STATUS=-1   TEST.MSG=RERR<1>ENDRETURN**start.test: *TEST.STATUS=0TEST.MSG="Success"PRINT "":TEST[1,15]"L(#15)":RETURN*end.test: *PRINT "  ":TEST.MSG[1,50]"L(#50)":PRINT " ":PRE=''; AFT=''BEGIN CASE   CASE TEST.STATUS=2; ERROR="Warning"; PRE=''; AFT=''   CASE TEST.STATUS; ERROR="Passed"   CASE 1; ERROR="Passed"; PRE=@(-13); AFT=@(-14)END CASEPRINT PRE:"[":PRINT ERROR"L(#7)":PRINT "]":AFTRETURN 000CDEMVDBTOOLKIT.WCALLBODY.JSON0c2{  "method": "POST",   "debug": "N",   "url": "https://httpbin.org/anything?field1=value1",   "insecure": "N",   "headers": {    },   "Content-Type": "application/json",   "body": "{  \"test\": \"value\"  }",   "response": {    "headers": {      "Date": "Thu, 30 Apr 2020 05:09:09 GMT",       "Content-Type": "application/json",       "Content-Length": "608",       "Connection": "keep-alive",       "Server": "gunicorn/19.9.0",       "Access-Control-Allow-Origin": "*",       "Access-Control-Allow-Credentials": "true"      },     "status": 200,     "http_type": "HTTP/1.1",     "statusmsg": "OK",     "log": [      "* About to connect() to httpbin.org port 443 (#0)",       "*   Trying 34.230.193.231... connected",       "* Connected to httpbin.org (34.230.193.231) port 443 (#0)",       "* Initializing NSS with certpath: sql:/etc/pki/nssdb",       "*   CAfile: /etc/pki/tls/certs/ca-bundle.crt",       "  CApath: none",       "* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",       "* Server certificate:",       "* 	subject: CN=httpbin.org",       "* 	start date: Jan 18 00:00:00 2020 GMT",       "* 	expire date: Feb 18 12:00:00 2021 GMT",       "* 	common name: httpbin.org",       "* 	issuer: CN=Amazon,OU=Server CA 1B,O=Amazon,C=US",       "> POST /anything?field1=value1 HTTP/1.1",       "",       "> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",       "",       "> Host: httpbin.org",       "",       "> Accept: */*",       "",       "> Content-Length: 26",       "",       "> Content-Type: application/x-www-form-urlencoded",       "",       "> ",       "",       "} [data not shown]",       "< HTTP/1.1 200 OK",       "",       "< Date: Thu, 30 Apr 2020 05:09:09 GMT",       "",       "< Content-Type: application/json",       "",       "< Content-Length: 608",       "",       "< Connection: keep-alive",       "",       "< Server: gunicorn/19.9.0",       "",       "< Access-Control-Allow-Origin: *",       "",       "< Access-Control-Allow-Credentials: true",       "",       "< ",       "",       "{ [data not shown]",       "* Connection #0 to host httpbin.org left intact",       "* Closing connection #0"      ],     "data": "{  \"args\": {    \"field1\": \"value1\"  },   \"data\": \"\",   \"files\": {},   \"form\": {    \"{\\r\\n  \\\"test\\\": \\\"value\\\"\\r\\n  }\\n\": \"\"  },   \"headers\": {    \"Accept\": \"*/*\",     \"Content-Length\": \"26\",     \"Content-Type\": \"application/x-www-form-urlencoded\",     \"Host\": \"httpbin.org\",     \"User-Agent\": \"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2\",     \"X-Amzn-Trace-Id\": \"Root=1-5eaa5d75-49623fd72c6a4d01cec7a532\"  },   \"json\": null,   \"method\": \"POST\",   \"origin\": \"98.173.13.82\",   \"url\": \"https://httpbin.org/anything?field1=value1\"}",     "curl_cmnd": "curl -s -m 45 -X POST -D \"/tmp/WCALL-1.headers\" -v --stderr \"/tmp/WCALL-1.stderr\" --data-binary \"@/tmp/WCALL-1.body\" \"https://httpbin.org/anything?field1=value1\""    }  }000EA0MVDBTOOLKIT.WCALL.JSON0c2{  "method": "POST",   "debug": "N",   "url": "https://httpbin.org/anything?field1=value1",   "insecure": "Y",   "headers": {    "X-TEST-HEADER": "headertest"    },   "formfields": [    {      "name": "field2",       "value": "VALUE2$"      },     {      "name": "field3",       "value": "<EXAMPLE HTML>"      }    ],   "response": {    "headers": {      "Date": "Thu, 30 Apr 2020 05:09:09 GMT",       "Content-Type": "application/json",       "Content-Length": "693",       "Connection": "keep-alive",       "Server": "gunicorn/19.9.0",       "Access-Control-Allow-Origin": "*",       "Access-Control-Allow-Credentials": "true"      },     "status": 200,     "http_type": "HTTP/1.1",     "statusmsg": "OK",     "log": [      "* About to connect() to httpbin.org port 443 (#0)",       "*   Trying 34.230.193.231... connected",       "* Connected to httpbin.org (34.230.193.231) port 443 (#0)",       "* Initializing NSS with certpath: sql:/etc/pki/nssdb",       "*   CAfile: /etc/pki/tls/certs/ca-bundle.crt",       "  CApath: none",       "* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",       "* Server certificate:",       "* 	subject: CN=httpbin.org",       "* 	start date: Jan 18 00:00:00 2020 GMT",       "* 	expire date: Feb 18 12:00:00 2021 GMT",       "* 	common name: httpbin.org",       "* 	issuer: CN=Amazon,OU=Server CA 1B,O=Amazon,C=US",       "> POST /anything?field1=value1 HTTP/1.1",       "",       "> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",       "",       "> Host: httpbin.org",       "",       "> Accept: */*",       "",       "> X-TEST-HEADER: headertest",       "",       "> Content-Length: 257",       "",       "> Expect: 100-continue",       "",       "> Content-Type: multipart/form-data; boundary=----------------------------9f61f37bacb1",       "",       "> ",       "",       "< HTTP/1.1 100 Continue",       "",       "} [data not shown]",       "< HTTP/1.1 200 OK",       "",       "< Date: Thu, 30 Apr 2020 05:09:09 GMT",       "",       "< Content-Type: application/json",       "",       "< Content-Length: 693",       "",       "< Connection: keep-alive",       "",       "< Server: gunicorn/19.9.0",       "",       "< Access-Control-Allow-Origin: *",       "",       "< Access-Control-Allow-Credentials: true",       "",       "< ",       "",       "{ [data not shown]",       "* Connection #0 to host httpbin.org left intact",       "* Closing connection #0"      ],     "data": "{  \"args\": {    \"field1\": \"value1\"  },   \"data\": \"\",   \"files\": {},   \"form\": {    \"field2\": \"VALUE2$\",     \"field3\": \"<EXAMPLE HTML>\"  },   \"headers\": {    \"Accept\": \"*/*\",     \"Content-Length\": \"257\",     \"Content-Type\": \"multipart/form-data; boundary=----------------------------9f61f37bacb1\",     \"Host\": \"httpbin.org\",     \"User-Agent\": \"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2\",     \"X-Amzn-Trace-Id\": \"Root=1-5eaa5d75-64172de2a2432626bf6a5f61\",     \"X-Test-Header\": \"headertest\"  },   \"json\": null,   \"method\": \"POST\",   \"origin\": \"98.173.13.82\",   \"url\": \"https://httpbin.org/anything?field1=value1\"}",     "curl_cmnd": "curl -s -m 45 -X POST -H \"X-TEST-HEADER: headertest\" -D \"/tmp/WCALL-1.headers\" -v --stderr \"/tmp/WCALL-1.stderr\" --form-string field2=\"VALUE2$\" --form-string field3=\"<EXAMPLE HTML>\" \"https://httpbin.org/anything?field1=value1\""    }  }00131FMVDBTOOLKIT.WFILEIO0c2SUBROUTINE MVDBTOOLKIT.WFILEIO(INOBJ)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 7th 2018* Description: WFILEIO MULTI PLATFORM WORKING WITH O/S FILES************************************************************************* INOBJ** { "ACTION":"READ,WRITE,DELETE",*   "PATH":"PATH TO THE FILE",*   "DATA":"DATA FOR A WRITE",*   "dosletter":"OPTIONAL DOS LETTER TO ADD TO PATH",*   "NEWLINE":"CR,LF,CRLF,DOS,UNIX",*   "PERMISSIONS":"TBD"*   "response": {*       "data":"responsedata",*       "status":1-ok, else no,*       "statusmsg":"statusmsg" *   }* }** need to know the existing platform*PLATFORM.DELIM="\"*PLATFORM.TYPE="WINDOWS"*PLATFORM.MV="D3"CALL MVDBTOOLKIT.WPLATFORM(POBJ)INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL @WOBJ.RTNE(POBJ,"GET","mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM.TYPE,"",RERR)FSTATUS=1FSTATUSMSG="OK"CALL @WOBJ.RTNE(INOBJ,"GET","action",FILEIO.ACTION,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","path",FILEIO.PATH,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","data",FILEIO.DATA,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","dosletter",FILEIO.DOSLETTER,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","newline",FILEIO.NEWLINE,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","permissions",FILEIO.PERMISSIONS,"",RERR)*CALL @WOBJ.RTNE(OUTOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(INOBJ,"SET.OBJECT","response","{}","",RERR)FILEIO.ACTION=OCONV(FILEIO.ACTION,"MCU")FILEIO.NEWLINE=OCONV(FILEIO.NEWLINE,"MCU")IF FILEIO.ACTION = "" THEN    FSTATUS=0    FSTATUSMSG="No action defined"    GOTO end.of.runENDIF FILEIO.PATH = "" THEN    FSTATUS=0    FSTATUSMSG="No path defined"    GOTO end.of.runENDPARSED.FILEIO.PATH=""L=LEN(FILEIO.PATH)FOR X=1 TO L   C=FILEIO.PATH[X,1]   IF C=PLATFORM.DELIM THEN      PARSED.FILEIO.PATH:=@AM   END ELSE      PARSED.FILEIO.PATH:=C   ENDNEXT X*PARSED.FILEIO.PATH=EXCHANGE(FILEIO.PATH,PLATFORM.DELIM,@AM)PARSED.FILEIO.PATH=FILEIO.PATHCONVERT PLATFORM.DELIM TO @AM IN PARSED.FILEIO.PATHPARSED.FILEIO.PARTS=DCOUNT(PARSED.FILEIO.PATH,@AM)* JBASE DOES NOT APPEAR TO HONOR WINDOWS ENVIROMENT VARIABLES IN THE OPEN* THIS IS MAKING %USERPROFILE% NOT WORK** WE ARE GOING TO LOOP THRU THE THE PARTS AN EXPAND THEM OURSELVES** THIS HAS BEEN TESTED ON JBASE WINDOWS SO FAR.*FOR P=1 TO PARSED.FILEIO.PARTS    THIS.PART=PARSED.FILEIO.PATH<P>    IF THIS.PART[1,1]='%' OR THIS.PART[1,1]="$" THEN        CONVERT '%$' TO '' IN THIS.PART * 9/4/2019 PAP Modified this to use mvdbtoolkit.wgetenv  *       IF GETENV(THIS.PART,NEW.THIS.PART) THEN *           PARSED.FILEIO.PATH<P>=NEW.THIS.PART *       END         CALL MVDBTOOLKIT.WGETENV(THIS.PART,NEW.THIS.PART)         IF NEW.THIS.PART # "" THEN PARSED.FILEIO.PATH<P>=NEW.THIS.PART    ENDNEXT PPARSED.FILEIO.FILE.NAME=PARSED.FILEIO.PATH<PARSED.FILEIO.PARTS>FILEIO.JUST.PATH=DELETE(PARSED.FILEIO.PATH,PARSED.FILEIO.PARTS)*FILEIO.JUST.PATH=EXCHANGE(FILEIO.JUST.PATH,@AM,PLATFORM.DELIM)CONVERT @AM TO PLATFORM.DELIM IN FILEIO.JUST.PATHCALL @WOBJ.RTNE(INOBJ,"SET.OBJECT","work","{}","",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.parsed_fileio_file_name",PARSED.FILEIO.FILE.NAME,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.fileio_just_path",FILEIO.JUST.PATH,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.platform",PLATFORM.TYPE,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET.OBJECT","response","{}","",RERR)* lets have a seperate routine for each platformBEGIN CASE    CASE FILEIO.ACTION="READ"    CASE FILEIO.ACTION="WRITE"    CASE FILEIO.ACTION="DELETE"    CASE 1        FSTATUS=0        FSTATUSMSG="Invalid action"        CALL @WOBJ.RTNE(INOBJ,"SET.NUMBER", "response.status", FSTATUS,"",RERR)        CALL @WOBJ.RTNE(INOBJ,"SET.STRING", "response.statusmsg", FSTATUSMSG, "", RERR)        GOTO end.of.runEND CASEBEGIN CASE    CASE PLATFORM.MV="D3"        FILEIO.RTNE="MVDBTOOLKIT.WFILEIO.D3"        CALL MVDBTOOLKIT.WFILEIO.D3(INOBJ)    CASE PLATFORM.MV="JBASE"        FILEIO.RTNE="MVDBTOOLKIT.W.FILEIO.JBASE"        CALL MVDBTOOLKIT.WFILEIO.JBASE(INOBJ)    CASE PLATFORM.MV="UNIVERSE"        FILEIO.RTNE="MVDBTOOLKIT.WFILEIO.UNIVERSE"        CALL MVDBTOOLKIT.WFILEIO.UNIVERSE(INOBJ)    CASE PLATFORM.MV="UNIDATA"        FILEIO.RTNE="MVDBTOOLKIT.WFILEIO.UNIDATA"        CALL MVDBTOOLKIT.WFILEIO.UNIDATA(INOBJ)    CASE PLATFORM.MV="QM"        * QM SUPPORTS OPENPATH        CALL MVDBTOOLKIT.WFILEIO.QM(INOBJ)   CASE 1        DEBUG        FSTATUS=0        FSTATUSMSG="Invalid Platform ":PLATFORM.MV        GOTO end.of.runEND CASEend.of.run: *RETURN0002CDMVDBTOOLKIT.TEST.JSON0c2{  "args": {    "field1": "value1"  },   "data": "",   "files": {},   "form": {    "field2": "VALUE2$",     "field3": "<EXAMPLE HTML>"  },   "headers": {    "Accept": "*/*",     "Content-Length": "257",     "Content-Type": "multipart/form-data; boundary=----------------------------9f61f37bacb1",     "Host": "httpbin.org",     "User-Agent": "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",     "X-Amzn-Trace-Id": "Root=1-5eaa5d75-64172de2a2432626bf6a5f61",     "X-Test-Header": "headertest"  },   "json": null,   "method": "POST",   "origin": "98.173.13.82",   "url": "https://httpbin.org/anything?field1=value1"}00027CMVDBTOOLKIT.TESTBODY.JSON0c2{  "args": {    "field1": "value1"  },   "data": "",   "files": {},   "form": {    "{\r\n  \"test\": \"value\"\r\n  }\n": ""  },   "headers": {    "Accept": "*/*",     "Content-Length": "26",     "Content-Type": "application/x-www-form-urlencoded",     "Host": "httpbin.org",     "User-Agent": "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",     "X-Amzn-Trace-Id": "Root=1-5eaa5d75-49623fd72c6a4d01cec7a532"  },   "json": null,   "method": "POST",   "origin": "98.173.13.82",   "url": "https://httpbin.org/anything?field1=value1"}00005EMVDBTOOLKIT.SWAP.DEFAULT0c2SUBROUTINE MVDBTOOLKIT.SWAP.DEFAULT(V,F,T)V=SWAP(V,F,T)RETURN00033CMVDBTOOLKIT.WGETENV0c2SUBROUTINE MVDBTOOLKIT.WGETENV(VAR.NAME,RETURN.VALUE)INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL MVDBTOOLKIT.WPLATFORM(POBJ)CALL @WOBJ.RTNE(POBJ,"GET","mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM.TYPE,"",RERR)* THIS FUNCTION IS A CROSS PLATFORM WGET VAR FUNCTIONBEGIN CASE    CASE PLATFORM.MV="D3" AND PLATFORM.TYPE="LINUX"        FILEIO.RTNE="MVDBTOOLKIT.WGETENV.D3"        CALL MVDBTOOLKIT.WGETENV.D3(VAR.NAME,RETURN.VALUE)    CASE PLATFORM.MV="JBASE"        FILEIO.RTNE="MVDBTOOLKIT.WGETENV.JBASE"        CALL MVDBTOOLKIT.WGETENV.JBASE(VAR.NAME,RETURN.VALUE)    CASE 1        CALL MVDBTOOLKIT.WGETENV.GENERIC(VAR.NAME,RETURN.VALUE,PLATFORM.MV,PLATFORM.TYPE)END CASEend.of.run: *RETURN000156MVDBTOOLKIT.WEXECUTE.INCLUDE0c2* COMMON FOR EXECUTE *COMMON /MVDBWEX/ EXECUTE.COMMANDCOMMON /MVDBWEX/ EXECUTE.DIRECTORYCOMMON /MVDBWEX/ EXECUTE.DOCAPTURECOMMON /MVDBWEX/ EXECUTE.RETURNINGCOMMON /MVDBWEX/ EXECUTE.RTNDATACOMMON /MVDBWEX/ EXECUTE.PASSLISTCOMMON /MVDBWEX/ MV.TYPECOMMON /MVDBWEX/ PLATFORMCOMMON /MVDBWEX/ EXECUTE.DEBUG000498MVDBTOOLKIT.WEXECUTE.D30c2SUBROUTINE MVDBTOOLKIT.WEXECUTE.D3(EOBJ)INCLUDE MVDBTOOLKIT.WEXECUTE.INCLUDE************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 12, 2018* Description: Execute library JBASE VERSION***********************************************************************INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJE.RESULTS=""E.RETURNING=""E.RTNDATA=""BEGIN CASE    CASE EXECUTE.DOCAPTURE="N"        EXECUTE '!':EXECUTE.COMMAND     CASE 1        EXECUTE '!':EXECUTE.COMMAND CAPTURING E.RESULTEND CASEIF EXECUTE.DEBUG="1"OR OCONV(EXECUTE.DEBUG[1,1],'MCU')='Y' THEN   WRITE.DEBUG=1   OPEN 'RESULT.FILE' TO RFILE ELSE WRITE.DEBUG=0   IF WRITE.DEBUG THEN       WRITE EXECUTE.COMMAND ON RFILE, 'WEXECUTE'   ENDENDCONVERT CHAR(0) TO '' IN E.RESULTCONVERT CHAR(255) TO '' IN E.RESULTCALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)IF MV.TYPE='UNIDATA' THEN E.RESULT=E.RESULT[1,LEN(E.RESULT)-1]CALL @WOBJ.RTNE(EOBJ,"SET.STRING","result.result",E.RESULT,"",RERR)RETURN0004E5MVDBTOOLKIT.WGETENV.GENERIC0c2SUBROUTINE MVDBTOOLKIT.WGETENV.GENERIC(VAR.NAME, RETURN.VALUE, MVTYPE, PLATFORM)RETURN.VALUE=""* WE ARE GOING TO JUST SHELL OUT AND GET THE ENVIRONMENT VARIABLE BASED* ON THE PLATFORMBEGIN CASE    CASE MVTYPE="UNIVERSE" AND PLATFORM="LINUX"        CMND='sh -c "echo $':VAR.NAME:'"'    CASE MVTYPE="UNIVERSE" AND PLATFORM="WINDOWS"        CMND='dos /c "echo %':VAR.NAME:'%"'    CASE (MVTYPE="JBASE" OR MVTYPE="D3") AND PLATFORM="LINUX"        CMND='!echo $':VAR.NAME    CASE MVTYPE="JBASE" AND PLATFORM="WINDOWS"         CMND='echo %':VAR.NAME:'%'    CASE MVTYPE="D3" AND PLATFORM="WINDOWS"        CMND='!echo %':VAR.NAME:'%'    CASE MVTYPE='UNIDATA' AND PLATFORM="WINDOWS"        CMND='!echo %':VAR.NAME:'%'    CASE MVTYPE='UNIDATA' AND PLATFORM="LINUX"        CMND='!echo $':VAR.NAME    CASE MVTYPE='QM' AND PLATFORM="WINDOWS"        * QM DOES HAVE SYSTEM(1025) TO GET ENVIRONMENT STUFF        * STICKING WITH THIS FOR NOW        CMND='!echo %':VAR.NAME:'%'    CASE MVTYPE='QM' AND PLATFORM="LINUX"        CMND='!echo $':VAR.NAME    CASE 1        CMND=''END CASEEXECUTE CMND CAPTURING RETURN.VALUEIF MVTYPE='UNIDATA' THEN    RETURN.VALUE=RETURN.VALUE[1,LEN(RETURN.VALUE)-1]ENDRETURN000322MVDBTOOLKIT.EXPAND.PATH0c2SUBROUTINE MVDBTOOLKIT.EXPAND.PATH(PASSED.PATH)INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL MVDBTOOLKIT.WPLATFORM(POBJ)CALL @WOBJ.RTNE(POBJ,"GET","mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM.TYPE,"",RERR)PARSED.PATH=PASSED.PATHCONVERT PLATFORM.DELIM TO @AM IN PARSED.PATHPARSED.PARTS=DCOUNT(PARSED.PATH,@AM)FOR P=1 TO PARSED.PARTS    THIS.PART=PARSED.PATH<P>    IF THIS.PART[1,1]='%' OR THIS.PART[1,1]="$" THEN        CONVERT '%$' TO '' IN THIS.PART         CALL MVDBTOOLKIT.WGETENV(THIS.PART,NEW.THIS.PART)         IF NEW.THIS.PART # "" THEN PARSED.PATH<P>=NEW.THIS.PART    ENDNEXT PCONVERT @AM TO PLATFORM.DELIM IN PARSED.PATHPASSED.PATH=PARSED.PATHRETURN000044MVDBTOOLKIT.TEST.INCLUDE0c2CMND = SENTENCE(); * D3 sentence command0001E1MVDBTOOLKIT.SWAP0c2SUBROUTINE MVDBTOOLKIT.SWAP(V,F,T)* MVDBTOOLKIT.SWAPINCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ* PLATFORM INDEPENDENT SWAP COMMANDCALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)BEGIN CASE    CASE MV.TYPE='UNIVERSE'        CALL MVDBTOOLKIT.SWAP.UNIVERSE(V,F,T)    CASE MV.TYPE='UNIDATA'        CALL MVDBTOOLKIT.SWAP.UNIDATA(V,F,T)    CASE 1        CALL MVDBTOOLKIT.SWAP.DEFAULT(V,F,T)END CASERETURN000778MVDBTOOLKIT.WPLATFORM0c2      SUBROUTINE MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)      **********************************************************************      *      * Copyright (C) 2017 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: June 12, 2018      * Description: WPLATFORM OBJ      *      **********************************************************************      *      *      * PLATFORMOBJ      *      * {      *   "platform":" WINDOWS OR LINUX",      *   "mvtype"  :" JBASE, D3, UNIDATA, UNIVERSE, OPENQM",      *   "tmpdir"  :"tmp dir"      * }      * nEW lINE      INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ            USE.DICT=1      OPEN "DICT","MVDBTOOLKIT.BP" TO DICT.MVDBTOOLKIT.BP ELSE USE.DICT=0      IF USE.DICT THEN         READ PLATFORMOBJ.JSON FROM DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON" ELSE PLATFORMOBJ.JSON=""      END      OPEN "MD" TO FI.MD ELSE         OPEN "VOC" TO FI.MD ELSE RETURN      END      * 02/06/2020 - Changed md item name to MV.PLATFORM.JSON to make it not tied to this package            IF PLATFORMOBJ.JSON="" THEN         CRT "No MV.PLATFORM.JSON IN MD!!!"         STOP      END      CONVERT CHAR(254) TO '' IN PLATFORMOBJ.JSON      CALL @WOBJ.RTNE(PLATFORMOBJ,"FROMSTRING","",PLATFORMOBJ.JSON,"",RERR)      * 9/2/2019 PAP - We now figure out filedelim vs passing it in original config filedelim      CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)      IF PLATFORM="WINDOWS" THEN DELIM = "\" ELSE DELIM = "/"      CALL @WOBJ.RTNE(PLATFORMOBJ,"SET","filedelim",DELIM,"",RERR)      CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","tmpdir",TMP.DIR,"",RERR)      CALL @WOBJ.RTNE(PLATFORMOBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR)      WRITE OUT.JSON ON DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON"      RETURN0006D0MVDBTOOLKIT.ENCODE0c2SUBROUTINE MVDBTOOLKIT.ENCODE(IN.STR,OUT.STR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: encode json string*************************************************************************** THIS PROGRAM WILL CONVERT ALL BAD CHARACTERS TO AN ESCAPED CHARACTER***EQU CR TO CHAR(13), LF TO CHAR(10), TB TO CHAR(9), BS TO CHAR(8), FF TO CHAR(12)NL = CR:LFPRETTIFYCR=""**OPEN 'RESULT.FILE' TO RFILE ELSE STOP* WE NEED TO ENCODE* " = \"   (34)* \ = \\    (92)* / = \/* CHAR(7) = \b* CHAR(13) = \r* char(10) = \n* char(12) = \f* char(9)  = \tOUT.STR=''L=LEN(IN.STR)CONVERT @AM TO LF IN IN.STR; * LETS SWITCH 254 TO LF BE DEFAULTFOR X=1 TO L    C=IN.STR[X,1]    SEQ.C=SEQ(C)    ENCODE=0    *IF SEQ.C < 32 THEN ENCODE=1; * BELOW SPACE    *IF SEQ.C > 32 AND SEQ.C < 48 THEN ENCODE=1; * LETS ENCODE ALL OF THIS !@$%^&*()    IF SEQ.C=34 THEN ENCODE=1    IF SEQ.C=92 THEN ENCODE=1    * IF SEQ.C=47 THEN ENCODE=1    *IF SEQ.C > 126 THEN ENCODE = 1; * LETS ENCODE ALL THE HIGH ENTRIES    *IF SEQ.C >= 91 AND SEQ.C <= 96 THEN ENCODE=1    IF ENCODE THEN        BEGIN CASE            CASE SEQ.C=7; OUT.STR='\b'            CASE C='\'; OUT.STR:='\\'                *CASE C='/'; OUT.STR:='\/'            CASE C='"'; OUT.STR:='\"'            CASE SEQ.C=10                OUT.STR:='\n'                IF PRETTIFYCR THEN OUT.STR:=NL            CASE SEQ.C=13; OUT.STR:='\r'            CASE SEQ.C=12; OUT.STR:='\f'            CASE 1; OUT.STR:='\u00':OCONV(C,'MX0C')        END CASE    END ELSE        OUT.STR=OUT.STR:C    ENDNEXT XRETURNEND002A1DMVDBTOOLKIT.WCALL0c2SUBROUTINE MVDBTOOLKIT.WCALL(PASSED.WOBJ)************************************************************************ Copyright (C) 2018 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 15, 2018* Description: WCALL Library************************************************************************ @WOBJ.RTNE* { "method":"GET,PUT,POST,ETC",*    "url":"URL TO CALL",*    "headers": { "HEADERNAME":"VALUE", "HEADERNAME":"VALUE" },*    "body":"BODY",*    "formfields": [*         {*            "name":"field name",*            "value":"field value",*            "fieldtype":"blank or file" for now*         }*     ],*    "datafields": [*         {*            "name":"field name",*            "value":"field value",*            "fieldtype":"blank or file" for now*         }*     ],*    "insecure":"Yes,Y,YES - Sets the -k on curl",*    "timeout": ## (default is 45),*    "options":"options to add to curl command",*    "debug":"Y or N",*    "response": {*        "result":"RESULT",*        "status":"STATUS",*        "statusmsg":"STATUS MSG",*        "http_type": "http type",*        "curl_cmnd":"Actual curl command created",*         "error": "error",*         "log": [ "log output line1", "log output line 2" ],*        "headers": { "headername":"header value","headername2":"headervalue" }*    }*  }INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL MVDBTOOLKIT.WPLATFORM(POBJ)CALL @WOBJ.RTNE(POBJ,"GET","mvtype",MV.TYPE,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",FILE.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","curllocation",CURLLOCATION,"",RERR); * change #19IF MV.TYPE="" THEN   CALL @WOBJ.RTNE(POBJ,"GET","error",THIS.ERROR,"",RERR)   PRINT "NO MV TYPE: ":THIS.ERROR   RETURNENDITEMS.TO.DELETE=""; * PATH TO EACH FILE TO DELETECALL @WOBJ.RTNE(POBJ,"GET","tmpdir",TMP.DIR,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","debug",DO.DEBUG,"",RERR)IF OCONV(DO.DEBUG[1,1],"MCU")="Y" OR DO.DEBUG="1" THEN DO.DEBUG=1 ELSE DO.DEBUG=""CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","method",WEB.METHOD,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","url",WEB.URL,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","body",WEB.BODY,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","timeout",WEB.TIMEOUT,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"KEYS","headers",WEB.HEADERS,"",RERR)IF NOT(WEB.TIMEOUT) THEN WEB.TIMEOUT=45CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","insecure",WEB.INSECURE,"",RERR)IF OCONV(WEB.INSECURE[1,1],'MCU') = "Y" THEN WEB.INSECURE=1 ELSE WEB.INSECURE=0CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.OBJECT","response","{}","",RERR)IF TMP.DIR="" THEN BEGIN CASE    CASE PLATFORM="LINUX"       TMP.DIR="/tmp"    CASE INDEX(PLATFORM,"WINDOWS",1) AND MV.TYPE="JBASE"       TMP.DIR="%HOME%"    CASE INDEX(PLATFORM,"WINDOWS",1)       TMP.DIR="%USERPROFILE%\AppData\Local\Temp"    CASE 1       TMP.DIR="/tmp" END CASEENDCALL MVDBTOOLKIT.EXPAND.PATH(TMP.DIR)* 4/6/2020 - Change #19.  IF CURLLOCATION # "" THEN   CMND=CURLLOCATIONEND ELSE   CMND="curl"ENDCMND:=" -s"CMND:=' -m ':WEB.TIMEOUTCMND:=' -X ':WEB.METHODCALL @WOBJ.RTNE(PASSED.WOBJ,"GET","options",WEB.OPTIONS,"",RERR)IF WEB.OPTIONS # "" THEN   CMND:=' ':WEB.OPTIONSENDWEB.NUM.HEADERS=DCOUNT(WEB.HEADERS,@SVM)FOR H=1 TO WEB.NUM.HEADERS   HEADER.NAME=WEB.HEADERS<1,1,H>   CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","headers.":HEADER.NAME,HEADER.VALUE,"",RERR)   CALL MVDBTOOLKIT.ENCODE(HEADER.VALUE,ENCODED.HEADER.VALUE)   CMND:=' -H "':HEADER.NAME:': ':ENCODED.HEADER.VALUE:'"'NEXT HUSER.NO=FIELD(OCONV('','U50BB'),' ',1)SESSION.ID="WCALL-":USER.NOTMP.DIR:=FILE.DELIM* add in dumping of headersCMND:=\ -D "\:TMP.DIR:SESSION.ID:\.headers"\ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:'.headers'* write out stderrCMND:=\ -v --stderr "\:TMP.DIR:SESSION.ID:\.stderr"\ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:\.stderr\CALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)SAVE.FOBJ=FOBJIF WEB.BODY # "" THEN   *CALL @WOBJ.RTNE(EOBJ,"SET.ARRAY","data","[]","",RERR)   *CALL @WOBJ.RTNE(EOBJ,"SET.STRING","data[0]",WEB.BODY,"",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","data",WEB.BODY,"",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:'.body',"",RERR)   ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:'.body'   CALL MVDBTOOLKIT.WFILEIO(FOBJ)   CMND:=' --data-binary "@':TMP.DIR:SESSION.ID:'.body"'   *CMND:='  --data-binary @-'END* form fields *CALL @WOBJ.RTNE(PASSED.WOBJ,"LENGTH","formfields",NUM.FORMFIELDS,"",RERR)FOR X=1 TO NUM.FORMFIELDS P="formfields[":X-1:"]" CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.name',FIELD.NAME,"",RERR) CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.value',FIELD.VALUE,"",RERR) CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.fieldtype',FIELD.TYPE,"",RERR) IF TRIM(FIELD.NAME) # "" THEN    * < > @ ALL MEAN SPECIAL THINGS WITH A -F.  If that exists in the file you need    * to use --form-string    BEGIN CASE       CASE INDEX(FIELD.VALUE,CHAR(13),1) OR INDEX(FIELD.VALUE,CHAR(10),1)         * WE NEED TO WRITE THIS OUT!         TMP.CMND="-F "            CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)            CALL @WOBJ.RTNE(FOBJ,"SET","data",FIELD.VALUE,"",RERR)            CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:'.field':X-1,"",RERR)            ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:'.field':X-1            FIELD.VALUE="@":TMP.DIR:SESSION.ID:'.field':X-1            CALL MVDBTOOLKIT.WFILEIO(FOBJ)         * NEED TO WRITE THE CONTENT OUT TO A TMP FILE *       CASE INDEX(FIELD.VALUE,'!',1) OR INDEX(FIELD.VALUE,'<',1) OR INDEX(FIELD.VALUE,'>',1) OR INDEX(FIELD.VALUE,'@',1) OR INDEX(FIELD.VALUE,'$',1) AND FIELD.TYPE # "file"         TMP.CMND="--form-string "       CASE 1         TMP.CMND="-F "    END CASE    TMP.CMND:=FIELD.NAME:'="'    TMP.CMND:=FIELD.VALUE:'"'    CMND:=' ':TMP.CMND ENDNEXT X* form fields *CALL @WOBJ.RTNE(PASSED.WOBJ,"LENGTH","datafields",NUM.FORMFIELDS,"",RERR)FOR X=1 TO NUM.FORMFIELDS      P="datafields[":X-1:"]"      CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.name',FIELD.NAME,"",RERR)      CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.value',FIELD.VALUE,"",RERR)      CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.fieldtype',FIELD.TYPE,"",RERR)      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,'@','%40')      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,'$','%24')      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,'/','%2F')      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,':','%3A')      IF TRIM(FIELD.NAME) # "" THEN         TMP.CMND="-d "         TMP.CMND:=FIELD.NAME:'="'         TMP.CMND:=FIELD.VALUE:'"'         CMND:=' ':TMP.CMND      ENDNEXT X* NOW ADD THE URLCALL MVDBTOOLKIT.SWAP(WEB.URL,' ','%20')CALL MVDBTOOLKIT.SWAP(WEB.URL,'@','%40')CALL MVDBTOOLKIT.SWAP(WEB.URL,'$','%24')*WEB.URL=SWAP(WEB.URL,'/','%2F')CMND:=' "':WEB.URL:'"'* CALL WEXECUTECALL @WOBJ.RTNE(EOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(EOBJ,"SET","command",CMND,"",RERR)CALL @WOBJ.RTNE(EOBJ,"SET","debug",DO.DEBUG,"",RERR); * LAY IN DEBUGGING PARAMIF WEB.BODY # "" THEN   * CALL @WOBJ.RTNE(EOBJ,"SET","data[0]",WEB.BODY,"",RERR)ENDCALL MVDBTOOLKIT.WEXECUTE(EOBJ); * DO THE CALL* READ IN THE HEADERSCALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:".headers","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.HEADERS,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.headers",RESPONSE.HEADERS,"",RERR)* Lets break the headers down into an arrayCALL @WOBJ.RTNE(PASSED.WOBJ,"SET.OBJECT","response.headers","{}","",RERR)NUM.HEADERS=DCOUNT(RESPONSE.HEADERS,@AM)HTTP.TYPE=''; HTTP.STATUS.CODE=''; HTTP.MSG=''FOR H=1 TO NUM.HEADERS   HEADER.LINE=RESPONSE.HEADERS<H>   IF HEADER.LINE[1,4]="HTTP" AND NOT(INDEX(HEADER.LINE,":",1)) THEN      HTTP.TYPE=FIELD(HEADER.LINE,' ',1)      HTTP.STATUS.CODE=FIELD(HEADER.LINE,' ',2)      HTTP.STATUS.MSG=FIELD(HEADER.LINE,' ',3,99)   END ELSE      HEADER.NAME=TRIM(FIELD(HEADER.LINE,':',1))      CONVERT CHAR(13):CHAR(10) TO '' IN HEADER.NAME; * CATCHES BLANK LINES      HEADER.VALUE=FIELD(HEADER.LINE,':',2,999999)      IF  HEADER.VALUE[1,1]=' ' THEN HEADER.VALUE=HEADER.VALUE[2,LEN(HEADER.VALUE)]; * messy left trim      CONVERT CHAR(13):CHAR(10) TO '' IN HEADER.VALUE; * STRIP AN NEW LINES      IF HEADER.NAME # "" THEN         * NOW PUT THE HEADER INTO OUR ARRAY         CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.headers.":HEADER.NAME,HEADER.VALUE,"",RERR)      END   ENDNEXT HCALL @WOBJ.RTNE(PASSED.WOBJ,"SET.NUMBER","response.status",HTTP.STATUS.CODE,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.http_type",HTTP.TYPE,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.statusmsg",HTTP.STATUS.MSG,"",RERR)* READ IN STDERR (LOG) AND POST AS A ARRAYFOBJ=SAVE.FOBJCALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:'.stderr',"",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.STDERR,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.ARRAY","response.log","[]","",RERR)CONVERT CHAR(13) TO @AM IN RESPONSE.STDERRCONVERT CHAR(10) TO "" IN RESPONSE.STDERRNUM.LINES=DCOUNT(RESPONSE.STDERR,@AM)* 4/2/2020 pap  - Look for bad curl statement!!GOOD.CURL=1CURL.BAD.MSG=""FOR L=1 TO NUM.LINES    LINE=RESPONSE.STDERR<L>    BEGIN CASE      CASE INDEX(LINE,'curl:',1)         * LETS CAPTURE THE FIRST ONE         IF CURL.BAD.MSG = "" THEN CURL.BAD.MSG=TRIM(FIELD(LINE,':',2,999))         GOOD.CURL=0      CASE INDEX(LINE,'warning:',1)    END CASE    CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.log[-1]",LINE,"",RERR)NEXT LIF NOT(GOOD.CURL) THEN   CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.NUMBER","response.status","400","",RERR)   CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.statusmsg",CURL.BAD.MSG,"",RERR)END*CALL @WOBJ.RTNE(EOBJ,"TOSTRING","",TEST.JSON,"PRETTIFY",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","result.result",EXECUTE.RESULT,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.data",EXECUTE.RESULT,"",RERR)end.of.call: ** XDELETE REQUIRED FILESNUM.ITEMS.TO.DELETE=DCOUNT(ITEMS.TO.DELETE,@AM)FOR I=1 TO NUM.ITEMS.TO.DELETE      ITEM.TO.DELETE=ITEMS.TO.DELETE<I>      FOBJ=SAVE.FOBJ      CALL @WOBJ.RTNE(FOBJ,"SET","action","DELETE","",RERR)      CALL @WOBJ.RTNE(FOBJ,"SET","path",ITEM.TO.DELETE,"",RERR)      IF DO.DEBUG THEN         CRT "Normally trying to delete: ":ITEM.TO.DELETE      END ELSE         CALL MVDBTOOLKIT.WFILEIO(FOBJ)      ENDNEXT ICALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.curl_cmnd",CMND,"",RERR)RETURN0001BCMVDBTOOLKIT.WGETENV.D30c2SUBROUTINE MVDBTOOLKIT.WGETENV.D3(VAR.NAME, RETURN.VALUE)RETURN.VALUE=""* Gets and displays the PATH environment variablecfunction unix.builtinpointer=(char*)%getenv(VAR.NAME)if pointer = 0 then   RETURN.VALUE=""end else* We got a C pointer the path variable. Copy it* into pick variable   char path[1024]   %strcpy(path, (char*)pointer)   path = field(path,char(0),1)   RETURN.VALUE=pathendRETURN00018CMVDBTOOLKIT.WOBJ.CHOOSE.WOBJ0c2* Code to determine default wobj library to use* This needs to change for MVDBTOOLKIT build, defaults to WOBJWOBJ.RTNE="WOBJ"NO.MD.FILE=0OPEN "MD" TO FILE.MD ELSE    OPEN "VOC" TO FILE.MD ELSE NO.MD.FILE=1ENDIF NOT(NO.MD.FILE) THEN    READ WOBJ.CONF FROM FILE.MD, "WOBJ.CONF" ELSE WOBJ.CONF=""    IF WOBJ.CONF<3> # "" THEN WOBJ.RTNE=WOBJ.CONF<3>END003E55MVDBTOOLKIT.CONFIG0c2      PRINT @(-1):"MVDBTOOLKIT.CONFIG"      PRINT      COMMON /MVMKCOM/ MVMAKE.SUB.COMMON.INFO      MVMAKE.SUB.COMMON.INFO=""; * DO NOT USE FOR THIS VERSION      IF MVMAKE.SUB.COMMON.INFO="" OR MVMAKE.SUB.COMMON.INFO = "0" THEN         *    CRT "MVDBTOOLKIT.CONFIG MUST BE CALLED FROM MVMAKE"         *    STOP      END      INCLUDE MVDBTOOLKIT.TEST.INCLUDE      INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ      OPEN "DICT","MVDBTOOLKIT.BP" TO DICT.MVDBTOOLKIT.BP ELSE STOP      * 4/29/2020 - pap - This entire excercise it to get MV.PLATFORM.JSON populated the      *                   first time.  MVMAKE already asked the questions, if the file did      *                   not exist those answers will be passed to use via the common.      *                   The reason mvmake cannot fix this is the file to the dictionary      *                   is created later.  If MVmake tries to write it out it has to      *                   read it in properly due to items this process populates, such as      *                   TMPDIR.  If the package does not properly install then      *                   WOBJ may not be available.  Better to do it all here.      *      *                   Therefore we manually read the file, update PLATFORM and MVTYPE      *                   and write it back.  We then call WPLATFORM and move on as normal      READ PLATFORM.JSON FROM DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON" ELSE PLATFORM.JSON="{}"      IF TRIM(PLATFORM.JSON) = "" THEN PLATFORM.JSON="{}"      CALL @WOBJ.RTNE(PLATFORM.OBJ,"FROMSTRING","",PLATFORM.JSON,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",MVTYPE,"",RERR)      IF MVMAKE.SUB.COMMON.INFO<2> # "" THEN PLATFORM=MVMAKE.SUB.COMMON.INFO<2>      IF MVMAKE.SUB.COMMON.INFO<3> # "" THEN MVTYPE=MVMAKE.SUB.COMMON.INFO<3>      IF PLATFORM="" OR MVTYPE="" THEN         ** LETS FIGURE OUT THE PLATFORM **         EXECUTE 'jdiag' CAPTURING RESULT         RESULT=OCONV(RESULT,"MCU")         IF INDEX(RESULT,'JBASE',1) THEN            MVTYPE="JBASE"            OS.POS=INDEX(RESULT,"OS RELEASE",1)            OS.TYPE=RESULT[OS.POS,9999]            OS.TYPE=OS.TYPE<1,1,1>            OS.TYPE=OCONV(OS.TYPE,"MCU")            IF INDEX(OS.TYPE,"WINDOWS",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE 'WHICH' CAPTURING RESULT         RESULT=OCONV(RESULT,"MCU")         IF INDEX(RESULT,"D3",1) THEN            MVTYPE="D3"            IF INDEX(RESULT,"WINDOWS",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE 'CT ERRMSG 335 (N' CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"MVBASE",1) THEN            MVTYPE="MVBASE"; * NOT SUPPORTED            GOTO end.of.mvtype         END         EXECUTE "VERSION" CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"UNIDATA",1) THEN            MVTYPE="UNIDATA"            EXECUTE '!SET' CAPTURING OS.TYPE            OS.TYPE=OCONV(OS.TYPE,'MCU')            IF INDEX(OS.TYPE,"WINDIR",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE "CT VOC QM.ACCOUNTS" CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"QMSYS",1) THEN            MVTYPE="QM"            EXECUTE '!SET' CAPTURING OS.TYPE            OS.TYPE=OCONV(OS.TYPE,'MCU')            IF INDEX(OS.TYPE,"WINDIR",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE 'CT VOC UVPROMPT' CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"1 V",1) THEN            MVTYPE="UNIVERSE"            EXECUTE 'sh -c "pwd"' CAPTURING RESULT            IF INDEX(OCONV(RESULT,"MCU"),"NOT AVAILABLE",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         ENDend.of.mvtype: *         IF PLATFORM="" THEN            PRINT "NO PLATFORM FOUND"; STOP            PRINT "ENTER PLATFORM (LINUX OR WINDOWS)[":PLATFORM:"]: ":; INPUT TMP.ANS            IF TMP.ANS # "" THEN PLATFORM=TMP.ANS            PLATFORM=OCONV(PLATFORM,"MCU")            BEGIN CASE               CASE PLATFORM="WINDOWS"                  D3.PREFIX="dos"                  PLATFORM.DELIM="\"               CASE PLATFORM="LINUX"                  D3.PREFIX="unix"                  PLATFORM.DELIM="/"               CASE 1                  CRT "Invalid Platform ":PLATFORM; STOP            END CASE         END         IF MVTYPE="" THEN            PRINT "NO MVTYPE FOUND"; STOP            PRINT "ENTER MVTYPE (JBASE, QM, D3, UNIVERSE, UNIDATA)[":MVTYPE:"] ":; INPUT TMP.ANS            IF TMP.ANS # "" THEN MVTYPE = TMP.ANS            MVTYPE=OCONV(MVTYPE,"MCU")            BEGIN CASE               CASE MVTYPE="JBASE"               CASE MVTYPE="QM"               CASE MVTYPE="D3"               CASE MVTYPE="UNIVERSE"               CASE MVTYPE="UNIDATA"               CASE 1                  CRT "Invalid MVTYPE"; STOP            END CASE         END      END      MVMAKE.SUB.COMMON.INFO<1>='REBUILD'      MVMAKE.SUB.COMMON.INFO<2>=PLATFORM      MVMAKE.SUB.COMMON.INFO<3>=MVTYPE      PRINT "Platform:      ":PLATFORM      PRINT "MV type :      ":MVTYPE      PRINT      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","mvtype",MVTYPE,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","platform",MVMAKE.SUB.COMMON.INFO<2>,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","mvtype",MVMAKE.SUB.COMMON.INFO<3>,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"TOSTRING","",PLATFORM.JSON,"PRETTIFY",RERR)      CONVERT CHAR(13) TO @AM IN PLATFORM.JSON      CONVERT CHAR(10) TO '' IN PLATFORM.JSON      WRITE PLATFORM.JSON ON DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON"      CALL MVDBTOOLKIT.WPLATFORM(PLATFORM.OBJ)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",MVTYPE,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","filedelim",FILEDELIM,"",RERR)      IF PLATFORM = "" THEN         CRT "No platform configured!!!"; STOP      END      IF MVTYPE = "" THEN         CRT "No MVType configured!!!"; STOP      END      * GET ENVIRONMENT      * Let get our current directory      TEST="pwd"; GOSUB start.test      IF OCONV(PLATFORM,"MCU") = "WINDOWS" THEN         CMND='echo %CD%'      END ELSE         CMND='pwd'      END      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      CONVERT CHAR(13):CHAR(10) TO '' IN CMND.RESULT      TEST.STATUS=1      TEST.MSG=CMND.RESULT      GOSUB end.test      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.PATH,"",RERR)      IF TMP.PATH="" THEN         IF MVMAKE.SUB.COMMON.INFO<5>="" THEN MVMAKE.SUB.COMMON.INFO<5>="mvdbtoolkit"         BEGIN CASE            CASE MVTYPE="D3" AND PLATFORM="LINUX"               * DANG D3 HAS IT'S OWN DANG FILE SYSTEM, LETS JUST CREATE A TMP DIR AND MOVE               TMP.PATH="/tmp"            CASE MVTYPE="D3" AND PLATFORM="LINUX"               TMP.DATH="c:\tmp"               EXECUTE '!mkdir c:\tmp'            CASE OCONV(MVMAKE.SUB.COMMON.INFO<5>,"MCU") = "MVDBTOOLKIT"               * WE HAVE RELATIVE POSITIONING               TMP.PATH=CMND.RESULT:FILEDELIM:"TMP"               MVDBTOOLKIT.LOCATION=CMND.RESULT            CASE 1               TMP.PATH=MVMAKE.SUB.COMMON.INFO<5>:FILEDELIM:"TMP"               MVDBTOOLKIT.LOCATION=MVMAKE.SUB.COMMON.INFO<5>         END CASE      END      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","tmpdir",TMP.PATH,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","mvdbtoolkitlocation",MVDBTOOLKIT.LOCATION,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","curllocation",CURLLOCATION,"",RERR)      TEST='tmpdir'; GOSUB start.test      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.DIR,"",RERR)      TEST.MSG=TMP.DIR      TEST.STATUS=1      IF TMP.DIR="" THEN TEST.STATUS=0      GOSUB end.test      TEST='MVDBTOOLKIT.SWAP'      GOSUB start.test      S='TEST LINE TEST LINE'      ORIG.STRING=S      CALL MVDBTOOLKIT.SWAP(S,"ES","XX")      IF S = "TXXT LINE TXXT LINE" THEN TEST.STATUS=1 ELSE TEST.STATUS=0      TEST.MSG=S      GOSUB end.test      * Test 1 Getenv      TEST="getenv"      GOSUB start.test      CALL MVDBTOOLKIT.WGETENV("PATH",PATH)      IF PATH # "" THEN         TEST.MSG=PATH[1,60]         TEST.STATUS=1      END ELSE         TEST.MSG=""         TEST.STATUS=0      END      GOSUB end.test      * Test WEXECUTE      TEST="wexecute"; GOSUB start.test      CMND='echo MVDBTOOLKIT.TEST'      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      IF INDEX(CMND.RESULT,"MVDBTOOLKIT.TEST",1) THEN         TEST.MSG=CMND.RESULT         TEST.STATUS=1      END ELSE         TEST.MSG=CMND.RESULT         TEST.STATUS=0      END      CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG      GOSUB end.test      * Test WFILEIO      TEST="WFILEIO-WRITE"      USER.NO=FIELD(OCONV('','U50BB'),' ',1)      GOSUB start.test      CALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)      TMP.FILE.NAME=TMP.DIR:FILEDELIM:'TMP-':USER.NO:'.txt'      TEST.MSG=TMP.FILE.NAME      CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.FILE.NAME,"",RERR)      SAVE.FOBJ=FOBJ      TMP.DATA=TIMEDATE()      CALL @WOBJ.RTNE(FOBJ,"SET","data",TMP.DATA,"",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUS.MSG,"",RERR)      TEST.STATUS=RESPONSE.STATUS      IF NOT(RESPONSE.STATUS) THEN TEST.MSG:=RESPONSE.STATUS.MSG      GOSUB end.test      IF NOT(TEST.STATUS) THEN STOP "Test Failed, no reason to continue"      TEST='WFILEIO-READ'      GOSUB start.test      * NOW READ IT BACK IN      CALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)      TEST.MSG="(":TMP.DATA:')=(':RESPONSE.DATA:")"      TEST.STATUS=1      IF TMP.DATA # RESPONSE.DATA THEN TEST.STATUS=0      GOSUB end.test      TEST="WFILEIO-DELETE"; GOSUB start.test      FOBJ=SAVE.FOBJ      CALL @WOBJ.RTNE(FOBJ,"SET","action","DELETE","",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      FOBJ=SAVE.FOBJ      CALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      RESPONSE.DATA=""      CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUSMSG,"",RERR)      TEST.STATUS=1      TEST.MSG=TMP.FILE.NAME:' ':RESPONSE.STATUS      IF RESPONSE.STATUS=0 AND RESPONSE.DATA="" THEN NULL ELSE TEST.STATUS=0      GOSUB end.test      * Let get our current directory      TEST="pwd"; GOSUB start.test      IF OCONV(PLATFORM,"MCU") = "WINDOWS" THEN         CMND='echo %CD%'      END ELSE         CMND='pwd'      END      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      IF 1 THEN         TEST.MSG=CMND.RESULT         TEST.STATUS=1      END ELSE         TEST.MSG=CMND.RESULT         TEST.STATUS=0      END      CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG      GOSUB end.test      MVDBTOOLKIT.LOCATION = CMND.RESULT      * Lets verify we have curl!!!      IF CURLLOCATION="" THEN CURLLOCATION="curl"      TEST="default curl"; GOSUB start.test      CMND=CURLLOCATION:' -V'      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      BEGIN CASE         CASE INDEX(CMND.RESULT,"libcurl",1) AND 1            TEST.MSG=CMND.RESULT            TEST.STATUS=1         CASE OCONV(PLATFORM,"MCU")="WINDOWS"            TEST.MSG=CMND.RESULT            CURLLOCATION=""            TEST.STATUS=2         CASE 1            TEST.MSG=0      END CASE      CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG      GOSUB end.test      * THIS IS SLOPPY CODE      IF CURLLOCATION="" AND PLATFORM="WINDOWS" THEN         * Start looking for curl         IF TEST.STATUS=2 THEN            CURLLOCATION="C:\PROGRA~2\Zumasys\MVDASH~1\bin\curl.exe"            TEST="curl via mvconnect"; GOSUB start.test            CMND=CURLLOCATION:' -V'            CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)            CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)            CALL MVDBTOOLKIT.WEXECUTE(COBJ)            CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)            BEGIN CASE               CASE INDEX(CMND.RESULT,"libcurl",1) AND 1                  TEST.MSG=CMND.RESULT                  TEST.STATUS=1               CASE OCONV(PLATFORM,"MCU")="WINDOWS"                  TEST.MSG=CMND.RESULT                  TEST.STATUS=2               CASE 1                  TEST.MSG=CMND.RESULT                  TEST.STATUS=0            END CASE            CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG            GOSUB end.test         END         IF TEST.STATUS=2 THEN            CURLLOCATION="c:\progra~1\git\mingw64\bin\curl.exe"            TEST="curl via git"; GOSUB start.test            CMND=CURLLOCATION:' -V'            CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)            CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)            CALL MVDBTOOLKIT.WEXECUTE(COBJ)            CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)            BEGIN CASE               CASE INDEX(CMND.RESULT,"libcurl",1) AND 0                  TEST.MSG=CMND.RESULT                  TEST.STATUS=1               CASE 1                  TEST.STATUS=0                  TEST.MSG=CMND            END CASE            CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG            GOSUB end.test         END         IF CURLLOCATION # "" THEN            CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","curllocation",CURLLOCATION,"",RERR)         END      END      CALL @WOBJ.RTNE(PLATFORM.OBJ,"TOSTRING","",PLATFORM.JSON,"PRETTIFY",RERR)      CONVERT CHAR(13) TO @AM IN PLATFORM.JSON      CONVERT CHAR(10) TO '' IN PLATFORM.JSON      WRITE PLATFORM.JSON ON DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON"      STOP      *      RETURN      *process.error: *      IF RERR<1> THEN         TEST.STATUS=-1         TEST.MSG=RERR<1>      END      RETURN      *      *start.test: *      TEST.STATUS=0      TEST.MSG="Success"      PRINT "":TEST[1,15]"L(#15)":      RETURN      *end.test: *      PRINT "  ":TEST.MSG[1,50]"L(#50)":      PRINT " ":      PRE=''; AFT=''      BEGIN CASE         CASE TEST.STATUS=2; ERROR="Warning"; PRE=''; AFT=''         CASE TEST.STATUS; ERROR="Passed"         CASE 1; ERROR="Failed"; PRE=@(-13); AFT=@(-14)      END CASE      PRINT PRE:"[":      PRINT ERROR"L(#7)":      PRINT "]":AFT      RETURN000CA7MVDBTOOLKIT.WEXECUTE0c2SUBROUTINE MVDBTOOLKIT.WEXECUTE(EOBJ)INCLUDE MVDBTOOLKIT.WEXECUTE.INCLUDE************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 12, 2018* Description: Execute library************************************************************************* EOBJ* { "command":"COMMAND TO USE",*    "directory":"OPTIONAL DIRECTORY TO RUN IN",*    "debug":"YES OR NO",*    "docapture":"YES OR NO, DEFAULT YES",*    "returning":"YES OR NO, DEFAULT YES",*    "rtndata":"YES OR NO, DEFAULT NO",*    "passlist":"ACTUAL PASSLIST"*    "data": ["ARRAY OF DATA STATEMENTS"],*    "result: {w*                "result":"RESULT IF CAPTURED",*                "rtndata":"RESULT OF RTNDATA",*                "returning":"RESULT OF RETURNING",*                "debug":"DEBUG INFORMATION IF TURNED ON"*    }*    }INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ* With native objects we cannot do this.  We will need* a platform specific way of recognizing this.* Perhaps changes itself to WOBJ?IF ''="NEW" THEN    * CREATE A NEW OBJECT AND RETURN IT    EJSON=\{ "command":"",\    EJSON:=\ "directory":"",\    EJSON:=\ "debug":"NO",\    EJSON:=\ "returning":"YES",\    EJSON:=\ "rtndata":"YES",\    EJSON:=\ "passlist":"",\    EJSON:=\ "data: []"\    EJSON:=\}\    CALL @WOBJ.RTNE(EOBJ,"FROMSTRING","",EJSON,"",RERR)    RETURNENDCALL @WOBJ.RTNE(EOBJ,"GET","command"      ,EXECUTE.COMMAND        ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","directory"    ,EXECUTE.DIRECTORY      ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","docapture"    ,EXECUTE.DOCAPTURE      ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","returning"    ,EXECUTE.RETURNING      ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","rtndata"      ,EXECUTE.RTNDATA        ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","passlist"     ,EXECUTE.PASSLIST       ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","debug"        ,EXECUTE.DEBUG          ,"",RERR)IF EXECUTE.DEBUG = "" THEN    CALL @WOBJ.RTNE(EOBJ,"GET","DEBUG",EXECUTE.DEBUG,"",RERR)ENDIF OCONV(EXECUTE.DEBUG[1,1],"MCU") = "Y" OR EXECUTE.DEBUG="1" THEN EXECUTE.DEBUG=1 ELSE EXECUTE.DEBUG=0IF EXECUTE.DEBUG THEN    *CRT "EXECUTE.COMMAND: ":EXECUTE.COMMAND    *CRT "DIRECTORY      : ":EXECUTE.DIRECTORY    *CRT "OCAPTURE       : ":EXECUTE.OCAPTURE    *CRT "RETURNING      : ":EXECUTE.RETURNINGENDCALL @WOBJ.RTNE(EOBJ,"TOSTRING","",TEST.JSON,"",RERR)* ERROR HANDLING TODOCALL @WOBJ.RTNE(EOBJ,"SET.OBJECT","result","{}","",RERR)CALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)BEGIN CASE   CASE MV.TYPE='D3'       CALL MVDBTOOLKIT.WEXECUTE.D3(EOBJ)   CASE MV.TYPE='UNIDATA'       CALL MVDBTOOLKIT.WEXECUTE.UNIDATA(EOBJ)   CASE MV.TYPE="QM"       CALL MVDBTOOLKIT.WEXECUTE.QM(EOBJ)   CASE MV.TYPE="JBASE"       CALL MVDBTOOLKIT.WEXECUTE.JBASE(EOBJ)   CASE MV.TYPE="UNIVERSE"       CALL MVDBTOOLKIT.WEXECUTE.UNIVERSE(EOBJ)   CASE 1        CALL @WOBJ.RTNE(EOBJ,"SET","result.error","Invalid mvplatform=":MV.TYPE,"",RERR)END CASE**EXECUTE CHAR(255):'k':CMND CAPTURING RESULT*CONVERT CHAR(0) TO '' IN RESULT*CONVERT CHAR(255) TO '' IN RESULTRETURN003F7CMVSENDGRID.BP0c0000BAEMVSENDGRID.TEST0c2* PROGRAM MVSENDGRID.TEST*PRINT "Enter email to send test to: ":; INPUT TEST.EMAIL.TOPRINT "Enter full path to file to send (leave blank to not send a file): ":; INPUT FILE.TO.SENDIF FILE.TO.SEND # "" THEN   PRINT "Type of file: 1-pdf, 2=text: ":; INPUT ANS   BEGIN CASE     CASE ANS="1"; FILE.TYPE="application/pdf"     CASE ANS="2"; FILE.TYPE="text/plain"     CASE 1       PRINT "Invalid choice"       STOP   END CASE   PRINT "Actual file name (no path): ":; INPUT FILE.NAME   IF FILE.NAME="" THEN STOPENDWOBJ="WOBJ"OBJ="MAILSEND_V2"CALL MVSENDGRID.API(OBJ)*CALL @WOBJ(OBJ,"TOSTRING","",JSON,"PRETTIFY",1)CALL @WOBJ(OBJ,"SET","params.to[0].email",TEST.EMAIL.TO,"",RERR)CALL @WOBJ(OBJ,"SET","params.to[0].name","Test Email","",RERR)* SINCE CC IS A OPTION, THERE IS NOT A PRE-POPULATED OBJECT, WE MUST ADD ONECALL @WOBJ(OBJ,"SET.OBJECT","params.bcc[0]","{}","",RERR)CALL @WOBJ(OBJ,"SET","params.bcc[0].email",TEST.EMAIL.TO,"",RERR)CALL @WOBJ(OBJ,"SET","params.bcc[0].name","Test Email","",RERR)CALL @WOBJ(OBJ,"SET","params.from","noreply@zumasys.com","",RERR)CALL @WOBJ(OBJ,"SET","params.subject","Sample email ":TIMEDATE(),"",RERR)NL=CHAR(13):CHAR(10)TEXT="Line 1"TEXT:=NL:"Line 2"TEXT:=NL:"Line 3"CALL @WOBJ(OBJ,"SET","params.text",TEXT,"",RERR)IF FILE.TO.SEND # "" THENCALL @WOBJ(OBJ,"SET.ARRAY","params.files","[]","",RERR)  CALL @WOBJ(SOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ(SOBJ,"SET","sourcefile",FILE.TO.SEND,"",RERR) CALL @WOBJ(SOBJ,"SET","filename",FILE.NAME,"",RERR) CALL @WOBJ(SOBJ,"SET","type",FILE.TYPE,"",RERR) CALL @WOBJ(SOBJ,"TOSTRING","",SJSON,"",RERR) CALL @WOBJ(OBJ,"SET.OBJECT","params.files[-1]",SJSON,"",RERR)  END  CALL @WOBJ(OBJ,"TOSTRING","",JSON,"PRETTIFY",RERR)PRINT "Press return to see the jSON option payload before calling MVSENDGRID.API ":; INPUT WAIT PRINT JSONPRINTPRINT "Press return to call MVSENDGRID.  If you request a file that does not exist the routine does not catch that and your call will fail. ":; INPUT ANSCALL MVSENDGRID.API(OBJ)CALL @WOBJ(OBJ,"GET","result.status",STATUSCODE,"",RERR)PRINT "Result status=":STATUSCODECALL @WOBJ(OBJ,"GET","result.statusmsg",STATUSMSG,"",RERR)PRINT "Result msg   =":STATUSMSGIF STATUSCODE = "ok" OR STATUSCODE[1,1] = "2" THEN NULL ELSE    PRINT "Failed: ":STATUSMSGENDPRINT "Press return to see result OBJECT from call: ":; INPUT WAITCALL @WOBJ(OBJ,"TOSTRING","",JSON,"PRETTIFY",RERR)PRINT JSONPRINT "Press return to see curl log: ":; INPUT ANS* 04/2/2020 - Better to send curl object as json vs getting into issues with @am,@vm,@svm!!CALL @WOBJ(OBJ,"GET","result.wcalldebug",COBJ.JSON,"",RERR)CALL @WOBJ(COBJ,"FROMSTRING","",COBJ.JSON,"",RERR)CALL @WOBJ(COBJ,"LENGTH","response.log",CURL.LOG.LENGTH,"",RERR)FOR X=1 TO CURL.LOG.LENGTH    TAG="response.log[":X-1:"]"    CALL @WOBJ(COBJ,"GET",TAG,CLINE,"",RERR)    PRINT CLINENEXT XPRINT "PRESS RETURN TO CONTINUE: ":; INPUT OK.TO.CONTINUE0033B1MVSENDGRID.API0c2      SUBROUTINE MVSENDGRID.API(OBJ)      **********************************************************************      *      * Copyright (C) 2018 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: 4/2/2019      * Description: SENDGRID wrapper      **********************************************************************      *      * Purpose of this program is to front end the sendgrid library of functions      *      * It will utilize the object model concept and try to wrap all sendgrid      * functions into this one library      *      * Items to do      *      * Add File option. (COMPLETED)      * qc tests to validate fields sent (OUTSTANDING)      * Config to get user name/password/etc (COMPLETED)      * Return Message/Status (COMPLETED)      * REMOVE ALL DEBUG STATEMENTS (COMPLETED)      *      * OBJ      * { "api":"mailsend_v2",      *    "params": {      *       "to": [      *         {      *           "email":"email address",      *           "name":"Nice name"      *         }      *       ],      *       "cc": [      *         {      *           "email":"email address",      *           "name":"Nice name"      *         }      *       ],      *       "bcc": [      *         {      *           "email":"email address",      *           "name":"Nice name"      *         }      *       ],      *       "debug":"Y or N",      *       "replyto":"address",      *       "from":"From email address",      *       "fromname":"From name",      *       "subject":"Subject",      *       "text":"Plain text of your email",      *       "html":"Html version of your email",      *       "files": [      *           {      *              "sourcefile":"path to file",      *              "filename":"file name to present file as",      *              "type":"type of file, application/pdf for example"      *           }      *       ]      *    },      *   "result": {      *      "status":"error or ok",      *      "statusmsg:"status msg"      *    }      *      *  }      *      * Starting with mailsend_v2 - We are using this version because it allows      * attachments without having to base64 and include them into the json payload      * v2 uses curl and a normal form-data post to get attachments.      *      * curl https://api.sendgrid.com/api/mail.send.json \      *-F to=recipient@domain.com -F toname=test -F subject="Example Subject" \      *-F text="testing text body" --form-string html="<strong>testing html body</strong>" \      *-F from=test@yourdomain.com -F api_user=your_sendgrid_username -F api_key=your_sendgrid_password \      *-F files\[attachment.gz\]=@f.php.gz      *      *      * This intial part will initialize a object for a user.      *      WOBJ="WOBJ"      FIELD.TYPE=""      INIT.FUNCTION=OCONV(OBJ<1,1,1>,"MCU")      BEGIN CASE         CASE INIT.FUNCTION="MAILSEND_V2"            GOSUB mailsendv2.init            RETURN      END CASE      CALL @WOBJ(OBJ,"GET","api",API,"",RERR)      CALL @WOBJ(OBJ,"GET","debug",DO.DEBUG,"",RERR)      IF OCONV(DO.DEBUG[1,1],"MCU") = "Y" OR DO.DEBUG="1" THEN DO.DEBUG=1 ELSE DO.DEBUG=0      CALL @WOBJ(OBJ,"SET.OBJECT","result","{}","",RERR)      API=OCONV(API,'MCU')      APISTATUS="ok"      APISTATUSMSG=""      OPEN "DICT","MVSENDGRID.BP" TO DICT.MVSENDGRID.BP ELSE         APISTATUS="error"         APISTATUSMSG="Could not open DICT MVSENDGRID.BP"         GOTO end.of.routine      END      READ CONFIG FROM DICT.MVSENDGRID.BP, "CONFIG.JSON" ELSE         APISTATUS="error"         APISTATUSMSG="NO CONFIG.JSON IN DICT MVSENDGRID.BP"         GOTO end.of.routine      END      CALL @WOBJ(CONFIGOBJ,"FROMSTRING","",CONFIG,"",RERR)      BEGIN CASE         CASE API="MAILSEND_V2"            GOSUB mailsendv2         CASE 1            APISTATUS="error"            APISTATUSMSG="Invalid api request (":API:")"      END CASE      * lets do a larger check for a failed call         CALL @WOBJ(COBJ,"GET","response.status",STATUSCODE,"",RERR)         CALL @WOBJ(COBJ,"GET","response.statusmsg",STATUSMSG,"",RERR)         IF STATUSCODE[1,1] # "2" THEN            APISTATUS=STATUSCODE            APISTATUSMSG=STATUSMSG         END         * LETS PACKAGE THE ENTIRE CURL RESPONSE FOR DEBUGGING PURPOSES.         CALL @WOBJ(COBJ,"TOSTRING","",COBJ.JSON,"",RERR); * SAFER TO PULL JSON         CALL @WOBJ(OBJ,"SET","result.wcalldebug",COBJ.JSON,"",RERR)end.of.routine: *      CALL @WOBJ(OBJ,"SET","result.status",APISTATUS,"",RERR)      CALL @WOBJ(OBJ,"SET","result.statusmsg",APISTATUSMSG,"",RERR)      RETURN      STOPmailsendv2.init: * Initialize a email v2 object      OBJ=""      CALL @WOBJ(OBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(OBJ,"SET","api","mailsend_v2","",RERR)      CALL @WOBJ(OBJ,"SET.OBJECT","params","{}","",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.to",'[{"email":"","name"}]',"",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.cc",'[]',"",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.bcc",'[]',"",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.files",'[]',"",RERR)      RETURNmailsendv2: * Send an email      * V2 USES USER NAME AND PASSWORD      CALL @WOBJ(CONFIGOBJ,"GET","username",SENDGRID.USERNAME,"",RERR)      CALL @WOBJ(CONFIGOBJ,"GET","password",SENDGRID.PASSWORD,"",RERR)      IF SENDGRID.USERNAME="" THEN         APISTATUS="error"         APISTATUSMSG="No username defined in CONFIG.JSON"         RETURN      END      IF SENDGRID.PASSWORD="" THEN         APISTATUS="error"         AISTATUSMSG="No password defined in CONFIG.JSON"         RETURN      END      CALL @WOBJ(OBJ,"LENGTH","params.to",NUMBER.TOO,"",RERR)      IF NOT(NUMBER.TOO) THEN         APISTATUS="error"         APISTATUS="Must supply array of to"         RETURN      END      TOO.LABEL="to"; TOO.NAMES.LABEL="toname"      IF NUMBER.TOO > 1 THEN TOO.LABEL:='[]'; TOO.NAMES.LABEL:='[]'      TOO=''; TOO.NAMES=''      CALL @WOBJ(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(COBJ,"SET","method","POST","",RERR)      CALL @WOBJ(COBJ,"SET","url","https://api.sendgrid.com/api/mail.send.json","",RERR)      CALL @WOBJ(COBJ,"SET","insecure","Y","",RERR)      CALL @WOBJ(COBJ,"SET.OBJECT","headers","{}","",RERR)      CALL @WOBJ(COBJ,"SET.ARRAY","formfields","[]","",RERR)      FIELD.NAME="api_user"; FIELD.VALUE=SENDGRID.USERNAME; GOSUB set.field      FIELD.NAME="api_key"; FIELD.VALUE=SENDGRID.PASSWORD; GOSUB set.field      FOR X=1 TO NUMBER.TOO         P="params.to[":X-1:"]"         CALL @WOBJ(OBJ,"GET",P:".email",THIS.TO,"",RERR)         CALL @WOBJ(OBJ,"GET",P:".name",THIS.NAME,"",RERR)         IF INDEX(THIS.TO,'@',1) THEN            TOO<-1>=THIS.TO            TOO.NAMES<-1>=THIS.NAME         END      NEXT X      CONVERT CHAR(254) TO '&' IN TOO      CONVERT CHAR(254) TO '&' IN TOO.NAMES      CALL @WOBJ(SOBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(SOBJ,"SET","name",TOO.LABEL,"",RERR)      CALL @WOBJ(SOBJ,"SET","value",TOO,"",RERR)      CALL @WOBJ(SOBJ,"TOSTRING","",SJSON,"",RERR)      CALL @WOBJ(COBJ,"SET.OBJECT","formfields[-1]",SJSON,"",RERR)      FIELD.NAME=TOO.NAMES.LABEL; FIELD.VALUE=TOO.NAMES; GOSUB set.field      * DO CC            CALL @WOBJ(OBJ,"LENGTH","params.cc",NUMBER.CC,"",RERR)      IF NUMBER.CC THEN               CC=''; CC.NAMES=''         FOR X=1 TO NUMBER.CC            P="params.cc[":X-1:"]"            CALL @WOBJ(OBJ,"GET",P:".email",THIS.CC,"",RERR)            CALL @WOBJ(OBJ,"GET",P:".name",THIS.NAME,"",RERR)            IF INDEX(THIS.CC,'@',1) THEN               CC<-1>=THIS.CC               CC.NAMES<-1>=THIS.NAME            END                     NEXT X            CONVERT CHAR(254) TO '&' IN CC         CONVERT CHAR(254) TO '&' IN CC.NAMES          CC.LABEL="cc"; CC.NAMES.LABEL="ccname"         IF NUMBER.CC > 1 THEN CC.LABEL:='[]'; CC.NAMES.LABEL:='[]'         FIELD.NAME=CC.LABEL; FIELD.VALUE=CC; GOSUB set.field         FIELD.NAME=CC.NAMES.LABEL; VALUE=CC.NAMES; GOSUB set.field       END      * DO BCC            CALL @WOBJ(OBJ,"LENGTH","params.bcc",NUMBER.BCC,"",RERR)      IF NUMBER.BCC THEN               BCC=''; BCC.NAMES=''         FOR X=1 TO NUMBER.BCC            P="params.bcc[":X-1:"]"            CALL @WOBJ(OBJ,"GET",P:".email",THIS.BCC,"",RERR)            CALL @WOBJ(OBJ,"GET",P:".name",THIS.NAME,"",RERR)            IF INDEX(THIS.BCC,'@',1) THEN               BCC<-1>=THIS.BCC               BCC.NAMES<-1>=THIS.NAME            END                     NEXT X            CONVERT CHAR(254) TO '&' IN BCC         CONVERT CHAR(254) TO '&' IN BCC.NAMES          BCC.LABEL="bcc"; BCC.NAMES.LABEL="bccname"         IF NUMBER.BCC > 1 THEN BCC.LABEL:='[]'; BCC.NAMES.LABEL:='[]'         FIELD.NAME=BCC.LABEL; FIELD.VALUE=BCC; GOSUB set.field         FIELD.NAME=BCC.NAMES.LABEL; VALUE=BCC.NAMES; GOSUB set.field       END          CALL @WOBJ(OBJ,"GET","params.from",FROMEMAIL,"",RERR)      IF FROMEMAIL="" THEN         APISTATUS="error"         APISTATUSMSG="Must supply from"         RETURN      END      FIELD.NAME="from"; FIELD.VALUE=FROMEMAIL; GOSUB set.field      ** GET BODY **      CALL @WOBJ(OBJ,"GET","params.text",TEXT.BODY,"",RERR)      CALL @WOBJ(OBJ,"GET","params.html",HTML.BODY,"",RERR)      IF HTML.BODY="" AND TEXT.BODY="" THEN         APISTATUS="error"         APISTATUSMSG="Must supply either a text or html message"         RETURN      END      * If our text.body has new lines in it we MUST write it out      * to a file and then pass it as a file handle!!!      *       *IF INDEX(TEXT.BODY,CHAR(13),1) OR INDEX(TEXT.BODY,CHAR(10),1) THEN      * 4/2/2020 - This fix is moving to wcall      IF 0 THEN         CALL @WOBJ(FOBJ,"FROMSTRING","","{}","",RERR)         CALL @WOBJ(FOBJ,"SET","action","WRITE","",RERR)         TMP.DIR="/tmp"; * This needs to be fixed to be dynamic         TEXT.FILE.NAME=TMP.DIR:'/':@USER.NO:"_body.txt"         CALL @WOBJ(FOBJ,"SET","path",TEXT.FILE.NAME,"",RERR)         CALL @WOBJ(FOBJ,"SET","data",TEXT.BODY,"",RERR)         CALL MVDBTOOLKIT.WFILEIO(FOBJ)         FIELD.NAME="text"; FIELD.VALUE="@":TEXT.FILE.NAME; FIELD.TYPE="file"; GOSUB set.field      END ELSE         FIELD.NAME="text"; FIELD.VALUE=TEXT.BODY; GOSUB set.field      END            * NEED TO ADD THE HTML            IF HTML.BODY = "" AND TEXT.BODY # "" THEN         * WE NEED TO BUILD OUT A SIMPLE HTML VERSION, BASICALLY DOING NEW LINES         HAS.CR=DCOUNT(TEXT.BODY,CHAR(13))         HAS.LF=DCOUNT(TEXT.BODY,CHAR(10))         HTML.BODY=TEXT.BODY         BEGIN CASE            CASE HAS.CR AND HAS.LF               CONVERT CHAR(10) TO '' IN HTML.BODY               CONVERT CHAR(13) TO @AM IN HTML.BODY            CASE HAS.LF               CONVERT CHAR(10) TO @AM IN HTML.BODY            CASE HAS.CR               CONVERT CHAR(13) TO @AM IN HTML.BODY         END CASE         NUM.LINES=DCOUNT(HTML.BODY,@AM)         NEW.HTML.BODY=""         FOR A=1 TO NUM.LINES            LINE=HTML.BODY<A>            IF A > 1 THEN NEW.HTML.BODY:='<BR>'            NEW.HTML.BODY:=LINE        NEXT A        HTML.BODY=NEW.HTML.BODY      END            IF HTML.BODY # "" THEN         *HTML.BODY="HTML VERSION<BR>":HTML.BODY         FIELD.NAME="html"; FIELD.VALUE=HTML.BODY; GOSUB set.field      END            ** SUBJECT **      CALL @WOBJ(OBJ,"GET","params.subject",SUBJECT,"",RERR)      IF SUBJECT="" THEN         APISTATUS="error"         APISTATUSMSG="Must supply subject"         RETURN      END      FIELD.NAME="subject"; FIELD.VALUE=SUBJECT; GOSUB set.field      ** file uploads **      CALL @WOBJ(OBJ,"LENGTH","params.files",NUM.FILES,"",RERR)      IF NUM.FILES THEN         FOR X=1 TO NUM.FILES            P="params.files[":X-1:"]"            CALL @WOBJ(OBJ,"GET",P:'.sourcefile',SOURCEFILE,"",RERR)            CALL @WOBJ(OBJ,"GET",P:'.filename',FILENAME,"",RERR)            CALL @WOBJ(OBJ,"GET",P:'.type',FILETYPE,"",RERR)            FIELD.NAME='files[':FILENAME:']'            FIELD.VALUE='@':SOURCEFILE            IF FILETYPE # "" THEN FIELD.VALUE:=";type=":FILETYPE            FIELD.TYPE='file'            GOSUB set.field         NEXT X      END      CALL @WOBJ(COBJ,"TOSTRING","",CJSON,"PRETTIFY",RERR)      IF DO.DEBUG THEN         CALL @WOBJ(COBJ,"SET","debug","Y","",RERR); * SET TO DO DEBUGGING      END      CALL MVDBTOOLKIT.WCALL(COBJ)      CALL @WOBJ(COBJ,"TOSTRING","",TJSON,"PRETTIFY",RERR)      CALL @WOBJ(COBJ,"GET","response.data",RESPONSE,"",RERR)      CALL @WOBJ(ROBJ,"FROMSTRING","",RESPONSE,"",RERR)      CALL @WOBJ(ROBJ,"GET","message",APISTATUSMSG,"",RERR)      RETURNset.field: *      CALL @WOBJ(SOBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(SOBJ,"SET","name",FIELD.NAME,"",RERR)      CALL @WOBJ(SOBJ,"SET","value",FIELD.VALUE,"",RERR)      IF FIELD.TYPE # "" THEN         CALL @WOBJ(SOBJ,"SET","fieldtype",FIELD.TYPE,"",RERR)      END      FIELD.TYPE=""      CALL @WOBJ(SOBJ,"TOSTRING","",SJSON,"",RERR)      CALL @WOBJ(COBJ,"SET.OBJECT","formfields[-1]",SJSON,"",RERR)      RETURN00012BMVDB.THEMES0c0000045Theme 20c2theme2.css#004489#e1e1d6#d3d9df#989898#565656#dbdbce000045Theme 30c2theme3.css#557260#6A8B92#8A9875#34626B#eaeeea#3291b100003DTheme 10c2theme1.css#2d3956#455372#616a7f#e7e7e7#e0e9e900003DTheme 40c2theme4.css#77bed2#d5e1dd#999999#747e80#333333000218WDB.RESOURCE0c0000036RSS.MAINT0c2PRSS MaintenanceMVDB.INITRSS.MAINT11000033MVPKG.MAIN0c2PMV PackageMVDB.INITMVPKG.MAIN1000003FMVDB.WEB.ED0c2PMV Dashboard EditorMVDB.INITMVDB.WEB.ED11000043MVDB.ADMIN0c2PMV Dashboard AdministratorMVDB.INITMVDB.ADMIN1100002DRSS.MAIN0c2PRSS FeedMVDB.INITRSS.MAIN11000047CONFIG0c2CDEFAULT_HANDLERDBCDEFAULT_RESOURCEMVDB.MAINAPIKEY1234500003BAPI*WRESTTEST0c2PSample REST testWRESTTESTWRESTTEST1100003EMVDB.MAIN0c2PMV Dashboard ControllerMVDB.INITMVDB.MAIN110000AFDICT_MVSENDGRID.BP0c0000093CONFIG.JSON0c1{   "username":"patrickpayne@yahoo.com",   "password":"SendGridPassword1",   "apikey":"Api Key for v3 apis (none built yet)" }f000120DICT_MVDB.DEFS0c0000022TEMPLATE0c1A1TEMPLATEL15000022DISPLAYS0c1A2DISPLAYSL30000024DISP.AREA0c1A3DISP AREAL10000027DISP.ORDER0c1A4DISP ORDERL1000001CUSERS0c1A5USERSL2000001ADESC0c1A6DESCL4000001FDB.SORT0c1A8DB.SORTR70046DBWBPD0c0000151FI.MVDB.DEFS0c2DIM DB.ITEM(30)*EQU DB.TEMPLATE         TO DB.ITEM(1)EQU DB.WIDGETS          TO DB.ITEM(2)EQU DB.WIDGET.AREA      TO DB.ITEM(3)EQU DB.WIDGET.ORDER     TO DB.ITEM(4)EQU DB.USERS.ALLOWED    TO DB.ITEM(5)EQU DB.DESC             TO DB.ITEM(6)EQU DB.THEME            TO DB.ITEM(7)EQU DB.SORT             TO DB.ITEM(8)00012EFI.MVDB.USERS0c2DIM USER.ITEM(20)*EQU USER.PASSWORD     TO USER.ITEM(1)EQU USER.DEFAULT.DB   TO USER.ITEM(2)EQU USER.NAME         TO USER.ITEM(3)EQU USER.LAST.LOGIN   TO USER.ITEM(4)EQU USER.EMAIL        TO USER.ITEM(5)EQU USER.ROLE         TO USER.ITEM(6)EQU USER.ALT.LOGO     TO USER.ITEM(7)000100FI.MVDB.WIDGET.TYPES0c2DIM WIDGET.TYPES(10)*EQU WT$TYPE     TO WIDGET.TYPES(1)EQU WT$SWF      TO WIDGET.TYPES(2)EQU WT$HANDLER  TO WIDGET.TYPES(3)EQU WT$ICON     TO WIDGET.TYPES(4)EQU WT$GROUP    TO WIDGET.TYPES(5)EQU WT$DESC     TO WIDGET.TYPES(6)000070FI.MVDB.WIDGETS0c2DIM WIDGET.ITEM(20)*EQU WIDGET.SUB    TO WIDGET.ITEM(1)EQU WIDGET.USERS  TO WIDGET.ITEM(2)000166FI.WDB.RESOURCE0c2DIM RSRC.ITEM(20)*EQU RSRC.TYPE           TO RSRC.ITEM(1)EQU RSRC.DESCRIPTION    TO RSRC.ITEM(2)EQU RSRC.CONTROLLER     TO RSRC.ITEM(3)EQU RSRC.PROGRAM        TO RSRC.ITEM(4)EQU RSRC.PARSE.CGI      TO RSRC.ITEM(5)EQU RSRC.ENABLED        TO RSRC.ITEM(6)EQU RSRC.DEBUG.MODE     TO RSRC.ITEM(7)EQU RSRC.ACCOUNT        TO RSRC.ITEM(8)000484FI.WDB.DEBUG0c2** WDB.DEBUG record layout*EQU WDBG_DATE                TO 1EQU WDBG_TIME                TO 2EQU WDBG_DURATION            TO 3EQU WDBG_PORT                TO 4EQU WDBG_HANDLER             TO 5EQU WDBG_RESOURCE            TO 6EQU WDBG_CONTROLLER          TO 7EQU WDBG_PROGRAM             TO 8EQU WDBG_REQUEST_ID          TO 9EQU WDBG_REQUEST             TO 10EQU WDBG_METHOD              TO 11EQU WDBG_PATH                TO 12EQU WDBG_REMOTE_ADDR         TO 13EQU WDBG_STATUS              TO 14EQU WDBG_HEADER_VARS         TO 15EQU WDBG_HEADER_VALS         TO 16EQU WDBG_CGI_VARS            TO 17EQU WDBG_CGI_VALS            TO 18EQU WDBG_BODY                TO 19EQU WDBG_RESPONSE_VARS       TO 20EQU WDBG_RESPONSE_VALS       TO 21EQU WDBG_RESPONSE_CONTENT    TO 22EQU WDBG_RESERVED1           TO 23EQU WDBG_RESERVED2           TO 24EQU WDBG_SESSION_ID          TO 25EQU WDBG_SESSION_VARS        TO 26EQU WDBG_SESSION_VALS        TO 27EQU WDBG_SESSION_DATE        TO 28EQU WDBG_SESSION_TIME        TO 29EQU WDBG_WARNING             TO 30EQU WDBG_ERROR               TO 31EQU WDBG_LINT                TO 3200323EMVDB.INCLUDE0c2*COMMON /MVDB/ GLOBAL.INFO(100), GLOBAL.USER.DATA(20), GLOBAL.TEMP.DATA(20), WIDGET.INFO(200), WIDGET.USER.DATA(100)** GLOBAL.INFO equates. GLOBAL.INFO is a place for variables that are * globally accessible to all view subroutines. This information is not* written to disk - it is valid only for the duration of the execution.*EQU G$USERID            TO GLOBAL.INFO(1) ;* UserID currently logged inEQU G$CURRENT.DB        TO GLOBAL.INFO(2) ;* Current dashboard nameEQU G$LOGIN.DATE        TO GLOBAL.INFO(3) ;* Date user logged in (from session)EQU G$LOGIN.TIME        TO GLOBAL.INFO(4) ;* Time user logged in (from session)EQU G$WIDGET.NAME       TO GLOBAL.INFO(5) ;* Current view being executedEQU G$WIDGET.SUB        TO GLOBAL.INFO(6) ;* Current subruotine being calledEQU G$WIDGET.NAME.LIST  TO GLOBAL.INFO(7) ;* List of views called/to be calledEQU G$WIDGET.SUB.LIST   TO GLOBAL.INFO(8) ;* w/ G$WIDGET.NAME.LISTEQU G$WIDGET.CALL.TIME  TO GLOBAL.INFO(9) ;* w/ G$WIDGET.NAME.LIST (timedate stamp)EQU G$WIDGET.CALL.DUR   TO GLOBAL.INFO(10) ;* w/ G$WIDGET.NAME.LIST (duration in MS)EQU G$QUERYMODE         TO GLOBAL.INFO(11) ;* Used to query subroutines without running themEQU G$SUBMITTED         TO GLOBAL.INFO(12) ;* 1=User clicked submit on input area of this widgetEQU G$ADMIN.USER        TO GLOBAL.INFO(14) ;* 1=User as an admin; 0=User is not an adminEQU G$LICENSE.COUNT     TO GLOBAL.INFO(15) ;* Count of licenses (concurrent users)EQU G$EDITION           TO GLOBAL.INFO(16) ;* Edition NameEQU G$SYSTEM.ID         TO GLOBAL.INFO(17) ;* System ID** GLOBAL.INFO(90...100) reserved for internal use.*EQU G$DRILLDOWN.MODE    TO GLOBAL.INFO(24)EQU G$DD.REFERRER       TO GLOBAL.INFO(25)EQU G$DD.FROM.DB        TO GLOBAL.INFO(26)** GLOBAL.USER.DATA stores persistent variable data throughout the course* of a dashboard user's login session. This allows for persistent sharing* of information between dashboard subroutines.** GLOBAL.TEMP.DATA stores temporary variable data for the course of a single* execution. Data is not stored with the session and is destoryed after each* page load.** WIDGET.INFO holds the information for a specific dashboard WIDGET.*EQU W$TYPE           TO WIDGET.INFO(1)EQU W$TITLE          TO WIDGET.INFO(2)EQU W$LINK.LABEL     TO WIDGET.INFO(3)EQU W$LINK.LOCATION  TO WIDGET.INFO(4)  ;* Quandrant(s) to show (1-4)EQU W$LINK.UD.POS    TO WIDGET.INFO(5)  ;* WIDGET.USER.DATA(x)EQU W$LINK.UD.VAL    TO WIDGET.INFO(6)  ;* ^^ = this_valueEQU W$LINK.DD.WIDGET TO WIDGET.INFO(7)  ;* Drill-down widget nameEQU W$LINK.DD.PARAMS TO WIDGET.INFO(8)  ;* Drill down params (UNUSED)EQU W$LINK.URL       TO WIDGET.INFO(26) ;* Specific URL - UD/DD params ignoredEQU W$LINK.URL.OPTS  TO WIDGET.INFO(27) ;* Specific URL - UD/DD params ignoredEQU W$LINK.ICON      TO WIDGET.INFO(28) ;* Icon GIF name ("C" location only)EQU W$LINK.ICON.TXT  TO WIDGET.INFO(29) ;* Hover text for imageEQU W$WIDTH          TO WIDGET.INFO(9)  ;* 1, 2 or 3EQU W$PRINTABLE      TO WIDGET.INFO(24) ;* 1=Add print function/icon to control barEQU W$EXCELABLE        TO WIDGET.INFO(88) ;* 1=Add EXCEL function/icon to control barEQU W$PDFABLE        TO WIDGET.INFO(87) ;* 1=Add PDF function/icon to control barEQU W$HIDDEN         TO WIDGET.INFO(25) ;* 1=Do not display this widget** Pie chart equates*EQU W$PIE.LABELS     TO WIDGET.INFO(10)EQU W$PIE.VALUES     TO WIDGET.INFO(11)EQU W$PIE.COLORS     TO WIDGET.INFO(12) ;* #000000 - #FFFFFF* Below settings are Fusion Charts onlyEQU W$PIE.CAPTION    TO WIDGET.INFO(14)EQU W$PIE.VALUE.OPTS TO WIDGET.INFO(15)** Bar chart equates*EQU W$BAR.LABELS      TO WIDGET.INFO(10) ;* Labels for each Series (AM)EQU W$BAR.VALUES      TO WIDGET.INFO(11) ;* Values matrix (AM/VM)EQU W$BAR.COLORS      TO WIDGET.INFO(12) ;* #000000 - #FFFFFFEQU W$BAR.XLABELS     TO WIDGET.INFO(13) ;* Labels for each set (X Axis)EQU W$BAR.XMEMO       TO WIDGET.INFO(14) ;* X-Axis TextEQU W$BAR.YMEMO       TO WIDGET.INFO(15) ;* Y-Axis TextEQU W$BAR.TYPE        TO WIDGET.INFO(16) ;* 'clustered', 'stacked', '100% stacked'* Below settings are Fusion Charts onlyEQU W$BAR.TREND.BEG   TO WIDGET.INFO(17) ;* Trendline beginning valueEQU W$BAR.TREND.END   TO WIDGET.INFO(18) ;* Trendline ending valueEQU W$BAR.TREND.OPTS  TO WIDGET.INFO(19) ;* Options for the trendlineEQU W$BAR.VALUE.OPTS  TO WIDGET.INFO(20)EQU W$BAR.LABEL.OPTS  TO WIDGET.INFO(21)EQU W$BAR.XLABEL.OPTS TO WIDGET.INFO(22)EQU W$BAR.CAPTION     TO WIDGET.INFO(23)** Table chart equtes*EQU W$TABLE.COL.LABELS     TO WIDGET.INFO(10)EQU W$TABLE.COL.JUST       TO WIDGET.INFO(11)EQU W$TABLE.DATA           TO WIDGET.INFO(12)EQU W$TABLE.TOTALS         TO WIDGET.INFO(13)** Text display equates*EQU W$TEXT.DATA         TO WIDGET.INFO(10)*EQU W$HTML.DATA         TO WIDGET.INFO(10) ;* HTML Blob** Global display equates*EQU W$CHART.OPTIONS  TO WIDGET.INFO(30) ;* Fusion Charts OnlyEQU W$CHART.HEIGHT   TO WIDGET.INFO(31) ;* Override (in pixels)** WIDGET.USER.DATA holds widget-specific user information which* is persistent through the user's session. Values can be set in* this by using the LINK.XXXX feature. This feature will create links* on the widget display that, when clicked, will set values in* WIDGET.USER.DATA as perscribed*EQU W$INPUT.PROMPT   TO WIDGET.INFO(32) ;* Prompt Text (AM)EQU W$INPUT.TYPE     TO WIDGET.INFO(33) ;* TEXT or SELECT (AM)EQU W$INPUT.SELOPTS  TO WIDGET.INFO(34) ;* Text Options for SELECT (AM)(VM)EQU W$INPUT.SELVALS  TO WIDGET.INFO(35) ;* Select Values for SELECT (AM)(VM)EQU W$INPUT.DEFAULT  TO WIDGET.INFO(36) ;* Default Value (AM)EQU W$INPUT.UDPOS    TO WIDGET.INFO(37) ;* User Data Pisition to store answer (AM)EQU W$INPUT.PARAMS   TO WIDGET.INFO(38) ;* Additonal HTML in <input> or <select> tag (AM)EQU W$INPUT.BUTTON   TO WIDGET.INFO(39) ;* Button Label for Submit (AM)*EQU W$MAP.IDS         TO WIDGET.INFO(40) ;* ID for associated value. Ex. USA Map, this is a state Abbr.EQU W$MAP.VALUES      TO WIDGET.INFO(41) ;* Value associtated with the ID (map segment)EQU W$MAP.VALUE.OPTS  TO WIDGET.INFO(42) ;* Optional parameters to be inserted into the <entity> tag.EQU W$MAP.RANGE.NAME  TO WIDGET.INFO(43) ;* Display Name of the range/group (VM)EQU W$MAP.RANGE.LOW   TO WIDGET.INFO(44) ;* Range low limit (VM)EQU W$MAP.RANGE.HIGH  TO WIDGET.INFO(45) ;* Range high limit (VM)EQU W$MAP.RANGE.COLOR TO WIDGET.INFO(46) ;* Range color (optional override)EQU W$MAP.RANGE.OPTS  TO WIDGET.INFO(47) ;* optional parameters to be inserted into the <color> tag** The following value is only relevant for map type USA - when the W$MAP.IDS are state abbreviations.* For each W$MAP.IDS entry, this value can be set to allow drill-down for this state. When used,* it will reload the same widget, providing it with the drill-down state info in WIDGET.USER.INFO(1).* The use of this feature precludes the use of the W$MAP.VALUE.LINK feature below.** See also the FusionWidgets drill-down feature described later. This can be used to drill-down to a* specific widget from a map position when the map drilldown features described here are NOT used.*EQU W$MAP.VALUE.DD    TO WIDGET.INFO(48) ;* "1"=Enable Drill-Down for this State (from USA Map). If used, *                                           WIDGET.USER.INFO will contain the state map info:*                                           (1) = State Code (2-character)*                                           (2) = State Map Name (for use with MVDB.MAP.DATA)*EQU W$MAP.VALUE.LINK  TO WIDGET.INFO(49) ;* Link URL (Ignored if Drill-Down state is used)EQU W$MAP.LINK.MODE   TO WIDGET.INFO(50) ;* "N" = New Window, Blank = This Window** Fusion Widgets*EQU W$FW.CAPTION          TO WIDGET.INFO(51) ;* Widget captionEQU W$FW.SUBCAPTION       TO WIDGET.INFO(52) ;* SubcaptionEQU W$FW.LABELS           TO WIDGET.INFO(53) ;* (VM) Labels for each sectionEQU W$FW.VALUES           TO WIDGET.INFO(54) ;* (VM) Values for each sectionEQU W$FW.VALUE.OPTS       TO WIDGET.INFO(55) ;* (VM) XML attributes to be included in the <set> tagEQU W$FW.COLORS           TO WIDGET.INFO(56) ;* (VM) Alternate array of colors to useEQU W$FW.CHART.PALETTE    TO WIDGET.INFO(57) ;* 1-5 - Selects color theme for Spark Charts, Bullet Charts ** Fusion Widgets - Spark Charts*EQU W$FW.SPARK.TREND.BEG  TO WIDGET.INFO(58) ;* Trendline begin valueEQU W$FW.SPARK.TREND.END  TO WIDGET.INFO(59) ;* Trendline end valueEQU W$FW.SPARK.TREND.OPTS TO WIDGET.INFO(60) ;* Trendline options** Linear charts (Bullet Charts, Guages)*EQU W$FW.LOWER.LIMIT      TO WIDGET.INFO(61)EQU W$FW.UPPER.LIMIT      TO WIDGET.INFO(62)EQU W$FW.COLOR.RANGE      TO WIDGET.INFO(63) ;* <1> Range lower limit*                                               <2> Range upper limit*                                               <3> Range Color (This seems to be ignored on bullet charts)*                                               <4> Range options (attributes to appear in <color> tagEQU W$FW.METER.VALUE       TO WIDGET.INFO(64) ;* The numeric value of the meter guageEQU W$FW.METER.VALUE.OPTS  TO WIDGET.INFO(65) ;* Optional attributes to appear in the <value> tagEQU W$FW.METER.TARGET      TO WIDGET.INFO(66) ;* Target value for the meter (where appropriate) (Bullet)EQU W$FW.METER.TARGET.OPTS TO WIDGET.INFO(67) ;* Option attributes to appear in the <target> tag*EQU W$FW.NUMBER.PREFIX    TO WIDGET.INFO(68) ;* Such as "$"EQU W$FW.NUMBER.SUFFIX    TO WIDGET.INFO(69) ;* Such as "K" or "MM"EQU W$FW.TICKMARKS        TO WIDGET.INFO(70) ;* Tickmark Properties for Bullets, Gauges*                                               <1> 1 or 0 ; Show Tick Marks (1 = default)*                                               <2> 1 or 0 ; Show Tick Values next to the marks (1 = default)*                                               <3> A or B ; Show Above or Below graph (B = default)*                                               <4> Number of major tickmarks (default is calculated)*                                               <5> Number of minor tickmarks between major ones (default is none)*EQU W$FW.LOWER.LIMIT.LABEL  TO WIDGET.INFO(71) ;* For gauges, these are the labels asssociated with theEQU W$FW.UPPER.LIMIT.LABEL  TO WIDGET.INFO(72) ;* lower and upper limitsEQU W$FW.DIAL.VALUES        TO WIDGET.INFO(73) ;* (VM) value associated with each dial on the gaugeEQU W$FW.DIAL.OPTS          TO WIDGET.INFO(74) ;* Optional atributes to appear in the <dial> tagEQU W$FW.TRENDPOINT.VALUES  TO WIDGET.INFO(75) ;* (VM) Trendpoints on gauges*                                               * Optionally, <2> may be used to specify an ending value*                                               * to plot an arc on a gauge between <1,X> and <2,X>EQU W$FW.TRENDPOINT.LABELS  TO WIDGET.INFO(76) ;* (VM) Associated trendpoint label textEQU W$FW.TRENDPOINT.OPTS    TO WIDGET.INFO(77) ;* Optional attributes to appear in the <point> tag*EQU W$FW.THERMOMETER.COLOR  TO WIDGET.INFO(78) ;* Fill color for Thermometer and Cylinder charts** The values below allow you to set up drill-down parameters for most FusionWidgets and FusionCharts* values. These values correspond with W$FW.VALUES, W$FW.METER.VALUE, W$FW.DIAL.VALUES, W$PIE.VALUES,* W$BAR.VALUES and also with W$FW.MAP.IDS when NOT using the built-in drill-down facilities in the* USAMAP type. It may be used when a state map is being created.* EQU W$FW.DD.UD.POS          TO WIDGET.INFO(79) ;* WIDGET.USER.DATA(x) location to store the user-defined valueEQU W$FW.DD.UD.VAL          TO WIDGET.INFO(80) ;* ^^ = this_value - gets stored in WIDGET.USER.DATA(x) positionEQU W$FW.DD.WIDGET          TO WIDGET.INFO(81) ;* Drill-down widget name to be invokedEQU W$FW.DD.PARAMS          TO WIDGET.INFO(82) ;* Drill down params (UNUSED)*EQU W$FW.BC.PLOT.COLOR      TO WIDGET.INFO(83) ;* Plot color of bullet-chart plot lineEQU W$FW.BC.TARGET.COLOR    TO WIDGET.INFO(84) ;* Color of bullet-chart target lineEQU W$MAP.VALUE.TOOLTEXT    TO WIDGET.INFO(85) ;* toolText value for mapEQU W$INPUT.PROMPT.PARAMS   TO WIDGET.INFO(86) ;* Prompt text styling options. Goes into label tag.** Color Names*EQU COLOR$RED      TO "#FF0000"EQU COLOR$MAROON   TO "#800000"EQU COLOR$FUCHSIA  TO "#FF00FF"EQU COLOR$MAGENTA  TO "#FF00FF"EQU COLOR$ORANGE   TO "#FFA500"EQU COLOR$YELLOW   TO "#FFFF00"EQU COLOR$LIME     TO "#00FF00"EQU COLOR$GREEN    TO "#008000"EQU COLOR$OLIVE    TO "#808000"EQU COLOR$CYAN     TO "#00FFFF"EQU COLOR$AQUA     TO "#00FFFF"EQU COLOR$TEAL     TO "#008080"EQU COLOR$BLUE     TO "#0000FF"EQU COLOR$NAVY     TO "#000080"EQU COLOR$PURPLE   TO "#800080"EQU COLOR$BLACK    TO "#000000"EQU COLOR$SILVER   TO "#C0C0C0"EQU COLOR$GRAY     TO "#808080"EQU COLOR$GREY     TO "#808080"EQU COLOR$WHITE    TO "#FFFFFF"000014SOURCE.VIEW.ICON0c20005EBWWW.INCLUDE0c2** Standard web include*COMMON /WWW/ WWW.INFO(50), F.WEB.SESSIONEQU SESSION$ID               TO WWW.INFO(1)EQU SESSION$CONTENT.TYPE     TO WWW.INFO(2)EQU SESSION$CONTENT.SENT     TO WWW.INFO(3)EQU SESSION$OUTBUF           TO WWW.INFO(4)EQU SESSION$HEADERS          TO WWW.INFO(5)EQU SESSION$COOKIES          TO WWW.INFO(6)EQU SESSION$OUTBUF.SIZE      TO WWW.INFO(7)EQU SESSION$OUTBUF.FLAG      TO WWW.INFO(8)EQU SESSION$TIME.OUT         TO WWW.INFO(9)EQU SESSION$GLOBAL.DEBUG     TO WWW.INFO(10)EQU SESSION$STATUS.CODE      TO WWW.INFO(11)EQU SESSION$WDEBUG.MODE      TO WWW.INFO(12)EQU CONFIG$WDB.RESOURCE      TO WWW.INFO(15)EQU CGI$VARS                 TO WWW.INFO(25)EQU CGI$VALS                 TO WWW.INFO(26)EQU CGI$CVARS                TO WWW.INFO(27)EQU CGI$CVALS                TO WWW.INFO(28)EQU CGI$SERVER.NAME          TO WWW.INFO(29)EQU CGI$PATH                 TO WWW.INFO(30)EQU CGI$SERVER.PORT          TO WWW.INFO(31)EQU CGI$BODY                 TO WWW.INFO(32)EQU CGI$HEADERVALS           TO WWW.INFO(33)EQU CGI$HEADERVARS           TO WWW.INFO(34)EQU CGI$RESTPARAMS           TO WWW.INFO(35)EQU CGI$CONFIG               TO WWW.INFO(36)EQU F.WEB.FORMS              TO WWW.INFO(40)EQU CGI$APPSVR.ID            TO WWW.INFO(45)EQU CGI$RESERVED1            TO WWW.INFO(46)EQU CGI$RESERVED2            TO WWW.INFO(47)EQU CGI$RESERVED3            TO WWW.INFO(48)EQU CGI$UNIQUE.ID            TO WWW.INFO(49)EQU CGI$RESOURCE.NAME        TO WWW.INFO(50)000481WWW.INFO0c2** Element index for standard web common /WWW/ WWW.INFO array*EQU SESSION_ID               TO 1EQU SESSION_CONTENT.TYPE     TO 2EQU SESSION_CONTENT.SENT     TO 3EQU SESSION_OUTBUF           TO 4EQU SESSION_HEADERS          TO 5EQU SESSION_COOKIES          TO 6EQU SESSION_OUTBUF.SIZE      TO 7EQU SESSION_OUTBUF.FLAG      TO 8EQU SESSION_TIME.OUT         TO 9EQU SESSION_GLOBAL.DEBUG     TO 10EQU SESSION_STATUS.CODE      TO 11EQU SESSION_WDEBUG_MODE      TO 12EQU CONFIG_WDB.RESOURCE      TO 15EQU CGI_VARS                 TO 25EQU CGI_VALS                 TO 26EQU CGI_CVARS                TO 27EQU CGI_CVALS                TO 28 EQU CGI_SERVER.NAME          TO 29EQU CGI_PATH                 TO 30EQU CGI_SERVER.PORT          TO 31EQU CGI_BODY                 TO 32EQU CGI_HEADERVALS           TO 33EQU CGI_HEADERVARS           TO 34EQU CGI_RESTPARAMS           TO 35EQU CGI_CONFIG               TO 36EQU CGI_APPSVR.ID            TO 45EQU CGI_RESERVED1            TO 46EQU CGI_RESERVED2            TO 47EQU CGI_RESERVED3            TO 48EQU CGI_UNIQUE.ID            TO 49EQU CGI_RESOURCE.NAME        TO 500002CFUD.DICT.SALES0c0000033CLOSE.DATE.YMO0c0A0A;1(DY):1(D2-)(G-1)R10000028CLOSE.DATE.MM0c0D1DMCLOSE MONTH8RS00002CCLOSE.DATE.YM0c0A0A;1(DY):1(DM)R10000016BRANCH0c0D1315LS000016REGION0c0D1415LS000018CNT0c0A0F;C1R5000018ATT100c0D10MD210RS00001BCLOSE.DATE0c0D1D2-8RS00003CCLOSE.DATE.YYYY0c0IOCONV(ATT1,'D4-')[7,4]CLOSE YEAR8LS000018@ID0c0D0SALES10LS000016ATT80c0D8MD210RS000017REP.NAME0c0D525LS000015PIPE0c0I"|"|1LS000016ATT90c0D9MD210RS000018ATT120c0D12MD210RS000012ATT10c0D16RS00001AEXT.COST0c0D9MD210RS00003BGROSS.PROFIT0c0IEXT.AMT - EXT.COSTMD2GROSS PROFIT10RS000023EXT.AMT0c0D8MD2EXT.AMOUNT10RS0000CDUD.DICT.AP0c0000023DATE.PAID0c0D8D2-Date Paid8RS000026INV.AMOUNT0c0D6MD2Inv.Amount13RS000022DUE.DATE0c0D20D2-Due.Date8RS000021BALANCE0c0D50MD2Balance13RS000015PIPE0c0I"|" 1LS00023DUD.DICT.DASHBOARD.CLOSING.STATS0c0000026SALESMAN0c0IFIELD(@ID,'*',1)20LS000024BRANCH0c0IFIELD(@ID,'*',3)10LS000023YYYYMM0c0IFIELD(@ID,'*',2)6LS000013ID0c0I@ID10LS000032GROSS.PROFIT0c0IAMOUNT - COST.OF.SALEMD212RS000026YYYY0c0IFIELD(@ID,'*',2)[1,4]4RS000015PIPE0c0I"|" 1LS000022YYYYMM*BRANCH0c0I@IDG1*210LS000024REGION0c0IFIELD(@ID,'*',4)10LS000018AMOUNT0c0D1MD212RS00001ECOST.OF.SALE0c0D2MD212RS000040REGION*YYYYMM0c0IFIELD(@ID,"*",4):"*":FIELD(@ID,"*",2)10LS000023SALESMAN*YYYYMM0c0I@IDG*220LS0000CEDICT_WDB.LOG0c000001CDATE0c1A2DATED2/R800001CDURATION0c1A5MSR10000020PROGRAM0c1A1PROGRAML30000020AGE0c1A2AGEA;(D)-(2)R8000028TIME0c1A3TIMEMTSA;(3)/"1000"R8000136UD.DICT.AR0c0000028INVOICE.AMT0c0D6MD2Invoice.Amt13RS000022DUE.DATE0c0D20D2-Due.Date8RS000021BALANCE0c0D50MD2Balance13RS000026DATES.PAID0c0D8D2-CheckDates8RS000017CUST0c0D1Cust25LS00001BBIG.CUST0c0D1Cust40LS000014PIPE0c0I"|"1LS000021CUST.NAME0c0D1Cust.Name25LS0007C1MV.INSTALL.CF0c0000489MVAPPS-PRE-SCRIPT0c0DELETE MD APCREATE-FILE RSS.BP 3 11CREATE-FILE RSS.FEEDS 1 11CREATE-FILE MV.WEB.ED.ARCHIVE 3 301CREATE-FILE MVDB.CONTROL 1 11CREATE-FILE MVDB.DEFS 3 17CREATE-FILE MVDB.SUB.TEMPLATES 1 17CREATE-FILE MVDB.SUBS 31 101CREATE-FILE MVDB.WIDGET.TYPES 1 3CREATE-FILE MVDB.WIDGETS 3 31CREATE-FILE MVDB.MAP.DATA 3 181CREATE-FILE MVDB.UDATA 3 101CREATE-FILE MVDB.USERS 3 31CREATE-FILE MVPC.CONTROL 1 3CREATE-FILE WBPD 1 11CREATE-FILE WDB.BP 11 31CREATE-FILE WEB.FORMS 1 101CREATE-FILE WDB.Q 3 31CREATE-FILE WEB.SESSION 3 71CREATE-FILE MVAPPS.INSTALLED 3 11CREATE-FILE MVBP.FORMS 1 11CREATE-FILE MVDB.THEMES 1 3CREATE-FILE MVBP.BP 3 5CREATE-FILE MVDB.EMAILED.HTML 1 79CREATE-FILE WDB.RESOURCE 1 3CREATE-FILE WREST.BP 3 5CREATE-FILE WOBJ.BP 3 5CREATE-FILE MVDBTOOLKIT.BP 3 5CREATE-FILE MVMAKE.BP 3 5CREATE-FILE DASHBOARD.CLOSING.STATS 3 97CREATE-FILE DASHBOARD.BALANCES 3 97CREATE-FILE PORTAL.SALES 3 997CREATE-FILE PORTAL.AR 3 997CREATE-FILE PORTAL.AP 3 997CREATE-FILE UD.DICT.DASHBOARD.CLOSING.STATS 1 7CREATE-FILE UD.DICT.SALES 1 1CREATE-FILE UD.DICT.AR 1 1CREATE-FILE UD.DICT.AP 1 1CREATE-FILE MVSENDGRID.BP 3 30002C4MVAPPS-POST-SCRIPT0c0DELETE MD DOWNLOAD.XLS INIT.WWW MV.COMPILE MVAPPS.STATUS MVDB.ADMIN MVDB.MAIN MVDB.WEB.ED MVPKG.MAIN PACK-FILE RSS.MAIN RSS.MAINT WDB.INIT WDB.TEST WDB.VIEW XML.DATABASIC MVDB.SUBS *CATALOG MVDB.SUBS *BASIC RSS.BP *CATALOG RSS.BP *BASIC WDB.BP *CATALOG WDB.BP *DELETE DM,MD, MVAPPS.INSTALL.PROCCOMPILE WDB.BP APP.INSTALLER (OWBASIC MVBP.BP *CATALOG MVBP.BP *BASIC WOBJ.BP *CATALOG WOBJ.BP *BASIC WREST.BP *CATALOG WREST.BP *DELETE DICT WDB.LOG WDB.LOGDELETE DICT WDB.DEBUG WDB.DEBUGRUN WDB.BP USER.UPDATERUN MVDB.SUBS PURGE.NON.PLATFORM.WIDGETS:CCOMPILE MVDBTOOLKIT.BPCATALOG MVDBTOOLKIT.BP!mkdir TMPMVDBTOOLKIT.CONFIGBASIC MVSENDGRID.BP *CATALOG MVSENDGRID.BP *000051PACKAGE.INFO0c0MultiValue Dashboard/Portal Reports/MVConnect1.7.4dbMVDB18000052EDICT_WDB.DEBUG0c000001CDATE0c1A1DATED2/R8000019PORT0c1A4PORTR4000026REQUEST.ID0c1A9REQUEST IDL2500001BPATH0c1A12PATHL25000029REMOTE.ADDR0c1A13REMOTE ADDRL1400001DTYPE0c1A0TYPEG0/1L4000026CONTROLLER0c1A7CONTROLLERL12000033RESPONSE.CONTENT0c1A22RESPONSE CONTENTT6000002DSESSION.DATE0c1A28SESSION DATED2/R800002BSESSION.VARS0c1A26SESSION VARSL1200002BSESSION.VALS0c1A27SESSION VALSL20000017DUR0c1A3DURR7000019REQ0c1A10REQL40000020AGE0c1A1AGEA;(D)-(1)R8000020PROGRAM0c1A8PROGRAML2500001ESTATUS0c1A14STATUSR600001BBODY0c1A19BODYT60000027SESSION.ID0c1A25SESSION IDL2500001BLINT0c1A32LINTT6000001CTIME0c1A2TIMEMTSR8000020HANDLER0c1A5HANDLERL10000022RESOURCE0c1A6RESOURCEL1200001EMETHOD0c1A11METHODL6000029HEADER.VARS0c1A15HEADER VARSL12000029HEADER.VALS0c1A16HEADER VALSL20000023CGI.VARS0c1A17CGI VARSL12000023CGI.VALS0c1A18CGI VALSL2000002DRESPONSE.VARS0c1A20RESPONSE VARSL1200002DRESPONSE.VALS0c1A21RESPONSE VALSL2000002DSESSION.TIME0c1A29SESSION TIMEMTSR8000021WARNING0c1A30WARNINGT6000001DERROR0c1A31ERRORT60000046MD0c000003AMVAPPS.INSTALLER0c2PQHRUN WDB.BP APP.INSTALLERSTONA2P018DDBWEB.FORMS0c0000C4DPORTAL.DASHBOARD.SALES.AR.AP0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center">AP Balance</td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000200outerTrackWrapper0c2    <div id="outerTrackWrapper">		<div id="trackWrapper">			<div id="trackMsg" style="width: 165px; height: 34px; float: left;"><div id="dispRate">&nbsp;</div></div>			<div id="track1" style="width:200px; height:34px; float: right; margin: 0 10px 0 0; background: url(/db/images/trackSlider.png) 0px center no-repeat;">				<div id="handle1" style="width:12px; height:34px; margin: 6px 0 0 0; float: left;"><img src="/db/images/sliderHandle.png" alt="" /></div>			</div>		</div>	</div>0002E9ed_output.html0c2<div class="ed_error"><!-- HEADER --><!-- FOOTER --></div><div id="compile_output" class="compile_output"><!-- COMPILE_OUTPUT --></div><div id="compile_errline"><!-- COMPILE_ERRLINE --></div><div id="last_compile"><!-- LAST_COMPILE --></div><div id="ed_content"><!-- ED_CONTENT --></div><div id="num_calls"><!-- NUM_OF_CALLS --></div><div id="num_includes"><!-- NUM_OF_INCLUDES --></div><div id="num_files"><!-- NUM_OF_FILES --></div><div id="num_archives"><!-- NUM_OF_FILES --></div><div id="calls_content"><!-- EA_CALLS_CONTENT --></div><div id="includes_content"><!-- EA_INCLUDES_CONTENT --></div><div id="files_content"><!-- EA_FILES_CONTENT --></div><div id="archive_content"><!-- EA_ARCHIVE_CONTENT --></div>000253FCF_template.html0c2<!-- start FC script -->        <div id="<!-- chart_div_id -->">        </div>        <script type="text/javascript">        FusionCharts.ready(function () {            var myChart = new FusionCharts({              "type": "[FCF_MODULE]",              "renderAt": "<!-- chart_div_id -->",              "width": "<!-- chart_width -->",              "height": "<!-- chart_height -->",              "dataFormat": "xml",              "dataSource": "<!-- CHARTXML -->"            });          myChart.render();        });        </script><!-- end of FC script -->000E8DPORTAL.DASHBOARD0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL MARGINS&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center">AP Balance</td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>0010E6admin_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>	<script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>	    <script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>            	    <script src="/db/javascripts/jquery.form.js" type="text/javascript" charset="utf-8"></script>    	        	<script src="/db/javascripts/jquery.url.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/initAdminTemplate.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/sortable.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/tablesort.js" type="text/javascript" charset="utf-8"></script>			<link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/ingrid.css" type="text/css" charset="utf-8" />    <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />    <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]-->    <!-- SITE_THEME -->		<title>MultiValue Dashboard Admin</title>		<script type="text/javascript">	<!-- ADMIN_SCRIPTS -->	</script></head><body><div id="header"><!-- HEADER --></div>	<div id="logo">    	<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">	</div><div id="mainWrapper"><div id="main"><!-- Add new user form --><div id="new-user" title="New user" style="display:none;" ><form id="new-user-form" method="get" action="/dbc/MVDB.ADMIN"><div id="new-user-messages"></div><table><tbody><tr> <td align="right">User ID:</td> <td><input id="new-userid" type="text" value="" name="new_userid"/></td></tr><tr> <td align="right">Name:</td> <td><input id="username" type="text" value="" name="username"/></td></tr><tr id='default-dashboard'> <td align="right">Default Dashboard:</td> <td id="default-dashboard-container"><!-- default_dashboard --></td> <td/></tr><tr> <td align="right">Role:</td> <td>   <select id="user-role" name="user_role">      <option value="User">User</option>      <option value="Administrator">Administrator</option>   </select> </td></tr><tr> <td align="right">Optional Logo Path:</td> <td><input id="opt_logo_path" type="text" value="" name="opt_logo_path"/></td></tr><tr> <td align="right">Password:</td> <td><input id="user-password" type="password" value="" name="user_password"/></td></tr><tr> <td align="right">Confirm Password:</td> <td><input id="confirm-password" type="password" value="" name="confirm_password"/></td></tr></tbody></table><input type="hidden" value="save_user" name="action"/></form></div><!-- Add new widget form --><div id="new-widget" title="New widget" style="display:none;" ><form id="new-widget-form" method="get" action="/dbc/MVDB.ADMIN"><div id="widget-messages"></div><table><tbody><tr> <td align="right">Widget Name: *</td> <td><input id="widget_id" type="text" value="" name="new_widgetid" /></td></tr><tr> <td align="right">Subroutine: *</td> <td><input id="widget_sub" type="text" value="" name="widget_sub" /><!-- edit_source_link --></td></tr><tr> <td align="right">Users:</td> <td><input id="widget_users" type="text" value="" name="widget_users" /><br/><font size="1">comma-separated</font></td></tr></tbody></table><!--input type="submit" value="Delete Widget" name="delete_widget"/ --><p><input id="save_widgetid" type="hidden" value="" name="save_widgetid" /><input id="widget_action" type="hidden" value="save_widget" name="action" /><input id="save_widget" type="hidden" value="Save" name="save_widget" /></p></form></div><a href="edit-sub" id="edit-sub-link" target="_blank" style="display: none;">Edit subroutine</a><!-- ADMIN_MAIN --></div></div><div id="footer">    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a>    </div><!-- FOOTER --></div></body></html>002E52PORTAL.REPORT.DOCUMENTATION0c2<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 15 (filtered)"><style><!-- /* Font Definitions */ @font-face	{font-family:Wingdings;	panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face	{font-family:"Cambria Math";	panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face	{font-family:Calibri;	panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{margin:0in;	margin-bottom:.0001pt;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}.MsoChpDefault	{font-family:"Calibri",sans-serif;}.MsoPapDefault	{margin-bottom:8.0pt;	line-height:107%;}@page WordSection1	{size:8.5in 11.0in;	margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1	{page:WordSection1;} /* List Definitions */ ol	{margin-bottom:0in;}ul	{margin-bottom:0in;}--></style></head><body lang=EN-US><div class=WordSection1><p class=MsoNormal><b><span style='font-size:14.0pt'>Portal Dashboard Reports</span></b></p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal><b><span style='font-size:12.0pt'>High level dashboardsummarizing Sales, Gross Profit, Margin, AR, and AP</span></b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Month to Date and Year to Date numbers</p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>AR Balance amounts and percentages for the aging periods of current,1-30, 31-60, 61-90, and 90+</p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>AP Balance amounts for the aging periods of current, 1-30, 31-60,61-90, and 90+</p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Drilldown functionality to see detail for Sales, Gross Profit,Margin, and aging for AR and AP</p><p class=MsoNormal><b>&nbsp;</b></p><p class=MsoNormal><b><span style='font-size:12.0pt'>Sales, Gross Profit, andMargin Reports:</span></b></p><p class=MsoNormal><b><span style='font-size:12.0pt'>&nbsp;</span></b></p><p class=MsoNormal><b>MTD Sales</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing daily activity broken out by Sales and GP</p><p class=MsoNormal><b>YTD Sales</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing each month of the current year broken out by Salesand GP</p><p class=MsoNormal><b>Year to Year Sales and GP</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Sales and GP for each of the past few years</p><p class=MsoNormal><b>Year to Year Sales by Month</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Sales by month, comparing each of the past fewyears.</p><p class=MsoNormal><b>Year to Year GP by Month</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing GP by month, comparing each of the past fewyears.</p><p class=MsoNormal><b>MTD Sales by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Month to Date Sales and GP broken out by Salesperson.</p><p class=MsoNormal><b>YTD Sales by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Date Sales and GP broken out by Salesperson.</p><p class=MsoNormal><b>Year to Year Sales by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year Sales broken out by Salesperson</p><p class=MsoNormal><b>Year to Year GP by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year GP broken out by Salesperson</p><p class=MsoNormal><b>MTD Sales by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Month to Date Sales and GP broken out by Branch.</p><p class=MsoNormal><b>YTD Sales by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Date Sales and GP broken out by Branch.</p><p class=MsoNormal><b>Year to Year Sales by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year Sales broken out by Branch.</p><p class=MsoNormal><b>Year to Year GP by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year GP broken out by Branch.</p><p class=MsoNormal><b>MTD Sales by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Month to Date Sales and GP broken out by Region.</p><p class=MsoNormal><b>YTD Sales by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Date Sales and GP broken out by Region.</p><p class=MsoNormal><b>Year to Year Sales by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year Sales broken out by Region.</p><p class=MsoNormal><b>Year to Year GP by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year GP broken out by Region.</p><p class=MsoListParagraph style='margin-left:0in'>&nbsp;</p><p class=MsoListParagraph style='margin-left:0in'><b><span style='font-size:12.0pt'>AR Reports</span></b></p><p class=MsoListParagraph style='margin-left:0in'><b><span style='font-size:12.0pt'>&nbsp;</span></b></p><p class=MsoNormal><b>Current AR Aging</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Pie chart breaking out all receivables broken out by current, 0-30,31-60, 61-90, and 90+</p><p class=MsoNormal><b>Average AR Aging Days by Year</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart comparing the average days to pay for the past fewyears.</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on a year to see a pie chart showing the AR aging forthe year broken out by 0-30, 31-60, 61-90, and 90+.</p><p class=MsoNormal><b>Average Days to Pay Last 12 Months</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart comparing the average days to pay, by month, for thepast 12 months.</p><p class=MsoNormal><b>Average Days by Month YYYY</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart comparing the average days to pay for each month inyear YYYY. This option will appear for the past few years with YYYY showing theyear.</p><p class=MsoNormal><b>Customers Needing Aging Attention</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Table report showing the categories of:</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>50 Customers with the most amount owed</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>50 Customers with the most days aged.</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>50 Customers aged over 30 days where their average aging over thepast 60 days is longer than it has been over the past 1000 days.</p><p class=MsoNormal><b><span style='font-size:12.0pt'>&nbsp;</span></b></p><p class=MsoNormal><b><span style='font-size:12.0pt'>AP Reports</span></b></p><p class=MsoNormal><b>&nbsp;</b></p><p class=MsoNormal><b>Current AP Aging</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Pie chart breaking out all payables broken out by current, 0-30,31-60, 61-90, and 90+</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p></div></body></html>002160web_ed_settings.html0c2<html xmlns="http://www.w3.org/1999/xhtml">  <head>    <title>D3 Web Editor Settings</title>    <meta http-equiv="content-type" content="text/html; charset=<!--CHARACTER_SET-->" />    <link rel="stylesheet" type="text/css" href="/db/css/reset.css" media="screen" />    <link rel="stylesheet" type="text/css" href="/db/css/screen.css" media="screen" />    <!--[if IE]>    <link rel="stylesheet" type="text/css" href="/db/css/screen_ie.css" media="screen" />    <![endif]-->    <script src="/db/javascripts/jquery.tools.min.js" type="text/javascript"></script>    <script src="/db/javascripts/global.js" type="text/javascript"></script>  </head>  <body>    <div id="header" class="group">      <div id="logo">D3 Web Editor Settings</div>    </div>        <div id="main" class="group">      <div id="content" class="group">        <div id="section" class="group">          <ul class="tabs group">             <li><a href="#">General Settings</a></li>             <li><a href="#">Accounts</a></li>             <li><a href="#">Program Files</a></li>           </ul>          <div class="panes">             <div class="pane">              <form action="/dbc/WEB.ED.SETTINGS" method="POST">                <fieldset>                  <legend>Compiling Defaults</legend>                  <ul class="form">                    <li class="enable">                      <input type="checkbox" class="checkbox" id="enable_compiling" name="enable_compiling" [ENABLE_COMPILING] />                      <label for="enable_compiling">Enable Compiling</label>                    </li>                    <li>                      <label>Compile Verb:</label>                      <input type="text" class="text" name="compile_verb" value="[COMPILE_VERB]" />                    </li>                    <li>                      <label>Compile Options:</label>                      <input type="text" class="text" name="compile_opts" value="[COMPILE_OPTS]" />                    </li>                    <li>                      <label for="flash">Flash Compile (0 option)</label>                      <input type="checkbox" class="checkbox" id="flash" name="flash_compile" [FLASH_COMPILE] />                    </li>                    <li>                      <label for="catalog">Catalog after compile</label>                      <input type="checkbox" class="checkbox" id="catalog" name="catalog" [CATALOG] />                    </li>                  </ul>                </fieldset>                <fieldset>                  <legend>Options</legend>                  <ul class="form">                    <li>                      <label>Text Size:</label>                      <select name="text_size">                        [TEXT_SIZE_OPTS]                      </select>                    </li>                    <li>                      <label>Default Account:</label>                      <input type="text" class="text" name="default_account" value="[DEFAULT_ACCOUNT]" />                    </li>                    <li>                      <label>Default File:</label>                      <input type="text" class="text" name="default_file" value="[DEFAULT_FILE]"  />                    </li>                  </ul>                </fieldset>                <fieldset>                  <ul>                    <li>                      <input type="checkbox" class="checkbox" id="default" name="global_default" [GLOBAL_DEFAULT] />                      <label for="default">Set as default settings for all users</label>                    </li>                  </ul>                </fieldset>              </form>            </div>             <div class="pane">              <div class="table">                <table cellspacing="0">                  <thead>                    <tr>                      <th>Account</th>                      <th>Password</th>                      <th>Settings</th>                      <th>Options</th>                    </tr>                  </thead>                  <tbody>                  [ACCOUNT_LIST]                  </tbody>                </table>              </div>              <div>                <form action="/dbc/WEB.ED.SETTINGS" method="POST">                  <fieldset>                    <label for="account">Account</label>                    <input type="text" class="text" name="add_account" value="" />                    <input type="submit" value="Add" class="submit"/>                  </fieldset>                </form>              </div>            </div>            <div class="pane">              <div class="table">                <table cellspacing="0">                  <thead>                    <tr>                      <th>Account</th>                      <th>File</th>                      <th>Settings</th>                      <th>Options</th>                    </tr>                  </thead>                  <tbody>                  [FILE_LIST]                  </tbody>                </table>              </div>              <div class="footer_form">                <form action="#">                  <fieldset>                    <label for="account">Account</label>                    <input type="text" class="text" style="margin-right: 10px;"/>                    <label for="account">File</label>                    <input type="text" class="text"/>                    <input type="submit" value="Add" class="submit"/>                  </fieldset>                </form>              </div>            </div>           </div>        </div>      </div>    </div>    <!-- modals -->     <div class="modal" id="edit_account_settings">       <form action="#">        <fieldset>          <legend>Settings for Account: 00000</legend>          <ul class="form">            <li>              <label>Password for LOGTO this account:</label>              <input type="password" class="text"/>            </li>            <li class="enable">              <input type="checkbox" class="checkbox" id="enable_compiling_edit_account_settings"/>              <label for="enable_compiling_edit_account_settings">Enable Compiling</label>            </li>            <li>              <label>Compile Verb:</label>              <input type="text" class="text"/>            </li>            <li>              <label>Compile Options:</label>              <input type="text" class="text"/>            </li>            <li>              <label for="flash_edit_account_settings">Flash Compile (0 option)</label>              <input type="checkbox" class="checkbox" id="flash_edit_account_settings"/>            </li>            <li>              <label for="catalog_edit_account_settings">Catalog after compile</label>              <input type="checkbox" class="checkbox" id="catalog_edit_account_settings"/>            </li>          </ul>        </fieldset>        <div class="buttons">          <input type="submit" value="Save"/>          <input type="submit" value="Cancel" class="close"/>        </div>      </form>    </div>    <div class="modal" id="edit_compile_settings">       <form action="#">        <fieldset>          <legend>Compile Settings for 00000, 00000</legend>          <ul class="form">            <li class="enable">              <input type="checkbox" class="checkbox" id="enable_compiling_edit_compile_settings"/>              <label for="enable_compiling_edit_compile_settings">Enable Compiling</label>            </li>            <li>              <label>Compile Verb:</label>              <input type="text" class="text"/>            </li>            <li>              <label>Compile Options:</label>              <input type="text" class="text"/>            </li>            <li>              <label for="flash_edit_compile_settings">Flash Compile (0 option)</label>              <input type="checkbox" class="checkbox" id="flash_edit_compile_settings"/>            </li>            <li>              <label for="catalog_edit_compile_settings">Catalog after compile</label>              <input type="checkbox" class="checkbox" id="catalog_edit_compile_settings"/>            </li>          </ul>        </fieldset>        <div class="buttons">          <input type="submit" value="Save"/>          <input type="submit" value="Cancel" class="close"/>        </div>      </form>    </div>  </body></html>00110Eadmin_dashboards.html0c2<!-- Add new dashboard form --><script type="text/javascript">dashboard_ids = [<!-- list_of_dashboard_ids -->];</script><div id="dashboard-controls" class="ui-dialog">	<div class="button-pane-dialog">		<button id="save-dashboard" type="button" class="ui-state-default ui-corner-all">Save</button>		<button id="delete-dashboard" type="button" class="ui-state-default ui-corner-all">Delete</button>	</div></div><div id="dashboard-accordion" class="ui-accordion ui-widget ui-helper-reset">	<h3 id='dashboard-properties-header' class="ui-accordion-header ui-helper-reset ui-state-active ui-corner-top"><span class="ui-icon ui-icon-triangle-1-s"></span>Properties</h3>	<div id='dashboard-properties' title='New Dashboard' class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active" style="height: 350px;">			<div id="dashboard-messages"></div>		<form id="new-dashboard-form" method="post" action="/dbc/MVDB.ADMIN">		<div>				<input id="old_dbid" type="hidden" value="<!-- save_dbid -->" name="save_dbid" />			<input type="hidden" value="save_db" name="action" />				<input type="hidden" value="Save" name="save_db" />		</div>				<table>		<tbody><tr>		 <td  align="right">Dashboard ID:</td>		 <td id="dbid-container">		 <!-- edit_dbid -->		 </td>		</tr>		<tr>		 <td align="right">Description:</td>		 <td><input id="db_desc" type="text" value="<!-- db_desc -->" name="db_desc" size="63" /></td>		</tr>		<tr>		 <td align="right">Layout:</td>		 <td><input type="hidden" id="db_layout" name="db_layout" value="<!-- " />		 	<ul class='db-layout'>		 	<!-- db_layout_opts -->			</ul> 	     	    		 </td>		</tr>		<tr>		 <td align="right">Allowed Users:</td>		 <td><input id="db_users" type="text" value="<!-- db_users -->" name="db_users" size="63" /></td>		</tr>		<tr>		<td> </td><td>Leave blank to allow all users. Separate user IDs with commas to restrict acces to specific users.</td>		</tr>		<tr>		 <td align="right">Theme:</td>		 <td><!-- db_theme --></td>		</tr>		<tr>		 <td align="right">Sort Value:</td>		 <td><input id="db_sort" type="text" value="<!-- db_sort -->" name="db_sort" size="8" /></td>		</tr>		</tbody></table>		</form>	</div>	    <h3 class="ui-accordion-header ui-helper-reset ui-state-active ui-corner-top"><span class="ui-icon ui-icon-triangle-1-s"></span> Dashboard</h3>    <div id="dashboard-content" class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active">    		<div id="layout-header" class="one-column area">    		  <h4>HEADER</h4>              <!-- AREA_1_WIDGETS -->    		</div>	    	<div id="layout-body">		    <div class="one-column active">		    	<div class="area">		    	  <h4>AREA 1</h4>                  <!-- AREA_2_WIDGETS -->		    	</div>		    </div>		    <div class="two-column">		    	<div class="area first">		    	  <h4>AREA 1</h4>                  <!-- AREA_2_WIDGETS -->		    	</div>		   	    <div class="area last">		   	      <h4>AREA 2</h4>                  <!-- AREA_3_WIDGETS -->		   	    </div>        		    </div>		    <div class="three-column">		       	<div class="area first">		       	  <h4>AREA 1</h4>                  <!-- AREA_2_WIDGETS -->		       	</div>		    	<div class="area middle">		    	  <h4>AREA 2</h4>                  <!-- AREA_3_WIDGETS -->		    	</div>        		       	<div class="area last">		       	  <h4>AREA 3</h4>                  <!-- AREA_4_WIDGETS -->		        </div>    			    </div>            	    	</div>    		<div id="layout-footer" class="one-column area">    		  <h4>FOOTER</h4>              <!-- AREA_5_WIDGETS -->    		</div>    </div></div>    <div id="widget-toolbox" class="ui-accordion">	<h3 class="widget-header ui-accordion-header ui-state-active ui-state-focus"><span class="ui-icon ui-icon-triangle-1-s"></span>Widgets (draggable)</h3>		<div id="widget-icons"  class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active">		<!-- widget_list -->		</div></div><div id='change-layout-message' title="Change layout?" style="display: none; text-align: left;">	<p>Your layout areas currently have one or more widgets. Clicking 'Change' will move these widgets to the first column area.</p></div>000621login.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>	<link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />	<title>MultiValue Dashboard :: Login</title></head><body onLoad="document.loginform.loginid.focus();">	<div id="header">		<div id="logo">		  <BR /><img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">	   </div>	<!-- HEADER -->	</div>	<div id="dashboard">		<b><!-- ERROR --></b>		<div style="text-align:center;">			<h1><img src="/db/images/graphic_lock.gif" style="vertical-align:bottom;"/> Please Login</h1>			<div style="width:180px;text-align:left;margin:10px auto" id="loginbox">				<form name="loginform" action="<!-- CGI$PATH -->/MVDB.MAIN?dblogin=1" method="post">					<div class="ctrl">						<label for="login">Login</label>						<input id="getlogin" type="text" name="loginid" value="" class="text">					</div>					<div class="ctrl">						<label for="password">Password</label>						<input type="password" name="password" value="" class="password">					</div>						<div class="ctrl">						<input type="submit" value="Login" style="float:right">					</div>					</form>			</div>		</div>		</div>	<div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a></div>	</body></html>000273FCMAP_template.html0c2<!-- Fusion Chart Script -->	<div id="<!-- chart_div_id -->">	</div>	<input type="hidden" class="chartSource" value="/db/Maps/FCMap_[FCMAP_MODULE].swf" />	<input type="hidden" class="chartXML" value="<!-- CHARTXML -->" />	<input type="hidden" class="chartClass" value="fcmap" />	<script type="text/javascript">		// <![CDATA[		   var map = new FusionMaps("/db/Maps/FCMap_[FCMAP_MODULE].swf", "ChartId", "<!-- chart_width -->", "<!-- chart_height -->", "0", "1");		   map.setDataXML("<!-- CHARTXML -->");		   		   map.render("<!-- chart_div_id -->");		// ]]>	</script><!-- end of FC script -->0010C9SAVE.PORTAL.DASHBOARD0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Sales Reports">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Sales Reports">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Margins&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="38%" bgcolor="white">&nbsp;</td><td width="31%" align="center">MDT ~9~</td><td width="31%" align="center">YTD ~10~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="38%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY NET INCOME CHART">Net Income</a></td><td width="31%" align="right">~11~</td><td width="31%" align="right">~12~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="38%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY AVERAGE DAYS CHART">Average Days To Pay</a></td><td width="31%" align="center">~13~</td><td width="31%" align="center">~14~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Margins&udview=Portal Margins">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center">AP Balance</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000251FW_template.html0c2<!-- start FW script -->        <div id="<!-- chart_div_id -->">        </div>        <script type="text/javascript">        FusionCharts.ready(function () {            var myChart = new FusionCharts({              "type": "[FW_MODULE]",              "renderAt": "<!-- chart_div_id -->",              "width": "<!-- chart_width -->",              "height": "<!-- chart_height -->",              "dataFormat": "xml",              "dataSource": "<!-- CHARTXML -->"            });          myChart.render();        });        </script><!-- end of FW script -->000603PORTAL.DASHBOARD.SALES.GP0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL MARGINS&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000163db_inner_template0c2<div id="area1" class="area"> <!-- AREA1 --></div><div class="content <!-- column_style -->">  <div id="area2" class="area">   <!-- AREA2 -->  </div>  <div id="area3" class="area">   <!-- AREA3 -->  </div>  <div id="area4" class="area">   <!-- AREA4 -->  </div></div><div id="area5" class="area">  <!-- AREA5 --></div>000C40PORTAL.DASHBOARD.SALES.AR0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center"></td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>0013E6DEMO.FINANCIALS.DASHBOARD0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><th width=24% align="left" bgcolor="red">Sales</th><th width=19% bgcolor="white">&nbsp;</th><th width=19% bgcolor="white">&nbsp;</th><th width=19% bgcolor="white">&nbsp;</th><th width=19% bgcolor="white">&nbsp;</th></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% bgcolor="white">&nbsp;</td><td width=19% align="center">YTD~1~</td><td width=19% align="center">YTD~2~</td><td width=19% align="center">%(+/-)</td><td width=19% align="center">FY~3~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO REV.GP SALES CHART&udview=DEMO REV.GP SALES CHART&dd=dd&udpos1=1&udval1=REVENUES">Sales</a></td><td width=19% align="right">~4~</td><td width=19% align="right">~5~</td><td width=19% align="right">~6~</td><td width=19% align="right">~7~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO REV.GP SALES CHART&udview=DEMO REV.GP SALES CHART&dd=dd&udpos1=1&udval1=GROSSPROFIT">Gross Profit (GP$)</a></td><td width=19% align="right">~8~</td><td width=19% align="right">~9~</td><td width=19% align="right">~10~</td><td width=19% align="right">~11~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES CHART&udview=DEMO SALES CHART&dd=dd&udpos1=1&udval1=MARGIN">Margin (GP%)</a></td><td width=19% align="right">~12~</td><td width=19% align="right">~13~</td><td width=19% align="right"></td><td width=19% align="right">~14~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES CHART&udview=DEMO SALES CHART&dd=dd&udpos1=1&udval1=PARTS$">Parts Revenue ($)</a></td><td width=19% align="right">~15~</td><td width=19% align="right">~16~</td><td width=19% align="right">~17~</td><td width=19% align="right">~18~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES PERCENTS&udview=DEMO SALES PERCENTS&dd=dd&udpos1=1&udval1=PARTSPERCENT">Parts Revenue (%)</a></td><td width=19% align="right">~19~</td><td width=19% align="right">~20~</td><td width=19% align="right"></td><td width=19% align="right">~21~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES CHART&udview=DEMO SALES CHART&dd=dd&udpos1=1&udval1=SERVICES$">Services Revenue ($)</a></td><td width=19% align="right">~22~</td><td width=19% align="right">~23~</td><td width=19% align="right">~24~</td><td width=19% align="right">~25~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES PERCENTS&udview=DEMO SALES PERCENTS&dd=dd&udpos1=1&udval1=SERVICESPERCENT">Services Revenue (%)</a></td><td width=19% align="right">~26~</td><td width=19% align="right">~27~</td><td width=19% align="right"></td><td width=19% align="right">~28~</td></tr></thead></table><table width="100%" cols="4" border="0"><table width="100%" cols="4" border="0"><table width="100%" cols="4" border="0"><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><th width=24% align="left" bgcolor="red">Financials</th><th width=25% bgcolor="white">&nbsp;</th><th width=25% bgcolor="white">&nbsp;</th><th width=25% bgcolor="white">&nbsp;</th></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" bgcolor="white">&nbsp;</td><td width="25%" align="center">~29~ thru ~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="center">~32~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO NET INCOME CHART&udview=DEMO NET INCOME CHART&dd=dd">Net Income</a></td><td width="25%" align="right">~33~</td><td width="25%" align="right">~34~</td><td width="25%" align="right">~35~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO AVERAGE DAYS CHART&udview=DEMO AVERAGE DAYS CHART&dd=dd">Average Days To Pay</a></td><td width="25%" align="center">~44~</td><td width="25%" align="center">~45~</td><td width="25%" align="center">~46~</td></table>0005A9admin_login.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>	<link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <!-- SITE_THEME -->	<title>MultiValue Dashboard :: Administrative Login</title></head><body onLoad="document.loginform.adminpass.focus();">	<div id="header">		<div id="logo">			<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">	   </div>	<!-- HEADER -->	</div>	<div id="dashboard">		<b><!-- ERROR --></b>		<div style="text-align:center;">			<h1><img src="/db/images/graphic_lock.gif" style="vertical-align:bottom;"/> Please Login</h1>			<div style="width:180px;text-align:left;margin:10px auto" id="loginbox">				<form name="loginform" action="<!-- CGI$PATH -->/MVDB.ADMIN" method="post">					<div class="ctrl">						<label for="password">Password</label>						<input type="password" name="adminpass" value="" class="password">					</div>						<div class="ctrl">						<input type="submit" value="Login" style="float:right">					</div>					</form>			</div>		</div>		</div>	<div id="signature">MultiValue Dashboard - copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a></div>	</body></html>000E90PORTAL.DASHBOARD.SALES.GP.AR0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL MARGINS&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center"> </td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000E1Eed_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" ><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->" />    <title>Editing <!-- ITEM --></title>    <script language="Javascript" type="text/javascript" src="/db/edit_area/edit_area_full.js"></script>    <script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>	    <!--script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script--><script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>    	        <script src="/db/javascripts/jquery.form.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>    	        <!--script src="/db/javascripts/shortcut.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script-->    <script language="Javascript" type="text/javascript">	    	        	CALLS = <!-- NUM_OF_CALLS -->;        INCLUDES = <!-- NUM_OF_INCLUDES -->;        FILES = <!-- NUM_OF_FILES -->;                        ARCHIVES = <!-- NUM_OF_ARCHIVES -->;        CALLS_CONTENT = '<!-- EA_CALLS_CONTENT -->';        INCLUDES_CONTENT = '<!-- EA_INCLUDES_CONTENT -->';        FILES_CONTENT = '<!-- EA_FILES_CONTENT -->';        ARCHIVE_CONTENT = '<!-- EA_ARCHIVE_CONTENT -->';        LAST_COMPILE = '<!-- LAST_COMPILE -->';               	<!-- ED_SCRIPTS -->        // initialisation        	editAreaLoader.init({            id: "file_1" // id of the textarea to transform            ,start_highlight: true  // if start with highlight            ,allow_resize: "both"            ,allow_toggle: false            ,word_wrap: true            ,language: "en"            ,begin_toolbar: "load, save"            ,toolbar: "search, go_to_line, |, undo, redo, |, select_font,|, change_smooth_selection, highlight, reset_highlight, word_wrap, |, help"             ,save_callback: 'saveCompileItem'            ,EA_load_callback: "editAreaLoadComplete"             ,load_callback: 'openItem'            ,fullscreen: true            ,closebottomtab_callback: 'closeActiveTab'            ,syntax: "<!-- SYNTAX -->"        });	    <!-- WINDOW_HEIGHT - Put this where it needs to go -->    </script>        <script src="/db/javascripts/edit_area_init.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>     <script language="javascript" type="text/javascript">       	<!-- ED_INIT_SCRIPT -->    </script>       <link rel="StyleSheet" href="/db/css/web_editor.css" media="screen" type="text/css" />       <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />       <!--[if lte IE 8]>       <link rel="Stylesheet" href="/db/css/ie.css" media="screen" type="text/css" />       <![endif]--></head><body><div id="open-item-container" title="Open Item" style="display:none;"><span id="messages"> </span><form id="open-item-form" name="open-item-form" action="" method="post"><label>Account:</label><input id="ed_acct" type="text" value="" name="ed_acct" /><label>File: </label><input id="ed_file" type="text" value="" name="ed_file"/><label>Item: </label><input id="ed_item" type="text" value="" name="ed_item"/><input id="open-action" type="hidden" name="action" value="open" /></form></div><div id="compile-output-container" title="Compile output"><div id="compile-content"></div></div><!-- HEADER --><hr /><!-- BODY --><hr /><!-- FOOTER --><!-- COMPILE_OUTPUT --><hr /></body></html>000082pdf_inner_template0c2<div id="areas" class="area"> <!-- AREA1 --><!-- AREA2 --><!-- AREA3 --><!-- AREA4 --><!-- AREA5 --></div>000202WIDGET.DIV0c2<div class="widget">  <div class="widget_header">   <div class="widget_controls"><!-- CONTROLS --></div>   <h3 class="title"><!-- TITLE --></h3>   <!-- INPUT -->   <div class="widget_content_header"><!-- QUAD2 --><!-- QUAD1 -->        <div class="clear"></div>     </div>  </div>  <div class="widget_content"><div class="widget_content_padding"><!-- WIDGETDATA --></div></div>  <div class="widget_content_footer">   <!-- QUAD3 --><!-- QUAD4 -->  <div class="clear" ></div> </div></div>000348PORTAL.DASHBOARD.SALES0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table></div>001A1BPORTAL.REPORT.RUN.DOCUMENTATION0c2<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 15 (filtered)"><style><!-- /* Font Definitions */ @font-face	{font-family:Wingdings;	panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face	{font-family:"Cambria Math";	panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face	{font-family:Calibri;	panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:0in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}.MsoChpDefault	{font-family:"Calibri",sans-serif;}.MsoPapDefault	{margin-bottom:8.0pt;	line-height:107%;}@page WordSection1	{size:8.5in 11.0in;	margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1	{page:WordSection1;} /* List Definitions */ ol	{margin-bottom:0in;}ul	{margin-bottom:0in;}--></style></head><body lang=EN-US><div class=WordSection1><p class=MsoNormal style='margin-bottom:12.0pt'><b><span style='font-size:14.0pt;line-height:107%'>Running the Portal Dashboard Reports</span></b></p><p class=MsoListParagraphCxSpFirst style='margin-bottom:12.0pt;text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Run the Portal Reports Setup to configure the elements necessaryto run the reports. See the Portal Reports Setup Documentation </p><p class=MsoListParagraphCxSpMiddle style='margin-bottom:12.0pt;text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Run the Portal Dashboard to view the summary of sales andfinancials.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>The dashboard wants to have calculations refreshed within thepast 15 minutes. If, when starting the dashboard, it has been over 15 minutessince the last calculations, a temporary display will show that figures areupdating. After a satisfactory delay of a minute or so, click the Go buttonand the summary of sales and financials page should display. If not, repeatuntil it displays.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Leaving the dashboard running with Auto-Refresh slider activated forabout every 5 minutes will automatically refresh the dashboard display andtrigger a background recalculation of numbers when necessary.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>The title section of each dashboard page shows the date and timethe last calculations were run.</p><p class=MsoListParagraphCxSpMiddle style='margin-bottom:12.0pt;text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>On the summary of sales and financials, those labels underlinedand displayed in a color can drilled down on to display additional dashboards.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on <u><span style='color:#C45911'>Sales</span></u> toinitiate the Portal Sales Reports dashboard</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on <u><span style='color:#C45911'>Gross Profit (GP$)</span></u><spanstyle='color:#C45911'> </span>to initiate the same Portal Sales Reportsdashboard</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on <u><span style='color:#C45911'>Margin (GP%)</span></u><spanstyle='color:#C45911'> </span>to initiate the Portal Year to Year Marginsdashboard</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on the <u><span style='color:#C45911'>Balances as ofMM-DD-YY</span></u><span style='color:#C45911'> </span>to initiate the AR andAP dashboard</p><p class=MsoListParagraphCxSpLast style='margin-bottom:12.0pt;text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>After doing a drill downs, the browser back button can be used tonavigate back to the previous dashboard, or simply clicking on the PortalDashboard tab will re-initialize back to the summary of sales and financials.</p></div></body></html>00015Cadmin_menu.html0c2<ol class="admin_nav_links">  <li><a href="<!-- CGI$PATH -->/MVDB.ADMIN?action=users" class="bullet_link">Users</a>  <li><a href="<!-- CGI$PATH -->/MVDB.ADMIN?action=widgets" class="bullet_link">Widgets</a>  <li><a href="<!-- CGI$PATH -->/MVDB.ADMIN?action=dashboards" class="bullet_link">Dashboards</a>    <!-- RSS --></ol>000281message.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>    <link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <title>MultiValue Dashboard :: Login</title></head><body><div id="header"><div id="logo">  <br /><img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard"></div></div><div id="dashboard"><h1><!-- MSG_TITLE --></h1><!-- MSG_CONTENT --></div></body></html>000C78dbtemplate0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>    <meta http-equiv="X-UA-Compatible" content="IE=edge,IE=11,IE=10,IE=9,IE=8,IE=7" />    <link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/print.css" type="text/css" charset="utf-8" media="print" />    <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]-->            <!-- SITE_THEME -->        <!-- end styles -->                <script type="text/javascript" src="/db/javascripts/prototype-1.6.1.js"></script>    <script type="text/javascript" src="/db/javascripts/jquery-1.3.2.min.js"></script>    <script type="text/javascript" src="/db/javascripts/jquery-ui-1.8.custom.min.js"></script>    <script type="text/javascript">jQuery.noConflict();</script>    <script type="text/javascript" src="/db/fw/fusioncharts.js"></script>    <script type="text/javascript" src="/db/javascripts/sortable.js"></script>    <script type="text/javascript" src="/db/javascripts/tablesort.js"></script>    <script type="text/javascript" src="/db/javascripts/grid-widget.js"></script>    <script type="text/javascript" src="/db/javascripts/printing.js"></script>    <script type="text/javascript" src="/db/javascripts/slider.js"></script>        <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />    <style type="text/css" media="screen" >            /* put the left rounded edge on the track */            #track1-left {                position: absolute;                width: 5px;                height: 9px;                background: transparent url(/db/images/bg_slider_track.png) no-repeat top left;            }                        /* put the track and the right rounded edge on the track */            #track1 {                background: transparent url(/db/images/bg_slider_track.png) no-repeat top right;            }    </style>    <script>            jQuery(function() {                    jQuery(".datepicker").datepicker();            });    </script>    <title>MultiValue Dashboard</title>    <!-- REFRESH -->    </head><body><div id="printFrame" class="printme"></div><div id="header"><!-- HEADER --></div>    <div style="clear:both"></div>    <div id="logo">        <img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">    </div>    <!-- RefreshSlider --><div id="dashboardWrapper">    <div id="dashboard">        <!-- DASHBOARD -->        <div class="clear"></div>    </div>    <div class="clear"></div>    <br/></div><div id="footer">    <!-- FOOTER -->    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a></div></div><script type="text/javascript">/*jQuery(document).ready(function(){       jQuery('.widgetized').tablesort();     });*/</script>    </body></html>000548rss_edit.html0c2<form action="<!-- CGI$PATH -->/RSS.MAINT" method="post"><input type="hidden" name="id" value="<!-- feed_id -->"><input type="hidden" name="action" value="save"><table><tr> <td align="right">Feed ID:</td> <td><!-- edit_feed_id --></td></tr><tr> <td align="right">Name:</td> <td><input type="text" name="feed_name" value="<!-- feed_name -->"></td></tr><tr> <td align="right">Description:</td> <td><textarea name="feed_desc" rows="5" cols="50"><!-- feed_desc --></textarea></td></tr><tr> <td align="right">Select Subroutine:</td> <td><input type="text" name="sel_sub" value="<!-- sel_sub -->"> <!-- sel_sub_msg --> <a target="RSS.BP_<!-- sel_sub -->" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=<!-- sel_sub -->">Edit Source</a></td></tr><tr> <td align="right">Item Subroutine:</td> <td><input type="text" name="item_sub" value="<!-- item_sub -->"> <!-- item_sub_msg --> <a target="RSS.BP_<!-- item_sub -->" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=<!-- item_sub -->">Edit Source</a></td></tr><tr>  <td align="right">Modes:</td>  <td><textarea name="feed_modes" rows="10" cols="50"><!-- feed_modes --></textarea></td></tr><!-- EXTRA --><tr><td colspan="2"><input type="submit" name="save_feed" value="Save">&nbsp;<input type="submit" name="cancel_edit" value="Cancel"></td> </tr></table></form>000B5Frss_admin_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/><link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" /> <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" /> <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />  <script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>            	<script src="/db/javascripts/jquery.form.js" type="text/javascript" charset="utf-8"></script>    	        <script src="/db/javascripts/jquery.url.js" type="text/javascript" charset="utf-8"></script> 		<script src="/db/javascripts/rss_admin.js" type="text/javascript"></script><!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]--><!-- SITE_THEME --><title>RSS Feed Admin</title></head><body><div id="header"><!-- HEADER -->  <div id="logo">  	<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">  </div></div><div id="mainWrapper">		<div id="rss-dialog" title="New RSS Feed">		<div id="rss-messages"></div>		<form id="rss-form" method="post" action="/dbc/RSS.MAINT">			<input id="feed_id" type="hidden" value="NEW" name="id"/>			<input type="hidden" value="save" name="action"/>			<input type="hidden" value="Save" name="save_feed"/>						<table>			<tbody><tr>			 <td align="right">Feed ID:</td>			 <td><input id="new_id" type="text" value="" name="new_id"/></td>			</tr>			<tr>			 <td align="right">Name:</td>			 <td><input id="feed_name" type="text" value="" name="feed_name"/></td>			</tr>			<tr>			 <td align="right">Description:</td>			 <td><textarea id="feed_desc" cols="50" rows="5" name="feed_desc"></textarea></td>			</tr>			<tr>			 <td align="right">Select Subroutine:</td>			 <td><input id="select_sub" type="text" value="" name="sel_sub"/>  <a id="edit-sub-link" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&amp;ed_item=" target="RSS.BP_">Edit Source</a></td>			</tr>			<tr>			 <td align="right">Item Subroutine:</td>			 <td><input id="item_sub" type="text" value="" name="item_sub"/>  <a id="edit-item-link" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&amp;ed_item=" target="RSS.BP_">Edit Source</a></td>			</tr>			<tr>			  <td align="right">Modes:</td>			  <td><textarea id="feed_modes" cols="50" rows="10" name="feed_modes"></textarea></td>			</tr>			</tbody></table>		</form>	</div><!-- ADMIN_MAIN --></div><div id="footer">    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard/?tldb">Zumasys</a>    </div></div></body></html>0008E5RefreshSlider0c2<!-- outerTrackWrapper -->    <script type="text/javascript" language="javascript">  // <![CDATA[  // horizontal slider control  var slider1 = new Control.Slider('handle1', 'track1', {    range: $R(0, 9),    values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],    sliderValue: 1, // won't work if set to 0 due to a bug in script.aculo.us    onSlide: function(v) { showRefresh(v); },    onChange: function(v) { if ($('horizontal-slider')) {                    $('horizontal-slider').value = v; $('slider-form').submit();                     }    }  });  function setSliderValue(slider, value) {    // due to onChange code above we need this or     // a 0 will be put in the text box when you delete the value    //if (value == '') return;    if (isNaN(value)) {      slider.setValue(0.1);    } else {      slider.setValue(value);    }  }  function showRefresh(value) {    var dispRate = '';    switch (value) {      case 0:        dispRate = 'Auto-Refresh: Off';        break ;      case 1:        dispRate = 'Auto-Refresh: 15 seconds';        break ;      case 2:        dispRate = 'Auto-Refresh: 30 seconds';        break ;            case 3:        dispRate = 'Auto-Refresh: 1 minute';        break ;      case 4:        dispRate = 'Auto-Refresh: 2 minutes';        break ;            case 5:        dispRate = 'Auto-Refresh: 5 minutes';        break ;            case 6:        dispRate = 'Auto-Refresh: 10 minutes';        break ;            case 7:        dispRate = 'Auto-Refresh: 15 minutes';        break ;            case 8:        dispRate = 'Auto-Refresh: 30 minutes';        break ;            case 9:        dispRate = 'Auto-Refresh: 1 hour';        break ;            default:        dispRate = 'Auto-Refresh: Off';        break ;    }    document.getElementById('dispRate').innerHTML = dispRate;  }  var refreshRate = '<!-- REFRESH_RATE -->';  showRefresh(parseInt(refreshRate));    if (refreshRate != '') {    setSliderValue(slider1, refreshRate);  } else {    setSliderValue(slider1, 0.1);    }  // ]]></script><form name="reForm" method="post" action="" id="slider-form">  <input type="hidden" id="horizontal-slider" name="refresh" value="<!-- REFRESH_RATE -->" /></form>         00026APORTAL.DOCUMENTATION0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=100% align="center"><a href="/dbc/MVDB.MAIN?dbname=PORTAL RUN DOCUMENTATION">Running the Portal Dashboard Reports</a></td></tr><tr><td width=100% align="center"><a href="/dbc/MVDB.MAIN?dbname=PORTAL.SETUP.DOCUMENTATION">Portal Reports Setup Documentation</a></td></tr><tr><td width=100% align="center"><a href="/dbc/MVDB.MAIN?dbname=PORTAL.REPORTS.DOCUMENTATION">Glossary of Portal Dashboard Reports</a></td></tr></tdead></table></div>002FA4PORTAL.SETUP.DOCUMENTATION0c2<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 15 (filtered)"><style><!-- /* Font Definitions */ @font-face	{font-family:Wingdings;	panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face	{font-family:"Cambria Math";	panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face	{font-family:Calibri;	panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:0in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}.MsoChpDefault	{font-family:"Calibri",sans-serif;}.MsoPapDefault	{margin-bottom:8.0pt;	line-height:107%;}@page WordSection1	{size:8.5in 11.0in;	margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1	{page:WordSection1;} /* List Definitions */ ol	{margin-bottom:0in;}ul	{margin-bottom:0in;}--></style></head><body lang=EN-US><div class=WordSection1><p class=MsoNormal><b><span style='font-size:14.0pt;line-height:107%'>PortalSales Report Setup:</span></b></p><p class=MsoNormal>This setup process identifies the fields necessary forderiving sales, gross profit, and margin numbers. It allows for sales numbersto be broken out by sales person and, if applicable, by branch and/or region.</p><p class=MsoNormal><b>Sales File Account</b>  Multi-value systems normallyhave multiple accounts where data may reside. The sales reports will be drivenby a file of sales. This field needs the name of the account where that fileresides.</p><p class=MsoNormal><b>Name of Sales File</b>  The name of the file containingthe sales information.</p><p class=MsoNormal><b>Date of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that contains the date the sale was complete.</p><p class=MsoNormal><b>Month of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that displays the numeric value of the month the salewas completed. If the system doesnt have this dictionary item, there shouldbe one created using the Date of Sale Dict Name as a guide.</p><p class=MsoNormal><b>Year of Sale Dict Name </b> The name of the dictionaryitem in the sales file that displays the 4 digit year the sale was completed. Ifthe system doesnt have this dictionary item, there should be one created usingthe Date of Sale Dict Name as a guide.</p><p class=MsoNormal><b>Amount of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that contains the total amount of the sales transaction.This dictionary </p><p class=MsoNormal><b>Cost of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that contains the cost of the sales transaction. Thisis used for determining gross profit and margin. If this information is notavailable in the system, the field should be left blank, disabling reportsassociated with gross profit and margin.</p><p class=MsoNormal><b>Salesman Dict Name</b>  The name of the dictionary itemin the sales file that contains the primary salesman on the transaction. Mostsystems will have a salesman code in the sales file and another file thatcontains the actual names of the salesmen. This dictionary item should be onethat displays the actual name. </p><p class=MsoNormal><b>Branch Dict Name</b>  The name of the dictionary itemin the sales file that contains the branch being credited with thetransaction. Most systems will have a branch code in the sales file andanother file that contains the actual names of the branches. This dictionaryitem should be one that displays the actual name. This field only applies ifsales can be broken out by a branch. </p><p class=MsoNormal><b>Region Dict Name</b>  The name of the dictionary itemin the sales file that contains the region being credited with thetransaction. Most systems will have a region code in the sales file andanother file that contains the actual names of the regions. This dictionaryitem should be one that displays the actual name. This field only applies ifsales can be broken out by a region. </p><p class=MsoNormal><b>Go</b>  No validation is made on Portal Sales ReportSetup fields until this button is clicked. When validating, checks are madefor:</p><p class=MsoListParagraphCxSpFirst style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid file name in the account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Existence of each of the dictionary names entered</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Salesman Dict Name looking to another file for the actual name ofthe salesman. An ignorable warning is issued if that is not the case.</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Branch Dict Name looking to another file for the actual name ofthe branch. An ignorable warning is issued if that is not the case.</p><p class=MsoListParagraphCxSpLast style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Region Dict Name looking to another file for the actual name ofthe region. An ignorable warning is issued if that is not the case.</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal><b><span style='font-size:14.0pt;line-height:107%'>Portal ARReport Setup:</span></b></p><p class=MsoNormal>This setup process identifies the fields necessary for evaluatingaccount receivables. It breaks out statistics by amounts, aging categories, percentages,and periods for comparison purposes. It also identifies by customer whenviewing most amounts owed, most days aged, and accounts with significant changesin payment patterns.</p><p class=MsoNormal><b>AR File Account</b>  The AR reports will be driven by afile of receivables or invoices. This field needs the name of the accountwhere that file resides.</p><p class=MsoNormal><b>Name of AR File</b>  The name of the file containing thereceivables with amounts and payment information.</p><p class=MsoNormal><b>Due Date Dict Name</b>  The name of the dictionary itemin the AR file showing the due date of the receivable.</p><p class=MsoNormal><b>Date Paid Dict Name</b>  The name of the dictionary itemin the AR file showing the date the receivable was paid.</p><p class=MsoNormal><b>Invoice Amount Dict Name</b>  The name of the dictionaryitem in the AR file that contains the original amount owed. </p><p class=MsoNormal><b>Remaining Balance Dict Name</b>  The name of thedictionary item in the AR file that contains the remaining balance. </p><p class=MsoNormal><b>Customer Dict Name</b>  The name of the dictionary itemin the AR file that contains the customer. Most systems will have a customercode in the AR file and another file that contains the actual names of the customers.This dictionary item should be one that displays the actual name. </p><p class=MsoNormal><b>Go</b>  No validation is made on Portal AR Report Setupfields until this button is clicked. When validating, checks are made for:</p><p class=MsoListParagraphCxSpFirst style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid file name in the account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Existence of each of the dictionary names entered</p><p class=MsoListParagraphCxSpLast style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Customer Dict Name looking to another file for the actual name ofthe salesman. An ignorable warning is issued if that is not the case.</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal><b><span style='font-size:14.0pt;line-height:107%'>Portal APReport Setup:</span></b></p><p class=MsoNormal>This setup process identifies the fields necessary for evaluatingaccount payables. It breaks out statistics by amounts, aging categories, and percentages.</p><p class=MsoNormal><b>AP File Account</b>  The AP reports will be driven by afile of payables. This field needs the name of the account where that fileresides.</p><p class=MsoNormal><b>Name of AP File</b>  The name of the file containing thepayables with amounts and payment information.</p><p class=MsoNormal><b>Due Date Dict Name</b>  The name of the dictionary itemin the AP file showing the due date of the payable.</p><p class=MsoNormal><b>Date Paid Dict Name</b>  The name of the dictionary itemin the AP file showing the date the payable was paid.</p><p class=MsoNormal><b>Invoice Amount Dict Name</b>  The name of the dictionaryitem in the AP file that contains the original amount owed. </p><p class=MsoNormal><b>Remaining Balance Dict Name</b>  The name of thedictionary item in the AP file that contains the remaining balance. </p><p class=MsoNormal><b>Go</b>  No validation is made on Portal AP Report Setupfields until this button is clicked. When validating, checks are made for:</p><p class=MsoListParagraphCxSpFirst style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid file name in the account</p><p class=MsoListParagraphCxSpLast style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Existence of each of the dictionary names entered</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p></div></body></html>000666pdftemplate0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>    <link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]-->            <!-- SITE_THEME -->        <!-- end styles -->                <script type="text/javascript" src="/db/javascripts/prototype-1.6.1.js"></script>    <script type="text/javascript" src="/db/javascripts/jquery-1.3.2.min.js"></script>    <script type="text/javascript">jQuery.noConflict();</script>    <script type="text/javascript" src="/db/fw/fusioncharts.js"></script>    <script type="text/javascript" src="/db/javascripts/sortable.js"></script>    <script type="text/javascript" src="/db/javascripts/tablesort.js"></script>    <script type="text/javascript" src="/db/javascripts/grid-widget.js"></script>    <script type="text/javascript" src="/db/javascripts/printing.js"></script>    <script type="text/javascript" src="/db/javascripts/slider.js"></script>        <title>MultiValue Dashboard</title>    </head><body><div style="clear:both"></div><div id="logo">    <img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard"></div><div id="dashboardWrapper">    <div id="dashboard">        <!-- DASHBOARD -->        <div class="clear"></div>    </div>    <div class="clear"></div>    <br/></div></body></html>00022Bwidget_debug.html0c2<table width="100%"><tr><td>Widget Name:</td><td><!-- WIDGET_NAME --></td></tr><tr><td>Widget Subroutine:</td><td><!-- WIDGET_SUB_NAME --> <!-- WIDGET_EDIT_LINK --></td></tr></table><!-- DEBUG_REASON --><br /><!-- REMEDY -->Runtime errors for <!-- WIDGET_SUB_NAME --><br /><table width="100%"><tr><th>Date / Time</th><th>User</th><th>Error</th></tr><!-- RUNTIME_ERRORS --><table width="100%"><tr><td colspan="2">WIDGET.USER.DATA values:</td></tr><tr><th>Position</th><th>Value</th></tr><!-- WIDGET_USER_DATA --></table>000F48pkg_list_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>	    <script src="http://alpha.bravo:83/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>            	    <script src="http://alpha.bravo:83/db/javascripts/jquery.form.js" type="text/javascript" charset="utf-8"></script>    	        	<script src="http://alpha.bravo:83/db/javascripts/jquery.url.js" type="text/javascript" charset="utf-8"></script> 	<script src="http://alpha.bravo:83/db/javascripts/initAdminTemplate.js" type="text/javascript" charset="utf-8"></script> 	<script src="http://alpha.bravo:83/db/javascripts/sortable.js" type="text/javascript" charset="utf-8"></script> 	<script src="http://alpha.bravo:83/db/javascripts/tablesort.js" type="text/javascript" charset="utf-8"></script> 		<script type="text/javascript"> 		$(function() {			$("#tabs").tabs();			$("#accordion").accordion({ autoHeight: false });			$('#edit_dialog').dialog({ autoOpen: false, modal: true });			$('#edit_form').click(function() {				$('#edit_dialog').dialog('open');			});			$('#delete_dialog').dialog({ autoOpen: false, modal: true });			$('#delete_form').click(function() {				$('#delete_dialog').dialog('open');			});		});			</script> 		<link rel="stylesheet" href="http://alpha.bravo:83/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" /> 	<link rel="stylesheet" href="http://alpha.bravo:83/db/css/application.css" type="text/css" charset="utf-8" /> 	<link rel="stylesheet" href="http://alpha.bravo:83/db/css/ingrid.css" type="text/css" charset="utf-8" />     <link rel="StyleSheet" href="http://alpha.bravo:83/db/css/jquery-ui.css" media="screen" type="text/css" />     <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]--> 	 <!-- SITE_THEME --><title>Package Management</title></head><body><div id="edit_dialog"><p>      <form id="new-file-form" method="get" action="/dbc/MVPKG.MAIN">       <div id="new-file-messages"></div>       <table><tbody>      <tr>         <td colspan="2">File:<input id="file-name" type="text" value="" name="file_name"/></td>       </tr>      <tr>        <td><input type="radio" name="file_dict" value="DICT" id="file-dict"></td><td>DICT</td>      </tr>      <tr>        <td><input type="radio" name="file_dict" value="DATA" id="file-dict"></td><td>DATA</td>      </tr>      <tr>         <td><input type="radio" name="items_type" vaue="savedlist" id="items-type"></td><td>Saved List<br/>        file:<input type="text" name="savedlist_file" id="savedlist-file"><br/>        list:<input type="text" name="savedlist_id" id="savedlist-id"></td>      </tr>       <tr>         <td><input type="radio" name="items_type" value="all" id="items-type"></td><td>All Items</td>      </tr>       <tr>         <td><input type="radio" name="items_type" value="items" id="items-type"></td>         <td>Item: <input type="text" name="items_items" id="items-items"></td>       </tr>       </tbody></table>       <input type="hidden" value="save_user" name="action"/>       </form>       <div class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix">        <button type="button" class="ui-state-default ui-corner-all">Cancel</button>        <button type="button" class="ui-state-default ui-corner-all">Save</button>      </div></p></div><div id="header"><!-- HEADER -->  <div id="logo">  	<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">  </div></div><div id="mainWrapper"><!-- ADMIN_MAIN --></div></div><div id="footer">    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a>    </div></div></body></html>0007E2MVDB.DEFS0c00000B1Administrator0c21AdminConfigPDFConfigDashboard License UsageCode TemplatesD3 Runtime ErrorsSystem - SessionShow Vars11122551121212ADMINadminAdmin30000091Chart Demo0c22Demo-PieDemo-SS LineDemo-DoughnutDemo-SS ColDemo- MS Col2223312312ADMINguestadminDemonstration ChartsTheme 11000062Demo Financial Company0c21DEMO FINANCIAL PICTURE21ADMINguestadminDemo Financial Company00005CDEMO AVERAGE DAYS CHART0c21DEMO AVERAGE DAYS CHART21dummydisplay average days chart00003DDEMO NET INCOME CHART0c21DEMO NET INCOME CHART21dummy00005BDEMO REV.GP SALES CHART0c21DEMO REV.GP SALES CHART21dummyDisplay Rev.Gp Sales Chart000047DEMO SALES CHART0c21DEMO SALES CHART21dummyDisplay Sales Chart000050DEMO SALES PERCENTS0c21DEMO SALES PERCENTS21dummyDisplay Sales Percents000055Emailed Report0c21Emailed Report21Display contents of an emailed report link000041Icons0c21Icon Gallery11ADMINguestadminIcon Gallery50000085PORTAL REPORTS SETUP0c21PORTAL SALES REPORT SETUPPORTAL AR REPORT SETUPPORTAL AP REPORT SETUP222123Portal Reports Setup00003DPORTAL MARGINS0c21PORTAL MARGINS21dummyPortal Margins000046PORTAL AR REPORTS0c22PORTAL AR REPORTS31dummyPortal AR Reports00004FPORTAL SALES REPORTS0c21PORTAL SALES REPORTS21dummyPortal Sales Reports00003EPORTAL DASHBOARD0c21PORTAL DASHBOARD21Portal Dashboard000061PORTAL.SETUP.DOCUMENTATION0c21PORTAL SETUP DOCUMENTATION21dummyPortal Setup Documentation000068PORTAL.REPORTS.DOCUMENTATION0c21PORTAL.REPORTS.DOCUMENTATION21dummyPortal Reports Documentation00005FPORTAL DASHBOARD DOCUMENTATION0c23PORTAL.DOCUMENTATION31Portal Dashboard Documentation00005CPORTAL RUN DOCUMENTATION0c21PORTAL.RUN.DOCUMENTATION21dummyPortal Run Documentation00007FDISPLAY PORTAL BALANCE PIE CHART0c21PORTAL AR REPORTSPORTAL AP REPORTS2212dummyPie chart to display AR & AP balances0000B3DICT_MVDB.MAP.DATA0c0000022NAME0c1A0Map NameG0*1L4000001FLONG0c1A2Long NameL25000023INTERNAL.ID0c1A0IDG1*1L10000021SHORT0c1A1Short NameL10046BE6MVDB.MAP.DATA0c0000023FrenchGuiana#GF.CY.CY0c2CYCayenne000018Fiji#FJ.CE.RW0c2RWRewa00001CMacau#MO.IL.CO0c2COColoane00001CChina2#CN.GD0c2GDGuangdong000024FranceDepartment#FR.ES0c2ESEssonne000026FranceDepartment#FR.FI0c2FIFinistere000019Congo#CG.CU0c2CUCuvette000019Algeria#DZ.AR0c2ARAdrar00001AMacedonia#MK.ST0c2STStip00001AIndiana#0570c2HAHamilton000016NewYork#0290c2ERErie00001FNorthCarolina#0970c2IRIredell000018Georgia#2490c2SCSchley00001BIreland#0170c2MEM&iacute;00002CNorthAmerica#0190c2KNSt. Kitts &amp; Nevis000016Kansas#0510c2ELEllis00001FSouthCarolina#0230c2CSChester00001AIllinois#0870c2JHJohnson00001AMissouri#0070c2AUAudrain000024WorldwithCountries#1460c2IRIreland00001CNorthDakota#0210c2DIDickey000018Texas#0790c2COCCochran000017Ohio#0410c2DLDelaware000023NewMexico#0130c2DADo&ntilde;a Ana000018Nebraska#0110c2BOBoone00001AWyoming#0330c2SHSheridan000024Europewithcountries#0150c2GRGreece000018Malaysia#0010c2JOJohor000019Tennessee#1010c2LELewis00001EScotland#0180c2LALanarkshire000017NewWorld#1910c2IZIraq000018Oklahoma#0530c2GNGrant000014Iowa#1050c2JNJones00001DAlaska#2700c2WHWade Hampton000017Texas#4410c2TAYTaylor000025NewCaledonia#NC.NO.PT0c2PTPouembout000019Ontario#480c2WAWaterloo000019Montenegro#190c2TITivat000019MiddleEast#140c2SYSyria000019Switzerland#260c2JUJura000023SouthEuropeanRegion#120c2CSSerbia000019NewWorld#390c2DZAlgeria00003AQuebec#110c2GAGasp&eacute;sie-&Icirc;les-de-la-Madeleine000014Kenya#020c2COCoast00001BPuertoRico#570c2GMGuayama00001ABahamas#150c2HTHope Town000017Japan#450c2YAYamagata000024NorwayRegion#130c2OT&Oslash;stfold000026PolandCounties#PL.DS.LM0c2DLMLegnica000027MarshallIsland#MH.MH.KW0c2KWKwajalein000021Macedonia#MK.SU0c2SUStudenicani00001FHongKong#HK.KI0c2KIKwai Tsing000019Palau#PW.PE0c2PEPeleliu000018Uganda#UG.BW0c2BWBukwa00001CVietnam#VN.HY0c2HYHung Yen00001EGambia#GM.UR0c2URUpper River000034Nigeria#NG.FC0c2FCAbuja(Federal Capital Territory)00001BSenegal#SN.KL0c2KLKaolack000025Morocco#MA.CO0c2COChaouia Ouardigha00001DBurma#MM.KN0c2KNKayin State00001CMissouri#1890c2SOSt. Louis000024Ireland#0180c2MOMuineach&aacute;in000020NorthAmerica#0200c2LCSt. Lucia00001DCalifornia#0930c2SYSiskiyou000025Alaska#0900c2FAFairbanks North Star000017Texas#2610c2KEDKenedy00001DLouisiana#0050c2ASAscension000018Georgia#0690c2CFCoffee000022WorldwithCountries#1470c2ITItaly000018Minnesota#1210c2POPope00001AKentucky#1050c2HKHickman000019Michigan#1150c2MRMonroe00001AFlorida#0330c2ESEscambia00001DMississippi#0150c2CRCarroll000025Europewithcountries#0160c2HUHungary000018Malaysia#0020c2KEKedah000019Arkansas#0050c2BABaxter00001EEngland#0010c2BEBedfordshire00001FWestVirginia#0330c2HIHarrison00001DScotland#0190c2MIMidlothian000019NewWorld#1920c2IEIsrael00001BAsia3#0340c2PHPhilippines000018Virginia#1810c2SRSurry00001AColorado#0130c2BOBoulder00001BSouthDakota#0510c2GRGrant00001AAlabama#0290c2CBCleburne00001ENorwayRegion#140c2RORogaland00001BAustralia#VI0c2VIVictoria00001BOntario#490c2WEWellington00001AMontenegro#200c2ULUlcinj00001EMiddleEast#150c2TITajikistan000022SouthEuropeanRegion#130c2ESSpain000018NewWorld#400c2AOAngola00002BQuebec#120c2CAChaudi&egrave;re-Appalaches000016Kenya#030c2EAEastern000017Bahamas#160c2INInagua000018Japan#460c2YMYamaguchi00001DFiji#FJ.EA.LM0c2LMLomaiviti000027PolandCounties#PL.PK.PM0c2PPMPrzemysl00001CMacedonia#MK.TL0c2TLBitola00001ARwanda#RW.ES0c2ESEastern00001AUganda#UG.TY0c2TYMityana00001BMacedonia#MK.CA0c2CACaska000026EquatorialGuinea#GQ.BS0c2BSBioko Sur000015Iran#IR.IL0c2ILIlam000021FranceDepartment#FR.EU0c2EUEure000021FranceDepartment#FR.GA0c2GAGard000023Mauritius#MU.PA0c2PAPamplemousses000019Nigeria#NG.EN0c2ENEnugu000022Algeria#DZ.AT0c2ATAin Temouchent00001AAlgeria#DZ.BJ0c2BJBejaia000018Texas#4430c2TERTerrell000019Indiana#0590c2HNHancock000017NewYork#0310c2ESEssex00001FNorthCarolina#0990c2JAJackson00001BVirginia#0010c2ACAccomack000019Georgia#2510c2SRScreven000023Ireland#0190c2OFUa F&aacute;ilghe000037NorthAmerica#0210c2VCSt. Vincent &amp; the Grenadines00001AKansas#0530c2EWEllsworth000024SouthCarolina#0250c2CTChesterfield000017Illinois#0890c2KAKane000018Missouri#0090c2BYBarry000023WorldwithCountries#1480c2LVLatvia00001CNorthDakota#0230c2DVDivide000015Texas#0810c2COKCoke000013Ohio#0430c2ERErie000019Spain#0010c2ANAndalucia000018NewMexico#0150c2EDEddy00001CNebraska#0130c2BXBox Butte00001AWyoming#0350c2SUSublette000025Europewithcountries#0170c2ISIceland00001BMalaysia#0030c2KLKelantan00001BEngland#0020c2BRBerkshire00001BTennessee#1030c2LILincoln000018Scotland#0200c2MOMoray000019NewWorld#1930c2JOJordan000018Oklahoma#0550c2GEGreer000015Iowa#1070c2KEKeokuk00001DColorado#0140c2BRBroomfield000026NorwayRegion#150c2SOSogn og Fjordane000015Ontario#500c2YOYork000020Montenegro#210c2ZA&#381;abljak00001AMiddleEast#160c2TUTurkey000023SouthEuropeanRegion#140c2TKTurkey000026USACentralRegion#460c2SDSouth Dakota000017NewWorld#410c2BJBenin000015Quebec#130c2LVLaval00001EPuertoRico#590c2GLGuayanilla00001CBahamas#170c2LILong Island000018Japan#470c2YNYamanashi000023MarshallIsland#MH.MH.ME0c2MEMejit000026Philippines#PH.SK0c2SKSultan Kudarat00001FCoteDivoire#CI.SV0c2SVSavanes000020Macedonia#MK.AV0c2AVKavadartsi00001ARussia#RU.IV0c2IVIvanovo000025Russia#RU.KB0c2KBKabardino-Balkaria00001AEurope2#EU.PL0c2PLPoland00001BQatar#QA.DA0c2DAAd Dawhah00001BAlgeria#DZ.TL0c2TLTlemcen000019Panama#PA.PN0c2PNPanama000022Uzbekistan#UZ.QA0c2QAKashkadarya000018Alabama#0310c2CFCoffee000019Vermont#0010c2ADAddison000022Ireland#0200c2RORos Com&aacute;n00002CNorthAmerica#0220c2TTTrinidad &amp; Tobago00001BCalifornia#0950c2SOSolano000015Texas#2630c2KETKent00001ELouisiana#0070c2AUAssumption00001AGeorgia#0710c2CQColquitt00002AWorldwithCountries#1490c2LNLiechtenstein00001AMinnesota#1230c2RMRamsey00001AKentucky#1070c2HOHopkins00001BMichigan#1170c2MNMontcalm000019Florida#0350c2FLFlagler000016Spain#0020c2ARAragon00001FMississippi#0170c2CHChickasaw000025Europewithcountries#0180c2IEIreland000019Malaysia#0040c2MEMelaka000019Arkansas#0070c2BEBenton000021England#0030c2BUBuckinghamshire00001EWestVirginia#0350c2JAJackson00001DScotland#0210c2NANairnshire000019NewWorld#1940c2KUKuwait000022Asia3#0360c2RURussian Federation000019Virginia#1830c2SSSussex00001AColorado#0150c2CHChaffee00001DSouthDakota#0530c2GEGregory00001CWorld#NA0c2NANorth America000031NorwayRegion#160c2STS&oslash;r-Tr&oslash;ndelag000024Australia#WA0c2WAWestern Australia000020MiddleEast#170c2TXTurkmenistan000023SouthEuropeanRegion#150c2CYCyprus00001ANewWorld#420c2BWBotswana000021Quebec#140c2LALanaudi&egrave;re000016Kenya#050c2NANairobi00001DBahamas#180c2MCMangrove Cay000019Jordan#JO.JA0c2JAJarash000029CentralAfricanRepublic#CF.MB0c2MBMbomou000026Philippines#PH.SL0c2SLSouthern Leyte00001DMongolia#MN.OG0c2OGOmnogovi00001DPhilippines#PH.AK0c2AKAklan00001EPhilippines#PH.BA0c2BABataan000026Russia#RU.KC0c2KCKarachay-Cherkessia000024Libya#LY.HZ0c2HZAl Hizam al Akhdar000020Algeria#DZ.TM0c2TMTamanghasset000019Algeria#DZ.BL0c2BLBlida000016Texas#4450c2TEYTerry00001AIndiana#0610c2HRHarrison00001ANewYork#0330c2FRFranklin000020NorthCarolina#1010c2JOJohnston00001CVirginia#0030c2ALAlbemarle00001AGeorgia#2530c2SMSeminole00001AIreland#0210c2SLSligeach000024NorthAmerica#0230c2USUnited States000017Kansas#0550c2FIFinney000021SouthCarolina#0270c2CDClarendon00001BIllinois#0910c2KNKankakee000019Missouri#0110c2BRBarton000026WorldwithCountries#1500c2LTLithuania00001ANorthDakota#0250c2DNDunn000018Texas#0830c2COLColeman000018Ohio#0450c2FAFairfield000018Spain#0030c2ASAsturias000019NewMexico#0170c2GRGrant000017Nebraska#0150c2BYBoyd00001CWyoming#0370c2SWSweetwater000023Europewithcountries#0190c2ITItaly000022Malaysia#0050c2NSNegeri Sembilan000020England#0040c2CACambridgeshire00001ATennessee#1050c2LOLoudon000019Scotland#0220c2OROrkney00001ANewWorld#1950c2LBLebanon000019Oklahoma#0570c2HAHarmon000016Iowa#1090c2KOKossuth00001ENorwayRegion#170c2TETelemark000020Moldova#460c2BAB&#259;l&#355;i000026MiddleEast#180c2AEUnitedArabEmirates000029SouthEuropeanRegion#160c2VAVatican City00001FUSACentralRegion#480c2TXTexas00001ENewWorld#430c2BFBurkina Faso00001BQuebec#150c2LULaurentides00001CKenya#060c2NENorth Eastern00001CPuertoRico#610c2GBGuaynabo00001ABahamas#190c2MGMayaguana000022Macau#MO.MA.SA0c2SASanto Antonio000019Fiji#FJ.CE.SR0c2SRSerua00001AMacau#MO.IL.CT0c2CTCotai000019Ghana#GH.AH0c2AHAshanti00001DPhilippines#PH.SM0c2SMSamar000020Mongolia#MN.OH0c2OHOvorkhangai00001EMacedonia#MK.BN0c2BNBrvenica00001DPhilippines#PH.AL0c2ALAlbay00001CRussia#RU.KD0c2KDKrasnodar00001CMicronesia#FM.CH0c2CHChuuk000019Guinea#GN.KA0c2KAKankan000017Benin#BJ.DO0c2DODonga00001BAlgeria#DZ.TN0c2TNTindouf00001DAlgeria#DZ.BM0c2BMBoumerdes00001CSouthDakota#0550c2HAHaakon000019Alabama#0330c2CRColbert00001CVermont#0030c2BEBennington000021Ireland#0220c2TITiobraid Arainn000020NorthAmerica#0240c2GLGreenland00001BCalifornia#0970c2SMSonoma000015Texas#2650c2KERKerr00001DLouisiana#0090c2AVAvoyelles00001AGeorgia#0730c2CUColumbia000027WorldwithCountries#1510c2LULuxembourg00001CMinnesota#1250c2RLRed Lake00001AKentucky#1090c2JAJackson00001EMichigan#1190c2MOMontmorency00001AFlorida#0370c2FRFranklin00002BSpain#0040c2BABaleares (Balearic Islands)00001DMississippi#0190c2COChoctaw000024Europewithcountries#0200c2LVLatvia000019Malaysia#0060c2PAPahang000018Arkansas#0090c2BOBoone00001AEngland#0050c2CHCheshire000020WestVirginia#0370c2JEJefferson00001FScotland#0230c2PBPeeblesshire000017NewWorld#1960c2MUOman000019Asia3#0380c2SGSingapore00001BVirginia#1850c2TATazewell00001BColorado#0170c2CECheyenne000020NewCaledonia#NC.NO.PY0c2PYPoya00001BNorwayRegion#180c2TRTroms000016Moldova#470c2CACahul00001EMiddleEast#190c2UZUzbekistan000022USASouthWestRegion#150c2HIHawaii000019NewWorld#440c2BIBurundi000028Quebec#160c2MOMont&eacute;r&eacute;gie000015Kenya#070c2NYNyanza00001FBahamas#200c2MIMoore's Island00001FLiberia#LR.GB0c2GBGrand Bassa00001CMacedonia#MK.CE0c2CECentar00001BRussia#RU.KE0c2KEKemerovo000019Guinea#GN.KB0c2KBKoubia00001FCameroon#CM.NW0c2NWNord-Ouest000021Lebanon#LE.JL0c2JLMount Lebanon000021FranceDepartment#FR.GE0c2GEGers000024Cambodia#KH.OC0c2OCOddar Meancheay00001EAlgeria#DZ.TO0c2TOTizi Ouzou000016Tonga#TO.EU0c2EU'Eua000026Kazakhstan#KZ.WK0c2WKWest Kazakhstan000019Senegal#SN.LG0c2LGLouga00001DTexas#4470c2THRThrockmorton00001BIndiana#0630c2HDHendricks000018NewYork#0350c2FUFulton00001DNorthCarolina#1030c2JNJones00001CVirginia#0050c2AEAlleghany00001AGeorgia#2550c2SPSpalding00001DIreland#0230c2WAPort Lairge000022NorthAmerica#0250c2PRPuerto Rico000015Kansas#0570c2FOFord000020SouthCarolina#0290c2CLColleton00001AIllinois#0930c2KDKendall000018Missouri#0130c2BABates000026WorldwithCountries#1520c2MKMacedonia00001ANorthDakota#0270c2EDEddy000017Texas#0850c2CONCollin000016Ohio#0470c2FYFayette000015Spain#0050c2CECeuta00001DNewMexico#0190c2GUGuadalupe000018Nebraska#0170c2BRBrown000017Wyoming#0390c2TETeton00002BEuropewithcountries#0210c2LILiechtenstein000018Malaysia#0070c2PEPerak00001AEngland#0060c2COCornwall00001ATennessee#1070c2MCMcMinn00001DScotland#0240c2PEPerthshire000018NewWorld#1970c2OMQatar000019Oklahoma#0590c2HRHarper000012Iowa#1110c2LELee000019Asia3#0390c2LKSri Lanka000019Wisconsin#0010c2ADAdams000020NorwayRegion#190c2VAVest-Agder000023Moldova#480c2CUChi&#351;in&#259;u000019MiddleEast#200c2YMYemen00001ANewWorld#450c2CMCameroon000027Quebec#170c2CQCentre-du-Qu&eacute;bec00001AKenya#080c2RVRift Valley00001APuertoRico#630c2GRGurabo00001FBahamas#210c2NWNew Providence000021Macau#MO.MA.SC0c2SCSao Lourenco000022MarshallIsland#MH.MH.MI0c2MIMili00001CMacedonia#MK.UG0c2UGStruga00001CSudan#SD.UN0c2UNUpper Nile000026Kazakhstan#KZ.EK0c2EKEast Kazakhstan000028Philippines#PH.AN0c2ANAgusan del Norte000026Libya#LY.JI0c2JIAl Jifarah(Al Jfara)00001CBotswana#BW.KW0c2KWKweneng000019China2#CN.HA0c2HAHainan000016Nauru#NR.IJ0c2IJIjuw00001AAlgeria#DZ.TP0c2TPTipaza00001CSouthDakota#0570c2HMHamlin000019Alabama#0350c2CNConecuh000020Australia2#QLD0c2QLDQueensland00001BVermont#0050c2CACaledonia000019Missouri#1950c2SASaline00001FIreland#0240c2WEIarmh&iacute;000025NorthAmerica#0260c2KYCayman Islands00001FCalifornia#0990c2SLStanislaus000017Texas#2670c2KIMKimble00001ELouisiana#0110c2BEBeauregard000024Virginia#7300c2PBPetersburg (City)000016Georgia#0750c2COCook000022WorldwithCountries#1530c2MTMalta00001BMinnesota#1270c2RWRedwood00001CKentucky#1110c2JEJefferson00001BMichigan#1210c2MUMuskegon000019Florida#0390c2GAGadsden000029Spain#0060c2CACanarias (Canary Islands)00001FMississippi#0210c2CLClaiborne000027Europewithcountries#0220c2LTLithuania000019Malaysia#0080c2PRPerlis00001AArkansas#0110c2BRBradley000019England#0070c2CUCumbria00001EWestVirginia#0390c2KAKanawha00001FScotland#0250c2RERenfrewshire00001FNewWorld#1980c2SASaudi Arabia000019Virginia#1870c2WAWarren00001EColorado#0190c2CLClear Creek00001ENorwayRegion#200c2VEVestfold000027Moldova#490c2SNSt&acirc;nga Nistrului00001CNewWorld#460c2CVCape Verde000016Kenya#090c2WEWestern00001CBahamas#220c2NBNorth Abaco000025PolandCounties#PL.LU.LM0c2LLMLublin000024MarshallIsland#MH.MH.MJ0c2MJMajuro00001FLiberia#LR.GD0c2GDGrand Gedeh00001DGhana#GH.BA0c2BABrong-Ahafo000027Mauritania#MR.HC0c2HCHodh Ech Chargui00001CMacedonia#MK.TR0c2TRTearce00001AUganda#UG.UU0c2UUKanungu000019Uganda#UG.WA0c2WAWakiso000019Malawi#MW.SA0c2SASalima000019Russia#RU.KG0c2KGKaluga000019Guinea#GN.KD0c2KDKindia000018China2#CN.HB0c2HBHebei00001AGambia#GM.WE0c2WEWestern000022Bhutan#BT.WP0c2WPWangdi Phodrang00001BWisconsin#0030c2ASAshland000016Texas#4490c2TITTitus000017Indiana#0650c2HYHenry000019NewYork#0370c2GEGenesee00001BNorthCarolina#1050c2LELee000021Maryland#5100c2BABaltimore City000019Virginia#0070c2AMAmelia00001AGeorgia#2570c2SEStephens00001DIreland#0250c2WXLoch Garman000019Kansas#0590c2FRFranklin000022SouthCarolina#0310c2DADarlington000017Illinois#0950c2KOKnox000019Missouri#0150c2BTBenton000024WorldwithCountries#1540c2MVMoldova00001CNorthDakota#0290c2EMEmmons00001ETexas#0870c2CSWCollingsworth000024Virginia#5500c2CPChesapeake (City)000017Ohio#0490c2FRFranklin000019Spain#0070c2CNCantabria00001BNewMexico#0210c2HAHarding00001ANebraska#0190c2BFBuffalo000017Wyoming#0410c2UIUinta000028Europewithcountries#0230c2LULuxembourg00001FMalaysia#0090c2PPPulau Pinang00001CEngland#0080c2DEDerbyshire00001BTennessee#1090c2MYMcNairy000026Scotland#0260c2RCRoss &amp; Cromarty000018NewWorld#1990c2SYSyria00001AOklahoma#0610c2HSHaskell000013Iowa#1130c2LILinn00001ENorwayRegion#210c2SVSvalbard00001CMoldova#500c2EDEdine&#355;00002ANewWorld#470c2CPCentral African Republic00001BPuertoRico#650c2HAHatillo00001DBahamas#230c2NNNorth Andros000017Macau#MO.MA.SE0c2SESe00001BFiji#FJ.CE.TL0c2TLTailevu000020Philippines#PH.SQ0c2SQSiquijor00001CMacedonia#MK.BR0c2BRBerovo000027Macedonia#MK.CH0c2CHCesinovo Oblesevo00001EPhilippines#PH.AP0c2APApayao00001DRussia#RU.KH0c2KHKhabarovsk000019China2#CN.YN0c2YNYunnan000029Guinea#GN.KE0c2KEK&eacute;rouan&eacute;00001ETurkmenistan#TM.LE0c2LELebap00001AAlgeria#DZ.TR0c2TRTiaret00001ANamibia#NA.ER0c2ERErongo00001AColorado#0210c2COConejos00001ASouthDakota#0590c2HNHand000017Alabama#0370c2CSCoosa00001CVermont#0070c2CHChittenden00001BMissouri#1970c2SYSchuyler000026Ireland#0260c2WICill Mhant&aacute;in00001BCalifornia#1010c2SUSutter000015Texas#2690c2KINKing00001DLouisiana#0130c2BIBienville000018Georgia#0770c2CWCoweta000023WorldwithCountries#1550c2MCMonaco00001CMinnesota#1290c2RERenville00001CKentucky#1130c2JSJessamine00001AMichigan#1230c2NENewaygo00001BFlorida#0410c2GIGilchrist000022Spain#0080c2CLCastilla-La Mancha00001CMississippi#0230c2CKClarke000027Europewithcountries#0240c2MKMacedonia000018Malaysia#0100c2SASabah00001AArkansas#0130c2CACalhoun000017England#0090c2DVDevon000020SouthAmerica#0010c2ARArgentina00001CWestVirginia#0410c2LELewis000020Scotland#0270c2RORoxburghshire000025NewWorld#2000c2AEUnitedArabEmirates000018Asia3#0420c2THThailand000013USA#HI0c2HIHawaii00001FNorwayRegion#220c2JMJan Mayen000023Moldova#510c2GAG&#259;g&#259;uzia000016NewWorld#480c2TDChad000020Bahamas#240c2NENorth Eleuthera000017Fiji#FJ.EA.LU0c2LULau000026MarshallIsland#MH.MH.ML0c2MLMaloelap000019Algeria#DZ.CH0c2CHChlef00001DMauritania#MR.GO0c2GOGorgol000020Philippines#PH.SR0c2SRSorsogon00001EMacedonia#MK.BS0c2BSBosilovo00001AMacedonia#MK.CI0c2CICair00001FPhilippines#PH.AQ0c2AQAntique00001FPhilippines#PH.BG0c2BGBenguet00001ARussia#RU.KI0c2KIKarelia00001BQatar#QA.US0c2USUmm Salal000024FranceDepartment#FR.GI0c2GIGironde00001EAlgeria#DZ.TS0c2TSTissemsilt00002ASaoTomeandPrincipe#ST.AG0c2AGAgua Grande00001AWisconsin#0050c2BABarron000024Alaska#2800c2WPWrangell-Petersburg00001ATexas#4510c2TOGTom Green000018Indiana#0670c2HOHoward000018NewYork#0390c2GRGreene00001ENorthCarolina#1070c2LNLenoir00001AVirginia#0090c2AHAmherst000019Georgia#2590c2STStewart000022Ireland#0270c2NLNorthern Ireland000016Kansas#0610c2GEGeary00001ESouthCarolina#0330c2DIDillon000017Illinois#0970c2LALake00001CMissouri#0170c2BNBollinger000027WorldwithCountries#1560c2MGMontenegro00001CNorthDakota#0310c2FOFoster000019Texas#0890c2CORColorado000015Ohio#0510c2FUFulton00001FSpain#0090c2CYCastilla y Leon00001BNewMexico#0230c2HIHidalgo000017Nebraska#0210c2BUBurt00001AWyoming#0430c2WAWashakie000023Europewithcountries#0250c2MTMalta00001AMalaysia#0110c2SRSarawak000018England#0100c2DODorset000019Tennessee#1110c2MAMacon00001ESouthAmerica#0020c2BOBolivia00001FScotland#0280c2SESelkirkshire000018NewWorld#2010c2YMYemen000019Oklahoma#0630c2HUHughes000015Iowa#1150c2LOLouisa000030MadagascarRegions#MG.FI.HM0c2HMHaute Matsiatra00001EBahamas#250c2RIRagged Island00001FGuatemala#010c2AVAlta Verapaz000022Moldova#520c2LAL&#259;pu&#351;na00001AVenezuela#010c2ZAmazonas000019NewWorld#490c2KMComoros00001FPuertoRico#670c2HOHormigueros00001AAlgeria#DZ.BS0c2BSBiskra000023Burma#MM.MD0c2MDMandalay Division000018Jordan#JO.IR0c2IRIrbid00001FMacedonia#MK.VA0c2VAValandovo000027Philippines#PH.SS0c2SSSurigao del Sur000017Niger#NE.DF0c2DFDiffa000019China2#CN.XZ0c2XZXizang000025CoteDivoire#CI.BS0c2BSBas-Sassandra000018China2#CN.HE0c2HEHenan000022Madagascar#MG.AS0c2ASAntsiranana00001CEurope2#EU.PT0c2PTPortugal00001DVirginia#1910c2WSWashington00001BColorado#0230c2CSCostilla00001CSouthDakota#0610c2HSHanson00001BAlabama#0390c2CVCovington000017Vermont#0090c2ESEssex00001BMissouri#1990c2SLScotland00001BCalifornia#1030c2TETehama000017Alaska#1000c2HAHaines000017Texas#2710c2KIEKinney00001BLouisiana#0150c2BOBossier00001AGeorgia#0790c2CDCrawford000028WorldwithCountries#1570c2NLNetherlands000018Minnesota#1310c2RIRice00001AKentucky#1150c2JOJohnson00001AMichigan#1250c2OKOakland000018Florida#0430c2GLGlades000019Spain#0100c2CTCatalonia00001AMississippi#0250c2CYClay000025Europewithcountries#0260c2MDMoldova00001BMalaysia#0120c2SLSelangor00001AArkansas#0150c2CRCarroll000018England#0110c2DUDurham00001DSouthAmerica#0030c2BRBrazil00001EWestVirginia#0430c2LILincoln00001BScotland#0290c2SHShetland00001ENewWorld#2020c2PRPuerto Rico000018Bahamas#260c2RCRum Cay000011USA#IA0c2IAIowa00001FGuatemala#020c2BVBaja Verapaz000016Moldova#530c2OROrhei000020Mozambique#010c2CDCabo Delgado000023Venezuela#020c2BAnzo&aacute;tegui000023USACentralRegion#550c2WIWisconsin000018Portugal#020c2AVAveiro00001FNewWorld#500c2CICote d Ivoire000019Algeria#DZ.BT0c2BTBatna000025Mauritania#MR.HG0c2HGHodh El Gharbi000029Philippines#PH.ST0c2STSurigao del Norte00001EEastTimor#TL.MT0c2MTManatuto00001BMacedonia#MK.BU0c2BUButel00001EMacedonia#MK.DA0c2DADebartsa000026Philippines#PH.AS0c2ASAgusan del Sur00001FPhilippines#PH.BI0c2BIBiliran00001CRussia#RU.KK0c2KKKhakassia000027EquatorialGuinea#GQ.CS0c2CSCentro Sur00001BQatar#QA.WA0c2WAAl Wakrah00002BIran#IR.KB0c2KBKohgiluyeh and Buyer Ahmed000029FranceDepartment#FR.HA0c2HAHautes Alpes00002AFalklandIsland#NA.FK0c2FKFalkland Island00001ACapeVerde#CV.PA0c2PAPaul00002ABrazilRegion#BR.NE0c2NENorth East Region000014Iowa#1170c2LULucas00001CWisconsin#0070c2BYBayfield000018Alaska#2820c2YAYakutat000017Texas#4530c2TRATravis00001CIndiana#0690c2HUHuntington00001ANewYork#0410c2HAHamilton00001FNorthCarolina#1090c2LILincoln00001DVirginia#0110c2APAppomattox000018Georgia#2610c2SUSumter000015Kansas#0630c2GOGove000022SouthCarolina#0350c2DODorchester000022Virginia#7350c2PQPoquoson (City)00001BIllinois#0990c2LSLa Salle000018Missouri#0190c2BOBoone000023WorldwithCountries#1580c2NONorway000023NorthDakota#0330c2GVGolden Valley000016Texas#0910c2COMComal000015Ohio#0530c2GAGallia000024Spain#0110c2CVCommunidad Valencian000017NewMexico#0250c2LELea000019Nebraska#0230c2BLButler000018Wyoming#0450c2WEWeston000024Europewithcountries#0270c2MCMonaco00001DMalaysia#0130c2TETerengganu000017England#0120c2ESEssex00001BTennessee#1130c2MDMadison00001CSouthAmerica#0040c2CLChile000020Scotland#0300c2STStirlingshire000021NewWorld#2030c2KYCayman Islands00001AOklahoma#0650c2JAJackson000029MadagascarRegions#MG.FI.HO0c2HOIhorombe000014World8#010c2ASAsia00001DBahamas#270c2SSSan Salvador000020Guatemala#030c2CMChimaltenango000017Moldova#540c2SOSoroca000018Mozambique#020c2GAGaza000017Venezuela#030c2CApure000020Chile#010c2VSValpara&iacute;so000016Portugal#030c2BEBeja000032NewWorld#510c2CDDemocratic Republic of the Congo00001BPuertoRico#690c2HUHumacao00001AAlgeria#DZ.BU0c2BUBouira00001EMacedonia#MK.UM0c2UMKumanovo000020Macedonia#MK.VC0c2VCVranestica00001CPhilippines#PH.SU0c2SUSulu000020Tanzania#TZ.PN0c2PNPemba North00001EHongKong#HK.KU0c2KUKwun Tong000029CoteDivoire#CI.VB0c2VBVallee du Bandama00001ALaos#LA.PH0c2PHPhongsali00001BMacedonia#MK.DB0c2DBDebar00001BRussia#RU.KL0c2KLKalmykia000019Uganda#UG.DO0c2DODokolo00001EMadagascar#MG.TL0c2TLToliara00001EVietnam#VN.KG0c2KGKien Giang000020Mauritius#MU.PL0c2PLPort Louis00001FVirginia#1930c2WEWestmoreland00001AColorado#0250c2CRCrowley00001DSouthDakota#0630c2HDHarding00001AAlabama#0410c2CWCrenshaw00001AVermont#0110c2FRFranklin000018Missouri#2010c2SCScott00001CCalifornia#1050c2TRTrinity000018Texas#2730c2KLEKleberg000019Louisiana#0170c2CACaddo000017Georgia#0810c2CPCrisp000023WorldwithCountries#1590c2PLPoland000018Minnesota#1330c2RCRock000019Kentucky#1170c2KEKenton000019Michigan#1270c2OAOceana000016Florida#0450c2GUGulf00001BSpain#0120c2EXExtremadura00001DMississippi#0270c2CMCoahoma000028Europewithcountries#0280c2MOMontenegro000019Arkansas#0170c2CHChicot000021England#0130c2GLGloucestershire00001FSouthAmerica#0050c2COColombia00001CWestVirginia#0450c2LOLogan00001DScotland#0310c2SUSutherland000016World8#020c2EUEurope00001CBahamas#280c2SBSouth Abaco00001DGuatemala#040c2CQChiquimula000018Moldova#550c2TITighina00001DMozambique#030c2INInhambane000018Venezuela#040c2DAragua000045Chile#020c2AIAis&eacute;n del General Carlos Iba&ntilde;ezdel Campo000017Portugal#040c2BRBraga00001ANewWorld#520c2DJDjibouti000021Burma#MM.MG0c2MGMagway Division000018Jordan#JO.KA0c2KAKarak000021Macedonia#MK.VD0c2VDKisela Voda000017Bhutan#BT.GA0c2GAGasa000025CentralAmerica2#CE.GT0c2GTGuatemala00001EPhilippines#PH.AU0c2AUAurora000020Philippines#PH.BK0c2BKBukidnon000021Russia#RU.KM0c2KMKhantia-Mansia000020Madagascar#MG.TM0c2TMToamasina00001BLibya#LY.KF0c2KFAl Kufrah00001ACameroon#CM.OU0c2OUOuest00001AIran#IR.KD0c2KDKordestan000028FranceDepartment#FR.HC0c2HCHaute Corse00001DVietnam#VN.KH0c2KHKhanh Hoa00001CSyria#SY.HA0c2HAAl Hasakah000023Madagascar#MG.AV0c2AVAntananarivo000039DemocraticRepublicoftheCongo#CD.KC0c2KCKasai Occidental00001DKyrgyzstan#KG.BA0c2BABatken00001COklahoma#0670c2JEJefferson000013Iowa#1190c2LYLyon000017Asia3#0470c2VNVietnam000019Wisconsin#0090c2BRBrown000018Texas#4550c2TRITrinity000019Indiana#0710c2JAJackson00001ANewYork#0430c2HEHerkimer000020NorthCarolina#1110c2MDMcDowell00001CVirginia#0130c2ARArlington000018Georgia#2630c2TBTalbot000017Kansas#0650c2GHGraham000021SouthCarolina#0370c2EDEdgefield00001BIllinois#1010c2LWLawrence00001BMissouri#0210c2BCBuchanan000025WorldwithCountries#1600c2PTPortugal000021NorthDakota#0350c2GFGrand Forks000019Texas#0930c2COAComanche000015Ohio#0550c2GEGeauga000017Spain#0130c2GAGalicia00001BNewMexico#0270c2LILincoln000017Nebraska#0250c2CACass000029Europewithcountries#0290c2NLNetherlands00001FMalaysia#0150c2KLKuala Lumpur00001BEngland#0140c2HAHampshire00001ATennessee#1150c2MRMarion00001ESouthAmerica#0060c2ECEcuador00001FScotland#0320c2WEWest Lothian000016World8#030c2AFAfrica00001DBahamas#290c2SNSouth Andros00002FWorldwithCountries#010c2AGAntigua and Barbuda000012USA#ID0c2IDIdaho00001EGuatemala#050c2PREl Progreso000018Moldova#560c2UNUngheni00001AMozambique#040c2MPMaputo000019Venezuela#050c2EBarinas00001AChile#030c2ANAntofagasta000021Portugal#050c2BABragan&ccedil;a000017NewWorld#530c2EGEgypt000023Australia2#SA0c2SASouth Australia00001FBarbados#010c2CCChrist Church00001BPuertoRico#710c2ISIsabela000028PolandCounties#PL.MZ.OM0c2MOMOstroleka00001DLiberia#LR.GK0c2GKGrand Kru00001BMacedonia#MK.VE0c2VEVeles000025Sudan#SD.WB0c2WBWest Bahr Al Ghazal00001BYemen#YE.MR0c2MRAl Mahrah00001CPhilippines#PH.CB0c2CBCebu00001EGabon#GA.MO0c2MOMoyen-Ogooue00001ERussia#RU.KN0c2KNKaliningrad00001BChina2#CN.ZJ0c2ZJZhejiang000022FranceDepartment#FR.YO0c2YOYonne00001EGuinea#GN.LA0c2LALab&eacute;000018China2#CN.GS0c2GSGansu000017Iran#IR.KE0c2KEKerman00002BFranceDepartment#FR.HD0c2HDHauts-de-Seine00001EPakistan#PK.IS0c2ISIslamabad00001DTurkmenistan#TM.MA0c2MAMary00001FEurope2#EU.RD0c2RDRhodes (Gr)000017Virginia#1950c2WIWise000019Colorado#0270c2CUCuster00001CSouthDakota#0650c2HGHughes000019Alabama#0430c2CUCullman00001CVermont#0130c2GIGrand Isle00001AMissouri#2030c2SNShannon00001BCalifornia#1070c2TUTulare000015Texas#2750c2KNOKnox00001DLouisiana#0190c2CLCalcasieu000016Georgia#0830c2DADade000024WorldwithCountries#1610c2RORomania00001AMinnesota#1350c2RORoseau000018Kentucky#1190c2KNKnott000019Michigan#1290c2OGOgemaw00001AFlorida#0470c2HTHamilton000018Spain#0140c2LALa Rioja00001ENewMexico#0280c2LALos Alamos00001CMississippi#0290c2CPCopiah000024Europewithcountries#0300c2NONorway000019Malaysia#0160c2LALabuan000018Arkansas#0190c2CLClark00001FEngland#0150c2HEHerefordshire000027SouthAmerica#0070c2FKFalkland Islands00001FWestVirginia#0470c2MDMcDowell00001EScotland#0330c2WIWigtonshire00001DWorld8#040c2NANorth America000020Bahamas#300c2SESouth Eleuthera000023WorldwithCountries#020c2BSBahamas00001CGuatemala#060c2ESEscuintla00001AMozambique#050c2SOSofala000020Venezuela#060c2FBol&iacute;var00001FChile#040c2ARAraucan&iacute;a000020Portugal#060c2CBCastelo Branco000023NewWorld#540c2GQEquatorial Guinea00001EBarbados#020c2ANSaint Andrew000017Fiji#FJ.NO.BU0c2BUBua00001EFiji#FJ.NO.CK0c2CKCakaudrova000019Laos#LA.OU0c2OUOudomxai00001DMacedonia#MK.DE0c2DEDolneni000017Sudan#SD.EB0c2EBLakes000019Serbia#RS.MR0c2MRMorava000017Russia#RU.KO0c2KOKomi000024FranceDepartment#FR.HE0c2HEHerault000025Cambodia#KH.OM0c2OMBanteay Meanchey000019Tonga#TO.HA0c2HAHa'apai00001BOklahoma#0690c2JOJohnston000016Iowa#1210c2MAMadison000016Asia3#0490c2TWTaiwan00001BWisconsin#0110c2BUBuffalo000016Texas#4570c2TYLTyler000018Indiana#0730c2JSJasper00001BNewYork#0450c2JEJefferson00001DNorthCarolina#1130c2MAMacon00001AVirginia#0150c2AUAugusta00001CGeorgia#2650c2TATaliaferro000016Kansas#0670c2GTGrant000021SouthCarolina#0390c2FAFairfield000016Illinois#1030c2LELee000019Missouri#0230c2BUButler000027WorldwithCountries#1620c2SMSan Marino00001BNorthDakota#0370c2GRGrant000017Texas#0950c2CCHConcho000015Ohio#0570c2GRGreene000016Spain#0150c2MAMadrid000018NewMexico#0290c2LULuna000018Nebraska#0270c2CECedar000017Hawaii#0010c2HAHawaii000024Europewithcountries#0310c2PLPoland00001CMalaysia#0170c2PUPutrajaya00001FEngland#0160c2HRHertfordshire00001CTennessee#1170c2MSMarshall000024SouthAmerica#0080c2GFFrench Guiana00001DWorld8#050c2SASouth America00001EBahamas#310c2SWSpanish Wells000024WorldwithCountries#030c2BBBarbados00001CGuatemala#070c2GUGuatemala00001BMozambique#060c2NANampula00001AVenezuela#070c2GCarabobo000016Chile#050c2ATAtacama000019Portugal#070c2COCoimbra000019NewWorld#550c2EREritrea00001EBarbados#030c2GESaint George00001APuertoRico#730c2JYJayuya000029NewBrunswick#CA.NB.FC0c2FCFundy Coastal00001FAlgeria#DZ.CO0c2COConstantine00001DSudan#SD.WD0c2WDWest Darfur000019Gabon#GA.NG0c2NGNgounie000020CoteDivoire#CI.DE0c2DEDenguele00001BChina2#CN.HK0c2HKHongKong00001BVietnam#VN.LA0c2LALong An000021Pakistan#PK.JK0c2JKAzad Kashmir000024TrinidadandTobago#TT.MA0c2MAMayaro000020SaudiArabia#SA.QS0c2QSAl Qasim000020SaudiArabia#SA.RI0c2RIAr Riyad000019Asia3#0500c2HKHong Kong000018Virginia#1970c2WYWythe000018Colorado#0290c2DEDelta000020SouthDakota#0670c2HTHutchinson000016Alabama#0450c2DADale00001AVermont#0150c2LALamoille000019Missouri#2050c2SHShelby00001DCalifornia#1090c2TOTuolumne000016Texas#2770c2LAMLamar00001CLouisiana#0210c2CDCaldwell000024Virginia#7400c2PMPortsmouth (City)000018Georgia#0850c2DWDawson000023WorldwithCountries#1630c2CSSerbia00001DMinnesota#1370c2SLSt. Louis000017Kentucky#1210c2KOKnox00001CMichigan#1310c2ONOntonagon000018Florida#0490c2HAHardee000017Spain#0160c2MEMelilla00001FMississippi#0310c2CGCovington000026Europewithcountries#0320c2PTPortugal000017Arkansas#0210c2CYClay00001DSouthAmerica#0090c2GYGuyana00001DWestVirginia#0490c2MAMarion000022NewCaledonia#NC.SU.LF0c2LFLa Foa000028Saskatchewan#CA.SK.NR0c2NRNorth Region00001FWorld8#060c2CACentral America000022Bahamas#320c2WBWest Grand Bahama000022WorldwithCountries#040c2BZBelize000020Guatemala#080c2HUHuehuetenango00001AMozambique#070c2NINiassa000019Venezuela#080c2HCojedes000024Chile#060c2BIB&iacute;o-B&iacute;o00001EPortugal#080c2EV&Eacute;vora00001ANewWorld#560c2ETEthiopia00001DBarbados#040c2JMSaint James000025PolandCounties#PL.WP.KM0c2WKMKalisz000021Morocco#MA.FB0c2FBFes-Boulemane00001FMacedonia#MK.VH0c2VHVrapciste000020Sudan#SD.WE0c2WEWest Equatoria00001DBhutan#BT.GE0c2GEGeylegphug000031CentralAfricanRepublic#CF.MP0c2MPOmbella-M'Poko000024CentralAmerica2#CE.HN0c2HNHonduras000020Tanzania#TZ.PS0c2PSPemba South00001DPhilippines#PH.BO0c2BOBohol000019Malawi#MW.RU0c2RURumphi00001CRussia#RU.KQ0c2KQKamchatka00001BGuinea#GN.KN0c2KNKoundara000023Kuwait#KW.MU0c2MUMubarak Al Kabir00001FChina2#CN.HL0c2HLHeilongjiang00002AFranceDepartment#FR.HG0c2HGHaute Garonne00001BNigeria#NG.ZA0c2ZAZamfara000019Togo#TG.MA0c2MAMaritime000016Oklahoma#0710c2KAKay000016Iowa#1230c2MHMahaska000015Asia3#0510c2MOMacau00001BWisconsin#0130c2BNBurnett000017Texas#4590c2UPSUpshur000015Indiana#0750c2JYJay000017NewYork#0470c2KIKings00001FNorthCarolina#1150c2MSMadison000017Virginia#0170c2BABath00001AGeorgia#2670c2TTTattnall000015Kansas#0690c2GYGray000020SouthCarolina#0410c2FLFlorence00001DIllinois#1050c2LILivingston00001BMissouri#0250c2CACaldwell000025WorldwithCountries#1640c2SKSlovakia00001CNorthDakota#0390c2GNGriggs000016Texas#0970c2CKECooke000027Virginia#5600c2CFClifton Forge (City)000017Ohio#0590c2GUGuernsey000016Spain#0170c2MUMurcia00001CNewMexico#0310c2MKMcKinley000018Nebraska#0290c2CHChase000019Hawaii#0030c2HOHonolulu000025Europewithcountries#0330c2RORomania000016England#0180c2KEKent000019Tennessee#1190c2MUMaury00001FSouthAmerica#0100c2PYParaguay000017World8#070c2OCOceania000022WorldwithCountries#050c2CACanada000019Guatemala#090c2IZIzabal000018Mozambique#080c2TETete00001FVenezuela#090c2YDelta Amacuro000017Chile#070c2COCoquimbo000016Portugal#090c2FAFaro000017NewWorld#570c2GAGabon00001DTurkey#020c2ADAd&#305;yaman00001CBarbados#050c2JNSaint John000025PuertoRico#750c2JDJuana D&iacute;az000025MarshallIsland#MH.MH.NK0c2NKNamorik000020Sudan#SD.EE0c2EEEast Equatoria00001CGuinea#GN.KO0c2KOKouroussa000021Guinea#GN.LE0c2LEL&eacute;louma00001BLibya#LY.JU0c2JUAl Jufrah000019Malawi#MW.BA0c2BABalaka00001FBotswana#BW.NE0c2NENorth East000027Singapore#SG.CS0c2CSCentral Singapore00001DBurkinaFaso#BF.YG0c2YGYagha000017Virginia#1990c2YOYork000019Colorado#0310c2DNDenver00001CMontana#0010c2BEBeaverhead00001ASouthDakota#0690c2HYHyde000018Alabama#0470c2DLDallas000018Vermont#0170c2OROrange00001BMissouri#2070c2SDStoddard00001CCalifornia#1110c2VEVentura000015Texas#2790c2LABLamb00001BLouisiana#0230c2CMCameron000019Georgia#0870c2DEDecatur000025WorldwithCountries#1650c2SISlovenia000019Minnesota#1390c2SCScott000018Kentucky#1230c2LALarue00001AMichigan#1330c2OEOsceola000018Florida#0510c2HEHendry000017Spain#0180c2NANavarra00001CMississippi#0330c2DEDeSoto000028Europewithcountries#0340c2SMSan Marino00001BArkansas#0230c2CBCleburne00001CEngland#0190c2LALancashire00001BSouthAmerica#0110c2PEPeru00001FWestVirginia#0510c2MRMarshall00001BWorld8#080c2MEMiddle East000026WorldwithCountries#060c2CRCosta Rica000019Guatemala#100c2JAJalapa000020Azerbaijan#010c2ARAb&#351;eron00001CMozambique#090c2ZMZambezia000018Chile#080c2LIO'Higgins000017NewWorld#580c2GHGhana00001ETurkey#030c2AFAfyonkarahisar00001EBarbados#060c2JSSaint Joseph000018Bahrain#010c2CACapital000024PolandCounties#PL.WP.KO0c2WKOKonin000025PolandCounties#PL.WP.LE0c2WLELeszno000025Uzbekistan#UZ.QR0c2QRKarakalpakstan00001EBurkinaFaso#BF.GG0c2GGGnagna00001CLiberia#LR.GP0c2GPGbarpolu00001FMacedonia#MK.VJ0c2VJBogovinje00001AZambia#ZM.LP0c2LPLuapula00001EPhilippines#PH.TR0c2TRTarlac00001BYemen#YE.MW0c2MWMl Mahwit000023Macedonia#MK.CS0c2CSCucer Sandevo00001FPhilippines#PH.CG0c2CGCagayan000018Russia#RU.KS0c2KSKursk00002ACoteDivoire#CI.DH0c2DHDix-Huit Montagnes000021China2#CN.GX0c2GXGuangxi Zhuang000018China2#CN.HN0c2HNHunan00001FIran#IR.KJ0c2KJSouth Khorasan00001CVietnam#VN.LD0c2LDLam Dong00001BCapeVerde#CV.PI0c2PIPraia00001DOklahoma#0730c2KIKingfisher000015Iowa#1250c2MRMarion00001BWisconsin#0150c2CACalumet00001EAlaska#2900c2YKYukon-Koyukuk000016Texas#4610c2UPTUpton00001BIndiana#0770c2JEJefferson000017NewYork#0490c2LELewis00001ENorthCarolina#1170c2MTMartin00001AVirginia#0190c2BEBedford000018Georgia#2690c2TYTaylor000018Kansas#0710c2GLGreeley000022SouthCarolina#0430c2GEGeorgetown000018Illinois#1070c2LOLogan00001BMissouri#0270c2CWCallaway000022WorldwithCountries#1660c2ESSpain00001FNorthDakota#0410c2HEHettinger000018Texas#0990c2CRYCoryell000017Ohio#0610c2HAHamilton00002BSpain#0190c2PAPais Vasco (Basque Country)000018NewMexico#0330c2MOMora000019Nebraska#0310c2CRCherry000018Hawaii#0050c2KAKalawao000024Europewithcountries#0350c2CSSerbia000020England#0200c2LELeicestershire000019Tennessee#1210c2MIMeigs00001FSouthAmerica#0120c2SRSuriname000020WorldwithCountries#070c2CUCuba00001AGuatemala#110c2JUJutiapa000026Azerbaijan#020c2ACA&#287;cab&#601;di00001AMozambique#100c2MNManica00001FVenezuela#110c2IFalc&oacute;n000018Chile#090c2LLLos Lagos000018Portugal#110c2GUGuarda000018NewWorld#590c2GNGuinea00001ETurkey#040c2AGA&#287;r&#305;00001CBarbados#070c2LUSaint Lucy00001APuertoRico#770c2JCJuncos000018Bahrain#020c2CECentral000024PolandCounties#PL.PD.LM0c2PLMLomza00001CPanama#PA.SB0c2SBKuna Yala000017Sudan#SD.WH0c2WHUnity00001BRussia#RU.KT0c2KTKostroma000018Tunisia#TN.SF0c2SFSfax00001EOman#OM.SH0c2SHAsh Sharqiyah000024Singapore#SG.EA0c2EAEast Singapore000021Cambodia#KH.PH0c2PHPreah Vihear00001CGhana#GH.UE0c2UEUpper East00001AColorado#0330c2DODolores00001AMontana#0030c2BHBig Horn00001DSouthDakota#0710c2JAJackson000018Alabama#0490c2DEDekalb00001AAsia#0010c2AFAfghanistan000019Vermont#0190c2OLOrleans000018Missouri#2090c2STStone000019California#1130c2YOYolo000017Alaska#1100c2JUJuneau000019Texas#2810c2LAPLampasas00001DLouisiana#0250c2CTCatahoula000018Georgia#0890c2DKDeKalb000023WorldwithCountries#1670c2SESweden00001DMinnesota#1410c2SHSherburne000019Kentucky#1250c2LULaurel000019Michigan#1350c2OCOscoda00001AFlorida#0530c2HNHernando00001DMississippi#0350c2FOForrest00001CPennsylvania#0010c2ADAdams000026Europewithcountries#0360c2SKSlovakia00001CArkansas#0250c2CVCleveland00001EEngland#0210c2LILincolnshire00001ESouthAmerica#0130c2UYUruguay00001CWestVirginia#0530c2MSMason000027Manitoba#CA.MB.NR0c2NRNorthern Region000019Bahrain#030c2MUMuharraq000024WorldwithCountries#080c2DMDominica00001FGuatemala#120c2PEPet&eacute;n00001EAzerbaijan#030c2AMA&#287;dam000020Mozambique#110c2MTMaputo(City)000019Venezuela#120c2JGuarico000037Chile#100c2MAMagallanes y la Ant&aacute;rtica Chilena00001FNewWorld#600c2GWGuinea-Bissau000016Turkey#050c2AMAmasya00001FBarbados#080c2MISaint Michael000026PolandCounties#PL.PK.RM0c2PRMRzeszow00001ANamibia#NA.HA0c2HAHardap00001AAlgeria#DZ.DJ0c2DJDjelfa00001BBurma#MM.MO0c2MOMon State00001EMacedonia#MK.VL0c2VLVasilevo000021Philippines#PH.TT0c2TTTawi-Tawi00001ATanzania#TZ.PW0c2PWPwani000022Macedonia#MK.DK0c2DKDemir Kapija00001FPhilippines#PH.BS0c2BSBasilan000019Russia#RU.KU0c2KUKurgan000025FranceDepartment#FR.YV0c2YVYvelines00001AChina2#CN.GZ0c2GZGuizhou000018Nigeria#NG.YO0c2YOYobe000016Syria#SY.HI0c2HIHoms000025BrazilRegion#BR.NO0c2NONorth Region000018Oklahoma#0750c2KOKiowa000017Iowa#1270c2MSMarshall00001CWisconsin#0170c2CHChippewa000017Texas#4630c2UVAUvalde000016Asia#0020c2AMArmenia00001AIndiana#0790c2JNJennings00001CNewYork#0510c2LILivingston000023NorthCarolina#1190c2MKMecklenburg000018Virginia#0210c2BLBland000019Georgia#2710c2TFTelfair00001AKansas#0730c2GWGreenwood000022SouthCarolina#0450c2GRGreenville00001CIllinois#1090c2MUMcDonough000019Missouri#0290c2CMCamden000028WorldwithCountries#1680c2CHSwitzerland00001CNorthDakota#0430c2KIKidder000017Texas#1010c2COTCottle000016Ohio#0630c2HNHancock000019NewMexico#0350c2OTOtero00001BNebraska#0330c2CYCheyenne000016Hawaii#0070c2KUKauai000026Europewithcountries#0370c2SLSlovenia000018England#0220c2LOLondon00001ATennessee#1230c2MOMonroe000020SouthAmerica#0140c2VEVenezuela000019Bahrain#040c2NONorthern00002AWorldwithCountries#090c2DODominican Rep.000015USA#IL0c2ILIllinois000021Guatemala#130c2QZQuetzaltenango000023Azerbaijan#040c2ASA&#287;da&#351;000016Venezuela#130c2KLara000014Chile#110c2MLMaule000022USASouthWestRegion#320c2NVNevada000018Portugal#130c2LELeiria000017NewWorld#610c2KEKenya00001DBarbados#090c2PESaint Peter000019PuertoRico#790c2LJLajas000019Nigeria#NG.GO0c2GOGombe000020Uzbekistan#UZ.SA0c2SASamarkand000019Zambia#ZM.LS0c2LSLusaka00001DMacedonia#MK.DL0c2DLDelcevo000020Philippines#PH.BT0c2BTBatangas000018Russia#RU.KV0c2KVKirov00001EGuinea#GN.KS0c2KSKissidougou000028FranceDepartment#FR.HL0c2HLHaute Loire00001AColorado#0350c2DUDouglas000018Montana#0050c2BLBlaine00001DSouthDakota#0730c2JEJerauld000018Alabama#0510c2ELElmore000019Asia#0030c2AZAzerbaijan000019Vermont#0210c2RURutland00001BMissouri#2110c2SUSullivan000019California#1150c2YUYuba000019Texas#2830c2LASLa Salle00001DLouisiana#0270c2CBClaiborne000017Georgia#0910c2DODodge000024WorldwithCountries#1690c2UAUkraine00001AMinnesota#1430c2SBSibley00001BKentucky#1270c2LWLawrence000019Michigan#1370c2OSOtsego00001BFlorida#0550c2HLHighlands00001EMississippi#0370c2FRFranklin000020Pennsylvania#0030c2ALAllegheny000023Europewithcountries#0380c2ESSpain00001BArkansas#0270c2CMColumbia00001DWestVirginia#0550c2MEMercer000019Bahrain#050c2SOSouthern000027WorldwithCountries#100c2SVEl Salvador000020Guatemala#140c2QCQuich&eacute;000020Azerbaijan#050c2AFA&#287;stafa000018Venezuela#140c2LMerida00002BChile#120c2RMSantiago Metropolitan Region000018Portugal#140c2LILisboa000019NewWorld#620c2LSLesotho000017Turkey#070c2ALAntalya00001EBarbados#100c2PHSaint Philip000023WorldwithCountries#110c2GDGrenada000014USA#IN0c2INIndiana00001DGuatemala#150c2RERetalhuleu00001DNewZealand#E70c2AUKAuckland00001DAzerbaijan#060c2AUA&#287;su000019Venezuela#150c2MMiranda00001EChile#130c2TATarapac&aacute;000019NewWorld#630c2LILiberia000016Turkey#080c2AVArtvin00001EBarbados#110c2THSaint Thomas000019PuertoRico#810c2LRLares000023PolandCounties#PL.LD.LO0c2LLOLodz00001DAlgeria#DZ.EB0c2EBEl Bayadh00001FSudan#SD.WK0c2WKWest Kurdufan000015Bhutan#BT.HA0c2HAHa000021CentralAmerica2#CE.HT0c2HTHaiti000021Macedonia#MK.DM0c2DMDemir Hisar00001FPhilippines#PH.BU0c2BUBulacan000017Niger#NE.DS0c2DSDosso00001ERussia#RU.MC0c2MCMoscow City000024Singapore#SG.WE0c2WEWest Singapore000028FranceDepartment#FR.HM0c2HMHaute Marne00001CKyrgyzstan#KG.TL0c2TLTalas000025Mauritius#MU.PW0c2PWPlaines Wilhems00001AOklahoma#0770c2LALatimer000014Iowa#1290c2MIMills000019Wisconsin#0190c2CLClark00001ATexas#4650c2VAVVal Verde000019Indiana#0810c2JOJohnson000019NewYork#0530c2MAMadison000020NorthCarolina#1210c2MIMitchell00001CVirginia#0230c2BOBotetourt000019Georgia#2730c2TLTerrell000019Kansas#0750c2HMHamilton000021SouthCarolina#0470c2GWGreenwood00001AIllinois#1110c2MHMcHenry000021Missouri#0310c2CGCape Girardeau00002BWorldwithCountries#1700c2UKUnited Kingdom00001DNorthDakota#0450c2LMLaMoure000016Texas#1030c2CRACrane000015Ohio#0650c2HRHardin000018NewMexico#0370c2QUQuay000017Nebraska#0350c2CLClay000015Hawaii#0090c2MAMaui000024Europewithcountries#0390c2SESweden000019England#0240c2NONorfolk00001ETennessee#1250c2MGMontgomery000025WorldwithCountries#120c2GTGuatemala000026Guatemala#160c2SASacatep&eacute;quez000022NewZealand#E80c2BOPBay of Plenty000025Azerbaijan#070c2ABAli Bayraml&#305;000019Venezuela#160c2NMonagas000025USASouthWestRegion#350c2NMNewMexico00001CPortugal#160c2PAPortalegre000017NewWorld#640c2LRLibya00001ATurkey#090c2AYAyd&#305;n000024PolandCounties#PL.MZ.PM0c2MPMPlock000036DemocraticRepublicoftheCongo#CD.KN0c2KNKinshasa City00002FCentralAfricanRepublic#CF.NM0c2NMNana-Mambere000029Philippines#PH.CL0c2CLCompostela Valley000019Malawi#MW.TH0c2THThyolo00001ERussia#RU.KX0c2KXKrasnoyarsk00001CRussia#RU.LN0c2LNLeningrad000028FranceDepartment#FR.HN0c2HNHaute Saone00001CVietnam#VN.LI0c2LILai Chau00001BOman#OM.BA0c2BAAl Batinah000018Syria#SY.HL0c2HLAleppo00001BCambodia#KH.PL0c2PLPailin000020CapeVerde#CV.PN0c2PNPorto Novo000018Colorado#0370c2EAEagle00001CMontana#0070c2BRBroadwater00001BSouthDakota#0750c2JOJones00001AAlabama#0530c2ESEscambia000019Asia#0050c2BDBangladesh00001CVermont#0230c2WAWashington000018Missouri#2130c2TATaney000017Texas#2850c2LAVLavaca00001DLouisiana#0290c2COConcordia000017Georgia#0930c2DLDooly000029WorldwithCountries#1710c2VAVatican City00001BMinnesota#1450c2SAStearns000016Kentucky#1290c2LELee000019Michigan#1390c2OTOttawa00001EFlorida#0570c2HBHillsborough00001CMississippi#0390c2GOGeorge000020Pennsylvania#0050c2ARArmstrong000029Europewithcountries#0400c2CHSwitzerland000019Arkansas#0290c2CWConway000022England#0250c2NRNorthamptonshire00001EWestVirginia#0570c2MIMineral000025NewCaledonia#NC.SU.MD0c2MDMont-Dore000028NewCaledonia#NC.IL.OV0c2OVOuv&eacute;a000025PuertoRico#830c2LMLas Mar&iacute;as000021WorldwithCountries#130c2HTHaiti00001DGuatemala#170c2SMSan Marcos00001FNewZealand#E90c2CANCanterbury00001AAzerbaijan#080c2AAAstara00001FVenezuela#170c2ONueva Esparta000017Portugal#170c2POPorto00001CNewWorld#650c2MSMadagascar00001ETurkey#100c2BKBal&#305;kesir000027NovaScotia#CA.NS.ST0c2STSunrise Trail000025SaudiArabia#SA.SH0c2SHAsh Sharqiyah00001BEurope2#EU.AD0c2ADAndorra00001EBurkinaFaso#BF.GM0c2GMGourma000024PapuaNewGuinea#PG.MB0c2MBMilne Bay00001DGuineaBissau#GW.GA0c2GAGabu000026EquatorialGuinea#GQ.WN0c2WNWele Nzas000020Philippines#PH.CM0c2CMCamiguin000029Tibet#TI.XP0c2XPXigaz&ecirc; Prefecture00001BRussia#RU.ME0c2MEMariy-El00001DTunisia#TN.TA0c2TATataouine00001BVietnam#VN.KT0c2KTKon Tum000016Syria#SY.HM0c2HMHama00001BEurope2#EU.RO0c2RORomania00001AEurope2#EU.SE0c2SESweden00001BOklahoma#0790c2LFLe Flore000017Iowa#1310c2MTMitchell00001CWisconsin#0210c2COColumbia00001ATexas#4670c2VAZVan Zandt000015Asia#0060c2BTBhutan000016Indiana#0830c2KNKnox000018NewYork#0550c2MNMonroe000022NorthCarolina#1230c2MGMontgomery00001CVirginia#0250c2BRBrunswick000018Georgia#2750c2THThomas000017Kansas#0770c2HPHarper00001FSouthCarolina#0490c2HAHampton000019Illinois#1130c2MLMcLean00001AMissouri#0330c2CRCarroll000023WorldwithCountries#1720c2CYCyprus00001BNorthDakota#0470c2LOLogan000019Texas#1050c2CKTCrockett000017Ohio#0670c2HIHarrison00001ENewMexico#0390c2RARio Arriba000019Nebraska#0370c2COColfax000025Europewithcountries#0410c2UAUkraine000020England#0260c2NTNorthumberland000019Tennessee#1270c2MEMoore000028NewCaledonia#NC.NO.BE0c2BEB&eacute;lep000024WorldwithCountries#140c2HNHonduras00001DGuatemala#180c2SRSanta Rosa000018Azerbaijan#090c2BABaki00001CVenezuela#180c2PPortuguesa000021Portugal#180c2SASantar&eacute;m000018NewWorld#660c2MWMalawi000017Turkey#110c2BCBilecik00001CSudan#SD.WN0c2WNWhite Nile000021Macedonia#MK.CZ0c2CZCentar Zupa000027Philippines#PH.CN0c2CNCamarines Norte000019Serbia#RS.NS0c2NSNisava00001ARussia#RU.LP0c2LPLipetsk00001BTunisia#TN.SL0c2SLSiliana00001AGuinea#GN.MC0c2MCMacenta000020SolomonIsland#SB.IS0c2ISIsabel000018China2#CN.HU0c2HUHubei00001DTunisia#TN.BA0c2BABen Arous00002CFranceDepartment#FR.HP0c2HPHautes Pyrenees000017Syria#SY.ID0c2IDIdlib000024TrinidadandTobago#TT.NA0c2NANariva000019Colorado#0390c2ELElbert000018Montana#0090c2CACarbon00001FSouthDakota#0770c2KIKingsbury000018Alabama#0550c2ETEtowah000015Asia#0070c2BNBrunei000019Vermont#0250c2WIWindham000018Missouri#2150c2TETexas000014Texas#2870c2LEELee00001BLouisiana#0310c2DSDe Soto000021Virginia#7500c2RARadford (City)00001BGeorgia#0950c2DUDougherty000023WorldwithCountries#1730c2TKTurkey00001AMinnesota#1470c2SESteele000019Kentucky#1310c2LSLeslie00001FMichigan#1410c2PRPresque Isle000018Florida#0590c2HMHolmes00001CMississippi#0410c2GRGreene00001DPennsylvania#0070c2BEBeaver00002CEuropewithcountries#0420c2UKUnited Kingdom00001CArkansas#0310c2CICraighead000021England#0270c2NGNottinghamshire00001CWestVirginia#0590c2MNMingo00001FPuertoRico#850c2LPLas Piedras000023WorldwithCountries#150c2JMJamaica000020Guatemala#190c2SOSolol&aacute;00001DNewZealand#F10c2GISGisborne00001BAzerbaijan#100c2BLBalakan000017Venezuela#190c2RSucre000020Portugal#190c2SESet&uacute;bal000016NewWorld#670c2MLMali00001BTurkey#120c2BGBing&ouml;l000017Ghana#GH.TV0c2TVVolta000023Europe2#EU.AF0c2AFAland (Finland)00002CMorocco#MA.GB0c2GBGharb-Chrarda Beni Hssen00001DChad#TD.HD0c2HDHadjer-Lamis000021PapuaNewGuinea#PG.MD0c2MDMadang00001ARussia#RU.MG0c2MGMagadan00001BGuinea#GN.MD0c2MDMandiana00001BCambodia#KH.PO0c2POPursat00001AOklahoma#0810c2LILincoln000015Iowa#1330c2MOMonona00001CWisconsin#0230c2CRCrawford000019Texas#4690c2VICVictoria000016Asia#0080c2MMBurma (00001BIndiana#0850c2KOKosciusko00001CNewYork#0570c2MOMontgomery00001DNorthCarolina#1250c2MOMoore00001BVirginia#0270c2BUBuchanan000016Georgia#2770c2TITift000017Kansas#0790c2HVHarvey00001DSouthCarolina#0510c2HOHorry000018Illinois#1150c2MAMacon000019Missouri#0350c2CTCarter00001DNorthDakota#0490c2MHMcHenry000017Texas#1070c2CSBCrosby00002AVirginia#5700c2COColonial Heights (City)000014Ohio#0690c2HYHenry00001DNewMexico#0410c2RSRoosevelt000019Nebraska#0390c2CUCuming00002AEuropewithcountries#0430c2VAVatican City00001DEngland#0280c2OXOxfordshire00001ATennessee#1290c2MNMorgan000022WorldwithCountries#160c2MXMexico000020Guatemala#200c2SUSuchitepequez000020NewZealand#F20c2HKBHawke's Bay000020Egypt_346255#010c2ALAlexandria000019Azerbaijan#110c2BRBarda000019Venezuela#200c2STachira000022Portugal#200c2VCViana do Castelo00001CNewWorld#680c2MRMauritania000016Turkey#130c2BTBitlis000022MarshallIsland#MH.MH.NU0c2NUNamu000025NovaScotia#CA.NS.CB0c2CBCape Breton000037DemocraticRepublicoftheCongo#CD.KR0c2KRKasai Oriental000019Senegal#SN.MT0c2MTMatam000024Morocco#MA.GC0c2GCGrand Casablanca00001EMauritania#MR.IN0c2INInchiri00001DMacedonia#MK.DR0c2DRDrugovo00001DPhilippines#PH.CP0c2CPCapiz00001FGabon#GA.OI0c2OIOgooue-Ivindo000017Guinea#GN.LO0c2LOLola000020Swaziland#SZ.SH0c2SHShiselweni00001FIran#IR.KS0c2KSNorth Khorasan000026FranceDepartment#FR.HR0c2HRHaut Rhin00001FCambodia#KH.PP0c2PPPhnom Penh00001AColorado#0410c2EPEl Paso000018Montana#0110c2CRCarter00001ASouthDakota#0790c2LALake000019Alabama#0570c2FAFayette000017Asia#0090c2KHCambodia000019Vermont#0270c2WNWindsor000019Missouri#2170c2VEVernon000015Texas#2890c2LEOLeon000024Louisiana#0330c2EBEast Baton Rouge000019Georgia#0970c2DGDouglas000026WorldwithCountries#1750c2AUAustralia00001BMinnesota#1490c2STStevens00001AKentucky#1330c2LTLetcher00001CMichigan#1430c2RORoscommon00001EFlorida#0610c2IRIndian river00001DMississippi#0430c2GEGrenada00001EPennsylvania#0090c2BDBedford000024Europewithcountries#0440c2CYCyprus00001BArkansas#0330c2CFCrawford000021WestVirginia#0610c2MLMonongalia000020PuertoRico#870c2LZLo&iacute;za000025WorldwithCountries#170c2NINicaragua000025Guatemala#210c2TOTotonicap&aacute;n000026NewZealand#F30c2MWTManawatu-Wanganui00001BEgypt_346255#020c2ANAswan000021Azerbaijan#120c2BQBeyl&#601;qan00001CSanMarino#010c2ACAcquaviva00001AVenezuela#210c2TTrujillo00001BPortugal#210c2VRVila Real000019NewWorld#690c2MAMorocco000014Turkey#140c2BLBolu000033NorthWestTerritories#CA.NT.NC0c2NCNahanni Country00001FMacau#MO.MA.SZ0c2SZSao Lazaro000028SaoTomeandPrincipe#ST.CG0c2CGCantagalo00001DSaudiArabia#SA.TB0c2TBTabuk00001ASriLanka#LK.GL0c2GLGalle00001FSriLanka#LK.HB0c2HBHambantota000020SaudiArabia#SA.BA0c2BAAl Bahah00001ATanzania#TZ.RK0c2RKRukwa00001BLibya#LY.MB0c2MBAl Margab00001BMalawi#MW.BL0c2BLBlantyre00001ATunisia#TN.AN0c2ANAriana000029FranceDepartment#FR.HS0c2HSHaute Savoie000018Oklahoma#0830c2LOLogan000015Iowa#1350c2MNMonroe000018Wisconsin#0250c2DADane000017Texas#4710c2WAKWalker000014Asia#0100c2CNChina00001AIndiana#0870c2LALagrange000018NewYork#0590c2NANassau00001CNorthCarolina#1270c2NANash00001DVirginia#0290c2BCBuckingham000018Georgia#2790c2TMToombs000018Kansas#0810c2HSHaskell00001ESouthCarolina#0530c2JAJasper00001BIllinois#1170c2MPMacoupin000017Missouri#0370c2CSCass000021WorldwithCountries#1760c2FJFiji00001ENorthDakota#0510c2MIMcIntosh00001ATexas#1090c2CUBCulberson000017Ohio#0710c2HGHighland00001CNewMexico#0430c2SASandoval000019Nebraska#0410c2CSCuster000024Europewithcountries#0450c2TKTurkey00001CEngland#0300c2SHShropshire000019Tennessee#1310c2OBObion000026MadagascarRegions#MG.MA.SF0c2SFSofia000022WorldwithCountries#180c2PAPanama000019Guatemala#220c2ZAZacapa000020NewZealand#F40c2MBHMarlborough00001BEgypt_346255#030c2ATAsyut000022Azerbaijan#130c2BSBil&#601;suvar00001ESanMarino#020c2CHChiesanuova000019Venezuela#220c2UYaracuy000017Portugal#220c2VIViseu00001CNewWorld#700c2MZMozambique000016Turkey#150c2BDBurdur000030DemocraticRepublicoftheCongo#CD.KT0c2KTKatanga00001FUzbekistan#UZ.SI0c2SISirdaryo000025Morocco#MA.GE0c2GEGuelmim Es Semara000017Sudan#SD.WR0c2WRWarab00001ASamoa #WS.PA0c2PAPalauli000019Serbia#RS.PC0c2PCPcinja00001BVietnam#VN.LO0c2LOLao Cai00001EThailand#TH.KK0c2KKKhon Kaen00001DWestVirginia#0630c2MOMonroe00001EAustralia2#TAS0c2TASTasmania00001AColorado#0430c2FRFremont000019Montana#0130c2CSCascade00001ESouthDakota#0810c2LWLawrence00001AAlabama#0590c2FRFranklin000019Missouri#2190c2WAWarren000018Texas#2910c2LIBLiberty000020Louisiana#0350c2ECEast Carroll000017Georgia#0990c2EAEarly000025WorldwithCountries#1770c2KIKiribati000019Minnesota#1510c2SWSwift000018Kentucky#1350c2LILewis00001AMichigan#1450c2SASaginaw000019Florida#0630c2JSJackson00001DMississippi#0450c2HAHancock00001CPennsylvania#0110c2BRBerks000024Europewithcountries#0460c2RURussia00001DArkansas#0350c2CTCrittenden00001AEngland#0310c2SOSomerset000015Turkey#160c2BUBursa00001CPuertoRico#890c2LQLuquillo000031WorldwithCountries#190c2KNSt. Kitts &amp; Nevis00001BNewZealand#F50c2NSNNelson00001DEgypt_346255#040c2BHBeheira000026Azerbaijan#140c2CBC&#601;bray&#305;l00001CSanMarino#030c2DODomagnano000017Venezuela#230c2VZulia000019NewWorld#710c2NANamibia00001FBurkinaFaso#BF.YT0c2YTYatenga00001DMacedonia#MK.VV0c2VVVevcani000016Chad#TD.GR0c2GRGuera000025Philippines#PH.CS0c2CSCamarines Sur00001DGabon#GA.OL0c2OLOgooue-Lolo000019Serbia#RS.PD0c2PDDanube000020Iran#IR.KV0c2KVRazavi Khorasan00001CThailand#TH.KL0c2KLKalasin00001DThailand#TH.LB0c2LBLop Buri00001CEurope2#EU.SK0c2SKSlovakia00001AEurope2#EU.RU0c2RURussia00001DMauritius#MU.SA0c2SASavanne00001BTennessee#1330c2OVOverton000017Oklahoma#0850c2LVLove000019Iowa#1370c2MGMontgomery000019Wisconsin#0270c2DODodge000017Texas#4730c2WALWaller000019Asia#0120c2TPEast Timor000016Indiana#0890c2LKLake00001ANewYork#0610c2NYNew York000023NorthCarolina#1290c2NHNew Hanover00001BVirginia#0310c2CACampbell000017Georgia#2810c2TOTowns000019Kansas#0830c2HGHodgeman00001FSouthCarolina#0550c2KEKershaw00001AIllinois#1190c2MIMadison000018Missouri#0390c2CECedar00002DWorldwithCountries#1780c2MHMarshall Islands00001ENorthDakota#0530c2MKMcKenzie000017Texas#1110c2DALDallam000016Ohio#0730c2HOHocking00001CNewMexico#0450c2SJSan Juan000019Nebraska#0430c2DADakota000026Europewithcountries#0470c2SCScotland00001FEngland#0320c2STStaffordshire000022NewCaledonia#NC.NO.CA0c2CACanala000020Turkey#170c2CK&Ccedil;anakkale000025WorldwithCountries#200c2LCSt. Lucia00001ENewZealand#F60c2NTLNorthland00001FEgypt_346255#050c2BNBeni Suef000022Azerbaijan#150c2CLC&#601;lilabad00001ASanMarino#040c2FAFaetano000026Venezuela#240c2WDependencies Federal000017NewWorld#720c2NENiger00002AEurope2#EU.BA0c2BABosnia and Herzegovina00001FUzbekistan#UZ.TA0c2TATashkent000019Ghana#GH.CP0c2CPCentral00001ALesotho#LS.LE0c2LELeribe000021Panama#PA.BC0c2BCBocas del Toro00001CTanzania#TZ.SD0c2SDSingida000023Philippines#PH.CT0c2CTCatanduanes000021Gabon#GA.OM0c2OMOgooue-Maritime000018Serbia#RS.PE0c2PEPecki000029FranceDepartment#FR.HV0c2HVHaute Vienne00002BFranceDepartment#FR.IL0c2ILIndre et Loire00001CEurope2#EU.SL0c2SLSlovenia00001DWestVirginia#0650c2MGMorgan00001BColorado#0450c2GAGarfield00001AMontana#0150c2CHChouteau00001DSouthDakota#0830c2LILincoln000018Alabama#0610c2GEGeneva000016Asia#0130c2GEGeorgia00001DMissouri#2210c2WSWashington000020Alaska#1220c2KEKenai Peninsula00001ATexas#2930c2LIMLimestone000022Louisiana#0370c2EFEast Feliciana000018Georgia#1010c2ECEchols000027WorldwithCountries#1790c2FMMicronesia000018Minnesota#1530c2TOTodd00001AKentucky#1370c2LNLincoln00001CMichigan#1470c2SCSt. Clair00001BFlorida#0650c2JEJefferson00001EMississippi#0470c2HRHarrison00001CPennsylvania#0130c2BLBlair000025Europewithcountries#0480c2ENEngland000018Arkansas#0370c2CSCross000019England#0330c2SUSuffolk000019NewWorld#730c2NGNigeria000027USANorthEastRegion#090c2CTConnecticut000021PuertoRico#910c2MTManat&iacute;00003CWorldwithCountries#210c2VCSt. Vincent &amp; the Grenadines00001ANewZealand#F70c2OTAOtago00001BEgypt_346255#060c2CACairo00002BAzerbaijan#160c2DSDa&#351;k&#601;s&#601;n00001DSanMarino#050c2FIFiorentino000022Venezuela#250c2ADistrito Capital00001EEurope2#EU.SM0c2SMSan Marino000021Kyrgyzstan#KG.DA0c2DAJalal Abad00001BEurope2#EU.AL0c2ALAlbania000019Jordan#JO.MA0c2MAMafraq00001BRussia#RU.MM0c2MMMurmansk00001ATunisia#TN.SS0c2SSSousse000021Thailand#TH.KN0c2KNKanchanaburi000018England#0340c2SRSurrey000019Tennessee#1350c2PEPerry00001AOklahoma#0870c2MCMcClain000018Iowa#1390c2MUMuscatine000018Wisconsin#0290c2DRDoor000015Texas#4750c2WARWard000014Asia#0140c2INIndia00001AIndiana#0910c2LPLa Porte000019NewYork#0630c2NINiagara000023NorthCarolina#1310c2NTNorthampton00001BVirginia#0330c2CRCaroline00001AGeorgia#2830c2TETreutlen000018Kansas#0850c2JAJackson000021SouthCarolina#0570c2LALancaster000019Illinois#1210c2MSMarion00001BMissouri#0410c2CNChariton000022WorldwithCountries#1800c2NRNauru00001CNorthDakota#0550c2MLMcLean000017Texas#1130c2DASDallas000015Ohio#0750c2HLHolmes00001ENewMexico#0470c2SMSan Miguel000018Nebraska#0450c2DWDawes000023Europewithcountries#0490c2WAWales000034NewfoundlandandLabrador#CA.NF.AV0c2AVAvalon Region000018NewWorld#740c2RWRwanda00001CTurkey#190c2CM&Ccedil;orum000024USANorthEastRegion#100c2DEDelaware000031WorldwithCountries#220c2TTTrinidad &amp; Tobago00001ENewZealand#F80c2STLSouthland00001EEgypt_346255#070c2DADakahlia00002BAzerbaijan#170c2DVD&#601;v&#601;&ccedil;i000021SanMarino#060c2BMBorgo Maggiore000018Venezuela#260c2XVargas00001FBurkinaFaso#BF.ZM0c2ZMZondoma00001CSriLanka#LK.GQ0c2GQGampaha000019Somalia#SO.MU0c2MUMudug000017Nepal#NP.RA0c2RARapti000024Kiribati#KI.PI0c2PIPhoenix Islands00001EPhilippines#PH.CV0c2CVCavite000018Gabon#GA.NY0c2NYNyanga000020Lebanon#LE.NA0c2NAAn Nabatiyah000019Iran#IR.LO0c2LOLorestan000022FranceDepartment#FR.IN0c2INIndre00001CVietnam#VN.LS0c2LSLang Son000019Thailand#TH.LE0c2LELoei00002BEuropewithcountries#0500c2NINorth Ireland000019Arkansas#0390c2DADallas00001AEngland#0350c2ESE.Sussex00001FWestVirginia#0670c2NINicholas000019Colorado#0470c2GIGilpin000018Montana#0170c2CUCuster00001BSouthDakota#0850c2LYLyman000018Alabama#0630c2GRGreene000018Asia#0150c2IDIndonesia000018Missouri#2230c2WYWayne000019Texas#2950c2LIPLipscomb00001ELouisiana#0390c2EVEvangeline00001BGeorgia#1030c2EFEffingham000028WorldwithCountries#1810c2NZNew Zealand00001CMinnesota#1550c2TRTraverse00001DKentucky#1390c2LGLivingston00001DMichigan#1490c2SJSt. Joseph00001BFlorida#0670c2LYLafayette00001BMississippi#0490c2HIHinds00001FPennsylvania#0150c2BFBradford000021NewCaledonia#NC.NO.TO0c2TOTouho000027NewWorld#750c2STSao Tome and Principe000017Turkey#200c2DNDenizli000030USANorthEastRegion#110c2DCDistrict of Columbia00001BPuertoRico#930c2MRMaricao000029WorldwithCountries#230c2USUnited States00001DNewZealand#F90c2TKITaranaki00001EEgypt_346255#080c2DMDamietta00001FAzerbaijan#180c2FUF&uuml;zuli00001DSanMarino#070c2SMSan Marino00001DAsiaGeorgia#010c2ABAbkhazia00001ABelgium#010c2ANAntwerpen000016Mali#ML.KD0c2KDKidal000017Guinea#GN.ML0c2MLMali000018Tunisia#TN.BJ0c2BJBeja00001AIran#IR.KZ0c2KZKhuzestan000023Thailand#TH.KP0c2KPKamphaeng Phet000028Eritrea#ER.SK0c2SKSemenawi Keyih Bahri00001EEngland#0360c2WAWarwickshire00001BTennessee#1370c2PIPickett00001COklahoma#0890c2MTMcCurtain000016Iowa#1410c2OBO'Brien00001BWisconsin#0310c2DUDouglas00001BTexas#4770c2WASWashington000013Asia#0160c2IRIran00001AIndiana#0930c2LWLawrence000018NewYork#0650c2ONOneida00001ENorthCarolina#1330c2ONOnslow00001AVirginia#0350c2CLCarroll000017Georgia#2850c2TRTroup00001AKansas#0870c2JFJefferson00001FSouthCarolina#0590c2LULaurens00001BIllinois#1230c2MNMarshall00001CMissouri#0430c2CHChristian000022WorldwithCountries#1820c2PWPalau00001CNorthDakota#0570c2MEMercer000017Texas#1150c2DAWDawson000014Ohio#0770c2HUHuron00001CNewMexico#0490c2SFSanta Fe000019Nebraska#0470c2DSDawson000023NewCaledonia#NC.SU.MO0c2MOMoindou000026Manitoba#CA.MB.PM0c2PMPembina Region000019NewWorld#760c2SNSenegal00001FTurkey#210c2DYDiyarbak&#305;r000025WorldwithCountries#240c2GLGreenland00001CEgypt_346255#090c2FYFaiyum00002AAzerbaijan#190c2GDG&#601;d&#601;b&#601;y000019Ukraine#010c2CKCherkasy000020SanMarino#080c2MGMontegiardino00001BAsiaGeorgia#020c2AJAdjara000018Belgium#020c2HAHainaut00001BEurope2#EU.BE0c2BEBelgium00001BAlgeria#DZ.EO0c2EOEl Oued000019Jordan#JO.MD0c2MDMadaba000023CentralAmerica2#CE.JM0c2JMJamaica00001ETanzania#TZ.SH0c2SHShinyanga000034PapuaNewGuinea#PG.NC0c2NCNational Capital District00001EUzbekistan#UZ.AN0c2ANAndijon00001AHongKong#HK.NO0c2NONorth00001AMicronesia#FM.YA0c2YAYap000018Serbia#RS.PI0c2PIPirot000018Guinea#GN.MM0c2MMMamou00001ALibya#LY.MI0c2MIMisratah00001FBotswana#BW.NW0c2NWNorth West00001BVietnam#VN.NA0c2NANghe An00001CThailand#TH.LG0c2LGLampang000018Arkansas#0410c2DEDesha00001BWestVirginia#0690c2OHOhio000018Colorado#0490c2GRGrand000019Montana#0190c2DADaniels00001CSouthDakota#0870c2MCMcCook000016Alabama#0650c2HAHale00001FVirginia#0360c2CCCharles City00001AMissouri#2250c2WBWebster000015Utah#0010c2BVBeaver000019Texas#2970c2LIVLive Oak00001CLouisiana#0410c2FRFranklin000022Virginia#7600c2RIRichmond (City)000018Georgia#1050c2ELElbert00002DWorldwithCountries#1830c2PGPapua New Guinea00001BMinnesota#1570c2WBWabasha000018Kentucky#1410c2LOLogan00001AMichigan#1510c2SNSanilac000016Florida#0690c2LALake00001CMississippi#0510c2HOHolmes00001CPennsylvania#0170c2BUBucks000035NewfoundlandandLabrador#CA.NF.CE0c2CECentral Region00001BNewWorld#770c2SCSeycelles000016Turkey#220c2EDEdirne00001BPuertoRico#950c2MBMaunabo000020SaintLucia#010c2ARAnse-la-Raye000025WorldwithCountries#250c2ARArgentina00001CNewZealand#G10c2WKOWaikato00001DEgypt_346255#100c2GHGharbia000023Azerbaijan#200c2GAG&#601;nc&#601;00001AUkraine#020c2CHChernihiv00001DSanMarino#090c2SESerravalle00001AAsiaGeorgia#030c2GUGuria000016Belgium#030c2LILiege000022SouthAfrica#020c2NLKwaZulu-Natal000023Hungary#010c2BKB&aacute;cs-Kiskun00001ECambodia#KH.PY0c2PYPrey Veng000024CapeVerde#CV.RG0c2RGRibeira Grande00001DCameroon#CM.AD0c2ADAdamaoua00001EKazakhstan#KZ.ZM0c2ZMZhambyl00001DBurkinaFaso#BF.HO0c2HOHouet00001CSaudiArabia#SA.AS0c2ASAsir00002ECentralAfricanRepublic#CF.OP0c2OPOuham-Pende000020PapuaNewGuinea#PG.MN0c2MNManus00001ABurundi#BI.RT0c2RTRutana000026Sudan#SD.GD0c2GDAl Qadarif (Gedarif)000026Philippines#PH.DO0c2DODavao Oriental00001BRussia#RU.NG0c2NGNovgorod000019Libya#LY.MJ0c2MJAl Marj000018China2#CN.JL0c2JLJilin00001DVietnam#VN.NB0c2NBNinh Binh00001AThailand#TH.KR0c2KRKrabi00001BEngland#0380c2WIWiltshire000018Tennessee#1390c2POPolk000017France#0020c2ALAlsace00001BOklahoma#0910c2MLMcIntosh000016Iowa#1430c2OSOsceola000018Wisconsin#0330c2DNDunn000015Texas#4790c2WEBWebb000019Indiana#0950c2MAMadison00001ANewYork#0670c2OOOnondaga00001ENorthCarolina#1350c2OROrange00001CVirginia#0370c2CHCharlotte000018Georgia#2870c2TUTurner000017Kansas#0890c2JWJewell00001BSouthCarolina#0610c2LELee000018Illinois#1250c2MOMason000018Missouri#0450c2CKClark000022WorldwithCountries#1840c2WSSamoa00001CNorthDakota#0590c2MOMorton00001BTexas#1170c2DESDeaf Smith000023Virginia#5800c2CICovington (City)000016Ohio#0790c2JAJackson00001ANewMexico#0510c2SISierra000018Nebraska#0490c2DEDeuel000020USASouthWestRegion#490c2UTUtah00001ENewWorld#780c2SLSierra Leone000020Turkey#230c2EGElaz&#305;&#287;00001BSaintLucia#020c2DADauphin000023WorldwithCountries#260c2BOBolivia00001FNewZealand#G20c2WGNWellington00001AEgypt_346255#110c2GZGiza00001CAzerbaijan#210c2GRGoranboy00001BUkraine#030c2CVChernivtsi00001AGreenland#010c2NGAvannaa00001CAsiaGeorgia#040c2IMImereti000018Belgium#040c2LMLimburg00001FSouthAfrica#030c2FSFree State000018Hungary#020c2BABaranya000034NorthWestTerritories#CA.NT.MV0c2MVMackenzie Valley00002AFrenchGuiana#GL.SL.AY0c2AYAwala Yalimapo000028Mauritius#MU.RR0c2RRRiviere Du Rempart00001CGhana#GH.UW0c2UWUpper West00001CEurope2#EU.BG0c2BGBulgaria000022BurkinaFaso#BF.GZ0c2GZGanzourgou00001BZambia#ZM.NO0c2NONorthern00001FMongolia#MN.SB0c2SBSukhbaatar000022CoteDivoire#CI.WR0c2WRWorodougou00001BRussia#RU.MR0c2MRMordovia00001BMalawi#MW.CK0c2CKChikwawa000017Arkansas#0430c2DRDrew000020England#0390c2WOWorcestershire000020WestVirginia#0710c2PEPendleton00001AFrance#0030c2AQAquitaine00001BColorado#0510c2GUGunnison000018Montana#0210c2DWDawson00001FSouthDakota#0890c2MPMcPherson000017Alabama#0670c2HEHenry000014Asia#0190c2JPJapan000018Missouri#2270c2WOWorth000018Utah#0030c2BEBox Elder000016Texas#2990c2LANLlano000019Louisiana#0430c2GRGrant000019Georgia#1070c2EMEmanuel00002CWorldwithCountries#1850c2SBSolomon Islands00001AMinnesota#1590c2WDWadena000017Kentucky#1430c2LYLyon00001EMichigan#1530c2SHSchoolcraft000015Florida#0710c2LELee00001FMississippi#0530c2HUHumphreys00001DPennsylvania#0190c2BTButler00002BMadagascarRegions#MG.AV.AG0c2AGAnalamanga000019NewWorld#790c2SOSomalia000018Turkey#240c2ENErzincan000021PuertoRico#970c2MGMayag&uuml;ez00001CSaintLucia#030c2CACastries000022WorldwithCountries#270c2BRBrazil00001FNewZealand#G30c2WTCWest Coast00001EEgypt_346255#120c2ISIsmailia000026Azerbaijan#220c2GYG&ouml;y&ccedil;ay00001FUkraine#040c2DPDnipropetrovsk000017Greenland#020c2EGTunu00001CAsiaGeorgia#050c2KAKakheti00001BBelgium#050c2LULuxembourg000016Greece#010c2ATAttica000024Hungary#030c2BEB&eacute;k&eacute;s000025PolandCounties#PL.PM.SL0c2PSLSlupsk00001CBurkinaFaso#BF.ZR0c2ZRZiro00001FQatar#QA.GH0c2GHAl Ghuwariyah00001AEritrea#ER.AN0c2ANAnseba00001DUK7#UK.NI0c2NINorth Ireland000019Russia#RU.MS0c2MSMoscow00001ATunisia#TN.TO0c2TOTozeur000017Uganda#UG.GL0c2GLGulu000022FranceDepartment#FR.IS0c2ISIsere00001CVietnam#VN.ND0c2NDNam Dinh00001APalau#PW.AM0c2AMAimeliik00001EEngland#0400c2NYN. Yorkshire00001ATennessee#1410c2PUPutnam000019France#0040c2AUAuvergne000018Oklahoma#0930c2MAMajor000013Iowa#1450c2PAPage00001EWisconsin#0350c2ECEau Claire000018Texas#4810c2WHAWharton000018Indiana#0970c2MRMarion000019NewYork#0690c2OTOntario00001FNorthCarolina#1370c2PAPamlico000018Georgia#2890c2TWTwiggs000018Kansas#0910c2JOJohnson000021SouthCarolina#0630c2LXLexington000019Illinois#1270c2MCMassac000017Missouri#0470c2CYClay000022WorldwithCountries#1860c2TOTonga00001FNorthDakota#0610c2MUMountrail000016Texas#1190c2DELDelta000018Ohio#0810c2JEJefferson00001BNewMexico#0530c2SOSocorro000018Nebraska#0510c2DIDixon00002AMadagascarRegions#MG.MA.BE0c2BEBetsiboka00003APrinceEdwardIsland#CA.PE.NC0c2NCNorth Cape Coastal Drive000027Manitoba#CA.MB.PR0c2PRParkland Region00002BMadagascarRegions#MG.TM.AI0c2AIAtsinanana00001ENewWorld#800c2ZASouth Africa000017Turkey#250c2EMErzurum00001CSaintLucia#040c2CHChoiseul000021WorldwithCountries#280c2CLChile000016USA#LA0c2LALouisiana000024Egypt_346255#130c2KSKafr el-Sheikh000022Azerbaijan#230c2HAHac&#305;qabul000018Ukraine#050c2DTDonetsk00001ALatvia#010c2AIAizkraukle000018Greenland#030c2VGKitaa000021AsiaGeorgia#060c2KKKvemo Kartli000019Haiti#030c2NONord-Ouest000016Belgium#060c2NANamur00001EGreece#020c2CGCentral Greece000021SouthAfrica#050c2ECEastern Cape000033Hungary#040c2BOBorsod-Aba&uacute;j-Zempl&eacute;n000017Nigeria#NG.IM0c2IMImo00001BTanzania#TZ.RV0c2RVRuvuma00001BTanzania#TZ.TB0c2TBTabora00001CMacedonia#MK.ET0c2ETTetovo00001DSerbia#RS.PM0c2PMPomoravlje00001BBurundi#BI.BB0c2BBBubanza000020Tunisia#TN.SZ0c2SZSidi Bou Zid00001APalau#PW.SO0c2SOSonsorol000018Iran#IR.MK0c2MKMarkazi000018Palau#PW.AN0c2ANAngaur00001EPennsylvania#0210c2CACambria00001BArkansas#0450c2FAFaulkner00001FEngland#0410c2TWTyne And Wear000020WestVirginia#0730c2PLPleasants000019France#0050c2BRBretagne00001BColorado#0530c2HIHinsdale00001CMontana#0230c2DLDeer Lodge00001ESouthDakota#0910c2MAMarshall000019Alabama#0690c2HOHouston000019Asia#0210c2KZKazakhstan000019Missouri#2290c2WRWright000022Alaska#1300c2KGKetchikan Gateway000014Utah#0050c2CACache000017Texas#3010c2LOVLoving00001ALouisiana#0450c2IBIberia000017Georgia#1090c2EVEvans000023WorldwithCountries#1870c2TVTuvalu00001AMinnesota#1610c2WSWaseca00001CKentucky#1450c2MKMcCracken00001DMichigan#1550c2SWShiawassee000016Florida#0730c2LOLeon00001FMississippi#0550c2ISIssaquena000017NewWorld#810c2SDSudan00001ETurkey#260c2ESEski&#351;ehir000018PuertoRico#990c2MCMoca00001BSaintLucia#050c2DEDennery000024WorldwithCountries#290c2COColombia00001CEgypt_346255#140c2MTMatruh000024Azerbaijan#240c2IM&#304;mi&#351;li000020Ukraine#060c2IFIvano-Frankivsk00001CLatvia#020c2ALAl&#363;ksne000026AsiaGeorgia#070c2MMMtskheta-Mtianeti000020Belgium#070c2OVOost-Vlaanderen000021Greece#030c2CMCentral Macedonia00001CSouthAfrica#060c2GTGauteng000019Hungary#050c2BUBudapest000029PolandCounties#PL.PK.TM0c2PTMTarnobrzeg000018Nauru#NR.ME0c2MEMeneng00001BEurope2#EU.UA0c2UAUkraine00001AEurope2#EU.TK0c2TKTurkey00001BEurope2#EU.AT0c2ATAustria00001BAlgeria#DZ.ET0c2ETEl Tarf000021PapuaNewGuinea#PG.MR0c2MRMorobe000025Philippines#PH.DS0c2DSDavao del Sur00002FHungaryRegions#HU.SG0c2SGSouthern Great Plain000018England#0420c2MSMersey000018Tennessee#1430c2RHRhea00001BMaryland#0010c2ALAllegany00001AFrance#0060c2BUBourgogne00001BOklahoma#0950c2MRMarshall000018Iowa#1470c2PLPalo Alto00001CWisconsin#0370c2FLFlorence000018Texas#4830c2WHEWheeler00001CAsia#0220c2KPKorea (north)00001AIndiana#0990c2MSMarshall000018NewYork#0710c2OROrange000022NorthCarolina#1390c2PSPasquotank00001FVirginia#0410c2CSChesterfield000017Georgia#2910c2UNUnion000017Kansas#0930c2KEKearny000021SouthCarolina#0650c2MCMcCormick000019Illinois#1290c2MDMenard00001AMissouri#0490c2CIClinton000024WorldwithCountries#1880c2VUVanuatu00001CNorthDakota#0630c2NENelson000017Texas#1210c2DENDenton000013Ohio#0830c2KNKnox000018NewMexico#0550c2TATaos000018Nebraska#0530c2DODodge00001BNewWorld#820c2SZSwaziland000023USANorthEastRegion#180c2INIndiana00001ESaintLucia#060c2GIGros Islet000023WorldwithCountries#300c2ECEcuador00001BEgypt_346255#150c2MNMinya00002CAzerbaijan#250c2IS&#304;smay&#305;ll&#305;000018Ukraine#070c2KKKharkiv000015Latvia#030c2BLBalvi000036AsiaGeorgia#080c2RLRacha-Lechkhumi and Kvemo Svaneti000020Belgium#080c2WVWest-Vlaanderen000015Greece#040c2CRCrete00001FSouthAfrica#070c2MPMpumalanga000020Hungary#060c2CSCsongr&aacute;d000025PolandCounties#PL.MA.TM0c2MTMTarnow00001AMali#ML.KK0c2KKKoulikoro000022Uzbekistan#UZ.SU0c2SUSurxondaryo000024Uzbekistan#UZ.TK0c2TKTashkent City000018Panama#PA.CC0c2CCCocle000026PapuaNewGuinea#PG.NI0c2NINew Ireland00001ABurundi#BI.RY0c2RYRuyigi00001FMacedonia#MK.GB0c2GBGazi Baba00001BRussia#RU.OB0c2OBOrenburg000018Malawi#MW.DE0c2DEDedza00002CFranceDepartment#FR.IV0c2IVIlle et Vilaine00001EPennsylvania#0230c2CMCameron00001BArkansas#0470c2FRFranklin00001EEngland#0430c2GMG.Manchester000021WestVirginia#0750c2POPocahontas000017France#0070c2CECentre00001BColorado#0550c2HUHuerfano000018Montana#0250c2FAFallon00001BSouthDakota#0930c2MEMeade000019Alabama#0710c2JAJackson00001CAsia#0230c2KRKorea (south)000015Utah#0070c2CRCarbon000018Texas#3030c2LUBLubbock00001DLouisiana#0470c2IEIberville000018Georgia#1110c2FAFannin00002AWorldwithCountries#1890c2NCNew Caledonia00001EMinnesota#1630c2WAWashington00001BKentucky#1470c2MRMcCreary00001AMichigan#1570c2TUTuscola000016Florida#0750c2LVLevy00001EMississippi#0570c2ITItawamba00001ANewWorld#830c2TZTanzania000017Turkey#280c2GIGiresun00001BSaintLucia#070c2LBLaborie00002CWorldwithCountries#310c2FKFalkland Islands00001DEgypt_346255#160c2MFMonufia00002BAzerbaijan#260c2KAK&#601;lb&#601;c&#601;r000018Ukraine#080c2KSKherson000016Latvia#040c2BUBauska000024NorthEuropeanRegion#010c2DKDenmark000027AsiaGeorgia#090c2SJSamtskhe-Javakheti000019Haiti#060c2ARArtibonite00001FBelgium#090c2BWBrabant Wallon000029Greece#050c2EMEast Macedonia and Thrace000022SouthAfrica#080c2NCNorthern Cape00001CThailand#TH.LN0c2LNLamphun00001DThailand#TH.MD0c2MDMukdahan000024CapeVerde#CV.SC0c2SCSanta Catarina000023SaoTomeandPrincipe#ST.CU0c2CUCaue00001BKyrgyzstan#KG.CU0c2CUChuy00001CLesotho#LS.MF0c2MFMefeteng00001FZimbabwe#ZW.MA0c2MAManicaland000015Benin#BJ.ZO0c2ZOZou00001BIran#IR.MN0c2MNMazandaran00001CEngland#0440c2WMW.Midlands000019Tennessee#1450c2RORoane00001FMaryland#0030c2ANAnne Arundel000022France#0080c2CHChampagne-Ardenne000018Oklahoma#0970c2MYMayes000017Iowa#1490c2PYPlymouth00001FWisconsin#0390c2FDFond du Lac000018Texas#4850c2WICWichita000018Indiana#1010c2MTMartin000019NewYork#0730c2OLOrleans00001ENorthCarolina#1410c2PEPender000019Virginia#0430c2CKClarke000017Georgia#2930c2UPUpson000018Kansas#0950c2KMKingman00001ESouthCarolina#0670c2MAMarion000019Illinois#1310c2MRMercer000017Missouri#0510c2CLCole000024WorldwithCountries#1900c2BABahrain00001CNorthDakota#0650c2OLOliver000017Texas#1230c2DEWDewitt000013Ohio#0850c2LALake00001CNewMexico#0570c2TRTorrance00001ANebraska#0550c2DUDouglas00001DHungary#080c2FEFej&eacute;r000016NewWorld#840c2TGTogo00001ASaintLucia#080c2MIMicoud000029WorldwithCountries#320c2GFFrench Guiana000020Egypt_346255#170c2NVNew Valley000026Azerbaijan#270c2KUK&uuml;rd&#601;mir00001DUkraine#090c2KMKhmelnytskyi00001ALatvia#050c2CEC&#275;sis000024NorthEuropeanRegion#020c2EEEstonia000021AsiaGeorgia#100c2SKShida Kartli000015Haiti#070c2CECentre000016Greece#060c2EPEpirus00001CSouthAfrica#090c2LPLimpopo000024PolandCounties#PL.MZ.RM0c2MRMRadom000024SierraLeone#SL.NO.PL0c2PLPort Loko000017Palau#PW.AR0c2ARAirai00001EOman#OM.DA0c2DAAd Dakhiliyah000022CapeVerde#CV.SD0c2SDSao Domingos000029BurkinaFaso#BF.ZW0c2ZWZoundw&eacute;ogo000030DemocraticRepublicoftheCongo#CD.MN0c2MNManiema00001ASomalia#SO.NU0c2NUNugaal00001CNepal#NP.SA0c2SASagarmatha000027Philippines#PH.DV0c2DVDavao del Norte00001BRussia#RU.NN0c2NNNenetsia000018Libya#LY.MQ0c2MQMurzuq00001AChina2#CN.JS0c2JSJiangsu00001DPennsylvania#0250c2CRCarbon000019Arkansas#0490c2FUFulton000019England#0450c2RNRutland00001EWestVirginia#0770c2PRPreston000016France#0090c2COCorse00001AColorado#0570c2JAJackson000018Montana#0270c2FEFergus00001ESouthDakota#0950c2MLMellette00001BAlabama#0730c2JEJefferson00002BIndia#0010c2ANAndaman and Nicobar Islands000019Asia#0250c2KGKyrgyzstan000016Utah#0090c2DADaggett000015Texas#3050c2LYNLynn00001BLouisiana#0490c2JAJackson000019Georgia#1130c2FYFayette000021WorldwithCountries#1910c2IZIraq00001CMinnesota#1650c2WTWatonwan000019Kentucky#1490c2MLMcLean00001CMichigan#1590c2VBVan Buren000019Florida#0770c2LILiberty00001DMississippi#0590c2JAJackson000029NewCaledonia#NC.SU.NO0c2NONoum&eacute;a00002DMadagascarRegions#MG.TM.AN0c2ANAnalanjirofo000027Hungary#090c2GMGy&#337;r-Moson-Sopron000019NewWorld#850c2TNTunisia000024USANorthEastRegion#210c2KYKentucky000026DominicanRepublic#010c2AZ&Aacute;zua000024SaintLucia#090c2SOSoufri&egrave;re000022WorldwithCountries#330c2GYGuyana000021Egypt_346255#180c2NSNorth Sinai000025Azerbaijan#280c2LCLa&ccedil;&#305;n00001BUkraine#100c2KHKirovohrad00001ALatvia#060c2DADaugavpils000024NorthEuropeanRegion#030c2FIFinland00002BAsiaGeorgia#110c2SZSamegrelo-Zemo Svaneti00001EGreece#070c2IOIonian Islands00001FSouthAfrica#100c2NWNorth West000013Japan#10c2AIAichi000021Lesotho#LS.MH0c2MHMohale's Hoek000028Zimbabwe#ZW.MC0c2MCMashonaland Central000020Russia#RU.NO0c2NONorth Ossetia000019Tunisia#TN.TU0c2TUTunis00001DMalawi#MW.CR0c2CRChiradzulu00001FEngland#0460c2IWIsle of Wight00001DTennessee#1470c2RBRobertson00001CMaryland#0050c2BLBaltimore000025France#0100c2FRFranche-Comt&eacute;000019Oklahoma#0990c2MUMurray000019Iowa#1510c2PCPocahontas00001AWisconsin#0410c2FOForest00001ATexas#4870c2WIBWilbarger00001EIndia#0020c2APAndhra Pradesh00001AWashington#0010c2ADAdams000013Asia#0260c2LALaos000017Indiana#1030c2MIMiami000018NewYork#0750c2OSOswego000022NorthCarolina#1430c2PRPerquimans000018Virginia#0450c2CGCraig000018Georgia#2950c2WKWalker000016Kansas#0970c2KWKiowa000020SouthCarolina#0690c2MRMarlboro000019Illinois#1330c2MEMonroe000019Missouri#0530c2COCooper000023WorldwithCountries#1920c2IEIsrael00001DNorthDakota#0670c2PEPembina000018Texas#1250c2DICDickens000017Ohio#0870c2LWLawrence000019NewMexico#0590c2UNUnion000018Nebraska#0570c2DNDundy00002AYukonTerritory#CA.YT.ST0c2STSilver Trail000030MadagascarRegions#MG.TM.AO0c2AOAlaotra-Mangoro000023Hungary#100c2HBHajd&uacute;-Bihar000018NewWorld#860c2UGUganda000015Turkey#310c2HTHatay000023DominicanRepublic#020c2BRBahoruco00001ESaintLucia#100c2VFVieux Fort000024WorldwithCountries#340c2PYParaguay000020Afghanistan#010c2BDSBadakhshan00001FEgypt_346255#190c2PSPort Said000026Azerbaijan#290c2LNL&#601;nk&#601;ran000017Ukraine#110c2KRCrimea000022Latvia#070c2DGVDaugavpils (city)000024NorthEuropeanRegion#040c2ISIceland00001CAsiaGeorgia#120c2TBTbilisi000013Haiti#090c2NDNord00001CGreece#080c2NANorth Aegean000021SouthAfrica#110c2WCWestern Cape000013Japan#20c2AKAkita000023Pakistan#PK.NA0c2NANorthern Areas000020CapeVerde#CV.SF0c2SFSao Filipe00001ANigeria#NG.JI0c2JIJigawa000017Jordan#JO.MN0c2MNMaan000020Zambia#ZM.NW0c2NWNorth-Western000025CentralAmerica2#CE.LC0c2LCSt. Lucia000018Laos#LA.SL0c2SLSalavan00001DPennsylvania#0270c2CECentre00001AArkansas#0510c2GAGarland00001AEngland#0470c2WSW.Sussex00001DWestVirginia#0790c2PUPutnam00001EFrance#0110c2LLIle-de-France00001CColorado#0590c2JEJefferson00001AMontana#0290c2FLFlathead00001BSouthDakota#0970c2MIMiner000017Alabama#0750c2LALamar000021India#0030c2ARArunachal Pradesh000014Utah#0110c2DVDavis00001ATexas#3070c2MCUMcCulloch00001DLouisiana#0510c2JEJefferson000021Virginia#7700c2RORoanoke (City)000017Georgia#1150c2FLFloyd000023WorldwithCountries#1930c2JOJordan00001AMinnesota#1670c2WLWilkin00001CNevada#5100c2CACarson City00001AKentucky#1510c2MIMadison00001CMichigan#1610c2WAWashtenaw000019Florida#0790c2MSMadison00001CMississippi#0610c2JSJasper000016Hungary#110c2HEHeves000020NewWorld#870c2WAWestern Sahara000016Turkey#320c2ICMersin000021USANorthEastRegion#230c2MEMaine000023DominicanRepublic#030c2BHBarahona00001BSaintLucia#110c2PRPraslin000020WorldwithCountries#350c2PEPeru00001DAfghanistan#020c2BDGBadghis00001EEgypt_346255#200c2QAQalyubia00002DAzerbaijan#300c2LAL&#601;nk&#601;ran (City)000016Latvia#080c2DODobele000024NorthEuropeanRegion#050c2IEIreland000017Haiti#100c2NENord-Est00001BArmenia#010c2AGAragatsotn00001BGreece#090c2PEPeloponnese000014Japan#30c2AOAomori000021Thailand#TH.MH0c2MHMae Hong Son00001FCambodia#KH.RO0c2RORatanakiri00001CBurkinaFaso#BF.IO0c2IOIoba00001BPanama#PA.CH0c2CHChiriqui000031CentralAmerica2#CE.KN0c2KNSt. Kitts &amp; Nevis00001BAngola#AO.BG0c2BGBenguela000018Uganda#UG.YU0c2YUYumbe000025Zimbabwe#ZW.ME0c2MEMashonaland East00001AMalawi#MW.CT0c2CTChitipa00001DEngland#0480c2EYE.Yorkshire00001ETennessee#1490c2RURutherford000025France#0120c2LALanguedoc-Roussillon00001BOklahoma#1010c2MKMuskogee000013Iowa#1530c2POPolk000019Wisconsin#0430c2GRGrant000018Texas#4890c2WIAWillacy000015India#0040c2ASAssam00001BWashington#0030c2ASAsotin000017Asia#0280c2MYMalaysia000018Indiana#1050c2MOMonroe000018NewYork#0770c2OGOtsego00001ENorthCarolina#1450c2POPerson00001BVirginia#0470c2CUCulpeper000018Georgia#2970c2WNWalton000018Kansas#0990c2LBLabette000020SouthCarolina#0710c2NBNewberry00001DIllinois#1350c2MYMontgomery00001BMissouri#0550c2CFCrawford000023WorldwithCountries#1940c2KUKuwait00001CNorthDakota#0690c2PIPierce000017Texas#1270c2DIMDimmit00001DDenmark#0010c2AR&Aring;rhus000022Virginia#5900c2DADanville (City)000016Ohio#0890c2LILicking00001CNewMexico#0610c2VAValencia00001BNebraska#0590c2FIFillmore000026YukonTerritory#CA.YT.CA0c2CACampbell000029Hungary#120c2KEKom&aacute;rom-Esztergom000018NewWorld#880c2ZMZambia000017Turkey#330c2IPIsparta000024USANorthEastRegion#240c2MDMaryland000029DominicanRepublic#040c2DADajab&oacute;n000016UAE#010c2AZAbu Dhabi000024WorldwithCountries#360c2SRSuriname000013USA#KS0c2KSKansas00001DAfghanistan#030c2BGLBaghlan00001AEgypt_346255#210c2QEQena000019Azerbaijan#310c2LELerik00001CUkraine#130c2KVKiev Oblast000017Latvia#090c2GUGulbene000023NorthEuropeanRegion#060c2LVLatvia000014Haiti#110c2OUOuest000017Armenia#020c2ARArarat00001CGreece#100c2SASouth Aegean000026PolandCounties#PL.WN.OM0c2WOMOlsztyn000013Japan#40c2CHChiba00001BSriLanka#LK.JA0c2JAJaffna00001ELesotho#LS.MK0c2MKMokhotlong000016Nepal#NP.SE0c2SESeti000023PapuaNewGuinea#PG.NO0c2NONorthern00001CMongolia#MN.SL0c2SLSelenge00001BTanzania#TZ.AS0c2ASArusha00001EPennsylvania#0290c2CHChester000018Arkansas#0530c2GRGrant00001DEngland#0490c2SYS.Yorkshire00001EWestVirginia#0810c2RARaleigh000019France#0130c2LILimousin000018Colorado#0610c2KIKiowa00001AMontana#0310c2GAGallatin00001FSouthDakota#0990c2MNMinnehaha00001CAlabama#0770c2LULauderdale000015India#0050c2BIBihar000017Utah#0130c2DUDuchesne000019Texas#3090c2MCLMcLennan000023Louisiana#0530c2JDJefferson Davis000019Georgia#1170c2FOForsyth000024WorldwithCountries#1950c2LBLebanon00001AMinnesota#1690c2WIWinona00001ADenmark#0020c2BOBornholm00001BKentucky#1530c2MGMagoffin000018Michigan#1630c2WYWayne000019Florida#0810c2MNManatee00001FMississippi#0630c2JEJefferson000026MadagascarRegions#MG.MA.BO0c2BOBoeny00001ANewWorld#890c2ZWZimbabwe00001DTurkey#340c2IB&#304;stanbul000029USANorthEastRegion#250c2MAMassachusetts000012UAE#020c2AJAjman000023WorldwithCountries#370c2UYUruguay00001ECentralAmerica#010c2BHBelize00001DEgypt_346255#220c2RSRed Sea000020Azerbaijan#320c2MAMasall&#305;000018Ukraine#140c2LHLuhansk00001ELatvia#100c2JKJ&#275;kabpils000026NorthEuropeanRegion#070c2LTLithuania000012Haiti#120c2SDSud000018Armenia#030c2AVArmavir000018Greece#110c2THThessaly000013Japan#50c2EHEhime00001AChina2#CN.JX0c2JXJiangxi00001FEurope2#EU.CH0c2CHSwitzerland000016Angola#AO.BI0c2BIBie00001BBurundi#BI.CA0c2CACankuzo00001ERussia#RU.NS0c2NSNovosibirsk000020CoteDivoire#CI.FR0c2FRFromager000019Uganda#UG.IB0c2IBIbanda000017Libya#LY.NL0c2NLNalut00001DEngland#0500c2WYW.Yorkshire000019Tennessee#1510c2SCScott00001AMaryland#0090c2CACalvert000019France#0140c2LOLorraine000018Oklahoma#1030c2NONoble00001CIowa#1550c2PTPottawattamie000019Wisconsin#0450c2GEGreen00001BTexas#4910c2WIMWilliamson00001BWashington#0050c2BEBenton000017Asia#0300c2MNMongolia00001CIndiana#1070c2MNMontgomery000018NewYork#0790c2PUPutnam00001CNorthCarolina#1470c2PIPitt00001DVirginia#0490c2CMCumberland000016Georgia#2990c2WAWare000015Kansas#1010c2LELane00001ESouthCarolina#0730c2OCOconee000019Illinois#1370c2MGMorgan000017Missouri#0570c2DDDade000021WorldwithCountries#1960c2OMOman00001CNorthDakota#0710c2RARamsey000017Texas#1290c2DONDonley00001FDenmark#0030c2FRFrederiksberg000014Ohio#0910c2LOLogan00001BNebraska#0610c2FRFranklin000025Hungary#140c2NON&oacute;gr&aacute;d000018NewWorld#900c2GMGambia00001ATurkey#350c2IZ&#304;zmir000024USANorthEastRegion#260c2MIMichigan000021DominicanRepublic#060c2DUDuarte000012UAE#030c2DUDubai000025WorldwithCountries#380c2VEVenezuela00001AUSA#MA0c2MAMassachusetts000022CentralAmerica#020c2CSCosta Rica00001CAfghanistan#050c2BAMBamyan00001DEgypt_346255#230c2SQSharqia00002AAzerbaijan#330c2MIMing&#601;&ccedil;evir000015Ukraine#150c2LVLviv000017Latvia#110c2JLJelgava000023NorthEuropeanRegion#080c2NONorway000016Haiti#130c2SESud-Est00001CCzechRepublic#520c2PRPraha00001CArmenia#040c2GRGegharkunik00001BGreece#120c2WGWest Greece000013Japan#60c2FUFukui000018Thailand#TH.NA0c2NANan000023Madagascar#MG.FI0c2FIFianarantsoa00001BMacedonia#MK.ZA0c2ZAZajas000025Mississippi#0650c2JDJefferson Davis00001EPennsylvania#0310c2CIClarion000019Arkansas#0550c2GEGreene00001FWestVirginia#0830c2RNRandolph00002CFrance#0150c2MIMidi-Pyr&eacute;n&eacute;es00001DColorado#0630c2KCKit Carson00001AMontana#0330c2GRGarfield00001BSouthDakota#1010c2MOMoody00001AAlabama#0790c2LWLawrence00001CIndia#0070c2CAChhattisgarh000014Asia#0310c2NPNepal000014Utah#0150c2EMEmery000019Texas#3110c2MCMMcMullen00001DLouisiana#0550c2LALafayette00001AGeorgia#1190c2FRFranklin000022WorldwithCountries#1970c2QAQatar00001AMinnesota#1710c2WRWright00001FDenmark#0040c2FEFrederiksborg000019Kentucky#1550c2MHMarion00001AMichigan#1650c2WEWexford000018Florida#0830c2MRMarion000026NewCaledonia#NC.SU.PA0c2PAPa&iuml;ta000017NewWorld#910c2CGCongo000015UAE#040c2FUFujairah000023WorldwithCountries#390c2DZAlgeria000023CentralAmerica#030c2ESEl Salvador00001BAfghanistan#060c2FRAFarah00001BEgypt_346255#240c2SHSohag000021Azerbaijan#340c2NANaftalan city000019Ukraine#160c2MYMykolaiv00001FLatvia#120c2JELJelgava (city)00002BNorthEuropeanRegion#090c2UKUnited Kingdom000019Haiti#140c2GAGrand'Anse000017Armenia#050c2KTKotayk00001EGreece#130c2WMWest Macedonia000027PolandCounties#PL.ZP.SM0c2ZSMSzczecin000015Japan#70c2FKFukuoka00001BTunisia#TN.BZ0c2BZBizerte000021FranceDepartment#FR.JU0c2JUJura00002DFranceDepartment#FR.LA0c2LALoire Atlantique000025Thailand#TH.NB0c2NBNong Bua Lam Phu000022Europe2#EU.UK0c2UKUnited Kingdom000020Europe2#EU.VA0c2VAVatican City00001ECambodia#KH.SI0c2SISiem Reap000019Ghana#GH.WP0c2WPWestern000032DemocraticRepublicoftheCongo#CD.NK0c2NKNord-Kivu000019Namibia#NA.KA0c2KAKaras00001ANigeria#NG.KD0c2KDKaduna00001BComoros #KM.MO0c2MOMoheli000018Panama#PA.CL0c2CLColon00001ECoteDivoire#CI.ZA0c2ZAZanzan00001DZimbabwe#ZW.MI0c2MIMidlands000025Philippines#PH.ES0c2ESEastern Samar000024Burundi#BI.BM0c2BMBujumbura Mairie00001BNebraska#0630c2FOFrontier00001ETennessee#1530c2SQSequatchie00001BMaryland#0110c2CRCaroline000023France#0160c2NONord-Pas-de-Calais000019Oklahoma#1050c2NWNowata000018Iowa#1570c2PWPoweshiek00001EWisconsin#0470c2GLGreen Lake000017Texas#4930c2WILWilson00001BWashington#0070c2CHChelan000018Indiana#1090c2MGMorgan000018NewYork#0810c2QUQueens00001CNorthCarolina#1490c2PLPolk00001CVirginia#0510c2DIDickenson000018Georgia#3010c2WRWarren00001CKansas#1030c2LVLeavenworth000022SouthCarolina#0750c2OROrangeburg00001FVirginia#7750c2SASalem (City)00001BIllinois#1390c2MTMoultrie000019Missouri#0590c2DLDallas000029WorldwithCountries#1980c2SASaudi Arabia00001CNorthDakota#0730c2RNRansom000016Texas#1310c2DUVDuval000015Denmark#0050c2FYFyn000015Ohio#0930c2LRLorain000015Hungary#160c2PEPest00001BNewWorld#920c2MIMauritius000019Turkey#370c2KSKastamonu000024DominicanRepublic#080c2ESEspaillat00001BUAE#050c2RKRas Al Khaimah000022WorldwithCountries#400c2AOAngola000021CentralAmerica#040c2GTGuatemala00001CWorld#SA0c2SASouth America000018Andorra#020c2CACanillo00001CAfghanistan#070c2FYBFaryab000021Egypt_346255#250c2SSSouth Sinai00003DAzerbaijan#350c2NXNax&ccedil;&#305;van &#350;&#601;h&#601;r000017Ukraine#170c2ODOdessa000024Latvia#130c2JURJ&#363;rmala (city)000023NorthEuropeanRegion#100c2SESweden000015Haiti#150c2NINippes000015Armenia#060c2LOLori000024FrenchGuiana#GF.CY.IR0c2IRIracoubo000017Japan#80c2FSFukushima000019CapeVerde#CV.SL0c2SLSal000019Nigeria#NG.KE0c2KEKebbi000019Ghana#GH.EP0c2EPEastern000018Niger#NE.ZI0c2ZIZinder00001ATanzania#TZ.TN0c2TNTanga000029PapuaNewGuinea#PG.NS0c2NSNorth Solomons00001AAngola#AO.CB0c2CBCabinda000018Russia#RU.OL0c2OLOryal000018Uganda#UG.HO0c2HOHoima000017Malawi#MW.DO0c2DODowa000021Virginia#5950c2EMEmporia (City)000018Florida#0850c2MAMartin00001BMississippi#0670c2JOJones000021Pennsylvania#0330c2CLClearfield00001CArkansas#0570c2HEHempstead00001EWestVirginia#0850c2RIRitchie000020France#0170c2NRBasse-Normandie000017Colorado#0650c2LALake000019Montana#0350c2GCGlacier000020SouthDakota#1030c2PEPennington000015Alabama#0810c2LELee000017Asia#0330c2PKPakistan000017Utah#0170c2GAGarfield000018Texas#3130c2MADMadison00001BOceania#0010c2AUAustralia00001DLouisiana#0570c2LFLafourche000018Georgia#1210c2FUFulton000022WorldwithCountries#1990c2SYSyria000023Minnesota#1730c2YMYellow Medicine000027Denmark#0060c2KOK&oslash;benhavns Amt00001BKentucky#1570c2MSMarshall00002DSaskatchewan#CA.SK.SE0c2SESouth East Region000017Hungary#170c2SOSomogy00001DNewWorld#930c2AFAfghanistan000017Turkey#380c2KYKayseri000025Australia2#WA0c2WAWestern Australia000028DominicanRepublic#090c2INIndependencia000014UAE#060c2SHSharjah000021WorldwithCountries#410c2BJBenin000015USA#MD0c2MDMaryland000020CentralAmerica#050c2HOHonduras000017Andorra#030c2ENEncamp00001CAfghanistan#080c2GHAGhazni00001AEgypt_346255#260c2SZSuez000023Azerbaijan#360c2NENeft&ccedil;ala000018Ukraine#180c2PLPoltava00001DLatvia#140c2KRKr&#257;slava00001ABolivia#010c2HChuquisaca000017Armenia#070c2SHShirak00002CDistrictofColumbia#US.DC.NE0c2NENorth East000012Japan#90c2GIGifu000018Cameroon#CM.SU0c2SUSud000029FranceDepartment#FR.LC0c2LCLoir et Cher000019Syria#SY.LA0c2LALatakia00001ACambodia#KH.TA0c2TATakeo000020CapeVerde#CV.SM0c2SMSao Miguel000021Mauritius#MU.BL0c2BLBlack River00001FBurkinaFaso#BF.KA0c2KAKadiogo00001AAlgeria#DZ.GL0c2GLGuelma000021Angola#AO.CC0c2CCCuando Cubango00001DUzbekistan#UZ.BU0c2BUBuxoro00001DSerbia#RS.PZ0c2PZPrizrenski000017Russia#RU.OM0c2OMOmsk000018Libya#LY.MZ0c2MZMizdah000014Ohio#0950c2LULucas00001CFlorida#0860c2DAMiami-Dade000019Nebraska#0650c2FUFurnas00001ATennessee#1550c2SBSevier000014UK#0010c2ENEngland00001AMaryland#0130c2COCarroll000021France#0180c2PDPays de la Loire00001BOklahoma#1070c2OKOkfuskee000017Iowa#1590c2RGRinggold000018Wisconsin#0490c2IOIowa000018Texas#4950c2WINWinkler000015India#0100c2DEDelhi00001CWashington#0090c2CMClallam00001AAsia#0340c2PHPhilippines000018Indiana#1110c2NENewton00001CNewYork#0830c2RERensselaer000020NorthCarolina#1510c2RARandolph00001CVirginia#0530c2DNDinwiddie00001CGeorgia#3030c2WGWashington000018Kansas#1050c2LCLincoln00001FSouthCarolina#0770c2PIPickens000016Oceania#0020c2FJFiji000017Illinois#1410c2OGOgle00001AMissouri#0610c2DADaviess00002FWorldwithCountries#2000c2AEUnitedArabEmirates00001ENorthDakota#0750c2RVRenville000019Texas#1330c2EASEastland000022Denmark#0070c2KBK&oslash;benhavn00001FNewCaledonia#NC.NO.VO0c2VOVoh00002EHungary#180c2SZSzabolcs-Szatm&aacute;r-Bereg000019NewWorld#940c2AMArmenia00001FTurkey#390c2KLK&#305;rklareli000028DominicanRepublic#100c2ALLa Altagracia00001AUAE#070c2UQUmm Al Quwain000024WorldwithCountries#420c2BWBotswana000015USA#KY0c2KYKentucky000012USA#ME0c2MEMaine000021CentralAmerica#060c2NUNicaragua00001BAndorra#040c2LMLa Massana00001BAfghanistan#090c2GHOGhowr00001BEgypt_346255#270c2LXLuxor00001DAzerbaijan#370c2OGO&#287;uz000016Ukraine#190c2RVRivne00001CLatvia#150c2KUKuld&#299;ga00001ABolivia#020c2CCochabamba000017Armenia#080c2SUSyunik000026PolandCounties#PL.MZ.SM0c2MSMSiedlce000023FranceDepartment#FR.LD0c2LDLandes000021CapeVerde#CV.SN0c2SNSao Nicolau00001FCambodia#KH.BA0c2BABattambang00001CMacedonia#MK.ZE0c2ZEZelino000016Chad#TD.KA0c2KAKanem000022Guyana#GY.MA0c2MAMahaica-Berbice000030HungaryRegions#HU.ST0c2STSouthern Transdanubia000023Libya#LY.NQ0c2NQAn Nuqat al Khams000018Florida#0870c2MOMonroe00001CMississippi#0690c2KEKemper00001EPennsylvania#0350c2CNClinton00001DArkansas#0590c2HSHot Spring00001CWestVirginia#0870c2RORoane000015UK#0020c2SCScotland000019France#0190c2PIPicardie00001BColorado#0670c2LPLa Plata00001FMontana#0370c2GVGolden Valley00001DSouthDakota#1050c2PRPerkins00001BAlabama#0830c2LILimestone000013India#0110c2GOGoa000014Utah#0190c2GRGrand000017Texas#3150c2MARMarion00001AOceania#0030c2KIKiribati00001CLouisiana#0590c2LSLa Salle000018Georgia#1230c2GIGilmer000022WorldwithCountries#2010c2YMYemen00001DDenmark#0080c2NONordjylland000019Kentucky#1590c2MTMartin00002AMadagascarRegions#MG.AV.BN0c2BNBongolava000017Armenia#090c2TVTavush00001CNewWorld#950c2AZAzerbaijan000022Turkey#400c2KHK&#305;r&#351;ehir000033DominicanRepublic#110c2EPEl&iacute;as Pi&ntilde;a000028WorldwithCountries#430c2BFBurkina Faso000017Sweden#020c2KBlekinge00001ECentralAmerica#070c2PMPanama000017Andorra#050c2OROrdina00001DAfghanistan#100c2HELHelmand00001CEgypt_346255#280c2HWHelwan000029Azerbaijan#380c2QAQ&#601;b&#601;l&#601;00001CLatvia#160c2LELiep&#257;ja000017Bolivia#030c2BEl Beni00001ECameroon#CM.SW0c2SWSud-Ouest00001EVietnam#VN.NT0c2NTNinh Thuan000017Nauru#NR.NI0c2NINibok000022Thailand#TH.NF0c2NFNakhon Phanom000018Angola#AO.BO0c2BOBengo000019Nepal#NP.BA0c2BABagmati000017Russia#RU.PE0c2PEPerm00001EMongolia#MN.AR0c2ARArkhangai000021Mongolia#MN.BH0c2BHBayankhongor000017Laos#LA.AT0c2ATAttapu000016Denmark#0090c2RIRibe000016Ohio#0970c2MAMadison000017Nebraska#0670c2GAGage00001ATennessee#1570c2SHShelby00001AUK#0030c2NINorth Ireland000018Maryland#0150c2CECecil000021France#0200c2PCPoitou-Charentes00001BOklahoma#1090c2OLOklahoma000012Iowa#1610c2SASac000018Wisconsin#0510c2IRIron000015Texas#4970c2WISWise000017India#0120c2GUGujarat00001AWashington#0110c2CAClark000021Asia#0360c2RURussian Federation000017Indiana#1130c2NONoble00001ANewYork#0850c2RIRichmond000020NorthCarolina#1530c2RIRichmond000017Georgia#3050c2WYWayne000015Kansas#1070c2LNLinn000020SouthCarolina#0790c2RIRichland000022Oceania#0040c2MHMarshall Islands000019Illinois#1430c2PEPeoria000019Missouri#0630c2DKDeKalb000028WorldwithCountries#2020c2PRPuerto Rico00001ENorthDakota#0770c2RIRichland000016Texas#1350c2ECTEctor00001CArmenia#100c2VDVayots Dzor00002CCentralAmericawithCaribbeans#010c2BHBelize00002CHungary#200c2JNJ&aacute;sz-Nagykun-Szolnok00001CNewWorld#960c2BDBangladesh000017Turkey#410c2KCKocaeli000024DominicanRepublic#120c2ROLa Romana000023WorldwithCountries#440c2BIBurundi00001DSweden#030c2XG&auml;vleborg000032Andorra#060c2SJSant Juli&agrave; de L&ograve;ria00001BAfghanistan#110c2HERHerat000024Egypt_346255#290c2SO6th of October000017Azerbaijan#390c2QXQax000015Ukraine#210c2SMSumy000024Latvia#170c2LPXLiep&#257;ja (city)000016Bolivia#040c2LLa Paz000018China2#CN.MA0c2MAMacao00001ECapeVerde#CV.TF0c2TFTarrafal000016Mali#ML.KY0c2KYKayes00001BEurope2#EU.BY0c2BYBelarus00001BEurope2#EU.DE0c2DEGermany00001ALesotho#LS.MS0c2MSMaseru00001CLaos#LA.SV0c2SVSavannakhet000023Macedonia#MK.GP0c2GPGjorce Petrov000027Zimbabwe#ZW.MN0c2MNMatabeleland North00001ABurundi#BI.BR0c2BRBururi00001DRussia#RU.NZ0c2NZNizhegorod000016Laos#LA.BK0c2BKBokeo000024Denmark#0100c2RNRingkj&oslash;bing000018Kentucky#1610c2MOMason000018Florida#0890c2NANassau00001FMississippi#0710c2LALafayette00001FPennsylvania#0370c2COColumbia000019Arkansas#0610c2HWHoward00001EWestVirginia#0890c2SUSummers000012UK#0040c2WAWales000031France#0210c2PRProvence-Alpes-C&ocirc;te D'Azur00001AColorado#0690c2LRLarimer000019Montana#0390c2GNGranite00001CSouthDakota#1070c2POPotter000019Alabama#0850c2LOLowndes000017India#0130c2HAHaryana000013Utah#0210c2IRIron000017Texas#3170c2MATMartin00001COceania#0050c2FMMicronesia00001BLouisiana#0610c2LILincoln00001AGeorgia#1250c2GLGlascock00002BWorldwithCountries#2030c2KYCayman Islands000018Armenia#110c2ERYerevan000030CentralAmericawithCaribbeans#020c2CSCosta Rica000016Hungary#210c2TOTolna000018NewWorld#970c2BTBhutan000029USANorthEastRegion#330c2NHNew Hampshire000024WorldwithCountries#450c2CMCameroon000021Andorra#070c2ALAndorra la Vella000019Azerbaijan#400c2QZQazax000019Ukraine#220c2TPTernopil00001CLatvia#180c2LMLimba&#382;i000015Bolivia#050c2OOruro00002BFranceDepartment#FR.LG0c2LGLot et Garonne000025DenmarkRegion#DK.HS0c2HSHovenstaden00001FBurma#MM.RA0c2RARakhine State00001CBurundi#BI.CI0c2CICibitoke00001CLaos#LA.BL0c2BLBolikhamxai00001ADenmark#0110c2RORoskilde000021Virginia#6000c2FAFairfax (City)000017Ohio#0990c2MHMahoning000019Nebraska#0690c2GRGarden000019Tennessee#1590c2SMSmith00001AMaryland#0170c2CHCharles000022France#0220c2RHRh&ocirc;ne-Alpes000021SpainProvinces#0010c2ABAlbacete00001BOklahoma#1110c2OMOkmulgee000014Iowa#1630c2SCScott00001BWisconsin#0530c2JAJackson000015Texas#4990c2WODWood000020India#0140c2HPHimachal Pradesh00001DWashington#0130c2CLColumbia000018Asia#0380c2SGSingapore000016Indiana#1150c2OHOhio00001ANewYork#0870c2RORockland00001FNorthCarolina#1550c2RORobeson000018Virginia#0570c2ESEssex000019Georgia#3070c2WSWebster000016Kansas#1090c2LGLogan00001ESouthCarolina#0810c2SASaluda000017Oceania#0060c2NRNauru000018Illinois#1450c2PRPerry000017Missouri#0650c2DEDent00001DNorthDakota#0790c2RORolette000018Texas#1370c2EDWEdwards000026Denmark#0120c2SOS&oslash;nderjylland000018Kentucky#1630c2MDMeade00001AFlorida#0910c2OLOkaloosa00001BMississippi#0730c2LMLamar00001FPennsylvania#0390c2CWCrawford00001FArkansas#0630c2INIndependence00001DWestVirginia#0910c2TATaylor000020France#0230c2HNHaute-Normandie000025SpainProvinces#0020c2AL&Aacute;lava00001DColorado#0710c2LSLas Animas000016Montana#0410c2HIHill00001DSouthDakota#1090c2RORoberts000017Alabama#0870c2MAMacon000021India#0150c2JKJammu and Kashmir000018Asia#0390c2LKSri Lanka000013Utah#0230c2JUJuab000016Texas#3190c2MASMason00001DOceania#0070c2NZNew Zealand00001ELouisiana#0630c2LVLivingston000017Georgia#1270c2GYGlynn000024Germany#0010c2BABaden-Wuerttemberg000031CentralAmericawithCaribbeans#030c2ESEl Salvador000014Hungary#220c2VAVas000025EuropeRegion#010c2NRNorthern Region000018NewWorld#980c2BNBrunei00001CTurkey#430c2KUK&uuml;tahya000026USANorthEastRegion#340c2NJNew Jersey00003FDominicanRepublic#140c2MTMar&iacute;a Trinidad S&aacute;nchez000026WorldwithCountries#460c2CVCape Verde000015USA#MI0c2MIMichigan000016Sweden#050c2IGotland000023Andorra#080c2EEEscaldes-Engordany00001BAfghanistan#130c2KABKabul00001CAzerbaijan#410c2QOQobustan00001AUkraine#230c2VIVinnytsia000015Latvia#190c2LULudza000015World#AF0c2AFAfrica000015Bolivia#060c2NPando000020SolomonIsland#SB.MK0c2MKMakira000022Thailand#TH.MS0c2MSMaha Sarakham000019Togo#TG.PL0c2PLPlateaux00001BCameroon#CM.CE0c2CECentre00001ANamibia#NA.KH0c2KHKhomas000019Nigeria#NG.LA0c2LALagos000017Angola#AO.UI0c2UIUige00002ACentralAmerica2#CE.KY0c2KYCayman Islands00001FMongolia#MN.UB0c2UBUlan Bator00001DMacedonia#MK.GR0c2GRGradsko000022Denmark#0130c2STStorstr&oslash;m000015Ohio#1010c2MRMarion00001BNebraska#0710c2GFGarfield00001BTennessee#1610c2STStewart00001DMaryland#0190c2DODorchester000021SpainProvinces#0030c2AIAlicante000018Oklahoma#1130c2OSOsage000015Iowa#1650c2SHShelby00001DWisconsin#0550c2JEJefferson000017Texas#5010c2YOAYoakum000019India#0160c2JHJharkhand00001CWashington#0150c2COCowlitz000018Indiana#1170c2OROrange00001ENewYork#0890c2SLSt. Lawrence000022NorthCarolina#1570c2RCRockingham00001AVirginia#0590c2FIFairfax000019Georgia#3090c2WEWheeler000015Kansas#1110c2LYLyon000023SouthCarolina#0830c2SPSpartanburg000017Oceania#0080c2PWPalau000018Illinois#1470c2PIPiatt00001AMissouri#0670c2DODouglas000018Germany#0020c2BYBayern00001DNorthDakota#0810c2SASargent000016Texas#1390c2ELIEllis00003BPrinceEdwardIsland#CA.PE.PC0c2PCPoints East Coastal Drive00002FCentralAmericawithCaribbeans#040c2GTGuatemala000020Hungary#230c2VEVeszpr&eacute;m000025EuropeRegion#020c2SRSouthern Region000021NewWorld#990c2MMBurma (Myanmar)000017Turkey#440c2MLMalatya000027DominicanRepublic#150c2MCMonte Cristi000034WorldwithCountries#470c2CPCentral African Republic000016Sweden#060c2NHalland00001CAfghanistan#140c2KAPKapisa000018Azerbaijan#420c2QBQuba000016Ukraine#240c2VOVolyn000016Latvia#200c2MAMadona00001DBolivia#070c2PPotos&iacute;000024PolandCounties#PL.OP.OM0c2OOMOpole000026MarshallIsland#MH.MH.RL0c2RLRongelap000021SolomonIsland#SB.ML0c2MLMalaita00001BChina2#CN.LN0c2LNLiaoning00001CAlgeria#DZ.GR0c2GRGhardaia000018Liberia#LR.LF0c2LFLofa000025Sudan#SD.GZ0c2GZAl Jazirah (Gezira)000017Yemen#YE.AB0c2ABAbyan000023Burundi#BI.BU0c2BUBujumbura Rural000031Guinea#GN.NZ0c2NZNz&eacute;r&eacute;kor&eacute;000017Denmark#0140c2VEVejle00001AKentucky#1650c2MEMenifee00001CFlorida#0930c2OKOkeechobee000020Mississippi#0750c2LULauderdale000021Pennsylvania#0410c2CUCumberland000018Arkansas#0650c2IZIzard00001DWestVirginia#0930c2TUTucker000027SpainProvinces#0040c2AMAlmer&iacute;a00001AColorado#0730c2LILincoln00001BMontana#0430c2JEJefferson00001DSouthDakota#1110c2SASanborn000019Alabama#0890c2MDMadison000019India#0170c2KAKarnataka000019Asia#0410c2TJTajikistan00001EAlaska#1500c2KOKodiak Island000013Utah#0250c2KAKane00001ATexas#3210c2MAGMatagorda000022Oceania#0090c2PGPapua New Guinea00001BLouisiana#0650c2MAMadison000018Georgia#1290c2GOGordon000018Germany#0030c2BEBerlin00002ECentralAmericawithCaribbeans#050c2HOHonduras000015Hungary#240c2ZAZala000024EuropeRegion#030c2WRWestern Region000016Turkey#450c2MNManisa000024USANorthEastRegion#360c2NYNew York000025DominicanRepublic#160c2PNPedernales000020WorldwithCountries#480c2TDChad00001CSweden#070c2ZJ&auml;mtland000020Azerbaijan#430c2QDQubadl&#305;00001CUkraine#250c2ZKZakarpattia000014Latvia#210c2OGOgre00001ABolivia#080c2SSanta Cruz00001EThailand#TH.NK0c2NKNong Khai00001FCambodia#KH.SR0c2SRSvay Rieng00001AEurope2#EU.CS0c2CSSerbia000020Macedonia#MK.ZK0c2ZKZelenikovo000017Yemen#YE.SD0c2SDSadah00001DSamoa #WS.SA0c2SASatupaitea00001EMacedonia#MK.GT0c2GTGostivar00001ESerbia#RS.SC0c2SCNorth Backa00001ENorthDakota#0830c2SHSheridan000018Texas#1410c2ELPEl Paso000024Denmark#0150c2VSVestsj&aelig;lland000015Ohio#1030c2MEMedina000019Nebraska#0730c2GOGosper00001AMinnesota#0010c2AIAitkin00001FConnecticut#0010c2FAFairfield00001CTennessee#1630c2SLSullivan00001CMaryland#0210c2FRFrederick000021SpainProvinces#0050c2ASAsturias000019Oklahoma#1150c2OTOttawa000014Iowa#1670c2SISioux00001AWisconsin#0570c2JUJuneau000016Texas#5030c2YOUYoung000016India#0180c2KEKerala00001CWashington#0170c2DODouglas000017Asia#0420c2THThailand000016Indiana#1190c2OWOwen00001ANewYork#0910c2SASaratoga00001DNorthCarolina#1590c2RWRowan00001BVirginia#0610c2FUFauquier000017Georgia#3110c2WTWhite00001AKansas#1130c2MPMcpherson00001ESouthCarolina#0850c2SUSumter000017Oceania#0100c2WSSamoa000017Illinois#1490c2PKPike00001AMissouri#0690c2DUDunklin00001DGermany#0040c2BRBrandenburg000027MadagascarRegions#MG.TL.ME0c2MEMenabe00002FMadagascarRegions#MG.AV.VA0c2VAVakinankaratra00002FCentralAmericawithCaribbeans#060c2NUNicaragua000024EuropeRegion#040c2EREastern Region000022Turkey#460c2KMKahramanmara&#351;000023WorldwithCountries#490c2KMComoros000022Sweden#080c2FJ&ouml;nk&ouml;ping000019Azerbaijan#440c2QRQusar00001BUkraine#260c2ZPZaporizhia00001BLatvia#220c2PRPrei&#316;i000016Bolivia#090c2TTarija000022SierraLeone#SL.SO.MO0c2MOMoyamba000027FrenchGuiana#GF.SL.GS0c2GSGrand Santi000033PolandCounties#PL.LD.PM0c2LPMPiotrkow Trybunalski000017Samoa #WS.AA0c2AAAana00002ABrazilRegion#BR.SE0c2SESouth East Region00001ATuvalu#TV.NA0c2NANanumea000018Nigeria#NG.KN0c2KNKano000018Mongolia#MN.TO0c2TOTov000027Zimbabwe#ZW.MS0c2MSMatabeleland South000020Serbia#RS.SD0c2SDCentral Banat000019Serbia#RS.RN0c2RNRasina000016Yemen#YE.AD0c2ADAdan000019Uganda#UG.IN0c2INIganga000018Germany#0050c2BMBremen000018Denmark#0160c2VIViborg000019Kentucky#1670c2MCMercer000018Florida#0950c2OROrange00001EMississippi#0770c2LWLawrence00001EPennsylvania#0430c2DADauphin00001AArkansas#0670c2JAJackson00001CWestVirginia#0950c2TYTyler00001ESpainProvinces#0060c2AVAvila000018Colorado#0750c2LOLogan00001EMontana#0450c2JBJudith Basin00001DSouthDakota#1130c2SHShannon000019Alabama#0910c2MRMarengo00001BIndia#0190c2LALakshadweep000016Utah#0270c2MIMillard000019Texas#3230c2MAVMaverick000021Oceania#0110c2SBSolomon Islands00001DLouisiana#0670c2MOMorehouse000017Georgia#1310c2GRGrady00002CCentralAmericawithCaribbeans#070c2PMPanama000024EuropeRegion#050c2CRCentral Region000027DominicanRepublic#180c2PPPuerto Plata000029WorldwithCountries#500c2CICote d Ivoire00001BUSA#NC0c2NCNorth Carolina000015Sweden#090c2HKalmar00001CAfghanistan#170c2LOWLowgar00001FAzerbaijan#450c2STSaatl&#305;000019Ukraine#270c2ZTZhytomyr00001CLatvia#230c2RER&#275;zekne000021SierraLeone#SL.EA.KE0c2KEKenema000025FranceDepartment#FR.MB0c2MBMorbihan000020Cambodia#KH.ST0c2STStung Treng000021CapeVerde#CV.SV0c2SVSao Vicente00001CSriLanka#LK.KE0c2KEKegalle000018Nigeria#NG.KO0c2KOKogi00001BEurope2#EU.DK0c2DKDenmark000022BurkinaFaso#BF.KJ0c2KJKomondjari00001FMacedonia#MK.GV0c2GVGevgelija000017Nepal#NP.BH0c2BHBheri000020Mongolia#MN.BO0c2BOBayan Olgii000017Guinea#GN.PI0c2PIPita000019Germany#0060c2HAHamburg00001BNorthDakota#0850c2SISioux000016Texas#1430c2ERAErath000014Ohio#1050c2MIMeigs000018Nebraska#0750c2GTGrant000019Minnesota#0030c2ANAnoka00001EConnecticut#0030c2HAHartford00001ATennessee#1650c2SUSumner00001AMaryland#0230c2GAGarrett000020SpainProvinces#0070c2BABadajoz000019Oklahoma#1170c2PAPawnee000014Iowa#1690c2STStory00001BWisconsin#0590c2KEKenosha000017Texas#5050c2ZAPZapata00001EIndia#0200c2MPMadhya Pradesh00001AWashington#0190c2FEFerry00001BAsia#0440c2TMTurkmenistan000017Indiana#1210c2PAParke00001DNewYork#0930c2SCSchenectady000022NorthCarolina#1610c2RURutherford000018Virginia#0630c2FLFloyd00001BGeorgia#3130c2WHWhitfield000017Kansas#1150c2MNMarion00001DSouthCarolina#0870c2UNUnion000017Oceania#0120c2TOTonga000017Illinois#1510c2POPope00001BMissouri#0710c2FRFranklin00002ACentralAmericawithCaribbeans#080c2CUCuba00001ATurkey#480c2MGMu&#287;la000020USANorthEastRegion#390c2OHOhio000022DominicanRepublic#190c2SCSalcedo00003CWorldwithCountries#510c2CDDemocratic Republic of the Congo000016USA#MN0c2MNMinnesota000019USA#ND0c2NDNorth Dakota000017Sweden#100c2WDalarnas00001FAfghanistan#180c2NANNangarhar00001DAzerbaijan#460c2SBSabirabad000024Latvia#240c2REZR&#275;zekne (city)000024Paraguay#010c2AAAlto Paran&aacute;000023PolandCounties#PL.WP.PI0c2WPIPila00001ALaos#LA.CH0c2CHChampasak000021Thailand#TH.NN0c2NNNakhon Nayok00002AHungaryRegions#HU.CH0c2CHCentral Hungary000023Qatar#QA.JB0c2JBJariyan Al Batnah000018Germany#0070c2HEHessen00001BKentucky#1690c2MFMetcalfe000019Florida#0970c2OSOsceola00001BMississippi#0790c2LKLeake00001FPennsylvania#0450c2DLDelaware00001CArkansas#0690c2JEJefferson00001DWestVirginia#0970c2UPUpshur000021SpainProvinces#0080c2BLBaleares000017Colorado#0770c2MEMesa000016Montana#0470c2LALake00001BSouthDakota#1150c2SPSpink000018Alabama#0930c2MIMarion00001BIndia#0210c2MAMaharashtra000015Utah#0290c2MOMorgan000017Texas#3250c2MEDMedina000018Oceania#0130c2TVTuvalu000020Louisiana#0690c2NANatchitoches000018Georgia#1330c2GEGreene00002DCentralAmericawithCaribbeans#090c2BSBahamas000018Turkey#490c2MSMu&#351;000028DominicanRepublic#200c2SMSaman&aacute;000024WorldwithCountries#520c2DJDjibouti000015USA#MO0c2MOMissouri000015USA#NE0c2NENebraska00001CAfghanistan#190c2NIMNimruz000022Azerbaijan#470c2SK&#350;&#601;ki000019Latvia#250c2RIR&#299;ga000019Paraguay#020c2AMAmambay00001BEastTimor#TL.AL0c2ALAileu00001EEastTimor#TL.BB0c2BBBobonaro00001FThailand#TH.NO0c2NONonthaburi00001FSriLanka#LK.KG0c2KGKurunegala00001EKyrgyzstan#KG.GB0c2GBBishkek000029BurkinaFaso#BF.KL0c2KLKoulp&eacute;logo00001ERwanda#RW.KV0c2KVKigali City000019Yemen#YE.SH0c2SHShabwah00001FAngola#AO.CN0c2CNCuanza Norte00001DZimbabwe#ZW.MV0c2MVMasvingo000028Germany#0080c2MEMecklenburg-Vorpommern00001BNorthDakota#0870c2SLSlope000016Texas#1450c2FALFalls000015Ohio#1070c2MCMercer00001ANebraska#0770c2GEGreeley00001AMinnesota#0050c2BEBecker000020Connecticut#0050c2LILitchfield00001ATennessee#1670c2TITipton00001AMaryland#0250c2HAHarford000022SpainProvinces#0090c2BRBarcelona000018Oklahoma#1190c2PYPayne000013Iowa#1710c2TATama00001CWisconsin#0610c2KWKewaunee000017Texas#5070c2ZAVZavala000017India#0220c2MNManipur00001DWashington#0210c2FRFranklin000019Asia#0460c2UZUzbekistan000017Indiana#1230c2PEPerry00001BNewYork#0950c2SHSchoharie00001FNorthCarolina#1630c2SASampson00001BVirginia#0650c2FVFluvanna000018Georgia#3150c2WCWilcox000019Kansas#1170c2MSMarshall000024SouthCarolina#0890c2WIWilliamsburg000019Oceania#0140c2VUVanuatu00001AIllinois#1530c2PUPulaski00001CMissouri#0730c2GAGasconade000034CentralAmericawithCaribbeans#100c2KYCayman Islands00001DTurkey#500c2NVNev&#351;ehir000038DominicanRepublic#210c2SZS&aacute;nchez Ram&iacute;rez000021WorldwithCountries#530c2EGEgypt000018Sweden#120c2GKronoberg000029Azerbaijan#480c2SA&#350;&#601;ki (City)000021Latvia#260c2RIXR&#299;ga (city)000025MarshallIsland#MH.MH.RR0c2RRRongrik00001CEastTimor#TL.AM0c2AMAmbeno00001CEastTimor#TL.BC0c2BCBaucau000020FranceDepartment#FR.LO0c2LOLot000022Thailand#TH.NP0c2NPNakhon Pathom00001CKuwait#KW.AH0c2AHAl Ahmadi000024BurkinaFaso#BF.KM0c2KMKomo&eacute;000025Zimbabwe#ZW.MW0c2MWMashonaland West000028CentralAfricanRepublic#CF.AC0c2ACOuham00001FGermany#0090c2NINiedersachsen000019Kentucky#1710c2MNMonroe00001CFlorida#0990c2PBPalm beach000019Mississippi#0810c2LELee00001APennsylvania#0470c2ELElk00001AArkansas#0710c2JOJohnson00001CWestVirginia#0990c2WAWayne000020SpainProvinces#0100c2BIBizkaia00001AColorado#0790c2MIMineral000021Montana#0490c2LCLewis and Clark00001DSouthDakota#1170c2STStanley00001AAlabama#0950c2MSMarshall000019India#0230c2MEMeghalaya000016Asia#0470c2VNVietnam000014Utah#0310c2PIPiute000017Texas#3270c2MENMenard00001FOceania#0150c2NCNew Caledonia00001BLouisiana#0710c2OROrleans000022Virginia#7900c2SNStaunton (City)00001AGeorgia#1350c2GWGwinnett00002DCentralAmericawithCaribbeans#110c2JMJamaica000028USANorthEastRegion#420c2PAPennsylvania00002DWorldwithCountries#540c2GQEquatorial Guinea00001AAzerbaijan#490c2SLSalyan000016Latvia#270c2SASaldus000021Paraguay#040c2CGCaaguaz&uacute;00002ANovaScotia#CA.NS.ET0c2ETEvangeline Trail00001CEastTimor#TL.AN0c2ANAinaro00001BUganda#UG.IS0c2ISIsingiro000018Uganda#UG.JI0c2JIJinja000024CaymanIslands#KY.NS0c2NSNorth Side00001BEthiopia#ET.OR0c2OROromia000020CapeVerde#CV.SZ0c2SZSanta Cruz00001CTuvalu#TV.NF0c2NFNukufetau000028Eritrea#ER.DK0c2DKDebubawi Keyih Bahri000016Mali#ML.MO0c2MOMopti00001BPanama#PA.VR0c2VRVeraguas00001BEurope2#EU.EE0c2EEEstonia00001AEurope2#EU.CY0c2CYCyprus000030BurkinaFaso#BF.KN0c2KNK&eacute;n&eacute;dougou000030CentralAfricanRepublic#CF.SE0c2SESangha-Mbaere000014Chad#TD.LC0c2LCLac000018Serbia#RS.RS0c2RSRaska000025Germany#0100c2NONordrhein-Westfalen00001BNorthDakota#0890c2STStark000017Texas#1470c2FANFannin000026Virginia#6100c2FCFalls Church (City)000014Ohio#1090c2MMMiami000017Nebraska#0790c2HAHall00001CMinnesota#0070c2BLBeltrami00001FConnecticut#0070c2MIMiddlesex000019Michigan#0010c2ALAlcona00001DTennessee#1690c2TRTrousdale000019Maryland#0270c2HOHoward00001FSpainProvinces#0110c2BUBurgos00001COklahoma#1210c2PIPittsburg000015Iowa#1730c2TYTaylor00001DWisconsin#0630c2LCLa Crosse000017India#0240c2MIMizoram00001DWashington#0230c2GFGarfield000016Indiana#1250c2PIPike00001ANewYork#0970c2SUSchuyler000020NorthCarolina#1650c2SCScotland00001BVirginia#0670c2FKFranklin000018Georgia#3170c2WLWilkes000016Kansas#1190c2MEMeade00001CSouthCarolina#0910c2YOYork000019Illinois#1550c2PTPutnam000019Missouri#0750c2GNGentry00002BCentralAmericawithCaribbeans#120c2HTHaiti000019Estonia#010c2HAHarjumaa000014Turkey#520c2OROrdu000023DominicanRepublic#230c2JUSan Juan000023WorldwithCountries#550c2EREritrea00001AUSA#NH0c2NHNew Hampshire00001ASweden#140c2BDNorrbotten000024Azerbaijan#500c2SI&#350;amax&#305;000015Latvia#280c2TATalsi000020Paraguay#050c2CZCaazap&aacute;000025PolandCounties#PL.WP.PM0c2WPMPoznan00002BMarshallIsland#MH.MH.AI0c2AIAilinglapalap00001EVietnam#VN.QB0c2QBQuang Binh000026Thailand#TH.NR0c2NRNakhon Ratchasima00001BPakistan#PK.PB0c2PBPunjab00001CTuvalu#TV.NG0c2NGNanumanga00001BNigeria#NG.KT0c2KTKatsina000022Europe2#EU.CZ0c2CZCzech Republic000025BurkinaFaso#BF.LE0c2LEL&eacute;raba000022Burma#MM.SA0c2SASagaing Division00001DMacedonia#MK.ZR0c2ZRZrnovci000019Panama#PA.DR0c2DRDarien000017Yemen#YE.TA0c2TATaizz000021Germany#0110c2RHRheinland-Pfalz00001DKentucky#1730c2MYMontgomery000017Florida#1010c2PAPasco00001DMississippi#0830c2LFLeflore00001BPennsylvania#0490c2ERErie00001CArkansas#0730c2LALafayette00001EWestVirginia#1010c2WEWebster000027SpainProvinces#0120c2CAC&aacute;ceres000019Colorado#0810c2MOMoffat000019Montana#0510c2LBLiberty00001BSouthDakota#1190c2SUSully000018Alabama#0970c2MOMobile000018India#0250c2NANagaland000015Asia#0490c2TWTaiwan000013Utah#0330c2RIRich000018Texas#3290c2MIDMidland00001CLouisiana#0730c2OUOuachita00001BGeorgia#1370c2HAHabersham000038CentralAmericawithCaribbeans#130c2DODominican Republic000018Estonia#020c2HIHiiumaa000014Turkey#530c2RIRize000028USANorthEastRegion#440c2RIRhode Island000036DominicanRepublic#240c2PMSan Pedro de Macor&iacute;s000024WorldwithCountries#560c2ETEthiopia000018USA#MS0c2MSMississippi00001ASweden#150c2T&Ouml;rebro00001EAfghanistan#230c2KANKandahar000024Azerbaijan#510c2SM&#350;&#601;mkir000016Latvia#290c2TUTukums000019Paraguay#060c2CECentral000024MarshallIsland#MH.MH.TA0c2TATaongi00001CRussia#RU.PR0c2PRPrimorsky00001BMongolia#MN.BU0c2BUBulgan000020Mongolia#MN.DA0c2DADarkhan Uul000019Uganda#UG.KA0c2KAKabale00001FBotswana#BW.SE0c2SESouth East000022FranceDepartment#FR.LR0c2LRLoire000023FranceDepartment#FR.MH0c2MHManche000021Thailand#TH.NS0c2NSNakhon Sawan000028Pakistan#PK.NW0c2NWNorth West Frontier000021BurkinaFaso#BF.KP0c2KPKompienga00003ATajikistan#TJ.RR0c2RRRegions of Republican Subordination00001AYemen#YE.BA0c2BAAl Bayda000019Missouri#0770c2GEGreene00001AGermany#0120c2SASaarland00001CNorthDakota#0910c2SESteele000018Texas#1490c2FAYFayette000015Ohio#1110c2MOMonroe00001BNebraska#0810c2HMHamilton00001AMinnesota#0090c2BNBenton00001FConnecticut#0090c2NHNew Haven000018Michigan#0030c2AGAlger00001ATennessee#1710c2UIUnicoi000017Maryland#0290c2KEKent000025SpainProvinces#0130c2CDC&aacute;diz00001BOklahoma#1230c2POPontotoc000014Iowa#1750c2UNUnion00001DWisconsin#0650c2LALafayette000016India#0260c2OROrissa00001AWashington#0250c2GAGrant000018Asia#0500c2HKHong Kong000018Indiana#1270c2POPorter000018NewYork#0990c2SESeneca00001ENorthCarolina#1670c2STStanly00001CVirginia#0690c2FDFrederick00001BGeorgia#3190c2WIWilkinson000016Kansas#1210c2MIMiami00001BIllinois#1570c2RARandolph000035NewfoundlandandLabrador#CA.NF.WS0c2WSWestern Region000031CentralAmericawithCaribbeans#140c2PRPuerto Rico00001CEstonia#030c2IVIda-Virumaa000017Turkey#540c2SKSakarya000023DominicanRepublic#250c2STSantiago000021WorldwithCountries#570c2GAGabon000014USA#MT0c2MTMontana000017USA#NJ0c2NJNew Jersey000025Sweden#160c2E&Ouml;sterg&ouml;tland00001CAfghanistan#240c2KDZKondoz000019Azerbaijan#520c2SXSamux000015Latvia#300c2VKValka000023Paraguay#070c2CNConcepci&oacute;n000023SierraLeone#SL.EA.KL0c2KLKailahun000018Russia#RU.PS0c2PSPskov00001BLibya#LY.QB0c2QBAl Qubbah000028Thailand#TH.NT0c2NTNakhon Si Thammarat00001CTuvalu#TV.NI0c2NINiulakita000020SriLanka#LK.KL0c2KLKilinochchi00001BCapeVerde#CV.BR0c2BRBrava00001DAngola#AO.CS0c2CSCuanza Sul000016Georgia#1390c2HLHall000019Germany#0130c2SCSachsen000019Kentucky#1750c2MAMorgan00001AFlorida#1030c2PLPinellas00001DMississippi#0850c2LNLincoln00001EPennsylvania#0510c2FAFayette00001BArkansas#0750c2LWLawrence00001DWestVirginia#1030c2WTWetzel000022SpainProvinces#0140c2CNCantabria00001CColorado#0830c2MNMontezuma000019Montana#0530c2LILincoln00001ASouthDakota#1210c2TOTodd000018Alabama#0990c2MNMonroe000014Asia#0510c2MOMacau000018Utah#0350c2SLSalt Lake000016Texas#3310c2MILMilam00001FLouisiana#0750c2PLPlaquemines000035NewfoundlandandLabrador#CA.NF.ES0c2ESEastern Region000038CentralAmericawithCaribbeans#150c2KNSt.Kitts and Nevis00001EEstonia#040c2JRJ&auml;rvamaa000016Turkey#550c2SSSamsun000034DominicanRepublic#260c2SRSantiago Rodr&iacute;guez000021WorldwithCountries#580c2GHGhana000025Azerbaijan#530c2SYSiy&#601;z&#601;n000018Latvia#310c2VMValmiera00001CParaguay#080c2CRCordillera000017Serbia#RS.SM0c2SMSrem000017Yemen#YE.AM0c2AMAmran000023FranceDepartment#FR.LT0c2LTLoiret000019Nigeria#NG.KW0c2KWKwara000022BurkinaFaso#BF.KR0c2KRKouritenga00001BLiberia#LR.MG0c2MGMargibi00001BBhutan#BT.LH0c2LHLhuntshi000016Yemen#YE.SN0c2SNSana000019Sudan#SD.JG0c2JGJungoli00001BIllinois#1590c2RIRichland000019Missouri#0790c2GRGrundy000020Germany#0140c2SHSachsen-Anhalt00001ENorthDakota#0930c2SUStutsman000017Texas#1510c2FISFisher000019Ohio#1130c2MGMontgomery000019Nebraska#0830c2HRHarlan00001DMinnesota#0110c2BSBig Stone000020Connecticut#0110c2NLNew London00001AMichigan#0050c2AEAllegan000019Tennessee#1730c2UNUnion00001DMaryland#0310c2MOMontgomery000029SpainProvinces#0150c2CSCastell&oacute;n00001FOklahoma#1250c2PWPottawatomie000018Iowa#1770c2VBVan Buren00001CWisconsin#0670c2LNLanglade000016India#0280c2PUPunjab000021Washington#0270c2GRGrays Harbor000017Indiana#1290c2PSPosey000019NewYork#1010c2STSteuben00001ENorthCarolina#1690c2SOStokes000018Virginia#0710c2GIGiles000017Georgia#3210c2WOWorth000018Africa#0010c2DZAlgeria000019Kansas#1230c2MCMitchell00002DSaskatchewan#CA.SK.SW0c2SWSouth West Region00002DCentralAmericawithCaribbeans#160c2AGAntigua000021Estonia#050c2JNJ&otilde;gevamaa000015Romania#010c2ABAlba000023DominicanRepublic#270c2VAValverde000022WorldwithCountries#590c2GNGuinea000020Sweden#180c2DS&ouml;dermanland00001CAfghanistan#260c2TAKTakhar000021Azerbaijan#540c2SQSumqay&#305;t000019Latvia#320c2VEVentspils000013World#AS0c2ASAsia00001FSierraLeone#SL.EA.KN0c2KNKono00002CDistrictofColumbia#US.DC.NW0c2NWNorth West000028PolandCounties#PL.MZ.CI0c2MCICieckanow00001ESerbia#RS.SN0c2SNNorth Banat00001BMongolia#MN.DD0c2DDDornod000026CoteDivoire#CI.HT0c2HTHaut-Sassandra00001EUganda#UG.KD0c2KDKaberamaido000025BrazilRegion#BR.SO0c2SOSouth Region00001ANamibia#NA.KU0c2KUKunene00001DBurkinaFaso#BF.KS0c2KSKossi000019Angola#AO.CU0c2CUCunene000019Georgia#1410c2HNHancock000024Germany#0150c2SSSchleswig-Holstein00001DKentucky#1770c2MBMuhlenberg000016Florida#1050c2POPolk00001DMississippi#0870c2LDLowndes00001DPennsylvania#0530c2FOForest000016Arkansas#0770c2LELee00001BWestVirginia#1050c2WIWirt00001ESpainProvinces#0160c2CECeuta00001BColorado#0850c2MTMontrose000018Montana#0550c2MCMcCone00001BSouthDakota#1230c2TRTripp00001CAlabama#1010c2MTMontgomery000019India#0290c2RARajasthan000017Africa#0020c2AOAngola000017Utah#0370c2SJSan Juan000016Texas#3330c2MISMills000021Louisiana#0770c2PCPointe Coupee000018Arizona#0010c2APApache00002ECentralAmericawithCaribbeans#170c2DMDominica000015Romania#020c2ARArad000015Turkey#570c2SPSinop000023DominicanRepublic#280c2SEEl Seibo000029WorldwithCountries#600c2GWGuinea-Bissau000017USA#NM0c2NMNew Mexico00001CAfghanistan#270c2WARWardak000022Azerbaijan#550c2SU&#350;u&#351;a000021Latvia#330c2VENVentspils (city)00001FParaguay#100c2GUGuair&aacute;000022FrenchGuiana#GF.CY.KR0c2KRKourou00001BUganda#UG.KE0c2KEKamwenge000020Samoa #WS.AL0c2ALAiga-i-le-Tai00002BFranceDepartment#FR.ML0c2MLMaine et Loire00001EVietnam#VN.QG0c2QGQuang Ngai00001FKyrgyzstan#KG.YK0c2YKYsyk Kol00001FThailand#TH.NW0c2NWNarathiwat00001CThailand#TH.PC0c2PCPhichit00001DTuvalu#TV.NL0c2NLNukulaelae000019Panama#PA.EM0c2EMEmbera000025CentralAmerica2#CE.NI0c2NINicaragua00001DMacedonia#MK.IL0c2ILIlinden00001EIllinois#1610c2RORock Island00001BMissouri#0810c2HAHarrison00001CGermany#0160c2THThueringen00001CNorthDakota#0950c2TOTowner000016Texas#1530c2FLOFloyd000015Ohio#1150c2MNMorgan000018Nebraska#0850c2HYHayes00001EMinnesota#0130c2BUBlue Earth00001DConnecticut#0130c2TOTolland000019Michigan#0070c2APAlpena00001DTennessee#1750c2VBVan Buren000022Maryland#0330c2PGPrince George's000024SpainProvinces#0170c2CRCiudad Real00001DOklahoma#1270c2PUPushmataha000016Iowa#1790c2WAWapello00001BWisconsin#0690c2LILincoln000016India#0300c2SISikkim00001BWashington#0290c2ISIsland000019Indiana#1310c2PUPulaski000019NewYork#1030c2SFSuffolk00001DNorthCarolina#1710c2SUSurry00001DVirginia#0730c2GLGloucester000016Africa#0030c2BJBenin00001BKansas#1250c2MGMontgomery00002ECentralAmericawithCaribbeans#180c2LCSt.Lucia000023Estonia#070c2LNL&auml;&auml;nemaa00001BRomania#030c2AGArge&#351;000015Turkey#580c2SVSivas000025DominicanRepublic#290c2HMHato Mayor000021WorldwithCountries#610c2KEKenya00001BAfghanistan#280c2ZABZabol000029Azerbaijan#560c2SS&#350;u&#351;a (City)000018World#AU0c2AUAustralia00001FParaguay#110c2ITItap&uacute;a000019Uganda#UG.KF0c2KFKotido000019Oman#OM.WU0c2WUAl Wusta00002FFranceDepartment#FR.MM0c2MMMeurthe et Moselle000019Congo#CG.KO0c2KOKouilou00001ACongo#CG.LE0c2LELekoumou00001FCapeVerde#CV.BV0c2BVBoa Vista00001AAlgeria#DZ.IL0c2ILIllizi00001EUzbekistan#UZ.FA0c2FAFargona000023Laos#LA.VI0c2VIVientiane Province000020Philippines#PH.GU0c2GUGuimaras00001AGeorgia#1430c2HRHaralson000019Kentucky#1790c2NENelson000018Florida#1070c2PNPutnam00001DMississippi#0890c2MAMadison00001FPennsylvania#0550c2FRFranklin00001AArkansas#0790c2LILincoln00001BWestVirginia#1070c2WOWood000027SpainProvinces#0180c2COC&oacute;rdoba000019Colorado#0870c2MGMorgan000019Montana#0570c2MAMadison00001CSouthDakota#1250c2TUTurner000018Alabama#1030c2MGMorgan00001AIndia#0310c2TNTamil Nadu000019Africa#0040c2BWBotswana000023Alaska#1640c2PLPeninsula and Lake000016Utah#0390c2SASanpete000019Texas#3350c2MITMitchell00001BLouisiana#0790c2RARapides000019Arizona#0030c2COCochise000028YukonTerritory#CA.YT.WH0c2WHWhitehorse000018Nicaragua#010c2BOBoaco000044CentralAmericawithCaribbeans#190c2VCSt.Vincent and the Grenadlines000028Estonia#080c2LVL&auml;&auml;ne-Virumaa00001BRomania#040c2BCBac&#259;u00001DTurkey#590c2TGTekirda&#287;000023USANorthEastRegion#500c2VTVermont00001BAustria#010c2BUBurgenland000022DominicanRepublic#300c2VELa Vega000023WorldwithCountries#620c2LSLesotho000016Sweden#210c2CUppsala00001DAfghanistan#290c2PKAPaktika000024Azerbaijan#570c2TAT&#601;rt&#601;r00001AParaguay#120c2MIMisiones00001BTanzania#TZ.DO0c2DODodoma00001EMongolia#MN.DG0c2DGDornogovi000019Uganda#UG.KG0c2KGKiboga000020Thailand#TH.PE0c2PEPhetchaburi00001ASomalia#SO.SA0c2SASanaag00001CBurma#MM.SH0c2SHShan State000020Philippines#PH.ZM0c2ZMZambales000018Chad#TD.MA0c2MAMandoul000019Sudan#SD.KA0c2KAKassala000034CentralAfricanRepublic#CF.BB0c2BBBamingui-Bangoran00001FPhilippines#PH.IB0c2IBIsabela00001CIllinois#1630c2SCSt. Clair000018Missouri#0830c2HEHenry00001CNorthDakota#0970c2TRTraill000016Texas#1550c2FOAFoard000015Ohio#1170c2MWMorrow00001CNebraska#0870c2HTHitchcock000019Minnesota#0150c2BWBrown00001DConnecticut#0150c2WIWindham000019Michigan#0090c2ANAntrim00001ATennessee#1770c2WRWarren00001FMaryland#0350c2QAQueen Anne's00001FSpainProvinces#0190c2CUCuenca00001EOklahoma#1290c2RMRoger Mills000015Iowa#1810c2WRWarren00001DWisconsin#0710c2MAManitowoc000017India#0320c2TRTripura00001EWashington#0310c2JEJefferson000018Indiana#1330c2PTPutnam00001ANewYork#1050c2SVSullivan00001DNorthCarolina#1730c2SWSwain00001CVirginia#0750c2GOGoochland00001DAfrica#0050c2BFBurkina Faso000017Kansas#1270c2MRMorris000019Nicaragua#020c2CACarazo00002ECentralAmericawithCaribbeans#200c2BBBarbados000016Romania#050c2BHBihor000015Turkey#600c2TTTokat000024USANorthEastRegion#510c2VAVirginia00001DAustria#020c2KAK&auml;rnten000030DominicanRepublic#310c2MNMonse&ntilde;or Nouel000023WorldwithCountries#630c2LILiberia00001CSweden#220c2SV&auml;rmland00001BAfghanistan#300c2BALBalkh000019Azerbaijan#580c2TOTovuz000028Paraguay#130c2NE&Ntilde;eembuc&uacute;00001BUganda#UG.KH0c2KHKiruhura00001BSerbia#RS.BG0c2BGBelgrade000024FranceDepartment#FR.MO0c2MOMoselle00001BVietnam#VN.PT0c2PTPhu Tho00002FHungaryRegions#HU.CT0c2CTCentral Transdanubia000027Europe2#EU.FD0c2FDFaroe Islands (Den)000028BurkinaFaso#BF.KW0c2KWKourw&eacute;ogo00002BPhilippines#PH.ZN0c2ZNZamboanga del Norte00001DLouisiana#0810c2RERed River00001AArizona#0050c2CCCoconino000021Virginia#8000c2SFSuffolk (City)000018Georgia#1450c2HIHarris00001BKentucky#1810c2NINicholas00001BFlorida#1090c2SJSt. Johns00001CMississippi#0910c2MRMarion00001CPuertoRico#1010c2MVMorovis00001DPennsylvania#0570c2FUFulton00001FArkansas#0810c2LRLittle River00001EWestVirginia#1090c2WYWyoming000029SpainProvinces#0200c2GUGuip&uacute;zcoa000018Colorado#0890c2OTOtero000019Montana#0590c2MEMeagher00001BSouthDakota#1270c2UNUnion000017Alabama#1050c2PEPerry00001DIndia#0330c2UPUttar Pradesh000014Iowa#0010c2ADAdair000018Africa#0060c2BIBurundi000015Utah#0410c2SESevier000019Texas#3370c2MONMontague000019Cyprus#010c2FAFamagusta00001DNicaragua#030c2CIChinandega00002ACzechRepublic#780c2JMJihomoravsk&yacute;00002DCentralAmericawithCaribbeans#210c2GDGrenada00002FRomania#060c2BNBistri&#355;a-N&#259;s&#259;ud000017Turkey#610c2TBTrabzon00001EDominica#020c2ANSaint Andrew000026Austria#030c2NINieder&ouml;sterreich000026DominicanRepublic#320c2MPMonte Plata000021WorldwithCountries#640c2LRLibya000021Sweden#230c2ACV&auml;sterbotten00001DAfghanistan#310c2JOWJowzjan000018Azerbaijan#590c2UCUcar00001EAntigua#030c2SGESaint George000022MarshallIsland#MH.MH.AR0c2ARArno000018Russia#RU.PZ0c2PZPenza000019Uganda#UG.KI0c2KIKibale000023FranceDepartment#FR.LZ0c2LZLozere00001DThailand#TH.PG0c2PGPhangnga00002ATrinidadandTobago#TT.SA0c2SASaint Andrew000019Eritrea#ER.DU0c2DUDebub000019Illinois#1650c2SASaline00001AMissouri#0850c2HKHickory00001BNorthDakota#0990c2WAWalsh00001ATexas#1570c2FBEFort Bend000022Virginia#6200c2FRFranklin (City)000018Ohio#1190c2MKMuskingum000017Nebraska#0890c2HOHolt00001BMinnesota#0170c2CACarlton000018Kentucky#0010c2ADAdair000019Michigan#0110c2ARArenac00001ETennessee#1790c2WSWashington00001DMaryland#0370c2SMSt. Mary's00001FSpainProvinces#0210c2GIGirona000019Oklahoma#1310c2RORogers000019Iowa#1830c2WSWashington00001CWisconsin#0730c2MRMarathon00001BIndia#0340c2UTUttaranchal000019Washington#0330c2KGKing00001AIndiana#1350c2RARandolph000017NewYork#1070c2TITioga000024NorthCarolina#1750c2TRTransylvania00001AVirginia#0770c2GRGrayson000019Africa#0070c2CMCameroon000017Kansas#1290c2MTMorton000017Cyprus#020c2KYKyrenia00001CNicaragua#040c2COChontales00002CCzechRepublic#790c2JCJiho&#269;esk&yacute;00003BCentralAmericawithCaribbeans#220c2TTTrinidad &amp; Tobago00001EEstonia#110c2PRP&auml;rnumaa00001ERomania#070c2BTBoto&#351;ani000017Turkey#620c2TCTunceli00001DDominica#030c2DASaint David000024Austria#040c2OBOber&ouml;sterreich00002FDominicanRepublic#330c2CRSan Crist&oacute;bal000026WorldwithCountries#650c2MSMadagascar000011USA#OH0c2OHOhio000022Sweden#240c2YV&auml;sternorrland00001EAfghanistan#320c2SAMSamangan000021Azerbaijan#600c2XZXa&ccedil;maz00001CAntigua#040c2SJOSaint John000022Paraguay#150c2PGParaguar&iacute;000024FrenchGuiana#GF.CY.MC0c2MCMacouria00001BUganda#UG.KJ0c2KJKyenjojo000019Tunisia#TN.GB0c2GBGabes00001FThailand#TH.PH0c2PHPhetchabun000018Togo#TG.SA0c2SASavanes00001DSriLanka#LK.KT0c2KTKalutara000025Somalia#SO.SD0c2SDShabeellaha Dhexe00001ACongo#CG.LI0c2LILikouala00001EBurkinaFaso#BF.LO0c2LOLoroum000034Morocco#MA.LB0c2LBLaayoune Boujdour Sakia El Hamra000020Macedonia#MK.JG0c2JGJegunovtse00001CLouisiana#0830c2RIRichland000016Arizona#0070c2GIGila000016Georgia#1470c2HTHart000017Kentucky#1830c2OHOhio00001BFlorida#1110c2SLSt. Lucie00001EMississippi#0930c2MSMarshall000021PuertoRico#1030c2NGNag&uuml;abo00001DPennsylvania#0590c2GRGreene000018Arkansas#0830c2LOLogan000020SpainProvinces#0220c2GRGranada000018Colorado#0910c2OUOuray000019Montana#0610c2MIMineral00001ESouthDakota#1290c2WAWalworth000019Alabama#1070c2PIPickens00001BIndia#0350c2WBWest Bengal000014Iowa#0030c2AAAdams00001BAfrica#0080c2CVCape Verde000015Utah#0430c2SUSummit00001BTexas#3390c2MOTMontgomery00003EYukonTerritory#CA.YT.WL0c2WLWatson Lake &amp; Southern Lakes000017Cyprus#030c2LALarnaca000020Nicaragua#050c2ESEstel&iacute;000024CzechRepublic#800c2VYVyso&#269;ina000020Estonia#120c2PLP&otilde;lvamaa00001CRomania#080c2BRBr&#259;ila000023Turkey#630c2SU&#350;anl&#305;urfa00001EDominica#040c2GOSaint George000029USANorthEastRegion#540c2WVWest Virginia000019Austria#050c2SASalzburg00002CDominicanRepublic#340c2NCDistrito Nacional000022WorldwithCountries#660c2MWMalawi00001FSweden#250c2UV&auml;stmanland00001FAfghanistan#330c2SARSar-e Pol000021Azerbaijan#610c2XAXank&#601;ndi00001CAntigua#050c2SMASaint Mary000022Paraguay#160c2PHPresidente Hayes00001EPhilippines#PH.IF0c2IFIfugao000022Tanzania#TZ.DS0c2DSDar es Salaam00001BSerbia#RS.SU0c2SUSumadija00001AUganda#UG.KK0c2KKKatakwi00001ABenin#BJ.LI0c2LILittoral00001DBotswana#BW.SO0c2SOSouthern00001DChina2#CN.NM0c2NMNei Mongol000022FranceDepartment#FR.MR0c2MRMarne00001DVietnam#VN.QM0c2QMQuang Nam00001CThailand#TH.PI0c2PIPattani00001DNigeria#NG.NA0c2NANassarawa00001FLiberia#LR.MO0c2MOMontserrado000022Chad#TD.LO0c2LOLogone Occidental00001FChad#TD.ME0c2MEMayo-Kebbi Est000018Mongolia#MN.UV0c2UVUvs00001FBurma#MM.BA0c2BABago Division00001BIllinois#1670c2SNSangamon000017Missouri#0870c2HLHolt00001ANorthDakota#1010c2WRWard000019Texas#1590c2FRAFranklin000014Ohio#1210c2NONoble000019Nebraska#0910c2HKHooker00001AMinnesota#0190c2CRCarver000018Kentucky#0030c2ALAllen000019Michigan#0130c2BABaraga000019Tennessee#1810c2WAWayne00001BMaryland#0390c2SOSomerset000024SpainProvinces#0230c2GAGuadalajara00001BOklahoma#1330c2SESeminole000014Iowa#1850c2WYWayne00001DWisconsin#0750c2MIMarinette00001BWashington#0350c2KTKitsap000018Indiana#1370c2RIRipley00001ANewYork#1090c2TOTompkins00001FNorthCarolina#1770c2TYTyrrell000019Virginia#0790c2GEGreene000029Africa#0090c2CRCentral African Republic000017Kansas#1310c2NMNemaha000023USASouthEastRegion#010c2ALAlabama000017Cyprus#040c2NINicosia00001ANicaragua#060c2GRGranada000029CzechRepublic#810c2KAKarlovarsk&yacute;000019Estonia#130c2RARaplamaa00001CRomania#090c2BVBra&#351;ov000019Turkey#640c2USU&#351;ak00001CDominica#050c2JNSaint John00001BAustria#060c2STSteiermark000022DominicanRepublic#350c2PVPeravia000020WorldwithCountries#670c2MLMali000019Sweden#260c2ABStockholm000029Iceland#030c2AR&Aacute;rness&yacute;sla00001BAfghanistan#340c2KNRKonar00001AAzerbaijan#620c2XRXanlar00001CAntigua#060c2SPASaint Paul00001BParaguay#170c2SPSan Pedro000029CentralAfricanRepublic#CF.BG0c2BGBangui000022FranceDepartment#FR.MS0c2MSMeuse000023FranceDepartment#FR.NI0c2NINievre00001EVietnam#VN.QN0c2QNQuang Ninh000029TrinidadandTobago#TT.SD0c2SDSaint David00001AQatar#QA.KH0c2KHAl Khawr00001BSriLanka#LK.MB0c2MBMannar000021Mauritania#MR.NO0c2NONouakchott00001ALouisiana#0850c2SASabine000018Arizona#0090c2GRGraham000017Georgia#1490c2HEHeard000019Kentucky#1850c2OLOldham00001CFlorida#1130c2SRSanta rosa00001CMississippi#0950c2MOMonroe00001EPuertoRico#1050c2NRNaranjito000021Pennsylvania#0610c2HUHuntingdon000019Arkansas#0850c2LKLonoke00001FSpainProvinces#0240c2HUHuelva00001CTennessee#0010c2ANAnderson000017Colorado#0930c2PAPark00001AMontana#0630c2MSMissoula000016Alabama#1090c2PKPike00001ANevada#0010c2CHChurchill000018Iowa#0050c2ALAllamakee000015Africa#0100c2TDChad000022Alaska#1700c2MAMatanuska-Susitna000015Utah#0450c2TOTooele000016Texas#3410c2MORMoore000018Cyprus#050c2LILimassol00001BNicaragua#070c2JIJinotega00003BCzechRepublic#820c2KRKr&aacute;lov&eacute;hradeck&yacute;000019Estonia#140c2SASaaremaa00001ARomania#100c2BIBucharest000013Turkey#650c2VAVan00001EDominica#060c2JHSaint Joseph000016Austria#070c2TITirol000032DominicanRepublic#360c2JOSan Jos&eacute; de Ocoa000026WorldwithCountries#680c2MRMauritania000015USA#OK0c2OKOklahoma000019USA#PA0c2PAPennsylvania00001ASweden#270c2MSk&aring;ne000035Iceland#040c2ABAustur-Bar&eth;astrandars&yacute;sla00001DAfghanistan#350c2LAGLaghman000022Azerbaijan#630c2XIX&#305;z&#305;00001DAntigua#070c2SPESaint Peter00001BEurope2#SOME ISLANDS0c2000030NorthWestTerritories#CA.NT.AC0c2ACArctic Coast00002BNovaScotia#CA.NS.HD0c2HDHalifax Dartmouth00001AUganda#UG.KM0c2KMKampala000017Samoa #WS.AT0c2ATAtua00001BVietnam#VN.PY0c2PYPhu Yen000028Thailand#TH.PK0c2PKPrachuap Khiri Khan000019Tuvalu#TV.NT0c2NTNiutao00001BEurope2#EU.FI0c2FIFinland000019Europe2#EU.ES0c2ESSpain000029Philippines#PH.ZS0c2ZSZamboanga del Sur000017Kansas#1330c2NONeosho00001BIllinois#1690c2SHSchuyler000019Missouri#0890c2HWHoward00001BNorthDakota#1030c2WEWells00001ATexas#1610c2FRSFreestone000015Ohio#1230c2OTOttawa000019Nebraska#0930c2HWHoward000018Minnesota#0210c2CSCass00001BKentucky#0050c2ANAnderson000018Michigan#0150c2BRBarry00001BTennessee#1830c2WEWeakley000019Maryland#0410c2TATalbot00001FSpainProvinces#0250c2HEHuesca00001BOklahoma#1350c2SQSequoyah000016Iowa#1870c2WEWebster00001DWisconsin#0770c2MQMarquette00001DWashington#0370c2KIKittitas000016Indiana#1390c2RURush000018NewYork#1110c2ULUlster00001DNorthCarolina#1790c2UNUnion00001EVirginia#0810c2GVGreensville000018Africa#0110c2KMComoros00002BNewCaledonia#NC.SU.SA0c2SASarram&eacute;a000022Paraguay#190c2CYCanindey&uacute;000016Cyprus#060c2PAPaphos00001ENicaragua#080c2LELe&oacute;n000027CzechRepublic#830c2LILibereck&yacute;00001BRomania#110c2BZBuz&#259;u000016Turkey#660c2YZYozgat00001CDominica#070c2LUSaint Luke00001BAustria#080c2VOVorarlberg000028DominicanRepublic#370c2SDSanto Domingo000023WorldwithCountries#690c2MAMorocco000013USA#NV0c2NVNevada000028Sweden#280c2OV&auml;stra G&ouml;taland000034Iceland#050c2AHAustur-H&uacute;navatnss&yacute;sla00001CAfghanistan#360c2PIAPaktia00001FAzerbaijan#640c2XCXocal&#305;00001EAntigua#080c2SPHSaint Philip000020Nunavut#CA.NU.KT0c2KTKitikmeot00001ASudan#SD.KH0c2KHKhartoum00001EPhilippines#PH.II0c2IIIloilo000019Russia#RU.SA0c2SASamara00001CUganda#UG.KN0c2KNKalangala000019Tunisia#TN.GF0c2GFGafsa000020Thailand#TH.PL0c2PLPhatthalung000016Tuvalu#TV.NU0c2NUNui000025Somalia#SO.SH0c2SHShabeellaha Hoose00001FSenegal#SN.TC0c2TCTambacounda000019Algeria#DZ.JJ0c2JJJijel000020Chad#TD.LR0c2LRLogone Oriental000017Texas#3430c2MOIMorris00001FLouisiana#0870c2SBSt. Bernard00001AArizona#0110c2GEGreenlee000017Georgia#1510c2HYHenry000017Kentucky#1870c2OWOwen00001AFlorida#1150c2SSSarasota000020Mississippi#0970c2MTMontgomery00001DPuertoRico#1070c2OROrocovis00001EPennsylvania#0630c2INIndiana00001AArkansas#0870c2MAMadison000024SpainProvinces#0260c2JAJa&eacute;n000016Oregon#0010c2BABaker00001BTennessee#0030c2BDBedford00001DWisconsin#0780c2MNMenominee00001BColorado#0950c2PHPhillips00001DMontana#0650c2MUMusselshell00001AAlabama#1110c2RARandolph000016Nevada#0030c2CLClark000018Iowa#0070c2APAppanoose00001EAfrica#0120c2CICote d Ivoire000015Utah#0470c2UIUintah000019Nicaragua#090c2MDMadriz000027CzechRepublic#840c2OLOlomouck&yacute;000023Romania#120c2CSCara&#351;-Severin00001CDominica#080c2MASaint Mark000015Austria#090c2WIWien000026WorldwithCountries#700c2MZMozambique00002FIceland#060c2ASAustur-Skaftafellss&yacute;sla00001BAfghanistan#370c2KHOKhost000021Azerbaijan#650c2XDXocav&#601;nd000022MarshallIsland#MH.MH.TO0c2TOToke000027PolandCounties#PL.MZ.WA0c2MWAWarszawa000024MarshallIsland#MH.MH.BN0c2BNBikini00001EMacedonia#MK.KB0c2KBKarbinci00001DNepal#NP.DH0c2DHDhawalagiri00001ASerbia#RS.TO0c2TOToplica000027Tajikistan#TJ.BK0c2BKBadakhshoni Kuni00001CEastTimor#TL.BT0c2BTLautem000014Iran#IR.QM0c2QMQom00002ATrinidadandTobago#TT.SG0c2SGSaint George00001EQatar#QA.JU0c2JUAl Jumaliyah00001ASriLanka#LK.KY0c2KYKandy000019Liberia#LR.NI0c2NINimba000022Kazakhstan#KZ.MG0c2MGMangghystau00001DHongKong#HK.SK0c2SKSai Kung000015Kansas#1350c2NSNess000018Arizona#0120c2LPLa Paz000018Illinois#1710c2STScott000019Missouri#0910c2HOHowell00001ENorthDakota#1050c2WIWilliams000015Texas#1630c2FRIFrio000017Ohio#1250c2PAPaulding00001CNebraska#0950c2JEJefferson00001CMinnesota#0230c2CHChippewa00001AKentucky#0070c2BABallard000016Michigan#0170c2BYBay000019Tennessee#1850c2WHWhite00001DMaryland#0430c2WAWashington000029SpainProvinces#0270c2LCLa Coru&ntilde;a00001BOklahoma#1370c2STStephens000018Iowa#1890c2WIWinnebago00001DWisconsin#0790c2MEMilwaukee00001EWashington#0390c2KLKlickitat00001CIndiana#1410c2SJSt. Joseph000018NewYork#1130c2WAWarren00001DNorthCarolina#1810c2VAVance00001AVirginia#0830c2HLHalifax000031Africa#0130c2CDDemocratic Republic of the Congo000024USASouthEastRegion#050c2ARArkansas00001ANicaragua#100c2MNManagua00002DCzechRepublic#850c2MOMoravskoslezsk&yacute;000015Romania#130c2CJCluj000016Turkey#680c2ANAnkara00001FDominica#090c2PKSaint Patrick000023WorldwithCountries#710c2NANamibia00002EIceland#070c2BOBorgarfjar&eth;ars&yacute;sla000014China#010c2AHAnhui00001EAfghanistan#380c2NURNurestan000026Azerbaijan#660c2YRYard&#305;ml&#305;00001FNunavut#CA.NU.KV0c2KVKeewatin00002ECentralAfricanRepublic#CF.BK0c2BKBasse-Kotto00001CUganda#UG.KP0c2KPKapchorwa00001DOman#OM.ZA0c2ZAAdh Dhahirah000016Serbia#RS.BO0c2BOBor000018UK7#UK.SC0c2SCScotland000017Texas#3450c2MOEMotley00001FLouisiana#0890c2SCSt. Charles00001AArizona#0130c2MAMaricopa000020NorthCarolina#0010c2ALAlamance000019Georgia#1530c2HOHouston000019Kentucky#1890c2OSOwsley00001AFlorida#1170c2SOSeminole00001DMississippi#0990c2NENeshoba00001DPuertoRico#1090c2PTPatillas000020Pennsylvania#0650c2JEJefferson000013Idaho#0010c2ADAda000019Arkansas#0890c2MRMarion000021SpainProvinces#0280c2LRLa Rioja000017Oregon#0030c2BEBenton00001ATennessee#0050c2BEBenton000019Colorado#0970c2PIPitkin000016Montana#0670c2PAPark00001DSouthDakota#1350c2YAYankton000019Alabama#1130c2RURussell000018Nevada#0050c2DODouglas000016Iowa#0090c2AUAudubon000019Africa#0140c2DJDjibouti000013Utah#0490c2UTUtah000032Paraguay#220c2ASAsunci&oacute;n Capitol District000019Nicaragua#110c2MSMasaya000028CzechRepublic#860c2PAPardubick&yacute;000019Estonia#180c2TATartumaa00001FRomania#140c2CTConstan&#355;a000028Turkey#690c2GUG&uuml;m&uuml;&#351;hane00001CDominica#100c2PLSaint Paul000021WorldwithCountries#720c2NENiger000015USA#NY0c2NYNew York000021Iceland#080c2DADalas&yacute;sla000017China#020c2ZJZhejiang00001DAfghanistan#390c2ORUOruzgan00001AAzerbaijan#670c2YVYevlax000025Laos#LA.VT0c2VTVientiane Prefecture00001FEastTimor#TL.CL0c2CLCova-Lima000018Uganda#UG.KQ0c2KQAmuru000020BurkinaFaso#BF.NB0c2NBNoumbiel000022CentralAmerica2#CE.PA0c2PAPanama000022PapuaNewGuinea#PG.SA0c2SASanduan000017Kansas#1370c2NTNorton000019Illinois#1730c2SEShelby000017Missouri#0930c2IRIron000017Texas#1650c2GAIGaines000014Ohio#1270c2PEPerry00001ANebraska#0970c2JOJohnson00001BMinnesota#0250c2CGChisago000019Kentucky#0090c2BRBarren000019Michigan#0190c2BEBenzie00001ETennessee#1870c2WLWilliamson00001BMaryland#0450c2WIWicomico000023SpainProvinces#0290c2LPLas Palmas000018Oklahoma#1390c2TETexas000019Iowa#1910c2WNWinneshiek00001AWisconsin#0810c2MOMonroe00001AWashington#0410c2LELewis000017Indiana#1430c2SCScott00001CNewYork#1150c2WSWashington00001CNorthCarolina#1830c2WAWake00001AVirginia#0850c2HNHanover000016Africa#0150c2EGEgypt00001FParaguay#230c2AGAlto Paraguay00001CNicaragua#120c2MTMatagalpa00002BCzechRepublic#870c2PLPlze&#328;sk&yacute;000019Estonia#190c2VGValgamaa00001CWales#010c2BGBlaenau Gwent000018Romania#150c2CVCovasna000020Ecuador#010c2WGal&aacute;pagos000017Turkey#700c2HKHakkari00001DDominica#110c2PRSaint Peter000023WorldwithCountries#730c2NGNigeria00002CIceland#090c2EYEyjafjar&eth;ars&yacute;sla000016China#030c2JXJiangxi00001CAfghanistan#400c2PARParvan000021Azerbaijan#680c2YEYevlax (City)00001CLaos#LA.XA0c2XAXaignabouli000019Russia#RU.RO0c2RORostov00001CTunisia#TN.ZA0c2ZAZaghouan000019Uganda#UG.KR0c2KRKisoro00001ARussia#RU.AD0c2ADAdygaya000024FranceDepartment#FR.MY0c2MYMayenne000021FranceDepartment#FR.NO0c2NONord00001DVietnam#VN.QT0c2QTQuang Tri00001BSriLanka#LK.MH0c2MHMatara00001FTurkmenistan#TM.BA0c2BABalkan000016Utah#0510c2WAWasatch00001CTexas#3470c2NACNacogdoches00001ELouisiana#0910c2SHSt. Helena000018Arizona#0150c2MOMohave000028Virginia#8100c2VBVirginia Beach (City)000021NorthCarolina#0030c2AEAlexander000017Georgia#1550c2IRIrwin00001CKentucky#1910c2PEPendleton000018Florida#1190c2STSumter00001CMississippi#1010c2NWNewton000024PuertoRico#1110c2PNPe&ntilde;uelas00001EPennsylvania#0670c2JUJuniata000015Idaho#0030c2AAAdams000019Arkansas#0910c2MIMiller000024SpainProvinces#0300c2LELe&oacute;n00001AOregon#0050c2CLClackamas00001BTennessee#0070c2BLBledsoe00001AColorado#0990c2PRProwers00001BMontana#0690c2PEPetroleum00001DSouthDakota#1370c2ZIZiebach00001BAlabama#1150c2SCSt. Clair000015Nevada#0070c2ELElko000015Iowa#0110c2BEBenton000022Africa#0160c2GQEquatorial Guinea00001CNorthIreland#010c2ANAntrim000021Paraguay#240c2BQBoquer&oacute;n000020Nicaragua#130c2NSNueva Segovia000033CzechRepublic#880c2STSt&#345;edo&#269;esk&yacute;00001CEstonia#200c2VDViljandimaa000017Wales#020c2BBBridgend000025Romania#160c2DBD&acirc;mbovi&#355;a000015Ecuador#020c2AAzuay000015Turkey#710c2KOKonya000022WorldwithCountries#740c2RWRwanda000027Iceland#100c2GUGullbringus&yacute;sla000016China#040c2JSJiangsu00001EAfghanistan#410c2DAYDaykundi000021Azerbaijan#690c2ZGZ&#601;ngilan000028NovaScotia#CA.NS.GT0c2GTGlooscap Trail000025PolandCounties#PL.SK.KM0c2SKMKielce000023MarshallIsland#MH.MH.BR0c2BRBikar000022SierraLeone#SL.NO.BM0c2BMBombali000024Philippines#PH.IN0c2INIlocos Norte000019Uganda#UG.KS0c2KSKasese000017Uganda#UG.LI0c2LILira000025EquatorialGuinea#GQ.KN0c2KNKie Ntem000022Tibet#TI.LP0c2LPLhasa Prefecture00001CSerbia#RS.BR0c2BRBranicevo00001DTurkmenistan#TM.AL0c2ALAhal000019Nigeria#NG.NI0c2NINiger000019Senegal#SN.TH0c2THThies000020Gambia#GM.MC0c2MCCentral River000029Philippines#PH.ZY0c2ZYZamboanga Sibugay00001DHongKong#HK.SO0c2SOSouthern000016Kansas#1390c2OSOsage000018Illinois#1750c2SRStark00001AMissouri#0950c2JKJackson00001ATexas#1670c2GALGalveston000028Virginia#6300c2FEFredericksburg (City)000017Ohio#1290c2PIPickaway00001ANebraska#0990c2KEKearney000018Minnesota#0270c2CLClay000017Kentucky#0110c2BTBath00001AMichigan#0210c2BIBerrien00001ATennessee#1890c2WIWilson00001DMaryland#0470c2WOWorchester00001FSpainProvinces#0310c2LILleida00001AOklahoma#1410c2TITillman000017Iowa#1930c2WOWoodbury00001AWisconsin#0830c2OCOconto00001CWashington#0430c2LILincoln000018Indiana#1450c2SHShelby000017NewYork#1170c2WYWayne00001ENorthCarolina#1850c2WRWarren00001AVirginia#0870c2HCHenrico000018Africa#0170c2EREritrea00001CAzerbaijan#700c2ZQZaqatala00001ANorthIreland#020c2ADArds000026Nicaragua#140c2SJR&iacute;o San Juan00002CCzechRepublic#890c2US&Uacute;steck&yacute;00001FEstonia#210c2VRV&otilde;rumaa000019Wales#030c2CPCaerphilly000015Romania#170c2DJDolj00001EEcuador#030c2BBol&iacute;var000016Turkey#720c2MRMardin000031WorldwithCountries#750c2STSao Tome and Principe000013USA#OR0c2OROregon000014China#050c2JLJilin00001EAfghanistan#420c2PANPanjshir000026Alberta#CA.AB.AC0c2ACAlberta Central000026PolandCounties#PL.LD.SI0c2LSISieradz000022MarshallIsland#MH.MH.UJ0c2UJUjae000024SierraLeone#SL.NO.TO0c2TOTonkolili000022Macedonia#MK.KG0c2KGKrivogastani00001BVanuatu#VU.ML0c2MLMalampa00001AThailand#TH.PR0c2PRPhrae000021Cameroon#CM.EN0c2ENExtreme-Nord00001FSriLanka#Lk.MJ0c2MJMoneragala00001EEritrea#ER.GB0c2GBGash-Barka00001FBurkinaFaso#BF.MO0c2MOMouhoun000019Bhutan#BT.MO0c2MOMongar00001BRwanda#RW.NO0c2NONorthern000019Utah#0530c2WSWashington000018Texas#3490c2NAVNavarro00001DLouisiana#0930c2SJSt. James000018Arizona#0170c2NANavajo000021NorthCarolina#0050c2AGAlleghany000019Georgia#1570c2JAJackson000018Kentucky#1930c2PRPerry00001AFlorida#1210c2SNSuwannee00001DMississippi#1030c2NONoxubee00001APuertoRico#1130c2POPonce000021Pennsylvania#0690c2LALackawanna000017Idaho#0050c2BABannock00001EArkansas#0930c2MSMississippi00001DSpainProvinces#0320c2LULugo000018Oregon#0070c2CAClatsop00001ATennessee#0090c2BUBlount000019Colorado#1010c2PUPueblo00001AMontana#0710c2PHPhillips000018Alabama#1170c2SHShelby00001ANevada#0090c2ESEsmeralda000019Iowa#0130c2BHBlack Hawk000019Africa#0180c2ETEthiopia00001FAzerbaijan#710c2ZRZ&#601;rdab00001CNorthIreland#030c2AMArmagh000018Nicaragua#150c2RIRivas00002CCzechRepublic#900c2ZLZl&iacute;nsk&yacute;000016Wales#040c2CACardiff00001CRomania#180c2GLGala&#355;i00001CEcuador#040c2FCa&ntilde;ar00001ATurkey#730c2NGNi&#287;de000023WorldwithCountries#760c2SNSenegal000016China#060c2QHQinghai00002DPolandCounties#PL.LU.BM0c2LBMBiala-Podlaska00001CMacedonia#MK.KH0c2KHKicevo00001DMongolia#MN.DU0c2DUDundgovi000017Uganda#UG.KU0c2KUKumi000019Uganda#UG.MA0c2MAMasaka000020Thailand#TH.PS0c2PSPhitsanulok000018Somalia#SO.SO0c2SOSool00001FSenegal#SN.ST0c2STSaint-Louis00001CLiberia#LR.MY0c2MYMaryland00001BZambia#ZM.SO0c2SOSouthern00001CChad#TD.MO0c2MOMoyen Chari000016Africa#0190c2GAGabon000018Kansas#1410c2OBOsborne00001DIllinois#1770c2SPStephenson000019Missouri#0970c2JAJasper00001CCalifornia#0010c2ALAlameda000016Texas#1690c2GARGarza000013Ohio#1310c2PKPike000018Nebraska#1010c2KIKeith00001EMinnesota#0290c2CWClearwater000017Kentucky#0130c2BEBell000019Michigan#0230c2BNBranch00001FSpainProvinces#0330c2MAMadrid000018Oklahoma#1430c2TUTulsa000014Iowa#1950c2WHWorth00001AWisconsin#0850c2ONOneida00001BNewWorld#1000c2KHCambodia00001AWashington#0450c2MAMason000019Indiana#1470c2SPSpencer00001DNewYork#1190c2WEWestchester000022NorthCarolina#1870c2WSWashington000018Virginia#0890c2HYHenry00002CNewCaledonia#NC.NO.HI0c2HIHiengh&egrave;ne00001EAzerbaijan#720c2BBBab&#601;k00001FNorthIreland#040c2BLBallymena00001EWales#050c2CICarmarthenshire000015Romania#190c2GJGorj000016Ecuador#050c2CCarchi000015Turkey#740c2SISiirt000025WorldwithCountries#770c2SCSeycelles000015China#070c2FJFujian000025MarshallIsland#MH.MH.UL0c2ULUjelang000017Laos#LA.XE0c2XEXekong000017Libya#LY.SB0c2SBSabha00001EChina2#CN.NX0c2NXNingxia Hui000021FranceDepartment#FR.OI0c2OIOise000021Thailand#TH.PT0c2PTPathum Thani00001CBotswana#BW.CE0c2CECentral00001AEurope2#EU.FR0c2FRFrance00001DAlgeria#DZ.KH0c2KHKhenchela00001CSaudiArabia#SA.HA0c2HAHail000016Africa#0200c2GHGhana000015Alaska#1800c2NONome000014Utah#0550c2WYWayne000017Texas#3510c2NEWNewton000028Louisiana#0950c2STSt. John the Baptist000016Arizona#0190c2PIPima00001DNorthCarolina#0070c2ANAnson000018Georgia#1590c2JSJasper000017Kentucky#1950c2PIPike000018Florida#1230c2TATaylor00001FMississippi#1050c2OKOktibbeha000021PuertoRico#1150c2QBQuebradillas000020Pennsylvania#0710c2LNLancaster000019Idaho#0070c2BEBear Lake000019Arkansas#0950c2MNMonroe000026SpainProvinces#0340c2MLM&aacute;laga000019Oregon#0090c2COColumbia00001BTennessee#0110c2BRBradley00001DColorado#1030c2RBRio Blanco000019Montana#0730c2POPondera000018Alabama#1190c2SUSumter000018NewWorld#1010c2CNChina000017Nevada#0110c2EUEureka000014Iowa#0150c2BOBoone000019Azerbaijan#730c2CFCulfa000020NorthIreland#050c2BYBallymoney000023USASouthEastRegion#120c2FLFlorida00004BNicaragua#170c2ANRegi&oacute;n Aut&oacute;noma del Atl&aacute;ntico Norte000019Wales#060c2CGCeredigion000019Romania#200c2HRHarghita00001AEcuador#060c2HChimborazo000017Turkey#750c2AKAksaray000028WorldwithCountries#780c2SLSierra Leone00001BChina#080c2HLHeilongjiang000026PolandCounties#PL.PD.SM0c2PSMSuwalki000021HongKong#HK.SS0c2SSSham Shui Po00001CSamoa #WS.TU0c2TUTuamasaga00001AUganda#UG.MC0c2MCMasindi00001BThailand#TH.PU0c2PUPhuket000020Ethiopia#ET.AA0c2AAAddis Ababa000022Europe2#EU.GI0c2GIGibraltar (UK)000026Burma#MM.TN0c2TNTanintharyi Division00001BVirginia#0910c2HIHighland000017Africa#0210c2GNGuinea000017Kansas#1430c2OTOttawa00001BIllinois#1790c2TATazewell00001CMissouri#0990c2JEJefferson00001BCalifornia#0030c2APAlpine00001ATexas#1710c2GIEGillespie000016Ohio#1330c2POPortage00001CNebraska#1030c2KPKeya Paha000018Minnesota#0310c2COCook000018Kentucky#0150c2BNBoone00001AMichigan#0250c2CACalhoun000020SpainProvinces#0350c2MEMelilla00001AOklahoma#1450c2WAWagoner000015Iowa#1970c2WGWright00001DWisconsin#0870c2OUOutagamie00001DNewWorld#1020c2TPEast Timor00001DWashington#0470c2OKOkanogan000018Indiana#1490c2STStarke000019NewYork#1210c2WOWyoming00001FNorthCarolina#1890c2WTWatauga00002FSaskatchewan#CA.SK.WC0c2WCWest Central Region000026Manitoba#CA.MB.CR0c2CRCentral Region000026Azerbaijan#740c2KNK&#601;ng&#601;rli00001FNorthIreland#060c2BBBanbridge000023USASouthEastRegion#130c2GAGeorgia000049Nicaragua#180c2ASRegi&oacute;n Aut&oacute;noma del Atl&aacute;ntico Sur000014Wales#070c2CWConwy00001ARomania#210c2HDHunedoara000018Ecuador#070c2XCotopaxi000016Turkey#760c2BMBatman000023WorldwithCountries#790c2SOSomalia00002AIceland#150c2KJKj&oacute;sars&yacute;sla000014China#090c2HEHenan00002CPolandCounties#PL.SL.BM0c2SBMBielsko-Biala00002BPolandCounties#PL.LD.SM0c2LSMSkierniewice00002DPapuaNewGuinea#PG.SH0c2SHSouthern Highlands00001CHongKong#HK.ST0c2STSha Tin000022Philippines#PH.IS0c2ISIlocos Sur000018Malawi#MW.ZO0c2ZOZomba000018Russia#RU.SK0c2SKSakha00001DMicronesia#FM.KO0c2KOKosrae000019Uganda#UG.KX0c2KXKamuli00001AUganda#UG.MD0c2MDMubende000024EquatorialGuinea#GQ.LI0c2LILitoral000022Tibet#TI.NA0c2NANgari Prefecture000027Iran#IR.SB0c2SBSistan and Baluchestan000031FranceDepartment#FR.PA0c2PAPyrenees Atlantiques00002BTrinidadandTobago#TT.SP0c2SPSaint Patrick00001EGambia#GM.LR0c2LRLower River00001FLesotho#LS.QN0c2QNQacha's Nek000015Iowa#0170c2BRBremer00001EAfrica#0220c2GWGuinea-Bissau000014Utah#0570c2WEWeber000016Texas#3530c2NOLNolan00001ELouisiana#0970c2SLSt. Landry000017Arizona#0210c2PNPinal00001CNorthCarolina#0090c2ASAshe00001CGeorgia#1610c2JDJeff Davis000019Kentucky#1970c2POPowell000017Florida#1250c2UNUnion00001CMississippi#1070c2PAPanola000022PuertoRico#1170c2RCRinc&oacute;n00001FPennsylvania#0730c2LWLawrence000017Idaho#0090c2BNBenewah00001DArkansas#0970c2MTMontgomery00001FSpainProvinces#0360c2MUMurcia000015Oregon#0110c2CSCoos000018Israel#0010c2CECentral00001CTennessee#0130c2CACampbell00001DColorado#1050c2RGRio Grande00001EMontana#0750c2PRPowder River00001BAlabama#1210c2TATalladega00001ANewWorld#1030c2GEGeorgia000019Nevada#0130c2HUHumboldt00002FSaskatchewan#CA.SK.EC0c2ECEast Central Region00001BAzerbaijan#750c2OROrdubad00001DNorthIreland#070c2BFBelfast00001BWales#080c2DBDenbighshire00001ERomania#220c2ILIalomi&#355;a000016Ecuador#080c2OEl Oro000017Turkey#770c2BBBayburt000028WorldwithCountries#800c2ZASouth Africa000014China#100c2HBHebei000025Burma#MM.AY0c2AYAyeyarwady Division00001BRussia#RU.SL0c2SLSakhalin000019Russia#RU.TB0c2TBTambov00001AGuinea#GN.SI0c2SISiguiri00001AUganda#UG.KY0c2KYKayunga000018Uganda#UG.ME0c2MEMbale000018Cameroon#CM.ES0c2ESEst000028CentralAfricanRepublic#CF.UK0c2UKOuaka00001DNorthCarolina#1910c2WYWayne000020Virginia#0930c2IWIsle of Wight000016Africa#0230c2KEKenya000017Kansas#1450c2PNPawnee000018Illinois#1810c2UNUnion00001AMissouri#1010c2JOJohnson00001BCalifornia#0050c2AMAmador00001ATexas#1730c2GLAGlasscock000015Ohio#1350c2PRPreble00001ANebraska#1050c2KMKimball00001EMinnesota#0330c2CTCottonwood00001AKentucky#0170c2BOBourbon000017Michigan#0270c2CSCass000020SpainProvinces#0370c2NANavarra000016Israel#0020c2HAHaifa00001DOklahoma#1470c2WSWashington00001BWisconsin#0890c2OZOzaukee000018NewWorld#1040c2INIndia00001CWashington#0490c2PAPacific000019Indiana#1510c2SUSteuben000017NewYork#1230c2YAYates00002AAzerbaijan#760c2SDS&#601;d&#601;r&#601;k000023NorthIreland#080c2CFCarrickfergus000019Wales#090c2FLFlintshire00001ARomania#230c2ISIa&#351;i00001AEcuador#090c2EEsmeraldas000017Turkey#780c2KRKaraman000021WorldwithCountries#810c2SDSudan000028Iceland#170c2MYM&yacute;ras&yacute;sla000014China#110c2HNHunan00001CLaos#LA.XI0c2XIXiangkhoang00001FPhilippines#PH.KA0c2KAKalinga00001BRussia#RU.SM0c2SMSmolensk00001CMongolia#MN.DZ0c2DZZavkhan00001AUganda#UG.MF0c2MFManafwa000018Russia#RU.AL0c2ALAltai00002AFranceDepartment#FR.PC0c2PCPas de Calais00001CVietnam#VN.AG0c2AGAn Giang00001FSriLanka#LK.MP0c2MPMullailivu00001BMauritius#MU.FL0c2FLFlacq000022Chad#TD.NJ0c2NJVille De Ndjamena000017Nevada#0150c2LALander000017Iowa#0190c2BUBuchanan000018Africa#0240c2LSLesotho000017Texas#3550c2NUENueces00001ELouisiana#0990c2SMSt. Martin00001CArizona#0230c2SCSanta Cruz00001DNorthCarolina#0110c2AVAvery00001BGeorgia#1630c2JEJefferson00001AKentucky#1990c2PUPulaski000019Florida#1270c2VOVolusia000018Illinois#0010c2ADAdams000021Mississippi#1090c2PRPearl River000026PuertoRico#1190c2RGR&iacute;o Grande00001EPennsylvania#0750c2LELebanon000017Idaho#0110c2BIBingham000019Arkansas#0990c2NENevada000020SpainProvinces#0380c2OUOurense000016Oregon#0130c2CRCrook00001AIsrael#0030c2JEJerusalem00001ATennessee#0150c2CNCannon000018Colorado#1070c2RORoutt000018Montana#0770c2PWPowell00001CAlabama#1230c2TLTallapoosa00001CNewWorld#1050c2IDIndonesia00001FAzerbaijan#770c2SH&#350;ahbuz000021NorthIreland#090c2CSCastlereagh000016Wales#100c2GDGwynedd000016Ecuador#100c2GGuayas000023Turkey#790c2KKK&#305;r&#305;kkale000025WorldwithCountries#820c2SZSwaziland000014China#120c2HUHubei000032FrenchGuiana#GF.CY.MT0c2MTMontsinery Tonnegrande00001APanama#PA.HE0c2HEHerrera00001DHongKong#HK.TM0c2TMTuen Mun00001BMacedonia#MK.KN0c2KNKonce00001CCoteDivoire#CI.LC0c2LCLacs00001AEastTimor#TL.DL0c2DLDili000019Uganda#UG.MG0c2MGMayuge000016Benin#BJ.MO0c2MOMono00002FHungaryRegions#HU.WT0c2WTWestern Transdanubia000017Russia#RU.AM0c2AMAmur000028FranceDepartment#FR.PD0c2PDPuy de Dome00001BThailand#TH.PY0c2PYPhayao00001BThailand#TH.RE0c2RERoi Et000020Namibia#NA.OD0c2ODOtjozondjupa000018Nigeria#NG.OG0c2OGOgun000022BurkinaFaso#BF.OB0c2OBOubritenga00001ENorthCarolina#1930c2WIWilkes00001DVirginia#0950c2JCJames City000018Africa#0250c2LILiberia00001CAlaska#1850c2NSNorth Slope000019Kansas#1470c2PLPhillips00001CIllinois#1830c2VEVermilion000017Missouri#1030c2KNKnox00001ACalifornia#0070c2BUButte000017Texas#1750c2GOLGoliad000015Ohio#1370c2PUPutnam000017Nebraska#1070c2KNKnox00001DMinnesota#0350c2CICrow Wing000017Kentucky#0190c2BYBoyd00001DMichigan#0290c2CHCharlevoix000021SpainProvinces#0390c2PAPalencia000019Israel#0040c2NRNorthern00001AOklahoma#1490c2WHWashita000019Wisconsin#0910c2PEPepin000017NewWorld#1060c2IAIran000021Washington#0510c2PEPend Oreille00001AIndiana#1530c2SLSullivan000029NewCaledonia#NC.NO.HO0c2HOHoua&iuml;lou000023Azerbaijan#780c2SR&#350;&#601;rur00001FNorthIreland#100c2CLColeraine00001FWales#110c2AYIsle of Anglesey00001FRomania#250c2MMMaramure&#351;000018Ecuador#110c2IImbabura00001FNorthKorea#010c2CHAChagang-do000020Turkey#800c2SR&#350;&#305;rnak000024WorldwithCountries#830c2TZTanzania00003DIceland#190c2NINor&eth;ur-&Iacute;safjar&eth;ars&yacute;sla000017China#130c2XJXinjiang00001ASomalia#SO.BK0c2BKBakool00001CBurma#MM.CH0c2CHChin State00001ESamoa #WS.VF0c2VFVaao Fonoti000018Niger#NE.MA0c2MAMaradi000018Yemen#YE.DH0c2DHDhamar00001BMongolia#MN.ER0c2EROrkhon00001AUganda#UG.MH0c2MHMaracha00001BLibya#LY.SH0c2SHAsh Shati000017Iran#IR.QZ0c2QZQazvin00001ALebanon#LE.BA0c2BABeirut000019Ethiopia#ET.AF0c2AFAfar000022BurkinaFaso#BF.NM0c2NMNamentenga00001DGambia#GM.NB0c2NBNorth Bank000018Nevada#0170c2LILincoln00001AIowa#0210c2BVBuena Vista000016Africa#0260c2LRLibya00001ATexas#3570c2OCHOchiltree00001CLouisiana#1010c2SRSt. Mary000019Arizona#0250c2YAYavapai000024Virginia#8200c2WBWaynesboro (City)000020NorthCarolina#0130c2BEBeaufort000019Georgia#1650c2JKJenkins00001CKentucky#2010c2RORobertson000019Florida#1290c2WKWakulla00001CIllinois#0030c2ALAlexander00001BMississippi#1110c2PEPerry000022PuertoRico#1210c2SBSabana Grande00001DPennsylvania#0770c2LHLehigh000016Idaho#0130c2BLBlaine000019Arkansas#1010c2NWNewton000023SpainProvinces#0400c2POPontevedra000016Oregon#0150c2CUCurry000019Israel#0050c2SOSouthern00001BTennessee#0170c2CRCarroll00001BColorado#1090c2SASaguache000019Montana#0790c2PIPrairie00001CAlabama#1250c2TUTuscaloosa000018NewWorld#1070c2JPJapan00001FNorthIreland#110c2CKCookstown00001CWales#120c2MMMonmouthshire00001FRomania#260c2MHMehedin&#355;i000014Ecuador#120c2LLoja000015Turkey#810c2AAAdana000020WorldwithCountries#840c2TGTogo000033Iceland#200c2NMNor&eth;ur-M&uacute;las&yacute;sla00001FFiji#FJ.TH.NO0c2NOTholo North000027Kazakhstan#KZ.NK0c2NKNorth Kazakhstan00001ADjibouti#DJ.OB0c2OBObock000024Guyana#GY.PM0c2PMPomeroon-Supenaam000019Russia#RU.RZ0c2RZRyazan000026Russia#RU.SP0c2SPSt. Petersburg City000018Uganda#UG.MI0c2MIMpigi00001AQatar#QA.ME0c2MEMesaieed00001FBurkinaFaso#BF.OD0c2ODOudalan00002EMorocco#MA.MK0c2MKMarrakech Tensift Al Haouz000021Chad#TD.MW0c2MWMayo-Kebbi Ouest00001DIndiana#1550c2SWSwitzerland00001ENorthCarolina#1950c2WLWilson000021Virginia#0970c2KQKing and Queen00001BAfrica#0270c2MGMadagascar00001DKansas#1490c2PTPottawatomie000019Illinois#1850c2WAWabash00001AMissouri#1050c2LDLaclede00001ECalifornia#0090c2CACalaveras000019Texas#1770c2GONGonzales00001FVirginia#6400c2GAGalax (City)000017Ohio#1390c2RIRichland00001CNebraska#1090c2LALancaster00001AMinnesota#0370c2DADakota000018Kentucky#0210c2BLBoyle00001CMichigan#0310c2CECheboygan000022SpainProvinces#0410c2SASalamanca000019Israel#0060c2TATel Aviv000018Oklahoma#1510c2WOWoods00001AWisconsin#0930c2PIPierce00001DNewWorld#1080c2KZKazakhstan00001BWashington#0530c2PIPierce000014China#150c2GSGansu00001FNorthIreland#120c2CRCraigavon00001DWales#130c2MTMerthyr Tydfil00001BRomania#270c2MSMure&#351;00001FEcuador#130c2RLos R&iacute;os000028NorthKorea#030c2HANHamgy&#335;ng-namdo000028Turkey#820c2CI&Ccedil;ank&#305;r&#305;000023WorldwithCountries#850c2TNTunisia000037Iceland#210c2NONor&eth;ur-&THORN;ingeyjars&yacute;sla000022SierraLeone#SL.SO.PU0c2PUPujehun000024MarshallIsland#MH.MH.UT0c2UTUtirik000018Chad#TD.OD0c2ODOuaddai000019Somalia#SO.AW0c2AWAwdal00001BHongKong#HK.TP0c2TPTai Po00001ABurundi#BI.GI0c2GIGitega000022Tibet#TI.NG0c2NGNagqu Prefecture00001AVietnam#VN.SL0c2SLSon La00001DVietnam#VN.TB0c2TBThai Binh00001BPalau#PW.HA0c2HAHatohobei00001BSriLanka#LK.MT0c2MTMatale000017Congo#CG.NI0c2NINiari000024TrinidadandTobago#TT.CA0c2CACaroni00001BLesotho#LS.QT0c2QTQuthing000015Nevada#0190c2LYLyon000015Iowa#0230c2BTButler000017Africa#0280c2MWMalawi000021Alaska#1880c2NANorthwest Arctic000017Texas#3590c2OLDOldham00001FLouisiana#1030c2SYSt. Tammany000016Arizona#0270c2YUYuma00001ENorthCarolina#0150c2BRBertie000019Georgia#1670c2JOJohnson00001DKentucky#2030c2RCRockcastle000018Florida#1310c2WTWalton000017Illinois#0050c2BOBond00001AMississippi#1130c2PIPike00001CPuertoRico#1230c2SASalinas00001EPennsylvania#0790c2LZLuzerne000015Idaho#0150c2BOBoise00001BArkansas#1030c2OUOuachita00002FSpainProvinces#0420c2SCSanta Cruz de Tenerife00001AOregon#0170c2DEDeschutes00001ATennessee#0190c2CTCarter00001BColorado#1110c2SJSan Juan000019Montana#0810c2RARavalli000018Alabama#1270c2WAWalker000020NewWorld#1090c2KPKorea (north)000020NewCaledonia#NC.SU.TH0c2THThio000016China#160c2GXGuangxi00001BNorthIreland#130c2LDDerry00001CLuxembourg#020c2CACapellen000020Wales#140c2NPNeath Port Talbot00001BRomania#280c2NTNeam&#355;00001DEcuador#140c2MManab&iacute;000019Turkey#830c2GAGaziantep000022WorldwithCountries#860c2UGUganda000024PolandCounties#PL.LU.CM0c2LCMChelm000024Alberta#CA.AB.AN0c2ANAlberta North00001CSomalia#SO.BN0c2BNBanaadir00001EEastTimor#TL.VQ0c2VQViqueque00001ARussia#RU.SR0c2SRSaratov00001FMongolia#MN.GA0c2GAGovi Altai00001FCoteDivoire#CI.LG0c2LGLagunes000030Guinea#GN.TE0c2TET&eacute;lim&eacute;l&eacute;00001EUganda#UG.NA0c2NANakasongola000021FranceDepartment#FR.OR0c2OROrne00001ALibya#LY.AJ0c2AJAjdabiya000019Monaco#EU.MN0c2MNMonaco000025DenmarkRegion#DK.MJ0c2MJMidtjylland00001BNamibia#NA.OH0c2OHOmaheke00001CSomalia#SO.TO0c2TOTogdheer00001CAlgeria#DZ.LG0c2LGLaghouat00001CIndiana#1570c2TITippecanoe00001ENorthCarolina#1970c2YAYadkin00001EVirginia#0990c2KGKing George000015Africa#0290c2MLMali000016Kansas#1510c2PRPratt000019Illinois#1870c2WRWarren00001CMissouri#1070c2LFLafayette00001BCalifornia#0110c2COColusa000015Texas#1790c2GRAGray000013Ohio#1410c2RORoss00001ANebraska#1110c2LILincoln000019Minnesota#0390c2DDDodge00001AKentucky#0230c2BKBracken00001BMichigan#0330c2CIChippewa000020SpainProvinces#0430c2SESegovia00001BOklahoma#1530c2WDWoodward000018Wisconsin#0950c2POPolk000020NewWorld#1100c2KRKorea (south)00001DWashington#0550c2SJSan Juan00002DPrinceEdwardIsland#CA.PE.AL0c2ALAnne's Land000016Belarus#010c2BRBrest00001ANorthIreland#140c2DWDown000024Luxembourg#030c2ESEsch-sur-Alzette000016Wales#150c2NONewport000014Romania#290c2OTOlt00001BColombia#010c2AMAAmazonas00001FEcuador#150c2SMorona-Santiago000014Turkey#840c2KAKars00002AWorldwithCountries#870c2WAWestern Sahara00002FIceland#230c2RARang&aacute;rvallas&yacute;sla000023FrenchGuiana#GF.CY.MY0c2MYMatoury000033NorthWestTerritories#CA.NT.BL0c2BLBigLake Country00001DMacedonia#MK.KS0c2KSKrusevo00001DMacedonia#MK.LI0c2LILipkovo00001AZambia#ZM.CE0c2CECentral000019Yemen#YE.DL0c2DLAl Dali00001BLibya#LY.TB0c2TBTarabulus00002DSolomonIsland#SB.RB0c2RBRennell and Bellona00001ERussia#RU.AR0c2ARArkhangelsk000018Guinea#GN.BE0c2BEBeyla00001APakistan#PK.SD0c2SDSindh00001CSwaziland#SZ.HH0c2HHHhohho00001ALibya#LY.BA0c2BABenghazi000018Nauru#NR.AB0c2ABAnabar00001AEurope2#EU.GR0c2GRGreece00001DNewWorld#1110c2KGKyrgyzstan000018Nevada#0210c2MIMineral000016Iowa#0250c2CACalhoun00001BAfrica#0300c2MRMauritania000017Texas#3610c2ORAOrange00001ELouisiana#1050c2TATangipahoa00001ENorthCarolina#0170c2BLBladen000017Georgia#1690c2JNJones000018Kentucky#2050c2RWRowan00001CFlorida#1330c2WGWashington000018Illinois#0070c2BNBoone00001EMississippi#1150c2POPontotoc000026PuertoRico#1250c2SGSan Germ&aacute;n00001FPennsylvania#0810c2LYLycoming000016Idaho#0170c2BRBonner000018Arkansas#1050c2PEPerry000020SpainProvinces#0440c2SVSevilla000018Oregon#0190c2DODouglas00001CTennessee#0210c2CHCheatham00001DColorado#1130c2SMSan Miguel00001AMontana#0830c2RIRichland00001CAlabama#1290c2WSWashington000016China#180c2GZGuizhou000017Belarus#020c2HOHomyel000030NorthIreland#150c2DNDungannon and South Tyrone000025USASouthEastRegion#220c2LALouisiana00001ELuxembourg#040c2LULuxembourg00001CWales#160c2PEPembrokeshire000018Romania#300c2PHPrahova00001AJamacia#010c2CLClarendon00001CColombia#020c2ANTAntioquia000023NorthKorea#060c2HWNHwanghae-namdo000019Turkey#850c2ZOZonguldak000022WorldwithCountries#880c2ZMZambia00001ELiechtenstein#010c2BABalzers000022MarshallIsland#MH.MH.EB0c2EBEbon00001CRussia#RU.ST0c2STStavropol000019Uganda#UG.LW0c2LWLuwero00001CRussia#RU.AS0c2ASAstrakhan000018Guinea#GN.BF0c2BFBoffa00001AThailand#TH.SA0c2SASatun000024TrinidadandTobago#TT.TO0c2TOTobago00001DVietnam#VN.BD0c2BDBinh Dinh000018Angola#AO.ZA0c2ZAZaire00002CBrazilRegion#BR.CW0c2CWCentral West Region00001FBurkinaFaso#BF.NR0c2NRNahouri000017NewWorld#1120c2LALaos00001BWashington#0570c2SASkagit000018Indiana#1590c2TPTipton00001ENorthCarolina#1990c2YNYancey00001FVirginia#1010c2KWKing William00001DRhodeIsland#0010c2BRBristol000018Kansas#1530c2RARawlins00001DIllinois#1890c2WSWashington00001BMissouri#1090c2LALawrence000021California#0130c2CNContra costa000018Texas#1810c2GRYGrayson000017Ohio#1430c2SASandusky000018Nebraska#1130c2LOLogan00001BMinnesota#0410c2DUDouglas00001CKentucky#0250c2BHBreathitt000018Michigan#0350c2CLClare00001ESpainProvinces#0450c2SOSoria00001BWisconsin#0970c2PRPortage000027Manitoba#CA.MB.WI0c2WIWinnipeq Region000017China#190c2LNLiaoning000017Belarus#030c2HRHrodna00001FNorthIreland#160c2FEFermanagh00001ALuxembourg#050c2MEMersch000014Wales#170c2POPowys00001BRomania#310c2SJS&#259;laj000018Jamacia#020c2HAHanover000019Colombia#030c2ARAArauca000017Ecuador#170c2YPastaza000023NorthKorea#070c2HWBHwanghae-bukto000017Turkey#860c2ARArdahan000018SouthKorea#010c2CJJeju000024WorldwithCountries#890c2ZWZimbabwe00001DLiechtenstein#020c2ESEschen00002BNewBrunswick#CA.NB.MR0c2MRMiramichi River00002APolandCounties#PL.SL.CM0c2SCMCzestochowa000025PolandCounties#PL.PM.GM0c2PGMGdansk000028PolandCounties#PL.PD.BM0c2PBMBialystok000027CentralAmerica2#CE.PR0c2PRPuerto Rico00001CSenegal#SN.DB0c2DBDiourbel000019Uganda#UG.MN0c2MNMukono00001EThailand#TH.SB0c2SBSing Buri000031DemocraticRepublicoftheCongo#CD.SK0c2SKSud-Kivu00001CNamibia#NA.OK0c2OKOkavango000018Nigeria#NG.ON0c2ONOndo000018Alabama#1310c2WIWilcox00001BNewWorld#1130c2MYMalaysia000014Nevada#0230c2NYNye000016Iowa#0270c2CRCarroll000018Africa#0320c2MAMorocco00001BTexas#3630c2PALPalo Pinto00001ALouisiana#1070c2TETensas000021NorthCarolina#0190c2BSBrunswick000017Georgia#1710c2LALamar00001AKentucky#2070c2RSRussell000018Illinois#0090c2BRBrown00001EMississippi#1170c2PSPrentiss000027PuertoRico#1270c2SJSan Juan (capital)00001DPennsylvania#0830c2MKMcKean000019Texas#0010c2ANDAnderson00001AIdaho#0190c2BVBonneville00001BArkansas#1070c2PHPhillips000022SpainProvinces#0460c2TATarragona000018Oregon#0210c2GIGilliam00001BTennessee#0230c2CSChester00001BColorado#1150c2SESedgwick00001BMontana#0850c2RORoosevelt00001ELiechtenstein#030c2GAGamprin000019China#200c2NMNei Mongol000019Belarus#040c2MAMahilyow00001BNorthIreland#170c2LRLarne00001BMalta#010c2GHG&#295;awdex00001CLuxembourg#060c2CLClervaux000018Taiwan#010c2CGChanghua000021Wales#180c2RTRhondda Cynon Taff00001ARomania#320c2SMSatu Mare000023Colombia#040c2ATLAtl&aacute;ntico000019Ecuador#180c2PPichincha000021NorthKorea#080c2KAEKaes&#335;ng00001BTurkey#870c2BRBart&#305;n000022WorldwithCountries#900c2GMGambia000029CentralAfricanRepublic#CF.VK0c2VKVakaga000018Somalia#SO.BR0c2BRBari00001DRussia#RU.SV0c2SVSverdlovsk000017Russia#RU.TL0c2TLTula000018Uganda#UG.NE0c2NENebbi000020Russia#RU.BK0c2BKBashkortostan000017Iran#IR.SM0c2SMSemnan00001EVietnam#VN.TG0c2TGTien Giang000049Ethiopia#ET.SN0c2SNSouthern (Nations,Nationalities and People's Region)000025DenmarkRegion#DK.ND0c2NDNordjylland000028WesternSahara#AF.WS0c2WSWestern Sahara00001BEthiopia#ET.AM0c2AMAmhara000017Togo#TG.CE0c2CECentre00001BEurope2#EU.GU0c2GUGuersey00001BNewWorld#1140c2MNMongolia00001DWashington#0590c2SKSkamania000017Indiana#1610c2UNUnion00001CVirginia#1030c2LALancaster00001BAfrica#0330c2MZMozambique00001ARhodeIsland#0030c2KEKent000015Kansas#1550c2RNReno000018Illinois#1910c2WYWayne000018Missouri#1110c2LELewis00001ECalifornia#0150c2DEDel Norte000016Texas#1830c2GREGregg000015Ohio#1450c2SCScioto000017Nebraska#1150c2LULoup00001DMinnesota#0430c2FAFaribault00001FKentucky#0270c2BGBreckinridge00001AMichigan#0370c2CNClinton00001FSpainProvinces#0470c2TETeruel000019Wisconsin#0990c2PCPrice00001DLiechtenstein#040c2MAMauren00001AChina#210c2NXNingxia Hui00001ENorthIreland#180c2LMLimavady00001CFinland#010c2AL&Aring;land000016Malta#020c2KEKemmuna00001CLuxembourg#070c2DIDiekirch000016Taiwan#020c2CHChiayi000019Lithuania#560c2ALAlytus000016Wales#190c2SWSwansea000016Romania#330c2SBSibiu00001BJamacia#040c2MAManchester00001AEcuador#190c2TTungurahua000024NorthKorea#090c2KANKangw&#335;n-do00001FTurkey#880c2IGI&#287;d&#305;r000020SouthKorea#030c2CBJeollabuk-do000021WorldwithCountries#910c2CGCongo000023MarshallIsland#MH.MH.EE0c2EEEbeya000024Alberta#CA.AB.AS0c2ASAlberta South00002CDistrictofColumbia#US.DC.SE0c2SESouth East00001ARwanda#RW.OU0c2OUWestern00001BLaos#LA.XS0c2XSXaisomboun000022Guyana#GY.PT0c2PTPotaro-Siparuni000018Jordan#JO.AJ0c2AJAjlun00001BRussia#RU.BL0c2BLBelgorod00001AChina2#CN.QH0c2QHQinghai00001DVietnam#VN.TH0c2THThanh Hoa00001BThailand#TH.RN0c2RNRanong00001BEthiopia#ET.SO0c2SOSomali000019Lebanon#LE.BI0c2BIBeqaa000021Lebanon#LE.AS0c2ASNorth Lebanon00001DVietnam#VN.BG0c2BGBac Giang000022Thailand#TH.AC0c2ACAmnat Charoen000026BurkinaFaso#BF.PA0c2PAPassor&eacute;000019Montana#0870c2RSRosebud000019Alabama#1330c2WNWinston000018NewWorld#1150c2NPNepal000013Iowa#0290c2CSCass000018Africa#0340c2NANamibia000017Texas#3650c2PANPanola00001ELouisiana#1090c2TRTerrebonne000020NorthCarolina#0210c2BUBuncombe000018Georgia#1730c2LNLanier00001FAlaska#0130c2AEAleutians East000018Kentucky#2090c2SCScott000019Illinois#0110c2BUBureau00001DMississippi#1190c2QUQuitman000020PuertoRico#1290c2SLSan Lorenzo00001DPennsylvania#0850c2MEMercer000018Texas#0030c2ANRAndrews000018Idaho#0210c2BUBoundary000017Arkansas#1090c2PIPike00001FSpainProvinces#0480c2TOToledo000016Oregon#0230c2GRGrant00001DTennessee#0250c2CBClaiborne000019Colorado#1170c2SUSummit00002DIceland#280c2SKSkagafjar&eth;ars&yacute;sla00001ELiechtenstein#050c2PLPlanken000016Belarus#060c2MIMinsk00002FSaintVincentandtheGrenadines#010c2CHCharlotte00001DNorthIreland#190c2LBLisburn000014Malta#030c2MAMalta00001BLuxembourg#080c2RERedange00001DTaiwan#030c2CSChiayi (City)000019Lithuania#570c2KUKaunas000016Wales#200c2TFTorfaen000018Romania#340c2SVSuceava000020Ecuador#200c2ZZamora-Chinchipe00001CTurkey#890c2KBKarab&uuml;k000025WorldwithCountries#920c2MIMauritius000032DemocraticRepublicoftheCongo#CD.BC0c2BCBas-Congo00001EHongKong#HK.TW0c2TWTsuen Wan000018Jordan#JO.BA0c2BABalqa00001CMacedonia#MK.KX0c2KXKarpos000025Macedonia#MK.MD0c2MDMakedonski Brod00001BRussia#RU.UD0c2UDUdmurtia000023CoteDivoire#CI.MC0c2MCMoyen-Comoe000017Oman#OM.JA0c2JADhofar00001ANamibia#NA.ON0c2ONOshana000026Ethiopia#ET.BE0c2BEBenshangul- Gumaz00001BAlgeria#DZ.MC0c2MCMascara00001BNewWorld#1160c2PKPakistan00001EWashington#0610c2SNSnohomish00001DIndiana#1630c2VAVanderburgh000016Virginia#1050c2LELee000016Africa#0350c2NENiger00001DRhodeIsland#0050c2NPNewport000019Kansas#1570c2RPRepublic000018Illinois#1930c2WHWhite00001AMissouri#1130c2LCLincoln00001ECalifornia#0170c2ELEl Dorado000017Texas#1850c2GRIGrimes000015Ohio#1470c2SESeneca00001CNebraska#1170c2MPMcPherson00001CMinnesota#0450c2FIFillmore00001AKentucky#0290c2BIBullitt00001BMichigan#0390c2CRCrawford000021SpainProvinces#0490c2VAValencia00001AWisconsin#1010c2RARacine000027WorldwithCountries#930c2AFAfghanistan00003CIceland#290c2SHSn&aelig;fellsnes-og Hnappadalss&yacute;sla00001ELiechtenstein#060c2RURuggell000019Belarus#070c2VIVitsebsk000032SaintVincentandtheGrenadines#020c2ANSaint Andrew000021NorthIreland#200c2MFMagherafelt000019Luxembourg#090c2WIWiltz000017Taiwan#040c2HHHsinchu000020Lithuania#580c2KLKlaip&#279;da000020Wales#210c2VGVale of Glamorgan00001ARomania#350c2TRTeleorman000028NorthKorea#110c2PYBP'y&#335;ngan-bukto000015Turkey#900c2KIKilis000025SouthKorea#050c2GBChungcheongbuk-do000027Alberta#CA.AB.CA0c2CACalgary and Area000023MarshallIsland#MH.MH.WH0c2WHWotho00001DMacedonia#MK.KY0c2KYKratovo00001CMacedonia#MK.LO0c2LOLozovo000026Sudan#SD.NB0c2NBNorth Bahr Al Ghazal000019Nepal#NP.GA0c2GAGandaki000018Russia#RU.TO0c2TOTomsk000016Libya#LY.SR0c2SRSurt000030FranceDepartment#FR.PO0c2POPyrenees Orientales00001DVietnam#VN.ST0c2STSoc Trang00001EGuinea#GN.BK0c2BKBok&eacute;00001EVietnam#VN.BI0c2BIBinh Duong000021Turkmenistan#TM.DA0c2DADashoguz000024Morocco#MA.MT0c2MTMeknes-Tafilalet000019Algeria#DZ.MD0c2MDMedea000019Montana#0890c2SASanders00001ENewWorld#1170c2PHPhilippines000019Nevada#0270c2PEPershing000014Iowa#0310c2CECedar000018Africa#0360c2NGNigeria000017Texas#3670c2PARParker000019Louisiana#1110c2UNUnion000026Virginia#8300c2WLWilliamsburg (City)00001DNorthCarolina#0230c2BKBurke000019Georgia#1750c2LULaurens000019Kentucky#2110c2SHShelby00001AIllinois#0130c2CACalhoun00001CMississippi#1210c2RARankin000018Europe#0010c2ALAlbania000029PuertoRico#1310c2SSSan Sebasti&aacute;n00001EPennsylvania#0870c2MIMifflin000019Texas#0050c2ANGAngelina000015Idaho#0230c2BTButte00001BArkansas#1110c2POPoinsett000023SpainProvinces#0500c2VLValladolid000017Oregon#0250c2HAHarney000018Tennessee#0270c2CYClay000019Colorado#1190c2TETeller000023WorldwithCountries#940c2AMArmenia000024Iceland#300c2STStrandas&yacute;sla00001DLiechtenstein#070c2SNSchaan000015China#240c2SXShanxi000031SaintVincentandtheGrenadines#030c2DASaint David00001BNorthIreland#210c2MYMoyle000027USASouthEastRegion#280c2MSMississippi00001BLuxembourg#100c2VIVianden00001ETaiwan#050c2HSHsinchu (City)000023Lithuania#590c2MRMarijampol&#279;000016Wales#220c2WXWrexham00001BRomania#360c2TMTimi&#351;000019Jamacia#070c2POPortland000021Colombia#080c2CAQCaquet&aacute;000020Ecuador#220c2USucumb&iacute;os000024NorthKorea#120c2PYOP'y&#335;ngyang000018Turkey#910c2OSOsmaniye00001ESouthKorea#060c2KWGangwon-do00001FKazakhstan#KZ.PA0c2PAPavlodar000018Jordan#JO.AM0c2AMAmman000023Macedonia#MK.KZ0c2KZKriva Palanka000021Libya#LY.SS0c2SSSabratah Surman000024Tibet#TI.NP0c2NPNyinchi Prefecture00001DThailand#TH.SG0c2SGSongkhla000038Pakistan#PK.TA0c2TAFederally Administered Tribal Areas000016Nauru#NR.AI0c2AIAiwo000018Nigeria#NG.OS0c2OSOsun00001BEurope2#EU.IE0c2IEIreland00002FSaudiArabia#SA.HS0c2HSAl Hudud Ash Shamaliyah00001CMacedonia#MK.MG0c2MGMogila00001ESudan#SD.ND0c2NDNorth Darfur00001DPhilippines#PH.LE0c2LELeyte000019Uganda#UG.MT0c2MTMoroto000017Iran#IR.TH0c2THTehran000020Thailand#TH.SH0c2SHSuphan Buri00001BEthiopia#ET.TI0c2TITigray00001BVietnam#VN.BK0c2BKBac Can000020Pakistan#PK.BA0c2BABalochistan000020Mauritius#MU.GP0c2GPGrand Port00001EBurkinaFaso#BF.NY0c2NYNayala000025NewWorld#1180c2RURussian Federation00001CWashington#0630c2SPSpokane00001CIndiana#1650c2VEVermillion00001AVirginia#1070c2LOLoudoun000020RhodeIsland#0070c2PRProvidence000015Kansas#1590c2RCRice00001CIllinois#1950c2WTWhiteside000017Missouri#1150c2LNLinn00001BCalifornia#0190c2FRFresno00001FAlaska#0160c2AWAleutians West00001ATexas#1870c2GUAGuadalupe000021Virginia#6500c2HAHampton (City)000015Ohio#1490c2SHShelby00001ANebraska#1190c2MAMadison000018Europe#0020c2ADAndorra00001CMinnesota#0470c2FRFreeborn000019Kentucky#0310c2BUButler000018Michigan#0410c2DEDelta00001FSpainProvinces#0510c2ZAZamora00001CWisconsin#1030c2RIRichland000027NewCaledonia#NC.SU.BP0c2BPBoulouparis000026WorldwithCountries#950c2AZAzerbaijan000032Iceland#310c2SMSu&eth;ur-M&uacute;las&yacute;sla000023Liechtenstein#080c2SBSchellenberg000017China#250c2SDShandong000032SaintVincentandtheGrenadines#040c2GESaint George000026NorthIreland#220c2NMNewry and Mourne00001ELuxembourg#110c2ECEchternach000017Taiwan#060c2HLHualien000026Lithuania#600c2PNPanev&#279;&#382;ys000017Romania#370c2TLTulcea00001DJamacia#080c2SDSaint Andrew000018Colombia#090c2CAUCauca000014Ecuador#230c2NNapo000020NorthKorea#130c2YANYanggang-do000016Turkey#920c2YLYalova00001BFiji#FJ.NO.MC0c2MCMacuata000023MarshallIsland#MH.MH.WJ0c2WJWotje00001EAlgeria#DZ.MG0c2MGMostaganem00001CSamoa #WS.VS0c2VSVaisigano000020Guinea#GN.TO0c2TOTougu&eacute;00001BUganda#UG.NK0c2NKNakaseke00001EThailand#TH.SI0c2SISi Sa Ket000020Kuwait#KW.FA0c2FAAl Farwaniyah000018Iran#IR.AR0c2ARArdebil00001CVietnam#VN.BL0c2BLBac Lieu00001CVietnam#VN.CB0c2CBCao Bang000017Nauru#NR.BA0c2BABaiti00001DColorado#1210c2WAWashington00001AMontana#0910c2SHSheridan00001CNewWorld#1190c2SGSingapore000017Nevada#0290c2STStorey00001AIowa#0330c2CGCerro Gordo000017Africa#0380c2RWRwanda000017Texas#3690c2PAMParmer00001DLouisiana#1130c2VEVermilion000020NorthCarolina#0250c2CACabarrus000015Georgia#1770c2LELee00001AKentucky#2130c2SISimpson00001AIllinois#0150c2CRCarroll00001BMississippi#1230c2SCScott000018Europe#0030c2ATAustria000021PuertoRico#1330c2SISanta Isabel00001DPennsylvania#0890c2MOMonroe000018Texas#0070c2ARAAransas000015Idaho#0250c2CACamas000017Arkansas#1130c2PLPolk000021SpainProvinces#0520c2ZRZaragoza00001BOregon#0270c2HRHood River000019Tennessee#0290c2CKCocke000032MadagascarRegions#MG.FI.AA0c2AAAtsimo-Atsinanana000026WorldwithCountries#960c2BDBangladesh000019USA#RI0c2RIRhode Island000036Iceland#320c2SUSu&eth;ur-&THORN;ingeyjars&yacute;sla00001ELiechtenstein#090c2TNTriesen000016China#260c2SAShaanxi000033SaintVincentandtheGrenadines#050c2PASaint Patrick000022NorthIreland#230c2NWNewtownabbey000018Finland#060c2LALapland000020Luxembourg#120c2GRGrevenmacher00001FTaiwan#070c2KHKaohsiung(City)000022Lithuania#610c2SA&Scaron;iauliai000017Indonesia#010c2ACAceh000017Romania#380c2VSVaslui00001AJamacia#090c2SNSaint Ann000018Colombia#100c2CESCesar000018Ecuador#240c2DOrellana00001ANorthKorea#140c2NAMNampo00001ATurkey#930c2DUD&uuml;zce000017Somalia#SO.BY0c2BYBay00001DZambia#ZM.CO0c2COCopperbelt00001EPhilippines#PH.LG0c2LGLaguna000022PapuaNewGuinea#PG.CE0c2CECentral00001ARussia#RU.BR0c2BRBryansk00001CVietnam#VN.TN0c2TNTay Ninh00001FThailand#TH.RT0c2RTRatchaburi00001BNamibia#NA.OS0c2OSOmusati00001BNigeria#NG.PL0c2PLPlateau000018Wisconsin#1050c2RORock00001CNewWorld#1200c2LKSri Lanka00001CWashington#0650c2STStevens000016Indiana#1670c2VIVigo000019Virginia#1090c2LULouisa000020RhodeIsland#0090c2WAWashington000016Kansas#1610c2RLRiley000017Illinois#1970c2WIWill00001DMissouri#1170c2LILivingston00001ACalifornia#0210c2GLGlenn000015Texas#1890c2HAEHale000014Ohio#1510c2STStark00001ANebraska#1210c2MEMerrick000018Europe#0040c2BYBelarus00001BMinnesota#0490c2GOGoodhue00001BKentucky#0330c2CACaldwell00001CMichigan#0430c2DIDickinson000023NewCaledonia#NC.SU.BR0c2BRBourail000022WorldwithCountries#970c2BTBhutan000022Liechtenstein#100c2TBTriesenberg000030SaintVincentandtheGrenadines#060c2GTGrenadines000020NorthIreland#240c2NDNorth Down00001ALuxembourg#130c2RMRemich000019Taiwan#080c2KCKaohsiung00001FLithuania#620c2TATaurag&#279;000017Indonesia#020c2BABali00001DRomania#390c2VLV&acirc;lcea000020Jamacia#100c2SCSaint Catherine00001FColombia#110c2CHOChoc&oacute;000028NorthKorea#150c2PYNP'y&#335;ngan-namdo000016Iraq#010c2ANAl-Anbar000019Senegal#SN.DK0c2DKDakar00001FLesotho#LS.BB0c2BBButha-Buthe000018Jordan#JO.AQ0c2AQAqaba00001CRussia#RU.TT0c2TTTatarstan00001FUK7#UK.CI0c2CIChannel Islands00001CEastTimor#TL.ER0c2ERErmera00001CUganda#UG.NM0c2NMNamutumba000025Libya#LY.TM0c2TMTarhunah Masallatah00001CTunisia#TN.JE0c2JEJendouba00001CThailand#TH.SK0c2SKSa Kaeo000024Qatar#QA.MS0c2MSMadinat Ach Shamal00001CVietnam#VN.BN0c2BNBac Ninh000021SriLanka#LK.NW0c2NWNuwara Eliya00001CNamibia#NA.OT0c2OTOshikoto000017Colorado#1230c2WLWeld00001CMontana#0930c2SBSilver Bow00001DNewWorld#1210c2TJTajikistan000017Nevada#0310c2WAWashoe000017Iowa#0350c2CHCherokee000026Africa#0400c2STSao Tome and Principe000016Texas#3710c2PECPecos00001ALouisiana#1150c2VNVernon000020NorthCarolina#0270c2CLCaldwell000019Georgia#1790c2LILiberty00001AKentucky#2150c2SPSpencer000017Illinois#0170c2CSCass00001DMississippi#1250c2SHSharkey000018Europe#0050c2BEBelgium00001DPuertoRico#1350c2TAToa Alta000021Pennsylvania#0910c2MTMontgomery000017Texas#0090c2ARCArcher000016Idaho#0270c2CNCanyon000017Arkansas#1150c2PPPope000018Oregon#0290c2JAJackson00001ATennessee#0310c2CFCoffee000026Manitoba#CA.MB.WR0c2WRWestern Region000022WorldwithCountries#980c2BNBrunei000035Iceland#340c2VBVestur-Bar&eth;astrandars&yacute;sla00001CLiechtenstein#110c2VAVaduz00001BNorthIreland#250c2OMOmagh000015Finland#080c2OUOulu00001ETaiwan#090c2CLKeelung (City)000021Lithuania#630c2TETel&scaron;iai00001BIndonesia#030c2BEBengkulu00002ABritishColumbia#010c2ACAlberni-Clayoquot000018Romania#400c2VNVrancea000020Jamacia#110c2SESaint Elizabeth000021Colombia#120c2CORC&oacute;rdoba000017Iraq#020c2BAAl-Basrah000019SouthKorea#100c2PUBusan000033NorthWestTerritories#CA.NT.DC0c2DCDiamond Capital000028PolandCounties#PL.DS.WM0c2DWMWalbrzych000029Macedonia#MK.MK0c2MKMakedonska Kamenica000026Macedonia#MK.NA0c2NAStaro Nagoricane00001CComoros #KM.AN0c2ANAnjouan000017Russia#RU.TU0c2TUTuva00001AMongolia#MN.HD0c2HDKhovd00001FSamoa #WS.FA0c2FAFaasaleleaga00002DLibya#LY.TN0c2TNTajura wa an Nawahi Al Arba00001BIran#IR.BK0c2BKKermanshah000018Wisconsin#1070c2RURusk00001BNewWorld#1220c2THThailand00001DWashington#0670c2THThurston000018Indiana#1690c2WAWabash00001CVirginia#1110c2LNLunenburg000018Africa#0410c2SNSenegal00002FAlaska#2010c2PWPrince of Wales-Outer Ketchika000016Kansas#1630c2RORooks00001DIllinois#1990c2WLWilliamson00001BMissouri#1190c2MNMcDonald00001DCalifornia#0230c2HUHumboldt00001AAlaska#0200c2ANAnchorage000015Texas#1910c2HALHall000015Ohio#1530c2SUSummit00001ANebraska#1230c2MOMorrill000027Europe#0060c2BABosnia and Herzegovina000019Minnesota#0510c2GRGrant00001BKentucky#0350c2CLCalloway000018Michigan#0450c2EAEaton000026Manitoba#CA.MB.ER0c2EREastern Region000023NewCaledonia#NC.NO.KA0c2KAKouaoua00002BWorldwithCountries#990c2MMBurma (Myanmar)000034Iceland#350c2VHVestur-H&uacute;navatnss&yacute;sla000015China#290c2YNYunnan00001ENorthIreland#260c2SBStrabane000019Bangladesh#810c2DADhaka00001CSuriname#100c2BRBrokopondo000016Taiwan#100c2KMKinmen000018Lithuania#640c2UTUtena00001AIndonesia#040c2JKJakarta000028BritishColumbia#020c2BNBulkley-Nechako000028Romania#410c2CLC&#259;l&#259;ra&#351;i00001CJamacia#120c2SJSaint James000028NorthKorea#170c2HABHamgy&#335;ng-bukto00001EIraq#030c2MUAl-Muthann&#257;000019SouthKorea#110c2SOSeoul000028PolandCounties#PL.KP.BM0c2KBMBydgoszcz000019Algeria#DZ.NA0c2NANaama000023Tanzania#TZ.ZN0c2ZNZanzibar North000018Angola#AO.HL0c2HLHuila000021PapuaNewGuinea#PG.CH0c2CHChimbu000017Russia#RU.TV0c2TVTver00001CRussia#RU.UL0c2ULUlyanovsk000017Uganda#UG.MY0c2MYMoyo00001BRussia#RU.BU0c2BUBuryatia00001BRussia#RU.CK0c2CKChukotka00001BRussia#RU.DA0c2DADagestan00001FVietnam#VN.TQ0c2TQTuyen Quang000027CaymanIslands#KY.SO0c2SOLittle Cayman000024Thailand#TH.SM0c2SMSamut Songkhram000020Madagascar#MG.MA0c2MAMahajanga00001EVietnam#VN.BP0c2BPBinh Phuoc000017Nigeria#NG.OY0c2OYOyo00001BEurope2#EU.HU0c2HUHungary00001CTennessee#0330c2COCrockett000017Colorado#1250c2YUYuma00001CMontana#0950c2SWStillwater00001FNewWorld#1230c2TMTurkmenistan00001BNevada#0330c2WPWhite Pine000018Iowa#0370c2CKChickasaw00001AAfrica#0420c2SYSeycelles000015Texas#3730c2POLPolk00001ELouisiana#1170c2WAWashington00001ENorthCarolina#0290c2CMCamden000019Georgia#1810c2LCLincoln000019Kentucky#2170c2TATaylor00001CIllinois#0190c2CHChampaign00001DMississippi#1270c2SISimpson000019Europe#0070c2BGBulgaria00001DPuertoRico#1370c2TBToa Baja00001EPennsylvania#0930c2MUMontour00001ATexas#0110c2ARSArmstrong000017Idaho#0290c2CRCaribou00001AArkansas#1170c2PRPrairie00001AOregon#0310c2JEJefferson00001BUSA#SC0c2SCSouth Carolina000039Iceland#360c2VIVestur-&Iacute;safjar&eth;ars&yacute;sla000018China#300c2GDGuangdong00001ABangladesh#820c2KHKhulna000025Australia#NT0c2NTNorthern Territory00001CSuriname#110c2CMCommewijne00001ATaiwan#110c2LKLienchiang00001ALithuania#650c2VLVilnius000018Indonesia#050c2JAJambi000020BritishColumbia#030c2CACapital000018Romania#420c2GRGiurgiu00001BJamacia#130c2SMSaint Mary00001BColombia#140c2GUVGuaviare00001FNorthKorea#180c2NAJRas&#335;n000020Iraq#040c2QAAl-Q&#257;disiyyah00001BSouthKorea#120c2INIncheon000026MarshallIsland#MH.MH.EN0c2ENEnewetak000024PolandCounties#PL.KP.TO0c2KTOTorun00001BFiji#FJ.WE.LT0c2LTLautoka000018Algeria#DZ.ML0c2MLMila000019Angola#AO.HM0c2HMHuambo00001CGuineaBissau#GW.OI0c2OIOio000019Lesotho#LS.BE0c2BEBerea00001AJordan#JO.AT0c2ATTafilah000023Philippines#PH.MA0c2MAMaguindanao00001CGabon#GA.WN0c2WNWoleu-Ntem000018Niger#NE.NI0c2NINiamey00001CHongKong#HK.EA0c2EAEastern000020Uganda#UG.NP0c2NPNakapiripirit00001ERussia#RU.CL0c2CLChelyabinsk000021Thailand#TH.SN0c2SNSakon Nakhon00001BSyria#SY.RA0c2RAAr Raqqah00001DNamibia#NA.OW0c2OWOhangwena00001DWisconsin#1090c2SCSt. Croix00001DNewWorld#1240c2UZUzbekistan00001EWashington#0690c2WKWahkiakum000018Indiana#1710c2WRWarren00001AVirginia#1130c2MAMadison00001DAfrica#0430c2SLSierra Leone000015Kansas#1650c2RHRush00001CIllinois#2010c2WBWinnebago000018Missouri#1210c2MOMacon00001DCalifornia#0250c2IMImperial000019Texas#1930c2HAMHamilton000017Ohio#1550c2TRTrumbull000018Nebraska#1250c2NANance000019Georgia#0010c2APAppling000018Europe#0080c2HYCroatia00001CMinnesota#0530c2HEHennepin00001EAustralia2#VIC0c2VICVictoria00001BKentucky#0370c2CBCampbell000018Michigan#0470c2EMEmmet000019USA#SD0c2SDSouth Dakota00002FIceland#370c2VSVestur-Skaftafellss&yacute;sla000023USARegion#010c2NENorthEast Region000015China#310c2HAHainan000015World#EU0c2EUEurope00001CBangladesh#830c2RJRajshahi000019Suriname#120c2CRCoronie000016Taiwan#120c2MLMiaoli000020BritishColumbia#040c2CRCariboo000016Romania#430c2IFIlfov00001DJamacia#140c2STSaint Thomas000021Colombia#150c2GUAGuain&iacute;a000023Iraq#050c2SUAs-Sulaym&#257;niyyah00001FArgentina#010c2BABuenos Aires00001FSouthKorea#130c2KGGyeonggi-do000020Europe2#EU.IM0c2IMIsles of Man00001FSaudiArabia#SA.JF0c2JFAl Jawf00001DHongKong#HK.WC0c2WCWan Chai000020Sudan#SD.NK0c2NKNorth Kurdufan00001FPhilippines#PH.MB0c2MBMasbate00001DMongolia#MN.HG0c2HGKhovsgol000022CoteDivoire#CI.NC0c2NCN'zi-Comoe000022Cyprus2#CY.TC0c2TCTurkish Cyprus00001BThailand#TH.RY0c2RYRayong00001EThailand#TH.SO0c2SOSukhothai000026TrinidadandTobago#TT.VI0c2VIVictoria00001BVietnam#VN.BR0c2BRBen Tre00001ETennessee#0350c2CMCumberland00001DMontana#0970c2SGSweet Grass00001ANewWorld#1250c2VNVietnam000015Iowa#0390c2CLClarke000018Africa#0440c2SOSomalia000017Texas#3750c2POTPotter00001BLouisiana#1190c2WEWebster000020NorthCarolina#0310c2CRCarteret000016Georgia#1830c2LOLong000017Kentucky#2190c2TOTodd00001CIllinois#0210c2CIChristian00001BMississippi#1290c2SMSmith00001FEurope#0090c2CZCzech Republic000022PuertoRico#1390c2TJTrujillo Alto000022Pennsylvania#0950c2NONorthampton000019Texas#0130c2ATAAtascosa000016Idaho#0310c2CSCassia00001AArkansas#1190c2PUPulaski00001AOregon#0330c2JOJosephine000027NorthAmerica_WOCentral#0050c2CACanada000023USARegion#020c2NWNorthWest Region000016China#320c2SCSichuan00001EBangladesh#840c2CGChittagong00001BSuriname#130c2MAMarowijne000016Taiwan#130c2NTNantou00001FIndonesia#070c2JTCentral Java000026BritishColumbia#050c2CNCentral Coast000019Jamacia#150c2TRTrelawny000018Colombia#160c2HUIHuila000018Norway#010c2AKAkershus000018Iraq#060c2BBB&#257;bil00001CArgentina#020c2CTCatamarca000024SouthKorea#140c2KBGyeongsangbuk-do00001DBhutan#BT.PM0c2PMPemagatsel000031DemocraticRepublicoftheCongo#CD.BN0c2BNBandundu00001AZambia#ZM.EA0c2EAEastern00002APhilippines#PH.MC0c2MCOccidental Mindoro000019Russia#RU.TY0c2TYTyumen000028HongKong#HK.CW0c2CWCentral and Western00001BRussia#RU.CN0c2CNChechnya000022Vietnam#VN.TT0c2TTThua Thien Hue00001AGuinea#GN.CK0c2CKConakry000021Thailand#TH.SP0c2SPSamut Prakan000019Nauru#NR.AR0c2ARAnibare000018Wisconsin#1110c2SASauk000019NewWorld#1260c2TWTaiwan000020Washington#0710c2WLWalla walla000019Indiana#1730c2WIWarrick00001AVirginia#1150c2MTMathews00001DAfrica#0450c2ZASouth Africa000018Kansas#1670c2RSRussell00001BIllinois#2030c2WFWoodford00001AMissouri#1230c2MDMadison000019California#0270c2INInyo000019Texas#1950c2HANHansford000019Ohio#1570c2TUTuscarawas000019Nebraska#1270c2NENemaha00001AGeorgia#0030c2ATAtkinson000018Europe#0100c2DKDenmark00001BMinnesota#0550c2HUHouston00001BKentucky#0390c2CRCarlisle00001AMichigan#0490c2GEGenesee000019SouthKorea#150c2TGDaegu000023USARegion#030c2SESouthEast Region00002AUSASouthEastRegion#370c2NCNorth Carolina00001BBangladesh#850c2BABarisal000021Finland#130c2SFSouthern Finland00001ASuriname#140c2NINickerie000016Taiwan#140c2PHPenghu00001CIndonesia#080c2JIEast Java000029BritishColumbia#060c2CKCentral Kootenay000016Albania#400c2BRBerat00001DJamacia#160c2WEWestmoreland00001DColombia#170c2LAGLa Guajira00001ANorway#020c2AAAust-Agder00001AIraq#070c2BGBaghd&#257;d000018Argentina#030c2CCChaco000026PolandCounties#PL.DS.WR0c2DWRWroclaw000023FrenchGuiana#GF.CY.OU0c2OUOuanary00001BEurope2#EU.HY0c2HYCroatia00001AEurope2#EU.JE0c2JEJersey00001CBrunei#BN.TE0c2TETemburong00001ABhutan#BT.PN0c2PNPunakha000027Philippines#PH.LN0c2LNLanao del Norte00002APhilippines#PH.MD0c2MDMisamis Occidental00001FMongolia#MN.GS0c2GSGovisumber00001AChina2#CN.SA0c2SAShaanxi000019Guinea#GN.DB0c2DBDabola00001AThailand#TH.TG0c2TGTrang00001DSyria#SY.RD0c2RDRif Dimashq00001CTennessee#0370c2DADavidson000017Montana#0990c2TETeton00001CNewWorld#1270c2HKHong Kong000013Iowa#0410c2CYClay000016Africa#0460c2SDSudan000019Texas#3770c2PREPresidio000024Louisiana#1210c2WBWest Baton Rouge000024Virginia#8400c2WTWinchester (City)00001FNorthCarolina#0330c2CSCaswell000019Georgia#1850c2LWLowndes000018Kentucky#2210c2TRTrigg000018Illinois#0230c2CLClark00001BMississippi#1310c2STStone000018Europe#0110c2EEEstonia00001BPuertoRico#1410c2UTUtuado000025Pennsylvania#0970c2NTNorthumberland000017Texas#0150c2AUSAustin000015Idaho#0330c2CLClark00001BArkansas#1210c2RARandolph000018Oregon#0350c2KLKlamath000020SouthKorea#160c2CNJeollanam-do000023USARegion#040c2SWSouthWest Region000017Peru#010c2AMAAmazonas000018Uruguay#010c2ARArtigas00001ABangladesh#860c2SYSylhet000020Finland#140c2EFEastern Finland000016Suriname#150c2PRPara000018Taiwan#150c2PTPingtung000029BritishColumbia#070c2COCentral Okanagan00001BAlbania#410c2DIDib&euml;r000019Jamacia#170c2KIKingston000018Iraq#080c2DADah&#363;k000019Argentina#040c2CHChubut000019Fiji#FJ.WE.ND0c2NDNandi000024MarshallIsland#MH.MH.ER0c2ERErikub000020FrenchGuiana#GF.SL.MN0c2MNMana00001CBurkinaFaso#BF.PO0c2POPoni00002AMorocco#MA.OL0c2OLOued Ed Dahab-Lagouira00002FTanzania#TZ.ZS0c2ZSZanzibar Central and South000019Brunei#BN.BE0c2BEBelait00001EMacedonia#MK.NG0c2NGNegotino00001CRussia#RU.VG0c2VGVolgograd00001BUganda#UG.NT0c2NTNtungamo00001ATunisia#TN.KB0c2KBKebili00001CVietnam#VN.TV0c2TVTra Vinh000017Nauru#NR.UA0c2UAUaboe00001DThailand#TH.SR0c2SRSaraburi00001EVietnam#VN.BU0c2BUBinh Thuan00001BVietnam#VN.DA0c2DADa Nang000024SaoTomeandPrincipe#ST.LE0c2LELemba000018Nauru#NR.AT0c2ATAnetan00001AWisconsin#1130c2SWSawyer000018NewWorld#1280c2MOMacau00001CWashington#0730c2WAWhatcom00001CIndiana#1750c2WSWashington00001EVirginia#1170c2MEMecklenburg00001AAfrica#0470c2SZSwaziland000017Kansas#1690c2SASaline000019Missouri#1250c2MEMaries000019California#0290c2KEKern000019Texas#1970c2HARHardeman000026Virginia#6600c2HRHarrisonburg (City)000014Ohio#1590c2UNUnion00001BNebraska#1290c2NUNuckolls000017Georgia#0050c2BABacon000018Europe#0120c2FIFinland00001BMinnesota#0570c2HBHubbard00001AKentucky#0410c2COCarroll00001AMichigan#0510c2GLGladwin000027NewCaledonia#NC.NO.KG0c2KGKaala-Gomen000036SaintKittsandNevis#010c2CCChrist Church Nichola Town000021Argentina#050c2CBC&oacute;rdoba000025SouthKorea#170c2GNChungcheongnam-do000021USARegion#050c2CRCentral Region000015Peru#020c2ANCAncash00001AUruguay#020c2CACanelones000020Finland#150c2WFWestern Finland00001CSuriname#160c2PMParamaribo000018Taiwan#160c2THTaichung00001DIndonesia#100c2YOYogyakarta000029BritishColumbia#080c2CSColumbia-Shuswap00001CAlbania#420c2DRDurr&euml;s000017Colombia#190c2METMeta000018Norway#040c2BUBuskerud00001FIraq#090c2DQDh&#299; Q&#257;r000016Mali#ML.SG0c2SGSegou00001AZambia#ZM.WE0c2WEWestern000029Macedonia#MK.MR0c2MRMavrovo and Rostusa00001ASudan#SD.NO0c2NONorthern000019Uganda#UG.OK0c2OKKoboko00001AVanuatu#VU.PM0c2PMPenama00001AChina2#CN.SC0c2SCSichuan000022FranceDepartment#FR.RH0c2RHRhone00001DVietnam#VN.VC0c2VCVinh Phuc000021Thailand#TH.SS0c2SSSamut Sakhon000021Vietnam#VN.BV0c2BVBaRia-VungTau00001DVietnam#VN.DB0c2DBDien Bien00001BTennessee#0390c2DEDecatur000017Montana#1010c2TOToole00001ANewWorld#1290c2ALAlbania000016Iowa#0430c2CTClayton000019Africa#0480c2TZTanzania000016Texas#3790c2RAIRains000020Louisiana#1230c2WCWest Carroll00001FNorthCarolina#0350c2CTCatawba000019Georgia#1870c2LPLumpkin00001AKentucky#2230c2TITrimble000017Illinois#0250c2CYClay00001FMississippi#1330c2SUSunflower000017Europe#0130c2FRFrance00001EPuertoRico#1430c2VAVega Alta00001CPennsylvania#0990c2PEPerry000017Texas#0170c2BAIBailey00001AIdaho#0350c2CWClearwater00001EArkansas#1230c2SFSt. Francis000015Oregon#0370c2LALake000032SaintKittsandNevis#020c2ASSaint Anne Sandy Point00001DArgentina#060c2CNCorrientes00001BSouthKorea#180c2KJGwangju000014China#360c2TBTibet000017Peru#030c2APUApurimac00001CUruguay#030c2CLCerro Largo00001BSuriname#170c2SASaramacca000022USANorthWestRegion#020c2AKAlaska00001FTaiwan#170c2TGTaichung (City)000022Indonesia#110c2KBWest Kalimantan000029BritishColumbia#090c2CMComox-Strathcona000018Albania#430c2ELElbasan000020Colombia#200c2NARNari&ntilde;o000018Norway#050c2FIFinnmark00001EIraq#100c2DIDiy&#257;l&#257;00002DSierraLeone#SL.WE.WR0c2WRWestern Area Rural000027FrenchGuiana#GF.SL.MP0c2MPMaripasoula000038NorthWestTerritories#CA.NT.WB0c2WBWood Buffalo Country00001CMauritania#MR.AD0c2ADAdrar000018Jordan#JO.AZ0c2AZZarqa00001DMacedonia#MK.NI0c2NIVinitsa000020CoteDivoire#CI.MR0c2MRMarahoue00001AGabon#GA.ES0c2ESEstuaire00001BChina2#CN.SD0c2SDShandong000018Guinea#GN.CO0c2COCoyah000020Thailand#TH.ST0c2STSurat Thani00001BLibya#LY.BU0c2BUAl Butnan000018Iran#IR.BS0c2BSBushehr00001AVietnam#VN.CM0c2CMCa Mau00001BVietnam#VN.DC0c2DCDac Lac00001BWisconsin#1150c2SHShawano00001ANewWorld#1300c2ADAndorra00001CWashington#0750c2WHWhitman000017Indiana#1770c2WYWayne00001CVirginia#1190c2MIMiddlesex000015Africa#0490c2TGTogo000016Kansas#1710c2SCScott000019Missouri#1270c2MAMarion00001ACalifornia#0310c2KIKings000017Texas#1990c2HADHardin000017Ohio#1610c2VWVan Wert00001CNetherland#0010c2DRDrenthe000017Nebraska#1310c2OTOtoe000017Georgia#0070c2BKBaker000018Europe#0140c2DEGermany00001AMinnesota#0590c2ISIsanti000019Kentucky#0430c2CTCarter00001AMichigan#0530c2GOGogebic000033SaintKittsandNevis#030c2GBSaint George Basseterre000023Argentina#070c2DFDistrito Federal00001BSouthKorea#190c2TJDaejeon000017Peru#040c2AREArequipa000018Uruguay#040c2COColonia00001CSuriname#180c2SISipaliwini000016Taiwan#180c2TATainan000023Indonesia#120c2KSSouth Kalimantan000028BritishColumbia#100c2CVCowichan Valley000015Albania#440c2FRFier000025Colombia#210c2NSANorte de Santander000017Norway#060c2HEHedmark000018Iraq#110c2ARArb&#299;l000025CaymanIslands#KY.CB0c2CBCayman Brac00001EThailand#TH.AT0c2ATAng Thong00001ACongo#CG.PL0c2PLPlateaux00001BEurope2#EU.IS0c2ISIceland000019Algeria#DZ.MS0c2MSMsila00001DLiberia#LR.RG0c2RGRiver Gee000017Bhutan#BT.PR0c2PRParo000019Laos#LA.HO0c2HOHouaphan000017Benin#BJ.OU0c2OUOueme00001FVietnam#VN.TY0c2TYThai Nguyen00001AThailand#TH.SU0c2SUSurin000018Thailand#TH.TK0c2TKTak00001BVietnam#VN.CN0c2CNCan Tho00001ATennessee#0410c2DKDeKalb00001AMontana#1030c2TRTreasure00001ANewWorld#1310c2ATAustria000016Iowa#0450c2CNClinton000018Texas#3810c2RANRandall000022Louisiana#1250c2WFWest Feliciana00001FNorthCarolina#0370c2CHChatham00001AGeorgia#1890c2MCMcduffie000018Kentucky#2250c2UNUnion00001ENetherland#0020c2FLFlevoland00001AIllinois#0270c2CNClinton000022Mississippi#1350c2TATallahatchie000017Europe#0150c2GRGreece00001EPuertoRico#1450c2VBVega Baja000023Pennsylvania#1010c2PHPhiladelphia000018Texas#0190c2BANBandera000016Idaho#0370c2CUCuster000019Arkansas#1250c2SASaline000015Oregon#0390c2LELane00002FMadagascarRegions#MG.FI.AM0c2AMAmoron'i Mania000033SaintKittsandNevis#040c2GGSaint George Gingerland000024Argentina#080c2EREntre R&iacute;os000024SouthKorea#200c2KNGyeongsangnam-do000017Peru#050c2AYAAyacucho000018Uruguay#050c2DUDurazno000018Suriname#190c2WAWanica00001DTaiwan#190c2TNTainan (City)000025Indonesia#130c2KTCentral Kalimantan000026BritishColumbia#110c2EKEast Kootenay000021Albania#450c2GJGjirokast&euml;r00001BColombia#220c2PUTPutumayo000019Norway#070c2HOHordaland000015Iraq#120c2KAKarbala000019Europe2#EU.IT0c2ITItaly000022Tanzania#TZ.ZW0c2ZWZanzibar West00001DUzbekistan#UZ.JI0c2JIJizzax000015UK7#UK.WA0c2WAWales000025Philippines#PH.LS0c2LSLanao del Sur00002FCentralAmerica2#CE.AG0c2AGAntigua and Barbuda00001CMongolia#MN.HN0c2HNKhentii000018Uganda#UG.PD0c2PDPader000019Benin#BJ.PL0c2PLPlateau000017Tunisia#TN.KF0c2KFKef00001CLibya#LY.BW0c2BWBani Walid00001DWisconsin#1170c2SESheboygan00001ANewWorld#1320c2BYBelarus00001BWashington#0770c2YAYakima000017Indiana#1790c2WEWells00001DVirginia#1210c2MOMontgomery000018Africa#0510c2TNTunisia000019Kansas#1730c2SGSedgwick000019Missouri#1290c2MCMercer000019California#0330c2LALake000017Texas#2010c2HASHarris000015Ohio#1630c2VIVinton00001ENetherland#0030c2FRFriesland000019Nebraska#1330c2PAPawnee000019Georgia#0090c2BDBaldwin000018Europe#0160c2HUHungary00001AMinnesota#0610c2ITItasca000018Kentucky#0450c2CSCasey000021Michigan#0550c2GTGrand Traverse000027MadagascarRegions#MG.TL.AD0c2ADAndroy000030SaintKittsandNevis#050c2JWSaint James Windward00001AArgentina#090c2FMFormosa000019SouthKorea#210c2ULUlsan000018Peru#060c2CAJCajamarca000017Uruguay#060c2FSFlores000013USA#AK0c2AKAlaska000016Taiwan#200c2TPTaipei000022Indonesia#140c2KIEast Kalimantan000026BritishColumbia#120c2FVFraser Valley000022Albania#460c2KOKor&ccedil;&euml;000021Colombia#230c2QUIQuind&iacute;o000026Norway#080c2MRM&oslash;re og Romsdal000017Iraq#130c2TSAt-Ta'mim00002DSierraLeone#SL.WE.WU0c2WUWestern Area Urban00002CDistrictofColumbia#US.DC.SW0c2SWSouth West000015Nauru#NR.BO0c2BOBoe00001EThailand#TH.CB0c2CBChon Buri000018Mali#ML.SK0c2SKSikasso00001DLiberia#LR.RI0c2RIRivercess000021Kazakhstan#KZ.QG0c2QGQaraghandy00001BRussia#RU.VL0c2VLVladimir000020SolomonIsland#SB.TE0c2TETemotu00001BTennessee#0430c2DIDickson000018Montana#1050c2VAValley00001ANewWorld#1330c2BEBelgium000017Iowa#0470c2CFCrawford000017Africa#0520c2UGUganda000017Texas#3830c2REAReagan000018Louisiana#1270c2WIWinn000020NorthCarolina#0390c2CECherokee00001AGeorgia#1910c2MIMcintosh000019Kentucky#2270c2WAWarren00001FNetherland#0040c2GEGelderland000018Illinois#0290c2COColes00001AMississippi#1370c2TETate000018Europe#0170c2ISIceland00001CPuertoRico#1470c2VQVieques00001BPennsylvania#1030c2PIPike000018Texas#0210c2BASBastrop000016Idaho#0390c2ELElmore000018Arkansas#1270c2SCScott000018Oregon#0410c2LILincoln000036NewfoundlandandLabrador#CA.NF.LA0c2LALabrador Region000031SaintKittsandNevis#060c2JCSaint John Capesterre000018Argentina#100c2JYJujuy000015Peru#070c2CALCallao000018Uruguay#070c2FDFlorida000014USA#AL0c2ALAlabama00001DTaiwan#210c2TCTaipei (City)00001AIndonesia#150c2LALampung00002BBritishColumbia#130c2FGFraser-Fort George00001BAlbania#470c2KUKuk&euml;s00001CColombia#240c2RISRisaralda000021EnglandRegion#010c2NENorth East000018Norway#090c2NONordland000019Iraq#140c2MAMays&#257;n000027Alberta#CA.AB.CR0c2CRCanadian Rockies000021Thailand#TH.CC0c2CCChachoengsao00001BMali#ML.TB0c2TBTombouctou00001EEthiopia#ET.DD0c2DDDire Dawa000016Congo#CG.PO0c2POPool00001CMorocco#MA.OR0c2OROriental000022Algeria#DZ.OB0c2OBOum el-Bouaghi000017Mali#ML.BA0c2BABamako00001CMacedonia#MK.OC0c2OCKocani000020Philippines#PH.LU0c2LULa Union000025CoteDivoire#CI.MV0c2MVMoyen-Cavally00001CRussia#RU.CV0c2CVChuvashia00001BChina2#CN.SH0c2SHShanghai00001DGuinea#GN.DI0c2DIDinguiraye00001EThailand#TH.UD0c2UDUttaradit00001ASyria#SY.QU0c2QUQuneitra00002CIran#IR.CM0c2CMChahar Mahall and Bakhtiari000021FranceDepartment#FR.AB0c2ABAube00001AWisconsin#1190c2TATaylor000029NewWorld#1340c2BHBosnia and Herzegovina000017Indiana#1810c2WHWhite00001FAfrica#0530c2WSWestern Sahara000017Kansas#1750c2SWSeward000019Missouri#1310c2MLMiller00001BCalifornia#0350c2LSLassen000019Texas#2030c2HRSHarrison000015Ohio#1650c2WAWarren00001ENetherland#0050c2GRGroningen00001ANebraska#1350c2PEPerkins000017Georgia#0110c2BNBanks000018Europe#0180c2IEIreland00001BMinnesota#0630c2JAJackson00001CKentucky#0470c2CHChristian00001AMichigan#0570c2GAGratiot000022NewCaledonia#NC.NO.KM0c2KMKoumac000031MadagascarRegions#MG.TL.AF0c2AFAtsimo-Andrefana00002ESaintKittsandNevis#070c2JFSaint John Figtree00001BArgentina#110c2LPLa Pampa000014Peru#080c2CUSCusco00001AUruguay#080c2LALavalleja00002AUSASouthEastRegion#450c2SCSouth Carolina000017Taiwan#220c2TTTaitung00002ABritishColumbia#140c2GVGreater Vancouver00001BAlbania#480c2LELezh&euml;000034Colombia#250c2SAPSan Andr&eacute;s and Providencia000021EnglandRegion#020c2NWNorth West00001ENorway#100c2NTNord-Trondelag00001EIraq#150c2NIN&#299;naw&#257;00001BMacedonia#MK.OD0c2ODOhrid000025Singapore#SG.NO0c2NONorth Singapore000018China2#CN.AH0c2AHAnhui000015Oregon#0430c2LNLinn000018Tennessee#0450c2DYDyer00001BMontana#1070c2WHWheatland00001BNewWorld#1350c2BGBulgaria00001CMaine#0010c2ANAndroscoggin000015Iowa#0490c2DADallas000017Africa#0540c2ZMZambia000015Texas#3850c2RELReal000017Indiana#0010c2ADAdams00001ENorthCarolina#0410c2COChowan000017Georgia#1930c2MAMacon00001DKentucky#2290c2WSWashington00001CNetherland#0060c2LILimburg000017Illinois#0310c2CKCook00001CMississippi#1390c2TPTippah000016Europe#0190c2ITItaly00001DPuertoRico#1490c2VLVillalba00001DPennsylvania#1050c2POPotter000017Texas#0230c2BAYBaylor000018Idaho#0410c2FRFranklin000019Arkansas#1290c2SESearcy000027NewCaledonia#NC.NO.KN0c2KNKon&eacute;00002CSaintKittsandNevis#080c2MCSaint Mary Cayon00001BArgentina#120c2LRLa Rioja00001CPuertoRico#010c2AJAdjuntas00001BPeru#090c2HUVHuancavelica00001AUruguay#090c2MAMaldonado000017Taiwan#230c2TYTaoyuan000025Indonesia#170c2NBWest Nusa Tenggara000028BritishColumbia#150c2KSKitimat-Stikine00001DAlbania#490c2SHShkod&euml;r00001CColombia#260c2SANSantander00001FScotlandRegion#780c2BOBorders00002FEnglandRegion#030c2YHYorkshire and the Humber000017Norway#110c2OPOppland000025ElSalvador#010c2AHAhuachap&aacute;n000018Iraq#160c2WAW&#257;sit000028Alberta#CA.AB.EA0c2EAEdmonton and Area000021FranceDepartment#FR.AD0c2ADAude000020SriLanka#LK.PR0c2PRPolonnaruwa000023Brunei#BN.BM0c2BMBrunei and Muara000020Philippines#PH.NC0c2NCCotabato00001ARussia#RU.VO0c2VOVologda00001DSamoa #WS.GE0c2GEGagaemauga000024Kiribati#KI.GI0c2GIGilbert Islands00001FGuyana#GY.BA0c2BABarima-Waini00001AMalawi#MW.KR0c2KRKaronga00002BFranceDepartment#FR.SE0c2SESeine et Marne000027NorthAmerica_WOCentral#0160c2MXMexico00001FWisconsin#1210c2TRTrempealeau00001ANewWorld#1360c2HYCroatia000019Indiana#1830c2WLWhitley000019Virginia#1250c2NENelson000019Africa#0550c2ZWZimbabwe000018Kansas#1770c2SNShawnee00001FMexico#0010c2AGAguascalientes00001EMissouri#1330c2MSMississippi000020California#0370c2LOLos Angeles000018Texas#2050c2HRTHartley000019Ohio#1670c2WSWashington000022Netherland#0070c2NONoord-Brabant000019Nebraska#1370c2PHPhelps000018Georgia#0130c2BWBarrow000017Europe#0200c2LVLatvia00001BMinnesota#0650c2KAKanabec000018Kentucky#0490c2CKClark00001CMichigan#0590c2HIHillsdale000016Iraq#170c2NAAn-Najaf000031SaintKittsandNevis#090c2PPSaint Paul Capesterre00001AArgentina#130c2MZMendoza00001DGrenada#010c2ANSaint Andrew000016Peru#100c2HUCHuanuco00001BUruguay#100c2MOMontevideo000025USASouthEastRegion#470c2TNTennessee000015Taiwan#240c2ILYilan000025Indonesia#180c2NTEast Nusa Tenggara00002ABritishColumbia#160c2KBKootenay Boundary00001CAlbania#500c2TRTiran&euml;000018Colombia#270c2SUCSucre00001FScotlandRegion#790c2CECentral000024EnglandRegion#040c2EMEast Midlands000014Norway#120c2OSOslo000022ElSalvador#020c2CACaba&ntilde;as000022Fiji#FJ.WE.NN0c2NNNadroga-Navosa00001ANigeria#NG.RI0c2RIRivers000028Philippines#PH.MN0c2MNMisamis Oriental000029Philippines#PH.ND0c2NDNegros Occidental000024CentralAmerica2#CE.BB0c2BBBarbados00001AMalawi#MW.KS0c2KSKasungu00001BMalawi#MW.LI0c2LILilongwe000019China2#CN.TA0c2TATaiwan000019Guinea#GN.DL0c2DLDalaba000018Oregon#0450c2MAMalheur00001BTennessee#0470c2FAFayette000018Montana#1090c2WIWibaux000021NewWorld#1370c2CZCzech Republic000019Maine#0030c2ARAroostook000014Iowa#0510c2DVDavis000017Africa#0560c2GMGambia00001ATexas#3870c2REDRed River000017Indiana#0030c2ALAllen000020Mexico#0020c2BABaja California00001CNorthCarolina#0430c2CYClay000019Georgia#1950c2MDMadison000018Kentucky#2310c2WYWayne000022Netherland#0080c2NHNoord-Holland00001BIllinois#0330c2CFCrawford000020Mississippi#1410c2TITishomingo00001EEurope#0210c2LILiechtenstein00001CPuertoRico#1510c2YBYabucoa000021Pennsylvania#1070c2SCSchuylkill000014Texas#0250c2BEEBee000017Idaho#0430c2FEFremont00001CArkansas#1310c2SBSebastian000033PrinceEdwardIsland#CA.PE.CS0c2CSCharlotte's Shore000020ElSalvador#030c2CHChalatenango000024Iraq#180c2SDSal&#257;h ad-D&#299;n000032SaintKittsandNevis#100c2PLSaint Paul Charlestown00001BArgentina#140c2MNMisiones00001APuertoRico#030c2ADAguada00001CGrenada#020c2DASaint David000012Peru#110c2ICAIca000020Uruguay#110c2PAPaysand&uacute;000016Taiwan#250c2YLYunlin000029BritishColumbia#170c2MWMount Waddington00001BAlbania#510c2VLVlor&euml;000019Colombia#280c2TOLTolima00002DScotlandRegion#800c2DGDumfries and Galloway000024EnglandRegion#050c2WMWest Midlands00001ENorway#130c2OT&Oslash;stfold000025SaoTomeandPrincipe#ST.LO0c2LOLobata000021Burma#MM.YA0c2YAYangon Division00001FLesotho#LS.TT0c2TTThaba-Tseka000023Philippines#PH.NE0c2NENueva Ecija00001BTanzania#TZ.IR0c2IRIringa00001DVietnam#VN.VL0c2VLVinh Long00001APalau#PW.KA0c2KAKayangel00001AWisconsin#1230c2VEVernon00001ANewWorld#1380c2DKDenmark00001BVirginia#1270c2NKNew Kent000016Africa#0570c2CGCongo000019Kansas#1790c2SDSheridan000024Mexico#0030c2BCBaja California Sur00001BMissouri#1350c2MIMoniteau00001BCalifornia#0390c2MAMadera000018Texas#2070c2HSKHaskell000022Virginia#6700c2HOHopewell (City)000014Ohio#1690c2WYWayne00001FNetherland#0090c2OVOverijssel000019Nebraska#1390c2PIPierce000018Georgia#0150c2BTBartow00001AEurope#0220c2LTLithuania00001DMinnesota#0670c2KNKandiyohi000017Kentucky#0510c2CYClay00001BMichigan#0610c2HOHoughton000018Norway#140c2RORogaland000024ElSalvador#040c2CUCuscatl&aacute;n000032SaintKittsandNevis#110c2PBSaint Peter Basseterre000021Argentina#150c2NQNeuqu&eacute;n00001DGrenada#030c2GESaint George000014Peru#120c2JUNJunin00001AUruguay#120c2RNRio Negro000020BritishColumbia#180c2NANanaimo000022Colombia#290c2VACValle del Cauca00001CScotlandRegion#810c2FIFife00001BEnglandRegion#060c2EAEast000023FranceDepartment#FR.AG0c2AGAriege000017Nauru#NR.BU0c2BUBuada000025CaymanIslands#KY.BT0c2BTBodden Town00001DThailand#TH.BR0c2BRBuri Ram000023Somalia#SO.WO0c2WOWoqooyi Galbeed00001BAlgeria#DZ.OG0c2OGOuargla000022PapuaNewGuinea#PG.WE0c2WEWestern00001BRussia#RU.VR0c2VRVoronezh00001ALibya#LY.WA0c2WAAl Wahah000019Malawi#MW.LK0c2LKLikoma00001BMalawi#MW.MA0c2MAMachinga000022Massachusetts#0010c2BABarnstable000017Oregon#0470c2MRMarion00001CTennessee#0490c2FEFentress00001DMontana#1110c2YSYellowstone00001ANewWorld#1390c2EEEstonia00001AMaine#0050c2CUCumberland000018Oklahoma#0010c2ADAdair000016Iowa#0530c2DEDecatur00001AAfrica#0580c2MUMauritius000017Texas#3890c2REVReeves00001DIndiana#0050c2BABartholomew000019Mexico#0040c2CACampeche000021NorthCarolina#0450c2CVCleveland000018Georgia#1970c2MRMarion00001AKentucky#2330c2WBWebster00001CNetherland#0100c2UTUtrecht00001DIllinois#0350c2CMCumberland00001CMississippi#1430c2TUTunica00001BEurope#0230c2LULuxembourg00001APuertoRico#1530c2YUYauco00001DPennsylvania#1090c2SNSnyder000015Texas#0270c2BELBell00001ENewHampshire#0010c2BEBelknap000013Idaho#0450c2GEGem000019Arkansas#1330c2SVSevier00001DEnglandRegion#070c2LOLondon000020Norway#150c2SOSogn og Fjordane00001FElSalvador#050c2LILa Libertad000030SaintKittsandNevis#120c2TLSaint Thomas Lowland00001CArgentina#160c2RNRio Negro00001DPuertoRico#050c2ALAguadilla00001BGrenada#040c2JOSaint John00001APeru#130c2LALLa Libertad000017Uruguay#130c2RVRivera000015USA#AR0c2ARArkansas000023Indonesia#210c2STCentral Sulawesi000027BritishColumbia#190c2NONorth Okanagan000020Colombia#300c2VAUVaup&eacute;s000020ScotlandRegion#820c2GPGrampian000025PolandCounties#PL.WN.EM0c2WEMElblag000024FranceDepartment#FR.AH0c2AHArdeche00001FMacedonia#MK.NS0c2NSNovo Selo000022Philippines#PH.MQ0c2MQMarinduque00001AUganda#UG.PL0c2PLPallisa00001FSamoa #WS.GI0c2GIGagaifomauga000019Thailand#TH.TT0c2TTTrat000019Wisconsin#1250c2VIVilas00001ANewWorld#1400c2FIFinland000018Kansas#1810c2SHSherman000018Mexico#0050c2CHChiapas000019Missouri#1370c2MRMonroe00001ACalifornia#0410c2MRMarin000015Texas#2090c2HYSHays000017Ohio#1710c2WIWilliams00001CNetherland#0110c2ZEZeeland000019Nebraska#1410c2PLPlatte00001AGeorgia#0170c2BHBen hill00001AEurope#0240c2MKMacedonia00001BMinnesota#0690c2KIKittson00001AKentucky#0530c2CNClinton000018Michigan#0630c2HUHuron000025MadagascarRegions#MG.AS.SV0c2SVSava000021EnglandRegion#080c2SESouth East00002BNorway#160c2STS&oslash;r-Tr&oslash;ndelag00001AElSalvador#060c2PALa Paz000036SaintKittsandNevis#130c2TMSaint Thomas Middle Island000018Argentina#170c2SASalta00001BGrenada#050c2MASaint Mark000019Peru#140c2LAMLambayeque000016Uruguay#140c2RORocha000026Indonesia#220c2SGSouth East Sulawesi000029BritishColumbia#200c2NRNorthern Rockies00001AColombia#310c2CIDVichada000020ScotlandRegion#830c2HIHighland000026NovaScotia#CA.NS.MD0c2MDMarine Drive00001AFiji#FJ.CE.NM0c2NMNamosi000020FranceDepartment#FR.AI0c2AIAin00001CVietnam#VN.DN0c2DNDong Nai000020Kazakhstan#KZ.QO0c2QOQyzylorda000018Nigeria#NG.AB0c2ABAbia00001ASenegal#SN.FK0c2FKFatick00001DUzbekistan#UZ.KH0c2KHXorazm000028Philippines#PH.MR0c2MROriental Mindoro00001DSerbia#RS.ZC0c2ZCWest Backa00001AMalawi#MW.MC0c2MCMchinji000020Iran#IR.WA0c2WAWest Azarbaijan000021Massachusetts#0030c2BEBerkshire000017Oregon#0490c2MOMorrow00001CTennessee#0510c2FRFranklin000019NewWorld#1410c2FRFrance000018Maine#0070c2FRFranklin00001AOklahoma#0030c2ALAlfalfa000017Iowa#0550c2DLDelaware000016Alaska#2200c2SISitka000017Delaware#0010c2KEKent000018Texas#3910c2REFRefugio000018Indiana#0070c2BEBenton00001AMexico#0060c2CIChihuahua000020NorthCarolina#0470c2CUColumbus00001CGeorgia#1990c2MEMeriwether000016Kansas#0010c2ALAllen00001AKentucky#2350c2WHWhitley000021Netherland#0120c2ZUZuid-Holland000019Illinois#0370c2DEDeKalb00001BMississippi#1450c2UNUnion000016Europe#0250c2MTMalta00001FPennsylvania#1110c2SOSomerset000016Texas#0290c2BEXBexar00001ENewHampshire#0030c2CACarroll000017Idaho#0470c2GOGooding000018Arkansas#1350c2SHSharp000021EnglandRegion#090c2SWSouth West000018Norway#170c2TETelemark000023ElSalvador#070c2UNLa Uni&oacute;n00001BArgentina#180c2SJSan Juan000020PuertoRico#070c2ABAguas Buenas00001EGrenada#060c2PASaint Patrick000013Peru#150c2LIMLima000016Uruguay#150c2SASalto000022Honduras#010c2ATAtl&aacute;ntida00002DBritishColumbia#210c2OSOkanagan-Similkameen00001BColombia#320c2CASCasanare00001FScotlandRegion#840c2LOLothian000021SierraLeone#SL.SO.BN0c2BNBonthe000020Iran#IR.EA0c2EAEast Azarbaijan00001CVietnam#VN.DO0c2DODac Nong00001DSriLanka#LK.PX0c2PXPuttalam00001DMauritania#MR.TG0c2TGTagant00002CPapuaNewGuinea#PG.WH0c2WHWestern Highlands000021HongKong#HK.WT0c2WTWong Tai Sin00001FPapuaNewGuinea#PG.EG0c2EGEnga00001BYemen#YE.HD0c2HDHadramawt00001FLibya#LY.WD0c2WDWadi al Hayat000021FranceDepartment#FR.TA0c2TATarn00001CWisconsin#1270c2WAWalworth00001ANewWorld#1420c2DEGermany00001EVirginia#1310c2NTNorthampton000016Kansas#1830c2SMSmith000025Mexico#0070c2COCoahuila de Zaragoza00001DMissouri#1390c2MYMontgomery00001DCalifornia#0430c2MIMariposa000019Texas#2110c2HEPHemphill000013Ohio#1730c2WOWood000017Nebraska#1430c2POPolk000019Georgia#0190c2BIBerrien000018Europe#0260c2MDMoldova00001FMinnesota#0710c2KOKoochiching00001DKentucky#0550c2CDCrittenden000019Michigan#0650c2INIngham000026MadagascarRegions#MG.AV.IT0c2ITItasy000015Norway#180c2TRTroms000022ElSalvador#080c2MOMoraz&aacute;n000032SaintKittsandNevis#150c2TPTrinity Palmetto Point00001BArgentina#190c2SLSan Luis000015Peru#160c2LORLoreto000019Uruguay#160c2SJSan Jose000017USA#CA0c2CACalifornia000027Croatia#010c2BBBjelovarsko-Bilogorska00001BHonduras#020c2CHCholuteca00001FIndonesia#240c2SBWest Sumatra000024BritishColumbia#220c2PRPeace River00001FColombia#330c2CUNCundinamarca00001DSierraLeone#SL.SO.BO0c2BOBo000025PolandCounties#PL.PK.KM0c2PKMKrosno00001DNunavut#CA.NU.QK0c2QKBaffin00001BBotswana#BW.GH0c2GHGhanzi00001CNauru#NR.DE0c2DEDenigomodu000019Brunei#BN.TU0c2TUTutong000019Liberia#LR.SI0c2SISinoe00001BNigeria#NG.AD0c2ADAdamawa000025Panama#PA.KM0c2KMKuna de Madungandi00001DMacedonia#MK.NV0c2NVNovatsi000029Philippines#PH.MT0c2MTMountain Province00002CPapuaNewGuinea#PG.EH0c2EHEastern Highlands000017Uganda#UG.OY0c2OYOyam00002BFranceDepartment#FR.SL0c2SLSaone et Loire000032FranceDepartment#FR.TB0c2TBTerritoire de Belfort00001FMassachusetts#0050c2BRBristol00001AOregon#0510c2MUMultnomah00002ENorthAmerica_WOCentral#0230c2USUnited States00001ATennessee#0530c2GIGibson000019NewWorld#1430c2GRGreece000017Maine#0090c2HAHancock000018Oklahoma#0050c2ATAtoka000019Iowa#0570c2DMDes Moines00001DDelaware#0030c2NENew castle000018Texas#3930c2ROBRoberts00001BIndiana#0090c2BLBlackford000017Mexico#0080c2CLColima00001ENorthCarolina#0490c2CNCraven000018Georgia#2010c2MLMiller000019Kansas#0030c2ANAnderson000018Kentucky#2370c2WOWolfe00001AIllinois#0390c2DWDe Witt00001EMississippi#1470c2WAWalthall000017Europe#0270c2MCMonaco00001FPennsylvania#1130c2SUSullivan000017Texas#0310c2BLABlanco00001FNewHampshire#0050c2CHCheshire000015Idaho#0490c2IDIdaho000018Arkansas#1370c2STStone000029NewCaledonia#NC.SU.DU0c2DUDumb&eacute;a000022NewCaledonia#NC.SU.FA0c2FAFarino00001ANorway#190c2VAVest-Agder00001EElSalvador#090c2SMSan Miguel00001DArgentina#200c2SCSanta Cruz00001CPuertoRico#090c2AIAibonito00001CPeru#170c2MDDMadre de Dios000018Uruguay#170c2SOSoriano000021Croatia#020c2SPBrodsko-Posavska00001EHonduras#030c2CLCol&oacute;n000021USANorthWestRegion#160c2IDIdaho000025BritishColumbia#230c2POPowell River000032Colombia#340c2DCBogot&aacute; (Distrito Capital)000025PolandCounties#PL.MA.KM0c2MKMKrakow000026FrenchGuiana#GF.SL.PA0c2PAPapaichton000023FranceDepartment#FR.AL0c2ALAllier00001CKyrgyzstan#KG.NA0c2NANaryn00001FThailand#TH.CM0c2CMChiang Mai00001CTunisia#TN.KR0c2KRKairouan00002BFranceDepartment#FR.SM0c2SMSeine Maritime00001FThailand#TH.UN0c2UNUdon Thani000018Syria#SY.TA0c2TATartus000018Michigan#0670c2IOIonia00002ANorthAmerica_WOCentral#0240c2GLGreenland00001CWisconsin#1290c2WSWashburn00001ANewWorld#1440c2HUHungary000021Virginia#1330c2NHNorthumberland00001CSouthDakota#0030c2AUAurora000019Kansas#1850c2SFStafford000018Mexico#0090c2DUDurango000019Missouri#1410c2MGMorgan00001ECalifornia#0450c2MEMendocino00001ATexas#2130c2HNDHenderson000016Ohio#1750c2WDWyandot00001DNebraska#1450c2RWRed Willow000016Georgia#0210c2BBBibb00001BEurope#0280c2MOMontenegro000021Minnesota#0730c2LQLac Qui Parle00001DKentucky#0570c2CMCumberland000018Norway#200c2VEVestfold000020ElSalvador#100c2SSSan Salvador00001BArgentina#210c2SFSanta Fe000016USA#TN0c2TNTennessee000017Peru#180c2MOQMoquegua000022Uruguay#180c2TATacuaremb&oacute;00002CCroatia#030c2DNDubrova&#269;ko-Neretvanska00001BHonduras#040c2CMComayagua000017Ontario#010c2ALAlgoma000020Indonesia#260c2SUNorth Sumatra00002FBritishColumbia#240c2SQSkeena-Queen Charlotte000021Colombia#350c2BOLBol&iacute;var000023ScotlandRegion#870c2SCStrathclyde00003DNorthWestTerritories#CA.NT.WR0c2WRWaterfalls Valley (Route)00002ANovaScotia#CA.NS.LR0c2LRLighthouse Route00002CFranceDepartment#FR.AM0c2AMAlpes Maritimes00001DThailand#TH.CN0c2CNChai Nat00001DSaudiArabia#SA.JZ0c2JZJizan000018Chad#TD.SA0c2SASalamat00001FKazakhstan#KZ.QS0c2QSQostanay00001DMauritania#MR.AS0c2ASAssaba00001DZimbabwe#ZW.BU0c2BUBulawayo00001BMalawi#MW.MG0c2MGMangochi00001DTunisia#TN.KS0c2KSKasserine000017Oman#OM.MA0c2MAMuscat000018Arkansas#1390c2UNUnion00001DMassachusetts#0070c2DUDukes000015Oregon#0530c2POPolk000019Tennessee#0550c2GLGiles00001ANewWorld#1450c2ISIceland000018Maine#0110c2KEKennebec000019Oklahoma#0070c2BEBeaver000018Iowa#0590c2DIDickinson000019Delaware#0050c2SUSussex00001ATexas#3950c2ROERobertson00001CNewJersey#0010c2ATAtlantic000017Indiana#0110c2BOBoone00001BMexico#0100c2GUGuanajuato000022NorthCarolina#0510c2CBCumberland000019Kansas#0050c2ATAtchison00001BKentucky#2390c2WDWoodford00001AIllinois#0410c2DODouglas00001CMississippi#1490c2WRWarren000025WorldwithCountries#1000c2KHCambodia00001CEurope#0290c2NLNetherlands000022Pennsylvania#1150c2SQSusquehanna000017Texas#0330c2BORBorden00001BNewHampshire#0070c2COCoos000019Idaho#0510c2JEJefferson00001DElSalvador#110c2SASanta Ana000026Argentina#220c2SESantiago del Estero000021PuertoRico#110c2ANA&ntilde;asco000014Peru#190c2PASPasco00001FUruguay#190c2TTTreinta y Tres000019Croatia#040c2ISIstarska00001EHonduras#050c2CPCop&aacute;n000016Ontario#020c2BRBrant000026Poland#720c2DSDolno&#347;l&#261;skie000022Cuba#010c2PRPinar del R&iacute;o00002ABritishColumbia#250c2SLSquamish-Lillooet000020Colombia#360c2BOYBoyac&aacute;00001FScotlandRegion#880c2TATayside000022FrenchGuiana#GF.CY.RK0c2RKRegina000025FranceDepartment#FR.AN0c2ANArdennes00002DFranceDepartment#FR.BD0c2BDBouches du Rhone00001DSomalia#SO.GA0c2GAGalguduud000027CentralAmerica2#CE.SV0c2SVEl Salvador00001EMacedonia#MK.PE0c2PEPetrovec00001ANepal#NP.JA0c2JAJanakpur000017UK7#UK.EN0c2ENEngland00001AChina2#CN.TJ0c2TJTianjin000022FranceDepartment#FR.SO0c2SOSomme000021Guinea#GN.DU0c2DUDubr&eacute;ka00001AGuinea#GN.FA0c2FAFaranah00001AKentucky#0590c2DADaviess000018Michigan#0690c2ISIosco00001EWisconsin#1310c2WHWashington00001ANewWorld#1460c2IRIreland00001BVirginia#1350c2NWNottoway00001CSouthDakota#0050c2BEBeadle000018Kansas#1870c2STStanton000019Mexico#0110c2GEGuerrero00001DMissouri#1430c2NMNew Madrid00001BCalifornia#0470c2MCMerced000018Texas#2150c2HIDHidalgo000023Virginia#6780c2LXLexington (City)00001DNebraska#1470c2RIRichardson00001AGeorgia#0230c2BLBleckley000022WorldwithCountries#1010c2CNChina000017Europe#0300c2NONorway000018Minnesota#0750c2LALake00001FElSalvador#120c2SVSan Vicente000023Argentina#230c2TFTierra del Fuego000014Peru#200c2PIUPiura000020Croatia#050c2KAKarlova&#269;ka00001FHonduras#060c2CRCort&eacute;s000016Ontario#030c2BUBruce000022Poland#730c2KPKujawsko-Pomorskie000021Cuba#020c2CHCiudad de La Habana000019Indonesia#280c2MAMaluku000020BritishColumbia#260c2STStikine000019Colombia#370c2CALCaldas000025ScotlandRegion#890c2WIWestern Isles000018Libya#LY.DR0c2DRDarnah000022SolomonIsland#SB.CH0c2CHChoiseul00001AChina2#CN.BJ0c2BJBeijing00001DVietnam#VN.DT0c2DTDong Thap00001DThailand#TH.CP0c2CPChumphon00001AEurope2#EU.KO0c2KOKosovo000022Tibet#TI.QP0c2QPQamdo Prefecture00001ENewHampshire#0090c2GRGrafton000016Idaho#0530c2JRJerome00001CArkansas#1410c2VBVan Buren00001DMassachusetts#0090c2ESEssex000018Oregon#0550c2SHSherman00001CTennessee#0570c2GRGrainger000018NewWorld#1470c2ITItaly000014Maine#0130c2KNKnox00001AOklahoma#0090c2BCBeckham000016Iowa#0610c2DUDubuque000019Texas#3970c2ROCRockwall00001ANewJersey#0030c2BEBergen000017Indiana#0130c2BRBrown000018Mexico#0120c2HIHidalgo000021NorthCarolina#0530c2CKCurrituck00001AGeorgia#2050c2MTMitchell000017Kansas#0070c2BABarber000019Illinois#0430c2DPDuPage000020Mississippi#1510c2WSWashington000027WorldwithCountries#1020c2TPEast Timor000017Europe#0310c2PLPoland00001CPennsylvania#1170c2TITioga000017Texas#0350c2BOSBosque00001DElSalvador#130c2SOSonsonate000021Argentina#240c2TMTucum&aacute;n00001BPuertoRico#130c2ACArecibo000013Peru#210c2PUNPuno000014USA#AZ0c2AZArizona000036Croatia#060c2KKKoprivni&#269;ko-Kri&#382;eva&#269;ka000023Honduras#070c2EPEl Para&iacute;so00001DOntario#040c2CKChatham-Kent000023Poland#740c2LD&#321;&oacute;dzkie000016Cuba#030c2MAMatanzas00001FIndonesia#290c2MUNorth Maluku000027BritishColumbia#270c2SCSunshine Coast00001CColombia#380c2MAGMagdalena00002BFrenchGuiana#GF.CY.RM0c2RMRemire Montjoly00001DFiji#FJ.CE.NT0c2NTNaitasiri000034FranceDepartment#FR.AP0c2APAlpes de Haute Provence000023BurkinaFaso#BF.SE0c2SES&eacute;no00002BPapuaNewGuinea#PG.WN0c2WNWest New Britain000029Guyana#GY.UD0c2UDUpper Demerara-Berbice00001DKazakhstan#KZ.AA0c2AAAlmaty00001ASerbia#RS.ZJ0c2ZJZajecar000018Yemen#YE.HJ0c2HJHajjah00001BBurundi#BI.KI0c2KIKirundo00001AMalawi#MW.MJ0c2MJMulanje00002CFranceDepartment#FR.TG0c2TGTarn et Garonne000025Thailand#TH.UR0c2URUbon Ratchathani00001BKentucky#0610c2EDEdmonson000017Michigan#0710c2IRIron00001CWisconsin#1330c2WUWaukesha000019NewWorld#1480c2LVLatvia000019Virginia#1370c2OROrange00001DSouthDakota#0070c2BNBennett000018Kansas#1890c2SVStevens000018Mexico#0130c2JAJalisco000019Missouri#1450c2NENewton00001ACalifornia#0490c2MOModoc000015Texas#2170c2HILHill000023Virginia#6800c2LYLynchburg (City)000017Nebraska#1490c2RORock00001AGeorgia#0250c2BEBrantley000024WorldwithCountries#1030c2GEGeorgia000019Europe#0320c2PTPortugal000025Minnesota#0770c2LWLake of the Woods000023ElSalvador#140c2USUsulut&aacute;n000019Peru#220c2SAMSan Martin000023Croatia#070c2KZKrapinsko-Zagorska00002AHonduras#080c2FMFrancisco Moraz&aacute;n000019Ontario#050c2COCochrane000019Poland#750c2LULubelskie000021Cuba#040c2IJIsla de la Juventud00001CIndonesia#300c2JRWest Java000028BritishColumbia#280c2TNThompson-Nicola00001FThailand#TH.CR0c2CRChiang Rai00001ANigeria#NG.TA0c2TATaraba00001DMacedonia#MK.PH0c2PHPehcevo00002BPapuaNewGuinea#PG.EN0c2ENEast New Britain000018Uganda#UG.RA0c2RARakai00001DMalawi#MW.NA0c2NANkhata Bay000023NewHampshire#0110c2HBHillsborough000018Idaho#0550c2KOKootenai00001DArkansas#1430c2WAWashington000020Massachusetts#0110c2FRFranklin00001AOregon#0570c2TITillamook00001ATennessee#0590c2GEGreene000020NewWorld#1490c2LNLiechtenstein000017Maine#0150c2LILincoln000019Oklahoma#0110c2BLBlaine000014Iowa#0630c2EMEmmet000018Texas#3990c2RUNRunnels00001ENewJersey#0050c2BUBurlington000019Indiana#0150c2CACarroll000017Mexico#0140c2MEMexico00001CNorthCarolina#0550c2DADare000018Georgia#2070c2MOMonroe000017Kansas#0090c2BTBarton000018Illinois#0450c2EDEdgar00001BMississippi#1530c2WYWayne000022WorldwithCountries#1040c2INIndia000018Europe#0330c2RORomania00001CPennsylvania#1190c2UNUnion000016Texas#0370c2BOIBowie00001APuertoRico#150c2ARArroyo000014Peru#230c2TACTacna000023Croatia#080c2LSLi&#269;ko-Senjska000020Honduras#090c2GDGracias a Dios000019Ontario#060c2DUDufferin000018Poland#760c2LBLubuskie00001BCuba#050c2CMCamag&uuml;ey000021Indonesia#310c2SANorth Sulawesi000028PolandCounties#PL.KP.WL0c2KWLWloclawek000021FrenchGuiana#GF.CY.RO0c2RORoura000026FrenchGuiana#GF.CY.SE0c2SESaint Elie000022CaymanIslands#KY.WB0c2WBWest Bay000020Thailand#TH.UT0c2UTUthai Thani000018Congo#CG.SA0c2SASangha000026BurkinaFaso#BF.SG0c2SGSangui&eacute;000018Algeria#DZ.OR0c2OROran00001BBhutan#BT.SG0c2SGShemgang00001DNigeria#NG.AK0c2AKAkwa Ibom00001ANigeria#NG.BA0c2BABauchi000018Somalia#SO.GE0c2GEGedo00001DMacedonia#MK.OS0c2OSOslomej000022Kazakhstan#KZ.AC0c2ACAlmaty City00001BSerbia#RS.ZL0c2ZLZlatibor000015Yemen#YE.IB0c2IBIbb000019China2#CN.SX0c2SXShanxi00002EFranceDepartment#FR.SS0c2SSSeine-Saint-Denis00001AKentucky#0630c2ELElliott00001BMichigan#0730c2IAIsabella00001BWisconsin#1350c2WPWaupaca00001CNewWorld#1500c2LTLithuania000017Virginia#1390c2PAPage00001FSouthDakota#0090c2BHBon Homme000017Kansas#1910c2SUSumner000024Mexico#0150c2MIMichoacan de Ocampo00001AMissouri#1470c2NONodaway000019California#0510c2MNMono000018Texas#2190c2HOCHockley000019Nebraska#1510c2SASaline000018Georgia#0270c2BOBrooks000015Brazil#0010c2ACAcre000026WorldwithCountries#1050c2IDIndonesia00001BEurope#0340c2SMSan Marino00001CMinnesota#0790c2LSLe Sueur000026YukonTerritory#CA.YT.KL0c2KLKlondike000015Peru#240c2TUMTumbes000020Croatia#090c2MEMe&#273;imurska000021Honduras#100c2INIntibuc&aacute;000017Ontario#070c2DRDurham000020Poland#770c2MAMa&#322;opolskie000020Indonesia#320c2SLSouth Sumatra00002CMacau#MO.MA.NF0c2NFNossa Senhora de Fatima000022FranceDepartment#FR.AS0c2ASAisne000020Thailand#TH.CT0c2CTChanthaburi000021Europe2#EU.LI0c2LILiechtenstein000027Philippines#PH.NR0c2NRNegros Oriental000019Vanuatu#VU.SE0c2SEShefa00001CTunisia#TN.ME0c2MEMedenine000023FranceDepartment#FR.ST0c2STSarthe00001EPennsylvania#1210c2VEVenango000019Texas#0390c2BRZBrazoria000020NewHampshire#0130c2MEMerrimack000015Idaho#0570c2LALatah000018Arkansas#1450c2WHWhite000014Ohio#0010c2ADAdams00001FMassachusetts#0130c2HAHampden000019Oregon#0590c2UMUmatilla00001ATennessee#0610c2GUGrundy00001DNewWorld#1510c2LULuxembourg000016Maine#0170c2OXOxford000018Oklahoma#0130c2BRBryan000016Iowa#0650c2FAFayette000015Texas#4010c2RUSRusk00001ANewJersey#0070c2CACamden000016Indiana#0170c2CSCass000018Mexico#0160c2MOMorelos000020NorthCarolina#0570c2DVDavidson00001CGeorgia#2090c2MGMontgomery000018Kansas#0110c2BBBourbon000022Virginia#6830c2MNManassas (City)00001AIllinois#0470c2EWEdwards00001DMississippi#1550c2WBWebster000018Brazil#0020c2ALAlagoas000021WorldwithCountries#1060c2IAIran000017Europe#0350c2CSSerbia00001ASlovenia#010c2PMPomurska000015USA#VA0c2VAVirginia00001FPuertoRico#170c2BCBarceloneta000016Peru#250c2UCAUcayali000027Croatia#100c2OBOsje&#269;ko-Baranjska00002AHonduras#110c2IBIslas de la Bah&iacute;a000016Ontario#080c2ELElgin00001BPoland#780c2MZMazowieckie000023Cuba#070c2CACiego de &Aacute;vila000019Indonesia#330c2BTBanten000029FrenchGuiana#GF.CY.SG0c2SGSaint Georges000015Iran#IR.FA0c2FAFars00001ESriLanka#LK.RN0c2RNRatnapura000018Liberia#LR.BG0c2BGBong000026Philippines#PH.NS0c2NSNorthern Samar000020Tanzania#TZ.KL0c2KLKilimanjaro00001EMicronesia#FM.PO0c2POPohnpei000017Palau#PW.KO0c2KOKoror000019Kentucky#0650c2ESEstill00001AMichigan#0750c2JAJackson00001CWisconsin#1370c2WRWaushara00001CNewWorld#1520c2MKMacedonia00001AVirginia#1410c2PTPatrick00001FSouthDakota#0110c2BRBrookings000017Kansas#1930c2THThomas000018Mexico#0170c2NANayarit000019Missouri#1490c2OROregon00001DCalifornia#0530c2MTMonterey000017Alaska#0500c2BEBethel000015Texas#2210c2HODHood000018Nebraska#1530c2SRSarpy000017Georgia#0290c2BRBryan000016Brazil#0030c2APAmapa000022WorldwithCountries#1070c2JPJapan000019Europe#0360c2SKSlovakia00001BMinnesota#0810c2LILincoln000027NewCaledonia#NC.SU.YA0c2YAYat&eacute;00001BSlovenia#020c2PDPodravska00001FPeru#260c2LPLima Metropolitan00002ECroatia#110c2PSPo&#382;e&scaron;ko-Slavonska000018Honduras#120c2LPLa Paz000016Ontario#090c2ESEssex000018Poland#790c2OPOpolskie000018Cuba#080c2CFCienfuegos00001CIndonesia#340c2GOGorontalo00001DSwaziland#SZ.MA0c2MAManzini000021SolomonIsland#SB.CN0c2CNCentral00001BQatar#QA.RA0c2RAAr Rayyan00002AFranceDepartment#FR.CA0c2CACotes d'Armor00001ANigeria#NG.SO0c2SOSokoto00001AGhana#GH.NP0c2NPNorthern00001DMauritania#MR.TR0c2TRTrarza000022SaudiArabia#SA.MD0c2MDAl Madinah000023Bhutan#BT.SJ0c2SJSamdrup Jongkhar000021SriLanka#LK.AD0c2ADAnuradhapura00001BNigeria#NG.AN0c2ANAnambra000023Panama#PA.KW0c2KWKuna de Wargandi00001BTanzania#TZ.KM0c2KMKigoma000023FranceDepartment#FR.SV0c2SVSavoie00001DPennsylvania#1230c2WAWarren000017Texas#0410c2BAZBrazos000021NewHampshire#0150c2RGRockingham000015Idaho#0590c2LELemhi00001BArkansas#1470c2WOWoodruff000014Ohio#0030c2ALAllen000021Massachusetts#0150c2HPHampshire000016Oregon#0610c2UNUnion00001BTennessee#0630c2HAHamblen000018NewWorld#1530c2MTMalta000019Maine#0190c2PEPenobscot000018Oklahoma#0150c2CACaddo000032Australia2#ACT0c2ACTAustralian Capital Territory000014Iowa#0670c2FLFloyd000026Alaska#2320c2SHSkagway-Hoonah-Angoon000017Texas#4030c2SABSabine00001CNewJersey#0090c2CMCape May000017Indiana#0190c2CLClark00001BMexico#0180c2NUNuevo Leon00001DNorthCarolina#0590c2DIDavie000018Georgia#2110c2MNMorgan000016Kansas#0130c2BRBrown000027Virginia#6850c2MPManassas Park (City)00001CIllinois#0490c2EFEffingham00001FMississippi#1570c2WLWilkinson000019Brazil#0040c2AMAmazonas000027WorldwithCountries#1080c2KZKazakhstan000019Europe#0370c2SLSlovenia000026MadagascarRegions#MG.TL.AY0c2AYAnosy000034MadagascarRegions#MG.FI.VF0c2VFVatovavy Fitovinany000020Slovenia#030c2KOKoro&scaron;ka000025NewWorld#010c2AGAntigua and Barbuda000020PuertoRico#190c2BQBarranquitas000023Croatia#120c2PGPrimorsko-Goranska000019Honduras#130c2LELempira00001AOntario#100c2FRFrontenac00001CPoland#800c2PKPodkarpackie000014Cuba#090c2GRGranma000022Indonesia#350c2BBBangka-Belitung000032PolandCounties#PL.LB.GM0c2LGMGorzow Wielkopolski000025FrenchGuiana#GF.CY.SI0c2SISinnamary00001CSyria#SY.SU0c2SUAs Suwayda000024FranceDepartment#FR.AV0c2AVAveyron000022CaymanIslands#KY.EE0c2EEEast End00001DBurkinaFaso#BF.TA0c2TATapoa00001CBhutan#BT.TA0c2TATashigang00001BRwanda#RW.SU0c2SUSouthern000019Nigeria#NG.BE0c2BEBenue000031CentralAmerica2#CE.TT0c2TTTrinidad &amp; Tobago00001EHongKong#HK.YL0c2YLYuen Long00001DMauritania#MR.BR0c2BRBrakna00002FCentralAfricanRepublic#CF.HK0c2HKHaute -Kotto000023CentralAmerica2#CE.BS0c2BSBahamas000025PapuaNewGuinea#PG.ES0c2ESEast Sepik00001ALaos#LA.KH0c2KHKhammouan00001ATunisia#TN.MH0c2MHMahdia000018Minnesota#0830c2LYLyon00001AKentucky#0670c2FAFayette00001CMichigan#0770c2KMKalamazoo00001DWisconsin#1390c2WNWinnebago00001ANewWorld#1540c2MVMoldova00001FVirginia#1430c2PIPittsylvania00001BSouthDakota#0130c2BWBrown000016Kansas#1950c2TRTrego000017Mexico#0190c2OAOaxaca000018Missouri#1510c2OSOsage000019California#0550c2NANapa000018Texas#2230c2HOPHopkins00001BNebraska#1550c2SUSaunders000019Georgia#0310c2BCBulloch000016Brazil#0050c2BABahia00002AWorldwithCountries#1090c2KPKorea (north)000016Europe#0380c2ESSpain00001BSlovenia#040c2SASavinjska000019NewWorld#020c2BSBahamas000012USA#TX0c2TXTexas000021USA#DC0c2DCDistrict of Columbia000028Croatia#130c2SB&Scaron;ibensko-Kninska00001CHonduras#140c2OCOcotepeque00001DAustralia#QU0c2QUQueensland000022Australia#SA0c2SASouth Australia000020Ontario#110c2GSGreater Sudbury000019Poland#810c2PDPodlaskie00001FCuba#100c2GUGuant&aacute;namo000018Indonesia#360c2PAPapua00001AEurope2#EU.MC0c2MCMonaco000022Cambodia#KH.KA0c2KASihanoukville000019Chad#TD.TA0c2TATandjile000023BurkinaFaso#BF.BA0c2BABal&eacute;00001EMacedonia#MK.PN0c2PNPlasnica000025Philippines#PH.NV0c2NVNueva Vizcaya00002AWorldwithCountries#1100c2KRKorea (south)000017Europe#0390c2SESweden000021Pennsylvania#1250c2WSWashington000019Texas#0430c2BREBrewster000020NewHampshire#0170c2STStrafford000015Idaho#0610c2LWLewis000017Arkansas#1490c2YEYell000016Ohio#0050c2ASAshland000021Massachusetts#0170c2MIMiddlesex000018Oregon#0630c2WAWallowa00001CTennessee#0650c2HMHamilton000017Italy#0010c2ABAbruzzo000019NewWorld#1550c2MCMonaco00001BMaine#0210c2PIPiscataquis00001BOklahoma#0170c2CNCanadian000017Iowa#0690c2FRFranklin00001ETexas#4050c2SAUSan Augustine00001ENewJersey#0110c2CUCumberland000016Indiana#0210c2CYClay000017Mexico#0200c2PUPuebla00001ENorthCarolina#0610c2DUDuplin000018Georgia#2130c2MUMurray000017Kansas#0150c2BUButler00001AIllinois#0510c2FAFayette00001DMississippi#1590c2WNWinston000016Brazil#0060c2CECeara00001ASlovenia#050c2ZSZasavska00001ANewWorld#030c2BBBarbados000022PuertoRico#210c2BYBayam&oacute;n00002DCroatia#140c2SMSisa&#269;ko-Moslava&#269;ka000019Honduras#150c2OLOlancho00001BCostaRica#010c2ALAlajuela000015Ontario#120c2GRGrey000019Poland#820c2PMPomorskie000017Cuba#110c2LHLa Habana000017Indonesia#370c2RIRiau000019Guinea#GN.GA0c2GAGaoual00001FThailand#TH.CY0c2CYChaiyaphum00001BEurope2#EU.MD0c2MDMoldova00001ESenegal#SN.ZG0c2ZGZiguinchor000018Cambodia#KH.KB0c2KBKep00001CBurkinaFaso#BF.SM0c2SMSoum000019Bhutan#BT.SM0c2SMSamchi000020GuineaBissau#GW.QU0c2QUQuinara000022BurkinaFaso#BF.BB0c2BBBougouriba00001EDjibouti#DJ.TA0c2TATadjourah00002ECentralAfricanRepublic#CF.HM0c2HMHaut-Mbomou000016Chad#TD.BA0c2BABatha000019Nepal#NP.KA0c2KAKarnali00001DGabon#GA.HO0c2HOHaut-Ogooue000027WorldwithCountries#1110c2KGKyrgyzstan00001CEurope#0400c2CHSwitzerland00001AMinnesota#0850c2MLMcLeod00001AKentucky#0690c2FLFleming00001BMichigan#0790c2KAKalkaska000018Wisconsin#1410c2WOWood00001AItaly#0020c2BABasilicata00001DNewWorld#1560c2MGMontenegro00001BVirginia#1450c2POPowhatan00001BSouthDakota#0150c2BUBrule00001AKansas#1970c2WBWabaunsee000025Mexico#0210c2QUQueretaro de Arteaga000018Missouri#1530c2OZOzark00001BCalifornia#0570c2NENevada000018Texas#2250c2HOUHouston00001FNebraska#1570c2SBScotts Bluff000017Georgia#0330c2BUBurke000021Brazil#0070c2DFDistrito Federal000021Slovenia#060c2PSSpodnjeposavska000018NewWorld#040c2BZBelize000015USA#CO0c2COColorado000015USA#DE0c2DEDelaware000014Japan#100c2GUGumma000025Croatia#150c2SDSplitsko-Dalmatinska000026Honduras#160c2SBSanta B&aacute;rbara00001ACostaRica#020c2CACartago00001AOntario#130c2HAHaldimand000021Poland#830c2SL&#346;l&#261;skie00001CCuba#120c2HOHolgu&iacute;n000021Indonesia#380c2SNSouth Sulawesi00001AEritrea#ER.MA0c2MAMaekel000027Kazakhstan#KZ.SK0c2SKSouth Kazakhstan00003CCentralAmerica2#CE.VC0c2VCSt. Vincent &amp; the Grenadines00001CMacedonia#MK.PP0c2PPPrilep00001ABurundi#BI.KR0c2KRKaruzi00001AMalawi#MW.NI0c2NINtchisi000021WorldwithCountries#1120c2LALaos000018Europe#0410c2UAUkraine00001CPennsylvania#1270c2WYWayne000018Texas#0450c2BRIBriscoe00001FNewHampshire#0190c2SUSullivan000017Idaho#0630c2LILincoln000018Ohio#0070c2AHAshtabula000021Massachusetts#0190c2NTNantucket000016Oregon#0650c2WSWasco00001BTennessee#0670c2HNHancock000018Italy#0030c2CACalabria00001ENewWorld#1570c2NLNetherlands000019Maine#0230c2SASagadahoc000019Oklahoma#0190c2CRCarter000016Iowa#0710c2FEFremont00001CTexas#4070c2SAJSan Jacinto000019NewJersey#0130c2ESEssex000019Indiana#0230c2CIClinton00001DMexico#0220c2QRQuintana Roo00001ENorthCarolina#0630c2DRDurham00001AGeorgia#2150c2MSMuscogee00001CNewZealand#F100c2TASTasman000016Kansas#0170c2CSChase000017Illinois#0530c2FOFord00001FMississippi#1610c2YAYalobusha00001FBrazil#0080c2ESEspirito Santo000027Slovenia#070c2DOJugovzhodna Slovenija000018NewWorld#050c2CACanada00001DPuertoRico#230c2CRCabo Rojo000018Japan#110c2HIHiroshima000021Croatia#160c2VAVara&#382;dinska000017Honduras#170c2VAValle00001CBulgaria#380c2EBlagoevgrad00001DCostaRica#030c2GUGuanacaste00001BOntario#140c2HLHaliburton000023USANorthWestRegion#300c2MTMontana000028Poland#840c2SK&#346;wi&#281;tokrzyskie000017Cuba#130c2LTLas Tunas000022Indonesia#390c2IBWest Irian Jaya000025PolandCounties#PL.LU.ZM0c2LZMZamosc00002BNewBrunswick#CA.NB.AC0c2ACAcadian Coastal00001ATunisia#TN.NB0c2NBNabeul00001BVietnam#VN.YB0c2YBYen Bai000018Liberia#LR.BM0c2BMBomi00001BTanzania#TZ.KR0c2KRKagera000016Brazil#0090c2GOGoias000025WorldwithCountries#1130c2MYMalaysia00001FEurope#0420c2UKUnited Kingdom00001CMinnesota#0870c2MAMahnomen000018Kentucky#0710c2FOFloyd000017Michigan#0810c2KNKent000018Italy#0040c2CMCampania000019NewWorld#1580c2NONorway000020Virginia#1470c2PEPrince Edward00001DSouthDakota#0170c2BFBuffalo000018Kansas#1990c2WAWallace000020Mexico#0230c2SASan Luis Potosi00001BMissouri#1550c2PMPemiscot00001BCalifornia#0590c2OROrange000017Texas#2270c2HOWHoward000026Virginia#6900c2MVMartinsville (City)000019Nebraska#1590c2SESeward000017Georgia#0350c2BSButts000026MadagascarRegions#MG.AS.DI0c2DIDiana000023WestEuropeanRegion#010c2BEBelgium000023Slovenia#080c2LJOsrednjeslovenska00001CNewWorld#060c2CRCosta Rica000017Japan#120c2HOHokkaido00002BCroatia#170c2VPViroviti&#269;ko-Podravska000016Honduras#180c2YOYoro000017Bulgaria#390c2ABurgas00001ACostaRica#040c2HEHeredia000017Ontario#150c2HTHalton000028Poland#850c2WNWarmi&#324;sko-Mazurskie000024Cuba#140c2SSSancti Sp&iacute;ritus00001FIndonesia#400c2KRRiau Islands00001CKuwait#KW.JA0c2JAAl Jahrah000026SaoTomeandPrincipe#ST.MZ0c2MZMe Zoxi000031DemocraticRepublicoftheCongo#CD.EQ0c2EQEquateur00001DPanama#PA.LS0c2LSLos Santos00001ATanzania#TZ.LI0c2LILindi00001DYemen#YE.HU0c2HUAl Hudaydah000019Yemen#YE.JA0c2JAAl Jawf00001CUganda#UG.RK0c2RKRukungiri00001DMalawi#MW.NK0c2NKNkhotakota000019Brazil#0100c2MAMaranhao000025WorldwithCountries#1140c2MNMongolia00001DEurope#0430c2VAVatican City000023Pennsylvania#1290c2WEWestmoreland000017Texas#0470c2BROBrooks000017Idaho#0650c2MAMadison000024Virginia#5100c2AXAlexandria (City)000015Ohio#0090c2ATAthens00001FMassachusetts#0210c2NONorfolk000018Wyoming#0010c2ALAlbany00001BOregon#0670c2WHWashington00001CTennessee#0690c2HRHardeman00001EItaly#0050c2EMEmilia-Romagna000019NewWorld#1590c2PLPoland000018Maine#0250c2SOSomerset00001BOklahoma#0210c2CHCherokee000015Iowa#0730c2GRGreene00001DTexas#4090c2SAPSan Patricio00001ENewJersey#0150c2GLGloucester00001AIndiana#0250c2CRCrawford000018Mexico#0240c2SISinaloa000021NorthCarolina#0650c2EDEdgecombe000018Georgia#2170c2NENewton00001BKansas#0190c2CQChautauqua00001BIllinois#0550c2FRFranklin00001BMississippi#1630c2YZYazoo000024YukonTerritory#CA.YT.KU0c2KUKluane000020Indonesia#410c2SRWest Sulawesi000022WestEuropeanRegion#020c2FRFrance00001BSlovenia#090c2GOGorenjska000016NewWorld#070c2CUCuba00001APuertoRico#250c2CGCaguas000014Japan#130c2HYHyogo000025Croatia#180c2VSVukovarsko-Srijemska000019Bulgaria#400c2TXDobrich000019Ontario#160c2HMHamilton00001DPoland#860c2WPWielkopolskie00001ECuba#150c2SCSantiago de Cuba00001CSerbia#RS.JA0c2JAJablanica000019Vanuatu#VU.SN0c2SNSanma00001BTunisia#TN.MN0c2MNManouba000024Guinea#GN.FO0c2FOFor&eacute;cariah00001ATuvalu#TV.VI0c2VIVaitupu000018Iran#IR.ES0c2ESEsfahan000025FranceDepartment#FR.BR0c2BRBas Rhin000021FranceDepartment#FR.CH0c2CHCher00001ESaudiArabia#SA.MK0c2MKMakkah00001DKazakhstan#KZ.AM0c2AMAqmola00001BBurundi#BI.MA0c2MAMakamba000023Guyana#GY.DE0c2DEDemerara-Mahaica000019Georgia#0370c2CLCalhoun00001CBrazil#0110c2MTMato Grosso000022WorldwithCountries#1150c2NPNepal000017Europe#0440c2CYCyprus00001CMinnesota#0890c2MRMarshall00001BKentucky#0730c2FRFranklin00001BMichigan#0830c2KEKeweenaw000019Florida#0010c2ALAlachua00001EWestVirginia#0010c2BABarbour000025Italy#0060c2FIFriuli-Venezia Giulia00001BNewWorld#1600c2PTPortugal000017Asia3#0020c2AMArmenia000020Virginia#1490c2PGPrince George00001BSouthDakota#0190c2BTButte00001BKansas#2010c2WSWashington000017Mexico#0250c2SOSonora000018Missouri#1570c2PRPerry00001BCalifornia#0610c2PLPlacer000019Texas#2290c2HUDHudspeth00001BNebraska#1610c2SHSheridan000026WestEuropeanRegion#030c2LULuxembourg00002ASlovenia#100c2NONotranjsko-kra&scaron;ka00001ANewWorld#080c2DMDominica000011USA#UT0c2UTUtah000016Japan#140c2IBIbaraki000019Croatia#190c2ZDZadarska000019Bulgaria#410c2EBGabrovo00001FCostaRica#060c2LILim&oacute;n000019Ontario#170c2HSHastings000022Poland#870c2ZPZachodniopomorskie000019Cuba#160c2VCVilla Clara000015Iran#IR.YA0c2YAYazd00001AUganda#UG.AB0c2ABKaabong00001AKuwait#KW.HW0c2HWHawalli000020SriLanka#LK.TC0c2TCTrincomalee000024Ethiopia#ET.GA0c2GAGambela peoples000024Cambodia#KH.KG0c2KGKampong Chhnang00001EBurkinaFaso#BF.SR0c2SRSourou000024Mauritania#MR.TZ0c2TZTiris Zemmour000033CentralAmerica2#CE.VG0c2VGVirgin Islands, British00001FMacedonia#MK.PT0c2PTProbistip000022CentralAmerica2#CE.BZ0c2BZBelize000019Tanzania#TZ.MA0c2MAMara000019Malawi#MW.MW0c2MWMwanza000023Brazil#0120c2MSMato Grosso do Sul000025WorldwithCountries#1160c2PKPakistan000017Europe#0450c2TKTurkey00001EPennsylvania#1310c2WOWyoming000016Texas#0490c2BOWBrown000018Idaho#0670c2MIMinidoka000017Ohio#0110c2AUAuglaize000020Massachusetts#0230c2PLPlymouth00001AWyoming#0030c2BHBig Horn000018Oregon#0690c2WEWheeler00001ATennessee#0710c2HDHardin000015Italy#0070c2LALazio00001ANewWorld#1610c2RORomania000015Maine#0270c2WAWaldo00001AOklahoma#0230c2COChoctaw000015Iowa#0750c2GUGrundy00001AAsia3#0030c2AZAzerbaijan000024Alaska#2400c2SFSoutheast Fairbanks000019Texas#4110c2SASSan Saba00001ANewJersey#0170c2HUHudson000019Indiana#0270c2DADaviess000018Mexico#0260c2TATabasco00001FNorthCarolina#0670c2FOForsyth000018Georgia#2190c2OCOconee000019Kansas#0210c2CKCherokee000019Illinois#0570c2FUFulton000022WestEuropeanRegion#040c2MCMonaco000020Slovenia#110c2SPGori&scaron;ka000020NewWorld#090c2DODominican Rep.000017USA#WA0c2WAWashington000019PuertoRico#270c2CACamuy000018USA#CT0c2CTConnecticut000017Japan#150c2ISIshikawa000020Croatia#200c2ZGZagreba&#269;ka00001DBulgaria#420c2COGrad Sofiya00001DCostaRica#070c2PUPuntarenas000016Ontario#180c2HUHuron00001ESerbia#RS.JC0c2JCSouth Backa000019Vanuatu#VU.TF0c2TFTafea00001APalau#PW.ME0c2MEMelekeok000017Uganda#UG.AC0c2ACApac000019Benin#BJ.AK0c2AKAtacora000021Seychelles#SC.SY0c2SYSeychelles00001DEurope2#EU.LT0c2LTLithuania00001BCambodia#KH.KH0c2KHKratie00001FBurkinaFaso#BF.SS0c2SSSissili00001FSriLanka#LK.BC0c2BCBatticaloa00001EPanama#PA.NB0c2NBNgobe Bugle000022HongKong#HK.YT0c2YTYan Tsim Mong000030CentralAfricanRepublic#CF.HS0c2HSMambere-Kadei00001ATanzania#TZ.MB0c2MBMbeya00001ANebraska#1630c2SMSherman000018Georgia#0390c2CMCamden00001DBrazil#0130c2MGMinas Gerais000028WorldwithCountries#1170c2PHPhilippines000017Europe#0460c2RURussia00001AMinnesota#0910c2MTMartin000019Kentucky#0750c2FUFulton000017Michigan#0850c2LKLake000017Florida#0030c2BABaker00001FWestVirginia#0030c2BEBerkeley000017Italy#0080c2LILiguria00001DNewWorld#1620c2SMSan Marino00001ESouthDakota#0210c2CACampbell000018Kansas#2030c2WHWichita00001BMexico#0270c2TMTamaulipas000019Missouri#1590c2PTPettis00001BCalifornia#0630c2PUPlumas00001CAlaska#0600c2BRBristol Bay000015Texas#2310c2HUNHunt000028Manitoba#CA.MB.IR0c2IRInterlake Region000027WestEuropeanRegion#050c2NLNetherlands000026Slovenia#120c2JPObalno-kra&scaron;ka00001DNewWorld#100c2SVEl Salvador000014Japan#160c2IWIwate00001CCroatia#210c2GZGrad Zagreb000018Bulgaria#430c2XHaskovo000022CostaRica#080c2SJSan Jos&eacute;00001FOntario#190c2KLKawartha Lakes00002BPolandCounties#PL.LB.ZM0c2BZMZielona Gora000027PolandCounties#PL.ZP.KM0c2ZKMKoszalin000017Guinea#GN.FR0c2FRFria00001BUganda#UG.AD0c2ADAdjumani000019Benin#BJ.AL0c2ALAlibori00001DSwaziland#SZ.LU0c2LULubombo00001ALibya#LY.GD0c2GDGhadamis000024DenmarkRegion#DK.SD0c2SDSyddanmark00001EEurope2#EU.LU0c2LULuxembourg00001DEurope2#EU.MK0c2MKMacedonia000022BurkinaFaso#BF.ST0c2STSanmatenga00001CSriLanka#LK.BD0c2BDBadulla00001BNamibia#NA.CA0c2CACaprivi000030CentralAmerica2#CE.VI0c2VIVirgin Islands, U.S.000026CentralAmerica2#CE.CR0c2CRCosta Rica00001DRussia#RU.ZB0c2ZBZabaykalsk000019Uganda#UG.RO0c2ROKaliro00001CUganda#UG.SE0c2SESembabule000021SolomonIsland#SB.WE0c2WEWestern00001BIllinois#0590c2GAGallatin000015Brazil#0140c2PAPara000023WorldwithCountries#1180c2RURussia00001BPennsylvania#1330c2YOYork000019Texas#0510c2BUSBurleson000019Idaho#0690c2NPNez perce000016Ohio#0130c2BEBelmont00001FMassachusetts#0250c2SUSuffolk00001AWyoming#0050c2CMCampbell000018Oregon#0710c2YAYamhill00001BTennessee#0730c2HWHawkins000019Italy#0090c2LOLombardia000019NewWorld#1630c2CSSerbia00001AMaine#0290c2WSWashington00001BOklahoma#0250c2CICimarron000016Iowa#0770c2GTGuthrie00001AAsia3#0050c2BDBangladesh00001BTexas#4130c2SCHSchleicher00001DNewJersey#0190c2HTHunterdon00001AIndiana#0290c2DEDearborn000018NewYork#0010c2ALAlbany000019Mexico#0280c2TLTlaxcala000020NorthCarolina#0690c2FRFranklin00001CGeorgia#2210c2OGOglethorpe000019Kansas#0230c2CNCheyenne000019NewWorld#110c2GDGrenada000024PuertoRico#290c2CVCan&oacute;vanas00002DBosniaHerzegovina#010c2BOBosanskopodrinjski000015Japan#170c2KAKagawa00001ABulgaria#440c2KKurdzhali000017Ontario#200c2KEKenora000016Fiji#FJ.WE.RA0c2RARa000025FranceDepartment#FR.VC0c2VCVaucluse00001CChina2#CN.CQ0c2CQChongqing000023FranceDepartment#FR.CL0c2CLCantal000022FranceDepartment#FR.DB0c2DBDoubs000024SaoTomeandPrincipe#ST.PA0c2PAPague00001AEurope2#EU.LV0c2LVLatvia000019Nigeria#NG.BO0c2BOBorno00001BSomalia#SO.HI0c2HIHiiraan00002FGuyana#GY.UT0c2UTUpper Takutu-Upper Essequibo00001AChad#TD.BI0c2BIWadi Fira00001BBurundi#BI.KY0c2KYKayanza000019Djibouti#DJ.AR0c2ARArta000019Malawi#MW.MZ0c2MZMzimba000018Nebraska#1650c2SISioux000018Brazil#0150c2PBParaiba000026WorldwithCountries#1190c2SGSingapore00001AMinnesota#0930c2MKMeeker00001BKentucky#0770c2GAGallatin000019Michigan#0870c2LPLapeer000021Virginia#5150c2BFBedford (City)000015Florida#0050c2BYBay00001CWestVirginia#0050c2BOBoone000016Italy#0100c2MAMarche00001BNewWorld#1640c2SKSlovakia000016Asia3#0060c2BTBhutan000021Virginia#1530c2PWPrince William000021SouthDakota#0230c2CMCharles Mix000019Alabama#0010c2AUAutauga000017Kansas#2050c2WLWilson00001FMexico#0290c2VEVeracruz-Llave000019Missouri#1610c2PHPhelps00001ECalifornia#0650c2RIRiverside00001BTexas#2330c2HUTHutchinson000022USACentralRegion#170c2ILIllinois00001BNewWorld#120c2GTGuatemala000038BosniaHerzegovina#020c2HNHercegova&#269;ko-neretvanski000018Japan#180c2KGKagoshima00001BAustralia#TA0c2TATasmania00001CBulgaria#450c2KHKyustendil000018Ontario#210c2LALambton00001CTunisia#TN.MS0c2MSMonastir000023FranceDepartment#FR.VD0c2VDVendee000019Oman#OM.MU0c2MUMusandam00002EFranceDepartment#FR.CM0c2CMCharente Maritime00001BTonga#TO.TT0c2TTTongatapu00001DCambodia#KH.KK0c2KKKoh Kong00001BSriLanka#LK.AP0c2APAmpara00001EAngola#AO.LN0c2LNLunda Norte000029BurkinaFaso#BF.BK0c2BKBoulkiemd&eacute;00001FPhilippines#PH.PL0c2PLPalawan00001DKazakhstan#KZ.AR0c2ARAtyrau00001ARussia#RU.YN0c2YNYamalia00001FDjibouti#DJ.AS0c2ASAli Sabieh000019Illinois#0610c2GRGreene000017Brazil#0160c2PRParana000026WorldwithCountries#1200c2LKSri Lanka000017Texas#0530c2BUNBurnet000016Idaho#0710c2ONOneida000014Ohio#0150c2BRBrown000021Massachusetts#0270c2WOWorcester000018Wyoming#0070c2CACarbon00001BTennessee#0750c2HYHaywood000016Italy#0110c2MOMolise00001BNewWorld#1650c2SISlovenia000014Maine#0310c2YOYork00001COklahoma#0270c2CECleveland000017Iowa#0790c2HAHamilton000016Asia3#0070c2BNBrunei000017Texas#4150c2SCUScurry00001ANewJersey#0210c2MEMercer000019Indiana#0310c2DCDecatur00001ANewYork#0030c2AEAllegany000018Mexico#0300c2YUYucatan00001ENorthCarolina#0710c2GAGaston00001AGeorgia#2230c2PDPaulding000016Kansas#0250c2CAClark000017NewWorld#130c2HTHaiti00001CPuertoRico#310c2CNCarolina00002ABosniaHerzegovina#030c2KSKanton Sarajevo000017Japan#190c2KNKanagawa000018Bulgaria#460c2OBLovech000017Ontario#220c2LNLanark000026CentralEuropeanRegion#010c2ATAustria00001AMacau#MO.IL.TA0c2TATaipa000028NewBrunswick#CA.NB.RV0c2RVRiver Valley000025FranceDepartment#FR.DD0c2DDDordogne000018Tonga#TO.VA0c2VAVava'u00001ABhutan#BT.TM0c2TMThimphu00001FBurkinaFaso#BF.BL0c2BLBoulgou00001BMacedonia#MK.RE0c2REResen000020Philippines#PH.PM0c2PMPampanga00001DKazakhstan#KZ.AS0c2ASAstana000020CentralAmerica2#CE.CU0c2CUCuba00001AUganda#UG.RR0c2RRMbarara000022Guyana#GY.CU0c2CUCuyuni-Mazaruni00001ANebraska#1670c2STStanton000019Georgia#0430c2CNCandler00001BBrazil#0170c2PEPernambuco000027WorldwithCountries#1210c2TJTajikistan00001EMinnesota#0950c2MIMille Lacs00001AKentucky#0790c2GRGarrard00001BMichigan#0890c2LLLeelanau00001AFlorida#0070c2BFBradford00001EWestVirginia#0070c2BRBraxton000018Italy#0120c2PIPiemonte000018NewWorld#1660c2ESSpain000017Asia3#0080c2MMBurma (00001AVirginia#1550c2PUPulaski00001BSouthDakota#0250c2CLClark000019Alabama#0030c2BABaldwin000018Kansas#2070c2WOWoodson00001AMexico#0310c2ZAZacatecas000017Missouri#1630c2PIPike00001FCalifornia#0670c2SASacramento000016Texas#2350c2IRIIrion00001EUSACentralRegion#190c2IAIowa00001ANewWorld#140c2HNHonduras00002ABosniaHerzegovina#040c2SRSrednjebosanski000014Japan#200c2KOKochi000018Bulgaria#470c2MMontana000024Ontario#230c2LGLeeds and Grenville00002CCentralEuropeanRegion#020c2CZCzechRepublic00001BSwitzerland#010c2AAAargau000037NorthWestTerritories#CA.NT.GS0c2GSGreat Slave Gateway000019Malawi#MW.NS0c2NSNsanje000024Tibet#TI.SP0c2SPShannan Prefecture000026FranceDepartment#FR.CO0c2COCote d'Or00001EEurope2#EU.MO0c2MOMontenegro000021Cambodia#KH.KM0c2KMKampong Cham00001CAlgeria#DZ.RE0c2RERelizane00001BBurkinaFaso#BF.BM0c2BMBam000022Philippines#PH.PN0c2PNPangasinan00001DKazakhstan#KZ.AT0c2ATAqtobe00001FGuineaBissau#GW.BA0c2BABafata00001AUganda#UG.SI0c2SISironko000029Guyana#GY.EB0c2EBEast Berbice-Corentyne000019Illinois#0630c2GUGrundy000016Brazil#0180c2PIPiaui000025WorldwithCountries#1220c2THThailand000019Texas#0550c2CALCaldwell000016Idaho#0730c2OWOwyhee000015Ohio#0170c2BTButler00001AWyoming#0090c2COConverse00001DTennessee#0770c2HSHenderson000016Italy#0130c2PUPuglia000019NewWorld#1670c2SESweden000017Oklahoma#0290c2CLCoal000016Iowa#0810c2HNHancock000018Asia3#0090c2KHCambodia00001CTexas#4170c2SHAShackelford00001DNewJersey#0230c2MIMiddlesex000019Indiana#0330c2DKDe Kalb000017NewYork#0050c2BRBronx000021Mexico#0320c2DIDistrito Federal00001DNorthCarolina#0730c2GTGates000017Georgia#2250c2PAPeach000015Kansas#0270c2CYClay000027MadagascarRegions#MG.MA.ML0c2MLMelaky000022Switzerland#020c2ARAusser-Rhoden000020USACentralRegion#200c2KSKansas000019NewWorld#150c2JMJamaica000021PuertoRico#330c2CTCata&ntilde;o000024BosniaHerzegovina#050c2TUTuzlanski000017Japan#210c2KUKumamoto00001CBulgaria#480c2PAPazardzhik000025Ontario#240c2LELennox and Addington000026CentralEuropeanRegion#030c2DEGermany00001DLibya#LY.YJ0c2YJYafran-Jadu000023FranceDepartment#FR.VG0c2VGVosges000017Uganda#UG.AI0c2AIAbim000017Nauru#NR.YA0c2YAYaren00001CBenin#BJ.AQ0c2AQAtlantique00001AVietnam#VN.HA0c2HAHa Tay00001BCambodia#KH.KN0c2KNKandal000019Bhutan#BT.TO0c2TOTongsa000024Liberia#LR.CM0c2CMGrand Cape Mount00001CSudan#SD.RN0c2RNRiver Nile00001ESudan#SD.SD0c2SDSouth Darfur000024CentralAmerica2#CE.DM0c2DMDominica000026Virginia#7000c2NNNewport News (City)000019Nebraska#1690c2THThayer000019Georgia#0450c2CRCarroll00001FBrazil#0190c2RJRio de Janeiro000029WorldwithCountries#1230c2TMTurkmenistan00001CMinnesota#0970c2MSMorrison000018Kentucky#0810c2GNGrant00001AMichigan#0910c2LELenawee000019Florida#0090c2BVBrevard00001DWestVirginia#0090c2BKBrooke000018Italy#0140c2SASardegna00001ENewWorld#1680c2CHSwitzerland000015Asia3#0100c2CNChina00001FVirginia#1570c2RPRappahannock00001ASouthDakota#0270c2CYClay000019Alabama#0050c2BRBarbour00001AKansas#2090c2WYWyandotte000019Missouri#1650c2PAPlatte00001FCalifornia#0690c2SNSan Benito000015Texas#2370c2JACJack000025Australia2#NSW0c2NSWNew South Wales000029NewCaledonia#NC.NO.OG0c2OGOu&eacute;goa000025Switzerland#030c2BLBasel-Landschaft000018NewWorld#160c2MXMexico000027BosniaHerzegovina#060c2USUnsko-sanski000014Japan#220c2KYKyoto000018Bulgaria#490c2PKPernik00001BOntario#250c2MAManitoulin000022USANorthWestRegion#410c2OROregon000028Slovakia#010c2BCBansk&aacute; Bystrica000026CentralEuropeanRegion#040c2HUHungary00001CLibya#LY.ZA0c2ZAAz Zawiyah000019Malawi#MW.NU0c2NUNtcheu00001BVietnam#VN.GL0c2GLGia Lai000024Morocco#MA.SM0c2SMSouss Massa Draa00001ESaudiArabia#SA.NJ0c2NJNajran000018Guinea#GN.YO0c2YOYomou00001ELaos#LA.LM0c2LMLouang Namtha00001BIllinois#0650c2HAHamilton000024Brazil#0200c2RNRio Grande do Norte000027WorldwithCountries#1240c2UZUzbekistan000018Texas#0570c2CAHCalhoun000017Idaho#0750c2PAPayette000021Virginia#5200c2BSBristol (City)000016Ohio#0190c2CACarroll000017Wyoming#0110c2CRCrook000019Tennessee#0790c2HEHenry000017Italy#0150c2SISicilia00001ANewWorld#1690c2UAUkraine00001BOklahoma#0310c2CMComanche000015Iowa#0830c2HRHardin000017Texas#4190c2SHEShelby00001CNewJersey#0250c2MOMonmouth00001AIndiana#0350c2DLDelaware000018NewYork#0070c2BOBroome00001ENorthCarolina#0750c2GRGraham000019Georgia#2270c2PCPickens000016Kansas#0290c2CDCloud000021SouthCarolina#0010c2ABAbbeville000020Switzerland#040c2BSBasel-Stadt00001BNewWorld#170c2NINicaragua000016USA#WI0c2WIWisconsin000019PuertoRico#350c2CYCayey000038BosniaHerzegovina#070c2ZAZapadnobosanska &#381;upanija000012Japan#230c2MIMie000018Bulgaria#500c2EHPleven00001AOntario#260c2MIMiddlesex00001CSlovakia#020c2BLBratislava00002CCentralEuropeanRegion#050c2LILiechtenstein00001DPalau#PW.NC0c2NCNgarchelong000016Iran#IR.GI0c2GIGilan000023FranceDepartment#FR.CR0c2CRCreuse00001FVietnam#VN.HC0c2HCHo Chi Minh00001BCambodia#KH.KP0c2KPKampot000020Morocco#MA.TD0c2TDTadla Azilal00001CAngola#AO.LS0c2LSLunda Sul00001FUzbekistan#UZ.NG0c2NGNamangan000029Mauritania#MR.DN0c2DNDakhlet Nouadhibou00002ECentralAmerica2#CE.DO0c2DODominican Republic000016Nepal#NP.KO0c2KOKosi00001CRussia#RU.YS0c2YSYaroslavl000019Nebraska#1710c2TOThomas000019Georgia#0470c2CSCatoosa000022Brazil#0210c2RSRio Grande do Sul000024WorldwithCountries#1250c2VNVietnam000019Minnesota#0990c2MWMower000019Kentucky#0830c2GVGraves00001DMichigan#0930c2LILivingston000019Florida#0110c2BWBroward00001DWestVirginia#0110c2CACabell000017Italy#0160c2TOToscana000021NewWorld#1700c2UKUnited Kingdom00001AAsia3#0120c2TPEast Timor00001BVirginia#1590c2RCRichmond00001FSouthDakota#0290c2COCodington000016Alabama#0070c2BIBibb000017Missouri#1670c2POPolk000023California#0710c2SBSan Bernardino00001FAlaska#0680c2DEDenali Borough000018Texas#2390c2JAKJackson000019Switzerland#050c2BEBern000018NewWorld#180c2PAPanama000014USA#VT0c2VTVermont000030BosniaHerzegovina#080c2ZDZeni&#269;ko-Dobojski000015Japan#240c2MYMiyagi000019Bulgaria#510c2PBPlovdiv000018Ontario#270c2MUMuskoka00001FSlovakia#030c2KIKo&scaron;ice000025CentralEuropeanRegion#060c2PLPoland000024MarshallIsland#MH.MH.JL0c2JLJaluit00001BSerbia#RS.KB0c2KBKolubara000017Iran#IR.ZA0c2ZAZanjan00001APalau#PW.ND0c2NDNgaraard000029FranceDepartment#FR.CS0c2CSCorse du Sud00001DVietnam#VN.HD0c2HDHai Duong000015Nauru#NR.EW0c2EWEwa000028DenmarkRegion#DK.SL0c2SLSj&aelig;lland000022Ethiopia#ET.HA0c2HAHarari people000022Comoros #KM.GC0c2GCGrande Comore00001AIllinois#0670c2HCHancock000019Brazil#0220c2RORondonia000023WorldwithCountries#1260c2TWTaiwan00001BNorthDakota#0010c2ADAdams000019Texas#0590c2CANCallahan000015Idaho#0770c2POPower000018Ohio#0210c2CHChampaign000019Wyoming#0130c2FRFremont00001BTennessee#0810c2HIHickman000023Italy#0170c2TRTrentino-Alto Adige00001FNewWorld#1710c2VAVatican City000019Oklahoma#0330c2CTCotton000017Iowa#0850c2HIHarrison000017Asia3#0130c2GEGeorgia000018Texas#4210c2SHRSherman00001ANewJersey#0270c2MRMorris000018Indiana#0370c2DUDubois00001DNewYork#0090c2CACattaraugus000021NorthCarolina#0770c2GNGranville000018Georgia#2290c2PEPierce000017Kansas#0310c2CFCoffey00001DSouthCarolina#0030c2AIAiken00001DSwitzerland#060c2FRFribourg000027NewWorld#190c2KNSt. Kitts &amp; Nevis000019PuertoRico#370c2CBCeiba000031BosniaHerzegovina#090c2ZP&#381;upanija Posavska000017Japan#250c2MAMiyazaki000019Bulgaria#520c2PPRazgrad000018Ontario#280c2NINiagara000017Slovakia#040c2NINitra000027CentralEuropeanRegion#070c2SKSlovakia00002BPolandCounties#PL.DS.JM0c2DJMJelenia Gora000019Uganda#UG.AM0c2AMAmuria000025FranceDepartment#FR.CT0c2CTCharente00001AKyrgyzstan#KG.OS0c2OSOsh000019Europe2#EU.MT0c2MTMalta00002BMorocco#MA.RZ0c2RZRabat Sale Zemmour Zaer000019Angola#AO.LU0c2LULuanda000019Angola#AO.NA0c2NANamibe00001FChad#TD.CG0c2CGChari-Baguirmi00001ELaos#LA.LP0c2LPLouangphabang000017Texas#2410c2JASJasper00001BNebraska#1730c2TUThurston00001AGeorgia#0490c2CHCharlton000018Brazil#0230c2RRRoraima000026WorldwithCountries#1270c2HKHong Kong00001AMinnesota#1010c2MUMurray00001AKentucky#0850c2GYGrayson000017Michigan#0950c2LULuce000019Florida#0130c2CACalhoun00001EWestVirginia#0130c2CHCalhoun000016Italy#0180c2UMUmbria000019NewWorld#1720c2CYCyprus000015Asia3#0140c2INIndia00001AVirginia#1610c2RNRoanoke00001CSouthDakota#0310c2CSCorson000018Alabama#0090c2BLBlount00001AMissouri#1690c2PLPulaski00001ECalifornia#0730c2SDSan Diego00001BAlaska#0700c2DIDillingham00001BSwitzerland#070c2GEGeneve00001BNewWorld#200c2LCSt. Lucia000041BosniaHerzegovina#100c2ZZ&#381;upanija Zapadnohercegova&#269;ka000015Japan#260c2NANagano000015Bulgaria#530c2PRuse00001AOntario#290c2NPNipissing00001FSlovakia#050c2PVPre&scaron;ov000027CentralEuropeanRegion#080c2SLSlovenia00002DNewBrunswick#CA.NB.AR0c2ARAppalachian Range000018Niger#NE.AG0c2AGAgadez00001ESerbia#RS.JN0c2JNSouth Banat000019Uganda#UG.BD0c2BDBudaka00001ASyria#SY.DI0c2DIDamascus000020Cambodia#KH.KS0c2KSKampong Spe00001ACapeVerde#CV.MA0c2MAMaio00001EAlgeria#DZ.SA0c2SASouk Ahras00001AAngola#AO.ML0c2MLMalanje000019Sudan#SD.RS0c2RSRed Sea000018Sudan#SD.SI0c2SISennar000019Kansas#0330c2CMComanche000021SouthCarolina#0050c2ALAllendale000019Illinois#0690c2HRHardin00001FBrazil#0240c2SCSanta Catarina000022WorldwithCountries#1280c2MOMacau00001CNorthDakota#0030c2BABarnes000018Texas#0610c2CAMCameron000018Idaho#0790c2SHShoshone000014Ohio#0230c2CLClark000018Wyoming#0150c2GOGoshen00001BTennessee#0830c2HOHouston00001DItaly#0190c2VAValle d'Aosta000019NewWorld#1730c2TKTurkey000018Oklahoma#0350c2CGCraig000014Iowa#0870c2HEHenry000019Asia3#0150c2IDIndonesia000016Texas#4230c2SMISmith000019NewJersey#0290c2OCOcean000019Indiana#0390c2ELElkhart000018NewYork#0110c2CYCayuga00001ENorthCarolina#0790c2GEGreene000016Georgia#2310c2PIPike00002ANorthAmerica#0010c2AGAntigua and Barbuda000021NewCaledonia#NC.IL.LI0c2LILifou000029NewCaledonia#NC.NO.PB0c2PBPou&eacute;bo00001BSwitzerland#080c2GLGlarus000022USACentralRegion#260c2MIMichigan000032NewWorld#210c2VCSt. Vincent &amp; the Grenadines00001APuertoRico#390c2CLCiales00002BBosniaHerzegovina#110c2RSRepublika Srpska000017Japan#270c2NGNagasaki000017Bulgaria#540c2HShumen000018Ontario#300c2NONorfolk00001FMontenegro#010c2ANAndrijevica000025Slovakia#060c2TCTren&#269;&iacute;n00002ACentralEuropeanRegion#090c2CHSwitzerland000020FrenchGuiana#GF.SL.SA0c2SASaul000028PolandCounties#PL.MA.NM0c2MNMNowy Sacz00001AFiji#FJ.EA.KD0c2KDKadavu000019Vanuatu#VU.TR0c2TRTorba000029FranceDepartment#FR.VM0c2VMVal-de-Marne00001DCameroon#CM.LT0c2LTLittoral000025FranceDepartment#FR.CV0c2CVCalvados00001CVietnam#VN.HG0c2HGHa Giang00001FEurope2#EU.NL0c2NLNetherlands000021Cambodia#KH.KT0c2KTKampong Thom00001BBurkinaFaso#BF.TU0c2TUTuy00002CMorocco#MA.TH0c2THTaza Al Hoceima Taounate000022Algeria#DZ.SB0c2SBSidi Bel Abbes00001BNigeria#NG.BY0c2BYBayelsa000019Nigeria#NG.DE0c2DEDelta00001DMacedonia#MK.RM0c2RMRosoman000023CoteDivoire#CI.SB0c2SBSud-Bandama00001BTexas#2430c2JEDJeff Davis000019Nebraska#1750c2VAValley000019Georgia#0510c2CAChatham00001ABrazil#0250c2SPSao Paulo000024WorldwithCountries#1290c2ALAlbania00001CMinnesota#1030c2NINicollet000018Kentucky#0870c2GEGreen00001BMichigan#0970c2MKMackinac00001BFlorida#0150c2CHCharlotte00001BWestVirginia#0150c2CLClay000020Scotland#0010c2ABAberdeenshire000016Italy#0200c2VEVeneto000019NewWorld#1740c2RURussia00001DVirginia#1630c2RKRockbridge00001CSouthDakota#0330c2CUCuster000019Alabama#0110c2BUBullock000019Missouri#1710c2PUPutnam00001ENorthAmerica#0020c2BSBahamas000022California#0750c2SFSan Francisco000024Switzerland#090c2GRGraub&uuml;nden000023USACentralRegion#270c2MNMinnesota000027NewWorld#220c2TTTrinidad &amp; Tobago000026Australia2#NT0c2NTNorthern Territory000013Japan#280c2NRNara00001ABulgaria#550c2CCSilistra00001FOntario#310c2NRNorthumberland000017Montenegro#020c2BABar000018Slovakia#070c2TATrnava000019Uganda#UG.TG0c2TGKitgum000023FranceDepartment#FR.VN0c2VNVienne000018Iran#IR.HD0c2HDHamadan000022FranceDepartment#FR.DM0c2DMDrome000032DemocraticRepublicoftheCongo#CD.HC0c2HCOrientale000019Congo#CG.BO0c2BOBouenza000019Gambia#GM.BJ0c2BJBanjul00001CMacedonia#MK.SD0c2SDDojran00001EMacedonia#MK.RN0c2RNRankovce000020Sudan#SD.SK0c2SKSouth Kurdufan00001BBhutan#BT.BU0c2BUBumthang00001ABhutan#BT.CK0c2CKChhukha000017Bhutan#BT.DA0c2DADaga00002FCentralAfricanRepublic#CF.KB0c2KBNana-Grebizi000026Chad#TD.BT0c2BTBorkou-Ennedi-Tibesti00001DTanzania#TZ.MO0c2MOMorogoro000021CoteDivoire#CI.SC0c2SCSud-Comoe000017Kansas#0350c2CLCowley000020SouthCarolina#0070c2ANAnderson00001CIllinois#0710c2HEHenderson000018Brazil#0260c2SESergipe000024WorldwithCountries#1300c2ADAndorra00001CNorthDakota#0050c2BEBenson000015Texas#0630c2CAPCamp000015Idaho#0810c2TETeton000017Ohio#0250c2CEClermont00001DWyoming#0170c2HSHot Springs00001DTennessee#0850c2HPHumphreys000018Scotland#0020c2ANAngus000019Italy#0210c2SMSanmarino00001CNewWorld#1750c2AUAustralia000018Oklahoma#0370c2CKCreek000015Iowa#0890c2HOHoward00001ATexas#4250c2SOMSomervell00001BNewJersey#0310c2PAPassaic000019Indiana#0410c2FAFayette00001CNewYork#0130c2CHChautauqua000020NorthCarolina#0810c2GUGuilford000016Georgia#2330c2POPolk00001DIreland#0010c2CACeatharlach00001FNorthAmerica#0030c2BBBarbados000027NewCaledonia#NC.IL.MA0c2MAMar&eacute;00002CNewCaledonia#NC.NO.PD0c2PDPoindimi&eacute;000021Switzerland#100c2IRInner-Rhoden000017Canada#010c2ABAlberta00001FNewWorld#230c2USUnited States000019PuertoRico#410c2CDCidra000016Japan#290c2NINiigata000018Bulgaria#560c2CHSliven000017Ontario#320c2OTOttawa00001AMontenegro#030c2BEBerane00001DSlovakia#080c2ZI&#381;ilina000019Uganda#UG.SR0c2SRSoroti00001EMacedonia#MK.AD0c2ADAerodrom00001BMalawi#MW.PH0c2PHPhalombe000027FranceDepartment#FR.VO0c2VOVal d'Oise00002AGuinea#GN.GU0c2GUGu&eacute;ck&eacute;dou000019Uganda#UG.BG0c2BGBugiri000018Benin#BJ.BO0c2BOBorgou000020Cyprus2#CY.GC0c2GCGreek Cyprus000019Iran#IR.GO0c2GOGolestan000019Algeria#DZ.SD0c2SDSaida00001ANepal#NP.MA0c2MAMahakali00001FPapuaNewGuinea#PG.GU0c2GUGulf000019Burundi#BI.NG0c2NGNgozi00001ATexas#2450c2JEFJefferson00001DNebraska#1770c2WAWashington00001FGeorgia#0530c2CCChattahoochee00001ABrazil#0270c2TOTocantins000024WorldwithCountries#1310c2ATAustria00001AMinnesota#1050c2NONobles00001AKentucky#0890c2GUGreenup000019Michigan#0990c2MBMacomb000018Florida#0170c2CICitrus000020WestVirginia#0170c2DODoddridge000019Scotland#0030c2ARArgyll000017NewWorld#1760c2FJFiji00001DVirginia#1650c2RGRockingham00001DSouthDakota#0350c2DADavison000018Alabama#0130c2BTButler000018Missouri#1730c2RSRalls00001FIreland#0020c2CVCabh&aacute;n00001DNorthAmerica#0040c2BZBelize000020California#0770c2SJSan Joaquin00001BSwitzerland#110c2LULuzern000020Canada#020c2BCBritish Columbia000022USACentralRegion#290c2MOMissouri00001BNewWorld#240c2GLGreenland000013Japan#300c2OIOita000022Australia#SW0c2SWNew South Wales000019Bulgaria#570c2CMSmolyan000017Ontario#330c2OXOxford000020Montenegro#040c2BPBijelo Polje00002BFranceDepartment#FR.VP0c2VPVille de Paris000018Benin#BJ.CF0c2CFCouffo000019Libya#LY.GR0c2GRGharyan00001AEurope2#EU.NO0c2NONorway00001AMauritius#MU.MO0c2MOMoka00001FNigeria#NG.CR0c2CRCross River00001DBurkinaFaso#BF.BW0c2BWBanwa00001DAlgeria#DZ.AD0c2ADAin Defla00001FGuineaBissau#GW.CA0c2CACacheu000019Kansas#0370c2CRCrawford00001FSouthCarolina#0090c2BABamberg000018Illinois#0730c2HNHenry00001ABelgium#0100c2BRBrussels000024WorldwithCountries#1320c2BYBelarus00001ENorthDakota#0070c2BIBillings000017Texas#0650c2CARCarson00001AIdaho#0830c2TFTwin falls000016Ohio#0270c2CIClinton000019Wyoming#0190c2JOJohnson000025Europewithcountries#0010c2ALAlbania00001BTennessee#0870c2JAJackson00001BScotland#0040c2AYAyrshire00001BNewWorld#1770c2KIKiribati000019Oklahoma#0390c2CSCuster000017Iowa#0910c2HUHumboldt000015Asia3#0190c2JPJapan000016Texas#4270c2STAStarr000019NewJersey#0330c2SASalem000017Indiana#0430c2FLFloyd000019NewYork#0150c2CEChemung00001FNorthCarolina#0830c2HAHalifax000019Georgia#2350c2PLPulaski00001DIreland#0030c2CLCl&aacute;r00001DNorthAmerica#0050c2CACanada000019Montenegro#050c2BUBudva000024Switzerland#120c2NENeuch&acirc;tel000018Canada#030c2MBManitoba00001BNewWorld#250c2ARArgentina000019PuertoRico#430c2COCoamo000018Bahamas#010c2AKAcklins000016Japan#310c2OKOkayama000017Bulgaria#580c2CSofiya00001COntario#340c2PSParry Sound000024SierraLeone#SL.NO.KD0c2KDKoinadugu00001DDjibouti#DJ.DB0c2DBDjibouti000024EquatorialGuinea#GQ.AN0c2ANAnnobon00001AIran#IR.HG0c2HGHormozgan000024FranceDepartment#FR.CZ0c2CZCorreze000019Algeria#DZ.SF0c2SFSetif000020Bhutan#BT.TY0c2TYTashi Yangtse00001DCongo#CG.BR0c2BRBrazzaville00001FGuineaBissau#GW.BL0c2BLBolama000019Texas#2470c2JIHJim Hogg000021Virginia#7100c2NONorfolk (City)000018Nebraska#1790c2WYWayne00001BGeorgia#0550c2CGChattooga000020Belgium#0110c2VBVlaams-Brabant000024WorldwithCountries#1330c2BEBelgium00001AMinnesota#1070c2NRNorman00001AKentucky#0910c2HAHancock00001BMichigan#1010c2MSManistee000016Florida#0190c2CLClay00001BMississippi#0010c2ADAdams000025Europewithcountries#0020c2ADAndorra00001EWestVirginia#0190c2FAFayette00001DScotland#0050c2BABanffshire000023NewWorld#1780c2MHMarshall Islands00001AVirginia#1670c2RURussell000019SouthDakota#0370c2DYDay000019Alabama#0150c2CACalhoun00001BMissouri#1750c2RORandolph00001AIreland#0040c2COCorcaigh000021NorthAmerica#0060c2CRCosta Rica000024California#0790c2SPSan Luis Obispo00001BMontenegro#060c2CECetinje00001FMiddleEast#010c2AFAfghanistan00001ESwitzerland#130c2NINidwalden00001DCanada#040c2NBNew Brunswick000022USACentralRegion#310c2NENebraska000019NewWorld#260c2BOBolivia00001EBahamas#020c2BRBerry Islands000016Japan#320c2ONOkinawa00001EBulgaria#590c2CTStara Zagora000015Ontario#350c2PEPeel000022FrenchGuiana#GF.CY.CM0c2CMCamopi000020FranceDepartment#FR.VR0c2VRVar00001EPalau#PW.NL0c2NLNgeremlengui00001BUganda#UG.AT0c2ATAmolatar00001BUganda#UG.BJ0c2BJButaleja000016Libya#LY.GT0c2GTGhat00001DSriLanka#LK.VA0c2VAVavuniya000021Somalia#SO.JD0c2JDJubbada Dhexe000017Yemen#YE.LA0c2LALahij00001FGuineaBissau#GW.BM0c2BMBiombo000018Kansas#0390c2DCDecatur000020SouthCarolina#0110c2BRBarnwell00001BIllinois#0750c2IRIroquois000033WorldwithCountries#1340c2BHBosnia and Herzegovina00001FNorthDakota#0090c2BOBottineau000015Texas#0670c2CASCass000016Idaho#0850c2VAValley000025Virginia#5300c2BVBuena Vista (City)000019Ohio#0290c2COColumbiana00001ENewMexico#0010c2BEBernalillo000019Wyoming#0210c2LALaramie000025Europewithcountries#0030c2ATAustria00001DTennessee#0890c2JEJefferson00001FScotland#0060c2BEBerwickshire00001DNewWorld#1790c2FMMicronesia00001BOklahoma#0410c2DEDelaware000012Iowa#0930c2IDIda00001AAsia3#0210c2KZKazakhstan000019Texas#4290c2STEStephens00001CNewJersey#0350c2SOSomerset00001AIndiana#0450c2FOFountain00001ANewYork#0170c2CNChenango00001FNorthCarolina#0850c2HRHarnett000018Georgia#2370c2PUPutnam000025Ireland#0050c2DOD&uacute;n na nGall00001BNorthAmerica#0070c2CUCuba00002ENewCaledonia#NC.NO.PH0c2PHPon&eacute;rihouen00001FMontenegro#070c2DADanilovgrad00001BMiddleEast#020c2BABahrain00001DSwitzerland#140c2OBObwalden000023EastEuropeanRegion#010c2BYBelarus000029Canada#050c2NLNewfoundland and Labrador000018NewWorld#270c2BRBrazil000022PuertoRico#450c2CMComer&iacute;o000016Belize#010c2BZBelize000017Bahamas#030c2BIBimini000014Japan#330c2OSOsaka00001ENorwayRegion#010c2AKAkershus00001CBulgaria#600c2TTurgovishte000016Ontario#360c2PRPerth000027PolandCounties#PL.SL.KA0c2SKAKatowice00001ECoteDivoire#CI.AG0c2AGAgneby00001APalau#PW.NM0c2NMNgardmau00001AVietnam#VN.HM0c2HMHa Nam000020GuineaBissau#GW.TO0c2TOTombali000025BurkinaFaso#BF.BZ0c2BZBaz&egrave;ga000027CentralAfricanRepublic#CF.KG0c2KGKemo00001BTanzania#TZ.MT0c2MTMtwara000017Nepal#NP.ME0c2MEMechi00001FNorthAmerica#0080c2DMDominica00001ECalifornia#0810c2SESan Mateo00001ATexas#2490c2JIWJim Wells00001ANebraska#1810c2WBWebster00001AGeorgia#0570c2CECherokee000025WorldwithCountries#1350c2BGBulgaria00001BMinnesota#1090c2OLOlmsted000019Kentucky#0930c2HRHardin00001CMichigan#1030c2MQMarquette000019Florida#0210c2COCollier00001CMississippi#0030c2ALAlcorn000025Europewithcountries#0040c2BYBelarus00001DWestVirginia#0210c2GIGilmer000017Scotland#0070c2BUBute000018NewWorld#1800c2NRNauru00001DAsia3#0220c2KPKorea (north)000018Virginia#1690c2SCScott000018Colorado#0010c2ADAdams00001BSouthDakota#0390c2DUDeuel00001AAlabama#0170c2CHChambers000016Missouri#1770c2RARay00002AIreland#0060c2DUBaile &Aacute;tha Cliath000026USANorthWestRegion#530c2WAWashington00001FMontenegro#080c2HNHerceg Novi000018MiddleEast#030c2INIran000021Switzerland#150c2SGSankt Gallen000024SouthEuropeanRegion#010c2ALAlbania000024EastEuropeanRegion#020c2BGBulgaria000017NewWorld#280c2CLChile000014Belize#020c2CYCayo00001CBahamas#040c2BPBlack Point000013Japan#340c2SASaga000020NorwayRegion#020c2AAAust-Agder000016Bulgaria#610c2BVarna00001DOntario#370c2PTPeterborough00001CBurundi#BI.MV0c2MVMuramvya000019Uganda#UG.BL0c2BLBulisa000028FranceDepartment#FR.DS0c2DSDeux Sevres000019Vietnam#VN.HN0c2HNHanoi000022Morocco#MA.TO0c2TOTanger Tetouan00001ANigeria#NG.EB0c2EBEbonyi00001EBurma#MM.KC0c2KCKachin State00001FPhilippines#PH.QR0c2QRQuirino000019Georgia#2390c2QUQuitman00001AIreland#0070c2GAGaillimh000025NorthAmerica#0090c2DODominican Rep.00001AKansas#0410c2DKDickinson000020SouthCarolina#0130c2BEBeaufort00001AIllinois#0770c2JAJackson000024WorldwithCountries#1360c2HYCroatia00001CNorthDakota#0110c2BWBowman000017Texas#0690c2CATCastro00001AIdaho#0870c2WAWashington000018Ohio#0310c2CSCoshocton00001ANewMexico#0030c2CACatron000018Nebraska#0010c2ADAdams000019Wyoming#0230c2LILincoln000025Europewithcountries#0050c2BEBelgium00001BTennessee#0910c2JOJohnson00001CScotland#0080c2CACaithness00001ENewWorld#1810c2NZNew Zealand000018Oklahoma#0430c2DWDewey000013Iowa#0950c2IWIowa00001DAsia3#0230c2KRKorea (south)000019Texas#4310c2STRSterling00001ANewJersey#0370c2SUSussex00001AIndiana#0470c2FRFranklin000019NewYork#0190c2CLClinton00001FNorthCarolina#0870c2HWHaywood000022Montenegro#090c2KLKola&scaron;in000018MiddleEast#040c2IZIraq000021Switzerland#160c2SCSchaffhausen000024SouthEuropeanRegion#020c2ADAndorra000023EastEuropeanRegion#030c2MDMoldova00001BCanada#070c2NSNova Scotia00001ANewWorld#290c2COColombia000021Quebec#010c2BSBas-Saint-Laurent00001BPuertoRico#470c2CZCorozal000017Belize#030c2CZCorozal00001BBahamas#050c2CICat Island000016Japan#350c2SISaitama000020Bulgaria#620c2BTVeliko Turnovo000025Ontario#380c2PCPrescott and Russell000019Burundi#BI.MW0c2MWMwaro00001CHongKong#HK.IS0c2ISIslands00001BMacedonia#MK.AJ0c2AJSaraj000023Sudan#SD.BG0c2BGCentral Equatoria000026Serbia#RS.KM0c2KMKosovsko Mitrovacki000017Uganda#UG.AW0c2AWArua000019Thailand#TH.YL0c2YLYala000025SolomonIsland#SB.GC0c2GCGuadalcanal00001EBotswana#BW.KG0c2KGKgalagadi00001CVietnam#VN.HO0c2HOHoa Binh000016Syria#SY.DR0c2DRDara00001FMacedonia#MK.RU0c2RUStrumitsa00001ABhutan#BT.CR0c2CRChirang00001DPhilippines#PH.RI0c2RIRizal00001FKazakhstan#KZ.BY0c2BYBayqonyr00001BMissouri#1790c2REReynolds000020Ireland#0080c2KECiarra&iacute;000022NorthAmerica#0100c2SVEl Salvador000022California#0830c2SRSanta Barbara000018Texas#2510c2JOHJohnson00001ANebraska#1830c2WHWheeler000018Georgia#0590c2CKClarke00002BWorldwithCountries#1370c2CZCzech Republic00001EMinnesota#1110c2OTOtter Tail000019Kentucky#0950c2HLHarlan000018Michigan#1050c2MAMason00001AFlorida#0230c2CUColumbia00001BMississippi#0050c2AMAmite000034Europewithcountries#0060c2BABosnia and Herzegovina00001CWestVirginia#0230c2GRGrant000023Scotland#0090c2CLClackmannanshire000018NewWorld#1820c2PWPalau00001DVirginia#1710c2SHShenandoah00001AColorado#0030c2ALAlamosa00001FAlaska#2610c2VCValdez-Cordova00001BSouthDakota#0410c2DEDewey00001AAlabama#0190c2CECherokee000019Montenegro#100c2KTKotor00001AMiddleEast#050c2ISIsrael00001BSwitzerland#170c2SHSchwyz000035SouthEuropeanRegion#030c2BABosnia &amp; Herzegovina000023EastEuropeanRegion#040c2RORomania000017Canada#080c2ONOntario000019NewWorld#300c2ECEcuador000027Quebec#020c2SLSaguenay-Lac-Saint-Jean00001AUSA#WV0c2WVWest Virginia00001BBelize#040c2OWOrange Walk00001EBahamas#060c2CBCentral Abaco000014USA#GA0c2GAGeorgia000014Japan#360c2SHShiga00001ENorwayRegion#040c2BUBuskerud000017Bulgaria#630c2BHVidin00001EOntario#390c2PNPrince Edward000022MarshallIsland#MH.MH.KN0c2KNKnox00001BTanzania#TZ.MW0c2MWMwanza00001ARussia#RU.IK0c2IKIrkutsk00001APalau#PW.NP0c2NPNgatpang00001DUganda#UG.BN0c2BNBundibugyo00001ABenin#BJ.CL0c2CLCollines00002FHungaryRegions#HU.NG0c2NGNorthern Great Plain00001CVietnam#VN.HP0c2HPHaiPhong00001AAlgeria#DZ.SK0c2SKSkikda000017Nigeria#NG.ED0c2EDEdo000021Somalia#SO.JH0c2JHJubbada Hoose00001DMacedonia#MK.RV0c2RVRadovis000022Macedonia#MK.SL0c2SLSveti Nikole000018Niger#NE.TH0c2THTahoua000021NorthCarolina#0890c2HDHenderson000017Georgia#2410c2RBRabun00001BIreland#0090c2KICill Dara00001ENorthAmerica#0110c2GDGrenada000019Kansas#0430c2DPDoniphan000020SouthCarolina#0150c2BKBerkeley000019Illinois#0790c2JSJasper000024WorldwithCountries#1380c2DKDenmark00001BNorthDakota#0130c2BUBurke000019Texas#0710c2CHAChambers000017Ohio#0330c2CWCrawford00001ANewMexico#0050c2CHChaves00001BNebraska#0030c2ANAntelope000019Wyoming#0250c2NANatrona000026Europewithcountries#0070c2BGBulgaria000018Tennessee#0930c2KNKnox000021Scotland#0100c2DMDumbartonshire000023NewWorld#1830c2PGPapua New Guinea000018Oklahoma#0450c2ELEllis000016Iowa#0970c2JAJackson00001ATexas#4330c2STOStonewall000019NewJersey#0390c2UNUnion000018Indiana#0490c2FUFulton00001ANewYork#0210c2COColumbia000029YukonTerritory#CA.YT.NO0c2NONorth Yukon000023USANorthWestRegion#560c2WYWyoming00001CMontenegro#110c2MKMojkovac00001AMiddleEast#060c2JOJordan00001ESwitzerland#180c2SOSolothurn000024SouthEuropeanRegion#040c2HYCroatia000023EastEuropeanRegion#050c2UAUkraine000024Canada#090c2PEPrince Edward Island000022NewWorld#310c2FKFalkland Islands000022Quebec#030c2CNCapitale-Nationale00001BPuertoRico#490c2CUCulebra00001BBelize#050c2SCStann Creek00001FBahamas#070c2CNCentral Andros000014USA#FL0c2FLFlorida000016Japan#370c2SMShimane00001ENorwayRegion#050c2FIFinnmark000018Bulgaria#640c2BPVratsa00001COntario#400c2RARainy River000024MarshallIsland#MH.MH.KO0c2KOKosrae00001EFiji#FJ.TH.EA0c2EATholo East00001ETajikistan#TJ.KL0c2KLKhatlon00001BBurundi#BI.MY0c2MYMuyinga000032Guyana#GY.ES0c2ESEssequibo Islands-West Demerara00001BSerbia#RS.KO0c2KOKosovski00002BHungaryRegions#HU.NH0c2NHNorthern Hungary000029FranceDepartment#FR.EL0c2ELEure et Loir00001BAlgeria#DZ.TB0c2TBTebessa00001CSriLanka#LK.CO0c2COColombo000014Mali#ML.GA0c2GAGao000019Senegal#SN.KD0c2KDKolda000019Missouri#1810c2RIRipley000020Ireland#0100c2KLCill Chainnigh000020NorthAmerica#0120c2GTGuatemala000020California#0850c2STSanta Clara000016Texas#2530c2JONJones000017Nebraska#1850c2YOYork000016Georgia#0610c2CYClay000024WorldwithCountries#1390c2EEEstonia00001EMinnesota#1130c2PEPennington00001BKentucky#0970c2HIHarrison00001AMichigan#1070c2MCMecosta00001ANewMexico#0060c2CICibola00001CMississippi#0070c2ATAttala000025Europewithcountries#0080c2HYCroatia000021WestVirginia#0250c2GEGreenbrier000020Scotland#0110c2DUDumfriesshire000018NewWorld#1840c2WSSamoa000014Asia3#0260c2LALaos000018Virginia#1730c2SMSmyth00001BColorado#0050c2ARArapahoe00001DSouthDakota#0430c2DODouglas000019Alabama#0210c2CIChilton000020NewCaledonia#NC.NO.PM0c2PMPoum000017Bulgaria#650c2YYambol000018Ontario#410c2RERenfrew000026Montenegro#120c2NKNik&scaron;i&#263;00001AMiddleEast#070c2KUKuwait00001CSwitzerland#190c2THThurgau000023SouthEuropeanRegion#050c2GRGreece000022EastEuropeanRegion#060c2RURussia000016Canada#100c2QCQuebec00001FNewWorld#320c2GFFrench Guiana000018Quebec#040c2MAMauricie000016Belize#060c2TOToledo000022Bahamas#080c2CECentral Eleuthera000017Japan#380c2SZShizouka00001DNorwayRegion#060c2HEHedmark000029FrenchGuiana#GF.SL.SL0c2SLSaint Laurent000016Fiji#FJ.WE.BA0c2BABa00001CTanzania#TZ.MY0c2MYManyara00001FGuineaBissau#GW.BS0c2BSBissau00001BUK7#UK.IM0c2IMIsle of Man00001BZimbabwe#ZW.HA0c2HAHarare000026Serbia#RS.KP0c2KPKosovsko Pomoravski000025Singapore#SG.SO0c2SOSouth Singapore00001FCambodia#KH.MK0c2MKMondulkiri00001FCongo#CG.CO0c2COCuvette Ouest000019Angola#AO.MX0c2MXMoxico000019Algeria#DZ.AL0c2ALAlger000026Algeria#DZ.BB0c2BBBordj Bou Arreridj000029CentralAfricanRepublic#CF.LB0c2LBLobaye000020NorthCarolina#0910c2HTHertford00001AGeorgia#2430c2RARandolph000017Ireland#0110c2LALaois00001CNorthAmerica#0130c2HTHaiti000018Kansas#0450c2DGDouglas00001FSouthCarolina#0170c2CACalhoun00001CIllinois#0810c2JEJefferson000018Missouri#0010c2ADAdair000024WorldwithCountries#1400c2FIFinland00001ENorthDakota#0150c2BRBurleigh000019Texas#0730c2CHECherokee000017Ohio#0350c2CUCuyahoga00001ANewMexico#0070c2COColfax000019Nebraska#0050c2ARArthur00001AWyoming#0270c2NINiobrara00002CEuropewithcountries#0090c2CZCzech Republic000018Tennessee#0950c2LALake00001FScotland#0120c2EAEast Lothian000022NewWorld#1850c2SBSolomon Islands00001BOklahoma#0470c2GAGarfield000015Iowa#0990c2JSJasper000017Texas#4350c2SUTSutton00001ANewJersey#0410c2WAWarren000018Indiana#0510c2GIGibson00001ANewYork#0230c2CTCortland000017Ontario#420c2SISimcoe000018Montenegro#130c2PVPlav00001EMiddleEast#080c2KGKyrgyzstan00001BSwitzerland#200c2TITicino000022SouthEuropeanRegion#060c2ITItaly00001CCanada#110c2SKSaskatchewan000026USACentralRegion#380c2NDNorth Dakota000023USASouthWestRegion#040c2AZArizona000018NewWorld#330c2GYGuyana000016Quebec#050c2ESEstrie000014USA#WY0c2WYWyoming00001APuertoRico#510c2DODorado000021Bahamas#090c2FPCity of Freeport000016Japan#390c2TOTochigi00001FNorwayRegion#070c2HOHordaland000019Nepal#NP.LU0c2LULumbini00001ANepal#NP.NA0c2NANarayani000021HongKong#HK.KC0c2KCKowloon City000019Uganda#UG.TR0c2TRTororo000021Kiribati#KI.LI0c2LILine Islands00001CPhilippines#PH.AB0c2ABAbra00001DRussia#RU.IN0c2INIngushetia000021China2#CN.XJ0c2XJXinjiang Uygur00001APalau#PW.NS0c2NSNgchesar000021Lebanon#LE.JA0c2JASouth Lebanon00001BTuvalu#TV.FN0c2FNFunafuti00001CUzbekistan#UZ.NW0c2NWNavoi00001AAlgeria#DZ.BC0c2BCBechar00001DBurma#MM.KH0c2KHKayah State000022Macedonia#MK.SO0c2SOSuto Orizari000026Philippines#PH.SC0c2SCSouth Cotabato00001EMissouri#1830c2SRSt. Charles00001AIreland#0120c2LELiatroim00001FNorthAmerica#0140c2HNHonduras00001FCalifornia#0870c2SCSanta Cruz000017Texas#2550c2KARKarnes000019Georgia#0630c2CTClayton000023WorldwithCountries#1410c2FRFrance000018Minnesota#1150c2PIPine000017Kentucky#0990c2HTHart00001CMichigan#1090c2MMMenominee000018Florida#0270c2DEDesoto00001CMississippi#0090c2BEBenton000025Europewithcountries#0100c2DKDenmark000020WestVirginia#0270c2HAHampshire000017Scotland#0130c2FIFife000018NewWorld#1860c2TOTonga000018Asia3#0280c2MYMalaysia00001EVirginia#1750c2SUSouthampton00001CColorado#0070c2ACArchuleta00001DSouthDakota#0450c2EDEdmunds000019Alabama#0230c2COChoctaw00002EOntario#430c2STStormont, Dundas and Glengary000020Montenegro#140c2PLPlu&#382;ine00001BMiddleEast#090c2LELebanon000018Switzerland#210c2URUri000026SouthEuropeanRegion#070c2MKMacedonia00001FCanada#120c2YTYukon Territory00001ANewWorld#340c2PYParaguay00001FQuebec#060c2MNMontr&eacute;al00001FBahamas#100c2CKCrooked Island000018Japan#400c2TKTokushima00002CNorwayRegion#080c2MRM&oslash;re og Romsdal00001EFiji#FJ.TH.WE0c2WETholo West000021SierraLeone#SL.NO.KM0c2KMKambia00001BNiger#NE.TL0c2TLTillabery00001BTajikistan#TJ.LE0c2LESogd00001BDjibouti#DJ.DK0c2DKDikhil00002BRussia#RU.JE0c2JEJewish Autonomous Region00001BUganda#UG.BR0c2BRKabarole00001DBotswana#BW.KL0c2KLKgatleng000019China2#CN.FJ0c2FJFujian00001BVietnam#VN.HT0c2HTHa Tinh00001FCapeVerde#CV.MO0c2MOMosteiros00001AAlgeria#DZ.AN0c2ANAnnaba00001ANewYork#0250c2DEDelaware00001CNorthCarolina#0930c2HOHoke00001AGeorgia#2450c2RIRichmond00001BIreland#0130c2LILuimneach00001ENorthAmerica#0150c2JMJamaica000018Kansas#0470c2EDEdwards000022SouthCarolina#0190c2CHCharleston000019Illinois#0830c2JRJersey000019Missouri#0030c2ANAndrew000024WorldwithCountries#1420c2DEGermany00001ANorthDakota#0170c2CACass00001ATexas#0750c2CHIChildress000014Ohio#0370c2DADarke000019NewMexico#0090c2CUCurry000019Nebraska#0070c2BABanner000016Wyoming#0290c2PAPark000025Europewithcountries#0110c2EEEstonia00001ETennessee#0970c2LULauderdale000022Scotland#0140c2ISInverness-shire000019NewWorld#1870c2TVTuvalu000019Oklahoma#0490c2GRGarvin000018Iowa#1010c2JEJefferson000018Texas#4370c2SWISwisher000017Indiana#0530c2GRGrant000018Ontario#440c2SUSudbury00001CMontenegro#150c2PUPljevlja000018MiddleEast#100c2MUOman00001BSwitzerland#220c2VAValais000022SouthEuropeanRegion#080c2MTMalta000025Canada#130c2NTNorthwest Territories000022USACentralRegion#400c2OKOklahoma000026USASouthWestRegion#060c2CACalifornia000016NewWorld#350c2PEPeru000019Quebec#070c2OUOutaouais00001BPuertoRico#530c2FJFajardo000022Bahamas#110c2EBEast Grand Bahama000014Japan#410c2TYTokyo00001ENorwayRegion#090c2NONordland00001FPhilippines#PH.RO0c2RORomblon00001BUganda#UG.BS0c2BSBushenyi000028EquatorialGuinea#GQ.BN0c2BNBioko Norte00001DVietnam#VN.HU0c2HUHau Giang000021Morocco#MA.DA0c2DADoukkala Abda00001CMissouri#1850c2SISt. Clair00001AIreland#0140c2LOLongfort00001DNorthAmerica#0160c2MXMexico00001BCalifornia#0890c2SHShasta000018Texas#2570c2KAUKaufman00001ALouisiana#0010c2ACAcadia000020Virginia#7200c2NRNorton (City)000018Georgia#0650c2CIClinch000023WorldwithCountries#1430c2GRGreece00001DMinnesota#1170c2PSPipestone00001CKentucky#1010c2HEHenderson00001AMichigan#1110c2MDMidland000017Florida#0290c2DIDixie00001DMississippi#0110c2BOBolivar000025Europewithcountries#0120c2FIFinland00001BArkansas#0010c2ARArkansas00001EWestVirginia#0290c2HNHancock000022Scotland#0150c2KCKincardineshire00001ANewWorld#1880c2VUVanuatu000018Asia3#0300c2MNMongolia00001FVirginia#1770c2SPSpotsylvania000017Colorado#0090c2BABaca000020SouthDakota#0470c2FRFall River000018Alabama#0250c2CLClarke000030NewCaledonia#NC.SU.IP0c2IPL'&Icirc;le-des-Pins00001COntario#450c2TBThunder Bay00001DMontenegro#160c2PGPodgorica00001CMiddleEast#110c2PKPakistan000019Switzerland#230c2VUVaud000027SouthEuropeanRegion#090c2MOMontenegro000017Canada#140c2NUNunavut00001ANewWorld#360c2SRSuriname00002CQuebec#080c2ATAbitibi-T&eacute;miscamingue00001BPuertoRico#540c2FLFlorida000016Bahamas#120c2EMExuma000016Japan#420c2TTTottori00002BNorwayRegion#100c2NTNord-Tr&oslash;ndelag00001EPhilippines#PH.QZ0c2QZQuezon000029Philippines#PH.SF0c2SFShariff Kabunsuan000023CentralAmerica2#CE.GD0c2GDGrenada000017Yemen#YE.MA0c2MAMarib00001EEastTimor#TL.MF0c2MFManufahi00001EMacedonia#MK.BG0c2BGBogdanci00001BSudan#SD.BN0c2BNBlue Nile00001ECoteDivoire#CI.BF0c2BFBafing00001DThailand#TH.YS0c2YSYasothon00001CKuwait#KW.KU0c2KUAl Kuwayt000019Cameroon#CM.NO0c2NONord000025CaymanIslands#KY.GT0c2GTGeorge Town00001ESyria#SY.DY0c2DYDayr az Zawr000015Togo#TG.KA0c2KAKara00001FGhana#GH.AA0c2AAGreater Accra000018Indiana#0550c2GEGreene00001ANewYork#0270c2DUDutchess00001CNorthCarolina#0950c2HYHyde00001AGeorgia#2470c2RORockdale000021Missouri#1860c2SGSte. Genevieve00001BIreland#0150c2LUL&uacute;000020NorthAmerica#0170c2NINicaragua000014Kansas#0490c2EKElk000020SouthCarolina#0210c2CECherokee00001DIllinois#0850c2JDJo Daviess00001BMissouri#0050c2ATAtchison000024WorldwithCountries#1440c2HUHungary00001ENorthDakota#0190c2CVCavalier000015Texas#0770c2CLAClay000029Virginia#5400c2CVCharlottesville (City)000017Ohio#0390c2DEDefiance00001BNewMexico#0110c2DBDe Baca000019Nebraska#0090c2BLBlaine000018Wyoming#0310c2PLPlatte000024Europewithcountries#0130c2FRFrance00001CTennessee#0990c2LWLawrence000020Scotland#0160c2KNKinross-shire000020NewWorld#1890c2NCNew Caledonia000018Oklahoma#0510c2GDGrady000016Iowa#1030c2JOJohnson000015Asia3#0310c2NPNepal000018Texas#4390c2TARTarrant00001COntario#460c2TITimiskaming00001FMontenegro#170c2RORo&#382;aje000019MiddleEast#120c2QAQatar000018Switzerland#240c2ZUZug000025SouthEuropeanRegion#100c2PTPortugal000024USASouthWestRegion#080c2COColorado000019NewWorld#370c2UYUruguay00001FQuebec#090c2COC&ocirc;te-Nord000022PuertoRico#550c2GCGu&aacute;nica00001ABahamas#130c2GCGrand Cay000015Japan#430c2TAToyama00001DNorwayRegion#110c2OPOppland000022FrenchGuiana#GF.SL.AP0c2APApatou000024MarshallIsland#MH.MH.LK0c2LKLikiep000021Philippines#PH.SG0c2SGSarangani00001DEastTimor#TL.LQ0c2LQLiquica00001FMacedonia#MK.AR0c2ARAracinovo000018Serbia#RS.MA0c2MAMacva000018Palau#PW.NW0c2NWNgiwal000018Uganda#UG.BU0c2BUBusia000024Libya#LY.JA0c2JAAl Jabal al Akhdar000019Nigeria#NG.EK0c2EKEkiti000020Mauritania#MR.GD0c2GDGuidimaka00001DMacedonia#MK.SS0c2SSSopiste00001FMissouri#1870c2SFSt. Francois00001AIreland#0160c2MAMaigh Eo00001DNorthAmerica#0180c2PAPanama00001BCalifornia#0910c2SISierra000018Texas#2590c2KENKendall000019Louisiana#0030c2ALAllen000016Georgia#0670c2CBCobb000024WorldwithCountries#1450c2ISIceland000018Minnesota#1190c2PLPolk000018Kentucky#1030c2HYHenry00001CMichigan#1130c2MIMissaukee000017Florida#0310c2DUDuval00001DMississippi#0130c2CACalhoun000025Europewithcountries#0140c2DEGermany000019Arkansas#0030c2ASAshley00001CWestVirginia#0310c2HRHardy000025Scotland#0170c2KIKirkcudbrightshire00001ANewWorld#1900c2BABahrain00001BVirginia#1790c2STStafford000017Colorado#0110c2BEBent00001BSouthDakota#0490c2FAFaulk000016Alabama#0270c2CYClay000018Ontario#470c2TOToronto000021Montenegro#180c2SA&Scaron;avnik00001FMiddleEast#130c2SASaudiArabia00001BSwitzerland#250c2ZRZurich000027SouthEuropeanRegion#110c2SMSan Marino00001BNewWorld#380c2VEVenezuela000025Quebec#100c2NONord-du-Qu&eacute;bec000016Kenya#010c2CECentral00001FBahamas#140c2HBHarbour Island000017Japan#440c2WAWakayama00001ANorwayRegion#120c2OSOslo000032DICT_RSS.FEEDS0c000001ANAME0c1A1NameL4000371BMVBP.BP0c00006B3SBBP.SB.GETJOB0c0SUBROUTINE SBBP.SB.GETJOB(entry,startpos,bytes)** Copyright (C) 2006 Sierra Bravo Corporation, All Rights Reserved** Programm: SBBP.SB.LISTPEQS* Written by: Luke Bucklin, Sierra Bravo* Date: 04/24/06* Description: Send an XML document of the print queue (LISTPEQS)*COMMON /SBPRINT/ LINK.LIST, LINK.LIST.JOB*EQU P.JOB      TO 1EQU P.PORT     TO 2EQU P.STATUS   TO 3EQU P.QUEUE    TO 4EQU P.BYTES    TO 5EQU P.DATE     TO 6EQU P.TIME     TO 7EQU P.OWNER    TO 8EQU P.PREVIEW  TO 9*LINK.LIST = "" ; LINK.LIST.JOB = ""*CHUNKSIZE = 50000*FRAMESIZE = SYSTEM(32) ;* D3-only*IF NOT(startpos MATCHES "1N0N") THEN startpos = 1IF NOT( bytes MATCHES "1N0N") THEN bytes=99999999*EXECUTE "LISTPEQS ":entry CAPTURING PEQS.OUTLINES = DCOUNT( PEQS.OUT, @AM )GOOD.LINE = 0PINFO = ""FOR PL = 1 TO LINES-1 UNTIL GOOD.LINE  LINE = PEQS.OUT<PL>  GOOD.LINE = 1  previewsize = 0; GET.PREVIEW = 0  CALL SUB.SB.PARSEPEQS(LINE,PINFO,previewsize,GET.PREVIEW,GOOD.LINE)NEXT PL**CRT '<job id="':entry:'">'*CRT ' <date>':OCONV(PINFO<P.DATE>,'D2/'):'</date>'*CRT ' <time>':OCONV(PINFO<P.TIME>,'MTS'):'</time>'*CRT "<data><![CDATA[":CHUNKS = 0NO.PAGES = 1LOOP  IF bytes > CHUNKSIZE THEN    sendbytes = CHUNKSIZE    bytes -= CHUNKSIZE  END ELSE    sendbytes = bytes    bytes = 0  END  OUTPUT = ""  CALL SUB.SB.GET.ENTRY(entry,startpos,sendbytes,OUTPUT,ERR)  CHUNKS += 1  IF NOT(ERR) THEN    CONVERT CHAR(0) TO "" IN OUTPUT    CALL SWAP(OUTPUT,CHAR(12),'[0x12]')    NO.PAGES = NO.PAGES + COUNT( OUTPUT, CHAR(12) )    CRT OUTPUT:  END ELSE EXIT  startpos += sendbytesWHILE bytes AND OUTPUT # "" DO REPEAT*CRT ']]></data><pages>':NO.PAGES:'</pages>'*CRT '</job>'STOP000A12SUB.SB.GET.ENTRY0c0SUBROUTINE SUB.SB.GET.ENTRY(JOB,START.POS,BYTES,OUTPUT,ERR)** Copyright (C) 2006 Sierra Bravo Corporation, All Rights Reserved** Programm: SUB.SB.GET.ENTRY* Written by: Luke Bucklin, Sierra Bravo* Date: 04/24/06* Description: Extract a segment of print queue content*COMMON /SBPRINT/ LINK.LIST, LINK.LIST.JOB*FRAMESIZE = SYSTEM(32) ;* D3-onlyOUTPUT = ""ERR = ""BYTES.TO.GET = BYTES*EXECUTE "LISTPEQS ":JOB:" E" CAPTURING JOB.LINEJOB.LINE = JOB.LINE<5>	FID = JOB.LINE[34,8]IF FID # "" THEN  * Get full sequential list of frame IDs  FSIZE = FRAMESIZE-1  IF START.POS > 1 OR BYTES > FSIZE THEN    IF LINK.LIST.JOB # JOB THEN      * We didn't just build this recently, so go ahead and build it now      * associate the LINK.LIST (in common) with the job so if we are asked      * to build this linked list again for this job, we can skip this part      * and just pull it from common      LINK.LIST = FID      LINK.LIST.JOB = JOB      EXECUTE "DUMP .":FID:" L" CAPTURING LINKAGE      START.ROW = INDEX(LINKAGE,'+',1)      START.ROW = DCOUNT(LINKAGE[1,START.ROW],@AM)      MAX.ROWS = DCOUNT( LINKAGE, @AM )      FOR LX = START.ROW TO MAX.ROWS        ROW = LINKAGE<LX>        IF TRIM(ROW) # "" THEN          XFRAME = TRIM(FIELD( ROW,'(',2))          XFRAME = FIELD(XFRAME,' ',1)          LINK.LIST<-1> = XFRAME        END      NEXT LX    END    *    * First frame is FRAMESIZE-1 bytes because the first    * byte is a throwaway.    *    START.TEMP = START.POS    SKIP.FRAMES = 0    LOOP UNTIL START.TEMP <= FSIZE DO      SKIP.FRAMES += 1      START.TEMP -= FSIZE      FSIZE = FRAMESIZE    REPEAT    IF SKIP.FRAMES THEN OFFSET = START.TEMP-1 ELSE OFFSET = START.TEMP    IF SKIP.FRAMES = 0 AND OFFSET = 0 THEN OFFSET = 1  END ELSE    LINK.LIST = FID    OFFSET = 1    SKIP.FRAMES = 0  END  MAX.FRAMES = DCOUNT( LINK.LIST, @AM )  FX.START = 1 + SKIP.FRAMES  FOR FX = FX.START TO MAX.FRAMES WHILE BYTES.TO.GET     FID = LINK.LIST<FX>    EXECUTE "DUMP .":FID:" SX" CAPTURING PREVX.OUT    IF LEN(PREVX.OUT) # FRAMESIZE*2 THEN      ERR = 1      EXIT    END    IF OFFSET THEN      PREVX.OUT = PREVX.OUT[(OFFSET*2)+1,FRAMESIZE*2]    END    DATLEN = LEN(PREVX.OUT) / 2    PREVX.OUT = OCONV( PREVX.OUT, 'MY' )    IF DATLEN > BYTES.TO.GET THEN      PREVX.OUT = PREVX.OUT[1,BYTES.TO.GET]      BYTES.TO.GET = 0    END ELSE      BYTES.TO.GET -= DATLEN    END    OUTPUT := PREVX.OUT    CONVERT CHAR(0) TO "" IN OUTPUT    CONVERT @AM TO "^" IN OUTPUT    OFFSET = 0  NEXT FXEND ELSE ERR = 1RETURN000703SUB.SB.PARSEPEQS0c0SUBROUTINE SUB.SB.PARSEPEQS(LINE,PINFO,previewsize,GET.PREVIEW,GOOD.LINE)*EQU P.JOB      TO 1EQU P.PORT     TO 2EQU P.STATUS   TO 3EQU P.QUEUE    TO 4EQU P.BYTES    TO 5EQU P.DATE     TO 6EQU P.TIME     TO 7EQU P.OWNER    TO 8EQU P.PREVIEW  TO 9*FRAMESIZE = SYSTEM(32) ;* D3-onlyIF NOT(FRAMESIZE MATCHES "1N0N") THEN FRAMESIZE = 4000*PINFO = ""*JOB = TRIM(LINE[1,4])IF JOB MATCHES "1N0N" THEN  PINFO<P.JOB> = JOB  *  L.PORT = TRIM(LINE[15,5])  PINFO<P.PORT> = L.PORT  *  L.STATUS = TRIM(LINE[23,15])  STATUS.MSG = ""  IF INDEX(L.STATUS,'h',1) THEN    STATUS.MSG := 'Hold,'  END  IF INDEX(L.STATUS,'l',1) THEN    STATUS.MSG := 'Locked,'  END  IF INDEX(L.STATUS,'o',1) THEN    STATUS.MSG := 'Generating,'  END  IF INDEX(L.STATUS,'s',1) THEN    STATUS.MSG := 'Spooled,'  END ELSE IF INDEX(L.STATUS,'p',1) THEN    STATUS.MSG := 'To print,'  END ELSE IF INDEX(L.STATUS,'x',1) THEN    STATUS.MSG := 'Canceled,'  END  IF STATUS.MSG # "" THEN STATUS.MSG = STATUS.MSG[1,LEN(STATUS.MSG)-1] ;* Get rid of the trailing comma  PINFO<P.STATUS> = STATUS.MSG  *  L.QUEUE = TRIM(LINE[42,5])  PINFO<P.QUEUE> = L.QUEUE  *  L.BYTES = TRIM(LINE[47,7])  L.BYTES = L.BYTES * FRAMESIZE  PINFO<P.BYTES> = L.BYTES  *  L.DATE = TRIM(LINE[55,8])  L.DATE = ICONV( L.DATE,'D' )  PINFO<P.DATE> = L.DATE  *  L.TIME = TRIM(LINE[64,8])  L.TIME = ICONV( L.TIME, 'MTS' )  PINFO<P.TIME> = L.TIME  *  L.OWNER = TRIM(LINE[73,20])  PINFO<P.OWNER> = L.OWNER  *  IF GET.PREVIEW THEN    *    * Get preview unless we are searching -that's a whole different process.    *    L.PREVIEW = ""    CALL SUB.SB.GET.ENTRY(JOB,1,previewsize,L.PREVIEW,ERR)    IF ERR # "" THEN GOOD.LINE = 0    PINFO<P.PREVIEW> = L.PREVIEW  ENDEND ELSE GOOD.LINE = 0RETURN001F30SBBP.SB.LISTPEQS0c0** Copyright (C) 2008 Sierra Bravo Corporation, All Rights Reserved** Programm: SBBP.SB.LISTPEQS* Written by: Luke Bucklin, Sierra Bravo* Adapted by: David Bucklin, Sierra Bravo*             CGI Version of the Bravo Print XML API* Date: 04/24/06* Description: Send an XML document of the print queue (LISTPEQS)*COMMON /SBPRINT/ LINK.LIST, LINK.LIST.JOBINCLUDE WBPD WWW.INCLUDE*LINK.LIST = "" ; LINK.LIST.JOB = ""*EQU P.JOB      TO 1EQU P.PORT     TO 2EQU P.STATUS   TO 3EQU P.QUEUE    TO 4EQU P.BYTES    TO 5EQU P.DATE     TO 6EQU P.TIME     TO 7EQU P.OWNER    TO 8EQU P.PREVIEW  TO 9*OPEN '','SBBP.FORMS' TO F.SBBP.FORMS ELSE STOP 201, 'SBBP.FORMS'*CALL WDB.VARS(VARS,VALS)*FRAMESIZE = SYSTEM(32) ;* D3-only*LOCATE "entrystart" IN VARS SETTING POS THEN  entrystart = VALS<POS>END ELSE entrystart = ""LOCATE "entries" IN VARS SETTING POS THEN  entries = VALS<POS>END ELSE entries = ""LOCATE "begindate" IN VARS SETTING POS THEN  begindate = VALS<POS>  begindate = ICONV(begindate,'D')END ELSE begindate = ""LOCATE "enddate" IN VARS SETTING POS THEN  enddate = VALS<POS>  enddate = ICONV(enddate,'D')END ELSE enddate = ""LOCATE "owner" IN VARS SETTING POS THEN  owner = VALS<POS>END ELSE owner = ""LOCATE "queue" IN VARS SETTING POS THEN  queue = VALS<POS>END ELSE queue = ""LOCATE "previewsize" IN VARS SETTING POS THEN  previewsize = VALS<POS>END ELSE previewsize = ""LOCATE "port" IN VARS SETTING POS THEN  port = VALS<POS>END ELSE port = ""LOCATE "searchstring" IN VARS SETTING POS THEN  searchstring = VALS<POS>END ELSE searchstring = ""IF searchstring # "" THEN GET.PREVIEW = 0 ELSE GET.PREVIEW = 1IF NOT(previewsize MATCHES "1N0N") THEN  previewsize = 500ENDLOCATE "entry" IN VARS SETTING POS THEN  entry = VALS<POS>END ELSE entry = ""LOCATE "action" IN VARS SETTING POS THEN  action = VALS<POS>END ELSE action = ""**ERROR = ""ALL.ENTRIES.FOUND = 0ENTRY.LIST = ''LOOP  LOCATE "entries[]" IN VARS SETTING POS THEN    ENTRY.LIST<-1> = VALS<POS>    VARS<POS> = "XXX"  END ELSE ALL.ENTRIES.FOUND = 1UNTIL ALL.ENTRIES.FOUND DO REPEATIF entry # "" THEN ENTRY.LIST<-1> = entryECNT = DCOUNT( ENTRY.LIST, @AM )FOR EX = 1 TO ECNT  entry = ENTRY.LIST<EX>  BEGIN CASE    CASE entry = ""      CMD = ''    CASE action = "delete"      CMD = "SP-KILL ":entry:"F"      EXECUTE CMD CAPTURING JUNK      CMD = "SP-EDIT ":entry:" MUD"    CASE action = "print"      EXECUTE "SP-KILL ":entry:"F" CAPTURING JUNK      IF queue # "" THEN        EXECUTE "SP-ASSIGN F":queue CAPTURING JUNK      END      CMD = "SP-EDIT ":entry:" MSRU"    CASE action = "release"      CMD = "SP-KILL ":entry:"F"    CASE action = "downloadtxt"      CRT "Content-Type: text/plain"      CRT "Content-Disposition: attachment;filename=":entry:".txt"      CRT      SESSION$CONTENT.SENT = 1      CALL SBBP.SB.GETJOB(entry,1,"")      STOP      CASE 1      CMD = ''  END CASE  IF CMD # "" THEN    EXECUTE CMD CAPTURING JUNK  ENDNEXT EX*CMD.SUFF = ""IF entrystart # "" THEN  CMD.SUFF = entrystart:"-9999 "ENDIF owner # "" THEN  CMD.SUFF := "'":owner:"' "END*EXECUTE "LISTPEQS ":CMD.SUFF CAPTURING PEQS.OUT*CRT "Content-Type: text/html"CRTSESSION$CONTENT.SENT = 1*READ FORM.DATA FROM F.SBBP.FORMS, 'listpeqs.html' ELSE FORM.DATA = ''FORM.HDR.POS = INDEX( FORM.DATA, '[QUEUE]', 1 )-1PART1 = FORM.DATA[1,FORM.HDR.POS]CONVERT @AM TO CHAR(13) IN PART1CRT PART1PART2 = FORM.DATA[FORM.HDR.POS+7,99999]XML = ""*LINES.SENT = 0LINES = DCOUNT( PEQS.OUT, @AM )FOR PL = 1 TO LINES-1  LINE = PEQS.OUT<PL>  GOOD.LINE = 1  CALL SUB.SB.PARSEPEQS(LINE,PINFO,previewsize,GET.PREVIEW,GOOD.LINE)  * Filtering  BEGIN CASE    CASE NOT(GOOD.LINE) ; NULL    CASE PINFO<P.JOB> = "" ; GOOD.LINE = 0    CASE begindate # "" AND enddate # ""      IF PINFO<P.DATE> < begindate OR PINFO<P.DATE> > enddate THEN GOOD.LINE = 0    CASE port # "" AND PINFO<P.PORT> # port ; GOOD.LINE = 0    CASE queue # "" AND	 PINFO<P.QUEUE> # queue ; GOOD.LINE = 0    CASE 1      NULL  END CASE  IF GOOD.LINE THEN    *     IF searchstring # "" THEN      JOB = PINFO<P.JOB>      GOSUB SEARCH.JOB    END  END  IF GOOD.LINE THEN    LINES.SENT += 1    *    PDATE = OCONV(PINFO<P.DATE>,'D2/')    PTIME = OCONV(PINFO<P.TIME>,'MTS')    *    IF LINES.SENT / 2 = INT(LINES.SENT/2) THEN      XML<-1> = '<tr class="even">'    END ELSE      XML<-1> = '<tr class="odd">'    END    XML<-1> = '<td><input type="checkbox" name="entries[]" value="':PINFO<P.JOB>:'" /></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?entry=':PINFO<P.JOB>:'&action=downloadtxt">':PINFO<P.JOB>:'</a></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?queue=':PINFO<P.QUEUE>:'">':PINFO<P.QUEUE>:'</a></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?owner=':PINFO<P.OWNER>:'">':PINFO<P.OWNER>:'</a></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?port=':PINFO<P.PORT>:'">':PINFO<P.PORT>:'</a></td>'    XML<-1> = '<td align="right">':OCONV(PINFO<P.BYTES>/1000,'MD,'):'</td>'    XML<-1> = '<td>':OCONV(PINFO<P.DATE>,'D2/'):' ':OCONV(PINFO<P.TIME>,'MTS'):'</td>'    XML<-1> = '<td>':PINFO<P.STATUS>:'</td>'    XML<-1> = \<td><a href="#" title="Print Job" onclick="Effect.SlideDown('printDialog\:PINFO<P.JOB>:\',{duration:0.25}); return false;"><img src="/db/images/button_print.gif"/></a>\*    XML<-1> = \<a href="/viewjob.php?entry=\:PINFO<P.JOB>:\&date=\:PDATE:\&time=\:PTIME:\" title="View Job"><img src="/db/images/button_preview.gif"/></a>\    XML<-1> = \<a href="/dbc/SBBP.SB.LISTPEQS?action=downloadtxt&entry=\:PINFO<P.JOB>:\&date=\:PDATE:\&time=\:PTIME:\" title="Download Job as TXT File"><img src="/db/images/button_downloadtxt.gif"/></a>\    XML<-1> = \<a href="/dbc/SBBP.SB.LISTPEQS?action=delete&entry=\:PINFO<P.JOB>:\&queue=&port=&owner=&searchstring=&begindate=&enddate=&search_type=" title="Delete Job" class="deletejob" onclick="return confirm('Are you sure you want to delete this job?')"><img src="/db/images/button_delete.gif"/></a>\    XML<-1> = '<div style="position:relative;">'    XML<-1> = '<div class="printDialog" id="printDialog':PINFO<P.JOB>:'" style="display:none;">'    XML<-1> = \<div> Queue <input type="text" value="0" style="width:40px;" maxlength="4" id="overrideQueue\:PINFO<P.JOB>:\"/>\    XML<-1> = \<span class="button"><button type="button" onclick="document.location='/dbc/SBBP.SB.LISTPEQS?action=print&entry=\:PINFO<P.JOB>:\&overridequeue='+$F('overrideQueue\:PINFO<P.JOB>:\')+'&queue=&port=&owner=&searchstring=&begindate=&enddate=&search_type='">Print</button></span>\    XML<-1> = \<span class="button"><button type="button" onclick="Effect.SlideUp('printDialog\:PINFO<P.JOB>:\',{duration:0.25});return false;">Cancel</button></span>\    XML<-1> = '</div> </div>'    XML<-1> = '<pre class="preview">'    XML<-1> = PINFO<P.PREVIEW>    XML<-1> = '</pre> </div> </td> </tr>'    CALL WEB.SEND(XML)    XML = ''    *    *IF LINES.SENT >= entries AND entries # "" THEN EXIT  ENDNEXT PLCALL WEB.SEND(PART2)STOP*SEARCH.JOB: * Search the job for the string*START.POS = 1GOOD.LINE = 0SEARCHBUFFSIZE = 15000LOOP  BUFFER = ""*  PRINT "Searching job # ":JOB:" ":START.POS:",":SEARCHBUFFSIZE  CALL SUB.SB.GET.ENTRY(JOB,START.POS,SEARCHBUFFSIZE,BUFFER,ERR)  IF NOT(ERR) THEN    FOUND.POS = INDEX( BUFFER, searchstring, 1 )    IF FOUND.POS THEN      BACK.UP = FOUND.POS - INT(previewsize/2) - 140      START.POS = START.POS + BACK.UP      CALL SUB.SB.GET.ENTRY(JOB,START.POS,previewsize,L.PREVIEW,ERR)      FOUND.NL = 0      FOR NL = 1 TO 250 UNTIL FOUND.NL      	CH = L.PREVIEW[NL,1]      	IF CH = CHAR(10) OR CH = CHAR(13) THEN      	  L.PREVIEW = L.PREVIEW[NL,previewsize]      	  FOUND.NL = 1      	END      NEXT NL      PINFO<P.PREVIEW> = L.PREVIEW      GOOD.LINE = 1    END ELSE      START.POS = START.POS + SEARCHBUFFSIZE - LEN(searchstring)    END  END ELSE EXITUNTIL ERR OR GOOD.LINE OR BUFFER = "" DO REPEATRETURN04B847MVDB.SUBS0c00020BFBUILD.DEMO.FINANCIAL.PICTURE0c2SUBROUTINE BUILD.DEMO.FINANCIAL.PICTURE(YYYY,TODAY,LAST.EOM)OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''REC<1>=YYYYREC<2>=YYYY-1REC<3>=YYYY-1LAST.THREE=YYYY-2:CHAR(253):YYYY-1:CHAR(253):YYYY*OPEN '','MVDB.CONTROL' TO FILE.SALES ELSE STOP 201,'SALES'READ THIS.YEAR.SALES FROM FILE.SALES, 'MONTHLY.':YYYY ELSE THIS.YEAR.SALES=''READ LAST.YEAR.SALES FROM FILE.SALES, 'MONTHLY.':(YYYY-1) ELSE LAST.YEAR.SALES=''READ PREV.YEAR.SALES FROM FILE.SALES, 'MONTHLY.':(YYYY-2) ELSE PREV.YEAR.SALES=''READ PREV.YEAR.GPS FROM FILE.SALES, 'MONTHLY.GPS.':(YYYY-2) ELSE SALES.2.YEARS.AGO=''READ THIS.YEAR.GPS FROM FILE.SALES, 'MONTHLY.GPS.':YYYY ELSE THIS.YEAR.GPS=''READ LAST.YEAR.GPS FROM FILE.SALES, 'MONTHLY.GPS.':(YYYY-1) ELSE LAST.YEAR.GPS=''READ THIS.YEAR.PARTS FROM FILE.SALES, 'MONTHLY.PARTS.':YYYY ELSE THIS.YEAR.PARTS=''READ LAST.YEAR.PARTS FROM FILE.SALES, 'MONTHLY.PARTS.':(YYYY-1) ELSE LAST.YEAR.PARTS=''READ THIS.YEAR.SERVICES FROM FILE.SALES, 'MONTHLY.SERVICES.':YYYY ELSE THIS.YEAR.SERVICES=''READ LAST.YEAR.SERVICES FROM FILE.SALES, 'MONTHLY.SERVICES.':(YYYY-1) ELSE LAST.YEAR.SERVICES=''FY.LAST=SUM(LAST.YEAR.SALES)REC<7>=FY.LASTFY.PARTS=SUM(LAST.YEAR.PARTS)REC<18>=FY.PARTSFY.SERVICES=SUM(LAST.YEAR.SERVICES)REC<25>=FY.SERVICESLAST.MONTH.NO=OCONV(LAST.EOM,'D2-')[1,2]+0YTD.THIS=0YTD.LAST=0YTD.PREV=0GPS.THIS=0GPS.LAST=0GPS.PREV=0PARTS.THIS=0PARTS.LAST=0SERVICES.THIS=0SERVICES.LAST=0THIS.YEAR.MONTHLY.SALES=''THIS.YEAR.MONTHLY.GPS=''FOR MO.NO = 1 TO LAST.MONTH.NO   YTD.THIS+=THIS.YEAR.SALES<MO.NO>   THIS.YEAR.MONTHLY.SALES<1,1,MO.NO>=THIS.YEAR.SALES<MO.NO>   YTD.LAST+=LAST.YEAR.SALES<MO.NO>   YTD.PREV+=PREV.YEAR.SALES<MO.NO>   GPS.THIS+=THIS.YEAR.GPS<MO.NO>   THIS.YEAR.MONTHLY.GPS<1,1,MO.NO>=THIS.YEAR.GPS<MO.NO>   GPS.LAST+=LAST.YEAR.GPS<MO.NO>   GPS.PREV+=PREV.YEAR.GPS<MO.NO>   PARTS.THIS+=THIS.YEAR.PARTS<MO.NO>   PARTS.LAST+=LAST.YEAR.PARTS<MO.NO>   SERVICES.THIS+=THIS.YEAR.SERVICES<MO.NO>   SERVICES.LAST+=LAST.YEAR.SERVICES<MO.NO> NEXT MO.NOREC<67>=LAST.THREEREC<68,3>=THIS.YEAR.MONTHLY.SALESREC<69,3>=THIS.YEAR.MONTHLY.GPSREC<36>=YTD.PREVREC<37>=GPS.PREVCONVERT CHAR(254) TO CHAR(252) IN PREV.YEAR.SALESREC<68,1>=PREV.YEAR.SALESCONVERT CHAR(254) TO CHAR(252) IN PREV.YEAR.GPSREC<69,1>=PREV.YEAR.GPSCONVERT CHAR(254) TO CHAR(252) IN LAST.YEAR.SALESREC<68,2>=LAST.YEAR.SALESCONVERT CHAR(254) TO CHAR(252) IN LAST.YEAR.GPSREC<69,2>=LAST.YEAR.GPSLAST.FY.GPS=SUM(LAST.YEAR.GPS)REC<4>=YTD.THISREC<5>=YTD.LASTDELTA.SALES=YTD.THIS-YTD.LASTDELTA.PCT=(DELTA.SALES*100)/YTD.LASTREC<6>=DELTA.PCTREC<8>=GPS.THISREC<9>=GPS.LASTDELTA.GPS=GPS.THIS-GPS.LASTDELTA.PCT=(DELTA.GPS*100)/GPS.LASTREC<10>=DELTA.PCTREC<11>=LAST.FY.GPSTHIS.GPS.PCT=INT(GPS.THIS * 1000 / YTD.THIS + .5)REC<12>=THIS.GPS.PCTLAST.GPS.PCT=INT(GPS.LAST * 1000 / YTD.LAST + .5)PREV.GPS.PCT=INT(GPS.PREV * 1000 / YTD.PREV + .5)REC<13>=LAST.GPS.PCTFY.LAST.GPS.PCT=INT(LAST.FY.GPS * 1000 / FY.LAST + .5)REC<14>=FY.LAST.GPS.PCTREC<15>=PARTS.THISREC<22>=SERVICES.THISREC<16>=PARTS.LASTREC<23>=SERVICES.LASTDELTA.PARTS=PARTS.THIS-PARTS.LASTDELTA.PARTS.PCT=(DELTA.PARTS*100)/PARTS.LASTREC<17>=DELTA.PARTS.PCTDELTA.SERVICES=SERVICES.THIS-SERVICES.LASTDELTA.SERVICES.PCT=(DELTA.SERVICES*100)/SERVICES.LASTREC<24>=DELTA.SERVICES.PCTTHIS.PARTS.PCT=INT(PARTS.THIS * 1000 / YTD.THIS + .5)REC<19>=THIS.PARTS.PCTLAST.PARTS.PCT=INT(PARTS.LAST * 1000 / YTD.LAST + .5)REC<20>=LAST.PARTS.PCTFY.PARTS.PCT=INT(FY.PARTS * 1000 / FY.LAST + .5)REC<21>=FY.PARTS.PCTTHIS.SERVICES.PCT=INT(SERVICES.THIS * 1000 / YTD.THIS + .5)REC<26>=THIS.SERVICES.PCTLAST.SERVICES.PCT=INT(SERVICES.LAST * 1000 / YTD.LAST + .5)REC<27>=LAST.SERVICES.PCTFY.SERVICES.PCT=INT(FY.SERVICES * 1000 / FY.LAST + .5)REC<28>=FY.SERVICES.PCTREC<29>=YYYYREC<30>=OCONV(LAST.EOM,'D2/')REC<31>=YYYY-1REC<32>=YYYY-2*** DETERMINE PCT OF PARTS FOR PREVIOUS YEAR BETWEEN 40.0% AND 60.0%*DELTA=RND(200);  * -10.0 TO 10.0PREV.PART.PCT=500+(DELTA-100)PREV.PART.AMT=INT(YTD.PREV * PREV.PART.PCT/1000 + .5)PREV.SERVICE.AMT=YTD.PREV-PREV.PART.AMTPREV.SERVICE.PCT=1000-PREV.PART.PCT*** MARGINS, PARTS, AND SERVICES FOR DRILLDOWNS*REC<38>=LAST.THREEYEARS=LAST.THREEMAX.YEARS=DCOUNT(YEARS,CHAR(253))REC<39>=PREV.GPS.PCT:CHAR(253):LAST.GPS.PCT:CHAR(253):THIS.GPS.PCTREC<40>=PREV.PART.AMT:CHAR(253):PARTS.LAST:CHAR(253):PARTS.THISREC<41>=PREV.PART.PCT:CHAR(253):LAST.PARTS.PCT:CHAR(253):THIS.PARTS.PCTREC<42>=PREV.SERVICE.AMT:CHAR(253):SERVICES.LAST:CHAR(253):SERVICES.THISREC<43>=PREV.SERVICE.PCT:CHAR(253):LAST.SERVICES.PCT:CHAR(253):THIS.SERVICES.PCT*** NET INCOME 10% OF SALES*REC<33>=INT(GPS.THIS * .1 + .5)REC<34>=INT(LAST.FY.GPS * .1 + .5)REC<35>=INT(SUM(PREV.YEAR.GPS) * .1 + .5)*** HARD CODE DAYS TO PAY*REC<44>=35REC<45>=39REC<46>=41REC<54>=65:CHAR(253):20:CHAR(253):10:CHAR(253):5REC<55>=63:CHAR(253):21:CHAR(253):10:CHAR(253):6REC<56>=64:CHAR(253):19:CHAR(253):8:CHAR(253):9*** BUILD REP TOTALS*REPS='John,Katherine,Chris,Carrie,Sally,Jan,Bart,Linus,Max'CONVERT ',' TO CHAR(253) IN REPSMAX.REPS=DCOUNT(REPS,CHAR(253))REC<47>=REPSDEVIATION=35;  * 35% DEVIATIONMOS.IN.YEAR=''FOR YEAR.CNTR = 1 TO MAX.YEARS   YEAR.AMTS=REC<68,YEAR.CNTR>   MOS.IN.YEAR<1,YEAR.CNTR>=DCOUNT(YEAR.AMTS,CHAR(252))   ANN.SALES.AMT=SUM(YEAR.AMTS)   ANN.GP.AMT=SUM(REC<69,YEAR.CNTR>)   GP.FACTOR=ANN.GP.AMT/ANN.SALES.AMT   NUM.ITEMS=MAX.REPS   TOT.SCAT.AMT=ANN.SALES.AMT   GOSUB SCATTER.VALUES   FOR REP.CNTR = 1 TO MAX.REPS      REP.SALES.AMT=RETURN.AMOUNTS<1,1,REP.CNTR>      REC<48,REP.CNTR,YEAR.CNTR>=REP.SALES.AMT      REP.GP.AMT=INT(REP.SALES.AMT * GP.FACTOR + .5)      REC<49,REP.CNTR,YEAR.CNTR>=REP.GP.AMT    NEXT REP.CNTR NEXT YEAR.CNTR*** CREATE MONTHLIES FOR EACH REP AND SAVE IN SALES.YYYY*DEVIATION=20FOR YEAR.CNTR = 1 TO MAX.YEARS   YEAR=YEARS<1,YEAR.CNTR>   NUM.ITEMS=MOS.IN.YEAR<1,YEAR.CNTR>   SALES.REC=''   GPS.REC=''   FOR REP.CNTR = 1 TO MAX.REPS      REP=REPS<1,REP.CNTR>      SALES.REC<1,REP.CNTR>=REP      GPS.REC<1,REP.CNTR>=REP      TOT.SCAT.AMT=REC<48,REP.CNTR,YEAR.CNTR>      GOSUB SCATTER.VALUES      SALES.REC<2,REP.CNTR>=RETURN.AMOUNTS      TOT.SCAT.AMT=REC<49,REP.CNTR,YEAR.CNTR>      GOSUB SCATTER.VALUES      GPS.REC<2,REP.CNTR>=RETURN.AMOUNTS    NEXT REP.CNTR   WRITE SALES.REC ON FILE.CONTROL, 'SALES.':YEAR   WRITE GPS.REC ON FILE.CONTROL, 'GPS.':YEAR NEXT YEAR.CNTR*** BUILD SERVICES AND PARTS*PARTS='Doohickey A,Doohickey B,Doohickey C,Doohickey D'CONVERT ',' TO CHAR(253) IN PARTSMAX.PARTS=DCOUNT(PARTS,CHAR(253))REC<52>=PARTSDEVIATION=35FOR YEAR.CNTR = 1 TO MAX.YEARS   ANN.PART.AMT=REC<40,YEAR.CNTR>   NUM.ITEMS=MAX.PARTS   TOT.SCAT.AMT=ANN.PART.AMT   GOSUB SCATTER.VALUES   FOR PART.CNTR = 1 TO MAX.PARTS      REC<53,PART.CNTR,YEAR.CNTR>=RETURN.AMOUNTS<1,1,PART.CNTR>    NEXT PART.CNTR NEXT YEAR.CNTR*SERVICES='Diagnostics,Repair,Custom Machining,Preventative Maintenance'CONVERT ',' TO CHAR(253) IN SERVICESMAX.SERVICES=DCOUNT(SERVICES,CHAR(253))REC<50>=SERVICESDEVIATION=35FOR YEAR.CNTR = 1 TO MAX.YEARS   ANN.SERVICE.AMT=REC<42,YEAR.CNTR>   NUM.ITEMS=MAX.SERVICES   TOT.SCAT.AMT=ANN.SERVICE.AMT   GOSUB SCATTER.VALUES**CRT 'YEAR.CNTR=':YEAR.CNTR**CRT 'ANN.SERVICE.AMT=':ANN.SERVICE.AMT**CRT 'RETURN.AMOUNTS=':RETURN.AMOUNTS:; DEBUG   FOR SERVICE.CNTR = 1 TO MAX.SERVICES      REC<51,SERVICE.CNTR,YEAR.CNTR>=RETURN.AMOUNTS<1,1,SERVICE.CNTR>    NEXT SERVICE.CNTR NEXT YEAR.CNTRWRITE REC ON FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE'RETURN*SCATTER.VALUES:*RETURN.AMOUNTS=''RUNNING.AMT=0LINEAR.PCT=100/NUM.ITEMSMAX.DEVIATION=INT((LINEAR.PCT * DEVIATION/100) * 200)HALF.DEVIATION=INT(MAX.DEVIATION/2 + .5)RUNNING.PCT=0LESS.1=NUM.ITEMS-1MID.WAY=INT(NUM.ITEMS/2 + .5)FOR SCAT.CNTR = 1 TO LESS.1   RANDOM.SCAT=RND(MAX.DEVIATION)   PCT=LINEAR.PCT + ((HALF.DEVIATION-RANDOM.SCAT) / 100)   RUNNING.PCT+=PCT   AMT=INT(TOT.SCAT.AMT * PCT/100 + .5)   RUNNING.AMT+=AMT   IF MID.WAY THEN      IF RUNNING.AMT > (TOT.SCAT.AMT / 2 + .5) THEN         * RUNNING TOO HIGH SO REDUCT         MAX.DEVIATION=INT((LINEAR.PCT * DEVIATION/100) * 125)         HALF.DEVIATION=INT(MAX.DEVIATION/2 + .5)       END    END   RETURN.AMOUNTS<1,1,-1>=AMT NEXT SCAT.CNTRRETURN.AMOUNTS<1,1,-1>=TOT.SCAT.AMT - RUNNING.AMTRETURNEND00008BCALL.CREATE.WEBSERVICE.PASSWORD0c2CALL CREATE.WEBSERVICE.PASSWORD(PASSWORD,PASSTIME)CRT 'PASSTIME=':PASSTIMECRT 'PASSWORD=':PASSWORDEND0000DDCHECK.PASSWORD0c2OPEN 'MVDB.USERS' TO FILE ELSE STOPSELECT FILELOOP   READNEXT ID ELSE ID ='DONE'UNTIL ID = 'DONE' DO   READ REC FROM FILE, ID ELSE REC=''   CRT ID,OCONV(REC<1>,'U3060'),OCONV(ID,'U3060')REPEATEND000DFADEMO.FINANCIALS.DASHBOARD0c2SUBROUTINE DEMO.FINANCIALS.DASHBOARD** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*WEB$TITLE='Demo Company, Financial Picture'WEB.FORM.NAME='DEMO.FINANCIALS.DASHBOARD'W$TYPE='HTML'W$TITLE='Demo Financial Company'W$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.CONTROL' TO FILE ELSE STOPNOV15=ICONV('11-15-15','D')TODAY=DATE()IF TODAY > NOV15 THEN   TODAY=NOV15   TIME.DATE=OCONV(TIME(),'MTHS'):' ':OCONV(TODAY,'D4') END ELSE   TIME.DATE=TIMEDATE() ENDOTODAY=OCONV(TODAY,'D4-')TODAY.MO=OTODAY[1,2]+0TODAY.YYYY=OTODAY[7,4]IF INDEX(TIME.DATE,'CALCULATIONS THROUGH',1) THEN   * LAST CALCULATION WAS FOR END OF LAST YEAR   DASHBOARD.YYYY=TODAY.YYYY-1 END ELSE DASHBOARD.YYYY=TODAY.YYYYIF LEN(WIDGET.USER.DATA(1)) = 4 THEN   WRITE WIDGET.USER.DATA(1) ON FILE, 'DASHBOARD.YYYY' END ELSE   WIDGET.USER.DATA(1)=DASHBOARD.YYYY ENDCONVS=''LAST.YYYY=TODAY.YYYY-1LAST.EOM=ICONV(TODAY.MO:'-01-':TODAY.YYYY,'D')-1*** BUILD FRESH STATIC DATA IF A NEW RUN DATE*READ LAST.BUILT FROM FILE, 'LAST.STATIC.BUILD' ELSE LAST.BUILT=''IF LAST.BUILT <> DATE() THEN   CALL BUILD.DEMO.FINANCIAL.PICTURE(TODAY.YYYY,TODAY,LAST.EOM)   WRITE LAST.BUILT ON FILE, 'LAST.STATIC.BUILD' ENDREAD REC FROM FILE, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''** DEFAULT CONVERSIONS TO $FOR I = 4 TO 35   IF I < 29 OR I > 32 THEN      CONVS<I>='$'    END NEXT I* CHANGE THOSE THAT AREN'TCONVS<6>='%'; CONVS<10>='%'; CONVS<17>='%'; CONVS<24>='%'CONVS<12>='%'; CONVS<13>='%'; CONVS<14>='%'CONVS<19>='%'; CONVS<20>='%'; CONVS<21>='%'CONVS<26>='%'; CONVS<27>='%'; CONVS<28>='%'*MATWRITE WIDGET.USER.DATA ON FILE, 'TEST.LINK'*W$PRINTABLE=1W$PDFABLE=1OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE RETURNREAD HTML FROM FILE.WEB.FORMS, WEB.FORM.NAME ELSE HTML=''***USER.ID=G$USERID*W$TITLE:='  Demo Financials  -- last updated --  ':TIME.DATE**WRITE HTML ON FILE.WEB.FORMS, 'TEST.HTML'*** DYNAMIC VARIABLES**INSERT.FIELD=DB.REC<4>;  * CUSTOMER*IF INSERT.FIELD = '' THEN INSERT.FIELD='&nbsp;'*CALL SWAP(HTML,'~1~',INSERT.FIELD)FOR I = 1 TO 46   INSERT.FIELD=REC<I>IF INSERT.FIELD = '' THEN INSERT.FIELD=I   CONV=CONVS<I>   BEGIN CASE      CASE CONV = ''; NULL      CASE CONV = '$'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD2,$')      CASE CONV = '%'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD1'):'%'      CASE 1; INSERT.FIELD=OCONV(INSERT.FIELD,CONV)   END CASE   IF INSERT.FIELD = '' THEN INSERT.FIELD='&nbsp;'   CALL SWAP(HTML,'~':I:'~',INSERT.FIELD) NEXT I   *W$TEXT.DATA=HTMLIF 0 THEN; *IF TODAY.MO = 1 THEN   W$INPUT.PROMPT<1>='As of Date'   W$INPUT.TYPE<1> = "SELECT"   W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(1)   W$INPUT.UDPOS<1> = 1   W$INPUT.BUTTON<1> = "Apply"   W$INPUT.SELVALS<1>=TODAY.YYYY-1:CHAR(253):TODAY.YYYY   W$INPUT.SELOPTS<1>='12-31-':TODAY.YYYY-1:CHAR(253):OCONV(DATE(),'D4-')   ITIME=ICONV(FIELD(TIME.DATE,' ',1),'MT')   NEXT.TIME=ITIME+1800;  * 30 MINUTES   IF ABS(TIME()-NEXT.TIME) < 300 THEN;  * WITHIN 5 MINUTES TELL LONGER      NEXT.TIME+=1800    END   REFRESH.TIME=' - Wont refresh until app. ':OCONV(NEXT.TIME,'MTH')   IF DASHBOARD.YYYY = TODAY.YYYY THEN      * DECEMBER WILL REQUIRE A RECALC      W$INPUT.SELOPTS<1,1>:=REFRESH.TIME    END ELSE      * TODAY WILL REQUIRE A RECALC      W$INPUT.SELOPTS<1,2>:=REFRESH.TIME    END   * ENDWRITE HTML ON FILE.WEB.FORMS, 'LAST.':WEB.FORM.NAMERETURNEND002FD3MV.DEMO.MAP0c2    SUBROUTINE MV.DEMO.MAP* @(#) MV.DEMO.MAP Ported to jBASE 17:55:31  08 JUL 2015*  The following variable names were converted*   TABLE* ** Copyright (c) 2010 SB, Inc. All rights reserved.** 6-1-15 ZUMASYS CHANGED MAP ID DELIMITER TO # INSTEAD OF *    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Data Evolution - Demographics"    W$TYPE = "MAP:USASouthWestRegion"    W$WIDTH = 3*    IF G$QUERYMODE THEN RETURN*    TYPE.ID=WIDGET.USER.DATA(1)    BEGIN CASE    CASE TYPE.ID="04"        W$TYPE="MAP:Arizona"        WIDGET.USER.DATA(6)="Arizona"        ACT.FACT=.08    CASE TYPE.ID="06"        W$TYPE="MAP:California"        WIDGET.USER.DATA(6)="California"        ACT.FACT=.08    CASE TYPE.ID="32"        W$TYPE="MAP:Nevada"        WIDGET.USER.DATA(6)="Nevada"        ACT.FACT=.08    CASE TYPE.ID="49"        W$TYPE="MAP:Utah"        WIDGET.USER.DATA(6)="Utah"        ACT.FACT=.08    CASE 1        ACT.FACT=1    END CASE***_____Set Widget Variables_____    IF WIDGET.USER.DATA(4)="" THEN WIDGET.USER.DATA(4)="ALL"    IF WIDGET.USER.DATA(5)="" THEN WIDGET.USER.DATA(5)="Inquiry"**_____Open Files_____    OPEN 'Territories' TO F.TERR ELSE ABORT 201,'Territories'    OPEN 'SalesSum' TO F.SSUM ELSE ABORT 201,'SalesSum'    OPEN 'SalesReps' TO F.SREP ELSE ABORT 201,'SalesReps'**_____Set Period_____    WYR=OCONV(DATE(),"DY")    WMO=OCONV(DATE(),"DM") - 1    IF WMO<1 THEN WYR-=1;WMO=12    CAL.PERIOD=WYR'R%4':WMO'R%2'    IF WIDGET.USER.DATA(3) MATCHES "6N" THEN        END.PERIOD=WIDGET.USER.DATA(3)        WYR=END.PERIOD[1,4]        WMO=END.PERIOD[5,2]    END ELSE        END.PERIOD=CAL.PERIOD        WIDGET.USER.DATA(3)=END.PERIOD    END    WMO-=5    IF WMO<1 THEN WYR-=1; WMO+=12    BEG.PERIOD=WYR'R%4':WMO'R%2'**_____Set Up Input Prompts_____    W$INPUT.PROMPT<1>="Region"    W$INPUT.TYPE<1>="SELECT"    W$INPUT.SELOPTS<1,1>="SouthWest"    W$INPUT.SELVALS<1,1>=""    W$INPUT.SELOPTS<1,2>="California"    W$INPUT.SELVALS<1,2>="06"    W$INPUT.SELOPTS<1,3>="Nevada"    W$INPUT.SELVALS<1,3>="32"    W$INPUT.SELOPTS<1,4>="Utah"    W$INPUT.SELVALS<1,4>="49"    W$INPUT.SELOPTS<1,5>="Arizona"    W$INPUT.SELVALS<1,5>="04"    W$INPUT.UDPOS<1>=1    W$INPUT.DEFAULT<1>=WIDGET.USER.DATA(1)    W$INPUT.PROMPT<3>="Ending Period"    W$INPUT.TYPE<3>="SELECT"    WYR=CAL.PERIOD[1,4]-2    WMO=CAL.PERIOD[5,2]+1    IF WMO>12 THEN WYR+=1; WMO=1    SEL.PERIOD=WYR'R%4':WMO'R%2'    FOR PERIOD=CAL.PERIOD TO SEL.PERIOD STEP -1        WYR=PERIOD[1,4]        WMO=PERIOD[5,2]        IF WMO<1 THEN            WYR-=1            WMO=12            PERIOD=WYR'R%4':WMO'R%2'        END        WMO=OCONV(WMO*30-15,"DMA")[1,3]        WPERIOD=WMO:" ":WYR        W$INPUT.SELOPTS<3,-1>=WPERIOD        W$INPUT.SELVALS<3,-1>=PERIOD    NEXT PERIOD    W$INPUT.UDPOS<3>=3    W$INPUT.DEFAULT<3>=WIDGET.USER.DATA(3)    W$INPUT.PROMPT<4>="Sales Rep"    W$INPUT.TYPE<4>="SELECT"    W$INPUT.SELOPTS<4>="Everyone"    W$INPUT.SELVALS<4>="ALL"    SELECT F.SREP    SALESREPS=""    LOOP        READNEXT SREPINIT ELSE SREPINIT="\\EOF"    UNTIL SREPINIT="\\EOF" DO        READ SREPITEM FROM F.SREP,SREPINIT THEN            LOCATE SREPINIT IN SALESREPS<1> BY "AL" SETTING IX ELSE                SALESREPS=INSERT(SALESREPS,1,IX;SREPINIT)                SALESREPS=INSERT(SALESREPS,2,IX;SREPITEM<1>)            END        END    REPEAT    SREP.MAX=DCOUNT(SALESREPS<1>,CHAR(253))    FOR RVX=1 TO SREP.MAX        W$INPUT.SELOPTS<4,-1>=SALESREPS<2,RVX>        W$INPUT.SELVALS<4,-1>=SALESREPS<1,RVX>    NEXT RVX    W$INPUT.UDPOS<4>=4    W$INPUT.DEFAULT<4>=WIDGET.USER.DATA(4)    W$INPUT.PROMPT<5>="Demographic"    W$INPUT.TYPE<5>="SELECT"    W$INPUT.SELOPTS<5,1>="Inquiries"    W$INPUT.SELVALS<5,1>="Inquiry"    W$INPUT.SELOPTS<5,2>="Demos"    W$INPUT.SELVALS<5,2>="Demo"    W$INPUT.SELOPTS<5,3>="Quotes"    W$INPUT.SELVALS<5,3>="Quote"    W$INPUT.SELOPTS<5,4>="Orders"    W$INPUT.SELVALS<5,4>="Order"    W$INPUT.UDPOS<5>=5    W$INPUT.DEFAULT<5>=WIDGET.USER.DATA(5)    W$INPUT.BUTTON="Apply"**    STATES<1,1>="USASouthWestRegion*04"    STATES<1,2>="USASouthWestRegion*06"    STATES<1,3>="USASouthWestRegion*32"    STATES<1,4>="USASouthWestRegion*49"    COUNTIES=""*    W$TITLE = "Data Evolution - ":WIDGET.USER.DATA(5):" Demographics"    BEGIN CASE    CASE WIDGET.USER.DATA(5)="Inquiry"; AX=6 ;ACTIVE=1000*ACT.FACT    CASE WIDGET.USER.DATA(5)="Demo"   ; AX=7 ;ACTIVE=500*ACT.FACT    CASE WIDGET.USER.DATA(5)="Quote"  ; AX=8 ;ACTIVE=300*ACT.FACT    CASE WIDGET.USER.DATA(5)="Order"  ; AX=9 ;ACTIVE=100*ACT.FACT    END CASE*    TERRITORIES = ""    SELECT F.TERR    LOOP        READNEXT TERR ELSE TERR="\\EOF"    UNTIL TERR="\\EOF" DO        READ TERRITEM FROM F.TERR,TERR THEN            IF WIDGET.USER.DATA(4)="ALL" OR WIDGET.USER.DATA(4)=TERRITEM<2> THEN                LOCATE TERR IN TERRITORIES<1> BY "AR" SETTING IX ELSE                    TERRITORIES=INSERT(TERRITORIES,1,IX;TERR)                    TERRITORIES=INSERT(TERRITORIES,2,IX;TERRITEM<1>)                    TERRITORIES=INSERT(TERRITORIES,3,IX;TERRITEM<2>)                    TERRITORIES=INSERT(TERRITORIES,4,IX;TERRITEM<3>)                    IF TYPE.ID="" THEN                        MAP.IDS=FIELD(TERRITEM<4,1>,"*",1)[1,2]                        BEGIN CASE                        CASE MAP.IDS="Ar"; MAP.IDS="USASouthWestRegion*04"                        CASE MAP.IDS="Ca"; MAP.IDS="USASouthWestRegion*06"                        CASE MAP.IDS="Ne"; MAP.IDS="USASouthWestRegion*32"                        CASE MAP.IDS="Ut"; MAP.IDS="USASouthWestRegion*49"                        END CASE                        TERRITORIES=INSERT(TERRITORIES,5,IX;MAP.IDS)                    END ELSE                        CMAX=DCOUNT(TERRITEM<4>,CHAR(253))                        FOR CX=1 TO CMAX                            IF WIDGET.USER.DATA(6)=FIELD(TERRITEM<4,CX>,"*",1) THEN                                COUNTIES<1,-1>=TERRITEM<4,CX>                            END                        NEXT CX                    END                END            END        END    REPEAT*    TERR.MAX=DCOUNT(TERRITORIES<1>,CHAR(253))    IF WIDGET.USER.DATA(4)="ALL" THEN        SNAME="Everyone"    END ELSE        READV SNAME FROM F.SREP,WIDGET.USER.DATA(4),1 ELSE            SNAME="Unknown"        END    END*    QTYS=""    FOR PERIOD=BEG.PERIOD TO END.PERIOD        WYR=PERIOD[1,4]        WMO=PERIOD[5,2]        IF WMO>12 THEN PERIOD=(WYR+1)'R%4':"01"        FOR TERRX=1 TO TERR.MAX            TERR=TERRITORIES<1,TERRX>            READ SALES FROM F.SSUM,TERR:"*":PERIOD THEN                IF TYPE.ID="" THEN                    Table=TERRITORIES<5,TERRX>                    Table<2>=SUM(SALES<AX>)                    TBL.MAX=DCOUNT(Table<1>,CHAR(253))                    FOR TBLX=1 TO TBL.MAX                        LOCATE Table<1,TBLX> IN STATES<1> SETTING TX THEN                            QTYS<TX>+=Table<2,TBLX>                        END                    NEXT TBLX                END ELSE                    Table=SALES<10>                    Table<2>=SALES<AX>                    TBL.MAX=DCOUNT(Table<1>,CHAR(253))                    FOR TBLX=1 TO TBL.MAX                        LOCATE Table<1,TBLX> IN COUNTIES<1> SETTING TX THEN                            QTYS<TX>+=Table<2,TBLX>                        END                    NEXT TBLX                END            END        NEXT TERRX    NEXT PERIOD*    OPEN 'MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'*    IF TYPE.ID="" THEN        MAX=DCOUNT(STATES,CHAR(253))        FOR X=1 TO MAX            ID=STATES<1,X>            CONVERT '*' TO '#' IN ID    ;*6-1-15*            READ I FROM F.MVDB.MAP.DATA,ID THEN*6-1-15*      W$MAP.IDS<1,-1> = FIELD(ID,'*',2)                W$MAP.IDS<1,-1> = FIELD(ID,'#',2) ;*6-1-15*                W$MAP.VALUES<1,-1> = QTYS<X>+0                W$MAP.VALUE.TOOLTEXT<1,-1> := I<2>:' (':(QTYS<X>+0):')'                W$MAP.VALUE.DD<1,-1> = 1            END        NEXT X    END ELSE        MAX=DCOUNT(COUNTIES,CHAR(253))        FOR X=1 TO MAX            ID=COUNTIES<1,X>            CONVERT '*' TO '#' IN ID    ;*6-1-15*            READ I FROM F.MVDB.MAP.DATA,ID THEN*6-1-15*      W$MAP.IDS<1,-1> = FIELD(ID,'*',2)                W$MAP.IDS<1,-1> = FIELD(ID,'#',2) ;*6-1-15*                W$MAP.VALUES<1,-1> = QTYS<X>+0                W$MAP.VALUE.TOOLTEXT<1,-1> := I<2>:' (':(QTYS<X>+0):')'            END        NEXT X    END*    W$MAP.RANGE.NAME<1,1> = "No Activity"    W$MAP.RANGE.COLOR<1,1> = "#404040"    W$MAP.RANGE.NAME<1,2> = "Light Activity"    W$MAP.RANGE.COLOR<1,2> = "#4682B4"    W$MAP.RANGE.NAME<1,3> = "Moderate Activity"    W$MAP.RANGE.COLOR<1,3> = "#FF8C00"    W$MAP.RANGE.NAME<1,4> = "Heavy Activity"    W$MAP.RANGE.COLOR<1,4> = "#FF0000"*    W$MAP.RANGE.LOW<1,1> = 0    W$MAP.RANGE.HIGH<1,1> = 1    W$MAP.RANGE.LOW<1,2> = 1    W$MAP.RANGE.HIGH<1,2> = ACTIVE    W$MAP.RANGE.LOW<1,3> = ACTIVE    W$MAP.RANGE.HIGH<1,3> = ACTIVE*3    W$MAP.RANGE.LOW<1,4> = ACTIVE*3    W$MAP.RANGE.HIGH<1,4> = "999999"*    W$CHART.OPTIONS<-1> = 'animation="0"'    W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'    W$CHART.OPTIONS<-1> = 'legendShadow="1"'    W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'*    W$LINK.LABEL<1,1> = "California"    W$LINK.UD.VAL<1,1,1> = "06"    W$LINK.UD.POS<1,1,1> = "1"    W$LINK.UD.VAL<1,1,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,1,2> = "2"    W$LINK.UD.VAL<1,1,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,1,3> = "3"    W$LINK.UD.VAL<1,1,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,1,4> = "4"    W$LINK.UD.VAL<1,1,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,1,5> = "5"    W$LINK.UD.VAL<1,1,6> = "California"    W$LINK.UD.POS<1,1,6> = "6"    W$LINK.LOCATION<1,1> = "2"    W$LINK.DD.WIDGET<1,1> = "MV Demo Map"*    W$LINK.LABEL<1,2> = "Nevada"    W$LINK.UD.VAL<1,2,1> = "32"    W$LINK.UD.POS<1,2,1> = "1"    W$LINK.UD.VAL<1,2,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,2,2> = "2"    W$LINK.UD.VAL<1,2,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,2,3> = "3"    W$LINK.UD.VAL<1,2,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,2,4> = "4"    W$LINK.UD.VAL<1,2,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,2,5> = "5"    W$LINK.UD.VAL<1,2,6> = "Nevada"    W$LINK.UD.POS<1,2,6> = "6"    W$LINK.LOCATION<1,2> = "2"    W$LINK.DD.WIDGET<1,2> = "MV Demo Map"*    W$LINK.LABEL<1,3> = "Utah"    W$LINK.UD.VAL<1,3,1> = "49"    W$LINK.UD.POS<1,3,1> = "1"    W$LINK.UD.VAL<1,3,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,3,2> = "2"    W$LINK.UD.VAL<1,3,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,3,3> = "3"    W$LINK.UD.VAL<1,3,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,3,4> = "4"    W$LINK.UD.VAL<1,3,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,3,5> = "5"    W$LINK.UD.VAL<1,3,6> = "Utah"    W$LINK.UD.POS<1,3,6> = "6"    W$LINK.LOCATION<1,3> = "2"    W$LINK.DD.WIDGET<1,3> = "MV Demo Map"*    W$LINK.LABEL<1,4> = "Arizona"    W$LINK.UD.VAL<1,4,1> = "04"    W$LINK.UD.POS<1,4,1> = "1"    W$LINK.UD.VAL<1,4,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,4,2> = "2"    W$LINK.UD.VAL<1,4,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,4,3> = "3"    W$LINK.UD.VAL<1,4,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,4,4> = "4"    W$LINK.UD.VAL<1,4,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,4,5> = "5"    W$LINK.UD.VAL<1,4,6> = "Arizona"    W$LINK.UD.POS<1,4,6> = "6"    W$LINK.LOCATION<1,4> = "2"    W$LINK.DD.WIDGET<1,4> = "MV Demo Map"*    W$LINK.LABEL<1,5> = "SouthWest Region"    W$LINK.UD.VAL<1,5,1> = ""    W$LINK.UD.POS<1,5,1> = "1"    W$LINK.UD.VAL<1,5,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,5,2> = "2"    W$LINK.UD.VAL<1,5,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,5,3> = "3"    W$LINK.UD.VAL<1,5,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,5,4> = "4"    W$LINK.UD.VAL<1,5,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,5,5> = "5"    W$LINK.UD.VAL<1,5,6> = ""    W$LINK.UD.POS<1,5,6> = "6"    W$LINK.LOCATION<1,5> = "2"    W$LINK.DD.WIDGET<1,5> = "MV Demo Map"*    INCLUDE WBPD SOURCE.VIEW.ICON*    RETURN000436PURGE.NON.PLATFORM.WIDGETS0c2*** 6-22-15 TPARKER ** Purge all platform specific widgets not for this platform*** run by the post install command process*OPEN '','MVDB.CONTROL' TO FILE ELSE STOPREAD PLATFORM FROM FILE, 'PLATFORM' ELSE PLATFORM=''IF PLATFORM = '' THEN STOP*PJS 07-13-15 - comment out this line: IF LEN(PLATFORM) = 2 THEN PLATFORM=PLATFORM:' '*OPEN '','MVDB.WIDGETS' TO FI.MVDB.WIDGETS ELSE STOP*SELECT FI.MVDB.WIDGETS*LOOP   READNEXT ID ELSE ID='DONE'UNTIL ID = 'DONE' DO   WIDGET.PLATFORM=FIELD(ID,' ',1)   DELETE.IT=0   BEGIN CASE      CASE PLATFORM = WIDGET.PLATFORM; NULL      CASE WIDGET.PLATFORM = 'D3'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'UV'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'UD'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'QM'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'OI'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'RL'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'JB'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'D3'; DELETE.IT=1      CASE 1; NULL   END CASE   IF DELETE.IT THEN DELETE FI.MVDB.WIDGETS, IDREPEATEND001133SUB.ADMIN.CONFIG0c2SUBROUTINE SUB.ADMIN.CONFIG** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Administrative configuration widget.*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Administrative Configuration Widget"W$TYPE = "HTML" ;* or HTML, FCPIE, FCBAR, etc.W$WIDTH = 2 ;* 1 = narrow, 2 = medium, 3 = full-width*IF G$QUERYMODE THEN RETURN ;* Dont process, just provide title, type & width*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TEXT.INFO = "Unable to open MVDB.CONTROL"  RETURNENDOPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE   W$TEXT.INFO = "Unable to open MVDB.THEMES"  RETURNENDW$TEXT.INFO = "" ;* No widget content at this point.*READ SETTINGS.REC FROM F.MVDB.CONTROL, 'MVDB.SETTINGS' ELSE SETTINGS.REC = ""IF G$SUBMITTED = 1 THEN  FOR N = 1 TO 15    SETTINGS.REC<N> = WIDGET.USER.DATA(N)  NEXT N  WRITE SETTINGS.REC ON F.MVDB.CONTROL, 'MVDB.SETTINGS'  W$HTML.DATA = "Settings saved."ENDIF SETTINGS.REC<1> # "" THEN  W$HTML.DATA := '<br /><a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=':SETTINGS.REC<1>:'" target="MVDB.SUBS_':SETTINGS.REC<1>:'">Edit Subroutine: ':SETTINGS.REC<1>:'</a>'ENDIF SETTINGS.REC<5> = "" THEN SETTINGS.REC<5> = 24IF SETTINGS.REC<3> = "" THEN SETTINGS.REC<3> = 20IF SETTINGS.REC<4> = "" THEN  LOCATE "SERVER_PORT" IN CGI$VARS SETTING POS THEN    SETTINGS.REC<4> = CGI$VALS<POS>  ENDENDIF SETTINGS.REC<9> = '' THEN SETTINGS.REC<9> = 'UTF-8'*W$INPUT.PROMPT<1> = "User Auth Sub"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = SETTINGS.REC<1>W$INPUT.PARAMS<1> = 'size="40"'*W$INPUT.PROMPT<2> = "Password Req?"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "Yes":@VM:"No"W$INPUT.SELVALS<2> = "0":@VM:"1"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = SETTINGS.REC<2>*W$INPUT.PROMPT<3> = "Failure Tolerance Period"W$INPUT.TYPE<3> = "TEXT"W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = SETTINGS.REC<3>W$INPUT.PARAMS<3> = 'size="5"'*W$INPUT.PROMPT<4> = "TCP Port"W$INPUT.TYPE<4> = "TEXT"W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = SETTINGS.REC<4>W$INPUT.PARAMS<4> = 'size="5"'*W$INPUT.PROMPT<5> = "Session Timeout (hours)"W$INPUT.TYPE<5> = "TEXT"W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = SETTINGS.REC<5>W$INPUT.PARAMS<5> = 'size="5"'*IF SETTINGS.REC<6> = '' THEN SETTINGS.REC<6> = 0W$INPUT.PROMPT<6> = "GMT Offset"W$INPUT.TYPE<6> = "SELECT"GMT.VAL.LIST = ''; GMT.OPT.LIST = ''FOR X = 12 TO 1 STEP -1  GMT.OPT.LIST<1,-1> = 'GMT -':X  GMT.VAL.LIST<1,-1> = X * (-1)NEXT XGMT.OPT.LIST<1,-1> = 'GMT'GMT.VAL.LIST<1,-1> = 0FOR X = 1 TO 12  GMT.OPT.LIST<1,-1> = 'GMT +':X  GMT.VAL.LIST<1,-1> = XNEXT XW$INPUT.SELOPTS<6> = GMT.OPT.LISTW$INPUT.SELVALS<6> = GMT.VAL.LISTW$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = SETTINGS.REC<6>*W$INPUT.PROMPT<7> = "Alternate Logo Image"W$INPUT.TYPE<7> = "TEXT"W$INPUT.UDPOS<7> = 7W$INPUT.DEFAULT<7> = SETTINGS.REC<7>*EXECUTE 'SSELECT MVDB.THEMES' CAPTURING JUNKTHEME.LIST = ''LOOP  READNEXT THEME.ID ELSE EXIT  READV CSS.NAME FROM F.MVDB.THEMES, THEME.ID, 1 ELSE CSS.NAME = ''  IF CSS.NAME # '' THEN    THEME.LIST<1,-1> = CSS.NAME    THEME.LIST<2,-1> = THEME.ID  ENDREPEATW$INPUT.PROMPT<8> = "Dashboard Theme"W$INPUT.TYPE<8> = "SELECT"W$INPUT.SELOPTS<8> = 'Default Theme':@VM:THEME.LIST<2>W$INPUT.SELVALS<8> = '':@VM:THEME.LIST<2>W$INPUT.UDPOS<8> = 8W$INPUT.DEFAULT<8> = SETTINGS.REC<8>*W$INPUT.PROMPT<9> = 'Character Set'W$INPUT.TYPE<9> = "TEXT"W$INPUT.UDPOS<9> = 9W$INPUT.DEFAULT<9> = SETTINGS.REC<9>*W$INPUT.PROMPT<10> = "Auto-Trim Sessions"W$INPUT.TYPE<10> = "SELECT"W$INPUT.SELOPTS<10> = 'No':@VM:'Yes'W$INPUT.SELVALS<10> = 'N':@VM:'Y'W$INPUT.UDPOS<10> = 10W$INPUT.DEFAULT<10> = SETTINGS.REC<10>*W$INPUT.PROMPT<11> = "Auto-Refresh"W$INPUT.TYPE<11> = "SELECT"W$INPUT.SELOPTS<11> = 'No':@VM:'Yes'W$INPUT.SELVALS<11> = 'N':@VM:'Y'W$INPUT.UDPOS<11> = 11W$INPUT.DEFAULT<11> = SETTINGS.REC<11>**WEBSERVICE*W$INPUT.PROMPT<12> = "Allow 'webservice' logins"W$INPUT.TYPE<12> = "SELECT"W$INPUT.SELOPTS<12> = 'No':@VM:'Yes'W$INPUT.SELVALS<12> = 'N':@VM:'Y'W$INPUT.UDPOS<12> = 12W$INPUT.DEFAULT<12> = SETTINGS.REC<12>**EMAILED REPORTS*W$INPUT.PROMPT<13> = "Allow 'emailed' logins"W$INPUT.TYPE<13> = "SELECT"W$INPUT.SELOPTS<13> = 'No':@VM:'Yes'W$INPUT.SELVALS<13> = 'N':@VM:'Y'W$INPUT.UDPOS<13> = 13W$INPUT.DEFAULT<13> = SETTINGS.REC<13>*W$INPUT.BUTTON = "Save"*RETURN0007C4SUB.DEMO.ANNUAL.SALES.BY.REP0c2SUBROUTINE SUB.DEMO.ANNUAL.SALES.BY.REP***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''REVENUE.OR.GP=WIDGET.USER.DATA(1)YEAR=WIDGET.USER.DATA(2)MONTH=WIDGET.USER.DATA(3)VAL.TYPE='$'DRILLDOWN.WIDGET=''DRILLDOWN.TYPE=''BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE=YEAR:' Sales By Sales Rep'      W$BAR.YMEMO = "Sales"      SALES.AMTS=REC<48>   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE=YEAR:' Gross Profit By Sales Rep'      W$BAR.YMEMO = "Gross Profit"      SALES.AMTS=REC<49>END CASE*REPS=REC<47>LOCATE YEAR IN REC<67> SETTING YEAR.SVM ELSE YEAR.SVM=1**MAX.SALES.AMT=0N=0FIRST.YEAR=''MAX.REPS=DCOUNT(REPS,CHAR(253))FOR NN = 1 TO MAX.REPS   REP=REPS<1,NN>   SALES.AMT=SUM(SALES.AMTS<1,NN,YEAR.SVM>)   SALES.AMT=OCONV(SALES.AMT,'MD02')   IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT   W$BAR.VALUES<1,NN> = SALES.AMT   W$BAR.XLABELS<1,NN> = REP   W$FW.DD.WIDGET<1,NN> = "DEMO MONTHLY SALES BY REP"   W$FW.DD.UD.POS<1,NN,1> = 1   W$FW.DD.UD.VAL<1,NN,1> = WIDGET.USER.DATA(1); * REVENUE OR GP   W$FW.DD.UD.POS<1,NN,2> = 2   W$FW.DD.UD.VAL<1,NN,2> = YEAR   W$FW.DD.UD.POS<1,NN,3> = 3   W$FW.DD.UD.VAL<1,NN,3> = REPNEXT NNW$BAR.XMEMO = "Sales Rep (drilldown for ":W$BAR.YMEMO:" by month)"* ROUND MAX AMOUNT UP TO THE NEXT 250000MAX.SALES.AMT+=250000MAX.SALES.AMT=INT(MAX.SALES.AMT/250000) * 250000W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'RETURN000988SUB.CODE.TEMPLATES0c2SUBROUTINE SUB.CODE.TEMPLATES** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: * Description: List code templates*INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGET.TYPES*W$TITLE = "Widget code templates"W$TYPE = "HTML"W$WIDTH = 3W$PRINTABLE = 1*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN ;* Hidden mode  W$LINK.LABEL<1,1> = "Show Widget"  W$LINK.LOCATION<1,1> = "C"  W$LINK.UD.POS<1,1> = 1  W$LINK.UD.VAL<1,1> = ""  W$LINK.ICON<1,1> = "application_view_detail.png"  W$LINK.ICON.TXT<1,1> = "Show Widget"  W$TITLE := ' (Hidden)'  W$PRINTABLE = 0  RETURNENDOPEN '','MVDB.SUB.TEMPLATES' TO F.MVDB.SUB.TEMPLATES ELSE  W$HTML.DATA = '<h2>MVDB.SUB.TEMPLATES file cannot be opened.</h2>'  RETURNENDOPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE  W$HTML.DATA = '<h2>MVDB.WIDGET.TYPES file cannot be opened.</h2>'  RETURNEND*EXECUTE 'SSELECT MVDB.WIDGET.TYPES BY GROUP BY HANDLER WITH INACTIVE # "1"' CAPTURING JUNKW$HTML.DATA = '<table width="100%"><thead><tr><th>Widget Type/Template</th><th>Description</th><th>Lines</th><th>Use Template</th><th>Edit</th></tr><tbody>'LOOP  READNEXT ID ELSE EXIT  READ TREC FROM F.MVDB.SUB.TEMPLATES, ID ELSE TREC = ""  MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, ID ELSE MAT WIDGET.TYPES = ""  CLASS.NAME = FIELD(WT$ICON,'.',1)  CONVERT "_" TO "-" IN CLASS.NAME  W$HTML.DATA := '<tr><td>':ID:'</td>'  W$HTML.DATA := '<td><img height="20" width="20" src="/db/icons/':WT$ICON:'" />':WT$DESC:'</td>'  LINES = DCOUNT(TREC,@AM)  IF LINES = 0 THEN LINES = '&nbsp;'  W$HTML.DATA := '<td align="right">':LINES:'</td>'  IF FIELD(TREC,' ',1) = "USE" THEN    USE.TEMPLATE = FIELD( TREC, ' ', 2 )    USE.TEMPLATE = '<a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUB.TEMPLATES&ed_item=':USE.TEMPLATE:'" target="MVDB.SUB.TEMPLATES_':USE.TEMPLATE:'">':USE.TEMPLATE:'</a>'  END ELSE USE.TEMPLATE = '&nbsp;'  W$HTML.DATA := '<td>':USE.TEMPLATE:'</td>'  IF TREC = "" THEN ACTION = "Add" ELSE ACTION = "Edit"  W$HTML.DATA := '<td><a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUB.TEMPLATES&ed_item=':ID:'" target="MVDB.SUB.TEMPLATES_':ID:'">':ACTION:'</a></td>'  W$HTML.DATA := '</tr>'REPEATW$HTML.DATA := '</tbody></table>'*W$LINK.LABEL<1,1> = "Hide Widget"W$LINK.LOCATION<1,1> = "C"W$LINK.UD.POS<1,1> = 1W$LINK.UD.VAL<1,1> = "1"W$LINK.ICON<1,1> = "application.png"W$LINK.ICON.TXT<1,1> = "Hide Widget"*RETURN0003F4SUB.DEMO.DAYS.TO.PAY.CHART0c2SUBROUTINE SUB.DEMO.DAYS.TO.PAY.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Average Days To Pay"W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''YEARS=REC<67>MAX.YEARS=DCOUNT(YEARS,CHAR(253))FIRST.YEAR=0*W$BAR.XMEMO = "Year (drill down for detail)"W$BAR.YMEMO = "Average Days to Pay"*N=0*FOR NN = 1 TO MAX.YEARS  AVERAGE.DAYS=REC<47-NN>  YEAR=YEARS<1,NN>  IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR  CURRENT.YEAR=YEAR  W$BAR.VALUES<1,NN> = AVERAGE.DAYS  W$BAR.XLABELS<1,NN> = YEAR  W$FW.DD.WIDGET<1,NN>='DEMO DAYS TO PAY PIE'  W$FW.DD.UD.POS<1,NN,1>=1  W$FW.DD.UD.VAL<1,NN,1>=YEARNEXT NN*W$BAR.CAPTION = "Average Days to Pay From ":FIRST.YEAR:' to ':CURRENT.YEAR*RETURN000405SUB.DEMO.DAYS.TO.PAY.PIE0c2SUBROUTINE SUB.DEMO.DAYS.TO.PAY.PIE**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FC2DPIE"W$WIDTH = 3W$TITLE = 'Chart - Days To Pay '*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEYEAR=WIDGET.USER.DATA(1)OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''LOCATE YEAR IN REC<67> SETTING YEAR.POS ELSE YEAR.POS=1YEAR.POS=4-YEAR.POS;   * NEED TO INVERT TO YYYY, YYYY-1, YYYY-2DAYS.POS=YEAR.POS+53W$TITLE:=YEARDAYS.TYPES='0 - 30 Days,31 - 60 Days,61 - 90 Days,Over 90 Days'CONVERT ',' TO CHAR(253) IN DAYS.TYPESPERIOD.PCTS=REC<DAYS.POS>MAX.DAYS.TYPES=DCOUNT(DAYS.TYPES,CHAR(253))FOR DAYS.CNTR = 1 TO MAX.DAYS.TYPES   PCT=PERIOD.PCTS<1,DAYS.CNTR>   W$PIE.LABELS<1,DAYS.CNTR>=DAYS.TYPES<1,DAYS.CNTR>   W$PIE.VALUES<1,DAYS.CNTR>=PCT NEXT DAYS.CNTRW$PIE.CAPTION='Days To Pay By Period For ':YEAR***RETURN00106BSUB.DEMO.AGAUGE0c2SUBROUTINE SUB.DEMO.AGAUGE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Angular Gauge widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Angular Gauge Chart Demo - Sales Volume"W$TYPE = "HLINEARGAUGE"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN  W$TYPE = WIDGET.USER.DATA(1)END ELSE WIDGET.USER.DATA(1) = "HLINEARGAUGE"IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1PALETTE = WIDGET.USER.DATA(2)IF WIDGET.USER.DATA(3) = "" THEN WIDGET.USER.DATA(3) = 725000CHART.VALUE = WIDGET.USER.DATA(3)IF WIDGET.USER.DATA(4) = "" THEN WIDGET.USER.DATA(4) = W$WIDTHW$WIDTH = WIDGET.USER.DATA(4)IF WIDGET.USER.DATA(5) = "" THEN WIDGET.USER.DATA(5) = 1NUM.CHARTS = WIDGET.USER.DATA(5);* Number of single-value meter style charts to produce*BEGIN CASE  CASE W$TYPE = "HLINEARGAUGE"    W$TITLE = "Linear"  CASE W$TYPE = "ANGULARGAUGE"    W$TITLE = "Angular"  CASE W$TYPE = "HLED"    W$TITLE = "Horizontal LED"  CASE W$TYPE = "VLED"    W$TITLE = "Vertical LED"  CASE W$TYPE = "THERMOMETER"    W$TITLE = "Thermometer"  CASE W$TYPE = "CYLINDER"    W$TITLE = "Cylinder"  CASE W$TYPE = "BULB"    W$TITLE = "Bulb"END CASEW$TITLE := " Gauge Chart Demo - Sales Volume"W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = 800000*W$FW.COLOR.RANGE<1,1> = 0W$FW.COLOR.RANGE<2,1> = 300000W$FW.COLOR.RANGE<3,1> = COLOR$RED*W$FW.COLOR.RANGE<1,2> = 300000W$FW.COLOR.RANGE<2,2> = 550000W$FW.COLOR.RANGE<3,2> = COLOR$YELLOW*W$FW.COLOR.RANGE<1,3> = 550000W$FW.COLOR.RANGE<2,3> = 600000W$FW.COLOR.RANGE<3,3> = COLOR$GREEN*W$FW.COLOR.RANGE<1,4> = 600000W$FW.COLOR.RANGE<2,4> = 800000W$FW.COLOR.RANGE<3,4> = COLOR$SILVER*IF WIDGET.USER.DATA(1) # "HLINEARGAUGE" AND WIDGET.USER.DATA(1) # "ANGULARGAUGE" THEN  * Create multiple values to make an array of charts  FOR N = 1 TO NUM.CHARTS    W$FW.METER.VALUE<1,N> = INT(CHART.VALUE*(N/NUM.CHARTS))  NEXT N  W$FW.THERMOMETER.COLOR = COLOR$REDEND ELSE  W$FW.DIAL.VALUES<1> = CHART.VALUE  W$FW.TRENDPOINT.VALUES<1,1> = 675000 ;* Low-limit of trendpoint  W$FW.TRENDPOINT.VALUES<2,1> = 685000 ;* High-limit of trendpoint  W$FW.TRENDPOINT.LABELS<1,1> = "Last Year"  W$FW.TRENDPOINT.OPTS<1,1> = 'color="':COLOR$GREEN:'" useMarker="1"'  *  W$FW.TRENDPOINT.VALUES<1,2> = 475000  W$FW.TRENDPOINT.LABELS<1,2> = "2 yrs ago"  W$FW.TRENDPOINT.OPTS<1,2> = 'color="':COLOR$BLACK:'" useMarker="1"'  *END** Set up a drill-down widget call*W$FW.DD.WIDGET<1,1> = "Drilldown Demo"W$FW.DD.UD.POS<1,1,1> = 1W$FW.DD.UD.VAL<1,1,1> = W$FW.METER.VALUE:W$FW.DIAL.VALUES<1>W$FW.DD.UD.POS<1,1,2> = 2W$FW.DD.UD.VAL<1,1,2> = WIDGET.USER.DATA(1)*W$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""*W$FW.CHART.PALETTE = PALETTE*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* Let it calculate thisW$FW.TICKMARKS<5> = 4 ;* 4 minor tickmarks between the major ones*W$INPUT.PROMPT = "Gauge Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "Linear":@VM:"Angular":@VM:"Horizontal LED":@VM:"Vertical LED":@VM:"Thermometer":@VM:"Cylinder":@VM:"Bulb"W$INPUT.SELVALS = "HLINEARGAUGE":@VM:"ANGULARGAUGE":@VM:"HLED":@VM:"VLED":@VM:"THERMOMETER":@VM:"CYLINDER":@VM:"BULB"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*W$INPUT.PROMPT<2> = "Palette"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*W$INPUT.PROMPT<3> = "Chart Value"W$INPUT.TYPE<3> = "TEXT"W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = CHART.VALUE*W$INPUT.PROMPT<4> = "Widget Width"W$INPUT.TYPE<4> = "SELECT"W$INPUT.SELOPTS<4> = "1 - Narrow":@VM:"2 - Medium":@VM:"3 - Full Width"W$INPUT.SELVALS<4> = "1":@VM:"2":@VM:"3"W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = W$WIDTH**W$INPUT.PROMPT<5> = "# of Charts"*W$INPUT.TYPE<5> = "TEXT"*W$INPUT.UDPOS<5> = 5*W$INPUT.DEFAULT<5> = NUM.CHARTS*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000812SUB.DEMO.BULLET0c2SUBROUTINE SUB.DEMO.BULLET** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Bullet widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Bullet Chart Demo - Sales Volume"W$TYPE = "VBULLET"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN  W$TYPE = WIDGET.USER.DATA(1)END ELSE WIDGET.USER.DATA(1) = "VBULLET"IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1PALETTE = WIDGET.USER.DATA(2)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = 800000*W$FW.COLOR.RANGE<1,1> = 0W$FW.COLOR.RANGE<2,1> = 400000W$FW.COLOR.RANGE<3,1> = COLOR$RED*W$FW.COLOR.RANGE<1,2> = 400000W$FW.COLOR.RANGE<2,2> = 650000W$FW.COLOR.RANGE<3,2> = "YELLOW"*W$FW.COLOR.RANGE<1,3> = 650000W$FW.COLOR.RANGE<2,3> = 800000W$FW.COLOR.RANGE<3,3> = "GREEN"*W$FW.METER.VALUE = 725000W$FW.METER.TARGET = 775000*W$FW.CAPTION = "July Sales"W$FW.SUBCAPTION = "Billings"*W$FW.CHART.PALETTE = PALETTE*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* Let it calculate thisW$FW.TICKMARKS<5> = 4 ;* 4 minor tickmarks between the major ones**W$CHART.OPTIONS = "paletteThemeColor='#a2287a'"*W$FW.BC.PLOT.COLOR = COLOR$BLUEW$FW.BC.TARGET.COLOR = COLOR$WHITE*W$FW.DD.WIDGET<1,1> = "Drilldown Demo"W$FW.DD.UD.POS<1,1,1> = 1W$FW.DD.UD.VAL<1,1,1> = W$FW.METER.VALUEW$FW.DD.UD.POS<1,1,2> = 2W$FW.DD.UD.VAL<1,1,2> = WIDGET.USER.DATA(1)*W$INPUT.PROMPT = "Bullet Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "Horizontal":@VM:"Vertical"W$INPUT.SELVALS = "HBULLET":@VM:"VBULLET"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*W$INPUT.PROMPT<2> = "Palette"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000925SUB.DEMO.BULLETXX0c2    SUBROUTINE SUB.DEMO.BULLETXX* Changed by PORTBAS -> SUBROUTINE SUB.DEMO.BULLET* @(#) SUB.DEMO.BULLETXX Ported to jBASE 17:55:31  08 JUL 2015** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Bullet widget demo**#MAKE# RL $OPTIONS D3    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Bullet Chart Demo - Sales Volume"    W$TYPE = "VBULLET"    W$WIDTH = 2*    IF G$QUERYMODE THEN RETURN*    IF WIDGET.USER.DATA(1) # "" THEN        W$TYPE = WIDGET.USER.DATA(1)    END ELSE WIDGET.USER.DATA(1) = "VBULLET"    IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1    PALETTE = WIDGET.USER.DATA(2)*    W$FW.LOWER.LIMIT = 0    W$FW.UPPER.LIMIT = 800000*    W$FW.COLOR.RANGE<1,1> = 0    W$FW.COLOR.RANGE<2,1> = 400000    W$FW.COLOR.RANGE<3,1> = "RED"*    W$FW.COLOR.RANGE<1,2> = 400000    W$FW.COLOR.RANGE<2,2> = 650000    W$FW.COLOR.RANGE<3,2> = "YELLOW"*    W$FW.COLOR.RANGE<1,3> = 650000    W$FW.COLOR.RANGE<2,3> = 800000    W$FW.COLOR.RANGE<3,3> = "GREEN"*    W$FW.METER.VALUE = 725000    W$FW.METER.TARGET = 775000*    W$FW.CAPTION = "July Sales"    W$FW.SUBCAPTION = "Billings"    W$FW.CHART.PALETTE = PALETTE*    W$FW.NUMBER.PREFIX = "$"    W$FW.NUMBER.SUFFIX = ""*    W$FW.TICKMARKS<1> = 1     ;* Display tickmarks    W$FW.TICKMARKS<2> = 1     ;* Display values by tickmarks    W$FW.TICKMARKS<3> = "B"   ;* Show tickmarks below the graph    W$FW.TICKMARKS<4> = ""    ;* Let it calculate this    W$FW.TICKMARKS<5> = 4     ;* 4 minor tickmarks between the major ones**W$CHART.OPTIONS = "paletteThemeColor='#a2287a'"*    W$FW.DD.WIDGET<1,1> = "Drilldown Demo"    W$FW.DD.UD.POS<1,1,1> = 1    W$FW.DD.UD.VAL<1,1,1> = W$FW.METER.VALUE    W$FW.DD.UD.POS<1,1,2> = 2    W$FW.DD.UD.VAL<1,1,2> = WIDGET.USER.DATA(1)*    W$INPUT.PROMPT = "Bullet Chart Style"    W$INPUT.TYPE = "SELECT"    W$INPUT.SELOPTS = "Horizontal":@VM:"Vertical"    W$INPUT.SELVALS = "HBULLET":@VM:"VBULLET"    W$INPUT.UDPOS = 1    W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*    W$INPUT.PROMPT<2> = "Palette"    W$INPUT.TYPE<2> = "SELECT"    W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"    W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"    W$INPUT.UDPOS<2> = 2    W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*    INCLUDE WBPD SOURCE.VIEW.ICON*    RETURN00029ESUB.DEMO.DNUT0c2SUBROUTINE SUB.DEMO.DNUT** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Doughnut Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Defects by Reason"W$TYPE = "FCDOUGHNUT2D"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*CATEG = ""CATEG<1> = 20CATEG<2> = 30CATEG<3> = 20CATEG<4> = 9*CATEG.NAMES = ''CATEG.NAMES<1> = "Choices"CATEG.NAMES<2> = "Material"CATEG.NAMES<3> = "Errors"CATEG.NAMES<4> = "Shipping"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$PIE.LABELS<1,N> = CATEG.NAMES<N>  W$PIE.VALUES<1,N> = CATEG<N>NEXT NW$PIE.CAPTION = "Defects"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000255SUB.DEMO.DRILLDOWN0c2SUBROUTINE SUB.DEMO.DRILLDOWN** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Demo drill-down widget*INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TEXT"W$TITLE = "Drilldown Widget"W$WIDTH = 3W$PRINTABLE = 1*IF G$QUERYMODE = 1 THEN RETURN*W$TEXT.DATA = "Source Widget: ":G$DD.REFERRERW$TEXT.DATA<-1> = " "W$TEXT.DATA<-1> = "Contents of WIDGET.USER.DATA:"W$TEXT.DATA<-1> = " "FOR X = 1 TO 100  IF WIDGET.USER.DATA(X) # "" THEN    W$TEXT.DATA<-1> = "WIDGET.USER.DATA(":X:") = ":WIDGET.USER.DATA(X)  ENDNEXT X*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN00045DSUB.DEMO.FUNNEL0c2SUBROUTINE SUB.DEMO.FUNNEL** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Funnel widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Funnel Demo - Website Conversion Ratio"W$TYPE = "FUNNEL"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*CATEG = ""CATEG<1> = 385634CATEG<2> = 175631CATEG<3> = 84564CATEG<4> = 35654CATEG<5> = 12342*CATEG.NAMES = ''CATEG.NAMES<1> = "Website Visits"CATEG.NAMES<2> = "Downloads"CATEG.NAMES<3> = "Interested to buy"CATEG.NAMES<4> = "Contract finalized"CATEG.NAMES<5> = "Purchased"*W$FW.CAPTION = "Conversion Ratio"W$FW.SUBCAPTION = "May 2007"W$CHART.OPTIONS<-1> = "isSliced='1'"W$CHART.OPTIONS<-1> = "showPercentValues='1'"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$FW.LABELS<1,N> = CATEG.NAMES<N>  W$FW.VALUES<1,N> = CATEG<N>  *  * Set up a drill-down widget call for each category  *  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = CATEG.NAMES<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = CATEG<N>NEXT N*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000715SUB.DEMO.MAP.CANADA0c2SUBROUTINE SUB.DEMO.MAP.CANADA** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: US Map demonstration* 6-1-15 ZUMASYS CONVERT MAP.DATA ID DELIMETER FROM * TO #** Modified by Peter Schellenbach of Zumasys 06-08-15:*  Changed test of ENUM after EXECUTE to test SYSTEM(11) instead.**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Canadian Provinces by Alphabet"W$TYPE = "MAP:Canada"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'*W$CHART.OPTIONS<-1> = 'animation="0"'W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'W$CHART.OPTIONS<-1> = 'legendShadow="1"'W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'**6-1-15*EXECUTE \SSELECT MVDB.MAP.DATA = "CANADA*]" BY A1\ RETURNING ENUM CAPTURING ETXTEXECUTE \SSELECT MVDB.MAP.DATA = "CANADA#]" BY A1\ RETURNING ENUM CAPTURING ETXT; *6-1-15*PJS 06-08-15*IF ENUM[1,3]="404" THENIF SYSTEM(11) THEN ; *PJS 06-08-15* LOOP   READNEXT ID ELSE ID="\\EOF" UNTIL ID="\\EOF" DO   READ I FROM F.MVDB.MAP.DATA,ID THEN*6-1-15*     W$MAP.IDS<1,-1> = FIELD(ID,'*',2)     W$MAP.IDS<1,-1> = FIELD(ID,'#',2); *6-1-15*     W$MAP.VALUES<1,-1> = (SEQ(I<1>[1,1]) - (SEQ('A')-1))     W$MAP.VALUE.TOOLTEXT<1,-1> := I<2>:' (':I<1>:')'   END REPEATEND*W$MAP.RANGE.NAME<1,1> = "Early in Alphabet"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "10"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Middle of Alphabet"W$MAP.RANGE.LOW<1,2> = "10"W$MAP.RANGE.HIGH<1,2> = "18"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Late in Alphabet"W$MAP.RANGE.LOW<1,3> = "18"W$MAP.RANGE.HIGH<1,3> = "27"W$MAP.RANGE.COLOR<1,3> = "RED"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000B92SUB.DEMO.MAP.USA0c2SUBROUTINE SUB.DEMO.MAP.USA** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: US Map demonstration* 6-1-15 ZUMASYS CHANGE MAP ID DELIMITER FROM * TO #**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - States by Alphabet"W$TYPE = "USAMAP"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'READ STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ''CONVERT "," TO @VM IN STATE.NAMES*W$CHART.OPTIONS<-1> = 'animation="0"'W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'W$CHART.OPTIONS<-1> = 'legendShadow="1"'W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'*IF WIDGET.USER.DATA(1) # "" THEN  * This is a drill-down run on this widget - we are now to display info for a specific state  OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'  EXECUTE 'SELECT MVDB.MAP.DATA WITH NAME = "':WIDGET.USER.DATA(2):'"' CAPTURING JUNK  N = 0  LOOP    READNEXT ID ELSE EXIT    READ REC FROM F.MVDB.MAP.DATA, ID THEN      N += 1      NAME = REC<2>*6-1-15*      W$MAP.IDS<1,N> = FIELD( ID, '*', 2 )      W$MAP.IDS<1,N> = FIELD( ID, '#', 2 ); *6-1-15      W$MAP.VALUES<1,N> = (SEQ(REC<2>[1,1]) - SEQ('A')) + 1      W$MAP.VALUE.TOOLTEXT<1,N> = NAME      W$FW.DD.WIDGET<1,N> = "Drilldown Demo"      W$FW.DD.UD.POS<1,N,1> = 1*6-1-15*      W$FW.DD.UD.VAL<1,N,1> = FIELD(ID,'*',1)      W$FW.DD.UD.VAL<1,N,1> = FIELD(ID,'#',1); *6-1-15*      W$FW.DD.UD.POS<1,N,2> = 2      W$FW.DD.UD.VAL<1,N,2> = ID      W$FW.DD.UD.POS<1,N,3> = 3      W$FW.DD.UD.VAL<1,N,3> = WIDGET.USER.DATA(2)      W$FW.DD.UD.POS<1,N,4> = 4      W$FW.DD.UD.VAL<1,N,4> = REC<2>    END  REPEAT  W$LINK.LABEL<1,1> = "Return to USA Map"  W$LINK.LOCATION<1,1> = "C"  W$LINK.UD.POS<1,1> = 1  W$LINK.UD.VAL<1,1> = ""  W$LINK.ICON<1,1> = "arrow_left.png"  W$LINK.ICON.TXT<1,1> = "Back to US Map"  *  W$LINK.LABEL<1,2> = "Return to USA Map"  W$LINK.LOCATION<1,2> = "1"  W$LINK.UD.POS<1,2> = 1  W$LINK.UD.VAL<1,2> = ""  *  W$TITLE = "Demo - ":WIDGET.USER.DATA(1):" Counties by Alphabet"END ELSE ;* National map display  STATE.CNT = DCOUNT( STATE.NAMES<1>, @VM )  FOR N = 1 TO STATE.CNT    W$MAP.IDS<1,N> = STATE.NAMES<1,N>    W$MAP.VALUES<1,N> = (SEQ(STATE.NAMES<1,N>[1,1]) - SEQ('A')) + 1    W$MAP.VALUE.TOOLTEXT<1,N> := STATE.NAMES<2,N>:' (':STATE.NAMES<1,N>:')'    W$MAP.VALUE.DD<1,N> = 1 ;* Allow drill-down  NEXT NEND*W$MAP.RANGE.NAME<1,1> = "Early in Alphabet"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "10"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Middle of Alphabet"W$MAP.RANGE.LOW<1,2> = "10"W$MAP.RANGE.HIGH<1,2> = "18"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Late in Alphabet"W$MAP.RANGE.LOW<1,3> = "18"W$MAP.RANGE.HIGH<1,3> = "27"W$MAP.RANGE.COLOR<1,3> = "RED"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000FCCSUB.DEMO.MS.COL0c2SUBROUTINE SUB.DEMO.MS.COL** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Multi Series Column Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Monthly Unit Sales"W$TYPE = "FCMSCOLUMN2D"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "2D"BEGIN CASE  CASE WIDGET.USER.DATA(1) = "2D"    W$TYPE = "FCMSCOLUMN2D"  CASE WIDGET.USER.DATA(1) = "3D"    W$TYPE = "FCMSCOLUMN3D"  CASE WIDGET.USER.DATA(1) = "BAR"    W$TYPE = "FCMSBAR2D"  CASE WIDGET.USER.DATA(1) = "AREA2D"    W$TYPE = "FCMSAREA2D"  CASE WIDGET.USER.DATA(1) = "LINE"    W$TYPE = "FCMSLINE"  CASE WIDGET.USER.DATA(1) = "STACKEDAREA"    W$TYPE = "FCSTACKEDAREA2D"  CASE WIDGET.USER.DATA(1) = "STACKEDCOLUMN2D"    W$TYPE = "FCSTACKEDCOLUMN2D"  CASE WIDGET.USER.DATA(1) = "STACKEDCOLUMN3D"    W$TYPE = "FCSTACKEDCOLUMN3D"  CASE WIDGET.USER.DATA(1) = "STACKEDBAR"    W$TYPE = "FCSTACKEDBAR2D"  CASE 1    W$TYPE = WIDGET.USER.DATA(1):"?"END CASE*W$BAR.LABELS<1> = "Regular"W$BAR.LABELS<2> = "Mid-Grade"W$BAR.LABELS<3> = "Premium"W$BAR.LABELS<4> = "Ethanol"*W$BAR.CAPTION = "Monthly Sales by Type"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Sales (USD)"*SALES = ""SALES<1> = "28452536"SALES<2> = "31208425"SALES<3> = "30245519"SALES<4> = "40425111"SALES<5> = "36515188"SALES<6> = "39144100"SALES<7> = "41655215"SALES<8> = "36615152"SALES<9> = "43944161"SALES<10> = "42251594"SALES<11> = "48833151"SALES<12> = "50122415"*TOT.SALES = SUM(SALES)*LARGEST = 0LARGEST.N = 0FOR N = 1 TO 12  W$BAR.VALUES<1,N> = OCONV(SALES<N>*.4,'MD02')  W$BAR.VALUES<2,N> = OCONV(SALES<N>*.3,'MD02')  W$BAR.VALUES<3,N> = OCONV(SALES<N>*.1,'MD02')  W$BAR.VALUES<4,N> = OCONV(SALES<N>*.2,'MD02')  W$BAR.XLABELS<1,N> = OCONV(N*30-15,'DMA')[1,3]  IF SALES<N> > LARGEST THEN LARGEST = SALES<N> ; LARGEST.N = N NEXT NDD.SALES = OCONV(TOT.SALES*.4,'MD02')DD.SALES<2> = OCONV(TOT.SALES*.3,'MD02') DD.SALES<3> = OCONV(TOT.SALES*.1,'MD02') DD.SALES<4> = OCONV(TOT.SALES*.2,'MD02') **FOR N = 1 TO 4**  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"**  W$FW.DD.UD.POS<1,N,1> = 1**  W$FW.DD.UD.VAL<1,N,1> = DD.SALES<N>**  W$FW.DD.UD.POS<1,N,2> = 2**  W$FW.DD.UD.VAL<1,N,2> = W$BAR.LABELS<N> **NEXT N VAL.CNTR = 0FOR N = 1 TO 12**  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"**  W$FW.DD.UD.POS<1,N,1> = 1**  W$FW.DD.UD.VAL<1,N,1>=W$BAR.XLABELS<1,N>  FOR NN = 1 TO 4     VAL.CNTR+=1     W$FW.DD.WIDGET<1,VAL.CNTR> = "Drilldown Demo"     W$FW.DD.UD.POS<1,VAL.CNTR,1>=1     W$FW.DD.UD.VAL<1,VAL.CNTR,1>=VAL.CNTR     W$FW.DD.UD.POS<1,VAL.CNTR,2>=2**     W$FW.DD.UD.VAL<1,VAL.CNTR,2> = W$BAR.VALUES<NN,N>     W$FW.DD.UD.VAL<1,VAL.CNTR,2> = 'MS.VALUE'     W$FW.DD.UD.POS<1,VAL.CNTR,3> = 3**     W$FW.DD.UD.VAL<1,VAL.CNTR,3>=W$BAR.XLABELS<1,N>     W$FW.DD.UD.VAL<1,VAL.CNTR,3>='MS.LABEL'     W$FW.DD.UD.POS<1,VAL.CNTR,4> = 4     W$FW.DD.UD.VAL<1,VAL.CNTR,4>=W$BAR.LABELS<NN>   NEXT NN**  W$FW.DD.UD.POS<1,N,2> = 2**  W$FW.DD.UD.VAL<1,N,2> = W$BAR.LABELS<N>NEXT NMAX.VALUE = OCONV((LARGEST * .4)*1.1,'MD02') W$CHART.OPTIONS<-1> = "yAxisMaxValue='":MAX.VALUE:"'"*W$BAR.LABEL.OPTS<1> = "showValues='0'"W$BAR.LABEL.OPTS<2> = "showValues='0'"W$BAR.LABEL.OPTS<3> = "showValues='0'"W$BAR.LABEL.OPTS<4> = "showValues='0'"*IF W$TYPE = "FCMSAREA2D" THEN  W$BAR.LABEL.OPTS<1> := " areaAlpha='50'"  W$BAR.LABEL.OPTS<2> := " areaAlpha='70'"  W$BAR.LABEL.OPTS<3> := " areaAlpha='90'"  W$BAR.LABEL.OPTS<4> := " areaAlpha='40'"END*W$INPUT.PROMPT = "Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "2D Column":@VM:"3D Column":@VM:"Bar Chart":@VM:"2D Area Chart":@VM:"Line Chart":@VM:"Stacked Area Chart":@VM:"2D Stacked Column Chart":@VM:"3D Stacked Column Chart":@VM:"Stacked Bar Chart"W$INPUT.SELVALS = "2D":@VM:"3D":@VM:"BAR":@VM:"AREA2D":@VM:"LINE":@VM:"STACKEDAREA":@VM:"STACKEDCOLUMN2D":@VM:"STACKEDCOLUMN3D":@VM:"STACKEDBAR"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0006D0SUB.DEMO.PIE0c2SUBROUTINE SUB.DEMO.PIE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: PIE Chart Demonstration widget**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Chart - Fuel Sales by Type"W$TYPE = "FC2DPIE"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "3D" THEN  W$TYPE = "FC3DPIE"END*SALES = ""SALES<1> = "28452536"SALES<2> = "31208425"SALES<3> = "30245519"SALES<4> = "40425111"SALES<5> = "36515188"SALES<6> = "39144100"SALES<7> = "41655215"SALES<8> = "36615152"SALES<9> = "43944161"SALES<10> = "42251594"SALES<11> = "48833151"SALES<12> = "50122415"*TOT.SALES = SUM(SALES)CATEG = ""CATEG<1> = INT(TOT.SALES*.4)CATEG<2> = INT(TOT.SALES*.2)CATEG<3> = INT(TOT.SALES*.3)CATEG<4> = INT(TOT.SALES*.1)*CATEG.NAMES = ''CATEG.NAMES<1> = "Regular"CATEG.NAMES<2> = "Mid-Grade"CATEG.NAMES<3> = "Premium"CATEG.NAMES<4> = "Ethanol"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$PIE.LABELS<1,N> = CATEG.NAMES<N>  W$PIE.VALUES<1,N> = CATEG<N>  *  * Set up a drill-down widget call for each category  *  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = CATEG.NAMES<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = CATEG<N>NEXT NIF WIDGET.USER.DATA(1) # "3D" THEN  W$PIE.VALUE.OPTS<1,3> = 'isSliced="1"'END*IF WIDGET.USER.DATA(1) = "3D" THEN*  W$LINK.LABEL<1> = "2D"  W$LINK.ICON.TXT<1> = "2D Chart"  W$LINK.UD.VAL<1> = "2D"  W$PIE.CAPTION = "3D Chart"END ELSE*  W$LINK.LABEL<1> = "3D"  W$LINK.ICON.TXT<1> = "3D Chart"  W$LINK.UD.VAL<1> = "3D"  W$PIE.CAPTION = "2D Chart"ENDW$LINK.ICON<1> = "chart_pie.png"W$LINK.UD.POS<1> = "1"W$LINK.LOCATION<1> = "C"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0003E1SUB.DEMO.PYRAMID0c2SUBROUTINE SUB.DEMO.PYRAMID** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Pyramid widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Pyramid Demo - Errors by Reason"W$TYPE = "PYRAMID"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*CATEG = ""CATEG<1> = 19CATEG<2> = 20CATEG<3> = 36CATEG<4> = 44*CATEG.NAMES = ''CATEG.NAMES<1> = "Shipping"CATEG.NAMES<2> = "Bad Choices"CATEG.NAMES<3> = "Errors"CATEG.NAMES<4> = "Bad Material"*W$FW.CAPTION = "Errors by Reason"W$FW.SUBCAPTION = "2008 Shipments"W$CHART.OPTIONS<-1> = "isSliced='1'"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$FW.LABELS<1,N> = CATEG.NAMES<N>  W$FW.VALUES<1,N> = CATEG<N>  *  * Set up a drill-down widget call for each category  *  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = CATEG.NAMES<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = CATEG<N>NEXT N*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000C95SUB.DEMO.SPARK0c2SUBROUTINE SUB.DEMO.SPARK** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Spark widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Spark Chart Demo - My Stock Price"W$TYPE = "SPARKLINE"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN  W$TYPE = WIDGET.USER.DATA(1)END ELSE WIDGET.USER.DATA(1) = "SPARKLINE"IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1PALETTE = WIDGET.USER.DATA(2)*VALUES = ""W$FW.VALUES<1,-1> = "2726"W$FW.VALUES<1,-1> = "3788"W$FW.VALUES<1,-1> = "3888"W$FW.VALUES<1,-1> = "2290"W$FW.VALUES<1,-1> = "3902"W$FW.VALUES<1,-1> = "2331"W$FW.VALUES<1,-1> = "3085"W$FW.VALUES<1,-1> = "2701"W$FW.VALUES<1,-1> = "3320"W$FW.VALUES<1,-1> = "2193"W$FW.VALUES<1,-1> = "3451"W$FW.VALUES<1,-1> = "2484"W$FW.VALUES<1,-1> = "3932"W$FW.VALUES<1,-1> = "3704"W$FW.VALUES<1,-1> = "2781"W$FW.VALUES<1,-1> = "2295"W$FW.VALUES<1,-1> = "2473"W$FW.VALUES<1,-1> = "3763"W$FW.VALUES<1,-1> = "2975"W$FW.VALUES<1,-1> = "2235"W$FW.VALUES<1,-1> = "3435"W$FW.VALUES<1,-1> = "2760"W$FW.VALUES<1,-1> = "2797"W$FW.VALUES<1,-1> = "3236"W$FW.VALUES<1,-1> = "2256"W$FW.VALUES<1,-1> = "2415"W$FW.VALUES<1,-1> = "2493"W$FW.VALUES<1,-1> = "3582"W$FW.VALUES<1,-1> = "2345"W$FW.VALUES<1,-1> = "3764"W$FW.VALUES<1,-1> = "2699"W$FW.VALUES<1,-1> = "2948"W$FW.VALUES<1,-1> = "3663"W$FW.VALUES<1,-1> = "3558"W$FW.VALUES<1,-1> = "3219"W$FW.VALUES<1,-1> = "2759"W$FW.VALUES<1,-1> = "2694"W$FW.VALUES<1,-1> = "3235"W$FW.VALUES<1,-1> = "2263"W$FW.VALUES<1,-1> = "2597"W$FW.VALUES<1,-1> = "2528"W$FW.VALUES<1,-1> = "2673"W$FW.VALUES<1,-1> = "2347"W$FW.VALUES<1,-1> = "2055"W$FW.VALUES<1,-1> = "3458"W$FW.VALUES<1,-1> = "2916"W$FW.VALUES<1,-1> = "3497"W$FW.VALUES<1,-1> = "2457"W$FW.VALUES<1,-1> = "2070"W$FW.VALUES<1,-1> = "3261"*IF WIDGET.USER.DATA(1) = "SPARKWINLOSS" THEN  VAL.LIST = W$FW.VALUES  FOR N = 2 TO DCOUNT( W$FW.VALUES<1>, @VM )    VAL = INT(W$FW.VALUES<1,N>)    IF VAL > INT(VAL.LIST<1,N-1>) THEN      VAL = "W" ;* Win    END ELSE IF VAL = INT(VAL.LIST<1,N-1>) THEN      VAL = "D" ;* Draw    END ELSE VAL = "L"    W$FW.VALUES<1,N> = VAL  NEXT N  W$FW.VALUES<1,1> = "W" ;* First month was a win.END ELSE  FOR N = 1 TO DCOUNT( W$FW.VALUES<1>, @VM )    W$FW.VALUES<1,N> = OCONV(W$FW.VALUES<1,N>,"MD2")  NEXT NEND*** Set up a drill-down widget call*W$FW.DD.WIDGET<1,1> = "Drilldown Demo"W$FW.DD.UD.POS<1,1> = 1W$FW.DD.UD.VAL<1,1> = W$FW.VALUES<1,1>*W$FW.SPARK.TREND.BEG<1,1> = W$FW.VALUES<1,1>W$FW.SPARK.TREND.END<1,1> = W$FW.VALUES<1,DCOUNT(W$FW.VALUES<1>,@VM)>*W$FW.CAPTION = "Cisco"W$FW.SUBCAPTION = "12 Months"W$FW.CHART.PALETTE = PALETTE*W$INPUT.PROMPT = "Spark Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "Column":@VM:"Line":@VM:"Win/Loss"W$INPUT.SELVALS = "SPARKCOLUMN":@VM:"SPARKLINE":@VM:"SPARKWINLOSS"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*W$INPUT.PROMPT<2> = "Palette"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000708SUB.DEMO.SS.COL0c2SUBROUTINE SUB.DEMO.SS.COL** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Single Series Column Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Monthly Unit Sales"W$TYPE = "FCCOLUMN2D"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "2D"BEGIN CASE  CASE WIDGET.USER.DATA(1) = "2D"    W$TYPE = "FCCOLUMN2D"  CASE WIDGET.USER.DATA(1) = "3D"    W$TYPE = "FCCOLUMN3D"  CASE WIDGET.USER.DATA(1) = "BAR"    W$TYPE = "FCBAR2D"  CASE WIDGET.USER.DATA(1) = "AREA2D"    W$TYPE = "FCAREA2D"  CASE 1    W$TYPE = WIDGET.USER.DATA(1)END CASE*W$BAR.CAPTION = "Revenue by Branch for Period 2008-08"W$BAR.XMEMO = "Branch"W$BAR.YMEMO = "Sales Revenue"*UNITS = ""UNITS<1> = "15177"UNITS<2> = "11700"UNITS<3> = "12833"UNITS<4> = "13529"UNITS<5> = "21953"UNITS<6> = "35792"UNITS<7> = "35202"UNITS<8> = "28206"UNITS<9> = "23168"UNITS<10> = "42657"UNITS<11> = "35595"UNITS<12> = "28328"UNITS<13> = "297674"UNITS<14> = "26111"UNITS<15> = "243295"UNITS<16> = "323846"UNITS<17> = "42615"UNITS<18> = "-29"UNITS<19> = "38787"UNITS<20> = "71023"UNITS<21> = "130106"*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = UNITS<N>*  W$BAR.XLABELS<1,N> = OCONV(ICONV(N:"/1",'D'),'DMA')[1,3]  W$BAR.XLABELS<1,N> = N  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = UNITS<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = NNEXT N*W$INPUT.PROMPT = "Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "2D Column":@VM:"3D Column":@VM:"Bar Chart":@VM:"2D Area Chart"W$INPUT.SELVALS = "2D":@VM:"3D":@VM:"BAR":@VM:"AREA2D"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000478SUB.DEMO.SS.LINE0c2SUBROUTINE SUB.DEMO.SS.LINE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Single Series Line Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Monthly Sales Summary"W$TYPE = "FCLINE"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*W$BAR.LABELS = "Sales (USD)"W$BAR.CAPTION = "Monthly Sales (USD)"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Sales (USD)"*SALES = ""SALES<1> = "28452536"SALES<2> = "31208425"SALES<3> = "30245519"SALES<4> = "40425111"SALES<5> = "36515188"SALES<6> = "39144100"SALES<7> = "41655215"SALES<8> = "36615152"SALES<9> = "43944161"SALES<10> = "42251594"SALES<11> = "48833151"SALES<12> = "50122415"*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = OCONV(SALES<N>,'MD02')*  W$BAR.XLABELS<1,N> = OCONV(ICONV(N:"/1",'D'),'DMA')[1,1]  W$BAR.XLABELS<1,N> = OCONV(N*30-15,'DMA')[1,3]NEXT N*W$BAR.TREND.BEG = OCONV(SALES<1>,'MD02')W$BAR.TREND.END = OCONV(SALES<12>,'MD02')W$BAR.TREND.OPTS = "thickness='2' displayValue='Trend'"W$CHART.OPTIONS<-1> = "showValues='0'"W$CHART.OPTIONS<-1> = "animation='1'"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000667SUB.FREE0c2SUBROUTINE SUB.FREE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Display disk usage*INCLUDE WBPD MVDB.INCLUDE*IF WIDGET.USER.DATA(1) = "TEXT" THEN  W$TYPE = "TEXT"  W$PRINTABLE = 1END ELSE  W$TYPE = "FC3DPIE"ENDW$TITLE = "D3 Free Space"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "TEXT" THEN  W$TITLE := ' (Text Display)'  EXECUTE "FREE" CAPTURING OUTPUT  W$TEXT.DATA = OUTPUTEND ELSE  W$TITLE := ' (Chart Display)'  EXECUTE "WHAT (LSW" CAPTURING WHAT  ATTR = DCOUNT(WHAT,@AM)  LOOP WHILE WHAT<ATTR> = "" DO ATTR -= 1 REPEAT  *  WHAT = TRIM(WHAT<ATTR>)  FRAMESIZE = FIELD(WHAT, ' ', 8)  MAXFID = FIELD( WHAT, ' ', 6 )  SYSBASE = FIELD( WHAT, ' ', 4 )  SYS.BYTE = SYSBASE * FRAMESIZE  SYS.FRAME = SYS.BYTE/FRAMESIZE  AVAIL.FRAME = FIELD( WHAT, ' ', 7 )  USED.FRAME = (MAXFID-SYSBASE)-AVAIL.FRAME  *  MAXBYTE = MAXFID * FRAMESIZE  MAXMB = ICONV(MAXBYTE/1000000,"MD0")  SYS.MB = SYS.BYTE/1000000  USED.BYTE = USED.FRAME * FRAMESIZE  USED.MB = USED.BYTE/1000000  AVAIL.BYTE = AVAIL.FRAME * FRAMESIZE  AVAIL.MB = AVAIL.BYTE/1000000  *  W$PIE.LABELS<1,1> = "Used (":OCONV(SYS.MB+USED.MB,'MD0,'):")"  W$PIE.LABELS<1,2> = "Available (":OCONV(AVAIL.MB,'MD0,'):")"  *  W$PIE.VALUES<1,1> = SYS.MB+USED.MB  W$PIE.VALUES<1,2> = AVAIL.MB  *  W$PIE.CAPTION = "D3 Free Space"END** Set up links*W$LINK.LABEL<1,1> = "Pie"W$LINK.LABEL<1,2> = "Text"W$LINK.LOCATION<1,1> = "2"W$LINK.LOCATION<1,2> = "2"W$LINK.UD.POS<1,1> = 1W$LINK.UD.POS<1,2> = 1W$LINK.UD.VAL<1,1> = "FC3DPIE"W$LINK.UD.VAL<1,2> = "TEXT"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN	000277SUB.GRID.TEST0c2SUBROUTINE SUB.GRID.TEST** Copyright (c) 2010 SB, Inc. All rights reserved.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Untitled TABLE"W$TYPE = "TABLE"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN** Set up column labelsW$TABLE.COL.LABELS<1,1> = "Column 1"W$TABLE.COL.LABELS<1,2> = "Column 2"** Column justification = left, right, centerW$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "right"** Table RowsFOR ROW = 1 TO 5  W$TABLE.DATA<ROW,1> = ROW:",1"  W$TABLE.DATA<ROW,2> = ROW:",2"NEXT ROW** TotalsW$TABLE.TOTALS<1,1> = "2"W$TABLE.TOTALS<1,2> = "4"RETURN000EFFSUB.ICON.GALLERY0c2SUBROUTINE SUB.ICON.GALLERY** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Icon Gallery*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Icon Gallery"W$TYPE = "HTML"W$WIDTH = 3W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN ;* Dont process, just provide title, type & width*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "UNABLE TO OPEN MVDB.CONTROL"  RETURNENDREAD ICON.LIST FROM F.MVDB.CONTROL, 'ICON.LIST' ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "UNABLE TO READ ICON.LIST FROM MVDB.CONTROL"  RETURNENDCONVERT @AM TO @VM IN ICON.LIST** WIDGET.USER.DATA(1) = User specified search string* WIDGET.USER.DATA(2) = Search string used to make filtered list (previous string)* WIDGET.USER.DATA(3) = Filtered list* WIDGET.USER.DATA(4) = Current page #*ICNT = DCOUNT( ICON.LIST, @VM )IF WIDGET.USER.DATA(2) # WIDGET.USER.DATA(1) THEN  NEW.FILTER = 1END ELSE NEW.FILTER = 0PAGENO = WIDGET.USER.DATA(4)IF NOT(PAGENO MATCHES "1N0N") THEN PAGENO = ""IF PAGENO = "" THEN PAGENO = 1IF NEW.FILTER THEN  WIDGET.USER.DATA(2) = WIDGET.USER.DATA(1)  SEARCH.STR = WIDGET.USER.DATA(1)  SEARCH.STR = OCONV( SEARCH.STR, 'MCU')  FILTERED.LIST = ""  FOR IX = 1 TO ICNT    IF INDEX(OCONV(ICON.LIST<1,IX>,'MCU'),SEARCH.STR,1) THEN      FILTERED.LIST<1,-1> = ICON.LIST<1,IX>    END  NEXT IX  WIDGET.USER.DATA(3) = FILTERED.LIST  WIDGET.USER.DATA(4) = 1 ;* Page 1  ICON.LIST = FILTERED.LIST  ICNT = DCOUNT( ICON.LIST, @VM )  WIDGET.USER.DATA(5) = "" ;* Next/Prev action not processed here.  WIDGET.USER.DATA(4) = 1 ;* Start on page 1 with a new filter  PAGENO = 1END ELSE  IF WIDGET.USER.DATA(2) # "" THEN    ICON.LIST = WIDGET.USER.DATA(3)    ICNT = DCOUNT( ICON.LIST, @VM)   ENDENDIF WIDGET.USER.DATA(5) = "NEXT" THEN  PAGENO += 1END ELSE IF WIDGET.USER.DATA(5) = "PREV" THEN  PAGENO -= 1  IF PAGENO < 1 THEN PAGENO = 1ENDWIDGET.USER.DATA(5) = ""WIDGET.USER.DATA(4) = PAGENOPER.ROW = 7ROWS.PER.PAGE = 10CALL GET.CGI('generatepdf',IS.PDF)IF IS.PDF THEN  * If generating a PDF, place all items on a single  * page, letting the PDF renderer handle pagination.  ROWS.PER.PAGE = (INT((ICNT-1)/PER.PAGE)+1)*PER.PAGEENDPER.PAGE = ROWS.PER.PAGE * PER.ROWMAX.NAME.CHARS = 22MAX.PAGE = INT( (ICNT-1) / PER.PAGE )+ 1IF PAGENO > MAX.PAGE THEN  PAGENO = 1  WIDGET.USER.DATA(4) = PAGENOENDSTART.POS = ((PAGENO-1) * PER.PAGE) ;* This is an offset, not an actual starting positionIF ICON.LIST = "" THEN  W$HTML.DATA = '<table><tr><td>No Results</td></tr></table>'END ELSE  W$HTML.DATA = '<table><tr><td colspan="':PER.ROW:'">Page ':PAGENO:' of ':MAX.PAGE:'</td></tr><tr>'  W$HTML.DATA := ''  IX = 1  LOOP    SHOW.NAME = ICON.LIST<1,IX+START.POS>    IF LEN(SHOW.NAME) > MAX.NAME.CHARS THEN      SHOW.NAME = SHOW.NAME[1,MAX.NAME.CHARS-3]:"..."    END    W$HTML.DATA := '<td align="center" width="115px" style="font-size:10px;"><img title="':ICON.LIST<1,IX+START.POS>:'" class="icon" src="/db/icons/':ICON.LIST<1,IX+START.POS>:'" /><br />':SHOW.NAME:'<br />':IX+START.POS:'</td>'  UNTIL IX = (PER.PAGE) OR (IX+START.POS) >= ICNT DO    IF NOT(MOD(IX,PER.ROW)) THEN      W$HTML.DATA := '</tr><tr>'    END    IX += 1  REPEAT  W$HTML.DATA := '</tr></table>'END*W$HTML.DATA := '<br />'*FOR N = 1 TO 5*  W$HTML.DATA := 'WIDGET.USER.DATA(':N:') = ':WIDGET.USER.DATA(N):'<br />'*NEXT N*W$INPUT.PROMPT<1> = "Search"W$INPUT.TYPE<1> = "TEXT"W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(1)W$INPUT.UDPOS<1> = 1W$INPUT.BUTTON = "Search"*IF PAGENO > 1 THEN  W$LINK.LABEL<1,-1> = "Prev Page"  W$LINK.LOCATION<1,-1> = 23  W$LINK.UD.POS<1,-1> = 5  W$LINK.UD.VAL<1,-1> = "PREV"END*IF PAGENO < MAX.PAGE THEN  W$LINK.LABEL<1,-1> = "Next Page"  W$LINK.LOCATION<1,-1> = 14  W$LINK.UD.POS<1,-1> = 5  W$LINK.UD.VAL<1,-1> = "NEXT"END*RETURN00013DSUB.LISTPEQS0c2SUBROUTINE SUB.LISTPEQS** Copyright (c) 2010 SB, Inc. All rights reserved.*INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "HTML"W$TITLE = "Print Queue"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$TEXT.DATA = '<iframe src="/dbc/SBBP.SB.LISTPEQS" width="100%" scrolling="auto" height="500"></iframe>'RETURN000221SUB.LISTU0c2SUBROUTINE SUB.LISTU * * Copyright (c) 2010 SB, Inc. All rights reserved. * Description: List Users * *#MAKE# RL $OPTIONS D3 INCLUDE WBPD MVDB.INCLUDE * W$TYPE = "HTML" W$TITLE = "List Users" W$WIDTH = 1 W$PRINTABLE = 1 * IF G$QUERYMODE THEN RETURN * EXECUTE "LISTU" CAPTURING JUNK W$HTML.DATA = '<div  align="left">' W$HTML.DATA<-1> = '<pre>' FOR X = 1 TO DCOUNT( JUNK, @AM )  W$HTML.DATA<-1> = JUNK<X> NEXT X W$HTML.DATA<-1> = '</pre>' W$HTML.DATA<-1> = '</div>' * INCLUDE WBPD SOURCE.VIEW.ICON * RETURN 000C87SUB.MAP.VARIABLE0c2SUBROUTINE SUB.MAP.VARIABLE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Variable Map* 6-1-15 ZUMASYS CHANGE MAP.DATA DELIMITER TO #** Modified by Peter Schellenbach of Zumasys 06-08-15:*  Changed test of ENUM after EXECUTE to test SYSTEM(11) instead.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Variable Map"W$TYPE = "MAP:World"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "World"*OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'*W$CHART.OPTIONS<-1> = 'animation="0"'W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'W$CHART.OPTIONS<-1> = 'legendShadow="1"'W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'*LAST.WTYPE = ""SELOPT.MAX = 0SELOPTX = 1EXECUTE \SSELECT MVDB.MAP.DATA BY NAME BY A1\ RETURNING ENUM CAPTURING ETXT*PJS 06-08-15*IF ENUM[1,3]="404" THENIF SYSTEM(11) THEN ; *PJS 06-08-15* LOOP  READNEXT ID ELSE ID="\\EOF" UNTIL ID="\\EOF" DO*6-1-15*  WTYPE = FIELD(ID,"*",1)  WTYPE = FIELD(ID,"#",1); *6-1-15  IF WTYPE # LAST.WTYPE THEN    SELOPT.MAX += 1    W$INPUT.SELOPTS<1,SELOPT.MAX> = WTYPE    IF WTYPE = WIDGET.USER.DATA(1) THEN SELOPTX = SELOPT.MAX    LAST.WTYPE = WTYPE  END REPEATEND*IF WIDGET.USER.DATA(2) = "NEXT" AND SELOPTX < SELOPT.MAX THEN SELOPTX += 1 WIDGET.USER.DATA(1) = W$INPUT.SELOPTS<1,SELOPTX>ENDIF WIDGET.USER.DATA(2) = "PREV" AND SELOPTX > 1 THEN SELOPTX -= 1 WIDGET.USER.DATA(1) = W$INPUT.SELOPTS<1,SELOPTX>ENDWIDGET.USER.DATA(2) = ""*EXECUTE \SSELECT MVDB.MAP.DATA BY NAME BY A1\ RETURNING ENUM CAPTURING ETXTMAPX = 0*PJS 06-08-15*IF ENUM[1,3]="404" THENIF SYSTEM(11) THEN ; *PJS 06-08-15* LOOP  READNEXT ID ELSE ID="\\EOF" UNTIL ID="\\EOF" DO*6-1-15*  WTYPE = FIELD(ID,"*",1)  WTYPE = FIELD(ID,"#",1); *6-1-15*  IF WTYPE # LAST.WTYPE THEN    W$INPUT.SELOPTS<1,-1> = WTYPE    LAST.WTYPE = WTYPE  END  IF WTYPE = WIDGET.USER.DATA(1) THEN    READ I FROM F.MVDB.MAP.DATA,ID THEN      MAPX += 1*6-1-15*      W$MAP.IDS<1,MAPX> = FIELD(ID,'*',2)      W$MAP.IDS<1,MAPX> = FIELD(ID,'#',2); *6-1-15      W$MAP.VALUES<1,MAPX> = (SEQ(I<1>[1,1]) - (SEQ('A')-1))      W$MAP.VALUE.TOOLTEXT<1,MAPX> := I<2>:' (':I<1>:')'    END  END REPEATEND*W$TYPE = "MAP:":WIDGET.USER.DATA(1)W$MAP.RANGE.NAME<1,1> = "Early in Alphabet"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "10"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Middle of Alphabet"W$MAP.RANGE.LOW<1,2> = "10"W$MAP.RANGE.HIGH<1,2> = "18"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Late in Alphabet"W$MAP.RANGE.LOW<1,3> = "18"W$MAP.RANGE.HIGH<1,3> = "27"W$MAP.RANGE.COLOR<1,3> = "RED"*W$INPUT.PROMPT = "Map Of"W$INPUT.TYPE = "SELECT"W$INPUT.SELVALS = W$INPUT.SELOPTSW$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*IF SELOPTX > 1 THEN W$LINK.LABEL<1,-1> = "Prev Map" W$LINK.LOCATION<1,-1> = 23 W$LINK.UD.POS<1,-1> = 2 W$LINK.UD.VAL<1,-1> = "PREV"END*IF SELOPTX < SELOPT.MAX THEN W$LINK.LABEL<1,-1> = "Next Map" W$LINK.LOCATION<1,-1> = 14 W$LINK.UD.POS<1,-1> = 2 W$LINK.UD.VAL<1,-1> = "NEXT"END*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0014E0SUB.MOBILE.APPS0c2    SUBROUTINE SUB.MOBILE.APPS* @(#) SUB.MOBILE.APPS Ported to jBASE 17:55:32  08 JUL 2015*  The following variable names were converted*   STATUS* ** Dashboard Widget*    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Mobile Web App Registration"    W$TYPE = "TABLE"    W$WIDTH = 3     ;* Full width (1=1/3, 2=2/3, 3=3/3)*    IF G$QUERYMODE THEN RETURN** Set up column labels    W$TABLE.COL.LABELS<1,1> = "Subroutine Name"    W$TABLE.COL.LABELS<1,2> = "Application Name"    W$TABLE.COL.LABELS<1,3> = "Status"    W$TABLE.COL.LABELS<1,4> = "Action"** Column justification = left, right, center    W$TABLE.COL.JUST<1,1> = "left"    W$TABLE.COL.JUST<1,2> = "left"    W$TABLE.COL.JUST<1,3> = "left"    W$TABLE.COL.JUST<1,4> = "left"** Table Rows*    OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE        W$TYPE = "TEXT"        W$TEXT.DATA = "Unable to open MVDB.CONTROL"        RETURN    END    READ MOBI.APPS FROM F.MVDB.CONTROL, "MOBI.APPS" ELSE MOBI.APPS = ""*    IF WIDGET.USER.DATA(1) # "" THEN        BEGIN CASE        CASE G$SUBMITTED            SUBNAME = WIDGET.USER.DATA(1)            IF SUBNAME # "" THEN                LOCATE SUBNAME IN MOBI.APPS<1> BY "AL" SETTING POS THEN                    MOBI.APPS<2,POS> = WIDGET.USER.DATA(3)                    MOBI.APPS<3,POS> = WIDGET.USER.DATA(2)                END ELSE                    MOBI.APPS = INSERT( MOBI.APPS, 1, POS, 0, SUBNAME )                    MOBI.APPS = INSERT( MOBI.APPS, 2, POS, 0, WIDGET.USER.DATA(3) )                    MOBI.APPS = INSERT( MOBI.APPS, 3, POS, 0, WIDGET.USER.DATA(2) )                END            END        CASE WIDGET.USER.DATA(2) = "delete"            MOBI.APPS = DELETE( MOBI.APPS, 1, WIDGET.USER.DATA(1), 0 )            MOBI.APPS = DELETE( MOBI.APPS, 2, WIDGET.USER.DATA(1), 0 )            MOBI.APPS = DELETE( MOBI.APPS, 3, WIDGET.USER.DATA(1), 0 )        CASE WIDGET.USER.DATA(2) = "play"            MOBI.APPS<2,WIDGET.USER.DATA(1)> = "A"        CASE WIDGET.USER.DATA(2) = "pause"            MOBI.APPS<2,WIDGET.USER.DATA(1)> = "I"        CASE WIDGET.USER.DATA(2) = "default"            LOCATE "D" IN MOBI.APPS<2> SETTING CURR.D THEN                MOBI.APPS<2,CURR.D> = "A"            END            MOBI.APPS<2,WIDGET.USER.DATA(1)> = "D"        CASE 1        END CASE        WRITE MOBI.APPS ON F.MVDB.CONTROL, 'MOBI.APPS'        WIDGET.USER.DATA(1) = ""        WIDGET.USER.DATA(2) = ""        WIDGET.USER.DATA(3) = ""    END*    TOPROW = ""    FOR ROW = 1 TO DCOUNT(MOBI.APPS<1>, @VM )        SUB.NAME = MOBI.APPS<1,ROW>        ENC.SUB.NAME = SUB.NAME        CALL SUB.URL.ENCODE(ENC.SUB.NAME)        SUB.LINK = '<a href="/dbc/MVDB.WEB.ED?ed_file=MOBI.SUBS&ed_item=':ENC.SUB.NAME:'" target="MOBI.SUBS_':ENC.SUB.NAME:'">':SUB.NAME:'</a>'        W$TABLE.DATA<ROW,1> = SUB.LINK        W$TABLE.DATA<ROW,2> = MOBI.APPS<3,ROW>        Status = MOBI.APPS<2,ROW>        BEGIN CASE        CASE Status = "A"            Status = '<img src="/db/icons/bullet_green.png" />Active'        CASE Status = "I"            Status = '<img src="/db/icons/bullet_red.png" />Inactive'        CASE Status = "D"            Status = '<img src="/db/icons/bullet_green.png" /><b>Active/Default</b>'            Status := '&nbsp;<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=play"><img src="/db/icons/control_stop.png" title="Un-set Default" /></a>'            TOPROW = ROW        END CASE        W$TABLE.DATA<ROW,3> = Status        ACTIONS = '<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=delete" '        ACTIONS := \onClick='confirm("Delete this entry?");'><img src="/db/icons/delete.png" title="Delete" /></a>\        ACTIONS := '&nbsp;'        IF MOBI.APPS<2,ROW> = "A" OR MOBI.APPS<2,ROW> = "D" THEN            ICON = "control_pause.png"            ACTION = "pause"            ALT = "Set as inactive"        END ELSE            ICON = "control_play.png"            ACTION = "play"            ALT = "Set as active"        END        ACTIONS := '<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=':ACTION:'" ><img src="/db/icons/':ICON:'" title="':ALT:'" /></a>'        IF MOBI.APPS<2,ROW> # "D" THEN            ICON = "star.png"            ACTION = "default"            ALT = "Set as default"            ACTIONS := '&nbsp;<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=':ACTION:'" ><img src="/db/icons/':ICON:'" title="':ALT:'" /></a>'        END        W$TABLE.DATA<ROW,4> = ACTIONS    NEXT ROW*    IF TOPROW # "" THEN* Float this row to the top of the list (the default application)        ROW = W$TABLE.DATA<TOPROW>        W$TABLE.DATA = DELETE( W$TABLE.DATA, TOPROW, 0, 0 )        W$TABLE.DATA = INSERT( W$TABLE.DATA, 1, 0, 0, ROW )    END*    W$INPUT.PROMPT<1> = "Add Subroutine"    W$INPUT.TYPE<1> = "TEXT"    W$INPUT.UDPOS<1> = 1*    W$INPUT.PROMPT<2> = "Description"    W$INPUT.TYPE<2> = "TEXT"    W$INPUT.UDPOS<2> = 2*    W$INPUT.PROMPT<3> = "Status"    W$INPUT.TYPE<3> = "SELECT"    W$INPUT.UDPOS<3> = 3    W$INPUT.DEFAULT<3> = "A"    W$INPUT.SELOPTS<3> = "Active":@VM:"Default":@VM:"Inactive"    W$INPUT.SELVALS<3> = "A":@VM:"D":@VM:"I"*    RETURN00078BSUB.DEMO.MONTHLY.SALES.BY.REP0c2SUBROUTINE SUB.DEMO.MONTHLY.SALES.BY.REP***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN2D"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEMONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREVENUE.OR.GP=WIDGET.USER.DATA(1)YEAR=WIDGET.USER.DATA(2)REP=WIDGET.USER.DATA(3)BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE=YEAR:' Monthly Sales For Rep: ':REP      W$BAR.YMEMO = "Sales"      READ ANNUAL.REC FROM FILE.CONTROL, 'SALES.':YEAR ELSE ANNUAL.REC=''      LOCATE REP IN ANNUAL.REC<1> SETTING REP.POS ELSE REP.POS=1      SALES.AMTS=ANNUAL.REC<2,REP.POS>      MAX.ROUNDER=250000   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE=YEAR:' Monthly Gross Profits For Rep: ':REP      W$BAR.YMEMO = "Gross Profits"      READ ANNUAL.REC FROM FILE.CONTROL, 'GPS.':YEAR ELSE ANNUAL.REC=''      LOCATE REP IN ANNUAL.REC<1> SETTING REP.POS ELSE REP.POS=1      SALES.AMTS=ANNUAL.REC<2,REP.POS>      MAX.ROUNDER=50000END CASE*MAX.MOS=DCOUNT(SALES.AMTS,CHAR(252))MAX.SALES.AMT=0FIRST.MOS=''FOR NN = 1 TO MAX.MOS   MONTH=FIELD(MONTHS,',',NN)   SALES.AMT=SALES.AMTS<1,1,NN>   SALES.AMT=OCONV(SALES.AMT,'MD02')   IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT   W$BAR.VALUES<1,NN> = SALES.AMT   W$BAR.XLABELS<1,NN> = MONTHNEXT NNW$BAR.XMEMO = "Month"* ROUND MAX AMOUNT UP TO THE NEXT MAX.ROUNDERMAX.SALES.AMT+=MAX.ROUNDERMAX.SALES.AMT=INT(MAX.SALES.AMT/MAX.ROUNDER) * MAX.ROUNDERW$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'RETURN001DF6SUB.MW.CODE.FACTORY0c2SUBROUTINE SUB.MW.CODE.FACTORY** Copyright (c) 2010 SB, Inc. All rights reserved.** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Mobile Web Code Factory"W$TYPE = "HTML"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$HTML.DATA = '<form action="/dbc/MVDB.MAIN" method="GET">'W$HTML.DATA<-1> = '<input type="hidden" name="udview" value="':G$WIDGET.NAME:'" />'*NSELECTED = "" ; TSELECTED = "" ; FSELECTED = ""CODE.TEXT = ""IF WIDGET.USER.DATA(1) # WIDGET.USER.DATA(100) THEN  TMP1 = WIDGET.USER.DATA(1)  TMP100 = WIDGET.USER.DATA(100)  MAT WIDGET.USER.DATA = ""  WIDGET.USER.DATA(1) = TMP1  WIDGET.USER.DATA(100) = TMP100ENDW$HTML.DATA<-1> = '<table width="100%">'BEGIN CASE  CASE WIDGET.USER.DATA(1) = "N"    NSELECTED = "selected"    GOSUB TYPE.SELECTOR    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos2" value="2" />'    W$HTML.DATA<-1> = 'Nav Labels (comma-separated):</td><td><input type="text" name="udval2" value="':WIDGET.USER.DATA(2):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos3" value="3" />'    W$HTML.DATA<-1> = 'Nav Links (comma-separated):</td><td><input type="text" name="udval3" value="':WIDGET.USER.DATA(3):'" /></td></tr>'    W$HTML.DATA<-1> = '</table>'    *    IF WIDGET.USER.DATA(2) # "" THEN      CODE.TEXT = 'P$NAV.OPTS = ""'      VARNAME = "P$NAV.LABEL" ; LIST = WIDGET.USER.DATA(2)      GOSUB MAKE.CODE      VARNAME = "P$NAV.LINK" ; LIST = WIDGET.USER.DATA(3)      GOSUB MAKE.CODE    END    W$HTML.DATA<-1> = '<br /><input type="submit" value="Make Code" />'  CASE WIDGET.USER.DATA(1) = "T"    TSELECTED = "selected"    GOSUB TYPE.SELECTOR    *    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos2" value="2" />'    W$HTML.DATA<-1> = 'Column Headings (comma-separated):</td><td><input type="text" name="udval2" value="':WIDGET.USER.DATA(2):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos3" value="3" />'    W$HTML.DATA<-1> = 'Column Just (L/R) (comma-separated):</td><td><input type="text" name="udval3" value="':WIDGET.USER.DATA(3):'" /></td></tr>'    W$HTML.DATA<-1> = '</table>'    IF WIDGET.USER.DATA(2) # "" THEN      CODE.TEXT<-1> = 'MAT TABLE.DEFS = ""'      VARNAME = "TABLE$LABELS" ; LIST = WIDGET.USER.DATA(2)      GOSUB MAKE.CODE      VARNAME = "TABLE$ALIGN" ; LIST = WIDGET.USER.DATA(3)      GOSUB MAKE.CODE      *      CODE.TEXT<-1> = 'TABLE$DATA = "" ;* Fill in your data here'      CODE.TEXT<-1> = 'CALL SUB.MOBI.TABLE(MAT TABLE.DEFS)'    END    W$HTML.DATA<-1> = '<br /><input type="submit" value="Make Code" />'  CASE WIDGET.USER.DATA(1) = "F"    FSELECTED = "selected"    GOSUB TYPE.SELECTOR    *    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos2" value="2" />'    W$HTML.DATA<-1> = 'Field Labels (comma-separated):</td><td><input type="text" name="udval2" value="':WIDGET.USER.DATA(2):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos3" value="3" />'    W$HTML.DATA<-1> = 'Field Types (comma-separated):</td><td><input type="text" name="udval3" value="':WIDGET.USER.DATA(3):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos4" value="4" />'    W$HTML.DATA<-1> = 'Values (comma-separated):</td><td><input type="text" name="udval4" value="':WIDGET.USER.DATA(4):'" /></td></tr>'    *    IF WIDGET.USER.DATA(2) # "" THEN      *      DIM SEL.REF(20)      DIM SEL.LISTS(20)      DIM SEL.VALS(20)      TMP.TYPES = WIDGET.USER.DATA(3)      CALL SWAP(TMP.TYPES,'\,',CHAR(9))      CONVERT "," TO @AM IN TMP.TYPES      CONVERT " " TO "" IN TMP.TYPES      CONVERT CHAR(9) TO "," IN TMP.TYPES      TMP.NAMES = WIDGET.USER.DATA(2)      CALL SWAP(TMP.NAMES,'\,',CHAR(9))      CONVERT "," TO @AM IN TMP.NAMES      CONVERT CHAR(9) TO "," IN TMP.NAMES      SEL.POS = 0      POS.LIST = ""      UDPOS = 6 ;* Next user data position (hold 5 open)      LOOP        LOCATE "SELECT" IN TMP.TYPES SETTING POS THEN          TMP.TYPES<POS> = "XXX"          SEL.POS += 1          POS.LIST<-1> = POS          W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos':UDPOS:'" value="':UDPOS:'" />'          W$HTML.DATA<-1> = 'Options for "':TMP.NAMES<POS>:'":</td><td><input type="text" name="udval':UDPOS:'" value="':WIDGET.USER.DATA(UDPOS):'" /></td></tr>'          UDPOS += 1          W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos':UDPOS:'" value="':UDPOS:'" />'          W$HTML.DATA<-1> = 'Values for "':TMP.NAMES<POS>:'":</td><td><input type="text" name="udval':UDPOS:'" value="':WIDGET.USER.DATA(UDPOS):'" /></td></tr>'          UDPOS += 1        END ELSE EXIT      REPEAT      W$HTML.DATA<-1> = '</table>'      UDPOS = 5      CONVERT @AM TO "," IN POS.LIST      W$HTML.DATA<-1> = '<input type="hidden" name="udpos':UDPOS:'" value="5" />'      W$HTML.DATA<-1> = '<input type="hidden" name="udval':UDPOS:'" value="':POS.LIST:'" />'    END ELSE      W$HTML.DATA<-1> = '</table>'    END    W$HTML.DATA<-1> = '<input type="submit" value="Make Code" />'    *    IF WIDGET.USER.DATA(2) # "" THEN      CODE.TEXT<-1> = "FORM.ID = 1"      CODE.TEXT<-1> = 'INPUT.OPTS = "" ; SEL.LISTS = "" ; SEL.VALS = ""'      CODE.TEXT<-1> = 'FIELDSET.LABEL = "Fieldset Label"'      VARNAME = "LABELS" ; LIST = WIDGET.USER.DATA(2)      GOSUB MAKE.CODE      VARNAME = "INPUT.TYPES" ; LIST = WIDGET.USER.DATA(3)      GOSUB MAKE.CODE      VARNAME = "VALUES" ; LIST = WIDGET.USER.DATA(4)      GOSUB MAKE.CODE      *      POS.LIST = WIDGET.USER.DATA(5)      CONVERT "," TO @AM IN POS.LIST      POS.CNT = DCOUNT( POS.LIST, @AM )      SXPOS = 6      FOR SX = 1 TO POS.CNT        LIST = WIDGET.USER.DATA(SXPOS)        SXPOS += 1        VALS = WIDGET.USER.DATA(SXPOS)        SXPOS += 1        CONVERT "," TO @AM IN LIST        CONVERT "," TO @AM IN VALS        FOR SVX = 1 TO DCOUNT( LIST, @AM )          CODE.TEXT<-1> = "SEL.LISTS<":POS.LIST<SX>:",":SVX:"> = \":TRIM(LIST<SVX>):"\"          CODE.TEXT<-1> = "SEL.VALS<":POS.LIST<SX>:",":SVX:"> = \":TRIM(VALS<SVX>):"\"        NEXT SVX      NEXT SX      CODE.TEXT<-1> = 'FIELDSET.OPTIONS = ""'      CODE.TEXT<-1> = "CALL SUB.MOBI.FIELDSET(LABELS,VALUES,INPUT.TYPES,INPUT.OPTS,SEL.LISTS,SEL.VALS,FIELDSET.LABEL,FORM.ID,FIELDSET.OPTIONS)"    END  CASE 1    GOSUB TYPE.SELECTOR    MAT WIDGET.USER.DATA = ""    W$HTML.DATA<-1> = '</table>'END CASE*WIDGET.USER.DATA(100) = WIDGET.USER.DATA(1) ;* Current typeW$HTML.DATA<-1> = '</form>'IF CODE.TEXT # "" THEN  CALL SWAP(CODE.TEXT,'&','&amp;')  CALL SWAP(CODE.TEXT,'<','&lt;')  CALL SWAP(CODE.TEXT,'>','&gt;')  CALL SWAP(CODE.TEXT,@AM,'<br />')  W$HTML.DATA<-1> = '<hr />'  W$HTML.DATA<-1> = '<pre>'  W$HTML.DATA<-1> = CODE.TEXT  W$HTML.DATA<-1> = '</pre>'ENDRETURN*MAKE.CODE: **CALL SWAP(LIST,'\,',CHAR(9))CONVERT "," TO @AM IN LISTCONVERT CHAR(9) TO ',' IN LISTCNT = DCOUNT( LIST, @AM )CODE.TEXT<-1> = VARNAME:' = ""'FOR N = 1 TO CNT  WORD = TRIM(LIST<N>)  IF WORD # "" THEN    CODE.TEXT<-1> = VARNAME:'<':N:'> = \':WORD:'\'  ENDNEXT NRETURN*TYPE.SELECTOR: **W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos1" value="1" />'W$HTML.DATA<-1> = 'Create code for:</td><td><select name="udval1" onChange="this.form.submit();">'W$HTML.DATA<-1> = '<option value="">Select Code Type</option>'W$HTML.DATA<-1> = '<option value="N" ':NSELECTED:'>P$NAV Navigation</option>'W$HTML.DATA<-1> = '<option value="T" ':TSELECTED:'>Table</option>'W$HTML.DATA<-1> = '<option value="F" ':FSELECTED:'>Fieldset / Form</option>'W$HTML.DATA<-1> = '</select></td></tr>'RETURN000512SUB.DEMO.NET.INCOME.CHART0c2SUBROUTINE SUB.DEMO.NET.INCOME.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Net Income"W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''YEARS=REC<67>NET.INCOMES=REC<75>MAX.YEARS=DCOUNT(YEARS,CHAR(253))FIRST.YEAR=YEARS<1,1>CURRENT.YEAR=YEARS<1,MAX.YEARS>*W$BAR.CAPTION = "Net Income From ":FIRST.YEAR:' to ':CURRENT.YEARW$BAR.XMEMO = "Year"W$BAR.YMEMO = "Net Income"**MAX.INCOME=0FOR N = 1 TO MAX.YEARS  NET.INCOME=OCONV(REC<36-N>,'MD02')  IF NET.INCOME > MAX.INCOME THEN MAX.INCOME=NET.INCOME  YEAR=YEARS<1,N>  W$BAR.VALUES<1,N> = NET.INCOME  W$BAR.XLABELS<1,N> = YEARNEXT N* ROUND MAX INCOME UP TO THE NEXT 250000MAX.INCOME+=250000MAX.INCOME=INT(MAX.INCOME/250000) * 250000W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.INCOME:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'W$CHART.OPTIONS<-1>='forceDecimals="1"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'**RETURN0012C2SUB.PDF.CONFIG0c2SUBROUTINE SUB.PDF.CONFIG** Copyright (c) 2016 Zumasys, Inc. All rights reserved.* Description: PDF configuration widget.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "PDF Configuration"   ;* Title for widget title barW$TYPE = "HTML"                 ;* Filled in by editorW$WIDTH = 2                     ;* Full width (1=1/3, 2=2/3, 3=3/3)W$PDFABLE = 1                   ;* Enable conversion to PDF*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TEXT.INFO = "Unable to open MVDB.CONTROL"  RETURNENDW$TEXT.INFO = "" ;* No widget content at this point.*IF SYSTEM(38)<1> = 4 THEN isWindows = 1 ELSE isWindows = 0IF isWindows THEN DIRSEP = '\' ELSE DIRSEP = '/'*READ SETTINGS.REC FROM F.MVDB.CONTROL, 'PDF.SETTINGS' ELSE SETTINGS.REC = ""IF G$SUBMITTED = 1 THEN  * Save PDF settings  FOR N = 1 TO 4    SETTINGS.REC<N> = WIDGET.USER.DATA(N)  NEXT N  OK = 0  IF SETTINGS.REC<1> THEN    * Validate NATIVE.CONTENT file        *D3*     OPEN 'DICT NATIVE.CONTENT' TO D.NATIVE.CONTENT ELSE      EXECUTE 'CREATE-FILE DICT NATIVE.CONTENT 1' CAPTURING OUTPUT    END    OPEN 'DICT NATIVE.CONTENT' TO D.NATIVE.CONTENT THEN      READ QPTR FROM D.NATIVE.CONTENT,'NATIVE.CONTENT' ELSE QPTR = 'Q'      IF QPTR = 'Q' OR QPTR = 'q' THEN        IF isWindows THEN MKDIR = 'cmd.exe /c mkdir' ELSE MKDIR = 'mkdir -p -m 775'                EXECUTE '!':MKDIR:' "':SETTINGS.REC<3>:'"' CAPTURING OUTPUT        QPTR='Q'        IF isWindows THEN QPTR<3> = 'dos:':SETTINGS.REC<3> ELSE QPTR<3>='unix:':SETTINGS.REC<3>        WRITE QPTR ON D.NATIVE.CONTENT,'NATIVE.CONTENT'      END      READ QPTR FROM D.NATIVE.CONTENT,'NATIVE.CONTENT' THEN        IF QPTR<1> = 'Q' OR QPTR<1> = 'q' THEN          IF isWindows THEN            OK = OCONV(QPTR<3>,'MCU') = OCONV('dos:':SETTINGS.REC<3>,'MCU')          END ELSE            OK = (QPTR<3> = 'unix:':SETTINGS.REC<3>)          END          IF NOT(OK) THEN            W$HTML.DATA = "MV file 'NATIVE.CONTENT' does not refer to PDF directory ":SETTINGS.REC<3>:"!"          END        END      END    END    IF OK THEN      OPEN 'NATIVE.CONTENT' TO F.NATIVE.CONTENT ELSE OK = 0    END  END ELSE    OK = 1  END  IF OK THEN    WRITE SETTINGS.REC ON F.MVDB.CONTROL, 'PDF.SETTINGS'    W$HTML.DATA = "Settings saved."  END ELSE    IF W$HTML.DATA = "" THEN W$HTML.DATA = "Unable to open PDF directory!"  ENDEND ELSE  * Initialize default settings  IF SETTINGS.REC<1> = "" THEN    SETTINGS.REC<1> = 0 ;* PDF generation is disabled  END  IF SETTINGS.REC<2> = "" THEN    IF isWindows THEN      * Windows      EXEPATH = 'C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe'      CMDLINE = 'cmd.exe /c ""':EXEPATH:'" "[INPUT_FILE]" "[OUTPUT_FILE]""'      SETTINGS.REC<2> = CMDLINE    END ELSE      * Linux      EXEPATH = '/usr/local/bin/wkhtmltopdf'      SETTINGS.REC<2> = EXEPATH:' [INPUT_FILE] [OUTPUT_FILE]'    END  END  IF SETTINGS.REC<3> = "" THEN    IF isWindows THEN      * Windows      NATIVE.DIR = "C:\ProgramData\MVDashboard\NativeContent"      SETTINGS.REC<3> = NATIVE.DIR    END ELSE      * Linux      NATIVE.DIR = "/tmp/mvdashboard/nativecontent"      SETTINGS.REC<3> = NATIVE.DIR    END  END  IF SETTINGS.REC<4> = "" THEN    SETTINGS.REC<4> = 0 ;* delete generated files immediately  ENDEND*W$INPUT.PROMPT<1> = "Enable PDF generation"W$INPUT.TYPE<1> = "SELECT"W$INPUT.SELOPTS<1> = "No":@VM:"Yes"W$INPUT.SELVALS<1> = "0":@VM:"1"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = SETTINGS.REC<1>*W$INPUT.PROMPT<2> = "PDF converter command"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2TMP = SETTINGS.REC<2>CALL SWAP(TMP, '"', '&quot;')W$INPUT.DEFAULT<2> = TMPW$INPUT.PARAMS<2> = 'size="100"'**D3 requires directory to store PDF files; other platforms use DIR type fileW$INPUT.PROMPT<3> = "Directory for PDF files"W$INPUT.TYPE<3> = "TEXT"W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = SETTINGS.REC<3>W$INPUT.PARAMS<3> = 'size="100"'*W$INPUT.PROMPT<4> = "Delete PDF files after"W$INPUT.TYPE<4> = "SELECT"W$INPUT.UDPOS<4> = 4W$INPUT.SELOPTS<4,1> = "immediately"; W$INPUT.SELVALS<4,1> = 0W$INPUT.SELOPTS<4,2> = "1 day"; W$INPUT.SELVALS<4,2> = 1W$INPUT.SELOPTS<4,3> = "2 days"; W$INPUT.SELVALS<4,3> = 2W$INPUT.SELOPTS<4,4> = "3 days"; W$INPUT.SELVALS<4,4> = 3W$INPUT.SELOPTS<4,5> = "4 days"; W$INPUT.SELVALS<4,5> = 4W$INPUT.SELOPTS<4,6> = "5 days"; W$INPUT.SELVALS<4,6> = 5W$INPUT.SELOPTS<4,7> = "6 days"; W$INPUT.SELVALS<4,7> = 6W$INPUT.SELOPTS<4,8> = "7 days"; W$INPUT.SELVALS<4,8> = 7W$INPUT.SELOPTS<4,9> = "14 days"; W$INPUT.SELVALS<4,9> = 14W$INPUT.SELOPTS<4,10> = "30 days"; W$INPUT.SELVALS<4,10> = 30W$INPUT.SELOPTS<4,11> = "never"; W$INPUT.SELVALS<4,11> = 999999W$INPUT.DEFAULT<4> = SETTINGS.REC<4>*W$INPUT.BUTTON = "Save"*RETURN0010F6SUB.DEMO.REV.GP.SALES.CHART0c2SUBROUTINE SUB.DEMO.REV.GP.SALES.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEEQU ANNUAL.OR.MONTHLY TO WIDGET.USER.DATA(2)IF ANNUAL.OR.MONTHLY = '' THEN ANNUAL.OR.MONTHLY='By Year'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''YEARS=REC<67>MAX.YEARS=DCOUNT(YEARS,CHAR(253))REVENUE.OR.GP=WIDGET.USER.DATA(1)IF INDEX(ANNUAL.OR.MONTHLY,'By Month',1) THEN GOTO DO.MONTHLY*BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE='YTD Sales'      W$BAR.YMEMO = "YTD Sales"      SALES.AMTS=REC<68>   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE='YTD Gross Profit'      W$BAR.YMEMO = "YTD Gross Profit"      SALES.AMTS=REC<69>   CASE 1      REC = ''      SALES.AMTS = ''END CASE***MAX.SALES.AMT=0N=0FIRST.YEAR=''CURRENT.YEAR=''MO.NO=DCOUNT(REC<68,3>,CHAR(252))FOR NN = 1 TO MAX.YEARS   SALES.AMT=0   FOR NNN = 1 TO MO.NO      SALES.AMT+=SALES.AMTS<1,NN,NNN>    NEXT NNN   SALES.AMT=OCONV(SALES.AMT,'MD02')  IF SALES.AMT THEN     N+=1     IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT     W$BAR.VALUES<1,N> = SALES.AMT     YEAR=YEARS<1,NN>     IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR     CURRENT.YEAR=YEAR     W$BAR.XLABELS<1,N> = YEAR     W$FW.DD.WIDGET<1,N> = "DEMO ANNUAL SALES BY REP"     W$FW.DD.UD.POS<1,N,1> = 1     W$FW.DD.UD.VAL<1,N,1> = REVENUE.OR.GP; * REVENUE OR GP     W$FW.DD.UD.POS<1,N,2> = 2     W$FW.DD.UD.VAL<1,N,2> = YEAR   ENDNEXT NNW$BAR.XMEMO = "Year (drilldown for ":W$BAR.YMEMO:" by Rep)"W$BAR.CAPTION=W$BAR.YMEMO:' From ':FIRST.YEAR:' to ':CURRENT.YEAR* ROUND MAX AMOUNT UP TO THE NEXT 250000MAX.SALES.AMT+=250000MAX.SALES.AMT=INT(MAX.SALES.AMT/250000) * 250000W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'*W$CHART.OPTIONS<-1>='yAxisMaxValue="1500000"'*DO.PROMPT:*W$INPUT.PROMPT<1> = "Display By"W$INPUT.TYPE<1> = "SELECT"W$INPUT.UDPOS<1> = 2OPTIONS='By Year':CHAR(253):'By Month Using Column Chart':CHAR(253):'By Month Using Line Chart'W$INPUT.SELOPTS<1>=OPTIONSW$INPUT.SELVALS<1>=OPTIONSLOCATE ANNUAL.OR.MONTHLY IN OPTIONS<1> SETTING DEFAULT.POS ELSE DEFAULT.POS=1W$INPUT.DEFAULT<1>=ANNUAL.OR.MONTHLYW$INPUT.BUTTON<1> = "GO"*RETURN*DO.MONTHLY:*IF INDEX(ANNUAL.OR.MONTHLY,'Column',1) THEN   W$TYPE='FCMSCOLUMN2D' END ELSE   W$TYPE='FCMSLINE' ENDW$WIDTH = 3W$CHART.OPTIONS<-1>='showValues="0"'BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE='Monthly Sales'      W$BAR.YMEMO = "Monthly Sales"      W$BAR.CAPTION='Monthly Sales by Year'      SALES.ATT=68   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE='Monthly Gross Profit'      W$BAR.YMEMO = "Monthly Gross Profit"      W$BAR.CAPTION='Monthly Gross Profit by Year'      SALES.ATT=69   CASE 1      SALES.ATT=68      REC=''END CASETODAY=OCONV(DATE(),'D4-')MM=TODAY[1,2]+0YYYY=TODAY[7,4]IF MM = 1 THEN YYYY=YYYY-1YYYY.SELECT=''YEARS=''W$BAR.VALUES=''FOR N = 1 TO 12  W$BAR.XLABELS<1,N> = OCONV(N*30-15,'DMA')[1,3]NEXT NIF MAX.YEARS > 5 THEN MAX.DISPLAY.YEARS=5 ELSE MAX.DISPLAY.YEARS=MAX.YEARSMS.VAL.CNTR=0FOR I = 1 TO MAX.DISPLAY.YEARS   YEAR=YYYY-MAX.DISPLAY.YEARS+I   YEARS<-1>=YEAR   W$BAR.LABELS<I>=YEAR   YYYY.SELECT:=' "':YEAR:'"'   SALES.AMTS=REC<SALES.ATT>   FOR MO.NO = 1 TO 12      MS.VAL.CNTR+=1      SALE.AMT=SALES.AMTS<1,I,MO.NO>      W$BAR.VALUES<I,MO.NO>=OCONV(SALE.AMT,'MD02')      W$FW.DD.WIDGET<1,MS.VAL.CNTR> = "DEMO SINGLE MONTH SALES BY REP"      W$FW.DD.UD.POS<1,MS.VAL.CNTR,1>=1      W$FW.DD.UD.VAL<1,MS.VAL.CNTR,1>=REVENUE.OR.GP      W$FW.DD.UD.POS<1,MS.VAL.CNTR,2>=2      W$FW.DD.UD.VAL<1,MS.VAL.CNTR,2> = 'MS.SERIES'      W$FW.DD.UD.POS<1,MS.VAL.CNTR,3> = 3      W$FW.DD.UD.VAL<1,MS.VAL.CNTR,3>='MS.LABEL'    NEXT MO.NO NEXT I**WRITE W$BAR.VALUES ON FILE.CONTROL, 'BAR.VALUES'W$BAR.XMEMO='Month (drilldown for month by Rep)'GOSUB DO.PROMPTRETURNEND000509SUB.RSS.FEEDS0c2SUBROUTINE SUB.RSS.FEEDS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Display a list of available RSS feeds**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD WWW.INCLUDE*W$TITLE = "RSS Feeds"W$TYPE = "TABLE"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "Cannot open RSS.FEEDS"  RETURNENDOPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "Cannot open MVDB.CONTROL"  RETURNEND*W$TABLE.COL.LABELS<1,1> = "ID"W$TABLE.COL.LABELS<1,2> = "Name / Description"W$TABLE.COL.LABELS<1,3> = "Subscribe"*EXECUTE "SSELECT RSS.FEEDS BY NAME" CAPTURING JUNKROW = 1LOOP  READNEXT FID ELSE EXIT  READ FEED.REC FROM F.RSS.FEEDS, FID ELSE CONTINUE  FEED.NAME = FEED.REC<1>  CALL RSS.XML.ENCODE(FEED.NAME,"")  FEED.DESC = FEED.REC<3>  FEED.URL = "http://":CGI$SERVER.NAME:CGI$PATH:'/RSS.MAIN?feed=':FID  W$TABLE.DATA<ROW,1> = FID  W$TABLE.DATA<ROW,2> = '<b>':FEED.NAME:'</b><br />':FEED.DESC  W$TABLE.DATA<ROW,3> = \<a href="\:FEED.URL:\">Standard Feed</a>\  FOR N = 1 TO DCOUNT( FEED.REC<6>, @VM )    W$TABLE.DATA<ROW,3> := '<br /><a href="':FEED.URL:'&':FEED.REC<7,N>:'">':FEED.REC<6,N>:'</a>'  NEXT N  ROW += 1REPEATRETURN0011A3SUB.RUNTIME.ERRORS0c2SUBROUTINE SUB.RUNTIME.ERRORS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Report Runtime Errors*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "MVDB Runtime Errors"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN ;* Dont process, just provide title, type & width*IF WIDGET.USER.DATA(2) # "" THEN  ACCTFILTER = WIDGET.USER.DATA(2)  W$TITLE = "Runtime Errors (User/Account filter = ":ACCTFILTER:")"END ELSE  IF G$SUBMITTED THEN    ACCTFILTER = "ALL"  END ELSE ;* It's empty, but only becuase nobody has specified a value    ACCTFILTER = OCONV('a','U50BB')  END  WIDGET.USER.DATA(2) = ACCTFILTERENDIF WIDGET.USER.DATA(3) # "" THEN  PROGFILTER = WIDGET.USER.DATA(3)END ELSE PROGFILTER = ""OPEN '','DM,RUNTIME-ERRORS,' TO F.RUNTIME.ERRORS ELSE STOP 201, 'RUNTIME-ERRORS'XLINE = 'SSELECT DM,RUNTIME-ERRORS, BY-DSND DATE BY-DSND TIME'IF ACCTFILTER # "ALL" THEN  XLINE := ' WITH USERPIB = "[':ACCTFILTER:']"'  WITH.USED = 1END ELSE WITH.USED = 0IF PROGFILTER # "ALL" AND PROGFILTER # "" THEN  IF WITH.USED THEN XLINE := ' AND'  XLINE := ' WITH PROGNAME = "':PROGFILTER:'"'ENDEXECUTE XLINE CAPTURING JUNKIF WIDGET.USER.DATA(1) = 'CLEAR' THEN  LOOP    READNEXT ID ELSE EXIT    DELETE F.RUNTIME.ERRORS, ID  REPEAT  WIDGET.USER.DATA(1) = ""ENDIF SYSTEM(11) THEN  IF SYSTEM(11) > 100 THEN MAX.DISPLAY = 100 ELSE MAX.DISPLAY = SYSTEM(11)  W$HTML.DATA = '<h3>1 - ':MAX.DISPLAY:' of ':SYSTEM(11):'</h3>'  W$HTML.DATA := '<table><tr>'  W$HTML.DATA := '<th>Date / Time</th><th>User</th><th>Error</th>'  W$HTML.DATA := '</tr>'END ELSE  W$HTML.DATA = '<h3>No Errors</h3>'ENDERR.CNT = 0LOOP  READNEXT ID ELSE EXIT  READ RECORD FROM F.RUNTIME.ERRORS, ID ELSE CONTINUE  DATA RECORD<2,1>  EXECUTE "PRINT-ERR DM,MESSAGES, ":RECORD<1>:" (S" CAPTURING ERR  *  CONVERT @AM TO " " IN ERR  ERR = OCONV(ERR,'MCP')  ERR = TRIM(ERR)  PROG = RECORD<4>  DESC = PROG:" ":ERR  USERPIB = RECORD<3>  STACK = ""  FOR N = DCOUNT(RECORD<5>,@VM) TO 1 STEP -1    STACK := RECORD<5,N>    IF STACK # "" AND N # 1 THEN STACK := ' --> '  NEXT N  IF RECORD<5> # '' THEN DESC := "Stack: ":STACK  MD = FIELD( RECORD<3>, ' ', 3 )  *  * Try and find the source code to include in the feed.  *  SREC = "" ; FNAME = ""  OPEN MD:",MD," TO F.MD THEN    FNAME = ""    READ CREC FROM F.MD, RECORD<4> THEN      IF CREC<1> = "VR" THEN ;* This is a catalog pointer, file name is in field 4        FNAME = FIELD(CREC<4>,' ',1)      END ELSE IF CREC<1> = "PQ" THEN        IF FIELD(CREC<2>, ' ', 1 ) = "HRUN" THEN          FNAME = FIELD( CREC<2>, ' ', 2 )        END      END    END    IF FNAME # "" THEN      OPEN MD:",":FNAME:"," TO SFILE THEN        READ SREC FROM SFILE, RECORD<4> ELSE SREC = ""      END    END  END  SOURCE.SNIP = ""  IF SREC # "" THEN    CALL SWAP(SREC,'&','&amp;')    CALL SWAP(SREC,'<','&lt;')    CALL SWAP(SREC,'>','&gt;')    LINENO = RECORD<2,1>    IF LINENO MATCHES "1N0N" THEN      START.LINE = LINENO - 3      IF START.LINE < 0 THEN START.LINE = 1    END ELSE LINENO = 1 ; START.LINE = 1    END.LINE = LINENO + 3    SOURCE.SNIP = \<code style="font-size:12px" >\    FOR LN = START.LINE TO END.LINE      LINE = LN "R#4":" ":SREC<LN>      SOURCE.SNIP := LINE:'<br />'    NEXT LN    SOURCE.SNIP := '</code>'    EDIT.LINK = '<a href="/dbc/MVDB.WEB.ED?ed_acct=':MD:'&ed_file=':FNAME:'&ed_item=':PROG:'" target="':MD:'_':FNAME:'_':PROG:'">Edit Source</a>'    SOURCE.SNIP := EDIT.LINK  END ELSE    SOURCE.SNIP = 'Unable to open source code for ':RECORD<4>:' in account ':MD  END  DATE = FIELD(ID,'*',1)  TIME = FIELD(ID,'*',2)  *  W$HTML.DATA<-1> = '<tr valign="top"><td>':OCONV(DATE,'D2/'):" ":OCONV(TIME,'MTS'):'</td>'  W$HTML.DATA<-1> = '<td>':USERPIB:'</td>'  W$HTML.DATA<-1> = '<td>':DESC:'</td>'  W$HTML.DATA<-1> = '</tr>'  W$HTML.DATA<-1> = '<tr valign="top"><td>&nbsp;</td><td colspan="2">':SOURCE.SNIP:'</td></tr>'  ERR.CNT += 1UNTIL ERR.CNT > 100 DO REPEATW$HTML.DATA<-1> = '</table>'*W$LINK.LABEL<1> = "Clear Errors"W$LINK.LOCATION<1> = '1'W$LINK.UD.POS<1> = 1W$LINK.UD.VAL<1> = 'CLEAR'*W$LINK.LABEL<2> = "Print"W$LINK.LOCATION<2> = "C"W$LINK.ICON<2> = "print.png"W$LINK.URL<2> = "javascript:printThis(this);"*W$INPUT.PROMPT<1> = "User/Acct Filter"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 2W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(2)*W$INPUT.PROMPT<2> = "Program Filter"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 3W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(3)*RETURN0004B6SUB.DEMO.SALE.TYPES.PIE0c2SUBROUTINE SUB.DEMO.SALE.TYPES.PIE**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FC2DPIE"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEYEAR=WIDGET.USER.DATA(1)BEGIN CASE   CASE WIDGET.USER.DATA(2) = 'PARTS'      W$TITLE = 'Chart - ':YEAR:' Parts Revenue by Type'      TYPE.ATT=52      AMTS.ATT=53      W$PIE.CAPTION='Total Parts Revenue of '   CASE WIDGET.USER.DATA(2) = 'SERVICES'      W$TITLE = 'Chart - ':YEAR:' Services Revenue by Type'      TYPE.ATT=50      AMTS.ATT=51      W$PIE.CAPTION='Total Services Revenue of 'END CASE*OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''LOCATE YEAR IN REC<67> SETTING YEAR.POS ELSE YEAR.POS=1**W$PIE.VALUE.OPTS<1,3>='isSliced="1"'*TYPES=REC<TYPE.ATT>AMOUNTS=REC<AMTS.ATT>MAX.TYPES=DCOUNT(TYPES,CHAR(253))FOR TYPE.CNTR = 1 TO MAX.TYPES   W$PIE.LABELS<1,TYPE.CNTR>=TYPES<1,TYPE.CNTR>   W$PIE.VALUES<1,TYPE.CNTR>=AMOUNTS<1,TYPE.CNTR,YEAR.POS> NEXT TYPE.CNTRW$PIE.CAPTION:=OCONV(SUM(W$PIE.VALUES),'MD2,$')**RETURN000B60SUB.DEMO.SALES.CHART0c2SUBROUTINE SUB.DEMO.SALES.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''VAL.TYPE='$'DRILLDOWN.WIDGET=''DRILLDOWN.TYPE=''BEGIN CASE   CASE WIDGET.USER.DATA(1) = 'REVENUES'      W$TITLE='YTD Revenues'      W$BAR.YMEMO = "YTD Revenues"      SALES.AMTS=REC<68>   CASE WIDGET.USER.DATA(1) = 'GROSSPROFIT'      W$TITLE='YTD Gross Profit'      W$BAR.YMEMO = "YTD Gross Profit"      SALES.AMTS=REC<69>   CASE WIDGET.USER.DATA(1) = 'MARGIN'      VAL.TYPE='%'      W$TITLE='YTD Margin %'      W$BAR.YMEMO = "Margin %"      SALES.AMTS=REC<39>   CASE WIDGET.USER.DATA(1) = 'PARTS$'      W$TITLE='YTD Parts Revenue ($)'      W$BAR.YMEMO = "Parts Revenue ($)"      SALES.AMTS=REC<40>      DRILLDOWN.WIDGET='DEMO SALE TYPES PIE'      DRILLDOWN.TYPE='PARTS'   CASE WIDGET.USER.DATA(1) = 'SERVICES$'      W$TITLE='YTD Services Revenue ($)'      W$BAR.YMEMO = "Services Revenue ($)"      SALES.AMTS=REC<42>      DRILLDOWN.WIDGET='DEMO SALE TYPES PIE'      DRILLDOWN.TYPE='SERVICES'END CASE*YEARS=REC<38>MAX.YEARS=DCOUNT(YEARS,CHAR(253))**MAX.SALES.AMT=0N=0FIRST.YEAR=''FOR NN = 1 TO MAX.YEARS   SALES.AMT=SUM(SALES.AMTS<1,NN>)   BEGIN CASE      CASE VAL.TYPE = '$'         SALES.AMT=OCONV(SALES.AMT,'MD02')      CASE VAL.TYPE = '%'         SALES.AMT=OCONV(SALES.AMT,'MD01')      CASE 1         NULL   END CASE  IF SALES.AMT THEN     N+=1     IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT     W$BAR.VALUES<1,N> = SALES.AMT     YEAR=YEARS<1,NN>     IF DRILLDOWN.TYPE <> '' THEN        W$FW.DD.WIDGET<1,N>=DRILLDOWN.WIDGET        W$FW.DD.UD.POS<1,N,1>=1        W$FW.DD.UD.VAL<1,N,1>=YEAR        W$FW.DD.UD.POS<1,N,2>=2        W$FW.DD.UD.VAL<1,N,2>=DRILLDOWN.TYPE      END     IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR     CURRENT.YEAR=YEAR     W$BAR.XLABELS<1,N> = YEAR   ENDNEXT NNW$BAR.XMEMO = "Year"IF DRILLDOWN.TYPE <> '' THEN   W$BAR.XMEMO := " (drilldown for detail)" ENDW$BAR.CAPTION=W$BAR.YMEMO:' From ':FIRST.YEAR:' to ':CURRENT.YEARIF VAL.TYPE = '$' THEN   * ROUND MAX AMOUNT UP TO THE NEXT 250000   MAX.SALES.AMT+=250000   MAX.SALES.AMT=INT(MAX.SALES.AMT/250000) * 250000   W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'   W$CHART.OPTIONS<-1>='decimals="2"'   W$CHART.OPTIONS<-1>='DecimalPrecision="2"'   W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'   W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'   W$CHART.OPTIONS<-1>='formatNumberScale="1"' ENDIF VAL.TYPE = '%' THEN   W$CHART.OPTIONS<-1>='decimals="1"'   W$CHART.OPTIONS<-1>='forceDecimals="1"' ENDRETURN000403SUB.DEMO.SALES.PERCENTS0c2SUBROUTINE SUB.DEMO.SALES.PERCENTS***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCMSCOLUMN3D"W$WIDTH = 3W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''W$BAR.LABELS<1>='Parts'W$BAR.LABELS<2>='Services'W$BAR.CAPTION='YTD Percentage of Sales by Type'W$BAR.XMEMO='Year'W$BAR.YMEMO='Percent of Sales'*YEARS=REC<38>PART.AMTS=REC<40>PART.PCTS=REC<41>SERVICE.AMTS=REC<42>SERVICE.PCTS=REC<43>MAX.YEARS=DCOUNT(YEARS,CHAR(253))**FOR YEAR.CNTR = 1 TO MAX.YEARS   W$BAR.XLABELS<1,YEAR.CNTR>=YEARS<1,YEAR.CNTR>   W$BAR.VALUES<1,YEAR.CNTR>=OCONV(PART.PCTS<1,YEAR.CNTR>,'MD1')   W$BAR.VALUES<2,YEAR.CNTR>=OCONV(SERVICE.PCTS<1,YEAR.CNTR>,'MD1') NEXT YEAR.CNTRW$CHART.OPTIONS<-1>='decimals="1"'W$CHART.OPTIONS<-1>='forceDecimals="1"'RETURNEND00099ASUB.SC.LIB.COL0c2    SUBROUTINE SUB.SC.LIB.COL* Changed by PORTBAS -> SUBROUTINE SUB.SC.LIB.PIE* @(#) SUB.SC.LIB.COL Ported to jBASE 17:55:32  08 JUL 2015** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Pie Demo**#MAKE# RL $OPTIONS D3    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Source Code: Lines by Program"    W$TYPE = "FCBAR2D"    W$WIDTH = 2*    IF G$QUERYMODE THEN RETURN*    IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "1"    IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = "1"    N = WIDGET.USER.DATA(1)*    IF WIDGET.USER.DATA(2) = "1" THEN        CNT.TYPE = "LINES"    END ELSE        CNT.TYPE = "BYTES"    END*    W$BAR.LABELS<1> = "Lines by Program"*    DIM LIB.FILES(3), LIBS(3)*    LIBS(1) = "RSS.BP"    LIBS(2) = "WBPD"    LIBS(3) = "MVDB.SUBS"*    W$TITLE := " (":LIBS(N):")"*    TOT.LINES = 0 ; TOT.PROGS = 0    OPEN LIBS(N) TO LIB.FILES(N) ELSE STOP 201, LIBS(N)    SELECT LIB.FILES(N)    LOOP        READNEXT ID ELSE EXIT        READ REC FROM LIB.FILES(N), ID ELSE REC = ""        IF CNT.TYPE = "LINES" THEN            LINES = DCOUNT(REC, @AM)        END ELSE            LINES = LEN(REC)        END        W$BAR.XLABELS<1,-1> = ID        W$BAR.VALUES<1,-1> = LINES        TOT.PROGS += 1        TOT.LINES += LINES    REPEAT*    IF TOT.PROGS > 0 THEN        AVG = INT( TOT.LINES / TOT.PROGS )    END ELSE AVG = 0*    W$BAR.XMEMO = "Programs"    IF CNT.TYPE = "LINES" THEN        W$BAR.YMEMO = "Lines of Code"    END ELSE        W$BAR.YMEMO = "Bytes of Code"    END    W$BAR.TREND.BEG = AVG    W$BAR.TREND.OPTS = "color='20FF20' thickness='3' showOnTop='1'"*    W$CHART.HEIGHT = 200 + 8 * TOT.PROGS    W$CHART.OPTIONS<-1> = 'numDivLines="3"'*    W$BAR.CAPTION = "In Program File ":LIBS(N)*    W$INPUT.PROMPT<1> = "Program File"    W$INPUT.TYPE<1> = "SELECT"    W$INPUT.SELOPTS<1> = "RSS Feeds (RSS.BP)":@VM:"Includes (WBPD)":@VM:"Widget Subs (MVDB.SUBS)"    W$INPUT.SELVALS<1> = "1":@VM:"2":@VM:"3"    W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(1)    W$INPUT.UDPOS<1> = 1      ;* WIDGET.USER.DATA(1)*    W$INPUT.PROMPT<2> = "Count"    W$INPUT.TYPE<2> = "SELECT"    W$INPUT.SELOPTS<2> = "Lines of code":@VM:"Bytes of code"    W$INPUT.SELVALS<2> = "1":@VM:"2"    W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)    W$INPUT.UDPOS<2> = 2      ;* WIDGET.USER.DATA(2)    W$INPUT.BUTTON = "Go"*    INCLUDE WBPD SOURCE.VIEW.ICON*    RETURN000551SUB.SC.LIB.PIE0c2SUBROUTINE SUB.SC.LIB.PIE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Pie Demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*IF INDEX(G$WIDGET.NAME,'Progs',1) THEN  PIE.CNT = "PROG"  W$TITLE = "Source Code: Programs by Library"END ELSE  PIE.CNT = "LINES"  W$TITLE = "Source Code: Lines by Library"ENDW$TYPE = "FC3DPIE"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*DIM LIB.FILES(3), PROGS(3), LINES(3), LIBS(3)*LIBS(1) = "MVDB.SUBS"LIBS(2) = "RSS.BP"LIBS(3) = "WBPD"*MAT PROGS = 0; MAT LINES = 0*TOT.LINES = 0 ; TOT.PROGS = 0FOR N = 1 TO 3  OPEN LIBS(N) TO LIB.FILES(N) ELSE STOP 201, LIBS(N)  W$PIE.LABELS<1,N> = LIBS(N)  SELECT LIB.FILES(N)  LOOP    READNEXT ID ELSE EXIT    PROGS(N) += 1    IF PIE.CNT # "PROG" THEN      READ REC FROM LIB.FILES(N), ID THEN        LINES(N) += DCOUNT(REC, @AM)      END    END  REPEAT  TOT.LINES += LINES(N)  TOT.PROGS += PROGS(N)  IF PIE.CNT = "PROG" THEN    W$PIE.VALUES<1,N> = PROGS(N)  END ELSE    W$PIE.VALUES<1,N> = LINES(N)  END NEXT N*W$PIE.CAPTION = "By Program File"IF PIE.CNT = "PROG" THEN  W$CHART.OPTIONS<-1> = "subCaption='":TOT.PROGS:" Total Programs'"  W$CHART.OPTIONS<-1> = "showValues='1'"END ELSE  W$CHART.OPTIONS<-1> = "subCaption='":OCONV(TOT.LINES,'MD,'):" Total Lines'"END*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0002BASUB.SHOW.SESSION0c2SUBROUTINE SUB.SHOW.SESSION** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Show session contents*INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD WWW.INCLUDE*W$TYPE = "TABLE"W$TITLE = "Web Session Contents"W$WIDTH = 3* IF G$QUERYMODE THEN RETURN*READ REC FROM F.WEB.SESSION, SESSION$ID ELSE REC = ""W$TABLE.COL.LABELS<1,1> = "Variable"W$TABLE.COL.LABELS<1,2> = "Value"W$TABLE.DATA<1,1> = "Session ID"W$TABLE.DATA<1,2> = SESSION$IDFOR N = 1 TO DCOUNT(REC<1>, @VM)  W$TABLE.DATA<N+1,1> = REC<1,N>  VAL = REC<2,N>  CONVERT CHAR(2) TO "^" IN VAL  CONVERT CHAR(3) TO "]" IN VAL  CONVERT CHAR(4) TO "\" IN VAL  W$TABLE.DATA<N+1,2> = VALNEXT N*RETURN0007E7SUB.SHOW.VARS0c2SUBROUTINE SUB.SHOW.VARS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Display global values**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TABLE"W$TITLE = "Variables"*IF G$QUERYMODE = 1 THEN RETURN*W$LINK.LOCATION<1,1> = 2W$LINK.LOCATION<1,2> = 1*W$LINK.LABEL<1,2> = "Do Nothing"W$LINK.UD.POS<1,2> = "5"W$LINK.UD.VAL<1,2> = "XXX"*IF WIDGET.USER.DATA(1) = "1" THEN  W$LINK.LABEL<1,1> = "Show"  W$LINK.UD.POS<1,1> = "1"  W$LINK.UD.VAL<1,1> = "0"  RETURNENDW$LINK.LABEL<1,1> = "Hide"W$LINK.UD.POS<1,1> = "1"W$LINK.UD.VAL<1,1> = "1"*W$TABLE.COL.LABELS<1,1> = "Variable"W$TABLE.COL.LABELS<1,2> = "Type"W$TABLE.COL.LABELS<1,3> = "Value"*W$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "left"W$TABLE.COL.JUST<1,3> = "left"*TYPE = "GLOBAL"ROW = 0NAME = "G$USERID" ; VAL = G$USERID ; GOSUB ADDVARNAME = "G$CURRENT.DB" ; VAL = G$CURRENT.DB ; GOSUB ADDVARNAME = "G$LOGIN.DATE" ; VAL = G$LOGIN.DATE ; GOSUB ADDVARNAME = "G$LOGIN.TIME" ; VAL = G$LOGIN.TIME ; GOSUB ADDVARNAME = "G$WIDGET.NAME" ; VAL = G$WIDGET.NAME ; GOSUB ADDVARNAME = "G$WIDGET.SUB" ; VAL = G$WIDGET.SUB ; GOSUB ADDVARNAME = "G$WIDGET.NAME.LIST" ; VAL = G$WIDGET.NAME.LISTCONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$WIDGET.SUB.LIST" ; VAL = G$WIDGET.SUB.LISTCONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$WIDGET.CALL.TIME" ; VAL = G$WIDGET.CALL.TIMECONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$WIDGET.CALL.DUR" ; VAL = G$WIDGET.CALL.DURCONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$LICENSE.COUNT" ; VAL = G$LICENSE.COUNT; GOSUB ADDVARNAME = "G$EDITION" ; VAL = G$EDITION; GOSUB ADDVARNAME = "G$SYSTEM.ID" ; VAL = G$SYSTEM.ID; GOSUB ADDVAR*TYPE = "CGI"FOR X = 1 TO DCOUNT( CGI$VARS, @AM )  NAME = CGI$VARS<X>  VAL = CGI$VALS<X>  GOSUB ADDVARNEXT X*W$PRINTABLE = 1*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN*ADDVAR: **ROW += 1W$TABLE.DATA<ROW,1> = NAMEW$TABLE.DATA<ROW,2> = TYPEW$TABLE.DATA<ROW,3> = VALRETURN0007DFSUB.DEMO.SINGLE.MONTH.SALES.BY.REP0c2SUBROUTINE SUB.DEMO.SINGLE.MONTH.SALES.BY.REP***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEMONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'CONVERT ',' TO CHAR(254) IN MONTHSOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPMATWRITE WIDGET.USER.DATA ON FILE.CONTROL, 'DEBUG'READV YEARS FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE', 67 ELSE   YEARS='2013,2014,2015'   CONVERT ',' TO CHAR(253) IN YEARS ENDREVENUE.OR.GP=WIDGET.USER.DATA(1)YEAR=WIDGET.USER.DATA(2)MONTH=WIDGET.USER.DATA(3)LOCATE MONTH IN MONTHS SETTING MONTH.SVM ELSE MONTH.SVM=1YEAR.DETAIL.ID=''BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE=MONTH:' ':YEAR:' Sales By Sales Rep'      W$BAR.YMEMO = "Sales"      YEAR.DETAIL.ID='SALES.':YEAR      MAX.ROUNDER=150000   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE=MONTH:' ':YEAR:' Gross Profit By Sales Rep'      W$BAR.YMEMO = "Gross Profit"      YEAR.DETAIL.ID='GPS.':YEAR      MAX.ROUNDER=50000END CASEREAD REC FROM FILE.CONTROL, YEAR.DETAIL.ID ELSE REC=''*REPS=REC<1>**MAX.SALES.AMT=0N=0FIRST.YEAR=''MAX.REPS=DCOUNT(REPS,CHAR(253))FOR NN = 1 TO MAX.REPS   REP=REPS<1,NN>   SALES.AMT=REC<2,NN,MONTH.SVM>   SALES.AMT=OCONV(SALES.AMT,'MD02')   IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT   W$BAR.VALUES<1,NN> = SALES.AMT   W$BAR.XLABELS<1,NN> = REPNEXT NNW$BAR.XMEMO = "Sales Rep"* ROUND MAX AMOUNT UP TO THE NEXT MAX.ROUNDERMAX.SALES.AMT+=MAX.ROUNDERMAX.SALES.AMT=INT(MAX.SALES.AMT/MAX.ROUNDER) * MAX.ROUNDERW$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'RETURN000365SUB.SOURCE.VIEW0c2SUBROUTINE SUB.SOURCE.VIEW** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: View BASIC Source Code**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TEXT"W$TITLE = "Source: ":WIDGET.USER.DATA(1):", ":WIDGET.USER.DATA(2)W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN WIDGET.USER.DATA(1) TO F.FILEVAR THEN  READ REC FROM F.FILEVAR, WIDGET.USER.DATA(2) ELSE REC = '"':WIDGET.USER.DATA(2):'" not on file.'END ELSE REC = '"':WIDGET.USER.DATA(1):'" is not a valid file name.'*W$TEXT.DATA = REC*W$LINK.ICON<1> = "script_edit.png"W$LINK.ICON.TXT<1> = "Edit BASIC Source"W$LINK.URL<1> = "/dbc/MVDB.WEB.ED?ed_file=":WIDGET.USER.DATA(1):"&ed_item=":WIDGET.USER.DATA(2)W$LINK.URL.OPTS<1> = 'target="ED_':WIDGET.USER.DATA(1):"_":WIDGET.USER.DATA(2):'"'W$LINK.LOCATION<1> = "C"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN00062BSUB.SYS.ERR.BAR0c2    SUBROUTINE SUB.SYS.ERR.BAR* Changed by PORTBAS -> SUBROUTINE SUB.SYS.ERRS* @(#) SUB.SYS.ERR.BAR Ported to jBASE 17:55:32  08 JUL 2015*  The following variable names were converted*   DATE* ** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Show system errors*    INCLUDE WBPD MVDB.INCLUDE*    W$TYPE = "FCCOLUMN2D"    W$TITLE = "System Errors by Day For Each Day"    W$WIDTH = 3*    IF G$QUERYMODE = "1" THEN RETURN*    OPEN '','SYSTEM-ERRORS' TO F.SYSTEM.ERRORS ELSE RETURN*    BASE.DATE = DATE() - 29    XLINE = 'SSELECT SYSTEM-ERRORS BY-DSND DATE BY-DSND TIME WITH DATE GT "':OCONV(BASE.DATE,'D2/'):'"'    EXECUTE XLINE CAPTURING JUNK**    W$BAR.LABELS<1> = "Errors from ":OCONV(BASE.DATE,'D2/'):" Thru ":OCONV(DATE(),'D2/')    W$BAR.TYPE = "clustered"*    LOOP        READNEXT ID ELSE EXIT        Date = FIELD(ID,'*',1)        IF Date < BASE.DATE THEN EXIT*        W$BAR.VALUES<1,(Date-BASE.DATE)+1> += 1    REPEAT*    FOR X = BASE.DATE TO DATE()        OFFSET = (BASE.DATE-X)+1        W$BAR.XLABELS<1,OFFSET> = OCONV(X,'DD')    NEXT X*    W$BAR.YMEMO = "Error Records"    W$BAR.XMEMO = "Day of Month"*    W$BAR.TREND.BEG<1> = "3"    W$BAR.TREND.END<1> = "13"    W$BAR.TREND.OPTS<1> = "thickness='4' color='ff0000' displayValue='Bad Trend'"    W$BAR.TREND.BEG<2> = "11"    W$BAR.TREND.END<2> = "8"    W$BAR.TREND.OPTS<2> = "thickness='10' color='00ff00' displayValue='Good Trend'"*    W$LINK.LABEL = "Detail"    W$LINK.LOCATION = "2"    W$LINK.DD.WIDGET = "System Errors"*    RETURN0006B0SUB.SYS.ERRS0c2SUBROUTINE SUB.SYS.ERRS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Show system errors**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TABLE"W$TITLE = "Recent System Errors"W$WIDTH = 3*IF G$QUERYMODE = "1" THEN RETURN*OPEN '','SYSTEM-ERRORS' TO F.SYSTEM.ERRORS ELSE RETURN*XLINE = 'SSELECT SYSTEM-ERRORS BY-DSND DATE BY-DSND TIME'EXECUTE XLINE CAPTURING JUNK*W$TABLE.COL.LABELS = "Date":@VM:"Time":@VM:"Message":@VM:"Last TCL":@VM:"Pib / User":@VM:"Data"W$TABLE.COL.JUST = "right":@VM:"right"** User data 2 is the number of items to skip forward or backward. Calculate* the offset by adding this number to the current offset position in field 1.* Then clear out the skip fowrad/backward value.*WIDGET.USER.DATA(1) = WIDGET.USER.DATA(1) + WIDGET.USER.DATA(2)WIDGET.USER.DATA(2) = 0IF WIDGET.USER.DATA(1) < 0 THEN WIDGET.USER.DATA(1) = 0*IF WIDGET.USER.DATA(1) > 0 THEN  W$TITLE := " (":WIDGET.USER.DATA(1)+1:" - ":WIDGET.USER.DATA(1)+11:")"END*OFFSET = WIDGET.USER.DATA(1)FOR SKIPITEM = 1 TO OFFSET  READNEXT THROWAWAY ELSE EXITNEXT SKIPITEMFOR X = 1 TO 10  READNEXT ID ELSE EXIT  READ EREC FROM F.SYSTEM.ERRORS, ID THEN    W$TABLE.DATA<X,1> = OCONV( FIELD( ID,'*',1),'D2/')    W$TABLE.DATA<X,2> = OCONV( FIELD( ID,'*',2),'MTS')    W$TABLE.DATA<X,3> = EREC<4,1>    W$TABLE.DATA<X,4> = EREC<22,DCOUNT(EREC<22>,@VM)>    W$TABLE.DATA<X,5> = EREC<12,1>    W$TABLE.DATA<X,6> = EREC<5,1>  ENDNEXT X*W$LINK.LABEL<1,1> = "Prev 10"W$LINK.LABEL<1,2> = "Next 10"W$LINK.LOCATION<1,1> = "23"W$LINK.LOCATION<1,2> = "14"W$LINK.UD.POS<1,1> = 2W$LINK.UD.POS<1,2> = 2W$LINK.UD.VAL<1,1> = "-10"W$LINK.UD.VAL<1,2> = "10"*RETURN000BE6SUB.TABLE.LIC.USED0c2SUBROUTINE SUB.TABLE.LIC.USED** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here** Modified by Peter Schellenbach of Zumasys 06-08-15:*  Changed test of ENUM after EXECUTE to test SYSTEM(11) instead.*W$TITLE = "Dashboard Users Logged On"     ;* Title for widget title barW$TYPE = "TABLE"                ;* Filled in by editorW$WIDTH = 2                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*OPEN 'WEB.SESSION' TO F.WEB.SESSION ELSE RETURN*IF WIDGET.USER.DATA(1) # "" THEN DELETE F.WEB.SESSION, WIDGET.USER.DATA(1)WIDGET.USER.DATA(1) = ""*TBL=""EXECUTE 'SELECT WEB.SESSION' RETURNING ENUM CAPTURING ETXT*PJS 06-08-15*IF ENUM[1,3]="404" ELSE RETURNIF SYSTEM(11) = 0 THEN RETURN ; *PJS 06-08-15*LOOP READNEXT ID ELSE ID="\\EOF"UNTIL ID="\\EOF" DO READ REC FROM F.WEB.SESSION,ID THEN   LOCATE "userid" IN REC<1> SETTING IX THEN     UID=REC<2,IX>     LOCATE "LastSessionAccess" IN REC<1> SETTING IX THEN       LSA=REC<2,IX>     END ELSE       LSA=00000*00000     END     LSA.DT=FIELD(LSA,"*",1)     LSA.TM=FIELD(LSA,"*",2)     LGN.DT=REC<3>     LGN.TM=REC<4>     LOCARG=LGN.DT:"*":LGN.TM:"*":LSA     LOCATE LOCARG IN TBL<1> BY "AR" SETTING IX ELSE NULL     TBL=INSERT(TBL,1,IX;LOCARG)     TBL=INSERT(TBL,2,IX;UID)     TBL=INSERT(TBL,3,IX;ID)   END ENDREPEAT** Set up column labelsW$TABLE.COL.LABELS<1,1> = "User Login ID"W$TABLE.COL.LABELS<1,2> = "Session#"W$TABLE.COL.LABELS<1,3> = "Login Date"W$TABLE.COL.LABELS<1,4> = "Login Time"W$TABLE.COL.LABELS<1,5> = "Last Act Date"W$TABLE.COL.LABELS<1,6> = "Last Act Time"** Column justification = left, right, centerW$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "right"W$TABLE.COL.JUST<1,3> = "right"W$TABLE.COL.JUST<1,4> = "right"W$TABLE.COL.JUST<1,5> = "right"W$TABLE.COL.JUST<1,6> = "right"** Table RowsTBL.MAX = DCOUNT(TBL<1>,CHAR(253))FOR ROW = 1 TO TBL.MAX W$TABLE.DATA<ROW,1> = TBL<2,ROW> IF TBL<3,ROW> = SESSION$ID THEN W$TABLE.DATA<ROW,2> = "*":ROW ELSE W$TABLE.DATA<ROW,2> = ROW W$TABLE.DATA<ROW,3> = OCONV(FIELD(TBL<1,ROW>,"*",1),"D2/") W$TABLE.DATA<ROW,4> = OCONV(FIELD(TBL<1,ROW>,"*",2),"MTS") W$TABLE.DATA<ROW,5> = OCONV(FIELD(TBL<1,ROW>,"*",3),"D2/") W$TABLE.DATA<ROW,6> = OCONV(FIELD(TBL<1,ROW>,"*",4),"MTS")NEXT ROW** TotalsW$TABLE.TOTALS<1,3> = TBL.MAXW$TABLE.TOTALS<1,4> = "Consumed"LIC.AVAIL = "Unlimited"IF ASSIGNED(G$LICENSE.COUNT) THEN IF NUM(G$LICENSE.COUNT) THEN   LIC.AVAIL = G$LICENSE.COUNT - TBL.MAX ENDENDW$TABLE.TOTALS<1,5> = LIC.AVAILW$TABLE.TOTALS<1,6> = "Available"*W$INPUT.PROMPT<1> = "Sessions"W$INPUT.TYPE<1> = "SELECT"W$INPUT.DEFAULT<1> = 0W$INPUT.UDPOS<1> = 1W$INPUT.BUTTON<1> = "Log Off"W$INPUT.SELOPTS<1> = "Nobody"W$INPUT.SELVALS<1> = 0FOR ROW = 1 TO TBL.MAX IF SESSION$ID = TBL<3,ROW> ELSE   W$INPUT.SELOPTS<1,-1> = ROW:" ":TBL<2,ROW>   W$INPUT.SELVALS<1,-1> = TBL<3,ROW> ENDNEXT ROW*RETURN0002FASUB.TEST.WIDGET0c2SUBROUTINE SUB.TEST.WIDGET** Copyright (c) 2010 SB, Inc. All rights reserved.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Neat Pie Chart"W$TYPE = "FC2DPIE"W$WIDTH = 1 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$PIE.CAPTION = "MV Dashboard Survey"*W$PIE.LABELS<1,1> = "Love it"W$PIE.LABELS<1,2> = "Like it"W$PIE.LABELS<1,3> = "Very nice"W$PIE.LABELS<1,4> = "Awesome!"*W$PIE.VALUES<1,1> = "1560"W$PIE.VALUES<1,2> = "400"W$PIE.VALUES<1,3> = "1012"W$PIE.VALUES<1,4> = "4065"** For a 2D pie, a specific slice can be separated from the pie* by setting this value:* W$PIE.VALUE.OPTS<1,3> = 'isSliced="1"'** To show percentages instead of values, use this:W$CHART.OPTIONS<-1> = "showPercentValues='1'"RETURN00060ASUB.USER.AUTH0c2SUBROUTINE SUB.USER.AUTH(USERID,PASSWORD,MODE,VALID,MESSAGE,MAT USER.ITEM)** Custom user authentication subroutine. Authenticate user from the USERS file.** Input Values:*  USERID - User ID entered by the user on the login form*  PASSWORD - Password entered by the user on the login form*  MODE - "AUTH" - User is logging in, authorize.*       - "READ" - User is already authorized, just provide the USER.ITEM*                  Ignore PASSWORD.*                  VALID and MESSAGE will be ignored by caller.* * Output values*  VALID - 1=User authenticated, 0=User NOT authenticated*  MESSAGE - Alternative Message to display when user is NOT authenticated.*  MAT USER.ITEM - Dashboard user information*INCLUDE WBPD FI.MVDB.USERS** USER.ITEM values that may be populated by this program:** EQU USER.DEFAULT.DB   TO USER.ITEM(2)* EQU USER.NAME         TO USER.ITEM(3)* EQU USER.ROLE         TO USER.ITEM(6)*MAT USER.ITEM = ""*OPEN '','DM,USERS,' TO F.USERS ELSE  MESSAGE = "Unable to open DM,USERS, file."  VALID = 0  RETURNENDREAD UREC FROM F.USERS, USERID ELSE  VALID = 0  RETURNENDIF MODE = "AUTH" THEN  IF PASSWORD # "" THEN EPWD = ICONV( PASSWORD, 'UC' ) ELSE EPWD = ""END ELSE  EPWD = "" ; UREC<7> = "" ;* Make them match since we're not really authenticatingENDIF EPWD = UREC<7> THEN  VALID = 1  USER.DEFAULT.DB = "Chart Demo"  USER.NAME = UREC<1>  IF UREC<2> = "DBADMIN" THEN    USER.ROLE = "Administrator"  END ELSE USER.ROLE = "User"  RETURNEND ELSE  VALID = 0ENDRETURN000101WEB.FORMS0c2SUBROUTINE WEB.FORMS** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Untitled HTML"W$TYPE = "HTML"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$HTML.DATA = '<h2>HTML Widget Content</h2>'RETURN000355SUB.EMAILED.REPORT0c2SUBROUTINE SUB.EMAILED.REPORT** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEEQU REPORT.ID TO WIDGET.USER.DATA(1)EMAILED.REPORT=''IF REPORT.ID = '' THEN   EMAILED.REPORT='No report id found' END ELSE   OPEN '','MVDB.EMAILED.HTML' TO F.MVDB.EMAILED.HTML ELSE      EMAILED.REPORT='No MVDB.EMAILED.HTML file on system'    END   IF EMAILED.REPORT = '' THEN      READ EMAILED.REPORT FROM F.MVDB.EMAILED.HTML, REPORT.ID ELSE         EMAILED.REPORT='No report data found for ':REPORT.ID       END    END ENDW$TYPE='TEXT'W$TITLE='View TEXT report'IF INDEX(EMAILED.REPORT,'HTML',1) THEN   W$TYPE='HTML'   W$TITLE='View HTML report' ENDW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)IF G$QUERYMODE THEN RETURNW$PRINTABLE=1W$PDFABLE=1W$TEXT.DATA=EMAILED.REPORTRETURNEND000341PORTAL.SHOW.LAST.UPDATED0c2SUBROUTINE PORTAL.SHOW.LAST.UPDATED(CALC.TYPE)INCLUDE WBPD MVDB.INCLUDEIF CALC.TYPE = 'SALES' THEN   OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO DICT.FI ELSE RETURN END ELSE   OPEN 'DICT','DASHBOARD.BALANCES' TO DICT.FI ELSE RETURN ENDREAD LAST.UPDATED FROM DICT.FI, '*LAST.UPDATED.':CALC.TYPE ELSE RETURNCUR.DATE=DATE()CUR.TIME=TIME()CUR.TIME=FIELD(CUR.TIME,'.',1)CUR.TIME=STR('0',5-LEN(CUR.TIME)):CUR.TIMECUR.DATE.TIME=CUR.DATE:CUR.TIMEDELTA.DATE.TIME=CUR.DATE.TIME-LAST.UPDATED** IF LAST 5 MINUTES THEN NO MESSAGE NEEDED*IF DELTA.DATE.TIME < 300 THEN   W$TITLE=W$TITLE:' - Updated in Last 5 Minutes'   RETURN END*LAST.DATE=LAST.UPDATED[1,5]LAST.TIME=LAST.UPDATED[6,9]APPEND.IT=' - Last Updated ':OCONV(LAST.DATE,'D4-'):' at ':OCONV(LAST.TIME,'MTH')W$TITLE=W$TITLE:APPEND.ITRETURN000597REFRESH.PORTAL.DATES0c2OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO DICT.FI ELSE STOP 201,'DICT DASHBOARD.CLOSING.STATS'READ LAST.AR.DATE FROM DICT.FI, 'LAST.AR.REFRESH' ELSE STOP 201,'LAST.AR.REFRESH'READ LAST.AP.DATE FROM DICT.FI, 'LAST.AP.REFRESH' ELSE STOP 201,'LAST.AP.REFRESH'READ LAST.SALES.DATE FROM DICT.FI, 'LAST.SALES.REFRESH' ELSE STOP 201,'LAST.SALES.REFRESH'*FI='AR'; LAST.DATE=LAST.AR.DATE<1>; ATTS=20:@AM:8; GOSUB UPDATE.DATESWRITE DATE():@AM:OCONV(DATE(),'D2-') ON DICT.FI, 'LAST.AR.REFRESH'FI='AP'; LAST.DATE=LAST.AP.DATE<1>; ATTS=20:@AM:8; GOSUB UPDATE.DATESWRITE DATE():@AM:OCONV(DATE(),'D2-') ON DICT.FI, 'LAST.AP.REFRESH'FI='SALES'; LAST.DATE=LAST.SALES.DATE<1>; ATTS=1; GOSUB UPDATE.DATESWRITE DATE():@AM:OCONV(DATE(),'D2-') ON DICT.FI, 'LAST.SALES.REFRESH'STOP*UPDATE.DATES:*MAX.ATTS=DCOUNT(ATTS,@AM)DIFF.DAYS=DATE()-LAST.DATEOPEN '',FI TO FI.FI ELSE STOP 201,FIEXECUTE "SELECT ":FILOOP   READNEXT ID ELSE ID = 'DONE'UNTIL ID = 'DONE' DO   READ REC FROM FI.FI, ID ELSE REC=''   FOR I = 1 TO MAX.ATTS      ATT.NO=ATTS<I>      IF ATT.NO <> '' THEN         DATES=REC<ATT.NO>         MAX.DATES=DCOUNT(DATES,@VM)         FOR II = 1 TO MAX.DATES            THIS.DATE=DATES<1,II>            IF THIS.DATE <> '' THEN               THIS.DATE+=DIFF.DAYS               REC<ATT.NO,II>=THIS.DATE             END          NEXT II       END    NEXT I   WRITE REC ON FI.FI, IDREPEATRETURN00250AREFRESH.DASHBOARD.CLOSING.STATS0c2HAVE.AR=1OPEN '','AR' TO FI.AR ELSE HAVE.AR=0IF HAVE.AR THEN   AR.CNTR=0   LOOP      AR.CNTR+=1      READ BULK.AR FROM FI.AR, 'AR.':AR.CNTR ELSE BULK.AR=''      MAX.ROWS=DCOUNT(BULK.AR,CHAR(254))   UNTIL NOT(MAX.ROWS) DOCRT 'AR.':AR.CNTR      DELETE FI.AR, 'AR.':AR.CNTR      AR.REC=''      AR.ID=''      REC.ROW=0      BULK.AR=OCONV(BULK.AR,'MCU')      FOR ROW.NO = 1 TO MAX.ROWS         ROW=BULK.AR<ROW.NO>         IF ROW[1,2] = '%%' THEN            IF AR.REC <> '' THEN               WRITE AR.REC ON FI.AR, AR.ID             END            AR.REC=''            AR.ID=FIELD(ROW,'%',3)            REC.ROW=0          END ELSE            REC.ROW+=1            AR.REC<REC.ROW>=ROW          END       NEXT ROW.NO      IF AR.REC <> '' THEN         WRITE AR.REC ON FI.AR, AR.ID       END   REPEAT ENDHAVE.AP=1OPEN '','AP' TO FI.AP ELSE HAVE.AP=0IF HAVE.AP THEN   AP.CNTR=0   LOOP      AP.CNTR+=1      READ BULK.AP FROM FI.AP, 'AP.':AP.CNTR ELSE BULK.AP=''      MAX.ROWS=DCOUNT(BULK.AP,CHAR(254))   UNTIL NOT(MAX.ROWS) DOCRT 'AP.':AP.CNTR      DELETE FI.AP, 'AP.':AP.CNTR      AP.REC=''      AP.ID=''      REC.ROW=0      BULK.AP=OCONV(BULK.AP,'MCU')      FOR ROW.NO = 1 TO MAX.ROWS         ROW=BULK.AP<ROW.NO>         IF ROW[1,2] = '%%' THEN            IF AP.REC <> '' THEN               WRITE AP.REC ON FI.AP, AP.ID             END            AP.REC=''            AP.ID=FIELD(ROW,'%',3)            REC.ROW=0          END ELSE            REC.ROW+=1            AP.REC<REC.ROW>=ROW          END       NEXT ROW.NO      IF AP.REC <> '' THEN         WRITE AP.REC ON FI.AP, AP.ID       END   REPEAT ENDHAVE.SALES=1OPEN '','SALES' TO FI.SALES ELSE HAVE.SALES=0IF HAVE.SALES THEN   SALES.CNTR=0   LOOP      SALES.CNTR+=1      READ BULK.SALES FROM FI.SALES, 'SALES.':SALES.CNTR ELSE BULK.SALES=''      MAX.ROWS=DCOUNT(BULK.SALES,CHAR(254))   UNTIL NOT(MAX.ROWS) DO      DELETE FI.SALES, 'SALES.':SALES.CNTR      SALES.REC=''      SALES.ID=''      REC.ROW=0      BULK.SALES=OCONV(BULK.SALES,'MCU')      FOR ROW.NO = 1 TO MAX.ROWS         ROW=BULK.SALES<ROW.NO>         IF ROW[1,2] = '%%' THEN            IF SALES.REC <> '' THEN               WRITE SALES.REC ON FI.SALES, SALES.ID             END            SALES.REC=''            SALES.ID=FIELD(ROW,'%',3)            REC.ROW=0          END ELSE            REC.ROW+=1            SALES.REC<REC.ROW>=ROW          END       NEXT ROW.NO      IF SALES.REC <> '' THEN         WRITE SALES.REC ON FI.SALES, SALES.ID       END   REPEAT ENDEXECUTE "TERM 132" CAPTURING DUMMYOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE NULLERRORS=''OPEN '','DASHBOARD.CLOSING.STATS' TO FI.CLOSING.STATS ELSE ERRORS<-1>='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'HAVE.DICT.STATS=1OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.CLOSING.STATS ELSE HAVE.DICT.STATS=0; ERRORS<-1>='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE NULLIF ERRORS <> '' THEN   WRITE ERRORS ON FI.MVDB.CONTROL, 'CLOSING.STATS.ERRORS'   IF HAVE.DICT.STATS THEN      WRITE 'CLOSING.STATS.ERRORS' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'    END   STOP ENDREAD PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'END CASE*DIM SETUP.PARAMS(30)MATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' ENDEQUATE ACCOUNT TO SETUP.PARAMS(1)EQUATE REPORT.FILE TO SETUP.PARAMS(2)EQUATE SALE.DATE.DICT TO SETUP.PARAMS(3)EQUATE SALE.MONTH.DICT TO SETUP.PARAMS(4)EQUATE SALE.YEAR.DICT TO SETUP.PARAMS(5)EQUATE SALE.AMOUNT.DICT TO SETUP.PARAMS(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO SETUP.PARAMS(7)EQUATE SALESMAN.DICT TO SETUP.PARAMS(8)EQUATE BRANCH.DICT TO SETUP.PARAMS(9)EQUATE REGION.DICT TO SETUP.PARAMS(10)EQUATE SALE.DATE.AMC TO SETUP.PARAMS(11)EQUATE SALE.AMOUNT.AMC TO SETUP.PARAMS(12)EQUATE SALE.AMOUNT.CONV TO SETUP.PARAMS(13)EQUATE SALE.AMOUNT.COOR TO SETUP.PARAMS(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO SETUP.PARAMS(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO SETUP.PARAMS(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO SETUP.PARAMS(17)EQUATE SALESMAN.AMC TO SETUP.PARAMS(18)EQUATE SALESMAN.TFILE TO SETUP.PARAMS(19)EQUATE BRANCH.AMC TO SETUP.PARAMS(20)EQUATE BRANCH.TFILE TO SETUP.PARAMS(21)EQUATE REGION.AMC TO SETUP.PARAMS(22)EQUATE REGION.TFILE TO SETUP.PARAMS(23)***FILE.PATH=ACCOUNT:',':REPORT.FILE:','FILE.PATH='DASHBOARD.SALES.FILE'*WRITE 'UPDATING' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'ODATE=OCONV(DATE(),'D4-')YYYY=ODATE[7,4]FIRST.YYYY=YYYY-4CMND='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YYYY:'"'EXECUTE CMND CAPTURING DUMMYSYSTEM.11=0LOOP   READNEXT DCS.ID ELSE DCS.ID='DONE'UNTIL DCS.ID = 'DONE' DO   SYSTEM.11=1   DELETE FI.CLOSING.STATS, DCS.IDREPEATIF SYSTEM.11 THEN   IF PLATFORM = 'D3' THEN      READV INDEX.DEFS FROM FI.DICT.CLOSING.STATS, 'DASHBOARD.CLOSING.STATS', 8 ELSE INDEX.DEFS=''      IF NOT(INDEX(INDEX.DEFS,'(G*1)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G*1)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G2*1)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G2*1)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G*2)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G*2)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G1*2)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G1*2)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G1*1)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G1*1)" CAPTURING DUMMY         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G3*1)" CAPTURING DUMMY         EXECUTE 'CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G3*1):"*":0(G1*1)' CAPTURING DUMMY       END    END ELSE      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS SALESMAN" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS BRANCH" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS SALESMAN*YYYYMM" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS YYYYMM*BRANCH" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS YYYYMM" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS REGION" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS REGION*YYYYMM" CAPTURING DUMMY    END END*FOR YEAR = FIRST.YYYY TO YYYY    WRITE 'UPDATING ':YEAR ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'   *  ** DO FOR EACH YEAR SEPARATELY TO LIMIT SIZE OF LIST RETURNING   *   STACKED.1='SELECT ':FILE.PATH:' WITH ':SALE.YEAR.DICT:' = "':YEAR:'"'**WRITE DUMMY ON FI.DICT.CLOSING.STATS, '*124.SELECT'   STACKED.2='SORT ':FILE.PATH:' WITH ':SALESMAN.DICT:' # "" BY ':SALE.MONTH.DICT:' BY ':SALESMAN.DICT:' ID-SUPP ':SALE.MONTH.DICT:' PIPE ':SALESMAN.DICT:' PIPE ':SALE.AMOUNT.DICT:' PIPE ':COST.OF.SALE.AMOUNT.DICT   STACKED.2:=' PIPE ':BRANCH.DICT:' PIPE ':REGION.DICT   STACKED.2:=' HDR-SUPP COL-HDR-SUPP NOPAGE'   CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)   IF SYSTEM.11 THEN      MAX.ROWS=DCOUNT(REPORT,CHAR(254))      STATS.IDS=''      STATS.AMTS=''      STATS.COS.AMTS=''      STATS.IDS.CNTR=0      FOR ROW.NO = 1 TO MAX.ROWS         ROW=REPORT<ROW.NO>         IF INDEX(ROW,'|',1) THEN            MONTH=TRIM(FIELD(ROW,'|',1))+0            IF MONTH < 10 THEN               YYYYMM=YEAR:'0':MONTH             END ELSE YYYYMM=YEAR:MONTH            REP=TRIM(FIELD(ROW,'|',2))            AMOUNT=TRIM(FIELD(ROW,'|',3))            CONVERT '$,' TO '' IN AMOUNT            AMOUNT=ICONV(AMOUNT,'MD2')            IF NOT(NUM(AMOUNT)) THEN AMOUNT=0            COST.OF.SALE.AMOUNT=TRIM(FIELD(ROW,'|',4))            CONVERT '$,' TO '' IN COST.OF.SALE.AMOUNT            COST.OF.SALE.AMOUNT=ICONV(COST.OF.SALE.AMOUNT,'MD2')            IF NOT(NUM(COST.OF.SALE.AMOUNT)) THEN COST.OF.SALE.AMOUNT=0            IF AMOUNT OR COST.OF.SALE.AMOUNT THEN               BRANCH=TRIM(FIELD(ROW,'|',5))               REGION=TRIM(FIELD(ROW,'|',6))               STATS.ID=REP:'*':YYYYMM:'*':BRANCH:'*':REGION               LOCATE STATS.ID IN STATS.IDS SETTING STATS.PNTR ELSE                  STATS.IDS.CNTR+=1                  STATS.PNTR=STATS.IDS.CNTR                  STATS.IDS<STATS.PNTR>=STATS.ID                END               STATS.AMTS<STATS.PNTR>+=AMOUNT               STATS.COS.AMTS<STATS.PNTR>+=COST.OF.SALE.AMOUNT             END          END       NEXT ROW.NO      MAX.STATS.IDS=DCOUNT(STATS.IDS,CHAR(254))      FOR ID.CNTR = 1 TO MAX.STATS.IDS         AMOUNT=STATS.AMTS<ID.CNTR>         COST.OF.SALE.AMOUNT=STATS.COS.AMTS<ID.CNTR>         IF AMOUNT > 0 OR COST.OF.SALE.AMOUNT THEN            WRITE AMOUNT:CHAR(254):COST.OF.SALE.AMOUNT ON FI.CLOSING.STATS, STATS.IDS<ID.CNTR>          END       NEXT ID.CNTR    END NEXT YEARTIME.STAMP=TIME()TIME.STAMP=FIELD(TIME.STAMP,'.',1)TIME.STAMP=STR('0',5-LEN(TIME.STAMP)):TIME.STAMPWRITE DATE():TIME.STAMP ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'WRITE DATE():TIME.STAMP ON FI.DICT.CLOSING.STATS, '*LAST.UPDATED'END0051AFREFRESH.DASHBOARD.MTD.STATS0c2** PHANTOM PROGRAM TO CALCULATE MTD SALES, AR, AP, AND NET INCOME NUMBERS*OPEN.ERRORS=''OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE OPEN.ERRORS:=' MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'DIM SETUP.PARAMS(25)IF PLATFORM = 'D3' THEN CMND=SENTENCE() ELSE CMND=@SENTENCECMND=TRIM(CMND)OPTION.PARAM=FIELD(CMND,' ',DCOUNT(CMND,' '))IF OPTION.PARAM = 'SALES' OR OPTION.PARAM = 'ALL' THEN   OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.CLOSING.STATS ELSE OPEN.ERRORS:=' DICT DASHBOARD.CLOSING.STATS' ENDIF OPTION.PARAM <> 'SALES' THEN   OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.BALANCES ELSE OPEN.ERRORS:=' DICT DASHBOARD.BALANCES' ENDEXECUTE "TERM 132,20000"*BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='MD'END CASEOPEN '',MD.FILE.NAME TO FI.MD ELSE   OPEN.ERRORS:=' ':MD.FILE.NAME ENDIF OPEN.ERRORS <> '' THEN STOP*DAYS.AGO.60=DATE()-60DAYS.AGO.1000=DATE()-1000ALL.GOOD=1BEGIN CASE   CASE OPTION.PARAM = 'SALES'; GOSUB CALC.SALES   CASE OPTION.PARAM = 'AR'; GOSUB CALC.AR   CASE OPTION.PARAM = 'AP'; GOSUB CALC.AP   CASE OPTION.PARAM = 'NET.INCOME'; GOSUB CALC.NET.INCOME   CASE OPTION.PARAM = 'ALL'      GOSUB CALC.SALES      GOSUB CALC.AR      GOSUB CALC.AP      GOSUB CALC.NET.INCOME      IF ALL.GOOD THEN         DICT.FILE=FI.DICT.BALANCES         TIME.STAMP.TYPE='ALL'         GOSUB UPDATE.TIME.STAMP       END   CASE 1; NULLEND CASESTOP*CALC.SALES:*DICT.FILE=FI.DICT.CLOSING.STATSMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' ENDEQUATE ACCOUNT TO SETUP.PARAMS(1)EQUATE REPORT.FILE TO SETUP.PARAMS(2)EQUATE SALE.DATE.DICT TO SETUP.PARAMS(3)EQUATE SALE.MONTH.DICT TO SETUP.PARAMS(4)EQUATE SALE.YEAR.DICT TO SETUP.PARAMS(5)EQUATE SALE.AMOUNT.DICT TO SETUP.PARAMS(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO SETUP.PARAMS(7)EQUATE SALESMAN.DICT TO SETUP.PARAMS(8)EQUATE BRANCH.DICT TO SETUP.PARAMS(9)EQUATE REGION.DICT TO SETUP.PARAMS(10)EQUATE SALE.DATE.AMC TO SETUP.PARAMS(11)EQUATE SALE.AMOUNT.AMC TO SETUP.PARAMS(12)EQUATE SALE.AMOUNT.CONV TO SETUP.PARAMS(13)EQUATE SALE.AMOUNT.COOR TO SETUP.PARAMS(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO SETUP.PARAMS(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO SETUP.PARAMS(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO SETUP.PARAMS(17)EQUATE SALESMAN.AMC TO SETUP.PARAMS(18)EQUATE SALESMAN.TFILE TO SETUP.PARAMS(19)EQUATE BRANCH.AMC TO SETUP.PARAMS(20)EQUATE BRANCH.TFILE TO SETUP.PARAMS(21)EQUATE REGION.AMC TO SETUP.PARAMS(22)EQUATE REGION.TFILE TO SETUP.PARAMS(23)OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'SALES.FILE.PATH='SALES.FILE.PATH'**IF PLATFORM = 'UD' THEN**   QFILE.NAME=SALES.FILE.PATH**   CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.QFILE)** END ELSE**   MD.QFILE='Q'**   MD.QFILE<2>=ACCOUNT**   MD.QFILE<3>=REPORT.FILE**   WRITE MD.QFILE ON FI.MD, 'SALES.FILE.PATH'** ENDQFILE.NAME=SALES.FILE.PATHCALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.QFILE)TIME.STAMP.TYPE='SALES'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':SALE.DATE.DICT:' ':SALE.DATE.DICT:' PIPE ':SALE.AMOUNT.DICT:' PIPE ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)WRITE STACKED.2 ON FI.MVDB.CONTROL, 'SALES.REPORT.CMND'WRITE REPORT ON FI.MVDB.CONTROL, 'SALES.REPORT.RESULT'IF NOT(SYSTEM.11) THEN   WRITE 'ERROR: NO SALES CLOSED SINCE BEGINNING OF MONTH' ON FI.DICT.CLOSING.STATS, '*CURRENT.SALES.STATS'   GOSUB UPDATE.TIME.STAMP   SALES.STATS=''**   RETURN** END END ELSE   DATES=''   DATE.CNTR=0   LAST.DATE=''   AMOUNTS=''   COSTS=''   MAX.ROWS=DCOUNT(REPORT,CHAR(254))   FOR ROW.NO = 1 TO MAX.ROWS      ROW=REPORT<ROW.NO>      IF INDEX(ROW,'|',1) THEN         ROW.DATE=TRIM(FIELD(ROW,'|',1))         AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')         COST=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')         IF NUM(AMOUNT) THEN            IF ROW.DATE <> LAST.DATE THEN               LAST.DATE=ROW.DATE               DATE.CNTR+=1               DATES<1,DATE.CNTR>=ROW.DATE               AMOUNTS<1,DATE.CNTR>=0               COSTS<1,DATE.CNTR>=0             END            AMOUNTS<1,DATE.CNTR>+=AMOUNT            COSTS<1,DATE.CNTR>+=COST          END       END    NEXT ROW.NO   VALUE.CNTR=0   SALES.STATS=''   FOR AMT.CNTR = 1 TO DATE.CNTR      COST=COSTS<1,AMT.CNTR>      AMOUNT=AMOUNTS<1,AMT.CNTR>      IF AMOUNT OR COST THEN         VALUE.CNTR+=1         ROW.DATE=ICONV(DATES<1,AMT.CNTR>,'D')         ROW.DATE=OCONV(ROW.DATE,'D0')         SALES.STATS<1,VALUE.CNTR>=ROW.DATE         SALES.STATS<2,VALUE.CNTR>=AMOUNT         SALES.STATS<3,VALUE.CNTR>=COST       END    NEXT AMT.CNTR ENDWRITE SALES.STATS ON DICT.FILE, '*CURRENT.SALES.STATS'*EXECUTE "REFRESH.DASHBOARD.CLOSING.STATS" CAPTURING DUMMY*GOSUB UPDATE.TIME.STAMPRETURN*CALC.AR:** PERIOD.AMOUNTS DATA LAYOUT* 1 PERIOD 1 AMOUNT* 2 PERIOS 2 AMOUNT* 3 PERIOD 3 AMOUNT* 4 PERIOD 4 AMOUNT* 5* 6 YEAR ] YEAR ] YEAR* 7 PERIOD 1 NUMBER \ PERIOD 2 NUMBER \ PERIOD 3 NUMBER \ PERIOD 4 NUMBER * 8 PERIOD 1 AMOUNT \ PERIOD 2 AMOUNT \ PERIOD 3 AMOUNT \ PERIOD 4 AMOUNT * 9 PERIOD 1 TOTAL DAYS ? PERIOD 2 TOTAL DAYS ? ETC* 10 YEAR 1 JAN # PAID\ FEB # PAID ... ] YEAR 2 JAN # PAID \* 11 YEAR 1 JAN # TOTAL DAYS \ FEB TOTAL DAYS ....* 12 CUSTOMER ] CUSTOMER ]* 13 CUSTOMER AMT DUE ] ] ]* 14 LARGEST DAYS DUE ] ] ]* 15 TOTAL DAYS LAST 1000 DAYS ] ] ]* 16 NUMBER OF ARS LAST 1000 DAYS ] ] ]* 17 TOTAL DAYS LAST 60 DAYS ] ] ]* 18 NUMBER OF ARS LAST 60 DAYS ] ] ]* 19 customers  ] ] ] for 50 highest amounts due* 20 amounts ] ] ] for 50 highest amounts due* 21 customers ] ] ] for 50 highest days due* 22 days due ] ] ] for 50 highest days due* 23 customer ] ] ] ] ] for 50 highest percent increase* 24 percentage increase from 1000 day average to 60 day average for highest 50**DICT.FILE=FI.DICT.BALANCESMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' END*EQUATE AR.ACCOUNT TO SETUP.PARAMS(1)EQUATE AR.REPORT.FILE TO SETUP.PARAMS(2)EQUATE AR.DUE.DATE.DICT TO SETUP.PARAMS(3)EQUATE AR.DATE.PAID.DICT TO SETUP.PARAMS(4)EQUATE AR.INVOICE.AMT.DICT TO SETUP.PARAMS(5)EQUATE AR.BALANCE.DICT TO SETUP.PARAMS(6)EQUATE AR.DUE.DATE.AMC TO SETUP.PARAMS(8)EQUATE AR.DATE.PAID.AMC TO SETUP.PARAMS(9)EQUATE AR.INVOICE.AMT.AMC TO SETUP.PARAMS(10)EQUATE AR.INVOICE.AMT.CONV TO SETUP.PARAMS(11)EQUATE AR.INVOICE.AMT.COOR TO SETUP.PARAMS(12)EQUATE AR.BALANCE.AMC TO SETUP.PARAMS(13)EQUATE AR.BALANCE.CONV TO SETUP.PARAMS(14)EQUATE AR.BALANCE.COOR TO SETUP.PARAMS(15)EQUATE AR.CUSTOMER.DICT TO SETUP.PARAMS(16)EQUATE AR.CUSTOMER.AMC TO SETUP.PARAMS(17)EQUATE AR.CUSTOMER.TFILE TO SETUP.PARAMS(18)*AR.FILE.PATH='AR.FILE.PATH'QFILE.NAME=AR.FILE.PATH**OPEN '',AR.FILE.PATH TO FI.AR.FILE.PATH ELSE**IF PLATFORM = 'UD' THEN**   QFILE.NAME=AR.FILE.PATH**   CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.AR.FILE.PATH)**   IF QFILE.NAME = '' THEN**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** END ELSE**   MD.QFILE='Q'**   MD.QFILE<2>=ACCOUNT**   MD.QFILE<3>=REPORT.FILE**   WRITE MD.QFILE ON FI.MD, 'AR.FILE.PATH'**   OPEN '','AR.FILE.PATH' TO FI.AR.FILE.PATH ELSE**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** ENDCALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)IF QFILE.NAME = '' THEN   WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'   GOSUB UPDATE.TIME.STAMP   ALL.GOOD=0   RETURN ENDEXECUTE "CREATE-INDEX AR.FILE.PATH ":AR.DUE.DATE.DICT CAPTURING DUMMY** END***EXECUTE 'SELECT ':AR.FILE.PATH:' WITH ':AR.BALANCE.DICT:' > "0"' CAPTURING DUMMY**IF NOT(SYSTEM(11)) THEN**   WRITE 'ERROR: NO OUTSTANDING RECEIVABLES' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'**   GOSUB UPDATE.TIME.STAMP**   ALL.GOOD=0**   RETURN** END**CMND='SORT ':AR.FILE.PATH:' BY ':AR.DUE.DATE.DICT:' BREAK-ON ':AR.DUE.DATE.DICT:' PIPE TOTAL ':AR.BALANCE.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CMND='SORT ':AR.FILE.PATH:' WITH ':AR.INVOICE.AMT.DICT:' > "0" BY ':AR.DUE.DATE.DICTCMND:=' PIPE ':AR.DUE.DATE.DICT:' PIPE ':AR.DATE.PAID.DICT:' PIPE ':AR.INVOICE.AMT.DICTCMND:=' PIPE ':AR.BALANCE.DICT:' PIPE ':AR.CUSTOMER.DICT:' HDR-SUPP COL-HDR-SUPP NOPAGE'WRITE CMND ON FI.MVDB.CONTROL, 'AR.REPORT.CMND'EXECUTE CMND CAPTURING REPORTCONVERT '$,' TO '' IN REPORTWRITE REPORT ON FI.MVDB.CONTROL, 'AR.REPORT'* SETUP AGING PERIODS OF 0, 1-30, 31-60, 61-90, AND 90+PERIODS=0:@AM:1:@AM:31:@AM:61:@AM:91PERIOD.AMOUNTS=''CUSTOMERS=''NUM.CUSTS=0CUST.AMT.DUES=''CUST.MOST.DAYS.DUE=''CUST.TOTAL.1000.DAYS=''CUST.NUM.1000.DAYS=''CUST.TOTAL.60.DAYS=''CUST.NUM.60.DAYS=''DATES=''DATE.CNTR=0LAST.DATE=''AMOUNTS=''ROW.NO=0* BUILD LAST 5 YEARSFIVE.YEARS=''FIRST.YEAR=(OCONV(DATE(),'D4-')[7,4])-4FOR YEAR.CNTR = 0 TO 4   FIVE.YEARS<1,-1>=FIRST.YEAR+YEAR.CNTR NEXT YEAR.CNTRPERIOD.AMOUNTS<6>=FIVE.YEARSMAX.ROWS=DCOUNT(REPORT,@AM)LOOP   ROW.NO+=1   ROW=REPORT<ROW.NO>UNTIL ROW.NO > MAX.ROWS DO   IF INDEX(ROW,'|',1) THEN      ROW.DATE=TRIM(FIELD(ROW,'|',2))      DUE.DATE=ICONV(ROW.DATE,'D')      IF DUE.DATE = ROW.DATE OR NOT(NUM(DUE.DATE)) THEN DUE.DATE=''      IF DUE.DATE THEN         DUE.YEAR=OCONV(DUE.DATE,'D4-')[7,4]         LOCATE DUE.YEAR IN FIVE.YEARS<1> SETTING YEAR.POS ELSE YEAR.POS=0         PAID.DATE=TRIM(FIELD(ROW,'|',3))         NEXT.ROW.NO=ROW.NO+1         LOOP            NEXT.ROW=TRIM(REPORT<NEXT.ROW.NO>)         UNTIL INDEX(NEXT.ROW,'|',1) OR NEXT.ROW = '' DO            NEXT.PAID.DATE=NEXT.ROW            IF NEXT.PAID.DATE <> '' THEN PAID.DATE=NEXT.PAID.DATE            NEXT.ROW.NO+=1         REPEAT         ROW.NO=NEXT.ROW.NO-1         IF PAID.DATE <> '' THEN            PAID.DATE=ICONV(PAID.DATE,'D')            PAID.MO=OCONV(PAID.DATE,'D2-')[1,2]            PAID.MO+=0            PAID.YEAR=OCONV(PAID.DATE,'D4-')[7,4]            LOCATE PAID.YEAR IN FIVE.YEARS<1> SETTING PAID.YEAR.POS ELSE PAID.YEAR.POS=0            PAID.DAYS=PAID.DATE-DUE.DATE          END ELSE            PAID.MO=''            PAID.YEAR=''            PAID.DAYS=''            PAID.YEAR.POS=''          END         INV.AMOUNT=ICONV(TRIM(FIELD(ROW,'|',4)),'MD2')         REM.BALANCE=ICONV(TRIM(FIELD(ROW,'|',5)),'MD2')         CUSTOMER=TRIM(FIELD(ROW,'|',6))         CUSTOMER.POS=0         IF NUM(INV.AMOUNT) AND NUM(REM.BALANCE) THEN            IF CUSTOMER <> '' THEN               IF REM.BALANCE OR PAID.DATE >= DAYS.AGO.1000 THEN                  LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUSTOMER.POS ELSE                     NUM.CUSTS+=1                     CUSTOMER.POS=NUM.CUSTS                     CUSTOMERS<1,CUSTOMER.POS>=CUSTOMER                   END                END             END            IF REM.BALANCE OR NOT(PAID.DATE) THEN               DAYS.DUE=DATE()-DUE.DATE             END ELSE               DAYS.DUE=PAID.DATE-DUE.DATE             END            IF DAYS.DUE < 0 THEN DAYS.DUE=0            LOCATE DAYS.DUE IN PERIODS BY "AR" SETTING PERIOD ELSE PERIOD=PERIOD-1            IF REM.BALANCE THEN               PERIOD.AMOUNTS<PERIOD>+=REM.BALANCE               IF CUSTOMER.POS AND DAYS.DUE THEN                  CUST.AMT.DUES<1,CUSTOMER.POS>=CUST.AMT.DUES<1,CUSTOMER.POS>+REM.BALANCE                  IF DAYS.DUE > CUST.MOST.DAYS.DUE<1,CUSTOMER.POS> THEN                     CUST.MOST.DAYS.DUE<1,CUSTOMER.POS>=DAYS.DUE                   END                END             END            IF DAYS.DUE AND CUSTOMER.POS THEN               IF PAID.DATE THEN                  PAID.OR.TODAY=PAID.DATE                END ELSE                  PAID.OR.TODAY=DATE()                END               IF PAID.OR.TODAY >= DAYS.AGO.1000 THEN; * PAID IN LAST 1000 DAYS                  CUST.TOTAL.1000.DAYS<1,CUSTOMER.POS>=CUST.TOTAL.1000.DAYS<1,CUSTOMER.POS>+DAYS.DUE                  CUST.NUM.1000.DAYS<1,CUSTOMER.POS>=CUST.NUM.1000.DAYS<1,CUSTOMER.POS>+1                  IF PAID.OR.TODAY >= DAYS.AGO.60 THEN; * PAID IN LAST 60 DAYS                     CUST.TOTAL.60.DAYS<1,CUSTOMER.POS>=CUST.TOTAL.60.DAYS<1,CUSTOMER.POS>+DAYS.DUE                     CUST.NUM.60.DAYS<1,CUSTOMER.POS>=CUST.NUM.60.DAYS<1,CUSTOMER.POS>+1                   END                END             END            IF PAID.YEAR.POS THEN               IF YEAR.POS AND PERIOD THEN                  PERIOD.AMOUNTS<7,YEAR.POS,PERIOD>=PERIOD.AMOUNTS<7,YEAR.POS,PERIOD>+1                  PERIOD.AMOUNTS<8,YEAR.POS,PERIOD>=PERIOD.AMOUNTS<8,YEAR.POS,PERIOD>+INV.AMOUNT                  PERIOD.AMOUNTS<9,YEAR.POS>=PERIOD.AMOUNTS<9,YEAR.POS>+DAYS.DUE                END               PERIOD.AMOUNTS<10,PAID.YEAR.POS,PAID.MO>=PERIOD.AMOUNTS<10,PAID.YEAR.POS,PAID.MO>+1               PERIOD.AMOUNTS<11,PAID.YEAR.POS,PAID.MO>=PERIOD.AMOUNTS<11,PAID.YEAR.POS,PAID.MO>+PAID.DAYS             END          END       END    ENDREPEATPERIOD.AMOUNTS<12>=CUSTOMERSPERIOD.AMOUNTS<13>=CUST.AMT.DUESPERIOD.AMOUNTS<14>=CUST.MOST.DAYS.DUEPERIOD.AMOUNTS<15>=CUST.TOTAL.1000.DAYSPERIOD.AMOUNTS<16>=CUST.NUM.1000.DAYSPERIOD.AMOUNTS<17>=CUST.TOTAL.60.DAYSPERIOD.AMOUNTS<18>=CUST.NUM.60.DAYS*** GET THE 50 HIGHEST AMOUNTS DUE*HIGHEST.AMTS=''HIGHEST.AMTS.CUSTS=''MAX.CUSTS=DCOUNT(CUSTOMERS,@VM)FOR I = 1 TO MAX.CUSTS   MAX.AMT=CUST.AMT.DUES<1,I>   IF MAX.AMT THEN      LOCATE MAX.AMT IN HIGHEST.AMTS<1> BY "DR" SETTING POS ELSE NULL      IF POS <= 50 THEN         HIGHEST.AMTS=INSERT(HIGHEST.AMTS,1,POS,0,MAX.AMT)         HIGHEST.AMTS.CUSTS=INSERT(HIGHEST.AMTS.CUSTS,1,POS,0,CUSTOMERS<1,I>)       END    END NEXT IPERIOD.AMOUNTS<19>=HIGHEST.AMTS.CUSTSPERIOD.AMOUNTS<20>=HIGHEST.AMTS*** GET THE 50 HIGHEST DUE DAYS*HIGHEST.DAYS=''HIGHEST.DAYS.CUSTS=''FOR I = 1 TO MAX.CUSTS   CUST.DAYS.DUE=CUST.MOST.DAYS.DUE<1,I>   IF CUST.DAYS.DUE THEN      LOCATE CUST.DAYS.DUE IN HIGHEST.DAYS<1> BY "DR" SETTING POS ELSE NULL      IF POS <= 50 THEN         HIGHEST.DAYS=INSERT(HIGHEST.DAYS,1,POS,0,CUST.DAYS.DUE)         HIGHEST.DAYS.CUSTS=INSERT(HIGHEST.DAYS.CUSTS,1,POS,0,CUSTOMERS<1,I>)       END    END NEXT IPERIOD.AMOUNTS<21>=HIGHEST.DAYS.CUSTSPERIOD.AMOUNTS<22>=HIGHEST.DAYS*** GET THE 50 CUSTOMERS WITH HIGHEST PERCENTAGE INCREASES*HIGHEST.INCREASE.PCTS=''HIGHEST.INCREASE.CUSTS=''HIGHEST.INCREASE.60.DAYS=''HIGHEST.INCREASE.1000.DAYS=''FOR I = 1 TO MAX.CUSTS   DAYS.1000=CUST.TOTAL.1000.DAYS<1,I>   NUM.1000=CUST.NUM.1000.DAYS<1,I>   DAYS.60=CUST.TOTAL.60.DAYS<1,I>   NUM.60=CUST.NUM.60.DAYS<1,I>   IF NUM.1000 THEN      AVG.1000=DAYS.1000 / NUM.1000    END ELSE AVG.1000=0   IF NUM.60 THEN      AVG.60=DAYS.60 / NUM.60    END ELSE AVG.60=0   AVG.INCREASE=AVG.60 - AVG.1000   IF AVG.INCREASE > 0 AND AVG.60 > 300 THEN;  * MUST BE DUE OVER 30 DAYS      IF AVG.1000 THEN         PCT.INCREASE=INT(AVG.INCREASE * 1000 / AVG.1000 + .5)         PCT.INCREASE=OCONV(PCT.INCREASE,'MD1')       END ELSE PCT.INCREASE=0      LOCATE PCT.INCREASE IN HIGHEST.INCREASE.PCTS<1> BY "DR" SETTING POS ELSE NULL      IF POS <= 50 THEN         HIGHEST.INCREASE.PCTS=INSERT(HIGHEST.INCREASE.PCTS,1,POS,0,PCT.INCREASE)         HIGHEST.INCREASE.CUSTS=INSERT(HIGHEST.INCREASE.CUSTS,1,POS,0,CUSTOMERS<1,I>)         HIGHEST.INCREASE.1000.DAYS=INSERT(HIGHEST.INCREASE.1000.DAYS,1,POS,0,OCONV(AVG.1000,'MD1'))         HIGHEST.INCREASE.60.DAYS=INSERT(HIGHEST.INCREASE.60.DAYS,1,POS,0,OCONV(AVG.60,'MD1'))       END    END NEXT IPERIOD.AMOUNTS<23>=HIGHEST.INCREASE.CUSTSPERIOD.AMOUNTS<24>=HIGHEST.INCREASE.PCTSPERIOD.AMOUNTS<25>=HIGHEST.INCREASE.60.DAYSPERIOD.AMOUNTS<26>=HIGHEST.INCREASE.1000.DAYS*TIME.STAMP.TYPE='AR'DICT.FILE=FI.DICT.BALANCESGOSUB UPDATE.TIME.STAMPWRITE PERIOD.AMOUNTS ON DICT.FILE, '*CURRENT.AR.STATS'RETURN*CALC.AP:*DICT.FILE=FI.DICT.BALANCESMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' END*EQUATE AP.ACCOUNT TO SETUP.PARAMS(1)EQUATE AP.REPORT.FILE TO SETUP.PARAMS(2)EQUATE AP.DUE.DATE.DICT TO SETUP.PARAMS(3)EQUATE AP.DATE.PAID.DICT TO SETUP.PARAMS(4)EQUATE AP.INVOICE.AMT.DICT TO SETUP.PARAMS(5)EQUATE AP.BALANCE.DICT TO SETUP.PARAMS(6)EQUATE AP.DUE.DATE.AMC TO SETUP.PARAMS(8)EQUATE AP.DATE.PAID.AMC TO SETUP.PARAMS(9)EQUATE AP.INVOICE.AMT.AMC TO SETUP.PARAMS(10)EQUATE AP.INVOICE.AMT.CONV TO SETUP.PARAMS(11)EQUATE AP.INVOICE.AMT.COOR TO SETUP.PARAMS(12)EQUATE AP.BALANCE.AMC TO SETUP.PARAMS(13)EQUATE AP.BALANCE.CONV TO SETUP.PARAMS(14)EQUATE AP.BALANCE.COOR TO SETUP.PARAMS(15)*AP.FILE.PATH='AP.FILE.PATH'QFILE.NAME=AP.FILE.PATH**OPEN '',AP.FILE.PATH TO FI.AP.FILE.PATH ELSE**IF PLATFORM = 'UD' THEN**   QFILE.NAME=AP.FILE.PATH**   CALL CREATE.UD.QPOINTER(ACCOUNT,AP.REPORT.FILE,QFILE.NAME,FI.AP.FILE.PATH)**   IF QFILE.NAME = '' THEN**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** END ELSE**   MD.QFILE='Q'**   MD.QFILE<2>=AP.ACCOUNT**   MD.QFILE<3>=AP.REPORT.FILE**   WRITE MD.QFILE ON FI.MD, 'AP.FILE.PATH'**   OPEN '','AP.FILE.PATH' TO FI.AP.FILE.PATH ELSE**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** ENDCALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)IF QFILE.NAME = '' THEN   WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'   GOSUB UPDATE.TIME.STAMP   ALL.GOOD=0   RETURN ENDEXECUTE "CREATE-INDEX AP.FILE.PATH ":AP.DUE.DATE.DICT CAPTURING DUMMY** END*STACKED.1='SELECT ':AP.FILE.PATH:' WITH ':AP.BALANCE.DICT:' > "0"'STACKED.2='SORT ':AP.FILE.PATH:' BY ':AP.DUE.DATE.DICT:' BREAK-ON ':AP.DUE.DATE.DICT:' PIPE TOTAL ':AP.BALANCE.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)WRITE STACKED.2 ON FI.MVDB.CONTROL, 'AP.CMND'WRITE REPORT ON FI.MVDB.CONTROL, 'AP.REPORT'IF NOT(SYSTEM.11) THEN   WRITE 'ERROR: NO OUTSTANDING PAYABLES' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'   GOSUB UPDATE.TIME.STAMP**   ALL.GOOD=0**   RETURN** END   PERIOD.AMOUNTS='' END ELSE   * SETUP AGING PERIODS OF 0, 1-30, 31-60, 61-90, AND 90+   PERIODS=0:@AM:1:@AM:31:@AM:61:@AM:91   PERIOD.AMOUNTS=''   DATES=''   DATE.CNTR=0   LAST.DATE=''   AMOUNTS=''   MAX.ROWS=DCOUNT(REPORT,CHAR(254))   FOR ROW.NO = 1 TO MAX.ROWS      ROW=REPORT<ROW.NO>      IF INDEX(ROW,'|',1) THEN         ROW.DATE=TRIM(FIELD(ROW,'|',1))         DUE.DATE=ICONV(ROW.DATE,'D')         IF DUE.DATE = ROW.DATE OR NOT(NUM(DUE.DATE)) THEN DUE.DATE=''         IF DUE.DATE THEN            AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')            IF NUM(AMOUNT) THEN               DAYS.DUE=DATE()-DUE.DATE               IF DAYS.DUE < 0 THEN DAYS.DUE=0               LOCATE DAYS.DUE IN PERIODS BY "AR" SETTING PERIOD ELSE PERIOD=PERIOD-1               PERIOD.AMOUNTS<PERIOD>+=AMOUNT             END          END       END    NEXT ROW.NO END*TIME.STAMP.TYPE='AP'DICT.FILE=FI.DICT.BALANCESGOSUB UPDATE.TIME.STAMPWRITE PERIOD.AMOUNTS ON DICT.FILE, '*CURRENT.AP.STATS'*CALC.NET.INCOME:*TIME.STAMP.TYPE='NET.INCOME'DICT.FILE=FI.DICT.BALANCESGOSUB UPDATE.TIME.STAMPWRITE 999 ON DICT.FILE, '*CURRENT.NET.INCOME.STATS'RETURN*UPDATE.TIME.STAMP:*TIME.STAMP=TIME()TIME.STAMP=STR('0',5-LEN(TIME.STAMP)):TIME.STAMPWRITE DATE():TIME.STAMP ON DICT.FILE, '*LAST.UPDATE.':TIME.STAMP.TYPEWRITE DATE():TIME.STAMP ON DICT.FILE, '*LAST.UPDATED.':TIME.STAMP.TYPERETURNEND002FEFSUB.PORTAL.AP.REPORT.SETUP0c2SUBROUTINE SUB.PORTAL.AP.REPORT.SETUP** DEFINE PARAMETERS FOR PORTAL AP REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOP*W$TITLE = "Portal AP Report Setup"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*EQUATE ACCOUNT TO WIDGET.USER.DATA(1)EQUATE REPORT.FILE TO WIDGET.USER.DATA(2)EQUATE DUE.DATE.DICT TO WIDGET.USER.DATA(3)EQUATE DATE.PAID.DICT TO WIDGET.USER.DATA(4)EQUATE INVOICE.AMT.DICT TO WIDGET.USER.DATA(5)EQUATE BALANCE.DICT TO WIDGET.USER.DATA(6)EQUATE DUE.DATE.AMC TO WIDGET.USER.DATA(8)EQUATE DATE.PAID.AMC TO WIDGET.USER.DATA(9)EQUATE INVOICE.AMT.AMC TO WIDGET.USER.DATA(10)EQUATE INVOICE.AMT.CONV TO WIDGET.USER.DATA(11)EQUATE INVOICE.AMT.COOR TO WIDGET.USER.DATA(12)EQUATE BALANCE.AMC TO WIDGET.USER.DATA(13)EQUATE BALANCE.CONV TO WIDGET.USER.DATA(14)EQUATE BALANCE.COOR TO WIDGET.USER.DATA(15)OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE   MESSAGE='No Platform Type Defined'   GOTO MESSAGE.DISPLAY ENDFIRST.TIME=0IF G$SUBMITTED <> '1' THEN   MATREAD WIDGET.USER.DATA FROM FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ELSE      MAT WIDGET.USER.DATA = ''      FIRST.TIME=1    END   IF NOT(FIRST.TIME) THEN      GOSUB VALIDATE.PREVIOUS.INPUTS    END END ELSE   GOSUB VALIDATE.PREVIOUS.INPUTS   MATWRITE WIDGET.USER.DATA ON FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ENDGOSUB SET.PROMPTSRETURN*SET.PROMPTS:*W$INPUT.PROMPT<1> = "AP File Account"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = ACCOUNT*W$INPUT.PROMPT<2> = "Name Of AP File"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = REPORT.FILE*W$INPUT.PROMPT<3> = "Due Date Dict Name"W$INPUT.TYPE<3> = 'TEXT'W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = DUE.DATE.DICT*W$INPUT.PROMPT<4> = "Date Paid Dict Name"W$INPUT.TYPE<4> = 'TEXT'W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = DATE.PAID.DICT*W$INPUT.PROMPT<5> = "Invoice Amount Dict Name"W$INPUT.TYPE<5> = 'TEXT'W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = INVOICE.AMT.DICT*W$INPUT.PROMPT<6> = "Remaining Balance Dict Name"W$INPUT.TYPE<6> = 'TEXT'W$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = BALANCE.DICT*RETURN*VALIDATE.PREVIOUS.INPUTS:*MESSAGE=''BEGIN CASE   CASE PLATFORM = 'D3'      MD.TYPE='MD'   CASE PLATFORM = 'JB'      MD.TYPE='MD'   CASE 1      MD.TYPE='VOC'END CASEOPEN '',MD.TYPE TO FI.MD ELSE   MESSAGE='Unable to open ':MD.TYPE:' for validation purposes'   GOTO MESSAGE.DISPLAY ENDVALID.ACCOUNT=1IF ACCOUNT <> '' THEN   QFILE.NAME='QFILE'   CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)   IF QFILE.NAME = '' THEN      MESSAGE<-1>=ACCOUNT:' is not a valid account!'      VALID.ACCOUNT=0    END**   IF PLATFORM = 'UD' THEN**      QFILE.NAME='QFILE'**      CALL CREATE.UD.QPOINTER(ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)**      IF QFILE.NAME = '' THEN**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END ELSE**      WRITE 'Q':@AM:ACCOUNT:@AM:MD.TYPE ON FI.MD, 'QFILE'**      OPEN '','QFILE' TO FI.ACCOUNT.MD ELSE**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END END ELSE   VALID.ACCOUNT=0   MESSAGE<-1>='No Account defined!' ENDIF REPORT.FILE <> '' THEN   IF NOT(VALID.ACCOUNT) THEN      MESSAGE<-1>='Unable to verify ':REPORT.FILE:' file because account not properly defined!'      VALID.REPORT.FILE=0    END ELSE      VALID.REPORT.FILE=1      CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)      IF QFILE.NAME = '' THEN         MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'         VALID.REPORT.FILE=0       END**      IF PLATFORM = 'UD' THEN**         QFILE.NAME='QFILE'**         CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)**         IF QFILE.NAME = '' THEN**            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**            VALID.REPORT.FILE=0**          END**       END ELSE**         WRITE 'Q':@AM:ACCOUNT:@AM:REPORT.FILE ON FI.MD, 'QFILE'**         OPEN '','QFILE' TO FI.REPORT.FILE ELSE**            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**            VALID.REPORT.FILE=0**          END**       END      IF VALID.REPORT.FILE THEN         HAVE.QFILE.REC=1         READ QFILE.REC FROM FI.MD, 'QFILE' ELSE            HAVE.QFILE.REC=0            MESSAGE<-1>='Unable to create QFILE pointer to ':ACCOUNT:' ':REPORT.FILE          END         IF HAVE.QFILE.REC THEN            WRITE QFILE.REC ON FI.MD, 'DASHBOARD.AP.FILE'            OPEN 'DICT','DASHBOARD.AP.FILE' TO FI.DICT.REPORT.FILE ELSE                MESSAGE<-1>='Unable to open DICT ':REPORT.FILE             END          END       END    END END ELSE   MESSAGE<-1>='No AP Report file defined!' ENDIF DUE.DATE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Due Date Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DUE.DATE.DICT:' Because No AP File!'    END ELSE      READ DUE.DATE.DICT.REC FROM FI.DICT.REPORT.FILE, DUE.DATE.DICT ELSE         DUE.DATE.DICT.REC=''         MESSAGE<-1>=DUE.DATE.DICT:' Does Not Exist!'       END      IF DUE.DATE.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DUE.DATE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DUE.DATE.DICT.REC<7>[1,1] <> 'D' AND DUE.DATE.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DUE.DATE.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DUE.DATE.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF DATE.PAID.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Date Paid Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DATE.PAID.DICT:' Because No AP File!'    END ELSE      READ DATE.PAID.DICT.REC FROM FI.DICT.REPORT.FILE, DATE.PAID.DICT ELSE         DATE.PAID.DICT.REC=''         MESSAGE<-1>=DATE.PAID.DICT:' Does Not Exist!'       END      IF DATE.PAID.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DATE.PAID.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DATE.PAID.DICT.REC<7>[1,1] <> 'D' AND DATE.PAID.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DATE.PAID.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DATE.PAID.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF INVOICE.AMT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Invoice Amount Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":INVOICE.AMT.DICT:' Because No AP File!'    END ELSE      READ INVOICE.AMT.DICT.REC FROM FI.DICT.REPORT.FILE, INVOICE.AMT.DICT ELSE         INVOICE.AMT.DICT.REC=''         MESSAGE<-1>=INVOICE.AMT.DICT:' Does Not Exist!'       END      IF INVOICE.AMT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=INVOICE.AMT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=INVOICE.AMT.DICT.REC<7>[1,2]               DICT.8.1.2=INVOICE.AMT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=INVOICE.AMT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':INVOICE.AMT.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF BALANCE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Balance Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":BALANCE.DICT:' Because No AP File!'    END ELSE      READ BALANCE.DICT.REC FROM FI.DICT.REPORT.FILE, BALANCE.DICT ELSE         BALANCE.DICT.REC=''         MESSAGE<-1>=BALANCE.DICT:' Does Not Exist!'       END      IF BALANCE.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=BALANCE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=BALANCE.DICT.REC<7>[1,2]               DICT.8.1.2=BALANCE.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=BALANCE.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               BALANCE.AMC=BALANCE.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':BALANCE.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDCREATE.INDEXES=1IF MESSAGE = '' THEN   MESSAGE='AP Report parameters properly defined!' END ELSE   IF INDEX(MESSAGE,'!',1) THEN      MESSAGE=INSERT(MESSAGE,1,0,0,'!!! ERRORS !!!')      CREATE.INDEXES=0    END ENDIF CREATE.INDEXES THEN   * CREATE PIPE DICTIONARY ITEM   IF PLATFORM = 'D3' OR PLATFORM = 'QM' OR PLATFORM = 'JB' THEN      PIPE='A'      PIPE<2>=0      PIPE<3>=' '      PIPE<8>='F;C|'      PIPE<9>='L'      PIPE<10>=1    END ELSE      PIPE='I'      PIPE<2>='"|"'      PIPE<4>='|'      PIPE<5>='1L'      PIPE<6>='S'    END   WRITE PIPE ON FI.DICT.REPORT.FILE, 'PIPE'   *   ** INDEX LOGIC   *   BEGIN CASE      CASE PLATFORM = 'D3'         INDEX.TEST='A':DUE.DATE.AMC:'(DY):':DUE.DATE.AMC:'(DM)'         READ FILE.DEF.REC FROM FI.DICT.REPORT.FILE, REPORT.FILE ELSE FILE.DEF.REC=''         IF FILE.DEF.REC <> '' AND NOT(INDEX(FILE.DEF.REC<8>,INDEX.TEST,1)) THEN            MESSAGE<-1>='Creating Indexes'            CMND1="CREATE-INDEX DASHBOARD.AP.FILE A":DUE.DATE.AMC            EXECUTE CMND1 CAPTURING RESULT1            CMND2="CREATE-INDEX DASHBOARD.AP.FILE ":INDEX.TEST            EXECUTE CMND2 CAPTURING RESULT2          END      CASE 1         EXECUTE "CREATE-INDEX DASHBOARD.AP.FILE ":DUE.DATE.DICT CAPTURING RESULT1   END CASE ENDGOSUB MESSAGE.DISPLAYRETURN*MESSAGE.DISPLAY:*MAX.MSG=DCOUNT(MESSAGE,CHAR(254))W$HTML.DATA='<h3>':MESSAGE<1>IF MAX.MSG > 1 THEN   FOR MSG.NO = 2 TO MAX.MSG      W$HTML.DATA:='<br>':MESSAGE<MSG.NO>    NEXT MSG.NO ENDW$HTML.DATA:='</h3>'RETURNEND0005B8SUB.PORTAL.AP.REPORTS0c2SUBROUTINE SUB.PORTAL.AP.REPORTS**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = 'AP Reporting'W$TYPE = "FC2DPIE"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.DASHBOARD.BALANCES ELSE   W$TYPE='TEXT'   W$TEXT='UNABLE TO OPEN DICT DASHBOARD.BALANCES'   RETURN ENDREAD AP.AMOUNTS FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AP.STATS' ELSE AP.AMOUNTS=''BEGIN CASE   CASE 1      W$TITLE = "Chart - AP Balances by Days Due"; CALL PORTAL.SHOW.LAST.UPDATED('AP')      AMTS=AP.AMOUNTS      W$PIE.CAPTION='Total AP Balance of '**   CASE WIDGET.USER.DATA(1) = 'AR'**      W$TITLE = "Chart - AR Balances by Days Due"**      AMTS=AR.AMOUNTS**      W$PIE.CARTION='Total AR Balance of 'END CASE*TOT.AMT=SUM(AMTS)W$PIE.CAPTION:=OCONV(TOT.AMT,'MD02,$')*CATEGORIES='Current'CATEGORIES<2>='1 - 30 Days'CATEGORIES<3>='31 - 60 Days'CATEGORIES<4>='61 - 90 Days'CATEGORIES<5>='Over 90 Days'*CATEGORY.AMTS=AMTS**W$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='showPercentageValues="0"'W$CHART.OPTIONS<-1>='showPercentageInLabel="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="0"'W$CHART.OPTIONS<-1>='thousandSeparator=","'W$CHART.OPTIONS<-1>='pieradius="150"'FOR N = 1 TO 5  W$PIE.LABELS<1,N> = CATEGORIES<N>  W$PIE.VALUES<1,N> = INT(CATEGORY.AMTS<N>/100 + .5)NEXT N**RETURNEND0037E6SUB.PORTAL.AR.REPORT.SETUP0c2SUBROUTINE SUB.PORTAL.AR.REPORT.SETUP** DEFINE PARAMETERS FOR PORTAL AR REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOP*W$TITLE = "Portal AR Report Setup"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*EQUATE ACCOUNT TO WIDGET.USER.DATA(1)EQUATE REPORT.FILE TO WIDGET.USER.DATA(2)EQUATE DUE.DATE.DICT TO WIDGET.USER.DATA(3)EQUATE DATE.PAID.DICT TO WIDGET.USER.DATA(4)EQUATE INVOICE.AMT.DICT TO WIDGET.USER.DATA(5)EQUATE BALANCE.DICT TO WIDGET.USER.DATA(6)EQUATE DUE.DATE.AMC TO WIDGET.USER.DATA(8)EQUATE DATE.PAID.AMC TO WIDGET.USER.DATA(9)EQUATE INVOICE.AMT.AMC TO WIDGET.USER.DATA(10)EQUATE INVOICE.AMT.CONV TO WIDGET.USER.DATA(11)EQUATE INVOICE.AMT.COOR TO WIDGET.USER.DATA(12)EQUATE BALANCE.AMC TO WIDGET.USER.DATA(13)EQUATE BALANCE.CONV TO WIDGET.USER.DATA(14)EQUATE BALANCE.COOR TO WIDGET.USER.DATA(15)EQUATE CUSTOMER.DICT TO WIDGET.USER.DATA(16)EQUATE CUSTOMER.AMC TO WIDGET.USER.DATA(17)EQUATE CUSTOMER.TFILE TO WIDGET.USER.DATA(18)*OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE   MESSAGE='No Platform Type Defined'   GOTO MESSAGE.DISPLAY ENDFIRST.TIME=0IF G$SUBMITTED <> '1' THEN   MATREAD WIDGET.USER.DATA FROM FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ELSE      MAT WIDGET.USER.DATA = ''      FIRST.TIME=1    END   IF NOT(FIRST.TIME) THEN      GOSUB VALIDATE.PREVIOUS.INPUTS    END END ELSE   GOSUB VALIDATE.PREVIOUS.INPUTS   MATWRITE WIDGET.USER.DATA ON FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ENDGOSUB SET.PROMPTSRETURN*SET.PROMPTS:*W$INPUT.PROMPT<1> = "AR File Account"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = ACCOUNT*W$INPUT.PROMPT<2> = "Name Of AR File"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = REPORT.FILE*W$INPUT.PROMPT<3> = "Due Date Dict Name"W$INPUT.TYPE<3> = 'TEXT'W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = DUE.DATE.DICT*W$INPUT.PROMPT<4> = "Date Paid Dict Name"W$INPUT.TYPE<4> = 'TEXT'W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = DATE.PAID.DICT*W$INPUT.PROMPT<5> = "Invoice Amount Dict Name"W$INPUT.TYPE<5> = 'TEXT'W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = INVOICE.AMT.DICT*W$INPUT.PROMPT<6> = "Remaining Balance Dict Name"W$INPUT.TYPE<6> = 'TEXT'W$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = BALANCE.DICT*W$INPUT.PROMPT<7> = "Customer Dict Name"W$INPUT.TYPE<7> = 'TEXT'W$INPUT.UDPOS<7> = 16W$INPUT.DEFAULT<7> = CUSTOMER.DICT*RETURN*VALIDATE.PREVIOUS.INPUTS:*MESSAGE=''BEGIN CASE   CASE PLATFORM = 'D3'      MD.TYPE='MD'   CASE PLATFORM = 'JB'      MD.TYPE='MD'   CASE 1      MD.TYPE='VOC'END CASEOPEN '',MD.TYPE TO FI.MD ELSE   MESSAGE='Unable to open ':MD.TYPE:' for validation purposes'   GOTO MESSAGE.DISPLAY ENDVALID.ACCOUNT=1IF ACCOUNT <> '' THEN**   EXECUTE "SET-FILE ":ACCOUNT:" ":MD.TYPE:' QFILE' CAPTURING DUMMY    VALID.ACCOUNT=1    QFILE.NAME='QFILE'    CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)    IF QFILE.NAME = '' THEN       MESSAGE<-1>=ACCOUNT:' is not a valid account!'       VALID.ACCOUNT=0     END**    IF PLATFORM = 'UD' THEN**       QFILE.NAME='QFILE'**       CALL CREATE.UD.QPOINTER(ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)**       IF QFILE.NAME = '' THEN**          MESSAGE<-1>=ACCOUNT:' is not a valid account!'**          VALID.ACCOUNT=0**        END**     END ELSE**       WRITE 'Q':@AM:ACCOUNT:@AM:MD.TYPE ON FI.MD, 'QFILE'**       OPEN '','QFILE' TO FI.ACCOUNT.MD ELSE**          MESSAGE<-1>=ACCOUNT:' is not a valid account!'**          VALID.ACCOUNT=0**        END**    END END ELSE   VALID.ACCOUNT=0   MESSAGE<-1>='No Account defined!' ENDIF REPORT.FILE <> '' THEN   IF NOT(VALID.ACCOUNT) THEN      MESSAGE<-1>='Unable to verify ':REPORT.FILE:' file because account not properly defined!'      VALID.REPORT.FILE=0    END ELSE      VALID.REPORT.FILE=1      QFILE.NAME='QFILE'      CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)      IF QFILE.NAME = '' THEN         MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'         VALID.REPORT.FILE=0       END**      EXECUTE "SET-FILE ":ACCOUNT:" ":REPORT.FILE:' QFILE' CAPTURING DUMMY***       IF PLATFORM = 'UD' THEN***          QFILE.NAME='QFILE'***          CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)***          IF QFILE.NAME = '' THEN***            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'***            VALID.REPORT.FILE=0***          END***        END ELSE***          WRITE 'Q':@AM:ACCOUNT:@AM:REPORT.FILE ON FI.MD, 'QFILE'***          OPEN '','QFILE' TO FI.REPORT.FILE ELSE***             MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'***             VALID.REPORT.FILE=0***           END***        END      IF VALID.REPORT.FILE THEN         HAVE.QFILE.REC=1         READ QFILE.REC FROM FI.MD, 'QFILE' ELSE            HAVE.QFILE.REC=0            MESSAGE<-1>='Unable to create QFILE pointer to ':ACCOUNT:' ':REPORT.FILE          END         IF HAVE.QFILE.REC THEN            WRITE QFILE.REC ON FI.MD, 'DASHBOARD.AR.FILE'            OPEN 'DICT','DASHBOARD.AR.FILE' TO FI.DICT.REPORT.FILE ELSE                MESSAGE<-1>='Unable to open DICT ':REPORT.FILE             END          END       END    END END ELSE   MESSAGE<-1>='No AR Report file defined!' ENDIF DUE.DATE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Due Date Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DUE.DATE.DICT:' Because No AR File!'    END ELSE      READ DUE.DATE.DICT.REC FROM FI.DICT.REPORT.FILE, DUE.DATE.DICT ELSE         DUE.DATE.DICT.REC=''         MESSAGE<-1>=DUE.DATE.DICT:' Does Not Exist!'       END      IF DUE.DATE.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DUE.DATE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DUE.DATE.DICT.REC<7>[1,1] <> 'D' AND DUE.DATE.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DUE.DATE.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DUE.DATE.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF DATE.PAID.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Date Paid Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DATE.PAID.DICT:' Because No AR File!'    END ELSE      READ DATE.PAID.DICT.REC FROM FI.DICT.REPORT.FILE, DATE.PAID.DICT ELSE         DATE.PAID.DICT.REC=''         MESSAGE<-1>=DATE.PAID.DICT:' Does Not Exist!'       END      IF DATE.PAID.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DATE.PAID.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DATE.PAID.DICT.REC<7>[1,1] <> 'D' AND DATE.PAID.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DATE.PAID.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DATE.PAID.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF INVOICE.AMT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Invoice Amount Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":INVOICE.AMT.DICT:' Because No AR File!'    END ELSE      READ INVOICE.AMT.DICT.REC FROM FI.DICT.REPORT.FILE, INVOICE.AMT.DICT ELSE         INVOICE.AMT.DICT.REC=''         MESSAGE<-1>=INVOICE.AMT.DICT:' Does Not Exist!'       END      IF INVOICE.AMT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=INVOICE.AMT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=INVOICE.AMT.DICT.REC<7>[1,2]               DICT.8.1.2=INVOICE.AMT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=INVOICE.AMT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':INVOICE.AMT.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF BALANCE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Balance Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":BALANCE.DICT:' Because No AR File!'    END ELSE      READ BALANCE.DICT.REC FROM FI.DICT.REPORT.FILE, BALANCE.DICT ELSE         BALANCE.DICT.REC=''         MESSAGE<-1>=BALANCE.DICT:' Does Not Exist!'       END      IF BALANCE.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=BALANCE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=BALANCE.DICT.REC<7>[1,2]               DICT.8.1.2=BALANCE.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=BALANCE.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               BALANCE.AMC=BALANCE.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':BALANCE.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF CUSTOMER.DICT <> '' THEN   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":CUSTOMER.DICT:' Because No AR File!'    END ELSE      READ CUSTOMER.DICT.REC FROM FI.DICT.REPORT.FILE, CUSTOMER.DICT ELSE         CUSTOMER.DICT.REC=''         MESSAGE<-1>=CUSTOMER.DICT:' Does Not Exist!'       END      IF CUSTOMER.DICT.REC <> '' THEN         VALID.CUSTOMER.DICT=1         DICT.TYPE=CUSTOMER.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF CUSTOMER.DICT.REC<7>[1,1] <> 'T' AND CUSTOMER.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.CUSTOMER.DICT=0                END ELSE                  IF CUSTOMER.DICT.REC<7>[1,1] = 'T' THEN                     CUSTOMER.TFILE=CUSTOMER.DICT.REC<7>                   END ELSE                     CUSTOMER.TFILE=CUSTOMER.DICT.REC<8>                   END                END               CUSTOMER.AMC=CUSTOMER.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(CUSTOMER.DICT.REC<3>,'TRANS',1) THEN                  VALID.CUSTOMER.DICT=0                END ELSE                  CUSTOMER.TFILE=CUSTOMER.DICT.REC<3>                END            CASE 1               VALID.CUSTOMER.DICT=0         END CASE         IF NOT(VALID.CUSTOMER.DICT) THEN            MESSAGE<-1>='Dictionary Item ':CUSTOMER.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDCREATE.INDEXES=1IF MESSAGE = '' THEN   MESSAGE='AR Report parameters properly defined!' END ELSE   IF INDEX(MESSAGE,'!',1) THEN      MESSAGE=INSERT(MESSAGE,1,0,0,'!!! ERRORS !!!')      CREATE.INDEXES=0    END ENDIF CREATE.INDEXES THEN   * CREATE PIPE DICTIONARY ITEM   IF PLATFORM = 'D3' OR PLATFORM = 'QM' OR PLATFORM = 'JB' THEN      PIPE='A'      PIPE<2>=0      PIPE<3>=' '      PIPE<8>='F;C|'      PIPE<9>='L'      PIPE<10>=1    END ELSE      PIPE='I'      PIPE<2>='"|"'      PIPE<4>='|'      PIPE<5>='1L'      PIPE<6>='S'    END   WRITE PIPE ON FI.DICT.REPORT.FILE, 'PIPE'   *   ** INDEX LOGIC   *   BEGIN CASE      CASE PLATFORM = 'D3'         INDEX.TEST='A':DUE.DATE.AMC:'(DY):':DUE.DATE.AMC:'(DM)'         READ FILE.DEF.REC FROM FI.DICT.REPORT.FILE, REPORT.FILE ELSE FILE.DEF.REC=''         IF FILE.DEF.REC <> '' AND NOT(INDEX(FILE.DEF.REC<8>,INDEX.TEST,1)) THEN            MESSAGE<-1>='Creating Indexes'            CMND1="CREATE-INDEX DASHBOARD.AR.FILE A":DUE.DATE.AMC            EXECUTE CMND1 CAPTURING RESULT1            CMND2="CREATE-INDEX DASHBOARD.AR.FILE ":INDEX.TEST            EXECUTE CMND2 CAPTURING RESULT2          END      CASE 1         EXECUTE "CREATE-INDEX DASHBOARD.AR.FILE ":DUE.DATE.DICT CAPTURING RESULT1   END CASE ENDGOSUB MESSAGE.DISPLAYRETURN*MESSAGE.DISPLAY:*MAX.MSG=DCOUNT(MESSAGE,CHAR(254))W$HTML.DATA='<h3>':MESSAGE<1>IF MAX.MSG > 1 THEN   FOR MSG.NO = 2 TO MAX.MSG      W$HTML.DATA:='<br>':MESSAGE<MSG.NO>    NEXT MSG.NO ENDW$HTML.DATA:='</h3>'RETURNEND003063SUB.PORTAL.AR.REPORTS0c2SUBROUTINE SUB.PORTAL.AR.REPORTS**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE='Portal AR'; CALL PORTAL.SHOW.LAST.UPDATED('AR')W$TYPE = "FC2DPIE"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*EQUATE REPORT.TYPE TO WIDGET.USER.DATA(1)W$PDFABLE=1OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.DASHBOARD.BALANCES ELSE   W$TYPE='TEXT'   W$TEXT.DATA='UNABLE TO OPEN DICT DASHBOARD.BALANCES'   RETURN END** LAYOUT OF THE *CURRENT.AR.STATS RECORD** PERIOD.AMOUNTS DATA LAYOUT* 1 PERIOD 1 AMOUNT* 2 PERIOS 2 AMOUNT* 3 PERIOD 3 AMOUNT* 4 PERIOD 4 AMOUNT* 5* 6 YEAR ] YEAR ] YEAR* 7 PERIOD 1 NUMBER \ PERIOD 2 NUMBER \ PERIOD 3 NUMBER \ PERIOD 4 NUMBER* 8 PERIOD 1 AMOUNT \ PERIOD 2 AMOUNT \ PERIOD 3 AMOUNT \ PERIOD 4 AMOUNT* 9 YEAR 1 TOTAL DAYS ] YEAR TOTAL DAYS ] YEAR 3 TOTAL DAYS ] YEAR 4 TOTAL DAYS* 10 YEAR 1 JAN # PAID\ FEB # PAID ... ] YEAR 2 JAN # PAID \* 11 YEAR 1 JAN # TOTAL DAYS \ FEB TOTAL DAYS ....*DIM AR.AMOUNTS(30)MATREAD AR.AMOUNTS FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AR.STATS' ELSE MAT AR.AMOUNTS=''EQUATE YEARS TO AR.AMOUNTS(6)NUM.YEARS=DCOUNT(YEARS,@VM)EQUATE ANNUAL.NUMBERS TO AR.AMOUNTS(7)EQUATE ANNUAL.AMOUNTS TO AR.AMOUNTS(8)EQUATE ANNUAL.TOTAL.DAYS TO AR.AMOUNTS(9)EQUATE MONTHLY.NUMBER.PAID TO AR.AMOUNTS(10)EQUATE MONTHLY.TOTAL.DAYS TO AR.AMOUNTS(11)EQUATE CUSTOMERS TO AR.AMOUNTS(12)EQUATE CUST.AMT.DUES TO AR.AMOUNTS(13)EQUATE CUST.MOST.DAYS.DUE TO AR.AMOUNTS(14)EQUATE CUST.TOTAL.1000.DAYS TO AR.AMOUNTS(15)EQUATE CUST.NUM.1000.DAYS TO AR.AMOUNTS(16)EQUATE CUST.TOTAL.60.DAYS TO AR.AMOUNTS(17)EQUATE CUST.NUM.60.DAYS TO AR.AMOUNTS(18)EQUATE HIGHEST.AMTS.CUSTS TO AR.AMOUNTS(19)EQUATE HIGHEST.AMTS TO AR.AMOUNTS(20)EQUATE HIGHEST.DAYS.CUSTS TO AR.AMOUNTS(21)EQUATE HIGHEST.DAYS TO AR.AMOUNTS(22)EQUATE HIGHEST.INCREASE.CUSTS TO AR.AMOUNTS(23)EQUATE HIGHEST.INCREASE.PCTS TO AR.AMOUNTS(24)EQUATE HIGHEST.INCREASE.60.DAY.AVG TO AR.AMOUNTS(25)EQUATE HIGHEST.INCREASE.1000.DAY.AVG TO AR.AMOUNTS(26)*W$INPUT.PROMPT<1>='Type of Report 'W$INPUT.TYPE<1>='SELECT'W$INPUT.SELOPTS<1>='Current Receivables':@VM:'Average Days by Year':@VM:'Average Days Last 12 Months'*** Add Average Days by Month for past 3 years with activity in every month*YEAR.POS=NUM.YEARSYEARS.ALREADY=0LOOP   YEAR.POS=YEAR.POS-1   IF NOT(YEAR.POS) THEN      JAN.NUMBER=0    END ELSE      JAN.NUMBER=MONTHLY.NUMBER.PAID<1,YEAR.POS,1>    ENDUNTIL NOT(JAN.NUMBER) OR YEARS.ALREADY >= 3 DO   YEAR=YEARS<1,YEAR.POS>   YEARS.ALREADY+=1   W$INPUT.SELOPTS<1,-1>='Average Days by Month ':YEARREPEAT**W$INPUT.SELOPTS<1,-1>='Customers By Largest Receivables'**W$INPUT.SELOPTS<1,-1>='Customers By Most Aged Receivables'**W$INPUT.SELOPTS<1,-1>='Customers By Largest Aging Increases'W$INPUT.SELOPTS<1,-1>='Customers Needing Aging Attention'W$INPUT.SELVALS=W$INPUT.SELOPTSIF REPORT.TYPE = '' THEN   REPORT.TYPE='Current Receivables' ENDW$INPUT.UDPOS = 1W$INPUT.DEFAULT<1>=REPORT.TYPE*BEGIN CASE   CASE REPORT.TYPE = 'Current Receivables'      GOSUB DO.CURRENT   CASE REPORT.TYPE = 'Average Days by Year'      GOSUB AVERAGE.DAYS.BY.YEAR   CASE REPORT.TYPE = 'Average Days Last 12 Months'      GOSUB AVERAGE.DAYS.LAST.12.MONTHS   CASE REPORT.TYPE[1,21] = 'Average Days by Month'      AVERAGE.YEAR=FIELD(REPORT.TYPE,' ',5)      GOSUB AVERAGE.DAYS.BY.MONTH.PER.YEAR   CASE REPORT.TYPE = 'CUSTOMERS BY LARGEST RECEIVABLES'      GOSUB CUSTOMERS.BY.LARGEST.RECEIVABLES   CASE REPORT.TYPE = 'CUSTOMERS BY MOST AGED RECEIVABLES'      GOSUB CUSTOMERS.BY.MOST.AGED.RECEIVABLES   CASE REPORT.TYPE = 'CUSTOMERS BY LARGEST AGING INCREASES'      GOSUB CUSTOMERS.BY.LARGEST.AGING.INCREASES   CASE REPORT.TYPE = 'Customers Needing Aging Attention'      GOSUB CUSTOMERS.BY.LARGEST.RECEIVABLES   CASE 1      W$TYPE='TEXT'      W$TEXT.DATA='INVALID REPORT TYPE=':REPORT.TYPEEND CASERETURN*DO.CURRENT:*W$TITLE = "Current - AR Balances by Days Due"; CALL PORTAL.SHOW.LAST.UPDATED('AR')AMTS=AR.AMOUNTS(1):@AM:AR.AMOUNTS(2):@AM:AR.AMOUNTS(3):@AM:AR.AMOUNTS(4):@AM:AR.AMOUNTS(5)W$PIE.CAPTION='Total AR Balance of '*TOT.AMT=SUM(AMTS)W$PIE.CAPTION:=OCONV(TOT.AMT,'MD02,$')*CATEGORIES='Current'CATEGORIES<2>='1 - 30 Days'CATEGORIES<3>='31 - 60 Days'CATEGORIES<4>='61 - 90 Days'CATEGORIES<5>='Over 90 Days'*CATEGORY.AMTS=AMTS**W$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='showPercentageValues="0"'W$CHART.OPTIONS<-1>='showPercentageInLabel="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="0"'W$CHART.OPTIONS<-1>='thousandSeparator=","'W$CHART.OPTIONS<-1>='pieradius="150"'FOR N = 1 TO 5  W$PIE.LABELS<1,N> = CATEGORIES<N>  W$PIE.VALUES<1,N> = INT(CATEGORY.AMTS<N>/100 + .5)NEXT N*RETURN*AVERAGE.DAYS.BY.YEAR:*W$TITLE = "Average Days To Pay"; CALL PORTAL.SHOW.LAST.UPDATED('AR')W$TYPE = "FCCOLUMN3D"*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEFIRST.YEAR=''; CURRENT.YEAR=''*W$BAR.XMEMO = "Year (drill down for detail)"W$BAR.YMEMO = "Average Days to Pay"*YEAR.NO=0*FOR NN = 1 TO NUM.YEARS  ANNUAL.BY.TYPE.NUMBER=ANNUAL.NUMBERS<1,NN>  BY.TYPE.NUMBER=SUM(ANNUAL.BY.TYPE.NUMBER)  TOTAL.DAYS=ANNUAL.TOTAL.DAYS<1,NN>  IF BY.TYPE.NUMBER AND TOTAL.DAYS THEN     AVERAGE.DAYS=INT(TOTAL.DAYS * 10 / BY.TYPE.NUMBER + .5)     AVERAGE.DAYS=OCONV(AVERAGE.DAYS,'MD1')     YEAR.NO+=1     YEAR=YEARS<1,NN>     IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR     CURRENT.YEAR=YEAR     W$BAR.VALUES<1,YEAR.NO> = AVERAGE.DAYS     W$BAR.XLABELS<1,YEAR.NO> = YEAR     W$FW.DD.WIDGET<1,YEAR.NO>='PORTAL DAYS TO PAY PIE'     W$FW.DD.UD.POS<1,YEAR.NO,1>=1     W$FW.DD.UD.VAL<1,YEAR.NO,1>=YEAR   ENDNEXT NN*W$BAR.CAPTION = "Average Days to Pay From ":FIRST.YEAR:' to ':CURRENT.YEARW$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="1"'W$CHART.OPTIONS<-1>='thousandSeparator=","'W$CHART.OPTIONS<-1>='pieradius="150"'*RETURN*AVERAGE.DAYS.LAST.12.MONTHS:*LAST.YEAR=YEARS<1,NUM.YEARS>**DEBUG=''MOS.IN.LAST.YEAR=DCOUNT(MONTHLY.NUMBER.PAID<1,NUM.YEARS>,CHAR(252))**DEBUG<-1>=MOS.IN.LAST.YEARMOS.IN.PREV.YEAR=12-MOS.IN.LAST.YEAR**DEBUG<-1>=MOS.IN.PREV.YEARIF MOS.IN.PREV.YEAR = 12 THEN   LAST.YEAR=LAST.YEAR-1   THIS.MONTHLY.NUMBERS=MONTHLY.NUMBER.PAID<1,NUM.YEARS-1>   THIS.MONTHLY.TOTAL.DAYS=MONTHLY.TOTAL.DAYS<1,NUM.YEARS-1>   MONTHLY.LABELS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'   CONVERT ',' TO CHAR(252) IN MONTHLY.LABELS   START.MONTH="January ":LAST.YEAR   END.MONTH="December ":LAST.YEAR END ELSE   FULL.MONTHS='January,February,March,April,May,June,July,August,September,October,November,December'   PREV.YEAR.MO.NO=12-MOS.IN.PREV.YEAR+1**DEBUG<-1>=PREV.YEAR.MO.NO   START.MONTH=FIELD(FULL.MONTHS,',',PREV.YEAR.MO.NO):' ':(LAST.YEAR-1)   END.MONTH=FIELD(FULL.MONTHS,',',MOS.IN.LAST.YEAR):' ':LAST.YEAR   ABREV.MONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'   COMMA.POS=INDEX(ABREV.MONTHS,',',PREV.YEAR.MO.NO-1)   MONTHLY.LABELS=ABREV.MONTHS[COMMA.POS+1,9999]:',':(ABREV.MONTHS[1,COMMA.POS-1])   CONVERT ',' TO CHAR(252) IN MONTHLY.LABELS   *   ** ISOLATE THE NUMBERS FOR THE PREVIOUS YEAR   *   THIS.MONTHLY.NUMBERS=MONTHLY.NUMBER.PAID<1,NUM.YEARS-1>   POS.BEFORE.FIRST=INDEX(THIS.MONTHLY.NUMBERS,CHAR(252),PREV.YEAR.MO.NO-1)   THIS.MONTHLY.NUMBERS=THIS.MONTHLY.NUMBERS[POS.BEFORE.FIRST+1,99999]   THIS.MONTHLY.NUMBERS:=CHAR(252):MONTHLY.NUMBER.PAID<1,NUM.YEARS>   THIS.MONTHLY.TOTAL.DAYS=MONTHLY.TOTAL.DAYS<1,NUM.YEARS-1>   POS.BEFORE.FIRST=INDEX(THIS.MONTHLY.TOTAL.DAYS,CHAR(252),PREV.YEAR.MO.NO-1)   THIS.MONTHLY.TOTAL.DAYS=THIS.MONTHLY.TOTAL.DAYS[POS.BEFORE.FIRST+1,99999]   THIS.MONTHLY.TOTAL.DAYS:=CHAR(252):MONTHLY.TOTAL.DAYS<1,NUM.YEARS>ENDGOSUB AVERAGE.DAYS.BY.MONTHRETURN*AVERAGE.DAYS.BY.MONTH.PER.YEAR:*LOCATE AVERAGE.YEAR IN YEARS<1> SETTING YEAR.POS ELSE RETURNTHIS.MONTHLY.NUMBERS=MONTHLY.NUMBER.PAID<1,YEAR.POS>THIS.MONTHLY.TOTAL.DAYS=MONTHLY.TOTAL.DAYS<1,YEAR.POS>START.MONTH="January ":AVERAGE.YEAREND.MONTH="December ":AVERAGE.YEARMONTHLY.LABELS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'CONVERT ',' TO CHAR(252) IN MONTHLY.LABELSGOSUB AVERAGE.DAYS.BY.MONTHRETURN*AVERAGE.DAYS.BY.MONTH:*W$TITLE = "Average Days To Pay"; CALL PORTAL.SHOW.LAST.UPDATED('AR')W$TYPE = "FCCOLUMN3D"*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUE*W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Average Days to Pay"*MONTH.NO=0*FOR NN = 1 TO 12  MONTHLY.NUMBER=THIS.MONTHLY.NUMBERS<1,1,NN>  MONTHLY.DAYS=THIS.MONTHLY.TOTAL.DAYS<1,1,NN>  MONTHLY.LABEL=MONTHLY.LABELS<1,1,NN>  IF MONTHLY.NUMBER AND MONTHLY.DAYS THEN     AVERAGE.DAYS=INT(MONTHLY.DAYS * 10 / MONTHLY.NUMBER + .5)     AVERAGE.DAYS=OCONV(AVERAGE.DAYS,'MD1')   END ELSE AVERAGE.DAYS=0  W$BAR.VALUES<1,NN> = AVERAGE.DAYS  W$BAR.XLABELS<1,NN> = MONTHLY.LABELNEXT NN*W$BAR.CAPTION = "Average Days to Pay From ":START.MONTH:' to ':END.MONTHW$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="1"'RETURN*CUSTOMERS.BY.LARGEST.RECEIVABLES:*W$TYPE='TABLE'W$WIDTH = 3MAX.HIGHEST.AMTS=DCOUNT(HIGHEST.AMTS.CUSTS,@VM)IF MAX.HIGHEST.AMTS > 50 THEN MAX.HIGHEST.AMTS=50W$TABLE.COL.LABELS<1,1> = "| --- Customers ---<br>| ":MAX.HIGHEST.AMTS:" With Most Amount Owed"W$TABLE.COL.LABELS<1,2> = "Amount<br>Owed"W$TABLE.COL.LABELS<1,3> = "Most Days|<br>&nbsp;&nbsp;&nbsp;&nbsp;Aged&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|"W$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "center"W$TABLE.COL.JUST<1,3> = "center"IF MAX.HIGHEST.AMTS > 50 THEN MAX.HIGHEST.AMTS=50W$TITLE = MAX.HIGHEST.AMTS:' Customers With Largest Receivables'; CALL PORTAL.SHOW.LAST.UPDATED('AR')FOR I = 1 TO MAX.HIGHEST.AMTS   CUSTOMER=HIGHEST.AMTS.CUSTS<1,I>   HIGHEST.AMT=HIGHEST.AMTS<1,I>   HIGHEST.AMT=OCONV(HIGHEST.AMT,'MD2,')   LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUST.POS ELSE CUST.POS=9999   CUST.HIGHEST.DAYS=CUST.MOST.DAYS.DUE<1,CUST.POS>   W$TABLE.DATA<I,1>=CUSTOMER   W$TABLE.DATA<I,2>=HIGHEST.AMT   W$TABLE.DATA<I,3>=CUST.HIGHEST.DAYS NEXT I*RETURN*CUSTOMERS.BY.MOST.AGED.RECEIVABLES:***W$TYPE='TABLE'**W$WIDTH = 2MAX.HIGHEST.DAYS=DCOUNT(HIGHEST.DAYS.CUSTS,@VM)IF MAX.HIGHEST.DAYS > 50 THEN MAX.HIGHEST.DAYS=50W$TABLE.COL.LABELS<1,4> = "| --- Customers ---<br>| ":MAX.HIGHEST.DAYS:" With Most Days Aged"W$TABLE.COL.LABELS<1,5> = "Most Days<br>Aged"W$TABLE.COL.LABELS<1,6> = "&nbsp;Amount&nbsp;|<br>&nbsp;&nbsp;&nbsp;Owed&nbsp;&nbsp;&nbsp;|"W$TABLE.COL.JUST<1,4> = "left"W$TABLE.COL.JUST<1,5> = "center"W$TABLE.COL.JUST<1,6> = "right"W$TITLE = MAX.HIGHEST.DAYS:' Customers With Most Aged Receivables'; CALL PORTAL.SHOW.LAST.UPDATED('AR')FOR I = 1 TO MAX.HIGHEST.DAYS   CUSTOMER=HIGHEST.DAYS.CUSTS<1,I>   HIGHEST.DAY=HIGHEST.DAYS<1,I>   LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUST.POS ELSE CUST.POS=9999   AMT.DUE=CUST.AMT.DUES<1,CUST.POS>   W$TABLE.DATA<I,4>=CUSTOMER   W$TABLE.DATA<I,5>=HIGHEST.DAY   W$TABLE.DATA<I,6>=OCONV(AMT.DUE,'MD2,') NEXT I*RETURN*CUSTOMERS.BY.LARGEST.AGING.INCREASES:**W$TYPE='TABLE'*W$WIDTH = 2MAX.HIGHEST.INCREASE=DCOUNT(HIGHEST.INCREASE.CUSTS,@VM)IF MAX.HIGHEST.INCREASE > 50 THEN MAX.HIGHEST.INCREASE=50W$TABLE.COL.LABELS<1,7> = "| --- Customers ---<br>| ":MAX.HIGHEST.INCREASE:" With Significant Aging Increase"W$TABLE.COL.LABELS<1,8> = "PCT<br>Increase"W$TABLE.COL.LABELS<1,9> = "60<br>Day Avg"W$TABLE.COL.LABELS<1,10> = "&nbsp;&nbsp;&nbsp;1000&nbsp;&nbsp;&nbsp;|<br>Day Avg|"W$TABLE.COL.JUST<1,7> = "left"W$TABLE.COL.JUST<1,8> = "center"W$TABLE.COL.JUST<1,9> = "center"W$TABLE.COL.JUST<1,10> = "center"W$TITLE = MAX.HIGHEST.INCREASE:' Customers With Largest Aging Increase'; CALL PORTAL.SHOW.LAST.UPDATED('AR')FOR I = 1 TO MAX.HIGHEST.INCREASE   CUSTOMER=HIGHEST.INCREASE.CUSTS<1,I>   HIGHEST.INCREASE.PCT=HIGHEST.INCREASE.PCTS<1,I>   LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUST.POS ELSE CUST.POS=9999   W$TABLE.DATA<I,7>=CUSTOMER   W$TABLE.DATA<I,8>=HIGHEST.INCREASE.PCT   W$TABLE.DATA<I,9>=HIGHEST.INCREASE.60.DAY.AVG<1,I>   W$TABLE.DATA<I,10>=HIGHEST.INCREASE.1000.DAY.AVG<1,I> NEXT IRETURN003DCBSUB.PORTAL.DASHBOARD0c2SUBROUTINE SUB.PORTAL.DASHBOARD** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) Zumasys, Inc*WEB$TITLE='MVDashboard Portal Financial Picture'WEB.FORM.NAME='PORTAL.DASHBOARD'W$TYPE='HTML'W$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*EQUATE AR.AMOUNTS TO GLOBAL.USER.DATA(1)EQUATE AP.AMOUNTS TO GLOBAL.USER.DATA(2)OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE    ERROR.MSG<-1>='UNABLE TO OPEN MVDB.CONTROL'   GOTO DISPLAY.ERROR ENDREAD PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'END CASEOPEN '','DASHBOARD.CLOSING.STATS' TO FI.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.CLOSING.STATS ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN '','DASHBOARD.BALANCES' TO FI.DASHBOARD.BALANCES ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DASHBOARD.BALANCES'   GOTO DISPLAY.ERROR ENDREAD PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'ERROR.MSG=''DIM SALES.SETUP.PARAMS(20), AR.SETUP.PARAMS(20), AP.SETUP.PARAMS(20), NET.INCOME.SETUP.PARAMS(20)*MATREAD SALES.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SALES.SETUP.PARAMS='' ENDEQUATE SALES.ACCOUNT TO SALES.SETUP.PARAMS(1)EQUATE SALES.REPORT.FILE TO SALES.SETUP.PARAMS(2)EQUATE SALES.DATE.DICT TO SALES.SETUP.PARAMS(3)EQUATE SALES.AMOUNT.DICT TO SALES.SETUP.PARAMS(6)EQUATE GP.DICT.NAME TO SALES.SETUP.PARAMS(7)*IF SALES.ACCOUNT = '' OR SALES.REPORT.FILE = '' OR SALES.DATE.DICT = '' OR SALES.AMOUNT.DICT = '' THEN   ERROR.MSG<-1>='SALES FILE ACCOUNT, SALES FILE NAME, DATE OF SALE, AND AMOUNT OF SALE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED' END*** BUILD SAMPLE DATA IF USING MVDB FOR SALES ACCOUNT*IF SALES.ACCOUNT = 'MVDB' THEN   EXECUTE "BUILD.SAMPLE.PORTAL.FILES" CAPTURING DUMMY END**OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.DASHBOARD.BALANCES ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DICT DASHBOARD.BALANCES'   GOTO DISPLAY.ERROR ENDMATREAD AR.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ELSE   MAT AR.SETUP.PARAMS='' END*EQUATE AR.ACCOUNT TO AR.SETUP.PARAMS(1)EQUATE AR.REPORT.FILE TO AR.SETUP.PARAMS(2)EQUATE AR.DUE.DATE.DICT TO AR.SETUP.PARAMS(3)EQUATE AR.BALANCE.DICT TO AR.SETUP.PARAMS(6)****IF AR.ACCOUNT = '' OR AR.REPORT.FILE = '' OR AR.DUE.DATE.DICT = '' OR AR.BALANCE.DICT = '' THEN**   ERROR.MSG<-1>='AR FILE ACCOUNT, AR FILE NAME, DUE DATE, AND BALANCE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'***   GOTO DISPLAY.ERROR** END*MATREAD AP.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ELSE   MAT AP.SETUP.PARAMS='' END*EQUATE AP.ACCOUNT TO AP.SETUP.PARAMS(1)EQUATE AP.REPORT.FILE TO AP.SETUP.PARAMS(2)EQUATE AP.DUE.DATE.DICT TO AP.SETUP.PARAMS(3)EQUATE AP.BALANCE.DICT TO AP.SETUP.PARAMS(6)****IF AP.ACCOUNT = '' OR AP.REPORT.FILE = '' OR AP.DUE.DATE.DICT = '' OR AP.BALANCE.DICT = '' THEN**   ERROR.MSG<-1>='AP FILE ACCOUNT, AP FILE NAME, DUE DATE, AND BALANCE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'***   GOTO DISPLAY.ERROR** END***MATREAD NET.INCOME.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.NET.INCOME.REPORT.SETUP' ELSE**   MAT NET.INCOME.SETUP.PARAMS=''** END*EQUATE NET.INCOME.ACCOUNT TO NET.INCOME.SETUP.PARAMS(1)EQUATE NET.INCOME.REPORT.FILE TO NET.INCOME.SETUP.PARAMS(2)EQUATE NET.INCOME.DUE.DATE.DICT TO NET.INCOME.SETUP.PARAMS(3)EQUATE NET.INCOME.BALANCE.DICT TO NET.INCOME.SETUP.PARAMS(6)****IF NET.INCOME.ACCOUNT = '' OR NET.INCOME.REPORT.FILE = '' OR NET.INCOME.DUE.DATE.DICT = '' OR NET.INCOME.BALANCE.DICT = '' THEN**   ERROR.MSG<-1>='NET INCOME FILE ACCOUNT, NET INCOME FILE NAME, DUE DATE, AND BALANCE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'***   GOTO DISPLAY.ERROR** END*IF ERROR.MSG <> '' THEN***   GOTO DISPLAY.ERROR END** START ANY REQUIRED BACKGROUND CALCULATIONS*CUR.TIME=TIME()CUR.TIME=FIELD(CUR.TIME,'.',1)CUR.TIME=STR('0',5-LEN(CUR.TIME)):CUR.TIMECUR.DATE.TIME=DATE():CUR.TIME*** SALES*READU SALES FROM FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES' ELSE SALES=''BEGIN CASE   CASE SALES = 'UPDATING'; SALES.STATUS='UPDATING'   CASE NOT(NUM(SALES)); SALES.STATUS='NEED CALC'   CASE (CUR.DATE.TIME - SALES) < 900;   * LESS THAN 15 MINUTES      SALES.STATUS='GOOD'      READ SALES.REC FROM FI.DICT.CLOSING.STATS, '*CURRENT.SALES.STATS' ELSE         SALES.STATUS='NEED CALC'       END   CASE 1; SALES.STATUS='NEED CALC'END CASEIF SALES.STATUS <> 'NEED CALC' THEN   RELEASE FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES' END*** AR*READU AR FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR' ELSE AR=''BEGIN CASE   CASE AR = 'UPDATING'; AR.STATUS='UPDATING'   CASE NOT(NUM(AR)); AR.STATUS='NEED CALC'   CASE (CUR.DATE.TIME - AR) < 900;   * LESS THAN 15 MINUTES      AR.STATUS='GOOD'      READ AR.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AR.STATS' ELSE         AR.STATUS='NEED CALC'       END   CASE 1; AR.STATUS='NEED CALC'END CASEIF AR.STATUS <> 'NEED CALC' THEN   RELEASE FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR' END*** AP*READU AP FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP' ELSE AP=''BEGIN CASE   CASE AP = 'UPDATING'; AP.STATUS='UPDATING'   CASE NOT(NUM(AP)); AP.STATUS='NEED CALC'   CASE (CUR.DATE.TIME - AP) < 900;   * LESS THAN 15 MINUTES      AP.STATUS='GOOD'      READ AP.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AP.STATS' ELSE         AP.STATUS='NEED CALC'       END   CASE 1; AP.STATUS='NEED CALC'END CASEIF AP.STATUS <> 'NEED CALC' THEN   RELEASE FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP' END******* NET.INCOME*****READU NET.INCOME FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME' ELSE NET.INCOME=''**BEGIN CASE**   CASE NET.INCOME = 'UPDATING'; NET.INCOME.STATUS='UPDATING'**   CASE NOT(NUM(NET.INCOME)); NET.INCOME.STATUS='NEED CALC'**   CASE (CUR.DATE.TIME - NET.INCOME) < 900;   * LESS THAN 15 MINUTES**      NET.INCOME.STATUS='GOOD'**      READ NET.INCOME.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.NET.INCOME.STATS' ELSE**         NET.INCOME.STATUS='NEED CALC'**       END**   CASE 1; NET.INCOME.STATUS='NEED CALC'**END CASE**IF NET.INCOME.STATUS <> 'NEED CALC' THEN**   RELEASE FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME'** END*IF SALES.STATUS <> 'GOOD' OR AR.STATUS <> 'GOOD' OR AP.STATUS <> 'GOOD' THEN ; *OR NET.INCOME.STATUS <> 'GOOD' THEN   IF SALES.STATUS = 'NEED CALC' AND AR.STATUS = 'NEED CALC' AND AP.STATUS = 'NEED CALC' THEN; *AND NET.INCOME.STATUS = 'NEED CALC' THEN      TYPE.CALC='ALL'      GOSUB INITIATE.CALC.PHANTOM      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.ALL'      WRITE 'UPDATING' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES'      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR'      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP'**      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME'    END ELSE      IF SALES.STATUS = 'NEED CALC' THEN         TYPE.CALC='SALES'         GOSUB INITIATE.CALC.PHANTOM         WRITE 'UPDATING' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES'       END      IF AR.STATUS = 'NEED CALC' THEN         TYPE.CALC='AR'         GOSUB INITIATE.CALC.PHANTOM         WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR'       END      IF AP.STATUS = 'NEED CALC' THEN         TYPE.CALC='AP'         GOSUB INITIATE.CALC.PHANTOM         WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP'       END**      IF NET.INCOME.STATUS = 'NEED CALC' THEN**         TYPE.CALC='NET.INCOME'**         GOSUB INITIATE.CALC.PHANTOM**         WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME'**       END    END   *   NOW.GOOD=1   *   ** GIVE IT 10 SECONDS TO COMPLETE ANY CALCS AND TRY AGAIN   *   SLEEP 10   *   IF SALES.STATUS <> 'GOOD' THEN      READ SALES.STATUS FROM FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES' ELSE SALES.STATUS='UPDATING'      IF NUM(SALES.STATUS) THEN         READ SALES.REC FROM FI.DICT.CLOSING.STATS, '*CURRENT.SALES.STATS' ELSE            SALES.STATUS='UPDATING'            NOW.GOOD=0          END       END ELSE         NOW.GOOD=0       END    END   *   IF AR.STATUS <> 'GOOD' THEN      READ AR.STATUS FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR' ELSE AR.STATUS='UPDATING'      IF NUM(AR.STATUS) THEN         READ AR.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AR.STATS' ELSE            AR.STATUS='UPDATING'            NOW.GOOD=0          END       END ELSE         NOW.GOOD=0       END    END   *   IF AP.STATUS <> 'GOOD' THEN      READ AP.STATUS FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP' ELSE AP.STATUS='UPDATING'      IF NUM(AP.STATUS) THEN         READ AP.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AP.STATS' ELSE            AP.STATUS='UPDATING'            NOW.GOOD=0          END       END ELSE         NOW.GOOD=0       END    END**   IF NET.INCOME.STATUS <> 'GOOD' THEN**      READ NET.INCOME.STATUS FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME' ELSE NET.INCOME.STATUS='UPDATING'**      IF NUM(NET.INCOME.STATUS) THEN**         READ NET.INCOME.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.NET.INCOME.STATS' ELSE**            NET.INCOME.STATUS='UPDATING'**            NOW.GOOD=0**          END**       END ELSE**         NOW.GOOD=0**       END**    END   *   IF NOT(NOW.GOOD) THEN      *      ** USE PROMPTS AS A WAY OF SHOWING WHICH ARE CALCULATION.  NOTHING WILL BE DONE WITH THAT CONTENT OF THE      ** PROMPT WHEN THE GO BUTTON IS CLICKED.      *      W$INPUT.PROMPT<1> = "MTD Sales Calcs"      W$INPUT.TYPE<1> = "TEXT"      W$INPUT.UDPOS<1> = 1      W$INPUT.DEFAULT<1> = SALES.STATUS      *      IF AR.REPORT.FILE <> '' THEN         W$INPUT.PROMPT<2> = "AR Calcs"         W$INPUT.TYPE<2> = "TEXT"         W$INPUT.UDPOS<2> = 2         W$INPUT.DEFAULT<2> = AR.STATUS         *         IF AP.REPORT.FILE <> '' THEN            W$INPUT.PROMPT<3> = "AP Calcs"            W$INPUT.TYPE<3> = 'TEXT'            W$INPUT.UDPOS<3> = 3            W$INPUT.DEFAULT<3> = AP.STATUS          END       END      ***      W$INPUT.PROMPT<4> = "Net Income Calcs"**      W$INPUT.TYPE<4> = 'TEXT'**      W$INPUT.UDPOS<4> = 4**      W$INPUT.DEFAULT<4> = NET.INCOME.STATUS      *      ERROR.MSG<-1>='Figures are currently updating.'      ERROR.MSG<-1>='Try again in a minute or two.'      GOTO DISPLAY.ERROR   END END*DASH.REC=''MMM.YYYY=OCONV(DATE(),'D4')[4,8]DASH.REC<1>=MMM.YYYYYYYY=FIELD(MMM.YYYY,' ',2)DASH.REC<2>=YYYYDASH.REC<9>=DASH.REC<1>DASH.REC<10>=YYYYDASH.REC<15>=OCONV(DATE(),'D2-')MTD.SALES=SUM(SALES.REC<2>); DASH.REC<3>=MTD.SALESMTD.COST.OF.SALES=SUM(SALES.REC<3>)GROSS.PROFIT=MTD.SALES-MTD.COST.OF.SALESDASH.REC<5>=GROSS.PROFITPERCENT=INT((GROSS.PROFIT*1000)/MTD.SALES + .5)DASH.REC<7>=PERCENT*** USE DASHBOARD.CLOSING.STATS TO GET YEAR TO DATE TOTALS*STACKED.1=''STACKED.2='SORT DASHBOARD.CLOSING.STATS WITH YYYY = "':YYYY:'" BY YYYY BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL COST.OF.SALE ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)MAX.ROWS=DCOUNT(REPORT,CHAR(254))YTD.SALES=0YTD.COST.OF.SALES=0FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      TEST.YYYY=TRIM(FIELD(ROW,'|',1))      IF TEST.YYYY = YYYY THEN         YTD.SALES=TRIM(FIELD(ROW,'|',2))         YTD.SALES=ICONV(YTD.SALES,'MD2')         YTD.COST.OF.SALES=TRIM(FIELD(ROW,'|',3))         YTD.COST.OF.SALES=ICONV(YTD.COST.OF.SALES,'MD2')       END    END NEXT ROW.NODASH.REC<4>=YTD.SALESGROSS.PROFIT=YTD.SALES-YTD.COST.OF.SALESIF NOT(YTD.SALES) THEN   MARGIN=0 END ELSE   MARGIN=INT(GROSS.PROFIT*1000 / YTD.SALES + .5) ENDDASH.REC<6>=GROSS.PROFITDASH.REC<8>=MARGIN*TEMP.AR.REC=AR.REC<1>:@AM:AR.REC<2>:@AM:AR.REC<3>:@AM:AR.REC<4>:@AM:AR.REC<5>SUM.AR.BALANCES=SUM(TEMP.AR.REC)DASH.REC<28>=SUM.AR.BALANCESIF SUM.AR.BALANCES THEN   DAYS.CURRENT=AR.REC<1>; DASH.REC<30>=DAYS.CURRENT; DASH.REC<31>=INT(DAYS.CURRENT*1000/SUM.AR.BALANCES + .5)   DAYS.1.30=AR.REC<2>; DASH.REC<16>=DAYS.1.30; DASH.REC<17>=INT(DAYS.1.30*1000/SUM.AR.BALANCES + .5)   DAYS.31.60=AR.REC<3>; DASH.REC<19>=DAYS.31.60; DASH.REC<20>=INT(DAYS.31.60*1000/SUM.AR.BALANCES + .5)   DAYS.61.90=AR.REC<4>; DASH.REC<22>=DAYS.61.90; DASH.REC<23>=INT(DAYS.61.90*1000/SUM.AR.BALANCES + .5)   DAYS.91=AR.REC<5>; DASH.REC<25>=DAYS.91; DASH.REC<26>=INT(DAYS.91*1000/SUM.AR.BALANCES + .5) ENDCONVERT CHAR(254) TO CHAR(253) IN TEMP.AR.RECAR.AMOUNTS=TEMP.AR.REC*SUM.AP.BALANCES=SUM(AP.REC)DASH.REC<29>=SUM.AP.BALANCESDAYS.CURRENT=AP.REC<1>; DASH.REC<32>=DAYS.CURRENTDAYS.1.30=AP.REC<2>; DASH.REC<18>=DAYS.1.30DAYS.31.60=AP.REC<3>; DASH.REC<21>=DAYS.31.60DAYS.61.90=AP.REC<4>; DASH.REC<24>=DAYS.61.90DAYS.91=AP.REC<5>; DASH.REC<27>=DAYS.91TEMP.AP.REC=AP.RECCONVERT CHAR(254) TO CHAR(253) IN TEMP.AP.RECAP.AMOUNTS=TEMP.AP.REC** DEFAULT CONVERSIONS TO $CONVS=''FOR I = 3 TO 32      CONVS<I>='$' NEXT I* CHANGE THOSE THAT AREN'TCONVS<7>='%'; CONVS<8>='%'CONVS<17>='%'; CONVS<20>='%'; CONVS<23>='%'; CONVS<26>='%'; CONVS<31>='%'CONVS<1>=''; CONVS<2>=''CONVS<9>=''; CONVS<10>=''CONVS<13>=''; CONVS<14>=''; CONVS<15>=''**W$PRINTABLE=1W$PDFABLE=1OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE RETURNBEGIN CASE   CASE AR.REPORT.FILE <> '' AND AP.REPORT.FILE <> '' AND GP.DICT.NAME <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD'   CASE GP.DICT.NAME <> '' AND AR.REPORT.FILE <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.GP.AR'   CASE GP.DICT.NAME <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.GP'   CASE AR.REPORT.FILE <> '' AND AP.REPORT.FILE <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.AR.AP'   CASE AR.REPORT.FILE <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.AR'   CASE 1      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES'END CASEREAD HTML FROM FILE.WEB.FORMS, WEB.FORM.NAME ELSE HTML=''***USER.ID=G$USERID*W$TITLE='  Portal Dashboard'; CALL PORTAL.SHOW.LAST.UPDATED('ALL')**WRITE HTML ON FILE.WEB.FORMS, 'TEST.HTML'*** DYNAMIC VARIABLES*FOR I = 1 TO 32   INSERT.FIELD=DASH.REC<I>   IF INSERT.FIELD = '' THEN INSERT.FIELD=I   CONV=CONVS<I>   BEGIN CASE      CASE CONV = ''; NULL      CASE CONV = '$'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD2,$')      CASE CONV = '%'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD1'):'%'      CASE 1; INSERT.FIELD=OCONV(INSERT.FIELD,CONV)   END CASE   IF INSERT.FIELD = '' THEN INSERT.FIELD='&nbsp;'   CALL SWAP(HTML,'~':I:'~',INSERT.FIELD) NEXT I   *W$TEXT.DATA=HTMLWRITE HTML ON FILE.WEB.FORMS, 'LAST.':WEB.FORM.NAMERETURN**DISPLAY.ERROR:*W$TYPE='HTML'MAX.LINES=DCOUNT(ERROR.MSG,CHAR(254))IF MAX.LINES > 1 THEN   TEMP.ERROR.MSG=ERROR.MSG   ERROR.MSG=''   FOR ERROR.LINE = 1 TO MAX.LINES      THIS.MSG=TEMP.ERROR.MSG<ERROR.LINE>      IF ERROR.MSG <> '' THEN ERROR.MSG:='<br>'      ERROR.MSG:=THIS.MSG    NEXT ERROR.LINE ENDW$HTML.DATA='<h3>':ERROR.MSG:'</h3>'RETURN*INITIATE.CALC.PHANTOM:*BEGIN CASE   CASE PLATFORM = 'D3' OR PLATFORM = 'JB'      EXECUTE "Z REFRESH.DASHBOARD.MTD.STATS ":TYPE.CALC CAPTURING DUMMY   CASE 1      EXECUTE "PHANTOM REFRESH.DASHBOARD.MTD.STATS ":TYPE.CALC CAPTURING DUMMYEND CASERETURN0004C7SUB.PORTAL.DAYS.TO.PAY.PIE0c2SUBROUTINE SUB.PORTAL.DAYS.TO.PAY.PIE**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FC2DPIE"W$WIDTH = 3W$TITLE = 'Chart - Days To Pay '*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEYEAR=WIDGET.USER.DATA(1)OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT ELSE RETURNREAD STATS.REC FROM FI.DICT, '*CURRENT.AR.STATS' ELSE RETURNWRITE 'READ' ON FI.DICT, 'DEBUG'LOCATE YEAR IN STATS.REC<6> SETTING YEAR.POS ELSE RETURNWRITEV YEAR.POS ON FI.DICT, 'DEBUG', 2NUMBERS=STATS.REC<7,YEAR.POS>WRITEV NUMBERS ON FI.DICT, 'DEBUG', 3TOT.NUMBERS=SUM(NUMBERS)TOT.NUMBERS=TOT.NUMBERS-NUMBERS<1,1,1>WRITEV TOT.NUMBERS ON FI.DICT, 'DEBUG', 4W$TITLE:=YEARDAYS.TYPES='0 - 30 Days,31 - 60 Days,61 - 90 Days,Over 90 Days'CONVERT ',' TO CHAR(253) IN DAYS.TYPESMAX.DAYS.TYPES=DCOUNT(DAYS.TYPES,CHAR(253))FOR DAYS.CNTR = 1 TO MAX.DAYS.TYPES   NUMBER=NUMBERS<1,1,DAYS.CNTR+1>   PCT=INT(NUMBER * 1000/TOT.NUMBERS + .5)   W$PIE.LABELS<1,DAYS.CNTR>=DAYS.TYPES<1,DAYS.CNTR>   W$PIE.VALUES<1,DAYS.CNTR>=(PCT/10) NEXT DAYS.CNTRW$PIE.CAPTION='Days To Pay By Period For ':YEAR***RETURN0001CDSUB.PORTAL.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) Zumasys, Inc*W$TITLE='Portal Documentation'W$TYPE='HTML'W$WIDTH = 1                    ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FILE.WEB.FORMS, 'PORTAL.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORMRETURN000D3BSUB.PORTAL.MARGINS0c2SUBROUTINE SUB.PORTAL.MARGINS** DEFINE PARAMETERS FOR PORTAL SALES REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOPDIM SETUP.PARAMS(25)*W$TITLE = "Portal Year to Year Margins"; CALL PORTAL.SHOW.LAST.UPDATED('SALES')W$TYPE = "HTML"W$WIDTH = 2D3=1*IF G$QUERYMODE THEN RETURN**OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE    ERROR.MSG='UNABLE TO OPEN MVDB.CONTROL'   GOTO DISPLAY.ERROR ENDOPEN '','DASHBOARD.CLOSING.STATS' TO FI.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR END*READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'END CASE**W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'*OTODAY=OCONV(DATE(),'D4-')*YEAR.TO.YEAR.MARGIN.PERCENTS:*W$TYPE='FCCOLUMN3D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYY BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'YEAR.TO.YEAR.REPORT'YEAR.TOTALS=''YEAR.GROSS.PROFITS=''YEARS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))YEAR.CNTR=0FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YEAR=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         IF AMOUNT OR GROSS.PROFIT THEN            YEAR.CNTR+=1            YEARS<YEAR.CNTR>=YEAR            AMOUNT=ICONV(AMOUNT,'MD2')            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            YEAR.TOTALS<YEAR.CNTR>=AMOUNT            YEAR.GROSS.PROFITS<YEAR.CNTR>=GROSS.PROFIT          END       END    ENDNEXT ROW.NOYEAR.TOTALS<YEAR.CNTR+1>=SUM(YEAR.TOTALS)YEAR.GROSS.PROFITS<YEAR.CNTR+1>=SUM(YEAR.GROSS.PROFITS)YEARS<YEAR.CNTR+1>='Average'*W$BAR.CAPTION = 'Year by Year Margin Percents'W$BAR.XMEMO = "Year"W$BAR.YMEMO = 'Margin Percents'*MAX.YEARS=DCOUNT(YEARS,CHAR(254))FOR YEAR.NO = 1 TO MAX.YEARS   YEAR.TOTAL=YEAR.TOTALS<YEAR.NO>   YEAR.GROSS.PROFIT=YEAR.GROSS.PROFITS<YEAR.NO>   MARGIN=INT(YEAR.GROSS.PROFIT * 1000 / YEAR.TOTAL + .5)   W$BAR.VALUES<1,YEAR.NO>=OCONV(MARGIN+0,'MD1')   W$BAR.XLABELS<1,YEAR.NO>=YEARS<YEAR.NO> NEXT YEAR.NORETURN*DISPLAY.ERROR:*W$HTML.DATA='<h3>':ERROR.MSG:'</h3>'RETURN**RETURNEND0002FASUB.PORTAL.REPORTS.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.REPORTS.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Portal Reports Documentation"W$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here*OPEN '','WEB.FORMS' TO FI.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FI.WEB.FORMS, 'PORTAL.REPORT.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN0002FESUB.PORTAL.RUN.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.RUN.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Running the Portal Dashboard Reports"W$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here*OPEN '','WEB.FORMS' TO FI.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FI.WEB.FORMS, 'PORTAL.REPORT.RUN.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00552DSUB.PORTAL.SALES.REPORT.SETUP0c2SUBROUTINE SUB.PORTAL.SALES.REPORT.SETUP** DEFINE PARAMETERS FOR PORTAL SALES REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOP*W$TITLE = "Portal Sales Report Setup"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*EQUATE ACCOUNT TO WIDGET.USER.DATA(1)EQUATE REPORT.FILE TO WIDGET.USER.DATA(2)EQUATE SALE.DATE.DICT TO WIDGET.USER.DATA(3)EQUATE SALE.MONTH.DICT TO WIDGET.USER.DATA(4)EQUATE SALE.YEAR.DICT TO WIDGET.USER.DATA(5)EQUATE SALE.AMOUNT.DICT TO WIDGET.USER.DATA(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO WIDGET.USER.DATA(7)EQUATE SALESMAN.DICT TO WIDGET.USER.DATA(8)EQUATE BRANCH.DICT TO WIDGET.USER.DATA(9)EQUATE REGION.DICT TO WIDGET.USER.DATA(10)EQUATE SALE.DATE.AMC TO WIDGET.USER.DATA(11)EQUATE SALE.AMOUNT.AMC TO WIDGET.USER.DATA(12)EQUATE SALE.AMOUNT.CONV TO WIDGET.USER.DATA(13)EQUATE SALE.AMOUNT.COOR TO WIDGET.USER.DATA(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO WIDGET.USER.DATA(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO WIDGET.USER.DATA(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO WIDGET.USER.DATA(17)EQUATE SALESMAN.AMC TO WIDGET.USER.DATA(18)EQUATE SALESMAN.TFILE TO WIDGET.USER.DATA(19)EQUATE BRANCH.AMC TO WIDGET.USER.DATA(20)EQUATE BRANCH.TFILE TO WIDGET.USER.DATA(21)EQUATE REGION.AMC TO WIDGET.USER.DATA(22)EQUATE REGION.TFILE TO WIDGET.USER.DATA(23)OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE   MESSAGE='No Platform Type Defined'   GOTO MESSAGE.DISPLAY ENDFIRST.TIME=0IF G$SUBMITTED <> '1' THEN   IF PLATFORM = 'UV' OR PLATFORM = 'UD' THEN      OPEN '','UD.DICT.DASHBOARD.CLOSING.STATS' TO FI THEN         OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END      OPEN '','UD.DICT.SALES' TO FI THEN         OPEN 'DICT','PORTAL.SALES' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END      OPEN '','UD.DICT.AR' TO FI THEN         OPEN 'DICT','PORTAL.AR' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END      OPEN '','UD.DICT.AP' TO FI THEN         OPEN 'DICT','PORTAL.AP' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END    END   MATREAD WIDGET.USER.DATA FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE      MAT WIDGET.USER.DATA = ''      FIRST.TIME=1    END   IF NOT(FIRST.TIME) THEN      GOSUB VALIDATE.PREVIOUS.INPUTS    END END ELSE   GOSUB VALIDATE.PREVIOUS.INPUTS   MATWRITE WIDGET.USER.DATA ON FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ENDGOSUB SET.PROMPTSRETURN*SET.PROMPTS:*W$INPUT.PROMPT<1> = "Sales File Account"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = ACCOUNT*W$INPUT.PROMPT<2> = "Name Of Sales File"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = REPORT.FILE*W$INPUT.PROMPT<3> = "Date Of Sale Dict Name"W$INPUT.TYPE<3> = 'TEXT'W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = SALE.DATE.DICT*W$INPUT.PROMPT<4> = "Month Of Sale Dict Name"W$INPUT.TYPE<4> = 'TEXT'W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = SALE.MONTH.DICT*W$INPUT.PROMPT<5> = "Year Of Sale Dict Name"W$INPUT.TYPE<5> = 'TEXT'W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = SALE.YEAR.DICT*W$INPUT.PROMPT<6> = "Amount Of Sale Dict Name"W$INPUT.TYPE<6> = 'TEXT'W$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = SALE.AMOUNT.DICT*W$INPUT.PROMPT<7> = "Cost Of Sale Dict Name"W$INPUT.TYPE<7> = 'TEXT'W$INPUT.UDPOS<7> = 7W$INPUT.DEFAULT<7> = COST.OF.SALE.AMOUNT.DICT*W$INPUT.PROMPT<8> = "Salesman Dict Name"W$INPUT.TYPE<8> = 'TEXT'W$INPUT.UDPOS<8> = 8W$INPUT.DEFAULT<8> = SALESMAN.DICT*W$INPUT.PROMPT<9> = "Branch Dict Name"W$INPUT.TYPE<9> = 'TEXT'W$INPUT.UDPOS<9> = 9W$INPUT.DEFAULT<9> = BRANCH.DICT*W$INPUT.PROMPT<10> = "Region Dict Name"W$INPUT.TYPE<10> = 'TEXT'W$INPUT.UDPOS<10> = 10W$INPUT.DEFAULT<10> = REGION.DICT*RETURN*VALIDATE.PREVIOUS.INPUTS:*MESSAGE=''BEGIN CASE   CASE PLATFORM = 'D3'      MD.TYPE='MD'   CASE PLATFORM = 'JB'      MD.TYPE='MD'   CASE 1      MD.TYPE='VOC'END CASEOPEN '',MD.TYPE TO FI.MD ELSE   MESSAGE='Unable to open ':MD.TYPE:' for validation purposes'   GOTO MESSAGE.DISPLAY ENDVALID.ACCOUNT=1IF ACCOUNT <> '' THEN**   EXECUTE "SET-FILE ":ACCOUNT:" ":MD.TYPE:' QFILE' CAPTURING DUMMY     QFILE.NAME='QFILE'   CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)   IF QFILE.NAME = '' THEN      MESSAGE<-1>=ACCOUNT:' is not a valid account!'      VALID.ACCOUNT=0    END**   IF PLATFORM = 'UD' THEN**      QFILE.NAME='QFILE'**      CALL CREATE.UD.QPOINTER(ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)**      IF QFILE.NAME = '' THEN**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END ELSE**      WRITE 'Q':@AM:ACCOUNT:@AM:MD.TYPE ON FI.MD, 'QFILE'**      VALID.ACCOUNT=1**      OPEN '','QFILE' TO FI.ACCOUNT.MD ELSE**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END END ELSE   VALID.ACCOUNT=0   MESSAGE<-1>='No Account defined!' ENDIF REPORT.FILE <> '' THEN   IF NOT(VALID.ACCOUNT) THEN      MESSAGE<-1>='Unable to verify ':REPORT.FILE:' file because account not properly defined!'      VALID.REPORT.FILE=0    END ELSE      VALID.REPORT.FILE=1      QFILE.NAME='QFILE'      CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)      IF QFILE.NAME = '' THEN         MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'         VALID.REPORT.FILE=0       END**      EXECUTE "SET-FILE ":ACCOUNT:" ":REPORT.FILE:' QFILE' CAPTURING DUMMY**       IF PLATFORM = 'UD' THEN**          QFILE.NAME='QFILE'**          CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)**          IF QFILE.NAME = '' THEN**             MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**             VALID.REPORT.FILE=0**           END**        END ELSE**         WRITE 'Q':@AM:ACCOUNT:@AM:REPORT.FILE ON FI.MD, 'QFILE'**         OPEN '','QFILE' TO FI.REPORT.FILE ELSE**            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**            VALID.REPORT.FILE=0**          END**       END      IF VALID.REPORT.FILE THEN         HAVE.QFILE.REC=1         READ QFILE.REC FROM FI.MD, 'QFILE' ELSE            HAVE.QFILE.REC=0            MESSAGE<-1>='Unable to create QFILE pointer to ':ACCOUNT:' ':REPORT.FILE          END         IF HAVE.QFILE.REC THEN            WRITE QFILE.REC ON FI.MD, 'DASHBOARD.SALES.FILE'            OPEN 'DICT','DASHBOARD.SALES.FILE' TO FI.DICT.REPORT.FILE ELSE                MESSAGE<-1>='Unable to open DICT ':REPORT.FILE             END          END       END    END END ELSE   MESSAGE<-1>='No Sales Report file defined!' ENDIF SALE.DATE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Date Of Sale Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.DATE.DICT:' Because No Sales File!'    END ELSE      READ SALE.DATE.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.DATE.DICT ELSE         SALE.DATE.DICT.REC=''         MESSAGE<-1>=SALE.DATE.DICT:' Does Not Exist!'       END      IF SALE.DATE.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=SALE.DATE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF SALE.DATE.DICT.REC<7>[1,1] <> 'D' AND SALE.DATE.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               SALE.DATE.AMC=SALE.DATE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF SALE.DATE.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               SALE.DATE.AMC=SALE.DATE.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               SALE.DATE.AMC=SALE.DATE.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.DATE.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF SALE.AMOUNT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Sale Amount Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.AMOUNT.DICT:' Because No Sales File!'    END ELSE      READ SALE.AMOUNT.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.AMOUNT.DICT ELSE         SALE.AMOUNT.DICT.REC=''         MESSAGE<-1>=SALE.AMOUNT.DICT:' Does Not Exist!'       END      IF SALE.AMOUNT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=SALE.AMOUNT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=SALE.AMOUNT.DICT.REC<7>[1,2]               DICT.8.1.2=SALE.AMOUNT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               SALE.AMOUNT.AMC=SALE.AMOUNT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=SALE.AMOUNT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               SALE.AMOUNT.AMC=SALE.AMOUNT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               SALE.AMOUNT.AMC=SALE.AMOUNT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.AMOUNT.DICT:' Does Not Appear To Be An Amount!'          END       END    ENDIF COST.OF.SALE.AMOUNT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Cost of Sale Amount Dictionary Defined - Gross Profit and Margin reporting will not be possible'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":COST.OF.SALE.AMOUNT.DICT:' Because No Sales File!'    END ELSE      READ COST.OF.SALE.AMOUNT.DICT.REC FROM FI.DICT.REPORT.FILE, COST.OF.SALE.AMOUNT.DICT ELSE         COST.OF.SALE.AMOUNT.DICT.REC=''         MESSAGE<-1>=COST.OF.SALE.AMOUNT.DICT:' Does Not Exist!'       END      IF COST.OF.SALE.AMOUNT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=COST.OF.SALE.AMOUNT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=COST.OF.SALE.AMOUNT.DICT.REC<7>[1,2]               DICT.8.1.2=COST.OF.SALE.AMOUNT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               COST.OF.SALE.AMOUNT.AMC=COST.OF.SALE.AMOUNT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=COST.OF.SALE.AMOUNT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               COST.OF.SALE.AMOUNT.AMC=COST.OF.SALE.AMOUNT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               COST.OF.SALE.AMOUNT.AMC=COST.OF.SALE.AMOUNT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':COST.OF.SALE.AMOUNT.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF SALE.MONTH.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Month Of Sale Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.MONTH.DICT:' Because No Sales File!'    END ELSE      READ SALE.MONTH.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.MONTH.DICT ELSE         SALE.MONTH.DICT.REC=''         MESSAGE<-1>=SALE.MONTH.DICT:' Does Not Exist!'       END      IF SALE.MONTH.DICT.REC <> '' THEN         VALID.MONTH.DICT=1         DICT.TYPE=SALE.MONTH.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF SALE.MONTH.DICT.REC<7>[1,1] <> 'D' AND SALE.MONTH.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.MONTH.DICT=0                END               SALE.MONTH.AMC=SALE.MONTH.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF SALE.MONTH.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.MONTH.DICT=0                END               SALE.MONTH.AMC=SALE.MONTH.DICT.REC<2>            CASE 1               VALID.MONTH.DICT=0               SALE.MONTH.AMC=SALE.MONTH.DICT.REC<2>         END CASE         IF NOT(VALID.MONTH.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.MONTH.DICT:' Does Not Appear To Be A Date Month!'          END       END    END ENDIF SALE.YEAR.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Year Of Sale Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.YEAR.DICT:' Because No Sales File!'    END ELSE      READ SALE.YEAR.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.YEAR.DICT ELSE         SALE.YEAR.DICT.REC=''         MESSAGE<-1>=SALE.YEAR.DICT:' Does Not Exist!'       END      IF SALE.YEAR.DICT.REC <> '' THEN         VALID.YEAR.DICT=1         DICT.TYPE=SALE.YEAR.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF SALE.YEAR.DICT.REC<7>[1,1] <> 'D' AND NOT(INDEX(SALE.YEAR.DICT.REC<8>,'D',1)) THEN                  VALID.YEAR.DICT=0                END               SALE.YEAR.AMC=SALE.YEAR.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               ATT2=SALE.YEAR.DICT.REC<2>               IF INDEX(ATT2,"'D",1) OR INDEX(ATT2,'"D',1) OR ATT2[1,1] = 'D' THEN                  VALID.YEAR.DICT=1                END ELSE                  VALID.YEAR.DICT=0                END            CASE 1               VALID.YEAR.DICT=0               SALE.YEAR.AMC=SALE.YEAR.DICT.REC<2>         END CASE         IF NOT(VALID.YEAR.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.YEAR.DICT:' Does Not Appear To Be A Date Year!'          END       END    END ENDIF SALESMAN.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Salesman Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALESMAN.DICT:' Because No Sales File!'    END ELSE      READ SALESMAN.DICT.REC FROM FI.DICT.REPORT.FILE, SALESMAN.DICT ELSE         SALESMAN.DICT.REC=''         MESSAGE<-1>=SALESMAN.DICT:' Does Not Exist!'       END      IF SALESMAN.DICT.REC <> '' THEN         VALID.SALESMAN.DICT=1         DICT.TYPE=SALESMAN.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF SALESMAN.DICT.REC<7>[1,1] <> 'T' AND SALESMAN.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.SALESMAN.DICT=0                END ELSE                  IF SALESMAN.DICT.REC<7>[1,1] = 'T' THEN                     SALESMAN.TFILE=SALESMAN.DICT.REC<7>                   END ELSE                     SALESMAN.TFILE=SALESMAN.DICT.REC<8>                   END                END               SALESMAN.AMC=SALESMAN.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(SALESMAN.DICT.REC<3>,'TRANS',1) THEN                  VALID.SALESMAN.DICT=0                END ELSE                  SALESMAN.TFILE=SALESMAN.DICT.REC<3>                END               SALE.SALESMAN.AMC=SALESMAN.DICT.REC<2>            CASE 1               VALID.SALESMAN.DICT=0               SALE.SALESMAN.AMC=SALESMAN.DICT.REC<2>         END CASE         IF NOT(VALID.SALESMAN.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALESMAN.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDIF BRANCH.DICT <> '' THEN   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":BRANCH.DICT:' Because No Sales File!'    END ELSE      READ BRANCH.DICT.REC FROM FI.DICT.REPORT.FILE, BRANCH.DICT ELSE         BRANCH.DICT.REC=''         MESSAGE<-1>=BRANCH.DICT:' Does Not Exist!'       END      IF BRANCH.DICT.REC <> '' THEN         VALID.BRANCH.DICT=1         DICT.TYPE=BRANCH.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF BRANCH.DICT.REC<7>[1,1] <> 'T' AND BRANCH.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.BRANCH.DICT=0                END ELSE                  IF BRANCH.DICT.REC<7>[1,1] = 'T' THEN                     BRANCH.TFILE=BRANCH.DICT.REC<7>                   END ELSE                     BRANCH.TFILE=BRANCH.DICT.REC<8>                   END                END               BRANCH.AMC=BRANCH.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(BRANCH.DICT.REC<3>,'TRANS',1) THEN                  VALID.BRANCH.DICT=0                END ELSE                  BRANCH.TFILE=BRANCH.DICT.REC<3>                END               SALE.BRANCH.AMC=BRANCH.DICT.REC<2>            CASE 1               VALID.BRANCH.DICT=0               SALE.BRANCH.AMC=BRANCH.DICT.REC<2>         END CASE         IF NOT(VALID.BRANCH.DICT) THEN            MESSAGE<-1>='Dictionary Item ':BRANCH.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDIF REGION.DICT <> '' THEN   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":REGION.DICT:' Because No Sales File!'    END ELSE      READ REGION.DICT.REC FROM FI.DICT.REPORT.FILE, REGION.DICT ELSE         REGION.DICT.REC=''         MESSAGE<-1>=REGION.DICT:' Does Not Exist!'       END      IF REGION.DICT.REC <> '' THEN         VALID.REGION.DICT=1         DICT.TYPE=REGION.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF REGION.DICT.REC<7>[1,1] <> 'T' AND REGION.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.REGION.DICT=0                END ELSE                  IF REGION.DICT.REC<7>[1,1] = 'T' THEN                     REGION.TFILE=REGION.DICT.REC<7>                   END ELSE                     REGION.TFILE=REGION.DICT.REC<8>                   END                END               REGION.AMC=REGION.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(REGION.DICT.REC<3>,'TRANS',1) THEN                  VALID.REGION.DICT=0                END ELSE                  REGION.TFILE=REGION.DICT.REC<3>                END               SALE.REGION.AMC=REGION.DICT.REC<2>            CASE 1               VALID.REGION.DICT=0               SALE.REGION.AMC=REGION.DICT.REC<2>         END CASE         IF NOT(VALID.REGION.DICT) THEN            MESSAGE<-1>='Dictionary Item ':REGION.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDCREATE.INDEXES=1IF MESSAGE = '' THEN   MESSAGE='Sales Report parameters properly defined!' END ELSE   IF INDEX(MESSAGE,'!',1) THEN      MESSAGE=INSERT(MESSAGE,1,0,0,'!!! ERRORS !!!')      CREATE.INDEXES=0    END ENDIF CREATE.INDEXES THEN   * CREATE PIPE DICTIONARY ITEM   IF PLATFORM = 'D3' OR PLATFORM = 'QM' OR PLATFORM = 'JB' THEN      PIPE='A'      PIPE<2>=0      PIPE<3>=' '      PIPE<8>='F;C|'      PIPE<9>='L'      PIPE<10>=1    END ELSE      PIPE='I'      PIPE<2>='"|"'      PIPE<4>='|'      PIPE<5>='1L'      PIPE<6>='S'    END   WRITE PIPE ON FI.DICT.REPORT.FILE, 'PIPE'   *   ** INDEX LOGIC   *   BEGIN CASE      CASE PLATFORM = 'D3'         INDEX.TEST='A':SALE.DATE.AMC:'(DY):':SALE.DATE.AMC:'(DM)'         READ FILE.DEF.REC FROM FI.DICT.REPORT.FILE, REPORT.FILE ELSE FILE.DEF.REC=''         IF FILE.DEF.REC <> '' AND NOT(INDEX(FILE.DEF.REC<8>,INDEX.TEST,1)) THEN            MESSAGE<-1>='Creating Indexes'            CMND1="CREATE-INDEX DASHBOARD.SALES.FILE A":SALE.DATE.AMC            EXECUTE CMND1 CAPTURING RESULT1            CMND2="CREATE-INDEX DASHBOARD.SALES.FILE ":INDEX.TEST            EXECUTE CMND2 CAPTURING RESULT2          END      CASE 1         EXECUTE "CREATE-INDEX DASHBOARD.SALES.FILE ":SALE.DATE.DICT CAPTURING RESULT1   END CASE ENDGOSUB MESSAGE.DISPLAYRETURN*MESSAGE.DISPLAY:*MAX.MSG=DCOUNT(MESSAGE,CHAR(254))W$HTML.DATA='<h3>':MESSAGE<1>IF MAX.MSG > 1 THEN   FOR MSG.NO = 2 TO MAX.MSG      W$HTML.DATA:='<br>':MESSAGE<MSG.NO>    NEXT MSG.NO ENDW$HTML.DATA:='</h3>'RETURNEND00B526SUB.PORTAL.SALES.REPORTS0c2SUBROUTINE SUB.PORTAL.SALES.REPORTS** DEFINE PARAMETERS FOR PORTAL SALES REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOPDIM SETUP.PARAMS(25)*W$TITLE = "Portal Sales Reports"; CALL PORTAL.SHOW.LAST.UPDATED('SALES')W$TYPE = "HTML"W$WIDTH = 3D3=1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEW$BAR.COLORS<1,5>=COLOR$YELLOWALF.MONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'EQUATE REPORT.TYPE TO WIDGET.USER.DATA(1)*IF REPORT.TYPE = '' THEN REPORT.TYPE='MTD Sales'*OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE    ERROR.MSG='UNABLE TO OPEN MVDB.CONTROL'   GOTO DISPLAY.ERROR ENDOPEN '','DASHBOARD.CLOSING.STATS' TO FI.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' ENDEQUATE ACCOUNT TO SETUP.PARAMS(1)EQUATE REPORT.FILE TO SETUP.PARAMS(2)EQUATE SALE.DATE.DICT TO SETUP.PARAMS(3)EQUATE SALE.MONTH.DICT TO SETUP.PARAMS(4)EQUATE SALE.YEAR.DICT TO SETUP.PARAMS(5)EQUATE SALE.AMOUNT.DICT TO SETUP.PARAMS(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO SETUP.PARAMS(7)EQUATE SALESMAN.DICT TO SETUP.PARAMS(8)EQUATE BRANCH.DICT TO SETUP.PARAMS(9)EQUATE REGION.DICT TO SETUP.PARAMS(10)EQUATE SALE.DATE.AMC TO SETUP.PARAMS(11)EQUATE SALE.AMOUNT.AMC TO SETUP.PARAMS(12)EQUATE SALE.AMOUNT.CONV TO SETUP.PARAMS(13)EQUATE SALE.AMOUNT.COOR TO SETUP.PARAMS(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO SETUP.PARAMS(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO SETUP.PARAMS(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO SETUP.PARAMS(17)EQUATE SALESMAN.AMC TO SETUP.PARAMS(18)EQUATE SALESMAN.TFILE TO SETUP.PARAMS(19)EQUATE BRANCH.AMC TO SETUP.PARAMS(20)EQUATE BRANCH.TFILE TO SETUP.PARAMS(21)EQUATE REGION.AMC TO SETUP.PARAMS(22)EQUATE REGION.TFILE TO SETUP.PARAMS(23)*READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='MD'END CASEOPEN '',MD.FILE.NAME TO FI.MD ELSE   ERROR.MSG='UNABLE TO OPEN ':MD.FILE.NAME   GOTO DISPLAY.ERROR END*IF ACCOUNT = '' OR REPORT.FILE = '' OR SALE.DATE.DICT = '' OR SALE.AMOUNT.DICT = '' THEN   ERROR.MSG='SALES FILE ACCOUNT, SALES FILE NAME, DATE OF SALE, AND AMOUNT OF SALE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'   GOTO DISPLAY.ERROR END*SALES.FILE.PATH='SALES.FILE.PATH'OPEN '',SALES.FILE.PATH TO FI.SALES.FILE.PATH ELSE**   EXECUTE "SET-FILE ":ACCOUNT:" ":REPORT.FILE CAPTURING DUMMY   QFILE.NAME=SALES.FILE.PATH   CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.SALES.FILE.PATH)   IF QFILE.NAME = '' THEN      MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'      GOTO DISPLAY.ERROR    END**    IF PLATFORM = 'UD' THEN**       QFILE.NAME='SALES.FILE.PATH'**       CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.SALES.FILE.PATH)**       IF QFILE.NAME = '' THEN**          ERROR.MSG='UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT'**          GOTO DISPLAY.ERROR**        END**     END ELSE**    **   READ MD.QFILE FROM FI.MD, 'QFILE' ELSE**    **      ERROR.MSG='UNABLE TO CREATE QFILE TO SALES FILE'**    **      GOTO DISPLAY.ERROR**    **    END**       MD.QFILE='Q'**       MD.QFILE<2>=ACCOUNT**       MD.QFILE<3>=REPORT.FILE**       WRITE MD.QFILE ON FI.MD, 'SALES.FILE.PATH'**       OPEN '','SALES.FILE.PATH' TO FI.SALES.FILE.PATH ELSE**          ERROR.MSG='UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT'**          GOTO DISPLAY.ERROR**        END**     END   EXECUTE "CREATE-INDEX SALES.FILE.PATH ":SALE.DATE.DICT CAPTURING DUMMY END*W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'*OTODAY=OCONV(DATE(),'D4-')*BEGIN CASE   CASE REPORT.TYPE = 'MTD Sales'; GOSUB MTD.SALES   CASE REPORT.TYPE = 'YTD Sales'; GOSUB YTD.SALES   CASE REPORT.TYPE = 'Year to Year Sales and GP'; GOSUB YEAR.TO.YEAR.SALES   CASE REPORT.TYPE = 'Year to Year Sales by Month'; GOSUB YEAR.TO.YEAR.SALES.BY.MONTH   CASE REPORT.TYPE = 'Year to Year GP by Month'; GOSUB YEAR.TO.YEAR.GP.BY.MONTH   CASE REPORT.TYPE = 'MTD Sales by Salesman'; GOSUB MTD.SALES.BY.SALESMAN   CASE REPORT.TYPE = 'YTD Sales by Salesman'; GOSUB YTD.SALES.BY.SALESMAN   CASE REPORT.TYPE = 'Year to Year Sales by Salesman'; GOSUB YEAR.TO.YEAR.BY.SALESMAN   CASE REPORT.TYPE = 'Year to Year GP by Salesman'; GOSUB YEAR.TO.YEAR.GP.BY.SALESMAN   CASE REPORT.TYPE = 'MTD Sales by Branch'; GOSUB MTD.SALES.BY.BRANCH   CASE REPORT.TYPE = 'YTD Sales by Branch'; GOSUB YTD.SALES.BY.BRANCH   CASE REPORT.TYPE = 'Year to Year Sales by Branch'; GOSUB YEAR.TO.YEAR.BY.BRANCH   CASE REPORT.TYPE = 'Year to Year GP by Branch'; GOSUB YEAR.TO.YEAR.GP.BY.BRANCH   CASE REPORT.TYPE = 'MTD Sales by Region'; GOSUB MTD.SALES.BY.REGION   CASE REPORT.TYPE = 'YTD Sales by Region'; GOSUB YTD.SALES.BY.REGION   CASE REPORT.TYPE = 'Year to Year Sales by Region'; GOSUB YEAR.TO.YEAR.BY.REGION   CASE REPORT.TYPE = 'Year to Year GP by Region'; GOSUB YEAR.TO.YEAR.GP.BY.REGIONEND CASE*W$INPUT.PROMPT<1> = "Report Type"W$INPUT.TYPE<1> = "SELECT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = REPORT.TYPESELOPTS='MTD Sales'SELOPTS<1,-1>='YTD Sales'SELOPTS<1,-1>='Year to Year Sales and GP'SELOPTS<1,-1>='Year to Year Sales by Month'SELOPTS<1,-1>='Year to Year GP by Month'SELOPTS<1,-1>='MTD Sales by Salesman'SELOPTS<1,-1>='YTD Sales by Salesman'SELOPTS<1,-1>='Year to Year Sales by Salesman'SELOPTS<1,-1>='Year to Year GP by Salesman'IF BRANCH.DICT <> '' THEN   SELOPTS<1,-1>='MTD Sales by Branch'   SELOPTS<1,-1>='YTD Sales by Branch'   SELOPTS<1,-1>='Year to Year Sales by Branch'   SELOPTS<1,-1>='Year to Year GP by Branch' ENDIF REGION.DICT <> '' THEN   SELOPTS<1,-1>='MTD Sales by Region'   SELOPTS<1,-1>='YTD Sales by Region'   SELOPTS<1,-1>='Year to Year Sales by Region'   SELOPTS<1,-1>='Year to Year GP by Region' ENDW$INPUT.SELOPTS=SELOPTSW$INPUT.SELVALS=SELOPTSRETURN*DISPLAY.ERROR:*W$HTML.DATA='<h3>':ERROR.MSG:'</h3>'RETURN*MTD.SALES:*GET.REPORT.TYPE='SALES'; GOSUB GET.CURRENT.REPORTIF REPORT.STATS.REC[1,5] = 'ERROR' OR REPORT.STATS.REC<1> = '' THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Date"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'DATES=REPORT.STATS.REC<1>NUM.DATES=DCOUNT(DATES,CHAR(253))AMOUNTS=REPORT.STATS.REC<2>SUM.AMOUNTS=SUM(AMOUNTS)COST.OF.SALES=REPORT.STATS.REC<3>SUM.COST.OF.SALES=SUM(COST.OF.SALES)SUM.GROSS.PROFIT=SUM.AMOUNTS-SUM.COST.OF.SALESW$BAR.YMEMO='Total Sales and Gross Profits'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM.AMOUNTS,'MD2,$'):" and Gross Profit of ":OCONV(SUM.GROSS.PROFIT,'MD2,$'):" by Date"IF NUM.DATES > 20 THEN   W$TYPE='FCMSBAR2D'   START.CNTR=NUM.DATES   END.CNTR=1   STEP.CNTR=(-1) END ELSE   W$TYPE='FCMSCOLUMN2D'   START.CNTR=1   END.CNTR=NUM.DATES   STEP.CNTR=1 ENDVALUE.CNTR=0FOR AMT.CNTR = START.CNTR TO END.CNTR STEP STEP.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT THEN      COST.OF.SALE=COST.OF.SALES<1,AMT.CNTR>      GROSS.PROFIT=AMOUNT-COST.OF.SALE      IF GROSS.PROFIT < 0 THEN GROSS.PROFIT=0      VALUE.CNTR+=1      ROW.DATE=ICONV(DATES<1,AMT.CNTR>,'D')      ROW.DATE=OCONV(ROW.DATE,'D0')      W$BAR.XLABELS<1,VALUE.CNTR>=ROW.DATE      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE DATES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYYMM BREAK-ON YYYYMM PIPE DET-SUPP TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Month"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'MONTHS=''MONTH.CNTR=0LAST.MONTH=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      MONTH=TRIM(FIELD(ROW,'|',1))[5,2]+0      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      GROSS.PROFIT=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         IF MONTH <> LAST.MONTH THEN            LAST.MONTH=MONTH            MONTH.CNTR+=1            MONTHS<1,MONTH.CNTR>=MONTH            AMOUNTS<1,MONTH.CNTR>=0            GROSS.PROFITS<1,MONTH.CNTR>=0          END         AMOUNTS<1,MONTH.CNTR>+=AMOUNT         GROSS.PROFITS<1,MONTH.CNTR>+=GROSS.PROFIT       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):"  And Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" By Month"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))W$TYPE='FCMSCOLUMN2D'VALUE.CNTR=0FOR AMT.CNTR = 1 TO YTD.MO   AMOUNT=AMOUNTS<1,AMT.CNTR>   GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>   IF AMOUNT > 0 AND GROSS.PROFIT >= 0 THEN      VALUE.CNTR+=1      MONTH=FIELD(ALF.MONTHS,',',AMT.CNTR)      W$BAR.XLABELS<1,VALUE.CNTR>=MONTH      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTRRETURN*YEAR.TO.YEAR.SALES:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSCOLUMN2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYY BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'YEAR.TO.YEAR.REPORT'YEAR.TOTALS=''YEAR.GROSS.PROFITS=''YEARS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))YEAR.CNTR=0FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YEAR=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         IF AMOUNT OR GROSS.PROFIT THEN            YEAR.CNTR+=1            YEARS<YEAR.CNTR>=YEAR            AMOUNT=ICONV(AMOUNT,'MD2')            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            YEAR.TOTALS<YEAR.CNTR>=AMOUNT            YEAR.GROSS.PROFITS<YEAR.CNTR>=GROSS.PROFIT          END       END    ENDNEXT ROW.NO*W$BAR.CAPTION = "Sales and Gross Profit by Year"W$BAR.XMEMO = "Year"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'W$BAR.YMEMO = "Total Sales and Gross Profit"*MAX.YEARS=DCOUNT(YEARS,CHAR(254))FOR YEAR.NO = 1 TO MAX.YEARS   YEAR.TOTAL=YEAR.TOTALS<YEAR.NO>   YEAR.GROSS.PROFIT=YEAR.GROSS.PROFITS<YEAR.NO>   W$BAR.VALUES<1,YEAR.NO>=OCONV(YEAR.TOTAL+0,'MD2')   W$BAR.VALUES<2,YEAR.NO>=OCONV(YEAR.GROSS.PROFIT+0,'MD2')   W$BAR.XLABELS<1,YEAR.NO>=YEARS<YEAR.NO> NEXT YEAR.NORETURN*YEAR.TO.YEAR.SALES.BY.MONTH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSCOLUMN2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYYMM BREAK-ON YYYYMM PIPE TOTAL AMOUNT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.MO.TOTALS=''YEAR.NO=1MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YYYYMM=TRIM(FIELD(ROW,'|',1))      YEAR=YYYYMM[1,4]      MO.NO=YYYYMM[5,2]+0      AMOUNT=TRIM(FIELD(ROW,'|',2))      IF YEAR <> '' AND MO.NO AND NUM(AMOUNT) THEN         YEAR.NO=YEAR-FIRST.YEAR+1         IF AMOUNT THEN            AMOUNT=ICONV(AMOUNT,'MD2')            YEAR.MO.TOTALS<YEAR.NO,MO.NO>+=AMOUNT          END       END    END NEXT ROW.NO*FOR I = 0 TO 4   W$BAR.LABELS<I+1> = FIRST.YEAR+I   W$BAR.LABEL.OPTS<I+1> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Monthly Sales by Year"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Sales"*FOR MO.NO = 1 TO 12   FOR YEAR.NO = 1 TO 5      W$BAR.VALUES<YEAR.NO,MO.NO>=OCONV(YEAR.MO.TOTALS<YEAR.NO,MO.NO>+0,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,MO.NO>=FIELD(ALF.MONTHS,',',MO.NO) NEXT MO.NORETURN*YEAR.TO.YEAR.GP.BY.MONTH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSCOLUMN2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYYMM BREAK-ON YYYYMM PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.MO.TOTALS=''YEAR.NO=1MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YYYYMM=TRIM(FIELD(ROW,'|',1))      YEAR=YYYYMM[1,4]      MO.NO=YYYYMM[5,2]+0      GROSS.PROFIT=TRIM(FIELD(ROW,'|',2))      IF YEAR <> '' AND MO.NO AND NUM(GROSS.PROFIT) THEN         YEAR.NO=YEAR-FIRST.YEAR+1         IF GROSS.PROFIT THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            YEAR.MO.TOTALS<YEAR.NO,MO.NO>+=GROSS.PROFIT          END       END    END NEXT ROW.NO*FOR I = 0 TO 4   W$BAR.LABELS<I+1> = FIRST.YEAR+I   W$BAR.LABEL.OPTS<I+1> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Monthly Gross Profit by Year"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Gross Profit"*FOR MO.NO = 1 TO 12   FOR YEAR.NO = 1 TO 5      W$BAR.VALUES<YEAR.NO,MO.NO>=OCONV(YEAR.MO.TOTALS<YEAR.NO,MO.NO>+0,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,MO.NO>=FIELD(ALF.MONTHS,',',MO.NO) NEXT MO.NORETURN*MTD.SALES.BY.SALESMAN:**OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':SALESMAN.DICT:' BREAK-ON ':SALESMAN.DICT:' PIPE TOTAL ':SALE.AMOUNT.DICT:' PIPE TOTAL ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Salesman"SALESMEN=''SALESMAN.CNTR=0LAST.SALESMAN=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      SALESMAN=TRIM(FIELD(ROW,'|',1))      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      COST.OF.SALE=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(COST.OF.SALE) THEN         IF AMOUNT > 0 THEN            IF SALESMAN <> LAST.SALESMAN THEN               LAST.SALESMAN=SALESMAN               SALESMAN.CNTR+=1               SALESMEN<1,SALESMAN.CNTR>=SALESMAN               AMOUNTS<1,SALESMAN.CNTR>=0               GROSS.PROFITS<1,SALESMAN.CNTR>=0             END            GROSS.PROFIT=AMOUNT-COST.OF.SALE            AMOUNTS<1,SALESMAN.CNTR>+=AMOUNT            GROSS.PROFITS<1,SALESMAN.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profits of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Salesman"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))IF SALESMAN.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * SALESMAN.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDW$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'VALUE.CNTR=0FOR AMT.CNTR = 1 TO NUM.AMOUNTS   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT > 0 THEN      GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>      VALUE.CNTR+=1      SALESMAN=SALESMEN<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=SALESMAN      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE SALESMEN:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES.BY.SALESMAN:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY SALESMAN BREAK-ON SALESMAN PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Salesman"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'SALESMEN=''SALESMAN.CNTR=0LAST.SALESMAN=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      SALESMAN=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         AMOUNT=ICONV(AMOUNT,'MD2')         IF AMOUNT > 0 THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            IF SALESMAN <> LAST.SALESMAN THEN               LAST.SALESMAN=SALESMAN               SALESMAN.CNTR+=1               SALESMEN<1,SALESMAN.CNTR>=SALESMAN               AMOUNTS<1,SALESMAN.CNTR>=0               GROSS.PROFITS<1,SALESMAN.CNTR>=0             END            AMOUNTS<1,SALESMAN.CNTR>+=AMOUNT            GROSS.PROFITS<1,SALESMAN.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Salesman"IF SALESMAN.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * SALESMAN.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDVALUE.CNTR=0FOR AMT.CNTR = 1 TO SALESMAN.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>   IF AMOUNT THEN      VALUE.CNTR+=1      SALESMAN=SALESMEN<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=SALESMAN      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTRRETURN*YEAR.TO.YEAR.BY.SALESMAN:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY SALESMAN BY YYYY BREAK-ON SALESMAN PIPE BREAK-ON YYYY PIPE TOTAL AMOUNT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.SALESMAN.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))SALESMEN=''SALESMEN.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   NUM.PIPES=COUNT(ROW,'|')   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      SALESMAN=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND SALESMAN <> '' THEN; *      IF SALESMAN <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE SALESMAN IN SALESMEN SETTING SALESMAN.POS ELSE               SALESMEN.CNTR+=1               SALESMEN<SALESMEN.CNTR>=SALESMAN               SALESMAN.POS=SALESMEN.CNTR             END            YEAR.SALESMAN.TOTALS<SALESMAN.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            AMOUNT=TRIM(FIELD(ROW,'|',3))            IF NUM(AMOUNT) THEN               AMOUNT=ICONV(AMOUNT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=AMOUNT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Sales by Salesman"W$BAR.XMEMO = "Salesman"W$BAR.YMEMO = "Sales"W$CHART.HEIGHT = 200 + (70 * SALESMEN.CNTR)*FOR SALESMAN.NO = 1 TO SALESMEN.CNTR   FOR YEAR.NO = 1 TO 5      SALESMAN.YEAR.AMT=YEAR.SALESMAN.TOTALS<SALESMAN.NO,YEAR.NO>+0      IF SALESMAN.YEAR.AMT < 0 THEN SALESMAN.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,SALESMAN.NO>=OCONV(SALESMAN.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,SALESMAN.NO>=SALESMEN<SALESMAN.NO> NEXT SALESMAN.NORETURN*YEAR.TO.YEAR.GP.BY.SALESMAN:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY SALESMAN BY YYYY BREAK-ON SALESMAN PIPE BREAK-ON YYYY PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDWRITE STACKED.1:@AM:STACKED.2 ON FI.MVDB.SUBS, 'YEAR.TO.YEAR.CMND'WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.SALESMAN.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))SALESMEN=''SALESMEN.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      SALESMAN=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND SALESMAN <> '' THEN; *      IF SALESMAN <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE SALESMAN IN SALESMEN SETTING SALESMAN.POS ELSE               SALESMEN.CNTR+=1               SALESMEN<SALESMEN.CNTR>=SALESMAN               SALESMAN.POS=SALESMEN.CNTR             END            YEAR.SALESMAN.TOTALS<SALESMAN.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))            IF NUM(GROSS.PROFIT) THEN               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=GROSS.PROFIT             END          END       END    ENDWRITE SALESMEN ON FI.MVDB.SUBS, 'SALESMEN'WRITE YEAR.SALESMAN.TOTALS ON FI.MVDB.SUBS, 'YEAR.SALESMAN.TOTALS'WRITE YEAR.TOTALS ON FI.MVDB.SUBS, 'YEAR.TOTALS' NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Gross Profit by Salesman"W$BAR.XMEMO = "Salesman"W$BAR.YMEMO = "Gross Profit"W$CHART.HEIGHT = 200 + (70 * SALESMEN.CNTR)*FOR SALESMAN.NO = 1 TO SALESMEN.CNTR   FOR YEAR.NO = 1 TO 5      SALESMAN.YEAR.AMT=YEAR.SALESMAN.TOTALS<SALESMAN.NO,YEAR.NO>+0      IF SALESMAN.YEAR.AMT < 0 THEN SALESMAN.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,SALESMAN.NO>=OCONV(SALESMAN.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,SALESMAN.NO>=SALESMEN<SALESMAN.NO> NEXT SALESMAN.NORETURN**MTD.SALES.BY.BRANCH:**OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':BRANCH.DICT:' BREAK-ON ':BRANCH.DICT:' PIPE TOTAL ':SALE.AMOUNT.DICT:' PIPE TOTAL ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Branch"BRANCHES=''BRANCH.CNTR=0LAST.BRANCH=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      BRANCH=TRIM(FIELD(ROW,'|',1))      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      COST.OF.SALE=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(COST.OF.SALE) THEN         IF AMOUNT > 0 THEN            IF BRANCH <> LAST.BRANCH THEN               LAST.BRANCH=BRANCH               BRANCH.CNTR+=1               BRANCHES<1,BRANCH.CNTR>=BRANCH               AMOUNTS<1,BRANCH.CNTR>=0               GROSS.PROFITS<1,BRANCH.CNTR>=0             END            GROSS.PROFIT=AMOUNT-COST.OF.SALE            AMOUNTS<1,BRANCH.CNTR>+=AMOUNT            GROSS.PROFITS<1,BRANCH.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Branch"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))IF BRANCH.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * BRANCH.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDW$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'VALUE.CNTR=0FOR AMT.CNTR = 1 TO NUM.AMOUNTS   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT > 0 THEN      GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>      VALUE.CNTR+=1      BRANCH=BRANCHES<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=BRANCH      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE BRANCHES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES.BY.BRANCH:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY BRANCH BREAK-ON BRANCH PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Branch"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'BRANCHES=''BRANCH.CNTR=0LAST.BRANCH=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      BRANCH=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         AMOUNT=ICONV(AMOUNT,'MD2')         IF AMOUNT > 0 THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            IF BRANCH <> LAST.BRANCH THEN               LAST.BRANCH=BRANCH               BRANCH.CNTR+=1               BRANCHES<1,BRANCH.CNTR>=BRANCH               AMOUNTS<1,BRANCH.CNTR>=0               GROSS.PROFITS<1,BRANCH.CNTR>=0             END            AMOUNTS<1,BRANCH.CNTR>+=AMOUNT            GROSS.PROFITS<1,BRANCH.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Branch"IF BRANCH.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * BRANCH.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDVALUE.CNTR=0FOR AMT.CNTR = 1 TO BRANCH.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT THEN      VALUE.CNTR+=1      BRANCH=BRANCHES<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=BRANCH      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFITS<1,AMT.CNTR>,'MD2')    END NEXT AMT.CNTR**WRITE DATES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'YTD.SALES.TEST'RETURN*YEAR.TO.YEAR.BY.BRANCH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY BRANCH BY YYYY BREAK-ON BRANCH PIPE BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.BRANCH.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))BRANCHES=''BRANCHES.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      BRANCH=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND BRANCH <> '' THEN; *      IF BRANCH <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE BRANCH IN BRANCHES SETTING BRANCH.POS ELSE               BRANCHES.CNTR+=1               BRANCHES<BRANCHES.CNTR>=BRANCH               BRANCH.POS=BRANCHES.CNTR             END            YEAR.BRANCH.TOTALS<BRANCH.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            AMOUNT=TRIM(FIELD(ROW,'|',3))            GROSS.PROFIT=TRIM(FIELD(ROW,'|',4))            IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN               AMOUNT=ICONV(AMOUNT,'MD2')               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=AMOUNT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Sales by Branch"W$BAR.XMEMO = "Branch"W$BAR.YMEMO = "Total Sales and Gross Profit"W$CHART.HEIGHT = 200 + (50 * BRANCHES.CNTR)*FOR BRANCH.NO = 1 TO BRANCHES.CNTR   FOR YEAR.NO = 1 TO 5      BRANCH.YEAR.AMT=YEAR.BRANCH.TOTALS<BRANCH.NO,YEAR.NO>+0      IF BRANCH.YEAR.AMT < 0 THEN BRANCH.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,BRANCH.NO>=OCONV(BRANCH.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,BRANCH.NO>=BRANCHES<BRANCH.NO> NEXT BRANCH.NORETURN*YEAR.TO.YEAR.GP.BY.BRANCH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY BRANCH BY YYYY BREAK-ON BRANCH PIPE BREAK-ON YYYY PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.BRANCH.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))BRANCHES=''BRANCHES.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      BRANCH=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND BRANCH <> '' THEN; *      IF BRANCH <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE BRANCH IN BRANCHES SETTING BRANCH.POS ELSE               BRANCHES.CNTR+=1               BRANCHES<BRANCHES.CNTR>=BRANCH               BRANCH.POS=BRANCHES.CNTR             END            YEAR.BRANCH.TOTALS<BRANCH.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))            IF NUM(GROSS.PROFIT) THEN               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=GROSS.PROFIT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Gross Profit by Branch"W$BAR.XMEMO = "Branch"W$BAR.YMEMO = "Gross Profit"W$CHART.HEIGHT = 200 + (70 * BRANCHES.CNTR)*FOR BRANCH.NO = 1 TO BRANCHES.CNTR   FOR YEAR.NO = 1 TO 5      BRANCH.YEAR.AMT=YEAR.BRANCH.TOTALS<BRANCH.NO,YEAR.NO>+0      IF BRANCH.YEAR.AMT < 0 THEN BRANCH.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,BRANCH.NO>=OCONV(BRANCH.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,BRANCH.NO>=BRANCHES<BRANCH.NO> NEXT BRANCH.NORETURN*MTD.SALES.BY.REGION:**OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':REGION.DICT:' BREAK-ON ':REGION.DICT:' PIPE TOTAL ':SALE.AMOUNT.DICT:' PIPE TOTAL ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "REGION"REGIONS=''REGION.CNTR=0LAST.REGION=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      REGION=TRIM(FIELD(ROW,'|',1))      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      COST.OF.SALE=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(COST.OF.SALE) THEN         IF AMOUNT > 0 THEN            IF REGION <> LAST.REGION THEN               LAST.REGION=REGION               REGION.CNTR+=1               REGIONS<1,REGION.CNTR>=REGION               AMOUNTS<1,REGION.CNTR>=0               GROSS.PROFITS<1,REGION.CNTR>=0             END            GROSS.PROFIT=AMOUNT-COST.OF.SALE            AMOUNTS<1,REGION.CNTR>+=AMOUNT            GROSS.PROFITS<1,REGION.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Region"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))IF REGION.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * REGION.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDW$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'VALUE.CNTR=0FOR AMT.CNTR = 1 TO NUM.AMOUNTS   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT > 0 THEN      GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>      VALUE.CNTR+=1      REGION=REGIONS<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=REGION      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE REGIONS:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES.BY.REGION:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY REGION BREAK-ON REGION PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Region"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'REGIONS=''REGION.CNTR=0LAST.REGION=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      REGION=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         AMOUNT=ICONV(AMOUNT,'MD2')         IF AMOUNT > 0 THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            IF REGION <> LAST.REGION THEN               LAST.REGION=REGION               REGION.CNTR+=1               REGIONS<1,REGION.CNTR>=REGION               AMOUNTS<1,REGION.CNTR>=0               GROSS.PROFITS<1,REGION.CNTR>=0             END            AMOUNTS<1,REGION.CNTR>+=AMOUNT            GROSS.PROFITS<1,REGION.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Region"IF REGION.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * REGION.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDVALUE.CNTR=0FOR AMT.CNTR = 1 TO REGION.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT THEN      VALUE.CNTR+=1      REGION=REGIONS<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=REGION      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFITS<1,AMT.CNTR>,'MD2')    END NEXT AMT.CNTR**WRITE DATES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'YTD.SALES.TEST'RETURN**YEAR.TO.YEAR.BY.REGION:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY REGION BY YYYY BREAK-ON REGION PIPE BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.REGION.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))REGIONS=''REGIONS.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      REGION=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND REGION <> '' THEN; *      IF REGION <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE REGION IN REGIONS SETTING REGION.POS ELSE               REGIONS.CNTR+=1               REGIONS<REGIONS.CNTR>=REGION               REGION.POS=REGIONS.CNTR             END            YEAR.REGION.TOTALS<REGION.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            AMOUNT=TRIM(FIELD(ROW,'|',3))            IF NUM(AMOUNT) THEN               AMOUNT=ICONV(AMOUNT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=AMOUNT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Sales by Region"W$BAR.XMEMO = "Region"W$BAR.YMEMO = "Sales"W$CHART.HEIGHT = 200 + (50 * REGIONS.CNTR)*FOR REGION.NO = 1 TO REGIONS.CNTR   FOR YEAR.NO = 1 TO 5      REGION.YEAR.AMT=YEAR.REGION.TOTALS<REGION.NO,YEAR.NO>+0      IF REGION.YEAR.AMT < 0 THEN REGION.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,REGION.NO>=OCONV(REGION.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,REGION.NO>=REGIONS<REGION.NO> NEXT REGION.NORETURN*YEAR.TO.YEAR.GP.BY.REGION:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY REGION BY YYYY BREAK-ON REGION PIPE BREAK-ON YYYY PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.REGION.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))REGIONS=''REGIONS.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      REGION=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND REGION <> '' THEN; *      IF REGION <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE REGION IN REGIONS SETTING REGION.POS ELSE               REGIONS.CNTR+=1               REGIONS<REGIONS.CNTR>=REGION               REGION.POS=REGIONS.CNTR             END            YEAR.REGION.TOTALS<REGION.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))            IF NUM(GROSS.PROFIT) THEN               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=GROSS.PROFIT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Gross Profit by Region"W$BAR.XMEMO = "Region"W$BAR.YMEMO = "Gross Profit"W$CHART.HEIGHT = 200 + (70 * REGIONS.CNTR)*FOR REGION.NO = 1 TO REGIONS.CNTR   FOR YEAR.NO = 1 TO 5      REGION.YEAR.AMT=YEAR.REGION.TOTALS<REGION.NO,YEAR.NO>+0      IF REGION.YEAR.AMT < 0 THEN REGION.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,REGION.NO>=OCONV(REGION.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,REGION.NO>=REGIONS<REGION.NO> NEXT REGION.NORETURN*VERIFY.CURRENT.DATA:*READ LAST.UPDATE FROM FI.DICT.DASHBOARD.CLOSING.STATS, '*LAST.UPDATE' ELSE LAST.UPDATE=0READ LAST.UPDATED FROM FI.DICT.DASHBOARD.CLOSING.STATS, '*LAST.UPDATED' ELSE LAST.UPDATED=0CUR.DATE=DATE(); CUR.TIME=TIME()CUR.TIME=FIELD(CUR.TIME,'.',1)LEN.CUR.TIME=LEN(CUR.TIME)CUR.TIME=STR('0',5-LEN.CUR.TIME):CUR.TIMECUR.DATE.TIME=CUR.DATE:CUR.TIMEDELTA.DATE.TIME=CUR.DATE.TIME-LAST.UPDATEDIF DELTA.DATE.TIME > 900 THEN   * REFRESH EVERY 15 MINUTES   LAST.UPDATED='UPDATING'   BEGIN CASE      CASE PLATFORM = 'D3' OR PLATFORM = 'JB'         EXECUTE "Z REFRESH.DASHBOARD.CLOSING.STATS" CAPTURING DUMMY      CASE 1         EXECUTE "PHANTOM REFRESH.DASHBOARD.CLOSING.STATS" CAPTURING DUMMY   END CASE ENDIF NOT(NUM(LAST.UPDATE)) THEN   IF INDEX(LAST.UPDATE,'UPDATING',1) THEN      LAST.UPDATE='Figures are currently updating.'      LAST.UPDATE<-1>='Try again in a couple of minutes.'    END   MAX.LINES=DCOUNT(LAST.UPDATE,CHAR(254))   ERROR.MSG=''   FOR I = 1 TO MAX.LINES      THIS.MSG=LAST.UPDATE<I>      IF ERROR.MSG <> '' THEN ERROR.MSG:='<br>'      ERROR.MSG:=THIS.MSG    NEXT I   RETURN TO DISPLAY.ERROR ENDRETURN*GET.CURRENT.REPORT:*BEGIN CASE   CASE GET.REPORT.TYPE = 'SALES'       FI.DICT=FI.DICT.DASHBOARD.CLOSING.STATS       LAST.DATE.INDICATOR='*LAST.UPDATE.SALES'       REPORT.STATS.ID='*CURRENT.SALES.STATS'END CASE*** IF MORE THAN 10 MINUTES SINCE LAST UPDATE THEN REFRESH DATA*RECALC.REQUESTED=0DATA.CURRENT=0LOOP   READ LAST.UPDATE FROM FI.DICT, LAST.DATE.INDICATOR ELSE LAST.UPDATE=''   IF NUM(LAST.UPDATE) THEN      CUR.TIME=OCONV(TIME(),'MT')      CONVERT ':' TO '' IN CUR.TIME      CUR.DATE.TIME=DATE():CUR.TIME      LAST.UPDATE.DELTA=CUR.DATE.TIME - LAST.UPDATE      IF LAST.UPDATE.DELTA < 10 THEN DATA.CURRENT=1    ENDUNTIL DATA.CURRENT DO   IF NUM(LAST.UPDATE) THEN      IF NOT(RECALC.REQUESTED) THEN         BEGIN CASE            CASE PLATFORM = 'D3' OR PLATFORM = 'JB'               EXECUTE "Z REFRESH.DASHBOARD.MTD.STATS ":REPORT.TYPE CAPTURING DUMMY            CASE 1               EXECUTE "PHANTOM REFRESH.DASHBOARD.MTD.STATS ":REPORT.TYPE CAPTURING DUMMY         END CASE         RECALC.REQUESTED=1       END    END   SLEEP 2REPEATREAD REPORT.STATS.REC FROM FI.DICT, REPORT.STATS.ID ELSE REPORT.STATS.REC=''WRITE REPORT.STATS.REC ON FI.MVDB.SUBS, 'REPORT.STATS.REC'RETURNEND000314SUB.PORTAL.SETUP.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.SETUP.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Portal Setup Instructions"     ;* Title for widget title barW$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here*OPEN '','WEB.FORMS' TO FI.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FI.WEB.FORMS, 'PORTAL.SETUP.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN0003F5EXECUTE.STACKED.CMNDS0c2SUBROUTINE EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,NUM.RETURNED,REPORT)*REPORT=''NUM.RETURNED=1IF STACKED.1 <> '' THEN   EXECUTE STACKED.1 CAPTURING DUMMY   NUM.RETURNED=SYSTEM(11)   IF NOT(NUM.RETURNED) THEN RETURN ENDBREAK.ON.POS2=INDEX(STACKED.2,'BREAK-ON ',2)IF BREAK.ON.POS2 THEN   BREAK.ON.POS=INDEX(STACKED.2,'BREAK-ON ',1)   PLATFORM=OCONV('PLATFORM','TMVDB.CONTROL;X;1;1')   IF PLATFORM = '' THEN PLATFORM='D3'   IF PLATFORM = 'JB' THEN      STR1=STACKED.2[1,BREAK.ON.POS-1]      STR2=STACKED.2[BREAK.ON.POS,9999999]      PIPE.POS=INDEX(STR2,' PIPE ',1)      IF PIPE.POS THEN         BREAK.VAR=STR2[1,PIPE.POS-1]         BREAK.VAR=TRIM(BREAK.VAR)         BREAK.VAR=FIELD(BREAK.VAR,' ',2)         BREAK.VAR=' BREAK-ON ':BREAK.VAR:' "':"'V'|":'" '         STR2=STR2[PIPE.POS,9999999]       END ELSE         BREAK.VAR=''       END      STACKED.2=STR1:BREAK.VAR:STR2    END ENDEXECUTE STACKED.2 CAPTURING REPORTCONVERT '$,' TO '' IN REPORTRETURNEND000261UV.EXECUTE.STACKED.CMNDS0c2SUBROUTINE UV.EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,NUM.RETURNED,REPORT)*REPORT=''NUM.RETURNED=1IF STACKED.1 <> '' THEN   EXECUTE STACKED.1 RTNLIST STACKED.LIST CAPTURING NUM.RETURNED   NUM.RETURNED=TRIM(NUM.RETURNED<2>)   NUM.RETURNED=FIELD(NUM.RETURNED,' ',1)   IF NOT(NUM.RETURNED) THEN RETURN   EXECUTE STACKED.2 PASSLIST STACKED.LIST CAPTURING REPORT END ELSE   EXECUTE STACKED.2 CAPTURING REPORT ENDIF INDEX(REPORT,'0 records',1) THEN   IF DCOUNT(REPORT,@AM) < 5 THEN      NUM.RETURNED=0      REPORT=''    END ENDCONVERT '$,' TO '' IN REPORTRETURNEND00022DUD.EXECUTE.STACKED.CMNDS0c2SUBROUTINE UD.EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,NUM.RETURNED,REPORT)*REPORT=''NUM.RETURNED=1LIST_VAR = 1IF STACKED.1 <> '' THEN   MDPERFORM STACKED.1 RTNLIST LIST_VAR RETURNING RETNO CAPTURING CAPT   IF INDEX(RETNO,'No data',1) OR INDEX(CAPT,'No data',1) THEN      NUM.RETURNED=0      RETURN    END   MDPERFORM STACKED.2 PASSLIST LIST_VAR CAPTURING REPORT END ELSE   MDPERFORM STACKED.2 CAPTURING REPORT ENDIF INDEX(REPORT,'No records',1) THEN   NUM.RETURNED=0 ENDCONVERT '$,' TO '' IN REPORTRETURNEND0006AECREATE.QPOINTER0c2SUBROUTINE CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,FILENAME,CALL.IT,FI.QPOINTER)**OPEN '',CALL.IT TO FI.QPOINTER THEN**   IF CALL.IT <> 'QFILE' THEN RETURN** ENDCALL.IT.PARAM=CALL.ITCALL.IT=''PATH=@PATHBEGIN CASE   CASE PLATFORM = 'UD'      OPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE         UD.ACCOUNTS='F'         UD.ACCOUNTS<-1>='@UDTHOME/sys/UD.ACCOUNT'         UD.ACCOUNTS<-1>='@UDTHOME/sys/D_UD.ACCOUNT'         WRITE UD.ACCOUNTS ON FI.MD, 'UD.ACCOUNTS'         OPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE RETURN       END      READV PATH FROM FI.UD.ACCOUNTS, ACCOUNT, 1 ELSE RETURN      F.POINTER='F'      F.POINTER<2>=PATH:'/':FILENAME      F.POINTER<3>=PATH:'/D_':FILENAME      WRITE F.POINTER ON FI.MD, CALL.IT.PARAM   CASE PLATFORM = 'JB' AND ACCOUNT = 'MVDB'      IF INDEX(PATH,':\',1) THEN DELIM.TYPE='\' ELSE DELIM.TYPE='/'      F.POINTER='F'      F.POINTER<2>=PATH:DELIM.TYPE:FILENAME      F.POINTER<3>=PATH:DELIM.TYPE:FILENAME:']D'      WRITE F.POINTER ON FI.MD, CALL.IT.PARAM   CASE 1      QFILE.REC='Q':@AM:ACCOUNT:@AM:FILENAME      WRITE QFILE.REC ON FI.MD, CALL.IT.PARAMEND CASE* CHANGE CALL.IT TO SUCCESSFUL NAME* OTHERWISE IT WILL RETURN WITH NULL SAYING FAILURECALL.IT=CALL.IT.PARAMOPEN '',CALL.IT.PARAM TO FI.QPOINTER ELSE   CALL.IT=''   IF PLATFORM = 'JB' AND FILENAME = 'MD' THEN      * OTHER ACCOUNT MAY NOT HAVE AN MD AND THE ONLY REASON TO SET A      * QPOINTER TO IT IS TO TEST VALIDITY OF THE ACCOUNT SO JUST      * CHECK FOR THE EXISTENCE OF A SYSTEM RECORD      OPEN '','SYSTEM' TO FI.SYSTEM ELSE RETURN      READ ACCOUNT.EXIST FROM FI.SYSTEM, ACCOUNT ELSE RETURN      CALL.IT=CALL.IT.PARAM    END ENDRETURNEND002557BUILD.SAMPLE.PORTAL.FILES0c2OPEN '','PORTAL.SALES' TO FI.SALES ELSE STOP 201,'PORTAL.SALES'OPEN '','PORTAL.AR' TO FI.AR ELSE STOP 201,'PORTAL.AR'OPEN '','PORTAL.AP' TO FI.AP ELSE STOP 201,'PORTAL.AP'READ SALES.1 FROM FI.SALES, 1 ELSE SALES.1=''READ AR.1 FROM FI.AR, 1 ELSE AR.1=''READ AP.1 FROM FI.AP, 1 ELSE AP.1=''IF SALES.1 <> '' AND AR.1 <> '' AND AP.1 <> '' THEN STOPOTODAY=OCONV(DATE(),'D4-')OYYYY=OTODAY[7,4]OMM=OTODAY[1,2]+0REPS=''REPS<-1>='GREG GRIFFIN'REPS<-1>='KELLEY JOHNSON'REPS<-1>='KEVIN PEPE'REPS<-1>='KIM GONZALEZ'REPS<-1>='MICHAEL HOUSE'REPS<-1>='MICHELLE BLACK'REPS<-1>='MITCH STREET'REPS<-1>='NATALIE MCFARLAND'REPS<-1>='PETE COX'REPS<-1>='PHIL CRAMER'REPS<-1>='ROBERT HUNT'REPS<-1>='STEVE SMITH'REPS<-1>='TAMMY HENDER'REPS<-1>='TIFFANEY MILLER'BRANCHES=''BRANCHES<-1>='CHICAGO'BRANCHES<-1>='DALLAS'BRANCHES<-1>='DENVER'BRANCHES<-1>='FLORIDA'BRANCHES<-1>='NEW YORK'BRANCHES<-1>='NORCAL'BRANCHES<-1>='SOCAL'BRANCHES<-1>='VEGAS'REGIONS=''REGIONS<-1>='CENTRAL'REGIONS<-1>='EAST'REGIONS<-1>='MOUNTAIN'REGIONS<-1>='WEST'EXECUTE "CLEAR-FILE DATA PORTAL.SALES" CAPTURING DUMMYJAN12016=ICONV('1-1-16','D')DATE.RANGE=DATE()-JAN12016FOR I = 1 TO 10000   SALES.REC=''   CLOSE.DATE=JAN12016 + RND(DATE.RANGE) + 1   SALES.REC<1>=CLOSE.DATE   RND.REP=RND(14)+1   IF RND.REP < 12 THEN      RND.PCT=((RND(10)+1)/10)      RND.REP=INT(RND.REP * RND.PCT + .5)      IF NOT(RND.REP) THEN RND.REP=1    END   REP=REPS<RND.REP>   SALES.REC<5>=REP   AMOUNT=RND(975000)+25000; * 250 TO 10000   SALES.REC<8>=AMOUNT   COST.PCT=RND(40) + 50; * 50 TO 90 PERCENT   COST.PCT=COST.PCT / 100   COST=INT(AMOUNT * COST.PCT + .5)   SALES.REC<9>=COST   RND.BRANCH=RND(8)+1   IF RND.BRANCH < 6 THEN      RND.PCT=((RND(10)+1)/10)      RND.BRANCH=INT(RND.BRANCH * RND.PCT + .5)      IF NOT(RND.BRANCH) THEN RND.BRANCH=1    END   BRANCH=BRANCHES<RND.BRANCH>   SALES.REC<13>=BRANCH   RND.REGION=RND(4)+1   IF RND.REGION < 4 THEN      RND.PCT=((RND(10)+1)/10)      RND.REGION=INT(RND.REGION * RND.PCT + .5)      IF NOT(RND.REGION) THEN RND.REGION=1    END   REGION=REGIONS<RND.REGION>   SALES.REC<14>=REGION   WRITE SALES.REC ON FI.SALES, I NEXT ICUSTS=''CUSTS<-1>="ABC Computers"CUSTS<-1>="ABC Electronics Corp"CUSTS<-1>="Ajax Computer Electronics"CUSTS<-1>="Alfreds Futterkiste"CUSTS<-1>="Ana Trujillo Emparedados y helados"CUSTS<-1>="Antonio Moreno Taqueria"CUSTS<-1>="Around the Horn"CUSTS<-1>="B'S Beverages"CUSTS<-1>="Bakers Goods"CUSTS<-1>="Berglunds snabbkop"CUSTS<-1>="Best Computer Company"CUSTS<-1>="Better Bytes"CUSTS<-1>="Better Computing"CUSTS<-1>="Better Connection"CUSTS<-1>="Bills Shoes & Gopeds"CUSTS<-1>="Bits and Bytes Inc"CUSTS<-1>="Blauer See Delikatessen"CUSTS<-1>="Blondel pere et fils"CUSTS<-1>="Bobs Used Cycles"CUSTS<-1>="Bon app"CUSTS<-1>="Bottom-Dollar Markets"CUSTS<-1>="Cactus Comidas para llevar"CUSTS<-1>="Centro comercial Moctezuma"CUSTS<-1>="Chop-suey Chinese"CUSTS<-1>="Classic Computers"CUSTS<-1>="Comp Data Inc."CUSTS<-1>="Comp Products"CUSTS<-1>="Computer Fancy"CUSTS<-1>="Computer Portables Inc."CUSTS<-1>="Computer Sitters"CUSTS<-1>="Computer Tech"CUSTS<-1>="Computer Tips"CUSTS<-1>="Computer Town"CUSTS<-1>="Computer Trainers"CUSTS<-1>="Computer Warehouse"CUSTS<-1>="Computers Etc."CUSTS<-1>="Computers Galore"CUSTS<-1>="Computers Inc.Systems"CUSTS<-1>="Computers N More"CUSTS<-1>="Computers R Us"CUSTS<-1>="Consolidated Holdings"CUSTS<-1>="Cyber Products"CUSTS<-1>="Data Bits"CUSTS<-1>="Data Comp"CUSTS<-1>="Data Net"CUSTS<-1>="Die Wandernde Kuh"CUSTS<-1>="Disk Products"CUSTS<-1>="Disks N More"CUSTS<-1>="Drachenblut Delikatessen"CUSTS<-1>="Du monde entier"CUSTS<-1>="Eastern Connection"CUSTS<-1>="Electronic Company"CUSTS<-1>="Ernst Handel"CUSTS<-1>="Familia Arquibaldo"CUSTS<-1>="FISSA Fabrica Inter. Salchichas S.A."CUSTS<-1>="Folies gourmandes"CUSTS<-1>="For Computers Inc."CUSTS<-1>="France restauration"CUSTS<-1>="Franchi S.p.A."CUSTS<-1>="Frankenversand"CUSTS<-1>="Furia Bacalhau e Frutos do Mar"CUSTS<-1>="Future Computers"CUSTS<-1>="Future In Computing"CUSTS<-1>="Galeria del gastronomo"CUSTS<-1>="Godos Cocina Tipica"CUSTS<-1>="Gourmet Lanchonetes"CUSTS<-1>="Great Lakes Food Market"CUSTS<-1>="GROSELLA-Restaurante"CUSTS<-1>="Hanari Carnes"CUSTS<-1>="HILARION-Abastos"CUSTS<-1>="Hungry Coyote Import Store"CUSTS<-1>="HUNGRY HOWIES PIZZA"CUSTS<-1>="Hungry Owl All-Night Grocers"CUSTS<-1>="Intercom Products"CUSTS<-1>="Island Trading"CUSTS<-1>="Joe'S Computers"CUSTS<-1>="Koniglich Essen"CUSTS<-1>="La corne d'abondance"CUSTS<-1>="Lazy K Kountry Store"CUSTS<-1>="Lehmanns Marktstand"CUSTS<-1>="Let'S Stop N Shop"CUSTS<-1>="LILA-Supermercado"CUSTS<-1>="LINO-Delicateses"CUSTS<-1>="Logical Computers"CUSTS<-1>="Lonesome Pine Restaurant"CUSTS<-1>="Longo Toyota"CUSTS<-1>="Magazzini Alimentari Riuniti"CUSTS<-1>="Memory Capturers"CUSTS<-1>="Memory Plus Inc."CUSTS<-1>="Modem Products"CUSTS<-1>="Morgenstern Gesundkost"CUSTS<-1>="Net Connect"CUSTS<-1>="North/South"CUSTS<-1>="Number One in Computing"CUSTS<-1>="Oceano Atlantico Ltda."CUSTS<-1>="Old World Delicatessen"CUSTS<-1>="Ones & Zeros Inc."CUSTS<-1>="Ottilies Kaseladen"CUSTS<-1>="Paris specialites"CUSTS<-1>="Pericles Comidas clasicas"CUSTS<-1>="Piccolo und mehr"CUSTS<-1>="Printer Products"CUSTS<-1>="Que Delicia"CUSTS<-1>="Queen Cozinha"CUSTS<-1>="QUICK-Stop"CUSTS<-1>="Rancho grande"CUSTS<-1>="Rattlesnake Canyon Grocery"CUSTS<-1>="Real Computers"CUSTS<-1>="Reggiani Caseifici"CUSTS<-1>="Ricardo Adocicados"CUSTS<-1>="Richter Supermarkt"CUSTS<-1>="Sante Gourmet"CUSTS<-1>="Save-a-lot Markets"CUSTS<-1>="Secure Computers"CUSTS<-1>="Seven Seas Imports"CUSTS<-1>="Software Inc"CUSTS<-1>="Specialites du monde"CUSTS<-1>="Split Rail Beer & Ale"CUSTS<-1>="Supremes delices"CUSTS<-1>="The Big Cheese"CUSTS<-1>="The Cracker Box"CUSTS<-1>="The Only Computers"CUSTS<-1>="Tortuga Restaurante"CUSTS<-1>="Tradicao Hipermercados"CUSTS<-1>="Trail'S Head Gourmet Provisioners"CUSTS<-1>="TRG"CUSTS<-1>="USA Computers"CUSTS<-1>="Victuailles en stock"CUSTS<-1>="Vins et alcools Chevalier"CUSTS<-1>="Wartian Herkku"CUSTS<-1>="Wellington Importadora"CUSTS<-1>="White Clover Markets"CUSTS<-1>="White House"CUSTS<-1>="Wilman Kala"CUSTS<-1>="Wolski  Zajazd"EXECUTE "CLEAR-FILE DATA PORTAL.AR" CAPTURING DUMMYFOR I = 1 TO 5000   AR.REC=""   CUST=CUSTS<RND(135)+1>   AR.REC<1>=CUST   PCT=RND(100)+1   IF PCT > 4 THEN      * PAID      QTR=RND(18)+1; * BASED ON DATE BEFORE 7-1-20      BEGIN CASE         CASE OYYYY > 2020; QTR+=2         CASE OMM >= 10; QTR+=2         CASE OMM >= 7;  QTR+=1      END CASE      BEGIN CASE         CASE QTR <= 4;   * 2016            BREAKS=71:@AM:87:@AM:93            BOY=ICONV("01-01-16","D")            QTR.IN.YEAR=QTR         CASE QTR <= 8;   * 2017            BREAKS=73:@AM:89:@AM:94            BOY=ICONV("01-01-17","D")            QTR.IN.YEAR=QTR-4         CASE QTR <= 12;   * 2018            BREAKS=77:@AM:89:@AM:94            BOY=ICONV("01-01-18","D")            QTR.IN.YEAR=QTR-8         CASE QTR <= 16;   * 2019            BREAKS=77:@AM:90:@AM:94            BOY=ICONV("01-01-19","D")            QTR.IN.YEAR=QTR-12         CASE 1;          * 2020            BREAKS=71:@AM:87:@AM:93            BOY=ICONV("01-01-20","D")            QTR.IN.YEAR=QTR-16      END CASE      BOQ=BOY + (QTR.IN.YEAR-1)*90      DATE.PAID=BOQ + RND(90) + 1      DAYS.IN.PERIOD=RND(30)+1      PCT=RND(100)      LOCATE PCT IN BREAKS BY "AR" SETTING CATEGORY ELSE NULL      MOS.BEFORE=CATEGORY-1      DUE.DATE=DATE.PAID - (MOS.BEFORE*30) - DAYS.IN.PERIOD      AR.REC<20>=DUE.DATE      AR.REC<8>=DATE.PAID      AR.REC<50>=0; * BALANCE      AMOUNT=RND(975000)+25000; * 250 TO 10000      AR.REC<6>=AMOUNT      WRITE AR.REC ON FI.AR, I    END ELSE      BREAKS=60:@AM:81:@AM:91:@AM:96      PCT=RND(100)+1      LOCATE PCT IN BREAKS BY "AR" SETTING CATEGORY ELSE NULL      DAY.IN.MONTH=RND(30)      BEGIN CASE         CASE CATEGORY = 1            * NOT YET DUE            DUE.DATE=DATE()+DAY.IN.MONTH         CASE CATEGORY = 2            * 1-30            DUE.DATE=DATE()-DAY.IN.MONTH         CASE CATEGORY = 3            * 31-60            DUE.DATE=DATE() - (30 + DAY.IN.MONTH)         CASE CATEGORY = 4            * 60-90            DUE.DATE=DATE() - (60 + DAY.IN.MONTH)         CASE 1            * 90+            DUE.DATE=DATE() - (90 + RND(120))      END CASE      AR.REC<20>=DUE.DATE      AR.REC<8>=''; * DATE PAID      AMOUNT=RND(975000)+25000; * 250 TO 10000      AR.REC<6>=AMOUNT      AR.REC<50>=AMOUNT; * BALANCE      WRITE AR.REC ON FI.AR, I    END NEXT IEXECUTE "CLEAR-FILE DATA PORTAL.AP" CAPTURING DUMMYFOR I = 1 TO 100   AP.REC=""   BREAKS=56:@AM:90:@AM:95:@AM:97   PCT=RND(100)+1   LOCATE PCT IN BREAKS BY "AR" SETTING CATEGORY ELSE NULL   DAY.IN.MONTH=RND(30)   BEGIN CASE      CASE CATEGORY = 1         * NOT YET DUE         DUE.DATE=DATE()+DAY.IN.MONTH      CASE CATEGORY = 2         * 1-30         DUE.DATE=DATE()-DAY.IN.MONTH      CASE CATEGORY = 3         * 31-60         DUE.DATE=DATE() - (30 + DAY.IN.MONTH)      CASE CATEGORY = 4         * 60-90         DUE.DATE=DATE() - (60 + DAY.IN.MONTH)      CASE 1         * 90+         DUE.DATE=DATE() - (90 + DAY.IN.MONTH)   END CASE   AP.REC<20>=DUE.DATE   AP.REC<8>=''; * DATE PAID   AMOUNT=RND(975000)+25000; * 250 TO 10000   AP.REC<6>=AMOUNT   AP.REC<50>=AMOUNT; * BALANCE   WRITE AP.REC ON FI.AP, I NEXT I00007EDICT_WEB.SESSION0c000001CDATE0c1A3DATED2/R8000020AGE0c1A3AGEA;(D)-(3)R800001CTIME0c1A4TIMEMTSR80000F9MVDB.USERS0c0000027guest0c2guestChartsGuest UserUser00003Fadmin0c2adminAdministratorAdmin Userno emailAdministrator000037emailed0c2788CF490Administratoremailed reportUser000036webservice0c2788CF490AdministratorwebserviceUser000281DICT_DASHBOARD.CLOSING.STATS0c000001BAMOUNT0c1A1MD2R1200001CBRANCH0c1A0G2*1L10000021COST.OF.SALE0c1A2MD2R12000028GROSS.PROFIT0c1A0MD2F;1;2;-R12000014ID0c1A0L10000021LAST.AP.REFRESH0c11910904-25-20000021LAST.AR.REFRESH0c11910904-25-20000024LAST.SALES.REFRESH0c11910904-25-2000001APIPE0c1A0 F;C|L100001CREGION0c1A0G3*1L10000034REGION*YYYYMM0c1A0A;0(G3*1):"*":0(G1*1)L1000001DSALESMAN0c1A0G*1L20000024SALESMAN*YYYYMM0c1A0G*2L2000001EYYYY0c1A0G1*1T1,4L400001BYYYYMM0c1A0G1*1L6000023YYYYMM*BRANCH0c1A0G1*2L1000818EMVDB.SUB.TEMPLATES0c0000017FCBAR2D0c2USE FCAREA2D0009C3FCMSAREA2D0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create three arrays here. Two of them are single-dimention attribute*   or value separated lists, one that stores descriptions of each*   point along the X axis (major), another that stores descriptions*   of the components that make up each point along the X axis (minor).*   Example: Monthly sales by territory where each month is a point*   (major) and each territory is a component of that point (minor).*   The third array is a full dynamic array where each attribute is a*   territory (minor) and each value is a month (major).*   Array Examples:    TERRS="" ;* Each attribute is a short description of the territory    MNTHS="" ;* Each value is a short description of the month (Mon/YY)    SALES="" ;* Each attribute contains values (one per month) of the             ;* sales within a territory. SALES<3,2> corresponds to             ;* TERRS<1,3> and MNTHS<1,3>*   then you can load the widget's values and labels like:*     W$BAR.VALUES  = SALES*     W$BAR.XLABELS = MNTHS*     W$BAR.LABELS  = TERRS*   rather than loading them a value at a time as shown*   in the "FOR N = 1 TO 12" loop below.*W$BAR.CAPTION = "YOUR CHART CAPTION HERE"W$BAR.XMEMO = "X-Axis Text" ;* Text that appears below the X-Axis labels                            ;* Ex: Territory Sales by MonthW$BAR.YMEMO = "Y-Axis Text" ;* Text that appears beside the Y-Axis labels                            ;* Ex: Sales (USD)*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = N ;* Value  W$BAR.XLABELS<1,N> = "Label ":N ;* X-Axis labelNEXT NW$BAR.LABELS<1>="Label 1"W$BAR.LABELS<2>="Label 2"W$BAR.LABELS<3>="Label 3"** To suppress the actual values for any of the series:W$BAR.LABEL.OPTS<1> = "showValues='0'"W$BAR.LABEL.OPTS<2> = "showValues='0'"W$BAR.LABEL.OPTS<3> = "showValues='0'"** Specify the alpha (transparency level) for each of the seriesW$BAR.LABEL.OPTS<1> := " areaAlpha='50'"W$BAR.LABEL.OPTS<2> := " areaAlpha='70'"W$BAR.LABEL.OPTS<3> := " areaAlpha='90'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000561SPARKWINLOSS0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the actual data, the other contains benchmark data*   to which the actual data are compared.*   Example:      SALES: Each value is a single sales total for the month      GOALS: Each value is a single goal for the corresponding month*     you build the chart values by comparing each value within the*     two lists, setting each chart value to "W" (win), "L" (lose)*     or "D" (draw) based on the comparison*W$FW.CAPTION = "YOUR CHART CAPTION HERE"W$FW.SUBCAPTION = "YOUR CHART SUBCAPTION HERE"*MAX = DCOUNT(SALES,@VM)FOR N = 1 TO MAX  BEGIN CASE    CASE SALES<1,N> > GOALS<1,N>; W$FW.VALUES<1,N> = "W" ;* Win    CASE SALES<1,N> < GOALS<1,N>; W$FW.VALUES<1,N> = "L" ;* Loss    CASE 1                                               ;* Draw  END CASENEXT N**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001BFCDOUGHNUT2D0c2USE FC2DPIE00057BFC2DPIE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the data, the other contains a short description*   of that data.*   Example:*     TERRSALES: Each value is a single territory's sales for the month*     TERRNAMES: Each value is a short name for the territory*     then you can load the widget's values like:*       W$PIE.LABELS = TERRNAMES*       W$PIE.VALUES = TERRSALES*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 7" loop below.*FOR N = 1 TO 7  W$PIE.LABELS<1,N> = "Slice ":N  W$PIE.VALUES<1,N> = NNEXT N** For a 2D pie, a specific slice can be separated from the pie* by setting this value:* W$PIE.VALUE.OPTS<1,X> = 'isSliced="1"'*   where "X" is the number of the value you want separated** To show values instead of percentages, use this:* W$CHART.OPTIONS<-1> = "showPercentageValues='0'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001BCYLINDER0c2USE THERMOMETER000303TEXT0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create dynamic array, on text line per attribute*   Examples:*     READ TXTITM FROM FILE,ID ELSE TXTITM = "TXTITM NOT FOUND"*   or:*     EXECUTE "YOUR SORT STATEMENT" CAPTURING TXTITEM*W$TEXT.DATA = "YOUR DYNAMIC ARRAY HERE";* example: TXTITM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000016FCLINE0c2USE FCAREA2D000022FCSTACKEDCOLUMN3D0c2USE FCMSBAR2D000A7CHLED0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine a contant to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever.*   Example:*     SALES: Total sales for a period within the current year*     GOAL:  Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the higher of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given GOAL & SALES, calculate the ranges:             GOAL      = 100000             SALES     = 110000             RANGE.BAD = INT(GOAL*.7)             RANGE.OK  = INT(GOAL*.9)             RANGE.GOOD= INT(SALES*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* To* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Value & TargetW$FW.METER.VALUE  = SALES      ;* Your actual value** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001DFCMSCOLUMN3D0c2USE FCMSBAR2D00026AHTML0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create a HTML string from data previously read*W$HTML.DATA = "<h2>YOUR HTML STRING HERE</h2>"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001AFCCOLUMN2D0c2USE FCAREA2D00001CSPARKLINE0c2USE SPARKCOLUMN000ADBHBULLET0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine a contant to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever.*   Example:*     SALES: Total sales for a period within the current year*     GOAL:  Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the higher of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given GOAL & SALES, calculate the ranges:             GOAL      = 100000             SALES     = 110000             RANGE.BAD = INT(GOAL*.7)             RANGE.OK  = INT(GOAL*.9)             RANGE.GOOD= INT(SALES*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.CAPTION     = "YOUR MAIN CAPTION HERE"W$FW.SUBCAPTION  = "YOUR SUB-CAPTION HERE"  ;* Optional*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* To* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Value & TargetW$FW.METER.VALUE  = SALES      ;* Your actual valueW$FW.METER.TARGET = GOAL       ;* Your calculated target** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000010VLED0c2USE HLED000016FC3DPIE0c2USE FC2DPIE000905FCMSBAR2D0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create three arrays here. Two of them are single-dimention attribute*   or value separated lists, one that stores descriptions of each*   point along the X axis (major), another that stores descriptions*   of the components that make up each point along the X axis (minor).*   Example: Monthly sales by territory where each month is a point*   (major) and each territory is a component of that point (minor).*   The third array is a full dynamic array where each attribute is a*   territory (minor) and each value is a month (major).*   Array Examples:    TERRS="" ;* Each attribute is a short description of the territory    MNTHS="" ;* Each value is a short description of the month (Mon/YY)    SALES="" ;* Each attribute contains values (one per month) of the             ;* sales within a territory. SALES<3,2> corresponds to             ;* TERRS<1,3> and MNTHS<1,3>*   then you can load the widget's values and labels like:*     W$BAR.VALUES  = SALES*     W$BAR.XLABELS = MNTHS*     W$BAR.LABELS  = TERRS*   rather than loading them a value at a time as shown*   in the "FOR N = 1 TO 12" loop below.*W$BAR.CAPTION = "YOUR CHART CAPTION HERE"W$BAR.XMEMO = "X-Axis Text" ;* Text that appears below the X-Axis labels                            ;* Ex: Territory Sales by MonthW$BAR.YMEMO = "Y-Axis Text" ;* Text that appears beside the Y-Axis labels                            ;* Ex: Sales (USD)*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = N ;* Value  W$BAR.XLABELS<1,N> = "Label ":N ;* X-Axis labelNEXT NW$BAR.LABELS<1>="Label 1"W$BAR.LABELS<2>="Label 2"W$BAR.LABELS<3>="Label 3"** To suppress the actual values for any of the series:W$BAR.LABEL.OPTS<1> = "showValues='0'"W$BAR.LABEL.OPTS<2> = "showValues='0'"W$BAR.LABEL.OPTS<3> = "showValues='0'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00022EMAP0c2W$TITLE = "Untitled Map"** The W$TYPE variable needs to represent a valid map name*W$TYPE = "MAP:Canada"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$MAP.IDS<1,1> = "01"W$MAP.VALUES<1,1> = 5W$MAP.VALUE.OPTS<1,1> = 'toolText="This is Alberta!"'*W$MAP.RANGE.NAME<1,1> = "Not On The Map"W$MAP.RANGE.LOW<1,1> = "0"W$MAP.RANGE.HIGH<1,1> = "5"W$MAP.RANGE.COLOR<1,1> = "WHITE"W$MAP.RANGE.NAME<1,2> = "On The Map"W$MAP.RANGE.LOW<1,2> = "5"W$MAP.RANGE.HIGH<1,2> = "10"W$MAP.RANGE.COLOR<1,2> = "GREEN"*RETURN0004FFTABLE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create a work table from your data that you'll use to populate the*   widget's table data array where attributes represent rows and*   values represent columns. NOTE: If you are using the widget's*   Total row, you have to calculate the totals yourself and stick*   them in the appropriate W$TABLE.TOTALS value.** Set up column labelsW$TABLE.COL.LABELS<1,1> = "Column Heading 1"W$TABLE.COL.LABELS<1,2> = "Column Heading 2"W$TABLE.COL.LABELS<1,3> = "Column Heading 3"** Column justification = left, right, centerW$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "right"** Table RowsFOR ROW = 1 TO 5  W$TABLE.DATA<ROW,1> = ROW:",1"  W$TABLE.DATA<ROW,2> = ROW:",2"NEXT ROW** TotalsW$TABLE.TOTALS<1,1> = "2"W$TABLE.TOTALS<1,2> = "4"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000DE2ANGULARGAUGE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine some contants to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever. Also, gather*   information that will allow you to create ranges against which to*   compare the number and those constants, if any.*   Example:*     SALES.CY: Total sales for a period within the current year*     SALES.LY: Total sales within that same period last year*     SLS.GOAL: Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the highest of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given SLS.GOAL & SALES.CY, calculate the ranges:             SLS.GOAL  = 100000             SALES.CY  = 110000             SALES.LY  = 95000             RANGE.BAD = INT(SLS.GOAL*.7)             RANGE.OK  = INT(SLS.GOAL*.9)             RANGE.GOOD= INT(SALES.CY*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* ToW$FW.COLOR.RANGE<3,2> = COLOR$YELLOW;* Override color* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Main Dial ValueW$FW.DIAL.VALUES<1> = SALES.CY      ;* Your actual value** Trendpoints (optional)* By default, there are no trendpoints on the gauge.** First TrendpointW$FW.TRENDPOINT.VALUES<1,1> = SALES.LYW$FW.TRENDPOINT.LABELS<1,1> = "Last Year"W$FW.TRENDPOINT.OPTS<1,1> = 'color="':COLOR$BLACK:'" useMarker="1"'* Second TrendpointW$FW.TRENDPOINT.VALUES<1,2> = SLS.GOALW$FW.TRENDPOINT.LABELS<1,2> = "Goal"W$FW.TRENDPOINT.OPTS<1,2> = 'color="':COLOR$SILVER:'" useMarker="1"'** Plot an arc (optional) W$FW.TRENDPOINT.VALUES<2,1> = SALES.LY ;* Arc beginW$FW.TRENDPOINT.VALUES<2,2> = SALES.CY ;* Arc end** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001AFCCOLUMN3D0c2USE FCAREA2D000020FCSTACKEDAREA2D0c2USE FCMSBAR2D0005C4FCAREA2D0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the data, the other contains a short description*   of that data, like the month and year.*   Example:*     TERRSALES: Each value is a single territory's sales for the month*     TERRPERDS: Each value is a short description of the period (MM/YY)*     then you can load the widget's values like:*       W$BAR.XLABELS = TERRPERDS*       W$BAR.VALUES = TERRSALES*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 12" loop below.*W$BAR.CAPTION = "YOUR CHART CAPTION HERE"W$BAR.XMEMO = "X-Axis Text" ;* Text that appears below the X-Axis labels                            ;* Ex: Territory ABC Sales by MonthW$BAR.YMEMO = "Y-Axis Text" ;* Text that appears beside the Y-Axis labels                            ;* Ex: Sales (USD)*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = N ;* Value  W$BAR.XLABELS<1,N> = "Label ":N ;* X-Axis labelNEXT N**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN0006F3FUNNEL0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the data, the other contains a short description*   of that data. NOTE: The values should be ordered from largest to*   smallest (value<1,1> should be larger than value<1,2> and so on)*   or the funnel will look weird. For a pyramid, that order should*   be reversed (value<1,1> should be smaller than value<1,2>, etc).*   Example:*     KILLSTATS: Each value is a single territory's sales for the month*     STATDESCS: Each value is a short name for the territory*     then you can load the widget's values like:*       W$FC.LABELS = STATDESCS*       W$FC.VALUES = KILLSTATS*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 5" loop below.*   For a funnel chart, the last value in the list must represent the*   total of all the other values. This is not true for a pyramid chart.*FOR N = 1 TO 5  W$FW.LABELS<1,N> = "Section ":N  W$FW.VALUES<1,N> = NNEXT N*W$FW.CAPTION = "YOUR CAPTION HERE"W$FW.SUBCAPTION = "YOUR SUB-CAPTION HERE"** To show percentages instead of values, use this:* W$CHART.OPTIONS<-1> = "showPercentValues='1'"* To separate the sections from one another, use this:* W$CHART.OPTIONS<-1> = "isSliced='1'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN0006FCTHERMOMETER0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine a contant to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever.*   Example:*     SALES: Total sales for a period within the current year*     GOAL:  Sales goal for said current year period*   Example: Given GOAL & SALES, calculate the ranges:             GOAL      = 100000             SALES     = 110000*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = GOAL ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"W$FW.THERMOMETER.COLOR = COLOR$RED*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** ValueW$FW.METER.VALUE  = SALES      ;* Your actual value** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000019FCMSLINE0c2USE FCMSBAR2D000BB5USAMAP0c2W$TITLE = "Untitled Map"W$TYPE = "%TYPE%"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN** The IDs of each section of a USA map are the state abbreviations, including DC* A list of the state names can be obtained as follows:OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "Unable to open MVDB.CONTROL"  RETURNENDREAD STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ''CONVERT "," TO @VM IN STATE.NAMES*IF WIDGET.USER.DATA(1) # "" THEN  * User has clicked on a specific state. That state map will be displayed.  * This entire section of code can be removed if you dont want to allow  * drill-down to a state map.  *  * The map "name" for the sepcifc state is stored in WIDGET.USER.DATA(2).  * The IDs for the state map are the FIPS county codes.  * A list of county codes can be gathered for a specific state as follows:  OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE    W$TYPE = "TEXT"    W$TEXT.DATA = "Unable to open MVDB.MAP.DATA"    RETURN  END  EXECUTE 'SELECT MVDB.MAP.DATA WITH NAME = "':WIDGET.USER.DATA(2):'"' CAPTURING JUNK  N = 0  LOOP    READNEXT ID ELSE EXIT    READ REC FROM F.MVDB.MAP.DATA, ID THEN      N += 1      * The ID of the map data file is STATE * FIPS_Code      * Extract the FIPS code from the ID and use it as the ID for this      * value.      W$MAP.IDS<1,N> = FIELD( ID, '*', 2 )      W$MAP.VALUES<1,N> = N      * The county name can be found in REC<2>      W$MAP.VALUE.OPTS<1,N> = 'toolText="':REC<2>:'"'    END  REPEAT  * Since we are in drill-down mode, we need to give the user a way to get back  * to the national map. To get out of drill-down mode, WIDGET.USER.DATA(1) needs  * to be cleared. Using a link is an easy way to do that.  W$LINK.LABEL<1,2> = "Return to USA Map"  W$LINK.LOCATION<1,2> = "1"  W$LINK.UD.POS<1,2> = 1  W$LINK.UD.VAL<1,2> = ""  * Override the title to show the state name.  W$TITLE = "Demo - ":WIDGET.USER.DATA(1):" Counties by Alphabet"END ELSE ;* No state specified, full US Map  * Assign a value to each desired map segments (States) as follows  W$MAP.IDS<1,-1> = "TX"  W$MAP.VALUES<1,-1> = 100  W$MAP.VALUE.OPTS<1,-1> = 'toolText="Texas" ' ;* Multiple option settings are space-delimited  *  * With drill-down enabled, the widget will automatically be re-executed with the state ID in WIDGET.USER.DATA(1)  * Allow drill-down to the state level by setting this value:  W$MAP.VALUE.DD<1,-1> = 1END** Set up ranges of values. Note that the low range is inclusive, high range is exclusive.W$MAP.RANGE.NAME<1,1> = "Range 1-99"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "100"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Range 100-199"W$MAP.RANGE.LOW<1,2> = "100"W$MAP.RANGE.HIGH<1,2> = "200"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Range 200-300"W$MAP.RANGE.LOW<1,3> = "200"W$MAP.RANGE.HIGH<1,3> = "301"W$MAP.RANGE.COLOR<1,3> = "RED"*RETURN000DE2HLINEARGAUGE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine some contants to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever. Also, gather*   information that will allow you to create ranges against which to*   compare the number and those constants, if any.*   Example:*     SALES.CY: Total sales for a period within the current year*     SALES.LY: Total sales within that same period last year*     SLS.GOAL: Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the highest of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given SLS.GOAL & SALES.CY, calculate the ranges:             SLS.GOAL  = 100000             SALES.CY  = 110000             SALES.LY  = 95000             RANGE.BAD = INT(SLS.GOAL*.7)             RANGE.OK  = INT(SLS.GOAL*.9)             RANGE.GOOD= INT(SALES.CY*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$YELLOW;* Override color* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Main Dial ValueW$FW.DIAL.VALUES<1> = SALES.CY      ;* Your actual value** Trendpoints (optional)* By default, there are no trendpoints on the gauge.** First TrendpointW$FW.TRENDPOINT.VALUES<1,1> = SALES.LYW$FW.TRENDPOINT.LABELS<1,1> = "Last Year"W$FW.TRENDPOINT.OPTS<1,1> = 'color="':COLOR$BLACK:'" useMarker="1"'* Second TrendpointW$FW.TRENDPOINT.VALUES<1,2> = SLS.GOALW$FW.TRENDPOINT.LABELS<1,2> = "Goal"W$FW.TRENDPOINT.OPTS<1,2> = 'color="':COLOR$SILVER:'" useMarker="1"'** Plot an arc (optional) W$FW.TRENDPOINT.VALUES<2,1> = SALES.LY ;* Arc beginW$FW.TRENDPOINT.VALUES<2,2> = SALES.CY ;* Arc end** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001DFCMSCOLUMN2D0c2USE FCMSBAR2D000016VBULLET0c2USE HBULLET000022FCSTACKEDCOLUMN2D0c2USE FCMSBAR2D000009GANTT0c20003E6SPARKCOLUMN0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create one one-attribute, value-separated array here.*   Example:*     TERRSALES: Each value is a single territory's sales for the month*     then you can load the widget's values like:*       W$FW.VALUES = TERRSALES*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 12" loop below.*W$FW.CAPTION = "YOUR CHART CAPTION HERE"W$FW.SUBCAPTION = "YOUR CHART SUBCAPTION HERE"*FOR N = 1 TO 12  W$FW.VALUES<1,N> = N ;* ValueNEXT N**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000015PYRAMID0c2USE FUNNEL000010BULB0c2USE HLED00001FFCSTACKEDBAR2D0c2USE FCMSBAR2D00005CDICT_MVDB.WIDGETS0c000001FSUB0c1A1SUBROUTINEL2500001CUSERS0c1A2USERSL2000D90CWREST.BP0c00005B8WENCODEJSON0c2SUBROUTINE WENCODEJSON(ORIG.OPTION,IN.STR,OUT.STR)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 8/13/2016* Description: this program will convert all bad characters to an escaped character************************************************************************OPEN 'RESULT.FILE' TO RFILE ELSE STOP* WE NEED TO ENCODE* " = \"   (34)* \ = \\    (92)* / = \/* CHAR(7) = \b* CHAR(13) = \r* char(10) = \n* char(12) = \f* char(9)  = \t*WRITE IN.STR ON RFILE, 'IN.STR'OPTION=ORIG.OPTIONOUT.STR=''L=LEN(IN.STR)CONVERT @AM TO CHAR(10) IN IN.STR; * LETS SWITCH 254 TO CR BE DEFAULTFOR X=1 TO L  C=IN.STR[X,1]  SEQ.C=SEQ(C)  ENCODE=0  IF SEQ.C < 32 THEN ENCODE=1; * BELOW SPACE*IF SEQ.C > 32 AND SEQ.C < 48 THEN ENCODE=1; * LETS ENCODE ALL OF THIS !@$%^&*()  IF SEQ.C=34 THEN ENCODE=1  IF SEQ.C=92 THEN ENCODE=1  IF SEQ.C=47 THEN ENCODE=1  IF SEQ.C > 122 THEN ENCODE = 1; * LETS ENCODE ALL THE HIGH ENTRIES*IF SEQ.C >= 91 AND SEQ.C <= 96 THEN ENCODE=1  IF ENCODE THEN    BEGIN CASE      CASE SEQ.C=7; OUT.STR='\b'      CASE C='\'; OUT.STR:='\\'      CASE C='/'; OUT.STR:='\/'      CASE SEQ.C=10; OUT.STR:='\n'      CASE SEQ.C=13; OUT.STR:='\r'      CASE SEQ.C=12; OUT.STR:='\f'      CASE 1;  OUT.STR:='\u00':OCONV(C,'MX')    END CASE  END ELSE    OUT.STR=OUT.STR:C  ENDNEXT XRETURNEND00022DWGETHEADER0c2SUBROUTINE WGETHEADER(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: extract value of an HTTP request header***********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''TEMPVARS = OCONV(CGI$HEADERVARS, 'MCU')LOCATE OCONV(VarName, 'MCU') IN TEMPVARS SETTING POS THEN  VarValue = CGI$HEADERVALS<POS>ENDRETURNEND0014E9WPARSEJSON0c2SUBROUTINE WPARSEJSON(JSON_STRING,JSON_REQUEST,JSON_RESULT,JSON_ERRORS)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 8/13/2016* Description: this is to be a simple json parser, it will not be high performance!!************************************************************************* COMMAND WILL BE QM STYLE** object or #/object or #/object or #** lets do this VERY ugly, we know what we are looking for should be in the format* "key":  or "key" :*JSON_ERRORS=''JSON_RESULT=''MAX_LENGTH=LEN(JSON_STRING)FIRST_KEY=FIELD(JSON_REQUEST,'/',1); * WE CAN ONLY DO SINGLE DEPTH ON THIS VERSIONIF FIRST_KEY[1,1]='[' THEN  GOSUB getobject  RETURNENDSEARCH_STRING1='"':FIRST_KEY:'":'SEARCH_STRING2='"':FIRST_KEY:'" :'POS=INDEX(JSON_STRING,SEARCH_STRING1,1)IF NOT(POS) THEN  POS=INDEX(JSON_STRING,SEARCH_STRING2,1)ENDIF NOT(POS) THEN  JSON_ERRORS=-1  JSON_ERRORS<2>='COULD NOT FIND KEY ':FIRST_KEY  PRINT 'ERROR'  RETURNENDTEMP_DATA=JSON_STRING[POS,MAX_LENGTH]*PRINT 'TEMP_DATA=':TEMP_DATA* NOW LETS CHOP TO OUR FIRST :POS2=INDEX(TEMP_DATA,':',1)TEMP_DATA=TEMP_DATA[POS2+1,MAX_LENGTH]* NOT SURE IF WE HAVE TO DEAL WITH DATA BEING NOT IN QUOTES, TO MAKE SURE WE ARE GOING TO INSPECT THE NEXT TWO POSITIONS* AND MAKE SURE*PRINT 'TEMP_DATA=':TEMP_DATATEMP_DATA=TRIM(TEMP_DATA,' ','L')BEGIN CASE  CASE TEMP_DATA[1,1] = '"' OR TEMP_DATA[2,1] = '"'* QUOTES    TEMP_DATA=FIELD(TEMP_DATA,'"',2,9999)*PRINT 'TEMP_DATA=':TEMP_DATA* WE CANNOT RELY ON IT JUST BEING THE NEXT QUOTE DUE TO ESCAPING !!@#$#$    LEN_STRING=LEN(TEMP_DATA)    FOUND_QUOTE=0    LAST_C=''    FOR X=1 TO LEN_STRING UNTIL FOUND_QUOTE      C=TEMP_DATA[X,1]      NEXTC=TEMP_DATA[X+1,1]*PRINT 'C=':C:' NEXT_C=':NEXT_C      IF C='\' AND NEXTC='"' THEN        JSON_RESULT:='"'        X+=1        CONTINUE      END      IF C='"' THEN        FOUND_QUOTE=1        EXIT      END ELSE        JSON_RESULT:=C*PRINT 'JSON_RESULT=':JSON_RESULT      END      IF X > LEN_STRING THEN FOUND_QUOTE=1    NEXT X  CASE TEMP_DATA[1,1]='[' OR TEMP_DATA[2,1]='['; * WE ARE PULLING AN ARRAY.  THIS IS VERY MESSY.  IT CAN ONLY HANDLE A SINGLE ARRAY. ANY MORE NESTING AND WE ARE BROKE* WE NEED TO LOOP UNTIL WE SEE THE NEXT ] THAT IS NOT IS A INSIDE QUOTES    LEN$STRING=LEN(TEMP_DATA)    FOUND$BRACKET=0    LAST$C=''    INSIDE$QUOTES=0    FOR X=1 TO LEN$STRING UNTIL FOUND$BRACKET      C=TEMP_DATA[X,1]      BEGIN CASE        CASE C=']' AND NOT(INSIDE$QUOTES); FOUND$BRACKET=1        CASE C='"' AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C="'" AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C='"'; INSIDE$QUOTES=1        CASE C="'"; INSIDE$QUOTES=1      END CASE      JSON_RESULT:=C    NEXT X  CASE TEMP_DATA[1,1]='{' OR TEMP_DATA[2,1]='['; * WE ARE PULLING AN ARRAY.  THIS IS VERY MESSY.  IT CAN ONLY HANDLE A SINGLE ARRAY. ANY MORE NESTING AND WE ARE BROKE* WE NEED TO LOOP UNTIL WE SEE THE NEXT ] THAT IS NOT IS A INSIDE QUOTES    LEN$STRING=LEN(TEMP_DATA)    FOUND$BRACKET=0    LAST$C=''    INSIDE$QUOTES=0    FOR X=1 TO LEN$STRING UNTIL FOUND$BRACKET      C=TEMP_DATA[X,1]      BEGIN CASE        CASE C='}' AND NOT(INSIDE$QUOTES); FOUND$BRACKET=1        CASE C='"' AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C="'" AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C='"'; INSIDE$QUOTES=1        CASE C="'"; INSIDE$QUOTES=1      END CASE      JSON_RESULT:=C    NEXT X  CASE 1* IT SHOULD BE A NUMBER ONLY    IF TEMP_DATA[1,1]=' ' THEN TEMP_DATA=TEMP_DATA[2,MAX_LENGTH]* NEXT CHARACTER WILL EITHER BE A },OR SPACXE    NEXT1=INDEX(TEMP_DATA,' ',1)    NEXT2=INDEX(TEMP_DATA,'}',1)    NEXT3=INDEX(TEMP_DATA,',',1)    N=NEXT1    IF NEXT2 < N THEN N=NEXT2    IF NEXT3 < N THEN N=NEXT3    JSON_RESULT=TEMP_DATA[1,N-1]END CASERETURN*getobject: *OBJECTNUMBER=FIELD(FIRST_KEY,']',1)OBJECTNUMBER=FIELD(OBJECTNUMBER,'[',2)INSIDE$QUOTES=0OBJECTCOUNT=0CHARCNTR=0NESTCOUNT=0JSON_RESULT=''DOINGCOUNT=0LEN_JSON_STRING=LEN(JSON_STRING)IF OBJECTNUMBER='#' THEN  OBJECTNUMBER=99999999  DOINGCOUNT=1ENDLOOP  CHARCNTR+=1  IF CHARCNTR > LEN_JSON_STRING THEN EXIT  C=JSON_STRING[CHARCNTR,1]  BEGIN CASE    CASE NOT(INSIDE$QUOTES) AND C='"'      JSON_RESULT:=C      INSIDE$QUOTES=1    CASE INSIDE$QUOTES AND C='"'      JSON_RESULT:=C      INSIDE$QUOTES=0    CASE INSIDE$QUOTES      JSON_RESULT:=C    CASE C='{' AND NOT(NESTCOUNT)* WE HAVE THE START OF OUR OBJECT      JSON_RESULT=C      NESTCOUNT=1      OBJECTCOUNT+=1    CASE C='{' AND NOT(INSIDE$QUOTES)* GOING A NEXT DEEPER      JSON_RESULT:=C      NESTCOUNT+=1    CASE C='}'      JSON_RESULT:=C      NESTCOUNT=NESTCOUNT-1      IF NESTCOUNT = 0 THEN        IF OBJECTNUMBER=OBJECTCOUNT-1 THEN          EXIT; * WE HAVE OUR OBJECT        END ELSE          NESTCOUNT=0          JSON_RESULT=''; * RESET OUR OBJECT        END      END    CASE NESTCOUNT=0; * DO NOTHING    CASE 1      JSON_RESULT:=C  END CASE  IF 0 THEN    PRINT C,'NESTCOUNT=':NESTCOUNT:' OBJECTCOUNT=':OBJECTCOUNT:' INQUOTE=':INSIDE$QUOTES:' CHARCNTR=':CHARCNTR  END  IF DOINGCOUNT THEN JSON_RESULT=OBJECTCOUNTREPEATIF 0 THEN  PRINT JSON_RESULT  PRINT  PRINT JSON_STRING[1,CHARCNTR+50]  INPUT WAITENDRETURNEND0002E8WBUILDJSON0c2SUBROUTINE WBUILDJSON(JSONSTRING,NAME,VALUE,RETURNERROR)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 8/13/2016* Description: build json string***********************************************************************RETURNERROR=''*CALL FIX.ESCAPE.DATA.JSON('\',NAME,OUT_NAME)*CALL FIX.ESCAPE.DATA.JSON('\',VALUE,OUT_VALUE)CALL WENCODEJSON('',NAME,OUT_NAME)CALL WENCODEJSON('',VALUE,OUT_VALUE)TEMP_STRING='"':OUT_NAME:'":"':OUT_VALUE:'"'L=LEN(JSONSTRING)LAST_C=JSONSTRING[L,1]IF LAST_C = "}" OR LAST_C='"' OR LAST_C = "]" THEN TEMP_STRING=', ':TEMP_STRINGJSONSTRING:=TEMP_STRINGRETURNEND00198FWSEND0c2SUBROUTINE WSEND(FORM)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Original Author: Luke J. Bucklin, Sierra Bravo* Date: 2/29/00* Modified By  : Mike Schmidt, Sierra Bravo* Modified By  : Peter Schellenbach & Patrick Payne, Zumasys* Purpose: Send the web page.* Forked off new version as WSEND for REST services based on original WEB.SEND** Modified by Peter Schellenbach 09-21-2017*  Removed extra @AM appended to the content to prevent extra CR from being sent in response** Modified by Peter Schellenbach 10-18-2017*  Removed duplicate debug info being sent in html or xml output. Removed logging*  code as this is handled by WDB.INIT / JAGENTWDBINIT when saving debug info.** Modified by Patrick Payne 04-29-2020*  Issue #5.  HTTP wants new lines to be CHAR(13):CHAR(10).  We cannot depend on*  pick PRINT statements to output the new line since one linux it will only do*  char(10).  All output statements are updated to*  PRINT <DATA>:NEW.LINE:    where new.line=CHAR(13):CHAR(1)*************************************************************************                1) Header Management: This program will check to see*                   if the content type has been written to the browser*                   before ever printing anything to standard out.  If*                   the headers have not been sent, the program will print*                   the headers using the SESSION$CONTENT.TYPE,*                   SESSION$HEADERS, and SESSION$COOKIES session variables.*                   The program will then set the SESSION$CONTENT.SENT*                   variable.*                   WARNING: This program assumes that the global SESSION*                   variables were setup prior to using this subroutine.*                   WARNING: The SESSION$OUTBUF.SIZE should not be relied*                   upon to prevent the buffer from exceeding the set limit.*                   This program simply flushes the buffer if it exceeds*                   the set size limit.**                2) Buffer Management: Instead of always printing every*                   thing to standard out, by default the program will*                   write everything passed into into the SESSION$OUTBUF*                   variable.  This program will then flush the buffer*                   under certain situations.  The first is if the buffer*                   size reaches the limit set in SESSION$OUTBUF.SIZE. If*                   this happens the prgram will flush the buffer then*                   reinitialize it.  The second is if the SESSION$OUTBUF.FLAG*                   is set to FALSE, then this program will always flush*                   the buffer.**                3) The program will display debug information if the global*                   variable SESSION$GLOBAL.DEBUG flag is >= 3.************************************************************************* Add the incoming string to the buffer.INCLUDE WBPD WWW.INCLUDE*NEW.LINE = CHAR(13):CHAR(10); * We need to force this as a new lineSHOW.SESSION.VARS = 0IF SESSION$GLOBAL.DEBUG >= 3 THEN  OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SHOW.SESSION.VARS = 1END*IF FORM <> '' THEN  CALL WSWAP(FORM,'<!-- CGI$PATH -->',CGI$PATH)*PJS 09-21-2017*SESSION$OUTBUF := FORM:@AM  SESSION$OUTBUF := FORM ; *PJS 09-21-2017*END** If the buffer is greater then the max size or the buffer flag is false then flush.IF LEN(SESSION$OUTBUF) >= SESSION$OUTBUF.SIZE OR NOT(SESSION$OUTBUF.FLAG) THEN* Before flushing, check to see if the headers have been send.  IF NOT(SESSION$CONTENT.SENT) THEN    IF SESSION$STATUS.CODE > 0 THEN* 04-21-17 send the status code before headers      PRINT "X-MVDB-STATUS: ":SESSION$STATUS.CODE:NEW.LINE:    END* The headers have not been sent so send them now.    IF SESSION$CONTENT.TYPE = "" THEN      CALL WSETCONTENTTYPE("application/json")    END* If there are any cookies that need to be set, do it now.    PRINT "Content-type: ":SESSION$CONTENT.TYPE:NEW.LINE:* If there are any cookies that need to be set, do it now.    FOR I = 1 TO DCOUNT(SESSION$COOKIES, @AM)      COOKIE = SESSION$COOKIES<I>      IF INDEX(COOKIE, "; path=", 1) + INDEX(COOKIE, ";path=", 1) = 0 THEN COOKIE := "; path=/"      PRINT "Set-Cookie: ":COOKIE:NEW.LINE:    NEXT I* If there are any additional headers that need to be set, do it now.    PRINT 'Cache-Control: no-cache'    FOR I = 1 TO DCOUNT(SESSION$HEADERS, @AM)      PRINT SESSION$HEADERS<I>:NEW.LINE:    NEXT I* Now print the blank line that ends the headers.    PRINT    IF INDEX(SESSION$CONTENT.TYPE,'html',1) THEN      IF INDEX(SESSION$OUTBUF<1>,'<!DOCTYPE',1) = 0 THEN        PRINT '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"':NEW.LINE:        PRINT '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">':NEW.LINE:      END    END* Set the SESSION$CONTENT.SENT variable so next time we know not to send the headers.    SESSION$CONTENT.SENT = 1* From this point on, do not buffer.    IF SESSION$OUTBUF.FLAG THEN      CALL WSETBUFFER(0)    END  END  LINE.CNT = DCOUNT(SESSION$OUTBUF, @AM)  FOR LINE.J = 1 TO LINE.CNT    PRINT SESSION$OUTBUF<LINE.J>:NEW.LINE:  NEXT LINE.J  IF SESSION$GLOBAL.DEBUG >= 3 THEN    IF INDEX(SESSION$CONTENT.TYPE,'xml',1) OR INDEX(SESSION$CONTENT.TYPE,'html',1) THEN* If the debug flag is set then dump all the session information to the browser.      PRINT '<!-- Debug Information generated by WEB.SEND.  This feature can be turned off by':NEW.LINE:      PRINT '     setting the SESSION$GLOBAL.DEBUG = "1" in the initalization program     -->':NEW.LINE:      PRINT '<!-- START DEBUG OUPUT ':NEW.LINE:      PRINT '     GET AND POST VARS:':NEW.LINE:      FOR I = 1 TO DCOUNT(CGI$VARS, @AM)        PRINT '     ':CGI$VARS<I>:' = ':CGI$VALS<I>:NEW.LINE:      NEXT I      PRINT      IF SHOW.SESSION.VARS THEN        PRINT '    SESSION VARIABLES:':NEW.LINE:        PRINT '    SESSION$ID = ':SESSION$ID:NEW.LINE:        READ REC FROM F.WEB.SESSION, SESSION$ID THEN          PRINT '    SESSION DATE = ':OCONV(REC<3>,'D4/'):NEW.LINE:          PRINT '    SESSION TIME = ':OCONV(REC<4>,'MTS,'):NEW.LINE:          FOR I = 1 TO DCOUNT(REC<1>, @VM)            PRINT '    ':REC<1,I>:' = ':REC<2,I>:NEW.LINE:          NEXT I        END      END      PRINT '    END DEBUG OUTPUT -->':NEW.LINE:      PRINT NEW.LINE:    END  END  SESSION$OUTBUF = ''ENDRETURNEND000217WGETVAR0c2SUBROUTINE WGETVAR(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: extract value of a request variable***********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''TEMPVARS = OCONV(CGI$VARS, 'MCU')LOCATE OCONV(VarName, 'MCU') IN TEMPVARS SETTING POS THEN  VarValue = CGI$VALS<POS>ENDRETURNEND0002BEWGETPARAM0c2SUBROUTINE WGETPARAM(ParamVal, ParamNum)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: March 2017* Description: return a parameter from the URL. Assume the* URL is in the format:**   http://api.hostname.com/api/resource/key/command/opt1/opt2/opt3** ParamNum = 1 ParamVal = key*            2            command*            3            opt1*            4            opt2*            5            opt3***********************************************************************INCLUDE WBPD WWW.INCLUDEParamVal = CGI$RESTPARAMS<ParamNum>RETURNEND0001F3WFLUSH0c2SUBROUTINE WFLUSH************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This program calls WSETBUFFER(FALSE) then *                calls WSEND("")*              **********************************************************************INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*CALL WSETBUFFER(FALSE)CALL WSEND("")RETURNEND005961WDEBUG0c2* WDEBUG** Debug REST Services* Copyright (c) 2017 Zumasys Inc.* Rewritten by Peter Schellenbach, 10/18/2017** Based on original version:*  Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved*  Written by: Luke Bucklin, Sierra Bravo*  Date: Sometime, 2006-ish*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD FI.WDB.DEBUG*CLR.SCR = @(-1)CLR.EOS = @(-3)MAX.LINES = SYSTEM(3) - 4MAX.COLS = SYSTEM(2) - 1IF MAX.LINES <= 0 OR CLR.SCR = '' OR CLR.EOS = '' THEN  MAX.LINES = 20  CLR.SCR = ''  CLR.EOS = ''  PRMPT.LINE = CHAR(13):CHAR(10)END ELSE  PRMPT.LINE = @(0, MAX.LINES + 2):CLR.EOSENDPROMPT ''*PRINT CLR.SCR:PRINTPRINT 'WDEBUG Web Request Degug Tool'PRINTPRINT 'The WDEBUG tool allows you to inspect, modify and re-run web requests.'PRINT 'Whenever a request for a debuggable resource is processed by WDB.INIT,'PRINT 'a debug record for the request is added to the WDB.DEBUG file. WDEBUG'PRINT 'allows you to select a debug record, view the request details, edit the'PRINT 'request variables, re-run the request and view the response.'PRINTPRINT 'To debug web requests for a resource, set attribute 7 of the WDB.RESOURCE'PRINT 'record for the resource to 1, then issue the web request from the client'PRINT 'browser or other agent. WDEBUG will show a list of recent web requests to'PRINT 'select from.'PRINTPRINT 'Start WDEBUG with an active select list if you need to use special criteria'PRINT 'to select the record(s) you need to debug.'PRINTPRINT 'Press <enter> to continue':INPUT ANS*OPEN 'WDB.DEBUG' TO F.WDB.DEBUG ELSE  PRINT 'The WDB.DEBUG data file is required to use WDEBUG. Default installations'  PRINT 'only create the dictionary for this file. Please create the data section'  PRINT 'to use WDEBUG: CREATE-FILE DATA WDB.DEBUG 101.'  STOPEND*SESSION.FLAG = 0OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SESSION.FLAG = 1 ;* can restore session when running debug reqest*EDITOR = ''IDS = ''NUM.IDS = 0IF SYSTEM(11) THEN  LOOP    READNEXT ID ELSE EXIT    READV X FROM F.WDB.DEBUG, ID, 1 THEN      IDS<-1> = ID      NUM.IDS += 1    END ELSE      PRINT ID:' not found in WDB.DEBUG!'    END  REPEATENDUSE.SUPPLIED.LIST = (NUM.IDS > 0)*LOOP  IF NOT(USE.SUPPLIED.LIST) THEN* Select available WDB.DEBUG items    CMND = 'SSELECT WDB.DEBUG WITH TYPE = "C" "R" BY-DSND DATE BY-DSND TIME'    EXECUTE CMND CAPTURING RESULT    IF SYSTEM(11) = 0 THEN      PRINT "No items found."      STOP    END    IDS = ''    NUM.IDS = 0    LOOP      READNEXT ID ELSE EXIT      IDS<-1> = ID      NUM.IDS += 1    REPEAT  END*  TOP = 0  LOOP* Display page of items    PRINT CLR.SCR:    PRINT "Ln Date. Time.... Path................ Remote Address...... Request ID........."    FOR CNTR = 1 TO MAX.LINES UNTIL CNTR + TOP > NUM.IDS      DBG.ID = IDS<CNTR>      READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE CONTINUE      PATH.INFO = DBGREC<WDBG_PATH>      IF PATH.INFO = '' THEN PATH.INFO = DBGREC<WDBG_HANDLER>:'/':DBGREC<WDBG_RESOURCE>      PRINT CNTR "R#2 ":      PRINT OCONV(DBGREC<WDBG_DATE>, 'D0-') "L#5 ":      PRINT OCONV(DBGREC<WDBG_TIME>, 'MTS') "L#8 ":      PRINT PATH.INFO "L#20 ":      PRINT DBGREC<WDBG_REMOTE_ADDR> "L#20 ":      PRINT DBGREC<WDBG_REQUEST_ID>[1,20]    NEXT CNTR    IF TOP + MAX.LINES > NUM.IDS THEN BOT = NUM.IDS ELSE BOT = TOP + MAX.LINES    PRINT "Showing items ":(TOP + 1):"-":BOT:" of ":NUM.IDS*    LOOP      PRINT PRMPT.LINE:"Command: (Q)uit (R)efresh (C)lear (N)ext (P)rev (##) Line to debug: ":      INPUT COMMAND      IF COMMAND MATCHES '1N0N' THEN        IF COMMAND >= 1 AND COMMAND <= MAX.LINES AND COMMAND + TOP <= NUM.IDS THEN          DBG.ID = IDS<COMMAND + TOP>          GOSUB debug.request        END        COMMAND = ''      END ELSE        COMMAND = OCONV(COMMAND[1,1], 'MCU')        IF COMMAND = '' THEN COMMAND = 'N'        IF INDEX('ERCNPQ', COMMAND, 1) = 0 THEN COMMAND = ''      END    WHILE COMMAND = '' DO REPEAT*    BEGIN CASE      CASE COMMAND = 'N'        IF TOP + MAX.LINES < NUM.IDS THEN TOP += MAX.LINES      CASE COMMAND = 'P'        IF TOP - MAX.LINES >= 0 THEN TOP -= MAX.LINES    END CASE  WHILE COMMAND = 'N' OR COMMAND = 'P' DO REPEAT*UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'R' ; NULL    CASE COMMAND = 'C'      EXECUTE 'SELECT WDB.DEBUG WITH TYPE = "C" "R"'      PRINT 'Are you sure you want to clear these items from the WDB.DEBUG file? ':      INPUT ANS      ANS = OCONV(ANS[1,1],'MCU')      IF ANS = 'Y' THEN        IF SYSTEM(11) THEN          LOOP            READNEXT ID ELSE EXIT            DELETE F.WDB.DEBUG, ID          REPEAT        END      END ELSE        CLEARSELECT      END  END CASEREPEATSTOP**----------debug.request:*----------*READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE  PRINT "The selected item '":DBG.ID:"' is not available!"  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDEDIT.ID = 'D':DBG.ID[2, LEN(DBG.ID)]LOOP  PRINT PRMPT.LINE:"Debugging ":DBG.ID[1,28]:" - command: (Q)uit (V)iew (E)dit (R)un: ":  INPUT COMMAND  COMMAND = OCONV(COMMAND[1,1], 'MCU')UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'V'      GOSUB view.request    CASE COMMAND = 'E'      GOSUB edit.request    CASE COMMAND = 'R'      GOSUB run.request  END CASEREPEATRETURN**----------view.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDGOSUB to.editNUM.LNS = DCOUNT(EDIT.REC, @AM)I = 1LOOP WHILE I <= NUM.LNS DO  X = EDIT.REC<I>  IF LEN(X) > MAX.COLS THEN    X = FOLD(X, MAX.COLS, @AM)    EDIT.REC<I> = X    N = COUNT(X, @AM)    NUM.LNS += N    I += N  END  I += 1REPEATIF NUM.LNS = 0 THEN NUM.LNS = 1NUM.PGS = INT((NUM.LNS - 1) / MAX.LINES) + 1CUR.PG = 1LOOP  PG.TOP = (CUR.PG - 1) * MAX.LINES  IF PG.TOP + MAX.LINES > NUM.LNS THEN LPP = NUM.LNS - PG.TOP ELSE LPP = MAX.LINES  PRINT CLR.SCR:  PRINT 'Page ':CUR.PG:' of ':NUM.PGS:SPACE(10):DBG.ID  PRINT  FOR I = 1 TO LPP    PRINT EDIT.REC<I + PG.TOP>  NEXT I  PRINT PRMPT.LINE:'Command: (Q)uit (N)ext (P)rev (##) Goto page ':  INPUT COMMAND  IF COMMAND MATCHES '1N0N' THEN    IF COMMAND >= 1 AND COMMAND <= NUM.PGS THEN CUR.PG = COMMAND  END ELSE    COMMAND = OCONV(COMMAND[1,1], 'MCU')  ENDUNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'N' OR COMMAND = ''      IF CUR.PG < NUM.PGS THEN CUR.PG = CUR.PG + 1    CASE COMMAND = 'P'      IF CUR.PG > 1 THEN CUR.PG = CUR.PG - 1  END CASEREPEATRETURN**----------edit.request:*----------*IF EDITOR = '' THEN GOSUB choose.editorIF EDITOR <> '' THEN  EDIT.ID = 'D':DBG.ID  GOSUB to.edit  WRITE EDIT.REC ON F.WDB.DEBUG, EDIT.ID  CMND = EDITOR:' WDB.DEBUG ':EDIT.ID  EXECUTE CMND  READ EDIT.REC FROM F.WDB.DEBUG, EDIT.ID ELSE NULL  DELETE F.WDB.DEBUG, EDIT.ID  GOSUB from.editENDRETURN**----------run.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNEND*HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* Reconstruct query stringQSTR = ''QSEP = ''* headers and server variablesN = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_HEADER_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* form variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_CGI_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_CGI_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  URLENCODE.STRING = CHANGE(THE.BODY, @VM, CHAR(10))  GOSUB url.encode  QSTR := QSEP:'__body__=':NEW.STRINGEND* restore session stateIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    SESSION.REC = ''    SESSION.REC<1> = DBGREC<WDBG_SESSION_VARS>    SESSION.REC<2> = DBGREC<WDBG_SESSION_VALS>    SESSION.REC<3> = DBGREC<WDBG_SESSION_DATE>    SESSION.REC<4> = DBGREC<WDBG_SESSION_TIME>    WRITE SESSION.REC ON F.WEB.SESSION, SESSION.ID  ENDEND* break the query string into 1000 byte chunksN = INT((LEN(QSTR) - 1) / 1000) + 1* build the command lineRUN.ID = DBGREC<WDBG_REQUEST_ID>CMND = 'WDB.INIT ':HANDLER.NAME:'/':RESOURCE.NAME:' ':RUN.ID:'-1-':N:' %% _WDEBUG_MODE_'** run the commandPRINTPRINT 'Executing the request: ':CMNDPRINTMAT WWW.INFO = ""EXECSTART = SYSTEM(12)* send query string as stacked inputFOR I = 1 TO N  DATA QSTR[((I - 1) * 1000) + 1, 1000]NEXT IEXECUTE CMND CAPTURING RESPONSEEXECDUR = SYSTEM(12) - EXECSTARTPRINT 'Request complete. Press <enter> to parse results':INPUT ANS** update the request runtimeDBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_DURATION> = EXECDUR* process the responseLINT.BEFORE = ''LINT.AFTER = ''WARN = ''ERR = ''* Gather lint from before the start tag and after the complete tagDBGREC<WDBG_WARNING> = '' ;* WarningsDBGREC<WDBG_ERROR> = '' ;* ErrorsDBGREC<WDBG_LINT> = '' ;* LintIF RESPONSE<1> = "700 WDB-START" THEN  RESPONSE = DELETE(RESPONSE, 1)END ELSE  TAG = @AM:"700 WDB-START":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '700 WDB-START tag is missing from response'    LINT.BEFORE = RESPONSE    RESPONSE = ''  END ELSE    IF TAG.POS >= 1 THEN      LINT.BEFORE = RESPONSE[1, TAG.POS - 1]      RESPONSE = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    END  ENDENDN = DCOUNT(RESPONSE, @AM)IF RESPONSE<N> = "800 WDB-COMPLETE" THEN  RESPONSE = DELETE(RESPONSE, N)END ELSE  TAG = @AM:"800 WDB-COMPLETE":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '800 WDB-COMPLETE tag missing from response!'  END ELSE    LINT.AFTER = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    RESPONSE = RESPONSE[1, TAG.POS - 1]  ENDEND* Clean up lintIF TRIM(CHANGE(LINT.BEFORE, @AM, '')) = '' THEN LINT.BEFORE = ''IF TRIM(CHANGE(LINT.AFTER, @AM, '')) = '' THEN LINT.AFTER = ''IF LINT.BEFORE <> '' OR LINT.AFTER <> '' THEN  LINT = LINT.BEFORE  IF LINT.BEFORE <> '' AND LINT.AFTER <> '' THEN LINT := @AM:'...':@AM  LINT := LINT.AFTER  DBGREC<WDBG_LINT> = CHANGE(CHANGE(LINT, @VM, @SVM), @AM, @VM)END* Parse the response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''DBGREC<WDBG_RESPONSE_CONTENT> = ''NUM.VARS = 0STATUS.CODE = ''EOH = INDEX(RESPONSE, @AM:@AM, 1) ;* headers end at first blank line in responseIF EOH = 0 THEN EOH = LEN(RESPONSE) + 1N = DCOUNT(RESPONSE[1, EOH - 1], @AM)FOR I = 1 TO N  HDR.LINE = RESPONSE<I>  IF HDR.LINE[1,10] = '500 ERROR ' THEN    ERR = HDR.LINE[11, LEN(HDR.LINE)]    IF STATUS.CODE = '' THEN STATUS.CODE = 500  END ELSE    HDR.VAR = FIELD(HDR.LINE, ':', 1)    HDR.VAL = TRIMF(HDR.LINE[COL2() + 1, LEN(HDR.LINE)])    M = LEN(HDR.VAR)    FOR J = 1 TO M      IF NOT(HDR.VAR[J,1] MATCHES '1A') AND HDR.VAR[J,1] <> '-' THEN        HDR.VAR = ''        EXIT      END    NEXT J    IF HDR.LINE[LEN(HDR.VAR) + 1, 1] <> ':' THEN HDR.VAR = ''    IF HDR.VAR = '' THEN      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = '_BAD_'      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.LINE ;* invalid header line!    END ELSE      IF HDR.VAR = 'X-MVDB-STATUS' THEN        STATUS.CODE = HDR.VAL      END ELSE        NUM.VARS += 1        DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = HDR.VAR        DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.VAL      END    END  ENDNEXT IIF STATUS.CODE = '' THEN STATUS.CODE = 200DBGREC<WDBG_STATUS> = STATUS.CODE* save response contentIF EOH + 2 <= LEN(RESPONSE) THEN  DBGREC<WDBG_RESPONSE_CONTENT> = CHANGE(CHANGE(RESPONSE[EOH + 2, LEN(RESPONSE)], @VM, @SVM), @AM, @VM)ENDDBGREC<WDBG_WARNING> = WARNDBGREC<WDBG_ERROR> = ERRRETURN**----------to.edit:*----------*EDIT.REC = ''EDIT.REC<-1> = '[INFO] (do not edit this section)'EDIT.REC<-1> = 'Date            = ':OCONV(DBGREC<WDBG_DATE>,'D4')EDIT.REC<-1> = 'Time            = ':OCONV(DBGREC<WDBG_TIME>,'MTS')EDIT.REC<-1> = 'Duration        = ':DBGREC<WDBG_DURATION>EDIT.REC<-1> = 'Port            = ':DBGREC<WDBG_PORT>EDIT.REC<-1> = 'Handler         = ':DBGREC<WDBG_HANDLER>EDIT.REC<-1> = 'Resource        = ':DBGREC<WDBG_RESOURCE>EDIT.REC<-1> = 'Controller      = ':DBGREC<WDBG_CONTROLLER>EDIT.REC<-1> = 'Program         = ':DBGREC<WDBG_PROGRAM>EDIT.REC<-1> = 'RequestID       = ':DBGREC<WDBG_REQUEST_ID>EDIT.REC<-1> = 'Method          = ':DBGREC<WDBG_METHOD>EDIT.REC<-1> = 'Path            = ':DBGREC<WDBG_PATH>EDIT.REC<-1> = 'RemoteAddr      = ':DBGREC<WDBG_REMOTE_ADDR>EDIT.REC<-1> = 'Status          = ':DBGREC<WDBG_STATUS>IF DBGREC<WDBG_WARNING> <> '' THEN  EDIT.REC<-1> = 'WARNING: ':DBGREC<WDBG_WARNING>ENDIF DBGREC<WDBG_ERROR> <> '' THEN  EDIT.REC<-1> = 'ERROR: ':DBGREC<WDBG_ERROR>ENDIF DBGREC<WDBG_LINT> <> '' THEN  EDIT.REC<-1> = 'LINT:':@AM:CHANGE(CHANGE(DBGREC<WDBG_LINT>, @VM, @AM), @SVM, @VM)END* Request headers and server variablesEDIT.REC<-1> = @AM:'[HEADERS]'N = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  HDR.VAL = DBGREC<WDBG_HEADER_VALS, I>  EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VALNEXT I* Query string variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[VARS]'  FOR I = 1 TO N    CGI.VAR = DBGREC<WDBG_CGI_VARS, I>    CGI.VAL = DBGREC<WDBG_CGI_VALS, I>    EDIT.REC<-1> = CGI.VAR:SPACE(16-LEN(CGI.VAR)):'= ':CGI.VAL  NEXT IEND* CookiesLOCATE 'HTTP_COOKIE' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  CSTRING = DBGREC<WDBG_HEADER_VALS, POS>END ELSE CSTRING = ''CONVERT ';' TO @AM IN CSTRINGN = DCOUNT(CSTRING, @AM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[COOKIES]'  FOR I = 1 TO N    COOKIE.VAR = TRIM(FIELD(CSTRING<I>, '=', 1))    COOKIE.VAL = CSTRING<I>[COL2() + 1, 99999]    EDIT.REC<-1> = COOKIE.VAR:SPACE(16-LEN(COOKIE.VAR)):'= ':COOKIE.VAL  NEXT IEND* REST parametersLOCATE 'PATH_INFO' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  PATH = DBGREC<WDBG_HEADER_VALS, POS>END ELSE PATH = ''IF PATH[1,1] = '/' THEN PATH = PATH[2,9999]N = DCOUNT(PATH, '/')IF N > 0 THEN  EDIT.REC<-1> = @AM:'[PARAMS]'  FOR I = 3 TO N    PARAM.VAR = 'Param[':(I-2):']'    EDIT.REC<-1> = PARAM.VAR:SPACE(16-LEN(PARAM.VAR)):'= ':FIELD(PATH, '/', I)  NEXT IEND* Session variablesIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    N = DCOUNT(DBGREC<WDBG_SESSION_VARS>, @VM)    IF N > 0 THEN      EDIT.REC<-1> = @AM:'[SESSION]'      EDIT.REC<-1> = '_SessionID      = ':SESSION.ID      IF DBGREC<WDBG_SESSION_DATE> <> '' THEN EDIT.REC<-1> = '_Date           = ':OCONV(DBGREC<20>, 'D4')      IF DBGREC<WDBG_SESSION_TIME> <> '' THEN EDIT.REC<-1> = '_Time           = ':OCONV(DBGREC<21>, 'MTS')      FOR I = 1 TO N        SESSION.VAR = DBGREC<WDBG_SESSION_VARS, I>        EDIT.REC<-1> = SESSION.VAR:SPACE(16-LEN(SESSION.VAR)):'= ':DBGREC<WDBG_SESSION_VALS, I>      NEXT I    END  ENDEND* Request bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  EDIT.REC<-1> = @AM:'[BODY]':@AM:CHANGE(CHANGE(THE.BODY, @VM, @AM), @SVM, @VM)END* Response headersN = DCOUNT(DBGREC<WDBG_RESPONSE_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[RESPONSE_HEADERS]'  FOR I = 1 TO N    HDR.VAR = DBGREC<WDBG_RESPONSE_VARS, I>    HDR.VAL = DBGREC<WDBG_RESPONSE_VALS, I>    EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VAL  NEXT IEND* Response contentTHE.CONTENT = DBGREC<WDBG_RESPONSE_CONTENT>IF THE.CONTENT <> '' THEN  EDIT.REC<-1> = @AM:'[RESPONSE_CONTENT]':@AM:CHANGE(CHANGE(THE.CONTENT, @VM, @AM), @SVM, @VM)END*RETURN**----------from.edit:*----------*SESSION.ID = ''HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* If COOKIES section exists, rebuild HTTP_COOKIE headerCOOKIES = ''SECT = 'COOKIES'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    COOKIE = EDIT.REC<I>    IF COOKIE <> '' THEN      COOKIE.NAME = TRIM(FIELD(COOKIE, '=', 1))      COOKIE.VAL = TRIMF(COOKIE[COL2() + 1, LEN(COOKIE)])      COOKIES := COOKIE.NAME:'=':COOKIE.VAL:';'      IF OCONV(COOKIE.NAME, 'MCU') = 'SESSIONID' THEN SESSION.ID = COOKIE.VAL    END  NEXT I  IF COOKIES[LEN(COOKIES), 1] = ';' THEN COOKIES = COOKIES[1, LEN(COOKIES) - 1]END* If PARAMS section exists, rebuild PATH_INFO headerPARAMS = ''SECT = 'PARAMS'GOSUB find.sectionIF SECT.START > 0 THEN  PNUM = 1  FOR I = SECT.START + 1 TO SECT.END    PARAM = EDIT.REC<I>    IF PARAM <> '' THEN      PARAM.NAME = TRIM(OCONV(FIELD(PARAM, '=', 1), 'MCU'))      PARAM.VAL = TRIMF(PARAM[COL2() + 1, LEN(PARAM)])      IF PARAM.NAME <> 'PARAM[':PNUM:']' THEN EXIT      PARAMS := '/':PARAM.VAL      PNUM += 1    END  NEXT I  IF PARAMS <> '' THEN PARAMS = '/':HANDLER.NAME:'/':RESOURCE.NAME:PARAMS ;* handler & resource come before paramsEND* Get headers and server variablesDBGREC<WDBG_HEADER_VARS> = ''DBGREC<WDBG_HEADER_VALS> = ''NUM.VARS = 0SECT = 'HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])* check for special headers      BEGIN CASE        CASE OCONV(VAR.NAME, 'MCU') = 'HTTP_COOKIE'          IF COOKIES <> '' THEN            VAR.VAL = COOKIES          END        CASE OCONV(VAR.NAME, 'MCU') = 'PATH_INFO'          IF PARAMS <> '' THEN            VAR.VAL = PARAMS          END          IF VAR.VAL[1,1] <> '/' THEN VAR.VAL = '/' : VAR.VAL          IF COUNT(VAR.VAL, '/') >= 2 THEN            HANDLER.NAME = FIELD(VAR.VAL, '/', 2)            RESOURCE.NAME = FIELD(VAR.VAL, '/', 3)          END          DBGREC<WDBG_PATH> = VAR.VAL        CASE OCONV(VAR.NAME, 'MCU') = 'REQUEST_METHOD'          DBGREC<WDBG_METHOD> = VAR.VAL              CASE OCONV(VAR.NAME, 'MCU') = 'REMOTE_ADDR'          DBGREC<WDBG_REMOTE_ADDR> = VAR.VAL      END CASE      NUM.VARS += 1      DBGREC<WDBG_HEADER_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_HEADER_VALS, NUM.VARS> = VAR.VAL    END  NEXT I  DBGREC<WDBG_HANDLER> = HANDLER.NAME  DBGREC<WDBG_RESOURCE> = RESOURCE.NAMEEND* Get form variablesDBGREC<WDBG_CGI_VARS> = ''DBGREC<WDBG_CGI_VALS> = ''NUM.VARS = 0SECT = 'VARS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_CGI_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_CGI_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get bodyDBGREC<WDBG_BODY> = ''SECT = 'BODY'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.BODY = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_BODY> = CHANGE(CHANGE(THE.BODY, @VM, @SVM), @AM, @VM)  ENDEND* Get session stateIF SESSION.FLAG AND SESSION.ID <> '' THEN  DBGREC<WDBG_SESSION_ID> = ''  DBGREC<WDBG_SESSION_VARS> = ''  DBGREC<WDBG_SESSION_VALS> = ''  DBGREC<WDBG_SESSION_DATE> = ''  DBGREC<WDBG_SESSION_TIME> = ''  NUM.VARS = 0  SECT = 'SESSION'  GOSUB find.section  IF SECT.START > 0 THEN    FOR I = SECT.START + 1 TO SECT.END      SESSION.LINE = EDIT.REC<I>      SESSION.VAR = TRIM(FIELD(SESSION.LINE, '=', 1))      SESSION.VAL = TRIMF(SESSION.LINE[COL2() + 1, LEN(SESSION.LINE)])      BEGIN CASE        CASE SESSION.VAR = '_SessionID'          DBGREC<WDBG_SESSION_ID> = SESSION.VAL        CASE SESSION.VAR = '_Date'          DBGREC<WDBG_SESSION_DATE> = ICONV(SESSION.VAL, 'D')        CASE SESSION.VAR = '_Time'          DBGREC<WDBG_SESSION_TIME> = ICONV(SESSION.VAL, 'MTS')        CASE 1          NUM.VARS += 1          DBGREC<WDBG_SESSION_VARS, NUM.VARS> = SESSION.VAR          DBGREC<WDBG_SESSION_VALS, NUM.VARS> = SESSION.VAL      END CASE    NEXT I  ENDEND* Get response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''NUM.VARS = 0SECT = 'RESPONSE_HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get response contentDBGREC<WDBG_RESPONSE_CONTENT> = ''SECT = 'RESPONSE_CONTENT'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.CONTENT = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_RESPONSE_CONTENT> = CHANGE(CHANGE(THE.CONTENT, @VM, @SVM), @AM, @VM)  ENDENDRETURN**----------choose.editor:*----------*PRINTLOOP  PRINT 'Select the editor you want to use: 1 = ED, 2 = other: ':  INPUT ANSUNTIL ANS EQ '' DO  BEGIN CASE    CASE ANS = 1      EDITOR = 'ED'      EXIT    CASE ANS = 2      PRINT 'Enter the verb to invoke your editor: ':      INPUT TMP      PRINT TMP:' OK?':      INPUT ANS      ANS = OCONV(ANS[1,1], 'MCU')      IF ANS = 'Y' THEN        EDITOR = TMP        EXIT      END  END CASEREPEATRETURN**----------find.section:*----------*SECT.START = -1SECT.END = -1TAG = @AM:'[':SECT:']':@AMTAG.POS = INDEX(EDIT.REC, TAG, 1)IF TAG.POS = 0 THEN RETURN ;* Section not foundSECT.START = DCOUNT(EDIT.REC[1, TAG.POS], @AM)SECT.END = DCOUNT(EDIT.REC, @AM)FOR I = SECT.START + 1 TO SECT.END  SECT.LN = EDIT.REC<I>  IF SECT.LN MATCHES '"["1A0A"]"' OR SECT.LN MATCHES '"["1A0A"_"1A0A"]"' THEN* beginning of next section is end of current section    SECT.END = I - 1    EXIT  ENDNEXT IRETURN**----------url.encode:*----------*NEW.STRING = ""UE.LEN = LEN(URLENCODE.STRING)FOR UEX = 1 TO UE.LEN  UE.CHR = URLENCODE.STRING[UEX,1]  UE.CVAL = SEQ(UE.CHR)  BEGIN CASE    CASE UE.CVAL < 32; ENC.FLAG = 1   ;* control character    CASE UE.CVAL = 37 OR UE.CVAL = 38 OR UE.CVAL = 43 OR UE.CVAL = 61; ENC.FLAG = 1 ;* % & + =    CASE UE.CVAL = 127; ENC.FLAG = 1  ;* DEL control character    CASE UE.CVAL >= 252; ENC.FLAG = 1 ;* delimiter character    CASE 1 ; ENC.FLAG = 0  END CASE  IF ENC.FLAG THEN    UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')  END  NEW.STRING := UE.CHRNEXT UEXRETURN*END000235WGETCOOKIE0c2SUBROUTINE WGETCOOKIE(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine gets the value of a cookie.*              **********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''TEMPVARS = OCONV(CGI$CVARS,'MCU')LOCATE OCONV(VarName,'MCU') IN TEMPVARS SETTING POS THEN  VarValue = CGI$CVALS<POS>ENDRETURNEND000256WSETCONTENTTYPE0c2SUBROUTINE WSETCONTENTTYPE(CONTENTTYPE)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine sets the SESSION$CONTENT.TYPE variable.*                This value is used in the Content-Type HTTP header*                in the response sent to the client.*              **********************************************************************INCLUDE WBPD WWW.INCLUDESESSION$CONTENT.TYPE=CONTENTTYPERETURNEND00023CWSWAP0c2SUBROUTINE WSWAP(string,SUB1,SUB2)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine swaps one string for another*              **********************************************************************IDX.POS = 1LOOP  POS = INDEX(string, SUB1, IDX.POS)WHILE POS DO  string = string[1,POS-1]:SUB2:string[POS+LEN(SUB1),LEN(string)]  IDX.POS = IDX.POS + COUNT(SUB2,SUB1)REPEATRETURNEND001E5BWRESTTEST0c2PROGRAM WRESTTEST************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 01/31/2017* Description: this is a simple REST test***********************************************************************INCLUDE WBPD WWW.INFORESTVERSION = "1.1"JSTATUS = 'ok'JSTATUSMSG = ''** Supplied function for setting content type.*CALL WSETCONTENTTYPE("application/json")*** Set a custom header with supplied function.*CALL WSETHEADER("restversion",RESTVERSION)** Start building our json object, ugly way until objects.*JSON = '{'** Need to know all the variables*CALL WGETINFO(VARS,CGI_VARS)CALL WGETINFO(VALS,CGI_VALS)** Need to know all the headers*CALL WGETINFO(HEADERVARS,CGI_HEADERVARS)CALL WGETINFO(HEADERVALS,CGI_HEADERVALS)** Set our rest version, this will be replaced in the future with objects*CALL WBUILDJSON(JSON,"RestVersion",RESTVERSION,RERR)** WHO*EXECUTE 'WHO' CAPTURING WRESULTCALL WBUILDJSON(JSON,'Who',WRESULT<1,1,1>,RERR)** HOSTNAME**EXECUTE 'hostname' CAPTURING HOSTNAME*CALL WBUILDJSON(JSON,'hostname',HOSTNAME<1,1,1>,RERR)** IFCONFIG**EXECUTE 'ifconfig' CAPTURING RESULT*GOSUB exportresult*JSON:=', "ifconfig": ':R** PWD*EXECUTE '!pwd' CAPTURING PWDCALL WBUILDJSON(JSON,'pwd',PWD,RERR)** PS**EXECUTE 'ps' CAPTURING RESULT*GOSUB exportresult*JSON:=', "ps": ':R*CALL WBUILDJSON(JSON,'ps',PSRESULT,RERR)** JSHOW**EXECUTE 'jshow -v WRESTTEST' CAPTURING RESULT*GOSUB exportresult*JSON := ', "wresttest": ':R** Build out vars, we have to build a subobject and manually* put it into our main json object.* Right now the primary function of WBUILDJSON is to properly* encode the variable section.*JSONVARS = '{'FOR X = 1 TO DCOUNT(VARS, @AM)    * Lets test our WGETVAR routine    VARNAME = VARS<X>    *    * WGETVAR is our customer supplied function to get variables    * usually sent by browser as form variables, either in the body    * or in the URL query string.    *    CALL WGETVAR(THISVAR,VARNAME)    CALL WBUILDJSON(JSONVARS,VARNAME,THISVAR,RERR)NEXT XJSONVARS := '}'** Here is our messy add, todo is to adjust WBUILDJSON to be able* to do this.*JSON := ', "vars": ':JSONVARS** Get all our cookies*CALL WGETINFO(CVARS,CGI_CVARS)CALL WGETINFO(CVALS,CGI_CVALS)COOKIES = '{'NUM_COOKIES = DCOUNT(CVARS,@AM)FOR A = 1 TO NUM_COOKIES    COOKIENAME = CVARS<A>    *    * This is our customer supplied function to get cookies.    *    CALL WGETCOOKIE(COOKIEVALUE,COOKIENAME)    CALL WBUILDJSON(COOKIES,COOKIENAME,COOKIEVALUE,RERR)NEXT ACOOKIES := '}'JSON := ', "cookies": ':COOKIES** Build out headers*JSONHEADERS = '{'numheaders = DCOUNT(HEADERVARS, @AM)FOR X = 1 TO numheaders    HEADERNAME = HEADERVARS<X>    *    * This is our customer supplied function to get headers.    *    CALL WGETHEADER(THISVAR,HEADERNAME)    CALL WBUILDJSON(JSONHEADERS,HEADERNAME,THISVAR,RERR)NEXT XJSONHEADERS := '}'JSON := ', "headers": ':JSONHEADERS** This is where the raw body is put, this is used primarily for* AJAX functions where the body should be a json string.*CALL WGETBODY(BODY)CALL WBUILDJSON(JSON,'body',BODY,RERR)** Set our test cookie*COOKIE.NAME = 'wresttestcookie'COOKIE.VALUE = TIMEDATE()CONVERT ' :' TO '' IN COOKIE.VALUE** Our function for setting a cookie.  Hides all the formatting requirements* and correctly sets expiration date/time using PICK dates and times.** CALL WSETCOOKIE(NAME,VALUE,EXPDATE,EXPTIME,DOMAIN,PATH,SECURE)*CALL WSETCOOKIE(COOKIE.NAME,COOKIE.VALUE,DATE()+1,TIME()+300,'','','')** Now lets process our command requests** This section allows this REST request to perform some functions** Format is* ...api/wresttest/<key>/<command>/<opt1>/<opt2>/<opt3>/etc** key = basically a password and stored in the config file* command = a command to execute, leaving blank does the same as help* opt# = options that the commands would use** Remember that for us, key is the first REAL param, command is 2, opt# is 3 on*CALL WGETPARAM(REQKEY,1)IF REQKEY = '' THEN GOTO end.of.program; * no key then ignore** Function to get our options already broken out.*CALL WGETCONFIG(APIKEY,'APIKEY')IF APIKEY = '' THEN    *    * The way I like to handle errors, see end of program right before stop    *    JSTATUS = 'error'    JSTATUSMSG = 'No api key setup in WDB.RESOURCE'    GOTO end.of.programENDIF OCONV(APIKEY,'MX') # OCONV(REQKEY,'MX') THEN    JSTATUS = 'error'    JSTATUSMSG = 'Invalid api key'    GOTO end.of.programENDGOSUB processrest*end.of.program: *** Build our default status/result*CALL WBUILDJSON(JSON,'status',JSTATUS,RERR)CALL WBUILDJSON(JSON,'statusmsg',JSTATUSMSG,ERR)** Close out our object*JSON := '}'** Send string json to the client. This can be done anytime and multiple times.*CALL WSEND(JSON)*STOP*processrest: *** Build new object to store rest responses*RJSON = '{'** Get our command*CALL WGETPARAM(COMMAND,2)COMMAND = OCONV(COMMAND,'MCU')** Respond in REST response our requested command, nice for debugging*CALL WBUILDJSON(RJSON,'requestedcommand',COMMAND,RERR)** Now process our commands*BEGIN CASE    CASE COMMAND = 'DEBUGON'        CALL WGETPARAM(DEBUGLINE,3)        IF DEBUGLINE = '' OR NOT(NUM(DEBUGLINE)) THEN            JSTATUS = 'error'            JSTATUSMSG = 'You must put in a debug option as next paramater'        END ELSE            JSTATUSMSG = 'Setting debug to on for ':DEBUGLINE            CALL WSETCOOKIE('wrestapidebug',DEBUGLINE,DATE()+1,TIME()+300,'','',' ')        END    CASE COMMAND = 'DEBUGOFF'        CALL WSETCOOKIE('wrestapidebug','',DATE()-1,TIME(),'','','')    CASE COMMAND = 'ENV'        * Get environment variables        EXECUTE '!env' CAPTURING ENVIRONMENT        *        * New object to store response        *        J = '{'        NUMENV = DCOUNT(ENVIRONMENT,@AM)        FOR A = 1 TO NUMENV            ENV = ENVIRONMENT<A>            ENV.NAME = FIELD(ENV,'=',1)            ENV.VALUE = FIELD(ENV,'=',2,9999)            IF TRIM(ENV.NAME) # '' THEN                CALL WBUILDJSON(J,ENV.NAME,ENV.VALUE,RERR)            END        NEXT A        J := '}'        RJSON := ', "environment": ':J    CASE COMMAND = 'USERS'        EXECUTE 'LISTU' CAPTURING RESULT        GOSUB exportresult        RJSON := ', "users": ':R    *CASE COMMAND = 'JSHOW'        *CALL WGETPARAM(OPTN,3)        *CMND = 'jshow -v ':OPTN        *EXECUTE CMND CAPTURING RESULT        *GOSUB exportresult        *RJSON := ', "jshow": ':R    *CASE COMMAND = 'JLICENSINGINFO'        *EXECUTE 'JLICENSINGINFO' CAPTURING RESULT        *GOSUB exportresult        *RJSON := ', "jlicensinginfo": ':R    CASE 1; * DO HELP        C = '{'        CALL WBUILDJSON(C,'help','List all commands',RERR)        CALL WBUILDJSON(C,'debugon','Turn debug on, next param is line no',RERR)        CALL WBUILDJSON(C,'debugoff','Turn off debugging',RERR)        *CALL WBUILDJSON(C,'listweberrors','Lists web errors',RERR)        CALL WBUILDJSON(C,'env','List Environment Variables',RERR)        CALL WBUILDJSON(C,'users','List users',RERR)        *CALL WBUILDJSON(C,'jshow','Issue jshow, next param is program/file',RERR )        *CALL WBUILDJSON(C,'jlicensinginfo','Licensing information',RERR)        C := '}'        RJSON := ', "commands": ':CEND CASERJSON := '}'JSON := ', "rest": ':RJSONRETURN*exportresult: *NUM.LINES = DCOUNT(RESULT,@AM)R= '[ 'FOR XX = 1 TO NUM.LINES    LINE = RESULT<XX>    CALL WSWAP(LINE,CHAR(9),'     ')    CALL WENCODEJSON('',LINE,OUTLINE)    IF XX > 1 THEN R := ','    R := '"':OUTLINE:'"'NEXT XXR := ']'RETURN*END000212WGETINFO0c2SUBROUTINE WGETINFO(InfoVal, InfoItem)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: March 2017* Description: return an element from WWW.INFO***********************************************************************INCLUDE WBPD WWW.INCLUDEIF NUM(InfoItem) AND InfoItem > 0 AND InfoItem <= 50 THEN IF INT(InfoItem) = InfoItem THEN  InfoVal = WWW.INFO(InfoItem) ENDENDRETURNEND000244WSETVAR0c2SUBROUTINE WSETVAR(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: update value of a request variable***********************************************************************INCLUDE WBPD WWW.INCLUDETEMPVARS = OCONV(CGI$VARS, 'MCU')LOCATE OCONV(VarName, 'MCU') IN TEMPVARS SETTING POS THEN  CGI$VALS<POS> = VarValueEND ELSE  CGI$VARS<-1> = VarName  CGI$VALS<-1> = VarValueENDRETURNEND000210WSETINFO0c2SUBROUTINE WSETINFO(InfoVal, InfoItem)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: November 2017* Description: set an element in WWW.INFO***********************************************************************INCLUDE WBPD WWW.INCLUDEIF NUM(InfoItem) AND InfoItem > 0 AND InfoItem <= 50 THEN IF INT(InfoItem) = InfoItem THEN  WWW.INFO(InfoItem) = InfoVal ENDENDRETURNEND0001F5WGETCONFIG0c2SUBROUTINE WGETCONFIG(VarValue, VarName) ************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: extract a configuration value***********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''LOCATE VarName IN CGI$CONFIG<1,1> SETTING POS THEN  VarValue = CGI$CONFIG<1,2,POS>ENDRETURNEND00041DWSETCOOKIE0c2SUBROUTINE WSETCOOKIE(COOKIENAME,COOKIEVAR,D,T,PATH,DOMAIN,SECURE)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine sets the value of a cookie.*              **********************************************************************INCLUDE WBPD WWW.INCLUDECOOKIE = COOKIENAME:'=':COOKIEVAR* FIGURE OUT EXPIRATIONIF D # '' THEN  EXPIRES='expires='  DAY=OCONV(D,'DWA')[1,3]  DAY=OCONV(DAY,'MCT')  EXPIRES:=DAY  EXPIRES:=', '  EXPIRES:=OCONV(D,'DD')  EXPIRES:=' '  MONTH=OCONV(D,'DMA')[1,3]  MONTH=OCONV(MONTH,'MCT')  EXPIRES:=MONTH  EXPIRES:=' '  EXPIRES:=OCONV(D,'DY')  EXPIRES:=' '  EXPIRES:=OCONV(T,'MTS')  COOKIE:=';':EXPIRESENDIF PATH # '' THEN  COOKIE:=';path="':PATH:'"'ENDIF DOMAIN # '' THEN  COOKIE:=';domain=':DOMAINENDIF SECURE # '' THEN  COOKIE:=';secure'ENDIF TRIM(COOKIE) # '' THEN  SESSION$COOKIES<-1>=COOKIEENDRETURNEND0006A0WSETBUFFER0c2SUBROUTINE WSETBUFFER(B.VAL)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Updated by: Peter Schellenbach, Zumasys* Date: November 2017* Description  : This program sets the SESSION$OUTBUF.FLAG and optionally*                SESSION$OUTBUF.SIZE variables to enable or disable*                buffering of output generated by WSEND. If buffering*                is enabled, be sure to call WFLUSH to flush the final*                buffer content.**                B.VAL = 0 : disable buffering*                B.VAL = 1 : enable buffering using current buffer size*                B.VAL > 1 : enable buffering and set buffer size to*                            this value.**                By default buffering is disabled. If buffering will be*                used, call WSETBUFFER before the first call to WSEND.*                If the size of buffer content ever exceeds the buffer*                size, the buffer is flushed to the client along with*                any headers, and buffering is disabled.*              **********************************************************************INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*IF NUM(B.VAL) AND B.VAL > 0 AND B.VAL <= 1000000 THEN  * Set buffer size and enable buffering  SESSION$OUTBUF.SIZE = B.VAL  SESSION$OUTBUF.FLAG = TRUEEND ELSE  * Enable or disable buffering  IF B.VAL # TRUE AND B.VAL # FALSE THEN    IF B.VAL = "" THEN      B.VAL = FALSE    END ELSE      B.VAL = TRUE    END  END  SESSION$OUTBUF.FLAG = B.VALENDRETURNEND0002A5WSETHEADER0c2SUBROUTINE WSETHEADER(VarName, VarValue)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: set a value of HTTP response header** Updated by Peter Schellenbach, 09-21-2017 to call WSETCONTENTTYPE when setting the Content-Type header***********************************************************************INCLUDE WBPD WWW.INCLUDEIF OCONV(VarName,'MCU') = 'CONTENT-TYPE' THEN  CALL WSETCONTENTTYPE(VarValue)END ELSE  HEADER_LINE = VarName:': ':VarValue  SESSION$HEADERS<-1> = HEADER_LINEENDRETURNEND000291WSETSTATUS0c2SUBROUTINE WSETSTATUS( STATUS.CODE )*********************************************************************** Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written By   : Peter Schellenbach* Date Written : 04/21/2017* Description  : This program sets the response status code sent*                back to client. Successful requests should return*                status code 200 (this is the default). Status code*                500 indicates a generic server failure.*              **********************************************************************INCLUDE WBPD WWW.INCLUDESESSION$STATUS.CODE = STATUS.CODERETURNEND00019EWGETBODY0c2SUBROUTINE WGETBODY(RequestBody)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: March 2017* Description: return the BODY of the request***********************************************************************INCLUDE WBPD WWW.INCLUDERequestBody = CGI$BODYRETURNEND0000EERSS.FEEDS0c000005DFEEDS0c2Available RSS FeedsRSS Feeds available on this serverSUB.FEEDS.SELSUB.FEEDS.ITEM000078RUNTIME-ERRORS0c2Basic Runtime ErrorsData basic runtime errors.SUB.RE.SELSUB.RE.ITEMDashboard Accountaccount=TLDB006E09MVDB.CONTROL0c000024ECOMPILE.SETUP0c2BASIC %FILENAME% %ITEMNAME%* To configure the compile command when using the web editor* edit line # 1 of this record to contain the appropriate syntax.** Example # 1 - Standard compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME%** Example # 2 - FLASH compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME% (O** Example # 3 - Standard compile using COMPILE* 001 COMPILE %FILENAME% %ITEMNAME%** Only line # 1 of this record is used, all other lines of this record are ignored.* If this record is deleted, the default behavior is:* COMPILE %FILENAME% %ITEMNAME%0000A1FC2DPIE.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' pieRadius='[RADIUS]' animation='0' > [CHART.DATA]</graph>0000DEFC3DPIE.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' showPercentageInLabel='0' pieYScale='45' pieRadius='[RADIUS]' animation='0' pieFillAlpha='100' > [CHART.DATA]</graph>0000A9FCAREA2D.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]'> [CHART.DATA]</graph>0000A9FCBAR2D.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]' > [CHART.DATA]</graph>00009BFCCOLUMN2D.SETTINGS0c2<graph caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]' > [CHART.DATA]</graph>0000ADFCCOLUMN3D.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]'  decimalPrecision='0' animation='0' yaxisname='[YMEMO]' xaxisname='[XMEMO]' > [CHART.DATA]</graph>0000A6FCDOUGHNUT2D.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' pieRadius='[RADIUS]' animation='0' > [CHART.DATA]</graph>0000A7FCLINE.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]'> [CHART.DATA]</graph>000C53FCMAP.NAMES0c2AfghanistanAfricaAlabamaAlaskaAlbaniaAlbertaAlgeriaAndorraAngolaAntiguaArgentinaArizonaArkansasArmeniaAsia3AsiaGeorgiaAsiaAustralia2AustraliaAustriaAzerbaijanBahamasBahrainBangladeshBarbadosBelarusBelgiumBelizeBeninBhutanBoliviaBosniaHerzegovinaBotswanaBrazilRegionBrazilBritishColumbiaBruneiBulgariaBurkinaFasoBurmaBurundiCaliforniaCambodiaCameroonCanadaCapeVerdeCaymanIslandsCentralAfricanRepublicCentralAmerica2CentralAmericaCentralAmericawithCaribbeanCentralEuropeanRegionChadChileChina2ChinaColombiaColoradoComorosCongoConnecticutCostaRicaCoteDivoireCroatiaCubaCyprus2CyprusCzechRepublicDelawareDemocraticRepublicofCongoDenmarkRegionDenmarkDistrictofColumbiaDjiboutiDominicanRepublicDominicaEastEuropeanRegionEastTimorEcuadorEgyptElSalvadorEnglandRegionEnglandEquatorialGuineaEritreaEstoniaEthiopiaEurope2EuropeRegionEuropeEuropewithcountriesFalklandIslandFijiFinlandFloridaFranceDepartmentFranceFrenchGuianaGabonGambiaGeorgiaGermanyGhanaGreeceGreenlandGrenadaGuatemalaGuineaBissauGuineaGuyanaHaitiHawaiiHondurasHongKongHungaryRegionsHungaryIcelandIdahoIllinoisIndianaIndiaIndonesiaIowaIranIraqIrelandIsraelItalyJamaicaJapanJordanKansasKazakhstanKentuckyKenyaKiribatiKuwaitKyrgyzstanLaosLatviaLebanonLesothoLiberiaLibyaLiechtensteinLithuaniaLouisianaLuxembourgMacauMacedoniaMadagascarRegionsMadagascarMaineMalawiMalaysiaMaliMaltaManitobaMarshallIslandMarylandMassachusettsMauritaniaMauritiusMexicoMichiganMicronesiaMiddleEastMinnesotaMississippiMissouriMoldovaMonacoMongoliaMontanaMontenegroMoroccoMozambiqueNamibiaNauruNebraskaNepalNetherlandNevadaNewBrunswickNewCaledoniaNewfoundlandandLabradorNewHampshireNewJerseyNewMexicoNewWorldNewYorkNewZealandNicaraguaNigeriaNigerNorthAmericaNorthAmerica_WOCentralNorthCarolinaNorthDakotaNorthEuropeanRegionNorthIrelandNorthKoreaNorthWestTerritoriesNorwayRegionNorwayNovaScotiaNunavutOceaniaOhioOklahomaOmanOntarioOregonPakistanPalauPanamaPapuaNewGuineaParaguayPennsylvaniaPeruPhilippinesPolandCountiesPolandPortugalPrinceEdwardIslandPuertoRicoQatarQuebecRhodeIslandRomaniaRussiaRwandaSaintKittsandNevisSaintLuciaSaintVincentandtheGrenadinesSamoaSanMarinoSaoTomeandPrincipeSaskatchewanSaudiArabiaScotlandRegionScotlandSenegalSerbiaSeychellesSierraLeoneSingaporeSlovakiaSloveniaSolomonIslandSomaliaSouthAfricaSouthAmericaSouthCarolinaSouthDakotaSouthEuropeanRegionSouthKoreaSpainProvincesSpainSriLankaSudanSurinameSwazilandSwedenSwitzerlandSyriaTaiwanTajikistanTanzaniaTennesseeTexasThailandTibetTogoTongaTrinidadandTobagoTunisiaTurkeyTurkmenistanTuvaluUAEUgandaUK7UkraineUKUruguayUSACentralRegionUSANorthEastRegionUSANorthWestRegionUSARegionUSASouthEastRegionUSASouthWestRegionUSAUtahUzbekistanVanuatuVaticanCityVenezuelaVermontVietnamVirginiaWalesWashingtonWesternSaharaWestEuropeanRegionWestVirginiaWisconsinWorld8WorldWorldwithCountriesWyomingYemenYukonTerritoryZambiaZimbabwe0000B1FCMAP.SETTINGS0c2<map showCanvasBorder='1' canvasBorderColor='F1F1F1' canvasBorderThickness='2' borderColor='FFFFFF' connectorColor='000000' fillAlpha='70'>[CHART.DATA]</map>00009AFCMSAREA2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>000099FCMSBAR2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009CFCMSCOLUMN2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009CFCMSCOLUMN3D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>000098FCMSLINE.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009FFCSTACKEDAREA2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009EFCSTACKEDBAR2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>0000A1FCSTACKEDCOLUMN2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>0000A1FCSTACKEDCOLUMN3D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>0000FDFWBULLET.SETTINGS0c2<chart palette='[CHART.PALETTE]' lowerLimit='[LOWER.LIMIT]' upperLimit='[UPPER.LIMIT]' caption='[CAPTION]' subcaption='[SUBCAPTION]' numberPrefix='[NUMBER.PREFIX]' numberSuffix='[NUMBER.SUFFIX]' showValue='1' >[CHART.DATA]</chart>0000BAFWFP.SETTINGS0c2<chart numberPrefix='[NUMBER.PREFIX]' numberSuffix='[NUMBER.SUFFIX]' caption='[CAPTION]' subcaption='[SUBCAPTION]' decimals='1' baseFontSize='11' >[CHART.DATA]</chart>000122FWGAUGE.SETTINGS0c2<chart palette='[CHART.PALETTE]' lowerLimitDisplay='[LOWER.LIMIT.DISPLAY]' upperLimitDisplay='[UPPER.LIMIT.DISPLAY]' lowerLimit='[LOWER.LIMIT]' upperLimit='[UPPER.LIMIT]' numberPrefix='[NUMBER.PREFIX]' numberSuffix='[NUMBER.SUFFIX]' showValue='1' >[CHART.DATA]</chart>0000CAFWSPARK.SETTINGS0c2<chart yAxisMinValue='[LOWER.LIMIT]' yAxisMaxValue='[UPPER.LIMIT]' palette='[CHART.PALETTE]' caption='[CAPTION]' subcaption='[SUBCAPTION]' setAdaptiveYMin='1' >[CHART.DATA]</chart>004113ICON.LIST0c2accept.pngadd.pnganchor.pngapplication_add.pngapplication_cascade.pngapplication_delete.pngapplication_double.pngapplication_edit.pngapplication_error.pngapplication_form_add.pngapplication_form_delete.pngapplication_form_edit.pngapplication_form_magnify.pngapplication_form.pngapplication_get.pngapplication_go.pngapplication_home.pngapplication_key.pngapplication_lightning.pngapplication_link.pngapplication_osx.pngapplication_osx_terminal.pngapplication.pngapplication_put.pngapplication_side_boxes.pngapplication_side_contract.pngapplication_side_expand.pngapplication_side_list.pngapplication_side_tree.pngapplication_split.pngapplication_tile_horizontal.pngapplication_tile_vertical.pngapplication_view_columns.pngapplication_view_detail.pngapplication_view_gallery.pngapplication_view_icons.pngapplication_view_list.pngapplication_view_tile.pngapplication_xp.pngapplication_xp_terminal.pngarrow_branch.pngarrow_divide.pngarrow_down.pngarrow_inout.pngarrow_in.pngarrow_join.pngarrow_left.pngarrow_merge.pngarrow_out.pngarrow_redo.pngarrow_refresh.pngarrow_refresh_small.pngarrow_right.pngarrow_rotate_anticlockwise.pngarrow_rotate_clockwise.pngarrow_switch.pngarrow_turn_left.pngarrow_turn_right.pngarrow_undo.pngarrow_up.pngasterisk_orange.pngasterisk_yellow.pngattach.pngaward_star_add.pngaward_star_bronze_1.pngaward_star_bronze_2.pngaward_star_bronze_3.pngaward_star_delete.pngaward_star_gold_1.pngaward_star_gold_2.pngaward_star_gold_3.pngaward_star_silver_1.pngaward_star_silver_2.pngaward_star_silver_3.pngbasket_add.pngbasket_delete.pngbasket_edit.pngbasket_error.pngbasket_go.pngbasket.pngbasket_put.pngbasket_remove.pngbell_add.pngbell_delete.pngbell_error.pngbell_go.pngbell_link.pngbell.pngbin_closed.pngbin_empty.pngbin.pngbomb.pngbook_add.pngbook_addresses.pngbook_delete.pngbook_edit.pngbook_error.pngbook_go.pngbook_key.pngbook_link.pngbook_next.pngbook_open.pngbook.pngbook_previous.pngbox.pngbrick_add.pngbrick_delete.pngbrick_edit.pngbrick_error.pngbrick_go.pngbrick_link.pngbrick.pngbricks.pngbriefcase.pngbug_add.pngbug_delete.pngbug_edit.pngbug_error.pngbug_go.pngbug_link.pngbug.pngbuilding_add.pngbuilding_delete.pngbuilding_edit.pngbuilding_error.pngbuilding_go.pngbuilding_key.pngbuilding_link.pngbuilding.pngbullet_add.pngbullet_arrow_bottom.pngbullet_arrow_down.pngbullet_arrow_top.pngbullet_arrow_up.pngbullet_black.pngbullet_blue.pngbullet_delete.pngbullet_disk.pngbullet_error.pngbullet_feed.pngbullet_go.pngbullet_green.pngbullet_key.pngbullet_orange.pngbullet_picture.pngbullet_pink.pngbullet_purple.pngbullet_red.pngbullet_star.pngbullet_toggle_minus.pngbullet_toggle_plus.pngbullet_white.pngbullet_wrench.pngbullet_yellow.pngcake.pngcalculator_add.pngcalculator_delete.pngcalculator_edit.pngcalculator_error.pngcalculator_link.pngcalculator.pngcalendar_add.pngcalendar_delete.pngcalendar_edit.pngcalendar_link.pngcalendar.pngcalendar_view_day.pngcalendar_view_month.pngcalendar_view_week.pngcamera_add.pngcamera_delete.pngcamera_edit.pngcamera_error.pngcamera_go.pngcamera_link.pngcamera.pngcamera_small.pngcancel.pngcar_add.pngcar_delete.pngcar.pngcart_add.pngcart_delete.pngcart_edit.pngcart_error.pngcart_go.pngcart.pngcart_put.pngcart_remove.pngcd_add.pngcd_burn.pngcd_delete.pngcd_edit.pngcd_eject.pngcd_go.pngcd.pngchart_bar_add.pngchart_bar_delete.pngchart_bar_edit.pngchart_bar_error.pngchart_bar_link.pngchart_bar.pngchart_curve_add.pngchart_curve_delete.pngchart_curve_edit.pngchart_curve_error.pngchart_curve_go.pngchart_curve_link.pngchart_curve.pngchart_line_add.pngchart_line_delete.pngchart_line_edit.pngchart_line_error.pngchart_line_link.pngchart_line.pngchart_organisation_add.pngchart_organisation_delete.pngchart_organisation.pngchart_pie_add.pngchart_pie_delete.pngchart_pie_edit.pngchart_pie_error.pngchart_pie_link.pngchart_pie.pngclock_add.pngclock_delete.pngclock_edit.pngclock_error.pngclock_go.pngclock_link.pngclock_pause.pngclock_play.pngclock.pngclock_red.pngclock_stop.pngcog_add.pngcog_delete.pngcog_edit.pngcog_error.pngcog_go.pngcog.pngcoins_add.pngcoins_delete.pngcoins.pngcolor_swatch.pngcolor_wheel.pngcomment_add.pngcomment_delete.pngcomment_edit.pngcomment.pngcomments_add.pngcomments_delete.pngcomments.pngcompress.pngcomputer_add.pngcomputer_delete.pngcomputer_edit.pngcomputer_error.pngcomputer_go.pngcomputer_key.pngcomputer_link.pngcomputer.pngconnect.pngcontrast_decrease.pngcontrast_high.pngcontrast_increase.pngcontrast_low.pngcontrast.pngcontrol_eject_blue.pngcontrol_eject.pngcontrol_end_blue.pngcontrol_end.pngcontrol_equalizer_blue.pngcontrol_equalizer.pngcontrol_fastforward_blue.pngcontrol_fastforward.pngcontroller_add.pngcontroller_delete.pngcontroller_error.pngcontroller.pngcontrol_pause_blue.pngcontrol_pause.pngcontrol_play_blue.pngcontrol_play.pngcontrol_repeat_blue.pngcontrol_repeat.pngcontrol_rewind_blue.pngcontrol_rewind.pngcontrol_start_blue.pngcontrol_start.pngcontrol_stop_blue.pngcontrol_stop.pngcreditcards.pngcross.pngcss_add.pngcss_delete.pngcss_go.pngcss.pngcss_valid.pngcup_add.pngcup_delete.pngcup_edit.pngcup_error.pngcup_go.pngcup_key.pngcup_link.pngcup.pngcursor.pngcut.pngcut_red.pngdatabase_add.pngdatabase_connect.pngdatabase_delete.pngdatabase_edit.pngdatabase_error.pngdatabase_gear.pngdatabase_go.pngdatabase_key.pngdatabase_lightning.pngdatabase_link.pngdatabase.pngdatabase_refresh.pngdatabase_save.pngdatabase_table.pngdate_add.pngdate_delete.pngdate_edit.pngdate_error.pngdate_go.pngdate_link.pngdate_magnify.pngdate_next.pngdate.pngdate_previous.pngdelete.pngdisconnect.pngdisk_multiple.pngdisk.pngdoor_in.pngdoor_open.pngdoor_out.pngdoor.pngdrink_empty.pngdrink.pngdrive_add.pngdrive_burn.pngdrive_cd_empty.pngdrive_cd.pngdrive_delete.pngdrive_disk.pngdrive_edit.pngdrive_error.pngdrive_go.pngdrive_key.pngdrive_link.pngdrive_magnify.pngdrive_network.pngdrive.pngdrive_rename.pngdrive_user.pngdrive_web.pngdvd_add.pngdvd_delete.pngdvd_edit.pngdvd_error.pngdvd_go.pngdvd_key.pngdvd_link.pngdvd.pngemail_add.pngemail_attach.pngemail_delete.pngemail_edit.pngemail_error.pngemail_go.pngemail_link.pngemail_open_image.pngemail_open.pngemail.pngemoticon_evilgrin.pngemoticon_grin.pngemoticon_happy.pngemoticon_smile.pngemoticon_surprised.pngemoticon_tongue.pngemoticon_unhappy.pngemoticon_waii.pngemoticon_wink.pngerror_add.pngerror_delete.pngerror_go.pngerror.pngexclamation.pngeye.pngfeed_add.pngfeed_delete.pngfeed_disk.pngfeed_edit.pngfeed_error.pngfeed_go.pngfeed_key.pngfeed_link.pngfeed_magnify.pngfeed.pngfemale.pngfilm_add.pngfilm_delete.pngfilm_edit.pngfilm_error.pngfilm_go.pngfilm_key.pngfilm_link.pngfilm.pngfilm_save.pngfind.pngflag_blue.pngflag_green.pngflag_orange.pngflag_pink.pngflag_purple.pngflag_red.pngflag_yellow.pngfolder_add.pngfolder_bell.pngfolder_brick.pngfolder_bug.pngfolder_camera.pngfolder_database.pngfolder_delete.pngfolder_edit.pngfolder_error.pngfolder_explore.pngfolder_feed.pngfolder_find.pngfolder_go.pngfolder_heart.pngfolder_image.pngfolder_key.pngfolder_lightbulb.pngfolder_link.pngfolder_magnify.pngfolder_page.pngfolder_page_white.pngfolder_palette.pngfolder_picture.pngfolder.pngfolder_star.pngfolder_table.pngfolder_user.pngfolder_wrench.pngfont_add.pngfont_delete.pngfont_go.pngfont.pnggroup_add.pnggroup_delete.pnggroup_edit.pnggroup_error.pnggroup_gear.pnggroup_go.pnggroup_key.pnggroup_link.pnggroup.pngheart_add.pngheart_delete.pngheart.pnghelp.pnghourglass_add.pnghourglass_delete.pnghourglass_go.pnghourglass_link.pnghourglass.pnghouse_go.pnghouse_link.pnghouse.pnghtml_add.pnghtml_delete.pnghtml_go.pnghtml.pnghtml_valid.pngimage_add.pngimage_delete.pngimage_edit.pngimage_link.pngimage.pngimages.pnginformation.pngipod_cast_add.pngipod_cast_delete.pngipod_cast.pngipod.pngipod_sound.pngjoystick_add.pngjoystick_delete.pngjoystick_error.pngjoystick.pngkey_add.pngkeyboard_add.pngkeyboard_delete.pngkeyboard_magnify.pngkeyboard.pngkey_delete.pngkey_go.pngkey.pnglayers.pnglayout_add.pnglayout_content.pnglayout_delete.pnglayout_edit.pnglayout_error.pnglayout_header.pnglayout_link.pnglayout.pnglayout_sidebar.pnglightbulb_add.pnglightbulb_delete.pnglightbulb_off.pnglightbulb.pnglightning_add.pnglightning_delete.pnglightning_go.pnglightning.pnglink_add.pnglink_break.pnglink_delete.pnglink_edit.pnglink_error.pnglink_go.pnglink.pnglock_add.pnglock_break.pnglock_delete.pnglock_edit.pnglock_go.pnglock_open.pnglock.pnglorry_add.pnglorry_delete.pnglorry_error.pnglorry_flatbed.pnglorry_go.pnglorry_link.pnglorry.pngmagifier_zoom_out.pngmagnifier.pngmagnifier_zoom_in.pngmale.pngmap_add.pngmap_delete.pngmap_edit.pngmap_go.pngmap_magnify.pngmap.pngmedal_bronze_1.pngmedal_bronze_2.pngmedal_bronze_3.pngmedal_bronze_add.pngmedal_bronze_delete.pngmedal_gold_1.pngmedal_gold_2.pngmedal_gold_3.pngmedal_gold_add.pngmedal_gold_delete.pngmedal_silver_1.pngmedal_silver_2.pngmedal_silver_3.pngmedal_silver_add.pngmedal_silver_delete.pngmoney_add.pngmoney_delete.pngmoney_dollar.pngmoney_euro.pngmoney.pngmoney_pound.pngmoney_yen.pngmonitor_add.pngmonitor_delete.pngmonitor_edit.pngmonitor_error.pngmonitor_go.pngmonitor_lightning.pngmonitor_link.pngmonitor.pngmouse_add.pngmouse_delete.pngmouse_error.pngmouse.pngmusic.pngnew.pngnewspaper_add.pngnewspaper_delete.pngnewspaper_go.pngnewspaper_link.pngnewspaper.pngnote_add.pngnote_delete.pngnote_edit.pngnote_error.pngnote_go.pngnote.pngoverlays.pngpackage_add.pngpackage_delete.pngpackage_go.pngpackage_green.pngpackage_link.pngpackage.pngpage_add.pngpage_attach.pngpage_code.pngpage_copy.pngpage_delete.pngpage_edit.pngpage_error.pngpage_excel.pngpage_find.pngpage_gear.pngpage_go.pngpage_green.pngpage_key.pngpage_lightning.pngpage_link.pngpage_paintbrush.pngpage_paste.pngpage.pngpage_red.pngpage_refresh.pngpage_save.pngpage_white_acrobat.pngpage_white_actionscript.pngpage_white_add.pngpage_white_camera.pngpage_white_cd.pngpage_white_code.pngpage_white_code_red.pngpage_white_coldfusion.pngpage_white_compressed.pngpage_white_copy.pngpage_white_cplusplus.pngpage_white_c.pngpage_white_csharp.pngpage_white_cup.pngpage_white_database.pngpage_white_delete.pngpage_white_dvd.pngpage_white_edit.pngpage_white_error.pngpage_white_excel.pngpage_white_find.pngpage_white_flash.pngpage_white_freehand.pngpage_white_gear.pngpage_white_get.pngpage_white_go.pngpage_white_horizontal.pngpage_white_h.pngpage_white_key.pngpage_white_lightning.pngpage_white_link.pngpage_white_magnify.pngpage_white_medal.pngpage_white_office.pngpage_white_paintbrush.pngpage_white_paint.pngpage_white_paste.pngpage_white_php.pngpage_white_picture.pngpage_white.pngpage_white_powerpoint.pngpage_white_put.pngpage_white_ruby.pngpage_white_stack.pngpage_white_star.pngpage_white_swoosh.pngpage_white_text.pngpage_white_text_width.pngpage_white_tux.pngpage_white_vector.pngpage_white_visualstudio.pngpage_white_width.pngpage_white_word.pngpage_white_world.pngpage_white_wrench.pngpage_white_zip.pngpage_word.pngpage_world.pngpaintbrush.pngpaintcan.pngpalette.pngpaste_plain.pngpaste_word.pngpencil_add.pngpencil_delete.pngpencil_go.pngpencil.pngphone_add.pngphone_delete.pngphone.pngphone_sound.pngphoto_add.pngphoto_delete.pngphoto_link.pngphoto.pngphotos.pngpicture_add.pngpicture_delete.pngpicture_edit.pngpicture_empty.pngpicture_error.pngpicture_go.pngpicture_key.pngpicture_link.pngpicture.pngpicture_save.pngpictures.pngpilcrow.pngpill_add.pngpill_delete.pngpill_go.pngpill.pngplugin_add.pngplugin_delete.pngplugin_disabled.pngplugin_edit.pngplugin_error.pngplugin_go.pngplugin_link.pngplugin.pngprinter_add.pngprinter_delete.pngprinter_empty.pngprinter_error.pngprinter.pngrainbow.pngreport_add.pngreport_delete.pngreport_disk.pngreport_edit.pngreport_go.pngreport_key.pngreport_link.pngreport_magnify.pngreport_picture.pngreport.pngreport_user.pngreport_word.pngresultset_first.pngresultset_last.pngresultset_next.pngresultset_previous.pngrosette.pngrss_add.pngrss_delete.pngrss_go.pngrss.pngrss_valid.pngruby_add.pngruby_delete.pngruby_gear.pngruby_get.pngruby_go.pngruby_key.pngruby_link.pngruby.pngruby_put.pngscript_add.pngscript_code.pngscript_code_red.pngscript_delete.pngscript_edit.pngscript_error.pngscript_gear.pngscript_go.pngscript_key.pngscript_lightning.pngscript_link.pngscript_palette.pngscript.pngscript_save.pngserver_add.pngserver_chart.pngserver_compressed.pngserver_connect.pngserver_database.pngserver_delete.pngserver_edit.pngserver_error.pngserver_go.pngserver_key.pngserver_lightning.pngserver_link.pngserver.pngserver_uncompressed.pngshading.pngshape_align_bottom.pngshape_align_center.pngshape_align_left.pngshape_align_middle.pngshape_align_right.pngshape_align_top.pngshape_flip_horizontal.pngshape_flip_vertical.pngshape_group.pngshape_handles.pngshape_move_back.pngshape_move_backwards.pngshape_move_forwards.pngshape_move_front.pngshape_rotate_anticlockwise.pngshape_rotate_clockwise.pngshape_square_add.pngshape_square_delete.pngshape_square_edit.pngshape_square_error.pngshape_square_go.pngshape_square_key.pngshape_square_link.pngshape_square.pngshape_ungroup.pngshield_add.pngshield_delete.pngshield_go.pngshield.pngsitemap_color.pngsitemap.pngsound_add.pngsound_delete.pngsound_low.pngsound_mute.pngsound_none.pngsound.pngspellcheck.pngsport_8ball.pngsport_basketball.pngsport_football.pngsport_golf.pngsport_raquet.pngsport_shuttlecock.pngsport_soccer.pngsport_tennis.pngstar.pngstatus_away.pngstatus_busy.pngstatus_offline.pngstatus_online.pngstop.pngstyle_add.pngstyle_delete.pngstyle_edit.pngstyle_go.pngstyle.pngsum.pngtab_add.pngtab_delete.pngtab_edit.pngtab_go.pngtable_add.pngtable_delete.pngtable_edit.pngtable_error.pngtable_gear.pngtable_go.pngtable_key.pngtable_lightning.pngtable_link.pngtable_multiple.pngtable.pngtable_refresh.pngtable_relationship.pngtable_row_delete.pngtable_row_insert.pngtable_save.pngtable_sort.pngtab.pngtag_blue_add.pngtag_blue_delete.pngtag_blue_edit.pngtag_blue.pngtag_green.pngtag_orange.pngtag_pink.pngtag.pngtag_purple.pngtag_red.pngtag_yellow.pngtelephone_add.pngtelephone_delete.pngtelephone_edit.pngtelephone_error.pngtelephone_go.pngtelephone_key.pngtelephone_link.pngtelephone.pngtelevision_add.pngtelevision_delete.pngtelevision.pngtext_align_center.pngtext_align_justify.pngtext_align_left.pngtext_align_right.pngtext_allcaps.pngtext_bold.pngtext_columns.pngtext_dropcaps.pngtextfield_add.pngtextfield_delete.pngtextfield_key.pngtextfield.pngtextfield_rename.pngtext_heading_1.pngtext_heading_2.pngtext_heading_3.pngtext_heading_4.pngtext_heading_5.pngtext_heading_6.pngtext_horizontalrule.pngtext_indent.pngtext_indent_remove.pngtext_italic.pngtext_kerning.pngtext_letter_omega.pngtext_letterspacing.pngtext_linespacing.pngtext_list_bullets.pngtext_list_numbers.pngtext_lowercase.pngtext_padding_bottom.pngtext_padding_left.pngtext_padding_right.pngtext_padding_top.pngtext_replace.pngtext_signature.pngtext_smallcaps.pngtext_strikethrough.pngtext_subscript.pngtext_superscript.pngtext_underline.pngtext_uppercase.pngthumb_down.pngthumb_up.pngtick.pngtime_add.pngtime_delete.pngtime_go.pngtimeline_marker.pngtime.pngtransmit_add.pngtransmit_blue.pngtransmit_delete.pngtransmit_edit.pngtransmit_error.pngtransmit_go.pngtransmit.pngtux.pnguser_add.pnguser_comment.pnguser_delete.pnguser_edit.pnguser_female.pnguser_go.pnguser_gray.pnguser_green.pnguser_orange.pnguser.pnguser_red.pnguser_suit.pngvcard_add.pngvcard_delete.pngvcard_edit.pngvcard.pngvector_add.pngvector_delete.pngvector.pngwand.pngweather_clouds.pngweather_cloudy.pngweather_lightning.pngweather_rain.pngweather_snow.pngweather_sun.pngwebcam_add.pngwebcam_delete.pngwebcam_error.pngwebcam.pngworld_add.pngworld_delete.pngworld_edit.pngworld_go.pngworld_link.pngworld.pngwrench_orange.pngwrench.pngxhtml_add.pngxhtml_delete.pngxhtml_go.pngxhtml.pngxhtml_valid.pngzoom_in.pngzoom_out.pngzoom.png000092MOBI.APPS0c2SUB.D3ADMINSUB.MOBI.APP.MENUSUB.MOBI.WOSUB.TESTAIAAD3 AdministrationApplication ChooserDemo WO ApplicationDemo Application00007BMONTHLY.20130c277869980896869808900091077900940589703406719886071869680806870707428708058871070682570808878968000007BMONTHLY.20140c2865222009965220098889900865566006552260074665400798552008965230082541200654123007584120098655200000073MONTHLY.20150c29654320080145600888540009650110095012300965121008456320010523680098521000644144005888660000007FMONTHLY.GPS.20130c226517550288064103178601729914744209154142201961923275705280068082799822722781623247042583250054900007FMONTHLY.GPS.20140c2294639443200712235317797332386042323934924466243258618943111867631109141253129142744917536111721000076MONTHLY.GPS.20150c23679677832936845339654253798472034865781365450823197622741016726359493432331534221977139000073MONTHLY.NET.20140c229463943200712353177933238602323934244662425861893111867311091425312912744917361117200006CMONTHLY.NET.20150c2965432080145608885400965011095012309651210845632010523680985210064414405888660000081MONTHLY.PARTS.20140c2414378445224284147585401438425423609067336395560416464855854718841895322328312664074985847292673000078MONTHLY.PARTS.20150c24960869651350055533449464524318362544291449568374293538557601358540842633146503929950454000084MONTHLY.SERVICES.20140c245084356474093595130449942714058294319273826984038208715311051124064587832581034350913425136252700007BMONTHLY.SERVICES.20150c2469345042879554535509054512579173246800951555263416278154763544244436737329493612893614600000EPLATFORM0c2D3000288STATE.NAMES0c2AL,AK,AZ,AR,CA,CO,CT,DE,FL,GA,HI,ID,IL,IN,IA,KS,KY,LA,ME,MD,MA,MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,OH,OK,OR,PA,RI,SC,SD,TN,TX,UT,VT,VA,WA,WV,WI,WY,DCAlabama,Alaska,Arizona,Arkansas,California,Colorado,Connecticut,Delaware,Florida,Georgia,Hawaii,Idaho,Illinois,Indiana,Iowa,Kansas,Kentucky,Louisiana,Maine,Maryland,Massachusetts,Michigan,Minnesota,Mississippi,Missouri,Montana,Nebraska,Nevada,NewHampshire,NewJersey,NewMexico,NewYork,NorthCarolina,NorthDakota,Ohio,Oklahoma,Oregon,Pennsylvania,RhodeIsland,SouthCarolina,SouthDakota,Tennessee,Texas,Utah,Vermont,Virginia,Washington,WestVirginia,Wisconsin,Wyoming,DistrictofColumbia000040TLDB.SETTINGS0c2SUB.USER.AUTH110831-5iso-8859-1NN00005FTLDB.THEMES0c2cream_gray.css,ice.css,patriotic.css,tuscani.cssTheme 1,Theme 2,Theme 3,Theme 400024ECOMPILE.SETUP0c2BASIC %FILENAME% %ITEMNAME%* To configure the compile command when using the web editor* edit line # 1 of this record to contain the appropriate syntax.** Example # 1 - Standard compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME%** Example # 2 - FLASH compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME% (O** Example # 3 - Standard compile using COMPILE* 001 COMPILE %FILENAME% %ITEMNAME%** Only line # 1 of this record is used, all other lines of this record are ignored.* If this record is deleted, the default behavior is:* COMPILE %FILENAME% %ITEMNAME%0000A1FC2DPIE.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' pieRadius='[RADIUS]' animation='0' > [CHART.DATA]</graph>0000B3PORTAL.SALES.REPORT.SETUP0c2MVDBPORTAL.SALESCLOSE.DATECLOSE.DATE.MMCLOSE.DATE.YYYYEXT.AMTEXT.COSTREP.NAMEBRANCHREGION199MD24F8;9;10;-;(MR2);*05TREP;X;1;11314000070PORTAL.AR.REPORT.SETUP0c2MVDBPORTAL.ARDUE.DATEDATES.PAIDINVOICE.AMTBALANCECUST2086MD250MD2CUST1000062PORTAL.AP.REPORT.SETUP0c2MVDBPORTAL.APDUE.DATEDATE.PAIDINV.AMOUNTBALANCE2086MD250MD204F7A8WDB.BP0c0000474MVAPPS.STATUS0c2** Program: MVAPPS.STATUS* Author: Luke Bucklin, Sierra Bravo Corporation* Date: January 4, 2010* Purpose: Provide app status information to the mvappsvr config app*APP.LIST = ""APP.CNT = 0PRINT "MVAPPS START"OPEN '','MVAPPS.INSTALLED' TO F.MVAPPS.INSTALLED THEN  EXECUTE 'SSELECT MVAPPS.INSTALLED' CAPTURING JUNK  LOOP    READNEXT ID ELSE EXIT    READ REC FROM F.MVAPPS.INSTALLED, ID THEN      APP.CNT += 1      APP.LIST<1,APP.CNT> = ID      APP.LIST<2,APP.CNT> = REC<1>      APP.LIST<3,APP.CNT> = REC<2>      APP.LIST<4,APP.CNT> = REC<3>      APP.LIST<5,APP.CNT> = OCONV(REC<4>,'D2/')    END  REPEATENDAPP.NAMES = APP.LIST<2>CONVERT "|" TO "\" IN APP.NAMESAPP.LIST<2> = APP.NAMESPRINT "MVAPPS-VERSION: 1.0"DATA "VERSION"EXECUTE "APP.INSTALLER" CAPTURING AIVLOCATE "Installer Version" IN AIV SETTING POS THEN  VNO = AIV<POS+1>END ELSE VNO = "?"IF NOT(VNO MATCHES "1N0N'.'0X") THEN VNO = "?"PRINT "INSTALLER-VERSION: ":VNOPRINT 'APP-COUNT: ':APP.CNTFOR N = 1 TO APP.CNT  PRINT 'APP: ':APP.LIST<2,N>:",":APP.LIST<3,N>:",":APP.LIST<4,N>:",":APP.LIST<5,N>NEXT NPRINT "MVAPPS END"STOPEND0000A8GET.CGI0c2SUBROUTINE GET.CGI(VARNAME,VALUE)*INCLUDE WBPD WWW.INCLUDE*LOCATE VARNAME IN CGI$VARS SETTING POS THEN  VALUE = CGI$VALS<POS>END ELSE VALUE = ""RETURN000D0CMVDB.DEBUG0c2** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: December, 2007* Description: Dashboard & Widget Debugger**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGETSPROMPT ''*OPEN '','MVDB.DEBUG.INFO' TO F.MVDB.DEBUG.INFO ELSE  EXECUTE 'CREATE-FILE MVDB.DEBUG.INFO 1 3' CAPTURING JUNK  OPEN '','MVDB.DEBUG.INFO' TO F.MVDB.DEBUG.INFO ELSE STOP 201, 'MVDB.DEBUG.INFO'ENDOPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'*MY.PORT = FIELD( OCONV( '', 'U50BB' ), ' ', 1 )DEBUG.ID = MY.PORT*READ DB.REC FROM F.MVDB.DEBUG.INFO, DEBUG.ID ELSE DB.REC = ''*WIDGET.ID = DB.REC<1>*PRINT "Bravo Dashboard Debugger"PRINTOK = 0LOOP  PRINT "Widget (?=list)":  IF WIDGET.ID # "" THEN PRINT " (":WIDGET.ID:")":  PRINT ": ":  INPUT USE.WIDGET.ID  IF USE.WIDGET.ID # '' THEN WIDGET.ID = USE.WIDGET.ID  BEGIN CASE    CASE WIDGET.ID = ''      STOP    CASE WIDGET.ID = "?"      EXECUTE "SORT MVDB.WIDGETS"      PRINT      WIDGET.ID = ''    CASE 1      MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, WIDGET.ID THEN        OK = 1      END ELSE        PRINT "Invalid widget ID: ":WIDGET.ID      END  END CASEUNTIL OK DO REPEATDB.REC<1> = WIDGET.ID*USERID = DB.REC<2>PRINTOK = 0LOOP  PRINT "User ID (?=list)":  IF USERID # "" THEN PRINT " (":USERID:")":  PRINT ": ":  INPUT USE.USERID  IF USE.USERID # '' THEN USERID = USE.USERID  BEGIN CASE    CASE USERID = "?"      EXECUTE 'SORT MVDB.USERS'      PRINT      USERID = ''    CASE 1      OK = 1  END CASEUNTIL OK DO REPEAT*DB.REC<2> = USERID*G$CURRENT.DB = DB.REC<3>PRINTOK = 0LOOP  PRINT "Dashboard ID (?=list)":  IF G$CURRENT.DB # "" THEN PRINT " (":G$CURRENT.DB:")":  PRINT ": ":  INPUT USE.DB  IF USE.DB # '' THEN G$CURRENT.DB = USE.DB  BEGIN CASE    CASE USE.DB = "?"      EXECUTE 'SORT MVDB.DEFS'      PRINT      G$CURRENT.DB = ''    CASE 1      OK = 1  END CASEUNTIL OK DO REPEAT*DB.REC<3> = G$CURRENT.DB** Pull in user data*MATREAD WIDGET.USER.DATA FROM F.MVDB.DEBUG.INFO,DEBUG.ID:"$":WIDGET.ID ELSE MAT WIDGET.USER.DATA = ''*LOOP  PRINT "Widget User Data"  PRINT "----------------"  FOR X = 1 TO 100    IF WIDGET.USER.DATA(X) # '' THEN      PRINT X "R#3":". '":WIDGET.USER.DATA(X):"'"    END  NEXT X  PRINT  PRINT "User Data field # to change or ENTER to continue: ":  INPUT UPOSWHILE UPOS MATCHES "1N0N" DO  PRINT "Position ":UPOS  PRINT "Current Value: ":WIDGET.USER.DATA(UPOS)  PRINT "New Value: ":  INPUT NEW.VAL  WIDGET.USER.DATA(UPOS) = NEW.VALREPEAT*MATWRITE WIDGET.USER.DATA ON F.MVDB.DEBUG.INFO, DEBUG.ID:"$":WIDGET.ID*WRITE DB.REC ON F.MVDB.DEBUG.INFO, DEBUG.ID*MAT WIDGET.INFO = ''G$WIDGET.NAME = WIDGET.IDG$WIDGET.SUB = WIDGET.SUBG$USERID = USERIDG$QUERYMODE = ''G$DRILLDOWNMODE = 0*PRINTPRINT "Use Debugger (y/N): ":INPUT USE.DEBUGIF USE.DEBUG = "Y" THEN DEBUG ELSE  PRINT "Calling ":WIDGET.SUBEND*#MAKE# RL IF 0 THENSTART.TIMER = SYSTEM(12)*#MAKE# RL ENDUSE.SUB.NAME = WIDGET.SUBCALL @USE.SUB.NAME*#MAKE# RL IF 0 THENDURATION = SYSTEM(12) - START.TIMER*#MAKE# RL END ELSE*#MAKE# RL   DURATION = "Unavailable"*#MAKE# RL ENDMATWRITE WIDGET.USER.DATA ON F.MVDB.DEBUG.INFO, DEBUG.ID:"$":WIDGET.IDPRINT "Call completed. Duration: ":DURATIONSTOP00009CWDB.VIEW0c2*CALL WDB.VARS(VARS,VALS)HEADING "Variable" "L#20":" ":"Value"FOR N = 1 TO DCOUNT( VARS, @AM )  PRINT VARS<N> "L#20":" ":VALS<N>NEXT NSTOP000E53SUB.EXCEL.FUNC0c2SUBROUTINE SUB.EXCEL.FUNC(ACTION,SPREADSHEET,CSV.WIDGET.NAME)** Copyright (c) 2020 Zumasys, Inc. All rights reserved.* Description: EXCEL utility functions*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE***SPREADSHEET=''** ISOLATE THE TITLE*BEGIN CASE  CASE ACTION = 'generate'         * Use widget name to create a filename for the CSV file         OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'         CALL SUB.GET.NEXT.ID(UNIQUE.ID,F.MVDB.CONTROL)             CSV.FILE.NAME = CSV.WIDGET.NAME:'_' :UNIQUE.ID         CALL SET.CONTENT.TYPE('text/csv')         SESSION$HEADERS<-1> = 'Content-Disposition: attachment; filename="':CSV.FILE.NAME:'.csv"'         * Build the CSV content         GOSUB BUILD.SPREADSHEET.CONTENT         SPREADSHEET=CHANGE(SPREADSHEET,CHAR(254),CHAR(13):CHAR(10))         CSV.SIZE=LEN(SPREADSHEET)         SESSION$HEADERS<-1>='Content-Length:':CSV.SIZEEND CASERETURN*BUILD.SPREADSHEET.CONTENT:*BEGIN CASE   CASE W$TYPE = 'TABLE'      GOSUB TYPE.IS.TABLE      DASHBOARD.TYPE='Report'   CASE INDEX(W$TYPE,'COLUMN',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'BAR',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'LINE',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'AREA',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'PIE',1)      GOSUB TYPE.IS.PIE      DASHBOARD.TYPE='Pie'   CASE INDEX(W$TYPE,'DOUGHNUT',1)      GOSUB TYPE.IS.PIE      DASHBOARD.TYPE='Pie'END CASE** STRIP OUT HTML STUFF AND CONVERT TO CSV*MAX.ROWS=DCOUNT(SPREADSHEET,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=SPREADSHEET<ROW.NO>   *   * <br> to space   *   LOOP      POS=INDEX(ROW,'<br>',1)   UNTIL NOT(POS) DO      ROW=ROW[1,POS-1]:' ':(ROW[POS+4,9999])   REPEAT   *   * ISOLATE XXX IN ]<a hrev.....">XXX</a>]   *   LOOP      POS=INDEX(ROW,'</a>',1)   UNTIL NOT(POS) DO      VAL.NO=DCOUNT(ROW[1,POS],CHAR(253))      VAL=ROW<1,VAL.NO>      POS=INDEX(VAL,'</a>',1)      VAL=VAL[1,POS-1]      POS=INDEX(VAL,'">',1)      VAL=VAL[POS+2,999]      ROW<1,VAL.NO>=VAL   REPEAT   MAX.VALS=DCOUNT(ROW,CHAR(253))   FOR VAL.NO = 1 TO MAX.VALS      IF DASHBOARD.TYPE = 'Chart' AND VAL.NO > 1 THEN         VAL=ROW<1,VAL.NO>         IF NUM(VAL) AND NOT(INDEX(VAL,',',1)) THEN VAL=OCONV(VAL,'MD0,')         ROW<1,VAL.NO>=VAL       END      ROW<1,VAL.NO>='"':ROW<1,VAL.NO>:'"'    NEXT VAL.NO   SPREADSHEET<ROW.NO>=ROW NEXT ROW.NOCONVERT CHAR(253) TO ',' IN SPREADSHEETRETURN*TYPE.IS.TABLE:*SPREADSHEET<-1>=W$TABLE.COL.LABELSSPREADSHEET<-1>=W$TABLE.DATASPREADSHEET<-1>=W$TABLE.TOTALSRETURN*TYPE.IS.BAR.OR.COLUMN:*SPREADSHEET<-1>='Displayed as: ':W$BAR.YMEMOCOL.HEADINGS=W$BAR.LABELSCONVERT CHAR(254) TO CHAR(253) IN COL.HEADINGS;  * MULTI-SERIES MAY HAVE SEVERALIF COL.HEADINGS<1,2> = '' THEN;  * ONLY ONE THEN USE W$BAR.YMEMO   COL.HEADINGS=W$BAR.YMEMO ENDCOL.HEADINGS=INSERT(COL.HEADINGS,1,1,0,W$BAR.XMEMO)SPREADSHEET<-1>=COL.HEADINGSNUM.ROWS=DCOUNT(W$BAR.XLABELS,CHAR(253))NUM.COL.VALUES=DCOUNT(W$BAR.VALUES,CHAR(254))FOR ROW.NO = 1 TO NUM.ROWS   THIS.ROW=W$BAR.XLABELS<1,ROW.NO>   FOR COL.NO = 1 TO NUM.COL.VALUES      THIS.COL=W$BAR.VALUES<COL.NO,ROW.NO>      IF NUM(THIS.COL) THEN         IF THIS.COL > 999 THEN            THIS.COL=OCONV(THIS.COL,'MD0,')          END       END      THIS.ROW<1,COL.NO+1>=THIS.COL    NEXT COL.NO   SPREADSHEET<-1>=THIS.ROW NEXT ROW.NORETURN*TYPE.IS.PIE:*SPREADSHEET<-1>=W$PIE.LABELSSPREADSHEET<-1>=W$PIE.VALUESRETURNEND0021C5RSS.MAINT0c2** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: March 10, 2009* Description: RSS Feed Maintenance*INCLUDE WBPD WWW.INCLUDEINCLUDE RSS.BP RSS.DATA.INC*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE STOP 201, 'RSS.FEEDS'OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD'ENDOPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'OPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE STOP 201, 'MVDB.THEMES'*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDENDIF THEME.CSS # '' THEN THEME.CSS = '<link rel="Stylesheet" href="/db/themes/':THEME.CSS:'" media="screen" type="text/css" />'IF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*CALL GET.SESSION.VAR("adminauth",adminauth)CALL PUT.SESSION.VAR("dd_mode",0)adminpass = ""IF adminauth # 1 THEN  FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'  FORM := '</head><body><p>Administrative priviledges are required. '  FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'  CALL WEB.SEND(FORM)  STOPEND*LOCATE "action" IN CGI$VARS SETTING POS THEN  action = CGI$VALS<POS>END ELSE action = ""LOCATE "id" IN CGI$VARS SETTING POS THEN  id = CGI$VALS<POS>END ELSE id = ""LOCATE "cancel_edit" IN CGI$VARS SETTING POS THEN  action = "list"END*HTML = ''BEGIN CASE  CASE action = "edit" OR action = "add" AND 0 ;* This code is depricated    IF action = "edit" THEN      READ FEED.REC FROM F.RSS.FEEDS, id ELSE FEED.REC = ""    END ELSE FEED.REC = ""    FEED.NAME = FEED.REC<1>    FEED.DESC = FEED.REC<3>    CRLF = CHAR(13):CHAR(10)    CALL SWAP(FEED.DESC,'<br />',CRLF)    SEL.SUB = FEED.REC<4>    ITEM.SUB = FEED.REC<5>    READ INNER.TEMPLATE FROM F.WEB.FORMS, "rss_edit.html" ELSE INNER.TEMPLATE = "rss_edit.html missing"    IF action = "add" THEN      edit_id = '<input type="text" name="new_id" value="">'      id = "NEW"    END ELSE      edit_id = id    END    CALL SWAP(INNER.TEMPLATE,'<!-- feed_id -->',id)    CALL SWAP(INNER.TEMPLATE,'<!-- edit_feed_id -->',edit_id)    CALL SWAP(INNER.TEMPLATE,'<!-- feed_name -->',FEED.NAME)    CALL SWAP(INNER.TEMPLATE,'<!-- feed_desc -->',FEED.DESC)    CALL SWAP(INNER.TEMPLATE,'<!-- sel_sub -->',SEL.SUB)    CALL SWAP(INNER.TEMPLATE,'<!-- item_sub -->',ITEM.SUB)    *    SEL.SUB.MSG = '' ; ITEM.SUB.MSG = ''    IF SEL.SUB # "" THEN      READ TST FROM F.MD, SEL.SUB ELSE        SEL.SUB.MSG = 'Not Cataloged'      END    END    IF ITEM.SUB # "" THEN      READ TST FROM F.MD, ITEM.SUB ELSE        ITEM.SUB.MSG = 'Not Cataloged'      END    END    CALL SWAP(INNER.TEMPLATE,'<!-- sel_sub_msg -->',SEL.SUB.MSG)    CALL SWAP(INNER.TEMPLATE,'<!-- item_sub_msg -->',ITEM.SUB.MSG)    *    FEED.MODE.NAMES = FEED.REC<6>    FEED.MODE.PARAMS = FEED.REC<7>    FEED.MODES = ""    FOR N = 1 TO DCOUNT( FEED.MODE.NAMES<1>, @VM )      FEED.MODES<-1> = FEED.MODE.NAMES<1,N>:',':FEED.MODE.PARAMS<1,N>    NEXT N    CALL SWAP(FEED.MODES,@AM,CRLF)    CALL SWAP(INNER.TEMPLATE,'<!-- feed_modes -->',FEED.MODES)    HTML = INNER.TEMPLATE  CASE action = "delete" AND id # ""    DELETE F.RSS.FEEDS, id    GOSUB LOAD.FEEDS  CASE action = "save" AND id # ""    FEED.REC = ""    LOCATE "feed_name" IN CGI$VARS SETTING POS THEN      name = CGI$VALS<POS>    END ELSE name = ""    LOCATE "feed_desc" IN CGI$VARS SETTING POS THEN      desc = CGI$VALS<POS>    END ELSE desc = ""    CONVERT CHAR(13) TO "" IN desc    CALL SWAP(desc,CHAR(10),'<br />')    LOCATE "sel_sub" IN CGI$VARS SETTING POS THEN      sel_sub = CGI$VALS<POS>    END ELSE sel_sub = ""    LOCATE "item_sub" IN CGI$VARS SETTING POS THEN      item_sub = CGI$VALS<POS>    END ELSE item_sub = ""    FEED.REC<1> = name    FEED.REC<3> = desc    FEED.REC<4> = sel_sub    FEED.REC<5> = item_sub    LOCATE "feed_modes" IN CGI$VARS SETTING POS THEN      feed_modes = CGI$VALS<POS>    END ELSE feed.modes = ""    CONVERT CHAR(13) TO "" IN feed_modes    CONVERT CHAR(10) TO @AM IN feed_modes    FOR N = 1 TO DCOUNT( feed_modes, @AM )      IF TRIM( feed_modes<N> ) # "" THEN        FEED.REC<6,N> = TRIM( FIELD( feed_modes<N>, ',',  1 ) )        FEED.REC<7,N> = TRIM( FIELD( feed_modes<N>, ',',  2 ) )      END    NEXT N    IF id = "NEW" THEN      LOCATE "new_id" IN CGI$VARS SETTING POS THEN        id = CGI$VALS<POS>      END      IF id = "NEW" THEN id="NEW1"    END    IF id # "" THEN      WRITE FEED.REC ON F.RSS.FEEDS, id    END    GOSUB LOAD.FEEDS  CASE 1 ; * Action = list (default)    GOSUB LOAD.FEEDSEND CASE*READ ADMIN.TEMPLATE FROM F.WEB.FORMS, "rss_admin_template.html" ELSE ADMIN.TEMPLATE = "rss_admin_template.html not found."CALL SWAP(ADMIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)HEADER = '<div id="dashboard_nav">'HEADER := '<ol class="dashboard_list">'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=users">Users</a></li>'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets">Widgets</a></li>'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=dashboards">Dashboards</a></li>'HEADER := '<li class="db_active"><a href="':CGI$PATH:'/RSS.MAINT">RSS Feed Maintenance</a></li>'OPEN 'MVPKG.DATA' TO F.MVPKG.DATA THEN  HEADER := '<li><a href="':CGI$PATH:'/MVPKG.MAIN">Package Manager</a></li>'ENDHEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN">Return to Dashboard</a></li>'HEADER := '</ol>'HEADER := '</div>'CALL SWAP(ADMIN.TEMPLATE,'<!-- HEADER -->',HEADER)FOOTER = ''CALL SWAP(ADMIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_MAIN -->',HTML)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)CALL WEB.SEND(ADMIN.TEMPLATE)STOP*LOAD.FEEDS: **HTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="6"><a href="" class="add-feed">Add a Feed</a></td></tr>'HTML<-1> = '<tr><th>ID</th><th>Name</th><th>Feed URL</th><th>Sel SUB</th><th>Item SUB</th><th>Action</th></tr>'EXECUTE "SSELECT RSS.FEEDS BY NAME" CAPTURING JUNKLOOP  READNEXT FID ELSE EXIT  READ FEED.REC FROM F.RSS.FEEDS, FID ELSE CONTINUE  FEED.NAME = FEED.REC<1>  CALL RSS.XML.ENCODE(FEED.NAME,"")  FEED.URL = "http://":CGI$SERVER.NAME:CGI$PATH:'/RSS.MAIN?feed=':FID  FEED.URL = '<a target="_blank" href="':FEED.URL:'">':FEED.URL:'</a>'  FEED.DESC = FEED.REC<3>  SEL.SUB = FEED.REC<4>  ITEM.SUB = FEED.REC<5>  URL.SEL.SUB = SEL.SUB  URL.ITEM.SUB = ITEM.SUB  CALL SUB.URL.ENCODE(URL.SEL.SUB)  CALL SUB.URL.ENCODE(URL.ITEM.SUB)  ROW = '<tr><td>':FID:'</td><td>':FEED.NAME:'</td><td>':FEED.URL:'</td><td><a href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=':SEL.SUB:'" target="RSS.BP_':URL.SEL.SUB:'">':SEL.SUB:'</a></td><td><a href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=':ITEM.SUB:'" target="RSS.BP_':URL.ITEM.SUB:'">':ITEM.SUB:'</a></td>'  ROW := \<td>\  IF FID = "FEEDS" THEN    ROW := '&nbsp;'  END ELSE    FEED.MODE.NAMES = FEED.REC<6>    FEED.MODE.PARAMS = FEED.REC<7>    FEED.MODES = ""    FOR N = 1 TO DCOUNT( FEED.MODE.NAMES<1>, @VM )      FEED.MODES<-1> = FEED.MODE.NAMES<1,N>:',':FEED.MODE.PARAMS<1,N>    NEXT N    CALL SWAP(FEED.MODES,@AM,'\n')    CALL SWAP(FEED.MODES,'"','\"')    CALL SWAP(FEED.NAME,'"','\"')    CALL SWAP(FEED.DESC,'"','\"')    CALL SWAP(SEL.SUB,'"','\"')    CALL SWAP(ITEM.SUB,'"','\"')    ROW := \<a href="javascript:editFeed('\:FID:\','\:FEED.NAME:\','\:FEED.DESC:\','\:SEL.SUB:\','RSS.BP_\:URL.SEL.SUB:\','\:ITEM.SUB:\','RSS.BP_\:URL.ITEM.SUB:\','\:FEED.MODES:\');"><img title="Edit Feed" class="icon" src="/db/icons/feed_edit.png" /></a> &nbsp;\    ROW := \<a onClick="return confirm('DELETE: Are you sure?');" href="/dbc/RSS.MAINT?action=delete&id=\:FID:\"><img title="Delete Feed" class="icon" src="/db/icons/feed_delete.png" /></a>\  END  ROW := '</td></tr>'  HTML<-1> = ROWREPEATHTML<-1> = '<tr><td colspan="6"><a href="" class="add-feed">Add a Feed</a></td></tr>'HTML<-1> = '</table>'RETURN00021DSET.COOKIE0c2SUBROUTINE SET.COOKIE( C.VAL )*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 10/25/03* Description  : This program sets the SESSION$COOKIES variable.*              ***********************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*IF TRIM(C.VAL) # "" THEN  SESSION$COOKIES<-1> = C.VALEND*RETURN*0014B5DRILLDOWN.STACK.RTNE0c2SUBROUTINE DRILLDOWN.STACK.RTNE(F.MVDB.UDATA,DD.STACK,GO.BACK)** 4-25-16 Tom Parker - Created to support drilldown cookie concept to *                      allow for automatic go back functionality* 09-23-16 Tom Parker - Made obsolete with changes in philosophy on how*                       to handle going back from drilldownsINCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.USERSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*EQU TRUE TO 1, FALSE TO 0, AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*MATREAD GLOBAL.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:'$UG' ELSE MAT GLOBAL.USER.DATA=''STACK.ID=SESSION$ID:'$DD.STACK'READ DD.STACK FROM F.MVDB.UDATA, STACK.ID ELSE DD.STACK=''IF DD.STACK <> '' THEN   LAST.STACK.CNTR=DCOUNT(DD.STACK,AM)   LAST.STACK.ENTRY.ID=SESSION$ID:'$DD.':LAST.STACK.CNTR   READ LAST.CGI.REC FROM F.MVDB.UDATA, LAST.STACK.ENTRY.ID:'.VARS' ELSE LAST.CGI.REC='' END ELSE   LAST.STACK.CNTR=0   LAST.CGI.REC='' ENDVAL.VARS=CGI$VARS; CONVERT AM TO VM IN VAL.VARSCGI.REC=VAL.VARSVAL.VALS=CGI$VALS; CONVERT AM TO VM IN VAL.VALSCGI.REC<2>=VAL.VALSLOCATE 'dd' IN CGI$VARS SETTING POS ELSE POS=999DD.VAR=CGI$VALS<POS>* DBNAME WILL BE GO_BACK IF PULLING BACK FROM DRILLDOWNLOCATE 'dbname' IN CGI$VARS SETTING POS ELSE POS=999DBNAME=CGI$VALS<POS>*** IF DOING A BACKUP PULL IN INFORMATION FROM PREVIOUS*IF (DBNAME = "GO_BACK" OR DBNAME = "go_back") AND LAST.STACK.CNTR > 1 THEN   DELETE.STACK.ENTRY.ID=SESSION$ID:'$DD.':LAST.STACK.CNTR   DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.GUD'   DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.WUD'   DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.VARS'   DD.STACK=DELETE(DD.STACK,LAST.STACK.CNTR,0,0)   WRITE DD.STACK ON F.MVDB.UDATA, STACK.ID   NEW.STACK.ENTRY.ID=SESSION$ID:'$DD.':LAST.STACK.CNTR-1   READ CGI.REC FROM F.MVDB.UDATA, NEW.STACK.ENTRY.ID:'.VARS' ELSE CGI.REC=''   CGI$VARS=CGI.REC<1>   CONVERT VM TO AM IN CGI$VARS   CGI$VALS=CGI.REC<2>   CONVERT VM TO AM IN CGI$VALS   MATREAD GLOBAL.USER.DATA FROM F.MVDB.UDATA, NEW.STACK.ENTRY.ID:'.GUD' ELSE MAT GLOBAL.USER.DATA=''   MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA, SESSION$ID:'$UG'**   MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, NEW.STACK.ENTRY.ID:'.WUD' ELSE MAT WIDGET.USER.DATA=''   GO.BACK=1   RETURN END*** IF FROM A SUBMIT BUTTON THEN SIMPLY REFRESH LAST STACK ENTRY** BUT MAKE SURE IT HAS DRILLDOWN IF PREVIOUS DID** SAME APPLIES TO DEBUG AND UNDEBUG BUTTON*LOCATE 'debug_widget' IN CGI$VARS SETTING DEBUG.POS ELSE DEBUG.POS=0LOCATE 'undebug_widget' IN CGI$VARS SETTING UNDEBUG.POS ELSE UNDEBUG.POS=0LOCATE 'sw' IN CGI$VARS SETTING POS ELSE POS=999SW.VAR=CGI$VALS<POS>INP.POS=INDEX(VM:VAL.VARS,VM:'inp_',1)IF (SW.VAR <> '' AND INP.POS) OR DEBUG.POS OR UNDEBUG.POS THEN   LOCATE 'dd' IN LAST.CGI.REC<1> SETTING DD.POS ELSE DD.POS=999   DD.VAL=LAST.CGI.REC<2,DD.POS>   IF DD.VAL <> '' THEN      LOCATE 'dd' IN CGI$VARS SETTING DD.POS ELSE DD.POS=DCOUNT(CGI$VARS,AM)+1      IF CGI$VALS<DD.POS> = '' THEN         CGI.REC<1,DD.POS>='dd'         CGI.REC<2,DD.POS>=DD.VAL         CGI$VARS<DD.POS>='dd'         CGI$VALS<DD.POS>=DD.VAL       END    END   * DEBUG POSITION MAY HAVE CHANGED SO FIND AGAIN   IF DEBUG.POS THEN      LOCATE 'debug_widget' IN CGI.REC<1> SETTING DEBUG.POS ELSE DEBUG.POS=0      IF DEBUG.POS THEN         CGI.REC=DELETE(CGI.REC,1,DEBUG.POS,0)         CGI.REC=DELETE(CGI.REC,2,DEBUG.POS,0)       END    END   IF UNDEBUG.POS THEN      LOCATE 'undebug_widget' IN CGI.REC<1> SETTING UNDEBUG.POS ELSE UNDEBUG.POS=0      IF UNDEBUG.POS THEN         CGI.REC=DELETE(CGI.REC,1,UNDEBUG.POS,0)         CGI.REC=DELETE(CGI.REC,2,UNDEBUG.POS,0)       END    END   STACK.ENTRY.ID=LAST.STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END**** SIMPLY WRITE OUT THIS SESSION INFORMATION IF:**    1.  NOTHING YET ON THE STACK**    2.  ONLY ONE ENTRY ON THE STACK AND THIS ISN'T A DRILL DOWN*IF NOT(LAST.STACK.CNTR) OR (LAST.STACK.CNTR = 1 AND DD.VAR = '') THEN   *   STACK.ENTRY.ID=SESSION$ID:'$DD.1'   DD.STACK=STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END*** ID DOING A DRILLDOWN THEN PUSH ONTO STACK*IF DD.VAR <> '' THEN   NEXT.STACK.CNTR=LAST.STACK.CNTR+1   STACK.ENTRY.ID=SESSION$ID:'$DD.':NEXT.STACK.CNTR   DD.STACK<NEXT.STACK.CNTR>=STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END*** IF NO CHANGE IN CGI VARS THEN REFRESH LAST STACK ENTRY*IF CGI.REC = LAST.CGI.REC THEN   STACK.ENTRY.ID=LAST.STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END*** ALL ELSE SHOULD BE A NEW DASHBOARD SO START OVER WITH STACK** AFTER PURGING ALL PREVIOUSLY STACKED ITEMS*IF LAST.STACK.CNTR > 1 THEN   FOR DELETE.CNTR = LAST.STACK.CNTR TO 2 STEP -1      DELETE.STACK.ENTRY.ID=SESSION$ID:'$DD.':DELETE.CNTR      DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.GUD'      DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.WUD'      DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.VARS'    NEXT DELETE.CNTR ENDSTACK.ENTRY.ID=SESSION$ID:'$DD.1'DD.STACK=STACK.ENTRY.IDGOSUB WRITE.STACK*RETURN*WRITE.STACK:*WRITE DD.STACK ON F.MVDB.UDATA, STACK.IDWRITE CGI.REC ON F.MVDB.UDATA, STACK.ENTRY.ID:'.VARS'MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA, STACK.ENTRY.ID:'.GUD'RETURN*END0002B5WEB.FLUSH0c2SUBROUTINE WEB.FLUSH*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 11/06/03* Description  : This program sets the calls SET.BUFFER(FALSE) then *                calls WEB.SEND("") if the SESSION$OUTPUT variables*                length is greater then 0.*              ***********************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*CALL SET.BUFFER(FALSE)*IF LEN(SESSION$OUTBUF) > 0 THEN  CALL WEB.SEND("")*END*RETURN*0024B2MV.COMPILE0c2* MV.COMPILE - Sierra Bravo Precompiler** Copyright (C) 2006 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin* Date: 12/26/2006* Description: Precompiler** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause**PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ''PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE() ; *PJS 06-12-15*TCL.LINE = TRIM( TCL.LINE )VERB = FIELD(TCL.LINE,' ', 1)FILE = FIELD( TCL.LINE, ' ', 2 )ITEM.LIST = ''IF SYSTEM(11) THEN  LOOP    READNEXT ITEM ELSE EXIT    ITEM.LIST<-1> = ITEM  REPEATEND ELSE  POS = 3  LOOP    ITEM = FIELD( TCL.LINE, ' ', POS )  UNTIL ITEM = '' OR ITEM[1,1] = '(' DO    ITEM.LIST<-1> = ITEM    POS += 1  REPEATENDOPTS.POS = INDEX( TCL.LINE, '(', 1 )IF OPTS.POS THEN  OPTS = TCL.LINE[OPTS.POS,999]END ELSE OPTS = ''*OPEN FILE TO FILEVAR ELSE STOP 201, FILE*INC.FILE = FILE:".INC"OPEN INC.FILE TO INC.FILEVAR ELSE  EXECUTE "CREATE-FILE ":INC.FILE:" 1 51"  OPEN INC.FILE TO INC.FILEVAR ELSE STOP 201, INC.FILEENDOPEN '','MVPC.CONTROL' TO F.MVPC.CONTROL ELSE  EXECUTE "CREATE-FILE MVPC.CONTROL 3 11" CAPTURING JUNK  OPEN '','MVPC.CONTROL' TO F.MVPC.CONTROL ELSE STOP 201, 'MVPC.CONTROL'END*DELIMS = \"'\ONE.WORD.TOKENS = ""ONE.WORD.TOKENS<-1> = "notrim"ONE.WORD.TOKENS<-1> = "exists"*ITEM.CNT = DCOUNT( ITEM.LIST, @AM )FOR ITEM.X = 1 TO ITEM.CNT  PRINT "MV Precompiler Version 1.0 ":  INC.SOURCE = '** Auto-generated source code. Do not modify this file.'  INC.SOURCE<-1> = "VAR$ERR = ''"  INC.SOURCE<-1> = "CALL WDB.VARS(VARS,VALS)"  INC.SOURCE<-1> = "*"  INC.SOURCE<-1> = 'LOCATE "xmlQuery" IN VARS SETTING POS THEN'  INC.SOURCE<-1> = '  XML$QUERY = 1'  INC.SOURCE<-1> = 'END ELSE XML$QUERY = 0'  XML.INFO = '<vars>'  VAR.INFO = ''  VAR.INFO.POS = 1  ITEM = ITEM.LIST<ITEM.X>  READ SOURCE FROM FILEVAR, ITEM ELSE    PRINT "Item '":ITEM:"' not on file."    CONTINUE  END  DELETE INC.FILEVAR, ITEM  SOURCE.LINES = DCOUNT( SOURCE, @AM )  SLINE = 1  END.OF.PC = 0  PARSED.ANY = 0  PC.ERRORS = 0  LOOP    LINE = SOURCE<SLINE>    IF TRIM(LINE)[1,1] = "!" THEN      GOSUB PARSE.LINE      IF SYNTAX.ERROR # "" THEN        PRINT        PRINT "Syntax Error: ":SYNTAX.ERROR        PRINT SLINE:": ":LINE        PARSED = 0        PC.ERRORS += 1      END      IF PARSED THEN        PRINT ".":        PARSED.ANY = 1        THIS.INC = ""        IF REQUIRE.ERROR = "" THEN          REQUIRE.ERROR = FROMVAR:' required.'        END        IF ITERATIVE THEN          FROMVAR = FROMVAR[1,LEN(FROMVAR)-2]          VARNAME = VARNAME[1,LEN(VARNAME)-2]          THIS.INC<-1> = "VAR$CNT = DCOUNT( VARS, @AM )"          THIS.INC<-1> = "VAR$STRLEN = ":LEN(FROMVAR)          THIS.INC<-1> = VARNAME:" = ''"          IF VARTYPE = "date" THEN            THIS.INC<-1> = VARNAME:".I = ''"          END          THIS.INC<-1> = "FOR VAR$X = 1 TO VAR$CNT"          THIS.INC<-1> = \  IF VARS<VAR$X> MATCHES "'\:FROMVAR:\'1N0N" THEN\          THIS.INC<-1> = '    VAR$NUM = VARS<VAR$X>[VAR$STRLEN+1,99]'          THIS.INC<-1> = '    ':VARNAME:'<VAR$NUM> = VALS<VAR$X>'          IF VARTYPE = "date" THEN            THIS.INC<-1> = '    ':VARNAME:'.I<VAR$NUM> = ICONV(':VARNAME:'<VAR$NUM>,"D")'            THIS.INC<-1> = '    ':VARNAME:'<VAR$NUM> = OCONV(':VARNAME:'.I<VAR$NUM>,"D4/")'          END          THIS.INC<-1> = '  END'          THIS.INC<-1> = 'NEXT VAR$X'         END ELSE          THIS.INC<-1> = 'LOCATE "':FROMVAR:'" IN VARS SETTING POS THEN'          THIS.INC<-1> = '  ':VARNAME:' = VALS<POS>'          THIS.INC<-1> = '  ':VARNAME:'.EXISTS = 1'          IF VARTYPE = "date" THEN            THIS.INC<-1> = '  ':VARNAME:'.I = ICONV(':VARNAME:',"D")'            THIS.INC<-1> = '  ':VARNAME:' = OCONV(':VARNAME:'.I,"D4/")'          END          IF DEFAULT # "" THEN            THIS.INC<-1> = '  IF ':VARNAME:' = "" THEN ':VARNAME:' = "':DEFAULT:'"'          END          THIS.INC<-1> = 'END ELSE'          THIS.INC<-1> = '  ':VARNAME:'.EXISTS = 0'          IF VARTYPE = "date" THEN            THIS.INC<-1> = '  ':VARNAME:'.I = ""'          END          IF METHOD = "REQUIRE" AND EXISTS THEN            * Existence of variable is required            THIS.INC<-1> = '  ':VARNAME:' = ""'            THIS.INC<-1> = '  VAR$ERR<-1> = "':REQUIRE.ERROR:'"'          END ELSE            THIS.INC<-1> = '  ':VARNAME:' = "':DEFAULT:'"'          END          THIS.INC<-1> = 'END'          IF METHOD = "REQUIRE" AND NOT(EXISTS) THEN            THIS.INC<-1> = 'IF ':VARNAME:' = "" THEN'            THIS.INC<-1> = '  VAR$ERR<-1> = "':REQUIRE.ERROR:'"'            THIS.INC<-1> = 'END'          END          IF TRIM.VAL THEN            THIS.INC<-1> = VARNAME:" = TRIM(":VARNAME:")"          END        END        *        IF METHOD = "REQUIRE" THEN REQUIRED = 1 ELSE REQUIRED = 0        *        VAR.INFO<1,VAR.INFO.POS> = FROMVAR        VAR.INFO<2,VAR.INFO.POS> = REQUIRED        VAR.INFO<3,VAR.INFO.POS> = VARTYPE        VAR.INFO<4,VAR.INFO.POS> = ITERATIVE        VAR.INFO<5,VAR.INFO.POS> = DEFAULT        VAR.INFO<6,VAR.INFO.POS> = COMMENT        VAR.INFO<7,VAR.INFO.POS> = EXISTS        VAR.INFO.POS += 1        *        XML.INFO<-1> = '<var name="':FROMVAR:'" required="':REQUIRED:'" type="':VARTYPE:'" iterative="':ITERATIVE:'">'        CALL XML.ENCODE(DEFAULT,'')        CALL XML.ENCODE(COMMENT,'')        XML.INFO<-1> = ' <default>':DEFAULT:'</default>'        XML.INFO<-1> = ' <comment>':COMMENT:'</comment>'        XML.INFO<-1> = '</var>'        *        INC.SOURCE<-1> = THIS.INC      END    END ELSE      LINE = TRIM(LINE)      IF LINE = "INCLUDE ":FILE:".INC ":ITEM THEN END.OF.PC = 1    END  UNTIL SLINE > SOURCE.LINES OR END.OF.PC DO SLINE += 1 REPEAT  PRINT  IF PARSED.ANY THEN    XML.INFO<-1> = '</vars>'    INC.SOURCE<-1> = "* XML Info"    INC.SOURCE<-1> = \XML$INFO = '<?xml version="1.0" ?>'\    XICNT = DCOUNT( XML.INFO, @AM )    FOR XML.X = 1 TO XICNT      INC.SOURCE<-1> = 'XML$INFO<-1> = \':XML.INFO<XML.X>:'\'    NEXT XML.X    INC.SOURCE<-1> = 'IF XML$QUERY THEN'    INC.SOURCE<-1> = '  CALL XML.SEND(XML$INFO)'    INC.SOURCE<-1> = '  STOP'    INC.SOURCE<-1> = 'END'    WRITE INC.SOURCE ON INC.FILEVAR, ITEM    WRITE VAR.INFO ON INC.FILEVAR, "$":ITEM    *    READU FILE.LIST FROM F.MVPC.CONTROL, 'LIBRARIES' ELSE FILE.LIST = ''    LOCATE FILE IN FILE.LIST BY 'AL' SETTING POS THEN      RELEASE F.MVPC.CONTROL, 'LIBRARIES'    END ELSE      FILE.LIST = INSERT( FILE.LIST, 1, POS, 0, FILE )      WRITE FILE.LIST ON F.MVPC.CONTROL, 'LIBRARIES'    END  END  IF PC.ERRORS THEN    PRINT "Compile aborted"  END ELSE    XLINE = "D3.":VERB:" ":FILE:" ":ITEM:" ":OPTS    PRINT "D3 Compile: ":XLINE    EXECUTE XLINE  ENDNEXT ITEM.XSTOP*PARSE.LINE: * Parse a line into tokens*SYNTAX.ERROR = ""LINE = TRIM(LINE)LINE = LINE[2,9999] ;* Remove "!"*LINELEN = LEN(LINE)TOKEN.LIST = '' ; TOKEN.POS = 1TOKEN = ""VALUE = ""GETMODE = "TOKEN" ;* Start looking for tokensDELIM = ""IN.DELIM.STRING = 0PARSED = 0FOR LX = 1 TO LINELEN  CH = LINE[LX,1]  IF GETMODE = "TOKEN" THEN    BEGIN CASE      CASE CH MATCHES "1A" OR CH MATCHES "1N"        TOKEN := CH      CASE CH = " "        * End of word - Token complete        IF TOKEN # "" THEN          TOKEN.LIST<1,TOKEN.POS> = TOKEN          LOCATE TOKEN IN ONE.WORD.TOKENS SETTING POS ELSE            GETMODE = "VALUE"            VALUE.POS = TOKEN.POS            IN.DELIM.STRING = 0          END          TOKEN.POS += 1          TOKEN = ""        END    END CASE  END ELSE IF GETMODE = "VALUE" THEN    BEGIN CASE      CASE IN.DELIM.STRING AND CH = DELIM        TOKEN.LIST<2,VALUE.POS> = VALUE        VALUE = ""        DELIM = ""        GETMODE = "TOKEN"      CASE NOT(IN.DELIM.STRING) AND INDEX(DELIMS,CH,1) ;* This is a delimiter        IN.DELIM.STRING = 1        DELIM = CH      CASE CH = " " AND NOT(IN.DELIM.STRING)        TOKEN.LIST<2,VALUE.POS> = VALUE        VALUE = ""        GETMODE = "TOKEN"      CASE 1        VALUE := CH    END CASE  ENDNEXT LXIF TOKEN # "" THEN  TOKEN.LIST<1,-1> = TOKENEND ELSE IF VALUE # "" THEN  TOKEN.LIST<2,VALUE.POS> = VALUEEND*VARNAME = ""FROMVAR = ""COMMENT = ""DEFAULT = ""VARTYPE = "string"TRIM.VAL = 1EXISTS = 0REQUIRE.ERROR = ""*FOR TX = 1 TO DCOUNT( TOKEN.LIST<1>, @VM )  TOKEN = TOKEN.LIST<1,TX>  VALUE = TOKEN.LIST<2,TX>  BEGIN CASE    CASE TOKEN = "get" OR TOKEN = "require"      METHOD = TOKEN      VARNAME = VALUE      PARSED = 1    CASE TOKEN = "from"      FROMVAR = VALUE    CASE TOKEN = "type"      VARTYPE = OCONV(VALUE,'MCL')    CASE TOKEN = "default"      DEFAULT = VALUE    CASE TOKEN = "comment"      COMMENT = VALUE    CASE TOKEN = "notrim"      TRIM.VAL = 0    CASE TOKEN = "exists"      EXISTS = 1    CASE TOKEN = "error"      REQUIRE.ERROR = VALUE    CASE 1      SYNTAX.ERROR = "Invalid Token: '":TOKEN:'"'  END CASENEXT TX*IF NOT(PARSED) THEN RETURN*IF VARNAME = "" THEN  SYNTAX.ERROR = "No variable specified"  RETURNEND*IF FROMVAR = "" THEN FROMVAR = VARNAME*ITERATIVE = 0IF VARNAME[LEN(VARNAME)-1,2] = "[]" THEN  IF FROMVAR[LEN(FROMVAR)-1,2] = "[]" THEN    ITERATIVE = 1  END ELSE    SYNTAX.ERROR = "Iterative array mismatch: ":VARNAME:", ":FROMVAR  ENDEND*RETURN000536PUT.SESSION.VAR0c2SUBROUTINE PUT.SESSION.VAR( var, VAL )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program inserts a variable in the the current*              session record.  If the variable already exists, it*              is replaced.  If it does not exist, then it is created.*#MAKE# RL $OPTIONS D3* InitINCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)IF SESSION$ID = "" THEN RETURN** Need to get rid of the VM,SVM, and AM chars so that we can* store multi-valued data in the record. I am changing them to* very small ASCII codes that are usually not used.  This should* be pretty safe.*CONVERT AM TO CHAR(2) IN VALCONVERT VM TO CHAR(3) IN VALCONVERT SVM TO CHAR(4) IN VAL*READ REC FROM F.WEB.SESSION, SESSION$ID ELSE REC = ''TOTAL.VARS = DCOUNT(REC<1>, VM)LOCATE var IN REC<1> SETTING POS THEN  REC<2,POS> = VALEND ELSE  NEXT.REC = TOTAL.VARS + 1  REC<1,NEXT.REC> = var  REC<2,NEXT.REC> = VALENDWRITE REC ON F.WEB.SESSION, SESSION$IDCONVERT CHAR(2) TO AM IN VALCONVERT CHAR(3) TO VM IN VALCONVERT CHAR(4) TO SVM IN VAL*IF (var # 'LastSessionAccess') THEN  CALL PUT.SESSION.VAR('LastSessionAccess', DATE():'*':TIME())END*RETURN0062E2MVPKG.MAIN0c2* Copyright (C) 2010 Sierra Bravo Corporation, All Rights Reserved** Written by: Dave Bucklin, Sierra Bravo* Date: May, 2010* Description: Administration area of Bravo Dashboard**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD MVPKG.INCLUDEINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*EQU TRUE TO 1, FALSE TO 0, AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*OPEN '','MVPKG.DATA' TO F.MVPKG.DATA ELSE STOP 201, 'MVPKG.DATA'OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MVDB.SUBS' TO F.MVDB.SUBS ELSE STOP 201, 'MVDB.SUBS'OPEN '','MVDB.DEFS' TO F.MVDB.DEFS ELSE STOP 201, 'MVDB.DEFS'OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE STOP 201, 'MVDB.WIDGET.TYPES'OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD'END*DIM PKG.REC(40)DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)*EQU STEP$WIDGETS TO 1EQU STEP$DASHBOARDS TO 2EQU STEP$ITEMS TO 3EQU STEP$WEB.FILES TO 4EQU STEP$SETTINGS TO 5EQU STEP$SUMMARY TO 6*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDENDIF SITE$THEME # '' THEN SITE$THEME = '<link rel="Stylesheet" href="/db/themes/':SITE$THEME:'" media="screen" type="text/css" />'IF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*CALL GET.SESSION.VAR("adminauth",adminauth)CALL PUT.SESSION.VAR("dd_mode",0)adminpass = ""IF adminauth # 1 THEN  FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'  FORM := '</head><body><p>Administrative priviledges are required. '  FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'  CALL WEB.SEND(FORM)  STOPEND*HTML = ''LOCATE "action" IN CGI$VARS SETTING POS THEN  action = CGI$VALS<POS>END ELSE action = ""LOCATE 'pkg_id' IN CGI$VARS SETTING POS THEN  PKG.ID = CGI$VALS<POS>END ELSE PKG.ID = ''*BEGIN CASE  CASE action = 'rebuild'     MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID THEN       *translate this package definition into something usable by the package builder       OPEN 'MAKE.FILE,':PKG.ID TO F.MAKE.FILE ELSE         EXECUTE "CREATE-FILE DATA MAKE.FILE,":PKG.ID:" 11"         OPEN 'MAKE.FILE,':PKG.ID TO F.MAKE.FILE ELSE STOP 201, 'MAKE.FILE,':PKG.ID       END       CLEARFILE F.MAKE.FILE       *       *Dashboards       *       WIDGET.LIST = '' ;*composite of dashboard and individual widgets       DB.LIST = ''       FILE.LIST = ''       DB.CNT = DCOUNT(PKG$DASHBOARDS<1>,VM)       FOR ON.DB = 1 TO DB.CNT         IF PKG$DASHBOARDS.OVR<1,ON.DB> = 1 THEN LIST.POS = 2 ELSE LIST.POS = 1         IF PKG$DASHBOARDS.ADD<1,ON.DB> = 1 THEN           *add the widgets from this db           READV WIDGETS FROM F.MVDB.DEFS, PKG$DASHBOARDS<1,ON.DB>, 2 ELSE WIDGETS = ''           WCNT = DCOUNT(WIDGETS<1>,VM)           FOR ON.W = 1 TO WCNT             LOCATE WIDGETS<1,ON.W> IN WIDGET.LIST<LIST.POS> SETTING DUM ELSE               WIDGET.LIST = INSERT(WIDGET.LIST,LIST.POS,0,0,WIDGETS<1,ON.W>)             END           NEXT ON.W         END         DB.LIST<LIST.POS,-1> = PKG$DASHBOARDS<1,ON.DB>       NEXT ON.DB       *DB.LIST = PKG$DASHBOARDS       *CONVERT VM TO AM IN DB.LIST       *WRITE DB.LIST ON F.MAKE.FILE, 'DATA_MVDB.DEFS'       PKG.LIST = DB.LIST<1>       CONVERT VM TO AM IN PKG.LIST       IF DCOUNT(PKG.LIST,AM) THEN         WRITE PKG.LIST ON F.MAKE.FILE, 'DATA_MVDB.DEFS'         FILE.LIST<-1> = 'MVDB.DEFS'       END                O.PKG.LIST = DB.LIST<2>       CONVERT VM TO AM IN O.PKG.LIST       IF DCOUNT(O.PKG.LIST,AM) THEN         WRITE O.PKG.LIST ON F.MAKE.FILE, 'DATA_O:MVDB.DEFS'         FILE.LIST<-1> = 'O:MVDD.DEFS'       END       *       *Widget defs and subs       *       WCNT = DCOUNT(PKG$WIDGETS<1>,VM)       FOR ON.W = 1 TO WCNT         IF PKG$WIDGETS.OVR<1,ON.DB> = 1 THEN LIST.POS = 2 ELSE LIST.POS = 1         LOCATE PKG$WIDGETS<1,ON.W> IN WIDGET.LIST<LIST.POS> SETTING DUM ELSE           WIDGET.LIST = INSERT(WIDGET.LIST,LIST.POS,0,0,WIDGETS<1,ON.W>)         END       NEXT ON.W       *WRITE WIDGET.LIST ON F.MAKE.FILE, 'DATA_MVDB.WIDGETS'       WGT.LIST = WIDGET.LIST<1>       CONVERT VM TO AM IN WGT.LIST       IF DCOUNT(WGT.LIST,AM) THEN         WRITE WGT.LIST ON F.MAKE.FILE, 'DATA_MVDB.WIDGETS'         FILE.LIST<-1> = 'MVDB.WIDGETS'       END       O.WGT.LIST = WIDGET.LIST<2>       CONVERT VM TO AM IN O.WGT.LIST       IF DCOUNT(WGT.LIST,AM) THEN         WRITE O.WGT.LIST ON F.MAKE.FILE, 'DATA_O:MVDB.WIDGETS'         FILE.LIST<-1> = 'O:MVDB.WIDGETS'       END       *       COMPILE.COMMANDS = ''       SUB.LIST = ''       WCNT = DCOUNT(WIDGET.LIST,AM)       FOR ON.W = 1 TO WCNT         READV SUB.NAME FROM F.MVDB.WIDGETS, WIDGET.LIST<ON.W>, 1 THEN           LOCATE SUB.NAME IN SUB.LIST SETTING DUM ELSE             SUB.LIST = INSERT(SUB.LIST,1,0,0,SUB.NAME)             IF PKG$COMPILE.OPT = 1 THEN               COMPILE.COMMANDS<-1> = 'COMPILE MVDB.SUBS ':SUB.NAME               IF PKG$FLASH.OPT = 1 THEN COMPILE.COMMANDS := " (O"             END           END         END       NEXT ON.W       WRITE SUB.LIST ON F.MAKE.FILE, 'DATA_MVDB.SUBS'       *       *Additional files and items       *       FILE.CNT = DCOUNT(PKG$FILES<1>,VM)       FOR ON.FILE = 1 TO FILE.CNT         FNAME = PKG$FILES<1,ON.FILE>         ITEM.LIST = ''         IF PKG$LIST<1,ON.FILE> # '' THEN           EXECUTE 'GET-LIST ':PKG$LIST.FILE<1,ON.FILE>:' ':PKG$LIST<1,ON.FILE> CAPTURING JUNK           LOOP             READNEXT ID ELSE EXIT             ITEM.LIST<-1> = ID           REPEAT         END ELSE           IF PKG$ITEMS<1,ON.FILE> = '*' THEN             EXECUTE 'SELECT ':PKG$FILES.DICT<1,ON.FILE>:' ':PKG$FILES<1,ON.FILE> CAPTURING JUNK             LOOP               READNEXT ID ELSE EXIT               ITEM.LIST<-1> = ID             REPEAT           END ELSE             ITEM.LIST = PKG$ITEMS<1,ON.FILE>             CONVERT SVM TO AM IN ITEM.LIST           END         END         IF PKG$FILES.OVR<1,ON.FILE> = 1 THEN FNAME = 'O:':FNAME         IF PKG$FILES.DICT<1,ON.FILE> = 'DICT' THEN           WRITE ITEM.LIST ON F.MAKE.FILE, "DICT_":FNAME         END ELSE           WRITE ITEM.LIST ON F.MAKE.FILE, "DATA_":FNAME         END         LOCATE FNAME IN FILE.LIST SETTING DUM ELSE           FILE.LIST<-1> = FNAME         END       NEXT ON.FILE       *       WRITE FILE.LIST ON F.MAKE.FILE, 'FILE.LIST'       *       PRE.COMMANDS = PKG$PRE.CMD       CONVERT VM TO AM IN PRE.COMMANDS       WRITE PRE.COMMANDS ON F.MAKE.FILE, 'PRE.COMMANDS'       POST.COMMANDS = PKG$POST.CMD       CONVERT VM TO AM IN POST.COMMANDS       POST.COMMANDS<-1> = COMPILE.COMMANDS       WRITE POST.COMMANDS ON F.MAKE.FILE, 'POST.COMMANDS'       *       CALL MVDB.BUILD.PACKAGE(PKG.ID,PATH,SIZE)       PKG$BUILD.TS = DATE() : TIME() "R%5"       PKG$BUILD.SEQ += 1       PKG$SIZE = SIZE       PKG$PATH = PATH       MATWRITE PKG.REC ON F.MVPKG.DATA, PKG.ID     END     GOSUB LOAD.PKGS  CASE action = 'addfile'    LOCATE 'file_name' IN CGI$VARS SETTING POS THEN      FILE.NAME = CGI$VALS<POS>    END ELSE FILE.NAME = ''    LOCATE 'file_dict' IN CGI$VARS SETTING POS THEN      FILE.DICT = CGI$VALS<POS>    END ELSE FILE.DICT = ''    LOCATE 'file_ovr' IN CGI$VARS SETTING POS THEN      FILE.OVR = CGI$VALS<POS>    END ELSE FILE.OVR = ''    LOCATE 'list_file' IN CGI$VARS SETTING POS THEN      LIST.FILE = CGI$VALS<POS>    END ELSE LIST.FILE = ''    LOCATE 'list_name' IN CGI$VARS SETTING POS THEN      LIST.NAME = CGI$VALS<POS>    END ELSE LIST.NAME = ''    LOCATE 'items' IN CGI$VARS SETTING POS THEN      ITEMS = CGI$VALS<POS>      CONVERT ',' TO SVM IN ITEMS    END ELSE ITEMS = ''    IF PKG.ID # '' AND FILE.NAME # '' AND ((LIST.NAME # '' AND LIST.FILE # '') OR ITEMS # '') THEN      MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID THEN        ADD.POS = DCOUNT(PKG$FILES<1>,VM) + 1        PKG$FILES<1,ADD.POS> = FILE.NAME        PKG$FILES.DICT<1,ADD.POS> = FILE.DICT        PKG$ITEMS<1,ADD.POS> = ITEMS        PKG$LIST<1,ADD.POS> = LIST.NAME        PKG$LIST.FILE<1,ADD.POS> = LIST.FILE        *PKG$FILES.OVR<1,ADD.POS> = FILE.OVR        DATA 'LIST ':FILE.DICT:' ':FILE.NAME:' TOTAL SIZE DET-SUPP'        IF LIST.NAME # '' THEN          EXECUTE 'SELECT ':LIST.FILE:' ':LIST.NAME CAPTURING OUTPUT        END ELSE IF ITEMS = "*" THEN          EXECUTE 'SELECT ':FILE.DICT:' ':FILE.NAME CAPTURING OUTPUT        END ELSE          ITEM.LIST = ITEMS          CALL SWAP(ITEM.LIST,SVM,'""')          EXECUTE 'SELECT ':FILE.DICT:' ':FILE.NAME:' "':ITEM.LIST:'"' CAPTURING OUTPUT        END        PKG$FILES.SIZE<1,ADD.POS> = TRIM(OUTPUT<7>) + 0        MATWRITE PKG.REC ON F.MVPKG.DATA, PKG.ID      END      GOSUB EDIT.PACKAGE          END ELSE      PRINT "Error 1"    END  CASE action = 'edit'    MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID THEN      GOSUB EDIT.PACKAGE    END  CASE action = 'save'    VAR.CNT = DCOUNT(CGI$VARS,AM)    MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID ELSE MAT PKG.REC = ''    *Clear these so we can rebuild them. We have the technology.    PKG$WIDGETS = ''    PKG$WIDGETS.OVR = ''    PKG$DASHBOARDS = ''    PKG$DASHBOARDS.OVR = ''    PKG$DASHBOARDS.ADD = ''    PKG$FILES.OVR = ''    PKG$WEB.IMAGE = ''    PKG$WEB.CSS = ''    PKG$WEB.JS = ''    PKG$WEB.ICON = ''    PKG$WEB.IMAGE.OVR = ''    PKG$WEB.CSS.OVR = ''    PKG$WEB.JS.OVR = ''    PKG$WEB.ICON.OVR = ''    WIDGET.ADD.POS = 1    DB.ADD.POS = 1    IMAGE.ADD.POS = 1    CSS.ADD.POS = 1    JS.ADD.POS = 1    ICON.ADD.POS = 1    FOR ON.VAR = 1 TO VAR.CNT      THIS.VAR = CGI$VARS<ON.VAR>      THIS.VAL = CGI$VALS<ON.VAR>      BEGIN CASE        CASE THIS.VAL = ''        *Get widgets        CASE THIS.VAR[1,11] = 'widget_ovr_'        CASE THIS.VAR[1,7] = 'widget_'          WIDGET.ID = THIS.VAR[8,99]          OVR = 'widget_ovr_':WIDGET.ID          OVR.FLAG = 0          LOCATE OVR IN CGI$VARS SETTING POS THEN            OVR.FLAG = 1          END          PKG$WIDGETS<1,WIDGET.ADD.POS> = WIDGET.ID          PKG$WIDGETS.OVR<1,WIDGET.ADD.POS> = OVR.FLAG          WIDGET.ADD.POS += 1        *Get Dashboards                  CASE THIS.VAR[1,10] = 'dashboard_'          DB.ID = THIS.VAR[11,99]          OVR = 'db_ovr_':DB.ID          ADD = 'db_add_':DB.ID          OVR.FLAG = 0; ADD.FLAG = 0          LOCATE OVR IN CGI$VARS SETTING POS THEN            OVR.FLAG = 1          END          LOCATE ADD IN CGI$VARS SETTING POS THEN            ADD.FLAG = 1          END          PKG$DASHBOARDS<1,DB.ADD.POS> = DB.ID          PKG$DASHBOARDS.OVR<1,DB.ADD.POS> = OVR.FLAG          PKG$DASHBOARDS.ADD<1,DB.ADD.POS> = ADD.FLAG          DB.ADD.POS += 1        *Get file overwite flags        CASE THIS.VAR[1,10] = 'files_ovr_'          OVR.POS = FIELD(THIS.VAR,'_',3)          PKG$FILES.OVR<1,OVR.POS> = 1        *Get web files        CASE THIS.VAR = 'web_images'          CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)          PKG$WEB.IMAGE = TRIM(THIS.VAL,VM)        CASE THIS.VAR = 'web_icons'          CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)          PKG$WEB.ICON = TRIM(THIS.VAL,VM)        CASE THIS.VAR = 'web_css'          CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)          PKG$WEB.CSS = TRIM(THIS.VAL,VM)        CASE THIS.VAR = 'web_js'          CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)          PKG$WEB.JS = TRIM(THIS.VAL,VM)      END CASE    NEXT ON.VAR    *Get settings    LOCATE 'pkg_pre_cmd' IN CGI$VARS SETTING POS THEN      PKG$PRE.CMD = CGI$VALS<POS>      CALL SWAP(PKG$PRE.CMD,CHAR(13):CHAR(10),VM)    END ELSE PKG$PRE.CMD = ''    LOCATE 'pkg_post_cmd' IN CGI$VARS SETTING POS THEN      PKG$POST.CMD = CGI$VALS<POS>      CALL SWAP(PKG$POST.CMD,CHAR(13):CHAR(10),VM)          END ELSE PKG$POST.CMD = ''    LOCATE 'compile_opt' IN CGI$VARS SETTING POS THEN      PKG$COMPILE.OPT = 1    END ELSE PKG$COMPILE.OPT = 0    LOCATE 'flash_opt' IN CGI$VARS SETTING POS THEN      PKG$FLASH.OPT = 1    END ELSE PKG$FLASH.OPT = 1    LOCATE 'access_opt' IN CGI$VARS SETTING POS THEN      PKG$ACCESS.OPT = 1    END ELSE PKG$ACCESS.OPT = 0    LOCATE 'pkg_name' IN CGI$VARS SETTING POS THEN      PKG$NAME = CGI$VALS<POS>    END    LOCATE 'pkg_desc' IN CGI$VARS SETTING POS THEN      PKG$DESC = CGI$VALS<POS>    END    MATWRITE PKG.REC ON F.MVPKG.DATA, PKG.ID    GOSUB LOAD.PKGS  CASE action = 'delete'    DELETE F.MVPKG.DATA, PKG.ID    EXECUTE 'DELETE-FILE MAKE.FILE,':PKG.ID CAPTURING JUNK    GOSUB LOAD.PKGS  CASE 1    GOSUB LOAD.PKGSEND CASE*READ ADMIN.TEMPLATE FROM F.WEB.FORMS, "pkg_list_template.html" ELSE ADMIN.TEMPLATE = "pkg_list_template.html not found."CALL SWAP(ADMIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)HEADER = '<div id="dashboard_nav">'HEADER := '<ol class="dashboard_list">'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=users">Users</a></li>'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets">Widgets</a></li>'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=dashboards">Dashboards</a></li>'OPEN 'RSS.BP' TO F.RSS.BP THEN  HEADER := '<li><a href="':CGI$PATH:'/RSS.MAINT">RSS Feed Maintenance</a></li>'ENDHEADER := '<li class="db_active"><a href="':CGI$PATH:'/RSS.MAINT">Package Manager</a></li>'HEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN">Return to Dashboard</a></li>'HEADER := '</ol>'HEADER := '</div>'CALL SWAP(ADMIN.TEMPLATE,'<!-- HEADER -->',HEADER)FOOTER = ''CALL SWAP(ADMIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_MAIN -->',HTML)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_THEME -->',SITE$THEME)CALL WEB.SEND(ADMIN.TEMPLATE)STOP*LOAD.PKGS:*HTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="6"><a href="':CGI$PATH:'/MVPKG.MAIN?action=editpkg" class="add-pkg">Add a Package</a></td></tr>'HTML<-1> = '<tr><th>Package</th><th>Last Build</th><th>Size</th><th>Build#</th><th>Description</th><th>Action</th></tr>'EXECUTE "SSELECT MVPKG.DATA BY NAME" CAPTURING JUNKLOOP  READNEXT FID ELSE EXIT  MATREAD PKG.REC FROM F.MVPKG.DATA, FID ELSE CONTINUE  IF PKG$SIZE # '' THEN    BEGIN CASE      CASE PKG$SIZE >= PWR(10,9)        PKG$SIZE = OCONV(PKG$SIZE,"MD29"):' GB'            CASE PKG$SIZE >= PWR(10,6)        PKG$SIZE = OCONV(PKG$SIZE,"MD26"):' MB'            CASE PKG$SIZE >= PWR(10,3)        PKG$SIZE = OCONV(PKG$SIZE,"MD23"):' kB'      CASE 1        PKG$SIZE := ' bytes'    END CASE  END  BUILD.DATE = OCONV(PKG$BUILD.TS[1,5],"D2/")  BUILD.TIME = OCONV(PKG$BUILD.TS[6,5],"MTS")  ROW = '<tr><td>':PKG$NAME:'</td><td>':BUILD.DATE:' ':BUILD.TIME:'</td>'  ROW := '<td>':PKG$SIZE:'</td><td>':PKG$BUILD.SEQ:'</td><td>':PKG$DESC:'</td>'  ROW := '<td><a href="/dbc/MVPKG.MAIN?action=edit&pkg_id=':FID:'"><img src="/db/icons/brick_edit.png" title="Edit"></a> '  ROW := \<a onClick="return confirm('DELETE: Are you sure?');" href="/dbc/MVPKG.MAIN?action=delete&pkg_id=\:FID:\"><img src="/db/icons/brick_delete.png" title="Delete"></a> \  ROW := '<a href="/dbc/MVPKG.MAIN?action=rebuild&pkg_id=':FID:'"><img src="/db/icons/brick_go.png" title="Rebuild"></a>'  ROW := '<a href="/dbc/MVPKG.MAIN?action=download&pkg_id=':FID:'"><img src="/db/icons/arrow_down.png" title="Download"></a></td></tr>'  HTML<-1> = ROWREPEATHTML<-1> = '<tr><td colspan="6"><a href="':CGI$PATH:'/MVPKG.MAIN?action=editpkg" class="add-pkg">Add a Package</a></td></tr>'HTML<-1> = '</table>'RETURN*EDIT.PACKAGE:CALL MVDB.SUB.WIDGET.LIST(WIDGET.LIST)HTML<-1> = '<form action="':CGI$PATH:'/MVPKG.MAIN" method="POST">'HTML<-1> = 'Package Name: <input type="text" name="pkg_name" value="':PKG$NAME:'"><br/>'HTML<-1> = 'Description: <input type="text" name="pkg_desc" value="':PKG$DESC:'"><br/>'HTML<-1> = '<input type="hidden" name="action" value="save">'HTML<-1> = '<input type="hidden" name="pkg_id" value="':PKG.ID:'">'HTML<-1> = '<div id="submit"><input class="ui-state-default ui-corner-all" type="submit" value="Save" /></div> 'HTML<-1> = '<div id="tabs"> 'HTML<-1> = '<ul><li><a href="#tabs-1">Widgets</a></li>'HTML<-1> = '<li><a href="#tabs-2">Dashboards</a></li>'HTML<-1> = '<li><a href="#tabs-3">File Items</a></li>'HTML<-1> = '<li><a href="#tabs-4">Web Files</a></li>'HTML<-1> = '<li><a href="#tabs-5">Settings</a></li></ul>'HTML<-1> = '<div id="tabs-1" class="tab_content">'*HTML<-1> = '<table width="100%">'HTML<-1> = '<tr><th>Selected</th><th>Widget</th><th>Type</th><th>Subroutine</th><th>Overwrite</th></tr>'WIDGET.CNT = DCOUNT(WIDGET.LIST<1>,VM)FOR W.POS = 1 TO WIDGET.CNT  IF WIDGET.LIST<7,W.POS> = 1 THEN CLASS = 'error' ELSE CLASS = 'p'  LOCATE WIDGET.LIST<1,W.POS> IN PKG$WIDGETS<1> SETTING POS THEN    CHECKED = 'checked'  END ELSE CHECKED = ''  HTML<-1> = '<tr class="':CLASS:'"><td><input type="checkbox" name="widget_':WIDGET.LIST<1,W.POS>:'" value="checked" ':CHECKED:'></td>'  HTML := '<td>':WIDGET.LIST<1,W.POS>:'</td><td>':WIDGET.LIST<4,W.POS>:'</td><td>':WIDGET.LIST<3,W.POS>:'</td>'  IF PKG$WIDGETS.OVR<1,POS> = 1 THEN    CHECKED = 'checked'  END ELSE CHECKED = ''  HTML := '<td><input type="checkbox" name="widget_ovr_':WIDGET.LIST<1,W.POS>:'" value="checked" ':CHECKED:'></td></tr>'NEXT W.POSHTML<-1> = '</table>'*EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNKHTML<-1> = '</div><!--#tabs-1-->'HTML<-1> = '<div id="tabs-2" class="tab_content"> 'HTML<-1> = '<table width="100%">'HTML<-1> = '<tr><th>Selected</th><th>Dashboard ID</th><th>Description</th><th>Include Widgets</th><th>Overwrite</th></tr>'*DB.POS = 1LOOP  READNEXT ID ELSE EXIT  MATREAD DB.ITEM FROM F.MVDB.DEFS, ID ELSE MAT DB.ITEM = ''  HTML<-1> = '<tr>'  LOCATE ID IN PKG$DASHBOARDS<1> SETTING POS THEN    CHECKED = 'checked'  END ELSE CHECKED = ''  HTML<-1> = '<td><input type="checkbox" name="dashboard_':ID:'" value="checked" ':CHECKED:'></td>'        HTML<-1> = '<td>':ID:'</td>'  HTML<-1> = '<td>':DB.DESC:'</td>'  ADD.CHECKED = ''; OVR.CHECKED = ''  IF CHECKED # '' THEN    IF PKG$DASHBOARDS.ADD<1,POS> = 1 THEN      ADD.CHECKED = 'checked'    END    IF PKG$DASHBOARDS.OVR<1,POS> = 1 THEN      OVR.CHECKED = 'checked'    END  END  *HTML<-1> = '<td><input type="checkbox" name="db_add_':ID:'" value="checked" ':ADD.CHECKED:'></td>'  HTML<-1> = '<td><input type="button" value="Add Widgets to Package"></td>'  HTML<-1> = '<td><input type="checkbox" name="db_ovr_':ID:'" value="checked" ':OVR.CHECKED:'></td>'  HTML<-1> = '</tr>'  DB.POS += 1REPEATHTML<-1> = '</table>'*HTML<-1> = '</div><!--#tabs-2-->'HTML<-1> = '<div id="tabs-3" class="tab_content">'HTML<-1> = '<table width="100%">'HTML<-1> = '<tr><td colspan="5"><a href="/dbc/MVPKG.MAIN?action=addfile" class="add-file">Add a File</a></td></tr>'    HTML<-1> = '<tr><th>File Name</th><th>Items/List</th><th>Size</th><th>Overwrite</th><th>Action</th></tr>'FILE.CNT = DCOUNT(PKG$FILES<1>,VM)FOR ON.FILE = 1 TO FILE.CNT  FILE.ERR = 0; ITEM.ERR = 0  OPEN PKG$FILES.DICT<1,ON.FILE>,PKG$FILES<1,ON.FILE> TO PKG.FILEVAR ELSE FILE.ERR = 1  HTML<-1> = '<tr><td '  IF FILE.ERR THEN HTML := 'class="error"'  HTML := '>':PKG$FILES.DICT<1,ON.FILE>:' ':PKG$FILES<1,ON.FILE>:'</td>'  IF PKG$LIST<1,ON.FILE> # '' THEN    OPEN PKG$LIST.FILE<1,ON.FILE> TO LISTFILE THEN      READV TST FROM LISTFILE, PKG$LIST<1,ON.FILE>, 1 ELSE        ITEM.ERR = 1      END    END ELSE ITEM.ERR = 1    HTML<-1> = '<td '    IF ITEM.ERR THEN HTML := 'class="error"'    HTML := '>List: '    IF PKG$LIST.FILE<1,ON.FILE> # '' THEN      HTML := PKG$LIST.FILE:', '    END    HTML := PKG$LIST<1,ON.FILE>:'</td>'  END ELSE    IF NOT(FILE.ERR = 1) THEN      IF PKG$ITEMS<1,ON.FILE> # '*' THEN        ITEM.CNT = DCOUNT(PKG$ITEMS<1,ON.FILE>,SVM)        FOR ON.ITEM = 1 TO ITEM.CNT          READV TST FROM PKG.FILEVAR, PKG$ITEMS<1,ON.FILE,ON.ITEM>, 1 ELSE            ITEM.ERR = 1          END        NEXT ON.ITEM      END    END ELSE ITEM.ERR = 1    SHOW.ITEMS = PKG$ITEMS<1,ON.FILE>    CONVERT SVM TO ',' IN SHOW.ITEMS    IF LEN(SHOW.ITEMS) > 20 THEN      SHOW.ITEMS = SHOW.ITEMS[1,20]:'...'    END    HTML<-1> = '<td '    IF ITEM.ERR THEN HTML := 'class="error"'    HTML := '>':SHOW.ITEMS:'</td>'  END  SHOW.SIZE = PKG$FILES.SIZE<1,ON.FILE>  IF SHOW.SIZE # '' THEN    BEGIN CASE      CASE SHOW.SIZE >= PWR(10,9)        SHOW.SIZE = OCONV(SHOW.SIZE,"MD29"):' GB'            CASE SHOW.SIZE >= PWR(10,6)        SHOW.SIZE = OCONV(SHOW.SIZE,"MD26"):' MB'            CASE SHOW.SIZE >= PWR(10,3)        SHOW.SIZE = OCONV(SHOW.SIZE,"MD23"):' kB'      CASE 1        SHOW.SIZE := ' bytes'    END CASE  END    HTML<-1> = '<td>':SHOW.SIZE:'</td>'  IF PKG$FILES.OVR<1,ON.FILE> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''  HTML<-1> = '<td><input type="checkbox" name="files_ovr_':ON.FILE:'" ':CHECKED:'></td>'  HTML<-1> = \<td><a href="javascript:editFile('\:PKG$FILES.DICT<1,ON.FILE>:',':PKG$FILES<1,ON.FILE>:',':PKG$LIST.FILE<1,ON.FILE>:',':PKG$LIST<1,ON.FILE>:',':PKG$ITEMS<1,ON.FILE>:\');"><img title="Edit" class="icon" src="/db/icons/pencil.png"></a>\  HTML<-1> = \<a href="javascript:deleteFile('\:ON.FILE:\')"><img title="Delete" class="icon" src="/db/icons/delete.png"></a>\  HTML<-1> = '</td></tr>'NEXT ON.FILEHTML<-1> = '<tr><td colspan="5"><a href="/dbc/MVPKG.MAIN?action=addfile" class="add-file">Add a File</a></td></tr></table>'*HTML<-1> = '</div><!--#tabs-3-->'HTML<-1> = '<div id="tabs-4" class="tab_content">'HTML<-1> = '<div id="accordion">'HTML<-1> = '<h3><a href="#">Images</a></h3><div>'IMAGE.CNT = DCOUNT(PKG$WEB.IMAGE<1>,VM)HTML<-1> = '<textarea rows="8" cols="40" name="web_images">'FOR ON.IMAGE = 1 TO IMAGE.CNT  IF PKG$WEB.IMAGE.OVR<1,ON.IMAGE> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''  *HTML<-1> = '<li><input type="checkbox" name="image_ovr_':ON.IMAGE:'" value="1" ':CHECKED:'><input type="text" name="image_':ON.IMAGE:'" value="':PKG$WEB.IMAGE<1,ON.IMAGE>:'"></li>'  HTML<-1> = PKG$WEB.IMAGE<1,ON.IMAGE>NEXT ON.IMAGEHTML<-1> = '</textarea></div>'HTML<-1> = '<h3><a href="#">CSS</a></h3><div>'CSS.CNT = DCOUNT(PKG$WEB.CSS<1>,VM)HTML<-1> = '<textarea rows="8" cols="40" name="web_css">'FOR ON.CSS = 1 TO CSS.CNT  IF PKG$WEB.CSS.OVR<1,ON.CSS> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''  *HTML<-1> = '<li><input type="checkbox" name="css_ovr_':ON.CSS:'" value="checked" ':CHECKED:'><input type="text" name="css_':ON.CSS:'" value="':PKG$WEB.CSS<1,ON.CSS>:'"></li>'  HTML<-1> = PKG$WEB.CSS<1,ON.CSS>NEXT ON.CSSHTML<-1> = '</textarea></div>'HTML<-1> = '<h3><a href="#">Javascript</a></h3><div>'JS.CNT = DCOUNT(PKG$WEB.JS<1>,VM)HTML<-1> = '<textarea rows="8" cols="40" name="web_js">'FOR ON.JS = 1 TO JS.CNT  IF PKG$WEB.JS.OVR<1,ON.JS> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''  *HTML<-1> = '<li><input type="checkbox" name="js_ovr_':ON.JS:'" value="checked" ':CHECKED:'><input type="text" name="js_':ON.JS:'" value="':PKG$WEB.JS<1,ON.JS>:'"></li>'  HTML<-1> = PKG$WEB.JS<1,ON.JS>NEXT ON.JSHTML<-1> = '</textarea></div>'HTML<-1> = '<h3><a href="#">Icons</a></h3><div>'ICON.CNT = DCOUNT(PKG$WEB.ICON<1>,VM)HTML<-1> = '<textarea rows="8" cols="40" name="web_icons">'FOR ON.ICON = 1 TO ICON.CNT  IF PKG$WEB.ICON.OVR<1,ON.ICON> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''  *HTML<-1> = '<li><input type="checkbox" name="icon_ovr_':ON.ICON:'" value="checked" ':CHECKED:'><input type="text" name="icon_':ON.ICON:'" value="':PKG$WEB.ICON<1,ON.ICON>:'"></li>'  HTML<-1> = PKG$WEB.ICON<1,ON.ICON>NEXT ON.ICONHTML<-1> = '</textarea></div>'HTML<-1> = '</div>'*HTML<-1> = '</div><!--#tabs-4-->'HTML<-1> = '<div id="tabs-5" class="tab_content">'*HTML<-1> = '<b>Settings</b>'HTML<-1> = '<ul><li>Pre-Install Commands</li>'CALL SWAP(PKG$PRE.CMD,VM,CHAR(13):CHAR(10))HTML<-1> = '<li><textarea rows="5" cols="50" name="pkg_pre_cmd">':PKG$PRE.CMD:'</textarea></li>'HTML<-1> = '<li>Post-Install Commands</li>'CALL SWAP(PKG$POST.CMD,VM,CHAR(13):CHAR(10))    HTML<-1> = '<li><textarea rows="5" cols="50" name="pkg_post_cmd">':PKG$POST.CMD:'</textarea></li>'IF PKG$COMPILE.OPT = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''HTML<-1> = '<li><input type="checkbox" name="compile_opt" value="checked" ':CHECKED:'> Compile widget subroutines</li>'IF PKG$FLASH.OPT = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''    HTML<-1> = '<li><input type="checkbox" name="flash_opt" value="checked" ':CHECKED:'> Flash compile widget subroutines</li>'IF PKG$ACCESS.OPT = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''HTML<-1> = '<li><input type="checkbox" name="access_opt" value="checked" ':CHECKED:'> Include dashboard and widget user access settings</li>'HTML<-1> = '</ul></div></div></form>'RETURN    000DEEINIT.WWW0c2*********************************************************************** Copyright (C) 2004 Sierra Bravo Corporation, All Rights Reserved** This software is the property of Sierra Bravo Corporation and may* not be duplicated or modified without the express written permission* of Sierra Bravo Corporation.** Written By   : Michael Derheim, Sierra Bravo Corporation* Description  : Initialize the standard WWW includes. Parse cookies, etc.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause**********************************************************************************************************************************************                                                                    *  * 10-25-16 Peter Schellenbach                                        **                                                                    *  ***       THIS PROGRAM IS OBSOLETE AND IS NO LONGER USED! ***        **                                                                    *  **********************************************************************************************************************************************#MAKE# RL $OPTIONS D3*INCLUDE WBPD WWW.INCLUDE*OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, 'WEB.SESSION'*MAT WWW.INFO = ""**PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ''PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE() ; *PJS 06-12-15**CGI$UNIQUE.ID = FIELD( TCL.LINE, ' ', 2)** Populate the vars and vals*CALL WDB.VARS(VARS,VALS)CGI$VARS = VARSCGI$VALS = VALS*LOCATE "APPSVR_ID" IN CGI$VARS SETTING POS THEN  CGI$APPSVR.ID = CGI$VALS<POS>  CGI$VARS = DELETE( CGI$VARS, POS, 0, 0 )  CGI$VALS = DELETE( CGI$VALS, POS, 0, 0 )END ELSE  CGI$APPSVR.ID = ""END** How many active users are online?*SELECT F.WEB.SESSIONUSER.COUNT = 0LOOP  READNEXT WSID ELSE EXIT  READ SREC FROM F.WEB.SESSION, WSID ELSE CONTINUE  LOCATE "userid" IN SREC<1> SETTING UPOS THEN USER.COUNT += 1REPEATPRINT "Client-Count: ":USER.COUNT** Load the Cookie variables and valuiesLOCATE 'HTTP_COOKIE' IN VARS SETTING POS THEN  CSTRING = VALS<POS>END ELSE CSTRING = ''*CONVERT ';' TO @AM IN CSTRINGNUM.COOKIES = DCOUNT(CSTRING, @AM)FOR Y = 1 TO NUM.COOKIES  CGI$CVARS<Y> = TRIM(FIELD(CSTRING<Y>,'=',1))  CGI$CVALS<Y> = CSTRING<Y>[(1+INDEX(CSTRING<Y>,'=',1)),99999]NEXT Y* Load the session ID if there is oneCALL GET.SESSION.ID( SESSION$ID, VARS, VALS )IF (SESSION$ID = '') THEN  CALL CREATE.SESSION(SESSION$ID)  CALL SET.COOKIE("sessionid=":SESSION$ID)ENDSESSION$GLOBAL.DEBUG = 0SESSION$DEBUG.TEXT = ''* Clear the out buffer and set some generic varsSESSION$CONTENT.SENT = 0OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, "WEB.SESSION"OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS'*LOCATE "HTTP_HOST" IN CGI$VARS SETTING POS THEN  CGI$SERVER.NAME = CGI$VALS<POS>END ELSE CGI$SERVER.NAME = ""LOCATE "SERVER_PORT" IN CGI$VARS SETTING POS THEN  CGI$SERVER.PORT = CGI$VALS<POS>END ELSE CGI$SERVER.PORT = ""IF CGI$SERVER.PORT = "" OR CGI$SERVER.PORT = "0" THEN  OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL THEN    READV TCP.PORT FROM F.MVDB.CONTROL, 'MVDB.SETTINGS', 4 ELSE TCP.PORT = ""  END  CGI$SERVER.PORT = TCP.PORTENDIF CGI$SERVER.PORT # "" THEN CGI$SERVER.NAME := ":":CGI$SERVER.PORTLOCATE "SIMPLEWEB_HANDLER" IN CGI$VARS SETTING POS THEN  CGI$PATH = CGI$VALS<POS>  IF CGI$PATH[1,1] # "/" THEN CGI$PATH = "/":CGI$PATHEND ELSE CGI$PATH = "/dbc"STOP*END006083MVDB.WEB.ED0c2** Copyright (C) 2009 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: August 6, 2009* Description: Web Editor for Bravo Dashboard** 3-9-15 TFP CHANGE FILENAME TO FILENAME.VAR TO PREVENT CONFLICT WITH filename* Modified by Peter Schellenbach of Zumasys 11-02-16*  Added GLOBAL.INFO(100) = 1 before each of the STOP statements (except STOP due to errors)*  to indicate successful execution of this routine. Otherwise the controller program*  (MVDB.INIT) thinks an error has occurred and appends some debug info to the HTML output.**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGET.TYPES***OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS' ;* this is in /WWW/ COMMON and is opened by MVDB.INITOPEN '','MV.WEB.ED.ARCHIVE' TO F.ED.ARCHIVE THEN  ARCHIVE = 1END ELSE ARCHIVE = 0OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'READ ACCTS FROM F.MVDB.CONTROL, "ED.ACCOUNTS" ELSE ACCTS = ""*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$CHARSET      TO SITE$SETTINGS(9)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDENDIF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*CALL GET.SESSION.VAR("adminauth",adminauth)IF adminauth # 1 THEN  FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'  FORM := '</head><body><p>Administrative priviledges are required. '  FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'  CALL WEB.SEND(FORM)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOP*  READ LOGIN.PAGE FROM F.WEB.FORMS, "admin_login.html" ELSE LOGIN.PAGE = "admin_login.html not found."*  CALL SWAP(LOGIN.PAGE,'<!-- SITE_LOGO -->',SITE.LOGO)  *  GLOBAL.INFO(100) = 1 ;* Intentional stop*  CALL WEB.SEND(LOGIN.PAGE)*  STOPEND*EDIT.SCRIPTS = "NEW_PROGRAM_DIALOG = 0;":CHAR(10) ;* This will get overwritten later, if appropriateESC.APOS = "\'"HMESSAGE = ""FMESSAGE = ""record = ""LOCATE "ed_file" IN CGI$VARS SETTING POS THEN  filename = CGI$VALS<POS>END ELSE  filename = ""  HMESSAGE<-1> = "No filename specified."ENDLOCATE "ed_item" IN CGI$VARS SETTING POS THEN  item = CGI$VALS<POS>END ELSE  item = ""  HMESSAGE<-1> = "No item name specified."ENDLOCATE "ed_acct" IN CGI$VARS SETTING POS THEN  acct = CGI$VALS<POS>END ELSE acct = ""*LOCATE "action" IN CGI$VARS SETTING POS THEN  action = CGI$VALS<POS>END ELSE action = "open"IF action = "code_template" THEN  LOCATE "template" IN CGI$VARS SETTING POS THEN    template = CGI$VALS<POS>  END ELSE template = ""  OPEN '','MVDB.SUB.TEMPLATES' TO F.MVDB.SUB.TEMPLATES THEN    orig.template = template    LOOP      READ TEMPLATE.TEXT FROM F.MVDB.SUB.TEMPLATES, template ELSE TEMPLATE.TEXT = ""      IF TEMPLATE.TEXT = "" THEN TEMPLATE.TEXT = "No template for ":template    WHILE FIELD( TEMPLATE.TEXT, ' ', 1 ) = "USE" DO      template = FIELD( TEMPLATE.TEXT, ' ', 2 )    REPEAT    CALL SWAP(TEMPLATE.TEXT,'W$TYPE = "%TYPE%"','W$TYPE = "':orig.template:'"')  END ELSE    TEMPLATE.TEXT = "Unable to open MVDB.SUB.TEMPLATES"  END  SESSION$CONTENT.SENT = 1  CRT "Content-Type: text/html"  CRT  CALL WEB.SEND(TEMPLATE.TEXT)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPENDLOCATE "record" IN CGI$VARS SETTING POS THEN  record = CGI$VALS<POS>  CONVERT CHAR(10) TO @AM IN record  CONVERT CHAR(13) TO "" IN recordENDIF action = "compile" OR action = "save" THEN  READ HTML FROM F.WEB.FORMS, "ed_output.html" ELSE HTML = "Unable to read ed_output.html"  QUIET.MODE = 1END ELSE  READ HTML FROM F.WEB.FORMS, "ed_template.html" ELSE HTML = "Unable to read ed_template.html"  QUIET.MODE = 0ENDCALL SWAP(HTML,'<!--CHARACTER_SET-->',SITE$CHARSET)LOCATE "height" IN CGI$VARS SETTING POS THEN  height = CGI$VALS<POS>  CALL PUT.SESSION.VAR("ed_height",height)END ELSE  CALL GET.SESSION.VAR("ed_height",height)ENDOUT.OF.ACCOUNT = 0myacct = OCONV( 'a', 'U50BB')IF acct = myacct THEN acct = ""IF acct # "" AND HMESSAGE = "" THEN  password = ""  OPEN '','MDS' TO F.MDS THEN    READ APTR FROM F.MDS, acct ELSE APTR = ""    IF APTR<1>[1,1] = "D" OR APTR<1>[1,1] = "Q" THEN      IF APTR<7> # "" THEN ;* This account has a password        LOCATE acct IN ACCTS<1> SETTING APOS THEN          password = ACCTS<2,APOS>        END ELSE          HMESSAGE<-1> = "Account ":acct:" requies a password. Not found in MVDB.CONTROL, ED.ACCOUNTS"        END      END    END ELSE      HMESSAGE<-1> = "Account ":acct:" is not valid."    END  END ELSE    HMESSAGE<-1> = "Unable to open MDS file."  END  IF HMESSAGE = "" THEN    DATA password    EXECUTE "LOGTO ":acct:" (F" CAPTURING LOGTO.OUT ;* Switch over to specified account    IF LOGTO.OUT = "" THEN      OUT.OF.ACCOUNT = 1    END ELSE      HMESSAGE<-1> = "Error: ":LOGTO.OUT    END  ENDENDIF HMESSAGE # "" THEN  IF filename = "" AND item = "" THEN    HMESSAGE = ""    CALL SWAP(HTML,'<!-- SYNTAX -->',"")    CALL SWAP(HTML,'<!-- WINDOW_HEIGHT -->',"")    CALL SWAP(HTML,'<!-- FILE -->',"")    CALL SWAP(HTML,'<!-- ITEM -->',"")    CALL SWAP(HTML,'<!-- BODY -->',"")    CALL SWAP(HTML,'<!-- LAST_COMPILE -->',"")    CALL SWAP(HTML,'<!-- COMPILE_OUTPUT -->',"")    CALL SWAP(HTML,'<!-- COMPILE_ERRLINE -->',"")    CALL SWAP(HTML,'<!-- ED_CONTENT -->',"''")    CALL SWAP(HTML,'<!-- EA_CALLS_CONTENT -->',"")    CALL SWAP(HTML,'<!-- EA_INCLUDES_CONTENT -->',"")    CALL SWAP(HTML,'<!-- EA_FILES_CONTENT -->',"")    CALL SWAP(HTML,'<!-- EA_ARCHIVE_CONTENT -->',"")    CALL SWAP(HTML,'<!-- NUM_OF_CALLS -->',0)    CALL SWAP(HTML,'<!-- NUM_OF_INCLUDES -->',0)    CALL SWAP(HTML,'<!-- NUM_OF_FILES -->',0)    CALL SWAP(HTML,'<!-- NUM_OF_ARCHIVES -->',0)    CALL SWAP(HTML,'<!-- ED_SCRIPTS -->',"")    CALL SWAP(HTML,'<!-- ED_INIT_SCRIPT -->',"openEditDialog();")    CALL WEB.SEND(HTML)  END ELSE    GOSUB ADD.MESSAGE    CALL WEB.SEND(HTML)  END  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPEND* This will be the master dictionary in the appropriate account.OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'ENDBASIC.SUB = 0OPEN filename TO F.FILE THEN  IF record # "" AND action # "open" THEN    ELINE = DCOUNT( record, @AM )    LOOP WHILE ELINE > 1 AND record<ELINE> = "" DO      record = DELETE( record, ELINE, 0, 0 )      ELINE -= 1    REPEAT    IF ARCHIVE AND filename # "MV.WEB.ED.ARCHIVE" THEN      READ oldrec FROM F.FILE, item THEN        IF oldrec # record THEN          NOW = TIME()          TD.STAMP = NOW:"*":DATE()          NOW2 = NOW "R%2"          NOW2 = MOD(NOW2,16) ;* Get it down to a hex digit          IF acct = "" THEN USE.ACCT = myacct ELSE USE.ACCT = acct          ARCHIVE.ID = USE.ACCT:"*":filename:"*":item:"*":OCONV(NOW2,'MCDX')          oldrec = INSERT( oldrec, 1, 0, 0, TD.STAMP )          WRITE oldrec ON F.ED.ARCHIVE, ARCHIVE.ID        END      END    END    WRITE record ON F.FILE, item    IF record[1,3] = "SUB" THEN BASIC.SUB = 1    IF QUIET.MODE THEN      record = ""    END ELSE      HMESSAGE<-1> = item:" saved, ":LEN(record):" bytes."    END  END ELSE    READ record FROM F.FILE, item THEN      HMESSAGE<-1> = item:" opened, ":LEN(record):" bytes."    END ELSE      record = ""      HMESSAGE<-1> = "New Item: ":item    END    IF record = "" THEN      NEW.ITEM.FLAG = 1      BEGIN CASE        CASE filename = "RSS.BP"          record = 'SUBROUTINE ':item          record<-1> = '*'          record<-1> = '* RSS Feed'          record<-1> = '*'          record<-1> = 'INCLUDE RSS.BP RSS.DATA.INC'          record<-1> = '*'          IF INDEX(item,'.SEL',1) THEN            record<-1> = '* EXECUTE SELECT - Create active select list'            record<-1> = 'RETURN'          END ELSE IF INDEX(item,'.ITEM',1) THEN            record<-1> = 'RSS$TITLE = "" ;* Title text'            record<-1> = 'RSS$LINK = "" ;* Link to URL for full-view (if applicable)'            record<-1> = 'RSS$AUTHOR = "" ;* Author'            record<-1> = 'RSS$DATE = "" ;* Date of feed item (internal)'            record<-1> = 'RSS$TIME = "" ;* Time of feed item (internal)'            record<-1> = 'RSS$DESCRIPTION = "" ;* Feed description text (HTML)'            record<-1> = '*'            record<-1> = '* Programming to fill in the above values goes here.'            record<-1> = '*'            record<-1> = 'RETURN'          END        CASE filename = 'MVDB.SUBS'          EDIT.SCRIPTS = "NEW_PROGRAM_DIALOG = 1;":CHAR(10)          EDIT.SCRIPTS := 'widgetTypes = new Array();':CHAR(10)          OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES THEN            EXECUTE 'SSELECT MVDB.WIDGET.TYPES BY GROUP BY HANDLER WITH INACTIVE # "1"' CAPTURING JUNK            LOOP              READNEXT TYPE.ID ELSE EXIT              MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, TYPE.ID THEN                CALL SWAP(WT$DESC,'"','\"')                CLASS.NAME = FIELD(WT$ICON,'.',1)                CONVERT "_" TO "-" IN CLASS.NAME                EDIT.SCRIPTS := 'widgetTypes["':TYPE.ID:'"] = new Array("':WT$DESC:'","':CLASS.NAME:'");':CHAR(10)              END            REPEAT          END          record = 'SUBROUTINE ':item          record<-1> = '*'          record<-1> = '* Dashboard Widget'          record<-1> = '*'          record<-1> = 'INCLUDE WBPD MVDB.INCLUDE'          record<-1> = '*'        CASE 1 ; NULL      END CASE    END  ENDEND ELSE  HMESSAGE<-1> = "Unable to open file '":filename:"'"  GOSUB ADD.MESSAGE  CALL WEB.SEND(HTML)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPEND*OUTPUT = "" ;* Compiler outputCOMP.ERRLINE = ""BEGIN CASE  CASE HMESSAGE # "" ; NULL  CASE action = "compile"    READV BASIC.TEMPLATE FROM F.MVDB.CONTROL, "COMPILE.SETUP", 1 ELSE BASIC.TEMPLATE = ""    IF BASIC.TEMPLATE # "" THEN      CMD = BASIC.TEMPLATE      CALL SWAP(CMD,"%FILENAME%",filename)      CALL SWAP(CMD,"%ITEMNAME%",item)    END ELSE      CMD = "BASIC ":filename:" ":item    END    EXECUTE CMD CAPTURING CMPOUTPUT    OUTPUT<-1> = CMD    OUTPUT<-1> = CMPOUTPUT    * If the compile failed, find the first error line #    CO = 1    LOOP UNTIL CO > DCOUNT( CMPOUTPUT, @AM ) DO      LN = FIELD(TRIM(CMPOUTPUT<CO>),' ',1)      IF LN MATCHES "4N" THEN        COMP.ERRLINE = (LN+0)        EXIT      END ELSE CO += 1    REPEAT    IF BASIC.SUB = 1 THEN      CMD = "CATALOG ":filename:" ":item      EXECUTE CMD CAPTURING CATOUTPUT      OUTPUT<-1> = CMD      OUTPUT<-1> = CATOUTPUT    END  CASE action = "save"  CASE 1    NULLEND CASE*SUBLIST = ''INCLIST = ''FILELIST = ''IF record # "" THEN  GOSUB BUILD.SUBLIST  GOSUB BUILD.INCLIST  GOSUB BUILD.FILELISTENDIF filename = "WEB.FORMS" THEN SYNTAX = "html" ELSE SYNTAX = "basic"** Last compile date/time?*CSTRING = ""IF SYNTAX = "basic" THEN  EXECUTE "SELECT DICT ":filename:" '":item:"' C/DATE C/TIME" CAPTURING JUNK  READNEXT CDATE ELSE CDATE = ""  READNEXT CTIME ELSE CTIME = ""  CLEARSELECT  IF CDATE MATCHES "1N0N" AND CTIME MATCHES "1N0N" THEN    CDATE = OCONV(CDATE, 'D2/')    CTIME = OCONV(CTIME, 'MTS')    CSTRING = "Last compiled on ":CDATE:" at ":CTIME:'<br />'  ENDENDIF OUT.OF.ACCOUNT THEN  LOCATE myacct IN ACCTS<1> SETTING APOS THEN    password = ACCTS<2,APOS>  END ELSE password = ""  DATA password  EXECUTE "LOGTO ":myacct:" (F" CAPTURING LOGTO.OUT  IF LOGTO.OUT # "" THEN    * Fatal error - cannot get back to our account. Send crapy CGI error.    PRINT "Content-type: text/html"    PRINT    PRINT "<html><body>Error returning to ":myacct:", ":LOGTO.OUT    PRINT "Check MVDB.CONTROL, ED.ACCOUNTS settings.</body></html>"    GLOBAL.INFO(100) = 1 ;* Intentional stop    STOP  END  * Re-open the master dictionary in the local account.  OPEN '','MD' TO F.MD ELSE    OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'  ENDENDIF OUTPUT # "" THEN  CALL SWAP(OUTPUT,'&','&amp;')  CALL SWAP(OUTPUT,'<','&lt;')  CALL SWAP(OUTPUT,'>','&gt;')ENDGOSUB ADD.MESSAGEIF record # "" THEN  CALL SWAP(record,'&','&amp;')  CALL SWAP(record,'<','&lt;')  CALL SWAP(record,'>','&gt;')ENDIF action = "compile" THEN  CALL SWAP(OUTPUT,@AM,"<br>")ENDIF QUIET.MODE THEN  FORM = ""END ELSE  FORM = '<form id="ed_form" method="post" action="':CGI$PATH:'/MVDB.WEB.ED" >'  FORM<-1> = '<textarea id="file_1" style="height: 100%; width: 100%;" name="record">'  FORM<-1> = record  FORM<-1> = '</textarea>'  IF acct = "" THEN USE.ACCT = myacct ELSE USE.ACCT = acct  FORM<-1> = '<input type="hidden" name="ed_acct" value = "':USE.ACCT:'" />'  FORM<-1> = '<input type="hidden" name="ed_file" value="':filename:'" />'  FORM<-1> = '<input type="hidden" name="ed_item" value="':item:'" />'  FORM<-1> = '<input type="hidden" name="action" value="" />'  FORM<-1> = '</form>'ENDCALL SWAP(HTML,'<!-- SYNTAX -->',SYNTAX)CALL SWAP(HTML,'<!-- WINDOW_HEIGHT -->',height)CALL SWAP(HTML,'<!-- FILE -->',filename)CALL SWAP(HTML,'<!-- ITEM -->',item)CALL SWAP(HTML,'<!-- BODY -->',FORM)CALL SWAP(HTML,'<!-- LAST_COMPILE -->',CSTRING)CALL SWAP(HTML,'<!-- COMPILE_OUTPUT -->',OUTPUT)CALL SWAP(HTML,'<!-- COMPILE_ERRLINE -->',COMP.ERRLINE)CALL SWAP(HTML,'<!-- ED_CONTENT -->',record)*SUB.CNT = DCOUNT( SUBLIST<1>, @VM )INC.CNT = DCOUNT( INCLIST<1>, @VM )FILE.CNT = DCOUNT( FILELIST<1>, @VM )IF SUB.CNT > INC.CNT THEN MAX.CNT = SUB.CNT ELSE MAX.CNT = INC.CNTIF FILE.CNT > MAX.CNT THEN MAX.CNT = FILE.CNT*IF acct # "" THEN  URL.ACCT = acct  CALL SUB.URL.ENCODE(URL.ACCT)  ACCT.LINK = "ed_acct=":URL.ACCT:"&"END ELSE ACCT.LINK = ""*IF SUB.CNT THEN  EA.CALLS ='<table width="100%"><tbody><tr><th>File</th><th>Program</th><th>Line(s)</th></tr>'END ELSE EA.CALLS = ""IF INC.CNT THEN  EA.INCS ='<table width="100%"><tbody><tr><th>File</th><th>Program</th><th>Line(s)</th></tr>'END ELSE EA.INCS = ""IF FILE.CNT THEN  EA.FILES = '<table width="100%"><tbody><tr><th>File</th><th>Operation</th><th>Line(s)</th></tr>'END ELSE EA.FILES = ""FOR LX = 1 TO MAX.CNT  IF LX <= SUB.CNT THEN    URL.SUBFILE = SUBLIST<1,LX>    CALL SUB.URL.ENCODE(URL.SUBFILE)    URL.SUBITEM = SUBLIST<2,LX>    CALL SUB.URL.ENCODE(URL.SUBITEM)    PROGFNAME = SUBLIST<1,LX>    PROGNAME = SUBLIST<2,LX>    CALL SWAP(PROGNAME,"'","\'")    CALL SWAP(PROGFNAME,"'","\'")    IF SUBLIST<2,LX>[1,1] = "@" THEN ;* This is a CALL @ function, so no link to open the subroutine      EA.CALLS := '<tr><td>':PROGFNAME:'</td><td>':PROGNAME:'</a></td>'    END ELSE      EA.CALLS := '<tr><td>':PROGFNAME:'</td><td><a target="':URL.SUBFILE:'_':URL.SUBITEM:'" href="/dbc/MVDB.WEB.ED?':ACCT.LINK:'ed_file=':URL.SUBFILE:'&ed_item=':URL.SUBITEM:'">':PROGNAME:'</a></td>'    END    EA.CALLS := '</td><td>'    CL.CNT = DCOUNT( SUBLIST<4,LX>, @SVM )    FOR LXL = 1 TO CL.CNT      EA.CALLS := '<a href="#" onclick="javascript:editArea.go_to_line(':ESC.APOS:SUBLIST<4,LX,LXL>:ESC.APOS:'); return false;">':SUBLIST<4,LX,LXL>:'</a>'      IF LXL < CL.CNT THEN EA.CALLS := ", "    NEXT LXL  END  IF LX <= INC.CNT THEN    URL.INCFILE = INCLIST<1,LX>    CALL SUB.URL.ENCODE(URL.INCFILE)    URL.INCITEM = INCLIST<2,LX>    CALL SUB.URL.ENCODE(URL.INCITEM)    INCFNAME = INCLIST<1,LX>    INCNAME = INCLIST<2,LX>    CALL SWAP(INCNAME,"'","\'")    CALL SWAP(INCFNAME,"'","\'")    EA.INCS := '<tr><td>':INCFNAME:'</td><td><a target="':URL.INCFILE:'_':URL.INCITEM:'" href="/dbc/MVDB.WEB.ED?':ACCT.LINK:'ed_file=':URL.INCFILE:'&ed_item=':URL.INCITEM:'">':INCNAME:'</a>'    EA.INCS := '</td><td>'    IN.CNT = DCOUNT( INCLIST<4,LX>, @SVM )    FOR LXL = 1 TO IN.CNT      EA.INCS := '<a href="#" onclick="javascript:editArea.go_to_line(':ESC.APOS:INCLIST<4,LX,LXL>:ESC.APOS:'); return false;">':INCLIST<4,LX,LXL>:'</a> '      IF LXL < IN.CNT THEN EA.INCS := ", "    NEXT LXL  END  IF LX <= FILE.CNT THEN    FOR FOPX = 1 TO DCOUNT( FILELIST<3,LX>, @SVM )      IF FOPX = 1 THEN SHOW.FILENAME = FILELIST<1,LX> ELSE SHOW.FILENAME = '&nbsp;'      EA.FILES := '<tr><td>':SHOW.FILENAME:'</td><td>':FILELIST<3,LX,FOPX>      EA.FILES := '</td><td>'      IN.CNT = DCOUNT( FILELIST<5,LX,FOPX>, "," )      FOR LXL = 1 TO IN.CNT        LNO = FIELD( FILELIST<5,LX,FOPX>,',',LXL)        EA.FILES := '<a href="#" onclick="javascript:editArea.go_to_line(':ESC.APOS:LNO:ESC.APOS:'); return false;">':LNO:'</a>'        IF LXL < IN.CNT THEN EA.FILES := ", "      NEXT LXL      EA.FILES := '</td></tr>'    NEXT FOPX  ENDNEXT LXIF SUB.CNT THEN  EA.CALLS := '</td></tr></tbody></table>'ENDIF INC.CNT THEN  EA.INCS := '</td></tr></tbody></table>'ENDIF FILE.CNT THEN  EA.FILES := '</tbody></table>'END*ARC.LIST = ""ARC.CNT = 0IF ARCHIVE THEN  * Archiving is enabled. Find a list of archived copies of this file  IF acct = "" THEN USE.ACCT = myacct ELSE USE.ACCT = acct  CMD = 'SSELECT MV.WEB.ED.ARCHIVE WITH ACCT = "':USE.ACCT:'" AND WITH FILE.NAME = "':filename:'" AND WITH ITEM = "':item:'" BY-DSND DATE BY-DSND TIME'  EXECUTE CMD CAPTURING JUNK  IF SYSTEM(11) THEN    ARC.LIST = '<table width="100%"><tbody><tr><th>Date</th><th>Time</th><th>Open</th></tr>'    ARC.CNT = SYSTEM(11)    LOOP      READNEXT AID ELSE EXIT      READV DT.STAMP FROM F.ED.ARCHIVE, AID, 1 ELSE DT.STAMP = ""      ARC.LIST := '<tr><td>':OCONV(FIELD(DT.STAMP,'*',2),'D2/'):'</td><td>':OCONV(FIELD(DT.STAMP,'*',1),'MTS'):'</td><td>'      URL.AID = AID      CALL SUB.URL.ENCODE(URL.AID)      ARC.LIST := '<a href="/dbc/MVDB.WEB.ED?ed_acct=MVDB&ed_file=MV.WEB.ED.ARCHIVE&ed_item=':URL.AID:'" target="MVDB_MV.WEB.ED.ARCHIVE_':URL.AID:'">Open</a>'      ARC.LIST := '</td></tr>'    REPEAT    ARC.LIST := '</tbody></table>'  ENDEND*CALL SWAP(HTML,'<!-- EA_CALLS_CONTENT -->',EA.CALLS)CALL SWAP(HTML,'<!-- EA_INCLUDES_CONTENT -->',EA.INCS)CALL SWAP(HTML,'<!-- EA_FILES_CONTENT -->',EA.FILES)CALL SWAP(HTML,'<!-- EA_ARCHIVE_CONTENT -->',ARC.LIST)CALL SWAP(HTML,'<!-- NUM_OF_CALLS -->',SUB.CNT)CALL SWAP(HTML,'<!-- NUM_OF_INCLUDES -->',INC.CNT)CALL SWAP(HTML,'<!-- NUM_OF_FILES -->',FILE.CNT)CALL SWAP(HTML,'<!-- NUM_OF_ARCHIVES -->',ARC.CNT)CALL SWAP(HTML,'<!-- ED_SCRIPTS -->',EDIT.SCRIPTS)CALL WEB.SEND(HTML)GLOBAL.INFO(100) = 1 ;* Intentional stopSTOP*ADD.MESSAGE: **CALL SWAP(HTML,'<!-- HEADER -->',HMESSAGE)CALL SWAP(HTML,'<!-- FOOTER -->',FMESSAGE)RETURN*BUILD.SUBLIST: * Build a list of subroutines called by this program*IDX.POS = 1LPOS = 1LOOP  POS = INDEX( record, "CALL ", IDX.POS )WHILE POS DO  LINE.NUM = DCOUNT(record[1,POS+1],@AM)  LINE = TRIM(record<LINE.NUM>)  IF LINE[1,1] # "*" AND LINE[1,1] # "!" THEN    CALL.POS = INDEX( LINE, 'CALL ', 1 )    QCPOS = CALL.POS    GOSUB QUOTE.CHECK ;* Make sure the "CALL " is not in a quote    SKIP.LINE = 0    IF IN.QUOTE THEN SKIP.LINE = 1 ELSE      MID.CMNT.POS = INDEX(LINE,';*',1)      IF MID.CMNT.POS AND MID.CMNT.POS < CALL.POS THEN        * Is the mid-line comment within a quote?        QCPOS = MID.CMNT.POS        GOSUB QUOTE.CHECK        IF NOT(IN.QUOTE) THEN SKIP.LINE = 1      END    END    IF SKIP.LINE THEN ;* This is happening inside a literal string, ignore it.      IDX.POS += 1      CONTINUE    END    TEMP.STR = LINE[1,CALL.POS]    SUBNAME = LINE[CALL.POS+5,999]    IF INDEX( SUBNAME,'(',1) THEN      SUBNAME = FIELD( SUBNAME, '(', 1 )    END ELSE SUBNAME = FIELD(SUBNAME,' ',1)    SUBNAME = TRIM(SUBNAME)    *    READ CATPTR FROM F.MD, SUBNAME ELSE CATPTR = ""    IF CATPTR # "" THEN      SUBFILE = FIELD( CATPTR<4>, ' ', 1 )    END ELSE SUBFILE = filename    UKEY = SUBFILE:"*":SUBNAME    LOCATE UKEY IN SUBLIST<3> SETTING FOUND.POS THEN      SUBLIST<4,FOUND.POS,-1> = LINE.NUM    END ELSE      SUBLIST<1,LPOS> = SUBFILE      SUBLIST<2,LPOS> = SUBNAME      SUBLIST<3,LPOS> = UKEY      SUBLIST<4,LPOS> = LINE.NUM      LPOS += 1    END  END  IDX.POS += 1REPEATRETURN*BUILD.INCLIST: * Build a list of include items used by this program*IDX.POS = 1LPOS = 1LOOP  POS = INDEX( record, "INCLUDE ", IDX.POS )WHILE POS DO  LINE.NUM = DCOUNT(record[1,POS+1],@AM)  LINE = TRIM(record<LINE.NUM>)  SEMI.POS = INDEX( LINE, ';', 1 )  IF SEMI.POS THEN LINE = LINE[1,SEMI.POS-1]  IF TRIM(LINE[1,8]) = "INCLUDE" THEN    INC.POS = INDEX( LINE, 'INCLUDE ', 1 )    QCPOS = INC.POS    GOSUB QUOTE.CHECK    IF IN.QUOTE THEN ;* This is happening inside a literal string, ignore it.      IDX.POS += 1      CONTINUE    END    INCPARAM = LINE[INC.POS+8,999]    INCFILE = FIELD( INCPARAM, ' ', 1 )    INCITEM = FIELD( INCPARAM, ' ', 2 )    IF INCITEM = '' THEN      INCITEM = INCFILE      INCFILE = filename    END    UKEY = INCFILE:"*":INCITEM    LOCATE UKEY IN INCLIST<3> SETTING FOUND.POS THEN      INCLIST<4,FOUND.POS,-1> = LINE.NUM    END ELSE      INCLIST<1,LPOS> = INCFILE      INCLIST<2,LPOS> = INCITEM      INCLIST<3,LPOS> = UKEY      INCLIST<4,LPOS> = LINE.NUM      LPOS += 1    END  END  IDX.POS += 1REPEATRETURN*BUILD.FILELIST: * Build a list of files used by this program*IDX.POS = 1LPOS = 1LOOP  POS = INDEX( record, "OPEN ",IDX.POS )WHILE POS DO  LINE.NUM = DCOUNT(record[1,POS+1],@AM)  LINE = TRIM(record<LINE.NUM>)  IF LINE[1,1] # "*" AND LINE[1,1] # "!" THEN    OPOS = INDEX( LINE, 'OPEN ', 1 )    QCPOS = OPOS    GOSUB QUOTE.CHECK ;* Make sure this doesn't appear inside a literal string    IF IN.QUOTE THEN      IDX.POS += 1      CONTINUE    END    CONVERT "'" TO '"' IN LINE ;* Standaraize the quote character    CONVERT "\" TO '"' IN LINE    * An open statement may look like this: OPEN "","FILENAME"  - Get rid of the "", if it exists    DPOS = INDEX( LINE, '"",', 1 )    IF DPOS THEN      LINE = LINE[1,DPOS-1]:LINE[DPOS+3,999]    END    OPARAM = LINE[OPOS+5,999]    TPOS = INDEX( OPARAM, ' TO ', 1 )    IF NOT(TPOS) THEN      IDX.POS += 1      CONTINUE ;* Must not be an open statement.    END    FILEVAR = OPARAM[TPOS+4,999]    FILEVAR = FIELD( TRIM( FILEVAR ), ' ', 1 )    OPARAM = OPARAM[1,TPOS]*3-9-15*    FILENAME = TRIM(OPARAM)*3-9-15*    IF FILENAME[1,1] = '"' THEN FILENAME = FIELD(FILENAME,'"',2)*3-9-15*    UKEY = FILENAME:"*":FILEVAR    FILENAME.VAR = TRIM(OPARAM); *3-9-15*    IF FILENAME.VAR[1,1] = '"' THEN FILENAME.VAR = FIELD(FILENAME.VAR,'"',2); *3-9-15*    UKEY = FILENAME.VAR:"*":FILEVAR; *3-9-15*    LOCATE UKEY IN FILELIST<4> SETTING FOUND.POS THEN      FILELIST<5,FOUND.POS,-1> = LINE.NUM    END ELSE*3-9-15*      FILELIST<1,LPOS> = FILENAME      FILELIST<1,LPOS> = FILENAME.VAR; *3-9-15*      FILELIST<2,LPOS> = FILEVAR      FILELIST<3,LPOS,1> = "Open"      FILELIST<4,LPOS> = UKEY      FILELIST<5,LPOS,1> = LINE.NUM      F.R.IDX = 1; F.R.LINES = ""      LOOP        F.R.POS = INDEX( record, "FROM ":FILEVAR, F.R.IDX )      WHILE F.R.POS DO        F.R.IDX += 1        IF F.R.LINES # "" THEN F.R.LINES := ","        F.R.LINES := DCOUNT(record[1,F.R.POS+1],@AM)      REPEAT      IF F.R.IDX > 1 THEN        * Read operation        FILELIST<3,LPOS,-1> = "Read"        FILELIST<5,LPOS,-1> = F.R.LINES      END      *      F.W.IDX = 1 ; F.W.LINES = ""      LOOP        F.W.POS =  INDEX( record, "ON ":FILEVAR, F.W.IDX )      WHILE F.W.POS DO        F.W.IDX += 1        IF F.W.LINES # "" THEN F.W.LINES := ","        F.W.LINES := DCOUNT(record[1,F.W.POS+1],@AM)      REPEAT      IF F.W.IDX > 1 THEN        * Write operation        FILELIST<3,LPOS,-1> = "Write"        FILELIST<5,LPOS,-1> = F.W.LINES      END      *      F.D.IDX = 1 ; F.D.LINES = ""      LOOP        F.D.POS =  INDEX( record, "DELETE ":FILEVAR, F.D.IDX )      WHILE F.D.POS DO        F.D.IDX += 1        IF F.D.LINES # "" THEN F.D.LINES := ","        F.D.LINES := DCOUNT(record[1,F.D.POS+1],@AM)      REPEAT      IF F.D.IDX > 1 THEN        * Delete operation        FILELIST<3,LPOS,-1> = "Delete"        FILELIST<5,LPOS,-1> = F.D.LINES      END      LPOS += 1    END  END  IDX.POS += 1REPEATRETURN*QUOTE.CHECK: * Is the data in LINE at QCPOS inside quotes?*CURR.Q = ""FOR SEEK.POS = 1 TO QCPOS  QCH = LINE[SEEK.POS,1]  BEGIN CASE    CASE CURR.Q # ""      IF QCH = CURR.Q THEN        CURR.Q = ""      END    CASE QCH = "'" ; CURR.Q = QCH    CASE QCH = '"' ; CURR.Q = QCH    CASE QCH = '\' ; CURR.Q = QCH  END CASENEXT SEEK.POSIF CURR.Q # "" THEN IN.QUOTE = 1 ELSE IN.QUOTE = 0RETURN0001C9DESTROY.SESSION0c2SUBROUTINE DESTROY.SESSION** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program removes the session records**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE* Init*EQU FALSE TO 0, TRUE TO 1*EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*CALL SET.COOKIE("sessionid=; path=/")*DELETE F.WEB.SESSION, SESSION$IDRETURN*006251MVDB.ADMIN0c2* Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Administration area of Bravo Dashboard** 09-23-16 Peter Schellenbach*  Add support for alternate logo defined for each user (MVDB.USERS attr 7).*  Requires corresponding changes in WEB.FORMS admin_template.html and*  javascripts initAdminTemplate.js to edit the alternate logo field.**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.USERSINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*DIM DB.AREAS(5)*OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MVDB.SUBS' TO F.MVDB.SUBS ELSE STOP 201, 'MVDB.SUBS'OPEN '','MVDB.USERS' TO F.MVDB.USERS ELSE STOP 201, 'MVDB.USERS'OPEN '','MVDB.DEFS' TO F.MVDB.DEFS ELSE STOP 201, 'MVDB.DEFS'OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE STOP 201, 'MVDB.WIDGET.TYPES'OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'OPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE STOP 201, 'MVDB.THEMES'*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDENDIF THEME.CSS # '' THEN THEME.CSS = '<link rel="Stylesheet" href="/db/themes/':THEME.CSS:'" media="screen" type="text/css" />'IF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'**SESSION$GLOBAL.DEBUG = 1*GLOBAL.INFO(100) = 0CALL GET.SESSION.VAR("adminauth",adminauth)CALL PUT.SESSION.VAR("dd_mode",0)adminpass = ""IF adminauth # 1 THEN  FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'  FORM := '</head><body><p>Administrative priviledges are required. '  FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'  CALL WEB.SEND(FORM)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPEND*LOCATE "action" IN CGI$VARS SETTING POS THEN  action = CGI$VALS<POS>END ELSE action = ""LOCATE "filter" IN CGI$VARS SETTING POS THEN  filter = CGI$VALS<POS>END ELSE  CALL GET.SESSION.VAR("widget_filter",filter)ENDLOCATE "clearfilter" IN CGI$VARS SETTING POS THEN  filter = ""ENDCALL PUT.SESSION.VAR("widget_filter",filter)*LOCATE "unfail_widget" IN CGI$VARS SETTING POS THEN  UNFAIL.WIDGET = CGI$VALS<POS>  CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  LOCATE UNFAIL.WIDGET IN FAILED.WIDGETS SETTING DPOS THEN    FAILED.WIDGETS = DELETE( FAILED.WIDGETS, DPOS, 0, 0 )    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  END  action = "widgets"END*ACTIVE.MENU = ''HTML = ''SCRIPTS = ""BEGIN CASE  CASE action = "users" OR action = ""    GOSUB LOAD.USERS  CASE action = "widgets"    GOSUB LOAD.WIDGETS  CASE action = "save_widget"    LOCATE "save_widget" IN CGI$VARS SETTING POS THEN      LOCATE "save_widgetid" IN CGI$VARS SETTING POS THEN        save.widgetid = CGI$VALS<POS>        LOCATE "newwidget" IN CGI$VARS SETTING POS THEN          newwidget = (CGI$VALS<POS> = 1)        END ELSE newwidget = ""        IF newwidget = 1 THEN          LOCATE "new_widgetid" IN CGI$VARS SETTING POS THEN            save.widgetid = CGI$VALS<POS>          END        END ELSE newwidget = 0        IF newwidget THEN          MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, save.widgetid THEN            SQN = 1            LOOP              new.saveid = save.widgetid:"-":SQN              MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, new.saveid THEN                SQN += 1              END ELSE                save.widgetid = new.saveid                EXIT              END            REPEAT          END        END        IF save.widgetid # "" THEN          MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, save.widgetid ELSE MAT WIDGET.ITEM = ''          LOCATE "widget_sub" IN CGI$VARS SETTING POS THEN            WIDGET.SUB = CGI$VALS<POS>          END          LOCATE "widget_users" IN CGI$VARS SETTING POS THEN            USER.LIST = CGI$VALS<POS>            CONVERT "," TO @VM IN USER.LIST            WIDGET.USERS = USER.LIST          END ELSE WIDGET.USERS = ""          LOCATE "new_widget_name" IN CGI$VARS SETTING POS THEN            NEW.NAME = CGI$VALS<POS>            IF NEW.NAME = save.widgetid THEN NEW.NAME = ""          END ELSE NEW.NAME = ""          IF NEW.NAME # "" THEN            * A rename of the widget has occurred.            MATWRITE WIDGET.ITEM ON F.MVDB.WIDGETS, NEW.NAME            DELETE F.MVDB.WIDGETS, save.widgetid            * Rename instances of this widget name within dashboard definitions            SELECT F.MVDB.DEFS            LOOP              READNEXT DBID ELSE EXIT              MATREADU DB.ITEM FROM F.MVDB.DEFS, DBID ELSE CONTINUE              LOOP                LOCATE save.widgetid IN DB.WIDGETS<1> SETTING RPOS THEN                  FOUND = 1                  DB.WIDGETS<1,RPOS> = NEW.NAME                END ELSE FOUND = 0              WHILE FOUND DO REPEAT              MATWRITE DB.ITEM ON F.MVDB.DEFS, DBID            REPEAT          END ELSE            MATWRITE WIDGET.ITEM ON F.MVDB.WIDGETS, save.widgetid          END        END      END    END ELSE      LOCATE "delete_widget" IN CGI$VARS SETTING POS THEN        LOCATE "save_widgetid" IN CGI$VARS SETTING POS THEN          save.widgetid = CGI$VALS<POS>          DELETE F.MVDB.WIDGETS, save.widgetid        END      END    END    GOSUB LOAD.WIDGETS  CASE action = "dashboards"    GOSUB LOAD.DASHBOARDS  CASE action = "editdb" OR action = "adddb"    ACTIVE.MENU = "DASHBOARDS"    READ INNER.TEMPLATE FROM F.WEB.FORMS, "admin_dashboards.html" ELSE INNER.TEMPLATE = "admin_dashboards.html not found"    DASHBOARD.LIST = ''    EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNK    LOOP      READNEXT ID ELSE EXIT      DASHBOARD.LIST<-1> = ID    REPEAT    CALL SWAP(DASHBOARD.LIST, CHAR(254), '","')    DASHBOARD.LIST = '"':DASHBOARD.LIST:'"'    CALL SWAP(INNER.TEMPLATE,'<!-- list_of_dashboard_ids -->',DASHBOARD.LIST)    *    IF action = "adddb" THEN      edit.id = "new_db"      EDIT.PROMPT = '<input id="edit_dbid" type="text" value="Untitled Dashboard" name="edit_dbid"/>'      CALL SWAP(INNER.TEMPLATE,'<!-- save_dbid -->',edit.id)      CALL SWAP(INNER.TEMPLATE,'<!-- edit_dbid -->',EDIT.PROMPT)      MAT DB.ITEM = ''    END ELSE      LOCATE "edit_dbid" IN CGI$VARS SETTING POS THEN        edit.id = CGI$VALS<POS>      END ELSE edit.id = ""      *      MATREAD DB.ITEM FROM F.MVDB.DEFS, edit.id ELSE MAT DB.ITEM = ''      *      EDIT.PROMPT = '<input id="db_id" type="text" value="':edit.id:'" name="db_new_id" size="63" />'       CALL SWAP(INNER.TEMPLATE,'<!-- save_dbid -->',edit.id)      CALL SWAP(INNER.TEMPLATE,'<!-- edit_dbid -->',EDIT.PROMPT)    END    CALL MVDB.SUB.WIDGET.LIST(WIDGET.LIST)    *    SCRIPT1 = 'var widgetList = new Array("");':CHAR(10)    CALL SWAP(INNER.TEMPLATE,'<!-- db_desc -->',DB.DESC)    CALL SWAP(INNER.TEMPLATE,'<!-- db_sort -->',DB.SORT)    *    *DB.THEME db_theme select list    *    theme.select = '<select name="db_theme">'    theme.select := CHAR(10):'<option value="">Default Theme</option>'    EXECUTE 'SSELECT MVDB.THEMES' CAPTURING JUNK    THEME.LIST = ''    LOOP      READNEXT THEME.ID ELSE EXIT      READV CSS.NAME FROM F.MVDB.THEMES, THEME.ID, 1 ELSE CSS.NAME = ''      IF CSS.NAME # '' THEN        SELECTED = ''        IF THEME.ID = DB.THEME THEN SELECTED = ' selected'        theme.select := CHAR(10):'<option value="':THEME.ID:'"':SELECTED:'>':THEME.ID:'</option>'      END    REPEAT    theme.select := CHAR(10):'</select>':CHAR(10)    CALL SWAP(INNER.TEMPLATE,'<!-- db_theme -->',theme.select)        CALL SWAP(INNER.TEMPLATE,'<!-- db_sort -->',DB.SORT)    *    SHOW.USERS = DB.USERS.ALLOWED    CONVERT @VM TO "," IN SHOW.USERS    CALL SWAP(INNER.TEMPLATE,'<!-- db_users -->',SHOW.USERS)    *    ACTIVE1 = "" ; ACTIVE2 = "" ; ACTIVE3 = ""    IF DB.TEMPLATE = "" THEN DB.TEMPLATE = 1    SCRIPT1 := 'var defaultLayout=':DB.TEMPLATE:';':CHAR(10)    BEGIN CASE      CASE DB.TEMPLATE = 3 ; ACTIVE3 = 'class="active"'      CASE DB.TEMPLATE = 2 ; ACTIVE2 = 'class="active"'      CASE DB.TEMPLATE = 1 OR 1 ; ACTIVE1 = 'class="active"'    END CASE    LAYOUT.OPTS  = '<li ':ACTIVE1:'><label>1 column</label><img alt="1" src="/db/images/1-column-layout.png" /></li>'    LAYOUT.OPTS := '<li ':ACTIVE2:'><label>2 column</label><img alt="2" src="/db/images/2-column-layout.png" /></li>'    LAYOUT.OPTS := '<li ':ACTIVE3:'><label>3 column</label><img alt="3" src="/db/images/3-column-layout.png" /></li>'    *    CALL SWAP(INNER.TEMPLATE,'<!-- db_layout_opts -->',LAYOUT.OPTS)    *    * Create a list of widgets by area    *    MAT DB.AREAS = ""    FOR X = 1 TO DCOUNT( DB.WIDGETS, @VM )      WID = DB.WIDGETS<1,X>      CALL SWAP(WID,'"','\"')      LOCATE WID IN WIDGET.LIST<1> SETTING WPOS THEN        WWIDTH = WIDGET.LIST<6,WPOS>        WTYPE = WIDGET.LIST<4,WPOS>        FAIL.TEXT = WIDGET.LIST<8,WPOS>      END ELSE        WTYPE = "UNKNOWN"        WWIDTH = 1        FAIL.TEXT = ""      END      THIS.AREA = DB.WIDGET.AREA<1,X>      IF NOT(THIS.AREA MATCHES "1N") THEN THIS.AREA = 1      IF THIS.AREA < 1 OR THIS.AREA > 5 THEN THIS.AREA = 1      MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, WTYPE THEN        CLASS.NAME = FIELD(WT$ICON,'.',1)        CONVERT "_" TO "-" IN CLASS.NAME        WIDTH.CLASS = ""        BEGIN CASE          CASE WWIDTH = 1 ; WIDTH.CLASS = 'widget-small'          CASE WWIDTH = 2 ; WIDTH.CLASS = 'widget-medium'          CASE WWIDTH = 3 OR 1; WIDTH.CLASS = 'widget-large'        END CASE        SHOW.WID = WID        IF FAIL.TEXT # "" THEN SHOW.WID := " (":FAIL.TEXT:")"        DB.AREAS(THIS.AREA) := '<div name="':WID:'" class="':CLASS.NAME:'"><span type="':WTYPE:'" class="':WIDTH.CLASS:'" >':SHOW.WID:'</span></div>'      END    NEXT X    FOR X = 1 TO 5      CALL SWAP(INNER.TEMPLATE,'<!-- AREA_':X:'_WIDGETS -->',DB.AREAS(X))    NEXT X    *    * Build widget option list    *    WOPTS = ''    ALL.WIDGET.CNT = DCOUNT( WIDGET.LIST<1>, @VM )    FOR X = 1 TO ALL.WIDGET.CNT      USE.DESC = WIDGET.LIST<2,X>      WID = WIDGET.LIST<1,X>      WDESC = WIDGET.LIST<2,X>      WTYPE = WIDGET.LIST<4,X>      WWIDTH = WIDGET.LIST<6,X>      FAIL.TEXT = WIDGET.LIST<8,X>      CALL SWAP(WDESC,'"','\"')      CALL SWAP(WID,'"','\"')      MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, WTYPE THEN        CLASS.NAME = FIELD(WT$ICON,'.',1)        CONVERT "_" TO "-" IN CLASS.NAME        WIDTH.CLASS = ""        BEGIN CASE          CASE WWIDTH = 1 ; WIDTH.CLASS = 'widget-small'          CASE WWIDTH = 2 ; WIDTH.CLASS = 'widget-medium'          CASE WWIDTH = 3 OR 1; WIDTH.CLASS = 'widget-large'        END CASE        SHOW.WID = WID        IF FAIL.TEXT # "" THEN SHOW.WID := " (":FAIL.TEXT:")"        WOPTS := '<div class="':CLASS.NAME:'"><span name="':WID:'" class="widget-id ':WIDTH.CLASS:'" type="':WTYPE:'">':SHOW.WID:'</span></div>':CHAR(10)      END      SCRIPT1 := \widgetList["\:WID:\"] = new Array("\:WDESC:\","\:WTYPE:\","\:WIDGET.LIST<6,X>:\");\    NEXT X    *    GOSUB MAKE.DB.SCRIPT    SCRIPTS<-1> = SCRIPT1    *    CALL SWAP(INNER.TEMPLATE,'<!-- widget_list -->',WOPTS)    HTML = INNER.TEMPLATE  CASE action = "save_db"    LOCATE "save_db" IN CGI$VARS SETTING POS THEN      SAVE.OK = 1      rename.id = ""      LOCATE "save_dbid" IN CGI$VARS SETTING POS THEN        save.id = CGI$VALS<POS>        IF save.id = "new_db" THEN          LOCATE "edit_dbid" IN CGI$VARS SETTING POS THEN            save.id = CGI$VALS<POS>          END ELSE save.id = ""          IF save.id = "" THEN SAVE.OK = 0 ELSE            MATREAD DB.ITEM FROM F.MVDB.DEFS, save.id THEN SAVE.OK = 0          END        END ELSE          LOCATE "db_new_id" IN CGI$VARS SETTING POS THEN            rename.id = CGI$VALS<POS>          END        END        CONVERT '"\' TO '' IN rename.id        CONVERT '"\' TO '' IN save.id        IF SAVE.OK THEN          MATREAD DB.ITEM FROM F.MVDB.DEFS, save.id ELSE MAT DB.ITEM = ''          LOCATE "db_desc" IN CGI$VARS SETTING POS THEN            DB.DESC = CGI$VALS<POS>          END          LOCATE "db_theme" IN CGI$VARS SETTING POS THEN            DB.THEME = CGI$VALS<POS>          END          LOCATE "db_sort" IN CGI$VARS SETTING POS THEN            DB.SORT = CGI$VALS<POS>          END          LOCATE "db_layout" IN CGI$VARS SETTING POS THEN            DB.TEMPLATE = CGI$VALS<POS>          END          LOCATE "db_users" IN CGI$VARS SETTING POS THEN            DB.USERS.ALLOWED = CGI$VALS<POS>          END          CONVERT "," TO @VM IN DB.USERS.ALLOWED          *          LOCATE "widgets" IN CGI$VARS SETTING POS THEN            WIDGET.LIST = CGI$VALS<POS>          END ELSE WIDGET.LIST = ""          CONVERT CHAR(13) TO @AM IN WIDGET.LIST          CONVERT CHAR(10) TO "" IN WIDGET.LIST          WCNT = DCOUNT( WIDGET.LIST, @AM )          DB.WIDGETS = ''          DB.WIDGET.AREA = ''          DB.WIDGET.ORDER = ''          FOR WX = 1 TO WCNT            THIS.W = WIDGET.LIST<WX>            DB.WIDGET.AREA<1,WX> = FIELD( THIS.W, ',', 1 )            DB.WIDGET.ORDER<1,WX> = FIELD( THIS.W,',', 2 )            DB.WIDGETS<1,WX> = OCONV(THIS.W,'G2,99' )          NEXT WX          IF rename.id # "" AND rename.id # save.id THEN            DELETE F.MVDB.DEFS, save.id            MATWRITE DB.ITEM ON F.MVDB.DEFS, rename.id          END ELSE            MATWRITE DB.ITEM ON F.MVDB.DEFS, save.id          END        END      END    END ELSE      LOCATE "delete_db" IN CGI$VARS SETTING POS THEN        LOCATE "save_dbid" IN CGI$VARS SETTING POS THEN          del.id = CGI$VALS<POS>          DELETE F.MVDB.DEFS, del.id        END      END    END    GOSUB LOAD.DASHBOARDS  CASE action = "save_user"    LOCATE "save_userid" IN CGI$VARS SETTING POS THEN      save.userid = CGI$VALS<POS>      LOCATE "delete_user" IN CGI$VARS SETTING POS THEN        DELETE F.MVDB.USERS, save.userid      END ELSE        LOCATE "newuser" IN CGI$VARS SETTING POS THEN          newuser = 1          LOCATE "new_userid" IN CGI$VARS SETTING POS THEN            save.userid = CGI$VALS<POS>          END        END ELSE newuser = 0        SAVE.OK = 1        IF newuser THEN          MATREAD USER.ITEM FROM F.MVDB.USERS, save.userid THEN            SAVE.OK = 0          END        END        IF SAVE.OK AND save.userid # "" THEN          MATREAD USER.ITEM FROM F.MVDB.USERS, save.userid ELSE MAT USER.ITEM = ''          LOCATE "username" IN CGI$VARS SETTING POS THEN            USER.NAME = CGI$VALS<POS>          END          LOCATE "default_dashboard" IN CGI$VARS SETTING POS THEN            USER.DEFAULT.DB = CGI$VALS<POS>          END          LOCATE "user_password" IN CGI$VARS SETTING POS THEN            IF CGI$VALS<POS> # "" THEN              USER.PASSWORD = OCONV(CGI$VALS<POS>,"U3060")            END          END          LOCATE "user_role" IN CGI$VARS SETTING POS THEN            USER.ROLE = CGI$VALS<POS>          END          IF USER.ROLE = "" THEN USER.ROLE = "User"          * PJS 09-23-16 save optional user logo          LOCATE "opt_logo_path" IN CGI$VARS SETTING POS THEN            USER.ALT.LOGO = CGI$VALS<POS>          END ELSE            USER.ALT.LOGO = ""          END          MATWRITE USER.ITEM ON F.MVDB.USERS, save.userid        END      END    END    GOSUB LOAD.USERS  CASE 1    READ HTML FROM F.WEB.FORMS, "admin_menu.html" ELSE ADMIN.MENU = "admin_menu.html not found."END CASEREAD ADMIN.TEMPLATE FROM F.WEB.FORMS, "admin_template.html" ELSE ADMIN.TEMPLATE = "admin_template.html not found."CALL SWAP(ADMIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)HEADER = '<div id="dashboard_nav">'HEADER := '<ol class="dashboard_list">'IF ACTIVE.MENU = "USERS" THEN ACTIVE = 'class="db_active"' ELSE ACTIVE = ""HEADER := '<li ':ACTIVE:'><a href="':CGI$PATH:'/MVDB.ADMIN?action=users">Users</a></li>'IF ACTIVE.MENU = "WIDGETS" THEN ACTIVE = 'class="db_active"' ELSE ACTIVE = ""HEADER := '<li ':ACTIVE:'><a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets">Widgets</a></li>'IF ACTIVE.MENU = "DASHBOARDS" THEN ACTIVE = 'class="db_active"' ELSE ACTIVE = ""HEADER := '<li ':ACTIVE:'><a href="':CGI$PATH:'/MVDB.ADMIN?action=dashboards">Dashboards</a></li>'OPEN 'RSS.BP' TO F.RSS.BP THEN  HEADER := '<li><a href="':CGI$PATH:'/RSS.MAINT">RSS Feed Maintenance</a></li>'ENDOPEN 'MVPKG.DATA' TO F.MVPKG.DATA THEN  HEADER := '<li><a href="':CGI$PATH:'/MVPKG.MAIN">Package Manager</a></li>'ENDHEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN">Return to Dashboard</a></li>'HEADER := '</ol>'HEADER := '</div>'CALL SWAP(ADMIN.TEMPLATE,'<!-- HEADER -->',HEADER)FOOTER = ''CALL SWAP(ADMIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)*CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_MAIN -->',HTML)CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_SCRIPTS -->',SCRIPTS)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)CALL WEB.SEND(ADMIN.TEMPLATE)GLOBAL.INFO(100) = 1 ;* Process completed successfullySTOP*LOAD.USERS: **    ACTIVE.MENU = "USERS"    EXECUTE 'SSELECT MVDB.USERS' CAPTURING JUNK    HTML = '<table width="100%">'    HTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adduser" class="add-user">Add User</a></td></tr>'    HTML<-1> = '<tr><th>User ID</th>'    HTML<-1> = '<th>Name</th>'     HTML<-1> = '<th>Default Dashboard</th>'    HTML<-1> = '<th>Role</th>'    HTML<-1> = '<th>Action</th>'     HTML<-1> = '</tr>'    *    LOOP      READNEXT ID ELSE EXIT      MATREAD USER.ITEM FROM F.MVDB.USERS, ID ELSE MAT USER.ITEM = ""      IF USER.ROLE = "" THEN USER.ROLE = "User"      HTML<-1> = '<tr><td>':ID:'</td>'      HTML<-1> = '<td>':USER.NAME:'</td>'      HTML<-1> = '<td>':USER.DEFAULT.DB:'</td>'      CALL SWAP(ID,'"','\"')      CALL SWAP(USER.NAME,'"','\"')      CALL SWAP(USER.DEFAULT.DB,'"','\"')      CALL SWAP(USER.DEFAULT.DB,"'","&apos;")      * PJS 09-23-16: added USER.ALT.LOGO parameter to editUser()      ACTIONS = \&nbsp;<a href='javascript:editUser("\:ID:\","\:USER.NAME:\","\:USER.DEFAULT.DB:\","\:USER.ROLE:\","\:USER.ALT.LOGO:\");'><img title="Edit User" class="icon" src="/db/icons/user_edit.png" /></a>\      ACTIONS := \&nbsp;<a href='javascript:deleteUser("\:ID:\");'><img title="Delete User" class="icon" src="/db/icons/user_delete.png" /></a>\      HTML<-1> = '<td>':USER.ROLE:'</td>'      HTML<-1> = '<td>':ACTIONS:'</td>'      HTML<-1> = '</tr>'    REPEAT    HTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adduser" class="add-user">Add User</a></td></tr>'    HTML<-1> = '</table>'    *    GOSUB MAKE.DB.SCRIPTRETURN*LOAD.WIDGETS: **ACTIVE.MENU = "WIDGETS"CALL MVDB.SUB.WIDGET.LIST(WIDGET.LIST)FFORM = '<form action="':CGI$PATH:'/MVDB.ADMIN" method="get">'FFORM := '<input type="hidden" name="action" value="widgets">'FFORM := 'Filter: <input type="text" name="filter" value="':filter:'"> <input type=submit name=fbtn value="Go">'IF filter # "" THEN FFORM := ' <a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets&clearfilter">Clear Filter</a>'FFORM := '</form>'HTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="3"><a href="':CGI$PATH:'/MVDB.ADMIN?action=addwidget" class="add-widget">Add a Widget</a></td>'HTML<-1> = '<td colspan="4" align="right">':FFORM:'</td></tr>'HTML<-1> = '<tr><th colspan="2">Widget ID</th>'HTML<-1> = '<th>Type</th>' HTML<-1> = '<th>Description</th>' HTML<-1> = '<th>Subroutine</th>' HTML<-1> = '<th>Users Allowed</th>' HTML<-1> = '<th>Actions</th>' HTML<-1> = '</tr>'*WIDGET.CNT = DCOUNT( WIDGET.LIST<1>, @VM )FOR WDX = 1 TO WIDGET.CNT  ID = WIDGET.LIST<1,WDX>  WDESC = WIDGET.LIST<2,WDX>  WSUB = WIDGET.LIST<3,WDX>  WTYPE = WIDGET.LIST<4,WDX>  WTITLE = WIDGET.LIST<5,WDX>  WWIDTH = WIDGET.LIST<6,WDX>  FAIL.STATUS = WIDGET.LIST<7,WDX>  FAIL.TEXT = WIDGET.LIST<8,WDX>  MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, WTYPE ELSE MAT WIDGET.TYPES = ""  IF filter # "" THEN    FILTER.MATCH = 0    IF INDEX(WDESC,filter,1) THEN FILTER.MATCH = 1    IF INDEX(WTITLE,filter,1) THEN FILTER.MATCH = 1    IF INDEX(WSUB,filter,1) THEN FILTER.MATCH = 1  END ELSE FILTER.MATCH =1  IF FILTER.MATCH THEN    IF WT$ICON # "" THEN      ICON.IMG = '<img height="20" width="20" src="/db/icons/':WT$ICON:'" />'    END ELSE ICON.IMG = "&nbsp;"    ID.LINK = ID    CALL SUB.URL.ENCODE(ID.LINK)    ID.LINK = '<a href="':CGI$PATH:'/MVDB.MAIN?udview=':ID.LINK:'&dd" target="_blank" title="Open in new window">':ID:'</a>'    HTML<-1> = '<tr><td class="widget-name">':ID.LINK:'</td><td class="widget-icon">':ICON.IMG:'</td>'    HTML<-1> = '<td>':WTYPE:'</td>'    IF WTITLE = "" THEN WTITLE = WDESC    HTML<-1> = '<td>':WTITLE:'</td>'    ENC.WIDGET.SUB = WSUB    CALL SUB.URL.ENCODE(ENC.WIDGET.SUB)    HTML<-1> = '<td><a target="MVDB.SUBS_':ENC.WIDGET.SUB:'" href="':CGI$PATH:'/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=':ENC.WIDGET.SUB:'" title="Edit Source">':WSUB:'</a></td>'    MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, ID ELSE MAT WIDGET.ITEM = ""    IF WIDGET.USERS # "" THEN      SHOW.USERS = WIDGET.USERS      CONVERT @VM TO "," IN SHOW.USERS      PASS.USER.LIST = SHOW.USERS    END ELSE      SHOW.USERS = "Anybody"      PASS.USER.LIST = ""    END    HTML<-1> = '<td>':SHOW.USERS:'</td>'    CALL SWAP(WDESC,"'","\'")    CALL SWAP(WSUB,"'","\'")    CALL SWAP(PASS.USER.LIST,"'","\'")    URL.ID = ID    CALL SUB.URL.ENCODE(URL.ID)    CALL SWAP(ID,"'","\'")    ACTIONS = \<a href="javascript:editWidget('\:ID:\','\:WDESC:\','\:WSUB:\','\:PASS.USER.LIST:\');"><img title="Edit Widget" class="icon" src="/db/icons/cog_edit.png" /></a>\    ACTIONS := '&nbsp;'    ACTIONS := \<a href="javascript:copyWidget('Copy of \:ID:\','\:WDESC:\','\:WSUB:\','\:PASS.USER.LIST:\');"><img title="Copy Widget" class="icon" src="/db/icons/page_copy.png" /></a>\    ACTIONS := '&nbsp;'    ACTIONS := \<a href="javascript:deleteWidget('\:ID:\','\:WDESC:\','\:WSUB:\','\:PASS.USER.LIST:\');"><img title="Delete Widget" class="icon" src="/db/icons/cog_delete.png" /></a>\    IF FAIL.STATUS = 1 THEN      * This widget has a fatal error and has been added to the "failed_widgets" session variable. Allow the admin to reset this status.      ACTIONS := \&nbsp;<a href="/dbc/MVDB.ADMIN?unfail_widget=\:URL.ID:\&action=widgets"><img title="Reset Fail Status" class="icon" src="/db/icons/arrow_redo.png" /></a>\    END    HTML<-1> = '<td>':ACTIONS:'</td>'    HTML<-1> = '</tr>'  ENDNEXT WDXHTML<-1> = '<tr><td colspan="7"><a href="" class="add-widget">Add a Widget</a></td></tr>'HTML<-1> = '</table>'*SCRIPTS = 'var widgetList = new Array('EXECUTE "SSELECT MVDB.WIDGETS" CAPTURING JUNKFIRST = 1LOOP  READNEXT ID ELSE EXIT  CALL SWAP(ID,'"','\"')  IF NOT(FIRST) THEN SCRIPTS := ','  FIRST = 0  SCRIPTS := '"':ID:'"'REPEATSCRIPTS := ');'RETURN*LOAD.DASHBOARDS: **ACTIVE.MENU = "DASHBOARDS"EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNKHTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adddb" class="add-dashboard">Add A Dashboard</a></td></tr>'HTML<-1> = '<tr><th>Dashboard ID</th>'HTML<-1> = '<th>Description</th>' HTML<-1> = '<th>Users Allowed</th>' HTML<-1> = '<th>Actions</th>' HTML<-1> = '</tr>'*LOOP  READNEXT ID ELSE EXIT  MATREAD DB.ITEM FROM F.MVDB.DEFS, ID ELSE MAT DB.ITEM = ''  HTML<-1> = '<tr><td>':ID:'</td>'  HTML<-1> = '<td>':DB.DESC:'</td>'  IF DB.USERS.ALLOWED # "" THEN    SHOW.USERS = DB.USERS.ALLOWED    CONVERT @VM TO "," IN SHOW.USERS  END ELSE SHOW.USERS = "Anybody"  HTML<-1> = '<td>':SHOW.USERS:'</td>'  ACTIONS = '<a href="':CGI$PATH:'/MVDB.ADMIN?action=editdb&edit_dbid=':ID:'"><img title="Edit Dashboard" class="icon" src="/db/icons/layout_edit.png" /></a>&nbsp;'  ACTIONS := \<a onClick="return confirm('DELETE: Are you sure?');" href="\:CGI$PATH:\/MVDB.ADMIN?action=save_db&delete_db=1&save_dbid=\:ID:\"><img title="Delete Dashboard" class="icon" src="/db/icons/layout_delete.png" /></a>\  HTML<-1> = '<td>':ACTIONS:'</td>'  HTML<-1> = '</tr>'REPEATHTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adddb" class="add-dashboard">Add A Dashboard</a></td></tr>'HTML<-1> = '</table>'RETURN*MAKE.DB.SCRIPT: **SCRIPTS = 'var dashboardList = new Array('EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNKFIRST = 1LOOP  READNEXT ID ELSE EXIT  CALL SWAP(ID,'"','\"')  IF NOT(FIRST) THEN SCRIPTS := ','  FIRST = 0  SCRIPTS := '"':ID:'"'REPEATSCRIPTS := ');'RETURN000103SWAP0c2SUBROUTINE SWAP(string,SUB1,SUB2)**#MAKE# RL $OPTIONS D3IDX.POS = 1LOOP  POS = INDEX( string, SUB1, IDX.POS )WHILE POS DO  string = string[1,POS-1]:SUB2:string[POS+LEN(SUB1),LEN(string)]  IDX.POS = IDX.POS + COUNT(SUB2,SUB1)REPEATRETURNEND00031FDELETE.SESSION.VAR0c2    SUBROUTINE DELETE.SESSION.VAR( Var )* @(#) DELETE.SESSION.VAR Ported to jBASE 17:00:16  08 JUL 2015*  The following variable names were converted*   VAR* ** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program reads a value from the current web*              session record.* Init*#MAKE# RL $OPTIONS D3    INCLUDE WBPD WWW.INCLUDE    EQU FALSE TO 0, TRUE TO 1    EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*    READ REC FROM F.WEB.SESSION, SESSION$ID THEN        LOCATE Var IN REC<1> SETTING POS THEN            DELETE REC<1,POS>            DELETE REC<2,POS>            WRITE REC ON F.WEB.SESSION, SESSION$ID        END    END*    RETURN001BBASUB.DEBUG.WIDGET0c2    SUBROUTINE SUB.DEBUG.WIDGET* @(#) SUB.DEBUG.WIDGET Ported to jBASE 17:00:17  08 JUL 2015*  The following variable names were converted*   PROG,LN,DATE,TIME* ** 01-20-16 Peter Schellenbach - added code to insert extra widget info after runtime errors.*   Call new SUB.LOG.DEBUG.INFO in widget code to save extra widget info for display here.*    INCLUDE WBPD MVDB.INCLUDE*    W$TYPE = "HTML"    W$TITLE = "Widget Debug: ":G$WIDGET.NAME    IF GLOBAL.INFO(90) = "FAIL" THEN        W$TITLE := " (Widget Failed)"    END ELSE        W$TITLE := ' (Debug Mode)'    END    W$WIDTH = 3     ;* Maybe we can track the last known width of this widget*    IF G$QUERYMODE THEN RETURN*    OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE        W$HTML.DATA = '<h2>Unable to open WEB.FORMS</h2>'        RETURN    END    READ W$HTML.DATA FROM F.WEB.FORMS, "widget_debug.html" ELSE W$HTML.DATA = "<h2>Error: widget_debug.html is missing.</h2>"*    WIDGET.SUB.NAME = GLOBAL.INFO(91)   ;* Set by MVDB.MAIN before re-assigning the subroutine name to this program.*    EDIT.LINK = ''    IF G$ADMIN.USER THEN* Add a link to edit the subroutine        URL.SUBNAME = WIDGET.SUB.NAME        CALL SUB.URL.ENCODE(URL.SUBNAME)        EDIT.LINK = '<a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=':URL.SUBNAME:'" target="MVDB.SUBS_':URL.SUBNAME:'">Edit Subroutine</a>'    END*    UDINFO = ""    FOR UDPOS = 1 TO 100        IF WIDGET.USER.DATA(UDPOS) # "" THEN            UDINFO := '<tr><td>':UDPOS:'</td><td>':WIDGET.USER.DATA(UDPOS):'</td></tr>':CHAR(10)        END    NEXT UDPOS*    URL.WIDGET.NAME = G$WIDGET.NAME    CALL SUB.URL.ENCODE(URL.WIDGET.NAME)    IF GLOBAL.INFO(90) = "FAIL" THEN        DB.REASON = "<hr />This widget has been disabled for one of the following reasons:"        DB.REASON := '<ul><li>The widget subroutine has an error causing it to terminate unexpectedly.</li>'        DB.REASON := '<li>The page was refreshed or a new dashboard page was loaded before the widget subroutine finished running.</li>'        DB.REASON := '<li>The widget is running, but it is taking too long for it to finish.</li>'        DB.REASON := '<li>The widget subroutine encountered a system error and could not finish running.</li></ul>'        REMOVE.LINK = '<a href="/dbc/MVDB.MAIN?unfail_widget=':URL.WIDGET.NAME:'">click here</a>'        REMEDY =  "When the problem has been corrected, ":REMOVE.LINK:" to take this widget out of debug mode.<hr />"    END ELSE        DB.REASON = ""        REMEDY = ""    END** Runtime errors?*    RE.INFO = ""    OPEN '','DM,RUNTIME-ERRORS,' TO F.RUNTIME.ERRORS THEN        XLINE = 'SSELECT DM,RUNTIME-ERRORS, BY-DSND DATE BY-DSND TIME'        XLINE := ' WITH PROGNAME = "':WIDGET.SUB.NAME:'"'        EXECUTE XLINE CAPTURING JUNK    END*    MAX.ERRS = 50    ERR.CNT = 0    LOOP        READNEXT ID ELSE EXIT        READ RECORD FROM F.RUNTIME.ERRORS, ID ELSE CONTINUE        DATA RECORD<2,1>        EXECUTE "PRINT-ERR DM,MESSAGES, ":RECORD<1>:" (S" CAPTURING ERR*        CONVERT @AM TO " " IN ERR        ERR = OCONV(ERR,'MCP')        ERR = TRIM(ERR)        Prog = RECORD<4>        DESC = Prog:" ":ERR        USERPIB = RECORD<3>        STACK = ""        FOR N = DCOUNT(RECORD<5>,@VM) TO 1 STEP -1            STACK := RECORD<5,N>            IF STACK # "" AND N # 1 THEN STACK := ' --> '        NEXT N        IF RECORD<5> # '' THEN DESC := "Stack: ":STACK        MD = FIELD( RECORD<3>, ' ', 3 )** Try and find the source code to include in the feed.*        SREC = "" ; FNAME = ""        OPEN MD:",MD," TO F.MD THEN            FNAME = ""            READ CREC FROM F.MD, RECORD<4> THEN                IF CREC<1> = "VR" THEN  ;* This is a catalog pointer, file name is in field 4                    FNAME = FIELD(CREC<4>,' ',1)                    END ELSE IF CREC<1> = "PQ" THEN                        IF FIELD(CREC<2>, ' ', 1 ) = "HRUN" THEN                            FNAME = FIELD( CREC<2>, ' ', 2 )                        END                    END                END                IF FNAME # "" THEN                    OPEN MD:",":FNAME:"," TO SFILE THEN                        READ SREC FROM SFILE, RECORD<4> ELSE SREC = ""                    END                END            END            SOURCE.SNIP = ""            IF SREC # "" THEN                CALL SWAP(SREC,'&','&amp;')                CALL SWAP(SREC,'<','&lt;')                CALL SWAP(SREC,'>','&gt;')                LINENO = RECORD<2,1>                IF LINENO MATCHES "1N0N" THEN                    START.LINE = LINENO - 3                    IF START.LINE < 0 THEN START.LINE = 1                END ELSE LINENO = 1 ; START.LINE = 1                END.LINE = LINENO + 3                SOURCE.SNIP = \<code style="font-size:12px" >\                FOR Ln = START.LINE TO END.LINE                    LINE = Ln "R#4":" ":SREC<Ln>                    SOURCE.SNIP := LINE:'<br />'                NEXT Ln                SOURCE.SNIP := '</code>'                IF G$ADMIN.USER THEN                    EDIT.LINK = '<a href="/dbc/MVDB.WEB.ED?ed_acct=':MD:'&ed_file=':FNAME:'&ed_item=':Prog:'" target="':MD:'_':FNAME:'_':Prog:'">Edit Source</a>'                    SOURCE.SNIP := EDIT.LINK                END            END ELSE                SOURCE.SNIP = 'Unable to open source code for ':RECORD<4>:' in account ':MD            END            Date = FIELD(ID,'*',1)            Time = FIELD(ID,'*',2)*            RE.INFO := CHAR(10): '<tr valign="top"><td>':OCONV(Date,'D2/'):" ":OCONV(Time,'MTS'):'</td>'            RE.INFO := CHAR(10): '<td>':USERPIB:'</td>'            RE.INFO := CHAR(10): '<td>':DESC:'</td>'            RE.INFO := CHAR(10): '</tr>'            RE.INFO := CHAR(10): '<tr valign="top"><td>&nbsp;</td><td colspan="2">':SOURCE.SNIP:'</td></tr>'            ERR.CNT += 1        UNTIL ERR.CNT >= MAX.ERRS DO REPEAT        RE.INFO := CHAR(10): '</table>'        *        *PJS 01-20-16 Check for widget debug info and add to runtime errors section.        * To use this feature, widget code can call SUB.LOG.DEBUG.INFO with widget        * name and a message. The last 100 lines of message text are saved in WDB.DEBUG        * for the widget and displayed here after runtime errors by the debug widget.        OPEN 'WDB.DEBUG' TO F.WDB.DEBUG THEN            READ EXTRA.INFO FROM F.WDB.DEBUG,G$WIDGET.NAME THEN                CALL SWAP(EXTRA.INFO,@AM,CHAR(10))                RE.INFO := '<pre>':CHAR(10):EXTRA.INFO:CHAR(10):'</pre>':CHAR(10)            END        END *        CALL SWAP(W$HTML.DATA,'<!-- WIDGET_NAME -->',G$WIDGET.NAME)        CALL SWAP(W$HTML.DATA,'<!-- WIDGET_SUB_NAME -->',WIDGET.SUB.NAME)        CALL SWAP(W$HTML.DATA,'<!-- WIDGET_EDIT_LINK -->',EDIT.LINK)        CALL SWAP(W$HTML.DATA,'<!-- DEBUG_REASON -->',DB.REASON)        CALL SWAP(W$HTML.DATA,'<!-- REMEDY -->',REMEDY)        CALL SWAP(W$HTML.DATA,'<!-- WIDGET_USER_DATA -->',UDINFO)        CALL SWAP(W$HTML.DATA,'<!-- RUNTIME_ERRORS -->',RE.INFO)        RETURN0001E6WDB.TEST0c2INCLUDE WBPD WWW.INCLUDEPRINT "junk before content"PRINT CHAR(10)PRINT "Content-type: text/html"PRINT ""CALL WDB.VARS( VARS, VALS )PRINT "<pre>"PRINT "Vars: "FOR X = 1 TO DCOUNT(VARS, @AM)  PRINT VARS<X>:" = ":VALS<X>NEXT XPRINTFOR N = 45 TO 49  PRINT "WWW.INFO(":N:"): ":WWW.INFO(N)NEXT NPRINT "</pre>"PRINT '<form method="POST" action="/dbc/WDB.TEST">'PRINT '<input type="text" name="thing">'PRINT '<input type="submit" value="submit">'PRINT '</form>'*0004A5TIMEOUT.SESSION0c2** Copyright (C) 2004 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 06/03/04* Description: This program is used to timeout session records.  This program*              should be run at regular intervals to remove unused session records.*            *#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)VAL = ''*TODAY = DATE()NOW   = TIME()*OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP*CMD = 'SELECT WEB.SESSION'EXECUTE CMD CAPTURING JUNK*LOOP  READNEXT ID ELSE EXIT  READU REC FROM F.WEB.SESSION, ID THEN    LOCATE 'LastSessionAccess' IN REC<1> SETTING POS THEN      LAST.ACCESS = REC<2,POS>      LA.DAY = FIELD(LAST.ACCESS,'*',1)      LA.TIME = FIELD(LAST.ACCESS,'*',2)      IF (LA.DAY < (TODAY-1)) THEN        * If it is two days old, then get rid of it.        DELETE F.WEB.SESSION, ID      END    END ELSE      TOTAL.VARS = DCOUNT(REC<1>, @VM)      REC<1,TOTAL.VARS+1> = 'LastSessionAccess'      REC<2,TOTAL.VARS+1> = DATE():'*':TIME()      WRITE REC ON F.WEB.SESSION, ID    END  ENDREPEAT*END0006C9SET.BUFFER0c2SUBROUTINE SET.BUFFER( B.VAL )*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 11/06/03* Updated by: Peter Schellenbach, Zumasys* Date Updated : 11/30/17* Description  : This program sets the SESSION$OUTBUF.FLAG and optionally*                SESSION$OUTBUF.SIZE variables to enable or disable*                buffering of output generated by WSEND. If buffering*                is enabled, be sure to call WFLUSH to flush the final*                buffer content.**                B.VAL = 0 : disable buffering*                B.VAL = 1 : enable buffering using current buffer size*                B.VAL > 1 : enable buffering and set buffer size to*                            this value.**                By default buffering is disabled. If buffering will be*                used, call WSETBUFFER before the first call to WSEND.*                If the size of buffer content ever exceeds the buffer*                size, the buffer is flushed to the client along with*                any headers, and buffering is disabled.*              **********************************************************************INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*IF NUM(B.VAL) AND B.VAL > 0 AND B.VAL <= 1000000 THEN  * Set buffer size and enable buffering  SESSION$OUTBUF.SIZE = B.VAL  SESSION$OUTBUF.FLAG = TRUEEND ELSE  * Enable or disable buffering  IF B.VAL # TRUE AND B.VAL # FALSE THEN    IF B.VAL = "" THEN      B.VAL = FALSE    END ELSE      B.VAL = TRUE    END  END  SESSION$OUTBUF.FLAG = B.VALENDRETURNEND001671SUB.PDF.FUNC0c2SUBROUTINE SUB.PDF.FUNC(ACTION, MAIN.TEMPLATE)** Copyright (c) 2020 Zumasys, Inc. All rights reserved.* Description: PDF utility functions*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*DIM PDF$SETTINGS(10)EQU PDF$ENABLED   TO PDF$SETTINGS(1)EQU PDF$COMMAND   TO PDF$SETTINGS(2)EQU PDF$DIRECTORY TO PDF$SETTINGS(3)EQU PDF$LIFETIME  TO PDF$SETTINGS(4)*IF SYSTEM(38)<1> = 4 THEN isWindows = 1 ELSE isWindows = 0 ;*D3**OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'MATREAD PDF$SETTINGS FROM F.MVDB.CONTROL,'PDF.SETTINGS' ELSE MAT PDF$SETTINGS=''*OPEN '','WDB.DEBUG' TO F.WDB.DEBUG THEN LOGGING = 1 ELSE LOGGING = 0*BEGIN CASE  CASE ACTION = 'generate'    * HTML templates may have references to css, javascript, images, etc. so swap these to be file references    IF LOGGING THEN      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'SUB.PDF.FUNC generate')    END    IF isWindows THEN DIRSEP = '\' ELSE DIRSEP = '/'    LOCATE 'INSTALL_PATH' IN CGI$VARS SETTING POS THEN      DBROOT = CGI$VALS<POS>    END ELSE      IF isWindows THEN        DBROOT = 'C:\Program Files (x86)\Zumasys\MV Dashboard\bin\mvappsvr'      END ELSE        DBROOT = '/usr/local/mvappsvr/bin/mvappsvr'      END    END    IF isWindows THEN CONVERT '\' TO '/' IN DBROOT ;* HTML path uses forward slash    NDS = DCOUNT(DBROOT,'/')    POS = INDEX(DBROOT,'/',NDS-2)    IF POS = 0 THEN POS = LEN(DBROOT)    DBROOT = DBROOT[1,POS]:'docroot/db/'    *IF LOGGING THEN    *  SAVE.MAIN.TEMPLATE = MAIN.TEMPLATE    *END    *    * TODO: the SWAP() below handles any references to images, css & scripts    * that are found in the HTML to be rendered, but if there are references    * to images within css these are not handled. Need to figure out how to    * handle these.    *    CALL SWAP(MAIN.TEMPLATE,'/db/',DBROOT)    *    ** CLONED FROM WEB.SEND    CALL SWAP(MAIN.TEMPLATE,'<!-- CGI$PATH -->',CGI$PATH)    IF INDEX(MAIN.TEMPLATE<1>,'<!DOCTYPE',1) = 0 THEN          MAIN.TEMPLATE = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"':@AM:'"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">':MAIN.TEMPLATE    END    ** END CLONE FROM WEB.SEND    *    * Open the native content directory & get path to same    OPEN 'NATIVE.CONTENT' TO F.NATIVE.DIR ELSE      PRINT '500 ERROR: CANNOT OPEN NATIVE.CONTENT'      STOP ;* intentional stop    END    NATIVE.DIR = PDF$DIRECTORY    IF isWindows THEN CONVERT '/' TO '\' IN NATIVE.DIR ;*UV may have wrong separator!    IF NATIVE.DIR[LEN(NATIVE.DIR),1] NE DIRSEP THEN NATIVE.DIR = NATIVE.DIR : DIRSEP    *    * Generate unique ID for HTML & PDF files in NATIVE.CONTENT    CALL SUB.GET.NEXT.ID(UNIQUE.ID,F.MVDB.CONTROL)    HTM.ID=UNIQUE.ID:'.htm'    PDF.ID=UNIQUE.ID:'.pdf'    *    * Save HTML in native content directory    WRITE MAIN.TEMPLATE ON F.NATIVE.DIR,HTM.ID    *    * Build command line for PDF converter    INPFILE = NATIVE.DIR:HTM.ID    OUTFILE = NATIVE.DIR:PDF.ID    CMDLINE = PDF$COMMAND    IF CMDLINE = '' THEN      PRINT '500 ERROR: PDF CONVERT COMMAND MISSING'      STOP ;* intentional stop    END    CALL SWAP(CMDLINE,'[INPUT_FILE]',INPFILE)    CALL SWAP(CMDLINE,'[OUTPUT_FILE]',OUTFILE)    CMDLINE = '!':CMDLINE ;*D3*    *    * Execute the PDF convert command    EXECUTE CMDLINE CAPTURING OUTPUT    *TODO: check for errors creating PDF file    IF LOGGING THEN      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'Command line: ':CMDLINE)      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'docroot/db: ':DBROOT)      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'Command output:':@AM:OUTPUT)      *CALL SWAP(SAVE.MAIN.TEMPLATE,'&','&amp;')      *CALL SWAP(SAVE.MAIN.TEMPLATE,'<','&lt;')      *CALL SWAP(SAVE.MAIN.TEMPLATE,'>','&gt;')      *CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'MAIN.TEMPLATE':@AM:SAVE.MAIN.TEMPLATE)    END    *    * Send content file name to mvappsvr using special header    PRINT 'X-MVDB-CONTENT-FILE: ':OUTFILE    CALL SET.CONTENT.TYPE('application/pdf')    SESSION$HEADERS<-1> = 'Content-Disposition: attachment; filename=':PDF.ID    *    * Remove HTML file from native content directory    IF NOT(LOGGING) THEN      DELETE F.NATIVE.DIR,HTM.ID    END    *    * All done!    *  CASE ACTION = 'cleanup'    IF PDF$LIFETIME >= 999999 THEN RETURN ;* Keep PDF files forever    IF PDF$LIFETIME = 0 THEN Freq = 3600 ELSE Freq = 86400    Today = DATE()    Now = (Today * 86400) + TIME()    READU PDF.CLEANUP.REC FROM F.MVDB.CONTROL,'PDF.CLEANUP.TASK' THEN      Prev = PDF.CLEANUP.REC<1>    END ELSE      Prev = Now - Freq    END    IF Now < Prev + Freq THEN      RELEASE F.MVDB.CONTROL,'PDF.CLEANUP.TASK'      RETURN    END    IF OCONV('0','D2/')[1,2] # '31' THEN USA.DATE=1 ELSE USA.DATE=0    * Preform cleanup once per day (or once per hour for immediate removal)    PDF.CLEANUP.REC = Now    WRITE PDF.CLEANUP.REC ON F.MVDB.CONTROL,'PDF.CLEANUP.TASK' ON ERROR      NULL    END    OPEN 'NATIVE.CONTENT' TO F.NATIVE.DIR ELSE RETURN    SELECT F.NATIVE.DIR    DONE = 0    LOOP      READNEXT PDF.ID ELSE DONE = 1    UNTIL DONE DO      IF PDF.ID MATCHES '18N.pdf' OR PDF.ID MATCHES '18N.PDF' THEN        IF USA.DATE THEN          PDFTime = (ICONV(PDF.ID[5,2]:'/':PDF.ID[7,2]:'/':PDF.ID[1,4],'D') * 86400) + (PDF.ID[9,2] * 3600) + (PDF.ID[11,2] * 60) + PDF.ID[13,2]        END ELSE          PDFTime = (ICONV(PDF.ID[7,2]:'/':PDF.ID[5,2]:'/':PDF.ID[1,4],'D') * 86400) + (PDF.ID[9,2] * 3600) + (PDF.ID[11,2] * 60) + PDF.ID[13,2]        END        Expires = PDFTime + (PDF$LIFETIME * 86400) + 1800        IF Expires < Now THEN          DELETE F.NATIVE.DIR,PDF.ID ON ERROR            NULL          END        END      END    REPEAT    *END CASERETURNEND000B3EWDB.VARS0c2SUBROUTINE WDB.VARS( VARS, VALS )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 12/24/03* Description: This program is used to gather the vars and vals from a*              web request.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause** Modified By: Peter Schellenbach, Zumasys* Date: 10/25/2016* Description: Added INCLUDE WWW.INCLUDE so we have access to CGI$UNIQUE.ID*              in /WWW/ COMMON, instead of using PROCREAD / SENTENCE.**#MAKE# RL $OPTIONS D3*INCLUDE WBPD WWW.INCLUDE ; *PJS 10-25-16**VARS = ''VALS = ''VAR.POS = 1DIM TEMP(50)**PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ''*PJS 10-25-16*PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE() ; *PJS 06-12-15**PJS 10-25-16*UNIQUE.ID = FIELD( TCL.LINE, ' ', 2)UNIQUE.ID = CGI$UNIQUE.ID ;*PJS 10-25-16**OPEN '','WDB.Q' TO WDB.Q ELSE RETURN*IF (UNIQUE.ID # '') THEN  READ QSTRING FROM WDB.Q, UNIQUE.ID ELSE QSTRING = ''  CONVERT @AM TO '' IN QSTRING  QLENGTH=LEN(QSTRING)  IF QSTRING[1,1] = '"' AND QSTRING[LEN(QSTRING),1] = '"' THEN    QSTRING = QSTRING[2,LEN(QSTRING)-2] ;* UNIDATA hack  END  CONVERT '&' TO @AM IN QSTRING  FOR X = 1 TO DCOUNT( QSTRING, @AM )    IF (TRIM(FIELD(QSTRING<X>,'=',1)) # '') THEN      HEX.STRING = FIELD(QSTRING<X>, '=', 1) ; GOSUB CONVERT.HEX      VARS<VAR.POS> = HEX.STRING      EQ.POS = INDEX(QSTRING<X>,'=',1)      HEX.STRING = QSTRING<X>[EQ.POS+1,QLENGTH] ; GOSUB CONVERT.HEX      VALS<VAR.POS> = HEX.STRING      VAR.POS += 1    END  NEXT XENDRETURN*------------CONVERT.HEX:*------------HSLEN = LEN(HEX.STRING)IF HSLEN > 5000 THEN*IF 0 THEN  CHUNKLEN = INT( HSLEN / 50 )  START.POS = 1  FOR CHX = 1 TO 49    CUT.POINT = (START.POS-1) + CHUNKLEN    NCC = 0    LOOP UNTIL HEX.STRING[CUT.POINT+1,1] = "%" OR NCC > 1 DO      CUT.POINT += 1      NCC += 1    REPEAT    TEMP(CHX) = HEX.STRING[START.POS,CHUNKLEN+NCC]    START.POS += CHUNKLEN + NCC  NEXT CHX  TEMP(50) = HEX.STRING[START.POS,QLENGTH]  MAX.TEMP.LOC = 50END ELSE  TEMP(1) = HEX.STRING  MAX.TEMP.LOC = 1ENDHEX.STRING = ""FOR TEMP.LOC = 1 TO MAX.TEMP.LOC   IDX = 1  CONVERT '+' TO ' ' IN TEMP(TEMP.LOC)  LOOP    LOC = INDEX( TEMP(TEMP.LOC), '%', IDX )  WHILE LOC DO    IF TEMP(TEMP.LOC)[LOC+1,1] = "%" THEN      IDX += 2    END ELSE      SWAP.VAL = TEMP(TEMP.LOC)[LOC+1,2]      SWAP.VAL = OCONV( SWAP.VAL, 'MCU' )      SWAP.VAL = OCONV(SWAP.VAL,'MCXD')      IF SWAP.VAL MATCHES "1N0N" THEN SWAP.VAL = CHAR(SWAP.VAL)  *    SWAP.VAL = CHAR(OCONV(SWAP.VAL,'MCXD'))      TEMP(TEMP.LOC)=TEMP(TEMP.LOC)[1,LOC-1]:SWAP.VAL:TEMP(TEMP.LOC)[LOC+3,QLENGTH]      IF SWAP.VAL = '%' THEN        IDX += 1      END    END  REPEAT  HEX.STRING := TEMP(TEMP.LOC)NEXT TEMP.LOC*RETURN00219EAPP.INSTALLER0c2** Copyright (C) 2009 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo Corporation* Date: 07/15/2009* Description: Application installer** Modified By: Dave Bucklin, Nerdery Interactive Labs* Date: 02/04/2011* Description: Add overwrite flag, clashes handling specific to MVDashboard**INCLUDE DM,BP,UNIX.H FCNTL.HINCLUDE DM,BP,UNIX.H MODE.H*CHAR BUFFER[10000]*INSTALL.LOG.ON = 0INSTALL.LOG.ID = "INSTALL*":DATE():"*":TIME()INSTALL.LOG = ""PROCESS.STATUS = 0OVR.FLAG = 0*PROMPT ""PRINT "File path: ":INPUT PACKAGE.FILEIF PACKAGE.FILE = "VERSION" THEN  PRINT  PRINT "Installer Version"  PRINT "1.0"  STOPENDHANDLE = %OPEN(PACKAGE.FILE,O$RDONLY+O$BINARY)IF NOT(HANDLE) THEN  PRINT "Unable to open file." ; STOPEND*PACKET = ""LOOP  L = %READ(HANDLE,BUFFER,10000)WHILE L > 0 DO  PACKET := BUFFER[1,L]REPEATIF PACKET = "" THEN  PRINT "No package."  STOPENDINSTALL.ID = TIMEDATE()KEEP.SOURCE = "1"*PRINTPRINT "Installing..."*OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE   CMD = "CREATE-FILE MV.PACKED.FILE 1 31"  GOSUB EXEC.CMD  OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE    ERRFILE = "MV.PACKED.FILE"    GOSUB OPEN.ERR    STOP  ENDENDWRITE PACKET ON F.PACKED.FILE, "PACKAGE"OPEN '','MD' TO F.MD ELSE  ERRFILE = "MD"  GOSUB OPEN.ERR  STOPENDOPEN "MV.INSTALL" TO F.INSTALL ELSE  CMD = "CREATE-FILE MV.INSTALL 1 11"  GOSUB EXEC.CMD  OPEN "MV.INSTALL" TO F.INSTALL ELSE    ERRFILE = "MV.INSTALL"    GOSUB OPEN.ERR    STOP  ENDENDOPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE  CMD = "CREATE-FILE MV.INSTALL.CF 1 11"  GOSUB EXEC.CMD  OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE    ERRFILE = "MV.INSTALL.CF"    GOSUB OPEN.ERR    STOP  ENDENDOPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE  CMD = "CREATE-FILE MVAPPS.INSTALLED 3 31"  GOSUB EXEC.CMD  OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE    ERRFILE = "MVAPPS.INSTALLED"    GOSUB OPEN.ERR    STOP  ENDENDOPEN "DICT","MVDB.CLASHES" TO FD.MVDB.CLASHES ELSE  CMD = "CREATE-FILE DICT MVDB.CLASHES 3"  GOSUB EXEC.CMDENDINSTALL.LOG.ON = 1*CLEARFILE F.INSTALLDELETE F.INSTALL.CF, "MVAPPS-PRE-SCRIPT" ;* Get rid of this just in case one is left overDELETE F.INSTALL.CF, "MVAPPS-POST-SCRIPT"DELETE F.INSTALL.CF, "PACKAGE.INFO"TARGET = F.INSTALLTARGET.NAME = "MV.INSTALL"GOSUB UNPACK* All individual file packages are now in INSTALL* Unpack the MD scriptsREAD PACKET FROM F.INSTALL, "MV.INSTALL.CF" THEN  TARGET = F.INSTALL.CF  TARGET.NAME = "MV.INSTALL.CF"  GOSUB UNPACK  DELETE F.INSTALL, "MV.INSTALL.CF"END** Execute script that are required prior to compilation*READ CMD FROM F.INSTALL.CF, "MVAPPS-PRE-SCRIPT" THEN  LOG.LINE = TIMEDATE():": Processing PRE-INSTALL commands..."  INSTALL.LOG<-1> = LOG.LINE  * Execute commands that need to be run before the install process begins  GOSUB EXEC.CMD  LOG.LINE = TIMEDATE():": Completed PRE-INSTALL commands."  INSTALL.LOG<-1> = LOG.LINEENDREAD PACKAGE.INFO FROM F.INSTALL.CF, "PACKAGE.INFO" ELSE PACKAGE.INFO = ""PACKAGE.ID = PACKAGE.INFO<6>PACKAGE.INFO<4> = DATE()PACKAGE.INFO<5> = TIME()*SELECT F.INSTALLLOOP  READNEXT PKG.ID ELSE EXIT  IF PKG.ID # "" THEN    READ PACKET FROM F.INSTALL, PKG.ID THEN      TARGET.FILE = FIELD(PKG.ID," ",1)      DICT.MOD = FIELD( PKG.ID," ",2)      DATA.MOD = FIELD( PKG.ID," ",3)      DICT = ""      IF FIELD( PKG.ID,'_',1 ) = "DICT" THEN        TARGET.FILE = FIELD( PKG.ID, '_', 2 )        DICT = "DICT"      END      OPEN DICT,TARGET.FILE TO F.TARGET ELSE        IF NOT(INDEX(TARGET.FILE,':',1)) THEN          IF DICT.MOD = "" THEN DICT.MOD = 3          IF DATA.MOD = "" THEN DATA.MOD = 31          CMD = "CREATE-FILE ":TARGET.FILE:" ":DICT.MOD:" ":DATA.MOD          GOSUB EXEC.CMD        END        OPEN DICT,TARGET.FILE TO F.TARGET ELSE          PRINT "Unable to create file ":TARGET.FILE          GOSUB CLEANUP          STOP        END      END      TARGET = F.TARGET      TARGET.NAME = TRIM(DICT:" ":TARGET.FILE)      GOSUB UNPACK    END  ENDREPEAT** Execute script required post compilation*READ CMD FROM F.INSTALL.CF, "MVAPPS-POST-SCRIPT" THEN  LOG.LINE = TIMEDATE():": Processing POST-INSTALL commands..."  INSTALL.LOG<-1> = LOG.LINE  * Use compile options if they are present.  OPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL THEN    READ COMPILE.SETUP FROM F.MVDB.CONTROL, 'COMPILE.SETUP' THEN      COMPILE.VERB = FIELD(COMPILE.SETUP<1>,' ',1)      IF COMPILE.VERB # '' THEN        OPTS = FIELD(COMPILE.SETUP<1>,'(',2)        IF OPTS # '' THEN OPTS = "(":OPTS        CMD.CNT = DCOUNT( CMD, @AM )        FOR CMD.XX = 1 TO CMD.CNT          IF FIELD(CMD<CMD.XX>,' ',1) = 'BASIC' OR FIELD(CMD<CMD.XX>,' ',1) = 'COMPILE' THEN            *make sure we use the right verb and options from the compile.setup            CMD<CMD.XX> = COMPILE.VERB:' ':CMD<CMD.XX>[INDEX(CMD<CMD.XX>,' ',1)+1,999]:' ':OPTS          END        NEXT CMD.XX      END    END  END  * Execute commands that need to be run at the end of the install process  GOSUB EXEC.CMD  LOG.LINE = TIMEDATE():": Completed POST-INSTALL commands."  INSTALL.LOG<-1> = LOG.LINEEND***IF NOT(KEEP.SOURCE) THEN**  FOR X = 1 TO DCOUNT( SOURCE.FILES, @AM )**    CMD = "CLEAR-FILE DATA ":SOURCE.FILES<X>**    GOSUB EXEC.CMD**  NEXT X**ENDREAD INSTALL.LIST FROM F.INSTALL.CF, "LAST.INSTALL" ELSE INSTALL.LIST = ""INSTALL.LIST = INSERT( INSTALL.LIST, 1, 0, 0, INSTALL.ID )WRITE INSTALL.LIST ON F.INSTALL.CF, "LAST.INSTALL"GOSUB CLEANUPINSTALL.LOG<-1> = TIMEDATE():": Install complete."WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.IDWRITE PACKAGE.INFO ON F.MVAPPS.INSTALLED, PACKAGE.IDPROCESS.STATUS = 1GOSUB SEND.DATASTOP*********UNPACK: **********PRINT "Unpacking ":TARGET.NAME:"... ":*BYTES = 0CNT = 0LOOP  PLENGTH = OCONV( PACKET[1,6], 'MCXD' )  REC = PACKET[7,PLENGTH]  PACKET = PACKET[PLENGTH+7,9999999]  ID = REC<1>  REC = DELETE( REC, 1, 0, 0 )  TYP = REC[1,2]  OVR.FLAG = REC[3,1]  REC = REC[4,9999999]  IF TYP = "0x" THEN    REC = OCONV( REC, 'MY' )  END ELSE IF TYP # "0c" THEN    REC = TYP:REC  END  *  CNT += 1  BYTES += LEN(REC)  IF OVR.FLAG THEN    IF DICT = "" THEN      *If we're not installing DICT items, compare for CLASHES      READ CLASH FROM TARGET, ID THEN        BEGIN CASE          *Preserve dashboard user passwords          CASE TARGET.FILE = "MVDB.USERS"            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>          *Preserve dashboard access profile          CASE TARGET.FILE = "MVDB.DEFS"            IF CLASH<5> # REC<5> THEN REC<5> = CLASH<5>          *Preserve widget access profile          CASE TARGET.FILE = "MVDB.WIDGETS"            IF CLASH<2> # REC<2> THEN REC<2> = CLASH<2>          *Preserve widget compile option          CASE TARGET.FILE = "MVDB.CONTROL" AND ID = "COMPILE.SETUP"            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>        END CASE        IF CLASH # '' AND REC # CLASH THEN          CLASH.NAME = TARGET.NAME          CONVERT " " TO "_" IN CLASH.NAME          OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE            CMD = "CREATE-FILE DATA MVDB.CLASHES,":CLASH.NAME:" 7"            GOSUB EXEC.CMD            OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE              PRINT "Unable to create file MVDB.CLASHES,":CLASH.NAME              GOSUB CLEANUP              STOP            END          END          WRITE CLASH ON F.CLASHES, ID          CLOSE F.CLASHES        END      END    END    WRITE REC ON TARGET, ID  END ELSE    READ TST FROM TARGET, ID ELSE      WRITE REC ON TARGET, ID    END  END  IF NOT(MOD(CNT,500)) THEN PRINT "*":UNTIL PACKET = "" DO REPEATIF CNT # 1 THEN PLURAL = "s" ELSE PLURAL = ""PRINT CNT:" record":PLURAL:"."LOG.LINE = TIMEDATE():": UNPACKED ":CNT:" RECORDS TO ":TARGET.NAMEINSTALL.LOG<-1> = LOG.LINERETURN**********CLEANUP: ***********CLEARFILE F.INSTALLCLEARFILE F.PACKED.FILERETURN*EXEC.CMD: **CMD.CNT = DCOUNT( CMD, @AM )FOR CMD.XX = 1 TO CMD.CNT  THIS.CMD = CMD<CMD.XX>  LOG.LINE = TIMEDATE():": EXEC: ":THIS.CMD  INSTALL.LOG<-1> = LOG.LINE  EXECUTE THIS.CMD CAPTURING JUNK  IF INSTALL.LOG.ON THEN    WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID  ENDNEXT CMD.XXRETURN*OPEN.ERR: **LOG.LINE = TIMEDATE():": FILE OPEN ERROR: ":ERRFILEINSTALL.LOG<-1> = LOG.LINEPRINT LOG.LINEGOSUB SEND.DATARETURN*SEND.DATA: **PRINTIF PROCESS.STATUS = 1 THEN INSTALL.STATUS = "Success" ELSE INSTALL.STATUS = "Failed"PRINT "Install process finished. Status: ":INSTALL.STATUSRETURN0019BBWEB.SEND0c2SUBROUTINE WEB.SEND(FORM)********************** (C) Copyright 2003 Sierra Bravo Corporation, All rights reserved.** Program: WEB.SEND* Library: WBP*  Author: Luke J. Bucklin*    Date: 2/29/00** Purpose: Send the web page.** Modified By  : Mike Schmidt, Sierra Bravo* Date Revised : 11/06/2003* Modification : The program was modified to account for the following:*                1) Header Management: This program will check to see*                   if the content type has been written to the browser*                   before ever printing anything to standard out.  If*                   the headers have not been sent, the program will print*                   the headers using the SESSION$CONTENT.TYPE,*                   SESSION$HEADERS, and SESSION$COOKIES session variables.*                   The program will then set the SESSION$CONTENT.SENT*                   variable.*                   WARNING: This program assumes that the global SESSION*                   variables were setup prior to using this subroutine.*                   WARNING: The SESSION$OUTBUF.SIZE should not be relied*                   upon to prevent the buffer from exceeding the set limit.*                   This program simply flushes the buffer if it exceeds*                   the set size limit.**                2) Buffer Management: Instead of always printing every*                   thing to standard out, by default the program will*                   write everything passed into into the SESSION$OUTBUF*                   variable.  This program will then flush the buffer*                   under certain situations.  The first is if the buffer*                   size reaches the limit set in SESSION$OUTBUF.SIZE. If*                   this happens the prgram will flush the buffer then*                   reinitialize it.  The second is if the SESSION$OUTBUF.FLAG*                   is set to FALSE, then this program will always flush*                   the buffer.**                3) The program will display debug information if the global*                   variable SESSION$GLOBAL.DEBUG flag is >= 3.** Modified by Peter Schellenbach of Zumasys 12-15-15 for new PDF generation feature*   do not append form & @AM to output buffer if form is null*   do not add DOCTYPE to output unless content type is html*   do not include debug output if content type is not html or xml** 09-23-16 Tom Parker - Eliminate GO_BACK button support and replace with*          logic to handle standard browser back button (need to prevent browser*          from caching MVDB pages).** 04-21-17 Peter Schellenbach - send response status code before Content-type,*          if set (X-MVDB-STATUS private header).** 10-18-17 Peter Schellenbach - removed duplicate debug info section. Changed condition*          for sending debug info to SESSION$GLOBAL.DEBUG >= 3 instead of = 1.*          Eliminate extra AM appended to the form data.*********************** Add the incoming string to the buffer.INCLUDE WBPD WWW.INCLUDE*IF NOT(ASSIGNED(SESSION$CONTENT.SENT)) THEN  MAT WWW.INFO = ""  SESSION$CONTENT.SENT = 1END*SHOW.SESSION.VARS = 0IF SESSION$GLOBAL.DEBUG >= 3 THEN  OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SHOW.SESSION.VARS = 1END*IF FORM <> '' THEN  CALL SWAP(FORM,'<!-- CGI$PATH -->',CGI$PATH)  *PJS 09-21-2017*SESSION$OUTBUF := FORM:@AM  SESSION$OUTBUF := FORM ; *PJS 09-21-2017*END** If the buffer is greater then the max size or the buffer flag is false then flush.IF LEN(SESSION$OUTBUF) >= SESSION$OUTBUF.SIZE OR NOT(SESSION$OUTBUF.FLAG) THEN* Before flushing, check to see if the headers have been send.  IF NOT(SESSION$CONTENT.SENT) THEN    IF SESSION$STATUS.CODE > 0 THEN* 04-21-17 send the status code before headers      PRINT "X-MVDB-STATUS: ":SESSION$STATUS.CODE    END* The headers have not been sent so send them now.    IF SESSION$CONTENT.TYPE = "" THEN      CALL SET.CONTENT.TYPE("")    END* If there are any cookies that need to be set, do it now.    PRINT "Content-type: ":SESSION$CONTENT.TYPE* If there are any cookies that need to be set, do it now.    FOR I = 1 TO DCOUNT(SESSION$COOKIES,@AM)      COOKIE = SESSION$COOKIES<I>      IF INDEX(COOKIE, "; path=", 1) + INDEX(COOKIE, ";path=", 1) = 0 THEN COOKIE := "; path=/"      PRINT "Set-Cookie: ":COOKIE    NEXT I* If there are any additional headers that need to be set, do it now.* 9-23-16 *    PRINT 'Cache-Control: no-cache'    PRINT 'Expires: Mon, 26 Jul 1997 05:00:00 GMT'; * 9-26-13 *    PRINT 'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'; * 9-26-13 *    PRINT 'Pragma: no-cache'; * 9-26-13 *    FOR I = 1 TO DCOUNT(SESSION$HEADERS,@AM)      PRINT SESSION$HEADERS<I>    NEXT I* Now print the blank line that ends the headers.    PRINT    IF INDEX(SESSION$CONTENT.TYPE,'html',1) THEN      IF INDEX(SESSION$OUTBUF<1>,'<!DOCTYPE',1) = 0 THEN        PRINT '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'        PRINT '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'      END    END* Set the SESSION$CONTENT.SENT variable so next time we know not to send the headers.    SESSION$CONTENT.SENT = 1* From this point on, do not buffer.    IF SESSION$OUTBUF.FLAG THEN      CALL SET.BUFFER(0)    END  END  LINE.CNT = DCOUNT( SESSION$OUTBUF, @AM )  FOR LINE.J = 1 TO LINE.CNT    PRINT SESSION$OUTBUF<LINE.J>  NEXT LINE.J  IF SESSION$GLOBAL.DEBUG >= 3 THEN    IF INDEX(SESSION$CONTENT.TYPE,'xml',1) OR INDEX(SESSION$CONTENT.TYPE,'html',1) THEN* If the debug flag is set then dump all the session information to the browser.      PRINT '<!-- Debug Information generated by WEB.SEND.  This feature can be turned off by'      PRINT '     setting the SESSION$GLOBAL.DEBUG = "1" in the initalization program     -->'      PRINT '<!-- START DEBUG OUPUT '      PRINT '     GET AND POST VARS:'      FOR I = 1 TO DCOUNT(CGI$VARS,@AM)        PRINT '     ':CGI$VARS<I>:' = ':CGI$VALS<I>      NEXT I      PRINT      IF SHOW.SESSION.VARS THEN        PRINT '    SESSION VARIABLES:'        PRINT '    SESSION$ID = ':SESSION$ID        READ REC FROM F.WEB.SESSION, SESSION$ID THEN          PRINT '    SESSION DATE = ':OCONV(REC<3>,'D4/')          PRINT '    SESSION TIME = ':OCONV(REC<4>,'MTS,')          FOR I = 1 TO DCOUNT(REC<1>,@VM)            PRINT '    ':REC<1,I>:' = ':REC<2,I>          NEXT I        END      END        PRINT '    END DEBUG OUTPUT -->'        PRINT      END    END  SESSION$OUTBUF = ''  END  RETURNEND000A3BMVDB.SUB.WIDGET.LIST0c2SUBROUTINE MVDB.SUB.WIDGET.LIST(WIDGET.LIST)** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Produce a list of defined widgets.**#MAKE# RL $OPTIONS D3OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'END*INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGETS*CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS) ;* Retrieve a list of failed widgets this sessionCALL GET.SESSION.VAR("running_widget",FAILED.WIDGET)CALL GET.SESSION.VAR("running_widget_dt",FAILED.WIDGET.DT)IF FAILED.WIDGET # "" THEN  FW.DATE = FIELD( FAILED.WIDGET.DT, '*', 1 )  FW.TIME = FIELD( FAILED.WIDGET.DT, '*', 2 )  FW.LAPSE = TIME() - FW.TIME  FW.LAPSE += ((DATE() - FW.DATE) * 86400)  IF FW.LAPSE < 2 THEN FAILED.WIDGET = "" ;* No more than 2 seconds to run a widget in query modeENDIF FAILED.WIDGET # "" THEN  CALL PUT.SESSION.VAR("running_widget","")  CALL PUT.SESSION.VAR("running_widget_dt","")  LOCATE FAILED.WIDGET IN FAILED.WIDGETS SETTING FWPOS ELSE    FAILED.WIDGETS<-1> = FAILED.WIDGET    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  ENDEND*WIDGET.LIST = ''*EXECUTE 'SSELECT MVDB.WIDGETS' CAPTURING JUNK*DP = 0LOOP  READNEXT ID ELSE EXIT  MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, ID ELSE MAT WIDGET.ITEM = ''  DP += 1  WIDGET.LIST<1,DP> = ID  SUBNAME = WIDGET.SUB  G$QUERYMODE = 1  G$WIDGET.NAME = ID  MAT WIDGET.INFO = ''  MAT WIDGET.USER.DATA = ''  MAT GLOBAL.TEMP.DATA = ''  MAT GLOBAL.USER.DATA = ''  FAIL.STATUS = 0 ;* Okay  FAIL.TEXT = ""  LOCATE ID IN FAILED.WIDGETS SETTING POS THEN    W$TYPE = "FAILED"    W$TITLE = "Failed Widget - ":SUBNAME    W$WIDTH = 3    FAIL.STATUS = 1 ;* Failed    FAIL.TEXT = "Subroutine Failed"  END ELSE    READ CATPTR FROM F.MD, SUBNAME THEN      CALL PUT.SESSION.VAR("running_widget",ID)      DT.STAMP = DATE():"*":TIME()      CALL PUT.SESSION.VAR("running_widget_dt",DT.STAMP)      CALL @SUBNAME      CALL PUT.SESSION.VAR("running_widget","")      CALL PUT.SESSION.VAR("running_widget_dt","")    END ELSE      W$TYPE = "FAILED"      W$TITLE = "Not Cataloged - ":SUBNAME      W$WIDTH = 3      FAIL.TEXT = "Subroutine Not Cataloged"    END  END  IF FIELD(W$TYPE,':',1) = "MAP" THEN W$TYPE = "MAP"  WIDGET.LIST<3,DP> = SUBNAME  WIDGET.LIST<4,DP> = W$TYPE  WIDGET.LIST<5,DP> = W$TITLE  WIDGET.LIST<6,DP> = W$WIDTH  WIDGET.LIST<7,DP> = FAIL.STATUS  WIDGET.LIST<8,DP> = FAIL.TEXTREPEATRETURN000DA9RSS.MAIN0c2* RSS.MAIN** Program: RSS.MAIN* Author: Luke Bucklin* Date: 2/23/2009** Purpose: Create an RSS feed using user-defined subroutine calls*INCLUDE WBPD WWW.INCLUDEINCLUDE RSS.BP RSS.DATA.INC*CALL SET.CONTENT.TYPE("application/xml")*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE STOP 201, 'RSS.FEEDS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'ENDOPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'*FEED.REC = ""LOCATE "feed" IN CGI$VARS SETTING POS THEN  feed = CGI$VALS<POS>  READ FEED.REC FROM F.RSS.FEEDS, feed ELSE FEED.REC = ""ENDIF FEED.REC = "" THEN  feed = "FEEDS"  READ FEED.REC FROM F.RSS.FEEDS, feed ELSE    CALL SET.CONTENT.TYPE("application/xml")    CALL WEB.SEND('<H1>No feeds configured</H1>')    STOP  ENDENDSEL.SUB = FEED.REC<4>ITEM.SUB = FEED.REC<5>MAT RSS.DATA = ""RSS$FEED.REC = FEED.RECREAD CATPTR FROM F.MD, SEL.SUB ELSE CATPTR = ""IF CATPTR<1> = "VR" THEN  CALL @SEL.SUB(CGI$VARS,CGI$VALS,feed,F.FEED.FILE,MAT RSS.DATA)END ELSE  RSS$FEED.REC<1> = "Feed error: ":SEL.SUB:" not cataloged."ENDFEED.REC = RSS$FEED.RECCALL RSS.XML.ENCODE(FEED.REC,1)FEED.TITLE = FEED.REC<1>FEED.LINK = "http://":CGI$SERVER.NAME:CGI$PATH:'/RSS.MAIN?feed=':feedIF FEED.REC<2> # "" THEN FEED.LINK := "&":FEED.REC<2>FEED.DESC = FEED.REC<3>XML = ""XML<-1> = '<?xml version="1.0" ?>'XML<-1> = '<rss version="2.0">'XML<-1> = '<channel>'XML<-1> = ' <title>':FEED.TITLE:'</title>'XML<-1> = ' <link>':FEED.LINK:'</link>'SHOW.DESC = FEED.DESCIF SHOW.DESC = "" THEN SHOW.DESC = FEED.TITLEXML<-1> = ' <description>':SHOW.DESC:'</description>'XML<-1> = ' <generator>Sierra Bravo Pick RSS</generator>'XDATE = DATE()XTIME = TIME()GOSUB MAKE.DATE.TIMEXML<-1> = ' <lastBuildDate>':DATE.TIME:'</lastBuildDate>'*IF SYSTEM(11) THEN  SELECT TO ID.LISTEND ELSE ID.LIST = ""SUB.ERR = 0LOOP  READNEXT RID FROM ID.LIST ELSE EXIT  READ FEED.REC FROM F.FEED.FILE, RID ELSE EXIT  READ CATPTR FROM F.MD, ITEM.SUB ELSE CATPTR = ""  IF CATPTR<1> = "VR" THEN    CALL @ITEM.SUB(CGI$VARS,CGI$VALS,F.FEED.FILE,RID,FEED.REC,MAT RSS.DATA)  END ELSE    SUB.ERR = 1    MAT RSS.DATA = ""    RSS$TITLE = "Subroutine ":ITEM.SUB:" not cataloged."    RSS$DESCRIPTION = "Feed Error"    RSS$DATE = ICONV("1/1/2000",'D')    RSS$TIME = ICONV("12:00:00",'MT')  END  FOR XX = 1 TO 5    CALL RSS.XML.ENCODE(RSS.DATA(XX),1)  NEXT XX  XML<-1> = '<item>'  XML<-1> = ' <title>':RSS$TITLE:'</title>'  IF INDEX(RSS$LINK,'//',1) THEN    LINK = RSS$LINK  END ELSE IF RSS$LINK # "" THEN    LINK = "http://":CGI$SERVER.NAME:CGI$PATH:'/':RSS$LINK  END ELSE    LINK = ""  END  XML<-1> = ' <link>':LINK:'</link>'  XML<-1> = ' <author>':RSS$AUTHOR:'</author>'  XML<-1> = ' <description><![CDATA['  XML<-1> = RSS$DESCRIPTION  XML<-1> =']]></description>'  XDATE = RSS$DATE  XTIME = RSS$TIME  GOSUB MAKE.DATE.TIME  XML<-1> = '<pubDate>':DATE.TIME:'</pubDate>'  XML<-1> = '</item>'  CALL WEB.SEND(XML)  XML = ''REPEATXML<-1> = '</channel>'XML<-1> = '</rss>'CALL WEB.SEND(XML)STOP*MAKE.DATE.TIME: **READV GMT.OFFSET FROM F.MVDB.CONTROL, 'MVDB.SETTINGS', 6 ELSE GMT.OFFSET = 0IF XTIME = "" THEN XTIME = TIME()IF XDATE = "" THEN XDATE = DATE()*XTIME += ICONV("5:00",'MT')XTIME += 3600 * (GMT.OFFSET * (-1))IF XTIME > 86400 THEN  XTIME -= 86400  XDATE += 1ENDDATE.TIME = OCONV(XDATE,'DWA')[1,3]:', ':OCONV(XDATE,'DD'):' ':OCONV(XDATE,'DMA')[1,3]:' ':OCONV(XDATE,'DY'):' ':OCONV(XTIME,'MTS')RETURN000296SET.CONTENT.TYPE0c2SUBROUTINE SET.CONTENT.TYPE( C.TYPE )*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 10/25/03* Description  : This program sets the SESSION$CONTENT.TYPE variable.*              ***********************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*IF C.TYPE = "" THEN  C.TYPE = "text/html"END*SESSION$CONTENT.TYPE = C.TYPE*RETURN*0023EFMVDB.INIT0c2*** Copyright (C) 2020 Zumasys, Inc., All Rights Reserved* Description: perform common dashboard startup functions** 9-23-16 TPARKER MODIFICATIONS TO ELIMINATE GO_BACK AND REPLACE WITH*         STANDARD BROWSER BACK BUTTION** 10-25-16 Peter Schellenbach - moved this out of INIT.WWW and into*          this new MVDB.INIT program to handle all MVDB-specific*          initialization, then launch individual MVDB resource*          programs (MVDB.MAIN, MVDB.ADMIN, MVDB.WEB.ED).**          Additional browser back button fixes:*            - do not save and restore SESSION as this reflects the login status*              and after a logout, using browser back and forward, then logging*              back in may cause unexpected logout by using browser back or forward.*              Only current_db is restored when backing up.*            - push current state before letting MVDB.MAIN process the request.*              Since any Go button click or link click only affects a single widget,*              only WIDGET.USER.DATA for that specific needs to be pushed. The widget*              can be identified by examining CGI variables 'sw' and 'udview' at the*              next level. We do not know which widget state to save at level 'n'*              until we receive a request for level 'n+1' which specifies user input*              or drilldown for a specific widget. At this time the widget state*              is saved for the previous stack level.*            - no need to save and restore CGI variables, as these are all supplied*              in the query string in the URL, and when going back up the stack,*              the URL and query string matches the stack, so the CGI variables*              are identical.*            - include the PATH_INFO in the URL when pushing on stack, since we*              need to handle other resources (MVDB.ADMIN, MVDB.WEB.ED) besides*              MVDB.MAIN.*EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*OPEN 'WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, 'WEB.SESSION'OPEN 'WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS' ;** this is in /WWW/ common **OPEN 'MVDB.UDATA' TO F.MVDB.UDATA ELSE STOP 201, 'MVDB.UDATA'*IF CGI$RESOURCE.NAME = '' THEN CGI$RESOURCE.NAME = 'MVDB.MAIN' ;* safe default*MAT GLOBAL.INFO = ''** Combine headers & cgi vars (MVDB programs don't use CGI$HEADERVARS/CGI$HEADERVALS*IF CGI$HEADERVARS <> "" THEN  IF CGI$VARS = "" THEN    CGI$VARS = CGI$HEADERVARS    CGI$VALS = CGI$HEADERVALS  END ELSE    NUM.HDR.VARS = COUNT(CGI$HEADERVARS, @AM)    NUM.HDR.VALS = COUNT(CGI$HEADERVALS, @AM)    IF NUM.HDR.VARS >= NUM.HDR.VALS THEN      * Since there may be missing (null) vals at end of CGI$HEADERVALS,      * add appropriate number of @AM to keep vars & vals in sync!      CGI$VARS = CGI$HEADERVARS : @AM : CGI$VARS      CGI$VALS = CGI$HEADERVALS : STR(@AM, NUM.HDR.VARS - NUM.HDR.VALS + 1) : CGI$VALS    END  ENDEND** Validate the HTTP method*METHOD = 'UNKNOWN'LOCATE "REQUEST_METHOD" IN CGI$VARS SETTING POS THEN METHOD = OCONV(CGI$VALS<POS>, 'MCU')IF METHOD <> 'GET' AND METHOD <> 'POST' THEN  PRINT '500 ERROR Unsupported HTTP Method ':METHOD  STOPEND** Load the session ID if there is one*CALL GET.SESSION.ID(SESSION$ID, CGI$VARS, CGI$VALS)IF (SESSION$ID = '') THEN  CALL CREATE.SESSION(SESSION$ID)  CALL SET.COOKIE("sessionid=":SESSION$ID)END** How many active users are online?*SELECT F.WEB.SESSIONUSER.COUNT = 0LOOP  READNEXT WSID ELSE EXIT  READ SREC FROM F.WEB.SESSION, WSID ELSE CONTINUE  LOCATE "userid" IN SREC<1> SETTING UPOS THEN USER.COUNT += 1REPEATPRINT "Client-Count: ":USER.COUNT** Browser "back" button handler*READ DD.STACK FROM F.MVDB.UDATA, SESSION$ID:'$DD.STACK' ELSE DD.STACK=''NEW.STACK.ITEM = 1MAX.DDS = 0CALL REBUILD.URL.STRING(URL.STRING)LOCATE "PATH_INFO" IN CGI$VARS SETTING POS THEN  URL.PATH =  CGI$VALS<POS>  IF URL.PATH = "" OR URL.PATH = "/" THEN URL.PATH = CGI$PATH:"/MVDB.MAIN"  IF URL.PATH[1,1] # "/" THEN URL.PATH = "/":URL.PATHEND ELSE URL.PATH = "/dbc/MVDB.MAIN"URL = URL.PATH:'?':URL.STRING**W$GOBACK=0***CALL SUB.LOG.DEBUG.INFO('MVDB.INIT','BEGIN REQUEST, SESSION=':SESSION$ID:' URL=':URL:' CUR STACK LEVEL=':DCOUNT(DD.STACK,AM):' METHOD=':METHOD)*IF DD.STACK <> '' THEN  MAX.DDS = DCOUNT(DD.STACK,AM)  IF INDEX(DD.STACK,URL,1) THEN    DD.POS = MAX.DDS    LOOP      IF DD.POS THEN        IF URL = DD.STACK<DD.POS> THEN          NEW.STACK.ITEM = 0        END      END    UNTIL NOT(DD.POS) OR NOT(NEW.STACK.ITEM) DO      DD.POS = DD.POS - 1    REPEAT    IF DD.POS THEN*** BACK BUTTON USED SO POP OFF PREVIOUS DRILLDOWNS*      GOSUB PURGE.URLS.AFTER.BACK      READ GUD FROM F.MVDB.UDATA, SESSION$ID:'$DD.':DD.POS:'.GUD' ELSE GUD=''      WRITE GUD ON F.MVDB.UDATA, SESSION$ID:'$UG'      READ WUD FROM F.MVDB.UDATA, SESSION$ID:'$DD.':DD.POS:'.WUD' ELSE WUD = ''      URL.WIDGET = WUD<1>      IF URL.WIDGET <> 'NULL' THEN        WRITE DELETE(WUD,1,0,0) ON F.MVDB.UDATA, SESSION$ID:'$':URL.WIDGET      END      READ SESSION FROM F.MVDB.UDATA, SESSION$ID:'$DD.':DD.POS:'.SESSION' ELSE SESSION=''      LOCATE "userid" IN SESSION<1> SETTING POS THEN userid = SESSION<2,POS> ELSE userid = ''      IF userid <> '' THEN* Restore current dashboard from drilldown stack, but leave other session variables alone        LOCATE "current_db" IN SESSION<1> SETTING POS THEN current_db = SESSION<2,POS> ELSE current_db = ''        CALL PUT.SESSION.VAR("current_db", current_db)      END**        W$GOBACK=1    END  ENDEND*IF NEW.STACK.ITEM THEN* POST-REDIRECT-GET pattern causes extra GET after POST, but only* the GET is on browser history, so skip duplicate URLs based on* special CGI variables 'dblogin' and 'dbprg' (note: dbprg is not* being used at this time).  LOCATE "dblogin" IN CGI$VARS SETTING POS THEN dblogin = CGI$VALS<POS> ELSE dblogin = 0  LOCATE "dbprg" IN CGI$VARS SETTING POS THEN dbprg = CGI$VALS<POS> ELSE dbprg = 0  IF NOT(dblogin) AND NOT(dbprg) THEN* Push the new URL and session state onto the stack    MAX.DDS += 1    DD.STACK<MAX.DDS> = URL* Save global user before running request    READ GUD FROM F.MVDB.UDATA, SESSION$ID:"$UG" ELSE GUD = ''    WRITE GUD ON F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS:'.GUD'* Get widget name from request CGI variables & save widget user data before running request    GOSUB GET.URL.WIDGET    IF URL.WIDGET = '' THEN      DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS-1:'.WUD'    END ELSE      READ WUD FROM F.MVDB.UDATA, SESSION$ID:'$':URL.WIDGET ELSE WUD = ''      WRITE INSERT(WUD,1,0,0,URL.WIDGET) ON F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS-1:'.WUD'    END    READ SESSION FROM F.WEB.SESSION, SESSION$ID ELSE SESSION = ''    IF SESSION = '' THEN      DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS:'.SESSION'    END ELSE      WRITE SESSION ON F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS:'.SESSION'    END  ENDENDIF DD.STACK = '' THEN  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.STACK'END ELSE  WRITE DD.STACK ON F.MVDB.UDATA, SESSION$ID:'$DD.STACK'END** Run the MVDB program for this resource and check for failure*LOOP  TRY.AGAIN = 0  APP.FAILURE = 0  EXECUTE CGI$RESOURCE.NAME  IF GLOBAL.INFO(100) # 1 THEN* The dashboard controller quit unexpectedly. If there is a running* widget, it is likely causing the failure. Fail it, and try again.    APP.FAILURE = 1    CALL GET.SESSION.VAR("running_widget",FAILED.WIDGET)    IF FAILED.WIDGET # "" THEN      CALL PUT.SESSION.VAR("running_widget","")      CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS)      LOCATE FAILED.WIDGET IN FAILED.WIDGETS SETTING FWPOS ELSE        FAILED.WIDGETS<-1> = FAILED.WIDGET        CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)        TRY.AGAIN = 1      END    END    LOCATE "unfail_widget" IN CGI$VARS SETTING DPOS THEN      CGI$VARS = DELETE( CGI$VARS, DPOS, 0, 0 )      CGI$VALS = DELETE( CGI$VALS, DPOS, 0, 0 )    END  ENDWHILE TRY.AGAIN DO REPEATIF APP.FAILURE THEN  CALL WEB.SEND("An application error occured in program ":CGI$RESOURCE.NAME:".<hr>")  HTML = '<table><tr><th>Variable</th><th>Value</th></tr>'  FOR X = 1 TO DCOUNT( CGI$VARS, @AM )    HTML<-1> = '<tr><td>':CGI$VARS<X>:'</td><td>':CGI$VALS<X>:'</td></tr>'  NEXT X  HTML<-1> = '</table>'  CALL WEB.SEND(HTML)END* Final WEB.FLUSH call moved from WDB.INIT to here (makes deploying MVConnect to other accounts simpler)CALL WEB.FLUSH** Done*STOP** SUPPORT ROUTINES FOR BACK BUTTON HANDLER*PURGE.URLS.AFTER.BACK:*FIRST.PURGE = DD.POS + 1IF FIRST.PURGE > MAX.DDS THEN RETURNFOR PURGE.CNTR = MAX.DDS TO FIRST.PURGE STEP -1  DD.STACK = DELETE(DD.STACK,PURGE.CNTR,0,0)  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':PURGE.CNTR:'.GUD'  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':PURGE.CNTR:'.WUD'  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':PURGE.CNTR:'.SESSION'NEXT PURGE.CNTRRETURN*GET.URL.WIDGET:*URL.WIDGET='NULL'LOCATE "sw" IN CGI$VARS SETTING POS THEN  URL.WIDGET = CGI$VALS<POS>END ELSE  LOCATE "udview" IN CGI$VARS SETTING POS THEN    URL.WIDGET = CGI$VALS<POS>  ENDENDRETURN*END0003F5VALIDATE.SESSION0c2SUBROUTINE VALIDATE.SESSION( FLAG )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo* Date Written : 11/7/2003* Description  : This program will validate the session.*             ****************************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)FLAG = FALSEIF SESSION$ID # "" THEN  READ REC FROM F.WEB.SESSION, SESSION$ID THEN    SESSION.DATE = REC<3>        SESSION.TIME = REC<4>    CURRENT.DATE = DATE()    CURRENT.TIME = TIME()    MAX.SECONDS = 86400; * Total number of seconds in a day    MAX.DIFF.AMOUNT = SESSION$TIME.OUT * 60 ; * Get the time in seconds    CURRENT.TIME = ((CURRENT.DATE - SESSION.DATE) * MAX.SECONDS) + CURRENT.TIME    DIFF.TIME = CURRENT.TIME - SESSION.TIME    IF DIFF.TIME <= MAX.DIFF.AMOUNT THEN      FLAG = TRUE    END  ENDEND*RETURN*005963MV.DEBUG0c2* WDEBUG** Debug REST Services* Copyright (c) 2017 Zumasys Inc.* Rewritten by Peter Schellenbach, 10/18/2017** Based on original version:*  Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved*  Written by: Luke Bucklin, Sierra Bravo*  Date: Sometime, 2006-ish*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD FI.WDB.DEBUG*CLR.SCR = @(-1)CLR.EOS = @(-3)MAX.LINES = SYSTEM(3) - 4MAX.COLS = SYSTEM(2) - 1IF MAX.LINES <= 0 OR CLR.SCR = '' OR CLR.EOS = '' THEN  MAX.LINES = 20  CLR.SCR = ''  CLR.EOS = ''  PRMPT.LINE = CHAR(13):CHAR(10)END ELSE  PRMPT.LINE = @(0, MAX.LINES + 2):CLR.EOSENDPROMPT ''*PRINT CLR.SCR:PRINTPRINT 'WDEBUG Web Request Degug Tool'PRINTPRINT 'The WDEBUG tool allows you to inspect, modify and re-run web requests.'PRINT 'Whenever a request for a debuggable resource is processed by WDB.INIT,'PRINT 'a debug record for the request is added to the WDB.DEBUG file. WDEBUG'PRINT 'allows you to select a debug record, view the request details, edit the'PRINT 'request variables, re-run the request and view the response.'PRINTPRINT 'To debug web requests for a resource, set attribute 7 of the WDB.RESOURCE'PRINT 'record for the resource to 1, then issue the web request from the client'PRINT 'browser or other agent. WDEBUG will show a list of recent web requests to'PRINT 'select from.'PRINTPRINT 'Start WDEBUG with an active select list if you need to use special criteria'PRINT 'to select the record(s) you need to debug.'PRINTPRINT 'Press <enter> to continue':INPUT ANS*OPEN 'WDB.DEBUG' TO F.WDB.DEBUG ELSE  PRINT 'The WDB.DEBUG data file is required to use WDEBUG. Default installations'  PRINT 'only create the dictionary for this file. Please create the data section'  PRINT 'to use WDEBUG: CREATE-FILE DATA WDB.DEBUG 101.'  STOPEND*SESSION.FLAG = 0OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SESSION.FLAG = 1 ;* can restore session when running debug reqest*EDITOR = ''IDS = ''NUM.IDS = 0IF SYSTEM(11) THEN  LOOP    READNEXT ID ELSE EXIT    READV X FROM F.WDB.DEBUG, ID, 1 THEN      IDS<-1> = ID      NUM.IDS += 1    END ELSE      PRINT ID:' not found in WDB.DEBUG!'    END  REPEATENDUSE.SUPPLIED.LIST = (NUM.IDS > 0)*LOOP  IF NOT(USE.SUPPLIED.LIST) THEN* Select available WDB.DEBUG items    CMND = 'SSELECT WDB.DEBUG WITH TYPE = "C" "R" BY-DSND DATE BY-DSND TIME'    EXECUTE CMND CAPTURING RESULT    IF SYSTEM(11) = 0 THEN      PRINT "No items found."      STOP    END    IDS = ''    NUM.IDS = 0    LOOP      READNEXT ID ELSE EXIT      IDS<-1> = ID      NUM.IDS += 1    REPEAT  END*  TOP = 0  LOOP* Display page of items    PRINT CLR.SCR:    PRINT "Ln Date. Time.... Path................ Remote Address...... Request ID........."    FOR CNTR = 1 TO MAX.LINES UNTIL CNTR + TOP > NUM.IDS      DBG.ID = IDS<CNTR>      READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE CONTINUE      PATH.INFO = DBGREC<WDBG_PATH>      IF PATH.INFO = '' THEN PATH.INFO = DBGREC<WDBG_HANDLER>:'/':DBGREC<WDBG_RESOURCE>      PRINT CNTR "R#2 ":      PRINT OCONV(DBGREC<WDBG_DATE>, 'D0-') "L#5 ":      PRINT OCONV(DBGREC<WDBG_TIME>, 'MTS') "L#8 ":      PRINT PATH.INFO "L#20 ":      PRINT DBGREC<WDBG_REMOTE_ADDR> "L#20 ":      PRINT DBGREC<WDBG_REQUEST_ID>[1,20]    NEXT CNTR    IF TOP + MAX.LINES > NUM.IDS THEN BOT = NUM.IDS ELSE BOT = TOP + MAX.LINES    PRINT "Showing items ":(TOP + 1):"-":BOT:" of ":NUM.IDS*    LOOP      PRINT PRMPT.LINE:"Command: (Q)uit (R)efresh (C)lear (N)ext (P)rev (##) Line to debug: ":      INPUT COMMAND      IF COMMAND MATCHES '1N0N' THEN        IF COMMAND >= 1 AND COMMAND <= MAX.LINES AND COMMAND + TOP <= NUM.IDS THEN          DBG.ID = IDS<COMMAND + TOP>          GOSUB debug.request        END        COMMAND = ''      END ELSE        COMMAND = OCONV(COMMAND[1,1], 'MCU')        IF COMMAND = '' THEN COMMAND = 'N'        IF INDEX('ERCNPQ', COMMAND, 1) = 0 THEN COMMAND = ''      END    WHILE COMMAND = '' DO REPEAT*    BEGIN CASE      CASE COMMAND = 'N'        IF TOP + MAX.LINES < NUM.IDS THEN TOP += MAX.LINES      CASE COMMAND = 'P'        IF TOP - MAX.LINES >= 0 THEN TOP -= MAX.LINES    END CASE  WHILE COMMAND = 'N' OR COMMAND = 'P' DO REPEAT*UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'R' ; NULL    CASE COMMAND = 'C'      EXECUTE 'SELECT WDB.DEBUG WITH TYPE = "C" "R"'      PRINT 'Are you sure you want to clear these items from the WDB.DEBUG file? ':      INPUT ANS      ANS = OCONV(ANS[1,1],'MCU')      IF ANS = 'Y' THEN        IF SYSTEM(11) THEN          LOOP            READNEXT ID ELSE EXIT            DELETE F.WDB.DEBUG, ID          REPEAT        END      END ELSE        CLEARSELECT      END  END CASEREPEATSTOP**----------debug.request:*----------*READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE  PRINT "The selected item '":DBG.ID:"' is not available!"  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDEDIT.ID = 'D':DBG.ID[2, LEN(DBG.ID)]LOOP  PRINT PRMPT.LINE:"Debugging ":DBG.ID[1,28]:" - command: (Q)uit (V)iew (E)dit (R)un: ":  INPUT COMMAND  COMMAND = OCONV(COMMAND[1,1], 'MCU')UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'V'      GOSUB view.request    CASE COMMAND = 'E'      GOSUB edit.request    CASE COMMAND = 'R'      GOSUB run.request  END CASEREPEATRETURN**----------view.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDGOSUB to.editNUM.LNS = DCOUNT(EDIT.REC, @AM)I = 1LOOP WHILE I <= NUM.LNS DO  X = EDIT.REC<I>  IF LEN(X) > MAX.COLS THEN    X = FOLD(X, MAX.COLS, @AM)    EDIT.REC<I> = X    N = COUNT(X, @AM)    NUM.LNS += N    I += N  END  I += 1REPEATIF NUM.LNS = 0 THEN NUM.LNS = 1NUM.PGS = INT((NUM.LNS - 1) / MAX.LINES) + 1CUR.PG = 1LOOP  PG.TOP = (CUR.PG - 1) * MAX.LINES  IF PG.TOP + MAX.LINES > NUM.LNS THEN LPP = NUM.LNS - PG.TOP ELSE LPP = MAX.LINES  PRINT CLR.SCR:  PRINT 'Page ':CUR.PG:' of ':NUM.PGS:SPACE(10):DBG.ID  PRINT  FOR I = 1 TO LPP    PRINT EDIT.REC<I + PG.TOP>  NEXT I  PRINT PRMPT.LINE:'Command: (Q)uit (N)ext (P)rev (##) Goto page ':  INPUT COMMAND  IF COMMAND MATCHES '1N0N' THEN    IF COMMAND >= 1 AND COMMAND <= NUM.PGS THEN CUR.PG = COMMAND  END ELSE    COMMAND = OCONV(COMMAND[1,1], 'MCU')  ENDUNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'N' OR COMMAND = ''      IF CUR.PG < NUM.PGS THEN CUR.PG = CUR.PG + 1    CASE COMMAND = 'P'      IF CUR.PG > 1 THEN CUR.PG = CUR.PG - 1  END CASEREPEATRETURN**----------edit.request:*----------*IF EDITOR = '' THEN GOSUB choose.editorIF EDITOR <> '' THEN  EDIT.ID = 'D':DBG.ID  GOSUB to.edit  WRITE EDIT.REC ON F.WDB.DEBUG, EDIT.ID  CMND = EDITOR:' WDB.DEBUG ':EDIT.ID  EXECUTE CMND  READ EDIT.REC FROM F.WDB.DEBUG, EDIT.ID ELSE NULL  DELETE F.WDB.DEBUG, EDIT.ID  GOSUB from.editENDRETURN**----------run.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNEND*HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* Reconstruct query stringQSTR = ''QSEP = ''* headers and server variablesN = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_HEADER_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* form variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_CGI_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_CGI_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  URLENCODE.STRING = CHANGE(THE.BODY, @VM, CHAR(10))  GOSUB url.encode  QSTR := QSEP:'__body__=':NEW.STRINGEND* restore session stateIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    SESSION.REC = ''    SESSION.REC<1> = DBGREC<WDBG_SESSION_VARS>    SESSION.REC<2> = DBGREC<WDBG_SESSION_VALS>    SESSION.REC<3> = DBGREC<WDBG_SESSION_DATE>    SESSION.REC<4> = DBGREC<WDBG_SESSION_TIME>    WRITE SESSION.REC ON F.WEB.SESSION, SESSION.ID  ENDEND* break the query string into 1000 byte chunksN = INT((LEN(QSTR) - 1) / 1000) + 1* build the command lineRUN.ID = DBGREC<WDBG_REQUEST_ID>CMND = 'WDB.INIT ':HANDLER.NAME:'/':RESOURCE.NAME:' ':RUN.ID:'-1-':N:' %% _WDEBUG_MODE_'** run the commandPRINTPRINT 'Executing the request: ':CMNDPRINTMAT WWW.INFO = ""EXECSTART = SYSTEM(12)* send query string as stacked inputFOR I = 1 TO N  DATA QSTR[((I - 1) * 1000) + 1, 1000]NEXT IEXECUTE CMND CAPTURING RESPONSEEXECDUR = SYSTEM(12) - EXECSTARTPRINT 'Request complete. Press <enter> to parse results':INPUT ANS** update the request runtimeDBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_DURATION> = EXECDUR* process the responseLINT.BEFORE = ''LINT.AFTER = ''WARN = ''ERR = ''* Gather lint from before the start tag and after the complete tagDBGREC<WDBG_WARNING> = '' ;* WarningsDBGREC<WDBG_ERROR> = '' ;* ErrorsDBGREC<WDBG_LINT> = '' ;* LintIF RESPONSE<1> = "700 WDB-START" THEN  RESPONSE = DELETE(RESPONSE, 1)END ELSE  TAG = @AM:"700 WDB-START":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '700 WDB-START tag is missing from response'    LINT.BEFORE = RESPONSE    RESPONSE = ''  END ELSE    IF TAG.POS >= 1 THEN      LINT.BEFORE = RESPONSE[1, TAG.POS - 1]      RESPONSE = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    END  ENDENDN = DCOUNT(RESPONSE, @AM)IF RESPONSE<N> = "800 WDB-COMPLETE" THEN  RESPONSE = DELETE(RESPONSE, N)END ELSE  TAG = @AM:"800 WDB-COMPLETE":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '800 WDB-COMPLETE tag missing from response!'  END ELSE    LINT.AFTER = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    RESPONSE = RESPONSE[1, TAG.POS - 1]  ENDEND* Clean up lintIF TRIM(CHANGE(LINT.BEFORE, @AM, '')) = '' THEN LINT.BEFORE = ''IF TRIM(CHANGE(LINT.AFTER, @AM, '')) = '' THEN LINT.AFTER = ''IF LINT.BEFORE <> '' OR LINT.AFTER <> '' THEN  LINT = LINT.BEFORE  IF LINT.BEFORE <> '' AND LINT.AFTER <> '' THEN LINT := @AM:'...':@AM  LINT := LINT.AFTER  DBGREC<WDBG_LINT> = CHANGE(CHANGE(LINT, @VM, @SVM), @AM, @VM)END* Parse the response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''DBGREC<WDBG_RESPONSE_CONTENT> = ''NUM.VARS = 0STATUS.CODE = ''EOH = INDEX(RESPONSE, @AM:@AM, 1) ;* headers end at first blank line in responseIF EOH = 0 THEN EOH = LEN(RESPONSE) + 1N = DCOUNT(RESPONSE[1, EOH - 1], @AM)FOR I = 1 TO N  HDR.LINE = RESPONSE<I>  IF HDR.LINE[1,10] = '500 ERROR ' THEN    ERR = HDR.LINE[11, LEN(HDR.LINE)]    IF STATUS.CODE = '' THEN STATUS.CODE = 500  END ELSE    HDR.VAR = FIELD(HDR.LINE, ':', 1)    HDR.VAL = TRIMF(HDR.LINE[COL2() + 1, LEN(HDR.LINE)])    M = LEN(HDR.VAR)    FOR J = 1 TO M      IF NOT(HDR.VAR[J,1] MATCHES '1A') AND HDR.VAR[J,1] <> '-' THEN        HDR.VAR = ''        EXIT      END    NEXT J    IF HDR.LINE[LEN(HDR.VAR) + 1, 1] <> ':' THEN HDR.VAR = ''    IF HDR.VAR = '' THEN      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = '_BAD_'      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.LINE ;* invalid header line!    END ELSE      IF HDR.VAR = 'X-MVDB-STATUS' THEN        STATUS.CODE = HDR.VAL      END ELSE        NUM.VARS += 1        DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = HDR.VAR        DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.VAL      END    END  ENDNEXT IIF STATUS.CODE = '' THEN STATUS.CODE = 200DBGREC<WDBG_STATUS> = STATUS.CODE* save response contentIF EOH + 2 <= LEN(RESPONSE) THEN  DBGREC<WDBG_RESPONSE_CONTENT> = CHANGE(CHANGE(RESPONSE[EOH + 2, LEN(RESPONSE)], @VM, @SVM), @AM, @VM)ENDDBGREC<WDBG_WARNING> = WARNDBGREC<WDBG_ERROR> = ERRRETURN**----------to.edit:*----------*EDIT.REC = ''EDIT.REC<-1> = '[INFO] (do not edit this section)'EDIT.REC<-1> = 'Date            = ':OCONV(DBGREC<WDBG_DATE>,'D4')EDIT.REC<-1> = 'Time            = ':OCONV(DBGREC<WDBG_TIME>,'MTS')EDIT.REC<-1> = 'Duration        = ':DBGREC<WDBG_DURATION>EDIT.REC<-1> = 'Port            = ':DBGREC<WDBG_PORT>EDIT.REC<-1> = 'Handler         = ':DBGREC<WDBG_HANDLER>EDIT.REC<-1> = 'Resource        = ':DBGREC<WDBG_RESOURCE>EDIT.REC<-1> = 'Controller      = ':DBGREC<WDBG_CONTROLLER>EDIT.REC<-1> = 'Program         = ':DBGREC<WDBG_PROGRAM>EDIT.REC<-1> = 'RequestID       = ':DBGREC<WDBG_REQUEST_ID>EDIT.REC<-1> = 'Method          = ':DBGREC<WDBG_METHOD>EDIT.REC<-1> = 'Path            = ':DBGREC<WDBG_PATH>EDIT.REC<-1> = 'RemoteAddr      = ':DBGREC<WDBG_REMOTE_ADDR>EDIT.REC<-1> = 'Status          = ':DBGREC<WDBG_STATUS>IF DBGREC<WDBG_WARNING> <> '' THEN  EDIT.REC<-1> = 'WARNING: ':DBGREC<WDBG_WARNING>ENDIF DBGREC<WDBG_ERROR> <> '' THEN  EDIT.REC<-1> = 'ERROR: ':DBGREC<WDBG_ERROR>ENDIF DBGREC<WDBG_LINT> <> '' THEN  EDIT.REC<-1> = 'LINT:':@AM:CHANGE(CHANGE(DBGREC<WDBG_LINT>, @VM, @AM), @SVM, @VM)END* Request headers and server variablesEDIT.REC<-1> = @AM:'[HEADERS]'N = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  HDR.VAL = DBGREC<WDBG_HEADER_VALS, I>  EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VALNEXT I* Query string variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[VARS]'  FOR I = 1 TO N    CGI.VAR = DBGREC<WDBG_CGI_VARS, I>    CGI.VAL = DBGREC<WDBG_CGI_VALS, I>    EDIT.REC<-1> = CGI.VAR:SPACE(16-LEN(CGI.VAR)):'= ':CGI.VAL  NEXT IEND* CookiesLOCATE 'HTTP_COOKIE' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  CSTRING = DBGREC<WDBG_HEADER_VALS, POS>END ELSE CSTRING = ''CONVERT ';' TO @AM IN CSTRINGN = DCOUNT(CSTRING, @AM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[COOKIES]'  FOR I = 1 TO N    COOKIE.VAR = TRIM(FIELD(CSTRING<I>, '=', 1))    COOKIE.VAL = CSTRING<I>[COL2() + 1, 99999]    EDIT.REC<-1> = COOKIE.VAR:SPACE(16-LEN(COOKIE.VAR)):'= ':COOKIE.VAL  NEXT IEND* REST parametersLOCATE 'PATH_INFO' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  PATH = DBGREC<WDBG_HEADER_VALS, POS>END ELSE PATH = ''IF PATH[1,1] = '/' THEN PATH = PATH[2,9999]N = DCOUNT(PATH, '/')IF N > 0 THEN  EDIT.REC<-1> = @AM:'[PARAMS]'  FOR I = 3 TO N    PARAM.VAR = 'Param[':(I-2):']'    EDIT.REC<-1> = PARAM.VAR:SPACE(16-LEN(PARAM.VAR)):'= ':FIELD(PATH, '/', I)  NEXT IEND* Session variablesIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    N = DCOUNT(DBGREC<WDBG_SESSION_VARS>, @VM)    IF N > 0 THEN      EDIT.REC<-1> = @AM:'[SESSION]'      EDIT.REC<-1> = '_SessionID      = ':SESSION.ID      IF DBGREC<WDBG_SESSION_DATE> <> '' THEN EDIT.REC<-1> = '_Date           = ':OCONV(DBGREC<20>, 'D4')      IF DBGREC<WDBG_SESSION_TIME> <> '' THEN EDIT.REC<-1> = '_Time           = ':OCONV(DBGREC<21>, 'MTS')      FOR I = 1 TO N        SESSION.VAR = DBGREC<WDBG_SESSION_VARS, I>        EDIT.REC<-1> = SESSION.VAR:SPACE(16-LEN(SESSION.VAR)):'= ':DBGREC<WDBG_SESSION_VALS, I>      NEXT I    END  ENDEND* Request bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  EDIT.REC<-1> = @AM:'[BODY]':@AM:CHANGE(CHANGE(THE.BODY, @VM, @AM), @SVM, @VM)END* Response headersN = DCOUNT(DBGREC<WDBG_RESPONSE_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[RESPONSE_HEADERS]'  FOR I = 1 TO N    HDR.VAR = DBGREC<WDBG_RESPONSE_VARS, I>    HDR.VAL = DBGREC<WDBG_RESPONSE_VALS, I>    EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VAL  NEXT IEND* Response contentTHE.CONTENT = DBGREC<WDBG_RESPONSE_CONTENT>IF THE.CONTENT <> '' THEN  EDIT.REC<-1> = @AM:'[RESPONSE_CONTENT]':@AM:CHANGE(CHANGE(THE.CONTENT, @VM, @AM), @SVM, @VM)END*RETURN**----------from.edit:*----------*SESSION.ID = ''HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* If COOKIES section exists, rebuild HTTP_COOKIE headerCOOKIES = ''SECT = 'COOKIES'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    COOKIE = EDIT.REC<I>    IF COOKIE <> '' THEN      COOKIE.NAME = TRIM(FIELD(COOKIE, '=', 1))      COOKIE.VAL = TRIMF(COOKIE[COL2() + 1, LEN(COOKIE)])      COOKIES := COOKIE.NAME:'=':COOKIE.VAL:';'      IF OCONV(COOKIE.NAME, 'MCU') = 'SESSIONID' THEN SESSION.ID = COOKIE.VAL    END  NEXT I  IF COOKIES[LEN(COOKIES), 1] = ';' THEN COOKIES = COOKIES[1, LEN(COOKIES) - 1]END* If PARAMS section exists, rebuild PATH_INFO headerPARAMS = ''SECT = 'PARAMS'GOSUB find.sectionIF SECT.START > 0 THEN  PNUM = 1  FOR I = SECT.START + 1 TO SECT.END    PARAM = EDIT.REC<I>    IF PARAM <> '' THEN      PARAM.NAME = TRIM(OCONV(FIELD(PARAM, '=', 1), 'MCU'))      PARAM.VAL = TRIMF(PARAM[COL2() + 1, LEN(PARAM)])      IF PARAM.NAME <> 'PARAM[':PNUM:']' THEN EXIT      PARAMS := '/':PARAM.VAL      PNUM += 1    END  NEXT I  IF PARAMS <> '' THEN PARAMS = '/':HANDLER.NAME:'/':RESOURCE.NAME:PARAMS ;* handler & resource come before paramsEND* Get headers and server variablesDBGREC<WDBG_HEADER_VARS> = ''DBGREC<WDBG_HEADER_VALS> = ''NUM.VARS = 0SECT = 'HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])* check for special headers      BEGIN CASE        CASE OCONV(VAR.NAME, 'MCU') = 'HTTP_COOKIE'          IF COOKIES <> '' THEN            VAR.VAL = COOKIES          END        CASE OCONV(VAR.NAME, 'MCU') = 'PATH_INFO'          IF PARAMS <> '' THEN            VAR.VAL = PARAMS          END          IF VAR.VAL[1,1] <> '/' THEN VAR.VAL = '/' : VAR.VAL          IF COUNT(VAR.VAL, '/') >= 2 THEN            HANDLER.NAME = FIELD(VAR.VAL, '/', 2)            RESOURCE.NAME = FIELD(VAR.VAL, '/', 3)          END          DBGREC<WDBG_PATH> = VAR.VAL        CASE OCONV(VAR.NAME, 'MCU') = 'REQUEST_METHOD'          DBGREC<WDBG_METHOD> = VAR.VAL              CASE OCONV(VAR.NAME, 'MCU') = 'REMOTE_ADDR'          DBGREC<WDBG_REMOTE_ADDR> = VAR.VAL      END CASE      NUM.VARS += 1      DBGREC<WDBG_HEADER_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_HEADER_VALS, NUM.VARS> = VAR.VAL    END  NEXT I  DBGREC<WDBG_HANDLER> = HANDLER.NAME  DBGREC<WDBG_RESOURCE> = RESOURCE.NAMEEND* Get form variablesDBGREC<WDBG_CGI_VARS> = ''DBGREC<WDBG_CGI_VALS> = ''NUM.VARS = 0SECT = 'VARS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_CGI_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_CGI_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get bodyDBGREC<WDBG_BODY> = ''SECT = 'BODY'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.BODY = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_BODY> = CHANGE(CHANGE(THE.BODY, @VM, @SVM), @AM, @VM)  ENDEND* Get session stateIF SESSION.FLAG AND SESSION.ID <> '' THEN  DBGREC<WDBG_SESSION_ID> = ''  DBGREC<WDBG_SESSION_VARS> = ''  DBGREC<WDBG_SESSION_VALS> = ''  DBGREC<WDBG_SESSION_DATE> = ''  DBGREC<WDBG_SESSION_TIME> = ''  NUM.VARS = 0  SECT = 'SESSION'  GOSUB find.section  IF SECT.START > 0 THEN    FOR I = SECT.START + 1 TO SECT.END      SESSION.LINE = EDIT.REC<I>      SESSION.VAR = TRIM(FIELD(SESSION.LINE, '=', 1))      SESSION.VAL = TRIMF(SESSION.LINE[COL2() + 1, LEN(SESSION.LINE)])      BEGIN CASE        CASE SESSION.VAR = '_SessionID'          DBGREC<WDBG_SESSION_ID> = SESSION.VAL        CASE SESSION.VAR = '_Date'          DBGREC<WDBG_SESSION_DATE> = ICONV(SESSION.VAL, 'D')        CASE SESSION.VAR = '_Time'          DBGREC<WDBG_SESSION_TIME> = ICONV(SESSION.VAL, 'MTS')        CASE 1          NUM.VARS += 1          DBGREC<WDBG_SESSION_VARS, NUM.VARS> = SESSION.VAR          DBGREC<WDBG_SESSION_VALS, NUM.VARS> = SESSION.VAL      END CASE    NEXT I  ENDEND* Get response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''NUM.VARS = 0SECT = 'RESPONSE_HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get response contentDBGREC<WDBG_RESPONSE_CONTENT> = ''SECT = 'RESPONSE_CONTENT'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.CONTENT = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_RESPONSE_CONTENT> = CHANGE(CHANGE(THE.CONTENT, @VM, @SVM), @AM, @VM)  ENDENDRETURN**----------choose.editor:*----------*PRINTLOOP  PRINT 'Select the editor you want to use: 1 = ED, 2 = other: ':  INPUT ANSUNTIL ANS EQ '' DO  BEGIN CASE    CASE ANS = 1      EDITOR = 'ED'      EXIT    CASE ANS = 2      PRINT 'Enter the verb to invoke your editor: ':      INPUT TMP      PRINT TMP:' OK?':      INPUT ANS      ANS = OCONV(ANS[1,1], 'MCU')      IF ANS = 'Y' THEN        EDITOR = TMP        EXIT      END  END CASEREPEATRETURN**----------find.section:*----------*SECT.START = -1SECT.END = -1TAG = @AM:'[':SECT:']':@AMTAG.POS = INDEX(EDIT.REC, TAG, 1)IF TAG.POS = 0 THEN RETURN ;* Section not foundSECT.START = DCOUNT(EDIT.REC[1, TAG.POS], @AM)SECT.END = DCOUNT(EDIT.REC, @AM)FOR I = SECT.START + 1 TO SECT.END  SECT.LN = EDIT.REC<I>  IF SECT.LN MATCHES '"["1A0A"]"' OR SECT.LN MATCHES '"["1A0A"_"1A0A"]"' THEN* beginning of next section is end of current section    SECT.END = I - 1    EXIT  ENDNEXT IRETURN**----------url.encode:*----------*NEW.STRING = ""UE.LEN = LEN(URLENCODE.STRING)FOR UEX = 1 TO UE.LEN  UE.CHR = URLENCODE.STRING[UEX,1]  UE.CVAL = SEQ(UE.CHR)  BEGIN CASE    CASE UE.CVAL < 32; ENC.FLAG = 1   ;* control character    CASE UE.CVAL = 37 OR UE.CVAL = 38 OR UE.CVAL = 43 OR UE.CVAL = 61; ENC.FLAG = 1 ;* % & + =    CASE UE.CVAL = 127; ENC.FLAG = 1  ;* DEL control character    CASE UE.CVAL >= 252; ENC.FLAG = 1 ;* delimiter character    CASE 1 ; ENC.FLAG = 0  END CASE  IF ENC.FLAG THEN    UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')  END  NEW.STRING := UE.CHRNEXT UEXRETURN*END000872CREATE.SESSION0c2SUBROUTINE CREATE.SESSION( SESSION.ID )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program creates a unique session record and*              returns the session id to the calling program.**          WARNING: This program relys on MvInternet to generate*                       its unique ID.  If you are testing your program*                       from TCL, this will FAIL and you will not get*                       any session ID returned.** Modified by  : Mike Schmidt, Sierra Bravo Corporation* Date Revised : 11/6/2003* Modification : Modified to add the date and time to attributes 3 and 4.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause** Modified By: Peter Schellenbach, Zumasys* Date: 10/25/2016* Description: Added INCLUDE WWW.INCLUDE so we have access to F.WEB.SESSION*              in /WWW/ COMMON, instead of opening file here. Use F.WEB.SESSION*              instead of WEB.SESSION for file variable. Removed PROCREAD /*              SENTENCE since CGI$UNIQUE.ID is also in /WWW/ COMMON.** Init*#MAKE# RL $OPTIONS D3EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*INCLUDE WBPD WWW.INCLUDE ; *PJS 10-25-16**SESSION.ID = ''**PJS 10-25-16*OPEN '','WEB.SESSION' TO WEB.SESSION ELSE SESSION.ID = 'ERROR'*PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ""; SESSION.ID = 'ERROR'*PJS 10-25-16*PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE(); *PJS 06-12-15**PJS 10-25-16*SESSION.ID = FIELD( TCL.LINE, ' ', 2 )*SESSION.ID = CGI$UNIQUE.ID ;* PJS 10-25-16*IF SESSION.ID = "" THEN SESSION.ID = "ERROR" ; *PJS 06-12-15*CONVERT '{' TO '' IN SESSION.IDCONVERT '}' TO '' IN SESSION.ID*IF (SESSION.ID # 'ERROR') THEN  SESSION.ID = SESSION.ID:'-':DATE():'-':TIME()  SESSION.REC = ""  SESSION.REC<3> = DATE()  SESSION.REC<4> = TIME()  WRITE SESSION.REC ON F.WEB.SESSION, SESSION.IDENDSESSION$ID = SESSION.IDCALL PUT.SESSION.VAR('LastSessionAccess', DATE():'*':TIME())*RETURN*END00029BSET.STATUS.CODE0c2SUBROUTINE SET.STATUS.CODE( STATUS.CODE )*********************************************************************** Copyright (C) 2020 Zumasys, Inc., All Rights Reserved** Written By   : Peter Schellenbach* Date Written : 04/21/2017* Description  : This program sets the response status code sent*                back to client. Successful requests should return*                status code 200 (this is the default). Status code*                500 indicates a generic server failure.*              **********************************************************************INCLUDE WBPD WWW.INCLUDESESSION$STATUS.CODE = STATUS.CODE*RETURN*000338XML.ENCODE0c2SUBROUTINE XML.ENCODE(STRING.TO.PARSE, FLAG)** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: David Kam (Probably), Sierra Bravo* Date: Unknown* Description: Encode text prior to inserting into XML documents**#MAKE# RL $OPTIONS D3IF STRING.TO.PARSE # '' THEN  IF INDEX(STRING.TO.PARSE,'<!CDATA[',1) > 0 THEN    FLAG = 'X'  END  IF INDEX(STRING.TO.PARSE,']]>',1) > 0 THEN    FLAG = 'X'  END  IF FLAG = 'C' THEN    STRING.TO.PARSE = '<[!CDATA[':STRING.TO.PARSE:']]>'  END ELSE    CALL SWAP(STRING.TO.PARSE,'&','&amp;')    CALL SWAP(STRING.TO.PARSE,'<','&lt;')    CALL SWAP(STRING.TO.PARSE,'>','&gt;')    CALL SWAP(STRING.TO.PARSE,'"','&quot;')    CALL SWAP(STRING.TO.PARSE,"'",'&#39;') ;*dmb 12/7/10 &apos; wasn't rendering correctly in IE8  ENDENDRETURN0009A5XML.DATA0c2CALL WDB.VARS(VARS, VALS)DISPLAY.TERM = 1WEB.DATA = ''LINE.CNT = 1NUM.BYTES = 0****************************************** q = number of bytes to quit early on* default is full dump****************************************LOCATE 'q' IN VARS SETTING POS THEN  q = VALS<POS>END ELSE  q = ''END****************************************** l = number of lines of text to print* default is 10000****************************************LOCATE 'l' IN VARS SETTING POS THEN  l = VALS<POS>END ELSE  l = 10000END****************************************** b = number of characters per line* default is 10****************************************LOCATE 'b' IN VARS SETTING POS THEN  b = VALS<POS>END ELSE  b = 10END****************************************** w = use web.load or print* if w is 0, then use WEB.LOAD* default is 0****************************************LOCATE 'w' IN VARS SETTING POS THEN  w = VALS<POS>END ELSE  w = 0END****************************************** p = number of seconds to pause before*     starting to send output* default is 0****************************************LOCATE 'p' IN VARS SETTING POS THEN  p = VALS<POS>END ELSE  p = 0END****************************************** s = which quit string to use* default = 800 WDB-COMPLETE****************************************LOCATE 's' IN VARS SETTING POS THEN  s = VALS<POS>END ELSE  s = '800 WDB-COMPLETE'END****************************************** MAIN PROGRAM****************************************IF w # 0 THEN  SLEEP pENDFOR X = 1 TO l  NUM.CHARS = LEN(LINE.CNT) + 1  LINE = ''  NUM.ZEROS = b - NUM.CHARS  FOR Y = 1 TO NUM.ZEROS    LINE := '0'    NUM.BYTES += 1  NEXT Y  LINE := LINE.CNT  NUM.BYTES += LEN(LINE.CNT) + 1 ; * this is for the line counter and the line break  GOSUB CHECK.EARLY.TERMINATE  IF w = 0 THEN    WEB.DATA<-1> = LINE    IF TERM.DATA # '' THEN      WEB.DATA<-1> = TERM.DATA    END  END ELSE    PRINT LINE    IF TERM.DATA # '' THEN      PRINT TERM.DATA    END  END  LINE.CNT += 1NEXT XIF w = 0 THEN  SLEEP p  CALL WEB.SEND(WEB.DATA)ENDSTOP*********************************************************************************CHECK.EARLY.TERMINATE:********************************************************************************TERM.DATA = ''IF q # '' AND NUM.BYTES >= q AND DISPLAY.TERM = 1 THEN  TERM.DATA = s:CHAR(10):CHAR(10)  DISPLAY.TERM = 0ENDRETURN*0002DCGET.SESSION.VAR0c2SUBROUTINE GET.SESSION.VAR( var, VAL )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program reads a value from the current web*              session record.*#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)VAL = ''*READ REC FROM F.WEB.SESSION, SESSION$ID THEN  LOCATE var IN REC<1> SETTING POS THEN    VAL = REC<2,POS>  END ELSE    VAL = ''  ENDEND*CONVERT CHAR(2) TO @AM IN VALCONVERT CHAR(3) TO @VM IN VALCONVERT CHAR(4) TO @SVM IN VAL*CALL PUT.SESSION.VAR('LastSessionAccess', DATE():'*':TIME())*RETURN*0002D0SUB.GET.NEXT.ID0c2SUBROUTINE SUB.GET.NEXT.ID(NewID,F.CONTROL)** Copyright (c) 2020 Zumasys, Inc. All rights reserved.* Description: generate a (probably) unique ID based on current time, date and counter** Pass MVDB.CONTROL file variable, returns new ID* Up to 10,000 IDs can be generated per second without collision* Returned ID format: YYYYMMDDHHMMSSNNNN*D = DATE()T = TIME()HHMMSS = OCONV(OCONV(T,'MTS'),'MCN')YYYY = OCONV(D,'DY')IF LEN(YYYY) < 4 THEN YYYY=YYYY+2000MM = OCONV(D,'DM') 'R%%'DD = OCONV(D,'DD') 'R%%'CTR = 1READVU CTR FROM F.CONTROL,'NEXT.ID.COUNTER',1 ELSE CTR = 1ENDWRITE CTR+1 ON F.CONTROL,'NEXT.ID.COUNTER' ON ERROR NULLENDNewID = YYYY:MM:DD:HHMMSS:(CTR 'R%%%%')RETURNEND000DDDMVDB.PURGE.SESSIONS0c2* @(#) MVDB.PURGE.SESSIONS Ported to jBASE 17:00:17  08 JUL 2015*  The following variable names were converted*   DATE,TIME* ** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Purge old session data** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed TCLREAD to use SENTENCE() - its more portable* 11-30-15 TOM PARKER - PURGE BASED ON PASSED USERID* 01-25-16 TOM PARKER - DONT AUTO PURGE EMAILED AND WEBSERVICE LOGINS FOR 10 MINUTES**#MAKE# RL $OPTIONS D3    OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, 'WEB.SESSION'    OPEN '','MVDB.UDATA' TO F.MVDB.UDATA ELSE STOP 201, 'MVDB.UDATA'    OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'*    READ SETTINGS.REC FROM F.MVDB.CONTROL, 'MVDB.SETTINGS' ELSE SETTINGS.REC = ""    PURGE.AGE = SETTINGS.REC<5> * 3600  ;* Specified in hours    IF PURGE.AGE = 0 THEN PURGE.AGE = 8 * 3600**PJS 06-12-15*TCLREAD TCL.LINE    TCL.LINE = SENTENCE()     ;*PJS 06-12-15*    PS.LIST = OCONV( TCL.LINE, 'G1 999' )    PS.LIST = TRIM( PS.LIST )    CONVERT " " TO @AM IN PS.LIST*11-30-15*    IF PS.LIST # "" THEN*11-30-15*        XLINE = "SELECT WEB.SESSION "*11-30-15*        FOR N = 1 TO DCOUNT(PS.LIST,@AM)*11-30-15*            XLINE := "'":PS.LIST<N>:"' "*11-30-15*        NEXT N*11-30-15*        EXECUTE XLINE CAPTURING JUNK*11-30-15*        FORCE.PURGE = 1*11-30-15*    END ELSE*11-30-15*        EXECUTE 'SSELECT WEB.SESSION' CAPTURING JUNK*11-30-15*        FORCE.PURGE = 0*11-30-15*    END    EXECUTE 'SSELECT WEB.SESSION' CAPTURING JUNK; *11-30-15*    PURGE.LIST = ''    LOOP        READNEXT SESS.ID ELSE EXIT        READ SESS.REC FROM F.WEB.SESSION,SESS.ID ELSE SESS.REC = ''        PURGE.THIS = 0        PURGE.WEBSERVICE=0;  *01-25-16**11-30-15*        IF FORCE.PURGE THEN*11-30-15*            PURGE.THIS = 1*11-30-15*        END ELSE        LOCATE SESS.ID IN PS.LIST SETTING PURGE.THIS ELSE           PURGE.THIS=0           LOCATE 'userid' IN SESS.REC<1> SETTING USERID.POS ELSE USERID.POS=0           IF USERID.POS THEN              USERID=SESS.REC<2,USERID.POS>*01-25-16*              LOCATE USERID IN PS.LIST SETTING PURGE.THIS ELSE PURGE.THIS=0              LOCATE USERID IN PS.LIST SETTING PURGE.WEBSERVICE ELSE PURGE.WEBSERVICE=0; *01-25-16            END         END        IF NOT(PURGE.THIS) THEN            LOCATE "LastSessionAccess" IN SESS.REC<1> SETTING VPOS THEN                Date = FIELD(SESS.REC<2,VPOS>,'*',1)                Time = FIELD(SESS.REC<2,VPOS>,'*',2)*                AGE = (DATE()-Date) * 86400                AGE += (TIME()-Time)**01-25-16*                IF AGE > PURGE.AGE THEN                IF PURGE.WEBSERVICE THEN THIS.PURGE.AGE=600 ELSE THIS.PURGE.AGE=PURGE.AGE; * 01-25-16                IF AGE > THIS.PURGE.AGE THEN; * 01-25-16                    PURGE.THIS = 1                END            END ELSE PURGE.THIS = 1        END        IF PURGE.THIS THEN            DELETE F.WEB.SESSION, SESS.ID            PURGE.LIST<-1> = SESS.ID        END    REPEAT*    EXECUTE 'SELECT MVDB.UDATA' CAPTURING JUNK    LOOP        READNEXT ID ELSE EXIT        SID = FIELD( ID, '$', 1 )        LOCATE SID IN PURGE.LIST SETTING POS THEN            DELETE F.MVDB.UDATA, ID        END ELSE            READ TST FROM F.WEB.SESSION, SID ELSE                DELETE F.MVDB.UDATA, ID            END        END    REPEAT    STOP0002F4SUB.URL.ENCODE0c2SUBROUTINE SUB.URL.ENCODE(URLENCODE.STRING)** (C) Copyright 2009, Sierra Bravo Corporation, All Rights Reserved* * Author: Luke Bucklin, Sierra Bravo Corporation* Date: August 7, 2009* Purpose: URL encode a text string*NEW.STRING = ""UE.LEN = LEN(URLENCODE.STRING)FOR UEX = 1 TO UE.LEN  UE.CHR = URLENCODE.STRING[UEX,1]  UE.CVAL = SEQ(UE.CHR)  BEGIN CASE    CASE UE.CVAL <= 47 ; ENC.FLAG = 1    CASE UE.CVAL >= 58 AND UE.CVAL <= 64 ; ENC.FLAG = 1    CASE UE.CVAL >= 91 AND UE.CVAL <= 96 ; ENC.FLAG = 1    CASE UE.CVAL > 122 ; ENC.FLAG = 1    CASE 1 ; ENC.FLAG = 0  END CASE  IF ENC.FLAG THEN    UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')  END  NEW.STRING := UE.CHRNEXT UEXURLENCODE.STRING = NEW.STRINGRETURNEND 016F40MVDB.MAIN0c2** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Dashboard Display Program** 1-5-15 TOM PARKER OF ZUMASYS - CHANGES TO SUPPORT MULTI-SERIES DRILLDOWNS* 1-26-15 TOM PARKER OF ZUMASYS - ALLOW PRINTABLE ON ALL CHART TYPE SINCE*         NEW FUSION CHARTS SUPPORT THEM* 3-4-15 TOM PARKER OF ZUMASYS - DONT STRIP OUT DECIMALS IN W$BAR.VALUES* 3-15-15 TOM PARKER OF ZUMASYS - ADDITIONAL CHANGE TO SUPPORT MULTI-SERIES** 11-30-15 TOM PARKER - PROVIDE WEBSERVICE ACCESS WITH EMBEDDED USER AND PASSWORD** 12-15-15 & 01-14-16 Tom Parker & Peter Schellenbach (*PDF*)*  Added support for PDF generation of any widget.*  Widget subroutine must set W$PDFABLE to 1 to enable PDF generation.*  PDF generation must be enabled in the PDF Configuration widget, on*  the Administrator dashboard.* 01-25-16 Tom Parker - Do not allow Go Back if doing webservice* 04-25-16 Tom Parker - Make Go Back button fully functional for backing*                       up from drilldowns* 6-1-16 TOM PARKER - FIX ISSUES WITH BACKING UP FROM DRILLDOWN* 06-27-16 Tom Parker & Peter Schellenback (*EXCEL*)*  Added support for EXCEL spreadsheet generation of many widgets.*  Widget type must be EXCEL'able to set W$EXCELABLE to 1 to generate icon** 09-23-16 Tom Parker - Eliminate GO_BACK button support and replace with*          logic to handle standard browser back button*  * 09-23-16 Peter Schellenbach*  Add support for alternate logo defined for each user (MVDB.USERS attr 7).*  Enable 'datepicker' style input fields.*  Fix single user login problem.** 10-07-16 Peter Schellenbach*  If form contains many widget input controls, use POST instead of GET*  for form submission to avoid URL length limitations.**  Because POST method for login and widget inputs causes browser to prompt*  for resubmit when using back or refresh button, the POST-REDIRECT-GET*  pattern is now used. When responding to POST, we return small javascript*  which REDIRECTS by setting window.location. This causes a GET from browser.*  * 10-25-16 Peter Schellenbach*  Refactored INIT.WWW so all dashboard specific initialization is now in*  MVDB.INIT which is called from here. Only use POST-REDIRECT-GET pattern*  for login page. Use POST without P-R-G for forms with more than 20 inputs*  so that we don't end up with a bogus URL in the browser location (the*  URL used for redirect is bogus, and cannot be used to create emailed or*  webservice URLs).**  Removed the saving of GLOBAL.USER.DATA and WIDGET.USER.DATA from this*  program and move it to MVDB.INIT, saving before letting MVDB.MAIN handle*  the request.** 11-02-16 Peter Schellenbach*  Fine-tuned widget sizes now that we have switched to application_larger.css*  instead of application_normal.css to maximuze the are used by the charts.*  Calculate the 1/3 widget size differently for the 2-column layout, which*  is 45 pixels wider than the same widget in 3-column layout. Old size values*  are commented out for reference (in case we need to support normal size again.)**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.USERSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*EQU TRUE TO 1, FALSE TO 0, AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MVDB.SUBS' TO F.MVDB.SUBS ELSE STOP 201, 'MVDB.SUBS'OPEN '','MVDB.USERS' TO F.MVDB.USERS ELSE STOP 201, 'MVDB.USERS'OPEN '','MVDB.DEFS' TO F.MVDB.DEFS ELSE STOP 201, 'MVDB.DEFS'OPEN '','MVDB.UDATA' TO F.MVDB.UDATA ELSE STOP 201, 'MVDB.UDATA'OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'*** 11-30-15 NEED AN INSTALL DATE TO CONTROL SINGLE USER WEBSERVICE ACCESS*READ INSTALL.DATE FROM F.MVDB.CONTROL, 'INSTALL.DATE' ELSE  INSTALL.DATE=DATE()  WRITE INSTALL.DATE ON F.MVDB.CONTROL, 'INSTALL.DATE'END*OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE STOP 201, 'MVDB.WIDGET.TYPES'OPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE STOP 201, 'MVDB.THEMES'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD/VOC'END*READ WIDGET.DIV FROM F.WEB.FORMS, "WIDGET.DIV" ELSE WIDGET.DIV = "Missing WIDGET.DIV"*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)EQU SITE$AUTO.TRIM    TO SITE$SETTINGS(10)EQU SITE$REFRESH TO SITE$SETTINGS(11)EQU SITE$ALLOW.WEBSVC TO SITE$SETTINGS(12)EQU SITE$ALLOW.EMAILD TO SITE$SETTINGS(13)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READ THEME.LIST FROM F.MVDB.CONTROL, "MVDB.THEMES" ELSE  THEME.LIST = "cream_gray.css,ice.css,patriotic.css,tuscani.css"  THEME.LIST<2> = "Theme 1,Theme 2,Theme 3,Theme 4"  WRITE THEME.LIST ON F.MVDB.CONTROL, "MVDB.THEMES"ENDIF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDEND*MAT GLOBAL.INFO = ''G$QUERYMODE = FALSE ;* Not query mode**PDF** Read PDF configuration settingsDIM PDF$SETTINGS(10)EQU PDF$ENABLED   TO PDF$SETTINGS(1)EQU PDF$COMMAND   TO PDF$SETTINGS(2)EQU PDF$DIRECTORY TO PDF$SETTINGS(3)EQU PDF$LIFETIME  TO PDF$SETTINGS(4)MATREAD PDF$SETTINGS FROM F.MVDB.CONTROL,'PDF.SETTINGS' ELSE MAT PDF$SETTINGS=''IF PDF$ENABLED THEN CALL SUB.PDF.FUNC('cleanup','')** GET LICENSE INFORMATION*CALL SUB.MVDB.FEATURES(USER.LIMIT,MAPS.ENABLED,FUSION.WIDGETS.ENABLED,WATERMARK)*NAME.COLOR = "AQUA":VM:"BLACK":VM:"BLUE":VM:"FUCHSIA":VM:"GRAY":VM:"GREEN":VM:"LIME":VM:"MAROON":VM:"NAVY"NAME.COLOR = NAME.COLOR:VM:"OLIVE":VM:"PURPLE":VM:"RED":VM:"SILVER":VM:"TEAL":VM:"WHITE":VM:"YELLOW":VM:"GREY"NAME.COLOR<2> = "#00FFFF":VM:"#000000":VM:"#0000FF":VM:"#FF00FF":VM:"#808080":VM:"#008000":VM:"#00FF00":VM:"#800000":VM:"#000080"NAME.COLOR<2> = NAME.COLOR<2>:VM:"#808000":VM:"#800080":VM:"#FF0000":VM:"#C0C0C0":VM:"#008080":VM:"#FFFFFF":VM:"#FFFF00":VM:"#808080"*LOCATE "logout" IN CGI$VARS SETTING POS THEN  CALL DESTROY.SESSIONENDCALL GET.SESSION.VAR("userid",userid)CALL GET.SESSION.VAR("adminauth",adminauth)LOCATE "psid" IN CGI$VARS SETTING POS THEN  PURGE.SESSIONID = CGI$VALS<POS>  EXECUTE "MVDB.PURGE.SESSIONS ":PURGE.SESSIONID CAPTURING JUNKENDMAT USER.ITEM = "" ;* PJS 09-23-16: make sure this gets initialized, in case of webservice or emailed reports* 11-30-15 ESTABLISH WEBSERVICE VARIABLESDIM W$WEBSERVICE.DATA(5)MATREAD W$WEBSERVICE.DATA FROM F.MVDB.UDATA,SESSION$ID:"$WEBSERVICE" ELSE MAT W$WEBSERVICE.DATA=''EQU W$WEBSERVICE TO W$WEBSERVICE.DATA(1)EQU W$EMAILED.REPORT TO W$WEBSERVICE.DATA(2)HTML.ID=''IF userid = "" THEN  LOGIN.OK = FALSE  LOGIN.MSG = ""    loginid = "" ; password = ""  LOCATE "loginid" IN CGI$VARS SETTING POS THEN    loginid = CGI$VALS<POS>    LOCATE "password" IN CGI$VARS SETTING POS THEN      password = CGI$VALS<POS>    END  END*WEBSERVICE*  IF loginid # "" AND (password # "" OR SITE$NULL.PW.OK=1) THEN*WEBSERVICE*    IF SITE$AUTH.SUB # "" THEN*WEBSERVICE*      READ CATPTR FROM F.MD, SITE$AUTH.SUB ELSE CATPTR = ""      *WEBSERVICE*      IF CATPTR<1> = "VR" THEN*WEBSERVICE*        CALL @SITE$AUTH.SUB(loginid,password,"AUTH",LOGIN.OK,LOGIN.MSG,MAT USER.ITEM)*WEBSERVICE*        IF LOGIN.OK = "Y" THEN LOGIN.OK = TRUE*WEBSERVICE*        IF NOT(LOGIN.OK MATCHES "1N0N") THEN LOGIN.OK = FALSE*WEBSERVICE*      END ELSE*WEBSERVICE*        LOGIN.OK = FALSE*WEBSERVICE*        LOGIN.MSG = SITE$AUTH.SUB:" authentication subroutine not cataloged."*WEBSERVICE*      END*WEBSERVICE*    END ELSE*WEBSERVICE*      MATREAD USER.ITEM FROM F.MVDB.USERS, loginid THEN*WEBSERVICE*        IF OCONV(password,"U3060") = USER.PASSWORD THEN*WEBSERVICE*          LOGIN.OK = TRUE*WEBSERVICE*        END*WEBSERVICE*      END*WEBSERVICE*    END  *  ** 11-30-15 WEBSERVICE AND EMAILED REPORT CAPABILITY LOGIC  *  IF loginid = 'emailed' THEN W$EMAILED.REPORT=1  IF loginid = 'webservice' THEN W$WEBSERVICE=1  LOCATE "htmlid" IN CGI$VARS SETTING POS THEN    HTML.ID = CGI$VALS<POS>  END ELSE    HTML.ID='null'  END  IF loginid # "" AND (W$EMAILED.REPORT OR password # "" OR SITE$NULL.PW.OK=1) THEN     LOCATE 'passtime' IN CGI$VARS SETTING PASSTIME.POS ELSE PASSTIME.POS=0     IF PASSTIME.POS THEN        PASSTIME=CGI$VALS<PASSTIME.POS>        CONVERT ':' TO '' IN PASSTIME      END ELSE PASSTIME=''     BEGIN CASE        CASE PASSTIME AND loginid = 'webservice'           EXECUTE "MVDB.PURGE.SESSIONS webservice" CAPTURING JUNK; * PURGE ANY OLD webservices           IF PASSTIME MATCHES '6N' THEN              IPASSTIME = ICONV(PASSTIME[1,2]:':':PASSTIME[3,2]:':':PASSTIME[5,2],'MT')           END ELSE              IPASSTIME = -601 ;* Ensure the time is expired if not 6 digits!           END           BEGIN CASE              CASE SITE$ALLOW.WEBSVC # 'Y'                 * webservice login is not enabled                 LOGIN.OK = FALSE                 LOGIN.MSG = 'Webservice login is not enabled'              CASE USER.LIMIT < 2 AND DATE() > (INSTALL.DATE+30)                 * MUST HAVE A MULTI USER LICENSE TO USE WEBSERVICE AFTER                 * 30 DAY TRIAL PERIOD                 LOGIN.OK = FALSE                 LOGIN.MSG = 'Must have a multi-user license to use webservices'              CASE ABS(TIME()-IPASSTIME) > 600                 * TIME MUST BE WITHIN 10 MINUTES OF MACHINE TIME                 LOGIN.OK = FALSE                 *LOGIN.MSG = 'Request not synced with system time.'                 LOGIN.MSG = 'The request URL has expired. This may be due to differences in the system '                 LOGIN.MSG := 'clock on the MV Dashboard server and the clock used to generate the URL.'              CASE 1                 * VALID PASSWORD IS THE SUM OF MMDDYY + SSMMHH (FROM PASSTIME)                 * INVERT THE TIME TO SSMMHH                 EMITSSAP=''                 FOR TIME.I = 6 TO 1 STEP -1                    EMITSSAP:=PASSTIME[TIME.I,1]                  NEXT TIME.I                 *OTODAY=OCONV(DATE(),'D2-')                 *CONVERT '-' TO '' IN OTODAY                 TODAY.MM=OCONV(DATE(),'DM')'R%%'                 TODAY.DD=OCONV(DATE(),'DD')'R%%'                 TODAY.YY=OCONV(DATE(),'DY')'R%%'                 OTODAY = TODAY.MM:TODAY.DD:TODAY.YY ;* handle non-USA date formats properly                 CALCED.PASSWORD=OTODAY+EMITSSAP                 IF password MATCHES '6N' THEN CHECKED.PASSWORD = password + 0 ELSE CHECKED.PASSWORD = -1                 IF CALCED.PASSWORD = CHECKED.PASSWORD THEN                    LOGIN.OK = TRUE                    USER.ROLE=''*                    CALL PUT.SESSION.VAR("userid",loginid)                 END ELSE                    LOGIN.OK = FALSE                    LOGIN.MSG = 'Invalid password'                 END           END CASE        CASE loginid = 'emailed'           EXECUTE "MVDB.PURGE.SESSIONS emailed" CAPTURING JUNK; * PURGE ANY OLD emailed           OPEN '','MVDB.EMAILED.HTML' TO F.EMAILED.HTML ELSE STOP 201, 'MVDB.EMAILED.HTML'           *           ** PURGED ANY EMAIL REPORTS OVER 10 DAYS OLD           *           EXECUTE 'SELECT MVDB.EMAILED.HTML' CAPTURING JUNK           LOOP              READNEXT EMAILED.ID ELSE EMAILED.ID='DONE'           UNTIL EMAILED.ID='DONE' DO              IF (EMAILED.ID[1,5]+10) < DATE() THEN                 DELETE F.EMAILED.HTML, EMAILED.ID              END           REPEAT           IF SITE$ALLOW.EMAILD # 'Y' THEN              * emaild login is not enabled              LOGIN.OK = FALSE              LOGIN.MSG = 'Emailed login is not enabled'           END ELSE              READV TEST.HTML.REPORT FROM F.EMAILED.HTML, HTML.ID, 1 ELSE TEST.HTML.REPORT='NOTFOUND'              IF TEST.HTML.REPORT = 'NOTFOUND' THEN                 LOGIN.OK = FALSE                 LOGIN.MSG = 'Emailed report not found with ID of ':HTML.ID              END ELSE                 USER.ROLE=''                 LOGIN.OK = TRUE                 INSERT.VARS='dbname':AM:'udview':AM:'udpos1':AM:'udval1'                 INSERT.VALS='Emailed Report':AM:'Emailed Report':AM:1:AM:HTML.ID                 CGI$VARS=INSERT(CGI$VARS,1,0,0,INSERT.VARS)                 CGI$VALS=INSERT(CGI$VALS,1,0,0,INSERT.VALS)              END           END        CASE SITE$AUTH.SUB # ""           READ CATPTR FROM F.MD, SITE$AUTH.SUB ELSE CATPTR = ""           IF CATPTR<1> = "VR" THEN             CALL @SITE$AUTH.SUB(loginid,password,"AUTH",LOGIN.OK,LOGIN.MSG,MAT USER.ITEM)             IF LOGIN.OK = "Y" THEN LOGIN.OK = TRUE             IF NOT(LOGIN.OK MATCHES "1N0N") THEN LOGIN.OK = FALSE           END ELSE             LOGIN.OK = FALSE             LOGIN.MSG = SITE$AUTH.SUB:" authentication subroutine not cataloged."           END        CASE 1           MATREAD USER.ITEM FROM F.MVDB.USERS, loginid THEN              IF OCONV(password,"U3060") = USER.PASSWORD THEN                 LOGIN.OK = TRUE*                 CALL PUT.SESSION.VAR("userid",loginid)              END           END     END CASE  END  IF LOGIN.OK THEN    EXECUTE "MVDB.PURGE.SESSIONS" CAPTURING JUNK ;* Purge out old session data    *    SELECT F.WEB.SESSION    ACTIVE.SESSIONS = ""    USER.ACTIVE.SESSIONS = ""    LOOP      READNEXT WSID ELSE EXIT      READ SREC FROM F.WEB.SESSION, WSID ELSE CONTINUE      LOCATE "userid" IN SREC<1> SETTING UPOS THEN        ASUSER = SREC<2,UPOS>        LOCATE "LastSessionAccess" IN SREC<1> SETTING UPOS THEN          ASDATE = FIELD(SREC<2,UPOS>,'*',1) ;* date          ASTIME = FIELD(SREC<2,UPOS>,'*',2) ;* time          ASAGE = (DATE()-ASDATE) * 86400          ASAGE += (TIME()-ASTIME)        END ELSE ASAGE = 0        IF OCONV(ASUSER,'MCU') = OCONV(loginid,'MCU') THEN          LOCATE ASAGE IN USER.ACTIVE.SESSIONS<3> BY "DR" SETTING ASPOS ELSE NULL          USER.ACTIVE.SESSIONS = INSERT( USER.ACTIVE.SESSIONS, 1, ASPOS, 0, WSID )          USER.ACTIVE.SESSIONS = INSERT( USER.ACTIVE.SESSIONS, 2, ASPOS, 0, ASUSER ) ;* User ID          USER.ACTIVE.SESSIONS = INSERT( USER.ACTIVE.SESSIONS, 3, ASPOS, 0, ASAGE )        END ELSE          LOCATE ASAGE IN ACTIVE.SESSIONS<3> BY "DR" SETTING ASPOS ELSE NULL          ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 1, ASPOS, 0, WSID )          ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 2, ASPOS, 0, ASUSER ) ;* User ID          ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 3, ASPOS, 0, ASAGE )        END      END    REPEAT    *Merge active sessions for this user in front of     *the other sessions to prefer those sessions for cleanup.    IF USER.ACTIVE.SESSIONS # '' THEN      ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 1, 1, 0, USER.ACTIVE.SESSIONS<1> )      ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 2, 1, 0, USER.ACTIVE.SESSIONS<2> )      ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 3, 1, 0, USER.ACTIVE.SESSIONS<3> )    END    ASCNT = DCOUNT( ACTIVE.SESSIONS<1>, @VM )    IF ASCNT > USER.LIMIT THEN      PURGE.LIST = ""      LOOP WHILE ASCNT > USER.LIMIT DO        PURGE.LIST := ACTIVE.SESSIONS<1,1>:" "        ACTIVE.SESSIONS = DELETE( ACTIVE.SESSIONS, 1, 1, 0 )        ACTIVE.SESSIONS = DELETE( ACTIVE.SESSIONS, 2, 1, 0 )        ACTIVE.SESSIONS = DELETE( ACTIVE.SESSIONS, 3, 1, 0 )        ASCNT -= 1      REPEAT      EXECUTE "MVDB.PURGE.SESSIONS ":PURGE.LIST CAPTURING JUNK    END    IF ASCNT = USER.LIMIT THEN      * Logging in will force a user to log off      IF SITE$AUTO.TRIM = 'Y' THEN        EXECUTE "MVDB.PURGE.SESSIONS ":ACTIVE.SESSIONS<1,1> CAPTURING JUNK      END ELSE        READ MSG.TEMPLATE FROM F.WEB.FORMS, "message.html" ELSE MSG.TEMPLATE = "message.html not found."        CALL SWAP(MSG.TEMPLATE,'<!-- MSG_TITLE -->',"User limit exceeded.")        CALL SWAP(MSG.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)        CALL SWAP(MSG.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)        MSG.CONTENT = \<p>Your maximum user limit has been reached. If you choose to log in, user "\:ACTIVE.SESSIONS<2,1>        MSG.CONTENT := \" will be logged out and the user's session data will be lost.</p>\        MSG.CONTENT := '<a href="/dbc/MVDB.MAIN?psid=':ACTIVE.SESSIONS<1,1>:'">Click here</a> to log ':ACTIVE.SESSIONS<2,1>:' out and try again.</a>'        CALL SWAP(MSG.TEMPLATE,'<!-- MSG_CONTENT -->',MSG.CONTENT)        CALL WEB.SEND(MSG.TEMPLATE)        GLOBAL.INFO(100) = 1        STOP      END    END    CALL PUT.SESSION.VAR("userid",loginid)    userid = loginid    CALL PUT.SESSION.VAR("login_date",DATE())    CALL PUT.SESSION.VAR("login_time",TIME())  END ELSE    READ LOGIN.PAGE FROM F.WEB.FORMS, "login.html" ELSE LOGIN.PAGE = "login.html not found."    IF loginid # "" THEN      IF LOGIN.MSG = "" THEN LOGIN.MSG = "Invalid user ID or Password"      CALL SWAP(LOGIN.PAGE,'<!-- ERROR -->',LOGIN.MSG)    END    CALL SWAP(LOGIN.PAGE,'<!-- SITE_LOGO -->',SITE.LOGO)    CALL SWAP(LOGIN.PAGE,'<!--CHARACTER_SET-->',SITE$CHARSET)        CALL SWAP(LOGIN.PAGE,'<!-- SITE_THEME -->',THEME.CSS)    CALL WEB.SEND(LOGIN.PAGE)    GLOBAL.INFO(100) = 1 ;* Intentional Stop    STOP  ENDEND ELSE  * Get the user item.  * If a custom authentication subroutine is in use, we have to call that  * subroutine again in order to get the user record populated  IF SITE$AUTH.SUB # "" THEN    READ CATPTR FROM F.MD, SITE$AUTH.SUB ELSE CATPTR = ""    IF CATPTR<1> = "VR" THEN      CALL @SITE$AUTH.SUB(userid,"","READ",LOGIN.OK,LOGIN.MSG,MAT USER.ITEM)    END ELSE MAT USER.ITEM = ""  END ELSE    MATREAD USER.ITEM FROM F.MVDB.USERS, userid ELSE MAT USER.ITEM = ''  ENDENDIF USER.ROLE = "Administrator" AND NOT(adminauth) THEN  * The user is an admin based on the USER.ROLE setting in their user record  adminauth = 1  CALL PUT.SESSION.VAR("adminauth",adminauth)ENDG$ADMIN.USER = adminauth*G$USERID = userid* 10-07-16 Implement the POST-REDIRECT-GET pattern to prevent the browser* from prompting before resubmit when using back or refresh buttons after* a POST (used for login form only at this time).LOCATE "REQUEST_METHOD" IN CGI$VARS SETTING POS THEN  IF CGI$VALS<POS> = "POST" THEN    LOCATE "dblogin" IN CGI$VARS SETTING POS THEN      IF CGI$VALS<POS> THEN        * Redirect to MVDB.MAIN default dashboard after valid login        HTML = ''        HTML<-1> = '<html>'        HTML<-1> = '<body>'        HTML<-1> = '<script type="text/javascript">'        HTML<-1> = 'window.location="':CGI$PATH:'/MVDB.MAIN?dbname=";' ;* start with default dashboard after login        HTML<-1> = '</script>'        HTML<-1> = '</body>'        HTML<-1> = '</html>'        CALL WEB.SEND(HTML)        GLOBAL.INFO(100) = 1 ;* Intentional Stop        STOP      END    END    * handle P-R-G for widget input form submit*    WRITE CGI$VARS ON F.MVDB.UDATA,SESSION$ID:'$POSTVARS'*    WRITE CGI$VALS ON F.MVDB.UDATA,SESSION$ID:'$POSTVALS'*    HTML = ''*    HTML<-1> = '<html>'*    HTML<-1> = '<body>'*    HTML<-1> = '<script type="text/javascript">'*    HTML<-1> = 'window.location="':CGI$PATH:'/MVDB.MAIN?dbprg=1";'*    HTML<-1> = '</script>'*    HTML<-1> = '</body>'*    HTML<-1> = '</html>'*    CALL WEB.SEND(HTML)*    GLOBAL.INFO(100) = 1 ;* Intentional Stop*    STOP*  ENDEND*LOCATE "dbprg" IN CGI$VARS SETTING POS THEN*  IF CGI$VALS<POS> THEN*    READ CGI$VARS FROM F.MVDB.UDATA,SESSION$ID:'$POSTVARS' THEN*      READ CGI$VALS FROM F.MVDB.UDATA,SESSION$ID:'$POSTVALS' ELSE CGI$VALS = ''*    END*    DELETE F.MVDB.UDATA,SESSION$ID:'$POSTVARS'*    DELETE F.MVDB.UDATA,SESSION$ID:'$POSTVALS'*  END*END* END OF 10-07-16*LOCATE 'generatepdf' IN CGI$VARS SETTING GENERATE.PDF ELSE GENERATE.PDF=0; * 4-25-16LOCATE 'generateexcel' IN CGI$VARS SETTING GENERATE.EXCEL ELSE GENERATE.EXCEL=0; *EXCEL* 6-27-16W$EXCELABLE=0;   *EXCEL* 6-27-16GO.BACK=0;   * 4-25-16*GOBACK.REENTRY:; * 4-25-16** udview, if present, is the view name to which  the associated* udpos and udval parameters apply.LOCATE "udview" IN CGI$VARS SETTING POS THEN  udview = CGI$VALS<POS>END ELSE udview = ""*LOCATE "dbname" IN CGI$VARS SETTING POS THEN  CALL PUT.SESSION.VAR("current_db",CGI$VALS<POS>)END*LOCATE 'refresh' IN CGI$VARS SETTING POS THEN  *really, this should be stored in the user record per db key  IF CGI$VALS<POS> = '0' THEN CGI$VALS<POS> = ''  CALL GET.SESSION.VAR("current_db",r.current.db)  IF r.current.db = '' THEN r.current.db = USER.DEFAULT.DB  CALL PUT.SESSION.VAR(r.current.db:"!refresh",CGI$VALS<POS>)END*9-23-16***9-23-16*** 4-25-16 SUPPORT AUTOMATIC BACKOUT FROM A DRILLDOWN*9-23-16***9-23-16**EXCEL*IF NOT(GO.BACK) AND NOT(GENERATE.PDF) THEN*9-23-16*IF NOT(GO.BACK) AND NOT(GENERATE.PDF) AND NOT(GENERATE.EXCEL) THEN; *EXCEL* 6-27-16*9-23-16*   CALL DRILLDOWN.STACK.RTNE(F.MVDB.UDATA,DRILLDOWN.STACK,GO.BACK)*9-23-16*   IF GO.BACK THEN GOTO GOBACK.REENTRY*9-23-16*END ELSE*9-23-16*   DRILLDOWN.STACK = ""*9-23-16*ENDDRILLDOWN.STACK=''; *9-23-16G$DRILLDOWN.MODE = FALSELOCATE "dd" IN CGI$VARS SETTING POS THEN   IF CGI$VALS<POS> <> '' THEN      G$DRILLDOWN.MODE = TRUE   ENDEND*9-23-16** END OF 4-25-16*LOCATE "sw" IN CGI$VARS SETTING POS THEN  FORM.SUBMIT.WIDGET = CGI$VALS<POS>END ELSE FORM.SUBMIT.WIDGET = ""*IF G$DRILLDOWN.MODE THEN  * This is a drill-down call. Load up the "drilldown" dashboard  * and populate it only with this single widget.  LOCATE "dd_from" IN CGI$VARS SETTING POS THEN    G$DD.REFERRER = CGI$VALS<POS>  END  LOCATE "dd_from_db" IN CGI$VARS SETTING POS THEN    G$DD.FROM.DB = CGI$VALS<POS>  END  G$CURRENT.DB = "drilldown"  MAT DB.ITEM = ''  READV DD.FROM.DB.THEME FROM F.MVDB.DEFS, G$DD.FROM.DB, 7 ELSE DD.FROM.DB.THEME = ''  DB.THEME = DD.FROM.DB.THEME  DB.WIDGETS = udviewEND ELSE  CALL GET.SESSION.VAR("current_db",current.db)  IF current.db # "" THEN    G$CURRENT.DB = current.db  END ELSE    * No current dashboard is available in the session.    * Must be the first time through. Go get the default.    G$CURRENT.DB = USER.DEFAULT.DB    IF G$CURRENT.DB = '' THEN G$CURRENT.DB = "EMPTY" ;* Empty dashboard  END  *  MATREAD DB.ITEM FROM F.MVDB.DEFS, G$CURRENT.DB ELSE MAT DB.ITEM = ''ENDIF DB.THEME # '' THEN  READV THEME.CSS FROM F.MVDB.THEMES, DB.THEME, 1 ELSE THEME.CSS = ''END ELSE  READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''END** PJS 09-23-16: user altertnate logo overrides site logoIF USER.ALT.LOGO <> '' THEN  SITE.LOGO = USER.ALT.LOGOEND ELSEIF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  ENDENDIF NOT(INDEX(SITE.LOGO,'/',1)) THEN  SITE.LOGO = '/db/images/':SITE.LOGOEND*CALL GET.SESSION.VAR("login_date",login.date)CALL GET.SESSION.VAR("login_time",login.time)G$LOGIN.DATE = login.dateG$LOGIN.TIME = login.time**PDF** When generating a PDF, get name of widget to render into PDF.* When generating iframe content, get the HTML widget name to* show in the iframe.WIDGET.OWN.STYLE = FALSESINGLE.WIDGET = ""PDF.WIDGET.NAME = ""* 4-25-16 *IF PDF$ENABLED THEN* 4-25-16 *  LOCATE 'generatepdf' IN CGI$VARS SETTING POS ELSE POS=0* 4-25-16 *  IF POS THEN* 4-25-16 *    PDF.WIDGET.NAME = CGI$VALS<POS>* 4-25-16 *    SINGLE.WIDGET = PDF.WIDGET.NAME* 4-25-16 *  END* 4-25-16 *END*** 4-25-16 CHANGED LOGIC*IF PDF$ENABLED AND GENERATE.PDF THEN  PDF.WIDGET.NAME = CGI$VALS<GENERATE.PDF>  SINGLE.WIDGET = PDF.WIDGET.NAME  W$PDFABLE=1  DB.WIDGETS=PDF.WIDGET.NAMEEND* END OF 4-25-16***EXCEL* 6-27-16 ADDED LOGIC*IF GENERATE.EXCEL THEN  EXCEL.WIDGET.NAME = CGI$VALS<GENERATE.EXCEL>  SINGLE.WIDGET = EXCEL.WIDGET.NAME  W$EXCELABLE=1  DB.WIDGETS=EXCEL.WIDGET.NAMEEND ELSE EXCEL.WIDGET.NAME=''* END OF 6-27-16IFRAME.WIDGET.NAME = ""LOCATE 'iframewidget' IN CGI$VARS SETTING POS ELSE POS=0IF POS THEN  IFRAME.WIDGET.NAME = CGI$VALS<POS>  SINGLE.WIDGET = IFRAME.WIDGET.NAMEEND** Build a list of subroutines to call to create this dashboard*DISP.CNT = DCOUNT( DB.WIDGETS, VM )WIDGET.NAME.POS = FALSEFOR DX = 1 TO DISP.CNT  MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, DB.WIDGETS<1,DX> THEN    ADD.OK = TRUE    IF WIDGET.USERS = "ADMIN" THEN      IF NOT(adminauth) THEN ADD.OK = FALSE ;* Only usable by authenticated admins    END ELSE IF WIDGET.USERS # "" THEN ;* Some user restrictions have been assigned      LOCATE userid IN WIDGET.USERS<1> SETTING POS ELSE ADD.OK = FALSE    END    IF ADD.OK THEN      *PDF* if generating PDF or iframe content, exclude other widgets      *EXCEL* also applies to generating EXCEL      IF SINGLE.WIDGET = "" OR SINGLE.WIDGET = DB.WIDGETS<1,DX> THEN        WIDGET.NAME.POS += 1        G$WIDGET.NAME.LIST<1,WIDGET.NAME.POS> = DB.WIDGETS<1,DX>        G$WIDGET.SUB.LIST<1,WIDGET.NAME.POS> = WIDGET.SUB      END    END  ENDNEXT DX*DIM TEMPLATE.AREA(5)MAT TEMPLATE.AREA = ''*MAT GLOBAL.TEMP.DATA = '' ;* InitializeMATREAD GLOBAL.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$UG" ELSE MAT GLOBAL.USER.DATA = ''*CALL GET.SESSION.VAR("debug_widgets",DEBUG.WIDGETS) ;* Retrieve a list of widgets user is debuggingIF adminauth THEN ;* Only administrators can put widgets into debug mdoe.  LOCATE "debug_widget" IN CGI$VARS SETTING POS THEN    DEBUG.WIDGET = CGI$VALS<POS>    LOCATE DEBUG.WIDGET IN DEBUG.WIDGETS SETTING POS ELSE      DEBUG.WIDGETS<-1> = DEBUG.WIDGET      CALL PUT.SESSION.VAR("debug_widgets",DEBUG.WIDGETS)    END  END  LOCATE "undebug_widget" IN CGI$VARS SETTING POS THEN    UNDEBUG.WIDGET = CGI$VALS<POS>    LOCATE UNDEBUG.WIDGET IN DEBUG.WIDGETS SETTING DPOS THEN      DEBUG.WIDGETS = DELETE( DEBUG.WIDGETS, DPOS, 0, 0 )      CALL PUT.SESSION.VAR("debug_widgets",DEBUG.WIDGETS)    END  ENDEND*CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS) ;* Retrieve a list of failed widgets this sessionLOCATE "unfail_widget" IN CGI$VARS SETTING POS THEN  * The user has asked to take this widget out of failed mode and try running the widget again.  UNFAIL.WIDGET = CGI$VALS<POS>  LOCATE UNFAIL.WIDGET IN FAILED.WIDGETS SETTING DPOS THEN    FAILED.WIDGETS = DELETE( FAILED.WIDGETS, DPOS, 0, 0 )    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  ENDEND** Was there a running widget that didn't complete? If so, it's a failed widget that didn't return* control to MVDB.MAIN. Let's add it to the list of failed widgets this session so we can avoid* producing blank pages for the user.*CALL GET.SESSION.VAR("running_widget",FAILED.WIDGET)CALL GET.SESSION.VAR("running_widget_dt",FAILED.WIDGET.DT)IF FAILED.WIDGET # "" THEN  FW.DATE = FIELD( FAILED.WIDGET.DT, '*', 1 )  FW.TIME = FIELD( FAILED.WIDGET.DT, '*', 2 )  FW.LAPSE = TIME() - FW.TIME  FW.LAPSE += ((DATE() - FW.DATE) * 86400)  IF SITE$W.MAX.DUR = "" THEN SITE$W.MAX.DUR = 10 ;* Default  IF FW.LAPSE < SITE$W.MAX.DUR THEN FAILED.WIDGET = ""ENDIF FAILED.WIDGET # "" THEN  CALL PUT.SESSION.VAR("running_widget","")  CALL PUT.SESSION.VAR("running_widget_dt","")  LOCATE FAILED.WIDGET IN FAILED.WIDGETS SETTING FWPOS ELSE    FAILED.WIDGETS<-1> = FAILED.WIDGET    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  ENDEND** Widgets appearing in FAILED.WIDGETS and DEBUG.WIDGETS are both hijacked at runtime, and our* SUB.DEBUG.WIDGET subroutine is executed in place of the subroutine in the widget definition.* The difference is that FAILED.WIDGETS are widgets that this program has determined to have* failed. DEBUG.WIDGETS are functional widgets that the user has put into debug mode.* In both cases, the widget remains in this list until the user removes it using controls * within the SUB.DEBUG.WIDGET widget.*WIDGET.CNT = DCOUNT( G$WIDGET.NAME.LIST, VM )FOR VX = 1 TO WIDGET.CNT  WIDGET.NAME = G$WIDGET.NAME.LIST<1,VX>  MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, WIDGET.NAME ELSE MAT WIDGET.ITEM = ''*9-23-16** FIX 6-1-16 *  MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME ELSE MAT WIDGET.USER.DATA = ''*9-23-16** FIX 6-1-16 **9-23-16*  IF GO.BACK THEN *9-23-16*     MAT WIDGET.USER.DATA=''*9-23-16*   END ELSE*9-23-16*     MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME ELSE MAT WIDGET.USER.DATA = ''*9-23-16*   END*9-23-16** END OF 6-1-16  MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME ELSE MAT WIDGET.USER.DATA = ''; *9-23-16*  *  MAP.TYPE.SUFFIX = ""  IF WIDGET.NAME = udview THEN    * We need to set values in WIDGET.USER.DATA before calling this routine    * Process links.    UDN = 1    SEARCH.DONE = FALSE    LOOP      SEARCH.NAME = "udpos":UDN      LOCATE SEARCH.NAME IN CGI$VARS SETTING POS THEN        udpos = CGI$VALS<POS>        IF udpos MATCHES "1N0N" THEN          IF udpos < 1 OR udpos > 100 THEN UDN +=1 ; CONTINUE        END ELSE UDN += 1 ; CONTINUE        SEARCH.NAME = "udval":UDN        LOCATE SEARCH.NAME IN CGI$VARS SETTING POS THEN          WIDGET.USER.DATA(udpos) = CGI$VALS<POS>        END      END ELSE SEARCH.DONE = TRUE    UNTIL SEARCH.DONE DO      UDN += 1    REPEAT    * Process Inputs.    VARCNT = DCOUNT( CGI$VARS, AM )    FOR CGIVX = 1 TO VARCNT      IF CGI$VARS<CGIVX>[1,4] = "inp_" THEN        udpos = FIELD(CGI$VARS<CGIVX>,'_',2)        IF udpos MATCHES "1N0N" THEN          IF udpos >= 1 AND udpos <= 100 THEN            WIDGET.USER.DATA(udpos) = CGI$VALS<CGIVX>          END        END      END      *Look for checkboxes that didn't come back      *and stuff a zero in there.      IF CGI$VARS<CGIVX>[1,9] = 'mvdbcxbx_' THEN        udpos = FIELD(CGI$VARS<CGIVX>,'_',2)        LOCATE 'inp_':udpos IN CGI$VARS SETTING CXBX.POS ELSE          IF udpos >= 1 AND udpos <= 100 THEN            WIDGET.USER.DATA(udpos) = 0          END        END      END    NEXT CGIVX    *    LOCATE 'mapdd' IN CGI$VARS SETTING POS THEN      * This is a map drilldown. Get the map name from the state code      STATE.CODE = WIDGET.USER.DATA(1)      READ STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ""      CONVERT "," TO @VM IN STATE.NAMES      LOCATE STATE.CODE IN STATE.NAMES<1> SETTING STATE.POS THEN        WIDGET.USER.DATA(2) = STATE.NAMES<2,STATE.POS>        MAP.TYPE.SUFFIX = STATE.CODE ;* Add this to the widget type      END    END  END  *  * If this is a USA map widget set in drill-down mode for a specific state  * that state name will be in WIDGET.USER.DATA(1). This code below is necessary  * to ensure that the widget stays in the state map mode until the user  * changes it.  *  IF MAP.TYPE.SUFFIX = "" THEN MAP.TYPE.SUFFIX = WIDGET.USER.DATA(1)<1>  *  IF FORM.SUBMIT.WIDGET = WIDGET.NAME THEN    * The user clicked the "go" button on the form section of this widget.    G$SUBMITTED = 1  END ELSE    G$SUBMITTED = 0  END  *  * The widget debugger uses GLOBAL.INFO(90) to determine if the widget is in debug  * mode due to user request, or if it is being forced into debug mode by MVDB.MAIN  *  GLOBAL.INFO(90) = ""  GLOBAL.INFO(91) = G$WIDGET.SUB.LIST<1,VX> ;* Original subroutine name  WDEBUG.MODE = 0 ; WFAIL.MODE = 0  *  LOCATE WIDGET.NAME IN FAILED.WIDGETS SETTING DUM THEN    * This widget failed last time we tried to run it. Let's run the "Failed Widget" subroutine instead.    * This subroutine will have access to all of the information that would have been passed to the    * failed widget, so diagnostic information can be presented through this widget.    GLOBAL.INFO(90) = "FAIL"    SUBNAME = "SUB.DEBUG.WIDGET"    WFAIL.MODE = 1  END ELSE    LOCATE WIDGET.NAME IN DEBUG.WIDGETS SETTING DUM THEN      GLOBAL.INFO(90) = "DEBUG"      SUBNAME = "SUB.DEBUG.WIDGET"      WDEBUG.MODE = 1    END ELSE      SUBNAME = G$WIDGET.SUB.LIST<1,VX>    END  END  MAT WIDGET.INFO = "" ;* clear this one out for the new call  G$WIDGET.NAME = WIDGET.NAME  G$WIDGET.SUB = SUBNAME  G$WIDGET.CALL.TIME<1,VX> = DATE():"*":TIME()*#MAKE# RL IF 0 THEN  START.TIMER = SYSTEM(12)*#MAKE# RL END  READ TST FROM F.MD, SUBNAME THEN    CALL PUT.SESSION.VAR("running_widget",WIDGET.NAME)    DT.STAMP = DATE():"*":TIME()    CALL PUT.SESSION.VAR("running_widget_dt",DT.STAMP)    CALL @SUBNAME    CALL PUT.SESSION.VAR("running_widget","")    CALL PUT.SESSION.VAR("running_widget_dt","")  END ELSE    W$TITLE = WIDGET.NAME:" (ERROR)"    W$TYPE = "TEXT"    W$TEXT.DATA = SUBNAME:" not cataloged."  END  * Special handling for drill-down to a state level on a USA Map  IF W$TYPE = "USAMAP" AND MAP.TYPE.SUFFIX # "" THEN    W$TYPE := ":":MAP.TYPE.SUFFIX  END*#MAKE# RL IF 0 THEN  G$WIDGET.CALL.DUR<1,VX> = SYSTEM(12) - START.TIMER*#MAKE# RL END  MATWRITE WIDGET.USER.DATA ON F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME  *  IF NOT(W$HIDDEN) THEN    *EXCEL* 6-27-16 DETERMINE IF W$TYPE CAN GENERATE EXCEL    BEGIN CASE       CASE W$EXCELABLE; NULL       CASE W$TYPE = 'TABLE'; W$EXCELABLE=1       CASE INDEX(W$TYPE,'COLUMN',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'LINE',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'BAR',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'AREA',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'PIE',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'DOUGHNUT',1); W$EXCELABLE=1       CASE 1; W$EXCELABLE=0    END CASE    *EXCEL* END OF 6-27-16    GOSUB MAKE.HTML    LOCATE WIDGET.NAME IN DB.WIDGETS<1> SETTING DB.DEFS.POS THEN      AREA = DB.WIDGET.AREA<1,DB.DEFS.POS>      IF NOT(AREA MATCHES "1N0N") THEN AREA = 1      IF AREA < 1 OR AREA > 5 THEN AREA = 1    END ELSE AREA = 1            TEMPLATE.AREA(AREA)<-1> = HTML.DIV  ENDNEXT VX*MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA,SESSION$ID:"$UG"MATWRITE W$WEBSERVICE.DATA ON F.MVDB.UDATA,SESSION$ID:"$WEBSERVICE"; *11-30-15** Send template**PDF* Use special inner template for PDF & iframesIF IFRAME.WIDGET.NAME # "" THEN  * iframe content just contains widget-generated HTML, no extra styles, script, etc.  TEMPLATE = "<!-- AREA1 --><!-- AREA2 --><!-- AREA3 --><!-- AREA4 --><!-- AREA5 -->"END ELSE  IF PDF.WIDGET.NAME # "" THEN    IF WIDGET.OWN.STYLE THEN      * Widget HTML has <head> tag - supplies its own styles      TEMPLATE = "<!-- AREA1 --><!-- AREA2 --><!-- AREA3 --><!-- AREA4 --><!-- AREA5 -->"    END ELSE      * PDF template has single <div> for all "areas"      READ TEMPLATE FROM F.WEB.FORMS, "pdf_inner_template" ELSE TEMPLATE = "pdf_inner_template not found."    END  END ELSE    * normal widget template with area for header, 3 columns & footer    READ TEMPLATE FROM F.WEB.FORMS, "db_inner_template" ELSE TEMPLATE = "db_inner_template not found."  ENDENDCALL SWAP(TEMPLATE,'<!-- column_style -->',"layout":DB.TEMPLATE)*FOR AX = 1 TO 5  CALL SWAP(TEMPLATE,"<!-- AREA":AX:" -->",TEMPLATE.AREA(AX))NEXT AX**PDF* Use special PDF html template for PDF outputIF IFRAME.WIDGET.NAME # "" THEN  * iframe content just contains widget-generated HTML, no extra styles, script, etc.  MAIN.TEMPLATE = "<!-- DASHBOARD -->"END ELSE  IF PDF.WIDGET.NAME # "" THEN    IF WIDGET.OWN.STYLE THEN      * Widget HTML has <head> tag - supplies its own styles      MAIN.TEMPLATE = "<!-- DASHBOARD -->"    END ELSE      * PDF template does not include print, refresh, header or footer      READ MAIN.TEMPLATE FROM F.WEB.FORMS, "pdftemplate" ELSE MAIN.TEMPLATE = "pdftemplate missing."    END  END ELSE    * normal dashboard template    READ MAIN.TEMPLATE FROM F.WEB.FORMS, "dbtemplate" ELSE MAIN.TEMPLATE = "dbtemplate missing."  ENDEND** Insert header stuffADMIN.HEADER = ""IF adminauth = 1 THEN  ADMIN.HEADER := '<li class="admin_tab"><a href="':CGI$PATH:'/MVDB.ADMIN">Admin Area</a></li>'ENDADMIN.HEADER := '<li class="admin_tab"><a href="':CGI$PATH:'/MVDB.MAIN?logout">Log Out</a></li>'HEADER = '<div id="dashboard_nav"><ol class="dashboard_list">'CALL SWAP(MAIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)*11-30-15*EXECUTE "SSELECT MVDB.DEFS BY DB.SORT" CAPTURING JUNKIF NOT(W$EMAILED.REPORT) AND NOT(W$WEBSERVICE) THEN EXECUTE "SSELECT MVDB.DEFS BY DB.SORT" CAPTURING JUNK; *11-30-15DB.LIST = ''LOOP  READNEXT ID ELSE EXIT  DB.LIST<-1> = IDREPEATDB.CNT = DCOUNT( DB.LIST, AM )FOR DBX = 1 TO DB.CNT  ID = DB.LIST<DBX>  MATREAD DB.ITEM FROM F.MVDB.DEFS, ID ELSE MAT DB.ITEM = ""  ADD.OK = TRUE  IF DB.USERS.ALLOWED = "ADMIN" THEN    IF NOT(adminauth) THEN ADD.OK = FALSE ;* This is only for authenticated admins  END ELSE IF DB.USERS.ALLOWED # "" THEN ;* Some user restrictions have been assigned     LOCATE userid IN DB.USERS.ALLOWED<1> SETTING POS ELSE ADD.OK = FALSE   END   IF ADD.OK = TRUE THEN    IF ID = G$CURRENT.DB THEN      HEADER := '<li class="db_active"><a href="':CGI$PATH:'/MVDB.MAIN?dbname=':ID:'">':ID:'</a></li>'    END ELSE      HEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN?dbname=':ID:'">':ID:'</a></li>'    END    HEADER := CHAR(10)  ENDNEXT DBXHEADER := ADMIN.HEADERHEADER := '</ol></div>'IF THEME.CSS # '' THEN THEME.CSS = '<link rel="Stylesheet" href="/db/themes/':THEME.CSS:'" media="screen" type="text/css" />'CALL SWAP(MAIN.TEMPLATE,'<!-- HEADER -->',HEADER)CALL SWAP(MAIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)CALL SWAP(MAIN.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)* Insert footer stuffFOOTER = ''*01-25-16*IF G$DRILLDOWN.MODE THEN*4-25-16*IF G$DRILLDOWN.MODE AND NOT(W$WEBSERVICE) THEN; *01-25-16*4-25-16*  IF G$DD.FROM.DB # "" THEN*4-25-16*    URLENCODE.STRING = G$DD.FROM.DB*4-25-16*    GOSUB URL.ENCODE*4-25-16*    DB.URL = NEW.STRING*4-25-16*    FOOTER = '<a href="/dbc/MVDB.MAIN?dbname=':DB.URL:'">Go Back</a><br />'*4-25-16*  END*4-25-16*END*9-23-16***9-23-16*** 4-25-16 NEW SUPPORT FOR ALLOWING BACKUP*9-23-16***9-23-16*IF DRILLDOWN.STACK<2> <> '' THEN*9-23-16*   FOOTER='<a href="/dbc/MVDB.MAIN?dbname=go_back">Go Back</a><br />'*9-23-16* END*9-23-16** END OF 4-25-16IF WATERMARK # '' THEN  FOOTER := WATERMARK:'<br/>'ENDCALL SWAP(MAIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)*CALL GET.SESSION.VAR(G$CURRENT.DB:"!refresh",REFRESH.RATE)REFRESH = ""IF REFRESH.RATE # '' THEN  RATES = "1":VM:"2":VM:"3":VM:"4":VM:"5":VM:"6":VM:"7":VM:"8":VM:"9"  RATES<2> = "15":VM:"30":VM:"60":VM:"120":VM:"300":VM:"600":VM:"900":VM:"1800":VM:"3600"  LOCATE REFRESH.RATE IN RATES<1> SETTING RPOS THEN    REFRESH = "<meta http-equiv='refresh' content='":RATES<2,RPOS>:"'>"  ENDEND*IF SITE$REFRESH = 'Y' THEN  READ REFRESH.SLIDER FROM F.WEB.FORMS, 'RefreshSlider' ELSE REFRESH.SLIDER=''  CALL SWAP(MAIN.TEMPLATE,'<!-- RefreshSlider -->',REFRESH.SLIDER)  CALL SWAP(MAIN.TEMPLATE,'<!-- REFRESH_RATE -->',REFRESH.RATE)  CALL SWAP(MAIN.TEMPLATE,'<!-- REFRESH -->',REFRESH)  READ TRACK FROM F.WEB.FORMS, 'outerTrackWrapper' ELSE TRACK = ''  CALL SWAP(MAIN.TEMPLATE,'<!-- outerTrackWrapper -->',TRACK)  ENDCALL SWAP(MAIN.TEMPLATE,'<!-- DASHBOARD -->',TEMPLATE)**PDF* Generate the PDF from HTML in MAIN.TEMPLATEIF PDF$ENABLED AND W$PDFABLE AND PDF.WIDGET.NAME # "" THEN  CALL SUB.PDF.FUNC('generate', MAIN.TEMPLATE)  MAIN.TEMPLATE = ''END*EXCEL* Generate the EXCEL from HTML in MAIN.TEMPLATE* 6-27-16  *EXCEL*IF W$EXCELABLE AND EXCEL.WIDGET.NAME # "" THEN  CALL SUB.EXCEL.FUNC('generate', MAIN.TEMPLATE,EXCEL.WIDGET.NAME)END* END OF 6-27-16 *EXCEL***** 9-23-16 NEW DRILLDOWN AND BACKUP LOGIC REQUIRES SAVING GLOBAL.USER.DATA**         AT COMPLETION OF PROCESS**READ DD.STACK FROM F.MVDB.UDATA, SESSION$ID:'$DD.STACK' ELSE DD.STACK=''*DD.LEVEL=DCOUNT(DD.STACK,AM)*IF NOT(DD.LEVEL) THEN DD.LEVEL=1*MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA, SESSION$ID:'$DD.':DD.LEVEL:'.GUD'*MATWRITE WIDGET.USER.DATA ON F.MVDB.UDATA, SESSION$ID:'$':WIDGET.NAME:'$DD.':DD.LEVEL:'.WUD'; * 9-23-16*CALL WEB.SEND(MAIN.TEMPLATE)GLOBAL.INFO(100) = 1 ;* Process completed successfullySTOP*MAKE.HTML: **HTML = ''MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, W$TYPE ELSE MAT WIDGET.TYPES = ""WIDGET.OWN.STYLE = FALSE ;*PDF* set to TRUE if widget-generated HTML includes <head> tag*BEGIN CASE  CASE WT$GROUP = "LC" OR WT$GROUP = "BAR"    IF WT$GROUP = "BAR" THEN CHART.TYPE = "BAR" ELSE      CHART.TYPE = "FCLINECOL"      MULTI.SERIES = (WT$HANDLER = "M")    END    CALL XML.ENCODE(W$BAR.VALUES,"")    CALL XML.ENCODE(W$BAR.LABELS,"")    CALL XML.ENCODE(W$BAR.XLABELS,"")    CALL XML.ENCODE(W$BAR.XMEMO,"")    CALL XML.ENCODE(W$BAR.YMEMO,"")    CALL XML.ENCODE(W$BAR.CAPTION,"")    *1-26-15* W$PRINTABLE = 0  CASE WT$GROUP = "PIE"    CHART.TYPE = WT$HANDLER    CALL XML.ENCODE(W$PIE.LABELS,"")    CALL XML.ENCODE(W$PIE.VALUES,"")    CALL XML.ENCODE(W$PIE.CAPTION,"")    *1-26-15* W$PRINTABLE = 0  CASE WT$GROUP = "FW"    CHART.TYPE = WT$HANDLER    FW.NAME = WT$SWF    CALL XML.ENCODE(W$FW.LOWER.LIMIT.LABEL,"")    CALL XML.ENCODE(W$FW.UPPER.LIMIT.LABEL,"")    CALL XML.ENCODE(W$FW.CAPTION,"")    CALL XML.ENCODE(W$FW.SUBCAPTION,"")    CALL XML.ENCODE(W$FW.TRENDPOINT.LABELS,"")    *1-26-15* W$PRINTABLE = 0  CASE FIELD(W$TYPE,':',1) = "MAP"    CHART.TYPE = "MAP"    CHART.TYPE<2> = FIELD( W$TYPE,':',2)    *1-26-15* W$PRINTABLE = 0  CASE W$TYPE = "USAMAP"    CHART.TYPE = "MAP"    CHART.TYPE<2> = "USA"    *1-26-15* W$PRINTABLE = 0  CASE 1    CHART.TYPE = W$TYPEEND CASE*CHK.VAL = OCONV("123456","MD2$,")CURRENCY = CHK.VAL[1,1]THOUSAND = CHK.VAL[3,1]DECIMAL = CHK.VAL[7,1]**Make sure values are in the correct format for fusion charts*All the positions in WIDGET.INFO we're going to modifyCONV.POS.LIST = 41:AM:44:AM:45:AM:63:AM:73:AM:75:AM:61:AM:62:AMCONV.POS.LIST := 64:AM:54:AM:58:AM:59:AM:11:AM:17:AM:18:AM:66CONV.POS.LIST.LEN = DCOUNT(CONV.POS.LIST,AM)FOR CONV.POS = 1 TO CONV.POS.LIST.LEN  THIS.VAL = WIDGET.INFO(CONV.POS.LIST<CONV.POS>)  IF THIS.VAL # '' THEN    AM.CNT = DCOUNT(THIS.VAL,AM)    FOR ON.AM = 1 TO AM.CNT      VM.CNT = DCOUNT(THIS.VAL<ON.AM>,VM)      FOR ON.VM = 1 TO VM.CNT        SVM.CNT = DCOUNT(THIS.VAL<ON.AM,ON.VM>,SVM)        FOR ON.SVM = 1 TO SVM.CNT          CONV.VAL = THIS.VAL<ON.AM,ON.VM,ON.SVM>          IF OCONV(CONV.VAL,"MCN") # CONV.VAL THEN ;*output formatted            *Convert decimal to . and strip thousand separator            CONVERT DECIMAL:THOUSAND TO '.' IN CONV.VAL            THIS.VAL<ON.AM,ON.VM,ON.SVM> = CONV.VAL          END        NEXT ON.SVM      NEXT ON.VM    NEXT ON.AM    WIDGET.INFO(CONV.POS.LIST<CONV.POS>) = THIS.VAL  ENDNEXT CONV.POS*UPDATE.OPTS = W$CHART.OPTIONSOPTS.DELIM = AMGOSUB OPTS.UPDATEW$CHART.OPTIONS = UPDATE.OPTS*CONVERT '"' TO "'" IN W$FW.METER.VALUE.OPTSCONVERT '"' TO "'" IN W$FW.METER.TARGET.OPTSCONVERT '"' TO "'" IN W$FW.VALUE.OPTSCONVERT '"' TO "'" IN W$PIE.VALUE.OPTSCONVERT '"' TO "'" IN W$BAR.VALUE.OPTSCONVERT '"' TO "'" IN W$BAR.LABEL.OPTSCONVERT '"' TO "'" IN W$BAR.TREND.OPTSCONVERT '"' TO "'" IN W$BAR.XLABEL.OPTSCONVERT '"' TO "'" IN W$MAP.VALUE.OPTSCONVERT '"' TO "'" IN W$MAP.RANGE.OPTSCONVERT '"' TO "'" IN W$FW.SPARK.TREND.OPTSCONVERT '"' TO "'" IN W$FW.DIAL.OPTSCONVERT '"' TO "'" IN W$FW.TRENDPOINT.OPTS*CONVERT @VM TO " " IN W$FW.METER.TARGET.OPTSCONVERT @VM TO " " IN W$BAR.LABEL.OPTS*CONVERT @AM TO " " IN W$FW.METER.TARGET.OPTS** Set up default widget dimensions*  BEGIN CASE    CASE W$WIDTH = 1 AND DB.TEMPLATE = 3      *CHART.WIDTH = 220      *CHART.HEIGHT = 180      CHART.WIDTH = 260      CHART.HEIGHT = 240    CASE W$WIDTH = 1      *CHART.WIDTH = 220      *CHART.HEIGHT = 180      CHART.WIDTH = 300      CHART.HEIGHT = 270    CASE W$WIDTH = 2      *CHART.WIDTH = 400      *CHART.HEIGHT = 280      CHART.WIDTH = 520      CHART.HEIGHT = 350    CASE W$WIDTH = 3 OR 1      *CHART.WIDTH = 600      *CHART.HEIGHT = 400      CHART.WIDTH = 800      CHART.HEIGHT = 530  END CASE**DEBUG='CHART.TYPE=':CHART.TYPE*DEBUG<-1>='FUSION.WIDGETS.ENABLED=':FUSION.WIDGETS.ENABLED*TEMP.VARS=CGI$VARS; CONVERT CHAR(254) TO CHAR(253) IN TEMP.VARS*DEBUG<-1>='VARS=':TEMP.VARS*TEMP.VALS=CGI$VALS; CONVERT CHAR(254) TO CHAR(253) IN TEMP.VALS*DEBUG<-1>='VALS=':TEMP.VALS*WRITE DEBUG ON F.WEB.SESSION, 'DEBUG.TEST'*  BEGIN CASE    CASE CHART.TYPE[1,2] = "FW" AND FUSION.WIDGETS.ENABLED = 0 OR (CHART.TYPE<1> = "MAP" OR FIELD(W$TYPE,':',1) = "USAMAP" AND MAPS.ENABLED = 0)      W$TEXT.DATA = "Widget type ":W$TYPE<1>:" is not enabled."      W$TYPE = "TEXT"      W$INPUT.PROMPT = ""      W$LINK.LABEL = ""      W$LINK.ICON = ""      W$LINK.ICON.TXT = ""      W$LINK.LOCATION = ""      W$LINK.URL = ""      W$LINK.UD.POS = ""      W$LINK.UD.VAL = ""      W$LINK.DD.WIDGET = ""      W$LINK.URL.OPTS = ""      W$PRINTABLE = 0      W$HIDDEN = 0      HTML = '<pre>'      HTML<-1> = W$TEXT.DATA      HTML<-1> = '</pre>'    CASE CHART.TYPE = "FWGAUGE"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 260          *CHART.HEIGHT = 130          CHART.WIDTH = 260          CHART.HEIGHT = 240        CASE W$WIDTH = 1          *CHART.WIDTH = 260          *CHART.HEIGHT = 130          CHART.WIDTH = 300          CHART.HEIGHT = 270        CASE W$WIDTH = 2          *CHART.WIDTH = 400          *CHART.HEIGHT = 200          CHART.WIDTH = 520          CHART.HEIGHT = 270        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 750          *CHART.HEIGHT = 280          CHART.WIDTH = 1015          CHART.HEIGHT = 410      END CASE      *IF W$TYPE = "HLINEARGAUGE" OR W$TYPE = "HLED" THEN CHART.HEIGHT = 80      *IF W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" THEN CHART.WIDTH = 110 ; CHART.HEIGHT = 280      *IF W$TYPE = "CYLINDER" THEN CHART.WIDTH = 140      *IF W$TYPE = "BULB" THEN CHART.WIDTH = 110 ; CHART.HEIGHT = 130      IF W$TYPE = "HLINEARGAUGE" OR W$TYPE = "HLED" THEN CHART.HEIGHT = 80      IF W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" THEN CHART.WIDTH = 110      IF W$TYPE = "CYLINDER" THEN CHART.WIDTH = 140      IF W$TYPE = "BULB" THEN CHART.WIDTH = 110 ; CHART.HEIGHT = 130      IF W$TYPE = "ANGULARGAUGE" THEN        BEGIN CASE          CASE W$WIDTH = 1            CHART.HEIGHT = 130          CASE W$WIDTH = 2            CHART.HEIGHT = 200        END CASE      END      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML*      GOSUB TICKMARK.OPTIONS ;* Add chart options to support tickmarks*      IF W$TYPE = "THERMOMETER" AND W$FW.THERMOMETER.COLOR # "" THEN        LOCATE W$FW.THERMOMETER.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          W$FW.THERMOMETER.COLOR = NAME.COLOR<2,CPOS>        END        W$CHART.OPTIONS<-1> = "gaugeFillColor='":W$FW.THERMOMETER.COLOR:"'"      END* LJB 7-10-10 Removed DD restriction for angular and linear gauge charts. Not sure why it* was here in the first place*    IF W$TYPE = "HLED" OR W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" OR W$TYPE = "CYLINDER" OR W$TYPE = "BULB" THEN      IF W$FW.DD.WIDGET # "" THEN        FW.WIDGET.POS = 1        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          W$CHART.OPTIONS<-1> = " clickURL='":NEW.STRING:"'"        END      END*    END      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END*      PDATA = '<colorRange>'      COLOR.RANGE.OPTS = W$FW.COLOR.RANGE<4>      CONVERT '"' TO "'" IN COLOR.RANGE.OPTS      FOR PX = 1 TO DCOUNT( W$FW.COLOR.RANGE<1>, VM )        USE.COLOR = W$FW.COLOR.RANGE<3,PX>        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = "#FFFFFF" ;* White        END        CONVERT "#" TO "" IN USE.COLOR        UPDATE.OPTS = COLOR.RANGE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        COLOR.RANGE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<color minValue='":W$FW.COLOR.RANGE<1,PX>:"' maxValue='":W$FW.COLOR.RANGE<2,PX>:"' code='":USE.COLOR:"' ":COLOR.RANGE.OPTS<1,PX>:" />"      NEXT PX      PDATA := '</colorRange>'      METER.STYLE = 0      IF W$TYPE = "HLED" OR W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" OR W$TYPE = "CYLINDER" OR W$TYPE = "BULB" THEN        PDATA := '[METER_VALUE]'        METER.STYLE = 1      END ELSE        IF W$TYPE = "ANGULARGAUGE" THEN          PDATA := '<dials>'          DNODE = "dial"        END ELSE          PDATA := '<pointers>'          DNODE = 'pointer'        END        FOR PX = 1 TO DCOUNT( W$FW.DIAL.VALUES<1>, VM )          UPDATE.OPTS = W$FW.DIAL.OPTS<1,PX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.DIAL.OPTS<1,PX> = UPDATE.OPTS          PDATA := "<":DNODE:" value='":W$FW.DIAL.VALUES<1,PX>:"' ":W$FW.DIAL.OPTS<1,PX>          FW.WIDGET.POS = PX          GOSUB MAKE.FW.DD.URL          IF URL # "" THEN            URLENCODE.STRING = URL            GOSUB URL.ENCODE ;* Encode the entire URL            PDATA := " link='":NEW.STRING:"'"          END          PDATA := " />"        NEXT PX        PDATA := '</':DNODE:'s>'        PDATA := '<trendpoints>'        FOR PX = 1 TO DCOUNT( W$FW.TRENDPOINT.VALUES<1>, VM )          UPDATE.OPTS = W$FW.TRENDPOINT.OPTS<1,PX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.TRENDPOINT.OPTS<1,PX> = UPDATE.OPTS          PDATA := "<point startValue='":W$FW.TRENDPOINT.VALUES<1,PX>:"' "          IF W$FW.TRENDPOINT.VALUES<2,PX> # "" THEN PDATA := "endValue='":W$FW.TRENDPOINT.VALUES<2,PX>:"' "          PDATA := "displayValue='":W$FW.TRENDPOINT.LABELS<1,PX>:"' ":W$FW.TRENDPOINT.OPTS<1,PX>:" />"        NEXT PX        PDATA := '</trendpoints>'      END      CALL SWAP(SXML,'[CHART.PALETTE]',W$FW.CHART.PALETTE)      CALL SWAP(SXML,'[UPPER.LIMIT]',W$FW.UPPER.LIMIT)      CALL SWAP(SXML,'[LOWER.LIMIT]',W$FW.LOWER.LIMIT)      CALL SWAP(SXML,'[UPPER.LIMIT.DISPLAY]',W$FW.UPPER.LIMIT.LABEL)      CALL SWAP(SXML,'[LOWER.LIMIT.DISPLAY]',W$FW.LOWER.LIMIT.LABEL)      CALL SWAP(SXML,'[NUMBER.PREFIX]',W$FW.NUMBER.PREFIX)      CALL SWAP(SXML,'[NUMBER.SUFFIX]',W$FW.NUMBER.SUFFIX)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)*      IF METER.STYLE THEN        HTML = ''        MASTER.SXML = SXML        MASTER.PDATA = PDATA        MASTER.FW.TEMPLATE = FW.TEMPLATE        VAL.CNT = DCOUNT( W$FW.METER.VALUE<1>, @VM )        FOR MVX = 1 TO VAL.CNT          UPDATE.OPTS = W$FW.METER.VALUE.OPTS<1,MVX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.METER.VALUE.OPTS<1,MVX> = UPDATE.OPTS          VALDATA = '<value ':W$FW.METER.VALUE.OPTS<1,MVX>' >':W$FW.METER.VALUE<1,MVX>:'</value>'          CALL SWAP(PDATA,'[METER_VALUE]',VALDATA)          CALL SWAP(SXML,'[CHART.DATA]',PDATA)          CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX:'_':MVX)          CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)          HTML := FW.TEMPLATE          SXML = MASTER.SXML          PDATA = MASTER.PDATA          FW.TEMPLATE = MASTER.FW.TEMPLATE        NEXT MVX*        IF VAL.CNT > 1 THEN          IF W$TYPE = "FWBULB" THEN            SHRINK.MLT = 1            FOR NN = 2 TO VAL.CNT              SHRINK.MLT -= .2            NEXT NN            IF SHRINK.MLT < .25 THEN SHRINK.MLT = .25            CHART.WIDTH = INT( CHART.WIDTH * SHRINK.MLT )            CHART.HEIGHT = INT( CHART.WIDTH * SHRINK.MLT )          END        END      END ELSE        CALL SWAP(SXML,'[CHART.DATA]',PDATA)        CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)        CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)        HTML = FW.TEMPLATE      END    CASE CHART.TYPE = "FWBULLET"      IF W$TYPE = "HBULLET" THEN        BEGIN CASE          CASE W$WIDTH = 1 AND DB.TEMPLATE = 3            *HART.WIDTH = 220            *HART.HEIGHT = 60            CHART.WIDTH = 260            CHART.HEIGHT = 60          CASE W$WIDTH = 1            *CHART.WIDTH = 220            *CHART.HEIGHT = 60            CHART.WIDTH = 300            CHART.HEIGHT = 60          CASE W$WIDTH = 2            *CHART.WIDTH = 400            *CHART.HEIGHT = 60            CHART.WIDTH = 520            CHART.HEIGHT = 60          CASE W$WIDTH = 3 OR 1            *CHART.WIDTH = 750            *CHART.HEIGHT = 60            CHART.WIDTH = 1015            CHART.HEIGHT = 60        END CASE      END ELSE        BEGIN CASE          CASE W$WIDTH = 1 AND DB.TEMPLATE = 3            *CHART.WIDTH = 110            *CHART.HEIGHT = 180            CHART.WIDTH = 110            CHART.HEIGHT = 240          CASE W$WIDTH = 1            *CHART.WIDTH = 110            *CHART.HEIGHT = 180            CHART.WIDTH = 110            CHART.HEIGHT = 270          CASE W$WIDTH = 2            *CHART.WIDTH = 110            *CHART.HEIGHT = 280            CHART.WIDTH = 110            CHART.HEIGHT = 300          CASE W$WIDTH = 3 OR 1            *CHART.WIDTH = 110            *CHART.HEIGHT = 400            CHART.WIDTH = 110            CHART.HEIGHT = 410        END CASE      END      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML*      GOSUB TICKMARK.OPTIONS ;* Add chart options to support tickmarks*      IF W$FW.BC.PLOT.COLOR # "" THEN        USE.COLOR = W$FW.BC.PLOT.COLOR        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = ""        END        IF USE.COLOR # "" THEN W$CHART.OPTIONS<-1> = "plotFillColor='":USE.COLOR:'"'      END      IF W$FW.BC.TARGET.COLOR # "" THEN        USE.COLOR = W$FW.BC.TARGET.COLOR        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = ""        END        IF USE.COLOR # "" THEN W$CHART.OPTIONS<-1> = "targetColor='":USE.COLOR:'"'      END*      IF W$FW.DD.WIDGET # "" THEN        FW.WIDGET.POS = 1        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          W$CHART.OPTIONS<-1> = " clickURL='":NEW.STRING:"'"        END      END*      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END*      PDATA = '<colorRange>'      COLOR.RANGE.OPTS = W$FW.COLOR.RANGE<4>      UPDATE.OPTS = COLOR.RANGE.OPTS      OPTS.DELIM = ' '      GOSUB OPTS.UPDATE      COLOR.RANGE.OPTS = UPDATE.OPTS      FOR PX = 1 TO DCOUNT( W$FW.COLOR.RANGE<1>, VM )        USE.COLOR = W$FW.COLOR.RANGE<3,PX>        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = "#FFFFFF" ;* White        END        PDATA := "<color minValue='":W$FW.COLOR.RANGE<1,PX>:"' maxValue='":W$FW.COLOR.RANGE<2,PX>:"' code='":USE.COLOR:"' ":COLOR.RANGE.OPTS<1,PX>:" />"      NEXT PX      PDATA := '</colorRange>'      PDATA := '<value ':W$FW.METER.VALUE.OPTS:' >':W$FW.METER.VALUE:'</value>'      PDATA := '<target ':W$FW.METER.TARGET.OPTS:' >':W$FW.METER.TARGET:'</target>'      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CAPTION]',W$FW.CAPTION)      CALL SWAP(SXML,'[SUBCAPTION]',W$FW.SUBCAPTION)      CALL SWAP(SXML,'[CHART.PALETTE]',W$FW.CHART.PALETTE)      CALL SWAP(SXML,'[UPPER.LIMIT]',W$FW.UPPER.LIMIT)      CALL SWAP(SXML,'[LOWER.LIMIT]',W$FW.LOWER.LIMIT)      CALL SWAP(SXML,'[NUMBER.PREFIX]',W$FW.NUMBER.PREFIX)      CALL SWAP(SXML,'[NUMBER.SUFFIX]',W$FW.NUMBER.SUFFIX)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = FW.TEMPLATE    CASE CHART.TYPE = "FWSPARK"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 220          *CHART.HEIGHT = 40          CHART.WIDTH = 260          CHART.HEIGHT = 40        CASE W$WIDTH = 1          *CHART.WIDTH = 220          *CHART.HEIGHT = 40          CHART.WIDTH = 300          CHART.HEIGHT = 40        CASE W$WIDTH = 2          *CHART.WIDTH = 400          *CHART.HEIGHT = 40          CHART.WIDTH = 520          CHART.HEIGHT = 40        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 750          *CHART.HEIGHT = 40          CHART.WIDTH = 1015          CHART.HEIGHT = 40      END CASE      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML*      IF W$FW.DD.WIDGET # "" THEN        FW.WIDGET.POS = 1        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          W$CHART.OPTIONS<-1> = " clickURL='":NEW.STRING:"'"        END      END      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END*      PDATA = '<dataset>'      FOR PX = 1 TO DCOUNT( W$FW.VALUES<1>, VM )        UPDATE.OPTS = W$FW.VALUE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        W$FW.VALUE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<set value='":W$FW.VALUES<1,PX>:"' ":W$FW.VALUE.OPTS<1,PX>:" />"      NEXT PX      PDATA := '</dataset>'      IF W$FW.SPARK.TREND.BEG # "" THEN        PDATA := '<trendlines>'        FOR TLX = 1 TO DCOUNT( W$FW.SPARK.TREND.BEG, VM )          UPDATE.OPTS = W$FW.SPARK.TREND.OPTS<1,TLX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.SPARK.TREND.OPTS<1,TLX> = UPDATE.OPTS          PDATA := "<line startValue='":W$FW.SPARK.TREND.BEG<1,TLX>:"' endValue='":W$FW.SPARK.TREND.END<1,TLX>:"' ":W$FW.SPARK.TREND.OPTS<1,TLX>:" />"        NEXT TLX        PDATA := '</trendlines>'      END      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CAPTION]',W$FW.CAPTION)      CALL SWAP(SXML,'[SUBCAPTION]',W$FW.SUBCAPTION)      CALL SWAP(SXML,'[CHART.PALETTE]',W$FW.CHART.PALETTE)      CALL SWAP(SXML,'[UPPER.LIMIT]',W$FW.UPPER.LIMIT)      CALL SWAP(SXML,'[LOWER.LIMIT]',W$FW.LOWER.LIMIT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = FW.TEMPLATE    CASE CHART.TYPE = "FWFP"      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END      COLOR.LIST = W$FW.COLORS      GOSUB APPLY.COLOR.OPTS*      PDATA = ''      FOR PX = 1 TO DCOUNT( W$FW.LABELS<1>, VM )        UPDATE.OPTS = W$FW.VALUE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        W$FW.VALUE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<set label='":W$FW.LABELS<1,PX>:"' value='":W$FW.VALUES<1,PX>:"' color='":COLOR.ARRAY<1,PX>:"' ":W$FW.VALUE.OPTS<1,PX>        FW.WIDGET.POS = PX        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          PDATA := " link='":NEW.STRING:"'"        END        PDATA := " />"      NEXT PX      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CAPTION]',W$FW.CAPTION)      CALL SWAP(SXML,'[SUBCAPTION]',W$FW.SUBCAPTION)      CALL SWAP(SXML,'[NUMBER.PREFIX]',W$FW.NUMBER.PREFIX)      CALL SWAP(SXML,'[NUMBER.SUFFIX]',W$FW.NUMBER.SUFFIX)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = FW.TEMPLATE    CASE CHART.TYPE = "FCPIE"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 260          CHART.HEIGHT = 240        CASE W$WIDTH = 1          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 300          CHART.HEIGHT = 270        CASE W$WIDTH = 2          *CHART.WIDTH = 420          *CHART.HEIGHT = 240          CHART.WIDTH = 520          CHART.HEIGHT = 365        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 730          *CHART.HEIGHT = 320          CHART.WIDTH = 800          CHART.HEIGHT = 550      END CASE      PT.NAME = WT$SWF      PS.NAME = W$TYPE:".SETTINGS"      IF W$CHART.HEIGHT # "" THEN CHART.HEIGHT = W$CHART.HEIGHT      IF W$TYPE = "FC3DPIE" THEN        CHART.HEIGHT = INT(CHART.HEIGHT*.75)      END      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ PIE.TEMPLATE FROM F.WEB.FORMS, "FCF_template.html" ELSE PIE.TEMPLATE = "FCF_template.html not found"      PT.NAME = OCONV(PT.NAME,'MCL')      CALL SWAP(PIE.TEMPLATE,'[FCF_MODULE]',PT.NAME)*      READ SXML FROM F.MVDB.CONTROL, PS.NAME ELSE SXML = ''      CONVERT AM TO "" IN SXML      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'graph'        GOSUB APPLY.XML.OPTS      END      COLOR.LIST = W$PIE.COLORS      GOSUB APPLY.COLOR.OPTS      PDATA = ''      FOR PX = 1 TO DCOUNT( W$PIE.LABELS<1>, VM )        UPDATE.OPTS = W$PIE.VALUE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        W$PIE.VALUE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<set label='":W$PIE.LABELS<1,PX>:"' color='":COLOR.ARRAY<1,PX>:"' ":W$PIE.VALUE.OPTS<1,PX>:" value='":W$PIE.VALUES<1,PX>:"'"        FW.WIDGET.POS = PX        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          PDATA := " link='":NEW.STRING:"'"        END        PDATA := ' />'      NEXT PX      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CHART.TITLE]',W$PIE.CAPTION)      RADIUS = INT(CHART.WIDTH/2)-INT(CHART.WIDTH*.15)      CALL SWAP(SXML,'[RADIUS]',RADIUS)      CALL SWAP(PIE.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(PIE.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(PIE.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(PIE.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = PIE.TEMPLATE    CASE CHART.TYPE = "FCLINECOL"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 260          CHART.HEIGHT = 240        CASE W$WIDTH = 1          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 300          CHART.HEIGHT = 270        CASE W$WIDTH = 2          *CHART.WIDTH = 420          *CHART.HEIGHT = 240          CHART.WIDTH = 520          CHART.HEIGHT = 300        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 730          *CHART.HEIGHT = 320          CHART.WIDTH = 1015          CHART.HEIGHT = 425      END CASE      IF W$CHART.HEIGHT # "" THEN CHART.HEIGHT = W$CHART.HEIGHT      BT.NAME = WT$SWF      BS.NAME = W$TYPE:".SETTINGS"      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      COLOR.LIST = W$BAR.COLORS      GOSUB APPLY.COLOR.OPTS*      READ BAR.TEMPLATE FROM F.WEB.FORMS, "FCF_template.html" ELSE BAR.TEMPLATE = "FCF_template.html not found"      BT.NAME = OCONV(BT.NAME,'MCL')      CALL SWAP(BAR.TEMPLATE,'[FCF_MODULE]',BT.NAME)*      READ SXML FROM F.MVDB.CONTROL, BS.NAME ELSE SXML = ''      CONVERT AM TO "" IN SXML      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'graph'        GOSUB APPLY.XML.OPTS      END      PDATA = ''      IF MULTI.SERIES THEN        PDATA := '<categories>'        FOR PX = 1 TO DCOUNT( W$BAR.XLABELS<1>, VM )          PDATA := "<category label='":W$BAR.XLABELS<1,PX>:"' ":W$BAR.XLABEL.OPTS<1,PX>:" />"        NEXT PX        PDATA := '</categories>'        FOR PX = 1 TO DCOUNT( W$BAR.LABELS,AM)          PDATA := "<dataset seriesname='":W$BAR.LABELS<PX>:"' color='":COLOR.ARRAY<1,PX>:"' ":W$BAR.LABEL.OPTS<PX>:" >"          FOR PXV = 1 TO DCOUNT( W$BAR.VALUES<PX>,VM)            UPDATE.OPTS = W$BAR.VALUE.OPTS<PX,PXV>            OPTS.DELIM = ' '            GOSUB OPTS.UPDATE            W$BAR.VALUE.OPTS<PX,PXV> = UPDATE.OPTS            MS.VALUE=W$BAR.VALUES<PX,PXV>;  *ZUMASYS 1-5-15            MS.LABEL=W$BAR.XLABELS<1,PXV>; *ZUMASYS 1-5-15* 7-29-15 CHANGE ANY &lt;br&gt;'s to spaces            LOOP              BR.POS=INDEX(MS.LABEL,'&lt;br&gt;',1)            UNTIL NOT(BR.POS) DO              MS.LABEL=MS.LABEL[1,BR.POS-1]:' ':(MS.LABEL[BR.POS+10,9999])            REPEAT* END OF 7-29-15            MS.SERIES=W$BAR.LABELS<PX>;    *ZUMASYS 3-15-15*ZUMASYS 1-5-15*          PDATA := "<set value='":W$BAR.VALUES<PX,PXV>:"' ":W$BAR.VALUE.OPTS<PX,PXV>            PDATA := "<set value='":MS.VALUE:"' ":W$BAR.VALUE.OPTS<PX,PXV>; *ZUMASYS 1-5-15            FW.WIDGET.POS = PX            GOSUB MAKE.FW.DD.URL            IF URL # "" THEN              URLENCODE.STRING = URL              GOSUB URL.ENCODE ;* Encode the entire URL              PDATA := " link='":NEW.STRING:"'"            END            PDATA := ' />'          NEXT PXV          PDATA := '</dataset>'        NEXT PX      END ELSE        FOR PX = 1 TO DCOUNT( W$BAR.XLABELS<1>, VM )          IF INDEX(W$BAR.VALUES<1,PX>,'-',1) THEN            SIGN.MINUS = 1          END ELSE SIGN.MINUS = 0* 3-4-15 ZUMASYS - SUPPORT DECIMALS IN BAR.VALUES          THIS.BAR.VALUES=W$BAR.VALUES<1,PX>          IF INDEX(THIS.BAR.VALUES,'.',1) THEN            THIS.BAR.VALUES.1=OCONV(FIELD(THIS.BAR.VALUES,'.',1),'MCN')            THIS.BAR.VALUES.2=OCONV(FIELD(THIS.BAR.VALUES,'.',2),'MCN')            W$BAR.VALUES<1,PX>=THIS.BAR.VALUES.1:'.':THIS.BAR.VALUES.2          END ELSE            W$BAR.VALUES<1,PX> = OCONV(THIS.BAR.VALUES, 'MCN' )          END* END OF 3-4-15 ZUMASYS          IF SIGN.MINUS THEN W$BAR.VALUES<1,PX> = '-':W$BAR.VALUES<1,PX>          PDATA := "<set label='":W$BAR.XLABELS<1,PX>:"' value='":W$BAR.VALUES<1,PX>+0:"' "          IF NOT(INDEX(W$BAR.VALUE.OPTS<1,PX>,'color=',1)) THEN* Color setting is not being overridden by the W$BAR.VALUE.OPTS info            PDATA := "color='":COLOR.ARRAY<1,1>:"' "          END          UPDATE.OPTS = W$BAR.VALUE.OPTS<1,PX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$BAR.VALUE.OPTS<1,PX> = UPDATE.OPTS          PDATA := ' ':W$BAR.VALUE.OPTS<1,PX>          FW.WIDGET.POS = PX          GOSUB MAKE.FW.DD.URL          IF URL # "" THEN            URLENCODE.STRING = URL            GOSUB URL.ENCODE ;* Encode the entire URL            PDATA := " link='":NEW.STRING:"'"          END          PDATA := ' />'        NEXT PX      END      IF W$BAR.TREND.BEG # "" THEN        PDATA := '<trendLines>'        FOR TLX = 1 TO DCOUNT( W$BAR.TREND.BEG<1>, VM )          PDATA := "<line startValue='":W$BAR.TREND.BEG<1,TLX>:"' "          IF W$BAR.TREND.END<1,TLX> # "" THEN PDATA := "endValue='":W$BAR.TREND.END<1,TLX>:"' "          UPDATE.OPTS = W$BAR.TREND.OPTS<1,TLX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$BAR.TREND.OPTS<1,TLX> = UPDATE.OPTS          PDATA := W$BAR.TREND.OPTS<1,TLX>          PDATA := " />"        NEXT TLX        PDATA := '</trendLines>'      END      CONVERT '"' TO "'" IN PDATA      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CHART.TITLE]',W$BAR.CAPTION)      CALL SWAP(SXML,'[YMEMO]',W$BAR.YMEMO<1>)      CALL SWAP(SXML,'[XMEMO]',W$BAR.XMEMO<1>)      CALL SWAP(BAR.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(BAR.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(BAR.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(BAR.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = BAR.TEMPLATE    CASE CHART.TYPE<1> = "MAP" OR FIELD(W$TYPE,':',1) = "USAMAP"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          NULL        CASE W$WIDTH = 1          NULL        CASE W$WIDTH = 2          *CHART.WIDTH = 420          *CHART.HEIGHT = 240          CHART.WIDTH = 520          CHART.HEIGHT = 300        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 730          *CHART.HEIGHT = 320          CHART.WIDTH = 1015          CHART.HEIGHT = 425      END CASE      IF W$CHART.HEIGHT # "" THEN CHART.HEIGHT = W$CHART.HEIGHT      CALL XML.ENCODE(W$MAP.RANGE.NAME,"")      IF FIELD(W$TYPE,':',1) = "USAMAP" THEN        STATE.MAP = FIELD( W$TYPE,':',2)        IF STATE.MAP # "" THEN* This is a drill-down to a specific state detail. We need to match the* map name with the selected state.* selected state.          READ STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ""          CONVERT "," TO @VM IN STATE.NAMES          LOCATE STATE.MAP IN STATE.NAMES<1> SETTING STATE.POS THEN            MAP.NAME = STATE.NAMES<2,STATE.POS>          END ELSE            MAP.NAME = "USA"            W$TITLE := " - Error: Invalid State: ":STATE.MAP          END        END ELSE          MAP.NAME = "USA"        END      END ELSE        MAP.NAME = CHART.TYPE<2>      END      READ MAP.LIST FROM F.MVDB.CONTROL, 'FCMAP.NAMES' ELSE MAP.LIST = ""      LOCATE MAP.NAME IN MAP.LIST SETTING DUM THEN* This is a valid map name        MS.NAME = MAP.NAME:".SETTINGS"        READ SXML FROM F.MVDB.CONTROL, MS.NAME ELSE SXML = ''        IF SXML = "" THEN          MS.NAME = "FCMAP.SETTINGS"          READ SXML FROM F.MVDB.CONTROL, MS.NAME ELSE SXML = ''        END        MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)        MOVIE.WIDTH = CHART.WIDTH + 75*        READ MAP.TEMPLATE FROM F.WEB.FORMS, "FCMAP_template.html" ELSE MAP.TEMPLATE = "FMAP_template.html not found"        CALL SWAP(MAP.TEMPLATE,'[FCMAP_MODULE]',MAP.NAME)*        CONVERT AM TO "" IN SXML        IF W$CHART.OPTIONS # "" THEN          XML.OPTS = W$CHART.OPTIONS          NODE.NAME = 'map'          GOSUB APPLY.XML.OPTS        END*        MAPDATA = '<colorRange>'        FOR CX = 1 TO DCOUNT( W$MAP.RANGE.NAME<1>, @VM )          THIS.COLOR = W$MAP.RANGE.COLOR<1,CX>          LOCATE THIS.COLOR IN NAME.COLOR<1> SETTING CPOS THEN            USE.COLOR = NAME.COLOR<2,CPOS>          END ELSE USE.COLOR = THIS.COLOR          UPDATE.OPTS = W$MAP.RANGE.OPTS<1,CX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$MAP.RANGE.OPTS<1,CX> = UPDATE.OPTS          MAPDATA := "<color minValue='":W$MAP.RANGE.LOW<1,CX>:"' maxValue='":W$MAP.RANGE.HIGH<1,CX>:"' displayValue='":W$MAP.RANGE.NAME<1,CX>:"' color='":USE.COLOR          MAPDATA := "' ":W$MAP.RANGE.OPTS<1,CX>:" />"        NEXT CX        MAPDATA := '</colorRange>'        MAPDATA := '<data>'        FOR MX = 1 TO DCOUNT( W$MAP.IDS<1>, @VM )          IF W$MAP.VALUE.DD<1,MX> = 1 THEN            MAP.LINK = CGI$PATH:"/MVDB.MAIN?udview=":WIDGET.NAME:"&udpos1=1&udval1=":W$MAP.IDS<1,MX>:"&mapdd"          END ELSE IF W$MAP.VALUE.LINK<1,MX> # "" THEN            MAP.LINK = W$MAP.VALUE.LINK<1,MX>            IF W$MAP.LINK.MODE<1,MX> = "N" THEN MAP.LINK = "n-":MAP.LINK          END ELSE            IF W$FW.DD.WIDGET<1,MX> # "" THEN              FW.WIDGET.POS = MX              GOSUB MAKE.FW.DD.URL              MAP.LINK = URL            END ELSE              MAP.LINK = ""            END          END          IF MAP.LINK # "" THEN            URLENCODE.STRING = MAP.LINK            GOSUB URL.ENCODE            MAP.LINK = NEW.STRING            MAP.LINK = "link='":MAP.LINK:"' "          END          TOOLTEXT = W$MAP.VALUE.TOOLTEXT<1,MX>          CALL XML.ENCODE(TOOLTEXT,'')          UPDATE.OPTS = W$MAP.VALUE.OPTS<1,MX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$MAP.VALUE.OPTS<1,MX> = UPDATE.OPTS          MAPDATA := "<entity id='":W$MAP.IDS<1,MX>:"' value='":W$MAP.VALUES<1,MX>:"' ":W$MAP.VALUE.OPTS<1,MX>:" toolText='":TOOLTEXT:"' ":MAP.LINK:"/>"        NEXT MX        MAPDATA := '</data>'        CONVERT '"' TO "'" IN MAPDATA        CALL SWAP(SXML,'[CHART.DATA]',MAPDATA)        CALL SWAP(MAP.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)        CALL SWAP(MAP.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)        CALL SWAP(MAP.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)        CALL SWAP(MAP.TEMPLATE,'<!-- CHARTXML -->',SXML)        HTML = MAP.TEMPLATE      END ELSE        HTML = "Map name '":MAP.NAME:"' not found in MVDB.CONTROL, FCMAP.NAMES"      END    CASE W$TYPE = "TABLE"      HTML<-1> = '<table class="gridWidget" width="100%" >'      HTML<-1> = '<thead>'      HTML<-1> = '<tr>'      TABLE.COLS = DCOUNT( W$TABLE.COL.LABELS<1>, VM )      FOR CHX = 1 TO TABLE.COLS        IF W$TABLE.COL.JUST<1,CHX> # "" THEN          ALIGN = ' align="':W$TABLE.COL.JUST<1,CHX>:'"'        END ELSE ALIGN = ""        LABEL = W$TABLE.COL.LABELS<1,CHX>        IF LABEL = '' THEN LABEL = '&nbsp;'        HTML<-1> = '<th':ALIGN:' >':LABEL:'</th>'      NEXT CHX      HTML<-1> = '</tr>'      HTML<-1> = '</thead>'      HTML<-1> = '<tbody>'      TABLE.ROWS = DCOUNT( W$TABLE.DATA, AM )      FOR TRX = 1 TO TABLE.ROWS        HTML<-1> = '<tr>'        THIS.ROW = W$TABLE.DATA<TRX>        FOR TRC = 1 TO TABLE.COLS          IF W$TABLE.COL.JUST<1,TRC> # "" THEN            ALIGN = ' align="':W$TABLE.COL.JUST<1,TRC>:'"'          END ELSE ALIGN = ""          VALUE = THIS.ROW<1,TRC>          IF VALUE = '' THEN VALUE = '&nbsp;'          THIS.COL = '<td':ALIGN:'>':VALUE:'</td>'          HTML<-1> = THIS.COL        NEXT TRC        HTML<-1> = '</tr>'      NEXT TRX      HTML<-1> = '</tbody>'      HTML<-1> = '<tfoot>'      HTML<-1> = '<tr>'      FOR CHX = 1 TO TABLE.COLS        IF W$TABLE.COL.JUST<1,CHX> # "" THEN          ALIGN = ' align="':W$TABLE.COL.JUST<1,CHX>:'"'        END ELSE ALIGN = ""        VALUE = W$TABLE.TOTALS<1,CHX>        IF VALUE = '' THEN VALUE = '&nbsp;'        HTML<-1> = '<td':ALIGN:'>':VALUE:'</td>'      NEXT CHX      HTML<-1> = '</tr>'      HTML<-1> = '</tfoot>'      HTML<-1> = '</table>'    CASE W$TYPE = "TEXT"      HTML = '<pre>'      HTML<-1> = W$TEXT.DATA      HTML<-1> = '</pre>'    CASE W$TYPE = "HTML"      HTML = W$HTML.DATA*PDF* Check if widget-generated HTML includes a <head> tag, which we interpret as having its own styling      IF INDEX(HTML,'<head>',1)+INDEX(HTML,'<HEAD>',1) THEN WIDGET.OWN.STYLE = TRUE      IF WIDGET.OWN.STYLE AND IFRAME.WIDGET.NAME = "" AND PDF.WIDGET.NAME = "" THEN* Not rendering PDF or returning iframe content - change* widget content to iframe so styles render properly.        CALL REBUILD.URL.STRING(IFRAME.URL.STRING)        URLENCODE.STRING = WIDGET.NAME        GOSUB URL.ENCODE        IFRAME.URL.STRING = '/dbc/MVDB.MAIN?iframewidget=':NEW.STRING:'&':IFRAME.URL.STRING ;* stash widget name in URL string so we know which widget to use for iframe content        HTML = '<iframe src="':IFRAME.URL.STRING:'" width="100%" style="height: 100vh;">':WIDGET.NAME:'</iframe>'      END    CASE 1      HTML = "INVALID TYPE ":W$TYPE  END CASE*  IF IFRAME.WIDGET.NAME # "" THEN* Returning iframe content - no widget styling needed    HTML.DIV = '<!-- WIDGETDATA -->'  END ELSE    IF WIDGET.OWN.STYLE AND PDF.WIDGET.NAME # "" THEN* Render PDF from widget HTML that has a <head> tag - no widget styling needed      HTML.DIV = '<!-- WIDGETDATA -->'    END ELSE* normal widget styles      HTML.DIV = WIDGET.DIV    END  END*  Q1.LINKS = ''  Q2.LINKS = ''  Q3.LINKS = ''  Q4.LINKS = ''  Q5.LINKS = ''** Add source code edit link for administrative user*** FIX 6-1-16 ADD A GO BACK IN ICON LIST*  NEXT.LINK.POS = DCOUNT(W$LINK.LABEL<1>,@VM)  NEXT.LINK.POS2 = DCOUNT(W$LINK.ICON<1>,@VM)  IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS=NEXT.LINK.POS2  READ DD.STACK FROM F.MVDB.UDATA, SESSION$ID:'$DD.STACK' ELSE DD.STACK=''  MAX.DD.STACK=DCOUNT(DD.STACK,AM)  IF MAX.DD.STACK > 2 THEN    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = 'arrow_left.png'    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Go Back"    W$LINK.URL<1,NEXT.LINK.POS> = "javascript:history.back()"; * 9-23-16 *    W$LINK.LOCATION<1,NEXT.LINK.POS> = "C"  END* END FIX 6-1-16  IF adminauth = 1 THEN* 6-1-16 *  NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )* 6-1-16 *  NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )* 6-1-16 *  IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "script_edit.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Edit BASIC Source"    IF WDEBUG.MODE OR WFAIL.MODE THEN      USE.SUBNAME = GLOBAL.INFO(91) ;* Original subroutine name    END ELSE USE.SUBNAME = SUBNAME    URLENCODE.STRING = USE.SUBNAME    GOSUB URL.ENCODE    URL.SUBNAME = NEW.STRING    W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=":URL.SUBNAME    W$LINK.URL.OPTS<1,NEXT.LINK.POS> = 'target="ED_MVDB.SUBS_':URL.SUBNAME:'"'    W$LINK.LOCATION<1,NEXT.LINK.POS> = "C"** Add debug widget link for administrative user*    IF NOT(WFAIL.MODE) THEN      NEXT.LINK.POS += 1      W$LINK.ICON<1,NEXT.LINK.POS> = "information.png" ;* Change this to a real debug icon      IF WDEBUG.MODE THEN        W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Normal Mode"      END ELSE        W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Debug Mode"      END      URLENCODE.STRING = WIDGET.NAME      GOSUB URL.ENCODE      IF WDEBUG.MODE THEN        W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?undebug_widget=":NEW.STRING      END ELSE        W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?debug_widget=":NEW.STRING      END      W$LINK.LOCATION<1,NEXT.LINK.POS> = "C"    END  END  IF W$PRINTABLE = 1 THEN    NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )    NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )    IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "printer.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Print"    W$LINK.LABEL<1,NEXT.LINK.POS> = "Print"    W$LINK.URL<1,NEXT.LINK.POS> = "#"*W$LINK.URL.OPTS<1,NEXT.LINK.POS> = 'onClick="printThis(this);"'    W$LINK.URL.OPTS<1,NEXT.LINK.POS> = 'class="DansClass"'    W$LINK.LOCATION<1,NEXT.LINK.POS> = 'C'  END**PDF* If PDF generation is enabled, and supported for this widget, add a PDF icon to the control menu  IF PDF$ENABLED AND W$PDFABLE AND PDF.WIDGET.NAME = "" THEN    NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )    NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )    IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "page_white_acrobat.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Generate PDF"    W$LINK.LABEL<1,NEXT.LINK.POS> = "Generate PDF"    CALL REBUILD.URL.STRING(CURRENT.URL.STRING)    PDF.URL.STRING=CURRENT.URL.STRING    URLENCODE.STRING = WIDGET.NAME    GOSUB URL.ENCODE    PDF.URL.STRING := '&generatepdf=':NEW.STRING ;* stash widget name in URL string so we know which widget to render as PDF    W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?":PDF.URL.STRING    W$LINK.LOCATION<1,NEXT.LINK.POS> = 'C'  END** 6-27-16 *EXCEL* If EXCEL generation is supported for this widget, add a EXCEL icon to the control menu  IF W$EXCELABLE AND EXCEL.WIDGET.NAME = '' THEN    NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )    NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )    IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "page_white_excel.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Generate Spreadsheet"    W$LINK.LABEL<1,NEXT.LINK.POS> = "Generate Spreadsheet"    CALL REBUILD.URL.STRING(CURRENT.URL.STRING)    URLENCODE.STRING=CURRENT.URL.STRING    GOSUB URL.ENCODE    EXCEL.URL.STRING=NEW.STRING    URLENCODE.STRING = WIDGET.NAME    GOSUB URL.ENCODE    EXCEL.URL.STRING := '&generateexcel=':NEW.STRING ;* stash widget name in URL string so we know which widget to render as Excel spreadsheet    W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?":EXCEL.URL.STRING    W$LINK.LOCATION<1,NEXT.LINK.POS> = 'C'  END* END OF 6-27-16 *EXCEL**  LINK.CNT = DCOUNT( W$LINK.LABEL<1>, VM )  LINK.CNT2 = DCOUNT( W$LINK.ICON<1>, VM )  IF LINK.CNT2 > LINK.CNT THEN LINK.CNT = LINK.CNT2  FOR LX = 1 TO LINK.CNT    THIS.LABEL = W$LINK.LABEL<1,LX>    THIS.LOC = W$LINK.LOCATION<1,LX>    THIS.UD.POS = W$LINK.UD.POS<1,LX>    THIS.UD.VAL = W$LINK.UD.VAL<1,LX>    THIS.DD.WIDGET = W$LINK.DD.WIDGET<1,LX>    THIS.URL = W$LINK.URL<1,LX>    THIS.URL.OPTS = W$LINK.URL.OPTS<1,LX>*    IF THIS.LOC = '' THEN THIS.LOC = '1' ;* Set to quadrant 1 if not specified*    IF THIS.URL # "" THEN* Specific URL = ignore UD information and Drill down (DD) info.      URL = THIS.URL    END ELSE      IF THIS.DD.WIDGET # "" THEN TARGET.WIDGET = THIS.DD.WIDGET ELSE TARGET.WIDGET = WIDGET.NAME      URLENCODE.STRING = TARGET.WIDGET      GOSUB URL.ENCODE      TARGET.WIDGET = NEW.STRING      URL = CGI$PATH:"/MVDB.MAIN?udview=":TARGET.WIDGET      FOR UDX = 1 TO DCOUNT( THIS.UD.POS<1,1>,SVM )        URLENCODE.STRING = THIS.UD.VAL<1,1,UDX>        GOSUB URL.ENCODE        URL := "&udpos":UDX:"=":THIS.UD.POS<1,1,UDX>:"&udval":UDX:"=":NEW.STRING      NEXT UDX      IF THIS.DD.WIDGET # "" THEN        URL := "&dd"* Include the name of this widget in the drilldown link so the target widget knows the referrer        URLENCODE.STRING = WIDGET.NAME        GOSUB URL.ENCODE        URL := '&dd_from=':NEW.STRING      END    END    IF W$LINK.ICON<1,LX> # "" THEN      IMG.REF = '<img title="':W$LINK.ICON.TXT<1,LX>:'" class="icon" src="/db/icons/':W$LINK.ICON<1,LX>:'" />'    END ELSE IMG.REF = ''    IF INDEX(THIS.LOC,'C',1) AND IMG.REF # '' THEN ;* This is a Control Icon      LINK.DATA = '<a href="':URL:'" ':THIS.URL.OPTS:'>':IMG.REF:'</a>'    END ELSE      LINK.DATA = '<a href="':URL:'" ':THIS.URL.OPTS:'>':IMG.REF:THIS.LABEL:'</a>'    END*    IF INDEX(THIS.LOC,'1',1) THEN      Q1.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'2',1) THEN      Q2.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'3',1) THEN      Q3.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'4',1) THEN      Q4.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'C',1) THEN      Q5.LINKS := LINK.DATA:'&nbsp;'    END  NEXT LX  IF Q1.LINKS # "" THEN    Q1.LINKS = '<div class="widget_trcorner widget_corner">':Q1.LINKS:'</div>'  END  IF Q2.LINKS # "" THEN    Q2.LINKS = '<div class="widget_tlcorner widget_corner">':Q2.LINKS:'</div>'  END  IF Q3.LINKS # "" THEN    Q3.LINKS = '<div class="widget_blcorner widget_corner">':Q3.LINKS:'</div>'  END  IF Q4.LINKS # "" THEN    Q4.LINKS = '<div class="widget_brcorner widget_corner">':Q4.LINKS:'</div>'  END** Create the input section*  INP.CNT = DCOUNT( W$INPUT.PROMPT, AM )  INP.HTML = ''  IF INP.CNT THEN* PJS 10-07-16: Change method from GET to POST to eliminate URL length limitation* when form contains many input controls.    IF INP.CNT > 20 THEN      INP.HTML = '<form method="POST" class="widget_form" action="':CGI$PATH:'/MVDB.MAIN">'    END ELSE      INP.HTML = '<form method="GET" class="widget_form">'    END    FOR IX = 1 TO INP.CNT      INP.HTML<-1> = '<div class="widget_control">'      INP.HTML<-1> = '<label ':W$INPUT.PROMPT.PARAMS<IX>:'>':W$INPUT.PROMPT<IX>:':</label>'      BEGIN CASE        CASE W$INPUT.TYPE<IX> = "TEXT"          INP.HTML<-1> = '<input type="text" name="inp_':W$INPUT.UDPOS<IX>:'" value="':W$INPUT.DEFAULT<IX>:'" ':W$INPUT.PARAMS<IX>:'>'        CASE W$INPUT.TYPE<IX> = "PASSWORD"          INP.HTML<-1> = '<input type="password" name="inp_':W$INPUT.UDPOS<IX>:'" value="':W$INPUT.DEFAULT<IX>:'" ':W$INPUT.PARAMS<IX>:'>'        CASE W$INPUT.TYPE<IX> = "DATE"          INP.HTML<-1> = '<input class="datepicker" type="text" name="inp_':W$INPUT.UDPOS<IX>:'" value="':W$INPUT.DEFAULT<IX>:'" ':W$INPUT.PARAMS<IX>:'>'        CASE W$INPUT.TYPE<IX> = "SELECT"          INP.HTML<-1> = '<select name="inp_':W$INPUT.UDPOS<IX>:'" ':W$INPUT.PARAMS<IX>:'>'          SCNT = DCOUNT( W$INPUT.SELOPTS<IX>, VM )          IF W$INPUT.SELVALS<IX> = "" THEN W$INPUT.SELVALS<IX> = W$INPUT.SELOPTS<IX>          FOR SELX = 1 TO SCNT            IF W$INPUT.SELVALS<IX,SELX> = W$INPUT.DEFAULT<IX> THEN DFLT = "selected" ELSE DFLT = ""            INP.HTML<-1> = '<option value="':W$INPUT.SELVALS<IX,SELX>:'" ':DFLT:'>':W$INPUT.SELOPTS<IX,SELX>:'</option>'          NEXT SELX          INP.HTML<-1> = '</select>'        CASE W$INPUT.TYPE<IX> = "CHECKBOX"          INP.HTML<-1> = '<input type="checkbox" name="inp_':W$INPUT.UDPOS<IX>:'" value="1" ':W$INPUT.PARAMS<IX>          IF W$INPUT.DEFAULT<IX> = 1 THEN            INP.HTML := ' checked'          END          INP.HTML := '>'*add a hidden field to let up know that there was a checkbox on the form.*unchecked checkboxes don't get submitted with the rest of the form data.          INP.HTML<-1> = '<input type="hidden" name="mvdbcxbx_':W$INPUT.UDPOS<IX>:'" value="1">'        CASE 1 ; NULL      END CASE      INP.HTML<-1> = '</div>'    NEXT IX    IF W$INPUT.BUTTON = "" THEN W$INPUT.BUTTON = "Go"    INP.HTML<-1> = '<div class="widget_control"><input type="submit" value="':W$INPUT.BUTTON:'" ></div>'    INP.HTML<-1> = '<input type="hidden" name="udview" value="':WIDGET.NAME:'">'    INP.HTML<-1> = '<input type="hidden" name="sw" value="':WIDGET.NAME:'">'    IF G$DRILLDOWN.MODE THEN      INP.HTML<-1> = '<input type="hidden" name="dd" value="">'      INP.HTML<-1> = '<input type="hidden" name="dd_from" value="':G$DD.REFERRER:'">'      INP.HTML<-1> = '<input type="hidden" name="dd_from_db" value="':G$DD.FROM.DB:'">'    END    INP.HTML<-1> = '</form>'    INP.HTML = '<div class="widget_input">':INP.HTML:'</div>'  END**PDF* Omit the control icons in the PDF document  IF PDF.WIDGET.NAME # "" THEN    Q5.LINKS = ""  END*  ENC.TITLE = W$TITLE  CALL XML.ENCODE(ENC.TITLE,"")  CALL SWAP(HTML.DIV,'<!-- TITLE -->',ENC.TITLE)  CALL SWAP(HTML.DIV,'<!-- QUAD1 -->',Q1.LINKS)  CALL SWAP(HTML.DIV,'<!-- QUAD2 -->',Q2.LINKS)  CALL SWAP(HTML.DIV,'<!-- QUAD3 -->',Q3.LINKS)  CALL SWAP(HTML.DIV,'<!-- QUAD4 -->',Q4.LINKS)  CALL SWAP(HTML.DIV,'<!-- CONTROLS -->',Q5.LINKS)  CALL SWAP(HTML.DIV,'<!-- INPUT -->',INP.HTML)  CALL SWAP(HTML.DIV,'<!-- WIDGETDATA -->',HTML)  RETURN*APPLY.XML.OPTS: * Apply XML option overrides*  SXML.ATTRS = ""  ATTR.VAR.LIST = ''* Parse the attrbiutes from the XML tag.  CPOS = 3 + LEN(NODE.NAME) ;* Start after "<graph " or "<map " depending on the node name.  SXML.ATTR.POS = 0  SXML.LEN = LEN(SXML)  THIS.ATTR = ''  SXML.SUFFIX = '>[CHART.DATA]</':NODE.NAME:'>'  LOOP UNTIL CPOS > SXML.LEN DO    THIS.CH = SXML[CPOS,1]    BEGIN CASE      CASE THIS.CH = '<' ;* Nothing to do - beginning        THIS.ATTR = ''      CASE THIS.CH = ' '        GOSUB ADD.SXML.ATTR      CASE THIS.CH = '>' ;* Ending tag        GOSUB ADD.SXML.ATTR        SXML.SUFFIX = SXML[CPOS,999]        EXIT      CASE 1        THIS.ATTR := THIS.CH    END CASE    CPOS += 1  REPEAT  GOSUB ADD.SXML.ATTR*  CONVERT '"' TO "'" IN XML.OPTS  CONVERT @VM TO @AM IN XML.OPTS  XML.OPT.CNT = DCOUNT( XML.OPTS, AM )  FOR XOX = 1 TO XML.OPT.CNT    THIS.OPT = XML.OPTS<XOX>    OPT.VAR = FIELD( THIS.OPT, '=', 1 )    LOCATE OPT.VAR IN ATTR.VAR.LIST SETTING XOPOS THEN      SXML.ATTRS<XOPOS> = THIS.OPT    END ELSE      THIS.ATTR = THIS.OPT      GOSUB ADD.SXML.ATTR    END  NEXT XOX** Rebuild SXML*  SXML = '<':NODE.NAME:' '  FOR XOX = 1 TO SXML.ATTR.POS    SXML := SXML.ATTRS<XOX>:' '  NEXT XOX  SXML := SXML.SUFFIX  RETURN*ADD.SXML.ATTR: * Add an attrbiute to the list*  IF THIS.ATTR # '' THEN    SXML.ATTR.POS += 1    SXML.ATTRS<SXML.ATTR.POS> = THIS.ATTR    ATTR.VAR.LIST<SXML.ATTR.POS> = FIELD(THIS.ATTR,'=',1)    THIS.ATTR = ''  END  RETURN*APPLY.COLOR.OPTS: * Build COLOR.ARRAY from defaults and user settings*  COLOR.ARRAY = ''  DFLT.COLOR.ARRAY = ''  IF DB.THEME # '' THEN    READ THEME.REC FROM F.MVDB.THEMES, DB.THEME ELSE THEME.REC = ''    DFLT.COLOR.ARRAY = DELETE(THEME.REC,1,0,0)    CONVERT AM TO VM IN DFLT.COLOR.ARRAY  END ELSE IF SITE$THEME # '' THEN    READ THEME.REC FROM F.MVDB.THEMES, SITE$THEME ELSE THEME.REC = ''    DFLT.COLOR.ARRAY = DELETE(THEME.REC,1,0,0)    CONVERT AM TO VM IN DFLT.COLOR.ARRAY  END  IF DFLT.COLOR.ARRAY = '' THEN    DFLT.COLOR.ARRAY<1,-1> = '#ff8125'    DFLT.COLOR.ARRAY<1,-1> = '#584d43'    DFLT.COLOR.ARRAY<1,-1> = '#2e2a27'    DFLT.COLOR.ARRAY<1,-1> = '#7b746d'    DFLT.COLOR.ARRAY<1,-1> = '#e78859'    DFLT.COLOR.ARRAY<1,-1> = '#f04408'    DFLT.COLOR.ARRAY<1,-1> = '#bd5204'    DFLT.COLOR.ARRAY<1,-1> = '#733e30'  END  DFLT.MAX = DCOUNT( DFLT.COLOR.ARRAY<1>, VM )*  MAX.COLOR.AM = DCOUNT( COLOR.LIST, AM )  IF MAX.COLOR.AM = 0 THEN MAX.COLOR.AM = 1  FOR CLX = 1 TO MAX.COLOR.AM    MAX.COLOR.VAL = DCOUNT( COLOR.LIST<CLX>, VM )    IF MAX.COLOR.VAL < DFLT.MAX THEN MAX.COLOR.VAL = DFLT.MAX    FOR CLXV = 1 TO MAX.COLOR.VAL      IF COLOR.LIST<CLX,CLXV> # "" THEN        LOCATE OCONV(COLOR.LIST<CLX,CLXV>,"MCU") IN NAME.COLOR<1> SETTING COLOR.POS THEN          COLOR.LIST<CLX,CLXV> = NAME.COLOR<2,COLOR.POS>        END        COLOR.ARRAY<CLX,CLXV> = COLOR.LIST<CLX,CLXV>      END ELSE        COLOR.ARRAY<CLX,CLXV> = DFLT.COLOR.ARRAY<1,CLXV>      END    NEXT CLXV  NEXT CLX  RETURN*URL.ENCODE: **  NEW.STRING = ""  UE.LEN = LEN(URLENCODE.STRING)  FOR UEX = 1 TO UE.LEN    UE.CHR = URLENCODE.STRING[UEX,1]    UE.CVAL = SEQ(UE.CHR)    BEGIN CASE      CASE UE.CVAL <= 47 ; ENC.FLAG = 1      CASE UE.CVAL >= 58 AND UE.CVAL <= 64 ; ENC.FLAG = 1      CASE UE.CVAL >= 91 AND UE.CVAL <= 96 ; ENC.FLAG = 1      CASE UE.CVAL > 122 ; ENC.FLAG = 1      CASE 1 ; ENC.FLAG = 0    END CASE    IF ENC.FLAG THEN      UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')    END    NEW.STRING := UE.CHR  NEXT UEX  RETURN*TICKMARK.OPTIONS: * For charts that support tickmark options** Convert the settings in W$FW.TICKMARKS into the appropriate XML attributes to be* added to the <chart> tag via W$CHART.OPTIONS*  IF W$FW.TICKMARKS<1> = "0" THEN    W$CHART.OPTIONS<-1> = "showTickMarks='0'"    W$CHART.OPTIONS<-1> = "showTickValues='0'"  END ELSE    IF W$FW.TICKMARKS<2> = 0 THEN      W$CHART.OPTIONS<-1> = "showTickValues='0'"    END    IF W$FW.TICKMARKS<3> = "A" THEN      W$CHART.OPTIONS<-1> = "ticksBelowGraph='0'"    END    IF W$FW.TICKMARKS<4> # "" THEN      W$CHART.OPTIONS<-1> = "majorTMNumber='":W$FW.TICKMARKS<4>:"'"    END    IF W$FW.TICKMARKS<5> # "" THEN      W$CHART.OPTIONS<-1> = "minorTMNumber='":W$FW.TICKMARKS<5>:"'"    END  END  RETURN*MAKE.FW.DD.URL: **  TARGET.WIDGET = W$FW.DD.WIDGET<1,FW.WIDGET.POS>  IF TARGET.WIDGET = "" THEN    URL = ""    RETURN  END  URLENCODE.STRING = TARGET.WIDGET  GOSUB URL.ENCODE  TARGET.WIDGET = NEW.STRING  URL = CGI$PATH:"/MVDB.MAIN?udview=":TARGET.WIDGET  FOR UDX = 1 TO DCOUNT( W$FW.DD.UD.POS<1,FW.WIDGET.POS>,SVM )    URLENCODE.STRING = W$FW.DD.UD.VAL<1,FW.WIDGET.POS,UDX>* BEGIN ZUMASYS 1-5-15    BEGIN CASE      CASE URLENCODE.STRING = 'MS.LABEL'        URLENCODE.STRING=MS.LABEL      CASE URLENCODE.STRING = 'MS.VALUE'        URLENCODE.STRING=MS.VALUE      CASE URLENCODE.STRING = 'MS.SERIES'; *3-15-15        URLENCODE.STRING=MS.SERIES; *3-15-15      CASE 1; NULL    END CASE* END ZUMASYS 1-5-15    GOSUB URL.ENCODE    URL := "&udpos":UDX:"=":W$FW.DD.UD.POS<1,FW.WIDGET.POS,UDX>:"&udval":UDX:"=":NEW.STRING  NEXT UDX  URL := "&dd"* Include the name of this widget in the drilldown link so the target widget knows the referrer  URLENCODE.STRING = WIDGET.NAME  GOSUB URL.ENCODE  URL := '&dd_from=':NEW.STRING* Specify the dashboard to return to from this drilldown view.  IF G$DRILLDOWN.MODE THEN    SOURCE.DB = G$DD.FROM.DB  END ELSE SOURCE.DB = G$CURRENT.DB  URLENCODE.STRING = SOURCE.DB  GOSUB URL.ENCODE  URL := '&dd_from_db=':NEW.STRING  RETURN*OPTS.UPDATE:  IF NOT(INDEX(UPDATE.OPTS,'decimalSeparator',1)) THEN    UPDATE.OPTS := OPTS.DELIM:"decimalSeparator='":DECIMAL:"'"  END  IF NOT(INDEX(UPDATE.OPTS,'thousandSeparator',1)) THEN    UPDATE.OPTS := OPTS.DELIM:"thousandSeparator='":THOUSAND:"'"  END  RETURNEND00019ACREATE.WEBSERVICE.PASSWORD0c2SUBROUTINE CREATE.WEBSERVICE.PASSWORD(PASSWORD,PASSTIME)* VALID PASSWORD IS THE SUM OF MMDDYY + SSMMHH (FROM PASSTIME)* INVERT THE TIME TO SSMMHHPASSTIME=OCONV(TIME(),'MTS')CONVERT ':' TO '' IN PASSTIMEEMITSSAP=''FOR TIME.I = 6 TO 1 STEP -1  EMITSSAP:=PASSTIME[TIME.I,1]NEXT TIME.IOTODAY=OCONV(DATE(),'D2-')CONVERT '-' TO '' IN OTODAYPASSWORD=OTODAY+EMITSSAPRETURNEND000789SUB.MVDB.FEATURES0c2SUBROUTINE SUB.MVDB.FEATURES(USER.LIMIT,MAPS.ENABLED,FUSION.WIDGETS.ENABLED,WATERMARK)INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*** Decipher the license data*CDIGIT = CGI$APPSVR.ID[1,1]LSEG1 = CGI$APPSVR.ID[2,5]LSEG2 = CGI$APPSVR.ID[7,7]LSEG3 = CGI$APPSVR.ID[14,8]UID4 = CGI$UNIQUE.ID "R%4"UID3 = UID4 "R%3"UID2 = UID4 "R%2"UIDL1 = UID4 "R%1"UIDL2 = UID4[3,1]*CHKVAL = 0FOR N = 2 TO 21  CHKVAL += SEQ(CGI$APPSVR.ID[N,1])NEXT NCHKVAL = MOD(CHKVAL,16)** SEGMENT 1: Extract license edition*SEG1 = OCONV(LSEG1,'MCXD')SEG1 = SEG1 / (4*(UID4+1))LICENSE.EDITION = SEG1-1** SEGMENT 2: Extract user limit*SEG2 = OCONV(LSEG2,'MCXD')SEG2 = SEG2 / (3*(UID3+1))LICENSE.CNT = SEG2** SEGMENT 3: Extract system id*SEG3 = OCONV(LSEG3,'MCXD')SEG3 = SEG3 / (UIDL1 + UIDL2 + 2)LICENSE.SYSID = SEG3*WWW.INFO(46) = OCONV(CHKVAL,'MCDX'):'/':OCONV(LSEG3,'MCXD'):" / ":(UIDL1 + UIDL2 + 2):" = ":LICENSE.SYSIDWWW.INFO(47) = LICENSE.CNT:'/':LICENSE.EDITIONWWW.INFO(48) = LICENSE.SYSID*USER.LIMIT = LICENSE.CNTMAPS.ENABLED = 0FUSION.WIDGETS.ENABLED = 0WATERMARK = ''EDITION = ''BEGIN CASE  CASE LICENSE.EDITION = 1    FUSION.WIDGETS.ENABLED = 1    MAPS.ENABLED = 1    WATERMARK = 'Development Version'    EDITION = 'Development Edition'  CASE LICENSE.EDITION = 2     EDITION = 'Standard Edition'  CASE LICENSE.EDITION = 3    FUSION.WIDGETS.ENABLED = 1    EDITION = 'Professional Edition'  CASE LICENSE.EDITION = 4    FUSION.WIDGETS.ENABLED = 1    MAPS.ENABLED = 1    EDITION = 'Enterprise Edition'  CASE LICENSE.EDITION = 5    FUSION.WIDGETS.ENABLED = 1    MAPS.ENABLED = 1    WATERMARK = 'Evaluation Version'    EDITION = 'Evaluation'  CASE 1    EDITION = 'Edition unavailable'END CASE**Populate globals for user reference*G$LICENSE.COUNT = LICENSE.CNTG$EDITION = EDITION ;*:' | ':CGI$APPSVR.ID:' | ':CGI$UNIQUE.IDG$SYSTEM.ID = LICENSE.SYSID*RETURN0001C5RSS.XML.ENCODE0c2SUBROUTINE RSS.XML.ENCODE(STRING.TO.PARSE, FLAG)** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: David Kam (Probably), Sierra Bravo* Date: Unknown* Description: Encode text prior to inserting into XML documents*SWAP.CHARS = \&<>\FOR SW = 1 TO LEN(SWAP.CHARS)  CH = SWAP.CHARS[SW,1]  HX = OCONV(SEQ(CH),'MCDX')  SWTO = "&#x":HX "R%2":";"  CALL SWAP(STRING.TO.PARSE,CH,SWTO)NEXT SWRETURN000677REBUILD.URL.STRING0c2SUBROUTINE REBUILD.URL.STRING(URL.STRING)* 12-15-15* 9-23-16 TPARKER - LOGIC TOTALLY REWRITTENINCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEURL.STRING=''*** NEED CGI$VARS ALPHABETIZED TO INSURE URL ALWAYS IN SAME ORDER** BUT EXCLUDE THOSE ADDED BY MVAPPSVR*MAX.VARS=DCOUNT(CGI$VARS,@AM)ALPHA.VARS=''ALPHA.VALS=''FOR VAR.CNTR = 1 TO MAX.VARS   var=CGI$VARS<VAR.CNTR>   BEGIN CASE      CASE var = 'SIMPLEWEB_MODULE'; var=''      CASE var = 'REMOTE_ADDR'; var=''      CASE var = 'REMOTE_HOST'; var=''      CASE var = 'REMOTE_USER'; var=''      CASE var = 'REQUEST_METHOD'; var=''      CASE var = 'PROTOCOL_VERSION'; var=''      CASE var = 'HTTP_REFERER'; var=''      CASE var = 'HTTP_USER_AGENT'; var=''      CASE var = 'HTTP_HOST'; var=''      CASE var = 'HTTP_ACCEPT'; var=''      CASE var = 'HTTP_COOKIE'; var=''      CASE var = 'HTTP_CONNECTION'; var=''      CASE var = 'SIMPLEWEB_HANDLER'; var=''      CASE var = 'PATH_INFO'; var=''      CASE var = 'CONTENT_TYPE'; var=''      CASE var = 'SERVER_PORT'; var=''      CASE var = 'INSTALL_PATH'; var=''      CASE var = 'APPSVR_ID'; var=''      CASE var = '__body__'; var=''      CASE 1; NULL   END CASE   IF var <> '' THEN      val=CGI$VALS<VAR.CNTR>      LOCATE var IN ALPHA.VARS BY "AL" SETTING POS ELSE NULL      ALPHA.VARS=INSERT(ALPHA.VARS,POS,0,0,var)      ALPHA.VALS=INSERT(ALPHA.VALS,POS,0,0,val)    END NEXT VAR.CNTRMAX.VAR.CNTR=DCOUNT(ALPHA.VARS,@AM)FOR VAR.CNTR = 1 TO MAX.VAR.CNTR   var=ALPHA.VARS<VAR.CNTR>   val=ALPHA.VALS<VAR.CNTR>   URL.STRING:='&':var:'=':val NEXT VAR.CNTRURL.STRING=URL.STRING[2,999999]RETURNEND000546USER.UPDATE0c2*On a new install, this should encrypt the default, plaintext passwords.*On an upgrade, it will encrypt all user passwords if they have not been encrypted by this program.* 1-2-15 TFP don't if the password is the same as the encryption of the user*        name then don't encrypt again** 06-19-17 PJS After initial installation, scan for any MVDB.USERS records where* the password in USER.REC<1> is the same as the user ID. These are default users* 'admin' and 'guest', and the default plaintext password on attr 1 is encrypted* and the user record updated. The USER.UPDATE flag in MVDB.CONTROL is updated to* 2 so this process will not be repeated during upgrades.*OPEN 'MVDB.USERS' TO F.MVDB.USERS ELSE STOP 201, 'MVDB.USERS'OPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'READV USER.UPDATE.FLAG FROM F.MVDB.CONTROL, "USER.UPDATE", 1 ELSE USER.UPDATE.FLAG = ''IF USER.UPDATE.FLAG + 0 < 1 THEN  SELECT F.MVDB.USERS  LOOP    READNEXT USER.ID ELSE EXIT    READ USER.REC FROM F.MVDB.USERS, USER.ID THEN      IF USER.ID = USER.REC<1> THEN        ENCRYPTED.PSWD = OCONV(USER.REC<1>, "U3060")        USER.REC<1> = ENCRYPTED.PSWD        WRITE USER.REC ON F.MVDB.USERS, USER.ID      END    END  REPEATENDIF USER.UPDATE.FLAG + 0 < 2 THEN  WRITEV 2 ON F.MVDB.CONTROL, "USER.UPDATE", 1ENDSTOPEND003F5DWDB.INIT0c2** Copyright (C) 2020 Zumasys, Inc., All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 12/24/03* Description: This program is the man entry point for web transactions.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause.*              When reading MD PROC item, if its missing, read again*              with '.PROC' suffix on ID. This way we can keep the PROC*              in the MD as a flag that the function is allowed, but not*              require it in the MD, since jBASE does not place catalog*              items in the MD.** Modified By: Peter Schellenbach, Zumasys* Date: 10/25/2016* Description: This program was made more generic, so that it can serve*              as the main entry point for both MVDB and REST services.*              The MVDB specific code has been refactored into MVDB.INIT.*              A new WDB.RESOURCE file is used to determine supported*              resources and the name of the program to handle the resource.*              For example, the MVDB.MAIN record in the WDB.RESOURCE file*              defines MVDB.INIT as the handler for the MVDB.RESOURCE.**              Removed PROCREAD (and calling PROC from MD). Only use*              SENTENCE now.** Modified By: Peter Schellenbach, Zumasys* Date: 04/21/2017* Description: Updated to use CONFIG record in WDB.RESOURCE to** Modified By: Peter Schellenbach, Zumasys* Date: 06/16/2017* Description: For REST, separate header & request vars from rest of cgi vars.*              Fix VARS variable conflict in APPEND.REC to use QSTR and save*              QSTR in WDB.DEBUG record instead of VARS. Change program name*              in WDB.DEBUG record ID to RSRC.ID so MV.DEBUG can recreate the*              WDB.INIT command line.** Modified By: Peter Schellenbach, Zumasys* Date: 10/18/2017* Description: Save detailed debug info in WDB.DEBUG record to enable reproducing*              original environment when debugging requests.*              WDB.DEBUG: initialized from WDB.RESOURCE record attr 7, set when*              WDB.INIT should create debug records in WDB.DEBUG file for use by WDEBUG.*              WDEBUG.MODE: set if WDB.INIT is being called by WDEBUG instead of mvappsvr.** Modified By: Peter Schellenbach, Zumasys* Date: 11/29/2017* Description: Provide for execution of dashboard or REST service in a different*              account. New RSRC.ACCOUNT field added to WDB.RESOURCE records.*              Use LOGTO to switch accounts prior to executing the resource*              handler program.*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD FI.WDB.RESOURCEINCLUDE WBPD FI.WDB.DEBUG*MAT WWW.INFO = ''STATUS.CODE = 0LOGGING = 0LOG.REC = ''WDB.DEBUG = 0WDEBUG.MODE = 0*OPEN 'WDB.Q' TO Q ELSE  ERR = 'Cannot open Queue file'  GOSUB SEND.ERRORENDOPEN 'WDB.RESOURCE' TO F.RESOURCE ELSE  ERR = 'Cannot open resource file'  GOSUB SEND.ERROREND** Read and parse config settings**  Important config settings:*   LOGLEVEL - see below*   DEFAULT_HANDLER - if a "handler" is not included in RESOURCE.NAME, use this default handler*   DEFAULT_RESOURCE - if a "resource" is not included in RESOURCE.NAME, use this default resource**   Note: PATH_INFO is the part of the URL beginning with a forward slash (/) after the*   server/port and before the query string. It is interpreted as:*     /<handler>/<resource>/<REST parameter>/<another REST parameter> ...**   MVAppSvr will pass <handler>/<resource> as 2nd command line argument, unless the default*   handler is being used, then only <resource> is passed.*READ TEMPCONFIG FROM F.RESOURCE, 'CONFIG' ELSE TEMPCONFIG = ''NUMCONFIG = DCOUNT(TEMPCONFIG, @AM)CGI$CONFIG = ''CONFIGCNTR = 0FOR A = 2 TO NUMCONFIG  CONFIGNAME = TEMPCONFIG<A,1>  CONFIGVALUE = TEMPCONFIG<A,2>  IF CONFIGNAME <> '' THEN    LOCATE CONFIGNAME IN CGI$CONFIG<1,1> SETTING POS ELSE      CONFIGCNTR += 1      CGI$CONFIG<1,1,CONFIGCNTR> = CONFIGNAME    END    CGI$CONFIG<1,2,CONFIGCNTR> = CONFIGVALUE  ENDNEXT A** Get the logging level from config**  Log levels:*   0 - no logging*   1 - log errors*   2 - log all requests*   3 - log everything (debug mode)**  Log info is written to the WDB.LOG file. Requests and errors are logged*  using a unique ID.*SESSION$GLOBAL.DEBUG = 0LOCATE 'LOGLEVEL' IN CGI$CONFIG<1,1> SETTING POS THEN  TEMPVALUE = CGI$CONFIG<1,2,POS>  IF TEMPVALUE MATCHES '1N' THEN SESSION$GLOBAL.DEBUG = TEMPVALUE + 0ENDLOGGING = SESSION$GLOBAL.DEBUGIF LOGGING THEN  OPEN 'WDB.LOG' TO F.LOG ELSE LOGGING = 0END** Get default handler*DEFAULT.HANDLER = 'DBC' ;* ensure this is defined!LOCATE 'DEFAULT_HANDLER' IN CGI$CONFIG<1,1> SETTING POS THEN  DEFAULT.HANDLER = OCONV(CGI$CONFIG<1,2,POS>, 'MCU')END** Parse the command line*TCL.LINE = SENTENCE()RESOURCE.NAME = OCONV(FIELD(TCL.LINE, ' ', 2), 'MCU')INIT.VARS = FIELD(TCL.LINE, ' ', 3)VAR.STRING = FIELD(TCL.LINE, ' ', 4)XTRA.OPTS = FIELD(TCL.LINE, ' ', 5)*UNIQUE.ID = FIELD(INIT.VARS, '-', 1)ONCOM     = FIELD(INIT.VARS, '-', 2)COMCOUNT  = FIELD(INIT.VARS, '-', 3)** Get handler from RESOURCE.NAME argument*IF DCOUNT(RESOURCE.NAME, '/') = 2 THEN  HANDLER.NAME = OCONV(FIELD(RESOURCE.NAME, '/', 1), 'MCU')  RESOURCE.NAME = OCONV(FIELD(RESOURCE.NAME, '/', 2), 'MCU')END ELSE  HANDLER.NAME = DEFAULT.HANDLER  RESOURCE.NAME = OCONV(RESOURCE.NAME, 'MCU')END** Get the resource record from WDB.RESOURCE file*RSRC.ID = HANDLER.NAME:'*':RESOURCE.NAMEMAT RSRC.ITEM = ''MATREAD RSRC.ITEM FROM F.RESOURCE, RSRC.ID ELSE  IF HANDLER.NAME = DEFAULT.HANDLER THEN    MATREAD RSRC.ITEM FROM F.RESOURCE,RESOURCE.NAME ELSE NULL  ENDEND** Sort out the debug modes**  WDEBUG.MODE is set when the request was initiated by WDEBUG rather than web.*  WDB.DEBUG is set when the resource indicates to log debug info for web requests.*  WDEBUG.MODE and WDB.DEBUG are exclusive!*  SESSION$WDEBUG.MODE can be tested by resource handlers to break into debugger, or ???IF INDEX(XTRA.OPTS, '_WDEBUG_MODE_', 1) THEN WDEBUG.MODE = 1SESSION$WDEBUG.MODE = WDEBUG.MODEIF NOT(WDEBUG.MODE) THEN  WDB.DEBUG = RSRC.DEBUG.MODE  IF WDB.DEBUG THEN    OPEN 'WDB.DEBUG' TO F.WDB.DEBUG ELSE WDB.DEBUG = 0  ENDEND** Validate the resource - return error if invalid or disabled*IF (RSRC.TYPE = 'P') AND RSRC.ENABLED THEN  CGI.MODE = RSRC.PARSE.CGI  IF ONCOM = 1 AND VAR.STRING = '%%' THEN* READ VARS FROM STDIN INSTEAD OF COMMAND LINE    PROMPT ''    ECHO OFF    FOR ONCOM = 1 TO COMCOUNT      INPUT VAR.STRING      IF ONCOM < COMCOUNT THEN        GOSUB APPEND.REC      END    NEXT ONCOM    ECHO ON    ONCOM = COMCOUNT  END  IF (ONCOM = COMCOUNT) THEN    GOSUB APPEND.REC    IF LOGGING > 1 THEN      LOG.REC<1> = RESOURCE.NAME      LOG.REC<2> = DATE()      LOG.REC<3> = SYSTEM(12) ;* START TIME      LOG.REC<6> = COMCOUNT    END** Populate the vars and vals*    CGI$UNIQUE.ID = UNIQUE.ID    IF RSRC.PROGRAM <> '' THEN      CGI$RESOURCE.NAME = RSRC.PROGRAM    END ELSE      CGI$RESOURCE.NAME = RESOURCE.NAME    END    IF CGI.MODE THEN** Parse CGI, request & header variables*      CALL WDB.VARS(VARS, VALS)      LOCATE "APPSVR_ID" IN VARS SETTING POS THEN        CGI$APPSVR.ID = VALS<POS>        VARS = DELETE(VARS, POS, 0, 0)        VALS = DELETE(VALS, POS, 0, 0)      END ELSE        CGI$APPSVR.ID = ""      END      LOCATE "__body__" IN VARS SETTING POS THEN        CGI$BODY = VALS<POS>        VARS = DELETE(VARS, POS, 0, 0)        VALS = DELETE(VALS, POS, 0, 0)      END** Copy CGI variables to CGI$VARS/CGI$VALS and request & header variables to CGI$HEADERVARS/CGI$HEADERVALS*      REQUEST.VAR.NAMES = 'SIMPLEWEB_MODULE':@AM:'SIMPLEWEB_HANDLER':@AM:'REMOTE_ADDR':@AM:'REMOTE_HOST':@AM:'REMOTE_USER':@AM      REQUEST.VAR.NAMES := 'REQUEST_METHOD':@AM:'PROTOCOL_VERSION':@AM:'PATH_INFO':@AM:'CONTENT_TYPE':@AM:'SERVER_PORT':@AM:'INSTALL_PATH'      NUM.VARS = DCOUNT(VARS, @AM)      HDR.VAR.NUM = 1      CGI.VAR.NUM = 1      FOR Y = 1 TO NUM.VARS        IS.HDR.VAR = 0        VAR.NAME = VARS<Y>        IF VAR.NAME[1,5] = 'HTTP_' THEN          IS.HDR.VAR = 1        END ELSE          LOCATE VAR.NAME IN REQUEST.VAR.NAMES SETTING POS THEN IS.HDR.VAR = 1        END        IF IS.HDR.VAR THEN          CGI$HEADERVARS<HDR.VAR.NUM> = VAR.NAME          CGI$HEADERVALS<HDR.VAR.NUM> = VALS<Y>          HDR.VAR.NUM += 1        END ELSE          CGI$VARS<CGI.VAR.NUM> = VAR.NAME          CGI$VALS<CGI.VAR.NUM> = VALS<Y>          CGI.VAR.NUM += 1        END      NEXT Y** Load the Cookie variables and values*      LOCATE 'HTTP_COOKIE' IN VARS SETTING POS THEN        CSTRING = VALS<POS>      END ELSE CSTRING = ''      CONVERT ';' TO @AM IN CSTRING      NUM.COOKIES = DCOUNT(CSTRING, @AM)      FOR Y = 1 TO NUM.COOKIES        CGI$CVARS<Y> = TRIM(FIELD(CSTRING<Y>,'=',1))        CGI$CVALS<Y> = CSTRING<Y>[1 + COL2(),99999]      NEXT Y** Get server info*      LOCATE "HTTP_HOST" IN VARS SETTING POS THEN        CGI$SERVER.NAME = VALS<POS>      END ELSE CGI$SERVER.NAME = ""      LOCATE "SERVER_PORT" IN VARS SETTING POS THEN        CGI$SERVER.PORT = VALS<POS>      END ELSE CGI$SERVER.PORT = ""      IF CGI$SERVER.PORT = "" OR CGI$SERVER.PORT = "0" THEN        OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL THEN          READV TCP.PORT FROM F.MVDB.CONTROL, 'MVDB.SETTINGS', 4 ELSE TCP.PORT = ""        END        CGI$SERVER.PORT = TCP.PORT      END      IF CGI$SERVER.PORT # "" AND INDEX(CGI$SERVER.NAME, ':', 1) = 0 THEN CGI$SERVER.NAME := ":":CGI$SERVER.PORT ;*PJS 10-25-16* Only append port if its not already in the HTTP_HOST header      LOCATE "SIMPLEWEB_HANDLER" IN VARS SETTING POS THEN        CGI$PATH = VALS<POS>        IF CGI$PATH[1,1] # "/" THEN CGI$PATH = "/":CGI$PATH      END ELSE CGI$PATH = "/dbc"** Extract REST parameters*      LOCATE "PATH_INFO" IN VARS SETTING POS THEN        PATH = VALS<POS>        IF PATH[1,1] = '/' THEN PATH = PATH[2,9999]        Y = INDEX(PATH, '/', 2)        IF Y > 0 THEN          CGI$RESTPARAMS = PATH[Y + 1, 99999]          CONVERT '/' TO @AM IN CGI$RESTPARAMS        END      END    END** Clear the out buffer and set some generic vars*    SESSION$CONTENT.SENT = 0** LOGTO the account containing the resource, if not the current account*    IF RSRC.ACCOUNT <> '' THEN      IF FIELD(RSRC.ACCOUNT, ',', 1) = OCONV('a', 'U50BB') THEN        RSRC.ACCOUNT = ''      END    END    IF RSRC.ACCOUNT <> '' THEN      ACCT.FROM = OCONV('a', 'U50BB')      EXECUTE 'LOGTO ':RSRC.ACCOUNT:' (F' CAPTURING DUMMY      ACCT.TO = OCONV('a', 'U50BB')      IF ACCT.FROM = ACCT.TO THEN* LOGTO failed!               STATUS.CODE = 404        ERR = 'Resource account unavailable'        GOTO SEND.ERROR      END    END*    * Run the controller program for the resource*    PRINT    PRINT "700 WDB-START"    IF WDB.DEBUG THEN      EXECDUR = ''      IF RSRC.PROGRAM <> '' THEN        DBG.ID = 'R/':RSRC.PROGRAM:'/':UNIQUE.ID      END ELSE        DBG.ID = 'R/':RSRC.CONTROLLER:'/':UNIQUE.ID      END      GOSUB CREATE.DEBUG.REC      EXECSTART = SYSTEM(12)      EXECUTE RSRC.CONTROLLER:' ':UNIQUE.ID CAPTURING RESPONSE      EXECDUR = SYSTEM(12) - EXECSTART      DELETE F.WDB.DEBUG, DBG.ID      DBG.ID = 'C':DBG.ID[2, LEN(DBG.ID)]      GOSUB UPDATE.DEBUG.REC      N = DCOUNT(RESPONSE, @AM)      FOR I = 1 TO N        PRINT RESPONSE<I>      NEXT I    END ELSE      EXECUTE RSRC.CONTROLLER:' ':UNIQUE.ID    END** Wrap up*    * this call has been moved to MVDB.INIT: CALL WEB.FLUSH    PRINT "800 WDB-COMPLETE"    DELETE Q, UNIQUE.ID    IF LOGGING > 1 THEN      LOG.REC<4> = SYSTEM(12) ;* END TIME      LOG.REC<5> = LOG.REC<4> - LOG.REC<3>      LOG.REC<7> = 1 ;* this is a request      GOSUB UPDATE.LOG    END  END ELSE    GOSUB APPEND.REC    PRINT    PRINT "700 WDB-START"    PRINT "800 WDB-COMPLETE"  ENDEND ELSE  IF (ONCOM = COMCOUNT) OR (ONCOM = 1 AND VAR.STRING = '%%') THEN* Final (or only) command part has been received - log the error now    IF LOGGING THEN      LOG.REC<1> = RESOURCE.NAME      LOG.REC<2> = DATE()      LOG.REC<3> = SYSTEM(12)      LOG.REC<6> = COMCOUNT      LOG.REC<7> = 2 ;* this is an error      BEGIN CASE        CASE RSRC.TYPE = ''          LOG.REC<8> = 'Undefined resource'        CASE RSRC.TYPE <> 'P'          LOG.REC<8> = 'Invalid resource'        CASE NOT(RSRC.ENABLED)          LOG.REC<8> = 'Disabled resource'        CASE 1          LOG.REC<8> = 'Unknown error'      END CASE      GOSUB UPDATE.LOG    END    STATUS.CODE = 404    ERR = 'Invalid Resource'    GOSUB SEND.ERROR  END ELSE    PRINT    PRINT "700 WDB-START"    PRINT "800 WDB-COMPLETE"  ENDENDSTOP*SEND.ERROR:*PRINTPRINT "700 WDB-START"IF STATUS.CODE > 0 THEN  PRINT 'X-MVDB-STATUS: ':STATUS.CODEENDPRINT '500 ERROR ':ERRPRINT "800 WDB-COMPLETE"STOP*----------APPEND.REC:*----------READU QSTR FROM Q, UNIQUE.ID ELSE QSTR = ''QSTR<ONCOM> = VAR.STRINGWRITE QSTR ON Q, UNIQUE.IDRETURN*----------UPDATE.LOG:*----------LOG.ID = SYSTEM(19)WRITE LOG.REC ON F.LOG, LOG.IDRETURN*----------CREATE.DEBUG.REC:*----------DBGREC = ''DBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_PORT> = FIELD(OCONV('','U50BB'),' ',1) ;*PortDBGREC<WDBG_HANDLER> = HANDLER.NAMEDBGREC<WDBG_RESOURCE> = RESOURCE.NAMEDBGREC<WDBG_CONTROLLER> = RSRC.CONTROLLERDBGREC<WDBG_PROGRAM> = RSRC.PROGRAMDBGREC<WDBG_REQUEST_ID> = UNIQUE.IDLOCATE "REQUEST_METHOD" IN VARS SETTING POS THEN  DBGREC<WDBG_METHOD> = VALS<POS>ENDLOCATE "PATH_INFO" IN VARS SETTING POS THEN  DBGREC<WDBG_PATH> = VALS<POS>ENDLOCATE "REMOTE_ADDR" IN VARS SETTING POS THEN  DBGREC<WDBG_REMOTE_ADDR> = VALS<POS>END* save headers variablesDBGREC<WDBG_HEADER_VARS> = CHANGE(CHANGE(CGI$HEADERVARS, @VM, @SVM), @AM, @VM)DBGREC<WDBG_HEADER_VALS> = CHANGE(CHANGE(CGI$HEADERVALS, @VM, @SVM), @AM, @VM)IF CGI$APPSVR.ID <> '' THEN  N = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM) + 1  DBGREC<WDBG_HEADER_VARS, N> = 'APPSVR_ID'  DBGREC<WDBG_HEADER_VALS, N> = CGI$APPSVR.IDEND* save form variablesDBGREC<WDBG_CGI_VARS> = CHANGE(CHANGE(CGI$VARS, @VM, @SVM), @AM, @VM)DBGREC<WDBG_CGI_VALS> = CHANGE(CHANGE(CGI$VALS, @VM, @SVM), @AM, @VM)* Request bodyDBGREC<WDBG_BODY> = CHANGE(CHANGE(CGI$BODY, CHAR(13), ''), CHAR(10), @VM)* Session variablesTEMPVARS = OCONV(CGI$CVARS, 'MCU')LOCATE 'SESSIONID' IN TEMPVARS SETTING POS THEN  SID = CGI$CVALS<POS>  SREC = ''  OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN    READ SREC FROM F.WEB.SESSION, SID ELSE NULL  END  DBGREC<WDBG_SESSION_ID> = SID  DBGREC<WDBG_SESSION_VARS> = SREC<1>  DBGREC<WDBG_SESSION_VALS> = SREC<2>  DBGREC<WDBG_SESSION_DATE> = SREC<3>  DBGREC<WDBG_SESSION_TIME> = SREC<4>END* save debug info before processing requestWRITE DBGREC ON F.WDB.DEBUG, DBG.IDRETURN*----------UPDATE.DEBUG.REC:*----------DBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_DURATION> = EXECDURIF STATUS.CODE > 0 THEN DBGREC<WDBG_STATUS> = STATUS.CODE ELSE DBGREC<WDBG_STATUS> = 200* save response headersNUM.VARS = 0EOH = INDEX(RESPONSE, @AM:@AM, 1) ;* headers end at first blank line in responseIF EOH = 0 THEN EOH = LEN(RESPONSE) + 1N = DCOUNT(RESPONSE[1, EOH - 1], @AM)FOR I = 1 TO N  HDR.LINE = RESPONSE<I>  HDR.VAR = FIELD(HDR.LINE, ':', 1)  HDR.VAL = TRIMF(HDR.LINE[COL2() + 1, LEN(HDR.LINE)])  M = LEN(HDR.VAR)  FOR J = 1 TO M    IF NOT(HDR.VAR[J,1] MATCHES '1A') AND HDR.VAR[J,1] <> '-' THEN      HDR.VAR = ''      EXIT    END  NEXT J  IF HDR.LINE[LEN(HDR.VAR) + 1, 1] <> ':' THEN HDR.VAR = ''  IF HDR.VAR = '' THEN    NUM.VARS += 1    DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = '_BAD_'    DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.LINE ;* invalid header line!  END ELSE    NUM.VARS += 1    DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = HDR.VAR    DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.VAL  ENDNEXT I* save response contentIF EOH + 2 <= LEN(RESPONSE) THEN  DBGREC<WDBG_RESPONSE_CONTENT> = CHANGE(CHANGE(RESPONSE[EOH + 2, LEN(RESPONSE)], @VM, @SVM), @AM, @VM)ENDWRITE DBGREC ON F.WDB.DEBUG, DBG.IDRETURN*END0002A6SUB.LOG.DEBUG.INFO0c2SUBROUTINE SUB.LOG.DEBUG.INFO(WIDGET.NAME,MESSAGE)** Copyright (c) 2020 Zumasys, Inc. All rights reserved.** Pass widget name and message to log. When widget is placed in debug mode,* up to 100 lines of log content are displayed.*EQU MAX.LINES TO 100*OPEN 'WDB.DEBUG' TO F.WDB.DEBUG THEN  READ EXTRA.INFO FROM F.WDB.DEBUG,WIDGET.NAME ELSE EXTRA.INFO = ''  EXTRA.INFO<-1> = TIMEDATE():' ':MESSAGE  N = DCOUNT(EXTRA.INFO,@AM)  IF N > MAX.LINES THEN    * DISCARD ALL EXCEPT LAST 100 LINES    M = N - MAX.LINES    K = INDEX(EXTRA.INFO,@AM,M)    EXTRA.INFO = EXTRA.INFO[K+1,999999]  END  WRITE EXTRA.INFO ON F.WDB.DEBUG,WIDGET.NAMERETURNEND001A44MVDB.BUILD.PACKAGE0c2SUBROUTINE MVDB.MAKE.SCRIPT(MAKE.FILE,LOCATION,SIZE)*INCLUDE DM,BP,UNIX.H FCNTL.HINCLUDE DM,BP,UNIX.H MODE.HINCLUDE WBPD MVPKG.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253)CHAR BUFFER[10000]DIM PKG.REC(40)LOCATION = ''SIZE = 0*OPEN "MAKE.FILE,":MAKE.FILE TO F.MAKE.FILE ELSE  OPEN MAKE.FILE TO F.MAKE.FILE ELSE STOP 201, MAKE.FILEENDOPEN '','MVAPPS.INSTALLED' TO F.MVAPPS.INSTALLED ELSE  EXECUTE "CREATE-FILE MVAPPS.INSTALLED 3 11" CAPTURING JUNK  OPEN '','MVAPPS.INSTALLED' TO F.MVAPPS.INSTALLED ELSE STOP 201, 'MVAPPS.INSTALLED'ENDOPEN '','MVPKG.DATA' TO F.MVPKG.DATA ELSE  EXECUTE "CREATE-FILE MVPKG.DATA 3 11" CAPTURING JUNK  OPEN '','MVPKG.DATA' TO F.MVPKG.DATA ELSE STOP 201, 'MVPKG.DATA'ENDOPEN '','PACKED.FILE' TO TARGET.FILE ELSE   EXECUTE "CREATE-FILE PACKED.FILE 3 31" CAPTURING JUNK  OPEN '','PACKED.FILE' TO TARGET.FILE ELSE STOP 201, 'PACKED.FILE'ENDMATREAD PKG.REC FROM F.MVPKG.DATA, MAKE.FILE ELSE RETURNPACKAGE.NAME = PKG$NAMEPACKAGE.NAME = OCONV(PACKAGE.NAME,"MCAN")PACKAGE.DESCRIPTION = PKG$DESCPACKAGE.VERSION = PKG$BUILD.SEQ + 1IF MAKE.FILE = '' OR PACKAGE.NAME = '' THEN RETURN*PACKAGE.INFO = ""PACKAGE.MODE = 1* Set up the temporary storage area for the scriptsOPEN "MAKE.TEMP" TO F.MAKE.TEMP ELSE  EXECUTE "CREATE-FILE MAKE.TEMP 1 31" CAPTURING JUNK  OPEN "MAKE.TEMP" TO F.MAKE.TEMP ELSE STOP 201, "MAKE.TEMP"ENDCLEARFILE F.MAKE.TEMPOPEN "PACKED.FILE" TO F.PACKED.FILE ELSE  EXECUTE "CREATE-FILE PACKED.FILE 1 31" CAPTURING JUNK  OPEN "PACKED.FILE" TO F.PACKED.FILE ELSE STOP 201, "PACKED.FILE"ENDCLEARFILE F.PACKED.FILEBINARY.OPT = " (B"PACKAGE.INFO<1> = PACKAGE.DESCRIPTIONPACKAGE.INFO<2> = PACKAGE.VERSIONPACKAGE.INFO<3> = "db"PACKAGE.INFO<6> = PACKAGE.NAME*TARGET = "D3"SCRIPT = ""SCRIPT.SEG = 0*READ COMMANDS FROM F.MAKE.FILE, TARGET:"*PRE.COMMANDS" ELSE  READ COMMANDS FROM F.MAKE.FILE, "PRE.COMMANDS" ELSE COMMANDS = ""ENDGOSUB ADD.COMMANDS*WRITE SCRIPT ON F.MAKE.TEMP, "MVAPPS-PRE-SCRIPT"WRITE PACKAGE.INFO ON F.MAKE.TEMP, "PACKAGE.INFO"SCRIPT = ""*READ FILE.LIST FROM F.MAKE.FILE, TARGET:"*FILE.LIST" ELSE  READ FILE.LIST FROM F.MAKE.FILE, "FILE.LIST" ELSE FILE.LIST = ""ENDFOR FX = 1 TO DCOUNT( FILE.LIST, @AM )  FNAME = FILE.LIST<FX>  FX.OVR = FALSE  IF FNAME[1,2] = 'O:' THEN    FNAME=FNAME[3,999]    FX.OVR = TRUE  END  OPEN FNAME TO FVAR THEN    READ ITEM.LIST FROM F.MAKE.FILE, TARGET:"*DATA_":FNAME ELSE      READ ITEM.LIST FROM F.MAKE.FILE, "DATA_":FNAME ELSE ITEM.LIST = ""    END    IF ITEM.LIST<1> = "*" THEN      SELECT FVAR      ITEM.LIST = ''      LOOP        READNEXT ITEM.LIST.ID ELSE EXIT        ITEM.LIST<-1> = ITEM.LIST.ID      REPEAT    END    WRITE ITEM.LIST ON F.MAKE.TEMP, FNAME    EXECUTE "QSELECT MAKE.TEMP '":FNAME:"'" CAPTURING JUNK    IF SYSTEM(11) THEN      GOSUB PACK.FILE    END    DELETE F.MAKE.TEMP, FNAME    OPEN "DICT",FNAME TO D.FVAR THEN      READ ITEM.LIST FROM F.MAKE.FILE, TARGET:"*DICT_":FNAME ELSE        READ ITEM.LIST FROM F.MAKE.FILE, "DICT_":FNAME ELSE ITEM.LIST = ""      END      FNAME = "DICT ":FNAME      IF ITEM.LIST<1> = "*" THEN        SELECT D.FVAR        ITEM.LIST = ''        LOOP          READNEXT ITEM.LIST.ID ELSE EXIT          ITEM.LIST<-1> = ITEM.LIST.ID        REPEAT      END      WRITE ITEM.LIST ON F.MAKE.TEMP, FNAME      EXECUTE "QSELECT MAKE.TEMP '":FNAME:"'" CAPTURING JUNK      IF SYSTEM(11) THEN        GOSUB PACK.FILE      END      DELETE F.MAKE.TEMP, FNAME    END  ENDNEXT FX*READ COMMANDS FROM F.MAKE.FILE, TARGET:"*POST.COMMANDS" ELSE   READ COMMANDS FROM F.MAKE.FILE, "POST.COMMANDS" ELSE COMMANDS = ""ENDSCRIPT = ""GOSUB ADD.COMMANDSWRITE SCRIPT ON F.MAKE.TEMP, "MVAPPS-POST-SCRIPT"EXECUTE 'SELECT MAKE.TEMP "MVAPPS-PRE-SCRIPT" "MVAPPS-POST-SCRIPT" "PACKAGE.INFO"' CAPTURING JUNKFNAME = "MAKE.TEMP"GOSUB PACK.FILE** Change the name of the file containing the scripts from MAKE.TEMP to MD* so they can be executed upon arrival.*READ REC FROM F.PACKED.FILE, "MAKE.TEMP"WRITE REC ON F.PACKED.FILE, "MV.INSTALL.CF"DELETE F.PACKED.FILE, "MAKE.TEMP"*FNAME = "PACKED.FILE"GOSUB PACK.FILEREAD PACKAGE FROM F.PACKED.FILE, "PACKED.FILE" ELSE RETURNCLEARFILE F.PACKED.FILEWRITE PACKAGE ON F.PACKED.FILE, PACKAGE.NAME:'-':PACKAGE.VERSIONOUT.DIR = "/tmp/"HANDLE = %OPEN(OUT.DIR:PACKAGE.NAME,O$CREAT+O$TRUNC+O$RDWR+O$BINARY)ORIG.LEN =LEN(PACKAGE)WTOT = 0LOOP  IF LEN(PACKAGE) >= 10000 THEN    BUFFER = PACKAGE[1,10000]    BLEN = 10000    PACKAGE = PACKAGE[10001,9999999]  END ELSE    BUFFER = PACKAGE    BLEN = LEN(PACKAGE)    PACKAGE = ""  END  W = %WRITE(HANDLE,BUFFER,BLEN)  WTOT += WWHILE PACKAGE # "" DO REPEATLOCATION = OUT.DIR:PACKAGE.NAMESIZE = WTOTRETURN*ADD.COMMANDS: **FOR CMDX = 1 TO DCOUNT( COMMANDS, @AM )  SCRIPT<-1> = COMMANDS<CMDX>NEXT CMDXRETURN*CHECK.DPOINTER: * Check to see if the record contains a dpointer*D.POINTER = FALSEIF OCONV(REC<1>[1,1],'MCU') = "D" THEN  IF FILE.TYPE = "DICT" THEN    IF REC<2> MATCHES "3N0N" AND REC<3> MATCHES "1N0N" THEN      D.POINTER = TRUE    END  ENDENDRETURN*PACK.FILE:ARG.LIST = TRIM( FNAME )BINARY = 1*FILE.TYPE = 'DATA'FILE.NAME = FIELD( ARG.LIST, ' ', 1 )POS = 2IF FILE.NAME = "DATA" OR FILE.NAME = "DICT" THEN  FILE.TYPE = FILE.NAME  FILE.NAME = FIELD( ARG.LIST, ' ', 2 )  POS = 3ENDIF FILE.TYPE = "DATA" THEN FILE.TYPE = ""*OPEN FILE.TYPE,FILE.NAME TO PACK.FILE ELSE RETURNPACK.FILE.ID = ''IF FILE.TYPE # "" THEN PACK.FILE.ID = FILE.TYPE:"_"IF FX.OVR THEN PACK.FILE.ID := 'O:'PACK.FILE.ID := FILE.NAME**Packing PACK.FILE.ID*IF INDEX(FILE.NAME,'BINARY:',1) THEN  HEX.MODE = 1END ELSE HEX.MODE = 0CHK.FILE.NAME = FILE.NAMECOUNT = 0SELECT PACK.FILEEOF = FALSEPACK.REC = ""DLIST = ""SEPARATOR = @AMLOOP  READNEXT CHK.REC.ID ELSE EOF = TRUEUNTIL EOF DO  READ REC FROM PACK.FILE, CHK.REC.ID ELSE REC = ""  *Remove db/widget user access data?  IF PKG$ACCESS.OPT # 1 THEN    IF FILE.NAME = 'MVDB.DEFS' THEN      REC<5> = ''    END ELSE IF FILE.NAME = 'MVDB.WIDGETS' THEN      REC<2> = ''    END  END  GOSUB CHECK.DPOINTER  IF NOT( D.POINTER ) THEN    COUNT = COUNT + 1    IF HEX.MODE THEN      REC = CHK.REC.ID:SEPARATOR:"0x":OCONV(REC,'MX')    END ELSE      REC = CHK.REC.ID:SEPARATOR:"0c":REC    END    LENGTH = OCONV( LEN(REC), 'MCDX' ) "R%6"    PACK.REC = PACK.REC:LENGTH:REC  END ELSE    DLIST<-1> = CHK.REC.ID  ENDREPEAT*FOR D = 1 TO DCOUNT( DLIST, AM )  *PRINT  *PRINT "Item '":DLIST<D>:"' is a D-Pointer.  Not packed."NEXT DIF PACK.REC # "" THEN  WRITE PACK.REC ON TARGET.FILE, PACK.FILE.IDEND*PRINT PACK.FILE.ID:" packed.  ":COUNT:" records packed into ":PACK.FILE.IDRETURN00042EGET.SESSION.ID0c2SUBROUTINE GET.SESSION.ID( SESSION.ID, VARS, VALS )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program extracts the session id from the VARS and VALS*              The programmer could just as easily parse out the HTTP_COOKIE*              header and get the value, but this just standardizes the *              process.*             * Init*#MAKE# RL $OPTIONS D3EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)SESSION.ID = ''*NUM.VARS = DCOUNT(VARS, AM)FOR X = 1 TO NUM.VARS  IF (VARS<X> = 'HTTP_COOKIE') THEN    CSTRING = VALS<X>        CALL SWAP( CSTRING, '%3B ', ';')    CONVERT ';' TO AM IN CSTRING    NUM.COOKIES = DCOUNT(CSTRING, AM)    FOR Y = 1 TO NUM.COOKIES      CVAR = TRIM(FIELD(CSTRING<Y>,'=',1))      CVAL = CSTRING<Y>[(1+INDEX(CSTRING<Y>,'=',1)),99999]      IF (CVAR = 'sessionid') THEN        SESSION.ID = TRIM(CVAL)        EXIT      END    NEXT Y  ENDNEXT X*RETURN*016F3DMVBP.FORMS0c0016F29listpeqs.html0c2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Print Queue</title><style type="text/css">html {margin:0;padding:0;}body{margin:0;padding:0;font-family:Arial, Helvetica, sans-serif;font-size:12px;background: url(/db/images/background_body.gif) 0 0 repeat-x;}/* *html body {height:100%;}*/body.popup{margin:5px 5px 5px 5px;}p, td, th{font-size:1em;}pre {font-size:1em;}#container {position:relative;margin:0 auto;padding:15px 20px 0 20px;}#header {}#maincontent{background: url(/db/images/background_maincontent.gif) 0 0 no-repeat;padding:0 0 0 20px;margin:0 0 0 0;position:relative;}#content {background: url(/db/images/background_maincontent.gif) 100% 0 no-repeat;padding:5px 20px 50px 0;position:relative;min-height:320px;_height:320px;}/* =HEADER STYLES=================================================================*/#header #navbar {position:absolute;top:0;right:-1px;height:30px;list-style:none;margin:0;padding:0 5px 0 0;background: url(/db/images/background_navbar.gif) 0 0 repeat-x;}#header #navbar li {height:10px;float:left;position:relative;}#header #navbar li.myreports {background: url(/db/images/background_navbarleft.gif) 0 0 no-repeat;padding-left:15px;}#header #navbar li.completed {background: url(/db/images/background_navbarright.gif) 100% 0 no-repeat;padding-right:15px;}#header #navbar li.admin {background: url(/db/images/background_tabfirst.gif) 0 12px no-repeat;padding-left:15px;}#header #navbar li.admin a{background: url(/db/images/background_tabfirst.gif) 100% 12px no-repeat;margin:0;padding:7px 12px 0 3px;line-height:24px;height:24px;color: #333333;}#header #navbar li.profile {background: url(/db/images/background_tabfirst.gif) 0 12px no-repeat;padding-left:15px;}body.admin #header #navbar li.profile {background: url(/db/images/background_tab.gif) 0 12px no-repeat;}#header #navbar li.profile a{background: url(/db/images/background_tabright.gif) 100% 12px no-repeat;padding:7px 15px 0 0;margin:0;line-height:24px;height:24px;color: #333333;}#header #navbar li a {float:left;height:32px;line-height:32px;margin:0;padding: 0 8px;text-decoration:none;}#header #navbar li a:hover {text-decoration:underline}#header #navbar li.active a {background: url(/db/images/background_navbaractive.gif) 50% 0 no-repeat;height:30px;font-weight:normal;}#header #navbar a {color: #FFFFFF;}#header #logo {position:absolute;left:10px;top:20px;}#header #welcome {position:absolute;right:15px;top:40px;font-size:.9em;color:#333333;}#errors, #messages {padding:20px 20px 20px 40px;border:1px solid #CCCCCC;background: #EEEEEE;clear:both;margin-bottom:40px;position:relative;}/* =FOOTER STYLES=================================================================*/#footer {text-align:center;font-size:.8em;color: #999999;clear:both;}#footer a {color: #999999;text-decoration:none;}/* =HEADER STYLES=================================================================*/h1 {font-weight:normal;font-size:26px;letter-spacing:-1px;margin:0 0 10px 0;}h2 {font-size:22px;margin:10px 0 0 0;font-weight:normal;}h3 {margin:15px 0 5px 0;font-weight:normal;font-size:16px;border-bottom: 1px solid #999999;position:relative;}h4 {margin:0;font-weight:normal;font-size:12px;}/* =BASIC STYLES=================================================================*/p{margin: 0 0 10px 0;line-height:1.3em;}label{font-weight:bold;}/* =TABLE STYLES=================================================================*/.listing{border:1px solid #cccccc;border-collapse:collapse;clear: both;width:100%;margin: 0 0 5px 0;}.listing th, .form .listing th {background-color:#cccccc;padding:5px;text-align:left;vertical-align:top;border-bottom: 1px solid #cccccc;color: #333333;}table.sortable th a{color: #333333;text-decoration:none;}.listing td, .form .listing td{padding:5px;border-bottom:1px solid #cccccc;vertical-align:top;}.even td, .even th{background: #EEEEEE;}.odd td, .odd th{background: #FFFFFF;}.even .odd th, .even .odd td {background: #FFFFFF;}fieldset {padding:0 10px 10px 10px;margin: 0 0 10px 0;position:relative;}legend {margin-top:5px;font-size:22px;margin-bottom:10px;font-weight:normal;color: #000000;letter-spacing:-1px;}.form {border-collapse:collapse;margin: 0;padding: 0;}.form th{text-align:right;padding:5px 0 5px 5px;background:none;vertical-align:top;}.form td{text-align:left;padding:3px;vertical-align:top;}span.button button {background: url(/db/images/background_button.gif) 100% 0 no-repeat;border:none;padding:0 5px 0 0;height:23px;color:#333333;}span.button {background: url(/db/images/background_button.gif) 0 0 no-repeat;padding: 0 0 0 5px;}html>body span.button {padding: 5px 0 5px 5px;}input.text {border: 1px solid #999999;}input.date {width:55px;background: url(/db/images/icon_calendar.gif) 2px 50% no-repeat;padding-left:20px;border: 1px solid #999999;}/* =PAGING STYLES=================================================================*/.paging{text-align:right;}.wizardtab {position:relative;}.tabnav {text-align:right;padding-top:10px;}.note {font-size:smaller;color: #666666;margin:0;}a:link, a:visited {text-decoration: underline;color: #ff8125;}a:hover {text-decoration: underline;color: #333;}a img {border:none;}#printqueue tr:hover td, #printqueue tr.hover td {background:#CCCCCC;}#printqueue tr:hover .preview, #printqueue tr.hover .preview {display:block;z-index:200;}.preview {position:absolute;right:25px;top:25px;margin-top:-5px;border-top:1px solid #666666;border-right:1px solid #666666;border-left:1px solid #666666;font-size:.8em;padding:20px 20px 10px 20px;background: url(/db/images/background_preview.gif) 0 100% repeat-x;display:none;_width: 60em;min-width:60em;}a.thumbnail pre {float:left;margin:5px;border-top:1px solid #666666;border-right:1px solid #666666;border-left:1px solid #666666;font-size:4px;padding:5em 5em 4em 5em;background: url(/db/images/background_preview.gif) 0 100% repeat-x;position:relative;}a.thumbnail {text-decoration:none;color:#666666;}a.thumbnail:hover {color:#000000}.queued td{background:#FFCC33;}div.page {background: #FFFFFF;border-top:1px solid #BBBBBB;border-right:1px solid #999999;border-left:1px solid #333333;border-bottom:1px solid #000000;margin:10px 0;padding:20px;float:left;clear:both;_width:60em;min-width:60em;font-size:.9em;}.printDialog {position:absolute; top:5px; right:0; width:220px; background:#FFFFFF; border: 1px solid #CCCCCC; border-top:none;}.printDialog div {padding:0 5px 5px 5px;}.even .printDialog {background: #EEEEEE;}tr.hover .printDialog, tr:hover .printDialog {background:#CCCCCC;z-index:201;}#alerts {margin: 50px 0 -30px 0;}form {margin: 0;padding: 0;}#search_box {margin: 0;position: absolute;top: 20px;right: 20px;text-align: right;}</style><script><!--var BaseURL = "/";--></script><script type="text/javascript" language="javascript">/*Behaviour v1.1 by Ben Nolan, June 2005. Based largely on the workof Simon Willison (see comments by Simon below).Description:Uses css selectors to apply javascript behaviours to enableunobtrusive javascript in html documents.Usage:   var myrules = {'b.someclass' : function(element){element.onclick = function(){alert(this.innerHTML);}},'#someid u' : function(element){element.onmouseover = function(){this.innerHTML = "BLAH!";}}};Behaviour.register(myrules);License:My stuff is BSD licensed. Not sure about Simon's.More information:http://ripcord.co.nz/behaviour/*/   var Behaviour = {list : new Array,register : function(sheet){Behaviour.list.push(sheet);},start : function(){Behaviour.addLoadEvent(function(){Behaviour.apply();});},apply : function(){for (h=0;sheet=Behaviour.list[h];h++){for (selector in sheet){list = document.getElementsBySelector(selector);if (!list){continue;}for (i=0;element=list[i];i++){sheet[selector](element);}}}},addLoadEvent : function(func){var oldonload = window.onload;if (typeof window.onload != 'function') {window.onload = func;} else {window.onload = function() {oldonload();func();}}}}Behaviour.start();/*The following code is Copyright (C) Simon Willison 2004.document.getElementsBySelector(selector)- returns an array of element objects from the current documentmatching the CSS selector. Selectors can contain element names, class names and ids and can be nested. For example:elements = document.getElementsBySelect('div#main p a.external')Will return an array of all 'a' elements with 'external' in their class attribute that are contained inside 'p' elements that are contained inside the 'div' element which has id="main"New in version 0.4: Support for CSS2 and CSS3 attribute selectors:See http://www.w3.org/TR/css3-selectors/#attribute-selectorsVersion 0.4 - Simon Willison, March 25th 2003-- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows-- Opera 7 fails */function getAllChildren(e) {return e.all ? e.all : e.getElementsByTagName('*');}document.getElementsBySelector = function(selector) {if (!document.getElementsByTagName) {return new Array();}var tokens = selector.split(' ');var currentContext = new Array(document);for (var i = 0; i < tokens.length; i++) {token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;if (token.indexOf('#') > -1) {var bits = token.split('#');var tagName = bits[0];var id = bits[1];var element = document.getElementById(id);if (tagName && element.nodeName.toLowerCase() != tagName) {return new Array();}currentContext = new Array(element);continue; // Skip to next token}if (token.indexOf('.') > -1) {var bits = token.split('.');var tagName = bits[0];var className = bits[1];if (!tagName) {tagName = '*';}var found = new Array;var foundCount = 0;for (var h = 0; h < currentContext.length; h++) {var elements;if (tagName == '*') {elements = getAllChildren(currentContext[h]);} else {elements = currentContext[h].getElementsByTagName(tagName);}for (var j = 0; j < elements.length; j++) {found[foundCount++] = elements[j];}}currentContext = new Array;var currentContextIndex = 0;for (var k = 0; k < found.length; k++) {if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) {currentContext[currentContextIndex++] = found[k];}}continue; // Skip to next token}if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {var tagName = RegExp.$1;var attrName = RegExp.$2;var attrOperator = RegExp.$3;var attrValue = RegExp.$4;if (!tagName) {tagName = '*';}var found = new Array;var foundCount = 0;for (var h = 0; h < currentContext.length; h++) {var elements;if (tagName == '*') {elements = getAllChildren(currentContext[h]);} else {elements = currentContext[h].getElementsByTagName(tagName);}for (var j = 0; j < elements.length; j++) {found[foundCount++] = elements[j];}}currentContext = new Array;var currentContextIndex = 0;var checkFunction; // This function will be used to filter the elementsswitch (attrOperator) {case '=': // EqualitycheckFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };break;case '~': // Match one of space seperated words checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };break;case '|': // Match start with value followed by optional hyphencheckFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };break;case '^': // Match starts with valuecheckFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };break;case '$': // Match ends with value - fails with "Warning" in Opera 7checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };break;case '*': // Match ends with valuecheckFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };break;default :checkFunction = function(e) { return e.getAttribute(attrName); };}currentContext = new Array;var currentContextIndex = 0;for (var k = 0; k < found.length; k++) {if (checkFunction(found[k])) {currentContext[currentContextIndex++] = found[k];}}continue; // Skip to next token}if (!currentContext[0]){return;}tagName = token;var found = new Array;var foundCount = 0;for (var h = 0; h < currentContext.length; h++) {var elements = currentContext[h].getElementsByTagName(tagName);for (var j = 0; j < elements.length; j++) {found[foundCount++] = elements[j];}}currentContext = found;}return currentContext;}/* That revolting regular expression explained /^(\w+)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/\---/  \---/\-------------/    \-------/|      |         |               ||      |         |           The value|      |    ~,|,^,$,* or =|   Attribute Tag*/</script><script type="text/javascript" language="javascript">/*  Prototype JavaScript framework, version 1.4.0*  (c) 2005 Sam Stephenson <sam@conio.net>**  THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff*  against the source tree, available from the Prototype darcs repository.**  Prototype is freely distributable under the terms of an MIT-style license.**  For details, see the Prototype web site: http://prototype.conio.net/*/*--------------------------------------------------------------------------*/var Prototype = {Version: '1.4.0',ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',emptyFunction: function() {},K: function(x) {return x}}var Class = {create: function() {return function() {this.initialize.apply(this, arguments);}}}var Abstract = new Object();Object.extend = function(destination, source) {for (property in source) {destination[property] = source[property];}return destination;}Object.inspect = function(object) {try {if (object == undefined) return 'undefined';if (object == null) return 'null';return object.inspect ? object.inspect() : object.toString();} catch (e) {if (e instanceof RangeError) return '...';throw e;}}Function.prototype.bind = function() {var __method = this, args = $A(arguments), object = args.shift();return function() {return __method.apply(object, args.concat($A(arguments)));}}Function.prototype.bindAsEventListener = function(object) {var __method = this;return function(event) {return __method.call(object, event || window.event);}}Object.extend(Number.prototype, {toColorPart: function() {var digits = this.toString(16);if (this < 16) return '0' + digits;return digits;},succ: function() {return this + 1;},times: function(iterator) {$R(0, this, true).each(iterator);return this;}});var Try = {these: function() {var returnValue;for (var i = 0; i < arguments.length; i++) {var lambda = arguments[i];try {returnValue = lambda();break;} catch (e) {}}return returnValue;}}/*--------------------------------------------------------------------------*/var PeriodicalExecuter = Class.create();PeriodicalExecuter.prototype = {initialize: function(callback, frequency) {this.callback = callback;this.frequency = frequency;this.currentlyExecuting = false;this.registerCallback();},registerCallback: function() {setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);},onTimerEvent: function() {if (!this.currentlyExecuting) {try {this.currentlyExecuting = true;this.callback();} finally {this.currentlyExecuting = false;}}}}/*--------------------------------------------------------------------------*/function $() {var elements = new Array();for (var i = 0; i < arguments.length; i++) {var element = arguments[i];if (typeof element == 'string')element = document.getElementById(element);if (arguments.length == 1)return element;elements.push(element);}return elements;}Object.extend(String.prototype, {stripTags: function() {return this.replace(/<\/?[^>]+>/gi, '');},stripScripts: function() {return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');},extractScripts: function() {var matchAll = new RegExp(Prototype.ScriptFragment, 'img');var matchOne = new RegExp(Prototype.ScriptFragment, 'im');return (this.match(matchAll) || []).map(function(scriptTag) {return (scriptTag.match(matchOne) || ['', ''])[1];});},evalScripts: function() {return this.extractScripts().map(eval);},escapeHTML: function() {var div = document.createElement('div');var text = document.createTextNode(this);div.appendChild(text);return div.innerHTML;},unescapeHTML: function() {var div = document.createElement('div');div.innerHTML = this.stripTags();return div.childNodes[0] ? div.childNodes[0].nodeValue : '';},toQueryParams: function() {var pairs = this.match(/^\??(.*)$/)[1].split('&');return pairs.inject({}, function(params, pairString) {var pair = pairString.split('=');params[pair[0]] = pair[1];return params;});},toArray: function() {return this.split('');},camelize: function() {var oStringList = this.split('-');if (oStringList.length == 1) return oStringList[0];var camelizedString = this.indexOf('-') == 0? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1): oStringList[0];for (var i = 1, len = oStringList.length; i < len; i++) {var s = oStringList[i];camelizedString += s.charAt(0).toUpperCase() + s.substring(1);}return camelizedString;},inspect: function() {return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'";}});String.prototype.parseQuery = String.prototype.toQueryParams;var $break    = new Object();var $continue = new Object();var Enumerable = {each: function(iterator) {var index = 0;try {this._each(function(value) {try {iterator(value, index++);} catch (e) {if (e != $continue) throw e;}});} catch (e) {if (e != $break) throw e;}},all: function(iterator) {var result = true;this.each(function(value, index) {result = result && !!(iterator || Prototype.K)(value, index);if (!result) throw $break;});return result;},any: function(iterator) {var result = true;this.each(function(value, index) {if (result = !!(iterator || Prototype.K)(value, index))throw $break;});return result;},collect: function(iterator) {var results = [];this.each(function(value, index) {results.push(iterator(value, index));});return results;},detect: function (iterator) {var result;this.each(function(value, index) {if (iterator(value, index)) {result = value;throw $break;}});return result;},findAll: function(iterator) {var results = [];this.each(function(value, index) {if (iterator(value, index))results.push(value);});return results;},grep: function(pattern, iterator) {var results = [];this.each(function(value, index) {var stringValue = value.toString();if (stringValue.match(pattern))results.push((iterator || Prototype.K)(value, index));})return results;},include: function(object) {var found = false;this.each(function(value) {if (value == object) {found = true;throw $break;}});return found;},inject: function(memo, iterator) {this.each(function(value, index) {memo = iterator(memo, value, index);});return memo;},invoke: function(method) {var args = $A(arguments).slice(1);return this.collect(function(value) {return value[method].apply(value, args);});},max: function(iterator) {var result;this.each(function(value, index) {value = (iterator || Prototype.K)(value, index);if (value >= (result || value))result = value;});return result;},min: function(iterator) {var result;this.each(function(value, index) {value = (iterator || Prototype.K)(value, index);if (value <= (result || value))result = value;});return result;},partition: function(iterator) {var trues = [], falses = [];this.each(function(value, index) {((iterator || Prototype.K)(value, index) ?trues : falses).push(value);});return [trues, falses];},pluck: function(property) {var results = [];this.each(function(value, index) {results.push(value[property]);});return results;},reject: function(iterator) {var results = [];this.each(function(value, index) {if (!iterator(value, index))results.push(value);});return results;},sortBy: function(iterator) {return this.collect(function(value, index) {return {value: value, criteria: iterator(value, index)};}).sort(function(left, right) {var a = left.criteria, b = right.criteria;return a < b ? -1 : a > b ? 1 : 0;}).pluck('value');},toArray: function() {return this.collect(Prototype.K);},zip: function() {var iterator = Prototype.K, args = $A(arguments);if (typeof args.last() == 'function')iterator = args.pop();var collections = [this].concat(args).map($A);return this.map(function(value, index) {iterator(value = collections.pluck(index));return value;});},inspect: function() {return '#<Enumerable:' + this.toArray().inspect() + '>';}}Object.extend(Enumerable, {map:     Enumerable.collect,find:    Enumerable.detect,select:  Enumerable.findAll,member:  Enumerable.include,entries: Enumerable.toArray});var $A = Array.from = function(iterable) {if (!iterable) return [];if (iterable.toArray) {return iterable.toArray();} else {var results = [];for (var i = 0; i < iterable.length; i++)results.push(iterable[i]);return results;}}Object.extend(Array.prototype, Enumerable);Array.prototype._reverse = Array.prototype.reverse;Object.extend(Array.prototype, {_each: function(iterator) {for (var i = 0; i < this.length; i++)iterator(this[i]);},clear: function() {this.length = 0;return this;},first: function() {return this[0];},last: function() {return this[this.length - 1];},compact: function() {return this.select(function(value) {return value != undefined || value != null;});},flatten: function() {return this.inject([], function(array, value) {return array.concat(value.constructor == Array ?value.flatten() : [value]);});},without: function() {var values = $A(arguments);return this.select(function(value) {return !values.include(value);});},indexOf: function(object) {for (var i = 0; i < this.length; i++)if (this[i] == object) return i;return -1;},reverse: function(inline) {return (inline !== false ? this : this.toArray())._reverse();},shift: function() {var result = this[0];for (var i = 0; i < this.length - 1; i++)this[i] = this[i + 1];this.length--;return result;},inspect: function() {return '[' + this.map(Object.inspect).join(', ') + ']';}});var Hash = {_each: function(iterator) {for (key in this) {var value = this[key];if (typeof value == 'function') continue;var pair = [key, value];pair.key = key;pair.value = value;iterator(pair);}},keys: function() {return this.pluck('key');},values: function() {return this.pluck('value');},merge: function(hash) {return $H(hash).inject($H(this), function(mergedHash, pair) {mergedHash[pair.key] = pair.value;return mergedHash;});},toQueryString: function() {return this.map(function(pair) {return pair.map(encodeURIComponent).join('=');}).join('&');},inspect: function() {return '#<Hash:{' + this.map(function(pair) {return pair.map(Object.inspect).join(': ');}).join(', ') + '}>';}}function $H(object) {var hash = Object.extend({}, object || {});Object.extend(hash, Enumerable);Object.extend(hash, Hash);return hash;}ObjectRange = Class.create();Object.extend(ObjectRange.prototype, Enumerable);Object.extend(ObjectRange.prototype, {initialize: function(start, end, exclusive) {this.start = start;this.end = end;this.exclusive = exclusive;},_each: function(iterator) {var value = this.start;do {iterator(value);value = value.succ();} while (this.include(value));},include: function(value) {if (value < this.start)return false;if (this.exclusive)return value < this.end;return value <= this.end;}});var $R = function(start, end, exclusive) {return new ObjectRange(start, end, exclusive);}var Ajax = {getTransport: function() {return Try.these(function() {return new ActiveXObject('Msxml2.XMLHTTP')},function() {return new ActiveXObject('Microsoft.XMLHTTP')},function() {return new XMLHttpRequest()}) || false;},activeRequestCount: 0}Ajax.Responders = {responders: [],_each: function(iterator) {this.responders._each(iterator);},register: function(responderToAdd) {if (!this.include(responderToAdd))this.responders.push(responderToAdd);},unregister: function(responderToRemove) {this.responders = this.responders.without(responderToRemove);},dispatch: function(callback, request, transport, json) {this.each(function(responder) {if (responder[callback] && typeof responder[callback] == 'function') {try {responder[callback].apply(responder, [request, transport, json]);} catch (e) {}}});}};Object.extend(Ajax.Responders, Enumerable);Ajax.Responders.register({onCreate: function() {Ajax.activeRequestCount++;},onComplete: function() {Ajax.activeRequestCount--;}});Ajax.Base = function() {};Ajax.Base.prototype = {setOptions: function(options) {this.options = {method:       'post',asynchronous: true,parameters:   ''}Object.extend(this.options, options || {});},responseIsSuccess: function() {return this.transport.status == undefined|| this.transport.status == 0|| (this.transport.status >= 200 && this.transport.status < 300);},responseIsFailure: function() {return !this.responseIsSuccess();}}Ajax.Request = Class.create();Ajax.Request.Events =['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];Ajax.Request.prototype = Object.extend(new Ajax.Base(), {initialize: function(url, options) {this.transport = Ajax.getTransport();this.setOptions(options);this.request(url);},request: function(url) {var parameters = this.options.parameters || '';if (parameters.length > 0) parameters += '&_=';try {this.url = url;if (this.options.method == 'get' && parameters.length > 0)this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;Ajax.Responders.dispatch('onCreate', this, this.transport);this.transport.open(this.options.method, this.url,this.options.asynchronous);if (this.options.asynchronous) {this.transport.onreadystatechange = this.onStateChange.bind(this);setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);}this.setRequestHeaders();var body = this.options.postBody ? this.options.postBody : parameters;this.transport.send(this.options.method == 'post' ? body : null);} catch (e) {this.dispatchException(e);}},setRequestHeaders: function() {var requestHeaders =['X-Requested-With', 'XMLHttpRequest','X-Prototype-Version', Prototype.Version];if (this.options.method == 'post') {requestHeaders.push('Content-type','application/x-www-form-urlencoded');/* Force "Connection: close" for Mozilla browsers to work around* a bug where XMLHttpReqeuest sends an incorrect Content-length* header. See Mozilla Bugzilla #246651.*/if (this.transport.overrideMimeType)requestHeaders.push('Connection', 'close');}if (this.options.requestHeaders)requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);for (var i = 0; i < requestHeaders.length; i += 2)this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);},onStateChange: function() {var readyState = this.transport.readyState;if (readyState != 1)this.respondToReadyState(this.transport.readyState);},header: function(name) {try {return this.transport.getResponseHeader(name);} catch (e) {}},evalJSON: function() {try {return eval(this.header('X-JSON'));} catch (e) {}},evalResponse: function() {try {return eval(this.transport.responseText);} catch (e) {this.dispatchException(e);}},respondToReadyState: function(readyState) {var event = Ajax.Request.Events[readyState];var transport = this.transport, json = this.evalJSON();if (event == 'Complete') {try {(this.options['on' + this.transport.status]|| this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]|| Prototype.emptyFunction)(transport, json);} catch (e) {this.dispatchException(e);}if ((this.header('Content-type') || '').match(/^text\/javascript/i))this.evalResponse();}try {(this.options['on' + event] || Prototype.emptyFunction)(transport, json);Ajax.Responders.dispatch('on' + event, this, transport, json);} catch (e) {this.dispatchException(e);}/* Avoid memory leak in MSIE: clean up the oncomplete event handler */if (event == 'Complete')this.transport.onreadystatechange = Prototype.emptyFunction;},dispatchException: function(exception) {(this.options.onException || Prototype.emptyFunction)(this, exception);Ajax.Responders.dispatch('onException', this, exception);}});Ajax.Updater = Class.create();Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {initialize: function(container, url, options) {this.containers = {success: container.success ? $(container.success) : $(container),failure: container.failure ? $(container.failure) :(container.success ? null : $(container))}this.transport = Ajax.getTransport();this.setOptions(options);var onComplete = this.options.onComplete || Prototype.emptyFunction;this.options.onComplete = (function(transport, object) {this.updateContent();onComplete(transport, object);}).bind(this);this.request(url);},updateContent: function() {var receiver = this.responseIsSuccess() ?this.containers.success : this.containers.failure;var response = this.transport.responseText;if (!this.options.evalScripts)response = response.stripScripts();if (receiver) {if (this.options.insertion) {new this.options.insertion(receiver, response);} else {Element.update(receiver, response);}}if (this.responseIsSuccess()) {if (this.onComplete)setTimeout(this.onComplete.bind(this), 10);}}});Ajax.PeriodicalUpdater = Class.create();Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {initialize: function(container, url, options) {this.setOptions(options);this.onComplete = this.options.onComplete;this.frequency = (this.options.frequency || 2);this.decay = (this.options.decay || 1);this.updater = {};this.container = container;this.url = url;this.start();},start: function() {this.options.onComplete = this.updateComplete.bind(this);this.onTimerEvent();},stop: function() {this.updater.onComplete = undefined;clearTimeout(this.timer);(this.onComplete || Prototype.emptyFunction).apply(this, arguments);},updateComplete: function(request) {if (this.options.decay) {this.decay = (request.responseText == this.lastText ?this.decay * this.options.decay : 1);this.lastText = request.responseText;}this.timer = setTimeout(this.onTimerEvent.bind(this),this.decay * this.frequency * 1000);},onTimerEvent: function() {this.updater = new Ajax.Updater(this.container, this.url, this.options);}});document.getElementsByClassName = function(className, parentElement) {var children = ($(parentElement) || document.body).getElementsByTagName('*');return $A(children).inject([], function(elements, child) {if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))elements.push(child);return elements;});}/*--------------------------------------------------------------------------*/if (!window.Element) {var Element = new Object();}Object.extend(Element, {visible: function(element) {return $(element).style.display != 'none';},toggle: function() {for (var i = 0; i < arguments.length; i++) {var element = $(arguments[i]);Element[Element.visible(element) ? 'hide' : 'show'](element);}},hide: function() {for (var i = 0; i < arguments.length; i++) {var element = $(arguments[i]);element.style.display = 'none';}},show: function() {for (var i = 0; i < arguments.length; i++) {var element = $(arguments[i]);element.style.display = '';}},remove: function(element) {element = $(element);element.parentNode.removeChild(element);},update: function(element, html) {$(element).innerHTML = html.stripScripts();setTimeout(function() {html.evalScripts()}, 10);},getHeight: function(element) {element = $(element);return element.offsetHeight;},classNames: function(element) {return new Element.ClassNames(element);},hasClassName: function(element, className) {if (!(element = $(element))) return;return Element.classNames(element).include(className);},addClassName: function(element, className) {if (!(element = $(element))) return;return Element.classNames(element).add(className);},removeClassName: function(element, className) {if (!(element = $(element))) return;return Element.classNames(element).remove(className);},cleanWhitespace: function(element) {element = $(element);for (var i = 0; i < element.childNodes.length; i++) {var node = element.childNodes[i];if (node.nodeType == 3 && !/\S/.test(node.nodeValue))Element.remove(node);}},empty: function(element) {return $(element).innerHTML.match(/^\s*$/);},scrollTo: function(element) {element = $(element);var x = element.x ? element.x : element.offsetLeft,y = element.y ? element.y : element.offsetTop;window.scrollTo(x, y);},getStyle: function(element, style) {element = $(element);var value = element.style[style.camelize()];if (!value) {if (document.defaultView && document.defaultView.getComputedStyle) {var css = document.defaultView.getComputedStyle(element, null);value = css ? css.getPropertyValue(style) : null;} else if (element.currentStyle) {value = element.currentStyle[style.camelize()];}}if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))if (Element.getStyle(element, 'position') == 'static') value = 'auto';return value == 'auto' ? null : value;},setStyle: function(element, style) {element = $(element);for (name in style)element.style[name.camelize()] = style[name];},getDimensions: function(element) {element = $(element);if (Element.getStyle(element, 'display') != 'none')return {width: element.offsetWidth, height: element.offsetHeight};var els = element.style;var originalVisibility = els.visibility;var originalPosition = els.position;els.visibility = 'hidden';els.position = 'absolute';els.display = '';var originalWidth = element.clientWidth;var originalHeight = element.clientHeight;els.display = 'none';els.position = originalPosition;els.visibility = originalVisibility;return {width: originalWidth, height: originalHeight};},makePositioned: function(element) {element = $(element);var pos = Element.getStyle(element, 'position');if (pos == 'static' || !pos) {element._madePositioned = true;element.style.position = 'relative';if (window.opera) {element.style.top = 0;element.style.left = 0;}}},undoPositioned: function(element) {element = $(element);if (element._madePositioned) {element._madePositioned = undefined;element.style.position =element.style.top =element.style.left =element.style.bottom =element.style.right = '';}},makeClipping: function(element) {element = $(element);if (element._overflow) return;element._overflow = element.style.overflow;if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')element.style.overflow = 'hidden';},undoClipping: function(element) {element = $(element);if (element._overflow) return;element.style.overflow = element._overflow;element._overflow = undefined;}});var Toggle = new Object();Toggle.display = Element.toggle;/*--------------------------------------------------------------------------*/Abstract.Insertion = function(adjacency) {this.adjacency = adjacency;}Abstract.Insertion.prototype = {initialize: function(element, content) {this.element = $(element);this.content = content.stripScripts();if (this.adjacency && this.element.insertAdjacentHTML) {try {this.element.insertAdjacentHTML(this.adjacency, this.content);} catch (e) {if (this.element.tagName.toLowerCase() == 'tbody') {this.insertContent(this.contentFromAnonymousTable());} else {throw e;}}} else {this.range = this.element.ownerDocument.createRange();if (this.initializeRange) this.initializeRange();this.insertContent([this.range.createContextualFragment(this.content)]);}setTimeout(function() {content.evalScripts()}, 10);},contentFromAnonymousTable: function() {var div = document.createElement('div');div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';return $A(div.childNodes[0].childNodes[0].childNodes);}}var Insertion = new Object();Insertion.Before = Class.create();Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {initializeRange: function() {this.range.setStartBefore(this.element);},insertContent: function(fragments) {fragments.each((function(fragment) {this.element.parentNode.insertBefore(fragment, this.element);}).bind(this));}});Insertion.Top = Class.create();Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {initializeRange: function() {this.range.selectNodeContents(this.element);this.range.collapse(true);},insertContent: function(fragments) {fragments.reverse(false).each((function(fragment) {this.element.insertBefore(fragment, this.element.firstChild);}).bind(this));}});Insertion.Bottom = Class.create();Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {initializeRange: function() {this.range.selectNodeContents(this.element);this.range.collapse(this.element);},insertContent: function(fragments) {fragments.each((function(fragment) {this.element.appendChild(fragment);}).bind(this));}});Insertion.After = Class.create();Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {initializeRange: function() {this.range.setStartAfter(this.element);},insertContent: function(fragments) {fragments.each((function(fragment) {this.element.parentNode.insertBefore(fragment,this.element.nextSibling);}).bind(this));}});/*--------------------------------------------------------------------------*/Element.ClassNames = Class.create();Element.ClassNames.prototype = {initialize: function(element) {this.element = $(element);},_each: function(iterator) {this.element.className.split(/\s+/).select(function(name) {return name.length > 0;})._each(iterator);},set: function(className) {this.element.className = className;},add: function(classNameToAdd) {if (this.include(classNameToAdd)) return;this.set(this.toArray().concat(classNameToAdd).join(' '));},remove: function(classNameToRemove) {if (!this.include(classNameToRemove)) return;this.set(this.select(function(className) {return className != classNameToRemove;}).join(' '));},toString: function() {return this.toArray().join(' ');}}Object.extend(Element.ClassNames.prototype, Enumerable);var Field = {clear: function() {for (var i = 0; i < arguments.length; i++)$(arguments[i]).value = '';},focus: function(element) {$(element).focus();},present: function() {for (var i = 0; i < arguments.length; i++)if ($(arguments[i]).value == '') return false;return true;},select: function(element) {$(element).select();},activate: function(element) {element = $(element);element.focus();if (element.select)element.select();}}/*--------------------------------------------------------------------------*/var Form = {serialize: function(form) {var elements = Form.getElements($(form));var queryComponents = new Array();for (var i = 0; i < elements.length; i++) {var queryComponent = Form.Element.serialize(elements[i]);if (queryComponent)queryComponents.push(queryComponent);}return queryComponents.join('&');},getElements: function(form) {form = $(form);var elements = new Array();for (tagName in Form.Element.Serializers) {var tagElements = form.getElementsByTagName(tagName);for (var j = 0; j < tagElements.length; j++)elements.push(tagElements[j]);}return elements;},getInputs: function(form, typeName, name) {form = $(form);var inputs = form.getElementsByTagName('input');if (!typeName && !name)return inputs;var matchingInputs = new Array();for (var i = 0; i < inputs.length; i++) {var input = inputs[i];if ((typeName && input.type != typeName) ||(name && input.name != name))continue;matchingInputs.push(input);}return matchingInputs;},disable: function(form) {var elements = Form.getElements(form);for (var i = 0; i < elements.length; i++) {var element = elements[i];element.blur();element.disabled = 'true';}},enable: function(form) {var elements = Form.getElements(form);for (var i = 0; i < elements.length; i++) {var element = elements[i];element.disabled = '';}},findFirstElement: function(form) {return Form.getElements(form).find(function(element) {return element.type != 'hidden' && !element.disabled &&['input', 'select', 'textarea'].include(element.tagName.toLowerCase());});},focusFirstElement: function(form) {Field.activate(Form.findFirstElement(form));},reset: function(form) {$(form).reset();}}Form.Element = {serialize: function(element) {element = $(element);var method = element.tagName.toLowerCase();var parameter = Form.Element.Serializers[method](element);if (parameter) {var key = encodeURIComponent(parameter[0]);if (key.length == 0) return;if (parameter[1].constructor != Array)parameter[1] = [parameter[1]];return parameter[1].map(function(value) {return key + '=' + encodeURIComponent(value);}).join('&');}},getValue: function(element) {element = $(element);var method = element.tagName.toLowerCase();var parameter = Form.Element.Serializers[method](element);if (parameter)return parameter[1];}}Form.Element.Serializers = {input: function(element) {switch (element.type.toLowerCase()) {case 'submit':case 'hidden':case 'password':case 'text':return Form.Element.Serializers.textarea(element);case 'checkbox':case 'radio':return Form.Element.Serializers.inputSelector(element);}return false;},inputSelector: function(element) {if (element.checked)return [element.name, element.value];},textarea: function(element) {return [element.name, element.value];},select: function(element) {return Form.Element.Serializers[element.type == 'select-one' ?'selectOne' : 'selectMany'](element);},selectOne: function(element) {var value = '', opt, index = element.selectedIndex;if (index >= 0) {opt = element.options[index];value = opt.value;if (!value && !('value' in opt))value = opt.text;}return [element.name, value];},selectMany: function(element) {var value = new Array();for (var i = 0; i < element.length; i++) {var opt = element.options[i];if (opt.selected) {var optValue = opt.value;if (!optValue && !('value' in opt))optValue = opt.text;value.push(optValue);}}return [element.name, value];}}/*--------------------------------------------------------------------------*/var $F = Form.Element.getValue;/*--------------------------------------------------------------------------*/Abstract.TimedObserver = function() {}Abstract.TimedObserver.prototype = {initialize: function(element, frequency, callback) {this.frequency = frequency;this.element   = $(element);this.callback  = callback;this.lastValue = this.getValue();this.registerCallback();},registerCallback: function() {setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);},onTimerEvent: function() {var value = this.getValue();if (this.lastValue != value) {this.callback(this.element, value);this.lastValue = value;}}}Form.Element.Observer = Class.create();Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {getValue: function() {return Form.Element.getValue(this.element);}});Form.Observer = Class.create();Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {getValue: function() {return Form.serialize(this.element);}});/*--------------------------------------------------------------------------*/Abstract.EventObserver = function() {}Abstract.EventObserver.prototype = {initialize: function(element, callback) {this.element  = $(element);this.callback = callback;this.lastValue = this.getValue();if (this.element.tagName.toLowerCase() == 'form')this.registerFormCallbacks();elsethis.registerCallback(this.element);},onElementEvent: function() {var value = this.getValue();if (this.lastValue != value) {this.callback(this.element, value);this.lastValue = value;}},registerFormCallbacks: function() {var elements = Form.getElements(this.element);for (var i = 0; i < elements.length; i++)this.registerCallback(elements[i]);},registerCallback: function(element) {if (element.type) {switch (element.type.toLowerCase()) {case 'checkbox':case 'radio':Event.observe(element, 'click', this.onElementEvent.bind(this));break;case 'password':case 'text':case 'textarea':case 'select-one':case 'select-multiple':Event.observe(element, 'change', this.onElementEvent.bind(this));break;}}}}Form.Element.EventObserver = Class.create();Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {getValue: function() {return Form.Element.getValue(this.element);}});Form.EventObserver = Class.create();Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {getValue: function() {return Form.serialize(this.element);}});if (!window.Event) {var Event = new Object();}Object.extend(Event, {KEY_BACKSPACE: 8,KEY_TAB:       9,KEY_RETURN:   13,KEY_ESC:      27,KEY_LEFT:     37,KEY_UP:       38,KEY_RIGHT:    39,KEY_DOWN:     40,KEY_DELETE:   46,element: function(event) {return event.target || event.srcElement;},isLeftClick: function(event) {return (((event.which) && (event.which == 1)) ||((event.button) && (event.button == 1)));},pointerX: function(event) {return event.pageX || (event.clientX +(document.documentElement.scrollLeft || document.body.scrollLeft));},pointerY: function(event) {return event.pageY || (event.clientY +(document.documentElement.scrollTop || document.body.scrollTop));},stop: function(event) {if (event.preventDefault) {event.preventDefault();event.stopPropagation();} else {event.returnValue = false;event.cancelBubble = true;}},findElement: function(event, tagName) {var element = Event.element(event);while (element.parentNode && (!element.tagName ||(element.tagName.toUpperCase() != tagName.toUpperCase())))element = element.parentNode;return element;},observers: false,_observeAndCache: function(element, name, observer, useCapture) {if (!this.observers) this.observers = [];if (element.addEventListener) {this.observers.push([element, name, observer, useCapture]);element.addEventListener(name, observer, useCapture);} else if (element.attachEvent) {this.observers.push([element, name, observer, useCapture]);element.attachEvent('on' + name, observer);}},unloadCache: function() {if (!Event.observers) return;for (var i = 0; i < Event.observers.length; i++) {Event.stopObserving.apply(this, Event.observers[i]);Event.observers[i][0] = null;}Event.observers = false;},observe: function(element, name, observer, useCapture) {var element = $(element);useCapture = useCapture || false;if (name == 'keypress' &&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)|| element.attachEvent))name = 'keydown';this._observeAndCache(element, name, observer, useCapture);},stopObserving: function(element, name, observer, useCapture) {var element = $(element);useCapture = useCapture || false;if (name == 'keypress' &&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)|| element.detachEvent))name = 'keydown';if (element.removeEventListener) {element.removeEventListener(name, observer, useCapture);} else if (element.detachEvent) {element.detachEvent('on' + name, observer);}}});/* prevent memory leaks in IE */Event.observe(window, 'unload', Event.unloadCache, false);var Position = {includeScrollOffsets: false,prepare: function() {this.deltaX =  window.pageXOffset|| document.documentElement.scrollLeft|| document.body.scrollLeft|| 0;this.deltaY =  window.pageYOffset|| document.documentElement.scrollTop|| document.body.scrollTop|| 0;},realOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.scrollTop  || 0;valueL += element.scrollLeft || 0;element = element.parentNode;} while (element);return [valueL, valueT];},cumulativeOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;element = element.offsetParent;} while (element);return [valueL, valueT];},positionedOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;element = element.offsetParent;if (element) {p = Element.getStyle(element, 'position');if (p == 'relative' || p == 'absolute') break;}} while (element);return [valueL, valueT];},offsetParent: function(element) {if (element.offsetParent) return element.offsetParent;if (element == document.body) return element;while ((element = element.parentNode) && element != document.body)if (Element.getStyle(element, 'position') != 'static')return element;return document.body;},within: function(element, x, y) {if (this.includeScrollOffsets)return this.withinIncludingScrolloffsets(element, x, y);this.xcomp = x;this.ycomp = y;this.offset = this.cumulativeOffset(element);return (y >= this.offset[1] &&y <  this.offset[1] + element.offsetHeight &&x >= this.offset[0] &&x <  this.offset[0] + element.offsetWidth);},withinIncludingScrolloffsets: function(element, x, y) {var offsetcache = this.realOffset(element);this.xcomp = x + offsetcache[0] - this.deltaX;this.ycomp = y + offsetcache[1] - this.deltaY;this.offset = this.cumulativeOffset(element);return (this.ycomp >= this.offset[1] &&this.ycomp <  this.offset[1] + element.offsetHeight &&this.xcomp >= this.offset[0] &&this.xcomp <  this.offset[0] + element.offsetWidth);},overlap: function(mode, element) {if (!mode) return 0;if (mode == 'vertical')return ((this.offset[1] + element.offsetHeight) - this.ycomp) /element.offsetHeight;if (mode == 'horizontal')return ((this.offset[0] + element.offsetWidth) - this.xcomp) /element.offsetWidth;},clone: function(source, target) {source = $(source);target = $(target);target.style.position = 'absolute';var offsets = this.cumulativeOffset(source);target.style.top    = offsets[1] + 'px';target.style.left   = offsets[0] + 'px';target.style.width  = source.offsetWidth + 'px';target.style.height = source.offsetHeight + 'px';},page: function(forElement) {var valueT = 0, valueL = 0;var element = forElement;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;if (element.offsetParent==document.body)if (Element.getStyle(element,'position')=='absolute') break;} while (element = element.offsetParent);element = forElement;do {valueT -= element.scrollTop  || 0;valueL -= element.scrollLeft || 0;} while (element = element.parentNode);return [valueL, valueT];},clone: function(source, target) {var options = Object.extend({setLeft:    true,setTop:     true,setWidth:   true,setHeight:  true,offsetTop:  0,offsetLeft: 0}, arguments[2] || {})source = $(source);var p = Position.page(source);target = $(target);var delta = [0, 0];var parent = null;if (Element.getStyle(target,'position') == 'absolute') {parent = Position.offsetParent(target);delta = Position.page(parent);}if (parent == document.body) {delta[0] -= document.body.offsetLeft;delta[1] -= document.body.offsetTop;}if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';if(options.setWidth)  target.style.width = source.offsetWidth + 'px';if(options.setHeight) target.style.height = source.offsetHeight + 'px';},absolutize: function(element) {element = $(element);if (element.style.position == 'absolute') return;Position.prepare();var offsets = Position.positionedOffset(element);var top     = offsets[1];var left    = offsets[0];var width   = element.clientWidth;var height  = element.clientHeight;element._originalLeft   = left - parseFloat(element.style.left  || 0);element._originalTop    = top  - parseFloat(element.style.top || 0);element._originalWidth  = element.style.width;element._originalHeight = element.style.height;element.style.position = 'absolute';element.style.top    = top + 'px';;element.style.left   = left + 'px';;element.style.width  = width + 'px';;element.style.height = height + 'px';;},relativize: function(element) {element = $(element);if (element.style.position == 'relative') return;Position.prepare();element.style.position = 'relative';var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);element.style.top    = top + 'px';element.style.left   = left + 'px';element.style.height = element._originalHeight;element.style.width  = element._originalWidth;}}if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {Position.cumulativeOffset = function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;if (element.offsetParent == document.body)if (Element.getStyle(element, 'position') == 'absolute') break;element = element.offsetParent;} while (element);return [valueL, valueT];}}</script><!-- <script type="text/javascript" language="javascript" src="/scripts/scriptaculous.js"></script> --><script type="text/javascript" language="javascript">/* ------------- element ext -------------- */  String.prototype.parseColor = function() {  var color = '#';  if(this.slice(0,4) == 'rgb(') {  var cols = this.slice(4,this.length-1).split(',');  var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  } else {  if(this.slice(0,1) == '#') {  if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  if(this.length==7) color = this.toLowerCase();  }  }  return(color.length==7 ? color : (arguments[0] || this));  }Element.collectTextNodes = function(element) {  return $A($(element).childNodes).collect( function(node) {return (node.nodeType==3 ? node.nodeValue : (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));}).flatten().join('');}Element.collectTextNodesIgnoreClass = function(element, className) {  return $A($(element).childNodes).collect( function(node) {return (node.nodeType==3 ? node.nodeValue : ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? Element.collectTextNodes(node) : ''));}).flatten().join('');}Element.setStyle = function(element, style) {element = $(element);for(k in style) element.style[k.camelize()] = style[k];}Element.setContentZoom = function(element, percent) {  Element.setStyle(element, {fontSize: (percent/100) + 'em'});   if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);  }Element.getOpacity = function(element){  var opacity;if (opacity = Element.getStyle(element, 'opacity'))  return parseFloat(opacity);  if (opacity = (Element.getStyle(element, 'filter') || '').match(/alpha\(opacity=(.*)\)/))  if(opacity[1]) return parseFloat(opacity[1]) / 100;  return 1.0;  }Element.setOpacity = function(element, value){  element= $(element);  if (value == 1){Element.setStyle(element, { opacity: (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : null });if(/MSIE/.test(navigator.userAgent))  Element.setStyle(element, {filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')});  } else {  if(value < 0.00001) value = 0;  Element.setStyle(element, {opacity: value});if(/MSIE/.test(navigator.userAgent))  Element.setStyle(element, { filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') +'alpha(opacity='+value*100+')' });  }   }  Element.getInlineOpacity = function(element){  return $(element).style.opacity || '';}  Element.childrenWithClassName = function(element, className) {  return $A($(element).getElementsByTagName('*')).select(function(c) { return Element.hasClassName(c, className) });}Array.prototype.call = function() {var args = arguments;this.each(function(f){ f.apply(this, args) });}/*--------------------------------------------------------------------------*/var Effect = {tagifyText: function(element) {var tagifyStyle = 'position:relative';if(/MSIE/.test(navigator.userAgent)) tagifyStyle += ';zoom:1';element = $(element);$A(element.childNodes).each( function(child) {if(child.nodeType==3) {child.nodeValue.toArray().each( function(character) {element.insertBefore(Builder.node('span',{style: tagifyStyle},character == ' ' ? String.fromCharCode(160) : character), child);});Element.remove(child);}});},multiple: function(element, effect) {var elements;if(((typeof element == 'object') || (typeof element == 'function')) && (element.length))elements = element;elseelements = $(element).childNodes;var options = Object.extend({speed: 0.1,delay: 0.0}, arguments[2] || {});var masterDelay = options.delay;$A(elements).each( function(element, index) {new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));});},PAIRS: {'slide':  ['SlideDown','SlideUp'],'blind':  ['BlindDown','BlindUp'],'appear': ['Appear','Fade']},toggle: function(element, effect) {element = $(element);effect = (effect || 'appear').toLowerCase();var options = Object.extend({queue: { position:'end', scope:(element.id || 'global') }}, arguments[2] || {});Effect[Element.visible(element) ? Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);}};var Effect2 = Effect; // deprecated/* ------------- transitions ------------- */Effect.Transitions = {}Effect.Transitions.linear = function(pos) {return pos;}Effect.Transitions.sinoidal = function(pos) {return (-Math.cos(pos*Math.PI)/2) + 0.5;}Effect.Transitions.reverse  = function(pos) {return 1-pos;}Effect.Transitions.flicker = function(pos) {return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;}Effect.Transitions.wobble = function(pos) {return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;}Effect.Transitions.pulse = function(pos) {return (Math.floor(pos*10) % 2 == 0 ? (pos*10-Math.floor(pos*10)) : 1-(pos*10-Math.floor(pos*10)));}Effect.Transitions.none = function(pos) {return 0;}Effect.Transitions.full = function(pos) {return 1;}/* ------------- core effects ------------- */Effect.ScopedQueue = Class.create();Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {initialize: function() {this.effects  = [];this.interval = null;},_each: function(iterator) {this.effects._each(iterator);},add: function(effect) {var timestamp = new Date().getTime();var position = (typeof effect.options.queue == 'string') ? effect.options.queue : effect.options.queue.position;switch(position) {case 'front':this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {e.startOn  += effect.finishOn;e.finishOn += effect.finishOn;});break;case 'end':timestamp = this.effects.pluck('finishOn').max() || timestamp;break;}effect.startOn  += timestamp;effect.finishOn += timestamp;this.effects.push(effect);if(!this.interval) this.interval = setInterval(this.loop.bind(this), 40);},remove: function(effect) {this.effects = this.effects.reject(function(e) { return e==effect });if(this.effects.length == 0) {clearInterval(this.interval);this.interval = null;}},loop: function() {var timePos = new Date().getTime();this.effects.invoke('loop', timePos);}});Effect.Queues = {instances: $H(),get: function(queueName) {if(typeof queueName != 'string') return queueName;if(!this.instances[queueName])this.instances[queueName] = new Effect.ScopedQueue();return this.instances[queueName];}}Effect.Queue = Effect.Queues.get('global');Effect.DefaultOptions = {transition: Effect.Transitions.sinoidal,duration:   1.0,   // secondsfps:        25.0,  // max. 25fps due to Effect.Queue implementationsync:       false, // true for combiningfrom:       0.0,to:         1.0,delay:      0.0,queue:      'parallel'}Effect.Base = function() {};Effect.Base.prototype = {position: null,start: function(options) {this.options      = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});this.currentFrame = 0;this.state        = 'idle';this.startOn      = this.options.delay*1000;this.finishOn     = this.startOn + (this.options.duration*1000);this.event('beforeStart');if(!this.options.sync)Effect.Queues.get(typeof this.options.queue == 'string' ? 'global' : this.options.queue.scope).add(this);},loop: function(timePos) {if(timePos >= this.startOn) {if(timePos >= this.finishOn) {this.render(1.0);this.cancel();this.event('beforeFinish');if(this.finish) this.finish(); this.event('afterFinish');return;  }var pos   = (timePos - this.startOn) / (this.finishOn - this.startOn);var frame = Math.round(pos * this.options.fps * this.options.duration);if(frame > this.currentFrame) {this.render(pos);this.currentFrame = frame;}}},render: function(pos) {if(this.state == 'idle') {this.state = 'running';this.event('beforeSetup');if(this.setup) this.setup();this.event('afterSetup');}if(this.state == 'running') {if(this.options.transition) pos = this.options.transition(pos);pos *= (this.options.to-this.options.from);pos += this.options.from;this.position = pos;this.event('beforeUpdate');if(this.update) this.update(pos);this.event('afterUpdate');}},cancel: function() {if(!this.options.sync)Effect.Queues.get(typeof this.options.queue == 'string' ? 'global' : this.options.queue.scope).remove(this);this.state = 'finished';},event: function(eventName) {if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);if(this.options[eventName]) this.options[eventName](this);},inspect: function() {return '#<Effect:' + $H(this).inspect() + ',options:' + $H(this.options).inspect() + '>';}}Effect.Parallel = Class.create();Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {initialize: function(effects) {this.effects = effects || [];this.start(arguments[1]);},update: function(position) {this.effects.invoke('render', position);},finish: function(position) {this.effects.each( function(effect) {effect.render(1.0);effect.cancel();effect.event('beforeFinish');if(effect.finish) effect.finish(position);effect.event('afterFinish');});}});Effect.Opacity = Class.create();Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);if(/MSIE/.test(navigator.userAgent) && (!this.element.hasLayout))Element.setStyle(this.element, {zoom: 1});var options = Object.extend({from: Element.getOpacity(this.element) || 0.0,to:   1.0}, arguments[1] || {});this.start(options);},update: function(position) {Element.setOpacity(this.element, position);}});Effect.Move = Class.create();Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);var options = Object.extend({x:    0,y:    0,mode: 'relative'}, arguments[1] || {});this.start(options);},setup: function() {Element.makePositioned(this.element);this.originalLeft = parseFloat(Element.getStyle(this.element,'left') || '0');this.originalTop  = parseFloat(Element.getStyle(this.element,'top')  || '0');if(this.options.mode == 'absolute') {this.options.x = this.options.x - this.originalLeft;this.options.y = this.options.y - this.originalTop;}},update: function(position) {Element.setStyle(this.element, {left: this.options.x  * position + this.originalLeft + 'px',top:  this.options.y  * position + this.originalTop  + 'px'});}});Effect.MoveBy = function(element, toTop, toLeft) {return new Effect.Move(element, Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));};Effect.Scale = Class.create();Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {initialize: function(element, percent) {this.element = $(element)var options = Object.extend({scaleX: true,scaleY: true,scaleContent: true,scaleFromCenter: false,scaleMode: 'box',        // 'box' or 'contents' or {} with provided valuesscaleFrom: 100.0,scaleTo:   percent}, arguments[2] || {});this.start(options);},setup: function() {this.restoreAfterFinish = this.options.restoreAfterFinish || false;this.elementPositioning = Element.getStyle(this.element,'position');this.originalStyle = {};['top','left','width','height','fontSize'].each( function(k) {this.originalStyle[k] = this.element.style[k];}.bind(this));this.originalTop  = this.element.offsetTop;this.originalLeft = this.element.offsetLeft;var fontSize = Element.getStyle(this.element,'font-size') || '100%';['em','px','%'].each( function(fontSizeType) {if(fontSize.indexOf(fontSizeType)>0) {this.fontSize     = parseFloat(fontSize);this.fontSizeType = fontSizeType;}}.bind(this));this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;this.dims = null;if(this.options.scaleMode=='box')this.dims = [this.element.offsetHeight, this.element.offsetWidth];if(/^content/.test(this.options.scaleMode))this.dims = [this.element.scrollHeight, this.element.scrollWidth];if(!this.dims)this.dims = [this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth];},update: function(position) {var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);if(this.options.scaleContent && this.fontSize)Element.setStyle(this.element, {fontSize: this.fontSize * currentScale + this.fontSizeType });this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);},finish: function(position) {if (this.restoreAfterFinish) Element.setStyle(this.element, this.originalStyle);},setDimensions: function(height, width) {var d = {};if(this.options.scaleX) d.width = width + 'px';if(this.options.scaleY) d.height = height + 'px';if(this.options.scaleFromCenter) {var topd  = (height - this.dims[0])/2;var leftd = (width  - this.dims[1])/2;if(this.elementPositioning == 'absolute') {if(this.options.scaleY) d.top = this.originalTop-topd + 'px';if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';} else {if(this.options.scaleY) d.top = -topd + 'px';if(this.options.scaleX) d.left = -leftd + 'px';}}Element.setStyle(this.element, d);}});Effect.Highlight = Class.create();Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});this.start(options);},setup: function() {if(Element.getStyle(this.element, 'display')=='none') { this.cancel(); return; }this.oldStyle = {backgroundImage: Element.getStyle(this.element, 'background-image') };Element.setStyle(this.element, {backgroundImage: 'none'});if(!this.options.endcolor)this.options.endcolor = Element.getStyle(this.element, 'background-color').parseColor('#ffffff');if(!this.options.restorecolor)this.options.restorecolor = Element.getStyle(this.element, 'background-color');this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));},update: function(position) {Element.setStyle(this.element,{backgroundColor: $R(0,2).inject('#',function(m,v,i){return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });},finish: function() {Element.setStyle(this.element, Object.extend(this.oldStyle, {backgroundColor: this.options.restorecolor}));}});Effect.ScrollTo = Class.create();Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);this.start(arguments[1] || {});},setup: function() {Position.prepare();var offsets = Position.cumulativeOffset(this.element);if(this.options.offset) offsets[1] += this.options.offset;var max = window.innerHeight ? window.height - window.innerHeight :document.body.scrollHeight - (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight);this.scrollStart = Position.deltaY;this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;},update: function(position) {Position.prepare();window.scrollTo(Position.deltaX, this.scrollStart + (position*this.delta));}});/* ------------- combination effects ------------- */Effect.Fade = function(element) {var oldOpacity = Element.getInlineOpacity(element);var options = Object.extend({from: Element.getOpacity(element) || 1.0,to:   0.0,afterFinishInternal: function(effect) { with(Element) { if(effect.options.to!=0) return;hide(effect.element);setStyle(effect.element, {opacity: oldOpacity}); }}}, arguments[1] || {});return new Effect.Opacity(element,options);}Effect.Appear = function(element) {var options = Object.extend({from: (Element.getStyle(element, 'display') == 'none' ? 0.0 : Element.getOpacity(element) || 0.0),to:   1.0,beforeSetup: function(effect) { with(Element) {setOpacity(effect.element, effect.options.from);show(effect.element); }}}, arguments[1] || {});return new Effect.Opacity(element,options);}Effect.Puff = function(element) {element = $(element);var oldStyle = { opacity: Element.getInlineOpacity(element), position: Element.getStyle(element, 'position') };return new Effect.Parallel([ new Effect.Scale(element, 200, { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], Object.extend({ duration: 1.0, beforeSetupInternal: function(effect) { with(Element) {setStyle(effect.effects[0].element, {position: 'absolute'}); }},afterFinishInternal: function(effect) { with(Element) {hide(effect.effects[0].element);setStyle(effect.effects[0].element, oldStyle); }}}, arguments[1] || {}));}Effect.BlindUp = function(element) {element = $(element);Element.makeClipping(element);return new Effect.Scale(element, 0, Object.extend({ scaleContent: false, scaleX: false, restoreAfterFinish: true,afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping].call(effect.element); }} }, arguments[1] || {}));}Effect.BlindDown = function(element) {element = $(element);var oldHeight = Element.getStyle(element, 'height');var elementDimensions = Element.getDimensions(element);return new Effect.Scale(element, 100, Object.extend({ scaleContent: false, scaleX: false,scaleFrom: 0,scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},restoreAfterFinish: true,afterSetup: function(effect) { with(Element) {makeClipping(effect.element);setStyle(effect.element, {height: '0px'});show(effect.element); }},  afterFinishInternal: function(effect) { with(Element) {undoClipping(effect.element);setStyle(effect.element, {height: oldHeight});}}}, arguments[1] || {}));}Effect.SwitchOff = function(element) {element = $(element);var oldOpacity = Element.getInlineOpacity(element);return new Effect.Appear(element, { duration: 0.4,from: 0,transition: Effect.Transitions.flicker,afterFinishInternal: function(effect) {new Effect.Scale(effect.element, 1, { duration: 0.3, scaleFromCenter: true,scaleX: false, scaleContent: false, restoreAfterFinish: true,beforeSetup: function(effect) { with(Element) {[makePositioned,makeClipping].call(effect.element);}},afterFinishInternal: function(effect) { with(Element) {[hide,undoClipping,undoPositioned].call(effect.element);setStyle(effect.element, {opacity: oldOpacity});}}})}});}Effect.DropOut = function(element) {element = $(element);var oldStyle = {top: Element.getStyle(element, 'top'),left: Element.getStyle(element, 'left'),opacity: Element.getInlineOpacity(element) };return new Effect.Parallel([ new Effect.Move(element, {x: 0, y: 100, sync: true }), new Effect.Opacity(element, { sync: true, to: 0.0 }) ],Object.extend({ duration: 0.5,beforeSetup: function(effect) { with(Element) {makePositioned(effect.effects[0].element); }},afterFinishInternal: function(effect) { with(Element) {[hide, undoPositioned].call(effect.effects[0].element);setStyle(effect.effects[0].element, oldStyle); }} }, arguments[1] || {}));}Effect.Shake = function(element) {element = $(element);var oldStyle = {top: Element.getStyle(element, 'top'),left: Element.getStyle(element, 'left') };return new Effect.Move(element, { x:  20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { with(Element) {undoPositioned(effect.element);setStyle(effect.element, oldStyle);}}}) }}) }}) }}) }}) }});}Effect.SlideDown = function(element) {element = $(element);Element.cleanWhitespace(element);var oldInnerBottom = Element.getStyle(element.firstChild, 'bottom');var elementDimensions = Element.getDimensions(element);return new Effect.Scale(element, 100, Object.extend({ scaleContent: false, scaleX: false, scaleFrom: 0,scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},restoreAfterFinish: true,afterSetup: function(effect) { with(Element) {makePositioned(effect.element);makePositioned(effect.element.firstChild);if(window.opera) setStyle(effect.element, {top: ''});makeClipping(effect.element);setStyle(effect.element, {height: '0px'});show(element); }},afterUpdateInternal: function(effect) { with(Element) {setStyle(effect.element.firstChild, {bottom:(effect.dims[0] - effect.element.clientHeight) + 'px' }); }},afterFinishInternal: function(effect) { with(Element) {undoClipping(effect.element); undoPositioned(effect.element.firstChild);undoPositioned(effect.element);setStyle(effect.element.firstChild, {bottom: oldInnerBottom}); }}}, arguments[1] || {}));}Effect.SlideUp = function(element) {element = $(element);Element.cleanWhitespace(element);var oldInnerBottom = Element.getStyle(element.firstChild, 'bottom');return new Effect.Scale(element, 0, Object.extend({ scaleContent: false, scaleX: false, scaleMode: 'box',scaleFrom: 100,restoreAfterFinish: true,beforeStartInternal: function(effect) { with(Element) {makePositioned(effect.element);makePositioned(effect.element.firstChild);if(window.opera) setStyle(effect.element, {top: ''});makeClipping(effect.element);show(element); }},  afterUpdateInternal: function(effect) { with(Element) {setStyle(effect.element.firstChild, {bottom:(effect.dims[0] - effect.element.clientHeight) + 'px' }); }},afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping].call(effect.element); undoPositioned(effect.element.firstChild);undoPositioned(effect.element);setStyle(effect.element.firstChild, {bottom: oldInnerBottom}); }}}, arguments[1] || {}));}Effect.Squish = function(element) {return new Effect.Scale(element, window.opera ? 1 : 0, { restoreAfterFinish: true,beforeSetup: function(effect) { with(Element) {makeClipping(effect.element); }},  afterFinishInternal: function(effect) { with(Element) {hide(effect.element); undoClipping(effect.element); }}});}Effect.Grow = function(element) {element = $(element);var options = Object.extend({direction: 'center',moveTransistion: Effect.Transitions.sinoidal,scaleTransition: Effect.Transitions.sinoidal,opacityTransition: Effect.Transitions.full}, arguments[1] || {});var oldStyle = {top: element.style.top,left: element.style.left,height: element.style.height,width: element.style.width,opacity: Element.getInlineOpacity(element) };var dims = Element.getDimensions(element);    var initialMoveX, initialMoveY;var moveX, moveY;switch (options.direction) {case 'top-left':initialMoveX = initialMoveY = moveX = moveY = 0; break;case 'top-right':initialMoveX = dims.width;initialMoveY = moveY = 0;moveX = -dims.width;break;case 'bottom-left':initialMoveX = moveX = 0;initialMoveY = dims.height;moveY = -dims.height;break;case 'bottom-right':initialMoveX = dims.width;initialMoveY = dims.height;moveX = -dims.width;moveY = -dims.height;break;case 'center':initialMoveX = dims.width / 2;initialMoveY = dims.height / 2;moveX = -dims.width / 2;moveY = -dims.height / 2;break;}return new Effect.Move(element, {x: initialMoveX,y: initialMoveY,duration: 0.01, beforeSetup: function(effect) { with(Element) {hide(effect.element);makeClipping(effect.element);makePositioned(effect.element);}},afterFinishInternal: function(effect) {new Effect.Parallel([ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),new Effect.Scale(effect.element, 100, {scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})], Object.extend({beforeSetup: function(effect) { with(Element) {setStyle(effect.effects[0].element, {height: '0px'});show(effect.effects[0].element); }},afterFinishInternal: function(effect) { with(Element) {[undoClipping, undoPositioned].call(effect.effects[0].element); setStyle(effect.effects[0].element, oldStyle); }}}, options))}});}Effect.Shrink = function(element) {element = $(element);var options = Object.extend({direction: 'center',moveTransistion: Effect.Transitions.sinoidal,scaleTransition: Effect.Transitions.sinoidal,opacityTransition: Effect.Transitions.none}, arguments[1] || {});var oldStyle = {top: element.style.top,left: element.style.left,height: element.style.height,width: element.style.width,opacity: Element.getInlineOpacity(element) };var dims = Element.getDimensions(element);var moveX, moveY;switch (options.direction) {case 'top-left':moveX = moveY = 0;break;case 'top-right':moveX = dims.width;moveY = 0;break;case 'bottom-left':moveX = 0;moveY = dims.height;break;case 'bottom-right':moveX = dims.width;moveY = dims.height;break;case 'center':  moveX = dims.width / 2;moveY = dims.height / 2;break;}return new Effect.Parallel([ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })], Object.extend({            beforeStartInternal: function(effect) { with(Element) {[makePositioned, makeClipping].call(effect.effects[0].element) }},afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping, undoPositioned].call(effect.effects[0].element);setStyle(effect.effects[0].element, oldStyle); }}}, options));}Effect.Pulsate = function(element) {element = $(element);var options    = arguments[1] || {};var oldOpacity = Element.getInlineOpacity(element);var transition = options.transition || Effect.Transitions.sinoidal;var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos)) };reverser.bind(transition);return new Effect.Opacity(element, Object.extend(Object.extend({  duration: 3.0, from: 0,afterFinishInternal: function(effect) { Element.setStyle(effect.element, {opacity: oldOpacity}); }}, options), {transition: reverser}));}Effect.Fold = function(element) {element = $(element);var oldStyle = {top: element.style.top,left: element.style.left,width: element.style.width,height: element.style.height };Element.makeClipping(element);return new Effect.Scale(element, 5, Object.extend({   scaleContent: false,scaleX: false,afterFinishInternal: function(effect) {new Effect.Scale(element, 1, { scaleContent: false, scaleY: false,afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping].call(effect.element); setStyle(effect.element, oldStyle);}} });}}, arguments[1] || {}));}</script><script type="text/javascript" language="javascript">addEvent(window, "load", sortables_init);var SORT_COLUMN_INDEX;function sortables_init() {if (!document.getElementsByTagName) return;tbls = document.getElementsByTagName("table");for (ti=0;ti<tbls.length;ti++) {thisTbl = tbls[ti];if (Element.hasClassName(thisTbl,'sortable') && (thisTbl.id)) {ts_makeSortable(thisTbl);}}}function ts_makeSortable(table) {if (table.rows && table.rows.length > 0) {var firstRow = table.rows[0];}if (!firstRow) return;for (var i=0;i<firstRow.cells.length;i++) {var cell = firstRow.cells[i];var txt = ts_getInnerText(cell);if(txt!="" && txt!=" " && !Element.hasClassName(cell,"nosort")){cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this);return false;">'+txt+'<span class="sortarrow"></span></a>';}}}function ts_getInnerText(el) {if (typeof el == "string") return el;if (typeof el == "undefined") { return el };if (el.innerText) return el.innerText;//Not needed but it is fastervar str = "";var cs = el.childNodes;var l = cs.length;for (var i = 0; i < l; i++) {switch (cs[i].nodeType) {case 1: //ELEMENT_NODEstr += ts_getInnerText(cs[i]);break;case 3://TEXT_NODEstr += cs[i].nodeValue;break;}}return str;}function ts_resortTable(lnk) {var span;for (var ci=0;ci<lnk.childNodes.length;ci++) {if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];}var spantext = ts_getInnerText(span);var td = lnk.parentNode;var column = td.cellIndex;var table = getParent(td,'TABLE');if (table.rows.length <= 1) return;var itm = ts_getInnerText(table.rows[1].cells[column]);sortfn = ts_sort_caseinsensitive;if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;if (itm.match(/^[$]/)) sortfn = ts_sort_currency;if (itm.match(/^[\d\.]+$/)) sortfn = ts_sort_numeric;SORT_COLUMN_INDEX = column;var firstRow = new Array();var newRows = new Array();for (i=0;i<table.rows[0].length;i++) { firstRow[i] = table.rows[0][i]; }for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows[j]; }newRows.sort(sortfn);if (span.getAttribute("sortdir") == 'down') {ARROW = '<img src="/db/images/icon_down.gif"/>';newRows.reverse();span.setAttribute('sortdir','up');} else {ARROW = '<img src="/db/images/icon_up.gif"/>';span.setAttribute('sortdir','down');}for (i=0;i<newRows.length;i++) { if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) table.tBodies[0].appendChild(newRows[i]);}for (i=0;i<newRows.length;i++) { if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows[i]);}var allspans = document.getElementsByTagName("span");for (var ci=0;ci<allspans.length;ci++) {if (allspans[ci].className == 'sortarrow') {if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?allspans[ci].innerHTML = '&nbsp;&nbsp;&nbsp;';}}}span.innerHTML = ARROW;ts_stripeTable(table);}function getParent(el, pTagName) {if (el == null) return null;else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())// Gecko bug, supposed to be uppercasereturn el;elsereturn getParent(el.parentNode, pTagName);}function ts_sort_date(a,b) {aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);if (aa.length == 10) {dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);} else {yr = aa.substr(6,2);if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }dt1 = yr+aa.substr(3,2)+aa.substr(0,2);}if (bb.length == 10) {dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);} else {yr = bb.substr(6,2);if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }dt2 = yr+bb.substr(3,2)+bb.substr(0,2);}if (dt1==dt2) return 0;if (dt1<dt2) return -1;return 1;}function ts_sort_currency(a,b) { aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');return parseFloat(aa) - parseFloat(bb);}function ts_sort_numeric(a,b) { aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));if (isNaN(aa)) aa = 0;bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX])); if (isNaN(bb)) bb = 0;return aa-bb;}function ts_sort_caseinsensitive(a,b) {aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();if (aa==bb) return 0;if (aa<bb) return -1;return 1;}function ts_sort_default(a,b) {aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);if (aa==bb) return 0;if (aa<bb) return -1;return 1;}function ts_stripeTable(tbl) {var table = $(tbl);var tbody;if(tbody = table.getElementsByTagName("tbody")[0]) {table = tbody;}for(i=0;i<table.rows.length;i++) {if(i%2) {newClass = "even";oldClass = "odd";} else {newClass = "odd";oldClass = "even";}Element.removeClassName(table.rows[i],oldClass);Element.addClassName(table.rows[i],newClass);}}function addEvent(elm, evType, fn, useCapture){if (elm.addEventListener){elm.addEventListener(evType, fn, useCapture);return true;} else if (elm.attachEvent){var r = elm.attachEvent("on"+evType, fn);return r;} else {alert("Handler could not be removed");}} </script><script type="text/javascript" language="javascript">function createStyleRule(selector, declaration) {if (!document.getElementsByTagName ||!(document.createElement || document.createElementNS)) return;var agt = navigator.userAgent.toLowerCase();var is_ie = ((agt.indexOf("msie") != -1) &&  (agt.indexOf("opera") == -1));var is_iewin = (is_ie &&  (agt.indexOf("win") != -1));var is_iemac = (is_ie &&  (agt.indexOf("mac") != -1));if (is_iemac) return; // script doesn't work properly in IE/Macvar head = document.getElementsByTagName("head")[0]; var style = (typeof document.createElementNS != "undefined") ?document.createElementNS("http://www.w3.org/1999/xhtml", "style") :document.createElement("style");if (!is_iewin) {var styleRule = document.createTextNode(selector + " {" + declaration + "}");style.appendChild(styleRule); // bugs in IE/Win}style.setAttribute("type", "text/css");style.setAttribute("media", "screen"); head.appendChild(style);if (is_iewin &&  document.styleSheets &&  document.styleSheets.length > 0) {var lastStyle = document.styleSheets[document.styleSheets.length - 1];if (typeof lastStyle.addRule == "object") {lastStyle.addRule(selector, declaration);}}}function zoomThumbnails(value) {if(!document.all) {var newValue = Math.round(value);var cssRule = "font-size: "+newValue+"px";createStyleRule("a.thumbnail pre",cssRule);}}function zoomThumbnailsUpdate(value) {var newValue = Math.round(value);var cssRule = "font-size: "+newValue+"px";createStyleRule("a.thumbnail pre",cssRule);}var myrules = {'#printqueue tr' : function(element){element.onmouseover = function(){Element.addClassName(element,"hover");},element.onmouseout = function(){Element.removeClassName(element,"hover");}},'a.deletejob' : function(element){if(document.all) {element.onclick = function(e) {return confirm("Are you sure you want to delete this job?");}}},'input.date' : function(dateField){if(!$(dateField.id+"trigger")) {if(dateField.id=="") {dateField.id = dateField.name;}Calendar.setup({inputField : dateField.id, ifFormat : "%m/%d/%y",showsTime : true,button : dateField.id, //*step : 1,weekNumbers: false,/* range: [2004,2005,2006], */showsTime: false,onUpdate: function(e) {var row = $(dateField.id).parentNode;while(row.tagName!="TR") {row = row.parentNode;}Element.removeClassName(row,"error");}});}}};function selectAll() {form = document.forms['printqueueform'];if (form.elements['entries[]'].length) {  for(var i = 0; i < form.elements['entries[]'].length; i++) {    form.elements['entries[]'][i].checked = 1;  }} else {  form.elements['entries[]'].checked = 1;}}function deselectAll() {form = document.forms['printqueueform'];if (form.elements['entries[]'].length) {  for(var i = 0; i < form.elements['entries[]'].length; i++) {    form.elements['entries[]'][i].checked = 0;  }} else {  form.elements['entries[]'].checked = 0;}}function showAdvSearch() {Effect.Fade('filter', {duration: 1.0});setTimeout("Effect.Appear('advanced_search', {duration: 1.0})", 940);$('search_link').innerHTML = 'Hide Advanced Search';$('search_link').onclick = hideAdvSearch;}function hideAdvSearch() {Effect.Fade('advanced_search', {duration: 1.0});setTimeout("Effect.Appear('filter', {duration: 1.0})", 940);$('search_link').innerHTML = 'Advanced Search';$('search_link').onclick = showAdvSearch;}Behaviour.register(myrules);</script></head><body class=""><div id="container"><!-- <div id="header"><a href="/" id="logo"><img src="/db/images/logo_bravoprint.gif" /></a><ul id="navbar"><li class="active"><a href="/dbc/SBBP.SB.LISTPEQS">Print Queue</a></li></ul></div>--><div id="maincontent"><div id="content"><!-- <h1>Print Queue</h1><div id="alerts"></div>--><div style="margin-left:12px; margin-bottom:30px;"> <div class="printDialog" id="printDialogSelected" style="display:none;left:92px;top:27px;"><div>Queue <input type="text" value="" style="width:40px;" maxlength="4" name="overridequeue"/><span class="button"><button type="submit" onclick="this.form.submit(); return false;">Print</button></span> <span class="button"><button type="button" onclick="Effect.SlideUp('printDialogSelected',{duration:0.25}); return false;">Cancel</button></span></div></div></div><form action="/dbc/SBBP.SB.LISTPEQS" method="post" id="printqueueform"><input type="hidden" value="" name="action" id="action"/><input type="hidden" value="" name="overridequeue" id="overridequeue"/><input type="hidden" value="" name="queue" id="queue"/><input type="hidden" value="" name="port" id="port"/><input type="hidden" value="" name="owner" id="owner"/><input type="hidden" value="" name="searchstring" id="searchstring"/><input type="hidden" value="" name="begindate" id="begindate"/><input type="hidden" value="" name="enddate" id="enddate"/><input type="hidden" value="" name="search_type" id="search_type"/><div style="float: left;margin: 0 0 10px 12px;"><img src="/db/images/graphic_withselected_up.gif"/> <a href="#" title="Select All" onclick="selectAll();return false;">Select All</a> |<a href="#" title="Deselect All" onclick="deselectAll();return false;">Deselect All</a> | With Selected: <span id="queueOverride">Print to Queue <input type="text" value="" name="queuet" id="queuet" style="width:40px;vertical-align:bottom;"/></span><a href="#" title="Print Selected" onclick="$('overridequeue').value=$('queuet').value;$('action').value='print';$('printqueueform').submit(); return false;"><img src="/db/images/button_print.gif"/></a><a href="#" title="Delete Selected" onclick="if(confirm('Are you sure you want to delete the selected jobs?')) { $('action').value='delete';$('printqueueform').submit(); return false;} else { return false; }"><img src="/db/images/button_delete.gif"/></a></div><table class="listing sortable" id="printqueue"><thead><tr><th style="width:20px;"></th><th>Job</th><th>Queue</th><th>User</th><th>Port</th><th>Size (k)</th><th>Datetime</th><th>Status</th><th style="width:120px;"></th></tr></thead><tbody>[QUEUE]</tbody></table><div style="margin: 0 0 0 12px;"><img src="/db/images/graphic_withselected.gif"/> <a href="#" title="Select All" onclick="selectAll();return false;">Select All</a> |<a href="#" title="Deselect All" onclick="deselectAll();return false;">Deselect All</a> | With Selected: <span id="queueOverride">Print to Queue <input type="text" value="" name="queueb" id="queueb" style="width:40px;vertical-align:bottom;"/></span><a href="#" title="Print Selected" onclick="$('overridequeue').value=$('queueb').value;$('action').value='print';$('printqueueform').submit(); return false;"><img src="/db/images/button_print.gif"/></a><a href="#" title="Delete Selected" onclick="if(confirm('Are you sure you want to delete the selected jobs?')) { $('action').value='delete';$('printqueueform').submit(); return false;} else { return false; }"><img src="/db/images/button_delete.gif"/></a><br/> </div></form></div></div></div><div id="footer"></div></body></html>                                                                                                                                                                                                                                                                                                    ./mvappsvr/core/d3/APP.INSTALLER                                                                    0000644 0000000 0000000 00000020616 13674161102 014732  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   *
* Copyright (C) 2009 Sierra Bravo Corporation, All Rights Reserved
*
* Written by: Luke Bucklin, Sierra Bravo Corporation
* Date: 07/15/2009
* Description: Application installer
*
* Modified By: Dave Bucklin, Nerdery Interactive Labs
* Date: 02/04/2011
* Description: Add overwrite flag, clashes handling specific to MVDashboard
*
*
INCLUDE DM,BP,UNIX.H FCNTL.H
INCLUDE DM,BP,UNIX.H MODE.H
*
CHAR BUFFER[10000]
*
INSTALL.LOG.ON = 0
INSTALL.LOG.ID = "INSTALL*":DATE():"*":TIME()
INSTALL.LOG = ""
PROCESS.STATUS = 0
OVR.FLAG = 0
*
PROMPT ""
PRINT "File path: ":
INPUT PACKAGE.FILE
IF PACKAGE.FILE = "VERSION" THEN
  PRINT
  PRINT "Installer Version"
  PRINT "1.0"
  STOP
END
HANDLE = %OPEN(PACKAGE.FILE,O$RDONLY+O$BINARY)
IF NOT(HANDLE) THEN
  PRINT "Unable to open file." ; STOP
END
*
PACKET = ""
LOOP
  L = %READ(HANDLE,BUFFER,10000)
WHILE L > 0 DO
  PACKET := BUFFER[1,L]
REPEAT
IF PACKET = "" THEN
  PRINT "No package."
  STOP
END
INSTALL.ID = TIMEDATE()
KEEP.SOURCE = "1"
*
PRINT
PRINT "Installing..."
*
OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE 
  CMD = "CREATE-FILE MV.PACKED.FILE 1 31"
  GOSUB EXEC.CMD
  OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE
    ERRFILE = "MV.PACKED.FILE"
    GOSUB OPEN.ERR
    STOP
  END
END
WRITE PACKET ON F.PACKED.FILE, "PACKAGE"

OPEN '','MD' TO F.MD ELSE
  ERRFILE = "MD"
  GOSUB OPEN.ERR
  STOP
END
OPEN "MV.INSTALL" TO F.INSTALL ELSE
  CMD = "CREATE-FILE MV.INSTALL 1 11"
  GOSUB EXEC.CMD
  OPEN "MV.INSTALL" TO F.INSTALL ELSE
    ERRFILE = "MV.INSTALL"
    GOSUB OPEN.ERR
    STOP
  END
END
OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE
  CMD = "CREATE-FILE MV.INSTALL.CF 1 11"
  GOSUB EXEC.CMD
  OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE
    ERRFILE = "MV.INSTALL.CF"
    GOSUB OPEN.ERR
    STOP
  END
END
OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE
  CMD = "CREATE-FILE MVAPPS.INSTALLED 3 31"
  GOSUB EXEC.CMD
  OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE
    ERRFILE = "MVAPPS.INSTALLED"
    GOSUB OPEN.ERR
    STOP
  END
END
OPEN "DICT","MVDB.CLASHES" TO FD.MVDB.CLASHES ELSE
  CMD = "CREATE-FILE DICT MVDB.CLASHES 3"
  GOSUB EXEC.CMD
END
INSTALL.LOG.ON = 1
*
CLEARFILE F.INSTALL
DELETE F.INSTALL.CF, "MVAPPS-PRE-SCRIPT" ;* Get rid of this just in case one is left over
DELETE F.INSTALL.CF, "MVAPPS-POST-SCRIPT"
DELETE F.INSTALL.CF, "PACKAGE.INFO"
TARGET = F.INSTALL
TARGET.NAME = "MV.INSTALL"
GOSUB UNPACK
* All individual file packages are now in INSTALL
* Unpack the MD scripts
READ PACKET FROM F.INSTALL, "MV.INSTALL.CF" THEN
  TARGET = F.INSTALL.CF
  TARGET.NAME = "MV.INSTALL.CF"
  GOSUB UNPACK
  DELETE F.INSTALL, "MV.INSTALL.CF"
END
*
* Execute script that are required prior to compilation
*
READ CMD FROM F.INSTALL.CF, "MVAPPS-PRE-SCRIPT" THEN
  LOG.LINE = TIMEDATE():": Processing PRE-INSTALL commands..."
  INSTALL.LOG<-1> = LOG.LINE
  * Execute commands that need to be run before the install process begins
  GOSUB EXEC.CMD
  LOG.LINE = TIMEDATE():": Completed PRE-INSTALL commands."
  INSTALL.LOG<-1> = LOG.LINE
END
READ PACKAGE.INFO FROM F.INSTALL.CF, "PACKAGE.INFO" ELSE PACKAGE.INFO = ""
PACKAGE.ID = PACKAGE.INFO<6>
PACKAGE.INFO<4> = DATE()
PACKAGE.INFO<5> = TIME()
*
SELECT F.INSTALL
LOOP
  READNEXT PKG.ID ELSE EXIT
  IF PKG.ID # "" THEN
    READ PACKET FROM F.INSTALL, PKG.ID THEN
      TARGET.FILE = FIELD(PKG.ID," ",1)
      DICT.MOD = FIELD( PKG.ID," ",2)
      DATA.MOD = FIELD( PKG.ID," ",3)
      DICT = ""
      IF FIELD( PKG.ID,'_',1 ) = "DICT" THEN
        TARGET.FILE = FIELD( PKG.ID, '_', 2 )
        DICT = "DICT"
      END
      OPEN DICT,TARGET.FILE TO F.TARGET ELSE
        IF NOT(INDEX(TARGET.FILE,':',1)) THEN
          IF DICT.MOD = "" THEN DICT.MOD = 3
          IF DATA.MOD = "" THEN DATA.MOD = 31
          CMD = "CREATE-FILE ":TARGET.FILE:" ":DICT.MOD:" ":DATA.MOD
          GOSUB EXEC.CMD
        END
        OPEN DICT,TARGET.FILE TO F.TARGET ELSE
          PRINT "Unable to create file ":TARGET.FILE
          GOSUB CLEANUP
          STOP
        END
      END
      TARGET = F.TARGET
      TARGET.NAME = TRIM(DICT:" ":TARGET.FILE)
      GOSUB UNPACK
    END
  END
REPEAT
*
* Execute script required post compilation
*
READ CMD FROM F.INSTALL.CF, "MVAPPS-POST-SCRIPT" THEN
  LOG.LINE = TIMEDATE():": Processing POST-INSTALL commands..."
  INSTALL.LOG<-1> = LOG.LINE
  * Use compile options if they are present.
  OPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL THEN
    READ COMPILE.SETUP FROM F.MVDB.CONTROL, 'COMPILE.SETUP' THEN
      COMPILE.VERB = FIELD(COMPILE.SETUP<1>,' ',1)
      IF COMPILE.VERB # '' THEN
        OPTS = FIELD(COMPILE.SETUP<1>,'(',2)
        IF OPTS # '' THEN OPTS = "(":OPTS
        CMD.CNT = DCOUNT( CMD, @AM )
        FOR CMD.XX = 1 TO CMD.CNT
          IF FIELD(CMD<CMD.XX>,' ',1) = 'BASIC' OR FIELD(CMD<CMD.XX>,' ',1) = 'COMPILE' THEN
            *make sure we use the right verb and options from the compile.setup
            CMD<CMD.XX> = COMPILE.VERB:' ':CMD<CMD.XX>[INDEX(CMD<CMD.XX>,' ',1)+1,999]:' ':OPTS
          END
        NEXT CMD.XX
      END
    END
  END
  * Execute commands that need to be run at the end of the install process
  GOSUB EXEC.CMD
  LOG.LINE = TIMEDATE():": Completed POST-INSTALL commands."
  INSTALL.LOG<-1> = LOG.LINE
END
*
**IF NOT(KEEP.SOURCE) THEN
**  FOR X = 1 TO DCOUNT( SOURCE.FILES, @AM )
**    CMD = "CLEAR-FILE DATA ":SOURCE.FILES<X>
**    GOSUB EXEC.CMD
**  NEXT X
**END
READ INSTALL.LIST FROM F.INSTALL.CF, "LAST.INSTALL" ELSE INSTALL.LIST = ""
INSTALL.LIST = INSERT( INSTALL.LIST, 1, 0, 0, INSTALL.ID )
WRITE INSTALL.LIST ON F.INSTALL.CF, "LAST.INSTALL"
GOSUB CLEANUP
INSTALL.LOG<-1> = TIMEDATE():": Install complete."
WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID
WRITE PACKAGE.INFO ON F.MVAPPS.INSTALLED, PACKAGE.ID
PROCESS.STATUS = 1
GOSUB SEND.DATA
STOP
*********
UNPACK: *
*********
PRINT "Unpacking ":TARGET.NAME:"... ":
*
BYTES = 0
CNT = 0
LOOP
  PLENGTH = OCONV( PACKET[1,6], 'MCXD' )
  REC = PACKET[7,PLENGTH]
  PACKET = PACKET[PLENGTH+7,9999999]
  ID = REC<1>
  REC = DELETE( REC, 1, 0, 0 )
  TYP = REC[1,2]
  OVR.FLAG = REC[3,1]
  REC = REC[4,9999999]
  IF TYP = "0x" THEN
    REC = OCONV( REC, 'MY' )
  END ELSE IF TYP # "0c" THEN
    REC = TYP:REC
  END
  *
  CNT += 1
  BYTES += LEN(REC)
  IF OVR.FLAG THEN
    IF DICT = "" THEN
      *If we're not installing DICT items, compare for CLASHES
      READ CLASH FROM TARGET, ID THEN
        BEGIN CASE
          *Preserve dashboard user passwords
          CASE TARGET.FILE = "MVDB.USERS"
            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>
          *Preserve dashboard access profile
          CASE TARGET.FILE = "MVDB.DEFS"
            IF CLASH<5> # REC<5> THEN REC<5> = CLASH<5>
          *Preserve widget access profile
          CASE TARGET.FILE = "MVDB.WIDGETS"
            IF CLASH<2> # REC<2> THEN REC<2> = CLASH<2>
          *Preserve widget compile option
          CASE TARGET.FILE = "MVDB.CONTROL" AND ID = "COMPILE.SETUP"
            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>
        END CASE
        IF CLASH # '' AND REC # CLASH THEN
          CLASH.NAME = TARGET.NAME
          CONVERT " " TO "_" IN CLASH.NAME
          OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE
            CMD = "CREATE-FILE DATA MVDB.CLASHES,":CLASH.NAME:" 7"
            GOSUB EXEC.CMD
            OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE
              PRINT "Unable to create file MVDB.CLASHES,":CLASH.NAME
              GOSUB CLEANUP
              STOP
            END
          END
          WRITE CLASH ON F.CLASHES, ID
          CLOSE F.CLASHES
        END
      END
    END
    WRITE REC ON TARGET, ID
  END ELSE
    READ TST FROM TARGET, ID ELSE
      WRITE REC ON TARGET, ID
    END
  END
  IF NOT(MOD(CNT,500)) THEN PRINT "*":
UNTIL PACKET = "" DO REPEAT
IF CNT # 1 THEN PLURAL = "s" ELSE PLURAL = ""
PRINT CNT:" record":PLURAL:"."
LOG.LINE = TIMEDATE():": UNPACKED ":CNT:" RECORDS TO ":TARGET.NAME
INSTALL.LOG<-1> = LOG.LINE
RETURN
**********
CLEANUP: *
**********
CLEARFILE F.INSTALL
CLEARFILE F.PACKED.FILE
RETURN
*
EXEC.CMD: *
*
CMD.CNT = DCOUNT( CMD, @AM )
FOR CMD.XX = 1 TO CMD.CNT
  THIS.CMD = CMD<CMD.XX>
  LOG.LINE = TIMEDATE():": EXEC: ":THIS.CMD
  INSTALL.LOG<-1> = LOG.LINE
  EXECUTE THIS.CMD CAPTURING JUNK
  IF INSTALL.LOG.ON THEN
    WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID
  END
NEXT CMD.XX
RETURN
*
OPEN.ERR: *
*
LOG.LINE = TIMEDATE():": FILE OPEN ERROR: ":ERRFILE
INSTALL.LOG<-1> = LOG.LINE
PRINT LOG.LINE
GOSUB SEND.DATA
RETURN
*
SEND.DATA: *
*
PRINT
IF PROCESS.STATUS = 1 THEN INSTALL.STATUS = "Success" ELSE INSTALL.STATUS = "Failed"
PRINT "Install process finished. Status: ":INSTALL.STATUS
RETURN
                                                                                                                  ./mvappsvr/core/d3/MVDB.SETUP                                                                       0000666 0000000 0000000 00000002102 13674161102 014377  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   OPEN '','USERS' TO F.USERS ELSE STOP 201, 'USERS'
INPUT MVDB.USERID
INPUT MVDB.PASSWORD
INPUT MVDB.ACCOUNT
READ MVDB.USER FROM F.USERS, MVDB.USERID ELSE
  MVDB.USER = "MultiValue Dashboard"
  MVDB.USER<8> = "sys2"
  MVDB.USER<12> = "xonoff (f"
  MVDB.USER<13> = "stack (f"
  MVDB.USER<14> = "brk-debug"
  MVDB.USER<15> = "esc-data"
  MVDB.USER<16> = "LOGTO ":MVDB.ACCOUNT
  MVDB.USER<18> = "TERM ,,0,0,0"
END
MVDB.USER<7> = ICONV( MVDB.PASSWORD, "UC")
WRITE MVDB.USER ON F.USERS, MVDB.USERID
OPEN '','MD' TO F.MD ELSE STOP 201, 'MD'
SYSTEM.TYPE = SYSTEM(38)
SYSTEM.TYPE = SYSTEM.TYPE<3>
MVDB.CA = "n"
IF SYSTEM.TYPE = 12 THEN
  MVDB.CA<2,1> = "u mds,, type osfi.location modulo ret-lock upd-lock password syspriv justification width reallocation id-prompt data-entry"
  MVDB.CA<2,2> = 'm"R"mmxf'
  MVDB.ACCOUNT = "fsi:":MVDB.ACCOUNT
END ELSE
  MVDB.CA<2,1> = "u mds,, type modulo ret-lock upd-lock password syspriv justification width reallocation id-prompt data-entry"
  MVDB.CA<2,2> = 'm"D"mxf'
END
WRITE MVDB.CA ON F.MD, "CREATE-MVDB-ACCOUNT"
EXECUTE "CREATE-MVDB-ACCOUNT ":MVDB.ACCOUNT
                                                                                                                                                                                                                                                                                                                                                                                                                                                              ./mvappsvr/core/d3/dbdoc.html                                                                       0000644 0000000 0000000 00000012750 12571716373 015007  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <ol>
    <li id="database_required">
        <h3 class="docs_sub_item">Required Parameters</h3>
        <p>The "Required Parameters" section includes all of the parameters that must be set for the software to 
           operate correctly. 
           <br><br>
           <u>D3 Path</u>
              This field must contain the full operation system path to your D3 executable.
              Typically, this is /usr/bin/d3 on Unix and Linux,
              but varies based on your installation of D3.

           <br><br>
           <u>D3 User ID</u>
              The D3 User ID identifies the D3 username that is used to access the database account which houses
              your MultiValue software.  This value cannot currently be changed.

           <br><br>
           <u>D3 Password</u>
              This field contains the password for the MVDASHBOARD user account.  When initially configuring the
              software, use this field to set the initial password for the account.  To change the password after it's
              initial configuration it is necessary to first update the password in D3 and then modify this parameter.

           <br><br>
           <u>D3 Account</u>
              This field contains the database account name that is used to house your application server software.  When
              initially configuring the software, use this field to set the account name. 

           <br><br>
           <u>D3 VME</u>
              This field contains the name of the D3 Virtual Machine Environment that should be used for the dashboard software.
              Typically, this should be set to "pick0".
        </p>
    </li>
    <li id="database_optional">
        <h3 class="docs_sub_item">Optional Parameters</h3>
        <p>The "Optional Parameters" section includes options that may enhance the operation of your software but are not
           required for its operation.

           <br><br>
           <u>Working Directory</u>
              This field contains the initial working directory that is used for the software.  Typically, this can be set to
              any temporary storage directory or the installation directory of the application server software.

           <br><br>
           <u>Segment Size</u>
              This field contains the maximum length of the data string that is sent to the MultiValue database during any
              request.  The default value for this field is 3000, but it can be adjusted up or down as needed.  Typically, this
              field would be adjusted down if you are experiencing any data loss with data inside the request URI.

           <br><br>
           <u>DB Retries</u>
              This field contains the number of times that the software will attempt to connect to your MultiValue database
              before giving up and displaying an error message.  A common reason that the system would not be able to connect
              to the database would be that the system has exceeded its licensed number of user sessions.  Configuring this
              parameter to a higher number would cause the system to attempt to get a user license multiple times per connection.

              Typically, this should be set to "3" or some other integer.
        </p>
    </li>
    <li id="database_install">
        <h3 class="docs_sub_item">Install Dashboard Software</h3>
        <p>
          The "Install Dashboard Software" section of this tab is used to install or re-install the core software package to your
          MultiValue database.  This section is typically only necessary during the initial installation process, however it could
          also be used as part of an upgrade process or re-initialization of the software.

           <br><br>
           <u>DM Username</u>
              This field should be filled out to include the username of your "DM" user, or any user with full database privileges.
              This field defaults to the value "DM", and typically does not need to be changed.

           <br><br>
           <u>DM Password</u>
              This field should be filled out to include the password for your "DM" database user as configured above.  If your DM
              user does not have a password, leave this field blank.  NOTE: this field should not be used for your DM account
              password.  The DM account password is entered below.

           <br><br>
           <u>DM User Behavior</u>
              This field should be filled out to explain the behavior of the DM user account.  If, when logging into your system
              using a telnet or ssh connection as the DM user you are prompted to enter an account name, select the option labeled
              "Prompts for Master Dict".  If in the above scenario you are automatically logged into the DM account, select the
              option labeled "Automatic LOGTO DM".

           <br><br>
           <u>DM Account Password</u>
              This field should be filled out to include the password which has been placed on your DM account as indicated above.
              If your DM database account does not need a password, leave this field blank.

           <br><br>
           <u>Package Directory</u>
              This field should be filled out to include the system directory which contains the core software packages.  These
              packages were installed with your software and the correct directory will typically be already filled in.

        </p>
    </li>

</ol>
                        ./mvappsvr/core/d3/dbconfig.html                                                                    0000644 0000000 0000000 00000014337 12554273355 015511  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <div class="database_setup">
    <form name="database_setup" id="database_setup" method="get">
    
        <div class="pipe">
            <input type="hidden" name="feature" value="database_setup">
            <input type="hidden" name="tab" value="database">
            <input type="hidden" name="submit_form" value="true">
            <table cellpadding="0">
                <tr>
                    <th>D3 Path:</th>
                    <td><input type="text" name="dbbinary" id="dbbinary" value="[DBBINARY]"/><a href="javascript:showHelp('dbbinary_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
                 <tr>
                    <th>D3 User ID:</th>
                    <td><input type="hidden" name="dbusername" id="dbusername" value="[DBUSERNAME]"/>[DBUSERNAME]</td>
                </tr>
                <tr>
                    <th>D3 Password:</th>
                    <td><input type="text" name="dbpassword" id="dbpassword" value="[DBPASSWORD]"/><a href="javascript:showHelp('dbpassword_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>D3 Account:</th>
                    <td><input type="text" name="dbaccount" id="dbaccount" value="[DBACCOUNT]"/><a href="javascript:showHelp('dbaccount_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>D3 VME:</th>
                    <td><input type="text" name="dbvme" id="dbvme" value="[DBVME]"/><a href="javascript:showHelp('dbvme_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
            </table>
        </div>

        <div class="pipe">
            <h2 class="">Optional Parameters</h2>
            <table cellpadding="0">
                <tr>
                    <th>Working Directory:</th>
                    <td><input type="text" name="dbworkingdir" id="dbworkingdir" value="[DBWORKINGDIR]"/><a href="javascript:showHelp('dbworkingdir_help', 'optional_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>Segment Size:</th>
                    <td><input type="text" name="maxrequest" id="maxrequest" value="[MAXREQUEST]"/><a href="javascript:showHelp('maxrequest_help', 'optional_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>DB Retrys:</th>
                    <td><input type="text" name="dbfails" id="dbfails" value="[DBFAILS]"/><a href="javascript:showHelp('dbfails_help', 'optional_help_box');" class="info">More info</a></td>
                </tr>
            </table>
        </div>
        <a href="javascript:saveDB();" class="save">Save Changes</a>                
        <br>
    </form>
</div>
            
[DBINSTALL]

<div class="database_install">
    <br><br>
            
    <form name="install_dashboard" id="install_dashboard" method="get">
        <input type="hidden" name="tab" value="database">
        <input type="hidden" name="feature" value="install_dashboard">
        <input type="hidden" name="submit_form" value="true">
        <div class="pipe">
            <h2>Install Dashboard Software</h2>
            <table cellpadding="0">
                <tr>
                    <th>DM Username:</th>
                    <td><input type="text" name="dm_username" id="dm_username" value="[DM_USERNAME]"/><a href="javascript:showHelp('dm_user_help', 'install_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>DM Password:</th>
                    <td><input type="password" name="dm_password" id="dm_password" value="[DM_PASSWORD]"/><a href="javascript:showHelp('dm_pass_help', 'install_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>DM User Behavior:</th>
                    <td><select name="dm_behavior"><option value="prompt" [DMB_PROMPT]>Prompts for Master Dict.</option><option value="logto" [DMB_LOGTO]>Automatic LOGTO DM</option></select><a href="javascript:showHelp('dm_behavior_help', 'install_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>DM Account Password:</th>
                    <td><input type="password" name="dm_acct_pass" id="dm_acct_pass" value="[DM_ACCT_PASS]"/><a href="javascript:showHelp('dm_acct_pass_help', 'install_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>Package Directory:</th>
                    <td><input type="text" name="db_package" id="db_package" value="[DB_PACKAGE]"/><a href="javascript:showHelp('db_package_help', 'install_help_box');" class="info">More info</a></td>
                </tr>
            </table>
        </div>
        <a href="javascript:installDB();" class="save">Install</a>
        <div class="clear"></div>
    </form>
</div>

<script>
function validateDB(form){
    if (form.dbbinary.value == "") {
        alert("Missing required field!");
        form.dbbinary.focus();
        return (false);
    }
    if (form.dbaccount.value == "") {
        alert("Missing required field!");
        form.dbaccount.focus();
        return (false);
    }
    if (form.dbusername.value == "") {
        alert("Missing required field!");
        form.dbusername.focus();
        return (false);
    }
    if (form.dbvme.value == "") {
        alert("Missing required field!");
        form.dbvme.focus();
        return (false);
    }
    return (true);
}
function saveDB(){
    document.database_setup.action = ""; //server side script location
    if(validateDB(document.database_setup)){
        document.database_setup.submit();
    }
}
function validateInstall(form) {
    if (form.dm_username.value == "") {
        alert("Missing required field!");
        form.dm_username.focus();
        return (false);
    }
    if (form.db_package.value == "") {
        alert("Missing required field!");
        form.db_package.focus();
        return (false);
    }
    return (true);
}
function installDB(){
    document.install_dashboard.action = ""; //server side script location
    if(validateInstall(document.install_dashboard)){
        document.install_dashboard.submit();
    }
}
</script>
                                                                                                                                                                                                                                                                                                 ./mvappsvr/core/d3/platform.conf                                                                    0000644 0000000 0000000 00000011751 13364666755 015552  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ;#############################################################################;
; D3 Linux Platform Definitions
;#############################################################################;  

[db_platform]

; Database platform type (should be same as core subdirectory name where platform files are located)
dbType = d3


; The following tokens are replaced by configuration settings and installation options when processing
; installation commands, installation data files, required file list, and the mvconnector command line.
; Most of these correspond to a "db..." setting or option, as defined below. Token matching is CASE SENSITIVE!
; [DBBINARY], [DBACCOUNT], [DBUSERNAME], [DBPASSWORD], [DBVME], [DBWORKINGDIR], [DBAPPNAME], [DBHOSTNAME]
; [DM_USERNAME], [DM_PASSWORD], [DM_ACCT_NAME], [DM_ACCT_PASS], [DBACCTPATH]
; [DB_PACKAGE] - this is the full path to the directory containing the platform core files, including this 'platform.conf' file.
; [PACKAGE_FOLDER] - exactly the same as [DB_PACKAGE] except uses forward slashes for directory separator under Windows (d3).
; [DBCMDLINE] - the command line passed to the database server. This is formed internally and varies depending on the function.
;
; Installation commands can have optional parts, enclosed in { }. Within the curly brackets, there must be one
; token enclosed in [ ]. If the token is null, the entire part enclosed in { } is removed from the command. Otherwise
; only the curly brackets are removed. This allows using a command that has an optional password (or other parameter)
; to be written like {,[DM_ACCT_PASS]} where, the leading comma will be removed if DM_ACCT_PASS is null.
;
; Database installation commands (up to 9, executed in sequence). To feed data to the database command STDIN,
; use an 'echo' command and pipe it to the database command. On Linux, use 'printf', on Windows, use 'echo'.
; The install command line must be less than 2048 characters!

; step 1: use the ED command to create a PROC in the MD of the DM account.
install_command1 = "[DBBINARY] -n [DBVME] -d '\f[DM_USERNAME]\r{[DM_PASSWORD]\r}{[DM_ACCT_NAME]\r}{[DM_ACCT_PASS]\r}ED MD MVAPPS.INSTALL.PROC\rDE99999\rF\rI\rPQ\rHCREATE-FILE MVINSTALL.BP 3 3\rP\rHCOPY unix:[PACKAGE_FOLDER] MVDB.SETUP (O\rSTON\rH(MVINSTALL.BP\rP\rHBASIC MVINSTALL.BP MVDB.SETUP\rP\rHRUN MVINSTALL.BP MVDB.SETUP\rSTON\rH[DBUSERNAME]<\rH[DBPASSWORD]<\rH[DBACCOUNT]<\rP\rHDELETE-FILE MVINSTALL.BP\rP\rHDELETE MD CREATE-MVDB-ACCOUNT\rP\r\rFI\r' -s -r"

; step 2: execute the 'MVAPPS.INSTALL.PROC' created in step 1. The PROC creates the dashboard user & account.
install_command2 = "[DBBINARY] -n [DBVME] -d '\f[DM_USERNAME]\r{[DM_PASSWORD]\r}{[DM_ACCT_NAME]\r}{[DM_ACCT_PASS]\r}MVAPPS.INSTALL.PROC\r' -s -r"

; step 3: use the ED command to create 'MVDB.INSTALL.PROC' in the MD of the dashboard account. 
install_command3 = "[DBBINARY] -n [DBVME] -d '\f[DM_USERNAME]\r{[DM_PASSWORD]\r}{[DM_ACCT_NAME]\r}{[DM_ACCT_PASS]\r}ED [DBACCOUNT],MD, MVDB.INSTALL.PROC\rDE9999\rI\rPQ\rHCREATE-FILE WDB.BP 11 71\rP\rHCOPY unix:[PACKAGE_FOLDER] APP.INSTALLER (O\rSTON\rH(WDB.BP\rP\rHCOMPILE WDB.BP APP.INSTALLER\rP\rHRUN WDB.BP APP.INSTALLER\rSTON\rH[PACKAGE_FOLDER]/MVDB-FULL\rP\r\rFI\r' -s -r"

; step 4: log in to the dashboard account and run 'MVDB.INSTALL.PROC'. The PROC creates the WDB.BP file, copy the installation program to this file, compiles and runs the program.
install_command4 = "[DBBINARY] -n [DBVME] -d '\f[DBUSERNAME]\r[DBPASSWORD]\rMVDB.INSTALL.PROC\r' -s -r"


; List of files/directories that must exist before installation can begin
install_files = [DBBINARY],[DB_PACKAGE]/APP.INSTALLER,[DB_PACKAGE]/MVDB.SETUP,[DB_PACKAGE]/MVDB-FULL

; mvconnector command line
dbCommand = "[DBBINARY] -n [DBVME] -d '\f[DBUSERNAME]\r[DBPASSWORD]\r[DBCMDLINE]\r' -dcdon -s -r"

; mvconnector required parameters
dbRequired = dbBinary,dbAccount

; mvconnector environment variables (separate variables using commas; tokens may be used in the value for a variable)
dbEnvVars =

; Full path to database command executable
dbBinary = "/usr/bin/d3"

; Account name where dashboard is installed
dbAccount = MVDB

; User name to log on to the dashboard account
dbUsername = MVDASHBOARD

; Password for dashboard account user
dbPassword =

; Working directory path (QM, U2, JB)
dbWorkingDir =

; Path where dashboard account directory will be created (QM, JB, U2)
dbAcctPath = 

; Maximum length of command line sent to database
maxRequest = 1000

; Number of times to retry database requests
dbFails = 3

; Mode for passing query string (0 = command line, otherwise pipe to stdin - newline is LF=1, CR/LF=2, CR=3)
dbVarMode = 1

;#####################
;# D3 specific items #
;#####################

; Name of the VME to use (Linux only)
dbVME = pick0

; Name of DM account (not the DM user)
dm_acct_name = DM

; Password for the DM account (not the DM user)
dm_acct_pass =

; User name for DM (Linux only)
dm_username = DM

; Password for DM user (Linux only)
dm_password = 

; Does DM login - prompt for MD or automatic logto DM ("prompt" or "logto")
dm_behavior = prompt

                       ./mvappsvr/core/uv/                                                                                 0000755 0000000 0000000 00000000000 13364666755 013176  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/core/uv/dbhelp.html                                                                      0000644 0000000 0000000 00000003074 12554273355 015314  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <div class="help_box" id="required_help_box">
    <h3>More Info</h3>
    <div id="dbbinary_help" class="help">The path to the UniVerse command executable (uv).</div>
    <div id="dbusername_help" class="help">The UniVerse User ID that logs into the dashboard account.</div>
    <div id="dbpassword_help" class="help">The password (if any) required to log in with the user ID specified above. For a new install, specify the password you wish to assign to the new dashboard user specified above.</div>
    <div id="dbaccount_help" class="help">The name of the UniVerse account (directory) that will hold your software.</div>
    <div id="dbacctpath_help" class="help">The parent directory in which the dashboard account directory will be created.</div>
</div>

<div class="help_box" id="optional_help_box">
    <h3>More Info</h3>
    <div id="dbworkingdir_help" class="help">The working directory used by the app server.</div>
    <div id="maxrequest_help" class="help">The maximum number of characters to be issued in a single UniVerse request.</div>
    <div id="dbfails_help" class="help">The number of times to retry on a failure to connect to UniVerse.</div>
</div>

<div class="help_box" id="install_help_box">
    <h3>More Info</h3>
    <div id="dm_user_help" class="help">The username of your "root" or "Administrator" user, or any user will full database privileges.</div>
    <div id="dm_pass_help" class="help">The password (if any) required to log in as the user specified above.</div>
    <div id="db_package_help" class="help">The path to the installation package files.</div>
</div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ./mvappsvr/core/uv/MVDB-FULL                                                                        0000644 0000000 0000000 00005632707 13674161070 014415  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   001161RSS.BP0c00000ECSUB.TEMPLATE.SEL0c2SUBROUTINE SUB.XXX.SEL(VARS,VALS,FEED,F.FILE,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*OPEN "FILE" TO F.FILE ELSE STOP 201, "FILE"*XLINE = 'SSELECT FILE .... WITH PARAMS ...'EXECUTE XLINE CAPTURING JUNKRETURN0002EESUB.RE.SEL0c2SUBROUTINE SUB.RE.SEL(VARS,VALS,FEED,F.RUNTIME.ERRORS,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*FEED.TITLE = RSS$FEED.REC<1>LOCATE "account" IN VARS SETTING POS THEN  account = VALS<POS>  FEED.TITLE := '(Account: ':account:')'END ELSE account = ""LOCATE "user" IN VARS SETTING POS THEN  user = VALS<POS>  FEED.TITLE := '(User: ':user:')'END ELSE user = ""RSS$FEED.REC<1> = FEED.TITLE*OPEN '','RUNTIME-ERRORS' TO F.RUNTIME.ERRORS ELSE STOP 201, 'RUNTIME-ERRORS'XLINE = 'SSELECT RUNTIME-ERRORS BY-DSND DATE BY-DSND TIME'IF account # "" THEN  XLINE := ' WITH USERPIB = "[ ':account:'"'END ELSE IF user # "" THEN  XLINE := ' WITH USERPIB = "[ ':user:' ]"'ENDXLINE := " SAMPLING 100"EXECUTE XLINE CAPTURING JUNKRETURN0001F2RSS.DATA.INC0c2DIM RSS.DATA(20)*EQU RSS$TITLE       TO RSS.DATA(1)EQU RSS$LINK        TO RSS.DATA(2)EQU RSS$AUTHOR      TO RSS.DATA(3)EQU RSS$DATE        TO RSS.DATA(4)EQU RSS$TIME        TO RSS.DATA(5)EQU RSS$DESCRIPTION TO RSS.DATA(6)*EQU RSS$FEED.REC    TO RSS.DATA(14)EQU RSS$USER1       TO RSS.DATA(15)EQU RSS$USER2       TO RSS.DATA(16)EQU RSS$USER3       TO RSS.DATA(17)EQU RSS$USER4       TO RSS.DATA(18)EQU RSS$USER5       TO RSS.DATA(19)EQU RSS$USER6       TO RSS.DATA(20)0000EESUB.FEEDS.SEL0c2SUBROUTINE SUB.FEEDS.SEL(VARS,VALS,FEED,F.RSS.FEEDS,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE STOP 201, 'RSS.FEEDS'*EXECUTE 'SSELECT RSS.FEEDS # "FEEDS"' CAPTURING JUNKRETURN000196SUB.FEEDS.ITEM0c2SUBROUTINE SUB.FEEDS.ITEM(VARS,VALS,F.RSS.FEEDS,FEED.ID,FEED.REC,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*RSS$TITLE = FEED.REC<1>RSS$LINK = "RSS.MAIN?feed=":FEED.IDIF FEED.REC<2> # "" THEN  PARAMS = FEED.REC<2>  IF PARAMS[1,1] # "&" THEN PARAMS = "&":PARAMS  RSS$LINK := PARAMSENDRSS$AUTHOR = "RSS Feed"RSS$DATE = DATE()RSS$TIME = TIME()RSS$DESCRIPTION = FEED.REC<3>RETURN0007FCSUB.RE.ITEM0c2SUBROUTINE SUB.RE.ITEM(VARS,VALS,F.RUNTIME.ERRORS,ITEM.ID,RECORD,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*RSS$TITLE = ""RSS$LINK = ""RSS$AUTHOR = ""RSS$DATE = ""RSS$TIME = ""RSS$DESCRIPTION = ""*DATA RECORD<2,1>EXECUTE "PRINT-ERR DM,MESSAGES, ":RECORD<1>:" (S" CAPTURING ERR*CONVERT @AM TO " " IN ERRERR = OCONV(ERR,'MCP')ERR = TRIM(ERR)RSS$TITLE = OCONV(FIELD(ITEM.ID,'*',1),'D0/'):" @ ":OCONV(FIELD(ITEM.ID,'*',2),'MTS'):": ":RECORD<4>:" ":ERR*RSS$AUTHOR=RECORD<3>*RSS$DESCRIPTION = 'Pib /User: ':RECORD<3>:'<br />'STACK = ""FOR N = DCOUNT(RECORD<5>,@VM) TO 1 STEP -1  STACK := RECORD<5,N>  IF STACK # "" AND N # 1 THEN STACK := ' --> 'NEXT NIF RECORD<5> # '' THEN RSS$DESCRIPTION := "Stack: ":STACK:'<hr />'MD = FIELD( RECORD<3>, ' ', 3 )** Try and find the source code to include in the feed.*SREC = ""OPEN MD:",MD," TO F.MD THEN  FNAME = ""  READ CREC FROM F.MD, RECORD<4> THEN    IF CREC<1> = "VR" THEN ;* This is a catalog pointer, file name is in field 4      FNAME = FIELD(CREC<4>,' ',1)    END ELSE IF CREC<1> = "PQ" THEN      IF FIELD(CREC<2>, ' ', 1 ) = "HRUN" THEN        FNAME = FIELD( CREC<2>, ' ', 2 )      END    END  END  IF FNAME # "" THEN    OPEN MD:",":FNAME:"," TO SFILE THEN      READ SREC FROM SFILE, RECORD<4> ELSE SREC = ""    END  ENDENDIF SREC # "" THEN  CALL SWAP(SREC,'&','&amp;')  CALL SWAP(SREC,'<','&lt;')  CALL SWAP(SREC,'>','&gt;')  LINENO = RECORD<2,1>  IF LINENO MATCHES "1N0N" THEN    START.LINE = LINENO - 10    IF START.LINE < 0 THEN START.LINE = 1  END ELSE LINENO = 1 ; START.LINE = 1  END.LINE = LINENO + 10  RSS$DESCRIPTION := '<pre>'  FOR LINUM = START.LINE TO END.LINE    LINE = LINUM "R#4":" ":SREC<LINUM>    IF LINUM = LINENO THEN LINE = '</pre><b>':LINE:'</b><pre>'    RSS$DESCRIPTION := LINE:CHAR(10)  NEXT LINUM  RSS$DESCRIPTION := '</pre>'END ELSE  RSS$DESCRIPTION := 'Unable to open source code for ':RECORD<4>:' in account ':MDEND*RSS$DATE = FIELD(ITEM.ID,'*',1)RSS$TIME = FIELD(ITEM.ID,'*',2)*RETURN0000E1SUB.TEMPLATE.ITEM0c2SUBROUTINE SUB.XXX.ITEM(VARS,VALS,F.FILE,ITEM.ID,RECORD,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*RSS$TITLE = ""RSS$LINK = ""RSS$AUTHOR = ""RSS$DATE = ""RSS$TIME = ""RSS$DESCRIPTION = ""*RETURN006E51DICT_DASHBOARD.BALANCES0c0000020*CURRENT.NET.INCOME.STATS0c199900001C*LAST.UPDATE.AR0c119113113100001F*LAST.UPDATE.SALES0c119097194000003E*CURRENT.AP.STATS0c1423319241590398927280931250503169201000002ADEBUG0c1READ314223005483206198389200001C*LAST.UPDATE.AP0c119113113100001C*LAST.UPDATE.ALL0c1UPDATING000024*LAST.UPDATE.NET.INCOME0c119113113100001E**LAST.UPDATE.ALL0c1191131131006CBD*CURRENT.AR.STATS0c114560890843071741194510422787790138344612016201720182019202036015203171161151422300548320619813973235509172233548101395385164696370847879531219774039141932813118439101515435988140169672622764976385961979776243395735633981366076359266443141739321371082983421997626385139191577600893225799874558530587911002831044901802010031636438139934238540935140144850748349747242343943941742042845745147745945648141552450947752038749845516142125826659488757142751552545881502172726122803193629216560167136903585464649433786660648167835910164720249247515103226424798771241101583062896Du monde entier2927113415302442Real Computers30182549HUNGRY HOWIES PIZZA280124812761Bobs Used CyclesIntercom ProductsBetter Computing2622Drachenblut Delikatessen12922374Comp ConsultingQue DeliciaElectronic Company2891Berglunds snabbkop258914022965Cyber ProductsFrankenversandPiccolo und mehr1423290227042632212816191795288628711140102111223023Queen CozinhaFolies gourmandesOnes & Zeros Inc.17032713Computer TechVictuailles en stockMemory Capturers1416Disk Products28872953Ajax Computer Electronics166028632908Comp Products11232996TRGGaleria del gastronomoJoe's Computers2935USA ComputersGodos Cocina Tipica2449Bottom-Dollar MarketsBakers Goods255216771117Computer TipsEastern ConnectionAround the HornData Comp3002233527242758160823983028ABC Electronics CorpHanari CarnesFranchi S.p.A.29972809The Big Cheese2915Wartian HerkkuChop-suey Chinese28432969White Clover MarketsVins et alcools Chevalier2970299112062727For Computers Inc.Bills Shoes & Gopeds27592308HILARION-AbastosWellington Importadora226312513015Classic ComputersWolski Zajazd271025742827293730191920Better BytesBlauer See DelikatessenData Net15171012283029072959Software Inc130815991103168415442778288513811010110514341032GROSELLA-RestauranteBon app'300922931252Pericles Comidas clasicas2854170528032947Longo ToyotaBest Computer Company19582967Specialites du monde20472814Alfreds FutterkistePrinter Products2497Computers N More2394272210721076Logical Computers2974Save-a-lot Markets2513Net Connect2882Bits and Bytes IncComputer Sitters135113502560Die Wandernde Kuh21152554Richter Supermarkt205625312784134426241653179918292940290127331569Supremes delices2958296627083012Ottilies KaseladenWhite HouseTortuga Restaurante2607297916051219Great Lakes Food Market25682465298610782648292028671152290615861106France restauration1058151129422516254524432982Gourmet Lanchonetes294328313029Computers Inc.Systems30322456North/South2628Princesa Isabel Vinhos1214Old World DelicatessenErnst Handel2651295013723033301428942931303129621290259628952459300429441556211327573034203527032929303512651469Ricardo Adocicados102410541358121815642690303625212933290025323037B's Beverages3024280630413038141113071119212612382538136627442406304027931452118417802434Antonio Moreno Taqueria3039Consolidated Holdings148030072313304630473048141930503053305430553056141330573058304210302670Familia Arquibaldo1382255811573061306330643065306730693070Hungry Coyote Import Stor2837171730713075Data Bits300028551155129930431592292523593044Modem Products3076194330783080Wilman Kala12113051308230593083308610972782308727833088308917753077306812891171309230932095307230731057138830953096309730982571296030743099Let's Stop N Shop31001034176224051965ABC Computers3101310331043105310631073081140131083109311031112880311210993114308430851257306628562859104715413011LINO-Delicateses3091306231213122312331243125126931273126312831292941313131323102309420893137313631133006313931401287314131421415246226001540314431452694299510833146311631493150315131173118Comercio Mineiro31533154315631153157Cactus Comidas para lleva31583159139131601050311931623163316431302387Computer Fancy3166129318593167312011833138316831713170317431433176318031812994Computer Town3148317831823183318431851453102810151651LILA-Supermercado31883191319331953196300513343179319932003201320232083209313532113212321332143215285710403161316528773169137431722740293626563219322032213177322232231261Computers R Us280032253227322832303231323231893190119931923194319732333235323832391046Paris specialites32403241320432053206320732423246321032473248319831733254325732583262321632633265286532173175FISSA Fabrica Inter. Salc325332673268327232731486101332743277Vaffeljernet29733280322428223281328232833285328632293287299332343284Computer TrainersBolido Comidas preparadas3237324332443245324932902664325032511087Romero y tomillo32923293325532563259329132941060326117453264329732983260181832693270327128733302The Cracker Box3186327532763303326632263278327911823305330731333312331326893315Lehmanns Marktstand331633173296Better ConnectionNumber One in Computing331833013322329523693321332328783324332532993300330624483304332633273309332933103330333133322938331133363337334033423344334533492031Comp Data Inc.33513350335233533354332033193357335833603328335933633364336533333366336733351118336833383371334333723373249133743022337533763377337911253381338216793384338633553387Oceano Atlantico Ltda.33832729The Only Computers3391339033623392339333953396337033973398339933693400340233783403340433803385340634072105338834083389Rancho grande34123415128634173419340133942879342434251764340534271368342834293432160134353434343610743409341027743438343934403441341834431198344434453446344734143448Island Trading34133416342023373452100634263431345334333454Future In Computing33473455Sante Gourmet264410953442346234633468346934712592267734493473345028293476Disks N More3477347934803481Split Rail Beer & Ale34843485346534873489345734903467264734613459349234942817346434963499Simons bistro346635003501350434743475Future Computers21553505350634823470341135083509347227012325349135101490Lazy K Kountry Store349335143502Tradicao Hipermercados35153516351735182819351135193521349513933503352235243526352835293530Reggiani Caseifici350734223532Toms Spezialitaten352035343536353735403512115935433545348635133548Computers Etc.355635513553355435583559166735603561Maison Dewey35632502356435273525356635673568301635383539127035733574Blondel pere et fils354235233547QUICK-StopSeven Seas Imports3544357935803550355212433583358435883586358735903589297535923593258335553549359535963598359936003569357135723602360314763575237035653605360636073610357835823611358535763013361536163591359435973617361836221598360436013624362636273581Rattlesnake Canyon Grocer3629363036093608361236133634363536313636363936403641364236433644364536463647364836493650362136523619363736253655Computer Portables Inc.36583628Koniglich Essen36613662366522543666366736323675367636683677Mere Paillarde36793680368136823683368436853686368736883689369036913692369336943695369636973698365336993700370137023704363837053706370737083709371137123713371436543716371737183719372037221407365637233726372737283729365936633664373127953734373337363738373937413742374437463743366936702000367136723673367437511082367837533754375537563757375836573710371537603761376237633764376537213725376737683769372437702912Morgenstern Gesundkost377137723773Lonesome Pine RestaurantLa corne d'abondance3774373737783745374837473752378037833750378437853786378837913790111425203766379437963798Computer Warehouse3793377537491291Memory Plus Inc.37762252380138023777380437813806380737823810378738123789381338153792382136143822375938243823379537993827382838293830Computers Galore38323833383438033835380538373836383838402099380838113841288138433844381738143740La maison d'Asie38193816382038473848380938313826385430083825384938563857383938533860Laughing Bacchus Wine Cel38623864380038423846384538683869385038703852Ana Trujillo Emparedados3871387238743858Secure Computers387638753859388038833884386338863887388838893891386538923873389538963877387938973881385538823898Furia Bacalhau e Frutos dMagazzini Alimentari Riun126339003901389939043905390639073909391038943890173339133912391438673866Hungry Owl All-Night Groc3893388539163918391939033920Centro comercial Moctezum3908117327063878134839172500005847741433950510000250000500000750000436147808920015840016055016080344854231045482908400234862711531510000007488798710033505010699601006005504369963465284121400296015836400465005726351734075433519715625485577374000390050712600635027887500259745885282305506111000032540156656801788761251480008656020000006300021000206250175683225004437002521922037608900855100157993238400228490268300970025250030163594755040700577500178503200100000016060054745039354356850124225010135501030532989753200712500250000301582350000850000510001020000691933795185000279347323002300408000386003980015251019900635452182000595001500139009146382507400036817552220001283175484035118000299004818891703750120440719607400139003000001500005833299116104310414086102241465411715224824297117252317933209918242925255111472576241164055422179541311661130851522925427232511255529258654835330252424248322424541478614621722252225202723913423188992424117532255242224222423942201834552083634178147131111928954542514135165136751532093215800180191551216584204394102775228881421083386266104113473235430207012161533318622993105111235348791196732385310611094275934622814671447655351566174116714137139736301964581404714809126917194304192822193165586155124674115672090236607662383928142847252636173797135964911383564787536887636616247739550588912185269118660108197129514113553031080949191126225960171221371669457210124213903009566111905113231676249116715541122133487727775722284458159200714494057587016934017544932208525375198106034636424092452137112173296190212585275145753665037151520290563425505175242938442254159218104148429119215799342198226413231194601472962093723816710738201264317296472139285816627998871342721888228232907579102127443922457436337326136540109121122117010651184752121551318816241283881013811741515936927764639439144461348162911284511711105376202222163354007893661842861451051642087106206718149492541264444158438692172753766244129461218333215811111114517915812151921217373273151122122931146178177426413775219152912116010269127935611091639871140512407204122112121734114752034165421019281919778151371414141418232394014914994880469112272911881313131347911201037106819930109101809361012399794716901019244852248921212123225703151211502132010993514999920191264103059139556101599247391491010386543192381997291074815217243928149278740918999947718992598751416336273529341111192487942245101810104026036131351625599983314199228284010559187068935910927311416154109199493101893313198139937910027251184914718227214212060152964886103619101322513918794413229189607376569371973749803319611699239467945925012997130515010101855922153851043729310183918104118191914099910252275959101898851099375406109178772010289277959303799963999122660193199994143253203651301179799134116891088610925828538970224148184202972413994003311440181002813227109966229125613610199997599928101301251412831872718995857449688379100103353099997352181322310202117991870932139233089156241311855155149371246391895933618899318309916520443111101701657899108418912962493713517829999996631152953936912291866929101891798223925993296710106428387915374991021111107399573415174106152296992310281099917274301215611629934952436610612880360281421933232591310436412031339181820515091012154816113513969989191399109144210121117179916307596439305913251218911861595441181394213918199282013919332010109999915229915991024927201312101010109999231095679101691096702119135419999271910963883988197591097856291919109101025119191222911394791322081818999544995187936339109454210959311847999101499109279895435249813369471049999152935913691699992318910233681311311099839155101132791888749111181872693020991085219999119914491813424218919109991028151069781266010109991099117791391112259999141351435103542216711519311366951762104152431133011728149524744201427662542551184264653738455310414078948654232233014864654458588253365237374817136717784913139913235412871319423119514352831561877277682542313840741710384268917404511313865106642321415233813108951299251293726812042206546356381125017263201116288118282937141245362773182011371531060151318144236102619121754117711125162123613661155138284932562123711418614422101112131443474112310126231551722317113131851272104439678611621321411291116131117332023391251115381752151741158215512845116236481189225461818912115017126751211771311112211131262823911121111131214113126111614131133341212371411111811154211119111122412731115111171111120198101121224111131133112111139211113255412221121513101211361611101113291161413125131411131213112159213232114111311271311121212231111311123211121231121211433111111918326469112102121118111242322221111252131211411114411741131211141113111122221111216143411111141216114321124134192111381212232311132111111211131113911619122221202114312213111113211153112212112815211231122212134211201113291114311162111111113171111113142121411212431121181111211112151821131111122113521211113111188111413111134416211211112111113321112216311142112361121111114111111111011111711010211611442111112213211112111111119111111111111111111111122111111024112111132111131112111145122111121221213141412211511111111111227313111211111131116122151171111214111211111111951411612171123311221152111141112111121212121111141111232111111111111111111111111582210675557814361401043104161403542422447109163244104384824226202110190344316368592922762955125971531521649021825576973236203051753151283050207543961822248819254416341632115301573764837019951173170115574894918416223165479134631512182046216305533818746391813081633445612226251231458732151784213521699113377552917936214011019617863738213835229312432862949241813921140674755414112210831072417297147698851821365652171131401731022741504898152011332091010505836513555890896124523109412173399326364434304427601033653225599213422940403144322125222833484942942029421066211131341919818586720826361968271698013616762977155961119972692011852191199424291010999102815106978126601010999109911779139111225999914135114112492111110266311111424241332431776173742221416209234223211322636262242153521158311042116221211472231111551222121213125141341234211151212211312211114111311142304121111111142213516345211132111511111271115311423212315111153331113121112231331311311611122121233231311265252113821111212212114122616322241111131142121111111141111232111111111111111111111111Cyber ProductsSoftware IncComputer WarehouseBits and Bytes IncComputers Etc.Future In ComputingComp ProductsLogical ComputersABC ComputersComputers Inc.SystemsBetter BytesSecure ComputersOnes & Zeros Inc.Modem ProductsIntercom ProductsMemory Plus Inc.Better ConnectionNet ConnectComputer TipsMemory CapturersComp Data Inc.Future ComputersNumber One in ComputingComputers R UsJoe's ComputersComputer FancyDisk ProductsPrinter ProductsData BitsDisks N MoreFor Computers Inc.Electronic CompanyUSA ComputersData NetBest Computer CompanyThe Only ComputersData CompComputer SittersComputer Portables Inc.Alfreds FutterkisteComputers N MoreReal ComputersComputer TownClassic ComputersComputer TrainersBetter ComputingComp ConsultingComputer TechComputers GaloreAna Trujillo EmparedadosAntonio Moreno TaqueriaBerglunds snabbkopBlauer See DelikatessenBlondel pere et filsBolido Comidas preparadasBon app'Bottom-Dollar MarketsB's BeveragesCactus Comidas para llevaChop-suey ChineseComercio MineiroConsolidated HoldingsDrachenblut DelikatessenDu monde entierErnst HandelFamilia ArquibaldoFISSA Fabrica Inter. SalcFolies gourmandesFrankenversandFrance restaurationFranchi S.p.A.Galeria del gastronomoEastern ConnectionGodos Cocina TipicaGourmet LanchonetesGreat Lakes Food MarketGROSELLA-RestauranteHanari CarnesNorth/SouthAround the HornHILARION-Abastos2497Ottilies Kaseladen80892004855773368175532540152793473235000023486272305506228490220000001734075170375016080341579932143395012831751242250111000010699601045482103053210200001013550100000010000009475509084008875008551008500008364007500007488797156257126007125006996346656806354526350275885285847745775005726355474505100005000004854234840354818894437004361474335194080003935433900503350503225003016352960152525002521922500002500002062502037601606001605501584001480001214001153151006008710086560761257400065284630005504346500259741788Drachenblut DelikatessenComp ConsultingFuture In ComputingComercio MineiroIntercom ProductsIsland TradingKoniglich EssenNumber One in ComputingLa corne d'abondanceFuture ComputersLogical ComputersEastern ConnectionMemory Plus Inc.Computers Inc.SystemsMemory CapturersComputers GaloreBolido Comidas preparadasData NetBetter ConnectionFolies gourmandesLa maison d'AsieFrance restaurationComputers Etc.Godos Cocina TipicaComputer TechComputer SittersBest Computer CompanyBetter ComputingLaughing Bacchus Wine CelCyber ProductsLazy K Kountry StoreHanari CarnesAna Trujillo EmparedadosSecure ComputersLehmanns MarktstandLet's Stop N ShopBerglunds snabbkopGourmet LanchonetesLILA-SupermercadoLINO-DelicatesesGROSELLA-RestauranteDu monde entierLonesome Pine RestaurantBlondel pere et filsHungry Coyote Import StorPrinter ProductsMagazzini Alimentari RiunFuria Bacalhau e Frutos dComputer TrainersABC ComputersNet ConnectOnes & Zeros Inc.Maison DeweyMere PaillardeErnst HandelAlfreds FutterkisteElectronic CompanyComputer WarehouseMorgenstern GesundkostDisks N MoreAround the HornReal ComputersData BitsNorth/SouthFor Computers Inc.Joe's ComputersThe Only ComputersOceano Atlantico Ltda.Cactus Comidas para llevaModem ProductsFamilia ArquibaldoAntonio Moreno TaqueriaOld World DelicatessenSoftware IncClassic ComputersHILARION-AbastosBottom-Dollar MarketsFISSA Fabrica Inter. SalcComputer Town1859Computer FancyBon app'Chop-suey ChineseGaleria del gastronomoDisk ProductsFrankenversandB's BeveragesComputer TipsComputers N MoreData CompFranchi S.p.A.Bits and Bytes IncConsolidated HoldingsBlauer See DelikatessenComp Products2521USA ComputersOttilies KaseladenBetter Bytes2497Great Lakes Food Market10431041391330299272239217208188179179178152152147147147146146131130117117117116116116111102999992898686868583837658555555555454545454545342424040363434333329292929252525252525252525252524242424242424242423232220181311118776541Comercio MineiroParis specialitesDrachenblut DelikatessenThe Cracker Box257.9233.392.670.731.536.1104.351.88.810.854.230.4000257DICT_PORTAL.SALES0c0000033CLOSE.DATE.YMO0c1A0A;1(DY):1(D2-)(G-1)R1000002BCLOSE.DATE.MM0c1A1CLOSE MONTHDMR800002CCLOSE.DATE.YM0c1A0A;1(DY):1(DM)R10000028CLOSE.DATE0c1S1CLOSE DATED2-R8000022REP.NAME0c1A5Rep.NameL2500002CCLOSE.DATE.YYYY0c1A1CLOSE DATEDYR800001APIPE0c1A0 F;C|L1000045GROSS.PROFIT0c1A0gross profitMD2A;N(EXT.AMT)-N(EXT.COST)R10000019BRANCH0c1A13L15000019REGION0c1A14L15000026EXT.AMT0c1A8Ext.AmountMD2R10000025EXT.COST0c1A9Ext.CostMD2R10000018CNT0c1A0F;C1R50000E2DICT_PORTAL.AP0c0000026DATE.PAID0c1A8Date PaidD2-R8000029INV.AMOUNT0c1A6Inv.AmountMD2R13000025DUE.DATE0c1A20Due.DateD2-R8000024BALANCE0c1A50BalanceMD2R1300001APIPE0c1A0 F;C|L100015EDICT_MVDB.WIDGET.TYPES0c000001ATYPE0c1A1TYPEL15000018SWF0c1A2SWFL15000020HANDLER0c1A3HANDLERL1500001AICON0c1A4ICONL2500001ADESC0c1A6DESCL3000001710c1A1TYPEL1500001720c1A6DESCL3000001730c1A4ICONL2500001CGROUP0c1A5GROUPL15000021INACTIVE0c1A7INACTIVEL1000C72MVDB.WIDGET.TYPES0c0000043FC2DPIE0c2FC2DPIEPie2DFCPIEpie_widget_icon.jpgPIE2D Pie Chart00005CSPARKCOLUMN0c2SPARKCOLUMNSparkColumnFWSPARKspark_widget_icon.gifFWSpark Column Chart1000055VBULLET0c2VBULLETVBulletFWBULLETbullet_widget_icon.gifFWVertical Bullet Chart1000054SPARKLINE0c2SPARKLINESparkLineFWSPARKspark_widget_icon.gifFWSpark Line Chart1000057HBULLET0c2HBULLETHBulletFWBULLETbullet_widget_icon.gifFWHorizontal Bullet Chart100004AFCCOLUMN3D0c2FCCOLUMN3DColumn3DScol_widget_icon.jpgLC3D Column Chart00005DFCMSCOLUMN3D0c2FCMSCOLUMN3DMSColumn3DMcol_widget_icon.jpgLC3D Multi-Series Column Chart000039TABLE0c2TABLETABLEtable_widget_icon.jpgTable Widget000060HLINEARGAUGE0c2HLINEARGAUGEHLinearGaugeFWGAUGElinear_widget_icon.jpgFWLinear Gauge Chart1000045FUNNEL0c2FUNNELFunnelFWFPfunnel_widget_icon.gifFWFunnel Chart1000061SPARKWINLOSS0c2SPARKWINLOSSSparkWinLossFWSPARKspark_widget_icon.gifFWSpark Win/Loss Chart100005BTHERMOMETER0c2THERMOMETERThermometerFWGAUGEtherm_widget_icon.jpgFWThermometer Chart100004APYRAMID0c2PYRAMIDPyramidFWFPpyramid_widget_icon.jpgFWPyramid Chart1000060ANGULARGAUGE0c2ANGULARGAUGEAngularGaugeFWGAUGEangle_widget_icon.jpgFWAngular Gauge Chart100003AUSAMAP0c2MAPMAPmap_widget_icon.jpgMAPUSA Map Chart1000043FCAREA2D0c2FCAREA2DArea2DSarea_widget_icon.gifLC2D Area Chart000051FCMSBAR2D0c2FCMSBAR2DMSBar2DMbar_widget_icon.gifLC2D Multi-Series Bar Chart000067FCSTACKEDCOLUMN2D0c2FCSTACKEDCOLUMN2DStackedColumn2DMcol_widget_icon.jpgLC2D Stacked Column Chart000059FCDOUGHNUT2D0c2FCDOUGHNUT2DDoughnut2DFCPIEdonut_widget_icon.jpgPIE2D Doughnut Chart00003ATEXT0c2TEXTTEXTtext_widget_icon.pngPreformatted Text000052CYLINDER0c2CYLINDERCylinderFWGAUGEcylinder_widget_icon.jpgFWCylinder Chart1000054FCMSAREA2D0c2FCMSAREA2DMSAreaMarea_widget_icon.gifLC2D Multi-Series Area Chart000034HTML0c2HTMLHTMLhtml_widget_icon.pngHTML Widget00003AFCLINE0c2FCLINELineSline_widget_icon.gifLCLine Chart00004DFCMSLINE0c2FCMSLINEMSLineMline_widget_icon.gifLCMulti-Series Line Chart000043FC3DPIE0c2FC3DPIEPie3DFCPIEpie_widget_icon.jpgPIE3D Pie Chart000045VLED0c2VLEDVLEDFWGAUGEled_widget_icon.jpgFWVertical LED Gauge1000047HLED0c2HLEDHLEDFWGAUGEled_widget_icon.jpgFWHorizontal LED Gauge100004AFCCOLUMN2D0c2FCCOLUMN2DColumn2DScol_widget_icon.jpgLC2D Column Chart00003EFCBAR2D0c2FCBAR2DBar2DSbar_widget_icon.gifLC2D Bar Chart00005DFCMSCOLUMN2D0c2FCMSCOLUMN2DMSColumn2DMcol_widget_icon.jpgLC2D Multi-Series Column Chart000067FCSTACKEDCOLUMN3D0c2FCSTACKEDCOLUMN3DStackedColumn3DMcol_widget_icon.jpgLC3D Stacked Column Chart00005BFCSTACKEDBAR2D0c2FCSTACKEDBAR2DStackedBar2DMbar_widget_icon.gifLC2D Stacked Bar Chart00003CGANTT0c2GANTTGanttgantt_widget_icon.gifFWGantt Chart1000042FAILED0c2FAILEDFAILEDtext_widget_icon.pngPreformatted Text1000033MAP0c2MAPMAPmap_widget_icon.jpgMAPMap Chart100003EBULB0c2BULBBulbFWGAUGEbulb_widget_icon.jpgFWBulb Gauge1000061FCSTACKEDAREA2D0c2FCSTACKEDAREA2DStackedArea2DMarea_widget_icon.gifLC2D Staacked Area Chart015527WOBJ.BP0c0000B9CWOBJ.PARSEOBJECT0c2SUBROUTINE WOBJ.PARSEOBJECT(JSTR,INDEXPOS,PARSEOBJECT)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json object************************************************************************INCLUDE WOBJ.INCLUDE*IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT - STARTING"*PARSEOBJECT=""CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*IF JSTR[INDEXPOS,1] <> "{" THEN    PSERRORS<-1> = "Invalid Object at position ":INDEXPOS:" : ":JSTR[INDEXPOS,1]    RETURNEND*LEN.JSTR = LEN(JSTR)INDEXPOS+=1**JSONOBJECT(JSONOBJECT$NODECNTR)+=1NODEID=JSONOBJECT(JSONOBJECT$NODECNTR); * WE NEED TO STAY AT THIS NODEID POSITIONJSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEID>="O"; *SET AS OBJECTIF WOBJ.DEBUG THEN    PRINT "PARSEOBJECT: SETTING NODETYPE NODEID:":NODEID:" = O"END*LOOP    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    C=JSTR[INDEXPOS,1]    BEGIN CASE        CASE C="}"            INDEXPOS+=1            IF WOBJ.DEBUG > 1 THEN PRINT "PARSEOBJECT: EXIT CHAR }"            EXIT        CASE C=","            INDEXPOS+=1            CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)        CASE INDEXPOS > LEN.JSTR            PSERRORS<-1>="Missing '}': ":JSTR[LEN.JSTR-20,20]            EXIT    END CASE    *    * ADD KEY/VALUE PAIR    *    JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>+=1    PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" PARSEOBJECT CALLING PARSEKEY"    CALL WOBJ.PARSEKEY(JSTR,INDEXPOS,SKEY)    JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEID,PARTPOS>=SKEY    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" BACK FROM PARSEKEY: ":SKEY[1,10]    *    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" CALLING PARSEVALUE"    CALL WOBJ.PARSEVALUE(JSTR,INDEXPOS,PARSEVALUE)    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" BACK FROM PARSEVALUE N=":NODEID:" P=":PARTPOS:" T=":PARSEVALUE<1>:" F=":PARSEVALUE<2>    BEGIN CASE        CASE PARSEVALUE=""            PSERRORS<-1>="Invalid value syntax for node ":SKEY            RETURN        CASE PARSEVALUE<1>="A" OR PARSEVALUE<1>="O"            * ARRAY            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEID,PARTPOS>=PARSEVALUE<2>        CASE 1            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            V=PARSEVALUE<2>            IF INDEX(V,LF,1) OR INDEX(V,CR,1) THEN                V=OCONV(V,"MX0C")                E="H"            END ELSE                E="A"            END            JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEID,PARTPOS>=V            JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEID,PARTPOS>=E    END CASEREPEATPARSEOBJECT="O"PARSEOBJECT<2>=NODEIDIF WOBJ.DEBUG THEN PRINT "PARSEOBJECT - END OF ROUTINE"RETURNEND0003E3WOBJ.INCLUDE0c2************************************************************************* Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: WOBJ includes for json library************************************************************************COMMON /MVIWOBJ/ PSERRORS,JSONOBJECT(20),WOBJ.DEBUG,PRETTIFY,PRETTIFYCR,INDENT.DEPTH*EQU CR TO CHAR(13), LF TO CHAR(10), TB TO CHAR(9), BS TO CHAR(8), FF TO CHAR(12)NL = CR:LF*EQU INVALID_JSON TO 1EQU INVALID_OBJECT TO 2EQU INVALID_ARRAY TO 3EQU INVALID_BOOLEAN TO 4EQU INVALID_NULL TO 5EQU INVALID_KEY TO 6*EQU JSONOBJECT$NODECNTR TO 2* ARRAY OF NODESEQU JSONOBJECT$NODETYPE TO 3EQU JSONOBJECT$NODELENGTH TO 4EQU JSONOBJECT$NODEPARTS.KEY TO 5EQU JSONOBJECT$NODEPARTS.TYPE TO 6EQU JSONOBJECT$NODEPARTS.FLINK TO 7EQU JSONOBJECT$NODEPARTS.BLINK TO 8EQU JSONOBJECT$NODEPARTS.ENCODING TO 9EQU JSONOBJECT$NODEPARTS.VALUE TO 10* END OF ARRAY OF NODES000248WOBJ.NUMBER.TOSTRING0c2SUBROUTINE WOBJ.NUMBER.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert json number to string************************************************************************INCLUDE WOBJ.INCLUDE*CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)*CALL WOBJ.ENCODE(VALUE,OUT.VALUE)JSON:=OUT.VALUE*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=":VALUERETURNEND000797WOBJ.PARSEKEY0c2SUBROUTINE WOBJ.PARSEKEY(JSTR,INDEXPOS,PARSEKEY)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json property key************************************************************************INCLUDE WOBJ.INCLUDE*PARSEKEY=""IF WOBJ.DEBUG THEN PRINT "PARSEKEY: ENTERING ":INDEXPOS*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*LEN.JSTR = LEN(JSTR)*IFDQUOTE = 0IFSQUOTE = 0LOOPWHILE INDEXPOS > 0 AND INDEXPOS <= LEN.JSTR DO    C = JSTR[INDEXPOS,1]    IF WOBJ.DEBUG > 0 THEN PRINT "PARSEKEY: ":INDEXPOS,C,SEQ(C),PARSEKEY    BEGIN CASE        CASE C = '"'            IF NOT(IFDQUOTE) THEN IFDQUOTE=1 ELSE IFDQUOTE=0            INDEXPOS+=1            IF NOT(IFDQUOTE) THEN                CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)                IF JSTR[INDEXPOS,1] <> ":" THEN                    PSERRORS<-1>="Invalid Key at position ":INDEXPOS:" : ":PARSEKEY                    EXIT                END            END        CASE C = "'"            IF NOT(IFSQUOTE) THEN IFSQUOTE=1 ELSE IFSQUOTE=0            INDEXPOS+=1            IF NOT(IFSQUOTE) THEN                CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)                IF JSTR[INDEXPOS,1] <> ":" THEN                    PSERRORS<-1>="Invalid Key at position ":INDEXPOS:" : ":PARSEKEY                    EXIT                END            END        CASE C = ":"            INDEXPOS+=1            IF NOT(IFDQUOTE) AND NOT(IFSQUOTE) THEN                IF WOBJ.DEBUG THEN PRINT "EXITING"                EXIT            END            PARSEKEY:=C        CASE 1            IF C=LF OR C=CR OR C=TB OR C=" " THEN                NULL            END ELSE                PARSEKEY:=C            END            INDEXPOS+=1    END CASEREPEAT*IF WOBJ.DEBUG THEN PRINT "PARSEKEY: ":PARSEKEYRETURNEND00021FWOBJ.SKIPCHAR0c2SUBROUTINE WOBJ.SKIPCHAR(JSTR,INDEXPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: skip all whitespace************************************************************************INCLUDE WOBJ.INCLUDE*WS = " ()":TB:CR:LF:@AMLEN.JSTR=LEN(JSTR)LOOP WHILE INDEXPOS <= LEN.JSTR DO    IF INDEX(WS,JSTR[INDEXPOS,1],1) = 0 THEN EXIT    INDEXPOS += 1REPEATRETURNEND000837UDO.H0c2********************************************************************************   Header file for UDO BASIC programs***    Rocket Software Confidential*    OCO Source Materials*    Copyright Rocket Software, Inc.  2011****************************************************************************** UDO Status codes:EQU	UDO_SUCCESS			TO 			0EQU	UDO_ERROR			TO			-1EQU	UDO_INVALIDHANDLE 		TO			-2* UDO value types: EQU	UDO_FALSE			TO			0EQU	UDO_TRUE			TO			1EQU	UDO_NULL 			TO			2EQU	UDO_NUMBER			TO			3EQU	UDO_STRING			TO			4EQU	UDO_ARRAY			TO			5EQU	UDO_OBJECT			TO			6* UDO Error codes:EQU	UDOERROR_OUTOFMEMORY			TO		1EQU	UDOERROR_INVALIDJSON			TO		2EQU	UDOERROR_NOTSTANDALONE			TO		3EQU	UDOERROR_NOTFOUND			TO		4EQU	UDOERROR_INVALIDNAME			TO		5EQU	UDOERROR_NOTANOBJECT			TO		6EQU	UDOERROR_NOTANARRAY			TO		7EQU	UDOERROR_INVALIDINDEX			TO		8EQU	UDOERROR_OUTOFBOUND			TO		9EQU	UDOERROR_INVALIDOPTION			TO		10EQU	UDOERROR_INVALIDOPTIONVALUE		TO		11EQU	UDOERROR_OPTIONNOTSET			TO		12EQU	UDOERROR_INVALIDFORMAT			TO		13EQU	UDOERROR_INVALIDVALUE			TO		14EQU	UDOERROR_INVALIDTYPE			TO		15EQU	UDOERROR_REFERENCECYCLE			TO		16EQU 	UDOERROR_INVALIDXML			TO		17EQU 	UDOERROR_DOMAPIFAILURE			TO		18	* UDO flags:EQU	UDOFORMAT_JSON				TO		0EQU	UDOFORMAT_XML				TO		1* UDO options:EQU	UDOOPTION_UDO2XML_XMLSTYLE		TO	0EQU	UDOOPTION_UDO2XML_NAMESPACE		TO	1EQU	UDOOPTION_OUTPUTMODE			TO	2EQU	UDOOPTION_XML2UDO_INFERNUMBER		TO	3	EQU	UDOOPTION_XML2UDO_INFERBOOLEAN		TO	4	EQU	UDOOPTION_XML2UDO_INFERNULL	 	TO	5	EQU	UDOOPTION_XML2UDO_EMPTY2NULL	 	TO	6	EQU	UDOOPTION_XML2UDO_TRIMWHITESPACE	TO	7	EQU	UDOOPTION_XML2UDO_CASEINSENSITIVE	TO	8	EQU	UDOOPTION_XML2UDO_KEEPROOT		TO	9	EQU 	UDOOPTION_UDO2XML_ROOTNAME		TO	10	EQU 	UDOOPTION_UDO2XML_NULL2EMPTY		TO	11EQU 	UDOOPTION_UDO2XML_NAMESPACEPREFIX	TO	12	* UDO option values:	EQU	UDO_XMLSTYLE_ATTR			TO		"ATTRIBUTE"EQU	UDO_XMLSTYLE_ELEM			TO		"ELEMENT"EQU	UDO_OUTPUT_COMPACT      		TO		"COMPACT"EQU 	UDO_OUTPUT_FORMATTED    		TO		"FORMATTED"EQU	UDO_OPTION_ON				TO		"ON"EQU	UDO_OPTION_OFF				TO		"OFF"00030EWOBJ.PARSENULL0c2SUBROUTINE WOBJ.PARSENULL(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json null keyword************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""SAVE.INDEXPOS=INDEXPOS*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)IF OCONV(JSTR[INDEXPOS,4],"MCL") = "null" THEN    INDEXPOS+=4    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    C=JSTR[INDEXPOS,1]    IF INDEX(",]}",C,1)=0 THEN        * invalid terminator - not null    END ELSE        PARSESTRING="null"        RETURN    ENDENDPARSESTRING=""INDEXPOS=SAVE.INDEXPOSRETURNEND000741WOBJ.ARRAY.TOSTRING0c2SUBROUTINE WOBJ.ARRAY.TOSTRING(JSON,POS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert json array to string************************************************************************INCLUDE WOBJ.INCLUDE*JSON:="["; * START OUR STRINGINDENT.DEPTH+=1*IF PRETTIFY THEN JSON:=NLNUMBER.PARTS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,POS>IF WOBJ.DEBUG THEN PRINT "ARRAY.TOSTRING: POS=":POS:" NUMBER.PARTS=":NUMBER.PARTSFOR P=1 TO NUMBER.PARTS    PART.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,POS,P>    IF WOBJ.DEBUG THEN PRINT "ARRAY.TOSTRING: POS=":POS:" P=":P:" T=":PART.TYPE    IF PRETTIFY AND P=1 THEN JSON:=NL    CALL WOBJ.PRETTIFY.INDENT(JSON,POS)    BEGIN CASE        CASE PART.TYPE="S"            CALL WOBJ.STRING.TOSTRING(JSON,POS,P)        CASE PART.TYPE="B"            CALL WOBJ.BOOLEAN.TOSTRING(JSON,POS,P)        CASE PART.TYPE="D"            CALL WOBJ.NUMBER.TOSTRING(JSON,POS,P)        CASE PART.TYPE="N"            CALL WOBJ.NULL.TOSTRING(JSON,POS,P)        CASE PART.TYPE="O"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "OBJ FLINK=":PART.FLINK            CALL WOBJ.OBJECT.TOSTRING(JSON,PART.FLINK)        CASE PART.TYPE="A"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "FL=":PART.FLINK            CALL WOBJ.ARRAY.TOSTRING(JSON,PART.FLINK)    END CASE    IF P <> NUMBER.PARTS THEN        JSON:=", "        IF PRETTIFY THEN JSON:=NL    ENDNEXT P*IF PRETTIFY AND NUMBER.PARTS THEN    JSON:=NL    CALL WOBJ.PRETTIFY.INDENT(JSON,POS)ENDJSON:="]"*IF PRETTIFY THEN JSON:=NLINDENT.DEPTH-=1RETURNEND00066CWOBJ.ENCODE0c2SUBROUTINE WOBJ.ENCODE(IN.STR,OUT.STR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: encode json string*************************************************************************** THIS PROGRAM WILL CONVERT ALL BAD CHARACTERS TO AN ESCAPED CHARACTER***INCLUDE WOBJ.INCLUDE**OPEN 'RESULT.FILE' TO RFILE ELSE STOP* WE NEED TO ENCODE* " = \"   (34)* \ = \\    (92)* / = \/* CHAR(7) = \b* CHAR(13) = \r* char(10) = \n* char(12) = \f* char(9)  = \tOUT.STR=''L=LEN(IN.STR)CONVERT @AM TO LF IN IN.STR; * LETS SWITCH 254 TO LF BE DEFAULTFOR X=1 TO L    C=IN.STR[X,1]    SEQ.C=SEQ(C)    ENCODE=0    *IF SEQ.C < 32 THEN ENCODE=1; * BELOW SPACE    *IF SEQ.C > 32 AND SEQ.C < 48 THEN ENCODE=1; * LETS ENCODE ALL OF THIS !@$%^&*()    IF SEQ.C=34 THEN ENCODE=1    IF SEQ.C=92 THEN ENCODE=1    * IF SEQ.C=47 THEN ENCODE=1    *IF SEQ.C > 126 THEN ENCODE = 1; * LETS ENCODE ALL THE HIGH ENTRIES    *IF SEQ.C >= 91 AND SEQ.C <= 96 THEN ENCODE=1    IF ENCODE THEN        BEGIN CASE            CASE SEQ.C=7; OUT.STR='\b'            CASE C='\'; OUT.STR:='\\'                *CASE C='/'; OUT.STR:='\/'            CASE C='"'; OUT.STR:='\"'            CASE SEQ.C=10                OUT.STR:='\n'                IF PRETTIFYCR THEN OUT.STR:=NL            CASE SEQ.C=13; OUT.STR:='\r'            CASE SEQ.C=12; OUT.STR:='\f'            CASE 1; OUT.STR:='\u00':OCONV(C,'MX0C')        END CASE    END ELSE        OUT.STR=OUT.STR:C    ENDNEXT XRETURNEND0003B5WOBJ.PARSEBOOLEAN0c2SUBROUTINE WOBJ.PARSEBOOLEAN(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json boolean value************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)SAVE.INDEXPOS=INDEXPOSBEGIN CASE    CASE OCONV(JSTR[INDEXPOS,4],"MCL") = "true"        PARSESTRING="true"        INDEXPOS+=4    CASE OCONV(JSTR[INDEXPOS,5],"MCL") = "false"        PARSESTRING="false"        INDEXPOS+=5    CASE 1        * not boolean        INDEXPOS=SAVE.INDEXPOS        RETURNEND CASECALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)C=JSTR[INDEXPOS,1]IF INDEX(",]}",C,1)=0 THEN    * invalid terminator - not boolean    PARSESTRING=""    INDEXPOS=SAVE.INDEXPOSENDRETURNEND000873WOBJ.GET.UDO0c2SUBROUTINE WOBJ.GET.UDO(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: get json element value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: if specified node is an Object or Array, return*   a JSON string representation of the node.**************************************************************************   INCLUDE UDO.H         INCLUDE WOBJ.INCLUDECOMMON /WUDO.C/ UDO.OBJECTS(100),UDO.OBJECT.METADATA*VALUE=""IF 0 THEN; * TODO IF NODE="" THEN    CALL WOBJ.OBJECT.TOSTRING(VALUE,1) ; * Root object    RETURNENDEND* THIS WILL ACTUALLY RETURN BACK A UDOOBJECT INSTEAD OF A LINK POSITION,  NEED TO DETERMINE HOW TO DO THIS!!!CALL WOBJ.FINDNODE.UDO(NODE,NODEPOS,NODETYPE,PARTPOS,JUSTNODE,PARTTYPE,RERR)IF WOBJ.DEBUG THEN DEBUGIF NODEPOS > 0 AND PARTTYPE # "" THEN    OBJ.TYPE=PARTTYPE    *OBJ.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE NODETYPE="A"            UDOSTATUS=UDOARRAYGETITEM(UDO.OBJECTS(NODEPOS),PARTPOS+1,VALUE,UDOTYPE)            * DEBUG        CASE 1            UDOSTATUS=UDOGETPROPERTY(UDO.OBJECTS(NODEPOS),JUSTNODE,VALUE,UDOTYPE)            * THIS IS A DUPLICATE CALL, COULD WE STORE THE STRING INFORMATION INSIDE UDO.OBJECTS???            * CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)            IF WOBJ.DEBUG THEN DEBUG    END CASE    GOSUB convert.udoEND ELSE    VALUE="" ; * NODE NOT FOUND!ENDIF WOBJ.DEBUG THEN PRINT "WOBJ.GET: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" VALUE=":OBJ.TYPERETURNconvert.udo: *BEGIN CASE        CASE OBJ.TYPE="T"            VALUE="true"        CASE OBJ.TYPE="F"            VALUE="false"        CASE OBJ.TYPE="NULL"            VALUE="null"            RERR<3>='null'      CASE OBJ.TYPE='O' OR OBJ.TYPE='A'            STATUS=UDOWRITE(VALUE,UDOFORMAT_JSON,TMP.VALUE)            UDOSTATUS=UDOFREE(VALUE); * DESTROY THAT VARIABLE            VALUE=TMP.VALUEEND CASERETURNEND001224WOBJ.FINDNODE0c2SUBROUTINE WOBJ.FINDNODE(INNODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: find a json node in parsed object structure************************************************************************INCLUDE WOBJ.INCLUDE** NEED TO BREAK OUR NODE REQUEST UP INTO IT'S SEPERATE PARTS*RERR=""LASTNODE=""*OBJECT.SEPERATOR = "."NODES=INNODECONVERT OBJECT.SEPERATOR TO @AM IN NODES*NODEPOS=1; * WE ALWAYS START WITH THE FIRST ONE.PARTPOS=0; * START AS ZERO 6/19/2017 - PAPCHILDPOS=0;* SET WHEN OUR NODE IS AN OBJECT OR ARRAYPARTTYPE=""*NUMBER.NODES=DCOUNT(NODES,@AM)IF INDEX(NODES,"[",1) THEN* We need to trick this into seeing an array as another node level    ORIG.NODES=NODES    NODES=""    FOR A=1 TO NUMBER.NODES        NODE=ORIG.NODES<A>        IF INDEX(NODE,"[",1) THEN            NUMBER.ARRAYS = COUNT(NODE,"[")            ACTUAL.NODE=FIELD(NODE,"[",1)            NODES<-1>=ACTUAL.NODE            FOR B=1 TO NUMBER.ARRAYS                K=INDEX(NODE,"]",B)                NODES<-1>=NODE[1,K]            NEXT B        END ELSE            NODES<-1>=NODE        END    NEXT AENDNUMBER.NODES=DCOUNT(NODES,@AM)IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: number of parts in ":INNODE:": ":NUMBER.NODESFOR A=1 TO NUMBER.NODES    NODE=NODES<A>    LASTNODE=NODE    NODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEPOS>    IF WOBJ.DEBUG THEN PRINT "  part ":A:" key=":NODE:" pos=":NODEPOS:" type=":NODETYPE    BEGIN CASE        CASE NODETYPE="O"            JUSTNODE=FIELD(NODE,"[",1)            IF WOBJ.DEBUG THEN                PRINT "    locating ":JUSTNODE                PRINT "          in ":JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>                NUM.SUBS=DCOUNT(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>,CHAR(252))                PRINT 'NUM.SUBS=':NUM.SUBS            END            LOCATE JUSTNODE IN JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS> SETTING PARTPOS ELSE PARTPOS=0            IF NOT(PARTPOS) THEN                TEMP.NODE=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>                LOCATE JUSTNODE IN TEMP.NODE<1,1> SETTING PARTPOS ELSE PARTPOS=0                IF WOBJ.DEBUG THEN                    PRINT 'TEMP.NODE=':TEMP.NODE                    PRINT 'JUSTNODE=':JUSTNODE                    PRINT 'PARTPOS=':PARTPOS                END            END        CASE NODETYPE="A"            NUMBER.ARRAYS=COUNT(NODE,"[")            ST=INDEX(NODE,"[",NUMBER.ARRAYS)            EN=INDEX(NODE,"]",NUMBER.ARRAYS)            IF ST>1 AND EN>ST THEN                PARTPOS=NODE[ST+1,EN-ST-1]            END ELSE                PARTPOS=''            END            IF NOT((PARTPOS MATCHES '1N0N') OR (PARTPOS = '-1')) THEN                RERR=2                RERR<2>="Numeric subscript required for array element"                IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: ":RERR<2>                RETURN            END            IF PARTPOS<0 THEN PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> ;* ALLOW -1, SINCE WOBJ.SET USES THAT TO CREATE NEXT ELEMENT            PARTPOS += 1            IF PARTPOS > JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> THEN                IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: PARTPOS=":PARTPOS:" LEN=":JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>:" NODEPOS=":NODEPOS                PARTPOS=0            END    END CASE    IF NOT(PARTPOS) THEN        RERR=1        RERR<2>="Node ":NODE:" not found at level ":NODEPOS        IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: ":RERR<2>        RETURN    END    PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    IF (PARTTYPE="A" OR PARTTYPE="O") THEN        IF A=NUMBER.NODES THEN* RETURN CHILD OBJECT NODE POSITION            CHILDPOS=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>        END ELSE* FOLLOW FORWARD LINK TO CHILD NODE            NODEPOS=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>        END    END ELSE        IF A<>NUMBER.NODES THEN            RERR=1            RERR<2>="Node ":NODE:" not found at level ":NODEPOS            IF WOBJ.DEBUG THEN                PRINT "WOBJ.FINDNODE: ":RERR<2>                PRINT "    Node type ":PARTTYPE:" cannot have properties or array elements"            END            RETURN        END    ENDNEXT AIF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: nodepos=":NODEPOS:" partpos=":PARTPOS:" type=":PARTTYPE:" childpos=":CHILDPOSRETURNEND001968WOBJ.SET0c2SUBROUTINE WOBJ.SET(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: set json node to value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: allow Object and Array properties to be set, passing*   a JSON string representation of the node.************************************************************************INCLUDE WOBJ.INCLUDE*IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: NODE=":NODE:" ACTION=":ACTION*SACTION=FIELD(ACTION,".",2)IF NODE="" THEN    IF SACTION <> "OBJECT" THEN            RERR=1        RERR<2>="Node cannot be null"    END ELSE        CALL WOBJ.PARSE(VALUE,NEWOBJ)        IF PSERRORS#"" THEN            RERR=2            RERR<2> = PSERRORS            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET.OBJECT: parse failure: ":RERR<2>        END    END            RETURNEND*CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" LASTNODE=":LASTNODE:" RERROR=":RERR<2>*IF NOT(NODEPOS) THEN    RERR=1    RERR<2>="Node not found"    RETURNEND** CHECK THE NODE WE ARE SETTING PROPERTY TONODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEPOS>IF NODETYPE#"O" AND NODETYPE#"A" THEN    RERR=1    RERR<2>="Parent node must be an object or array"    RETURNEND*IGNORE.RERR=""IF NODETYPE="O" THEN PARTKEY=LASTNODE ELSE PARTKEY=""*IF NOT(PARTPOS) THEN* ENSURE PARENT NODE EXISTS    NUM.PARTS=DCOUNT(NODE,".")    FINAL.NODE=FIELD(NODE,".",NUM.PARTS)    IF INDEX(FINAL.NODE,"[",1) THEN        NUMBER.ARRAYS=COUNT(FINAL.NODE,"[")        PARENT.NODE=NODE[1,LEN(NODE)-LEN(FINAL.NODE)+INDEX(FINAL.NODE,"[",NUMBER.ARRAYS)-1]    END ELSE        NUMBER.ARRAYS=0        PARENT.NODE=NODE[1,LEN(NODE)-LEN(FINAL.NODE)-1]    END    IF NUM.PARTS > 1 OR NUMBER.ARRAYS > 0 THEN        CALL WOBJ.FINDNODE(PARENT.NODE,PARENT.NODEPOS,PARENT.PARTPOS,PARENT.CHILDPOS,PARENT.LASTNODE,"")        IF NOT(PARENT.PARTPOS) THEN            RERR=1            RERR<2>="Parent node not found"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END    END** WE NEED TO ADD A NEW ELEMENT    IF NODETYPE="O" THEN        PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>        PARTPOS += 1        JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>=PARTPOS        CALL WOBJ.SET.PART(NODEPOS,PARTPOS,"N",PARTKEY,"",IGNORE.RERR) ; * DUMMY NULL ELEMENT WILL BE REPLACED IN FINAL WOBJ.SET.PART CALL    END ELSE        NUMBER.ARRAYS=COUNT(LASTNODE,"[")        ST=INDEX(LASTNODE,"[",NUMBER.ARRAYS)        EN=INDEX(LASTNODE,"]",NUMBER.ARRAYS)        IF ST>1 AND EN>ST THEN            PARTPOS=LASTNODE[ST+1,EN-ST-1]        END ELSE            PARTPOS=''        END        IF NOT((PARTPOS MATCHES '1N0N') OR (PARTPOS = '-1')) THEN            RERR=2            RERR<2>="Numeric subscript required for setting array element"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END        IF PARTPOS<0 THEN            PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>+1        END ELSE            PARTPOS += 1 ; * ZERO-BASED ARRAY INDEX -> 1 BASED PARTPOS        END        LASTPARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>+1        FOR P=LASTPARTPOS TO PARTPOS            CALL WOBJ.SET.PART(NODEPOS,P,"N",PARTKEY,"",IGNORE.RERR)        NEXT P        IF PARTPOS>JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> THEN            JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>=PARTPOS        END    ENDEND*PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: PARTTYPE=":PARTTYPE*IF PARTTYPE="O" OR PARTTYPE="A" THEN** DELETE NESTED NODE BEFORE SETTING NEW VALUE    IF NODETYPE="A" THEN** ARRAYS ARE SPECIAL, BECAUSE WE DO NOT WANT TO DELETE THE ARRAY POSITION* THAT WE ARE SETTING, WHICH WILL SLIDE THE ARRAY DOWN BY ONE. INSTEAD,* INSERT A NULL ELEMENT AFTER THE ONE WE NEED TO DELETE, THEN AFTER* DELETING, WE CAN SIMPLY REPLACE THE NULL NODE.*        JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,NODEPOS,PARTPOS+1,"N")        JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> += 1    END*    CALL WOBJ.DELETE("DELETE",NODE,"",IGNORE.RERR)* BECAUSE DELETING MAY ALTER JSONOBJECT STRUCTURE, REFRESH NODEPOS & PARTPOS    CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,IGNORE.RERR)    IF NODETYPE="O" THEN        IF PARTPOS=0 THEN            PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>            PARTPOS += 1            JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>=PARTPOS            CALL WOBJ.SET.PART(NODEPOS,PARTPOS,"N",PARTKEY,"",IGNORE.RERR)        END ELSE            RERR=2            RERR<2>="While setting node ":NODE:", existing object was deleted, yet it is still here!"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END    END ELSE        IF PARTPOS=0 THEN            RERR=2            RERR<2>="While setting node ":NODE:", existing array element was deleted, but dummy element is missing!"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END    ENDEND** NOW WE ARE SAFE TO SET NEW VALUEBEGIN CASE    CASE SACTION="ARRAY" OR SACTION="OBJECT"        PARTTYPE=SACTION[1,1]    CASE SACTION="NULL"        PARTTYPE="N"    CASE SACTION="NUMBER"        PARTTYPE="D"    CASE SACTION="BOOLEAN"        PARTTYPE="B"    CASE SACTION="STRING" OR SACTION=""        PARTTYPE="S"    CASE 1        RERR=1        RERR<2>="Unknown value type ":SACTION:", assume STRING"        PARTTYPE="S"END CASECALL WOBJ.SET.PART(NODEPOS,PARTPOS,PARTTYPE,PARTKEY,VALUE,RERR)RETURNEND001A97WOBJ.FINDNODE.UDO0c2      SUBROUTINE WOBJ.FINDNODE.UDO(INNODE,NODEPOS,NODETYPE,PARTPOS,JUSTNODE,PARTTYPE,RERR)      **********************************************************************      *      * Copyright (C) 2017 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: December 2017      * Description: find a json node in parsed object structure      *      **********************************************************************      ***      INCLUDE WOBJ.INCLUDE            * FIRST LETS INIT OUR TEMPORARY STORAGE AREA FOR UDO OBJECTS            COMMON /WUDO.C/ UDO.OBJECTS(100),UDO.OBJECT.METADATA            *MAT UDO.OBJECTS=""      *UDO.OBJECT.METADATA=""            *      * NEED TO BREAK OUR NODE REQUEST UP INTO IT'S SEPERATE PARTS      *      RERR=""      LASTNODE=""      *      OBJECT.SEPERATOR = "."      NODES=INNODE      CONVERT OBJECT.SEPERATOR TO @AM IN NODES      *      NODEPOS=1; * WE ALWAYS START WITH THE FIRST ONE.      PARTPOS=0; * START AS ZERO 6/19/2017 - PAP      CHILDPOS=0;* SET WHEN OUR NODE IS AN OBJECT OR ARRAY      PARTTYPE=""      *      NUMBER.NODES=DCOUNT(NODES,@AM)      IF INDEX(NODES,"[",1) AND 1 THEN         * We need to trick this into seeing an array as another node level         ORIG.NODES=NODES         NODES=""         FOR A=1 TO NUMBER.NODES            NODE=ORIG.NODES<A>            IF INDEX(NODE,"[",1) THEN               NUMBER.ARRAYS = COUNT(NODE,"[")               ACTUAL.NODE=FIELD(NODE,"[",1)               NODES<-1>=ACTUAL.NODE               FOR B=1 TO NUMBER.ARRAYS                  K=INDEX(NODE,"]",B)                  NODES<-1>=NODE[1,K]               NEXT B            END ELSE               NODES<-1>=NODE            END         NEXT A      END      NUMBER.NODES=DCOUNT(NODES,@AM)      IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE.UDO: number of parts in ":INNODE:": ":NUMBER.NODES      FOR A=1 TO NUMBER.NODES         NODE=NODES<A>         LASTNODE=NODE         JUSTNODE=FIELD(NODE,"[",1)         *NODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEPOS>         UDOSTATUS=UDOGETTYPE(UDO.OBJECTS(A), UDOTYPE)         GOSUB convert.udotype         NODETYPE=UDOTYPE         UDO.OBJECT.METADATA<A,2>=NODETYPE         UDO.OBJECT.METADATA<A,3>=JUSTNODE         IF WOBJ.DEBUG THEN PRINT "  part ":A:" key=":NODE:" pos=":NODEPOS:" type=":NODETYPE                  BEGIN CASE            CASE NODETYPE="O"               JUSTNODE=FIELD(NODE,"[",1)               IF WOBJ.DEBUG THEN                  PRINT "    locating ":JUSTNODE                  PRINT "          in ":JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>               END               UDOSTATUS=UDOGETPROPERTY(UDO.OBJECTS(A),JUSTNODE,TMPOBJECT,UDOTYPE)               *UDOSTATUS=UDOGETTYPE(UDO.OBJECTS(A), UDOTYPE)               GOSUB convert.udotype               * NEED TO SET PARTPOS AND PARTTYPE               PARTTYPE = UDOTYPE               IF UDOSTATUS < 0 THEN                   PARTPOS=0                  TMPOBJECT=""               END ELSE                  PARTPOS=1               END               UDO.OBJECTS(A+1)=TMPOBJECT        IF WOBJ.DEBUG THEN PRINT "udostatus=":UDOSTATUS:" A=":A:" TMPOBJECT=":A; INPUT WAIT               NODEPOS=A               IF WOBJ.DEBUG THEN DEBUG            CASE NODETYPE="A"               NUMBER.ARRAYS=COUNT(NODE,"[")               ST=INDEX(NODE,"[",NUMBER.ARRAYS)               EN=INDEX(NODE,"]",NUMBER.ARRAYS)               IF ST>1 AND EN>ST THEN                  PARTPOS=NODE[ST+1,EN-ST-1]               END ELSE                  PARTPOS=''               END                        IF NOT((PARTPOS MATCHES '1N0N') OR (PARTPOS = '-1')) THEN                  RERR=2                  RERR<2>="Numeric subscript required for array element"                  IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: ":RERR<2>                  RETURN               END               *IF WOBJ.DEBUG THEN DEBUG               *IF PARTPOS<0 THEN PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> ;* ALLOW -1, SINCE WOBJ.SET USES THAT TO CREATE NEXT ELEMENT               *PARTPOS += 1               *IF PARTPOS > JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> THEN               *   IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE.UDO: PARTPOS=":PARTPOS:" LEN=":JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>:" NODEPOS=":NODEPOS               *   PARTPOS=0               *END               NODEPOS=A               IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE.UDO NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS               PARTTYPE=""               IF PARTPOS # "" THEN                  UDOSTATUS=UDOARRAYGETITEM(UDO.OBJECTS(A),PARTPOS+1,TMPOBJECT,UDOTYPE)                  GOSUB convert.udotype                  PARTTYPE=UDOTYPE                  UDO.OBJECTS(A+1)=TMPOBJECT                  UDO.OBJECT.METADATA<A+1,2>=PARTTYPE                  UDO.OBJECT.METADATA<A+1,3>=JUSTNODE                  UDO.OBJECT.METADATA<A+1,4>=PARTPOS               END               *IF WOBJ.DEBUG THEN DEBUG         END CASE         IF 1 THEN            IF UDOSTATUS < 0 THEN               RERR=1               RERR<2>="Node ":NODE:" not found at level ":NODEPOS               IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: ":RERR<2>               RETURN            END            *PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>            IF 1 THEN            IF (PARTTYPE="A" OR PARTTYPE="O") THEN               IF A=NUMBER.NODES THEN                  * RETURN CHILD OBJECT NODE POSITION                  *CHILDPOS=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>               END ELSE                  * FOLLOW FORWARD LINK TO CHILD NODE                  *NODEPOS=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>                  *NODEPOS+=1;**** NEED TO FIGURE OUT               END            END ELSE               IF A<>NUMBER.NODES THEN                  RERR=1                  RERR<2>="Node ":NODE:" not found at level ":NODEPOS                  IF WOBJ.DEBUG THEN                     PRINT "WOBJ.FINDNODE: ":RERR<2>                     PRINT "    Node type ":PARTTYPE:" cannot have properties or array elements"                  END                  RETURN               END            END            END         END      NEXT A      IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: nodepos=":NODEPOS:" partpos=":PARTPOS:" type=":PARTTYPE:" childpos=":CHILDPOS      RETURNconvert.udotype: *BEGIN CASE   CASE UDOTYPE="0"; UDOTYPE="F"   CASE UDOTYPE="1"; UDOTYPE="T"   CASE UDOTYPE="2"; UDOTYPE="NULL"   CASE UDOTYPE="3"; UDOTYPE="N"   CASE UDOTYPE="4"; UDOTYPE="S"   CASE UDOTYPE="5"; UDOTYPE="A"   CASE UDOTYPE="6"; UDOTYPE="O"   CASE 1; UDOTYPE=""END CASERETURN000E1FWOBJ.SET.PART0c2SUBROUTINE WOBJ.SET.PART(NODEPOS,PARTPOS,PARTTYPE,PARTKEY,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: set json part value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: allow Object and Array properties to be set, passing*   a JSON string representation of the node.************************************************************************INCLUDE WOBJ.INCLUDE*ENCODING=""FLINK=""* VALIDATE THE VALUE DATABEGIN CASE    CASE PARTTYPE="O" OR PARTTYPE="A"        OUT.VALUE=""    CASE PARTTYPE="N"        OUT.VALUE=""        IF VALUE#"" THEN            RERR=1            RERR<2>="Value ignored for NULL property"        END    CASE PARTTYPE="D"        OUT.VALUE=VALUE        IF VALUE="" THEN            OUT.VALUE=0        END ELSE            IF NOT(NUM(VALUE)) THEN                RERR=1                RERR<2>="Non-numeric value for NUMBER property; zero used"                OUT.VALUE=0            END        END    CASE PARTTYPE="B"        OUT.VALUE=OCONV(VALUE,"MCL")        IF OUT.VALUE#"true" AND OUT.VALUE#"false" THEN            RERR=1            RERR<2>="Invalid boolean value: must be true or false; false used"            OUT.VALUE="false"        END            CASE 1        ENCODING="H"        BEGIN CASE            CASE INDEX(VALUE,@AM,1)            CASE INDEX(VALUE,@VM,1)            CASE INDEX(VALUE,@SVM,1)            CASE INDEX(VALUE,LF,1)            CASE INDEX(VALUE,CR,1)            CASE 1                ENCODING="A"                OUT.VALUE=VALUE        END CASE        IF ENCODING="H" THEN OUT.VALUE=OCONV(VALUE,"MX0C")END CASE*IF PARTTYPE="O" OR PARTTYPE="A" THEN* SET UP THE NEW OBJECT    FLINK=JSONOBJECT(JSONOBJECT$NODECNTR)+1    IF VALUE="" THEN        JSONOBJECT(JSONOBJECT$NODECNTR)=FLINK ; * UPDATE NODE COUNT FOR NULL OBJECT    END ELSE* PARSE OBJECT OR ARRAY                MATBUILD SAVEJSONOBJECT FROM JSONOBJECT ; * SAVE CURRENT OBJECT IN CASE OF PARSE FAILURE        INDEXPOS=1        IF PARTTYPE="O" THEN            CALL WOBJ.PARSEOBJECT(VALUE,INDEXPOS,PARSERESULT)        END ELSE            CALL WOBJ.PARSEARRAY(VALUE,INDEXPOS,PARSERESULT)        END        IF PARSERESULT="" THEN            RERR=2            IF PARTTYPE="O" THEN                RERR<2>="Object parse failure"            END ELSE                RERR<2>="Array parse failure"            END        END ELSE* MAKE SURE WE CONSUMED ENTIRE JSTR            CALL WOBJ.SKIPCHAR(VALUE,INDEXPOS)            IF INDEXPOS <= LEN(VALUE) THEN                RERR=2                RERR<2>="Extra data (":(LEN(VALUE)-INDEXPOS+1):" characters) after final close brace ignored"            END                    END        IF RERR<1> >= 2 THEN* OBJECT OR ARRAY PARSE ERROR            MATPARSE JSONOBJECT FROM SAVEJSONOBJECT            PARTTYPE="N"            FLINK=""        END    ENDEND* SET THE PART PROPERTIESJSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>        =    PARTTYPEJSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS,PARTPOS>         =    PARTKEYJSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEPOS,PARTPOS>       =    OUT.VALUEJSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEPOS,PARTPOS>    =    ENCODINGJSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>       =    FLINKIF WOBJ.DEBUG THEN PRINT "WOBJ.SET.PART: T=":PARTTYPE:" K=":PARTKEY:" E=":ENCODING:" OUT.VALUE=":OUT.VALUE*RETURNEND001BCCWOBJ.UDO0c2      SUBROUTINE WOBJ.UV(PASSEDOBJ,ACTION,NODE,VALUE,OPTIONS,RERR)      **********************************************************************      *      * Copyright (C) 2017 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: December 2017      * Description: WOBJ json library main routine      *      * Updated: 3/3/2019 by Peter Schellenbach, Zumasys      *      **********************************************************************      *      INCLUDE UDO.H            INCLUDE WOBJ.INCLUDE            COMMON /WOBJD/ COMMON.WOBJ.DEBUG            IF UNASSIGNED(COMMON.WOBJ.DEBUG) THEN COMMON.WOBJ.DEBUG=0            * This common is a storage area to store udo objects as we      * traverse into a multi-level object            COMMON /WUDO.C/ UDO.OBJECTS(100),UDO.OBJECTS.METADATA            MAT UDO.OBJECTS=""      UDO.OBJECTS.METADATA=""      *      IF INDEX(OPTIONS,"PRETTIFY",1) THEN PRETTIFY=1 ELSE PRETTIFY=0      IF INDEX(OPTIONS,"PRETTIFYCR",1) THEN PRETTIFYCR=1 ELSE PRETTIFYCR=0      IF INDEX(OPTIONS,"DEBUG",1) THEN WOBJ.DEBUG=1 ELSE WOBJ.DEBUG=0      *      IF COMMON.WOBJ.DEBUG THEN WOBJ.DEBUG=1    IF WOBJ.DEBUG THEN       OPEN "RESULT.FILE" TO RFILE ELSE STOP       DREC=ACTION       DREC<2>=NODE       WRITE DREC ON RFILE, 'OBJ.DEBUG'    END*PRINT 'WOBJ.DEBUG=':WOBJ.DEBUG:'  ':COMMON.WOBJ.DEBUG            PLATFORM='UV'      WOBJ.VERSION='2.0.UDO'         *      MAT JSONOBJECT = ""      RERR=""      INDENT.DEPTH=0      *      BEGIN CASE         CASE ACTION="FROMSTRING"            * THIS EXISTS EARLIER DUE TO MATPARSE BELOW            * UDO WILL FLOW UP IF YOU SEND ANY @AM IN THE DATA            CONVERT CHAR(254) TO '' IN VALUE            UDOSTATUS=UDOREAD(VALUE, 0, PASSEDOBJ)            IF UDOSTATUS # UDO_SUCCESS  "" THEN               RERR=2               RERR<2> = UDOSTATUS            END            IF WOBJ.DEBUG THEN PRINT "WOBJ: FROMSTRING ACTION: VALUE=":VALUE:" RERR=":RERR<2>            RETURN         CASE ACTION="VERSION"            VALUE=WOBJ.VERSION            RETURN      END CASE      *      *MATPARSE JSONOBJECT FROM PASSEDOBJ      *      UDO.OBJECTS(1)=PASSEDOBJ      UDO.OBJECTS.METADATA<1>="MAIN"      IF WOBJ.DEBUG THEN PRINT "ACTION=":ACTION,NODE      BEGIN CASE         CASE ACTION="TOSTRING"            VALUE=""            IF NODE # "" THEN               RERR=1               RERR<2>="Node ignored - returning the root node"               IF WOBJ.DEBUG THEN PRINT "WOBJ: TOSTRING ACTION: NODE ":NODE:" IGNORED"            END            STATUS=UDOWRITE(PASSEDOBJ,UDOFORMAT_JSON,VALUE)         CASE ACTION="GET"            GOSUB action.get         CASE FIELD(ACTION,".",1)="SET"            GOSUB action.set         CASE ACTION="DELETE"            GOSUB action.delete         CASE ACTION="KEYS"            GOSUB action.keys         CASE ACTION="LENGTH" OR ACTION="SIZE"            GOSUB action.length         CASE ACTION="TYPE"            GOSUB action.type         CASE ACTION="DESTROY"            GOSUB action.destroy         CASE 1            VALUE=""            RERR=1            RERR<2>="Invalid action '":ACTION:"'"            IF WOBJ.DEBUG THEN PRINT "WOBJ: INVALID ACTION: ":ACTION      END CASE      *      *NUM.ENTRIES=DCOUNT(UDO.OBJECTS.METADATA,@VM)      *FOR V=1 TO NUM.ENTRIES      *   UDOSTATUS=UDOFREE(UDO.OBJECTS(V))      *   IF WOBJ.DEBUG THEN PRINT V,UDOSTATUS      *NEXT V            MAT UDO.OBJECTS=""      UDO.OBJECTS.METADATA=""                        *MATBUILD PASSEDOBJ FROM JSONOBJECT      *      RETURN      *action.get: *      CALL WOBJ.GET.UDO(ACTION,NODE,VALUE,RERR)      RETURN      *action.set: *      CALL WOBJ.SET.UDO(ACTION,NODE,VALUE,RERR)      RETURN      *action.delete: *      CALL WOBJ.FINDNODE.UDO(NODE,NODEPOS,NODETYPE,PARTPOS,JUSTNODE,PARTTYPE,RERR)      UDOSTATUS=""      VALUE=""      BEGIN CASE         CASE NODETYPE='A'         CASE NODETYPE='O'            UDOSTATUS=UDODELETEPROPERTY(UDO.OBJECTS(NODEPOS), JUSTNODE)      END CASE      IF WOBJ.DEBUG THEN PRINT "WOBJ: DELETE ACTION: ":NODE:" NODEPOS=":NODEPOS:" ":NODETYPE:" PARTTYPE=":PARTTYPE:" PARTPOS=":PARTPOS:" UDOSTATUS=":UDOSTATUS:" RERR=":RERR<2>       *     CALL WOBJ.DELETE(ACTION,NODE,VALUE,RERR)      RETURN      *action.keys: *      CALL WOBJ.FINDNODE.UDO(NODE,NODEPOS,NODETYPE,PARTPOS,JUSTNODE,PARTTYPE,RERR)      UDOSTATUS=""      VALUE=""      BEGIN CASE         CASE PARTTYPE='O'            UDOSTATUS=UDOGETPROPERTYNAMES(UDO.OBJECTS(NODEPOS+1),PROPNAMES)            IF UDOSTATUS >=0 THEN               UDOSTATUS2=UDOARRAYGETSIZE(PROPNAMES,NUM.PROPERTIES)               FOR S=1 TO NUM.PROPERTIES                  UDOSTATUS3=UDOARRAYGETITEM(PROPNAMES,S,PROP.NAME,TEMP.UDO.TYPE)                  VALUE<1,1,-1>=PROP.NAME               NEXT S               UDOSTATUS=UDOFREE(PROPNAMES)            END         CASE 1            VALUE=1      END CASE        IF WOBJ.DEBUG THEN PRINT "WOBJ: LENGTH ACTION: ":NODE:" NODEPOS=":NODEPOS:" ":NODETYPE:" PARTTYPE=":PARTTYPE:" PARTPOS=":PARTPOS:" UDOSTATUS=":UDOSTATUS:" LENGTH=":VALUE:" RERR=":RERR<2>      RETURN      *action.length: *      CALL WOBJ.FINDNODE.UDO(NODE,NODEPOS,NODETYPE,PARTPOS,JUSTNODE,PARTTYPE,RERR)      UDOSTATUS=""      VALUE=1      BEGIN CASE         CASE PARTTYPE="A"            UDOSTATUS=UDOARRAYGETSIZE(UDO.OBJECTS(NODEPOS+1),VALUE); * WE ADD ONE TO GET TO THE ACTUAL ARRAY         CASE PARTTYPE='O'            UDOSTATUS=UDOGETPROPERTYNAMES(UDO.OBJECTS(NODEPOS+1),PROPNAMES)            IF UDOSTATUS >=0 THEN               UDOSTATUS2=UDOARRAYGETSIZE(PROPNAMES,VALUE)               UDOSTATUS=UDOFREE(PROPNAMES)            END         CASE 1            VALUE=1      END CASE        IF WOBJ.DEBUG THEN PRINT "WOBJ: LENGTH ACTION: ":NODE:" NODEPOS=":NODEPOS:" ":NODETYPE:" PARTTYPE=":PARTTYPE:" PARTPOS=":PARTPOS:" UDOSTATUS=":UDOSTATUS:" LENGTH=":VALUE:" RERR=":RERR<2>      RETURN      *action.type: *      CALL WOBJ.FINDNODE.UDO(NODE,NODEPOS,NODETYPE,PARTPOS,JUSTNODE,PARTTYPE,RERR)      IF PARTPOS THEN         BEGIN CASE            CASE PARTTYPE='O'               VALUE='OBJECT'            CASE PARTTYPE='A'               VALUE='ARRAY'            CASE PARTTYPE='D'               VALUE='NUMBER'            CASE PARTTYPE='S'               VALUE='STRING'            CASE PARTTYPE='N'               VALUE='NULL'            CASE PARTTYPE='B'               VALUE='BOOLEAN'            CASE 1               VALUE='UNKNOWN'         END CASE      END ELSE         IF NODE="" THEN            VALUE="OBJECT"         END ELSE            VALUE="UNDEFINED" ;* NODE NOT FOUND!         END      END      IF WOBJ.DEBUG THEN PRINT "WOBJ: TYPE ACTION: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" TYPE=":VALUE:" RERR=":RERR<2>      RETURN      *      action.destroy: *   UDOSTATUS=UDOFREE(PASSEDOBJ)   IF UDOSTATUS = 0 THEN NULL ELSE      RERR<1>=1      RERR<2>='Error destroying object (':UDOSTATUS:')'   END      RETURNEND001A13WOBJ.DELETE0c2SUBROUTINE WOBJ.DELETE(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: delete a json node in parsed object structure************************************************************************INCLUDE WOBJ.INCLUDE*VALUE=""DONE=0LOOP    CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)    IF WOBJ.DEBUG THEN PRINT "WOBJ.DELETE: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" RERROR=":RERR<2>    IF NOT(NODEPOS) OR NOT(PARTPOS) THEN        RERR=1        RERR<2>="Node not found"        RETURN    END        NODETYPE = JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE NODETYPE = 'O' AND CHILDPOS > 0* DELETE NESTED OBJECTS BEFORE DELETING PARENT NODE            NEST.COUNT = 0            NUM.PARTS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,CHILDPOS>            FOR I=1 TO NUM.PARTS                PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,CHILDPOS,I>                IF PARTTYPE = 'O' OR PARTTYPE = 'A' THEN                    PARTKEY=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,CHILDPOS,I>                    CALL WOBJ.DELETE(ACTION,NODE:".":PARTKEY,VALUE,RERR)                    NEST.COUNT += 1                    EXIT ;* AFTER MODIFYING THE JSONOBJECT STRUCTURE, NEED TO CALL FINDNODE AGAIN                END            NEXT I            IF NEST.COUNT = 0 THEN* DELETE OBJECT NODE                JSONOBJECT(JSONOBJECT$NODETYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODETYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODELENGTH)=DELETE(JSONOBJECT(JSONOBJECT$NODELENGTH),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODECNTR) -= 1* ADJUST LINKS TO ACCOUNT FOR DELETED NODE                NUM.NODES = JSONOBJECT(JSONOBJECT$NODECNTR)                FOR I = 1 TO NUM.NODES                    NUM.PARTS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,I>                    FOR J = 1 TO NUM.PARTS                        FLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J>                        IF FLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J> = FLINK - 1                        END                        BLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J>                        IF BLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J> = BLINK - 1                        END                    NEXT J                NEXT I                DONE = 1            END        CASE NODETYPE = 'A' AND CHILDPOS > 0* DELETE NESTED OBJECTS BEFORE DELETING PARENT NODE            NEST.COUNT = 0            NUM.ELEMS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,CHILDPOS>            FOR I = 1 TO NUM.ELEMS                PARTTYPE = JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,CHILDPOS,I>                IF PARTTYPE = 'O' OR PARTTYPE = 'A' THEN* DELETE NESTED OBJECTS BEFORE DELETING PARENT NODE                    CALL WOBJ.DELETE(ACTION,NODE:"[":(I-1):"]",VALUE,RERR)                    NEST.COUNT += 1                    EXIT ;* AFTER MODIFYING THE JSONOBJECT STRUCTURE, NEED TO CALL FINDNODE AGAIN                END            NEXT I* AFTER MODIFYING THE JSONOBJECT STRUCTURE, NEED TO CALL FINDNODE AGAIN            IF NEST.COUNT = 0 THEN* DELETE ARRAY NODE                JSONOBJECT(JSONOBJECT$NODETYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODETYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODELENGTH)=DELETE(JSONOBJECT(JSONOBJECT$NODELENGTH),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODECNTR) -= 1* ADJUST LINKS TO ACCOUNT FOR DELETED NODE                NUM.NODES = JSONOBJECT(JSONOBJECT$NODECNTR)                FOR I = 1 TO NUM.NODES                    NUM.PARTS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,I>                    FOR J = 1 TO NUM.PARTS                        FLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J>                        IF FLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J> = FLINK - 1                        END                        BLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J>                        IF BLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J> = BLINK - 1                        END                    NEXT J                NEXT I                DONE = 1            END        CASE 1            DONE = 1    END CASEUNTIL DONE DO REPEAT* DELETE SIMPLE NODEJSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> -= 1*RETURNEND000EB5WOBJ.SET.UDO0c2      SUBROUTINE WOBJ.SET.UDO(ACTION,NODE,VALUE,RERR)      **********************************************************************      *      * Copyright (C) 2017 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: December 2017      * Description: set json node to value      *      * Modified by: Peter Schellenbach, Zumasys      * Date: January 2018      * Description: allow Object and Array properties to be set, passing      *   a JSON string representation of the node.      *      **********************************************************************      *      INCLUDE WOBJ.INCLUDE      *INCLUDE UNIVERSE.INCLUDE UDO.H            *$INCLUDE INCLUDE UDO.H      INCLUDE UDO.H            COMMON /WUDO.C/ UDO.OBJECTS(100),UDO.OBJECT.METADATA      *      IF WOBJ.DEBUG THEN PRINT "WOBJ.SET.UDO: NODE=":NODE:" ACTION=":ACTION      *      SACTION=FIELD(ACTION,".",2)      IF 0 THEN         IF NODE="" THEN            IF SACTION <> "OBJECT" THEN               RERR=1               RERR<2>="Node cannot be null"            END ELSE               CALL WOBJ.PARSE(VALUE,NEWOBJ)               IF PSERRORS#"" THEN                  RERR=2                  RERR<2> = PSERRORS                  IF WOBJ.DEBUG THEN PRINT "WOBJ.SET.OBJECT: parse failure: ":RERR<2>               END            END            RETURN         END      END      *      CALL WOBJ.FINDNODE.UDO(NODE,NODEPOS,NODETYPE,PARTPOS,JUSTNODE,PARTTYPE,RERR)      IF WOBJ.DEBUG THEN PRINT "WOBJ.SET.UDO: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" NODETYPE=":NODETYPE:" PARTTYPE=":PARTTYPE:" RERROR=":RERR<2>      *      LASTNODE=""; * WE MAY NEED THIS!!      IF NOT(NODEPOS) THEN         RERR=1         RERR<2>="Node not found"         RETURN      END      *      * CHECK THE NODE WE ARE SETTING PROPERTY TO      * NODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEPOS>      IF NODETYPE#"O" AND NODETYPE#"A" THEN         RERR=1         RERR<2>="Parent node must be an object or array"         RETURN      END      *      IGNORE.RERR=""      *** THIS MAY BE NEEDED TO IDENTIFY OUR LAST NODE!!!      *      * NOW WE ARE SAFE TO SET NEW VALUE      UDOVALUE=""      BEGIN CASE         CASE SACTION="OBJECT"            IF VALUE="" THEN VALUE="{}"            UDOSTATUS=UDOREAD(VALUE,UDOFORMAT_JSON,UDOVALUE)         CASE SACTION="ARRAY"            IF VALUE="" THEN VALUE="[]"            UDOSTATUS=UDOREAD(VALUE,UDOFORMAT_JSON,UDOVALUE)         CASE SACTION="NULL"            UDOSTATUS=UDOCREATE(UDO_NULL,UDOVALUE)         CASE SACTION="BOOLEAN"            IF OCONV(VALUE[1,1],"MCU") = "T" OR VALUE=0 THEN               UDOSTATUS=UDOCREATE(UDO_TRUE,UDOVALUE)            END ELSE               UDOSTATUS=UDOCREATE(UDO_FALSE,UDOVALUE)            END         CASE SACTION="STRING" OR SACTION=""            UDOVALUE=VALUE:""         CASE SACTION="NUMBER"            UDOVALUE=VALUE+0         CASE 1            UDOVALUE=VALUE:""      END CASE      UDOSTATUS=UDOGETTYPE(UDOVALUE,THIS.UDOTYPE)         IF WOBJ.DEBUG THEN PRINT "WOBJ.SET.UDO: SET PARTTYPE=":PARTTYPE:" JUSTNODE=":JUSTNODE:" SACTION: ":SACTION:" THIS.UDOTYPE=":THIS.UDOTYPE; DEBUG      BEGIN CASE         CASE NODETYPE="O"            UDOSTATUS=UDOSETPROPERTY(UDO.OBJECTS(NODEPOS),JUSTNODE,UDOVALUE)         CASE NODETYPE='A' AND PARTPOS=-1            UDOSTATUS=UDOARRAYAPPENDITEM(UDO.OBJECTS(NODEPOS),UDOVALUE)         CASE NODETYPE='A'            UDOSTATUS=UDOARRAYSETITEM(UDO.OBJECTS(NODEPOS),PARTPOS+1, UDOVALUE)      END CASE      IF WOBJ.DEBUG THEN PRINT "WOBJ.SET.UDO: UDOSTATUS=":UDOSTATUS      *CALL WOBJ.SET.PART(NODEPOS,PARTPOS,PARTTYPE,PARTKEY,VALUE,RERR)      RETURN      END001C67WOBJ.TEST0c2************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: WOBJ.TEST - QC Testing tool for WOBJ************************************************************************* Build test json to parse*INCLUDE WOBJ.CHOOSE.WOBJJSON =  \{\JSON := \ "stringtest":"stringtestvalue",\JSON := \ "numbertest": 100.12,\JSON := \ "booleantesttrue": True, \JSON := \ "booleantestfalse": False, \JSON := \ "nulltest": null \JSON := \}\** Lets build the objCALL @WOBJ.RTNE(TESTOBJ,"VERSION","",VERSION,"",RERR)PRINT "VERSION: ":VERSIONCALL @WOBJ.RTNE(TESTOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.ARRAY","arraytest","[]","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","arraytest[-1]","1","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","arraytest[-1]","2","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.OBJECT","objecttest",'{ "objecttestv1":"ok" }',"",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","stringtest","stringtestvalue","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.NUMBER","numbertest",100.12,"",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.BOOLEAN","booleantesttrue","True","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.BOOLEAN","booleantestfalse","False","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.NULL","nulltest","NULL","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"TOSTRING","",JSON,"",RERR)TESTOBJ=""** TEST 1 - PARSE*TEST="parse"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"FROMSTRING","",JSON,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Parse ok"   TEST.STATUS=1ENDGOSUB end.test** TEST 2 - GetString*TEST="GetString"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","stringtest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="String Found: (":VALUE:")"   IF VALUE="stringtestvalue" THEN      TEST.STATUS=1   END ELSE       TEST.STATUS=0   ENDENDGOSUB end.test** TEST 3 - GetNumber*TEST="GetNumber"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","numbertest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Number Found: (":VALUE:")"   BEGIN CASE      CASE NOT(NUM(VALUE))      CASE VALUE=100.12         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 4 - GETBoolean*TEST="GetBooleanTrue"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","booleantesttrue",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Boolean Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="true"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 5 - GETBoolean*TEST="GetBooleanFalse"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","booleantestfalse",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Boolean Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="false"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 6 - get null*TEST="GetNull"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","nulltest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="testnull Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="null"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 7 - get length*TEST="LENGTH"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"LENGTH","arraytest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="LENGTH(arraytest) Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="2"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 8 get array sub part*TEST="get array part"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","arraytest[1]",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="arraytest[2] Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="2"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 9 - get object keys*TEST="KEYS"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"KEYS","objecttest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="KEYS Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="objecttestv1"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 10- add item and retrieve*TEST="addstring2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","string2","string2","",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Added string2"ENDGOSUB end.test** TEST 11 - get string2*TEST="getstring2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","string2",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="string2 Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="string2"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 12- add item and retrieve*TEST="addnull2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.NULL","null2","null","",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Add Null2"ENDGOSUB end.test** TEST 11 - get NULL2*TEST="getnull2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","null2",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="null2 Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="null"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 12 - Add blank Object*TEST="Add blank object"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.OBJECT","nullobject","","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET","nullobject.nullfield","nullvalue","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"GET","nullobject.nullfield",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) AND VALUE="nullvalue" THEN   TEST.MSG="nullfield found "   TEST.STATUS=1END ELSE   TEST.MSG="nullfield not found "ENDTEST.MSG:=' (':VALUE:')'GOSUB end.test** TEST 13 - Add blank array*TEST="Add blank array"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.ARRAY","nullarray","","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET","nullarray[-1]","nullvalue","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"GET","nullarray[0]",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) AND VALUE="nullvalue" THEN   TEST.MSG="nullfield found "   TEST.STATUS=1END ELSE   TEST.MSG="nullfield not found "ENDTEST.MSG:=' (':VALUE:')'GOSUB end.test** TEST 14 - Test TOJSONTEST="Test TOJSON"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"TOJSON","",TJSON,"PRETTIFY",RERR)GOSUB process.errorTEST.STATUS=0TEST.MSG="Testing JSON"IF NOT(RERR<1>) THEN   IF INDEX(TJSON,"arraytest",1) THEN   TEST.MSG="nullfield found "   TEST.STATUS=1   ENDEND ELSE   TEST.MSG=""ENDGOSUB end.test** TEST 15 - Test FROMJSONTEST="Test FROMJSON"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ2,"FROMJSON","",TJSON,"",RERR)CALL @WOBJ.RTNE(TESTOBJ2,"GET","stringtest",VALUE,"",RERR)GOSUB process.errorTEST.MSG="stringtestvalue=(":VALUE:")"TEST.STATUS=0IF NOT(RERR<1>) THEN   IF VALUE="stringtestvalue" THEN   TEST.STATUS=1   ENDENDGOSUB end.testCALL @WOBJ.RTNE(TESTOBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR)PRINT OUT.JSONSTOP*GOSUB start.testRETURN*process.error: *IF RERR<1> THEN   TEST.STATUS=-1   TEST.MSG=RERR<1>ENDRETURN**start.test: *TEST.STATUS=0TEST.MSG="Success"PRINT "Test: ":TEST[1,20]"L(#20)":RETURN*end.test: *PRINT "  ":TEST.MSG[1,60]"L(#60)":PRINT " ":IF TEST.STATUS THEN PRINT "[Ok    ]" ELSE PRINT @(-13):"[Failed]":@(-14)RETURN0009CEWOBJ.OBJECT.TOSTRING0c2SUBROUTINE WOBJ.OBJECT.TOSTRING(JSON,POS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert parsed json object node to string************************************************************************INCLUDE WOBJ.INCLUDE*JSON:="{"; * START OUR STRINGINDENT.DEPTH+=1*IF PRETTIFY THEN JSON:=NLNUMBER.PARTS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,POS>IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: POS=":POS:" NUMBER.PARTS=":NUMBER.PARTS** OPTION TO SORT THIS**SORTTYPE="NSBASIC"SORTTYPE=""BEGIN CASE     CASE 1        KEYS=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,POS>        CONVERT @SVM TO @AM IN KEYS        SORTED.KEYS=KEYSEND CASEACTUAL.KEYS=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,POS>FOR PP=1 TO NUMBER.PARTS    PART.KEY=SORTED.KEYS<PP>    LOCATE PART.KEY IN ACTUAL.KEYS<1,1> SETTING P ELSE        IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: COULD NOT LOCATE ":PART.KEY:" IN ":ACTUAL.KEYS    END    PART.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,POS,P>    PART.KEY=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,POS,P>    IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: POS=":POS:" P=":P:" T=":PART.TYPE:" K=":PART.KEY    IF PP=1 AND PRETTIFY THEN JSON:=NL    CALL WOBJ.ENCODE(PART.KEY,OUT.PART.KEY)    CALL WOBJ.PRETTIFY.INDENT(JSON,POS)    JSON:='"':OUT.PART.KEY:'": '    BEGIN CASE        CASE PART.TYPE="S"            CALL WOBJ.STRING.TOSTRING(JSON,POS,P)        CASE PART.TYPE="B"            CALL WOBJ.BOOLEAN.TOSTRING(JSON,POS,P)        CASE PART.TYPE="D"            CALL WOBJ.NUMBER.TOSTRING(JSON,POS,P)        CASE PART.TYPE="N"            CALL WOBJ.NULL.TOSTRING(JSON,POS,P)        CASE PART.TYPE="O"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: FL=":PART.FLINK            CALL WOBJ.OBJECT.TOSTRING(JSON,PART.FLINK)        CASE PART.TYPE="A"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: FL=":PART.FLINK            CALL WOBJ.ARRAY.TOSTRING(JSON,PART.FLINK)    END CASE    IF PP <> NUMBER.PARTS THEN        JSON:=", "        IF PRETTIFY THEN JSON:=NL    ENDNEXT PP*IF PRETTIFY THEN    JSON:=NL    PASS.POS=POS-1    CALL WOBJ.PRETTIFY.INDENT(JSON,PASS.POS)ENDJSON:="}"*IF PRETTIFY THEN JSON:=NLINDENT.DEPTH -= 1RETURNEND000459WOBJ.KEYS0c2SUBROUTINE WOBJ.KEYS(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: return list of elements in a json node in parsed object structure************************************************************************INCLUDE WOBJ.INCLUDE*VALUE=""CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)**IF WOBJ.DEBUG THEN PRINT "WOBJ.KEYS: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" LASTNODE=":LASTNODE:" RERR=":RERR<2>*IF NOT(NODEPOS) THEN    RERR=1    RERR<2>="Node not found"     RETURNENDIF NODE#"" AND NOT(PARTPOS) THEN    RERR=1    RERR<2>="Node not found"     RETURNENDIF NODE="" THEN    NODEPOS=1    CHILDPOS=1ENDIF NOT(CHILDPOS) THEN   RERR=1   RERR<2>="Node is not an object"   RETURNENDNODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,CHILDPOS>IF NODETYPE#"O" THEN   RERR=1   RERR<2>="Node is not an object"   RETURNENDVALUE=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,CHILDPOS>RETURNEND0001C5COMPILE.TXT0c2WOBJWOBJ.ARRAY.TOSTRINGWOBJ.BOOLEAN.TOSTRINGWOBJ.DECODE.PARTWOBJ.DELETEWOBJ.ENCODEWOBJ.FINDNODEWOBJ.GETWOBJ.INCLUDEWOBJ.KEYSWOBJ.NULL.TOSTRINGWOBJ.NUMBER.TOSTRINGWOBJ.OBJECT.TOSTRINGWOBJ.PARSEWOBJ.PARSEARRAYWOBJ.PARSEBOOLEANWOBJ.PARSEKEYWOBJ.PARSENULLWOBJ.PARSENUMBERWOBJ.PARSEOBJECTWOBJ.PARSESTRINGWOBJ.PARSEVALUEWOBJ.PRETTIFY.INDENTWOBJ.SETWOBJ.SET.PARTWOBJ.SKIPCHARWOBJ.STRING.TOSTRINGWOBJ.TESTWOBJ.TOSTRING0002C7WOBJ.TOSTRING0c2SUBROUTINE WOBJ.TOSTRING(JSON)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: internal convert json object to string************************************************************************INCLUDE WOBJ.INCLUDE*POS=1OBJ.TYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,POS>IF OBJ.TYPE="" OR POS > JSONOBJECT$NODECNTR THEN RETURNIF WOBJ.DEBUG THEN PRINT "FIRST OBJECT=":OBJ.TYPEBEGIN CASE    CASE OBJ.TYPE="A"        CALL WOBJ.ARRAY.TOSTRING(JSON,POS)    CASE OBJ.TYPE="O"        CALL WOBJ.OBJECT.TOSTRING(JSON,POS)END CASERETURNEND0002AFWOBJ.DECODE.PART0c2SUBROUTINE WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: decode json part value************************************************************************INCLUDE WOBJ.INCLUDE*PARTENCODING =  JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEPOS,PARTPOS>PARTVALUE    =  JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEPOS,PARTPOS>*BEGIN CASE    CASE PARTENCODING="H"        VALUE=ICONV(PARTVALUE,"MX0C"); * UV    CASE 1        VALUE=PARTVALUEEND CASE*RETURNEND000529WOBJ.GET0c2SUBROUTINE WOBJ.GET(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: get json element value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: if specified node is an Object or Array, return*   a JSON string representation of the node.************************************************************************INCLUDE WOBJ.INCLUDE*VALUE=""IF NODE="" THEN    CALL WOBJ.OBJECT.TOSTRING(VALUE,1) ; * Root object    RETURNEND*CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF NODEPOS > 0 AND PARTPOS > 0 THEN    OBJ.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE OBJ.TYPE="O"            CALL WOBJ.OBJECT.TOSTRING(VALUE,CHILDPOS)        CASE OBJ.TYPE="A"            CALL WOBJ.ARRAY.TOSTRING(VALUE,CHILDPOS)        CASE OBJ.TYPE="N"            VALUE="null"; * 4/23/202 - Return null value        CASE 1            CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)    END CASEEND ELSE    VALUE="" ; * NODE NOT FOUND!ENDIF WOBJ.DEBUG THEN PRINT "WOBJ.GET: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" VALUE=":VALUERETURNEND0008BCWOBJ.PARSESTRING0c2SUBROUTINE WOBJ.PARSESTRING(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json string value************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""*SAVE.INDEXPOS=INDEXPOSCALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)IFQUOTE = JSTR[INDEXPOS,1]INDEXPOS+=1LEN.JSTR=LEN(JSTR)*LOOPWHILE INDEXPOS > 0 AND INDEXPOS < LEN.JSTR DO    C = JSTR[INDEXPOS,1]    IF WOBJ.DEBUG > 1 THEN PRINT "PARSESTRING: LOOKING AT (":C:")"    BEGIN CASE        CASE C = "\"            INDEXPOS+=1            C=JSTR[INDEXPOS,1]            BEGIN CASE                CASE C = \"\ OR C = "\" OR C= "/" OR C = "'"                    PARSESTRING:=C                    INDEXPOS+=1                CASE C = "b"                    PARSESTRING:=BS                    INDEXPOS+=1                CASE C = "f"                    PARSESTRING:=FF                    INDEXPOS+=1                CASE C = "n"                    PARSESTRING:=LF                    INDEXPOS+=1                CASE C = "r"                    PARSESTRING:=CR                    INDEXPOS+=1                CASE C = "t"                    PARSESTRING:=TB                    INDEXPOS+=1                CASE C = "u"                    INDEXPOS+=1                    CODE=JSTR[INDEXPOS,4]                    IF CODE[1,2]="00" THEN                        PARSESTRING:=ICONV(CODE[3,2],"MX0C")                    END ELSE                        PARSESTRING:="_" ;* Poor substitute for invalid Unicode character!                        PSERRORS<-1> = "Invalid Unicode character at position ":INDEXPOS-1:" : u":CODE                    END                    INDEXPOS+=4            END CASE        CASE C = IFQUOTE            INDEXPOS+=1            EXIT        CASE 1            PARSESTRING:=C            INDEXPOS+=1    END CASEREPEATIF C # IFQUOTE THEN    * string not terminated!    PARSESTRING=""    INDEXPOS=SAVE.INDEXPOSENDIF WOBJ.DEBUG THEN PRINT "PARSESTRING: EXITING: ":PARSESTRINGRETURNEND000120WOBJ.UNASSIGNED.INCLUDE0c2IF NOT(ASSIGNED(PASSEDOBJ)) THEN RERR='PARAM1 BLANK'IF NOT(ASSIGNED(ACTION)) THEN RERR='PARAM2 (ACTION) NOT ASSIGNED'IF NOT(ASSIGNED(NODE)) THEN RERR='PARAM3 (NODE) NOT ASSIGNED'IF NOT(ASSIGNED(VALUE)) THEN VALUE=""IF NOT(ASSIGNED(OPTIONS)) THEN OPTIONS=""000258WOBJ.BOOLEAN.TOSTRING0c2SUBROUTINE WOBJ.BOOLEAN.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert json boolean to string************************************************************************INCLUDE WOBJ.INCLUDE*CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)*CALL WOBJ.ENCODE(VALUE,OUT.VALUE)JSON:=OCONV(OUT.VALUE,"MCL")*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=":VALUERETURNEND0001E4WOBJ.NULL.TOSTRING0c2SUBROUTINE WOBJ.NULL.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: json null to string************************************************************************INCLUDE WOBJ.INCLUDE*JSON:="null"*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=null"RETURNEND0001E1WOBJ.PRETTIFY.INDENT0c2SUBROUTINE WOBJ.PRETTIFY.INDENT(JSON,POS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: indent json string************************************************************************INCLUDE WOBJ.INCLUDE*INDENTSTEP=2*IF PRETTIFY THEN    JSON:=STR(" ",(INDENT.DEPTH*INDENTSTEP))END*RETURNEND00024DWOBJ.STRING.TOSTRING0c2SUBROUTINE WOBJ.STRING.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: return json node as string************************************************************************INCLUDE WOBJ.INCLUDE*CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)*CALL WOBJ.ENCODE(VALUE,OUT.VALUE)JSON:='"':OUT.VALUE:'"'*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=":VALUERETURNEND000971WOBJ.PARSEVALUE0c2SUBROUTINE WOBJ.PARSEVALUE(JSTR,INDEXPOS,PARSEVALUE)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json value************************************************************************INCLUDE WOBJ.INCLUDE*PARSEVALUE=""*IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - STARTING"CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*C=JSTR[INDEXPOS,1]LEN.JSTR=LEN(JSTR)*IF WOBJ.DEBUG THEN PRINT "PARSEVALUE LOOKING AT ":C** WE WILL BE ADDING A NEW ITEM TO OUR OBJECT ARRAY*BEGIN CASE    CASE C="{"        CALL WOBJ.PARSEOBJECT(JSTR,INDEXPOS,PARSEVALUE)    CASE C="["        IF WOBJ.DEBUG THEN PRINT "PARSEVALUE CALLING PARSEARRAY"        CALL WOBJ.PARSEARRAY(JSTR,INDEXPOS,PARSEVALUE)    CASE C='"' OR C="'"        IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSESTRING"        CALL WOBJ.PARSESTRING(JSTR,INDEXPOS,PARSEVALUE)        PARSEVALUE=INSERT(PARSEVALUE,1;"S")    CASE 1        IF C="t" OR C="T" OR C="f" OR C="F" THEN            IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSEBOOLEAN"            CALL WOBJ.PARSEBOOLEAN(JSTR,INDEXPOS,PARSEVALUE)            IF PARSEVALUE#"" THEN                PARSEVALUE=INSERT(PARSEVALUE,1;"B")            END        END        IF PARSEVALUE="" AND (C="n" OR C="N") THEN            IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSENULL"            CALL WOBJ.PARSENULL(JSTR,INDEXPOS,PARSEVALUE)            IF PARSEVALUE#"" THEN                 PARSEVALUE=INSERT(PARSEVALUE,1;"N")            END        END        IF PARSEVALUE="" THEN            IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSENUMBER"            CALL WOBJ.PARSENUMBER(JSTR,INDEXPOS,PARSEVALUE)            IF PARSEVALUE#"" THEN                PARSEVALUE=INSERT(PARSEVALUE,1;"D")            END        END        IF PARSEVALUE="" THEN            * Treat unidentified value as string            LOOP            WHILE INDEXPOS > 0 AND INDEXPOS < LEN.JSTR DO                C = JSTR[INDEXPOS,1]                IF INDEX(",]}",C,1) THEN                    EXIT                END                PARSEVALUE:=C                INDEXPOS+=1            REPEAT            PARSEVALUE=INSERT(PARSEVALUE,1;"S")        ENDEND CASEIF WOBJ.DEBUG THEN PRINT "PARSEVALUE - END OF ROUTINE"*RETURNEND000180WOBJ.CHOOSE.WOBJ0c2* Code to determine default wobj library to use* This needs to change for MVDBTOOLKIT build, defaults to WOBJWOBJ.RTNE="WOBJ"NO.MD.FILE=0OPEN "MD" TO FILE.MD ELSE    OPEN "VOC" TO FILE.MD ELSE NO.MD.FILE=1ENDIF NOT(NO.MD.FILE) THEN    READ WOBJ.CONF FROM FILE.MD, "WOBJ.CONF" ELSE WOBJ.CONF=""    IF WOBJ.CONF<3> # "" THEN WOBJ.RTNE=WOBJ.CONF<3>END0014F3WOBJ0c2SUBROUTINE WOBJ(PASSEDOBJ,ACTION,NODE,VALUE,OPTIONS,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: WOBJ json library main routine************************************************************************WOBJ.VERSION = "2.0"*INCLUDE WOBJ.INCLUDE** 4/21/2020 Merged in udo object supportPLATFORM=""* HOW TO DEFINE CONFIGURATION FOR WOBJ??NO.MD.FILE=0OPEN "MD" TO MD.FILE ELSE   OPEN "VOC" TO MD.FILE ELSE NO.MD.FILE=1ENDWOBJ.CONF=""IF NOT(NO.MD.FILE) THEN   READ WOBJ.CONF FROM MD.FILE, "WOBJ.CONF" ELSE WOBJ.CONF=""ENDIF WOBJ.CONF="" THEN   NO.DICT.WOBJ.BP=0   OPEN "DICT","WOBJ.BP" TO DICT.WOBJ.BP ELSE NO.DICT.WOBJ.BP=1   IF NOT(NO.DICT.WOBJ.BP) THEN      READ WOBJ.CONF FROM DICT.WOBJ.BP, "WOBJ.CONF" ELSE WOBJ.CONF=""   ENDENDPLATFORM=WOBJ.CONF<2>* 5/11/2020 - Moved unassigned check to here** Doing inline include due to Assign/Unassigned (unidata)* WOBJ.UNASSIGNED.INCLUDE*$INCLUDE WOBJ.UNASSIGNED.INCLUDEINCLUDE WOBJ.UNASSIGNED.INCLUDEIF INDEX(OPTIONS,"PRETTIFY",1) THEN PRETTIFY=1 ELSE PRETTIFY=0IF INDEX(OPTIONS,"PRETTIFYCR",1) THEN PRETTIFYCR=1 ELSE PRETTIFYCR=0IF INDEX(OPTIONS,"DEBUG",1) THEN WOBJ.DEBUG=1 ELSE WOBJ.DEBUG=0IF INDEX(OPTIONS,"UDO=1",1) THEN PLATFORM="UDO"IF INDEX(OPTIONS,"UDO=0",1) AND PLATFORM="UDO" THEN PLATFORM=""IF INDEX(OPTIONS,"NATIVE",1) THEN PLATFORM=""* 5/11/2020 - pap Patch to allow default setting for a *             set.object or set.array*IF ACTION="SET.OBJECT" AND VALUE="" THEN VALUE="{}"IF ACTION="SET.ARRAY" AND VALUE="" THEN VALUE="[]"IF ACTION="FROMJSON" THEN ACTION="FROMSTRING"IF ACTION="TOJSON" THEN ACTION="TOSTRING"BEGIN CASE   CASE PLATFORM='UDO'      CALL WOBJ.UDO(PASSEDOBJ,ACTION,NODE,VALUE,OPTIONS,RERR)      RETURN   CASE 1END CASE*MAT JSONOBJECT = ""RERR=""INDENT.DEPTH=0*BEGIN CASE    CASE ACTION="FROMSTRING"* THIS EXISTS EARLIER DUE TO MATPARSE BELOW        CALL WOBJ.PARSE(VALUE,NEWOBJ)        PASSEDOBJ=NEWOBJ        IF PSERRORS # "" THEN            RERR=2            RERR<2> = PSERRORS        END        IF WOBJ.DEBUG THEN PRINT "WOBJ: FROMSTRING ACTION: VALUE=":VALUE:" RERR=":RERR<2>        RETURN    CASE ACTION="VERSION"        VALUE=WOBJ.VERSION        RETURNEND CASERERR=''*IF NOT(ASSIGNED(PASSEDOBJ)) THEN RERR='PARAM1 BLANK'*IF NOT(ASSIGNED(ACTION)) THEN RERR='PARAM2 (ACTION) NOT ASSIGNED'*IF NOT(ASSIGNED(NODE)) THEN RERR='PARAM3 (NODE) NOT ASSIGNED'*IF NOT(ASSIGNED(VALUE)) THEN VALUE=""*IF NOT(ASSIGNED(OPTIONS)) THEN OPTIONS=""IF RERR <> "" THEN   RERR<2>=RERR   RERR<1>=1   PRINT RERR<1>   RETURNEND** MATPARSE JSONOBJECT FROM PASSEDOBJ; * all except unidataMATPARSE JSONOBJECT FROM PASSEDOBJ, @AM; * Unidata*IF WOBJ.DEBUG THEN PRINT "ACTION=":ACTIONBEGIN CASE    CASE ACTION="TOSTRING"        VALUE=""        IF NODE # "" THEN            RERR=1            RERR<2>="Node ignored - returning the root node"            IF WOBJ.DEBUG THEN PRINT "WOBJ: TOSTRING ACTION: NODE ":NODE:" IGNORED"        END        CALL WOBJ.TOSTRING(VALUE)    CASE ACTION="GET"        GOSUB action.get    CASE FIELD(ACTION,".",1)="SET"        GOSUB action.set    CASE ACTION="DELETE"        GOSUB action.delete    CASE ACTION="KEYS"        GOSUB action.keys    CASE ACTION="LENGTH"        GOSUB action.length    CASE ACTION="TYPE"        GOSUB action.type    CASE 1        VALUE=""        RERR=1        RERR<2>="Invalid action '":ACTION:"'"        IF WOBJ.DEBUG THEN PRINT "WOBJ: INVALID ACTION: ":ACTIONEND CASE*MATBUILD PASSEDOBJ FROM JSONOBJECT*RETURN*action.get: *CALL WOBJ.GET(ACTION,NODE,VALUE,RERR)RETURN*action.set: *CALL WOBJ.SET(ACTION,NODE,VALUE,RERR)RETURN*action.delete: *CALL WOBJ.DELETE(ACTION,NODE,VALUE,RERR)RETURN*action.keys: *CALL WOBJ.KEYS(ACTION,NODE,VALUE,RERR)RETURN*action.length: *CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF PARTPOS THEN    IF CHILDPOS THEN        VALUE=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,CHILDPOS>+0    END ELSE        VALUE=1 ;* SIMPLE NODE HAS LENGTH OF 1    ENDEND ELSE    IF NODE="" THEN        VALUE=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,1>+0    END ELSE        VALUE=0 ;* NODE NOT FOUND!    ENDENDIF WOBJ.DEBUG THEN PRINT "WOBJ: LENGTH ACTION: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" LENGTH=":VALUE:" RERR=":RERR<2>RETURN*action.type: *CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF PARTPOS THEN    PARTTYPE = JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE PARTTYPE='O'            VALUE='OBJECT'        CASE PARTTYPE='A'            VALUE='ARRAY'        CASE PARTTYPE='D'            VALUE='NUMBER'        CASE PARTTYPE='S'            VALUE='STRING'        CASE PARTTYPE='N'            VALUE='NULL'        CASE PARTTYPE='B'            VALUE='BOOLEAN'        CASE 1            VALUE='UNKNOWN'    END CASEEND ELSE    IF NODE="" THEN        VALUE="OBJECT"    END ELSE        VALUE="UNDEFINED" ;* NODE NOT FOUND!    ENDENDIF WOBJ.DEBUG THEN PRINT "WOBJ: TYPE ACTION: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" TYPE=":VALUE:" RERR=":RERR<2>RETURN*END00038DWOBJ.PARSENUMBER0c2SUBROUTINE WOBJ.PARSENUMBER(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json numeric value************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)SAVE.INDEXPOS=INDEXPOS*JSTR.LENGTH=LEN(JSTR)*LOOP WHILE INDEXPOS > 0 AND INDEXPOS <= JSTR.LENGTH DO    C=JSTR[INDEXPOS,1]    IF NUM(C) OR C="+" OR C="-" OR C="." OR C="E" OR C="e" THEN        PARSESTRING:=C        INDEXPOS+=1    END ELSE        EXIT    ENDREPEATCALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)C=JSTR[INDEXPOS,1]IF INDEX(",]}",C,1)=0 THEN    * invalid terminator - not a number    PARSESTRING=""    INDEXPOS=SAVE.INDEXPOSENDRETURNEND000419WOBJ.PARSE0c2SUBROUTINE WOBJ.PARSE(JSTR,JSONOBJECTRETURN)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json string into object************************************************************************INCLUDE WOBJ.INCLUDE*PSERRORS=""MAT JSONOBJECT=""JSONOBJECTRETURN=""*INDEXPOS=1CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)C=JSTR[INDEXPOS,1]IF C # "{" THEN    IF C # "" THEN        PSERRORS<-1>="Leading brace for JSON object missing"    END    RETURNEND*CALL WOBJ.PARSEOBJECT(JSTR,INDEXPOS,PARSERESULT)IF PARSERESULT="" THEN    IF PSERRORS="" THEN PSERRORS<-1>="Parse failure"END ELSE    * MAKE SURE WE CONSUMED ENTIRE JSTR    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    IF INDEXPOS <= LEN(JSTR) THEN        PSERRORS<-1>="Extra data (":(LEN(JSTR)-INDEXPOS+1):" characters) after final close brace ignored"    ENDEND*MATBUILD JSONOBJECTRETURN FROM JSONOBJECT*RETURNEND000A0FWOBJ.PARSEARRAY0c2SUBROUTINE WOBJ.PARSEARRAY(JSTR,INDEXPOS,PARSEARRAY)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json array************************************************************************INCLUDE WOBJ.INCLUDE*PARSEVARRAY=""IF WOBJ.DEBUG THEN PRINT "PARSEARRAY - STARTING"*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*IF JSTR[INDEXPOS,1] <> "[" THEN    PSERRORS<-1>="Invalid Array at position ":INDEXPOS:" : ":JSTR[INDEXPOS,20]    RETURNEND*LEN.JSTR = LEN(JSTR)INDEXPOS+=1*JSONOBJECT(JSONOBJECT$NODECNTR)+=1NODEID=JSONOBJECT(JSONOBJECT$NODECNTR)JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEID>="A"; *SET AS OBJECT*LOOP    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    C=JSTR[INDEXPOS,1]    IF WOBJ.DEBUG THEN PRINT "PARSEARRAY: ":NODEID:" - LOOKING AT ":C    BEGIN CASE        CASE C = "]"            IF WOBJ.DEBUG THEN PRINT "PARSEARRAY: ":NODEID:" EXIT ON ]"            INDEXPOS+=1            EXIT        CASE C = ","            INDEXPOS+=1            CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)        CASE INDEXPOS > LEN.JSTR            PSERRORS<-1>="Missing ']': ":JSTR[LEN(JSTR)-20,20]            RETURN    END CASE    *    CALL WOBJ.PARSEVALUE(JSTR,INDEXPOS,PARSEVALUE)    *    JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>+=1    PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>    BEGIN CASE        CASE PARSEVALUE=""            PSERRORS<-1>="Invalid value syntax for array element ":(PARTPOS-1)            IF WOBJ.DEBUG THEN PRINT "PARSEARRAY ":NODEID:" invalid value syntax"            RETURN        CASE PARSEVALUE<1>="A" OR PARSEVALUE<1>="O"            * ARRAY OR OBJECT            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEID,PARTPOS>=PARSEVALUE<2>        CASE 1            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            V=PARSEVALUE<2>            IF INDEX(V,LF,1) OR INDEX(V,CR,1) THEN                V=OCONV(V,"MX0C")                E="H"            END ELSE                E="A"            END            JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEID,PARTPOS>=V            JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEID,PARTPOS>=E    END CASE    IF WOBJ.DEBUG THEN PRINT "PARSEARRAY ":NODEID:" ":PARSEVALUE<1>:" ":PARSEVALUE<2>REPEATPARSEARRAY="A"PARSEARRAY<2>=NODEIDIF WOBJ.DEBUG THEN PRINT "PARSEARRAY - EXITING"RETURNEND000165DICT_PORTAL.AR0c000002BINVOICE.AMT0c1A6Invoice.AmtMD2R13000025DUE.DATE0c1A20Due.DateD2-R8000024BALANCE0c1A50BalanceMD2R13000029DATES.PAID0c1A8CheckDatesD2-R800001APIPE0c1A0 F;C|L100001ACUST0c1A1CustL2500001EBIG.CUST0c1A1CustL40000034CUST.NAME0c1A1Cust.NameTPORTAL.AR;X;1;1L25000A7FMVDB.WIDGETS0c0000025AdminConfig0c2SUB.ADMIN.CONFIGADMIN000025Code Templates0c2SUB.CODE.TEMPLATES000014D3 Free0c2SUB.FREE00001CD3 LISTPEQS0c2SUB.LISTPEQS000016D3 LISTU0c2SUB.LISTU000028D3 Runtime Errors0c2SUB.RUNTIME.ERRORS000024D3 Sys Err Chart0c2SUB.SYS.ERR.BAR000021D3 System Errors0c2SUB.SYS.ERRS00002DDashboard License Usage0c2SUB.TABLE.LIC.USED000038DEMO ANNUAL SALES BY REP0c2SUB.DEMO.ANNUAL.SALES.BY.REP000035DEMO AVERAGE DAYS CHART0c2SUB.DEMO.DAYS.TO.PAY.CHART000030DEMO DAYS TO PAY PIE0c2SUB.DEMO.DAYS.TO.PAY.PIE00004BDEMO FINANCIAL PICTURE0c2DEMO.FINANCIALS.DASHBOARDDemo Financial Picture00003ADEMO MONTHLY SALES BY REP0c2SUB.DEMO.MONTHLY.SALES.BY.REP000032DEMO NET INCOME CHART0c2SUB.DEMO.NET.INCOME.CHART000036DEMO REV.GP SALES CHART0c2SUB.DEMO.REV.GP.SALES.CHART00002EDEMO SALE TYPES PIE0c2SUB.DEMO.SALE.TYPES.PIE000028DEMO SALES CHART0c2SUB.DEMO.SALES.CHART00002EDEMO SALES PERCENTS0c2SUB.DEMO.SALES.PERCENTS000044DEMO SINGLE MONTH SALES BY REP0c2SUB.DEMO.SINGLE.MONTH.SALES.BY.REP000020Demo- MS Col0c2SUB.DEMO.MS.COL00001FDemo-Doughnut0c2SUB.DEMO.DNUT000019Demo-Pie0c2SUB.DEMO.PIE00001EDemo-SS Col0c2SUB.DEMO.SS.COL000021Demo-SS Line0c2SUB.DEMO.SS.LINE000025Drilldown Demo0c2SUB.DEMO.DRILLDOWN000024Emailed Report0c2SUB.EMAILED.REPORT00001EGRID TEST0c2SUB.GRID.TESTSAI000021Icon Gallery0c2SUB.ICON.GALLERY000022Mobile Manager0c2SUB.MOBILE.APPS000026MW CodeFactory0c2SUB.MW.CODE.FACTORY000021PDFConfig0c2SUB.PDF.CONFIGADMIN000028QM Runtime Errors0c2SUB.RUNTIME.ERRORS00001BRSS Feeds0c2SUB.RSS.FEEDS000028SC-Lines By Lib (Pie)0c2SUB.SC.LIB.PIE000023SC-Lines By Prog0c2SUB.SC.LIB.COL000028SC-Progs by Lib (Pie)0c2SUB.SC.LIB.PIE00001BShow Vars0c2SUB.SHOW.VARS000021Source Viewer0c2SUB.SOURCE.VIEW000025System - Session0c2SUB.SHOW.SESSION000028PORTAL DASHBOARD0c2SUB.PORTAL.DASHBOARD000030PORTAL SALES REPORTS0c2SUB.PORTAL.SALES.REPORTS000034PORTAL AR REPORT SETUP0c2SUB.PORTAL.AR.REPORT.SETUP00002APORTAL AR REPORTS0c2SUB.PORTAL.AR.REPORTS00002APORTAL AP REPORTS0c2SUB.PORTAL.AP.REPORTS000034PORTAL AP REPORT SETUP0c2SUB.PORTAL.AP.REPORT.SETUP000024PORTAL MARGINS0c2SUB.PORTAL.MARGINS00003APORTAL SALES REPORT SETUP0c2SUB.PORTAL.SALES.REPORT.SETUP000040DISPLAY PORTAL AP BALANCE PIE CHART0c2SUB.PORTAL.AP.BALANCE.PIE000040DISPLAY PORTAL AR BALANCE PIE CHART0c2SUB.PORTAL.AR.BALANCE.PIE000034PORTAL DAYS TO PAY PIE0c2SUB.PORTAL.DAYS.TO.PAY.PIE00003CPORTAL SETUP DOCUMENTATION0c2SUB.PORTAL.SETUP.DOCUMENTATION000030PORTAL.DOCUMENTATION0c2SUB.PORTAL.DOCUMENTATION000040PORTAL.REPORTS.DOCUMENTATION0c2SUB.PORTAL.REPORTS.DOCUMENTATION000038PORTAL.RUN.DOCUMENTATION0c2SUB.PORTAL.RUN.DOCUMENTATION0127E8MVDBTOOLKIT.BP0c00010ABMVDBTOOLKIT.WFILEIO.D30c2      SUBROUTINE MVDBTOOLKIT.WFILEIO.D3(FOBJ)      **********************************************************************      *      * Copyright (C) 2017 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: June 7th 2018      * Description: WFILEIO MULTI PLATFORM WORKING WITH O/S FILES      *      **********************************************************************      *      * INOBJ      *      * { "ACTION":"READ,WRTE,DELETE",      *   "PATH":"PATH TO THE FILE",      *   "DATA":"DATA FOR A WRITE",      *   "dosletter":"OPTIONAL DOS LETTER TO ADD TO PATH",      *   "NEWLINE":"CR,LF,CRLF,DOS,UNIX",      *   "PERMISSIONS":"TBD"      *   "response": {      *       "data":"responsedata",      *       "status":1-ok, else no,      *       "statusmsg":"statusmsg"      *   }      * }      *      * need to know the existing platform      *PLATFORM.DELIM="\"      *PLATFORM.TYPE="WINDOWS"      *PLATFORM.MV="D3"      INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ            CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MV,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.DELIM,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)      FSTATUS=1      FSTATUSMSG="OK"      CALL @WOBJ.RTNE(FOBJ,"GET","action",FILEIO.ACTION,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","path",FILEIO.PATH,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","data",FILEIO.DATA,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","dosletter",FILEIO.DOSLETTER,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","newline",FILEIO.NEWLINE,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","permissions",FILEIO.PERMISSIONS,"",RERR)      *CALL @WOBJ.RTNE(OUTOBJ,"FROMSTRING","","{}","",RERR)      FILEIO.ACTION=OCONV(FILEIO.ACTION,"MCU")      FILEIO.NEWLINE=OCONV(FILEIO.NEWLINE,"MCU")      CALL @WOBJ.RTNE(FOBJ,"GET","work.parsed_fileio_file_name",PARSED.FILEIO.FILE.NAME,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.fileio_just_path",FILEIO.JUST.PATH,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MVTYPE,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.FILEDELIM,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","path",ORIG.PATH,"",RERR)      * FOR RIGHT NOW ON JBASE WE WILL JUST OPEN THE FILE USING FULL PATHING      * THIS DOES NOT DO ANYTHING!!!      BEGIN CASE         CASE PLATFORM.TYPE="WINDOWS"            REAL.PATH="dos:":PLATFORM.TYPE         CASE 1            REAL.PATH="unix:":PLATFORM.TYPE      END CASE      **      OPEN FILEIO.JUST.PATH TO FI ELSE         IF INDEX(FILEIO.JUST.PATH,"AppData\Local\Temp",1) OR INDEX(FILEIO.JUST.PATH,'\tmp',1) THEN            * SPECIAL PATCH FOR D3/WINDOWS.  D3 is running as a system user and it appears            * the Temp directory does not always exist            EXECUTE '!mkdir ':FILEIO.JUST.PATH         END         OPEN FILEIO.JUST.PATH TO FI ELSE            FSTATUS=0            FSTATUSMSG="Could not open file ":FILEIO.JUST.PATH            GOTO end.of.run         END      END      BEGIN CASE         CASE FILEIO.ACTION="READ"            GOSUB fileio.read         CASE FILEIO.ACTION="WRITE"            GOSUB fileio.write         CASE FILEIO.ACTION="DELETE"            GOSUB fileio.delete         CASE 1            FSTATUS=0            FSTATUSMSG="Invalid action"            GOTO end.of.run      END CASEend.of.run: *      CALL @WOBJ.RTNE(FOBJ,"SET.NUMBER", "response.status", FSTATUS,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"SET.STRING", "response.statusmsg", FSTATUSMSG, "", RERR)      RETURNfileio.read: *      REC=""      READ REC FROM FI, PARSED.FILEIO.FILE.NAME ELSE         FSTATUS=0         FSTATUSMSG="Could not find ":PARSED.FILEIO.FILE.NAME      END      CALL @WOBJ.RTNE(FOBJ,"SET.STRING","response.data",REC,"",RERR)      IF 0 THEN         PRINT "PATH   :":FILEIO.JUST.PATH         PRINT "ID     :":PARSED.FILEIO.FILE.NAME         PRINT "REC    :":REC      END      RETURNfileio.write: *      WRITE FILEIO.DATA ON FI, PARSED.FILEIO.FILE.NAME      RETURNfileio.delete: *      DELETE FI, PARSED.FILEIO.FILE.NAME      RETURN002F4DMVDBTOOLKIT.TEST0c2PRINT @(-1):"MVDBTOOLKIT.TEST"PRINTINCLUDE MVDBTOOLKIT.TEST.INCLUDEINCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJTEST.PLATFORM=FIELD(CMND,' ',2)TEST.MVTYPE=FIELD(CMND,' ',3)CALL MVDBTOOLKIT.WPLATFORM(PLATFORM.OBJ)IF TEST.PLATFORM = "" THEN   CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",TEST.PLATFORM,"",RERR)ENDIF TEST.MVTYPE = "" THEN   CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",TEST.MVTYPE,"",RERR)ENDIF TEST.PLATFORM = "" THEN   PRINT "Enter Platform: ":; INPUT TEST.PLATFORMENDIF TEST.MVTYPE = "" THEN   PRINT "Enter MVType: ":; INPUT TEST.MVTYPEENDIF TEST.PLATFORM='' OR TEST.MVTYPE='' THEN    PRINT "Usage: MVDBTOOLKIT PLATFORM MVTYPE"    PRINT    PRINT "PLATFORM=WINDOWS or LINUX"    PRINT "MVTYPE=JBASE,D3,UNIVERSE,UNIDATA"    STOPEND* GET ENVIRONMENTCALL MVDBTOOLKIT.WPLATFORM(PLATFORM.OBJ)CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","curllocation",CURLLOCATION,"",RERR)CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",PLATFORM,"",RERR)TEST='platform'; GOSUB start.testTEST.MSG=PLATFORM:"=":TEST.PLATFORMIF PLATFORM # TEST.PLATFORM THEN TEST.STATUS=0 ELSE TEST.STATUS=1GOSUB end.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",RESULT,"",RERR)TEST='mvtype'; GOSUB start.testTEST.MSG=RESULT:"=":TEST.MVTYPEIF RESULT # TEST.MVTYPE THEN TEST.STATUS=0 ELSE TEST.STATUS=1GOSUB end.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.DIR,"",RERR)CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","filedelim",FILEDELIM,"",RERR)TEST='filedelim'; GOSUB start.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","filedelim",FILEDELIM,"",RERR)TEST.MSG=FILEDELIMTEST.STATUS=1BEGIN CASE   CASE OCONV(PLATFORM,"MCU") = "LINUX" AND FILEDELIM="/"   CASE OCONV(PLATFORM,"MCU") = "WINDOWS" AND FILEDELIM="\"   CASE 1; TEST.STATUS=0END CASEGOSUB end.testTEST='tmpdir'; GOSUB start.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.DIR,"",RERR)TEST.MSG=TMP.DIRTEST.STATUS=1IF TMP.DIR="" THEN TEST.STATUS=0GOSUB end.testTEST='MVDBTOOLKIT.SWAP'GOSUB start.testS='TEST LINE TEST LINE'ORIG.STRING=SCALL MVDBTOOLKIT.SWAP(S,"ES","XX")IF S = "TXXT LINE TXXT LINE" THEN TEST.STATUS=1 ELSE TEST.STATUS=0TEST.MSG=SGOSUB end.test* Test 1 GetenvTEST="getenv"GOSUB start.testCALL MVDBTOOLKIT.WGETENV("PATH",PATH)IF PATH # "" THEN    TEST.MSG=PATH[1,60]    TEST.STATUS=1END ELSE    TEST.MSG=""    TEST.STATUS=0ENDGOSUB end.test* Test WEXECUTETEST="wexecute"; GOSUB start.testCMND='echo MVDBTOOLKIT.TEST'CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)CALL MVDBTOOLKIT.WEXECUTE(COBJ)CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)IF INDEX(CMND.RESULT,"MVDBTOOLKIT.TEST",1) THEN    TEST.MSG=CMND.RESULT    TEST.STATUS=1END ELSE    TEST.MSG=CMND.RESULT    TEST.STATUS=0ENDCONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSGGOSUB end.test* Test WFILEIOTEST="WFILEIO-WRITE"USER.NO=FIELD(OCONV('','U50BB'),' ',1)GOSUB start.testCALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)TMP.FILE.NAME=TMP.DIR:FILEDELIM:'TMP-':USER.NO:'.txt'TEST.MSG=TMP.FILE.NAMECALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.FILE.NAME,"",RERR)SAVE.FOBJ=FOBJTMP.DATA=TIMEDATE()CALL @WOBJ.RTNE(FOBJ,"SET","data",TMP.DATA,"",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUS.MSG,"",RERR)TEST.STATUS=RESPONSE.STATUSIF NOT(RESPONSE.STATUS) THEN TEST.MSG:=RESPONSE.STATUS.MSGGOSUB end.testIF NOT(TEST.STATUS) THEN STOP "Test Failed, no reason to continue"TEST='WFILEIO-READ'GOSUB start.test* NOW READ IT BACK INCALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)TEST.MSG="(":TMP.DATA:')=(':RESPONSE.DATA:")"TEST.STATUS=1IF TMP.DATA # RESPONSE.DATA THEN TEST.STATUS=0GOSUB end.testTEST="WFILEIO-DELETE"; GOSUB start.testFOBJ=SAVE.FOBJCALL @WOBJ.RTNE(FOBJ,"SET","action","DELETE","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)FOBJ=SAVE.FOBJCALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)RESPONSE.DATA=""CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUSMSG,"",RERR)TEST.STATUS=1TEST.MSG=TMP.FILE.NAME:' ':RESPONSE.STATUSIF RESPONSE.STATUS=0 AND RESPONSE.DATA="" THEN NULL ELSE TEST.STATUS=0GOSUB end.test* Let get our current directoryTEST="pwd"; GOSUB start.testIF OCONV(PLATFORM,"MCU") = "WINDOWS" THEN   CMND='echo %CD%'END ELSE   CMND='pwd'ENDCALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)CALL MVDBTOOLKIT.WEXECUTE(COBJ)CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)IF 1 THEN    TEST.MSG=CMND.RESULT    TEST.STATUS=1END ELSE    TEST.MSG=CMND.RESULT    TEST.STATUS=0ENDCONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSGGOSUB end.testMVDBTOOLKIT.LOCATION = CMND.RESULTIF 0 THEN* Lets verify we have curl!!!IF CURLLOCATION="" THEN CURLLOCATION="curl"TEST="default curl"; GOSUB start.testCMND=CURLLOCATION:' -V'CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)CALL MVDBTOOLKIT.WEXECUTE(COBJ)CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)BEGIN CASE   CASE INDEX(CMND.RESULT,"libcurl",1) AND 0    TEST.MSG=CMND.RESULT    TEST.STATUS=1   CASE OCONV(PLATFORM,"MCU")="WINDOWS"    TEST.MSG=CMND.RESULT    TEST.STATUS=2   CASE 1    TEST.MSG=0END CASECONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSGGOSUB end.test* Start looking for curlIF TEST.STATUS=2 THEN   CURLLOCATION="c:\progra~1\git\mingw64\bin\curl.exe"   TEST="git curl"; GOSUB start.test   CMND=CURLLOCATION:' -V'   CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)   CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)   CALL MVDBTOOLKIT.WEXECUTE(COBJ)   CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)   BEGIN CASE      CASE INDEX(CMND.RESULT,"libcurl",1) AND 0         TEST.MSG=CMND.RESULT         TEST.STATUS=1      CASE OCONV(PLATFORM,"MCU")="WINDOWS"         TEST.MSG=CMND.RESULT         TEST.STATUS=2      CASE 1         TEST.MSG=CMND.RESULT         TEST.STATUS=0   END CASE   CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG   GOSUB end.testENDIF TEST.STATUS=2 THEN   CURLLOCATION=MVDBTOOLKIT.LOCATION:"\mvdbtoolkit\curl\windows64\curl.exe"   TEST="mvdbtoolkit curl"; GOSUB start.test   CMND=CURLLOCATION:' -V'   CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)   CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)   CALL MVDBTOOLKIT.WEXECUTE(COBJ)   CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)   BEGIN CASE      CASE INDEX(CMND.RESULT,"libcurl",1) AND 0         TEST.MSG=CMND.RESULT         TEST.STATUS=1       CASE 1         TEST.STATUS=0         TEST.MSG=CMND   END CASE   CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG   GOSUB end.testENDENDTEST="WCALL"GOSUB start.testCALL @WOBJ.RTNE(OBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","method","POST","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","debug","N","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","url","https://httpbin.org/anything?field1=value1","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","insecure","Y","",RERR)  CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","headers","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","headers.X-TEST-HEADER","headertest","",RERR)  CALL @WOBJ.RTNE(OBJ,"SET.ARRAY","formfields","[]","",RERR) CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","formfields[-1]","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","formfields[0].name","field2","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","formfields[0].value","VALUE2$","",RERR) CALL @WOBJ.RTNE(SOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(SOBJ,"SET","name","field3","",RERR) CALL @WOBJ.RTNE(SOBJ,"SET","value","<EXAMPLE HTML>","",RERR) CALL @WOBJ.RTNE(SOBJ,"TOSTRING","",SJSON,"",RERR) CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","formfields[-1]",SJSON,"",RERR) CALL MVDBTOOLKIT.WCALL(OBJ) CALL @WOBJ.RTNE(OBJ,"GET","response.data",RESPONSE,"",RERR) OPEN "MVDBTOOLKIT.BP" TO FILE ELSE STOP *PRINT "RESPONSE=":RESPONSE WRITE RESPONSE ON FILE, "MVDBTOOLKIT.TEST.JSON" CALL @WOBJ.RTNE(OBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR) WRITE OUT.JSON ON FILE, "MVDBTOOLKIT.WCALL.JSON"  CALL @WOBJ.RTNE(OBJ,"GET","response.status",RESPONSE.STATUS,"",RERR) *PRINT 'RESPONSE.STATUS=':RESPONSE.STATUS:'  ': *IF RESPONSE.STATUS="200" THEN PRINT "OK" ELSE PRINT "FAIL" TEST.MSG=RESPONSE.STATUS IF RESPONSE.STATUS="200" THEN    TEST.STATUS=1 END ELSE    TEST.STATUS=0 END GOSUB end.test TEST='WCALL.HTTPTYPE' GOSUB start.test CALL @WOBJ.RTNE(OBJ,"GET","response.http_type",RESPONSE.HTTP.TYPE,"",RERR) *PRINT 'RESPONSE.HTTP_TYPE=':RESPONSE.HTTP.TYPE TEST.MSG=RESPONSE.HTTP.TYPE IF INDEX(TEST.MSG,'HTTP/',1) THEN    TEST.STATUS=1 END ELSE    TEST.STATUS=0 END GOSUB end.test CALL @WOBJ.RTNE(ROBJ,"FROMSTRING","",RESPONSE,"",RERR) TEST="WCALL.FIELD1" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","args.field1",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="value1" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.testTEST="WCALL.field2" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","form.field2",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="VALUE2$" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.testTEST="WCALL.field3" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","form.field3",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="<EXAMPLE HTML>" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.test TEST="WCALL.HEADER" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","headers.X-Test-Header",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="headertest" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.testTEST="WCALL.BODY"GOSUB start.test CALL @WOBJ.RTNE(OBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","method","POST","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","debug","N","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","url","https://httpbin.org/anything?field1=value1","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","insecure","N","",RERR) CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","headers","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","Content-Type","application/json","",RERR)  CALL @WOBJ.RTNE(TESTOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(TESTOBJ,"SET","test","value","",RERR) CALL @WOBJ.RTNE(TESTOBJ,"TOSTRING","",TESTJSON,"PRETTIFY",RERR) CALL @WOBJ.RTNE(OBJ,"SET.STRING","body",TESTJSON,"",RERR)  CALL MVDBTOOLKIT.WCALL(OBJ) CALL @WOBJ.RTNE(OBJ,"GET","response.data",RESPONSE,"",RERR)  WRITE RESPONSE ON FILE, "MVDBTOOLKIT.TESTBODY.JSON" CALL @WOBJ.RTNE(OBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR) WRITE OUT.JSON ON FILE, "MVDBTOOLKIT.WCALLBODY.JSON" CALL @WOBJ.RTNE(OBJ,"GET","response.status",RESPONSE.STATUS,"",RERR) *PRINT 'RESPONSE.STATUS=':RESPONSE.STATUS:'  ': *IF RESPONSE.STATUS="200" THEN PRINT "OK" ELSE PRINT "FAIL" TEST.MSG=RESPONSE.STATUS IF RESPONSE.STATUS="200" THEN    TEST.STATUS=1 END ELSE    TEST.STATUS=0 END GOSUB end.test TEST="WCALL.BODY.RESULT" GOSUB start.test * The testing web site does not send raw body back very well * we will just look for what we expect CONVERT CHAR(254):CHAR(253):CHAR(252):CHAR(10):CHAR(13) TO '' IN RESPONSE POS=INDEX(RESPONSE,'"form"',1) IF POS THEN RESPONSE=RESPONSE[POS,9999] TEST.MSG=RESPONSE IF INDEX(RESPONSE,'"test',1) AND INDEX(RESPONSE,'"value',1) THEN     TEST.STATUS=1 END ELSE     TEST.STATUS=0 END GOSUB end.test STOP*GOSUB start.testRETURN*process.error: *IF RERR<1> THEN   TEST.STATUS=-1   TEST.MSG=RERR<1>ENDRETURN**start.test: *TEST.STATUS=0TEST.MSG="Success"PRINT "":TEST[1,15]"L(#15)":RETURN*end.test: *PRINT "  ":TEST.MSG[1,50]"L(#50)":PRINT " ":PRE=''; AFT=''BEGIN CASE   CASE TEST.STATUS=2; ERROR="Warning"; PRE=''; AFT=''   CASE TEST.STATUS; ERROR="Passed"   CASE 1; ERROR="Passed"; PRE=@(-13); AFT=@(-14)END CASEPRINT PRE:"[":PRINT ERROR"L(#7)":PRINT "]":AFTRETURN 000CDEMVDBTOOLKIT.WCALLBODY.JSON0c2{  "method": "POST",   "debug": "N",   "url": "https://httpbin.org/anything?field1=value1",   "insecure": "N",   "headers": {    },   "Content-Type": "application/json",   "body": "{  \"test\": \"value\"  }",   "response": {    "headers": {      "Date": "Thu, 30 Apr 2020 05:09:09 GMT",       "Content-Type": "application/json",       "Content-Length": "608",       "Connection": "keep-alive",       "Server": "gunicorn/19.9.0",       "Access-Control-Allow-Origin": "*",       "Access-Control-Allow-Credentials": "true"      },     "status": 200,     "http_type": "HTTP/1.1",     "statusmsg": "OK",     "log": [      "* About to connect() to httpbin.org port 443 (#0)",       "*   Trying 34.230.193.231... connected",       "* Connected to httpbin.org (34.230.193.231) port 443 (#0)",       "* Initializing NSS with certpath: sql:/etc/pki/nssdb",       "*   CAfile: /etc/pki/tls/certs/ca-bundle.crt",       "  CApath: none",       "* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",       "* Server certificate:",       "* 	subject: CN=httpbin.org",       "* 	start date: Jan 18 00:00:00 2020 GMT",       "* 	expire date: Feb 18 12:00:00 2021 GMT",       "* 	common name: httpbin.org",       "* 	issuer: CN=Amazon,OU=Server CA 1B,O=Amazon,C=US",       "> POST /anything?field1=value1 HTTP/1.1",       "",       "> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",       "",       "> Host: httpbin.org",       "",       "> Accept: */*",       "",       "> Content-Length: 26",       "",       "> Content-Type: application/x-www-form-urlencoded",       "",       "> ",       "",       "} [data not shown]",       "< HTTP/1.1 200 OK",       "",       "< Date: Thu, 30 Apr 2020 05:09:09 GMT",       "",       "< Content-Type: application/json",       "",       "< Content-Length: 608",       "",       "< Connection: keep-alive",       "",       "< Server: gunicorn/19.9.0",       "",       "< Access-Control-Allow-Origin: *",       "",       "< Access-Control-Allow-Credentials: true",       "",       "< ",       "",       "{ [data not shown]",       "* Connection #0 to host httpbin.org left intact",       "* Closing connection #0"      ],     "data": "{  \"args\": {    \"field1\": \"value1\"  },   \"data\": \"\",   \"files\": {},   \"form\": {    \"{\\r\\n  \\\"test\\\": \\\"value\\\"\\r\\n  }\\n\": \"\"  },   \"headers\": {    \"Accept\": \"*/*\",     \"Content-Length\": \"26\",     \"Content-Type\": \"application/x-www-form-urlencoded\",     \"Host\": \"httpbin.org\",     \"User-Agent\": \"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2\",     \"X-Amzn-Trace-Id\": \"Root=1-5eaa5d75-49623fd72c6a4d01cec7a532\"  },   \"json\": null,   \"method\": \"POST\",   \"origin\": \"98.173.13.82\",   \"url\": \"https://httpbin.org/anything?field1=value1\"}",     "curl_cmnd": "curl -s -m 45 -X POST -D \"/tmp/WCALL-1.headers\" -v --stderr \"/tmp/WCALL-1.stderr\" --data-binary \"@/tmp/WCALL-1.body\" \"https://httpbin.org/anything?field1=value1\""    }  }000EA0MVDBTOOLKIT.WCALL.JSON0c2{  "method": "POST",   "debug": "N",   "url": "https://httpbin.org/anything?field1=value1",   "insecure": "Y",   "headers": {    "X-TEST-HEADER": "headertest"    },   "formfields": [    {      "name": "field2",       "value": "VALUE2$"      },     {      "name": "field3",       "value": "<EXAMPLE HTML>"      }    ],   "response": {    "headers": {      "Date": "Thu, 30 Apr 2020 05:09:09 GMT",       "Content-Type": "application/json",       "Content-Length": "693",       "Connection": "keep-alive",       "Server": "gunicorn/19.9.0",       "Access-Control-Allow-Origin": "*",       "Access-Control-Allow-Credentials": "true"      },     "status": 200,     "http_type": "HTTP/1.1",     "statusmsg": "OK",     "log": [      "* About to connect() to httpbin.org port 443 (#0)",       "*   Trying 34.230.193.231... connected",       "* Connected to httpbin.org (34.230.193.231) port 443 (#0)",       "* Initializing NSS with certpath: sql:/etc/pki/nssdb",       "*   CAfile: /etc/pki/tls/certs/ca-bundle.crt",       "  CApath: none",       "* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",       "* Server certificate:",       "* 	subject: CN=httpbin.org",       "* 	start date: Jan 18 00:00:00 2020 GMT",       "* 	expire date: Feb 18 12:00:00 2021 GMT",       "* 	common name: httpbin.org",       "* 	issuer: CN=Amazon,OU=Server CA 1B,O=Amazon,C=US",       "> POST /anything?field1=value1 HTTP/1.1",       "",       "> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",       "",       "> Host: httpbin.org",       "",       "> Accept: */*",       "",       "> X-TEST-HEADER: headertest",       "",       "> Content-Length: 257",       "",       "> Expect: 100-continue",       "",       "> Content-Type: multipart/form-data; boundary=----------------------------9f61f37bacb1",       "",       "> ",       "",       "< HTTP/1.1 100 Continue",       "",       "} [data not shown]",       "< HTTP/1.1 200 OK",       "",       "< Date: Thu, 30 Apr 2020 05:09:09 GMT",       "",       "< Content-Type: application/json",       "",       "< Content-Length: 693",       "",       "< Connection: keep-alive",       "",       "< Server: gunicorn/19.9.0",       "",       "< Access-Control-Allow-Origin: *",       "",       "< Access-Control-Allow-Credentials: true",       "",       "< ",       "",       "{ [data not shown]",       "* Connection #0 to host httpbin.org left intact",       "* Closing connection #0"      ],     "data": "{  \"args\": {    \"field1\": \"value1\"  },   \"data\": \"\",   \"files\": {},   \"form\": {    \"field2\": \"VALUE2$\",     \"field3\": \"<EXAMPLE HTML>\"  },   \"headers\": {    \"Accept\": \"*/*\",     \"Content-Length\": \"257\",     \"Content-Type\": \"multipart/form-data; boundary=----------------------------9f61f37bacb1\",     \"Host\": \"httpbin.org\",     \"User-Agent\": \"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2\",     \"X-Amzn-Trace-Id\": \"Root=1-5eaa5d75-64172de2a2432626bf6a5f61\",     \"X-Test-Header\": \"headertest\"  },   \"json\": null,   \"method\": \"POST\",   \"origin\": \"98.173.13.82\",   \"url\": \"https://httpbin.org/anything?field1=value1\"}",     "curl_cmnd": "curl -s -m 45 -X POST -H \"X-TEST-HEADER: headertest\" -D \"/tmp/WCALL-1.headers\" -v --stderr \"/tmp/WCALL-1.stderr\" --form-string field2=\"VALUE2$\" --form-string field3=\"<EXAMPLE HTML>\" \"https://httpbin.org/anything?field1=value1\""    }  }00131FMVDBTOOLKIT.WFILEIO0c2SUBROUTINE MVDBTOOLKIT.WFILEIO(INOBJ)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 7th 2018* Description: WFILEIO MULTI PLATFORM WORKING WITH O/S FILES************************************************************************* INOBJ** { "ACTION":"READ,WRITE,DELETE",*   "PATH":"PATH TO THE FILE",*   "DATA":"DATA FOR A WRITE",*   "dosletter":"OPTIONAL DOS LETTER TO ADD TO PATH",*   "NEWLINE":"CR,LF,CRLF,DOS,UNIX",*   "PERMISSIONS":"TBD"*   "response": {*       "data":"responsedata",*       "status":1-ok, else no,*       "statusmsg":"statusmsg" *   }* }** need to know the existing platform*PLATFORM.DELIM="\"*PLATFORM.TYPE="WINDOWS"*PLATFORM.MV="D3"CALL MVDBTOOLKIT.WPLATFORM(POBJ)INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL @WOBJ.RTNE(POBJ,"GET","mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM.TYPE,"",RERR)FSTATUS=1FSTATUSMSG="OK"CALL @WOBJ.RTNE(INOBJ,"GET","action",FILEIO.ACTION,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","path",FILEIO.PATH,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","data",FILEIO.DATA,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","dosletter",FILEIO.DOSLETTER,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","newline",FILEIO.NEWLINE,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","permissions",FILEIO.PERMISSIONS,"",RERR)*CALL @WOBJ.RTNE(OUTOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(INOBJ,"SET.OBJECT","response","{}","",RERR)FILEIO.ACTION=OCONV(FILEIO.ACTION,"MCU")FILEIO.NEWLINE=OCONV(FILEIO.NEWLINE,"MCU")IF FILEIO.ACTION = "" THEN    FSTATUS=0    FSTATUSMSG="No action defined"    GOTO end.of.runENDIF FILEIO.PATH = "" THEN    FSTATUS=0    FSTATUSMSG="No path defined"    GOTO end.of.runENDPARSED.FILEIO.PATH=""L=LEN(FILEIO.PATH)FOR X=1 TO L   C=FILEIO.PATH[X,1]   IF C=PLATFORM.DELIM THEN      PARSED.FILEIO.PATH:=@AM   END ELSE      PARSED.FILEIO.PATH:=C   ENDNEXT X*PARSED.FILEIO.PATH=EXCHANGE(FILEIO.PATH,PLATFORM.DELIM,@AM)PARSED.FILEIO.PATH=FILEIO.PATHCONVERT PLATFORM.DELIM TO @AM IN PARSED.FILEIO.PATHPARSED.FILEIO.PARTS=DCOUNT(PARSED.FILEIO.PATH,@AM)* JBASE DOES NOT APPEAR TO HONOR WINDOWS ENVIROMENT VARIABLES IN THE OPEN* THIS IS MAKING %USERPROFILE% NOT WORK** WE ARE GOING TO LOOP THRU THE THE PARTS AN EXPAND THEM OURSELVES** THIS HAS BEEN TESTED ON JBASE WINDOWS SO FAR.*FOR P=1 TO PARSED.FILEIO.PARTS    THIS.PART=PARSED.FILEIO.PATH<P>    IF THIS.PART[1,1]='%' OR THIS.PART[1,1]="$" THEN        CONVERT '%$' TO '' IN THIS.PART * 9/4/2019 PAP Modified this to use mvdbtoolkit.wgetenv  *       IF GETENV(THIS.PART,NEW.THIS.PART) THEN *           PARSED.FILEIO.PATH<P>=NEW.THIS.PART *       END         CALL MVDBTOOLKIT.WGETENV(THIS.PART,NEW.THIS.PART)         IF NEW.THIS.PART # "" THEN PARSED.FILEIO.PATH<P>=NEW.THIS.PART    ENDNEXT PPARSED.FILEIO.FILE.NAME=PARSED.FILEIO.PATH<PARSED.FILEIO.PARTS>FILEIO.JUST.PATH=DELETE(PARSED.FILEIO.PATH,PARSED.FILEIO.PARTS)*FILEIO.JUST.PATH=EXCHANGE(FILEIO.JUST.PATH,@AM,PLATFORM.DELIM)CONVERT @AM TO PLATFORM.DELIM IN FILEIO.JUST.PATHCALL @WOBJ.RTNE(INOBJ,"SET.OBJECT","work","{}","",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.parsed_fileio_file_name",PARSED.FILEIO.FILE.NAME,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.fileio_just_path",FILEIO.JUST.PATH,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.platform",PLATFORM.TYPE,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET.OBJECT","response","{}","",RERR)* lets have a seperate routine for each platformBEGIN CASE    CASE FILEIO.ACTION="READ"    CASE FILEIO.ACTION="WRITE"    CASE FILEIO.ACTION="DELETE"    CASE 1        FSTATUS=0        FSTATUSMSG="Invalid action"        CALL @WOBJ.RTNE(INOBJ,"SET.NUMBER", "response.status", FSTATUS,"",RERR)        CALL @WOBJ.RTNE(INOBJ,"SET.STRING", "response.statusmsg", FSTATUSMSG, "", RERR)        GOTO end.of.runEND CASEBEGIN CASE    CASE PLATFORM.MV="D3"        FILEIO.RTNE="MVDBTOOLKIT.WFILEIO.D3"        CALL MVDBTOOLKIT.WFILEIO.D3(INOBJ)    CASE PLATFORM.MV="JBASE"        FILEIO.RTNE="MVDBTOOLKIT.W.FILEIO.JBASE"        CALL MVDBTOOLKIT.WFILEIO.JBASE(INOBJ)    CASE PLATFORM.MV="UNIVERSE"        FILEIO.RTNE="MVDBTOOLKIT.WFILEIO.UNIVERSE"        CALL MVDBTOOLKIT.WFILEIO.UNIVERSE(INOBJ)    CASE PLATFORM.MV="UNIDATA"        FILEIO.RTNE="MVDBTOOLKIT.WFILEIO.UNIDATA"        CALL MVDBTOOLKIT.WFILEIO.UNIDATA(INOBJ)    CASE PLATFORM.MV="QM"        * QM SUPPORTS OPENPATH        CALL MVDBTOOLKIT.WFILEIO.QM(INOBJ)   CASE 1        DEBUG        FSTATUS=0        FSTATUSMSG="Invalid Platform ":PLATFORM.MV        GOTO end.of.runEND CASEend.of.run: *RETURN0002CDMVDBTOOLKIT.TEST.JSON0c2{  "args": {    "field1": "value1"  },   "data": "",   "files": {},   "form": {    "field2": "VALUE2$",     "field3": "<EXAMPLE HTML>"  },   "headers": {    "Accept": "*/*",     "Content-Length": "257",     "Content-Type": "multipart/form-data; boundary=----------------------------9f61f37bacb1",     "Host": "httpbin.org",     "User-Agent": "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",     "X-Amzn-Trace-Id": "Root=1-5eaa5d75-64172de2a2432626bf6a5f61",     "X-Test-Header": "headertest"  },   "json": null,   "method": "POST",   "origin": "98.173.13.82",   "url": "https://httpbin.org/anything?field1=value1"}000D13MVDBTOOLKIT.WFILEIO.UNIVERSE0c2SUBROUTINE MVDBTOOLKIT.WFILEIO.UNIVERSE(FOBJ)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 7th 2018* Description: WFILEIO MULTI PLATFORM WORKING WITH O/S FILES************************************************************************* INOBJ** { "ACTION":"READ,WRTE,DELETE",*   "PATH":"PATH TO THE FILE",*   "DATA":"DATA FOR A WRITE",*   "dosletter":"OPTIONAL DOS LETTER TO ADD TO PATH",*   "NEWLINE":"CR,LF,CRLF,DOS,UNIX",*   "PERMISSIONS":"TBD",*   "debug":"Y or N",*   "response": {*       "data":"responsedata",*       "status":1-ok, else no,*       "statusmsg":"statusmsg" *   }* }** need to know the existing platform*PLATFORM.DELIM="\"*PLATFORM.TYPE="WINDOWS"*PLATFORM.MV="D3"INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL @WOBJ.RTNE(FOBJ,"GET","debug",DO.DEBUG,"",RERR)IF OCONV(DO.DEBUG[1,1],"MCU") = "Y" OR DO.DEBUG="1" THEN DO.DEBUG=1 ELSE DO.DEBUG=""CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)FSTATUS=1FSTATUSMSG="OK"CALL @WOBJ.RTNE(FOBJ,"GET","action",FILEIO.ACTION,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","path",FILEIO.PATH,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","data",FILEIO.DATA,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","dosletter",FILEIO.DOSLETTER,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","newline",FILEIO.NEWLINE,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","permissions",FILEIO.PERMISSIONS,"",RERR)*CALL @WOBJ.RTNE(OUTOBJ,"FROMSTRING","","{}","",RERR)FILEIO.ACTION=OCONV(FILEIO.ACTION,"MCU")FILEIO.NEWLINE=OCONV(FILEIO.NEWLINE,"MCU")CALL @WOBJ.RTNE(FOBJ,"GET","work.parsed_fileio_file_name",PARSED.FILEIO.FILE.NAME,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.fileio_just_path",FILEIO.JUST.PATH,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MVTYPE,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.FILEDELIM,"",RERR)* FOR RIGHT NOW ON JBASE WE WILL JUST OPEN THE FILE USING FULL PATHINGIF PLATFORM.MV = "WINDOWS" THEN FILEIO.JUST.PATH = "."OPENPATH FILEIO.JUST.PATH TO FI ELSE    FSTATUS=0    FSTATUSMSG="Could not open file ":FILEIO.JUST.PATH    GOTO end.of.runENDBEGIN CASE    CASE FILEIO.ACTION="READ"        GOSUB fileio.read    CASE FILEIO.ACTION="WRITE"        GOSUB fileio.write    CASE FILEIO.ACTION="DELETE"        GOSUB fileio.delete    CASE 1        FSTATUS=0        FSTATUSMSG="Invalid action"        GOTO end.of.runEND CASEend.of.run: *CALL @WOBJ.RTNE(FOBJ,"SET.NUMBER", "response.status", FSTATUS,"",RERR)CALL @WOBJ.RTNE(FOBJ,"SET.STRING", "response.statusmsg", FSTATUSMSG, "", RERR)RETURNfileio.read: *REC=""READ REC FROM FI, PARSED.FILEIO.FILE.NAME ELSE    FSTATUS=0    FSTATUSMSG="Could not find ":PARSED.FILEIO.FILE.NAMEENDCALL @WOBJ.RTNE(FOBJ,"SET.STRING","response.data",REC,"",RERR)IF 0 THEN    PRINT "PATH   :":FILEIO.JUST.PATH    PRINT "ID     :":PARSED.FILEIO.FILE.NAME    PRINT "REC    :":RECENDRETURNfileio.write: *WRITE FILEIO.DATA ON FI, PARSED.FILEIO.FILE.NAMERETURNfileio.delete: *DELETE FI, PARSED.FILEIO.FILE.NAMERETURN00027CMVDBTOOLKIT.TESTBODY.JSON0c2{  "args": {    "field1": "value1"  },   "data": "",   "files": {},   "form": {    "{\r\n  \"test\": \"value\"\r\n  }\n": ""  },   "headers": {    "Accept": "*/*",     "Content-Length": "26",     "Content-Type": "application/x-www-form-urlencoded",     "Host": "httpbin.org",     "User-Agent": "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",     "X-Amzn-Trace-Id": "Root=1-5eaa5d75-49623fd72c6a4d01cec7a532"  },   "json": null,   "method": "POST",   "origin": "98.173.13.82",   "url": "https://httpbin.org/anything?field1=value1"}00005EMVDBTOOLKIT.SWAP.DEFAULT0c2SUBROUTINE MVDBTOOLKIT.SWAP.DEFAULT(V,F,T)V=SWAP(V,F,T)RETURN00033CMVDBTOOLKIT.WGETENV0c2SUBROUTINE MVDBTOOLKIT.WGETENV(VAR.NAME,RETURN.VALUE)INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL MVDBTOOLKIT.WPLATFORM(POBJ)CALL @WOBJ.RTNE(POBJ,"GET","mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM.TYPE,"",RERR)* THIS FUNCTION IS A CROSS PLATFORM WGET VAR FUNCTIONBEGIN CASE    CASE PLATFORM.MV="D3" AND PLATFORM.TYPE="LINUX"        FILEIO.RTNE="MVDBTOOLKIT.WGETENV.D3"        CALL MVDBTOOLKIT.WGETENV.D3(VAR.NAME,RETURN.VALUE)    CASE PLATFORM.MV="JBASE"        FILEIO.RTNE="MVDBTOOLKIT.WGETENV.JBASE"        CALL MVDBTOOLKIT.WGETENV.JBASE(VAR.NAME,RETURN.VALUE)    CASE 1        CALL MVDBTOOLKIT.WGETENV.GENERIC(VAR.NAME,RETURN.VALUE,PLATFORM.MV,PLATFORM.TYPE)END CASEend.of.run: *RETURN000156MVDBTOOLKIT.WEXECUTE.INCLUDE0c2* COMMON FOR EXECUTE *COMMON /MVDBWEX/ EXECUTE.COMMANDCOMMON /MVDBWEX/ EXECUTE.DIRECTORYCOMMON /MVDBWEX/ EXECUTE.DOCAPTURECOMMON /MVDBWEX/ EXECUTE.RETURNINGCOMMON /MVDBWEX/ EXECUTE.RTNDATACOMMON /MVDBWEX/ EXECUTE.PASSLISTCOMMON /MVDBWEX/ MV.TYPECOMMON /MVDBWEX/ PLATFORMCOMMON /MVDBWEX/ EXECUTE.DEBUG000498MVDBTOOLKIT.WEXECUTE.D30c2SUBROUTINE MVDBTOOLKIT.WEXECUTE.D3(EOBJ)INCLUDE MVDBTOOLKIT.WEXECUTE.INCLUDE************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 12, 2018* Description: Execute library JBASE VERSION***********************************************************************INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJE.RESULTS=""E.RETURNING=""E.RTNDATA=""BEGIN CASE    CASE EXECUTE.DOCAPTURE="N"        EXECUTE '!':EXECUTE.COMMAND     CASE 1        EXECUTE '!':EXECUTE.COMMAND CAPTURING E.RESULTEND CASEIF EXECUTE.DEBUG="1"OR OCONV(EXECUTE.DEBUG[1,1],'MCU')='Y' THEN   WRITE.DEBUG=1   OPEN 'RESULT.FILE' TO RFILE ELSE WRITE.DEBUG=0   IF WRITE.DEBUG THEN       WRITE EXECUTE.COMMAND ON RFILE, 'WEXECUTE'   ENDENDCONVERT CHAR(0) TO '' IN E.RESULTCONVERT CHAR(255) TO '' IN E.RESULTCALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)IF MV.TYPE='UNIDATA' THEN E.RESULT=E.RESULT[1,LEN(E.RESULT)-1]CALL @WOBJ.RTNE(EOBJ,"SET.STRING","result.result",E.RESULT,"",RERR)RETURN0004E5MVDBTOOLKIT.WGETENV.GENERIC0c2SUBROUTINE MVDBTOOLKIT.WGETENV.GENERIC(VAR.NAME, RETURN.VALUE, MVTYPE, PLATFORM)RETURN.VALUE=""* WE ARE GOING TO JUST SHELL OUT AND GET THE ENVIRONMENT VARIABLE BASED* ON THE PLATFORMBEGIN CASE    CASE MVTYPE="UNIVERSE" AND PLATFORM="LINUX"        CMND='sh -c "echo $':VAR.NAME:'"'    CASE MVTYPE="UNIVERSE" AND PLATFORM="WINDOWS"        CMND='dos /c "echo %':VAR.NAME:'%"'    CASE (MVTYPE="JBASE" OR MVTYPE="D3") AND PLATFORM="LINUX"        CMND='!echo $':VAR.NAME    CASE MVTYPE="JBASE" AND PLATFORM="WINDOWS"         CMND='echo %':VAR.NAME:'%'    CASE MVTYPE="D3" AND PLATFORM="WINDOWS"        CMND='!echo %':VAR.NAME:'%'    CASE MVTYPE='UNIDATA' AND PLATFORM="WINDOWS"        CMND='!echo %':VAR.NAME:'%'    CASE MVTYPE='UNIDATA' AND PLATFORM="LINUX"        CMND='!echo $':VAR.NAME    CASE MVTYPE='QM' AND PLATFORM="WINDOWS"        * QM DOES HAVE SYSTEM(1025) TO GET ENVIRONMENT STUFF        * STICKING WITH THIS FOR NOW        CMND='!echo %':VAR.NAME:'%'    CASE MVTYPE='QM' AND PLATFORM="LINUX"        CMND='!echo $':VAR.NAME    CASE 1        CMND=''END CASEEXECUTE CMND CAPTURING RETURN.VALUEIF MVTYPE='UNIDATA' THEN    RETURN.VALUE=RETURN.VALUE[1,LEN(RETURN.VALUE)-1]ENDRETURN000322MVDBTOOLKIT.EXPAND.PATH0c2SUBROUTINE MVDBTOOLKIT.EXPAND.PATH(PASSED.PATH)INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL MVDBTOOLKIT.WPLATFORM(POBJ)CALL @WOBJ.RTNE(POBJ,"GET","mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM.TYPE,"",RERR)PARSED.PATH=PASSED.PATHCONVERT PLATFORM.DELIM TO @AM IN PARSED.PATHPARSED.PARTS=DCOUNT(PARSED.PATH,@AM)FOR P=1 TO PARSED.PARTS    THIS.PART=PARSED.PATH<P>    IF THIS.PART[1,1]='%' OR THIS.PART[1,1]="$" THEN        CONVERT '%$' TO '' IN THIS.PART         CALL MVDBTOOLKIT.WGETENV(THIS.PART,NEW.THIS.PART)         IF NEW.THIS.PART # "" THEN PARSED.PATH<P>=NEW.THIS.PART    ENDNEXT PCONVERT @AM TO PLATFORM.DELIM IN PARSED.PATHPASSED.PATH=PARSED.PATHRETURN00002EMVDBTOOLKIT.TEST.INCLUDE0c2CMND = SENTENCE()0001E1MVDBTOOLKIT.SWAP0c2SUBROUTINE MVDBTOOLKIT.SWAP(V,F,T)* MVDBTOOLKIT.SWAPINCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ* PLATFORM INDEPENDENT SWAP COMMANDCALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)BEGIN CASE    CASE MV.TYPE='UNIVERSE'        CALL MVDBTOOLKIT.SWAP.UNIVERSE(V,F,T)    CASE MV.TYPE='UNIDATA'        CALL MVDBTOOLKIT.SWAP.UNIDATA(V,F,T)    CASE 1        CALL MVDBTOOLKIT.SWAP.DEFAULT(V,F,T)END CASERETURN000778MVDBTOOLKIT.WPLATFORM0c2      SUBROUTINE MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)      **********************************************************************      *      * Copyright (C) 2017 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: June 12, 2018      * Description: WPLATFORM OBJ      *      **********************************************************************      *      *      * PLATFORMOBJ      *      * {      *   "platform":" WINDOWS OR LINUX",      *   "mvtype"  :" JBASE, D3, UNIDATA, UNIVERSE, OPENQM",      *   "tmpdir"  :"tmp dir"      * }      * nEW lINE      INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ            USE.DICT=1      OPEN "DICT","MVDBTOOLKIT.BP" TO DICT.MVDBTOOLKIT.BP ELSE USE.DICT=0      IF USE.DICT THEN         READ PLATFORMOBJ.JSON FROM DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON" ELSE PLATFORMOBJ.JSON=""      END      OPEN "MD" TO FI.MD ELSE         OPEN "VOC" TO FI.MD ELSE RETURN      END      * 02/06/2020 - Changed md item name to MV.PLATFORM.JSON to make it not tied to this package            IF PLATFORMOBJ.JSON="" THEN         CRT "No MV.PLATFORM.JSON IN MD!!!"         STOP      END      CONVERT CHAR(254) TO '' IN PLATFORMOBJ.JSON      CALL @WOBJ.RTNE(PLATFORMOBJ,"FROMSTRING","",PLATFORMOBJ.JSON,"",RERR)      * 9/2/2019 PAP - We now figure out filedelim vs passing it in original config filedelim      CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)      IF PLATFORM="WINDOWS" THEN DELIM = "\" ELSE DELIM = "/"      CALL @WOBJ.RTNE(PLATFORMOBJ,"SET","filedelim",DELIM,"",RERR)      CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","tmpdir",TMP.DIR,"",RERR)      CALL @WOBJ.RTNE(PLATFORMOBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR)      WRITE OUT.JSON ON DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON"      RETURN0006D0MVDBTOOLKIT.ENCODE0c2SUBROUTINE MVDBTOOLKIT.ENCODE(IN.STR,OUT.STR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: encode json string*************************************************************************** THIS PROGRAM WILL CONVERT ALL BAD CHARACTERS TO AN ESCAPED CHARACTER***EQU CR TO CHAR(13), LF TO CHAR(10), TB TO CHAR(9), BS TO CHAR(8), FF TO CHAR(12)NL = CR:LFPRETTIFYCR=""**OPEN 'RESULT.FILE' TO RFILE ELSE STOP* WE NEED TO ENCODE* " = \"   (34)* \ = \\    (92)* / = \/* CHAR(7) = \b* CHAR(13) = \r* char(10) = \n* char(12) = \f* char(9)  = \tOUT.STR=''L=LEN(IN.STR)CONVERT @AM TO LF IN IN.STR; * LETS SWITCH 254 TO LF BE DEFAULTFOR X=1 TO L    C=IN.STR[X,1]    SEQ.C=SEQ(C)    ENCODE=0    *IF SEQ.C < 32 THEN ENCODE=1; * BELOW SPACE    *IF SEQ.C > 32 AND SEQ.C < 48 THEN ENCODE=1; * LETS ENCODE ALL OF THIS !@$%^&*()    IF SEQ.C=34 THEN ENCODE=1    IF SEQ.C=92 THEN ENCODE=1    * IF SEQ.C=47 THEN ENCODE=1    *IF SEQ.C > 126 THEN ENCODE = 1; * LETS ENCODE ALL THE HIGH ENTRIES    *IF SEQ.C >= 91 AND SEQ.C <= 96 THEN ENCODE=1    IF ENCODE THEN        BEGIN CASE            CASE SEQ.C=7; OUT.STR='\b'            CASE C='\'; OUT.STR:='\\'                *CASE C='/'; OUT.STR:='\/'            CASE C='"'; OUT.STR:='\"'            CASE SEQ.C=10                OUT.STR:='\n'                IF PRETTIFYCR THEN OUT.STR:=NL            CASE SEQ.C=13; OUT.STR:='\r'            CASE SEQ.C=12; OUT.STR:='\f'            CASE 1; OUT.STR:='\u00':OCONV(C,'MX0C')        END CASE    END ELSE        OUT.STR=OUT.STR:C    ENDNEXT XRETURNEND002A1DMVDBTOOLKIT.WCALL0c2SUBROUTINE MVDBTOOLKIT.WCALL(PASSED.WOBJ)************************************************************************ Copyright (C) 2018 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 15, 2018* Description: WCALL Library************************************************************************ @WOBJ.RTNE* { "method":"GET,PUT,POST,ETC",*    "url":"URL TO CALL",*    "headers": { "HEADERNAME":"VALUE", "HEADERNAME":"VALUE" },*    "body":"BODY",*    "formfields": [*         {*            "name":"field name",*            "value":"field value",*            "fieldtype":"blank or file" for now*         }*     ],*    "datafields": [*         {*            "name":"field name",*            "value":"field value",*            "fieldtype":"blank or file" for now*         }*     ],*    "insecure":"Yes,Y,YES - Sets the -k on curl",*    "timeout": ## (default is 45),*    "options":"options to add to curl command",*    "debug":"Y or N",*    "response": {*        "result":"RESULT",*        "status":"STATUS",*        "statusmsg":"STATUS MSG",*        "http_type": "http type",*        "curl_cmnd":"Actual curl command created",*         "error": "error",*         "log": [ "log output line1", "log output line 2" ],*        "headers": { "headername":"header value","headername2":"headervalue" }*    }*  }INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL MVDBTOOLKIT.WPLATFORM(POBJ)CALL @WOBJ.RTNE(POBJ,"GET","mvtype",MV.TYPE,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",FILE.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","curllocation",CURLLOCATION,"",RERR); * change #19IF MV.TYPE="" THEN   CALL @WOBJ.RTNE(POBJ,"GET","error",THIS.ERROR,"",RERR)   PRINT "NO MV TYPE: ":THIS.ERROR   RETURNENDITEMS.TO.DELETE=""; * PATH TO EACH FILE TO DELETECALL @WOBJ.RTNE(POBJ,"GET","tmpdir",TMP.DIR,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","debug",DO.DEBUG,"",RERR)IF OCONV(DO.DEBUG[1,1],"MCU")="Y" OR DO.DEBUG="1" THEN DO.DEBUG=1 ELSE DO.DEBUG=""CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","method",WEB.METHOD,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","url",WEB.URL,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","body",WEB.BODY,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","timeout",WEB.TIMEOUT,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"KEYS","headers",WEB.HEADERS,"",RERR)IF NOT(WEB.TIMEOUT) THEN WEB.TIMEOUT=45CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","insecure",WEB.INSECURE,"",RERR)IF OCONV(WEB.INSECURE[1,1],'MCU') = "Y" THEN WEB.INSECURE=1 ELSE WEB.INSECURE=0CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.OBJECT","response","{}","",RERR)IF TMP.DIR="" THEN BEGIN CASE    CASE PLATFORM="LINUX"       TMP.DIR="/tmp"    CASE INDEX(PLATFORM,"WINDOWS",1) AND MV.TYPE="JBASE"       TMP.DIR="%HOME%"    CASE INDEX(PLATFORM,"WINDOWS",1)       TMP.DIR="%USERPROFILE%\AppData\Local\Temp"    CASE 1       TMP.DIR="/tmp" END CASEENDCALL MVDBTOOLKIT.EXPAND.PATH(TMP.DIR)* 4/6/2020 - Change #19.  IF CURLLOCATION # "" THEN   CMND=CURLLOCATIONEND ELSE   CMND="curl"ENDCMND:=" -s"CMND:=' -m ':WEB.TIMEOUTCMND:=' -X ':WEB.METHODCALL @WOBJ.RTNE(PASSED.WOBJ,"GET","options",WEB.OPTIONS,"",RERR)IF WEB.OPTIONS # "" THEN   CMND:=' ':WEB.OPTIONSENDWEB.NUM.HEADERS=DCOUNT(WEB.HEADERS,@SVM)FOR H=1 TO WEB.NUM.HEADERS   HEADER.NAME=WEB.HEADERS<1,1,H>   CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","headers.":HEADER.NAME,HEADER.VALUE,"",RERR)   CALL MVDBTOOLKIT.ENCODE(HEADER.VALUE,ENCODED.HEADER.VALUE)   CMND:=' -H "':HEADER.NAME:': ':ENCODED.HEADER.VALUE:'"'NEXT HUSER.NO=FIELD(OCONV('','U50BB'),' ',1)SESSION.ID="WCALL-":USER.NOTMP.DIR:=FILE.DELIM* add in dumping of headersCMND:=\ -D "\:TMP.DIR:SESSION.ID:\.headers"\ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:'.headers'* write out stderrCMND:=\ -v --stderr "\:TMP.DIR:SESSION.ID:\.stderr"\ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:\.stderr\CALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)SAVE.FOBJ=FOBJIF WEB.BODY # "" THEN   *CALL @WOBJ.RTNE(EOBJ,"SET.ARRAY","data","[]","",RERR)   *CALL @WOBJ.RTNE(EOBJ,"SET.STRING","data[0]",WEB.BODY,"",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","data",WEB.BODY,"",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:'.body',"",RERR)   ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:'.body'   CALL MVDBTOOLKIT.WFILEIO(FOBJ)   CMND:=' --data-binary "@':TMP.DIR:SESSION.ID:'.body"'   *CMND:='  --data-binary @-'END* form fields *CALL @WOBJ.RTNE(PASSED.WOBJ,"LENGTH","formfields",NUM.FORMFIELDS,"",RERR)FOR X=1 TO NUM.FORMFIELDS P="formfields[":X-1:"]" CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.name',FIELD.NAME,"",RERR) CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.value',FIELD.VALUE,"",RERR) CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.fieldtype',FIELD.TYPE,"",RERR) IF TRIM(FIELD.NAME) # "" THEN    * < > @ ALL MEAN SPECIAL THINGS WITH A -F.  If that exists in the file you need    * to use --form-string    BEGIN CASE       CASE INDEX(FIELD.VALUE,CHAR(13),1) OR INDEX(FIELD.VALUE,CHAR(10),1)         * WE NEED TO WRITE THIS OUT!         TMP.CMND="-F "            CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)            CALL @WOBJ.RTNE(FOBJ,"SET","data",FIELD.VALUE,"",RERR)            CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:'.field':X-1,"",RERR)            ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:'.field':X-1            FIELD.VALUE="@":TMP.DIR:SESSION.ID:'.field':X-1            CALL MVDBTOOLKIT.WFILEIO(FOBJ)         * NEED TO WRITE THE CONTENT OUT TO A TMP FILE *       CASE INDEX(FIELD.VALUE,'!',1) OR INDEX(FIELD.VALUE,'<',1) OR INDEX(FIELD.VALUE,'>',1) OR INDEX(FIELD.VALUE,'@',1) OR INDEX(FIELD.VALUE,'$',1) AND FIELD.TYPE # "file"         TMP.CMND="--form-string "       CASE 1         TMP.CMND="-F "    END CASE    TMP.CMND:=FIELD.NAME:'="'    TMP.CMND:=FIELD.VALUE:'"'    CMND:=' ':TMP.CMND ENDNEXT X* form fields *CALL @WOBJ.RTNE(PASSED.WOBJ,"LENGTH","datafields",NUM.FORMFIELDS,"",RERR)FOR X=1 TO NUM.FORMFIELDS      P="datafields[":X-1:"]"      CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.name',FIELD.NAME,"",RERR)      CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.value',FIELD.VALUE,"",RERR)      CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.fieldtype',FIELD.TYPE,"",RERR)      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,'@','%40')      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,'$','%24')      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,'/','%2F')      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,':','%3A')      IF TRIM(FIELD.NAME) # "" THEN         TMP.CMND="-d "         TMP.CMND:=FIELD.NAME:'="'         TMP.CMND:=FIELD.VALUE:'"'         CMND:=' ':TMP.CMND      ENDNEXT X* NOW ADD THE URLCALL MVDBTOOLKIT.SWAP(WEB.URL,' ','%20')CALL MVDBTOOLKIT.SWAP(WEB.URL,'@','%40')CALL MVDBTOOLKIT.SWAP(WEB.URL,'$','%24')*WEB.URL=SWAP(WEB.URL,'/','%2F')CMND:=' "':WEB.URL:'"'* CALL WEXECUTECALL @WOBJ.RTNE(EOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(EOBJ,"SET","command",CMND,"",RERR)CALL @WOBJ.RTNE(EOBJ,"SET","debug",DO.DEBUG,"",RERR); * LAY IN DEBUGGING PARAMIF WEB.BODY # "" THEN   * CALL @WOBJ.RTNE(EOBJ,"SET","data[0]",WEB.BODY,"",RERR)ENDCALL MVDBTOOLKIT.WEXECUTE(EOBJ); * DO THE CALL* READ IN THE HEADERSCALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:".headers","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.HEADERS,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.headers",RESPONSE.HEADERS,"",RERR)* Lets break the headers down into an arrayCALL @WOBJ.RTNE(PASSED.WOBJ,"SET.OBJECT","response.headers","{}","",RERR)NUM.HEADERS=DCOUNT(RESPONSE.HEADERS,@AM)HTTP.TYPE=''; HTTP.STATUS.CODE=''; HTTP.MSG=''FOR H=1 TO NUM.HEADERS   HEADER.LINE=RESPONSE.HEADERS<H>   IF HEADER.LINE[1,4]="HTTP" AND NOT(INDEX(HEADER.LINE,":",1)) THEN      HTTP.TYPE=FIELD(HEADER.LINE,' ',1)      HTTP.STATUS.CODE=FIELD(HEADER.LINE,' ',2)      HTTP.STATUS.MSG=FIELD(HEADER.LINE,' ',3,99)   END ELSE      HEADER.NAME=TRIM(FIELD(HEADER.LINE,':',1))      CONVERT CHAR(13):CHAR(10) TO '' IN HEADER.NAME; * CATCHES BLANK LINES      HEADER.VALUE=FIELD(HEADER.LINE,':',2,999999)      IF  HEADER.VALUE[1,1]=' ' THEN HEADER.VALUE=HEADER.VALUE[2,LEN(HEADER.VALUE)]; * messy left trim      CONVERT CHAR(13):CHAR(10) TO '' IN HEADER.VALUE; * STRIP AN NEW LINES      IF HEADER.NAME # "" THEN         * NOW PUT THE HEADER INTO OUR ARRAY         CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.headers.":HEADER.NAME,HEADER.VALUE,"",RERR)      END   ENDNEXT HCALL @WOBJ.RTNE(PASSED.WOBJ,"SET.NUMBER","response.status",HTTP.STATUS.CODE,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.http_type",HTTP.TYPE,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.statusmsg",HTTP.STATUS.MSG,"",RERR)* READ IN STDERR (LOG) AND POST AS A ARRAYFOBJ=SAVE.FOBJCALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:'.stderr',"",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.STDERR,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.ARRAY","response.log","[]","",RERR)CONVERT CHAR(13) TO @AM IN RESPONSE.STDERRCONVERT CHAR(10) TO "" IN RESPONSE.STDERRNUM.LINES=DCOUNT(RESPONSE.STDERR,@AM)* 4/2/2020 pap  - Look for bad curl statement!!GOOD.CURL=1CURL.BAD.MSG=""FOR L=1 TO NUM.LINES    LINE=RESPONSE.STDERR<L>    BEGIN CASE      CASE INDEX(LINE,'curl:',1)         * LETS CAPTURE THE FIRST ONE         IF CURL.BAD.MSG = "" THEN CURL.BAD.MSG=TRIM(FIELD(LINE,':',2,999))         GOOD.CURL=0      CASE INDEX(LINE,'warning:',1)    END CASE    CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.log[-1]",LINE,"",RERR)NEXT LIF NOT(GOOD.CURL) THEN   CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.NUMBER","response.status","400","",RERR)   CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.statusmsg",CURL.BAD.MSG,"",RERR)END*CALL @WOBJ.RTNE(EOBJ,"TOSTRING","",TEST.JSON,"PRETTIFY",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","result.result",EXECUTE.RESULT,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.data",EXECUTE.RESULT,"",RERR)end.of.call: ** XDELETE REQUIRED FILESNUM.ITEMS.TO.DELETE=DCOUNT(ITEMS.TO.DELETE,@AM)FOR I=1 TO NUM.ITEMS.TO.DELETE      ITEM.TO.DELETE=ITEMS.TO.DELETE<I>      FOBJ=SAVE.FOBJ      CALL @WOBJ.RTNE(FOBJ,"SET","action","DELETE","",RERR)      CALL @WOBJ.RTNE(FOBJ,"SET","path",ITEM.TO.DELETE,"",RERR)      IF DO.DEBUG THEN         CRT "Normally trying to delete: ":ITEM.TO.DELETE      END ELSE         CALL MVDBTOOLKIT.WFILEIO(FOBJ)      ENDNEXT ICALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.curl_cmnd",CMND,"",RERR)RETURN000169MVDBTOOLKIT.SWAP.UNIVERSE0c2SUBROUTINE MVDBTOOLKIT.SWAP.UNIVERSE(V,F,T)IF F=T THEN RETURNIF F='' THEN RETURN* Let's do this manually since Universe Exchange does NOT workCNTR=0LOOP   CNTR+=1   POS=INDEX(V,F,1)UNTIL NOT(POS) OR CNTR > 100000 DO   PRE.STRING=V[1,POS-1]   AFT.STRING=V[POS+LEN(F),LEN(V)]   V=PRE.STRING:T:AFT.STRINGREPEATRETURN00018CMVDBTOOLKIT.WOBJ.CHOOSE.WOBJ0c2* Code to determine default wobj library to use* This needs to change for MVDBTOOLKIT build, defaults to WOBJWOBJ.RTNE="WOBJ"NO.MD.FILE=0OPEN "MD" TO FILE.MD ELSE    OPEN "VOC" TO FILE.MD ELSE NO.MD.FILE=1ENDIF NOT(NO.MD.FILE) THEN    READ WOBJ.CONF FROM FILE.MD, "WOBJ.CONF" ELSE WOBJ.CONF=""    IF WOBJ.CONF<3> # "" THEN WOBJ.RTNE=WOBJ.CONF<3>END0001BCMVDBTOOLKIT.WGETENV.D30c2SUBROUTINE MVDBTOOLKIT.WGETENV.D3(VAR.NAME, RETURN.VALUE)RETURN.VALUE=""* Gets and displays the PATH environment variablecfunction unix.builtinpointer=(char*)%getenv(VAR.NAME)if pointer = 0 then   RETURN.VALUE=""end else* We got a C pointer the path variable. Copy it* into pick variable   char path[1024]   %strcpy(path, (char*)pointer)   path = field(path,char(0),1)   RETURN.VALUE=pathendRETURN003E55MVDBTOOLKIT.CONFIG0c2      PRINT @(-1):"MVDBTOOLKIT.CONFIG"      PRINT      COMMON /MVMKCOM/ MVMAKE.SUB.COMMON.INFO      MVMAKE.SUB.COMMON.INFO=""; * DO NOT USE FOR THIS VERSION      IF MVMAKE.SUB.COMMON.INFO="" OR MVMAKE.SUB.COMMON.INFO = "0" THEN         *    CRT "MVDBTOOLKIT.CONFIG MUST BE CALLED FROM MVMAKE"         *    STOP      END      INCLUDE MVDBTOOLKIT.TEST.INCLUDE      INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ      OPEN "DICT","MVDBTOOLKIT.BP" TO DICT.MVDBTOOLKIT.BP ELSE STOP      * 4/29/2020 - pap - This entire excercise it to get MV.PLATFORM.JSON populated the      *                   first time.  MVMAKE already asked the questions, if the file did      *                   not exist those answers will be passed to use via the common.      *                   The reason mvmake cannot fix this is the file to the dictionary      *                   is created later.  If MVmake tries to write it out it has to      *                   read it in properly due to items this process populates, such as      *                   TMPDIR.  If the package does not properly install then      *                   WOBJ may not be available.  Better to do it all here.      *      *                   Therefore we manually read the file, update PLATFORM and MVTYPE      *                   and write it back.  We then call WPLATFORM and move on as normal      READ PLATFORM.JSON FROM DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON" ELSE PLATFORM.JSON="{}"      IF TRIM(PLATFORM.JSON) = "" THEN PLATFORM.JSON="{}"      CALL @WOBJ.RTNE(PLATFORM.OBJ,"FROMSTRING","",PLATFORM.JSON,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",MVTYPE,"",RERR)      IF MVMAKE.SUB.COMMON.INFO<2> # "" THEN PLATFORM=MVMAKE.SUB.COMMON.INFO<2>      IF MVMAKE.SUB.COMMON.INFO<3> # "" THEN MVTYPE=MVMAKE.SUB.COMMON.INFO<3>      IF PLATFORM="" OR MVTYPE="" THEN         ** LETS FIGURE OUT THE PLATFORM **         EXECUTE 'jdiag' CAPTURING RESULT         RESULT=OCONV(RESULT,"MCU")         IF INDEX(RESULT,'JBASE',1) THEN            MVTYPE="JBASE"            OS.POS=INDEX(RESULT,"OS RELEASE",1)            OS.TYPE=RESULT[OS.POS,9999]            OS.TYPE=OS.TYPE<1,1,1>            OS.TYPE=OCONV(OS.TYPE,"MCU")            IF INDEX(OS.TYPE,"WINDOWS",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE 'WHICH' CAPTURING RESULT         RESULT=OCONV(RESULT,"MCU")         IF INDEX(RESULT,"D3",1) THEN            MVTYPE="D3"            IF INDEX(RESULT,"WINDOWS",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE 'CT ERRMSG 335 (N' CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"MVBASE",1) THEN            MVTYPE="MVBASE"; * NOT SUPPORTED            GOTO end.of.mvtype         END         EXECUTE "VERSION" CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"UNIDATA",1) THEN            MVTYPE="UNIDATA"            EXECUTE '!SET' CAPTURING OS.TYPE            OS.TYPE=OCONV(OS.TYPE,'MCU')            IF INDEX(OS.TYPE,"WINDIR",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE "CT VOC QM.ACCOUNTS" CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"QMSYS",1) THEN            MVTYPE="QM"            EXECUTE '!SET' CAPTURING OS.TYPE            OS.TYPE=OCONV(OS.TYPE,'MCU')            IF INDEX(OS.TYPE,"WINDIR",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE 'CT VOC UVPROMPT' CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"1 V",1) THEN            MVTYPE="UNIVERSE"            EXECUTE 'sh -c "pwd"' CAPTURING RESULT            IF INDEX(OCONV(RESULT,"MCU"),"NOT AVAILABLE",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         ENDend.of.mvtype: *         IF PLATFORM="" THEN            PRINT "NO PLATFORM FOUND"; STOP            PRINT "ENTER PLATFORM (LINUX OR WINDOWS)[":PLATFORM:"]: ":; INPUT TMP.ANS            IF TMP.ANS # "" THEN PLATFORM=TMP.ANS            PLATFORM=OCONV(PLATFORM,"MCU")            BEGIN CASE               CASE PLATFORM="WINDOWS"                  D3.PREFIX="dos"                  PLATFORM.DELIM="\"               CASE PLATFORM="LINUX"                  D3.PREFIX="unix"                  PLATFORM.DELIM="/"               CASE 1                  CRT "Invalid Platform ":PLATFORM; STOP            END CASE         END         IF MVTYPE="" THEN            PRINT "NO MVTYPE FOUND"; STOP            PRINT "ENTER MVTYPE (JBASE, QM, D3, UNIVERSE, UNIDATA)[":MVTYPE:"] ":; INPUT TMP.ANS            IF TMP.ANS # "" THEN MVTYPE = TMP.ANS            MVTYPE=OCONV(MVTYPE,"MCU")            BEGIN CASE               CASE MVTYPE="JBASE"               CASE MVTYPE="QM"               CASE MVTYPE="D3"               CASE MVTYPE="UNIVERSE"               CASE MVTYPE="UNIDATA"               CASE 1                  CRT "Invalid MVTYPE"; STOP            END CASE         END      END      MVMAKE.SUB.COMMON.INFO<1>='REBUILD'      MVMAKE.SUB.COMMON.INFO<2>=PLATFORM      MVMAKE.SUB.COMMON.INFO<3>=MVTYPE      PRINT "Platform:      ":PLATFORM      PRINT "MV type :      ":MVTYPE      PRINT      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","mvtype",MVTYPE,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","platform",MVMAKE.SUB.COMMON.INFO<2>,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","mvtype",MVMAKE.SUB.COMMON.INFO<3>,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"TOSTRING","",PLATFORM.JSON,"PRETTIFY",RERR)      CONVERT CHAR(13) TO @AM IN PLATFORM.JSON      CONVERT CHAR(10) TO '' IN PLATFORM.JSON      WRITE PLATFORM.JSON ON DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON"      CALL MVDBTOOLKIT.WPLATFORM(PLATFORM.OBJ)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",MVTYPE,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","filedelim",FILEDELIM,"",RERR)      IF PLATFORM = "" THEN         CRT "No platform configured!!!"; STOP      END      IF MVTYPE = "" THEN         CRT "No MVType configured!!!"; STOP      END      * GET ENVIRONMENT      * Let get our current directory      TEST="pwd"; GOSUB start.test      IF OCONV(PLATFORM,"MCU") = "WINDOWS" THEN         CMND='echo %CD%'      END ELSE         CMND='pwd'      END      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      CONVERT CHAR(13):CHAR(10) TO '' IN CMND.RESULT      TEST.STATUS=1      TEST.MSG=CMND.RESULT      GOSUB end.test      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.PATH,"",RERR)      IF TMP.PATH="" THEN         IF MVMAKE.SUB.COMMON.INFO<5>="" THEN MVMAKE.SUB.COMMON.INFO<5>="mvdbtoolkit"         BEGIN CASE            CASE MVTYPE="D3" AND PLATFORM="LINUX"               * DANG D3 HAS IT'S OWN DANG FILE SYSTEM, LETS JUST CREATE A TMP DIR AND MOVE               TMP.PATH="/tmp"            CASE MVTYPE="D3" AND PLATFORM="LINUX"               TMP.DATH="c:\tmp"               EXECUTE '!mkdir c:\tmp'            CASE OCONV(MVMAKE.SUB.COMMON.INFO<5>,"MCU") = "MVDBTOOLKIT"               * WE HAVE RELATIVE POSITIONING               TMP.PATH=CMND.RESULT:FILEDELIM:"TMP"               MVDBTOOLKIT.LOCATION=CMND.RESULT            CASE 1               TMP.PATH=MVMAKE.SUB.COMMON.INFO<5>:FILEDELIM:"TMP"               MVDBTOOLKIT.LOCATION=MVMAKE.SUB.COMMON.INFO<5>         END CASE      END      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","tmpdir",TMP.PATH,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","mvdbtoolkitlocation",MVDBTOOLKIT.LOCATION,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","curllocation",CURLLOCATION,"",RERR)      TEST='tmpdir'; GOSUB start.test      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.DIR,"",RERR)      TEST.MSG=TMP.DIR      TEST.STATUS=1      IF TMP.DIR="" THEN TEST.STATUS=0      GOSUB end.test      TEST='MVDBTOOLKIT.SWAP'      GOSUB start.test      S='TEST LINE TEST LINE'      ORIG.STRING=S      CALL MVDBTOOLKIT.SWAP(S,"ES","XX")      IF S = "TXXT LINE TXXT LINE" THEN TEST.STATUS=1 ELSE TEST.STATUS=0      TEST.MSG=S      GOSUB end.test      * Test 1 Getenv      TEST="getenv"      GOSUB start.test      CALL MVDBTOOLKIT.WGETENV("PATH",PATH)      IF PATH # "" THEN         TEST.MSG=PATH[1,60]         TEST.STATUS=1      END ELSE         TEST.MSG=""         TEST.STATUS=0      END      GOSUB end.test      * Test WEXECUTE      TEST="wexecute"; GOSUB start.test      CMND='echo MVDBTOOLKIT.TEST'      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      IF INDEX(CMND.RESULT,"MVDBTOOLKIT.TEST",1) THEN         TEST.MSG=CMND.RESULT         TEST.STATUS=1      END ELSE         TEST.MSG=CMND.RESULT         TEST.STATUS=0      END      CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG      GOSUB end.test      * Test WFILEIO      TEST="WFILEIO-WRITE"      USER.NO=FIELD(OCONV('','U50BB'),' ',1)      GOSUB start.test      CALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)      TMP.FILE.NAME=TMP.DIR:FILEDELIM:'TMP-':USER.NO:'.txt'      TEST.MSG=TMP.FILE.NAME      CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.FILE.NAME,"",RERR)      SAVE.FOBJ=FOBJ      TMP.DATA=TIMEDATE()      CALL @WOBJ.RTNE(FOBJ,"SET","data",TMP.DATA,"",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUS.MSG,"",RERR)      TEST.STATUS=RESPONSE.STATUS      IF NOT(RESPONSE.STATUS) THEN TEST.MSG:=RESPONSE.STATUS.MSG      GOSUB end.test      IF NOT(TEST.STATUS) THEN STOP "Test Failed, no reason to continue"      TEST='WFILEIO-READ'      GOSUB start.test      * NOW READ IT BACK IN      CALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)      TEST.MSG="(":TMP.DATA:')=(':RESPONSE.DATA:")"      TEST.STATUS=1      IF TMP.DATA # RESPONSE.DATA THEN TEST.STATUS=0      GOSUB end.test      TEST="WFILEIO-DELETE"; GOSUB start.test      FOBJ=SAVE.FOBJ      CALL @WOBJ.RTNE(FOBJ,"SET","action","DELETE","",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      FOBJ=SAVE.FOBJ      CALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      RESPONSE.DATA=""      CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUSMSG,"",RERR)      TEST.STATUS=1      TEST.MSG=TMP.FILE.NAME:' ':RESPONSE.STATUS      IF RESPONSE.STATUS=0 AND RESPONSE.DATA="" THEN NULL ELSE TEST.STATUS=0      GOSUB end.test      * Let get our current directory      TEST="pwd"; GOSUB start.test      IF OCONV(PLATFORM,"MCU") = "WINDOWS" THEN         CMND='echo %CD%'      END ELSE         CMND='pwd'      END      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      IF 1 THEN         TEST.MSG=CMND.RESULT         TEST.STATUS=1      END ELSE         TEST.MSG=CMND.RESULT         TEST.STATUS=0      END      CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG      GOSUB end.test      MVDBTOOLKIT.LOCATION = CMND.RESULT      * Lets verify we have curl!!!      IF CURLLOCATION="" THEN CURLLOCATION="curl"      TEST="default curl"; GOSUB start.test      CMND=CURLLOCATION:' -V'      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      BEGIN CASE         CASE INDEX(CMND.RESULT,"libcurl",1) AND 1            TEST.MSG=CMND.RESULT            TEST.STATUS=1         CASE OCONV(PLATFORM,"MCU")="WINDOWS"            TEST.MSG=CMND.RESULT            CURLLOCATION=""            TEST.STATUS=2         CASE 1            TEST.MSG=0      END CASE      CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG      GOSUB end.test      * THIS IS SLOPPY CODE      IF CURLLOCATION="" AND PLATFORM="WINDOWS" THEN         * Start looking for curl         IF TEST.STATUS=2 THEN            CURLLOCATION="C:\PROGRA~2\Zumasys\MVDASH~1\bin\curl.exe"            TEST="curl via mvconnect"; GOSUB start.test            CMND=CURLLOCATION:' -V'            CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)            CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)            CALL MVDBTOOLKIT.WEXECUTE(COBJ)            CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)            BEGIN CASE               CASE INDEX(CMND.RESULT,"libcurl",1) AND 1                  TEST.MSG=CMND.RESULT                  TEST.STATUS=1               CASE OCONV(PLATFORM,"MCU")="WINDOWS"                  TEST.MSG=CMND.RESULT                  TEST.STATUS=2               CASE 1                  TEST.MSG=CMND.RESULT                  TEST.STATUS=0            END CASE            CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG            GOSUB end.test         END         IF TEST.STATUS=2 THEN            CURLLOCATION="c:\progra~1\git\mingw64\bin\curl.exe"            TEST="curl via git"; GOSUB start.test            CMND=CURLLOCATION:' -V'            CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)            CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)            CALL MVDBTOOLKIT.WEXECUTE(COBJ)            CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)            BEGIN CASE               CASE INDEX(CMND.RESULT,"libcurl",1) AND 0                  TEST.MSG=CMND.RESULT                  TEST.STATUS=1               CASE 1                  TEST.STATUS=0                  TEST.MSG=CMND            END CASE            CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG            GOSUB end.test         END         IF CURLLOCATION # "" THEN            CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","curllocation",CURLLOCATION,"",RERR)         END      END      CALL @WOBJ.RTNE(PLATFORM.OBJ,"TOSTRING","",PLATFORM.JSON,"PRETTIFY",RERR)      CONVERT CHAR(13) TO @AM IN PLATFORM.JSON      CONVERT CHAR(10) TO '' IN PLATFORM.JSON      WRITE PLATFORM.JSON ON DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON"      STOP      *      RETURN      *process.error: *      IF RERR<1> THEN         TEST.STATUS=-1         TEST.MSG=RERR<1>      END      RETURN      *      *start.test: *      TEST.STATUS=0      TEST.MSG="Success"      PRINT "":TEST[1,15]"L(#15)":      RETURN      *end.test: *      PRINT "  ":TEST.MSG[1,50]"L(#50)":      PRINT " ":      PRE=''; AFT=''      BEGIN CASE         CASE TEST.STATUS=2; ERROR="Warning"; PRE=''; AFT=''         CASE TEST.STATUS; ERROR="Passed"         CASE 1; ERROR="Failed"; PRE=@(-13); AFT=@(-14)      END CASE      PRINT PRE:"[":      PRINT ERROR"L(#7)":      PRINT "]":AFT      RETURN000CA7MVDBTOOLKIT.WEXECUTE0c2SUBROUTINE MVDBTOOLKIT.WEXECUTE(EOBJ)INCLUDE MVDBTOOLKIT.WEXECUTE.INCLUDE************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 12, 2018* Description: Execute library************************************************************************* EOBJ* { "command":"COMMAND TO USE",*    "directory":"OPTIONAL DIRECTORY TO RUN IN",*    "debug":"YES OR NO",*    "docapture":"YES OR NO, DEFAULT YES",*    "returning":"YES OR NO, DEFAULT YES",*    "rtndata":"YES OR NO, DEFAULT NO",*    "passlist":"ACTUAL PASSLIST"*    "data": ["ARRAY OF DATA STATEMENTS"],*    "result: {w*                "result":"RESULT IF CAPTURED",*                "rtndata":"RESULT OF RTNDATA",*                "returning":"RESULT OF RETURNING",*                "debug":"DEBUG INFORMATION IF TURNED ON"*    }*    }INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ* With native objects we cannot do this.  We will need* a platform specific way of recognizing this.* Perhaps changes itself to WOBJ?IF ''="NEW" THEN    * CREATE A NEW OBJECT AND RETURN IT    EJSON=\{ "command":"",\    EJSON:=\ "directory":"",\    EJSON:=\ "debug":"NO",\    EJSON:=\ "returning":"YES",\    EJSON:=\ "rtndata":"YES",\    EJSON:=\ "passlist":"",\    EJSON:=\ "data: []"\    EJSON:=\}\    CALL @WOBJ.RTNE(EOBJ,"FROMSTRING","",EJSON,"",RERR)    RETURNENDCALL @WOBJ.RTNE(EOBJ,"GET","command"      ,EXECUTE.COMMAND        ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","directory"    ,EXECUTE.DIRECTORY      ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","docapture"    ,EXECUTE.DOCAPTURE      ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","returning"    ,EXECUTE.RETURNING      ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","rtndata"      ,EXECUTE.RTNDATA        ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","passlist"     ,EXECUTE.PASSLIST       ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","debug"        ,EXECUTE.DEBUG          ,"",RERR)IF EXECUTE.DEBUG = "" THEN    CALL @WOBJ.RTNE(EOBJ,"GET","DEBUG",EXECUTE.DEBUG,"",RERR)ENDIF OCONV(EXECUTE.DEBUG[1,1],"MCU") = "Y" OR EXECUTE.DEBUG="1" THEN EXECUTE.DEBUG=1 ELSE EXECUTE.DEBUG=0IF EXECUTE.DEBUG THEN    *CRT "EXECUTE.COMMAND: ":EXECUTE.COMMAND    *CRT "DIRECTORY      : ":EXECUTE.DIRECTORY    *CRT "OCAPTURE       : ":EXECUTE.OCAPTURE    *CRT "RETURNING      : ":EXECUTE.RETURNINGENDCALL @WOBJ.RTNE(EOBJ,"TOSTRING","",TEST.JSON,"",RERR)* ERROR HANDLING TODOCALL @WOBJ.RTNE(EOBJ,"SET.OBJECT","result","{}","",RERR)CALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)BEGIN CASE   CASE MV.TYPE='D3'       CALL MVDBTOOLKIT.WEXECUTE.D3(EOBJ)   CASE MV.TYPE='UNIDATA'       CALL MVDBTOOLKIT.WEXECUTE.UNIDATA(EOBJ)   CASE MV.TYPE="QM"       CALL MVDBTOOLKIT.WEXECUTE.QM(EOBJ)   CASE MV.TYPE="JBASE"       CALL MVDBTOOLKIT.WEXECUTE.JBASE(EOBJ)   CASE MV.TYPE="UNIVERSE"       CALL MVDBTOOLKIT.WEXECUTE.UNIVERSE(EOBJ)   CASE 1        CALL @WOBJ.RTNE(EOBJ,"SET","result.error","Invalid mvplatform=":MV.TYPE,"",RERR)END CASE**EXECUTE CHAR(255):'k':CMND CAPTURING RESULT*CONVERT CHAR(0) TO '' IN RESULT*CONVERT CHAR(255) TO '' IN RESULTRETURN000A9FMVDBTOOLKIT.WEXECUTE.UNIVERSE0c2SUBROUTINE MVDBTOOLKIT.WEXECUTE.UNIVERSE(EOBJ)INCLUDE MVDBTOOLKIT.WEXECUTE.INCLUDE************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 12, 2018* Description: Execute library UNIVERSE VERSION***********************************************************************INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJE.RESULTS=""E.RETURNING=""E.RTNDATA=""ITEMS.TO.DELETE=''CALL @WOBJ.RTNE(EOBJ,"GET","debug",DO.DEBUG,"",RERR)IF OCONV(DO.DEBUG[1,1],"MCU") = "Y" OR DO.DEBUG="1" THEN DO.DEBUG=1 ELSE DO.DEBUG=""DO.DEBUG=1CALL @WOBJ.RTNE(EOBJ,"LENGTH","data",NUM.DATA,"",RERR)FOR X=1 TO NUM.DATA    CALL @WOBJ.RTNE(EOBJ,"GET","data[":X-1:"]",THIS.DATA,"",RERR)    *PRINT "DATA: ":THIS.DATA    DATA THIS.DATANEXT XCALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","platform",PLATFORM,"",RERR)IF PLATFORM="WINDOWS" THEN PRE.CMND="dos /c" ELSE PRE.CMND="sh -c"*IF PLATFORM="WINDOWS" THENIF INDEX(EXECUTE.COMMAND,'"',1) OR INDEX(EXECUTE.COMMAND,'$',1) THEN   *CALL MVDBTOOLKIT.SWAP.UNIVERSE(EXECUTE.COMMAND,'$','')   * LETS WRITE THIS OUT AND ADJUST THE COMMAND TO EXECUTE THAT BATCH FILE   IF PLATFORM="WINDOWS" THEN EXTENSION=".bat" ELSE EXTENSION=".sh"   CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","tmpdir",TMP.DIR,"",RERR)   CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","filedelim",FILE.DELIM,"",RERR)      CALL MVDBTOOLKIT.EXPAND.PATH(TMP.DIR)   TMP.DIR:=FILE.DELIM   USER.NO=FIELD(OCONV('','U50BB'),' ',1)   SESSION.ID="WEXECUTE-":USER.NO   CALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","data",EXECUTE.COMMAND,"",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:EXTENSION,"",RERR)   ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:EXTENSION   CALL MVDBTOOLKIT.WFILEIO(FOBJ)         EXECUTE.COMMAND = TMP.DIR:SESSION.ID:EXTENSION   ENDBEGIN CASE    CASE EXECUTE.DOCAPTURE="N"        EXECUTE PRE.CMND:\ "\:EXECUTE.COMMAND:\"\     CASE 1        EXECUTE PRE.CMND:\ "\:EXECUTE.COMMAND:\"\ CAPTURING E.RESULTEND CASECONVERT CHAR(0) TO '' IN E.RESULTCONVERT CHAR(255) TO '' IN E.RESULTL=LEN(E.RESULT)IF E.RESULT[L,1] = CHAR(254) THEN E.RESULT=E.RESULT[1,L-1]CALL @WOBJ.RTNE(EOBJ,"SET.STRING","result.result",E.RESULT,"",RERR)IF NOT(DO.DEBUG) THEN   IF ITEMS.TO.DELETE # "" THEN       CALL @WOBJ.RTNE(FOBJ,"SET","action","DELETE","",RERR)       CALL MVDBTOOLKIT.WFILEIO(FOBJ)   ENDENDIF DO.DEBUG THEN   OPENPATH "/tmp" TO TMP.FILE ELSE RETURN   WRITE EXECUTE.COMMAND ON TMP.FILE, "wexecute.sh"ENDRETURN003F7CMVSENDGRID.BP0c0000BAEMVSENDGRID.TEST0c2* PROGRAM MVSENDGRID.TEST*PRINT "Enter email to send test to: ":; INPUT TEST.EMAIL.TOPRINT "Enter full path to file to send (leave blank to not send a file): ":; INPUT FILE.TO.SENDIF FILE.TO.SEND # "" THEN   PRINT "Type of file: 1-pdf, 2=text: ":; INPUT ANS   BEGIN CASE     CASE ANS="1"; FILE.TYPE="application/pdf"     CASE ANS="2"; FILE.TYPE="text/plain"     CASE 1       PRINT "Invalid choice"       STOP   END CASE   PRINT "Actual file name (no path): ":; INPUT FILE.NAME   IF FILE.NAME="" THEN STOPENDWOBJ="WOBJ"OBJ="MAILSEND_V2"CALL MVSENDGRID.API(OBJ)*CALL @WOBJ(OBJ,"TOSTRING","",JSON,"PRETTIFY",1)CALL @WOBJ(OBJ,"SET","params.to[0].email",TEST.EMAIL.TO,"",RERR)CALL @WOBJ(OBJ,"SET","params.to[0].name","Test Email","",RERR)* SINCE CC IS A OPTION, THERE IS NOT A PRE-POPULATED OBJECT, WE MUST ADD ONECALL @WOBJ(OBJ,"SET.OBJECT","params.bcc[0]","{}","",RERR)CALL @WOBJ(OBJ,"SET","params.bcc[0].email",TEST.EMAIL.TO,"",RERR)CALL @WOBJ(OBJ,"SET","params.bcc[0].name","Test Email","",RERR)CALL @WOBJ(OBJ,"SET","params.from","noreply@zumasys.com","",RERR)CALL @WOBJ(OBJ,"SET","params.subject","Sample email ":TIMEDATE(),"",RERR)NL=CHAR(13):CHAR(10)TEXT="Line 1"TEXT:=NL:"Line 2"TEXT:=NL:"Line 3"CALL @WOBJ(OBJ,"SET","params.text",TEXT,"",RERR)IF FILE.TO.SEND # "" THENCALL @WOBJ(OBJ,"SET.ARRAY","params.files","[]","",RERR)  CALL @WOBJ(SOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ(SOBJ,"SET","sourcefile",FILE.TO.SEND,"",RERR) CALL @WOBJ(SOBJ,"SET","filename",FILE.NAME,"",RERR) CALL @WOBJ(SOBJ,"SET","type",FILE.TYPE,"",RERR) CALL @WOBJ(SOBJ,"TOSTRING","",SJSON,"",RERR) CALL @WOBJ(OBJ,"SET.OBJECT","params.files[-1]",SJSON,"",RERR)  END  CALL @WOBJ(OBJ,"TOSTRING","",JSON,"PRETTIFY",RERR)PRINT "Press return to see the jSON option payload before calling MVSENDGRID.API ":; INPUT WAIT PRINT JSONPRINTPRINT "Press return to call MVSENDGRID.  If you request a file that does not exist the routine does not catch that and your call will fail. ":; INPUT ANSCALL MVSENDGRID.API(OBJ)CALL @WOBJ(OBJ,"GET","result.status",STATUSCODE,"",RERR)PRINT "Result status=":STATUSCODECALL @WOBJ(OBJ,"GET","result.statusmsg",STATUSMSG,"",RERR)PRINT "Result msg   =":STATUSMSGIF STATUSCODE = "ok" OR STATUSCODE[1,1] = "2" THEN NULL ELSE    PRINT "Failed: ":STATUSMSGENDPRINT "Press return to see result OBJECT from call: ":; INPUT WAITCALL @WOBJ(OBJ,"TOSTRING","",JSON,"PRETTIFY",RERR)PRINT JSONPRINT "Press return to see curl log: ":; INPUT ANS* 04/2/2020 - Better to send curl object as json vs getting into issues with @am,@vm,@svm!!CALL @WOBJ(OBJ,"GET","result.wcalldebug",COBJ.JSON,"",RERR)CALL @WOBJ(COBJ,"FROMSTRING","",COBJ.JSON,"",RERR)CALL @WOBJ(COBJ,"LENGTH","response.log",CURL.LOG.LENGTH,"",RERR)FOR X=1 TO CURL.LOG.LENGTH    TAG="response.log[":X-1:"]"    CALL @WOBJ(COBJ,"GET",TAG,CLINE,"",RERR)    PRINT CLINENEXT XPRINT "PRESS RETURN TO CONTINUE: ":; INPUT OK.TO.CONTINUE0033B1MVSENDGRID.API0c2      SUBROUTINE MVSENDGRID.API(OBJ)      **********************************************************************      *      * Copyright (C) 2018 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: 4/2/2019      * Description: SENDGRID wrapper      **********************************************************************      *      * Purpose of this program is to front end the sendgrid library of functions      *      * It will utilize the object model concept and try to wrap all sendgrid      * functions into this one library      *      * Items to do      *      * Add File option. (COMPLETED)      * qc tests to validate fields sent (OUTSTANDING)      * Config to get user name/password/etc (COMPLETED)      * Return Message/Status (COMPLETED)      * REMOVE ALL DEBUG STATEMENTS (COMPLETED)      *      * OBJ      * { "api":"mailsend_v2",      *    "params": {      *       "to": [      *         {      *           "email":"email address",      *           "name":"Nice name"      *         }      *       ],      *       "cc": [      *         {      *           "email":"email address",      *           "name":"Nice name"      *         }      *       ],      *       "bcc": [      *         {      *           "email":"email address",      *           "name":"Nice name"      *         }      *       ],      *       "debug":"Y or N",      *       "replyto":"address",      *       "from":"From email address",      *       "fromname":"From name",      *       "subject":"Subject",      *       "text":"Plain text of your email",      *       "html":"Html version of your email",      *       "files": [      *           {      *              "sourcefile":"path to file",      *              "filename":"file name to present file as",      *              "type":"type of file, application/pdf for example"      *           }      *       ]      *    },      *   "result": {      *      "status":"error or ok",      *      "statusmsg:"status msg"      *    }      *      *  }      *      * Starting with mailsend_v2 - We are using this version because it allows      * attachments without having to base64 and include them into the json payload      * v2 uses curl and a normal form-data post to get attachments.      *      * curl https://api.sendgrid.com/api/mail.send.json \      *-F to=recipient@domain.com -F toname=test -F subject="Example Subject" \      *-F text="testing text body" --form-string html="<strong>testing html body</strong>" \      *-F from=test@yourdomain.com -F api_user=your_sendgrid_username -F api_key=your_sendgrid_password \      *-F files\[attachment.gz\]=@f.php.gz      *      *      * This intial part will initialize a object for a user.      *      WOBJ="WOBJ"      FIELD.TYPE=""      INIT.FUNCTION=OCONV(OBJ<1,1,1>,"MCU")      BEGIN CASE         CASE INIT.FUNCTION="MAILSEND_V2"            GOSUB mailsendv2.init            RETURN      END CASE      CALL @WOBJ(OBJ,"GET","api",API,"",RERR)      CALL @WOBJ(OBJ,"GET","debug",DO.DEBUG,"",RERR)      IF OCONV(DO.DEBUG[1,1],"MCU") = "Y" OR DO.DEBUG="1" THEN DO.DEBUG=1 ELSE DO.DEBUG=0      CALL @WOBJ(OBJ,"SET.OBJECT","result","{}","",RERR)      API=OCONV(API,'MCU')      APISTATUS="ok"      APISTATUSMSG=""      OPEN "DICT","MVSENDGRID.BP" TO DICT.MVSENDGRID.BP ELSE         APISTATUS="error"         APISTATUSMSG="Could not open DICT MVSENDGRID.BP"         GOTO end.of.routine      END      READ CONFIG FROM DICT.MVSENDGRID.BP, "CONFIG.JSON" ELSE         APISTATUS="error"         APISTATUSMSG="NO CONFIG.JSON IN DICT MVSENDGRID.BP"         GOTO end.of.routine      END      CALL @WOBJ(CONFIGOBJ,"FROMSTRING","",CONFIG,"",RERR)      BEGIN CASE         CASE API="MAILSEND_V2"            GOSUB mailsendv2         CASE 1            APISTATUS="error"            APISTATUSMSG="Invalid api request (":API:")"      END CASE      * lets do a larger check for a failed call         CALL @WOBJ(COBJ,"GET","response.status",STATUSCODE,"",RERR)         CALL @WOBJ(COBJ,"GET","response.statusmsg",STATUSMSG,"",RERR)         IF STATUSCODE[1,1] # "2" THEN            APISTATUS=STATUSCODE            APISTATUSMSG=STATUSMSG         END         * LETS PACKAGE THE ENTIRE CURL RESPONSE FOR DEBUGGING PURPOSES.         CALL @WOBJ(COBJ,"TOSTRING","",COBJ.JSON,"",RERR); * SAFER TO PULL JSON         CALL @WOBJ(OBJ,"SET","result.wcalldebug",COBJ.JSON,"",RERR)end.of.routine: *      CALL @WOBJ(OBJ,"SET","result.status",APISTATUS,"",RERR)      CALL @WOBJ(OBJ,"SET","result.statusmsg",APISTATUSMSG,"",RERR)      RETURN      STOPmailsendv2.init: * Initialize a email v2 object      OBJ=""      CALL @WOBJ(OBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(OBJ,"SET","api","mailsend_v2","",RERR)      CALL @WOBJ(OBJ,"SET.OBJECT","params","{}","",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.to",'[{"email":"","name"}]',"",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.cc",'[]',"",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.bcc",'[]',"",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.files",'[]',"",RERR)      RETURNmailsendv2: * Send an email      * V2 USES USER NAME AND PASSWORD      CALL @WOBJ(CONFIGOBJ,"GET","username",SENDGRID.USERNAME,"",RERR)      CALL @WOBJ(CONFIGOBJ,"GET","password",SENDGRID.PASSWORD,"",RERR)      IF SENDGRID.USERNAME="" THEN         APISTATUS="error"         APISTATUSMSG="No username defined in CONFIG.JSON"         RETURN      END      IF SENDGRID.PASSWORD="" THEN         APISTATUS="error"         AISTATUSMSG="No password defined in CONFIG.JSON"         RETURN      END      CALL @WOBJ(OBJ,"LENGTH","params.to",NUMBER.TOO,"",RERR)      IF NOT(NUMBER.TOO) THEN         APISTATUS="error"         APISTATUS="Must supply array of to"         RETURN      END      TOO.LABEL="to"; TOO.NAMES.LABEL="toname"      IF NUMBER.TOO > 1 THEN TOO.LABEL:='[]'; TOO.NAMES.LABEL:='[]'      TOO=''; TOO.NAMES=''      CALL @WOBJ(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(COBJ,"SET","method","POST","",RERR)      CALL @WOBJ(COBJ,"SET","url","https://api.sendgrid.com/api/mail.send.json","",RERR)      CALL @WOBJ(COBJ,"SET","insecure","Y","",RERR)      CALL @WOBJ(COBJ,"SET.OBJECT","headers","{}","",RERR)      CALL @WOBJ(COBJ,"SET.ARRAY","formfields","[]","",RERR)      FIELD.NAME="api_user"; FIELD.VALUE=SENDGRID.USERNAME; GOSUB set.field      FIELD.NAME="api_key"; FIELD.VALUE=SENDGRID.PASSWORD; GOSUB set.field      FOR X=1 TO NUMBER.TOO         P="params.to[":X-1:"]"         CALL @WOBJ(OBJ,"GET",P:".email",THIS.TO,"",RERR)         CALL @WOBJ(OBJ,"GET",P:".name",THIS.NAME,"",RERR)         IF INDEX(THIS.TO,'@',1) THEN            TOO<-1>=THIS.TO            TOO.NAMES<-1>=THIS.NAME         END      NEXT X      CONVERT CHAR(254) TO '&' IN TOO      CONVERT CHAR(254) TO '&' IN TOO.NAMES      CALL @WOBJ(SOBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(SOBJ,"SET","name",TOO.LABEL,"",RERR)      CALL @WOBJ(SOBJ,"SET","value",TOO,"",RERR)      CALL @WOBJ(SOBJ,"TOSTRING","",SJSON,"",RERR)      CALL @WOBJ(COBJ,"SET.OBJECT","formfields[-1]",SJSON,"",RERR)      FIELD.NAME=TOO.NAMES.LABEL; FIELD.VALUE=TOO.NAMES; GOSUB set.field      * DO CC            CALL @WOBJ(OBJ,"LENGTH","params.cc",NUMBER.CC,"",RERR)      IF NUMBER.CC THEN               CC=''; CC.NAMES=''         FOR X=1 TO NUMBER.CC            P="params.cc[":X-1:"]"            CALL @WOBJ(OBJ,"GET",P:".email",THIS.CC,"",RERR)            CALL @WOBJ(OBJ,"GET",P:".name",THIS.NAME,"",RERR)            IF INDEX(THIS.CC,'@',1) THEN               CC<-1>=THIS.CC               CC.NAMES<-1>=THIS.NAME            END                     NEXT X            CONVERT CHAR(254) TO '&' IN CC         CONVERT CHAR(254) TO '&' IN CC.NAMES          CC.LABEL="cc"; CC.NAMES.LABEL="ccname"         IF NUMBER.CC > 1 THEN CC.LABEL:='[]'; CC.NAMES.LABEL:='[]'         FIELD.NAME=CC.LABEL; FIELD.VALUE=CC; GOSUB set.field         FIELD.NAME=CC.NAMES.LABEL; VALUE=CC.NAMES; GOSUB set.field       END      * DO BCC            CALL @WOBJ(OBJ,"LENGTH","params.bcc",NUMBER.BCC,"",RERR)      IF NUMBER.BCC THEN               BCC=''; BCC.NAMES=''         FOR X=1 TO NUMBER.BCC            P="params.bcc[":X-1:"]"            CALL @WOBJ(OBJ,"GET",P:".email",THIS.BCC,"",RERR)            CALL @WOBJ(OBJ,"GET",P:".name",THIS.NAME,"",RERR)            IF INDEX(THIS.BCC,'@',1) THEN               BCC<-1>=THIS.BCC               BCC.NAMES<-1>=THIS.NAME            END                     NEXT X            CONVERT CHAR(254) TO '&' IN BCC         CONVERT CHAR(254) TO '&' IN BCC.NAMES          BCC.LABEL="bcc"; BCC.NAMES.LABEL="bccname"         IF NUMBER.BCC > 1 THEN BCC.LABEL:='[]'; BCC.NAMES.LABEL:='[]'         FIELD.NAME=BCC.LABEL; FIELD.VALUE=BCC; GOSUB set.field         FIELD.NAME=BCC.NAMES.LABEL; VALUE=BCC.NAMES; GOSUB set.field       END          CALL @WOBJ(OBJ,"GET","params.from",FROMEMAIL,"",RERR)      IF FROMEMAIL="" THEN         APISTATUS="error"         APISTATUSMSG="Must supply from"         RETURN      END      FIELD.NAME="from"; FIELD.VALUE=FROMEMAIL; GOSUB set.field      ** GET BODY **      CALL @WOBJ(OBJ,"GET","params.text",TEXT.BODY,"",RERR)      CALL @WOBJ(OBJ,"GET","params.html",HTML.BODY,"",RERR)      IF HTML.BODY="" AND TEXT.BODY="" THEN         APISTATUS="error"         APISTATUSMSG="Must supply either a text or html message"         RETURN      END      * If our text.body has new lines in it we MUST write it out      * to a file and then pass it as a file handle!!!      *       *IF INDEX(TEXT.BODY,CHAR(13),1) OR INDEX(TEXT.BODY,CHAR(10),1) THEN      * 4/2/2020 - This fix is moving to wcall      IF 0 THEN         CALL @WOBJ(FOBJ,"FROMSTRING","","{}","",RERR)         CALL @WOBJ(FOBJ,"SET","action","WRITE","",RERR)         TMP.DIR="/tmp"; * This needs to be fixed to be dynamic         TEXT.FILE.NAME=TMP.DIR:'/':@USER.NO:"_body.txt"         CALL @WOBJ(FOBJ,"SET","path",TEXT.FILE.NAME,"",RERR)         CALL @WOBJ(FOBJ,"SET","data",TEXT.BODY,"",RERR)         CALL MVDBTOOLKIT.WFILEIO(FOBJ)         FIELD.NAME="text"; FIELD.VALUE="@":TEXT.FILE.NAME; FIELD.TYPE="file"; GOSUB set.field      END ELSE         FIELD.NAME="text"; FIELD.VALUE=TEXT.BODY; GOSUB set.field      END            * NEED TO ADD THE HTML            IF HTML.BODY = "" AND TEXT.BODY # "" THEN         * WE NEED TO BUILD OUT A SIMPLE HTML VERSION, BASICALLY DOING NEW LINES         HAS.CR=DCOUNT(TEXT.BODY,CHAR(13))         HAS.LF=DCOUNT(TEXT.BODY,CHAR(10))         HTML.BODY=TEXT.BODY         BEGIN CASE            CASE HAS.CR AND HAS.LF               CONVERT CHAR(10) TO '' IN HTML.BODY               CONVERT CHAR(13) TO @AM IN HTML.BODY            CASE HAS.LF               CONVERT CHAR(10) TO @AM IN HTML.BODY            CASE HAS.CR               CONVERT CHAR(13) TO @AM IN HTML.BODY         END CASE         NUM.LINES=DCOUNT(HTML.BODY,@AM)         NEW.HTML.BODY=""         FOR A=1 TO NUM.LINES            LINE=HTML.BODY<A>            IF A > 1 THEN NEW.HTML.BODY:='<BR>'            NEW.HTML.BODY:=LINE        NEXT A        HTML.BODY=NEW.HTML.BODY      END            IF HTML.BODY # "" THEN         *HTML.BODY="HTML VERSION<BR>":HTML.BODY         FIELD.NAME="html"; FIELD.VALUE=HTML.BODY; GOSUB set.field      END            ** SUBJECT **      CALL @WOBJ(OBJ,"GET","params.subject",SUBJECT,"",RERR)      IF SUBJECT="" THEN         APISTATUS="error"         APISTATUSMSG="Must supply subject"         RETURN      END      FIELD.NAME="subject"; FIELD.VALUE=SUBJECT; GOSUB set.field      ** file uploads **      CALL @WOBJ(OBJ,"LENGTH","params.files",NUM.FILES,"",RERR)      IF NUM.FILES THEN         FOR X=1 TO NUM.FILES            P="params.files[":X-1:"]"            CALL @WOBJ(OBJ,"GET",P:'.sourcefile',SOURCEFILE,"",RERR)            CALL @WOBJ(OBJ,"GET",P:'.filename',FILENAME,"",RERR)            CALL @WOBJ(OBJ,"GET",P:'.type',FILETYPE,"",RERR)            FIELD.NAME='files[':FILENAME:']'            FIELD.VALUE='@':SOURCEFILE            IF FILETYPE # "" THEN FIELD.VALUE:=";type=":FILETYPE            FIELD.TYPE='file'            GOSUB set.field         NEXT X      END      CALL @WOBJ(COBJ,"TOSTRING","",CJSON,"PRETTIFY",RERR)      IF DO.DEBUG THEN         CALL @WOBJ(COBJ,"SET","debug","Y","",RERR); * SET TO DO DEBUGGING      END      CALL MVDBTOOLKIT.WCALL(COBJ)      CALL @WOBJ(COBJ,"TOSTRING","",TJSON,"PRETTIFY",RERR)      CALL @WOBJ(COBJ,"GET","response.data",RESPONSE,"",RERR)      CALL @WOBJ(ROBJ,"FROMSTRING","",RESPONSE,"",RERR)      CALL @WOBJ(ROBJ,"GET","message",APISTATUSMSG,"",RERR)      RETURNset.field: *      CALL @WOBJ(SOBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(SOBJ,"SET","name",FIELD.NAME,"",RERR)      CALL @WOBJ(SOBJ,"SET","value",FIELD.VALUE,"",RERR)      IF FIELD.TYPE # "" THEN         CALL @WOBJ(SOBJ,"SET","fieldtype",FIELD.TYPE,"",RERR)      END      FIELD.TYPE=""      CALL @WOBJ(SOBJ,"TOSTRING","",SJSON,"",RERR)      CALL @WOBJ(COBJ,"SET.OBJECT","formfields[-1]",SJSON,"",RERR)      RETURN00012BMVDB.THEMES0c0000045Theme 20c2theme2.css#004489#e1e1d6#d3d9df#989898#565656#dbdbce000045Theme 30c2theme3.css#557260#6A8B92#8A9875#34626B#eaeeea#3291b100003DTheme 10c2theme1.css#2d3956#455372#616a7f#e7e7e7#e0e9e900003DTheme 40c2theme4.css#77bed2#d5e1dd#999999#747e80#333333000218WDB.RESOURCE0c0000036RSS.MAINT0c2PRSS MaintenanceMVDB.INITRSS.MAINT11000033MVPKG.MAIN0c2PMV PackageMVDB.INITMVPKG.MAIN1000003FMVDB.WEB.ED0c2PMV Dashboard EditorMVDB.INITMVDB.WEB.ED11000043MVDB.ADMIN0c2PMV Dashboard AdministratorMVDB.INITMVDB.ADMIN1100002DRSS.MAIN0c2PRSS FeedMVDB.INITRSS.MAIN11000047CONFIG0c2CDEFAULT_HANDLERDBCDEFAULT_RESOURCEMVDB.MAINAPIKEY1234500003BAPI*WRESTTEST0c2PSample REST testWRESTTESTWRESTTEST1100003EMVDB.MAIN0c2PMV Dashboard ControllerMVDB.INITMVDB.MAIN110000AFDICT_MVSENDGRID.BP0c0000093CONFIG.JSON0c1{   "username":"patrickpayne@yahoo.com",   "password":"SendGridPassword1",   "apikey":"Api Key for v3 apis (none built yet)" }f000120DICT_MVDB.DEFS0c0000022TEMPLATE0c1A1TEMPLATEL15000022DISPLAYS0c1A2DISPLAYSL30000024DISP.AREA0c1A3DISP AREAL10000027DISP.ORDER0c1A4DISP ORDERL1000001CUSERS0c1A5USERSL2000001ADESC0c1A6DESCL4000001FDB.SORT0c1A8DB.SORTR70046DBWBPD0c0000151FI.MVDB.DEFS0c2DIM DB.ITEM(30)*EQU DB.TEMPLATE         TO DB.ITEM(1)EQU DB.WIDGETS          TO DB.ITEM(2)EQU DB.WIDGET.AREA      TO DB.ITEM(3)EQU DB.WIDGET.ORDER     TO DB.ITEM(4)EQU DB.USERS.ALLOWED    TO DB.ITEM(5)EQU DB.DESC             TO DB.ITEM(6)EQU DB.THEME            TO DB.ITEM(7)EQU DB.SORT             TO DB.ITEM(8)00012EFI.MVDB.USERS0c2DIM USER.ITEM(20)*EQU USER.PASSWORD     TO USER.ITEM(1)EQU USER.DEFAULT.DB   TO USER.ITEM(2)EQU USER.NAME         TO USER.ITEM(3)EQU USER.LAST.LOGIN   TO USER.ITEM(4)EQU USER.EMAIL        TO USER.ITEM(5)EQU USER.ROLE         TO USER.ITEM(6)EQU USER.ALT.LOGO     TO USER.ITEM(7)000100FI.MVDB.WIDGET.TYPES0c2DIM WIDGET.TYPES(10)*EQU WT$TYPE     TO WIDGET.TYPES(1)EQU WT$SWF      TO WIDGET.TYPES(2)EQU WT$HANDLER  TO WIDGET.TYPES(3)EQU WT$ICON     TO WIDGET.TYPES(4)EQU WT$GROUP    TO WIDGET.TYPES(5)EQU WT$DESC     TO WIDGET.TYPES(6)000070FI.MVDB.WIDGETS0c2DIM WIDGET.ITEM(20)*EQU WIDGET.SUB    TO WIDGET.ITEM(1)EQU WIDGET.USERS  TO WIDGET.ITEM(2)000166FI.WDB.RESOURCE0c2DIM RSRC.ITEM(20)*EQU RSRC.TYPE           TO RSRC.ITEM(1)EQU RSRC.DESCRIPTION    TO RSRC.ITEM(2)EQU RSRC.CONTROLLER     TO RSRC.ITEM(3)EQU RSRC.PROGRAM        TO RSRC.ITEM(4)EQU RSRC.PARSE.CGI      TO RSRC.ITEM(5)EQU RSRC.ENABLED        TO RSRC.ITEM(6)EQU RSRC.DEBUG.MODE     TO RSRC.ITEM(7)EQU RSRC.ACCOUNT        TO RSRC.ITEM(8)000484FI.WDB.DEBUG0c2** WDB.DEBUG record layout*EQU WDBG_DATE                TO 1EQU WDBG_TIME                TO 2EQU WDBG_DURATION            TO 3EQU WDBG_PORT                TO 4EQU WDBG_HANDLER             TO 5EQU WDBG_RESOURCE            TO 6EQU WDBG_CONTROLLER          TO 7EQU WDBG_PROGRAM             TO 8EQU WDBG_REQUEST_ID          TO 9EQU WDBG_REQUEST             TO 10EQU WDBG_METHOD              TO 11EQU WDBG_PATH                TO 12EQU WDBG_REMOTE_ADDR         TO 13EQU WDBG_STATUS              TO 14EQU WDBG_HEADER_VARS         TO 15EQU WDBG_HEADER_VALS         TO 16EQU WDBG_CGI_VARS            TO 17EQU WDBG_CGI_VALS            TO 18EQU WDBG_BODY                TO 19EQU WDBG_RESPONSE_VARS       TO 20EQU WDBG_RESPONSE_VALS       TO 21EQU WDBG_RESPONSE_CONTENT    TO 22EQU WDBG_RESERVED1           TO 23EQU WDBG_RESERVED2           TO 24EQU WDBG_SESSION_ID          TO 25EQU WDBG_SESSION_VARS        TO 26EQU WDBG_SESSION_VALS        TO 27EQU WDBG_SESSION_DATE        TO 28EQU WDBG_SESSION_TIME        TO 29EQU WDBG_WARNING             TO 30EQU WDBG_ERROR               TO 31EQU WDBG_LINT                TO 3200323EMVDB.INCLUDE0c2*COMMON /MVDB/ GLOBAL.INFO(100), GLOBAL.USER.DATA(20), GLOBAL.TEMP.DATA(20), WIDGET.INFO(200), WIDGET.USER.DATA(100)** GLOBAL.INFO equates. GLOBAL.INFO is a place for variables that are * globally accessible to all view subroutines. This information is not* written to disk - it is valid only for the duration of the execution.*EQU G$USERID            TO GLOBAL.INFO(1) ;* UserID currently logged inEQU G$CURRENT.DB        TO GLOBAL.INFO(2) ;* Current dashboard nameEQU G$LOGIN.DATE        TO GLOBAL.INFO(3) ;* Date user logged in (from session)EQU G$LOGIN.TIME        TO GLOBAL.INFO(4) ;* Time user logged in (from session)EQU G$WIDGET.NAME       TO GLOBAL.INFO(5) ;* Current view being executedEQU G$WIDGET.SUB        TO GLOBAL.INFO(6) ;* Current subruotine being calledEQU G$WIDGET.NAME.LIST  TO GLOBAL.INFO(7) ;* List of views called/to be calledEQU G$WIDGET.SUB.LIST   TO GLOBAL.INFO(8) ;* w/ G$WIDGET.NAME.LISTEQU G$WIDGET.CALL.TIME  TO GLOBAL.INFO(9) ;* w/ G$WIDGET.NAME.LIST (timedate stamp)EQU G$WIDGET.CALL.DUR   TO GLOBAL.INFO(10) ;* w/ G$WIDGET.NAME.LIST (duration in MS)EQU G$QUERYMODE         TO GLOBAL.INFO(11) ;* Used to query subroutines without running themEQU G$SUBMITTED         TO GLOBAL.INFO(12) ;* 1=User clicked submit on input area of this widgetEQU G$ADMIN.USER        TO GLOBAL.INFO(14) ;* 1=User as an admin; 0=User is not an adminEQU G$LICENSE.COUNT     TO GLOBAL.INFO(15) ;* Count of licenses (concurrent users)EQU G$EDITION           TO GLOBAL.INFO(16) ;* Edition NameEQU G$SYSTEM.ID         TO GLOBAL.INFO(17) ;* System ID** GLOBAL.INFO(90...100) reserved for internal use.*EQU G$DRILLDOWN.MODE    TO GLOBAL.INFO(24)EQU G$DD.REFERRER       TO GLOBAL.INFO(25)EQU G$DD.FROM.DB        TO GLOBAL.INFO(26)** GLOBAL.USER.DATA stores persistent variable data throughout the course* of a dashboard user's login session. This allows for persistent sharing* of information between dashboard subroutines.** GLOBAL.TEMP.DATA stores temporary variable data for the course of a single* execution. Data is not stored with the session and is destoryed after each* page load.** WIDGET.INFO holds the information for a specific dashboard WIDGET.*EQU W$TYPE           TO WIDGET.INFO(1)EQU W$TITLE          TO WIDGET.INFO(2)EQU W$LINK.LABEL     TO WIDGET.INFO(3)EQU W$LINK.LOCATION  TO WIDGET.INFO(4)  ;* Quandrant(s) to show (1-4)EQU W$LINK.UD.POS    TO WIDGET.INFO(5)  ;* WIDGET.USER.DATA(x)EQU W$LINK.UD.VAL    TO WIDGET.INFO(6)  ;* ^^ = this_valueEQU W$LINK.DD.WIDGET TO WIDGET.INFO(7)  ;* Drill-down widget nameEQU W$LINK.DD.PARAMS TO WIDGET.INFO(8)  ;* Drill down params (UNUSED)EQU W$LINK.URL       TO WIDGET.INFO(26) ;* Specific URL - UD/DD params ignoredEQU W$LINK.URL.OPTS  TO WIDGET.INFO(27) ;* Specific URL - UD/DD params ignoredEQU W$LINK.ICON      TO WIDGET.INFO(28) ;* Icon GIF name ("C" location only)EQU W$LINK.ICON.TXT  TO WIDGET.INFO(29) ;* Hover text for imageEQU W$WIDTH          TO WIDGET.INFO(9)  ;* 1, 2 or 3EQU W$PRINTABLE      TO WIDGET.INFO(24) ;* 1=Add print function/icon to control barEQU W$EXCELABLE        TO WIDGET.INFO(88) ;* 1=Add EXCEL function/icon to control barEQU W$PDFABLE        TO WIDGET.INFO(87) ;* 1=Add PDF function/icon to control barEQU W$HIDDEN         TO WIDGET.INFO(25) ;* 1=Do not display this widget** Pie chart equates*EQU W$PIE.LABELS     TO WIDGET.INFO(10)EQU W$PIE.VALUES     TO WIDGET.INFO(11)EQU W$PIE.COLORS     TO WIDGET.INFO(12) ;* #000000 - #FFFFFF* Below settings are Fusion Charts onlyEQU W$PIE.CAPTION    TO WIDGET.INFO(14)EQU W$PIE.VALUE.OPTS TO WIDGET.INFO(15)** Bar chart equates*EQU W$BAR.LABELS      TO WIDGET.INFO(10) ;* Labels for each Series (AM)EQU W$BAR.VALUES      TO WIDGET.INFO(11) ;* Values matrix (AM/VM)EQU W$BAR.COLORS      TO WIDGET.INFO(12) ;* #000000 - #FFFFFFEQU W$BAR.XLABELS     TO WIDGET.INFO(13) ;* Labels for each set (X Axis)EQU W$BAR.XMEMO       TO WIDGET.INFO(14) ;* X-Axis TextEQU W$BAR.YMEMO       TO WIDGET.INFO(15) ;* Y-Axis TextEQU W$BAR.TYPE        TO WIDGET.INFO(16) ;* 'clustered', 'stacked', '100% stacked'* Below settings are Fusion Charts onlyEQU W$BAR.TREND.BEG   TO WIDGET.INFO(17) ;* Trendline beginning valueEQU W$BAR.TREND.END   TO WIDGET.INFO(18) ;* Trendline ending valueEQU W$BAR.TREND.OPTS  TO WIDGET.INFO(19) ;* Options for the trendlineEQU W$BAR.VALUE.OPTS  TO WIDGET.INFO(20)EQU W$BAR.LABEL.OPTS  TO WIDGET.INFO(21)EQU W$BAR.XLABEL.OPTS TO WIDGET.INFO(22)EQU W$BAR.CAPTION     TO WIDGET.INFO(23)** Table chart equtes*EQU W$TABLE.COL.LABELS     TO WIDGET.INFO(10)EQU W$TABLE.COL.JUST       TO WIDGET.INFO(11)EQU W$TABLE.DATA           TO WIDGET.INFO(12)EQU W$TABLE.TOTALS         TO WIDGET.INFO(13)** Text display equates*EQU W$TEXT.DATA         TO WIDGET.INFO(10)*EQU W$HTML.DATA         TO WIDGET.INFO(10) ;* HTML Blob** Global display equates*EQU W$CHART.OPTIONS  TO WIDGET.INFO(30) ;* Fusion Charts OnlyEQU W$CHART.HEIGHT   TO WIDGET.INFO(31) ;* Override (in pixels)** WIDGET.USER.DATA holds widget-specific user information which* is persistent through the user's session. Values can be set in* this by using the LINK.XXXX feature. This feature will create links* on the widget display that, when clicked, will set values in* WIDGET.USER.DATA as perscribed*EQU W$INPUT.PROMPT   TO WIDGET.INFO(32) ;* Prompt Text (AM)EQU W$INPUT.TYPE     TO WIDGET.INFO(33) ;* TEXT or SELECT (AM)EQU W$INPUT.SELOPTS  TO WIDGET.INFO(34) ;* Text Options for SELECT (AM)(VM)EQU W$INPUT.SELVALS  TO WIDGET.INFO(35) ;* Select Values for SELECT (AM)(VM)EQU W$INPUT.DEFAULT  TO WIDGET.INFO(36) ;* Default Value (AM)EQU W$INPUT.UDPOS    TO WIDGET.INFO(37) ;* User Data Pisition to store answer (AM)EQU W$INPUT.PARAMS   TO WIDGET.INFO(38) ;* Additonal HTML in <input> or <select> tag (AM)EQU W$INPUT.BUTTON   TO WIDGET.INFO(39) ;* Button Label for Submit (AM)*EQU W$MAP.IDS         TO WIDGET.INFO(40) ;* ID for associated value. Ex. USA Map, this is a state Abbr.EQU W$MAP.VALUES      TO WIDGET.INFO(41) ;* Value associtated with the ID (map segment)EQU W$MAP.VALUE.OPTS  TO WIDGET.INFO(42) ;* Optional parameters to be inserted into the <entity> tag.EQU W$MAP.RANGE.NAME  TO WIDGET.INFO(43) ;* Display Name of the range/group (VM)EQU W$MAP.RANGE.LOW   TO WIDGET.INFO(44) ;* Range low limit (VM)EQU W$MAP.RANGE.HIGH  TO WIDGET.INFO(45) ;* Range high limit (VM)EQU W$MAP.RANGE.COLOR TO WIDGET.INFO(46) ;* Range color (optional override)EQU W$MAP.RANGE.OPTS  TO WIDGET.INFO(47) ;* optional parameters to be inserted into the <color> tag** The following value is only relevant for map type USA - when the W$MAP.IDS are state abbreviations.* For each W$MAP.IDS entry, this value can be set to allow drill-down for this state. When used,* it will reload the same widget, providing it with the drill-down state info in WIDGET.USER.INFO(1).* The use of this feature precludes the use of the W$MAP.VALUE.LINK feature below.** See also the FusionWidgets drill-down feature described later. This can be used to drill-down to a* specific widget from a map position when the map drilldown features described here are NOT used.*EQU W$MAP.VALUE.DD    TO WIDGET.INFO(48) ;* "1"=Enable Drill-Down for this State (from USA Map). If used, *                                           WIDGET.USER.INFO will contain the state map info:*                                           (1) = State Code (2-character)*                                           (2) = State Map Name (for use with MVDB.MAP.DATA)*EQU W$MAP.VALUE.LINK  TO WIDGET.INFO(49) ;* Link URL (Ignored if Drill-Down state is used)EQU W$MAP.LINK.MODE   TO WIDGET.INFO(50) ;* "N" = New Window, Blank = This Window** Fusion Widgets*EQU W$FW.CAPTION          TO WIDGET.INFO(51) ;* Widget captionEQU W$FW.SUBCAPTION       TO WIDGET.INFO(52) ;* SubcaptionEQU W$FW.LABELS           TO WIDGET.INFO(53) ;* (VM) Labels for each sectionEQU W$FW.VALUES           TO WIDGET.INFO(54) ;* (VM) Values for each sectionEQU W$FW.VALUE.OPTS       TO WIDGET.INFO(55) ;* (VM) XML attributes to be included in the <set> tagEQU W$FW.COLORS           TO WIDGET.INFO(56) ;* (VM) Alternate array of colors to useEQU W$FW.CHART.PALETTE    TO WIDGET.INFO(57) ;* 1-5 - Selects color theme for Spark Charts, Bullet Charts ** Fusion Widgets - Spark Charts*EQU W$FW.SPARK.TREND.BEG  TO WIDGET.INFO(58) ;* Trendline begin valueEQU W$FW.SPARK.TREND.END  TO WIDGET.INFO(59) ;* Trendline end valueEQU W$FW.SPARK.TREND.OPTS TO WIDGET.INFO(60) ;* Trendline options** Linear charts (Bullet Charts, Guages)*EQU W$FW.LOWER.LIMIT      TO WIDGET.INFO(61)EQU W$FW.UPPER.LIMIT      TO WIDGET.INFO(62)EQU W$FW.COLOR.RANGE      TO WIDGET.INFO(63) ;* <1> Range lower limit*                                               <2> Range upper limit*                                               <3> Range Color (This seems to be ignored on bullet charts)*                                               <4> Range options (attributes to appear in <color> tagEQU W$FW.METER.VALUE       TO WIDGET.INFO(64) ;* The numeric value of the meter guageEQU W$FW.METER.VALUE.OPTS  TO WIDGET.INFO(65) ;* Optional attributes to appear in the <value> tagEQU W$FW.METER.TARGET      TO WIDGET.INFO(66) ;* Target value for the meter (where appropriate) (Bullet)EQU W$FW.METER.TARGET.OPTS TO WIDGET.INFO(67) ;* Option attributes to appear in the <target> tag*EQU W$FW.NUMBER.PREFIX    TO WIDGET.INFO(68) ;* Such as "$"EQU W$FW.NUMBER.SUFFIX    TO WIDGET.INFO(69) ;* Such as "K" or "MM"EQU W$FW.TICKMARKS        TO WIDGET.INFO(70) ;* Tickmark Properties for Bullets, Gauges*                                               <1> 1 or 0 ; Show Tick Marks (1 = default)*                                               <2> 1 or 0 ; Show Tick Values next to the marks (1 = default)*                                               <3> A or B ; Show Above or Below graph (B = default)*                                               <4> Number of major tickmarks (default is calculated)*                                               <5> Number of minor tickmarks between major ones (default is none)*EQU W$FW.LOWER.LIMIT.LABEL  TO WIDGET.INFO(71) ;* For gauges, these are the labels asssociated with theEQU W$FW.UPPER.LIMIT.LABEL  TO WIDGET.INFO(72) ;* lower and upper limitsEQU W$FW.DIAL.VALUES        TO WIDGET.INFO(73) ;* (VM) value associated with each dial on the gaugeEQU W$FW.DIAL.OPTS          TO WIDGET.INFO(74) ;* Optional atributes to appear in the <dial> tagEQU W$FW.TRENDPOINT.VALUES  TO WIDGET.INFO(75) ;* (VM) Trendpoints on gauges*                                               * Optionally, <2> may be used to specify an ending value*                                               * to plot an arc on a gauge between <1,X> and <2,X>EQU W$FW.TRENDPOINT.LABELS  TO WIDGET.INFO(76) ;* (VM) Associated trendpoint label textEQU W$FW.TRENDPOINT.OPTS    TO WIDGET.INFO(77) ;* Optional attributes to appear in the <point> tag*EQU W$FW.THERMOMETER.COLOR  TO WIDGET.INFO(78) ;* Fill color for Thermometer and Cylinder charts** The values below allow you to set up drill-down parameters for most FusionWidgets and FusionCharts* values. These values correspond with W$FW.VALUES, W$FW.METER.VALUE, W$FW.DIAL.VALUES, W$PIE.VALUES,* W$BAR.VALUES and also with W$FW.MAP.IDS when NOT using the built-in drill-down facilities in the* USAMAP type. It may be used when a state map is being created.* EQU W$FW.DD.UD.POS          TO WIDGET.INFO(79) ;* WIDGET.USER.DATA(x) location to store the user-defined valueEQU W$FW.DD.UD.VAL          TO WIDGET.INFO(80) ;* ^^ = this_value - gets stored in WIDGET.USER.DATA(x) positionEQU W$FW.DD.WIDGET          TO WIDGET.INFO(81) ;* Drill-down widget name to be invokedEQU W$FW.DD.PARAMS          TO WIDGET.INFO(82) ;* Drill down params (UNUSED)*EQU W$FW.BC.PLOT.COLOR      TO WIDGET.INFO(83) ;* Plot color of bullet-chart plot lineEQU W$FW.BC.TARGET.COLOR    TO WIDGET.INFO(84) ;* Color of bullet-chart target lineEQU W$MAP.VALUE.TOOLTEXT    TO WIDGET.INFO(85) ;* toolText value for mapEQU W$INPUT.PROMPT.PARAMS   TO WIDGET.INFO(86) ;* Prompt text styling options. Goes into label tag.** Color Names*EQU COLOR$RED      TO "#FF0000"EQU COLOR$MAROON   TO "#800000"EQU COLOR$FUCHSIA  TO "#FF00FF"EQU COLOR$MAGENTA  TO "#FF00FF"EQU COLOR$ORANGE   TO "#FFA500"EQU COLOR$YELLOW   TO "#FFFF00"EQU COLOR$LIME     TO "#00FF00"EQU COLOR$GREEN    TO "#008000"EQU COLOR$OLIVE    TO "#808000"EQU COLOR$CYAN     TO "#00FFFF"EQU COLOR$AQUA     TO "#00FFFF"EQU COLOR$TEAL     TO "#008080"EQU COLOR$BLUE     TO "#0000FF"EQU COLOR$NAVY     TO "#000080"EQU COLOR$PURPLE   TO "#800080"EQU COLOR$BLACK    TO "#000000"EQU COLOR$SILVER   TO "#C0C0C0"EQU COLOR$GRAY     TO "#808080"EQU COLOR$GREY     TO "#808080"EQU COLOR$WHITE    TO "#FFFFFF"000014SOURCE.VIEW.ICON0c20005EBWWW.INCLUDE0c2** Standard web include*COMMON /WWW/ WWW.INFO(50), F.WEB.SESSIONEQU SESSION$ID               TO WWW.INFO(1)EQU SESSION$CONTENT.TYPE     TO WWW.INFO(2)EQU SESSION$CONTENT.SENT     TO WWW.INFO(3)EQU SESSION$OUTBUF           TO WWW.INFO(4)EQU SESSION$HEADERS          TO WWW.INFO(5)EQU SESSION$COOKIES          TO WWW.INFO(6)EQU SESSION$OUTBUF.SIZE      TO WWW.INFO(7)EQU SESSION$OUTBUF.FLAG      TO WWW.INFO(8)EQU SESSION$TIME.OUT         TO WWW.INFO(9)EQU SESSION$GLOBAL.DEBUG     TO WWW.INFO(10)EQU SESSION$STATUS.CODE      TO WWW.INFO(11)EQU SESSION$WDEBUG.MODE      TO WWW.INFO(12)EQU CONFIG$WDB.RESOURCE      TO WWW.INFO(15)EQU CGI$VARS                 TO WWW.INFO(25)EQU CGI$VALS                 TO WWW.INFO(26)EQU CGI$CVARS                TO WWW.INFO(27)EQU CGI$CVALS                TO WWW.INFO(28)EQU CGI$SERVER.NAME          TO WWW.INFO(29)EQU CGI$PATH                 TO WWW.INFO(30)EQU CGI$SERVER.PORT          TO WWW.INFO(31)EQU CGI$BODY                 TO WWW.INFO(32)EQU CGI$HEADERVALS           TO WWW.INFO(33)EQU CGI$HEADERVARS           TO WWW.INFO(34)EQU CGI$RESTPARAMS           TO WWW.INFO(35)EQU CGI$CONFIG               TO WWW.INFO(36)EQU F.WEB.FORMS              TO WWW.INFO(40)EQU CGI$APPSVR.ID            TO WWW.INFO(45)EQU CGI$RESERVED1            TO WWW.INFO(46)EQU CGI$RESERVED2            TO WWW.INFO(47)EQU CGI$RESERVED3            TO WWW.INFO(48)EQU CGI$UNIQUE.ID            TO WWW.INFO(49)EQU CGI$RESOURCE.NAME        TO WWW.INFO(50)000481WWW.INFO0c2** Element index for standard web common /WWW/ WWW.INFO array*EQU SESSION_ID               TO 1EQU SESSION_CONTENT.TYPE     TO 2EQU SESSION_CONTENT.SENT     TO 3EQU SESSION_OUTBUF           TO 4EQU SESSION_HEADERS          TO 5EQU SESSION_COOKIES          TO 6EQU SESSION_OUTBUF.SIZE      TO 7EQU SESSION_OUTBUF.FLAG      TO 8EQU SESSION_TIME.OUT         TO 9EQU SESSION_GLOBAL.DEBUG     TO 10EQU SESSION_STATUS.CODE      TO 11EQU SESSION_WDEBUG_MODE      TO 12EQU CONFIG_WDB.RESOURCE      TO 15EQU CGI_VARS                 TO 25EQU CGI_VALS                 TO 26EQU CGI_CVARS                TO 27EQU CGI_CVALS                TO 28 EQU CGI_SERVER.NAME          TO 29EQU CGI_PATH                 TO 30EQU CGI_SERVER.PORT          TO 31EQU CGI_BODY                 TO 32EQU CGI_HEADERVALS           TO 33EQU CGI_HEADERVARS           TO 34EQU CGI_RESTPARAMS           TO 35EQU CGI_CONFIG               TO 36EQU CGI_APPSVR.ID            TO 45EQU CGI_RESERVED1            TO 46EQU CGI_RESERVED2            TO 47EQU CGI_RESERVED3            TO 48EQU CGI_UNIQUE.ID            TO 49EQU CGI_RESOURCE.NAME        TO 500002CFUD.DICT.SALES0c0000033CLOSE.DATE.YMO0c0A0A;1(DY):1(D2-)(G-1)R10000028CLOSE.DATE.MM0c0D1DMCLOSE MONTH8RS00002CCLOSE.DATE.YM0c0A0A;1(DY):1(DM)R10000016BRANCH0c0D1315LS000016REGION0c0D1415LS000018CNT0c0A0F;C1R5000018ATT100c0D10MD210RS00001BCLOSE.DATE0c0D1D2-8RS00003CCLOSE.DATE.YYYY0c0IOCONV(ATT1,'D4-')[7,4]CLOSE YEAR8LS000018@ID0c0D0SALES10LS000016ATT80c0D8MD210RS000017REP.NAME0c0D525LS000015PIPE0c0I"|"|1LS000016ATT90c0D9MD210RS000018ATT120c0D12MD210RS000012ATT10c0D16RS00001AEXT.COST0c0D9MD210RS00003BGROSS.PROFIT0c0IEXT.AMT - EXT.COSTMD2GROSS PROFIT10RS000023EXT.AMT0c0D8MD2EXT.AMOUNT10RS0000CDUD.DICT.AP0c0000023DATE.PAID0c0D8D2-Date Paid8RS000026INV.AMOUNT0c0D6MD2Inv.Amount13RS000022DUE.DATE0c0D20D2-Due.Date8RS000021BALANCE0c0D50MD2Balance13RS000015PIPE0c0I"|" 1LS00023DUD.DICT.DASHBOARD.CLOSING.STATS0c0000026SALESMAN0c0IFIELD(@ID,'*',1)20LS000024BRANCH0c0IFIELD(@ID,'*',3)10LS000023YYYYMM0c0IFIELD(@ID,'*',2)6LS000013ID0c0I@ID10LS000032GROSS.PROFIT0c0IAMOUNT - COST.OF.SALEMD212RS000026YYYY0c0IFIELD(@ID,'*',2)[1,4]4RS000015PIPE0c0I"|" 1LS000022YYYYMM*BRANCH0c0I@IDG1*210LS000024REGION0c0IFIELD(@ID,'*',4)10LS000018AMOUNT0c0D1MD212RS00001ECOST.OF.SALE0c0D2MD212RS000040REGION*YYYYMM0c0IFIELD(@ID,"*",4):"*":FIELD(@ID,"*",2)10LS000023SALESMAN*YYYYMM0c0I@IDG*220LS0000CEDICT_WDB.LOG0c000001CDATE0c1A2DATED2/R800001CDURATION0c1A5MSR10000020PROGRAM0c1A1PROGRAML30000020AGE0c1A2AGEA;(D)-(2)R8000028TIME0c1A3TIMEMTSA;(3)/"1000"R8000136UD.DICT.AR0c0000028INVOICE.AMT0c0D6MD2Invoice.Amt13RS000022DUE.DATE0c0D20D2-Due.Date8RS000021BALANCE0c0D50MD2Balance13RS000026DATES.PAID0c0D8D2-CheckDates8RS000017CUST0c0D1Cust25LS00001BBIG.CUST0c0D1Cust40LS000014PIPE0c0I"|"1LS000021CUST.NAME0c0D1Cust.Name25LS00098AMV.INSTALL.CF0c0000668MVAPPS-PRE-SCRIPT0c0PTERM CASE NOINVERTCREATE-FILE WDB.LOG 1 1DELETE-FILE DATA WDB.LOGCREATE-FILE WDB.DEBUG 1 1DELETE-FILE DATA WDB.DEBUGCREATE-FILE RSS.BP 3,1,18 11,1,1CREATE-FILE RSS.FEEDS 1,1,18 11,1,18CREATE-FILE MV.WEB.ED.ARCHIVE 3,1,18 301,1,18CREATE-FILE MVDB.CONTROL 1,1,18 11,1,18CREATE-FILE MVDB.DEFS 3,1,18 17,1,18CREATE-FILE MVDB.SUB.TEMPLATES 1,1,18 17,1,18CREATE-FILE MVDB.SUBS 31,1,18 101,1,1CREATE-FILE MVDB.WIDGET.TYPES 1,1,18 3,1,18CREATE-FILE MVDB.WIDGETS 3,1,18 31,1,18CREATE-FILE MVDB.MAP.DATA 3,1,18 181,1,18CREATE-FILE MVDB.UDATA 3,1,18 101,1,18CREATE-FILE MVDB.USERS 3,1,18 31,1,18CREATE-FILE MVPC.CONTROL 1,1,18 3,1,18CREATE-FILE WBPD 1,1,18 11,1,1CREATE-FILE WDB.BP 11,1,18 31,1,1CREATE-FILE WEB.FORMS 1,1,18 101,1,18CREATE-FILE WDB.Q 3,1,18 31,1,18CREATE-FILE WEB.SESSION 3,1,18 71,1,18CREATE-FILE MVAPPS.INSTALLED 3,1,18 11,1,18CREATE-FILE MVBP.FORMS 1,1,18 11,1,18CREATE-FILE MVDB.THEMES 1,1,18 3,1,18CREATE-FILE MVBP.BP 3,1,18 5,1,1CREATE-FILE MVDB.EMAILED.HTML 1,1,18 79,1,18CREATE-FILE WDB.RESOURCE 1,1,18 3,1,18CREATE-FILE WREST.BP 3,1,18 5,1,1CREATE-FILE WOBJ.BP 3,1,18 5,1,1CREATE-FILE MVDBTOOLKIT.BP 3,1,18 5,1,1CREATE-FILE MVMAKE.BP 3,1,18 5,1,1CREATE-FILE DASHBOARD.CLOSING.STATS 3,1,18 97,1,18CREATE-FILE DASHBOARD.BALANCES 3,1,18 97,1,18CREATE-FILE PORTAL.SALES 3,1,18 997,1,18CREATE-FILE PORTAL.AR 3,1,18 997,1,18CREATE-FILE PORTAL.AP 3,1,18 997,1,18CREATE-FILE UD.DICT.DASHBOARD.CLOSING.STATS 1,1,18 7,1,18CREATE-FILE UD.DICT.SALES 1,1,18 1,1,18CREATE-FILE UD.DICT.AR 1,1,18 1,1,18CREATE-FILE UD.DICT.AP 1,1,18 1,1,18CREATE-FILE MVSENDGRID.BP 3,1,18 3,1,10002AEMVAPPS-POST-SCRIPT0c0DELETE VOC DOWNLOAD.XLS INIT.WWW MV.COMPILE MVAPPS.STATUS MVDB.ADMIN MVDB.MAIN MVDB.WEB.ED MVPKG.MAIN PACK-FILE RSS.MAIN RSS.MAINT WDB.INIT WDB.TEST WDB.VIEW XML.DATABASIC MVDB.SUBS *CATALOG MVDB.SUBS *BASIC RSS.BP *CATALOG RSS.BP *BASIC WDB.BP *CATALOG WDB.BP *BASIC WDB.BP MVDB.DEBUGCATALOG WDB.BP MVDB.DEBUG* COMPILE WDB.BP APP.INSTALLER (OWBASIC MVBP.BP *CATALOG MVBP.BP *BASIC WOBJ.BP *CATALOG WOBJ.BP *BASIC WREST.BP *CATALOG WREST.BP *RUN WDB.BP USER.UPDATERUN MVDB.SUBS PURGE.NON.PLATFORM.WIDGETSBASIC MVDBTOOLKIT.BP *CATALOG MVDBTOOLKIT.BP *CREATE-FILE TMP 1,1,19 1,1,19MVDBTOOLKIT.CONFIGBASIC MVSENDGRID.BP *CATALOG MVSENDGRID.BP *000051PACKAGE.INFO0c0MultiValue Dashboard/Portal Reports/MVConnect1.7.4dbMVDB18000052EDICT_WDB.DEBUG0c000001CDATE0c1A1DATED2/R8000019PORT0c1A4PORTR4000026REQUEST.ID0c1A9REQUEST IDL2500001BPATH0c1A12PATHL25000029REMOTE.ADDR0c1A13REMOTE ADDRL1400001DTYPE0c1A0TYPEG0/1L4000026CONTROLLER0c1A7CONTROLLERL12000033RESPONSE.CONTENT0c1A22RESPONSE CONTENTT6000002DSESSION.DATE0c1A28SESSION DATED2/R800002BSESSION.VARS0c1A26SESSION VARSL1200002BSESSION.VALS0c1A27SESSION VALSL20000017DUR0c1A3DURR7000019REQ0c1A10REQL40000020AGE0c1A1AGEA;(D)-(1)R8000020PROGRAM0c1A8PROGRAML2500001ESTATUS0c1A14STATUSR600001BBODY0c1A19BODYT60000027SESSION.ID0c1A25SESSION IDL2500001BLINT0c1A32LINTT6000001CTIME0c1A2TIMEMTSR8000020HANDLER0c1A5HANDLERL10000022RESOURCE0c1A6RESOURCEL1200001EMETHOD0c1A11METHODL6000029HEADER.VARS0c1A15HEADER VARSL12000029HEADER.VALS0c1A16HEADER VALSL20000023CGI.VARS0c1A17CGI VARSL12000023CGI.VALS0c1A18CGI VALSL2000002DRESPONSE.VARS0c1A20RESPONSE VARSL1200002DRESPONSE.VALS0c1A21RESPONSE VALSL2000002DSESSION.TIME0c1A29SESSION TIMEMTSR8000021WARNING0c1A30WARNINGT6000001DERROR0c1A31ERRORT60018DDBWEB.FORMS0c0000C4DPORTAL.DASHBOARD.SALES.AR.AP0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center">AP Balance</td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000200outerTrackWrapper0c2    <div id="outerTrackWrapper">		<div id="trackWrapper">			<div id="trackMsg" style="width: 165px; height: 34px; float: left;"><div id="dispRate">&nbsp;</div></div>			<div id="track1" style="width:200px; height:34px; float: right; margin: 0 10px 0 0; background: url(/db/images/trackSlider.png) 0px center no-repeat;">				<div id="handle1" style="width:12px; height:34px; margin: 6px 0 0 0; float: left;"><img src="/db/images/sliderHandle.png" alt="" /></div>			</div>		</div>	</div>0002E9ed_output.html0c2<div class="ed_error"><!-- HEADER --><!-- FOOTER --></div><div id="compile_output" class="compile_output"><!-- COMPILE_OUTPUT --></div><div id="compile_errline"><!-- COMPILE_ERRLINE --></div><div id="last_compile"><!-- LAST_COMPILE --></div><div id="ed_content"><!-- ED_CONTENT --></div><div id="num_calls"><!-- NUM_OF_CALLS --></div><div id="num_includes"><!-- NUM_OF_INCLUDES --></div><div id="num_files"><!-- NUM_OF_FILES --></div><div id="num_archives"><!-- NUM_OF_FILES --></div><div id="calls_content"><!-- EA_CALLS_CONTENT --></div><div id="includes_content"><!-- EA_INCLUDES_CONTENT --></div><div id="files_content"><!-- EA_FILES_CONTENT --></div><div id="archive_content"><!-- EA_ARCHIVE_CONTENT --></div>000253FCF_template.html0c2<!-- start FC script -->        <div id="<!-- chart_div_id -->">        </div>        <script type="text/javascript">        FusionCharts.ready(function () {            var myChart = new FusionCharts({              "type": "[FCF_MODULE]",              "renderAt": "<!-- chart_div_id -->",              "width": "<!-- chart_width -->",              "height": "<!-- chart_height -->",              "dataFormat": "xml",              "dataSource": "<!-- CHARTXML -->"            });          myChart.render();        });        </script><!-- end of FC script -->000E8DPORTAL.DASHBOARD0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL MARGINS&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center">AP Balance</td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>0010E6admin_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>	<script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>	    <script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>            	    <script src="/db/javascripts/jquery.form.js" type="text/javascript" charset="utf-8"></script>    	        	<script src="/db/javascripts/jquery.url.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/initAdminTemplate.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/sortable.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/tablesort.js" type="text/javascript" charset="utf-8"></script>			<link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/ingrid.css" type="text/css" charset="utf-8" />    <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />    <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]-->    <!-- SITE_THEME -->		<title>MultiValue Dashboard Admin</title>		<script type="text/javascript">	<!-- ADMIN_SCRIPTS -->	</script></head><body><div id="header"><!-- HEADER --></div>	<div id="logo">    	<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">	</div><div id="mainWrapper"><div id="main"><!-- Add new user form --><div id="new-user" title="New user" style="display:none;" ><form id="new-user-form" method="get" action="/dbc/MVDB.ADMIN"><div id="new-user-messages"></div><table><tbody><tr> <td align="right">User ID:</td> <td><input id="new-userid" type="text" value="" name="new_userid"/></td></tr><tr> <td align="right">Name:</td> <td><input id="username" type="text" value="" name="username"/></td></tr><tr id='default-dashboard'> <td align="right">Default Dashboard:</td> <td id="default-dashboard-container"><!-- default_dashboard --></td> <td/></tr><tr> <td align="right">Role:</td> <td>   <select id="user-role" name="user_role">      <option value="User">User</option>      <option value="Administrator">Administrator</option>   </select> </td></tr><tr> <td align="right">Optional Logo Path:</td> <td><input id="opt_logo_path" type="text" value="" name="opt_logo_path"/></td></tr><tr> <td align="right">Password:</td> <td><input id="user-password" type="password" value="" name="user_password"/></td></tr><tr> <td align="right">Confirm Password:</td> <td><input id="confirm-password" type="password" value="" name="confirm_password"/></td></tr></tbody></table><input type="hidden" value="save_user" name="action"/></form></div><!-- Add new widget form --><div id="new-widget" title="New widget" style="display:none;" ><form id="new-widget-form" method="get" action="/dbc/MVDB.ADMIN"><div id="widget-messages"></div><table><tbody><tr> <td align="right">Widget Name: *</td> <td><input id="widget_id" type="text" value="" name="new_widgetid" /></td></tr><tr> <td align="right">Subroutine: *</td> <td><input id="widget_sub" type="text" value="" name="widget_sub" /><!-- edit_source_link --></td></tr><tr> <td align="right">Users:</td> <td><input id="widget_users" type="text" value="" name="widget_users" /><br/><font size="1">comma-separated</font></td></tr></tbody></table><!--input type="submit" value="Delete Widget" name="delete_widget"/ --><p><input id="save_widgetid" type="hidden" value="" name="save_widgetid" /><input id="widget_action" type="hidden" value="save_widget" name="action" /><input id="save_widget" type="hidden" value="Save" name="save_widget" /></p></form></div><a href="edit-sub" id="edit-sub-link" target="_blank" style="display: none;">Edit subroutine</a><!-- ADMIN_MAIN --></div></div><div id="footer">    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a>    </div><!-- FOOTER --></div></body></html>002E52PORTAL.REPORT.DOCUMENTATION0c2<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 15 (filtered)"><style><!-- /* Font Definitions */ @font-face	{font-family:Wingdings;	panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face	{font-family:"Cambria Math";	panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face	{font-family:Calibri;	panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{margin:0in;	margin-bottom:.0001pt;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}.MsoChpDefault	{font-family:"Calibri",sans-serif;}.MsoPapDefault	{margin-bottom:8.0pt;	line-height:107%;}@page WordSection1	{size:8.5in 11.0in;	margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1	{page:WordSection1;} /* List Definitions */ ol	{margin-bottom:0in;}ul	{margin-bottom:0in;}--></style></head><body lang=EN-US><div class=WordSection1><p class=MsoNormal><b><span style='font-size:14.0pt'>Portal Dashboard Reports</span></b></p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal><b><span style='font-size:12.0pt'>High level dashboardsummarizing Sales, Gross Profit, Margin, AR, and AP</span></b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Month to Date and Year to Date numbers</p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>AR Balance amounts and percentages for the aging periods of current,1-30, 31-60, 61-90, and 90+</p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>AP Balance amounts for the aging periods of current, 1-30, 31-60,61-90, and 90+</p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Drilldown functionality to see detail for Sales, Gross Profit,Margin, and aging for AR and AP</p><p class=MsoNormal><b>&nbsp;</b></p><p class=MsoNormal><b><span style='font-size:12.0pt'>Sales, Gross Profit, andMargin Reports:</span></b></p><p class=MsoNormal><b><span style='font-size:12.0pt'>&nbsp;</span></b></p><p class=MsoNormal><b>MTD Sales</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing daily activity broken out by Sales and GP</p><p class=MsoNormal><b>YTD Sales</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing each month of the current year broken out by Salesand GP</p><p class=MsoNormal><b>Year to Year Sales and GP</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Sales and GP for each of the past few years</p><p class=MsoNormal><b>Year to Year Sales by Month</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Sales by month, comparing each of the past fewyears.</p><p class=MsoNormal><b>Year to Year GP by Month</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing GP by month, comparing each of the past fewyears.</p><p class=MsoNormal><b>MTD Sales by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Month to Date Sales and GP broken out by Salesperson.</p><p class=MsoNormal><b>YTD Sales by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Date Sales and GP broken out by Salesperson.</p><p class=MsoNormal><b>Year to Year Sales by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year Sales broken out by Salesperson</p><p class=MsoNormal><b>Year to Year GP by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year GP broken out by Salesperson</p><p class=MsoNormal><b>MTD Sales by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Month to Date Sales and GP broken out by Branch.</p><p class=MsoNormal><b>YTD Sales by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Date Sales and GP broken out by Branch.</p><p class=MsoNormal><b>Year to Year Sales by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year Sales broken out by Branch.</p><p class=MsoNormal><b>Year to Year GP by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year GP broken out by Branch.</p><p class=MsoNormal><b>MTD Sales by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Month to Date Sales and GP broken out by Region.</p><p class=MsoNormal><b>YTD Sales by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Date Sales and GP broken out by Region.</p><p class=MsoNormal><b>Year to Year Sales by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year Sales broken out by Region.</p><p class=MsoNormal><b>Year to Year GP by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year GP broken out by Region.</p><p class=MsoListParagraph style='margin-left:0in'>&nbsp;</p><p class=MsoListParagraph style='margin-left:0in'><b><span style='font-size:12.0pt'>AR Reports</span></b></p><p class=MsoListParagraph style='margin-left:0in'><b><span style='font-size:12.0pt'>&nbsp;</span></b></p><p class=MsoNormal><b>Current AR Aging</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Pie chart breaking out all receivables broken out by current, 0-30,31-60, 61-90, and 90+</p><p class=MsoNormal><b>Average AR Aging Days by Year</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart comparing the average days to pay for the past fewyears.</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on a year to see a pie chart showing the AR aging forthe year broken out by 0-30, 31-60, 61-90, and 90+.</p><p class=MsoNormal><b>Average Days to Pay Last 12 Months</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart comparing the average days to pay, by month, for thepast 12 months.</p><p class=MsoNormal><b>Average Days by Month YYYY</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart comparing the average days to pay for each month inyear YYYY. This option will appear for the past few years with YYYY showing theyear.</p><p class=MsoNormal><b>Customers Needing Aging Attention</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Table report showing the categories of:</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>50 Customers with the most amount owed</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>50 Customers with the most days aged.</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>50 Customers aged over 30 days where their average aging over thepast 60 days is longer than it has been over the past 1000 days.</p><p class=MsoNormal><b><span style='font-size:12.0pt'>&nbsp;</span></b></p><p class=MsoNormal><b><span style='font-size:12.0pt'>AP Reports</span></b></p><p class=MsoNormal><b>&nbsp;</b></p><p class=MsoNormal><b>Current AP Aging</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Pie chart breaking out all payables broken out by current, 0-30,31-60, 61-90, and 90+</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p></div></body></html>002160web_ed_settings.html0c2<html xmlns="http://www.w3.org/1999/xhtml">  <head>    <title>D3 Web Editor Settings</title>    <meta http-equiv="content-type" content="text/html; charset=<!--CHARACTER_SET-->" />    <link rel="stylesheet" type="text/css" href="/db/css/reset.css" media="screen" />    <link rel="stylesheet" type="text/css" href="/db/css/screen.css" media="screen" />    <!--[if IE]>    <link rel="stylesheet" type="text/css" href="/db/css/screen_ie.css" media="screen" />    <![endif]-->    <script src="/db/javascripts/jquery.tools.min.js" type="text/javascript"></script>    <script src="/db/javascripts/global.js" type="text/javascript"></script>  </head>  <body>    <div id="header" class="group">      <div id="logo">D3 Web Editor Settings</div>    </div>        <div id="main" class="group">      <div id="content" class="group">        <div id="section" class="group">          <ul class="tabs group">             <li><a href="#">General Settings</a></li>             <li><a href="#">Accounts</a></li>             <li><a href="#">Program Files</a></li>           </ul>          <div class="panes">             <div class="pane">              <form action="/dbc/WEB.ED.SETTINGS" method="POST">                <fieldset>                  <legend>Compiling Defaults</legend>                  <ul class="form">                    <li class="enable">                      <input type="checkbox" class="checkbox" id="enable_compiling" name="enable_compiling" [ENABLE_COMPILING] />                      <label for="enable_compiling">Enable Compiling</label>                    </li>                    <li>                      <label>Compile Verb:</label>                      <input type="text" class="text" name="compile_verb" value="[COMPILE_VERB]" />                    </li>                    <li>                      <label>Compile Options:</label>                      <input type="text" class="text" name="compile_opts" value="[COMPILE_OPTS]" />                    </li>                    <li>                      <label for="flash">Flash Compile (0 option)</label>                      <input type="checkbox" class="checkbox" id="flash" name="flash_compile" [FLASH_COMPILE] />                    </li>                    <li>                      <label for="catalog">Catalog after compile</label>                      <input type="checkbox" class="checkbox" id="catalog" name="catalog" [CATALOG] />                    </li>                  </ul>                </fieldset>                <fieldset>                  <legend>Options</legend>                  <ul class="form">                    <li>                      <label>Text Size:</label>                      <select name="text_size">                        [TEXT_SIZE_OPTS]                      </select>                    </li>                    <li>                      <label>Default Account:</label>                      <input type="text" class="text" name="default_account" value="[DEFAULT_ACCOUNT]" />                    </li>                    <li>                      <label>Default File:</label>                      <input type="text" class="text" name="default_file" value="[DEFAULT_FILE]"  />                    </li>                  </ul>                </fieldset>                <fieldset>                  <ul>                    <li>                      <input type="checkbox" class="checkbox" id="default" name="global_default" [GLOBAL_DEFAULT] />                      <label for="default">Set as default settings for all users</label>                    </li>                  </ul>                </fieldset>              </form>            </div>             <div class="pane">              <div class="table">                <table cellspacing="0">                  <thead>                    <tr>                      <th>Account</th>                      <th>Password</th>                      <th>Settings</th>                      <th>Options</th>                    </tr>                  </thead>                  <tbody>                  [ACCOUNT_LIST]                  </tbody>                </table>              </div>              <div>                <form action="/dbc/WEB.ED.SETTINGS" method="POST">                  <fieldset>                    <label for="account">Account</label>                    <input type="text" class="text" name="add_account" value="" />                    <input type="submit" value="Add" class="submit"/>                  </fieldset>                </form>              </div>            </div>            <div class="pane">              <div class="table">                <table cellspacing="0">                  <thead>                    <tr>                      <th>Account</th>                      <th>File</th>                      <th>Settings</th>                      <th>Options</th>                    </tr>                  </thead>                  <tbody>                  [FILE_LIST]                  </tbody>                </table>              </div>              <div class="footer_form">                <form action="#">                  <fieldset>                    <label for="account">Account</label>                    <input type="text" class="text" style="margin-right: 10px;"/>                    <label for="account">File</label>                    <input type="text" class="text"/>                    <input type="submit" value="Add" class="submit"/>                  </fieldset>                </form>              </div>            </div>           </div>        </div>      </div>    </div>    <!-- modals -->     <div class="modal" id="edit_account_settings">       <form action="#">        <fieldset>          <legend>Settings for Account: 00000</legend>          <ul class="form">            <li>              <label>Password for LOGTO this account:</label>              <input type="password" class="text"/>            </li>            <li class="enable">              <input type="checkbox" class="checkbox" id="enable_compiling_edit_account_settings"/>              <label for="enable_compiling_edit_account_settings">Enable Compiling</label>            </li>            <li>              <label>Compile Verb:</label>              <input type="text" class="text"/>            </li>            <li>              <label>Compile Options:</label>              <input type="text" class="text"/>            </li>            <li>              <label for="flash_edit_account_settings">Flash Compile (0 option)</label>              <input type="checkbox" class="checkbox" id="flash_edit_account_settings"/>            </li>            <li>              <label for="catalog_edit_account_settings">Catalog after compile</label>              <input type="checkbox" class="checkbox" id="catalog_edit_account_settings"/>            </li>          </ul>        </fieldset>        <div class="buttons">          <input type="submit" value="Save"/>          <input type="submit" value="Cancel" class="close"/>        </div>      </form>    </div>    <div class="modal" id="edit_compile_settings">       <form action="#">        <fieldset>          <legend>Compile Settings for 00000, 00000</legend>          <ul class="form">            <li class="enable">              <input type="checkbox" class="checkbox" id="enable_compiling_edit_compile_settings"/>              <label for="enable_compiling_edit_compile_settings">Enable Compiling</label>            </li>            <li>              <label>Compile Verb:</label>              <input type="text" class="text"/>            </li>            <li>              <label>Compile Options:</label>              <input type="text" class="text"/>            </li>            <li>              <label for="flash_edit_compile_settings">Flash Compile (0 option)</label>              <input type="checkbox" class="checkbox" id="flash_edit_compile_settings"/>            </li>            <li>              <label for="catalog_edit_compile_settings">Catalog after compile</label>              <input type="checkbox" class="checkbox" id="catalog_edit_compile_settings"/>            </li>          </ul>        </fieldset>        <div class="buttons">          <input type="submit" value="Save"/>          <input type="submit" value="Cancel" class="close"/>        </div>      </form>    </div>  </body></html>00110Eadmin_dashboards.html0c2<!-- Add new dashboard form --><script type="text/javascript">dashboard_ids = [<!-- list_of_dashboard_ids -->];</script><div id="dashboard-controls" class="ui-dialog">	<div class="button-pane-dialog">		<button id="save-dashboard" type="button" class="ui-state-default ui-corner-all">Save</button>		<button id="delete-dashboard" type="button" class="ui-state-default ui-corner-all">Delete</button>	</div></div><div id="dashboard-accordion" class="ui-accordion ui-widget ui-helper-reset">	<h3 id='dashboard-properties-header' class="ui-accordion-header ui-helper-reset ui-state-active ui-corner-top"><span class="ui-icon ui-icon-triangle-1-s"></span>Properties</h3>	<div id='dashboard-properties' title='New Dashboard' class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active" style="height: 350px;">			<div id="dashboard-messages"></div>		<form id="new-dashboard-form" method="post" action="/dbc/MVDB.ADMIN">		<div>				<input id="old_dbid" type="hidden" value="<!-- save_dbid -->" name="save_dbid" />			<input type="hidden" value="save_db" name="action" />				<input type="hidden" value="Save" name="save_db" />		</div>				<table>		<tbody><tr>		 <td  align="right">Dashboard ID:</td>		 <td id="dbid-container">		 <!-- edit_dbid -->		 </td>		</tr>		<tr>		 <td align="right">Description:</td>		 <td><input id="db_desc" type="text" value="<!-- db_desc -->" name="db_desc" size="63" /></td>		</tr>		<tr>		 <td align="right">Layout:</td>		 <td><input type="hidden" id="db_layout" name="db_layout" value="<!-- " />		 	<ul class='db-layout'>		 	<!-- db_layout_opts -->			</ul> 	     	    		 </td>		</tr>		<tr>		 <td align="right">Allowed Users:</td>		 <td><input id="db_users" type="text" value="<!-- db_users -->" name="db_users" size="63" /></td>		</tr>		<tr>		<td> </td><td>Leave blank to allow all users. Separate user IDs with commas to restrict acces to specific users.</td>		</tr>		<tr>		 <td align="right">Theme:</td>		 <td><!-- db_theme --></td>		</tr>		<tr>		 <td align="right">Sort Value:</td>		 <td><input id="db_sort" type="text" value="<!-- db_sort -->" name="db_sort" size="8" /></td>		</tr>		</tbody></table>		</form>	</div>	    <h3 class="ui-accordion-header ui-helper-reset ui-state-active ui-corner-top"><span class="ui-icon ui-icon-triangle-1-s"></span> Dashboard</h3>    <div id="dashboard-content" class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active">    		<div id="layout-header" class="one-column area">    		  <h4>HEADER</h4>              <!-- AREA_1_WIDGETS -->    		</div>	    	<div id="layout-body">		    <div class="one-column active">		    	<div class="area">		    	  <h4>AREA 1</h4>                  <!-- AREA_2_WIDGETS -->		    	</div>		    </div>		    <div class="two-column">		    	<div class="area first">		    	  <h4>AREA 1</h4>                  <!-- AREA_2_WIDGETS -->		    	</div>		   	    <div class="area last">		   	      <h4>AREA 2</h4>                  <!-- AREA_3_WIDGETS -->		   	    </div>        		    </div>		    <div class="three-column">		       	<div class="area first">		       	  <h4>AREA 1</h4>                  <!-- AREA_2_WIDGETS -->		       	</div>		    	<div class="area middle">		    	  <h4>AREA 2</h4>                  <!-- AREA_3_WIDGETS -->		    	</div>        		       	<div class="area last">		       	  <h4>AREA 3</h4>                  <!-- AREA_4_WIDGETS -->		        </div>    			    </div>            	    	</div>    		<div id="layout-footer" class="one-column area">    		  <h4>FOOTER</h4>              <!-- AREA_5_WIDGETS -->    		</div>    </div></div>    <div id="widget-toolbox" class="ui-accordion">	<h3 class="widget-header ui-accordion-header ui-state-active ui-state-focus"><span class="ui-icon ui-icon-triangle-1-s"></span>Widgets (draggable)</h3>		<div id="widget-icons"  class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active">		<!-- widget_list -->		</div></div><div id='change-layout-message' title="Change layout?" style="display: none; text-align: left;">	<p>Your layout areas currently have one or more widgets. Clicking 'Change' will move these widgets to the first column area.</p></div>000621login.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>	<link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />	<title>MultiValue Dashboard :: Login</title></head><body onLoad="document.loginform.loginid.focus();">	<div id="header">		<div id="logo">		  <BR /><img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">	   </div>	<!-- HEADER -->	</div>	<div id="dashboard">		<b><!-- ERROR --></b>		<div style="text-align:center;">			<h1><img src="/db/images/graphic_lock.gif" style="vertical-align:bottom;"/> Please Login</h1>			<div style="width:180px;text-align:left;margin:10px auto" id="loginbox">				<form name="loginform" action="<!-- CGI$PATH -->/MVDB.MAIN?dblogin=1" method="post">					<div class="ctrl">						<label for="login">Login</label>						<input id="getlogin" type="text" name="loginid" value="" class="text">					</div>					<div class="ctrl">						<label for="password">Password</label>						<input type="password" name="password" value="" class="password">					</div>						<div class="ctrl">						<input type="submit" value="Login" style="float:right">					</div>					</form>			</div>		</div>		</div>	<div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a></div>	</body></html>000273FCMAP_template.html0c2<!-- Fusion Chart Script -->	<div id="<!-- chart_div_id -->">	</div>	<input type="hidden" class="chartSource" value="/db/Maps/FCMap_[FCMAP_MODULE].swf" />	<input type="hidden" class="chartXML" value="<!-- CHARTXML -->" />	<input type="hidden" class="chartClass" value="fcmap" />	<script type="text/javascript">		// <![CDATA[		   var map = new FusionMaps("/db/Maps/FCMap_[FCMAP_MODULE].swf", "ChartId", "<!-- chart_width -->", "<!-- chart_height -->", "0", "1");		   map.setDataXML("<!-- CHARTXML -->");		   		   map.render("<!-- chart_div_id -->");		// ]]>	</script><!-- end of FC script -->0010C9SAVE.PORTAL.DASHBOARD0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Sales Reports">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Sales Reports">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Margins&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="38%" bgcolor="white">&nbsp;</td><td width="31%" align="center">MDT ~9~</td><td width="31%" align="center">YTD ~10~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="38%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY NET INCOME CHART">Net Income</a></td><td width="31%" align="right">~11~</td><td width="31%" align="right">~12~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="38%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY AVERAGE DAYS CHART">Average Days To Pay</a></td><td width="31%" align="center">~13~</td><td width="31%" align="center">~14~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Margins&udview=Portal Margins">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center">AP Balance</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000251FW_template.html0c2<!-- start FW script -->        <div id="<!-- chart_div_id -->">        </div>        <script type="text/javascript">        FusionCharts.ready(function () {            var myChart = new FusionCharts({              "type": "[FW_MODULE]",              "renderAt": "<!-- chart_div_id -->",              "width": "<!-- chart_width -->",              "height": "<!-- chart_height -->",              "dataFormat": "xml",              "dataSource": "<!-- CHARTXML -->"            });          myChart.render();        });        </script><!-- end of FW script -->000603PORTAL.DASHBOARD.SALES.GP0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL MARGINS&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000163db_inner_template0c2<div id="area1" class="area"> <!-- AREA1 --></div><div class="content <!-- column_style -->">  <div id="area2" class="area">   <!-- AREA2 -->  </div>  <div id="area3" class="area">   <!-- AREA3 -->  </div>  <div id="area4" class="area">   <!-- AREA4 -->  </div></div><div id="area5" class="area">  <!-- AREA5 --></div>000C40PORTAL.DASHBOARD.SALES.AR0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center"></td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>0013E6DEMO.FINANCIALS.DASHBOARD0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><th width=24% align="left" bgcolor="red">Sales</th><th width=19% bgcolor="white">&nbsp;</th><th width=19% bgcolor="white">&nbsp;</th><th width=19% bgcolor="white">&nbsp;</th><th width=19% bgcolor="white">&nbsp;</th></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% bgcolor="white">&nbsp;</td><td width=19% align="center">YTD~1~</td><td width=19% align="center">YTD~2~</td><td width=19% align="center">%(+/-)</td><td width=19% align="center">FY~3~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO REV.GP SALES CHART&udview=DEMO REV.GP SALES CHART&dd=dd&udpos1=1&udval1=REVENUES">Sales</a></td><td width=19% align="right">~4~</td><td width=19% align="right">~5~</td><td width=19% align="right">~6~</td><td width=19% align="right">~7~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO REV.GP SALES CHART&udview=DEMO REV.GP SALES CHART&dd=dd&udpos1=1&udval1=GROSSPROFIT">Gross Profit (GP$)</a></td><td width=19% align="right">~8~</td><td width=19% align="right">~9~</td><td width=19% align="right">~10~</td><td width=19% align="right">~11~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES CHART&udview=DEMO SALES CHART&dd=dd&udpos1=1&udval1=MARGIN">Margin (GP%)</a></td><td width=19% align="right">~12~</td><td width=19% align="right">~13~</td><td width=19% align="right"></td><td width=19% align="right">~14~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES CHART&udview=DEMO SALES CHART&dd=dd&udpos1=1&udval1=PARTS$">Parts Revenue ($)</a></td><td width=19% align="right">~15~</td><td width=19% align="right">~16~</td><td width=19% align="right">~17~</td><td width=19% align="right">~18~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES PERCENTS&udview=DEMO SALES PERCENTS&dd=dd&udpos1=1&udval1=PARTSPERCENT">Parts Revenue (%)</a></td><td width=19% align="right">~19~</td><td width=19% align="right">~20~</td><td width=19% align="right"></td><td width=19% align="right">~21~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES CHART&udview=DEMO SALES CHART&dd=dd&udpos1=1&udval1=SERVICES$">Services Revenue ($)</a></td><td width=19% align="right">~22~</td><td width=19% align="right">~23~</td><td width=19% align="right">~24~</td><td width=19% align="right">~25~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES PERCENTS&udview=DEMO SALES PERCENTS&dd=dd&udpos1=1&udval1=SERVICESPERCENT">Services Revenue (%)</a></td><td width=19% align="right">~26~</td><td width=19% align="right">~27~</td><td width=19% align="right"></td><td width=19% align="right">~28~</td></tr></thead></table><table width="100%" cols="4" border="0"><table width="100%" cols="4" border="0"><table width="100%" cols="4" border="0"><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><th width=24% align="left" bgcolor="red">Financials</th><th width=25% bgcolor="white">&nbsp;</th><th width=25% bgcolor="white">&nbsp;</th><th width=25% bgcolor="white">&nbsp;</th></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" bgcolor="white">&nbsp;</td><td width="25%" align="center">~29~ thru ~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="center">~32~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO NET INCOME CHART&udview=DEMO NET INCOME CHART&dd=dd">Net Income</a></td><td width="25%" align="right">~33~</td><td width="25%" align="right">~34~</td><td width="25%" align="right">~35~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO AVERAGE DAYS CHART&udview=DEMO AVERAGE DAYS CHART&dd=dd">Average Days To Pay</a></td><td width="25%" align="center">~44~</td><td width="25%" align="center">~45~</td><td width="25%" align="center">~46~</td></table>0005A9admin_login.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>	<link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <!-- SITE_THEME -->	<title>MultiValue Dashboard :: Administrative Login</title></head><body onLoad="document.loginform.adminpass.focus();">	<div id="header">		<div id="logo">			<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">	   </div>	<!-- HEADER -->	</div>	<div id="dashboard">		<b><!-- ERROR --></b>		<div style="text-align:center;">			<h1><img src="/db/images/graphic_lock.gif" style="vertical-align:bottom;"/> Please Login</h1>			<div style="width:180px;text-align:left;margin:10px auto" id="loginbox">				<form name="loginform" action="<!-- CGI$PATH -->/MVDB.ADMIN" method="post">					<div class="ctrl">						<label for="password">Password</label>						<input type="password" name="adminpass" value="" class="password">					</div>						<div class="ctrl">						<input type="submit" value="Login" style="float:right">					</div>					</form>			</div>		</div>		</div>	<div id="signature">MultiValue Dashboard - copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a></div>	</body></html>000E90PORTAL.DASHBOARD.SALES.GP.AR0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL MARGINS&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center"> </td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000E1Eed_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" ><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->" />    <title>Editing <!-- ITEM --></title>    <script language="Javascript" type="text/javascript" src="/db/edit_area/edit_area_full.js"></script>    <script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>	    <!--script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script--><script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>    	        <script src="/db/javascripts/jquery.form.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>    	        <!--script src="/db/javascripts/shortcut.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script-->    <script language="Javascript" type="text/javascript">	    	        	CALLS = <!-- NUM_OF_CALLS -->;        INCLUDES = <!-- NUM_OF_INCLUDES -->;        FILES = <!-- NUM_OF_FILES -->;                        ARCHIVES = <!-- NUM_OF_ARCHIVES -->;        CALLS_CONTENT = '<!-- EA_CALLS_CONTENT -->';        INCLUDES_CONTENT = '<!-- EA_INCLUDES_CONTENT -->';        FILES_CONTENT = '<!-- EA_FILES_CONTENT -->';        ARCHIVE_CONTENT = '<!-- EA_ARCHIVE_CONTENT -->';        LAST_COMPILE = '<!-- LAST_COMPILE -->';               	<!-- ED_SCRIPTS -->        // initialisation        	editAreaLoader.init({            id: "file_1" // id of the textarea to transform            ,start_highlight: true  // if start with highlight            ,allow_resize: "both"            ,allow_toggle: false            ,word_wrap: true            ,language: "en"            ,begin_toolbar: "load, save"            ,toolbar: "search, go_to_line, |, undo, redo, |, select_font,|, change_smooth_selection, highlight, reset_highlight, word_wrap, |, help"             ,save_callback: 'saveCompileItem'            ,EA_load_callback: "editAreaLoadComplete"             ,load_callback: 'openItem'            ,fullscreen: true            ,closebottomtab_callback: 'closeActiveTab'            ,syntax: "<!-- SYNTAX -->"        });	    <!-- WINDOW_HEIGHT - Put this where it needs to go -->    </script>        <script src="/db/javascripts/edit_area_init.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>     <script language="javascript" type="text/javascript">       	<!-- ED_INIT_SCRIPT -->    </script>       <link rel="StyleSheet" href="/db/css/web_editor.css" media="screen" type="text/css" />       <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />       <!--[if lte IE 8]>       <link rel="Stylesheet" href="/db/css/ie.css" media="screen" type="text/css" />       <![endif]--></head><body><div id="open-item-container" title="Open Item" style="display:none;"><span id="messages"> </span><form id="open-item-form" name="open-item-form" action="" method="post"><label>Account:</label><input id="ed_acct" type="text" value="" name="ed_acct" /><label>File: </label><input id="ed_file" type="text" value="" name="ed_file"/><label>Item: </label><input id="ed_item" type="text" value="" name="ed_item"/><input id="open-action" type="hidden" name="action" value="open" /></form></div><div id="compile-output-container" title="Compile output"><div id="compile-content"></div></div><!-- HEADER --><hr /><!-- BODY --><hr /><!-- FOOTER --><!-- COMPILE_OUTPUT --><hr /></body></html>000082pdf_inner_template0c2<div id="areas" class="area"> <!-- AREA1 --><!-- AREA2 --><!-- AREA3 --><!-- AREA4 --><!-- AREA5 --></div>000202WIDGET.DIV0c2<div class="widget">  <div class="widget_header">   <div class="widget_controls"><!-- CONTROLS --></div>   <h3 class="title"><!-- TITLE --></h3>   <!-- INPUT -->   <div class="widget_content_header"><!-- QUAD2 --><!-- QUAD1 -->        <div class="clear"></div>     </div>  </div>  <div class="widget_content"><div class="widget_content_padding"><!-- WIDGETDATA --></div></div>  <div class="widget_content_footer">   <!-- QUAD3 --><!-- QUAD4 -->  <div class="clear" ></div> </div></div>000348PORTAL.DASHBOARD.SALES0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table></div>001A1BPORTAL.REPORT.RUN.DOCUMENTATION0c2<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 15 (filtered)"><style><!-- /* Font Definitions */ @font-face	{font-family:Wingdings;	panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face	{font-family:"Cambria Math";	panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face	{font-family:Calibri;	panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:0in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}.MsoChpDefault	{font-family:"Calibri",sans-serif;}.MsoPapDefault	{margin-bottom:8.0pt;	line-height:107%;}@page WordSection1	{size:8.5in 11.0in;	margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1	{page:WordSection1;} /* List Definitions */ ol	{margin-bottom:0in;}ul	{margin-bottom:0in;}--></style></head><body lang=EN-US><div class=WordSection1><p class=MsoNormal style='margin-bottom:12.0pt'><b><span style='font-size:14.0pt;line-height:107%'>Running the Portal Dashboard Reports</span></b></p><p class=MsoListParagraphCxSpFirst style='margin-bottom:12.0pt;text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Run the Portal Reports Setup to configure the elements necessaryto run the reports. See the Portal Reports Setup Documentation </p><p class=MsoListParagraphCxSpMiddle style='margin-bottom:12.0pt;text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Run the Portal Dashboard to view the summary of sales andfinancials.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>The dashboard wants to have calculations refreshed within thepast 15 minutes. If, when starting the dashboard, it has been over 15 minutessince the last calculations, a temporary display will show that figures areupdating. After a satisfactory delay of a minute or so, click the Go buttonand the summary of sales and financials page should display. If not, repeatuntil it displays.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Leaving the dashboard running with Auto-Refresh slider activated forabout every 5 minutes will automatically refresh the dashboard display andtrigger a background recalculation of numbers when necessary.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>The title section of each dashboard page shows the date and timethe last calculations were run.</p><p class=MsoListParagraphCxSpMiddle style='margin-bottom:12.0pt;text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>On the summary of sales and financials, those labels underlinedand displayed in a color can drilled down on to display additional dashboards.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on <u><span style='color:#C45911'>Sales</span></u> toinitiate the Portal Sales Reports dashboard</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on <u><span style='color:#C45911'>Gross Profit (GP$)</span></u><spanstyle='color:#C45911'> </span>to initiate the same Portal Sales Reportsdashboard</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on <u><span style='color:#C45911'>Margin (GP%)</span></u><spanstyle='color:#C45911'> </span>to initiate the Portal Year to Year Marginsdashboard</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on the <u><span style='color:#C45911'>Balances as ofMM-DD-YY</span></u><span style='color:#C45911'> </span>to initiate the AR andAP dashboard</p><p class=MsoListParagraphCxSpLast style='margin-bottom:12.0pt;text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>After doing a drill downs, the browser back button can be used tonavigate back to the previous dashboard, or simply clicking on the PortalDashboard tab will re-initialize back to the summary of sales and financials.</p></div></body></html>00015Cadmin_menu.html0c2<ol class="admin_nav_links">  <li><a href="<!-- CGI$PATH -->/MVDB.ADMIN?action=users" class="bullet_link">Users</a>  <li><a href="<!-- CGI$PATH -->/MVDB.ADMIN?action=widgets" class="bullet_link">Widgets</a>  <li><a href="<!-- CGI$PATH -->/MVDB.ADMIN?action=dashboards" class="bullet_link">Dashboards</a>    <!-- RSS --></ol>000281message.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>    <link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <title>MultiValue Dashboard :: Login</title></head><body><div id="header"><div id="logo">  <br /><img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard"></div></div><div id="dashboard"><h1><!-- MSG_TITLE --></h1><!-- MSG_CONTENT --></div></body></html>000C78dbtemplate0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>    <meta http-equiv="X-UA-Compatible" content="IE=edge,IE=11,IE=10,IE=9,IE=8,IE=7" />    <link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/print.css" type="text/css" charset="utf-8" media="print" />    <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]-->            <!-- SITE_THEME -->        <!-- end styles -->                <script type="text/javascript" src="/db/javascripts/prototype-1.6.1.js"></script>    <script type="text/javascript" src="/db/javascripts/jquery-1.3.2.min.js"></script>    <script type="text/javascript" src="/db/javascripts/jquery-ui-1.8.custom.min.js"></script>    <script type="text/javascript">jQuery.noConflict();</script>    <script type="text/javascript" src="/db/fw/fusioncharts.js"></script>    <script type="text/javascript" src="/db/javascripts/sortable.js"></script>    <script type="text/javascript" src="/db/javascripts/tablesort.js"></script>    <script type="text/javascript" src="/db/javascripts/grid-widget.js"></script>    <script type="text/javascript" src="/db/javascripts/printing.js"></script>    <script type="text/javascript" src="/db/javascripts/slider.js"></script>        <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />    <style type="text/css" media="screen" >            /* put the left rounded edge on the track */            #track1-left {                position: absolute;                width: 5px;                height: 9px;                background: transparent url(/db/images/bg_slider_track.png) no-repeat top left;            }                        /* put the track and the right rounded edge on the track */            #track1 {                background: transparent url(/db/images/bg_slider_track.png) no-repeat top right;            }    </style>    <script>            jQuery(function() {                    jQuery(".datepicker").datepicker();            });    </script>    <title>MultiValue Dashboard</title>    <!-- REFRESH -->    </head><body><div id="printFrame" class="printme"></div><div id="header"><!-- HEADER --></div>    <div style="clear:both"></div>    <div id="logo">        <img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">    </div>    <!-- RefreshSlider --><div id="dashboardWrapper">    <div id="dashboard">        <!-- DASHBOARD -->        <div class="clear"></div>    </div>    <div class="clear"></div>    <br/></div><div id="footer">    <!-- FOOTER -->    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a></div></div><script type="text/javascript">/*jQuery(document).ready(function(){       jQuery('.widgetized').tablesort();     });*/</script>    </body></html>000548rss_edit.html0c2<form action="<!-- CGI$PATH -->/RSS.MAINT" method="post"><input type="hidden" name="id" value="<!-- feed_id -->"><input type="hidden" name="action" value="save"><table><tr> <td align="right">Feed ID:</td> <td><!-- edit_feed_id --></td></tr><tr> <td align="right">Name:</td> <td><input type="text" name="feed_name" value="<!-- feed_name -->"></td></tr><tr> <td align="right">Description:</td> <td><textarea name="feed_desc" rows="5" cols="50"><!-- feed_desc --></textarea></td></tr><tr> <td align="right">Select Subroutine:</td> <td><input type="text" name="sel_sub" value="<!-- sel_sub -->"> <!-- sel_sub_msg --> <a target="RSS.BP_<!-- sel_sub -->" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=<!-- sel_sub -->">Edit Source</a></td></tr><tr> <td align="right">Item Subroutine:</td> <td><input type="text" name="item_sub" value="<!-- item_sub -->"> <!-- item_sub_msg --> <a target="RSS.BP_<!-- item_sub -->" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=<!-- item_sub -->">Edit Source</a></td></tr><tr>  <td align="right">Modes:</td>  <td><textarea name="feed_modes" rows="10" cols="50"><!-- feed_modes --></textarea></td></tr><!-- EXTRA --><tr><td colspan="2"><input type="submit" name="save_feed" value="Save">&nbsp;<input type="submit" name="cancel_edit" value="Cancel"></td> </tr></table></form>000B5Frss_admin_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/><link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" /> <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" /> <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />  <script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>            	<script src="/db/javascripts/jquery.form.js" type="text/javascript" charset="utf-8"></script>    	        <script src="/db/javascripts/jquery.url.js" type="text/javascript" charset="utf-8"></script> 		<script src="/db/javascripts/rss_admin.js" type="text/javascript"></script><!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]--><!-- SITE_THEME --><title>RSS Feed Admin</title></head><body><div id="header"><!-- HEADER -->  <div id="logo">  	<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">  </div></div><div id="mainWrapper">		<div id="rss-dialog" title="New RSS Feed">		<div id="rss-messages"></div>		<form id="rss-form" method="post" action="/dbc/RSS.MAINT">			<input id="feed_id" type="hidden" value="NEW" name="id"/>			<input type="hidden" value="save" name="action"/>			<input type="hidden" value="Save" name="save_feed"/>						<table>			<tbody><tr>			 <td align="right">Feed ID:</td>			 <td><input id="new_id" type="text" value="" name="new_id"/></td>			</tr>			<tr>			 <td align="right">Name:</td>			 <td><input id="feed_name" type="text" value="" name="feed_name"/></td>			</tr>			<tr>			 <td align="right">Description:</td>			 <td><textarea id="feed_desc" cols="50" rows="5" name="feed_desc"></textarea></td>			</tr>			<tr>			 <td align="right">Select Subroutine:</td>			 <td><input id="select_sub" type="text" value="" name="sel_sub"/>  <a id="edit-sub-link" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&amp;ed_item=" target="RSS.BP_">Edit Source</a></td>			</tr>			<tr>			 <td align="right">Item Subroutine:</td>			 <td><input id="item_sub" type="text" value="" name="item_sub"/>  <a id="edit-item-link" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&amp;ed_item=" target="RSS.BP_">Edit Source</a></td>			</tr>			<tr>			  <td align="right">Modes:</td>			  <td><textarea id="feed_modes" cols="50" rows="10" name="feed_modes"></textarea></td>			</tr>			</tbody></table>		</form>	</div><!-- ADMIN_MAIN --></div><div id="footer">    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard/?tldb">Zumasys</a>    </div></div></body></html>0008E5RefreshSlider0c2<!-- outerTrackWrapper -->    <script type="text/javascript" language="javascript">  // <![CDATA[  // horizontal slider control  var slider1 = new Control.Slider('handle1', 'track1', {    range: $R(0, 9),    values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],    sliderValue: 1, // won't work if set to 0 due to a bug in script.aculo.us    onSlide: function(v) { showRefresh(v); },    onChange: function(v) { if ($('horizontal-slider')) {                    $('horizontal-slider').value = v; $('slider-form').submit();                     }    }  });  function setSliderValue(slider, value) {    // due to onChange code above we need this or     // a 0 will be put in the text box when you delete the value    //if (value == '') return;    if (isNaN(value)) {      slider.setValue(0.1);    } else {      slider.setValue(value);    }  }  function showRefresh(value) {    var dispRate = '';    switch (value) {      case 0:        dispRate = 'Auto-Refresh: Off';        break ;      case 1:        dispRate = 'Auto-Refresh: 15 seconds';        break ;      case 2:        dispRate = 'Auto-Refresh: 30 seconds';        break ;            case 3:        dispRate = 'Auto-Refresh: 1 minute';        break ;      case 4:        dispRate = 'Auto-Refresh: 2 minutes';        break ;            case 5:        dispRate = 'Auto-Refresh: 5 minutes';        break ;            case 6:        dispRate = 'Auto-Refresh: 10 minutes';        break ;            case 7:        dispRate = 'Auto-Refresh: 15 minutes';        break ;            case 8:        dispRate = 'Auto-Refresh: 30 minutes';        break ;            case 9:        dispRate = 'Auto-Refresh: 1 hour';        break ;            default:        dispRate = 'Auto-Refresh: Off';        break ;    }    document.getElementById('dispRate').innerHTML = dispRate;  }  var refreshRate = '<!-- REFRESH_RATE -->';  showRefresh(parseInt(refreshRate));    if (refreshRate != '') {    setSliderValue(slider1, refreshRate);  } else {    setSliderValue(slider1, 0.1);    }  // ]]></script><form name="reForm" method="post" action="" id="slider-form">  <input type="hidden" id="horizontal-slider" name="refresh" value="<!-- REFRESH_RATE -->" /></form>         00026APORTAL.DOCUMENTATION0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=100% align="center"><a href="/dbc/MVDB.MAIN?dbname=PORTAL RUN DOCUMENTATION">Running the Portal Dashboard Reports</a></td></tr><tr><td width=100% align="center"><a href="/dbc/MVDB.MAIN?dbname=PORTAL.SETUP.DOCUMENTATION">Portal Reports Setup Documentation</a></td></tr><tr><td width=100% align="center"><a href="/dbc/MVDB.MAIN?dbname=PORTAL.REPORTS.DOCUMENTATION">Glossary of Portal Dashboard Reports</a></td></tr></tdead></table></div>002FA4PORTAL.SETUP.DOCUMENTATION0c2<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 15 (filtered)"><style><!-- /* Font Definitions */ @font-face	{font-family:Wingdings;	panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face	{font-family:"Cambria Math";	panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face	{font-family:Calibri;	panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:0in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}.MsoChpDefault	{font-family:"Calibri",sans-serif;}.MsoPapDefault	{margin-bottom:8.0pt;	line-height:107%;}@page WordSection1	{size:8.5in 11.0in;	margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1	{page:WordSection1;} /* List Definitions */ ol	{margin-bottom:0in;}ul	{margin-bottom:0in;}--></style></head><body lang=EN-US><div class=WordSection1><p class=MsoNormal><b><span style='font-size:14.0pt;line-height:107%'>PortalSales Report Setup:</span></b></p><p class=MsoNormal>This setup process identifies the fields necessary forderiving sales, gross profit, and margin numbers. It allows for sales numbersto be broken out by sales person and, if applicable, by branch and/or region.</p><p class=MsoNormal><b>Sales File Account</b>  Multi-value systems normallyhave multiple accounts where data may reside. The sales reports will be drivenby a file of sales. This field needs the name of the account where that fileresides.</p><p class=MsoNormal><b>Name of Sales File</b>  The name of the file containingthe sales information.</p><p class=MsoNormal><b>Date of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that contains the date the sale was complete.</p><p class=MsoNormal><b>Month of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that displays the numeric value of the month the salewas completed. If the system doesnt have this dictionary item, there shouldbe one created using the Date of Sale Dict Name as a guide.</p><p class=MsoNormal><b>Year of Sale Dict Name </b> The name of the dictionaryitem in the sales file that displays the 4 digit year the sale was completed. Ifthe system doesnt have this dictionary item, there should be one created usingthe Date of Sale Dict Name as a guide.</p><p class=MsoNormal><b>Amount of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that contains the total amount of the sales transaction.This dictionary </p><p class=MsoNormal><b>Cost of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that contains the cost of the sales transaction. Thisis used for determining gross profit and margin. If this information is notavailable in the system, the field should be left blank, disabling reportsassociated with gross profit and margin.</p><p class=MsoNormal><b>Salesman Dict Name</b>  The name of the dictionary itemin the sales file that contains the primary salesman on the transaction. Mostsystems will have a salesman code in the sales file and another file thatcontains the actual names of the salesmen. This dictionary item should be onethat displays the actual name. </p><p class=MsoNormal><b>Branch Dict Name</b>  The name of the dictionary itemin the sales file that contains the branch being credited with thetransaction. Most systems will have a branch code in the sales file andanother file that contains the actual names of the branches. This dictionaryitem should be one that displays the actual name. This field only applies ifsales can be broken out by a branch. </p><p class=MsoNormal><b>Region Dict Name</b>  The name of the dictionary itemin the sales file that contains the region being credited with thetransaction. Most systems will have a region code in the sales file andanother file that contains the actual names of the regions. This dictionaryitem should be one that displays the actual name. This field only applies ifsales can be broken out by a region. </p><p class=MsoNormal><b>Go</b>  No validation is made on Portal Sales ReportSetup fields until this button is clicked. When validating, checks are madefor:</p><p class=MsoListParagraphCxSpFirst style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid file name in the account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Existence of each of the dictionary names entered</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Salesman Dict Name looking to another file for the actual name ofthe salesman. An ignorable warning is issued if that is not the case.</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Branch Dict Name looking to another file for the actual name ofthe branch. An ignorable warning is issued if that is not the case.</p><p class=MsoListParagraphCxSpLast style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Region Dict Name looking to another file for the actual name ofthe region. An ignorable warning is issued if that is not the case.</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal><b><span style='font-size:14.0pt;line-height:107%'>Portal ARReport Setup:</span></b></p><p class=MsoNormal>This setup process identifies the fields necessary for evaluatingaccount receivables. It breaks out statistics by amounts, aging categories, percentages,and periods for comparison purposes. It also identifies by customer whenviewing most amounts owed, most days aged, and accounts with significant changesin payment patterns.</p><p class=MsoNormal><b>AR File Account</b>  The AR reports will be driven by afile of receivables or invoices. This field needs the name of the accountwhere that file resides.</p><p class=MsoNormal><b>Name of AR File</b>  The name of the file containing thereceivables with amounts and payment information.</p><p class=MsoNormal><b>Due Date Dict Name</b>  The name of the dictionary itemin the AR file showing the due date of the receivable.</p><p class=MsoNormal><b>Date Paid Dict Name</b>  The name of the dictionary itemin the AR file showing the date the receivable was paid.</p><p class=MsoNormal><b>Invoice Amount Dict Name</b>  The name of the dictionaryitem in the AR file that contains the original amount owed. </p><p class=MsoNormal><b>Remaining Balance Dict Name</b>  The name of thedictionary item in the AR file that contains the remaining balance. </p><p class=MsoNormal><b>Customer Dict Name</b>  The name of the dictionary itemin the AR file that contains the customer. Most systems will have a customercode in the AR file and another file that contains the actual names of the customers.This dictionary item should be one that displays the actual name. </p><p class=MsoNormal><b>Go</b>  No validation is made on Portal AR Report Setupfields until this button is clicked. When validating, checks are made for:</p><p class=MsoListParagraphCxSpFirst style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid file name in the account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Existence of each of the dictionary names entered</p><p class=MsoListParagraphCxSpLast style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Customer Dict Name looking to another file for the actual name ofthe salesman. An ignorable warning is issued if that is not the case.</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal><b><span style='font-size:14.0pt;line-height:107%'>Portal APReport Setup:</span></b></p><p class=MsoNormal>This setup process identifies the fields necessary for evaluatingaccount payables. It breaks out statistics by amounts, aging categories, and percentages.</p><p class=MsoNormal><b>AP File Account</b>  The AP reports will be driven by afile of payables. This field needs the name of the account where that fileresides.</p><p class=MsoNormal><b>Name of AP File</b>  The name of the file containing thepayables with amounts and payment information.</p><p class=MsoNormal><b>Due Date Dict Name</b>  The name of the dictionary itemin the AP file showing the due date of the payable.</p><p class=MsoNormal><b>Date Paid Dict Name</b>  The name of the dictionary itemin the AP file showing the date the payable was paid.</p><p class=MsoNormal><b>Invoice Amount Dict Name</b>  The name of the dictionaryitem in the AP file that contains the original amount owed. </p><p class=MsoNormal><b>Remaining Balance Dict Name</b>  The name of thedictionary item in the AP file that contains the remaining balance. </p><p class=MsoNormal><b>Go</b>  No validation is made on Portal AP Report Setupfields until this button is clicked. When validating, checks are made for:</p><p class=MsoListParagraphCxSpFirst style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid file name in the account</p><p class=MsoListParagraphCxSpLast style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Existence of each of the dictionary names entered</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p></div></body></html>000666pdftemplate0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>    <link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]-->            <!-- SITE_THEME -->        <!-- end styles -->                <script type="text/javascript" src="/db/javascripts/prototype-1.6.1.js"></script>    <script type="text/javascript" src="/db/javascripts/jquery-1.3.2.min.js"></script>    <script type="text/javascript">jQuery.noConflict();</script>    <script type="text/javascript" src="/db/fw/fusioncharts.js"></script>    <script type="text/javascript" src="/db/javascripts/sortable.js"></script>    <script type="text/javascript" src="/db/javascripts/tablesort.js"></script>    <script type="text/javascript" src="/db/javascripts/grid-widget.js"></script>    <script type="text/javascript" src="/db/javascripts/printing.js"></script>    <script type="text/javascript" src="/db/javascripts/slider.js"></script>        <title>MultiValue Dashboard</title>    </head><body><div style="clear:both"></div><div id="logo">    <img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard"></div><div id="dashboardWrapper">    <div id="dashboard">        <!-- DASHBOARD -->        <div class="clear"></div>    </div>    <div class="clear"></div>    <br/></div></body></html>00022Bwidget_debug.html0c2<table width="100%"><tr><td>Widget Name:</td><td><!-- WIDGET_NAME --></td></tr><tr><td>Widget Subroutine:</td><td><!-- WIDGET_SUB_NAME --> <!-- WIDGET_EDIT_LINK --></td></tr></table><!-- DEBUG_REASON --><br /><!-- REMEDY -->Runtime errors for <!-- WIDGET_SUB_NAME --><br /><table width="100%"><tr><th>Date / Time</th><th>User</th><th>Error</th></tr><!-- RUNTIME_ERRORS --><table width="100%"><tr><td colspan="2">WIDGET.USER.DATA values:</td></tr><tr><th>Position</th><th>Value</th></tr><!-- WIDGET_USER_DATA --></table>000F48pkg_list_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>	    <script src="http://alpha.bravo:83/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>            	    <script src="http://alpha.bravo:83/db/javascripts/jquery.form.js" type="text/javascript" charset="utf-8"></script>    	        	<script src="http://alpha.bravo:83/db/javascripts/jquery.url.js" type="text/javascript" charset="utf-8"></script> 	<script src="http://alpha.bravo:83/db/javascripts/initAdminTemplate.js" type="text/javascript" charset="utf-8"></script> 	<script src="http://alpha.bravo:83/db/javascripts/sortable.js" type="text/javascript" charset="utf-8"></script> 	<script src="http://alpha.bravo:83/db/javascripts/tablesort.js" type="text/javascript" charset="utf-8"></script> 		<script type="text/javascript"> 		$(function() {			$("#tabs").tabs();			$("#accordion").accordion({ autoHeight: false });			$('#edit_dialog').dialog({ autoOpen: false, modal: true });			$('#edit_form').click(function() {				$('#edit_dialog').dialog('open');			});			$('#delete_dialog').dialog({ autoOpen: false, modal: true });			$('#delete_form').click(function() {				$('#delete_dialog').dialog('open');			});		});			</script> 		<link rel="stylesheet" href="http://alpha.bravo:83/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" /> 	<link rel="stylesheet" href="http://alpha.bravo:83/db/css/application.css" type="text/css" charset="utf-8" /> 	<link rel="stylesheet" href="http://alpha.bravo:83/db/css/ingrid.css" type="text/css" charset="utf-8" />     <link rel="StyleSheet" href="http://alpha.bravo:83/db/css/jquery-ui.css" media="screen" type="text/css" />     <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]--> 	 <!-- SITE_THEME --><title>Package Management</title></head><body><div id="edit_dialog"><p>      <form id="new-file-form" method="get" action="/dbc/MVPKG.MAIN">       <div id="new-file-messages"></div>       <table><tbody>      <tr>         <td colspan="2">File:<input id="file-name" type="text" value="" name="file_name"/></td>       </tr>      <tr>        <td><input type="radio" name="file_dict" value="DICT" id="file-dict"></td><td>DICT</td>      </tr>      <tr>        <td><input type="radio" name="file_dict" value="DATA" id="file-dict"></td><td>DATA</td>      </tr>      <tr>         <td><input type="radio" name="items_type" vaue="savedlist" id="items-type"></td><td>Saved List<br/>        file:<input type="text" name="savedlist_file" id="savedlist-file"><br/>        list:<input type="text" name="savedlist_id" id="savedlist-id"></td>      </tr>       <tr>         <td><input type="radio" name="items_type" value="all" id="items-type"></td><td>All Items</td>      </tr>       <tr>         <td><input type="radio" name="items_type" value="items" id="items-type"></td>         <td>Item: <input type="text" name="items_items" id="items-items"></td>       </tr>       </tbody></table>       <input type="hidden" value="save_user" name="action"/>       </form>       <div class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix">        <button type="button" class="ui-state-default ui-corner-all">Cancel</button>        <button type="button" class="ui-state-default ui-corner-all">Save</button>      </div></p></div><div id="header"><!-- HEADER -->  <div id="logo">  	<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">  </div></div><div id="mainWrapper"><!-- ADMIN_MAIN --></div></div><div id="footer">    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a>    </div></div></body></html>0007E2MVDB.DEFS0c00000B1Administrator0c21AdminConfigPDFConfigDashboard License UsageCode TemplatesD3 Runtime ErrorsSystem - SessionShow Vars11122551121212ADMINadminAdmin30000091Chart Demo0c22Demo-PieDemo-SS LineDemo-DoughnutDemo-SS ColDemo- MS Col2223312312ADMINguestadminDemonstration ChartsTheme 11000062Demo Financial Company0c21DEMO FINANCIAL PICTURE21ADMINguestadminDemo Financial Company00005CDEMO AVERAGE DAYS CHART0c21DEMO AVERAGE DAYS CHART21dummydisplay average days chart00003DDEMO NET INCOME CHART0c21DEMO NET INCOME CHART21dummy00005BDEMO REV.GP SALES CHART0c21DEMO REV.GP SALES CHART21dummyDisplay Rev.Gp Sales Chart000047DEMO SALES CHART0c21DEMO SALES CHART21dummyDisplay Sales Chart000050DEMO SALES PERCENTS0c21DEMO SALES PERCENTS21dummyDisplay Sales Percents000055Emailed Report0c21Emailed Report21Display contents of an emailed report link000041Icons0c21Icon Gallery11ADMINguestadminIcon Gallery50000085PORTAL REPORTS SETUP0c21PORTAL SALES REPORT SETUPPORTAL AR REPORT SETUPPORTAL AP REPORT SETUP222123Portal Reports Setup00003DPORTAL MARGINS0c21PORTAL MARGINS21dummyPortal Margins000046PORTAL AR REPORTS0c22PORTAL AR REPORTS31dummyPortal AR Reports00004FPORTAL SALES REPORTS0c21PORTAL SALES REPORTS21dummyPortal Sales Reports00003EPORTAL DASHBOARD0c21PORTAL DASHBOARD21Portal Dashboard000061PORTAL.SETUP.DOCUMENTATION0c21PORTAL SETUP DOCUMENTATION21dummyPortal Setup Documentation000068PORTAL.REPORTS.DOCUMENTATION0c21PORTAL.REPORTS.DOCUMENTATION21dummyPortal Reports Documentation00005FPORTAL DASHBOARD DOCUMENTATION0c23PORTAL.DOCUMENTATION31Portal Dashboard Documentation00005CPORTAL RUN DOCUMENTATION0c21PORTAL.RUN.DOCUMENTATION21dummyPortal Run Documentation00007FDISPLAY PORTAL BALANCE PIE CHART0c21PORTAL AR REPORTSPORTAL AP REPORTS2212dummyPie chart to display AR & AP balances0000B3DICT_MVDB.MAP.DATA0c0000022NAME0c1A0Map NameG0*1L4000001FLONG0c1A2Long NameL25000023INTERNAL.ID0c1A0IDG1*1L10000021SHORT0c1A1Short NameL10046BE6MVDB.MAP.DATA0c0000023FrenchGuiana#GF.CY.CY0c2CYCayenne000018Fiji#FJ.CE.RW0c2RWRewa00001CMacau#MO.IL.CO0c2COColoane00001CChina2#CN.GD0c2GDGuangdong000024FranceDepartment#FR.ES0c2ESEssonne000026FranceDepartment#FR.FI0c2FIFinistere000019Congo#CG.CU0c2CUCuvette000019Algeria#DZ.AR0c2ARAdrar00001AMacedonia#MK.ST0c2STStip00001AIndiana#0570c2HAHamilton000016NewYork#0290c2ERErie00001FNorthCarolina#0970c2IRIredell000018Georgia#2490c2SCSchley00001BIreland#0170c2MEM&iacute;00002CNorthAmerica#0190c2KNSt. Kitts &amp; Nevis000016Kansas#0510c2ELEllis00001FSouthCarolina#0230c2CSChester00001AIllinois#0870c2JHJohnson00001AMissouri#0070c2AUAudrain000024WorldwithCountries#1460c2IRIreland00001CNorthDakota#0210c2DIDickey000018Texas#0790c2COCCochran000017Ohio#0410c2DLDelaware000023NewMexico#0130c2DADo&ntilde;a Ana000018Nebraska#0110c2BOBoone00001AWyoming#0330c2SHSheridan000024Europewithcountries#0150c2GRGreece000018Malaysia#0010c2JOJohor000019Tennessee#1010c2LELewis00001EScotland#0180c2LALanarkshire000017NewWorld#1910c2IZIraq000018Oklahoma#0530c2GNGrant000014Iowa#1050c2JNJones00001DAlaska#2700c2WHWade Hampton000017Texas#4410c2TAYTaylor000025NewCaledonia#NC.NO.PT0c2PTPouembout000019Ontario#480c2WAWaterloo000019Montenegro#190c2TITivat000019MiddleEast#140c2SYSyria000019Switzerland#260c2JUJura000023SouthEuropeanRegion#120c2CSSerbia000019NewWorld#390c2DZAlgeria00003AQuebec#110c2GAGasp&eacute;sie-&Icirc;les-de-la-Madeleine000014Kenya#020c2COCoast00001BPuertoRico#570c2GMGuayama00001ABahamas#150c2HTHope Town000017Japan#450c2YAYamagata000024NorwayRegion#130c2OT&Oslash;stfold000026PolandCounties#PL.DS.LM0c2DLMLegnica000027MarshallIsland#MH.MH.KW0c2KWKwajalein000021Macedonia#MK.SU0c2SUStudenicani00001FHongKong#HK.KI0c2KIKwai Tsing000019Palau#PW.PE0c2PEPeleliu000018Uganda#UG.BW0c2BWBukwa00001CVietnam#VN.HY0c2HYHung Yen00001EGambia#GM.UR0c2URUpper River000034Nigeria#NG.FC0c2FCAbuja(Federal Capital Territory)00001BSenegal#SN.KL0c2KLKaolack000025Morocco#MA.CO0c2COChaouia Ouardigha00001DBurma#MM.KN0c2KNKayin State00001CMissouri#1890c2SOSt. Louis000024Ireland#0180c2MOMuineach&aacute;in000020NorthAmerica#0200c2LCSt. Lucia00001DCalifornia#0930c2SYSiskiyou000025Alaska#0900c2FAFairbanks North Star000017Texas#2610c2KEDKenedy00001DLouisiana#0050c2ASAscension000018Georgia#0690c2CFCoffee000022WorldwithCountries#1470c2ITItaly000018Minnesota#1210c2POPope00001AKentucky#1050c2HKHickman000019Michigan#1150c2MRMonroe00001AFlorida#0330c2ESEscambia00001DMississippi#0150c2CRCarroll000025Europewithcountries#0160c2HUHungary000018Malaysia#0020c2KEKedah000019Arkansas#0050c2BABaxter00001EEngland#0010c2BEBedfordshire00001FWestVirginia#0330c2HIHarrison00001DScotland#0190c2MIMidlothian000019NewWorld#1920c2IEIsrael00001BAsia3#0340c2PHPhilippines000018Virginia#1810c2SRSurry00001AColorado#0130c2BOBoulder00001BSouthDakota#0510c2GRGrant00001AAlabama#0290c2CBCleburne00001ENorwayRegion#140c2RORogaland00001BAustralia#VI0c2VIVictoria00001BOntario#490c2WEWellington00001AMontenegro#200c2ULUlcinj00001EMiddleEast#150c2TITajikistan000022SouthEuropeanRegion#130c2ESSpain000018NewWorld#400c2AOAngola00002BQuebec#120c2CAChaudi&egrave;re-Appalaches000016Kenya#030c2EAEastern000017Bahamas#160c2INInagua000018Japan#460c2YMYamaguchi00001DFiji#FJ.EA.LM0c2LMLomaiviti000027PolandCounties#PL.PK.PM0c2PPMPrzemysl00001CMacedonia#MK.TL0c2TLBitola00001ARwanda#RW.ES0c2ESEastern00001AUganda#UG.TY0c2TYMityana00001BMacedonia#MK.CA0c2CACaska000026EquatorialGuinea#GQ.BS0c2BSBioko Sur000015Iran#IR.IL0c2ILIlam000021FranceDepartment#FR.EU0c2EUEure000021FranceDepartment#FR.GA0c2GAGard000023Mauritius#MU.PA0c2PAPamplemousses000019Nigeria#NG.EN0c2ENEnugu000022Algeria#DZ.AT0c2ATAin Temouchent00001AAlgeria#DZ.BJ0c2BJBejaia000018Texas#4430c2TERTerrell000019Indiana#0590c2HNHancock000017NewYork#0310c2ESEssex00001FNorthCarolina#0990c2JAJackson00001BVirginia#0010c2ACAccomack000019Georgia#2510c2SRScreven000023Ireland#0190c2OFUa F&aacute;ilghe000037NorthAmerica#0210c2VCSt. Vincent &amp; the Grenadines00001AKansas#0530c2EWEllsworth000024SouthCarolina#0250c2CTChesterfield000017Illinois#0890c2KAKane000018Missouri#0090c2BYBarry000023WorldwithCountries#1480c2LVLatvia00001CNorthDakota#0230c2DVDivide000015Texas#0810c2COKCoke000013Ohio#0430c2ERErie000019Spain#0010c2ANAndalucia000018NewMexico#0150c2EDEddy00001CNebraska#0130c2BXBox Butte00001AWyoming#0350c2SUSublette000025Europewithcountries#0170c2ISIceland00001BMalaysia#0030c2KLKelantan00001BEngland#0020c2BRBerkshire00001BTennessee#1030c2LILincoln000018Scotland#0200c2MOMoray000019NewWorld#1930c2JOJordan000018Oklahoma#0550c2GEGreer000015Iowa#1070c2KEKeokuk00001DColorado#0140c2BRBroomfield000026NorwayRegion#150c2SOSogn og Fjordane000015Ontario#500c2YOYork000020Montenegro#210c2ZA&#381;abljak00001AMiddleEast#160c2TUTurkey000023SouthEuropeanRegion#140c2TKTurkey000026USACentralRegion#460c2SDSouth Dakota000017NewWorld#410c2BJBenin000015Quebec#130c2LVLaval00001EPuertoRico#590c2GLGuayanilla00001CBahamas#170c2LILong Island000018Japan#470c2YNYamanashi000023MarshallIsland#MH.MH.ME0c2MEMejit000026Philippines#PH.SK0c2SKSultan Kudarat00001FCoteDivoire#CI.SV0c2SVSavanes000020Macedonia#MK.AV0c2AVKavadartsi00001ARussia#RU.IV0c2IVIvanovo000025Russia#RU.KB0c2KBKabardino-Balkaria00001AEurope2#EU.PL0c2PLPoland00001BQatar#QA.DA0c2DAAd Dawhah00001BAlgeria#DZ.TL0c2TLTlemcen000019Panama#PA.PN0c2PNPanama000022Uzbekistan#UZ.QA0c2QAKashkadarya000018Alabama#0310c2CFCoffee000019Vermont#0010c2ADAddison000022Ireland#0200c2RORos Com&aacute;n00002CNorthAmerica#0220c2TTTrinidad &amp; Tobago00001BCalifornia#0950c2SOSolano000015Texas#2630c2KETKent00001ELouisiana#0070c2AUAssumption00001AGeorgia#0710c2CQColquitt00002AWorldwithCountries#1490c2LNLiechtenstein00001AMinnesota#1230c2RMRamsey00001AKentucky#1070c2HOHopkins00001BMichigan#1170c2MNMontcalm000019Florida#0350c2FLFlagler000016Spain#0020c2ARAragon00001FMississippi#0170c2CHChickasaw000025Europewithcountries#0180c2IEIreland000019Malaysia#0040c2MEMelaka000019Arkansas#0070c2BEBenton000021England#0030c2BUBuckinghamshire00001EWestVirginia#0350c2JAJackson00001DScotland#0210c2NANairnshire000019NewWorld#1940c2KUKuwait000022Asia3#0360c2RURussian Federation000019Virginia#1830c2SSSussex00001AColorado#0150c2CHChaffee00001DSouthDakota#0530c2GEGregory00001CWorld#NA0c2NANorth America000031NorwayRegion#160c2STS&oslash;r-Tr&oslash;ndelag000024Australia#WA0c2WAWestern Australia000020MiddleEast#170c2TXTurkmenistan000023SouthEuropeanRegion#150c2CYCyprus00001ANewWorld#420c2BWBotswana000021Quebec#140c2LALanaudi&egrave;re000016Kenya#050c2NANairobi00001DBahamas#180c2MCMangrove Cay000019Jordan#JO.JA0c2JAJarash000029CentralAfricanRepublic#CF.MB0c2MBMbomou000026Philippines#PH.SL0c2SLSouthern Leyte00001DMongolia#MN.OG0c2OGOmnogovi00001DPhilippines#PH.AK0c2AKAklan00001EPhilippines#PH.BA0c2BABataan000026Russia#RU.KC0c2KCKarachay-Cherkessia000024Libya#LY.HZ0c2HZAl Hizam al Akhdar000020Algeria#DZ.TM0c2TMTamanghasset000019Algeria#DZ.BL0c2BLBlida000016Texas#4450c2TEYTerry00001AIndiana#0610c2HRHarrison00001ANewYork#0330c2FRFranklin000020NorthCarolina#1010c2JOJohnston00001CVirginia#0030c2ALAlbemarle00001AGeorgia#2530c2SMSeminole00001AIreland#0210c2SLSligeach000024NorthAmerica#0230c2USUnited States000017Kansas#0550c2FIFinney000021SouthCarolina#0270c2CDClarendon00001BIllinois#0910c2KNKankakee000019Missouri#0110c2BRBarton000026WorldwithCountries#1500c2LTLithuania00001ANorthDakota#0250c2DNDunn000018Texas#0830c2COLColeman000018Ohio#0450c2FAFairfield000018Spain#0030c2ASAsturias000019NewMexico#0170c2GRGrant000017Nebraska#0150c2BYBoyd00001CWyoming#0370c2SWSweetwater000023Europewithcountries#0190c2ITItaly000022Malaysia#0050c2NSNegeri Sembilan000020England#0040c2CACambridgeshire00001ATennessee#1050c2LOLoudon000019Scotland#0220c2OROrkney00001ANewWorld#1950c2LBLebanon000019Oklahoma#0570c2HAHarmon000016Iowa#1090c2KOKossuth00001ENorwayRegion#170c2TETelemark000020Moldova#460c2BAB&#259;l&#355;i000026MiddleEast#180c2AEUnitedArabEmirates000029SouthEuropeanRegion#160c2VAVatican City00001FUSACentralRegion#480c2TXTexas00001ENewWorld#430c2BFBurkina Faso00001BQuebec#150c2LULaurentides00001CKenya#060c2NENorth Eastern00001CPuertoRico#610c2GBGuaynabo00001ABahamas#190c2MGMayaguana000022Macau#MO.MA.SA0c2SASanto Antonio000019Fiji#FJ.CE.SR0c2SRSerua00001AMacau#MO.IL.CT0c2CTCotai000019Ghana#GH.AH0c2AHAshanti00001DPhilippines#PH.SM0c2SMSamar000020Mongolia#MN.OH0c2OHOvorkhangai00001EMacedonia#MK.BN0c2BNBrvenica00001DPhilippines#PH.AL0c2ALAlbay00001CRussia#RU.KD0c2KDKrasnodar00001CMicronesia#FM.CH0c2CHChuuk000019Guinea#GN.KA0c2KAKankan000017Benin#BJ.DO0c2DODonga00001BAlgeria#DZ.TN0c2TNTindouf00001DAlgeria#DZ.BM0c2BMBoumerdes00001CSouthDakota#0550c2HAHaakon000019Alabama#0330c2CRColbert00001CVermont#0030c2BEBennington000021Ireland#0220c2TITiobraid Arainn000020NorthAmerica#0240c2GLGreenland00001BCalifornia#0970c2SMSonoma000015Texas#2650c2KERKerr00001DLouisiana#0090c2AVAvoyelles00001AGeorgia#0730c2CUColumbia000027WorldwithCountries#1510c2LULuxembourg00001CMinnesota#1250c2RLRed Lake00001AKentucky#1090c2JAJackson00001EMichigan#1190c2MOMontmorency00001AFlorida#0370c2FRFranklin00002BSpain#0040c2BABaleares (Balearic Islands)00001DMississippi#0190c2COChoctaw000024Europewithcountries#0200c2LVLatvia000019Malaysia#0060c2PAPahang000018Arkansas#0090c2BOBoone00001AEngland#0050c2CHCheshire000020WestVirginia#0370c2JEJefferson00001FScotland#0230c2PBPeeblesshire000017NewWorld#1960c2MUOman000019Asia3#0380c2SGSingapore00001BVirginia#1850c2TATazewell00001BColorado#0170c2CECheyenne000020NewCaledonia#NC.NO.PY0c2PYPoya00001BNorwayRegion#180c2TRTroms000016Moldova#470c2CACahul00001EMiddleEast#190c2UZUzbekistan000022USASouthWestRegion#150c2HIHawaii000019NewWorld#440c2BIBurundi000028Quebec#160c2MOMont&eacute;r&eacute;gie000015Kenya#070c2NYNyanza00001FBahamas#200c2MIMoore's Island00001FLiberia#LR.GB0c2GBGrand Bassa00001CMacedonia#MK.CE0c2CECentar00001BRussia#RU.KE0c2KEKemerovo000019Guinea#GN.KB0c2KBKoubia00001FCameroon#CM.NW0c2NWNord-Ouest000021Lebanon#LE.JL0c2JLMount Lebanon000021FranceDepartment#FR.GE0c2GEGers000024Cambodia#KH.OC0c2OCOddar Meancheay00001EAlgeria#DZ.TO0c2TOTizi Ouzou000016Tonga#TO.EU0c2EU'Eua000026Kazakhstan#KZ.WK0c2WKWest Kazakhstan000019Senegal#SN.LG0c2LGLouga00001DTexas#4470c2THRThrockmorton00001BIndiana#0630c2HDHendricks000018NewYork#0350c2FUFulton00001DNorthCarolina#1030c2JNJones00001CVirginia#0050c2AEAlleghany00001AGeorgia#2550c2SPSpalding00001DIreland#0230c2WAPort Lairge000022NorthAmerica#0250c2PRPuerto Rico000015Kansas#0570c2FOFord000020SouthCarolina#0290c2CLColleton00001AIllinois#0930c2KDKendall000018Missouri#0130c2BABates000026WorldwithCountries#1520c2MKMacedonia00001ANorthDakota#0270c2EDEddy000017Texas#0850c2CONCollin000016Ohio#0470c2FYFayette000015Spain#0050c2CECeuta00001DNewMexico#0190c2GUGuadalupe000018Nebraska#0170c2BRBrown000017Wyoming#0390c2TETeton00002BEuropewithcountries#0210c2LILiechtenstein000018Malaysia#0070c2PEPerak00001AEngland#0060c2COCornwall00001ATennessee#1070c2MCMcMinn00001DScotland#0240c2PEPerthshire000018NewWorld#1970c2OMQatar000019Oklahoma#0590c2HRHarper000012Iowa#1110c2LELee000019Asia3#0390c2LKSri Lanka000019Wisconsin#0010c2ADAdams000020NorwayRegion#190c2VAVest-Agder000023Moldova#480c2CUChi&#351;in&#259;u000019MiddleEast#200c2YMYemen00001ANewWorld#450c2CMCameroon000027Quebec#170c2CQCentre-du-Qu&eacute;bec00001AKenya#080c2RVRift Valley00001APuertoRico#630c2GRGurabo00001FBahamas#210c2NWNew Providence000021Macau#MO.MA.SC0c2SCSao Lourenco000022MarshallIsland#MH.MH.MI0c2MIMili00001CMacedonia#MK.UG0c2UGStruga00001CSudan#SD.UN0c2UNUpper Nile000026Kazakhstan#KZ.EK0c2EKEast Kazakhstan000028Philippines#PH.AN0c2ANAgusan del Norte000026Libya#LY.JI0c2JIAl Jifarah(Al Jfara)00001CBotswana#BW.KW0c2KWKweneng000019China2#CN.HA0c2HAHainan000016Nauru#NR.IJ0c2IJIjuw00001AAlgeria#DZ.TP0c2TPTipaza00001CSouthDakota#0570c2HMHamlin000019Alabama#0350c2CNConecuh000020Australia2#QLD0c2QLDQueensland00001BVermont#0050c2CACaledonia000019Missouri#1950c2SASaline00001FIreland#0240c2WEIarmh&iacute;000025NorthAmerica#0260c2KYCayman Islands00001FCalifornia#0990c2SLStanislaus000017Texas#2670c2KIMKimble00001ELouisiana#0110c2BEBeauregard000024Virginia#7300c2PBPetersburg (City)000016Georgia#0750c2COCook000022WorldwithCountries#1530c2MTMalta00001BMinnesota#1270c2RWRedwood00001CKentucky#1110c2JEJefferson00001BMichigan#1210c2MUMuskegon000019Florida#0390c2GAGadsden000029Spain#0060c2CACanarias (Canary Islands)00001FMississippi#0210c2CLClaiborne000027Europewithcountries#0220c2LTLithuania000019Malaysia#0080c2PRPerlis00001AArkansas#0110c2BRBradley000019England#0070c2CUCumbria00001EWestVirginia#0390c2KAKanawha00001FScotland#0250c2RERenfrewshire00001FNewWorld#1980c2SASaudi Arabia000019Virginia#1870c2WAWarren00001EColorado#0190c2CLClear Creek00001ENorwayRegion#200c2VEVestfold000027Moldova#490c2SNSt&acirc;nga Nistrului00001CNewWorld#460c2CVCape Verde000016Kenya#090c2WEWestern00001CBahamas#220c2NBNorth Abaco000025PolandCounties#PL.LU.LM0c2LLMLublin000024MarshallIsland#MH.MH.MJ0c2MJMajuro00001FLiberia#LR.GD0c2GDGrand Gedeh00001DGhana#GH.BA0c2BABrong-Ahafo000027Mauritania#MR.HC0c2HCHodh Ech Chargui00001CMacedonia#MK.TR0c2TRTearce00001AUganda#UG.UU0c2UUKanungu000019Uganda#UG.WA0c2WAWakiso000019Malawi#MW.SA0c2SASalima000019Russia#RU.KG0c2KGKaluga000019Guinea#GN.KD0c2KDKindia000018China2#CN.HB0c2HBHebei00001AGambia#GM.WE0c2WEWestern000022Bhutan#BT.WP0c2WPWangdi Phodrang00001BWisconsin#0030c2ASAshland000016Texas#4490c2TITTitus000017Indiana#0650c2HYHenry000019NewYork#0370c2GEGenesee00001BNorthCarolina#1050c2LELee000021Maryland#5100c2BABaltimore City000019Virginia#0070c2AMAmelia00001AGeorgia#2570c2SEStephens00001DIreland#0250c2WXLoch Garman000019Kansas#0590c2FRFranklin000022SouthCarolina#0310c2DADarlington000017Illinois#0950c2KOKnox000019Missouri#0150c2BTBenton000024WorldwithCountries#1540c2MVMoldova00001CNorthDakota#0290c2EMEmmons00001ETexas#0870c2CSWCollingsworth000024Virginia#5500c2CPChesapeake (City)000017Ohio#0490c2FRFranklin000019Spain#0070c2CNCantabria00001BNewMexico#0210c2HAHarding00001ANebraska#0190c2BFBuffalo000017Wyoming#0410c2UIUinta000028Europewithcountries#0230c2LULuxembourg00001FMalaysia#0090c2PPPulau Pinang00001CEngland#0080c2DEDerbyshire00001BTennessee#1090c2MYMcNairy000026Scotland#0260c2RCRoss &amp; Cromarty000018NewWorld#1990c2SYSyria00001AOklahoma#0610c2HSHaskell000013Iowa#1130c2LILinn00001ENorwayRegion#210c2SVSvalbard00001CMoldova#500c2EDEdine&#355;00002ANewWorld#470c2CPCentral African Republic00001BPuertoRico#650c2HAHatillo00001DBahamas#230c2NNNorth Andros000017Macau#MO.MA.SE0c2SESe00001BFiji#FJ.CE.TL0c2TLTailevu000020Philippines#PH.SQ0c2SQSiquijor00001CMacedonia#MK.BR0c2BRBerovo000027Macedonia#MK.CH0c2CHCesinovo Oblesevo00001EPhilippines#PH.AP0c2APApayao00001DRussia#RU.KH0c2KHKhabarovsk000019China2#CN.YN0c2YNYunnan000029Guinea#GN.KE0c2KEK&eacute;rouan&eacute;00001ETurkmenistan#TM.LE0c2LELebap00001AAlgeria#DZ.TR0c2TRTiaret00001ANamibia#NA.ER0c2ERErongo00001AColorado#0210c2COConejos00001ASouthDakota#0590c2HNHand000017Alabama#0370c2CSCoosa00001CVermont#0070c2CHChittenden00001BMissouri#1970c2SYSchuyler000026Ireland#0260c2WICill Mhant&aacute;in00001BCalifornia#1010c2SUSutter000015Texas#2690c2KINKing00001DLouisiana#0130c2BIBienville000018Georgia#0770c2CWCoweta000023WorldwithCountries#1550c2MCMonaco00001CMinnesota#1290c2RERenville00001CKentucky#1130c2JSJessamine00001AMichigan#1230c2NENewaygo00001BFlorida#0410c2GIGilchrist000022Spain#0080c2CLCastilla-La Mancha00001CMississippi#0230c2CKClarke000027Europewithcountries#0240c2MKMacedonia000018Malaysia#0100c2SASabah00001AArkansas#0130c2CACalhoun000017England#0090c2DVDevon000020SouthAmerica#0010c2ARArgentina00001CWestVirginia#0410c2LELewis000020Scotland#0270c2RORoxburghshire000025NewWorld#2000c2AEUnitedArabEmirates000018Asia3#0420c2THThailand000013USA#HI0c2HIHawaii00001FNorwayRegion#220c2JMJan Mayen000023Moldova#510c2GAG&#259;g&#259;uzia000016NewWorld#480c2TDChad000020Bahamas#240c2NENorth Eleuthera000017Fiji#FJ.EA.LU0c2LULau000026MarshallIsland#MH.MH.ML0c2MLMaloelap000019Algeria#DZ.CH0c2CHChlef00001DMauritania#MR.GO0c2GOGorgol000020Philippines#PH.SR0c2SRSorsogon00001EMacedonia#MK.BS0c2BSBosilovo00001AMacedonia#MK.CI0c2CICair00001FPhilippines#PH.AQ0c2AQAntique00001FPhilippines#PH.BG0c2BGBenguet00001ARussia#RU.KI0c2KIKarelia00001BQatar#QA.US0c2USUmm Salal000024FranceDepartment#FR.GI0c2GIGironde00001EAlgeria#DZ.TS0c2TSTissemsilt00002ASaoTomeandPrincipe#ST.AG0c2AGAgua Grande00001AWisconsin#0050c2BABarron000024Alaska#2800c2WPWrangell-Petersburg00001ATexas#4510c2TOGTom Green000018Indiana#0670c2HOHoward000018NewYork#0390c2GRGreene00001ENorthCarolina#1070c2LNLenoir00001AVirginia#0090c2AHAmherst000019Georgia#2590c2STStewart000022Ireland#0270c2NLNorthern Ireland000016Kansas#0610c2GEGeary00001ESouthCarolina#0330c2DIDillon000017Illinois#0970c2LALake00001CMissouri#0170c2BNBollinger000027WorldwithCountries#1560c2MGMontenegro00001CNorthDakota#0310c2FOFoster000019Texas#0890c2CORColorado000015Ohio#0510c2FUFulton00001FSpain#0090c2CYCastilla y Leon00001BNewMexico#0230c2HIHidalgo000017Nebraska#0210c2BUBurt00001AWyoming#0430c2WAWashakie000023Europewithcountries#0250c2MTMalta00001AMalaysia#0110c2SRSarawak000018England#0100c2DODorset000019Tennessee#1110c2MAMacon00001ESouthAmerica#0020c2BOBolivia00001FScotland#0280c2SESelkirkshire000018NewWorld#2010c2YMYemen000019Oklahoma#0630c2HUHughes000015Iowa#1150c2LOLouisa000030MadagascarRegions#MG.FI.HM0c2HMHaute Matsiatra00001EBahamas#250c2RIRagged Island00001FGuatemala#010c2AVAlta Verapaz000022Moldova#520c2LAL&#259;pu&#351;na00001AVenezuela#010c2ZAmazonas000019NewWorld#490c2KMComoros00001FPuertoRico#670c2HOHormigueros00001AAlgeria#DZ.BS0c2BSBiskra000023Burma#MM.MD0c2MDMandalay Division000018Jordan#JO.IR0c2IRIrbid00001FMacedonia#MK.VA0c2VAValandovo000027Philippines#PH.SS0c2SSSurigao del Sur000017Niger#NE.DF0c2DFDiffa000019China2#CN.XZ0c2XZXizang000025CoteDivoire#CI.BS0c2BSBas-Sassandra000018China2#CN.HE0c2HEHenan000022Madagascar#MG.AS0c2ASAntsiranana00001CEurope2#EU.PT0c2PTPortugal00001DVirginia#1910c2WSWashington00001BColorado#0230c2CSCostilla00001CSouthDakota#0610c2HSHanson00001BAlabama#0390c2CVCovington000017Vermont#0090c2ESEssex00001BMissouri#1990c2SLScotland00001BCalifornia#1030c2TETehama000017Alaska#1000c2HAHaines000017Texas#2710c2KIEKinney00001BLouisiana#0150c2BOBossier00001AGeorgia#0790c2CDCrawford000028WorldwithCountries#1570c2NLNetherlands000018Minnesota#1310c2RIRice00001AKentucky#1150c2JOJohnson00001AMichigan#1250c2OKOakland000018Florida#0430c2GLGlades000019Spain#0100c2CTCatalonia00001AMississippi#0250c2CYClay000025Europewithcountries#0260c2MDMoldova00001BMalaysia#0120c2SLSelangor00001AArkansas#0150c2CRCarroll000018England#0110c2DUDurham00001DSouthAmerica#0030c2BRBrazil00001EWestVirginia#0430c2LILincoln00001BScotland#0290c2SHShetland00001ENewWorld#2020c2PRPuerto Rico000018Bahamas#260c2RCRum Cay000011USA#IA0c2IAIowa00001FGuatemala#020c2BVBaja Verapaz000016Moldova#530c2OROrhei000020Mozambique#010c2CDCabo Delgado000023Venezuela#020c2BAnzo&aacute;tegui000023USACentralRegion#550c2WIWisconsin000018Portugal#020c2AVAveiro00001FNewWorld#500c2CICote d Ivoire000019Algeria#DZ.BT0c2BTBatna000025Mauritania#MR.HG0c2HGHodh El Gharbi000029Philippines#PH.ST0c2STSurigao del Norte00001EEastTimor#TL.MT0c2MTManatuto00001BMacedonia#MK.BU0c2BUButel00001EMacedonia#MK.DA0c2DADebartsa000026Philippines#PH.AS0c2ASAgusan del Sur00001FPhilippines#PH.BI0c2BIBiliran00001CRussia#RU.KK0c2KKKhakassia000027EquatorialGuinea#GQ.CS0c2CSCentro Sur00001BQatar#QA.WA0c2WAAl Wakrah00002BIran#IR.KB0c2KBKohgiluyeh and Buyer Ahmed000029FranceDepartment#FR.HA0c2HAHautes Alpes00002AFalklandIsland#NA.FK0c2FKFalkland Island00001ACapeVerde#CV.PA0c2PAPaul00002ABrazilRegion#BR.NE0c2NENorth East Region000014Iowa#1170c2LULucas00001CWisconsin#0070c2BYBayfield000018Alaska#2820c2YAYakutat000017Texas#4530c2TRATravis00001CIndiana#0690c2HUHuntington00001ANewYork#0410c2HAHamilton00001FNorthCarolina#1090c2LILincoln00001DVirginia#0110c2APAppomattox000018Georgia#2610c2SUSumter000015Kansas#0630c2GOGove000022SouthCarolina#0350c2DODorchester000022Virginia#7350c2PQPoquoson (City)00001BIllinois#0990c2LSLa Salle000018Missouri#0190c2BOBoone000023WorldwithCountries#1580c2NONorway000023NorthDakota#0330c2GVGolden Valley000016Texas#0910c2COMComal000015Ohio#0530c2GAGallia000024Spain#0110c2CVCommunidad Valencian000017NewMexico#0250c2LELea000019Nebraska#0230c2BLButler000018Wyoming#0450c2WEWeston000024Europewithcountries#0270c2MCMonaco00001DMalaysia#0130c2TETerengganu000017England#0120c2ESEssex00001BTennessee#1130c2MDMadison00001CSouthAmerica#0040c2CLChile000020Scotland#0300c2STStirlingshire000021NewWorld#2030c2KYCayman Islands00001AOklahoma#0650c2JAJackson000029MadagascarRegions#MG.FI.HO0c2HOIhorombe000014World8#010c2ASAsia00001DBahamas#270c2SSSan Salvador000020Guatemala#030c2CMChimaltenango000017Moldova#540c2SOSoroca000018Mozambique#020c2GAGaza000017Venezuela#030c2CApure000020Chile#010c2VSValpara&iacute;so000016Portugal#030c2BEBeja000032NewWorld#510c2CDDemocratic Republic of the Congo00001BPuertoRico#690c2HUHumacao00001AAlgeria#DZ.BU0c2BUBouira00001EMacedonia#MK.UM0c2UMKumanovo000020Macedonia#MK.VC0c2VCVranestica00001CPhilippines#PH.SU0c2SUSulu000020Tanzania#TZ.PN0c2PNPemba North00001EHongKong#HK.KU0c2KUKwun Tong000029CoteDivoire#CI.VB0c2VBVallee du Bandama00001ALaos#LA.PH0c2PHPhongsali00001BMacedonia#MK.DB0c2DBDebar00001BRussia#RU.KL0c2KLKalmykia000019Uganda#UG.DO0c2DODokolo00001EMadagascar#MG.TL0c2TLToliara00001EVietnam#VN.KG0c2KGKien Giang000020Mauritius#MU.PL0c2PLPort Louis00001FVirginia#1930c2WEWestmoreland00001AColorado#0250c2CRCrowley00001DSouthDakota#0630c2HDHarding00001AAlabama#0410c2CWCrenshaw00001AVermont#0110c2FRFranklin000018Missouri#2010c2SCScott00001CCalifornia#1050c2TRTrinity000018Texas#2730c2KLEKleberg000019Louisiana#0170c2CACaddo000017Georgia#0810c2CPCrisp000023WorldwithCountries#1590c2PLPoland000018Minnesota#1330c2RCRock000019Kentucky#1170c2KEKenton000019Michigan#1270c2OAOceana000016Florida#0450c2GUGulf00001BSpain#0120c2EXExtremadura00001DMississippi#0270c2CMCoahoma000028Europewithcountries#0280c2MOMontenegro000019Arkansas#0170c2CHChicot000021England#0130c2GLGloucestershire00001FSouthAmerica#0050c2COColombia00001CWestVirginia#0450c2LOLogan00001DScotland#0310c2SUSutherland000016World8#020c2EUEurope00001CBahamas#280c2SBSouth Abaco00001DGuatemala#040c2CQChiquimula000018Moldova#550c2TITighina00001DMozambique#030c2INInhambane000018Venezuela#040c2DAragua000045Chile#020c2AIAis&eacute;n del General Carlos Iba&ntilde;ezdel Campo000017Portugal#040c2BRBraga00001ANewWorld#520c2DJDjibouti000021Burma#MM.MG0c2MGMagway Division000018Jordan#JO.KA0c2KAKarak000021Macedonia#MK.VD0c2VDKisela Voda000017Bhutan#BT.GA0c2GAGasa000025CentralAmerica2#CE.GT0c2GTGuatemala00001EPhilippines#PH.AU0c2AUAurora000020Philippines#PH.BK0c2BKBukidnon000021Russia#RU.KM0c2KMKhantia-Mansia000020Madagascar#MG.TM0c2TMToamasina00001BLibya#LY.KF0c2KFAl Kufrah00001ACameroon#CM.OU0c2OUOuest00001AIran#IR.KD0c2KDKordestan000028FranceDepartment#FR.HC0c2HCHaute Corse00001DVietnam#VN.KH0c2KHKhanh Hoa00001CSyria#SY.HA0c2HAAl Hasakah000023Madagascar#MG.AV0c2AVAntananarivo000039DemocraticRepublicoftheCongo#CD.KC0c2KCKasai Occidental00001DKyrgyzstan#KG.BA0c2BABatken00001COklahoma#0670c2JEJefferson000013Iowa#1190c2LYLyon000017Asia3#0470c2VNVietnam000019Wisconsin#0090c2BRBrown000018Texas#4550c2TRITrinity000019Indiana#0710c2JAJackson00001ANewYork#0430c2HEHerkimer000020NorthCarolina#1110c2MDMcDowell00001CVirginia#0130c2ARArlington000018Georgia#2630c2TBTalbot000017Kansas#0650c2GHGraham000021SouthCarolina#0370c2EDEdgefield00001BIllinois#1010c2LWLawrence00001BMissouri#0210c2BCBuchanan000025WorldwithCountries#1600c2PTPortugal000021NorthDakota#0350c2GFGrand Forks000019Texas#0930c2COAComanche000015Ohio#0550c2GEGeauga000017Spain#0130c2GAGalicia00001BNewMexico#0270c2LILincoln000017Nebraska#0250c2CACass000029Europewithcountries#0290c2NLNetherlands00001FMalaysia#0150c2KLKuala Lumpur00001BEngland#0140c2HAHampshire00001ATennessee#1150c2MRMarion00001ESouthAmerica#0060c2ECEcuador00001FScotland#0320c2WEWest Lothian000016World8#030c2AFAfrica00001DBahamas#290c2SNSouth Andros00002FWorldwithCountries#010c2AGAntigua and Barbuda000012USA#ID0c2IDIdaho00001EGuatemala#050c2PREl Progreso000018Moldova#560c2UNUngheni00001AMozambique#040c2MPMaputo000019Venezuela#050c2EBarinas00001AChile#030c2ANAntofagasta000021Portugal#050c2BABragan&ccedil;a000017NewWorld#530c2EGEgypt000023Australia2#SA0c2SASouth Australia00001FBarbados#010c2CCChrist Church00001BPuertoRico#710c2ISIsabela000028PolandCounties#PL.MZ.OM0c2MOMOstroleka00001DLiberia#LR.GK0c2GKGrand Kru00001BMacedonia#MK.VE0c2VEVeles000025Sudan#SD.WB0c2WBWest Bahr Al Ghazal00001BYemen#YE.MR0c2MRAl Mahrah00001CPhilippines#PH.CB0c2CBCebu00001EGabon#GA.MO0c2MOMoyen-Ogooue00001ERussia#RU.KN0c2KNKaliningrad00001BChina2#CN.ZJ0c2ZJZhejiang000022FranceDepartment#FR.YO0c2YOYonne00001EGuinea#GN.LA0c2LALab&eacute;000018China2#CN.GS0c2GSGansu000017Iran#IR.KE0c2KEKerman00002BFranceDepartment#FR.HD0c2HDHauts-de-Seine00001EPakistan#PK.IS0c2ISIslamabad00001DTurkmenistan#TM.MA0c2MAMary00001FEurope2#EU.RD0c2RDRhodes (Gr)000017Virginia#1950c2WIWise000019Colorado#0270c2CUCuster00001CSouthDakota#0650c2HGHughes000019Alabama#0430c2CUCullman00001CVermont#0130c2GIGrand Isle00001AMissouri#2030c2SNShannon00001BCalifornia#1070c2TUTulare000015Texas#2750c2KNOKnox00001DLouisiana#0190c2CLCalcasieu000016Georgia#0830c2DADade000024WorldwithCountries#1610c2RORomania00001AMinnesota#1350c2RORoseau000018Kentucky#1190c2KNKnott000019Michigan#1290c2OGOgemaw00001AFlorida#0470c2HTHamilton000018Spain#0140c2LALa Rioja00001ENewMexico#0280c2LALos Alamos00001CMississippi#0290c2CPCopiah000024Europewithcountries#0300c2NONorway000019Malaysia#0160c2LALabuan000018Arkansas#0190c2CLClark00001FEngland#0150c2HEHerefordshire000027SouthAmerica#0070c2FKFalkland Islands00001FWestVirginia#0470c2MDMcDowell00001EScotland#0330c2WIWigtonshire00001DWorld8#040c2NANorth America000020Bahamas#300c2SESouth Eleuthera000023WorldwithCountries#020c2BSBahamas00001CGuatemala#060c2ESEscuintla00001AMozambique#050c2SOSofala000020Venezuela#060c2FBol&iacute;var00001FChile#040c2ARAraucan&iacute;a000020Portugal#060c2CBCastelo Branco000023NewWorld#540c2GQEquatorial Guinea00001EBarbados#020c2ANSaint Andrew000017Fiji#FJ.NO.BU0c2BUBua00001EFiji#FJ.NO.CK0c2CKCakaudrova000019Laos#LA.OU0c2OUOudomxai00001DMacedonia#MK.DE0c2DEDolneni000017Sudan#SD.EB0c2EBLakes000019Serbia#RS.MR0c2MRMorava000017Russia#RU.KO0c2KOKomi000024FranceDepartment#FR.HE0c2HEHerault000025Cambodia#KH.OM0c2OMBanteay Meanchey000019Tonga#TO.HA0c2HAHa'apai00001BOklahoma#0690c2JOJohnston000016Iowa#1210c2MAMadison000016Asia3#0490c2TWTaiwan00001BWisconsin#0110c2BUBuffalo000016Texas#4570c2TYLTyler000018Indiana#0730c2JSJasper00001BNewYork#0450c2JEJefferson00001DNorthCarolina#1130c2MAMacon00001AVirginia#0150c2AUAugusta00001CGeorgia#2650c2TATaliaferro000016Kansas#0670c2GTGrant000021SouthCarolina#0390c2FAFairfield000016Illinois#1030c2LELee000019Missouri#0230c2BUButler000027WorldwithCountries#1620c2SMSan Marino00001BNorthDakota#0370c2GRGrant000017Texas#0950c2CCHConcho000015Ohio#0570c2GRGreene000016Spain#0150c2MAMadrid000018NewMexico#0290c2LULuna000018Nebraska#0270c2CECedar000017Hawaii#0010c2HAHawaii000024Europewithcountries#0310c2PLPoland00001CMalaysia#0170c2PUPutrajaya00001FEngland#0160c2HRHertfordshire00001CTennessee#1170c2MSMarshall000024SouthAmerica#0080c2GFFrench Guiana00001DWorld8#050c2SASouth America00001EBahamas#310c2SWSpanish Wells000024WorldwithCountries#030c2BBBarbados00001CGuatemala#070c2GUGuatemala00001BMozambique#060c2NANampula00001AVenezuela#070c2GCarabobo000016Chile#050c2ATAtacama000019Portugal#070c2COCoimbra000019NewWorld#550c2EREritrea00001EBarbados#030c2GESaint George00001APuertoRico#730c2JYJayuya000029NewBrunswick#CA.NB.FC0c2FCFundy Coastal00001FAlgeria#DZ.CO0c2COConstantine00001DSudan#SD.WD0c2WDWest Darfur000019Gabon#GA.NG0c2NGNgounie000020CoteDivoire#CI.DE0c2DEDenguele00001BChina2#CN.HK0c2HKHongKong00001BVietnam#VN.LA0c2LALong An000021Pakistan#PK.JK0c2JKAzad Kashmir000024TrinidadandTobago#TT.MA0c2MAMayaro000020SaudiArabia#SA.QS0c2QSAl Qasim000020SaudiArabia#SA.RI0c2RIAr Riyad000019Asia3#0500c2HKHong Kong000018Virginia#1970c2WYWythe000018Colorado#0290c2DEDelta000020SouthDakota#0670c2HTHutchinson000016Alabama#0450c2DADale00001AVermont#0150c2LALamoille000019Missouri#2050c2SHShelby00001DCalifornia#1090c2TOTuolumne000016Texas#2770c2LAMLamar00001CLouisiana#0210c2CDCaldwell000024Virginia#7400c2PMPortsmouth (City)000018Georgia#0850c2DWDawson000023WorldwithCountries#1630c2CSSerbia00001DMinnesota#1370c2SLSt. Louis000017Kentucky#1210c2KOKnox00001CMichigan#1310c2ONOntonagon000018Florida#0490c2HAHardee000017Spain#0160c2MEMelilla00001FMississippi#0310c2CGCovington000026Europewithcountries#0320c2PTPortugal000017Arkansas#0210c2CYClay00001DSouthAmerica#0090c2GYGuyana00001DWestVirginia#0490c2MAMarion000022NewCaledonia#NC.SU.LF0c2LFLa Foa000028Saskatchewan#CA.SK.NR0c2NRNorth Region00001FWorld8#060c2CACentral America000022Bahamas#320c2WBWest Grand Bahama000022WorldwithCountries#040c2BZBelize000020Guatemala#080c2HUHuehuetenango00001AMozambique#070c2NINiassa000019Venezuela#080c2HCojedes000024Chile#060c2BIB&iacute;o-B&iacute;o00001EPortugal#080c2EV&Eacute;vora00001ANewWorld#560c2ETEthiopia00001DBarbados#040c2JMSaint James000025PolandCounties#PL.WP.KM0c2WKMKalisz000021Morocco#MA.FB0c2FBFes-Boulemane00001FMacedonia#MK.VH0c2VHVrapciste000020Sudan#SD.WE0c2WEWest Equatoria00001DBhutan#BT.GE0c2GEGeylegphug000031CentralAfricanRepublic#CF.MP0c2MPOmbella-M'Poko000024CentralAmerica2#CE.HN0c2HNHonduras000020Tanzania#TZ.PS0c2PSPemba South00001DPhilippines#PH.BO0c2BOBohol000019Malawi#MW.RU0c2RURumphi00001CRussia#RU.KQ0c2KQKamchatka00001BGuinea#GN.KN0c2KNKoundara000023Kuwait#KW.MU0c2MUMubarak Al Kabir00001FChina2#CN.HL0c2HLHeilongjiang00002AFranceDepartment#FR.HG0c2HGHaute Garonne00001BNigeria#NG.ZA0c2ZAZamfara000019Togo#TG.MA0c2MAMaritime000016Oklahoma#0710c2KAKay000016Iowa#1230c2MHMahaska000015Asia3#0510c2MOMacau00001BWisconsin#0130c2BNBurnett000017Texas#4590c2UPSUpshur000015Indiana#0750c2JYJay000017NewYork#0470c2KIKings00001FNorthCarolina#1150c2MSMadison000017Virginia#0170c2BABath00001AGeorgia#2670c2TTTattnall000015Kansas#0690c2GYGray000020SouthCarolina#0410c2FLFlorence00001DIllinois#1050c2LILivingston00001BMissouri#0250c2CACaldwell000025WorldwithCountries#1640c2SKSlovakia00001CNorthDakota#0390c2GNGriggs000016Texas#0970c2CKECooke000027Virginia#5600c2CFClifton Forge (City)000017Ohio#0590c2GUGuernsey000016Spain#0170c2MUMurcia00001CNewMexico#0310c2MKMcKinley000018Nebraska#0290c2CHChase000019Hawaii#0030c2HOHonolulu000025Europewithcountries#0330c2RORomania000016England#0180c2KEKent000019Tennessee#1190c2MUMaury00001FSouthAmerica#0100c2PYParaguay000017World8#070c2OCOceania000022WorldwithCountries#050c2CACanada000019Guatemala#090c2IZIzabal000018Mozambique#080c2TETete00001FVenezuela#090c2YDelta Amacuro000017Chile#070c2COCoquimbo000016Portugal#090c2FAFaro000017NewWorld#570c2GAGabon00001DTurkey#020c2ADAd&#305;yaman00001CBarbados#050c2JNSaint John000025PuertoRico#750c2JDJuana D&iacute;az000025MarshallIsland#MH.MH.NK0c2NKNamorik000020Sudan#SD.EE0c2EEEast Equatoria00001CGuinea#GN.KO0c2KOKouroussa000021Guinea#GN.LE0c2LEL&eacute;louma00001BLibya#LY.JU0c2JUAl Jufrah000019Malawi#MW.BA0c2BABalaka00001FBotswana#BW.NE0c2NENorth East000027Singapore#SG.CS0c2CSCentral Singapore00001DBurkinaFaso#BF.YG0c2YGYagha000017Virginia#1990c2YOYork000019Colorado#0310c2DNDenver00001CMontana#0010c2BEBeaverhead00001ASouthDakota#0690c2HYHyde000018Alabama#0470c2DLDallas000018Vermont#0170c2OROrange00001BMissouri#2070c2SDStoddard00001CCalifornia#1110c2VEVentura000015Texas#2790c2LABLamb00001BLouisiana#0230c2CMCameron000019Georgia#0870c2DEDecatur000025WorldwithCountries#1650c2SISlovenia000019Minnesota#1390c2SCScott000018Kentucky#1230c2LALarue00001AMichigan#1330c2OEOsceola000018Florida#0510c2HEHendry000017Spain#0180c2NANavarra00001CMississippi#0330c2DEDeSoto000028Europewithcountries#0340c2SMSan Marino00001BArkansas#0230c2CBCleburne00001CEngland#0190c2LALancashire00001BSouthAmerica#0110c2PEPeru00001FWestVirginia#0510c2MRMarshall00001BWorld8#080c2MEMiddle East000026WorldwithCountries#060c2CRCosta Rica000019Guatemala#100c2JAJalapa000020Azerbaijan#010c2ARAb&#351;eron00001CMozambique#090c2ZMZambezia000018Chile#080c2LIO'Higgins000017NewWorld#580c2GHGhana00001ETurkey#030c2AFAfyonkarahisar00001EBarbados#060c2JSSaint Joseph000018Bahrain#010c2CACapital000024PolandCounties#PL.WP.KO0c2WKOKonin000025PolandCounties#PL.WP.LE0c2WLELeszno000025Uzbekistan#UZ.QR0c2QRKarakalpakstan00001EBurkinaFaso#BF.GG0c2GGGnagna00001CLiberia#LR.GP0c2GPGbarpolu00001FMacedonia#MK.VJ0c2VJBogovinje00001AZambia#ZM.LP0c2LPLuapula00001EPhilippines#PH.TR0c2TRTarlac00001BYemen#YE.MW0c2MWMl Mahwit000023Macedonia#MK.CS0c2CSCucer Sandevo00001FPhilippines#PH.CG0c2CGCagayan000018Russia#RU.KS0c2KSKursk00002ACoteDivoire#CI.DH0c2DHDix-Huit Montagnes000021China2#CN.GX0c2GXGuangxi Zhuang000018China2#CN.HN0c2HNHunan00001FIran#IR.KJ0c2KJSouth Khorasan00001CVietnam#VN.LD0c2LDLam Dong00001BCapeVerde#CV.PI0c2PIPraia00001DOklahoma#0730c2KIKingfisher000015Iowa#1250c2MRMarion00001BWisconsin#0150c2CACalumet00001EAlaska#2900c2YKYukon-Koyukuk000016Texas#4610c2UPTUpton00001BIndiana#0770c2JEJefferson000017NewYork#0490c2LELewis00001ENorthCarolina#1170c2MTMartin00001AVirginia#0190c2BEBedford000018Georgia#2690c2TYTaylor000018Kansas#0710c2GLGreeley000022SouthCarolina#0430c2GEGeorgetown000018Illinois#1070c2LOLogan00001BMissouri#0270c2CWCallaway000022WorldwithCountries#1660c2ESSpain00001FNorthDakota#0410c2HEHettinger000018Texas#0990c2CRYCoryell000017Ohio#0610c2HAHamilton00002BSpain#0190c2PAPais Vasco (Basque Country)000018NewMexico#0330c2MOMora000019Nebraska#0310c2CRCherry000018Hawaii#0050c2KAKalawao000024Europewithcountries#0350c2CSSerbia000020England#0200c2LELeicestershire000019Tennessee#1210c2MIMeigs00001FSouthAmerica#0120c2SRSuriname000020WorldwithCountries#070c2CUCuba00001AGuatemala#110c2JUJutiapa000026Azerbaijan#020c2ACA&#287;cab&#601;di00001AMozambique#100c2MNManica00001FVenezuela#110c2IFalc&oacute;n000018Chile#090c2LLLos Lagos000018Portugal#110c2GUGuarda000018NewWorld#590c2GNGuinea00001ETurkey#040c2AGA&#287;r&#305;00001CBarbados#070c2LUSaint Lucy00001APuertoRico#770c2JCJuncos000018Bahrain#020c2CECentral000024PolandCounties#PL.PD.LM0c2PLMLomza00001CPanama#PA.SB0c2SBKuna Yala000017Sudan#SD.WH0c2WHUnity00001BRussia#RU.KT0c2KTKostroma000018Tunisia#TN.SF0c2SFSfax00001EOman#OM.SH0c2SHAsh Sharqiyah000024Singapore#SG.EA0c2EAEast Singapore000021Cambodia#KH.PH0c2PHPreah Vihear00001CGhana#GH.UE0c2UEUpper East00001AColorado#0330c2DODolores00001AMontana#0030c2BHBig Horn00001DSouthDakota#0710c2JAJackson000018Alabama#0490c2DEDekalb00001AAsia#0010c2AFAfghanistan000019Vermont#0190c2OLOrleans000018Missouri#2090c2STStone000019California#1130c2YOYolo000017Alaska#1100c2JUJuneau000019Texas#2810c2LAPLampasas00001DLouisiana#0250c2CTCatahoula000018Georgia#0890c2DKDeKalb000023WorldwithCountries#1670c2SESweden00001DMinnesota#1410c2SHSherburne000019Kentucky#1250c2LULaurel000019Michigan#1350c2OCOscoda00001AFlorida#0530c2HNHernando00001DMississippi#0350c2FOForrest00001CPennsylvania#0010c2ADAdams000026Europewithcountries#0360c2SKSlovakia00001CArkansas#0250c2CVCleveland00001EEngland#0210c2LILincolnshire00001ESouthAmerica#0130c2UYUruguay00001CWestVirginia#0530c2MSMason000027Manitoba#CA.MB.NR0c2NRNorthern Region000019Bahrain#030c2MUMuharraq000024WorldwithCountries#080c2DMDominica00001FGuatemala#120c2PEPet&eacute;n00001EAzerbaijan#030c2AMA&#287;dam000020Mozambique#110c2MTMaputo(City)000019Venezuela#120c2JGuarico000037Chile#100c2MAMagallanes y la Ant&aacute;rtica Chilena00001FNewWorld#600c2GWGuinea-Bissau000016Turkey#050c2AMAmasya00001FBarbados#080c2MISaint Michael000026PolandCounties#PL.PK.RM0c2PRMRzeszow00001ANamibia#NA.HA0c2HAHardap00001AAlgeria#DZ.DJ0c2DJDjelfa00001BBurma#MM.MO0c2MOMon State00001EMacedonia#MK.VL0c2VLVasilevo000021Philippines#PH.TT0c2TTTawi-Tawi00001ATanzania#TZ.PW0c2PWPwani000022Macedonia#MK.DK0c2DKDemir Kapija00001FPhilippines#PH.BS0c2BSBasilan000019Russia#RU.KU0c2KUKurgan000025FranceDepartment#FR.YV0c2YVYvelines00001AChina2#CN.GZ0c2GZGuizhou000018Nigeria#NG.YO0c2YOYobe000016Syria#SY.HI0c2HIHoms000025BrazilRegion#BR.NO0c2NONorth Region000018Oklahoma#0750c2KOKiowa000017Iowa#1270c2MSMarshall00001CWisconsin#0170c2CHChippewa000017Texas#4630c2UVAUvalde000016Asia#0020c2AMArmenia00001AIndiana#0790c2JNJennings00001CNewYork#0510c2LILivingston000023NorthCarolina#1190c2MKMecklenburg000018Virginia#0210c2BLBland000019Georgia#2710c2TFTelfair00001AKansas#0730c2GWGreenwood000022SouthCarolina#0450c2GRGreenville00001CIllinois#1090c2MUMcDonough000019Missouri#0290c2CMCamden000028WorldwithCountries#1680c2CHSwitzerland00001CNorthDakota#0430c2KIKidder000017Texas#1010c2COTCottle000016Ohio#0630c2HNHancock000019NewMexico#0350c2OTOtero00001BNebraska#0330c2CYCheyenne000016Hawaii#0070c2KUKauai000026Europewithcountries#0370c2SLSlovenia000018England#0220c2LOLondon00001ATennessee#1230c2MOMonroe000020SouthAmerica#0140c2VEVenezuela000019Bahrain#040c2NONorthern00002AWorldwithCountries#090c2DODominican Rep.000015USA#IL0c2ILIllinois000021Guatemala#130c2QZQuetzaltenango000023Azerbaijan#040c2ASA&#287;da&#351;000016Venezuela#130c2KLara000014Chile#110c2MLMaule000022USASouthWestRegion#320c2NVNevada000018Portugal#130c2LELeiria000017NewWorld#610c2KEKenya00001DBarbados#090c2PESaint Peter000019PuertoRico#790c2LJLajas000019Nigeria#NG.GO0c2GOGombe000020Uzbekistan#UZ.SA0c2SASamarkand000019Zambia#ZM.LS0c2LSLusaka00001DMacedonia#MK.DL0c2DLDelcevo000020Philippines#PH.BT0c2BTBatangas000018Russia#RU.KV0c2KVKirov00001EGuinea#GN.KS0c2KSKissidougou000028FranceDepartment#FR.HL0c2HLHaute Loire00001AColorado#0350c2DUDouglas000018Montana#0050c2BLBlaine00001DSouthDakota#0730c2JEJerauld000018Alabama#0510c2ELElmore000019Asia#0030c2AZAzerbaijan000019Vermont#0210c2RURutland00001BMissouri#2110c2SUSullivan000019California#1150c2YUYuba000019Texas#2830c2LASLa Salle00001DLouisiana#0270c2CBClaiborne000017Georgia#0910c2DODodge000024WorldwithCountries#1690c2UAUkraine00001AMinnesota#1430c2SBSibley00001BKentucky#1270c2LWLawrence000019Michigan#1370c2OSOtsego00001BFlorida#0550c2HLHighlands00001EMississippi#0370c2FRFranklin000020Pennsylvania#0030c2ALAllegheny000023Europewithcountries#0380c2ESSpain00001BArkansas#0270c2CMColumbia00001DWestVirginia#0550c2MEMercer000019Bahrain#050c2SOSouthern000027WorldwithCountries#100c2SVEl Salvador000020Guatemala#140c2QCQuich&eacute;000020Azerbaijan#050c2AFA&#287;stafa000018Venezuela#140c2LMerida00002BChile#120c2RMSantiago Metropolitan Region000018Portugal#140c2LILisboa000019NewWorld#620c2LSLesotho000017Turkey#070c2ALAntalya00001EBarbados#100c2PHSaint Philip000023WorldwithCountries#110c2GDGrenada000014USA#IN0c2INIndiana00001DGuatemala#150c2RERetalhuleu00001DNewZealand#E70c2AUKAuckland00001DAzerbaijan#060c2AUA&#287;su000019Venezuela#150c2MMiranda00001EChile#130c2TATarapac&aacute;000019NewWorld#630c2LILiberia000016Turkey#080c2AVArtvin00001EBarbados#110c2THSaint Thomas000019PuertoRico#810c2LRLares000023PolandCounties#PL.LD.LO0c2LLOLodz00001DAlgeria#DZ.EB0c2EBEl Bayadh00001FSudan#SD.WK0c2WKWest Kurdufan000015Bhutan#BT.HA0c2HAHa000021CentralAmerica2#CE.HT0c2HTHaiti000021Macedonia#MK.DM0c2DMDemir Hisar00001FPhilippines#PH.BU0c2BUBulacan000017Niger#NE.DS0c2DSDosso00001ERussia#RU.MC0c2MCMoscow City000024Singapore#SG.WE0c2WEWest Singapore000028FranceDepartment#FR.HM0c2HMHaute Marne00001CKyrgyzstan#KG.TL0c2TLTalas000025Mauritius#MU.PW0c2PWPlaines Wilhems00001AOklahoma#0770c2LALatimer000014Iowa#1290c2MIMills000019Wisconsin#0190c2CLClark00001ATexas#4650c2VAVVal Verde000019Indiana#0810c2JOJohnson000019NewYork#0530c2MAMadison000020NorthCarolina#1210c2MIMitchell00001CVirginia#0230c2BOBotetourt000019Georgia#2730c2TLTerrell000019Kansas#0750c2HMHamilton000021SouthCarolina#0470c2GWGreenwood00001AIllinois#1110c2MHMcHenry000021Missouri#0310c2CGCape Girardeau00002BWorldwithCountries#1700c2UKUnited Kingdom00001DNorthDakota#0450c2LMLaMoure000016Texas#1030c2CRACrane000015Ohio#0650c2HRHardin000018NewMexico#0370c2QUQuay000017Nebraska#0350c2CLClay000015Hawaii#0090c2MAMaui000024Europewithcountries#0390c2SESweden000019England#0240c2NONorfolk00001ETennessee#1250c2MGMontgomery000025WorldwithCountries#120c2GTGuatemala000026Guatemala#160c2SASacatep&eacute;quez000022NewZealand#E80c2BOPBay of Plenty000025Azerbaijan#070c2ABAli Bayraml&#305;000019Venezuela#160c2NMonagas000025USASouthWestRegion#350c2NMNewMexico00001CPortugal#160c2PAPortalegre000017NewWorld#640c2LRLibya00001ATurkey#090c2AYAyd&#305;n000024PolandCounties#PL.MZ.PM0c2MPMPlock000036DemocraticRepublicoftheCongo#CD.KN0c2KNKinshasa City00002FCentralAfricanRepublic#CF.NM0c2NMNana-Mambere000029Philippines#PH.CL0c2CLCompostela Valley000019Malawi#MW.TH0c2THThyolo00001ERussia#RU.KX0c2KXKrasnoyarsk00001CRussia#RU.LN0c2LNLeningrad000028FranceDepartment#FR.HN0c2HNHaute Saone00001CVietnam#VN.LI0c2LILai Chau00001BOman#OM.BA0c2BAAl Batinah000018Syria#SY.HL0c2HLAleppo00001BCambodia#KH.PL0c2PLPailin000020CapeVerde#CV.PN0c2PNPorto Novo000018Colorado#0370c2EAEagle00001CMontana#0070c2BRBroadwater00001BSouthDakota#0750c2JOJones00001AAlabama#0530c2ESEscambia000019Asia#0050c2BDBangladesh00001CVermont#0230c2WAWashington000018Missouri#2130c2TATaney000017Texas#2850c2LAVLavaca00001DLouisiana#0290c2COConcordia000017Georgia#0930c2DLDooly000029WorldwithCountries#1710c2VAVatican City00001BMinnesota#1450c2SAStearns000016Kentucky#1290c2LELee000019Michigan#1390c2OTOttawa00001EFlorida#0570c2HBHillsborough00001CMississippi#0390c2GOGeorge000020Pennsylvania#0050c2ARArmstrong000029Europewithcountries#0400c2CHSwitzerland000019Arkansas#0290c2CWConway000022England#0250c2NRNorthamptonshire00001EWestVirginia#0570c2MIMineral000025NewCaledonia#NC.SU.MD0c2MDMont-Dore000028NewCaledonia#NC.IL.OV0c2OVOuv&eacute;a000025PuertoRico#830c2LMLas Mar&iacute;as000021WorldwithCountries#130c2HTHaiti00001DGuatemala#170c2SMSan Marcos00001FNewZealand#E90c2CANCanterbury00001AAzerbaijan#080c2AAAstara00001FVenezuela#170c2ONueva Esparta000017Portugal#170c2POPorto00001CNewWorld#650c2MSMadagascar00001ETurkey#100c2BKBal&#305;kesir000027NovaScotia#CA.NS.ST0c2STSunrise Trail000025SaudiArabia#SA.SH0c2SHAsh Sharqiyah00001BEurope2#EU.AD0c2ADAndorra00001EBurkinaFaso#BF.GM0c2GMGourma000024PapuaNewGuinea#PG.MB0c2MBMilne Bay00001DGuineaBissau#GW.GA0c2GAGabu000026EquatorialGuinea#GQ.WN0c2WNWele Nzas000020Philippines#PH.CM0c2CMCamiguin000029Tibet#TI.XP0c2XPXigaz&ecirc; Prefecture00001BRussia#RU.ME0c2MEMariy-El00001DTunisia#TN.TA0c2TATataouine00001BVietnam#VN.KT0c2KTKon Tum000016Syria#SY.HM0c2HMHama00001BEurope2#EU.RO0c2RORomania00001AEurope2#EU.SE0c2SESweden00001BOklahoma#0790c2LFLe Flore000017Iowa#1310c2MTMitchell00001CWisconsin#0210c2COColumbia00001ATexas#4670c2VAZVan Zandt000015Asia#0060c2BTBhutan000016Indiana#0830c2KNKnox000018NewYork#0550c2MNMonroe000022NorthCarolina#1230c2MGMontgomery00001CVirginia#0250c2BRBrunswick000018Georgia#2750c2THThomas000017Kansas#0770c2HPHarper00001FSouthCarolina#0490c2HAHampton000019Illinois#1130c2MLMcLean00001AMissouri#0330c2CRCarroll000023WorldwithCountries#1720c2CYCyprus00001BNorthDakota#0470c2LOLogan000019Texas#1050c2CKTCrockett000017Ohio#0670c2HIHarrison00001ENewMexico#0390c2RARio Arriba000019Nebraska#0370c2COColfax000025Europewithcountries#0410c2UAUkraine000020England#0260c2NTNorthumberland000019Tennessee#1270c2MEMoore000028NewCaledonia#NC.NO.BE0c2BEB&eacute;lep000024WorldwithCountries#140c2HNHonduras00001DGuatemala#180c2SRSanta Rosa000018Azerbaijan#090c2BABaki00001CVenezuela#180c2PPortuguesa000021Portugal#180c2SASantar&eacute;m000018NewWorld#660c2MWMalawi000017Turkey#110c2BCBilecik00001CSudan#SD.WN0c2WNWhite Nile000021Macedonia#MK.CZ0c2CZCentar Zupa000027Philippines#PH.CN0c2CNCamarines Norte000019Serbia#RS.NS0c2NSNisava00001ARussia#RU.LP0c2LPLipetsk00001BTunisia#TN.SL0c2SLSiliana00001AGuinea#GN.MC0c2MCMacenta000020SolomonIsland#SB.IS0c2ISIsabel000018China2#CN.HU0c2HUHubei00001DTunisia#TN.BA0c2BABen Arous00002CFranceDepartment#FR.HP0c2HPHautes Pyrenees000017Syria#SY.ID0c2IDIdlib000024TrinidadandTobago#TT.NA0c2NANariva000019Colorado#0390c2ELElbert000018Montana#0090c2CACarbon00001FSouthDakota#0770c2KIKingsbury000018Alabama#0550c2ETEtowah000015Asia#0070c2BNBrunei000019Vermont#0250c2WIWindham000018Missouri#2150c2TETexas000014Texas#2870c2LEELee00001BLouisiana#0310c2DSDe Soto000021Virginia#7500c2RARadford (City)00001BGeorgia#0950c2DUDougherty000023WorldwithCountries#1730c2TKTurkey00001AMinnesota#1470c2SESteele000019Kentucky#1310c2LSLeslie00001FMichigan#1410c2PRPresque Isle000018Florida#0590c2HMHolmes00001CMississippi#0410c2GRGreene00001DPennsylvania#0070c2BEBeaver00002CEuropewithcountries#0420c2UKUnited Kingdom00001CArkansas#0310c2CICraighead000021England#0270c2NGNottinghamshire00001CWestVirginia#0590c2MNMingo00001FPuertoRico#850c2LPLas Piedras000023WorldwithCountries#150c2JMJamaica000020Guatemala#190c2SOSolol&aacute;00001DNewZealand#F10c2GISGisborne00001BAzerbaijan#100c2BLBalakan000017Venezuela#190c2RSucre000020Portugal#190c2SESet&uacute;bal000016NewWorld#670c2MLMali00001BTurkey#120c2BGBing&ouml;l000017Ghana#GH.TV0c2TVVolta000023Europe2#EU.AF0c2AFAland (Finland)00002CMorocco#MA.GB0c2GBGharb-Chrarda Beni Hssen00001DChad#TD.HD0c2HDHadjer-Lamis000021PapuaNewGuinea#PG.MD0c2MDMadang00001ARussia#RU.MG0c2MGMagadan00001BGuinea#GN.MD0c2MDMandiana00001BCambodia#KH.PO0c2POPursat00001AOklahoma#0810c2LILincoln000015Iowa#1330c2MOMonona00001CWisconsin#0230c2CRCrawford000019Texas#4690c2VICVictoria000016Asia#0080c2MMBurma (00001BIndiana#0850c2KOKosciusko00001CNewYork#0570c2MOMontgomery00001DNorthCarolina#1250c2MOMoore00001BVirginia#0270c2BUBuchanan000016Georgia#2770c2TITift000017Kansas#0790c2HVHarvey00001DSouthCarolina#0510c2HOHorry000018Illinois#1150c2MAMacon000019Missouri#0350c2CTCarter00001DNorthDakota#0490c2MHMcHenry000017Texas#1070c2CSBCrosby00002AVirginia#5700c2COColonial Heights (City)000014Ohio#0690c2HYHenry00001DNewMexico#0410c2RSRoosevelt000019Nebraska#0390c2CUCuming00002AEuropewithcountries#0430c2VAVatican City00001DEngland#0280c2OXOxfordshire00001ATennessee#1290c2MNMorgan000022WorldwithCountries#160c2MXMexico000020Guatemala#200c2SUSuchitepequez000020NewZealand#F20c2HKBHawke's Bay000020Egypt_346255#010c2ALAlexandria000019Azerbaijan#110c2BRBarda000019Venezuela#200c2STachira000022Portugal#200c2VCViana do Castelo00001CNewWorld#680c2MRMauritania000016Turkey#130c2BTBitlis000022MarshallIsland#MH.MH.NU0c2NUNamu000025NovaScotia#CA.NS.CB0c2CBCape Breton000037DemocraticRepublicoftheCongo#CD.KR0c2KRKasai Oriental000019Senegal#SN.MT0c2MTMatam000024Morocco#MA.GC0c2GCGrand Casablanca00001EMauritania#MR.IN0c2INInchiri00001DMacedonia#MK.DR0c2DRDrugovo00001DPhilippines#PH.CP0c2CPCapiz00001FGabon#GA.OI0c2OIOgooue-Ivindo000017Guinea#GN.LO0c2LOLola000020Swaziland#SZ.SH0c2SHShiselweni00001FIran#IR.KS0c2KSNorth Khorasan000026FranceDepartment#FR.HR0c2HRHaut Rhin00001FCambodia#KH.PP0c2PPPhnom Penh00001AColorado#0410c2EPEl Paso000018Montana#0110c2CRCarter00001ASouthDakota#0790c2LALake000019Alabama#0570c2FAFayette000017Asia#0090c2KHCambodia000019Vermont#0270c2WNWindsor000019Missouri#2170c2VEVernon000015Texas#2890c2LEOLeon000024Louisiana#0330c2EBEast Baton Rouge000019Georgia#0970c2DGDouglas000026WorldwithCountries#1750c2AUAustralia00001BMinnesota#1490c2STStevens00001AKentucky#1330c2LTLetcher00001CMichigan#1430c2RORoscommon00001EFlorida#0610c2IRIndian river00001DMississippi#0430c2GEGrenada00001EPennsylvania#0090c2BDBedford000024Europewithcountries#0440c2CYCyprus00001BArkansas#0330c2CFCrawford000021WestVirginia#0610c2MLMonongalia000020PuertoRico#870c2LZLo&iacute;za000025WorldwithCountries#170c2NINicaragua000025Guatemala#210c2TOTotonicap&aacute;n000026NewZealand#F30c2MWTManawatu-Wanganui00001BEgypt_346255#020c2ANAswan000021Azerbaijan#120c2BQBeyl&#601;qan00001CSanMarino#010c2ACAcquaviva00001AVenezuela#210c2TTrujillo00001BPortugal#210c2VRVila Real000019NewWorld#690c2MAMorocco000014Turkey#140c2BLBolu000033NorthWestTerritories#CA.NT.NC0c2NCNahanni Country00001FMacau#MO.MA.SZ0c2SZSao Lazaro000028SaoTomeandPrincipe#ST.CG0c2CGCantagalo00001DSaudiArabia#SA.TB0c2TBTabuk00001ASriLanka#LK.GL0c2GLGalle00001FSriLanka#LK.HB0c2HBHambantota000020SaudiArabia#SA.BA0c2BAAl Bahah00001ATanzania#TZ.RK0c2RKRukwa00001BLibya#LY.MB0c2MBAl Margab00001BMalawi#MW.BL0c2BLBlantyre00001ATunisia#TN.AN0c2ANAriana000029FranceDepartment#FR.HS0c2HSHaute Savoie000018Oklahoma#0830c2LOLogan000015Iowa#1350c2MNMonroe000018Wisconsin#0250c2DADane000017Texas#4710c2WAKWalker000014Asia#0100c2CNChina00001AIndiana#0870c2LALagrange000018NewYork#0590c2NANassau00001CNorthCarolina#1270c2NANash00001DVirginia#0290c2BCBuckingham000018Georgia#2790c2TMToombs000018Kansas#0810c2HSHaskell00001ESouthCarolina#0530c2JAJasper00001BIllinois#1170c2MPMacoupin000017Missouri#0370c2CSCass000021WorldwithCountries#1760c2FJFiji00001ENorthDakota#0510c2MIMcIntosh00001ATexas#1090c2CUBCulberson000017Ohio#0710c2HGHighland00001CNewMexico#0430c2SASandoval000019Nebraska#0410c2CSCuster000024Europewithcountries#0450c2TKTurkey00001CEngland#0300c2SHShropshire000019Tennessee#1310c2OBObion000026MadagascarRegions#MG.MA.SF0c2SFSofia000022WorldwithCountries#180c2PAPanama000019Guatemala#220c2ZAZacapa000020NewZealand#F40c2MBHMarlborough00001BEgypt_346255#030c2ATAsyut000022Azerbaijan#130c2BSBil&#601;suvar00001ESanMarino#020c2CHChiesanuova000019Venezuela#220c2UYaracuy000017Portugal#220c2VIViseu00001CNewWorld#700c2MZMozambique000016Turkey#150c2BDBurdur000030DemocraticRepublicoftheCongo#CD.KT0c2KTKatanga00001FUzbekistan#UZ.SI0c2SISirdaryo000025Morocco#MA.GE0c2GEGuelmim Es Semara000017Sudan#SD.WR0c2WRWarab00001ASamoa #WS.PA0c2PAPalauli000019Serbia#RS.PC0c2PCPcinja00001BVietnam#VN.LO0c2LOLao Cai00001EThailand#TH.KK0c2KKKhon Kaen00001DWestVirginia#0630c2MOMonroe00001EAustralia2#TAS0c2TASTasmania00001AColorado#0430c2FRFremont000019Montana#0130c2CSCascade00001ESouthDakota#0810c2LWLawrence00001AAlabama#0590c2FRFranklin000019Missouri#2190c2WAWarren000018Texas#2910c2LIBLiberty000020Louisiana#0350c2ECEast Carroll000017Georgia#0990c2EAEarly000025WorldwithCountries#1770c2KIKiribati000019Minnesota#1510c2SWSwift000018Kentucky#1350c2LILewis00001AMichigan#1450c2SASaginaw000019Florida#0630c2JSJackson00001DMississippi#0450c2HAHancock00001CPennsylvania#0110c2BRBerks000024Europewithcountries#0460c2RURussia00001DArkansas#0350c2CTCrittenden00001AEngland#0310c2SOSomerset000015Turkey#160c2BUBursa00001CPuertoRico#890c2LQLuquillo000031WorldwithCountries#190c2KNSt. Kitts &amp; Nevis00001BNewZealand#F50c2NSNNelson00001DEgypt_346255#040c2BHBeheira000026Azerbaijan#140c2CBC&#601;bray&#305;l00001CSanMarino#030c2DODomagnano000017Venezuela#230c2VZulia000019NewWorld#710c2NANamibia00001FBurkinaFaso#BF.YT0c2YTYatenga00001DMacedonia#MK.VV0c2VVVevcani000016Chad#TD.GR0c2GRGuera000025Philippines#PH.CS0c2CSCamarines Sur00001DGabon#GA.OL0c2OLOgooue-Lolo000019Serbia#RS.PD0c2PDDanube000020Iran#IR.KV0c2KVRazavi Khorasan00001CThailand#TH.KL0c2KLKalasin00001DThailand#TH.LB0c2LBLop Buri00001CEurope2#EU.SK0c2SKSlovakia00001AEurope2#EU.RU0c2RURussia00001DMauritius#MU.SA0c2SASavanne00001BTennessee#1330c2OVOverton000017Oklahoma#0850c2LVLove000019Iowa#1370c2MGMontgomery000019Wisconsin#0270c2DODodge000017Texas#4730c2WALWaller000019Asia#0120c2TPEast Timor000016Indiana#0890c2LKLake00001ANewYork#0610c2NYNew York000023NorthCarolina#1290c2NHNew Hanover00001BVirginia#0310c2CACampbell000017Georgia#2810c2TOTowns000019Kansas#0830c2HGHodgeman00001FSouthCarolina#0550c2KEKershaw00001AIllinois#1190c2MIMadison000018Missouri#0390c2CECedar00002DWorldwithCountries#1780c2MHMarshall Islands00001ENorthDakota#0530c2MKMcKenzie000017Texas#1110c2DALDallam000016Ohio#0730c2HOHocking00001CNewMexico#0450c2SJSan Juan000019Nebraska#0430c2DADakota000026Europewithcountries#0470c2SCScotland00001FEngland#0320c2STStaffordshire000022NewCaledonia#NC.NO.CA0c2CACanala000020Turkey#170c2CK&Ccedil;anakkale000025WorldwithCountries#200c2LCSt. Lucia00001ENewZealand#F60c2NTLNorthland00001FEgypt_346255#050c2BNBeni Suef000022Azerbaijan#150c2CLC&#601;lilabad00001ASanMarino#040c2FAFaetano000026Venezuela#240c2WDependencies Federal000017NewWorld#720c2NENiger00002AEurope2#EU.BA0c2BABosnia and Herzegovina00001FUzbekistan#UZ.TA0c2TATashkent000019Ghana#GH.CP0c2CPCentral00001ALesotho#LS.LE0c2LELeribe000021Panama#PA.BC0c2BCBocas del Toro00001CTanzania#TZ.SD0c2SDSingida000023Philippines#PH.CT0c2CTCatanduanes000021Gabon#GA.OM0c2OMOgooue-Maritime000018Serbia#RS.PE0c2PEPecki000029FranceDepartment#FR.HV0c2HVHaute Vienne00002BFranceDepartment#FR.IL0c2ILIndre et Loire00001CEurope2#EU.SL0c2SLSlovenia00001DWestVirginia#0650c2MGMorgan00001BColorado#0450c2GAGarfield00001AMontana#0150c2CHChouteau00001DSouthDakota#0830c2LILincoln000018Alabama#0610c2GEGeneva000016Asia#0130c2GEGeorgia00001DMissouri#2210c2WSWashington000020Alaska#1220c2KEKenai Peninsula00001ATexas#2930c2LIMLimestone000022Louisiana#0370c2EFEast Feliciana000018Georgia#1010c2ECEchols000027WorldwithCountries#1790c2FMMicronesia000018Minnesota#1530c2TOTodd00001AKentucky#1370c2LNLincoln00001CMichigan#1470c2SCSt. Clair00001BFlorida#0650c2JEJefferson00001EMississippi#0470c2HRHarrison00001CPennsylvania#0130c2BLBlair000025Europewithcountries#0480c2ENEngland000018Arkansas#0370c2CSCross000019England#0330c2SUSuffolk000019NewWorld#730c2NGNigeria000027USANorthEastRegion#090c2CTConnecticut000021PuertoRico#910c2MTManat&iacute;00003CWorldwithCountries#210c2VCSt. Vincent &amp; the Grenadines00001ANewZealand#F70c2OTAOtago00001BEgypt_346255#060c2CACairo00002BAzerbaijan#160c2DSDa&#351;k&#601;s&#601;n00001DSanMarino#050c2FIFiorentino000022Venezuela#250c2ADistrito Capital00001EEurope2#EU.SM0c2SMSan Marino000021Kyrgyzstan#KG.DA0c2DAJalal Abad00001BEurope2#EU.AL0c2ALAlbania000019Jordan#JO.MA0c2MAMafraq00001BRussia#RU.MM0c2MMMurmansk00001ATunisia#TN.SS0c2SSSousse000021Thailand#TH.KN0c2KNKanchanaburi000018England#0340c2SRSurrey000019Tennessee#1350c2PEPerry00001AOklahoma#0870c2MCMcClain000018Iowa#1390c2MUMuscatine000018Wisconsin#0290c2DRDoor000015Texas#4750c2WARWard000014Asia#0140c2INIndia00001AIndiana#0910c2LPLa Porte000019NewYork#0630c2NINiagara000023NorthCarolina#1310c2NTNorthampton00001BVirginia#0330c2CRCaroline00001AGeorgia#2830c2TETreutlen000018Kansas#0850c2JAJackson000021SouthCarolina#0570c2LALancaster000019Illinois#1210c2MSMarion00001BMissouri#0410c2CNChariton000022WorldwithCountries#1800c2NRNauru00001CNorthDakota#0550c2MLMcLean000017Texas#1130c2DASDallas000015Ohio#0750c2HLHolmes00001ENewMexico#0470c2SMSan Miguel000018Nebraska#0450c2DWDawes000023Europewithcountries#0490c2WAWales000034NewfoundlandandLabrador#CA.NF.AV0c2AVAvalon Region000018NewWorld#740c2RWRwanda00001CTurkey#190c2CM&Ccedil;orum000024USANorthEastRegion#100c2DEDelaware000031WorldwithCountries#220c2TTTrinidad &amp; Tobago00001ENewZealand#F80c2STLSouthland00001EEgypt_346255#070c2DADakahlia00002BAzerbaijan#170c2DVD&#601;v&#601;&ccedil;i000021SanMarino#060c2BMBorgo Maggiore000018Venezuela#260c2XVargas00001FBurkinaFaso#BF.ZM0c2ZMZondoma00001CSriLanka#LK.GQ0c2GQGampaha000019Somalia#SO.MU0c2MUMudug000017Nepal#NP.RA0c2RARapti000024Kiribati#KI.PI0c2PIPhoenix Islands00001EPhilippines#PH.CV0c2CVCavite000018Gabon#GA.NY0c2NYNyanga000020Lebanon#LE.NA0c2NAAn Nabatiyah000019Iran#IR.LO0c2LOLorestan000022FranceDepartment#FR.IN0c2INIndre00001CVietnam#VN.LS0c2LSLang Son000019Thailand#TH.LE0c2LELoei00002BEuropewithcountries#0500c2NINorth Ireland000019Arkansas#0390c2DADallas00001AEngland#0350c2ESE.Sussex00001FWestVirginia#0670c2NINicholas000019Colorado#0470c2GIGilpin000018Montana#0170c2CUCuster00001BSouthDakota#0850c2LYLyman000018Alabama#0630c2GRGreene000018Asia#0150c2IDIndonesia000018Missouri#2230c2WYWayne000019Texas#2950c2LIPLipscomb00001ELouisiana#0390c2EVEvangeline00001BGeorgia#1030c2EFEffingham000028WorldwithCountries#1810c2NZNew Zealand00001CMinnesota#1550c2TRTraverse00001DKentucky#1390c2LGLivingston00001DMichigan#1490c2SJSt. Joseph00001BFlorida#0670c2LYLafayette00001BMississippi#0490c2HIHinds00001FPennsylvania#0150c2BFBradford000021NewCaledonia#NC.NO.TO0c2TOTouho000027NewWorld#750c2STSao Tome and Principe000017Turkey#200c2DNDenizli000030USANorthEastRegion#110c2DCDistrict of Columbia00001BPuertoRico#930c2MRMaricao000029WorldwithCountries#230c2USUnited States00001DNewZealand#F90c2TKITaranaki00001EEgypt_346255#080c2DMDamietta00001FAzerbaijan#180c2FUF&uuml;zuli00001DSanMarino#070c2SMSan Marino00001DAsiaGeorgia#010c2ABAbkhazia00001ABelgium#010c2ANAntwerpen000016Mali#ML.KD0c2KDKidal000017Guinea#GN.ML0c2MLMali000018Tunisia#TN.BJ0c2BJBeja00001AIran#IR.KZ0c2KZKhuzestan000023Thailand#TH.KP0c2KPKamphaeng Phet000028Eritrea#ER.SK0c2SKSemenawi Keyih Bahri00001EEngland#0360c2WAWarwickshire00001BTennessee#1370c2PIPickett00001COklahoma#0890c2MTMcCurtain000016Iowa#1410c2OBO'Brien00001BWisconsin#0310c2DUDouglas00001BTexas#4770c2WASWashington000013Asia#0160c2IRIran00001AIndiana#0930c2LWLawrence000018NewYork#0650c2ONOneida00001ENorthCarolina#1330c2ONOnslow00001AVirginia#0350c2CLCarroll000017Georgia#2850c2TRTroup00001AKansas#0870c2JFJefferson00001FSouthCarolina#0590c2LULaurens00001BIllinois#1230c2MNMarshall00001CMissouri#0430c2CHChristian000022WorldwithCountries#1820c2PWPalau00001CNorthDakota#0570c2MEMercer000017Texas#1150c2DAWDawson000014Ohio#0770c2HUHuron00001CNewMexico#0490c2SFSanta Fe000019Nebraska#0470c2DSDawson000023NewCaledonia#NC.SU.MO0c2MOMoindou000026Manitoba#CA.MB.PM0c2PMPembina Region000019NewWorld#760c2SNSenegal00001FTurkey#210c2DYDiyarbak&#305;r000025WorldwithCountries#240c2GLGreenland00001CEgypt_346255#090c2FYFaiyum00002AAzerbaijan#190c2GDG&#601;d&#601;b&#601;y000019Ukraine#010c2CKCherkasy000020SanMarino#080c2MGMontegiardino00001BAsiaGeorgia#020c2AJAdjara000018Belgium#020c2HAHainaut00001BEurope2#EU.BE0c2BEBelgium00001BAlgeria#DZ.EO0c2EOEl Oued000019Jordan#JO.MD0c2MDMadaba000023CentralAmerica2#CE.JM0c2JMJamaica00001ETanzania#TZ.SH0c2SHShinyanga000034PapuaNewGuinea#PG.NC0c2NCNational Capital District00001EUzbekistan#UZ.AN0c2ANAndijon00001AHongKong#HK.NO0c2NONorth00001AMicronesia#FM.YA0c2YAYap000018Serbia#RS.PI0c2PIPirot000018Guinea#GN.MM0c2MMMamou00001ALibya#LY.MI0c2MIMisratah00001FBotswana#BW.NW0c2NWNorth West00001BVietnam#VN.NA0c2NANghe An00001CThailand#TH.LG0c2LGLampang000018Arkansas#0410c2DEDesha00001BWestVirginia#0690c2OHOhio000018Colorado#0490c2GRGrand000019Montana#0190c2DADaniels00001CSouthDakota#0870c2MCMcCook000016Alabama#0650c2HAHale00001FVirginia#0360c2CCCharles City00001AMissouri#2250c2WBWebster000015Utah#0010c2BVBeaver000019Texas#2970c2LIVLive Oak00001CLouisiana#0410c2FRFranklin000022Virginia#7600c2RIRichmond (City)000018Georgia#1050c2ELElbert00002DWorldwithCountries#1830c2PGPapua New Guinea00001BMinnesota#1570c2WBWabasha000018Kentucky#1410c2LOLogan00001AMichigan#1510c2SNSanilac000016Florida#0690c2LALake00001CMississippi#0510c2HOHolmes00001CPennsylvania#0170c2BUBucks000035NewfoundlandandLabrador#CA.NF.CE0c2CECentral Region00001BNewWorld#770c2SCSeycelles000016Turkey#220c2EDEdirne00001BPuertoRico#950c2MBMaunabo000020SaintLucia#010c2ARAnse-la-Raye000025WorldwithCountries#250c2ARArgentina00001CNewZealand#G10c2WKOWaikato00001DEgypt_346255#100c2GHGharbia000023Azerbaijan#200c2GAG&#601;nc&#601;00001AUkraine#020c2CHChernihiv00001DSanMarino#090c2SESerravalle00001AAsiaGeorgia#030c2GUGuria000016Belgium#030c2LILiege000022SouthAfrica#020c2NLKwaZulu-Natal000023Hungary#010c2BKB&aacute;cs-Kiskun00001ECambodia#KH.PY0c2PYPrey Veng000024CapeVerde#CV.RG0c2RGRibeira Grande00001DCameroon#CM.AD0c2ADAdamaoua00001EKazakhstan#KZ.ZM0c2ZMZhambyl00001DBurkinaFaso#BF.HO0c2HOHouet00001CSaudiArabia#SA.AS0c2ASAsir00002ECentralAfricanRepublic#CF.OP0c2OPOuham-Pende000020PapuaNewGuinea#PG.MN0c2MNManus00001ABurundi#BI.RT0c2RTRutana000026Sudan#SD.GD0c2GDAl Qadarif (Gedarif)000026Philippines#PH.DO0c2DODavao Oriental00001BRussia#RU.NG0c2NGNovgorod000019Libya#LY.MJ0c2MJAl Marj000018China2#CN.JL0c2JLJilin00001DVietnam#VN.NB0c2NBNinh Binh00001AThailand#TH.KR0c2KRKrabi00001BEngland#0380c2WIWiltshire000018Tennessee#1390c2POPolk000017France#0020c2ALAlsace00001BOklahoma#0910c2MLMcIntosh000016Iowa#1430c2OSOsceola000018Wisconsin#0330c2DNDunn000015Texas#4790c2WEBWebb000019Indiana#0950c2MAMadison00001ANewYork#0670c2OOOnondaga00001ENorthCarolina#1350c2OROrange00001CVirginia#0370c2CHCharlotte000018Georgia#2870c2TUTurner000017Kansas#0890c2JWJewell00001BSouthCarolina#0610c2LELee000018Illinois#1250c2MOMason000018Missouri#0450c2CKClark000022WorldwithCountries#1840c2WSSamoa00001CNorthDakota#0590c2MOMorton00001BTexas#1170c2DESDeaf Smith000023Virginia#5800c2CICovington (City)000016Ohio#0790c2JAJackson00001ANewMexico#0510c2SISierra000018Nebraska#0490c2DEDeuel000020USASouthWestRegion#490c2UTUtah00001ENewWorld#780c2SLSierra Leone000020Turkey#230c2EGElaz&#305;&#287;00001BSaintLucia#020c2DADauphin000023WorldwithCountries#260c2BOBolivia00001FNewZealand#G20c2WGNWellington00001AEgypt_346255#110c2GZGiza00001CAzerbaijan#210c2GRGoranboy00001BUkraine#030c2CVChernivtsi00001AGreenland#010c2NGAvannaa00001CAsiaGeorgia#040c2IMImereti000018Belgium#040c2LMLimburg00001FSouthAfrica#030c2FSFree State000018Hungary#020c2BABaranya000034NorthWestTerritories#CA.NT.MV0c2MVMackenzie Valley00002AFrenchGuiana#GL.SL.AY0c2AYAwala Yalimapo000028Mauritius#MU.RR0c2RRRiviere Du Rempart00001CGhana#GH.UW0c2UWUpper West00001CEurope2#EU.BG0c2BGBulgaria000022BurkinaFaso#BF.GZ0c2GZGanzourgou00001BZambia#ZM.NO0c2NONorthern00001FMongolia#MN.SB0c2SBSukhbaatar000022CoteDivoire#CI.WR0c2WRWorodougou00001BRussia#RU.MR0c2MRMordovia00001BMalawi#MW.CK0c2CKChikwawa000017Arkansas#0430c2DRDrew000020England#0390c2WOWorcestershire000020WestVirginia#0710c2PEPendleton00001AFrance#0030c2AQAquitaine00001BColorado#0510c2GUGunnison000018Montana#0210c2DWDawson00001FSouthDakota#0890c2MPMcPherson000017Alabama#0670c2HEHenry000014Asia#0190c2JPJapan000018Missouri#2270c2WOWorth000018Utah#0030c2BEBox Elder000016Texas#2990c2LANLlano000019Louisiana#0430c2GRGrant000019Georgia#1070c2EMEmanuel00002CWorldwithCountries#1850c2SBSolomon Islands00001AMinnesota#1590c2WDWadena000017Kentucky#1430c2LYLyon00001EMichigan#1530c2SHSchoolcraft000015Florida#0710c2LELee00001FMississippi#0530c2HUHumphreys00001DPennsylvania#0190c2BTButler00002BMadagascarRegions#MG.AV.AG0c2AGAnalamanga000019NewWorld#790c2SOSomalia000018Turkey#240c2ENErzincan000021PuertoRico#970c2MGMayag&uuml;ez00001CSaintLucia#030c2CACastries000022WorldwithCountries#270c2BRBrazil00001FNewZealand#G30c2WTCWest Coast00001EEgypt_346255#120c2ISIsmailia000026Azerbaijan#220c2GYG&ouml;y&ccedil;ay00001FUkraine#040c2DPDnipropetrovsk000017Greenland#020c2EGTunu00001CAsiaGeorgia#050c2KAKakheti00001BBelgium#050c2LULuxembourg000016Greece#010c2ATAttica000024Hungary#030c2BEB&eacute;k&eacute;s000025PolandCounties#PL.PM.SL0c2PSLSlupsk00001CBurkinaFaso#BF.ZR0c2ZRZiro00001FQatar#QA.GH0c2GHAl Ghuwariyah00001AEritrea#ER.AN0c2ANAnseba00001DUK7#UK.NI0c2NINorth Ireland000019Russia#RU.MS0c2MSMoscow00001ATunisia#TN.TO0c2TOTozeur000017Uganda#UG.GL0c2GLGulu000022FranceDepartment#FR.IS0c2ISIsere00001CVietnam#VN.ND0c2NDNam Dinh00001APalau#PW.AM0c2AMAimeliik00001EEngland#0400c2NYN. Yorkshire00001ATennessee#1410c2PUPutnam000019France#0040c2AUAuvergne000018Oklahoma#0930c2MAMajor000013Iowa#1450c2PAPage00001EWisconsin#0350c2ECEau Claire000018Texas#4810c2WHAWharton000018Indiana#0970c2MRMarion000019NewYork#0690c2OTOntario00001FNorthCarolina#1370c2PAPamlico000018Georgia#2890c2TWTwiggs000018Kansas#0910c2JOJohnson000021SouthCarolina#0630c2LXLexington000019Illinois#1270c2MCMassac000017Missouri#0470c2CYClay000022WorldwithCountries#1860c2TOTonga00001FNorthDakota#0610c2MUMountrail000016Texas#1190c2DELDelta000018Ohio#0810c2JEJefferson00001BNewMexico#0530c2SOSocorro000018Nebraska#0510c2DIDixon00002AMadagascarRegions#MG.MA.BE0c2BEBetsiboka00003APrinceEdwardIsland#CA.PE.NC0c2NCNorth Cape Coastal Drive000027Manitoba#CA.MB.PR0c2PRParkland Region00002BMadagascarRegions#MG.TM.AI0c2AIAtsinanana00001ENewWorld#800c2ZASouth Africa000017Turkey#250c2EMErzurum00001CSaintLucia#040c2CHChoiseul000021WorldwithCountries#280c2CLChile000016USA#LA0c2LALouisiana000024Egypt_346255#130c2KSKafr el-Sheikh000022Azerbaijan#230c2HAHac&#305;qabul000018Ukraine#050c2DTDonetsk00001ALatvia#010c2AIAizkraukle000018Greenland#030c2VGKitaa000021AsiaGeorgia#060c2KKKvemo Kartli000019Haiti#030c2NONord-Ouest000016Belgium#060c2NANamur00001EGreece#020c2CGCentral Greece000021SouthAfrica#050c2ECEastern Cape000033Hungary#040c2BOBorsod-Aba&uacute;j-Zempl&eacute;n000017Nigeria#NG.IM0c2IMImo00001BTanzania#TZ.RV0c2RVRuvuma00001BTanzania#TZ.TB0c2TBTabora00001CMacedonia#MK.ET0c2ETTetovo00001DSerbia#RS.PM0c2PMPomoravlje00001BBurundi#BI.BB0c2BBBubanza000020Tunisia#TN.SZ0c2SZSidi Bou Zid00001APalau#PW.SO0c2SOSonsorol000018Iran#IR.MK0c2MKMarkazi000018Palau#PW.AN0c2ANAngaur00001EPennsylvania#0210c2CACambria00001BArkansas#0450c2FAFaulkner00001FEngland#0410c2TWTyne And Wear000020WestVirginia#0730c2PLPleasants000019France#0050c2BRBretagne00001BColorado#0530c2HIHinsdale00001CMontana#0230c2DLDeer Lodge00001ESouthDakota#0910c2MAMarshall000019Alabama#0690c2HOHouston000019Asia#0210c2KZKazakhstan000019Missouri#2290c2WRWright000022Alaska#1300c2KGKetchikan Gateway000014Utah#0050c2CACache000017Texas#3010c2LOVLoving00001ALouisiana#0450c2IBIberia000017Georgia#1090c2EVEvans000023WorldwithCountries#1870c2TVTuvalu00001AMinnesota#1610c2WSWaseca00001CKentucky#1450c2MKMcCracken00001DMichigan#1550c2SWShiawassee000016Florida#0730c2LOLeon00001FMississippi#0550c2ISIssaquena000017NewWorld#810c2SDSudan00001ETurkey#260c2ESEski&#351;ehir000018PuertoRico#990c2MCMoca00001BSaintLucia#050c2DEDennery000024WorldwithCountries#290c2COColombia00001CEgypt_346255#140c2MTMatruh000024Azerbaijan#240c2IM&#304;mi&#351;li000020Ukraine#060c2IFIvano-Frankivsk00001CLatvia#020c2ALAl&#363;ksne000026AsiaGeorgia#070c2MMMtskheta-Mtianeti000020Belgium#070c2OVOost-Vlaanderen000021Greece#030c2CMCentral Macedonia00001CSouthAfrica#060c2GTGauteng000019Hungary#050c2BUBudapest000029PolandCounties#PL.PK.TM0c2PTMTarnobrzeg000018Nauru#NR.ME0c2MEMeneng00001BEurope2#EU.UA0c2UAUkraine00001AEurope2#EU.TK0c2TKTurkey00001BEurope2#EU.AT0c2ATAustria00001BAlgeria#DZ.ET0c2ETEl Tarf000021PapuaNewGuinea#PG.MR0c2MRMorobe000025Philippines#PH.DS0c2DSDavao del Sur00002FHungaryRegions#HU.SG0c2SGSouthern Great Plain000018England#0420c2MSMersey000018Tennessee#1430c2RHRhea00001BMaryland#0010c2ALAllegany00001AFrance#0060c2BUBourgogne00001BOklahoma#0950c2MRMarshall000018Iowa#1470c2PLPalo Alto00001CWisconsin#0370c2FLFlorence000018Texas#4830c2WHEWheeler00001CAsia#0220c2KPKorea (north)00001AIndiana#0990c2MSMarshall000018NewYork#0710c2OROrange000022NorthCarolina#1390c2PSPasquotank00001FVirginia#0410c2CSChesterfield000017Georgia#2910c2UNUnion000017Kansas#0930c2KEKearny000021SouthCarolina#0650c2MCMcCormick000019Illinois#1290c2MDMenard00001AMissouri#0490c2CIClinton000024WorldwithCountries#1880c2VUVanuatu00001CNorthDakota#0630c2NENelson000017Texas#1210c2DENDenton000013Ohio#0830c2KNKnox000018NewMexico#0550c2TATaos000018Nebraska#0530c2DODodge00001BNewWorld#820c2SZSwaziland000023USANorthEastRegion#180c2INIndiana00001ESaintLucia#060c2GIGros Islet000023WorldwithCountries#300c2ECEcuador00001BEgypt_346255#150c2MNMinya00002CAzerbaijan#250c2IS&#304;smay&#305;ll&#305;000018Ukraine#070c2KKKharkiv000015Latvia#030c2BLBalvi000036AsiaGeorgia#080c2RLRacha-Lechkhumi and Kvemo Svaneti000020Belgium#080c2WVWest-Vlaanderen000015Greece#040c2CRCrete00001FSouthAfrica#070c2MPMpumalanga000020Hungary#060c2CSCsongr&aacute;d000025PolandCounties#PL.MA.TM0c2MTMTarnow00001AMali#ML.KK0c2KKKoulikoro000022Uzbekistan#UZ.SU0c2SUSurxondaryo000024Uzbekistan#UZ.TK0c2TKTashkent City000018Panama#PA.CC0c2CCCocle000026PapuaNewGuinea#PG.NI0c2NINew Ireland00001ABurundi#BI.RY0c2RYRuyigi00001FMacedonia#MK.GB0c2GBGazi Baba00001BRussia#RU.OB0c2OBOrenburg000018Malawi#MW.DE0c2DEDedza00002CFranceDepartment#FR.IV0c2IVIlle et Vilaine00001EPennsylvania#0230c2CMCameron00001BArkansas#0470c2FRFranklin00001EEngland#0430c2GMG.Manchester000021WestVirginia#0750c2POPocahontas000017France#0070c2CECentre00001BColorado#0550c2HUHuerfano000018Montana#0250c2FAFallon00001BSouthDakota#0930c2MEMeade000019Alabama#0710c2JAJackson00001CAsia#0230c2KRKorea (south)000015Utah#0070c2CRCarbon000018Texas#3030c2LUBLubbock00001DLouisiana#0470c2IEIberville000018Georgia#1110c2FAFannin00002AWorldwithCountries#1890c2NCNew Caledonia00001EMinnesota#1630c2WAWashington00001BKentucky#1470c2MRMcCreary00001AMichigan#1570c2TUTuscola000016Florida#0750c2LVLevy00001EMississippi#0570c2ITItawamba00001ANewWorld#830c2TZTanzania000017Turkey#280c2GIGiresun00001BSaintLucia#070c2LBLaborie00002CWorldwithCountries#310c2FKFalkland Islands00001DEgypt_346255#160c2MFMonufia00002BAzerbaijan#260c2KAK&#601;lb&#601;c&#601;r000018Ukraine#080c2KSKherson000016Latvia#040c2BUBauska000024NorthEuropeanRegion#010c2DKDenmark000027AsiaGeorgia#090c2SJSamtskhe-Javakheti000019Haiti#060c2ARArtibonite00001FBelgium#090c2BWBrabant Wallon000029Greece#050c2EMEast Macedonia and Thrace000022SouthAfrica#080c2NCNorthern Cape00001CThailand#TH.LN0c2LNLamphun00001DThailand#TH.MD0c2MDMukdahan000024CapeVerde#CV.SC0c2SCSanta Catarina000023SaoTomeandPrincipe#ST.CU0c2CUCaue00001BKyrgyzstan#KG.CU0c2CUChuy00001CLesotho#LS.MF0c2MFMefeteng00001FZimbabwe#ZW.MA0c2MAManicaland000015Benin#BJ.ZO0c2ZOZou00001BIran#IR.MN0c2MNMazandaran00001CEngland#0440c2WMW.Midlands000019Tennessee#1450c2RORoane00001FMaryland#0030c2ANAnne Arundel000022France#0080c2CHChampagne-Ardenne000018Oklahoma#0970c2MYMayes000017Iowa#1490c2PYPlymouth00001FWisconsin#0390c2FDFond du Lac000018Texas#4850c2WICWichita000018Indiana#1010c2MTMartin000019NewYork#0730c2OLOrleans00001ENorthCarolina#1410c2PEPender000019Virginia#0430c2CKClarke000017Georgia#2930c2UPUpson000018Kansas#0950c2KMKingman00001ESouthCarolina#0670c2MAMarion000019Illinois#1310c2MRMercer000017Missouri#0510c2CLCole000024WorldwithCountries#1900c2BABahrain00001CNorthDakota#0650c2OLOliver000017Texas#1230c2DEWDewitt000013Ohio#0850c2LALake00001CNewMexico#0570c2TRTorrance00001ANebraska#0550c2DUDouglas00001DHungary#080c2FEFej&eacute;r000016NewWorld#840c2TGTogo00001ASaintLucia#080c2MIMicoud000029WorldwithCountries#320c2GFFrench Guiana000020Egypt_346255#170c2NVNew Valley000026Azerbaijan#270c2KUK&uuml;rd&#601;mir00001DUkraine#090c2KMKhmelnytskyi00001ALatvia#050c2CEC&#275;sis000024NorthEuropeanRegion#020c2EEEstonia000021AsiaGeorgia#100c2SKShida Kartli000015Haiti#070c2CECentre000016Greece#060c2EPEpirus00001CSouthAfrica#090c2LPLimpopo000024PolandCounties#PL.MZ.RM0c2MRMRadom000024SierraLeone#SL.NO.PL0c2PLPort Loko000017Palau#PW.AR0c2ARAirai00001EOman#OM.DA0c2DAAd Dakhiliyah000022CapeVerde#CV.SD0c2SDSao Domingos000029BurkinaFaso#BF.ZW0c2ZWZoundw&eacute;ogo000030DemocraticRepublicoftheCongo#CD.MN0c2MNManiema00001ASomalia#SO.NU0c2NUNugaal00001CNepal#NP.SA0c2SASagarmatha000027Philippines#PH.DV0c2DVDavao del Norte00001BRussia#RU.NN0c2NNNenetsia000018Libya#LY.MQ0c2MQMurzuq00001AChina2#CN.JS0c2JSJiangsu00001DPennsylvania#0250c2CRCarbon000019Arkansas#0490c2FUFulton000019England#0450c2RNRutland00001EWestVirginia#0770c2PRPreston000016France#0090c2COCorse00001AColorado#0570c2JAJackson000018Montana#0270c2FEFergus00001ESouthDakota#0950c2MLMellette00001BAlabama#0730c2JEJefferson00002BIndia#0010c2ANAndaman and Nicobar Islands000019Asia#0250c2KGKyrgyzstan000016Utah#0090c2DADaggett000015Texas#3050c2LYNLynn00001BLouisiana#0490c2JAJackson000019Georgia#1130c2FYFayette000021WorldwithCountries#1910c2IZIraq00001CMinnesota#1650c2WTWatonwan000019Kentucky#1490c2MLMcLean00001CMichigan#1590c2VBVan Buren000019Florida#0770c2LILiberty00001DMississippi#0590c2JAJackson000029NewCaledonia#NC.SU.NO0c2NONoum&eacute;a00002DMadagascarRegions#MG.TM.AN0c2ANAnalanjirofo000027Hungary#090c2GMGy&#337;r-Moson-Sopron000019NewWorld#850c2TNTunisia000024USANorthEastRegion#210c2KYKentucky000026DominicanRepublic#010c2AZ&Aacute;zua000024SaintLucia#090c2SOSoufri&egrave;re000022WorldwithCountries#330c2GYGuyana000021Egypt_346255#180c2NSNorth Sinai000025Azerbaijan#280c2LCLa&ccedil;&#305;n00001BUkraine#100c2KHKirovohrad00001ALatvia#060c2DADaugavpils000024NorthEuropeanRegion#030c2FIFinland00002BAsiaGeorgia#110c2SZSamegrelo-Zemo Svaneti00001EGreece#070c2IOIonian Islands00001FSouthAfrica#100c2NWNorth West000013Japan#10c2AIAichi000021Lesotho#LS.MH0c2MHMohale's Hoek000028Zimbabwe#ZW.MC0c2MCMashonaland Central000020Russia#RU.NO0c2NONorth Ossetia000019Tunisia#TN.TU0c2TUTunis00001DMalawi#MW.CR0c2CRChiradzulu00001FEngland#0460c2IWIsle of Wight00001DTennessee#1470c2RBRobertson00001CMaryland#0050c2BLBaltimore000025France#0100c2FRFranche-Comt&eacute;000019Oklahoma#0990c2MUMurray000019Iowa#1510c2PCPocahontas00001AWisconsin#0410c2FOForest00001ATexas#4870c2WIBWilbarger00001EIndia#0020c2APAndhra Pradesh00001AWashington#0010c2ADAdams000013Asia#0260c2LALaos000017Indiana#1030c2MIMiami000018NewYork#0750c2OSOswego000022NorthCarolina#1430c2PRPerquimans000018Virginia#0450c2CGCraig000018Georgia#2950c2WKWalker000016Kansas#0970c2KWKiowa000020SouthCarolina#0690c2MRMarlboro000019Illinois#1330c2MEMonroe000019Missouri#0530c2COCooper000023WorldwithCountries#1920c2IEIsrael00001DNorthDakota#0670c2PEPembina000018Texas#1250c2DICDickens000017Ohio#0870c2LWLawrence000019NewMexico#0590c2UNUnion000018Nebraska#0570c2DNDundy00002AYukonTerritory#CA.YT.ST0c2STSilver Trail000030MadagascarRegions#MG.TM.AO0c2AOAlaotra-Mangoro000023Hungary#100c2HBHajd&uacute;-Bihar000018NewWorld#860c2UGUganda000015Turkey#310c2HTHatay000023DominicanRepublic#020c2BRBahoruco00001ESaintLucia#100c2VFVieux Fort000024WorldwithCountries#340c2PYParaguay000020Afghanistan#010c2BDSBadakhshan00001FEgypt_346255#190c2PSPort Said000026Azerbaijan#290c2LNL&#601;nk&#601;ran000017Ukraine#110c2KRCrimea000022Latvia#070c2DGVDaugavpils (city)000024NorthEuropeanRegion#040c2ISIceland00001CAsiaGeorgia#120c2TBTbilisi000013Haiti#090c2NDNord00001CGreece#080c2NANorth Aegean000021SouthAfrica#110c2WCWestern Cape000013Japan#20c2AKAkita000023Pakistan#PK.NA0c2NANorthern Areas000020CapeVerde#CV.SF0c2SFSao Filipe00001ANigeria#NG.JI0c2JIJigawa000017Jordan#JO.MN0c2MNMaan000020Zambia#ZM.NW0c2NWNorth-Western000025CentralAmerica2#CE.LC0c2LCSt. Lucia000018Laos#LA.SL0c2SLSalavan00001DPennsylvania#0270c2CECentre00001AArkansas#0510c2GAGarland00001AEngland#0470c2WSW.Sussex00001DWestVirginia#0790c2PUPutnam00001EFrance#0110c2LLIle-de-France00001CColorado#0590c2JEJefferson00001AMontana#0290c2FLFlathead00001BSouthDakota#0970c2MIMiner000017Alabama#0750c2LALamar000021India#0030c2ARArunachal Pradesh000014Utah#0110c2DVDavis00001ATexas#3070c2MCUMcCulloch00001DLouisiana#0510c2JEJefferson000021Virginia#7700c2RORoanoke (City)000017Georgia#1150c2FLFloyd000023WorldwithCountries#1930c2JOJordan00001AMinnesota#1670c2WLWilkin00001CNevada#5100c2CACarson City00001AKentucky#1510c2MIMadison00001CMichigan#1610c2WAWashtenaw000019Florida#0790c2MSMadison00001CMississippi#0610c2JSJasper000016Hungary#110c2HEHeves000020NewWorld#870c2WAWestern Sahara000016Turkey#320c2ICMersin000021USANorthEastRegion#230c2MEMaine000023DominicanRepublic#030c2BHBarahona00001BSaintLucia#110c2PRPraslin000020WorldwithCountries#350c2PEPeru00001DAfghanistan#020c2BDGBadghis00001EEgypt_346255#200c2QAQalyubia00002DAzerbaijan#300c2LAL&#601;nk&#601;ran (City)000016Latvia#080c2DODobele000024NorthEuropeanRegion#050c2IEIreland000017Haiti#100c2NENord-Est00001BArmenia#010c2AGAragatsotn00001BGreece#090c2PEPeloponnese000014Japan#30c2AOAomori000021Thailand#TH.MH0c2MHMae Hong Son00001FCambodia#KH.RO0c2RORatanakiri00001CBurkinaFaso#BF.IO0c2IOIoba00001BPanama#PA.CH0c2CHChiriqui000031CentralAmerica2#CE.KN0c2KNSt. Kitts &amp; Nevis00001BAngola#AO.BG0c2BGBenguela000018Uganda#UG.YU0c2YUYumbe000025Zimbabwe#ZW.ME0c2MEMashonaland East00001AMalawi#MW.CT0c2CTChitipa00001DEngland#0480c2EYE.Yorkshire00001ETennessee#1490c2RURutherford000025France#0120c2LALanguedoc-Roussillon00001BOklahoma#1010c2MKMuskogee000013Iowa#1530c2POPolk000019Wisconsin#0430c2GRGrant000018Texas#4890c2WIAWillacy000015India#0040c2ASAssam00001BWashington#0030c2ASAsotin000017Asia#0280c2MYMalaysia000018Indiana#1050c2MOMonroe000018NewYork#0770c2OGOtsego00001ENorthCarolina#1450c2POPerson00001BVirginia#0470c2CUCulpeper000018Georgia#2970c2WNWalton000018Kansas#0990c2LBLabette000020SouthCarolina#0710c2NBNewberry00001DIllinois#1350c2MYMontgomery00001BMissouri#0550c2CFCrawford000023WorldwithCountries#1940c2KUKuwait00001CNorthDakota#0690c2PIPierce000017Texas#1270c2DIMDimmit00001DDenmark#0010c2AR&Aring;rhus000022Virginia#5900c2DADanville (City)000016Ohio#0890c2LILicking00001CNewMexico#0610c2VAValencia00001BNebraska#0590c2FIFillmore000026YukonTerritory#CA.YT.CA0c2CACampbell000029Hungary#120c2KEKom&aacute;rom-Esztergom000018NewWorld#880c2ZMZambia000017Turkey#330c2IPIsparta000024USANorthEastRegion#240c2MDMaryland000029DominicanRepublic#040c2DADajab&oacute;n000016UAE#010c2AZAbu Dhabi000024WorldwithCountries#360c2SRSuriname000013USA#KS0c2KSKansas00001DAfghanistan#030c2BGLBaghlan00001AEgypt_346255#210c2QEQena000019Azerbaijan#310c2LELerik00001CUkraine#130c2KVKiev Oblast000017Latvia#090c2GUGulbene000023NorthEuropeanRegion#060c2LVLatvia000014Haiti#110c2OUOuest000017Armenia#020c2ARArarat00001CGreece#100c2SASouth Aegean000026PolandCounties#PL.WN.OM0c2WOMOlsztyn000013Japan#40c2CHChiba00001BSriLanka#LK.JA0c2JAJaffna00001ELesotho#LS.MK0c2MKMokhotlong000016Nepal#NP.SE0c2SESeti000023PapuaNewGuinea#PG.NO0c2NONorthern00001CMongolia#MN.SL0c2SLSelenge00001BTanzania#TZ.AS0c2ASArusha00001EPennsylvania#0290c2CHChester000018Arkansas#0530c2GRGrant00001DEngland#0490c2SYS.Yorkshire00001EWestVirginia#0810c2RARaleigh000019France#0130c2LILimousin000018Colorado#0610c2KIKiowa00001AMontana#0310c2GAGallatin00001FSouthDakota#0990c2MNMinnehaha00001CAlabama#0770c2LULauderdale000015India#0050c2BIBihar000017Utah#0130c2DUDuchesne000019Texas#3090c2MCLMcLennan000023Louisiana#0530c2JDJefferson Davis000019Georgia#1170c2FOForsyth000024WorldwithCountries#1950c2LBLebanon00001AMinnesota#1690c2WIWinona00001ADenmark#0020c2BOBornholm00001BKentucky#1530c2MGMagoffin000018Michigan#1630c2WYWayne000019Florida#0810c2MNManatee00001FMississippi#0630c2JEJefferson000026MadagascarRegions#MG.MA.BO0c2BOBoeny00001ANewWorld#890c2ZWZimbabwe00001DTurkey#340c2IB&#304;stanbul000029USANorthEastRegion#250c2MAMassachusetts000012UAE#020c2AJAjman000023WorldwithCountries#370c2UYUruguay00001ECentralAmerica#010c2BHBelize00001DEgypt_346255#220c2RSRed Sea000020Azerbaijan#320c2MAMasall&#305;000018Ukraine#140c2LHLuhansk00001ELatvia#100c2JKJ&#275;kabpils000026NorthEuropeanRegion#070c2LTLithuania000012Haiti#120c2SDSud000018Armenia#030c2AVArmavir000018Greece#110c2THThessaly000013Japan#50c2EHEhime00001AChina2#CN.JX0c2JXJiangxi00001FEurope2#EU.CH0c2CHSwitzerland000016Angola#AO.BI0c2BIBie00001BBurundi#BI.CA0c2CACankuzo00001ERussia#RU.NS0c2NSNovosibirsk000020CoteDivoire#CI.FR0c2FRFromager000019Uganda#UG.IB0c2IBIbanda000017Libya#LY.NL0c2NLNalut00001DEngland#0500c2WYW.Yorkshire000019Tennessee#1510c2SCScott00001AMaryland#0090c2CACalvert000019France#0140c2LOLorraine000018Oklahoma#1030c2NONoble00001CIowa#1550c2PTPottawattamie000019Wisconsin#0450c2GEGreen00001BTexas#4910c2WIMWilliamson00001BWashington#0050c2BEBenton000017Asia#0300c2MNMongolia00001CIndiana#1070c2MNMontgomery000018NewYork#0790c2PUPutnam00001CNorthCarolina#1470c2PIPitt00001DVirginia#0490c2CMCumberland000016Georgia#2990c2WAWare000015Kansas#1010c2LELane00001ESouthCarolina#0730c2OCOconee000019Illinois#1370c2MGMorgan000017Missouri#0570c2DDDade000021WorldwithCountries#1960c2OMOman00001CNorthDakota#0710c2RARamsey000017Texas#1290c2DONDonley00001FDenmark#0030c2FRFrederiksberg000014Ohio#0910c2LOLogan00001BNebraska#0610c2FRFranklin000025Hungary#140c2NON&oacute;gr&aacute;d000018NewWorld#900c2GMGambia00001ATurkey#350c2IZ&#304;zmir000024USANorthEastRegion#260c2MIMichigan000021DominicanRepublic#060c2DUDuarte000012UAE#030c2DUDubai000025WorldwithCountries#380c2VEVenezuela00001AUSA#MA0c2MAMassachusetts000022CentralAmerica#020c2CSCosta Rica00001CAfghanistan#050c2BAMBamyan00001DEgypt_346255#230c2SQSharqia00002AAzerbaijan#330c2MIMing&#601;&ccedil;evir000015Ukraine#150c2LVLviv000017Latvia#110c2JLJelgava000023NorthEuropeanRegion#080c2NONorway000016Haiti#130c2SESud-Est00001CCzechRepublic#520c2PRPraha00001CArmenia#040c2GRGegharkunik00001BGreece#120c2WGWest Greece000013Japan#60c2FUFukui000018Thailand#TH.NA0c2NANan000023Madagascar#MG.FI0c2FIFianarantsoa00001BMacedonia#MK.ZA0c2ZAZajas000025Mississippi#0650c2JDJefferson Davis00001EPennsylvania#0310c2CIClarion000019Arkansas#0550c2GEGreene00001FWestVirginia#0830c2RNRandolph00002CFrance#0150c2MIMidi-Pyr&eacute;n&eacute;es00001DColorado#0630c2KCKit Carson00001AMontana#0330c2GRGarfield00001BSouthDakota#1010c2MOMoody00001AAlabama#0790c2LWLawrence00001CIndia#0070c2CAChhattisgarh000014Asia#0310c2NPNepal000014Utah#0150c2EMEmery000019Texas#3110c2MCMMcMullen00001DLouisiana#0550c2LALafayette00001AGeorgia#1190c2FRFranklin000022WorldwithCountries#1970c2QAQatar00001AMinnesota#1710c2WRWright00001FDenmark#0040c2FEFrederiksborg000019Kentucky#1550c2MHMarion00001AMichigan#1650c2WEWexford000018Florida#0830c2MRMarion000026NewCaledonia#NC.SU.PA0c2PAPa&iuml;ta000017NewWorld#910c2CGCongo000015UAE#040c2FUFujairah000023WorldwithCountries#390c2DZAlgeria000023CentralAmerica#030c2ESEl Salvador00001BAfghanistan#060c2FRAFarah00001BEgypt_346255#240c2SHSohag000021Azerbaijan#340c2NANaftalan city000019Ukraine#160c2MYMykolaiv00001FLatvia#120c2JELJelgava (city)00002BNorthEuropeanRegion#090c2UKUnited Kingdom000019Haiti#140c2GAGrand'Anse000017Armenia#050c2KTKotayk00001EGreece#130c2WMWest Macedonia000027PolandCounties#PL.ZP.SM0c2ZSMSzczecin000015Japan#70c2FKFukuoka00001BTunisia#TN.BZ0c2BZBizerte000021FranceDepartment#FR.JU0c2JUJura00002DFranceDepartment#FR.LA0c2LALoire Atlantique000025Thailand#TH.NB0c2NBNong Bua Lam Phu000022Europe2#EU.UK0c2UKUnited Kingdom000020Europe2#EU.VA0c2VAVatican City00001ECambodia#KH.SI0c2SISiem Reap000019Ghana#GH.WP0c2WPWestern000032DemocraticRepublicoftheCongo#CD.NK0c2NKNord-Kivu000019Namibia#NA.KA0c2KAKaras00001ANigeria#NG.KD0c2KDKaduna00001BComoros #KM.MO0c2MOMoheli000018Panama#PA.CL0c2CLColon00001ECoteDivoire#CI.ZA0c2ZAZanzan00001DZimbabwe#ZW.MI0c2MIMidlands000025Philippines#PH.ES0c2ESEastern Samar000024Burundi#BI.BM0c2BMBujumbura Mairie00001BNebraska#0630c2FOFrontier00001ETennessee#1530c2SQSequatchie00001BMaryland#0110c2CRCaroline000023France#0160c2NONord-Pas-de-Calais000019Oklahoma#1050c2NWNowata000018Iowa#1570c2PWPoweshiek00001EWisconsin#0470c2GLGreen Lake000017Texas#4930c2WILWilson00001BWashington#0070c2CHChelan000018Indiana#1090c2MGMorgan000018NewYork#0810c2QUQueens00001CNorthCarolina#1490c2PLPolk00001CVirginia#0510c2DIDickenson000018Georgia#3010c2WRWarren00001CKansas#1030c2LVLeavenworth000022SouthCarolina#0750c2OROrangeburg00001FVirginia#7750c2SASalem (City)00001BIllinois#1390c2MTMoultrie000019Missouri#0590c2DLDallas000029WorldwithCountries#1980c2SASaudi Arabia00001CNorthDakota#0730c2RNRansom000016Texas#1310c2DUVDuval000015Denmark#0050c2FYFyn000015Ohio#0930c2LRLorain000015Hungary#160c2PEPest00001BNewWorld#920c2MIMauritius000019Turkey#370c2KSKastamonu000024DominicanRepublic#080c2ESEspaillat00001BUAE#050c2RKRas Al Khaimah000022WorldwithCountries#400c2AOAngola000021CentralAmerica#040c2GTGuatemala00001CWorld#SA0c2SASouth America000018Andorra#020c2CACanillo00001CAfghanistan#070c2FYBFaryab000021Egypt_346255#250c2SSSouth Sinai00003DAzerbaijan#350c2NXNax&ccedil;&#305;van &#350;&#601;h&#601;r000017Ukraine#170c2ODOdessa000024Latvia#130c2JURJ&#363;rmala (city)000023NorthEuropeanRegion#100c2SESweden000015Haiti#150c2NINippes000015Armenia#060c2LOLori000024FrenchGuiana#GF.CY.IR0c2IRIracoubo000017Japan#80c2FSFukushima000019CapeVerde#CV.SL0c2SLSal000019Nigeria#NG.KE0c2KEKebbi000019Ghana#GH.EP0c2EPEastern000018Niger#NE.ZI0c2ZIZinder00001ATanzania#TZ.TN0c2TNTanga000029PapuaNewGuinea#PG.NS0c2NSNorth Solomons00001AAngola#AO.CB0c2CBCabinda000018Russia#RU.OL0c2OLOryal000018Uganda#UG.HO0c2HOHoima000017Malawi#MW.DO0c2DODowa000021Virginia#5950c2EMEmporia (City)000018Florida#0850c2MAMartin00001BMississippi#0670c2JOJones000021Pennsylvania#0330c2CLClearfield00001CArkansas#0570c2HEHempstead00001EWestVirginia#0850c2RIRitchie000020France#0170c2NRBasse-Normandie000017Colorado#0650c2LALake000019Montana#0350c2GCGlacier000020SouthDakota#1030c2PEPennington000015Alabama#0810c2LELee000017Asia#0330c2PKPakistan000017Utah#0170c2GAGarfield000018Texas#3130c2MADMadison00001BOceania#0010c2AUAustralia00001DLouisiana#0570c2LFLafourche000018Georgia#1210c2FUFulton000022WorldwithCountries#1990c2SYSyria000023Minnesota#1730c2YMYellow Medicine000027Denmark#0060c2KOK&oslash;benhavns Amt00001BKentucky#1570c2MSMarshall00002DSaskatchewan#CA.SK.SE0c2SESouth East Region000017Hungary#170c2SOSomogy00001DNewWorld#930c2AFAfghanistan000017Turkey#380c2KYKayseri000025Australia2#WA0c2WAWestern Australia000028DominicanRepublic#090c2INIndependencia000014UAE#060c2SHSharjah000021WorldwithCountries#410c2BJBenin000015USA#MD0c2MDMaryland000020CentralAmerica#050c2HOHonduras000017Andorra#030c2ENEncamp00001CAfghanistan#080c2GHAGhazni00001AEgypt_346255#260c2SZSuez000023Azerbaijan#360c2NENeft&ccedil;ala000018Ukraine#180c2PLPoltava00001DLatvia#140c2KRKr&#257;slava00001ABolivia#010c2HChuquisaca000017Armenia#070c2SHShirak00002CDistrictofColumbia#US.DC.NE0c2NENorth East000012Japan#90c2GIGifu000018Cameroon#CM.SU0c2SUSud000029FranceDepartment#FR.LC0c2LCLoir et Cher000019Syria#SY.LA0c2LALatakia00001ACambodia#KH.TA0c2TATakeo000020CapeVerde#CV.SM0c2SMSao Miguel000021Mauritius#MU.BL0c2BLBlack River00001FBurkinaFaso#BF.KA0c2KAKadiogo00001AAlgeria#DZ.GL0c2GLGuelma000021Angola#AO.CC0c2CCCuando Cubango00001DUzbekistan#UZ.BU0c2BUBuxoro00001DSerbia#RS.PZ0c2PZPrizrenski000017Russia#RU.OM0c2OMOmsk000018Libya#LY.MZ0c2MZMizdah000014Ohio#0950c2LULucas00001CFlorida#0860c2DAMiami-Dade000019Nebraska#0650c2FUFurnas00001ATennessee#1550c2SBSevier000014UK#0010c2ENEngland00001AMaryland#0130c2COCarroll000021France#0180c2PDPays de la Loire00001BOklahoma#1070c2OKOkfuskee000017Iowa#1590c2RGRinggold000018Wisconsin#0490c2IOIowa000018Texas#4950c2WINWinkler000015India#0100c2DEDelhi00001CWashington#0090c2CMClallam00001AAsia#0340c2PHPhilippines000018Indiana#1110c2NENewton00001CNewYork#0830c2RERensselaer000020NorthCarolina#1510c2RARandolph00001CVirginia#0530c2DNDinwiddie00001CGeorgia#3030c2WGWashington000018Kansas#1050c2LCLincoln00001FSouthCarolina#0770c2PIPickens000016Oceania#0020c2FJFiji000017Illinois#1410c2OGOgle00001AMissouri#0610c2DADaviess00002FWorldwithCountries#2000c2AEUnitedArabEmirates00001ENorthDakota#0750c2RVRenville000019Texas#1330c2EASEastland000022Denmark#0070c2KBK&oslash;benhavn00001FNewCaledonia#NC.NO.VO0c2VOVoh00002EHungary#180c2SZSzabolcs-Szatm&aacute;r-Bereg000019NewWorld#940c2AMArmenia00001FTurkey#390c2KLK&#305;rklareli000028DominicanRepublic#100c2ALLa Altagracia00001AUAE#070c2UQUmm Al Quwain000024WorldwithCountries#420c2BWBotswana000015USA#KY0c2KYKentucky000012USA#ME0c2MEMaine000021CentralAmerica#060c2NUNicaragua00001BAndorra#040c2LMLa Massana00001BAfghanistan#090c2GHOGhowr00001BEgypt_346255#270c2LXLuxor00001DAzerbaijan#370c2OGO&#287;uz000016Ukraine#190c2RVRivne00001CLatvia#150c2KUKuld&#299;ga00001ABolivia#020c2CCochabamba000017Armenia#080c2SUSyunik000026PolandCounties#PL.MZ.SM0c2MSMSiedlce000023FranceDepartment#FR.LD0c2LDLandes000021CapeVerde#CV.SN0c2SNSao Nicolau00001FCambodia#KH.BA0c2BABattambang00001CMacedonia#MK.ZE0c2ZEZelino000016Chad#TD.KA0c2KAKanem000022Guyana#GY.MA0c2MAMahaica-Berbice000030HungaryRegions#HU.ST0c2STSouthern Transdanubia000023Libya#LY.NQ0c2NQAn Nuqat al Khams000018Florida#0870c2MOMonroe00001CMississippi#0690c2KEKemper00001EPennsylvania#0350c2CNClinton00001DArkansas#0590c2HSHot Spring00001CWestVirginia#0870c2RORoane000015UK#0020c2SCScotland000019France#0190c2PIPicardie00001BColorado#0670c2LPLa Plata00001FMontana#0370c2GVGolden Valley00001DSouthDakota#1050c2PRPerkins00001BAlabama#0830c2LILimestone000013India#0110c2GOGoa000014Utah#0190c2GRGrand000017Texas#3150c2MARMarion00001AOceania#0030c2KIKiribati00001CLouisiana#0590c2LSLa Salle000018Georgia#1230c2GIGilmer000022WorldwithCountries#2010c2YMYemen00001DDenmark#0080c2NONordjylland000019Kentucky#1590c2MTMartin00002AMadagascarRegions#MG.AV.BN0c2BNBongolava000017Armenia#090c2TVTavush00001CNewWorld#950c2AZAzerbaijan000022Turkey#400c2KHK&#305;r&#351;ehir000033DominicanRepublic#110c2EPEl&iacute;as Pi&ntilde;a000028WorldwithCountries#430c2BFBurkina Faso000017Sweden#020c2KBlekinge00001ECentralAmerica#070c2PMPanama000017Andorra#050c2OROrdina00001DAfghanistan#100c2HELHelmand00001CEgypt_346255#280c2HWHelwan000029Azerbaijan#380c2QAQ&#601;b&#601;l&#601;00001CLatvia#160c2LELiep&#257;ja000017Bolivia#030c2BEl Beni00001ECameroon#CM.SW0c2SWSud-Ouest00001EVietnam#VN.NT0c2NTNinh Thuan000017Nauru#NR.NI0c2NINibok000022Thailand#TH.NF0c2NFNakhon Phanom000018Angola#AO.BO0c2BOBengo000019Nepal#NP.BA0c2BABagmati000017Russia#RU.PE0c2PEPerm00001EMongolia#MN.AR0c2ARArkhangai000021Mongolia#MN.BH0c2BHBayankhongor000017Laos#LA.AT0c2ATAttapu000016Denmark#0090c2RIRibe000016Ohio#0970c2MAMadison000017Nebraska#0670c2GAGage00001ATennessee#1570c2SHShelby00001AUK#0030c2NINorth Ireland000018Maryland#0150c2CECecil000021France#0200c2PCPoitou-Charentes00001BOklahoma#1090c2OLOklahoma000012Iowa#1610c2SASac000018Wisconsin#0510c2IRIron000015Texas#4970c2WISWise000017India#0120c2GUGujarat00001AWashington#0110c2CAClark000021Asia#0360c2RURussian Federation000017Indiana#1130c2NONoble00001ANewYork#0850c2RIRichmond000020NorthCarolina#1530c2RIRichmond000017Georgia#3050c2WYWayne000015Kansas#1070c2LNLinn000020SouthCarolina#0790c2RIRichland000022Oceania#0040c2MHMarshall Islands000019Illinois#1430c2PEPeoria000019Missouri#0630c2DKDeKalb000028WorldwithCountries#2020c2PRPuerto Rico00001ENorthDakota#0770c2RIRichland000016Texas#1350c2ECTEctor00001CArmenia#100c2VDVayots Dzor00002CCentralAmericawithCaribbeans#010c2BHBelize00002CHungary#200c2JNJ&aacute;sz-Nagykun-Szolnok00001CNewWorld#960c2BDBangladesh000017Turkey#410c2KCKocaeli000024DominicanRepublic#120c2ROLa Romana000023WorldwithCountries#440c2BIBurundi00001DSweden#030c2XG&auml;vleborg000032Andorra#060c2SJSant Juli&agrave; de L&ograve;ria00001BAfghanistan#110c2HERHerat000024Egypt_346255#290c2SO6th of October000017Azerbaijan#390c2QXQax000015Ukraine#210c2SMSumy000024Latvia#170c2LPXLiep&#257;ja (city)000016Bolivia#040c2LLa Paz000018China2#CN.MA0c2MAMacao00001ECapeVerde#CV.TF0c2TFTarrafal000016Mali#ML.KY0c2KYKayes00001BEurope2#EU.BY0c2BYBelarus00001BEurope2#EU.DE0c2DEGermany00001ALesotho#LS.MS0c2MSMaseru00001CLaos#LA.SV0c2SVSavannakhet000023Macedonia#MK.GP0c2GPGjorce Petrov000027Zimbabwe#ZW.MN0c2MNMatabeleland North00001ABurundi#BI.BR0c2BRBururi00001DRussia#RU.NZ0c2NZNizhegorod000016Laos#LA.BK0c2BKBokeo000024Denmark#0100c2RNRingkj&oslash;bing000018Kentucky#1610c2MOMason000018Florida#0890c2NANassau00001FMississippi#0710c2LALafayette00001FPennsylvania#0370c2COColumbia000019Arkansas#0610c2HWHoward00001EWestVirginia#0890c2SUSummers000012UK#0040c2WAWales000031France#0210c2PRProvence-Alpes-C&ocirc;te D'Azur00001AColorado#0690c2LRLarimer000019Montana#0390c2GNGranite00001CSouthDakota#1070c2POPotter000019Alabama#0850c2LOLowndes000017India#0130c2HAHaryana000013Utah#0210c2IRIron000017Texas#3170c2MATMartin00001COceania#0050c2FMMicronesia00001BLouisiana#0610c2LILincoln00001AGeorgia#1250c2GLGlascock00002BWorldwithCountries#2030c2KYCayman Islands000018Armenia#110c2ERYerevan000030CentralAmericawithCaribbeans#020c2CSCosta Rica000016Hungary#210c2TOTolna000018NewWorld#970c2BTBhutan000029USANorthEastRegion#330c2NHNew Hampshire000024WorldwithCountries#450c2CMCameroon000021Andorra#070c2ALAndorra la Vella000019Azerbaijan#400c2QZQazax000019Ukraine#220c2TPTernopil00001CLatvia#180c2LMLimba&#382;i000015Bolivia#050c2OOruro00002BFranceDepartment#FR.LG0c2LGLot et Garonne000025DenmarkRegion#DK.HS0c2HSHovenstaden00001FBurma#MM.RA0c2RARakhine State00001CBurundi#BI.CI0c2CICibitoke00001CLaos#LA.BL0c2BLBolikhamxai00001ADenmark#0110c2RORoskilde000021Virginia#6000c2FAFairfax (City)000017Ohio#0990c2MHMahoning000019Nebraska#0690c2GRGarden000019Tennessee#1590c2SMSmith00001AMaryland#0170c2CHCharles000022France#0220c2RHRh&ocirc;ne-Alpes000021SpainProvinces#0010c2ABAlbacete00001BOklahoma#1110c2OMOkmulgee000014Iowa#1630c2SCScott00001BWisconsin#0530c2JAJackson000015Texas#4990c2WODWood000020India#0140c2HPHimachal Pradesh00001DWashington#0130c2CLColumbia000018Asia#0380c2SGSingapore000016Indiana#1150c2OHOhio00001ANewYork#0870c2RORockland00001FNorthCarolina#1550c2RORobeson000018Virginia#0570c2ESEssex000019Georgia#3070c2WSWebster000016Kansas#1090c2LGLogan00001ESouthCarolina#0810c2SASaluda000017Oceania#0060c2NRNauru000018Illinois#1450c2PRPerry000017Missouri#0650c2DEDent00001DNorthDakota#0790c2RORolette000018Texas#1370c2EDWEdwards000026Denmark#0120c2SOS&oslash;nderjylland000018Kentucky#1630c2MDMeade00001AFlorida#0910c2OLOkaloosa00001BMississippi#0730c2LMLamar00001FPennsylvania#0390c2CWCrawford00001FArkansas#0630c2INIndependence00001DWestVirginia#0910c2TATaylor000020France#0230c2HNHaute-Normandie000025SpainProvinces#0020c2AL&Aacute;lava00001DColorado#0710c2LSLas Animas000016Montana#0410c2HIHill00001DSouthDakota#1090c2RORoberts000017Alabama#0870c2MAMacon000021India#0150c2JKJammu and Kashmir000018Asia#0390c2LKSri Lanka000013Utah#0230c2JUJuab000016Texas#3190c2MASMason00001DOceania#0070c2NZNew Zealand00001ELouisiana#0630c2LVLivingston000017Georgia#1270c2GYGlynn000024Germany#0010c2BABaden-Wuerttemberg000031CentralAmericawithCaribbeans#030c2ESEl Salvador000014Hungary#220c2VAVas000025EuropeRegion#010c2NRNorthern Region000018NewWorld#980c2BNBrunei00001CTurkey#430c2KUK&uuml;tahya000026USANorthEastRegion#340c2NJNew Jersey00003FDominicanRepublic#140c2MTMar&iacute;a Trinidad S&aacute;nchez000026WorldwithCountries#460c2CVCape Verde000015USA#MI0c2MIMichigan000016Sweden#050c2IGotland000023Andorra#080c2EEEscaldes-Engordany00001BAfghanistan#130c2KABKabul00001CAzerbaijan#410c2QOQobustan00001AUkraine#230c2VIVinnytsia000015Latvia#190c2LULudza000015World#AF0c2AFAfrica000015Bolivia#060c2NPando000020SolomonIsland#SB.MK0c2MKMakira000022Thailand#TH.MS0c2MSMaha Sarakham000019Togo#TG.PL0c2PLPlateaux00001BCameroon#CM.CE0c2CECentre00001ANamibia#NA.KH0c2KHKhomas000019Nigeria#NG.LA0c2LALagos000017Angola#AO.UI0c2UIUige00002ACentralAmerica2#CE.KY0c2KYCayman Islands00001FMongolia#MN.UB0c2UBUlan Bator00001DMacedonia#MK.GR0c2GRGradsko000022Denmark#0130c2STStorstr&oslash;m000015Ohio#1010c2MRMarion00001BNebraska#0710c2GFGarfield00001BTennessee#1610c2STStewart00001DMaryland#0190c2DODorchester000021SpainProvinces#0030c2AIAlicante000018Oklahoma#1130c2OSOsage000015Iowa#1650c2SHShelby00001DWisconsin#0550c2JEJefferson000017Texas#5010c2YOAYoakum000019India#0160c2JHJharkhand00001CWashington#0150c2COCowlitz000018Indiana#1170c2OROrange00001ENewYork#0890c2SLSt. Lawrence000022NorthCarolina#1570c2RCRockingham00001AVirginia#0590c2FIFairfax000019Georgia#3090c2WEWheeler000015Kansas#1110c2LYLyon000023SouthCarolina#0830c2SPSpartanburg000017Oceania#0080c2PWPalau000018Illinois#1470c2PIPiatt00001AMissouri#0670c2DODouglas000018Germany#0020c2BYBayern00001DNorthDakota#0810c2SASargent000016Texas#1390c2ELIEllis00003BPrinceEdwardIsland#CA.PE.PC0c2PCPoints East Coastal Drive00002FCentralAmericawithCaribbeans#040c2GTGuatemala000020Hungary#230c2VEVeszpr&eacute;m000025EuropeRegion#020c2SRSouthern Region000021NewWorld#990c2MMBurma (Myanmar)000017Turkey#440c2MLMalatya000027DominicanRepublic#150c2MCMonte Cristi000034WorldwithCountries#470c2CPCentral African Republic000016Sweden#060c2NHalland00001CAfghanistan#140c2KAPKapisa000018Azerbaijan#420c2QBQuba000016Ukraine#240c2VOVolyn000016Latvia#200c2MAMadona00001DBolivia#070c2PPotos&iacute;000024PolandCounties#PL.OP.OM0c2OOMOpole000026MarshallIsland#MH.MH.RL0c2RLRongelap000021SolomonIsland#SB.ML0c2MLMalaita00001BChina2#CN.LN0c2LNLiaoning00001CAlgeria#DZ.GR0c2GRGhardaia000018Liberia#LR.LF0c2LFLofa000025Sudan#SD.GZ0c2GZAl Jazirah (Gezira)000017Yemen#YE.AB0c2ABAbyan000023Burundi#BI.BU0c2BUBujumbura Rural000031Guinea#GN.NZ0c2NZNz&eacute;r&eacute;kor&eacute;000017Denmark#0140c2VEVejle00001AKentucky#1650c2MEMenifee00001CFlorida#0930c2OKOkeechobee000020Mississippi#0750c2LULauderdale000021Pennsylvania#0410c2CUCumberland000018Arkansas#0650c2IZIzard00001DWestVirginia#0930c2TUTucker000027SpainProvinces#0040c2AMAlmer&iacute;a00001AColorado#0730c2LILincoln00001BMontana#0430c2JEJefferson00001DSouthDakota#1110c2SASanborn000019Alabama#0890c2MDMadison000019India#0170c2KAKarnataka000019Asia#0410c2TJTajikistan00001EAlaska#1500c2KOKodiak Island000013Utah#0250c2KAKane00001ATexas#3210c2MAGMatagorda000022Oceania#0090c2PGPapua New Guinea00001BLouisiana#0650c2MAMadison000018Georgia#1290c2GOGordon000018Germany#0030c2BEBerlin00002ECentralAmericawithCaribbeans#050c2HOHonduras000015Hungary#240c2ZAZala000024EuropeRegion#030c2WRWestern Region000016Turkey#450c2MNManisa000024USANorthEastRegion#360c2NYNew York000025DominicanRepublic#160c2PNPedernales000020WorldwithCountries#480c2TDChad00001CSweden#070c2ZJ&auml;mtland000020Azerbaijan#430c2QDQubadl&#305;00001CUkraine#250c2ZKZakarpattia000014Latvia#210c2OGOgre00001ABolivia#080c2SSanta Cruz00001EThailand#TH.NK0c2NKNong Khai00001FCambodia#KH.SR0c2SRSvay Rieng00001AEurope2#EU.CS0c2CSSerbia000020Macedonia#MK.ZK0c2ZKZelenikovo000017Yemen#YE.SD0c2SDSadah00001DSamoa #WS.SA0c2SASatupaitea00001EMacedonia#MK.GT0c2GTGostivar00001ESerbia#RS.SC0c2SCNorth Backa00001ENorthDakota#0830c2SHSheridan000018Texas#1410c2ELPEl Paso000024Denmark#0150c2VSVestsj&aelig;lland000015Ohio#1030c2MEMedina000019Nebraska#0730c2GOGosper00001AMinnesota#0010c2AIAitkin00001FConnecticut#0010c2FAFairfield00001CTennessee#1630c2SLSullivan00001CMaryland#0210c2FRFrederick000021SpainProvinces#0050c2ASAsturias000019Oklahoma#1150c2OTOttawa000014Iowa#1670c2SISioux00001AWisconsin#0570c2JUJuneau000016Texas#5030c2YOUYoung000016India#0180c2KEKerala00001CWashington#0170c2DODouglas000017Asia#0420c2THThailand000016Indiana#1190c2OWOwen00001ANewYork#0910c2SASaratoga00001DNorthCarolina#1590c2RWRowan00001BVirginia#0610c2FUFauquier000017Georgia#3110c2WTWhite00001AKansas#1130c2MPMcpherson00001ESouthCarolina#0850c2SUSumter000017Oceania#0100c2WSSamoa000017Illinois#1490c2PKPike00001AMissouri#0690c2DUDunklin00001DGermany#0040c2BRBrandenburg000027MadagascarRegions#MG.TL.ME0c2MEMenabe00002FMadagascarRegions#MG.AV.VA0c2VAVakinankaratra00002FCentralAmericawithCaribbeans#060c2NUNicaragua000024EuropeRegion#040c2EREastern Region000022Turkey#460c2KMKahramanmara&#351;000023WorldwithCountries#490c2KMComoros000022Sweden#080c2FJ&ouml;nk&ouml;ping000019Azerbaijan#440c2QRQusar00001BUkraine#260c2ZPZaporizhia00001BLatvia#220c2PRPrei&#316;i000016Bolivia#090c2TTarija000022SierraLeone#SL.SO.MO0c2MOMoyamba000027FrenchGuiana#GF.SL.GS0c2GSGrand Santi000033PolandCounties#PL.LD.PM0c2LPMPiotrkow Trybunalski000017Samoa #WS.AA0c2AAAana00002ABrazilRegion#BR.SE0c2SESouth East Region00001ATuvalu#TV.NA0c2NANanumea000018Nigeria#NG.KN0c2KNKano000018Mongolia#MN.TO0c2TOTov000027Zimbabwe#ZW.MS0c2MSMatabeleland South000020Serbia#RS.SD0c2SDCentral Banat000019Serbia#RS.RN0c2RNRasina000016Yemen#YE.AD0c2ADAdan000019Uganda#UG.IN0c2INIganga000018Germany#0050c2BMBremen000018Denmark#0160c2VIViborg000019Kentucky#1670c2MCMercer000018Florida#0950c2OROrange00001EMississippi#0770c2LWLawrence00001EPennsylvania#0430c2DADauphin00001AArkansas#0670c2JAJackson00001CWestVirginia#0950c2TYTyler00001ESpainProvinces#0060c2AVAvila000018Colorado#0750c2LOLogan00001EMontana#0450c2JBJudith Basin00001DSouthDakota#1130c2SHShannon000019Alabama#0910c2MRMarengo00001BIndia#0190c2LALakshadweep000016Utah#0270c2MIMillard000019Texas#3230c2MAVMaverick000021Oceania#0110c2SBSolomon Islands00001DLouisiana#0670c2MOMorehouse000017Georgia#1310c2GRGrady00002CCentralAmericawithCaribbeans#070c2PMPanama000024EuropeRegion#050c2CRCentral Region000027DominicanRepublic#180c2PPPuerto Plata000029WorldwithCountries#500c2CICote d Ivoire00001BUSA#NC0c2NCNorth Carolina000015Sweden#090c2HKalmar00001CAfghanistan#170c2LOWLowgar00001FAzerbaijan#450c2STSaatl&#305;000019Ukraine#270c2ZTZhytomyr00001CLatvia#230c2RER&#275;zekne000021SierraLeone#SL.EA.KE0c2KEKenema000025FranceDepartment#FR.MB0c2MBMorbihan000020Cambodia#KH.ST0c2STStung Treng000021CapeVerde#CV.SV0c2SVSao Vicente00001CSriLanka#LK.KE0c2KEKegalle000018Nigeria#NG.KO0c2KOKogi00001BEurope2#EU.DK0c2DKDenmark000022BurkinaFaso#BF.KJ0c2KJKomondjari00001FMacedonia#MK.GV0c2GVGevgelija000017Nepal#NP.BH0c2BHBheri000020Mongolia#MN.BO0c2BOBayan Olgii000017Guinea#GN.PI0c2PIPita000019Germany#0060c2HAHamburg00001BNorthDakota#0850c2SISioux000016Texas#1430c2ERAErath000014Ohio#1050c2MIMeigs000018Nebraska#0750c2GTGrant000019Minnesota#0030c2ANAnoka00001EConnecticut#0030c2HAHartford00001ATennessee#1650c2SUSumner00001AMaryland#0230c2GAGarrett000020SpainProvinces#0070c2BABadajoz000019Oklahoma#1170c2PAPawnee000014Iowa#1690c2STStory00001BWisconsin#0590c2KEKenosha000017Texas#5050c2ZAPZapata00001EIndia#0200c2MPMadhya Pradesh00001AWashington#0190c2FEFerry00001BAsia#0440c2TMTurkmenistan000017Indiana#1210c2PAParke00001DNewYork#0930c2SCSchenectady000022NorthCarolina#1610c2RURutherford000018Virginia#0630c2FLFloyd00001BGeorgia#3130c2WHWhitfield000017Kansas#1150c2MNMarion00001DSouthCarolina#0870c2UNUnion000017Oceania#0120c2TOTonga000017Illinois#1510c2POPope00001BMissouri#0710c2FRFranklin00002ACentralAmericawithCaribbeans#080c2CUCuba00001ATurkey#480c2MGMu&#287;la000020USANorthEastRegion#390c2OHOhio000022DominicanRepublic#190c2SCSalcedo00003CWorldwithCountries#510c2CDDemocratic Republic of the Congo000016USA#MN0c2MNMinnesota000019USA#ND0c2NDNorth Dakota000017Sweden#100c2WDalarnas00001FAfghanistan#180c2NANNangarhar00001DAzerbaijan#460c2SBSabirabad000024Latvia#240c2REZR&#275;zekne (city)000024Paraguay#010c2AAAlto Paran&aacute;000023PolandCounties#PL.WP.PI0c2WPIPila00001ALaos#LA.CH0c2CHChampasak000021Thailand#TH.NN0c2NNNakhon Nayok00002AHungaryRegions#HU.CH0c2CHCentral Hungary000023Qatar#QA.JB0c2JBJariyan Al Batnah000018Germany#0070c2HEHessen00001BKentucky#1690c2MFMetcalfe000019Florida#0970c2OSOsceola00001BMississippi#0790c2LKLeake00001FPennsylvania#0450c2DLDelaware00001CArkansas#0690c2JEJefferson00001DWestVirginia#0970c2UPUpshur000021SpainProvinces#0080c2BLBaleares000017Colorado#0770c2MEMesa000016Montana#0470c2LALake00001BSouthDakota#1150c2SPSpink000018Alabama#0930c2MIMarion00001BIndia#0210c2MAMaharashtra000015Utah#0290c2MOMorgan000017Texas#3250c2MEDMedina000018Oceania#0130c2TVTuvalu000020Louisiana#0690c2NANatchitoches000018Georgia#1330c2GEGreene00002DCentralAmericawithCaribbeans#090c2BSBahamas000018Turkey#490c2MSMu&#351;000028DominicanRepublic#200c2SMSaman&aacute;000024WorldwithCountries#520c2DJDjibouti000015USA#MO0c2MOMissouri000015USA#NE0c2NENebraska00001CAfghanistan#190c2NIMNimruz000022Azerbaijan#470c2SK&#350;&#601;ki000019Latvia#250c2RIR&#299;ga000019Paraguay#020c2AMAmambay00001BEastTimor#TL.AL0c2ALAileu00001EEastTimor#TL.BB0c2BBBobonaro00001FThailand#TH.NO0c2NONonthaburi00001FSriLanka#LK.KG0c2KGKurunegala00001EKyrgyzstan#KG.GB0c2GBBishkek000029BurkinaFaso#BF.KL0c2KLKoulp&eacute;logo00001ERwanda#RW.KV0c2KVKigali City000019Yemen#YE.SH0c2SHShabwah00001FAngola#AO.CN0c2CNCuanza Norte00001DZimbabwe#ZW.MV0c2MVMasvingo000028Germany#0080c2MEMecklenburg-Vorpommern00001BNorthDakota#0870c2SLSlope000016Texas#1450c2FALFalls000015Ohio#1070c2MCMercer00001ANebraska#0770c2GEGreeley00001AMinnesota#0050c2BEBecker000020Connecticut#0050c2LILitchfield00001ATennessee#1670c2TITipton00001AMaryland#0250c2HAHarford000022SpainProvinces#0090c2BRBarcelona000018Oklahoma#1190c2PYPayne000013Iowa#1710c2TATama00001CWisconsin#0610c2KWKewaunee000017Texas#5070c2ZAVZavala000017India#0220c2MNManipur00001DWashington#0210c2FRFranklin000019Asia#0460c2UZUzbekistan000017Indiana#1230c2PEPerry00001BNewYork#0950c2SHSchoharie00001FNorthCarolina#1630c2SASampson00001BVirginia#0650c2FVFluvanna000018Georgia#3150c2WCWilcox000019Kansas#1170c2MSMarshall000024SouthCarolina#0890c2WIWilliamsburg000019Oceania#0140c2VUVanuatu00001AIllinois#1530c2PUPulaski00001CMissouri#0730c2GAGasconade000034CentralAmericawithCaribbeans#100c2KYCayman Islands00001DTurkey#500c2NVNev&#351;ehir000038DominicanRepublic#210c2SZS&aacute;nchez Ram&iacute;rez000021WorldwithCountries#530c2EGEgypt000018Sweden#120c2GKronoberg000029Azerbaijan#480c2SA&#350;&#601;ki (City)000021Latvia#260c2RIXR&#299;ga (city)000025MarshallIsland#MH.MH.RR0c2RRRongrik00001CEastTimor#TL.AM0c2AMAmbeno00001CEastTimor#TL.BC0c2BCBaucau000020FranceDepartment#FR.LO0c2LOLot000022Thailand#TH.NP0c2NPNakhon Pathom00001CKuwait#KW.AH0c2AHAl Ahmadi000024BurkinaFaso#BF.KM0c2KMKomo&eacute;000025Zimbabwe#ZW.MW0c2MWMashonaland West000028CentralAfricanRepublic#CF.AC0c2ACOuham00001FGermany#0090c2NINiedersachsen000019Kentucky#1710c2MNMonroe00001CFlorida#0990c2PBPalm beach000019Mississippi#0810c2LELee00001APennsylvania#0470c2ELElk00001AArkansas#0710c2JOJohnson00001CWestVirginia#0990c2WAWayne000020SpainProvinces#0100c2BIBizkaia00001AColorado#0790c2MIMineral000021Montana#0490c2LCLewis and Clark00001DSouthDakota#1170c2STStanley00001AAlabama#0950c2MSMarshall000019India#0230c2MEMeghalaya000016Asia#0470c2VNVietnam000014Utah#0310c2PIPiute000017Texas#3270c2MENMenard00001FOceania#0150c2NCNew Caledonia00001BLouisiana#0710c2OROrleans000022Virginia#7900c2SNStaunton (City)00001AGeorgia#1350c2GWGwinnett00002DCentralAmericawithCaribbeans#110c2JMJamaica000028USANorthEastRegion#420c2PAPennsylvania00002DWorldwithCountries#540c2GQEquatorial Guinea00001AAzerbaijan#490c2SLSalyan000016Latvia#270c2SASaldus000021Paraguay#040c2CGCaaguaz&uacute;00002ANovaScotia#CA.NS.ET0c2ETEvangeline Trail00001CEastTimor#TL.AN0c2ANAinaro00001BUganda#UG.IS0c2ISIsingiro000018Uganda#UG.JI0c2JIJinja000024CaymanIslands#KY.NS0c2NSNorth Side00001BEthiopia#ET.OR0c2OROromia000020CapeVerde#CV.SZ0c2SZSanta Cruz00001CTuvalu#TV.NF0c2NFNukufetau000028Eritrea#ER.DK0c2DKDebubawi Keyih Bahri000016Mali#ML.MO0c2MOMopti00001BPanama#PA.VR0c2VRVeraguas00001BEurope2#EU.EE0c2EEEstonia00001AEurope2#EU.CY0c2CYCyprus000030BurkinaFaso#BF.KN0c2KNK&eacute;n&eacute;dougou000030CentralAfricanRepublic#CF.SE0c2SESangha-Mbaere000014Chad#TD.LC0c2LCLac000018Serbia#RS.RS0c2RSRaska000025Germany#0100c2NONordrhein-Westfalen00001BNorthDakota#0890c2STStark000017Texas#1470c2FANFannin000026Virginia#6100c2FCFalls Church (City)000014Ohio#1090c2MMMiami000017Nebraska#0790c2HAHall00001CMinnesota#0070c2BLBeltrami00001FConnecticut#0070c2MIMiddlesex000019Michigan#0010c2ALAlcona00001DTennessee#1690c2TRTrousdale000019Maryland#0270c2HOHoward00001FSpainProvinces#0110c2BUBurgos00001COklahoma#1210c2PIPittsburg000015Iowa#1730c2TYTaylor00001DWisconsin#0630c2LCLa Crosse000017India#0240c2MIMizoram00001DWashington#0230c2GFGarfield000016Indiana#1250c2PIPike00001ANewYork#0970c2SUSchuyler000020NorthCarolina#1650c2SCScotland00001BVirginia#0670c2FKFranklin000018Georgia#3170c2WLWilkes000016Kansas#1190c2MEMeade00001CSouthCarolina#0910c2YOYork000019Illinois#1550c2PTPutnam000019Missouri#0750c2GNGentry00002BCentralAmericawithCaribbeans#120c2HTHaiti000019Estonia#010c2HAHarjumaa000014Turkey#520c2OROrdu000023DominicanRepublic#230c2JUSan Juan000023WorldwithCountries#550c2EREritrea00001AUSA#NH0c2NHNew Hampshire00001ASweden#140c2BDNorrbotten000024Azerbaijan#500c2SI&#350;amax&#305;000015Latvia#280c2TATalsi000020Paraguay#050c2CZCaazap&aacute;000025PolandCounties#PL.WP.PM0c2WPMPoznan00002BMarshallIsland#MH.MH.AI0c2AIAilinglapalap00001EVietnam#VN.QB0c2QBQuang Binh000026Thailand#TH.NR0c2NRNakhon Ratchasima00001BPakistan#PK.PB0c2PBPunjab00001CTuvalu#TV.NG0c2NGNanumanga00001BNigeria#NG.KT0c2KTKatsina000022Europe2#EU.CZ0c2CZCzech Republic000025BurkinaFaso#BF.LE0c2LEL&eacute;raba000022Burma#MM.SA0c2SASagaing Division00001DMacedonia#MK.ZR0c2ZRZrnovci000019Panama#PA.DR0c2DRDarien000017Yemen#YE.TA0c2TATaizz000021Germany#0110c2RHRheinland-Pfalz00001DKentucky#1730c2MYMontgomery000017Florida#1010c2PAPasco00001DMississippi#0830c2LFLeflore00001BPennsylvania#0490c2ERErie00001CArkansas#0730c2LALafayette00001EWestVirginia#1010c2WEWebster000027SpainProvinces#0120c2CAC&aacute;ceres000019Colorado#0810c2MOMoffat000019Montana#0510c2LBLiberty00001BSouthDakota#1190c2SUSully000018Alabama#0970c2MOMobile000018India#0250c2NANagaland000015Asia#0490c2TWTaiwan000013Utah#0330c2RIRich000018Texas#3290c2MIDMidland00001CLouisiana#0730c2OUOuachita00001BGeorgia#1370c2HAHabersham000038CentralAmericawithCaribbeans#130c2DODominican Republic000018Estonia#020c2HIHiiumaa000014Turkey#530c2RIRize000028USANorthEastRegion#440c2RIRhode Island000036DominicanRepublic#240c2PMSan Pedro de Macor&iacute;s000024WorldwithCountries#560c2ETEthiopia000018USA#MS0c2MSMississippi00001ASweden#150c2T&Ouml;rebro00001EAfghanistan#230c2KANKandahar000024Azerbaijan#510c2SM&#350;&#601;mkir000016Latvia#290c2TUTukums000019Paraguay#060c2CECentral000024MarshallIsland#MH.MH.TA0c2TATaongi00001CRussia#RU.PR0c2PRPrimorsky00001BMongolia#MN.BU0c2BUBulgan000020Mongolia#MN.DA0c2DADarkhan Uul000019Uganda#UG.KA0c2KAKabale00001FBotswana#BW.SE0c2SESouth East000022FranceDepartment#FR.LR0c2LRLoire000023FranceDepartment#FR.MH0c2MHManche000021Thailand#TH.NS0c2NSNakhon Sawan000028Pakistan#PK.NW0c2NWNorth West Frontier000021BurkinaFaso#BF.KP0c2KPKompienga00003ATajikistan#TJ.RR0c2RRRegions of Republican Subordination00001AYemen#YE.BA0c2BAAl Bayda000019Missouri#0770c2GEGreene00001AGermany#0120c2SASaarland00001CNorthDakota#0910c2SESteele000018Texas#1490c2FAYFayette000015Ohio#1110c2MOMonroe00001BNebraska#0810c2HMHamilton00001AMinnesota#0090c2BNBenton00001FConnecticut#0090c2NHNew Haven000018Michigan#0030c2AGAlger00001ATennessee#1710c2UIUnicoi000017Maryland#0290c2KEKent000025SpainProvinces#0130c2CDC&aacute;diz00001BOklahoma#1230c2POPontotoc000014Iowa#1750c2UNUnion00001DWisconsin#0650c2LALafayette000016India#0260c2OROrissa00001AWashington#0250c2GAGrant000018Asia#0500c2HKHong Kong000018Indiana#1270c2POPorter000018NewYork#0990c2SESeneca00001ENorthCarolina#1670c2STStanly00001CVirginia#0690c2FDFrederick00001BGeorgia#3190c2WIWilkinson000016Kansas#1210c2MIMiami00001BIllinois#1570c2RARandolph000035NewfoundlandandLabrador#CA.NF.WS0c2WSWestern Region000031CentralAmericawithCaribbeans#140c2PRPuerto Rico00001CEstonia#030c2IVIda-Virumaa000017Turkey#540c2SKSakarya000023DominicanRepublic#250c2STSantiago000021WorldwithCountries#570c2GAGabon000014USA#MT0c2MTMontana000017USA#NJ0c2NJNew Jersey000025Sweden#160c2E&Ouml;sterg&ouml;tland00001CAfghanistan#240c2KDZKondoz000019Azerbaijan#520c2SXSamux000015Latvia#300c2VKValka000023Paraguay#070c2CNConcepci&oacute;n000023SierraLeone#SL.EA.KL0c2KLKailahun000018Russia#RU.PS0c2PSPskov00001BLibya#LY.QB0c2QBAl Qubbah000028Thailand#TH.NT0c2NTNakhon Si Thammarat00001CTuvalu#TV.NI0c2NINiulakita000020SriLanka#LK.KL0c2KLKilinochchi00001BCapeVerde#CV.BR0c2BRBrava00001DAngola#AO.CS0c2CSCuanza Sul000016Georgia#1390c2HLHall000019Germany#0130c2SCSachsen000019Kentucky#1750c2MAMorgan00001AFlorida#1030c2PLPinellas00001DMississippi#0850c2LNLincoln00001EPennsylvania#0510c2FAFayette00001BArkansas#0750c2LWLawrence00001DWestVirginia#1030c2WTWetzel000022SpainProvinces#0140c2CNCantabria00001CColorado#0830c2MNMontezuma000019Montana#0530c2LILincoln00001ASouthDakota#1210c2TOTodd000018Alabama#0990c2MNMonroe000014Asia#0510c2MOMacau000018Utah#0350c2SLSalt Lake000016Texas#3310c2MILMilam00001FLouisiana#0750c2PLPlaquemines000035NewfoundlandandLabrador#CA.NF.ES0c2ESEastern Region000038CentralAmericawithCaribbeans#150c2KNSt.Kitts and Nevis00001EEstonia#040c2JRJ&auml;rvamaa000016Turkey#550c2SSSamsun000034DominicanRepublic#260c2SRSantiago Rodr&iacute;guez000021WorldwithCountries#580c2GHGhana000025Azerbaijan#530c2SYSiy&#601;z&#601;n000018Latvia#310c2VMValmiera00001CParaguay#080c2CRCordillera000017Serbia#RS.SM0c2SMSrem000017Yemen#YE.AM0c2AMAmran000023FranceDepartment#FR.LT0c2LTLoiret000019Nigeria#NG.KW0c2KWKwara000022BurkinaFaso#BF.KR0c2KRKouritenga00001BLiberia#LR.MG0c2MGMargibi00001BBhutan#BT.LH0c2LHLhuntshi000016Yemen#YE.SN0c2SNSana000019Sudan#SD.JG0c2JGJungoli00001BIllinois#1590c2RIRichland000019Missouri#0790c2GRGrundy000020Germany#0140c2SHSachsen-Anhalt00001ENorthDakota#0930c2SUStutsman000017Texas#1510c2FISFisher000019Ohio#1130c2MGMontgomery000019Nebraska#0830c2HRHarlan00001DMinnesota#0110c2BSBig Stone000020Connecticut#0110c2NLNew London00001AMichigan#0050c2AEAllegan000019Tennessee#1730c2UNUnion00001DMaryland#0310c2MOMontgomery000029SpainProvinces#0150c2CSCastell&oacute;n00001FOklahoma#1250c2PWPottawatomie000018Iowa#1770c2VBVan Buren00001CWisconsin#0670c2LNLanglade000016India#0280c2PUPunjab000021Washington#0270c2GRGrays Harbor000017Indiana#1290c2PSPosey000019NewYork#1010c2STSteuben00001ENorthCarolina#1690c2SOStokes000018Virginia#0710c2GIGiles000017Georgia#3210c2WOWorth000018Africa#0010c2DZAlgeria000019Kansas#1230c2MCMitchell00002DSaskatchewan#CA.SK.SW0c2SWSouth West Region00002DCentralAmericawithCaribbeans#160c2AGAntigua000021Estonia#050c2JNJ&otilde;gevamaa000015Romania#010c2ABAlba000023DominicanRepublic#270c2VAValverde000022WorldwithCountries#590c2GNGuinea000020Sweden#180c2DS&ouml;dermanland00001CAfghanistan#260c2TAKTakhar000021Azerbaijan#540c2SQSumqay&#305;t000019Latvia#320c2VEVentspils000013World#AS0c2ASAsia00001FSierraLeone#SL.EA.KN0c2KNKono00002CDistrictofColumbia#US.DC.NW0c2NWNorth West000028PolandCounties#PL.MZ.CI0c2MCICieckanow00001ESerbia#RS.SN0c2SNNorth Banat00001BMongolia#MN.DD0c2DDDornod000026CoteDivoire#CI.HT0c2HTHaut-Sassandra00001EUganda#UG.KD0c2KDKaberamaido000025BrazilRegion#BR.SO0c2SOSouth Region00001ANamibia#NA.KU0c2KUKunene00001DBurkinaFaso#BF.KS0c2KSKossi000019Angola#AO.CU0c2CUCunene000019Georgia#1410c2HNHancock000024Germany#0150c2SSSchleswig-Holstein00001DKentucky#1770c2MBMuhlenberg000016Florida#1050c2POPolk00001DMississippi#0870c2LDLowndes00001DPennsylvania#0530c2FOForest000016Arkansas#0770c2LELee00001BWestVirginia#1050c2WIWirt00001ESpainProvinces#0160c2CECeuta00001BColorado#0850c2MTMontrose000018Montana#0550c2MCMcCone00001BSouthDakota#1230c2TRTripp00001CAlabama#1010c2MTMontgomery000019India#0290c2RARajasthan000017Africa#0020c2AOAngola000017Utah#0370c2SJSan Juan000016Texas#3330c2MISMills000021Louisiana#0770c2PCPointe Coupee000018Arizona#0010c2APApache00002ECentralAmericawithCaribbeans#170c2DMDominica000015Romania#020c2ARArad000015Turkey#570c2SPSinop000023DominicanRepublic#280c2SEEl Seibo000029WorldwithCountries#600c2GWGuinea-Bissau000017USA#NM0c2NMNew Mexico00001CAfghanistan#270c2WARWardak000022Azerbaijan#550c2SU&#350;u&#351;a000021Latvia#330c2VENVentspils (city)00001FParaguay#100c2GUGuair&aacute;000022FrenchGuiana#GF.CY.KR0c2KRKourou00001BUganda#UG.KE0c2KEKamwenge000020Samoa #WS.AL0c2ALAiga-i-le-Tai00002BFranceDepartment#FR.ML0c2MLMaine et Loire00001EVietnam#VN.QG0c2QGQuang Ngai00001FKyrgyzstan#KG.YK0c2YKYsyk Kol00001FThailand#TH.NW0c2NWNarathiwat00001CThailand#TH.PC0c2PCPhichit00001DTuvalu#TV.NL0c2NLNukulaelae000019Panama#PA.EM0c2EMEmbera000025CentralAmerica2#CE.NI0c2NINicaragua00001DMacedonia#MK.IL0c2ILIlinden00001EIllinois#1610c2RORock Island00001BMissouri#0810c2HAHarrison00001CGermany#0160c2THThueringen00001CNorthDakota#0950c2TOTowner000016Texas#1530c2FLOFloyd000015Ohio#1150c2MNMorgan000018Nebraska#0850c2HYHayes00001EMinnesota#0130c2BUBlue Earth00001DConnecticut#0130c2TOTolland000019Michigan#0070c2APAlpena00001DTennessee#1750c2VBVan Buren000022Maryland#0330c2PGPrince George's000024SpainProvinces#0170c2CRCiudad Real00001DOklahoma#1270c2PUPushmataha000016Iowa#1790c2WAWapello00001BWisconsin#0690c2LILincoln000016India#0300c2SISikkim00001BWashington#0290c2ISIsland000019Indiana#1310c2PUPulaski000019NewYork#1030c2SFSuffolk00001DNorthCarolina#1710c2SUSurry00001DVirginia#0730c2GLGloucester000016Africa#0030c2BJBenin00001BKansas#1250c2MGMontgomery00002ECentralAmericawithCaribbeans#180c2LCSt.Lucia000023Estonia#070c2LNL&auml;&auml;nemaa00001BRomania#030c2AGArge&#351;000015Turkey#580c2SVSivas000025DominicanRepublic#290c2HMHato Mayor000021WorldwithCountries#610c2KEKenya00001BAfghanistan#280c2ZABZabol000029Azerbaijan#560c2SS&#350;u&#351;a (City)000018World#AU0c2AUAustralia00001FParaguay#110c2ITItap&uacute;a000019Uganda#UG.KF0c2KFKotido000019Oman#OM.WU0c2WUAl Wusta00002FFranceDepartment#FR.MM0c2MMMeurthe et Moselle000019Congo#CG.KO0c2KOKouilou00001ACongo#CG.LE0c2LELekoumou00001FCapeVerde#CV.BV0c2BVBoa Vista00001AAlgeria#DZ.IL0c2ILIllizi00001EUzbekistan#UZ.FA0c2FAFargona000023Laos#LA.VI0c2VIVientiane Province000020Philippines#PH.GU0c2GUGuimaras00001AGeorgia#1430c2HRHaralson000019Kentucky#1790c2NENelson000018Florida#1070c2PNPutnam00001DMississippi#0890c2MAMadison00001FPennsylvania#0550c2FRFranklin00001AArkansas#0790c2LILincoln00001BWestVirginia#1070c2WOWood000027SpainProvinces#0180c2COC&oacute;rdoba000019Colorado#0870c2MGMorgan000019Montana#0570c2MAMadison00001CSouthDakota#1250c2TUTurner000018Alabama#1030c2MGMorgan00001AIndia#0310c2TNTamil Nadu000019Africa#0040c2BWBotswana000023Alaska#1640c2PLPeninsula and Lake000016Utah#0390c2SASanpete000019Texas#3350c2MITMitchell00001BLouisiana#0790c2RARapides000019Arizona#0030c2COCochise000028YukonTerritory#CA.YT.WH0c2WHWhitehorse000018Nicaragua#010c2BOBoaco000044CentralAmericawithCaribbeans#190c2VCSt.Vincent and the Grenadlines000028Estonia#080c2LVL&auml;&auml;ne-Virumaa00001BRomania#040c2BCBac&#259;u00001DTurkey#590c2TGTekirda&#287;000023USANorthEastRegion#500c2VTVermont00001BAustria#010c2BUBurgenland000022DominicanRepublic#300c2VELa Vega000023WorldwithCountries#620c2LSLesotho000016Sweden#210c2CUppsala00001DAfghanistan#290c2PKAPaktika000024Azerbaijan#570c2TAT&#601;rt&#601;r00001AParaguay#120c2MIMisiones00001BTanzania#TZ.DO0c2DODodoma00001EMongolia#MN.DG0c2DGDornogovi000019Uganda#UG.KG0c2KGKiboga000020Thailand#TH.PE0c2PEPhetchaburi00001ASomalia#SO.SA0c2SASanaag00001CBurma#MM.SH0c2SHShan State000020Philippines#PH.ZM0c2ZMZambales000018Chad#TD.MA0c2MAMandoul000019Sudan#SD.KA0c2KAKassala000034CentralAfricanRepublic#CF.BB0c2BBBamingui-Bangoran00001FPhilippines#PH.IB0c2IBIsabela00001CIllinois#1630c2SCSt. Clair000018Missouri#0830c2HEHenry00001CNorthDakota#0970c2TRTraill000016Texas#1550c2FOAFoard000015Ohio#1170c2MWMorrow00001CNebraska#0870c2HTHitchcock000019Minnesota#0150c2BWBrown00001DConnecticut#0150c2WIWindham000019Michigan#0090c2ANAntrim00001ATennessee#1770c2WRWarren00001FMaryland#0350c2QAQueen Anne's00001FSpainProvinces#0190c2CUCuenca00001EOklahoma#1290c2RMRoger Mills000015Iowa#1810c2WRWarren00001DWisconsin#0710c2MAManitowoc000017India#0320c2TRTripura00001EWashington#0310c2JEJefferson000018Indiana#1330c2PTPutnam00001ANewYork#1050c2SVSullivan00001DNorthCarolina#1730c2SWSwain00001CVirginia#0750c2GOGoochland00001DAfrica#0050c2BFBurkina Faso000017Kansas#1270c2MRMorris000019Nicaragua#020c2CACarazo00002ECentralAmericawithCaribbeans#200c2BBBarbados000016Romania#050c2BHBihor000015Turkey#600c2TTTokat000024USANorthEastRegion#510c2VAVirginia00001DAustria#020c2KAK&auml;rnten000030DominicanRepublic#310c2MNMonse&ntilde;or Nouel000023WorldwithCountries#630c2LILiberia00001CSweden#220c2SV&auml;rmland00001BAfghanistan#300c2BALBalkh000019Azerbaijan#580c2TOTovuz000028Paraguay#130c2NE&Ntilde;eembuc&uacute;00001BUganda#UG.KH0c2KHKiruhura00001BSerbia#RS.BG0c2BGBelgrade000024FranceDepartment#FR.MO0c2MOMoselle00001BVietnam#VN.PT0c2PTPhu Tho00002FHungaryRegions#HU.CT0c2CTCentral Transdanubia000027Europe2#EU.FD0c2FDFaroe Islands (Den)000028BurkinaFaso#BF.KW0c2KWKourw&eacute;ogo00002BPhilippines#PH.ZN0c2ZNZamboanga del Norte00001DLouisiana#0810c2RERed River00001AArizona#0050c2CCCoconino000021Virginia#8000c2SFSuffolk (City)000018Georgia#1450c2HIHarris00001BKentucky#1810c2NINicholas00001BFlorida#1090c2SJSt. Johns00001CMississippi#0910c2MRMarion00001CPuertoRico#1010c2MVMorovis00001DPennsylvania#0570c2FUFulton00001FArkansas#0810c2LRLittle River00001EWestVirginia#1090c2WYWyoming000029SpainProvinces#0200c2GUGuip&uacute;zcoa000018Colorado#0890c2OTOtero000019Montana#0590c2MEMeagher00001BSouthDakota#1270c2UNUnion000017Alabama#1050c2PEPerry00001DIndia#0330c2UPUttar Pradesh000014Iowa#0010c2ADAdair000018Africa#0060c2BIBurundi000015Utah#0410c2SESevier000019Texas#3370c2MONMontague000019Cyprus#010c2FAFamagusta00001DNicaragua#030c2CIChinandega00002ACzechRepublic#780c2JMJihomoravsk&yacute;00002DCentralAmericawithCaribbeans#210c2GDGrenada00002FRomania#060c2BNBistri&#355;a-N&#259;s&#259;ud000017Turkey#610c2TBTrabzon00001EDominica#020c2ANSaint Andrew000026Austria#030c2NINieder&ouml;sterreich000026DominicanRepublic#320c2MPMonte Plata000021WorldwithCountries#640c2LRLibya000021Sweden#230c2ACV&auml;sterbotten00001DAfghanistan#310c2JOWJowzjan000018Azerbaijan#590c2UCUcar00001EAntigua#030c2SGESaint George000022MarshallIsland#MH.MH.AR0c2ARArno000018Russia#RU.PZ0c2PZPenza000019Uganda#UG.KI0c2KIKibale000023FranceDepartment#FR.LZ0c2LZLozere00001DThailand#TH.PG0c2PGPhangnga00002ATrinidadandTobago#TT.SA0c2SASaint Andrew000019Eritrea#ER.DU0c2DUDebub000019Illinois#1650c2SASaline00001AMissouri#0850c2HKHickory00001BNorthDakota#0990c2WAWalsh00001ATexas#1570c2FBEFort Bend000022Virginia#6200c2FRFranklin (City)000018Ohio#1190c2MKMuskingum000017Nebraska#0890c2HOHolt00001BMinnesota#0170c2CACarlton000018Kentucky#0010c2ADAdair000019Michigan#0110c2ARArenac00001ETennessee#1790c2WSWashington00001DMaryland#0370c2SMSt. Mary's00001FSpainProvinces#0210c2GIGirona000019Oklahoma#1310c2RORogers000019Iowa#1830c2WSWashington00001CWisconsin#0730c2MRMarathon00001BIndia#0340c2UTUttaranchal000019Washington#0330c2KGKing00001AIndiana#1350c2RARandolph000017NewYork#1070c2TITioga000024NorthCarolina#1750c2TRTransylvania00001AVirginia#0770c2GRGrayson000019Africa#0070c2CMCameroon000017Kansas#1290c2MTMorton000017Cyprus#020c2KYKyrenia00001CNicaragua#040c2COChontales00002CCzechRepublic#790c2JCJiho&#269;esk&yacute;00003BCentralAmericawithCaribbeans#220c2TTTrinidad &amp; Tobago00001EEstonia#110c2PRP&auml;rnumaa00001ERomania#070c2BTBoto&#351;ani000017Turkey#620c2TCTunceli00001DDominica#030c2DASaint David000024Austria#040c2OBOber&ouml;sterreich00002FDominicanRepublic#330c2CRSan Crist&oacute;bal000026WorldwithCountries#650c2MSMadagascar000011USA#OH0c2OHOhio000022Sweden#240c2YV&auml;sternorrland00001EAfghanistan#320c2SAMSamangan000021Azerbaijan#600c2XZXa&ccedil;maz00001CAntigua#040c2SJOSaint John000022Paraguay#150c2PGParaguar&iacute;000024FrenchGuiana#GF.CY.MC0c2MCMacouria00001BUganda#UG.KJ0c2KJKyenjojo000019Tunisia#TN.GB0c2GBGabes00001FThailand#TH.PH0c2PHPhetchabun000018Togo#TG.SA0c2SASavanes00001DSriLanka#LK.KT0c2KTKalutara000025Somalia#SO.SD0c2SDShabeellaha Dhexe00001ACongo#CG.LI0c2LILikouala00001EBurkinaFaso#BF.LO0c2LOLoroum000034Morocco#MA.LB0c2LBLaayoune Boujdour Sakia El Hamra000020Macedonia#MK.JG0c2JGJegunovtse00001CLouisiana#0830c2RIRichland000016Arizona#0070c2GIGila000016Georgia#1470c2HTHart000017Kentucky#1830c2OHOhio00001BFlorida#1110c2SLSt. Lucie00001EMississippi#0930c2MSMarshall000021PuertoRico#1030c2NGNag&uuml;abo00001DPennsylvania#0590c2GRGreene000018Arkansas#0830c2LOLogan000020SpainProvinces#0220c2GRGranada000018Colorado#0910c2OUOuray000019Montana#0610c2MIMineral00001ESouthDakota#1290c2WAWalworth000019Alabama#1070c2PIPickens00001BIndia#0350c2WBWest Bengal000014Iowa#0030c2AAAdams00001BAfrica#0080c2CVCape Verde000015Utah#0430c2SUSummit00001BTexas#3390c2MOTMontgomery00003EYukonTerritory#CA.YT.WL0c2WLWatson Lake &amp; Southern Lakes000017Cyprus#030c2LALarnaca000020Nicaragua#050c2ESEstel&iacute;000024CzechRepublic#800c2VYVyso&#269;ina000020Estonia#120c2PLP&otilde;lvamaa00001CRomania#080c2BRBr&#259;ila000023Turkey#630c2SU&#350;anl&#305;urfa00001EDominica#040c2GOSaint George000029USANorthEastRegion#540c2WVWest Virginia000019Austria#050c2SASalzburg00002CDominicanRepublic#340c2NCDistrito Nacional000022WorldwithCountries#660c2MWMalawi00001FSweden#250c2UV&auml;stmanland00001FAfghanistan#330c2SARSar-e Pol000021Azerbaijan#610c2XAXank&#601;ndi00001CAntigua#050c2SMASaint Mary000022Paraguay#160c2PHPresidente Hayes00001EPhilippines#PH.IF0c2IFIfugao000022Tanzania#TZ.DS0c2DSDar es Salaam00001BSerbia#RS.SU0c2SUSumadija00001AUganda#UG.KK0c2KKKatakwi00001ABenin#BJ.LI0c2LILittoral00001DBotswana#BW.SO0c2SOSouthern00001DChina2#CN.NM0c2NMNei Mongol000022FranceDepartment#FR.MR0c2MRMarne00001DVietnam#VN.QM0c2QMQuang Nam00001CThailand#TH.PI0c2PIPattani00001DNigeria#NG.NA0c2NANassarawa00001FLiberia#LR.MO0c2MOMontserrado000022Chad#TD.LO0c2LOLogone Occidental00001FChad#TD.ME0c2MEMayo-Kebbi Est000018Mongolia#MN.UV0c2UVUvs00001FBurma#MM.BA0c2BABago Division00001BIllinois#1670c2SNSangamon000017Missouri#0870c2HLHolt00001ANorthDakota#1010c2WRWard000019Texas#1590c2FRAFranklin000014Ohio#1210c2NONoble000019Nebraska#0910c2HKHooker00001AMinnesota#0190c2CRCarver000018Kentucky#0030c2ALAllen000019Michigan#0130c2BABaraga000019Tennessee#1810c2WAWayne00001BMaryland#0390c2SOSomerset000024SpainProvinces#0230c2GAGuadalajara00001BOklahoma#1330c2SESeminole000014Iowa#1850c2WYWayne00001DWisconsin#0750c2MIMarinette00001BWashington#0350c2KTKitsap000018Indiana#1370c2RIRipley00001ANewYork#1090c2TOTompkins00001FNorthCarolina#1770c2TYTyrrell000019Virginia#0790c2GEGreene000029Africa#0090c2CRCentral African Republic000017Kansas#1310c2NMNemaha000023USASouthEastRegion#010c2ALAlabama000017Cyprus#040c2NINicosia00001ANicaragua#060c2GRGranada000029CzechRepublic#810c2KAKarlovarsk&yacute;000019Estonia#130c2RARaplamaa00001CRomania#090c2BVBra&#351;ov000019Turkey#640c2USU&#351;ak00001CDominica#050c2JNSaint John00001BAustria#060c2STSteiermark000022DominicanRepublic#350c2PVPeravia000020WorldwithCountries#670c2MLMali000019Sweden#260c2ABStockholm000029Iceland#030c2AR&Aacute;rness&yacute;sla00001BAfghanistan#340c2KNRKonar00001AAzerbaijan#620c2XRXanlar00001CAntigua#060c2SPASaint Paul00001BParaguay#170c2SPSan Pedro000029CentralAfricanRepublic#CF.BG0c2BGBangui000022FranceDepartment#FR.MS0c2MSMeuse000023FranceDepartment#FR.NI0c2NINievre00001EVietnam#VN.QN0c2QNQuang Ninh000029TrinidadandTobago#TT.SD0c2SDSaint David00001AQatar#QA.KH0c2KHAl Khawr00001BSriLanka#LK.MB0c2MBMannar000021Mauritania#MR.NO0c2NONouakchott00001ALouisiana#0850c2SASabine000018Arizona#0090c2GRGraham000017Georgia#1490c2HEHeard000019Kentucky#1850c2OLOldham00001CFlorida#1130c2SRSanta rosa00001CMississippi#0950c2MOMonroe00001EPuertoRico#1050c2NRNaranjito000021Pennsylvania#0610c2HUHuntingdon000019Arkansas#0850c2LKLonoke00001FSpainProvinces#0240c2HUHuelva00001CTennessee#0010c2ANAnderson000017Colorado#0930c2PAPark00001AMontana#0630c2MSMissoula000016Alabama#1090c2PKPike00001ANevada#0010c2CHChurchill000018Iowa#0050c2ALAllamakee000015Africa#0100c2TDChad000022Alaska#1700c2MAMatanuska-Susitna000015Utah#0450c2TOTooele000016Texas#3410c2MORMoore000018Cyprus#050c2LILimassol00001BNicaragua#070c2JIJinotega00003BCzechRepublic#820c2KRKr&aacute;lov&eacute;hradeck&yacute;000019Estonia#140c2SASaaremaa00001ARomania#100c2BIBucharest000013Turkey#650c2VAVan00001EDominica#060c2JHSaint Joseph000016Austria#070c2TITirol000032DominicanRepublic#360c2JOSan Jos&eacute; de Ocoa000026WorldwithCountries#680c2MRMauritania000015USA#OK0c2OKOklahoma000019USA#PA0c2PAPennsylvania00001ASweden#270c2MSk&aring;ne000035Iceland#040c2ABAustur-Bar&eth;astrandars&yacute;sla00001DAfghanistan#350c2LAGLaghman000022Azerbaijan#630c2XIX&#305;z&#305;00001DAntigua#070c2SPESaint Peter00001BEurope2#SOME ISLANDS0c2000030NorthWestTerritories#CA.NT.AC0c2ACArctic Coast00002BNovaScotia#CA.NS.HD0c2HDHalifax Dartmouth00001AUganda#UG.KM0c2KMKampala000017Samoa #WS.AT0c2ATAtua00001BVietnam#VN.PY0c2PYPhu Yen000028Thailand#TH.PK0c2PKPrachuap Khiri Khan000019Tuvalu#TV.NT0c2NTNiutao00001BEurope2#EU.FI0c2FIFinland000019Europe2#EU.ES0c2ESSpain000029Philippines#PH.ZS0c2ZSZamboanga del Sur000017Kansas#1330c2NONeosho00001BIllinois#1690c2SHSchuyler000019Missouri#0890c2HWHoward00001BNorthDakota#1030c2WEWells00001ATexas#1610c2FRSFreestone000015Ohio#1230c2OTOttawa000019Nebraska#0930c2HWHoward000018Minnesota#0210c2CSCass00001BKentucky#0050c2ANAnderson000018Michigan#0150c2BRBarry00001BTennessee#1830c2WEWeakley000019Maryland#0410c2TATalbot00001FSpainProvinces#0250c2HEHuesca00001BOklahoma#1350c2SQSequoyah000016Iowa#1870c2WEWebster00001DWisconsin#0770c2MQMarquette00001DWashington#0370c2KIKittitas000016Indiana#1390c2RURush000018NewYork#1110c2ULUlster00001DNorthCarolina#1790c2UNUnion00001EVirginia#0810c2GVGreensville000018Africa#0110c2KMComoros00002BNewCaledonia#NC.SU.SA0c2SASarram&eacute;a000022Paraguay#190c2CYCanindey&uacute;000016Cyprus#060c2PAPaphos00001ENicaragua#080c2LELe&oacute;n000027CzechRepublic#830c2LILibereck&yacute;00001BRomania#110c2BZBuz&#259;u000016Turkey#660c2YZYozgat00001CDominica#070c2LUSaint Luke00001BAustria#080c2VOVorarlberg000028DominicanRepublic#370c2SDSanto Domingo000023WorldwithCountries#690c2MAMorocco000013USA#NV0c2NVNevada000028Sweden#280c2OV&auml;stra G&ouml;taland000034Iceland#050c2AHAustur-H&uacute;navatnss&yacute;sla00001CAfghanistan#360c2PIAPaktia00001FAzerbaijan#640c2XCXocal&#305;00001EAntigua#080c2SPHSaint Philip000020Nunavut#CA.NU.KT0c2KTKitikmeot00001ASudan#SD.KH0c2KHKhartoum00001EPhilippines#PH.II0c2IIIloilo000019Russia#RU.SA0c2SASamara00001CUganda#UG.KN0c2KNKalangala000019Tunisia#TN.GF0c2GFGafsa000020Thailand#TH.PL0c2PLPhatthalung000016Tuvalu#TV.NU0c2NUNui000025Somalia#SO.SH0c2SHShabeellaha Hoose00001FSenegal#SN.TC0c2TCTambacounda000019Algeria#DZ.JJ0c2JJJijel000020Chad#TD.LR0c2LRLogone Oriental000017Texas#3430c2MOIMorris00001FLouisiana#0870c2SBSt. Bernard00001AArizona#0110c2GEGreenlee000017Georgia#1510c2HYHenry000017Kentucky#1870c2OWOwen00001AFlorida#1150c2SSSarasota000020Mississippi#0970c2MTMontgomery00001DPuertoRico#1070c2OROrocovis00001EPennsylvania#0630c2INIndiana00001AArkansas#0870c2MAMadison000024SpainProvinces#0260c2JAJa&eacute;n000016Oregon#0010c2BABaker00001BTennessee#0030c2BDBedford00001DWisconsin#0780c2MNMenominee00001BColorado#0950c2PHPhillips00001DMontana#0650c2MUMusselshell00001AAlabama#1110c2RARandolph000016Nevada#0030c2CLClark000018Iowa#0070c2APAppanoose00001EAfrica#0120c2CICote d Ivoire000015Utah#0470c2UIUintah000019Nicaragua#090c2MDMadriz000027CzechRepublic#840c2OLOlomouck&yacute;000023Romania#120c2CSCara&#351;-Severin00001CDominica#080c2MASaint Mark000015Austria#090c2WIWien000026WorldwithCountries#700c2MZMozambique00002FIceland#060c2ASAustur-Skaftafellss&yacute;sla00001BAfghanistan#370c2KHOKhost000021Azerbaijan#650c2XDXocav&#601;nd000022MarshallIsland#MH.MH.TO0c2TOToke000027PolandCounties#PL.MZ.WA0c2MWAWarszawa000024MarshallIsland#MH.MH.BN0c2BNBikini00001EMacedonia#MK.KB0c2KBKarbinci00001DNepal#NP.DH0c2DHDhawalagiri00001ASerbia#RS.TO0c2TOToplica000027Tajikistan#TJ.BK0c2BKBadakhshoni Kuni00001CEastTimor#TL.BT0c2BTLautem000014Iran#IR.QM0c2QMQom00002ATrinidadandTobago#TT.SG0c2SGSaint George00001EQatar#QA.JU0c2JUAl Jumaliyah00001ASriLanka#LK.KY0c2KYKandy000019Liberia#LR.NI0c2NINimba000022Kazakhstan#KZ.MG0c2MGMangghystau00001DHongKong#HK.SK0c2SKSai Kung000015Kansas#1350c2NSNess000018Arizona#0120c2LPLa Paz000018Illinois#1710c2STScott000019Missouri#0910c2HOHowell00001ENorthDakota#1050c2WIWilliams000015Texas#1630c2FRIFrio000017Ohio#1250c2PAPaulding00001CNebraska#0950c2JEJefferson00001CMinnesota#0230c2CHChippewa00001AKentucky#0070c2BABallard000016Michigan#0170c2BYBay000019Tennessee#1850c2WHWhite00001DMaryland#0430c2WAWashington000029SpainProvinces#0270c2LCLa Coru&ntilde;a00001BOklahoma#1370c2STStephens000018Iowa#1890c2WIWinnebago00001DWisconsin#0790c2MEMilwaukee00001EWashington#0390c2KLKlickitat00001CIndiana#1410c2SJSt. Joseph000018NewYork#1130c2WAWarren00001DNorthCarolina#1810c2VAVance00001AVirginia#0830c2HLHalifax000031Africa#0130c2CDDemocratic Republic of the Congo000024USASouthEastRegion#050c2ARArkansas00001ANicaragua#100c2MNManagua00002DCzechRepublic#850c2MOMoravskoslezsk&yacute;000015Romania#130c2CJCluj000016Turkey#680c2ANAnkara00001FDominica#090c2PKSaint Patrick000023WorldwithCountries#710c2NANamibia00002EIceland#070c2BOBorgarfjar&eth;ars&yacute;sla000014China#010c2AHAnhui00001EAfghanistan#380c2NURNurestan000026Azerbaijan#660c2YRYard&#305;ml&#305;00001FNunavut#CA.NU.KV0c2KVKeewatin00002ECentralAfricanRepublic#CF.BK0c2BKBasse-Kotto00001CUganda#UG.KP0c2KPKapchorwa00001DOman#OM.ZA0c2ZAAdh Dhahirah000016Serbia#RS.BO0c2BOBor000018UK7#UK.SC0c2SCScotland000017Texas#3450c2MOEMotley00001FLouisiana#0890c2SCSt. Charles00001AArizona#0130c2MAMaricopa000020NorthCarolina#0010c2ALAlamance000019Georgia#1530c2HOHouston000019Kentucky#1890c2OSOwsley00001AFlorida#1170c2SOSeminole00001DMississippi#0990c2NENeshoba00001DPuertoRico#1090c2PTPatillas000020Pennsylvania#0650c2JEJefferson000013Idaho#0010c2ADAda000019Arkansas#0890c2MRMarion000021SpainProvinces#0280c2LRLa Rioja000017Oregon#0030c2BEBenton00001ATennessee#0050c2BEBenton000019Colorado#0970c2PIPitkin000016Montana#0670c2PAPark00001DSouthDakota#1350c2YAYankton000019Alabama#1130c2RURussell000018Nevada#0050c2DODouglas000016Iowa#0090c2AUAudubon000019Africa#0140c2DJDjibouti000013Utah#0490c2UTUtah000032Paraguay#220c2ASAsunci&oacute;n Capitol District000019Nicaragua#110c2MSMasaya000028CzechRepublic#860c2PAPardubick&yacute;000019Estonia#180c2TATartumaa00001FRomania#140c2CTConstan&#355;a000028Turkey#690c2GUG&uuml;m&uuml;&#351;hane00001CDominica#100c2PLSaint Paul000021WorldwithCountries#720c2NENiger000015USA#NY0c2NYNew York000021Iceland#080c2DADalas&yacute;sla000017China#020c2ZJZhejiang00001DAfghanistan#390c2ORUOruzgan00001AAzerbaijan#670c2YVYevlax000025Laos#LA.VT0c2VTVientiane Prefecture00001FEastTimor#TL.CL0c2CLCova-Lima000018Uganda#UG.KQ0c2KQAmuru000020BurkinaFaso#BF.NB0c2NBNoumbiel000022CentralAmerica2#CE.PA0c2PAPanama000022PapuaNewGuinea#PG.SA0c2SASanduan000017Kansas#1370c2NTNorton000019Illinois#1730c2SEShelby000017Missouri#0930c2IRIron000017Texas#1650c2GAIGaines000014Ohio#1270c2PEPerry00001ANebraska#0970c2JOJohnson00001BMinnesota#0250c2CGChisago000019Kentucky#0090c2BRBarren000019Michigan#0190c2BEBenzie00001ETennessee#1870c2WLWilliamson00001BMaryland#0450c2WIWicomico000023SpainProvinces#0290c2LPLas Palmas000018Oklahoma#1390c2TETexas000019Iowa#1910c2WNWinneshiek00001AWisconsin#0810c2MOMonroe00001AWashington#0410c2LELewis000017Indiana#1430c2SCScott00001CNewYork#1150c2WSWashington00001CNorthCarolina#1830c2WAWake00001AVirginia#0850c2HNHanover000016Africa#0150c2EGEgypt00001FParaguay#230c2AGAlto Paraguay00001CNicaragua#120c2MTMatagalpa00002BCzechRepublic#870c2PLPlze&#328;sk&yacute;000019Estonia#190c2VGValgamaa00001CWales#010c2BGBlaenau Gwent000018Romania#150c2CVCovasna000020Ecuador#010c2WGal&aacute;pagos000017Turkey#700c2HKHakkari00001DDominica#110c2PRSaint Peter000023WorldwithCountries#730c2NGNigeria00002CIceland#090c2EYEyjafjar&eth;ars&yacute;sla000016China#030c2JXJiangxi00001CAfghanistan#400c2PARParvan000021Azerbaijan#680c2YEYevlax (City)00001CLaos#LA.XA0c2XAXaignabouli000019Russia#RU.RO0c2RORostov00001CTunisia#TN.ZA0c2ZAZaghouan000019Uganda#UG.KR0c2KRKisoro00001ARussia#RU.AD0c2ADAdygaya000024FranceDepartment#FR.MY0c2MYMayenne000021FranceDepartment#FR.NO0c2NONord00001DVietnam#VN.QT0c2QTQuang Tri00001BSriLanka#LK.MH0c2MHMatara00001FTurkmenistan#TM.BA0c2BABalkan000016Utah#0510c2WAWasatch00001CTexas#3470c2NACNacogdoches00001ELouisiana#0910c2SHSt. Helena000018Arizona#0150c2MOMohave000028Virginia#8100c2VBVirginia Beach (City)000021NorthCarolina#0030c2AEAlexander000017Georgia#1550c2IRIrwin00001CKentucky#1910c2PEPendleton000018Florida#1190c2STSumter00001CMississippi#1010c2NWNewton000024PuertoRico#1110c2PNPe&ntilde;uelas00001EPennsylvania#0670c2JUJuniata000015Idaho#0030c2AAAdams000019Arkansas#0910c2MIMiller000024SpainProvinces#0300c2LELe&oacute;n00001AOregon#0050c2CLClackamas00001BTennessee#0070c2BLBledsoe00001AColorado#0990c2PRProwers00001BMontana#0690c2PEPetroleum00001DSouthDakota#1370c2ZIZiebach00001BAlabama#1150c2SCSt. Clair000015Nevada#0070c2ELElko000015Iowa#0110c2BEBenton000022Africa#0160c2GQEquatorial Guinea00001CNorthIreland#010c2ANAntrim000021Paraguay#240c2BQBoquer&oacute;n000020Nicaragua#130c2NSNueva Segovia000033CzechRepublic#880c2STSt&#345;edo&#269;esk&yacute;00001CEstonia#200c2VDViljandimaa000017Wales#020c2BBBridgend000025Romania#160c2DBD&acirc;mbovi&#355;a000015Ecuador#020c2AAzuay000015Turkey#710c2KOKonya000022WorldwithCountries#740c2RWRwanda000027Iceland#100c2GUGullbringus&yacute;sla000016China#040c2JSJiangsu00001EAfghanistan#410c2DAYDaykundi000021Azerbaijan#690c2ZGZ&#601;ngilan000028NovaScotia#CA.NS.GT0c2GTGlooscap Trail000025PolandCounties#PL.SK.KM0c2SKMKielce000023MarshallIsland#MH.MH.BR0c2BRBikar000022SierraLeone#SL.NO.BM0c2BMBombali000024Philippines#PH.IN0c2INIlocos Norte000019Uganda#UG.KS0c2KSKasese000017Uganda#UG.LI0c2LILira000025EquatorialGuinea#GQ.KN0c2KNKie Ntem000022Tibet#TI.LP0c2LPLhasa Prefecture00001CSerbia#RS.BR0c2BRBranicevo00001DTurkmenistan#TM.AL0c2ALAhal000019Nigeria#NG.NI0c2NINiger000019Senegal#SN.TH0c2THThies000020Gambia#GM.MC0c2MCCentral River000029Philippines#PH.ZY0c2ZYZamboanga Sibugay00001DHongKong#HK.SO0c2SOSouthern000016Kansas#1390c2OSOsage000018Illinois#1750c2SRStark00001AMissouri#0950c2JKJackson00001ATexas#1670c2GALGalveston000028Virginia#6300c2FEFredericksburg (City)000017Ohio#1290c2PIPickaway00001ANebraska#0990c2KEKearney000018Minnesota#0270c2CLClay000017Kentucky#0110c2BTBath00001AMichigan#0210c2BIBerrien00001ATennessee#1890c2WIWilson00001DMaryland#0470c2WOWorchester00001FSpainProvinces#0310c2LILleida00001AOklahoma#1410c2TITillman000017Iowa#1930c2WOWoodbury00001AWisconsin#0830c2OCOconto00001CWashington#0430c2LILincoln000018Indiana#1450c2SHShelby000017NewYork#1170c2WYWayne00001ENorthCarolina#1850c2WRWarren00001AVirginia#0870c2HCHenrico000018Africa#0170c2EREritrea00001CAzerbaijan#700c2ZQZaqatala00001ANorthIreland#020c2ADArds000026Nicaragua#140c2SJR&iacute;o San Juan00002CCzechRepublic#890c2US&Uacute;steck&yacute;00001FEstonia#210c2VRV&otilde;rumaa000019Wales#030c2CPCaerphilly000015Romania#170c2DJDolj00001EEcuador#030c2BBol&iacute;var000016Turkey#720c2MRMardin000031WorldwithCountries#750c2STSao Tome and Principe000013USA#OR0c2OROregon000014China#050c2JLJilin00001EAfghanistan#420c2PANPanjshir000026Alberta#CA.AB.AC0c2ACAlberta Central000026PolandCounties#PL.LD.SI0c2LSISieradz000022MarshallIsland#MH.MH.UJ0c2UJUjae000024SierraLeone#SL.NO.TO0c2TOTonkolili000022Macedonia#MK.KG0c2KGKrivogastani00001BVanuatu#VU.ML0c2MLMalampa00001AThailand#TH.PR0c2PRPhrae000021Cameroon#CM.EN0c2ENExtreme-Nord00001FSriLanka#Lk.MJ0c2MJMoneragala00001EEritrea#ER.GB0c2GBGash-Barka00001FBurkinaFaso#BF.MO0c2MOMouhoun000019Bhutan#BT.MO0c2MOMongar00001BRwanda#RW.NO0c2NONorthern000019Utah#0530c2WSWashington000018Texas#3490c2NAVNavarro00001DLouisiana#0930c2SJSt. James000018Arizona#0170c2NANavajo000021NorthCarolina#0050c2AGAlleghany000019Georgia#1570c2JAJackson000018Kentucky#1930c2PRPerry00001AFlorida#1210c2SNSuwannee00001DMississippi#1030c2NONoxubee00001APuertoRico#1130c2POPonce000021Pennsylvania#0690c2LALackawanna000017Idaho#0050c2BABannock00001EArkansas#0930c2MSMississippi00001DSpainProvinces#0320c2LULugo000018Oregon#0070c2CAClatsop00001ATennessee#0090c2BUBlount000019Colorado#1010c2PUPueblo00001AMontana#0710c2PHPhillips000018Alabama#1170c2SHShelby00001ANevada#0090c2ESEsmeralda000019Iowa#0130c2BHBlack Hawk000019Africa#0180c2ETEthiopia00001FAzerbaijan#710c2ZRZ&#601;rdab00001CNorthIreland#030c2AMArmagh000018Nicaragua#150c2RIRivas00002CCzechRepublic#900c2ZLZl&iacute;nsk&yacute;000016Wales#040c2CACardiff00001CRomania#180c2GLGala&#355;i00001CEcuador#040c2FCa&ntilde;ar00001ATurkey#730c2NGNi&#287;de000023WorldwithCountries#760c2SNSenegal000016China#060c2QHQinghai00002DPolandCounties#PL.LU.BM0c2LBMBiala-Podlaska00001CMacedonia#MK.KH0c2KHKicevo00001DMongolia#MN.DU0c2DUDundgovi000017Uganda#UG.KU0c2KUKumi000019Uganda#UG.MA0c2MAMasaka000020Thailand#TH.PS0c2PSPhitsanulok000018Somalia#SO.SO0c2SOSool00001FSenegal#SN.ST0c2STSaint-Louis00001CLiberia#LR.MY0c2MYMaryland00001BZambia#ZM.SO0c2SOSouthern00001CChad#TD.MO0c2MOMoyen Chari000016Africa#0190c2GAGabon000018Kansas#1410c2OBOsborne00001DIllinois#1770c2SPStephenson000019Missouri#0970c2JAJasper00001CCalifornia#0010c2ALAlameda000016Texas#1690c2GARGarza000013Ohio#1310c2PKPike000018Nebraska#1010c2KIKeith00001EMinnesota#0290c2CWClearwater000017Kentucky#0130c2BEBell000019Michigan#0230c2BNBranch00001FSpainProvinces#0330c2MAMadrid000018Oklahoma#1430c2TUTulsa000014Iowa#1950c2WHWorth00001AWisconsin#0850c2ONOneida00001BNewWorld#1000c2KHCambodia00001AWashington#0450c2MAMason000019Indiana#1470c2SPSpencer00001DNewYork#1190c2WEWestchester000022NorthCarolina#1870c2WSWashington000018Virginia#0890c2HYHenry00002CNewCaledonia#NC.NO.HI0c2HIHiengh&egrave;ne00001EAzerbaijan#720c2BBBab&#601;k00001FNorthIreland#040c2BLBallymena00001EWales#050c2CICarmarthenshire000015Romania#190c2GJGorj000016Ecuador#050c2CCarchi000015Turkey#740c2SISiirt000025WorldwithCountries#770c2SCSeycelles000015China#070c2FJFujian000025MarshallIsland#MH.MH.UL0c2ULUjelang000017Laos#LA.XE0c2XEXekong000017Libya#LY.SB0c2SBSabha00001EChina2#CN.NX0c2NXNingxia Hui000021FranceDepartment#FR.OI0c2OIOise000021Thailand#TH.PT0c2PTPathum Thani00001CBotswana#BW.CE0c2CECentral00001AEurope2#EU.FR0c2FRFrance00001DAlgeria#DZ.KH0c2KHKhenchela00001CSaudiArabia#SA.HA0c2HAHail000016Africa#0200c2GHGhana000015Alaska#1800c2NONome000014Utah#0550c2WYWayne000017Texas#3510c2NEWNewton000028Louisiana#0950c2STSt. John the Baptist000016Arizona#0190c2PIPima00001DNorthCarolina#0070c2ANAnson000018Georgia#1590c2JSJasper000017Kentucky#1950c2PIPike000018Florida#1230c2TATaylor00001FMississippi#1050c2OKOktibbeha000021PuertoRico#1150c2QBQuebradillas000020Pennsylvania#0710c2LNLancaster000019Idaho#0070c2BEBear Lake000019Arkansas#0950c2MNMonroe000026SpainProvinces#0340c2MLM&aacute;laga000019Oregon#0090c2COColumbia00001BTennessee#0110c2BRBradley00001DColorado#1030c2RBRio Blanco000019Montana#0730c2POPondera000018Alabama#1190c2SUSumter000018NewWorld#1010c2CNChina000017Nevada#0110c2EUEureka000014Iowa#0150c2BOBoone000019Azerbaijan#730c2CFCulfa000020NorthIreland#050c2BYBallymoney000023USASouthEastRegion#120c2FLFlorida00004BNicaragua#170c2ANRegi&oacute;n Aut&oacute;noma del Atl&aacute;ntico Norte000019Wales#060c2CGCeredigion000019Romania#200c2HRHarghita00001AEcuador#060c2HChimborazo000017Turkey#750c2AKAksaray000028WorldwithCountries#780c2SLSierra Leone00001BChina#080c2HLHeilongjiang000026PolandCounties#PL.PD.SM0c2PSMSuwalki000021HongKong#HK.SS0c2SSSham Shui Po00001CSamoa #WS.TU0c2TUTuamasaga00001AUganda#UG.MC0c2MCMasindi00001BThailand#TH.PU0c2PUPhuket000020Ethiopia#ET.AA0c2AAAddis Ababa000022Europe2#EU.GI0c2GIGibraltar (UK)000026Burma#MM.TN0c2TNTanintharyi Division00001BVirginia#0910c2HIHighland000017Africa#0210c2GNGuinea000017Kansas#1430c2OTOttawa00001BIllinois#1790c2TATazewell00001CMissouri#0990c2JEJefferson00001BCalifornia#0030c2APAlpine00001ATexas#1710c2GIEGillespie000016Ohio#1330c2POPortage00001CNebraska#1030c2KPKeya Paha000018Minnesota#0310c2COCook000018Kentucky#0150c2BNBoone00001AMichigan#0250c2CACalhoun000020SpainProvinces#0350c2MEMelilla00001AOklahoma#1450c2WAWagoner000015Iowa#1970c2WGWright00001DWisconsin#0870c2OUOutagamie00001DNewWorld#1020c2TPEast Timor00001DWashington#0470c2OKOkanogan000018Indiana#1490c2STStarke000019NewYork#1210c2WOWyoming00001FNorthCarolina#1890c2WTWatauga00002FSaskatchewan#CA.SK.WC0c2WCWest Central Region000026Manitoba#CA.MB.CR0c2CRCentral Region000026Azerbaijan#740c2KNK&#601;ng&#601;rli00001FNorthIreland#060c2BBBanbridge000023USASouthEastRegion#130c2GAGeorgia000049Nicaragua#180c2ASRegi&oacute;n Aut&oacute;noma del Atl&aacute;ntico Sur000014Wales#070c2CWConwy00001ARomania#210c2HDHunedoara000018Ecuador#070c2XCotopaxi000016Turkey#760c2BMBatman000023WorldwithCountries#790c2SOSomalia00002AIceland#150c2KJKj&oacute;sars&yacute;sla000014China#090c2HEHenan00002CPolandCounties#PL.SL.BM0c2SBMBielsko-Biala00002BPolandCounties#PL.LD.SM0c2LSMSkierniewice00002DPapuaNewGuinea#PG.SH0c2SHSouthern Highlands00001CHongKong#HK.ST0c2STSha Tin000022Philippines#PH.IS0c2ISIlocos Sur000018Malawi#MW.ZO0c2ZOZomba000018Russia#RU.SK0c2SKSakha00001DMicronesia#FM.KO0c2KOKosrae000019Uganda#UG.KX0c2KXKamuli00001AUganda#UG.MD0c2MDMubende000024EquatorialGuinea#GQ.LI0c2LILitoral000022Tibet#TI.NA0c2NANgari Prefecture000027Iran#IR.SB0c2SBSistan and Baluchestan000031FranceDepartment#FR.PA0c2PAPyrenees Atlantiques00002BTrinidadandTobago#TT.SP0c2SPSaint Patrick00001EGambia#GM.LR0c2LRLower River00001FLesotho#LS.QN0c2QNQacha's Nek000015Iowa#0170c2BRBremer00001EAfrica#0220c2GWGuinea-Bissau000014Utah#0570c2WEWeber000016Texas#3530c2NOLNolan00001ELouisiana#0970c2SLSt. Landry000017Arizona#0210c2PNPinal00001CNorthCarolina#0090c2ASAshe00001CGeorgia#1610c2JDJeff Davis000019Kentucky#1970c2POPowell000017Florida#1250c2UNUnion00001CMississippi#1070c2PAPanola000022PuertoRico#1170c2RCRinc&oacute;n00001FPennsylvania#0730c2LWLawrence000017Idaho#0090c2BNBenewah00001DArkansas#0970c2MTMontgomery00001FSpainProvinces#0360c2MUMurcia000015Oregon#0110c2CSCoos000018Israel#0010c2CECentral00001CTennessee#0130c2CACampbell00001DColorado#1050c2RGRio Grande00001EMontana#0750c2PRPowder River00001BAlabama#1210c2TATalladega00001ANewWorld#1030c2GEGeorgia000019Nevada#0130c2HUHumboldt00002FSaskatchewan#CA.SK.EC0c2ECEast Central Region00001BAzerbaijan#750c2OROrdubad00001DNorthIreland#070c2BFBelfast00001BWales#080c2DBDenbighshire00001ERomania#220c2ILIalomi&#355;a000016Ecuador#080c2OEl Oro000017Turkey#770c2BBBayburt000028WorldwithCountries#800c2ZASouth Africa000014China#100c2HBHebei000025Burma#MM.AY0c2AYAyeyarwady Division00001BRussia#RU.SL0c2SLSakhalin000019Russia#RU.TB0c2TBTambov00001AGuinea#GN.SI0c2SISiguiri00001AUganda#UG.KY0c2KYKayunga000018Uganda#UG.ME0c2MEMbale000018Cameroon#CM.ES0c2ESEst000028CentralAfricanRepublic#CF.UK0c2UKOuaka00001DNorthCarolina#1910c2WYWayne000020Virginia#0930c2IWIsle of Wight000016Africa#0230c2KEKenya000017Kansas#1450c2PNPawnee000018Illinois#1810c2UNUnion00001AMissouri#1010c2JOJohnson00001BCalifornia#0050c2AMAmador00001ATexas#1730c2GLAGlasscock000015Ohio#1350c2PRPreble00001ANebraska#1050c2KMKimball00001EMinnesota#0330c2CTCottonwood00001AKentucky#0170c2BOBourbon000017Michigan#0270c2CSCass000020SpainProvinces#0370c2NANavarra000016Israel#0020c2HAHaifa00001DOklahoma#1470c2WSWashington00001BWisconsin#0890c2OZOzaukee000018NewWorld#1040c2INIndia00001CWashington#0490c2PAPacific000019Indiana#1510c2SUSteuben000017NewYork#1230c2YAYates00002AAzerbaijan#760c2SDS&#601;d&#601;r&#601;k000023NorthIreland#080c2CFCarrickfergus000019Wales#090c2FLFlintshire00001ARomania#230c2ISIa&#351;i00001AEcuador#090c2EEsmeraldas000017Turkey#780c2KRKaraman000021WorldwithCountries#810c2SDSudan000028Iceland#170c2MYM&yacute;ras&yacute;sla000014China#110c2HNHunan00001CLaos#LA.XI0c2XIXiangkhoang00001FPhilippines#PH.KA0c2KAKalinga00001BRussia#RU.SM0c2SMSmolensk00001CMongolia#MN.DZ0c2DZZavkhan00001AUganda#UG.MF0c2MFManafwa000018Russia#RU.AL0c2ALAltai00002AFranceDepartment#FR.PC0c2PCPas de Calais00001CVietnam#VN.AG0c2AGAn Giang00001FSriLanka#LK.MP0c2MPMullailivu00001BMauritius#MU.FL0c2FLFlacq000022Chad#TD.NJ0c2NJVille De Ndjamena000017Nevada#0150c2LALander000017Iowa#0190c2BUBuchanan000018Africa#0240c2LSLesotho000017Texas#3550c2NUENueces00001ELouisiana#0990c2SMSt. Martin00001CArizona#0230c2SCSanta Cruz00001DNorthCarolina#0110c2AVAvery00001BGeorgia#1630c2JEJefferson00001AKentucky#1990c2PUPulaski000019Florida#1270c2VOVolusia000018Illinois#0010c2ADAdams000021Mississippi#1090c2PRPearl River000026PuertoRico#1190c2RGR&iacute;o Grande00001EPennsylvania#0750c2LELebanon000017Idaho#0110c2BIBingham000019Arkansas#0990c2NENevada000020SpainProvinces#0380c2OUOurense000016Oregon#0130c2CRCrook00001AIsrael#0030c2JEJerusalem00001ATennessee#0150c2CNCannon000018Colorado#1070c2RORoutt000018Montana#0770c2PWPowell00001CAlabama#1230c2TLTallapoosa00001CNewWorld#1050c2IDIndonesia00001FAzerbaijan#770c2SH&#350;ahbuz000021NorthIreland#090c2CSCastlereagh000016Wales#100c2GDGwynedd000016Ecuador#100c2GGuayas000023Turkey#790c2KKK&#305;r&#305;kkale000025WorldwithCountries#820c2SZSwaziland000014China#120c2HUHubei000032FrenchGuiana#GF.CY.MT0c2MTMontsinery Tonnegrande00001APanama#PA.HE0c2HEHerrera00001DHongKong#HK.TM0c2TMTuen Mun00001BMacedonia#MK.KN0c2KNKonce00001CCoteDivoire#CI.LC0c2LCLacs00001AEastTimor#TL.DL0c2DLDili000019Uganda#UG.MG0c2MGMayuge000016Benin#BJ.MO0c2MOMono00002FHungaryRegions#HU.WT0c2WTWestern Transdanubia000017Russia#RU.AM0c2AMAmur000028FranceDepartment#FR.PD0c2PDPuy de Dome00001BThailand#TH.PY0c2PYPhayao00001BThailand#TH.RE0c2RERoi Et000020Namibia#NA.OD0c2ODOtjozondjupa000018Nigeria#NG.OG0c2OGOgun000022BurkinaFaso#BF.OB0c2OBOubritenga00001ENorthCarolina#1930c2WIWilkes00001DVirginia#0950c2JCJames City000018Africa#0250c2LILiberia00001CAlaska#1850c2NSNorth Slope000019Kansas#1470c2PLPhillips00001CIllinois#1830c2VEVermilion000017Missouri#1030c2KNKnox00001ACalifornia#0070c2BUButte000017Texas#1750c2GOLGoliad000015Ohio#1370c2PUPutnam000017Nebraska#1070c2KNKnox00001DMinnesota#0350c2CICrow Wing000017Kentucky#0190c2BYBoyd00001DMichigan#0290c2CHCharlevoix000021SpainProvinces#0390c2PAPalencia000019Israel#0040c2NRNorthern00001AOklahoma#1490c2WHWashita000019Wisconsin#0910c2PEPepin000017NewWorld#1060c2IAIran000021Washington#0510c2PEPend Oreille00001AIndiana#1530c2SLSullivan000029NewCaledonia#NC.NO.HO0c2HOHoua&iuml;lou000023Azerbaijan#780c2SR&#350;&#601;rur00001FNorthIreland#100c2CLColeraine00001FWales#110c2AYIsle of Anglesey00001FRomania#250c2MMMaramure&#351;000018Ecuador#110c2IImbabura00001FNorthKorea#010c2CHAChagang-do000020Turkey#800c2SR&#350;&#305;rnak000024WorldwithCountries#830c2TZTanzania00003DIceland#190c2NINor&eth;ur-&Iacute;safjar&eth;ars&yacute;sla000017China#130c2XJXinjiang00001ASomalia#SO.BK0c2BKBakool00001CBurma#MM.CH0c2CHChin State00001ESamoa #WS.VF0c2VFVaao Fonoti000018Niger#NE.MA0c2MAMaradi000018Yemen#YE.DH0c2DHDhamar00001BMongolia#MN.ER0c2EROrkhon00001AUganda#UG.MH0c2MHMaracha00001BLibya#LY.SH0c2SHAsh Shati000017Iran#IR.QZ0c2QZQazvin00001ALebanon#LE.BA0c2BABeirut000019Ethiopia#ET.AF0c2AFAfar000022BurkinaFaso#BF.NM0c2NMNamentenga00001DGambia#GM.NB0c2NBNorth Bank000018Nevada#0170c2LILincoln00001AIowa#0210c2BVBuena Vista000016Africa#0260c2LRLibya00001ATexas#3570c2OCHOchiltree00001CLouisiana#1010c2SRSt. Mary000019Arizona#0250c2YAYavapai000024Virginia#8200c2WBWaynesboro (City)000020NorthCarolina#0130c2BEBeaufort000019Georgia#1650c2JKJenkins00001CKentucky#2010c2RORobertson000019Florida#1290c2WKWakulla00001CIllinois#0030c2ALAlexander00001BMississippi#1110c2PEPerry000022PuertoRico#1210c2SBSabana Grande00001DPennsylvania#0770c2LHLehigh000016Idaho#0130c2BLBlaine000019Arkansas#1010c2NWNewton000023SpainProvinces#0400c2POPontevedra000016Oregon#0150c2CUCurry000019Israel#0050c2SOSouthern00001BTennessee#0170c2CRCarroll00001BColorado#1090c2SASaguache000019Montana#0790c2PIPrairie00001CAlabama#1250c2TUTuscaloosa000018NewWorld#1070c2JPJapan00001FNorthIreland#110c2CKCookstown00001CWales#120c2MMMonmouthshire00001FRomania#260c2MHMehedin&#355;i000014Ecuador#120c2LLoja000015Turkey#810c2AAAdana000020WorldwithCountries#840c2TGTogo000033Iceland#200c2NMNor&eth;ur-M&uacute;las&yacute;sla00001FFiji#FJ.TH.NO0c2NOTholo North000027Kazakhstan#KZ.NK0c2NKNorth Kazakhstan00001ADjibouti#DJ.OB0c2OBObock000024Guyana#GY.PM0c2PMPomeroon-Supenaam000019Russia#RU.RZ0c2RZRyazan000026Russia#RU.SP0c2SPSt. Petersburg City000018Uganda#UG.MI0c2MIMpigi00001AQatar#QA.ME0c2MEMesaieed00001FBurkinaFaso#BF.OD0c2ODOudalan00002EMorocco#MA.MK0c2MKMarrakech Tensift Al Haouz000021Chad#TD.MW0c2MWMayo-Kebbi Ouest00001DIndiana#1550c2SWSwitzerland00001ENorthCarolina#1950c2WLWilson000021Virginia#0970c2KQKing and Queen00001BAfrica#0270c2MGMadagascar00001DKansas#1490c2PTPottawatomie000019Illinois#1850c2WAWabash00001AMissouri#1050c2LDLaclede00001ECalifornia#0090c2CACalaveras000019Texas#1770c2GONGonzales00001FVirginia#6400c2GAGalax (City)000017Ohio#1390c2RIRichland00001CNebraska#1090c2LALancaster00001AMinnesota#0370c2DADakota000018Kentucky#0210c2BLBoyle00001CMichigan#0310c2CECheboygan000022SpainProvinces#0410c2SASalamanca000019Israel#0060c2TATel Aviv000018Oklahoma#1510c2WOWoods00001AWisconsin#0930c2PIPierce00001DNewWorld#1080c2KZKazakhstan00001BWashington#0530c2PIPierce000014China#150c2GSGansu00001FNorthIreland#120c2CRCraigavon00001DWales#130c2MTMerthyr Tydfil00001BRomania#270c2MSMure&#351;00001FEcuador#130c2RLos R&iacute;os000028NorthKorea#030c2HANHamgy&#335;ng-namdo000028Turkey#820c2CI&Ccedil;ank&#305;r&#305;000023WorldwithCountries#850c2TNTunisia000037Iceland#210c2NONor&eth;ur-&THORN;ingeyjars&yacute;sla000022SierraLeone#SL.SO.PU0c2PUPujehun000024MarshallIsland#MH.MH.UT0c2UTUtirik000018Chad#TD.OD0c2ODOuaddai000019Somalia#SO.AW0c2AWAwdal00001BHongKong#HK.TP0c2TPTai Po00001ABurundi#BI.GI0c2GIGitega000022Tibet#TI.NG0c2NGNagqu Prefecture00001AVietnam#VN.SL0c2SLSon La00001DVietnam#VN.TB0c2TBThai Binh00001BPalau#PW.HA0c2HAHatohobei00001BSriLanka#LK.MT0c2MTMatale000017Congo#CG.NI0c2NINiari000024TrinidadandTobago#TT.CA0c2CACaroni00001BLesotho#LS.QT0c2QTQuthing000015Nevada#0190c2LYLyon000015Iowa#0230c2BTButler000017Africa#0280c2MWMalawi000021Alaska#1880c2NANorthwest Arctic000017Texas#3590c2OLDOldham00001FLouisiana#1030c2SYSt. Tammany000016Arizona#0270c2YUYuma00001ENorthCarolina#0150c2BRBertie000019Georgia#1670c2JOJohnson00001DKentucky#2030c2RCRockcastle000018Florida#1310c2WTWalton000017Illinois#0050c2BOBond00001AMississippi#1130c2PIPike00001CPuertoRico#1230c2SASalinas00001EPennsylvania#0790c2LZLuzerne000015Idaho#0150c2BOBoise00001BArkansas#1030c2OUOuachita00002FSpainProvinces#0420c2SCSanta Cruz de Tenerife00001AOregon#0170c2DEDeschutes00001ATennessee#0190c2CTCarter00001BColorado#1110c2SJSan Juan000019Montana#0810c2RARavalli000018Alabama#1270c2WAWalker000020NewWorld#1090c2KPKorea (north)000020NewCaledonia#NC.SU.TH0c2THThio000016China#160c2GXGuangxi00001BNorthIreland#130c2LDDerry00001CLuxembourg#020c2CACapellen000020Wales#140c2NPNeath Port Talbot00001BRomania#280c2NTNeam&#355;00001DEcuador#140c2MManab&iacute;000019Turkey#830c2GAGaziantep000022WorldwithCountries#860c2UGUganda000024PolandCounties#PL.LU.CM0c2LCMChelm000024Alberta#CA.AB.AN0c2ANAlberta North00001CSomalia#SO.BN0c2BNBanaadir00001EEastTimor#TL.VQ0c2VQViqueque00001ARussia#RU.SR0c2SRSaratov00001FMongolia#MN.GA0c2GAGovi Altai00001FCoteDivoire#CI.LG0c2LGLagunes000030Guinea#GN.TE0c2TET&eacute;lim&eacute;l&eacute;00001EUganda#UG.NA0c2NANakasongola000021FranceDepartment#FR.OR0c2OROrne00001ALibya#LY.AJ0c2AJAjdabiya000019Monaco#EU.MN0c2MNMonaco000025DenmarkRegion#DK.MJ0c2MJMidtjylland00001BNamibia#NA.OH0c2OHOmaheke00001CSomalia#SO.TO0c2TOTogdheer00001CAlgeria#DZ.LG0c2LGLaghouat00001CIndiana#1570c2TITippecanoe00001ENorthCarolina#1970c2YAYadkin00001EVirginia#0990c2KGKing George000015Africa#0290c2MLMali000016Kansas#1510c2PRPratt000019Illinois#1870c2WRWarren00001CMissouri#1070c2LFLafayette00001BCalifornia#0110c2COColusa000015Texas#1790c2GRAGray000013Ohio#1410c2RORoss00001ANebraska#1110c2LILincoln000019Minnesota#0390c2DDDodge00001AKentucky#0230c2BKBracken00001BMichigan#0330c2CIChippewa000020SpainProvinces#0430c2SESegovia00001BOklahoma#1530c2WDWoodward000018Wisconsin#0950c2POPolk000020NewWorld#1100c2KRKorea (south)00001DWashington#0550c2SJSan Juan00002DPrinceEdwardIsland#CA.PE.AL0c2ALAnne's Land000016Belarus#010c2BRBrest00001ANorthIreland#140c2DWDown000024Luxembourg#030c2ESEsch-sur-Alzette000016Wales#150c2NONewport000014Romania#290c2OTOlt00001BColombia#010c2AMAAmazonas00001FEcuador#150c2SMorona-Santiago000014Turkey#840c2KAKars00002AWorldwithCountries#870c2WAWestern Sahara00002FIceland#230c2RARang&aacute;rvallas&yacute;sla000023FrenchGuiana#GF.CY.MY0c2MYMatoury000033NorthWestTerritories#CA.NT.BL0c2BLBigLake Country00001DMacedonia#MK.KS0c2KSKrusevo00001DMacedonia#MK.LI0c2LILipkovo00001AZambia#ZM.CE0c2CECentral000019Yemen#YE.DL0c2DLAl Dali00001BLibya#LY.TB0c2TBTarabulus00002DSolomonIsland#SB.RB0c2RBRennell and Bellona00001ERussia#RU.AR0c2ARArkhangelsk000018Guinea#GN.BE0c2BEBeyla00001APakistan#PK.SD0c2SDSindh00001CSwaziland#SZ.HH0c2HHHhohho00001ALibya#LY.BA0c2BABenghazi000018Nauru#NR.AB0c2ABAnabar00001AEurope2#EU.GR0c2GRGreece00001DNewWorld#1110c2KGKyrgyzstan000018Nevada#0210c2MIMineral000016Iowa#0250c2CACalhoun00001BAfrica#0300c2MRMauritania000017Texas#3610c2ORAOrange00001ELouisiana#1050c2TATangipahoa00001ENorthCarolina#0170c2BLBladen000017Georgia#1690c2JNJones000018Kentucky#2050c2RWRowan00001CFlorida#1330c2WGWashington000018Illinois#0070c2BNBoone00001EMississippi#1150c2POPontotoc000026PuertoRico#1250c2SGSan Germ&aacute;n00001FPennsylvania#0810c2LYLycoming000016Idaho#0170c2BRBonner000018Arkansas#1050c2PEPerry000020SpainProvinces#0440c2SVSevilla000018Oregon#0190c2DODouglas00001CTennessee#0210c2CHCheatham00001DColorado#1130c2SMSan Miguel00001AMontana#0830c2RIRichland00001CAlabama#1290c2WSWashington000016China#180c2GZGuizhou000017Belarus#020c2HOHomyel000030NorthIreland#150c2DNDungannon and South Tyrone000025USASouthEastRegion#220c2LALouisiana00001ELuxembourg#040c2LULuxembourg00001CWales#160c2PEPembrokeshire000018Romania#300c2PHPrahova00001AJamacia#010c2CLClarendon00001CColombia#020c2ANTAntioquia000023NorthKorea#060c2HWNHwanghae-namdo000019Turkey#850c2ZOZonguldak000022WorldwithCountries#880c2ZMZambia00001ELiechtenstein#010c2BABalzers000022MarshallIsland#MH.MH.EB0c2EBEbon00001CRussia#RU.ST0c2STStavropol000019Uganda#UG.LW0c2LWLuwero00001CRussia#RU.AS0c2ASAstrakhan000018Guinea#GN.BF0c2BFBoffa00001AThailand#TH.SA0c2SASatun000024TrinidadandTobago#TT.TO0c2TOTobago00001DVietnam#VN.BD0c2BDBinh Dinh000018Angola#AO.ZA0c2ZAZaire00002CBrazilRegion#BR.CW0c2CWCentral West Region00001FBurkinaFaso#BF.NR0c2NRNahouri000017NewWorld#1120c2LALaos00001BWashington#0570c2SASkagit000018Indiana#1590c2TPTipton00001ENorthCarolina#1990c2YNYancey00001FVirginia#1010c2KWKing William00001DRhodeIsland#0010c2BRBristol000018Kansas#1530c2RARawlins00001DIllinois#1890c2WSWashington00001BMissouri#1090c2LALawrence000021California#0130c2CNContra costa000018Texas#1810c2GRYGrayson000017Ohio#1430c2SASandusky000018Nebraska#1130c2LOLogan00001BMinnesota#0410c2DUDouglas00001CKentucky#0250c2BHBreathitt000018Michigan#0350c2CLClare00001ESpainProvinces#0450c2SOSoria00001BWisconsin#0970c2PRPortage000027Manitoba#CA.MB.WI0c2WIWinnipeq Region000017China#190c2LNLiaoning000017Belarus#030c2HRHrodna00001FNorthIreland#160c2FEFermanagh00001ALuxembourg#050c2MEMersch000014Wales#170c2POPowys00001BRomania#310c2SJS&#259;laj000018Jamacia#020c2HAHanover000019Colombia#030c2ARAArauca000017Ecuador#170c2YPastaza000023NorthKorea#070c2HWBHwanghae-bukto000017Turkey#860c2ARArdahan000018SouthKorea#010c2CJJeju000024WorldwithCountries#890c2ZWZimbabwe00001DLiechtenstein#020c2ESEschen00002BNewBrunswick#CA.NB.MR0c2MRMiramichi River00002APolandCounties#PL.SL.CM0c2SCMCzestochowa000025PolandCounties#PL.PM.GM0c2PGMGdansk000028PolandCounties#PL.PD.BM0c2PBMBialystok000027CentralAmerica2#CE.PR0c2PRPuerto Rico00001CSenegal#SN.DB0c2DBDiourbel000019Uganda#UG.MN0c2MNMukono00001EThailand#TH.SB0c2SBSing Buri000031DemocraticRepublicoftheCongo#CD.SK0c2SKSud-Kivu00001CNamibia#NA.OK0c2OKOkavango000018Nigeria#NG.ON0c2ONOndo000018Alabama#1310c2WIWilcox00001BNewWorld#1130c2MYMalaysia000014Nevada#0230c2NYNye000016Iowa#0270c2CRCarroll000018Africa#0320c2MAMorocco00001BTexas#3630c2PALPalo Pinto00001ALouisiana#1070c2TETensas000021NorthCarolina#0190c2BSBrunswick000017Georgia#1710c2LALamar00001AKentucky#2070c2RSRussell000018Illinois#0090c2BRBrown00001EMississippi#1170c2PSPrentiss000027PuertoRico#1270c2SJSan Juan (capital)00001DPennsylvania#0830c2MKMcKean000019Texas#0010c2ANDAnderson00001AIdaho#0190c2BVBonneville00001BArkansas#1070c2PHPhillips000022SpainProvinces#0460c2TATarragona000018Oregon#0210c2GIGilliam00001BTennessee#0230c2CSChester00001BColorado#1150c2SESedgwick00001BMontana#0850c2RORoosevelt00001ELiechtenstein#030c2GAGamprin000019China#200c2NMNei Mongol000019Belarus#040c2MAMahilyow00001BNorthIreland#170c2LRLarne00001BMalta#010c2GHG&#295;awdex00001CLuxembourg#060c2CLClervaux000018Taiwan#010c2CGChanghua000021Wales#180c2RTRhondda Cynon Taff00001ARomania#320c2SMSatu Mare000023Colombia#040c2ATLAtl&aacute;ntico000019Ecuador#180c2PPichincha000021NorthKorea#080c2KAEKaes&#335;ng00001BTurkey#870c2BRBart&#305;n000022WorldwithCountries#900c2GMGambia000029CentralAfricanRepublic#CF.VK0c2VKVakaga000018Somalia#SO.BR0c2BRBari00001DRussia#RU.SV0c2SVSverdlovsk000017Russia#RU.TL0c2TLTula000018Uganda#UG.NE0c2NENebbi000020Russia#RU.BK0c2BKBashkortostan000017Iran#IR.SM0c2SMSemnan00001EVietnam#VN.TG0c2TGTien Giang000049Ethiopia#ET.SN0c2SNSouthern (Nations,Nationalities and People's Region)000025DenmarkRegion#DK.ND0c2NDNordjylland000028WesternSahara#AF.WS0c2WSWestern Sahara00001BEthiopia#ET.AM0c2AMAmhara000017Togo#TG.CE0c2CECentre00001BEurope2#EU.GU0c2GUGuersey00001BNewWorld#1140c2MNMongolia00001DWashington#0590c2SKSkamania000017Indiana#1610c2UNUnion00001CVirginia#1030c2LALancaster00001BAfrica#0330c2MZMozambique00001ARhodeIsland#0030c2KEKent000015Kansas#1550c2RNReno000018Illinois#1910c2WYWayne000018Missouri#1110c2LELewis00001ECalifornia#0150c2DEDel Norte000016Texas#1830c2GREGregg000015Ohio#1450c2SCScioto000017Nebraska#1150c2LULoup00001DMinnesota#0430c2FAFaribault00001FKentucky#0270c2BGBreckinridge00001AMichigan#0370c2CNClinton00001FSpainProvinces#0470c2TETeruel000019Wisconsin#0990c2PCPrice00001DLiechtenstein#040c2MAMauren00001AChina#210c2NXNingxia Hui00001ENorthIreland#180c2LMLimavady00001CFinland#010c2AL&Aring;land000016Malta#020c2KEKemmuna00001CLuxembourg#070c2DIDiekirch000016Taiwan#020c2CHChiayi000019Lithuania#560c2ALAlytus000016Wales#190c2SWSwansea000016Romania#330c2SBSibiu00001BJamacia#040c2MAManchester00001AEcuador#190c2TTungurahua000024NorthKorea#090c2KANKangw&#335;n-do00001FTurkey#880c2IGI&#287;d&#305;r000020SouthKorea#030c2CBJeollabuk-do000021WorldwithCountries#910c2CGCongo000023MarshallIsland#MH.MH.EE0c2EEEbeya000024Alberta#CA.AB.AS0c2ASAlberta South00002CDistrictofColumbia#US.DC.SE0c2SESouth East00001ARwanda#RW.OU0c2OUWestern00001BLaos#LA.XS0c2XSXaisomboun000022Guyana#GY.PT0c2PTPotaro-Siparuni000018Jordan#JO.AJ0c2AJAjlun00001BRussia#RU.BL0c2BLBelgorod00001AChina2#CN.QH0c2QHQinghai00001DVietnam#VN.TH0c2THThanh Hoa00001BThailand#TH.RN0c2RNRanong00001BEthiopia#ET.SO0c2SOSomali000019Lebanon#LE.BI0c2BIBeqaa000021Lebanon#LE.AS0c2ASNorth Lebanon00001DVietnam#VN.BG0c2BGBac Giang000022Thailand#TH.AC0c2ACAmnat Charoen000026BurkinaFaso#BF.PA0c2PAPassor&eacute;000019Montana#0870c2RSRosebud000019Alabama#1330c2WNWinston000018NewWorld#1150c2NPNepal000013Iowa#0290c2CSCass000018Africa#0340c2NANamibia000017Texas#3650c2PANPanola00001ELouisiana#1090c2TRTerrebonne000020NorthCarolina#0210c2BUBuncombe000018Georgia#1730c2LNLanier00001FAlaska#0130c2AEAleutians East000018Kentucky#2090c2SCScott000019Illinois#0110c2BUBureau00001DMississippi#1190c2QUQuitman000020PuertoRico#1290c2SLSan Lorenzo00001DPennsylvania#0850c2MEMercer000018Texas#0030c2ANRAndrews000018Idaho#0210c2BUBoundary000017Arkansas#1090c2PIPike00001FSpainProvinces#0480c2TOToledo000016Oregon#0230c2GRGrant00001DTennessee#0250c2CBClaiborne000019Colorado#1170c2SUSummit00002DIceland#280c2SKSkagafjar&eth;ars&yacute;sla00001ELiechtenstein#050c2PLPlanken000016Belarus#060c2MIMinsk00002FSaintVincentandtheGrenadines#010c2CHCharlotte00001DNorthIreland#190c2LBLisburn000014Malta#030c2MAMalta00001BLuxembourg#080c2RERedange00001DTaiwan#030c2CSChiayi (City)000019Lithuania#570c2KUKaunas000016Wales#200c2TFTorfaen000018Romania#340c2SVSuceava000020Ecuador#200c2ZZamora-Chinchipe00001CTurkey#890c2KBKarab&uuml;k000025WorldwithCountries#920c2MIMauritius000032DemocraticRepublicoftheCongo#CD.BC0c2BCBas-Congo00001EHongKong#HK.TW0c2TWTsuen Wan000018Jordan#JO.BA0c2BABalqa00001CMacedonia#MK.KX0c2KXKarpos000025Macedonia#MK.MD0c2MDMakedonski Brod00001BRussia#RU.UD0c2UDUdmurtia000023CoteDivoire#CI.MC0c2MCMoyen-Comoe000017Oman#OM.JA0c2JADhofar00001ANamibia#NA.ON0c2ONOshana000026Ethiopia#ET.BE0c2BEBenshangul- Gumaz00001BAlgeria#DZ.MC0c2MCMascara00001BNewWorld#1160c2PKPakistan00001EWashington#0610c2SNSnohomish00001DIndiana#1630c2VAVanderburgh000016Virginia#1050c2LELee000016Africa#0350c2NENiger00001DRhodeIsland#0050c2NPNewport000019Kansas#1570c2RPRepublic000018Illinois#1930c2WHWhite00001AMissouri#1130c2LCLincoln00001ECalifornia#0170c2ELEl Dorado000017Texas#1850c2GRIGrimes000015Ohio#1470c2SESeneca00001CNebraska#1170c2MPMcPherson00001CMinnesota#0450c2FIFillmore00001AKentucky#0290c2BIBullitt00001BMichigan#0390c2CRCrawford000021SpainProvinces#0490c2VAValencia00001AWisconsin#1010c2RARacine000027WorldwithCountries#930c2AFAfghanistan00003CIceland#290c2SHSn&aelig;fellsnes-og Hnappadalss&yacute;sla00001ELiechtenstein#060c2RURuggell000019Belarus#070c2VIVitsebsk000032SaintVincentandtheGrenadines#020c2ANSaint Andrew000021NorthIreland#200c2MFMagherafelt000019Luxembourg#090c2WIWiltz000017Taiwan#040c2HHHsinchu000020Lithuania#580c2KLKlaip&#279;da000020Wales#210c2VGVale of Glamorgan00001ARomania#350c2TRTeleorman000028NorthKorea#110c2PYBP'y&#335;ngan-bukto000015Turkey#900c2KIKilis000025SouthKorea#050c2GBChungcheongbuk-do000027Alberta#CA.AB.CA0c2CACalgary and Area000023MarshallIsland#MH.MH.WH0c2WHWotho00001DMacedonia#MK.KY0c2KYKratovo00001CMacedonia#MK.LO0c2LOLozovo000026Sudan#SD.NB0c2NBNorth Bahr Al Ghazal000019Nepal#NP.GA0c2GAGandaki000018Russia#RU.TO0c2TOTomsk000016Libya#LY.SR0c2SRSurt000030FranceDepartment#FR.PO0c2POPyrenees Orientales00001DVietnam#VN.ST0c2STSoc Trang00001EGuinea#GN.BK0c2BKBok&eacute;00001EVietnam#VN.BI0c2BIBinh Duong000021Turkmenistan#TM.DA0c2DADashoguz000024Morocco#MA.MT0c2MTMeknes-Tafilalet000019Algeria#DZ.MD0c2MDMedea000019Montana#0890c2SASanders00001ENewWorld#1170c2PHPhilippines000019Nevada#0270c2PEPershing000014Iowa#0310c2CECedar000018Africa#0360c2NGNigeria000017Texas#3670c2PARParker000019Louisiana#1110c2UNUnion000026Virginia#8300c2WLWilliamsburg (City)00001DNorthCarolina#0230c2BKBurke000019Georgia#1750c2LULaurens000019Kentucky#2110c2SHShelby00001AIllinois#0130c2CACalhoun00001CMississippi#1210c2RARankin000018Europe#0010c2ALAlbania000029PuertoRico#1310c2SSSan Sebasti&aacute;n00001EPennsylvania#0870c2MIMifflin000019Texas#0050c2ANGAngelina000015Idaho#0230c2BTButte00001BArkansas#1110c2POPoinsett000023SpainProvinces#0500c2VLValladolid000017Oregon#0250c2HAHarney000018Tennessee#0270c2CYClay000019Colorado#1190c2TETeller000023WorldwithCountries#940c2AMArmenia000024Iceland#300c2STStrandas&yacute;sla00001DLiechtenstein#070c2SNSchaan000015China#240c2SXShanxi000031SaintVincentandtheGrenadines#030c2DASaint David00001BNorthIreland#210c2MYMoyle000027USASouthEastRegion#280c2MSMississippi00001BLuxembourg#100c2VIVianden00001ETaiwan#050c2HSHsinchu (City)000023Lithuania#590c2MRMarijampol&#279;000016Wales#220c2WXWrexham00001BRomania#360c2TMTimi&#351;000019Jamacia#070c2POPortland000021Colombia#080c2CAQCaquet&aacute;000020Ecuador#220c2USucumb&iacute;os000024NorthKorea#120c2PYOP'y&#335;ngyang000018Turkey#910c2OSOsmaniye00001ESouthKorea#060c2KWGangwon-do00001FKazakhstan#KZ.PA0c2PAPavlodar000018Jordan#JO.AM0c2AMAmman000023Macedonia#MK.KZ0c2KZKriva Palanka000021Libya#LY.SS0c2SSSabratah Surman000024Tibet#TI.NP0c2NPNyinchi Prefecture00001DThailand#TH.SG0c2SGSongkhla000038Pakistan#PK.TA0c2TAFederally Administered Tribal Areas000016Nauru#NR.AI0c2AIAiwo000018Nigeria#NG.OS0c2OSOsun00001BEurope2#EU.IE0c2IEIreland00002FSaudiArabia#SA.HS0c2HSAl Hudud Ash Shamaliyah00001CMacedonia#MK.MG0c2MGMogila00001ESudan#SD.ND0c2NDNorth Darfur00001DPhilippines#PH.LE0c2LELeyte000019Uganda#UG.MT0c2MTMoroto000017Iran#IR.TH0c2THTehran000020Thailand#TH.SH0c2SHSuphan Buri00001BEthiopia#ET.TI0c2TITigray00001BVietnam#VN.BK0c2BKBac Can000020Pakistan#PK.BA0c2BABalochistan000020Mauritius#MU.GP0c2GPGrand Port00001EBurkinaFaso#BF.NY0c2NYNayala000025NewWorld#1180c2RURussian Federation00001CWashington#0630c2SPSpokane00001CIndiana#1650c2VEVermillion00001AVirginia#1070c2LOLoudoun000020RhodeIsland#0070c2PRProvidence000015Kansas#1590c2RCRice00001CIllinois#1950c2WTWhiteside000017Missouri#1150c2LNLinn00001BCalifornia#0190c2FRFresno00001FAlaska#0160c2AWAleutians West00001ATexas#1870c2GUAGuadalupe000021Virginia#6500c2HAHampton (City)000015Ohio#1490c2SHShelby00001ANebraska#1190c2MAMadison000018Europe#0020c2ADAndorra00001CMinnesota#0470c2FRFreeborn000019Kentucky#0310c2BUButler000018Michigan#0410c2DEDelta00001FSpainProvinces#0510c2ZAZamora00001CWisconsin#1030c2RIRichland000027NewCaledonia#NC.SU.BP0c2BPBoulouparis000026WorldwithCountries#950c2AZAzerbaijan000032Iceland#310c2SMSu&eth;ur-M&uacute;las&yacute;sla000023Liechtenstein#080c2SBSchellenberg000017China#250c2SDShandong000032SaintVincentandtheGrenadines#040c2GESaint George000026NorthIreland#220c2NMNewry and Mourne00001ELuxembourg#110c2ECEchternach000017Taiwan#060c2HLHualien000026Lithuania#600c2PNPanev&#279;&#382;ys000017Romania#370c2TLTulcea00001DJamacia#080c2SDSaint Andrew000018Colombia#090c2CAUCauca000014Ecuador#230c2NNapo000020NorthKorea#130c2YANYanggang-do000016Turkey#920c2YLYalova00001BFiji#FJ.NO.MC0c2MCMacuata000023MarshallIsland#MH.MH.WJ0c2WJWotje00001EAlgeria#DZ.MG0c2MGMostaganem00001CSamoa #WS.VS0c2VSVaisigano000020Guinea#GN.TO0c2TOTougu&eacute;00001BUganda#UG.NK0c2NKNakaseke00001EThailand#TH.SI0c2SISi Sa Ket000020Kuwait#KW.FA0c2FAAl Farwaniyah000018Iran#IR.AR0c2ARArdebil00001CVietnam#VN.BL0c2BLBac Lieu00001CVietnam#VN.CB0c2CBCao Bang000017Nauru#NR.BA0c2BABaiti00001DColorado#1210c2WAWashington00001AMontana#0910c2SHSheridan00001CNewWorld#1190c2SGSingapore000017Nevada#0290c2STStorey00001AIowa#0330c2CGCerro Gordo000017Africa#0380c2RWRwanda000017Texas#3690c2PAMParmer00001DLouisiana#1130c2VEVermilion000020NorthCarolina#0250c2CACabarrus000015Georgia#1770c2LELee00001AKentucky#2130c2SISimpson00001AIllinois#0150c2CRCarroll00001BMississippi#1230c2SCScott000018Europe#0030c2ATAustria000021PuertoRico#1330c2SISanta Isabel00001DPennsylvania#0890c2MOMonroe000018Texas#0070c2ARAAransas000015Idaho#0250c2CACamas000017Arkansas#1130c2PLPolk000021SpainProvinces#0520c2ZRZaragoza00001BOregon#0270c2HRHood River000019Tennessee#0290c2CKCocke000032MadagascarRegions#MG.FI.AA0c2AAAtsimo-Atsinanana000026WorldwithCountries#960c2BDBangladesh000019USA#RI0c2RIRhode Island000036Iceland#320c2SUSu&eth;ur-&THORN;ingeyjars&yacute;sla00001ELiechtenstein#090c2TNTriesen000016China#260c2SAShaanxi000033SaintVincentandtheGrenadines#050c2PASaint Patrick000022NorthIreland#230c2NWNewtownabbey000018Finland#060c2LALapland000020Luxembourg#120c2GRGrevenmacher00001FTaiwan#070c2KHKaohsiung(City)000022Lithuania#610c2SA&Scaron;iauliai000017Indonesia#010c2ACAceh000017Romania#380c2VSVaslui00001AJamacia#090c2SNSaint Ann000018Colombia#100c2CESCesar000018Ecuador#240c2DOrellana00001ANorthKorea#140c2NAMNampo00001ATurkey#930c2DUD&uuml;zce000017Somalia#SO.BY0c2BYBay00001DZambia#ZM.CO0c2COCopperbelt00001EPhilippines#PH.LG0c2LGLaguna000022PapuaNewGuinea#PG.CE0c2CECentral00001ARussia#RU.BR0c2BRBryansk00001CVietnam#VN.TN0c2TNTay Ninh00001FThailand#TH.RT0c2RTRatchaburi00001BNamibia#NA.OS0c2OSOmusati00001BNigeria#NG.PL0c2PLPlateau000018Wisconsin#1050c2RORock00001CNewWorld#1200c2LKSri Lanka00001CWashington#0650c2STStevens000016Indiana#1670c2VIVigo000019Virginia#1090c2LULouisa000020RhodeIsland#0090c2WAWashington000016Kansas#1610c2RLRiley000017Illinois#1970c2WIWill00001DMissouri#1170c2LILivingston00001ACalifornia#0210c2GLGlenn000015Texas#1890c2HAEHale000014Ohio#1510c2STStark00001ANebraska#1210c2MEMerrick000018Europe#0040c2BYBelarus00001BMinnesota#0490c2GOGoodhue00001BKentucky#0330c2CACaldwell00001CMichigan#0430c2DIDickinson000023NewCaledonia#NC.SU.BR0c2BRBourail000022WorldwithCountries#970c2BTBhutan000022Liechtenstein#100c2TBTriesenberg000030SaintVincentandtheGrenadines#060c2GTGrenadines000020NorthIreland#240c2NDNorth Down00001ALuxembourg#130c2RMRemich000019Taiwan#080c2KCKaohsiung00001FLithuania#620c2TATaurag&#279;000017Indonesia#020c2BABali00001DRomania#390c2VLV&acirc;lcea000020Jamacia#100c2SCSaint Catherine00001FColombia#110c2CHOChoc&oacute;000028NorthKorea#150c2PYNP'y&#335;ngan-namdo000016Iraq#010c2ANAl-Anbar000019Senegal#SN.DK0c2DKDakar00001FLesotho#LS.BB0c2BBButha-Buthe000018Jordan#JO.AQ0c2AQAqaba00001CRussia#RU.TT0c2TTTatarstan00001FUK7#UK.CI0c2CIChannel Islands00001CEastTimor#TL.ER0c2ERErmera00001CUganda#UG.NM0c2NMNamutumba000025Libya#LY.TM0c2TMTarhunah Masallatah00001CTunisia#TN.JE0c2JEJendouba00001CThailand#TH.SK0c2SKSa Kaeo000024Qatar#QA.MS0c2MSMadinat Ach Shamal00001CVietnam#VN.BN0c2BNBac Ninh000021SriLanka#LK.NW0c2NWNuwara Eliya00001CNamibia#NA.OT0c2OTOshikoto000017Colorado#1230c2WLWeld00001CMontana#0930c2SBSilver Bow00001DNewWorld#1210c2TJTajikistan000017Nevada#0310c2WAWashoe000017Iowa#0350c2CHCherokee000026Africa#0400c2STSao Tome and Principe000016Texas#3710c2PECPecos00001ALouisiana#1150c2VNVernon000020NorthCarolina#0270c2CLCaldwell000019Georgia#1790c2LILiberty00001AKentucky#2150c2SPSpencer000017Illinois#0170c2CSCass00001DMississippi#1250c2SHSharkey000018Europe#0050c2BEBelgium00001DPuertoRico#1350c2TAToa Alta000021Pennsylvania#0910c2MTMontgomery000017Texas#0090c2ARCArcher000016Idaho#0270c2CNCanyon000017Arkansas#1150c2PPPope000018Oregon#0290c2JAJackson00001ATennessee#0310c2CFCoffee000026Manitoba#CA.MB.WR0c2WRWestern Region000022WorldwithCountries#980c2BNBrunei000035Iceland#340c2VBVestur-Bar&eth;astrandars&yacute;sla00001CLiechtenstein#110c2VAVaduz00001BNorthIreland#250c2OMOmagh000015Finland#080c2OUOulu00001ETaiwan#090c2CLKeelung (City)000021Lithuania#630c2TETel&scaron;iai00001BIndonesia#030c2BEBengkulu00002ABritishColumbia#010c2ACAlberni-Clayoquot000018Romania#400c2VNVrancea000020Jamacia#110c2SESaint Elizabeth000021Colombia#120c2CORC&oacute;rdoba000017Iraq#020c2BAAl-Basrah000019SouthKorea#100c2PUBusan000033NorthWestTerritories#CA.NT.DC0c2DCDiamond Capital000028PolandCounties#PL.DS.WM0c2DWMWalbrzych000029Macedonia#MK.MK0c2MKMakedonska Kamenica000026Macedonia#MK.NA0c2NAStaro Nagoricane00001CComoros #KM.AN0c2ANAnjouan000017Russia#RU.TU0c2TUTuva00001AMongolia#MN.HD0c2HDKhovd00001FSamoa #WS.FA0c2FAFaasaleleaga00002DLibya#LY.TN0c2TNTajura wa an Nawahi Al Arba00001BIran#IR.BK0c2BKKermanshah000018Wisconsin#1070c2RURusk00001BNewWorld#1220c2THThailand00001DWashington#0670c2THThurston000018Indiana#1690c2WAWabash00001CVirginia#1110c2LNLunenburg000018Africa#0410c2SNSenegal00002FAlaska#2010c2PWPrince of Wales-Outer Ketchika000016Kansas#1630c2RORooks00001DIllinois#1990c2WLWilliamson00001BMissouri#1190c2MNMcDonald00001DCalifornia#0230c2HUHumboldt00001AAlaska#0200c2ANAnchorage000015Texas#1910c2HALHall000015Ohio#1530c2SUSummit00001ANebraska#1230c2MOMorrill000027Europe#0060c2BABosnia and Herzegovina000019Minnesota#0510c2GRGrant00001BKentucky#0350c2CLCalloway000018Michigan#0450c2EAEaton000026Manitoba#CA.MB.ER0c2EREastern Region000023NewCaledonia#NC.NO.KA0c2KAKouaoua00002BWorldwithCountries#990c2MMBurma (Myanmar)000034Iceland#350c2VHVestur-H&uacute;navatnss&yacute;sla000015China#290c2YNYunnan00001ENorthIreland#260c2SBStrabane000019Bangladesh#810c2DADhaka00001CSuriname#100c2BRBrokopondo000016Taiwan#100c2KMKinmen000018Lithuania#640c2UTUtena00001AIndonesia#040c2JKJakarta000028BritishColumbia#020c2BNBulkley-Nechako000028Romania#410c2CLC&#259;l&#259;ra&#351;i00001CJamacia#120c2SJSaint James000028NorthKorea#170c2HABHamgy&#335;ng-bukto00001EIraq#030c2MUAl-Muthann&#257;000019SouthKorea#110c2SOSeoul000028PolandCounties#PL.KP.BM0c2KBMBydgoszcz000019Algeria#DZ.NA0c2NANaama000023Tanzania#TZ.ZN0c2ZNZanzibar North000018Angola#AO.HL0c2HLHuila000021PapuaNewGuinea#PG.CH0c2CHChimbu000017Russia#RU.TV0c2TVTver00001CRussia#RU.UL0c2ULUlyanovsk000017Uganda#UG.MY0c2MYMoyo00001BRussia#RU.BU0c2BUBuryatia00001BRussia#RU.CK0c2CKChukotka00001BRussia#RU.DA0c2DADagestan00001FVietnam#VN.TQ0c2TQTuyen Quang000027CaymanIslands#KY.SO0c2SOLittle Cayman000024Thailand#TH.SM0c2SMSamut Songkhram000020Madagascar#MG.MA0c2MAMahajanga00001EVietnam#VN.BP0c2BPBinh Phuoc000017Nigeria#NG.OY0c2OYOyo00001BEurope2#EU.HU0c2HUHungary00001CTennessee#0330c2COCrockett000017Colorado#1250c2YUYuma00001CMontana#0950c2SWStillwater00001FNewWorld#1230c2TMTurkmenistan00001BNevada#0330c2WPWhite Pine000018Iowa#0370c2CKChickasaw00001AAfrica#0420c2SYSeycelles000015Texas#3730c2POLPolk00001ELouisiana#1170c2WAWashington00001ENorthCarolina#0290c2CMCamden000019Georgia#1810c2LCLincoln000019Kentucky#2170c2TATaylor00001CIllinois#0190c2CHChampaign00001DMississippi#1270c2SISimpson000019Europe#0070c2BGBulgaria00001DPuertoRico#1370c2TBToa Baja00001EPennsylvania#0930c2MUMontour00001ATexas#0110c2ARSArmstrong000017Idaho#0290c2CRCaribou00001AArkansas#1170c2PRPrairie00001AOregon#0310c2JEJefferson00001BUSA#SC0c2SCSouth Carolina000039Iceland#360c2VIVestur-&Iacute;safjar&eth;ars&yacute;sla000018China#300c2GDGuangdong00001ABangladesh#820c2KHKhulna000025Australia#NT0c2NTNorthern Territory00001CSuriname#110c2CMCommewijne00001ATaiwan#110c2LKLienchiang00001ALithuania#650c2VLVilnius000018Indonesia#050c2JAJambi000020BritishColumbia#030c2CACapital000018Romania#420c2GRGiurgiu00001BJamacia#130c2SMSaint Mary00001BColombia#140c2GUVGuaviare00001FNorthKorea#180c2NAJRas&#335;n000020Iraq#040c2QAAl-Q&#257;disiyyah00001BSouthKorea#120c2INIncheon000026MarshallIsland#MH.MH.EN0c2ENEnewetak000024PolandCounties#PL.KP.TO0c2KTOTorun00001BFiji#FJ.WE.LT0c2LTLautoka000018Algeria#DZ.ML0c2MLMila000019Angola#AO.HM0c2HMHuambo00001CGuineaBissau#GW.OI0c2OIOio000019Lesotho#LS.BE0c2BEBerea00001AJordan#JO.AT0c2ATTafilah000023Philippines#PH.MA0c2MAMaguindanao00001CGabon#GA.WN0c2WNWoleu-Ntem000018Niger#NE.NI0c2NINiamey00001CHongKong#HK.EA0c2EAEastern000020Uganda#UG.NP0c2NPNakapiripirit00001ERussia#RU.CL0c2CLChelyabinsk000021Thailand#TH.SN0c2SNSakon Nakhon00001BSyria#SY.RA0c2RAAr Raqqah00001DNamibia#NA.OW0c2OWOhangwena00001DWisconsin#1090c2SCSt. Croix00001DNewWorld#1240c2UZUzbekistan00001EWashington#0690c2WKWahkiakum000018Indiana#1710c2WRWarren00001AVirginia#1130c2MAMadison00001DAfrica#0430c2SLSierra Leone000015Kansas#1650c2RHRush00001CIllinois#2010c2WBWinnebago000018Missouri#1210c2MOMacon00001DCalifornia#0250c2IMImperial000019Texas#1930c2HAMHamilton000017Ohio#1550c2TRTrumbull000018Nebraska#1250c2NANance000019Georgia#0010c2APAppling000018Europe#0080c2HYCroatia00001CMinnesota#0530c2HEHennepin00001EAustralia2#VIC0c2VICVictoria00001BKentucky#0370c2CBCampbell000018Michigan#0470c2EMEmmet000019USA#SD0c2SDSouth Dakota00002FIceland#370c2VSVestur-Skaftafellss&yacute;sla000023USARegion#010c2NENorthEast Region000015China#310c2HAHainan000015World#EU0c2EUEurope00001CBangladesh#830c2RJRajshahi000019Suriname#120c2CRCoronie000016Taiwan#120c2MLMiaoli000020BritishColumbia#040c2CRCariboo000016Romania#430c2IFIlfov00001DJamacia#140c2STSaint Thomas000021Colombia#150c2GUAGuain&iacute;a000023Iraq#050c2SUAs-Sulaym&#257;niyyah00001FArgentina#010c2BABuenos Aires00001FSouthKorea#130c2KGGyeonggi-do000020Europe2#EU.IM0c2IMIsles of Man00001FSaudiArabia#SA.JF0c2JFAl Jawf00001DHongKong#HK.WC0c2WCWan Chai000020Sudan#SD.NK0c2NKNorth Kurdufan00001FPhilippines#PH.MB0c2MBMasbate00001DMongolia#MN.HG0c2HGKhovsgol000022CoteDivoire#CI.NC0c2NCN'zi-Comoe000022Cyprus2#CY.TC0c2TCTurkish Cyprus00001BThailand#TH.RY0c2RYRayong00001EThailand#TH.SO0c2SOSukhothai000026TrinidadandTobago#TT.VI0c2VIVictoria00001BVietnam#VN.BR0c2BRBen Tre00001ETennessee#0350c2CMCumberland00001DMontana#0970c2SGSweet Grass00001ANewWorld#1250c2VNVietnam000015Iowa#0390c2CLClarke000018Africa#0440c2SOSomalia000017Texas#3750c2POTPotter00001BLouisiana#1190c2WEWebster000020NorthCarolina#0310c2CRCarteret000016Georgia#1830c2LOLong000017Kentucky#2190c2TOTodd00001CIllinois#0210c2CIChristian00001BMississippi#1290c2SMSmith00001FEurope#0090c2CZCzech Republic000022PuertoRico#1390c2TJTrujillo Alto000022Pennsylvania#0950c2NONorthampton000019Texas#0130c2ATAAtascosa000016Idaho#0310c2CSCassia00001AArkansas#1190c2PUPulaski00001AOregon#0330c2JOJosephine000027NorthAmerica_WOCentral#0050c2CACanada000023USARegion#020c2NWNorthWest Region000016China#320c2SCSichuan00001EBangladesh#840c2CGChittagong00001BSuriname#130c2MAMarowijne000016Taiwan#130c2NTNantou00001FIndonesia#070c2JTCentral Java000026BritishColumbia#050c2CNCentral Coast000019Jamacia#150c2TRTrelawny000018Colombia#160c2HUIHuila000018Norway#010c2AKAkershus000018Iraq#060c2BBB&#257;bil00001CArgentina#020c2CTCatamarca000024SouthKorea#140c2KBGyeongsangbuk-do00001DBhutan#BT.PM0c2PMPemagatsel000031DemocraticRepublicoftheCongo#CD.BN0c2BNBandundu00001AZambia#ZM.EA0c2EAEastern00002APhilippines#PH.MC0c2MCOccidental Mindoro000019Russia#RU.TY0c2TYTyumen000028HongKong#HK.CW0c2CWCentral and Western00001BRussia#RU.CN0c2CNChechnya000022Vietnam#VN.TT0c2TTThua Thien Hue00001AGuinea#GN.CK0c2CKConakry000021Thailand#TH.SP0c2SPSamut Prakan000019Nauru#NR.AR0c2ARAnibare000018Wisconsin#1110c2SASauk000019NewWorld#1260c2TWTaiwan000020Washington#0710c2WLWalla walla000019Indiana#1730c2WIWarrick00001AVirginia#1150c2MTMathews00001DAfrica#0450c2ZASouth Africa000018Kansas#1670c2RSRussell00001BIllinois#2030c2WFWoodford00001AMissouri#1230c2MDMadison000019California#0270c2INInyo000019Texas#1950c2HANHansford000019Ohio#1570c2TUTuscarawas000019Nebraska#1270c2NENemaha00001AGeorgia#0030c2ATAtkinson000018Europe#0100c2DKDenmark00001BMinnesota#0550c2HUHouston00001BKentucky#0390c2CRCarlisle00001AMichigan#0490c2GEGenesee000019SouthKorea#150c2TGDaegu000023USARegion#030c2SESouthEast Region00002AUSASouthEastRegion#370c2NCNorth Carolina00001BBangladesh#850c2BABarisal000021Finland#130c2SFSouthern Finland00001ASuriname#140c2NINickerie000016Taiwan#140c2PHPenghu00001CIndonesia#080c2JIEast Java000029BritishColumbia#060c2CKCentral Kootenay000016Albania#400c2BRBerat00001DJamacia#160c2WEWestmoreland00001DColombia#170c2LAGLa Guajira00001ANorway#020c2AAAust-Agder00001AIraq#070c2BGBaghd&#257;d000018Argentina#030c2CCChaco000026PolandCounties#PL.DS.WR0c2DWRWroclaw000023FrenchGuiana#GF.CY.OU0c2OUOuanary00001BEurope2#EU.HY0c2HYCroatia00001AEurope2#EU.JE0c2JEJersey00001CBrunei#BN.TE0c2TETemburong00001ABhutan#BT.PN0c2PNPunakha000027Philippines#PH.LN0c2LNLanao del Norte00002APhilippines#PH.MD0c2MDMisamis Occidental00001FMongolia#MN.GS0c2GSGovisumber00001AChina2#CN.SA0c2SAShaanxi000019Guinea#GN.DB0c2DBDabola00001AThailand#TH.TG0c2TGTrang00001DSyria#SY.RD0c2RDRif Dimashq00001CTennessee#0370c2DADavidson000017Montana#0990c2TETeton00001CNewWorld#1270c2HKHong Kong000013Iowa#0410c2CYClay000016Africa#0460c2SDSudan000019Texas#3770c2PREPresidio000024Louisiana#1210c2WBWest Baton Rouge000024Virginia#8400c2WTWinchester (City)00001FNorthCarolina#0330c2CSCaswell000019Georgia#1850c2LWLowndes000018Kentucky#2210c2TRTrigg000018Illinois#0230c2CLClark00001BMississippi#1310c2STStone000018Europe#0110c2EEEstonia00001BPuertoRico#1410c2UTUtuado000025Pennsylvania#0970c2NTNorthumberland000017Texas#0150c2AUSAustin000015Idaho#0330c2CLClark00001BArkansas#1210c2RARandolph000018Oregon#0350c2KLKlamath000020SouthKorea#160c2CNJeollanam-do000023USARegion#040c2SWSouthWest Region000017Peru#010c2AMAAmazonas000018Uruguay#010c2ARArtigas00001ABangladesh#860c2SYSylhet000020Finland#140c2EFEastern Finland000016Suriname#150c2PRPara000018Taiwan#150c2PTPingtung000029BritishColumbia#070c2COCentral Okanagan00001BAlbania#410c2DIDib&euml;r000019Jamacia#170c2KIKingston000018Iraq#080c2DADah&#363;k000019Argentina#040c2CHChubut000019Fiji#FJ.WE.ND0c2NDNandi000024MarshallIsland#MH.MH.ER0c2ERErikub000020FrenchGuiana#GF.SL.MN0c2MNMana00001CBurkinaFaso#BF.PO0c2POPoni00002AMorocco#MA.OL0c2OLOued Ed Dahab-Lagouira00002FTanzania#TZ.ZS0c2ZSZanzibar Central and South000019Brunei#BN.BE0c2BEBelait00001EMacedonia#MK.NG0c2NGNegotino00001CRussia#RU.VG0c2VGVolgograd00001BUganda#UG.NT0c2NTNtungamo00001ATunisia#TN.KB0c2KBKebili00001CVietnam#VN.TV0c2TVTra Vinh000017Nauru#NR.UA0c2UAUaboe00001DThailand#TH.SR0c2SRSaraburi00001EVietnam#VN.BU0c2BUBinh Thuan00001BVietnam#VN.DA0c2DADa Nang000024SaoTomeandPrincipe#ST.LE0c2LELemba000018Nauru#NR.AT0c2ATAnetan00001AWisconsin#1130c2SWSawyer000018NewWorld#1280c2MOMacau00001CWashington#0730c2WAWhatcom00001CIndiana#1750c2WSWashington00001EVirginia#1170c2MEMecklenburg00001AAfrica#0470c2SZSwaziland000017Kansas#1690c2SASaline000019Missouri#1250c2MEMaries000019California#0290c2KEKern000019Texas#1970c2HARHardeman000026Virginia#6600c2HRHarrisonburg (City)000014Ohio#1590c2UNUnion00001BNebraska#1290c2NUNuckolls000017Georgia#0050c2BABacon000018Europe#0120c2FIFinland00001BMinnesota#0570c2HBHubbard00001AKentucky#0410c2COCarroll00001AMichigan#0510c2GLGladwin000027NewCaledonia#NC.NO.KG0c2KGKaala-Gomen000036SaintKittsandNevis#010c2CCChrist Church Nichola Town000021Argentina#050c2CBC&oacute;rdoba000025SouthKorea#170c2GNChungcheongnam-do000021USARegion#050c2CRCentral Region000015Peru#020c2ANCAncash00001AUruguay#020c2CACanelones000020Finland#150c2WFWestern Finland00001CSuriname#160c2PMParamaribo000018Taiwan#160c2THTaichung00001DIndonesia#100c2YOYogyakarta000029BritishColumbia#080c2CSColumbia-Shuswap00001CAlbania#420c2DRDurr&euml;s000017Colombia#190c2METMeta000018Norway#040c2BUBuskerud00001FIraq#090c2DQDh&#299; Q&#257;r000016Mali#ML.SG0c2SGSegou00001AZambia#ZM.WE0c2WEWestern000029Macedonia#MK.MR0c2MRMavrovo and Rostusa00001ASudan#SD.NO0c2NONorthern000019Uganda#UG.OK0c2OKKoboko00001AVanuatu#VU.PM0c2PMPenama00001AChina2#CN.SC0c2SCSichuan000022FranceDepartment#FR.RH0c2RHRhone00001DVietnam#VN.VC0c2VCVinh Phuc000021Thailand#TH.SS0c2SSSamut Sakhon000021Vietnam#VN.BV0c2BVBaRia-VungTau00001DVietnam#VN.DB0c2DBDien Bien00001BTennessee#0390c2DEDecatur000017Montana#1010c2TOToole00001ANewWorld#1290c2ALAlbania000016Iowa#0430c2CTClayton000019Africa#0480c2TZTanzania000016Texas#3790c2RAIRains000020Louisiana#1230c2WCWest Carroll00001FNorthCarolina#0350c2CTCatawba000019Georgia#1870c2LPLumpkin00001AKentucky#2230c2TITrimble000017Illinois#0250c2CYClay00001FMississippi#1330c2SUSunflower000017Europe#0130c2FRFrance00001EPuertoRico#1430c2VAVega Alta00001CPennsylvania#0990c2PEPerry000017Texas#0170c2BAIBailey00001AIdaho#0350c2CWClearwater00001EArkansas#1230c2SFSt. Francis000015Oregon#0370c2LALake000032SaintKittsandNevis#020c2ASSaint Anne Sandy Point00001DArgentina#060c2CNCorrientes00001BSouthKorea#180c2KJGwangju000014China#360c2TBTibet000017Peru#030c2APUApurimac00001CUruguay#030c2CLCerro Largo00001BSuriname#170c2SASaramacca000022USANorthWestRegion#020c2AKAlaska00001FTaiwan#170c2TGTaichung (City)000022Indonesia#110c2KBWest Kalimantan000029BritishColumbia#090c2CMComox-Strathcona000018Albania#430c2ELElbasan000020Colombia#200c2NARNari&ntilde;o000018Norway#050c2FIFinnmark00001EIraq#100c2DIDiy&#257;l&#257;00002DSierraLeone#SL.WE.WR0c2WRWestern Area Rural000027FrenchGuiana#GF.SL.MP0c2MPMaripasoula000038NorthWestTerritories#CA.NT.WB0c2WBWood Buffalo Country00001CMauritania#MR.AD0c2ADAdrar000018Jordan#JO.AZ0c2AZZarqa00001DMacedonia#MK.NI0c2NIVinitsa000020CoteDivoire#CI.MR0c2MRMarahoue00001AGabon#GA.ES0c2ESEstuaire00001BChina2#CN.SD0c2SDShandong000018Guinea#GN.CO0c2COCoyah000020Thailand#TH.ST0c2STSurat Thani00001BLibya#LY.BU0c2BUAl Butnan000018Iran#IR.BS0c2BSBushehr00001AVietnam#VN.CM0c2CMCa Mau00001BVietnam#VN.DC0c2DCDac Lac00001BWisconsin#1150c2SHShawano00001ANewWorld#1300c2ADAndorra00001CWashington#0750c2WHWhitman000017Indiana#1770c2WYWayne00001CVirginia#1190c2MIMiddlesex000015Africa#0490c2TGTogo000016Kansas#1710c2SCScott000019Missouri#1270c2MAMarion00001ACalifornia#0310c2KIKings000017Texas#1990c2HADHardin000017Ohio#1610c2VWVan Wert00001CNetherland#0010c2DRDrenthe000017Nebraska#1310c2OTOtoe000017Georgia#0070c2BKBaker000018Europe#0140c2DEGermany00001AMinnesota#0590c2ISIsanti000019Kentucky#0430c2CTCarter00001AMichigan#0530c2GOGogebic000033SaintKittsandNevis#030c2GBSaint George Basseterre000023Argentina#070c2DFDistrito Federal00001BSouthKorea#190c2TJDaejeon000017Peru#040c2AREArequipa000018Uruguay#040c2COColonia00001CSuriname#180c2SISipaliwini000016Taiwan#180c2TATainan000023Indonesia#120c2KSSouth Kalimantan000028BritishColumbia#100c2CVCowichan Valley000015Albania#440c2FRFier000025Colombia#210c2NSANorte de Santander000017Norway#060c2HEHedmark000018Iraq#110c2ARArb&#299;l000025CaymanIslands#KY.CB0c2CBCayman Brac00001EThailand#TH.AT0c2ATAng Thong00001ACongo#CG.PL0c2PLPlateaux00001BEurope2#EU.IS0c2ISIceland000019Algeria#DZ.MS0c2MSMsila00001DLiberia#LR.RG0c2RGRiver Gee000017Bhutan#BT.PR0c2PRParo000019Laos#LA.HO0c2HOHouaphan000017Benin#BJ.OU0c2OUOueme00001FVietnam#VN.TY0c2TYThai Nguyen00001AThailand#TH.SU0c2SUSurin000018Thailand#TH.TK0c2TKTak00001BVietnam#VN.CN0c2CNCan Tho00001ATennessee#0410c2DKDeKalb00001AMontana#1030c2TRTreasure00001ANewWorld#1310c2ATAustria000016Iowa#0450c2CNClinton000018Texas#3810c2RANRandall000022Louisiana#1250c2WFWest Feliciana00001FNorthCarolina#0370c2CHChatham00001AGeorgia#1890c2MCMcduffie000018Kentucky#2250c2UNUnion00001ENetherland#0020c2FLFlevoland00001AIllinois#0270c2CNClinton000022Mississippi#1350c2TATallahatchie000017Europe#0150c2GRGreece00001EPuertoRico#1450c2VBVega Baja000023Pennsylvania#1010c2PHPhiladelphia000018Texas#0190c2BANBandera000016Idaho#0370c2CUCuster000019Arkansas#1250c2SASaline000015Oregon#0390c2LELane00002FMadagascarRegions#MG.FI.AM0c2AMAmoron'i Mania000033SaintKittsandNevis#040c2GGSaint George Gingerland000024Argentina#080c2EREntre R&iacute;os000024SouthKorea#200c2KNGyeongsangnam-do000017Peru#050c2AYAAyacucho000018Uruguay#050c2DUDurazno000018Suriname#190c2WAWanica00001DTaiwan#190c2TNTainan (City)000025Indonesia#130c2KTCentral Kalimantan000026BritishColumbia#110c2EKEast Kootenay000021Albania#450c2GJGjirokast&euml;r00001BColombia#220c2PUTPutumayo000019Norway#070c2HOHordaland000015Iraq#120c2KAKarbala000019Europe2#EU.IT0c2ITItaly000022Tanzania#TZ.ZW0c2ZWZanzibar West00001DUzbekistan#UZ.JI0c2JIJizzax000015UK7#UK.WA0c2WAWales000025Philippines#PH.LS0c2LSLanao del Sur00002FCentralAmerica2#CE.AG0c2AGAntigua and Barbuda00001CMongolia#MN.HN0c2HNKhentii000018Uganda#UG.PD0c2PDPader000019Benin#BJ.PL0c2PLPlateau000017Tunisia#TN.KF0c2KFKef00001CLibya#LY.BW0c2BWBani Walid00001DWisconsin#1170c2SESheboygan00001ANewWorld#1320c2BYBelarus00001BWashington#0770c2YAYakima000017Indiana#1790c2WEWells00001DVirginia#1210c2MOMontgomery000018Africa#0510c2TNTunisia000019Kansas#1730c2SGSedgwick000019Missouri#1290c2MCMercer000019California#0330c2LALake000017Texas#2010c2HASHarris000015Ohio#1630c2VIVinton00001ENetherland#0030c2FRFriesland000019Nebraska#1330c2PAPawnee000019Georgia#0090c2BDBaldwin000018Europe#0160c2HUHungary00001AMinnesota#0610c2ITItasca000018Kentucky#0450c2CSCasey000021Michigan#0550c2GTGrand Traverse000027MadagascarRegions#MG.TL.AD0c2ADAndroy000030SaintKittsandNevis#050c2JWSaint James Windward00001AArgentina#090c2FMFormosa000019SouthKorea#210c2ULUlsan000018Peru#060c2CAJCajamarca000017Uruguay#060c2FSFlores000013USA#AK0c2AKAlaska000016Taiwan#200c2TPTaipei000022Indonesia#140c2KIEast Kalimantan000026BritishColumbia#120c2FVFraser Valley000022Albania#460c2KOKor&ccedil;&euml;000021Colombia#230c2QUIQuind&iacute;o000026Norway#080c2MRM&oslash;re og Romsdal000017Iraq#130c2TSAt-Ta'mim00002DSierraLeone#SL.WE.WU0c2WUWestern Area Urban00002CDistrictofColumbia#US.DC.SW0c2SWSouth West000015Nauru#NR.BO0c2BOBoe00001EThailand#TH.CB0c2CBChon Buri000018Mali#ML.SK0c2SKSikasso00001DLiberia#LR.RI0c2RIRivercess000021Kazakhstan#KZ.QG0c2QGQaraghandy00001BRussia#RU.VL0c2VLVladimir000020SolomonIsland#SB.TE0c2TETemotu00001BTennessee#0430c2DIDickson000018Montana#1050c2VAValley00001ANewWorld#1330c2BEBelgium000017Iowa#0470c2CFCrawford000017Africa#0520c2UGUganda000017Texas#3830c2REAReagan000018Louisiana#1270c2WIWinn000020NorthCarolina#0390c2CECherokee00001AGeorgia#1910c2MIMcintosh000019Kentucky#2270c2WAWarren00001FNetherland#0040c2GEGelderland000018Illinois#0290c2COColes00001AMississippi#1370c2TETate000018Europe#0170c2ISIceland00001CPuertoRico#1470c2VQVieques00001BPennsylvania#1030c2PIPike000018Texas#0210c2BASBastrop000016Idaho#0390c2ELElmore000018Arkansas#1270c2SCScott000018Oregon#0410c2LILincoln000036NewfoundlandandLabrador#CA.NF.LA0c2LALabrador Region000031SaintKittsandNevis#060c2JCSaint John Capesterre000018Argentina#100c2JYJujuy000015Peru#070c2CALCallao000018Uruguay#070c2FDFlorida000014USA#AL0c2ALAlabama00001DTaiwan#210c2TCTaipei (City)00001AIndonesia#150c2LALampung00002BBritishColumbia#130c2FGFraser-Fort George00001BAlbania#470c2KUKuk&euml;s00001CColombia#240c2RISRisaralda000021EnglandRegion#010c2NENorth East000018Norway#090c2NONordland000019Iraq#140c2MAMays&#257;n000027Alberta#CA.AB.CR0c2CRCanadian Rockies000021Thailand#TH.CC0c2CCChachoengsao00001BMali#ML.TB0c2TBTombouctou00001EEthiopia#ET.DD0c2DDDire Dawa000016Congo#CG.PO0c2POPool00001CMorocco#MA.OR0c2OROriental000022Algeria#DZ.OB0c2OBOum el-Bouaghi000017Mali#ML.BA0c2BABamako00001CMacedonia#MK.OC0c2OCKocani000020Philippines#PH.LU0c2LULa Union000025CoteDivoire#CI.MV0c2MVMoyen-Cavally00001CRussia#RU.CV0c2CVChuvashia00001BChina2#CN.SH0c2SHShanghai00001DGuinea#GN.DI0c2DIDinguiraye00001EThailand#TH.UD0c2UDUttaradit00001ASyria#SY.QU0c2QUQuneitra00002CIran#IR.CM0c2CMChahar Mahall and Bakhtiari000021FranceDepartment#FR.AB0c2ABAube00001AWisconsin#1190c2TATaylor000029NewWorld#1340c2BHBosnia and Herzegovina000017Indiana#1810c2WHWhite00001FAfrica#0530c2WSWestern Sahara000017Kansas#1750c2SWSeward000019Missouri#1310c2MLMiller00001BCalifornia#0350c2LSLassen000019Texas#2030c2HRSHarrison000015Ohio#1650c2WAWarren00001ENetherland#0050c2GRGroningen00001ANebraska#1350c2PEPerkins000017Georgia#0110c2BNBanks000018Europe#0180c2IEIreland00001BMinnesota#0630c2JAJackson00001CKentucky#0470c2CHChristian00001AMichigan#0570c2GAGratiot000022NewCaledonia#NC.NO.KM0c2KMKoumac000031MadagascarRegions#MG.TL.AF0c2AFAtsimo-Andrefana00002ESaintKittsandNevis#070c2JFSaint John Figtree00001BArgentina#110c2LPLa Pampa000014Peru#080c2CUSCusco00001AUruguay#080c2LALavalleja00002AUSASouthEastRegion#450c2SCSouth Carolina000017Taiwan#220c2TTTaitung00002ABritishColumbia#140c2GVGreater Vancouver00001BAlbania#480c2LELezh&euml;000034Colombia#250c2SAPSan Andr&eacute;s and Providencia000021EnglandRegion#020c2NWNorth West00001ENorway#100c2NTNord-Trondelag00001EIraq#150c2NIN&#299;naw&#257;00001BMacedonia#MK.OD0c2ODOhrid000025Singapore#SG.NO0c2NONorth Singapore000018China2#CN.AH0c2AHAnhui000015Oregon#0430c2LNLinn000018Tennessee#0450c2DYDyer00001BMontana#1070c2WHWheatland00001BNewWorld#1350c2BGBulgaria00001CMaine#0010c2ANAndroscoggin000015Iowa#0490c2DADallas000017Africa#0540c2ZMZambia000015Texas#3850c2RELReal000017Indiana#0010c2ADAdams00001ENorthCarolina#0410c2COChowan000017Georgia#1930c2MAMacon00001DKentucky#2290c2WSWashington00001CNetherland#0060c2LILimburg000017Illinois#0310c2CKCook00001CMississippi#1390c2TPTippah000016Europe#0190c2ITItaly00001DPuertoRico#1490c2VLVillalba00001DPennsylvania#1050c2POPotter000017Texas#0230c2BAYBaylor000018Idaho#0410c2FRFranklin000019Arkansas#1290c2SESearcy000027NewCaledonia#NC.NO.KN0c2KNKon&eacute;00002CSaintKittsandNevis#080c2MCSaint Mary Cayon00001BArgentina#120c2LRLa Rioja00001CPuertoRico#010c2AJAdjuntas00001BPeru#090c2HUVHuancavelica00001AUruguay#090c2MAMaldonado000017Taiwan#230c2TYTaoyuan000025Indonesia#170c2NBWest Nusa Tenggara000028BritishColumbia#150c2KSKitimat-Stikine00001DAlbania#490c2SHShkod&euml;r00001CColombia#260c2SANSantander00001FScotlandRegion#780c2BOBorders00002FEnglandRegion#030c2YHYorkshire and the Humber000017Norway#110c2OPOppland000025ElSalvador#010c2AHAhuachap&aacute;n000018Iraq#160c2WAW&#257;sit000028Alberta#CA.AB.EA0c2EAEdmonton and Area000021FranceDepartment#FR.AD0c2ADAude000020SriLanka#LK.PR0c2PRPolonnaruwa000023Brunei#BN.BM0c2BMBrunei and Muara000020Philippines#PH.NC0c2NCCotabato00001ARussia#RU.VO0c2VOVologda00001DSamoa #WS.GE0c2GEGagaemauga000024Kiribati#KI.GI0c2GIGilbert Islands00001FGuyana#GY.BA0c2BABarima-Waini00001AMalawi#MW.KR0c2KRKaronga00002BFranceDepartment#FR.SE0c2SESeine et Marne000027NorthAmerica_WOCentral#0160c2MXMexico00001FWisconsin#1210c2TRTrempealeau00001ANewWorld#1360c2HYCroatia000019Indiana#1830c2WLWhitley000019Virginia#1250c2NENelson000019Africa#0550c2ZWZimbabwe000018Kansas#1770c2SNShawnee00001FMexico#0010c2AGAguascalientes00001EMissouri#1330c2MSMississippi000020California#0370c2LOLos Angeles000018Texas#2050c2HRTHartley000019Ohio#1670c2WSWashington000022Netherland#0070c2NONoord-Brabant000019Nebraska#1370c2PHPhelps000018Georgia#0130c2BWBarrow000017Europe#0200c2LVLatvia00001BMinnesota#0650c2KAKanabec000018Kentucky#0490c2CKClark00001CMichigan#0590c2HIHillsdale000016Iraq#170c2NAAn-Najaf000031SaintKittsandNevis#090c2PPSaint Paul Capesterre00001AArgentina#130c2MZMendoza00001DGrenada#010c2ANSaint Andrew000016Peru#100c2HUCHuanuco00001BUruguay#100c2MOMontevideo000025USASouthEastRegion#470c2TNTennessee000015Taiwan#240c2ILYilan000025Indonesia#180c2NTEast Nusa Tenggara00002ABritishColumbia#160c2KBKootenay Boundary00001CAlbania#500c2TRTiran&euml;000018Colombia#270c2SUCSucre00001FScotlandRegion#790c2CECentral000024EnglandRegion#040c2EMEast Midlands000014Norway#120c2OSOslo000022ElSalvador#020c2CACaba&ntilde;as000022Fiji#FJ.WE.NN0c2NNNadroga-Navosa00001ANigeria#NG.RI0c2RIRivers000028Philippines#PH.MN0c2MNMisamis Oriental000029Philippines#PH.ND0c2NDNegros Occidental000024CentralAmerica2#CE.BB0c2BBBarbados00001AMalawi#MW.KS0c2KSKasungu00001BMalawi#MW.LI0c2LILilongwe000019China2#CN.TA0c2TATaiwan000019Guinea#GN.DL0c2DLDalaba000018Oregon#0450c2MAMalheur00001BTennessee#0470c2FAFayette000018Montana#1090c2WIWibaux000021NewWorld#1370c2CZCzech Republic000019Maine#0030c2ARAroostook000014Iowa#0510c2DVDavis000017Africa#0560c2GMGambia00001ATexas#3870c2REDRed River000017Indiana#0030c2ALAllen000020Mexico#0020c2BABaja California00001CNorthCarolina#0430c2CYClay000019Georgia#1950c2MDMadison000018Kentucky#2310c2WYWayne000022Netherland#0080c2NHNoord-Holland00001BIllinois#0330c2CFCrawford000020Mississippi#1410c2TITishomingo00001EEurope#0210c2LILiechtenstein00001CPuertoRico#1510c2YBYabucoa000021Pennsylvania#1070c2SCSchuylkill000014Texas#0250c2BEEBee000017Idaho#0430c2FEFremont00001CArkansas#1310c2SBSebastian000033PrinceEdwardIsland#CA.PE.CS0c2CSCharlotte's Shore000020ElSalvador#030c2CHChalatenango000024Iraq#180c2SDSal&#257;h ad-D&#299;n000032SaintKittsandNevis#100c2PLSaint Paul Charlestown00001BArgentina#140c2MNMisiones00001APuertoRico#030c2ADAguada00001CGrenada#020c2DASaint David000012Peru#110c2ICAIca000020Uruguay#110c2PAPaysand&uacute;000016Taiwan#250c2YLYunlin000029BritishColumbia#170c2MWMount Waddington00001BAlbania#510c2VLVlor&euml;000019Colombia#280c2TOLTolima00002DScotlandRegion#800c2DGDumfries and Galloway000024EnglandRegion#050c2WMWest Midlands00001ENorway#130c2OT&Oslash;stfold000025SaoTomeandPrincipe#ST.LO0c2LOLobata000021Burma#MM.YA0c2YAYangon Division00001FLesotho#LS.TT0c2TTThaba-Tseka000023Philippines#PH.NE0c2NENueva Ecija00001BTanzania#TZ.IR0c2IRIringa00001DVietnam#VN.VL0c2VLVinh Long00001APalau#PW.KA0c2KAKayangel00001AWisconsin#1230c2VEVernon00001ANewWorld#1380c2DKDenmark00001BVirginia#1270c2NKNew Kent000016Africa#0570c2CGCongo000019Kansas#1790c2SDSheridan000024Mexico#0030c2BCBaja California Sur00001BMissouri#1350c2MIMoniteau00001BCalifornia#0390c2MAMadera000018Texas#2070c2HSKHaskell000022Virginia#6700c2HOHopewell (City)000014Ohio#1690c2WYWayne00001FNetherland#0090c2OVOverijssel000019Nebraska#1390c2PIPierce000018Georgia#0150c2BTBartow00001AEurope#0220c2LTLithuania00001DMinnesota#0670c2KNKandiyohi000017Kentucky#0510c2CYClay00001BMichigan#0610c2HOHoughton000018Norway#140c2RORogaland000024ElSalvador#040c2CUCuscatl&aacute;n000032SaintKittsandNevis#110c2PBSaint Peter Basseterre000021Argentina#150c2NQNeuqu&eacute;n00001DGrenada#030c2GESaint George000014Peru#120c2JUNJunin00001AUruguay#120c2RNRio Negro000020BritishColumbia#180c2NANanaimo000022Colombia#290c2VACValle del Cauca00001CScotlandRegion#810c2FIFife00001BEnglandRegion#060c2EAEast000023FranceDepartment#FR.AG0c2AGAriege000017Nauru#NR.BU0c2BUBuada000025CaymanIslands#KY.BT0c2BTBodden Town00001DThailand#TH.BR0c2BRBuri Ram000023Somalia#SO.WO0c2WOWoqooyi Galbeed00001BAlgeria#DZ.OG0c2OGOuargla000022PapuaNewGuinea#PG.WE0c2WEWestern00001BRussia#RU.VR0c2VRVoronezh00001ALibya#LY.WA0c2WAAl Wahah000019Malawi#MW.LK0c2LKLikoma00001BMalawi#MW.MA0c2MAMachinga000022Massachusetts#0010c2BABarnstable000017Oregon#0470c2MRMarion00001CTennessee#0490c2FEFentress00001DMontana#1110c2YSYellowstone00001ANewWorld#1390c2EEEstonia00001AMaine#0050c2CUCumberland000018Oklahoma#0010c2ADAdair000016Iowa#0530c2DEDecatur00001AAfrica#0580c2MUMauritius000017Texas#3890c2REVReeves00001DIndiana#0050c2BABartholomew000019Mexico#0040c2CACampeche000021NorthCarolina#0450c2CVCleveland000018Georgia#1970c2MRMarion00001AKentucky#2330c2WBWebster00001CNetherland#0100c2UTUtrecht00001DIllinois#0350c2CMCumberland00001CMississippi#1430c2TUTunica00001BEurope#0230c2LULuxembourg00001APuertoRico#1530c2YUYauco00001DPennsylvania#1090c2SNSnyder000015Texas#0270c2BELBell00001ENewHampshire#0010c2BEBelknap000013Idaho#0450c2GEGem000019Arkansas#1330c2SVSevier00001DEnglandRegion#070c2LOLondon000020Norway#150c2SOSogn og Fjordane00001FElSalvador#050c2LILa Libertad000030SaintKittsandNevis#120c2TLSaint Thomas Lowland00001CArgentina#160c2RNRio Negro00001DPuertoRico#050c2ALAguadilla00001BGrenada#040c2JOSaint John00001APeru#130c2LALLa Libertad000017Uruguay#130c2RVRivera000015USA#AR0c2ARArkansas000023Indonesia#210c2STCentral Sulawesi000027BritishColumbia#190c2NONorth Okanagan000020Colombia#300c2VAUVaup&eacute;s000020ScotlandRegion#820c2GPGrampian000025PolandCounties#PL.WN.EM0c2WEMElblag000024FranceDepartment#FR.AH0c2AHArdeche00001FMacedonia#MK.NS0c2NSNovo Selo000022Philippines#PH.MQ0c2MQMarinduque00001AUganda#UG.PL0c2PLPallisa00001FSamoa #WS.GI0c2GIGagaifomauga000019Thailand#TH.TT0c2TTTrat000019Wisconsin#1250c2VIVilas00001ANewWorld#1400c2FIFinland000018Kansas#1810c2SHSherman000018Mexico#0050c2CHChiapas000019Missouri#1370c2MRMonroe00001ACalifornia#0410c2MRMarin000015Texas#2090c2HYSHays000017Ohio#1710c2WIWilliams00001CNetherland#0110c2ZEZeeland000019Nebraska#1410c2PLPlatte00001AGeorgia#0170c2BHBen hill00001AEurope#0240c2MKMacedonia00001BMinnesota#0690c2KIKittson00001AKentucky#0530c2CNClinton000018Michigan#0630c2HUHuron000025MadagascarRegions#MG.AS.SV0c2SVSava000021EnglandRegion#080c2SESouth East00002BNorway#160c2STS&oslash;r-Tr&oslash;ndelag00001AElSalvador#060c2PALa Paz000036SaintKittsandNevis#130c2TMSaint Thomas Middle Island000018Argentina#170c2SASalta00001BGrenada#050c2MASaint Mark000019Peru#140c2LAMLambayeque000016Uruguay#140c2RORocha000026Indonesia#220c2SGSouth East Sulawesi000029BritishColumbia#200c2NRNorthern Rockies00001AColombia#310c2CIDVichada000020ScotlandRegion#830c2HIHighland000026NovaScotia#CA.NS.MD0c2MDMarine Drive00001AFiji#FJ.CE.NM0c2NMNamosi000020FranceDepartment#FR.AI0c2AIAin00001CVietnam#VN.DN0c2DNDong Nai000020Kazakhstan#KZ.QO0c2QOQyzylorda000018Nigeria#NG.AB0c2ABAbia00001ASenegal#SN.FK0c2FKFatick00001DUzbekistan#UZ.KH0c2KHXorazm000028Philippines#PH.MR0c2MROriental Mindoro00001DSerbia#RS.ZC0c2ZCWest Backa00001AMalawi#MW.MC0c2MCMchinji000020Iran#IR.WA0c2WAWest Azarbaijan000021Massachusetts#0030c2BEBerkshire000017Oregon#0490c2MOMorrow00001CTennessee#0510c2FRFranklin000019NewWorld#1410c2FRFrance000018Maine#0070c2FRFranklin00001AOklahoma#0030c2ALAlfalfa000017Iowa#0550c2DLDelaware000016Alaska#2200c2SISitka000017Delaware#0010c2KEKent000018Texas#3910c2REFRefugio000018Indiana#0070c2BEBenton00001AMexico#0060c2CIChihuahua000020NorthCarolina#0470c2CUColumbus00001CGeorgia#1990c2MEMeriwether000016Kansas#0010c2ALAllen00001AKentucky#2350c2WHWhitley000021Netherland#0120c2ZUZuid-Holland000019Illinois#0370c2DEDeKalb00001BMississippi#1450c2UNUnion000016Europe#0250c2MTMalta00001FPennsylvania#1110c2SOSomerset000016Texas#0290c2BEXBexar00001ENewHampshire#0030c2CACarroll000017Idaho#0470c2GOGooding000018Arkansas#1350c2SHSharp000021EnglandRegion#090c2SWSouth West000018Norway#170c2TETelemark000023ElSalvador#070c2UNLa Uni&oacute;n00001BArgentina#180c2SJSan Juan000020PuertoRico#070c2ABAguas Buenas00001EGrenada#060c2PASaint Patrick000013Peru#150c2LIMLima000016Uruguay#150c2SASalto000022Honduras#010c2ATAtl&aacute;ntida00002DBritishColumbia#210c2OSOkanagan-Similkameen00001BColombia#320c2CASCasanare00001FScotlandRegion#840c2LOLothian000021SierraLeone#SL.SO.BN0c2BNBonthe000020Iran#IR.EA0c2EAEast Azarbaijan00001CVietnam#VN.DO0c2DODac Nong00001DSriLanka#LK.PX0c2PXPuttalam00001DMauritania#MR.TG0c2TGTagant00002CPapuaNewGuinea#PG.WH0c2WHWestern Highlands000021HongKong#HK.WT0c2WTWong Tai Sin00001FPapuaNewGuinea#PG.EG0c2EGEnga00001BYemen#YE.HD0c2HDHadramawt00001FLibya#LY.WD0c2WDWadi al Hayat000021FranceDepartment#FR.TA0c2TATarn00001CWisconsin#1270c2WAWalworth00001ANewWorld#1420c2DEGermany00001EVirginia#1310c2NTNorthampton000016Kansas#1830c2SMSmith000025Mexico#0070c2COCoahuila de Zaragoza00001DMissouri#1390c2MYMontgomery00001DCalifornia#0430c2MIMariposa000019Texas#2110c2HEPHemphill000013Ohio#1730c2WOWood000017Nebraska#1430c2POPolk000019Georgia#0190c2BIBerrien000018Europe#0260c2MDMoldova00001FMinnesota#0710c2KOKoochiching00001DKentucky#0550c2CDCrittenden000019Michigan#0650c2INIngham000026MadagascarRegions#MG.AV.IT0c2ITItasy000015Norway#180c2TRTroms000022ElSalvador#080c2MOMoraz&aacute;n000032SaintKittsandNevis#150c2TPTrinity Palmetto Point00001BArgentina#190c2SLSan Luis000015Peru#160c2LORLoreto000019Uruguay#160c2SJSan Jose000017USA#CA0c2CACalifornia000027Croatia#010c2BBBjelovarsko-Bilogorska00001BHonduras#020c2CHCholuteca00001FIndonesia#240c2SBWest Sumatra000024BritishColumbia#220c2PRPeace River00001FColombia#330c2CUNCundinamarca00001DSierraLeone#SL.SO.BO0c2BOBo000025PolandCounties#PL.PK.KM0c2PKMKrosno00001DNunavut#CA.NU.QK0c2QKBaffin00001BBotswana#BW.GH0c2GHGhanzi00001CNauru#NR.DE0c2DEDenigomodu000019Brunei#BN.TU0c2TUTutong000019Liberia#LR.SI0c2SISinoe00001BNigeria#NG.AD0c2ADAdamawa000025Panama#PA.KM0c2KMKuna de Madungandi00001DMacedonia#MK.NV0c2NVNovatsi000029Philippines#PH.MT0c2MTMountain Province00002CPapuaNewGuinea#PG.EH0c2EHEastern Highlands000017Uganda#UG.OY0c2OYOyam00002BFranceDepartment#FR.SL0c2SLSaone et Loire000032FranceDepartment#FR.TB0c2TBTerritoire de Belfort00001FMassachusetts#0050c2BRBristol00001AOregon#0510c2MUMultnomah00002ENorthAmerica_WOCentral#0230c2USUnited States00001ATennessee#0530c2GIGibson000019NewWorld#1430c2GRGreece000017Maine#0090c2HAHancock000018Oklahoma#0050c2ATAtoka000019Iowa#0570c2DMDes Moines00001DDelaware#0030c2NENew castle000018Texas#3930c2ROBRoberts00001BIndiana#0090c2BLBlackford000017Mexico#0080c2CLColima00001ENorthCarolina#0490c2CNCraven000018Georgia#2010c2MLMiller000019Kansas#0030c2ANAnderson000018Kentucky#2370c2WOWolfe00001AIllinois#0390c2DWDe Witt00001EMississippi#1470c2WAWalthall000017Europe#0270c2MCMonaco00001FPennsylvania#1130c2SUSullivan000017Texas#0310c2BLABlanco00001FNewHampshire#0050c2CHCheshire000015Idaho#0490c2IDIdaho000018Arkansas#1370c2STStone000029NewCaledonia#NC.SU.DU0c2DUDumb&eacute;a000022NewCaledonia#NC.SU.FA0c2FAFarino00001ANorway#190c2VAVest-Agder00001EElSalvador#090c2SMSan Miguel00001DArgentina#200c2SCSanta Cruz00001CPuertoRico#090c2AIAibonito00001CPeru#170c2MDDMadre de Dios000018Uruguay#170c2SOSoriano000021Croatia#020c2SPBrodsko-Posavska00001EHonduras#030c2CLCol&oacute;n000021USANorthWestRegion#160c2IDIdaho000025BritishColumbia#230c2POPowell River000032Colombia#340c2DCBogot&aacute; (Distrito Capital)000025PolandCounties#PL.MA.KM0c2MKMKrakow000026FrenchGuiana#GF.SL.PA0c2PAPapaichton000023FranceDepartment#FR.AL0c2ALAllier00001CKyrgyzstan#KG.NA0c2NANaryn00001FThailand#TH.CM0c2CMChiang Mai00001CTunisia#TN.KR0c2KRKairouan00002BFranceDepartment#FR.SM0c2SMSeine Maritime00001FThailand#TH.UN0c2UNUdon Thani000018Syria#SY.TA0c2TATartus000018Michigan#0670c2IOIonia00002ANorthAmerica_WOCentral#0240c2GLGreenland00001CWisconsin#1290c2WSWashburn00001ANewWorld#1440c2HUHungary000021Virginia#1330c2NHNorthumberland00001CSouthDakota#0030c2AUAurora000019Kansas#1850c2SFStafford000018Mexico#0090c2DUDurango000019Missouri#1410c2MGMorgan00001ECalifornia#0450c2MEMendocino00001ATexas#2130c2HNDHenderson000016Ohio#1750c2WDWyandot00001DNebraska#1450c2RWRed Willow000016Georgia#0210c2BBBibb00001BEurope#0280c2MOMontenegro000021Minnesota#0730c2LQLac Qui Parle00001DKentucky#0570c2CMCumberland000018Norway#200c2VEVestfold000020ElSalvador#100c2SSSan Salvador00001BArgentina#210c2SFSanta Fe000016USA#TN0c2TNTennessee000017Peru#180c2MOQMoquegua000022Uruguay#180c2TATacuaremb&oacute;00002CCroatia#030c2DNDubrova&#269;ko-Neretvanska00001BHonduras#040c2CMComayagua000017Ontario#010c2ALAlgoma000020Indonesia#260c2SUNorth Sumatra00002FBritishColumbia#240c2SQSkeena-Queen Charlotte000021Colombia#350c2BOLBol&iacute;var000023ScotlandRegion#870c2SCStrathclyde00003DNorthWestTerritories#CA.NT.WR0c2WRWaterfalls Valley (Route)00002ANovaScotia#CA.NS.LR0c2LRLighthouse Route00002CFranceDepartment#FR.AM0c2AMAlpes Maritimes00001DThailand#TH.CN0c2CNChai Nat00001DSaudiArabia#SA.JZ0c2JZJizan000018Chad#TD.SA0c2SASalamat00001FKazakhstan#KZ.QS0c2QSQostanay00001DMauritania#MR.AS0c2ASAssaba00001DZimbabwe#ZW.BU0c2BUBulawayo00001BMalawi#MW.MG0c2MGMangochi00001DTunisia#TN.KS0c2KSKasserine000017Oman#OM.MA0c2MAMuscat000018Arkansas#1390c2UNUnion00001DMassachusetts#0070c2DUDukes000015Oregon#0530c2POPolk000019Tennessee#0550c2GLGiles00001ANewWorld#1450c2ISIceland000018Maine#0110c2KEKennebec000019Oklahoma#0070c2BEBeaver000018Iowa#0590c2DIDickinson000019Delaware#0050c2SUSussex00001ATexas#3950c2ROERobertson00001CNewJersey#0010c2ATAtlantic000017Indiana#0110c2BOBoone00001BMexico#0100c2GUGuanajuato000022NorthCarolina#0510c2CBCumberland000019Kansas#0050c2ATAtchison00001BKentucky#2390c2WDWoodford00001AIllinois#0410c2DODouglas00001CMississippi#1490c2WRWarren000025WorldwithCountries#1000c2KHCambodia00001CEurope#0290c2NLNetherlands000022Pennsylvania#1150c2SQSusquehanna000017Texas#0330c2BORBorden00001BNewHampshire#0070c2COCoos000019Idaho#0510c2JEJefferson00001DElSalvador#110c2SASanta Ana000026Argentina#220c2SESantiago del Estero000021PuertoRico#110c2ANA&ntilde;asco000014Peru#190c2PASPasco00001FUruguay#190c2TTTreinta y Tres000019Croatia#040c2ISIstarska00001EHonduras#050c2CPCop&aacute;n000016Ontario#020c2BRBrant000026Poland#720c2DSDolno&#347;l&#261;skie000022Cuba#010c2PRPinar del R&iacute;o00002ABritishColumbia#250c2SLSquamish-Lillooet000020Colombia#360c2BOYBoyac&aacute;00001FScotlandRegion#880c2TATayside000022FrenchGuiana#GF.CY.RK0c2RKRegina000025FranceDepartment#FR.AN0c2ANArdennes00002DFranceDepartment#FR.BD0c2BDBouches du Rhone00001DSomalia#SO.GA0c2GAGalguduud000027CentralAmerica2#CE.SV0c2SVEl Salvador00001EMacedonia#MK.PE0c2PEPetrovec00001ANepal#NP.JA0c2JAJanakpur000017UK7#UK.EN0c2ENEngland00001AChina2#CN.TJ0c2TJTianjin000022FranceDepartment#FR.SO0c2SOSomme000021Guinea#GN.DU0c2DUDubr&eacute;ka00001AGuinea#GN.FA0c2FAFaranah00001AKentucky#0590c2DADaviess000018Michigan#0690c2ISIosco00001EWisconsin#1310c2WHWashington00001ANewWorld#1460c2IRIreland00001BVirginia#1350c2NWNottoway00001CSouthDakota#0050c2BEBeadle000018Kansas#1870c2STStanton000019Mexico#0110c2GEGuerrero00001DMissouri#1430c2NMNew Madrid00001BCalifornia#0470c2MCMerced000018Texas#2150c2HIDHidalgo000023Virginia#6780c2LXLexington (City)00001DNebraska#1470c2RIRichardson00001AGeorgia#0230c2BLBleckley000022WorldwithCountries#1010c2CNChina000017Europe#0300c2NONorway000018Minnesota#0750c2LALake00001FElSalvador#120c2SVSan Vicente000023Argentina#230c2TFTierra del Fuego000014Peru#200c2PIUPiura000020Croatia#050c2KAKarlova&#269;ka00001FHonduras#060c2CRCort&eacute;s000016Ontario#030c2BUBruce000022Poland#730c2KPKujawsko-Pomorskie000021Cuba#020c2CHCiudad de La Habana000019Indonesia#280c2MAMaluku000020BritishColumbia#260c2STStikine000019Colombia#370c2CALCaldas000025ScotlandRegion#890c2WIWestern Isles000018Libya#LY.DR0c2DRDarnah000022SolomonIsland#SB.CH0c2CHChoiseul00001AChina2#CN.BJ0c2BJBeijing00001DVietnam#VN.DT0c2DTDong Thap00001DThailand#TH.CP0c2CPChumphon00001AEurope2#EU.KO0c2KOKosovo000022Tibet#TI.QP0c2QPQamdo Prefecture00001ENewHampshire#0090c2GRGrafton000016Idaho#0530c2JRJerome00001CArkansas#1410c2VBVan Buren00001DMassachusetts#0090c2ESEssex000018Oregon#0550c2SHSherman00001CTennessee#0570c2GRGrainger000018NewWorld#1470c2ITItaly000014Maine#0130c2KNKnox00001AOklahoma#0090c2BCBeckham000016Iowa#0610c2DUDubuque000019Texas#3970c2ROCRockwall00001ANewJersey#0030c2BEBergen000017Indiana#0130c2BRBrown000018Mexico#0120c2HIHidalgo000021NorthCarolina#0530c2CKCurrituck00001AGeorgia#2050c2MTMitchell000017Kansas#0070c2BABarber000019Illinois#0430c2DPDuPage000020Mississippi#1510c2WSWashington000027WorldwithCountries#1020c2TPEast Timor000017Europe#0310c2PLPoland00001CPennsylvania#1170c2TITioga000017Texas#0350c2BOSBosque00001DElSalvador#130c2SOSonsonate000021Argentina#240c2TMTucum&aacute;n00001BPuertoRico#130c2ACArecibo000013Peru#210c2PUNPuno000014USA#AZ0c2AZArizona000036Croatia#060c2KKKoprivni&#269;ko-Kri&#382;eva&#269;ka000023Honduras#070c2EPEl Para&iacute;so00001DOntario#040c2CKChatham-Kent000023Poland#740c2LD&#321;&oacute;dzkie000016Cuba#030c2MAMatanzas00001FIndonesia#290c2MUNorth Maluku000027BritishColumbia#270c2SCSunshine Coast00001CColombia#380c2MAGMagdalena00002BFrenchGuiana#GF.CY.RM0c2RMRemire Montjoly00001DFiji#FJ.CE.NT0c2NTNaitasiri000034FranceDepartment#FR.AP0c2APAlpes de Haute Provence000023BurkinaFaso#BF.SE0c2SES&eacute;no00002BPapuaNewGuinea#PG.WN0c2WNWest New Britain000029Guyana#GY.UD0c2UDUpper Demerara-Berbice00001DKazakhstan#KZ.AA0c2AAAlmaty00001ASerbia#RS.ZJ0c2ZJZajecar000018Yemen#YE.HJ0c2HJHajjah00001BBurundi#BI.KI0c2KIKirundo00001AMalawi#MW.MJ0c2MJMulanje00002CFranceDepartment#FR.TG0c2TGTarn et Garonne000025Thailand#TH.UR0c2URUbon Ratchathani00001BKentucky#0610c2EDEdmonson000017Michigan#0710c2IRIron00001CWisconsin#1330c2WUWaukesha000019NewWorld#1480c2LVLatvia000019Virginia#1370c2OROrange00001DSouthDakota#0070c2BNBennett000018Kansas#1890c2SVStevens000018Mexico#0130c2JAJalisco000019Missouri#1450c2NENewton00001ACalifornia#0490c2MOModoc000015Texas#2170c2HILHill000023Virginia#6800c2LYLynchburg (City)000017Nebraska#1490c2RORock00001AGeorgia#0250c2BEBrantley000024WorldwithCountries#1030c2GEGeorgia000019Europe#0320c2PTPortugal000025Minnesota#0770c2LWLake of the Woods000023ElSalvador#140c2USUsulut&aacute;n000019Peru#220c2SAMSan Martin000023Croatia#070c2KZKrapinsko-Zagorska00002AHonduras#080c2FMFrancisco Moraz&aacute;n000019Ontario#050c2COCochrane000019Poland#750c2LULubelskie000021Cuba#040c2IJIsla de la Juventud00001CIndonesia#300c2JRWest Java000028BritishColumbia#280c2TNThompson-Nicola00001FThailand#TH.CR0c2CRChiang Rai00001ANigeria#NG.TA0c2TATaraba00001DMacedonia#MK.PH0c2PHPehcevo00002BPapuaNewGuinea#PG.EN0c2ENEast New Britain000018Uganda#UG.RA0c2RARakai00001DMalawi#MW.NA0c2NANkhata Bay000023NewHampshire#0110c2HBHillsborough000018Idaho#0550c2KOKootenai00001DArkansas#1430c2WAWashington000020Massachusetts#0110c2FRFranklin00001AOregon#0570c2TITillamook00001ATennessee#0590c2GEGreene000020NewWorld#1490c2LNLiechtenstein000017Maine#0150c2LILincoln000019Oklahoma#0110c2BLBlaine000014Iowa#0630c2EMEmmet000018Texas#3990c2RUNRunnels00001ENewJersey#0050c2BUBurlington000019Indiana#0150c2CACarroll000017Mexico#0140c2MEMexico00001CNorthCarolina#0550c2DADare000018Georgia#2070c2MOMonroe000017Kansas#0090c2BTBarton000018Illinois#0450c2EDEdgar00001BMississippi#1530c2WYWayne000022WorldwithCountries#1040c2INIndia000018Europe#0330c2RORomania00001CPennsylvania#1190c2UNUnion000016Texas#0370c2BOIBowie00001APuertoRico#150c2ARArroyo000014Peru#230c2TACTacna000023Croatia#080c2LSLi&#269;ko-Senjska000020Honduras#090c2GDGracias a Dios000019Ontario#060c2DUDufferin000018Poland#760c2LBLubuskie00001BCuba#050c2CMCamag&uuml;ey000021Indonesia#310c2SANorth Sulawesi000028PolandCounties#PL.KP.WL0c2KWLWloclawek000021FrenchGuiana#GF.CY.RO0c2RORoura000026FrenchGuiana#GF.CY.SE0c2SESaint Elie000022CaymanIslands#KY.WB0c2WBWest Bay000020Thailand#TH.UT0c2UTUthai Thani000018Congo#CG.SA0c2SASangha000026BurkinaFaso#BF.SG0c2SGSangui&eacute;000018Algeria#DZ.OR0c2OROran00001BBhutan#BT.SG0c2SGShemgang00001DNigeria#NG.AK0c2AKAkwa Ibom00001ANigeria#NG.BA0c2BABauchi000018Somalia#SO.GE0c2GEGedo00001DMacedonia#MK.OS0c2OSOslomej000022Kazakhstan#KZ.AC0c2ACAlmaty City00001BSerbia#RS.ZL0c2ZLZlatibor000015Yemen#YE.IB0c2IBIbb000019China2#CN.SX0c2SXShanxi00002EFranceDepartment#FR.SS0c2SSSeine-Saint-Denis00001AKentucky#0630c2ELElliott00001BMichigan#0730c2IAIsabella00001BWisconsin#1350c2WPWaupaca00001CNewWorld#1500c2LTLithuania000017Virginia#1390c2PAPage00001FSouthDakota#0090c2BHBon Homme000017Kansas#1910c2SUSumner000024Mexico#0150c2MIMichoacan de Ocampo00001AMissouri#1470c2NONodaway000019California#0510c2MNMono000018Texas#2190c2HOCHockley000019Nebraska#1510c2SASaline000018Georgia#0270c2BOBrooks000015Brazil#0010c2ACAcre000026WorldwithCountries#1050c2IDIndonesia00001BEurope#0340c2SMSan Marino00001CMinnesota#0790c2LSLe Sueur000026YukonTerritory#CA.YT.KL0c2KLKlondike000015Peru#240c2TUMTumbes000020Croatia#090c2MEMe&#273;imurska000021Honduras#100c2INIntibuc&aacute;000017Ontario#070c2DRDurham000020Poland#770c2MAMa&#322;opolskie000020Indonesia#320c2SLSouth Sumatra00002CMacau#MO.MA.NF0c2NFNossa Senhora de Fatima000022FranceDepartment#FR.AS0c2ASAisne000020Thailand#TH.CT0c2CTChanthaburi000021Europe2#EU.LI0c2LILiechtenstein000027Philippines#PH.NR0c2NRNegros Oriental000019Vanuatu#VU.SE0c2SEShefa00001CTunisia#TN.ME0c2MEMedenine000023FranceDepartment#FR.ST0c2STSarthe00001EPennsylvania#1210c2VEVenango000019Texas#0390c2BRZBrazoria000020NewHampshire#0130c2MEMerrimack000015Idaho#0570c2LALatah000018Arkansas#1450c2WHWhite000014Ohio#0010c2ADAdams00001FMassachusetts#0130c2HAHampden000019Oregon#0590c2UMUmatilla00001ATennessee#0610c2GUGrundy00001DNewWorld#1510c2LULuxembourg000016Maine#0170c2OXOxford000018Oklahoma#0130c2BRBryan000016Iowa#0650c2FAFayette000015Texas#4010c2RUSRusk00001ANewJersey#0070c2CACamden000016Indiana#0170c2CSCass000018Mexico#0160c2MOMorelos000020NorthCarolina#0570c2DVDavidson00001CGeorgia#2090c2MGMontgomery000018Kansas#0110c2BBBourbon000022Virginia#6830c2MNManassas (City)00001AIllinois#0470c2EWEdwards00001DMississippi#1550c2WBWebster000018Brazil#0020c2ALAlagoas000021WorldwithCountries#1060c2IAIran000017Europe#0350c2CSSerbia00001ASlovenia#010c2PMPomurska000015USA#VA0c2VAVirginia00001FPuertoRico#170c2BCBarceloneta000016Peru#250c2UCAUcayali000027Croatia#100c2OBOsje&#269;ko-Baranjska00002AHonduras#110c2IBIslas de la Bah&iacute;a000016Ontario#080c2ELElgin00001BPoland#780c2MZMazowieckie000023Cuba#070c2CACiego de &Aacute;vila000019Indonesia#330c2BTBanten000029FrenchGuiana#GF.CY.SG0c2SGSaint Georges000015Iran#IR.FA0c2FAFars00001ESriLanka#LK.RN0c2RNRatnapura000018Liberia#LR.BG0c2BGBong000026Philippines#PH.NS0c2NSNorthern Samar000020Tanzania#TZ.KL0c2KLKilimanjaro00001EMicronesia#FM.PO0c2POPohnpei000017Palau#PW.KO0c2KOKoror000019Kentucky#0650c2ESEstill00001AMichigan#0750c2JAJackson00001CWisconsin#1370c2WRWaushara00001CNewWorld#1520c2MKMacedonia00001AVirginia#1410c2PTPatrick00001FSouthDakota#0110c2BRBrookings000017Kansas#1930c2THThomas000018Mexico#0170c2NANayarit000019Missouri#1490c2OROregon00001DCalifornia#0530c2MTMonterey000017Alaska#0500c2BEBethel000015Texas#2210c2HODHood000018Nebraska#1530c2SRSarpy000017Georgia#0290c2BRBryan000016Brazil#0030c2APAmapa000022WorldwithCountries#1070c2JPJapan000019Europe#0360c2SKSlovakia00001BMinnesota#0810c2LILincoln000027NewCaledonia#NC.SU.YA0c2YAYat&eacute;00001BSlovenia#020c2PDPodravska00001FPeru#260c2LPLima Metropolitan00002ECroatia#110c2PSPo&#382;e&scaron;ko-Slavonska000018Honduras#120c2LPLa Paz000016Ontario#090c2ESEssex000018Poland#790c2OPOpolskie000018Cuba#080c2CFCienfuegos00001CIndonesia#340c2GOGorontalo00001DSwaziland#SZ.MA0c2MAManzini000021SolomonIsland#SB.CN0c2CNCentral00001BQatar#QA.RA0c2RAAr Rayyan00002AFranceDepartment#FR.CA0c2CACotes d'Armor00001ANigeria#NG.SO0c2SOSokoto00001AGhana#GH.NP0c2NPNorthern00001DMauritania#MR.TR0c2TRTrarza000022SaudiArabia#SA.MD0c2MDAl Madinah000023Bhutan#BT.SJ0c2SJSamdrup Jongkhar000021SriLanka#LK.AD0c2ADAnuradhapura00001BNigeria#NG.AN0c2ANAnambra000023Panama#PA.KW0c2KWKuna de Wargandi00001BTanzania#TZ.KM0c2KMKigoma000023FranceDepartment#FR.SV0c2SVSavoie00001DPennsylvania#1230c2WAWarren000017Texas#0410c2BAZBrazos000021NewHampshire#0150c2RGRockingham000015Idaho#0590c2LELemhi00001BArkansas#1470c2WOWoodruff000014Ohio#0030c2ALAllen000021Massachusetts#0150c2HPHampshire000016Oregon#0610c2UNUnion00001BTennessee#0630c2HAHamblen000018NewWorld#1530c2MTMalta000019Maine#0190c2PEPenobscot000018Oklahoma#0150c2CACaddo000032Australia2#ACT0c2ACTAustralian Capital Territory000014Iowa#0670c2FLFloyd000026Alaska#2320c2SHSkagway-Hoonah-Angoon000017Texas#4030c2SABSabine00001CNewJersey#0090c2CMCape May000017Indiana#0190c2CLClark00001BMexico#0180c2NUNuevo Leon00001DNorthCarolina#0590c2DIDavie000018Georgia#2110c2MNMorgan000016Kansas#0130c2BRBrown000027Virginia#6850c2MPManassas Park (City)00001CIllinois#0490c2EFEffingham00001FMississippi#1570c2WLWilkinson000019Brazil#0040c2AMAmazonas000027WorldwithCountries#1080c2KZKazakhstan000019Europe#0370c2SLSlovenia000026MadagascarRegions#MG.TL.AY0c2AYAnosy000034MadagascarRegions#MG.FI.VF0c2VFVatovavy Fitovinany000020Slovenia#030c2KOKoro&scaron;ka000025NewWorld#010c2AGAntigua and Barbuda000020PuertoRico#190c2BQBarranquitas000023Croatia#120c2PGPrimorsko-Goranska000019Honduras#130c2LELempira00001AOntario#100c2FRFrontenac00001CPoland#800c2PKPodkarpackie000014Cuba#090c2GRGranma000022Indonesia#350c2BBBangka-Belitung000032PolandCounties#PL.LB.GM0c2LGMGorzow Wielkopolski000025FrenchGuiana#GF.CY.SI0c2SISinnamary00001CSyria#SY.SU0c2SUAs Suwayda000024FranceDepartment#FR.AV0c2AVAveyron000022CaymanIslands#KY.EE0c2EEEast End00001DBurkinaFaso#BF.TA0c2TATapoa00001CBhutan#BT.TA0c2TATashigang00001BRwanda#RW.SU0c2SUSouthern000019Nigeria#NG.BE0c2BEBenue000031CentralAmerica2#CE.TT0c2TTTrinidad &amp; Tobago00001EHongKong#HK.YL0c2YLYuen Long00001DMauritania#MR.BR0c2BRBrakna00002FCentralAfricanRepublic#CF.HK0c2HKHaute -Kotto000023CentralAmerica2#CE.BS0c2BSBahamas000025PapuaNewGuinea#PG.ES0c2ESEast Sepik00001ALaos#LA.KH0c2KHKhammouan00001ATunisia#TN.MH0c2MHMahdia000018Minnesota#0830c2LYLyon00001AKentucky#0670c2FAFayette00001CMichigan#0770c2KMKalamazoo00001DWisconsin#1390c2WNWinnebago00001ANewWorld#1540c2MVMoldova00001FVirginia#1430c2PIPittsylvania00001BSouthDakota#0130c2BWBrown000016Kansas#1950c2TRTrego000017Mexico#0190c2OAOaxaca000018Missouri#1510c2OSOsage000019California#0550c2NANapa000018Texas#2230c2HOPHopkins00001BNebraska#1550c2SUSaunders000019Georgia#0310c2BCBulloch000016Brazil#0050c2BABahia00002AWorldwithCountries#1090c2KPKorea (north)000016Europe#0380c2ESSpain00001BSlovenia#040c2SASavinjska000019NewWorld#020c2BSBahamas000012USA#TX0c2TXTexas000021USA#DC0c2DCDistrict of Columbia000028Croatia#130c2SB&Scaron;ibensko-Kninska00001CHonduras#140c2OCOcotepeque00001DAustralia#QU0c2QUQueensland000022Australia#SA0c2SASouth Australia000020Ontario#110c2GSGreater Sudbury000019Poland#810c2PDPodlaskie00001FCuba#100c2GUGuant&aacute;namo000018Indonesia#360c2PAPapua00001AEurope2#EU.MC0c2MCMonaco000022Cambodia#KH.KA0c2KASihanoukville000019Chad#TD.TA0c2TATandjile000023BurkinaFaso#BF.BA0c2BABal&eacute;00001EMacedonia#MK.PN0c2PNPlasnica000025Philippines#PH.NV0c2NVNueva Vizcaya00002AWorldwithCountries#1100c2KRKorea (south)000017Europe#0390c2SESweden000021Pennsylvania#1250c2WSWashington000019Texas#0430c2BREBrewster000020NewHampshire#0170c2STStrafford000015Idaho#0610c2LWLewis000017Arkansas#1490c2YEYell000016Ohio#0050c2ASAshland000021Massachusetts#0170c2MIMiddlesex000018Oregon#0630c2WAWallowa00001CTennessee#0650c2HMHamilton000017Italy#0010c2ABAbruzzo000019NewWorld#1550c2MCMonaco00001BMaine#0210c2PIPiscataquis00001BOklahoma#0170c2CNCanadian000017Iowa#0690c2FRFranklin00001ETexas#4050c2SAUSan Augustine00001ENewJersey#0110c2CUCumberland000016Indiana#0210c2CYClay000017Mexico#0200c2PUPuebla00001ENorthCarolina#0610c2DUDuplin000018Georgia#2130c2MUMurray000017Kansas#0150c2BUButler00001AIllinois#0510c2FAFayette00001DMississippi#1590c2WNWinston000016Brazil#0060c2CECeara00001ASlovenia#050c2ZSZasavska00001ANewWorld#030c2BBBarbados000022PuertoRico#210c2BYBayam&oacute;n00002DCroatia#140c2SMSisa&#269;ko-Moslava&#269;ka000019Honduras#150c2OLOlancho00001BCostaRica#010c2ALAlajuela000015Ontario#120c2GRGrey000019Poland#820c2PMPomorskie000017Cuba#110c2LHLa Habana000017Indonesia#370c2RIRiau000019Guinea#GN.GA0c2GAGaoual00001FThailand#TH.CY0c2CYChaiyaphum00001BEurope2#EU.MD0c2MDMoldova00001ESenegal#SN.ZG0c2ZGZiguinchor000018Cambodia#KH.KB0c2KBKep00001CBurkinaFaso#BF.SM0c2SMSoum000019Bhutan#BT.SM0c2SMSamchi000020GuineaBissau#GW.QU0c2QUQuinara000022BurkinaFaso#BF.BB0c2BBBougouriba00001EDjibouti#DJ.TA0c2TATadjourah00002ECentralAfricanRepublic#CF.HM0c2HMHaut-Mbomou000016Chad#TD.BA0c2BABatha000019Nepal#NP.KA0c2KAKarnali00001DGabon#GA.HO0c2HOHaut-Ogooue000027WorldwithCountries#1110c2KGKyrgyzstan00001CEurope#0400c2CHSwitzerland00001AMinnesota#0850c2MLMcLeod00001AKentucky#0690c2FLFleming00001BMichigan#0790c2KAKalkaska000018Wisconsin#1410c2WOWood00001AItaly#0020c2BABasilicata00001DNewWorld#1560c2MGMontenegro00001BVirginia#1450c2POPowhatan00001BSouthDakota#0150c2BUBrule00001AKansas#1970c2WBWabaunsee000025Mexico#0210c2QUQueretaro de Arteaga000018Missouri#1530c2OZOzark00001BCalifornia#0570c2NENevada000018Texas#2250c2HOUHouston00001FNebraska#1570c2SBScotts Bluff000017Georgia#0330c2BUBurke000021Brazil#0070c2DFDistrito Federal000021Slovenia#060c2PSSpodnjeposavska000018NewWorld#040c2BZBelize000015USA#CO0c2COColorado000015USA#DE0c2DEDelaware000014Japan#100c2GUGumma000025Croatia#150c2SDSplitsko-Dalmatinska000026Honduras#160c2SBSanta B&aacute;rbara00001ACostaRica#020c2CACartago00001AOntario#130c2HAHaldimand000021Poland#830c2SL&#346;l&#261;skie00001CCuba#120c2HOHolgu&iacute;n000021Indonesia#380c2SNSouth Sulawesi00001AEritrea#ER.MA0c2MAMaekel000027Kazakhstan#KZ.SK0c2SKSouth Kazakhstan00003CCentralAmerica2#CE.VC0c2VCSt. Vincent &amp; the Grenadines00001CMacedonia#MK.PP0c2PPPrilep00001ABurundi#BI.KR0c2KRKaruzi00001AMalawi#MW.NI0c2NINtchisi000021WorldwithCountries#1120c2LALaos000018Europe#0410c2UAUkraine00001CPennsylvania#1270c2WYWayne000018Texas#0450c2BRIBriscoe00001FNewHampshire#0190c2SUSullivan000017Idaho#0630c2LILincoln000018Ohio#0070c2AHAshtabula000021Massachusetts#0190c2NTNantucket000016Oregon#0650c2WSWasco00001BTennessee#0670c2HNHancock000018Italy#0030c2CACalabria00001ENewWorld#1570c2NLNetherlands000019Maine#0230c2SASagadahoc000019Oklahoma#0190c2CRCarter000016Iowa#0710c2FEFremont00001CTexas#4070c2SAJSan Jacinto000019NewJersey#0130c2ESEssex000019Indiana#0230c2CIClinton00001DMexico#0220c2QRQuintana Roo00001ENorthCarolina#0630c2DRDurham00001AGeorgia#2150c2MSMuscogee00001CNewZealand#F100c2TASTasman000016Kansas#0170c2CSChase000017Illinois#0530c2FOFord00001FMississippi#1610c2YAYalobusha00001FBrazil#0080c2ESEspirito Santo000027Slovenia#070c2DOJugovzhodna Slovenija000018NewWorld#050c2CACanada00001DPuertoRico#230c2CRCabo Rojo000018Japan#110c2HIHiroshima000021Croatia#160c2VAVara&#382;dinska000017Honduras#170c2VAValle00001CBulgaria#380c2EBlagoevgrad00001DCostaRica#030c2GUGuanacaste00001BOntario#140c2HLHaliburton000023USANorthWestRegion#300c2MTMontana000028Poland#840c2SK&#346;wi&#281;tokrzyskie000017Cuba#130c2LTLas Tunas000022Indonesia#390c2IBWest Irian Jaya000025PolandCounties#PL.LU.ZM0c2LZMZamosc00002BNewBrunswick#CA.NB.AC0c2ACAcadian Coastal00001ATunisia#TN.NB0c2NBNabeul00001BVietnam#VN.YB0c2YBYen Bai000018Liberia#LR.BM0c2BMBomi00001BTanzania#TZ.KR0c2KRKagera000016Brazil#0090c2GOGoias000025WorldwithCountries#1130c2MYMalaysia00001FEurope#0420c2UKUnited Kingdom00001CMinnesota#0870c2MAMahnomen000018Kentucky#0710c2FOFloyd000017Michigan#0810c2KNKent000018Italy#0040c2CMCampania000019NewWorld#1580c2NONorway000020Virginia#1470c2PEPrince Edward00001DSouthDakota#0170c2BFBuffalo000018Kansas#1990c2WAWallace000020Mexico#0230c2SASan Luis Potosi00001BMissouri#1550c2PMPemiscot00001BCalifornia#0590c2OROrange000017Texas#2270c2HOWHoward000026Virginia#6900c2MVMartinsville (City)000019Nebraska#1590c2SESeward000017Georgia#0350c2BSButts000026MadagascarRegions#MG.AS.DI0c2DIDiana000023WestEuropeanRegion#010c2BEBelgium000023Slovenia#080c2LJOsrednjeslovenska00001CNewWorld#060c2CRCosta Rica000017Japan#120c2HOHokkaido00002BCroatia#170c2VPViroviti&#269;ko-Podravska000016Honduras#180c2YOYoro000017Bulgaria#390c2ABurgas00001ACostaRica#040c2HEHeredia000017Ontario#150c2HTHalton000028Poland#850c2WNWarmi&#324;sko-Mazurskie000024Cuba#140c2SSSancti Sp&iacute;ritus00001FIndonesia#400c2KRRiau Islands00001CKuwait#KW.JA0c2JAAl Jahrah000026SaoTomeandPrincipe#ST.MZ0c2MZMe Zoxi000031DemocraticRepublicoftheCongo#CD.EQ0c2EQEquateur00001DPanama#PA.LS0c2LSLos Santos00001ATanzania#TZ.LI0c2LILindi00001DYemen#YE.HU0c2HUAl Hudaydah000019Yemen#YE.JA0c2JAAl Jawf00001CUganda#UG.RK0c2RKRukungiri00001DMalawi#MW.NK0c2NKNkhotakota000019Brazil#0100c2MAMaranhao000025WorldwithCountries#1140c2MNMongolia00001DEurope#0430c2VAVatican City000023Pennsylvania#1290c2WEWestmoreland000017Texas#0470c2BROBrooks000017Idaho#0650c2MAMadison000024Virginia#5100c2AXAlexandria (City)000015Ohio#0090c2ATAthens00001FMassachusetts#0210c2NONorfolk000018Wyoming#0010c2ALAlbany00001BOregon#0670c2WHWashington00001CTennessee#0690c2HRHardeman00001EItaly#0050c2EMEmilia-Romagna000019NewWorld#1590c2PLPoland000018Maine#0250c2SOSomerset00001BOklahoma#0210c2CHCherokee000015Iowa#0730c2GRGreene00001DTexas#4090c2SAPSan Patricio00001ENewJersey#0150c2GLGloucester00001AIndiana#0250c2CRCrawford000018Mexico#0240c2SISinaloa000021NorthCarolina#0650c2EDEdgecombe000018Georgia#2170c2NENewton00001BKansas#0190c2CQChautauqua00001BIllinois#0550c2FRFranklin00001BMississippi#1630c2YZYazoo000024YukonTerritory#CA.YT.KU0c2KUKluane000020Indonesia#410c2SRWest Sulawesi000022WestEuropeanRegion#020c2FRFrance00001BSlovenia#090c2GOGorenjska000016NewWorld#070c2CUCuba00001APuertoRico#250c2CGCaguas000014Japan#130c2HYHyogo000025Croatia#180c2VSVukovarsko-Srijemska000019Bulgaria#400c2TXDobrich000019Ontario#160c2HMHamilton00001DPoland#860c2WPWielkopolskie00001ECuba#150c2SCSantiago de Cuba00001CSerbia#RS.JA0c2JAJablanica000019Vanuatu#VU.SN0c2SNSanma00001BTunisia#TN.MN0c2MNManouba000024Guinea#GN.FO0c2FOFor&eacute;cariah00001ATuvalu#TV.VI0c2VIVaitupu000018Iran#IR.ES0c2ESEsfahan000025FranceDepartment#FR.BR0c2BRBas Rhin000021FranceDepartment#FR.CH0c2CHCher00001ESaudiArabia#SA.MK0c2MKMakkah00001DKazakhstan#KZ.AM0c2AMAqmola00001BBurundi#BI.MA0c2MAMakamba000023Guyana#GY.DE0c2DEDemerara-Mahaica000019Georgia#0370c2CLCalhoun00001CBrazil#0110c2MTMato Grosso000022WorldwithCountries#1150c2NPNepal000017Europe#0440c2CYCyprus00001CMinnesota#0890c2MRMarshall00001BKentucky#0730c2FRFranklin00001BMichigan#0830c2KEKeweenaw000019Florida#0010c2ALAlachua00001EWestVirginia#0010c2BABarbour000025Italy#0060c2FIFriuli-Venezia Giulia00001BNewWorld#1600c2PTPortugal000017Asia3#0020c2AMArmenia000020Virginia#1490c2PGPrince George00001BSouthDakota#0190c2BTButte00001BKansas#2010c2WSWashington000017Mexico#0250c2SOSonora000018Missouri#1570c2PRPerry00001BCalifornia#0610c2PLPlacer000019Texas#2290c2HUDHudspeth00001BNebraska#1610c2SHSheridan000026WestEuropeanRegion#030c2LULuxembourg00002ASlovenia#100c2NONotranjsko-kra&scaron;ka00001ANewWorld#080c2DMDominica000011USA#UT0c2UTUtah000016Japan#140c2IBIbaraki000019Croatia#190c2ZDZadarska000019Bulgaria#410c2EBGabrovo00001FCostaRica#060c2LILim&oacute;n000019Ontario#170c2HSHastings000022Poland#870c2ZPZachodniopomorskie000019Cuba#160c2VCVilla Clara000015Iran#IR.YA0c2YAYazd00001AUganda#UG.AB0c2ABKaabong00001AKuwait#KW.HW0c2HWHawalli000020SriLanka#LK.TC0c2TCTrincomalee000024Ethiopia#ET.GA0c2GAGambela peoples000024Cambodia#KH.KG0c2KGKampong Chhnang00001EBurkinaFaso#BF.SR0c2SRSourou000024Mauritania#MR.TZ0c2TZTiris Zemmour000033CentralAmerica2#CE.VG0c2VGVirgin Islands, British00001FMacedonia#MK.PT0c2PTProbistip000022CentralAmerica2#CE.BZ0c2BZBelize000019Tanzania#TZ.MA0c2MAMara000019Malawi#MW.MW0c2MWMwanza000023Brazil#0120c2MSMato Grosso do Sul000025WorldwithCountries#1160c2PKPakistan000017Europe#0450c2TKTurkey00001EPennsylvania#1310c2WOWyoming000016Texas#0490c2BOWBrown000018Idaho#0670c2MIMinidoka000017Ohio#0110c2AUAuglaize000020Massachusetts#0230c2PLPlymouth00001AWyoming#0030c2BHBig Horn000018Oregon#0690c2WEWheeler00001ATennessee#0710c2HDHardin000015Italy#0070c2LALazio00001ANewWorld#1610c2RORomania000015Maine#0270c2WAWaldo00001AOklahoma#0230c2COChoctaw000015Iowa#0750c2GUGrundy00001AAsia3#0030c2AZAzerbaijan000024Alaska#2400c2SFSoutheast Fairbanks000019Texas#4110c2SASSan Saba00001ANewJersey#0170c2HUHudson000019Indiana#0270c2DADaviess000018Mexico#0260c2TATabasco00001FNorthCarolina#0670c2FOForsyth000018Georgia#2190c2OCOconee000019Kansas#0210c2CKCherokee000019Illinois#0570c2FUFulton000022WestEuropeanRegion#040c2MCMonaco000020Slovenia#110c2SPGori&scaron;ka000020NewWorld#090c2DODominican Rep.000017USA#WA0c2WAWashington000019PuertoRico#270c2CACamuy000018USA#CT0c2CTConnecticut000017Japan#150c2ISIshikawa000020Croatia#200c2ZGZagreba&#269;ka00001DBulgaria#420c2COGrad Sofiya00001DCostaRica#070c2PUPuntarenas000016Ontario#180c2HUHuron00001ESerbia#RS.JC0c2JCSouth Backa000019Vanuatu#VU.TF0c2TFTafea00001APalau#PW.ME0c2MEMelekeok000017Uganda#UG.AC0c2ACApac000019Benin#BJ.AK0c2AKAtacora000021Seychelles#SC.SY0c2SYSeychelles00001DEurope2#EU.LT0c2LTLithuania00001BCambodia#KH.KH0c2KHKratie00001FBurkinaFaso#BF.SS0c2SSSissili00001FSriLanka#LK.BC0c2BCBatticaloa00001EPanama#PA.NB0c2NBNgobe Bugle000022HongKong#HK.YT0c2YTYan Tsim Mong000030CentralAfricanRepublic#CF.HS0c2HSMambere-Kadei00001ATanzania#TZ.MB0c2MBMbeya00001ANebraska#1630c2SMSherman000018Georgia#0390c2CMCamden00001DBrazil#0130c2MGMinas Gerais000028WorldwithCountries#1170c2PHPhilippines000017Europe#0460c2RURussia00001AMinnesota#0910c2MTMartin000019Kentucky#0750c2FUFulton000017Michigan#0850c2LKLake000017Florida#0030c2BABaker00001FWestVirginia#0030c2BEBerkeley000017Italy#0080c2LILiguria00001DNewWorld#1620c2SMSan Marino00001ESouthDakota#0210c2CACampbell000018Kansas#2030c2WHWichita00001BMexico#0270c2TMTamaulipas000019Missouri#1590c2PTPettis00001BCalifornia#0630c2PUPlumas00001CAlaska#0600c2BRBristol Bay000015Texas#2310c2HUNHunt000028Manitoba#CA.MB.IR0c2IRInterlake Region000027WestEuropeanRegion#050c2NLNetherlands000026Slovenia#120c2JPObalno-kra&scaron;ka00001DNewWorld#100c2SVEl Salvador000014Japan#160c2IWIwate00001CCroatia#210c2GZGrad Zagreb000018Bulgaria#430c2XHaskovo000022CostaRica#080c2SJSan Jos&eacute;00001FOntario#190c2KLKawartha Lakes00002BPolandCounties#PL.LB.ZM0c2BZMZielona Gora000027PolandCounties#PL.ZP.KM0c2ZKMKoszalin000017Guinea#GN.FR0c2FRFria00001BUganda#UG.AD0c2ADAdjumani000019Benin#BJ.AL0c2ALAlibori00001DSwaziland#SZ.LU0c2LULubombo00001ALibya#LY.GD0c2GDGhadamis000024DenmarkRegion#DK.SD0c2SDSyddanmark00001EEurope2#EU.LU0c2LULuxembourg00001DEurope2#EU.MK0c2MKMacedonia000022BurkinaFaso#BF.ST0c2STSanmatenga00001CSriLanka#LK.BD0c2BDBadulla00001BNamibia#NA.CA0c2CACaprivi000030CentralAmerica2#CE.VI0c2VIVirgin Islands, U.S.000026CentralAmerica2#CE.CR0c2CRCosta Rica00001DRussia#RU.ZB0c2ZBZabaykalsk000019Uganda#UG.RO0c2ROKaliro00001CUganda#UG.SE0c2SESembabule000021SolomonIsland#SB.WE0c2WEWestern00001BIllinois#0590c2GAGallatin000015Brazil#0140c2PAPara000023WorldwithCountries#1180c2RURussia00001BPennsylvania#1330c2YOYork000019Texas#0510c2BUSBurleson000019Idaho#0690c2NPNez perce000016Ohio#0130c2BEBelmont00001FMassachusetts#0250c2SUSuffolk00001AWyoming#0050c2CMCampbell000018Oregon#0710c2YAYamhill00001BTennessee#0730c2HWHawkins000019Italy#0090c2LOLombardia000019NewWorld#1630c2CSSerbia00001AMaine#0290c2WSWashington00001BOklahoma#0250c2CICimarron000016Iowa#0770c2GTGuthrie00001AAsia3#0050c2BDBangladesh00001BTexas#4130c2SCHSchleicher00001DNewJersey#0190c2HTHunterdon00001AIndiana#0290c2DEDearborn000018NewYork#0010c2ALAlbany000019Mexico#0280c2TLTlaxcala000020NorthCarolina#0690c2FRFranklin00001CGeorgia#2210c2OGOglethorpe000019Kansas#0230c2CNCheyenne000019NewWorld#110c2GDGrenada000024PuertoRico#290c2CVCan&oacute;vanas00002DBosniaHerzegovina#010c2BOBosanskopodrinjski000015Japan#170c2KAKagawa00001ABulgaria#440c2KKurdzhali000017Ontario#200c2KEKenora000016Fiji#FJ.WE.RA0c2RARa000025FranceDepartment#FR.VC0c2VCVaucluse00001CChina2#CN.CQ0c2CQChongqing000023FranceDepartment#FR.CL0c2CLCantal000022FranceDepartment#FR.DB0c2DBDoubs000024SaoTomeandPrincipe#ST.PA0c2PAPague00001AEurope2#EU.LV0c2LVLatvia000019Nigeria#NG.BO0c2BOBorno00001BSomalia#SO.HI0c2HIHiiraan00002FGuyana#GY.UT0c2UTUpper Takutu-Upper Essequibo00001AChad#TD.BI0c2BIWadi Fira00001BBurundi#BI.KY0c2KYKayanza000019Djibouti#DJ.AR0c2ARArta000019Malawi#MW.MZ0c2MZMzimba000018Nebraska#1650c2SISioux000018Brazil#0150c2PBParaiba000026WorldwithCountries#1190c2SGSingapore00001AMinnesota#0930c2MKMeeker00001BKentucky#0770c2GAGallatin000019Michigan#0870c2LPLapeer000021Virginia#5150c2BFBedford (City)000015Florida#0050c2BYBay00001CWestVirginia#0050c2BOBoone000016Italy#0100c2MAMarche00001BNewWorld#1640c2SKSlovakia000016Asia3#0060c2BTBhutan000021Virginia#1530c2PWPrince William000021SouthDakota#0230c2CMCharles Mix000019Alabama#0010c2AUAutauga000017Kansas#2050c2WLWilson00001FMexico#0290c2VEVeracruz-Llave000019Missouri#1610c2PHPhelps00001ECalifornia#0650c2RIRiverside00001BTexas#2330c2HUTHutchinson000022USACentralRegion#170c2ILIllinois00001BNewWorld#120c2GTGuatemala000038BosniaHerzegovina#020c2HNHercegova&#269;ko-neretvanski000018Japan#180c2KGKagoshima00001BAustralia#TA0c2TATasmania00001CBulgaria#450c2KHKyustendil000018Ontario#210c2LALambton00001CTunisia#TN.MS0c2MSMonastir000023FranceDepartment#FR.VD0c2VDVendee000019Oman#OM.MU0c2MUMusandam00002EFranceDepartment#FR.CM0c2CMCharente Maritime00001BTonga#TO.TT0c2TTTongatapu00001DCambodia#KH.KK0c2KKKoh Kong00001BSriLanka#LK.AP0c2APAmpara00001EAngola#AO.LN0c2LNLunda Norte000029BurkinaFaso#BF.BK0c2BKBoulkiemd&eacute;00001FPhilippines#PH.PL0c2PLPalawan00001DKazakhstan#KZ.AR0c2ARAtyrau00001ARussia#RU.YN0c2YNYamalia00001FDjibouti#DJ.AS0c2ASAli Sabieh000019Illinois#0610c2GRGreene000017Brazil#0160c2PRParana000026WorldwithCountries#1200c2LKSri Lanka000017Texas#0530c2BUNBurnet000016Idaho#0710c2ONOneida000014Ohio#0150c2BRBrown000021Massachusetts#0270c2WOWorcester000018Wyoming#0070c2CACarbon00001BTennessee#0750c2HYHaywood000016Italy#0110c2MOMolise00001BNewWorld#1650c2SISlovenia000014Maine#0310c2YOYork00001COklahoma#0270c2CECleveland000017Iowa#0790c2HAHamilton000016Asia3#0070c2BNBrunei000017Texas#4150c2SCUScurry00001ANewJersey#0210c2MEMercer000019Indiana#0310c2DCDecatur00001ANewYork#0030c2AEAllegany000018Mexico#0300c2YUYucatan00001ENorthCarolina#0710c2GAGaston00001AGeorgia#2230c2PDPaulding000016Kansas#0250c2CAClark000017NewWorld#130c2HTHaiti00001CPuertoRico#310c2CNCarolina00002ABosniaHerzegovina#030c2KSKanton Sarajevo000017Japan#190c2KNKanagawa000018Bulgaria#460c2OBLovech000017Ontario#220c2LNLanark000026CentralEuropeanRegion#010c2ATAustria00001AMacau#MO.IL.TA0c2TATaipa000028NewBrunswick#CA.NB.RV0c2RVRiver Valley000025FranceDepartment#FR.DD0c2DDDordogne000018Tonga#TO.VA0c2VAVava'u00001ABhutan#BT.TM0c2TMThimphu00001FBurkinaFaso#BF.BL0c2BLBoulgou00001BMacedonia#MK.RE0c2REResen000020Philippines#PH.PM0c2PMPampanga00001DKazakhstan#KZ.AS0c2ASAstana000020CentralAmerica2#CE.CU0c2CUCuba00001AUganda#UG.RR0c2RRMbarara000022Guyana#GY.CU0c2CUCuyuni-Mazaruni00001ANebraska#1670c2STStanton000019Georgia#0430c2CNCandler00001BBrazil#0170c2PEPernambuco000027WorldwithCountries#1210c2TJTajikistan00001EMinnesota#0950c2MIMille Lacs00001AKentucky#0790c2GRGarrard00001BMichigan#0890c2LLLeelanau00001AFlorida#0070c2BFBradford00001EWestVirginia#0070c2BRBraxton000018Italy#0120c2PIPiemonte000018NewWorld#1660c2ESSpain000017Asia3#0080c2MMBurma (00001AVirginia#1550c2PUPulaski00001BSouthDakota#0250c2CLClark000019Alabama#0030c2BABaldwin000018Kansas#2070c2WOWoodson00001AMexico#0310c2ZAZacatecas000017Missouri#1630c2PIPike00001FCalifornia#0670c2SASacramento000016Texas#2350c2IRIIrion00001EUSACentralRegion#190c2IAIowa00001ANewWorld#140c2HNHonduras00002ABosniaHerzegovina#040c2SRSrednjebosanski000014Japan#200c2KOKochi000018Bulgaria#470c2MMontana000024Ontario#230c2LGLeeds and Grenville00002CCentralEuropeanRegion#020c2CZCzechRepublic00001BSwitzerland#010c2AAAargau000037NorthWestTerritories#CA.NT.GS0c2GSGreat Slave Gateway000019Malawi#MW.NS0c2NSNsanje000024Tibet#TI.SP0c2SPShannan Prefecture000026FranceDepartment#FR.CO0c2COCote d'Or00001EEurope2#EU.MO0c2MOMontenegro000021Cambodia#KH.KM0c2KMKampong Cham00001CAlgeria#DZ.RE0c2RERelizane00001BBurkinaFaso#BF.BM0c2BMBam000022Philippines#PH.PN0c2PNPangasinan00001DKazakhstan#KZ.AT0c2ATAqtobe00001FGuineaBissau#GW.BA0c2BABafata00001AUganda#UG.SI0c2SISironko000029Guyana#GY.EB0c2EBEast Berbice-Corentyne000019Illinois#0630c2GUGrundy000016Brazil#0180c2PIPiaui000025WorldwithCountries#1220c2THThailand000019Texas#0550c2CALCaldwell000016Idaho#0730c2OWOwyhee000015Ohio#0170c2BTButler00001AWyoming#0090c2COConverse00001DTennessee#0770c2HSHenderson000016Italy#0130c2PUPuglia000019NewWorld#1670c2SESweden000017Oklahoma#0290c2CLCoal000016Iowa#0810c2HNHancock000018Asia3#0090c2KHCambodia00001CTexas#4170c2SHAShackelford00001DNewJersey#0230c2MIMiddlesex000019Indiana#0330c2DKDe Kalb000017NewYork#0050c2BRBronx000021Mexico#0320c2DIDistrito Federal00001DNorthCarolina#0730c2GTGates000017Georgia#2250c2PAPeach000015Kansas#0270c2CYClay000027MadagascarRegions#MG.MA.ML0c2MLMelaky000022Switzerland#020c2ARAusser-Rhoden000020USACentralRegion#200c2KSKansas000019NewWorld#150c2JMJamaica000021PuertoRico#330c2CTCata&ntilde;o000024BosniaHerzegovina#050c2TUTuzlanski000017Japan#210c2KUKumamoto00001CBulgaria#480c2PAPazardzhik000025Ontario#240c2LELennox and Addington000026CentralEuropeanRegion#030c2DEGermany00001DLibya#LY.YJ0c2YJYafran-Jadu000023FranceDepartment#FR.VG0c2VGVosges000017Uganda#UG.AI0c2AIAbim000017Nauru#NR.YA0c2YAYaren00001CBenin#BJ.AQ0c2AQAtlantique00001AVietnam#VN.HA0c2HAHa Tay00001BCambodia#KH.KN0c2KNKandal000019Bhutan#BT.TO0c2TOTongsa000024Liberia#LR.CM0c2CMGrand Cape Mount00001CSudan#SD.RN0c2RNRiver Nile00001ESudan#SD.SD0c2SDSouth Darfur000024CentralAmerica2#CE.DM0c2DMDominica000026Virginia#7000c2NNNewport News (City)000019Nebraska#1690c2THThayer000019Georgia#0450c2CRCarroll00001FBrazil#0190c2RJRio de Janeiro000029WorldwithCountries#1230c2TMTurkmenistan00001CMinnesota#0970c2MSMorrison000018Kentucky#0810c2GNGrant00001AMichigan#0910c2LELenawee000019Florida#0090c2BVBrevard00001DWestVirginia#0090c2BKBrooke000018Italy#0140c2SASardegna00001ENewWorld#1680c2CHSwitzerland000015Asia3#0100c2CNChina00001FVirginia#1570c2RPRappahannock00001ASouthDakota#0270c2CYClay000019Alabama#0050c2BRBarbour00001AKansas#2090c2WYWyandotte000019Missouri#1650c2PAPlatte00001FCalifornia#0690c2SNSan Benito000015Texas#2370c2JACJack000025Australia2#NSW0c2NSWNew South Wales000029NewCaledonia#NC.NO.OG0c2OGOu&eacute;goa000025Switzerland#030c2BLBasel-Landschaft000018NewWorld#160c2MXMexico000027BosniaHerzegovina#060c2USUnsko-sanski000014Japan#220c2KYKyoto000018Bulgaria#490c2PKPernik00001BOntario#250c2MAManitoulin000022USANorthWestRegion#410c2OROregon000028Slovakia#010c2BCBansk&aacute; Bystrica000026CentralEuropeanRegion#040c2HUHungary00001CLibya#LY.ZA0c2ZAAz Zawiyah000019Malawi#MW.NU0c2NUNtcheu00001BVietnam#VN.GL0c2GLGia Lai000024Morocco#MA.SM0c2SMSouss Massa Draa00001ESaudiArabia#SA.NJ0c2NJNajran000018Guinea#GN.YO0c2YOYomou00001ELaos#LA.LM0c2LMLouang Namtha00001BIllinois#0650c2HAHamilton000024Brazil#0200c2RNRio Grande do Norte000027WorldwithCountries#1240c2UZUzbekistan000018Texas#0570c2CAHCalhoun000017Idaho#0750c2PAPayette000021Virginia#5200c2BSBristol (City)000016Ohio#0190c2CACarroll000017Wyoming#0110c2CRCrook000019Tennessee#0790c2HEHenry000017Italy#0150c2SISicilia00001ANewWorld#1690c2UAUkraine00001BOklahoma#0310c2CMComanche000015Iowa#0830c2HRHardin000017Texas#4190c2SHEShelby00001CNewJersey#0250c2MOMonmouth00001AIndiana#0350c2DLDelaware000018NewYork#0070c2BOBroome00001ENorthCarolina#0750c2GRGraham000019Georgia#2270c2PCPickens000016Kansas#0290c2CDCloud000021SouthCarolina#0010c2ABAbbeville000020Switzerland#040c2BSBasel-Stadt00001BNewWorld#170c2NINicaragua000016USA#WI0c2WIWisconsin000019PuertoRico#350c2CYCayey000038BosniaHerzegovina#070c2ZAZapadnobosanska &#381;upanija000012Japan#230c2MIMie000018Bulgaria#500c2EHPleven00001AOntario#260c2MIMiddlesex00001CSlovakia#020c2BLBratislava00002CCentralEuropeanRegion#050c2LILiechtenstein00001DPalau#PW.NC0c2NCNgarchelong000016Iran#IR.GI0c2GIGilan000023FranceDepartment#FR.CR0c2CRCreuse00001FVietnam#VN.HC0c2HCHo Chi Minh00001BCambodia#KH.KP0c2KPKampot000020Morocco#MA.TD0c2TDTadla Azilal00001CAngola#AO.LS0c2LSLunda Sul00001FUzbekistan#UZ.NG0c2NGNamangan000029Mauritania#MR.DN0c2DNDakhlet Nouadhibou00002ECentralAmerica2#CE.DO0c2DODominican Republic000016Nepal#NP.KO0c2KOKosi00001CRussia#RU.YS0c2YSYaroslavl000019Nebraska#1710c2TOThomas000019Georgia#0470c2CSCatoosa000022Brazil#0210c2RSRio Grande do Sul000024WorldwithCountries#1250c2VNVietnam000019Minnesota#0990c2MWMower000019Kentucky#0830c2GVGraves00001DMichigan#0930c2LILivingston000019Florida#0110c2BWBroward00001DWestVirginia#0110c2CACabell000017Italy#0160c2TOToscana000021NewWorld#1700c2UKUnited Kingdom00001AAsia3#0120c2TPEast Timor00001BVirginia#1590c2RCRichmond00001FSouthDakota#0290c2COCodington000016Alabama#0070c2BIBibb000017Missouri#1670c2POPolk000023California#0710c2SBSan Bernardino00001FAlaska#0680c2DEDenali Borough000018Texas#2390c2JAKJackson000019Switzerland#050c2BEBern000018NewWorld#180c2PAPanama000014USA#VT0c2VTVermont000030BosniaHerzegovina#080c2ZDZeni&#269;ko-Dobojski000015Japan#240c2MYMiyagi000019Bulgaria#510c2PBPlovdiv000018Ontario#270c2MUMuskoka00001FSlovakia#030c2KIKo&scaron;ice000025CentralEuropeanRegion#060c2PLPoland000024MarshallIsland#MH.MH.JL0c2JLJaluit00001BSerbia#RS.KB0c2KBKolubara000017Iran#IR.ZA0c2ZAZanjan00001APalau#PW.ND0c2NDNgaraard000029FranceDepartment#FR.CS0c2CSCorse du Sud00001DVietnam#VN.HD0c2HDHai Duong000015Nauru#NR.EW0c2EWEwa000028DenmarkRegion#DK.SL0c2SLSj&aelig;lland000022Ethiopia#ET.HA0c2HAHarari people000022Comoros #KM.GC0c2GCGrande Comore00001AIllinois#0670c2HCHancock000019Brazil#0220c2RORondonia000023WorldwithCountries#1260c2TWTaiwan00001BNorthDakota#0010c2ADAdams000019Texas#0590c2CANCallahan000015Idaho#0770c2POPower000018Ohio#0210c2CHChampaign000019Wyoming#0130c2FRFremont00001BTennessee#0810c2HIHickman000023Italy#0170c2TRTrentino-Alto Adige00001FNewWorld#1710c2VAVatican City000019Oklahoma#0330c2CTCotton000017Iowa#0850c2HIHarrison000017Asia3#0130c2GEGeorgia000018Texas#4210c2SHRSherman00001ANewJersey#0270c2MRMorris000018Indiana#0370c2DUDubois00001DNewYork#0090c2CACattaraugus000021NorthCarolina#0770c2GNGranville000018Georgia#2290c2PEPierce000017Kansas#0310c2CFCoffey00001DSouthCarolina#0030c2AIAiken00001DSwitzerland#060c2FRFribourg000027NewWorld#190c2KNSt. Kitts &amp; Nevis000019PuertoRico#370c2CBCeiba000031BosniaHerzegovina#090c2ZP&#381;upanija Posavska000017Japan#250c2MAMiyazaki000019Bulgaria#520c2PPRazgrad000018Ontario#280c2NINiagara000017Slovakia#040c2NINitra000027CentralEuropeanRegion#070c2SKSlovakia00002BPolandCounties#PL.DS.JM0c2DJMJelenia Gora000019Uganda#UG.AM0c2AMAmuria000025FranceDepartment#FR.CT0c2CTCharente00001AKyrgyzstan#KG.OS0c2OSOsh000019Europe2#EU.MT0c2MTMalta00002BMorocco#MA.RZ0c2RZRabat Sale Zemmour Zaer000019Angola#AO.LU0c2LULuanda000019Angola#AO.NA0c2NANamibe00001FChad#TD.CG0c2CGChari-Baguirmi00001ELaos#LA.LP0c2LPLouangphabang000017Texas#2410c2JASJasper00001BNebraska#1730c2TUThurston00001AGeorgia#0490c2CHCharlton000018Brazil#0230c2RRRoraima000026WorldwithCountries#1270c2HKHong Kong00001AMinnesota#1010c2MUMurray00001AKentucky#0850c2GYGrayson000017Michigan#0950c2LULuce000019Florida#0130c2CACalhoun00001EWestVirginia#0130c2CHCalhoun000016Italy#0180c2UMUmbria000019NewWorld#1720c2CYCyprus000015Asia3#0140c2INIndia00001AVirginia#1610c2RNRoanoke00001CSouthDakota#0310c2CSCorson000018Alabama#0090c2BLBlount00001AMissouri#1690c2PLPulaski00001ECalifornia#0730c2SDSan Diego00001BAlaska#0700c2DIDillingham00001BSwitzerland#070c2GEGeneve00001BNewWorld#200c2LCSt. Lucia000041BosniaHerzegovina#100c2ZZ&#381;upanija Zapadnohercegova&#269;ka000015Japan#260c2NANagano000015Bulgaria#530c2PRuse00001AOntario#290c2NPNipissing00001FSlovakia#050c2PVPre&scaron;ov000027CentralEuropeanRegion#080c2SLSlovenia00002DNewBrunswick#CA.NB.AR0c2ARAppalachian Range000018Niger#NE.AG0c2AGAgadez00001ESerbia#RS.JN0c2JNSouth Banat000019Uganda#UG.BD0c2BDBudaka00001ASyria#SY.DI0c2DIDamascus000020Cambodia#KH.KS0c2KSKampong Spe00001ACapeVerde#CV.MA0c2MAMaio00001EAlgeria#DZ.SA0c2SASouk Ahras00001AAngola#AO.ML0c2MLMalanje000019Sudan#SD.RS0c2RSRed Sea000018Sudan#SD.SI0c2SISennar000019Kansas#0330c2CMComanche000021SouthCarolina#0050c2ALAllendale000019Illinois#0690c2HRHardin00001FBrazil#0240c2SCSanta Catarina000022WorldwithCountries#1280c2MOMacau00001CNorthDakota#0030c2BABarnes000018Texas#0610c2CAMCameron000018Idaho#0790c2SHShoshone000014Ohio#0230c2CLClark000018Wyoming#0150c2GOGoshen00001BTennessee#0830c2HOHouston00001DItaly#0190c2VAValle d'Aosta000019NewWorld#1730c2TKTurkey000018Oklahoma#0350c2CGCraig000014Iowa#0870c2HEHenry000019Asia3#0150c2IDIndonesia000016Texas#4230c2SMISmith000019NewJersey#0290c2OCOcean000019Indiana#0390c2ELElkhart000018NewYork#0110c2CYCayuga00001ENorthCarolina#0790c2GEGreene000016Georgia#2310c2PIPike00002ANorthAmerica#0010c2AGAntigua and Barbuda000021NewCaledonia#NC.IL.LI0c2LILifou000029NewCaledonia#NC.NO.PB0c2PBPou&eacute;bo00001BSwitzerland#080c2GLGlarus000022USACentralRegion#260c2MIMichigan000032NewWorld#210c2VCSt. Vincent &amp; the Grenadines00001APuertoRico#390c2CLCiales00002BBosniaHerzegovina#110c2RSRepublika Srpska000017Japan#270c2NGNagasaki000017Bulgaria#540c2HShumen000018Ontario#300c2NONorfolk00001FMontenegro#010c2ANAndrijevica000025Slovakia#060c2TCTren&#269;&iacute;n00002ACentralEuropeanRegion#090c2CHSwitzerland000020FrenchGuiana#GF.SL.SA0c2SASaul000028PolandCounties#PL.MA.NM0c2MNMNowy Sacz00001AFiji#FJ.EA.KD0c2KDKadavu000019Vanuatu#VU.TR0c2TRTorba000029FranceDepartment#FR.VM0c2VMVal-de-Marne00001DCameroon#CM.LT0c2LTLittoral000025FranceDepartment#FR.CV0c2CVCalvados00001CVietnam#VN.HG0c2HGHa Giang00001FEurope2#EU.NL0c2NLNetherlands000021Cambodia#KH.KT0c2KTKampong Thom00001BBurkinaFaso#BF.TU0c2TUTuy00002CMorocco#MA.TH0c2THTaza Al Hoceima Taounate000022Algeria#DZ.SB0c2SBSidi Bel Abbes00001BNigeria#NG.BY0c2BYBayelsa000019Nigeria#NG.DE0c2DEDelta00001DMacedonia#MK.RM0c2RMRosoman000023CoteDivoire#CI.SB0c2SBSud-Bandama00001BTexas#2430c2JEDJeff Davis000019Nebraska#1750c2VAValley000019Georgia#0510c2CAChatham00001ABrazil#0250c2SPSao Paulo000024WorldwithCountries#1290c2ALAlbania00001CMinnesota#1030c2NINicollet000018Kentucky#0870c2GEGreen00001BMichigan#0970c2MKMackinac00001BFlorida#0150c2CHCharlotte00001BWestVirginia#0150c2CLClay000020Scotland#0010c2ABAberdeenshire000016Italy#0200c2VEVeneto000019NewWorld#1740c2RURussia00001DVirginia#1630c2RKRockbridge00001CSouthDakota#0330c2CUCuster000019Alabama#0110c2BUBullock000019Missouri#1710c2PUPutnam00001ENorthAmerica#0020c2BSBahamas000022California#0750c2SFSan Francisco000024Switzerland#090c2GRGraub&uuml;nden000023USACentralRegion#270c2MNMinnesota000027NewWorld#220c2TTTrinidad &amp; Tobago000026Australia2#NT0c2NTNorthern Territory000013Japan#280c2NRNara00001ABulgaria#550c2CCSilistra00001FOntario#310c2NRNorthumberland000017Montenegro#020c2BABar000018Slovakia#070c2TATrnava000019Uganda#UG.TG0c2TGKitgum000023FranceDepartment#FR.VN0c2VNVienne000018Iran#IR.HD0c2HDHamadan000022FranceDepartment#FR.DM0c2DMDrome000032DemocraticRepublicoftheCongo#CD.HC0c2HCOrientale000019Congo#CG.BO0c2BOBouenza000019Gambia#GM.BJ0c2BJBanjul00001CMacedonia#MK.SD0c2SDDojran00001EMacedonia#MK.RN0c2RNRankovce000020Sudan#SD.SK0c2SKSouth Kurdufan00001BBhutan#BT.BU0c2BUBumthang00001ABhutan#BT.CK0c2CKChhukha000017Bhutan#BT.DA0c2DADaga00002FCentralAfricanRepublic#CF.KB0c2KBNana-Grebizi000026Chad#TD.BT0c2BTBorkou-Ennedi-Tibesti00001DTanzania#TZ.MO0c2MOMorogoro000021CoteDivoire#CI.SC0c2SCSud-Comoe000017Kansas#0350c2CLCowley000020SouthCarolina#0070c2ANAnderson00001CIllinois#0710c2HEHenderson000018Brazil#0260c2SESergipe000024WorldwithCountries#1300c2ADAndorra00001CNorthDakota#0050c2BEBenson000015Texas#0630c2CAPCamp000015Idaho#0810c2TETeton000017Ohio#0250c2CEClermont00001DWyoming#0170c2HSHot Springs00001DTennessee#0850c2HPHumphreys000018Scotland#0020c2ANAngus000019Italy#0210c2SMSanmarino00001CNewWorld#1750c2AUAustralia000018Oklahoma#0370c2CKCreek000015Iowa#0890c2HOHoward00001ATexas#4250c2SOMSomervell00001BNewJersey#0310c2PAPassaic000019Indiana#0410c2FAFayette00001CNewYork#0130c2CHChautauqua000020NorthCarolina#0810c2GUGuilford000016Georgia#2330c2POPolk00001DIreland#0010c2CACeatharlach00001FNorthAmerica#0030c2BBBarbados000027NewCaledonia#NC.IL.MA0c2MAMar&eacute;00002CNewCaledonia#NC.NO.PD0c2PDPoindimi&eacute;000021Switzerland#100c2IRInner-Rhoden000017Canada#010c2ABAlberta00001FNewWorld#230c2USUnited States000019PuertoRico#410c2CDCidra000016Japan#290c2NINiigata000018Bulgaria#560c2CHSliven000017Ontario#320c2OTOttawa00001AMontenegro#030c2BEBerane00001DSlovakia#080c2ZI&#381;ilina000019Uganda#UG.SR0c2SRSoroti00001EMacedonia#MK.AD0c2ADAerodrom00001BMalawi#MW.PH0c2PHPhalombe000027FranceDepartment#FR.VO0c2VOVal d'Oise00002AGuinea#GN.GU0c2GUGu&eacute;ck&eacute;dou000019Uganda#UG.BG0c2BGBugiri000018Benin#BJ.BO0c2BOBorgou000020Cyprus2#CY.GC0c2GCGreek Cyprus000019Iran#IR.GO0c2GOGolestan000019Algeria#DZ.SD0c2SDSaida00001ANepal#NP.MA0c2MAMahakali00001FPapuaNewGuinea#PG.GU0c2GUGulf000019Burundi#BI.NG0c2NGNgozi00001ATexas#2450c2JEFJefferson00001DNebraska#1770c2WAWashington00001FGeorgia#0530c2CCChattahoochee00001ABrazil#0270c2TOTocantins000024WorldwithCountries#1310c2ATAustria00001AMinnesota#1050c2NONobles00001AKentucky#0890c2GUGreenup000019Michigan#0990c2MBMacomb000018Florida#0170c2CICitrus000020WestVirginia#0170c2DODoddridge000019Scotland#0030c2ARArgyll000017NewWorld#1760c2FJFiji00001DVirginia#1650c2RGRockingham00001DSouthDakota#0350c2DADavison000018Alabama#0130c2BTButler000018Missouri#1730c2RSRalls00001FIreland#0020c2CVCabh&aacute;n00001DNorthAmerica#0040c2BZBelize000020California#0770c2SJSan Joaquin00001BSwitzerland#110c2LULuzern000020Canada#020c2BCBritish Columbia000022USACentralRegion#290c2MOMissouri00001BNewWorld#240c2GLGreenland000013Japan#300c2OIOita000022Australia#SW0c2SWNew South Wales000019Bulgaria#570c2CMSmolyan000017Ontario#330c2OXOxford000020Montenegro#040c2BPBijelo Polje00002BFranceDepartment#FR.VP0c2VPVille de Paris000018Benin#BJ.CF0c2CFCouffo000019Libya#LY.GR0c2GRGharyan00001AEurope2#EU.NO0c2NONorway00001AMauritius#MU.MO0c2MOMoka00001FNigeria#NG.CR0c2CRCross River00001DBurkinaFaso#BF.BW0c2BWBanwa00001DAlgeria#DZ.AD0c2ADAin Defla00001FGuineaBissau#GW.CA0c2CACacheu000019Kansas#0370c2CRCrawford00001FSouthCarolina#0090c2BABamberg000018Illinois#0730c2HNHenry00001ABelgium#0100c2BRBrussels000024WorldwithCountries#1320c2BYBelarus00001ENorthDakota#0070c2BIBillings000017Texas#0650c2CARCarson00001AIdaho#0830c2TFTwin falls000016Ohio#0270c2CIClinton000019Wyoming#0190c2JOJohnson000025Europewithcountries#0010c2ALAlbania00001BTennessee#0870c2JAJackson00001BScotland#0040c2AYAyrshire00001BNewWorld#1770c2KIKiribati000019Oklahoma#0390c2CSCuster000017Iowa#0910c2HUHumboldt000015Asia3#0190c2JPJapan000016Texas#4270c2STAStarr000019NewJersey#0330c2SASalem000017Indiana#0430c2FLFloyd000019NewYork#0150c2CEChemung00001FNorthCarolina#0830c2HAHalifax000019Georgia#2350c2PLPulaski00001DIreland#0030c2CLCl&aacute;r00001DNorthAmerica#0050c2CACanada000019Montenegro#050c2BUBudva000024Switzerland#120c2NENeuch&acirc;tel000018Canada#030c2MBManitoba00001BNewWorld#250c2ARArgentina000019PuertoRico#430c2COCoamo000018Bahamas#010c2AKAcklins000016Japan#310c2OKOkayama000017Bulgaria#580c2CSofiya00001COntario#340c2PSParry Sound000024SierraLeone#SL.NO.KD0c2KDKoinadugu00001DDjibouti#DJ.DB0c2DBDjibouti000024EquatorialGuinea#GQ.AN0c2ANAnnobon00001AIran#IR.HG0c2HGHormozgan000024FranceDepartment#FR.CZ0c2CZCorreze000019Algeria#DZ.SF0c2SFSetif000020Bhutan#BT.TY0c2TYTashi Yangtse00001DCongo#CG.BR0c2BRBrazzaville00001FGuineaBissau#GW.BL0c2BLBolama000019Texas#2470c2JIHJim Hogg000021Virginia#7100c2NONorfolk (City)000018Nebraska#1790c2WYWayne00001BGeorgia#0550c2CGChattooga000020Belgium#0110c2VBVlaams-Brabant000024WorldwithCountries#1330c2BEBelgium00001AMinnesota#1070c2NRNorman00001AKentucky#0910c2HAHancock00001BMichigan#1010c2MSManistee000016Florida#0190c2CLClay00001BMississippi#0010c2ADAdams000025Europewithcountries#0020c2ADAndorra00001EWestVirginia#0190c2FAFayette00001DScotland#0050c2BABanffshire000023NewWorld#1780c2MHMarshall Islands00001AVirginia#1670c2RURussell000019SouthDakota#0370c2DYDay000019Alabama#0150c2CACalhoun00001BMissouri#1750c2RORandolph00001AIreland#0040c2COCorcaigh000021NorthAmerica#0060c2CRCosta Rica000024California#0790c2SPSan Luis Obispo00001BMontenegro#060c2CECetinje00001FMiddleEast#010c2AFAfghanistan00001ESwitzerland#130c2NINidwalden00001DCanada#040c2NBNew Brunswick000022USACentralRegion#310c2NENebraska000019NewWorld#260c2BOBolivia00001EBahamas#020c2BRBerry Islands000016Japan#320c2ONOkinawa00001EBulgaria#590c2CTStara Zagora000015Ontario#350c2PEPeel000022FrenchGuiana#GF.CY.CM0c2CMCamopi000020FranceDepartment#FR.VR0c2VRVar00001EPalau#PW.NL0c2NLNgeremlengui00001BUganda#UG.AT0c2ATAmolatar00001BUganda#UG.BJ0c2BJButaleja000016Libya#LY.GT0c2GTGhat00001DSriLanka#LK.VA0c2VAVavuniya000021Somalia#SO.JD0c2JDJubbada Dhexe000017Yemen#YE.LA0c2LALahij00001FGuineaBissau#GW.BM0c2BMBiombo000018Kansas#0390c2DCDecatur000020SouthCarolina#0110c2BRBarnwell00001BIllinois#0750c2IRIroquois000033WorldwithCountries#1340c2BHBosnia and Herzegovina00001FNorthDakota#0090c2BOBottineau000015Texas#0670c2CASCass000016Idaho#0850c2VAValley000025Virginia#5300c2BVBuena Vista (City)000019Ohio#0290c2COColumbiana00001ENewMexico#0010c2BEBernalillo000019Wyoming#0210c2LALaramie000025Europewithcountries#0030c2ATAustria00001DTennessee#0890c2JEJefferson00001FScotland#0060c2BEBerwickshire00001DNewWorld#1790c2FMMicronesia00001BOklahoma#0410c2DEDelaware000012Iowa#0930c2IDIda00001AAsia3#0210c2KZKazakhstan000019Texas#4290c2STEStephens00001CNewJersey#0350c2SOSomerset00001AIndiana#0450c2FOFountain00001ANewYork#0170c2CNChenango00001FNorthCarolina#0850c2HRHarnett000018Georgia#2370c2PUPutnam000025Ireland#0050c2DOD&uacute;n na nGall00001BNorthAmerica#0070c2CUCuba00002ENewCaledonia#NC.NO.PH0c2PHPon&eacute;rihouen00001FMontenegro#070c2DADanilovgrad00001BMiddleEast#020c2BABahrain00001DSwitzerland#140c2OBObwalden000023EastEuropeanRegion#010c2BYBelarus000029Canada#050c2NLNewfoundland and Labrador000018NewWorld#270c2BRBrazil000022PuertoRico#450c2CMComer&iacute;o000016Belize#010c2BZBelize000017Bahamas#030c2BIBimini000014Japan#330c2OSOsaka00001ENorwayRegion#010c2AKAkershus00001CBulgaria#600c2TTurgovishte000016Ontario#360c2PRPerth000027PolandCounties#PL.SL.KA0c2SKAKatowice00001ECoteDivoire#CI.AG0c2AGAgneby00001APalau#PW.NM0c2NMNgardmau00001AVietnam#VN.HM0c2HMHa Nam000020GuineaBissau#GW.TO0c2TOTombali000025BurkinaFaso#BF.BZ0c2BZBaz&egrave;ga000027CentralAfricanRepublic#CF.KG0c2KGKemo00001BTanzania#TZ.MT0c2MTMtwara000017Nepal#NP.ME0c2MEMechi00001FNorthAmerica#0080c2DMDominica00001ECalifornia#0810c2SESan Mateo00001ATexas#2490c2JIWJim Wells00001ANebraska#1810c2WBWebster00001AGeorgia#0570c2CECherokee000025WorldwithCountries#1350c2BGBulgaria00001BMinnesota#1090c2OLOlmsted000019Kentucky#0930c2HRHardin00001CMichigan#1030c2MQMarquette000019Florida#0210c2COCollier00001CMississippi#0030c2ALAlcorn000025Europewithcountries#0040c2BYBelarus00001DWestVirginia#0210c2GIGilmer000017Scotland#0070c2BUBute000018NewWorld#1800c2NRNauru00001DAsia3#0220c2KPKorea (north)000018Virginia#1690c2SCScott000018Colorado#0010c2ADAdams00001BSouthDakota#0390c2DUDeuel00001AAlabama#0170c2CHChambers000016Missouri#1770c2RARay00002AIreland#0060c2DUBaile &Aacute;tha Cliath000026USANorthWestRegion#530c2WAWashington00001FMontenegro#080c2HNHerceg Novi000018MiddleEast#030c2INIran000021Switzerland#150c2SGSankt Gallen000024SouthEuropeanRegion#010c2ALAlbania000024EastEuropeanRegion#020c2BGBulgaria000017NewWorld#280c2CLChile000014Belize#020c2CYCayo00001CBahamas#040c2BPBlack Point000013Japan#340c2SASaga000020NorwayRegion#020c2AAAust-Agder000016Bulgaria#610c2BVarna00001DOntario#370c2PTPeterborough00001CBurundi#BI.MV0c2MVMuramvya000019Uganda#UG.BL0c2BLBulisa000028FranceDepartment#FR.DS0c2DSDeux Sevres000019Vietnam#VN.HN0c2HNHanoi000022Morocco#MA.TO0c2TOTanger Tetouan00001ANigeria#NG.EB0c2EBEbonyi00001EBurma#MM.KC0c2KCKachin State00001FPhilippines#PH.QR0c2QRQuirino000019Georgia#2390c2QUQuitman00001AIreland#0070c2GAGaillimh000025NorthAmerica#0090c2DODominican Rep.00001AKansas#0410c2DKDickinson000020SouthCarolina#0130c2BEBeaufort00001AIllinois#0770c2JAJackson000024WorldwithCountries#1360c2HYCroatia00001CNorthDakota#0110c2BWBowman000017Texas#0690c2CATCastro00001AIdaho#0870c2WAWashington000018Ohio#0310c2CSCoshocton00001ANewMexico#0030c2CACatron000018Nebraska#0010c2ADAdams000019Wyoming#0230c2LILincoln000025Europewithcountries#0050c2BEBelgium00001BTennessee#0910c2JOJohnson00001CScotland#0080c2CACaithness00001ENewWorld#1810c2NZNew Zealand000018Oklahoma#0430c2DWDewey000013Iowa#0950c2IWIowa00001DAsia3#0230c2KRKorea (south)000019Texas#4310c2STRSterling00001ANewJersey#0370c2SUSussex00001AIndiana#0470c2FRFranklin000019NewYork#0190c2CLClinton00001FNorthCarolina#0870c2HWHaywood000022Montenegro#090c2KLKola&scaron;in000018MiddleEast#040c2IZIraq000021Switzerland#160c2SCSchaffhausen000024SouthEuropeanRegion#020c2ADAndorra000023EastEuropeanRegion#030c2MDMoldova00001BCanada#070c2NSNova Scotia00001ANewWorld#290c2COColombia000021Quebec#010c2BSBas-Saint-Laurent00001BPuertoRico#470c2CZCorozal000017Belize#030c2CZCorozal00001BBahamas#050c2CICat Island000016Japan#350c2SISaitama000020Bulgaria#620c2BTVeliko Turnovo000025Ontario#380c2PCPrescott and Russell000019Burundi#BI.MW0c2MWMwaro00001CHongKong#HK.IS0c2ISIslands00001BMacedonia#MK.AJ0c2AJSaraj000023Sudan#SD.BG0c2BGCentral Equatoria000026Serbia#RS.KM0c2KMKosovsko Mitrovacki000017Uganda#UG.AW0c2AWArua000019Thailand#TH.YL0c2YLYala000025SolomonIsland#SB.GC0c2GCGuadalcanal00001EBotswana#BW.KG0c2KGKgalagadi00001CVietnam#VN.HO0c2HOHoa Binh000016Syria#SY.DR0c2DRDara00001FMacedonia#MK.RU0c2RUStrumitsa00001ABhutan#BT.CR0c2CRChirang00001DPhilippines#PH.RI0c2RIRizal00001FKazakhstan#KZ.BY0c2BYBayqonyr00001BMissouri#1790c2REReynolds000020Ireland#0080c2KECiarra&iacute;000022NorthAmerica#0100c2SVEl Salvador000022California#0830c2SRSanta Barbara000018Texas#2510c2JOHJohnson00001ANebraska#1830c2WHWheeler000018Georgia#0590c2CKClarke00002BWorldwithCountries#1370c2CZCzech Republic00001EMinnesota#1110c2OTOtter Tail000019Kentucky#0950c2HLHarlan000018Michigan#1050c2MAMason00001AFlorida#0230c2CUColumbia00001BMississippi#0050c2AMAmite000034Europewithcountries#0060c2BABosnia and Herzegovina00001CWestVirginia#0230c2GRGrant000023Scotland#0090c2CLClackmannanshire000018NewWorld#1820c2PWPalau00001DVirginia#1710c2SHShenandoah00001AColorado#0030c2ALAlamosa00001FAlaska#2610c2VCValdez-Cordova00001BSouthDakota#0410c2DEDewey00001AAlabama#0190c2CECherokee000019Montenegro#100c2KTKotor00001AMiddleEast#050c2ISIsrael00001BSwitzerland#170c2SHSchwyz000035SouthEuropeanRegion#030c2BABosnia &amp; Herzegovina000023EastEuropeanRegion#040c2RORomania000017Canada#080c2ONOntario000019NewWorld#300c2ECEcuador000027Quebec#020c2SLSaguenay-Lac-Saint-Jean00001AUSA#WV0c2WVWest Virginia00001BBelize#040c2OWOrange Walk00001EBahamas#060c2CBCentral Abaco000014USA#GA0c2GAGeorgia000014Japan#360c2SHShiga00001ENorwayRegion#040c2BUBuskerud000017Bulgaria#630c2BHVidin00001EOntario#390c2PNPrince Edward000022MarshallIsland#MH.MH.KN0c2KNKnox00001BTanzania#TZ.MW0c2MWMwanza00001ARussia#RU.IK0c2IKIrkutsk00001APalau#PW.NP0c2NPNgatpang00001DUganda#UG.BN0c2BNBundibugyo00001ABenin#BJ.CL0c2CLCollines00002FHungaryRegions#HU.NG0c2NGNorthern Great Plain00001CVietnam#VN.HP0c2HPHaiPhong00001AAlgeria#DZ.SK0c2SKSkikda000017Nigeria#NG.ED0c2EDEdo000021Somalia#SO.JH0c2JHJubbada Hoose00001DMacedonia#MK.RV0c2RVRadovis000022Macedonia#MK.SL0c2SLSveti Nikole000018Niger#NE.TH0c2THTahoua000021NorthCarolina#0890c2HDHenderson000017Georgia#2410c2RBRabun00001BIreland#0090c2KICill Dara00001ENorthAmerica#0110c2GDGrenada000019Kansas#0430c2DPDoniphan000020SouthCarolina#0150c2BKBerkeley000019Illinois#0790c2JSJasper000024WorldwithCountries#1380c2DKDenmark00001BNorthDakota#0130c2BUBurke000019Texas#0710c2CHAChambers000017Ohio#0330c2CWCrawford00001ANewMexico#0050c2CHChaves00001BNebraska#0030c2ANAntelope000019Wyoming#0250c2NANatrona000026Europewithcountries#0070c2BGBulgaria000018Tennessee#0930c2KNKnox000021Scotland#0100c2DMDumbartonshire000023NewWorld#1830c2PGPapua New Guinea000018Oklahoma#0450c2ELEllis000016Iowa#0970c2JAJackson00001ATexas#4330c2STOStonewall000019NewJersey#0390c2UNUnion000018Indiana#0490c2FUFulton00001ANewYork#0210c2COColumbia000029YukonTerritory#CA.YT.NO0c2NONorth Yukon000023USANorthWestRegion#560c2WYWyoming00001CMontenegro#110c2MKMojkovac00001AMiddleEast#060c2JOJordan00001ESwitzerland#180c2SOSolothurn000024SouthEuropeanRegion#040c2HYCroatia000023EastEuropeanRegion#050c2UAUkraine000024Canada#090c2PEPrince Edward Island000022NewWorld#310c2FKFalkland Islands000022Quebec#030c2CNCapitale-Nationale00001BPuertoRico#490c2CUCulebra00001BBelize#050c2SCStann Creek00001FBahamas#070c2CNCentral Andros000014USA#FL0c2FLFlorida000016Japan#370c2SMShimane00001ENorwayRegion#050c2FIFinnmark000018Bulgaria#640c2BPVratsa00001COntario#400c2RARainy River000024MarshallIsland#MH.MH.KO0c2KOKosrae00001EFiji#FJ.TH.EA0c2EATholo East00001ETajikistan#TJ.KL0c2KLKhatlon00001BBurundi#BI.MY0c2MYMuyinga000032Guyana#GY.ES0c2ESEssequibo Islands-West Demerara00001BSerbia#RS.KO0c2KOKosovski00002BHungaryRegions#HU.NH0c2NHNorthern Hungary000029FranceDepartment#FR.EL0c2ELEure et Loir00001BAlgeria#DZ.TB0c2TBTebessa00001CSriLanka#LK.CO0c2COColombo000014Mali#ML.GA0c2GAGao000019Senegal#SN.KD0c2KDKolda000019Missouri#1810c2RIRipley000020Ireland#0100c2KLCill Chainnigh000020NorthAmerica#0120c2GTGuatemala000020California#0850c2STSanta Clara000016Texas#2530c2JONJones000017Nebraska#1850c2YOYork000016Georgia#0610c2CYClay000024WorldwithCountries#1390c2EEEstonia00001EMinnesota#1130c2PEPennington00001BKentucky#0970c2HIHarrison00001AMichigan#1070c2MCMecosta00001ANewMexico#0060c2CICibola00001CMississippi#0070c2ATAttala000025Europewithcountries#0080c2HYCroatia000021WestVirginia#0250c2GEGreenbrier000020Scotland#0110c2DUDumfriesshire000018NewWorld#1840c2WSSamoa000014Asia3#0260c2LALaos000018Virginia#1730c2SMSmyth00001BColorado#0050c2ARArapahoe00001DSouthDakota#0430c2DODouglas000019Alabama#0210c2CIChilton000020NewCaledonia#NC.NO.PM0c2PMPoum000017Bulgaria#650c2YYambol000018Ontario#410c2RERenfrew000026Montenegro#120c2NKNik&scaron;i&#263;00001AMiddleEast#070c2KUKuwait00001CSwitzerland#190c2THThurgau000023SouthEuropeanRegion#050c2GRGreece000022EastEuropeanRegion#060c2RURussia000016Canada#100c2QCQuebec00001FNewWorld#320c2GFFrench Guiana000018Quebec#040c2MAMauricie000016Belize#060c2TOToledo000022Bahamas#080c2CECentral Eleuthera000017Japan#380c2SZShizouka00001DNorwayRegion#060c2HEHedmark000029FrenchGuiana#GF.SL.SL0c2SLSaint Laurent000016Fiji#FJ.WE.BA0c2BABa00001CTanzania#TZ.MY0c2MYManyara00001FGuineaBissau#GW.BS0c2BSBissau00001BUK7#UK.IM0c2IMIsle of Man00001BZimbabwe#ZW.HA0c2HAHarare000026Serbia#RS.KP0c2KPKosovsko Pomoravski000025Singapore#SG.SO0c2SOSouth Singapore00001FCambodia#KH.MK0c2MKMondulkiri00001FCongo#CG.CO0c2COCuvette Ouest000019Angola#AO.MX0c2MXMoxico000019Algeria#DZ.AL0c2ALAlger000026Algeria#DZ.BB0c2BBBordj Bou Arreridj000029CentralAfricanRepublic#CF.LB0c2LBLobaye000020NorthCarolina#0910c2HTHertford00001AGeorgia#2430c2RARandolph000017Ireland#0110c2LALaois00001CNorthAmerica#0130c2HTHaiti000018Kansas#0450c2DGDouglas00001FSouthCarolina#0170c2CACalhoun00001CIllinois#0810c2JEJefferson000018Missouri#0010c2ADAdair000024WorldwithCountries#1400c2FIFinland00001ENorthDakota#0150c2BRBurleigh000019Texas#0730c2CHECherokee000017Ohio#0350c2CUCuyahoga00001ANewMexico#0070c2COColfax000019Nebraska#0050c2ARArthur00001AWyoming#0270c2NINiobrara00002CEuropewithcountries#0090c2CZCzech Republic000018Tennessee#0950c2LALake00001FScotland#0120c2EAEast Lothian000022NewWorld#1850c2SBSolomon Islands00001BOklahoma#0470c2GAGarfield000015Iowa#0990c2JSJasper000017Texas#4350c2SUTSutton00001ANewJersey#0410c2WAWarren000018Indiana#0510c2GIGibson00001ANewYork#0230c2CTCortland000017Ontario#420c2SISimcoe000018Montenegro#130c2PVPlav00001EMiddleEast#080c2KGKyrgyzstan00001BSwitzerland#200c2TITicino000022SouthEuropeanRegion#060c2ITItaly00001CCanada#110c2SKSaskatchewan000026USACentralRegion#380c2NDNorth Dakota000023USASouthWestRegion#040c2AZArizona000018NewWorld#330c2GYGuyana000016Quebec#050c2ESEstrie000014USA#WY0c2WYWyoming00001APuertoRico#510c2DODorado000021Bahamas#090c2FPCity of Freeport000016Japan#390c2TOTochigi00001FNorwayRegion#070c2HOHordaland000019Nepal#NP.LU0c2LULumbini00001ANepal#NP.NA0c2NANarayani000021HongKong#HK.KC0c2KCKowloon City000019Uganda#UG.TR0c2TRTororo000021Kiribati#KI.LI0c2LILine Islands00001CPhilippines#PH.AB0c2ABAbra00001DRussia#RU.IN0c2INIngushetia000021China2#CN.XJ0c2XJXinjiang Uygur00001APalau#PW.NS0c2NSNgchesar000021Lebanon#LE.JA0c2JASouth Lebanon00001BTuvalu#TV.FN0c2FNFunafuti00001CUzbekistan#UZ.NW0c2NWNavoi00001AAlgeria#DZ.BC0c2BCBechar00001DBurma#MM.KH0c2KHKayah State000022Macedonia#MK.SO0c2SOSuto Orizari000026Philippines#PH.SC0c2SCSouth Cotabato00001EMissouri#1830c2SRSt. Charles00001AIreland#0120c2LELiatroim00001FNorthAmerica#0140c2HNHonduras00001FCalifornia#0870c2SCSanta Cruz000017Texas#2550c2KARKarnes000019Georgia#0630c2CTClayton000023WorldwithCountries#1410c2FRFrance000018Minnesota#1150c2PIPine000017Kentucky#0990c2HTHart00001CMichigan#1090c2MMMenominee000018Florida#0270c2DEDesoto00001CMississippi#0090c2BEBenton000025Europewithcountries#0100c2DKDenmark000020WestVirginia#0270c2HAHampshire000017Scotland#0130c2FIFife000018NewWorld#1860c2TOTonga000018Asia3#0280c2MYMalaysia00001EVirginia#1750c2SUSouthampton00001CColorado#0070c2ACArchuleta00001DSouthDakota#0450c2EDEdmunds000019Alabama#0230c2COChoctaw00002EOntario#430c2STStormont, Dundas and Glengary000020Montenegro#140c2PLPlu&#382;ine00001BMiddleEast#090c2LELebanon000018Switzerland#210c2URUri000026SouthEuropeanRegion#070c2MKMacedonia00001FCanada#120c2YTYukon Territory00001ANewWorld#340c2PYParaguay00001FQuebec#060c2MNMontr&eacute;al00001FBahamas#100c2CKCrooked Island000018Japan#400c2TKTokushima00002CNorwayRegion#080c2MRM&oslash;re og Romsdal00001EFiji#FJ.TH.WE0c2WETholo West000021SierraLeone#SL.NO.KM0c2KMKambia00001BNiger#NE.TL0c2TLTillabery00001BTajikistan#TJ.LE0c2LESogd00001BDjibouti#DJ.DK0c2DKDikhil00002BRussia#RU.JE0c2JEJewish Autonomous Region00001BUganda#UG.BR0c2BRKabarole00001DBotswana#BW.KL0c2KLKgatleng000019China2#CN.FJ0c2FJFujian00001BVietnam#VN.HT0c2HTHa Tinh00001FCapeVerde#CV.MO0c2MOMosteiros00001AAlgeria#DZ.AN0c2ANAnnaba00001ANewYork#0250c2DEDelaware00001CNorthCarolina#0930c2HOHoke00001AGeorgia#2450c2RIRichmond00001BIreland#0130c2LILuimneach00001ENorthAmerica#0150c2JMJamaica000018Kansas#0470c2EDEdwards000022SouthCarolina#0190c2CHCharleston000019Illinois#0830c2JRJersey000019Missouri#0030c2ANAndrew000024WorldwithCountries#1420c2DEGermany00001ANorthDakota#0170c2CACass00001ATexas#0750c2CHIChildress000014Ohio#0370c2DADarke000019NewMexico#0090c2CUCurry000019Nebraska#0070c2BABanner000016Wyoming#0290c2PAPark000025Europewithcountries#0110c2EEEstonia00001ETennessee#0970c2LULauderdale000022Scotland#0140c2ISInverness-shire000019NewWorld#1870c2TVTuvalu000019Oklahoma#0490c2GRGarvin000018Iowa#1010c2JEJefferson000018Texas#4370c2SWISwisher000017Indiana#0530c2GRGrant000018Ontario#440c2SUSudbury00001CMontenegro#150c2PUPljevlja000018MiddleEast#100c2MUOman00001BSwitzerland#220c2VAValais000022SouthEuropeanRegion#080c2MTMalta000025Canada#130c2NTNorthwest Territories000022USACentralRegion#400c2OKOklahoma000026USASouthWestRegion#060c2CACalifornia000016NewWorld#350c2PEPeru000019Quebec#070c2OUOutaouais00001BPuertoRico#530c2FJFajardo000022Bahamas#110c2EBEast Grand Bahama000014Japan#410c2TYTokyo00001ENorwayRegion#090c2NONordland00001FPhilippines#PH.RO0c2RORomblon00001BUganda#UG.BS0c2BSBushenyi000028EquatorialGuinea#GQ.BN0c2BNBioko Norte00001DVietnam#VN.HU0c2HUHau Giang000021Morocco#MA.DA0c2DADoukkala Abda00001CMissouri#1850c2SISt. Clair00001AIreland#0140c2LOLongfort00001DNorthAmerica#0160c2MXMexico00001BCalifornia#0890c2SHShasta000018Texas#2570c2KAUKaufman00001ALouisiana#0010c2ACAcadia000020Virginia#7200c2NRNorton (City)000018Georgia#0650c2CIClinch000023WorldwithCountries#1430c2GRGreece00001DMinnesota#1170c2PSPipestone00001CKentucky#1010c2HEHenderson00001AMichigan#1110c2MDMidland000017Florida#0290c2DIDixie00001DMississippi#0110c2BOBolivar000025Europewithcountries#0120c2FIFinland00001BArkansas#0010c2ARArkansas00001EWestVirginia#0290c2HNHancock000022Scotland#0150c2KCKincardineshire00001ANewWorld#1880c2VUVanuatu000018Asia3#0300c2MNMongolia00001FVirginia#1770c2SPSpotsylvania000017Colorado#0090c2BABaca000020SouthDakota#0470c2FRFall River000018Alabama#0250c2CLClarke000030NewCaledonia#NC.SU.IP0c2IPL'&Icirc;le-des-Pins00001COntario#450c2TBThunder Bay00001DMontenegro#160c2PGPodgorica00001CMiddleEast#110c2PKPakistan000019Switzerland#230c2VUVaud000027SouthEuropeanRegion#090c2MOMontenegro000017Canada#140c2NUNunavut00001ANewWorld#360c2SRSuriname00002CQuebec#080c2ATAbitibi-T&eacute;miscamingue00001BPuertoRico#540c2FLFlorida000016Bahamas#120c2EMExuma000016Japan#420c2TTTottori00002BNorwayRegion#100c2NTNord-Tr&oslash;ndelag00001EPhilippines#PH.QZ0c2QZQuezon000029Philippines#PH.SF0c2SFShariff Kabunsuan000023CentralAmerica2#CE.GD0c2GDGrenada000017Yemen#YE.MA0c2MAMarib00001EEastTimor#TL.MF0c2MFManufahi00001EMacedonia#MK.BG0c2BGBogdanci00001BSudan#SD.BN0c2BNBlue Nile00001ECoteDivoire#CI.BF0c2BFBafing00001DThailand#TH.YS0c2YSYasothon00001CKuwait#KW.KU0c2KUAl Kuwayt000019Cameroon#CM.NO0c2NONord000025CaymanIslands#KY.GT0c2GTGeorge Town00001ESyria#SY.DY0c2DYDayr az Zawr000015Togo#TG.KA0c2KAKara00001FGhana#GH.AA0c2AAGreater Accra000018Indiana#0550c2GEGreene00001ANewYork#0270c2DUDutchess00001CNorthCarolina#0950c2HYHyde00001AGeorgia#2470c2RORockdale000021Missouri#1860c2SGSte. Genevieve00001BIreland#0150c2LUL&uacute;000020NorthAmerica#0170c2NINicaragua000014Kansas#0490c2EKElk000020SouthCarolina#0210c2CECherokee00001DIllinois#0850c2JDJo Daviess00001BMissouri#0050c2ATAtchison000024WorldwithCountries#1440c2HUHungary00001ENorthDakota#0190c2CVCavalier000015Texas#0770c2CLAClay000029Virginia#5400c2CVCharlottesville (City)000017Ohio#0390c2DEDefiance00001BNewMexico#0110c2DBDe Baca000019Nebraska#0090c2BLBlaine000018Wyoming#0310c2PLPlatte000024Europewithcountries#0130c2FRFrance00001CTennessee#0990c2LWLawrence000020Scotland#0160c2KNKinross-shire000020NewWorld#1890c2NCNew Caledonia000018Oklahoma#0510c2GDGrady000016Iowa#1030c2JOJohnson000015Asia3#0310c2NPNepal000018Texas#4390c2TARTarrant00001COntario#460c2TITimiskaming00001FMontenegro#170c2RORo&#382;aje000019MiddleEast#120c2QAQatar000018Switzerland#240c2ZUZug000025SouthEuropeanRegion#100c2PTPortugal000024USASouthWestRegion#080c2COColorado000019NewWorld#370c2UYUruguay00001FQuebec#090c2COC&ocirc;te-Nord000022PuertoRico#550c2GCGu&aacute;nica00001ABahamas#130c2GCGrand Cay000015Japan#430c2TAToyama00001DNorwayRegion#110c2OPOppland000022FrenchGuiana#GF.SL.AP0c2APApatou000024MarshallIsland#MH.MH.LK0c2LKLikiep000021Philippines#PH.SG0c2SGSarangani00001DEastTimor#TL.LQ0c2LQLiquica00001FMacedonia#MK.AR0c2ARAracinovo000018Serbia#RS.MA0c2MAMacva000018Palau#PW.NW0c2NWNgiwal000018Uganda#UG.BU0c2BUBusia000024Libya#LY.JA0c2JAAl Jabal al Akhdar000019Nigeria#NG.EK0c2EKEkiti000020Mauritania#MR.GD0c2GDGuidimaka00001DMacedonia#MK.SS0c2SSSopiste00001FMissouri#1870c2SFSt. Francois00001AIreland#0160c2MAMaigh Eo00001DNorthAmerica#0180c2PAPanama00001BCalifornia#0910c2SISierra000018Texas#2590c2KENKendall000019Louisiana#0030c2ALAllen000016Georgia#0670c2CBCobb000024WorldwithCountries#1450c2ISIceland000018Minnesota#1190c2PLPolk000018Kentucky#1030c2HYHenry00001CMichigan#1130c2MIMissaukee000017Florida#0310c2DUDuval00001DMississippi#0130c2CACalhoun000025Europewithcountries#0140c2DEGermany000019Arkansas#0030c2ASAshley00001CWestVirginia#0310c2HRHardy000025Scotland#0170c2KIKirkcudbrightshire00001ANewWorld#1900c2BABahrain00001BVirginia#1790c2STStafford000017Colorado#0110c2BEBent00001BSouthDakota#0490c2FAFaulk000016Alabama#0270c2CYClay000018Ontario#470c2TOToronto000021Montenegro#180c2SA&Scaron;avnik00001FMiddleEast#130c2SASaudiArabia00001BSwitzerland#250c2ZRZurich000027SouthEuropeanRegion#110c2SMSan Marino00001BNewWorld#380c2VEVenezuela000025Quebec#100c2NONord-du-Qu&eacute;bec000016Kenya#010c2CECentral00001FBahamas#140c2HBHarbour Island000017Japan#440c2WAWakayama00001ANorwayRegion#120c2OSOslo000032DICT_RSS.FEEDS0c000001ANAME0c1A1NameL4000371BMVBP.BP0c00006B3SBBP.SB.GETJOB0c0SUBROUTINE SBBP.SB.GETJOB(entry,startpos,bytes)** Copyright (C) 2006 Sierra Bravo Corporation, All Rights Reserved** Programm: SBBP.SB.LISTPEQS* Written by: Luke Bucklin, Sierra Bravo* Date: 04/24/06* Description: Send an XML document of the print queue (LISTPEQS)*COMMON /SBPRINT/ LINK.LIST, LINK.LIST.JOB*EQU P.JOB      TO 1EQU P.PORT     TO 2EQU P.STATUS   TO 3EQU P.QUEUE    TO 4EQU P.BYTES    TO 5EQU P.DATE     TO 6EQU P.TIME     TO 7EQU P.OWNER    TO 8EQU P.PREVIEW  TO 9*LINK.LIST = "" ; LINK.LIST.JOB = ""*CHUNKSIZE = 50000*FRAMESIZE = SYSTEM(32) ;* D3-only*IF NOT(startpos MATCHES "1N0N") THEN startpos = 1IF NOT( bytes MATCHES "1N0N") THEN bytes=99999999*EXECUTE "LISTPEQS ":entry CAPTURING PEQS.OUTLINES = DCOUNT( PEQS.OUT, @AM )GOOD.LINE = 0PINFO = ""FOR PL = 1 TO LINES-1 UNTIL GOOD.LINE  LINE = PEQS.OUT<PL>  GOOD.LINE = 1  previewsize = 0; GET.PREVIEW = 0  CALL SUB.SB.PARSEPEQS(LINE,PINFO,previewsize,GET.PREVIEW,GOOD.LINE)NEXT PL**CRT '<job id="':entry:'">'*CRT ' <date>':OCONV(PINFO<P.DATE>,'D2/'):'</date>'*CRT ' <time>':OCONV(PINFO<P.TIME>,'MTS'):'</time>'*CRT "<data><![CDATA[":CHUNKS = 0NO.PAGES = 1LOOP  IF bytes > CHUNKSIZE THEN    sendbytes = CHUNKSIZE    bytes -= CHUNKSIZE  END ELSE    sendbytes = bytes    bytes = 0  END  OUTPUT = ""  CALL SUB.SB.GET.ENTRY(entry,startpos,sendbytes,OUTPUT,ERR)  CHUNKS += 1  IF NOT(ERR) THEN    CONVERT CHAR(0) TO "" IN OUTPUT    CALL SWAP(OUTPUT,CHAR(12),'[0x12]')    NO.PAGES = NO.PAGES + COUNT( OUTPUT, CHAR(12) )    CRT OUTPUT:  END ELSE EXIT  startpos += sendbytesWHILE bytes AND OUTPUT # "" DO REPEAT*CRT ']]></data><pages>':NO.PAGES:'</pages>'*CRT '</job>'STOP000A12SUB.SB.GET.ENTRY0c0SUBROUTINE SUB.SB.GET.ENTRY(JOB,START.POS,BYTES,OUTPUT,ERR)** Copyright (C) 2006 Sierra Bravo Corporation, All Rights Reserved** Programm: SUB.SB.GET.ENTRY* Written by: Luke Bucklin, Sierra Bravo* Date: 04/24/06* Description: Extract a segment of print queue content*COMMON /SBPRINT/ LINK.LIST, LINK.LIST.JOB*FRAMESIZE = SYSTEM(32) ;* D3-onlyOUTPUT = ""ERR = ""BYTES.TO.GET = BYTES*EXECUTE "LISTPEQS ":JOB:" E" CAPTURING JOB.LINEJOB.LINE = JOB.LINE<5>	FID = JOB.LINE[34,8]IF FID # "" THEN  * Get full sequential list of frame IDs  FSIZE = FRAMESIZE-1  IF START.POS > 1 OR BYTES > FSIZE THEN    IF LINK.LIST.JOB # JOB THEN      * We didn't just build this recently, so go ahead and build it now      * associate the LINK.LIST (in common) with the job so if we are asked      * to build this linked list again for this job, we can skip this part      * and just pull it from common      LINK.LIST = FID      LINK.LIST.JOB = JOB      EXECUTE "DUMP .":FID:" L" CAPTURING LINKAGE      START.ROW = INDEX(LINKAGE,'+',1)      START.ROW = DCOUNT(LINKAGE[1,START.ROW],@AM)      MAX.ROWS = DCOUNT( LINKAGE, @AM )      FOR LX = START.ROW TO MAX.ROWS        ROW = LINKAGE<LX>        IF TRIM(ROW) # "" THEN          XFRAME = TRIM(FIELD( ROW,'(',2))          XFRAME = FIELD(XFRAME,' ',1)          LINK.LIST<-1> = XFRAME        END      NEXT LX    END    *    * First frame is FRAMESIZE-1 bytes because the first    * byte is a throwaway.    *    START.TEMP = START.POS    SKIP.FRAMES = 0    LOOP UNTIL START.TEMP <= FSIZE DO      SKIP.FRAMES += 1      START.TEMP -= FSIZE      FSIZE = FRAMESIZE    REPEAT    IF SKIP.FRAMES THEN OFFSET = START.TEMP-1 ELSE OFFSET = START.TEMP    IF SKIP.FRAMES = 0 AND OFFSET = 0 THEN OFFSET = 1  END ELSE    LINK.LIST = FID    OFFSET = 1    SKIP.FRAMES = 0  END  MAX.FRAMES = DCOUNT( LINK.LIST, @AM )  FX.START = 1 + SKIP.FRAMES  FOR FX = FX.START TO MAX.FRAMES WHILE BYTES.TO.GET     FID = LINK.LIST<FX>    EXECUTE "DUMP .":FID:" SX" CAPTURING PREVX.OUT    IF LEN(PREVX.OUT) # FRAMESIZE*2 THEN      ERR = 1      EXIT    END    IF OFFSET THEN      PREVX.OUT = PREVX.OUT[(OFFSET*2)+1,FRAMESIZE*2]    END    DATLEN = LEN(PREVX.OUT) / 2    PREVX.OUT = OCONV( PREVX.OUT, 'MY' )    IF DATLEN > BYTES.TO.GET THEN      PREVX.OUT = PREVX.OUT[1,BYTES.TO.GET]      BYTES.TO.GET = 0    END ELSE      BYTES.TO.GET -= DATLEN    END    OUTPUT := PREVX.OUT    CONVERT CHAR(0) TO "" IN OUTPUT    CONVERT @AM TO "^" IN OUTPUT    OFFSET = 0  NEXT FXEND ELSE ERR = 1RETURN000703SUB.SB.PARSEPEQS0c0SUBROUTINE SUB.SB.PARSEPEQS(LINE,PINFO,previewsize,GET.PREVIEW,GOOD.LINE)*EQU P.JOB      TO 1EQU P.PORT     TO 2EQU P.STATUS   TO 3EQU P.QUEUE    TO 4EQU P.BYTES    TO 5EQU P.DATE     TO 6EQU P.TIME     TO 7EQU P.OWNER    TO 8EQU P.PREVIEW  TO 9*FRAMESIZE = SYSTEM(32) ;* D3-onlyIF NOT(FRAMESIZE MATCHES "1N0N") THEN FRAMESIZE = 4000*PINFO = ""*JOB = TRIM(LINE[1,4])IF JOB MATCHES "1N0N" THEN  PINFO<P.JOB> = JOB  *  L.PORT = TRIM(LINE[15,5])  PINFO<P.PORT> = L.PORT  *  L.STATUS = TRIM(LINE[23,15])  STATUS.MSG = ""  IF INDEX(L.STATUS,'h',1) THEN    STATUS.MSG := 'Hold,'  END  IF INDEX(L.STATUS,'l',1) THEN    STATUS.MSG := 'Locked,'  END  IF INDEX(L.STATUS,'o',1) THEN    STATUS.MSG := 'Generating,'  END  IF INDEX(L.STATUS,'s',1) THEN    STATUS.MSG := 'Spooled,'  END ELSE IF INDEX(L.STATUS,'p',1) THEN    STATUS.MSG := 'To print,'  END ELSE IF INDEX(L.STATUS,'x',1) THEN    STATUS.MSG := 'Canceled,'  END  IF STATUS.MSG # "" THEN STATUS.MSG = STATUS.MSG[1,LEN(STATUS.MSG)-1] ;* Get rid of the trailing comma  PINFO<P.STATUS> = STATUS.MSG  *  L.QUEUE = TRIM(LINE[42,5])  PINFO<P.QUEUE> = L.QUEUE  *  L.BYTES = TRIM(LINE[47,7])  L.BYTES = L.BYTES * FRAMESIZE  PINFO<P.BYTES> = L.BYTES  *  L.DATE = TRIM(LINE[55,8])  L.DATE = ICONV( L.DATE,'D' )  PINFO<P.DATE> = L.DATE  *  L.TIME = TRIM(LINE[64,8])  L.TIME = ICONV( L.TIME, 'MTS' )  PINFO<P.TIME> = L.TIME  *  L.OWNER = TRIM(LINE[73,20])  PINFO<P.OWNER> = L.OWNER  *  IF GET.PREVIEW THEN    *    * Get preview unless we are searching -that's a whole different process.    *    L.PREVIEW = ""    CALL SUB.SB.GET.ENTRY(JOB,1,previewsize,L.PREVIEW,ERR)    IF ERR # "" THEN GOOD.LINE = 0    PINFO<P.PREVIEW> = L.PREVIEW  ENDEND ELSE GOOD.LINE = 0RETURN001F30SBBP.SB.LISTPEQS0c0** Copyright (C) 2008 Sierra Bravo Corporation, All Rights Reserved** Programm: SBBP.SB.LISTPEQS* Written by: Luke Bucklin, Sierra Bravo* Adapted by: David Bucklin, Sierra Bravo*             CGI Version of the Bravo Print XML API* Date: 04/24/06* Description: Send an XML document of the print queue (LISTPEQS)*COMMON /SBPRINT/ LINK.LIST, LINK.LIST.JOBINCLUDE WBPD WWW.INCLUDE*LINK.LIST = "" ; LINK.LIST.JOB = ""*EQU P.JOB      TO 1EQU P.PORT     TO 2EQU P.STATUS   TO 3EQU P.QUEUE    TO 4EQU P.BYTES    TO 5EQU P.DATE     TO 6EQU P.TIME     TO 7EQU P.OWNER    TO 8EQU P.PREVIEW  TO 9*OPEN '','SBBP.FORMS' TO F.SBBP.FORMS ELSE STOP 201, 'SBBP.FORMS'*CALL WDB.VARS(VARS,VALS)*FRAMESIZE = SYSTEM(32) ;* D3-only*LOCATE "entrystart" IN VARS SETTING POS THEN  entrystart = VALS<POS>END ELSE entrystart = ""LOCATE "entries" IN VARS SETTING POS THEN  entries = VALS<POS>END ELSE entries = ""LOCATE "begindate" IN VARS SETTING POS THEN  begindate = VALS<POS>  begindate = ICONV(begindate,'D')END ELSE begindate = ""LOCATE "enddate" IN VARS SETTING POS THEN  enddate = VALS<POS>  enddate = ICONV(enddate,'D')END ELSE enddate = ""LOCATE "owner" IN VARS SETTING POS THEN  owner = VALS<POS>END ELSE owner = ""LOCATE "queue" IN VARS SETTING POS THEN  queue = VALS<POS>END ELSE queue = ""LOCATE "previewsize" IN VARS SETTING POS THEN  previewsize = VALS<POS>END ELSE previewsize = ""LOCATE "port" IN VARS SETTING POS THEN  port = VALS<POS>END ELSE port = ""LOCATE "searchstring" IN VARS SETTING POS THEN  searchstring = VALS<POS>END ELSE searchstring = ""IF searchstring # "" THEN GET.PREVIEW = 0 ELSE GET.PREVIEW = 1IF NOT(previewsize MATCHES "1N0N") THEN  previewsize = 500ENDLOCATE "entry" IN VARS SETTING POS THEN  entry = VALS<POS>END ELSE entry = ""LOCATE "action" IN VARS SETTING POS THEN  action = VALS<POS>END ELSE action = ""**ERROR = ""ALL.ENTRIES.FOUND = 0ENTRY.LIST = ''LOOP  LOCATE "entries[]" IN VARS SETTING POS THEN    ENTRY.LIST<-1> = VALS<POS>    VARS<POS> = "XXX"  END ELSE ALL.ENTRIES.FOUND = 1UNTIL ALL.ENTRIES.FOUND DO REPEATIF entry # "" THEN ENTRY.LIST<-1> = entryECNT = DCOUNT( ENTRY.LIST, @AM )FOR EX = 1 TO ECNT  entry = ENTRY.LIST<EX>  BEGIN CASE    CASE entry = ""      CMD = ''    CASE action = "delete"      CMD = "SP-KILL ":entry:"F"      EXECUTE CMD CAPTURING JUNK      CMD = "SP-EDIT ":entry:" MUD"    CASE action = "print"      EXECUTE "SP-KILL ":entry:"F" CAPTURING JUNK      IF queue # "" THEN        EXECUTE "SP-ASSIGN F":queue CAPTURING JUNK      END      CMD = "SP-EDIT ":entry:" MSRU"    CASE action = "release"      CMD = "SP-KILL ":entry:"F"    CASE action = "downloadtxt"      CRT "Content-Type: text/plain"      CRT "Content-Disposition: attachment;filename=":entry:".txt"      CRT      SESSION$CONTENT.SENT = 1      CALL SBBP.SB.GETJOB(entry,1,"")      STOP      CASE 1      CMD = ''  END CASE  IF CMD # "" THEN    EXECUTE CMD CAPTURING JUNK  ENDNEXT EX*CMD.SUFF = ""IF entrystart # "" THEN  CMD.SUFF = entrystart:"-9999 "ENDIF owner # "" THEN  CMD.SUFF := "'":owner:"' "END*EXECUTE "LISTPEQS ":CMD.SUFF CAPTURING PEQS.OUT*CRT "Content-Type: text/html"CRTSESSION$CONTENT.SENT = 1*READ FORM.DATA FROM F.SBBP.FORMS, 'listpeqs.html' ELSE FORM.DATA = ''FORM.HDR.POS = INDEX( FORM.DATA, '[QUEUE]', 1 )-1PART1 = FORM.DATA[1,FORM.HDR.POS]CONVERT @AM TO CHAR(13) IN PART1CRT PART1PART2 = FORM.DATA[FORM.HDR.POS+7,99999]XML = ""*LINES.SENT = 0LINES = DCOUNT( PEQS.OUT, @AM )FOR PL = 1 TO LINES-1  LINE = PEQS.OUT<PL>  GOOD.LINE = 1  CALL SUB.SB.PARSEPEQS(LINE,PINFO,previewsize,GET.PREVIEW,GOOD.LINE)  * Filtering  BEGIN CASE    CASE NOT(GOOD.LINE) ; NULL    CASE PINFO<P.JOB> = "" ; GOOD.LINE = 0    CASE begindate # "" AND enddate # ""      IF PINFO<P.DATE> < begindate OR PINFO<P.DATE> > enddate THEN GOOD.LINE = 0    CASE port # "" AND PINFO<P.PORT> # port ; GOOD.LINE = 0    CASE queue # "" AND	 PINFO<P.QUEUE> # queue ; GOOD.LINE = 0    CASE 1      NULL  END CASE  IF GOOD.LINE THEN    *     IF searchstring # "" THEN      JOB = PINFO<P.JOB>      GOSUB SEARCH.JOB    END  END  IF GOOD.LINE THEN    LINES.SENT += 1    *    PDATE = OCONV(PINFO<P.DATE>,'D2/')    PTIME = OCONV(PINFO<P.TIME>,'MTS')    *    IF LINES.SENT / 2 = INT(LINES.SENT/2) THEN      XML<-1> = '<tr class="even">'    END ELSE      XML<-1> = '<tr class="odd">'    END    XML<-1> = '<td><input type="checkbox" name="entries[]" value="':PINFO<P.JOB>:'" /></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?entry=':PINFO<P.JOB>:'&action=downloadtxt">':PINFO<P.JOB>:'</a></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?queue=':PINFO<P.QUEUE>:'">':PINFO<P.QUEUE>:'</a></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?owner=':PINFO<P.OWNER>:'">':PINFO<P.OWNER>:'</a></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?port=':PINFO<P.PORT>:'">':PINFO<P.PORT>:'</a></td>'    XML<-1> = '<td align="right">':OCONV(PINFO<P.BYTES>/1000,'MD,'):'</td>'    XML<-1> = '<td>':OCONV(PINFO<P.DATE>,'D2/'):' ':OCONV(PINFO<P.TIME>,'MTS'):'</td>'    XML<-1> = '<td>':PINFO<P.STATUS>:'</td>'    XML<-1> = \<td><a href="#" title="Print Job" onclick="Effect.SlideDown('printDialog\:PINFO<P.JOB>:\',{duration:0.25}); return false;"><img src="/db/images/button_print.gif"/></a>\*    XML<-1> = \<a href="/viewjob.php?entry=\:PINFO<P.JOB>:\&date=\:PDATE:\&time=\:PTIME:\" title="View Job"><img src="/db/images/button_preview.gif"/></a>\    XML<-1> = \<a href="/dbc/SBBP.SB.LISTPEQS?action=downloadtxt&entry=\:PINFO<P.JOB>:\&date=\:PDATE:\&time=\:PTIME:\" title="Download Job as TXT File"><img src="/db/images/button_downloadtxt.gif"/></a>\    XML<-1> = \<a href="/dbc/SBBP.SB.LISTPEQS?action=delete&entry=\:PINFO<P.JOB>:\&queue=&port=&owner=&searchstring=&begindate=&enddate=&search_type=" title="Delete Job" class="deletejob" onclick="return confirm('Are you sure you want to delete this job?')"><img src="/db/images/button_delete.gif"/></a>\    XML<-1> = '<div style="position:relative;">'    XML<-1> = '<div class="printDialog" id="printDialog':PINFO<P.JOB>:'" style="display:none;">'    XML<-1> = \<div> Queue <input type="text" value="0" style="width:40px;" maxlength="4" id="overrideQueue\:PINFO<P.JOB>:\"/>\    XML<-1> = \<span class="button"><button type="button" onclick="document.location='/dbc/SBBP.SB.LISTPEQS?action=print&entry=\:PINFO<P.JOB>:\&overridequeue='+$F('overrideQueue\:PINFO<P.JOB>:\')+'&queue=&port=&owner=&searchstring=&begindate=&enddate=&search_type='">Print</button></span>\    XML<-1> = \<span class="button"><button type="button" onclick="Effect.SlideUp('printDialog\:PINFO<P.JOB>:\',{duration:0.25});return false;">Cancel</button></span>\    XML<-1> = '</div> </div>'    XML<-1> = '<pre class="preview">'    XML<-1> = PINFO<P.PREVIEW>    XML<-1> = '</pre> </div> </td> </tr>'    CALL WEB.SEND(XML)    XML = ''    *    *IF LINES.SENT >= entries AND entries # "" THEN EXIT  ENDNEXT PLCALL WEB.SEND(PART2)STOP*SEARCH.JOB: * Search the job for the string*START.POS = 1GOOD.LINE = 0SEARCHBUFFSIZE = 15000LOOP  BUFFER = ""*  PRINT "Searching job # ":JOB:" ":START.POS:",":SEARCHBUFFSIZE  CALL SUB.SB.GET.ENTRY(JOB,START.POS,SEARCHBUFFSIZE,BUFFER,ERR)  IF NOT(ERR) THEN    FOUND.POS = INDEX( BUFFER, searchstring, 1 )    IF FOUND.POS THEN      BACK.UP = FOUND.POS - INT(previewsize/2) - 140      START.POS = START.POS + BACK.UP      CALL SUB.SB.GET.ENTRY(JOB,START.POS,previewsize,L.PREVIEW,ERR)      FOUND.NL = 0      FOR NL = 1 TO 250 UNTIL FOUND.NL      	CH = L.PREVIEW[NL,1]      	IF CH = CHAR(10) OR CH = CHAR(13) THEN      	  L.PREVIEW = L.PREVIEW[NL,previewsize]      	  FOUND.NL = 1      	END      NEXT NL      PINFO<P.PREVIEW> = L.PREVIEW      GOOD.LINE = 1    END ELSE      START.POS = START.POS + SEARCHBUFFSIZE - LEN(searchstring)    END  END ELSE EXITUNTIL ERR OR GOOD.LINE OR BUFFER = "" DO REPEATRETURN04E4FAMVDB.SUBS0c0000BE6SUB.TABLE.LIC.USED0c2SUBROUTINE SUB.TABLE.LIC.USED** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here** Modified by Peter Schellenbach of Zumasys 06-08-15:*  Changed test of ENUM after EXECUTE to test SYSTEM(11) instead.*W$TITLE = "Dashboard Users Logged On"     ;* Title for widget title barW$TYPE = "TABLE"                ;* Filled in by editorW$WIDTH = 2                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*OPEN 'WEB.SESSION' TO F.WEB.SESSION ELSE RETURN*IF WIDGET.USER.DATA(1) # "" THEN DELETE F.WEB.SESSION, WIDGET.USER.DATA(1)WIDGET.USER.DATA(1) = ""*TBL=""EXECUTE 'SELECT WEB.SESSION' RETURNING ENUM CAPTURING ETXT*PJS 06-08-15*IF ENUM[1,3]="404" ELSE RETURNIF SYSTEM(11) = 0 THEN RETURN ; *PJS 06-08-15*LOOP READNEXT ID ELSE ID="\\EOF"UNTIL ID="\\EOF" DO READ REC FROM F.WEB.SESSION,ID THEN   LOCATE "userid" IN REC<1> SETTING IX THEN     UID=REC<2,IX>     LOCATE "LastSessionAccess" IN REC<1> SETTING IX THEN       LSA=REC<2,IX>     END ELSE       LSA=00000*00000     END     LSA.DT=FIELD(LSA,"*",1)     LSA.TM=FIELD(LSA,"*",2)     LGN.DT=REC<3>     LGN.TM=REC<4>     LOCARG=LGN.DT:"*":LGN.TM:"*":LSA     LOCATE LOCARG IN TBL<1> BY "AR" SETTING IX ELSE NULL     TBL=INSERT(TBL,1,IX;LOCARG)     TBL=INSERT(TBL,2,IX;UID)     TBL=INSERT(TBL,3,IX;ID)   END ENDREPEAT** Set up column labelsW$TABLE.COL.LABELS<1,1> = "User Login ID"W$TABLE.COL.LABELS<1,2> = "Session#"W$TABLE.COL.LABELS<1,3> = "Login Date"W$TABLE.COL.LABELS<1,4> = "Login Time"W$TABLE.COL.LABELS<1,5> = "Last Act Date"W$TABLE.COL.LABELS<1,6> = "Last Act Time"** Column justification = left, right, centerW$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "right"W$TABLE.COL.JUST<1,3> = "right"W$TABLE.COL.JUST<1,4> = "right"W$TABLE.COL.JUST<1,5> = "right"W$TABLE.COL.JUST<1,6> = "right"** Table RowsTBL.MAX = DCOUNT(TBL<1>,CHAR(253))FOR ROW = 1 TO TBL.MAX W$TABLE.DATA<ROW,1> = TBL<2,ROW> IF TBL<3,ROW> = SESSION$ID THEN W$TABLE.DATA<ROW,2> = "*":ROW ELSE W$TABLE.DATA<ROW,2> = ROW W$TABLE.DATA<ROW,3> = OCONV(FIELD(TBL<1,ROW>,"*",1),"D2/") W$TABLE.DATA<ROW,4> = OCONV(FIELD(TBL<1,ROW>,"*",2),"MTS") W$TABLE.DATA<ROW,5> = OCONV(FIELD(TBL<1,ROW>,"*",3),"D2/") W$TABLE.DATA<ROW,6> = OCONV(FIELD(TBL<1,ROW>,"*",4),"MTS")NEXT ROW** TotalsW$TABLE.TOTALS<1,3> = TBL.MAXW$TABLE.TOTALS<1,4> = "Consumed"LIC.AVAIL = "Unlimited"IF ASSIGNED(G$LICENSE.COUNT) THEN IF NUM(G$LICENSE.COUNT) THEN   LIC.AVAIL = G$LICENSE.COUNT - TBL.MAX ENDENDW$TABLE.TOTALS<1,5> = LIC.AVAILW$TABLE.TOTALS<1,6> = "Available"*W$INPUT.PROMPT<1> = "Sessions"W$INPUT.TYPE<1> = "SELECT"W$INPUT.DEFAULT<1> = 0W$INPUT.UDPOS<1> = 1W$INPUT.BUTTON<1> = "Log Off"W$INPUT.SELOPTS<1> = "Nobody"W$INPUT.SELVALS<1> = 0FOR ROW = 1 TO TBL.MAX IF SESSION$ID = TBL<3,ROW> ELSE   W$INPUT.SELOPTS<1,-1> = ROW:" ":TBL<2,ROW>   W$INPUT.SELVALS<1,-1> = TBL<3,ROW> ENDNEXT ROW*RETURN002FD3MV.DEMO.MAP0c2    SUBROUTINE MV.DEMO.MAP* @(#) MV.DEMO.MAP Ported to jBASE 17:55:31  08 JUL 2015*  The following variable names were converted*   TABLE* ** Copyright (c) 2010 SB, Inc. All rights reserved.** 6-1-15 ZUMASYS CHANGED MAP ID DELIMITER TO # INSTEAD OF *    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Data Evolution - Demographics"    W$TYPE = "MAP:USASouthWestRegion"    W$WIDTH = 3*    IF G$QUERYMODE THEN RETURN*    TYPE.ID=WIDGET.USER.DATA(1)    BEGIN CASE    CASE TYPE.ID="04"        W$TYPE="MAP:Arizona"        WIDGET.USER.DATA(6)="Arizona"        ACT.FACT=.08    CASE TYPE.ID="06"        W$TYPE="MAP:California"        WIDGET.USER.DATA(6)="California"        ACT.FACT=.08    CASE TYPE.ID="32"        W$TYPE="MAP:Nevada"        WIDGET.USER.DATA(6)="Nevada"        ACT.FACT=.08    CASE TYPE.ID="49"        W$TYPE="MAP:Utah"        WIDGET.USER.DATA(6)="Utah"        ACT.FACT=.08    CASE 1        ACT.FACT=1    END CASE***_____Set Widget Variables_____    IF WIDGET.USER.DATA(4)="" THEN WIDGET.USER.DATA(4)="ALL"    IF WIDGET.USER.DATA(5)="" THEN WIDGET.USER.DATA(5)="Inquiry"**_____Open Files_____    OPEN 'Territories' TO F.TERR ELSE ABORT 201,'Territories'    OPEN 'SalesSum' TO F.SSUM ELSE ABORT 201,'SalesSum'    OPEN 'SalesReps' TO F.SREP ELSE ABORT 201,'SalesReps'**_____Set Period_____    WYR=OCONV(DATE(),"DY")    WMO=OCONV(DATE(),"DM") - 1    IF WMO<1 THEN WYR-=1;WMO=12    CAL.PERIOD=WYR'R%4':WMO'R%2'    IF WIDGET.USER.DATA(3) MATCHES "6N" THEN        END.PERIOD=WIDGET.USER.DATA(3)        WYR=END.PERIOD[1,4]        WMO=END.PERIOD[5,2]    END ELSE        END.PERIOD=CAL.PERIOD        WIDGET.USER.DATA(3)=END.PERIOD    END    WMO-=5    IF WMO<1 THEN WYR-=1; WMO+=12    BEG.PERIOD=WYR'R%4':WMO'R%2'**_____Set Up Input Prompts_____    W$INPUT.PROMPT<1>="Region"    W$INPUT.TYPE<1>="SELECT"    W$INPUT.SELOPTS<1,1>="SouthWest"    W$INPUT.SELVALS<1,1>=""    W$INPUT.SELOPTS<1,2>="California"    W$INPUT.SELVALS<1,2>="06"    W$INPUT.SELOPTS<1,3>="Nevada"    W$INPUT.SELVALS<1,3>="32"    W$INPUT.SELOPTS<1,4>="Utah"    W$INPUT.SELVALS<1,4>="49"    W$INPUT.SELOPTS<1,5>="Arizona"    W$INPUT.SELVALS<1,5>="04"    W$INPUT.UDPOS<1>=1    W$INPUT.DEFAULT<1>=WIDGET.USER.DATA(1)    W$INPUT.PROMPT<3>="Ending Period"    W$INPUT.TYPE<3>="SELECT"    WYR=CAL.PERIOD[1,4]-2    WMO=CAL.PERIOD[5,2]+1    IF WMO>12 THEN WYR+=1; WMO=1    SEL.PERIOD=WYR'R%4':WMO'R%2'    FOR PERIOD=CAL.PERIOD TO SEL.PERIOD STEP -1        WYR=PERIOD[1,4]        WMO=PERIOD[5,2]        IF WMO<1 THEN            WYR-=1            WMO=12            PERIOD=WYR'R%4':WMO'R%2'        END        WMO=OCONV(WMO*30-15,"DMA")[1,3]        WPERIOD=WMO:" ":WYR        W$INPUT.SELOPTS<3,-1>=WPERIOD        W$INPUT.SELVALS<3,-1>=PERIOD    NEXT PERIOD    W$INPUT.UDPOS<3>=3    W$INPUT.DEFAULT<3>=WIDGET.USER.DATA(3)    W$INPUT.PROMPT<4>="Sales Rep"    W$INPUT.TYPE<4>="SELECT"    W$INPUT.SELOPTS<4>="Everyone"    W$INPUT.SELVALS<4>="ALL"    SELECT F.SREP    SALESREPS=""    LOOP        READNEXT SREPINIT ELSE SREPINIT="\\EOF"    UNTIL SREPINIT="\\EOF" DO        READ SREPITEM FROM F.SREP,SREPINIT THEN            LOCATE SREPINIT IN SALESREPS<1> BY "AL" SETTING IX ELSE                SALESREPS=INSERT(SALESREPS,1,IX;SREPINIT)                SALESREPS=INSERT(SALESREPS,2,IX;SREPITEM<1>)            END        END    REPEAT    SREP.MAX=DCOUNT(SALESREPS<1>,CHAR(253))    FOR RVX=1 TO SREP.MAX        W$INPUT.SELOPTS<4,-1>=SALESREPS<2,RVX>        W$INPUT.SELVALS<4,-1>=SALESREPS<1,RVX>    NEXT RVX    W$INPUT.UDPOS<4>=4    W$INPUT.DEFAULT<4>=WIDGET.USER.DATA(4)    W$INPUT.PROMPT<5>="Demographic"    W$INPUT.TYPE<5>="SELECT"    W$INPUT.SELOPTS<5,1>="Inquiries"    W$INPUT.SELVALS<5,1>="Inquiry"    W$INPUT.SELOPTS<5,2>="Demos"    W$INPUT.SELVALS<5,2>="Demo"    W$INPUT.SELOPTS<5,3>="Quotes"    W$INPUT.SELVALS<5,3>="Quote"    W$INPUT.SELOPTS<5,4>="Orders"    W$INPUT.SELVALS<5,4>="Order"    W$INPUT.UDPOS<5>=5    W$INPUT.DEFAULT<5>=WIDGET.USER.DATA(5)    W$INPUT.BUTTON="Apply"**    STATES<1,1>="USASouthWestRegion*04"    STATES<1,2>="USASouthWestRegion*06"    STATES<1,3>="USASouthWestRegion*32"    STATES<1,4>="USASouthWestRegion*49"    COUNTIES=""*    W$TITLE = "Data Evolution - ":WIDGET.USER.DATA(5):" Demographics"    BEGIN CASE    CASE WIDGET.USER.DATA(5)="Inquiry"; AX=6 ;ACTIVE=1000*ACT.FACT    CASE WIDGET.USER.DATA(5)="Demo"   ; AX=7 ;ACTIVE=500*ACT.FACT    CASE WIDGET.USER.DATA(5)="Quote"  ; AX=8 ;ACTIVE=300*ACT.FACT    CASE WIDGET.USER.DATA(5)="Order"  ; AX=9 ;ACTIVE=100*ACT.FACT    END CASE*    TERRITORIES = ""    SELECT F.TERR    LOOP        READNEXT TERR ELSE TERR="\\EOF"    UNTIL TERR="\\EOF" DO        READ TERRITEM FROM F.TERR,TERR THEN            IF WIDGET.USER.DATA(4)="ALL" OR WIDGET.USER.DATA(4)=TERRITEM<2> THEN                LOCATE TERR IN TERRITORIES<1> BY "AR" SETTING IX ELSE                    TERRITORIES=INSERT(TERRITORIES,1,IX;TERR)                    TERRITORIES=INSERT(TERRITORIES,2,IX;TERRITEM<1>)                    TERRITORIES=INSERT(TERRITORIES,3,IX;TERRITEM<2>)                    TERRITORIES=INSERT(TERRITORIES,4,IX;TERRITEM<3>)                    IF TYPE.ID="" THEN                        MAP.IDS=FIELD(TERRITEM<4,1>,"*",1)[1,2]                        BEGIN CASE                        CASE MAP.IDS="Ar"; MAP.IDS="USASouthWestRegion*04"                        CASE MAP.IDS="Ca"; MAP.IDS="USASouthWestRegion*06"                        CASE MAP.IDS="Ne"; MAP.IDS="USASouthWestRegion*32"                        CASE MAP.IDS="Ut"; MAP.IDS="USASouthWestRegion*49"                        END CASE                        TERRITORIES=INSERT(TERRITORIES,5,IX;MAP.IDS)                    END ELSE                        CMAX=DCOUNT(TERRITEM<4>,CHAR(253))                        FOR CX=1 TO CMAX                            IF WIDGET.USER.DATA(6)=FIELD(TERRITEM<4,CX>,"*",1) THEN                                COUNTIES<1,-1>=TERRITEM<4,CX>                            END                        NEXT CX                    END                END            END        END    REPEAT*    TERR.MAX=DCOUNT(TERRITORIES<1>,CHAR(253))    IF WIDGET.USER.DATA(4)="ALL" THEN        SNAME="Everyone"    END ELSE        READV SNAME FROM F.SREP,WIDGET.USER.DATA(4),1 ELSE            SNAME="Unknown"        END    END*    QTYS=""    FOR PERIOD=BEG.PERIOD TO END.PERIOD        WYR=PERIOD[1,4]        WMO=PERIOD[5,2]        IF WMO>12 THEN PERIOD=(WYR+1)'R%4':"01"        FOR TERRX=1 TO TERR.MAX            TERR=TERRITORIES<1,TERRX>            READ SALES FROM F.SSUM,TERR:"*":PERIOD THEN                IF TYPE.ID="" THEN                    Table=TERRITORIES<5,TERRX>                    Table<2>=SUM(SALES<AX>)                    TBL.MAX=DCOUNT(Table<1>,CHAR(253))                    FOR TBLX=1 TO TBL.MAX                        LOCATE Table<1,TBLX> IN STATES<1> SETTING TX THEN                            QTYS<TX>+=Table<2,TBLX>                        END                    NEXT TBLX                END ELSE                    Table=SALES<10>                    Table<2>=SALES<AX>                    TBL.MAX=DCOUNT(Table<1>,CHAR(253))                    FOR TBLX=1 TO TBL.MAX                        LOCATE Table<1,TBLX> IN COUNTIES<1> SETTING TX THEN                            QTYS<TX>+=Table<2,TBLX>                        END                    NEXT TBLX                END            END        NEXT TERRX    NEXT PERIOD*    OPEN 'MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'*    IF TYPE.ID="" THEN        MAX=DCOUNT(STATES,CHAR(253))        FOR X=1 TO MAX            ID=STATES<1,X>            CONVERT '*' TO '#' IN ID    ;*6-1-15*            READ I FROM F.MVDB.MAP.DATA,ID THEN*6-1-15*      W$MAP.IDS<1,-1> = FIELD(ID,'*',2)                W$MAP.IDS<1,-1> = FIELD(ID,'#',2) ;*6-1-15*                W$MAP.VALUES<1,-1> = QTYS<X>+0                W$MAP.VALUE.TOOLTEXT<1,-1> := I<2>:' (':(QTYS<X>+0):')'                W$MAP.VALUE.DD<1,-1> = 1            END        NEXT X    END ELSE        MAX=DCOUNT(COUNTIES,CHAR(253))        FOR X=1 TO MAX            ID=COUNTIES<1,X>            CONVERT '*' TO '#' IN ID    ;*6-1-15*            READ I FROM F.MVDB.MAP.DATA,ID THEN*6-1-15*      W$MAP.IDS<1,-1> = FIELD(ID,'*',2)                W$MAP.IDS<1,-1> = FIELD(ID,'#',2) ;*6-1-15*                W$MAP.VALUES<1,-1> = QTYS<X>+0                W$MAP.VALUE.TOOLTEXT<1,-1> := I<2>:' (':(QTYS<X>+0):')'            END        NEXT X    END*    W$MAP.RANGE.NAME<1,1> = "No Activity"    W$MAP.RANGE.COLOR<1,1> = "#404040"    W$MAP.RANGE.NAME<1,2> = "Light Activity"    W$MAP.RANGE.COLOR<1,2> = "#4682B4"    W$MAP.RANGE.NAME<1,3> = "Moderate Activity"    W$MAP.RANGE.COLOR<1,3> = "#FF8C00"    W$MAP.RANGE.NAME<1,4> = "Heavy Activity"    W$MAP.RANGE.COLOR<1,4> = "#FF0000"*    W$MAP.RANGE.LOW<1,1> = 0    W$MAP.RANGE.HIGH<1,1> = 1    W$MAP.RANGE.LOW<1,2> = 1    W$MAP.RANGE.HIGH<1,2> = ACTIVE    W$MAP.RANGE.LOW<1,3> = ACTIVE    W$MAP.RANGE.HIGH<1,3> = ACTIVE*3    W$MAP.RANGE.LOW<1,4> = ACTIVE*3    W$MAP.RANGE.HIGH<1,4> = "999999"*    W$CHART.OPTIONS<-1> = 'animation="0"'    W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'    W$CHART.OPTIONS<-1> = 'legendShadow="1"'    W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'*    W$LINK.LABEL<1,1> = "California"    W$LINK.UD.VAL<1,1,1> = "06"    W$LINK.UD.POS<1,1,1> = "1"    W$LINK.UD.VAL<1,1,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,1,2> = "2"    W$LINK.UD.VAL<1,1,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,1,3> = "3"    W$LINK.UD.VAL<1,1,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,1,4> = "4"    W$LINK.UD.VAL<1,1,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,1,5> = "5"    W$LINK.UD.VAL<1,1,6> = "California"    W$LINK.UD.POS<1,1,6> = "6"    W$LINK.LOCATION<1,1> = "2"    W$LINK.DD.WIDGET<1,1> = "MV Demo Map"*    W$LINK.LABEL<1,2> = "Nevada"    W$LINK.UD.VAL<1,2,1> = "32"    W$LINK.UD.POS<1,2,1> = "1"    W$LINK.UD.VAL<1,2,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,2,2> = "2"    W$LINK.UD.VAL<1,2,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,2,3> = "3"    W$LINK.UD.VAL<1,2,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,2,4> = "4"    W$LINK.UD.VAL<1,2,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,2,5> = "5"    W$LINK.UD.VAL<1,2,6> = "Nevada"    W$LINK.UD.POS<1,2,6> = "6"    W$LINK.LOCATION<1,2> = "2"    W$LINK.DD.WIDGET<1,2> = "MV Demo Map"*    W$LINK.LABEL<1,3> = "Utah"    W$LINK.UD.VAL<1,3,1> = "49"    W$LINK.UD.POS<1,3,1> = "1"    W$LINK.UD.VAL<1,3,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,3,2> = "2"    W$LINK.UD.VAL<1,3,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,3,3> = "3"    W$LINK.UD.VAL<1,3,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,3,4> = "4"    W$LINK.UD.VAL<1,3,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,3,5> = "5"    W$LINK.UD.VAL<1,3,6> = "Utah"    W$LINK.UD.POS<1,3,6> = "6"    W$LINK.LOCATION<1,3> = "2"    W$LINK.DD.WIDGET<1,3> = "MV Demo Map"*    W$LINK.LABEL<1,4> = "Arizona"    W$LINK.UD.VAL<1,4,1> = "04"    W$LINK.UD.POS<1,4,1> = "1"    W$LINK.UD.VAL<1,4,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,4,2> = "2"    W$LINK.UD.VAL<1,4,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,4,3> = "3"    W$LINK.UD.VAL<1,4,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,4,4> = "4"    W$LINK.UD.VAL<1,4,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,4,5> = "5"    W$LINK.UD.VAL<1,4,6> = "Arizona"    W$LINK.UD.POS<1,4,6> = "6"    W$LINK.LOCATION<1,4> = "2"    W$LINK.DD.WIDGET<1,4> = "MV Demo Map"*    W$LINK.LABEL<1,5> = "SouthWest Region"    W$LINK.UD.VAL<1,5,1> = ""    W$LINK.UD.POS<1,5,1> = "1"    W$LINK.UD.VAL<1,5,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,5,2> = "2"    W$LINK.UD.VAL<1,5,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,5,3> = "3"    W$LINK.UD.VAL<1,5,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,5,4> = "4"    W$LINK.UD.VAL<1,5,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,5,5> = "5"    W$LINK.UD.VAL<1,5,6> = ""    W$LINK.UD.POS<1,5,6> = "6"    W$LINK.LOCATION<1,5> = "2"    W$LINK.DD.WIDGET<1,5> = "MV Demo Map"*    INCLUDE WBPD SOURCE.VIEW.ICON*    RETURN000365SUB.SOURCE.VIEW0c2SUBROUTINE SUB.SOURCE.VIEW** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: View BASIC Source Code**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TEXT"W$TITLE = "Source: ":WIDGET.USER.DATA(1):", ":WIDGET.USER.DATA(2)W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN WIDGET.USER.DATA(1) TO F.FILEVAR THEN  READ REC FROM F.FILEVAR, WIDGET.USER.DATA(2) ELSE REC = '"':WIDGET.USER.DATA(2):'" not on file.'END ELSE REC = '"':WIDGET.USER.DATA(1):'" is not a valid file name.'*W$TEXT.DATA = REC*W$LINK.ICON<1> = "script_edit.png"W$LINK.ICON.TXT<1> = "Edit BASIC Source"W$LINK.URL<1> = "/dbc/MVDB.WEB.ED?ed_file=":WIDGET.USER.DATA(1):"&ed_item=":WIDGET.USER.DATA(2)W$LINK.URL.OPTS<1> = 'target="ED_':WIDGET.USER.DATA(1):"_":WIDGET.USER.DATA(2):'"'W$LINK.LOCATION<1> = "C"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000405SUB.DEMO.DAYS.TO.PAY.PIE0c2SUBROUTINE SUB.DEMO.DAYS.TO.PAY.PIE**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FC2DPIE"W$WIDTH = 3W$TITLE = 'Chart - Days To Pay '*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEYEAR=WIDGET.USER.DATA(1)OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''LOCATE YEAR IN REC<67> SETTING YEAR.POS ELSE YEAR.POS=1YEAR.POS=4-YEAR.POS;   * NEED TO INVERT TO YYYY, YYYY-1, YYYY-2DAYS.POS=YEAR.POS+53W$TITLE:=YEARDAYS.TYPES='0 - 30 Days,31 - 60 Days,61 - 90 Days,Over 90 Days'CONVERT ',' TO CHAR(253) IN DAYS.TYPESPERIOD.PCTS=REC<DAYS.POS>MAX.DAYS.TYPES=DCOUNT(DAYS.TYPES,CHAR(253))FOR DAYS.CNTR = 1 TO MAX.DAYS.TYPES   PCT=PERIOD.PCTS<1,DAYS.CNTR>   W$PIE.LABELS<1,DAYS.CNTR>=DAYS.TYPES<1,DAYS.CNTR>   W$PIE.VALUES<1,DAYS.CNTR>=PCT NEXT DAYS.CNTRW$PIE.CAPTION='Days To Pay By Period For ':YEAR***RETURN00106BSUB.DEMO.AGAUGE0c2SUBROUTINE SUB.DEMO.AGAUGE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Angular Gauge widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Angular Gauge Chart Demo - Sales Volume"W$TYPE = "HLINEARGAUGE"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN  W$TYPE = WIDGET.USER.DATA(1)END ELSE WIDGET.USER.DATA(1) = "HLINEARGAUGE"IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1PALETTE = WIDGET.USER.DATA(2)IF WIDGET.USER.DATA(3) = "" THEN WIDGET.USER.DATA(3) = 725000CHART.VALUE = WIDGET.USER.DATA(3)IF WIDGET.USER.DATA(4) = "" THEN WIDGET.USER.DATA(4) = W$WIDTHW$WIDTH = WIDGET.USER.DATA(4)IF WIDGET.USER.DATA(5) = "" THEN WIDGET.USER.DATA(5) = 1NUM.CHARTS = WIDGET.USER.DATA(5);* Number of single-value meter style charts to produce*BEGIN CASE  CASE W$TYPE = "HLINEARGAUGE"    W$TITLE = "Linear"  CASE W$TYPE = "ANGULARGAUGE"    W$TITLE = "Angular"  CASE W$TYPE = "HLED"    W$TITLE = "Horizontal LED"  CASE W$TYPE = "VLED"    W$TITLE = "Vertical LED"  CASE W$TYPE = "THERMOMETER"    W$TITLE = "Thermometer"  CASE W$TYPE = "CYLINDER"    W$TITLE = "Cylinder"  CASE W$TYPE = "BULB"    W$TITLE = "Bulb"END CASEW$TITLE := " Gauge Chart Demo - Sales Volume"W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = 800000*W$FW.COLOR.RANGE<1,1> = 0W$FW.COLOR.RANGE<2,1> = 300000W$FW.COLOR.RANGE<3,1> = COLOR$RED*W$FW.COLOR.RANGE<1,2> = 300000W$FW.COLOR.RANGE<2,2> = 550000W$FW.COLOR.RANGE<3,2> = COLOR$YELLOW*W$FW.COLOR.RANGE<1,3> = 550000W$FW.COLOR.RANGE<2,3> = 600000W$FW.COLOR.RANGE<3,3> = COLOR$GREEN*W$FW.COLOR.RANGE<1,4> = 600000W$FW.COLOR.RANGE<2,4> = 800000W$FW.COLOR.RANGE<3,4> = COLOR$SILVER*IF WIDGET.USER.DATA(1) # "HLINEARGAUGE" AND WIDGET.USER.DATA(1) # "ANGULARGAUGE" THEN  * Create multiple values to make an array of charts  FOR N = 1 TO NUM.CHARTS    W$FW.METER.VALUE<1,N> = INT(CHART.VALUE*(N/NUM.CHARTS))  NEXT N  W$FW.THERMOMETER.COLOR = COLOR$REDEND ELSE  W$FW.DIAL.VALUES<1> = CHART.VALUE  W$FW.TRENDPOINT.VALUES<1,1> = 675000 ;* Low-limit of trendpoint  W$FW.TRENDPOINT.VALUES<2,1> = 685000 ;* High-limit of trendpoint  W$FW.TRENDPOINT.LABELS<1,1> = "Last Year"  W$FW.TRENDPOINT.OPTS<1,1> = 'color="':COLOR$GREEN:'" useMarker="1"'  *  W$FW.TRENDPOINT.VALUES<1,2> = 475000  W$FW.TRENDPOINT.LABELS<1,2> = "2 yrs ago"  W$FW.TRENDPOINT.OPTS<1,2> = 'color="':COLOR$BLACK:'" useMarker="1"'  *END** Set up a drill-down widget call*W$FW.DD.WIDGET<1,1> = "Drilldown Demo"W$FW.DD.UD.POS<1,1,1> = 1W$FW.DD.UD.VAL<1,1,1> = W$FW.METER.VALUE:W$FW.DIAL.VALUES<1>W$FW.DD.UD.POS<1,1,2> = 2W$FW.DD.UD.VAL<1,1,2> = WIDGET.USER.DATA(1)*W$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""*W$FW.CHART.PALETTE = PALETTE*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* Let it calculate thisW$FW.TICKMARKS<5> = 4 ;* 4 minor tickmarks between the major ones*W$INPUT.PROMPT = "Gauge Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "Linear":@VM:"Angular":@VM:"Horizontal LED":@VM:"Vertical LED":@VM:"Thermometer":@VM:"Cylinder":@VM:"Bulb"W$INPUT.SELVALS = "HLINEARGAUGE":@VM:"ANGULARGAUGE":@VM:"HLED":@VM:"VLED":@VM:"THERMOMETER":@VM:"CYLINDER":@VM:"BULB"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*W$INPUT.PROMPT<2> = "Palette"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*W$INPUT.PROMPT<3> = "Chart Value"W$INPUT.TYPE<3> = "TEXT"W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = CHART.VALUE*W$INPUT.PROMPT<4> = "Widget Width"W$INPUT.TYPE<4> = "SELECT"W$INPUT.SELOPTS<4> = "1 - Narrow":@VM:"2 - Medium":@VM:"3 - Full Width"W$INPUT.SELVALS<4> = "1":@VM:"2":@VM:"3"W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = W$WIDTH**W$INPUT.PROMPT<5> = "# of Charts"*W$INPUT.TYPE<5> = "TEXT"*W$INPUT.UDPOS<5> = 5*W$INPUT.DEFAULT<5> = NUM.CHARTS*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0003E1SUB.DEMO.PYRAMID0c2SUBROUTINE SUB.DEMO.PYRAMID** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Pyramid widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Pyramid Demo - Errors by Reason"W$TYPE = "PYRAMID"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*CATEG = ""CATEG<1> = 19CATEG<2> = 20CATEG<3> = 36CATEG<4> = 44*CATEG.NAMES = ''CATEG.NAMES<1> = "Shipping"CATEG.NAMES<2> = "Bad Choices"CATEG.NAMES<3> = "Errors"CATEG.NAMES<4> = "Bad Material"*W$FW.CAPTION = "Errors by Reason"W$FW.SUBCAPTION = "2008 Shipments"W$CHART.OPTIONS<-1> = "isSliced='1'"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$FW.LABELS<1,N> = CATEG.NAMES<N>  W$FW.VALUES<1,N> = CATEG<N>  *  * Set up a drill-down widget call for each category  *  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = CATEG.NAMES<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = CATEG<N>NEXT N*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0007E7SUB.SHOW.VARS0c2SUBROUTINE SUB.SHOW.VARS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Display global values**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TABLE"W$TITLE = "Variables"*IF G$QUERYMODE = 1 THEN RETURN*W$LINK.LOCATION<1,1> = 2W$LINK.LOCATION<1,2> = 1*W$LINK.LABEL<1,2> = "Do Nothing"W$LINK.UD.POS<1,2> = "5"W$LINK.UD.VAL<1,2> = "XXX"*IF WIDGET.USER.DATA(1) = "1" THEN  W$LINK.LABEL<1,1> = "Show"  W$LINK.UD.POS<1,1> = "1"  W$LINK.UD.VAL<1,1> = "0"  RETURNENDW$LINK.LABEL<1,1> = "Hide"W$LINK.UD.POS<1,1> = "1"W$LINK.UD.VAL<1,1> = "1"*W$TABLE.COL.LABELS<1,1> = "Variable"W$TABLE.COL.LABELS<1,2> = "Type"W$TABLE.COL.LABELS<1,3> = "Value"*W$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "left"W$TABLE.COL.JUST<1,3> = "left"*TYPE = "GLOBAL"ROW = 0NAME = "G$USERID" ; VAL = G$USERID ; GOSUB ADDVARNAME = "G$CURRENT.DB" ; VAL = G$CURRENT.DB ; GOSUB ADDVARNAME = "G$LOGIN.DATE" ; VAL = G$LOGIN.DATE ; GOSUB ADDVARNAME = "G$LOGIN.TIME" ; VAL = G$LOGIN.TIME ; GOSUB ADDVARNAME = "G$WIDGET.NAME" ; VAL = G$WIDGET.NAME ; GOSUB ADDVARNAME = "G$WIDGET.SUB" ; VAL = G$WIDGET.SUB ; GOSUB ADDVARNAME = "G$WIDGET.NAME.LIST" ; VAL = G$WIDGET.NAME.LISTCONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$WIDGET.SUB.LIST" ; VAL = G$WIDGET.SUB.LISTCONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$WIDGET.CALL.TIME" ; VAL = G$WIDGET.CALL.TIMECONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$WIDGET.CALL.DUR" ; VAL = G$WIDGET.CALL.DURCONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$LICENSE.COUNT" ; VAL = G$LICENSE.COUNT; GOSUB ADDVARNAME = "G$EDITION" ; VAL = G$EDITION; GOSUB ADDVARNAME = "G$SYSTEM.ID" ; VAL = G$SYSTEM.ID; GOSUB ADDVAR*TYPE = "CGI"FOR X = 1 TO DCOUNT( CGI$VARS, @AM )  NAME = CGI$VARS<X>  VAL = CGI$VALS<X>  GOSUB ADDVARNEXT X*W$PRINTABLE = 1*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN*ADDVAR: **ROW += 1W$TABLE.DATA<ROW,1> = NAMEW$TABLE.DATA<ROW,2> = TYPEW$TABLE.DATA<ROW,3> = VALRETURN000EFFSUB.ICON.GALLERY0c2SUBROUTINE SUB.ICON.GALLERY** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Icon Gallery*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Icon Gallery"W$TYPE = "HTML"W$WIDTH = 3W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN ;* Dont process, just provide title, type & width*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "UNABLE TO OPEN MVDB.CONTROL"  RETURNENDREAD ICON.LIST FROM F.MVDB.CONTROL, 'ICON.LIST' ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "UNABLE TO READ ICON.LIST FROM MVDB.CONTROL"  RETURNENDCONVERT @AM TO @VM IN ICON.LIST** WIDGET.USER.DATA(1) = User specified search string* WIDGET.USER.DATA(2) = Search string used to make filtered list (previous string)* WIDGET.USER.DATA(3) = Filtered list* WIDGET.USER.DATA(4) = Current page #*ICNT = DCOUNT( ICON.LIST, @VM )IF WIDGET.USER.DATA(2) # WIDGET.USER.DATA(1) THEN  NEW.FILTER = 1END ELSE NEW.FILTER = 0PAGENO = WIDGET.USER.DATA(4)IF NOT(PAGENO MATCHES "1N0N") THEN PAGENO = ""IF PAGENO = "" THEN PAGENO = 1IF NEW.FILTER THEN  WIDGET.USER.DATA(2) = WIDGET.USER.DATA(1)  SEARCH.STR = WIDGET.USER.DATA(1)  SEARCH.STR = OCONV( SEARCH.STR, 'MCU')  FILTERED.LIST = ""  FOR IX = 1 TO ICNT    IF INDEX(OCONV(ICON.LIST<1,IX>,'MCU'),SEARCH.STR,1) THEN      FILTERED.LIST<1,-1> = ICON.LIST<1,IX>    END  NEXT IX  WIDGET.USER.DATA(3) = FILTERED.LIST  WIDGET.USER.DATA(4) = 1 ;* Page 1  ICON.LIST = FILTERED.LIST  ICNT = DCOUNT( ICON.LIST, @VM )  WIDGET.USER.DATA(5) = "" ;* Next/Prev action not processed here.  WIDGET.USER.DATA(4) = 1 ;* Start on page 1 with a new filter  PAGENO = 1END ELSE  IF WIDGET.USER.DATA(2) # "" THEN    ICON.LIST = WIDGET.USER.DATA(3)    ICNT = DCOUNT( ICON.LIST, @VM)   ENDENDIF WIDGET.USER.DATA(5) = "NEXT" THEN  PAGENO += 1END ELSE IF WIDGET.USER.DATA(5) = "PREV" THEN  PAGENO -= 1  IF PAGENO < 1 THEN PAGENO = 1ENDWIDGET.USER.DATA(5) = ""WIDGET.USER.DATA(4) = PAGENOPER.ROW = 7ROWS.PER.PAGE = 10CALL GET.CGI('generatepdf',IS.PDF)IF IS.PDF THEN  * If generating a PDF, place all items on a single  * page, letting the PDF renderer handle pagination.  ROWS.PER.PAGE = (INT((ICNT-1)/PER.PAGE)+1)*PER.PAGEENDPER.PAGE = ROWS.PER.PAGE * PER.ROWMAX.NAME.CHARS = 22MAX.PAGE = INT( (ICNT-1) / PER.PAGE )+ 1IF PAGENO > MAX.PAGE THEN  PAGENO = 1  WIDGET.USER.DATA(4) = PAGENOENDSTART.POS = ((PAGENO-1) * PER.PAGE) ;* This is an offset, not an actual starting positionIF ICON.LIST = "" THEN  W$HTML.DATA = '<table><tr><td>No Results</td></tr></table>'END ELSE  W$HTML.DATA = '<table><tr><td colspan="':PER.ROW:'">Page ':PAGENO:' of ':MAX.PAGE:'</td></tr><tr>'  W$HTML.DATA := ''  IX = 1  LOOP    SHOW.NAME = ICON.LIST<1,IX+START.POS>    IF LEN(SHOW.NAME) > MAX.NAME.CHARS THEN      SHOW.NAME = SHOW.NAME[1,MAX.NAME.CHARS-3]:"..."    END    W$HTML.DATA := '<td align="center" width="115px" style="font-size:10px;"><img title="':ICON.LIST<1,IX+START.POS>:'" class="icon" src="/db/icons/':ICON.LIST<1,IX+START.POS>:'" /><br />':SHOW.NAME:'<br />':IX+START.POS:'</td>'  UNTIL IX = (PER.PAGE) OR (IX+START.POS) >= ICNT DO    IF NOT(MOD(IX,PER.ROW)) THEN      W$HTML.DATA := '</tr><tr>'    END    IX += 1  REPEAT  W$HTML.DATA := '</tr></table>'END*W$HTML.DATA := '<br />'*FOR N = 1 TO 5*  W$HTML.DATA := 'WIDGET.USER.DATA(':N:') = ':WIDGET.USER.DATA(N):'<br />'*NEXT N*W$INPUT.PROMPT<1> = "Search"W$INPUT.TYPE<1> = "TEXT"W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(1)W$INPUT.UDPOS<1> = 1W$INPUT.BUTTON = "Search"*IF PAGENO > 1 THEN  W$LINK.LABEL<1,-1> = "Prev Page"  W$LINK.LOCATION<1,-1> = 23  W$LINK.UD.POS<1,-1> = 5  W$LINK.UD.VAL<1,-1> = "PREV"END*IF PAGENO < MAX.PAGE THEN  W$LINK.LABEL<1,-1> = "Next Page"  W$LINK.LOCATION<1,-1> = 14  W$LINK.UD.POS<1,-1> = 5  W$LINK.UD.VAL<1,-1> = "NEXT"END*RETURN000436PURGE.NON.PLATFORM.WIDGETS0c2*** 6-22-15 TPARKER ** Purge all platform specific widgets not for this platform*** run by the post install command process*OPEN '','MVDB.CONTROL' TO FILE ELSE STOPREAD PLATFORM FROM FILE, 'PLATFORM' ELSE PLATFORM=''IF PLATFORM = '' THEN STOP*PJS 07-13-15 - comment out this line: IF LEN(PLATFORM) = 2 THEN PLATFORM=PLATFORM:' '*OPEN '','MVDB.WIDGETS' TO FI.MVDB.WIDGETS ELSE STOP*SELECT FI.MVDB.WIDGETS*LOOP   READNEXT ID ELSE ID='DONE'UNTIL ID = 'DONE' DO   WIDGET.PLATFORM=FIELD(ID,' ',1)   DELETE.IT=0   BEGIN CASE      CASE PLATFORM = WIDGET.PLATFORM; NULL      CASE WIDGET.PLATFORM = 'D3'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'UV'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'UD'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'QM'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'OI'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'RL'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'JB'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'D3'; DELETE.IT=1      CASE 1; NULL   END CASE   IF DELETE.IT THEN DELETE FI.MVDB.WIDGETS, IDREPEATEND000C95SUB.DEMO.SPARK0c2SUBROUTINE SUB.DEMO.SPARK** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Spark widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Spark Chart Demo - My Stock Price"W$TYPE = "SPARKLINE"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN  W$TYPE = WIDGET.USER.DATA(1)END ELSE WIDGET.USER.DATA(1) = "SPARKLINE"IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1PALETTE = WIDGET.USER.DATA(2)*VALUES = ""W$FW.VALUES<1,-1> = "2726"W$FW.VALUES<1,-1> = "3788"W$FW.VALUES<1,-1> = "3888"W$FW.VALUES<1,-1> = "2290"W$FW.VALUES<1,-1> = "3902"W$FW.VALUES<1,-1> = "2331"W$FW.VALUES<1,-1> = "3085"W$FW.VALUES<1,-1> = "2701"W$FW.VALUES<1,-1> = "3320"W$FW.VALUES<1,-1> = "2193"W$FW.VALUES<1,-1> = "3451"W$FW.VALUES<1,-1> = "2484"W$FW.VALUES<1,-1> = "3932"W$FW.VALUES<1,-1> = "3704"W$FW.VALUES<1,-1> = "2781"W$FW.VALUES<1,-1> = "2295"W$FW.VALUES<1,-1> = "2473"W$FW.VALUES<1,-1> = "3763"W$FW.VALUES<1,-1> = "2975"W$FW.VALUES<1,-1> = "2235"W$FW.VALUES<1,-1> = "3435"W$FW.VALUES<1,-1> = "2760"W$FW.VALUES<1,-1> = "2797"W$FW.VALUES<1,-1> = "3236"W$FW.VALUES<1,-1> = "2256"W$FW.VALUES<1,-1> = "2415"W$FW.VALUES<1,-1> = "2493"W$FW.VALUES<1,-1> = "3582"W$FW.VALUES<1,-1> = "2345"W$FW.VALUES<1,-1> = "3764"W$FW.VALUES<1,-1> = "2699"W$FW.VALUES<1,-1> = "2948"W$FW.VALUES<1,-1> = "3663"W$FW.VALUES<1,-1> = "3558"W$FW.VALUES<1,-1> = "3219"W$FW.VALUES<1,-1> = "2759"W$FW.VALUES<1,-1> = "2694"W$FW.VALUES<1,-1> = "3235"W$FW.VALUES<1,-1> = "2263"W$FW.VALUES<1,-1> = "2597"W$FW.VALUES<1,-1> = "2528"W$FW.VALUES<1,-1> = "2673"W$FW.VALUES<1,-1> = "2347"W$FW.VALUES<1,-1> = "2055"W$FW.VALUES<1,-1> = "3458"W$FW.VALUES<1,-1> = "2916"W$FW.VALUES<1,-1> = "3497"W$FW.VALUES<1,-1> = "2457"W$FW.VALUES<1,-1> = "2070"W$FW.VALUES<1,-1> = "3261"*IF WIDGET.USER.DATA(1) = "SPARKWINLOSS" THEN  VAL.LIST = W$FW.VALUES  FOR N = 2 TO DCOUNT( W$FW.VALUES<1>, @VM )    VAL = INT(W$FW.VALUES<1,N>)    IF VAL > INT(VAL.LIST<1,N-1>) THEN      VAL = "W" ;* Win    END ELSE IF VAL = INT(VAL.LIST<1,N-1>) THEN      VAL = "D" ;* Draw    END ELSE VAL = "L"    W$FW.VALUES<1,N> = VAL  NEXT N  W$FW.VALUES<1,1> = "W" ;* First month was a win.END ELSE  FOR N = 1 TO DCOUNT( W$FW.VALUES<1>, @VM )    W$FW.VALUES<1,N> = OCONV(W$FW.VALUES<1,N>,"MD2")  NEXT NEND*** Set up a drill-down widget call*W$FW.DD.WIDGET<1,1> = "Drilldown Demo"W$FW.DD.UD.POS<1,1> = 1W$FW.DD.UD.VAL<1,1> = W$FW.VALUES<1,1>*W$FW.SPARK.TREND.BEG<1,1> = W$FW.VALUES<1,1>W$FW.SPARK.TREND.END<1,1> = W$FW.VALUES<1,DCOUNT(W$FW.VALUES<1>,@VM)>*W$FW.CAPTION = "Cisco"W$FW.SUBCAPTION = "12 Months"W$FW.CHART.PALETTE = PALETTE*W$INPUT.PROMPT = "Spark Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "Column":@VM:"Line":@VM:"Win/Loss"W$INPUT.SELVALS = "SPARKCOLUMN":@VM:"SPARKLINE":@VM:"SPARKWINLOSS"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*W$INPUT.PROMPT<2> = "Palette"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0006D0SUB.DEMO.PIE0c2SUBROUTINE SUB.DEMO.PIE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: PIE Chart Demonstration widget**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Chart - Fuel Sales by Type"W$TYPE = "FC2DPIE"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "3D" THEN  W$TYPE = "FC3DPIE"END*SALES = ""SALES<1> = "28452536"SALES<2> = "31208425"SALES<3> = "30245519"SALES<4> = "40425111"SALES<5> = "36515188"SALES<6> = "39144100"SALES<7> = "41655215"SALES<8> = "36615152"SALES<9> = "43944161"SALES<10> = "42251594"SALES<11> = "48833151"SALES<12> = "50122415"*TOT.SALES = SUM(SALES)CATEG = ""CATEG<1> = INT(TOT.SALES*.4)CATEG<2> = INT(TOT.SALES*.2)CATEG<3> = INT(TOT.SALES*.3)CATEG<4> = INT(TOT.SALES*.1)*CATEG.NAMES = ''CATEG.NAMES<1> = "Regular"CATEG.NAMES<2> = "Mid-Grade"CATEG.NAMES<3> = "Premium"CATEG.NAMES<4> = "Ethanol"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$PIE.LABELS<1,N> = CATEG.NAMES<N>  W$PIE.VALUES<1,N> = CATEG<N>  *  * Set up a drill-down widget call for each category  *  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = CATEG.NAMES<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = CATEG<N>NEXT NIF WIDGET.USER.DATA(1) # "3D" THEN  W$PIE.VALUE.OPTS<1,3> = 'isSliced="1"'END*IF WIDGET.USER.DATA(1) = "3D" THEN*  W$LINK.LABEL<1> = "2D"  W$LINK.ICON.TXT<1> = "2D Chart"  W$LINK.UD.VAL<1> = "2D"  W$PIE.CAPTION = "3D Chart"END ELSE*  W$LINK.LABEL<1> = "3D"  W$LINK.ICON.TXT<1> = "3D Chart"  W$LINK.UD.VAL<1> = "3D"  W$PIE.CAPTION = "2D Chart"ENDW$LINK.ICON<1> = "chart_pie.png"W$LINK.UD.POS<1> = "1"W$LINK.LOCATION<1> = "C"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN00045DSUB.DEMO.FUNNEL0c2SUBROUTINE SUB.DEMO.FUNNEL** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Funnel widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Funnel Demo - Website Conversion Ratio"W$TYPE = "FUNNEL"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*CATEG = ""CATEG<1> = 385634CATEG<2> = 175631CATEG<3> = 84564CATEG<4> = 35654CATEG<5> = 12342*CATEG.NAMES = ''CATEG.NAMES<1> = "Website Visits"CATEG.NAMES<2> = "Downloads"CATEG.NAMES<3> = "Interested to buy"CATEG.NAMES<4> = "Contract finalized"CATEG.NAMES<5> = "Purchased"*W$FW.CAPTION = "Conversion Ratio"W$FW.SUBCAPTION = "May 2007"W$CHART.OPTIONS<-1> = "isSliced='1'"W$CHART.OPTIONS<-1> = "showPercentValues='1'"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$FW.LABELS<1,N> = CATEG.NAMES<N>  W$FW.VALUES<1,N> = CATEG<N>  *  * Set up a drill-down widget call for each category  *  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = CATEG.NAMES<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = CATEG<N>NEXT N*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0005B8SUB.PORTAL.AP.REPORTS0c2SUBROUTINE SUB.PORTAL.AP.REPORTS**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = 'AP Reporting'W$TYPE = "FC2DPIE"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.DASHBOARD.BALANCES ELSE   W$TYPE='TEXT'   W$TEXT='UNABLE TO OPEN DICT DASHBOARD.BALANCES'   RETURN ENDREAD AP.AMOUNTS FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AP.STATS' ELSE AP.AMOUNTS=''BEGIN CASE   CASE 1      W$TITLE = "Chart - AP Balances by Days Due"; CALL PORTAL.SHOW.LAST.UPDATED('AP')      AMTS=AP.AMOUNTS      W$PIE.CAPTION='Total AP Balance of '**   CASE WIDGET.USER.DATA(1) = 'AR'**      W$TITLE = "Chart - AR Balances by Days Due"**      AMTS=AR.AMOUNTS**      W$PIE.CARTION='Total AR Balance of 'END CASE*TOT.AMT=SUM(AMTS)W$PIE.CAPTION:=OCONV(TOT.AMT,'MD02,$')*CATEGORIES='Current'CATEGORIES<2>='1 - 30 Days'CATEGORIES<3>='31 - 60 Days'CATEGORIES<4>='61 - 90 Days'CATEGORIES<5>='Over 90 Days'*CATEGORY.AMTS=AMTS**W$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='showPercentageValues="0"'W$CHART.OPTIONS<-1>='showPercentageInLabel="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="0"'W$CHART.OPTIONS<-1>='thousandSeparator=","'W$CHART.OPTIONS<-1>='pieradius="150"'FOR N = 1 TO 5  W$PIE.LABELS<1,N> = CATEGORIES<N>  W$PIE.VALUES<1,N> = INT(CATEGORY.AMTS<N>/100 + .5)NEXT N**RETURNEND000101WEB.FORMS0c2SUBROUTINE WEB.FORMS** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Untitled HTML"W$TYPE = "HTML"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$HTML.DATA = '<h2>HTML Widget Content</h2>'RETURN000278CHECK.PASSWORD0c2* 07-17-15 PETER SCHELLENBACH OF ZUMASYS - MODIFIED FOR UV*          CHANGE OCONV(X,'U3060') TO DIGEST('MD5'...)**#MAKE# RL $OPTIONS D3OPEN 'MVDB.USERS' TO FILE ELSE STOPSELECT FILELOOP   READNEXT ID ELSE ID ='DONE'UNTIL ID = 'DONE' DO   READ REC FROM FILE, ID ELSE REC=''   IF DIGEST('MD5',REC<1>,1,ENCR.REC) = 0 THEN     ENCR.REC = OCONV(ENCR.REC,'MX0C')   END ELSE     ENCR.REC = 'MD5 digest failed for ':REC<1>   END   IF DIGEST('MD5',ID,1,ENCR.ID) = 0 THEN     ENCR.ID = OCONV(ENCRD.ID,'MX0C')   END ELSE     ENCR.ID = 'MD5 digest failed for ':ID   END   CRT ID,ENCR.REC,ENCR.IDREPEATEND0010F6SUB.DEMO.REV.GP.SALES.CHART0c2SUBROUTINE SUB.DEMO.REV.GP.SALES.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEEQU ANNUAL.OR.MONTHLY TO WIDGET.USER.DATA(2)IF ANNUAL.OR.MONTHLY = '' THEN ANNUAL.OR.MONTHLY='By Year'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''YEARS=REC<67>MAX.YEARS=DCOUNT(YEARS,CHAR(253))REVENUE.OR.GP=WIDGET.USER.DATA(1)IF INDEX(ANNUAL.OR.MONTHLY,'By Month',1) THEN GOTO DO.MONTHLY*BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE='YTD Sales'      W$BAR.YMEMO = "YTD Sales"      SALES.AMTS=REC<68>   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE='YTD Gross Profit'      W$BAR.YMEMO = "YTD Gross Profit"      SALES.AMTS=REC<69>   CASE 1      REC = ''      SALES.AMTS = ''END CASE***MAX.SALES.AMT=0N=0FIRST.YEAR=''CURRENT.YEAR=''MO.NO=DCOUNT(REC<68,3>,CHAR(252))FOR NN = 1 TO MAX.YEARS   SALES.AMT=0   FOR NNN = 1 TO MO.NO      SALES.AMT+=SALES.AMTS<1,NN,NNN>    NEXT NNN   SALES.AMT=OCONV(SALES.AMT,'MD02')  IF SALES.AMT THEN     N+=1     IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT     W$BAR.VALUES<1,N> = SALES.AMT     YEAR=YEARS<1,NN>     IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR     CURRENT.YEAR=YEAR     W$BAR.XLABELS<1,N> = YEAR     W$FW.DD.WIDGET<1,N> = "DEMO ANNUAL SALES BY REP"     W$FW.DD.UD.POS<1,N,1> = 1     W$FW.DD.UD.VAL<1,N,1> = REVENUE.OR.GP; * REVENUE OR GP     W$FW.DD.UD.POS<1,N,2> = 2     W$FW.DD.UD.VAL<1,N,2> = YEAR   ENDNEXT NNW$BAR.XMEMO = "Year (drilldown for ":W$BAR.YMEMO:" by Rep)"W$BAR.CAPTION=W$BAR.YMEMO:' From ':FIRST.YEAR:' to ':CURRENT.YEAR* ROUND MAX AMOUNT UP TO THE NEXT 250000MAX.SALES.AMT+=250000MAX.SALES.AMT=INT(MAX.SALES.AMT/250000) * 250000W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'*W$CHART.OPTIONS<-1>='yAxisMaxValue="1500000"'*DO.PROMPT:*W$INPUT.PROMPT<1> = "Display By"W$INPUT.TYPE<1> = "SELECT"W$INPUT.UDPOS<1> = 2OPTIONS='By Year':CHAR(253):'By Month Using Column Chart':CHAR(253):'By Month Using Line Chart'W$INPUT.SELOPTS<1>=OPTIONSW$INPUT.SELVALS<1>=OPTIONSLOCATE ANNUAL.OR.MONTHLY IN OPTIONS<1> SETTING DEFAULT.POS ELSE DEFAULT.POS=1W$INPUT.DEFAULT<1>=ANNUAL.OR.MONTHLYW$INPUT.BUTTON<1> = "GO"*RETURN*DO.MONTHLY:*IF INDEX(ANNUAL.OR.MONTHLY,'Column',1) THEN   W$TYPE='FCMSCOLUMN2D' END ELSE   W$TYPE='FCMSLINE' ENDW$WIDTH = 3W$CHART.OPTIONS<-1>='showValues="0"'BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE='Monthly Sales'      W$BAR.YMEMO = "Monthly Sales"      W$BAR.CAPTION='Monthly Sales by Year'      SALES.ATT=68   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE='Monthly Gross Profit'      W$BAR.YMEMO = "Monthly Gross Profit"      W$BAR.CAPTION='Monthly Gross Profit by Year'      SALES.ATT=69   CASE 1      SALES.ATT=68      REC=''END CASETODAY=OCONV(DATE(),'D4-')MM=TODAY[1,2]+0YYYY=TODAY[7,4]IF MM = 1 THEN YYYY=YYYY-1YYYY.SELECT=''YEARS=''W$BAR.VALUES=''FOR N = 1 TO 12  W$BAR.XLABELS<1,N> = OCONV(N*30-15,'DMA')[1,3]NEXT NIF MAX.YEARS > 5 THEN MAX.DISPLAY.YEARS=5 ELSE MAX.DISPLAY.YEARS=MAX.YEARSMS.VAL.CNTR=0FOR I = 1 TO MAX.DISPLAY.YEARS   YEAR=YYYY-MAX.DISPLAY.YEARS+I   YEARS<-1>=YEAR   W$BAR.LABELS<I>=YEAR   YYYY.SELECT:=' "':YEAR:'"'   SALES.AMTS=REC<SALES.ATT>   FOR MO.NO = 1 TO 12      MS.VAL.CNTR+=1      SALE.AMT=SALES.AMTS<1,I,MO.NO>      W$BAR.VALUES<I,MO.NO>=OCONV(SALE.AMT,'MD02')      W$FW.DD.WIDGET<1,MS.VAL.CNTR> = "DEMO SINGLE MONTH SALES BY REP"      W$FW.DD.UD.POS<1,MS.VAL.CNTR,1>=1      W$FW.DD.UD.VAL<1,MS.VAL.CNTR,1>=REVENUE.OR.GP      W$FW.DD.UD.POS<1,MS.VAL.CNTR,2>=2      W$FW.DD.UD.VAL<1,MS.VAL.CNTR,2> = 'MS.SERIES'      W$FW.DD.UD.POS<1,MS.VAL.CNTR,3> = 3      W$FW.DD.UD.VAL<1,MS.VAL.CNTR,3>='MS.LABEL'    NEXT MO.NO NEXT I**WRITE W$BAR.VALUES ON FILE.CONTROL, 'BAR.VALUES'W$BAR.XMEMO='Month (drilldown for month by Rep)'GOSUB DO.PROMPTRETURNEND000509SUB.RSS.FEEDS0c2SUBROUTINE SUB.RSS.FEEDS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Display a list of available RSS feeds**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD WWW.INCLUDE*W$TITLE = "RSS Feeds"W$TYPE = "TABLE"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "Cannot open RSS.FEEDS"  RETURNENDOPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "Cannot open MVDB.CONTROL"  RETURNEND*W$TABLE.COL.LABELS<1,1> = "ID"W$TABLE.COL.LABELS<1,2> = "Name / Description"W$TABLE.COL.LABELS<1,3> = "Subscribe"*EXECUTE "SSELECT RSS.FEEDS BY NAME" CAPTURING JUNKROW = 1LOOP  READNEXT FID ELSE EXIT  READ FEED.REC FROM F.RSS.FEEDS, FID ELSE CONTINUE  FEED.NAME = FEED.REC<1>  CALL RSS.XML.ENCODE(FEED.NAME,"")  FEED.DESC = FEED.REC<3>  FEED.URL = "http://":CGI$SERVER.NAME:CGI$PATH:'/RSS.MAIN?feed=':FID  W$TABLE.DATA<ROW,1> = FID  W$TABLE.DATA<ROW,2> = '<b>':FEED.NAME:'</b><br />':FEED.DESC  W$TABLE.DATA<ROW,3> = \<a href="\:FEED.URL:\">Standard Feed</a>\  FOR N = 1 TO DCOUNT( FEED.REC<6>, @VM )    W$TABLE.DATA<ROW,3> := '<br /><a href="':FEED.URL:'&':FEED.REC<7,N>:'">':FEED.REC<6,N>:'</a>'  NEXT N  ROW += 1REPEATRETURN00008BCALL.CREATE.WEBSERVICE.PASSWORD0c2CALL CREATE.WEBSERVICE.PASSWORD(PASSWORD,PASSTIME)CRT 'PASSTIME=':PASSTIMECRT 'PASSWORD=':PASSWORDEND000988SUB.CODE.TEMPLATES0c2SUBROUTINE SUB.CODE.TEMPLATES** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: * Description: List code templates*INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGET.TYPES*W$TITLE = "Widget code templates"W$TYPE = "HTML"W$WIDTH = 3W$PRINTABLE = 1*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN ;* Hidden mode  W$LINK.LABEL<1,1> = "Show Widget"  W$LINK.LOCATION<1,1> = "C"  W$LINK.UD.POS<1,1> = 1  W$LINK.UD.VAL<1,1> = ""  W$LINK.ICON<1,1> = "application_view_detail.png"  W$LINK.ICON.TXT<1,1> = "Show Widget"  W$TITLE := ' (Hidden)'  W$PRINTABLE = 0  RETURNENDOPEN '','MVDB.SUB.TEMPLATES' TO F.MVDB.SUB.TEMPLATES ELSE  W$HTML.DATA = '<h2>MVDB.SUB.TEMPLATES file cannot be opened.</h2>'  RETURNENDOPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE  W$HTML.DATA = '<h2>MVDB.WIDGET.TYPES file cannot be opened.</h2>'  RETURNEND*EXECUTE 'SSELECT MVDB.WIDGET.TYPES BY GROUP BY HANDLER WITH INACTIVE # "1"' CAPTURING JUNKW$HTML.DATA = '<table width="100%"><thead><tr><th>Widget Type/Template</th><th>Description</th><th>Lines</th><th>Use Template</th><th>Edit</th></tr><tbody>'LOOP  READNEXT ID ELSE EXIT  READ TREC FROM F.MVDB.SUB.TEMPLATES, ID ELSE TREC = ""  MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, ID ELSE MAT WIDGET.TYPES = ""  CLASS.NAME = FIELD(WT$ICON,'.',1)  CONVERT "_" TO "-" IN CLASS.NAME  W$HTML.DATA := '<tr><td>':ID:'</td>'  W$HTML.DATA := '<td><img height="20" width="20" src="/db/icons/':WT$ICON:'" />':WT$DESC:'</td>'  LINES = DCOUNT(TREC,@AM)  IF LINES = 0 THEN LINES = '&nbsp;'  W$HTML.DATA := '<td align="right">':LINES:'</td>'  IF FIELD(TREC,' ',1) = "USE" THEN    USE.TEMPLATE = FIELD( TREC, ' ', 2 )    USE.TEMPLATE = '<a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUB.TEMPLATES&ed_item=':USE.TEMPLATE:'" target="MVDB.SUB.TEMPLATES_':USE.TEMPLATE:'">':USE.TEMPLATE:'</a>'  END ELSE USE.TEMPLATE = '&nbsp;'  W$HTML.DATA := '<td>':USE.TEMPLATE:'</td>'  IF TREC = "" THEN ACTION = "Add" ELSE ACTION = "Edit"  W$HTML.DATA := '<td><a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUB.TEMPLATES&ed_item=':ID:'" target="MVDB.SUB.TEMPLATES_':ID:'">':ACTION:'</a></td>'  W$HTML.DATA := '</tr>'REPEATW$HTML.DATA := '</tbody></table>'*W$LINK.LABEL<1,1> = "Hide Widget"W$LINK.LOCATION<1,1> = "C"W$LINK.UD.POS<1,1> = 1W$LINK.UD.VAL<1,1> = "1"W$LINK.ICON<1,1> = "application.png"W$LINK.ICON.TXT<1,1> = "Hide Widget"*RETURN000D3BSUB.PORTAL.MARGINS0c2SUBROUTINE SUB.PORTAL.MARGINS** DEFINE PARAMETERS FOR PORTAL SALES REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOPDIM SETUP.PARAMS(25)*W$TITLE = "Portal Year to Year Margins"; CALL PORTAL.SHOW.LAST.UPDATED('SALES')W$TYPE = "HTML"W$WIDTH = 2D3=1*IF G$QUERYMODE THEN RETURN**OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE    ERROR.MSG='UNABLE TO OPEN MVDB.CONTROL'   GOTO DISPLAY.ERROR ENDOPEN '','DASHBOARD.CLOSING.STATS' TO FI.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR END*READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'END CASE**W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'*OTODAY=OCONV(DATE(),'D4-')*YEAR.TO.YEAR.MARGIN.PERCENTS:*W$TYPE='FCCOLUMN3D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYY BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'YEAR.TO.YEAR.REPORT'YEAR.TOTALS=''YEAR.GROSS.PROFITS=''YEARS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))YEAR.CNTR=0FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YEAR=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         IF AMOUNT OR GROSS.PROFIT THEN            YEAR.CNTR+=1            YEARS<YEAR.CNTR>=YEAR            AMOUNT=ICONV(AMOUNT,'MD2')            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            YEAR.TOTALS<YEAR.CNTR>=AMOUNT            YEAR.GROSS.PROFITS<YEAR.CNTR>=GROSS.PROFIT          END       END    ENDNEXT ROW.NOYEAR.TOTALS<YEAR.CNTR+1>=SUM(YEAR.TOTALS)YEAR.GROSS.PROFITS<YEAR.CNTR+1>=SUM(YEAR.GROSS.PROFITS)YEARS<YEAR.CNTR+1>='Average'*W$BAR.CAPTION = 'Year by Year Margin Percents'W$BAR.XMEMO = "Year"W$BAR.YMEMO = 'Margin Percents'*MAX.YEARS=DCOUNT(YEARS,CHAR(254))FOR YEAR.NO = 1 TO MAX.YEARS   YEAR.TOTAL=YEAR.TOTALS<YEAR.NO>   YEAR.GROSS.PROFIT=YEAR.GROSS.PROFITS<YEAR.NO>   MARGIN=INT(YEAR.GROSS.PROFIT * 1000 / YEAR.TOTAL + .5)   W$BAR.VALUES<1,YEAR.NO>=OCONV(MARGIN+0,'MD1')   W$BAR.XLABELS<1,YEAR.NO>=YEARS<YEAR.NO> NEXT YEAR.NORETURN*DISPLAY.ERROR:*W$HTML.DATA='<h3>':ERROR.MSG:'</h3>'RETURN**RETURNEND000597REFRESH.PORTAL.DATES0c2OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO DICT.FI ELSE STOP 201,'DICT DASHBOARD.CLOSING.STATS'READ LAST.AR.DATE FROM DICT.FI, 'LAST.AR.REFRESH' ELSE STOP 201,'LAST.AR.REFRESH'READ LAST.AP.DATE FROM DICT.FI, 'LAST.AP.REFRESH' ELSE STOP 201,'LAST.AP.REFRESH'READ LAST.SALES.DATE FROM DICT.FI, 'LAST.SALES.REFRESH' ELSE STOP 201,'LAST.SALES.REFRESH'*FI='AR'; LAST.DATE=LAST.AR.DATE<1>; ATTS=20:@AM:8; GOSUB UPDATE.DATESWRITE DATE():@AM:OCONV(DATE(),'D2-') ON DICT.FI, 'LAST.AR.REFRESH'FI='AP'; LAST.DATE=LAST.AP.DATE<1>; ATTS=20:@AM:8; GOSUB UPDATE.DATESWRITE DATE():@AM:OCONV(DATE(),'D2-') ON DICT.FI, 'LAST.AP.REFRESH'FI='SALES'; LAST.DATE=LAST.SALES.DATE<1>; ATTS=1; GOSUB UPDATE.DATESWRITE DATE():@AM:OCONV(DATE(),'D2-') ON DICT.FI, 'LAST.SALES.REFRESH'STOP*UPDATE.DATES:*MAX.ATTS=DCOUNT(ATTS,@AM)DIFF.DAYS=DATE()-LAST.DATEOPEN '',FI TO FI.FI ELSE STOP 201,FIEXECUTE "SELECT ":FILOOP   READNEXT ID ELSE ID = 'DONE'UNTIL ID = 'DONE' DO   READ REC FROM FI.FI, ID ELSE REC=''   FOR I = 1 TO MAX.ATTS      ATT.NO=ATTS<I>      IF ATT.NO <> '' THEN         DATES=REC<ATT.NO>         MAX.DATES=DCOUNT(DATES,@VM)         FOR II = 1 TO MAX.DATES            THIS.DATE=DATES<1,II>            IF THIS.DATE <> '' THEN               THIS.DATE+=DIFF.DAYS               REC<ATT.NO,II>=THIS.DATE             END          NEXT II       END    NEXT I   WRITE REC ON FI.FI, IDREPEATRETURN00013DSUB.LISTPEQS0c2SUBROUTINE SUB.LISTPEQS** Copyright (c) 2010 SB, Inc. All rights reserved.*INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "HTML"W$TITLE = "Print Queue"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$TEXT.DATA = '<iframe src="/dbc/SBBP.SB.LISTPEQS" width="100%" scrolling="auto" height="500"></iframe>'RETURN000812SUB.DEMO.BULLET0c2SUBROUTINE SUB.DEMO.BULLET** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Bullet widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Bullet Chart Demo - Sales Volume"W$TYPE = "VBULLET"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN  W$TYPE = WIDGET.USER.DATA(1)END ELSE WIDGET.USER.DATA(1) = "VBULLET"IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1PALETTE = WIDGET.USER.DATA(2)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = 800000*W$FW.COLOR.RANGE<1,1> = 0W$FW.COLOR.RANGE<2,1> = 400000W$FW.COLOR.RANGE<3,1> = COLOR$RED*W$FW.COLOR.RANGE<1,2> = 400000W$FW.COLOR.RANGE<2,2> = 650000W$FW.COLOR.RANGE<3,2> = "YELLOW"*W$FW.COLOR.RANGE<1,3> = 650000W$FW.COLOR.RANGE<2,3> = 800000W$FW.COLOR.RANGE<3,3> = "GREEN"*W$FW.METER.VALUE = 725000W$FW.METER.TARGET = 775000*W$FW.CAPTION = "July Sales"W$FW.SUBCAPTION = "Billings"*W$FW.CHART.PALETTE = PALETTE*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* Let it calculate thisW$FW.TICKMARKS<5> = 4 ;* 4 minor tickmarks between the major ones**W$CHART.OPTIONS = "paletteThemeColor='#a2287a'"*W$FW.BC.PLOT.COLOR = COLOR$BLUEW$FW.BC.TARGET.COLOR = COLOR$WHITE*W$FW.DD.WIDGET<1,1> = "Drilldown Demo"W$FW.DD.UD.POS<1,1,1> = 1W$FW.DD.UD.VAL<1,1,1> = W$FW.METER.VALUEW$FW.DD.UD.POS<1,1,2> = 2W$FW.DD.UD.VAL<1,1,2> = WIDGET.USER.DATA(1)*W$INPUT.PROMPT = "Bullet Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "Horizontal":@VM:"Vertical"W$INPUT.SELVALS = "HBULLET":@VM:"VBULLET"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*W$INPUT.PROMPT<2> = "Palette"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN002FEFSUB.PORTAL.AP.REPORT.SETUP0c2SUBROUTINE SUB.PORTAL.AP.REPORT.SETUP** DEFINE PARAMETERS FOR PORTAL AP REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOP*W$TITLE = "Portal AP Report Setup"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*EQUATE ACCOUNT TO WIDGET.USER.DATA(1)EQUATE REPORT.FILE TO WIDGET.USER.DATA(2)EQUATE DUE.DATE.DICT TO WIDGET.USER.DATA(3)EQUATE DATE.PAID.DICT TO WIDGET.USER.DATA(4)EQUATE INVOICE.AMT.DICT TO WIDGET.USER.DATA(5)EQUATE BALANCE.DICT TO WIDGET.USER.DATA(6)EQUATE DUE.DATE.AMC TO WIDGET.USER.DATA(8)EQUATE DATE.PAID.AMC TO WIDGET.USER.DATA(9)EQUATE INVOICE.AMT.AMC TO WIDGET.USER.DATA(10)EQUATE INVOICE.AMT.CONV TO WIDGET.USER.DATA(11)EQUATE INVOICE.AMT.COOR TO WIDGET.USER.DATA(12)EQUATE BALANCE.AMC TO WIDGET.USER.DATA(13)EQUATE BALANCE.CONV TO WIDGET.USER.DATA(14)EQUATE BALANCE.COOR TO WIDGET.USER.DATA(15)OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE   MESSAGE='No Platform Type Defined'   GOTO MESSAGE.DISPLAY ENDFIRST.TIME=0IF G$SUBMITTED <> '1' THEN   MATREAD WIDGET.USER.DATA FROM FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ELSE      MAT WIDGET.USER.DATA = ''      FIRST.TIME=1    END   IF NOT(FIRST.TIME) THEN      GOSUB VALIDATE.PREVIOUS.INPUTS    END END ELSE   GOSUB VALIDATE.PREVIOUS.INPUTS   MATWRITE WIDGET.USER.DATA ON FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ENDGOSUB SET.PROMPTSRETURN*SET.PROMPTS:*W$INPUT.PROMPT<1> = "AP File Account"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = ACCOUNT*W$INPUT.PROMPT<2> = "Name Of AP File"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = REPORT.FILE*W$INPUT.PROMPT<3> = "Due Date Dict Name"W$INPUT.TYPE<3> = 'TEXT'W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = DUE.DATE.DICT*W$INPUT.PROMPT<4> = "Date Paid Dict Name"W$INPUT.TYPE<4> = 'TEXT'W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = DATE.PAID.DICT*W$INPUT.PROMPT<5> = "Invoice Amount Dict Name"W$INPUT.TYPE<5> = 'TEXT'W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = INVOICE.AMT.DICT*W$INPUT.PROMPT<6> = "Remaining Balance Dict Name"W$INPUT.TYPE<6> = 'TEXT'W$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = BALANCE.DICT*RETURN*VALIDATE.PREVIOUS.INPUTS:*MESSAGE=''BEGIN CASE   CASE PLATFORM = 'D3'      MD.TYPE='MD'   CASE PLATFORM = 'JB'      MD.TYPE='MD'   CASE 1      MD.TYPE='VOC'END CASEOPEN '',MD.TYPE TO FI.MD ELSE   MESSAGE='Unable to open ':MD.TYPE:' for validation purposes'   GOTO MESSAGE.DISPLAY ENDVALID.ACCOUNT=1IF ACCOUNT <> '' THEN   QFILE.NAME='QFILE'   CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)   IF QFILE.NAME = '' THEN      MESSAGE<-1>=ACCOUNT:' is not a valid account!'      VALID.ACCOUNT=0    END**   IF PLATFORM = 'UD' THEN**      QFILE.NAME='QFILE'**      CALL CREATE.UD.QPOINTER(ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)**      IF QFILE.NAME = '' THEN**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END ELSE**      WRITE 'Q':@AM:ACCOUNT:@AM:MD.TYPE ON FI.MD, 'QFILE'**      OPEN '','QFILE' TO FI.ACCOUNT.MD ELSE**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END END ELSE   VALID.ACCOUNT=0   MESSAGE<-1>='No Account defined!' ENDIF REPORT.FILE <> '' THEN   IF NOT(VALID.ACCOUNT) THEN      MESSAGE<-1>='Unable to verify ':REPORT.FILE:' file because account not properly defined!'      VALID.REPORT.FILE=0    END ELSE      VALID.REPORT.FILE=1      CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)      IF QFILE.NAME = '' THEN         MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'         VALID.REPORT.FILE=0       END**      IF PLATFORM = 'UD' THEN**         QFILE.NAME='QFILE'**         CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)**         IF QFILE.NAME = '' THEN**            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**            VALID.REPORT.FILE=0**          END**       END ELSE**         WRITE 'Q':@AM:ACCOUNT:@AM:REPORT.FILE ON FI.MD, 'QFILE'**         OPEN '','QFILE' TO FI.REPORT.FILE ELSE**            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**            VALID.REPORT.FILE=0**          END**       END      IF VALID.REPORT.FILE THEN         HAVE.QFILE.REC=1         READ QFILE.REC FROM FI.MD, 'QFILE' ELSE            HAVE.QFILE.REC=0            MESSAGE<-1>='Unable to create QFILE pointer to ':ACCOUNT:' ':REPORT.FILE          END         IF HAVE.QFILE.REC THEN            WRITE QFILE.REC ON FI.MD, 'DASHBOARD.AP.FILE'            OPEN 'DICT','DASHBOARD.AP.FILE' TO FI.DICT.REPORT.FILE ELSE                MESSAGE<-1>='Unable to open DICT ':REPORT.FILE             END          END       END    END END ELSE   MESSAGE<-1>='No AP Report file defined!' ENDIF DUE.DATE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Due Date Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DUE.DATE.DICT:' Because No AP File!'    END ELSE      READ DUE.DATE.DICT.REC FROM FI.DICT.REPORT.FILE, DUE.DATE.DICT ELSE         DUE.DATE.DICT.REC=''         MESSAGE<-1>=DUE.DATE.DICT:' Does Not Exist!'       END      IF DUE.DATE.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DUE.DATE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DUE.DATE.DICT.REC<7>[1,1] <> 'D' AND DUE.DATE.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DUE.DATE.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DUE.DATE.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF DATE.PAID.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Date Paid Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DATE.PAID.DICT:' Because No AP File!'    END ELSE      READ DATE.PAID.DICT.REC FROM FI.DICT.REPORT.FILE, DATE.PAID.DICT ELSE         DATE.PAID.DICT.REC=''         MESSAGE<-1>=DATE.PAID.DICT:' Does Not Exist!'       END      IF DATE.PAID.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DATE.PAID.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DATE.PAID.DICT.REC<7>[1,1] <> 'D' AND DATE.PAID.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DATE.PAID.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DATE.PAID.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF INVOICE.AMT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Invoice Amount Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":INVOICE.AMT.DICT:' Because No AP File!'    END ELSE      READ INVOICE.AMT.DICT.REC FROM FI.DICT.REPORT.FILE, INVOICE.AMT.DICT ELSE         INVOICE.AMT.DICT.REC=''         MESSAGE<-1>=INVOICE.AMT.DICT:' Does Not Exist!'       END      IF INVOICE.AMT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=INVOICE.AMT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=INVOICE.AMT.DICT.REC<7>[1,2]               DICT.8.1.2=INVOICE.AMT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=INVOICE.AMT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':INVOICE.AMT.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF BALANCE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Balance Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":BALANCE.DICT:' Because No AP File!'    END ELSE      READ BALANCE.DICT.REC FROM FI.DICT.REPORT.FILE, BALANCE.DICT ELSE         BALANCE.DICT.REC=''         MESSAGE<-1>=BALANCE.DICT:' Does Not Exist!'       END      IF BALANCE.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=BALANCE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=BALANCE.DICT.REC<7>[1,2]               DICT.8.1.2=BALANCE.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=BALANCE.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               BALANCE.AMC=BALANCE.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':BALANCE.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDCREATE.INDEXES=1IF MESSAGE = '' THEN   MESSAGE='AP Report parameters properly defined!' END ELSE   IF INDEX(MESSAGE,'!',1) THEN      MESSAGE=INSERT(MESSAGE,1,0,0,'!!! ERRORS !!!')      CREATE.INDEXES=0    END ENDIF CREATE.INDEXES THEN   * CREATE PIPE DICTIONARY ITEM   IF PLATFORM = 'D3' OR PLATFORM = 'QM' OR PLATFORM = 'JB' THEN      PIPE='A'      PIPE<2>=0      PIPE<3>=' '      PIPE<8>='F;C|'      PIPE<9>='L'      PIPE<10>=1    END ELSE      PIPE='I'      PIPE<2>='"|"'      PIPE<4>='|'      PIPE<5>='1L'      PIPE<6>='S'    END   WRITE PIPE ON FI.DICT.REPORT.FILE, 'PIPE'   *   ** INDEX LOGIC   *   BEGIN CASE      CASE PLATFORM = 'D3'         INDEX.TEST='A':DUE.DATE.AMC:'(DY):':DUE.DATE.AMC:'(DM)'         READ FILE.DEF.REC FROM FI.DICT.REPORT.FILE, REPORT.FILE ELSE FILE.DEF.REC=''         IF FILE.DEF.REC <> '' AND NOT(INDEX(FILE.DEF.REC<8>,INDEX.TEST,1)) THEN            MESSAGE<-1>='Creating Indexes'            CMND1="CREATE-INDEX DASHBOARD.AP.FILE A":DUE.DATE.AMC            EXECUTE CMND1 CAPTURING RESULT1            CMND2="CREATE-INDEX DASHBOARD.AP.FILE ":INDEX.TEST            EXECUTE CMND2 CAPTURING RESULT2          END      CASE 1         EXECUTE "CREATE-INDEX DASHBOARD.AP.FILE ":DUE.DATE.DICT CAPTURING RESULT1   END CASE ENDGOSUB MESSAGE.DISPLAYRETURN*MESSAGE.DISPLAY:*MAX.MSG=DCOUNT(MESSAGE,CHAR(254))W$HTML.DATA='<h3>':MESSAGE<1>IF MAX.MSG > 1 THEN   FOR MSG.NO = 2 TO MAX.MSG      W$HTML.DATA:='<br>':MESSAGE<MSG.NO>    NEXT MSG.NO ENDW$HTML.DATA:='</h3>'RETURNEND0006AECREATE.QPOINTER0c2SUBROUTINE CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,FILENAME,CALL.IT,FI.QPOINTER)**OPEN '',CALL.IT TO FI.QPOINTER THEN**   IF CALL.IT <> 'QFILE' THEN RETURN** ENDCALL.IT.PARAM=CALL.ITCALL.IT=''PATH=@PATHBEGIN CASE   CASE PLATFORM = 'UD'      OPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE         UD.ACCOUNTS='F'         UD.ACCOUNTS<-1>='@UDTHOME/sys/UD.ACCOUNT'         UD.ACCOUNTS<-1>='@UDTHOME/sys/D_UD.ACCOUNT'         WRITE UD.ACCOUNTS ON FI.MD, 'UD.ACCOUNTS'         OPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE RETURN       END      READV PATH FROM FI.UD.ACCOUNTS, ACCOUNT, 1 ELSE RETURN      F.POINTER='F'      F.POINTER<2>=PATH:'/':FILENAME      F.POINTER<3>=PATH:'/D_':FILENAME      WRITE F.POINTER ON FI.MD, CALL.IT.PARAM   CASE PLATFORM = 'JB' AND ACCOUNT = 'MVDB'      IF INDEX(PATH,':\',1) THEN DELIM.TYPE='\' ELSE DELIM.TYPE='/'      F.POINTER='F'      F.POINTER<2>=PATH:DELIM.TYPE:FILENAME      F.POINTER<3>=PATH:DELIM.TYPE:FILENAME:']D'      WRITE F.POINTER ON FI.MD, CALL.IT.PARAM   CASE 1      QFILE.REC='Q':@AM:ACCOUNT:@AM:FILENAME      WRITE QFILE.REC ON FI.MD, CALL.IT.PARAMEND CASE* CHANGE CALL.IT TO SUCCESSFUL NAME* OTHERWISE IT WILL RETURN WITH NULL SAYING FAILURECALL.IT=CALL.IT.PARAMOPEN '',CALL.IT.PARAM TO FI.QPOINTER ELSE   CALL.IT=''   IF PLATFORM = 'JB' AND FILENAME = 'MD' THEN      * OTHER ACCOUNT MAY NOT HAVE AN MD AND THE ONLY REASON TO SET A      * QPOINTER TO IT IS TO TEST VALIDITY OF THE ACCOUNT SO JUST      * CHECK FOR THE EXISTENCE OF A SYSTEM RECORD      OPEN '','SYSTEM' TO FI.SYSTEM ELSE RETURN      READ ACCOUNT.EXIST FROM FI.SYSTEM, ACCOUNT ELSE RETURN      CALL.IT=CALL.IT.PARAM    END ENDRETURNEND000B60SUB.DEMO.SALES.CHART0c2SUBROUTINE SUB.DEMO.SALES.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''VAL.TYPE='$'DRILLDOWN.WIDGET=''DRILLDOWN.TYPE=''BEGIN CASE   CASE WIDGET.USER.DATA(1) = 'REVENUES'      W$TITLE='YTD Revenues'      W$BAR.YMEMO = "YTD Revenues"      SALES.AMTS=REC<68>   CASE WIDGET.USER.DATA(1) = 'GROSSPROFIT'      W$TITLE='YTD Gross Profit'      W$BAR.YMEMO = "YTD Gross Profit"      SALES.AMTS=REC<69>   CASE WIDGET.USER.DATA(1) = 'MARGIN'      VAL.TYPE='%'      W$TITLE='YTD Margin %'      W$BAR.YMEMO = "Margin %"      SALES.AMTS=REC<39>   CASE WIDGET.USER.DATA(1) = 'PARTS$'      W$TITLE='YTD Parts Revenue ($)'      W$BAR.YMEMO = "Parts Revenue ($)"      SALES.AMTS=REC<40>      DRILLDOWN.WIDGET='DEMO SALE TYPES PIE'      DRILLDOWN.TYPE='PARTS'   CASE WIDGET.USER.DATA(1) = 'SERVICES$'      W$TITLE='YTD Services Revenue ($)'      W$BAR.YMEMO = "Services Revenue ($)"      SALES.AMTS=REC<42>      DRILLDOWN.WIDGET='DEMO SALE TYPES PIE'      DRILLDOWN.TYPE='SERVICES'END CASE*YEARS=REC<38>MAX.YEARS=DCOUNT(YEARS,CHAR(253))**MAX.SALES.AMT=0N=0FIRST.YEAR=''FOR NN = 1 TO MAX.YEARS   SALES.AMT=SUM(SALES.AMTS<1,NN>)   BEGIN CASE      CASE VAL.TYPE = '$'         SALES.AMT=OCONV(SALES.AMT,'MD02')      CASE VAL.TYPE = '%'         SALES.AMT=OCONV(SALES.AMT,'MD01')      CASE 1         NULL   END CASE  IF SALES.AMT THEN     N+=1     IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT     W$BAR.VALUES<1,N> = SALES.AMT     YEAR=YEARS<1,NN>     IF DRILLDOWN.TYPE <> '' THEN        W$FW.DD.WIDGET<1,N>=DRILLDOWN.WIDGET        W$FW.DD.UD.POS<1,N,1>=1        W$FW.DD.UD.VAL<1,N,1>=YEAR        W$FW.DD.UD.POS<1,N,2>=2        W$FW.DD.UD.VAL<1,N,2>=DRILLDOWN.TYPE      END     IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR     CURRENT.YEAR=YEAR     W$BAR.XLABELS<1,N> = YEAR   ENDNEXT NNW$BAR.XMEMO = "Year"IF DRILLDOWN.TYPE <> '' THEN   W$BAR.XMEMO := " (drilldown for detail)" ENDW$BAR.CAPTION=W$BAR.YMEMO:' From ':FIRST.YEAR:' to ':CURRENT.YEARIF VAL.TYPE = '$' THEN   * ROUND MAX AMOUNT UP TO THE NEXT 250000   MAX.SALES.AMT+=250000   MAX.SALES.AMT=INT(MAX.SALES.AMT/250000) * 250000   W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'   W$CHART.OPTIONS<-1>='decimals="2"'   W$CHART.OPTIONS<-1>='DecimalPrecision="2"'   W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'   W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'   W$CHART.OPTIONS<-1>='formatNumberScale="1"' ENDIF VAL.TYPE = '%' THEN   W$CHART.OPTIONS<-1>='decimals="1"'   W$CHART.OPTIONS<-1>='forceDecimals="1"' ENDRETURN00B526SUB.PORTAL.SALES.REPORTS0c2SUBROUTINE SUB.PORTAL.SALES.REPORTS** DEFINE PARAMETERS FOR PORTAL SALES REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOPDIM SETUP.PARAMS(25)*W$TITLE = "Portal Sales Reports"; CALL PORTAL.SHOW.LAST.UPDATED('SALES')W$TYPE = "HTML"W$WIDTH = 3D3=1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEW$BAR.COLORS<1,5>=COLOR$YELLOWALF.MONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'EQUATE REPORT.TYPE TO WIDGET.USER.DATA(1)*IF REPORT.TYPE = '' THEN REPORT.TYPE='MTD Sales'*OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE    ERROR.MSG='UNABLE TO OPEN MVDB.CONTROL'   GOTO DISPLAY.ERROR ENDOPEN '','DASHBOARD.CLOSING.STATS' TO FI.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' ENDEQUATE ACCOUNT TO SETUP.PARAMS(1)EQUATE REPORT.FILE TO SETUP.PARAMS(2)EQUATE SALE.DATE.DICT TO SETUP.PARAMS(3)EQUATE SALE.MONTH.DICT TO SETUP.PARAMS(4)EQUATE SALE.YEAR.DICT TO SETUP.PARAMS(5)EQUATE SALE.AMOUNT.DICT TO SETUP.PARAMS(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO SETUP.PARAMS(7)EQUATE SALESMAN.DICT TO SETUP.PARAMS(8)EQUATE BRANCH.DICT TO SETUP.PARAMS(9)EQUATE REGION.DICT TO SETUP.PARAMS(10)EQUATE SALE.DATE.AMC TO SETUP.PARAMS(11)EQUATE SALE.AMOUNT.AMC TO SETUP.PARAMS(12)EQUATE SALE.AMOUNT.CONV TO SETUP.PARAMS(13)EQUATE SALE.AMOUNT.COOR TO SETUP.PARAMS(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO SETUP.PARAMS(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO SETUP.PARAMS(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO SETUP.PARAMS(17)EQUATE SALESMAN.AMC TO SETUP.PARAMS(18)EQUATE SALESMAN.TFILE TO SETUP.PARAMS(19)EQUATE BRANCH.AMC TO SETUP.PARAMS(20)EQUATE BRANCH.TFILE TO SETUP.PARAMS(21)EQUATE REGION.AMC TO SETUP.PARAMS(22)EQUATE REGION.TFILE TO SETUP.PARAMS(23)*READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='MD'END CASEOPEN '',MD.FILE.NAME TO FI.MD ELSE   ERROR.MSG='UNABLE TO OPEN ':MD.FILE.NAME   GOTO DISPLAY.ERROR END*IF ACCOUNT = '' OR REPORT.FILE = '' OR SALE.DATE.DICT = '' OR SALE.AMOUNT.DICT = '' THEN   ERROR.MSG='SALES FILE ACCOUNT, SALES FILE NAME, DATE OF SALE, AND AMOUNT OF SALE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'   GOTO DISPLAY.ERROR END*SALES.FILE.PATH='SALES.FILE.PATH'OPEN '',SALES.FILE.PATH TO FI.SALES.FILE.PATH ELSE**   EXECUTE "SET-FILE ":ACCOUNT:" ":REPORT.FILE CAPTURING DUMMY   QFILE.NAME=SALES.FILE.PATH   CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.SALES.FILE.PATH)   IF QFILE.NAME = '' THEN      MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'      GOTO DISPLAY.ERROR    END**    IF PLATFORM = 'UD' THEN**       QFILE.NAME='SALES.FILE.PATH'**       CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.SALES.FILE.PATH)**       IF QFILE.NAME = '' THEN**          ERROR.MSG='UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT'**          GOTO DISPLAY.ERROR**        END**     END ELSE**    **   READ MD.QFILE FROM FI.MD, 'QFILE' ELSE**    **      ERROR.MSG='UNABLE TO CREATE QFILE TO SALES FILE'**    **      GOTO DISPLAY.ERROR**    **    END**       MD.QFILE='Q'**       MD.QFILE<2>=ACCOUNT**       MD.QFILE<3>=REPORT.FILE**       WRITE MD.QFILE ON FI.MD, 'SALES.FILE.PATH'**       OPEN '','SALES.FILE.PATH' TO FI.SALES.FILE.PATH ELSE**          ERROR.MSG='UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT'**          GOTO DISPLAY.ERROR**        END**     END   EXECUTE "CREATE-INDEX SALES.FILE.PATH ":SALE.DATE.DICT CAPTURING DUMMY END*W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'*OTODAY=OCONV(DATE(),'D4-')*BEGIN CASE   CASE REPORT.TYPE = 'MTD Sales'; GOSUB MTD.SALES   CASE REPORT.TYPE = 'YTD Sales'; GOSUB YTD.SALES   CASE REPORT.TYPE = 'Year to Year Sales and GP'; GOSUB YEAR.TO.YEAR.SALES   CASE REPORT.TYPE = 'Year to Year Sales by Month'; GOSUB YEAR.TO.YEAR.SALES.BY.MONTH   CASE REPORT.TYPE = 'Year to Year GP by Month'; GOSUB YEAR.TO.YEAR.GP.BY.MONTH   CASE REPORT.TYPE = 'MTD Sales by Salesman'; GOSUB MTD.SALES.BY.SALESMAN   CASE REPORT.TYPE = 'YTD Sales by Salesman'; GOSUB YTD.SALES.BY.SALESMAN   CASE REPORT.TYPE = 'Year to Year Sales by Salesman'; GOSUB YEAR.TO.YEAR.BY.SALESMAN   CASE REPORT.TYPE = 'Year to Year GP by Salesman'; GOSUB YEAR.TO.YEAR.GP.BY.SALESMAN   CASE REPORT.TYPE = 'MTD Sales by Branch'; GOSUB MTD.SALES.BY.BRANCH   CASE REPORT.TYPE = 'YTD Sales by Branch'; GOSUB YTD.SALES.BY.BRANCH   CASE REPORT.TYPE = 'Year to Year Sales by Branch'; GOSUB YEAR.TO.YEAR.BY.BRANCH   CASE REPORT.TYPE = 'Year to Year GP by Branch'; GOSUB YEAR.TO.YEAR.GP.BY.BRANCH   CASE REPORT.TYPE = 'MTD Sales by Region'; GOSUB MTD.SALES.BY.REGION   CASE REPORT.TYPE = 'YTD Sales by Region'; GOSUB YTD.SALES.BY.REGION   CASE REPORT.TYPE = 'Year to Year Sales by Region'; GOSUB YEAR.TO.YEAR.BY.REGION   CASE REPORT.TYPE = 'Year to Year GP by Region'; GOSUB YEAR.TO.YEAR.GP.BY.REGIONEND CASE*W$INPUT.PROMPT<1> = "Report Type"W$INPUT.TYPE<1> = "SELECT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = REPORT.TYPESELOPTS='MTD Sales'SELOPTS<1,-1>='YTD Sales'SELOPTS<1,-1>='Year to Year Sales and GP'SELOPTS<1,-1>='Year to Year Sales by Month'SELOPTS<1,-1>='Year to Year GP by Month'SELOPTS<1,-1>='MTD Sales by Salesman'SELOPTS<1,-1>='YTD Sales by Salesman'SELOPTS<1,-1>='Year to Year Sales by Salesman'SELOPTS<1,-1>='Year to Year GP by Salesman'IF BRANCH.DICT <> '' THEN   SELOPTS<1,-1>='MTD Sales by Branch'   SELOPTS<1,-1>='YTD Sales by Branch'   SELOPTS<1,-1>='Year to Year Sales by Branch'   SELOPTS<1,-1>='Year to Year GP by Branch' ENDIF REGION.DICT <> '' THEN   SELOPTS<1,-1>='MTD Sales by Region'   SELOPTS<1,-1>='YTD Sales by Region'   SELOPTS<1,-1>='Year to Year Sales by Region'   SELOPTS<1,-1>='Year to Year GP by Region' ENDW$INPUT.SELOPTS=SELOPTSW$INPUT.SELVALS=SELOPTSRETURN*DISPLAY.ERROR:*W$HTML.DATA='<h3>':ERROR.MSG:'</h3>'RETURN*MTD.SALES:*GET.REPORT.TYPE='SALES'; GOSUB GET.CURRENT.REPORTIF REPORT.STATS.REC[1,5] = 'ERROR' OR REPORT.STATS.REC<1> = '' THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Date"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'DATES=REPORT.STATS.REC<1>NUM.DATES=DCOUNT(DATES,CHAR(253))AMOUNTS=REPORT.STATS.REC<2>SUM.AMOUNTS=SUM(AMOUNTS)COST.OF.SALES=REPORT.STATS.REC<3>SUM.COST.OF.SALES=SUM(COST.OF.SALES)SUM.GROSS.PROFIT=SUM.AMOUNTS-SUM.COST.OF.SALESW$BAR.YMEMO='Total Sales and Gross Profits'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM.AMOUNTS,'MD2,$'):" and Gross Profit of ":OCONV(SUM.GROSS.PROFIT,'MD2,$'):" by Date"IF NUM.DATES > 20 THEN   W$TYPE='FCMSBAR2D'   START.CNTR=NUM.DATES   END.CNTR=1   STEP.CNTR=(-1) END ELSE   W$TYPE='FCMSCOLUMN2D'   START.CNTR=1   END.CNTR=NUM.DATES   STEP.CNTR=1 ENDVALUE.CNTR=0FOR AMT.CNTR = START.CNTR TO END.CNTR STEP STEP.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT THEN      COST.OF.SALE=COST.OF.SALES<1,AMT.CNTR>      GROSS.PROFIT=AMOUNT-COST.OF.SALE      IF GROSS.PROFIT < 0 THEN GROSS.PROFIT=0      VALUE.CNTR+=1      ROW.DATE=ICONV(DATES<1,AMT.CNTR>,'D')      ROW.DATE=OCONV(ROW.DATE,'D0')      W$BAR.XLABELS<1,VALUE.CNTR>=ROW.DATE      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE DATES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYYMM BREAK-ON YYYYMM PIPE DET-SUPP TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Month"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'MONTHS=''MONTH.CNTR=0LAST.MONTH=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      MONTH=TRIM(FIELD(ROW,'|',1))[5,2]+0      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      GROSS.PROFIT=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         IF MONTH <> LAST.MONTH THEN            LAST.MONTH=MONTH            MONTH.CNTR+=1            MONTHS<1,MONTH.CNTR>=MONTH            AMOUNTS<1,MONTH.CNTR>=0            GROSS.PROFITS<1,MONTH.CNTR>=0          END         AMOUNTS<1,MONTH.CNTR>+=AMOUNT         GROSS.PROFITS<1,MONTH.CNTR>+=GROSS.PROFIT       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):"  And Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" By Month"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))W$TYPE='FCMSCOLUMN2D'VALUE.CNTR=0FOR AMT.CNTR = 1 TO YTD.MO   AMOUNT=AMOUNTS<1,AMT.CNTR>   GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>   IF AMOUNT > 0 AND GROSS.PROFIT >= 0 THEN      VALUE.CNTR+=1      MONTH=FIELD(ALF.MONTHS,',',AMT.CNTR)      W$BAR.XLABELS<1,VALUE.CNTR>=MONTH      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTRRETURN*YEAR.TO.YEAR.SALES:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSCOLUMN2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYY BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'YEAR.TO.YEAR.REPORT'YEAR.TOTALS=''YEAR.GROSS.PROFITS=''YEARS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))YEAR.CNTR=0FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YEAR=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         IF AMOUNT OR GROSS.PROFIT THEN            YEAR.CNTR+=1            YEARS<YEAR.CNTR>=YEAR            AMOUNT=ICONV(AMOUNT,'MD2')            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            YEAR.TOTALS<YEAR.CNTR>=AMOUNT            YEAR.GROSS.PROFITS<YEAR.CNTR>=GROSS.PROFIT          END       END    ENDNEXT ROW.NO*W$BAR.CAPTION = "Sales and Gross Profit by Year"W$BAR.XMEMO = "Year"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'W$BAR.YMEMO = "Total Sales and Gross Profit"*MAX.YEARS=DCOUNT(YEARS,CHAR(254))FOR YEAR.NO = 1 TO MAX.YEARS   YEAR.TOTAL=YEAR.TOTALS<YEAR.NO>   YEAR.GROSS.PROFIT=YEAR.GROSS.PROFITS<YEAR.NO>   W$BAR.VALUES<1,YEAR.NO>=OCONV(YEAR.TOTAL+0,'MD2')   W$BAR.VALUES<2,YEAR.NO>=OCONV(YEAR.GROSS.PROFIT+0,'MD2')   W$BAR.XLABELS<1,YEAR.NO>=YEARS<YEAR.NO> NEXT YEAR.NORETURN*YEAR.TO.YEAR.SALES.BY.MONTH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSCOLUMN2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYYMM BREAK-ON YYYYMM PIPE TOTAL AMOUNT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.MO.TOTALS=''YEAR.NO=1MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YYYYMM=TRIM(FIELD(ROW,'|',1))      YEAR=YYYYMM[1,4]      MO.NO=YYYYMM[5,2]+0      AMOUNT=TRIM(FIELD(ROW,'|',2))      IF YEAR <> '' AND MO.NO AND NUM(AMOUNT) THEN         YEAR.NO=YEAR-FIRST.YEAR+1         IF AMOUNT THEN            AMOUNT=ICONV(AMOUNT,'MD2')            YEAR.MO.TOTALS<YEAR.NO,MO.NO>+=AMOUNT          END       END    END NEXT ROW.NO*FOR I = 0 TO 4   W$BAR.LABELS<I+1> = FIRST.YEAR+I   W$BAR.LABEL.OPTS<I+1> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Monthly Sales by Year"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Sales"*FOR MO.NO = 1 TO 12   FOR YEAR.NO = 1 TO 5      W$BAR.VALUES<YEAR.NO,MO.NO>=OCONV(YEAR.MO.TOTALS<YEAR.NO,MO.NO>+0,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,MO.NO>=FIELD(ALF.MONTHS,',',MO.NO) NEXT MO.NORETURN*YEAR.TO.YEAR.GP.BY.MONTH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSCOLUMN2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYYMM BREAK-ON YYYYMM PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.MO.TOTALS=''YEAR.NO=1MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YYYYMM=TRIM(FIELD(ROW,'|',1))      YEAR=YYYYMM[1,4]      MO.NO=YYYYMM[5,2]+0      GROSS.PROFIT=TRIM(FIELD(ROW,'|',2))      IF YEAR <> '' AND MO.NO AND NUM(GROSS.PROFIT) THEN         YEAR.NO=YEAR-FIRST.YEAR+1         IF GROSS.PROFIT THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            YEAR.MO.TOTALS<YEAR.NO,MO.NO>+=GROSS.PROFIT          END       END    END NEXT ROW.NO*FOR I = 0 TO 4   W$BAR.LABELS<I+1> = FIRST.YEAR+I   W$BAR.LABEL.OPTS<I+1> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Monthly Gross Profit by Year"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Gross Profit"*FOR MO.NO = 1 TO 12   FOR YEAR.NO = 1 TO 5      W$BAR.VALUES<YEAR.NO,MO.NO>=OCONV(YEAR.MO.TOTALS<YEAR.NO,MO.NO>+0,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,MO.NO>=FIELD(ALF.MONTHS,',',MO.NO) NEXT MO.NORETURN*MTD.SALES.BY.SALESMAN:**OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':SALESMAN.DICT:' BREAK-ON ':SALESMAN.DICT:' PIPE TOTAL ':SALE.AMOUNT.DICT:' PIPE TOTAL ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Salesman"SALESMEN=''SALESMAN.CNTR=0LAST.SALESMAN=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      SALESMAN=TRIM(FIELD(ROW,'|',1))      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      COST.OF.SALE=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(COST.OF.SALE) THEN         IF AMOUNT > 0 THEN            IF SALESMAN <> LAST.SALESMAN THEN               LAST.SALESMAN=SALESMAN               SALESMAN.CNTR+=1               SALESMEN<1,SALESMAN.CNTR>=SALESMAN               AMOUNTS<1,SALESMAN.CNTR>=0               GROSS.PROFITS<1,SALESMAN.CNTR>=0             END            GROSS.PROFIT=AMOUNT-COST.OF.SALE            AMOUNTS<1,SALESMAN.CNTR>+=AMOUNT            GROSS.PROFITS<1,SALESMAN.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profits of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Salesman"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))IF SALESMAN.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * SALESMAN.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDW$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'VALUE.CNTR=0FOR AMT.CNTR = 1 TO NUM.AMOUNTS   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT > 0 THEN      GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>      VALUE.CNTR+=1      SALESMAN=SALESMEN<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=SALESMAN      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE SALESMEN:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES.BY.SALESMAN:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY SALESMAN BREAK-ON SALESMAN PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Salesman"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'SALESMEN=''SALESMAN.CNTR=0LAST.SALESMAN=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      SALESMAN=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         AMOUNT=ICONV(AMOUNT,'MD2')         IF AMOUNT > 0 THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            IF SALESMAN <> LAST.SALESMAN THEN               LAST.SALESMAN=SALESMAN               SALESMAN.CNTR+=1               SALESMEN<1,SALESMAN.CNTR>=SALESMAN               AMOUNTS<1,SALESMAN.CNTR>=0               GROSS.PROFITS<1,SALESMAN.CNTR>=0             END            AMOUNTS<1,SALESMAN.CNTR>+=AMOUNT            GROSS.PROFITS<1,SALESMAN.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Salesman"IF SALESMAN.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * SALESMAN.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDVALUE.CNTR=0FOR AMT.CNTR = 1 TO SALESMAN.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>   IF AMOUNT THEN      VALUE.CNTR+=1      SALESMAN=SALESMEN<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=SALESMAN      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTRRETURN*YEAR.TO.YEAR.BY.SALESMAN:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY SALESMAN BY YYYY BREAK-ON SALESMAN PIPE BREAK-ON YYYY PIPE TOTAL AMOUNT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.SALESMAN.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))SALESMEN=''SALESMEN.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   NUM.PIPES=COUNT(ROW,'|')   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      SALESMAN=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND SALESMAN <> '' THEN; *      IF SALESMAN <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE SALESMAN IN SALESMEN SETTING SALESMAN.POS ELSE               SALESMEN.CNTR+=1               SALESMEN<SALESMEN.CNTR>=SALESMAN               SALESMAN.POS=SALESMEN.CNTR             END            YEAR.SALESMAN.TOTALS<SALESMAN.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            AMOUNT=TRIM(FIELD(ROW,'|',3))            IF NUM(AMOUNT) THEN               AMOUNT=ICONV(AMOUNT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=AMOUNT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Sales by Salesman"W$BAR.XMEMO = "Salesman"W$BAR.YMEMO = "Sales"W$CHART.HEIGHT = 200 + (70 * SALESMEN.CNTR)*FOR SALESMAN.NO = 1 TO SALESMEN.CNTR   FOR YEAR.NO = 1 TO 5      SALESMAN.YEAR.AMT=YEAR.SALESMAN.TOTALS<SALESMAN.NO,YEAR.NO>+0      IF SALESMAN.YEAR.AMT < 0 THEN SALESMAN.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,SALESMAN.NO>=OCONV(SALESMAN.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,SALESMAN.NO>=SALESMEN<SALESMAN.NO> NEXT SALESMAN.NORETURN*YEAR.TO.YEAR.GP.BY.SALESMAN:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY SALESMAN BY YYYY BREAK-ON SALESMAN PIPE BREAK-ON YYYY PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDWRITE STACKED.1:@AM:STACKED.2 ON FI.MVDB.SUBS, 'YEAR.TO.YEAR.CMND'WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.SALESMAN.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))SALESMEN=''SALESMEN.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      SALESMAN=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND SALESMAN <> '' THEN; *      IF SALESMAN <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE SALESMAN IN SALESMEN SETTING SALESMAN.POS ELSE               SALESMEN.CNTR+=1               SALESMEN<SALESMEN.CNTR>=SALESMAN               SALESMAN.POS=SALESMEN.CNTR             END            YEAR.SALESMAN.TOTALS<SALESMAN.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))            IF NUM(GROSS.PROFIT) THEN               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=GROSS.PROFIT             END          END       END    ENDWRITE SALESMEN ON FI.MVDB.SUBS, 'SALESMEN'WRITE YEAR.SALESMAN.TOTALS ON FI.MVDB.SUBS, 'YEAR.SALESMAN.TOTALS'WRITE YEAR.TOTALS ON FI.MVDB.SUBS, 'YEAR.TOTALS' NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Gross Profit by Salesman"W$BAR.XMEMO = "Salesman"W$BAR.YMEMO = "Gross Profit"W$CHART.HEIGHT = 200 + (70 * SALESMEN.CNTR)*FOR SALESMAN.NO = 1 TO SALESMEN.CNTR   FOR YEAR.NO = 1 TO 5      SALESMAN.YEAR.AMT=YEAR.SALESMAN.TOTALS<SALESMAN.NO,YEAR.NO>+0      IF SALESMAN.YEAR.AMT < 0 THEN SALESMAN.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,SALESMAN.NO>=OCONV(SALESMAN.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,SALESMAN.NO>=SALESMEN<SALESMAN.NO> NEXT SALESMAN.NORETURN**MTD.SALES.BY.BRANCH:**OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':BRANCH.DICT:' BREAK-ON ':BRANCH.DICT:' PIPE TOTAL ':SALE.AMOUNT.DICT:' PIPE TOTAL ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Branch"BRANCHES=''BRANCH.CNTR=0LAST.BRANCH=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      BRANCH=TRIM(FIELD(ROW,'|',1))      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      COST.OF.SALE=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(COST.OF.SALE) THEN         IF AMOUNT > 0 THEN            IF BRANCH <> LAST.BRANCH THEN               LAST.BRANCH=BRANCH               BRANCH.CNTR+=1               BRANCHES<1,BRANCH.CNTR>=BRANCH               AMOUNTS<1,BRANCH.CNTR>=0               GROSS.PROFITS<1,BRANCH.CNTR>=0             END            GROSS.PROFIT=AMOUNT-COST.OF.SALE            AMOUNTS<1,BRANCH.CNTR>+=AMOUNT            GROSS.PROFITS<1,BRANCH.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Branch"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))IF BRANCH.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * BRANCH.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDW$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'VALUE.CNTR=0FOR AMT.CNTR = 1 TO NUM.AMOUNTS   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT > 0 THEN      GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>      VALUE.CNTR+=1      BRANCH=BRANCHES<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=BRANCH      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE BRANCHES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES.BY.BRANCH:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY BRANCH BREAK-ON BRANCH PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Branch"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'BRANCHES=''BRANCH.CNTR=0LAST.BRANCH=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      BRANCH=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         AMOUNT=ICONV(AMOUNT,'MD2')         IF AMOUNT > 0 THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            IF BRANCH <> LAST.BRANCH THEN               LAST.BRANCH=BRANCH               BRANCH.CNTR+=1               BRANCHES<1,BRANCH.CNTR>=BRANCH               AMOUNTS<1,BRANCH.CNTR>=0               GROSS.PROFITS<1,BRANCH.CNTR>=0             END            AMOUNTS<1,BRANCH.CNTR>+=AMOUNT            GROSS.PROFITS<1,BRANCH.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Branch"IF BRANCH.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * BRANCH.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDVALUE.CNTR=0FOR AMT.CNTR = 1 TO BRANCH.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT THEN      VALUE.CNTR+=1      BRANCH=BRANCHES<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=BRANCH      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFITS<1,AMT.CNTR>,'MD2')    END NEXT AMT.CNTR**WRITE DATES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'YTD.SALES.TEST'RETURN*YEAR.TO.YEAR.BY.BRANCH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY BRANCH BY YYYY BREAK-ON BRANCH PIPE BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.BRANCH.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))BRANCHES=''BRANCHES.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      BRANCH=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND BRANCH <> '' THEN; *      IF BRANCH <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE BRANCH IN BRANCHES SETTING BRANCH.POS ELSE               BRANCHES.CNTR+=1               BRANCHES<BRANCHES.CNTR>=BRANCH               BRANCH.POS=BRANCHES.CNTR             END            YEAR.BRANCH.TOTALS<BRANCH.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            AMOUNT=TRIM(FIELD(ROW,'|',3))            GROSS.PROFIT=TRIM(FIELD(ROW,'|',4))            IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN               AMOUNT=ICONV(AMOUNT,'MD2')               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=AMOUNT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Sales by Branch"W$BAR.XMEMO = "Branch"W$BAR.YMEMO = "Total Sales and Gross Profit"W$CHART.HEIGHT = 200 + (50 * BRANCHES.CNTR)*FOR BRANCH.NO = 1 TO BRANCHES.CNTR   FOR YEAR.NO = 1 TO 5      BRANCH.YEAR.AMT=YEAR.BRANCH.TOTALS<BRANCH.NO,YEAR.NO>+0      IF BRANCH.YEAR.AMT < 0 THEN BRANCH.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,BRANCH.NO>=OCONV(BRANCH.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,BRANCH.NO>=BRANCHES<BRANCH.NO> NEXT BRANCH.NORETURN*YEAR.TO.YEAR.GP.BY.BRANCH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY BRANCH BY YYYY BREAK-ON BRANCH PIPE BREAK-ON YYYY PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.BRANCH.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))BRANCHES=''BRANCHES.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      BRANCH=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND BRANCH <> '' THEN; *      IF BRANCH <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE BRANCH IN BRANCHES SETTING BRANCH.POS ELSE               BRANCHES.CNTR+=1               BRANCHES<BRANCHES.CNTR>=BRANCH               BRANCH.POS=BRANCHES.CNTR             END            YEAR.BRANCH.TOTALS<BRANCH.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))            IF NUM(GROSS.PROFIT) THEN               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=GROSS.PROFIT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Gross Profit by Branch"W$BAR.XMEMO = "Branch"W$BAR.YMEMO = "Gross Profit"W$CHART.HEIGHT = 200 + (70 * BRANCHES.CNTR)*FOR BRANCH.NO = 1 TO BRANCHES.CNTR   FOR YEAR.NO = 1 TO 5      BRANCH.YEAR.AMT=YEAR.BRANCH.TOTALS<BRANCH.NO,YEAR.NO>+0      IF BRANCH.YEAR.AMT < 0 THEN BRANCH.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,BRANCH.NO>=OCONV(BRANCH.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,BRANCH.NO>=BRANCHES<BRANCH.NO> NEXT BRANCH.NORETURN*MTD.SALES.BY.REGION:**OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':REGION.DICT:' BREAK-ON ':REGION.DICT:' PIPE TOTAL ':SALE.AMOUNT.DICT:' PIPE TOTAL ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "REGION"REGIONS=''REGION.CNTR=0LAST.REGION=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      REGION=TRIM(FIELD(ROW,'|',1))      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      COST.OF.SALE=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(COST.OF.SALE) THEN         IF AMOUNT > 0 THEN            IF REGION <> LAST.REGION THEN               LAST.REGION=REGION               REGION.CNTR+=1               REGIONS<1,REGION.CNTR>=REGION               AMOUNTS<1,REGION.CNTR>=0               GROSS.PROFITS<1,REGION.CNTR>=0             END            GROSS.PROFIT=AMOUNT-COST.OF.SALE            AMOUNTS<1,REGION.CNTR>+=AMOUNT            GROSS.PROFITS<1,REGION.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Region"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))IF REGION.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * REGION.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDW$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'VALUE.CNTR=0FOR AMT.CNTR = 1 TO NUM.AMOUNTS   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT > 0 THEN      GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>      VALUE.CNTR+=1      REGION=REGIONS<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=REGION      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE REGIONS:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES.BY.REGION:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY REGION BREAK-ON REGION PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Region"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'REGIONS=''REGION.CNTR=0LAST.REGION=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      REGION=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         AMOUNT=ICONV(AMOUNT,'MD2')         IF AMOUNT > 0 THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            IF REGION <> LAST.REGION THEN               LAST.REGION=REGION               REGION.CNTR+=1               REGIONS<1,REGION.CNTR>=REGION               AMOUNTS<1,REGION.CNTR>=0               GROSS.PROFITS<1,REGION.CNTR>=0             END            AMOUNTS<1,REGION.CNTR>+=AMOUNT            GROSS.PROFITS<1,REGION.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Region"IF REGION.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * REGION.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDVALUE.CNTR=0FOR AMT.CNTR = 1 TO REGION.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT THEN      VALUE.CNTR+=1      REGION=REGIONS<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=REGION      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFITS<1,AMT.CNTR>,'MD2')    END NEXT AMT.CNTR**WRITE DATES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'YTD.SALES.TEST'RETURN**YEAR.TO.YEAR.BY.REGION:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY REGION BY YYYY BREAK-ON REGION PIPE BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.REGION.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))REGIONS=''REGIONS.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      REGION=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND REGION <> '' THEN; *      IF REGION <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE REGION IN REGIONS SETTING REGION.POS ELSE               REGIONS.CNTR+=1               REGIONS<REGIONS.CNTR>=REGION               REGION.POS=REGIONS.CNTR             END            YEAR.REGION.TOTALS<REGION.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            AMOUNT=TRIM(FIELD(ROW,'|',3))            IF NUM(AMOUNT) THEN               AMOUNT=ICONV(AMOUNT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=AMOUNT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Sales by Region"W$BAR.XMEMO = "Region"W$BAR.YMEMO = "Sales"W$CHART.HEIGHT = 200 + (50 * REGIONS.CNTR)*FOR REGION.NO = 1 TO REGIONS.CNTR   FOR YEAR.NO = 1 TO 5      REGION.YEAR.AMT=YEAR.REGION.TOTALS<REGION.NO,YEAR.NO>+0      IF REGION.YEAR.AMT < 0 THEN REGION.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,REGION.NO>=OCONV(REGION.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,REGION.NO>=REGIONS<REGION.NO> NEXT REGION.NORETURN*YEAR.TO.YEAR.GP.BY.REGION:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY REGION BY YYYY BREAK-ON REGION PIPE BREAK-ON YYYY PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.REGION.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))REGIONS=''REGIONS.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      REGION=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND REGION <> '' THEN; *      IF REGION <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE REGION IN REGIONS SETTING REGION.POS ELSE               REGIONS.CNTR+=1               REGIONS<REGIONS.CNTR>=REGION               REGION.POS=REGIONS.CNTR             END            YEAR.REGION.TOTALS<REGION.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))            IF NUM(GROSS.PROFIT) THEN               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=GROSS.PROFIT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Gross Profit by Region"W$BAR.XMEMO = "Region"W$BAR.YMEMO = "Gross Profit"W$CHART.HEIGHT = 200 + (70 * REGIONS.CNTR)*FOR REGION.NO = 1 TO REGIONS.CNTR   FOR YEAR.NO = 1 TO 5      REGION.YEAR.AMT=YEAR.REGION.TOTALS<REGION.NO,YEAR.NO>+0      IF REGION.YEAR.AMT < 0 THEN REGION.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,REGION.NO>=OCONV(REGION.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,REGION.NO>=REGIONS<REGION.NO> NEXT REGION.NORETURN*VERIFY.CURRENT.DATA:*READ LAST.UPDATE FROM FI.DICT.DASHBOARD.CLOSING.STATS, '*LAST.UPDATE' ELSE LAST.UPDATE=0READ LAST.UPDATED FROM FI.DICT.DASHBOARD.CLOSING.STATS, '*LAST.UPDATED' ELSE LAST.UPDATED=0CUR.DATE=DATE(); CUR.TIME=TIME()CUR.TIME=FIELD(CUR.TIME,'.',1)LEN.CUR.TIME=LEN(CUR.TIME)CUR.TIME=STR('0',5-LEN.CUR.TIME):CUR.TIMECUR.DATE.TIME=CUR.DATE:CUR.TIMEDELTA.DATE.TIME=CUR.DATE.TIME-LAST.UPDATEDIF DELTA.DATE.TIME > 900 THEN   * REFRESH EVERY 15 MINUTES   LAST.UPDATED='UPDATING'   BEGIN CASE      CASE PLATFORM = 'D3' OR PLATFORM = 'JB'         EXECUTE "Z REFRESH.DASHBOARD.CLOSING.STATS" CAPTURING DUMMY      CASE 1         EXECUTE "PHANTOM REFRESH.DASHBOARD.CLOSING.STATS" CAPTURING DUMMY   END CASE ENDIF NOT(NUM(LAST.UPDATE)) THEN   IF INDEX(LAST.UPDATE,'UPDATING',1) THEN      LAST.UPDATE='Figures are currently updating.'      LAST.UPDATE<-1>='Try again in a couple of minutes.'    END   MAX.LINES=DCOUNT(LAST.UPDATE,CHAR(254))   ERROR.MSG=''   FOR I = 1 TO MAX.LINES      THIS.MSG=LAST.UPDATE<I>      IF ERROR.MSG <> '' THEN ERROR.MSG:='<br>'      ERROR.MSG:=THIS.MSG    NEXT I   RETURN TO DISPLAY.ERROR ENDRETURN*GET.CURRENT.REPORT:*BEGIN CASE   CASE GET.REPORT.TYPE = 'SALES'       FI.DICT=FI.DICT.DASHBOARD.CLOSING.STATS       LAST.DATE.INDICATOR='*LAST.UPDATE.SALES'       REPORT.STATS.ID='*CURRENT.SALES.STATS'END CASE*** IF MORE THAN 10 MINUTES SINCE LAST UPDATE THEN REFRESH DATA*RECALC.REQUESTED=0DATA.CURRENT=0LOOP   READ LAST.UPDATE FROM FI.DICT, LAST.DATE.INDICATOR ELSE LAST.UPDATE=''   IF NUM(LAST.UPDATE) THEN      CUR.TIME=OCONV(TIME(),'MT')      CONVERT ':' TO '' IN CUR.TIME      CUR.DATE.TIME=DATE():CUR.TIME      LAST.UPDATE.DELTA=CUR.DATE.TIME - LAST.UPDATE      IF LAST.UPDATE.DELTA < 10 THEN DATA.CURRENT=1    ENDUNTIL DATA.CURRENT DO   IF NUM(LAST.UPDATE) THEN      IF NOT(RECALC.REQUESTED) THEN         BEGIN CASE            CASE PLATFORM = 'D3' OR PLATFORM = 'JB'               EXECUTE "Z REFRESH.DASHBOARD.MTD.STATS ":REPORT.TYPE CAPTURING DUMMY            CASE 1               EXECUTE "PHANTOM REFRESH.DASHBOARD.MTD.STATS ":REPORT.TYPE CAPTURING DUMMY         END CASE         RECALC.REQUESTED=1       END    END   SLEEP 2REPEATREAD REPORT.STATS.REC FROM FI.DICT, REPORT.STATS.ID ELSE REPORT.STATS.REC=''WRITE REPORT.STATS.REC ON FI.MVDB.SUBS, 'REPORT.STATS.REC'RETURNEND0051AFREFRESH.DASHBOARD.MTD.STATS0c2** PHANTOM PROGRAM TO CALCULATE MTD SALES, AR, AP, AND NET INCOME NUMBERS*OPEN.ERRORS=''OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE OPEN.ERRORS:=' MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'DIM SETUP.PARAMS(25)IF PLATFORM = 'D3' THEN CMND=SENTENCE() ELSE CMND=@SENTENCECMND=TRIM(CMND)OPTION.PARAM=FIELD(CMND,' ',DCOUNT(CMND,' '))IF OPTION.PARAM = 'SALES' OR OPTION.PARAM = 'ALL' THEN   OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.CLOSING.STATS ELSE OPEN.ERRORS:=' DICT DASHBOARD.CLOSING.STATS' ENDIF OPTION.PARAM <> 'SALES' THEN   OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.BALANCES ELSE OPEN.ERRORS:=' DICT DASHBOARD.BALANCES' ENDEXECUTE "TERM 132,20000"*BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='MD'END CASEOPEN '',MD.FILE.NAME TO FI.MD ELSE   OPEN.ERRORS:=' ':MD.FILE.NAME ENDIF OPEN.ERRORS <> '' THEN STOP*DAYS.AGO.60=DATE()-60DAYS.AGO.1000=DATE()-1000ALL.GOOD=1BEGIN CASE   CASE OPTION.PARAM = 'SALES'; GOSUB CALC.SALES   CASE OPTION.PARAM = 'AR'; GOSUB CALC.AR   CASE OPTION.PARAM = 'AP'; GOSUB CALC.AP   CASE OPTION.PARAM = 'NET.INCOME'; GOSUB CALC.NET.INCOME   CASE OPTION.PARAM = 'ALL'      GOSUB CALC.SALES      GOSUB CALC.AR      GOSUB CALC.AP      GOSUB CALC.NET.INCOME      IF ALL.GOOD THEN         DICT.FILE=FI.DICT.BALANCES         TIME.STAMP.TYPE='ALL'         GOSUB UPDATE.TIME.STAMP       END   CASE 1; NULLEND CASESTOP*CALC.SALES:*DICT.FILE=FI.DICT.CLOSING.STATSMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' ENDEQUATE ACCOUNT TO SETUP.PARAMS(1)EQUATE REPORT.FILE TO SETUP.PARAMS(2)EQUATE SALE.DATE.DICT TO SETUP.PARAMS(3)EQUATE SALE.MONTH.DICT TO SETUP.PARAMS(4)EQUATE SALE.YEAR.DICT TO SETUP.PARAMS(5)EQUATE SALE.AMOUNT.DICT TO SETUP.PARAMS(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO SETUP.PARAMS(7)EQUATE SALESMAN.DICT TO SETUP.PARAMS(8)EQUATE BRANCH.DICT TO SETUP.PARAMS(9)EQUATE REGION.DICT TO SETUP.PARAMS(10)EQUATE SALE.DATE.AMC TO SETUP.PARAMS(11)EQUATE SALE.AMOUNT.AMC TO SETUP.PARAMS(12)EQUATE SALE.AMOUNT.CONV TO SETUP.PARAMS(13)EQUATE SALE.AMOUNT.COOR TO SETUP.PARAMS(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO SETUP.PARAMS(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO SETUP.PARAMS(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO SETUP.PARAMS(17)EQUATE SALESMAN.AMC TO SETUP.PARAMS(18)EQUATE SALESMAN.TFILE TO SETUP.PARAMS(19)EQUATE BRANCH.AMC TO SETUP.PARAMS(20)EQUATE BRANCH.TFILE TO SETUP.PARAMS(21)EQUATE REGION.AMC TO SETUP.PARAMS(22)EQUATE REGION.TFILE TO SETUP.PARAMS(23)OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'SALES.FILE.PATH='SALES.FILE.PATH'**IF PLATFORM = 'UD' THEN**   QFILE.NAME=SALES.FILE.PATH**   CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.QFILE)** END ELSE**   MD.QFILE='Q'**   MD.QFILE<2>=ACCOUNT**   MD.QFILE<3>=REPORT.FILE**   WRITE MD.QFILE ON FI.MD, 'SALES.FILE.PATH'** ENDQFILE.NAME=SALES.FILE.PATHCALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.QFILE)TIME.STAMP.TYPE='SALES'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':SALE.DATE.DICT:' ':SALE.DATE.DICT:' PIPE ':SALE.AMOUNT.DICT:' PIPE ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)WRITE STACKED.2 ON FI.MVDB.CONTROL, 'SALES.REPORT.CMND'WRITE REPORT ON FI.MVDB.CONTROL, 'SALES.REPORT.RESULT'IF NOT(SYSTEM.11) THEN   WRITE 'ERROR: NO SALES CLOSED SINCE BEGINNING OF MONTH' ON FI.DICT.CLOSING.STATS, '*CURRENT.SALES.STATS'   GOSUB UPDATE.TIME.STAMP   SALES.STATS=''**   RETURN** END END ELSE   DATES=''   DATE.CNTR=0   LAST.DATE=''   AMOUNTS=''   COSTS=''   MAX.ROWS=DCOUNT(REPORT,CHAR(254))   FOR ROW.NO = 1 TO MAX.ROWS      ROW=REPORT<ROW.NO>      IF INDEX(ROW,'|',1) THEN         ROW.DATE=TRIM(FIELD(ROW,'|',1))         AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')         COST=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')         IF NUM(AMOUNT) THEN            IF ROW.DATE <> LAST.DATE THEN               LAST.DATE=ROW.DATE               DATE.CNTR+=1               DATES<1,DATE.CNTR>=ROW.DATE               AMOUNTS<1,DATE.CNTR>=0               COSTS<1,DATE.CNTR>=0             END            AMOUNTS<1,DATE.CNTR>+=AMOUNT            COSTS<1,DATE.CNTR>+=COST          END       END    NEXT ROW.NO   VALUE.CNTR=0   SALES.STATS=''   FOR AMT.CNTR = 1 TO DATE.CNTR      COST=COSTS<1,AMT.CNTR>      AMOUNT=AMOUNTS<1,AMT.CNTR>      IF AMOUNT OR COST THEN         VALUE.CNTR+=1         ROW.DATE=ICONV(DATES<1,AMT.CNTR>,'D')         ROW.DATE=OCONV(ROW.DATE,'D0')         SALES.STATS<1,VALUE.CNTR>=ROW.DATE         SALES.STATS<2,VALUE.CNTR>=AMOUNT         SALES.STATS<3,VALUE.CNTR>=COST       END    NEXT AMT.CNTR ENDWRITE SALES.STATS ON DICT.FILE, '*CURRENT.SALES.STATS'*EXECUTE "REFRESH.DASHBOARD.CLOSING.STATS" CAPTURING DUMMY*GOSUB UPDATE.TIME.STAMPRETURN*CALC.AR:** PERIOD.AMOUNTS DATA LAYOUT* 1 PERIOD 1 AMOUNT* 2 PERIOS 2 AMOUNT* 3 PERIOD 3 AMOUNT* 4 PERIOD 4 AMOUNT* 5* 6 YEAR ] YEAR ] YEAR* 7 PERIOD 1 NUMBER \ PERIOD 2 NUMBER \ PERIOD 3 NUMBER \ PERIOD 4 NUMBER * 8 PERIOD 1 AMOUNT \ PERIOD 2 AMOUNT \ PERIOD 3 AMOUNT \ PERIOD 4 AMOUNT * 9 PERIOD 1 TOTAL DAYS ? PERIOD 2 TOTAL DAYS ? ETC* 10 YEAR 1 JAN # PAID\ FEB # PAID ... ] YEAR 2 JAN # PAID \* 11 YEAR 1 JAN # TOTAL DAYS \ FEB TOTAL DAYS ....* 12 CUSTOMER ] CUSTOMER ]* 13 CUSTOMER AMT DUE ] ] ]* 14 LARGEST DAYS DUE ] ] ]* 15 TOTAL DAYS LAST 1000 DAYS ] ] ]* 16 NUMBER OF ARS LAST 1000 DAYS ] ] ]* 17 TOTAL DAYS LAST 60 DAYS ] ] ]* 18 NUMBER OF ARS LAST 60 DAYS ] ] ]* 19 customers  ] ] ] for 50 highest amounts due* 20 amounts ] ] ] for 50 highest amounts due* 21 customers ] ] ] for 50 highest days due* 22 days due ] ] ] for 50 highest days due* 23 customer ] ] ] ] ] for 50 highest percent increase* 24 percentage increase from 1000 day average to 60 day average for highest 50**DICT.FILE=FI.DICT.BALANCESMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' END*EQUATE AR.ACCOUNT TO SETUP.PARAMS(1)EQUATE AR.REPORT.FILE TO SETUP.PARAMS(2)EQUATE AR.DUE.DATE.DICT TO SETUP.PARAMS(3)EQUATE AR.DATE.PAID.DICT TO SETUP.PARAMS(4)EQUATE AR.INVOICE.AMT.DICT TO SETUP.PARAMS(5)EQUATE AR.BALANCE.DICT TO SETUP.PARAMS(6)EQUATE AR.DUE.DATE.AMC TO SETUP.PARAMS(8)EQUATE AR.DATE.PAID.AMC TO SETUP.PARAMS(9)EQUATE AR.INVOICE.AMT.AMC TO SETUP.PARAMS(10)EQUATE AR.INVOICE.AMT.CONV TO SETUP.PARAMS(11)EQUATE AR.INVOICE.AMT.COOR TO SETUP.PARAMS(12)EQUATE AR.BALANCE.AMC TO SETUP.PARAMS(13)EQUATE AR.BALANCE.CONV TO SETUP.PARAMS(14)EQUATE AR.BALANCE.COOR TO SETUP.PARAMS(15)EQUATE AR.CUSTOMER.DICT TO SETUP.PARAMS(16)EQUATE AR.CUSTOMER.AMC TO SETUP.PARAMS(17)EQUATE AR.CUSTOMER.TFILE TO SETUP.PARAMS(18)*AR.FILE.PATH='AR.FILE.PATH'QFILE.NAME=AR.FILE.PATH**OPEN '',AR.FILE.PATH TO FI.AR.FILE.PATH ELSE**IF PLATFORM = 'UD' THEN**   QFILE.NAME=AR.FILE.PATH**   CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.AR.FILE.PATH)**   IF QFILE.NAME = '' THEN**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** END ELSE**   MD.QFILE='Q'**   MD.QFILE<2>=ACCOUNT**   MD.QFILE<3>=REPORT.FILE**   WRITE MD.QFILE ON FI.MD, 'AR.FILE.PATH'**   OPEN '','AR.FILE.PATH' TO FI.AR.FILE.PATH ELSE**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** ENDCALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)IF QFILE.NAME = '' THEN   WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'   GOSUB UPDATE.TIME.STAMP   ALL.GOOD=0   RETURN ENDEXECUTE "CREATE-INDEX AR.FILE.PATH ":AR.DUE.DATE.DICT CAPTURING DUMMY** END***EXECUTE 'SELECT ':AR.FILE.PATH:' WITH ':AR.BALANCE.DICT:' > "0"' CAPTURING DUMMY**IF NOT(SYSTEM(11)) THEN**   WRITE 'ERROR: NO OUTSTANDING RECEIVABLES' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'**   GOSUB UPDATE.TIME.STAMP**   ALL.GOOD=0**   RETURN** END**CMND='SORT ':AR.FILE.PATH:' BY ':AR.DUE.DATE.DICT:' BREAK-ON ':AR.DUE.DATE.DICT:' PIPE TOTAL ':AR.BALANCE.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CMND='SORT ':AR.FILE.PATH:' WITH ':AR.INVOICE.AMT.DICT:' > "0" BY ':AR.DUE.DATE.DICTCMND:=' PIPE ':AR.DUE.DATE.DICT:' PIPE ':AR.DATE.PAID.DICT:' PIPE ':AR.INVOICE.AMT.DICTCMND:=' PIPE ':AR.BALANCE.DICT:' PIPE ':AR.CUSTOMER.DICT:' HDR-SUPP COL-HDR-SUPP NOPAGE'WRITE CMND ON FI.MVDB.CONTROL, 'AR.REPORT.CMND'EXECUTE CMND CAPTURING REPORTCONVERT '$,' TO '' IN REPORTWRITE REPORT ON FI.MVDB.CONTROL, 'AR.REPORT'* SETUP AGING PERIODS OF 0, 1-30, 31-60, 61-90, AND 90+PERIODS=0:@AM:1:@AM:31:@AM:61:@AM:91PERIOD.AMOUNTS=''CUSTOMERS=''NUM.CUSTS=0CUST.AMT.DUES=''CUST.MOST.DAYS.DUE=''CUST.TOTAL.1000.DAYS=''CUST.NUM.1000.DAYS=''CUST.TOTAL.60.DAYS=''CUST.NUM.60.DAYS=''DATES=''DATE.CNTR=0LAST.DATE=''AMOUNTS=''ROW.NO=0* BUILD LAST 5 YEARSFIVE.YEARS=''FIRST.YEAR=(OCONV(DATE(),'D4-')[7,4])-4FOR YEAR.CNTR = 0 TO 4   FIVE.YEARS<1,-1>=FIRST.YEAR+YEAR.CNTR NEXT YEAR.CNTRPERIOD.AMOUNTS<6>=FIVE.YEARSMAX.ROWS=DCOUNT(REPORT,@AM)LOOP   ROW.NO+=1   ROW=REPORT<ROW.NO>UNTIL ROW.NO > MAX.ROWS DO   IF INDEX(ROW,'|',1) THEN      ROW.DATE=TRIM(FIELD(ROW,'|',2))      DUE.DATE=ICONV(ROW.DATE,'D')      IF DUE.DATE = ROW.DATE OR NOT(NUM(DUE.DATE)) THEN DUE.DATE=''      IF DUE.DATE THEN         DUE.YEAR=OCONV(DUE.DATE,'D4-')[7,4]         LOCATE DUE.YEAR IN FIVE.YEARS<1> SETTING YEAR.POS ELSE YEAR.POS=0         PAID.DATE=TRIM(FIELD(ROW,'|',3))         NEXT.ROW.NO=ROW.NO+1         LOOP            NEXT.ROW=TRIM(REPORT<NEXT.ROW.NO>)         UNTIL INDEX(NEXT.ROW,'|',1) OR NEXT.ROW = '' DO            NEXT.PAID.DATE=NEXT.ROW            IF NEXT.PAID.DATE <> '' THEN PAID.DATE=NEXT.PAID.DATE            NEXT.ROW.NO+=1         REPEAT         ROW.NO=NEXT.ROW.NO-1         IF PAID.DATE <> '' THEN            PAID.DATE=ICONV(PAID.DATE,'D')            PAID.MO=OCONV(PAID.DATE,'D2-')[1,2]            PAID.MO+=0            PAID.YEAR=OCONV(PAID.DATE,'D4-')[7,4]            LOCATE PAID.YEAR IN FIVE.YEARS<1> SETTING PAID.YEAR.POS ELSE PAID.YEAR.POS=0            PAID.DAYS=PAID.DATE-DUE.DATE          END ELSE            PAID.MO=''            PAID.YEAR=''            PAID.DAYS=''            PAID.YEAR.POS=''          END         INV.AMOUNT=ICONV(TRIM(FIELD(ROW,'|',4)),'MD2')         REM.BALANCE=ICONV(TRIM(FIELD(ROW,'|',5)),'MD2')         CUSTOMER=TRIM(FIELD(ROW,'|',6))         CUSTOMER.POS=0         IF NUM(INV.AMOUNT) AND NUM(REM.BALANCE) THEN            IF CUSTOMER <> '' THEN               IF REM.BALANCE OR PAID.DATE >= DAYS.AGO.1000 THEN                  LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUSTOMER.POS ELSE                     NUM.CUSTS+=1                     CUSTOMER.POS=NUM.CUSTS                     CUSTOMERS<1,CUSTOMER.POS>=CUSTOMER                   END                END             END            IF REM.BALANCE OR NOT(PAID.DATE) THEN               DAYS.DUE=DATE()-DUE.DATE             END ELSE               DAYS.DUE=PAID.DATE-DUE.DATE             END            IF DAYS.DUE < 0 THEN DAYS.DUE=0            LOCATE DAYS.DUE IN PERIODS BY "AR" SETTING PERIOD ELSE PERIOD=PERIOD-1            IF REM.BALANCE THEN               PERIOD.AMOUNTS<PERIOD>+=REM.BALANCE               IF CUSTOMER.POS AND DAYS.DUE THEN                  CUST.AMT.DUES<1,CUSTOMER.POS>=CUST.AMT.DUES<1,CUSTOMER.POS>+REM.BALANCE                  IF DAYS.DUE > CUST.MOST.DAYS.DUE<1,CUSTOMER.POS> THEN                     CUST.MOST.DAYS.DUE<1,CUSTOMER.POS>=DAYS.DUE                   END                END             END            IF DAYS.DUE AND CUSTOMER.POS THEN               IF PAID.DATE THEN                  PAID.OR.TODAY=PAID.DATE                END ELSE                  PAID.OR.TODAY=DATE()                END               IF PAID.OR.TODAY >= DAYS.AGO.1000 THEN; * PAID IN LAST 1000 DAYS                  CUST.TOTAL.1000.DAYS<1,CUSTOMER.POS>=CUST.TOTAL.1000.DAYS<1,CUSTOMER.POS>+DAYS.DUE                  CUST.NUM.1000.DAYS<1,CUSTOMER.POS>=CUST.NUM.1000.DAYS<1,CUSTOMER.POS>+1                  IF PAID.OR.TODAY >= DAYS.AGO.60 THEN; * PAID IN LAST 60 DAYS                     CUST.TOTAL.60.DAYS<1,CUSTOMER.POS>=CUST.TOTAL.60.DAYS<1,CUSTOMER.POS>+DAYS.DUE                     CUST.NUM.60.DAYS<1,CUSTOMER.POS>=CUST.NUM.60.DAYS<1,CUSTOMER.POS>+1                   END                END             END            IF PAID.YEAR.POS THEN               IF YEAR.POS AND PERIOD THEN                  PERIOD.AMOUNTS<7,YEAR.POS,PERIOD>=PERIOD.AMOUNTS<7,YEAR.POS,PERIOD>+1                  PERIOD.AMOUNTS<8,YEAR.POS,PERIOD>=PERIOD.AMOUNTS<8,YEAR.POS,PERIOD>+INV.AMOUNT                  PERIOD.AMOUNTS<9,YEAR.POS>=PERIOD.AMOUNTS<9,YEAR.POS>+DAYS.DUE                END               PERIOD.AMOUNTS<10,PAID.YEAR.POS,PAID.MO>=PERIOD.AMOUNTS<10,PAID.YEAR.POS,PAID.MO>+1               PERIOD.AMOUNTS<11,PAID.YEAR.POS,PAID.MO>=PERIOD.AMOUNTS<11,PAID.YEAR.POS,PAID.MO>+PAID.DAYS             END          END       END    ENDREPEATPERIOD.AMOUNTS<12>=CUSTOMERSPERIOD.AMOUNTS<13>=CUST.AMT.DUESPERIOD.AMOUNTS<14>=CUST.MOST.DAYS.DUEPERIOD.AMOUNTS<15>=CUST.TOTAL.1000.DAYSPERIOD.AMOUNTS<16>=CUST.NUM.1000.DAYSPERIOD.AMOUNTS<17>=CUST.TOTAL.60.DAYSPERIOD.AMOUNTS<18>=CUST.NUM.60.DAYS*** GET THE 50 HIGHEST AMOUNTS DUE*HIGHEST.AMTS=''HIGHEST.AMTS.CUSTS=''MAX.CUSTS=DCOUNT(CUSTOMERS,@VM)FOR I = 1 TO MAX.CUSTS   MAX.AMT=CUST.AMT.DUES<1,I>   IF MAX.AMT THEN      LOCATE MAX.AMT IN HIGHEST.AMTS<1> BY "DR" SETTING POS ELSE NULL      IF POS <= 50 THEN         HIGHEST.AMTS=INSERT(HIGHEST.AMTS,1,POS,0,MAX.AMT)         HIGHEST.AMTS.CUSTS=INSERT(HIGHEST.AMTS.CUSTS,1,POS,0,CUSTOMERS<1,I>)       END    END NEXT IPERIOD.AMOUNTS<19>=HIGHEST.AMTS.CUSTSPERIOD.AMOUNTS<20>=HIGHEST.AMTS*** GET THE 50 HIGHEST DUE DAYS*HIGHEST.DAYS=''HIGHEST.DAYS.CUSTS=''FOR I = 1 TO MAX.CUSTS   CUST.DAYS.DUE=CUST.MOST.DAYS.DUE<1,I>   IF CUST.DAYS.DUE THEN      LOCATE CUST.DAYS.DUE IN HIGHEST.DAYS<1> BY "DR" SETTING POS ELSE NULL      IF POS <= 50 THEN         HIGHEST.DAYS=INSERT(HIGHEST.DAYS,1,POS,0,CUST.DAYS.DUE)         HIGHEST.DAYS.CUSTS=INSERT(HIGHEST.DAYS.CUSTS,1,POS,0,CUSTOMERS<1,I>)       END    END NEXT IPERIOD.AMOUNTS<21>=HIGHEST.DAYS.CUSTSPERIOD.AMOUNTS<22>=HIGHEST.DAYS*** GET THE 50 CUSTOMERS WITH HIGHEST PERCENTAGE INCREASES*HIGHEST.INCREASE.PCTS=''HIGHEST.INCREASE.CUSTS=''HIGHEST.INCREASE.60.DAYS=''HIGHEST.INCREASE.1000.DAYS=''FOR I = 1 TO MAX.CUSTS   DAYS.1000=CUST.TOTAL.1000.DAYS<1,I>   NUM.1000=CUST.NUM.1000.DAYS<1,I>   DAYS.60=CUST.TOTAL.60.DAYS<1,I>   NUM.60=CUST.NUM.60.DAYS<1,I>   IF NUM.1000 THEN      AVG.1000=DAYS.1000 / NUM.1000    END ELSE AVG.1000=0   IF NUM.60 THEN      AVG.60=DAYS.60 / NUM.60    END ELSE AVG.60=0   AVG.INCREASE=AVG.60 - AVG.1000   IF AVG.INCREASE > 0 AND AVG.60 > 300 THEN;  * MUST BE DUE OVER 30 DAYS      IF AVG.1000 THEN         PCT.INCREASE=INT(AVG.INCREASE * 1000 / AVG.1000 + .5)         PCT.INCREASE=OCONV(PCT.INCREASE,'MD1')       END ELSE PCT.INCREASE=0      LOCATE PCT.INCREASE IN HIGHEST.INCREASE.PCTS<1> BY "DR" SETTING POS ELSE NULL      IF POS <= 50 THEN         HIGHEST.INCREASE.PCTS=INSERT(HIGHEST.INCREASE.PCTS,1,POS,0,PCT.INCREASE)         HIGHEST.INCREASE.CUSTS=INSERT(HIGHEST.INCREASE.CUSTS,1,POS,0,CUSTOMERS<1,I>)         HIGHEST.INCREASE.1000.DAYS=INSERT(HIGHEST.INCREASE.1000.DAYS,1,POS,0,OCONV(AVG.1000,'MD1'))         HIGHEST.INCREASE.60.DAYS=INSERT(HIGHEST.INCREASE.60.DAYS,1,POS,0,OCONV(AVG.60,'MD1'))       END    END NEXT IPERIOD.AMOUNTS<23>=HIGHEST.INCREASE.CUSTSPERIOD.AMOUNTS<24>=HIGHEST.INCREASE.PCTSPERIOD.AMOUNTS<25>=HIGHEST.INCREASE.60.DAYSPERIOD.AMOUNTS<26>=HIGHEST.INCREASE.1000.DAYS*TIME.STAMP.TYPE='AR'DICT.FILE=FI.DICT.BALANCESGOSUB UPDATE.TIME.STAMPWRITE PERIOD.AMOUNTS ON DICT.FILE, '*CURRENT.AR.STATS'RETURN*CALC.AP:*DICT.FILE=FI.DICT.BALANCESMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' END*EQUATE AP.ACCOUNT TO SETUP.PARAMS(1)EQUATE AP.REPORT.FILE TO SETUP.PARAMS(2)EQUATE AP.DUE.DATE.DICT TO SETUP.PARAMS(3)EQUATE AP.DATE.PAID.DICT TO SETUP.PARAMS(4)EQUATE AP.INVOICE.AMT.DICT TO SETUP.PARAMS(5)EQUATE AP.BALANCE.DICT TO SETUP.PARAMS(6)EQUATE AP.DUE.DATE.AMC TO SETUP.PARAMS(8)EQUATE AP.DATE.PAID.AMC TO SETUP.PARAMS(9)EQUATE AP.INVOICE.AMT.AMC TO SETUP.PARAMS(10)EQUATE AP.INVOICE.AMT.CONV TO SETUP.PARAMS(11)EQUATE AP.INVOICE.AMT.COOR TO SETUP.PARAMS(12)EQUATE AP.BALANCE.AMC TO SETUP.PARAMS(13)EQUATE AP.BALANCE.CONV TO SETUP.PARAMS(14)EQUATE AP.BALANCE.COOR TO SETUP.PARAMS(15)*AP.FILE.PATH='AP.FILE.PATH'QFILE.NAME=AP.FILE.PATH**OPEN '',AP.FILE.PATH TO FI.AP.FILE.PATH ELSE**IF PLATFORM = 'UD' THEN**   QFILE.NAME=AP.FILE.PATH**   CALL CREATE.UD.QPOINTER(ACCOUNT,AP.REPORT.FILE,QFILE.NAME,FI.AP.FILE.PATH)**   IF QFILE.NAME = '' THEN**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** END ELSE**   MD.QFILE='Q'**   MD.QFILE<2>=AP.ACCOUNT**   MD.QFILE<3>=AP.REPORT.FILE**   WRITE MD.QFILE ON FI.MD, 'AP.FILE.PATH'**   OPEN '','AP.FILE.PATH' TO FI.AP.FILE.PATH ELSE**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** ENDCALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)IF QFILE.NAME = '' THEN   WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'   GOSUB UPDATE.TIME.STAMP   ALL.GOOD=0   RETURN ENDEXECUTE "CREATE-INDEX AP.FILE.PATH ":AP.DUE.DATE.DICT CAPTURING DUMMY** END*STACKED.1='SELECT ':AP.FILE.PATH:' WITH ':AP.BALANCE.DICT:' > "0"'STACKED.2='SORT ':AP.FILE.PATH:' BY ':AP.DUE.DATE.DICT:' BREAK-ON ':AP.DUE.DATE.DICT:' PIPE TOTAL ':AP.BALANCE.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)WRITE STACKED.2 ON FI.MVDB.CONTROL, 'AP.CMND'WRITE REPORT ON FI.MVDB.CONTROL, 'AP.REPORT'IF NOT(SYSTEM.11) THEN   WRITE 'ERROR: NO OUTSTANDING PAYABLES' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'   GOSUB UPDATE.TIME.STAMP**   ALL.GOOD=0**   RETURN** END   PERIOD.AMOUNTS='' END ELSE   * SETUP AGING PERIODS OF 0, 1-30, 31-60, 61-90, AND 90+   PERIODS=0:@AM:1:@AM:31:@AM:61:@AM:91   PERIOD.AMOUNTS=''   DATES=''   DATE.CNTR=0   LAST.DATE=''   AMOUNTS=''   MAX.ROWS=DCOUNT(REPORT,CHAR(254))   FOR ROW.NO = 1 TO MAX.ROWS      ROW=REPORT<ROW.NO>      IF INDEX(ROW,'|',1) THEN         ROW.DATE=TRIM(FIELD(ROW,'|',1))         DUE.DATE=ICONV(ROW.DATE,'D')         IF DUE.DATE = ROW.DATE OR NOT(NUM(DUE.DATE)) THEN DUE.DATE=''         IF DUE.DATE THEN            AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')            IF NUM(AMOUNT) THEN               DAYS.DUE=DATE()-DUE.DATE               IF DAYS.DUE < 0 THEN DAYS.DUE=0               LOCATE DAYS.DUE IN PERIODS BY "AR" SETTING PERIOD ELSE PERIOD=PERIOD-1               PERIOD.AMOUNTS<PERIOD>+=AMOUNT             END          END       END    NEXT ROW.NO END*TIME.STAMP.TYPE='AP'DICT.FILE=FI.DICT.BALANCESGOSUB UPDATE.TIME.STAMPWRITE PERIOD.AMOUNTS ON DICT.FILE, '*CURRENT.AP.STATS'*CALC.NET.INCOME:*TIME.STAMP.TYPE='NET.INCOME'DICT.FILE=FI.DICT.BALANCESGOSUB UPDATE.TIME.STAMPWRITE 999 ON DICT.FILE, '*CURRENT.NET.INCOME.STATS'RETURN*UPDATE.TIME.STAMP:*TIME.STAMP=TIME()TIME.STAMP=STR('0',5-LEN(TIME.STAMP)):TIME.STAMPWRITE DATE():TIME.STAMP ON DICT.FILE, '*LAST.UPDATE.':TIME.STAMP.TYPEWRITE DATE():TIME.STAMP ON DICT.FILE, '*LAST.UPDATED.':TIME.STAMP.TYPERETURNEND0007DFSUB.DEMO.SINGLE.MONTH.SALES.BY.REP0c2SUBROUTINE SUB.DEMO.SINGLE.MONTH.SALES.BY.REP***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEMONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'CONVERT ',' TO CHAR(254) IN MONTHSOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPMATWRITE WIDGET.USER.DATA ON FILE.CONTROL, 'DEBUG'READV YEARS FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE', 67 ELSE   YEARS='2013,2014,2015'   CONVERT ',' TO CHAR(253) IN YEARS ENDREVENUE.OR.GP=WIDGET.USER.DATA(1)YEAR=WIDGET.USER.DATA(2)MONTH=WIDGET.USER.DATA(3)LOCATE MONTH IN MONTHS SETTING MONTH.SVM ELSE MONTH.SVM=1YEAR.DETAIL.ID=''BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE=MONTH:' ':YEAR:' Sales By Sales Rep'      W$BAR.YMEMO = "Sales"      YEAR.DETAIL.ID='SALES.':YEAR      MAX.ROUNDER=150000   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE=MONTH:' ':YEAR:' Gross Profit By Sales Rep'      W$BAR.YMEMO = "Gross Profit"      YEAR.DETAIL.ID='GPS.':YEAR      MAX.ROUNDER=50000END CASEREAD REC FROM FILE.CONTROL, YEAR.DETAIL.ID ELSE REC=''*REPS=REC<1>**MAX.SALES.AMT=0N=0FIRST.YEAR=''MAX.REPS=DCOUNT(REPS,CHAR(253))FOR NN = 1 TO MAX.REPS   REP=REPS<1,NN>   SALES.AMT=REC<2,NN,MONTH.SVM>   SALES.AMT=OCONV(SALES.AMT,'MD02')   IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT   W$BAR.VALUES<1,NN> = SALES.AMT   W$BAR.XLABELS<1,NN> = REPNEXT NNW$BAR.XMEMO = "Sales Rep"* ROUND MAX AMOUNT UP TO THE NEXT MAX.ROUNDERMAX.SALES.AMT+=MAX.ROUNDERMAX.SALES.AMT=INT(MAX.SALES.AMT/MAX.ROUNDER) * MAX.ROUNDERW$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'RETURN0002FASUB.TEST.WIDGET0c2SUBROUTINE SUB.TEST.WIDGET** Copyright (c) 2010 SB, Inc. All rights reserved.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Neat Pie Chart"W$TYPE = "FC2DPIE"W$WIDTH = 1 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$PIE.CAPTION = "MV Dashboard Survey"*W$PIE.LABELS<1,1> = "Love it"W$PIE.LABELS<1,2> = "Like it"W$PIE.LABELS<1,3> = "Very nice"W$PIE.LABELS<1,4> = "Awesome!"*W$PIE.VALUES<1,1> = "1560"W$PIE.VALUES<1,2> = "400"W$PIE.VALUES<1,3> = "1012"W$PIE.VALUES<1,4> = "4065"** For a 2D pie, a specific slice can be separated from the pie* by setting this value:* W$PIE.VALUE.OPTS<1,3> = 'isSliced="1"'** To show percentages instead of values, use this:W$CHART.OPTIONS<-1> = "showPercentValues='1'"RETURN003DCBSUB.PORTAL.DASHBOARD0c2SUBROUTINE SUB.PORTAL.DASHBOARD** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) Zumasys, Inc*WEB$TITLE='MVDashboard Portal Financial Picture'WEB.FORM.NAME='PORTAL.DASHBOARD'W$TYPE='HTML'W$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*EQUATE AR.AMOUNTS TO GLOBAL.USER.DATA(1)EQUATE AP.AMOUNTS TO GLOBAL.USER.DATA(2)OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE    ERROR.MSG<-1>='UNABLE TO OPEN MVDB.CONTROL'   GOTO DISPLAY.ERROR ENDREAD PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'END CASEOPEN '','DASHBOARD.CLOSING.STATS' TO FI.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.CLOSING.STATS ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN '','DASHBOARD.BALANCES' TO FI.DASHBOARD.BALANCES ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DASHBOARD.BALANCES'   GOTO DISPLAY.ERROR ENDREAD PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'ERROR.MSG=''DIM SALES.SETUP.PARAMS(20), AR.SETUP.PARAMS(20), AP.SETUP.PARAMS(20), NET.INCOME.SETUP.PARAMS(20)*MATREAD SALES.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SALES.SETUP.PARAMS='' ENDEQUATE SALES.ACCOUNT TO SALES.SETUP.PARAMS(1)EQUATE SALES.REPORT.FILE TO SALES.SETUP.PARAMS(2)EQUATE SALES.DATE.DICT TO SALES.SETUP.PARAMS(3)EQUATE SALES.AMOUNT.DICT TO SALES.SETUP.PARAMS(6)EQUATE GP.DICT.NAME TO SALES.SETUP.PARAMS(7)*IF SALES.ACCOUNT = '' OR SALES.REPORT.FILE = '' OR SALES.DATE.DICT = '' OR SALES.AMOUNT.DICT = '' THEN   ERROR.MSG<-1>='SALES FILE ACCOUNT, SALES FILE NAME, DATE OF SALE, AND AMOUNT OF SALE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED' END*** BUILD SAMPLE DATA IF USING MVDB FOR SALES ACCOUNT*IF SALES.ACCOUNT = 'MVDB' THEN   EXECUTE "BUILD.SAMPLE.PORTAL.FILES" CAPTURING DUMMY END**OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.DASHBOARD.BALANCES ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DICT DASHBOARD.BALANCES'   GOTO DISPLAY.ERROR ENDMATREAD AR.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ELSE   MAT AR.SETUP.PARAMS='' END*EQUATE AR.ACCOUNT TO AR.SETUP.PARAMS(1)EQUATE AR.REPORT.FILE TO AR.SETUP.PARAMS(2)EQUATE AR.DUE.DATE.DICT TO AR.SETUP.PARAMS(3)EQUATE AR.BALANCE.DICT TO AR.SETUP.PARAMS(6)****IF AR.ACCOUNT = '' OR AR.REPORT.FILE = '' OR AR.DUE.DATE.DICT = '' OR AR.BALANCE.DICT = '' THEN**   ERROR.MSG<-1>='AR FILE ACCOUNT, AR FILE NAME, DUE DATE, AND BALANCE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'***   GOTO DISPLAY.ERROR** END*MATREAD AP.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ELSE   MAT AP.SETUP.PARAMS='' END*EQUATE AP.ACCOUNT TO AP.SETUP.PARAMS(1)EQUATE AP.REPORT.FILE TO AP.SETUP.PARAMS(2)EQUATE AP.DUE.DATE.DICT TO AP.SETUP.PARAMS(3)EQUATE AP.BALANCE.DICT TO AP.SETUP.PARAMS(6)****IF AP.ACCOUNT = '' OR AP.REPORT.FILE = '' OR AP.DUE.DATE.DICT = '' OR AP.BALANCE.DICT = '' THEN**   ERROR.MSG<-1>='AP FILE ACCOUNT, AP FILE NAME, DUE DATE, AND BALANCE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'***   GOTO DISPLAY.ERROR** END***MATREAD NET.INCOME.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.NET.INCOME.REPORT.SETUP' ELSE**   MAT NET.INCOME.SETUP.PARAMS=''** END*EQUATE NET.INCOME.ACCOUNT TO NET.INCOME.SETUP.PARAMS(1)EQUATE NET.INCOME.REPORT.FILE TO NET.INCOME.SETUP.PARAMS(2)EQUATE NET.INCOME.DUE.DATE.DICT TO NET.INCOME.SETUP.PARAMS(3)EQUATE NET.INCOME.BALANCE.DICT TO NET.INCOME.SETUP.PARAMS(6)****IF NET.INCOME.ACCOUNT = '' OR NET.INCOME.REPORT.FILE = '' OR NET.INCOME.DUE.DATE.DICT = '' OR NET.INCOME.BALANCE.DICT = '' THEN**   ERROR.MSG<-1>='NET INCOME FILE ACCOUNT, NET INCOME FILE NAME, DUE DATE, AND BALANCE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'***   GOTO DISPLAY.ERROR** END*IF ERROR.MSG <> '' THEN***   GOTO DISPLAY.ERROR END** START ANY REQUIRED BACKGROUND CALCULATIONS*CUR.TIME=TIME()CUR.TIME=FIELD(CUR.TIME,'.',1)CUR.TIME=STR('0',5-LEN(CUR.TIME)):CUR.TIMECUR.DATE.TIME=DATE():CUR.TIME*** SALES*READU SALES FROM FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES' ELSE SALES=''BEGIN CASE   CASE SALES = 'UPDATING'; SALES.STATUS='UPDATING'   CASE NOT(NUM(SALES)); SALES.STATUS='NEED CALC'   CASE (CUR.DATE.TIME - SALES) < 900;   * LESS THAN 15 MINUTES      SALES.STATUS='GOOD'      READ SALES.REC FROM FI.DICT.CLOSING.STATS, '*CURRENT.SALES.STATS' ELSE         SALES.STATUS='NEED CALC'       END   CASE 1; SALES.STATUS='NEED CALC'END CASEIF SALES.STATUS <> 'NEED CALC' THEN   RELEASE FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES' END*** AR*READU AR FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR' ELSE AR=''BEGIN CASE   CASE AR = 'UPDATING'; AR.STATUS='UPDATING'   CASE NOT(NUM(AR)); AR.STATUS='NEED CALC'   CASE (CUR.DATE.TIME - AR) < 900;   * LESS THAN 15 MINUTES      AR.STATUS='GOOD'      READ AR.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AR.STATS' ELSE         AR.STATUS='NEED CALC'       END   CASE 1; AR.STATUS='NEED CALC'END CASEIF AR.STATUS <> 'NEED CALC' THEN   RELEASE FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR' END*** AP*READU AP FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP' ELSE AP=''BEGIN CASE   CASE AP = 'UPDATING'; AP.STATUS='UPDATING'   CASE NOT(NUM(AP)); AP.STATUS='NEED CALC'   CASE (CUR.DATE.TIME - AP) < 900;   * LESS THAN 15 MINUTES      AP.STATUS='GOOD'      READ AP.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AP.STATS' ELSE         AP.STATUS='NEED CALC'       END   CASE 1; AP.STATUS='NEED CALC'END CASEIF AP.STATUS <> 'NEED CALC' THEN   RELEASE FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP' END******* NET.INCOME*****READU NET.INCOME FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME' ELSE NET.INCOME=''**BEGIN CASE**   CASE NET.INCOME = 'UPDATING'; NET.INCOME.STATUS='UPDATING'**   CASE NOT(NUM(NET.INCOME)); NET.INCOME.STATUS='NEED CALC'**   CASE (CUR.DATE.TIME - NET.INCOME) < 900;   * LESS THAN 15 MINUTES**      NET.INCOME.STATUS='GOOD'**      READ NET.INCOME.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.NET.INCOME.STATS' ELSE**         NET.INCOME.STATUS='NEED CALC'**       END**   CASE 1; NET.INCOME.STATUS='NEED CALC'**END CASE**IF NET.INCOME.STATUS <> 'NEED CALC' THEN**   RELEASE FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME'** END*IF SALES.STATUS <> 'GOOD' OR AR.STATUS <> 'GOOD' OR AP.STATUS <> 'GOOD' THEN ; *OR NET.INCOME.STATUS <> 'GOOD' THEN   IF SALES.STATUS = 'NEED CALC' AND AR.STATUS = 'NEED CALC' AND AP.STATUS = 'NEED CALC' THEN; *AND NET.INCOME.STATUS = 'NEED CALC' THEN      TYPE.CALC='ALL'      GOSUB INITIATE.CALC.PHANTOM      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.ALL'      WRITE 'UPDATING' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES'      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR'      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP'**      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME'    END ELSE      IF SALES.STATUS = 'NEED CALC' THEN         TYPE.CALC='SALES'         GOSUB INITIATE.CALC.PHANTOM         WRITE 'UPDATING' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES'       END      IF AR.STATUS = 'NEED CALC' THEN         TYPE.CALC='AR'         GOSUB INITIATE.CALC.PHANTOM         WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR'       END      IF AP.STATUS = 'NEED CALC' THEN         TYPE.CALC='AP'         GOSUB INITIATE.CALC.PHANTOM         WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP'       END**      IF NET.INCOME.STATUS = 'NEED CALC' THEN**         TYPE.CALC='NET.INCOME'**         GOSUB INITIATE.CALC.PHANTOM**         WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME'**       END    END   *   NOW.GOOD=1   *   ** GIVE IT 10 SECONDS TO COMPLETE ANY CALCS AND TRY AGAIN   *   SLEEP 10   *   IF SALES.STATUS <> 'GOOD' THEN      READ SALES.STATUS FROM FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES' ELSE SALES.STATUS='UPDATING'      IF NUM(SALES.STATUS) THEN         READ SALES.REC FROM FI.DICT.CLOSING.STATS, '*CURRENT.SALES.STATS' ELSE            SALES.STATUS='UPDATING'            NOW.GOOD=0          END       END ELSE         NOW.GOOD=0       END    END   *   IF AR.STATUS <> 'GOOD' THEN      READ AR.STATUS FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR' ELSE AR.STATUS='UPDATING'      IF NUM(AR.STATUS) THEN         READ AR.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AR.STATS' ELSE            AR.STATUS='UPDATING'            NOW.GOOD=0          END       END ELSE         NOW.GOOD=0       END    END   *   IF AP.STATUS <> 'GOOD' THEN      READ AP.STATUS FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP' ELSE AP.STATUS='UPDATING'      IF NUM(AP.STATUS) THEN         READ AP.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AP.STATS' ELSE            AP.STATUS='UPDATING'            NOW.GOOD=0          END       END ELSE         NOW.GOOD=0       END    END**   IF NET.INCOME.STATUS <> 'GOOD' THEN**      READ NET.INCOME.STATUS FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME' ELSE NET.INCOME.STATUS='UPDATING'**      IF NUM(NET.INCOME.STATUS) THEN**         READ NET.INCOME.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.NET.INCOME.STATS' ELSE**            NET.INCOME.STATUS='UPDATING'**            NOW.GOOD=0**          END**       END ELSE**         NOW.GOOD=0**       END**    END   *   IF NOT(NOW.GOOD) THEN      *      ** USE PROMPTS AS A WAY OF SHOWING WHICH ARE CALCULATION.  NOTHING WILL BE DONE WITH THAT CONTENT OF THE      ** PROMPT WHEN THE GO BUTTON IS CLICKED.      *      W$INPUT.PROMPT<1> = "MTD Sales Calcs"      W$INPUT.TYPE<1> = "TEXT"      W$INPUT.UDPOS<1> = 1      W$INPUT.DEFAULT<1> = SALES.STATUS      *      IF AR.REPORT.FILE <> '' THEN         W$INPUT.PROMPT<2> = "AR Calcs"         W$INPUT.TYPE<2> = "TEXT"         W$INPUT.UDPOS<2> = 2         W$INPUT.DEFAULT<2> = AR.STATUS         *         IF AP.REPORT.FILE <> '' THEN            W$INPUT.PROMPT<3> = "AP Calcs"            W$INPUT.TYPE<3> = 'TEXT'            W$INPUT.UDPOS<3> = 3            W$INPUT.DEFAULT<3> = AP.STATUS          END       END      ***      W$INPUT.PROMPT<4> = "Net Income Calcs"**      W$INPUT.TYPE<4> = 'TEXT'**      W$INPUT.UDPOS<4> = 4**      W$INPUT.DEFAULT<4> = NET.INCOME.STATUS      *      ERROR.MSG<-1>='Figures are currently updating.'      ERROR.MSG<-1>='Try again in a minute or two.'      GOTO DISPLAY.ERROR   END END*DASH.REC=''MMM.YYYY=OCONV(DATE(),'D4')[4,8]DASH.REC<1>=MMM.YYYYYYYY=FIELD(MMM.YYYY,' ',2)DASH.REC<2>=YYYYDASH.REC<9>=DASH.REC<1>DASH.REC<10>=YYYYDASH.REC<15>=OCONV(DATE(),'D2-')MTD.SALES=SUM(SALES.REC<2>); DASH.REC<3>=MTD.SALESMTD.COST.OF.SALES=SUM(SALES.REC<3>)GROSS.PROFIT=MTD.SALES-MTD.COST.OF.SALESDASH.REC<5>=GROSS.PROFITPERCENT=INT((GROSS.PROFIT*1000)/MTD.SALES + .5)DASH.REC<7>=PERCENT*** USE DASHBOARD.CLOSING.STATS TO GET YEAR TO DATE TOTALS*STACKED.1=''STACKED.2='SORT DASHBOARD.CLOSING.STATS WITH YYYY = "':YYYY:'" BY YYYY BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL COST.OF.SALE ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)MAX.ROWS=DCOUNT(REPORT,CHAR(254))YTD.SALES=0YTD.COST.OF.SALES=0FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      TEST.YYYY=TRIM(FIELD(ROW,'|',1))      IF TEST.YYYY = YYYY THEN         YTD.SALES=TRIM(FIELD(ROW,'|',2))         YTD.SALES=ICONV(YTD.SALES,'MD2')         YTD.COST.OF.SALES=TRIM(FIELD(ROW,'|',3))         YTD.COST.OF.SALES=ICONV(YTD.COST.OF.SALES,'MD2')       END    END NEXT ROW.NODASH.REC<4>=YTD.SALESGROSS.PROFIT=YTD.SALES-YTD.COST.OF.SALESIF NOT(YTD.SALES) THEN   MARGIN=0 END ELSE   MARGIN=INT(GROSS.PROFIT*1000 / YTD.SALES + .5) ENDDASH.REC<6>=GROSS.PROFITDASH.REC<8>=MARGIN*TEMP.AR.REC=AR.REC<1>:@AM:AR.REC<2>:@AM:AR.REC<3>:@AM:AR.REC<4>:@AM:AR.REC<5>SUM.AR.BALANCES=SUM(TEMP.AR.REC)DASH.REC<28>=SUM.AR.BALANCESIF SUM.AR.BALANCES THEN   DAYS.CURRENT=AR.REC<1>; DASH.REC<30>=DAYS.CURRENT; DASH.REC<31>=INT(DAYS.CURRENT*1000/SUM.AR.BALANCES + .5)   DAYS.1.30=AR.REC<2>; DASH.REC<16>=DAYS.1.30; DASH.REC<17>=INT(DAYS.1.30*1000/SUM.AR.BALANCES + .5)   DAYS.31.60=AR.REC<3>; DASH.REC<19>=DAYS.31.60; DASH.REC<20>=INT(DAYS.31.60*1000/SUM.AR.BALANCES + .5)   DAYS.61.90=AR.REC<4>; DASH.REC<22>=DAYS.61.90; DASH.REC<23>=INT(DAYS.61.90*1000/SUM.AR.BALANCES + .5)   DAYS.91=AR.REC<5>; DASH.REC<25>=DAYS.91; DASH.REC<26>=INT(DAYS.91*1000/SUM.AR.BALANCES + .5) ENDCONVERT CHAR(254) TO CHAR(253) IN TEMP.AR.RECAR.AMOUNTS=TEMP.AR.REC*SUM.AP.BALANCES=SUM(AP.REC)DASH.REC<29>=SUM.AP.BALANCESDAYS.CURRENT=AP.REC<1>; DASH.REC<32>=DAYS.CURRENTDAYS.1.30=AP.REC<2>; DASH.REC<18>=DAYS.1.30DAYS.31.60=AP.REC<3>; DASH.REC<21>=DAYS.31.60DAYS.61.90=AP.REC<4>; DASH.REC<24>=DAYS.61.90DAYS.91=AP.REC<5>; DASH.REC<27>=DAYS.91TEMP.AP.REC=AP.RECCONVERT CHAR(254) TO CHAR(253) IN TEMP.AP.RECAP.AMOUNTS=TEMP.AP.REC** DEFAULT CONVERSIONS TO $CONVS=''FOR I = 3 TO 32      CONVS<I>='$' NEXT I* CHANGE THOSE THAT AREN'TCONVS<7>='%'; CONVS<8>='%'CONVS<17>='%'; CONVS<20>='%'; CONVS<23>='%'; CONVS<26>='%'; CONVS<31>='%'CONVS<1>=''; CONVS<2>=''CONVS<9>=''; CONVS<10>=''CONVS<13>=''; CONVS<14>=''; CONVS<15>=''**W$PRINTABLE=1W$PDFABLE=1OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE RETURNBEGIN CASE   CASE AR.REPORT.FILE <> '' AND AP.REPORT.FILE <> '' AND GP.DICT.NAME <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD'   CASE GP.DICT.NAME <> '' AND AR.REPORT.FILE <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.GP.AR'   CASE GP.DICT.NAME <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.GP'   CASE AR.REPORT.FILE <> '' AND AP.REPORT.FILE <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.AR.AP'   CASE AR.REPORT.FILE <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.AR'   CASE 1      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES'END CASEREAD HTML FROM FILE.WEB.FORMS, WEB.FORM.NAME ELSE HTML=''***USER.ID=G$USERID*W$TITLE='  Portal Dashboard'; CALL PORTAL.SHOW.LAST.UPDATED('ALL')**WRITE HTML ON FILE.WEB.FORMS, 'TEST.HTML'*** DYNAMIC VARIABLES*FOR I = 1 TO 32   INSERT.FIELD=DASH.REC<I>   IF INSERT.FIELD = '' THEN INSERT.FIELD=I   CONV=CONVS<I>   BEGIN CASE      CASE CONV = ''; NULL      CASE CONV = '$'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD2,$')      CASE CONV = '%'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD1'):'%'      CASE 1; INSERT.FIELD=OCONV(INSERT.FIELD,CONV)   END CASE   IF INSERT.FIELD = '' THEN INSERT.FIELD='&nbsp;'   CALL SWAP(HTML,'~':I:'~',INSERT.FIELD) NEXT I   *W$TEXT.DATA=HTMLWRITE HTML ON FILE.WEB.FORMS, 'LAST.':WEB.FORM.NAMERETURN**DISPLAY.ERROR:*W$TYPE='HTML'MAX.LINES=DCOUNT(ERROR.MSG,CHAR(254))IF MAX.LINES > 1 THEN   TEMP.ERROR.MSG=ERROR.MSG   ERROR.MSG=''   FOR ERROR.LINE = 1 TO MAX.LINES      THIS.MSG=TEMP.ERROR.MSG<ERROR.LINE>      IF ERROR.MSG <> '' THEN ERROR.MSG:='<br>'      ERROR.MSG:=THIS.MSG    NEXT ERROR.LINE ENDW$HTML.DATA='<h3>':ERROR.MSG:'</h3>'RETURN*INITIATE.CALC.PHANTOM:*BEGIN CASE   CASE PLATFORM = 'D3' OR PLATFORM = 'JB'      EXECUTE "Z REFRESH.DASHBOARD.MTD.STATS ":TYPE.CALC CAPTURING DUMMY   CASE 1      EXECUTE "PHANTOM REFRESH.DASHBOARD.MTD.STATS ":TYPE.CALC CAPTURING DUMMYEND CASERETURN0011F2SUB.RUNTIME.ERRORS0c2SUBROUTINE SUB.RUNTIME.ERRORS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Report Runtime Errors** UniVerse version (N/A)*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "MVDB Runtime Errors"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN ;* Dont process, just provide title, type & width*IF WIDGET.USER.DATA(2) # "" THEN  ACCTFILTER = WIDGET.USER.DATA(2)  W$TITLE = "Runtime Errors (User/Account filter = ":ACCTFILTER:")"END ELSE  IF G$SUBMITTED THEN    ACCTFILTER = "ALL"  END ELSE ;* It's empty, but only becuase nobody has specified a value    ACCTFILTER = @WHO  END  WIDGET.USER.DATA(2) = ACCTFILTERENDIF WIDGET.USER.DATA(3) # "" THEN  PROGFILTER = WIDGET.USER.DATA(3)END ELSE PROGFILTER = ""STOP 201, 'RUNTIME-ERRORS'*XLINE = 'SSELECT DM,RUNTIME-ERRORS, BY-DSND DATE BY-DSND TIME'*IF ACCTFILTER # "ALL" THEN  *XLINE := ' WITH USERPIB = "[':ACCTFILTER:']"'  *WITH.USED = 1*END ELSE WITH.USED = 0*IF PROGFILTER # "ALL" AND PROGFILTER # "" THEN  *IF WITH.USED THEN XLINE := ' AND'  *XLINE := ' WITH PROGNAME = "':PROGFILTER:'"'*END*EXECUTE XLINE CAPTURING JUNK*IF WIDGET.USER.DATA(1) = 'CLEAR' THEN  *LOOP    *READNEXT ID ELSE EXIT    *DELETE F.RUNTIME.ERRORS, ID  *REPEAT  *WIDGET.USER.DATA(1) = ""*END*IF SYSTEM(11) THEN  *IF SYSTEM(11) > 100 THEN MAX.DISPLAY = 100 ELSE MAX.DISPLAY = SYSTEM(11)  *W$HTML.DATA = '<h3>1 - ':MAX.DISPLAY:' of ':SYSTEM(11):'</h3>'  *W$HTML.DATA := '<table><tr>'  *W$HTML.DATA := '<th>Date / Time</th><th>User</th><th>Error</th>'  *W$HTML.DATA := '</tr>'*END ELSE  *W$HTML.DATA = '<h3>No Errors</h3>'*END*ERR.CNT = 0*LOOP  *READNEXT ID ELSE EXIT  *READ RECORD FROM F.RUNTIME.ERRORS, ID ELSE CONTINUE  *DATA RECORD<2,1>  *EXECUTE "PRINT-ERR DM,MESSAGES, ":RECORD<1>:" (S" CAPTURING ERR  **  *CONVERT @AM TO " " IN ERR  *ERR = OCONV(ERR,'MCP')  *ERR = TRIM(ERR)  *PROG = RECORD<4>  *DESC = PROG:" ":ERR  *USERPIB = RECORD<3>  *STACK = ""  *FOR N = DCOUNT(RECORD<5>,@VM) TO 1 STEP -1    *STACK := RECORD<5,N>    *IF STACK # "" AND N # 1 THEN STACK := ' --> '  *NEXT N  *IF RECORD<5> # '' THEN DESC := "Stack: ":STACK  *MD = FIELD( RECORD<3>, ' ', 3 )  **  ** Try and find the source code to include in the feed.  **  *SREC = "" ; FNAME = ""  *OPEN MD:",MD," TO F.MD THEN    *FNAME = ""    *READ CREC FROM F.MD, RECORD<4> THEN      *IF CREC<1> = "VR" THEN ;* This is a catalog pointer, file name is in field 4        *FNAME = FIELD(CREC<4>,' ',1)      *END ELSE IF CREC<1> = "PQ" THEN        *IF FIELD(CREC<2>, ' ', 1 ) = "HRUN" THEN          *FNAME = FIELD( CREC<2>, ' ', 2 )        *END      *END    *END    *IF FNAME # "" THEN      *OPEN MD:",":FNAME:"," TO SFILE THEN        *READ SREC FROM SFILE, RECORD<4> ELSE SREC = ""      *END    *END  *END  *SOURCE.SNIP = ""  *IF SREC # "" THEN    *CALL SWAP(SREC,'&','&amp;')    *CALL SWAP(SREC,'<','&lt;')    *CALL SWAP(SREC,'>','&gt;')    *LINENO = RECORD<2,1>    *IF LINENO MATCHES "1N0N" THEN      *START.LINE = LINENO - 3      *IF START.LINE < 0 THEN START.LINE = 1    *END ELSE LINENO = 1 ; START.LINE = 1    *END.LINE = LINENO + 3    *SOURCE.SNIP = \<code style="font-size:12px" >\    *FOR LN = START.LINE TO END.LINE      *LINE = LN "R#4":" ":SREC<LN>      *SOURCE.SNIP := LINE:'<br />'    *NEXT LN    *SOURCE.SNIP := '</code>'    *EDIT.LINK = '<a href="/dbc/MVDB.WEB.ED?ed_acct=':MD:'&ed_file=':FNAME:'&ed_item=':PROG:'" target="':MD:'_':FNAME:'_':PROG:'">Edit Source</a>'    *SOURCE.SNIP := EDIT.LINK  *END ELSE    *SOURCE.SNIP = 'Unable to open source code for ':RECORD<4>:' in account ':MD  *END  *DATE = FIELD(ID,'*',1)  *TIME = FIELD(ID,'*',2)  **  *W$HTML.DATA<-1> = '<tr valign="top"><td>':OCONV(DATE,'D2/'):" ":OCONV(TIME,'MTS'):'</td>'  *W$HTML.DATA<-1> = '<td>':USERPIB:'</td>'  *W$HTML.DATA<-1> = '<td>':DESC:'</td>'  *W$HTML.DATA<-1> = '</tr>'  *W$HTML.DATA<-1> = '<tr valign="top"><td>&nbsp;</td><td colspan="2">':SOURCE.SNIP:'</td></tr>'  *ERR.CNT += 1*UNTIL ERR.CNT > 100 DO REPEAT*W$HTML.DATA<-1> = '</table>'***W$LINK.LABEL<1> = "Clear Errors"*W$LINK.LOCATION<1> = '1'*W$LINK.UD.POS<1> = 1*W$LINK.UD.VAL<1> = 'CLEAR'***W$LINK.LABEL<2> = "Print"*W$LINK.LOCATION<2> = "C"*W$LINK.ICON<2> = "print.png"*W$LINK.URL<2> = "javascript:printThis(this);"***W$INPUT.PROMPT<1> = "User/Acct Filter"*W$INPUT.TYPE<1> = "TEXT"*W$INPUT.UDPOS<1> = 2*W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(2)***W$INPUT.PROMPT<2> = "Program Filter"*W$INPUT.TYPE<2> = "TEXT"*W$INPUT.UDPOS<2> = 3*W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(3)*RETURN0006B0SUB.SYS.ERRS0c2SUBROUTINE SUB.SYS.ERRS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Show system errors**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TABLE"W$TITLE = "Recent System Errors"W$WIDTH = 3*IF G$QUERYMODE = "1" THEN RETURN*OPEN '','SYSTEM-ERRORS' TO F.SYSTEM.ERRORS ELSE RETURN*XLINE = 'SSELECT SYSTEM-ERRORS BY-DSND DATE BY-DSND TIME'EXECUTE XLINE CAPTURING JUNK*W$TABLE.COL.LABELS = "Date":@VM:"Time":@VM:"Message":@VM:"Last TCL":@VM:"Pib / User":@VM:"Data"W$TABLE.COL.JUST = "right":@VM:"right"** User data 2 is the number of items to skip forward or backward. Calculate* the offset by adding this number to the current offset position in field 1.* Then clear out the skip fowrad/backward value.*WIDGET.USER.DATA(1) = WIDGET.USER.DATA(1) + WIDGET.USER.DATA(2)WIDGET.USER.DATA(2) = 0IF WIDGET.USER.DATA(1) < 0 THEN WIDGET.USER.DATA(1) = 0*IF WIDGET.USER.DATA(1) > 0 THEN  W$TITLE := " (":WIDGET.USER.DATA(1)+1:" - ":WIDGET.USER.DATA(1)+11:")"END*OFFSET = WIDGET.USER.DATA(1)FOR SKIPITEM = 1 TO OFFSET  READNEXT THROWAWAY ELSE EXITNEXT SKIPITEMFOR X = 1 TO 10  READNEXT ID ELSE EXIT  READ EREC FROM F.SYSTEM.ERRORS, ID THEN    W$TABLE.DATA<X,1> = OCONV( FIELD( ID,'*',1),'D2/')    W$TABLE.DATA<X,2> = OCONV( FIELD( ID,'*',2),'MTS')    W$TABLE.DATA<X,3> = EREC<4,1>    W$TABLE.DATA<X,4> = EREC<22,DCOUNT(EREC<22>,@VM)>    W$TABLE.DATA<X,5> = EREC<12,1>    W$TABLE.DATA<X,6> = EREC<5,1>  ENDNEXT X*W$LINK.LABEL<1,1> = "Prev 10"W$LINK.LABEL<1,2> = "Next 10"W$LINK.LOCATION<1,1> = "23"W$LINK.LOCATION<1,2> = "14"W$LINK.UD.POS<1,1> = 2W$LINK.UD.POS<1,2> = 2W$LINK.UD.VAL<1,1> = "-10"W$LINK.UD.VAL<1,2> = "10"*RETURN00022DUD.EXECUTE.STACKED.CMNDS0c2SUBROUTINE UD.EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,NUM.RETURNED,REPORT)*REPORT=''NUM.RETURNED=1LIST_VAR = 1IF STACKED.1 <> '' THEN   MDPERFORM STACKED.1 RTNLIST LIST_VAR RETURNING RETNO CAPTURING CAPT   IF INDEX(RETNO,'No data',1) OR INDEX(CAPT,'No data',1) THEN      NUM.RETURNED=0      RETURN    END   MDPERFORM STACKED.2 PASSLIST LIST_VAR CAPTURING REPORT END ELSE   MDPERFORM STACKED.2 CAPTURING REPORT ENDIF INDEX(REPORT,'No records',1) THEN   NUM.RETURNED=0 ENDCONVERT '$,' TO '' IN REPORTRETURNEND002557BUILD.SAMPLE.PORTAL.FILES0c2OPEN '','PORTAL.SALES' TO FI.SALES ELSE STOP 201,'PORTAL.SALES'OPEN '','PORTAL.AR' TO FI.AR ELSE STOP 201,'PORTAL.AR'OPEN '','PORTAL.AP' TO FI.AP ELSE STOP 201,'PORTAL.AP'READ SALES.1 FROM FI.SALES, 1 ELSE SALES.1=''READ AR.1 FROM FI.AR, 1 ELSE AR.1=''READ AP.1 FROM FI.AP, 1 ELSE AP.1=''IF SALES.1 <> '' AND AR.1 <> '' AND AP.1 <> '' THEN STOPOTODAY=OCONV(DATE(),'D4-')OYYYY=OTODAY[7,4]OMM=OTODAY[1,2]+0REPS=''REPS<-1>='GREG GRIFFIN'REPS<-1>='KELLEY JOHNSON'REPS<-1>='KEVIN PEPE'REPS<-1>='KIM GONZALEZ'REPS<-1>='MICHAEL HOUSE'REPS<-1>='MICHELLE BLACK'REPS<-1>='MITCH STREET'REPS<-1>='NATALIE MCFARLAND'REPS<-1>='PETE COX'REPS<-1>='PHIL CRAMER'REPS<-1>='ROBERT HUNT'REPS<-1>='STEVE SMITH'REPS<-1>='TAMMY HENDER'REPS<-1>='TIFFANEY MILLER'BRANCHES=''BRANCHES<-1>='CHICAGO'BRANCHES<-1>='DALLAS'BRANCHES<-1>='DENVER'BRANCHES<-1>='FLORIDA'BRANCHES<-1>='NEW YORK'BRANCHES<-1>='NORCAL'BRANCHES<-1>='SOCAL'BRANCHES<-1>='VEGAS'REGIONS=''REGIONS<-1>='CENTRAL'REGIONS<-1>='EAST'REGIONS<-1>='MOUNTAIN'REGIONS<-1>='WEST'EXECUTE "CLEAR-FILE DATA PORTAL.SALES" CAPTURING DUMMYJAN12016=ICONV('1-1-16','D')DATE.RANGE=DATE()-JAN12016FOR I = 1 TO 10000   SALES.REC=''   CLOSE.DATE=JAN12016 + RND(DATE.RANGE) + 1   SALES.REC<1>=CLOSE.DATE   RND.REP=RND(14)+1   IF RND.REP < 12 THEN      RND.PCT=((RND(10)+1)/10)      RND.REP=INT(RND.REP * RND.PCT + .5)      IF NOT(RND.REP) THEN RND.REP=1    END   REP=REPS<RND.REP>   SALES.REC<5>=REP   AMOUNT=RND(975000)+25000; * 250 TO 10000   SALES.REC<8>=AMOUNT   COST.PCT=RND(40) + 50; * 50 TO 90 PERCENT   COST.PCT=COST.PCT / 100   COST=INT(AMOUNT * COST.PCT + .5)   SALES.REC<9>=COST   RND.BRANCH=RND(8)+1   IF RND.BRANCH < 6 THEN      RND.PCT=((RND(10)+1)/10)      RND.BRANCH=INT(RND.BRANCH * RND.PCT + .5)      IF NOT(RND.BRANCH) THEN RND.BRANCH=1    END   BRANCH=BRANCHES<RND.BRANCH>   SALES.REC<13>=BRANCH   RND.REGION=RND(4)+1   IF RND.REGION < 4 THEN      RND.PCT=((RND(10)+1)/10)      RND.REGION=INT(RND.REGION * RND.PCT + .5)      IF NOT(RND.REGION) THEN RND.REGION=1    END   REGION=REGIONS<RND.REGION>   SALES.REC<14>=REGION   WRITE SALES.REC ON FI.SALES, I NEXT ICUSTS=''CUSTS<-1>="ABC Computers"CUSTS<-1>="ABC Electronics Corp"CUSTS<-1>="Ajax Computer Electronics"CUSTS<-1>="Alfreds Futterkiste"CUSTS<-1>="Ana Trujillo Emparedados y helados"CUSTS<-1>="Antonio Moreno Taqueria"CUSTS<-1>="Around the Horn"CUSTS<-1>="B'S Beverages"CUSTS<-1>="Bakers Goods"CUSTS<-1>="Berglunds snabbkop"CUSTS<-1>="Best Computer Company"CUSTS<-1>="Better Bytes"CUSTS<-1>="Better Computing"CUSTS<-1>="Better Connection"CUSTS<-1>="Bills Shoes & Gopeds"CUSTS<-1>="Bits and Bytes Inc"CUSTS<-1>="Blauer See Delikatessen"CUSTS<-1>="Blondel pere et fils"CUSTS<-1>="Bobs Used Cycles"CUSTS<-1>="Bon app"CUSTS<-1>="Bottom-Dollar Markets"CUSTS<-1>="Cactus Comidas para llevar"CUSTS<-1>="Centro comercial Moctezuma"CUSTS<-1>="Chop-suey Chinese"CUSTS<-1>="Classic Computers"CUSTS<-1>="Comp Data Inc."CUSTS<-1>="Comp Products"CUSTS<-1>="Computer Fancy"CUSTS<-1>="Computer Portables Inc."CUSTS<-1>="Computer Sitters"CUSTS<-1>="Computer Tech"CUSTS<-1>="Computer Tips"CUSTS<-1>="Computer Town"CUSTS<-1>="Computer Trainers"CUSTS<-1>="Computer Warehouse"CUSTS<-1>="Computers Etc."CUSTS<-1>="Computers Galore"CUSTS<-1>="Computers Inc.Systems"CUSTS<-1>="Computers N More"CUSTS<-1>="Computers R Us"CUSTS<-1>="Consolidated Holdings"CUSTS<-1>="Cyber Products"CUSTS<-1>="Data Bits"CUSTS<-1>="Data Comp"CUSTS<-1>="Data Net"CUSTS<-1>="Die Wandernde Kuh"CUSTS<-1>="Disk Products"CUSTS<-1>="Disks N More"CUSTS<-1>="Drachenblut Delikatessen"CUSTS<-1>="Du monde entier"CUSTS<-1>="Eastern Connection"CUSTS<-1>="Electronic Company"CUSTS<-1>="Ernst Handel"CUSTS<-1>="Familia Arquibaldo"CUSTS<-1>="FISSA Fabrica Inter. Salchichas S.A."CUSTS<-1>="Folies gourmandes"CUSTS<-1>="For Computers Inc."CUSTS<-1>="France restauration"CUSTS<-1>="Franchi S.p.A."CUSTS<-1>="Frankenversand"CUSTS<-1>="Furia Bacalhau e Frutos do Mar"CUSTS<-1>="Future Computers"CUSTS<-1>="Future In Computing"CUSTS<-1>="Galeria del gastronomo"CUSTS<-1>="Godos Cocina Tipica"CUSTS<-1>="Gourmet Lanchonetes"CUSTS<-1>="Great Lakes Food Market"CUSTS<-1>="GROSELLA-Restaurante"CUSTS<-1>="Hanari Carnes"CUSTS<-1>="HILARION-Abastos"CUSTS<-1>="Hungry Coyote Import Store"CUSTS<-1>="HUNGRY HOWIES PIZZA"CUSTS<-1>="Hungry Owl All-Night Grocers"CUSTS<-1>="Intercom Products"CUSTS<-1>="Island Trading"CUSTS<-1>="Joe'S Computers"CUSTS<-1>="Koniglich Essen"CUSTS<-1>="La corne d'abondance"CUSTS<-1>="Lazy K Kountry Store"CUSTS<-1>="Lehmanns Marktstand"CUSTS<-1>="Let'S Stop N Shop"CUSTS<-1>="LILA-Supermercado"CUSTS<-1>="LINO-Delicateses"CUSTS<-1>="Logical Computers"CUSTS<-1>="Lonesome Pine Restaurant"CUSTS<-1>="Longo Toyota"CUSTS<-1>="Magazzini Alimentari Riuniti"CUSTS<-1>="Memory Capturers"CUSTS<-1>="Memory Plus Inc."CUSTS<-1>="Modem Products"CUSTS<-1>="Morgenstern Gesundkost"CUSTS<-1>="Net Connect"CUSTS<-1>="North/South"CUSTS<-1>="Number One in Computing"CUSTS<-1>="Oceano Atlantico Ltda."CUSTS<-1>="Old World Delicatessen"CUSTS<-1>="Ones & Zeros Inc."CUSTS<-1>="Ottilies Kaseladen"CUSTS<-1>="Paris specialites"CUSTS<-1>="Pericles Comidas clasicas"CUSTS<-1>="Piccolo und mehr"CUSTS<-1>="Printer Products"CUSTS<-1>="Que Delicia"CUSTS<-1>="Queen Cozinha"CUSTS<-1>="QUICK-Stop"CUSTS<-1>="Rancho grande"CUSTS<-1>="Rattlesnake Canyon Grocery"CUSTS<-1>="Real Computers"CUSTS<-1>="Reggiani Caseifici"CUSTS<-1>="Ricardo Adocicados"CUSTS<-1>="Richter Supermarkt"CUSTS<-1>="Sante Gourmet"CUSTS<-1>="Save-a-lot Markets"CUSTS<-1>="Secure Computers"CUSTS<-1>="Seven Seas Imports"CUSTS<-1>="Software Inc"CUSTS<-1>="Specialites du monde"CUSTS<-1>="Split Rail Beer & Ale"CUSTS<-1>="Supremes delices"CUSTS<-1>="The Big Cheese"CUSTS<-1>="The Cracker Box"CUSTS<-1>="The Only Computers"CUSTS<-1>="Tortuga Restaurante"CUSTS<-1>="Tradicao Hipermercados"CUSTS<-1>="Trail'S Head Gourmet Provisioners"CUSTS<-1>="TRG"CUSTS<-1>="USA Computers"CUSTS<-1>="Victuailles en stock"CUSTS<-1>="Vins et alcools Chevalier"CUSTS<-1>="Wartian Herkku"CUSTS<-1>="Wellington Importadora"CUSTS<-1>="White Clover Markets"CUSTS<-1>="White House"CUSTS<-1>="Wilman Kala"CUSTS<-1>="Wolski  Zajazd"EXECUTE "CLEAR-FILE DATA PORTAL.AR" CAPTURING DUMMYFOR I = 1 TO 5000   AR.REC=""   CUST=CUSTS<RND(135)+1>   AR.REC<1>=CUST   PCT=RND(100)+1   IF PCT > 4 THEN      * PAID      QTR=RND(18)+1; * BASED ON DATE BEFORE 7-1-20      BEGIN CASE         CASE OYYYY > 2020; QTR+=2         CASE OMM >= 10; QTR+=2         CASE OMM >= 7;  QTR+=1      END CASE      BEGIN CASE         CASE QTR <= 4;   * 2016            BREAKS=71:@AM:87:@AM:93            BOY=ICONV("01-01-16","D")            QTR.IN.YEAR=QTR         CASE QTR <= 8;   * 2017            BREAKS=73:@AM:89:@AM:94            BOY=ICONV("01-01-17","D")            QTR.IN.YEAR=QTR-4         CASE QTR <= 12;   * 2018            BREAKS=77:@AM:89:@AM:94            BOY=ICONV("01-01-18","D")            QTR.IN.YEAR=QTR-8         CASE QTR <= 16;   * 2019            BREAKS=77:@AM:90:@AM:94            BOY=ICONV("01-01-19","D")            QTR.IN.YEAR=QTR-12         CASE 1;          * 2020            BREAKS=71:@AM:87:@AM:93            BOY=ICONV("01-01-20","D")            QTR.IN.YEAR=QTR-16      END CASE      BOQ=BOY + (QTR.IN.YEAR-1)*90      DATE.PAID=BOQ + RND(90) + 1      DAYS.IN.PERIOD=RND(30)+1      PCT=RND(100)      LOCATE PCT IN BREAKS BY "AR" SETTING CATEGORY ELSE NULL      MOS.BEFORE=CATEGORY-1      DUE.DATE=DATE.PAID - (MOS.BEFORE*30) - DAYS.IN.PERIOD      AR.REC<20>=DUE.DATE      AR.REC<8>=DATE.PAID      AR.REC<50>=0; * BALANCE      AMOUNT=RND(975000)+25000; * 250 TO 10000      AR.REC<6>=AMOUNT      WRITE AR.REC ON FI.AR, I    END ELSE      BREAKS=60:@AM:81:@AM:91:@AM:96      PCT=RND(100)+1      LOCATE PCT IN BREAKS BY "AR" SETTING CATEGORY ELSE NULL      DAY.IN.MONTH=RND(30)      BEGIN CASE         CASE CATEGORY = 1            * NOT YET DUE            DUE.DATE=DATE()+DAY.IN.MONTH         CASE CATEGORY = 2            * 1-30            DUE.DATE=DATE()-DAY.IN.MONTH         CASE CATEGORY = 3            * 31-60            DUE.DATE=DATE() - (30 + DAY.IN.MONTH)         CASE CATEGORY = 4            * 60-90            DUE.DATE=DATE() - (60 + DAY.IN.MONTH)         CASE 1            * 90+            DUE.DATE=DATE() - (90 + RND(120))      END CASE      AR.REC<20>=DUE.DATE      AR.REC<8>=''; * DATE PAID      AMOUNT=RND(975000)+25000; * 250 TO 10000      AR.REC<6>=AMOUNT      AR.REC<50>=AMOUNT; * BALANCE      WRITE AR.REC ON FI.AR, I    END NEXT IEXECUTE "CLEAR-FILE DATA PORTAL.AP" CAPTURING DUMMYFOR I = 1 TO 100   AP.REC=""   BREAKS=56:@AM:90:@AM:95:@AM:97   PCT=RND(100)+1   LOCATE PCT IN BREAKS BY "AR" SETTING CATEGORY ELSE NULL   DAY.IN.MONTH=RND(30)   BEGIN CASE      CASE CATEGORY = 1         * NOT YET DUE         DUE.DATE=DATE()+DAY.IN.MONTH      CASE CATEGORY = 2         * 1-30         DUE.DATE=DATE()-DAY.IN.MONTH      CASE CATEGORY = 3         * 31-60         DUE.DATE=DATE() - (30 + DAY.IN.MONTH)      CASE CATEGORY = 4         * 60-90         DUE.DATE=DATE() - (60 + DAY.IN.MONTH)      CASE 1         * 90+         DUE.DATE=DATE() - (90 + DAY.IN.MONTH)   END CASE   AP.REC<20>=DUE.DATE   AP.REC<8>=''; * DATE PAID   AMOUNT=RND(975000)+25000; * 250 TO 10000   AP.REC<6>=AMOUNT   AP.REC<50>=AMOUNT; * BALANCE   WRITE AP.REC ON FI.AP, I NEXT I000715SUB.DEMO.MAP.CANADA0c2SUBROUTINE SUB.DEMO.MAP.CANADA** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: US Map demonstration* 6-1-15 ZUMASYS CONVERT MAP.DATA ID DELIMETER FROM * TO #** Modified by Peter Schellenbach of Zumasys 06-08-15:*  Changed test of ENUM after EXECUTE to test SYSTEM(11) instead.**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Canadian Provinces by Alphabet"W$TYPE = "MAP:Canada"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'*W$CHART.OPTIONS<-1> = 'animation="0"'W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'W$CHART.OPTIONS<-1> = 'legendShadow="1"'W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'**6-1-15*EXECUTE \SSELECT MVDB.MAP.DATA = "CANADA*]" BY A1\ RETURNING ENUM CAPTURING ETXTEXECUTE \SSELECT MVDB.MAP.DATA = "CANADA#]" BY A1\ RETURNING ENUM CAPTURING ETXT; *6-1-15*PJS 06-08-15*IF ENUM[1,3]="404" THENIF SYSTEM(11) THEN ; *PJS 06-08-15* LOOP   READNEXT ID ELSE ID="\\EOF" UNTIL ID="\\EOF" DO   READ I FROM F.MVDB.MAP.DATA,ID THEN*6-1-15*     W$MAP.IDS<1,-1> = FIELD(ID,'*',2)     W$MAP.IDS<1,-1> = FIELD(ID,'#',2); *6-1-15*     W$MAP.VALUES<1,-1> = (SEQ(I<1>[1,1]) - (SEQ('A')-1))     W$MAP.VALUE.TOOLTEXT<1,-1> := I<2>:' (':I<1>:')'   END REPEATEND*W$MAP.RANGE.NAME<1,1> = "Early in Alphabet"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "10"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Middle of Alphabet"W$MAP.RANGE.LOW<1,2> = "10"W$MAP.RANGE.HIGH<1,2> = "18"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Late in Alphabet"W$MAP.RANGE.LOW<1,3> = "18"W$MAP.RANGE.HIGH<1,3> = "27"W$MAP.RANGE.COLOR<1,3> = "RED"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN00029ESUB.DEMO.DNUT0c2SUBROUTINE SUB.DEMO.DNUT** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Doughnut Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Defects by Reason"W$TYPE = "FCDOUGHNUT2D"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*CATEG = ""CATEG<1> = 20CATEG<2> = 30CATEG<3> = 20CATEG<4> = 9*CATEG.NAMES = ''CATEG.NAMES<1> = "Choices"CATEG.NAMES<2> = "Material"CATEG.NAMES<3> = "Errors"CATEG.NAMES<4> = "Shipping"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$PIE.LABELS<1,N> = CATEG.NAMES<N>  W$PIE.VALUES<1,N> = CATEG<N>NEXT NW$PIE.CAPTION = "Defects"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN00250AREFRESH.DASHBOARD.CLOSING.STATS0c2HAVE.AR=1OPEN '','AR' TO FI.AR ELSE HAVE.AR=0IF HAVE.AR THEN   AR.CNTR=0   LOOP      AR.CNTR+=1      READ BULK.AR FROM FI.AR, 'AR.':AR.CNTR ELSE BULK.AR=''      MAX.ROWS=DCOUNT(BULK.AR,CHAR(254))   UNTIL NOT(MAX.ROWS) DOCRT 'AR.':AR.CNTR      DELETE FI.AR, 'AR.':AR.CNTR      AR.REC=''      AR.ID=''      REC.ROW=0      BULK.AR=OCONV(BULK.AR,'MCU')      FOR ROW.NO = 1 TO MAX.ROWS         ROW=BULK.AR<ROW.NO>         IF ROW[1,2] = '%%' THEN            IF AR.REC <> '' THEN               WRITE AR.REC ON FI.AR, AR.ID             END            AR.REC=''            AR.ID=FIELD(ROW,'%',3)            REC.ROW=0          END ELSE            REC.ROW+=1            AR.REC<REC.ROW>=ROW          END       NEXT ROW.NO      IF AR.REC <> '' THEN         WRITE AR.REC ON FI.AR, AR.ID       END   REPEAT ENDHAVE.AP=1OPEN '','AP' TO FI.AP ELSE HAVE.AP=0IF HAVE.AP THEN   AP.CNTR=0   LOOP      AP.CNTR+=1      READ BULK.AP FROM FI.AP, 'AP.':AP.CNTR ELSE BULK.AP=''      MAX.ROWS=DCOUNT(BULK.AP,CHAR(254))   UNTIL NOT(MAX.ROWS) DOCRT 'AP.':AP.CNTR      DELETE FI.AP, 'AP.':AP.CNTR      AP.REC=''      AP.ID=''      REC.ROW=0      BULK.AP=OCONV(BULK.AP,'MCU')      FOR ROW.NO = 1 TO MAX.ROWS         ROW=BULK.AP<ROW.NO>         IF ROW[1,2] = '%%' THEN            IF AP.REC <> '' THEN               WRITE AP.REC ON FI.AP, AP.ID             END            AP.REC=''            AP.ID=FIELD(ROW,'%',3)            REC.ROW=0          END ELSE            REC.ROW+=1            AP.REC<REC.ROW>=ROW          END       NEXT ROW.NO      IF AP.REC <> '' THEN         WRITE AP.REC ON FI.AP, AP.ID       END   REPEAT ENDHAVE.SALES=1OPEN '','SALES' TO FI.SALES ELSE HAVE.SALES=0IF HAVE.SALES THEN   SALES.CNTR=0   LOOP      SALES.CNTR+=1      READ BULK.SALES FROM FI.SALES, 'SALES.':SALES.CNTR ELSE BULK.SALES=''      MAX.ROWS=DCOUNT(BULK.SALES,CHAR(254))   UNTIL NOT(MAX.ROWS) DO      DELETE FI.SALES, 'SALES.':SALES.CNTR      SALES.REC=''      SALES.ID=''      REC.ROW=0      BULK.SALES=OCONV(BULK.SALES,'MCU')      FOR ROW.NO = 1 TO MAX.ROWS         ROW=BULK.SALES<ROW.NO>         IF ROW[1,2] = '%%' THEN            IF SALES.REC <> '' THEN               WRITE SALES.REC ON FI.SALES, SALES.ID             END            SALES.REC=''            SALES.ID=FIELD(ROW,'%',3)            REC.ROW=0          END ELSE            REC.ROW+=1            SALES.REC<REC.ROW>=ROW          END       NEXT ROW.NO      IF SALES.REC <> '' THEN         WRITE SALES.REC ON FI.SALES, SALES.ID       END   REPEAT ENDEXECUTE "TERM 132" CAPTURING DUMMYOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE NULLERRORS=''OPEN '','DASHBOARD.CLOSING.STATS' TO FI.CLOSING.STATS ELSE ERRORS<-1>='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'HAVE.DICT.STATS=1OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.CLOSING.STATS ELSE HAVE.DICT.STATS=0; ERRORS<-1>='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE NULLIF ERRORS <> '' THEN   WRITE ERRORS ON FI.MVDB.CONTROL, 'CLOSING.STATS.ERRORS'   IF HAVE.DICT.STATS THEN      WRITE 'CLOSING.STATS.ERRORS' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'    END   STOP ENDREAD PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'END CASE*DIM SETUP.PARAMS(30)MATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' ENDEQUATE ACCOUNT TO SETUP.PARAMS(1)EQUATE REPORT.FILE TO SETUP.PARAMS(2)EQUATE SALE.DATE.DICT TO SETUP.PARAMS(3)EQUATE SALE.MONTH.DICT TO SETUP.PARAMS(4)EQUATE SALE.YEAR.DICT TO SETUP.PARAMS(5)EQUATE SALE.AMOUNT.DICT TO SETUP.PARAMS(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO SETUP.PARAMS(7)EQUATE SALESMAN.DICT TO SETUP.PARAMS(8)EQUATE BRANCH.DICT TO SETUP.PARAMS(9)EQUATE REGION.DICT TO SETUP.PARAMS(10)EQUATE SALE.DATE.AMC TO SETUP.PARAMS(11)EQUATE SALE.AMOUNT.AMC TO SETUP.PARAMS(12)EQUATE SALE.AMOUNT.CONV TO SETUP.PARAMS(13)EQUATE SALE.AMOUNT.COOR TO SETUP.PARAMS(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO SETUP.PARAMS(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO SETUP.PARAMS(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO SETUP.PARAMS(17)EQUATE SALESMAN.AMC TO SETUP.PARAMS(18)EQUATE SALESMAN.TFILE TO SETUP.PARAMS(19)EQUATE BRANCH.AMC TO SETUP.PARAMS(20)EQUATE BRANCH.TFILE TO SETUP.PARAMS(21)EQUATE REGION.AMC TO SETUP.PARAMS(22)EQUATE REGION.TFILE TO SETUP.PARAMS(23)***FILE.PATH=ACCOUNT:',':REPORT.FILE:','FILE.PATH='DASHBOARD.SALES.FILE'*WRITE 'UPDATING' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'ODATE=OCONV(DATE(),'D4-')YYYY=ODATE[7,4]FIRST.YYYY=YYYY-4CMND='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YYYY:'"'EXECUTE CMND CAPTURING DUMMYSYSTEM.11=0LOOP   READNEXT DCS.ID ELSE DCS.ID='DONE'UNTIL DCS.ID = 'DONE' DO   SYSTEM.11=1   DELETE FI.CLOSING.STATS, DCS.IDREPEATIF SYSTEM.11 THEN   IF PLATFORM = 'D3' THEN      READV INDEX.DEFS FROM FI.DICT.CLOSING.STATS, 'DASHBOARD.CLOSING.STATS', 8 ELSE INDEX.DEFS=''      IF NOT(INDEX(INDEX.DEFS,'(G*1)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G*1)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G2*1)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G2*1)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G*2)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G*2)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G1*2)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G1*2)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G1*1)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G1*1)" CAPTURING DUMMY         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G3*1)" CAPTURING DUMMY         EXECUTE 'CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G3*1):"*":0(G1*1)' CAPTURING DUMMY       END    END ELSE      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS SALESMAN" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS BRANCH" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS SALESMAN*YYYYMM" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS YYYYMM*BRANCH" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS YYYYMM" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS REGION" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS REGION*YYYYMM" CAPTURING DUMMY    END END*FOR YEAR = FIRST.YYYY TO YYYY    WRITE 'UPDATING ':YEAR ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'   *  ** DO FOR EACH YEAR SEPARATELY TO LIMIT SIZE OF LIST RETURNING   *   STACKED.1='SELECT ':FILE.PATH:' WITH ':SALE.YEAR.DICT:' = "':YEAR:'"'**WRITE DUMMY ON FI.DICT.CLOSING.STATS, '*124.SELECT'   STACKED.2='SORT ':FILE.PATH:' WITH ':SALESMAN.DICT:' # "" BY ':SALE.MONTH.DICT:' BY ':SALESMAN.DICT:' ID-SUPP ':SALE.MONTH.DICT:' PIPE ':SALESMAN.DICT:' PIPE ':SALE.AMOUNT.DICT:' PIPE ':COST.OF.SALE.AMOUNT.DICT   STACKED.2:=' PIPE ':BRANCH.DICT:' PIPE ':REGION.DICT   STACKED.2:=' HDR-SUPP COL-HDR-SUPP NOPAGE'   CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)   IF SYSTEM.11 THEN      MAX.ROWS=DCOUNT(REPORT,CHAR(254))      STATS.IDS=''      STATS.AMTS=''      STATS.COS.AMTS=''      STATS.IDS.CNTR=0      FOR ROW.NO = 1 TO MAX.ROWS         ROW=REPORT<ROW.NO>         IF INDEX(ROW,'|',1) THEN            MONTH=TRIM(FIELD(ROW,'|',1))+0            IF MONTH < 10 THEN               YYYYMM=YEAR:'0':MONTH             END ELSE YYYYMM=YEAR:MONTH            REP=TRIM(FIELD(ROW,'|',2))            AMOUNT=TRIM(FIELD(ROW,'|',3))            CONVERT '$,' TO '' IN AMOUNT            AMOUNT=ICONV(AMOUNT,'MD2')            IF NOT(NUM(AMOUNT)) THEN AMOUNT=0            COST.OF.SALE.AMOUNT=TRIM(FIELD(ROW,'|',4))            CONVERT '$,' TO '' IN COST.OF.SALE.AMOUNT            COST.OF.SALE.AMOUNT=ICONV(COST.OF.SALE.AMOUNT,'MD2')            IF NOT(NUM(COST.OF.SALE.AMOUNT)) THEN COST.OF.SALE.AMOUNT=0            IF AMOUNT OR COST.OF.SALE.AMOUNT THEN               BRANCH=TRIM(FIELD(ROW,'|',5))               REGION=TRIM(FIELD(ROW,'|',6))               STATS.ID=REP:'*':YYYYMM:'*':BRANCH:'*':REGION               LOCATE STATS.ID IN STATS.IDS SETTING STATS.PNTR ELSE                  STATS.IDS.CNTR+=1                  STATS.PNTR=STATS.IDS.CNTR                  STATS.IDS<STATS.PNTR>=STATS.ID                END               STATS.AMTS<STATS.PNTR>+=AMOUNT               STATS.COS.AMTS<STATS.PNTR>+=COST.OF.SALE.AMOUNT             END          END       NEXT ROW.NO      MAX.STATS.IDS=DCOUNT(STATS.IDS,CHAR(254))      FOR ID.CNTR = 1 TO MAX.STATS.IDS         AMOUNT=STATS.AMTS<ID.CNTR>         COST.OF.SALE.AMOUNT=STATS.COS.AMTS<ID.CNTR>         IF AMOUNT > 0 OR COST.OF.SALE.AMOUNT THEN            WRITE AMOUNT:CHAR(254):COST.OF.SALE.AMOUNT ON FI.CLOSING.STATS, STATS.IDS<ID.CNTR>          END       NEXT ID.CNTR    END NEXT YEARTIME.STAMP=TIME()TIME.STAMP=FIELD(TIME.STAMP,'.',1)TIME.STAMP=STR('0',5-LEN(TIME.STAMP)):TIME.STAMPWRITE DATE():TIME.STAMP ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'WRITE DATE():TIME.STAMP ON FI.DICT.CLOSING.STATS, '*LAST.UPDATED'END0002FASUB.PORTAL.REPORTS.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.REPORTS.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Portal Reports Documentation"W$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here*OPEN '','WEB.FORMS' TO FI.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FI.WEB.FORMS, 'PORTAL.REPORT.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000667SUB.FREE0c2SUBROUTINE SUB.FREE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Display disk usage*INCLUDE WBPD MVDB.INCLUDE*IF WIDGET.USER.DATA(1) = "TEXT" THEN  W$TYPE = "TEXT"  W$PRINTABLE = 1END ELSE  W$TYPE = "FC3DPIE"ENDW$TITLE = "D3 Free Space"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "TEXT" THEN  W$TITLE := ' (Text Display)'  EXECUTE "FREE" CAPTURING OUTPUT  W$TEXT.DATA = OUTPUTEND ELSE  W$TITLE := ' (Chart Display)'  EXECUTE "WHAT (LSW" CAPTURING WHAT  ATTR = DCOUNT(WHAT,@AM)  LOOP WHILE WHAT<ATTR> = "" DO ATTR -= 1 REPEAT  *  WHAT = TRIM(WHAT<ATTR>)  FRAMESIZE = FIELD(WHAT, ' ', 8)  MAXFID = FIELD( WHAT, ' ', 6 )  SYSBASE = FIELD( WHAT, ' ', 4 )  SYS.BYTE = SYSBASE * FRAMESIZE  SYS.FRAME = SYS.BYTE/FRAMESIZE  AVAIL.FRAME = FIELD( WHAT, ' ', 7 )  USED.FRAME = (MAXFID-SYSBASE)-AVAIL.FRAME  *  MAXBYTE = MAXFID * FRAMESIZE  MAXMB = ICONV(MAXBYTE/1000000,"MD0")  SYS.MB = SYS.BYTE/1000000  USED.BYTE = USED.FRAME * FRAMESIZE  USED.MB = USED.BYTE/1000000  AVAIL.BYTE = AVAIL.FRAME * FRAMESIZE  AVAIL.MB = AVAIL.BYTE/1000000  *  W$PIE.LABELS<1,1> = "Used (":OCONV(SYS.MB+USED.MB,'MD0,'):")"  W$PIE.LABELS<1,2> = "Available (":OCONV(AVAIL.MB,'MD0,'):")"  *  W$PIE.VALUES<1,1> = SYS.MB+USED.MB  W$PIE.VALUES<1,2> = AVAIL.MB  *  W$PIE.CAPTION = "D3 Free Space"END** Set up links*W$LINK.LABEL<1,1> = "Pie"W$LINK.LABEL<1,2> = "Text"W$LINK.LOCATION<1,1> = "2"W$LINK.LOCATION<1,2> = "2"W$LINK.UD.POS<1,1> = 1W$LINK.UD.POS<1,2> = 1W$LINK.UD.VAL<1,1> = "FC3DPIE"W$LINK.UD.VAL<1,2> = "TEXT"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN	0002FESUB.PORTAL.RUN.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.RUN.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Running the Portal Dashboard Reports"W$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here*OPEN '','WEB.FORMS' TO FI.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FI.WEB.FORMS, 'PORTAL.REPORT.RUN.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000925SUB.DEMO.BULLETXX0c2    SUBROUTINE SUB.DEMO.BULLETXX* Changed by PORTBAS -> SUBROUTINE SUB.DEMO.BULLET* @(#) SUB.DEMO.BULLETXX Ported to jBASE 17:55:31  08 JUL 2015** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Bullet widget demo**#MAKE# RL $OPTIONS D3    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Bullet Chart Demo - Sales Volume"    W$TYPE = "VBULLET"    W$WIDTH = 2*    IF G$QUERYMODE THEN RETURN*    IF WIDGET.USER.DATA(1) # "" THEN        W$TYPE = WIDGET.USER.DATA(1)    END ELSE WIDGET.USER.DATA(1) = "VBULLET"    IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1    PALETTE = WIDGET.USER.DATA(2)*    W$FW.LOWER.LIMIT = 0    W$FW.UPPER.LIMIT = 800000*    W$FW.COLOR.RANGE<1,1> = 0    W$FW.COLOR.RANGE<2,1> = 400000    W$FW.COLOR.RANGE<3,1> = "RED"*    W$FW.COLOR.RANGE<1,2> = 400000    W$FW.COLOR.RANGE<2,2> = 650000    W$FW.COLOR.RANGE<3,2> = "YELLOW"*    W$FW.COLOR.RANGE<1,3> = 650000    W$FW.COLOR.RANGE<2,3> = 800000    W$FW.COLOR.RANGE<3,3> = "GREEN"*    W$FW.METER.VALUE = 725000    W$FW.METER.TARGET = 775000*    W$FW.CAPTION = "July Sales"    W$FW.SUBCAPTION = "Billings"    W$FW.CHART.PALETTE = PALETTE*    W$FW.NUMBER.PREFIX = "$"    W$FW.NUMBER.SUFFIX = ""*    W$FW.TICKMARKS<1> = 1     ;* Display tickmarks    W$FW.TICKMARKS<2> = 1     ;* Display values by tickmarks    W$FW.TICKMARKS<3> = "B"   ;* Show tickmarks below the graph    W$FW.TICKMARKS<4> = ""    ;* Let it calculate this    W$FW.TICKMARKS<5> = 4     ;* 4 minor tickmarks between the major ones**W$CHART.OPTIONS = "paletteThemeColor='#a2287a'"*    W$FW.DD.WIDGET<1,1> = "Drilldown Demo"    W$FW.DD.UD.POS<1,1,1> = 1    W$FW.DD.UD.VAL<1,1,1> = W$FW.METER.VALUE    W$FW.DD.UD.POS<1,1,2> = 2    W$FW.DD.UD.VAL<1,1,2> = WIDGET.USER.DATA(1)*    W$INPUT.PROMPT = "Bullet Chart Style"    W$INPUT.TYPE = "SELECT"    W$INPUT.SELOPTS = "Horizontal":@VM:"Vertical"    W$INPUT.SELVALS = "HBULLET":@VM:"VBULLET"    W$INPUT.UDPOS = 1    W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*    W$INPUT.PROMPT<2> = "Palette"    W$INPUT.TYPE<2> = "SELECT"    W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"    W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"    W$INPUT.UDPOS<2> = 2    W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*    INCLUDE WBPD SOURCE.VIEW.ICON*    RETURN000478SUB.DEMO.SS.LINE0c2SUBROUTINE SUB.DEMO.SS.LINE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Single Series Line Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Monthly Sales Summary"W$TYPE = "FCLINE"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*W$BAR.LABELS = "Sales (USD)"W$BAR.CAPTION = "Monthly Sales (USD)"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Sales (USD)"*SALES = ""SALES<1> = "28452536"SALES<2> = "31208425"SALES<3> = "30245519"SALES<4> = "40425111"SALES<5> = "36515188"SALES<6> = "39144100"SALES<7> = "41655215"SALES<8> = "36615152"SALES<9> = "43944161"SALES<10> = "42251594"SALES<11> = "48833151"SALES<12> = "50122415"*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = OCONV(SALES<N>,'MD02')*  W$BAR.XLABELS<1,N> = OCONV(ICONV(N:"/1",'D'),'DMA')[1,1]  W$BAR.XLABELS<1,N> = OCONV(N*30-15,'DMA')[1,3]NEXT N*W$BAR.TREND.BEG = OCONV(SALES<1>,'MD02')W$BAR.TREND.END = OCONV(SALES<12>,'MD02')W$BAR.TREND.OPTS = "thickness='2' displayValue='Trend'"W$CHART.OPTIONS<-1> = "showValues='0'"W$CHART.OPTIONS<-1> = "animation='1'"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0020BFBUILD.DEMO.FINANCIAL.PICTURE0c2SUBROUTINE BUILD.DEMO.FINANCIAL.PICTURE(YYYY,TODAY,LAST.EOM)OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''REC<1>=YYYYREC<2>=YYYY-1REC<3>=YYYY-1LAST.THREE=YYYY-2:CHAR(253):YYYY-1:CHAR(253):YYYY*OPEN '','MVDB.CONTROL' TO FILE.SALES ELSE STOP 201,'SALES'READ THIS.YEAR.SALES FROM FILE.SALES, 'MONTHLY.':YYYY ELSE THIS.YEAR.SALES=''READ LAST.YEAR.SALES FROM FILE.SALES, 'MONTHLY.':(YYYY-1) ELSE LAST.YEAR.SALES=''READ PREV.YEAR.SALES FROM FILE.SALES, 'MONTHLY.':(YYYY-2) ELSE PREV.YEAR.SALES=''READ PREV.YEAR.GPS FROM FILE.SALES, 'MONTHLY.GPS.':(YYYY-2) ELSE SALES.2.YEARS.AGO=''READ THIS.YEAR.GPS FROM FILE.SALES, 'MONTHLY.GPS.':YYYY ELSE THIS.YEAR.GPS=''READ LAST.YEAR.GPS FROM FILE.SALES, 'MONTHLY.GPS.':(YYYY-1) ELSE LAST.YEAR.GPS=''READ THIS.YEAR.PARTS FROM FILE.SALES, 'MONTHLY.PARTS.':YYYY ELSE THIS.YEAR.PARTS=''READ LAST.YEAR.PARTS FROM FILE.SALES, 'MONTHLY.PARTS.':(YYYY-1) ELSE LAST.YEAR.PARTS=''READ THIS.YEAR.SERVICES FROM FILE.SALES, 'MONTHLY.SERVICES.':YYYY ELSE THIS.YEAR.SERVICES=''READ LAST.YEAR.SERVICES FROM FILE.SALES, 'MONTHLY.SERVICES.':(YYYY-1) ELSE LAST.YEAR.SERVICES=''FY.LAST=SUM(LAST.YEAR.SALES)REC<7>=FY.LASTFY.PARTS=SUM(LAST.YEAR.PARTS)REC<18>=FY.PARTSFY.SERVICES=SUM(LAST.YEAR.SERVICES)REC<25>=FY.SERVICESLAST.MONTH.NO=OCONV(LAST.EOM,'D2-')[1,2]+0YTD.THIS=0YTD.LAST=0YTD.PREV=0GPS.THIS=0GPS.LAST=0GPS.PREV=0PARTS.THIS=0PARTS.LAST=0SERVICES.THIS=0SERVICES.LAST=0THIS.YEAR.MONTHLY.SALES=''THIS.YEAR.MONTHLY.GPS=''FOR MO.NO = 1 TO LAST.MONTH.NO   YTD.THIS+=THIS.YEAR.SALES<MO.NO>   THIS.YEAR.MONTHLY.SALES<1,1,MO.NO>=THIS.YEAR.SALES<MO.NO>   YTD.LAST+=LAST.YEAR.SALES<MO.NO>   YTD.PREV+=PREV.YEAR.SALES<MO.NO>   GPS.THIS+=THIS.YEAR.GPS<MO.NO>   THIS.YEAR.MONTHLY.GPS<1,1,MO.NO>=THIS.YEAR.GPS<MO.NO>   GPS.LAST+=LAST.YEAR.GPS<MO.NO>   GPS.PREV+=PREV.YEAR.GPS<MO.NO>   PARTS.THIS+=THIS.YEAR.PARTS<MO.NO>   PARTS.LAST+=LAST.YEAR.PARTS<MO.NO>   SERVICES.THIS+=THIS.YEAR.SERVICES<MO.NO>   SERVICES.LAST+=LAST.YEAR.SERVICES<MO.NO> NEXT MO.NOREC<67>=LAST.THREEREC<68,3>=THIS.YEAR.MONTHLY.SALESREC<69,3>=THIS.YEAR.MONTHLY.GPSREC<36>=YTD.PREVREC<37>=GPS.PREVCONVERT CHAR(254) TO CHAR(252) IN PREV.YEAR.SALESREC<68,1>=PREV.YEAR.SALESCONVERT CHAR(254) TO CHAR(252) IN PREV.YEAR.GPSREC<69,1>=PREV.YEAR.GPSCONVERT CHAR(254) TO CHAR(252) IN LAST.YEAR.SALESREC<68,2>=LAST.YEAR.SALESCONVERT CHAR(254) TO CHAR(252) IN LAST.YEAR.GPSREC<69,2>=LAST.YEAR.GPSLAST.FY.GPS=SUM(LAST.YEAR.GPS)REC<4>=YTD.THISREC<5>=YTD.LASTDELTA.SALES=YTD.THIS-YTD.LASTDELTA.PCT=(DELTA.SALES*100)/YTD.LASTREC<6>=DELTA.PCTREC<8>=GPS.THISREC<9>=GPS.LASTDELTA.GPS=GPS.THIS-GPS.LASTDELTA.PCT=(DELTA.GPS*100)/GPS.LASTREC<10>=DELTA.PCTREC<11>=LAST.FY.GPSTHIS.GPS.PCT=INT(GPS.THIS * 1000 / YTD.THIS + .5)REC<12>=THIS.GPS.PCTLAST.GPS.PCT=INT(GPS.LAST * 1000 / YTD.LAST + .5)PREV.GPS.PCT=INT(GPS.PREV * 1000 / YTD.PREV + .5)REC<13>=LAST.GPS.PCTFY.LAST.GPS.PCT=INT(LAST.FY.GPS * 1000 / FY.LAST + .5)REC<14>=FY.LAST.GPS.PCTREC<15>=PARTS.THISREC<22>=SERVICES.THISREC<16>=PARTS.LASTREC<23>=SERVICES.LASTDELTA.PARTS=PARTS.THIS-PARTS.LASTDELTA.PARTS.PCT=(DELTA.PARTS*100)/PARTS.LASTREC<17>=DELTA.PARTS.PCTDELTA.SERVICES=SERVICES.THIS-SERVICES.LASTDELTA.SERVICES.PCT=(DELTA.SERVICES*100)/SERVICES.LASTREC<24>=DELTA.SERVICES.PCTTHIS.PARTS.PCT=INT(PARTS.THIS * 1000 / YTD.THIS + .5)REC<19>=THIS.PARTS.PCTLAST.PARTS.PCT=INT(PARTS.LAST * 1000 / YTD.LAST + .5)REC<20>=LAST.PARTS.PCTFY.PARTS.PCT=INT(FY.PARTS * 1000 / FY.LAST + .5)REC<21>=FY.PARTS.PCTTHIS.SERVICES.PCT=INT(SERVICES.THIS * 1000 / YTD.THIS + .5)REC<26>=THIS.SERVICES.PCTLAST.SERVICES.PCT=INT(SERVICES.LAST * 1000 / YTD.LAST + .5)REC<27>=LAST.SERVICES.PCTFY.SERVICES.PCT=INT(FY.SERVICES * 1000 / FY.LAST + .5)REC<28>=FY.SERVICES.PCTREC<29>=YYYYREC<30>=OCONV(LAST.EOM,'D2/')REC<31>=YYYY-1REC<32>=YYYY-2*** DETERMINE PCT OF PARTS FOR PREVIOUS YEAR BETWEEN 40.0% AND 60.0%*DELTA=RND(200);  * -10.0 TO 10.0PREV.PART.PCT=500+(DELTA-100)PREV.PART.AMT=INT(YTD.PREV * PREV.PART.PCT/1000 + .5)PREV.SERVICE.AMT=YTD.PREV-PREV.PART.AMTPREV.SERVICE.PCT=1000-PREV.PART.PCT*** MARGINS, PARTS, AND SERVICES FOR DRILLDOWNS*REC<38>=LAST.THREEYEARS=LAST.THREEMAX.YEARS=DCOUNT(YEARS,CHAR(253))REC<39>=PREV.GPS.PCT:CHAR(253):LAST.GPS.PCT:CHAR(253):THIS.GPS.PCTREC<40>=PREV.PART.AMT:CHAR(253):PARTS.LAST:CHAR(253):PARTS.THISREC<41>=PREV.PART.PCT:CHAR(253):LAST.PARTS.PCT:CHAR(253):THIS.PARTS.PCTREC<42>=PREV.SERVICE.AMT:CHAR(253):SERVICES.LAST:CHAR(253):SERVICES.THISREC<43>=PREV.SERVICE.PCT:CHAR(253):LAST.SERVICES.PCT:CHAR(253):THIS.SERVICES.PCT*** NET INCOME 10% OF SALES*REC<33>=INT(GPS.THIS * .1 + .5)REC<34>=INT(LAST.FY.GPS * .1 + .5)REC<35>=INT(SUM(PREV.YEAR.GPS) * .1 + .5)*** HARD CODE DAYS TO PAY*REC<44>=35REC<45>=39REC<46>=41REC<54>=65:CHAR(253):20:CHAR(253):10:CHAR(253):5REC<55>=63:CHAR(253):21:CHAR(253):10:CHAR(253):6REC<56>=64:CHAR(253):19:CHAR(253):8:CHAR(253):9*** BUILD REP TOTALS*REPS='John,Katherine,Chris,Carrie,Sally,Jan,Bart,Linus,Max'CONVERT ',' TO CHAR(253) IN REPSMAX.REPS=DCOUNT(REPS,CHAR(253))REC<47>=REPSDEVIATION=35;  * 35% DEVIATIONMOS.IN.YEAR=''FOR YEAR.CNTR = 1 TO MAX.YEARS   YEAR.AMTS=REC<68,YEAR.CNTR>   MOS.IN.YEAR<1,YEAR.CNTR>=DCOUNT(YEAR.AMTS,CHAR(252))   ANN.SALES.AMT=SUM(YEAR.AMTS)   ANN.GP.AMT=SUM(REC<69,YEAR.CNTR>)   GP.FACTOR=ANN.GP.AMT/ANN.SALES.AMT   NUM.ITEMS=MAX.REPS   TOT.SCAT.AMT=ANN.SALES.AMT   GOSUB SCATTER.VALUES   FOR REP.CNTR = 1 TO MAX.REPS      REP.SALES.AMT=RETURN.AMOUNTS<1,1,REP.CNTR>      REC<48,REP.CNTR,YEAR.CNTR>=REP.SALES.AMT      REP.GP.AMT=INT(REP.SALES.AMT * GP.FACTOR + .5)      REC<49,REP.CNTR,YEAR.CNTR>=REP.GP.AMT    NEXT REP.CNTR NEXT YEAR.CNTR*** CREATE MONTHLIES FOR EACH REP AND SAVE IN SALES.YYYY*DEVIATION=20FOR YEAR.CNTR = 1 TO MAX.YEARS   YEAR=YEARS<1,YEAR.CNTR>   NUM.ITEMS=MOS.IN.YEAR<1,YEAR.CNTR>   SALES.REC=''   GPS.REC=''   FOR REP.CNTR = 1 TO MAX.REPS      REP=REPS<1,REP.CNTR>      SALES.REC<1,REP.CNTR>=REP      GPS.REC<1,REP.CNTR>=REP      TOT.SCAT.AMT=REC<48,REP.CNTR,YEAR.CNTR>      GOSUB SCATTER.VALUES      SALES.REC<2,REP.CNTR>=RETURN.AMOUNTS      TOT.SCAT.AMT=REC<49,REP.CNTR,YEAR.CNTR>      GOSUB SCATTER.VALUES      GPS.REC<2,REP.CNTR>=RETURN.AMOUNTS    NEXT REP.CNTR   WRITE SALES.REC ON FILE.CONTROL, 'SALES.':YEAR   WRITE GPS.REC ON FILE.CONTROL, 'GPS.':YEAR NEXT YEAR.CNTR*** BUILD SERVICES AND PARTS*PARTS='Doohickey A,Doohickey B,Doohickey C,Doohickey D'CONVERT ',' TO CHAR(253) IN PARTSMAX.PARTS=DCOUNT(PARTS,CHAR(253))REC<52>=PARTSDEVIATION=35FOR YEAR.CNTR = 1 TO MAX.YEARS   ANN.PART.AMT=REC<40,YEAR.CNTR>   NUM.ITEMS=MAX.PARTS   TOT.SCAT.AMT=ANN.PART.AMT   GOSUB SCATTER.VALUES   FOR PART.CNTR = 1 TO MAX.PARTS      REC<53,PART.CNTR,YEAR.CNTR>=RETURN.AMOUNTS<1,1,PART.CNTR>    NEXT PART.CNTR NEXT YEAR.CNTR*SERVICES='Diagnostics,Repair,Custom Machining,Preventative Maintenance'CONVERT ',' TO CHAR(253) IN SERVICESMAX.SERVICES=DCOUNT(SERVICES,CHAR(253))REC<50>=SERVICESDEVIATION=35FOR YEAR.CNTR = 1 TO MAX.YEARS   ANN.SERVICE.AMT=REC<42,YEAR.CNTR>   NUM.ITEMS=MAX.SERVICES   TOT.SCAT.AMT=ANN.SERVICE.AMT   GOSUB SCATTER.VALUES**CRT 'YEAR.CNTR=':YEAR.CNTR**CRT 'ANN.SERVICE.AMT=':ANN.SERVICE.AMT**CRT 'RETURN.AMOUNTS=':RETURN.AMOUNTS:; DEBUG   FOR SERVICE.CNTR = 1 TO MAX.SERVICES      REC<51,SERVICE.CNTR,YEAR.CNTR>=RETURN.AMOUNTS<1,1,SERVICE.CNTR>    NEXT SERVICE.CNTR NEXT YEAR.CNTRWRITE REC ON FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE'RETURN*SCATTER.VALUES:*RETURN.AMOUNTS=''RUNNING.AMT=0LINEAR.PCT=100/NUM.ITEMSMAX.DEVIATION=INT((LINEAR.PCT * DEVIATION/100) * 200)HALF.DEVIATION=INT(MAX.DEVIATION/2 + .5)RUNNING.PCT=0LESS.1=NUM.ITEMS-1MID.WAY=INT(NUM.ITEMS/2 + .5)FOR SCAT.CNTR = 1 TO LESS.1   RANDOM.SCAT=RND(MAX.DEVIATION)   PCT=LINEAR.PCT + ((HALF.DEVIATION-RANDOM.SCAT) / 100)   RUNNING.PCT+=PCT   AMT=INT(TOT.SCAT.AMT * PCT/100 + .5)   RUNNING.AMT+=AMT   IF MID.WAY THEN      IF RUNNING.AMT > (TOT.SCAT.AMT / 2 + .5) THEN         * RUNNING TOO HIGH SO REDUCT         MAX.DEVIATION=INT((LINEAR.PCT * DEVIATION/100) * 125)         HALF.DEVIATION=INT(MAX.DEVIATION/2 + .5)       END    END   RETURN.AMOUNTS<1,1,-1>=AMT NEXT SCAT.CNTRRETURN.AMOUNTS<1,1,-1>=TOT.SCAT.AMT - RUNNING.AMTRETURNEND0001CDSUB.PORTAL.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) Zumasys, Inc*W$TITLE='Portal Documentation'W$TYPE='HTML'W$WIDTH = 1                    ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FILE.WEB.FORMS, 'PORTAL.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORMRETURN00062BSUB.SYS.ERR.BAR0c2    SUBROUTINE SUB.SYS.ERR.BAR* Changed by PORTBAS -> SUBROUTINE SUB.SYS.ERRS* @(#) SUB.SYS.ERR.BAR Ported to jBASE 17:55:32  08 JUL 2015*  The following variable names were converted*   DATE* ** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Show system errors*    INCLUDE WBPD MVDB.INCLUDE*    W$TYPE = "FCCOLUMN2D"    W$TITLE = "System Errors by Day For Each Day"    W$WIDTH = 3*    IF G$QUERYMODE = "1" THEN RETURN*    OPEN '','SYSTEM-ERRORS' TO F.SYSTEM.ERRORS ELSE RETURN*    BASE.DATE = DATE() - 29    XLINE = 'SSELECT SYSTEM-ERRORS BY-DSND DATE BY-DSND TIME WITH DATE GT "':OCONV(BASE.DATE,'D2/'):'"'    EXECUTE XLINE CAPTURING JUNK**    W$BAR.LABELS<1> = "Errors from ":OCONV(BASE.DATE,'D2/'):" Thru ":OCONV(DATE(),'D2/')    W$BAR.TYPE = "clustered"*    LOOP        READNEXT ID ELSE EXIT        Date = FIELD(ID,'*',1)        IF Date < BASE.DATE THEN EXIT*        W$BAR.VALUES<1,(Date-BASE.DATE)+1> += 1    REPEAT*    FOR X = BASE.DATE TO DATE()        OFFSET = (BASE.DATE-X)+1        W$BAR.XLABELS<1,OFFSET> = OCONV(X,'DD')    NEXT X*    W$BAR.YMEMO = "Error Records"    W$BAR.XMEMO = "Day of Month"*    W$BAR.TREND.BEG<1> = "3"    W$BAR.TREND.END<1> = "13"    W$BAR.TREND.OPTS<1> = "thickness='4' color='ff0000' displayValue='Bad Trend'"    W$BAR.TREND.BEG<2> = "11"    W$BAR.TREND.END<2> = "8"    W$BAR.TREND.OPTS<2> = "thickness='10' color='00ff00' displayValue='Good Trend'"*    W$LINK.LABEL = "Detail"    W$LINK.LOCATION = "2"    W$LINK.DD.WIDGET = "System Errors"*    RETURN0002BASUB.SHOW.SESSION0c2SUBROUTINE SUB.SHOW.SESSION** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Show session contents*INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD WWW.INCLUDE*W$TYPE = "TABLE"W$TITLE = "Web Session Contents"W$WIDTH = 3* IF G$QUERYMODE THEN RETURN*READ REC FROM F.WEB.SESSION, SESSION$ID ELSE REC = ""W$TABLE.COL.LABELS<1,1> = "Variable"W$TABLE.COL.LABELS<1,2> = "Value"W$TABLE.DATA<1,1> = "Session ID"W$TABLE.DATA<1,2> = SESSION$IDFOR N = 1 TO DCOUNT(REC<1>, @VM)  W$TABLE.DATA<N+1,1> = REC<1,N>  VAL = REC<2,N>  CONVERT CHAR(2) TO "^" IN VAL  CONVERT CHAR(3) TO "]" IN VAL  CONVERT CHAR(4) TO "\" IN VAL  W$TABLE.DATA<N+1,2> = VALNEXT N*RETURN001133SUB.ADMIN.CONFIG0c2SUBROUTINE SUB.ADMIN.CONFIG** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Administrative configuration widget.*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Administrative Configuration Widget"W$TYPE = "HTML" ;* or HTML, FCPIE, FCBAR, etc.W$WIDTH = 2 ;* 1 = narrow, 2 = medium, 3 = full-width*IF G$QUERYMODE THEN RETURN ;* Dont process, just provide title, type & width*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TEXT.INFO = "Unable to open MVDB.CONTROL"  RETURNENDOPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE   W$TEXT.INFO = "Unable to open MVDB.THEMES"  RETURNENDW$TEXT.INFO = "" ;* No widget content at this point.*READ SETTINGS.REC FROM F.MVDB.CONTROL, 'MVDB.SETTINGS' ELSE SETTINGS.REC = ""IF G$SUBMITTED = 1 THEN  FOR N = 1 TO 15    SETTINGS.REC<N> = WIDGET.USER.DATA(N)  NEXT N  WRITE SETTINGS.REC ON F.MVDB.CONTROL, 'MVDB.SETTINGS'  W$HTML.DATA = "Settings saved."ENDIF SETTINGS.REC<1> # "" THEN  W$HTML.DATA := '<br /><a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=':SETTINGS.REC<1>:'" target="MVDB.SUBS_':SETTINGS.REC<1>:'">Edit Subroutine: ':SETTINGS.REC<1>:'</a>'ENDIF SETTINGS.REC<5> = "" THEN SETTINGS.REC<5> = 24IF SETTINGS.REC<3> = "" THEN SETTINGS.REC<3> = 20IF SETTINGS.REC<4> = "" THEN  LOCATE "SERVER_PORT" IN CGI$VARS SETTING POS THEN    SETTINGS.REC<4> = CGI$VALS<POS>  ENDENDIF SETTINGS.REC<9> = '' THEN SETTINGS.REC<9> = 'UTF-8'*W$INPUT.PROMPT<1> = "User Auth Sub"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = SETTINGS.REC<1>W$INPUT.PARAMS<1> = 'size="40"'*W$INPUT.PROMPT<2> = "Password Req?"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "Yes":@VM:"No"W$INPUT.SELVALS<2> = "0":@VM:"1"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = SETTINGS.REC<2>*W$INPUT.PROMPT<3> = "Failure Tolerance Period"W$INPUT.TYPE<3> = "TEXT"W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = SETTINGS.REC<3>W$INPUT.PARAMS<3> = 'size="5"'*W$INPUT.PROMPT<4> = "TCP Port"W$INPUT.TYPE<4> = "TEXT"W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = SETTINGS.REC<4>W$INPUT.PARAMS<4> = 'size="5"'*W$INPUT.PROMPT<5> = "Session Timeout (hours)"W$INPUT.TYPE<5> = "TEXT"W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = SETTINGS.REC<5>W$INPUT.PARAMS<5> = 'size="5"'*IF SETTINGS.REC<6> = '' THEN SETTINGS.REC<6> = 0W$INPUT.PROMPT<6> = "GMT Offset"W$INPUT.TYPE<6> = "SELECT"GMT.VAL.LIST = ''; GMT.OPT.LIST = ''FOR X = 12 TO 1 STEP -1  GMT.OPT.LIST<1,-1> = 'GMT -':X  GMT.VAL.LIST<1,-1> = X * (-1)NEXT XGMT.OPT.LIST<1,-1> = 'GMT'GMT.VAL.LIST<1,-1> = 0FOR X = 1 TO 12  GMT.OPT.LIST<1,-1> = 'GMT +':X  GMT.VAL.LIST<1,-1> = XNEXT XW$INPUT.SELOPTS<6> = GMT.OPT.LISTW$INPUT.SELVALS<6> = GMT.VAL.LISTW$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = SETTINGS.REC<6>*W$INPUT.PROMPT<7> = "Alternate Logo Image"W$INPUT.TYPE<7> = "TEXT"W$INPUT.UDPOS<7> = 7W$INPUT.DEFAULT<7> = SETTINGS.REC<7>*EXECUTE 'SSELECT MVDB.THEMES' CAPTURING JUNKTHEME.LIST = ''LOOP  READNEXT THEME.ID ELSE EXIT  READV CSS.NAME FROM F.MVDB.THEMES, THEME.ID, 1 ELSE CSS.NAME = ''  IF CSS.NAME # '' THEN    THEME.LIST<1,-1> = CSS.NAME    THEME.LIST<2,-1> = THEME.ID  ENDREPEATW$INPUT.PROMPT<8> = "Dashboard Theme"W$INPUT.TYPE<8> = "SELECT"W$INPUT.SELOPTS<8> = 'Default Theme':@VM:THEME.LIST<2>W$INPUT.SELVALS<8> = '':@VM:THEME.LIST<2>W$INPUT.UDPOS<8> = 8W$INPUT.DEFAULT<8> = SETTINGS.REC<8>*W$INPUT.PROMPT<9> = 'Character Set'W$INPUT.TYPE<9> = "TEXT"W$INPUT.UDPOS<9> = 9W$INPUT.DEFAULT<9> = SETTINGS.REC<9>*W$INPUT.PROMPT<10> = "Auto-Trim Sessions"W$INPUT.TYPE<10> = "SELECT"W$INPUT.SELOPTS<10> = 'No':@VM:'Yes'W$INPUT.SELVALS<10> = 'N':@VM:'Y'W$INPUT.UDPOS<10> = 10W$INPUT.DEFAULT<10> = SETTINGS.REC<10>*W$INPUT.PROMPT<11> = "Auto-Refresh"W$INPUT.TYPE<11> = "SELECT"W$INPUT.SELOPTS<11> = 'No':@VM:'Yes'W$INPUT.SELVALS<11> = 'N':@VM:'Y'W$INPUT.UDPOS<11> = 11W$INPUT.DEFAULT<11> = SETTINGS.REC<11>**WEBSERVICE*W$INPUT.PROMPT<12> = "Allow 'webservice' logins"W$INPUT.TYPE<12> = "SELECT"W$INPUT.SELOPTS<12> = 'No':@VM:'Yes'W$INPUT.SELVALS<12> = 'N':@VM:'Y'W$INPUT.UDPOS<12> = 12W$INPUT.DEFAULT<12> = SETTINGS.REC<12>**EMAILED REPORTS*W$INPUT.PROMPT<13> = "Allow 'emailed' logins"W$INPUT.TYPE<13> = "SELECT"W$INPUT.SELOPTS<13> = 'No':@VM:'Yes'W$INPUT.SELVALS<13> = 'N':@VM:'Y'W$INPUT.UDPOS<13> = 13W$INPUT.DEFAULT<13> = SETTINGS.REC<13>*W$INPUT.BUTTON = "Save"*RETURN003063SUB.PORTAL.AR.REPORTS0c2SUBROUTINE SUB.PORTAL.AR.REPORTS**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE='Portal AR'; CALL PORTAL.SHOW.LAST.UPDATED('AR')W$TYPE = "FC2DPIE"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*EQUATE REPORT.TYPE TO WIDGET.USER.DATA(1)W$PDFABLE=1OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.DASHBOARD.BALANCES ELSE   W$TYPE='TEXT'   W$TEXT.DATA='UNABLE TO OPEN DICT DASHBOARD.BALANCES'   RETURN END** LAYOUT OF THE *CURRENT.AR.STATS RECORD** PERIOD.AMOUNTS DATA LAYOUT* 1 PERIOD 1 AMOUNT* 2 PERIOS 2 AMOUNT* 3 PERIOD 3 AMOUNT* 4 PERIOD 4 AMOUNT* 5* 6 YEAR ] YEAR ] YEAR* 7 PERIOD 1 NUMBER \ PERIOD 2 NUMBER \ PERIOD 3 NUMBER \ PERIOD 4 NUMBER* 8 PERIOD 1 AMOUNT \ PERIOD 2 AMOUNT \ PERIOD 3 AMOUNT \ PERIOD 4 AMOUNT* 9 YEAR 1 TOTAL DAYS ] YEAR TOTAL DAYS ] YEAR 3 TOTAL DAYS ] YEAR 4 TOTAL DAYS* 10 YEAR 1 JAN # PAID\ FEB # PAID ... ] YEAR 2 JAN # PAID \* 11 YEAR 1 JAN # TOTAL DAYS \ FEB TOTAL DAYS ....*DIM AR.AMOUNTS(30)MATREAD AR.AMOUNTS FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AR.STATS' ELSE MAT AR.AMOUNTS=''EQUATE YEARS TO AR.AMOUNTS(6)NUM.YEARS=DCOUNT(YEARS,@VM)EQUATE ANNUAL.NUMBERS TO AR.AMOUNTS(7)EQUATE ANNUAL.AMOUNTS TO AR.AMOUNTS(8)EQUATE ANNUAL.TOTAL.DAYS TO AR.AMOUNTS(9)EQUATE MONTHLY.NUMBER.PAID TO AR.AMOUNTS(10)EQUATE MONTHLY.TOTAL.DAYS TO AR.AMOUNTS(11)EQUATE CUSTOMERS TO AR.AMOUNTS(12)EQUATE CUST.AMT.DUES TO AR.AMOUNTS(13)EQUATE CUST.MOST.DAYS.DUE TO AR.AMOUNTS(14)EQUATE CUST.TOTAL.1000.DAYS TO AR.AMOUNTS(15)EQUATE CUST.NUM.1000.DAYS TO AR.AMOUNTS(16)EQUATE CUST.TOTAL.60.DAYS TO AR.AMOUNTS(17)EQUATE CUST.NUM.60.DAYS TO AR.AMOUNTS(18)EQUATE HIGHEST.AMTS.CUSTS TO AR.AMOUNTS(19)EQUATE HIGHEST.AMTS TO AR.AMOUNTS(20)EQUATE HIGHEST.DAYS.CUSTS TO AR.AMOUNTS(21)EQUATE HIGHEST.DAYS TO AR.AMOUNTS(22)EQUATE HIGHEST.INCREASE.CUSTS TO AR.AMOUNTS(23)EQUATE HIGHEST.INCREASE.PCTS TO AR.AMOUNTS(24)EQUATE HIGHEST.INCREASE.60.DAY.AVG TO AR.AMOUNTS(25)EQUATE HIGHEST.INCREASE.1000.DAY.AVG TO AR.AMOUNTS(26)*W$INPUT.PROMPT<1>='Type of Report 'W$INPUT.TYPE<1>='SELECT'W$INPUT.SELOPTS<1>='Current Receivables':@VM:'Average Days by Year':@VM:'Average Days Last 12 Months'*** Add Average Days by Month for past 3 years with activity in every month*YEAR.POS=NUM.YEARSYEARS.ALREADY=0LOOP   YEAR.POS=YEAR.POS-1   IF NOT(YEAR.POS) THEN      JAN.NUMBER=0    END ELSE      JAN.NUMBER=MONTHLY.NUMBER.PAID<1,YEAR.POS,1>    ENDUNTIL NOT(JAN.NUMBER) OR YEARS.ALREADY >= 3 DO   YEAR=YEARS<1,YEAR.POS>   YEARS.ALREADY+=1   W$INPUT.SELOPTS<1,-1>='Average Days by Month ':YEARREPEAT**W$INPUT.SELOPTS<1,-1>='Customers By Largest Receivables'**W$INPUT.SELOPTS<1,-1>='Customers By Most Aged Receivables'**W$INPUT.SELOPTS<1,-1>='Customers By Largest Aging Increases'W$INPUT.SELOPTS<1,-1>='Customers Needing Aging Attention'W$INPUT.SELVALS=W$INPUT.SELOPTSIF REPORT.TYPE = '' THEN   REPORT.TYPE='Current Receivables' ENDW$INPUT.UDPOS = 1W$INPUT.DEFAULT<1>=REPORT.TYPE*BEGIN CASE   CASE REPORT.TYPE = 'Current Receivables'      GOSUB DO.CURRENT   CASE REPORT.TYPE = 'Average Days by Year'      GOSUB AVERAGE.DAYS.BY.YEAR   CASE REPORT.TYPE = 'Average Days Last 12 Months'      GOSUB AVERAGE.DAYS.LAST.12.MONTHS   CASE REPORT.TYPE[1,21] = 'Average Days by Month'      AVERAGE.YEAR=FIELD(REPORT.TYPE,' ',5)      GOSUB AVERAGE.DAYS.BY.MONTH.PER.YEAR   CASE REPORT.TYPE = 'CUSTOMERS BY LARGEST RECEIVABLES'      GOSUB CUSTOMERS.BY.LARGEST.RECEIVABLES   CASE REPORT.TYPE = 'CUSTOMERS BY MOST AGED RECEIVABLES'      GOSUB CUSTOMERS.BY.MOST.AGED.RECEIVABLES   CASE REPORT.TYPE = 'CUSTOMERS BY LARGEST AGING INCREASES'      GOSUB CUSTOMERS.BY.LARGEST.AGING.INCREASES   CASE REPORT.TYPE = 'Customers Needing Aging Attention'      GOSUB CUSTOMERS.BY.LARGEST.RECEIVABLES   CASE 1      W$TYPE='TEXT'      W$TEXT.DATA='INVALID REPORT TYPE=':REPORT.TYPEEND CASERETURN*DO.CURRENT:*W$TITLE = "Current - AR Balances by Days Due"; CALL PORTAL.SHOW.LAST.UPDATED('AR')AMTS=AR.AMOUNTS(1):@AM:AR.AMOUNTS(2):@AM:AR.AMOUNTS(3):@AM:AR.AMOUNTS(4):@AM:AR.AMOUNTS(5)W$PIE.CAPTION='Total AR Balance of '*TOT.AMT=SUM(AMTS)W$PIE.CAPTION:=OCONV(TOT.AMT,'MD02,$')*CATEGORIES='Current'CATEGORIES<2>='1 - 30 Days'CATEGORIES<3>='31 - 60 Days'CATEGORIES<4>='61 - 90 Days'CATEGORIES<5>='Over 90 Days'*CATEGORY.AMTS=AMTS**W$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='showPercentageValues="0"'W$CHART.OPTIONS<-1>='showPercentageInLabel="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="0"'W$CHART.OPTIONS<-1>='thousandSeparator=","'W$CHART.OPTIONS<-1>='pieradius="150"'FOR N = 1 TO 5  W$PIE.LABELS<1,N> = CATEGORIES<N>  W$PIE.VALUES<1,N> = INT(CATEGORY.AMTS<N>/100 + .5)NEXT N*RETURN*AVERAGE.DAYS.BY.YEAR:*W$TITLE = "Average Days To Pay"; CALL PORTAL.SHOW.LAST.UPDATED('AR')W$TYPE = "FCCOLUMN3D"*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEFIRST.YEAR=''; CURRENT.YEAR=''*W$BAR.XMEMO = "Year (drill down for detail)"W$BAR.YMEMO = "Average Days to Pay"*YEAR.NO=0*FOR NN = 1 TO NUM.YEARS  ANNUAL.BY.TYPE.NUMBER=ANNUAL.NUMBERS<1,NN>  BY.TYPE.NUMBER=SUM(ANNUAL.BY.TYPE.NUMBER)  TOTAL.DAYS=ANNUAL.TOTAL.DAYS<1,NN>  IF BY.TYPE.NUMBER AND TOTAL.DAYS THEN     AVERAGE.DAYS=INT(TOTAL.DAYS * 10 / BY.TYPE.NUMBER + .5)     AVERAGE.DAYS=OCONV(AVERAGE.DAYS,'MD1')     YEAR.NO+=1     YEAR=YEARS<1,NN>     IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR     CURRENT.YEAR=YEAR     W$BAR.VALUES<1,YEAR.NO> = AVERAGE.DAYS     W$BAR.XLABELS<1,YEAR.NO> = YEAR     W$FW.DD.WIDGET<1,YEAR.NO>='PORTAL DAYS TO PAY PIE'     W$FW.DD.UD.POS<1,YEAR.NO,1>=1     W$FW.DD.UD.VAL<1,YEAR.NO,1>=YEAR   ENDNEXT NN*W$BAR.CAPTION = "Average Days to Pay From ":FIRST.YEAR:' to ':CURRENT.YEARW$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="1"'W$CHART.OPTIONS<-1>='thousandSeparator=","'W$CHART.OPTIONS<-1>='pieradius="150"'*RETURN*AVERAGE.DAYS.LAST.12.MONTHS:*LAST.YEAR=YEARS<1,NUM.YEARS>**DEBUG=''MOS.IN.LAST.YEAR=DCOUNT(MONTHLY.NUMBER.PAID<1,NUM.YEARS>,CHAR(252))**DEBUG<-1>=MOS.IN.LAST.YEARMOS.IN.PREV.YEAR=12-MOS.IN.LAST.YEAR**DEBUG<-1>=MOS.IN.PREV.YEARIF MOS.IN.PREV.YEAR = 12 THEN   LAST.YEAR=LAST.YEAR-1   THIS.MONTHLY.NUMBERS=MONTHLY.NUMBER.PAID<1,NUM.YEARS-1>   THIS.MONTHLY.TOTAL.DAYS=MONTHLY.TOTAL.DAYS<1,NUM.YEARS-1>   MONTHLY.LABELS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'   CONVERT ',' TO CHAR(252) IN MONTHLY.LABELS   START.MONTH="January ":LAST.YEAR   END.MONTH="December ":LAST.YEAR END ELSE   FULL.MONTHS='January,February,March,April,May,June,July,August,September,October,November,December'   PREV.YEAR.MO.NO=12-MOS.IN.PREV.YEAR+1**DEBUG<-1>=PREV.YEAR.MO.NO   START.MONTH=FIELD(FULL.MONTHS,',',PREV.YEAR.MO.NO):' ':(LAST.YEAR-1)   END.MONTH=FIELD(FULL.MONTHS,',',MOS.IN.LAST.YEAR):' ':LAST.YEAR   ABREV.MONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'   COMMA.POS=INDEX(ABREV.MONTHS,',',PREV.YEAR.MO.NO-1)   MONTHLY.LABELS=ABREV.MONTHS[COMMA.POS+1,9999]:',':(ABREV.MONTHS[1,COMMA.POS-1])   CONVERT ',' TO CHAR(252) IN MONTHLY.LABELS   *   ** ISOLATE THE NUMBERS FOR THE PREVIOUS YEAR   *   THIS.MONTHLY.NUMBERS=MONTHLY.NUMBER.PAID<1,NUM.YEARS-1>   POS.BEFORE.FIRST=INDEX(THIS.MONTHLY.NUMBERS,CHAR(252),PREV.YEAR.MO.NO-1)   THIS.MONTHLY.NUMBERS=THIS.MONTHLY.NUMBERS[POS.BEFORE.FIRST+1,99999]   THIS.MONTHLY.NUMBERS:=CHAR(252):MONTHLY.NUMBER.PAID<1,NUM.YEARS>   THIS.MONTHLY.TOTAL.DAYS=MONTHLY.TOTAL.DAYS<1,NUM.YEARS-1>   POS.BEFORE.FIRST=INDEX(THIS.MONTHLY.TOTAL.DAYS,CHAR(252),PREV.YEAR.MO.NO-1)   THIS.MONTHLY.TOTAL.DAYS=THIS.MONTHLY.TOTAL.DAYS[POS.BEFORE.FIRST+1,99999]   THIS.MONTHLY.TOTAL.DAYS:=CHAR(252):MONTHLY.TOTAL.DAYS<1,NUM.YEARS>ENDGOSUB AVERAGE.DAYS.BY.MONTHRETURN*AVERAGE.DAYS.BY.MONTH.PER.YEAR:*LOCATE AVERAGE.YEAR IN YEARS<1> SETTING YEAR.POS ELSE RETURNTHIS.MONTHLY.NUMBERS=MONTHLY.NUMBER.PAID<1,YEAR.POS>THIS.MONTHLY.TOTAL.DAYS=MONTHLY.TOTAL.DAYS<1,YEAR.POS>START.MONTH="January ":AVERAGE.YEAREND.MONTH="December ":AVERAGE.YEARMONTHLY.LABELS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'CONVERT ',' TO CHAR(252) IN MONTHLY.LABELSGOSUB AVERAGE.DAYS.BY.MONTHRETURN*AVERAGE.DAYS.BY.MONTH:*W$TITLE = "Average Days To Pay"; CALL PORTAL.SHOW.LAST.UPDATED('AR')W$TYPE = "FCCOLUMN3D"*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUE*W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Average Days to Pay"*MONTH.NO=0*FOR NN = 1 TO 12  MONTHLY.NUMBER=THIS.MONTHLY.NUMBERS<1,1,NN>  MONTHLY.DAYS=THIS.MONTHLY.TOTAL.DAYS<1,1,NN>  MONTHLY.LABEL=MONTHLY.LABELS<1,1,NN>  IF MONTHLY.NUMBER AND MONTHLY.DAYS THEN     AVERAGE.DAYS=INT(MONTHLY.DAYS * 10 / MONTHLY.NUMBER + .5)     AVERAGE.DAYS=OCONV(AVERAGE.DAYS,'MD1')   END ELSE AVERAGE.DAYS=0  W$BAR.VALUES<1,NN> = AVERAGE.DAYS  W$BAR.XLABELS<1,NN> = MONTHLY.LABELNEXT NN*W$BAR.CAPTION = "Average Days to Pay From ":START.MONTH:' to ':END.MONTHW$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="1"'RETURN*CUSTOMERS.BY.LARGEST.RECEIVABLES:*W$TYPE='TABLE'W$WIDTH = 3MAX.HIGHEST.AMTS=DCOUNT(HIGHEST.AMTS.CUSTS,@VM)IF MAX.HIGHEST.AMTS > 50 THEN MAX.HIGHEST.AMTS=50W$TABLE.COL.LABELS<1,1> = "| --- Customers ---<br>| ":MAX.HIGHEST.AMTS:" With Most Amount Owed"W$TABLE.COL.LABELS<1,2> = "Amount<br>Owed"W$TABLE.COL.LABELS<1,3> = "Most Days|<br>&nbsp;&nbsp;&nbsp;&nbsp;Aged&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|"W$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "center"W$TABLE.COL.JUST<1,3> = "center"IF MAX.HIGHEST.AMTS > 50 THEN MAX.HIGHEST.AMTS=50W$TITLE = MAX.HIGHEST.AMTS:' Customers With Largest Receivables'; CALL PORTAL.SHOW.LAST.UPDATED('AR')FOR I = 1 TO MAX.HIGHEST.AMTS   CUSTOMER=HIGHEST.AMTS.CUSTS<1,I>   HIGHEST.AMT=HIGHEST.AMTS<1,I>   HIGHEST.AMT=OCONV(HIGHEST.AMT,'MD2,')   LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUST.POS ELSE CUST.POS=9999   CUST.HIGHEST.DAYS=CUST.MOST.DAYS.DUE<1,CUST.POS>   W$TABLE.DATA<I,1>=CUSTOMER   W$TABLE.DATA<I,2>=HIGHEST.AMT   W$TABLE.DATA<I,3>=CUST.HIGHEST.DAYS NEXT I*RETURN*CUSTOMERS.BY.MOST.AGED.RECEIVABLES:***W$TYPE='TABLE'**W$WIDTH = 2MAX.HIGHEST.DAYS=DCOUNT(HIGHEST.DAYS.CUSTS,@VM)IF MAX.HIGHEST.DAYS > 50 THEN MAX.HIGHEST.DAYS=50W$TABLE.COL.LABELS<1,4> = "| --- Customers ---<br>| ":MAX.HIGHEST.DAYS:" With Most Days Aged"W$TABLE.COL.LABELS<1,5> = "Most Days<br>Aged"W$TABLE.COL.LABELS<1,6> = "&nbsp;Amount&nbsp;|<br>&nbsp;&nbsp;&nbsp;Owed&nbsp;&nbsp;&nbsp;|"W$TABLE.COL.JUST<1,4> = "left"W$TABLE.COL.JUST<1,5> = "center"W$TABLE.COL.JUST<1,6> = "right"W$TITLE = MAX.HIGHEST.DAYS:' Customers With Most Aged Receivables'; CALL PORTAL.SHOW.LAST.UPDATED('AR')FOR I = 1 TO MAX.HIGHEST.DAYS   CUSTOMER=HIGHEST.DAYS.CUSTS<1,I>   HIGHEST.DAY=HIGHEST.DAYS<1,I>   LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUST.POS ELSE CUST.POS=9999   AMT.DUE=CUST.AMT.DUES<1,CUST.POS>   W$TABLE.DATA<I,4>=CUSTOMER   W$TABLE.DATA<I,5>=HIGHEST.DAY   W$TABLE.DATA<I,6>=OCONV(AMT.DUE,'MD2,') NEXT I*RETURN*CUSTOMERS.BY.LARGEST.AGING.INCREASES:**W$TYPE='TABLE'*W$WIDTH = 2MAX.HIGHEST.INCREASE=DCOUNT(HIGHEST.INCREASE.CUSTS,@VM)IF MAX.HIGHEST.INCREASE > 50 THEN MAX.HIGHEST.INCREASE=50W$TABLE.COL.LABELS<1,7> = "| --- Customers ---<br>| ":MAX.HIGHEST.INCREASE:" With Significant Aging Increase"W$TABLE.COL.LABELS<1,8> = "PCT<br>Increase"W$TABLE.COL.LABELS<1,9> = "60<br>Day Avg"W$TABLE.COL.LABELS<1,10> = "&nbsp;&nbsp;&nbsp;1000&nbsp;&nbsp;&nbsp;|<br>Day Avg|"W$TABLE.COL.JUST<1,7> = "left"W$TABLE.COL.JUST<1,8> = "center"W$TABLE.COL.JUST<1,9> = "center"W$TABLE.COL.JUST<1,10> = "center"W$TITLE = MAX.HIGHEST.INCREASE:' Customers With Largest Aging Increase'; CALL PORTAL.SHOW.LAST.UPDATED('AR')FOR I = 1 TO MAX.HIGHEST.INCREASE   CUSTOMER=HIGHEST.INCREASE.CUSTS<1,I>   HIGHEST.INCREASE.PCT=HIGHEST.INCREASE.PCTS<1,I>   LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUST.POS ELSE CUST.POS=9999   W$TABLE.DATA<I,7>=CUSTOMER   W$TABLE.DATA<I,8>=HIGHEST.INCREASE.PCT   W$TABLE.DATA<I,9>=HIGHEST.INCREASE.60.DAY.AVG<1,I>   W$TABLE.DATA<I,10>=HIGHEST.INCREASE.1000.DAY.AVG<1,I> NEXT IRETURN0014E0SUB.MOBILE.APPS0c2    SUBROUTINE SUB.MOBILE.APPS* @(#) SUB.MOBILE.APPS Ported to jBASE 17:55:32  08 JUL 2015*  The following variable names were converted*   STATUS* ** Dashboard Widget*    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Mobile Web App Registration"    W$TYPE = "TABLE"    W$WIDTH = 3     ;* Full width (1=1/3, 2=2/3, 3=3/3)*    IF G$QUERYMODE THEN RETURN** Set up column labels    W$TABLE.COL.LABELS<1,1> = "Subroutine Name"    W$TABLE.COL.LABELS<1,2> = "Application Name"    W$TABLE.COL.LABELS<1,3> = "Status"    W$TABLE.COL.LABELS<1,4> = "Action"** Column justification = left, right, center    W$TABLE.COL.JUST<1,1> = "left"    W$TABLE.COL.JUST<1,2> = "left"    W$TABLE.COL.JUST<1,3> = "left"    W$TABLE.COL.JUST<1,4> = "left"** Table Rows*    OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE        W$TYPE = "TEXT"        W$TEXT.DATA = "Unable to open MVDB.CONTROL"        RETURN    END    READ MOBI.APPS FROM F.MVDB.CONTROL, "MOBI.APPS" ELSE MOBI.APPS = ""*    IF WIDGET.USER.DATA(1) # "" THEN        BEGIN CASE        CASE G$SUBMITTED            SUBNAME = WIDGET.USER.DATA(1)            IF SUBNAME # "" THEN                LOCATE SUBNAME IN MOBI.APPS<1> BY "AL" SETTING POS THEN                    MOBI.APPS<2,POS> = WIDGET.USER.DATA(3)                    MOBI.APPS<3,POS> = WIDGET.USER.DATA(2)                END ELSE                    MOBI.APPS = INSERT( MOBI.APPS, 1, POS, 0, SUBNAME )                    MOBI.APPS = INSERT( MOBI.APPS, 2, POS, 0, WIDGET.USER.DATA(3) )                    MOBI.APPS = INSERT( MOBI.APPS, 3, POS, 0, WIDGET.USER.DATA(2) )                END            END        CASE WIDGET.USER.DATA(2) = "delete"            MOBI.APPS = DELETE( MOBI.APPS, 1, WIDGET.USER.DATA(1), 0 )            MOBI.APPS = DELETE( MOBI.APPS, 2, WIDGET.USER.DATA(1), 0 )            MOBI.APPS = DELETE( MOBI.APPS, 3, WIDGET.USER.DATA(1), 0 )        CASE WIDGET.USER.DATA(2) = "play"            MOBI.APPS<2,WIDGET.USER.DATA(1)> = "A"        CASE WIDGET.USER.DATA(2) = "pause"            MOBI.APPS<2,WIDGET.USER.DATA(1)> = "I"        CASE WIDGET.USER.DATA(2) = "default"            LOCATE "D" IN MOBI.APPS<2> SETTING CURR.D THEN                MOBI.APPS<2,CURR.D> = "A"            END            MOBI.APPS<2,WIDGET.USER.DATA(1)> = "D"        CASE 1        END CASE        WRITE MOBI.APPS ON F.MVDB.CONTROL, 'MOBI.APPS'        WIDGET.USER.DATA(1) = ""        WIDGET.USER.DATA(2) = ""        WIDGET.USER.DATA(3) = ""    END*    TOPROW = ""    FOR ROW = 1 TO DCOUNT(MOBI.APPS<1>, @VM )        SUB.NAME = MOBI.APPS<1,ROW>        ENC.SUB.NAME = SUB.NAME        CALL SUB.URL.ENCODE(ENC.SUB.NAME)        SUB.LINK = '<a href="/dbc/MVDB.WEB.ED?ed_file=MOBI.SUBS&ed_item=':ENC.SUB.NAME:'" target="MOBI.SUBS_':ENC.SUB.NAME:'">':SUB.NAME:'</a>'        W$TABLE.DATA<ROW,1> = SUB.LINK        W$TABLE.DATA<ROW,2> = MOBI.APPS<3,ROW>        Status = MOBI.APPS<2,ROW>        BEGIN CASE        CASE Status = "A"            Status = '<img src="/db/icons/bullet_green.png" />Active'        CASE Status = "I"            Status = '<img src="/db/icons/bullet_red.png" />Inactive'        CASE Status = "D"            Status = '<img src="/db/icons/bullet_green.png" /><b>Active/Default</b>'            Status := '&nbsp;<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=play"><img src="/db/icons/control_stop.png" title="Un-set Default" /></a>'            TOPROW = ROW        END CASE        W$TABLE.DATA<ROW,3> = Status        ACTIONS = '<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=delete" '        ACTIONS := \onClick='confirm("Delete this entry?");'><img src="/db/icons/delete.png" title="Delete" /></a>\        ACTIONS := '&nbsp;'        IF MOBI.APPS<2,ROW> = "A" OR MOBI.APPS<2,ROW> = "D" THEN            ICON = "control_pause.png"            ACTION = "pause"            ALT = "Set as inactive"        END ELSE            ICON = "control_play.png"            ACTION = "play"            ALT = "Set as active"        END        ACTIONS := '<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=':ACTION:'" ><img src="/db/icons/':ICON:'" title="':ALT:'" /></a>'        IF MOBI.APPS<2,ROW> # "D" THEN            ICON = "star.png"            ACTION = "default"            ALT = "Set as default"            ACTIONS := '&nbsp;<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=':ACTION:'" ><img src="/db/icons/':ICON:'" title="':ALT:'" /></a>'        END        W$TABLE.DATA<ROW,4> = ACTIONS    NEXT ROW*    IF TOPROW # "" THEN* Float this row to the top of the list (the default application)        ROW = W$TABLE.DATA<TOPROW>        W$TABLE.DATA = DELETE( W$TABLE.DATA, TOPROW, 0, 0 )        W$TABLE.DATA = INSERT( W$TABLE.DATA, 1, 0, 0, ROW )    END*    W$INPUT.PROMPT<1> = "Add Subroutine"    W$INPUT.TYPE<1> = "TEXT"    W$INPUT.UDPOS<1> = 1*    W$INPUT.PROMPT<2> = "Description"    W$INPUT.TYPE<2> = "TEXT"    W$INPUT.UDPOS<2> = 2*    W$INPUT.PROMPT<3> = "Status"    W$INPUT.TYPE<3> = "SELECT"    W$INPUT.UDPOS<3> = 3    W$INPUT.DEFAULT<3> = "A"    W$INPUT.SELOPTS<3> = "Active":@VM:"Default":@VM:"Inactive"    W$INPUT.SELVALS<3> = "A":@VM:"D":@VM:"I"*    RETURN0003F5EXECUTE.STACKED.CMNDS0c2SUBROUTINE EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,NUM.RETURNED,REPORT)*REPORT=''NUM.RETURNED=1IF STACKED.1 <> '' THEN   EXECUTE STACKED.1 CAPTURING DUMMY   NUM.RETURNED=SYSTEM(11)   IF NOT(NUM.RETURNED) THEN RETURN ENDBREAK.ON.POS2=INDEX(STACKED.2,'BREAK-ON ',2)IF BREAK.ON.POS2 THEN   BREAK.ON.POS=INDEX(STACKED.2,'BREAK-ON ',1)   PLATFORM=OCONV('PLATFORM','TMVDB.CONTROL;X;1;1')   IF PLATFORM = '' THEN PLATFORM='D3'   IF PLATFORM = 'JB' THEN      STR1=STACKED.2[1,BREAK.ON.POS-1]      STR2=STACKED.2[BREAK.ON.POS,9999999]      PIPE.POS=INDEX(STR2,' PIPE ',1)      IF PIPE.POS THEN         BREAK.VAR=STR2[1,PIPE.POS-1]         BREAK.VAR=TRIM(BREAK.VAR)         BREAK.VAR=FIELD(BREAK.VAR,' ',2)         BREAK.VAR=' BREAK-ON ':BREAK.VAR:' "':"'V'|":'" '         STR2=STR2[PIPE.POS,9999999]       END ELSE         BREAK.VAR=''       END      STACKED.2=STR1:BREAK.VAR:STR2    END ENDEXECUTE STACKED.2 CAPTURING REPORTCONVERT '$,' TO '' IN REPORTRETURNEND0000D7TEST.TOM0c2PROMPT ''INPUT A,1CRT AINPUT A,0CRT A****DATA "LIST SALES.FILE.PATH"****EXECUTE 'SELECT SALES.FILE.PATH WITH CLOSE.DATE = "5-1-20"'**IF 0 THEN XXX=@SENTENCE ELSE XXX=SENTENCE()**CRT XXX**CRT XXX0003E3CREATE.UD.QPOINTER0c2SUBROUTINE CREATE.UD.QPOINTER(ACCOUNT,FILENAME,CALL.IT,FI.QPOINTER)OPEN '',CALL.IT TO FI.QPOINTER THEN   IF CALL.IT <> 'QFILE' THEN RETURN ENDCALL.IT.PARAM=CALL.ITCALL.IT=''OPEN '','VOC' TO FI.VOC ELSE RETURNOPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE   UD.ACCOUNTS='F'   UD.ACCOUNTS<-1>='@UDTHOME/sys/UD.ACCOUNT'   UD.ACCOUNTS<-1>='@UDTHOME/sys/D_UD.ACCOUNT'   WRITE UD.ACCOUNTS ON FI.VOC, 'UD.ACCOUNTS'   OPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE RETURN ENDREADV PATH FROM FI.UD.ACCOUNTS, ACCOUNT, 1 ELSE RETURNF.POINTER='F'F.POINTER<2>=PATH:'/':FILENAMEF.POINTER<3>=PATH:'/D_':FILENAMEWRITE F.POINTER ON FI.VOC, CALL.IT.PARAMOPEN '',CALL.IT.PARAM TO FI.QPOINTER THEN   CALL.IT=CALL.IT.PARAM   RETURN ENDF.POINTER<3>=PATH:'/D_VOC'WRITE F.POINTER ON FI.VOC, CALL.IT.PARAMOPEN '',CALL.IT.PARAM TO FI.QPOINTER THEN   * CHANGE CALL.IT TO SUCCESSFUL NAME   * OTHERWISE IT WILL RETURN WITH NULL SAYING FAILURE   CALL.IT=CALL.IT.PARAM ENDRETURN00266FSUB.HERVE0c2SUBROUTINE SUB.HERVE** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Herve html to pdf test"     ;* Title for widget title barW$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                   ;* Full width (1=1/3, 2=2/3, 3=3/3)W$PDFABLE = 1                 ;* Can be converted to PDFW$PRINTABLE = 1               ;* Can be printed*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here*OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE NULLREAD HTML FROM FILE.WEB.FORMS, 'VALENCOURS2368' ELSE HTML=''**** Create a HTML string*** In this example, we are including our own styles & scripts in <head>.* This causes MV Dashboard to display this content in an <iframe>.* Because this content does not render properly using the built-in* DOCTYPE:**   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"*   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">** we supply our own DOCTYPE to override the standard DOCTYPE.*HTML = ''HTML<-1> = \<!DOCTYPE HTML PUBLIC>\HTML<-1> = \<html>\HTML<-1> = \<head>\HTML<-1> = \<title>Etat de la Valorisation des Encours</title>\HTML<-1> = \<style type="text/css"> \HTML<-1> = \body {background:#CCC; height:100%;}\HTML<-1> = \h1 { color:#000000; font-weight:bold; font-size:40px; }\HTML<-1> = \h2 { color:#000000; font-weight:bold; font-size:30px; }\HTML<-1> = \h3 { color:#000000; font-size:20px; }\HTML<-1> = \table { width: 97%; border: 1px solid #777; border-collapse:collapse; font-family:sans_serif, Verdana, Arial, Helvetica; }\HTML<-1> = \thead { background-color:#fa3; }\HTML<-1> = \tfoot { background-color:#fea; }\HTML<-1> = \td { border-style:solid; border-width:1px; border-color:silver; font-size:10px; }\HTML<-1> = \th { border-style:solid; border-width:1px; border-color:#6f5b85; font-size:11px; }\HTML<-1> = \.titre { color:blue; font-weight:bold; font-size:40px; }\HTML<-1> = \.stitre { color:BLACK; font-weight:bold; font-size:20px; }\HTML<-1> = \.over { background-color: #ef2e25; color: white; }\HTML<-1> = \.normal { background-color: white; }\HTML<-1> = \.lig0 { background-color: #dcdcdc; } /* lignes paires */\HTML<-1> = \.lig1 { background-color: #white; }  /* lignes impaires */\HTML<-1> = \.alink { font-weight: bold; text-decoration: none; color: blue; }\HTML<-1> = \#date { position: absolute; top: 10px; right: 15px; font-size: 14px; }\HTML<-1> = \#titre { position: absolute;top: 30px; left: 300px; font-weight: bold; font-size: 30px; }\HTML<-1> = \#stitre { position: absolute; top: 60px; left: 300px; font-weight: bold; font-size: 14px; }\HTML<-1> = \#dateheure { position: absolute; top: 0px; width: 95%; text-align: right; font-size: 12px; }\HTML<-1> = \#container { width: 100%; padding:15px;}\HTML<-1> = \#banniere { margin:auto; background:url(logo.png) no-repeat; width:1000px; height:100px; padding-top:10px;position: relative;}\HTML<-1> = \#content { width:1050px; background:#FFF; border-radius:15px; margin: auto; -moz-border-radius: 15px; display: block;}\HTML<-1> = \.titre_tab { font-size:14px; font-weight:bold; text-align:left; padding-left:5px;}\HTML<-1> = \.entete_tab_sem { background:#CCC;font-size:12px; font-weight:bold; text-align:center;}\HTML<-1> = \.entete_tab_we { background:#fa3;font-size:12px; font-weight:bold; text-align:center;}\HTML<-1> = \.cell_sem { text-align:center;background:#CFC;margin:0;padding:0;font-size:12px;}\HTML<-1> = \.cell_we { background:#Fea};\HTML<-1> = \</style>\HTML<-1> = \<script>\HTML<-1> = \  var affiche = "-";\HTML<-1> = \function changetout(max) {\HTML<-1> = \   var i    = 0;\HTML<-1> = \   var val  = "";\HTML<-1> = \   for (i=1; i <= max; i++) {\HTML<-1> = \        if (affiche == "-") { val = "G" } else { val = "D" }\HTML<-1> = \        val = val + i;\HTML<-1> = \        change(val);\HTML<-1> = \   }\HTML<-1> = \   document.getElementById("idth1").innerText = affiche;\HTML<-1> = \   if (affiche == "-") {\HTML<-1> = \       affiche = "+"\HTML<-1> = \   } else {\HTML<-1> = \       affiche = "-"\HTML<-1> = \   }\HTML<-1> = \}\HTML<-1> = \function change(lig) {\HTML<-1> = \   car1 = lig.slice(0,1);\HTML<-1> = \   car2 = lig.slice(1,lig.length);\HTML<-1> = \   obj = document.getElementById(lig);\HTML<-1> = \   val = obj.style.display;\HTML<-1> = \   obj.style.display = "none";\HTML<-1> = \   if (car1 == "G") {\HTML<-1> = \      val = "D" + car2;\HTML<-1> = \   } else {\HTML<-1> = \      val = "G" + car2;\HTML<-1> = \   }\HTML<-1> = \   document.getElementById(val).style.display = "";\HTML<-1> = \}\HTML<-1> = \</script>\HTML<-1> = \</head>\HTML<-1> = \<body>\HTML<-1> = \<div id="BANNIERE">\HTML<-1> = \<div id="titre">Etat de la Valorisation des Encours<br/></div>\HTML<-1> = \<div id="dateheure">le 14/12/2015 &agrave; 18:05:24</div></div>\HTML<-1> = \<div id="container">\HTML<-1> = \<table>\HTML<-1> = \<thead>\HTML<-1> = \<tr>\HTML<-1> = \<th colspan="4">Composant</th>\HTML<-1> = \<th colspan="2">OF</th>\HTML<-1> = \<th colspan="2">OF Lanc&eacute;</th>\HTML<-1> = \<th colspan="4">Pr&eacute;vu</th>\HTML<-1> = \<th colspan="4">R&eacute;el</th>\HTML<-1> = \</tr>\HTML<-1> = \<tr>\HTML<-1> = \<th>Type</th>\HTML<-1> = \<th>ABC</th>\HTML<-1> = \<th>Code</th>\HTML<-1> = \<th>D&eacute;signation</th>\HTML<-1> = \<th>No</th>\HTML<-1> = \<th>Etat</th>\HTML<-1> = \<th>No</th>\HTML<-1> = \<th>Qt&eacute;</th>\HTML<-1> = \<th>PU</th>\HTML<-1> = \<th>Co&ucirc;t</th>\HTML<-1> = \<th>Co&ucirc;t Prod</th>\HTML<-1> = \<th>No<br/>OF</th>\HTML<-1> = \<th>PU</th>\HTML<-1> = \<th>Co&ucirc;t</th>\HTML<-1> = \<th>Co&ucirc;t Prod</th>\HTML<-1> = \<th>No<br/>OF</th>\HTML<-1> = \</tr>\HTML<-1> = \</thead><tbody>\HTML<-1> = \<tr class="lig1"><td></td><td></td>\HTML<-1> = \<td>T370366-0204-A0</td><td></td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>76300</td><td align=right></td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right></td><td align=right></td><td align=right>0.00</td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="lig0"><td>MS</td><td></td>\HTML<-1> = \<td>1041</td><td>Bouchon AMORIM</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>76300</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>76300</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="ligtot"><td colspan="8">Total MS</td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \<tr class="lig1"><td>N</td><td></td>\HTML<-1> = \<td>0000750-R1052-0</td><td>Capsule R1052-0</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>76300</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>76300</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="lig0"><td>N</td><td></td>\HTML<-1> = \<td>6X75CL.DBT.SS.CR</td><td>CARTON DE 6 BTL DE 0.75</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>12743</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>12743</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="lig1"><td>N</td><td></td>\HTML<-1> = \<td>B01.001</td><td>Bouteille 0.75 all&eacute;g&eacute;e</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>76300</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>76300</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="lig0"><td>N</td><td></td>\HTML<-1> = \<td>P2E.EURO</td><td>Palette EURO<br/>80x120<br/>24kg &agrave; vide</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>130</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>130</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="ligtot"><td colspan="8">Total N</td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \<tr class="lig1"><td>P</td><td>2013</td>\HTML<-1> = \<td>U370018-0000B-1</td><td>PINOT GRIS<br/>QUALITE SYSTEM U<br/>MILLESIME 2013</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>573</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>574</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="ligtot"><td></td><td colspan="7">Total 2013</td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="ligtot"><td colspan="8">Total P</td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \</tr>\HTML<-1> = \</tbody>\HTML<-1> = \<tfoot><tr><td colspan="8">Total G&eacute;n&eacute;ral </td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \</tr><tr><td colspan="8"></td><td></td><td></td><td colspan="2" align=center>0</td><td></td><td></td><td colspan="2" align=center>0</td>\HTML<-1> = \</tr>\HTML<-1> = \</tfoot>\HTML<-1> = \</table>\HTML<-1> = \</div>\HTML<-1> = \</body>\HTML<-1> = \</html>\W$HTML.DATA = HTML**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000DFADEMO.FINANCIALS.DASHBOARD0c2SUBROUTINE DEMO.FINANCIALS.DASHBOARD** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*WEB$TITLE='Demo Company, Financial Picture'WEB.FORM.NAME='DEMO.FINANCIALS.DASHBOARD'W$TYPE='HTML'W$TITLE='Demo Financial Company'W$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.CONTROL' TO FILE ELSE STOPNOV15=ICONV('11-15-15','D')TODAY=DATE()IF TODAY > NOV15 THEN   TODAY=NOV15   TIME.DATE=OCONV(TIME(),'MTHS'):' ':OCONV(TODAY,'D4') END ELSE   TIME.DATE=TIMEDATE() ENDOTODAY=OCONV(TODAY,'D4-')TODAY.MO=OTODAY[1,2]+0TODAY.YYYY=OTODAY[7,4]IF INDEX(TIME.DATE,'CALCULATIONS THROUGH',1) THEN   * LAST CALCULATION WAS FOR END OF LAST YEAR   DASHBOARD.YYYY=TODAY.YYYY-1 END ELSE DASHBOARD.YYYY=TODAY.YYYYIF LEN(WIDGET.USER.DATA(1)) = 4 THEN   WRITE WIDGET.USER.DATA(1) ON FILE, 'DASHBOARD.YYYY' END ELSE   WIDGET.USER.DATA(1)=DASHBOARD.YYYY ENDCONVS=''LAST.YYYY=TODAY.YYYY-1LAST.EOM=ICONV(TODAY.MO:'-01-':TODAY.YYYY,'D')-1*** BUILD FRESH STATIC DATA IF A NEW RUN DATE*READ LAST.BUILT FROM FILE, 'LAST.STATIC.BUILD' ELSE LAST.BUILT=''IF LAST.BUILT <> DATE() THEN   CALL BUILD.DEMO.FINANCIAL.PICTURE(TODAY.YYYY,TODAY,LAST.EOM)   WRITE LAST.BUILT ON FILE, 'LAST.STATIC.BUILD' ENDREAD REC FROM FILE, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''** DEFAULT CONVERSIONS TO $FOR I = 4 TO 35   IF I < 29 OR I > 32 THEN      CONVS<I>='$'    END NEXT I* CHANGE THOSE THAT AREN'TCONVS<6>='%'; CONVS<10>='%'; CONVS<17>='%'; CONVS<24>='%'CONVS<12>='%'; CONVS<13>='%'; CONVS<14>='%'CONVS<19>='%'; CONVS<20>='%'; CONVS<21>='%'CONVS<26>='%'; CONVS<27>='%'; CONVS<28>='%'*MATWRITE WIDGET.USER.DATA ON FILE, 'TEST.LINK'*W$PRINTABLE=1W$PDFABLE=1OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE RETURNREAD HTML FROM FILE.WEB.FORMS, WEB.FORM.NAME ELSE HTML=''***USER.ID=G$USERID*W$TITLE:='  Demo Financials  -- last updated --  ':TIME.DATE**WRITE HTML ON FILE.WEB.FORMS, 'TEST.HTML'*** DYNAMIC VARIABLES**INSERT.FIELD=DB.REC<4>;  * CUSTOMER*IF INSERT.FIELD = '' THEN INSERT.FIELD='&nbsp;'*CALL SWAP(HTML,'~1~',INSERT.FIELD)FOR I = 1 TO 46   INSERT.FIELD=REC<I>IF INSERT.FIELD = '' THEN INSERT.FIELD=I   CONV=CONVS<I>   BEGIN CASE      CASE CONV = ''; NULL      CASE CONV = '$'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD2,$')      CASE CONV = '%'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD1'):'%'      CASE 1; INSERT.FIELD=OCONV(INSERT.FIELD,CONV)   END CASE   IF INSERT.FIELD = '' THEN INSERT.FIELD='&nbsp;'   CALL SWAP(HTML,'~':I:'~',INSERT.FIELD) NEXT I   *W$TEXT.DATA=HTMLIF 0 THEN; *IF TODAY.MO = 1 THEN   W$INPUT.PROMPT<1>='As of Date'   W$INPUT.TYPE<1> = "SELECT"   W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(1)   W$INPUT.UDPOS<1> = 1   W$INPUT.BUTTON<1> = "Apply"   W$INPUT.SELVALS<1>=TODAY.YYYY-1:CHAR(253):TODAY.YYYY   W$INPUT.SELOPTS<1>='12-31-':TODAY.YYYY-1:CHAR(253):OCONV(DATE(),'D4-')   ITIME=ICONV(FIELD(TIME.DATE,' ',1),'MT')   NEXT.TIME=ITIME+1800;  * 30 MINUTES   IF ABS(TIME()-NEXT.TIME) < 300 THEN;  * WITHIN 5 MINUTES TELL LONGER      NEXT.TIME+=1800    END   REFRESH.TIME=' - Wont refresh until app. ':OCONV(NEXT.TIME,'MTH')   IF DASHBOARD.YYYY = TODAY.YYYY THEN      * DECEMBER WILL REQUIRE A RECALC      W$INPUT.SELOPTS<1,1>:=REFRESH.TIME    END ELSE      * TODAY WILL REQUIRE A RECALC      W$INPUT.SELOPTS<1,2>:=REFRESH.TIME    END   * ENDWRITE HTML ON FILE.WEB.FORMS, 'LAST.':WEB.FORM.NAMERETURNEND000551SUB.SC.LIB.PIE0c2SUBROUTINE SUB.SC.LIB.PIE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Pie Demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*IF INDEX(G$WIDGET.NAME,'Progs',1) THEN  PIE.CNT = "PROG"  W$TITLE = "Source Code: Programs by Library"END ELSE  PIE.CNT = "LINES"  W$TITLE = "Source Code: Lines by Library"ENDW$TYPE = "FC3DPIE"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*DIM LIB.FILES(3), PROGS(3), LINES(3), LIBS(3)*LIBS(1) = "MVDB.SUBS"LIBS(2) = "RSS.BP"LIBS(3) = "WBPD"*MAT PROGS = 0; MAT LINES = 0*TOT.LINES = 0 ; TOT.PROGS = 0FOR N = 1 TO 3  OPEN LIBS(N) TO LIB.FILES(N) ELSE STOP 201, LIBS(N)  W$PIE.LABELS<1,N> = LIBS(N)  SELECT LIB.FILES(N)  LOOP    READNEXT ID ELSE EXIT    PROGS(N) += 1    IF PIE.CNT # "PROG" THEN      READ REC FROM LIB.FILES(N), ID THEN        LINES(N) += DCOUNT(REC, @AM)      END    END  REPEAT  TOT.LINES += LINES(N)  TOT.PROGS += PROGS(N)  IF PIE.CNT = "PROG" THEN    W$PIE.VALUES<1,N> = PROGS(N)  END ELSE    W$PIE.VALUES<1,N> = LINES(N)  END NEXT N*W$PIE.CAPTION = "By Program File"IF PIE.CNT = "PROG" THEN  W$CHART.OPTIONS<-1> = "subCaption='":TOT.PROGS:" Total Programs'"  W$CHART.OPTIONS<-1> = "showValues='1'"END ELSE  W$CHART.OPTIONS<-1> = "subCaption='":OCONV(TOT.LINES,'MD,'):" Total Lines'"END*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000512SUB.DEMO.NET.INCOME.CHART0c2SUBROUTINE SUB.DEMO.NET.INCOME.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Net Income"W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''YEARS=REC<67>NET.INCOMES=REC<75>MAX.YEARS=DCOUNT(YEARS,CHAR(253))FIRST.YEAR=YEARS<1,1>CURRENT.YEAR=YEARS<1,MAX.YEARS>*W$BAR.CAPTION = "Net Income From ":FIRST.YEAR:' to ':CURRENT.YEARW$BAR.XMEMO = "Year"W$BAR.YMEMO = "Net Income"**MAX.INCOME=0FOR N = 1 TO MAX.YEARS  NET.INCOME=OCONV(REC<36-N>,'MD02')  IF NET.INCOME > MAX.INCOME THEN MAX.INCOME=NET.INCOME  YEAR=YEARS<1,N>  W$BAR.VALUES<1,N> = NET.INCOME  W$BAR.XLABELS<1,N> = YEARNEXT N* ROUND MAX INCOME UP TO THE NEXT 250000MAX.INCOME+=250000MAX.INCOME=INT(MAX.INCOME/250000) * 250000W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.INCOME:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'W$CHART.OPTIONS<-1>='forceDecimals="1"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'**RETURN000068REBUILD.FILES0c2FILE='SALES'; EVERY.NUM=6; GOSUB MOVE.ITFILE='AR'; EVERY.NUM=3; GOSUB MOVE.ITFILE='AP000277SUB.GRID.TEST0c2SUBROUTINE SUB.GRID.TEST** Copyright (c) 2010 SB, Inc. All rights reserved.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Untitled TABLE"W$TYPE = "TABLE"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN** Set up column labelsW$TABLE.COL.LABELS<1,1> = "Column 1"W$TABLE.COL.LABELS<1,2> = "Column 2"** Column justification = left, right, centerW$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "right"** Table RowsFOR ROW = 1 TO 5  W$TABLE.DATA<ROW,1> = ROW:",1"  W$TABLE.DATA<ROW,2> = ROW:",2"NEXT ROW** TotalsW$TABLE.TOTALS<1,1> = "2"W$TABLE.TOTALS<1,2> = "4"RETURN000255SUB.DEMO.DRILLDOWN0c2SUBROUTINE SUB.DEMO.DRILLDOWN** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Demo drill-down widget*INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TEXT"W$TITLE = "Drilldown Widget"W$WIDTH = 3W$PRINTABLE = 1*IF G$QUERYMODE = 1 THEN RETURN*W$TEXT.DATA = "Source Widget: ":G$DD.REFERRERW$TEXT.DATA<-1> = " "W$TEXT.DATA<-1> = "Contents of WIDGET.USER.DATA:"W$TEXT.DATA<-1> = " "FOR X = 1 TO 100  IF WIDGET.USER.DATA(X) # "" THEN    W$TEXT.DATA<-1> = "WIDGET.USER.DATA(":X:") = ":WIDGET.USER.DATA(X)  ENDNEXT X*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000314SUB.PORTAL.SETUP.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.SETUP.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Portal Setup Instructions"     ;* Title for widget title barW$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here*OPEN '','WEB.FORMS' TO FI.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FI.WEB.FORMS, 'PORTAL.SETUP.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00552DSUB.PORTAL.SALES.REPORT.SETUP0c2SUBROUTINE SUB.PORTAL.SALES.REPORT.SETUP** DEFINE PARAMETERS FOR PORTAL SALES REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOP*W$TITLE = "Portal Sales Report Setup"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*EQUATE ACCOUNT TO WIDGET.USER.DATA(1)EQUATE REPORT.FILE TO WIDGET.USER.DATA(2)EQUATE SALE.DATE.DICT TO WIDGET.USER.DATA(3)EQUATE SALE.MONTH.DICT TO WIDGET.USER.DATA(4)EQUATE SALE.YEAR.DICT TO WIDGET.USER.DATA(5)EQUATE SALE.AMOUNT.DICT TO WIDGET.USER.DATA(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO WIDGET.USER.DATA(7)EQUATE SALESMAN.DICT TO WIDGET.USER.DATA(8)EQUATE BRANCH.DICT TO WIDGET.USER.DATA(9)EQUATE REGION.DICT TO WIDGET.USER.DATA(10)EQUATE SALE.DATE.AMC TO WIDGET.USER.DATA(11)EQUATE SALE.AMOUNT.AMC TO WIDGET.USER.DATA(12)EQUATE SALE.AMOUNT.CONV TO WIDGET.USER.DATA(13)EQUATE SALE.AMOUNT.COOR TO WIDGET.USER.DATA(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO WIDGET.USER.DATA(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO WIDGET.USER.DATA(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO WIDGET.USER.DATA(17)EQUATE SALESMAN.AMC TO WIDGET.USER.DATA(18)EQUATE SALESMAN.TFILE TO WIDGET.USER.DATA(19)EQUATE BRANCH.AMC TO WIDGET.USER.DATA(20)EQUATE BRANCH.TFILE TO WIDGET.USER.DATA(21)EQUATE REGION.AMC TO WIDGET.USER.DATA(22)EQUATE REGION.TFILE TO WIDGET.USER.DATA(23)OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE   MESSAGE='No Platform Type Defined'   GOTO MESSAGE.DISPLAY ENDFIRST.TIME=0IF G$SUBMITTED <> '1' THEN   IF PLATFORM = 'UV' OR PLATFORM = 'UD' THEN      OPEN '','UD.DICT.DASHBOARD.CLOSING.STATS' TO FI THEN         OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END      OPEN '','UD.DICT.SALES' TO FI THEN         OPEN 'DICT','PORTAL.SALES' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END      OPEN '','UD.DICT.AR' TO FI THEN         OPEN 'DICT','PORTAL.AR' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END      OPEN '','UD.DICT.AP' TO FI THEN         OPEN 'DICT','PORTAL.AP' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END    END   MATREAD WIDGET.USER.DATA FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE      MAT WIDGET.USER.DATA = ''      FIRST.TIME=1    END   IF NOT(FIRST.TIME) THEN      GOSUB VALIDATE.PREVIOUS.INPUTS    END END ELSE   GOSUB VALIDATE.PREVIOUS.INPUTS   MATWRITE WIDGET.USER.DATA ON FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ENDGOSUB SET.PROMPTSRETURN*SET.PROMPTS:*W$INPUT.PROMPT<1> = "Sales File Account"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = ACCOUNT*W$INPUT.PROMPT<2> = "Name Of Sales File"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = REPORT.FILE*W$INPUT.PROMPT<3> = "Date Of Sale Dict Name"W$INPUT.TYPE<3> = 'TEXT'W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = SALE.DATE.DICT*W$INPUT.PROMPT<4> = "Month Of Sale Dict Name"W$INPUT.TYPE<4> = 'TEXT'W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = SALE.MONTH.DICT*W$INPUT.PROMPT<5> = "Year Of Sale Dict Name"W$INPUT.TYPE<5> = 'TEXT'W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = SALE.YEAR.DICT*W$INPUT.PROMPT<6> = "Amount Of Sale Dict Name"W$INPUT.TYPE<6> = 'TEXT'W$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = SALE.AMOUNT.DICT*W$INPUT.PROMPT<7> = "Cost Of Sale Dict Name"W$INPUT.TYPE<7> = 'TEXT'W$INPUT.UDPOS<7> = 7W$INPUT.DEFAULT<7> = COST.OF.SALE.AMOUNT.DICT*W$INPUT.PROMPT<8> = "Salesman Dict Name"W$INPUT.TYPE<8> = 'TEXT'W$INPUT.UDPOS<8> = 8W$INPUT.DEFAULT<8> = SALESMAN.DICT*W$INPUT.PROMPT<9> = "Branch Dict Name"W$INPUT.TYPE<9> = 'TEXT'W$INPUT.UDPOS<9> = 9W$INPUT.DEFAULT<9> = BRANCH.DICT*W$INPUT.PROMPT<10> = "Region Dict Name"W$INPUT.TYPE<10> = 'TEXT'W$INPUT.UDPOS<10> = 10W$INPUT.DEFAULT<10> = REGION.DICT*RETURN*VALIDATE.PREVIOUS.INPUTS:*MESSAGE=''BEGIN CASE   CASE PLATFORM = 'D3'      MD.TYPE='MD'   CASE PLATFORM = 'JB'      MD.TYPE='MD'   CASE 1      MD.TYPE='VOC'END CASEOPEN '',MD.TYPE TO FI.MD ELSE   MESSAGE='Unable to open ':MD.TYPE:' for validation purposes'   GOTO MESSAGE.DISPLAY ENDVALID.ACCOUNT=1IF ACCOUNT <> '' THEN**   EXECUTE "SET-FILE ":ACCOUNT:" ":MD.TYPE:' QFILE' CAPTURING DUMMY     QFILE.NAME='QFILE'   CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)   IF QFILE.NAME = '' THEN      MESSAGE<-1>=ACCOUNT:' is not a valid account!'      VALID.ACCOUNT=0    END**   IF PLATFORM = 'UD' THEN**      QFILE.NAME='QFILE'**      CALL CREATE.UD.QPOINTER(ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)**      IF QFILE.NAME = '' THEN**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END ELSE**      WRITE 'Q':@AM:ACCOUNT:@AM:MD.TYPE ON FI.MD, 'QFILE'**      VALID.ACCOUNT=1**      OPEN '','QFILE' TO FI.ACCOUNT.MD ELSE**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END END ELSE   VALID.ACCOUNT=0   MESSAGE<-1>='No Account defined!' ENDIF REPORT.FILE <> '' THEN   IF NOT(VALID.ACCOUNT) THEN      MESSAGE<-1>='Unable to verify ':REPORT.FILE:' file because account not properly defined!'      VALID.REPORT.FILE=0    END ELSE      VALID.REPORT.FILE=1      QFILE.NAME='QFILE'      CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)      IF QFILE.NAME = '' THEN         MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'         VALID.REPORT.FILE=0       END**      EXECUTE "SET-FILE ":ACCOUNT:" ":REPORT.FILE:' QFILE' CAPTURING DUMMY**       IF PLATFORM = 'UD' THEN**          QFILE.NAME='QFILE'**          CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)**          IF QFILE.NAME = '' THEN**             MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**             VALID.REPORT.FILE=0**           END**        END ELSE**         WRITE 'Q':@AM:ACCOUNT:@AM:REPORT.FILE ON FI.MD, 'QFILE'**         OPEN '','QFILE' TO FI.REPORT.FILE ELSE**            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**            VALID.REPORT.FILE=0**          END**       END      IF VALID.REPORT.FILE THEN         HAVE.QFILE.REC=1         READ QFILE.REC FROM FI.MD, 'QFILE' ELSE            HAVE.QFILE.REC=0            MESSAGE<-1>='Unable to create QFILE pointer to ':ACCOUNT:' ':REPORT.FILE          END         IF HAVE.QFILE.REC THEN            WRITE QFILE.REC ON FI.MD, 'DASHBOARD.SALES.FILE'            OPEN 'DICT','DASHBOARD.SALES.FILE' TO FI.DICT.REPORT.FILE ELSE                MESSAGE<-1>='Unable to open DICT ':REPORT.FILE             END          END       END    END END ELSE   MESSAGE<-1>='No Sales Report file defined!' ENDIF SALE.DATE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Date Of Sale Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.DATE.DICT:' Because No Sales File!'    END ELSE      READ SALE.DATE.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.DATE.DICT ELSE         SALE.DATE.DICT.REC=''         MESSAGE<-1>=SALE.DATE.DICT:' Does Not Exist!'       END      IF SALE.DATE.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=SALE.DATE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF SALE.DATE.DICT.REC<7>[1,1] <> 'D' AND SALE.DATE.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               SALE.DATE.AMC=SALE.DATE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF SALE.DATE.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               SALE.DATE.AMC=SALE.DATE.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               SALE.DATE.AMC=SALE.DATE.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.DATE.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF SALE.AMOUNT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Sale Amount Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.AMOUNT.DICT:' Because No Sales File!'    END ELSE      READ SALE.AMOUNT.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.AMOUNT.DICT ELSE         SALE.AMOUNT.DICT.REC=''         MESSAGE<-1>=SALE.AMOUNT.DICT:' Does Not Exist!'       END      IF SALE.AMOUNT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=SALE.AMOUNT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=SALE.AMOUNT.DICT.REC<7>[1,2]               DICT.8.1.2=SALE.AMOUNT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               SALE.AMOUNT.AMC=SALE.AMOUNT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=SALE.AMOUNT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               SALE.AMOUNT.AMC=SALE.AMOUNT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               SALE.AMOUNT.AMC=SALE.AMOUNT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.AMOUNT.DICT:' Does Not Appear To Be An Amount!'          END       END    ENDIF COST.OF.SALE.AMOUNT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Cost of Sale Amount Dictionary Defined - Gross Profit and Margin reporting will not be possible'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":COST.OF.SALE.AMOUNT.DICT:' Because No Sales File!'    END ELSE      READ COST.OF.SALE.AMOUNT.DICT.REC FROM FI.DICT.REPORT.FILE, COST.OF.SALE.AMOUNT.DICT ELSE         COST.OF.SALE.AMOUNT.DICT.REC=''         MESSAGE<-1>=COST.OF.SALE.AMOUNT.DICT:' Does Not Exist!'       END      IF COST.OF.SALE.AMOUNT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=COST.OF.SALE.AMOUNT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=COST.OF.SALE.AMOUNT.DICT.REC<7>[1,2]               DICT.8.1.2=COST.OF.SALE.AMOUNT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               COST.OF.SALE.AMOUNT.AMC=COST.OF.SALE.AMOUNT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=COST.OF.SALE.AMOUNT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               COST.OF.SALE.AMOUNT.AMC=COST.OF.SALE.AMOUNT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               COST.OF.SALE.AMOUNT.AMC=COST.OF.SALE.AMOUNT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':COST.OF.SALE.AMOUNT.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF SALE.MONTH.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Month Of Sale Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.MONTH.DICT:' Because No Sales File!'    END ELSE      READ SALE.MONTH.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.MONTH.DICT ELSE         SALE.MONTH.DICT.REC=''         MESSAGE<-1>=SALE.MONTH.DICT:' Does Not Exist!'       END      IF SALE.MONTH.DICT.REC <> '' THEN         VALID.MONTH.DICT=1         DICT.TYPE=SALE.MONTH.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF SALE.MONTH.DICT.REC<7>[1,1] <> 'D' AND SALE.MONTH.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.MONTH.DICT=0                END               SALE.MONTH.AMC=SALE.MONTH.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF SALE.MONTH.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.MONTH.DICT=0                END               SALE.MONTH.AMC=SALE.MONTH.DICT.REC<2>            CASE 1               VALID.MONTH.DICT=0               SALE.MONTH.AMC=SALE.MONTH.DICT.REC<2>         END CASE         IF NOT(VALID.MONTH.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.MONTH.DICT:' Does Not Appear To Be A Date Month!'          END       END    END ENDIF SALE.YEAR.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Year Of Sale Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.YEAR.DICT:' Because No Sales File!'    END ELSE      READ SALE.YEAR.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.YEAR.DICT ELSE         SALE.YEAR.DICT.REC=''         MESSAGE<-1>=SALE.YEAR.DICT:' Does Not Exist!'       END      IF SALE.YEAR.DICT.REC <> '' THEN         VALID.YEAR.DICT=1         DICT.TYPE=SALE.YEAR.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF SALE.YEAR.DICT.REC<7>[1,1] <> 'D' AND NOT(INDEX(SALE.YEAR.DICT.REC<8>,'D',1)) THEN                  VALID.YEAR.DICT=0                END               SALE.YEAR.AMC=SALE.YEAR.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               ATT2=SALE.YEAR.DICT.REC<2>               IF INDEX(ATT2,"'D",1) OR INDEX(ATT2,'"D',1) OR ATT2[1,1] = 'D' THEN                  VALID.YEAR.DICT=1                END ELSE                  VALID.YEAR.DICT=0                END            CASE 1               VALID.YEAR.DICT=0               SALE.YEAR.AMC=SALE.YEAR.DICT.REC<2>         END CASE         IF NOT(VALID.YEAR.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.YEAR.DICT:' Does Not Appear To Be A Date Year!'          END       END    END ENDIF SALESMAN.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Salesman Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALESMAN.DICT:' Because No Sales File!'    END ELSE      READ SALESMAN.DICT.REC FROM FI.DICT.REPORT.FILE, SALESMAN.DICT ELSE         SALESMAN.DICT.REC=''         MESSAGE<-1>=SALESMAN.DICT:' Does Not Exist!'       END      IF SALESMAN.DICT.REC <> '' THEN         VALID.SALESMAN.DICT=1         DICT.TYPE=SALESMAN.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF SALESMAN.DICT.REC<7>[1,1] <> 'T' AND SALESMAN.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.SALESMAN.DICT=0                END ELSE                  IF SALESMAN.DICT.REC<7>[1,1] = 'T' THEN                     SALESMAN.TFILE=SALESMAN.DICT.REC<7>                   END ELSE                     SALESMAN.TFILE=SALESMAN.DICT.REC<8>                   END                END               SALESMAN.AMC=SALESMAN.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(SALESMAN.DICT.REC<3>,'TRANS',1) THEN                  VALID.SALESMAN.DICT=0                END ELSE                  SALESMAN.TFILE=SALESMAN.DICT.REC<3>                END               SALE.SALESMAN.AMC=SALESMAN.DICT.REC<2>            CASE 1               VALID.SALESMAN.DICT=0               SALE.SALESMAN.AMC=SALESMAN.DICT.REC<2>         END CASE         IF NOT(VALID.SALESMAN.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALESMAN.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDIF BRANCH.DICT <> '' THEN   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":BRANCH.DICT:' Because No Sales File!'    END ELSE      READ BRANCH.DICT.REC FROM FI.DICT.REPORT.FILE, BRANCH.DICT ELSE         BRANCH.DICT.REC=''         MESSAGE<-1>=BRANCH.DICT:' Does Not Exist!'       END      IF BRANCH.DICT.REC <> '' THEN         VALID.BRANCH.DICT=1         DICT.TYPE=BRANCH.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF BRANCH.DICT.REC<7>[1,1] <> 'T' AND BRANCH.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.BRANCH.DICT=0                END ELSE                  IF BRANCH.DICT.REC<7>[1,1] = 'T' THEN                     BRANCH.TFILE=BRANCH.DICT.REC<7>                   END ELSE                     BRANCH.TFILE=BRANCH.DICT.REC<8>                   END                END               BRANCH.AMC=BRANCH.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(BRANCH.DICT.REC<3>,'TRANS',1) THEN                  VALID.BRANCH.DICT=0                END ELSE                  BRANCH.TFILE=BRANCH.DICT.REC<3>                END               SALE.BRANCH.AMC=BRANCH.DICT.REC<2>            CASE 1               VALID.BRANCH.DICT=0               SALE.BRANCH.AMC=BRANCH.DICT.REC<2>         END CASE         IF NOT(VALID.BRANCH.DICT) THEN            MESSAGE<-1>='Dictionary Item ':BRANCH.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDIF REGION.DICT <> '' THEN   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":REGION.DICT:' Because No Sales File!'    END ELSE      READ REGION.DICT.REC FROM FI.DICT.REPORT.FILE, REGION.DICT ELSE         REGION.DICT.REC=''         MESSAGE<-1>=REGION.DICT:' Does Not Exist!'       END      IF REGION.DICT.REC <> '' THEN         VALID.REGION.DICT=1         DICT.TYPE=REGION.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF REGION.DICT.REC<7>[1,1] <> 'T' AND REGION.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.REGION.DICT=0                END ELSE                  IF REGION.DICT.REC<7>[1,1] = 'T' THEN                     REGION.TFILE=REGION.DICT.REC<7>                   END ELSE                     REGION.TFILE=REGION.DICT.REC<8>                   END                END               REGION.AMC=REGION.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(REGION.DICT.REC<3>,'TRANS',1) THEN                  VALID.REGION.DICT=0                END ELSE                  REGION.TFILE=REGION.DICT.REC<3>                END               SALE.REGION.AMC=REGION.DICT.REC<2>            CASE 1               VALID.REGION.DICT=0               SALE.REGION.AMC=REGION.DICT.REC<2>         END CASE         IF NOT(VALID.REGION.DICT) THEN            MESSAGE<-1>='Dictionary Item ':REGION.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDCREATE.INDEXES=1IF MESSAGE = '' THEN   MESSAGE='Sales Report parameters properly defined!' END ELSE   IF INDEX(MESSAGE,'!',1) THEN      MESSAGE=INSERT(MESSAGE,1,0,0,'!!! ERRORS !!!')      CREATE.INDEXES=0    END ENDIF CREATE.INDEXES THEN   * CREATE PIPE DICTIONARY ITEM   IF PLATFORM = 'D3' OR PLATFORM = 'QM' OR PLATFORM = 'JB' THEN      PIPE='A'      PIPE<2>=0      PIPE<3>=' '      PIPE<8>='F;C|'      PIPE<9>='L'      PIPE<10>=1    END ELSE      PIPE='I'      PIPE<2>='"|"'      PIPE<4>='|'      PIPE<5>='1L'      PIPE<6>='S'    END   WRITE PIPE ON FI.DICT.REPORT.FILE, 'PIPE'   *   ** INDEX LOGIC   *   BEGIN CASE      CASE PLATFORM = 'D3'         INDEX.TEST='A':SALE.DATE.AMC:'(DY):':SALE.DATE.AMC:'(DM)'         READ FILE.DEF.REC FROM FI.DICT.REPORT.FILE, REPORT.FILE ELSE FILE.DEF.REC=''         IF FILE.DEF.REC <> '' AND NOT(INDEX(FILE.DEF.REC<8>,INDEX.TEST,1)) THEN            MESSAGE<-1>='Creating Indexes'            CMND1="CREATE-INDEX DASHBOARD.SALES.FILE A":SALE.DATE.AMC            EXECUTE CMND1 CAPTURING RESULT1            CMND2="CREATE-INDEX DASHBOARD.SALES.FILE ":INDEX.TEST            EXECUTE CMND2 CAPTURING RESULT2          END      CASE 1         EXECUTE "CREATE-INDEX DASHBOARD.SALES.FILE ":SALE.DATE.DICT CAPTURING RESULT1   END CASE ENDGOSUB MESSAGE.DISPLAYRETURN*MESSAGE.DISPLAY:*MAX.MSG=DCOUNT(MESSAGE,CHAR(254))W$HTML.DATA='<h3>':MESSAGE<1>IF MAX.MSG > 1 THEN   FOR MSG.NO = 2 TO MAX.MSG      W$HTML.DATA:='<br>':MESSAGE<MSG.NO>    NEXT MSG.NO ENDW$HTML.DATA:='</h3>'RETURNEND00099ASUB.SC.LIB.COL0c2    SUBROUTINE SUB.SC.LIB.COL* Changed by PORTBAS -> SUBROUTINE SUB.SC.LIB.PIE* @(#) SUB.SC.LIB.COL Ported to jBASE 17:55:32  08 JUL 2015** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Pie Demo**#MAKE# RL $OPTIONS D3    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Source Code: Lines by Program"    W$TYPE = "FCBAR2D"    W$WIDTH = 2*    IF G$QUERYMODE THEN RETURN*    IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "1"    IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = "1"    N = WIDGET.USER.DATA(1)*    IF WIDGET.USER.DATA(2) = "1" THEN        CNT.TYPE = "LINES"    END ELSE        CNT.TYPE = "BYTES"    END*    W$BAR.LABELS<1> = "Lines by Program"*    DIM LIB.FILES(3), LIBS(3)*    LIBS(1) = "RSS.BP"    LIBS(2) = "WBPD"    LIBS(3) = "MVDB.SUBS"*    W$TITLE := " (":LIBS(N):")"*    TOT.LINES = 0 ; TOT.PROGS = 0    OPEN LIBS(N) TO LIB.FILES(N) ELSE STOP 201, LIBS(N)    SELECT LIB.FILES(N)    LOOP        READNEXT ID ELSE EXIT        READ REC FROM LIB.FILES(N), ID ELSE REC = ""        IF CNT.TYPE = "LINES" THEN            LINES = DCOUNT(REC, @AM)        END ELSE            LINES = LEN(REC)        END        W$BAR.XLABELS<1,-1> = ID        W$BAR.VALUES<1,-1> = LINES        TOT.PROGS += 1        TOT.LINES += LINES    REPEAT*    IF TOT.PROGS > 0 THEN        AVG = INT( TOT.LINES / TOT.PROGS )    END ELSE AVG = 0*    W$BAR.XMEMO = "Programs"    IF CNT.TYPE = "LINES" THEN        W$BAR.YMEMO = "Lines of Code"    END ELSE        W$BAR.YMEMO = "Bytes of Code"    END    W$BAR.TREND.BEG = AVG    W$BAR.TREND.OPTS = "color='20FF20' thickness='3' showOnTop='1'"*    W$CHART.HEIGHT = 200 + 8 * TOT.PROGS    W$CHART.OPTIONS<-1> = 'numDivLines="3"'*    W$BAR.CAPTION = "In Program File ":LIBS(N)*    W$INPUT.PROMPT<1> = "Program File"    W$INPUT.TYPE<1> = "SELECT"    W$INPUT.SELOPTS<1> = "RSS Feeds (RSS.BP)":@VM:"Includes (WBPD)":@VM:"Widget Subs (MVDB.SUBS)"    W$INPUT.SELVALS<1> = "1":@VM:"2":@VM:"3"    W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(1)    W$INPUT.UDPOS<1> = 1      ;* WIDGET.USER.DATA(1)*    W$INPUT.PROMPT<2> = "Count"    W$INPUT.TYPE<2> = "SELECT"    W$INPUT.SELOPTS<2> = "Lines of code":@VM:"Bytes of code"    W$INPUT.SELVALS<2> = "1":@VM:"2"    W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)    W$INPUT.UDPOS<2> = 2      ;* WIDGET.USER.DATA(2)    W$INPUT.BUTTON = "Go"*    INCLUDE WBPD SOURCE.VIEW.ICON*    RETURN000708SUB.DEMO.SS.COL0c2SUBROUTINE SUB.DEMO.SS.COL** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Single Series Column Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Monthly Unit Sales"W$TYPE = "FCCOLUMN2D"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "2D"BEGIN CASE  CASE WIDGET.USER.DATA(1) = "2D"    W$TYPE = "FCCOLUMN2D"  CASE WIDGET.USER.DATA(1) = "3D"    W$TYPE = "FCCOLUMN3D"  CASE WIDGET.USER.DATA(1) = "BAR"    W$TYPE = "FCBAR2D"  CASE WIDGET.USER.DATA(1) = "AREA2D"    W$TYPE = "FCAREA2D"  CASE 1    W$TYPE = WIDGET.USER.DATA(1)END CASE*W$BAR.CAPTION = "Revenue by Branch for Period 2008-08"W$BAR.XMEMO = "Branch"W$BAR.YMEMO = "Sales Revenue"*UNITS = ""UNITS<1> = "15177"UNITS<2> = "11700"UNITS<3> = "12833"UNITS<4> = "13529"UNITS<5> = "21953"UNITS<6> = "35792"UNITS<7> = "35202"UNITS<8> = "28206"UNITS<9> = "23168"UNITS<10> = "42657"UNITS<11> = "35595"UNITS<12> = "28328"UNITS<13> = "297674"UNITS<14> = "26111"UNITS<15> = "243295"UNITS<16> = "323846"UNITS<17> = "42615"UNITS<18> = "-29"UNITS<19> = "38787"UNITS<20> = "71023"UNITS<21> = "130106"*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = UNITS<N>*  W$BAR.XLABELS<1,N> = OCONV(ICONV(N:"/1",'D'),'DMA')[1,3]  W$BAR.XLABELS<1,N> = N  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = UNITS<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = NNEXT N*W$INPUT.PROMPT = "Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "2D Column":@VM:"3D Column":@VM:"Bar Chart":@VM:"2D Area Chart"W$INPUT.SELVALS = "2D":@VM:"3D":@VM:"BAR":@VM:"AREA2D"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000B92SUB.DEMO.MAP.USA0c2SUBROUTINE SUB.DEMO.MAP.USA** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: US Map demonstration* 6-1-15 ZUMASYS CHANGE MAP ID DELIMITER FROM * TO #**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - States by Alphabet"W$TYPE = "USAMAP"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'READ STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ''CONVERT "," TO @VM IN STATE.NAMES*W$CHART.OPTIONS<-1> = 'animation="0"'W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'W$CHART.OPTIONS<-1> = 'legendShadow="1"'W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'*IF WIDGET.USER.DATA(1) # "" THEN  * This is a drill-down run on this widget - we are now to display info for a specific state  OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'  EXECUTE 'SELECT MVDB.MAP.DATA WITH NAME = "':WIDGET.USER.DATA(2):'"' CAPTURING JUNK  N = 0  LOOP    READNEXT ID ELSE EXIT    READ REC FROM F.MVDB.MAP.DATA, ID THEN      N += 1      NAME = REC<2>*6-1-15*      W$MAP.IDS<1,N> = FIELD( ID, '*', 2 )      W$MAP.IDS<1,N> = FIELD( ID, '#', 2 ); *6-1-15      W$MAP.VALUES<1,N> = (SEQ(REC<2>[1,1]) - SEQ('A')) + 1      W$MAP.VALUE.TOOLTEXT<1,N> = NAME      W$FW.DD.WIDGET<1,N> = "Drilldown Demo"      W$FW.DD.UD.POS<1,N,1> = 1*6-1-15*      W$FW.DD.UD.VAL<1,N,1> = FIELD(ID,'*',1)      W$FW.DD.UD.VAL<1,N,1> = FIELD(ID,'#',1); *6-1-15*      W$FW.DD.UD.POS<1,N,2> = 2      W$FW.DD.UD.VAL<1,N,2> = ID      W$FW.DD.UD.POS<1,N,3> = 3      W$FW.DD.UD.VAL<1,N,3> = WIDGET.USER.DATA(2)      W$FW.DD.UD.POS<1,N,4> = 4      W$FW.DD.UD.VAL<1,N,4> = REC<2>    END  REPEAT  W$LINK.LABEL<1,1> = "Return to USA Map"  W$LINK.LOCATION<1,1> = "C"  W$LINK.UD.POS<1,1> = 1  W$LINK.UD.VAL<1,1> = ""  W$LINK.ICON<1,1> = "arrow_left.png"  W$LINK.ICON.TXT<1,1> = "Back to US Map"  *  W$LINK.LABEL<1,2> = "Return to USA Map"  W$LINK.LOCATION<1,2> = "1"  W$LINK.UD.POS<1,2> = 1  W$LINK.UD.VAL<1,2> = ""  *  W$TITLE = "Demo - ":WIDGET.USER.DATA(1):" Counties by Alphabet"END ELSE ;* National map display  STATE.CNT = DCOUNT( STATE.NAMES<1>, @VM )  FOR N = 1 TO STATE.CNT    W$MAP.IDS<1,N> = STATE.NAMES<1,N>    W$MAP.VALUES<1,N> = (SEQ(STATE.NAMES<1,N>[1,1]) - SEQ('A')) + 1    W$MAP.VALUE.TOOLTEXT<1,N> := STATE.NAMES<2,N>:' (':STATE.NAMES<1,N>:')'    W$MAP.VALUE.DD<1,N> = 1 ;* Allow drill-down  NEXT NEND*W$MAP.RANGE.NAME<1,1> = "Early in Alphabet"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "10"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Middle of Alphabet"W$MAP.RANGE.LOW<1,2> = "10"W$MAP.RANGE.HIGH<1,2> = "18"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Late in Alphabet"W$MAP.RANGE.LOW<1,3> = "18"W$MAP.RANGE.HIGH<1,3> = "27"W$MAP.RANGE.COLOR<1,3> = "RED"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000355SUB.EMAILED.REPORT0c2SUBROUTINE SUB.EMAILED.REPORT** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEEQU REPORT.ID TO WIDGET.USER.DATA(1)EMAILED.REPORT=''IF REPORT.ID = '' THEN   EMAILED.REPORT='No report id found' END ELSE   OPEN '','MVDB.EMAILED.HTML' TO F.MVDB.EMAILED.HTML ELSE      EMAILED.REPORT='No MVDB.EMAILED.HTML file on system'    END   IF EMAILED.REPORT = '' THEN      READ EMAILED.REPORT FROM F.MVDB.EMAILED.HTML, REPORT.ID ELSE         EMAILED.REPORT='No report data found for ':REPORT.ID       END    END ENDW$TYPE='TEXT'W$TITLE='View TEXT report'IF INDEX(EMAILED.REPORT,'HTML',1) THEN   W$TYPE='HTML'   W$TITLE='View HTML report' ENDW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)IF G$QUERYMODE THEN RETURNW$PRINTABLE=1W$PDFABLE=1W$TEXT.DATA=EMAILED.REPORTRETURNEND000C87SUB.MAP.VARIABLE0c2SUBROUTINE SUB.MAP.VARIABLE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Variable Map* 6-1-15 ZUMASYS CHANGE MAP.DATA DELIMITER TO #** Modified by Peter Schellenbach of Zumasys 06-08-15:*  Changed test of ENUM after EXECUTE to test SYSTEM(11) instead.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Variable Map"W$TYPE = "MAP:World"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "World"*OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'*W$CHART.OPTIONS<-1> = 'animation="0"'W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'W$CHART.OPTIONS<-1> = 'legendShadow="1"'W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'*LAST.WTYPE = ""SELOPT.MAX = 0SELOPTX = 1EXECUTE \SSELECT MVDB.MAP.DATA BY NAME BY A1\ RETURNING ENUM CAPTURING ETXT*PJS 06-08-15*IF ENUM[1,3]="404" THENIF SYSTEM(11) THEN ; *PJS 06-08-15* LOOP  READNEXT ID ELSE ID="\\EOF" UNTIL ID="\\EOF" DO*6-1-15*  WTYPE = FIELD(ID,"*",1)  WTYPE = FIELD(ID,"#",1); *6-1-15  IF WTYPE # LAST.WTYPE THEN    SELOPT.MAX += 1    W$INPUT.SELOPTS<1,SELOPT.MAX> = WTYPE    IF WTYPE = WIDGET.USER.DATA(1) THEN SELOPTX = SELOPT.MAX    LAST.WTYPE = WTYPE  END REPEATEND*IF WIDGET.USER.DATA(2) = "NEXT" AND SELOPTX < SELOPT.MAX THEN SELOPTX += 1 WIDGET.USER.DATA(1) = W$INPUT.SELOPTS<1,SELOPTX>ENDIF WIDGET.USER.DATA(2) = "PREV" AND SELOPTX > 1 THEN SELOPTX -= 1 WIDGET.USER.DATA(1) = W$INPUT.SELOPTS<1,SELOPTX>ENDWIDGET.USER.DATA(2) = ""*EXECUTE \SSELECT MVDB.MAP.DATA BY NAME BY A1\ RETURNING ENUM CAPTURING ETXTMAPX = 0*PJS 06-08-15*IF ENUM[1,3]="404" THENIF SYSTEM(11) THEN ; *PJS 06-08-15* LOOP  READNEXT ID ELSE ID="\\EOF" UNTIL ID="\\EOF" DO*6-1-15*  WTYPE = FIELD(ID,"*",1)  WTYPE = FIELD(ID,"#",1); *6-1-15*  IF WTYPE # LAST.WTYPE THEN    W$INPUT.SELOPTS<1,-1> = WTYPE    LAST.WTYPE = WTYPE  END  IF WTYPE = WIDGET.USER.DATA(1) THEN    READ I FROM F.MVDB.MAP.DATA,ID THEN      MAPX += 1*6-1-15*      W$MAP.IDS<1,MAPX> = FIELD(ID,'*',2)      W$MAP.IDS<1,MAPX> = FIELD(ID,'#',2); *6-1-15      W$MAP.VALUES<1,MAPX> = (SEQ(I<1>[1,1]) - (SEQ('A')-1))      W$MAP.VALUE.TOOLTEXT<1,MAPX> := I<2>:' (':I<1>:')'    END  END REPEATEND*W$TYPE = "MAP:":WIDGET.USER.DATA(1)W$MAP.RANGE.NAME<1,1> = "Early in Alphabet"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "10"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Middle of Alphabet"W$MAP.RANGE.LOW<1,2> = "10"W$MAP.RANGE.HIGH<1,2> = "18"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Late in Alphabet"W$MAP.RANGE.LOW<1,3> = "18"W$MAP.RANGE.HIGH<1,3> = "27"W$MAP.RANGE.COLOR<1,3> = "RED"*W$INPUT.PROMPT = "Map Of"W$INPUT.TYPE = "SELECT"W$INPUT.SELVALS = W$INPUT.SELOPTSW$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*IF SELOPTX > 1 THEN W$LINK.LABEL<1,-1> = "Prev Map" W$LINK.LOCATION<1,-1> = 23 W$LINK.UD.POS<1,-1> = 2 W$LINK.UD.VAL<1,-1> = "PREV"END*IF SELOPTX < SELOPT.MAX THEN W$LINK.LABEL<1,-1> = "Next Map" W$LINK.LOCATION<1,-1> = 14 W$LINK.UD.POS<1,-1> = 2 W$LINK.UD.VAL<1,-1> = "NEXT"END*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000261UV.EXECUTE.STACKED.CMNDS0c2SUBROUTINE UV.EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,NUM.RETURNED,REPORT)*REPORT=''NUM.RETURNED=1IF STACKED.1 <> '' THEN   EXECUTE STACKED.1 RTNLIST STACKED.LIST CAPTURING NUM.RETURNED   NUM.RETURNED=TRIM(NUM.RETURNED<2>)   NUM.RETURNED=FIELD(NUM.RETURNED,' ',1)   IF NOT(NUM.RETURNED) THEN RETURN   EXECUTE STACKED.2 PASSLIST STACKED.LIST CAPTURING REPORT END ELSE   EXECUTE STACKED.2 CAPTURING REPORT ENDIF INDEX(REPORT,'0 records',1) THEN   IF DCOUNT(REPORT,@AM) < 5 THEN      NUM.RETURNED=0      REPORT=''    END ENDCONVERT '$,' TO '' IN REPORTRETURNEND000FCCSUB.DEMO.MS.COL0c2SUBROUTINE SUB.DEMO.MS.COL** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Multi Series Column Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Monthly Unit Sales"W$TYPE = "FCMSCOLUMN2D"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "2D"BEGIN CASE  CASE WIDGET.USER.DATA(1) = "2D"    W$TYPE = "FCMSCOLUMN2D"  CASE WIDGET.USER.DATA(1) = "3D"    W$TYPE = "FCMSCOLUMN3D"  CASE WIDGET.USER.DATA(1) = "BAR"    W$TYPE = "FCMSBAR2D"  CASE WIDGET.USER.DATA(1) = "AREA2D"    W$TYPE = "FCMSAREA2D"  CASE WIDGET.USER.DATA(1) = "LINE"    W$TYPE = "FCMSLINE"  CASE WIDGET.USER.DATA(1) = "STACKEDAREA"    W$TYPE = "FCSTACKEDAREA2D"  CASE WIDGET.USER.DATA(1) = "STACKEDCOLUMN2D"    W$TYPE = "FCSTACKEDCOLUMN2D"  CASE WIDGET.USER.DATA(1) = "STACKEDCOLUMN3D"    W$TYPE = "FCSTACKEDCOLUMN3D"  CASE WIDGET.USER.DATA(1) = "STACKEDBAR"    W$TYPE = "FCSTACKEDBAR2D"  CASE 1    W$TYPE = WIDGET.USER.DATA(1):"?"END CASE*W$BAR.LABELS<1> = "Regular"W$BAR.LABELS<2> = "Mid-Grade"W$BAR.LABELS<3> = "Premium"W$BAR.LABELS<4> = "Ethanol"*W$BAR.CAPTION = "Monthly Sales by Type"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Sales (USD)"*SALES = ""SALES<1> = "28452536"SALES<2> = "31208425"SALES<3> = "30245519"SALES<4> = "40425111"SALES<5> = "36515188"SALES<6> = "39144100"SALES<7> = "41655215"SALES<8> = "36615152"SALES<9> = "43944161"SALES<10> = "42251594"SALES<11> = "48833151"SALES<12> = "50122415"*TOT.SALES = SUM(SALES)*LARGEST = 0LARGEST.N = 0FOR N = 1 TO 12  W$BAR.VALUES<1,N> = OCONV(SALES<N>*.4,'MD02')  W$BAR.VALUES<2,N> = OCONV(SALES<N>*.3,'MD02')  W$BAR.VALUES<3,N> = OCONV(SALES<N>*.1,'MD02')  W$BAR.VALUES<4,N> = OCONV(SALES<N>*.2,'MD02')  W$BAR.XLABELS<1,N> = OCONV(N*30-15,'DMA')[1,3]  IF SALES<N> > LARGEST THEN LARGEST = SALES<N> ; LARGEST.N = N NEXT NDD.SALES = OCONV(TOT.SALES*.4,'MD02')DD.SALES<2> = OCONV(TOT.SALES*.3,'MD02') DD.SALES<3> = OCONV(TOT.SALES*.1,'MD02') DD.SALES<4> = OCONV(TOT.SALES*.2,'MD02') **FOR N = 1 TO 4**  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"**  W$FW.DD.UD.POS<1,N,1> = 1**  W$FW.DD.UD.VAL<1,N,1> = DD.SALES<N>**  W$FW.DD.UD.POS<1,N,2> = 2**  W$FW.DD.UD.VAL<1,N,2> = W$BAR.LABELS<N> **NEXT N VAL.CNTR = 0FOR N = 1 TO 12**  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"**  W$FW.DD.UD.POS<1,N,1> = 1**  W$FW.DD.UD.VAL<1,N,1>=W$BAR.XLABELS<1,N>  FOR NN = 1 TO 4     VAL.CNTR+=1     W$FW.DD.WIDGET<1,VAL.CNTR> = "Drilldown Demo"     W$FW.DD.UD.POS<1,VAL.CNTR,1>=1     W$FW.DD.UD.VAL<1,VAL.CNTR,1>=VAL.CNTR     W$FW.DD.UD.POS<1,VAL.CNTR,2>=2**     W$FW.DD.UD.VAL<1,VAL.CNTR,2> = W$BAR.VALUES<NN,N>     W$FW.DD.UD.VAL<1,VAL.CNTR,2> = 'MS.VALUE'     W$FW.DD.UD.POS<1,VAL.CNTR,3> = 3**     W$FW.DD.UD.VAL<1,VAL.CNTR,3>=W$BAR.XLABELS<1,N>     W$FW.DD.UD.VAL<1,VAL.CNTR,3>='MS.LABEL'     W$FW.DD.UD.POS<1,VAL.CNTR,4> = 4     W$FW.DD.UD.VAL<1,VAL.CNTR,4>=W$BAR.LABELS<NN>   NEXT NN**  W$FW.DD.UD.POS<1,N,2> = 2**  W$FW.DD.UD.VAL<1,N,2> = W$BAR.LABELS<N>NEXT NMAX.VALUE = OCONV((LARGEST * .4)*1.1,'MD02') W$CHART.OPTIONS<-1> = "yAxisMaxValue='":MAX.VALUE:"'"*W$BAR.LABEL.OPTS<1> = "showValues='0'"W$BAR.LABEL.OPTS<2> = "showValues='0'"W$BAR.LABEL.OPTS<3> = "showValues='0'"W$BAR.LABEL.OPTS<4> = "showValues='0'"*IF W$TYPE = "FCMSAREA2D" THEN  W$BAR.LABEL.OPTS<1> := " areaAlpha='50'"  W$BAR.LABEL.OPTS<2> := " areaAlpha='70'"  W$BAR.LABEL.OPTS<3> := " areaAlpha='90'"  W$BAR.LABEL.OPTS<4> := " areaAlpha='40'"END*W$INPUT.PROMPT = "Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "2D Column":@VM:"3D Column":@VM:"Bar Chart":@VM:"2D Area Chart":@VM:"Line Chart":@VM:"Stacked Area Chart":@VM:"2D Stacked Column Chart":@VM:"3D Stacked Column Chart":@VM:"Stacked Bar Chart"W$INPUT.SELVALS = "2D":@VM:"3D":@VM:"BAR":@VM:"AREA2D":@VM:"LINE":@VM:"STACKEDAREA":@VM:"STACKEDCOLUMN2D":@VM:"STACKEDCOLUMN3D":@VM:"STACKEDBAR"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0011E2SUB.PDF.CONFIG0c2SUBROUTINE SUB.PDF.CONFIG** Copyright (c) 2016 Zumasys, Inc. All rights reserved.* Description: PDF configuration widget.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "PDF Configuration"   ;* Title for widget title barW$TYPE = "HTML"                 ;* Filled in by editorW$WIDTH = 2                     ;* Full width (1=1/3, 2=2/3, 3=3/3)W$PDFABLE = 1                   ;* Enable conversion to PDF*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TEXT.INFO = "Unable to open MVDB.CONTROL"  RETURNENDW$TEXT.INFO = "" ;* No widget content at this point.*IF SYSTEM(91) THEN isWindows = 1 ELSE isWindows = 0 ;*QM, UV, UDIF isWindows THEN DIRSEP = '\' ELSE DIRSEP = '/'*READ SETTINGS.REC FROM F.MVDB.CONTROL, 'PDF.SETTINGS' ELSE SETTINGS.REC = ""IF G$SUBMITTED = 1 THEN  * Save PDF settings  FOR N = 1 TO 4    SETTINGS.REC<N> = WIDGET.USER.DATA(N)  NEXT N  OK = 0  IF SETTINGS.REC<1> THEN    * Validate NATIVE.CONTENT file    OPEN 'NATIVE.CONTENT' TO F.NATIVE.CONTENT ELSE      * Create a type19 file to store PDF files (type1 splits up long IDs)      * The CREATE-FILE syntax here is for a PICK type account!      EXECUTE 'CREATE-FILE NATIVE.CONTENT 1,1,3 1,1,19' CAPTURING OUTPUT ;*UV*    END    OPEN 'NATIVE.CONTENT' TO F.NATIVE.CONTENT THEN      * Verify that directory returned by browser matches directory referenced by NATIVE.CONTENT file      NATIVE.DIR = FILEINFO(F.NATIVE.CONTENT,2)      IF isWindows THEN CONVERT '/' TO '\' IN NATIVE.DIR ;*UV may have wrong separator!      IF NATIVE.DIR[LEN(NATIVE.DIR),1] = DIRSEP THEN NATIVE.DIR = NATIVE.DIR[1,LEN(NATIVE.DIR)-1]      IF isWindows THEN        OK = (OCONV(NATIVE.DIR,'MCU') = OCONV(SETTINGS.REC<3>,'MCU'))      END ELSE        OK = (NATIVE.DIR = SETTINGS.REC<3>)      END      IF NOT(OK) THEN        W$HTML.DATA = "MV file 'NATIVE.CONTENT' does not refer to PDF directory ":SETTINGS.REC<3>:"!"      END    END  END ELSE    OK = 1  END  IF OK THEN    WRITE SETTINGS.REC ON F.MVDB.CONTROL, 'PDF.SETTINGS'    W$HTML.DATA = "Settings saved."  END ELSE    IF W$HTML.DATA = "" THEN W$HTML.DATA = "Unable to open PDF directory!"  ENDEND ELSE  * Initialize default settings  IF SETTINGS.REC<1> = "" THEN    SETTINGS.REC<1> = 0 ;* PDF generation is disabled  END  IF SETTINGS.REC<2> = "" THEN    IF isWindows THEN      * Windows      EXEPATH = 'C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe'      SETTINGS.REC<2> = '"':EXEPATH:'" [INPUT_FILE] [OUTPUT_FILE]'    END ELSE      * Linux      EXEPATH = '/usr/local/bin/wkhtmltopdf'      SETTINGS.REC<2> = EXEPATH:' [INPUT_FILE] [OUTPUT_FILE]'    END  END  IF SETTINGS.REC<3> = "" THEN    IF isWindows THEN      * Windows      NATIVE.DIR = @PATH      CONVERT '/' TO '\' IN NATIVE.DIR ;* UV sometimes uses wrong separator      SETTINGS.REC<3> = NATIVE.DIR:'\NATIVE.CONTENT'    END ELSE      * Linux      NATIVE.DIR = @PATH      SETTINGS.REC<3> = NATIVE.DIR:'/NATIVE.CONTENT'    END  END  IF SETTINGS.REC<4> = "" THEN    SETTINGS.REC<4> = 0 ;* delete generated files immediately  ENDEND*W$INPUT.PROMPT<1> = "Enable PDF generation"W$INPUT.TYPE<1> = "SELECT"W$INPUT.SELOPTS<1> = "No":@VM:"Yes"W$INPUT.SELVALS<1> = "0":@VM:"1"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = SETTINGS.REC<1>*W$INPUT.PROMPT<2> = "PDF converter command"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2TMP = SETTINGS.REC<2>CALL SWAP(TMP, '"', '&quot;')W$INPUT.DEFAULT<2> = TMPW$INPUT.PARAMS<2> = 'size="100"'**D3 requires directory to store PDF files; other platforms use DIR type fileW$INPUT.PROMPT<3> = "Directory for PDF files"W$INPUT.TYPE<3> = "TEXT"W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = SETTINGS.REC<3>W$INPUT.PARAMS<3> = 'size="100"'*W$INPUT.PROMPT<4> = "Delete PDF files after"W$INPUT.TYPE<4> = "SELECT"W$INPUT.UDPOS<4> = 4W$INPUT.SELOPTS<4,1> = "immediately"; W$INPUT.SELVALS<4,1> = 0W$INPUT.SELOPTS<4,2> = "1 day"; W$INPUT.SELVALS<4,2> = 1W$INPUT.SELOPTS<4,3> = "2 days"; W$INPUT.SELVALS<4,3> = 2W$INPUT.SELOPTS<4,4> = "3 days"; W$INPUT.SELVALS<4,4> = 3W$INPUT.SELOPTS<4,5> = "4 days"; W$INPUT.SELVALS<4,5> = 4W$INPUT.SELOPTS<4,6> = "5 days"; W$INPUT.SELVALS<4,6> = 5W$INPUT.SELOPTS<4,7> = "6 days"; W$INPUT.SELVALS<4,7> = 6W$INPUT.SELOPTS<4,8> = "7 days"; W$INPUT.SELVALS<4,8> = 7W$INPUT.SELOPTS<4,9> = "14 days"; W$INPUT.SELVALS<4,9> = 14W$INPUT.SELOPTS<4,10> = "30 days"; W$INPUT.SELVALS<4,10> = 30W$INPUT.SELOPTS<4,11> = "never"; W$INPUT.SELVALS<4,11> = 999999W$INPUT.DEFAULT<4> = SETTINGS.REC<4>*W$INPUT.BUTTON = "Save"*RETURN0037E6SUB.PORTAL.AR.REPORT.SETUP0c2SUBROUTINE SUB.PORTAL.AR.REPORT.SETUP** DEFINE PARAMETERS FOR PORTAL AR REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOP*W$TITLE = "Portal AR Report Setup"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*EQUATE ACCOUNT TO WIDGET.USER.DATA(1)EQUATE REPORT.FILE TO WIDGET.USER.DATA(2)EQUATE DUE.DATE.DICT TO WIDGET.USER.DATA(3)EQUATE DATE.PAID.DICT TO WIDGET.USER.DATA(4)EQUATE INVOICE.AMT.DICT TO WIDGET.USER.DATA(5)EQUATE BALANCE.DICT TO WIDGET.USER.DATA(6)EQUATE DUE.DATE.AMC TO WIDGET.USER.DATA(8)EQUATE DATE.PAID.AMC TO WIDGET.USER.DATA(9)EQUATE INVOICE.AMT.AMC TO WIDGET.USER.DATA(10)EQUATE INVOICE.AMT.CONV TO WIDGET.USER.DATA(11)EQUATE INVOICE.AMT.COOR TO WIDGET.USER.DATA(12)EQUATE BALANCE.AMC TO WIDGET.USER.DATA(13)EQUATE BALANCE.CONV TO WIDGET.USER.DATA(14)EQUATE BALANCE.COOR TO WIDGET.USER.DATA(15)EQUATE CUSTOMER.DICT TO WIDGET.USER.DATA(16)EQUATE CUSTOMER.AMC TO WIDGET.USER.DATA(17)EQUATE CUSTOMER.TFILE TO WIDGET.USER.DATA(18)*OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE   MESSAGE='No Platform Type Defined'   GOTO MESSAGE.DISPLAY ENDFIRST.TIME=0IF G$SUBMITTED <> '1' THEN   MATREAD WIDGET.USER.DATA FROM FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ELSE      MAT WIDGET.USER.DATA = ''      FIRST.TIME=1    END   IF NOT(FIRST.TIME) THEN      GOSUB VALIDATE.PREVIOUS.INPUTS    END END ELSE   GOSUB VALIDATE.PREVIOUS.INPUTS   MATWRITE WIDGET.USER.DATA ON FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ENDGOSUB SET.PROMPTSRETURN*SET.PROMPTS:*W$INPUT.PROMPT<1> = "AR File Account"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = ACCOUNT*W$INPUT.PROMPT<2> = "Name Of AR File"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = REPORT.FILE*W$INPUT.PROMPT<3> = "Due Date Dict Name"W$INPUT.TYPE<3> = 'TEXT'W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = DUE.DATE.DICT*W$INPUT.PROMPT<4> = "Date Paid Dict Name"W$INPUT.TYPE<4> = 'TEXT'W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = DATE.PAID.DICT*W$INPUT.PROMPT<5> = "Invoice Amount Dict Name"W$INPUT.TYPE<5> = 'TEXT'W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = INVOICE.AMT.DICT*W$INPUT.PROMPT<6> = "Remaining Balance Dict Name"W$INPUT.TYPE<6> = 'TEXT'W$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = BALANCE.DICT*W$INPUT.PROMPT<7> = "Customer Dict Name"W$INPUT.TYPE<7> = 'TEXT'W$INPUT.UDPOS<7> = 16W$INPUT.DEFAULT<7> = CUSTOMER.DICT*RETURN*VALIDATE.PREVIOUS.INPUTS:*MESSAGE=''BEGIN CASE   CASE PLATFORM = 'D3'      MD.TYPE='MD'   CASE PLATFORM = 'JB'      MD.TYPE='MD'   CASE 1      MD.TYPE='VOC'END CASEOPEN '',MD.TYPE TO FI.MD ELSE   MESSAGE='Unable to open ':MD.TYPE:' for validation purposes'   GOTO MESSAGE.DISPLAY ENDVALID.ACCOUNT=1IF ACCOUNT <> '' THEN**   EXECUTE "SET-FILE ":ACCOUNT:" ":MD.TYPE:' QFILE' CAPTURING DUMMY    VALID.ACCOUNT=1    QFILE.NAME='QFILE'    CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)    IF QFILE.NAME = '' THEN       MESSAGE<-1>=ACCOUNT:' is not a valid account!'       VALID.ACCOUNT=0     END**    IF PLATFORM = 'UD' THEN**       QFILE.NAME='QFILE'**       CALL CREATE.UD.QPOINTER(ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)**       IF QFILE.NAME = '' THEN**          MESSAGE<-1>=ACCOUNT:' is not a valid account!'**          VALID.ACCOUNT=0**        END**     END ELSE**       WRITE 'Q':@AM:ACCOUNT:@AM:MD.TYPE ON FI.MD, 'QFILE'**       OPEN '','QFILE' TO FI.ACCOUNT.MD ELSE**          MESSAGE<-1>=ACCOUNT:' is not a valid account!'**          VALID.ACCOUNT=0**        END**    END END ELSE   VALID.ACCOUNT=0   MESSAGE<-1>='No Account defined!' ENDIF REPORT.FILE <> '' THEN   IF NOT(VALID.ACCOUNT) THEN      MESSAGE<-1>='Unable to verify ':REPORT.FILE:' file because account not properly defined!'      VALID.REPORT.FILE=0    END ELSE      VALID.REPORT.FILE=1      QFILE.NAME='QFILE'      CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)      IF QFILE.NAME = '' THEN         MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'         VALID.REPORT.FILE=0       END**      EXECUTE "SET-FILE ":ACCOUNT:" ":REPORT.FILE:' QFILE' CAPTURING DUMMY***       IF PLATFORM = 'UD' THEN***          QFILE.NAME='QFILE'***          CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)***          IF QFILE.NAME = '' THEN***            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'***            VALID.REPORT.FILE=0***          END***        END ELSE***          WRITE 'Q':@AM:ACCOUNT:@AM:REPORT.FILE ON FI.MD, 'QFILE'***          OPEN '','QFILE' TO FI.REPORT.FILE ELSE***             MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'***             VALID.REPORT.FILE=0***           END***        END      IF VALID.REPORT.FILE THEN         HAVE.QFILE.REC=1         READ QFILE.REC FROM FI.MD, 'QFILE' ELSE            HAVE.QFILE.REC=0            MESSAGE<-1>='Unable to create QFILE pointer to ':ACCOUNT:' ':REPORT.FILE          END         IF HAVE.QFILE.REC THEN            WRITE QFILE.REC ON FI.MD, 'DASHBOARD.AR.FILE'            OPEN 'DICT','DASHBOARD.AR.FILE' TO FI.DICT.REPORT.FILE ELSE                MESSAGE<-1>='Unable to open DICT ':REPORT.FILE             END          END       END    END END ELSE   MESSAGE<-1>='No AR Report file defined!' ENDIF DUE.DATE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Due Date Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DUE.DATE.DICT:' Because No AR File!'    END ELSE      READ DUE.DATE.DICT.REC FROM FI.DICT.REPORT.FILE, DUE.DATE.DICT ELSE         DUE.DATE.DICT.REC=''         MESSAGE<-1>=DUE.DATE.DICT:' Does Not Exist!'       END      IF DUE.DATE.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DUE.DATE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DUE.DATE.DICT.REC<7>[1,1] <> 'D' AND DUE.DATE.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DUE.DATE.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DUE.DATE.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF DATE.PAID.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Date Paid Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DATE.PAID.DICT:' Because No AR File!'    END ELSE      READ DATE.PAID.DICT.REC FROM FI.DICT.REPORT.FILE, DATE.PAID.DICT ELSE         DATE.PAID.DICT.REC=''         MESSAGE<-1>=DATE.PAID.DICT:' Does Not Exist!'       END      IF DATE.PAID.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DATE.PAID.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DATE.PAID.DICT.REC<7>[1,1] <> 'D' AND DATE.PAID.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DATE.PAID.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DATE.PAID.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF INVOICE.AMT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Invoice Amount Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":INVOICE.AMT.DICT:' Because No AR File!'    END ELSE      READ INVOICE.AMT.DICT.REC FROM FI.DICT.REPORT.FILE, INVOICE.AMT.DICT ELSE         INVOICE.AMT.DICT.REC=''         MESSAGE<-1>=INVOICE.AMT.DICT:' Does Not Exist!'       END      IF INVOICE.AMT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=INVOICE.AMT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=INVOICE.AMT.DICT.REC<7>[1,2]               DICT.8.1.2=INVOICE.AMT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=INVOICE.AMT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':INVOICE.AMT.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF BALANCE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Balance Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":BALANCE.DICT:' Because No AR File!'    END ELSE      READ BALANCE.DICT.REC FROM FI.DICT.REPORT.FILE, BALANCE.DICT ELSE         BALANCE.DICT.REC=''         MESSAGE<-1>=BALANCE.DICT:' Does Not Exist!'       END      IF BALANCE.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=BALANCE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=BALANCE.DICT.REC<7>[1,2]               DICT.8.1.2=BALANCE.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=BALANCE.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               BALANCE.AMC=BALANCE.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':BALANCE.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF CUSTOMER.DICT <> '' THEN   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":CUSTOMER.DICT:' Because No AR File!'    END ELSE      READ CUSTOMER.DICT.REC FROM FI.DICT.REPORT.FILE, CUSTOMER.DICT ELSE         CUSTOMER.DICT.REC=''         MESSAGE<-1>=CUSTOMER.DICT:' Does Not Exist!'       END      IF CUSTOMER.DICT.REC <> '' THEN         VALID.CUSTOMER.DICT=1         DICT.TYPE=CUSTOMER.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF CUSTOMER.DICT.REC<7>[1,1] <> 'T' AND CUSTOMER.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.CUSTOMER.DICT=0                END ELSE                  IF CUSTOMER.DICT.REC<7>[1,1] = 'T' THEN                     CUSTOMER.TFILE=CUSTOMER.DICT.REC<7>                   END ELSE                     CUSTOMER.TFILE=CUSTOMER.DICT.REC<8>                   END                END               CUSTOMER.AMC=CUSTOMER.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(CUSTOMER.DICT.REC<3>,'TRANS',1) THEN                  VALID.CUSTOMER.DICT=0                END ELSE                  CUSTOMER.TFILE=CUSTOMER.DICT.REC<3>                END            CASE 1               VALID.CUSTOMER.DICT=0         END CASE         IF NOT(VALID.CUSTOMER.DICT) THEN            MESSAGE<-1>='Dictionary Item ':CUSTOMER.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDCREATE.INDEXES=1IF MESSAGE = '' THEN   MESSAGE='AR Report parameters properly defined!' END ELSE   IF INDEX(MESSAGE,'!',1) THEN      MESSAGE=INSERT(MESSAGE,1,0,0,'!!! ERRORS !!!')      CREATE.INDEXES=0    END ENDIF CREATE.INDEXES THEN   * CREATE PIPE DICTIONARY ITEM   IF PLATFORM = 'D3' OR PLATFORM = 'QM' OR PLATFORM = 'JB' THEN      PIPE='A'      PIPE<2>=0      PIPE<3>=' '      PIPE<8>='F;C|'      PIPE<9>='L'      PIPE<10>=1    END ELSE      PIPE='I'      PIPE<2>='"|"'      PIPE<4>='|'      PIPE<5>='1L'      PIPE<6>='S'    END   WRITE PIPE ON FI.DICT.REPORT.FILE, 'PIPE'   *   ** INDEX LOGIC   *   BEGIN CASE      CASE PLATFORM = 'D3'         INDEX.TEST='A':DUE.DATE.AMC:'(DY):':DUE.DATE.AMC:'(DM)'         READ FILE.DEF.REC FROM FI.DICT.REPORT.FILE, REPORT.FILE ELSE FILE.DEF.REC=''         IF FILE.DEF.REC <> '' AND NOT(INDEX(FILE.DEF.REC<8>,INDEX.TEST,1)) THEN            MESSAGE<-1>='Creating Indexes'            CMND1="CREATE-INDEX DASHBOARD.AR.FILE A":DUE.DATE.AMC            EXECUTE CMND1 CAPTURING RESULT1            CMND2="CREATE-INDEX DASHBOARD.AR.FILE ":INDEX.TEST            EXECUTE CMND2 CAPTURING RESULT2          END      CASE 1         EXECUTE "CREATE-INDEX DASHBOARD.AR.FILE ":DUE.DATE.DICT CAPTURING RESULT1   END CASE ENDGOSUB MESSAGE.DISPLAYRETURN*MESSAGE.DISPLAY:*MAX.MSG=DCOUNT(MESSAGE,CHAR(254))W$HTML.DATA='<h3>':MESSAGE<1>IF MAX.MSG > 1 THEN   FOR MSG.NO = 2 TO MAX.MSG      W$HTML.DATA:='<br>':MESSAGE<MSG.NO>    NEXT MSG.NO ENDW$HTML.DATA:='</h3>'RETURNEND0003F4SUB.DEMO.DAYS.TO.PAY.CHART0c2SUBROUTINE SUB.DEMO.DAYS.TO.PAY.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Average Days To Pay"W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''YEARS=REC<67>MAX.YEARS=DCOUNT(YEARS,CHAR(253))FIRST.YEAR=0*W$BAR.XMEMO = "Year (drill down for detail)"W$BAR.YMEMO = "Average Days to Pay"*N=0*FOR NN = 1 TO MAX.YEARS  AVERAGE.DAYS=REC<47-NN>  YEAR=YEARS<1,NN>  IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR  CURRENT.YEAR=YEAR  W$BAR.VALUES<1,NN> = AVERAGE.DAYS  W$BAR.XLABELS<1,NN> = YEAR  W$FW.DD.WIDGET<1,NN>='DEMO DAYS TO PAY PIE'  W$FW.DD.UD.POS<1,NN,1>=1  W$FW.DD.UD.VAL<1,NN,1>=YEARNEXT NN*W$BAR.CAPTION = "Average Days to Pay From ":FIRST.YEAR:' to ':CURRENT.YEAR*RETURN000341PORTAL.SHOW.LAST.UPDATED0c2SUBROUTINE PORTAL.SHOW.LAST.UPDATED(CALC.TYPE)INCLUDE WBPD MVDB.INCLUDEIF CALC.TYPE = 'SALES' THEN   OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO DICT.FI ELSE RETURN END ELSE   OPEN 'DICT','DASHBOARD.BALANCES' TO DICT.FI ELSE RETURN ENDREAD LAST.UPDATED FROM DICT.FI, '*LAST.UPDATED.':CALC.TYPE ELSE RETURNCUR.DATE=DATE()CUR.TIME=TIME()CUR.TIME=FIELD(CUR.TIME,'.',1)CUR.TIME=STR('0',5-LEN(CUR.TIME)):CUR.TIMECUR.DATE.TIME=CUR.DATE:CUR.TIMEDELTA.DATE.TIME=CUR.DATE.TIME-LAST.UPDATED** IF LAST 5 MINUTES THEN NO MESSAGE NEEDED*IF DELTA.DATE.TIME < 300 THEN   W$TITLE=W$TITLE:' - Updated in Last 5 Minutes'   RETURN END*LAST.DATE=LAST.UPDATED[1,5]LAST.TIME=LAST.UPDATED[6,9]APPEND.IT=' - Last Updated ':OCONV(LAST.DATE,'D4-'):' at ':OCONV(LAST.TIME,'MTH')W$TITLE=W$TITLE:APPEND.ITRETURN0007C4SUB.DEMO.ANNUAL.SALES.BY.REP0c2SUBROUTINE SUB.DEMO.ANNUAL.SALES.BY.REP***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''REVENUE.OR.GP=WIDGET.USER.DATA(1)YEAR=WIDGET.USER.DATA(2)MONTH=WIDGET.USER.DATA(3)VAL.TYPE='$'DRILLDOWN.WIDGET=''DRILLDOWN.TYPE=''BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE=YEAR:' Sales By Sales Rep'      W$BAR.YMEMO = "Sales"      SALES.AMTS=REC<48>   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE=YEAR:' Gross Profit By Sales Rep'      W$BAR.YMEMO = "Gross Profit"      SALES.AMTS=REC<49>END CASE*REPS=REC<47>LOCATE YEAR IN REC<67> SETTING YEAR.SVM ELSE YEAR.SVM=1**MAX.SALES.AMT=0N=0FIRST.YEAR=''MAX.REPS=DCOUNT(REPS,CHAR(253))FOR NN = 1 TO MAX.REPS   REP=REPS<1,NN>   SALES.AMT=SUM(SALES.AMTS<1,NN,YEAR.SVM>)   SALES.AMT=OCONV(SALES.AMT,'MD02')   IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT   W$BAR.VALUES<1,NN> = SALES.AMT   W$BAR.XLABELS<1,NN> = REP   W$FW.DD.WIDGET<1,NN> = "DEMO MONTHLY SALES BY REP"   W$FW.DD.UD.POS<1,NN,1> = 1   W$FW.DD.UD.VAL<1,NN,1> = WIDGET.USER.DATA(1); * REVENUE OR GP   W$FW.DD.UD.POS<1,NN,2> = 2   W$FW.DD.UD.VAL<1,NN,2> = YEAR   W$FW.DD.UD.POS<1,NN,3> = 3   W$FW.DD.UD.VAL<1,NN,3> = REPNEXT NNW$BAR.XMEMO = "Sales Rep (drilldown for ":W$BAR.YMEMO:" by month)"* ROUND MAX AMOUNT UP TO THE NEXT 250000MAX.SALES.AMT+=250000MAX.SALES.AMT=INT(MAX.SALES.AMT/250000) * 250000W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'RETURN0004C7SUB.PORTAL.DAYS.TO.PAY.PIE0c2SUBROUTINE SUB.PORTAL.DAYS.TO.PAY.PIE**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FC2DPIE"W$WIDTH = 3W$TITLE = 'Chart - Days To Pay '*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEYEAR=WIDGET.USER.DATA(1)OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT ELSE RETURNREAD STATS.REC FROM FI.DICT, '*CURRENT.AR.STATS' ELSE RETURNWRITE 'READ' ON FI.DICT, 'DEBUG'LOCATE YEAR IN STATS.REC<6> SETTING YEAR.POS ELSE RETURNWRITEV YEAR.POS ON FI.DICT, 'DEBUG', 2NUMBERS=STATS.REC<7,YEAR.POS>WRITEV NUMBERS ON FI.DICT, 'DEBUG', 3TOT.NUMBERS=SUM(NUMBERS)TOT.NUMBERS=TOT.NUMBERS-NUMBERS<1,1,1>WRITEV TOT.NUMBERS ON FI.DICT, 'DEBUG', 4W$TITLE:=YEARDAYS.TYPES='0 - 30 Days,31 - 60 Days,61 - 90 Days,Over 90 Days'CONVERT ',' TO CHAR(253) IN DAYS.TYPESMAX.DAYS.TYPES=DCOUNT(DAYS.TYPES,CHAR(253))FOR DAYS.CNTR = 1 TO MAX.DAYS.TYPES   NUMBER=NUMBERS<1,1,DAYS.CNTR+1>   PCT=INT(NUMBER * 1000/TOT.NUMBERS + .5)   W$PIE.LABELS<1,DAYS.CNTR>=DAYS.TYPES<1,DAYS.CNTR>   W$PIE.VALUES<1,DAYS.CNTR>=(PCT/10) NEXT DAYS.CNTRW$PIE.CAPTION='Days To Pay By Period For ':YEAR***RETURN00060ASUB.USER.AUTH0c2SUBROUTINE SUB.USER.AUTH(USERID,PASSWORD,MODE,VALID,MESSAGE,MAT USER.ITEM)** Custom user authentication subroutine. Authenticate user from the USERS file.** Input Values:*  USERID - User ID entered by the user on the login form*  PASSWORD - Password entered by the user on the login form*  MODE - "AUTH" - User is logging in, authorize.*       - "READ" - User is already authorized, just provide the USER.ITEM*                  Ignore PASSWORD.*                  VALID and MESSAGE will be ignored by caller.* * Output values*  VALID - 1=User authenticated, 0=User NOT authenticated*  MESSAGE - Alternative Message to display when user is NOT authenticated.*  MAT USER.ITEM - Dashboard user information*INCLUDE WBPD FI.MVDB.USERS** USER.ITEM values that may be populated by this program:** EQU USER.DEFAULT.DB   TO USER.ITEM(2)* EQU USER.NAME         TO USER.ITEM(3)* EQU USER.ROLE         TO USER.ITEM(6)*MAT USER.ITEM = ""*OPEN '','DM,USERS,' TO F.USERS ELSE  MESSAGE = "Unable to open DM,USERS, file."  VALID = 0  RETURNENDREAD UREC FROM F.USERS, USERID ELSE  VALID = 0  RETURNENDIF MODE = "AUTH" THEN  IF PASSWORD # "" THEN EPWD = ICONV( PASSWORD, 'UC' ) ELSE EPWD = ""END ELSE  EPWD = "" ; UREC<7> = "" ;* Make them match since we're not really authenticatingENDIF EPWD = UREC<7> THEN  VALID = 1  USER.DEFAULT.DB = "Chart Demo"  USER.NAME = UREC<1>  IF UREC<2> = "DBADMIN" THEN    USER.ROLE = "Administrator"  END ELSE USER.ROLE = "User"  RETURNEND ELSE  VALID = 0ENDRETURN000403SUB.DEMO.SALES.PERCENTS0c2SUBROUTINE SUB.DEMO.SALES.PERCENTS***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCMSCOLUMN3D"W$WIDTH = 3W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''W$BAR.LABELS<1>='Parts'W$BAR.LABELS<2>='Services'W$BAR.CAPTION='YTD Percentage of Sales by Type'W$BAR.XMEMO='Year'W$BAR.YMEMO='Percent of Sales'*YEARS=REC<38>PART.AMTS=REC<40>PART.PCTS=REC<41>SERVICE.AMTS=REC<42>SERVICE.PCTS=REC<43>MAX.YEARS=DCOUNT(YEARS,CHAR(253))**FOR YEAR.CNTR = 1 TO MAX.YEARS   W$BAR.XLABELS<1,YEAR.CNTR>=YEARS<1,YEAR.CNTR>   W$BAR.VALUES<1,YEAR.CNTR>=OCONV(PART.PCTS<1,YEAR.CNTR>,'MD1')   W$BAR.VALUES<2,YEAR.CNTR>=OCONV(SERVICE.PCTS<1,YEAR.CNTR>,'MD1') NEXT YEAR.CNTRW$CHART.OPTIONS<-1>='decimals="1"'W$CHART.OPTIONS<-1>='forceDecimals="1"'RETURNEND00078BSUB.DEMO.MONTHLY.SALES.BY.REP0c2SUBROUTINE SUB.DEMO.MONTHLY.SALES.BY.REP***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN2D"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEMONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREVENUE.OR.GP=WIDGET.USER.DATA(1)YEAR=WIDGET.USER.DATA(2)REP=WIDGET.USER.DATA(3)BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE=YEAR:' Monthly Sales For Rep: ':REP      W$BAR.YMEMO = "Sales"      READ ANNUAL.REC FROM FILE.CONTROL, 'SALES.':YEAR ELSE ANNUAL.REC=''      LOCATE REP IN ANNUAL.REC<1> SETTING REP.POS ELSE REP.POS=1      SALES.AMTS=ANNUAL.REC<2,REP.POS>      MAX.ROUNDER=250000   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE=YEAR:' Monthly Gross Profits For Rep: ':REP      W$BAR.YMEMO = "Gross Profits"      READ ANNUAL.REC FROM FILE.CONTROL, 'GPS.':YEAR ELSE ANNUAL.REC=''      LOCATE REP IN ANNUAL.REC<1> SETTING REP.POS ELSE REP.POS=1      SALES.AMTS=ANNUAL.REC<2,REP.POS>      MAX.ROUNDER=50000END CASE*MAX.MOS=DCOUNT(SALES.AMTS,CHAR(252))MAX.SALES.AMT=0FIRST.MOS=''FOR NN = 1 TO MAX.MOS   MONTH=FIELD(MONTHS,',',NN)   SALES.AMT=SALES.AMTS<1,1,NN>   SALES.AMT=OCONV(SALES.AMT,'MD02')   IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT   W$BAR.VALUES<1,NN> = SALES.AMT   W$BAR.XLABELS<1,NN> = MONTHNEXT NNW$BAR.XMEMO = "Month"* ROUND MAX AMOUNT UP TO THE NEXT MAX.ROUNDERMAX.SALES.AMT+=MAX.ROUNDERMAX.SALES.AMT=INT(MAX.SALES.AMT/MAX.ROUNDER) * MAX.ROUNDERW$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'RETURN001DF6SUB.MW.CODE.FACTORY0c2SUBROUTINE SUB.MW.CODE.FACTORY** Copyright (c) 2010 SB, Inc. All rights reserved.** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Mobile Web Code Factory"W$TYPE = "HTML"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$HTML.DATA = '<form action="/dbc/MVDB.MAIN" method="GET">'W$HTML.DATA<-1> = '<input type="hidden" name="udview" value="':G$WIDGET.NAME:'" />'*NSELECTED = "" ; TSELECTED = "" ; FSELECTED = ""CODE.TEXT = ""IF WIDGET.USER.DATA(1) # WIDGET.USER.DATA(100) THEN  TMP1 = WIDGET.USER.DATA(1)  TMP100 = WIDGET.USER.DATA(100)  MAT WIDGET.USER.DATA = ""  WIDGET.USER.DATA(1) = TMP1  WIDGET.USER.DATA(100) = TMP100ENDW$HTML.DATA<-1> = '<table width="100%">'BEGIN CASE  CASE WIDGET.USER.DATA(1) = "N"    NSELECTED = "selected"    GOSUB TYPE.SELECTOR    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos2" value="2" />'    W$HTML.DATA<-1> = 'Nav Labels (comma-separated):</td><td><input type="text" name="udval2" value="':WIDGET.USER.DATA(2):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos3" value="3" />'    W$HTML.DATA<-1> = 'Nav Links (comma-separated):</td><td><input type="text" name="udval3" value="':WIDGET.USER.DATA(3):'" /></td></tr>'    W$HTML.DATA<-1> = '</table>'    *    IF WIDGET.USER.DATA(2) # "" THEN      CODE.TEXT = 'P$NAV.OPTS = ""'      VARNAME = "P$NAV.LABEL" ; LIST = WIDGET.USER.DATA(2)      GOSUB MAKE.CODE      VARNAME = "P$NAV.LINK" ; LIST = WIDGET.USER.DATA(3)      GOSUB MAKE.CODE    END    W$HTML.DATA<-1> = '<br /><input type="submit" value="Make Code" />'  CASE WIDGET.USER.DATA(1) = "T"    TSELECTED = "selected"    GOSUB TYPE.SELECTOR    *    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos2" value="2" />'    W$HTML.DATA<-1> = 'Column Headings (comma-separated):</td><td><input type="text" name="udval2" value="':WIDGET.USER.DATA(2):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos3" value="3" />'    W$HTML.DATA<-1> = 'Column Just (L/R) (comma-separated):</td><td><input type="text" name="udval3" value="':WIDGET.USER.DATA(3):'" /></td></tr>'    W$HTML.DATA<-1> = '</table>'    IF WIDGET.USER.DATA(2) # "" THEN      CODE.TEXT<-1> = 'MAT TABLE.DEFS = ""'      VARNAME = "TABLE$LABELS" ; LIST = WIDGET.USER.DATA(2)      GOSUB MAKE.CODE      VARNAME = "TABLE$ALIGN" ; LIST = WIDGET.USER.DATA(3)      GOSUB MAKE.CODE      *      CODE.TEXT<-1> = 'TABLE$DATA = "" ;* Fill in your data here'      CODE.TEXT<-1> = 'CALL SUB.MOBI.TABLE(MAT TABLE.DEFS)'    END    W$HTML.DATA<-1> = '<br /><input type="submit" value="Make Code" />'  CASE WIDGET.USER.DATA(1) = "F"    FSELECTED = "selected"    GOSUB TYPE.SELECTOR    *    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos2" value="2" />'    W$HTML.DATA<-1> = 'Field Labels (comma-separated):</td><td><input type="text" name="udval2" value="':WIDGET.USER.DATA(2):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos3" value="3" />'    W$HTML.DATA<-1> = 'Field Types (comma-separated):</td><td><input type="text" name="udval3" value="':WIDGET.USER.DATA(3):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos4" value="4" />'    W$HTML.DATA<-1> = 'Values (comma-separated):</td><td><input type="text" name="udval4" value="':WIDGET.USER.DATA(4):'" /></td></tr>'    *    IF WIDGET.USER.DATA(2) # "" THEN      *      DIM SEL.REF(20)      DIM SEL.LISTS(20)      DIM SEL.VALS(20)      TMP.TYPES = WIDGET.USER.DATA(3)      CALL SWAP(TMP.TYPES,'\,',CHAR(9))      CONVERT "," TO @AM IN TMP.TYPES      CONVERT " " TO "" IN TMP.TYPES      CONVERT CHAR(9) TO "," IN TMP.TYPES      TMP.NAMES = WIDGET.USER.DATA(2)      CALL SWAP(TMP.NAMES,'\,',CHAR(9))      CONVERT "," TO @AM IN TMP.NAMES      CONVERT CHAR(9) TO "," IN TMP.NAMES      SEL.POS = 0      POS.LIST = ""      UDPOS = 6 ;* Next user data position (hold 5 open)      LOOP        LOCATE "SELECT" IN TMP.TYPES SETTING POS THEN          TMP.TYPES<POS> = "XXX"          SEL.POS += 1          POS.LIST<-1> = POS          W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos':UDPOS:'" value="':UDPOS:'" />'          W$HTML.DATA<-1> = 'Options for "':TMP.NAMES<POS>:'":</td><td><input type="text" name="udval':UDPOS:'" value="':WIDGET.USER.DATA(UDPOS):'" /></td></tr>'          UDPOS += 1          W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos':UDPOS:'" value="':UDPOS:'" />'          W$HTML.DATA<-1> = 'Values for "':TMP.NAMES<POS>:'":</td><td><input type="text" name="udval':UDPOS:'" value="':WIDGET.USER.DATA(UDPOS):'" /></td></tr>'          UDPOS += 1        END ELSE EXIT      REPEAT      W$HTML.DATA<-1> = '</table>'      UDPOS = 5      CONVERT @AM TO "," IN POS.LIST      W$HTML.DATA<-1> = '<input type="hidden" name="udpos':UDPOS:'" value="5" />'      W$HTML.DATA<-1> = '<input type="hidden" name="udval':UDPOS:'" value="':POS.LIST:'" />'    END ELSE      W$HTML.DATA<-1> = '</table>'    END    W$HTML.DATA<-1> = '<input type="submit" value="Make Code" />'    *    IF WIDGET.USER.DATA(2) # "" THEN      CODE.TEXT<-1> = "FORM.ID = 1"      CODE.TEXT<-1> = 'INPUT.OPTS = "" ; SEL.LISTS = "" ; SEL.VALS = ""'      CODE.TEXT<-1> = 'FIELDSET.LABEL = "Fieldset Label"'      VARNAME = "LABELS" ; LIST = WIDGET.USER.DATA(2)      GOSUB MAKE.CODE      VARNAME = "INPUT.TYPES" ; LIST = WIDGET.USER.DATA(3)      GOSUB MAKE.CODE      VARNAME = "VALUES" ; LIST = WIDGET.USER.DATA(4)      GOSUB MAKE.CODE      *      POS.LIST = WIDGET.USER.DATA(5)      CONVERT "," TO @AM IN POS.LIST      POS.CNT = DCOUNT( POS.LIST, @AM )      SXPOS = 6      FOR SX = 1 TO POS.CNT        LIST = WIDGET.USER.DATA(SXPOS)        SXPOS += 1        VALS = WIDGET.USER.DATA(SXPOS)        SXPOS += 1        CONVERT "," TO @AM IN LIST        CONVERT "," TO @AM IN VALS        FOR SVX = 1 TO DCOUNT( LIST, @AM )          CODE.TEXT<-1> = "SEL.LISTS<":POS.LIST<SX>:",":SVX:"> = \":TRIM(LIST<SVX>):"\"          CODE.TEXT<-1> = "SEL.VALS<":POS.LIST<SX>:",":SVX:"> = \":TRIM(VALS<SVX>):"\"        NEXT SVX      NEXT SX      CODE.TEXT<-1> = 'FIELDSET.OPTIONS = ""'      CODE.TEXT<-1> = "CALL SUB.MOBI.FIELDSET(LABELS,VALUES,INPUT.TYPES,INPUT.OPTS,SEL.LISTS,SEL.VALS,FIELDSET.LABEL,FORM.ID,FIELDSET.OPTIONS)"    END  CASE 1    GOSUB TYPE.SELECTOR    MAT WIDGET.USER.DATA = ""    W$HTML.DATA<-1> = '</table>'END CASE*WIDGET.USER.DATA(100) = WIDGET.USER.DATA(1) ;* Current typeW$HTML.DATA<-1> = '</form>'IF CODE.TEXT # "" THEN  CALL SWAP(CODE.TEXT,'&','&amp;')  CALL SWAP(CODE.TEXT,'<','&lt;')  CALL SWAP(CODE.TEXT,'>','&gt;')  CALL SWAP(CODE.TEXT,@AM,'<br />')  W$HTML.DATA<-1> = '<hr />'  W$HTML.DATA<-1> = '<pre>'  W$HTML.DATA<-1> = CODE.TEXT  W$HTML.DATA<-1> = '</pre>'ENDRETURN*MAKE.CODE: **CALL SWAP(LIST,'\,',CHAR(9))CONVERT "," TO @AM IN LISTCONVERT CHAR(9) TO ',' IN LISTCNT = DCOUNT( LIST, @AM )CODE.TEXT<-1> = VARNAME:' = ""'FOR N = 1 TO CNT  WORD = TRIM(LIST<N>)  IF WORD # "" THEN    CODE.TEXT<-1> = VARNAME:'<':N:'> = \':WORD:'\'  ENDNEXT NRETURN*TYPE.SELECTOR: **W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos1" value="1" />'W$HTML.DATA<-1> = 'Create code for:</td><td><select name="udval1" onChange="this.form.submit();">'W$HTML.DATA<-1> = '<option value="">Select Code Type</option>'W$HTML.DATA<-1> = '<option value="N" ':NSELECTED:'>P$NAV Navigation</option>'W$HTML.DATA<-1> = '<option value="T" ':TSELECTED:'>Table</option>'W$HTML.DATA<-1> = '<option value="F" ':FSELECTED:'>Fieldset / Form</option>'W$HTML.DATA<-1> = '</select></td></tr>'RETURN0004B6SUB.DEMO.SALE.TYPES.PIE0c2SUBROUTINE SUB.DEMO.SALE.TYPES.PIE**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FC2DPIE"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEYEAR=WIDGET.USER.DATA(1)BEGIN CASE   CASE WIDGET.USER.DATA(2) = 'PARTS'      W$TITLE = 'Chart - ':YEAR:' Parts Revenue by Type'      TYPE.ATT=52      AMTS.ATT=53      W$PIE.CAPTION='Total Parts Revenue of '   CASE WIDGET.USER.DATA(2) = 'SERVICES'      W$TITLE = 'Chart - ':YEAR:' Services Revenue by Type'      TYPE.ATT=50      AMTS.ATT=51      W$PIE.CAPTION='Total Services Revenue of 'END CASE*OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''LOCATE YEAR IN REC<67> SETTING YEAR.POS ELSE YEAR.POS=1**W$PIE.VALUE.OPTS<1,3>='isSliced="1"'*TYPES=REC<TYPE.ATT>AMOUNTS=REC<AMTS.ATT>MAX.TYPES=DCOUNT(TYPES,CHAR(253))FOR TYPE.CNTR = 1 TO MAX.TYPES   W$PIE.LABELS<1,TYPE.CNTR>=TYPES<1,TYPE.CNTR>   W$PIE.VALUES<1,TYPE.CNTR>=AMOUNTS<1,TYPE.CNTR,YEAR.POS> NEXT TYPE.CNTRW$PIE.CAPTION:=OCONV(SUM(W$PIE.VALUES),'MD2,$')**RETURN000221SUB.LISTU0c2SUBROUTINE SUB.LISTU * * Copyright (c) 2010 SB, Inc. All rights reserved. * Description: List Users * *#MAKE# RL $OPTIONS D3 INCLUDE WBPD MVDB.INCLUDE * W$TYPE = "HTML" W$TITLE = "List Users" W$WIDTH = 1 W$PRINTABLE = 1 * IF G$QUERYMODE THEN RETURN * EXECUTE "LISTU" CAPTURING JUNK W$HTML.DATA = '<div  align="left">' W$HTML.DATA<-1> = '<pre>' FOR X = 1 TO DCOUNT( JUNK, @AM )  W$HTML.DATA<-1> = JUNK<X> NEXT X W$HTML.DATA<-1> = '</pre>' W$HTML.DATA<-1> = '</div>' * INCLUDE WBPD SOURCE.VIEW.ICON * RETURN 00006CVOC0c000003AMVAPPS.INSTALLER0c2PQHRUN WDB.BP APP.INSTALLERSTONA2P00001FLOGIN0c2PAPTERM CASE NOINVERT0000F9MVDB.USERS0c0000027guest0c2guestChartsGuest UserUser00003Fadmin0c2adminAdministratorAdmin Userno emailAdministrator000037emailed0c2788CF490Administratoremailed reportUser000036webservice0c2788CF490AdministratorwebserviceUser000281DICT_DASHBOARD.CLOSING.STATS0c000001BAMOUNT0c1A1MD2R1200001CBRANCH0c1A0G2*1L10000021COST.OF.SALE0c1A2MD2R12000028GROSS.PROFIT0c1A0MD2F;1;2;-R12000014ID0c1A0L10000021LAST.AP.REFRESH0c11910904-25-20000021LAST.AR.REFRESH0c11910904-25-20000024LAST.SALES.REFRESH0c11910904-25-2000001APIPE0c1A0 F;C|L100001CREGION0c1A0G3*1L10000034REGION*YYYYMM0c1A0A;0(G3*1):"*":0(G1*1)L1000001DSALESMAN0c1A0G*1L20000024SALESMAN*YYYYMM0c1A0G*2L2000001EYYYY0c1A0G1*1T1,4L400001BYYYYMM0c1A0G1*1L6000023YYYYMM*BRANCH0c1A0G1*2L1000818EMVDB.SUB.TEMPLATES0c0000017FCBAR2D0c2USE FCAREA2D0009C3FCMSAREA2D0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create three arrays here. Two of them are single-dimention attribute*   or value separated lists, one that stores descriptions of each*   point along the X axis (major), another that stores descriptions*   of the components that make up each point along the X axis (minor).*   Example: Monthly sales by territory where each month is a point*   (major) and each territory is a component of that point (minor).*   The third array is a full dynamic array where each attribute is a*   territory (minor) and each value is a month (major).*   Array Examples:    TERRS="" ;* Each attribute is a short description of the territory    MNTHS="" ;* Each value is a short description of the month (Mon/YY)    SALES="" ;* Each attribute contains values (one per month) of the             ;* sales within a territory. SALES<3,2> corresponds to             ;* TERRS<1,3> and MNTHS<1,3>*   then you can load the widget's values and labels like:*     W$BAR.VALUES  = SALES*     W$BAR.XLABELS = MNTHS*     W$BAR.LABELS  = TERRS*   rather than loading them a value at a time as shown*   in the "FOR N = 1 TO 12" loop below.*W$BAR.CAPTION = "YOUR CHART CAPTION HERE"W$BAR.XMEMO = "X-Axis Text" ;* Text that appears below the X-Axis labels                            ;* Ex: Territory Sales by MonthW$BAR.YMEMO = "Y-Axis Text" ;* Text that appears beside the Y-Axis labels                            ;* Ex: Sales (USD)*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = N ;* Value  W$BAR.XLABELS<1,N> = "Label ":N ;* X-Axis labelNEXT NW$BAR.LABELS<1>="Label 1"W$BAR.LABELS<2>="Label 2"W$BAR.LABELS<3>="Label 3"** To suppress the actual values for any of the series:W$BAR.LABEL.OPTS<1> = "showValues='0'"W$BAR.LABEL.OPTS<2> = "showValues='0'"W$BAR.LABEL.OPTS<3> = "showValues='0'"** Specify the alpha (transparency level) for each of the seriesW$BAR.LABEL.OPTS<1> := " areaAlpha='50'"W$BAR.LABEL.OPTS<2> := " areaAlpha='70'"W$BAR.LABEL.OPTS<3> := " areaAlpha='90'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000561SPARKWINLOSS0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the actual data, the other contains benchmark data*   to which the actual data are compared.*   Example:      SALES: Each value is a single sales total for the month      GOALS: Each value is a single goal for the corresponding month*     you build the chart values by comparing each value within the*     two lists, setting each chart value to "W" (win), "L" (lose)*     or "D" (draw) based on the comparison*W$FW.CAPTION = "YOUR CHART CAPTION HERE"W$FW.SUBCAPTION = "YOUR CHART SUBCAPTION HERE"*MAX = DCOUNT(SALES,@VM)FOR N = 1 TO MAX  BEGIN CASE    CASE SALES<1,N> > GOALS<1,N>; W$FW.VALUES<1,N> = "W" ;* Win    CASE SALES<1,N> < GOALS<1,N>; W$FW.VALUES<1,N> = "L" ;* Loss    CASE 1                                               ;* Draw  END CASENEXT N**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001BFCDOUGHNUT2D0c2USE FC2DPIE00057BFC2DPIE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the data, the other contains a short description*   of that data.*   Example:*     TERRSALES: Each value is a single territory's sales for the month*     TERRNAMES: Each value is a short name for the territory*     then you can load the widget's values like:*       W$PIE.LABELS = TERRNAMES*       W$PIE.VALUES = TERRSALES*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 7" loop below.*FOR N = 1 TO 7  W$PIE.LABELS<1,N> = "Slice ":N  W$PIE.VALUES<1,N> = NNEXT N** For a 2D pie, a specific slice can be separated from the pie* by setting this value:* W$PIE.VALUE.OPTS<1,X> = 'isSliced="1"'*   where "X" is the number of the value you want separated** To show values instead of percentages, use this:* W$CHART.OPTIONS<-1> = "showPercentageValues='0'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001BCYLINDER0c2USE THERMOMETER000303TEXT0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create dynamic array, on text line per attribute*   Examples:*     READ TXTITM FROM FILE,ID ELSE TXTITM = "TXTITM NOT FOUND"*   or:*     EXECUTE "YOUR SORT STATEMENT" CAPTURING TXTITEM*W$TEXT.DATA = "YOUR DYNAMIC ARRAY HERE";* example: TXTITM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000016FCLINE0c2USE FCAREA2D000022FCSTACKEDCOLUMN3D0c2USE FCMSBAR2D000A7CHLED0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine a contant to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever.*   Example:*     SALES: Total sales for a period within the current year*     GOAL:  Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the higher of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given GOAL & SALES, calculate the ranges:             GOAL      = 100000             SALES     = 110000             RANGE.BAD = INT(GOAL*.7)             RANGE.OK  = INT(GOAL*.9)             RANGE.GOOD= INT(SALES*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* To* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Value & TargetW$FW.METER.VALUE  = SALES      ;* Your actual value** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001DFCMSCOLUMN3D0c2USE FCMSBAR2D00026AHTML0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create a HTML string from data previously read*W$HTML.DATA = "<h2>YOUR HTML STRING HERE</h2>"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001AFCCOLUMN2D0c2USE FCAREA2D00001CSPARKLINE0c2USE SPARKCOLUMN000ADBHBULLET0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine a contant to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever.*   Example:*     SALES: Total sales for a period within the current year*     GOAL:  Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the higher of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given GOAL & SALES, calculate the ranges:             GOAL      = 100000             SALES     = 110000             RANGE.BAD = INT(GOAL*.7)             RANGE.OK  = INT(GOAL*.9)             RANGE.GOOD= INT(SALES*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.CAPTION     = "YOUR MAIN CAPTION HERE"W$FW.SUBCAPTION  = "YOUR SUB-CAPTION HERE"  ;* Optional*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* To* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Value & TargetW$FW.METER.VALUE  = SALES      ;* Your actual valueW$FW.METER.TARGET = GOAL       ;* Your calculated target** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000010VLED0c2USE HLED000016FC3DPIE0c2USE FC2DPIE000905FCMSBAR2D0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create three arrays here. Two of them are single-dimention attribute*   or value separated lists, one that stores descriptions of each*   point along the X axis (major), another that stores descriptions*   of the components that make up each point along the X axis (minor).*   Example: Monthly sales by territory where each month is a point*   (major) and each territory is a component of that point (minor).*   The third array is a full dynamic array where each attribute is a*   territory (minor) and each value is a month (major).*   Array Examples:    TERRS="" ;* Each attribute is a short description of the territory    MNTHS="" ;* Each value is a short description of the month (Mon/YY)    SALES="" ;* Each attribute contains values (one per month) of the             ;* sales within a territory. SALES<3,2> corresponds to             ;* TERRS<1,3> and MNTHS<1,3>*   then you can load the widget's values and labels like:*     W$BAR.VALUES  = SALES*     W$BAR.XLABELS = MNTHS*     W$BAR.LABELS  = TERRS*   rather than loading them a value at a time as shown*   in the "FOR N = 1 TO 12" loop below.*W$BAR.CAPTION = "YOUR CHART CAPTION HERE"W$BAR.XMEMO = "X-Axis Text" ;* Text that appears below the X-Axis labels                            ;* Ex: Territory Sales by MonthW$BAR.YMEMO = "Y-Axis Text" ;* Text that appears beside the Y-Axis labels                            ;* Ex: Sales (USD)*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = N ;* Value  W$BAR.XLABELS<1,N> = "Label ":N ;* X-Axis labelNEXT NW$BAR.LABELS<1>="Label 1"W$BAR.LABELS<2>="Label 2"W$BAR.LABELS<3>="Label 3"** To suppress the actual values for any of the series:W$BAR.LABEL.OPTS<1> = "showValues='0'"W$BAR.LABEL.OPTS<2> = "showValues='0'"W$BAR.LABEL.OPTS<3> = "showValues='0'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00022EMAP0c2W$TITLE = "Untitled Map"** The W$TYPE variable needs to represent a valid map name*W$TYPE = "MAP:Canada"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$MAP.IDS<1,1> = "01"W$MAP.VALUES<1,1> = 5W$MAP.VALUE.OPTS<1,1> = 'toolText="This is Alberta!"'*W$MAP.RANGE.NAME<1,1> = "Not On The Map"W$MAP.RANGE.LOW<1,1> = "0"W$MAP.RANGE.HIGH<1,1> = "5"W$MAP.RANGE.COLOR<1,1> = "WHITE"W$MAP.RANGE.NAME<1,2> = "On The Map"W$MAP.RANGE.LOW<1,2> = "5"W$MAP.RANGE.HIGH<1,2> = "10"W$MAP.RANGE.COLOR<1,2> = "GREEN"*RETURN0004FFTABLE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create a work table from your data that you'll use to populate the*   widget's table data array where attributes represent rows and*   values represent columns. NOTE: If you are using the widget's*   Total row, you have to calculate the totals yourself and stick*   them in the appropriate W$TABLE.TOTALS value.** Set up column labelsW$TABLE.COL.LABELS<1,1> = "Column Heading 1"W$TABLE.COL.LABELS<1,2> = "Column Heading 2"W$TABLE.COL.LABELS<1,3> = "Column Heading 3"** Column justification = left, right, centerW$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "right"** Table RowsFOR ROW = 1 TO 5  W$TABLE.DATA<ROW,1> = ROW:",1"  W$TABLE.DATA<ROW,2> = ROW:",2"NEXT ROW** TotalsW$TABLE.TOTALS<1,1> = "2"W$TABLE.TOTALS<1,2> = "4"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000DE2ANGULARGAUGE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine some contants to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever. Also, gather*   information that will allow you to create ranges against which to*   compare the number and those constants, if any.*   Example:*     SALES.CY: Total sales for a period within the current year*     SALES.LY: Total sales within that same period last year*     SLS.GOAL: Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the highest of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given SLS.GOAL & SALES.CY, calculate the ranges:             SLS.GOAL  = 100000             SALES.CY  = 110000             SALES.LY  = 95000             RANGE.BAD = INT(SLS.GOAL*.7)             RANGE.OK  = INT(SLS.GOAL*.9)             RANGE.GOOD= INT(SALES.CY*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* ToW$FW.COLOR.RANGE<3,2> = COLOR$YELLOW;* Override color* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Main Dial ValueW$FW.DIAL.VALUES<1> = SALES.CY      ;* Your actual value** Trendpoints (optional)* By default, there are no trendpoints on the gauge.** First TrendpointW$FW.TRENDPOINT.VALUES<1,1> = SALES.LYW$FW.TRENDPOINT.LABELS<1,1> = "Last Year"W$FW.TRENDPOINT.OPTS<1,1> = 'color="':COLOR$BLACK:'" useMarker="1"'* Second TrendpointW$FW.TRENDPOINT.VALUES<1,2> = SLS.GOALW$FW.TRENDPOINT.LABELS<1,2> = "Goal"W$FW.TRENDPOINT.OPTS<1,2> = 'color="':COLOR$SILVER:'" useMarker="1"'** Plot an arc (optional) W$FW.TRENDPOINT.VALUES<2,1> = SALES.LY ;* Arc beginW$FW.TRENDPOINT.VALUES<2,2> = SALES.CY ;* Arc end** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001AFCCOLUMN3D0c2USE FCAREA2D000020FCSTACKEDAREA2D0c2USE FCMSBAR2D0005C4FCAREA2D0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the data, the other contains a short description*   of that data, like the month and year.*   Example:*     TERRSALES: Each value is a single territory's sales for the month*     TERRPERDS: Each value is a short description of the period (MM/YY)*     then you can load the widget's values like:*       W$BAR.XLABELS = TERRPERDS*       W$BAR.VALUES = TERRSALES*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 12" loop below.*W$BAR.CAPTION = "YOUR CHART CAPTION HERE"W$BAR.XMEMO = "X-Axis Text" ;* Text that appears below the X-Axis labels                            ;* Ex: Territory ABC Sales by MonthW$BAR.YMEMO = "Y-Axis Text" ;* Text that appears beside the Y-Axis labels                            ;* Ex: Sales (USD)*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = N ;* Value  W$BAR.XLABELS<1,N> = "Label ":N ;* X-Axis labelNEXT N**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN0006F3FUNNEL0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the data, the other contains a short description*   of that data. NOTE: The values should be ordered from largest to*   smallest (value<1,1> should be larger than value<1,2> and so on)*   or the funnel will look weird. For a pyramid, that order should*   be reversed (value<1,1> should be smaller than value<1,2>, etc).*   Example:*     KILLSTATS: Each value is a single territory's sales for the month*     STATDESCS: Each value is a short name for the territory*     then you can load the widget's values like:*       W$FC.LABELS = STATDESCS*       W$FC.VALUES = KILLSTATS*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 5" loop below.*   For a funnel chart, the last value in the list must represent the*   total of all the other values. This is not true for a pyramid chart.*FOR N = 1 TO 5  W$FW.LABELS<1,N> = "Section ":N  W$FW.VALUES<1,N> = NNEXT N*W$FW.CAPTION = "YOUR CAPTION HERE"W$FW.SUBCAPTION = "YOUR SUB-CAPTION HERE"** To show percentages instead of values, use this:* W$CHART.OPTIONS<-1> = "showPercentValues='1'"* To separate the sections from one another, use this:* W$CHART.OPTIONS<-1> = "isSliced='1'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN0006FCTHERMOMETER0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine a contant to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever.*   Example:*     SALES: Total sales for a period within the current year*     GOAL:  Sales goal for said current year period*   Example: Given GOAL & SALES, calculate the ranges:             GOAL      = 100000             SALES     = 110000*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = GOAL ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"W$FW.THERMOMETER.COLOR = COLOR$RED*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** ValueW$FW.METER.VALUE  = SALES      ;* Your actual value** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000019FCMSLINE0c2USE FCMSBAR2D000BB5USAMAP0c2W$TITLE = "Untitled Map"W$TYPE = "%TYPE%"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN** The IDs of each section of a USA map are the state abbreviations, including DC* A list of the state names can be obtained as follows:OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "Unable to open MVDB.CONTROL"  RETURNENDREAD STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ''CONVERT "," TO @VM IN STATE.NAMES*IF WIDGET.USER.DATA(1) # "" THEN  * User has clicked on a specific state. That state map will be displayed.  * This entire section of code can be removed if you dont want to allow  * drill-down to a state map.  *  * The map "name" for the sepcifc state is stored in WIDGET.USER.DATA(2).  * The IDs for the state map are the FIPS county codes.  * A list of county codes can be gathered for a specific state as follows:  OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE    W$TYPE = "TEXT"    W$TEXT.DATA = "Unable to open MVDB.MAP.DATA"    RETURN  END  EXECUTE 'SELECT MVDB.MAP.DATA WITH NAME = "':WIDGET.USER.DATA(2):'"' CAPTURING JUNK  N = 0  LOOP    READNEXT ID ELSE EXIT    READ REC FROM F.MVDB.MAP.DATA, ID THEN      N += 1      * The ID of the map data file is STATE * FIPS_Code      * Extract the FIPS code from the ID and use it as the ID for this      * value.      W$MAP.IDS<1,N> = FIELD( ID, '*', 2 )      W$MAP.VALUES<1,N> = N      * The county name can be found in REC<2>      W$MAP.VALUE.OPTS<1,N> = 'toolText="':REC<2>:'"'    END  REPEAT  * Since we are in drill-down mode, we need to give the user a way to get back  * to the national map. To get out of drill-down mode, WIDGET.USER.DATA(1) needs  * to be cleared. Using a link is an easy way to do that.  W$LINK.LABEL<1,2> = "Return to USA Map"  W$LINK.LOCATION<1,2> = "1"  W$LINK.UD.POS<1,2> = 1  W$LINK.UD.VAL<1,2> = ""  * Override the title to show the state name.  W$TITLE = "Demo - ":WIDGET.USER.DATA(1):" Counties by Alphabet"END ELSE ;* No state specified, full US Map  * Assign a value to each desired map segments (States) as follows  W$MAP.IDS<1,-1> = "TX"  W$MAP.VALUES<1,-1> = 100  W$MAP.VALUE.OPTS<1,-1> = 'toolText="Texas" ' ;* Multiple option settings are space-delimited  *  * With drill-down enabled, the widget will automatically be re-executed with the state ID in WIDGET.USER.DATA(1)  * Allow drill-down to the state level by setting this value:  W$MAP.VALUE.DD<1,-1> = 1END** Set up ranges of values. Note that the low range is inclusive, high range is exclusive.W$MAP.RANGE.NAME<1,1> = "Range 1-99"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "100"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Range 100-199"W$MAP.RANGE.LOW<1,2> = "100"W$MAP.RANGE.HIGH<1,2> = "200"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Range 200-300"W$MAP.RANGE.LOW<1,3> = "200"W$MAP.RANGE.HIGH<1,3> = "301"W$MAP.RANGE.COLOR<1,3> = "RED"*RETURN000DE2HLINEARGAUGE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine some contants to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever. Also, gather*   information that will allow you to create ranges against which to*   compare the number and those constants, if any.*   Example:*     SALES.CY: Total sales for a period within the current year*     SALES.LY: Total sales within that same period last year*     SLS.GOAL: Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the highest of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given SLS.GOAL & SALES.CY, calculate the ranges:             SLS.GOAL  = 100000             SALES.CY  = 110000             SALES.LY  = 95000             RANGE.BAD = INT(SLS.GOAL*.7)             RANGE.OK  = INT(SLS.GOAL*.9)             RANGE.GOOD= INT(SALES.CY*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$YELLOW;* Override color* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Main Dial ValueW$FW.DIAL.VALUES<1> = SALES.CY      ;* Your actual value** Trendpoints (optional)* By default, there are no trendpoints on the gauge.** First TrendpointW$FW.TRENDPOINT.VALUES<1,1> = SALES.LYW$FW.TRENDPOINT.LABELS<1,1> = "Last Year"W$FW.TRENDPOINT.OPTS<1,1> = 'color="':COLOR$BLACK:'" useMarker="1"'* Second TrendpointW$FW.TRENDPOINT.VALUES<1,2> = SLS.GOALW$FW.TRENDPOINT.LABELS<1,2> = "Goal"W$FW.TRENDPOINT.OPTS<1,2> = 'color="':COLOR$SILVER:'" useMarker="1"'** Plot an arc (optional) W$FW.TRENDPOINT.VALUES<2,1> = SALES.LY ;* Arc beginW$FW.TRENDPOINT.VALUES<2,2> = SALES.CY ;* Arc end** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001DFCMSCOLUMN2D0c2USE FCMSBAR2D000016VBULLET0c2USE HBULLET000022FCSTACKEDCOLUMN2D0c2USE FCMSBAR2D000009GANTT0c20003E6SPARKCOLUMN0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create one one-attribute, value-separated array here.*   Example:*     TERRSALES: Each value is a single territory's sales for the month*     then you can load the widget's values like:*       W$FW.VALUES = TERRSALES*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 12" loop below.*W$FW.CAPTION = "YOUR CHART CAPTION HERE"W$FW.SUBCAPTION = "YOUR CHART SUBCAPTION HERE"*FOR N = 1 TO 12  W$FW.VALUES<1,N> = N ;* ValueNEXT N**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000015PYRAMID0c2USE FUNNEL000010BULB0c2USE HLED00001FFCSTACKEDBAR2D0c2USE FCMSBAR2D00005CDICT_MVDB.WIDGETS0c000001FSUB0c1A1SUBROUTINEL2500001CUSERS0c1A2USERSL2000D868WREST.BP0c000023CWSWAP0c2SUBROUTINE WSWAP(string,SUB1,SUB2)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine swaps one string for another*              **********************************************************************IDX.POS = 1LOOP  POS = INDEX(string, SUB1, IDX.POS)WHILE POS DO  string = string[1,POS-1]:SUB2:string[POS+LEN(SUB1),LEN(string)]  IDX.POS = IDX.POS + COUNT(SUB2,SUB1)REPEATRETURNEND000212WGETINFO0c2SUBROUTINE WGETINFO(InfoVal, InfoItem)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: March 2017* Description: return an element from WWW.INFO***********************************************************************INCLUDE WBPD WWW.INCLUDEIF NUM(InfoItem) AND InfoItem > 0 AND InfoItem <= 50 THEN IF INT(InfoItem) = InfoItem THEN  InfoVal = WWW.INFO(InfoItem) ENDENDRETURNEND0005BFWENCODEJSON0c2SUBROUTINE WENCODEJSON(ORIG.OPTION,IN.STR,OUT.STR)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 8/13/2016* Description: this program will convert all bad characters to an escaped character************************************************************************OPEN 'RESULT.FILE' TO RFILE ELSE STOP* WE NEED TO ENCODE* " = \"   (34)* \ = \\    (92)* / = \/* CHAR(7) = \b* CHAR(13) = \r* char(10) = \n* char(12) = \f* char(9)  = \t*WRITE IN.STR ON RFILE, 'IN.STR'OPTION=ORIG.OPTIONOUT.STR=''L=LEN(IN.STR)CONVERT @AM TO CHAR(10) IN IN.STR; * LETS SWITCH 254 TO CR BE DEFAULTFOR X=1 TO L  C=IN.STR[X,1]  SEQ.C=SEQ(C)  ENCODE=0  IF SEQ.C < 32 THEN ENCODE=1; * BELOW SPACE*IF SEQ.C > 32 AND SEQ.C < 48 THEN ENCODE=1; * LETS ENCODE ALL OF THIS !@$%^&*()  IF SEQ.C=34 THEN ENCODE=1  IF SEQ.C=92 THEN ENCODE=1  IF SEQ.C=47 THEN ENCODE=1  IF SEQ.C > 122 THEN ENCODE = 1; * LETS ENCODE ALL THE HIGH ENTRIES*IF SEQ.C >= 91 AND SEQ.C <= 96 THEN ENCODE=1  IF ENCODE THEN    BEGIN CASE      CASE SEQ.C=7; OUT.STR='\b'      CASE C='\'; OUT.STR:='\\'      CASE C='/'; OUT.STR:='\/'      CASE SEQ.C=10; OUT.STR:='\n'      CASE SEQ.C=13; OUT.STR:='\r'      CASE SEQ.C=12; OUT.STR:='\f'      CASE 1;  OUT.STR:='\u00':OCONV(C,'MX0C');*UV*    END CASE  END ELSE    OUT.STR=OUT.STR:C  ENDNEXT XRETURNEND000235WGETCOOKIE0c2SUBROUTINE WGETCOOKIE(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine gets the value of a cookie.*              **********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''TEMPVARS = OCONV(CGI$CVARS,'MCU')LOCATE OCONV(VarName,'MCU') IN TEMPVARS SETTING POS THEN  VarValue = CGI$CVALS<POS>ENDRETURNEND0058ACWDEBUG0c2* WDEBUG** Debug REST Services* Copyright (c) 2017 Zumasys Inc.* Rewritten by Peter Schellenbach, 10/18/2017** Based on original version:*  Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved*  Written by: Luke Bucklin, Sierra Bravo*  Date: Sometime, 2006-ish*$OPTIONS TIME.MILLISECOND ;*UV**INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD FI.WDB.DEBUG*CLR.SCR = @(-1)CLR.EOS = @(-3)MAX.LINES = SYSTEM(3) - 4MAX.COLS = SYSTEM(2) - 1IF MAX.LINES <= 0 OR CLR.SCR = '' OR CLR.EOS = '' THEN  MAX.LINES = 20  CLR.SCR = ''  CLR.EOS = ''  PRMPT.LINE = CHAR(13):CHAR(10)END ELSE  PRMPT.LINE = @(0, MAX.LINES + 2):CLR.EOSENDPROMPT ''*PRINT CLR.SCR:PRINTPRINT 'WDEBUG Web Request Degug Tool'PRINTPRINT 'The WDEBUG tool allows you to inspect, modify and re-run web requests.'PRINT 'Whenever a request for a debuggable resource is processed by WDB.INIT,'PRINT 'a debug record for the request is added to the WDB.DEBUG file. WDEBUG'PRINT 'allows you to select a debug record, view the request details, edit the'PRINT 'request variables, re-run the request and view the response.'PRINTPRINT 'To debug web requests for a resource, set attribute 7 of the WDB.RESOURCE'PRINT 'record for the resource to 1, then issue the web request from the client'PRINT 'browser or other agent. WDEBUG will show a list of recent web requests to'PRINT 'select from.'PRINTPRINT 'Start WDEBUG with an active select list if you need to use special criteria'PRINT 'to select the record(s) you need to debug.'PRINTPRINT 'Press <enter> to continue':INPUT ANS*OPEN 'WDB.DEBUG' TO F.WDB.DEBUG ELSE  PRINT 'The WDB.DEBUG data file is required to use WDEBUG. Default installations'  PRINT 'only create the dictionary for this file. Please create the data section'  PRINT 'to use WDEBUG: CREATE-FILE DATA WDB.DEBUG 101.'  STOPEND*SESSION.FLAG = 0OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SESSION.FLAG = 1 ;* can restore session when running debug reqest*EDITOR = ''IDS = ''NUM.IDS = 0IF SYSTEM(11) THEN  LOOP    READNEXT ID ELSE EXIT    READV X FROM F.WDB.DEBUG, ID, 1 THEN      IDS<-1> = ID      NUM.IDS += 1    END ELSE      PRINT ID:' not found in WDB.DEBUG!'    END  REPEATENDUSE.SUPPLIED.LIST = (NUM.IDS > 0)*LOOP  IF NOT(USE.SUPPLIED.LIST) THEN* Select available WDB.DEBUG items    CMND = 'SSELECT WDB.DEBUG WITH TYPE = "C" "R" BY-DSND DATE BY-DSND TIME'    EXECUTE CMND CAPTURING RESULT    IF SYSTEM(11) = 0 THEN      PRINT "No items found."      STOP    END    IDS = ''    NUM.IDS = 0    LOOP      READNEXT ID ELSE EXIT      IDS<-1> = ID      NUM.IDS += 1    REPEAT  END*  TOP = 0  LOOP* Display page of items    PRINT CLR.SCR:    PRINT "Ln Date. Time.... Path................ Remote Address...... Request ID........."    FOR CNTR = 1 TO MAX.LINES UNTIL CNTR + TOP > NUM.IDS      DBG.ID = IDS<CNTR>      READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE CONTINUE      PATH.INFO = DBGREC<WDBG_PATH>      IF PATH.INFO = '' THEN PATH.INFO = DBGREC<WDBG_HANDLER>:'/':DBGREC<WDBG_RESOURCE>      PRINT CNTR "R#2 ":      PRINT OCONV(DBGREC<WDBG_DATE>, 'D0-') "L#5 ":      PRINT OCONV(DBGREC<WDBG_TIME>, 'MTS') "L#8 ":      PRINT PATH.INFO "L#20 ":      PRINT DBGREC<WDBG_REMOTE_ADDR> "L#20 ":      PRINT DBGREC<WDBG_REQUEST_ID>[1,20]    NEXT CNTR    IF TOP + MAX.LINES > NUM.IDS THEN BOT = NUM.IDS ELSE BOT = TOP + MAX.LINES    PRINT "Showing items ":(TOP + 1):"-":BOT:" of ":NUM.IDS*    LOOP      PRINT PRMPT.LINE:"Command: (Q)uit (R)efresh (C)lear (N)ext (P)rev (##) Line to debug: ":      INPUT COMMAND      IF COMMAND MATCHES '1N0N' THEN        IF COMMAND >= 1 AND COMMAND <= MAX.LINES AND COMMAND + TOP <= NUM.IDS THEN          DBG.ID = IDS<COMMAND + TOP>          GOSUB debug.request        END        COMMAND = ''      END ELSE        COMMAND = OCONV(COMMAND[1,1], 'MCU')        IF COMMAND = '' THEN COMMAND = 'N'        IF INDEX('ERCNPQ', COMMAND, 1) = 0 THEN COMMAND = ''      END    WHILE COMMAND = '' DO REPEAT*    BEGIN CASE      CASE COMMAND = 'N'        IF TOP + MAX.LINES < NUM.IDS THEN TOP += MAX.LINES      CASE COMMAND = 'P'        IF TOP - MAX.LINES >= 0 THEN TOP -= MAX.LINES    END CASE  WHILE COMMAND = 'N' OR COMMAND = 'P' DO REPEAT*UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'R' ; NULL    CASE COMMAND = 'C'      EXECUTE 'SELECT WDB.DEBUG WITH TYPE = "C" "R"'      PRINT 'Are you sure you want to clear these items from the WDB.DEBUG file? ':      INPUT ANS      ANS = OCONV(ANS[1,1],'MCU')      IF ANS = 'Y' THEN        IF SYSTEM(11) THEN          LOOP            READNEXT ID ELSE EXIT            DELETE F.WDB.DEBUG, ID          REPEAT        END      END ELSE        CLEARSELECT      END  END CASEREPEATSTOP**----------debug.request:*----------*READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE  PRINT "The selected item '":DBG.ID:"' is not available!"  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDEDIT.ID = 'D':DBG.ID[2, LEN(DBG.ID)]LOOP  PRINT PRMPT.LINE:"Debugging ":DBG.ID[1,28]:" - command: (Q)uit (V)iew (E)dit (R)un: ":  INPUT COMMAND  COMMAND = OCONV(COMMAND[1,1], 'MCU')UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'V'      GOSUB view.request    CASE COMMAND = 'E'      GOSUB edit.request    CASE COMMAND = 'R'      GOSUB run.request  END CASEREPEATRETURN**----------view.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDGOSUB to.editNUM.LNS = DCOUNT(EDIT.REC, @AM)I = 1LOOP WHILE I <= NUM.LNS DO  X = EDIT.REC<I>  IF LEN(X) > MAX.COLS THEN    X = FOLD(X, MAX.COLS)    EDIT.REC<I> = X    N = COUNT(X, @AM)    NUM.LNS += N    I += N  END  I += 1REPEATIF NUM.LNS = 0 THEN NUM.LNS = 1NUM.PGS = INT((NUM.LNS - 1) / MAX.LINES) + 1CUR.PG = 1LOOP  PG.TOP = (CUR.PG - 1) * MAX.LINES  IF PG.TOP + MAX.LINES > NUM.LNS THEN LPP = NUM.LNS - PG.TOP ELSE LPP = MAX.LINES  PRINT CLR.SCR:  PRINT 'Page ':CUR.PG:' of ':NUM.PGS:SPACE(10):DBG.ID  PRINT  FOR I = 1 TO LPP    PRINT EDIT.REC<I + PG.TOP>  NEXT I  PRINT PRMPT.LINE:'Command: (Q)uit (N)ext (P)rev (##) Goto page ':  INPUT COMMAND  IF COMMAND MATCHES '1N0N' THEN    IF COMMAND >= 1 AND COMMAND <= NUM.PGS THEN CUR.PG = COMMAND  END ELSE    COMMAND = OCONV(COMMAND[1,1], 'MCU')  ENDUNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'N' OR COMMAND = ''      IF CUR.PG < NUM.PGS THEN CUR.PG = CUR.PG + 1    CASE COMMAND = 'P'      IF CUR.PG > 1 THEN CUR.PG = CUR.PG - 1  END CASEREPEATRETURN**----------edit.request:*----------*IF EDITOR = '' THEN GOSUB choose.editorIF EDITOR <> '' THEN  EDIT.ID = 'D':DBG.ID  GOSUB to.edit  WRITE EDIT.REC ON F.WDB.DEBUG, EDIT.ID  CMND = EDITOR:' WDB.DEBUG ':EDIT.ID  EXECUTE CMND  READ EDIT.REC FROM F.WDB.DEBUG, EDIT.ID ELSE NULL  DELETE F.WDB.DEBUG, EDIT.ID  GOSUB from.editENDRETURN**----------run.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNEND*HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* Reconstruct query stringQSTR = ''QSEP = ''* headers and server variablesN = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_HEADER_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* form variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_CGI_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_CGI_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  URLENCODE.STRING = CHANGE(THE.BODY, @VM, CHAR(10))  GOSUB url.encode  QSTR := QSEP:'__body__=':NEW.STRINGEND* restore session stateIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    SESSION.REC = ''    SESSION.REC<1> = DBGREC<WDBG_SESSION_VARS>    SESSION.REC<2> = DBGREC<WDBG_SESSION_VALS>    SESSION.REC<3> = DBGREC<WDBG_SESSION_DATE>    SESSION.REC<4> = DBGREC<WDBG_SESSION_TIME>    WRITE SESSION.REC ON F.WEB.SESSION, SESSION.ID  ENDEND* break the query string into 1000 byte chunksN = INT((LEN(QSTR) - 1) / 1000) + 1* build the command lineRUN.ID = DBGREC<WDBG_REQUEST_ID>CMND = 'WDB.INIT ':HANDLER.NAME:'/':RESOURCE.NAME:' ':RUN.ID:'-1-':N:' %% _WDEBUG_MODE_'** run the commandPRINTPRINT 'Executing the request: ':CMNDPRINTMAT WWW.INFO = ""EXECSTART = SYSTEM(12)* send query string as stacked inputFOR I = 1 TO N  DATA QSTR[((I - 1) * 1000) + 1, 1000]NEXT IEXECUTE CMND CAPTURING RESPONSEEXECDUR = SYSTEM(12) - EXECSTARTPRINT 'Request complete. Press <enter> to parse results':INPUT ANS** update the request runtimeDBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_DURATION> = EXECDUR* process the responseLINT.BEFORE = ''LINT.AFTER = ''WARN = ''ERR = ''* Gather lint from before the start tag and after the complete tagDBGREC<WDBG_WARNING> = '' ;* WarningsDBGREC<WDBG_ERROR> = '' ;* ErrorsDBGREC<WDBG_LINT> = '' ;* LintIF RESPONSE<1> = "700 WDB-START" THEN  RESPONSE = DELETE(RESPONSE, 1)END ELSE  TAG = @AM:"700 WDB-START":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '700 WDB-START tag is missing from response'    LINT.BEFORE = RESPONSE    RESPONSE = ''  END ELSE    IF TAG.POS >= 1 THEN      LINT.BEFORE = RESPONSE[1, TAG.POS - 1]      RESPONSE = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    END  ENDENDN = DCOUNT(RESPONSE, @AM)IF RESPONSE<N> = "800 WDB-COMPLETE" THEN  RESPONSE = DELETE(RESPONSE, N)END ELSE  TAG = @AM:"800 WDB-COMPLETE":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '800 WDB-COMPLETE tag missing from response!'  END ELSE    LINT.AFTER = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    RESPONSE = RESPONSE[1, TAG.POS - 1]  ENDEND* Clean up lintIF TRIM(CHANGE(LINT.BEFORE, @AM, '')) = '' THEN LINT.BEFORE = ''IF TRIM(CHANGE(LINT.AFTER, @AM, '')) = '' THEN LINT.AFTER = ''IF LINT.BEFORE <> '' OR LINT.AFTER <> '' THEN  LINT = LINT.BEFORE  IF LINT.BEFORE <> '' AND LINT.AFTER <> '' THEN LINT := @AM:'...':@AM  LINT := LINT.AFTER  DBGREC<WDBG_LINT> = LOWER(LINT)END* Parse the response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''DBGREC<WDBG_RESPONSE_CONTENT> = ''NUM.VARS = 0STATUS.CODE = ''EOH = INDEX(RESPONSE, @AM:@AM, 1) ;* headers end at first blank line in responseIF EOH = 0 THEN EOH = LEN(RESPONSE) + 1N = DCOUNT(RESPONSE[1, EOH - 1], @AM)FOR I = 1 TO N  HDR.LINE = RESPONSE<I>  IF HDR.LINE[1,10] = '500 ERROR ' THEN    ERR = HDR.LINE[11, LEN(HDR.LINE)]    IF STATUS.CODE = '' THEN STATUS.CODE = 500  END ELSE    HDR.VAR = FIELD(HDR.LINE, ':', 1)    HDR.VAL = TRIMF(HDR.LINE[COL2() + 1, LEN(HDR.LINE)])    M = LEN(HDR.VAR)    FOR J = 1 TO M      IF NOT(HDR.VAR[J,1] MATCHES '1A') AND HDR.VAR[J,1] <> '-' THEN        HDR.VAR = ''        EXIT      END    NEXT J    IF HDR.LINE[LEN(HDR.VAR) + 1, 1] <> ':' THEN HDR.VAR = ''    IF HDR.VAR = '' THEN      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = '_BAD_'      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.LINE ;* invalid header line!    END ELSE      IF HDR.VAR = 'X-MVDB-STATUS' THEN        STATUS.CODE = HDR.VAL      END ELSE        NUM.VARS += 1        DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = HDR.VAR        DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.VAL      END    END  ENDNEXT IIF STATUS.CODE = '' THEN STATUS.CODE = 200DBGREC<WDBG_STATUS> = STATUS.CODE* save response contentIF EOH + 2 <= LEN(RESPONSE) THEN  DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(RESPONSE[EOH + 2, LEN(RESPONSE)])ENDDBGREC<WDBG_WARNING> = WARNDBGREC<WDBG_ERROR> = ERRRETURN**----------to.edit:*----------*EDIT.REC = ''EDIT.REC<-1> = '[INFO] (do not edit this section)'EDIT.REC<-1> = 'Date            = ':OCONV(DBGREC<WDBG_DATE>,'D4')EDIT.REC<-1> = 'Time            = ':OCONV(DBGREC<WDBG_TIME>,'MTS')EDIT.REC<-1> = 'Duration        = ':DBGREC<WDBG_DURATION>EDIT.REC<-1> = 'Port            = ':DBGREC<WDBG_PORT>EDIT.REC<-1> = 'Handler         = ':DBGREC<WDBG_HANDLER>EDIT.REC<-1> = 'Resource        = ':DBGREC<WDBG_RESOURCE>EDIT.REC<-1> = 'Controller      = ':DBGREC<WDBG_CONTROLLER>EDIT.REC<-1> = 'Program         = ':DBGREC<WDBG_PROGRAM>EDIT.REC<-1> = 'RequestID       = ':DBGREC<WDBG_REQUEST_ID>EDIT.REC<-1> = 'Method          = ':DBGREC<WDBG_METHOD>EDIT.REC<-1> = 'Path            = ':DBGREC<WDBG_PATH>EDIT.REC<-1> = 'RemoteAddr      = ':DBGREC<WDBG_REMOTE_ADDR>EDIT.REC<-1> = 'Status          = ':DBGREC<WDBG_STATUS>IF DBGREC<WDBG_WARNING> <> '' THEN  EDIT.REC<-1> = 'WARNING: ':DBGREC<WDBG_WARNING>ENDIF DBGREC<WDBG_ERROR> <> '' THEN  EDIT.REC<-1> = 'ERROR: ':DBGREC<WDBG_ERROR>ENDIF DBGREC<WDBG_LINT> <> '' THEN  EDIT.REC<-1> = 'LINT:':@AM:RAISE(DBGREC<WDBG_LINT>)END* Request headers and server variablesEDIT.REC<-1> = @AM:'[HEADERS]'N = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  HDR.VAL = DBGREC<WDBG_HEADER_VALS, I>  EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VALNEXT I* Query string variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[VARS]'  FOR I = 1 TO N    CGI.VAR = DBGREC<WDBG_CGI_VARS, I>    CGI.VAL = DBGREC<WDBG_CGI_VALS, I>    EDIT.REC<-1> = CGI.VAR:SPACE(16-LEN(CGI.VAR)):'= ':CGI.VAL  NEXT IEND* CookiesLOCATE 'HTTP_COOKIE' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  CSTRING = DBGREC<WDBG_HEADER_VALS, POS>END ELSE CSTRING = ''CONVERT ';' TO @AM IN CSTRINGN = DCOUNT(CSTRING, @AM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[COOKIES]'  FOR I = 1 TO N    COOKIE.VAR = TRIM(FIELD(CSTRING<I>, '=', 1))    COOKIE.VAL = CSTRING<I>[COL2() + 1, 99999]    EDIT.REC<-1> = COOKIE.VAR:SPACE(16-LEN(COOKIE.VAR)):'= ':COOKIE.VAL  NEXT IEND* REST parametersLOCATE 'PATH_INFO' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  PATH = DBGREC<WDBG_HEADER_VALS, POS>END ELSE PATH = ''IF PATH[1,1] = '/' THEN PATH = PATH[2,9999]N = DCOUNT(PATH, '/')IF N > 0 THEN  EDIT.REC<-1> = @AM:'[PARAMS]'  FOR I = 3 TO N    PARAM.VAR = 'Param[':(I-2):']'    EDIT.REC<-1> = PARAM.VAR:SPACE(16-LEN(PARAM.VAR)):'= ':FIELD(PATH, '/', I)  NEXT IEND* Session variablesIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    N = DCOUNT(DBGREC<WDBG_SESSION_VARS>, @VM)    IF N > 0 THEN      EDIT.REC<-1> = @AM:'[SESSION]'      EDIT.REC<-1> = '_SessionID      = ':SESSION.ID      IF DBGREC<WDBG_SESSION_DATE> <> '' THEN EDIT.REC<-1> = '_Date           = ':OCONV(DBGREC<20>, 'D4')      IF DBGREC<WDBG_SESSION_TIME> <> '' THEN EDIT.REC<-1> = '_Time           = ':OCONV(DBGREC<21>, 'MTS')      FOR I = 1 TO N        SESSION.VAR = DBGREC<WDBG_SESSION_VARS, I>        EDIT.REC<-1> = SESSION.VAR:SPACE(16-LEN(SESSION.VAR)):'= ':DBGREC<WDBG_SESSION_VALS, I>      NEXT I    END  ENDEND* Request bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  EDIT.REC<-1> = @AM:'[BODY]':@AM:RAISE(THE.BODY)END* Response headersN = DCOUNT(DBGREC<WDBG_RESPONSE_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[RESPONSE_HEADERS]'  FOR I = 1 TO N    HDR.VAR = DBGREC<WDBG_RESPONSE_VARS, I>    HDR.VAL = DBGREC<WDBG_RESPONSE_VALS, I>    EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VAL  NEXT IEND* Response contentTHE.CONTENT = DBGREC<WDBG_RESPONSE_CONTENT>IF THE.CONTENT <> '' THEN  EDIT.REC<-1> = @AM:'[RESPONSE_CONTENT]':@AM:RAISE(THE.CONTENT)END*RETURN**----------from.edit:*----------*SESSION.ID = ''HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* If COOKIES section exists, rebuild HTTP_COOKIE headerCOOKIES = ''SECT = 'COOKIES'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    COOKIE = EDIT.REC<I>    IF COOKIE <> '' THEN      COOKIE.NAME = TRIM(FIELD(COOKIE, '=', 1))      COOKIE.VAL = TRIMF(COOKIE[COL2() + 1, LEN(COOKIE)])      COOKIES := COOKIE.NAME:'=':COOKIE.VAL:';'      IF OCONV(COOKIE.NAME, 'MCU') = 'SESSIONID' THEN SESSION.ID = COOKIE.VAL    END  NEXT I  IF COOKIES[LEN(COOKIES), 1] = ';' THEN COOKIES = COOKIES[1, LEN(COOKIES) - 1]END* If PARAMS section exists, rebuild PATH_INFO headerPARAMS = ''SECT = 'PARAMS'GOSUB find.sectionIF SECT.START > 0 THEN  PNUM = 1  FOR I = SECT.START + 1 TO SECT.END    PARAM = EDIT.REC<I>    IF PARAM <> '' THEN      PARAM.NAME = TRIM(OCONV(FIELD(PARAM, '=', 1), 'MCU'))      PARAM.VAL = TRIMF(PARAM[COL2() + 1, LEN(PARAM)])      IF PARAM.NAME <> 'PARAM[':PNUM:']' THEN EXIT      PARAMS := '/':PARAM.VAL      PNUM += 1    END  NEXT I  IF PARAMS <> '' THEN PARAMS = '/':HANDLER.NAME:'/':RESOURCE.NAME:PARAMS ;* handler & resource come before paramsEND* Get headers and server variablesDBGREC<WDBG_HEADER_VARS> = ''DBGREC<WDBG_HEADER_VALS> = ''NUM.VARS = 0SECT = 'HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])* check for special headers      BEGIN CASE        CASE OCONV(VAR.NAME, 'MCU') = 'HTTP_COOKIE'          IF COOKIES <> '' THEN            VAR.VAL = COOKIES          END        CASE OCONV(VAR.NAME, 'MCU') = 'PATH_INFO'          IF PARAMS <> '' THEN            VAR.VAL = PARAMS          END          IF VAR.VAL[1,1] <> '/' THEN VAR.VAL = '/' : VAR.VAL          IF COUNT(VAR.VAL, '/') >= 2 THEN            HANDLER.NAME = FIELD(VAR.VAL, '/', 2)            RESOURCE.NAME = FIELD(VAR.VAL, '/', 3)          END          DBGREC<WDBG_PATH> = VAR.VAL        CASE OCONV(VAR.NAME, 'MCU') = 'REQUEST_METHOD'          DBGREC<WDBG_METHOD> = VAR.VAL              CASE OCONV(VAR.NAME, 'MCU') = 'REMOTE_ADDR'          DBGREC<WDBG_REMOTE_ADDR> = VAR.VAL      END CASE      NUM.VARS += 1      DBGREC<WDBG_HEADER_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_HEADER_VALS, NUM.VARS> = VAR.VAL    END  NEXT I  DBGREC<WDBG_HANDLER> = HANDLER.NAME  DBGREC<WDBG_RESOURCE> = RESOURCE.NAMEEND* Get form variablesDBGREC<WDBG_CGI_VARS> = ''DBGREC<WDBG_CGI_VALS> = ''NUM.VARS = 0SECT = 'VARS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_CGI_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_CGI_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get bodyDBGREC<WDBG_BODY> = ''SECT = 'BODY'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.BODY = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_BODY> = LOWER(THE.BODY)  ENDEND* Get session stateIF SESSION.FLAG AND SESSION.ID <> '' THEN  DBGREC<WDBG_SESSION_ID> = ''  DBGREC<WDBG_SESSION_VARS> = ''  DBGREC<WDBG_SESSION_VALS> = ''  DBGREC<WDBG_SESSION_DATE> = ''  DBGREC<WDBG_SESSION_TIME> = ''  NUM.VARS = 0  SECT = 'SESSION'  GOSUB find.section  IF SECT.START > 0 THEN    FOR I = SECT.START + 1 TO SECT.END      SESSION.LINE = EDIT.REC<I>      SESSION.VAR = TRIM(FIELD(SESSION.LINE, '=', 1))      SESSION.VAL = TRIMF(SESSION.LINE[COL2() + 1, LEN(SESSION.LINE)])      BEGIN CASE        CASE SESSION.VAR = '_SessionID'          DBGREC<WDBG_SESSION_ID> = SESSION.VAL        CASE SESSION.VAR = '_Date'          DBGREC<WDBG_SESSION_DATE> = ICONV(SESSION.VAL, 'D')        CASE SESSION.VAR = '_Time'          DBGREC<WDBG_SESSION_TIME> = ICONV(SESSION.VAL, 'MTS')        CASE 1          NUM.VARS += 1          DBGREC<WDBG_SESSION_VARS, NUM.VARS> = SESSION.VAR          DBGREC<WDBG_SESSION_VALS, NUM.VARS> = SESSION.VAL      END CASE    NEXT I  ENDEND* Get response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''NUM.VARS = 0SECT = 'RESPONSE_HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get response contentDBGREC<WDBG_RESPONSE_CONTENT> = ''SECT = 'RESPONSE_CONTENT'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.CONTENT = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(THE.CONTENT)  ENDENDRETURN**----------choose.editor:*----------*PRINTLOOP  PRINT 'Select the editor you want to use: 1 = ED, 2 = other: ':  INPUT ANSUNTIL ANS EQ '' DO  BEGIN CASE    CASE ANS = 1      EDITOR = 'ED'      EXIT    CASE ANS = 2      PRINT 'Enter the verb to invoke your editor: ':      INPUT TMP      PRINT TMP:' OK?':      INPUT ANS      ANS = OCONV(ANS[1,1], 'MCU')      IF ANS = 'Y' THEN        EDITOR = TMP        EXIT      END  END CASEREPEATRETURN**----------find.section:*----------*SECT.START = -1SECT.END = -1TAG = @AM:'[':SECT:']':@AMTAG.POS = INDEX(EDIT.REC, TAG, 1)IF TAG.POS = 0 THEN RETURN ;* Section not foundSECT.START = DCOUNT(EDIT.REC[1, TAG.POS], @AM)SECT.END = DCOUNT(EDIT.REC, @AM)FOR I = SECT.START + 1 TO SECT.END  SECT.LN = EDIT.REC<I>  IF SECT.LN MATCHES '"["1A0A"]"' OR SECT.LN MATCHES '"["1A0A"_"1A0A"]"' THEN* beginning of next section is end of current section    SECT.END = I - 1    EXIT  ENDNEXT IRETURN**----------url.encode:*----------*NEW.STRING = ""UE.LEN = LEN(URLENCODE.STRING)FOR UEX = 1 TO UE.LEN  UE.CHR = URLENCODE.STRING[UEX,1]  UE.CVAL = SEQ(UE.CHR)  BEGIN CASE    CASE UE.CVAL < 32; ENC.FLAG = 1   ;* control character    CASE UE.CVAL = 37 OR UE.CVAL = 38 OR UE.CVAL = 43 OR UE.CVAL = 61; ENC.FLAG = 1 ;* % & + =    CASE UE.CVAL = 127; ENC.FLAG = 1  ;* DEL control character    CASE UE.CVAL >= 252; ENC.FLAG = 1 ;* delimiter character    CASE 1 ; ENC.FLAG = 0  END CASE  IF ENC.FLAG THEN    UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')  END  NEW.STRING := UE.CHRNEXT UEXRETURN*END000210WSETINFO0c2SUBROUTINE WSETINFO(InfoVal, InfoItem)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: November 2017* Description: set an element in WWW.INFO***********************************************************************INCLUDE WBPD WWW.INCLUDEIF NUM(InfoItem) AND InfoItem > 0 AND InfoItem <= 50 THEN IF INT(InfoItem) = InfoItem THEN  WWW.INFO(InfoItem) = InfoVal ENDENDRETURNEND00041DWSETCOOKIE0c2SUBROUTINE WSETCOOKIE(COOKIENAME,COOKIEVAR,D,T,PATH,DOMAIN,SECURE)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine sets the value of a cookie.*              **********************************************************************INCLUDE WBPD WWW.INCLUDECOOKIE = COOKIENAME:'=':COOKIEVAR* FIGURE OUT EXPIRATIONIF D # '' THEN  EXPIRES='expires='  DAY=OCONV(D,'DWA')[1,3]  DAY=OCONV(DAY,'MCT')  EXPIRES:=DAY  EXPIRES:=', '  EXPIRES:=OCONV(D,'DD')  EXPIRES:=' '  MONTH=OCONV(D,'DMA')[1,3]  MONTH=OCONV(MONTH,'MCT')  EXPIRES:=MONTH  EXPIRES:=' '  EXPIRES:=OCONV(D,'DY')  EXPIRES:=' '  EXPIRES:=OCONV(T,'MTS')  COOKIE:=';':EXPIRESENDIF PATH # '' THEN  COOKIE:=';path="':PATH:'"'ENDIF DOMAIN # '' THEN  COOKIE:=';domain=':DOMAINENDIF SECURE # '' THEN  COOKIE:=';secure'ENDIF TRIM(COOKIE) # '' THEN  SESSION$COOKIES<-1>=COOKIEENDRETURNEND00022DWGETHEADER0c2SUBROUTINE WGETHEADER(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: extract value of an HTTP request header***********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''TEMPVARS = OCONV(CGI$HEADERVARS, 'MCU')LOCATE OCONV(VarName, 'MCU') IN TEMPVARS SETTING POS THEN  VarValue = CGI$HEADERVALS<POS>ENDRETURNEND00019EWGETBODY0c2SUBROUTINE WGETBODY(RequestBody)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: March 2017* Description: return the BODY of the request***********************************************************************INCLUDE WBPD WWW.INCLUDERequestBody = CGI$BODYRETURNEND0001F3WFLUSH0c2SUBROUTINE WFLUSH************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This program calls WSETBUFFER(FALSE) then *                calls WSEND("")*              **********************************************************************INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*CALL WSETBUFFER(FALSE)CALL WSEND("")RETURNEND001E65WRESTTEST0c2PROGRAM WRESTTEST************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 01/31/2017* Description: this is a simple REST test***********************************************************************INCLUDE WBPD WWW.INFORESTVERSION = "1.1"JSTATUS = 'ok'JSTATUSMSG = ''** Supplied function for setting content type.*CALL WSETCONTENTTYPE("application/json")*** Set a custom header with supplied function.*CALL WSETHEADER("restversion",RESTVERSION)** Start building our json object, ugly way until objects.*JSON = '{'** Need to know all the variables*CALL WGETINFO(VARS,CGI_VARS)CALL WGETINFO(VALS,CGI_VALS)** Need to know all the headers*CALL WGETINFO(HEADERVARS,CGI_HEADERVARS)CALL WGETINFO(HEADERVALS,CGI_HEADERVALS)** Set our rest version, this will be replaced in the future with objects*CALL WBUILDJSON(JSON,"RestVersion",RESTVERSION,RERR)** WHO*EXECUTE 'WHO' CAPTURING WRESULTCALL WBUILDJSON(JSON,'Who',WRESULT<1,1,1>,RERR)** HOSTNAME**EXECUTE 'hostname' CAPTURING HOSTNAME*CALL WBUILDJSON(JSON,'hostname',HOSTNAME<1,1,1>,RERR)** IFCONFIG**EXECUTE 'ifconfig' CAPTURING RESULT*GOSUB exportresult*JSON:=', "ifconfig": ':R** PWD*EXECUTE '!pwd' CAPTURING PWDCALL WBUILDJSON(JSON,'pwd',PWD,RERR)** PS**EXECUTE 'ps' CAPTURING RESULT*GOSUB exportresult*JSON:=', "ps": ':R*CALL WBUILDJSON(JSON,'ps',PSRESULT,RERR)** JSHOW**EXECUTE 'jshow -v WRESTTEST' CAPTURING RESULT*GOSUB exportresult*JSON := ', "wresttest": ':R** Build out vars, we have to build a subobject and manually* put it into our main json object.* Right now the primary function of WBUILDJSON is to properly* encode the variable section.*JSONVARS = '{'FOR X = 1 TO DCOUNT(VARS, @AM)    * Lets test our WGETVAR routine    VARNAME = VARS<X>    *    * WGETVAR is our customer supplied function to get variables    * usually sent by browser as form variables, either in the body    * or in the URL query string.    *    CALL WGETVAR(THISVAR,VARNAME)    CALL WBUILDJSON(JSONVARS,VARNAME,THISVAR,RERR)NEXT XJSONVARS := '}'** Here is our messy add, todo is to adjust WBUILDJSON to be able* to do this.*JSON := ', "vars": ':JSONVARS** Get all our cookies*CALL WGETINFO(CVARS,CGI_CVARS)CALL WGETINFO(CVALS,CGI_CVALS)COOKIES = '{'NUM_COOKIES = DCOUNT(CVARS,@AM)FOR A = 1 TO NUM_COOKIES    COOKIENAME = CVARS<A>    *    * This is our customer supplied function to get cookies.    *    CALL WGETCOOKIE(COOKIEVALUE,COOKIENAME)    CALL WBUILDJSON(COOKIES,COOKIENAME,COOKIEVALUE,RERR)NEXT ACOOKIES := '}'JSON := ', "cookies": ':COOKIES** Build out headers*JSONHEADERS = '{'numheaders = DCOUNT(HEADERVARS, @AM)FOR X = 1 TO numheaders    HEADERNAME = HEADERVARS<X>    *    * This is our customer supplied function to get headers.    *    CALL WGETHEADER(THISVAR,HEADERNAME)    CALL WBUILDJSON(JSONHEADERS,HEADERNAME,THISVAR,RERR)NEXT XJSONHEADERS := '}'JSON := ', "headers": ':JSONHEADERS** This is where the raw body is put, this is used primarily for* AJAX functions where the body should be a json string.*CALL WGETBODY(BODY)CALL WBUILDJSON(JSON,'body',BODY,RERR)** Set our test cookie*COOKIE.NAME = 'wresttestcookie'COOKIE.VALUE = TIMEDATE()CONVERT ' :' TO '' IN COOKIE.VALUE** Our function for setting a cookie.  Hides all the formatting requirements* and correctly sets expiration date/time using PICK dates and times.** CALL WSETCOOKIE(NAME,VALUE,EXPDATE,EXPTIME,DOMAIN,PATH,SECURE)*CALL WSETCOOKIE(COOKIE.NAME,COOKIE.VALUE,DATE()+1,TIME()+300,'','','')** Now lets process our command requests** This section allows this REST request to perform some functions** Format is* ...api/wresttest/<key>/<command>/<opt1>/<opt2>/<opt3>/etc** key = basically a password and stored in the config file* command = a command to execute, leaving blank does the same as help* opt# = options that the commands would use** Remember that for us, key is the first REAL param, command is 2, opt# is 3 on*CALL WGETPARAM(REQKEY,1)IF REQKEY = '' THEN GOTO end.of.program; * no key then ignore** Function to get our options already broken out.*CALL WGETCONFIG(APIKEY,'APIKEY')IF APIKEY = '' THEN    *    * The way I like to handle errors, see end of program right before stop    *    JSTATUS = 'error'    JSTATUSMSG = 'No api key setup in WDB.RESOURCE'    GOTO end.of.programENDIF OCONV(APIKEY,'MX0C') # OCONV(REQKEY,'MX0C') THEN ;*UV*    JSTATUS = 'error'    JSTATUSMSG = 'Invalid api key'    GOTO end.of.programENDGOSUB processrest*end.of.program: *** Build our default status/result*CALL WBUILDJSON(JSON,'status',JSTATUS,RERR)CALL WBUILDJSON(JSON,'statusmsg',JSTATUSMSG,ERR)** Close out our object*JSON := '}'** Send string json to the client. This can be done anytime and multiple times.*CALL WSEND(JSON)*STOP*processrest: *** Build new object to store rest responses*RJSON = '{'** Get our command*CALL WGETPARAM(COMMAND,2)COMMAND = OCONV(COMMAND,'MCU')** Respond in REST response our requested command, nice for debugging*CALL WBUILDJSON(RJSON,'requestedcommand',COMMAND,RERR)** Now process our commands*BEGIN CASE    CASE COMMAND = 'DEBUGON'        CALL WGETPARAM(DEBUGLINE,3)        IF DEBUGLINE = '' OR NOT(NUM(DEBUGLINE)) THEN            JSTATUS = 'error'            JSTATUSMSG = 'You must put in a debug option as next paramater'        END ELSE            JSTATUSMSG = 'Setting debug to on for ':DEBUGLINE            CALL WSETCOOKIE('wrestapidebug',DEBUGLINE,DATE()+1,TIME()+300,'','',' ')        END    CASE COMMAND = 'DEBUGOFF'        CALL WSETCOOKIE('wrestapidebug','',DATE()-1,TIME(),'','','')    CASE COMMAND = 'ENV'        * Get environment variables        EXECUTE '!env' CAPTURING ENVIRONMENT        *        * New object to store response        *        J = '{'        NUMENV = DCOUNT(ENVIRONMENT,@AM)        FOR A = 1 TO NUMENV            ENV = ENVIRONMENT<A>            ENV.NAME = FIELD(ENV,'=',1)            ENV.VALUE = FIELD(ENV,'=',2,9999)            IF TRIM(ENV.NAME) # '' THEN                CALL WBUILDJSON(J,ENV.NAME,ENV.VALUE,RERR)            END        NEXT A        J := '}'        RJSON := ', "environment": ':J    CASE COMMAND = 'USERS'        EXECUTE 'LISTU' CAPTURING RESULT        GOSUB exportresult        RJSON := ', "users": ':R    *CASE COMMAND = 'JSHOW'        *CALL WGETPARAM(OPTN,3)        *CMND = 'jshow -v ':OPTN        *EXECUTE CMND CAPTURING RESULT        *GOSUB exportresult        *RJSON := ', "jshow": ':R    *CASE COMMAND = 'JLICENSINGINFO'        *EXECUTE 'JLICENSINGINFO' CAPTURING RESULT        *GOSUB exportresult        *RJSON := ', "jlicensinginfo": ':R    CASE 1; * DO HELP        C = '{'        CALL WBUILDJSON(C,'help','List all commands',RERR)        CALL WBUILDJSON(C,'debugon','Turn debug on, next param is line no',RERR)        CALL WBUILDJSON(C,'debugoff','Turn off debugging',RERR)        *CALL WBUILDJSON(C,'listweberrors','Lists web errors',RERR)        CALL WBUILDJSON(C,'env','List Environment Variables',RERR)        CALL WBUILDJSON(C,'users','List users',RERR)        *CALL WBUILDJSON(C,'jshow','Issue jshow, next param is program/file',RERR )        *CALL WBUILDJSON(C,'jlicensinginfo','Licensing information',RERR)        C := '}'        RJSON := ', "commands": ':CEND CASERJSON := '}'JSON := ', "rest": ':RJSONRETURN*exportresult: *NUM.LINES = DCOUNT(RESULT,@AM)R= '[ 'FOR XX = 1 TO NUM.LINES    LINE = RESULT<XX>    CALL WSWAP(LINE,CHAR(9),'     ')    CALL WENCODEJSON('',LINE,OUTLINE)    IF XX > 1 THEN R := ','    R := '"':OUTLINE:'"'NEXT XXR := ']'RETURN*END0002E8WBUILDJSON0c2SUBROUTINE WBUILDJSON(JSONSTRING,NAME,VALUE,RETURNERROR)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 8/13/2016* Description: build json string***********************************************************************RETURNERROR=''*CALL FIX.ESCAPE.DATA.JSON('\',NAME,OUT_NAME)*CALL FIX.ESCAPE.DATA.JSON('\',VALUE,OUT_VALUE)CALL WENCODEJSON('',NAME,OUT_NAME)CALL WENCODEJSON('',VALUE,OUT_VALUE)TEMP_STRING='"':OUT_NAME:'":"':OUT_VALUE:'"'L=LEN(JSONSTRING)LAST_C=JSONSTRING[L,1]IF LAST_C = "}" OR LAST_C='"' OR LAST_C = "]" THEN TEMP_STRING=', ':TEMP_STRINGJSONSTRING:=TEMP_STRINGRETURNEND00198FWSEND0c2SUBROUTINE WSEND(FORM)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Original Author: Luke J. Bucklin, Sierra Bravo* Date: 2/29/00* Modified By  : Mike Schmidt, Sierra Bravo* Modified By  : Peter Schellenbach & Patrick Payne, Zumasys* Purpose: Send the web page.* Forked off new version as WSEND for REST services based on original WEB.SEND** Modified by Peter Schellenbach 09-21-2017*  Removed extra @AM appended to the content to prevent extra CR from being sent in response** Modified by Peter Schellenbach 10-18-2017*  Removed duplicate debug info being sent in html or xml output. Removed logging*  code as this is handled by WDB.INIT / JAGENTWDBINIT when saving debug info.** Modified by Patrick Payne 04-29-2020*  Issue #5.  HTTP wants new lines to be CHAR(13):CHAR(10).  We cannot depend on*  pick PRINT statements to output the new line since one linux it will only do*  char(10).  All output statements are updated to*  PRINT <DATA>:NEW.LINE:    where new.line=CHAR(13):CHAR(1)*************************************************************************                1) Header Management: This program will check to see*                   if the content type has been written to the browser*                   before ever printing anything to standard out.  If*                   the headers have not been sent, the program will print*                   the headers using the SESSION$CONTENT.TYPE,*                   SESSION$HEADERS, and SESSION$COOKIES session variables.*                   The program will then set the SESSION$CONTENT.SENT*                   variable.*                   WARNING: This program assumes that the global SESSION*                   variables were setup prior to using this subroutine.*                   WARNING: The SESSION$OUTBUF.SIZE should not be relied*                   upon to prevent the buffer from exceeding the set limit.*                   This program simply flushes the buffer if it exceeds*                   the set size limit.**                2) Buffer Management: Instead of always printing every*                   thing to standard out, by default the program will*                   write everything passed into into the SESSION$OUTBUF*                   variable.  This program will then flush the buffer*                   under certain situations.  The first is if the buffer*                   size reaches the limit set in SESSION$OUTBUF.SIZE. If*                   this happens the prgram will flush the buffer then*                   reinitialize it.  The second is if the SESSION$OUTBUF.FLAG*                   is set to FALSE, then this program will always flush*                   the buffer.**                3) The program will display debug information if the global*                   variable SESSION$GLOBAL.DEBUG flag is >= 3.************************************************************************* Add the incoming string to the buffer.INCLUDE WBPD WWW.INCLUDE*NEW.LINE = CHAR(13):CHAR(10); * We need to force this as a new lineSHOW.SESSION.VARS = 0IF SESSION$GLOBAL.DEBUG >= 3 THEN  OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SHOW.SESSION.VARS = 1END*IF FORM <> '' THEN  CALL WSWAP(FORM,'<!-- CGI$PATH -->',CGI$PATH)*PJS 09-21-2017*SESSION$OUTBUF := FORM:@AM  SESSION$OUTBUF := FORM ; *PJS 09-21-2017*END** If the buffer is greater then the max size or the buffer flag is false then flush.IF LEN(SESSION$OUTBUF) >= SESSION$OUTBUF.SIZE OR NOT(SESSION$OUTBUF.FLAG) THEN* Before flushing, check to see if the headers have been send.  IF NOT(SESSION$CONTENT.SENT) THEN    IF SESSION$STATUS.CODE > 0 THEN* 04-21-17 send the status code before headers      PRINT "X-MVDB-STATUS: ":SESSION$STATUS.CODE:NEW.LINE:    END* The headers have not been sent so send them now.    IF SESSION$CONTENT.TYPE = "" THEN      CALL WSETCONTENTTYPE("application/json")    END* If there are any cookies that need to be set, do it now.    PRINT "Content-type: ":SESSION$CONTENT.TYPE:NEW.LINE:* If there are any cookies that need to be set, do it now.    FOR I = 1 TO DCOUNT(SESSION$COOKIES, @AM)      COOKIE = SESSION$COOKIES<I>      IF INDEX(COOKIE, "; path=", 1) + INDEX(COOKIE, ";path=", 1) = 0 THEN COOKIE := "; path=/"      PRINT "Set-Cookie: ":COOKIE:NEW.LINE:    NEXT I* If there are any additional headers that need to be set, do it now.    PRINT 'Cache-Control: no-cache'    FOR I = 1 TO DCOUNT(SESSION$HEADERS, @AM)      PRINT SESSION$HEADERS<I>:NEW.LINE:    NEXT I* Now print the blank line that ends the headers.    PRINT    IF INDEX(SESSION$CONTENT.TYPE,'html',1) THEN      IF INDEX(SESSION$OUTBUF<1>,'<!DOCTYPE',1) = 0 THEN        PRINT '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"':NEW.LINE:        PRINT '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">':NEW.LINE:      END    END* Set the SESSION$CONTENT.SENT variable so next time we know not to send the headers.    SESSION$CONTENT.SENT = 1* From this point on, do not buffer.    IF SESSION$OUTBUF.FLAG THEN      CALL WSETBUFFER(0)    END  END  LINE.CNT = DCOUNT(SESSION$OUTBUF, @AM)  FOR LINE.J = 1 TO LINE.CNT    PRINT SESSION$OUTBUF<LINE.J>:NEW.LINE:  NEXT LINE.J  IF SESSION$GLOBAL.DEBUG >= 3 THEN    IF INDEX(SESSION$CONTENT.TYPE,'xml',1) OR INDEX(SESSION$CONTENT.TYPE,'html',1) THEN* If the debug flag is set then dump all the session information to the browser.      PRINT '<!-- Debug Information generated by WEB.SEND.  This feature can be turned off by':NEW.LINE:      PRINT '     setting the SESSION$GLOBAL.DEBUG = "1" in the initalization program     -->':NEW.LINE:      PRINT '<!-- START DEBUG OUPUT ':NEW.LINE:      PRINT '     GET AND POST VARS:':NEW.LINE:      FOR I = 1 TO DCOUNT(CGI$VARS, @AM)        PRINT '     ':CGI$VARS<I>:' = ':CGI$VALS<I>:NEW.LINE:      NEXT I      PRINT      IF SHOW.SESSION.VARS THEN        PRINT '    SESSION VARIABLES:':NEW.LINE:        PRINT '    SESSION$ID = ':SESSION$ID:NEW.LINE:        READ REC FROM F.WEB.SESSION, SESSION$ID THEN          PRINT '    SESSION DATE = ':OCONV(REC<3>,'D4/'):NEW.LINE:          PRINT '    SESSION TIME = ':OCONV(REC<4>,'MTS,'):NEW.LINE:          FOR I = 1 TO DCOUNT(REC<1>, @VM)            PRINT '    ':REC<1,I>:' = ':REC<2,I>:NEW.LINE:          NEXT I        END      END      PRINT '    END DEBUG OUTPUT -->':NEW.LINE:      PRINT NEW.LINE:    END  END  SESSION$OUTBUF = ''ENDRETURNEND0014E9WPARSEJSON0c2SUBROUTINE WPARSEJSON(JSON_STRING,JSON_REQUEST,JSON_RESULT,JSON_ERRORS)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 8/13/2016* Description: this is to be a simple json parser, it will not be high performance!!************************************************************************* COMMAND WILL BE QM STYLE** object or #/object or #/object or #** lets do this VERY ugly, we know what we are looking for should be in the format* "key":  or "key" :*JSON_ERRORS=''JSON_RESULT=''MAX_LENGTH=LEN(JSON_STRING)FIRST_KEY=FIELD(JSON_REQUEST,'/',1); * WE CAN ONLY DO SINGLE DEPTH ON THIS VERSIONIF FIRST_KEY[1,1]='[' THEN  GOSUB getobject  RETURNENDSEARCH_STRING1='"':FIRST_KEY:'":'SEARCH_STRING2='"':FIRST_KEY:'" :'POS=INDEX(JSON_STRING,SEARCH_STRING1,1)IF NOT(POS) THEN  POS=INDEX(JSON_STRING,SEARCH_STRING2,1)ENDIF NOT(POS) THEN  JSON_ERRORS=-1  JSON_ERRORS<2>='COULD NOT FIND KEY ':FIRST_KEY  PRINT 'ERROR'  RETURNENDTEMP_DATA=JSON_STRING[POS,MAX_LENGTH]*PRINT 'TEMP_DATA=':TEMP_DATA* NOW LETS CHOP TO OUR FIRST :POS2=INDEX(TEMP_DATA,':',1)TEMP_DATA=TEMP_DATA[POS2+1,MAX_LENGTH]* NOT SURE IF WE HAVE TO DEAL WITH DATA BEING NOT IN QUOTES, TO MAKE SURE WE ARE GOING TO INSPECT THE NEXT TWO POSITIONS* AND MAKE SURE*PRINT 'TEMP_DATA=':TEMP_DATATEMP_DATA=TRIM(TEMP_DATA,' ','L')BEGIN CASE  CASE TEMP_DATA[1,1] = '"' OR TEMP_DATA[2,1] = '"'* QUOTES    TEMP_DATA=FIELD(TEMP_DATA,'"',2,9999)*PRINT 'TEMP_DATA=':TEMP_DATA* WE CANNOT RELY ON IT JUST BEING THE NEXT QUOTE DUE TO ESCAPING !!@#$#$    LEN_STRING=LEN(TEMP_DATA)    FOUND_QUOTE=0    LAST_C=''    FOR X=1 TO LEN_STRING UNTIL FOUND_QUOTE      C=TEMP_DATA[X,1]      NEXTC=TEMP_DATA[X+1,1]*PRINT 'C=':C:' NEXT_C=':NEXT_C      IF C='\' AND NEXTC='"' THEN        JSON_RESULT:='"'        X+=1        CONTINUE      END      IF C='"' THEN        FOUND_QUOTE=1        EXIT      END ELSE        JSON_RESULT:=C*PRINT 'JSON_RESULT=':JSON_RESULT      END      IF X > LEN_STRING THEN FOUND_QUOTE=1    NEXT X  CASE TEMP_DATA[1,1]='[' OR TEMP_DATA[2,1]='['; * WE ARE PULLING AN ARRAY.  THIS IS VERY MESSY.  IT CAN ONLY HANDLE A SINGLE ARRAY. ANY MORE NESTING AND WE ARE BROKE* WE NEED TO LOOP UNTIL WE SEE THE NEXT ] THAT IS NOT IS A INSIDE QUOTES    LEN$STRING=LEN(TEMP_DATA)    FOUND$BRACKET=0    LAST$C=''    INSIDE$QUOTES=0    FOR X=1 TO LEN$STRING UNTIL FOUND$BRACKET      C=TEMP_DATA[X,1]      BEGIN CASE        CASE C=']' AND NOT(INSIDE$QUOTES); FOUND$BRACKET=1        CASE C='"' AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C="'" AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C='"'; INSIDE$QUOTES=1        CASE C="'"; INSIDE$QUOTES=1      END CASE      JSON_RESULT:=C    NEXT X  CASE TEMP_DATA[1,1]='{' OR TEMP_DATA[2,1]='['; * WE ARE PULLING AN ARRAY.  THIS IS VERY MESSY.  IT CAN ONLY HANDLE A SINGLE ARRAY. ANY MORE NESTING AND WE ARE BROKE* WE NEED TO LOOP UNTIL WE SEE THE NEXT ] THAT IS NOT IS A INSIDE QUOTES    LEN$STRING=LEN(TEMP_DATA)    FOUND$BRACKET=0    LAST$C=''    INSIDE$QUOTES=0    FOR X=1 TO LEN$STRING UNTIL FOUND$BRACKET      C=TEMP_DATA[X,1]      BEGIN CASE        CASE C='}' AND NOT(INSIDE$QUOTES); FOUND$BRACKET=1        CASE C='"' AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C="'" AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C='"'; INSIDE$QUOTES=1        CASE C="'"; INSIDE$QUOTES=1      END CASE      JSON_RESULT:=C    NEXT X  CASE 1* IT SHOULD BE A NUMBER ONLY    IF TEMP_DATA[1,1]=' ' THEN TEMP_DATA=TEMP_DATA[2,MAX_LENGTH]* NEXT CHARACTER WILL EITHER BE A },OR SPACXE    NEXT1=INDEX(TEMP_DATA,' ',1)    NEXT2=INDEX(TEMP_DATA,'}',1)    NEXT3=INDEX(TEMP_DATA,',',1)    N=NEXT1    IF NEXT2 < N THEN N=NEXT2    IF NEXT3 < N THEN N=NEXT3    JSON_RESULT=TEMP_DATA[1,N-1]END CASERETURN*getobject: *OBJECTNUMBER=FIELD(FIRST_KEY,']',1)OBJECTNUMBER=FIELD(OBJECTNUMBER,'[',2)INSIDE$QUOTES=0OBJECTCOUNT=0CHARCNTR=0NESTCOUNT=0JSON_RESULT=''DOINGCOUNT=0LEN_JSON_STRING=LEN(JSON_STRING)IF OBJECTNUMBER='#' THEN  OBJECTNUMBER=99999999  DOINGCOUNT=1ENDLOOP  CHARCNTR+=1  IF CHARCNTR > LEN_JSON_STRING THEN EXIT  C=JSON_STRING[CHARCNTR,1]  BEGIN CASE    CASE NOT(INSIDE$QUOTES) AND C='"'      JSON_RESULT:=C      INSIDE$QUOTES=1    CASE INSIDE$QUOTES AND C='"'      JSON_RESULT:=C      INSIDE$QUOTES=0    CASE INSIDE$QUOTES      JSON_RESULT:=C    CASE C='{' AND NOT(NESTCOUNT)* WE HAVE THE START OF OUR OBJECT      JSON_RESULT=C      NESTCOUNT=1      OBJECTCOUNT+=1    CASE C='{' AND NOT(INSIDE$QUOTES)* GOING A NEXT DEEPER      JSON_RESULT:=C      NESTCOUNT+=1    CASE C='}'      JSON_RESULT:=C      NESTCOUNT=NESTCOUNT-1      IF NESTCOUNT = 0 THEN        IF OBJECTNUMBER=OBJECTCOUNT-1 THEN          EXIT; * WE HAVE OUR OBJECT        END ELSE          NESTCOUNT=0          JSON_RESULT=''; * RESET OUR OBJECT        END      END    CASE NESTCOUNT=0; * DO NOTHING    CASE 1      JSON_RESULT:=C  END CASE  IF 0 THEN    PRINT C,'NESTCOUNT=':NESTCOUNT:' OBJECTCOUNT=':OBJECTCOUNT:' INQUOTE=':INSIDE$QUOTES:' CHARCNTR=':CHARCNTR  END  IF DOINGCOUNT THEN JSON_RESULT=OBJECTCOUNTREPEATIF 0 THEN  PRINT JSON_RESULT  PRINT  PRINT JSON_STRING[1,CHARCNTR+50]  INPUT WAITENDRETURNEND0002BEWGETPARAM0c2SUBROUTINE WGETPARAM(ParamVal, ParamNum)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: March 2017* Description: return a parameter from the URL. Assume the* URL is in the format:**   http://api.hostname.com/api/resource/key/command/opt1/opt2/opt3** ParamNum = 1 ParamVal = key*            2            command*            3            opt1*            4            opt2*            5            opt3***********************************************************************INCLUDE WBPD WWW.INCLUDEParamVal = CGI$RESTPARAMS<ParamNum>RETURNEND0006A0WSETBUFFER0c2SUBROUTINE WSETBUFFER(B.VAL)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Updated by: Peter Schellenbach, Zumasys* Date: November 2017* Description  : This program sets the SESSION$OUTBUF.FLAG and optionally*                SESSION$OUTBUF.SIZE variables to enable or disable*                buffering of output generated by WSEND. If buffering*                is enabled, be sure to call WFLUSH to flush the final*                buffer content.**                B.VAL = 0 : disable buffering*                B.VAL = 1 : enable buffering using current buffer size*                B.VAL > 1 : enable buffering and set buffer size to*                            this value.**                By default buffering is disabled. If buffering will be*                used, call WSETBUFFER before the first call to WSEND.*                If the size of buffer content ever exceeds the buffer*                size, the buffer is flushed to the client along with*                any headers, and buffering is disabled.*              **********************************************************************INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*IF NUM(B.VAL) AND B.VAL > 0 AND B.VAL <= 1000000 THEN  * Set buffer size and enable buffering  SESSION$OUTBUF.SIZE = B.VAL  SESSION$OUTBUF.FLAG = TRUEEND ELSE  * Enable or disable buffering  IF B.VAL # TRUE AND B.VAL # FALSE THEN    IF B.VAL = "" THEN      B.VAL = FALSE    END ELSE      B.VAL = TRUE    END  END  SESSION$OUTBUF.FLAG = B.VALENDRETURNEND0002A5WSETHEADER0c2SUBROUTINE WSETHEADER(VarName, VarValue)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: set a value of HTTP response header** Updated by Peter Schellenbach, 09-21-2017 to call WSETCONTENTTYPE when setting the Content-Type header***********************************************************************INCLUDE WBPD WWW.INCLUDEIF OCONV(VarName,'MCU') = 'CONTENT-TYPE' THEN  CALL WSETCONTENTTYPE(VarValue)END ELSE  HEADER_LINE = VarName:': ':VarValue  SESSION$HEADERS<-1> = HEADER_LINEENDRETURNEND0001F5WGETCONFIG0c2SUBROUTINE WGETCONFIG(VarValue, VarName) ************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: extract a configuration value***********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''LOCATE VarName IN CGI$CONFIG<1,1> SETTING POS THEN  VarValue = CGI$CONFIG<1,2,POS>ENDRETURNEND000244WSETVAR0c2SUBROUTINE WSETVAR(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: update value of a request variable***********************************************************************INCLUDE WBPD WWW.INCLUDETEMPVARS = OCONV(CGI$VARS, 'MCU')LOCATE OCONV(VarName, 'MCU') IN TEMPVARS SETTING POS THEN  CGI$VALS<POS> = VarValueEND ELSE  CGI$VARS<-1> = VarName  CGI$VALS<-1> = VarValueENDRETURNEND000291WSETSTATUS0c2SUBROUTINE WSETSTATUS( STATUS.CODE )*********************************************************************** Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written By   : Peter Schellenbach* Date Written : 04/21/2017* Description  : This program sets the response status code sent*                back to client. Successful requests should return*                status code 200 (this is the default). Status code*                500 indicates a generic server failure.*              **********************************************************************INCLUDE WBPD WWW.INCLUDESESSION$STATUS.CODE = STATUS.CODERETURNEND000217WGETVAR0c2SUBROUTINE WGETVAR(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: extract value of a request variable***********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''TEMPVARS = OCONV(CGI$VARS, 'MCU')LOCATE OCONV(VarName, 'MCU') IN TEMPVARS SETTING POS THEN  VarValue = CGI$VALS<POS>ENDRETURNEND000256WSETCONTENTTYPE0c2SUBROUTINE WSETCONTENTTYPE(CONTENTTYPE)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine sets the SESSION$CONTENT.TYPE variable.*                This value is used in the Content-Type HTTP header*                in the response sent to the client.*              **********************************************************************INCLUDE WBPD WWW.INCLUDESESSION$CONTENT.TYPE=CONTENTTYPERETURNEND0000EERSS.FEEDS0c000005DFEEDS0c2Available RSS FeedsRSS Feeds available on this serverSUB.FEEDS.SELSUB.FEEDS.ITEM000078RUNTIME-ERRORS0c2Basic Runtime ErrorsData basic runtime errors.SUB.RE.SELSUB.RE.ITEMDashboard Accountaccount=TLDB006E09MVDB.CONTROL0c000024ECOMPILE.SETUP0c2BASIC %FILENAME% %ITEMNAME%* To configure the compile command when using the web editor* edit line # 1 of this record to contain the appropriate syntax.** Example # 1 - Standard compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME%** Example # 2 - FLASH compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME% (O** Example # 3 - Standard compile using COMPILE* 001 COMPILE %FILENAME% %ITEMNAME%** Only line # 1 of this record is used, all other lines of this record are ignored.* If this record is deleted, the default behavior is:* COMPILE %FILENAME% %ITEMNAME%0000A1FC2DPIE.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' pieRadius='[RADIUS]' animation='0' > [CHART.DATA]</graph>0000DEFC3DPIE.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' showPercentageInLabel='0' pieYScale='45' pieRadius='[RADIUS]' animation='0' pieFillAlpha='100' > [CHART.DATA]</graph>0000A9FCAREA2D.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]'> [CHART.DATA]</graph>0000A9FCBAR2D.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]' > [CHART.DATA]</graph>00009BFCCOLUMN2D.SETTINGS0c2<graph caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]' > [CHART.DATA]</graph>0000ADFCCOLUMN3D.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]'  decimalPrecision='0' animation='0' yaxisname='[YMEMO]' xaxisname='[XMEMO]' > [CHART.DATA]</graph>0000A6FCDOUGHNUT2D.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' pieRadius='[RADIUS]' animation='0' > [CHART.DATA]</graph>0000A7FCLINE.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]'> [CHART.DATA]</graph>000C53FCMAP.NAMES0c2AfghanistanAfricaAlabamaAlaskaAlbaniaAlbertaAlgeriaAndorraAngolaAntiguaArgentinaArizonaArkansasArmeniaAsia3AsiaGeorgiaAsiaAustralia2AustraliaAustriaAzerbaijanBahamasBahrainBangladeshBarbadosBelarusBelgiumBelizeBeninBhutanBoliviaBosniaHerzegovinaBotswanaBrazilRegionBrazilBritishColumbiaBruneiBulgariaBurkinaFasoBurmaBurundiCaliforniaCambodiaCameroonCanadaCapeVerdeCaymanIslandsCentralAfricanRepublicCentralAmerica2CentralAmericaCentralAmericawithCaribbeanCentralEuropeanRegionChadChileChina2ChinaColombiaColoradoComorosCongoConnecticutCostaRicaCoteDivoireCroatiaCubaCyprus2CyprusCzechRepublicDelawareDemocraticRepublicofCongoDenmarkRegionDenmarkDistrictofColumbiaDjiboutiDominicanRepublicDominicaEastEuropeanRegionEastTimorEcuadorEgyptElSalvadorEnglandRegionEnglandEquatorialGuineaEritreaEstoniaEthiopiaEurope2EuropeRegionEuropeEuropewithcountriesFalklandIslandFijiFinlandFloridaFranceDepartmentFranceFrenchGuianaGabonGambiaGeorgiaGermanyGhanaGreeceGreenlandGrenadaGuatemalaGuineaBissauGuineaGuyanaHaitiHawaiiHondurasHongKongHungaryRegionsHungaryIcelandIdahoIllinoisIndianaIndiaIndonesiaIowaIranIraqIrelandIsraelItalyJamaicaJapanJordanKansasKazakhstanKentuckyKenyaKiribatiKuwaitKyrgyzstanLaosLatviaLebanonLesothoLiberiaLibyaLiechtensteinLithuaniaLouisianaLuxembourgMacauMacedoniaMadagascarRegionsMadagascarMaineMalawiMalaysiaMaliMaltaManitobaMarshallIslandMarylandMassachusettsMauritaniaMauritiusMexicoMichiganMicronesiaMiddleEastMinnesotaMississippiMissouriMoldovaMonacoMongoliaMontanaMontenegroMoroccoMozambiqueNamibiaNauruNebraskaNepalNetherlandNevadaNewBrunswickNewCaledoniaNewfoundlandandLabradorNewHampshireNewJerseyNewMexicoNewWorldNewYorkNewZealandNicaraguaNigeriaNigerNorthAmericaNorthAmerica_WOCentralNorthCarolinaNorthDakotaNorthEuropeanRegionNorthIrelandNorthKoreaNorthWestTerritoriesNorwayRegionNorwayNovaScotiaNunavutOceaniaOhioOklahomaOmanOntarioOregonPakistanPalauPanamaPapuaNewGuineaParaguayPennsylvaniaPeruPhilippinesPolandCountiesPolandPortugalPrinceEdwardIslandPuertoRicoQatarQuebecRhodeIslandRomaniaRussiaRwandaSaintKittsandNevisSaintLuciaSaintVincentandtheGrenadinesSamoaSanMarinoSaoTomeandPrincipeSaskatchewanSaudiArabiaScotlandRegionScotlandSenegalSerbiaSeychellesSierraLeoneSingaporeSlovakiaSloveniaSolomonIslandSomaliaSouthAfricaSouthAmericaSouthCarolinaSouthDakotaSouthEuropeanRegionSouthKoreaSpainProvincesSpainSriLankaSudanSurinameSwazilandSwedenSwitzerlandSyriaTaiwanTajikistanTanzaniaTennesseeTexasThailandTibetTogoTongaTrinidadandTobagoTunisiaTurkeyTurkmenistanTuvaluUAEUgandaUK7UkraineUKUruguayUSACentralRegionUSANorthEastRegionUSANorthWestRegionUSARegionUSASouthEastRegionUSASouthWestRegionUSAUtahUzbekistanVanuatuVaticanCityVenezuelaVermontVietnamVirginiaWalesWashingtonWesternSaharaWestEuropeanRegionWestVirginiaWisconsinWorld8WorldWorldwithCountriesWyomingYemenYukonTerritoryZambiaZimbabwe0000B1FCMAP.SETTINGS0c2<map showCanvasBorder='1' canvasBorderColor='F1F1F1' canvasBorderThickness='2' borderColor='FFFFFF' connectorColor='000000' fillAlpha='70'>[CHART.DATA]</map>00009AFCMSAREA2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>000099FCMSBAR2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009CFCMSCOLUMN2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009CFCMSCOLUMN3D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>000098FCMSLINE.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009FFCSTACKEDAREA2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009EFCSTACKEDBAR2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>0000A1FCSTACKEDCOLUMN2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>0000A1FCSTACKEDCOLUMN3D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>0000FDFWBULLET.SETTINGS0c2<chart palette='[CHART.PALETTE]' lowerLimit='[LOWER.LIMIT]' upperLimit='[UPPER.LIMIT]' caption='[CAPTION]' subcaption='[SUBCAPTION]' numberPrefix='[NUMBER.PREFIX]' numberSuffix='[NUMBER.SUFFIX]' showValue='1' >[CHART.DATA]</chart>0000BAFWFP.SETTINGS0c2<chart numberPrefix='[NUMBER.PREFIX]' numberSuffix='[NUMBER.SUFFIX]' caption='[CAPTION]' subcaption='[SUBCAPTION]' decimals='1' baseFontSize='11' >[CHART.DATA]</chart>000122FWGAUGE.SETTINGS0c2<chart palette='[CHART.PALETTE]' lowerLimitDisplay='[LOWER.LIMIT.DISPLAY]' upperLimitDisplay='[UPPER.LIMIT.DISPLAY]' lowerLimit='[LOWER.LIMIT]' upperLimit='[UPPER.LIMIT]' numberPrefix='[NUMBER.PREFIX]' numberSuffix='[NUMBER.SUFFIX]' showValue='1' >[CHART.DATA]</chart>0000CAFWSPARK.SETTINGS0c2<chart yAxisMinValue='[LOWER.LIMIT]' yAxisMaxValue='[UPPER.LIMIT]' palette='[CHART.PALETTE]' caption='[CAPTION]' subcaption='[SUBCAPTION]' setAdaptiveYMin='1' >[CHART.DATA]</chart>004113ICON.LIST0c2accept.pngadd.pnganchor.pngapplication_add.pngapplication_cascade.pngapplication_delete.pngapplication_double.pngapplication_edit.pngapplication_error.pngapplication_form_add.pngapplication_form_delete.pngapplication_form_edit.pngapplication_form_magnify.pngapplication_form.pngapplication_get.pngapplication_go.pngapplication_home.pngapplication_key.pngapplication_lightning.pngapplication_link.pngapplication_osx.pngapplication_osx_terminal.pngapplication.pngapplication_put.pngapplication_side_boxes.pngapplication_side_contract.pngapplication_side_expand.pngapplication_side_list.pngapplication_side_tree.pngapplication_split.pngapplication_tile_horizontal.pngapplication_tile_vertical.pngapplication_view_columns.pngapplication_view_detail.pngapplication_view_gallery.pngapplication_view_icons.pngapplication_view_list.pngapplication_view_tile.pngapplication_xp.pngapplication_xp_terminal.pngarrow_branch.pngarrow_divide.pngarrow_down.pngarrow_inout.pngarrow_in.pngarrow_join.pngarrow_left.pngarrow_merge.pngarrow_out.pngarrow_redo.pngarrow_refresh.pngarrow_refresh_small.pngarrow_right.pngarrow_rotate_anticlockwise.pngarrow_rotate_clockwise.pngarrow_switch.pngarrow_turn_left.pngarrow_turn_right.pngarrow_undo.pngarrow_up.pngasterisk_orange.pngasterisk_yellow.pngattach.pngaward_star_add.pngaward_star_bronze_1.pngaward_star_bronze_2.pngaward_star_bronze_3.pngaward_star_delete.pngaward_star_gold_1.pngaward_star_gold_2.pngaward_star_gold_3.pngaward_star_silver_1.pngaward_star_silver_2.pngaward_star_silver_3.pngbasket_add.pngbasket_delete.pngbasket_edit.pngbasket_error.pngbasket_go.pngbasket.pngbasket_put.pngbasket_remove.pngbell_add.pngbell_delete.pngbell_error.pngbell_go.pngbell_link.pngbell.pngbin_closed.pngbin_empty.pngbin.pngbomb.pngbook_add.pngbook_addresses.pngbook_delete.pngbook_edit.pngbook_error.pngbook_go.pngbook_key.pngbook_link.pngbook_next.pngbook_open.pngbook.pngbook_previous.pngbox.pngbrick_add.pngbrick_delete.pngbrick_edit.pngbrick_error.pngbrick_go.pngbrick_link.pngbrick.pngbricks.pngbriefcase.pngbug_add.pngbug_delete.pngbug_edit.pngbug_error.pngbug_go.pngbug_link.pngbug.pngbuilding_add.pngbuilding_delete.pngbuilding_edit.pngbuilding_error.pngbuilding_go.pngbuilding_key.pngbuilding_link.pngbuilding.pngbullet_add.pngbullet_arrow_bottom.pngbullet_arrow_down.pngbullet_arrow_top.pngbullet_arrow_up.pngbullet_black.pngbullet_blue.pngbullet_delete.pngbullet_disk.pngbullet_error.pngbullet_feed.pngbullet_go.pngbullet_green.pngbullet_key.pngbullet_orange.pngbullet_picture.pngbullet_pink.pngbullet_purple.pngbullet_red.pngbullet_star.pngbullet_toggle_minus.pngbullet_toggle_plus.pngbullet_white.pngbullet_wrench.pngbullet_yellow.pngcake.pngcalculator_add.pngcalculator_delete.pngcalculator_edit.pngcalculator_error.pngcalculator_link.pngcalculator.pngcalendar_add.pngcalendar_delete.pngcalendar_edit.pngcalendar_link.pngcalendar.pngcalendar_view_day.pngcalendar_view_month.pngcalendar_view_week.pngcamera_add.pngcamera_delete.pngcamera_edit.pngcamera_error.pngcamera_go.pngcamera_link.pngcamera.pngcamera_small.pngcancel.pngcar_add.pngcar_delete.pngcar.pngcart_add.pngcart_delete.pngcart_edit.pngcart_error.pngcart_go.pngcart.pngcart_put.pngcart_remove.pngcd_add.pngcd_burn.pngcd_delete.pngcd_edit.pngcd_eject.pngcd_go.pngcd.pngchart_bar_add.pngchart_bar_delete.pngchart_bar_edit.pngchart_bar_error.pngchart_bar_link.pngchart_bar.pngchart_curve_add.pngchart_curve_delete.pngchart_curve_edit.pngchart_curve_error.pngchart_curve_go.pngchart_curve_link.pngchart_curve.pngchart_line_add.pngchart_line_delete.pngchart_line_edit.pngchart_line_error.pngchart_line_link.pngchart_line.pngchart_organisation_add.pngchart_organisation_delete.pngchart_organisation.pngchart_pie_add.pngchart_pie_delete.pngchart_pie_edit.pngchart_pie_error.pngchart_pie_link.pngchart_pie.pngclock_add.pngclock_delete.pngclock_edit.pngclock_error.pngclock_go.pngclock_link.pngclock_pause.pngclock_play.pngclock.pngclock_red.pngclock_stop.pngcog_add.pngcog_delete.pngcog_edit.pngcog_error.pngcog_go.pngcog.pngcoins_add.pngcoins_delete.pngcoins.pngcolor_swatch.pngcolor_wheel.pngcomment_add.pngcomment_delete.pngcomment_edit.pngcomment.pngcomments_add.pngcomments_delete.pngcomments.pngcompress.pngcomputer_add.pngcomputer_delete.pngcomputer_edit.pngcomputer_error.pngcomputer_go.pngcomputer_key.pngcomputer_link.pngcomputer.pngconnect.pngcontrast_decrease.pngcontrast_high.pngcontrast_increase.pngcontrast_low.pngcontrast.pngcontrol_eject_blue.pngcontrol_eject.pngcontrol_end_blue.pngcontrol_end.pngcontrol_equalizer_blue.pngcontrol_equalizer.pngcontrol_fastforward_blue.pngcontrol_fastforward.pngcontroller_add.pngcontroller_delete.pngcontroller_error.pngcontroller.pngcontrol_pause_blue.pngcontrol_pause.pngcontrol_play_blue.pngcontrol_play.pngcontrol_repeat_blue.pngcontrol_repeat.pngcontrol_rewind_blue.pngcontrol_rewind.pngcontrol_start_blue.pngcontrol_start.pngcontrol_stop_blue.pngcontrol_stop.pngcreditcards.pngcross.pngcss_add.pngcss_delete.pngcss_go.pngcss.pngcss_valid.pngcup_add.pngcup_delete.pngcup_edit.pngcup_error.pngcup_go.pngcup_key.pngcup_link.pngcup.pngcursor.pngcut.pngcut_red.pngdatabase_add.pngdatabase_connect.pngdatabase_delete.pngdatabase_edit.pngdatabase_error.pngdatabase_gear.pngdatabase_go.pngdatabase_key.pngdatabase_lightning.pngdatabase_link.pngdatabase.pngdatabase_refresh.pngdatabase_save.pngdatabase_table.pngdate_add.pngdate_delete.pngdate_edit.pngdate_error.pngdate_go.pngdate_link.pngdate_magnify.pngdate_next.pngdate.pngdate_previous.pngdelete.pngdisconnect.pngdisk_multiple.pngdisk.pngdoor_in.pngdoor_open.pngdoor_out.pngdoor.pngdrink_empty.pngdrink.pngdrive_add.pngdrive_burn.pngdrive_cd_empty.pngdrive_cd.pngdrive_delete.pngdrive_disk.pngdrive_edit.pngdrive_error.pngdrive_go.pngdrive_key.pngdrive_link.pngdrive_magnify.pngdrive_network.pngdrive.pngdrive_rename.pngdrive_user.pngdrive_web.pngdvd_add.pngdvd_delete.pngdvd_edit.pngdvd_error.pngdvd_go.pngdvd_key.pngdvd_link.pngdvd.pngemail_add.pngemail_attach.pngemail_delete.pngemail_edit.pngemail_error.pngemail_go.pngemail_link.pngemail_open_image.pngemail_open.pngemail.pngemoticon_evilgrin.pngemoticon_grin.pngemoticon_happy.pngemoticon_smile.pngemoticon_surprised.pngemoticon_tongue.pngemoticon_unhappy.pngemoticon_waii.pngemoticon_wink.pngerror_add.pngerror_delete.pngerror_go.pngerror.pngexclamation.pngeye.pngfeed_add.pngfeed_delete.pngfeed_disk.pngfeed_edit.pngfeed_error.pngfeed_go.pngfeed_key.pngfeed_link.pngfeed_magnify.pngfeed.pngfemale.pngfilm_add.pngfilm_delete.pngfilm_edit.pngfilm_error.pngfilm_go.pngfilm_key.pngfilm_link.pngfilm.pngfilm_save.pngfind.pngflag_blue.pngflag_green.pngflag_orange.pngflag_pink.pngflag_purple.pngflag_red.pngflag_yellow.pngfolder_add.pngfolder_bell.pngfolder_brick.pngfolder_bug.pngfolder_camera.pngfolder_database.pngfolder_delete.pngfolder_edit.pngfolder_error.pngfolder_explore.pngfolder_feed.pngfolder_find.pngfolder_go.pngfolder_heart.pngfolder_image.pngfolder_key.pngfolder_lightbulb.pngfolder_link.pngfolder_magnify.pngfolder_page.pngfolder_page_white.pngfolder_palette.pngfolder_picture.pngfolder.pngfolder_star.pngfolder_table.pngfolder_user.pngfolder_wrench.pngfont_add.pngfont_delete.pngfont_go.pngfont.pnggroup_add.pnggroup_delete.pnggroup_edit.pnggroup_error.pnggroup_gear.pnggroup_go.pnggroup_key.pnggroup_link.pnggroup.pngheart_add.pngheart_delete.pngheart.pnghelp.pnghourglass_add.pnghourglass_delete.pnghourglass_go.pnghourglass_link.pnghourglass.pnghouse_go.pnghouse_link.pnghouse.pnghtml_add.pnghtml_delete.pnghtml_go.pnghtml.pnghtml_valid.pngimage_add.pngimage_delete.pngimage_edit.pngimage_link.pngimage.pngimages.pnginformation.pngipod_cast_add.pngipod_cast_delete.pngipod_cast.pngipod.pngipod_sound.pngjoystick_add.pngjoystick_delete.pngjoystick_error.pngjoystick.pngkey_add.pngkeyboard_add.pngkeyboard_delete.pngkeyboard_magnify.pngkeyboard.pngkey_delete.pngkey_go.pngkey.pnglayers.pnglayout_add.pnglayout_content.pnglayout_delete.pnglayout_edit.pnglayout_error.pnglayout_header.pnglayout_link.pnglayout.pnglayout_sidebar.pnglightbulb_add.pnglightbulb_delete.pnglightbulb_off.pnglightbulb.pnglightning_add.pnglightning_delete.pnglightning_go.pnglightning.pnglink_add.pnglink_break.pnglink_delete.pnglink_edit.pnglink_error.pnglink_go.pnglink.pnglock_add.pnglock_break.pnglock_delete.pnglock_edit.pnglock_go.pnglock_open.pnglock.pnglorry_add.pnglorry_delete.pnglorry_error.pnglorry_flatbed.pnglorry_go.pnglorry_link.pnglorry.pngmagifier_zoom_out.pngmagnifier.pngmagnifier_zoom_in.pngmale.pngmap_add.pngmap_delete.pngmap_edit.pngmap_go.pngmap_magnify.pngmap.pngmedal_bronze_1.pngmedal_bronze_2.pngmedal_bronze_3.pngmedal_bronze_add.pngmedal_bronze_delete.pngmedal_gold_1.pngmedal_gold_2.pngmedal_gold_3.pngmedal_gold_add.pngmedal_gold_delete.pngmedal_silver_1.pngmedal_silver_2.pngmedal_silver_3.pngmedal_silver_add.pngmedal_silver_delete.pngmoney_add.pngmoney_delete.pngmoney_dollar.pngmoney_euro.pngmoney.pngmoney_pound.pngmoney_yen.pngmonitor_add.pngmonitor_delete.pngmonitor_edit.pngmonitor_error.pngmonitor_go.pngmonitor_lightning.pngmonitor_link.pngmonitor.pngmouse_add.pngmouse_delete.pngmouse_error.pngmouse.pngmusic.pngnew.pngnewspaper_add.pngnewspaper_delete.pngnewspaper_go.pngnewspaper_link.pngnewspaper.pngnote_add.pngnote_delete.pngnote_edit.pngnote_error.pngnote_go.pngnote.pngoverlays.pngpackage_add.pngpackage_delete.pngpackage_go.pngpackage_green.pngpackage_link.pngpackage.pngpage_add.pngpage_attach.pngpage_code.pngpage_copy.pngpage_delete.pngpage_edit.pngpage_error.pngpage_excel.pngpage_find.pngpage_gear.pngpage_go.pngpage_green.pngpage_key.pngpage_lightning.pngpage_link.pngpage_paintbrush.pngpage_paste.pngpage.pngpage_red.pngpage_refresh.pngpage_save.pngpage_white_acrobat.pngpage_white_actionscript.pngpage_white_add.pngpage_white_camera.pngpage_white_cd.pngpage_white_code.pngpage_white_code_red.pngpage_white_coldfusion.pngpage_white_compressed.pngpage_white_copy.pngpage_white_cplusplus.pngpage_white_c.pngpage_white_csharp.pngpage_white_cup.pngpage_white_database.pngpage_white_delete.pngpage_white_dvd.pngpage_white_edit.pngpage_white_error.pngpage_white_excel.pngpage_white_find.pngpage_white_flash.pngpage_white_freehand.pngpage_white_gear.pngpage_white_get.pngpage_white_go.pngpage_white_horizontal.pngpage_white_h.pngpage_white_key.pngpage_white_lightning.pngpage_white_link.pngpage_white_magnify.pngpage_white_medal.pngpage_white_office.pngpage_white_paintbrush.pngpage_white_paint.pngpage_white_paste.pngpage_white_php.pngpage_white_picture.pngpage_white.pngpage_white_powerpoint.pngpage_white_put.pngpage_white_ruby.pngpage_white_stack.pngpage_white_star.pngpage_white_swoosh.pngpage_white_text.pngpage_white_text_width.pngpage_white_tux.pngpage_white_vector.pngpage_white_visualstudio.pngpage_white_width.pngpage_white_word.pngpage_white_world.pngpage_white_wrench.pngpage_white_zip.pngpage_word.pngpage_world.pngpaintbrush.pngpaintcan.pngpalette.pngpaste_plain.pngpaste_word.pngpencil_add.pngpencil_delete.pngpencil_go.pngpencil.pngphone_add.pngphone_delete.pngphone.pngphone_sound.pngphoto_add.pngphoto_delete.pngphoto_link.pngphoto.pngphotos.pngpicture_add.pngpicture_delete.pngpicture_edit.pngpicture_empty.pngpicture_error.pngpicture_go.pngpicture_key.pngpicture_link.pngpicture.pngpicture_save.pngpictures.pngpilcrow.pngpill_add.pngpill_delete.pngpill_go.pngpill.pngplugin_add.pngplugin_delete.pngplugin_disabled.pngplugin_edit.pngplugin_error.pngplugin_go.pngplugin_link.pngplugin.pngprinter_add.pngprinter_delete.pngprinter_empty.pngprinter_error.pngprinter.pngrainbow.pngreport_add.pngreport_delete.pngreport_disk.pngreport_edit.pngreport_go.pngreport_key.pngreport_link.pngreport_magnify.pngreport_picture.pngreport.pngreport_user.pngreport_word.pngresultset_first.pngresultset_last.pngresultset_next.pngresultset_previous.pngrosette.pngrss_add.pngrss_delete.pngrss_go.pngrss.pngrss_valid.pngruby_add.pngruby_delete.pngruby_gear.pngruby_get.pngruby_go.pngruby_key.pngruby_link.pngruby.pngruby_put.pngscript_add.pngscript_code.pngscript_code_red.pngscript_delete.pngscript_edit.pngscript_error.pngscript_gear.pngscript_go.pngscript_key.pngscript_lightning.pngscript_link.pngscript_palette.pngscript.pngscript_save.pngserver_add.pngserver_chart.pngserver_compressed.pngserver_connect.pngserver_database.pngserver_delete.pngserver_edit.pngserver_error.pngserver_go.pngserver_key.pngserver_lightning.pngserver_link.pngserver.pngserver_uncompressed.pngshading.pngshape_align_bottom.pngshape_align_center.pngshape_align_left.pngshape_align_middle.pngshape_align_right.pngshape_align_top.pngshape_flip_horizontal.pngshape_flip_vertical.pngshape_group.pngshape_handles.pngshape_move_back.pngshape_move_backwards.pngshape_move_forwards.pngshape_move_front.pngshape_rotate_anticlockwise.pngshape_rotate_clockwise.pngshape_square_add.pngshape_square_delete.pngshape_square_edit.pngshape_square_error.pngshape_square_go.pngshape_square_key.pngshape_square_link.pngshape_square.pngshape_ungroup.pngshield_add.pngshield_delete.pngshield_go.pngshield.pngsitemap_color.pngsitemap.pngsound_add.pngsound_delete.pngsound_low.pngsound_mute.pngsound_none.pngsound.pngspellcheck.pngsport_8ball.pngsport_basketball.pngsport_football.pngsport_golf.pngsport_raquet.pngsport_shuttlecock.pngsport_soccer.pngsport_tennis.pngstar.pngstatus_away.pngstatus_busy.pngstatus_offline.pngstatus_online.pngstop.pngstyle_add.pngstyle_delete.pngstyle_edit.pngstyle_go.pngstyle.pngsum.pngtab_add.pngtab_delete.pngtab_edit.pngtab_go.pngtable_add.pngtable_delete.pngtable_edit.pngtable_error.pngtable_gear.pngtable_go.pngtable_key.pngtable_lightning.pngtable_link.pngtable_multiple.pngtable.pngtable_refresh.pngtable_relationship.pngtable_row_delete.pngtable_row_insert.pngtable_save.pngtable_sort.pngtab.pngtag_blue_add.pngtag_blue_delete.pngtag_blue_edit.pngtag_blue.pngtag_green.pngtag_orange.pngtag_pink.pngtag.pngtag_purple.pngtag_red.pngtag_yellow.pngtelephone_add.pngtelephone_delete.pngtelephone_edit.pngtelephone_error.pngtelephone_go.pngtelephone_key.pngtelephone_link.pngtelephone.pngtelevision_add.pngtelevision_delete.pngtelevision.pngtext_align_center.pngtext_align_justify.pngtext_align_left.pngtext_align_right.pngtext_allcaps.pngtext_bold.pngtext_columns.pngtext_dropcaps.pngtextfield_add.pngtextfield_delete.pngtextfield_key.pngtextfield.pngtextfield_rename.pngtext_heading_1.pngtext_heading_2.pngtext_heading_3.pngtext_heading_4.pngtext_heading_5.pngtext_heading_6.pngtext_horizontalrule.pngtext_indent.pngtext_indent_remove.pngtext_italic.pngtext_kerning.pngtext_letter_omega.pngtext_letterspacing.pngtext_linespacing.pngtext_list_bullets.pngtext_list_numbers.pngtext_lowercase.pngtext_padding_bottom.pngtext_padding_left.pngtext_padding_right.pngtext_padding_top.pngtext_replace.pngtext_signature.pngtext_smallcaps.pngtext_strikethrough.pngtext_subscript.pngtext_superscript.pngtext_underline.pngtext_uppercase.pngthumb_down.pngthumb_up.pngtick.pngtime_add.pngtime_delete.pngtime_go.pngtimeline_marker.pngtime.pngtransmit_add.pngtransmit_blue.pngtransmit_delete.pngtransmit_edit.pngtransmit_error.pngtransmit_go.pngtransmit.pngtux.pnguser_add.pnguser_comment.pnguser_delete.pnguser_edit.pnguser_female.pnguser_go.pnguser_gray.pnguser_green.pnguser_orange.pnguser.pnguser_red.pnguser_suit.pngvcard_add.pngvcard_delete.pngvcard_edit.pngvcard.pngvector_add.pngvector_delete.pngvector.pngwand.pngweather_clouds.pngweather_cloudy.pngweather_lightning.pngweather_rain.pngweather_snow.pngweather_sun.pngwebcam_add.pngwebcam_delete.pngwebcam_error.pngwebcam.pngworld_add.pngworld_delete.pngworld_edit.pngworld_go.pngworld_link.pngworld.pngwrench_orange.pngwrench.pngxhtml_add.pngxhtml_delete.pngxhtml_go.pngxhtml.pngxhtml_valid.pngzoom_in.pngzoom_out.pngzoom.png000092MOBI.APPS0c2SUB.D3ADMINSUB.MOBI.APP.MENUSUB.MOBI.WOSUB.TESTAIAAD3 AdministrationApplication ChooserDemo WO ApplicationDemo Application00007BMONTHLY.20130c277869980896869808900091077900940589703406719886071869680806870707428708058871070682570808878968000007BMONTHLY.20140c2865222009965220098889900865566006552260074665400798552008965230082541200654123007584120098655200000073MONTHLY.20150c29654320080145600888540009650110095012300965121008456320010523680098521000644144005888660000007FMONTHLY.GPS.20130c226517550288064103178601729914744209154142201961923275705280068082799822722781623247042583250054900007FMONTHLY.GPS.20140c2294639443200712235317797332386042323934924466243258618943111867631109141253129142744917536111721000076MONTHLY.GPS.20150c23679677832936845339654253798472034865781365450823197622741016726359493432331534221977139000073MONTHLY.NET.20140c229463943200712353177933238602323934244662425861893111867311091425312912744917361117200006CMONTHLY.NET.20150c2965432080145608885400965011095012309651210845632010523680985210064414405888660000081MONTHLY.PARTS.20140c2414378445224284147585401438425423609067336395560416464855854718841895322328312664074985847292673000078MONTHLY.PARTS.20150c24960869651350055533449464524318362544291449568374293538557601358540842633146503929950454000084MONTHLY.SERVICES.20140c245084356474093595130449942714058294319273826984038208715311051124064587832581034350913425136252700007BMONTHLY.SERVICES.20150c2469345042879554535509054512579173246800951555263416278154763544244436737329493612893614600000EPLATFORM0c2UV000288STATE.NAMES0c2AL,AK,AZ,AR,CA,CO,CT,DE,FL,GA,HI,ID,IL,IN,IA,KS,KY,LA,ME,MD,MA,MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,OH,OK,OR,PA,RI,SC,SD,TN,TX,UT,VT,VA,WA,WV,WI,WY,DCAlabama,Alaska,Arizona,Arkansas,California,Colorado,Connecticut,Delaware,Florida,Georgia,Hawaii,Idaho,Illinois,Indiana,Iowa,Kansas,Kentucky,Louisiana,Maine,Maryland,Massachusetts,Michigan,Minnesota,Mississippi,Missouri,Montana,Nebraska,Nevada,NewHampshire,NewJersey,NewMexico,NewYork,NorthCarolina,NorthDakota,Ohio,Oklahoma,Oregon,Pennsylvania,RhodeIsland,SouthCarolina,SouthDakota,Tennessee,Texas,Utah,Vermont,Virginia,Washington,WestVirginia,Wisconsin,Wyoming,DistrictofColumbia000040TLDB.SETTINGS0c2SUB.USER.AUTH110831-5iso-8859-1NN00005FTLDB.THEMES0c2cream_gray.css,ice.css,patriotic.css,tuscani.cssTheme 1,Theme 2,Theme 3,Theme 400024ECOMPILE.SETUP0c2BASIC %FILENAME% %ITEMNAME%* To configure the compile command when using the web editor* edit line # 1 of this record to contain the appropriate syntax.** Example # 1 - Standard compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME%** Example # 2 - FLASH compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME% (O** Example # 3 - Standard compile using COMPILE* 001 COMPILE %FILENAME% %ITEMNAME%** Only line # 1 of this record is used, all other lines of this record are ignored.* If this record is deleted, the default behavior is:* COMPILE %FILENAME% %ITEMNAME%0000A1FC2DPIE.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' pieRadius='[RADIUS]' animation='0' > [CHART.DATA]</graph>0000B3PORTAL.SALES.REPORT.SETUP0c2MVDBPORTAL.SALESCLOSE.DATECLOSE.DATE.MMCLOSE.DATE.YYYYEXT.AMTEXT.COSTREP.NAMEBRANCHREGION199MD24F8;9;10;-;(MR2);*05TREP;X;1;11314000070PORTAL.AR.REPORT.SETUP0c2MVDBPORTAL.ARDUE.DATEDATES.PAIDINVOICE.AMTBALANCECUST2086MD250MD2CUST1000062PORTAL.AP.REPORT.SETUP0c2MVDBPORTAL.APDUE.DATEDATE.PAIDINV.AMOUNTBALANCE2086MD250MD2051E22WDB.BP0c000021DSET.COOKIE0c2SUBROUTINE SET.COOKIE( C.VAL )*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 10/25/03* Description  : This program sets the SESSION$COOKIES variable.*              ***********************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*IF TRIM(C.VAL) # "" THEN  SESSION$COOKIES<-1> = C.VALEND*RETURN*000872CREATE.SESSION0c2SUBROUTINE CREATE.SESSION( SESSION.ID )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program creates a unique session record and*              returns the session id to the calling program.**          WARNING: This program relys on MvInternet to generate*                       its unique ID.  If you are testing your program*                       from TCL, this will FAIL and you will not get*                       any session ID returned.** Modified by  : Mike Schmidt, Sierra Bravo Corporation* Date Revised : 11/6/2003* Modification : Modified to add the date and time to attributes 3 and 4.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause** Modified By: Peter Schellenbach, Zumasys* Date: 10/25/2016* Description: Added INCLUDE WWW.INCLUDE so we have access to F.WEB.SESSION*              in /WWW/ COMMON, instead of opening file here. Use F.WEB.SESSION*              instead of WEB.SESSION for file variable. Removed PROCREAD /*              SENTENCE since CGI$UNIQUE.ID is also in /WWW/ COMMON.** Init*#MAKE# RL $OPTIONS D3EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*INCLUDE WBPD WWW.INCLUDE ; *PJS 10-25-16**SESSION.ID = ''**PJS 10-25-16*OPEN '','WEB.SESSION' TO WEB.SESSION ELSE SESSION.ID = 'ERROR'*PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ""; SESSION.ID = 'ERROR'*PJS 10-25-16*PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE(); *PJS 06-12-15**PJS 10-25-16*SESSION.ID = FIELD( TCL.LINE, ' ', 2 )*SESSION.ID = CGI$UNIQUE.ID ;* PJS 10-25-16*IF SESSION.ID = "" THEN SESSION.ID = "ERROR" ; *PJS 06-12-15*CONVERT '{' TO '' IN SESSION.IDCONVERT '}' TO '' IN SESSION.ID*IF (SESSION.ID # 'ERROR') THEN  SESSION.ID = SESSION.ID:'-':DATE():'-':TIME()  SESSION.REC = ""  SESSION.REC<3> = DATE()  SESSION.REC<4> = TIME()  WRITE SESSION.REC ON F.WEB.SESSION, SESSION.IDENDSESSION$ID = SESSION.IDCALL PUT.SESSION.VAR('LastSessionAccess', DATE():'*':TIME())*RETURN*END0173DEMVDB.MAIN0c2** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Dashboard Display Program** 1-5-15 TOM PARKER OF ZUMASYS - CHANGES TO SUPPORT MULTI-SERIES DRILLDOWNS* 1-26-15 TOM PARKER OF ZUMASYS - ALLOW PRINTABLE ON ALL CHART TYPE SINCE*         NEW FUSION CHARTS SUPPORT THEM* 3-4-15 TOM PARKER OF ZUMASYS - DONT STRIP OUT DECIMALS IN W$BAR.VALUES* 3-15-15 TOM PARKER OF ZUMASYS - ADDITIONAL CHANGE TO SUPPORT MULTI-SERIES* 6-4-15 PETER SCHELLENBACH OF ZUMASYS - MODIFIED FOR QM*          CHANGE OCONV(X,'U3060') TO MD5(X)** Modified by Peter Schellenbach of Zumasys 07-17-15 for UV compatiblity:*   Added $OPTIONS TIME.MILLISECONDS to so that SYSTEM(12) returns milliseconds, not seconds.*   When testing for cataloged program, check if line 1 is 'V', not 'VR'.*   Change U3060 user exist to use DIGEST('MD5',...) instead.** 11-30-15 TOM PARKER - PROVIDE WEBSERVICE ACCESS WITH EMBEDDED USER AND PASSWORD** 12-15-15 & 01-14-16 Tom Parker & Peter Schellenbach (*PDF*)*  Added support for PDF generation of any widget.*  Widget subroutine must set W$PDFABLE to 1 to enable PDF generation.*  PDF generation must be enabled in the PDF Configuration widget, on*  the Administrator dashboard.* 01-25-16 Tom Parker - Do not allow Go Back if doing webservice* 04-25-16 Tom Parker - Make Go Back button fully functional for backing*                       up from drilldowns* 6-1-16 TOM PARKER - FIX ISSUES WITH BACKING UP FROM DRILLDOWN* 06-27-16 Tom Parker & Peter Schellenback (*EXCEL*)*  Added support for EXCEL spreadsheet generation of many widgets.*  Widget type must be EXCEL'able to set W$EXCELABLE to 1 to generate icon** 09-23-16 Tom Parker - Eliminate GO_BACK button support and replace with*          logic to handle standard browser back button*  * 09-23-16 Peter Schellenbach*  Add support for alternate logo defined for each user (MVDB.USERS attr 7).*  Enable 'datepicker' style input fields.*  Fix single user login problem.*  * 10-07-16 Peter Schellenbach*  If form contains many widget input controls, use POST instead of GET*  for form submission to avoid URL length limitations.**  Because POST method for login and widget inputs causes browser to prompt*  for resubmit when using back or refresh button, the POST-REDIRECT-GET*  pattern is now used. When responding to POST, we return small javascript*  which REDIRECTS by setting window.location. This causes a GET from browser.** 10-25-16 Peter Schellenbach*  Refactored INIT.WWW so all dashboard specific initialization is now in*  MVDB.INIT which is called from here. Only use POST-REDIRECT-GET pattern*  for login page. Use POST without P-R-G for forms with more than 20 inputs*  so that we don't end up with a bogus URL in the browser location (the*  URL used for redirect is bogus, and cannot be used to create emailed or*  webservice URLs).**  Removed the saving of GLOBAL.USER.DATA and WIDGET.USER.DATA from this*  program and move it to MVDB.INIT, saving before letting MVDB.MAIN handle*  the request.** 11-02-16 Peter Schellenbach*  Fine-tuned widget sizes now that we have switched to application_larger.css*  instead of application_normal.css to maximuze the are used by the charts.*  Calculate the 1/3 widget size differently for the 2-column layout, which*  is 45 pixels wider than the same widget in 3-column layout. Old size values*  are commented out for reference (in case we need to support normal size again.)*$OPTIONS TIME.MILLISECOND *PJS 07-17-15 UV**INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.USERSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*EQU TRUE TO 1, FALSE TO 0, AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MVDB.SUBS' TO F.MVDB.SUBS ELSE STOP 201, 'MVDB.SUBS'OPEN '','MVDB.USERS' TO F.MVDB.USERS ELSE STOP 201, 'MVDB.USERS'OPEN '','MVDB.DEFS' TO F.MVDB.DEFS ELSE STOP 201, 'MVDB.DEFS'OPEN '','MVDB.UDATA' TO F.MVDB.UDATA ELSE STOP 201, 'MVDB.UDATA'OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'*** 11-30-15 NEED AN INSTALL DATE TO CONTROL SINGLE USER WEBSERVICE ACCESS*READ INSTALL.DATE FROM F.MVDB.CONTROL, 'INSTALL.DATE' ELSE   INSTALL.DATE=DATE()   WRITE INSTALL.DATE ON F.MVDB.CONTROL, 'INSTALL.DATE' END*OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE STOP 201, 'MVDB.WIDGET.TYPES'OPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE STOP 201, 'MVDB.THEMES'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD/VOC'END*READ WIDGET.DIV FROM F.WEB.FORMS, "WIDGET.DIV" ELSE WIDGET.DIV = "Missing WIDGET.DIV"*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)EQU SITE$AUTO.TRIM    TO SITE$SETTINGS(10)EQU SITE$REFRESH TO SITE$SETTINGS(11)EQU SITE$ALLOW.WEBSVC TO SITE$SETTINGS(12)EQU SITE$ALLOW.EMAILD TO SITE$SETTINGS(13)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READ THEME.LIST FROM F.MVDB.CONTROL, "MVDB.THEMES" ELSE THEME.LIST = "cream_gray.css,ice.css,patriotic.css,tuscani.css" THEME.LIST<2> = "Theme 1,Theme 2,Theme 3,Theme 4" WRITE THEME.LIST ON F.MVDB.CONTROL, "MVDB.THEMES"ENDIF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDEND*MAT GLOBAL.INFO = ''G$QUERYMODE = FALSE ;* Not query mode**PDF** Read PDF configuration settingsDIM PDF$SETTINGS(10)EQU PDF$ENABLED   TO PDF$SETTINGS(1)EQU PDF$COMMAND   TO PDF$SETTINGS(2)EQU PDF$DIRECTORY TO PDF$SETTINGS(3)EQU PDF$LIFETIME  TO PDF$SETTINGS(4)MATREAD PDF$SETTINGS FROM F.MVDB.CONTROL,'PDF.SETTINGS' ELSE MAT PDF$SETTINGS=''IF PDF$ENABLED THEN CALL SUB.PDF.FUNC('cleanup','')** GET LICENSE INFORMATION*CALL SUB.MVDB.FEATURES(USER.LIMIT,MAPS.ENABLED,FUSION.WIDGETS.ENABLED,WATERMARK)*NAME.COLOR = "AQUA":VM:"BLACK":VM:"BLUE":VM:"FUCHSIA":VM:"GRAY":VM:"GREEN":VM:"LIME":VM:"MAROON":VM:"NAVY"NAME.COLOR = NAME.COLOR:VM:"OLIVE":VM:"PURPLE":VM:"RED":VM:"SILVER":VM:"TEAL":VM:"WHITE":VM:"YELLOW":VM:"GREY"NAME.COLOR<2> = "#00FFFF":VM:"#000000":VM:"#0000FF":VM:"#FF00FF":VM:"#808080":VM:"#008000":VM:"#00FF00":VM:"#800000":VM:"#000080"NAME.COLOR<2> = NAME.COLOR<2>:VM:"#808000":VM:"#800080":VM:"#FF0000":VM:"#C0C0C0":VM:"#008080":VM:"#FFFFFF":VM:"#FFFF00":VM:"#808080"*LOCATE "logout" IN CGI$VARS SETTING POS THEN  CALL DESTROY.SESSIONENDCALL GET.SESSION.VAR("userid",userid)CALL GET.SESSION.VAR("adminauth",adminauth)LOCATE "psid" IN CGI$VARS SETTING POS THEN  PURGE.SESSIONID = CGI$VALS<POS>  EXECUTE "MVDB.PURGE.SESSIONS ":PURGE.SESSIONID CAPTURING JUNKENDMAT USER.ITEM = "" ;* PJS 09-23-16: make sure this gets initialized, in case of webservice or emailed reports* 11-30-15 ESTABLISH WEBSERVICE VARIABLESDIM W$WEBSERVICE.DATA(5)MATREAD W$WEBSERVICE.DATA FROM F.MVDB.UDATA,SESSION$ID:"$WEBSERVICE" ELSE MAT W$WEBSERVICE.DATA=''EQU W$WEBSERVICE TO W$WEBSERVICE.DATA(1)EQU W$EMAILED.REPORT TO W$WEBSERVICE.DATA(2)HTML.ID=''IF userid = "" THEN  LOGIN.OK = FALSE  LOGIN.MSG = ""    loginid = "" ; password = ""  LOCATE "loginid" IN CGI$VARS SETTING POS THEN    loginid = CGI$VALS<POS>    LOCATE "password" IN CGI$VARS SETTING POS THEN      password = CGI$VALS<POS>    END  END*WEBSERVICE*  IF loginid # "" AND (password # "" OR SITE$NULL.PW.OK=1) THEN*WEBSERVICE*    IF SITE$AUTH.SUB # "" THEN*WEBSERVICE*      READ CATPTR FROM F.MD, SITE$AUTH.SUB ELSE CATPTR = ""      *WEBSERVICE*      *PJS 07-17-15 UV* IF CATPTR<1> = "VR" THEN*WEBSERVICE*      IF CATPTR<1> = "V" THEN ; *PJS 07-17-15 UV**WEBSERVICE*        CALL @SITE$AUTH.SUB(loginid,password,"AUTH",LOGIN.OK,LOGIN.MSG,MAT USER.ITEM)*WEBSERVICE*        IF LOGIN.OK = "Y" THEN LOGIN.OK = TRUE*WEBSERVICE*        IF NOT(LOGIN.OK MATCHES "1N0N") THEN LOGIN.OK = FALSE*WEBSERVICE*      END ELSE*WEBSERVICE*        LOGIN.OK = FALSE*WEBSERVICE*        LOGIN.MSG = SITE$AUTH.SUB:" authentication subroutine not cataloged."*WEBSERVICE*      END*WEBSERVICE*    END ELSE*WEBSERVICE*      MATREAD USER.ITEM FROM F.MVDB.USERS, loginid THEN*WEBSERVICE*      *PJS 07-17-15 UV* IF OCONV(password,"U3060") = USER.PASSWORD THEN*WEBSERVICE*        IF DIGEST('MD5',password,1,ENCR.PASSWORD) = 0 THEN*WEBSERVICE*          ENCR.PASSWORD = OCONV(ENCR.PASSWORD,'MX0C') ; *PJS 07-17-15 UV**WEBSERVICE*          IF ENCR.PASSWORD = USER.PASSWORD THEN ; *PJS 07-17-15 UV**WEBSERVICE*            LOGIN.OK = TRUE*WEBSERVICE*          END*WEBSERVICE*        END*WEBSERVICE*      END*WEBSERVICE*    END  *  ** 11-30-15 WEBSERVICE AND EMAILED REPORT CAPABILITY LOGIC  *  IF loginid = 'emailed' THEN W$EMAILED.REPORT=1  IF loginid = 'webservice' THEN W$WEBSERVICE=1  LOCATE "htmlid" IN CGI$VARS SETTING POS THEN    HTML.ID = CGI$VALS<POS>  END ELSE    HTML.ID='null'  END  IF loginid # "" AND (W$EMAILED.REPORT OR password # "" OR SITE$NULL.PW.OK=1) THEN     LOCATE 'passtime' IN CGI$VARS SETTING PASSTIME.POS ELSE PASSTIME.POS=0     IF PASSTIME.POS THEN        PASSTIME=CGI$VALS<PASSTIME.POS>        CONVERT ':' TO '' IN PASSTIME      END ELSE PASSTIME=''     BEGIN CASE        CASE PASSTIME AND loginid = 'webservice'           EXECUTE "MVDB.PURGE.SESSIONS webservice" CAPTURING JUNK; * PURGE ANY OLD webservices           IF PASSTIME MATCHES '6N' THEN              IPASSTIME = ICONV(PASSTIME[1,2]:':':PASSTIME[3,2]:':':PASSTIME[5,2],'MT')           END ELSE              IPASSTIME = -601 ;* Ensure the time is expired if not 6 digits!           END           BEGIN CASE              CASE SITE$ALLOW.WEBSVC # 'Y'                 * webservice login is not enabled                 LOGIN.OK = FALSE                 LOGIN.MSG = 'Webservice login is not enabled'              CASE USER.LIMIT < 2 AND DATE() > (INSTALL.DATE+30)                 * MUST HAVE A MULTI USER LICENSE TO USE WEBSERVICE AFTER                 * 30 DAY TRIAL PERIOD                 LOGIN.OK = FALSE                 LOGIN.MSG = 'Must have a multi-user license to use webservices'              CASE ABS(TIME()-IPASSTIME) > 600                 * TIME MUST BE WITHIN 10 MINUTES OF MACHINE TIME                 LOGIN.OK = FALSE                 *LOGIN.MSG = 'Request not synced with system time.'                 LOGIN.MSG = 'The request URL has expired. This may be due to differences in the system '                 LOGIN.MSG := 'clock on the MV Dashboard server and the clock used to generate the URL.'              CASE 1                 * VALID PASSWORD IS THE SUM OF MMDDYY + SSMMHH (FROM PASSTIME)                 * INVERT THE TIME TO SSMMHH                 EMITSSAP=''                 FOR TIME.I = 6 TO 1 STEP -1                    EMITSSAP:=PASSTIME[TIME.I,1]                  NEXT TIME.I                 *OTODAY=OCONV(DATE(),'D2-')                 *CONVERT '-' TO '' IN OTODAY                 TODAY.MM=OCONV(DATE(),'DM')'R%%'                 TODAY.DD=OCONV(DATE(),'DD')'R%%'                 TODAY.YY=OCONV(DATE(),'DY')'R%%'                 OTODAY = TODAY.MM:TODAY.DD:TODAY.YY ;* handle non-USA date formats properly                 CALCED.PASSWORD=OTODAY+EMITSSAP                 IF password MATCHES '6N' THEN CHECKED.PASSWORD = password + 0 ELSE CHECKED.PASSWORD = -1                 IF CALCED.PASSWORD = CHECKED.PASSWORD THEN                    LOGIN.OK = TRUE                    USER.ROLE=''*                    CALL PUT.SESSION.VAR("userid",loginid)                 END ELSE                    LOGIN.OK = FALSE                    LOGIN.MSG = 'Invalid password'                 END           END CASE        CASE loginid = 'emailed'           EXECUTE "MVDB.PURGE.SESSIONS emailed" CAPTURING JUNK; * PURGE ANY OLD emailed           OPEN '','MVDB.EMAILED.HTML' TO F.EMAILED.HTML ELSE STOP 201, 'MVDB.EMAILED.HTML'           *           ** PURGED ANY EMAIL REPORTS OVER 10 DAYS OLD           *           EXECUTE 'SELECT MVDB.EMAILED.HTML' CAPTURING JUNK           LOOP              READNEXT EMAILED.ID ELSE EMAILED.ID='DONE'           UNTIL EMAILED.ID='DONE' DO              IF (EMAILED.ID[1,5]+10) < DATE() THEN                 DELETE F.EMAILED.HTML, EMAILED.ID              END           REPEAT           IF SITE$ALLOW.EMAILD # 'Y' THEN              * emaild login is not enabled              LOGIN.OK = FALSE              LOGIN.MSG = 'Emailed login is not enabled'           END ELSE              READV TEST.HTML.REPORT FROM F.EMAILED.HTML, HTML.ID, 1 ELSE TEST.HTML.REPORT='NOTFOUND'              IF TEST.HTML.REPORT = 'NOTFOUND' THEN                 LOGIN.OK = FALSE                 LOGIN.MSG = 'Emailed report not found with ID of ':HTML.ID              END ELSE                 USER.ROLE=''                 LOGIN.OK = TRUE                 INSERT.VARS='dbname':AM:'udview':AM:'udpos1':AM:'udval1'                 INSERT.VALS='Emailed Report':AM:'Emailed Report':AM:1:AM:HTML.ID                 CGI$VARS=INSERT(CGI$VARS,1,0,0,INSERT.VARS)                 CGI$VALS=INSERT(CGI$VALS,1,0,0,INSERT.VALS)              END           END        CASE SITE$AUTH.SUB # ""           READ CATPTR FROM F.MD, SITE$AUTH.SUB ELSE CATPTR = ""           *PJS 07-17-15 UV* IF CATPTR<1> = "VR" THEN           IF CATPTR<1> = "V" THEN ; *PJS 07-17-15 UV*             CALL @SITE$AUTH.SUB(loginid,password,"AUTH",LOGIN.OK,LOGIN.MSG,MAT USER.ITEM)             IF LOGIN.OK = "Y" THEN LOGIN.OK = TRUE             IF NOT(LOGIN.OK MATCHES "1N0N") THEN LOGIN.OK = FALSE           END ELSE             LOGIN.OK = FALSE             LOGIN.MSG = SITE$AUTH.SUB:" authentication subroutine not cataloged."           END        CASE 1           MATREAD USER.ITEM FROM F.MVDB.USERS, loginid THEN             *PJS 07-17-15 UV* IF OCONV(password,"U3060") = USER.PASSWORD THEN             IF DIGEST('MD5',password,1,ENCR.PASSWORD) = 0 THEN               ENCR.PASSWORD = OCONV(ENCR.PASSWORD,'MX0C') ; *PJS 07-17-15 UV*               IF ENCR.PASSWORD = USER.PASSWORD THEN ; *PJS 07-17-15 UV*                 LOGIN.OK = TRUE*                 CALL PUT.SESSION.VAR("userid",loginid)               END             END           END     END CASE  END  IF LOGIN.OK THEN    EXECUTE "MVDB.PURGE.SESSIONS" CAPTURING JUNK ;* Purge out old session data    *    SELECT F.WEB.SESSION    ACTIVE.SESSIONS = ""    USER.ACTIVE.SESSIONS = ""    LOOP      READNEXT WSID ELSE EXIT      READ SREC FROM F.WEB.SESSION, WSID ELSE CONTINUE      LOCATE "userid" IN SREC<1> SETTING UPOS THEN        ASUSER = SREC<2,UPOS>        LOCATE "LastSessionAccess" IN SREC<1> SETTING UPOS THEN          ASDATE = FIELD(SREC<2,UPOS>,'*',1) ;* date          ASTIME = FIELD(SREC<2,UPOS>,'*',2) ;* time          ASAGE = (DATE()-ASDATE) * 86400          ASAGE += (TIME()-ASTIME)        END ELSE ASAGE = 0        IF OCONV(ASUSER,'MCU') = OCONV(loginid,'MCU') THEN          LOCATE ASAGE IN USER.ACTIVE.SESSIONS<3> BY "DR" SETTING ASPOS ELSE NULL          USER.ACTIVE.SESSIONS = INSERT( USER.ACTIVE.SESSIONS, 1, ASPOS, 0, WSID )          USER.ACTIVE.SESSIONS = INSERT( USER.ACTIVE.SESSIONS, 2, ASPOS, 0, ASUSER ) ;* User ID          USER.ACTIVE.SESSIONS = INSERT( USER.ACTIVE.SESSIONS, 3, ASPOS, 0, ASAGE )        END ELSE          LOCATE ASAGE IN ACTIVE.SESSIONS<3> BY "DR" SETTING ASPOS ELSE NULL          ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 1, ASPOS, 0, WSID )          ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 2, ASPOS, 0, ASUSER ) ;* User ID          ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 3, ASPOS, 0, ASAGE )        END      END    REPEAT    *Merge active sessions for this user in front of     *the other sessions to prefer those sessions for cleanup.    IF USER.ACTIVE.SESSIONS # '' THEN      ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 1, 1, 0, USER.ACTIVE.SESSIONS<1> )      ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 2, 1, 0, USER.ACTIVE.SESSIONS<2> )      ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 3, 1, 0, USER.ACTIVE.SESSIONS<3> )    END    ASCNT = DCOUNT( ACTIVE.SESSIONS<1>, @VM )    IF ASCNT > USER.LIMIT THEN      PURGE.LIST = ""      LOOP WHILE ASCNT > USER.LIMIT DO        PURGE.LIST := ACTIVE.SESSIONS<1,1>:" "        ACTIVE.SESSIONS = DELETE( ACTIVE.SESSIONS, 1, 1, 0 )        ACTIVE.SESSIONS = DELETE( ACTIVE.SESSIONS, 2, 1, 0 )        ACTIVE.SESSIONS = DELETE( ACTIVE.SESSIONS, 3, 1, 0 )        ASCNT -= 1      REPEAT      EXECUTE "MVDB.PURGE.SESSIONS ":PURGE.LIST CAPTURING JUNK    END    IF ASCNT = USER.LIMIT THEN      * Logging in will force a user to log off      IF SITE$AUTO.TRIM = 'Y' THEN        EXECUTE "MVDB.PURGE.SESSIONS ":ACTIVE.SESSIONS<1,1> CAPTURING JUNK      END ELSE        READ MSG.TEMPLATE FROM F.WEB.FORMS, "message.html" ELSE MSG.TEMPLATE = "message.html not found."        CALL SWAP(MSG.TEMPLATE,'<!-- MSG_TITLE -->',"User limit exceeded.")        CALL SWAP(MSG.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)        CALL SWAP(MSG.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)        MSG.CONTENT = \<p>Your maximum user limit has been reached. If you choose to log in, user "\:ACTIVE.SESSIONS<2,1>        MSG.CONTENT := \" will be logged out and the user's session data will be lost.</p>\        MSG.CONTENT := '<a href="/dbc/MVDB.MAIN?psid=':ACTIVE.SESSIONS<1,1>:'">Click here</a> to log ':ACTIVE.SESSIONS<2,1>:' out and try again.</a>'        CALL SWAP(MSG.TEMPLATE,'<!-- MSG_CONTENT -->',MSG.CONTENT)        CALL WEB.SEND(MSG.TEMPLATE)        GLOBAL.INFO(100) = 1        STOP      END    END    CALL PUT.SESSION.VAR("userid",loginid)    userid = loginid    CALL PUT.SESSION.VAR("login_date",DATE())    CALL PUT.SESSION.VAR("login_time",TIME())  END ELSE    READ LOGIN.PAGE FROM F.WEB.FORMS, "login.html" ELSE LOGIN.PAGE = "login.html not found."    IF loginid # "" THEN      IF LOGIN.MSG = "" THEN LOGIN.MSG = "Invalid user ID or Password"      CALL SWAP(LOGIN.PAGE,'<!-- ERROR -->',LOGIN.MSG)    END    CALL SWAP(LOGIN.PAGE,'<!-- SITE_LOGO -->',SITE.LOGO)    CALL SWAP(LOGIN.PAGE,'<!--CHARACTER_SET-->',SITE$CHARSET)        CALL SWAP(LOGIN.PAGE,'<!-- SITE_THEME -->',THEME.CSS)    CALL WEB.SEND(LOGIN.PAGE)    GLOBAL.INFO(100) = 1 ;* Intentional Stop    STOP  ENDEND ELSE  * Get the user item.  * If a custom authentication subroutine is in use, we have to call that  * subroutine again in order to get the user record populated  IF SITE$AUTH.SUB # "" THEN    READ CATPTR FROM F.MD, SITE$AUTH.SUB ELSE CATPTR = ""    *PJS 07-17-15 UV* IF CATPTR<1> = "VR" THEN    IF CATPTR<1> = "V" THEN ; *PJS 07-17-15 UV*      CALL @SITE$AUTH.SUB(userid,"","READ",LOGIN.OK,LOGIN.MSG,MAT USER.ITEM)    END ELSE MAT USER.ITEM = ""  END ELSE    MATREAD USER.ITEM FROM F.MVDB.USERS, userid ELSE MAT USER.ITEM = ''  ENDENDIF USER.ROLE = "Administrator" AND NOT(adminauth) THEN  * The user is an admin based on the USER.ROLE setting in their user record  adminauth = 1  CALL PUT.SESSION.VAR("adminauth",adminauth)ENDG$ADMIN.USER = adminauth*G$USERID = userid* 10-07-16 Implement the POST-REDIRECT-GET pattern to prevent the browser* from prompting before resubmit when using back or refresh buttons after* a POST (used for login form only at this time).LOCATE "REQUEST_METHOD" IN CGI$VARS SETTING POS THEN  IF CGI$VALS<POS> = "POST" THEN    LOCATE "dblogin" IN CGI$VARS SETTING POS THEN      IF CGI$VALS<POS> THEN        * Redirect to MVDB.MAIN default dashboard after valid login        HTML = ''        HTML<-1> = '<html>'        HTML<-1> = '<body>'        HTML<-1> = '<script type="text/javascript">'        HTML<-1> = 'window.location="':CGI$PATH:'/MVDB.MAIN?dbname=";' ;* start with default dashboard after login        HTML<-1> = '</script>'        HTML<-1> = '</body>'        HTML<-1> = '</html>'        CALL WEB.SEND(HTML)        GLOBAL.INFO(100) = 1 ;* Intentional Stop        STOP      END    END    * handle P-R-G for widget input form submit*    WRITE CGI$VARS ON F.MVDB.UDATA,SESSION$ID:'$POSTVARS'*    WRITE CGI$VALS ON F.MVDB.UDATA,SESSION$ID:'$POSTVALS'*    HTML = ''*    HTML<-1> = '<html>'*    HTML<-1> = '<body>'*    HTML<-1> = '<script type="text/javascript">'*    HTML<-1> = 'window.location="':CGI$PATH:'/MVDB.MAIN?dbprg=1";'*    HTML<-1> = '</script>'*    HTML<-1> = '</body>'*    HTML<-1> = '</html>'*    CALL WEB.SEND(HTML)*    GLOBAL.INFO(100) = 1 ;* Intentional Stop*    STOP*  ENDEND*LOCATE "dbprg" IN CGI$VARS SETTING POS THEN*  IF CGI$VALS<POS> THEN*    READ CGI$VARS FROM F.MVDB.UDATA,SESSION$ID:'$POSTVARS' THEN*      READ CGI$VALS FROM F.MVDB.UDATA,SESSION$ID:'$POSTVALS' ELSE CGI$VALS = ''*    END*    DELETE F.MVDB.UDATA,SESSION$ID:'$POSTVARS'*    DELETE F.MVDB.UDATA,SESSION$ID:'$POSTVALS'*  END*END* END OF 10-07-16*LOCATE 'generatepdf' IN CGI$VARS SETTING GENERATE.PDF ELSE GENERATE.PDF=0; * 4-25-16LOCATE 'generateexcel' IN CGI$VARS SETTING GENERATE.EXCEL ELSE GENERATE.EXCEL=0; *EXCEL* 6-27-16W$EXCELABLE=0;   *EXCEL* 6-27-16GO.BACK=0;   * 4-25-16*GOBACK.REENTRY:; * 4-25-16** udview, if present, is the view name to which  the associated* udpos and udval parameters apply.LOCATE "udview" IN CGI$VARS SETTING POS THEN  udview = CGI$VALS<POS>END ELSE udview = ""*LOCATE "dbname" IN CGI$VARS SETTING POS THEN  CALL PUT.SESSION.VAR("current_db",CGI$VALS<POS>)END*LOCATE 'refresh' IN CGI$VARS SETTING POS THEN  *really, this should be stored in the user record per db key  IF CGI$VALS<POS> = '0' THEN CGI$VALS<POS> = ''  CALL GET.SESSION.VAR("current_db",r.current.db)  IF r.current.db = '' THEN r.current.db = USER.DEFAULT.DB  CALL PUT.SESSION.VAR(r.current.db:"!refresh",CGI$VALS<POS>)END*9-23-16***9-23-16*** 4-25-16 SUPPORT AUTOMATIC BACKOUT FROM A DRILLDOWN*9-23-16***9-23-16**EXCEL*IF NOT(GO.BACK) AND NOT(GENERATE.PDF) THEN*9-23-16*IF NOT(GO.BACK) AND NOT(GENERATE.PDF) AND NOT(GENERATE.EXCEL) THEN; *EXCEL* 6-27-16*9-23-16*   CALL DRILLDOWN.STACK.RTNE(F.MVDB.UDATA,DRILLDOWN.STACK,GO.BACK)*9-23-16*   IF GO.BACK THEN GOTO GOBACK.REENTRY*9-23-16*END ELSE*9-23-16*   DRILLDOWN.STACK = ""*9-23-16*ENDDRILLDOWN.STACK=''; *9-23-16G$DRILLDOWN.MODE = FALSELOCATE "dd" IN CGI$VARS SETTING POS THEN   IF CGI$VALS<POS> <> '' THEN      G$DRILLDOWN.MODE = TRUE   ENDEND*9-23-16** END OF 4-25-16*LOCATE "sw" IN CGI$VARS SETTING POS THEN  FORM.SUBMIT.WIDGET = CGI$VALS<POS>END ELSE FORM.SUBMIT.WIDGET = ""*IF G$DRILLDOWN.MODE THEN  * This is a drill-down call. Load up the "drilldown" dashboard  * and populate it only with this single widget.  LOCATE "dd_from" IN CGI$VARS SETTING POS THEN    G$DD.REFERRER = CGI$VALS<POS>  END  LOCATE "dd_from_db" IN CGI$VARS SETTING POS THEN    G$DD.FROM.DB = CGI$VALS<POS>  END  G$CURRENT.DB = "drilldown"  MAT DB.ITEM = ''  READV DD.FROM.DB.THEME FROM F.MVDB.DEFS, G$DD.FROM.DB, 7 ELSE DD.FROM.DB.THEME = ''  DB.THEME = DD.FROM.DB.THEME  DB.WIDGETS = udviewEND ELSE  CALL GET.SESSION.VAR("current_db",current.db)  IF current.db # "" THEN    G$CURRENT.DB = current.db  END ELSE    * No current dashboard is available in the session.    * Must be the first time through. Go get the default.    G$CURRENT.DB = USER.DEFAULT.DB    IF G$CURRENT.DB = '' THEN G$CURRENT.DB = "EMPTY" ;* Empty dashboard  END  *  MATREAD DB.ITEM FROM F.MVDB.DEFS, G$CURRENT.DB ELSE MAT DB.ITEM = ''ENDIF DB.THEME # '' THEN  READV THEME.CSS FROM F.MVDB.THEMES, DB.THEME, 1 ELSE THEME.CSS = ''END ELSE  READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''END** PJS 09-23-16: user altertnate logo overrides site logoIF USER.ALT.LOGO <> '' THEN  SITE.LOGO = USER.ALT.LOGOEND ELSEIF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  ENDENDIF NOT(INDEX(SITE.LOGO,'/',1)) THEN  SITE.LOGO = '/db/images/':SITE.LOGOEND*CALL GET.SESSION.VAR("login_date",login.date)CALL GET.SESSION.VAR("login_time",login.time)G$LOGIN.DATE = login.dateG$LOGIN.TIME = login.time**PDF** When generating a PDF, get name of widget to render into PDF.* When generating iframe content, get the HTML widget name to* show in the iframe.WIDGET.OWN.STYLE = FALSESINGLE.WIDGET = ""PDF.WIDGET.NAME = ""* 4-25-16 *IF PDF$ENABLED THEN* 4-25-16 *  LOCATE 'generatepdf' IN CGI$VARS SETTING POS ELSE POS=0* 4-25-16 *  IF POS THEN* 4-25-16 *    PDF.WIDGET.NAME = CGI$VALS<POS>* 4-25-16 *    SINGLE.WIDGET = PDF.WIDGET.NAME* 4-25-16 *  END* 4-25-16 *END*** 4-25-16 CHANGED LOGIC*IF PDF$ENABLED AND GENERATE.PDF THEN  PDF.WIDGET.NAME = CGI$VALS<GENERATE.PDF>  SINGLE.WIDGET = PDF.WIDGET.NAME  W$PDFABLE=1  DB.WIDGETS=PDF.WIDGET.NAMEEND* END OF 4-25-16***EXCEL* 6-27-16 ADDED LOGIC*IF GENERATE.EXCEL THEN  EXCEL.WIDGET.NAME = CGI$VALS<GENERATE.EXCEL>  SINGLE.WIDGET = EXCEL.WIDGET.NAME  W$EXCELABLE=1  DB.WIDGETS=EXCEL.WIDGET.NAMEEND ELSE EXCEL.WIDGET.NAME=''* END OF 6-27-16IFRAME.WIDGET.NAME = ""LOCATE 'iframewidget' IN CGI$VARS SETTING POS ELSE POS=0IF POS THEN  IFRAME.WIDGET.NAME = CGI$VALS<POS>  SINGLE.WIDGET = IFRAME.WIDGET.NAMEEND** Build a list of subroutines to call to create this dashboard*DISP.CNT = DCOUNT( DB.WIDGETS, VM )WIDGET.NAME.POS = FALSEFOR DX = 1 TO DISP.CNT  MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, DB.WIDGETS<1,DX> THEN    ADD.OK = TRUE    IF WIDGET.USERS = "ADMIN" THEN      IF NOT(adminauth) THEN ADD.OK = FALSE ;* Only usable by authenticated admins    END ELSE IF WIDGET.USERS # "" THEN ;* Some user restrictions have been assigned      LOCATE userid IN WIDGET.USERS<1> SETTING POS ELSE ADD.OK = FALSE    END    IF ADD.OK THEN      *PDF* if generating PDF or iframe content, exclude other widgets      *EXCEL* also applies to generating EXCEL      IF SINGLE.WIDGET = "" OR SINGLE.WIDGET = DB.WIDGETS<1,DX> THEN        WIDGET.NAME.POS += 1        G$WIDGET.NAME.LIST<1,WIDGET.NAME.POS> = DB.WIDGETS<1,DX>        G$WIDGET.SUB.LIST<1,WIDGET.NAME.POS> = WIDGET.SUB      END    END  ENDNEXT DX*DIM TEMPLATE.AREA(5)MAT TEMPLATE.AREA = ''*MAT GLOBAL.TEMP.DATA = '' ;* InitializeMATREAD GLOBAL.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$UG" ELSE MAT GLOBAL.USER.DATA = ''*CALL GET.SESSION.VAR("debug_widgets",DEBUG.WIDGETS) ;* Retrieve a list of widgets user is debuggingIF adminauth THEN ;* Only administrators can put widgets into debug mdoe.  LOCATE "debug_widget" IN CGI$VARS SETTING POS THEN    DEBUG.WIDGET = CGI$VALS<POS>    LOCATE DEBUG.WIDGET IN DEBUG.WIDGETS SETTING POS ELSE      DEBUG.WIDGETS<-1> = DEBUG.WIDGET      CALL PUT.SESSION.VAR("debug_widgets",DEBUG.WIDGETS)    END  END  LOCATE "undebug_widget" IN CGI$VARS SETTING POS THEN    UNDEBUG.WIDGET = CGI$VALS<POS>    LOCATE UNDEBUG.WIDGET IN DEBUG.WIDGETS SETTING DPOS THEN      DEBUG.WIDGETS = DELETE( DEBUG.WIDGETS, DPOS, 0, 0 )      CALL PUT.SESSION.VAR("debug_widgets",DEBUG.WIDGETS)    END  ENDEND*CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS) ;* Retrieve a list of failed widgets this sessionLOCATE "unfail_widget" IN CGI$VARS SETTING POS THEN  * The user has asked to take this widget out of failed mode and try running the widget again.  UNFAIL.WIDGET = CGI$VALS<POS>  LOCATE UNFAIL.WIDGET IN FAILED.WIDGETS SETTING DPOS THEN    FAILED.WIDGETS = DELETE( FAILED.WIDGETS, DPOS, 0, 0 )    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  ENDEND** Was there a running widget that didn't complete? If so, it's a failed widget that didn't return* control to MVDB.MAIN. Let's add it to the list of failed widgets this session so we can avoid* producing blank pages for the user.*CALL GET.SESSION.VAR("running_widget",FAILED.WIDGET)CALL GET.SESSION.VAR("running_widget_dt",FAILED.WIDGET.DT)IF FAILED.WIDGET # "" THEN  FW.DATE = FIELD( FAILED.WIDGET.DT, '*', 1 )  FW.TIME = FIELD( FAILED.WIDGET.DT, '*', 2 )  FW.LAPSE = TIME() - FW.TIME  FW.LAPSE += ((DATE() - FW.DATE) * 86400)  IF SITE$W.MAX.DUR = "" THEN SITE$W.MAX.DUR = 10 ;* Default  IF FW.LAPSE < SITE$W.MAX.DUR THEN FAILED.WIDGET = ""ENDIF FAILED.WIDGET # "" THEN  CALL PUT.SESSION.VAR("running_widget","")  CALL PUT.SESSION.VAR("running_widget_dt","")  LOCATE FAILED.WIDGET IN FAILED.WIDGETS SETTING FWPOS ELSE    FAILED.WIDGETS<-1> = FAILED.WIDGET    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  ENDEND** Widgets appearing in FAILED.WIDGETS and DEBUG.WIDGETS are both hijacked at runtime, and our* SUB.DEBUG.WIDGET subroutine is executed in place of the subroutine in the widget definition.* The difference is that FAILED.WIDGETS are widgets that this program has determined to have* failed. DEBUG.WIDGETS are functional widgets that the user has put into debug mode.* In both cases, the widget remains in this list until the user removes it using controls * within the SUB.DEBUG.WIDGET widget.*WIDGET.CNT = DCOUNT( G$WIDGET.NAME.LIST, VM )FOR VX = 1 TO WIDGET.CNT  WIDGET.NAME = G$WIDGET.NAME.LIST<1,VX>  MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, WIDGET.NAME ELSE MAT WIDGET.ITEM = ''*9-23-16** FIX 6-1-16 *  MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME ELSE MAT WIDGET.USER.DATA = ''*9-23-16** FIX 6-1-16 **9-23-16*  IF GO.BACK THEN *9-23-16*     MAT WIDGET.USER.DATA=''*9-23-16*   END ELSE*9-23-16*     MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME ELSE MAT WIDGET.USER.DATA = ''*9-23-16*   END*9-23-16** END OF 6-1-16  MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME ELSE MAT WIDGET.USER.DATA = ''; *9-23-16*  *  MAP.TYPE.SUFFIX = ""  IF WIDGET.NAME = udview THEN    * We need to set values in WIDGET.USER.DATA before calling this routine    * Process links.    UDN = 1    SEARCH.DONE = FALSE    LOOP      SEARCH.NAME = "udpos":UDN      LOCATE SEARCH.NAME IN CGI$VARS SETTING POS THEN        udpos = CGI$VALS<POS>        IF udpos MATCHES "1N0N" THEN          IF udpos < 1 OR udpos > 100 THEN UDN +=1 ; CONTINUE        END ELSE UDN += 1 ; CONTINUE        SEARCH.NAME = "udval":UDN        LOCATE SEARCH.NAME IN CGI$VARS SETTING POS THEN          WIDGET.USER.DATA(udpos) = CGI$VALS<POS>        END      END ELSE SEARCH.DONE = TRUE    UNTIL SEARCH.DONE DO      UDN += 1    REPEAT    * Process Inputs.    VARCNT = DCOUNT( CGI$VARS, AM )    FOR CGIVX = 1 TO VARCNT      IF CGI$VARS<CGIVX>[1,4] = "inp_" THEN        udpos = FIELD(CGI$VARS<CGIVX>,'_',2)        IF udpos MATCHES "1N0N" THEN          IF udpos >= 1 AND udpos <= 100 THEN            WIDGET.USER.DATA(udpos) = CGI$VALS<CGIVX>          END        END      END      *Look for checkboxes that didn't come back      *and stuff a zero in there.      IF CGI$VARS<CGIVX>[1,9] = 'mvdbcxbx_' THEN        udpos = FIELD(CGI$VARS<CGIVX>,'_',2)        LOCATE 'inp_':udpos IN CGI$VARS SETTING CXBX.POS ELSE          IF udpos >= 1 AND udpos <= 100 THEN            WIDGET.USER.DATA(udpos) = 0          END        END      END    NEXT CGIVX    *    LOCATE 'mapdd' IN CGI$VARS SETTING POS THEN      * This is a map drilldown. Get the map name from the state code      STATE.CODE = WIDGET.USER.DATA(1)      READ STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ""      CONVERT "," TO @VM IN STATE.NAMES      LOCATE STATE.CODE IN STATE.NAMES<1> SETTING STATE.POS THEN        WIDGET.USER.DATA(2) = STATE.NAMES<2,STATE.POS>        MAP.TYPE.SUFFIX = STATE.CODE ;* Add this to the widget type      END    END  END  *  * If this is a USA map widget set in drill-down mode for a specific state  * that state name will be in WIDGET.USER.DATA(1). This code below is necessary  * to ensure that the widget stays in the state map mode until the user  * changes it.  *  IF MAP.TYPE.SUFFIX = "" THEN MAP.TYPE.SUFFIX = WIDGET.USER.DATA(1)<1>  *  IF FORM.SUBMIT.WIDGET = WIDGET.NAME THEN    * The user clicked the "go" button on the form section of this widget.    G$SUBMITTED = 1  END ELSE    G$SUBMITTED = 0  END  *  * The widget debugger uses GLOBAL.INFO(90) to determine if the widget is in debug  * mode due to user request, or if it is being forced into debug mode by MVDB.MAIN  *  GLOBAL.INFO(90) = ""  GLOBAL.INFO(91) = G$WIDGET.SUB.LIST<1,VX> ;* Original subroutine name  WDEBUG.MODE = 0 ; WFAIL.MODE = 0  *  LOCATE WIDGET.NAME IN FAILED.WIDGETS SETTING DUM THEN    * This widget failed last time we tried to run it. Let's run the "Failed Widget" subroutine instead.    * This subroutine will have access to all of the information that would have been passed to the    * failed widget, so diagnostic information can be presented through this widget.    GLOBAL.INFO(90) = "FAIL"    SUBNAME = "SUB.DEBUG.WIDGET"    WFAIL.MODE = 1  END ELSE    LOCATE WIDGET.NAME IN DEBUG.WIDGETS SETTING DUM THEN      GLOBAL.INFO(90) = "DEBUG"      SUBNAME = "SUB.DEBUG.WIDGET"      WDEBUG.MODE = 1    END ELSE      SUBNAME = G$WIDGET.SUB.LIST<1,VX>    END  END  MAT WIDGET.INFO = "" ;* clear this one out for the new call  G$WIDGET.NAME = WIDGET.NAME  G$WIDGET.SUB = SUBNAME  G$WIDGET.CALL.TIME<1,VX> = DATE():"*":TIME()*#MAKE# RL IF 0 THEN  START.TIMER = SYSTEM(12)*#MAKE# RL END  READ TST FROM F.MD, SUBNAME THEN    CALL PUT.SESSION.VAR("running_widget",WIDGET.NAME)    DT.STAMP = DATE():"*":TIME()    CALL PUT.SESSION.VAR("running_widget_dt",DT.STAMP)    CALL @SUBNAME    CALL PUT.SESSION.VAR("running_widget","")    CALL PUT.SESSION.VAR("running_widget_dt","")  END ELSE    W$TITLE = WIDGET.NAME:" (ERROR)"    W$TYPE = "TEXT"    W$TEXT.DATA = SUBNAME:" not cataloged."  END  * Special handling for drill-down to a state level on a USA Map  IF W$TYPE = "USAMAP" AND MAP.TYPE.SUFFIX # "" THEN    W$TYPE := ":":MAP.TYPE.SUFFIX  END*#MAKE# RL IF 0 THEN  G$WIDGET.CALL.DUR<1,VX> = SYSTEM(12) - START.TIMER*#MAKE# RL END  MATWRITE WIDGET.USER.DATA ON F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME  *  IF NOT(W$HIDDEN) THEN    *EXCEL* 6-27-16 DETERMINE IF W$TYPE CAN GENERATE EXCEL    BEGIN CASE       CASE W$EXCELABLE; NULL       CASE W$TYPE = 'TABLE'; W$EXCELABLE=1       CASE INDEX(W$TYPE,'COLUMN',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'LINE',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'BAR',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'AREA',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'PIE',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'DOUGHNUT',1); W$EXCELABLE=1       CASE 1; W$EXCELABLE=0    END CASE    *EXCEL* END OF 6-27-16    GOSUB MAKE.HTML    LOCATE WIDGET.NAME IN DB.WIDGETS<1> SETTING DB.DEFS.POS THEN      AREA = DB.WIDGET.AREA<1,DB.DEFS.POS>      IF NOT(AREA MATCHES "1N0N") THEN AREA = 1      IF AREA < 1 OR AREA > 5 THEN AREA = 1    END ELSE AREA = 1            TEMPLATE.AREA(AREA)<-1> = HTML.DIV  ENDNEXT VX*MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA,SESSION$ID:"$UG"MATWRITE W$WEBSERVICE.DATA ON F.MVDB.UDATA,SESSION$ID:"$WEBSERVICE"; *11-30-15** Send template**PDF* Use special inner template for PDF & iframesIF IFRAME.WIDGET.NAME # "" THEN  * iframe content just contains widget-generated HTML, no extra styles, script, etc.  TEMPLATE = "<!-- AREA1 --><!-- AREA2 --><!-- AREA3 --><!-- AREA4 --><!-- AREA5 -->"END ELSE  IF PDF.WIDGET.NAME # "" THEN    IF WIDGET.OWN.STYLE THEN      * Widget HTML has <head> tag - supplies its own styles      TEMPLATE = "<!-- AREA1 --><!-- AREA2 --><!-- AREA3 --><!-- AREA4 --><!-- AREA5 -->"    END ELSE      * PDF template has single <div> for all "areas"      READ TEMPLATE FROM F.WEB.FORMS, "pdf_inner_template" ELSE TEMPLATE = "pdf_inner_template not found."    END  END ELSE    * normal widget template with area for header, 3 columns & footer    READ TEMPLATE FROM F.WEB.FORMS, "db_inner_template" ELSE TEMPLATE = "db_inner_template not found."  ENDENDCALL SWAP(TEMPLATE,'<!-- column_style -->',"layout":DB.TEMPLATE)*FOR AX = 1 TO 5  CALL SWAP(TEMPLATE,"<!-- AREA":AX:" -->",TEMPLATE.AREA(AX))NEXT AX**PDF* Use special PDF html template for PDF outputIF IFRAME.WIDGET.NAME # "" THEN  * iframe content just contains widget-generated HTML, no extra styles, script, etc.  MAIN.TEMPLATE = "<!-- DASHBOARD -->"END ELSE  IF PDF.WIDGET.NAME # "" THEN    IF WIDGET.OWN.STYLE THEN      * Widget HTML has <head> tag - supplies its own styles      MAIN.TEMPLATE = "<!-- DASHBOARD -->"    END ELSE      * PDF template does not include print, refresh, header or footer      READ MAIN.TEMPLATE FROM F.WEB.FORMS, "pdftemplate" ELSE MAIN.TEMPLATE = "pdftemplate missing."    END  END ELSE    * normal dashboard template    READ MAIN.TEMPLATE FROM F.WEB.FORMS, "dbtemplate" ELSE MAIN.TEMPLATE = "dbtemplate missing."  ENDEND** Insert header stuffADMIN.HEADER = ""IF adminauth = 1 THEN  ADMIN.HEADER := '<li class="admin_tab"><a href="':CGI$PATH:'/MVDB.ADMIN">Admin Area</a></li>'ENDADMIN.HEADER := '<li class="admin_tab"><a href="':CGI$PATH:'/MVDB.MAIN?logout">Log Out</a></li>'HEADER = '<div id="dashboard_nav"><ol class="dashboard_list">'CALL SWAP(MAIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)*11-30-15*EXECUTE "SSELECT MVDB.DEFS BY DB.SORT" CAPTURING JUNKIF NOT(W$EMAILED.REPORT) AND NOT(W$WEBSERVICE) THEN EXECUTE "SSELECT MVDB.DEFS BY DB.SORT" CAPTURING JUNK; *11-30-15DB.LIST = ''LOOP  READNEXT ID ELSE EXIT  DB.LIST<-1> = IDREPEATDB.CNT = DCOUNT( DB.LIST, AM )FOR DBX = 1 TO DB.CNT  ID = DB.LIST<DBX>  MATREAD DB.ITEM FROM F.MVDB.DEFS, ID ELSE MAT DB.ITEM = ""  ADD.OK = TRUE  IF DB.USERS.ALLOWED = "ADMIN" THEN    IF NOT(adminauth) THEN ADD.OK = FALSE ;* This is only for authenticated admins  END ELSE IF DB.USERS.ALLOWED # "" THEN ;* Some user restrictions have been assigned     LOCATE userid IN DB.USERS.ALLOWED<1> SETTING POS ELSE ADD.OK = FALSE   END   IF ADD.OK = TRUE THEN    IF ID = G$CURRENT.DB THEN      HEADER := '<li class="db_active"><a href="':CGI$PATH:'/MVDB.MAIN?dbname=':ID:'">':ID:'</a></li>'    END ELSE      HEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN?dbname=':ID:'">':ID:'</a></li>'    END    HEADER := CHAR(10)  ENDNEXT DBXHEADER := ADMIN.HEADERHEADER := '</ol></div>'IF THEME.CSS # '' THEN THEME.CSS = '<link rel="Stylesheet" href="/db/themes/':THEME.CSS:'" media="screen" type="text/css" />'CALL SWAP(MAIN.TEMPLATE,'<!-- HEADER -->',HEADER)CALL SWAP(MAIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)CALL SWAP(MAIN.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)* Insert footer stuffFOOTER = ''*01-25-16*IF G$DRILLDOWN.MODE THEN*4-25-16*IF G$DRILLDOWN.MODE AND NOT(W$WEBSERVICE) THEN; *01-25-16*4-25-16*  IF G$DD.FROM.DB # "" THEN*4-25-16*    URLENCODE.STRING = G$DD.FROM.DB*4-25-16*    GOSUB URL.ENCODE*4-25-16*    DB.URL = NEW.STRING*4-25-16*    FOOTER = '<a href="/dbc/MVDB.MAIN?dbname=':DB.URL:'">Go Back</a><br />'*4-25-16*  END*4-25-16*END*9-23-16***9-23-16*** 4-25-16 NEW SUPPORT FOR ALLOWING BACKUP*9-23-16***9-23-16*IF DRILLDOWN.STACK<2> <> '' THEN*9-23-16*   FOOTER='<a href="/dbc/MVDB.MAIN?dbname=go_back">Go Back</a><br />'*9-23-16* END*9-23-16** END OF 4-25-16IF WATERMARK # '' THEN  FOOTER := WATERMARK:'<br/>'ENDCALL SWAP(MAIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)*CALL GET.SESSION.VAR(G$CURRENT.DB:"!refresh",REFRESH.RATE)REFRESH = ""IF REFRESH.RATE # '' THEN  RATES = "1":VM:"2":VM:"3":VM:"4":VM:"5":VM:"6":VM:"7":VM:"8":VM:"9"  RATES<2> = "15":VM:"30":VM:"60":VM:"120":VM:"300":VM:"600":VM:"900":VM:"1800":VM:"3600"  LOCATE REFRESH.RATE IN RATES<1> SETTING RPOS THEN    REFRESH = "<meta http-equiv='refresh' content='":RATES<2,RPOS>:"'>"  ENDEND*IF SITE$REFRESH = 'Y' THEN  READ REFRESH.SLIDER FROM F.WEB.FORMS, 'RefreshSlider' ELSE REFRESH.SLIDER=''  CALL SWAP(MAIN.TEMPLATE,'<!-- RefreshSlider -->',REFRESH.SLIDER)  CALL SWAP(MAIN.TEMPLATE,'<!-- REFRESH_RATE -->',REFRESH.RATE)  CALL SWAP(MAIN.TEMPLATE,'<!-- REFRESH -->',REFRESH)  READ TRACK FROM F.WEB.FORMS, 'outerTrackWrapper' ELSE TRACK = ''  CALL SWAP(MAIN.TEMPLATE,'<!-- outerTrackWrapper -->',TRACK)  ENDCALL SWAP(MAIN.TEMPLATE,'<!-- DASHBOARD -->',TEMPLATE)**PDF* Generate the PDF from HTML in MAIN.TEMPLATEIF PDF$ENABLED AND W$PDFABLE AND PDF.WIDGET.NAME # "" THEN  CALL SUB.PDF.FUNC('generate', MAIN.TEMPLATE)  MAIN.TEMPLATE = ''END*EXCEL* Generate the EXCEL from HTML in MAIN.TEMPLATE* 6-27-16  *EXCEL*IF W$EXCELABLE AND EXCEL.WIDGET.NAME # "" THEN  CALL SUB.EXCEL.FUNC('generate', MAIN.TEMPLATE,EXCEL.WIDGET.NAME)END* END OF 6-27-16 *EXCEL***** 9-23-16 NEW DRILLDOWN AND BACKUP LOGIC REQUIRES SAVING GLOBAL.USER.DATA**         AT COMPLETION OF PROCESS**READ DD.STACK FROM F.MVDB.UDATA, SESSION$ID:'$DD.STACK' ELSE DD.STACK=''*DD.LEVEL=DCOUNT(DD.STACK,AM)*IF NOT(DD.LEVEL) THEN DD.LEVEL=1*MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA, SESSION$ID:'$DD.':DD.LEVEL:'.GUD'*MATWRITE WIDGET.USER.DATA ON F.MVDB.UDATA, SESSION$ID:'$':WIDGET.NAME:'$DD.':DD.LEVEL:'.WUD'; * 9-23-16*CALL WEB.SEND(MAIN.TEMPLATE)GLOBAL.INFO(100) = 1 ;* Process completed successfullySTOP*MAKE.HTML: **HTML = ''MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, W$TYPE ELSE MAT WIDGET.TYPES = ""WIDGET.OWN.STYLE = FALSE ;*PDF* set to TRUE if widget-generated HTML includes <head> tag*BEGIN CASE  CASE WT$GROUP = "LC" OR WT$GROUP = "BAR"    IF WT$GROUP = "BAR" THEN CHART.TYPE = "BAR" ELSE      CHART.TYPE = "FCLINECOL"      MULTI.SERIES = (WT$HANDLER = "M")    END    CALL XML.ENCODE(W$BAR.VALUES,"")    CALL XML.ENCODE(W$BAR.LABELS,"")    CALL XML.ENCODE(W$BAR.XLABELS,"")    CALL XML.ENCODE(W$BAR.XMEMO,"")    CALL XML.ENCODE(W$BAR.YMEMO,"")    CALL XML.ENCODE(W$BAR.CAPTION,"")    *1-26-15* W$PRINTABLE = 0  CASE WT$GROUP = "PIE"    CHART.TYPE = WT$HANDLER    CALL XML.ENCODE(W$PIE.LABELS,"")    CALL XML.ENCODE(W$PIE.VALUES,"")    CALL XML.ENCODE(W$PIE.CAPTION,"")    *1-26-15* W$PRINTABLE = 0  CASE WT$GROUP = "FW"    CHART.TYPE = WT$HANDLER    FW.NAME = WT$SWF    CALL XML.ENCODE(W$FW.LOWER.LIMIT.LABEL,"")    CALL XML.ENCODE(W$FW.UPPER.LIMIT.LABEL,"")    CALL XML.ENCODE(W$FW.CAPTION,"")    CALL XML.ENCODE(W$FW.SUBCAPTION,"")    CALL XML.ENCODE(W$FW.TRENDPOINT.LABELS,"")    *1-26-15* W$PRINTABLE = 0  CASE FIELD(W$TYPE,':',1) = "MAP"    CHART.TYPE = "MAP"    CHART.TYPE<2> = FIELD( W$TYPE,':',2)    *1-26-15* W$PRINTABLE = 0  CASE W$TYPE = "USAMAP"    CHART.TYPE = "MAP"    CHART.TYPE<2> = "USA"    *1-26-15* W$PRINTABLE = 0  CASE 1    CHART.TYPE = W$TYPEEND CASE*CHK.VAL = OCONV("123456","MD2$,")CURRENCY = CHK.VAL[1,1]THOUSAND = CHK.VAL[3,1]DECIMAL = CHK.VAL[7,1]**Make sure values are in the correct format for fusion charts*All the positions in WIDGET.INFO we're going to modifyCONV.POS.LIST = 41:AM:44:AM:45:AM:63:AM:73:AM:75:AM:61:AM:62:AMCONV.POS.LIST := 64:AM:54:AM:58:AM:59:AM:11:AM:17:AM:18:AM:66CONV.POS.LIST.LEN = DCOUNT(CONV.POS.LIST,AM)FOR CONV.POS = 1 TO CONV.POS.LIST.LEN  THIS.VAL = WIDGET.INFO(CONV.POS.LIST<CONV.POS>)  IF THIS.VAL # '' THEN    AM.CNT = DCOUNT(THIS.VAL,AM)    FOR ON.AM = 1 TO AM.CNT      VM.CNT = DCOUNT(THIS.VAL<ON.AM>,VM)      FOR ON.VM = 1 TO VM.CNT        SVM.CNT = DCOUNT(THIS.VAL<ON.AM,ON.VM>,SVM)        FOR ON.SVM = 1 TO SVM.CNT          CONV.VAL = THIS.VAL<ON.AM,ON.VM,ON.SVM>          IF OCONV(CONV.VAL,"MCN") # CONV.VAL THEN ;*output formatted            *Convert decimal to . and strip thousand separator            CONVERT DECIMAL:THOUSAND TO '.' IN CONV.VAL            THIS.VAL<ON.AM,ON.VM,ON.SVM> = CONV.VAL          END        NEXT ON.SVM      NEXT ON.VM    NEXT ON.AM    WIDGET.INFO(CONV.POS.LIST<CONV.POS>) = THIS.VAL  ENDNEXT CONV.POS*UPDATE.OPTS = W$CHART.OPTIONSOPTS.DELIM = AMGOSUB OPTS.UPDATEW$CHART.OPTIONS = UPDATE.OPTS*CONVERT '"' TO "'" IN W$FW.METER.VALUE.OPTSCONVERT '"' TO "'" IN W$FW.METER.TARGET.OPTSCONVERT '"' TO "'" IN W$FW.VALUE.OPTSCONVERT '"' TO "'" IN W$PIE.VALUE.OPTSCONVERT '"' TO "'" IN W$BAR.VALUE.OPTSCONVERT '"' TO "'" IN W$BAR.LABEL.OPTSCONVERT '"' TO "'" IN W$BAR.TREND.OPTSCONVERT '"' TO "'" IN W$BAR.XLABEL.OPTSCONVERT '"' TO "'" IN W$MAP.VALUE.OPTSCONVERT '"' TO "'" IN W$MAP.RANGE.OPTSCONVERT '"' TO "'" IN W$FW.SPARK.TREND.OPTSCONVERT '"' TO "'" IN W$FW.DIAL.OPTSCONVERT '"' TO "'" IN W$FW.TRENDPOINT.OPTS*CONVERT @VM TO " " IN W$FW.METER.TARGET.OPTSCONVERT @VM TO " " IN W$BAR.LABEL.OPTS*CONVERT @AM TO " " IN W$FW.METER.TARGET.OPTS** Set up default widget dimensions*  BEGIN CASE    CASE W$WIDTH = 1 AND DB.TEMPLATE = 3      *CHART.WIDTH = 220      *CHART.HEIGHT = 180      CHART.WIDTH = 260      CHART.HEIGHT = 240    CASE W$WIDTH = 1      *CHART.WIDTH = 220      *CHART.HEIGHT = 180      CHART.WIDTH = 300      CHART.HEIGHT = 270    CASE W$WIDTH = 2      *CHART.WIDTH = 400      *CHART.HEIGHT = 280      CHART.WIDTH = 520      CHART.HEIGHT = 350    CASE W$WIDTH = 3 OR 1      *CHART.WIDTH = 600      *CHART.HEIGHT = 400      CHART.WIDTH = 800      CHART.HEIGHT = 530  END CASE**DEBUG='CHART.TYPE=':CHART.TYPE*DEBUG<-1>='FUSION.WIDGETS.ENABLED=':FUSION.WIDGETS.ENABLED*TEMP.VARS=CGI$VARS; CONVERT CHAR(254) TO CHAR(253) IN TEMP.VARS*DEBUG<-1>='VARS=':TEMP.VARS*TEMP.VALS=CGI$VALS; CONVERT CHAR(254) TO CHAR(253) IN TEMP.VALS*DEBUG<-1>='VALS=':TEMP.VALS*WRITE DEBUG ON F.WEB.SESSION, 'DEBUG.TEST'*  BEGIN CASE    CASE CHART.TYPE[1,2] = "FW" AND FUSION.WIDGETS.ENABLED = 0 OR (CHART.TYPE<1> = "MAP" OR FIELD(W$TYPE,':',1) = "USAMAP" AND MAPS.ENABLED = 0)      W$TEXT.DATA = "Widget type ":W$TYPE<1>:" is not enabled."      W$TYPE = "TEXT"      W$INPUT.PROMPT = ""      W$LINK.LABEL = ""      W$LINK.ICON = ""      W$LINK.ICON.TXT = ""      W$LINK.LOCATION = ""      W$LINK.URL = ""      W$LINK.UD.POS = ""      W$LINK.UD.VAL = ""      W$LINK.DD.WIDGET = ""      W$LINK.URL.OPTS = ""      W$PRINTABLE = 0      W$HIDDEN = 0      HTML = '<pre>'      HTML<-1> = W$TEXT.DATA      HTML<-1> = '</pre>'    CASE CHART.TYPE = "FWGAUGE"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 260          *CHART.HEIGHT = 130          CHART.WIDTH = 260          CHART.HEIGHT = 240        CASE W$WIDTH = 1          *CHART.WIDTH = 260          *CHART.HEIGHT = 130          CHART.WIDTH = 300          CHART.HEIGHT = 270        CASE W$WIDTH = 2          *CHART.WIDTH = 400          *CHART.HEIGHT = 200          CHART.WIDTH = 520          CHART.HEIGHT = 270        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 750          *CHART.HEIGHT = 280          CHART.WIDTH = 1015          CHART.HEIGHT = 410      END CASE      *IF W$TYPE = "HLINEARGAUGE" OR W$TYPE = "HLED" THEN CHART.HEIGHT = 80      *IF W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" THEN CHART.WIDTH = 110 ; CHART.HEIGHT = 280      *IF W$TYPE = "CYLINDER" THEN CHART.WIDTH = 140      *IF W$TYPE = "BULB" THEN CHART.WIDTH = 110 ; CHART.HEIGHT = 130      IF W$TYPE = "HLINEARGAUGE" OR W$TYPE = "HLED" THEN CHART.HEIGHT = 80      IF W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" THEN CHART.WIDTH = 110      IF W$TYPE = "CYLINDER" THEN CHART.WIDTH = 140      IF W$TYPE = "BULB" THEN CHART.WIDTH = 110 ; CHART.HEIGHT = 130      IF W$TYPE = "ANGULARGAUGE" THEN        BEGIN CASE          CASE W$WIDTH = 1            CHART.HEIGHT = 130          CASE W$WIDTH = 2            CHART.HEIGHT = 200        END CASE      END      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML*      GOSUB TICKMARK.OPTIONS ;* Add chart options to support tickmarks*      IF W$TYPE = "THERMOMETER" AND W$FW.THERMOMETER.COLOR # "" THEN        LOCATE W$FW.THERMOMETER.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          W$FW.THERMOMETER.COLOR = NAME.COLOR<2,CPOS>        END        W$CHART.OPTIONS<-1> = "gaugeFillColor='":W$FW.THERMOMETER.COLOR:"'"      END* LJB 7-10-10 Removed DD restriction for angular and linear gauge charts. Not sure why it* was here in the first place*    IF W$TYPE = "HLED" OR W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" OR W$TYPE = "CYLINDER" OR W$TYPE = "BULB" THEN      IF W$FW.DD.WIDGET # "" THEN        FW.WIDGET.POS = 1        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          W$CHART.OPTIONS<-1> = " clickURL='":NEW.STRING:"'"        END      END*    END      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END*      PDATA = '<colorRange>'      COLOR.RANGE.OPTS = W$FW.COLOR.RANGE<4>      CONVERT '"' TO "'" IN COLOR.RANGE.OPTS      FOR PX = 1 TO DCOUNT( W$FW.COLOR.RANGE<1>, VM )        USE.COLOR = W$FW.COLOR.RANGE<3,PX>        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = "#FFFFFF" ;* White        END        CONVERT "#" TO "" IN USE.COLOR        UPDATE.OPTS = COLOR.RANGE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        COLOR.RANGE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<color minValue='":W$FW.COLOR.RANGE<1,PX>:"' maxValue='":W$FW.COLOR.RANGE<2,PX>:"' code='":USE.COLOR:"' ":COLOR.RANGE.OPTS<1,PX>:" />"      NEXT PX      PDATA := '</colorRange>'      METER.STYLE = 0      IF W$TYPE = "HLED" OR W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" OR W$TYPE = "CYLINDER" OR W$TYPE = "BULB" THEN        PDATA := '[METER_VALUE]'        METER.STYLE = 1      END ELSE        IF W$TYPE = "ANGULARGAUGE" THEN          PDATA := '<dials>'          DNODE = "dial"        END ELSE          PDATA := '<pointers>'          DNODE = 'pointer'        END        FOR PX = 1 TO DCOUNT( W$FW.DIAL.VALUES<1>, VM )          UPDATE.OPTS = W$FW.DIAL.OPTS<1,PX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.DIAL.OPTS<1,PX> = UPDATE.OPTS          PDATA := "<":DNODE:" value='":W$FW.DIAL.VALUES<1,PX>:"' ":W$FW.DIAL.OPTS<1,PX>          FW.WIDGET.POS = PX          GOSUB MAKE.FW.DD.URL          IF URL # "" THEN            URLENCODE.STRING = URL            GOSUB URL.ENCODE ;* Encode the entire URL            PDATA := " link='":NEW.STRING:"'"          END          PDATA := " />"        NEXT PX        PDATA := '</':DNODE:'s>'        PDATA := '<trendpoints>'        FOR PX = 1 TO DCOUNT( W$FW.TRENDPOINT.VALUES<1>, VM )          UPDATE.OPTS = W$FW.TRENDPOINT.OPTS<1,PX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.TRENDPOINT.OPTS<1,PX> = UPDATE.OPTS          PDATA := "<point startValue='":W$FW.TRENDPOINT.VALUES<1,PX>:"' "          IF W$FW.TRENDPOINT.VALUES<2,PX> # "" THEN PDATA := "endValue='":W$FW.TRENDPOINT.VALUES<2,PX>:"' "          PDATA := "displayValue='":W$FW.TRENDPOINT.LABELS<1,PX>:"' ":W$FW.TRENDPOINT.OPTS<1,PX>:" />"        NEXT PX        PDATA := '</trendpoints>'      END      CALL SWAP(SXML,'[CHART.PALETTE]',W$FW.CHART.PALETTE)      CALL SWAP(SXML,'[UPPER.LIMIT]',W$FW.UPPER.LIMIT)      CALL SWAP(SXML,'[LOWER.LIMIT]',W$FW.LOWER.LIMIT)      CALL SWAP(SXML,'[UPPER.LIMIT.DISPLAY]',W$FW.UPPER.LIMIT.LABEL)      CALL SWAP(SXML,'[LOWER.LIMIT.DISPLAY]',W$FW.LOWER.LIMIT.LABEL)      CALL SWAP(SXML,'[NUMBER.PREFIX]',W$FW.NUMBER.PREFIX)      CALL SWAP(SXML,'[NUMBER.SUFFIX]',W$FW.NUMBER.SUFFIX)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)*      IF METER.STYLE THEN        HTML = ''        MASTER.SXML = SXML        MASTER.PDATA = PDATA        MASTER.FW.TEMPLATE = FW.TEMPLATE        VAL.CNT = DCOUNT( W$FW.METER.VALUE<1>, @VM )        FOR MVX = 1 TO VAL.CNT          UPDATE.OPTS = W$FW.METER.VALUE.OPTS<1,MVX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.METER.VALUE.OPTS<1,MVX> = UPDATE.OPTS          VALDATA = '<value ':W$FW.METER.VALUE.OPTS<1,MVX>' >':W$FW.METER.VALUE<1,MVX>:'</value>'          CALL SWAP(PDATA,'[METER_VALUE]',VALDATA)          CALL SWAP(SXML,'[CHART.DATA]',PDATA)          CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX:'_':MVX)          CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)          HTML := FW.TEMPLATE          SXML = MASTER.SXML          PDATA = MASTER.PDATA          FW.TEMPLATE = MASTER.FW.TEMPLATE        NEXT MVX*        IF VAL.CNT > 1 THEN          IF W$TYPE = "FWBULB" THEN            SHRINK.MLT = 1            FOR NN = 2 TO VAL.CNT              SHRINK.MLT -= .2            NEXT NN            IF SHRINK.MLT < .25 THEN SHRINK.MLT = .25            CHART.WIDTH = INT( CHART.WIDTH * SHRINK.MLT )            CHART.HEIGHT = INT( CHART.WIDTH * SHRINK.MLT )          END        END      END ELSE        CALL SWAP(SXML,'[CHART.DATA]',PDATA)        CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)        CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)        HTML = FW.TEMPLATE      END    CASE CHART.TYPE = "FWBULLET"      IF W$TYPE = "HBULLET" THEN        BEGIN CASE          CASE W$WIDTH = 1 AND DB.TEMPLATE = 3            *HART.WIDTH = 220            *HART.HEIGHT = 60            CHART.WIDTH = 260            CHART.HEIGHT = 60          CASE W$WIDTH = 1            *CHART.WIDTH = 220            *CHART.HEIGHT = 60            CHART.WIDTH = 300            CHART.HEIGHT = 60          CASE W$WIDTH = 2            *CHART.WIDTH = 400            *CHART.HEIGHT = 60            CHART.WIDTH = 520            CHART.HEIGHT = 60          CASE W$WIDTH = 3 OR 1            *CHART.WIDTH = 750            *CHART.HEIGHT = 60            CHART.WIDTH = 1015            CHART.HEIGHT = 60        END CASE      END ELSE        BEGIN CASE          CASE W$WIDTH = 1 AND DB.TEMPLATE = 3            *CHART.WIDTH = 110            *CHART.HEIGHT = 180            CHART.WIDTH = 110            CHART.HEIGHT = 240          CASE W$WIDTH = 1            *CHART.WIDTH = 110            *CHART.HEIGHT = 180            CHART.WIDTH = 110            CHART.HEIGHT = 270          CASE W$WIDTH = 2            *CHART.WIDTH = 110            *CHART.HEIGHT = 280            CHART.WIDTH = 110            CHART.HEIGHT = 300          CASE W$WIDTH = 3 OR 1            *CHART.WIDTH = 110            *CHART.HEIGHT = 400            CHART.WIDTH = 110            CHART.HEIGHT = 410        END CASE      END      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML*      GOSUB TICKMARK.OPTIONS ;* Add chart options to support tickmarks*      IF W$FW.BC.PLOT.COLOR # "" THEN        USE.COLOR = W$FW.BC.PLOT.COLOR        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = ""        END        IF USE.COLOR # "" THEN W$CHART.OPTIONS<-1> = "plotFillColor='":USE.COLOR:'"'      END      IF W$FW.BC.TARGET.COLOR # "" THEN        USE.COLOR = W$FW.BC.TARGET.COLOR        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = ""        END        IF USE.COLOR # "" THEN W$CHART.OPTIONS<-1> = "targetColor='":USE.COLOR:'"'      END*      IF W$FW.DD.WIDGET # "" THEN        FW.WIDGET.POS = 1        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          W$CHART.OPTIONS<-1> = " clickURL='":NEW.STRING:"'"        END      END*      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END*      PDATA = '<colorRange>'      COLOR.RANGE.OPTS = W$FW.COLOR.RANGE<4>      UPDATE.OPTS = COLOR.RANGE.OPTS      OPTS.DELIM = ' '      GOSUB OPTS.UPDATE      COLOR.RANGE.OPTS = UPDATE.OPTS      FOR PX = 1 TO DCOUNT( W$FW.COLOR.RANGE<1>, VM )        USE.COLOR = W$FW.COLOR.RANGE<3,PX>        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = "#FFFFFF" ;* White        END        PDATA := "<color minValue='":W$FW.COLOR.RANGE<1,PX>:"' maxValue='":W$FW.COLOR.RANGE<2,PX>:"' code='":USE.COLOR:"' ":COLOR.RANGE.OPTS<1,PX>:" />"      NEXT PX      PDATA := '</colorRange>'      PDATA := '<value ':W$FW.METER.VALUE.OPTS:' >':W$FW.METER.VALUE:'</value>'      PDATA := '<target ':W$FW.METER.TARGET.OPTS:' >':W$FW.METER.TARGET:'</target>'      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CAPTION]',W$FW.CAPTION)      CALL SWAP(SXML,'[SUBCAPTION]',W$FW.SUBCAPTION)      CALL SWAP(SXML,'[CHART.PALETTE]',W$FW.CHART.PALETTE)      CALL SWAP(SXML,'[UPPER.LIMIT]',W$FW.UPPER.LIMIT)      CALL SWAP(SXML,'[LOWER.LIMIT]',W$FW.LOWER.LIMIT)      CALL SWAP(SXML,'[NUMBER.PREFIX]',W$FW.NUMBER.PREFIX)      CALL SWAP(SXML,'[NUMBER.SUFFIX]',W$FW.NUMBER.SUFFIX)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = FW.TEMPLATE    CASE CHART.TYPE = "FWSPARK"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 220          *CHART.HEIGHT = 40          CHART.WIDTH = 260          CHART.HEIGHT = 40        CASE W$WIDTH = 1          *CHART.WIDTH = 220          *CHART.HEIGHT = 40          CHART.WIDTH = 300          CHART.HEIGHT = 40        CASE W$WIDTH = 2          *CHART.WIDTH = 400          *CHART.HEIGHT = 40          CHART.WIDTH = 520          CHART.HEIGHT = 40        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 750          *CHART.HEIGHT = 40          CHART.WIDTH = 1015          CHART.HEIGHT = 40      END CASE      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML*      IF W$FW.DD.WIDGET # "" THEN        FW.WIDGET.POS = 1        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          W$CHART.OPTIONS<-1> = " clickURL='":NEW.STRING:"'"        END      END      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END*      PDATA = '<dataset>'      FOR PX = 1 TO DCOUNT( W$FW.VALUES<1>, VM )        UPDATE.OPTS = W$FW.VALUE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        W$FW.VALUE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<set value='":W$FW.VALUES<1,PX>:"' ":W$FW.VALUE.OPTS<1,PX>:" />"      NEXT PX      PDATA := '</dataset>'      IF W$FW.SPARK.TREND.BEG # "" THEN        PDATA := '<trendlines>'        FOR TLX = 1 TO DCOUNT( W$FW.SPARK.TREND.BEG, VM )          UPDATE.OPTS = W$FW.SPARK.TREND.OPTS<1,TLX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.SPARK.TREND.OPTS<1,TLX> = UPDATE.OPTS          PDATA := "<line startValue='":W$FW.SPARK.TREND.BEG<1,TLX>:"' endValue='":W$FW.SPARK.TREND.END<1,TLX>:"' ":W$FW.SPARK.TREND.OPTS<1,TLX>:" />"        NEXT TLX        PDATA := '</trendlines>'      END      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CAPTION]',W$FW.CAPTION)      CALL SWAP(SXML,'[SUBCAPTION]',W$FW.SUBCAPTION)      CALL SWAP(SXML,'[CHART.PALETTE]',W$FW.CHART.PALETTE)      CALL SWAP(SXML,'[UPPER.LIMIT]',W$FW.UPPER.LIMIT)      CALL SWAP(SXML,'[LOWER.LIMIT]',W$FW.LOWER.LIMIT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = FW.TEMPLATE    CASE CHART.TYPE = "FWFP"      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END      COLOR.LIST = W$FW.COLORS      GOSUB APPLY.COLOR.OPTS*      PDATA = ''      FOR PX = 1 TO DCOUNT( W$FW.LABELS<1>, VM )        UPDATE.OPTS = W$FW.VALUE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        W$FW.VALUE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<set label='":W$FW.LABELS<1,PX>:"' value='":W$FW.VALUES<1,PX>:"' color='":COLOR.ARRAY<1,PX>:"' ":W$FW.VALUE.OPTS<1,PX>        FW.WIDGET.POS = PX        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          PDATA := " link='":NEW.STRING:"'"        END        PDATA := " />"      NEXT PX      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CAPTION]',W$FW.CAPTION)      CALL SWAP(SXML,'[SUBCAPTION]',W$FW.SUBCAPTION)      CALL SWAP(SXML,'[NUMBER.PREFIX]',W$FW.NUMBER.PREFIX)      CALL SWAP(SXML,'[NUMBER.SUFFIX]',W$FW.NUMBER.SUFFIX)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = FW.TEMPLATE    CASE CHART.TYPE = "FCPIE"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 260          CHART.HEIGHT = 240        CASE W$WIDTH = 1          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 300          CHART.HEIGHT = 270        CASE W$WIDTH = 2          *CHART.WIDTH = 420          *CHART.HEIGHT = 240          CHART.WIDTH = 520          CHART.HEIGHT = 365        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 730          *CHART.HEIGHT = 320          CHART.WIDTH = 800          CHART.HEIGHT = 550      END CASE      PT.NAME = WT$SWF      PS.NAME = W$TYPE:".SETTINGS"      IF W$CHART.HEIGHT # "" THEN CHART.HEIGHT = W$CHART.HEIGHT      IF W$TYPE = "FC3DPIE" THEN        CHART.HEIGHT = INT(CHART.HEIGHT*.75)      END      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ PIE.TEMPLATE FROM F.WEB.FORMS, "FCF_template.html" ELSE PIE.TEMPLATE = "FCF_template.html not found"      PT.NAME = OCONV(PT.NAME,'MCL')      CALL SWAP(PIE.TEMPLATE,'[FCF_MODULE]',PT.NAME)*      READ SXML FROM F.MVDB.CONTROL, PS.NAME ELSE SXML = ''      CONVERT AM TO "" IN SXML      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'graph'        GOSUB APPLY.XML.OPTS      END      COLOR.LIST = W$PIE.COLORS      GOSUB APPLY.COLOR.OPTS      PDATA = ''      FOR PX = 1 TO DCOUNT( W$PIE.LABELS<1>, VM )        UPDATE.OPTS = W$PIE.VALUE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        W$PIE.VALUE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<set label='":W$PIE.LABELS<1,PX>:"' color='":COLOR.ARRAY<1,PX>:"' ":W$PIE.VALUE.OPTS<1,PX>:" value='":W$PIE.VALUES<1,PX>:"'"        FW.WIDGET.POS = PX        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          PDATA := " link='":NEW.STRING:"'"        END        PDATA := ' />'      NEXT PX      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CHART.TITLE]',W$PIE.CAPTION)      RADIUS = INT(CHART.WIDTH/2)-INT(CHART.WIDTH*.15)      CALL SWAP(SXML,'[RADIUS]',RADIUS)      CALL SWAP(PIE.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(PIE.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(PIE.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(PIE.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = PIE.TEMPLATE    CASE CHART.TYPE = "FCLINECOL"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 260          CHART.HEIGHT = 240        CASE W$WIDTH = 1          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 300          CHART.HEIGHT = 270        CASE W$WIDTH = 2          *CHART.WIDTH = 420          *CHART.HEIGHT = 240          CHART.WIDTH = 520          CHART.HEIGHT = 300        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 730          *CHART.HEIGHT = 320          CHART.WIDTH = 1015          CHART.HEIGHT = 425      END CASE      IF W$CHART.HEIGHT # "" THEN CHART.HEIGHT = W$CHART.HEIGHT      BT.NAME = WT$SWF      BS.NAME = W$TYPE:".SETTINGS"      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      COLOR.LIST = W$BAR.COLORS      GOSUB APPLY.COLOR.OPTS*      READ BAR.TEMPLATE FROM F.WEB.FORMS, "FCF_template.html" ELSE BAR.TEMPLATE = "FCF_template.html not found"      BT.NAME = OCONV(BT.NAME,'MCL')      CALL SWAP(BAR.TEMPLATE,'[FCF_MODULE]',BT.NAME)*      READ SXML FROM F.MVDB.CONTROL, BS.NAME ELSE SXML = ''      CONVERT AM TO "" IN SXML      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'graph'        GOSUB APPLY.XML.OPTS      END      PDATA = ''      IF MULTI.SERIES THEN        PDATA := '<categories>'        FOR PX = 1 TO DCOUNT( W$BAR.XLABELS<1>, VM )          PDATA := "<category label='":W$BAR.XLABELS<1,PX>:"' ":W$BAR.XLABEL.OPTS<1,PX>:" />"        NEXT PX        PDATA := '</categories>'        FOR PX = 1 TO DCOUNT( W$BAR.LABELS,AM)          PDATA := "<dataset seriesname='":W$BAR.LABELS<PX>:"' color='":COLOR.ARRAY<1,PX>:"' ":W$BAR.LABEL.OPTS<PX>:" >"          FOR PXV = 1 TO DCOUNT( W$BAR.VALUES<PX>,VM)            UPDATE.OPTS = W$BAR.VALUE.OPTS<PX,PXV>            OPTS.DELIM = ' '            GOSUB OPTS.UPDATE            W$BAR.VALUE.OPTS<PX,PXV> = UPDATE.OPTS            MS.VALUE=W$BAR.VALUES<PX,PXV>;  *ZUMASYS 1-5-15            MS.LABEL=W$BAR.XLABELS<1,PXV>; *ZUMASYS 1-5-15* 7-29-15 CHANGE ANY &lt;br&gt;'s to spaces            LOOP              BR.POS=INDEX(MS.LABEL,'&lt;br&gt;',1)            UNTIL NOT(BR.POS) DO              MS.LABEL=MS.LABEL[1,BR.POS-1]:' ':(MS.LABEL[BR.POS+10,9999])            REPEAT* END OF 7-29-15            MS.SERIES=W$BAR.LABELS<PX>;    *ZUMASYS 3-15-15*ZUMASYS 1-5-15*          PDATA := "<set value='":W$BAR.VALUES<PX,PXV>:"' ":W$BAR.VALUE.OPTS<PX,PXV>            PDATA := "<set value='":MS.VALUE:"' ":W$BAR.VALUE.OPTS<PX,PXV>; *ZUMASYS 1-5-15            FW.WIDGET.POS = PX            GOSUB MAKE.FW.DD.URL            IF URL # "" THEN              URLENCODE.STRING = URL              GOSUB URL.ENCODE ;* Encode the entire URL              PDATA := " link='":NEW.STRING:"'"            END            PDATA := ' />'          NEXT PXV          PDATA := '</dataset>'        NEXT PX      END ELSE        FOR PX = 1 TO DCOUNT( W$BAR.XLABELS<1>, VM )          IF INDEX(W$BAR.VALUES<1,PX>,'-',1) THEN            SIGN.MINUS = 1          END ELSE SIGN.MINUS = 0* 3-4-15 ZUMASYS - SUPPORT DECIMALS IN BAR.VALUES          THIS.BAR.VALUES=W$BAR.VALUES<1,PX>          IF INDEX(THIS.BAR.VALUES,'.',1) THEN            THIS.BAR.VALUES.1=OCONV(FIELD(THIS.BAR.VALUES,'.',1),'MCN')            THIS.BAR.VALUES.2=OCONV(FIELD(THIS.BAR.VALUES,'.',2),'MCN')            W$BAR.VALUES<1,PX>=THIS.BAR.VALUES.1:'.':THIS.BAR.VALUES.2          END ELSE            W$BAR.VALUES<1,PX> = OCONV(THIS.BAR.VALUES, 'MCN' )          END* END OF 3-4-15 ZUMASYS          IF SIGN.MINUS THEN W$BAR.VALUES<1,PX> = '-':W$BAR.VALUES<1,PX>          PDATA := "<set label='":W$BAR.XLABELS<1,PX>:"' value='":W$BAR.VALUES<1,PX>+0:"' "          IF NOT(INDEX(W$BAR.VALUE.OPTS<1,PX>,'color=',1)) THEN* Color setting is not being overridden by the W$BAR.VALUE.OPTS info            PDATA := "color='":COLOR.ARRAY<1,1>:"' "          END          UPDATE.OPTS = W$BAR.VALUE.OPTS<1,PX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$BAR.VALUE.OPTS<1,PX> = UPDATE.OPTS          PDATA := ' ':W$BAR.VALUE.OPTS<1,PX>          FW.WIDGET.POS = PX          GOSUB MAKE.FW.DD.URL          IF URL # "" THEN            URLENCODE.STRING = URL            GOSUB URL.ENCODE ;* Encode the entire URL            PDATA := " link='":NEW.STRING:"'"          END          PDATA := ' />'        NEXT PX      END      IF W$BAR.TREND.BEG # "" THEN        PDATA := '<trendLines>'        FOR TLX = 1 TO DCOUNT( W$BAR.TREND.BEG<1>, VM )          PDATA := "<line startValue='":W$BAR.TREND.BEG<1,TLX>:"' "          IF W$BAR.TREND.END<1,TLX> # "" THEN PDATA := "endValue='":W$BAR.TREND.END<1,TLX>:"' "          UPDATE.OPTS = W$BAR.TREND.OPTS<1,TLX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$BAR.TREND.OPTS<1,TLX> = UPDATE.OPTS          PDATA := W$BAR.TREND.OPTS<1,TLX>          PDATA := " />"        NEXT TLX        PDATA := '</trendLines>'      END      CONVERT '"' TO "'" IN PDATA      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CHART.TITLE]',W$BAR.CAPTION)      CALL SWAP(SXML,'[YMEMO]',W$BAR.YMEMO<1>)      CALL SWAP(SXML,'[XMEMO]',W$BAR.XMEMO<1>)      CALL SWAP(BAR.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(BAR.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(BAR.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(BAR.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = BAR.TEMPLATE    CASE CHART.TYPE<1> = "MAP" OR FIELD(W$TYPE,':',1) = "USAMAP"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          NULL        CASE W$WIDTH = 1          NULL        CASE W$WIDTH = 2          *CHART.WIDTH = 420          *CHART.HEIGHT = 240          CHART.WIDTH = 520          CHART.HEIGHT = 300        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 730          *CHART.HEIGHT = 320          CHART.WIDTH = 1015          CHART.HEIGHT = 425      END CASE      IF W$CHART.HEIGHT # "" THEN CHART.HEIGHT = W$CHART.HEIGHT      CALL XML.ENCODE(W$MAP.RANGE.NAME,"")      IF FIELD(W$TYPE,':',1) = "USAMAP" THEN        STATE.MAP = FIELD( W$TYPE,':',2)        IF STATE.MAP # "" THEN* This is a drill-down to a specific state detail. We need to match the* map name with the selected state.* selected state.          READ STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ""          CONVERT "," TO @VM IN STATE.NAMES          LOCATE STATE.MAP IN STATE.NAMES<1> SETTING STATE.POS THEN            MAP.NAME = STATE.NAMES<2,STATE.POS>          END ELSE            MAP.NAME = "USA"            W$TITLE := " - Error: Invalid State: ":STATE.MAP          END        END ELSE          MAP.NAME = "USA"        END      END ELSE        MAP.NAME = CHART.TYPE<2>      END      READ MAP.LIST FROM F.MVDB.CONTROL, 'FCMAP.NAMES' ELSE MAP.LIST = ""      LOCATE MAP.NAME IN MAP.LIST SETTING DUM THEN* This is a valid map name        MS.NAME = MAP.NAME:".SETTINGS"        READ SXML FROM F.MVDB.CONTROL, MS.NAME ELSE SXML = ''        IF SXML = "" THEN          MS.NAME = "FCMAP.SETTINGS"          READ SXML FROM F.MVDB.CONTROL, MS.NAME ELSE SXML = ''        END        MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)        MOVIE.WIDTH = CHART.WIDTH + 75*        READ MAP.TEMPLATE FROM F.WEB.FORMS, "FCMAP_template.html" ELSE MAP.TEMPLATE = "FMAP_template.html not found"        CALL SWAP(MAP.TEMPLATE,'[FCMAP_MODULE]',MAP.NAME)*        CONVERT AM TO "" IN SXML        IF W$CHART.OPTIONS # "" THEN          XML.OPTS = W$CHART.OPTIONS          NODE.NAME = 'map'          GOSUB APPLY.XML.OPTS        END*        MAPDATA = '<colorRange>'        FOR CX = 1 TO DCOUNT( W$MAP.RANGE.NAME<1>, @VM )          THIS.COLOR = W$MAP.RANGE.COLOR<1,CX>          LOCATE THIS.COLOR IN NAME.COLOR<1> SETTING CPOS THEN            USE.COLOR = NAME.COLOR<2,CPOS>          END ELSE USE.COLOR = THIS.COLOR          UPDATE.OPTS = W$MAP.RANGE.OPTS<1,CX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$MAP.RANGE.OPTS<1,CX> = UPDATE.OPTS          MAPDATA := "<color minValue='":W$MAP.RANGE.LOW<1,CX>:"' maxValue='":W$MAP.RANGE.HIGH<1,CX>:"' displayValue='":W$MAP.RANGE.NAME<1,CX>:"' color='":USE.COLOR          MAPDATA := "' ":W$MAP.RANGE.OPTS<1,CX>:" />"        NEXT CX        MAPDATA := '</colorRange>'        MAPDATA := '<data>'        FOR MX = 1 TO DCOUNT( W$MAP.IDS<1>, @VM )          IF W$MAP.VALUE.DD<1,MX> = 1 THEN            MAP.LINK = CGI$PATH:"/MVDB.MAIN?udview=":WIDGET.NAME:"&udpos1=1&udval1=":W$MAP.IDS<1,MX>:"&mapdd"          END ELSE IF W$MAP.VALUE.LINK<1,MX> # "" THEN            MAP.LINK = W$MAP.VALUE.LINK<1,MX>            IF W$MAP.LINK.MODE<1,MX> = "N" THEN MAP.LINK = "n-":MAP.LINK          END ELSE            IF W$FW.DD.WIDGET<1,MX> # "" THEN              FW.WIDGET.POS = MX              GOSUB MAKE.FW.DD.URL              MAP.LINK = URL            END ELSE              MAP.LINK = ""            END          END          IF MAP.LINK # "" THEN            URLENCODE.STRING = MAP.LINK            GOSUB URL.ENCODE            MAP.LINK = NEW.STRING            MAP.LINK = "link='":MAP.LINK:"' "          END          TOOLTEXT = W$MAP.VALUE.TOOLTEXT<1,MX>          CALL XML.ENCODE(TOOLTEXT,'')          UPDATE.OPTS = W$MAP.VALUE.OPTS<1,MX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$MAP.VALUE.OPTS<1,MX> = UPDATE.OPTS          MAPDATA := "<entity id='":W$MAP.IDS<1,MX>:"' value='":W$MAP.VALUES<1,MX>:"' ":W$MAP.VALUE.OPTS<1,MX>:" toolText='":TOOLTEXT:"' ":MAP.LINK:"/>"        NEXT MX        MAPDATA := '</data>'        CONVERT '"' TO "'" IN MAPDATA        CALL SWAP(SXML,'[CHART.DATA]',MAPDATA)        CALL SWAP(MAP.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)        CALL SWAP(MAP.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)        CALL SWAP(MAP.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)        CALL SWAP(MAP.TEMPLATE,'<!-- CHARTXML -->',SXML)        HTML = MAP.TEMPLATE      END ELSE        HTML = "Map name '":MAP.NAME:"' not found in MVDB.CONTROL, FCMAP.NAMES"      END    CASE W$TYPE = "TABLE"      HTML<-1> = '<table class="gridWidget" width="100%" >'      HTML<-1> = '<thead>'      HTML<-1> = '<tr>'      TABLE.COLS = DCOUNT( W$TABLE.COL.LABELS<1>, VM )      FOR CHX = 1 TO TABLE.COLS        IF W$TABLE.COL.JUST<1,CHX> # "" THEN          ALIGN = ' align="':W$TABLE.COL.JUST<1,CHX>:'"'        END ELSE ALIGN = ""        LABEL = W$TABLE.COL.LABELS<1,CHX>        IF LABEL = '' THEN LABEL = '&nbsp;'        HTML<-1> = '<th':ALIGN:' >':LABEL:'</th>'      NEXT CHX      HTML<-1> = '</tr>'      HTML<-1> = '</thead>'      HTML<-1> = '<tbody>'      TABLE.ROWS = DCOUNT( W$TABLE.DATA, AM )      FOR TRX = 1 TO TABLE.ROWS        HTML<-1> = '<tr>'        THIS.ROW = W$TABLE.DATA<TRX>        FOR TRC = 1 TO TABLE.COLS          IF W$TABLE.COL.JUST<1,TRC> # "" THEN            ALIGN = ' align="':W$TABLE.COL.JUST<1,TRC>:'"'          END ELSE ALIGN = ""          VALUE = THIS.ROW<1,TRC>          IF VALUE = '' THEN VALUE = '&nbsp;'          THIS.COL = '<td':ALIGN:'>':VALUE:'</td>'          HTML<-1> = THIS.COL        NEXT TRC        HTML<-1> = '</tr>'      NEXT TRX      HTML<-1> = '</tbody>'      HTML<-1> = '<tfoot>'      HTML<-1> = '<tr>'      FOR CHX = 1 TO TABLE.COLS        IF W$TABLE.COL.JUST<1,CHX> # "" THEN          ALIGN = ' align="':W$TABLE.COL.JUST<1,CHX>:'"'        END ELSE ALIGN = ""        VALUE = W$TABLE.TOTALS<1,CHX>        IF VALUE = '' THEN VALUE = '&nbsp;'        HTML<-1> = '<td':ALIGN:'>':VALUE:'</td>'      NEXT CHX      HTML<-1> = '</tr>'      HTML<-1> = '</tfoot>'      HTML<-1> = '</table>'    CASE W$TYPE = "TEXT"      HTML = '<pre>'      HTML<-1> = W$TEXT.DATA      HTML<-1> = '</pre>'    CASE W$TYPE = "HTML"      HTML = W$HTML.DATA*PDF* Check if widget-generated HTML includes a <head> tag, which we interpret as having its own styling      IF INDEX(HTML,'<head>',1)+INDEX(HTML,'<HEAD>',1) THEN WIDGET.OWN.STYLE = TRUE      IF WIDGET.OWN.STYLE AND IFRAME.WIDGET.NAME = "" AND PDF.WIDGET.NAME = "" THEN* Not rendering PDF or returning iframe content - change* widget content to iframe so styles render properly.        CALL REBUILD.URL.STRING(IFRAME.URL.STRING)        URLENCODE.STRING = WIDGET.NAME        GOSUB URL.ENCODE        IFRAME.URL.STRING = '/dbc/MVDB.MAIN?iframewidget=':NEW.STRING:'&':IFRAME.URL.STRING ;* stash widget name in URL string so we know which widget to use for iframe content        HTML = '<iframe src="':IFRAME.URL.STRING:'" width="100%" style="height: 100vh;">':WIDGET.NAME:'</iframe>'      END    CASE 1      HTML = "INVALID TYPE ":W$TYPE  END CASE*  IF IFRAME.WIDGET.NAME # "" THEN* Returning iframe content - no widget styling needed    HTML.DIV = '<!-- WIDGETDATA -->'  END ELSE    IF WIDGET.OWN.STYLE AND PDF.WIDGET.NAME # "" THEN* Render PDF from widget HTML that has a <head> tag - no widget styling needed      HTML.DIV = '<!-- WIDGETDATA -->'    END ELSE* normal widget styles      HTML.DIV = WIDGET.DIV    END  END*  Q1.LINKS = ''  Q2.LINKS = ''  Q3.LINKS = ''  Q4.LINKS = ''  Q5.LINKS = ''** Add source code edit link for administrative user*** FIX 6-1-16 ADD A GO BACK IN ICON LIST*  NEXT.LINK.POS = DCOUNT(W$LINK.LABEL<1>,@VM)  NEXT.LINK.POS2 = DCOUNT(W$LINK.ICON<1>,@VM)  IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS=NEXT.LINK.POS2  READ DD.STACK FROM F.MVDB.UDATA, SESSION$ID:'$DD.STACK' ELSE DD.STACK=''  MAX.DD.STACK=DCOUNT(DD.STACK,AM)  IF MAX.DD.STACK > 2 THEN    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = 'arrow_left.png'    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Go Back"    W$LINK.URL<1,NEXT.LINK.POS> = "javascript:history.back()"; * 9-23-16 *    W$LINK.LOCATION<1,NEXT.LINK.POS> = "C"  END* END FIX 6-1-16  IF adminauth = 1 THEN* 6-1-16 *  NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )* 6-1-16 *  NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )* 6-1-16 *  IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "script_edit.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Edit BASIC Source"    IF WDEBUG.MODE OR WFAIL.MODE THEN      USE.SUBNAME = GLOBAL.INFO(91) ;* Original subroutine name    END ELSE USE.SUBNAME = SUBNAME    URLENCODE.STRING = USE.SUBNAME    GOSUB URL.ENCODE    URL.SUBNAME = NEW.STRING    W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=":URL.SUBNAME    W$LINK.URL.OPTS<1,NEXT.LINK.POS> = 'target="ED_MVDB.SUBS_':URL.SUBNAME:'"'    W$LINK.LOCATION<1,NEXT.LINK.POS> = "C"** Add debug widget link for administrative user*    IF NOT(WFAIL.MODE) THEN      NEXT.LINK.POS += 1      W$LINK.ICON<1,NEXT.LINK.POS> = "information.png" ;* Change this to a real debug icon      IF WDEBUG.MODE THEN        W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Normal Mode"      END ELSE        W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Debug Mode"      END      URLENCODE.STRING = WIDGET.NAME      GOSUB URL.ENCODE      IF WDEBUG.MODE THEN        W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?undebug_widget=":NEW.STRING      END ELSE        W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?debug_widget=":NEW.STRING      END      W$LINK.LOCATION<1,NEXT.LINK.POS> = "C"    END  END  IF W$PRINTABLE = 1 THEN    NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )    NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )    IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "printer.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Print"    W$LINK.LABEL<1,NEXT.LINK.POS> = "Print"    W$LINK.URL<1,NEXT.LINK.POS> = "#"*W$LINK.URL.OPTS<1,NEXT.LINK.POS> = 'onClick="printThis(this);"'    W$LINK.URL.OPTS<1,NEXT.LINK.POS> = 'class="DansClass"'    W$LINK.LOCATION<1,NEXT.LINK.POS> = 'C'  END**PDF* If PDF generation is enabled, and supported for this widget, add a PDF icon to the control menu  IF PDF$ENABLED AND W$PDFABLE AND PDF.WIDGET.NAME = "" THEN    NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )    NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )    IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "page_white_acrobat.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Generate PDF"    W$LINK.LABEL<1,NEXT.LINK.POS> = "Generate PDF"    CALL REBUILD.URL.STRING(CURRENT.URL.STRING)    PDF.URL.STRING=CURRENT.URL.STRING    URLENCODE.STRING = WIDGET.NAME    GOSUB URL.ENCODE    PDF.URL.STRING := '&generatepdf=':NEW.STRING ;* stash widget name in URL string so we know which widget to render as PDF    W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?":PDF.URL.STRING    W$LINK.LOCATION<1,NEXT.LINK.POS> = 'C'  END** 6-27-16 *EXCEL* If EXCEL generation is supported for this widget, add a EXCEL icon to the control menu  IF W$EXCELABLE AND EXCEL.WIDGET.NAME = '' THEN    NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )    NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )    IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "page_white_excel.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Generate Spreadsheet"    W$LINK.LABEL<1,NEXT.LINK.POS> = "Generate Spreadsheet"    CALL REBUILD.URL.STRING(CURRENT.URL.STRING)    URLENCODE.STRING=CURRENT.URL.STRING    GOSUB URL.ENCODE    EXCEL.URL.STRING=NEW.STRING    URLENCODE.STRING = WIDGET.NAME    GOSUB URL.ENCODE    EXCEL.URL.STRING := '&generateexcel=':NEW.STRING ;* stash widget name in URL string so we know which widget to render as Excel spreadsheet    W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?":EXCEL.URL.STRING    W$LINK.LOCATION<1,NEXT.LINK.POS> = 'C'  END* END OF 6-27-16 *EXCEL**  LINK.CNT = DCOUNT( W$LINK.LABEL<1>, VM )  LINK.CNT2 = DCOUNT( W$LINK.ICON<1>, VM )  IF LINK.CNT2 > LINK.CNT THEN LINK.CNT = LINK.CNT2  FOR LX = 1 TO LINK.CNT    THIS.LABEL = W$LINK.LABEL<1,LX>    THIS.LOC = W$LINK.LOCATION<1,LX>    THIS.UD.POS = W$LINK.UD.POS<1,LX>    THIS.UD.VAL = W$LINK.UD.VAL<1,LX>    THIS.DD.WIDGET = W$LINK.DD.WIDGET<1,LX>    THIS.URL = W$LINK.URL<1,LX>    THIS.URL.OPTS = W$LINK.URL.OPTS<1,LX>*    IF THIS.LOC = '' THEN THIS.LOC = '1' ;* Set to quadrant 1 if not specified*    IF THIS.URL # "" THEN* Specific URL = ignore UD information and Drill down (DD) info.      URL = THIS.URL    END ELSE      IF THIS.DD.WIDGET # "" THEN TARGET.WIDGET = THIS.DD.WIDGET ELSE TARGET.WIDGET = WIDGET.NAME      URLENCODE.STRING = TARGET.WIDGET      GOSUB URL.ENCODE      TARGET.WIDGET = NEW.STRING      URL = CGI$PATH:"/MVDB.MAIN?udview=":TARGET.WIDGET      FOR UDX = 1 TO DCOUNT( THIS.UD.POS<1,1>,SVM )        URLENCODE.STRING = THIS.UD.VAL<1,1,UDX>        GOSUB URL.ENCODE        URL := "&udpos":UDX:"=":THIS.UD.POS<1,1,UDX>:"&udval":UDX:"=":NEW.STRING      NEXT UDX      IF THIS.DD.WIDGET # "" THEN        URL := "&dd"* Include the name of this widget in the drilldown link so the target widget knows the referrer        URLENCODE.STRING = WIDGET.NAME        GOSUB URL.ENCODE        URL := '&dd_from=':NEW.STRING      END    END    IF W$LINK.ICON<1,LX> # "" THEN      IMG.REF = '<img title="':W$LINK.ICON.TXT<1,LX>:'" class="icon" src="/db/icons/':W$LINK.ICON<1,LX>:'" />'    END ELSE IMG.REF = ''    IF INDEX(THIS.LOC,'C',1) AND IMG.REF # '' THEN ;* This is a Control Icon      LINK.DATA = '<a href="':URL:'" ':THIS.URL.OPTS:'>':IMG.REF:'</a>'    END ELSE      LINK.DATA = '<a href="':URL:'" ':THIS.URL.OPTS:'>':IMG.REF:THIS.LABEL:'</a>'    END*    IF INDEX(THIS.LOC,'1',1) THEN      Q1.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'2',1) THEN      Q2.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'3',1) THEN      Q3.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'4',1) THEN      Q4.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'C',1) THEN      Q5.LINKS := LINK.DATA:'&nbsp;'    END  NEXT LX  IF Q1.LINKS # "" THEN    Q1.LINKS = '<div class="widget_trcorner widget_corner">':Q1.LINKS:'</div>'  END  IF Q2.LINKS # "" THEN    Q2.LINKS = '<div class="widget_tlcorner widget_corner">':Q2.LINKS:'</div>'  END  IF Q3.LINKS # "" THEN    Q3.LINKS = '<div class="widget_blcorner widget_corner">':Q3.LINKS:'</div>'  END  IF Q4.LINKS # "" THEN    Q4.LINKS = '<div class="widget_brcorner widget_corner">':Q4.LINKS:'</div>'  END** Create the input section*  INP.CNT = DCOUNT( W$INPUT.PROMPT, AM )  INP.HTML = ''  IF INP.CNT THEN* PJS 10-07-16: Change method from GET to POST to eliminate URL length limitation* when form contains many input controls.    IF INP.CNT > 20 THEN      INP.HTML = '<form method="POST" class="widget_form" action="':CGI$PATH:'/MVDB.MAIN">'    END ELSE      INP.HTML = '<form method="GET" class="widget_form">'    END    FOR IX = 1 TO INP.CNT      INP.HTML<-1> = '<div class="widget_control">'      INP.HTML<-1> = '<label ':W$INPUT.PROMPT.PARAMS<IX>:'>':W$INPUT.PROMPT<IX>:':</label>'      BEGIN CASE        CASE W$INPUT.TYPE<IX> = "TEXT"          INP.HTML<-1> = '<input type="text" name="inp_':W$INPUT.UDPOS<IX>:'" value="':W$INPUT.DEFAULT<IX>:'" ':W$INPUT.PARAMS<IX>:'>'        CASE W$INPUT.TYPE<IX> = "PASSWORD"          INP.HTML<-1> = '<input type="password" name="inp_':W$INPUT.UDPOS<IX>:'" value="':W$INPUT.DEFAULT<IX>:'" ':W$INPUT.PARAMS<IX>:'>'        CASE W$INPUT.TYPE<IX> = "DATE"          INP.HTML<-1> = '<input class="datepicker" type="text" name="inp_':W$INPUT.UDPOS<IX>:'" value="':W$INPUT.DEFAULT<IX>:'" ':W$INPUT.PARAMS<IX>:'>'        CASE W$INPUT.TYPE<IX> = "SELECT"          INP.HTML<-1> = '<select name="inp_':W$INPUT.UDPOS<IX>:'" ':W$INPUT.PARAMS<IX>:'>'          SCNT = DCOUNT( W$INPUT.SELOPTS<IX>, VM )          IF W$INPUT.SELVALS<IX> = "" THEN W$INPUT.SELVALS<IX> = W$INPUT.SELOPTS<IX>          FOR SELX = 1 TO SCNT            IF W$INPUT.SELVALS<IX,SELX> = W$INPUT.DEFAULT<IX> THEN DFLT = "selected" ELSE DFLT = ""            INP.HTML<-1> = '<option value="':W$INPUT.SELVALS<IX,SELX>:'" ':DFLT:'>':W$INPUT.SELOPTS<IX,SELX>:'</option>'          NEXT SELX          INP.HTML<-1> = '</select>'        CASE W$INPUT.TYPE<IX> = "CHECKBOX"          INP.HTML<-1> = '<input type="checkbox" name="inp_':W$INPUT.UDPOS<IX>:'" value="1" ':W$INPUT.PARAMS<IX>          IF W$INPUT.DEFAULT<IX> = 1 THEN            INP.HTML := ' checked'          END          INP.HTML := '>'*add a hidden field to let up know that there was a checkbox on the form.*unchecked checkboxes don't get submitted with the rest of the form data.          INP.HTML<-1> = '<input type="hidden" name="mvdbcxbx_':W$INPUT.UDPOS<IX>:'" value="1">'        CASE 1 ; NULL      END CASE      INP.HTML<-1> = '</div>'    NEXT IX    IF W$INPUT.BUTTON = "" THEN W$INPUT.BUTTON = "Go"    INP.HTML<-1> = '<div class="widget_control"><input type="submit" value="':W$INPUT.BUTTON:'" ></div>'    INP.HTML<-1> = '<input type="hidden" name="udview" value="':WIDGET.NAME:'">'    INP.HTML<-1> = '<input type="hidden" name="sw" value="':WIDGET.NAME:'">'    IF G$DRILLDOWN.MODE THEN      INP.HTML<-1> = '<input type="hidden" name="dd" value="">'      INP.HTML<-1> = '<input type="hidden" name="dd_from" value="':G$DD.REFERRER:'">'      INP.HTML<-1> = '<input type="hidden" name="dd_from_db" value="':G$DD.FROM.DB:'">'    END    INP.HTML<-1> = '</form>'    INP.HTML = '<div class="widget_input">':INP.HTML:'</div>'  END**PDF* Omit the control icons in the PDF document  IF PDF.WIDGET.NAME # "" THEN    Q5.LINKS = ""  END*  ENC.TITLE = W$TITLE  CALL XML.ENCODE(ENC.TITLE,"")  CALL SWAP(HTML.DIV,'<!-- TITLE -->',ENC.TITLE)  CALL SWAP(HTML.DIV,'<!-- QUAD1 -->',Q1.LINKS)  CALL SWAP(HTML.DIV,'<!-- QUAD2 -->',Q2.LINKS)  CALL SWAP(HTML.DIV,'<!-- QUAD3 -->',Q3.LINKS)  CALL SWAP(HTML.DIV,'<!-- QUAD4 -->',Q4.LINKS)  CALL SWAP(HTML.DIV,'<!-- CONTROLS -->',Q5.LINKS)  CALL SWAP(HTML.DIV,'<!-- INPUT -->',INP.HTML)  CALL SWAP(HTML.DIV,'<!-- WIDGETDATA -->',HTML)  RETURN*APPLY.XML.OPTS: * Apply XML option overrides*  SXML.ATTRS = ""  ATTR.VAR.LIST = ''* Parse the attrbiutes from the XML tag.  CPOS = 3 + LEN(NODE.NAME) ;* Start after "<graph " or "<map " depending on the node name.  SXML.ATTR.POS = 0  SXML.LEN = LEN(SXML)  THIS.ATTR = ''  SXML.SUFFIX = '>[CHART.DATA]</':NODE.NAME:'>'  LOOP UNTIL CPOS > SXML.LEN DO    THIS.CH = SXML[CPOS,1]    BEGIN CASE      CASE THIS.CH = '<' ;* Nothing to do - beginning        THIS.ATTR = ''      CASE THIS.CH = ' '        GOSUB ADD.SXML.ATTR      CASE THIS.CH = '>' ;* Ending tag        GOSUB ADD.SXML.ATTR        SXML.SUFFIX = SXML[CPOS,999]        EXIT      CASE 1        THIS.ATTR := THIS.CH    END CASE    CPOS += 1  REPEAT  GOSUB ADD.SXML.ATTR*  CONVERT '"' TO "'" IN XML.OPTS  CONVERT @VM TO @AM IN XML.OPTS  XML.OPT.CNT = DCOUNT( XML.OPTS, AM )  FOR XOX = 1 TO XML.OPT.CNT    THIS.OPT = XML.OPTS<XOX>    OPT.VAR = FIELD( THIS.OPT, '=', 1 )    LOCATE OPT.VAR IN ATTR.VAR.LIST SETTING XOPOS THEN      SXML.ATTRS<XOPOS> = THIS.OPT    END ELSE      THIS.ATTR = THIS.OPT      GOSUB ADD.SXML.ATTR    END  NEXT XOX** Rebuild SXML*  SXML = '<':NODE.NAME:' '  FOR XOX = 1 TO SXML.ATTR.POS    SXML := SXML.ATTRS<XOX>:' '  NEXT XOX  SXML := SXML.SUFFIX  RETURN*ADD.SXML.ATTR: * Add an attrbiute to the list*  IF THIS.ATTR # '' THEN    SXML.ATTR.POS += 1    SXML.ATTRS<SXML.ATTR.POS> = THIS.ATTR    ATTR.VAR.LIST<SXML.ATTR.POS> = FIELD(THIS.ATTR,'=',1)    THIS.ATTR = ''  END  RETURN*APPLY.COLOR.OPTS: * Build COLOR.ARRAY from defaults and user settings*  COLOR.ARRAY = ''  DFLT.COLOR.ARRAY = ''  IF DB.THEME # '' THEN    READ THEME.REC FROM F.MVDB.THEMES, DB.THEME ELSE THEME.REC = ''    DFLT.COLOR.ARRAY = DELETE(THEME.REC,1,0,0)    CONVERT AM TO VM IN DFLT.COLOR.ARRAY  END ELSE IF SITE$THEME # '' THEN    READ THEME.REC FROM F.MVDB.THEMES, SITE$THEME ELSE THEME.REC = ''    DFLT.COLOR.ARRAY = DELETE(THEME.REC,1,0,0)    CONVERT AM TO VM IN DFLT.COLOR.ARRAY  END  IF DFLT.COLOR.ARRAY = '' THEN    DFLT.COLOR.ARRAY<1,-1> = '#ff8125'    DFLT.COLOR.ARRAY<1,-1> = '#584d43'    DFLT.COLOR.ARRAY<1,-1> = '#2e2a27'    DFLT.COLOR.ARRAY<1,-1> = '#7b746d'    DFLT.COLOR.ARRAY<1,-1> = '#e78859'    DFLT.COLOR.ARRAY<1,-1> = '#f04408'    DFLT.COLOR.ARRAY<1,-1> = '#bd5204'    DFLT.COLOR.ARRAY<1,-1> = '#733e30'  END  DFLT.MAX = DCOUNT( DFLT.COLOR.ARRAY<1>, VM )*  MAX.COLOR.AM = DCOUNT( COLOR.LIST, AM )  IF MAX.COLOR.AM = 0 THEN MAX.COLOR.AM = 1  FOR CLX = 1 TO MAX.COLOR.AM    MAX.COLOR.VAL = DCOUNT( COLOR.LIST<CLX>, VM )    IF MAX.COLOR.VAL < DFLT.MAX THEN MAX.COLOR.VAL = DFLT.MAX    FOR CLXV = 1 TO MAX.COLOR.VAL      IF COLOR.LIST<CLX,CLXV> # "" THEN        LOCATE OCONV(COLOR.LIST<CLX,CLXV>,"MCU") IN NAME.COLOR<1> SETTING COLOR.POS THEN          COLOR.LIST<CLX,CLXV> = NAME.COLOR<2,COLOR.POS>        END        COLOR.ARRAY<CLX,CLXV> = COLOR.LIST<CLX,CLXV>      END ELSE        COLOR.ARRAY<CLX,CLXV> = DFLT.COLOR.ARRAY<1,CLXV>      END    NEXT CLXV  NEXT CLX  RETURN*URL.ENCODE: **  NEW.STRING = ""  UE.LEN = LEN(URLENCODE.STRING)  FOR UEX = 1 TO UE.LEN    UE.CHR = URLENCODE.STRING[UEX,1]    UE.CVAL = SEQ(UE.CHR)    BEGIN CASE      CASE UE.CVAL <= 47 ; ENC.FLAG = 1      CASE UE.CVAL >= 58 AND UE.CVAL <= 64 ; ENC.FLAG = 1      CASE UE.CVAL >= 91 AND UE.CVAL <= 96 ; ENC.FLAG = 1      CASE UE.CVAL > 122 ; ENC.FLAG = 1      CASE 1 ; ENC.FLAG = 0    END CASE    IF ENC.FLAG THEN      UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')    END    NEW.STRING := UE.CHR  NEXT UEX  RETURN*TICKMARK.OPTIONS: * For charts that support tickmark options** Convert the settings in W$FW.TICKMARKS into the appropriate XML attributes to be* added to the <chart> tag via W$CHART.OPTIONS*  IF W$FW.TICKMARKS<1> = "0" THEN    W$CHART.OPTIONS<-1> = "showTickMarks='0'"    W$CHART.OPTIONS<-1> = "showTickValues='0'"  END ELSE    IF W$FW.TICKMARKS<2> = 0 THEN      W$CHART.OPTIONS<-1> = "showTickValues='0'"    END    IF W$FW.TICKMARKS<3> = "A" THEN      W$CHART.OPTIONS<-1> = "ticksBelowGraph='0'"    END    IF W$FW.TICKMARKS<4> # "" THEN      W$CHART.OPTIONS<-1> = "majorTMNumber='":W$FW.TICKMARKS<4>:"'"    END    IF W$FW.TICKMARKS<5> # "" THEN      W$CHART.OPTIONS<-1> = "minorTMNumber='":W$FW.TICKMARKS<5>:"'"    END  END  RETURN*MAKE.FW.DD.URL: **  TARGET.WIDGET = W$FW.DD.WIDGET<1,FW.WIDGET.POS>  IF TARGET.WIDGET = "" THEN    URL = ""    RETURN  END  URLENCODE.STRING = TARGET.WIDGET  GOSUB URL.ENCODE  TARGET.WIDGET = NEW.STRING  URL = CGI$PATH:"/MVDB.MAIN?udview=":TARGET.WIDGET  FOR UDX = 1 TO DCOUNT( W$FW.DD.UD.POS<1,FW.WIDGET.POS>,SVM )    URLENCODE.STRING = W$FW.DD.UD.VAL<1,FW.WIDGET.POS,UDX>* BEGIN ZUMASYS 1-5-15    BEGIN CASE      CASE URLENCODE.STRING = 'MS.LABEL'        URLENCODE.STRING=MS.LABEL      CASE URLENCODE.STRING = 'MS.VALUE'        URLENCODE.STRING=MS.VALUE      CASE URLENCODE.STRING = 'MS.SERIES'; *3-15-15        URLENCODE.STRING=MS.SERIES; *3-15-15      CASE 1; NULL    END CASE* END ZUMASYS 1-5-15    GOSUB URL.ENCODE    URL := "&udpos":UDX:"=":W$FW.DD.UD.POS<1,FW.WIDGET.POS,UDX>:"&udval":UDX:"=":NEW.STRING  NEXT UDX  URL := "&dd"* Include the name of this widget in the drilldown link so the target widget knows the referrer  URLENCODE.STRING = WIDGET.NAME  GOSUB URL.ENCODE  URL := '&dd_from=':NEW.STRING* Specify the dashboard to return to from this drilldown view.  IF G$DRILLDOWN.MODE THEN    SOURCE.DB = G$DD.FROM.DB  END ELSE SOURCE.DB = G$CURRENT.DB  URLENCODE.STRING = SOURCE.DB  GOSUB URL.ENCODE  URL := '&dd_from_db=':NEW.STRING  RETURN*OPTS.UPDATE:  IF NOT(INDEX(UPDATE.OPTS,'decimalSeparator',1)) THEN    UPDATE.OPTS := OPTS.DELIM:"decimalSeparator='":DECIMAL:"'"  END  IF NOT(INDEX(UPDATE.OPTS,'thousandSeparator',1)) THEN    UPDATE.OPTS := OPTS.DELIM:"thousandSeparator='":THOUSAND:"'"  END  RETURNEND0002F4SUB.URL.ENCODE0c2SUBROUTINE SUB.URL.ENCODE(URLENCODE.STRING)** (C) Copyright 2009, Sierra Bravo Corporation, All Rights Reserved* * Author: Luke Bucklin, Sierra Bravo Corporation* Date: August 7, 2009* Purpose: URL encode a text string*NEW.STRING = ""UE.LEN = LEN(URLENCODE.STRING)FOR UEX = 1 TO UE.LEN  UE.CHR = URLENCODE.STRING[UEX,1]  UE.CVAL = SEQ(UE.CHR)  BEGIN CASE    CASE UE.CVAL <= 47 ; ENC.FLAG = 1    CASE UE.CVAL >= 58 AND UE.CVAL <= 64 ; ENC.FLAG = 1    CASE UE.CVAL >= 91 AND UE.CVAL <= 96 ; ENC.FLAG = 1    CASE UE.CVAL > 122 ; ENC.FLAG = 1    CASE 1 ; ENC.FLAG = 0  END CASE  IF ENC.FLAG THEN    UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')  END  NEW.STRING := UE.CHRNEXT UEXURLENCODE.STRING = NEW.STRINGRETURNEND 0024B2MV.COMPILE0c2* MV.COMPILE - Sierra Bravo Precompiler** Copyright (C) 2006 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin* Date: 12/26/2006* Description: Precompiler** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause**PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ''PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE() ; *PJS 06-12-15*TCL.LINE = TRIM( TCL.LINE )VERB = FIELD(TCL.LINE,' ', 1)FILE = FIELD( TCL.LINE, ' ', 2 )ITEM.LIST = ''IF SYSTEM(11) THEN  LOOP    READNEXT ITEM ELSE EXIT    ITEM.LIST<-1> = ITEM  REPEATEND ELSE  POS = 3  LOOP    ITEM = FIELD( TCL.LINE, ' ', POS )  UNTIL ITEM = '' OR ITEM[1,1] = '(' DO    ITEM.LIST<-1> = ITEM    POS += 1  REPEATENDOPTS.POS = INDEX( TCL.LINE, '(', 1 )IF OPTS.POS THEN  OPTS = TCL.LINE[OPTS.POS,999]END ELSE OPTS = ''*OPEN FILE TO FILEVAR ELSE STOP 201, FILE*INC.FILE = FILE:".INC"OPEN INC.FILE TO INC.FILEVAR ELSE  EXECUTE "CREATE-FILE ":INC.FILE:" 1 51"  OPEN INC.FILE TO INC.FILEVAR ELSE STOP 201, INC.FILEENDOPEN '','MVPC.CONTROL' TO F.MVPC.CONTROL ELSE  EXECUTE "CREATE-FILE MVPC.CONTROL 3 11" CAPTURING JUNK  OPEN '','MVPC.CONTROL' TO F.MVPC.CONTROL ELSE STOP 201, 'MVPC.CONTROL'END*DELIMS = \"'\ONE.WORD.TOKENS = ""ONE.WORD.TOKENS<-1> = "notrim"ONE.WORD.TOKENS<-1> = "exists"*ITEM.CNT = DCOUNT( ITEM.LIST, @AM )FOR ITEM.X = 1 TO ITEM.CNT  PRINT "MV Precompiler Version 1.0 ":  INC.SOURCE = '** Auto-generated source code. Do not modify this file.'  INC.SOURCE<-1> = "VAR$ERR = ''"  INC.SOURCE<-1> = "CALL WDB.VARS(VARS,VALS)"  INC.SOURCE<-1> = "*"  INC.SOURCE<-1> = 'LOCATE "xmlQuery" IN VARS SETTING POS THEN'  INC.SOURCE<-1> = '  XML$QUERY = 1'  INC.SOURCE<-1> = 'END ELSE XML$QUERY = 0'  XML.INFO = '<vars>'  VAR.INFO = ''  VAR.INFO.POS = 1  ITEM = ITEM.LIST<ITEM.X>  READ SOURCE FROM FILEVAR, ITEM ELSE    PRINT "Item '":ITEM:"' not on file."    CONTINUE  END  DELETE INC.FILEVAR, ITEM  SOURCE.LINES = DCOUNT( SOURCE, @AM )  SLINE = 1  END.OF.PC = 0  PARSED.ANY = 0  PC.ERRORS = 0  LOOP    LINE = SOURCE<SLINE>    IF TRIM(LINE)[1,1] = "!" THEN      GOSUB PARSE.LINE      IF SYNTAX.ERROR # "" THEN        PRINT        PRINT "Syntax Error: ":SYNTAX.ERROR        PRINT SLINE:": ":LINE        PARSED = 0        PC.ERRORS += 1      END      IF PARSED THEN        PRINT ".":        PARSED.ANY = 1        THIS.INC = ""        IF REQUIRE.ERROR = "" THEN          REQUIRE.ERROR = FROMVAR:' required.'        END        IF ITERATIVE THEN          FROMVAR = FROMVAR[1,LEN(FROMVAR)-2]          VARNAME = VARNAME[1,LEN(VARNAME)-2]          THIS.INC<-1> = "VAR$CNT = DCOUNT( VARS, @AM )"          THIS.INC<-1> = "VAR$STRLEN = ":LEN(FROMVAR)          THIS.INC<-1> = VARNAME:" = ''"          IF VARTYPE = "date" THEN            THIS.INC<-1> = VARNAME:".I = ''"          END          THIS.INC<-1> = "FOR VAR$X = 1 TO VAR$CNT"          THIS.INC<-1> = \  IF VARS<VAR$X> MATCHES "'\:FROMVAR:\'1N0N" THEN\          THIS.INC<-1> = '    VAR$NUM = VARS<VAR$X>[VAR$STRLEN+1,99]'          THIS.INC<-1> = '    ':VARNAME:'<VAR$NUM> = VALS<VAR$X>'          IF VARTYPE = "date" THEN            THIS.INC<-1> = '    ':VARNAME:'.I<VAR$NUM> = ICONV(':VARNAME:'<VAR$NUM>,"D")'            THIS.INC<-1> = '    ':VARNAME:'<VAR$NUM> = OCONV(':VARNAME:'.I<VAR$NUM>,"D4/")'          END          THIS.INC<-1> = '  END'          THIS.INC<-1> = 'NEXT VAR$X'         END ELSE          THIS.INC<-1> = 'LOCATE "':FROMVAR:'" IN VARS SETTING POS THEN'          THIS.INC<-1> = '  ':VARNAME:' = VALS<POS>'          THIS.INC<-1> = '  ':VARNAME:'.EXISTS = 1'          IF VARTYPE = "date" THEN            THIS.INC<-1> = '  ':VARNAME:'.I = ICONV(':VARNAME:',"D")'            THIS.INC<-1> = '  ':VARNAME:' = OCONV(':VARNAME:'.I,"D4/")'          END          IF DEFAULT # "" THEN            THIS.INC<-1> = '  IF ':VARNAME:' = "" THEN ':VARNAME:' = "':DEFAULT:'"'          END          THIS.INC<-1> = 'END ELSE'          THIS.INC<-1> = '  ':VARNAME:'.EXISTS = 0'          IF VARTYPE = "date" THEN            THIS.INC<-1> = '  ':VARNAME:'.I = ""'          END          IF METHOD = "REQUIRE" AND EXISTS THEN            * Existence of variable is required            THIS.INC<-1> = '  ':VARNAME:' = ""'            THIS.INC<-1> = '  VAR$ERR<-1> = "':REQUIRE.ERROR:'"'          END ELSE            THIS.INC<-1> = '  ':VARNAME:' = "':DEFAULT:'"'          END          THIS.INC<-1> = 'END'          IF METHOD = "REQUIRE" AND NOT(EXISTS) THEN            THIS.INC<-1> = 'IF ':VARNAME:' = "" THEN'            THIS.INC<-1> = '  VAR$ERR<-1> = "':REQUIRE.ERROR:'"'            THIS.INC<-1> = 'END'          END          IF TRIM.VAL THEN            THIS.INC<-1> = VARNAME:" = TRIM(":VARNAME:")"          END        END        *        IF METHOD = "REQUIRE" THEN REQUIRED = 1 ELSE REQUIRED = 0        *        VAR.INFO<1,VAR.INFO.POS> = FROMVAR        VAR.INFO<2,VAR.INFO.POS> = REQUIRED        VAR.INFO<3,VAR.INFO.POS> = VARTYPE        VAR.INFO<4,VAR.INFO.POS> = ITERATIVE        VAR.INFO<5,VAR.INFO.POS> = DEFAULT        VAR.INFO<6,VAR.INFO.POS> = COMMENT        VAR.INFO<7,VAR.INFO.POS> = EXISTS        VAR.INFO.POS += 1        *        XML.INFO<-1> = '<var name="':FROMVAR:'" required="':REQUIRED:'" type="':VARTYPE:'" iterative="':ITERATIVE:'">'        CALL XML.ENCODE(DEFAULT,'')        CALL XML.ENCODE(COMMENT,'')        XML.INFO<-1> = ' <default>':DEFAULT:'</default>'        XML.INFO<-1> = ' <comment>':COMMENT:'</comment>'        XML.INFO<-1> = '</var>'        *        INC.SOURCE<-1> = THIS.INC      END    END ELSE      LINE = TRIM(LINE)      IF LINE = "INCLUDE ":FILE:".INC ":ITEM THEN END.OF.PC = 1    END  UNTIL SLINE > SOURCE.LINES OR END.OF.PC DO SLINE += 1 REPEAT  PRINT  IF PARSED.ANY THEN    XML.INFO<-1> = '</vars>'    INC.SOURCE<-1> = "* XML Info"    INC.SOURCE<-1> = \XML$INFO = '<?xml version="1.0" ?>'\    XICNT = DCOUNT( XML.INFO, @AM )    FOR XML.X = 1 TO XICNT      INC.SOURCE<-1> = 'XML$INFO<-1> = \':XML.INFO<XML.X>:'\'    NEXT XML.X    INC.SOURCE<-1> = 'IF XML$QUERY THEN'    INC.SOURCE<-1> = '  CALL XML.SEND(XML$INFO)'    INC.SOURCE<-1> = '  STOP'    INC.SOURCE<-1> = 'END'    WRITE INC.SOURCE ON INC.FILEVAR, ITEM    WRITE VAR.INFO ON INC.FILEVAR, "$":ITEM    *    READU FILE.LIST FROM F.MVPC.CONTROL, 'LIBRARIES' ELSE FILE.LIST = ''    LOCATE FILE IN FILE.LIST BY 'AL' SETTING POS THEN      RELEASE F.MVPC.CONTROL, 'LIBRARIES'    END ELSE      FILE.LIST = INSERT( FILE.LIST, 1, POS, 0, FILE )      WRITE FILE.LIST ON F.MVPC.CONTROL, 'LIBRARIES'    END  END  IF PC.ERRORS THEN    PRINT "Compile aborted"  END ELSE    XLINE = "D3.":VERB:" ":FILE:" ":ITEM:" ":OPTS    PRINT "D3 Compile: ":XLINE    EXECUTE XLINE  ENDNEXT ITEM.XSTOP*PARSE.LINE: * Parse a line into tokens*SYNTAX.ERROR = ""LINE = TRIM(LINE)LINE = LINE[2,9999] ;* Remove "!"*LINELEN = LEN(LINE)TOKEN.LIST = '' ; TOKEN.POS = 1TOKEN = ""VALUE = ""GETMODE = "TOKEN" ;* Start looking for tokensDELIM = ""IN.DELIM.STRING = 0PARSED = 0FOR LX = 1 TO LINELEN  CH = LINE[LX,1]  IF GETMODE = "TOKEN" THEN    BEGIN CASE      CASE CH MATCHES "1A" OR CH MATCHES "1N"        TOKEN := CH      CASE CH = " "        * End of word - Token complete        IF TOKEN # "" THEN          TOKEN.LIST<1,TOKEN.POS> = TOKEN          LOCATE TOKEN IN ONE.WORD.TOKENS SETTING POS ELSE            GETMODE = "VALUE"            VALUE.POS = TOKEN.POS            IN.DELIM.STRING = 0          END          TOKEN.POS += 1          TOKEN = ""        END    END CASE  END ELSE IF GETMODE = "VALUE" THEN    BEGIN CASE      CASE IN.DELIM.STRING AND CH = DELIM        TOKEN.LIST<2,VALUE.POS> = VALUE        VALUE = ""        DELIM = ""        GETMODE = "TOKEN"      CASE NOT(IN.DELIM.STRING) AND INDEX(DELIMS,CH,1) ;* This is a delimiter        IN.DELIM.STRING = 1        DELIM = CH      CASE CH = " " AND NOT(IN.DELIM.STRING)        TOKEN.LIST<2,VALUE.POS> = VALUE        VALUE = ""        GETMODE = "TOKEN"      CASE 1        VALUE := CH    END CASE  ENDNEXT LXIF TOKEN # "" THEN  TOKEN.LIST<1,-1> = TOKENEND ELSE IF VALUE # "" THEN  TOKEN.LIST<2,VALUE.POS> = VALUEEND*VARNAME = ""FROMVAR = ""COMMENT = ""DEFAULT = ""VARTYPE = "string"TRIM.VAL = 1EXISTS = 0REQUIRE.ERROR = ""*FOR TX = 1 TO DCOUNT( TOKEN.LIST<1>, @VM )  TOKEN = TOKEN.LIST<1,TX>  VALUE = TOKEN.LIST<2,TX>  BEGIN CASE    CASE TOKEN = "get" OR TOKEN = "require"      METHOD = TOKEN      VARNAME = VALUE      PARSED = 1    CASE TOKEN = "from"      FROMVAR = VALUE    CASE TOKEN = "type"      VARTYPE = OCONV(VALUE,'MCL')    CASE TOKEN = "default"      DEFAULT = VALUE    CASE TOKEN = "comment"      COMMENT = VALUE    CASE TOKEN = "notrim"      TRIM.VAL = 0    CASE TOKEN = "exists"      EXISTS = 1    CASE TOKEN = "error"      REQUIRE.ERROR = VALUE    CASE 1      SYNTAX.ERROR = "Invalid Token: '":TOKEN:'"'  END CASENEXT TX*IF NOT(PARSED) THEN RETURN*IF VARNAME = "" THEN  SYNTAX.ERROR = "No variable specified"  RETURNEND*IF FROMVAR = "" THEN FROMVAR = VARNAME*ITERATIVE = 0IF VARNAME[LEN(VARNAME)-1,2] = "[]" THEN  IF FROMVAR[LEN(FROMVAR)-1,2] = "[]" THEN    ITERATIVE = 1  END ELSE    SYNTAX.ERROR = "Iterative array mismatch: ":VARNAME:", ":FROMVAR  ENDEND*RETURN0062C4MVDB.WEB.ED0c2** Copyright (C) 2009 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: August 6, 2009* Description: Web Editor for Bravo Dashboard** 3-9-15 TFP CHANGE FILENAME TO FILENAME.VAR TO PREVENT CONFLICT WITH filename** Modified by Peter Schellenbach of Zumasys 07-17-15 for UV compatiblity:*   Change U50BB to @WHO*   Change MDS to UV.ACCOUNT*   Change LOGTO syntax for QM*   Parse file path in catalog pointer to find subroutine source file** Modified by Peter Schellenbach of Zumasys 11-02-16*  Added GLOBAL.INFO(100) = 1 before each of the STOP statements (except STOP due to errors)*  to indicate successful execution of this routine. Otherwise the controller program*  (MVDB.INIT) thinks an error has occurred and appends some debug info to the HTML output.**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGET.TYPES***OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS' ;* this is in /WWW/ COMMON and is opened by MVDB.INITOPEN '','MV.WEB.ED.ARCHIVE' TO F.ED.ARCHIVE THEN  ARCHIVE = 1END ELSE ARCHIVE = 0OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'READ ACCTS FROM F.MVDB.CONTROL, "ED.ACCOUNTS" ELSE ACCTS = ""*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$CHARSET      TO SITE$SETTINGS(9)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDENDIF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*CALL GET.SESSION.VAR("adminauth",adminauth)IF adminauth # 1 THEN  FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'  FORM := '</head><body><p>Administrative priviledges are required. '  FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'  CALL WEB.SEND(FORM)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOP*  READ LOGIN.PAGE FROM F.WEB.FORMS, "admin_login.html" ELSE LOGIN.PAGE = "admin_login.html not found."*  CALL SWAP(LOGIN.PAGE,'<!-- SITE_LOGO -->',SITE.LOGO)  *  GLOBAL.INFO(100) = 1 ;* Intentional stop*  CALL WEB.SEND(LOGIN.PAGE)*  STOPEND*EDIT.SCRIPTS = "NEW_PROGRAM_DIALOG = 0;":CHAR(10) ;* This will get overwritten later, if appropriateESC.APOS = "\'"HMESSAGE = ""FMESSAGE = ""record = ""LOCATE "ed_file" IN CGI$VARS SETTING POS THEN  filename = CGI$VALS<POS>END ELSE  filename = ""  HMESSAGE<-1> = "No filename specified."ENDLOCATE "ed_item" IN CGI$VARS SETTING POS THEN  item = CGI$VALS<POS>END ELSE  item = ""  HMESSAGE<-1> = "No item name specified."ENDLOCATE "ed_acct" IN CGI$VARS SETTING POS THEN  acct = CGI$VALS<POS>END ELSE acct = ""*LOCATE "action" IN CGI$VARS SETTING POS THEN  action = CGI$VALS<POS>END ELSE action = "open"IF action = "code_template" THEN  LOCATE "template" IN CGI$VARS SETTING POS THEN    template = CGI$VALS<POS>  END ELSE template = ""  OPEN '','MVDB.SUB.TEMPLATES' TO F.MVDB.SUB.TEMPLATES THEN    orig.template = template    LOOP      READ TEMPLATE.TEXT FROM F.MVDB.SUB.TEMPLATES, template ELSE TEMPLATE.TEXT = ""      IF TEMPLATE.TEXT = "" THEN TEMPLATE.TEXT = "No template for ":template    WHILE FIELD( TEMPLATE.TEXT, ' ', 1 ) = "USE" DO      template = FIELD( TEMPLATE.TEXT, ' ', 2 )    REPEAT    CALL SWAP(TEMPLATE.TEXT,'W$TYPE = "%TYPE%"','W$TYPE = "':orig.template:'"')  END ELSE    TEMPLATE.TEXT = "Unable to open MVDB.SUB.TEMPLATES"  END  SESSION$CONTENT.SENT = 1  CRT "Content-Type: text/html"  CRT  CALL WEB.SEND(TEMPLATE.TEXT)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPENDLOCATE "record" IN CGI$VARS SETTING POS THEN  record = CGI$VALS<POS>  CONVERT CHAR(10) TO @AM IN record  CONVERT CHAR(13) TO "" IN recordENDIF action = "compile" OR action = "save" THEN  READ HTML FROM F.WEB.FORMS, "ed_output.html" ELSE HTML = "Unable to read ed_output.html"  QUIET.MODE = 1END ELSE  READ HTML FROM F.WEB.FORMS, "ed_template.html" ELSE HTML = "Unable to read ed_template.html"  QUIET.MODE = 0ENDCALL SWAP(HTML,'<!--CHARACTER_SET-->',SITE$CHARSET)LOCATE "height" IN CGI$VARS SETTING POS THEN  height = CGI$VALS<POS>  CALL PUT.SESSION.VAR("ed_height",height)END ELSE  CALL GET.SESSION.VAR("ed_height",height)ENDOUT.OF.ACCOUNT = 0myacct = @WHO ; * OCONV( 'a', 'U50BB') *PJS 07-17-15*IF acct = myacct THEN acct = ""IF acct # "" AND HMESSAGE = "" THEN  password = ""  OPEN '','UV.ACCOUNT' TO F.ACCOUNTS THEN    READ APTR FROM F.ACCOUNTS, acct ELSE APTR = ""    IF APTR<1> <> "" THEN*      IF APTR<7> # "" THEN ;* This account has a password*        LOCATE acct IN ACCTS<1> SETTING APOS THEN*          password = ACCTS<2,APOS>*        END ELSE*          HMESSAGE<-1> = "Account ":acct:" requies a password. Not found in MVDB.CONTROL, ED.ACCOUNTS"*        END*      END    END ELSE      HMESSAGE<-1> = "Account ":acct:" is not valid."    END  END ELSE    HMESSAGE<-1> = "Unable to open UV.ACCOUNT file."  END  IF HMESSAGE = "" THEN*    DATA password    EXECUTE "LOGTO ":acct CAPTURING LOGTO.OUT ;* Switch over to specified account    IF LOGTO.OUT = "" THEN      OUT.OF.ACCOUNT = 1    END ELSE      HMESSAGE<-1> = "Error: ":LOGTO.OUT    END  ENDENDIF HMESSAGE # "" THEN  IF filename = "" AND item = "" THEN    HMESSAGE = ""    CALL SWAP(HTML,'<!-- SYNTAX -->',"")    CALL SWAP(HTML,'<!-- WINDOW_HEIGHT -->',"")    CALL SWAP(HTML,'<!-- FILE -->',"")    CALL SWAP(HTML,'<!-- ITEM -->',"")    CALL SWAP(HTML,'<!-- BODY -->',"")    CALL SWAP(HTML,'<!-- LAST_COMPILE -->',"")    CALL SWAP(HTML,'<!-- COMPILE_OUTPUT -->',"")    CALL SWAP(HTML,'<!-- COMPILE_ERRLINE -->',"")    CALL SWAP(HTML,'<!-- ED_CONTENT -->',"''")    CALL SWAP(HTML,'<!-- EA_CALLS_CONTENT -->',"")    CALL SWAP(HTML,'<!-- EA_INCLUDES_CONTENT -->',"")    CALL SWAP(HTML,'<!-- EA_FILES_CONTENT -->',"")    CALL SWAP(HTML,'<!-- EA_ARCHIVE_CONTENT -->',"")    CALL SWAP(HTML,'<!-- NUM_OF_CALLS -->',0)    CALL SWAP(HTML,'<!-- NUM_OF_INCLUDES -->',0)    CALL SWAP(HTML,'<!-- NUM_OF_FILES -->',0)    CALL SWAP(HTML,'<!-- NUM_OF_ARCHIVES -->',0)    CALL SWAP(HTML,'<!-- ED_SCRIPTS -->',"")    CALL SWAP(HTML,'<!-- ED_INIT_SCRIPT -->',"openEditDialog();")    CALL WEB.SEND(HTML)  END ELSE    GOSUB ADD.MESSAGE    CALL WEB.SEND(HTML)  END  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPEND* This will be the master dictionary in the appropriate account.OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'ENDBASIC.SUB = 0OPEN filename TO F.FILE THEN  IF record # "" AND action # "open" THEN    ELINE = DCOUNT( record, @AM )    LOOP WHILE ELINE > 1 AND record<ELINE> = "" DO      record = DELETE( record, ELINE, 0, 0 )      ELINE -= 1    REPEAT    IF ARCHIVE AND filename # "MV.WEB.ED.ARCHIVE" THEN      READ oldrec FROM F.FILE, item THEN        IF oldrec # record THEN          NOW = TIME()          TD.STAMP = NOW:"*":DATE()          NOW2 = NOW "R%2"          NOW2 = MOD(NOW2,16) ;* Get it down to a hex digit          IF acct = "" THEN USE.ACCT = myacct ELSE USE.ACCT = acct          ARCHIVE.ID = USE.ACCT:"*":filename:"*":item:"*":OCONV(NOW2,'MCDX')          oldrec = INSERT( oldrec, 1, 0, 0, TD.STAMP )          WRITE oldrec ON F.ED.ARCHIVE, ARCHIVE.ID        END      END    END    WRITE record ON F.FILE, item    IF record[1,3] = "SUB" THEN BASIC.SUB = 1    IF QUIET.MODE THEN      record = ""    END ELSE      HMESSAGE<-1> = item:" saved, ":LEN(record):" bytes."    END  END ELSE    READ record FROM F.FILE, item THEN      HMESSAGE<-1> = item:" opened, ":LEN(record):" bytes."    END ELSE      record = ""      HMESSAGE<-1> = "New Item: ":item    END    IF record = "" THEN      NEW.ITEM.FLAG = 1      BEGIN CASE        CASE filename = "RSS.BP"          record = 'SUBROUTINE ':item          record<-1> = '*'          record<-1> = '* RSS Feed'          record<-1> = '*'          record<-1> = 'INCLUDE RSS.BP RSS.DATA.INC'          record<-1> = '*'          IF INDEX(item,'.SEL',1) THEN            record<-1> = '* EXECUTE SELECT - Create active select list'            record<-1> = 'RETURN'          END ELSE IF INDEX(item,'.ITEM',1) THEN            record<-1> = 'RSS$TITLE = "" ;* Title text'            record<-1> = 'RSS$LINK = "" ;* Link to URL for full-view (if applicable)'            record<-1> = 'RSS$AUTHOR = "" ;* Author'            record<-1> = 'RSS$DATE = "" ;* Date of feed item (internal)'            record<-1> = 'RSS$TIME = "" ;* Time of feed item (internal)'            record<-1> = 'RSS$DESCRIPTION = "" ;* Feed description text (HTML)'            record<-1> = '*'            record<-1> = '* Programming to fill in the above values goes here.'            record<-1> = '*'            record<-1> = 'RETURN'          END        CASE filename = 'MVDB.SUBS'          EDIT.SCRIPTS = "NEW_PROGRAM_DIALOG = 1;":CHAR(10)          EDIT.SCRIPTS := 'widgetTypes = new Array();':CHAR(10)          OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES THEN            EXECUTE 'SSELECT MVDB.WIDGET.TYPES BY GROUP BY HANDLER WITH INACTIVE # "1"' CAPTURING JUNK            LOOP              READNEXT TYPE.ID ELSE EXIT              MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, TYPE.ID THEN                CALL SWAP(WT$DESC,'"','\"')                CLASS.NAME = FIELD(WT$ICON,'.',1)                CONVERT "_" TO "-" IN CLASS.NAME                EDIT.SCRIPTS := 'widgetTypes["':TYPE.ID:'"] = new Array("':WT$DESC:'","':CLASS.NAME:'");':CHAR(10)              END            REPEAT          END          record = 'SUBROUTINE ':item          record<-1> = '*'          record<-1> = '* Dashboard Widget'          record<-1> = '*'          record<-1> = 'INCLUDE WBPD MVDB.INCLUDE'          record<-1> = '*'        CASE 1 ; NULL      END CASE    END  ENDEND ELSE  HMESSAGE<-1> = "Unable to open file '":filename:"'"  GOSUB ADD.MESSAGE  CALL WEB.SEND(HTML)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPEND*OUTPUT = "" ;* Compiler outputCOMP.ERRLINE = ""BEGIN CASE  CASE HMESSAGE # "" ; NULL  CASE action = "compile"    READV BASIC.TEMPLATE FROM F.MVDB.CONTROL, "COMPILE.SETUP", 1 ELSE BASIC.TEMPLATE = ""    IF BASIC.TEMPLATE # "" THEN      CMD = BASIC.TEMPLATE      CALL SWAP(CMD,"%FILENAME%",filename)      CALL SWAP(CMD,"%ITEMNAME%",item)    END ELSE      CMD = "BASIC ":filename:" ":item    END    EXECUTE CMD CAPTURING CMPOUTPUT    OUTPUT<-1> = CMD    OUTPUT<-1> = CMPOUTPUT    * If the compile failed, find the first error line #    CO = 1    LOOP UNTIL CO > DCOUNT( CMPOUTPUT, @AM ) DO      LN = FIELD(TRIM(CMPOUTPUT<CO>),' ',1)      IF LN MATCHES "4N" THEN        COMP.ERRLINE = (LN+0)        EXIT      END ELSE CO += 1    REPEAT    IF BASIC.SUB = 1 THEN      CMD = "CATALOG ":filename:" ":item      EXECUTE CMD CAPTURING CATOUTPUT      OUTPUT<-1> = CMD      OUTPUT<-1> = CATOUTPUT    END  CASE action = "save"  CASE 1    NULLEND CASE*SUBLIST = ''INCLIST = ''FILELIST = ''IF record # "" THEN  GOSUB BUILD.SUBLIST  GOSUB BUILD.INCLIST  GOSUB BUILD.FILELISTENDIF filename = "WEB.FORMS" THEN SYNTAX = "html" ELSE SYNTAX = "basic"** Last compile date/time?*CSTRING = ""IF SYNTAX = "basic" THEN  EXECUTE "SELECT DICT ":filename:" '":item:"' C/DATE C/TIME" CAPTURING JUNK  READNEXT CDATE ELSE CDATE = ""  READNEXT CTIME ELSE CTIME = ""  CLEARSELECT  IF CDATE MATCHES "1N0N" AND CTIME MATCHES "1N0N" THEN    CDATE = OCONV(CDATE, 'D2/')    CTIME = OCONV(CTIME, 'MTS')    CSTRING = "Last compiled on ":CDATE:" at ":CTIME:'<br />'  ENDENDIF OUT.OF.ACCOUNT THEN  LOCATE myacct IN ACCTS<1> SETTING APOS THEN    password = ACCTS<2,APOS>  END ELSE password = ""*  DATA password  EXECUTE "LOGTO ":myacct CAPTURING LOGTO.OUT  IF LOGTO.OUT # "" THEN    * Fatal error - cannot get back to our account. Send crapy CGI error.    PRINT "Content-type: text/html"    PRINT    PRINT "<html><body>Error returning to ":myacct:", ":LOGTO.OUT    PRINT "Check MVDB.CONTROL, ED.ACCOUNTS settings.</body></html>"    GLOBAL.INFO(100) = 1 ;* Intentional stop    STOP  END  * Re-open the master dictionary in the local account.  OPEN '','MD' TO F.MD ELSE    OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'  ENDENDIF OUTPUT # "" THEN  CALL SWAP(OUTPUT,'&','&amp;')  CALL SWAP(OUTPUT,'<','&lt;')  CALL SWAP(OUTPUT,'>','&gt;')ENDGOSUB ADD.MESSAGEIF record # "" THEN  CALL SWAP(record,'&','&amp;')  CALL SWAP(record,'<','&lt;')  CALL SWAP(record,'>','&gt;')ENDIF action = "compile" THEN  CALL SWAP(OUTPUT,@AM,"<br>")ENDIF QUIET.MODE THEN  FORM = ""END ELSE  FORM = '<form id="ed_form" method="post" action="':CGI$PATH:'/MVDB.WEB.ED" >'  FORM<-1> = '<textarea id="file_1" style="height: 100%; width: 100%;" name="record">'  FORM<-1> = record  FORM<-1> = '</textarea>'  IF acct = "" THEN USE.ACCT = myacct ELSE USE.ACCT = acct  FORM<-1> = '<input type="hidden" name="ed_acct" value = "':USE.ACCT:'" />'  FORM<-1> = '<input type="hidden" name="ed_file" value="':filename:'" />'  FORM<-1> = '<input type="hidden" name="ed_item" value="':item:'" />'  FORM<-1> = '<input type="hidden" name="action" value="" />'  FORM<-1> = '</form>'ENDCALL SWAP(HTML,'<!-- SYNTAX -->',SYNTAX)CALL SWAP(HTML,'<!-- WINDOW_HEIGHT -->',height)CALL SWAP(HTML,'<!-- FILE -->',filename)CALL SWAP(HTML,'<!-- ITEM -->',item)CALL SWAP(HTML,'<!-- BODY -->',FORM)CALL SWAP(HTML,'<!-- LAST_COMPILE -->',CSTRING)CALL SWAP(HTML,'<!-- COMPILE_OUTPUT -->',OUTPUT)CALL SWAP(HTML,'<!-- COMPILE_ERRLINE -->',COMP.ERRLINE)CALL SWAP(HTML,'<!-- ED_CONTENT -->',record)*SUB.CNT = DCOUNT( SUBLIST<1>, @VM )INC.CNT = DCOUNT( INCLIST<1>, @VM )FILE.CNT = DCOUNT( FILELIST<1>, @VM )IF SUB.CNT > INC.CNT THEN MAX.CNT = SUB.CNT ELSE MAX.CNT = INC.CNTIF FILE.CNT > MAX.CNT THEN MAX.CNT = FILE.CNT*IF acct # "" THEN  URL.ACCT = acct  CALL SUB.URL.ENCODE(URL.ACCT)  ACCT.LINK = "ed_acct=":URL.ACCT:"&"END ELSE ACCT.LINK = ""*IF SUB.CNT THEN  EA.CALLS ='<table width="100%"><tbody><tr><th>File</th><th>Program</th><th>Line(s)</th></tr>'END ELSE EA.CALLS = ""IF INC.CNT THEN  EA.INCS ='<table width="100%"><tbody><tr><th>File</th><th>Program</th><th>Line(s)</th></tr>'END ELSE EA.INCS = ""IF FILE.CNT THEN  EA.FILES = '<table width="100%"><tbody><tr><th>File</th><th>Operation</th><th>Line(s)</th></tr>'END ELSE EA.FILES = ""FOR LX = 1 TO MAX.CNT  IF LX <= SUB.CNT THEN    URL.SUBFILE = SUBLIST<1,LX>    CALL SUB.URL.ENCODE(URL.SUBFILE)    URL.SUBITEM = SUBLIST<2,LX>    CALL SUB.URL.ENCODE(URL.SUBITEM)    PROGFNAME = SUBLIST<1,LX>    PROGNAME = SUBLIST<2,LX>    CALL SWAP(PROGNAME,"'","\'")    CALL SWAP(PROGFNAME,"'","\'")    IF SUBLIST<2,LX>[1,1] = "@" THEN ;* This is a CALL @ function, so no link to open the subroutine      EA.CALLS := '<tr><td>':PROGFNAME:'</td><td>':PROGNAME:'</a></td>'    END ELSE      EA.CALLS := '<tr><td>':PROGFNAME:'</td><td><a target="':URL.SUBFILE:'_':URL.SUBITEM:'" href="/dbc/MVDB.WEB.ED?':ACCT.LINK:'ed_file=':URL.SUBFILE:'&ed_item=':URL.SUBITEM:'">':PROGNAME:'</a></td>'    END    EA.CALLS := '</td><td>'    CL.CNT = DCOUNT( SUBLIST<4,LX>, @SVM )    FOR LXL = 1 TO CL.CNT      EA.CALLS := '<a href="#" onclick="javascript:editArea.go_to_line(':ESC.APOS:SUBLIST<4,LX,LXL>:ESC.APOS:'); return false;">':SUBLIST<4,LX,LXL>:'</a>'      IF LXL < CL.CNT THEN EA.CALLS := ", "    NEXT LXL  END  IF LX <= INC.CNT THEN    URL.INCFILE = INCLIST<1,LX>    CALL SUB.URL.ENCODE(URL.INCFILE)    URL.INCITEM = INCLIST<2,LX>    CALL SUB.URL.ENCODE(URL.INCITEM)    INCFNAME = INCLIST<1,LX>    INCNAME = INCLIST<2,LX>    CALL SWAP(INCNAME,"'","\'")    CALL SWAP(INCFNAME,"'","\'")    EA.INCS := '<tr><td>':INCFNAME:'</td><td><a target="':URL.INCFILE:'_':URL.INCITEM:'" href="/dbc/MVDB.WEB.ED?':ACCT.LINK:'ed_file=':URL.INCFILE:'&ed_item=':URL.INCITEM:'">':INCNAME:'</a>'    EA.INCS := '</td><td>'    IN.CNT = DCOUNT( INCLIST<4,LX>, @SVM )    FOR LXL = 1 TO IN.CNT      EA.INCS := '<a href="#" onclick="javascript:editArea.go_to_line(':ESC.APOS:INCLIST<4,LX,LXL>:ESC.APOS:'); return false;">':INCLIST<4,LX,LXL>:'</a> '      IF LXL < IN.CNT THEN EA.INCS := ", "    NEXT LXL  END  IF LX <= FILE.CNT THEN    FOR FOPX = 1 TO DCOUNT( FILELIST<3,LX>, @SVM )      IF FOPX = 1 THEN SHOW.FILENAME = FILELIST<1,LX> ELSE SHOW.FILENAME = '&nbsp;'      EA.FILES := '<tr><td>':SHOW.FILENAME:'</td><td>':FILELIST<3,LX,FOPX>      EA.FILES := '</td><td>'      IN.CNT = DCOUNT( FILELIST<5,LX,FOPX>, "," )      FOR LXL = 1 TO IN.CNT        LNO = FIELD( FILELIST<5,LX,FOPX>,',',LXL)        EA.FILES := '<a href="#" onclick="javascript:editArea.go_to_line(':ESC.APOS:LNO:ESC.APOS:'); return false;">':LNO:'</a>'        IF LXL < IN.CNT THEN EA.FILES := ", "      NEXT LXL      EA.FILES := '</td></tr>'    NEXT FOPX  ENDNEXT LXIF SUB.CNT THEN  EA.CALLS := '</td></tr></tbody></table>'ENDIF INC.CNT THEN  EA.INCS := '</td></tr></tbody></table>'ENDIF FILE.CNT THEN  EA.FILES := '</tbody></table>'END*ARC.LIST = ""ARC.CNT = 0IF ARCHIVE THEN  * Archiving is enabled. Find a list of archived copies of this file  IF acct = "" THEN USE.ACCT = myacct ELSE USE.ACCT = acct  CMD = 'SSELECT MV.WEB.ED.ARCHIVE WITH ACCT = "':USE.ACCT:'" AND WITH FILE.NAME = "':filename:'" AND WITH ITEM = "':item:'" BY-DSND DATE BY-DSND TIME'  EXECUTE CMD CAPTURING JUNK  IF SYSTEM(11) THEN    ARC.LIST = '<table width="100%"><tbody><tr><th>Date</th><th>Time</th><th>Open</th></tr>'    ARC.CNT = SYSTEM(11)    LOOP      READNEXT AID ELSE EXIT      READV DT.STAMP FROM F.ED.ARCHIVE, AID, 1 ELSE DT.STAMP = ""      ARC.LIST := '<tr><td>':OCONV(FIELD(DT.STAMP,'*',2),'D2/'):'</td><td>':OCONV(FIELD(DT.STAMP,'*',1),'MTS'):'</td><td>'      URL.AID = AID      CALL SUB.URL.ENCODE(URL.AID)      ARC.LIST := '<a href="/dbc/MVDB.WEB.ED?ed_acct=MVDB&ed_file=MV.WEB.ED.ARCHIVE&ed_item=':URL.AID:'" target="MVDB_MV.WEB.ED.ARCHIVE_':URL.AID:'">Open</a>'      ARC.LIST := '</td></tr>'    REPEAT    ARC.LIST := '</tbody></table>'  ENDEND*CALL SWAP(HTML,'<!-- EA_CALLS_CONTENT -->',EA.CALLS)CALL SWAP(HTML,'<!-- EA_INCLUDES_CONTENT -->',EA.INCS)CALL SWAP(HTML,'<!-- EA_FILES_CONTENT -->',EA.FILES)CALL SWAP(HTML,'<!-- EA_ARCHIVE_CONTENT -->',ARC.LIST)CALL SWAP(HTML,'<!-- NUM_OF_CALLS -->',SUB.CNT)CALL SWAP(HTML,'<!-- NUM_OF_INCLUDES -->',INC.CNT)CALL SWAP(HTML,'<!-- NUM_OF_FILES -->',FILE.CNT)CALL SWAP(HTML,'<!-- NUM_OF_ARCHIVES -->',ARC.CNT)CALL SWAP(HTML,'<!-- ED_SCRIPTS -->',EDIT.SCRIPTS)CALL WEB.SEND(HTML)GLOBAL.INFO(100) = 1 ;* Intentional stopSTOP*ADD.MESSAGE: **CALL SWAP(HTML,'<!-- HEADER -->',HMESSAGE)CALL SWAP(HTML,'<!-- FOOTER -->',FMESSAGE)RETURN*BUILD.SUBLIST: * Build a list of subroutines called by this program*IDX.POS = 1LPOS = 1LOOP  POS = INDEX( record, "CALL ", IDX.POS )WHILE POS DO  LINE.NUM = DCOUNT(record[1,POS+1],@AM)  LINE = TRIM(record<LINE.NUM>)  IF LINE[1,1] # "*" AND LINE[1,1] # "!" THEN    CALL.POS = INDEX( LINE, 'CALL ', 1 )    QCPOS = CALL.POS    GOSUB QUOTE.CHECK ;* Make sure the "CALL " is not in a quote    SKIP.LINE = 0    IF IN.QUOTE THEN SKIP.LINE = 1 ELSE      MID.CMNT.POS = INDEX(LINE,';*',1)      IF MID.CMNT.POS AND MID.CMNT.POS < CALL.POS THEN        * Is the mid-line comment within a quote?        QCPOS = MID.CMNT.POS        GOSUB QUOTE.CHECK        IF NOT(IN.QUOTE) THEN SKIP.LINE = 1      END    END    IF SKIP.LINE THEN ;* This is happening inside a literal string, ignore it.      IDX.POS += 1      CONTINUE    END    TEMP.STR = LINE[1,CALL.POS]    SUBNAME = LINE[CALL.POS+5,999]    IF INDEX( SUBNAME,'(',1) THEN      SUBNAME = FIELD( SUBNAME, '(', 1 )    END ELSE SUBNAME = FIELD(SUBNAME,' ',1)    SUBNAME = TRIM(SUBNAME)    *    READ CATPTR FROM F.MD, SUBNAME ELSE CATPTR = ""    IF CATPTR # "" THEN      *PJS 07-17-15 BEGIN UV*      *SUBFILE = FIELD( CATPTR<4>, ' ', 1 )      SUBFILE=filename      IF SYSTEM(91) THEN DS = '\' ELSE DS = '/'      NDS = DCOUNT(CATPTR<2>, DS)      IF NDS >= 2 THEN        SUBPATH = FIELD(CATPTR<2>,DS,NDS-1)        IF SUBPATH[LEN(SUBPATH)-1,2]='.O' THEN SUBFILE=SUBPATH[1,LEN(SUBPATH)-2]      END      *PJS 07-17-15 END UV*    END ELSE SUBFILE = filename        UKEY = SUBFILE:"*":SUBNAME    LOCATE UKEY IN SUBLIST<3> SETTING FOUND.POS THEN      SUBLIST<4,FOUND.POS,-1> = LINE.NUM    END ELSE      SUBLIST<1,LPOS> = SUBFILE      SUBLIST<2,LPOS> = SUBNAME      SUBLIST<3,LPOS> = UKEY      SUBLIST<4,LPOS> = LINE.NUM      LPOS += 1    END  END  IDX.POS += 1REPEATRETURN*BUILD.INCLIST: * Build a list of include items used by this program*IDX.POS = 1LPOS = 1LOOP  POS = INDEX( record, "INCLUDE ", IDX.POS )WHILE POS DO  LINE.NUM = DCOUNT(record[1,POS+1],@AM)  LINE = TRIM(record<LINE.NUM>)  SEMI.POS = INDEX( LINE, ';', 1 )  IF SEMI.POS THEN LINE = LINE[1,SEMI.POS-1]  IF TRIM(LINE[1,8]) = "INCLUDE" THEN    INC.POS = INDEX( LINE, 'INCLUDE ', 1 )    QCPOS = INC.POS    GOSUB QUOTE.CHECK    IF IN.QUOTE THEN ;* This is happening inside a literal string, ignore it.      IDX.POS += 1      CONTINUE    END    INCPARAM = LINE[INC.POS+8,999]    INCFILE = FIELD( INCPARAM, ' ', 1 )    INCITEM = FIELD( INCPARAM, ' ', 2 )    IF INCITEM = '' THEN      INCITEM = INCFILE      INCFILE = filename    END    UKEY = INCFILE:"*":INCITEM    LOCATE UKEY IN INCLIST<3> SETTING FOUND.POS THEN      INCLIST<4,FOUND.POS,-1> = LINE.NUM    END ELSE      INCLIST<1,LPOS> = INCFILE      INCLIST<2,LPOS> = INCITEM      INCLIST<3,LPOS> = UKEY      INCLIST<4,LPOS> = LINE.NUM      LPOS += 1    END  END  IDX.POS += 1REPEATRETURN*BUILD.FILELIST: * Build a list of files used by this program*IDX.POS = 1LPOS = 1LOOP  POS = INDEX( record, "OPEN ",IDX.POS )WHILE POS DO  LINE.NUM = DCOUNT(record[1,POS+1],@AM)  LINE = TRIM(record<LINE.NUM>)  IF LINE[1,1] # "*" AND LINE[1,1] # "!" THEN    OPOS = INDEX( LINE, 'OPEN ', 1 )    QCPOS = OPOS    GOSUB QUOTE.CHECK ;* Make sure this doesn't appear inside a literal string    IF IN.QUOTE THEN      IDX.POS += 1      CONTINUE    END    CONVERT "'" TO '"' IN LINE ;* Standaraize the quote character    CONVERT "\" TO '"' IN LINE    * An open statement may look like this: OPEN "","FILENAME"  - Get rid of the "", if it exists    DPOS = INDEX( LINE, '"",', 1 )    IF DPOS THEN      LINE = LINE[1,DPOS-1]:LINE[DPOS+3,999]    END    OPARAM = LINE[OPOS+5,999]    TPOS = INDEX( OPARAM, ' TO ', 1 )    IF NOT(TPOS) THEN      IDX.POS += 1      CONTINUE ;* Must not be an open statement.    END    FILEVAR = OPARAM[TPOS+4,999]    FILEVAR = FIELD( TRIM( FILEVAR ), ' ', 1 )    OPARAM = OPARAM[1,TPOS]*3-9-15*    FILENAME = TRIM(OPARAM)*3-9-15*    IF FILENAME[1,1] = '"' THEN FILENAME = FIELD(FILENAME,'"',2)*3-9-15*    UKEY = FILENAME:"*":FILEVAR    FILENAME.VAR = TRIM(OPARAM); *3-9-15*    IF FILENAME.VAR[1,1] = '"' THEN FILENAME.VAR = FIELD(FILENAME.VAR,'"',2); *3-9-15*    UKEY = FILENAME.VAR:"*":FILEVAR; *3-9-15*    LOCATE UKEY IN FILELIST<4> SETTING FOUND.POS THEN      FILELIST<5,FOUND.POS,-1> = LINE.NUM    END ELSE*3-9-15*      FILELIST<1,LPOS> = FILENAME      FILELIST<1,LPOS> = FILENAME.VAR; *3-9-15*      FILELIST<2,LPOS> = FILEVAR      FILELIST<3,LPOS,1> = "Open"      FILELIST<4,LPOS> = UKEY      FILELIST<5,LPOS,1> = LINE.NUM      F.R.IDX = 1; F.R.LINES = ""      LOOP        F.R.POS = INDEX( record, "FROM ":FILEVAR, F.R.IDX )      WHILE F.R.POS DO        F.R.IDX += 1        IF F.R.LINES # "" THEN F.R.LINES := ","        F.R.LINES := DCOUNT(record[1,F.R.POS+1],@AM)      REPEAT      IF F.R.IDX > 1 THEN        * Read operation        FILELIST<3,LPOS,-1> = "Read"        FILELIST<5,LPOS,-1> = F.R.LINES      END      *      F.W.IDX = 1 ; F.W.LINES = ""      LOOP        F.W.POS =  INDEX( record, "ON ":FILEVAR, F.W.IDX )      WHILE F.W.POS DO        F.W.IDX += 1        IF F.W.LINES # "" THEN F.W.LINES := ","        F.W.LINES := DCOUNT(record[1,F.W.POS+1],@AM)      REPEAT      IF F.W.IDX > 1 THEN        * Write operation        FILELIST<3,LPOS,-1> = "Write"        FILELIST<5,LPOS,-1> = F.W.LINES      END      *      F.D.IDX = 1 ; F.D.LINES = ""      LOOP        F.D.POS =  INDEX( record, "DELETE ":FILEVAR, F.D.IDX )      WHILE F.D.POS DO        F.D.IDX += 1        IF F.D.LINES # "" THEN F.D.LINES := ","        F.D.LINES := DCOUNT(record[1,F.D.POS+1],@AM)      REPEAT      IF F.D.IDX > 1 THEN        * Delete operation        FILELIST<3,LPOS,-1> = "Delete"        FILELIST<5,LPOS,-1> = F.D.LINES      END      LPOS += 1    END  END  IDX.POS += 1REPEATRETURN*QUOTE.CHECK: * Is the data in LINE at QCPOS inside quotes?*CURR.Q = ""FOR SEEK.POS = 1 TO QCPOS  QCH = LINE[SEEK.POS,1]  BEGIN CASE    CASE CURR.Q # ""      IF QCH = CURR.Q THEN        CURR.Q = ""      END    CASE QCH = "'" ; CURR.Q = QCH    CASE QCH = '"' ; CURR.Q = QCH    CASE QCH = '\' ; CURR.Q = QCH  END CASENEXT SEEK.POSIF CURR.Q # "" THEN IN.QUOTE = 1 ELSE IN.QUOTE = 0RETURN00650CMVDB.ADMIN0c2* Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Administration area of Bravo Dashboard** 07-17-15 PETER SCHELLENBACH OF ZUMASYS - MODIFIED FOR UV*          CHANGE OCONV(X,'U3060') TO DIGEST('MD5'...)** 09-23-16 Peter Schellenbach*  Add support for alternate logo defined for each user (MVDB.USERS attr 7).*  Requires corresponding changes in WEB.FORMS admin_template.html and*  javascripts initAdminTemplate.js to edit the alternate logo field.** 06-19-17 Peter Schellenbach*  Fix bug where encrypted passwords were being stored in MVDB.USERS without*  converting to hex (MVDB.MAIN compares hex-converted encrypted password).**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.USERSINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*DIM DB.AREAS(5)*OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MVDB.SUBS' TO F.MVDB.SUBS ELSE STOP 201, 'MVDB.SUBS'OPEN '','MVDB.USERS' TO F.MVDB.USERS ELSE STOP 201, 'MVDB.USERS'OPEN '','MVDB.DEFS' TO F.MVDB.DEFS ELSE STOP 201, 'MVDB.DEFS'OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE STOP 201, 'MVDB.WIDGET.TYPES'OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'OPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE STOP 201, 'MVDB.THEMES'*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDENDIF THEME.CSS # '' THEN THEME.CSS = '<link rel="Stylesheet" href="/db/themes/':THEME.CSS:'" media="screen" type="text/css" />'IF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'**SESSION$GLOBAL.DEBUG = 1*GLOBAL.INFO(100) = 0CALL GET.SESSION.VAR("adminauth",adminauth)CALL PUT.SESSION.VAR("dd_mode",0)adminpass = ""IF adminauth # 1 THEN  FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'  FORM := '</head><body><p>Administrative priviledges are required. '  FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'  CALL WEB.SEND(FORM)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPEND*LOCATE "action" IN CGI$VARS SETTING POS THEN  action = CGI$VALS<POS>END ELSE action = ""LOCATE "filter" IN CGI$VARS SETTING POS THEN  filter = CGI$VALS<POS>END ELSE  CALL GET.SESSION.VAR("widget_filter",filter)ENDLOCATE "clearfilter" IN CGI$VARS SETTING POS THEN  filter = ""ENDCALL PUT.SESSION.VAR("widget_filter",filter)*LOCATE "unfail_widget" IN CGI$VARS SETTING POS THEN  UNFAIL.WIDGET = CGI$VALS<POS>  CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  LOCATE UNFAIL.WIDGET IN FAILED.WIDGETS SETTING DPOS THEN    FAILED.WIDGETS = DELETE( FAILED.WIDGETS, DPOS, 0, 0 )    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  END  action = "widgets"END*ACTIVE.MENU = ''HTML = ''SCRIPTS = ""BEGIN CASE  CASE action = "users" OR action = ""    GOSUB LOAD.USERS  CASE action = "widgets"    GOSUB LOAD.WIDGETS  CASE action = "save_widget"    LOCATE "save_widget" IN CGI$VARS SETTING POS THEN      LOCATE "save_widgetid" IN CGI$VARS SETTING POS THEN        save.widgetid = CGI$VALS<POS>        LOCATE "newwidget" IN CGI$VARS SETTING POS THEN          newwidget = (CGI$VALS<POS> = 1)        END ELSE newwidget = ""        IF newwidget = 1 THEN          LOCATE "new_widgetid" IN CGI$VARS SETTING POS THEN            save.widgetid = CGI$VALS<POS>          END        END ELSE newwidget = 0        IF newwidget THEN          MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, save.widgetid THEN            SQN = 1            LOOP              new.saveid = save.widgetid:"-":SQN              MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, new.saveid THEN                SQN += 1              END ELSE                save.widgetid = new.saveid                EXIT              END            REPEAT          END        END        IF save.widgetid # "" THEN          MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, save.widgetid ELSE MAT WIDGET.ITEM = ''          LOCATE "widget_sub" IN CGI$VARS SETTING POS THEN            WIDGET.SUB = CGI$VALS<POS>          END          LOCATE "widget_users" IN CGI$VARS SETTING POS THEN            USER.LIST = CGI$VALS<POS>            CONVERT "," TO @VM IN USER.LIST            WIDGET.USERS = USER.LIST          END ELSE WIDGET.USERS = ""          LOCATE "new_widget_name" IN CGI$VARS SETTING POS THEN            NEW.NAME = CGI$VALS<POS>            IF NEW.NAME = save.widgetid THEN NEW.NAME = ""          END ELSE NEW.NAME = ""          IF NEW.NAME # "" THEN            * A rename of the widget has occurred.            MATWRITE WIDGET.ITEM ON F.MVDB.WIDGETS, NEW.NAME            DELETE F.MVDB.WIDGETS, save.widgetid            * Rename instances of this widget name within dashboard definitions            SELECT F.MVDB.DEFS            LOOP              READNEXT DBID ELSE EXIT              MATREADU DB.ITEM FROM F.MVDB.DEFS, DBID ELSE CONTINUE              LOOP                LOCATE save.widgetid IN DB.WIDGETS<1> SETTING RPOS THEN                  FOUND = 1                  DB.WIDGETS<1,RPOS> = NEW.NAME                END ELSE FOUND = 0              WHILE FOUND DO REPEAT              MATWRITE DB.ITEM ON F.MVDB.DEFS, DBID            REPEAT          END ELSE            MATWRITE WIDGET.ITEM ON F.MVDB.WIDGETS, save.widgetid          END        END      END    END ELSE      LOCATE "delete_widget" IN CGI$VARS SETTING POS THEN        LOCATE "save_widgetid" IN CGI$VARS SETTING POS THEN          save.widgetid = CGI$VALS<POS>          DELETE F.MVDB.WIDGETS, save.widgetid        END      END    END    GOSUB LOAD.WIDGETS  CASE action = "dashboards"    GOSUB LOAD.DASHBOARDS  CASE action = "editdb" OR action = "adddb"    ACTIVE.MENU = "DASHBOARDS"    READ INNER.TEMPLATE FROM F.WEB.FORMS, "admin_dashboards.html" ELSE INNER.TEMPLATE = "admin_dashboards.html not found"    DASHBOARD.LIST = ''    EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNK    LOOP      READNEXT ID ELSE EXIT      DASHBOARD.LIST<-1> = ID    REPEAT    CALL SWAP(DASHBOARD.LIST, CHAR(254), '","')    DASHBOARD.LIST = '"':DASHBOARD.LIST:'"'    CALL SWAP(INNER.TEMPLATE,'<!-- list_of_dashboard_ids -->',DASHBOARD.LIST)    *    IF action = "adddb" THEN      edit.id = "new_db"      EDIT.PROMPT = '<input id="edit_dbid" type="text" value="Untitled Dashboard" name="edit_dbid"/>'      CALL SWAP(INNER.TEMPLATE,'<!-- save_dbid -->',edit.id)      CALL SWAP(INNER.TEMPLATE,'<!-- edit_dbid -->',EDIT.PROMPT)      MAT DB.ITEM = ''    END ELSE      LOCATE "edit_dbid" IN CGI$VARS SETTING POS THEN        edit.id = CGI$VALS<POS>      END ELSE edit.id = ""      *      MATREAD DB.ITEM FROM F.MVDB.DEFS, edit.id ELSE MAT DB.ITEM = ''      *      EDIT.PROMPT = '<input id="db_id" type="text" value="':edit.id:'" name="db_new_id" size="63" />'       CALL SWAP(INNER.TEMPLATE,'<!-- save_dbid -->',edit.id)      CALL SWAP(INNER.TEMPLATE,'<!-- edit_dbid -->',EDIT.PROMPT)    END    CALL MVDB.SUB.WIDGET.LIST(WIDGET.LIST)    *    SCRIPT1 = 'var widgetList = new Array("");':CHAR(10)    CALL SWAP(INNER.TEMPLATE,'<!-- db_desc -->',DB.DESC)    CALL SWAP(INNER.TEMPLATE,'<!-- db_sort -->',DB.SORT)    *    *DB.THEME db_theme select list    *    theme.select = '<select name="db_theme">'    theme.select := CHAR(10):'<option value="">Default Theme</option>'    EXECUTE 'SSELECT MVDB.THEMES' CAPTURING JUNK    THEME.LIST = ''    LOOP      READNEXT THEME.ID ELSE EXIT      READV CSS.NAME FROM F.MVDB.THEMES, THEME.ID, 1 ELSE CSS.NAME = ''      IF CSS.NAME # '' THEN        SELECTED = ''        IF THEME.ID = DB.THEME THEN SELECTED = ' selected'        theme.select := CHAR(10):'<option value="':THEME.ID:'"':SELECTED:'>':THEME.ID:'</option>'      END    REPEAT    theme.select := CHAR(10):'</select>':CHAR(10)    CALL SWAP(INNER.TEMPLATE,'<!-- db_theme -->',theme.select)        CALL SWAP(INNER.TEMPLATE,'<!-- db_sort -->',DB.SORT)    *    SHOW.USERS = DB.USERS.ALLOWED    CONVERT @VM TO "," IN SHOW.USERS    CALL SWAP(INNER.TEMPLATE,'<!-- db_users -->',SHOW.USERS)    *    ACTIVE1 = "" ; ACTIVE2 = "" ; ACTIVE3 = ""    IF DB.TEMPLATE = "" THEN DB.TEMPLATE = 1    SCRIPT1 := 'var defaultLayout=':DB.TEMPLATE:';':CHAR(10)    BEGIN CASE      CASE DB.TEMPLATE = 3 ; ACTIVE3 = 'class="active"'      CASE DB.TEMPLATE = 2 ; ACTIVE2 = 'class="active"'      CASE DB.TEMPLATE = 1 OR 1 ; ACTIVE1 = 'class="active"'    END CASE    LAYOUT.OPTS  = '<li ':ACTIVE1:'><label>1 column</label><img alt="1" src="/db/images/1-column-layout.png" /></li>'    LAYOUT.OPTS := '<li ':ACTIVE2:'><label>2 column</label><img alt="2" src="/db/images/2-column-layout.png" /></li>'    LAYOUT.OPTS := '<li ':ACTIVE3:'><label>3 column</label><img alt="3" src="/db/images/3-column-layout.png" /></li>'    *    CALL SWAP(INNER.TEMPLATE,'<!-- db_layout_opts -->',LAYOUT.OPTS)    *    * Create a list of widgets by area    *    MAT DB.AREAS = ""    FOR X = 1 TO DCOUNT( DB.WIDGETS, @VM )      WID = DB.WIDGETS<1,X>      CALL SWAP(WID,'"','\"')      LOCATE WID IN WIDGET.LIST<1> SETTING WPOS THEN        WWIDTH = WIDGET.LIST<6,WPOS>        WTYPE = WIDGET.LIST<4,WPOS>        FAIL.TEXT = WIDGET.LIST<8,WPOS>      END ELSE        WTYPE = "UNKNOWN"        WWIDTH = 1        FAIL.TEXT = ""      END      THIS.AREA = DB.WIDGET.AREA<1,X>      IF NOT(THIS.AREA MATCHES "1N") THEN THIS.AREA = 1      IF THIS.AREA < 1 OR THIS.AREA > 5 THEN THIS.AREA = 1      MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, WTYPE THEN        CLASS.NAME = FIELD(WT$ICON,'.',1)        CONVERT "_" TO "-" IN CLASS.NAME        WIDTH.CLASS = ""        BEGIN CASE          CASE WWIDTH = 1 ; WIDTH.CLASS = 'widget-small'          CASE WWIDTH = 2 ; WIDTH.CLASS = 'widget-medium'          CASE WWIDTH = 3 OR 1; WIDTH.CLASS = 'widget-large'        END CASE        SHOW.WID = WID        IF FAIL.TEXT # "" THEN SHOW.WID := " (":FAIL.TEXT:")"        DB.AREAS(THIS.AREA) := '<div name="':WID:'" class="':CLASS.NAME:'"><span type="':WTYPE:'" class="':WIDTH.CLASS:'" >':SHOW.WID:'</span></div>'      END    NEXT X    FOR X = 1 TO 5      CALL SWAP(INNER.TEMPLATE,'<!-- AREA_':X:'_WIDGETS -->',DB.AREAS(X))    NEXT X    *    * Build widget option list    *    WOPTS = ''    ALL.WIDGET.CNT = DCOUNT( WIDGET.LIST<1>, @VM )    FOR X = 1 TO ALL.WIDGET.CNT      USE.DESC = WIDGET.LIST<2,X>      WID = WIDGET.LIST<1,X>      WDESC = WIDGET.LIST<2,X>      WTYPE = WIDGET.LIST<4,X>      WWIDTH = WIDGET.LIST<6,X>      FAIL.TEXT = WIDGET.LIST<8,X>      CALL SWAP(WDESC,'"','\"')      CALL SWAP(WID,'"','\"')      MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, WTYPE THEN        CLASS.NAME = FIELD(WT$ICON,'.',1)        CONVERT "_" TO "-" IN CLASS.NAME        WIDTH.CLASS = ""        BEGIN CASE          CASE WWIDTH = 1 ; WIDTH.CLASS = 'widget-small'          CASE WWIDTH = 2 ; WIDTH.CLASS = 'widget-medium'          CASE WWIDTH = 3 OR 1; WIDTH.CLASS = 'widget-large'        END CASE        SHOW.WID = WID        IF FAIL.TEXT # "" THEN SHOW.WID := " (":FAIL.TEXT:")"        WOPTS := '<div class="':CLASS.NAME:'"><span name="':WID:'" class="widget-id ':WIDTH.CLASS:'" type="':WTYPE:'">':SHOW.WID:'</span></div>':CHAR(10)      END      SCRIPT1 := \widgetList["\:WID:\"] = new Array("\:WDESC:\","\:WTYPE:\","\:WIDGET.LIST<6,X>:\");\    NEXT X    *    GOSUB MAKE.DB.SCRIPT    SCRIPTS<-1> = SCRIPT1    *    CALL SWAP(INNER.TEMPLATE,'<!-- widget_list -->',WOPTS)    HTML = INNER.TEMPLATE  CASE action = "save_db"    LOCATE "save_db" IN CGI$VARS SETTING POS THEN      SAVE.OK = 1      rename.id = ""      LOCATE "save_dbid" IN CGI$VARS SETTING POS THEN        save.id = CGI$VALS<POS>        IF save.id = "new_db" THEN          LOCATE "edit_dbid" IN CGI$VARS SETTING POS THEN            save.id = CGI$VALS<POS>          END ELSE save.id = ""          IF save.id = "" THEN SAVE.OK = 0 ELSE            MATREAD DB.ITEM FROM F.MVDB.DEFS, save.id THEN SAVE.OK = 0          END        END ELSE          LOCATE "db_new_id" IN CGI$VARS SETTING POS THEN            rename.id = CGI$VALS<POS>          END        END        CONVERT '"\' TO '' IN rename.id        CONVERT '"\' TO '' IN save.id        IF SAVE.OK THEN          MATREAD DB.ITEM FROM F.MVDB.DEFS, save.id ELSE MAT DB.ITEM = ''          LOCATE "db_desc" IN CGI$VARS SETTING POS THEN            DB.DESC = CGI$VALS<POS>          END          LOCATE "db_theme" IN CGI$VARS SETTING POS THEN            DB.THEME = CGI$VALS<POS>          END          LOCATE "db_sort" IN CGI$VARS SETTING POS THEN            DB.SORT = CGI$VALS<POS>          END          LOCATE "db_layout" IN CGI$VARS SETTING POS THEN            DB.TEMPLATE = CGI$VALS<POS>          END          LOCATE "db_users" IN CGI$VARS SETTING POS THEN            DB.USERS.ALLOWED = CGI$VALS<POS>          END          CONVERT "," TO @VM IN DB.USERS.ALLOWED          *          LOCATE "widgets" IN CGI$VARS SETTING POS THEN            WIDGET.LIST = CGI$VALS<POS>          END ELSE WIDGET.LIST = ""          CONVERT CHAR(13) TO @AM IN WIDGET.LIST          CONVERT CHAR(10) TO "" IN WIDGET.LIST          WCNT = DCOUNT( WIDGET.LIST, @AM )          DB.WIDGETS = ''          DB.WIDGET.AREA = ''          DB.WIDGET.ORDER = ''          FOR WX = 1 TO WCNT            THIS.W = WIDGET.LIST<WX>            DB.WIDGET.AREA<1,WX> = FIELD( THIS.W, ',', 1 )            DB.WIDGET.ORDER<1,WX> = FIELD( THIS.W,',', 2 )            DB.WIDGETS<1,WX> = OCONV(THIS.W,'G2,99' )          NEXT WX          IF rename.id # "" AND rename.id # save.id THEN            DELETE F.MVDB.DEFS, save.id            MATWRITE DB.ITEM ON F.MVDB.DEFS, rename.id          END ELSE            MATWRITE DB.ITEM ON F.MVDB.DEFS, save.id          END        END      END    END ELSE      LOCATE "delete_db" IN CGI$VARS SETTING POS THEN        LOCATE "save_dbid" IN CGI$VARS SETTING POS THEN          del.id = CGI$VALS<POS>          DELETE F.MVDB.DEFS, del.id        END      END    END    GOSUB LOAD.DASHBOARDS  CASE action = "save_user"    LOCATE "save_userid" IN CGI$VARS SETTING POS THEN      save.userid = CGI$VALS<POS>      LOCATE "delete_user" IN CGI$VARS SETTING POS THEN        DELETE F.MVDB.USERS, save.userid      END ELSE        LOCATE "newuser" IN CGI$VARS SETTING POS THEN          newuser = 1          LOCATE "new_userid" IN CGI$VARS SETTING POS THEN            save.userid = CGI$VALS<POS>          END        END ELSE newuser = 0        SAVE.OK = 1        IF newuser THEN          MATREAD USER.ITEM FROM F.MVDB.USERS, save.userid THEN            SAVE.OK = 0          END        END        IF SAVE.OK AND save.userid # "" THEN          MATREAD USER.ITEM FROM F.MVDB.USERS, save.userid ELSE MAT USER.ITEM = ''          LOCATE "username" IN CGI$VARS SETTING POS THEN            USER.NAME = CGI$VALS<POS>          END          LOCATE "default_dashboard" IN CGI$VARS SETTING POS THEN            USER.DEFAULT.DB = CGI$VALS<POS>          END          LOCATE "user_password" IN CGI$VARS SETTING POS THEN            IF CGI$VALS<POS> # "" THEN*07-17-15 UV*             USER.PASSWORD = OCONV(CGI$VALS<POS>,"U3060")              IF DIGEST('MD5', CGI$VALS<POS>, 1, USER.PASSWORD) <> 0 THEN ; *07-17-15 UV*                SAVE.OK = 0 ; *07-17-15 UV*              END ELSE                USER.PASSWORD = OCONV(USER.PASSWORD, 'MX0C') ; *06-19-17 UV*                              END            END          END          LOCATE "user_role" IN CGI$VARS SETTING POS THEN            USER.ROLE = CGI$VALS<POS>          END          IF USER.ROLE = "" THEN USER.ROLE = "User"          * PJS 09-23-16 save optional user logo          LOCATE "opt_logo_path" IN CGI$VARS SETTING POS THEN            USER.ALT.LOGO = CGI$VALS<POS>          END ELSE            USER.ALT.LOGO = ""          END          IF SAVE.OK THEN ; *07-17-15 UV* if DIGEST() function failed, don't save user (no password!)            MATWRITE USER.ITEM ON F.MVDB.USERS, save.userid          END        END      END    END    GOSUB LOAD.USERS  CASE 1    READ HTML FROM F.WEB.FORMS, "admin_menu.html" ELSE ADMIN.MENU = "admin_menu.html not found."END CASEREAD ADMIN.TEMPLATE FROM F.WEB.FORMS, "admin_template.html" ELSE ADMIN.TEMPLATE = "admin_template.html not found."CALL SWAP(ADMIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)HEADER = '<div id="dashboard_nav">'HEADER := '<ol class="dashboard_list">'IF ACTIVE.MENU = "USERS" THEN ACTIVE = 'class="db_active"' ELSE ACTIVE = ""HEADER := '<li ':ACTIVE:'><a href="':CGI$PATH:'/MVDB.ADMIN?action=users">Users</a></li>'IF ACTIVE.MENU = "WIDGETS" THEN ACTIVE = 'class="db_active"' ELSE ACTIVE = ""HEADER := '<li ':ACTIVE:'><a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets">Widgets</a></li>'IF ACTIVE.MENU = "DASHBOARDS" THEN ACTIVE = 'class="db_active"' ELSE ACTIVE = ""HEADER := '<li ':ACTIVE:'><a href="':CGI$PATH:'/MVDB.ADMIN?action=dashboards">Dashboards</a></li>'OPEN 'RSS.BP' TO F.RSS.BP THEN  HEADER := '<li><a href="':CGI$PATH:'/RSS.MAINT">RSS Feed Maintenance</a></li>'ENDOPEN 'MVPKG.DATA' TO F.MVPKG.DATA THEN  HEADER := '<li><a href="':CGI$PATH:'/MVPKG.MAIN">Package Manager</a></li>'ENDHEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN">Return to Dashboard</a></li>'HEADER := '</ol>'HEADER := '</div>'CALL SWAP(ADMIN.TEMPLATE,'<!-- HEADER -->',HEADER)FOOTER = ''CALL SWAP(ADMIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)*CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_MAIN -->',HTML)CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_SCRIPTS -->',SCRIPTS)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)CALL WEB.SEND(ADMIN.TEMPLATE)GLOBAL.INFO(100) = 1 ;* Process completed successfullySTOP*LOAD.USERS: **    ACTIVE.MENU = "USERS"    EXECUTE 'SSELECT MVDB.USERS' CAPTURING JUNK    HTML = '<table width="100%">'    HTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adduser" class="add-user">Add User</a></td></tr>'    HTML<-1> = '<tr><th>User ID</th>'    HTML<-1> = '<th>Name</th>'     HTML<-1> = '<th>Default Dashboard</th>'    HTML<-1> = '<th>Role</th>'    HTML<-1> = '<th>Action</th>'     HTML<-1> = '</tr>'    *    LOOP      READNEXT ID ELSE EXIT      MATREAD USER.ITEM FROM F.MVDB.USERS, ID ELSE MAT USER.ITEM = ""      IF USER.ROLE = "" THEN USER.ROLE = "User"      HTML<-1> = '<tr><td>':ID:'</td>'      HTML<-1> = '<td>':USER.NAME:'</td>'      HTML<-1> = '<td>':USER.DEFAULT.DB:'</td>'      CALL SWAP(ID,'"','\"')      CALL SWAP(USER.NAME,'"','\"')      CALL SWAP(USER.DEFAULT.DB,'"','\"')      CALL SWAP(USER.DEFAULT.DB,"'","&apos;")      * PJS 09-23-16: added USER.ALT.LOGO parameter to editUser()      ACTIONS = \&nbsp;<a href='javascript:editUser("\:ID:\","\:USER.NAME:\","\:USER.DEFAULT.DB:\","\:USER.ROLE:\","\:USER.ALT.LOGO:\");'><img title="Edit User" class="icon" src="/db/icons/user_edit.png" /></a>\      ACTIONS := \&nbsp;<a href='javascript:deleteUser("\:ID:\");'><img title="Delete User" class="icon" src="/db/icons/user_delete.png" /></a>\      HTML<-1> = '<td>':USER.ROLE:'</td>'      HTML<-1> = '<td>':ACTIONS:'</td>'      HTML<-1> = '</tr>'    REPEAT    HTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adduser" class="add-user">Add User</a></td></tr>'    HTML<-1> = '</table>'    *    GOSUB MAKE.DB.SCRIPTRETURN*LOAD.WIDGETS: **ACTIVE.MENU = "WIDGETS"CALL MVDB.SUB.WIDGET.LIST(WIDGET.LIST)FFORM = '<form action="':CGI$PATH:'/MVDB.ADMIN" method="get">'FFORM := '<input type="hidden" name="action" value="widgets">'FFORM := 'Filter: <input type="text" name="filter" value="':filter:'"> <input type=submit name=fbtn value="Go">'IF filter # "" THEN FFORM := ' <a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets&clearfilter">Clear Filter</a>'FFORM := '</form>'HTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="3"><a href="':CGI$PATH:'/MVDB.ADMIN?action=addwidget" class="add-widget">Add a Widget</a></td>'HTML<-1> = '<td colspan="4" align="right">':FFORM:'</td></tr>'HTML<-1> = '<tr><th colspan="2">Widget ID</th>'HTML<-1> = '<th>Type</th>' HTML<-1> = '<th>Description</th>' HTML<-1> = '<th>Subroutine</th>' HTML<-1> = '<th>Users Allowed</th>' HTML<-1> = '<th>Actions</th>' HTML<-1> = '</tr>'*WIDGET.CNT = DCOUNT( WIDGET.LIST<1>, @VM )FOR WDX = 1 TO WIDGET.CNT  ID = WIDGET.LIST<1,WDX>  WDESC = WIDGET.LIST<2,WDX>  WSUB = WIDGET.LIST<3,WDX>  WTYPE = WIDGET.LIST<4,WDX>  WTITLE = WIDGET.LIST<5,WDX>  WWIDTH = WIDGET.LIST<6,WDX>  FAIL.STATUS = WIDGET.LIST<7,WDX>  FAIL.TEXT = WIDGET.LIST<8,WDX>  MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, WTYPE ELSE MAT WIDGET.TYPES = ""  IF filter # "" THEN    FILTER.MATCH = 0    IF INDEX(WDESC,filter,1) THEN FILTER.MATCH = 1    IF INDEX(WTITLE,filter,1) THEN FILTER.MATCH = 1    IF INDEX(WSUB,filter,1) THEN FILTER.MATCH = 1  END ELSE FILTER.MATCH =1  IF FILTER.MATCH THEN    IF WT$ICON # "" THEN      ICON.IMG = '<img height="20" width="20" src="/db/icons/':WT$ICON:'" />'    END ELSE ICON.IMG = "&nbsp;"    ID.LINK = ID    CALL SUB.URL.ENCODE(ID.LINK)    ID.LINK = '<a href="':CGI$PATH:'/MVDB.MAIN?udview=':ID.LINK:'&dd" target="_blank" title="Open in new window">':ID:'</a>'    HTML<-1> = '<tr><td class="widget-name">':ID.LINK:'</td><td class="widget-icon">':ICON.IMG:'</td>'    HTML<-1> = '<td>':WTYPE:'</td>'    IF WTITLE = "" THEN WTITLE = WDESC    HTML<-1> = '<td>':WTITLE:'</td>'    ENC.WIDGET.SUB = WSUB    CALL SUB.URL.ENCODE(ENC.WIDGET.SUB)    HTML<-1> = '<td><a target="MVDB.SUBS_':ENC.WIDGET.SUB:'" href="':CGI$PATH:'/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=':ENC.WIDGET.SUB:'" title="Edit Source">':WSUB:'</a></td>'    MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, ID ELSE MAT WIDGET.ITEM = ""    IF WIDGET.USERS # "" THEN      SHOW.USERS = WIDGET.USERS      CONVERT @VM TO "," IN SHOW.USERS      PASS.USER.LIST = SHOW.USERS    END ELSE      SHOW.USERS = "Anybody"      PASS.USER.LIST = ""    END    HTML<-1> = '<td>':SHOW.USERS:'</td>'    CALL SWAP(WDESC,"'","\'")    CALL SWAP(WSUB,"'","\'")    CALL SWAP(PASS.USER.LIST,"'","\'")    URL.ID = ID    CALL SUB.URL.ENCODE(URL.ID)    CALL SWAP(ID,"'","\'")    ACTIONS = \<a href="javascript:editWidget('\:ID:\','\:WDESC:\','\:WSUB:\','\:PASS.USER.LIST:\');"><img title="Edit Widget" class="icon" src="/db/icons/cog_edit.png" /></a>\    ACTIONS := '&nbsp;'    ACTIONS := \<a href="javascript:copyWidget('Copy of \:ID:\','\:WDESC:\','\:WSUB:\','\:PASS.USER.LIST:\');"><img title="Copy Widget" class="icon" src="/db/icons/page_copy.png" /></a>\    ACTIONS := '&nbsp;'    ACTIONS := \<a href="javascript:deleteWidget('\:ID:\','\:WDESC:\','\:WSUB:\','\:PASS.USER.LIST:\');"><img title="Delete Widget" class="icon" src="/db/icons/cog_delete.png" /></a>\    IF FAIL.STATUS = 1 THEN      * This widget has a fatal error and has been added to the "failed_widgets" session variable. Allow the admin to reset this status.      ACTIONS := \&nbsp;<a href="/dbc/MVDB.ADMIN?unfail_widget=\:URL.ID:\&action=widgets"><img title="Reset Fail Status" class="icon" src="/db/icons/arrow_redo.png" /></a>\    END    HTML<-1> = '<td>':ACTIONS:'</td>'    HTML<-1> = '</tr>'  ENDNEXT WDXHTML<-1> = '<tr><td colspan="7"><a href="" class="add-widget">Add a Widget</a></td></tr>'HTML<-1> = '</table>'*SCRIPTS = 'var widgetList = new Array('EXECUTE "SSELECT MVDB.WIDGETS" CAPTURING JUNKFIRST = 1LOOP  READNEXT ID ELSE EXIT  CALL SWAP(ID,'"','\"')  IF NOT(FIRST) THEN SCRIPTS := ','  FIRST = 0  SCRIPTS := '"':ID:'"'REPEATSCRIPTS := ');'RETURN*LOAD.DASHBOARDS: **ACTIVE.MENU = "DASHBOARDS"EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNKHTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adddb" class="add-dashboard">Add A Dashboard</a></td></tr>'HTML<-1> = '<tr><th>Dashboard ID</th>'HTML<-1> = '<th>Description</th>' HTML<-1> = '<th>Users Allowed</th>' HTML<-1> = '<th>Actions</th>' HTML<-1> = '</tr>'*LOOP  READNEXT ID ELSE EXIT  MATREAD DB.ITEM FROM F.MVDB.DEFS, ID ELSE MAT DB.ITEM = ''  HTML<-1> = '<tr><td>':ID:'</td>'  HTML<-1> = '<td>':DB.DESC:'</td>'  IF DB.USERS.ALLOWED # "" THEN    SHOW.USERS = DB.USERS.ALLOWED    CONVERT @VM TO "," IN SHOW.USERS  END ELSE SHOW.USERS = "Anybody"  HTML<-1> = '<td>':SHOW.USERS:'</td>'  ACTIONS = '<a href="':CGI$PATH:'/MVDB.ADMIN?action=editdb&edit_dbid=':ID:'"><img title="Edit Dashboard" class="icon" src="/db/icons/layout_edit.png" /></a>&nbsp;'  ACTIONS := \<a onClick="return confirm('DELETE: Are you sure?');" href="\:CGI$PATH:\/MVDB.ADMIN?action=save_db&delete_db=1&save_dbid=\:ID:\"><img title="Delete Dashboard" class="icon" src="/db/icons/layout_delete.png" /></a>\  HTML<-1> = '<td>':ACTIONS:'</td>'  HTML<-1> = '</tr>'REPEATHTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adddb" class="add-dashboard">Add A Dashboard</a></td></tr>'HTML<-1> = '</table>'RETURN*MAKE.DB.SCRIPT: **SCRIPTS = 'var dashboardList = new Array('EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNKFIRST = 1LOOP  READNEXT ID ELSE EXIT  CALL SWAP(ID,'"','\"')  IF NOT(FIRST) THEN SCRIPTS := ','  FIRST = 0  SCRIPTS := '"':ID:'"'REPEATSCRIPTS := ');'RETURN0002DCGET.SESSION.VAR0c2SUBROUTINE GET.SESSION.VAR( var, VAL )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program reads a value from the current web*              session record.*#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)VAL = ''*READ REC FROM F.WEB.SESSION, SESSION$ID THEN  LOCATE var IN REC<1> SETTING POS THEN    VAL = REC<2,POS>  END ELSE    VAL = ''  ENDEND*CONVERT CHAR(2) TO @AM IN VALCONVERT CHAR(3) TO @VM IN VALCONVERT CHAR(4) TO @SVM IN VAL*CALL PUT.SESSION.VAR('LastSessionAccess', DATE():'*':TIME())*RETURN*000E53SUB.EXCEL.FUNC0c2SUBROUTINE SUB.EXCEL.FUNC(ACTION,SPREADSHEET,CSV.WIDGET.NAME)** Copyright (c) 2020 Zumasys, Inc. All rights reserved.* Description: EXCEL utility functions*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE***SPREADSHEET=''** ISOLATE THE TITLE*BEGIN CASE  CASE ACTION = 'generate'         * Use widget name to create a filename for the CSV file         OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'         CALL SUB.GET.NEXT.ID(UNIQUE.ID,F.MVDB.CONTROL)             CSV.FILE.NAME = CSV.WIDGET.NAME:'_' :UNIQUE.ID         CALL SET.CONTENT.TYPE('text/csv')         SESSION$HEADERS<-1> = 'Content-Disposition: attachment; filename="':CSV.FILE.NAME:'.csv"'         * Build the CSV content         GOSUB BUILD.SPREADSHEET.CONTENT         SPREADSHEET=CHANGE(SPREADSHEET,CHAR(254),CHAR(13):CHAR(10))         CSV.SIZE=LEN(SPREADSHEET)         SESSION$HEADERS<-1>='Content-Length:':CSV.SIZEEND CASERETURN*BUILD.SPREADSHEET.CONTENT:*BEGIN CASE   CASE W$TYPE = 'TABLE'      GOSUB TYPE.IS.TABLE      DASHBOARD.TYPE='Report'   CASE INDEX(W$TYPE,'COLUMN',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'BAR',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'LINE',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'AREA',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'PIE',1)      GOSUB TYPE.IS.PIE      DASHBOARD.TYPE='Pie'   CASE INDEX(W$TYPE,'DOUGHNUT',1)      GOSUB TYPE.IS.PIE      DASHBOARD.TYPE='Pie'END CASE** STRIP OUT HTML STUFF AND CONVERT TO CSV*MAX.ROWS=DCOUNT(SPREADSHEET,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=SPREADSHEET<ROW.NO>   *   * <br> to space   *   LOOP      POS=INDEX(ROW,'<br>',1)   UNTIL NOT(POS) DO      ROW=ROW[1,POS-1]:' ':(ROW[POS+4,9999])   REPEAT   *   * ISOLATE XXX IN ]<a hrev.....">XXX</a>]   *   LOOP      POS=INDEX(ROW,'</a>',1)   UNTIL NOT(POS) DO      VAL.NO=DCOUNT(ROW[1,POS],CHAR(253))      VAL=ROW<1,VAL.NO>      POS=INDEX(VAL,'</a>',1)      VAL=VAL[1,POS-1]      POS=INDEX(VAL,'">',1)      VAL=VAL[POS+2,999]      ROW<1,VAL.NO>=VAL   REPEAT   MAX.VALS=DCOUNT(ROW,CHAR(253))   FOR VAL.NO = 1 TO MAX.VALS      IF DASHBOARD.TYPE = 'Chart' AND VAL.NO > 1 THEN         VAL=ROW<1,VAL.NO>         IF NUM(VAL) AND NOT(INDEX(VAL,',',1)) THEN VAL=OCONV(VAL,'MD0,')         ROW<1,VAL.NO>=VAL       END      ROW<1,VAL.NO>='"':ROW<1,VAL.NO>:'"'    NEXT VAL.NO   SPREADSHEET<ROW.NO>=ROW NEXT ROW.NOCONVERT CHAR(253) TO ',' IN SPREADSHEETRETURN*TYPE.IS.TABLE:*SPREADSHEET<-1>=W$TABLE.COL.LABELSSPREADSHEET<-1>=W$TABLE.DATASPREADSHEET<-1>=W$TABLE.TOTALSRETURN*TYPE.IS.BAR.OR.COLUMN:*SPREADSHEET<-1>='Displayed as: ':W$BAR.YMEMOCOL.HEADINGS=W$BAR.LABELSCONVERT CHAR(254) TO CHAR(253) IN COL.HEADINGS;  * MULTI-SERIES MAY HAVE SEVERALIF COL.HEADINGS<1,2> = '' THEN;  * ONLY ONE THEN USE W$BAR.YMEMO   COL.HEADINGS=W$BAR.YMEMO ENDCOL.HEADINGS=INSERT(COL.HEADINGS,1,1,0,W$BAR.XMEMO)SPREADSHEET<-1>=COL.HEADINGSNUM.ROWS=DCOUNT(W$BAR.XLABELS,CHAR(253))NUM.COL.VALUES=DCOUNT(W$BAR.VALUES,CHAR(254))FOR ROW.NO = 1 TO NUM.ROWS   THIS.ROW=W$BAR.XLABELS<1,ROW.NO>   FOR COL.NO = 1 TO NUM.COL.VALUES      THIS.COL=W$BAR.VALUES<COL.NO,ROW.NO>      IF NUM(THIS.COL) THEN         IF THIS.COL > 999 THEN            THIS.COL=OCONV(THIS.COL,'MD0,')          END       END      THIS.ROW<1,COL.NO+1>=THIS.COL    NEXT COL.NO   SPREADSHEET<-1>=THIS.ROW NEXT ROW.NORETURN*TYPE.IS.PIE:*SPREADSHEET<-1>=W$PIE.LABELSSPREADSHEET<-1>=W$PIE.VALUESRETURNEND0009A5XML.DATA0c2CALL WDB.VARS(VARS, VALS)DISPLAY.TERM = 1WEB.DATA = ''LINE.CNT = 1NUM.BYTES = 0****************************************** q = number of bytes to quit early on* default is full dump****************************************LOCATE 'q' IN VARS SETTING POS THEN  q = VALS<POS>END ELSE  q = ''END****************************************** l = number of lines of text to print* default is 10000****************************************LOCATE 'l' IN VARS SETTING POS THEN  l = VALS<POS>END ELSE  l = 10000END****************************************** b = number of characters per line* default is 10****************************************LOCATE 'b' IN VARS SETTING POS THEN  b = VALS<POS>END ELSE  b = 10END****************************************** w = use web.load or print* if w is 0, then use WEB.LOAD* default is 0****************************************LOCATE 'w' IN VARS SETTING POS THEN  w = VALS<POS>END ELSE  w = 0END****************************************** p = number of seconds to pause before*     starting to send output* default is 0****************************************LOCATE 'p' IN VARS SETTING POS THEN  p = VALS<POS>END ELSE  p = 0END****************************************** s = which quit string to use* default = 800 WDB-COMPLETE****************************************LOCATE 's' IN VARS SETTING POS THEN  s = VALS<POS>END ELSE  s = '800 WDB-COMPLETE'END****************************************** MAIN PROGRAM****************************************IF w # 0 THEN  SLEEP pENDFOR X = 1 TO l  NUM.CHARS = LEN(LINE.CNT) + 1  LINE = ''  NUM.ZEROS = b - NUM.CHARS  FOR Y = 1 TO NUM.ZEROS    LINE := '0'    NUM.BYTES += 1  NEXT Y  LINE := LINE.CNT  NUM.BYTES += LEN(LINE.CNT) + 1 ; * this is for the line counter and the line break  GOSUB CHECK.EARLY.TERMINATE  IF w = 0 THEN    WEB.DATA<-1> = LINE    IF TERM.DATA # '' THEN      WEB.DATA<-1> = TERM.DATA    END  END ELSE    PRINT LINE    IF TERM.DATA # '' THEN      PRINT TERM.DATA    END  END  LINE.CNT += 1NEXT XIF w = 0 THEN  SLEEP p  CALL WEB.SEND(WEB.DATA)ENDSTOP*********************************************************************************CHECK.EARLY.TERMINATE:********************************************************************************TERM.DATA = ''IF q # '' AND NUM.BYTES >= q AND DISPLAY.TERM = 1 THEN  TERM.DATA = s:CHAR(10):CHAR(10)  DISPLAY.TERM = 0ENDRETURN*0001C9DESTROY.SESSION0c2SUBROUTINE DESTROY.SESSION** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program removes the session records**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE* Init*EQU FALSE TO 0, TRUE TO 1*EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*CALL SET.COOKIE("sessionid=; path=/")*DELETE F.WEB.SESSION, SESSION$IDRETURN*0021C5RSS.MAINT0c2** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: March 10, 2009* Description: RSS Feed Maintenance*INCLUDE WBPD WWW.INCLUDEINCLUDE RSS.BP RSS.DATA.INC*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE STOP 201, 'RSS.FEEDS'OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD'ENDOPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'OPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE STOP 201, 'MVDB.THEMES'*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDENDIF THEME.CSS # '' THEN THEME.CSS = '<link rel="Stylesheet" href="/db/themes/':THEME.CSS:'" media="screen" type="text/css" />'IF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*CALL GET.SESSION.VAR("adminauth",adminauth)CALL PUT.SESSION.VAR("dd_mode",0)adminpass = ""IF adminauth # 1 THEN  FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'  FORM := '</head><body><p>Administrative priviledges are required. '  FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'  CALL WEB.SEND(FORM)  STOPEND*LOCATE "action" IN CGI$VARS SETTING POS THEN  action = CGI$VALS<POS>END ELSE action = ""LOCATE "id" IN CGI$VARS SETTING POS THEN  id = CGI$VALS<POS>END ELSE id = ""LOCATE "cancel_edit" IN CGI$VARS SETTING POS THEN  action = "list"END*HTML = ''BEGIN CASE  CASE action = "edit" OR action = "add" AND 0 ;* This code is depricated    IF action = "edit" THEN      READ FEED.REC FROM F.RSS.FEEDS, id ELSE FEED.REC = ""    END ELSE FEED.REC = ""    FEED.NAME = FEED.REC<1>    FEED.DESC = FEED.REC<3>    CRLF = CHAR(13):CHAR(10)    CALL SWAP(FEED.DESC,'<br />',CRLF)    SEL.SUB = FEED.REC<4>    ITEM.SUB = FEED.REC<5>    READ INNER.TEMPLATE FROM F.WEB.FORMS, "rss_edit.html" ELSE INNER.TEMPLATE = "rss_edit.html missing"    IF action = "add" THEN      edit_id = '<input type="text" name="new_id" value="">'      id = "NEW"    END ELSE      edit_id = id    END    CALL SWAP(INNER.TEMPLATE,'<!-- feed_id -->',id)    CALL SWAP(INNER.TEMPLATE,'<!-- edit_feed_id -->',edit_id)    CALL SWAP(INNER.TEMPLATE,'<!-- feed_name -->',FEED.NAME)    CALL SWAP(INNER.TEMPLATE,'<!-- feed_desc -->',FEED.DESC)    CALL SWAP(INNER.TEMPLATE,'<!-- sel_sub -->',SEL.SUB)    CALL SWAP(INNER.TEMPLATE,'<!-- item_sub -->',ITEM.SUB)    *    SEL.SUB.MSG = '' ; ITEM.SUB.MSG = ''    IF SEL.SUB # "" THEN      READ TST FROM F.MD, SEL.SUB ELSE        SEL.SUB.MSG = 'Not Cataloged'      END    END    IF ITEM.SUB # "" THEN      READ TST FROM F.MD, ITEM.SUB ELSE        ITEM.SUB.MSG = 'Not Cataloged'      END    END    CALL SWAP(INNER.TEMPLATE,'<!-- sel_sub_msg -->',SEL.SUB.MSG)    CALL SWAP(INNER.TEMPLATE,'<!-- item_sub_msg -->',ITEM.SUB.MSG)    *    FEED.MODE.NAMES = FEED.REC<6>    FEED.MODE.PARAMS = FEED.REC<7>    FEED.MODES = ""    FOR N = 1 TO DCOUNT( FEED.MODE.NAMES<1>, @VM )      FEED.MODES<-1> = FEED.MODE.NAMES<1,N>:',':FEED.MODE.PARAMS<1,N>    NEXT N    CALL SWAP(FEED.MODES,@AM,CRLF)    CALL SWAP(INNER.TEMPLATE,'<!-- feed_modes -->',FEED.MODES)    HTML = INNER.TEMPLATE  CASE action = "delete" AND id # ""    DELETE F.RSS.FEEDS, id    GOSUB LOAD.FEEDS  CASE action = "save" AND id # ""    FEED.REC = ""    LOCATE "feed_name" IN CGI$VARS SETTING POS THEN      name = CGI$VALS<POS>    END ELSE name = ""    LOCATE "feed_desc" IN CGI$VARS SETTING POS THEN      desc = CGI$VALS<POS>    END ELSE desc = ""    CONVERT CHAR(13) TO "" IN desc    CALL SWAP(desc,CHAR(10),'<br />')    LOCATE "sel_sub" IN CGI$VARS SETTING POS THEN      sel_sub = CGI$VALS<POS>    END ELSE sel_sub = ""    LOCATE "item_sub" IN CGI$VARS SETTING POS THEN      item_sub = CGI$VALS<POS>    END ELSE item_sub = ""    FEED.REC<1> = name    FEED.REC<3> = desc    FEED.REC<4> = sel_sub    FEED.REC<5> = item_sub    LOCATE "feed_modes" IN CGI$VARS SETTING POS THEN      feed_modes = CGI$VALS<POS>    END ELSE feed.modes = ""    CONVERT CHAR(13) TO "" IN feed_modes    CONVERT CHAR(10) TO @AM IN feed_modes    FOR N = 1 TO DCOUNT( feed_modes, @AM )      IF TRIM( feed_modes<N> ) # "" THEN        FEED.REC<6,N> = TRIM( FIELD( feed_modes<N>, ',',  1 ) )        FEED.REC<7,N> = TRIM( FIELD( feed_modes<N>, ',',  2 ) )      END    NEXT N    IF id = "NEW" THEN      LOCATE "new_id" IN CGI$VARS SETTING POS THEN        id = CGI$VALS<POS>      END      IF id = "NEW" THEN id="NEW1"    END    IF id # "" THEN      WRITE FEED.REC ON F.RSS.FEEDS, id    END    GOSUB LOAD.FEEDS  CASE 1 ; * Action = list (default)    GOSUB LOAD.FEEDSEND CASE*READ ADMIN.TEMPLATE FROM F.WEB.FORMS, "rss_admin_template.html" ELSE ADMIN.TEMPLATE = "rss_admin_template.html not found."CALL SWAP(ADMIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)HEADER = '<div id="dashboard_nav">'HEADER := '<ol class="dashboard_list">'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=users">Users</a></li>'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets">Widgets</a></li>'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=dashboards">Dashboards</a></li>'HEADER := '<li class="db_active"><a href="':CGI$PATH:'/RSS.MAINT">RSS Feed Maintenance</a></li>'OPEN 'MVPKG.DATA' TO F.MVPKG.DATA THEN  HEADER := '<li><a href="':CGI$PATH:'/MVPKG.MAIN">Package Manager</a></li>'ENDHEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN">Return to Dashboard</a></li>'HEADER := '</ol>'HEADER := '</div>'CALL SWAP(ADMIN.TEMPLATE,'<!-- HEADER -->',HEADER)FOOTER = ''CALL SWAP(ADMIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_MAIN -->',HTML)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)CALL WEB.SEND(ADMIN.TEMPLATE)STOP*LOAD.FEEDS: **HTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="6"><a href="" class="add-feed">Add a Feed</a></td></tr>'HTML<-1> = '<tr><th>ID</th><th>Name</th><th>Feed URL</th><th>Sel SUB</th><th>Item SUB</th><th>Action</th></tr>'EXECUTE "SSELECT RSS.FEEDS BY NAME" CAPTURING JUNKLOOP  READNEXT FID ELSE EXIT  READ FEED.REC FROM F.RSS.FEEDS, FID ELSE CONTINUE  FEED.NAME = FEED.REC<1>  CALL RSS.XML.ENCODE(FEED.NAME,"")  FEED.URL = "http://":CGI$SERVER.NAME:CGI$PATH:'/RSS.MAIN?feed=':FID  FEED.URL = '<a target="_blank" href="':FEED.URL:'">':FEED.URL:'</a>'  FEED.DESC = FEED.REC<3>  SEL.SUB = FEED.REC<4>  ITEM.SUB = FEED.REC<5>  URL.SEL.SUB = SEL.SUB  URL.ITEM.SUB = ITEM.SUB  CALL SUB.URL.ENCODE(URL.SEL.SUB)  CALL SUB.URL.ENCODE(URL.ITEM.SUB)  ROW = '<tr><td>':FID:'</td><td>':FEED.NAME:'</td><td>':FEED.URL:'</td><td><a href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=':SEL.SUB:'" target="RSS.BP_':URL.SEL.SUB:'">':SEL.SUB:'</a></td><td><a href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=':ITEM.SUB:'" target="RSS.BP_':URL.ITEM.SUB:'">':ITEM.SUB:'</a></td>'  ROW := \<td>\  IF FID = "FEEDS" THEN    ROW := '&nbsp;'  END ELSE    FEED.MODE.NAMES = FEED.REC<6>    FEED.MODE.PARAMS = FEED.REC<7>    FEED.MODES = ""    FOR N = 1 TO DCOUNT( FEED.MODE.NAMES<1>, @VM )      FEED.MODES<-1> = FEED.MODE.NAMES<1,N>:',':FEED.MODE.PARAMS<1,N>    NEXT N    CALL SWAP(FEED.MODES,@AM,'\n')    CALL SWAP(FEED.MODES,'"','\"')    CALL SWAP(FEED.NAME,'"','\"')    CALL SWAP(FEED.DESC,'"','\"')    CALL SWAP(SEL.SUB,'"','\"')    CALL SWAP(ITEM.SUB,'"','\"')    ROW := \<a href="javascript:editFeed('\:FID:\','\:FEED.NAME:\','\:FEED.DESC:\','\:SEL.SUB:\','RSS.BP_\:URL.SEL.SUB:\','\:ITEM.SUB:\','RSS.BP_\:URL.ITEM.SUB:\','\:FEED.MODES:\');"><img title="Edit Feed" class="icon" src="/db/icons/feed_edit.png" /></a> &nbsp;\    ROW := \<a onClick="return confirm('DELETE: Are you sure?');" href="/dbc/RSS.MAINT?action=delete&id=\:FID:\"><img title="Delete Feed" class="icon" src="/db/icons/feed_delete.png" /></a>\  END  ROW := '</td></tr>'  HTML<-1> = ROWREPEATHTML<-1> = '<tr><td colspan="6"><a href="" class="add-feed">Add a Feed</a></td></tr>'HTML<-1> = '</table>'RETURN0003F5VALIDATE.SESSION0c2SUBROUTINE VALIDATE.SESSION( FLAG )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo* Date Written : 11/7/2003* Description  : This program will validate the session.*             ****************************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)FLAG = FALSEIF SESSION$ID # "" THEN  READ REC FROM F.WEB.SESSION, SESSION$ID THEN    SESSION.DATE = REC<3>        SESSION.TIME = REC<4>    CURRENT.DATE = DATE()    CURRENT.TIME = TIME()    MAX.SECONDS = 86400; * Total number of seconds in a day    MAX.DIFF.AMOUNT = SESSION$TIME.OUT * 60 ; * Get the time in seconds    CURRENT.TIME = ((CURRENT.DATE - SESSION.DATE) * MAX.SECONDS) + CURRENT.TIME    DIFF.TIME = CURRENT.TIME - SESSION.TIME    IF DIFF.TIME <= MAX.DIFF.AMOUNT THEN      FLAG = TRUE    END  ENDEND*RETURN*0002B5WEB.FLUSH0c2SUBROUTINE WEB.FLUSH*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 11/06/03* Description  : This program sets the calls SET.BUFFER(FALSE) then *                calls WEB.SEND("") if the SESSION$OUTPUT variables*                length is greater then 0.*              ***********************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*CALL SET.BUFFER(FALSE)*IF LEN(SESSION$OUTBUF) > 0 THEN  CALL WEB.SEND("")*END*RETURN*0006C9SET.BUFFER0c2SUBROUTINE SET.BUFFER( B.VAL )*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 11/06/03* Updated by: Peter Schellenbach, Zumasys* Date Updated : 11/30/17* Description  : This program sets the SESSION$OUTBUF.FLAG and optionally*                SESSION$OUTBUF.SIZE variables to enable or disable*                buffering of output generated by WSEND. If buffering*                is enabled, be sure to call WFLUSH to flush the final*                buffer content.**                B.VAL = 0 : disable buffering*                B.VAL = 1 : enable buffering using current buffer size*                B.VAL > 1 : enable buffering and set buffer size to*                            this value.**                By default buffering is disabled. If buffering will be*                used, call WSETBUFFER before the first call to WSEND.*                If the size of buffer content ever exceeds the buffer*                size, the buffer is flushed to the client along with*                any headers, and buffering is disabled.*              **********************************************************************INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*IF NUM(B.VAL) AND B.VAL > 0 AND B.VAL <= 1000000 THEN  * Set buffer size and enable buffering  SESSION$OUTBUF.SIZE = B.VAL  SESSION$OUTBUF.FLAG = TRUEEND ELSE  * Enable or disable buffering  IF B.VAL # TRUE AND B.VAL # FALSE THEN    IF B.VAL = "" THEN      B.VAL = FALSE    END ELSE      B.VAL = TRUE    END  END  SESSION$OUTBUF.FLAG = B.VALENDRETURNEND000296SET.CONTENT.TYPE0c2SUBROUTINE SET.CONTENT.TYPE( C.TYPE )*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 10/25/03* Description  : This program sets the SESSION$CONTENT.TYPE variable.*              ***********************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*IF C.TYPE = "" THEN  C.TYPE = "text/html"END*SESSION$CONTENT.TYPE = C.TYPE*RETURN*000DEEINIT.WWW0c2*********************************************************************** Copyright (C) 2004 Sierra Bravo Corporation, All Rights Reserved** This software is the property of Sierra Bravo Corporation and may* not be duplicated or modified without the express written permission* of Sierra Bravo Corporation.** Written By   : Michael Derheim, Sierra Bravo Corporation* Description  : Initialize the standard WWW includes. Parse cookies, etc.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause**********************************************************************************************************************************************                                                                    *  * 10-25-16 Peter Schellenbach                                        **                                                                    *  ***       THIS PROGRAM IS OBSOLETE AND IS NO LONGER USED! ***        **                                                                    *  **********************************************************************************************************************************************#MAKE# RL $OPTIONS D3*INCLUDE WBPD WWW.INCLUDE*OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, 'WEB.SESSION'*MAT WWW.INFO = ""**PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ''PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE() ; *PJS 06-12-15**CGI$UNIQUE.ID = FIELD( TCL.LINE, ' ', 2)** Populate the vars and vals*CALL WDB.VARS(VARS,VALS)CGI$VARS = VARSCGI$VALS = VALS*LOCATE "APPSVR_ID" IN CGI$VARS SETTING POS THEN  CGI$APPSVR.ID = CGI$VALS<POS>  CGI$VARS = DELETE( CGI$VARS, POS, 0, 0 )  CGI$VALS = DELETE( CGI$VALS, POS, 0, 0 )END ELSE  CGI$APPSVR.ID = ""END** How many active users are online?*SELECT F.WEB.SESSIONUSER.COUNT = 0LOOP  READNEXT WSID ELSE EXIT  READ SREC FROM F.WEB.SESSION, WSID ELSE CONTINUE  LOCATE "userid" IN SREC<1> SETTING UPOS THEN USER.COUNT += 1REPEATPRINT "Client-Count: ":USER.COUNT** Load the Cookie variables and valuiesLOCATE 'HTTP_COOKIE' IN VARS SETTING POS THEN  CSTRING = VALS<POS>END ELSE CSTRING = ''*CONVERT ';' TO @AM IN CSTRINGNUM.COOKIES = DCOUNT(CSTRING, @AM)FOR Y = 1 TO NUM.COOKIES  CGI$CVARS<Y> = TRIM(FIELD(CSTRING<Y>,'=',1))  CGI$CVALS<Y> = CSTRING<Y>[(1+INDEX(CSTRING<Y>,'=',1)),99999]NEXT Y* Load the session ID if there is oneCALL GET.SESSION.ID( SESSION$ID, VARS, VALS )IF (SESSION$ID = '') THEN  CALL CREATE.SESSION(SESSION$ID)  CALL SET.COOKIE("sessionid=":SESSION$ID)ENDSESSION$GLOBAL.DEBUG = 0SESSION$DEBUG.TEXT = ''* Clear the out buffer and set some generic varsSESSION$CONTENT.SENT = 0OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, "WEB.SESSION"OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS'*LOCATE "HTTP_HOST" IN CGI$VARS SETTING POS THEN  CGI$SERVER.NAME = CGI$VALS<POS>END ELSE CGI$SERVER.NAME = ""LOCATE "SERVER_PORT" IN CGI$VARS SETTING POS THEN  CGI$SERVER.PORT = CGI$VALS<POS>END ELSE CGI$SERVER.PORT = ""IF CGI$SERVER.PORT = "" OR CGI$SERVER.PORT = "0" THEN  OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL THEN    READV TCP.PORT FROM F.MVDB.CONTROL, 'MVDB.SETTINGS', 4 ELSE TCP.PORT = ""  END  CGI$SERVER.PORT = TCP.PORTENDIF CGI$SERVER.PORT # "" THEN CGI$SERVER.NAME := ":":CGI$SERVER.PORTLOCATE "SIMPLEWEB_HANDLER" IN CGI$VARS SETTING POS THEN  CGI$PATH = CGI$VALS<POS>  IF CGI$PATH[1,1] # "/" THEN CGI$PATH = "/":CGI$PATHEND ELSE CGI$PATH = "/dbc"STOP*END0058AEMV.DEBUG0c2* WDEBUG** Debug REST Services* Copyright (c) 2017 Zumasys Inc.* Rewritten by Peter Schellenbach, 10/18/2017** Based on original version:*  Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved*  Written by: Luke Bucklin, Sierra Bravo*  Date: Sometime, 2006-ish*$OPTIONS TIME.MILLISECOND ;*UV**INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD FI.WDB.DEBUG*CLR.SCR = @(-1)CLR.EOS = @(-3)MAX.LINES = SYSTEM(3) - 4MAX.COLS = SYSTEM(2) - 1IF MAX.LINES <= 0 OR CLR.SCR = '' OR CLR.EOS = '' THEN  MAX.LINES = 20  CLR.SCR = ''  CLR.EOS = ''  PRMPT.LINE = CHAR(13):CHAR(10)END ELSE  PRMPT.LINE = @(0, MAX.LINES + 2):CLR.EOSENDPROMPT ''*PRINT CLR.SCR:PRINTPRINT 'WDEBUG Web Request Degug Tool'PRINTPRINT 'The WDEBUG tool allows you to inspect, modify and re-run web requests.'PRINT 'Whenever a request for a debuggable resource is processed by WDB.INIT,'PRINT 'a debug record for the request is added to the WDB.DEBUG file. WDEBUG'PRINT 'allows you to select a debug record, view the request details, edit the'PRINT 'request variables, re-run the request and view the response.'PRINTPRINT 'To debug web requests for a resource, set attribute 7 of the WDB.RESOURCE'PRINT 'record for the resource to 1, then issue the web request from the client'PRINT 'browser or other agent. WDEBUG will show a list of recent web requests to'PRINT 'select from.'PRINTPRINT 'Start WDEBUG with an active select list if you need to use special criteria'PRINT 'to select the record(s) you need to debug.'PRINTPRINT 'Press <enter> to continue':INPUT ANS*OPEN 'WDB.DEBUG' TO F.WDB.DEBUG ELSE  PRINT 'The WDB.DEBUG data file is required to use WDEBUG. Default installations'  PRINT 'only create the dictionary for this file. Please create the data section'  PRINT 'to use WDEBUG: CREATE-FILE DATA WDB.DEBUG 101.'  STOPEND*SESSION.FLAG = 0OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SESSION.FLAG = 1 ;* can restore session when running debug reqest*EDITOR = ''IDS = ''NUM.IDS = 0IF SYSTEM(11) THEN  LOOP    READNEXT ID ELSE EXIT    READV X FROM F.WDB.DEBUG, ID, 1 THEN      IDS<-1> = ID      NUM.IDS += 1    END ELSE      PRINT ID:' not found in WDB.DEBUG!'    END  REPEATENDUSE.SUPPLIED.LIST = (NUM.IDS > 0)*LOOP  IF NOT(USE.SUPPLIED.LIST) THEN* Select available WDB.DEBUG items    CMND = 'SSELECT WDB.DEBUG WITH TYPE = "C" "R" BY-DSND DATE BY-DSND TIME'    EXECUTE CMND CAPTURING RESULT    IF SYSTEM(11) = 0 THEN      PRINT "No items found."      STOP    END    IDS = ''    NUM.IDS = 0    LOOP      READNEXT ID ELSE EXIT      IDS<-1> = ID      NUM.IDS += 1    REPEAT  END*  TOP = 0  LOOP* Display page of items    PRINT CLR.SCR:    PRINT "Ln Date. Time.... Path................ Remote Address...... Request ID........."    FOR CNTR = 1 TO MAX.LINES UNTIL CNTR + TOP > NUM.IDS      DBG.ID = IDS<CNTR>      READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE CONTINUE      PATH.INFO = DBGREC<WDBG_PATH>      IF PATH.INFO = '' THEN PATH.INFO = DBGREC<WDBG_HANDLER>:'/':DBGREC<WDBG_RESOURCE>      PRINT CNTR "R#2 ":      PRINT OCONV(DBGREC<WDBG_DATE>, 'D0-') "L#5 ":      PRINT OCONV(DBGREC<WDBG_TIME>, 'MTS') "L#8 ":      PRINT PATH.INFO "L#20 ":      PRINT DBGREC<WDBG_REMOTE_ADDR> "L#20 ":      PRINT DBGREC<WDBG_REQUEST_ID>[1,20]    NEXT CNTR    IF TOP + MAX.LINES > NUM.IDS THEN BOT = NUM.IDS ELSE BOT = TOP + MAX.LINES    PRINT "Showing items ":(TOP + 1):"-":BOT:" of ":NUM.IDS*    LOOP      PRINT PRMPT.LINE:"Command: (Q)uit (R)efresh (C)lear (N)ext (P)rev (##) Line to debug: ":      INPUT COMMAND      IF COMMAND MATCHES '1N0N' THEN        IF COMMAND >= 1 AND COMMAND <= MAX.LINES AND COMMAND + TOP <= NUM.IDS THEN          DBG.ID = IDS<COMMAND + TOP>          GOSUB debug.request        END        COMMAND = ''      END ELSE        COMMAND = OCONV(COMMAND[1,1], 'MCU')        IF COMMAND = '' THEN COMMAND = 'N'        IF INDEX('ERCNPQ', COMMAND, 1) = 0 THEN COMMAND = ''      END    WHILE COMMAND = '' DO REPEAT*    BEGIN CASE      CASE COMMAND = 'N'        IF TOP + MAX.LINES < NUM.IDS THEN TOP += MAX.LINES      CASE COMMAND = 'P'        IF TOP - MAX.LINES >= 0 THEN TOP -= MAX.LINES    END CASE  WHILE COMMAND = 'N' OR COMMAND = 'P' DO REPEAT*UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'R' ; NULL    CASE COMMAND = 'C'      EXECUTE 'SELECT WDB.DEBUG WITH TYPE = "C" "R"'      PRINT 'Are you sure you want to clear these items from the WDB.DEBUG file? ':      INPUT ANS      ANS = OCONV(ANS[1,1],'MCU')      IF ANS = 'Y' THEN        IF SYSTEM(11) THEN          LOOP            READNEXT ID ELSE EXIT            DELETE F.WDB.DEBUG, ID          REPEAT        END      END ELSE        CLEARSELECT      END  END CASEREPEATSTOP**----------debug.request:*----------*READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE  PRINT "The selected item '":DBG.ID:"' is not available!"  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDEDIT.ID = 'D':DBG.ID[2, LEN(DBG.ID)]LOOP  PRINT PRMPT.LINE:"Debugging ":DBG.ID[1,28]:" - command: (Q)uit (V)iew (E)dit (R)un: ":  INPUT COMMAND  COMMAND = OCONV(COMMAND[1,1], 'MCU')UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'V'      GOSUB view.request    CASE COMMAND = 'E'      GOSUB edit.request    CASE COMMAND = 'R'      GOSUB run.request  END CASEREPEATRETURN**----------view.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDGOSUB to.editNUM.LNS = DCOUNT(EDIT.REC, @AM)I = 1LOOP WHILE I <= NUM.LNS DO  X = EDIT.REC<I>  IF LEN(X) > MAX.COLS THEN    X = FOLD(X, MAX.COLS)    EDIT.REC<I> = X    N = COUNT(X, @AM)    NUM.LNS += N    I += N  END  I += 1REPEATIF NUM.LNS = 0 THEN NUM.LNS = 1NUM.PGS = INT((NUM.LNS - 1) / MAX.LINES) + 1CUR.PG = 1LOOP  PG.TOP = (CUR.PG - 1) * MAX.LINES  IF PG.TOP + MAX.LINES > NUM.LNS THEN LPP = NUM.LNS - PG.TOP ELSE LPP = MAX.LINES  PRINT CLR.SCR:  PRINT 'Page ':CUR.PG:' of ':NUM.PGS:SPACE(10):DBG.ID  PRINT  FOR I = 1 TO LPP    PRINT EDIT.REC<I + PG.TOP>  NEXT I  PRINT PRMPT.LINE:'Command: (Q)uit (N)ext (P)rev (##) Goto page ':  INPUT COMMAND  IF COMMAND MATCHES '1N0N' THEN    IF COMMAND >= 1 AND COMMAND <= NUM.PGS THEN CUR.PG = COMMAND  END ELSE    COMMAND = OCONV(COMMAND[1,1], 'MCU')  ENDUNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'N' OR COMMAND = ''      IF CUR.PG < NUM.PGS THEN CUR.PG = CUR.PG + 1    CASE COMMAND = 'P'      IF CUR.PG > 1 THEN CUR.PG = CUR.PG - 1  END CASEREPEATRETURN**----------edit.request:*----------*IF EDITOR = '' THEN GOSUB choose.editorIF EDITOR <> '' THEN  EDIT.ID = 'D':DBG.ID  GOSUB to.edit  WRITE EDIT.REC ON F.WDB.DEBUG, EDIT.ID  CMND = EDITOR:' WDB.DEBUG ':EDIT.ID  EXECUTE CMND  READ EDIT.REC FROM F.WDB.DEBUG, EDIT.ID ELSE NULL  DELETE F.WDB.DEBUG, EDIT.ID  GOSUB from.editENDRETURN**----------run.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNEND*HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* Reconstruct query stringQSTR = ''QSEP = ''* headers and server variablesN = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_HEADER_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* form variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_CGI_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_CGI_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  URLENCODE.STRING = CHANGE(THE.BODY, @VM, CHAR(10))  GOSUB url.encode  QSTR := QSEP:'__body__=':NEW.STRINGEND* restore session stateIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    SESSION.REC = ''    SESSION.REC<1> = DBGREC<WDBG_SESSION_VARS>    SESSION.REC<2> = DBGREC<WDBG_SESSION_VALS>    SESSION.REC<3> = DBGREC<WDBG_SESSION_DATE>    SESSION.REC<4> = DBGREC<WDBG_SESSION_TIME>    WRITE SESSION.REC ON F.WEB.SESSION, SESSION.ID  ENDEND* break the query string into 1000 byte chunksN = INT((LEN(QSTR) - 1) / 1000) + 1* build the command lineRUN.ID = DBGREC<WDBG_REQUEST_ID>CMND = 'WDB.INIT ':HANDLER.NAME:'/':RESOURCE.NAME:' ':RUN.ID:'-1-':N:' %% _WDEBUG_MODE_'** run the commandPRINTPRINT 'Executing the request: ':CMNDPRINTMAT WWW.INFO = ""EXECSTART = SYSTEM(12)* send query string as stacked inputFOR I = 1 TO N  DATA QSTR[((I - 1) * 1000) + 1, 1000]NEXT IEXECUTE CMND CAPTURING RESPONSEEXECDUR = SYSTEM(12) - EXECSTARTPRINT 'Request complete. Press <enter> to parse results':INPUT ANS** update the request runtimeDBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_DURATION> = EXECDUR* process the responseLINT.BEFORE = ''LINT.AFTER = ''WARN = ''ERR = ''* Gather lint from before the start tag and after the complete tagDBGREC<WDBG_WARNING> = '' ;* WarningsDBGREC<WDBG_ERROR> = '' ;* ErrorsDBGREC<WDBG_LINT> = '' ;* LintIF RESPONSE<1> = "700 WDB-START" THEN  RESPONSE = DELETE(RESPONSE, 1)END ELSE  TAG = @AM:"700 WDB-START":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '700 WDB-START tag is missing from response'    LINT.BEFORE = RESPONSE    RESPONSE = ''  END ELSE    IF TAG.POS >= 1 THEN      LINT.BEFORE = RESPONSE[1, TAG.POS - 1]      RESPONSE = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    END  ENDENDN = DCOUNT(RESPONSE, @AM)IF RESPONSE<N> = "800 WDB-COMPLETE" THEN  RESPONSE = DELETE(RESPONSE, N)END ELSE  TAG = @AM:"800 WDB-COMPLETE":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '800 WDB-COMPLETE tag missing from response!'  END ELSE    LINT.AFTER = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    RESPONSE = RESPONSE[1, TAG.POS - 1]  ENDEND* Clean up lintIF TRIM(CHANGE(LINT.BEFORE, @AM, '')) = '' THEN LINT.BEFORE = ''IF TRIM(CHANGE(LINT.AFTER, @AM, '')) = '' THEN LINT.AFTER = ''IF LINT.BEFORE <> '' OR LINT.AFTER <> '' THEN  LINT = LINT.BEFORE  IF LINT.BEFORE <> '' AND LINT.AFTER <> '' THEN LINT := @AM:'...':@AM  LINT := LINT.AFTER  DBGREC<WDBG_LINT> = LOWER(LINT)END* Parse the response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''DBGREC<WDBG_RESPONSE_CONTENT> = ''NUM.VARS = 0STATUS.CODE = ''EOH = INDEX(RESPONSE, @AM:@AM, 1) ;* headers end at first blank line in responseIF EOH = 0 THEN EOH = LEN(RESPONSE) + 1N = DCOUNT(RESPONSE[1, EOH - 1], @AM)FOR I = 1 TO N  HDR.LINE = RESPONSE<I>  IF HDR.LINE[1,10] = '500 ERROR ' THEN    ERR = HDR.LINE[11, LEN(HDR.LINE)]    IF STATUS.CODE = '' THEN STATUS.CODE = 500  END ELSE    HDR.VAR = FIELD(HDR.LINE, ':', 1)    HDR.VAL = TRIMF(HDR.LINE[COL2() + 1, LEN(HDR.LINE)])    M = LEN(HDR.VAR)    FOR J = 1 TO M      IF NOT(HDR.VAR[J,1] MATCHES '1A') AND HDR.VAR[J,1] <> '-' THEN        HDR.VAR = ''        EXIT      END    NEXT J    IF HDR.LINE[LEN(HDR.VAR) + 1, 1] <> ':' THEN HDR.VAR = ''    IF HDR.VAR = '' THEN      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = '_BAD_'      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.LINE ;* invalid header line!    END ELSE      IF HDR.VAR = 'X-MVDB-STATUS' THEN        STATUS.CODE = HDR.VAL      END ELSE        NUM.VARS += 1        DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = HDR.VAR        DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.VAL      END    END  ENDNEXT IIF STATUS.CODE = '' THEN STATUS.CODE = 200DBGREC<WDBG_STATUS> = STATUS.CODE* save response contentIF EOH + 2 <= LEN(RESPONSE) THEN  DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(RESPONSE[EOH + 2, LEN(RESPONSE)])ENDDBGREC<WDBG_WARNING> = WARNDBGREC<WDBG_ERROR> = ERRRETURN**----------to.edit:*----------*EDIT.REC = ''EDIT.REC<-1> = '[INFO] (do not edit this section)'EDIT.REC<-1> = 'Date            = ':OCONV(DBGREC<WDBG_DATE>,'D4')EDIT.REC<-1> = 'Time            = ':OCONV(DBGREC<WDBG_TIME>,'MTS')EDIT.REC<-1> = 'Duration        = ':DBGREC<WDBG_DURATION>EDIT.REC<-1> = 'Port            = ':DBGREC<WDBG_PORT>EDIT.REC<-1> = 'Handler         = ':DBGREC<WDBG_HANDLER>EDIT.REC<-1> = 'Resource        = ':DBGREC<WDBG_RESOURCE>EDIT.REC<-1> = 'Controller      = ':DBGREC<WDBG_CONTROLLER>EDIT.REC<-1> = 'Program         = ':DBGREC<WDBG_PROGRAM>EDIT.REC<-1> = 'RequestID       = ':DBGREC<WDBG_REQUEST_ID>EDIT.REC<-1> = 'Method          = ':DBGREC<WDBG_METHOD>EDIT.REC<-1> = 'Path            = ':DBGREC<WDBG_PATH>EDIT.REC<-1> = 'RemoteAddr      = ':DBGREC<WDBG_REMOTE_ADDR>EDIT.REC<-1> = 'Status          = ':DBGREC<WDBG_STATUS>IF DBGREC<WDBG_WARNING> <> '' THEN  EDIT.REC<-1> = 'WARNING: ':DBGREC<WDBG_WARNING>ENDIF DBGREC<WDBG_ERROR> <> '' THEN  EDIT.REC<-1> = 'ERROR: ':DBGREC<WDBG_ERROR>ENDIF DBGREC<WDBG_LINT> <> '' THEN  EDIT.REC<-1> = 'LINT:':@AM:RAISE(DBGREC<WDBG_LINT>)END* Request headers and server variablesEDIT.REC<-1> = @AM:'[HEADERS]'N = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  HDR.VAL = DBGREC<WDBG_HEADER_VALS, I>  EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VALNEXT I* Query string variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[VARS]'  FOR I = 1 TO N    CGI.VAR = DBGREC<WDBG_CGI_VARS, I>    CGI.VAL = DBGREC<WDBG_CGI_VALS, I>    EDIT.REC<-1> = CGI.VAR:SPACE(16-LEN(CGI.VAR)):'= ':CGI.VAL  NEXT IEND* CookiesLOCATE 'HTTP_COOKIE' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  CSTRING = DBGREC<WDBG_HEADER_VALS, POS>END ELSE CSTRING = ''CONVERT ';' TO @AM IN CSTRINGN = DCOUNT(CSTRING, @AM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[COOKIES]'  FOR I = 1 TO N    COOKIE.VAR = TRIM(FIELD(CSTRING<I>, '=', 1))    COOKIE.VAL = CSTRING<I>[COL2() + 1, 99999]    EDIT.REC<-1> = COOKIE.VAR:SPACE(16-LEN(COOKIE.VAR)):'= ':COOKIE.VAL  NEXT IEND* REST parametersLOCATE 'PATH_INFO' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  PATH = DBGREC<WDBG_HEADER_VALS, POS>END ELSE PATH = ''IF PATH[1,1] = '/' THEN PATH = PATH[2,9999]N = DCOUNT(PATH, '/')IF N > 0 THEN  EDIT.REC<-1> = @AM:'[PARAMS]'  FOR I = 3 TO N    PARAM.VAR = 'Param[':(I-2):']'    EDIT.REC<-1> = PARAM.VAR:SPACE(16-LEN(PARAM.VAR)):'= ':FIELD(PATH, '/', I)  NEXT IEND* Session variablesIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    N = DCOUNT(DBGREC<WDBG_SESSION_VARS>, @VM)    IF N > 0 THEN      EDIT.REC<-1> = @AM:'[SESSION]'      EDIT.REC<-1> = '_SessionID      = ':SESSION.ID      IF DBGREC<WDBG_SESSION_DATE> <> '' THEN EDIT.REC<-1> = '_Date           = ':OCONV(DBGREC<20>, 'D4')      IF DBGREC<WDBG_SESSION_TIME> <> '' THEN EDIT.REC<-1> = '_Time           = ':OCONV(DBGREC<21>, 'MTS')      FOR I = 1 TO N        SESSION.VAR = DBGREC<WDBG_SESSION_VARS, I>        EDIT.REC<-1> = SESSION.VAR:SPACE(16-LEN(SESSION.VAR)):'= ':DBGREC<WDBG_SESSION_VALS, I>      NEXT I    END  ENDEND* Request bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  EDIT.REC<-1> = @AM:'[BODY]':@AM:RAISE(THE.BODY)END* Response headersN = DCOUNT(DBGREC<WDBG_RESPONSE_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[RESPONSE_HEADERS]'  FOR I = 1 TO N    HDR.VAR = DBGREC<WDBG_RESPONSE_VARS, I>    HDR.VAL = DBGREC<WDBG_RESPONSE_VALS, I>    EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VAL  NEXT IEND* Response contentTHE.CONTENT = DBGREC<WDBG_RESPONSE_CONTENT>IF THE.CONTENT <> '' THEN  EDIT.REC<-1> = @AM:'[RESPONSE_CONTENT]':@AM:RAISE(THE.CONTENT)END*RETURN**----------from.edit:*----------*SESSION.ID = ''HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* If COOKIES section exists, rebuild HTTP_COOKIE headerCOOKIES = ''SECT = 'COOKIES'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    COOKIE = EDIT.REC<I>    IF COOKIE <> '' THEN      COOKIE.NAME = TRIM(FIELD(COOKIE, '=', 1))      COOKIE.VAL = TRIMF(COOKIE[COL2() + 1, LEN(COOKIE)])      COOKIES := COOKIE.NAME:'=':COOKIE.VAL:';'      IF OCONV(COOKIE.NAME, 'MCU') = 'SESSIONID' THEN SESSION.ID = COOKIE.VAL    END  NEXT I  IF COOKIES[LEN(COOKIES), 1] = ';' THEN COOKIES = COOKIES[1, LEN(COOKIES) - 1]END* If PARAMS section exists, rebuild PATH_INFO headerPARAMS = ''SECT = 'PARAMS'GOSUB find.sectionIF SECT.START > 0 THEN  PNUM = 1  FOR I = SECT.START + 1 TO SECT.END    PARAM = EDIT.REC<I>    IF PARAM <> '' THEN      PARAM.NAME = TRIM(OCONV(FIELD(PARAM, '=', 1), 'MCU'))      PARAM.VAL = TRIMF(PARAM[COL2() + 1, LEN(PARAM)])      IF PARAM.NAME <> 'PARAM[':PNUM:']' THEN EXIT      PARAMS := '/':PARAM.VAL      PNUM += 1    END  NEXT I  IF PARAMS <> '' THEN PARAMS = '/':HANDLER.NAME:'/':RESOURCE.NAME:PARAMS ;* handler & resource come before paramsEND* Get headers and server variablesDBGREC<WDBG_HEADER_VARS> = ''DBGREC<WDBG_HEADER_VALS> = ''NUM.VARS = 0SECT = 'HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])* check for special headers      BEGIN CASE        CASE OCONV(VAR.NAME, 'MCU') = 'HTTP_COOKIE'          IF COOKIES <> '' THEN            VAR.VAL = COOKIES          END        CASE OCONV(VAR.NAME, 'MCU') = 'PATH_INFO'          IF PARAMS <> '' THEN            VAR.VAL = PARAMS          END          IF VAR.VAL[1,1] <> '/' THEN VAR.VAL = '/' : VAR.VAL          IF COUNT(VAR.VAL, '/') >= 2 THEN            HANDLER.NAME = FIELD(VAR.VAL, '/', 2)            RESOURCE.NAME = FIELD(VAR.VAL, '/', 3)          END          DBGREC<WDBG_PATH> = VAR.VAL        CASE OCONV(VAR.NAME, 'MCU') = 'REQUEST_METHOD'          DBGREC<WDBG_METHOD> = VAR.VAL              CASE OCONV(VAR.NAME, 'MCU') = 'REMOTE_ADDR'          DBGREC<WDBG_REMOTE_ADDR> = VAR.VAL      END CASE      NUM.VARS += 1      DBGREC<WDBG_HEADER_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_HEADER_VALS, NUM.VARS> = VAR.VAL    END  NEXT I  DBGREC<WDBG_HANDLER> = HANDLER.NAME  DBGREC<WDBG_RESOURCE> = RESOURCE.NAMEEND* Get form variablesDBGREC<WDBG_CGI_VARS> = ''DBGREC<WDBG_CGI_VALS> = ''NUM.VARS = 0SECT = 'VARS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_CGI_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_CGI_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get bodyDBGREC<WDBG_BODY> = ''SECT = 'BODY'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.BODY = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_BODY> = LOWER(THE.BODY)  ENDEND* Get session stateIF SESSION.FLAG AND SESSION.ID <> '' THEN  DBGREC<WDBG_SESSION_ID> = ''  DBGREC<WDBG_SESSION_VARS> = ''  DBGREC<WDBG_SESSION_VALS> = ''  DBGREC<WDBG_SESSION_DATE> = ''  DBGREC<WDBG_SESSION_TIME> = ''  NUM.VARS = 0  SECT = 'SESSION'  GOSUB find.section  IF SECT.START > 0 THEN    FOR I = SECT.START + 1 TO SECT.END      SESSION.LINE = EDIT.REC<I>      SESSION.VAR = TRIM(FIELD(SESSION.LINE, '=', 1))      SESSION.VAL = TRIMF(SESSION.LINE[COL2() + 1, LEN(SESSION.LINE)])      BEGIN CASE        CASE SESSION.VAR = '_SessionID'          DBGREC<WDBG_SESSION_ID> = SESSION.VAL        CASE SESSION.VAR = '_Date'          DBGREC<WDBG_SESSION_DATE> = ICONV(SESSION.VAL, 'D')        CASE SESSION.VAR = '_Time'          DBGREC<WDBG_SESSION_TIME> = ICONV(SESSION.VAL, 'MTS')        CASE 1          NUM.VARS += 1          DBGREC<WDBG_SESSION_VARS, NUM.VARS> = SESSION.VAR          DBGREC<WDBG_SESSION_VALS, NUM.VARS> = SESSION.VAL      END CASE    NEXT I  ENDEND* Get response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''NUM.VARS = 0SECT = 'RESPONSE_HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get response contentDBGREC<WDBG_RESPONSE_CONTENT> = ''SECT = 'RESPONSE_CONTENT'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.CONTENT = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(THE.CONTENT)  ENDENDRETURN**----------choose.editor:*----------*PRINTLOOP  PRINT 'Select the editor you want to use: 1 = ED, 2 = other: ':  INPUT ANSUNTIL ANS EQ '' DO  BEGIN CASE    CASE ANS = 1      EDITOR = 'ED'      EXIT    CASE ANS = 2      PRINT 'Enter the verb to invoke your editor: ':      INPUT TMP      PRINT TMP:' OK?':      INPUT ANS      ANS = OCONV(ANS[1,1], 'MCU')      IF ANS = 'Y' THEN        EDITOR = TMP        EXIT      END  END CASEREPEATRETURN**----------find.section:*----------*SECT.START = -1SECT.END = -1TAG = @AM:'[':SECT:']':@AMTAG.POS = INDEX(EDIT.REC, TAG, 1)IF TAG.POS = 0 THEN RETURN ;* Section not foundSECT.START = DCOUNT(EDIT.REC[1, TAG.POS], @AM)SECT.END = DCOUNT(EDIT.REC, @AM)FOR I = SECT.START + 1 TO SECT.END  SECT.LN = EDIT.REC<I>  IF SECT.LN MATCHES '"["1A0A"]"' OR SECT.LN MATCHES '"["1A0A"_"1A0A"]"' THEN* beginning of next section is end of current section    SECT.END = I - 1    EXIT  ENDNEXT IRETURN**----------url.encode:*----------*NEW.STRING = ""UE.LEN = LEN(URLENCODE.STRING)FOR UEX = 1 TO UE.LEN  UE.CHR = URLENCODE.STRING[UEX,1]  UE.CVAL = SEQ(UE.CHR)  BEGIN CASE    CASE UE.CVAL < 32; ENC.FLAG = 1   ;* control character    CASE UE.CVAL = 37 OR UE.CVAL = 38 OR UE.CVAL = 43 OR UE.CVAL = 61; ENC.FLAG = 1 ;* % & + =    CASE UE.CVAL = 127; ENC.FLAG = 1  ;* DEL control character    CASE UE.CVAL >= 252; ENC.FLAG = 1 ;* delimiter character    CASE 1 ; ENC.FLAG = 0  END CASE  IF ENC.FLAG THEN    UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')  END  NEW.STRING := UE.CHRNEXT UEXRETURN*END000FBDSUB.DEBUG.WIDGET0c2    SUBROUTINE SUB.DEBUG.WIDGET* @(#) SUB.DEBUG.WIDGET Ported to jBASE 17:00:17  08 JUL 2015*  The following variable names were converted*   PROG,LN,DATE,TIME* * 07-17-15 Peter Schellenbach - removed D3 runtime error code - if there is a way to*   get UniVerse runtime errors, create new SUB.GET.RUNTIME.ERRORS subroutine and call*   it to get the errors.** 01-20-16 Peter Schellenbach - added code to insert extra widget info after runtime errors.*   Call new SUB.LOG.DEBUG.INFO in widget code to save extra widget info for display here.*    INCLUDE WBPD MVDB.INCLUDE*    W$TYPE = "HTML"    W$TITLE = "Widget Debug: ":G$WIDGET.NAME    IF GLOBAL.INFO(90) = "FAIL" THEN        W$TITLE := " (Widget Failed)"    END ELSE        W$TITLE := ' (Debug Mode)'    END    W$WIDTH = 3     ;* Maybe we can track the last known width of this widget*    IF G$QUERYMODE THEN RETURN*    OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE        W$HTML.DATA = '<h2>Unable to open WEB.FORMS</h2>'        RETURN    END    READ W$HTML.DATA FROM F.WEB.FORMS, "widget_debug.html" ELSE W$HTML.DATA = "<h2>Error: widget_debug.html is missing.</h2>"*    WIDGET.SUB.NAME = GLOBAL.INFO(91)   ;* Set by MVDB.MAIN before re-assigning the subroutine name to this program.*    EDIT.LINK = ''    IF G$ADMIN.USER THEN* Add a link to edit the subroutine        URL.SUBNAME = WIDGET.SUB.NAME        CALL SUB.URL.ENCODE(URL.SUBNAME)        EDIT.LINK = '<a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=':URL.SUBNAME:'" target="MVDB.SUBS_':URL.SUBNAME:'">Edit Subroutine</a>'    END*    UDINFO = ""    FOR UDPOS = 1 TO 100        IF WIDGET.USER.DATA(UDPOS) # "" THEN            UDINFO := '<tr><td>':UDPOS:'</td><td>':WIDGET.USER.DATA(UDPOS):'</td></tr>':CHAR(10)        END    NEXT UDPOS*    URL.WIDGET.NAME = G$WIDGET.NAME    CALL SUB.URL.ENCODE(URL.WIDGET.NAME)    IF GLOBAL.INFO(90) = "FAIL" THEN        DB.REASON = "<hr />This widget has been disabled for one of the following reasons:"        DB.REASON := '<ul><li>The widget subroutine has an error causing it to terminate unexpectedly.</li>'        DB.REASON := '<li>The page was refreshed or a new dashboard page was loaded before the widget subroutine finished running.</li>'        DB.REASON := '<li>The widget is running, but it is taking too long for it to finish.</li>'        DB.REASON := '<li>The widget subroutine encountered a system error and could not finish running.</li></ul>'        REMOVE.LINK = '<a href="/dbc/MVDB.MAIN?unfail_widget=':URL.WIDGET.NAME:'">click here</a>'        REMEDY =  "When the problem has been corrected, ":REMOVE.LINK:" to take this widget out of debug mode.<hr />"    END ELSE        DB.REASON = ""        REMEDY = ""    END** Runtime errors?*    RE.INFO = ""    *PJS 07-17-15 Universe TODO: get runtime errors*    MAX.ERRS = 50    *TODO: CALL SUB.GET.RUNTIME.ERRORS(RE.INFO, '', WIDGET.SUB.NAME, MAX.ERRS, G$ADMIN.USER)    RE.INFO := CHAR(10): '</table>'    *    *PJS 01-20-16 Check for widget debug info and add to runtime errors section.    * To use this feature, widget code can call SUB.LOG.DEBUG.INFO with widget    * name and a message. The last 100 lines of message text are saved in WDB.DEBUG    * for the widget and displayed here after runtime errors by the debug widget.    OPEN 'WDB.DEBUG' TO F.WDB.DEBUG THEN        READ EXTRA.INFO FROM F.WDB.DEBUG,G$WIDGET.NAME THEN            CALL SWAP(EXTRA.INFO,@AM,CHAR(10))            RE.INFO := '<pre>':CHAR(10):EXTRA.INFO:CHAR(10):'</pre>':CHAR(10)        END    END     *    CALL SWAP(W$HTML.DATA,'<!-- WIDGET_NAME -->',G$WIDGET.NAME)    CALL SWAP(W$HTML.DATA,'<!-- WIDGET_SUB_NAME -->',WIDGET.SUB.NAME)    CALL SWAP(W$HTML.DATA,'<!-- WIDGET_EDIT_LINK -->',EDIT.LINK)    CALL SWAP(W$HTML.DATA,'<!-- DEBUG_REASON -->',DB.REASON)    CALL SWAP(W$HTML.DATA,'<!-- REMEDY -->',REMEDY)    CALL SWAP(W$HTML.DATA,'<!-- WIDGET_USER_DATA -->',UDINFO)    CALL SWAP(W$HTML.DATA,'<!-- RUNTIME_ERRORS -->',RE.INFO)    RETURN000474MVAPPS.STATUS0c2** Program: MVAPPS.STATUS* Author: Luke Bucklin, Sierra Bravo Corporation* Date: January 4, 2010* Purpose: Provide app status information to the mvappsvr config app*APP.LIST = ""APP.CNT = 0PRINT "MVAPPS START"OPEN '','MVAPPS.INSTALLED' TO F.MVAPPS.INSTALLED THEN  EXECUTE 'SSELECT MVAPPS.INSTALLED' CAPTURING JUNK  LOOP    READNEXT ID ELSE EXIT    READ REC FROM F.MVAPPS.INSTALLED, ID THEN      APP.CNT += 1      APP.LIST<1,APP.CNT> = ID      APP.LIST<2,APP.CNT> = REC<1>      APP.LIST<3,APP.CNT> = REC<2>      APP.LIST<4,APP.CNT> = REC<3>      APP.LIST<5,APP.CNT> = OCONV(REC<4>,'D2/')    END  REPEATENDAPP.NAMES = APP.LIST<2>CONVERT "|" TO "\" IN APP.NAMESAPP.LIST<2> = APP.NAMESPRINT "MVAPPS-VERSION: 1.0"DATA "VERSION"EXECUTE "APP.INSTALLER" CAPTURING AIVLOCATE "Installer Version" IN AIV SETTING POS THEN  VNO = AIV<POS+1>END ELSE VNO = "?"IF NOT(VNO MATCHES "1N0N'.'0X") THEN VNO = "?"PRINT "INSTALLER-VERSION: ":VNOPRINT 'APP-COUNT: ':APP.CNTFOR N = 1 TO APP.CNT  PRINT 'APP: ':APP.LIST<2,N>:",":APP.LIST<3,N>:",":APP.LIST<4,N>:",":APP.LIST<5,N>NEXT NPRINT "MVAPPS END"STOPEND000789SUB.MVDB.FEATURES0c2SUBROUTINE SUB.MVDB.FEATURES(USER.LIMIT,MAPS.ENABLED,FUSION.WIDGETS.ENABLED,WATERMARK)INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*** Decipher the license data*CDIGIT = CGI$APPSVR.ID[1,1]LSEG1 = CGI$APPSVR.ID[2,5]LSEG2 = CGI$APPSVR.ID[7,7]LSEG3 = CGI$APPSVR.ID[14,8]UID4 = CGI$UNIQUE.ID "R%4"UID3 = UID4 "R%3"UID2 = UID4 "R%2"UIDL1 = UID4 "R%1"UIDL2 = UID4[3,1]*CHKVAL = 0FOR N = 2 TO 21  CHKVAL += SEQ(CGI$APPSVR.ID[N,1])NEXT NCHKVAL = MOD(CHKVAL,16)** SEGMENT 1: Extract license edition*SEG1 = OCONV(LSEG1,'MCXD')SEG1 = SEG1 / (4*(UID4+1))LICENSE.EDITION = SEG1-1** SEGMENT 2: Extract user limit*SEG2 = OCONV(LSEG2,'MCXD')SEG2 = SEG2 / (3*(UID3+1))LICENSE.CNT = SEG2** SEGMENT 3: Extract system id*SEG3 = OCONV(LSEG3,'MCXD')SEG3 = SEG3 / (UIDL1 + UIDL2 + 2)LICENSE.SYSID = SEG3*WWW.INFO(46) = OCONV(CHKVAL,'MCDX'):'/':OCONV(LSEG3,'MCXD'):" / ":(UIDL1 + UIDL2 + 2):" = ":LICENSE.SYSIDWWW.INFO(47) = LICENSE.CNT:'/':LICENSE.EDITIONWWW.INFO(48) = LICENSE.SYSID*USER.LIMIT = LICENSE.CNTMAPS.ENABLED = 0FUSION.WIDGETS.ENABLED = 0WATERMARK = ''EDITION = ''BEGIN CASE  CASE LICENSE.EDITION = 1    FUSION.WIDGETS.ENABLED = 1    MAPS.ENABLED = 1    WATERMARK = 'Development Version'    EDITION = 'Development Edition'  CASE LICENSE.EDITION = 2     EDITION = 'Standard Edition'  CASE LICENSE.EDITION = 3    FUSION.WIDGETS.ENABLED = 1    EDITION = 'Professional Edition'  CASE LICENSE.EDITION = 4    FUSION.WIDGETS.ENABLED = 1    MAPS.ENABLED = 1    EDITION = 'Enterprise Edition'  CASE LICENSE.EDITION = 5    FUSION.WIDGETS.ENABLED = 1    MAPS.ENABLED = 1    WATERMARK = 'Evaluation Version'    EDITION = 'Evaluation'  CASE 1    EDITION = 'Edition unavailable'END CASE**Populate globals for user reference*G$LICENSE.COUNT = LICENSE.CNTG$EDITION = EDITION ;*:' | ':CGI$APPSVR.ID:' | ':CGI$UNIQUE.IDG$SYSTEM.ID = LICENSE.SYSID*RETURN007424MVPKG.MAIN0c2* @(#) MVPKG.MAIN Ported to jBASE 17:00:17  08 JUL 2015* Copyright (C) 2010 Sierra Bravo Corporation, All Rights Reserved** Written by: Dave Bucklin, Sierra Bravo* Date: May, 2010* Description: Administration area of Bravo Dashboard**#MAKE# RL $OPTIONS D3    INCLUDE WBPD WWW.INCLUDE    INCLUDE WBPD MVDB.INCLUDE*UV INCLUDE WBPD MVPKG.INCLUDE    INCLUDE WBPD FI.MVDB.WIDGETS    INCLUDE WBPD FI.MVDB.DEFS    INCLUDE WBPD FI.MVDB.WIDGET.TYPES*    EQU TRUE TO 1, FALSE TO 0, AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*    OPEN '','MVPKG.DATA' TO F.MVPKG.DATA ELSE STOP 201, 'MVPKG.DATA'    OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'    OPEN '','MVDB.SUBS' TO F.MVDB.SUBS ELSE STOP 201, 'MVDB.SUBS'    OPEN '','MVDB.DEFS' TO F.MVDB.DEFS ELSE STOP 201, 'MVDB.DEFS'    OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE STOP 201, 'MVDB.WIDGET.TYPES'    OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'    OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS'    OPEN '','MD' TO F.MD ELSE        OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD'    END*    DIM PKG.REC(40)    DIM SITE$SETTINGS(100)    EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)    EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)    EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)    EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)    EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)    EQU SITE$THEME        TO SITE$SETTINGS(8)    EQU SITE$CHARSET      TO SITE$SETTINGS(9)*    EQU STEP$WIDGETS TO 1    EQU STEP$DASHBOARDS TO 2    EQU STEP$ITEMS TO 3    EQU STEP$WEB.FILES TO 4    EQU STEP$SETTINGS TO 5    EQU STEP$SUMMARY TO 6*    MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""    IF SITE$ALT.LOGO = '' THEN        SITE.LOGO = '/db/images/mv-logo.png'    END ELSE        SITE.LOGO = SITE$ALT.LOGO        IF NOT(INDEX(SITE.LOGO,'/',1)) THEN            SITE.LOGO = '/db/images/':SITE.LOGO        END    END    IF SITE$THEME # '' THEN SITE$THEME = '<link rel="Stylesheet" href="/db/themes/':SITE$THEME:'" media="screen" type="text/css" />'    IF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*    CALL GET.SESSION.VAR("adminauth",adminauth)    CALL PUT.SESSION.VAR("dd_mode",0)    adminpass = ""    IF adminauth # 1 THEN        FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'        FORM := '</head><body><p>Administrative priviledges are required. '        FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'        CALL WEB.SEND(FORM)        STOP    END*    HTML = ''    LOCATE "action" IN CGI$VARS SETTING POS THEN        action = CGI$VALS<POS>    END ELSE action = ""    LOCATE 'pkg_id' IN CGI$VARS SETTING POS THEN        PKG.ID = CGI$VALS<POS>    END ELSE PKG.ID = ''*    BEGIN CASE    CASE action = 'rebuild'        MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID THEN*translate this package definition into something usable by the package builder            OPEN 'MAKE.FILE,':PKG.ID TO F.MAKE.FILE ELSE                EXECUTE "CREATE-FILE DATA MAKE.FILE,":PKG.ID:" 11"                OPEN 'MAKE.FILE,':PKG.ID TO F.MAKE.FILE ELSE STOP 201, 'MAKE.FILE,':PKG.ID            END            CLEARFILE F.MAKE.FILE**Dashboards*            WIDGET.LIST = ''  ;*composite of dashboard and individual widgets            DB.LIST = ''            FILE.LIST = ''            DB.CNT = DCOUNT(PKG$DASHBOARDS<1>,VM)            FOR ON.DB = 1 TO DB.CNT                IF PKG$DASHBOARDS.OVR<1,ON.DB> = 1 THEN LIST.POS = 2 ELSE LIST.POS = 1                IF PKG$DASHBOARDS.ADD<1,ON.DB> = 1 THEN*add the widgets from this db                    READV WIDGETS FROM F.MVDB.DEFS, PKG$DASHBOARDS<1,ON.DB>, 2 ELSE WIDGETS = ''                    WCNT = DCOUNT(WIDGETS<1>,VM)                    FOR ON.W = 1 TO WCNT                        LOCATE WIDGETS<1,ON.W> IN WIDGET.LIST<LIST.POS> SETTING DUM ELSE                            WIDGET.LIST = INSERT(WIDGET.LIST,LIST.POS,0,0,WIDGETS<1,ON.W>)                        END                    NEXT ON.W                END                DB.LIST<LIST.POS,-1> = PKG$DASHBOARDS<1,ON.DB>            NEXT ON.DB*DB.LIST = PKG$DASHBOARDS*CONVERT VM TO AM IN DB.LIST*WRITE DB.LIST ON F.MAKE.FILE, 'DATA_MVDB.DEFS'            PKG.LIST = DB.LIST<1>            CONVERT VM TO AM IN PKG.LIST            IF DCOUNT(PKG.LIST,AM) THEN                WRITE PKG.LIST ON F.MAKE.FILE, 'DATA_MVDB.DEFS'                FILE.LIST<-1> = 'MVDB.DEFS'            END            O.PKG.LIST = DB.LIST<2>            CONVERT VM TO AM IN O.PKG.LIST            IF DCOUNT(O.PKG.LIST,AM) THEN                WRITE O.PKG.LIST ON F.MAKE.FILE, 'DATA_O:MVDB.DEFS'                FILE.LIST<-1> = 'O:MVDD.DEFS'            END**Widget defs and subs*            WCNT = DCOUNT(PKG$WIDGETS<1>,VM)            FOR ON.W = 1 TO WCNT                IF PKG$WIDGETS.OVR<1,ON.DB> = 1 THEN LIST.POS = 2 ELSE LIST.POS = 1                LOCATE PKG$WIDGETS<1,ON.W> IN WIDGET.LIST<LIST.POS> SETTING DUM ELSE                    WIDGET.LIST = INSERT(WIDGET.LIST,LIST.POS,0,0,WIDGETS<1,ON.W>)                END            NEXT ON.W*WRITE WIDGET.LIST ON F.MAKE.FILE, 'DATA_MVDB.WIDGETS'            WGT.LIST = WIDGET.LIST<1>            CONVERT VM TO AM IN WGT.LIST            IF DCOUNT(WGT.LIST,AM) THEN                WRITE WGT.LIST ON F.MAKE.FILE, 'DATA_MVDB.WIDGETS'                FILE.LIST<-1> = 'MVDB.WIDGETS'            END            O.WGT.LIST = WIDGET.LIST<2>            CONVERT VM TO AM IN O.WGT.LIST            IF DCOUNT(WGT.LIST,AM) THEN                WRITE O.WGT.LIST ON F.MAKE.FILE, 'DATA_O:MVDB.WIDGETS'                FILE.LIST<-1> = 'O:MVDB.WIDGETS'            END*            COMPILE.COMMANDS = ''            SUB.LIST = ''            WCNT = DCOUNT(WIDGET.LIST,AM)            FOR ON.W = 1 TO WCNT                READV SUB.NAME FROM F.MVDB.WIDGETS, WIDGET.LIST<ON.W>, 1 THEN                    LOCATE SUB.NAME IN SUB.LIST SETTING DUM ELSE                        SUB.LIST = INSERT(SUB.LIST,1,0,0,SUB.NAME)                        IF PKG$COMPILE.OPT = 1 THEN                            COMPILE.COMMANDS<-1> = 'COMPILE MVDB.SUBS ':SUB.NAME                            IF PKG$FLASH.OPT = 1 THEN COMPILE.COMMANDS := " (O"                        END                    END                END            NEXT ON.W            WRITE SUB.LIST ON F.MAKE.FILE, 'DATA_MVDB.SUBS'**Additional files and items*            FILE.CNT = DCOUNT(PKG$FILES<1>,VM)            FOR ON.FILE = 1 TO FILE.CNT                FNAME = PKG$FILES<1,ON.FILE>                ITEM.LIST = ''                IF PKG$LIST<1,ON.FILE> # '' THEN                    EXECUTE 'GET-LIST ':PKG$LIST.FILE<1,ON.FILE>:' ':PKG$LIST<1,ON.FILE> CAPTURING JUNK                    LOOP                        READNEXT ID ELSE EXIT                        ITEM.LIST<-1> = ID                    REPEAT                END ELSE                    IF PKG$ITEMS<1,ON.FILE> = '*' THEN                        EXECUTE 'SELECT ':PKG$FILES.DICT<1,ON.FILE>:' ':PKG$FILES<1,ON.FILE> CAPTURING JUNK                        LOOP                            READNEXT ID ELSE EXIT                            ITEM.LIST<-1> = ID                        REPEAT                    END ELSE                        ITEM.LIST = PKG$ITEMS<1,ON.FILE>                        CONVERT SVM TO AM IN ITEM.LIST                    END                END                IF PKG$FILES.OVR<1,ON.FILE> = 1 THEN FNAME = 'O:':FNAME                IF PKG$FILES.DICT<1,ON.FILE> = 'DICT' THEN                    WRITE ITEM.LIST ON F.MAKE.FILE, "DICT_":FNAME                END ELSE                    WRITE ITEM.LIST ON F.MAKE.FILE, "DATA_":FNAME                END                LOCATE FNAME IN FILE.LIST SETTING DUM ELSE                    FILE.LIST<-1> = FNAME                END            NEXT ON.FILE*            WRITE FILE.LIST ON F.MAKE.FILE, 'FILE.LIST'*            PRE.COMMANDS = PKG$PRE.CMD            CONVERT VM TO AM IN PRE.COMMANDS            WRITE PRE.COMMANDS ON F.MAKE.FILE, 'PRE.COMMANDS'            POST.COMMANDS = PKG$POST.CMD            CONVERT VM TO AM IN POST.COMMANDS            POST.COMMANDS<-1> = COMPILE.COMMANDS            WRITE POST.COMMANDS ON F.MAKE.FILE, 'POST.COMMANDS'*            CALL MVDB.BUILD.PACKAGE(PKG.ID,PATH,SIZE)            PKG$BUILD.TS = DATE() : TIME() "R%5"            PKG$BUILD.SEQ += 1            PKG$SIZE = SIZE            PKG$PATH = PATH            MATWRITE PKG.REC ON F.MVPKG.DATA, PKG.ID        END        GOSUB LOAD.PKGS    CASE action = 'addfile'        LOCATE 'file_name' IN CGI$VARS SETTING POS THEN            FILE.NAME = CGI$VALS<POS>        END ELSE FILE.NAME = ''        LOCATE 'file_dict' IN CGI$VARS SETTING POS THEN            FILE.DICT = CGI$VALS<POS>        END ELSE FILE.DICT = ''        LOCATE 'file_ovr' IN CGI$VARS SETTING POS THEN            FILE.OVR = CGI$VALS<POS>        END ELSE FILE.OVR = ''        LOCATE 'list_file' IN CGI$VARS SETTING POS THEN            LIST.FILE = CGI$VALS<POS>        END ELSE LIST.FILE = ''        LOCATE 'list_name' IN CGI$VARS SETTING POS THEN            LIST.NAME = CGI$VALS<POS>        END ELSE LIST.NAME = ''        LOCATE 'items' IN CGI$VARS SETTING POS THEN            ITEMS = CGI$VALS<POS>            CONVERT ',' TO SVM IN ITEMS        END ELSE ITEMS = ''        IF PKG.ID # '' AND FILE.NAME # '' AND ((LIST.NAME # '' AND LIST.FILE # '') OR ITEMS # '') THEN            MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID THEN                ADD.POS = DCOUNT(PKG$FILES<1>,VM) + 1                PKG$FILES<1,ADD.POS> = FILE.NAME                PKG$FILES.DICT<1,ADD.POS> = FILE.DICT                PKG$ITEMS<1,ADD.POS> = ITEMS                PKG$LIST<1,ADD.POS> = LIST.NAME                PKG$LIST.FILE<1,ADD.POS> = LIST.FILE*PKG$FILES.OVR<1,ADD.POS> = FILE.OVR                DATA 'LIST ':FILE.DICT:' ':FILE.NAME:' TOTAL SIZE DET-SUPP'                IF LIST.NAME # '' THEN                    EXECUTE 'SELECT ':LIST.FILE:' ':LIST.NAME CAPTURING OUTPUT                    END ELSE IF ITEMS = "*" THEN                        EXECUTE 'SELECT ':FILE.DICT:' ':FILE.NAME CAPTURING OUTPUT                    END ELSE                        ITEM.LIST = ITEMS                        CALL SWAP(ITEM.LIST,SVM,'""')                        EXECUTE 'SELECT ':FILE.DICT:' ':FILE.NAME:' "':ITEM.LIST:'"' CAPTURING OUTPUT                    END                    PKG$FILES.SIZE<1,ADD.POS> = TRIM(OUTPUT<7>) + 0                    MATWRITE PKG.REC ON F.MVPKG.DATA, PKG.ID                END                GOSUB EDIT.PACKAGE            END ELSE                PRINT "Error 1"            END        CASE action = 'edit'            MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID THEN                GOSUB EDIT.PACKAGE            END        CASE action = 'save'            VAR.CNT = DCOUNT(CGI$VARS,AM)            MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID ELSE MAT PKG.REC = ''*Clear these so we can rebuild them. We have the technology.            PKG$WIDGETS = ''            PKG$WIDGETS.OVR = ''            PKG$DASHBOARDS = ''            PKG$DASHBOARDS.OVR = ''            PKG$DASHBOARDS.ADD = ''            PKG$FILES.OVR = ''            PKG$WEB.IMAGE = ''            PKG$WEB.CSS = ''            PKG$WEB.JS = ''            PKG$WEB.ICON = ''            PKG$WEB.IMAGE.OVR = ''            PKG$WEB.CSS.OVR = ''            PKG$WEB.JS.OVR = ''            PKG$WEB.ICON.OVR = ''            WIDGET.ADD.POS = 1            DB.ADD.POS = 1            IMAGE.ADD.POS = 1            CSS.ADD.POS = 1            JS.ADD.POS = 1            ICON.ADD.POS = 1            FOR ON.VAR = 1 TO VAR.CNT                THIS.VAR = CGI$VARS<ON.VAR>                THIS.VAL = CGI$VALS<ON.VAR>                BEGIN CASE                CASE THIS.VAL = ''*Get widgets                CASE THIS.VAR[1,11] = 'widget_ovr_'                CASE THIS.VAR[1,7] = 'widget_'                    WIDGET.ID = THIS.VAR[8,99]                    OVR = 'widget_ovr_':WIDGET.ID                    OVR.FLAG = 0                    LOCATE OVR IN CGI$VARS SETTING POS THEN                        OVR.FLAG = 1                    END                    PKG$WIDGETS<1,WIDGET.ADD.POS> = WIDGET.ID                    PKG$WIDGETS.OVR<1,WIDGET.ADD.POS> = OVR.FLAG                    WIDGET.ADD.POS += 1*Get Dashboards                CASE THIS.VAR[1,10] = 'dashboard_'                    DB.ID = THIS.VAR[11,99]                    OVR = 'db_ovr_':DB.ID                    ADD = 'db_add_':DB.ID                    OVR.FLAG = 0; ADD.FLAG = 0                    LOCATE OVR IN CGI$VARS SETTING POS THEN                        OVR.FLAG = 1                    END                    LOCATE ADD IN CGI$VARS SETTING POS THEN                        ADD.FLAG = 1                    END                    PKG$DASHBOARDS<1,DB.ADD.POS> = DB.ID                    PKG$DASHBOARDS.OVR<1,DB.ADD.POS> = OVR.FLAG                    PKG$DASHBOARDS.ADD<1,DB.ADD.POS> = ADD.FLAG                    DB.ADD.POS += 1*Get file overwite flags                CASE THIS.VAR[1,10] = 'files_ovr_'                    OVR.POS = FIELD(THIS.VAR,'_',3)                    PKG$FILES.OVR<1,OVR.POS> = 1*Get web files                CASE THIS.VAR = 'web_images'                    CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)                    PKG$WEB.IMAGE = TRIM(THIS.VAL,VM)                CASE THIS.VAR = 'web_icons'                    CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)                    PKG$WEB.ICON = TRIM(THIS.VAL,VM)                CASE THIS.VAR = 'web_css'                    CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)                    PKG$WEB.CSS = TRIM(THIS.VAL,VM)                CASE THIS.VAR = 'web_js'                    CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)                    PKG$WEB.JS = TRIM(THIS.VAL,VM)                END CASE            NEXT ON.VAR*Get settings            LOCATE 'pkg_pre_cmd' IN CGI$VARS SETTING POS THEN                PKG$PRE.CMD = CGI$VALS<POS>                CALL SWAP(PKG$PRE.CMD,CHAR(13):CHAR(10),VM)            END ELSE PKG$PRE.CMD = ''            LOCATE 'pkg_post_cmd' IN CGI$VARS SETTING POS THEN                PKG$POST.CMD = CGI$VALS<POS>                CALL SWAP(PKG$POST.CMD,CHAR(13):CHAR(10),VM)            END ELSE PKG$POST.CMD = ''            LOCATE 'compile_opt' IN CGI$VARS SETTING POS THEN                PKG$COMPILE.OPT = 1            END ELSE PKG$COMPILE.OPT = 0            LOCATE 'flash_opt' IN CGI$VARS SETTING POS THEN                PKG$FLASH.OPT = 1            END ELSE PKG$FLASH.OPT = 1            LOCATE 'access_opt' IN CGI$VARS SETTING POS THEN                PKG$ACCESS.OPT = 1            END ELSE PKG$ACCESS.OPT = 0            LOCATE 'pkg_name' IN CGI$VARS SETTING POS THEN                PKG$NAME = CGI$VALS<POS>            END            LOCATE 'pkg_desc' IN CGI$VARS SETTING POS THEN                PKG$DESC = CGI$VALS<POS>            END            MATWRITE PKG.REC ON F.MVPKG.DATA, PKG.ID            GOSUB LOAD.PKGS        CASE action = 'delete'            DELETE F.MVPKG.DATA, PKG.ID            EXECUTE 'DELETE-FILE MAKE.FILE,':PKG.ID CAPTURING JUNK            GOSUB LOAD.PKGS        CASE 1            GOSUB LOAD.PKGS        END CASE*        READ ADMIN.TEMPLATE FROM F.WEB.FORMS, "pkg_list_template.html" ELSE ADMIN.TEMPLATE = "pkg_list_template.html not found."        CALL SWAP(ADMIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)        HEADER = '<div id="dashboard_nav">'        HEADER := '<ol class="dashboard_list">'        HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=users">Users</a></li>'        HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets">Widgets</a></li>'        HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=dashboards">Dashboards</a></li>'        OPEN 'RSS.BP' TO F.RSS.BP THEN            HEADER := '<li><a href="':CGI$PATH:'/RSS.MAINT">RSS Feed Maintenance</a></li>'        END        HEADER := '<li class="db_active"><a href="':CGI$PATH:'/RSS.MAINT">Package Manager</a></li>'        HEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN">Return to Dashboard</a></li>'        HEADER := '</ol>'        HEADER := '</div>'        CALL SWAP(ADMIN.TEMPLATE,'<!-- HEADER -->',HEADER)        FOOTER = ''        CALL SWAP(ADMIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)        CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_MAIN -->',HTML)        CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)        CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_THEME -->',SITE$THEME)        CALL WEB.SEND(ADMIN.TEMPLATE)        STOP*LOAD.PKGS:*        HTML = '<table width="100%">'        HTML<-1> = '<tr><td colspan="6"><a href="':CGI$PATH:'/MVPKG.MAIN?action=editpkg" class="add-pkg">Add a Package</a></td></tr>'        HTML<-1> = '<tr><th>Package</th><th>Last Build</th><th>Size</th><th>Build#</th><th>Description</th><th>Action</th></tr>'        EXECUTE "SSELECT MVPKG.DATA BY NAME" CAPTURING JUNK        LOOP            READNEXT FID ELSE EXIT            MATREAD PKG.REC FROM F.MVPKG.DATA, FID ELSE CONTINUE            IF PKG$SIZE # '' THEN                BEGIN CASE                CASE PKG$SIZE >= PWR(10,9)                    PKG$SIZE = OCONV(PKG$SIZE,"MD29"):' GB'                CASE PKG$SIZE >= PWR(10,6)                    PKG$SIZE = OCONV(PKG$SIZE,"MD26"):' MB'                CASE PKG$SIZE >= PWR(10,3)                    PKG$SIZE = OCONV(PKG$SIZE,"MD23"):' kB'                CASE 1                    PKG$SIZE := ' bytes'                END CASE            END            BUILD.DATE = OCONV(PKG$BUILD.TS[1,5],"D2/")            BUILD.TIME = OCONV(PKG$BUILD.TS[6,5],"MTS")            ROW = '<tr><td>':PKG$NAME:'</td><td>':BUILD.DATE:' ':BUILD.TIME:'</td>'            ROW := '<td>':PKG$SIZE:'</td><td>':PKG$BUILD.SEQ:'</td><td>':PKG$DESC:'</td>'            ROW := '<td><a href="/dbc/MVPKG.MAIN?action=edit&pkg_id=':FID:'"><img src="/db/icons/brick_edit.png" title="Edit"></a> '            ROW := \<a onClick="return confirm('DELETE: Are you sure?');" href="/dbc/MVPKG.MAIN?action=delete&pkg_id=\:FID:\"><img src="/db/icons/brick_delete.png" title="Delete"></a> \            ROW := '<a href="/dbc/MVPKG.MAIN?action=rebuild&pkg_id=':FID:'"><img src="/db/icons/brick_go.png" title="Rebuild"></a>'            ROW := '<a href="/dbc/MVPKG.MAIN?action=download&pkg_id=':FID:'"><img src="/db/icons/arrow_down.png" title="Download"></a></td></tr>'            HTML<-1> = ROW        REPEAT        HTML<-1> = '<tr><td colspan="6"><a href="':CGI$PATH:'/MVPKG.MAIN?action=editpkg" class="add-pkg">Add a Package</a></td></tr>'        HTML<-1> = '</table>'        RETURN*EDIT.PACKAGE:        CALL MVDB.SUB.WIDGET.LIST(WIDGET.LIST)        HTML<-1> = '<form action="':CGI$PATH:'/MVPKG.MAIN" method="POST">'        HTML<-1> = 'Package Name: <input type="text" name="pkg_name" value="':PKG$NAME:'"><br/>'        HTML<-1> = 'Description: <input type="text" name="pkg_desc" value="':PKG$DESC:'"><br/>'        HTML<-1> = '<input type="hidden" name="action" value="save">'        HTML<-1> = '<input type="hidden" name="pkg_id" value="':PKG.ID:'">'        HTML<-1> = '<div id="submit"><input class="ui-state-default ui-corner-all" type="submit" value="Save" /></div> '        HTML<-1> = '<div id="tabs"> '        HTML<-1> = '<ul><li><a href="#tabs-1">Widgets</a></li>'        HTML<-1> = '<li><a href="#tabs-2">Dashboards</a></li>'        HTML<-1> = '<li><a href="#tabs-3">File Items</a></li>'        HTML<-1> = '<li><a href="#tabs-4">Web Files</a></li>'        HTML<-1> = '<li><a href="#tabs-5">Settings</a></li></ul>'        HTML<-1> = '<div id="tabs-1" class="tab_content">'*        HTML<-1> = '<table width="100%">'        HTML<-1> = '<tr><th>Selected</th><th>Widget</th><th>Type</th><th>Subroutine</th><th>Overwrite</th></tr>'        WIDGET.CNT = DCOUNT(WIDGET.LIST<1>,VM)        FOR W.POS = 1 TO WIDGET.CNT            IF WIDGET.LIST<7,W.POS> = 1 THEN CLASS = 'error' ELSE CLASS = 'p'            LOCATE WIDGET.LIST<1,W.POS> IN PKG$WIDGETS<1> SETTING POS THEN                CHECKED = 'checked'            END ELSE CHECKED = ''            HTML<-1> = '<tr class="':CLASS:'"><td><input type="checkbox" name="widget_':WIDGET.LIST<1,W.POS>:'" value="checked" ':CHECKED:'></td>'            HTML := '<td>':WIDGET.LIST<1,W.POS>:'</td><td>':WIDGET.LIST<4,W.POS>:'</td><td>':WIDGET.LIST<3,W.POS>:'</td>'            IF PKG$WIDGETS.OVR<1,POS> = 1 THEN                CHECKED = 'checked'            END ELSE CHECKED = ''            HTML := '<td><input type="checkbox" name="widget_ovr_':WIDGET.LIST<1,W.POS>:'" value="checked" ':CHECKED:'></td></tr>'        NEXT W.POS        HTML<-1> = '</table>'*        EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNK        HTML<-1> = '</div><!--#tabs-1-->'        HTML<-1> = '<div id="tabs-2" class="tab_content"> '        HTML<-1> = '<table width="100%">'        HTML<-1> = '<tr><th>Selected</th><th>Dashboard ID</th><th>Description</th><th>Include Widgets</th><th>Overwrite</th></tr>'*        DB.POS = 1        LOOP            READNEXT ID ELSE EXIT            MATREAD DB.ITEM FROM F.MVDB.DEFS, ID ELSE MAT DB.ITEM = ''            HTML<-1> = '<tr>'            LOCATE ID IN PKG$DASHBOARDS<1> SETTING POS THEN                CHECKED = 'checked'            END ELSE CHECKED = ''            HTML<-1> = '<td><input type="checkbox" name="dashboard_':ID:'" value="checked" ':CHECKED:'></td>'            HTML<-1> = '<td>':ID:'</td>'            HTML<-1> = '<td>':DB.DESC:'</td>'            ADD.CHECKED = ''; OVR.CHECKED = ''            IF CHECKED # '' THEN                IF PKG$DASHBOARDS.ADD<1,POS> = 1 THEN                    ADD.CHECKED = 'checked'                END                IF PKG$DASHBOARDS.OVR<1,POS> = 1 THEN                    OVR.CHECKED = 'checked'                END            END*HTML<-1> = '<td><input type="checkbox" name="db_add_':ID:'" value="checked" ':ADD.CHECKED:'></td>'            HTML<-1> = '<td><input type="button" value="Add Widgets to Package"></td>'            HTML<-1> = '<td><input type="checkbox" name="db_ovr_':ID:'" value="checked" ':OVR.CHECKED:'></td>'            HTML<-1> = '</tr>'            DB.POS += 1        REPEAT        HTML<-1> = '</table>'*        HTML<-1> = '</div><!--#tabs-2-->'        HTML<-1> = '<div id="tabs-3" class="tab_content">'        HTML<-1> = '<table width="100%">'        HTML<-1> = '<tr><td colspan="5"><a href="/dbc/MVPKG.MAIN?action=addfile" class="add-file">Add a File</a></td></tr>'        HTML<-1> = '<tr><th>File Name</th><th>Items/List</th><th>Size</th><th>Overwrite</th><th>Action</th></tr>'        FILE.CNT = DCOUNT(PKG$FILES<1>,VM)        FOR ON.FILE = 1 TO FILE.CNT            FILE.ERR = 0; ITEM.ERR = 0            OPEN PKG$FILES.DICT<1,ON.FILE>,PKG$FILES<1,ON.FILE> TO PKG.FILEVAR ELSE FILE.ERR = 1            HTML<-1> = '<tr><td '            IF FILE.ERR THEN HTML := 'class="error"'            HTML := '>':PKG$FILES.DICT<1,ON.FILE>:' ':PKG$FILES<1,ON.FILE>:'</td>'            IF PKG$LIST<1,ON.FILE> # '' THEN                OPEN PKG$LIST.FILE<1,ON.FILE> TO LISTFILE THEN                    READV TST FROM LISTFILE, PKG$LIST<1,ON.FILE>, 1 ELSE                        ITEM.ERR = 1                    END                END ELSE ITEM.ERR = 1                HTML<-1> = '<td '                IF ITEM.ERR THEN HTML := 'class="error"'                HTML := '>List: '                IF PKG$LIST.FILE<1,ON.FILE> # '' THEN                    HTML := PKG$LIST.FILE:', '                END                HTML := PKG$LIST<1,ON.FILE>:'</td>'            END ELSE                IF NOT(FILE.ERR = 1) THEN                    IF PKG$ITEMS<1,ON.FILE> # '*' THEN                        ITEM.CNT = DCOUNT(PKG$ITEMS<1,ON.FILE>,SVM)                        FOR ON.ITEM = 1 TO ITEM.CNT                            READV TST FROM PKG.FILEVAR, PKG$ITEMS<1,ON.FILE,ON.ITEM>, 1 ELSE                                ITEM.ERR = 1                            END                        NEXT ON.ITEM                    END                END ELSE ITEM.ERR = 1                SHOW.ITEMS = PKG$ITEMS<1,ON.FILE>                CONVERT SVM TO ',' IN SHOW.ITEMS                IF LEN(SHOW.ITEMS) > 20 THEN                    SHOW.ITEMS = SHOW.ITEMS[1,20]:'...'                END                HTML<-1> = '<td '                IF ITEM.ERR THEN HTML := 'class="error"'                HTML := '>':SHOW.ITEMS:'</td>'            END            SHOW.SIZE = PKG$FILES.SIZE<1,ON.FILE>            IF SHOW.SIZE # '' THEN                BEGIN CASE                CASE SHOW.SIZE >= PWR(10,9)                    SHOW.SIZE = OCONV(SHOW.SIZE,"MD29"):' GB'                CASE SHOW.SIZE >= PWR(10,6)                    SHOW.SIZE = OCONV(SHOW.SIZE,"MD26"):' MB'                CASE SHOW.SIZE >= PWR(10,3)                    SHOW.SIZE = OCONV(SHOW.SIZE,"MD23"):' kB'                CASE 1                    SHOW.SIZE := ' bytes'                END CASE            END            HTML<-1> = '<td>':SHOW.SIZE:'</td>'            IF PKG$FILES.OVR<1,ON.FILE> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''            HTML<-1> = '<td><input type="checkbox" name="files_ovr_':ON.FILE:'" ':CHECKED:'></td>'            HTML<-1> = \<td><a href="javascript:editFile('\:PKG$FILES.DICT<1,ON.FILE>:',':PKG$FILES<1,ON.FILE>:',':PKG$LIST.FILE<1,ON.FILE>:',':PKG$LIST<1,ON.FILE>:',':PKG$ITEMS<1,ON.FILE>:\');"><img title="Edit" class="icon" src="/db/icons/pencil.png"></a>\            HTML<-1> = \<a href="javascript:deleteFile('\:ON.FILE:\')"><img title="Delete" class="icon" src="/db/icons/delete.png"></a>\            HTML<-1> = '</td></tr>'        NEXT ON.FILE        HTML<-1> = '<tr><td colspan="5"><a href="/dbc/MVPKG.MAIN?action=addfile" class="add-file">Add a File</a></td></tr></table>'*        HTML<-1> = '</div><!--#tabs-3-->'        HTML<-1> = '<div id="tabs-4" class="tab_content">'        HTML<-1> = '<div id="accordion">'        HTML<-1> = '<h3><a href="#">Images</a></h3><div>'        IMAGE.CNT = DCOUNT(PKG$WEB.IMAGE<1>,VM)        HTML<-1> = '<textarea rows="8" cols="40" name="web_images">'        FOR ON.IMAGE = 1 TO IMAGE.CNT            IF PKG$WEB.IMAGE.OVR<1,ON.IMAGE> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''*HTML<-1> = '<li><input type="checkbox" name="image_ovr_':ON.IMAGE:'" value="1" ':CHECKED:'><input type="text" name="image_':ON.IMAGE:'" value="':PKG$WEB.IMAGE<1,ON.IMAGE>:'"></li>'            HTML<-1> = PKG$WEB.IMAGE<1,ON.IMAGE>        NEXT ON.IMAGE        HTML<-1> = '</textarea></div>'        HTML<-1> = '<h3><a href="#">CSS</a></h3><div>'        CSS.CNT = DCOUNT(PKG$WEB.CSS<1>,VM)        HTML<-1> = '<textarea rows="8" cols="40" name="web_css">'        FOR ON.CSS = 1 TO CSS.CNT            IF PKG$WEB.CSS.OVR<1,ON.CSS> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''*HTML<-1> = '<li><input type="checkbox" name="css_ovr_':ON.CSS:'" value="checked" ':CHECKED:'><input type="text" name="css_':ON.CSS:'" value="':PKG$WEB.CSS<1,ON.CSS>:'"></li>'            HTML<-1> = PKG$WEB.CSS<1,ON.CSS>        NEXT ON.CSS        HTML<-1> = '</textarea></div>'        HTML<-1> = '<h3><a href="#">Javascript</a></h3><div>'        JS.CNT = DCOUNT(PKG$WEB.JS<1>,VM)        HTML<-1> = '<textarea rows="8" cols="40" name="web_js">'        FOR ON.JS = 1 TO JS.CNT            IF PKG$WEB.JS.OVR<1,ON.JS> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''*HTML<-1> = '<li><input type="checkbox" name="js_ovr_':ON.JS:'" value="checked" ':CHECKED:'><input type="text" name="js_':ON.JS:'" value="':PKG$WEB.JS<1,ON.JS>:'"></li>'            HTML<-1> = PKG$WEB.JS<1,ON.JS>        NEXT ON.JS        HTML<-1> = '</textarea></div>'        HTML<-1> = '<h3><a href="#">Icons</a></h3><div>'        ICON.CNT = DCOUNT(PKG$WEB.ICON<1>,VM)        HTML<-1> = '<textarea rows="8" cols="40" name="web_icons">'        FOR ON.ICON = 1 TO ICON.CNT            IF PKG$WEB.ICON.OVR<1,ON.ICON> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''*HTML<-1> = '<li><input type="checkbox" name="icon_ovr_':ON.ICON:'" value="checked" ':CHECKED:'><input type="text" name="icon_':ON.ICON:'" value="':PKG$WEB.ICON<1,ON.ICON>:'"></li>'            HTML<-1> = PKG$WEB.ICON<1,ON.ICON>        NEXT ON.ICON        HTML<-1> = '</textarea></div>'        HTML<-1> = '</div>'*        HTML<-1> = '</div><!--#tabs-4-->'        HTML<-1> = '<div id="tabs-5" class="tab_content">'*HTML<-1> = '<b>Settings</b>'        HTML<-1> = '<ul><li>Pre-Install Commands</li>'        CALL SWAP(PKG$PRE.CMD,VM,CHAR(13):CHAR(10))        HTML<-1> = '<li><textarea rows="5" cols="50" name="pkg_pre_cmd">':PKG$PRE.CMD:'</textarea></li>'        HTML<-1> = '<li>Post-Install Commands</li>'        CALL SWAP(PKG$POST.CMD,VM,CHAR(13):CHAR(10))        HTML<-1> = '<li><textarea rows="5" cols="50" name="pkg_post_cmd">':PKG$POST.CMD:'</textarea></li>'        IF PKG$COMPILE.OPT = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''        HTML<-1> = '<li><input type="checkbox" name="compile_opt" value="checked" ':CHECKED:'> Compile widget subroutines</li>'        IF PKG$FLASH.OPT = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''        HTML<-1> = '<li><input type="checkbox" name="flash_opt" value="checked" ':CHECKED:'> Flash compile widget subroutines</li>'        IF PKG$ACCESS.OPT = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''        HTML<-1> = '<li><input type="checkbox" name="access_opt" value="checked" ':CHECKED:'> Include dashboard and widget user access settings</li>'        HTML<-1> = '</ul></div></div></form>'        RETURN000EAFRSS.MAIN0c2* RSS.MAIN** Program: RSS.MAIN* Author: Luke Bucklin* Date: 2/23/2009** Purpose: Create an RSS feed using user-defined subroutine calls** Modified by Peter Schellenbach of Zumasys 07-17-15 for UV compatiblity:*   When testing for cataloged program, check if line 1 is 'V', not 'VR'.*INCLUDE WBPD WWW.INCLUDEINCLUDE RSS.BP RSS.DATA.INC*CALL SET.CONTENT.TYPE("application/xml")*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE STOP 201, 'RSS.FEEDS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'ENDOPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'*FEED.REC = ""LOCATE "feed" IN CGI$VARS SETTING POS THEN  feed = CGI$VALS<POS>  READ FEED.REC FROM F.RSS.FEEDS, feed ELSE FEED.REC = ""ENDIF FEED.REC = "" THEN  feed = "FEEDS"  READ FEED.REC FROM F.RSS.FEEDS, feed ELSE    CALL SET.CONTENT.TYPE("application/xml")    CALL WEB.SEND('<H1>No feeds configured</H1>')    STOP  ENDENDSEL.SUB = FEED.REC<4>ITEM.SUB = FEED.REC<5>MAT RSS.DATA = ""RSS$FEED.REC = FEED.RECREAD CATPTR FROM F.MD, SEL.SUB ELSE CATPTR = ""*PJS 07-17-15*IF CATPTR<1> = "VR" THENIF CATPTR<1> = "V" THEN ; *PJS 07-17-15*  CALL @SEL.SUB(CGI$VARS,CGI$VALS,feed,F.FEED.FILE,MAT RSS.DATA)END ELSE  RSS$FEED.REC<1> = "Feed error: ":SEL.SUB:" not cataloged."ENDFEED.REC = RSS$FEED.RECCALL RSS.XML.ENCODE(FEED.REC,1)FEED.TITLE = FEED.REC<1>FEED.LINK = "http://":CGI$SERVER.NAME:CGI$PATH:'/RSS.MAIN?feed=':feedIF FEED.REC<2> # "" THEN FEED.LINK := "&":FEED.REC<2>FEED.DESC = FEED.REC<3>XML = ""XML<-1> = '<?xml version="1.0" ?>'XML<-1> = '<rss version="2.0">'XML<-1> = '<channel>'XML<-1> = ' <title>':FEED.TITLE:'</title>'XML<-1> = ' <link>':FEED.LINK:'</link>'SHOW.DESC = FEED.DESCIF SHOW.DESC = "" THEN SHOW.DESC = FEED.TITLEXML<-1> = ' <description>':SHOW.DESC:'</description>'XML<-1> = ' <generator>Sierra Bravo Pick RSS</generator>'XDATE = DATE()XTIME = TIME()GOSUB MAKE.DATE.TIMEXML<-1> = ' <lastBuildDate>':DATE.TIME:'</lastBuildDate>'*IF SYSTEM(11) THEN  SELECT TO ID.LISTEND ELSE ID.LIST = ""SUB.ERR = 0LOOP  READNEXT RID FROM ID.LIST ELSE EXIT  READ FEED.REC FROM F.FEED.FILE, RID ELSE EXIT  READ CATPTR FROM F.MD, ITEM.SUB ELSE CATPTR = ""*PJS 07-17-15*  IF CATPTR<1> = "VR" THEN  IF CATPTR<1> = "V" THEN ; *PJS 07-17-15*    CALL @ITEM.SUB(CGI$VARS,CGI$VALS,F.FEED.FILE,RID,FEED.REC,MAT RSS.DATA)  END ELSE    SUB.ERR = 1    MAT RSS.DATA = ""    RSS$TITLE = "Subroutine ":ITEM.SUB:" not cataloged."    RSS$DESCRIPTION = "Feed Error"    RSS$DATE = ICONV("1/1/2000",'D')    RSS$TIME = ICONV("12:00:00",'MT')  END  FOR XX = 1 TO 5    CALL RSS.XML.ENCODE(RSS.DATA(XX),1)  NEXT XX  XML<-1> = '<item>'  XML<-1> = ' <title>':RSS$TITLE:'</title>'  IF INDEX(RSS$LINK,'//',1) THEN    LINK = RSS$LINK  END ELSE IF RSS$LINK # "" THEN    LINK = "http://":CGI$SERVER.NAME:CGI$PATH:'/':RSS$LINK  END ELSE    LINK = ""  END  XML<-1> = ' <link>':LINK:'</link>'  XML<-1> = ' <author>':RSS$AUTHOR:'</author>'  XML<-1> = ' <description><![CDATA['  XML<-1> = RSS$DESCRIPTION  XML<-1> =']]></description>'  XDATE = RSS$DATE  XTIME = RSS$TIME  GOSUB MAKE.DATE.TIME  XML<-1> = '<pubDate>':DATE.TIME:'</pubDate>'  XML<-1> = '</item>'  CALL WEB.SEND(XML)  XML = ''REPEATXML<-1> = '</channel>'XML<-1> = '</rss>'CALL WEB.SEND(XML)STOP*MAKE.DATE.TIME: **READV GMT.OFFSET FROM F.MVDB.CONTROL, 'MVDB.SETTINGS', 6 ELSE GMT.OFFSET = 0IF XTIME = "" THEN XTIME = TIME()IF XDATE = "" THEN XDATE = DATE()*XTIME += ICONV("5:00",'MT')XTIME += 3600 * (GMT.OFFSET * (-1))IF XTIME > 86400 THEN  XTIME -= 86400  XDATE += 1ENDDATE.TIME = OCONV(XDATE,'DWA')[1,3]:', ':OCONV(XDATE,'DD'):' ':OCONV(XDATE,'DMA')[1,3]:' ':OCONV(XDATE,'DY'):' ':OCONV(XTIME,'MTS')RETURN000DDDMVDB.PURGE.SESSIONS0c2* @(#) MVDB.PURGE.SESSIONS Ported to jBASE 17:00:17  08 JUL 2015*  The following variable names were converted*   DATE,TIME* ** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Purge old session data** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed TCLREAD to use SENTENCE() - its more portable* 11-30-15 TOM PARKER - PURGE BASED ON PASSED USERID* 01-25-16 TOM PARKER - DONT AUTO PURGE EMAILED AND WEBSERVICE LOGINS FOR 10 MINUTES**#MAKE# RL $OPTIONS D3    OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, 'WEB.SESSION'    OPEN '','MVDB.UDATA' TO F.MVDB.UDATA ELSE STOP 201, 'MVDB.UDATA'    OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'*    READ SETTINGS.REC FROM F.MVDB.CONTROL, 'MVDB.SETTINGS' ELSE SETTINGS.REC = ""    PURGE.AGE = SETTINGS.REC<5> * 3600  ;* Specified in hours    IF PURGE.AGE = 0 THEN PURGE.AGE = 8 * 3600**PJS 06-12-15*TCLREAD TCL.LINE    TCL.LINE = SENTENCE()     ;*PJS 06-12-15*    PS.LIST = OCONV( TCL.LINE, 'G1 999' )    PS.LIST = TRIM( PS.LIST )    CONVERT " " TO @AM IN PS.LIST*11-30-15*    IF PS.LIST # "" THEN*11-30-15*        XLINE = "SELECT WEB.SESSION "*11-30-15*        FOR N = 1 TO DCOUNT(PS.LIST,@AM)*11-30-15*            XLINE := "'":PS.LIST<N>:"' "*11-30-15*        NEXT N*11-30-15*        EXECUTE XLINE CAPTURING JUNK*11-30-15*        FORCE.PURGE = 1*11-30-15*    END ELSE*11-30-15*        EXECUTE 'SSELECT WEB.SESSION' CAPTURING JUNK*11-30-15*        FORCE.PURGE = 0*11-30-15*    END    EXECUTE 'SSELECT WEB.SESSION' CAPTURING JUNK; *11-30-15*    PURGE.LIST = ''    LOOP        READNEXT SESS.ID ELSE EXIT        READ SESS.REC FROM F.WEB.SESSION,SESS.ID ELSE SESS.REC = ''        PURGE.THIS = 0        PURGE.WEBSERVICE=0;  *01-25-16**11-30-15*        IF FORCE.PURGE THEN*11-30-15*            PURGE.THIS = 1*11-30-15*        END ELSE        LOCATE SESS.ID IN PS.LIST SETTING PURGE.THIS ELSE           PURGE.THIS=0           LOCATE 'userid' IN SESS.REC<1> SETTING USERID.POS ELSE USERID.POS=0           IF USERID.POS THEN              USERID=SESS.REC<2,USERID.POS>*01-25-16*              LOCATE USERID IN PS.LIST SETTING PURGE.THIS ELSE PURGE.THIS=0              LOCATE USERID IN PS.LIST SETTING PURGE.WEBSERVICE ELSE PURGE.WEBSERVICE=0; *01-25-16            END         END        IF NOT(PURGE.THIS) THEN            LOCATE "LastSessionAccess" IN SESS.REC<1> SETTING VPOS THEN                Date = FIELD(SESS.REC<2,VPOS>,'*',1)                Time = FIELD(SESS.REC<2,VPOS>,'*',2)*                AGE = (DATE()-Date) * 86400                AGE += (TIME()-Time)**01-25-16*                IF AGE > PURGE.AGE THEN                IF PURGE.WEBSERVICE THEN THIS.PURGE.AGE=600 ELSE THIS.PURGE.AGE=PURGE.AGE; * 01-25-16                IF AGE > THIS.PURGE.AGE THEN; * 01-25-16                    PURGE.THIS = 1                END            END ELSE PURGE.THIS = 1        END        IF PURGE.THIS THEN            DELETE F.WEB.SESSION, SESS.ID            PURGE.LIST<-1> = SESS.ID        END    REPEAT*    EXECUTE 'SELECT MVDB.UDATA' CAPTURING JUNK    LOOP        READNEXT ID ELSE EXIT        SID = FIELD( ID, '$', 1 )        LOCATE SID IN PURGE.LIST SETTING POS THEN            DELETE F.MVDB.UDATA, ID        END ELSE            READ TST FROM F.WEB.SESSION, SID ELSE                DELETE F.MVDB.UDATA, ID            END        END    REPEAT    STOP002BCAAPP.INSTALLER0c2** Copyright (C) 2009 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo Corporation* Date: 07/15/2009* Description: Application installer** Modified By: Dave Bucklin, Nerdery Interactive Labs* Date: 02/04/2011* Description: Add overwrite flag, clashes handling specific to MVDashboard** Modified By: Mike Street, Zumasys* Date: 07/17/2015* Description: Adapt for UniVerse**    BUFFER = ""*    INSTALL.LOG.ON = 0    INSTALL.LOG.ID = "INSTALL*":DATE():"*":TIME()    INSTALL.LOG = ""    PROCESS.STATUS = 0    OVR.FLAG = 0    PROMPT ""    PRINT "File path: ":        INPUT PACKAGE.FILE    IF PACKAGE.FILE = "VERSION" THEN        PRINT        PRINT "Installer Version"        PRINT "1.0"        STOP    END*    returnCode = ""*    OPENSEQ PACKAGE.FILE TO HANDLE ELSE        PRINT "Unable to open sequential file"        STOP    END*UV   HANDLE = %OPEN(PACKAGE.FILE,O$RDONLY+O$BINARY)*UV   IF NOT(HANDLE) THEN*UV       PRINT "Unable to open file." ; STOP*UV   END*    L = 0    PACKET = ""    LOOP    *UV     L = %READ(HANDLE,BUFFER,10000)*UV        READBLK BUFFER FROM HANDLE, 10000 ELSE   IF PACKET = '' THEN      CRT 'CANT READ BUFFER'      STOP    END   BUFFER='' END        L=LEN(BUFFER)*END UV*    WHILE L > 0 DO        PACKET := BUFFER    REPEAT    IF PACKET = "" THEN        PRINT "No package."        STOP    END    INSTALL.ID = TIMEDATE()    KEEP.SOURCE = "1"*    PRINT    PRINT "Installing..."*    OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE        CMD = "CREATE-FILE MV.PACKED.FILE 1 31"        GOSUB EXEC.CMD        OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE            ERRFILE = "MV.PACKED.FILE"            GOSUB OPEN.ERR            STOP        END    END    WRITE PACKET ON F.PACKED.FILE, "PACKAGE"    OPEN '','VOC' TO F.MD ELSE        ERRFILE = "VOC"        GOSUB OPEN.ERR        STOP    END    OPEN "MV.INSTALL" TO F.INSTALL ELSE        CMD = "CREATE-FILE MV.INSTALL 1 11"        GOSUB EXEC.CMD        OPEN "MV.INSTALL" TO F.INSTALL ELSE            ERRFILE = "MV.INSTALL"            GOSUB OPEN.ERR            STOP        END    END    OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE        CMD = "CREATE-FILE MV.INSTALL.CF 1 11"        GOSUB EXEC.CMD        OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE            ERRFILE = "MV.INSTALL.CF"            GOSUB OPEN.ERR            STOP        END    END    OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE        CMD = "CREATE-FILE MVAPPS.INSTALLED 3 31"        GOSUB EXEC.CMD        OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE            ERRFILE = "MVAPPS.INSTALLED"            GOSUB OPEN.ERR            STOP        END    END    OPEN "DICT","MVDB.CLASHES" TO FD.MVDB.CLASHES ELSE        CMD = "CREATE-FILE DICT MVDB.CLASHES 3"        GOSUB EXEC.CMD    END    INSTALL.LOG.ON = 1*    CLEARFILE F.INSTALL    DELETE F.INSTALL.CF, "MVAPPS-PRE-SCRIPT"      ;* Get rid of this just in case one is left over    DELETE F.INSTALL.CF, "MVAPPS-POST-SCRIPT"    DELETE F.INSTALL.CF, "PACKAGE.INFO"    TARGET = F.INSTALL    TARGET.NAME = "MV.INSTALL"    GOSUB UNPACK* All individual file packages are now in INSTALL* Unpack the MD scripts    READ PACKET FROM F.INSTALL, "MV.INSTALL.CF" THEN        TARGET = F.INSTALL.CF        TARGET.NAME = "MV.INSTALL.CF"        GOSUB UNPACK        DELETE F.INSTALL, "MV.INSTALL.CF"    END** Execute scripts that are required prior to compilation*    READ CMD FROM F.INSTALL.CF, "MVAPPS-PRE-SCRIPT" THEN        LOG.LINE = TIMEDATE():": Processing PRE-INSTALL commands..."        INSTALL.LOG<-1> = LOG.LINE* Execute commands that need to be run before the install process begins        GOSUB EXEC.CMD        LOG.LINE = TIMEDATE():": Completed PRE-INSTALL commands."        INSTALL.LOG<-1> = LOG.LINE    END    READ PACKAGE.INFO FROM F.INSTALL.CF, "PACKAGE.INFO" ELSE PACKAGE.INFO = ""    PACKAGE.ID = PACKAGE.INFO<6>    PACKAGE.INFO<4> = DATE()    PACKAGE.INFO<5> = TIME()*    SELECT F.INSTALL    LOOP        READNEXT PKG.ID ELSE EXIT        IF PKG.ID # "" THEN            READ PACKET FROM F.INSTALL, PKG.ID THEN                TARGET.FILE = FIELD(PKG.ID," ",1)                IF TARGET.FILE[1,7] = "BINARY:" THEN TARGET.FILE=TARGET.FILE[8,999]        ;*UV                DICT.MOD = FIELD( PKG.ID," ",2)                DATA.MOD = FIELD( PKG.ID," ",3)                DICT = ""                IF FIELD( PKG.ID,'_',1 ) = "DICT" THEN                    TARGET.FILE = FIELD( PKG.ID, '_', 2 )                    IF TARGET.FILE[1,7] = "BINARY:" THEN TARGET.FILE=TARGET.FILE[8,999]    ;*UV                    DICT = "DICT"                END                OPEN DICT,TARGET.FILE TO F.TARGET ELSE                    IF NOT(INDEX(TARGET.FILE,':',1)) THEN                        IF DICT.MOD = "" THEN DICT.MOD = 3                        IF DATA.MOD = "" THEN DATA.MOD = 31                        CMD = "CREATE-FILE ":TARGET.FILE:" ":DICT.MOD:" ":DATA.MOD                        GOSUB EXEC.CMD                    END                    OPEN DICT,TARGET.FILE TO F.TARGET ELSE                        PRINT "Unable to create file ":TARGET.FILE                        GOSUB CLEANUP                        STOP                    END                END                TARGET = F.TARGET                TARGET.NAME = TRIM(DICT:" ":TARGET.FILE)                GOSUB UNPACK            END        END    REPEAT** Execute script required post compilation*    READ CMD FROM F.INSTALL.CF, "MVAPPS-POST-SCRIPT" THEN        LOG.LINE = TIMEDATE():": Processing POST-INSTALL commands..."        INSTALL.LOG<-1> = LOG.LINE* Use compile options if they are present.        OPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL THEN            READ COMPILE.SETUP FROM F.MVDB.CONTROL, 'COMPILE.SETUP' THEN                COMPILE.VERB = FIELD(COMPILE.SETUP<1>,' ',1)                IF COMPILE.VERB # '' THEN                    OPTS = FIELD(COMPILE.SETUP<1>,'(',2)                    IF OPTS # '' THEN OPTS = "(":OPTS                    CMD.CNT = DCOUNT( CMD, @AM )                    FOR CMD.XX = 1 TO CMD.CNT                        IF FIELD(CMD<CMD.XX>,' ',1) = 'BASIC' OR FIELD(CMD<CMD.XX>,' ',1) = 'COMPILE' THEN*make sure we use the right verb and options from the compile.setup                            CMD<CMD.XX> = COMPILE.VERB:' ':CMD<CMD.XX>[INDEX(CMD<CMD.XX>,' ',1)+1,999]:' ':OPTS                        END                    NEXT CMD.XX                END            END        END* Execute commands that need to be run at the end of the install process        GOSUB EXEC.CMD        LOG.LINE = TIMEDATE():": Completed POST-INSTALL commands."        INSTALL.LOG<-1> = LOG.LINE    END**UV*    IF NOT(KEEP.SOURCE) THEN*UV*        FOR X = 1 TO DCOUNT( SOURCE.FILES, @AM )*UV*            CMD = "CLEAR-FILE DATA ":SOURCE.FILES<X>*UV*            GOSUB EXEC.CMD*UV*        NEXT X*UV*    END    READ INSTALL.LIST FROM F.INSTALL.CF, "LAST.INSTALL" ELSE INSTALL.LIST = ""    INSTALL.LIST = INSERT( INSTALL.LIST, 1, 0, 0, INSTALL.ID )    WRITE INSTALL.LIST ON F.INSTALL.CF, "LAST.INSTALL"    GOSUB CLEANUP    INSTALL.LOG<-1> = TIMEDATE():": Install complete."    WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID    WRITE PACKAGE.INFO ON F.MVAPPS.INSTALLED, PACKAGE.ID    PROCESS.STATUS = 1    GOSUB SEND.DATA    STOP*********UNPACK:   **********    PRINT "Unpacking ":TARGET.NAME:"... ":*    BYTES = 0    CNT = 0    LOOP        PLENGTH = OCONV( PACKET[1,6], 'MCXD' )        REC = PACKET[7,PLENGTH]        PACKET = PACKET[PLENGTH+7,9999999]        ID = REC<1>        REC = DELETE( REC, 1, 0, 0 )        TYP = REC[1,2]        OVR.FLAG = REC[3,1]        REC = REC[4,9999999]        IF TYP = "0x" THEN            REC = OCONV( REC, 'MY' )            END ELSE IF TYP # "0c" THEN                REC = TYP:REC            END*            CNT += 1            BYTES += LEN(REC)            IF OVR.FLAG THEN                IF DICT = "" THEN*If we're not installing DICT items, compare for CLASHES                    READ CLASH FROM TARGET, ID THEN                        BEGIN CASE*Preserve dashboard user passwords                        CASE TARGET.FILE = "MVDB.USERS"                            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>*Preserve dashboard access profile                        CASE TARGET.FILE = "MVDB.DEFS"                            IF CLASH<5> # REC<5> THEN REC<5> = CLASH<5>*Preserve widget access profile                        CASE TARGET.FILE = "MVDB.WIDGETS"                            IF CLASH<2> # REC<2> THEN REC<2> = CLASH<2>*Preserve widget compile option                        CASE TARGET.FILE = "MVDB.CONTROL" AND ID = "COMPILE.SETUP"                            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>                        END CASE                        IF CLASH # '' AND REC # CLASH THEN                            CLASH.NAME = TARGET.NAME                            CONVERT " " TO "_" IN CLASH.NAME                            OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE                                CMD = "CREATE-FILE DATA MVDB.CLASHES,":CLASH.NAME:" 7"                                GOSUB EXEC.CMD                                OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE                                    PRINT "Unable to create file MVDB.CLASHES,":CLASH.NAME                                    GOSUB CLEANUP                                    STOP                                END                            END                            WRITE CLASH ON F.CLASHES, ID                            CLOSE F.CLASHES                        END                    END                END                WRITE REC ON TARGET, ID            END ELSE                READ TST FROM TARGET, ID ELSE                    WRITE REC ON TARGET, ID                END            END            IF NOT(MOD(CNT,500)) THEN PRINT "*":        UNTIL PACKET = "" DO REPEAT        IF CNT # 1 THEN PLURAL = "s" ELSE PLURAL = ""        PRINT CNT:" record":PLURAL:"."        LOG.LINE = TIMEDATE():": UNPACKED ":CNT:" RECORDS TO ":TARGET.NAME        INSTALL.LOG<-1> = LOG.LINE        RETURN**********CLEANUP:  ***********        CLEARFILE F.INSTALL        CLEARFILE F.PACKED.FILE        RETURN*EXEC.CMD: **        CMD.CNT = DCOUNT( CMD, @AM )        FOR CMD.XX = 1 TO CMD.CNT            THIS.CMD = CMD<CMD.XX>            LOG.LINE = TIMEDATE():": EXEC: ":THIS.CMD            INSTALL.LOG<-1> = LOG.LINE            EXECUTE THIS.CMD CAPTURING JUNK            IF INSTALL.LOG.ON THEN                WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID            END        NEXT CMD.XX        RETURN*OPEN.ERR: **        LOG.LINE = TIMEDATE():": FILE OPEN ERROR: ":ERRFILE        INSTALL.LOG<-1> = LOG.LINE        PRINT LOG.LINE        GOSUB SEND.DATA        RETURN*SEND.DATA:**        PRINT        IF PROCESS.STATUS = 1 THEN INSTALL.STATUS = "Success" ELSE INSTALL.STATUS = "Failed"        PRINT "Install process finished. Status: ":INSTALL.STATUS        RETURN    END0019BBWEB.SEND0c2SUBROUTINE WEB.SEND(FORM)********************** (C) Copyright 2003 Sierra Bravo Corporation, All rights reserved.** Program: WEB.SEND* Library: WBP*  Author: Luke J. Bucklin*    Date: 2/29/00** Purpose: Send the web page.** Modified By  : Mike Schmidt, Sierra Bravo* Date Revised : 11/06/2003* Modification : The program was modified to account for the following:*                1) Header Management: This program will check to see*                   if the content type has been written to the browser*                   before ever printing anything to standard out.  If*                   the headers have not been sent, the program will print*                   the headers using the SESSION$CONTENT.TYPE,*                   SESSION$HEADERS, and SESSION$COOKIES session variables.*                   The program will then set the SESSION$CONTENT.SENT*                   variable.*                   WARNING: This program assumes that the global SESSION*                   variables were setup prior to using this subroutine.*                   WARNING: The SESSION$OUTBUF.SIZE should not be relied*                   upon to prevent the buffer from exceeding the set limit.*                   This program simply flushes the buffer if it exceeds*                   the set size limit.**                2) Buffer Management: Instead of always printing every*                   thing to standard out, by default the program will*                   write everything passed into into the SESSION$OUTBUF*                   variable.  This program will then flush the buffer*                   under certain situations.  The first is if the buffer*                   size reaches the limit set in SESSION$OUTBUF.SIZE. If*                   this happens the prgram will flush the buffer then*                   reinitialize it.  The second is if the SESSION$OUTBUF.FLAG*                   is set to FALSE, then this program will always flush*                   the buffer.**                3) The program will display debug information if the global*                   variable SESSION$GLOBAL.DEBUG flag is >= 3.** Modified by Peter Schellenbach of Zumasys 12-15-15 for new PDF generation feature*   do not append form & @AM to output buffer if form is null*   do not add DOCTYPE to output unless content type is html*   do not include debug output if content type is not html or xml** 09-23-16 Tom Parker - Eliminate GO_BACK button support and replace with*          logic to handle standard browser back button (need to prevent browser*          from caching MVDB pages).** 04-21-17 Peter Schellenbach - send response status code before Content-type,*          if set (X-MVDB-STATUS private header).** 10-18-17 Peter Schellenbach - removed duplicate debug info section. Changed condition*          for sending debug info to SESSION$GLOBAL.DEBUG >= 3 instead of = 1.*          Eliminate extra AM appended to the form data.*********************** Add the incoming string to the buffer.INCLUDE WBPD WWW.INCLUDE*IF NOT(ASSIGNED(SESSION$CONTENT.SENT)) THEN  MAT WWW.INFO = ""  SESSION$CONTENT.SENT = 1END*SHOW.SESSION.VARS = 0IF SESSION$GLOBAL.DEBUG >= 3 THEN  OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SHOW.SESSION.VARS = 1END*IF FORM <> '' THEN  CALL SWAP(FORM,'<!-- CGI$PATH -->',CGI$PATH)  *PJS 09-21-2017*SESSION$OUTBUF := FORM:@AM  SESSION$OUTBUF := FORM ; *PJS 09-21-2017*END** If the buffer is greater then the max size or the buffer flag is false then flush.IF LEN(SESSION$OUTBUF) >= SESSION$OUTBUF.SIZE OR NOT(SESSION$OUTBUF.FLAG) THEN* Before flushing, check to see if the headers have been send.  IF NOT(SESSION$CONTENT.SENT) THEN    IF SESSION$STATUS.CODE > 0 THEN* 04-21-17 send the status code before headers      PRINT "X-MVDB-STATUS: ":SESSION$STATUS.CODE    END* The headers have not been sent so send them now.    IF SESSION$CONTENT.TYPE = "" THEN      CALL SET.CONTENT.TYPE("")    END* If there are any cookies that need to be set, do it now.    PRINT "Content-type: ":SESSION$CONTENT.TYPE* If there are any cookies that need to be set, do it now.    FOR I = 1 TO DCOUNT(SESSION$COOKIES,@AM)      COOKIE = SESSION$COOKIES<I>      IF INDEX(COOKIE, "; path=", 1) + INDEX(COOKIE, ";path=", 1) = 0 THEN COOKIE := "; path=/"      PRINT "Set-Cookie: ":COOKIE    NEXT I* If there are any additional headers that need to be set, do it now.* 9-23-16 *    PRINT 'Cache-Control: no-cache'    PRINT 'Expires: Mon, 26 Jul 1997 05:00:00 GMT'; * 9-26-13 *    PRINT 'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'; * 9-26-13 *    PRINT 'Pragma: no-cache'; * 9-26-13 *    FOR I = 1 TO DCOUNT(SESSION$HEADERS,@AM)      PRINT SESSION$HEADERS<I>    NEXT I* Now print the blank line that ends the headers.    PRINT    IF INDEX(SESSION$CONTENT.TYPE,'html',1) THEN      IF INDEX(SESSION$OUTBUF<1>,'<!DOCTYPE',1) = 0 THEN        PRINT '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'        PRINT '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'      END    END* Set the SESSION$CONTENT.SENT variable so next time we know not to send the headers.    SESSION$CONTENT.SENT = 1* From this point on, do not buffer.    IF SESSION$OUTBUF.FLAG THEN      CALL SET.BUFFER(0)    END  END  LINE.CNT = DCOUNT( SESSION$OUTBUF, @AM )  FOR LINE.J = 1 TO LINE.CNT    PRINT SESSION$OUTBUF<LINE.J>  NEXT LINE.J  IF SESSION$GLOBAL.DEBUG >= 3 THEN    IF INDEX(SESSION$CONTENT.TYPE,'xml',1) OR INDEX(SESSION$CONTENT.TYPE,'html',1) THEN* If the debug flag is set then dump all the session information to the browser.      PRINT '<!-- Debug Information generated by WEB.SEND.  This feature can be turned off by'      PRINT '     setting the SESSION$GLOBAL.DEBUG = "1" in the initalization program     -->'      PRINT '<!-- START DEBUG OUPUT '      PRINT '     GET AND POST VARS:'      FOR I = 1 TO DCOUNT(CGI$VARS,@AM)        PRINT '     ':CGI$VARS<I>:' = ':CGI$VALS<I>      NEXT I      PRINT      IF SHOW.SESSION.VARS THEN        PRINT '    SESSION VARIABLES:'        PRINT '    SESSION$ID = ':SESSION$ID        READ REC FROM F.WEB.SESSION, SESSION$ID THEN          PRINT '    SESSION DATE = ':OCONV(REC<3>,'D4/')          PRINT '    SESSION TIME = ':OCONV(REC<4>,'MTS,')          FOR I = 1 TO DCOUNT(REC<1>,@VM)            PRINT '    ':REC<1,I>:' = ':REC<2,I>          NEXT I        END      END        PRINT '    END DEBUG OUTPUT -->'        PRINT      END    END  SESSION$OUTBUF = ''  END  RETURNEND00009CWDB.VIEW0c2*CALL WDB.VARS(VARS,VALS)HEADING "Variable" "L#20":" ":"Value"FOR N = 1 TO DCOUNT( VARS, @AM )  PRINT VARS<N> "L#20":" ":VALS<N>NEXT NSTOP00172FSUB.PDF.FUNC0c2SUBROUTINE SUB.PDF.FUNC(ACTION, MAIN.TEMPLATE)** Copyright (c) 2016 Zumasys, Inc. All rights reserved.* Description: PDF utility functions*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*DIM PDF$SETTINGS(10)EQU PDF$ENABLED   TO PDF$SETTINGS(1)EQU PDF$COMMAND   TO PDF$SETTINGS(2)EQU PDF$DIRECTORY TO PDF$SETTINGS(3)EQU PDF$LIFETIME  TO PDF$SETTINGS(4)*IF SYSTEM(91) THEN isWindows = 1 ELSE isWindows = 0 ;*UV**OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'MATREAD PDF$SETTINGS FROM F.MVDB.CONTROL,'PDF.SETTINGS' ELSE MAT PDF$SETTINGS=''*OPEN '','WDB.DEBUG' TO F.WDB.DEBUG THEN LOGGING = 1 ELSE LOGGING = 0*BEGIN CASE  CASE ACTION = 'generate'    * HTML templates may have references to css, javascript, images, etc. so swap these to be file references    IF LOGGING THEN      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'SUB.PDF.FUNC generate')    END    IF isWindows THEN DIRSEP = '\' ELSE DIRSEP = '/'    LOCATE 'INSTALL_PATH' IN CGI$VARS SETTING POS THEN      DBROOT = CGI$VALS<POS>    END ELSE      IF isWindows THEN        DBROOT = 'C:\Program Files (x86)\Zumasys\MV Dashboard\bin\mvappsvr'      END ELSE        DBROOT = '/usr/local/mvappsvr/bin/mvappsvr'      END    END    IF isWindows THEN CONVERT '\' TO '/' IN DBROOT ;* HTML path uses forward slash    NDS = DCOUNT(DBROOT,'/')    POS = INDEX(DBROOT,'/',NDS-2)    IF POS = 0 THEN POS = LEN(DBROOT)    DBROOT = DBROOT[1,POS]:'docroot/db/'    *IF LOGGING THEN    *  SAVE.MAIN.TEMPLATE = MAIN.TEMPLATE    *END    *    * TODO: the SWAP() below handles any references to images, css & scripts    * that are found in the HTML to be rendered, but if there are references    * to images within css these are not handled. Need to figure out how to    * handle these.    *    CALL SWAP(MAIN.TEMPLATE,'/db/',DBROOT)    *    ** CLONED FROM WEB.SEND    CALL SWAP(MAIN.TEMPLATE,'<!-- CGI$PATH -->',CGI$PATH)    IF INDEX(MAIN.TEMPLATE<1>,'<!DOCTYPE',1) = 0 THEN          MAIN.TEMPLATE = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"':@AM:'"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">':MAIN.TEMPLATE    END    ** END CLONE FROM WEB.SEND    *    * Open the native content directory & get path to same    OPEN 'NATIVE.CONTENT' TO F.NATIVE.DIR ELSE      PRINT '500 ERROR: CANNOT OPEN NATIVE.CONTENT'      STOP ;* intentional stop    END    NATIVE.DIR = PDF$DIRECTORY    IF isWindows THEN CONVERT '/' TO '\' IN NATIVE.DIR ;*UV may have wrong separator!    IF NATIVE.DIR[LEN(NATIVE.DIR),1] NE DIRSEP THEN NATIVE.DIR = NATIVE.DIR : DIRSEP    *    * Generate unique ID for HTML & PDF files in NATIVE.CONTENT    CALL SUB.GET.NEXT.ID(UNIQUE.ID,F.MVDB.CONTROL)    HTM.ID=UNIQUE.ID:'.htm'    PDF.ID=UNIQUE.ID:'.pdf'    *    * Save HTML in native content directory    WRITE MAIN.TEMPLATE ON F.NATIVE.DIR,HTM.ID    *    * Build command line for PDF converter    INPFILE = NATIVE.DIR:HTM.ID    OUTFILE = NATIVE.DIR:PDF.ID    CMDLINE = PDF$COMMAND    IF CMDLINE = '' THEN      PRINT '500 ERROR: PDF CONVERT COMMAND MISSING'      STOP ;* intentional stop    END    CALL SWAP(CMDLINE,'[INPUT_FILE]',INPFILE)    CALL SWAP(CMDLINE,'[OUTPUT_FILE]',OUTFILE)    IF isWindows THEN      CMDLINE = 'DOS /c ':CMDLINE ;*UV/WIN* quotes around INPFILE & OUTFILE are OK on UV!    END ELSE      CMDLINE = 'SH -c "':CMDLINE:'"' ;*UV/LINUX* quotes around INPFILE & OUTFILE are OK on UV!    END    *    * Execute the PDF convert command    EXECUTE CMDLINE CAPTURING OUTPUT    *TODO: check for errors creating PDF file    IF LOGGING THEN      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'Command line: ':CMDLINE)      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'docroot/db: ':DBROOT)      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'Command output:':@AM:OUTPUT)      *CALL SWAP(SAVE.MAIN.TEMPLATE,'&','&amp;')      *CALL SWAP(SAVE.MAIN.TEMPLATE,'<','&lt;')      *CALL SWAP(SAVE.MAIN.TEMPLATE,'>','&gt;')      *CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'MAIN.TEMPLATE':@AM:SAVE.MAIN.TEMPLATE)    END    *    * Send content file name to mvappsvr using special header    PRINT 'X-MVDB-CONTENT-FILE: ':OUTFILE    CALL SET.CONTENT.TYPE('application/pdf')    SESSION$HEADERS<-1> = 'Content-Disposition: attachment; filename=':PDF.ID    *    * Remove HTML file from native content directory    IF NOT(LOGGING) THEN      DELETE F.NATIVE.DIR,HTM.ID    END    *    * All done!    *  CASE ACTION = 'cleanup'    IF PDF$LIFETIME >= 999999 THEN RETURN ;* Keep PDF files forever    IF PDF$LIFETIME = 0 THEN Freq = 3600 ELSE Freq = 86400    Today = DATE()    Now = (Today * 86400) + TIME()    READU PDF.CLEANUP.REC FROM F.MVDB.CONTROL,'PDF.CLEANUP.TASK' THEN      Prev = PDF.CLEANUP.REC<1>    END ELSE      Prev = Now - Freq    END    IF Now < Prev + Freq THEN      RELEASE F.MVDB.CONTROL,'PDF.CLEANUP.TASK'      RETURN    END    IF OCONV('0','D2/')[1,2] # '31' THEN USA.DATE=1 ELSE USA.DATE=0    * Preform cleanup once per day (or once per hour for immediate removal)    PDF.CLEANUP.REC = Now    WRITE PDF.CLEANUP.REC ON F.MVDB.CONTROL,'PDF.CLEANUP.TASK' ON ERROR      NULL    END    OPEN 'NATIVE.CONTENT' TO F.NATIVE.DIR ELSE RETURN    SELECT F.NATIVE.DIR    DONE = 0    LOOP      READNEXT PDF.ID ELSE DONE = 1    UNTIL DONE DO      IF PDF.ID MATCHES '18N.pdf' OR PDF.ID MATCHES '18N.PDF' THEN        IF USA.DATE THEN          PDFTime = (ICONV(PDF.ID[5,2]:'/':PDF.ID[7,2]:'/':PDF.ID[1,4],'D') * 86400) + (PDF.ID[9,2] * 3600) + (PDF.ID[11,2] * 60) + PDF.ID[13,2]        END ELSE          PDFTime = (ICONV(PDF.ID[7,2]:'/':PDF.ID[5,2]:'/':PDF.ID[1,4],'D') * 86400) + (PDF.ID[9,2] * 3600) + (PDF.ID[11,2] * 60) + PDF.ID[13,2]        END        Expires = PDFTime + (PDF$LIFETIME * 86400) + 1800        IF Expires < Now THEN          DELETE F.NATIVE.DIR,PDF.ID ON ERROR            NULL          END        END      END    REPEAT    *END CASERETURNEND00031FDELETE.SESSION.VAR0c2    SUBROUTINE DELETE.SESSION.VAR( Var )* @(#) DELETE.SESSION.VAR Ported to jBASE 17:00:16  08 JUL 2015*  The following variable names were converted*   VAR* ** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program reads a value from the current web*              session record.* Init*#MAKE# RL $OPTIONS D3    INCLUDE WBPD WWW.INCLUDE    EQU FALSE TO 0, TRUE TO 1    EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*    READ REC FROM F.WEB.SESSION, SESSION$ID THEN        LOCATE Var IN REC<1> SETTING POS THEN            DELETE REC<1,POS>            DELETE REC<2,POS>            WRITE REC ON F.WEB.SESSION, SESSION$ID        END    END*    RETURN000338XML.ENCODE0c2SUBROUTINE XML.ENCODE(STRING.TO.PARSE, FLAG)** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: David Kam (Probably), Sierra Bravo* Date: Unknown* Description: Encode text prior to inserting into XML documents**#MAKE# RL $OPTIONS D3IF STRING.TO.PARSE # '' THEN  IF INDEX(STRING.TO.PARSE,'<!CDATA[',1) > 0 THEN    FLAG = 'X'  END  IF INDEX(STRING.TO.PARSE,']]>',1) > 0 THEN    FLAG = 'X'  END  IF FLAG = 'C' THEN    STRING.TO.PARSE = '<[!CDATA[':STRING.TO.PARSE:']]>'  END ELSE    CALL SWAP(STRING.TO.PARSE,'&','&amp;')    CALL SWAP(STRING.TO.PARSE,'<','&lt;')    CALL SWAP(STRING.TO.PARSE,'>','&gt;')    CALL SWAP(STRING.TO.PARSE,'"','&quot;')    CALL SWAP(STRING.TO.PARSE,"'",'&#39;') ;*dmb 12/7/10 &apos; wasn't rendering correctly in IE8  ENDENDRETURN0004A5TIMEOUT.SESSION0c2** Copyright (C) 2004 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 06/03/04* Description: This program is used to timeout session records.  This program*              should be run at regular intervals to remove unused session records.*            *#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)VAL = ''*TODAY = DATE()NOW   = TIME()*OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP*CMD = 'SELECT WEB.SESSION'EXECUTE CMD CAPTURING JUNK*LOOP  READNEXT ID ELSE EXIT  READU REC FROM F.WEB.SESSION, ID THEN    LOCATE 'LastSessionAccess' IN REC<1> SETTING POS THEN      LAST.ACCESS = REC<2,POS>      LA.DAY = FIELD(LAST.ACCESS,'*',1)      LA.TIME = FIELD(LAST.ACCESS,'*',2)      IF (LA.DAY < (TODAY-1)) THEN        * If it is two days old, then get rid of it.        DELETE F.WEB.SESSION, ID      END    END ELSE      TOTAL.VARS = DCOUNT(REC<1>, @VM)      REC<1,TOTAL.VARS+1> = 'LastSessionAccess'      REC<2,TOTAL.VARS+1> = DATE():'*':TIME()      WRITE REC ON F.WEB.SESSION, ID    END  ENDREPEAT*END0000A8GET.CGI0c2SUBROUTINE GET.CGI(VARNAME,VALUE)*INCLUDE WBPD WWW.INCLUDE*LOCATE VARNAME IN CGI$VARS SETTING POS THEN  VALUE = CGI$VALS<POS>END ELSE VALUE = ""RETURN0014B5DRILLDOWN.STACK.RTNE0c2SUBROUTINE DRILLDOWN.STACK.RTNE(F.MVDB.UDATA,DD.STACK,GO.BACK)** 4-25-16 Tom Parker - Created to support drilldown cookie concept to *                      allow for automatic go back functionality* 09-23-16 Tom Parker - Made obsolete with changes in philosophy on how*                       to handle going back from drilldownsINCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.USERSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*EQU TRUE TO 1, FALSE TO 0, AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*MATREAD GLOBAL.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:'$UG' ELSE MAT GLOBAL.USER.DATA=''STACK.ID=SESSION$ID:'$DD.STACK'READ DD.STACK FROM F.MVDB.UDATA, STACK.ID ELSE DD.STACK=''IF DD.STACK <> '' THEN   LAST.STACK.CNTR=DCOUNT(DD.STACK,AM)   LAST.STACK.ENTRY.ID=SESSION$ID:'$DD.':LAST.STACK.CNTR   READ LAST.CGI.REC FROM F.MVDB.UDATA, LAST.STACK.ENTRY.ID:'.VARS' ELSE LAST.CGI.REC='' END ELSE   LAST.STACK.CNTR=0   LAST.CGI.REC='' ENDVAL.VARS=CGI$VARS; CONVERT AM TO VM IN VAL.VARSCGI.REC=VAL.VARSVAL.VALS=CGI$VALS; CONVERT AM TO VM IN VAL.VALSCGI.REC<2>=VAL.VALSLOCATE 'dd' IN CGI$VARS SETTING POS ELSE POS=999DD.VAR=CGI$VALS<POS>* DBNAME WILL BE GO_BACK IF PULLING BACK FROM DRILLDOWNLOCATE 'dbname' IN CGI$VARS SETTING POS ELSE POS=999DBNAME=CGI$VALS<POS>*** IF DOING A BACKUP PULL IN INFORMATION FROM PREVIOUS*IF (DBNAME = "GO_BACK" OR DBNAME = "go_back") AND LAST.STACK.CNTR > 1 THEN   DELETE.STACK.ENTRY.ID=SESSION$ID:'$DD.':LAST.STACK.CNTR   DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.GUD'   DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.WUD'   DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.VARS'   DD.STACK=DELETE(DD.STACK,LAST.STACK.CNTR,0,0)   WRITE DD.STACK ON F.MVDB.UDATA, STACK.ID   NEW.STACK.ENTRY.ID=SESSION$ID:'$DD.':LAST.STACK.CNTR-1   READ CGI.REC FROM F.MVDB.UDATA, NEW.STACK.ENTRY.ID:'.VARS' ELSE CGI.REC=''   CGI$VARS=CGI.REC<1>   CONVERT VM TO AM IN CGI$VARS   CGI$VALS=CGI.REC<2>   CONVERT VM TO AM IN CGI$VALS   MATREAD GLOBAL.USER.DATA FROM F.MVDB.UDATA, NEW.STACK.ENTRY.ID:'.GUD' ELSE MAT GLOBAL.USER.DATA=''   MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA, SESSION$ID:'$UG'**   MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, NEW.STACK.ENTRY.ID:'.WUD' ELSE MAT WIDGET.USER.DATA=''   GO.BACK=1   RETURN END*** IF FROM A SUBMIT BUTTON THEN SIMPLY REFRESH LAST STACK ENTRY** BUT MAKE SURE IT HAS DRILLDOWN IF PREVIOUS DID** SAME APPLIES TO DEBUG AND UNDEBUG BUTTON*LOCATE 'debug_widget' IN CGI$VARS SETTING DEBUG.POS ELSE DEBUG.POS=0LOCATE 'undebug_widget' IN CGI$VARS SETTING UNDEBUG.POS ELSE UNDEBUG.POS=0LOCATE 'sw' IN CGI$VARS SETTING POS ELSE POS=999SW.VAR=CGI$VALS<POS>INP.POS=INDEX(VM:VAL.VARS,VM:'inp_',1)IF (SW.VAR <> '' AND INP.POS) OR DEBUG.POS OR UNDEBUG.POS THEN   LOCATE 'dd' IN LAST.CGI.REC<1> SETTING DD.POS ELSE DD.POS=999   DD.VAL=LAST.CGI.REC<2,DD.POS>   IF DD.VAL <> '' THEN      LOCATE 'dd' IN CGI$VARS SETTING DD.POS ELSE DD.POS=DCOUNT(CGI$VARS,AM)+1      IF CGI$VALS<DD.POS> = '' THEN         CGI.REC<1,DD.POS>='dd'         CGI.REC<2,DD.POS>=DD.VAL         CGI$VARS<DD.POS>='dd'         CGI$VALS<DD.POS>=DD.VAL       END    END   * DEBUG POSITION MAY HAVE CHANGED SO FIND AGAIN   IF DEBUG.POS THEN      LOCATE 'debug_widget' IN CGI.REC<1> SETTING DEBUG.POS ELSE DEBUG.POS=0      IF DEBUG.POS THEN         CGI.REC=DELETE(CGI.REC,1,DEBUG.POS,0)         CGI.REC=DELETE(CGI.REC,2,DEBUG.POS,0)       END    END   IF UNDEBUG.POS THEN      LOCATE 'undebug_widget' IN CGI.REC<1> SETTING UNDEBUG.POS ELSE UNDEBUG.POS=0      IF UNDEBUG.POS THEN         CGI.REC=DELETE(CGI.REC,1,UNDEBUG.POS,0)         CGI.REC=DELETE(CGI.REC,2,UNDEBUG.POS,0)       END    END   STACK.ENTRY.ID=LAST.STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END**** SIMPLY WRITE OUT THIS SESSION INFORMATION IF:**    1.  NOTHING YET ON THE STACK**    2.  ONLY ONE ENTRY ON THE STACK AND THIS ISN'T A DRILL DOWN*IF NOT(LAST.STACK.CNTR) OR (LAST.STACK.CNTR = 1 AND DD.VAR = '') THEN   *   STACK.ENTRY.ID=SESSION$ID:'$DD.1'   DD.STACK=STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END*** ID DOING A DRILLDOWN THEN PUSH ONTO STACK*IF DD.VAR <> '' THEN   NEXT.STACK.CNTR=LAST.STACK.CNTR+1   STACK.ENTRY.ID=SESSION$ID:'$DD.':NEXT.STACK.CNTR   DD.STACK<NEXT.STACK.CNTR>=STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END*** IF NO CHANGE IN CGI VARS THEN REFRESH LAST STACK ENTRY*IF CGI.REC = LAST.CGI.REC THEN   STACK.ENTRY.ID=LAST.STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END*** ALL ELSE SHOULD BE A NEW DASHBOARD SO START OVER WITH STACK** AFTER PURGING ALL PREVIOUSLY STACKED ITEMS*IF LAST.STACK.CNTR > 1 THEN   FOR DELETE.CNTR = LAST.STACK.CNTR TO 2 STEP -1      DELETE.STACK.ENTRY.ID=SESSION$ID:'$DD.':DELETE.CNTR      DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.GUD'      DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.WUD'      DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.VARS'    NEXT DELETE.CNTR ENDSTACK.ENTRY.ID=SESSION$ID:'$DD.1'DD.STACK=STACK.ENTRY.IDGOSUB WRITE.STACK*RETURN*WRITE.STACK:*WRITE DD.STACK ON F.MVDB.UDATA, STACK.IDWRITE CGI.REC ON F.MVDB.UDATA, STACK.ENTRY.ID:'.VARS'MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA, STACK.ENTRY.ID:'.GUD'RETURN*END000DFFMVDB.DEBUG0c2** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: December, 2007* Description: Dashboard & Widget Debugger** Modified by Peter Schellenbach of Zumasys 07-17-15 for UV compatiblity:*   Added $OPTIONS TIME.MILLISECONDS to so that SYSTEM(12) returns milliseconds, not seconds.*$OPTIONS TIME.MILLISECOND *PJS 07-17-15 UV***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGETSPROMPT ''*OPEN '','MVDB.DEBUG.INFO' TO F.MVDB.DEBUG.INFO ELSE  EXECUTE 'CREATE-FILE MVDB.DEBUG.INFO 1 3' CAPTURING JUNK  OPEN '','MVDB.DEBUG.INFO' TO F.MVDB.DEBUG.INFO ELSE STOP 201, 'MVDB.DEBUG.INFO'ENDOPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'*MY.PORT = @USERNO ; * FIELD( OCONV( '', 'U50BB' ), ' ', 1 ) *PJS 06-08-15*DEBUG.ID = MY.PORT*READ DB.REC FROM F.MVDB.DEBUG.INFO, DEBUG.ID ELSE DB.REC = ''*WIDGET.ID = DB.REC<1>*PRINT "Bravo Dashboard Debugger"PRINTOK = 0LOOP  PRINT "Widget (?=list)":  IF WIDGET.ID # "" THEN PRINT " (":WIDGET.ID:")":  PRINT ": ":  INPUT USE.WIDGET.ID  IF USE.WIDGET.ID # '' THEN WIDGET.ID = USE.WIDGET.ID  BEGIN CASE    CASE WIDGET.ID = ''      STOP    CASE WIDGET.ID = "?"      EXECUTE "SORT MVDB.WIDGETS"      PRINT      WIDGET.ID = ''    CASE 1      MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, WIDGET.ID THEN        OK = 1      END ELSE        PRINT "Invalid widget ID: ":WIDGET.ID      END  END CASEUNTIL OK DO REPEATDB.REC<1> = WIDGET.ID*USERID = DB.REC<2>PRINTOK = 0LOOP  PRINT "User ID (?=list)":  IF USERID # "" THEN PRINT " (":USERID:")":  PRINT ": ":  INPUT USE.USERID  IF USE.USERID # '' THEN USERID = USE.USERID  BEGIN CASE    CASE USERID = "?"      EXECUTE 'SORT MVDB.USERS'      PRINT      USERID = ''    CASE 1      OK = 1  END CASEUNTIL OK DO REPEAT*DB.REC<2> = USERID*G$CURRENT.DB = DB.REC<3>PRINTOK = 0LOOP  PRINT "Dashboard ID (?=list)":  IF G$CURRENT.DB # "" THEN PRINT " (":G$CURRENT.DB:")":  PRINT ": ":  INPUT USE.DB  IF USE.DB # '' THEN G$CURRENT.DB = USE.DB  BEGIN CASE    CASE USE.DB = "?"      EXECUTE 'SORT MVDB.DEFS'      PRINT      G$CURRENT.DB = ''    CASE 1      OK = 1  END CASEUNTIL OK DO REPEAT*DB.REC<3> = G$CURRENT.DB** Pull in user data*MATREAD WIDGET.USER.DATA FROM F.MVDB.DEBUG.INFO,DEBUG.ID:"$":WIDGET.ID ELSE MAT WIDGET.USER.DATA = ''*LOOP  PRINT "Widget User Data"  PRINT "----------------"  FOR X = 1 TO 100    IF WIDGET.USER.DATA(X) # '' THEN      PRINT X "R#3":". '":WIDGET.USER.DATA(X):"'"    END  NEXT X  PRINT  PRINT "User Data field # to change or ENTER to continue: ":  INPUT UPOSWHILE UPOS MATCHES "1N0N" DO  PRINT "Position ":UPOS  PRINT "Current Value: ":WIDGET.USER.DATA(UPOS)  PRINT "New Value: ":  INPUT NEW.VAL  WIDGET.USER.DATA(UPOS) = NEW.VALREPEAT*MATWRITE WIDGET.USER.DATA ON F.MVDB.DEBUG.INFO, DEBUG.ID:"$":WIDGET.ID*WRITE DB.REC ON F.MVDB.DEBUG.INFO, DEBUG.ID*MAT WIDGET.INFO = ''G$WIDGET.NAME = WIDGET.IDG$WIDGET.SUB = WIDGET.SUBG$USERID = USERIDG$QUERYMODE = ''G$DRILLDOWNMODE = 0*PRINTPRINT "Use Debugger (y/N): ":INPUT USE.DEBUGIF USE.DEBUG = "Y" THEN DEBUG ELSE  PRINT "Calling ":WIDGET.SUBEND*#MAKE# RL IF 0 THENSTART.TIMER = SYSTEM(12)*#MAKE# RL ENDUSE.SUB.NAME = WIDGET.SUBCALL @USE.SUB.NAME*#MAKE# RL IF 0 THENDURATION = SYSTEM(12) - START.TIMER*#MAKE# RL END ELSE*#MAKE# RL   DURATION = "Unavailable"*#MAKE# RL ENDMATWRITE WIDGET.USER.DATA ON F.MVDB.DEBUG.INFO, DEBUG.ID:"$":WIDGET.IDPRINT "Call completed. Duration: ":DURATIONSTOP000A3BMVDB.SUB.WIDGET.LIST0c2SUBROUTINE MVDB.SUB.WIDGET.LIST(WIDGET.LIST)** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Produce a list of defined widgets.**#MAKE# RL $OPTIONS D3OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'END*INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGETS*CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS) ;* Retrieve a list of failed widgets this sessionCALL GET.SESSION.VAR("running_widget",FAILED.WIDGET)CALL GET.SESSION.VAR("running_widget_dt",FAILED.WIDGET.DT)IF FAILED.WIDGET # "" THEN  FW.DATE = FIELD( FAILED.WIDGET.DT, '*', 1 )  FW.TIME = FIELD( FAILED.WIDGET.DT, '*', 2 )  FW.LAPSE = TIME() - FW.TIME  FW.LAPSE += ((DATE() - FW.DATE) * 86400)  IF FW.LAPSE < 2 THEN FAILED.WIDGET = "" ;* No more than 2 seconds to run a widget in query modeENDIF FAILED.WIDGET # "" THEN  CALL PUT.SESSION.VAR("running_widget","")  CALL PUT.SESSION.VAR("running_widget_dt","")  LOCATE FAILED.WIDGET IN FAILED.WIDGETS SETTING FWPOS ELSE    FAILED.WIDGETS<-1> = FAILED.WIDGET    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  ENDEND*WIDGET.LIST = ''*EXECUTE 'SSELECT MVDB.WIDGETS' CAPTURING JUNK*DP = 0LOOP  READNEXT ID ELSE EXIT  MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, ID ELSE MAT WIDGET.ITEM = ''  DP += 1  WIDGET.LIST<1,DP> = ID  SUBNAME = WIDGET.SUB  G$QUERYMODE = 1  G$WIDGET.NAME = ID  MAT WIDGET.INFO = ''  MAT WIDGET.USER.DATA = ''  MAT GLOBAL.TEMP.DATA = ''  MAT GLOBAL.USER.DATA = ''  FAIL.STATUS = 0 ;* Okay  FAIL.TEXT = ""  LOCATE ID IN FAILED.WIDGETS SETTING POS THEN    W$TYPE = "FAILED"    W$TITLE = "Failed Widget - ":SUBNAME    W$WIDTH = 3    FAIL.STATUS = 1 ;* Failed    FAIL.TEXT = "Subroutine Failed"  END ELSE    READ CATPTR FROM F.MD, SUBNAME THEN      CALL PUT.SESSION.VAR("running_widget",ID)      DT.STAMP = DATE():"*":TIME()      CALL PUT.SESSION.VAR("running_widget_dt",DT.STAMP)      CALL @SUBNAME      CALL PUT.SESSION.VAR("running_widget","")      CALL PUT.SESSION.VAR("running_widget_dt","")    END ELSE      W$TYPE = "FAILED"      W$TITLE = "Not Cataloged - ":SUBNAME      W$WIDTH = 3      FAIL.TEXT = "Subroutine Not Cataloged"    END  END  IF FIELD(W$TYPE,':',1) = "MAP" THEN W$TYPE = "MAP"  WIDGET.LIST<3,DP> = SUBNAME  WIDGET.LIST<4,DP> = W$TYPE  WIDGET.LIST<5,DP> = W$TITLE  WIDGET.LIST<6,DP> = W$WIDTH  WIDGET.LIST<7,DP> = FAIL.STATUS  WIDGET.LIST<8,DP> = FAIL.TEXTREPEATRETURN00042EGET.SESSION.ID0c2SUBROUTINE GET.SESSION.ID( SESSION.ID, VARS, VALS )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program extracts the session id from the VARS and VALS*              The programmer could just as easily parse out the HTTP_COOKIE*              header and get the value, but this just standardizes the *              process.*             * Init*#MAKE# RL $OPTIONS D3EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)SESSION.ID = ''*NUM.VARS = DCOUNT(VARS, AM)FOR X = 1 TO NUM.VARS  IF (VARS<X> = 'HTTP_COOKIE') THEN    CSTRING = VALS<X>        CALL SWAP( CSTRING, '%3B ', ';')    CONVERT ';' TO AM IN CSTRING    NUM.COOKIES = DCOUNT(CSTRING, AM)    FOR Y = 1 TO NUM.COOKIES      CVAR = TRIM(FIELD(CSTRING<Y>,'=',1))      CVAL = CSTRING<Y>[(1+INDEX(CSTRING<Y>,'=',1)),99999]      IF (CVAR = 'sessionid') THEN        SESSION.ID = TRIM(CVAL)        EXIT      END    NEXT Y  ENDNEXT X*RETURN*0001C5RSS.XML.ENCODE0c2SUBROUTINE RSS.XML.ENCODE(STRING.TO.PARSE, FLAG)** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: David Kam (Probably), Sierra Bravo* Date: Unknown* Description: Encode text prior to inserting into XML documents*SWAP.CHARS = \&<>\FOR SW = 1 TO LEN(SWAP.CHARS)  CH = SWAP.CHARS[SW,1]  HX = OCONV(SEQ(CH),'MCDX')  SWTO = "&#x":HX "R%2":";"  CALL SWAP(STRING.TO.PARSE,CH,SWTO)NEXT SWRETURN000536PUT.SESSION.VAR0c2SUBROUTINE PUT.SESSION.VAR( var, VAL )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program inserts a variable in the the current*              session record.  If the variable already exists, it*              is replaced.  If it does not exist, then it is created.*#MAKE# RL $OPTIONS D3* InitINCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)IF SESSION$ID = "" THEN RETURN** Need to get rid of the VM,SVM, and AM chars so that we can* store multi-valued data in the record. I am changing them to* very small ASCII codes that are usually not used.  This should* be pretty safe.*CONVERT AM TO CHAR(2) IN VALCONVERT VM TO CHAR(3) IN VALCONVERT SVM TO CHAR(4) IN VAL*READ REC FROM F.WEB.SESSION, SESSION$ID ELSE REC = ''TOTAL.VARS = DCOUNT(REC<1>, VM)LOCATE var IN REC<1> SETTING POS THEN  REC<2,POS> = VALEND ELSE  NEXT.REC = TOTAL.VARS + 1  REC<1,NEXT.REC> = var  REC<2,NEXT.REC> = VALENDWRITE REC ON F.WEB.SESSION, SESSION$IDCONVERT CHAR(2) TO AM IN VALCONVERT CHAR(3) TO VM IN VALCONVERT CHAR(4) TO SVM IN VAL*IF (var # 'LastSessionAccess') THEN  CALL PUT.SESSION.VAR('LastSessionAccess', DATE():'*':TIME())END*RETURN000B3EWDB.VARS0c2SUBROUTINE WDB.VARS( VARS, VALS )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 12/24/03* Description: This program is used to gather the vars and vals from a*              web request.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause** Modified By: Peter Schellenbach, Zumasys* Date: 10/25/2016* Description: Added INCLUDE WWW.INCLUDE so we have access to CGI$UNIQUE.ID*              in /WWW/ COMMON, instead of using PROCREAD / SENTENCE.**#MAKE# RL $OPTIONS D3*INCLUDE WBPD WWW.INCLUDE ; *PJS 10-25-16**VARS = ''VALS = ''VAR.POS = 1DIM TEMP(50)**PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ''*PJS 10-25-16*PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE() ; *PJS 06-12-15**PJS 10-25-16*UNIQUE.ID = FIELD( TCL.LINE, ' ', 2)UNIQUE.ID = CGI$UNIQUE.ID ;*PJS 10-25-16**OPEN '','WDB.Q' TO WDB.Q ELSE RETURN*IF (UNIQUE.ID # '') THEN  READ QSTRING FROM WDB.Q, UNIQUE.ID ELSE QSTRING = ''  CONVERT @AM TO '' IN QSTRING  QLENGTH=LEN(QSTRING)  IF QSTRING[1,1] = '"' AND QSTRING[LEN(QSTRING),1] = '"' THEN    QSTRING = QSTRING[2,LEN(QSTRING)-2] ;* UNIDATA hack  END  CONVERT '&' TO @AM IN QSTRING  FOR X = 1 TO DCOUNT( QSTRING, @AM )    IF (TRIM(FIELD(QSTRING<X>,'=',1)) # '') THEN      HEX.STRING = FIELD(QSTRING<X>, '=', 1) ; GOSUB CONVERT.HEX      VARS<VAR.POS> = HEX.STRING      EQ.POS = INDEX(QSTRING<X>,'=',1)      HEX.STRING = QSTRING<X>[EQ.POS+1,QLENGTH] ; GOSUB CONVERT.HEX      VALS<VAR.POS> = HEX.STRING      VAR.POS += 1    END  NEXT XENDRETURN*------------CONVERT.HEX:*------------HSLEN = LEN(HEX.STRING)IF HSLEN > 5000 THEN*IF 0 THEN  CHUNKLEN = INT( HSLEN / 50 )  START.POS = 1  FOR CHX = 1 TO 49    CUT.POINT = (START.POS-1) + CHUNKLEN    NCC = 0    LOOP UNTIL HEX.STRING[CUT.POINT+1,1] = "%" OR NCC > 1 DO      CUT.POINT += 1      NCC += 1    REPEAT    TEMP(CHX) = HEX.STRING[START.POS,CHUNKLEN+NCC]    START.POS += CHUNKLEN + NCC  NEXT CHX  TEMP(50) = HEX.STRING[START.POS,QLENGTH]  MAX.TEMP.LOC = 50END ELSE  TEMP(1) = HEX.STRING  MAX.TEMP.LOC = 1ENDHEX.STRING = ""FOR TEMP.LOC = 1 TO MAX.TEMP.LOC   IDX = 1  CONVERT '+' TO ' ' IN TEMP(TEMP.LOC)  LOOP    LOC = INDEX( TEMP(TEMP.LOC), '%', IDX )  WHILE LOC DO    IF TEMP(TEMP.LOC)[LOC+1,1] = "%" THEN      IDX += 2    END ELSE      SWAP.VAL = TEMP(TEMP.LOC)[LOC+1,2]      SWAP.VAL = OCONV( SWAP.VAL, 'MCU' )      SWAP.VAL = OCONV(SWAP.VAL,'MCXD')      IF SWAP.VAL MATCHES "1N0N" THEN SWAP.VAL = CHAR(SWAP.VAL)  *    SWAP.VAL = CHAR(OCONV(SWAP.VAL,'MCXD'))      TEMP(TEMP.LOC)=TEMP(TEMP.LOC)[1,LOC-1]:SWAP.VAL:TEMP(TEMP.LOC)[LOC+3,QLENGTH]      IF SWAP.VAL = '%' THEN        IDX += 1      END    END  REPEAT  HEX.STRING := TEMP(TEMP.LOC)NEXT TEMP.LOC*RETURN000961USER.UPDATE0c2*On a new install, this should encrypt the default, plaintext passwords.*On an upgrade, it will encrypt all user passwords if they have not been encrypted by this program.* 1-2-15 TFP don't if the password is the same as the encryption of the user*        name then don't encrypt again* Modified by Peter Schellenbach of Zumasys 07-17-15 for UV compatiblity:*   Change U3060 user exist to use DIGEST('MD5',...) instead.** 06-19-17 PJS After initial installation, scan for any MVDB.USERS records where* the password in USER.REC<1> is the same as the user ID. These are default users* 'admin' and 'guest', and the default plaintext password on attr 1 is encrypted* and the user record updated. The USER.UPDATE flag in MVDB.CONTROL is updated to* 2 so this process will not be repeated during upgrades. There is a special case* where the USER.UPDATE flag is 1, which indicates that the previous version of* MVDB.ADMIN had a bug where passwords were stored in the users record before but* conversion to hex was not done. In this case, the MD5 hash in attr 1 is converted* to hex and the user record is updated.*OPEN 'MVDB.USERS' TO F.MVDB.USERS ELSE STOP 201, 'MVDB.USERS'OPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'READV USER.UPDATE.FLAG FROM F.MVDB.CONTROL, "USER.UPDATE",1 ELSE USER.UPDATE.FLAG = ''IF USER.UPDATE.FLAG + 0 < 2 THEN  SELECT F.MVDB.USERS  LOOP    READNEXT USER.ID ELSE EXIT    READ USER.REC FROM F.MVDB.USERS, USER.ID THEN      MUST.UPDATE = 0      * Check for plaintext passwords in original installation      IF USER.ID = USER.REC<1> THEN                IF DIGEST('MD5', USER.REC<1>, 1, ENCRYPTED.PSWD) = 0 THEN ; *07-17-15 UV*          ENCRYPTED.PSWD = OCONV(ENCRYPTED.PSWD, 'MX0C') ; *07-17-15 UV*          MUST.UPDATE = 1        END      END ELSE        * Check for non-hex encrypted password in MVDB.USERS caused by bug in prior versions of MVDB.ADMIN        IF USER.UPDATE.FLAG = 1 THEN          ENCRYPTED.LEN = LEN(USER.REC<1>)          IF ENCRYPTED.LEN = 16 THEN            ENCRYPTED.PSWD = OCONV(USER.REC<1>, 'MX0C') ; *07-17-15 UV*            MUST.UPDATE = 1          END                END      END      IF MUST.UPDATE THEN        USER.REC<1> = ENCRYPTED.PSWD        WRITE USER.REC ON F.MVDB.USERS, USER.ID      END    END  REPEAT  WRITEV 2 ON F.MVDB.CONTROL, "USER.UPDATE", 1ENDSTOPEND00207AMVDB.BUILD.PACKAGE0c2    SUBROUTINE MVDB.BUILD.PACKAGE(MAKE.FILE,LOCATION,SIZE)**   INCLUDE DM,BP,UNIX.H FCNTL.H*   INCLUDE DM,BP,UNIX.H MODE.H*   INCLUDE WBPD MVPKG.INCLUDE*    EQU FALSE TO 0, TRUE TO 1    EQU AM TO CHAR(254), VM TO CHAR(253)*UV CHAR BUFFER[10000]    BUFFER = ""    DIM PKG.REC(40)    LOCATION = ''    SIZE = 0*    OPEN "MAKE.FILE,":MAKE.FILE TO F.MAKE.FILE ELSE        OPEN MAKE.FILE TO F.MAKE.FILE ELSE STOP 201, MAKE.FILE    END    OPEN '','MVAPPS.INSTALLED' TO F.MVAPPS.INSTALLED ELSE        EXECUTE "CREATE-FILE MVAPPS.INSTALLED 3 11" CAPTURING JUNK        OPEN '','MVAPPS.INSTALLED' TO F.MVAPPS.INSTALLED ELSE STOP 201, 'MVAPPS.INSTALLED'    END    OPEN '','MVPKG.DATA' TO F.MVPKG.DATA ELSE        EXECUTE "CREATE-FILE MVPKG.DATA 3 11" CAPTURING JUNK        OPEN '','MVPKG.DATA' TO F.MVPKG.DATA ELSE STOP 201, 'MVPKG.DATA'    END    OPEN '','PACKED.FILE' TO TARGET.FILE ELSE        EXECUTE "CREATE-FILE PACKED.FILE 3 31" CAPTURING JUNK        OPEN '','PACKED.FILE' TO TARGET.FILE ELSE STOP 201, 'PACKED.FILE'    END    MATREAD PKG.REC FROM F.MVPKG.DATA, MAKE.FILE ELSE RETURN    PACKAGE.NAME = PKG$NAME    PACKAGE.NAME = OCONV(PACKAGE.NAME,"MCAN")    PACKAGE.DESCRIPTION = PKG$DESC    PACKAGE.VERSION = PKG$BUILD.SEQ + 1    IF MAKE.FILE = '' OR PACKAGE.NAME = '' THEN RETURN*    PACKAGE.INFO = ""    PACKAGE.MODE = 1* Set up the temporary storage area for the scripts    OPEN "MAKE.TEMP" TO F.MAKE.TEMP ELSE        EXECUTE "CREATE-FILE MAKE.TEMP 1 31" CAPTURING JUNK        OPEN "MAKE.TEMP" TO F.MAKE.TEMP ELSE STOP 201, "MAKE.TEMP"    END    CLEARFILE F.MAKE.TEMP    OPEN "PACKED.FILE" TO F.PACKED.FILE ELSE        EXECUTE "CREATE-FILE PACKED.FILE 1 31" CAPTURING JUNK        OPEN "PACKED.FILE" TO F.PACKED.FILE ELSE STOP 201, "PACKED.FILE"    END    CLEARFILE F.PACKED.FILE    BINARY.OPT = " (B"    PACKAGE.INFO<1> = PACKAGE.DESCRIPTION    PACKAGE.INFO<2> = PACKAGE.VERSION    PACKAGE.INFO<3> = "db"    PACKAGE.INFO<6> = PACKAGE.NAME*    TARGET = "D3"    SCRIPT = ""    SCRIPT.SEG = 0*    READ COMMANDS FROM F.MAKE.FILE, TARGET:"*PRE.COMMANDS" ELSE        READ COMMANDS FROM F.MAKE.FILE, "PRE.COMMANDS" ELSE COMMANDS = ""    END    GOSUB ADD.COMMANDS*    WRITE SCRIPT ON F.MAKE.TEMP, "MVAPPS-PRE-SCRIPT"    WRITE PACKAGE.INFO ON F.MAKE.TEMP, "PACKAGE.INFO"    SCRIPT = ""*    READ FILE.LIST FROM F.MAKE.FILE, TARGET:"*FILE.LIST" ELSE        READ FILE.LIST FROM F.MAKE.FILE, "FILE.LIST" ELSE FILE.LIST = ""    END    FOR FX = 1 TO DCOUNT( FILE.LIST, @AM )        FNAME = FILE.LIST<FX>        FX.OVR = FALSE        IF FNAME[1,2] = 'O:' THEN            FNAME=FNAME[3,999]            FX.OVR = TRUE        END        OPEN FNAME TO FVAR THEN            READ ITEM.LIST FROM F.MAKE.FILE, TARGET:"*DATA_":FNAME ELSE                READ ITEM.LIST FROM F.MAKE.FILE, "DATA_":FNAME ELSE ITEM.LIST = ""            END            IF ITEM.LIST<1> = "*" THEN                SELECT FVAR                ITEM.LIST = ''                LOOP                    READNEXT ITEM.LIST.ID ELSE EXIT                    ITEM.LIST<-1> = ITEM.LIST.ID                REPEAT            END            WRITE ITEM.LIST ON F.MAKE.TEMP, FNAME            EXECUTE "QSELECT MAKE.TEMP '":FNAME:"'" CAPTURING JUNK            IF SYSTEM(11) THEN                GOSUB PACK.FILE            END            DELETE F.MAKE.TEMP, FNAME            OPEN "DICT",FNAME TO D.FVAR THEN                READ ITEM.LIST FROM F.MAKE.FILE, TARGET:"*DICT_":FNAME ELSE                    READ ITEM.LIST FROM F.MAKE.FILE, "DICT_":FNAME ELSE ITEM.LIST = ""                END                FNAME = "DICT ":FNAME                IF ITEM.LIST<1> = "*" THEN                    SELECT D.FVAR                    ITEM.LIST = ''                    LOOP                        READNEXT ITEM.LIST.ID ELSE EXIT                        ITEM.LIST<-1> = ITEM.LIST.ID                    REPEAT                END                WRITE ITEM.LIST ON F.MAKE.TEMP, FNAME                EXECUTE "QSELECT MAKE.TEMP '":FNAME:"'" CAPTURING JUNK                IF SYSTEM(11) THEN                    GOSUB PACK.FILE                END                DELETE F.MAKE.TEMP, FNAME            END        END    NEXT FX*    READ COMMANDS FROM F.MAKE.FILE, TARGET:"*POST.COMMANDS" ELSE        READ COMMANDS FROM F.MAKE.FILE, "POST.COMMANDS" ELSE COMMANDS = ""    END    SCRIPT = ""    GOSUB ADD.COMMANDS    WRITE SCRIPT ON F.MAKE.TEMP, "MVAPPS-POST-SCRIPT"    EXECUTE 'SELECT MAKE.TEMP "MVAPPS-PRE-SCRIPT" "MVAPPS-POST-SCRIPT" "PACKAGE.INFO"' CAPTURING JUNK    FNAME = "MAKE.TEMP"    GOSUB PACK.FILE** Change the name of the file containing the scripts from MAKE.TEMP to MD* so they can be executed upon arrival.*    READ REC FROM F.PACKED.FILE, "MAKE.TEMP" ELSE REC = ""    WRITE REC ON F.PACKED.FILE, "MV.INSTALL.CF"    DELETE F.PACKED.FILE, "MAKE.TEMP"*    FNAME = "PACKED.FILE"    GOSUB PACK.FILE    READ PACKAGE FROM F.PACKED.FILE, "PACKED.FILE" ELSE RETURN    CLEARFILE F.PACKED.FILE    WRITE PACKAGE ON F.PACKED.FILE, PACKAGE.NAME:'-':PACKAGE.VERSION    OUT.DIR = "/tmp/"*   HANDLE = %OPEN(OUT.DIR:PACKAGE.NAME,O$CREAT+O$TRUNC+O$RDWR+O$BINARY)    OPENSEQ OUT.DIR:PACKAGE.NAME TO HANDLE THEN        ORIG.LEN =LEN(PACKAGE)        WTOT = 0        LOOP            IF LEN(PACKAGE) >= 10000 THEN                BUFFER = PACKAGE[1,10000]                BLEN = 10000                PACKAGE = PACKAGE[10001,9999999]            END ELSE                BUFFER = PACKAGE                BLEN = LEN(PACKAGE)                PACKAGE = ""            END*UV         W = %WRITE(HANDLE,BUFFER,BLEN)            WRITESEQ BUFFER APPEND TO HANDLE ELSE RETURN            WTOT += BLEN        WHILE PACKAGE # "" DO REPEAT        LOCATION = OUT.DIR:PACKAGE.NAME        SIZE = WTOT    END    RETURN*ADD.COMMANDS:       **    FOR CMDX = 1 TO DCOUNT( COMMANDS, @AM )        SCRIPT<-1> = COMMANDS<CMDX>    NEXT CMDX    RETURN*CHECK.DPOINTER:     * Check to see if the record contains a dpointer*    D.POINTER = FALSE    IF OCONV(REC<1>[1,1],'MCU') = "D" THEN        IF FILE.TYPE = "DICT" THEN            IF REC<2> MATCHES "3N0N" AND REC<3> MATCHES "1N0N" THEN                D.POINTER = TRUE            END        END    END    RETURN*PACK.FILE:    ARG.LIST = TRIM( FNAME )    BINARY = 1*    FILE.TYPE = 'DATA'    FILE.NAME = FIELD( ARG.LIST, ' ', 1 )    POS = 2    IF FILE.NAME = "DATA" OR FILE.NAME = "DICT" THEN        FILE.TYPE = FILE.NAME        FILE.NAME = FIELD( ARG.LIST, ' ', 2 )        POS = 3    END    IF FILE.TYPE = "DATA" THEN FILE.TYPE = ""*    OPEN FILE.TYPE,FILE.NAME TO PACK.FILE ELSE RETURN    PACK.FILE.ID = ''    IF FILE.TYPE # "" THEN PACK.FILE.ID = FILE.TYPE:"_"    IF FX.OVR THEN PACK.FILE.ID := 'O:'    PACK.FILE.ID := FILE.NAME**Packing PACK.FILE.ID*    IF INDEX(FILE.NAME,'BINARY:',1) THEN        HEX.MODE = 1    END ELSE HEX.MODE = 0    CHK.FILE.NAME = FILE.NAME    Count = 0    SELECT PACK.FILE    EOF = FALSE    PACK.REC = ""    DLIST = ""    SEPARATOR = @AM    LOOP        READNEXT CHK.REC.ID ELSE EOF = TRUE    UNTIL EOF DO        READ REC FROM PACK.FILE, CHK.REC.ID ELSE REC = ""*Remove db/widget user access data?        IF PKG$ACCESS.OPT # 1 THEN            IF FILE.NAME = 'MVDB.DEFS' THEN                REC<5> = ''                END ELSE IF FILE.NAME = 'MVDB.WIDGETS' THEN                    REC<2> = ''                END            END            GOSUB CHECK.DPOINTER            IF NOT( D.POINTER ) THEN                Count = Count + 1                IF HEX.MODE THEN                    REC = CHK.REC.ID:SEPARATOR:"0x":OCONV(REC,'MX')                END ELSE                    REC = CHK.REC.ID:SEPARATOR:"0c":REC                END                LENGTH = OCONV( LEN(REC), 'MCDX' ) "R%6"                PACK.REC = PACK.REC:LENGTH:REC            END ELSE                DLIST<-1> = CHK.REC.ID            END        REPEAT*        FOR D = 1 TO DCOUNT( DLIST, AM )*PRINT*PRINT "Item '":DLIST<D>:"' is a D-Pointer.  Not packed."        NEXT D        IF PACK.REC # "" THEN            WRITE PACK.REC ON TARGET.FILE, PACK.FILE.ID        END*PRINT PACK.FILE.ID:" packed.  ":Count:" records packed into ":PACK.FILE.ID        RETURN00029BSET.STATUS.CODE0c2SUBROUTINE SET.STATUS.CODE( STATUS.CODE )*********************************************************************** Copyright (C) 2020 Zumasys, Inc., All Rights Reserved** Written By   : Peter Schellenbach* Date Written : 04/21/2017* Description  : This program sets the response status code sent*                back to client. Successful requests should return*                status code 200 (this is the default). Status code*                500 indicates a generic server failure.*              **********************************************************************INCLUDE WBPD WWW.INCLUDESESSION$STATUS.CODE = STATUS.CODE*RETURN*0001E6WDB.TEST0c2INCLUDE WBPD WWW.INCLUDEPRINT "junk before content"PRINT CHAR(10)PRINT "Content-type: text/html"PRINT ""CALL WDB.VARS( VARS, VALS )PRINT "<pre>"PRINT "Vars: "FOR X = 1 TO DCOUNT(VARS, @AM)  PRINT VARS<X>:" = ":VALS<X>NEXT XPRINTFOR N = 45 TO 49  PRINT "WWW.INFO(":N:"): ":WWW.INFO(N)NEXT NPRINT "</pre>"PRINT '<form method="POST" action="/dbc/WDB.TEST">'PRINT '<input type="text" name="thing">'PRINT '<input type="submit" value="submit">'PRINT '</form>'*00019ACREATE.WEBSERVICE.PASSWORD0c2SUBROUTINE CREATE.WEBSERVICE.PASSWORD(PASSWORD,PASSTIME)* VALID PASSWORD IS THE SUM OF MMDDYY + SSMMHH (FROM PASSTIME)* INVERT THE TIME TO SSMMHHPASSTIME=OCONV(TIME(),'MTS')CONVERT ':' TO '' IN PASSTIMEEMITSSAP=''FOR TIME.I = 6 TO 1 STEP -1  EMITSSAP:=PASSTIME[TIME.I,1]NEXT TIME.IOTODAY=OCONV(DATE(),'D2-')CONVERT '-' TO '' IN OTODAYPASSWORD=OTODAY+EMITSSAPRETURNEND004079WDB.INIT0c2** Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 12/24/03* Description: This program is the man entry point for web transactions.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause.*              When reading MD PROC item, if its missing, read again*              with '.PROC' suffix on ID. This way we can keep the PROC*              in the MD as a flag that the function is allowed, but not*              require it in the MD, since jBASE does not place catalog*              items in the MD.** Modified by Peter Schellenbach of Zumasys 07-28-15 for UV compatiblity:*   UniVerse SYSTEM(19) replacement using DATE(), SYSTEM(12) & RND() to create unique ID** Modified By: Peter Schellenbach, Zumasys* Date: 10/25/2016* Description: This program was made more generic, so that it can serve*              as the main entry point for both MVDB and REST services.*              The MVDB specific code has been refactored into MVDB.INIT.*              A new WDB.RESOURCE file is used to determine supported*              resources and the name of the program to handle the resource.*              For example, the MVDB.MAIN record in the WDB.RESOURCE file*              defines MVDB.INIT as the handler for the MVDB.RESOURCE.**              Removed PROCREAD (and calling PROC from MD). Only use*              SENTENCE now.** Modified By: Peter Schellenbach, Zumasys* Date: 04/21/2017* Description: Updated to use CONFIG record in WDB.RESOURCE to** Modified By: Peter Schellenbach, Zumasys* Date: 06/16/2017* Description: For REST, separate header & request vars from rest of cgi vars.*              Fix VARS variable conflict in APPEND.REC to use QSTR and save*              QSTR in WDB.DEBUG record instead of VARS. Change program name*              in WDB.DEBUG record ID to RSRC.ID so MV.DEBUG can recreate the*              WDB.INIT command line.** Modified By: Peter Schellenbach, Zumasys* Date: 10/18/2017* Description: Save detailed debug info in WDB.DEBUG record to enable reproducing*              original environment when debugging requests.*              WDB.DEBUG: initialized from WDB.RESOURCE record attr 7, set when*              WDB.INIT should create debug records in WDB.DEBUG file for use by WDEBUG.*              WDEBUG.MODE: set if WDB.INIT is being called by WDEBUG instead of mvappsvr.** Modified By: Peter Schellenbach, Zumasys* Date: 11/29/2017* Description: Provide for execution of dashboard or REST service in a different*              account. New RSRC.ACCOUNT field added to WDB.RESOURCE records.*              Use LOGTO to switch accounts prior to executing the resource*              handler program.*$OPTIONS TIME.MILLISECOND *PJS 10-18-17 UV**INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD FI.WDB.RESOURCEINCLUDE WBPD FI.WDB.DEBUG*MAT WWW.INFO = ''STATUS.CODE = 0LOGGING = 0LOG.REC = ''WDB.DEBUG = 0WDEBUG.MODE = 0*OPEN 'WDB.Q' TO Q ELSE  ERR = 'Cannot open Queue file'  GOSUB SEND.ERRORENDOPEN 'WDB.RESOURCE' TO F.RESOURCE ELSE  ERR = 'Cannot open resource file'  GOSUB SEND.ERROREND** Read and parse config settings**  Important config settings:*   LOGLEVEL - see below*   DEFAULT_HANDLER - if a "handler" is not included in RESOURCE.NAME, use this default handler*   DEFAULT_RESOURCE - if a "resource" is not included in RESOURCE.NAME, use this default resource**   Note: PATH_INFO is the part of the URL beginning with a forward slash (/) after the*   server/port and before the query string. It is interpreted as:*     /<handler>/<resource>/<REST parameter>/<another REST parameter> ...**   MVAppSvr will pass <handler>/<resource> as 2nd command line argument, unless the default*   handler is being used, then only <resource> is passed.*READ TEMPCONFIG FROM F.RESOURCE, 'CONFIG' ELSE TEMPCONFIG = ''NUMCONFIG = DCOUNT(TEMPCONFIG, @AM)CGI$CONFIG = ''CONFIGCNTR = 0FOR A = 2 TO NUMCONFIG  CONFIGNAME = TEMPCONFIG<A,1>  CONFIGVALUE = TEMPCONFIG<A,2>  IF CONFIGNAME <> '' THEN    LOCATE CONFIGNAME IN CGI$CONFIG<1,1> SETTING POS ELSE      CONFIGCNTR += 1      CGI$CONFIG<1,1,CONFIGCNTR> = CONFIGNAME    END    CGI$CONFIG<1,2,CONFIGCNTR> = CONFIGVALUE  ENDNEXT A** Get the logging level from config**  Log levels:*   0 - no logging*   1 - log errors*   2 - log all requests*   3 - log everything (debug mode)**  Log info is written to the WDB.LOG file. Requests and errors are logged*  using a unique ID.*SESSION$GLOBAL.DEBUG = 0LOCATE 'LOGLEVEL' IN CGI$CONFIG<1,1> SETTING POS THEN  TEMPVALUE = CGI$CONFIG<1,2,POS>  IF TEMPVALUE MATCHES '1N' THEN SESSION$GLOBAL.DEBUG = TEMPVALUE + 0ENDLOGGING = SESSION$GLOBAL.DEBUGIF LOGGING THEN  OPEN 'WDB.LOG' TO F.LOG ELSE LOGGING = 0END** Get default handler*DEFAULT.HANDLER = 'DBC' ;* ensure this is defined!LOCATE 'DEFAULT_HANDLER' IN CGI$CONFIG<1,1> SETTING POS THEN  DEFAULT.HANDLER = OCONV(CGI$CONFIG<1,2,POS>, 'MCU')END** Parse the command line*TCL.LINE = SENTENCE()RESOURCE.NAME = OCONV(FIELD(TCL.LINE, ' ', 2), 'MCU')INIT.VARS = FIELD(TCL.LINE, ' ', 3)VAR.STRING = FIELD(TCL.LINE, ' ', 4)XTRA.OPTS = FIELD(TCL.LINE, ' ', 5)*UNIQUE.ID = FIELD(INIT.VARS, '-', 1)ONCOM     = FIELD(INIT.VARS, '-', 2)COMCOUNT  = FIELD(INIT.VARS, '-', 3)** Get handler from RESOURCE.NAME argument*IF DCOUNT(RESOURCE.NAME, '/') = 2 THEN  HANDLER.NAME = OCONV(FIELD(RESOURCE.NAME, '/', 1), 'MCU')  RESOURCE.NAME = OCONV(FIELD(RESOURCE.NAME, '/', 2), 'MCU')END ELSE  HANDLER.NAME = DEFAULT.HANDLER  RESOURCE.NAME = OCONV(RESOURCE.NAME, 'MCU')END** Get the resource record from WDB.RESOURCE file*RSRC.ID = HANDLER.NAME:'*':RESOURCE.NAMEMAT RSRC.ITEM = ''MATREAD RSRC.ITEM FROM F.RESOURCE, RSRC.ID ELSE  IF HANDLER.NAME = DEFAULT.HANDLER THEN    MATREAD RSRC.ITEM FROM F.RESOURCE,RESOURCE.NAME ELSE NULL  ENDEND** Sort out the debug modes**  WDEBUG.MODE is set when the request was initiated by WDEBUG rather than web.*  WDB.DEBUG is set when the resource indicates to log debug info for web requests.*  WDEBUG.MODE and WDB.DEBUG are exclusive!*  SESSION$WDEBUG.MODE can be tested by resource handlers to break into debugger, or ???IF INDEX(XTRA.OPTS, '_WDEBUG_MODE_', 1) THEN WDEBUG.MODE = 1SESSION$WDEBUG.MODE = WDEBUG.MODEIF NOT(WDEBUG.MODE) THEN  WDB.DEBUG = RSRC.DEBUG.MODE  IF WDB.DEBUG THEN    OPEN 'WDB.DEBUG' TO F.WDB.DEBUG ELSE WDB.DEBUG = 0  ENDEND** Validate the resource - return error if invalid or disabled*IF (RSRC.TYPE = 'P') AND RSRC.ENABLED THEN  CGI.MODE = RSRC.PARSE.CGI  IF ONCOM = 1 AND VAR.STRING = '%%' THEN* READ VARS FROM STDIN INSTEAD OF COMMAND LINE    PROMPT ''    ECHO OFF    FOR ONCOM = 1 TO COMCOUNT      INPUT VAR.STRING      IF ONCOM < COMCOUNT THEN        GOSUB APPEND.REC      END    NEXT ONCOM    ECHO ON    ONCOM = COMCOUNT  END  IF (ONCOM = COMCOUNT) THEN    GOSUB APPEND.REC    IF LOGGING > 1 THEN      LOG.REC<1> = RESOURCE.NAME      LOG.REC<2> = DATE()      LOG.REC<3> = SYSTEM(12) ;* START TIME      LOG.REC<6> = COMCOUNT    END** Populate the vars and vals*    CGI$UNIQUE.ID = UNIQUE.ID    IF RSRC.PROGRAM <> '' THEN      CGI$RESOURCE.NAME = RSRC.PROGRAM    END ELSE      CGI$RESOURCE.NAME = RESOURCE.NAME    END    IF CGI.MODE THEN** Parse CGI, request & header variables*      CALL WDB.VARS(VARS, VALS)      LOCATE "APPSVR_ID" IN VARS SETTING POS THEN        CGI$APPSVR.ID = VALS<POS>        VARS = DELETE(VARS, POS, 0, 0)        VALS = DELETE(VALS, POS, 0, 0)      END ELSE        CGI$APPSVR.ID = ""      END      LOCATE "__body__" IN VARS SETTING POS THEN        CGI$BODY = VALS<POS>        VARS = DELETE(VARS, POS, 0, 0)        VALS = DELETE(VALS, POS, 0, 0)      END** Copy CGI variables to CGI$VARS/CGI$VALS and request & header variables to CGI$HEADERVARS/CGI$HEADERVALS*      REQUEST.VAR.NAMES = 'SIMPLEWEB_MODULE':@AM:'SIMPLEWEB_HANDLER':@AM:'REMOTE_ADDR':@AM:'REMOTE_HOST':@AM:'REMOTE_USER':@AM      REQUEST.VAR.NAMES := 'REQUEST_METHOD':@AM:'PROTOCOL_VERSION':@AM:'PATH_INFO':@AM:'CONTENT_TYPE':@AM:'SERVER_PORT':@AM:'INSTALL_PATH'      NUM.VARS = DCOUNT(VARS, @AM)      HDR.VAR.NUM = 1      CGI.VAR.NUM = 1      FOR Y = 1 TO NUM.VARS        IS.HDR.VAR = 0        VAR.NAME = VARS<Y>        IF VAR.NAME[1,5] = 'HTTP_' THEN          IS.HDR.VAR = 1        END ELSE          LOCATE VAR.NAME IN REQUEST.VAR.NAMES SETTING POS THEN IS.HDR.VAR = 1        END        IF IS.HDR.VAR THEN          CGI$HEADERVARS<HDR.VAR.NUM> = VAR.NAME          CGI$HEADERVALS<HDR.VAR.NUM> = VALS<Y>          HDR.VAR.NUM += 1        END ELSE          CGI$VARS<CGI.VAR.NUM> = VAR.NAME          CGI$VALS<CGI.VAR.NUM> = VALS<Y>          CGI.VAR.NUM += 1        END      NEXT Y** Load the Cookie variables and values*      LOCATE 'HTTP_COOKIE' IN VARS SETTING POS THEN        CSTRING = VALS<POS>      END ELSE CSTRING = ''      CONVERT ';' TO @AM IN CSTRING      NUM.COOKIES = DCOUNT(CSTRING, @AM)      FOR Y = 1 TO NUM.COOKIES        CGI$CVARS<Y> = TRIM(FIELD(CSTRING<Y>,'=',1))        CGI$CVALS<Y> = CSTRING<Y>[1 + COL2(),99999]      NEXT Y** Get server info*      LOCATE "HTTP_HOST" IN VARS SETTING POS THEN        CGI$SERVER.NAME = VALS<POS>      END ELSE CGI$SERVER.NAME = ""      LOCATE "SERVER_PORT" IN VARS SETTING POS THEN        CGI$SERVER.PORT = VALS<POS>      END ELSE CGI$SERVER.PORT = ""      IF CGI$SERVER.PORT = "" OR CGI$SERVER.PORT = "0" THEN        OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL THEN          READV TCP.PORT FROM F.MVDB.CONTROL, 'MVDB.SETTINGS', 4 ELSE TCP.PORT = ""        END        CGI$SERVER.PORT = TCP.PORT      END      IF CGI$SERVER.PORT # "" AND INDEX(CGI$SERVER.NAME, ':', 1) = 0 THEN CGI$SERVER.NAME := ":":CGI$SERVER.PORT ;*PJS 10-25-16* Only append port if its not already in the HTTP_HOST header      LOCATE "SIMPLEWEB_HANDLER" IN VARS SETTING POS THEN        CGI$PATH = VALS<POS>        IF CGI$PATH[1,1] # "/" THEN CGI$PATH = "/":CGI$PATH      END ELSE CGI$PATH = "/dbc"** Extract REST parameters*      LOCATE "PATH_INFO" IN VARS SETTING POS THEN        PATH = VALS<POS>        IF PATH[1,1] = '/' THEN PATH = PATH[2,9999]        Y = INDEX(PATH, '/', 2)        IF Y > 0 THEN          CGI$RESTPARAMS = PATH[Y + 1, 99999]          CONVERT '/' TO @AM IN CGI$RESTPARAMS        END      END    END** Clear the out buffer and set some generic vars*    SESSION$CONTENT.SENT = 0** LOGTO the account containing the resource, if not the current account*    IF RSRC.ACCOUNT <> '' THEN      IF OCONV(RSRC.ACCOUNT, 'MCU') = OCONV(@WHO, 'MCU') THEN        RSRC.ACCOUNT = ''      END ELSE        IF OCONV(RSRC.ACCOUNT, 'MCU') = OCONV(@PATH, 'MCU') THEN          RSRC.ACCOUNT = ''        END      END    END    IF RSRC.ACCOUNT <> '' THEN      ACCT.FROM = @PATH      EXECUTE 'LOGTO ':RSRC.ACCOUNT CAPTURING DUMMY      ACCT.TO = @PATH      IF ACCT.FROM = ACCT.TO THEN* LOGTO failed!               STATUS.CODE = 404        ERR = 'Resource account unavailable'        GOTO SEND.ERROR      END    END** Run the controller program for the resource*    PRINT    PRINT "700 WDB-START"    IF WDB.DEBUG THEN      EXECDUR = ''      IF RSRC.PROGRAM <> '' THEN        DBG.ID = 'R/':RSRC.PROGRAM:'/':UNIQUE.ID      END ELSE        DBG.ID = 'R/':RSRC.CONTROLLER:'/':UNIQUE.ID      END      GOSUB CREATE.DEBUG.REC      EXECSTART = SYSTEM(12)      EXECUTE RSRC.CONTROLLER:' ':UNIQUE.ID CAPTURING RESPONSE      EXECDUR = SYSTEM(12) - EXECSTART      DELETE F.WDB.DEBUG, DBG.ID      DBG.ID = 'C':DBG.ID[2, LEN(DBG.ID)]      GOSUB UPDATE.DEBUG.REC      N = DCOUNT(RESPONSE, @AM)      FOR I = 1 TO N        PRINT RESPONSE<I>      NEXT I    END ELSE      EXECUTE RSRC.CONTROLLER:' ':UNIQUE.ID    END** Wrap up*    * this call has been moved to MVDB.INIT: CALL WEB.FLUSH    PRINT "800 WDB-COMPLETE"    DELETE Q, UNIQUE.ID    IF LOGGING > 1 THEN      LOG.REC<4> = SYSTEM(12) ;* END TIME      LOG.REC<5> = LOG.REC<4> - LOG.REC<3>      LOG.REC<7> = 1 ;* this is a request      GOSUB UPDATE.LOG    END  END ELSE    GOSUB APPEND.REC    PRINT    PRINT "700 WDB-START"    PRINT "800 WDB-COMPLETE"  ENDEND ELSE  IF (ONCOM = COMCOUNT) OR (ONCOM = 1 AND VAR.STRING = '%%') THEN* Final (or only) command part has been received - log the error now    IF LOGGING THEN      LOG.REC<1> = RESOURCE.NAME      LOG.REC<2> = DATE()      LOG.REC<3> = SYSTEM(12)      LOG.REC<6> = COMCOUNT      LOG.REC<7> = 2 ;* this is an error      BEGIN CASE        CASE RSRC.TYPE = ''          LOG.REC<8> = 'Undefined resource'        CASE RSRC.TYPE <> 'P'          LOG.REC<8> = 'Invalid resource'        CASE NOT(RSRC.ENABLED)          LOG.REC<8> = 'Disabled resource'        CASE 1          LOG.REC<8> = 'Unknown error'      END CASE      GOSUB UPDATE.LOG    END    STATUS.CODE = 404    ERR = 'Invalid Resource'    GOSUB SEND.ERROR  END ELSE    PRINT    PRINT "700 WDB-START"    PRINT "800 WDB-COMPLETE"  ENDENDSTOP*SEND.ERROR:*PRINTPRINT "700 WDB-START"IF STATUS.CODE > 0 THEN  PRINT 'X-MVDB-STATUS: ':STATUS.CODEENDPRINT '500 ERROR ':ERRPRINT "800 WDB-COMPLETE"STOP*----------APPEND.REC:*----------READU QSTR FROM Q, UNIQUE.ID ELSE QSTR = ''QSTR<ONCOM> = VAR.STRINGWRITE QSTR ON Q, UNIQUE.IDRETURN*----------UPDATE.LOG:*----------*UV*LOG.ID = SYSTEM(19)LOG.ID = (DATE() 'R%5'):(SYSTEM(12) 'R%8'):(RND(1000) 'R%4') ;*UV* we need a unique ID (this is not guaranteed unique, but should suffice)WRITE LOG.REC ON F.LOG, LOG.IDRETURN*----------CREATE.DEBUG.REC:*----------DBGREC = ''DBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_PORT> = FIELD(OCONV('','U50BB'),' ',1) ;*PortDBGREC<WDBG_HANDLER> = HANDLER.NAMEDBGREC<WDBG_RESOURCE> = RESOURCE.NAMEDBGREC<WDBG_CONTROLLER> = RSRC.CONTROLLERDBGREC<WDBG_PROGRAM> = RSRC.PROGRAMDBGREC<WDBG_REQUEST_ID> = UNIQUE.IDLOCATE "REQUEST_METHOD" IN VARS SETTING POS THEN  DBGREC<WDBG_METHOD> = VALS<POS>ENDLOCATE "PATH_INFO" IN VARS SETTING POS THEN  DBGREC<WDBG_PATH> = VALS<POS>ENDLOCATE "REMOTE_ADDR" IN VARS SETTING POS THEN  DBGREC<WDBG_REMOTE_ADDR> = VALS<POS>END* save headers variablesDBGREC<WDBG_HEADER_VARS> = LOWER(CGI$HEADERVARS)DBGREC<WDBG_HEADER_VALS> = LOWER(CGI$HEADERVALS)IF CGI$APPSVR.ID <> '' THEN  N = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM) + 1  DBGREC<WDBG_HEADER_VARS, N> = 'APPSVR_ID'  DBGREC<WDBG_HEADER_VALS, N> = CGI$APPSVR.IDEND* save form variablesDBGREC<WDBG_CGI_VARS> = LOWER(CGI$VARS)DBGREC<WDBG_CGI_VALS> = LOWER(CGI$VALS)* Request bodyDBGREC<WDBG_BODY> = CHANGE(CHANGE(CGI$BODY, CHAR(13), ''), CHAR(10), @VM)* Session variablesTEMPVARS = OCONV(CGI$CVARS, 'MCU')LOCATE 'SESSIONID' IN TEMPVARS SETTING POS THEN  SID = CGI$CVALS<POS>  SREC = ''  OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN    READ SREC FROM F.WEB.SESSION, SID ELSE NULL  END  DBGREC<WDBG_SESSION_ID> = SID  DBGREC<WDBG_SESSION_VARS> = SREC<1>  DBGREC<WDBG_SESSION_VALS> = SREC<2>  DBGREC<WDBG_SESSION_DATE> = SREC<3>  DBGREC<WDBG_SESSION_TIME> = SREC<4>END* save debug info before processing requestWRITE DBGREC ON F.WDB.DEBUG, DBG.IDRETURN*----------UPDATE.DEBUG.REC:*----------DBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_DURATION> = EXECDURIF STATUS.CODE > 0 THEN DBGREC<WDBG_STATUS> = STATUS.CODE ELSE DBGREC<WDBG_STATUS> = 200* save response headersNUM.VARS = 0EOH = INDEX(RESPONSE, @AM:@AM, 1) ;* headers end at first blank line in responseIF EOH = 0 THEN EOH = LEN(RESPONSE) + 1N = DCOUNT(RESPONSE[1, EOH - 1], @AM)FOR I = 1 TO N  HDR.LINE = RESPONSE<I>  HDR.VAR = FIELD(HDR.LINE, ':', 1)  HDR.VAL = TRIMF(HDR.LINE[COL2() + 1, LEN(HDR.LINE)])  M = LEN(HDR.VAR)  FOR J = 1 TO M    IF NOT(HDR.VAR[J,1] MATCHES '1A') AND HDR.VAR[J,1] <> '-' THEN      HDR.VAR = ''      EXIT    END  NEXT J  IF HDR.LINE[LEN(HDR.VAR) + 1, 1] <> ':' THEN HDR.VAR = ''  IF HDR.VAR = '' THEN    NUM.VARS += 1    DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = '_BAD_'    DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.LINE ;* invalid header line!  END ELSE    NUM.VARS += 1    DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = HDR.VAR    DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.VAL  ENDNEXT I* save response contentIF EOH + 2 <= LEN(RESPONSE) THEN  DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(RESPONSE[EOH + 2, LEN(RESPONSE)])ENDWRITE DBGREC ON F.WDB.DEBUG, DBG.IDRETURN*END0002D0SUB.GET.NEXT.ID0c2SUBROUTINE SUB.GET.NEXT.ID(NewID,F.CONTROL)** Copyright (c) 2020 Zumasys, Inc. All rights reserved.* Description: generate a (probably) unique ID based on current time, date and counter** Pass MVDB.CONTROL file variable, returns new ID* Up to 10,000 IDs can be generated per second without collision* Returned ID format: YYYYMMDDHHMMSSNNNN*D = DATE()T = TIME()HHMMSS = OCONV(OCONV(T,'MTS'),'MCN')YYYY = OCONV(D,'DY')IF LEN(YYYY) < 4 THEN YYYY=YYYY+2000MM = OCONV(D,'DM') 'R%%'DD = OCONV(D,'DD') 'R%%'CTR = 1READVU CTR FROM F.CONTROL,'NEXT.ID.COUNTER',1 ELSE CTR = 1ENDWRITE CTR+1 ON F.CONTROL,'NEXT.ID.COUNTER' ON ERROR NULLENDNewID = YYYY:MM:DD:HHMMSS:(CTR 'R%%%%')RETURNEND0002A6SUB.LOG.DEBUG.INFO0c2SUBROUTINE SUB.LOG.DEBUG.INFO(WIDGET.NAME,MESSAGE)** Copyright (c) 2020 Zumasys, Inc. All rights reserved.** Pass widget name and message to log. When widget is placed in debug mode,* up to 100 lines of log content are displayed.*EQU MAX.LINES TO 100*OPEN 'WDB.DEBUG' TO F.WDB.DEBUG THEN  READ EXTRA.INFO FROM F.WDB.DEBUG,WIDGET.NAME ELSE EXTRA.INFO = ''  EXTRA.INFO<-1> = TIMEDATE():' ':MESSAGE  N = DCOUNT(EXTRA.INFO,@AM)  IF N > MAX.LINES THEN    * DISCARD ALL EXCEPT LAST 100 LINES    M = N - MAX.LINES    K = INDEX(EXTRA.INFO,@AM,M)    EXTRA.INFO = EXTRA.INFO[K+1,999999]  END  WRITE EXTRA.INFO ON F.WDB.DEBUG,WIDGET.NAMERETURNEND000677REBUILD.URL.STRING0c2SUBROUTINE REBUILD.URL.STRING(URL.STRING)* 12-15-15* 9-23-16 TPARKER - LOGIC TOTALLY REWRITTENINCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEURL.STRING=''*** NEED CGI$VARS ALPHABETIZED TO INSURE URL ALWAYS IN SAME ORDER** BUT EXCLUDE THOSE ADDED BY MVAPPSVR*MAX.VARS=DCOUNT(CGI$VARS,@AM)ALPHA.VARS=''ALPHA.VALS=''FOR VAR.CNTR = 1 TO MAX.VARS   var=CGI$VARS<VAR.CNTR>   BEGIN CASE      CASE var = 'SIMPLEWEB_MODULE'; var=''      CASE var = 'REMOTE_ADDR'; var=''      CASE var = 'REMOTE_HOST'; var=''      CASE var = 'REMOTE_USER'; var=''      CASE var = 'REQUEST_METHOD'; var=''      CASE var = 'PROTOCOL_VERSION'; var=''      CASE var = 'HTTP_REFERER'; var=''      CASE var = 'HTTP_USER_AGENT'; var=''      CASE var = 'HTTP_HOST'; var=''      CASE var = 'HTTP_ACCEPT'; var=''      CASE var = 'HTTP_COOKIE'; var=''      CASE var = 'HTTP_CONNECTION'; var=''      CASE var = 'SIMPLEWEB_HANDLER'; var=''      CASE var = 'PATH_INFO'; var=''      CASE var = 'CONTENT_TYPE'; var=''      CASE var = 'SERVER_PORT'; var=''      CASE var = 'INSTALL_PATH'; var=''      CASE var = 'APPSVR_ID'; var=''      CASE var = '__body__'; var=''      CASE 1; NULL   END CASE   IF var <> '' THEN      val=CGI$VALS<VAR.CNTR>      LOCATE var IN ALPHA.VARS BY "AL" SETTING POS ELSE NULL      ALPHA.VARS=INSERT(ALPHA.VARS,POS,0,0,var)      ALPHA.VALS=INSERT(ALPHA.VALS,POS,0,0,val)    END NEXT VAR.CNTRMAX.VAR.CNTR=DCOUNT(ALPHA.VARS,@AM)FOR VAR.CNTR = 1 TO MAX.VAR.CNTR   var=ALPHA.VARS<VAR.CNTR>   val=ALPHA.VALS<VAR.CNTR>   URL.STRING:='&':var:'=':val NEXT VAR.CNTRURL.STRING=URL.STRING[2,999999]RETURNEND0023EFMVDB.INIT0c2*** Copyright (C) 2020 Zumasys, Inc., All Rights Reserved* Description: perform common dashboard startup functions** 9-23-16 TPARKER MODIFICATIONS TO ELIMINATE GO_BACK AND REPLACE WITH*         STANDARD BROWSER BACK BUTTION** 10-25-16 Peter Schellenbach - moved this out of INIT.WWW and into*          this new MVDB.INIT program to handle all MVDB-specific*          initialization, then launch individual MVDB resource*          programs (MVDB.MAIN, MVDB.ADMIN, MVDB.WEB.ED).**          Additional browser back button fixes:*            - do not save and restore SESSION as this reflects the login status*              and after a logout, using browser back and forward, then logging*              back in may cause unexpected logout by using browser back or forward.*              Only current_db is restored when backing up.*            - push current state before letting MVDB.MAIN process the request.*              Since any Go button click or link click only affects a single widget,*              only WIDGET.USER.DATA for that specific needs to be pushed. The widget*              can be identified by examining CGI variables 'sw' and 'udview' at the*              next level. We do not know which widget state to save at level 'n'*              until we receive a request for level 'n+1' which specifies user input*              or drilldown for a specific widget. At this time the widget state*              is saved for the previous stack level.*            - no need to save and restore CGI variables, as these are all supplied*              in the query string in the URL, and when going back up the stack,*              the URL and query string matches the stack, so the CGI variables*              are identical.*            - include the PATH_INFO in the URL when pushing on stack, since we*              need to handle other resources (MVDB.ADMIN, MVDB.WEB.ED) besides*              MVDB.MAIN.*EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*OPEN 'WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, 'WEB.SESSION'OPEN 'WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS' ;** this is in /WWW/ common **OPEN 'MVDB.UDATA' TO F.MVDB.UDATA ELSE STOP 201, 'MVDB.UDATA'*IF CGI$RESOURCE.NAME = '' THEN CGI$RESOURCE.NAME = 'MVDB.MAIN' ;* safe default*MAT GLOBAL.INFO = ''** Combine headers & cgi vars (MVDB programs don't use CGI$HEADERVARS/CGI$HEADERVALS*IF CGI$HEADERVARS <> "" THEN  IF CGI$VARS = "" THEN    CGI$VARS = CGI$HEADERVARS    CGI$VALS = CGI$HEADERVALS  END ELSE    NUM.HDR.VARS = COUNT(CGI$HEADERVARS, @AM)    NUM.HDR.VALS = COUNT(CGI$HEADERVALS, @AM)    IF NUM.HDR.VARS >= NUM.HDR.VALS THEN      * Since there may be missing (null) vals at end of CGI$HEADERVALS,      * add appropriate number of @AM to keep vars & vals in sync!      CGI$VARS = CGI$HEADERVARS : @AM : CGI$VARS      CGI$VALS = CGI$HEADERVALS : STR(@AM, NUM.HDR.VARS - NUM.HDR.VALS + 1) : CGI$VALS    END  ENDEND** Validate the HTTP method*METHOD = 'UNKNOWN'LOCATE "REQUEST_METHOD" IN CGI$VARS SETTING POS THEN METHOD = OCONV(CGI$VALS<POS>, 'MCU')IF METHOD <> 'GET' AND METHOD <> 'POST' THEN  PRINT '500 ERROR Unsupported HTTP Method ':METHOD  STOPEND** Load the session ID if there is one*CALL GET.SESSION.ID(SESSION$ID, CGI$VARS, CGI$VALS)IF (SESSION$ID = '') THEN  CALL CREATE.SESSION(SESSION$ID)  CALL SET.COOKIE("sessionid=":SESSION$ID)END** How many active users are online?*SELECT F.WEB.SESSIONUSER.COUNT = 0LOOP  READNEXT WSID ELSE EXIT  READ SREC FROM F.WEB.SESSION, WSID ELSE CONTINUE  LOCATE "userid" IN SREC<1> SETTING UPOS THEN USER.COUNT += 1REPEATPRINT "Client-Count: ":USER.COUNT** Browser "back" button handler*READ DD.STACK FROM F.MVDB.UDATA, SESSION$ID:'$DD.STACK' ELSE DD.STACK=''NEW.STACK.ITEM = 1MAX.DDS = 0CALL REBUILD.URL.STRING(URL.STRING)LOCATE "PATH_INFO" IN CGI$VARS SETTING POS THEN  URL.PATH =  CGI$VALS<POS>  IF URL.PATH = "" OR URL.PATH = "/" THEN URL.PATH = CGI$PATH:"/MVDB.MAIN"  IF URL.PATH[1,1] # "/" THEN URL.PATH = "/":URL.PATHEND ELSE URL.PATH = "/dbc/MVDB.MAIN"URL = URL.PATH:'?':URL.STRING**W$GOBACK=0***CALL SUB.LOG.DEBUG.INFO('MVDB.INIT','BEGIN REQUEST, SESSION=':SESSION$ID:' URL=':URL:' CUR STACK LEVEL=':DCOUNT(DD.STACK,AM):' METHOD=':METHOD)*IF DD.STACK <> '' THEN  MAX.DDS = DCOUNT(DD.STACK,AM)  IF INDEX(DD.STACK,URL,1) THEN    DD.POS = MAX.DDS    LOOP      IF DD.POS THEN        IF URL = DD.STACK<DD.POS> THEN          NEW.STACK.ITEM = 0        END      END    UNTIL NOT(DD.POS) OR NOT(NEW.STACK.ITEM) DO      DD.POS = DD.POS - 1    REPEAT    IF DD.POS THEN*** BACK BUTTON USED SO POP OFF PREVIOUS DRILLDOWNS*      GOSUB PURGE.URLS.AFTER.BACK      READ GUD FROM F.MVDB.UDATA, SESSION$ID:'$DD.':DD.POS:'.GUD' ELSE GUD=''      WRITE GUD ON F.MVDB.UDATA, SESSION$ID:'$UG'      READ WUD FROM F.MVDB.UDATA, SESSION$ID:'$DD.':DD.POS:'.WUD' ELSE WUD = ''      URL.WIDGET = WUD<1>      IF URL.WIDGET <> 'NULL' THEN        WRITE DELETE(WUD,1,0,0) ON F.MVDB.UDATA, SESSION$ID:'$':URL.WIDGET      END      READ SESSION FROM F.MVDB.UDATA, SESSION$ID:'$DD.':DD.POS:'.SESSION' ELSE SESSION=''      LOCATE "userid" IN SESSION<1> SETTING POS THEN userid = SESSION<2,POS> ELSE userid = ''      IF userid <> '' THEN* Restore current dashboard from drilldown stack, but leave other session variables alone        LOCATE "current_db" IN SESSION<1> SETTING POS THEN current_db = SESSION<2,POS> ELSE current_db = ''        CALL PUT.SESSION.VAR("current_db", current_db)      END**        W$GOBACK=1    END  ENDEND*IF NEW.STACK.ITEM THEN* POST-REDIRECT-GET pattern causes extra GET after POST, but only* the GET is on browser history, so skip duplicate URLs based on* special CGI variables 'dblogin' and 'dbprg' (note: dbprg is not* being used at this time).  LOCATE "dblogin" IN CGI$VARS SETTING POS THEN dblogin = CGI$VALS<POS> ELSE dblogin = 0  LOCATE "dbprg" IN CGI$VARS SETTING POS THEN dbprg = CGI$VALS<POS> ELSE dbprg = 0  IF NOT(dblogin) AND NOT(dbprg) THEN* Push the new URL and session state onto the stack    MAX.DDS += 1    DD.STACK<MAX.DDS> = URL* Save global user before running request    READ GUD FROM F.MVDB.UDATA, SESSION$ID:"$UG" ELSE GUD = ''    WRITE GUD ON F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS:'.GUD'* Get widget name from request CGI variables & save widget user data before running request    GOSUB GET.URL.WIDGET    IF URL.WIDGET = '' THEN      DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS-1:'.WUD'    END ELSE      READ WUD FROM F.MVDB.UDATA, SESSION$ID:'$':URL.WIDGET ELSE WUD = ''      WRITE INSERT(WUD,1,0,0,URL.WIDGET) ON F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS-1:'.WUD'    END    READ SESSION FROM F.WEB.SESSION, SESSION$ID ELSE SESSION = ''    IF SESSION = '' THEN      DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS:'.SESSION'    END ELSE      WRITE SESSION ON F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS:'.SESSION'    END  ENDENDIF DD.STACK = '' THEN  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.STACK'END ELSE  WRITE DD.STACK ON F.MVDB.UDATA, SESSION$ID:'$DD.STACK'END** Run the MVDB program for this resource and check for failure*LOOP  TRY.AGAIN = 0  APP.FAILURE = 0  EXECUTE CGI$RESOURCE.NAME  IF GLOBAL.INFO(100) # 1 THEN* The dashboard controller quit unexpectedly. If there is a running* widget, it is likely causing the failure. Fail it, and try again.    APP.FAILURE = 1    CALL GET.SESSION.VAR("running_widget",FAILED.WIDGET)    IF FAILED.WIDGET # "" THEN      CALL PUT.SESSION.VAR("running_widget","")      CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS)      LOCATE FAILED.WIDGET IN FAILED.WIDGETS SETTING FWPOS ELSE        FAILED.WIDGETS<-1> = FAILED.WIDGET        CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)        TRY.AGAIN = 1      END    END    LOCATE "unfail_widget" IN CGI$VARS SETTING DPOS THEN      CGI$VARS = DELETE( CGI$VARS, DPOS, 0, 0 )      CGI$VALS = DELETE( CGI$VALS, DPOS, 0, 0 )    END  ENDWHILE TRY.AGAIN DO REPEATIF APP.FAILURE THEN  CALL WEB.SEND("An application error occured in program ":CGI$RESOURCE.NAME:".<hr>")  HTML = '<table><tr><th>Variable</th><th>Value</th></tr>'  FOR X = 1 TO DCOUNT( CGI$VARS, @AM )    HTML<-1> = '<tr><td>':CGI$VARS<X>:'</td><td>':CGI$VALS<X>:'</td></tr>'  NEXT X  HTML<-1> = '</table>'  CALL WEB.SEND(HTML)END* Final WEB.FLUSH call moved from WDB.INIT to here (makes deploying MVConnect to other accounts simpler)CALL WEB.FLUSH** Done*STOP** SUPPORT ROUTINES FOR BACK BUTTON HANDLER*PURGE.URLS.AFTER.BACK:*FIRST.PURGE = DD.POS + 1IF FIRST.PURGE > MAX.DDS THEN RETURNFOR PURGE.CNTR = MAX.DDS TO FIRST.PURGE STEP -1  DD.STACK = DELETE(DD.STACK,PURGE.CNTR,0,0)  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':PURGE.CNTR:'.GUD'  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':PURGE.CNTR:'.WUD'  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':PURGE.CNTR:'.SESSION'NEXT PURGE.CNTRRETURN*GET.URL.WIDGET:*URL.WIDGET='NULL'LOCATE "sw" IN CGI$VARS SETTING POS THEN  URL.WIDGET = CGI$VALS<POS>END ELSE  LOCATE "udview" IN CGI$VARS SETTING POS THEN    URL.WIDGET = CGI$VALS<POS>  ENDENDRETURN*END000103SWAP0c2SUBROUTINE SWAP(string,SUB1,SUB2)**#MAKE# RL $OPTIONS D3IDX.POS = 1LOOP  POS = INDEX( string, SUB1, IDX.POS )WHILE POS DO  string = string[1,POS-1]:SUB2:string[POS+LEN(SUB1),LEN(string)]  IDX.POS = IDX.POS + COUNT(SUB2,SUB1)REPEATRETURNEND016F3DMVBP.FORMS0c0016F29listpeqs.html0c2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Print Queue</title><style type="text/css">html {margin:0;padding:0;}body{margin:0;padding:0;font-family:Arial, Helvetica, sans-serif;font-size:12px;background: url(/db/images/background_body.gif) 0 0 repeat-x;}/* *html body {height:100%;}*/body.popup{margin:5px 5px 5px 5px;}p, td, th{font-size:1em;}pre {font-size:1em;}#container {position:relative;margin:0 auto;padding:15px 20px 0 20px;}#header {}#maincontent{background: url(/db/images/background_maincontent.gif) 0 0 no-repeat;padding:0 0 0 20px;margin:0 0 0 0;position:relative;}#content {background: url(/db/images/background_maincontent.gif) 100% 0 no-repeat;padding:5px 20px 50px 0;position:relative;min-height:320px;_height:320px;}/* =HEADER STYLES=================================================================*/#header #navbar {position:absolute;top:0;right:-1px;height:30px;list-style:none;margin:0;padding:0 5px 0 0;background: url(/db/images/background_navbar.gif) 0 0 repeat-x;}#header #navbar li {height:10px;float:left;position:relative;}#header #navbar li.myreports {background: url(/db/images/background_navbarleft.gif) 0 0 no-repeat;padding-left:15px;}#header #navbar li.completed {background: url(/db/images/background_navbarright.gif) 100% 0 no-repeat;padding-right:15px;}#header #navbar li.admin {background: url(/db/images/background_tabfirst.gif) 0 12px no-repeat;padding-left:15px;}#header #navbar li.admin a{background: url(/db/images/background_tabfirst.gif) 100% 12px no-repeat;margin:0;padding:7px 12px 0 3px;line-height:24px;height:24px;color: #333333;}#header #navbar li.profile {background: url(/db/images/background_tabfirst.gif) 0 12px no-repeat;padding-left:15px;}body.admin #header #navbar li.profile {background: url(/db/images/background_tab.gif) 0 12px no-repeat;}#header #navbar li.profile a{background: url(/db/images/background_tabright.gif) 100% 12px no-repeat;padding:7px 15px 0 0;margin:0;line-height:24px;height:24px;color: #333333;}#header #navbar li a {float:left;height:32px;line-height:32px;margin:0;padding: 0 8px;text-decoration:none;}#header #navbar li a:hover {text-decoration:underline}#header #navbar li.active a {background: url(/db/images/background_navbaractive.gif) 50% 0 no-repeat;height:30px;font-weight:normal;}#header #navbar a {color: #FFFFFF;}#header #logo {position:absolute;left:10px;top:20px;}#header #welcome {position:absolute;right:15px;top:40px;font-size:.9em;color:#333333;}#errors, #messages {padding:20px 20px 20px 40px;border:1px solid #CCCCCC;background: #EEEEEE;clear:both;margin-bottom:40px;position:relative;}/* =FOOTER STYLES=================================================================*/#footer {text-align:center;font-size:.8em;color: #999999;clear:both;}#footer a {color: #999999;text-decoration:none;}/* =HEADER STYLES=================================================================*/h1 {font-weight:normal;font-size:26px;letter-spacing:-1px;margin:0 0 10px 0;}h2 {font-size:22px;margin:10px 0 0 0;font-weight:normal;}h3 {margin:15px 0 5px 0;font-weight:normal;font-size:16px;border-bottom: 1px solid #999999;position:relative;}h4 {margin:0;font-weight:normal;font-size:12px;}/* =BASIC STYLES=================================================================*/p{margin: 0 0 10px 0;line-height:1.3em;}label{font-weight:bold;}/* =TABLE STYLES=================================================================*/.listing{border:1px solid #cccccc;border-collapse:collapse;clear: both;width:100%;margin: 0 0 5px 0;}.listing th, .form .listing th {background-color:#cccccc;padding:5px;text-align:left;vertical-align:top;border-bottom: 1px solid #cccccc;color: #333333;}table.sortable th a{color: #333333;text-decoration:none;}.listing td, .form .listing td{padding:5px;border-bottom:1px solid #cccccc;vertical-align:top;}.even td, .even th{background: #EEEEEE;}.odd td, .odd th{background: #FFFFFF;}.even .odd th, .even .odd td {background: #FFFFFF;}fieldset {padding:0 10px 10px 10px;margin: 0 0 10px 0;position:relative;}legend {margin-top:5px;font-size:22px;margin-bottom:10px;font-weight:normal;color: #000000;letter-spacing:-1px;}.form {border-collapse:collapse;margin: 0;padding: 0;}.form th{text-align:right;padding:5px 0 5px 5px;background:none;vertical-align:top;}.form td{text-align:left;padding:3px;vertical-align:top;}span.button button {background: url(/db/images/background_button.gif) 100% 0 no-repeat;border:none;padding:0 5px 0 0;height:23px;color:#333333;}span.button {background: url(/db/images/background_button.gif) 0 0 no-repeat;padding: 0 0 0 5px;}html>body span.button {padding: 5px 0 5px 5px;}input.text {border: 1px solid #999999;}input.date {width:55px;background: url(/db/images/icon_calendar.gif) 2px 50% no-repeat;padding-left:20px;border: 1px solid #999999;}/* =PAGING STYLES=================================================================*/.paging{text-align:right;}.wizardtab {position:relative;}.tabnav {text-align:right;padding-top:10px;}.note {font-size:smaller;color: #666666;margin:0;}a:link, a:visited {text-decoration: underline;color: #ff8125;}a:hover {text-decoration: underline;color: #333;}a img {border:none;}#printqueue tr:hover td, #printqueue tr.hover td {background:#CCCCCC;}#printqueue tr:hover .preview, #printqueue tr.hover .preview {display:block;z-index:200;}.preview {position:absolute;right:25px;top:25px;margin-top:-5px;border-top:1px solid #666666;border-right:1px solid #666666;border-left:1px solid #666666;font-size:.8em;padding:20px 20px 10px 20px;background: url(/db/images/background_preview.gif) 0 100% repeat-x;display:none;_width: 60em;min-width:60em;}a.thumbnail pre {float:left;margin:5px;border-top:1px solid #666666;border-right:1px solid #666666;border-left:1px solid #666666;font-size:4px;padding:5em 5em 4em 5em;background: url(/db/images/background_preview.gif) 0 100% repeat-x;position:relative;}a.thumbnail {text-decoration:none;color:#666666;}a.thumbnail:hover {color:#000000}.queued td{background:#FFCC33;}div.page {background: #FFFFFF;border-top:1px solid #BBBBBB;border-right:1px solid #999999;border-left:1px solid #333333;border-bottom:1px solid #000000;margin:10px 0;padding:20px;float:left;clear:both;_width:60em;min-width:60em;font-size:.9em;}.printDialog {position:absolute; top:5px; right:0; width:220px; background:#FFFFFF; border: 1px solid #CCCCCC; border-top:none;}.printDialog div {padding:0 5px 5px 5px;}.even .printDialog {background: #EEEEEE;}tr.hover .printDialog, tr:hover .printDialog {background:#CCCCCC;z-index:201;}#alerts {margin: 50px 0 -30px 0;}form {margin: 0;padding: 0;}#search_box {margin: 0;position: absolute;top: 20px;right: 20px;text-align: right;}</style><script><!--var BaseURL = "/";--></script><script type="text/javascript" language="javascript">/*Behaviour v1.1 by Ben Nolan, June 2005. Based largely on the workof Simon Willison (see comments by Simon below).Description:Uses css selectors to apply javascript behaviours to enableunobtrusive javascript in html documents.Usage:   var myrules = {'b.someclass' : function(element){element.onclick = function(){alert(this.innerHTML);}},'#someid u' : function(element){element.onmouseover = function(){this.innerHTML = "BLAH!";}}};Behaviour.register(myrules);License:My stuff is BSD licensed. Not sure about Simon's.More information:http://ripcord.co.nz/behaviour/*/   var Behaviour = {list : new Array,register : function(sheet){Behaviour.list.push(sheet);},start : function(){Behaviour.addLoadEvent(function(){Behaviour.apply();});},apply : function(){for (h=0;sheet=Behaviour.list[h];h++){for (selector in sheet){list = document.getElementsBySelector(selector);if (!list){continue;}for (i=0;element=list[i];i++){sheet[selector](element);}}}},addLoadEvent : function(func){var oldonload = window.onload;if (typeof window.onload != 'function') {window.onload = func;} else {window.onload = function() {oldonload();func();}}}}Behaviour.start();/*The following code is Copyright (C) Simon Willison 2004.document.getElementsBySelector(selector)- returns an array of element objects from the current documentmatching the CSS selector. Selectors can contain element names, class names and ids and can be nested. For example:elements = document.getElementsBySelect('div#main p a.external')Will return an array of all 'a' elements with 'external' in their class attribute that are contained inside 'p' elements that are contained inside the 'div' element which has id="main"New in version 0.4: Support for CSS2 and CSS3 attribute selectors:See http://www.w3.org/TR/css3-selectors/#attribute-selectorsVersion 0.4 - Simon Willison, March 25th 2003-- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows-- Opera 7 fails */function getAllChildren(e) {return e.all ? e.all : e.getElementsByTagName('*');}document.getElementsBySelector = function(selector) {if (!document.getElementsByTagName) {return new Array();}var tokens = selector.split(' ');var currentContext = new Array(document);for (var i = 0; i < tokens.length; i++) {token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;if (token.indexOf('#') > -1) {var bits = token.split('#');var tagName = bits[0];var id = bits[1];var element = document.getElementById(id);if (tagName && element.nodeName.toLowerCase() != tagName) {return new Array();}currentContext = new Array(element);continue; // Skip to next token}if (token.indexOf('.') > -1) {var bits = token.split('.');var tagName = bits[0];var className = bits[1];if (!tagName) {tagName = '*';}var found = new Array;var foundCount = 0;for (var h = 0; h < currentContext.length; h++) {var elements;if (tagName == '*') {elements = getAllChildren(currentContext[h]);} else {elements = currentContext[h].getElementsByTagName(tagName);}for (var j = 0; j < elements.length; j++) {found[foundCount++] = elements[j];}}currentContext = new Array;var currentContextIndex = 0;for (var k = 0; k < found.length; k++) {if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) {currentContext[currentContextIndex++] = found[k];}}continue; // Skip to next token}if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {var tagName = RegExp.$1;var attrName = RegExp.$2;var attrOperator = RegExp.$3;var attrValue = RegExp.$4;if (!tagName) {tagName = '*';}var found = new Array;var foundCount = 0;for (var h = 0; h < currentContext.length; h++) {var elements;if (tagName == '*') {elements = getAllChildren(currentContext[h]);} else {elements = currentContext[h].getElementsByTagName(tagName);}for (var j = 0; j < elements.length; j++) {found[foundCount++] = elements[j];}}currentContext = new Array;var currentContextIndex = 0;var checkFunction; // This function will be used to filter the elementsswitch (attrOperator) {case '=': // EqualitycheckFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };break;case '~': // Match one of space seperated words checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };break;case '|': // Match start with value followed by optional hyphencheckFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };break;case '^': // Match starts with valuecheckFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };break;case '$': // Match ends with value - fails with "Warning" in Opera 7checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };break;case '*': // Match ends with valuecheckFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };break;default :checkFunction = function(e) { return e.getAttribute(attrName); };}currentContext = new Array;var currentContextIndex = 0;for (var k = 0; k < found.length; k++) {if (checkFunction(found[k])) {currentContext[currentContextIndex++] = found[k];}}continue; // Skip to next token}if (!currentContext[0]){return;}tagName = token;var found = new Array;var foundCount = 0;for (var h = 0; h < currentContext.length; h++) {var elements = currentContext[h].getElementsByTagName(tagName);for (var j = 0; j < elements.length; j++) {found[foundCount++] = elements[j];}}currentContext = found;}return currentContext;}/* That revolting regular expression explained /^(\w+)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/\---/  \---/\-------------/    \-------/|      |         |               ||      |         |           The value|      |    ~,|,^,$,* or =|   Attribute Tag*/</script><script type="text/javascript" language="javascript">/*  Prototype JavaScript framework, version 1.4.0*  (c) 2005 Sam Stephenson <sam@conio.net>**  THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff*  against the source tree, available from the Prototype darcs repository.**  Prototype is freely distributable under the terms of an MIT-style license.**  For details, see the Prototype web site: http://prototype.conio.net/*/*--------------------------------------------------------------------------*/var Prototype = {Version: '1.4.0',ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',emptyFunction: function() {},K: function(x) {return x}}var Class = {create: function() {return function() {this.initialize.apply(this, arguments);}}}var Abstract = new Object();Object.extend = function(destination, source) {for (property in source) {destination[property] = source[property];}return destination;}Object.inspect = function(object) {try {if (object == undefined) return 'undefined';if (object == null) return 'null';return object.inspect ? object.inspect() : object.toString();} catch (e) {if (e instanceof RangeError) return '...';throw e;}}Function.prototype.bind = function() {var __method = this, args = $A(arguments), object = args.shift();return function() {return __method.apply(object, args.concat($A(arguments)));}}Function.prototype.bindAsEventListener = function(object) {var __method = this;return function(event) {return __method.call(object, event || window.event);}}Object.extend(Number.prototype, {toColorPart: function() {var digits = this.toString(16);if (this < 16) return '0' + digits;return digits;},succ: function() {return this + 1;},times: function(iterator) {$R(0, this, true).each(iterator);return this;}});var Try = {these: function() {var returnValue;for (var i = 0; i < arguments.length; i++) {var lambda = arguments[i];try {returnValue = lambda();break;} catch (e) {}}return returnValue;}}/*--------------------------------------------------------------------------*/var PeriodicalExecuter = Class.create();PeriodicalExecuter.prototype = {initialize: function(callback, frequency) {this.callback = callback;this.frequency = frequency;this.currentlyExecuting = false;this.registerCallback();},registerCallback: function() {setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);},onTimerEvent: function() {if (!this.currentlyExecuting) {try {this.currentlyExecuting = true;this.callback();} finally {this.currentlyExecuting = false;}}}}/*--------------------------------------------------------------------------*/function $() {var elements = new Array();for (var i = 0; i < arguments.length; i++) {var element = arguments[i];if (typeof element == 'string')element = document.getElementById(element);if (arguments.length == 1)return element;elements.push(element);}return elements;}Object.extend(String.prototype, {stripTags: function() {return this.replace(/<\/?[^>]+>/gi, '');},stripScripts: function() {return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');},extractScripts: function() {var matchAll = new RegExp(Prototype.ScriptFragment, 'img');var matchOne = new RegExp(Prototype.ScriptFragment, 'im');return (this.match(matchAll) || []).map(function(scriptTag) {return (scriptTag.match(matchOne) || ['', ''])[1];});},evalScripts: function() {return this.extractScripts().map(eval);},escapeHTML: function() {var div = document.createElement('div');var text = document.createTextNode(this);div.appendChild(text);return div.innerHTML;},unescapeHTML: function() {var div = document.createElement('div');div.innerHTML = this.stripTags();return div.childNodes[0] ? div.childNodes[0].nodeValue : '';},toQueryParams: function() {var pairs = this.match(/^\??(.*)$/)[1].split('&');return pairs.inject({}, function(params, pairString) {var pair = pairString.split('=');params[pair[0]] = pair[1];return params;});},toArray: function() {return this.split('');},camelize: function() {var oStringList = this.split('-');if (oStringList.length == 1) return oStringList[0];var camelizedString = this.indexOf('-') == 0? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1): oStringList[0];for (var i = 1, len = oStringList.length; i < len; i++) {var s = oStringList[i];camelizedString += s.charAt(0).toUpperCase() + s.substring(1);}return camelizedString;},inspect: function() {return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'";}});String.prototype.parseQuery = String.prototype.toQueryParams;var $break    = new Object();var $continue = new Object();var Enumerable = {each: function(iterator) {var index = 0;try {this._each(function(value) {try {iterator(value, index++);} catch (e) {if (e != $continue) throw e;}});} catch (e) {if (e != $break) throw e;}},all: function(iterator) {var result = true;this.each(function(value, index) {result = result && !!(iterator || Prototype.K)(value, index);if (!result) throw $break;});return result;},any: function(iterator) {var result = true;this.each(function(value, index) {if (result = !!(iterator || Prototype.K)(value, index))throw $break;});return result;},collect: function(iterator) {var results = [];this.each(function(value, index) {results.push(iterator(value, index));});return results;},detect: function (iterator) {var result;this.each(function(value, index) {if (iterator(value, index)) {result = value;throw $break;}});return result;},findAll: function(iterator) {var results = [];this.each(function(value, index) {if (iterator(value, index))results.push(value);});return results;},grep: function(pattern, iterator) {var results = [];this.each(function(value, index) {var stringValue = value.toString();if (stringValue.match(pattern))results.push((iterator || Prototype.K)(value, index));})return results;},include: function(object) {var found = false;this.each(function(value) {if (value == object) {found = true;throw $break;}});return found;},inject: function(memo, iterator) {this.each(function(value, index) {memo = iterator(memo, value, index);});return memo;},invoke: function(method) {var args = $A(arguments).slice(1);return this.collect(function(value) {return value[method].apply(value, args);});},max: function(iterator) {var result;this.each(function(value, index) {value = (iterator || Prototype.K)(value, index);if (value >= (result || value))result = value;});return result;},min: function(iterator) {var result;this.each(function(value, index) {value = (iterator || Prototype.K)(value, index);if (value <= (result || value))result = value;});return result;},partition: function(iterator) {var trues = [], falses = [];this.each(function(value, index) {((iterator || Prototype.K)(value, index) ?trues : falses).push(value);});return [trues, falses];},pluck: function(property) {var results = [];this.each(function(value, index) {results.push(value[property]);});return results;},reject: function(iterator) {var results = [];this.each(function(value, index) {if (!iterator(value, index))results.push(value);});return results;},sortBy: function(iterator) {return this.collect(function(value, index) {return {value: value, criteria: iterator(value, index)};}).sort(function(left, right) {var a = left.criteria, b = right.criteria;return a < b ? -1 : a > b ? 1 : 0;}).pluck('value');},toArray: function() {return this.collect(Prototype.K);},zip: function() {var iterator = Prototype.K, args = $A(arguments);if (typeof args.last() == 'function')iterator = args.pop();var collections = [this].concat(args).map($A);return this.map(function(value, index) {iterator(value = collections.pluck(index));return value;});},inspect: function() {return '#<Enumerable:' + this.toArray().inspect() + '>';}}Object.extend(Enumerable, {map:     Enumerable.collect,find:    Enumerable.detect,select:  Enumerable.findAll,member:  Enumerable.include,entries: Enumerable.toArray});var $A = Array.from = function(iterable) {if (!iterable) return [];if (iterable.toArray) {return iterable.toArray();} else {var results = [];for (var i = 0; i < iterable.length; i++)results.push(iterable[i]);return results;}}Object.extend(Array.prototype, Enumerable);Array.prototype._reverse = Array.prototype.reverse;Object.extend(Array.prototype, {_each: function(iterator) {for (var i = 0; i < this.length; i++)iterator(this[i]);},clear: function() {this.length = 0;return this;},first: function() {return this[0];},last: function() {return this[this.length - 1];},compact: function() {return this.select(function(value) {return value != undefined || value != null;});},flatten: function() {return this.inject([], function(array, value) {return array.concat(value.constructor == Array ?value.flatten() : [value]);});},without: function() {var values = $A(arguments);return this.select(function(value) {return !values.include(value);});},indexOf: function(object) {for (var i = 0; i < this.length; i++)if (this[i] == object) return i;return -1;},reverse: function(inline) {return (inline !== false ? this : this.toArray())._reverse();},shift: function() {var result = this[0];for (var i = 0; i < this.length - 1; i++)this[i] = this[i + 1];this.length--;return result;},inspect: function() {return '[' + this.map(Object.inspect).join(', ') + ']';}});var Hash = {_each: function(iterator) {for (key in this) {var value = this[key];if (typeof value == 'function') continue;var pair = [key, value];pair.key = key;pair.value = value;iterator(pair);}},keys: function() {return this.pluck('key');},values: function() {return this.pluck('value');},merge: function(hash) {return $H(hash).inject($H(this), function(mergedHash, pair) {mergedHash[pair.key] = pair.value;return mergedHash;});},toQueryString: function() {return this.map(function(pair) {return pair.map(encodeURIComponent).join('=');}).join('&');},inspect: function() {return '#<Hash:{' + this.map(function(pair) {return pair.map(Object.inspect).join(': ');}).join(', ') + '}>';}}function $H(object) {var hash = Object.extend({}, object || {});Object.extend(hash, Enumerable);Object.extend(hash, Hash);return hash;}ObjectRange = Class.create();Object.extend(ObjectRange.prototype, Enumerable);Object.extend(ObjectRange.prototype, {initialize: function(start, end, exclusive) {this.start = start;this.end = end;this.exclusive = exclusive;},_each: function(iterator) {var value = this.start;do {iterator(value);value = value.succ();} while (this.include(value));},include: function(value) {if (value < this.start)return false;if (this.exclusive)return value < this.end;return value <= this.end;}});var $R = function(start, end, exclusive) {return new ObjectRange(start, end, exclusive);}var Ajax = {getTransport: function() {return Try.these(function() {return new ActiveXObject('Msxml2.XMLHTTP')},function() {return new ActiveXObject('Microsoft.XMLHTTP')},function() {return new XMLHttpRequest()}) || false;},activeRequestCount: 0}Ajax.Responders = {responders: [],_each: function(iterator) {this.responders._each(iterator);},register: function(responderToAdd) {if (!this.include(responderToAdd))this.responders.push(responderToAdd);},unregister: function(responderToRemove) {this.responders = this.responders.without(responderToRemove);},dispatch: function(callback, request, transport, json) {this.each(function(responder) {if (responder[callback] && typeof responder[callback] == 'function') {try {responder[callback].apply(responder, [request, transport, json]);} catch (e) {}}});}};Object.extend(Ajax.Responders, Enumerable);Ajax.Responders.register({onCreate: function() {Ajax.activeRequestCount++;},onComplete: function() {Ajax.activeRequestCount--;}});Ajax.Base = function() {};Ajax.Base.prototype = {setOptions: function(options) {this.options = {method:       'post',asynchronous: true,parameters:   ''}Object.extend(this.options, options || {});},responseIsSuccess: function() {return this.transport.status == undefined|| this.transport.status == 0|| (this.transport.status >= 200 && this.transport.status < 300);},responseIsFailure: function() {return !this.responseIsSuccess();}}Ajax.Request = Class.create();Ajax.Request.Events =['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];Ajax.Request.prototype = Object.extend(new Ajax.Base(), {initialize: function(url, options) {this.transport = Ajax.getTransport();this.setOptions(options);this.request(url);},request: function(url) {var parameters = this.options.parameters || '';if (parameters.length > 0) parameters += '&_=';try {this.url = url;if (this.options.method == 'get' && parameters.length > 0)this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;Ajax.Responders.dispatch('onCreate', this, this.transport);this.transport.open(this.options.method, this.url,this.options.asynchronous);if (this.options.asynchronous) {this.transport.onreadystatechange = this.onStateChange.bind(this);setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);}this.setRequestHeaders();var body = this.options.postBody ? this.options.postBody : parameters;this.transport.send(this.options.method == 'post' ? body : null);} catch (e) {this.dispatchException(e);}},setRequestHeaders: function() {var requestHeaders =['X-Requested-With', 'XMLHttpRequest','X-Prototype-Version', Prototype.Version];if (this.options.method == 'post') {requestHeaders.push('Content-type','application/x-www-form-urlencoded');/* Force "Connection: close" for Mozilla browsers to work around* a bug where XMLHttpReqeuest sends an incorrect Content-length* header. See Mozilla Bugzilla #246651.*/if (this.transport.overrideMimeType)requestHeaders.push('Connection', 'close');}if (this.options.requestHeaders)requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);for (var i = 0; i < requestHeaders.length; i += 2)this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);},onStateChange: function() {var readyState = this.transport.readyState;if (readyState != 1)this.respondToReadyState(this.transport.readyState);},header: function(name) {try {return this.transport.getResponseHeader(name);} catch (e) {}},evalJSON: function() {try {return eval(this.header('X-JSON'));} catch (e) {}},evalResponse: function() {try {return eval(this.transport.responseText);} catch (e) {this.dispatchException(e);}},respondToReadyState: function(readyState) {var event = Ajax.Request.Events[readyState];var transport = this.transport, json = this.evalJSON();if (event == 'Complete') {try {(this.options['on' + this.transport.status]|| this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]|| Prototype.emptyFunction)(transport, json);} catch (e) {this.dispatchException(e);}if ((this.header('Content-type') || '').match(/^text\/javascript/i))this.evalResponse();}try {(this.options['on' + event] || Prototype.emptyFunction)(transport, json);Ajax.Responders.dispatch('on' + event, this, transport, json);} catch (e) {this.dispatchException(e);}/* Avoid memory leak in MSIE: clean up the oncomplete event handler */if (event == 'Complete')this.transport.onreadystatechange = Prototype.emptyFunction;},dispatchException: function(exception) {(this.options.onException || Prototype.emptyFunction)(this, exception);Ajax.Responders.dispatch('onException', this, exception);}});Ajax.Updater = Class.create();Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {initialize: function(container, url, options) {this.containers = {success: container.success ? $(container.success) : $(container),failure: container.failure ? $(container.failure) :(container.success ? null : $(container))}this.transport = Ajax.getTransport();this.setOptions(options);var onComplete = this.options.onComplete || Prototype.emptyFunction;this.options.onComplete = (function(transport, object) {this.updateContent();onComplete(transport, object);}).bind(this);this.request(url);},updateContent: function() {var receiver = this.responseIsSuccess() ?this.containers.success : this.containers.failure;var response = this.transport.responseText;if (!this.options.evalScripts)response = response.stripScripts();if (receiver) {if (this.options.insertion) {new this.options.insertion(receiver, response);} else {Element.update(receiver, response);}}if (this.responseIsSuccess()) {if (this.onComplete)setTimeout(this.onComplete.bind(this), 10);}}});Ajax.PeriodicalUpdater = Class.create();Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {initialize: function(container, url, options) {this.setOptions(options);this.onComplete = this.options.onComplete;this.frequency = (this.options.frequency || 2);this.decay = (this.options.decay || 1);this.updater = {};this.container = container;this.url = url;this.start();},start: function() {this.options.onComplete = this.updateComplete.bind(this);this.onTimerEvent();},stop: function() {this.updater.onComplete = undefined;clearTimeout(this.timer);(this.onComplete || Prototype.emptyFunction).apply(this, arguments);},updateComplete: function(request) {if (this.options.decay) {this.decay = (request.responseText == this.lastText ?this.decay * this.options.decay : 1);this.lastText = request.responseText;}this.timer = setTimeout(this.onTimerEvent.bind(this),this.decay * this.frequency * 1000);},onTimerEvent: function() {this.updater = new Ajax.Updater(this.container, this.url, this.options);}});document.getElementsByClassName = function(className, parentElement) {var children = ($(parentElement) || document.body).getElementsByTagName('*');return $A(children).inject([], function(elements, child) {if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))elements.push(child);return elements;});}/*--------------------------------------------------------------------------*/if (!window.Element) {var Element = new Object();}Object.extend(Element, {visible: function(element) {return $(element).style.display != 'none';},toggle: function() {for (var i = 0; i < arguments.length; i++) {var element = $(arguments[i]);Element[Element.visible(element) ? 'hide' : 'show'](element);}},hide: function() {for (var i = 0; i < arguments.length; i++) {var element = $(arguments[i]);element.style.display = 'none';}},show: function() {for (var i = 0; i < arguments.length; i++) {var element = $(arguments[i]);element.style.display = '';}},remove: function(element) {element = $(element);element.parentNode.removeChild(element);},update: function(element, html) {$(element).innerHTML = html.stripScripts();setTimeout(function() {html.evalScripts()}, 10);},getHeight: function(element) {element = $(element);return element.offsetHeight;},classNames: function(element) {return new Element.ClassNames(element);},hasClassName: function(element, className) {if (!(element = $(element))) return;return Element.classNames(element).include(className);},addClassName: function(element, className) {if (!(element = $(element))) return;return Element.classNames(element).add(className);},removeClassName: function(element, className) {if (!(element = $(element))) return;return Element.classNames(element).remove(className);},cleanWhitespace: function(element) {element = $(element);for (var i = 0; i < element.childNodes.length; i++) {var node = element.childNodes[i];if (node.nodeType == 3 && !/\S/.test(node.nodeValue))Element.remove(node);}},empty: function(element) {return $(element).innerHTML.match(/^\s*$/);},scrollTo: function(element) {element = $(element);var x = element.x ? element.x : element.offsetLeft,y = element.y ? element.y : element.offsetTop;window.scrollTo(x, y);},getStyle: function(element, style) {element = $(element);var value = element.style[style.camelize()];if (!value) {if (document.defaultView && document.defaultView.getComputedStyle) {var css = document.defaultView.getComputedStyle(element, null);value = css ? css.getPropertyValue(style) : null;} else if (element.currentStyle) {value = element.currentStyle[style.camelize()];}}if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))if (Element.getStyle(element, 'position') == 'static') value = 'auto';return value == 'auto' ? null : value;},setStyle: function(element, style) {element = $(element);for (name in style)element.style[name.camelize()] = style[name];},getDimensions: function(element) {element = $(element);if (Element.getStyle(element, 'display') != 'none')return {width: element.offsetWidth, height: element.offsetHeight};var els = element.style;var originalVisibility = els.visibility;var originalPosition = els.position;els.visibility = 'hidden';els.position = 'absolute';els.display = '';var originalWidth = element.clientWidth;var originalHeight = element.clientHeight;els.display = 'none';els.position = originalPosition;els.visibility = originalVisibility;return {width: originalWidth, height: originalHeight};},makePositioned: function(element) {element = $(element);var pos = Element.getStyle(element, 'position');if (pos == 'static' || !pos) {element._madePositioned = true;element.style.position = 'relative';if (window.opera) {element.style.top = 0;element.style.left = 0;}}},undoPositioned: function(element) {element = $(element);if (element._madePositioned) {element._madePositioned = undefined;element.style.position =element.style.top =element.style.left =element.style.bottom =element.style.right = '';}},makeClipping: function(element) {element = $(element);if (element._overflow) return;element._overflow = element.style.overflow;if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')element.style.overflow = 'hidden';},undoClipping: function(element) {element = $(element);if (element._overflow) return;element.style.overflow = element._overflow;element._overflow = undefined;}});var Toggle = new Object();Toggle.display = Element.toggle;/*--------------------------------------------------------------------------*/Abstract.Insertion = function(adjacency) {this.adjacency = adjacency;}Abstract.Insertion.prototype = {initialize: function(element, content) {this.element = $(element);this.content = content.stripScripts();if (this.adjacency && this.element.insertAdjacentHTML) {try {this.element.insertAdjacentHTML(this.adjacency, this.content);} catch (e) {if (this.element.tagName.toLowerCase() == 'tbody') {this.insertContent(this.contentFromAnonymousTable());} else {throw e;}}} else {this.range = this.element.ownerDocument.createRange();if (this.initializeRange) this.initializeRange();this.insertContent([this.range.createContextualFragment(this.content)]);}setTimeout(function() {content.evalScripts()}, 10);},contentFromAnonymousTable: function() {var div = document.createElement('div');div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';return $A(div.childNodes[0].childNodes[0].childNodes);}}var Insertion = new Object();Insertion.Before = Class.create();Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {initializeRange: function() {this.range.setStartBefore(this.element);},insertContent: function(fragments) {fragments.each((function(fragment) {this.element.parentNode.insertBefore(fragment, this.element);}).bind(this));}});Insertion.Top = Class.create();Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {initializeRange: function() {this.range.selectNodeContents(this.element);this.range.collapse(true);},insertContent: function(fragments) {fragments.reverse(false).each((function(fragment) {this.element.insertBefore(fragment, this.element.firstChild);}).bind(this));}});Insertion.Bottom = Class.create();Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {initializeRange: function() {this.range.selectNodeContents(this.element);this.range.collapse(this.element);},insertContent: function(fragments) {fragments.each((function(fragment) {this.element.appendChild(fragment);}).bind(this));}});Insertion.After = Class.create();Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {initializeRange: function() {this.range.setStartAfter(this.element);},insertContent: function(fragments) {fragments.each((function(fragment) {this.element.parentNode.insertBefore(fragment,this.element.nextSibling);}).bind(this));}});/*--------------------------------------------------------------------------*/Element.ClassNames = Class.create();Element.ClassNames.prototype = {initialize: function(element) {this.element = $(element);},_each: function(iterator) {this.element.className.split(/\s+/).select(function(name) {return name.length > 0;})._each(iterator);},set: function(className) {this.element.className = className;},add: function(classNameToAdd) {if (this.include(classNameToAdd)) return;this.set(this.toArray().concat(classNameToAdd).join(' '));},remove: function(classNameToRemove) {if (!this.include(classNameToRemove)) return;this.set(this.select(function(className) {return className != classNameToRemove;}).join(' '));},toString: function() {return this.toArray().join(' ');}}Object.extend(Element.ClassNames.prototype, Enumerable);var Field = {clear: function() {for (var i = 0; i < arguments.length; i++)$(arguments[i]).value = '';},focus: function(element) {$(element).focus();},present: function() {for (var i = 0; i < arguments.length; i++)if ($(arguments[i]).value == '') return false;return true;},select: function(element) {$(element).select();},activate: function(element) {element = $(element);element.focus();if (element.select)element.select();}}/*--------------------------------------------------------------------------*/var Form = {serialize: function(form) {var elements = Form.getElements($(form));var queryComponents = new Array();for (var i = 0; i < elements.length; i++) {var queryComponent = Form.Element.serialize(elements[i]);if (queryComponent)queryComponents.push(queryComponent);}return queryComponents.join('&');},getElements: function(form) {form = $(form);var elements = new Array();for (tagName in Form.Element.Serializers) {var tagElements = form.getElementsByTagName(tagName);for (var j = 0; j < tagElements.length; j++)elements.push(tagElements[j]);}return elements;},getInputs: function(form, typeName, name) {form = $(form);var inputs = form.getElementsByTagName('input');if (!typeName && !name)return inputs;var matchingInputs = new Array();for (var i = 0; i < inputs.length; i++) {var input = inputs[i];if ((typeName && input.type != typeName) ||(name && input.name != name))continue;matchingInputs.push(input);}return matchingInputs;},disable: function(form) {var elements = Form.getElements(form);for (var i = 0; i < elements.length; i++) {var element = elements[i];element.blur();element.disabled = 'true';}},enable: function(form) {var elements = Form.getElements(form);for (var i = 0; i < elements.length; i++) {var element = elements[i];element.disabled = '';}},findFirstElement: function(form) {return Form.getElements(form).find(function(element) {return element.type != 'hidden' && !element.disabled &&['input', 'select', 'textarea'].include(element.tagName.toLowerCase());});},focusFirstElement: function(form) {Field.activate(Form.findFirstElement(form));},reset: function(form) {$(form).reset();}}Form.Element = {serialize: function(element) {element = $(element);var method = element.tagName.toLowerCase();var parameter = Form.Element.Serializers[method](element);if (parameter) {var key = encodeURIComponent(parameter[0]);if (key.length == 0) return;if (parameter[1].constructor != Array)parameter[1] = [parameter[1]];return parameter[1].map(function(value) {return key + '=' + encodeURIComponent(value);}).join('&');}},getValue: function(element) {element = $(element);var method = element.tagName.toLowerCase();var parameter = Form.Element.Serializers[method](element);if (parameter)return parameter[1];}}Form.Element.Serializers = {input: function(element) {switch (element.type.toLowerCase()) {case 'submit':case 'hidden':case 'password':case 'text':return Form.Element.Serializers.textarea(element);case 'checkbox':case 'radio':return Form.Element.Serializers.inputSelector(element);}return false;},inputSelector: function(element) {if (element.checked)return [element.name, element.value];},textarea: function(element) {return [element.name, element.value];},select: function(element) {return Form.Element.Serializers[element.type == 'select-one' ?'selectOne' : 'selectMany'](element);},selectOne: function(element) {var value = '', opt, index = element.selectedIndex;if (index >= 0) {opt = element.options[index];value = opt.value;if (!value && !('value' in opt))value = opt.text;}return [element.name, value];},selectMany: function(element) {var value = new Array();for (var i = 0; i < element.length; i++) {var opt = element.options[i];if (opt.selected) {var optValue = opt.value;if (!optValue && !('value' in opt))optValue = opt.text;value.push(optValue);}}return [element.name, value];}}/*--------------------------------------------------------------------------*/var $F = Form.Element.getValue;/*--------------------------------------------------------------------------*/Abstract.TimedObserver = function() {}Abstract.TimedObserver.prototype = {initialize: function(element, frequency, callback) {this.frequency = frequency;this.element   = $(element);this.callback  = callback;this.lastValue = this.getValue();this.registerCallback();},registerCallback: function() {setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);},onTimerEvent: function() {var value = this.getValue();if (this.lastValue != value) {this.callback(this.element, value);this.lastValue = value;}}}Form.Element.Observer = Class.create();Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {getValue: function() {return Form.Element.getValue(this.element);}});Form.Observer = Class.create();Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {getValue: function() {return Form.serialize(this.element);}});/*--------------------------------------------------------------------------*/Abstract.EventObserver = function() {}Abstract.EventObserver.prototype = {initialize: function(element, callback) {this.element  = $(element);this.callback = callback;this.lastValue = this.getValue();if (this.element.tagName.toLowerCase() == 'form')this.registerFormCallbacks();elsethis.registerCallback(this.element);},onElementEvent: function() {var value = this.getValue();if (this.lastValue != value) {this.callback(this.element, value);this.lastValue = value;}},registerFormCallbacks: function() {var elements = Form.getElements(this.element);for (var i = 0; i < elements.length; i++)this.registerCallback(elements[i]);},registerCallback: function(element) {if (element.type) {switch (element.type.toLowerCase()) {case 'checkbox':case 'radio':Event.observe(element, 'click', this.onElementEvent.bind(this));break;case 'password':case 'text':case 'textarea':case 'select-one':case 'select-multiple':Event.observe(element, 'change', this.onElementEvent.bind(this));break;}}}}Form.Element.EventObserver = Class.create();Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {getValue: function() {return Form.Element.getValue(this.element);}});Form.EventObserver = Class.create();Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {getValue: function() {return Form.serialize(this.element);}});if (!window.Event) {var Event = new Object();}Object.extend(Event, {KEY_BACKSPACE: 8,KEY_TAB:       9,KEY_RETURN:   13,KEY_ESC:      27,KEY_LEFT:     37,KEY_UP:       38,KEY_RIGHT:    39,KEY_DOWN:     40,KEY_DELETE:   46,element: function(event) {return event.target || event.srcElement;},isLeftClick: function(event) {return (((event.which) && (event.which == 1)) ||((event.button) && (event.button == 1)));},pointerX: function(event) {return event.pageX || (event.clientX +(document.documentElement.scrollLeft || document.body.scrollLeft));},pointerY: function(event) {return event.pageY || (event.clientY +(document.documentElement.scrollTop || document.body.scrollTop));},stop: function(event) {if (event.preventDefault) {event.preventDefault();event.stopPropagation();} else {event.returnValue = false;event.cancelBubble = true;}},findElement: function(event, tagName) {var element = Event.element(event);while (element.parentNode && (!element.tagName ||(element.tagName.toUpperCase() != tagName.toUpperCase())))element = element.parentNode;return element;},observers: false,_observeAndCache: function(element, name, observer, useCapture) {if (!this.observers) this.observers = [];if (element.addEventListener) {this.observers.push([element, name, observer, useCapture]);element.addEventListener(name, observer, useCapture);} else if (element.attachEvent) {this.observers.push([element, name, observer, useCapture]);element.attachEvent('on' + name, observer);}},unloadCache: function() {if (!Event.observers) return;for (var i = 0; i < Event.observers.length; i++) {Event.stopObserving.apply(this, Event.observers[i]);Event.observers[i][0] = null;}Event.observers = false;},observe: function(element, name, observer, useCapture) {var element = $(element);useCapture = useCapture || false;if (name == 'keypress' &&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)|| element.attachEvent))name = 'keydown';this._observeAndCache(element, name, observer, useCapture);},stopObserving: function(element, name, observer, useCapture) {var element = $(element);useCapture = useCapture || false;if (name == 'keypress' &&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)|| element.detachEvent))name = 'keydown';if (element.removeEventListener) {element.removeEventListener(name, observer, useCapture);} else if (element.detachEvent) {element.detachEvent('on' + name, observer);}}});/* prevent memory leaks in IE */Event.observe(window, 'unload', Event.unloadCache, false);var Position = {includeScrollOffsets: false,prepare: function() {this.deltaX =  window.pageXOffset|| document.documentElement.scrollLeft|| document.body.scrollLeft|| 0;this.deltaY =  window.pageYOffset|| document.documentElement.scrollTop|| document.body.scrollTop|| 0;},realOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.scrollTop  || 0;valueL += element.scrollLeft || 0;element = element.parentNode;} while (element);return [valueL, valueT];},cumulativeOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;element = element.offsetParent;} while (element);return [valueL, valueT];},positionedOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;element = element.offsetParent;if (element) {p = Element.getStyle(element, 'position');if (p == 'relative' || p == 'absolute') break;}} while (element);return [valueL, valueT];},offsetParent: function(element) {if (element.offsetParent) return element.offsetParent;if (element == document.body) return element;while ((element = element.parentNode) && element != document.body)if (Element.getStyle(element, 'position') != 'static')return element;return document.body;},within: function(element, x, y) {if (this.includeScrollOffsets)return this.withinIncludingScrolloffsets(element, x, y);this.xcomp = x;this.ycomp = y;this.offset = this.cumulativeOffset(element);return (y >= this.offset[1] &&y <  this.offset[1] + element.offsetHeight &&x >= this.offset[0] &&x <  this.offset[0] + element.offsetWidth);},withinIncludingScrolloffsets: function(element, x, y) {var offsetcache = this.realOffset(element);this.xcomp = x + offsetcache[0] - this.deltaX;this.ycomp = y + offsetcache[1] - this.deltaY;this.offset = this.cumulativeOffset(element);return (this.ycomp >= this.offset[1] &&this.ycomp <  this.offset[1] + element.offsetHeight &&this.xcomp >= this.offset[0] &&this.xcomp <  this.offset[0] + element.offsetWidth);},overlap: function(mode, element) {if (!mode) return 0;if (mode == 'vertical')return ((this.offset[1] + element.offsetHeight) - this.ycomp) /element.offsetHeight;if (mode == 'horizontal')return ((this.offset[0] + element.offsetWidth) - this.xcomp) /element.offsetWidth;},clone: function(source, target) {source = $(source);target = $(target);target.style.position = 'absolute';var offsets = this.cumulativeOffset(source);target.style.top    = offsets[1] + 'px';target.style.left   = offsets[0] + 'px';target.style.width  = source.offsetWidth + 'px';target.style.height = source.offsetHeight + 'px';},page: function(forElement) {var valueT = 0, valueL = 0;var element = forElement;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;if (element.offsetParent==document.body)if (Element.getStyle(element,'position')=='absolute') break;} while (element = element.offsetParent);element = forElement;do {valueT -= element.scrollTop  || 0;valueL -= element.scrollLeft || 0;} while (element = element.parentNode);return [valueL, valueT];},clone: function(source, target) {var options = Object.extend({setLeft:    true,setTop:     true,setWidth:   true,setHeight:  true,offsetTop:  0,offsetLeft: 0}, arguments[2] || {})source = $(source);var p = Position.page(source);target = $(target);var delta = [0, 0];var parent = null;if (Element.getStyle(target,'position') == 'absolute') {parent = Position.offsetParent(target);delta = Position.page(parent);}if (parent == document.body) {delta[0] -= document.body.offsetLeft;delta[1] -= document.body.offsetTop;}if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';if(options.setWidth)  target.style.width = source.offsetWidth + 'px';if(options.setHeight) target.style.height = source.offsetHeight + 'px';},absolutize: function(element) {element = $(element);if (element.style.position == 'absolute') return;Position.prepare();var offsets = Position.positionedOffset(element);var top     = offsets[1];var left    = offsets[0];var width   = element.clientWidth;var height  = element.clientHeight;element._originalLeft   = left - parseFloat(element.style.left  || 0);element._originalTop    = top  - parseFloat(element.style.top || 0);element._originalWidth  = element.style.width;element._originalHeight = element.style.height;element.style.position = 'absolute';element.style.top    = top + 'px';;element.style.left   = left + 'px';;element.style.width  = width + 'px';;element.style.height = height + 'px';;},relativize: function(element) {element = $(element);if (element.style.position == 'relative') return;Position.prepare();element.style.position = 'relative';var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);element.style.top    = top + 'px';element.style.left   = left + 'px';element.style.height = element._originalHeight;element.style.width  = element._originalWidth;}}if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {Position.cumulativeOffset = function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;if (element.offsetParent == document.body)if (Element.getStyle(element, 'position') == 'absolute') break;element = element.offsetParent;} while (element);return [valueL, valueT];}}</script><!-- <script type="text/javascript" language="javascript" src="/scripts/scriptaculous.js"></script> --><script type="text/javascript" language="javascript">/* ------------- element ext -------------- */  String.prototype.parseColor = function() {  var color = '#';  if(this.slice(0,4) == 'rgb(') {  var cols = this.slice(4,this.length-1).split(',');  var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  } else {  if(this.slice(0,1) == '#') {  if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  if(this.length==7) color = this.toLowerCase();  }  }  return(color.length==7 ? color : (arguments[0] || this));  }Element.collectTextNodes = function(element) {  return $A($(element).childNodes).collect( function(node) {return (node.nodeType==3 ? node.nodeValue : (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));}).flatten().join('');}Element.collectTextNodesIgnoreClass = function(element, className) {  return $A($(element).childNodes).collect( function(node) {return (node.nodeType==3 ? node.nodeValue : ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? Element.collectTextNodes(node) : ''));}).flatten().join('');}Element.setStyle = function(element, style) {element = $(element);for(k in style) element.style[k.camelize()] = style[k];}Element.setContentZoom = function(element, percent) {  Element.setStyle(element, {fontSize: (percent/100) + 'em'});   if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);  }Element.getOpacity = function(element){  var opacity;if (opacity = Element.getStyle(element, 'opacity'))  return parseFloat(opacity);  if (opacity = (Element.getStyle(element, 'filter') || '').match(/alpha\(opacity=(.*)\)/))  if(opacity[1]) return parseFloat(opacity[1]) / 100;  return 1.0;  }Element.setOpacity = function(element, value){  element= $(element);  if (value == 1){Element.setStyle(element, { opacity: (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : null });if(/MSIE/.test(navigator.userAgent))  Element.setStyle(element, {filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')});  } else {  if(value < 0.00001) value = 0;  Element.setStyle(element, {opacity: value});if(/MSIE/.test(navigator.userAgent))  Element.setStyle(element, { filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') +'alpha(opacity='+value*100+')' });  }   }  Element.getInlineOpacity = function(element){  return $(element).style.opacity || '';}  Element.childrenWithClassName = function(element, className) {  return $A($(element).getElementsByTagName('*')).select(function(c) { return Element.hasClassName(c, className) });}Array.prototype.call = function() {var args = arguments;this.each(function(f){ f.apply(this, args) });}/*--------------------------------------------------------------------------*/var Effect = {tagifyText: function(element) {var tagifyStyle = 'position:relative';if(/MSIE/.test(navigator.userAgent)) tagifyStyle += ';zoom:1';element = $(element);$A(element.childNodes).each( function(child) {if(child.nodeType==3) {child.nodeValue.toArray().each( function(character) {element.insertBefore(Builder.node('span',{style: tagifyStyle},character == ' ' ? String.fromCharCode(160) : character), child);});Element.remove(child);}});},multiple: function(element, effect) {var elements;if(((typeof element == 'object') || (typeof element == 'function')) && (element.length))elements = element;elseelements = $(element).childNodes;var options = Object.extend({speed: 0.1,delay: 0.0}, arguments[2] || {});var masterDelay = options.delay;$A(elements).each( function(element, index) {new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));});},PAIRS: {'slide':  ['SlideDown','SlideUp'],'blind':  ['BlindDown','BlindUp'],'appear': ['Appear','Fade']},toggle: function(element, effect) {element = $(element);effect = (effect || 'appear').toLowerCase();var options = Object.extend({queue: { position:'end', scope:(element.id || 'global') }}, arguments[2] || {});Effect[Element.visible(element) ? Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);}};var Effect2 = Effect; // deprecated/* ------------- transitions ------------- */Effect.Transitions = {}Effect.Transitions.linear = function(pos) {return pos;}Effect.Transitions.sinoidal = function(pos) {return (-Math.cos(pos*Math.PI)/2) + 0.5;}Effect.Transitions.reverse  = function(pos) {return 1-pos;}Effect.Transitions.flicker = function(pos) {return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;}Effect.Transitions.wobble = function(pos) {return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;}Effect.Transitions.pulse = function(pos) {return (Math.floor(pos*10) % 2 == 0 ? (pos*10-Math.floor(pos*10)) : 1-(pos*10-Math.floor(pos*10)));}Effect.Transitions.none = function(pos) {return 0;}Effect.Transitions.full = function(pos) {return 1;}/* ------------- core effects ------------- */Effect.ScopedQueue = Class.create();Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {initialize: function() {this.effects  = [];this.interval = null;},_each: function(iterator) {this.effects._each(iterator);},add: function(effect) {var timestamp = new Date().getTime();var position = (typeof effect.options.queue == 'string') ? effect.options.queue : effect.options.queue.position;switch(position) {case 'front':this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {e.startOn  += effect.finishOn;e.finishOn += effect.finishOn;});break;case 'end':timestamp = this.effects.pluck('finishOn').max() || timestamp;break;}effect.startOn  += timestamp;effect.finishOn += timestamp;this.effects.push(effect);if(!this.interval) this.interval = setInterval(this.loop.bind(this), 40);},remove: function(effect) {this.effects = this.effects.reject(function(e) { return e==effect });if(this.effects.length == 0) {clearInterval(this.interval);this.interval = null;}},loop: function() {var timePos = new Date().getTime();this.effects.invoke('loop', timePos);}});Effect.Queues = {instances: $H(),get: function(queueName) {if(typeof queueName != 'string') return queueName;if(!this.instances[queueName])this.instances[queueName] = new Effect.ScopedQueue();return this.instances[queueName];}}Effect.Queue = Effect.Queues.get('global');Effect.DefaultOptions = {transition: Effect.Transitions.sinoidal,duration:   1.0,   // secondsfps:        25.0,  // max. 25fps due to Effect.Queue implementationsync:       false, // true for combiningfrom:       0.0,to:         1.0,delay:      0.0,queue:      'parallel'}Effect.Base = function() {};Effect.Base.prototype = {position: null,start: function(options) {this.options      = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});this.currentFrame = 0;this.state        = 'idle';this.startOn      = this.options.delay*1000;this.finishOn     = this.startOn + (this.options.duration*1000);this.event('beforeStart');if(!this.options.sync)Effect.Queues.get(typeof this.options.queue == 'string' ? 'global' : this.options.queue.scope).add(this);},loop: function(timePos) {if(timePos >= this.startOn) {if(timePos >= this.finishOn) {this.render(1.0);this.cancel();this.event('beforeFinish');if(this.finish) this.finish(); this.event('afterFinish');return;  }var pos   = (timePos - this.startOn) / (this.finishOn - this.startOn);var frame = Math.round(pos * this.options.fps * this.options.duration);if(frame > this.currentFrame) {this.render(pos);this.currentFrame = frame;}}},render: function(pos) {if(this.state == 'idle') {this.state = 'running';this.event('beforeSetup');if(this.setup) this.setup();this.event('afterSetup');}if(this.state == 'running') {if(this.options.transition) pos = this.options.transition(pos);pos *= (this.options.to-this.options.from);pos += this.options.from;this.position = pos;this.event('beforeUpdate');if(this.update) this.update(pos);this.event('afterUpdate');}},cancel: function() {if(!this.options.sync)Effect.Queues.get(typeof this.options.queue == 'string' ? 'global' : this.options.queue.scope).remove(this);this.state = 'finished';},event: function(eventName) {if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);if(this.options[eventName]) this.options[eventName](this);},inspect: function() {return '#<Effect:' + $H(this).inspect() + ',options:' + $H(this.options).inspect() + '>';}}Effect.Parallel = Class.create();Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {initialize: function(effects) {this.effects = effects || [];this.start(arguments[1]);},update: function(position) {this.effects.invoke('render', position);},finish: function(position) {this.effects.each( function(effect) {effect.render(1.0);effect.cancel();effect.event('beforeFinish');if(effect.finish) effect.finish(position);effect.event('afterFinish');});}});Effect.Opacity = Class.create();Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);if(/MSIE/.test(navigator.userAgent) && (!this.element.hasLayout))Element.setStyle(this.element, {zoom: 1});var options = Object.extend({from: Element.getOpacity(this.element) || 0.0,to:   1.0}, arguments[1] || {});this.start(options);},update: function(position) {Element.setOpacity(this.element, position);}});Effect.Move = Class.create();Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);var options = Object.extend({x:    0,y:    0,mode: 'relative'}, arguments[1] || {});this.start(options);},setup: function() {Element.makePositioned(this.element);this.originalLeft = parseFloat(Element.getStyle(this.element,'left') || '0');this.originalTop  = parseFloat(Element.getStyle(this.element,'top')  || '0');if(this.options.mode == 'absolute') {this.options.x = this.options.x - this.originalLeft;this.options.y = this.options.y - this.originalTop;}},update: function(position) {Element.setStyle(this.element, {left: this.options.x  * position + this.originalLeft + 'px',top:  this.options.y  * position + this.originalTop  + 'px'});}});Effect.MoveBy = function(element, toTop, toLeft) {return new Effect.Move(element, Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));};Effect.Scale = Class.create();Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {initialize: function(element, percent) {this.element = $(element)var options = Object.extend({scaleX: true,scaleY: true,scaleContent: true,scaleFromCenter: false,scaleMode: 'box',        // 'box' or 'contents' or {} with provided valuesscaleFrom: 100.0,scaleTo:   percent}, arguments[2] || {});this.start(options);},setup: function() {this.restoreAfterFinish = this.options.restoreAfterFinish || false;this.elementPositioning = Element.getStyle(this.element,'position');this.originalStyle = {};['top','left','width','height','fontSize'].each( function(k) {this.originalStyle[k] = this.element.style[k];}.bind(this));this.originalTop  = this.element.offsetTop;this.originalLeft = this.element.offsetLeft;var fontSize = Element.getStyle(this.element,'font-size') || '100%';['em','px','%'].each( function(fontSizeType) {if(fontSize.indexOf(fontSizeType)>0) {this.fontSize     = parseFloat(fontSize);this.fontSizeType = fontSizeType;}}.bind(this));this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;this.dims = null;if(this.options.scaleMode=='box')this.dims = [this.element.offsetHeight, this.element.offsetWidth];if(/^content/.test(this.options.scaleMode))this.dims = [this.element.scrollHeight, this.element.scrollWidth];if(!this.dims)this.dims = [this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth];},update: function(position) {var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);if(this.options.scaleContent && this.fontSize)Element.setStyle(this.element, {fontSize: this.fontSize * currentScale + this.fontSizeType });this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);},finish: function(position) {if (this.restoreAfterFinish) Element.setStyle(this.element, this.originalStyle);},setDimensions: function(height, width) {var d = {};if(this.options.scaleX) d.width = width + 'px';if(this.options.scaleY) d.height = height + 'px';if(this.options.scaleFromCenter) {var topd  = (height - this.dims[0])/2;var leftd = (width  - this.dims[1])/2;if(this.elementPositioning == 'absolute') {if(this.options.scaleY) d.top = this.originalTop-topd + 'px';if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';} else {if(this.options.scaleY) d.top = -topd + 'px';if(this.options.scaleX) d.left = -leftd + 'px';}}Element.setStyle(this.element, d);}});Effect.Highlight = Class.create();Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});this.start(options);},setup: function() {if(Element.getStyle(this.element, 'display')=='none') { this.cancel(); return; }this.oldStyle = {backgroundImage: Element.getStyle(this.element, 'background-image') };Element.setStyle(this.element, {backgroundImage: 'none'});if(!this.options.endcolor)this.options.endcolor = Element.getStyle(this.element, 'background-color').parseColor('#ffffff');if(!this.options.restorecolor)this.options.restorecolor = Element.getStyle(this.element, 'background-color');this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));},update: function(position) {Element.setStyle(this.element,{backgroundColor: $R(0,2).inject('#',function(m,v,i){return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });},finish: function() {Element.setStyle(this.element, Object.extend(this.oldStyle, {backgroundColor: this.options.restorecolor}));}});Effect.ScrollTo = Class.create();Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);this.start(arguments[1] || {});},setup: function() {Position.prepare();var offsets = Position.cumulativeOffset(this.element);if(this.options.offset) offsets[1] += this.options.offset;var max = window.innerHeight ? window.height - window.innerHeight :document.body.scrollHeight - (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight);this.scrollStart = Position.deltaY;this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;},update: function(position) {Position.prepare();window.scrollTo(Position.deltaX, this.scrollStart + (position*this.delta));}});/* ------------- combination effects ------------- */Effect.Fade = function(element) {var oldOpacity = Element.getInlineOpacity(element);var options = Object.extend({from: Element.getOpacity(element) || 1.0,to:   0.0,afterFinishInternal: function(effect) { with(Element) { if(effect.options.to!=0) return;hide(effect.element);setStyle(effect.element, {opacity: oldOpacity}); }}}, arguments[1] || {});return new Effect.Opacity(element,options);}Effect.Appear = function(element) {var options = Object.extend({from: (Element.getStyle(element, 'display') == 'none' ? 0.0 : Element.getOpacity(element) || 0.0),to:   1.0,beforeSetup: function(effect) { with(Element) {setOpacity(effect.element, effect.options.from);show(effect.element); }}}, arguments[1] || {});return new Effect.Opacity(element,options);}Effect.Puff = function(element) {element = $(element);var oldStyle = { opacity: Element.getInlineOpacity(element), position: Element.getStyle(element, 'position') };return new Effect.Parallel([ new Effect.Scale(element, 200, { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], Object.extend({ duration: 1.0, beforeSetupInternal: function(effect) { with(Element) {setStyle(effect.effects[0].element, {position: 'absolute'}); }},afterFinishInternal: function(effect) { with(Element) {hide(effect.effects[0].element);setStyle(effect.effects[0].element, oldStyle); }}}, arguments[1] || {}));}Effect.BlindUp = function(element) {element = $(element);Element.makeClipping(element);return new Effect.Scale(element, 0, Object.extend({ scaleContent: false, scaleX: false, restoreAfterFinish: true,afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping].call(effect.element); }} }, arguments[1] || {}));}Effect.BlindDown = function(element) {element = $(element);var oldHeight = Element.getStyle(element, 'height');var elementDimensions = Element.getDimensions(element);return new Effect.Scale(element, 100, Object.extend({ scaleContent: false, scaleX: false,scaleFrom: 0,scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},restoreAfterFinish: true,afterSetup: function(effect) { with(Element) {makeClipping(effect.element);setStyle(effect.element, {height: '0px'});show(effect.element); }},  afterFinishInternal: function(effect) { with(Element) {undoClipping(effect.element);setStyle(effect.element, {height: oldHeight});}}}, arguments[1] || {}));}Effect.SwitchOff = function(element) {element = $(element);var oldOpacity = Element.getInlineOpacity(element);return new Effect.Appear(element, { duration: 0.4,from: 0,transition: Effect.Transitions.flicker,afterFinishInternal: function(effect) {new Effect.Scale(effect.element, 1, { duration: 0.3, scaleFromCenter: true,scaleX: false, scaleContent: false, restoreAfterFinish: true,beforeSetup: function(effect) { with(Element) {[makePositioned,makeClipping].call(effect.element);}},afterFinishInternal: function(effect) { with(Element) {[hide,undoClipping,undoPositioned].call(effect.element);setStyle(effect.element, {opacity: oldOpacity});}}})}});}Effect.DropOut = function(element) {element = $(element);var oldStyle = {top: Element.getStyle(element, 'top'),left: Element.getStyle(element, 'left'),opacity: Element.getInlineOpacity(element) };return new Effect.Parallel([ new Effect.Move(element, {x: 0, y: 100, sync: true }), new Effect.Opacity(element, { sync: true, to: 0.0 }) ],Object.extend({ duration: 0.5,beforeSetup: function(effect) { with(Element) {makePositioned(effect.effects[0].element); }},afterFinishInternal: function(effect) { with(Element) {[hide, undoPositioned].call(effect.effects[0].element);setStyle(effect.effects[0].element, oldStyle); }} }, arguments[1] || {}));}Effect.Shake = function(element) {element = $(element);var oldStyle = {top: Element.getStyle(element, 'top'),left: Element.getStyle(element, 'left') };return new Effect.Move(element, { x:  20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { with(Element) {undoPositioned(effect.element);setStyle(effect.element, oldStyle);}}}) }}) }}) }}) }}) }});}Effect.SlideDown = function(element) {element = $(element);Element.cleanWhitespace(element);var oldInnerBottom = Element.getStyle(element.firstChild, 'bottom');var elementDimensions = Element.getDimensions(element);return new Effect.Scale(element, 100, Object.extend({ scaleContent: false, scaleX: false, scaleFrom: 0,scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},restoreAfterFinish: true,afterSetup: function(effect) { with(Element) {makePositioned(effect.element);makePositioned(effect.element.firstChild);if(window.opera) setStyle(effect.element, {top: ''});makeClipping(effect.element);setStyle(effect.element, {height: '0px'});show(element); }},afterUpdateInternal: function(effect) { with(Element) {setStyle(effect.element.firstChild, {bottom:(effect.dims[0] - effect.element.clientHeight) + 'px' }); }},afterFinishInternal: function(effect) { with(Element) {undoClipping(effect.element); undoPositioned(effect.element.firstChild);undoPositioned(effect.element);setStyle(effect.element.firstChild, {bottom: oldInnerBottom}); }}}, arguments[1] || {}));}Effect.SlideUp = function(element) {element = $(element);Element.cleanWhitespace(element);var oldInnerBottom = Element.getStyle(element.firstChild, 'bottom');return new Effect.Scale(element, 0, Object.extend({ scaleContent: false, scaleX: false, scaleMode: 'box',scaleFrom: 100,restoreAfterFinish: true,beforeStartInternal: function(effect) { with(Element) {makePositioned(effect.element);makePositioned(effect.element.firstChild);if(window.opera) setStyle(effect.element, {top: ''});makeClipping(effect.element);show(element); }},  afterUpdateInternal: function(effect) { with(Element) {setStyle(effect.element.firstChild, {bottom:(effect.dims[0] - effect.element.clientHeight) + 'px' }); }},afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping].call(effect.element); undoPositioned(effect.element.firstChild);undoPositioned(effect.element);setStyle(effect.element.firstChild, {bottom: oldInnerBottom}); }}}, arguments[1] || {}));}Effect.Squish = function(element) {return new Effect.Scale(element, window.opera ? 1 : 0, { restoreAfterFinish: true,beforeSetup: function(effect) { with(Element) {makeClipping(effect.element); }},  afterFinishInternal: function(effect) { with(Element) {hide(effect.element); undoClipping(effect.element); }}});}Effect.Grow = function(element) {element = $(element);var options = Object.extend({direction: 'center',moveTransistion: Effect.Transitions.sinoidal,scaleTransition: Effect.Transitions.sinoidal,opacityTransition: Effect.Transitions.full}, arguments[1] || {});var oldStyle = {top: element.style.top,left: element.style.left,height: element.style.height,width: element.style.width,opacity: Element.getInlineOpacity(element) };var dims = Element.getDimensions(element);    var initialMoveX, initialMoveY;var moveX, moveY;switch (options.direction) {case 'top-left':initialMoveX = initialMoveY = moveX = moveY = 0; break;case 'top-right':initialMoveX = dims.width;initialMoveY = moveY = 0;moveX = -dims.width;break;case 'bottom-left':initialMoveX = moveX = 0;initialMoveY = dims.height;moveY = -dims.height;break;case 'bottom-right':initialMoveX = dims.width;initialMoveY = dims.height;moveX = -dims.width;moveY = -dims.height;break;case 'center':initialMoveX = dims.width / 2;initialMoveY = dims.height / 2;moveX = -dims.width / 2;moveY = -dims.height / 2;break;}return new Effect.Move(element, {x: initialMoveX,y: initialMoveY,duration: 0.01, beforeSetup: function(effect) { with(Element) {hide(effect.element);makeClipping(effect.element);makePositioned(effect.element);}},afterFinishInternal: function(effect) {new Effect.Parallel([ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),new Effect.Scale(effect.element, 100, {scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})], Object.extend({beforeSetup: function(effect) { with(Element) {setStyle(effect.effects[0].element, {height: '0px'});show(effect.effects[0].element); }},afterFinishInternal: function(effect) { with(Element) {[undoClipping, undoPositioned].call(effect.effects[0].element); setStyle(effect.effects[0].element, oldStyle); }}}, options))}});}Effect.Shrink = function(element) {element = $(element);var options = Object.extend({direction: 'center',moveTransistion: Effect.Transitions.sinoidal,scaleTransition: Effect.Transitions.sinoidal,opacityTransition: Effect.Transitions.none}, arguments[1] || {});var oldStyle = {top: element.style.top,left: element.style.left,height: element.style.height,width: element.style.width,opacity: Element.getInlineOpacity(element) };var dims = Element.getDimensions(element);var moveX, moveY;switch (options.direction) {case 'top-left':moveX = moveY = 0;break;case 'top-right':moveX = dims.width;moveY = 0;break;case 'bottom-left':moveX = 0;moveY = dims.height;break;case 'bottom-right':moveX = dims.width;moveY = dims.height;break;case 'center':  moveX = dims.width / 2;moveY = dims.height / 2;break;}return new Effect.Parallel([ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })], Object.extend({            beforeStartInternal: function(effect) { with(Element) {[makePositioned, makeClipping].call(effect.effects[0].element) }},afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping, undoPositioned].call(effect.effects[0].element);setStyle(effect.effects[0].element, oldStyle); }}}, options));}Effect.Pulsate = function(element) {element = $(element);var options    = arguments[1] || {};var oldOpacity = Element.getInlineOpacity(element);var transition = options.transition || Effect.Transitions.sinoidal;var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos)) };reverser.bind(transition);return new Effect.Opacity(element, Object.extend(Object.extend({  duration: 3.0, from: 0,afterFinishInternal: function(effect) { Element.setStyle(effect.element, {opacity: oldOpacity}); }}, options), {transition: reverser}));}Effect.Fold = function(element) {element = $(element);var oldStyle = {top: element.style.top,left: element.style.left,width: element.style.width,height: element.style.height };Element.makeClipping(element);return new Effect.Scale(element, 5, Object.extend({   scaleContent: false,scaleX: false,afterFinishInternal: function(effect) {new Effect.Scale(element, 1, { scaleContent: false, scaleY: false,afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping].call(effect.element); setStyle(effect.element, oldStyle);}} });}}, arguments[1] || {}));}</script><script type="text/javascript" language="javascript">addEvent(window, "load", sortables_init);var SORT_COLUMN_INDEX;function sortables_init() {if (!document.getElementsByTagName) return;tbls = document.getElementsByTagName("table");for (ti=0;ti<tbls.length;ti++) {thisTbl = tbls[ti];if (Element.hasClassName(thisTbl,'sortable') && (thisTbl.id)) {ts_makeSortable(thisTbl);}}}function ts_makeSortable(table) {if (table.rows && table.rows.length > 0) {var firstRow = table.rows[0];}if (!firstRow) return;for (var i=0;i<firstRow.cells.length;i++) {var cell = firstRow.cells[i];var txt = ts_getInnerText(cell);if(txt!="" && txt!=" " && !Element.hasClassName(cell,"nosort")){cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this);return false;">'+txt+'<span class="sortarrow"></span></a>';}}}function ts_getInnerText(el) {if (typeof el == "string") return el;if (typeof el == "undefined") { return el };if (el.innerText) return el.innerText;//Not needed but it is fastervar str = "";var cs = el.childNodes;var l = cs.length;for (var i = 0; i < l; i++) {switch (cs[i].nodeType) {case 1: //ELEMENT_NODEstr += ts_getInnerText(cs[i]);break;case 3://TEXT_NODEstr += cs[i].nodeValue;break;}}return str;}function ts_resortTable(lnk) {var span;for (var ci=0;ci<lnk.childNodes.length;ci++) {if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];}var spantext = ts_getInnerText(span);var td = lnk.parentNode;var column = td.cellIndex;var table = getParent(td,'TABLE');if (table.rows.length <= 1) return;var itm = ts_getInnerText(table.rows[1].cells[column]);sortfn = ts_sort_caseinsensitive;if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;if (itm.match(/^[$]/)) sortfn = ts_sort_currency;if (itm.match(/^[\d\.]+$/)) sortfn = ts_sort_numeric;SORT_COLUMN_INDEX = column;var firstRow = new Array();var newRows = new Array();for (i=0;i<table.rows[0].length;i++) { firstRow[i] = table.rows[0][i]; }for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows[j]; }newRows.sort(sortfn);if (span.getAttribute("sortdir") == 'down') {ARROW = '<img src="/db/images/icon_down.gif"/>';newRows.reverse();span.setAttribute('sortdir','up');} else {ARROW = '<img src="/db/images/icon_up.gif"/>';span.setAttribute('sortdir','down');}for (i=0;i<newRows.length;i++) { if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) table.tBodies[0].appendChild(newRows[i]);}for (i=0;i<newRows.length;i++) { if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows[i]);}var allspans = document.getElementsByTagName("span");for (var ci=0;ci<allspans.length;ci++) {if (allspans[ci].className == 'sortarrow') {if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?allspans[ci].innerHTML = '&nbsp;&nbsp;&nbsp;';}}}span.innerHTML = ARROW;ts_stripeTable(table);}function getParent(el, pTagName) {if (el == null) return null;else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())// Gecko bug, supposed to be uppercasereturn el;elsereturn getParent(el.parentNode, pTagName);}function ts_sort_date(a,b) {aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);if (aa.length == 10) {dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);} else {yr = aa.substr(6,2);if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }dt1 = yr+aa.substr(3,2)+aa.substr(0,2);}if (bb.length == 10) {dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);} else {yr = bb.substr(6,2);if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }dt2 = yr+bb.substr(3,2)+bb.substr(0,2);}if (dt1==dt2) return 0;if (dt1<dt2) return -1;return 1;}function ts_sort_currency(a,b) { aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');return parseFloat(aa) - parseFloat(bb);}function ts_sort_numeric(a,b) { aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));if (isNaN(aa)) aa = 0;bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX])); if (isNaN(bb)) bb = 0;return aa-bb;}function ts_sort_caseinsensitive(a,b) {aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();if (aa==bb) return 0;if (aa<bb) return -1;return 1;}function ts_sort_default(a,b) {aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);if (aa==bb) return 0;if (aa<bb) return -1;return 1;}function ts_stripeTable(tbl) {var table = $(tbl);var tbody;if(tbody = table.getElementsByTagName("tbody")[0]) {table = tbody;}for(i=0;i<table.rows.length;i++) {if(i%2) {newClass = "even";oldClass = "odd";} else {newClass = "odd";oldClass = "even";}Element.removeClassName(table.rows[i],oldClass);Element.addClassName(table.rows[i],newClass);}}function addEvent(elm, evType, fn, useCapture){if (elm.addEventListener){elm.addEventListener(evType, fn, useCapture);return true;} else if (elm.attachEvent){var r = elm.attachEvent("on"+evType, fn);return r;} else {alert("Handler could not be removed");}} </script><script type="text/javascript" language="javascript">function createStyleRule(selector, declaration) {if (!document.getElementsByTagName ||!(document.createElement || document.createElementNS)) return;var agt = navigator.userAgent.toLowerCase();var is_ie = ((agt.indexOf("msie") != -1) &&  (agt.indexOf("opera") == -1));var is_iewin = (is_ie &&  (agt.indexOf("win") != -1));var is_iemac = (is_ie &&  (agt.indexOf("mac") != -1));if (is_iemac) return; // script doesn't work properly in IE/Macvar head = document.getElementsByTagName("head")[0]; var style = (typeof document.createElementNS != "undefined") ?document.createElementNS("http://www.w3.org/1999/xhtml", "style") :document.createElement("style");if (!is_iewin) {var styleRule = document.createTextNode(selector + " {" + declaration + "}");style.appendChild(styleRule); // bugs in IE/Win}style.setAttribute("type", "text/css");style.setAttribute("media", "screen"); head.appendChild(style);if (is_iewin &&  document.styleSheets &&  document.styleSheets.length > 0) {var lastStyle = document.styleSheets[document.styleSheets.length - 1];if (typeof lastStyle.addRule == "object") {lastStyle.addRule(selector, declaration);}}}function zoomThumbnails(value) {if(!document.all) {var newValue = Math.round(value);var cssRule = "font-size: "+newValue+"px";createStyleRule("a.thumbnail pre",cssRule);}}function zoomThumbnailsUpdate(value) {var newValue = Math.round(value);var cssRule = "font-size: "+newValue+"px";createStyleRule("a.thumbnail pre",cssRule);}var myrules = {'#printqueue tr' : function(element){element.onmouseover = function(){Element.addClassName(element,"hover");},element.onmouseout = function(){Element.removeClassName(element,"hover");}},'a.deletejob' : function(element){if(document.all) {element.onclick = function(e) {return confirm("Are you sure you want to delete this job?");}}},'input.date' : function(dateField){if(!$(dateField.id+"trigger")) {if(dateField.id=="") {dateField.id = dateField.name;}Calendar.setup({inputField : dateField.id, ifFormat : "%m/%d/%y",showsTime : true,button : dateField.id, //*step : 1,weekNumbers: false,/* range: [2004,2005,2006], */showsTime: false,onUpdate: function(e) {var row = $(dateField.id).parentNode;while(row.tagName!="TR") {row = row.parentNode;}Element.removeClassName(row,"error");}});}}};function selectAll() {form = document.forms['printqueueform'];if (form.elements['entries[]'].length) {  for(var i = 0; i < form.elements['entries[]'].length; i++) {    form.elements['entries[]'][i].checked = 1;  }} else {  form.elements['entries[]'].checked = 1;}}function deselectAll() {form = document.forms['printqueueform'];if (form.elements['entries[]'].length) {  for(var i = 0; i < form.elements['entries[]'].length; i++) {    form.elements['entries[]'][i].checked = 0;  }} else {  form.elements['entries[]'].checked = 0;}}function showAdvSearch() {Effect.Fade('filter', {duration: 1.0});setTimeout("Effect.Appear('advanced_search', {duration: 1.0})", 940);$('search_link').innerHTML = 'Hide Advanced Search';$('search_link').onclick = hideAdvSearch;}function hideAdvSearch() {Effect.Fade('advanced_search', {duration: 1.0});setTimeout("Effect.Appear('filter', {duration: 1.0})", 940);$('search_link').innerHTML = 'Advanced Search';$('search_link').onclick = showAdvSearch;}Behaviour.register(myrules);</script></head><body class=""><div id="container"><!-- <div id="header"><a href="/" id="logo"><img src="/db/images/logo_bravoprint.gif" /></a><ul id="navbar"><li class="active"><a href="/dbc/SBBP.SB.LISTPEQS">Print Queue</a></li></ul></div>--><div id="maincontent"><div id="content"><!-- <h1>Print Queue</h1><div id="alerts"></div>--><div style="margin-left:12px; margin-bottom:30px;"> <div class="printDialog" id="printDialogSelected" style="display:none;left:92px;top:27px;"><div>Queue <input type="text" value="" style="width:40px;" maxlength="4" name="overridequeue"/><span class="button"><button type="submit" onclick="this.form.submit(); return false;">Print</button></span> <span class="button"><button type="button" onclick="Effect.SlideUp('printDialogSelected',{duration:0.25}); return false;">Cancel</button></span></div></div></div><form action="/dbc/SBBP.SB.LISTPEQS" method="post" id="printqueueform"><input type="hidden" value="" name="action" id="action"/><input type="hidden" value="" name="overridequeue" id="overridequeue"/><input type="hidden" value="" name="queue" id="queue"/><input type="hidden" value="" name="port" id="port"/><input type="hidden" value="" name="owner" id="owner"/><input type="hidden" value="" name="searchstring" id="searchstring"/><input type="hidden" value="" name="begindate" id="begindate"/><input type="hidden" value="" name="enddate" id="enddate"/><input type="hidden" value="" name="search_type" id="search_type"/><div style="float: left;margin: 0 0 10px 12px;"><img src="/db/images/graphic_withselected_up.gif"/> <a href="#" title="Select All" onclick="selectAll();return false;">Select All</a> |<a href="#" title="Deselect All" onclick="deselectAll();return false;">Deselect All</a> | With Selected: <span id="queueOverride">Print to Queue <input type="text" value="" name="queuet" id="queuet" style="width:40px;vertical-align:bottom;"/></span><a href="#" title="Print Selected" onclick="$('overridequeue').value=$('queuet').value;$('action').value='print';$('printqueueform').submit(); return false;"><img src="/db/images/button_print.gif"/></a><a href="#" title="Delete Selected" onclick="if(confirm('Are you sure you want to delete the selected jobs?')) { $('action').value='delete';$('printqueueform').submit(); return false;} else { return false; }"><img src="/db/images/button_delete.gif"/></a></div><table class="listing sortable" id="printqueue"><thead><tr><th style="width:20px;"></th><th>Job</th><th>Queue</th><th>User</th><th>Port</th><th>Size (k)</th><th>Datetime</th><th>Status</th><th style="width:120px;"></th></tr></thead><tbody>[QUEUE]</tbody></table><div style="margin: 0 0 0 12px;"><img src="/db/images/graphic_withselected.gif"/> <a href="#" title="Select All" onclick="selectAll();return false;">Select All</a> |<a href="#" title="Deselect All" onclick="deselectAll();return false;">Deselect All</a> | With Selected: <span id="queueOverride">Print to Queue <input type="text" value="" name="queueb" id="queueb" style="width:40px;vertical-align:bottom;"/></span><a href="#" title="Print Selected" onclick="$('overridequeue').value=$('queueb').value;$('action').value='print';$('printqueueform').submit(); return false;"><img src="/db/images/button_print.gif"/></a><a href="#" title="Delete Selected" onclick="if(confirm('Are you sure you want to delete the selected jobs?')) { $('action').value='delete';$('printqueueform').submit(); return false;} else { return false; }"><img src="/db/images/button_delete.gif"/></a><br/> </div></form></div></div></div><div id="footer"></div></body></html>                                                         ./mvappsvr/core/uv/APP.INSTALLER                                                                    0000644 0000000 0000000 00000025672 13674161070 015071  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   *
* Copyright (C) 2009 Sierra Bravo Corporation, All Rights Reserved
*
* Written by: Luke Bucklin, Sierra Bravo Corporation
* Date: 07/15/2009
* Description: Application installer
*
* Modified By: Dave Bucklin, Nerdery Interactive Labs
* Date: 02/04/2011
* Description: Add overwrite flag, clashes handling specific to MVDashboard
*
* Modified By: Mike Street, Zumasys
* Date: 07/17/2015
* Description: Adapt for UniVerse
*
*
    BUFFER = ""
*
    INSTALL.LOG.ON = 0
    INSTALL.LOG.ID = "INSTALL*":DATE():"*":TIME()
    INSTALL.LOG = ""
    PROCESS.STATUS = 0
    OVR.FLAG = 0
    PROMPT ""
    PRINT "File path: ":    
    INPUT PACKAGE.FILE
    IF PACKAGE.FILE = "VERSION" THEN
        PRINT
        PRINT "Installer Version"
        PRINT "1.0"
        STOP
    END
*
    returnCode = ""
*
    OPENSEQ PACKAGE.FILE TO HANDLE ELSE
        PRINT "Unable to open sequential file"
        STOP
    END
*UV   HANDLE = %OPEN(PACKAGE.FILE,O$RDONLY+O$BINARY)
*UV   IF NOT(HANDLE) THEN
*UV       PRINT "Unable to open file." ; STOP
*UV   END
*
    L = 0
    PACKET = ""
    LOOP    
*UV     L = %READ(HANDLE,BUFFER,10000)
*UV
        READBLK BUFFER FROM HANDLE, 10000 ELSE
   IF PACKET = '' THEN
      CRT 'CANT READ BUFFER'
      STOP
    END
   BUFFER=''
 END
        L=LEN(BUFFER)
*END UV*
    WHILE L > 0 DO
        PACKET := BUFFER
    REPEAT
    IF PACKET = "" THEN
        PRINT "No package."
        STOP
    END
    INSTALL.ID = TIMEDATE()
    KEEP.SOURCE = "1"
*
    PRINT
    PRINT "Installing..."
*
    OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE
        CMD = "CREATE-FILE MV.PACKED.FILE 1 31"
        GOSUB EXEC.CMD
        OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE
            ERRFILE = "MV.PACKED.FILE"
            GOSUB OPEN.ERR
            STOP
        END
    END
    WRITE PACKET ON F.PACKED.FILE, "PACKAGE"

    OPEN '','VOC' TO F.MD ELSE
        ERRFILE = "VOC"
        GOSUB OPEN.ERR
        STOP
    END
    OPEN "MV.INSTALL" TO F.INSTALL ELSE
        CMD = "CREATE-FILE MV.INSTALL 1 11"
        GOSUB EXEC.CMD
        OPEN "MV.INSTALL" TO F.INSTALL ELSE
            ERRFILE = "MV.INSTALL"
            GOSUB OPEN.ERR
            STOP
        END
    END
    OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE
        CMD = "CREATE-FILE MV.INSTALL.CF 1 11"
        GOSUB EXEC.CMD
        OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE
            ERRFILE = "MV.INSTALL.CF"
            GOSUB OPEN.ERR
            STOP
        END
    END
    OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE
        CMD = "CREATE-FILE MVAPPS.INSTALLED 3 31"
        GOSUB EXEC.CMD
        OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE
            ERRFILE = "MVAPPS.INSTALLED"
            GOSUB OPEN.ERR
            STOP
        END
    END
    OPEN "DICT","MVDB.CLASHES" TO FD.MVDB.CLASHES ELSE
        CMD = "CREATE-FILE DICT MVDB.CLASHES 3"
        GOSUB EXEC.CMD
    END
    INSTALL.LOG.ON = 1
*
    CLEARFILE F.INSTALL
    DELETE F.INSTALL.CF, "MVAPPS-PRE-SCRIPT"      ;* Get rid of this just in case one is left over
    DELETE F.INSTALL.CF, "MVAPPS-POST-SCRIPT"
    DELETE F.INSTALL.CF, "PACKAGE.INFO"
    TARGET = F.INSTALL
    TARGET.NAME = "MV.INSTALL"
    GOSUB UNPACK
* All individual file packages are now in INSTALL
* Unpack the MD scripts
    READ PACKET FROM F.INSTALL, "MV.INSTALL.CF" THEN
        TARGET = F.INSTALL.CF
        TARGET.NAME = "MV.INSTALL.CF"
        GOSUB UNPACK
        DELETE F.INSTALL, "MV.INSTALL.CF"
    END
*
* Execute scripts that are required prior to compilation
*
    READ CMD FROM F.INSTALL.CF, "MVAPPS-PRE-SCRIPT" THEN
        LOG.LINE = TIMEDATE():": Processing PRE-INSTALL commands..."
        INSTALL.LOG<-1> = LOG.LINE
* Execute commands that need to be run before the install process begins
        GOSUB EXEC.CMD
        LOG.LINE = TIMEDATE():": Completed PRE-INSTALL commands."
        INSTALL.LOG<-1> = LOG.LINE
    END
    READ PACKAGE.INFO FROM F.INSTALL.CF, "PACKAGE.INFO" ELSE PACKAGE.INFO = ""
    PACKAGE.ID = PACKAGE.INFO<6>
    PACKAGE.INFO<4> = DATE()
    PACKAGE.INFO<5> = TIME()
*
    SELECT F.INSTALL
    LOOP
        READNEXT PKG.ID ELSE EXIT
        IF PKG.ID # "" THEN
            READ PACKET FROM F.INSTALL, PKG.ID THEN
                TARGET.FILE = FIELD(PKG.ID," ",1)
                IF TARGET.FILE[1,7] = "BINARY:" THEN TARGET.FILE=TARGET.FILE[8,999]        ;*UV
                DICT.MOD = FIELD( PKG.ID," ",2)
                DATA.MOD = FIELD( PKG.ID," ",3)
                DICT = ""
                IF FIELD( PKG.ID,'_',1 ) = "DICT" THEN
                    TARGET.FILE = FIELD( PKG.ID, '_', 2 )
                    IF TARGET.FILE[1,7] = "BINARY:" THEN TARGET.FILE=TARGET.FILE[8,999]    ;*UV
                    DICT = "DICT"
                END
                OPEN DICT,TARGET.FILE TO F.TARGET ELSE
                    IF NOT(INDEX(TARGET.FILE,':',1)) THEN
                        IF DICT.MOD = "" THEN DICT.MOD = 3
                        IF DATA.MOD = "" THEN DATA.MOD = 31
                        CMD = "CREATE-FILE ":TARGET.FILE:" ":DICT.MOD:" ":DATA.MOD
                        GOSUB EXEC.CMD
                    END
                    OPEN DICT,TARGET.FILE TO F.TARGET ELSE
                        PRINT "Unable to create file ":TARGET.FILE
                        GOSUB CLEANUP
                        STOP
                    END
                END
                TARGET = F.TARGET
                TARGET.NAME = TRIM(DICT:" ":TARGET.FILE)
                GOSUB UNPACK
            END
        END
    REPEAT
*
* Execute script required post compilation
*
    READ CMD FROM F.INSTALL.CF, "MVAPPS-POST-SCRIPT" THEN
        LOG.LINE = TIMEDATE():": Processing POST-INSTALL commands..."
        INSTALL.LOG<-1> = LOG.LINE
* Use compile options if they are present.
        OPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL THEN
            READ COMPILE.SETUP FROM F.MVDB.CONTROL, 'COMPILE.SETUP' THEN
                COMPILE.VERB = FIELD(COMPILE.SETUP<1>,' ',1)
                IF COMPILE.VERB # '' THEN
                    OPTS = FIELD(COMPILE.SETUP<1>,'(',2)
                    IF OPTS # '' THEN OPTS = "(":OPTS
                    CMD.CNT = DCOUNT( CMD, @AM )
                    FOR CMD.XX = 1 TO CMD.CNT
                        IF FIELD(CMD<CMD.XX>,' ',1) = 'BASIC' OR FIELD(CMD<CMD.XX>,' ',1) = 'COMPILE' THEN
*make sure we use the right verb and options from the compile.setup
                            CMD<CMD.XX> = COMPILE.VERB:' ':CMD<CMD.XX>[INDEX(CMD<CMD.XX>,' ',1)+1,999]:' ':OPTS
                        END
                    NEXT CMD.XX
                END
            END
        END
* Execute commands that need to be run at the end of the install process
        GOSUB EXEC.CMD
        LOG.LINE = TIMEDATE():": Completed POST-INSTALL commands."
        INSTALL.LOG<-1> = LOG.LINE
    END
*
*UV*    IF NOT(KEEP.SOURCE) THEN
*UV*        FOR X = 1 TO DCOUNT( SOURCE.FILES, @AM )
*UV*            CMD = "CLEAR-FILE DATA ":SOURCE.FILES<X>
*UV*            GOSUB EXEC.CMD
*UV*        NEXT X
*UV*    END
    READ INSTALL.LIST FROM F.INSTALL.CF, "LAST.INSTALL" ELSE INSTALL.LIST = ""
    INSTALL.LIST = INSERT( INSTALL.LIST, 1, 0, 0, INSTALL.ID )
    WRITE INSTALL.LIST ON F.INSTALL.CF, "LAST.INSTALL"
    GOSUB CLEANUP
    INSTALL.LOG<-1> = TIMEDATE():": Install complete."
    WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID
    WRITE PACKAGE.INFO ON F.MVAPPS.INSTALLED, PACKAGE.ID
    PROCESS.STATUS = 1
    GOSUB SEND.DATA
    STOP
*********
UNPACK:   *
*********
    PRINT "Unpacking ":TARGET.NAME:"... ":
*
    BYTES = 0
    CNT = 0
    LOOP
        PLENGTH = OCONV( PACKET[1,6], 'MCXD' )
        REC = PACKET[7,PLENGTH]
        PACKET = PACKET[PLENGTH+7,9999999]
        ID = REC<1>
        REC = DELETE( REC, 1, 0, 0 )
        TYP = REC[1,2]
        OVR.FLAG = REC[3,1]
        REC = REC[4,9999999]
        IF TYP = "0x" THEN
            REC = OCONV( REC, 'MY' )
            END ELSE IF TYP # "0c" THEN
                REC = TYP:REC
            END
*
            CNT += 1
            BYTES += LEN(REC)
            IF OVR.FLAG THEN
                IF DICT = "" THEN
*If we're not installing DICT items, compare for CLASHES
                    READ CLASH FROM TARGET, ID THEN
                        BEGIN CASE
*Preserve dashboard user passwords
                        CASE TARGET.FILE = "MVDB.USERS"
                            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>
*Preserve dashboard access profile
                        CASE TARGET.FILE = "MVDB.DEFS"
                            IF CLASH<5> # REC<5> THEN REC<5> = CLASH<5>
*Preserve widget access profile
                        CASE TARGET.FILE = "MVDB.WIDGETS"
                            IF CLASH<2> # REC<2> THEN REC<2> = CLASH<2>
*Preserve widget compile option
                        CASE TARGET.FILE = "MVDB.CONTROL" AND ID = "COMPILE.SETUP"
                            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>
                        END CASE
                        IF CLASH # '' AND REC # CLASH THEN
                            CLASH.NAME = TARGET.NAME
                            CONVERT " " TO "_" IN CLASH.NAME
                            OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE
                                CMD = "CREATE-FILE DATA MVDB.CLASHES,":CLASH.NAME:" 7"
                                GOSUB EXEC.CMD
                                OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE
                                    PRINT "Unable to create file MVDB.CLASHES,":CLASH.NAME
                                    GOSUB CLEANUP
                                    STOP
                                END
                            END
                            WRITE CLASH ON F.CLASHES, ID
                            CLOSE F.CLASHES
                        END
                    END
                END
                WRITE REC ON TARGET, ID
            END ELSE
                READ TST FROM TARGET, ID ELSE
                    WRITE REC ON TARGET, ID
                END
            END
            IF NOT(MOD(CNT,500)) THEN PRINT "*":
        UNTIL PACKET = "" DO REPEAT
        IF CNT # 1 THEN PLURAL = "s" ELSE PLURAL = ""
        PRINT CNT:" record":PLURAL:"."
        LOG.LINE = TIMEDATE():": UNPACKED ":CNT:" RECORDS TO ":TARGET.NAME
        INSTALL.LOG<-1> = LOG.LINE
        RETURN
**********
CLEANUP:  *
**********
        CLEARFILE F.INSTALL
        CLEARFILE F.PACKED.FILE
        RETURN
*
EXEC.CMD: *
*
        CMD.CNT = DCOUNT( CMD, @AM )
        FOR CMD.XX = 1 TO CMD.CNT
            THIS.CMD = CMD<CMD.XX>
            LOG.LINE = TIMEDATE():": EXEC: ":THIS.CMD
            INSTALL.LOG<-1> = LOG.LINE
            EXECUTE THIS.CMD CAPTURING JUNK
            IF INSTALL.LOG.ON THEN
                WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID
            END
        NEXT CMD.XX
        RETURN
*
OPEN.ERR: *
*
        LOG.LINE = TIMEDATE():": FILE OPEN ERROR: ":ERRFILE
        INSTALL.LOG<-1> = LOG.LINE
        PRINT LOG.LINE
        GOSUB SEND.DATA
        RETURN
*
SEND.DATA:*
*
        PRINT
        IF PROCESS.STATUS = 1 THEN INSTALL.STATUS = "Success" ELSE INSTALL.STATUS = "Failed"
        PRINT "Install process finished. Status: ":INSTALL.STATUS
        RETURN
    END
                                                                      ./mvappsvr/core/uv/MVDB.SETUP                                                                       0000644 0000000 0000000 00000000315 13674161070 014527  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PQ
HLONGNAMES ON
P
HCREATE-BFILE WDB.BP 11
P
HCOPY WDB.BP.CORE APP.INSTALLER (O
STON
H(WDB.BP
P
HBASIC WDB.BP APP.INSTALLER
P
HCATALOG WDB.BP APP.INSTALLER LOCAL
P
HRUN WDB.BP APP.INSTALLER
STON
A2
H<
P
X
                                                                                                                                                                                                                                                                                                                   ./mvappsvr/core/uv/dbdoc.html                                                                       0000644 0000000 0000000 00000010744 12571716373 015134  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <ol>
    <li id="database_required">
        <h3 class="docs_sub_item">Required Parameters</h3>
        <p>The "Required Parameters" section includes all of the parameters that must be set for the software to 
           operate correctly.
           <br><br>
           <u>UniData Command Path</u>
              This field must contain the full operating system path to your UniData command executable (udt on
              Linux or udt.exe on Windows).

<!--       <br><br>
           <u>UniData User ID</u>
              The UniData User ID identifies the username that is used to access the database account which houses
              your MultiValue software.  This value is not currently used.

           <br><br>
           <u>UniData Password</u>
              This field contains the password for the MVDASHBOARD user account.  When initially configuring the
              software, use this field to set the initial password for the account. This value is not currently used.
-->
           <br><br>
           <u>UniData Account</u>
              This field contains the UniData directory name that is used to house your application server software.  When
              initially configuring the software, use this field to set the account name. This account directory will be
              created in the Account Parent Directory. Do not enter a full path in this field.

           <br><br>
           <u>Account Parent Directory</u>
              This field should be filled out to the full operating system path of the parent directory which will contain the dashboard account directory.
              The dashboard software installation will create the dashboard account in this directory.

        </p>
    </li>
    <li id="database_optional">
        <h3 class="docs_sub_item">Optional Parameters</h3>
        <p>The "Optional Parameters" section includes options that may enhance the operation of your software but are not
           required for its operation.
<!--
           <br><br>
           <u>Working Directory</u>
              This field contains the initial working directory that is used for the software.  Typically, this can be set to
              any temporary storage directory or the installation directory of the application server software.
-->
           <br><br>
           <u>Segment Size</u>
              This field contains the maximum length of the data string that is sent to the MultiValue database during any
              request.  The default value for this field is 3000, but it can be adjusted up or down as needed.  Typically, this
              field would be adjusted down if you are experiencing any data loss with data inside the request URI.

           <br><br>
           <u>DB Retries</u>
              This field contains the number of times that the software will attempt to connect to your MultiValue database
              before giving up and displaying an error message.  A common reason that the system would not be able to connect
              to the database would be that the system has exceeded its licensed number of user sessions.  Configuring this
              parameter to a higher number would cause the system to attempt to get a user license multiple times per connection.

              Typically, this should be set to "3" or some other integer.
        </p>
    </li>
    <li id="database_install">
        <h3 class="docs_sub_item">Install Dashboard Software</h3>
        <p>
          The "Install Dashboard Software" section of this tab is used to install or re-install the core software package to your
          MultiValue database.  This section is typically only necessary during the initial installation process, however it could
          also be used as part of an upgrade process or re-initialization of the software.

<!--       <br><br>
           <u>root or Administrator Username</u>
              This field should be filled out to include the username of your "root" or "Administrator" user, or any user with full database privileges.

           <br><br>
           <u>root or Administrator Password</u>
              This field should be filled out to include the password for your "root" or "Administrator" user as configured above. 
-->
           <br><br>
           <u>Package Directory</u>
              This field should be filled out to include the system directory which contains the core software packages.  These
              packages were installed with your software and the correct directory will typically be already filled in.

        </p>
    </li>

</ol>
                            ./mvappsvr/core/uv/dbconfig.html                                                                    0000644 0000000 0000000 00000013163 12571716373 015632  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <div class="database_setup">
    <form name="database_setup" id="database_setup" method="get">
    
        <div class="pipe">
            <input type="hidden" name="feature" value="database_setup">
            <input type="hidden" name="tab" value="database">
            <input type="hidden" name="submit_form" value="true">
            <table cellpadding="0">
                <tr>
                    <th>UniVerse Command Path:</th>
                    <td><input type="text" name="dbbinary" id="dbbinary" value="[DBBINARY]"/><a href="javascript:showHelp('dbbinary_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
<!--            <tr>
                    <th>UniVerse User ID:</th>
                    <td><input type="text" name="dbusername" id="dbusername" value="[DBUSERNAME]"/><a href="javascript:showHelp('dbusername_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>UniVerse Password:</th>
                    <td><input type="text" name="dbpassword" id="dbpassword" value="[DBPASSWORD]"/><a href="javascript:showHelp('dbpassword_help', 'required_help_box');" class="info">More info</a></td>
                </tr> -->
                <tr>
                    <th>UniVerse Account:</th>
                    <td><input type="text" name="dbaccount" id="dbaccount" value="[DBACCOUNT]"/><a href="javascript:showHelp('dbaccount_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>Account Parent Directory:</th>
                    <td><input type="text" name="dbacctpath" id="dbacctpath" value="[DBACCTPATH]"/><a href="javascript:showHelp('dbacctpath_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
            </table>
        </div>

        <div class="pipe">
            <h2 class="">Optional Parameters</h2>
            <table cellpadding="0">
<!--            <tr>
                    <th>Working Directory:</th>
                    <td><input type="text" name="dbworkingdir" id="dbworkingdir" value="[DBWORKINGDIR]"/><a href="javascript:showHelp('dbworkingdir_help', 'optional_help_box');" class="info">More info</a></td>
                </tr> -->
                <tr>
                    <th>Segment Size:</th>
                    <td><input type="text" name="maxrequest" id="maxrequest" value="[MAXREQUEST]"/><a href="javascript:showHelp('maxrequest_help', 'optional_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>DB Retrys:</th>
                    <td><input type="text" name="dbfails" id="dbfails" value="[DBFAILS]"/><a href="javascript:showHelp('dbfails_help', 'optional_help_box');" class="info">More info</a></td>
                </tr>
            </table>
        </div>
        <a href="javascript:saveDB();" class="save">Save Changes</a>                
        <br>
    </form>
</div>
            
[DBINSTALL]

<div class="database_install">
    <br><br>
            
    <form name="install_dashboard" id="install_dashboard" method="get">
        <input type="hidden" name="tab" value="database">
        <input type="hidden" name="feature" value="install_dashboard">
        <input type="hidden" name="submit_form" value="true">
        <div class="pipe">
            <h2>Install Dashboard Software</h2>
            <table cellpadding="0">
<!--            <tr>
                    <th>root or Administrator Username:</th>
                    <td><input type="hidden" name="dm_username" id="dm_username" value="[DM_USERNAME]"/><a href="javascript:showHelp('dm_user_help', 'install_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>root or Administrator Password:</th>
                    <td><input type="hidden" name="dm_password" id="dm_password" value="[DM_PASSWORD]"/><a href="javascript:showHelp('dm_pass_help', 'install_help_box');" class="info">More info</a></td>
                </tr> -->
                <tr>
                    <th>Package Directory:</th>
                    <td><input type="text" name="db_package" id="db_package" value="[DB_PACKAGE]"/><a href="javascript:showHelp('db_package_help', 'install_help_box');" class="info">More info</a></td>
                </tr>
            </table>
        </div>
        <a href="javascript:installDB();" class="save">Install</a>
        <div class="clear"></div>
    </form>
</div>

<script>
function validateDB(form){
    if (form.dbbinary.value == "") {
        alert("Missing required field!");
        form.dbbinary.focus();
        return (false);
    }
    if (form.dbaccount.value == "") {
        alert("Missing required field!");
        form.dbaccount.focus();
        return (false);
    }
/*  if (form.dbusername.value == "") {
        alert("Missing required field!");
        form.dbusername.focus();
        return (false);
    } */
    if (form.dbacctpath.value == "") {
        alert("Missing required field!");
        form.dbacctpath.focus();
        return (false);
    }
    return (true);
}
function saveDB(){
    document.database_setup.action = ""; //server side script location
    if(validateDB(document.database_setup)){
        document.database_setup.submit();
    }
}
function validateInstall(form) {
    if (form.db_package.value == "") {
        alert("Missing required field!");
        form.db_package.focus();
        return (false);
    }
    return (true);
}
function installDB(){
    document.install_dashboard.action = ""; //server side script location
    if(validateInstall(document.install_dashboard)){
        document.install_dashboard.submit();
    }
}
</script>
                                                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/core/uv/platform.conf                                                                    0000644 0000000 0000000 00000007547 13364666755 015706  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ;#############################################################################;
; UniVerse Platform Definitions
;#############################################################################;  

[db_platform]

; Database platform type (should be same as core subdirectory name where platform files are located)
dbType = uv

; The following tokens are replaced by configuration settings and installation options when processing
; installation commands, installation data files, required file list, and the mvconnector command line.
; Most of these correspond to a "db..." setting or option, as defined below.
; [DBBINARY], [DBACCOUNT], [DBUSERNAME], [DBPASSWORD], [DBVME], [DBWORKINGDIR], [DBAPPNAME], [DBHOSTNAME]
; [DM_USERNAME], [DM_PASSWORD], [DM_ACCT_PASS], [DBACCTPATH]
; [DB_PACKAGE] - this is the full path to the directory containing the platform core files, including this 'platform.conf' file.
; [PACKAGE_FOLDER] - exactly the same as [DB_PACKAGE] except uses forward slashes for directory separator under Windows (d3).
; [DBCMDLINE] - the command line passed to the database server. This is formed internally and varies depending on the function.
;
; Installation commands can have optional parts, enclosed in { }. Within the curly brackets, there must be one
; token enclosed in [ ]. If the token is null, the entire part enclosed in { } is removed from the command. Otherwise
; only the curly brackets are removed. This allows using a command that has an optional password (or other parameter)
; to be written like {,[DM_ACCT_PASS]} where, the leading comma will be removed if DM_ACCT_PASS is null.


; Database installation commands (up to 9, executed in sequence). To feed data to the database command STDIN,
; use an 'echo' command and pipe it to the database command. On Linux, use 'printf', on Windows, use 'echo'.
; The install command line must be less than 2048 characters!

; create the account directory
install_command1 = "umask 002 ; mkdir -p [DBACCTPATH]/[DBACCOUNT]"
 
; create the UniVerse account in our new directory
install_command2 = "umask 002 ; cd [DBACCTPATH]/[DBACCOUNT] ; $(dirname "[DBBINARY]")/mkaccount PICK"

; run MVDB.SETUP PROC to install the package
install_command3 = "cd [DBACCTPATH]/[DBACCOUNT] ; printf "PTERM CASE NOINVERT\nED VOC WDB.BP.CORE\nDE9999\nI\nF\n[DB_PACKAGE]\nD_VOC\n\nFI\nCOPY WDB.BP.CORE MVDB.SETUP (O\n(VOC\nMVDB.SETUP [DB_PACKAGE]/MVDB-FULL\n" | [DBBINARY]"

; List of files/directories that must exist before installation can begin
install_files = [DBBINARY],[DB_PACKAGE]/APP.INSTALLER,[DB_PACKAGE]/MVDB.SETUP,[DB_PACKAGE]/MVDB-FULL,[DBACCTPATH]

; mvconnector command line
dbCommand = "[DBBINARY] "[DBCMDLINE]" 2>&1"

; mvconnector required parameters
dbRequired = dbBinary,dbAcctPath,dbAccount

; mvconnector environment variables (separate variables using commas; tokens may be used in the value for a variable)
dbEnvVars = 

; Full path to database command executable
dbBinary = "/usr/uv/bin/uv"

; Account name where dashboard is installed
dbAccount = MVDB

; User name to log on to the dashboard account
dbUsername =

; Password for dashboard account user
dbPassword =

; Working directory for database command (current directory)
; UniVerse note: this variable is not referenced in dbconfig.html, so it will get
; copied as-is to dbc_database.conf, and when the database command line is
; constructed, the token substitution will take place. This is very important!
dbWorkingDir = "[DBACCTPATH]/[DBACCOUNT]"

; Path to parent directory which will contain the dashboard account directory (QM, JB, U2)
dbAcctPath = /home

; Maximum length of command line sent to database
maxRequest = 1000

; Number of times to retry database requests
dbFails = 3

; Mode for passing query string (0 = command line, otherwise pipe to stdin - newline is LF=1, CR/LF=2, CR=3)
dbVarMode = 1

; Root or administrator user name
dm_username = 

; Root or administrator password
dm_password = 
                                                                                                                                                         ./mvappsvr/core/ud/                                                                                 0000755 0000000 0000000 00000000000 13364666755 013154  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/core/ud/dbhelp.html                                                                      0000644 0000000 0000000 00000003123 12571716373 015266  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <div class="help_box" id="required_help_box">
    <h3>More Info</h3>
    <div id="dbbinary_help" class="help">The path to the UniData command executable (udt.exe).</div>
    <div id="dbusername_help" class="help">The Unix user that will own the UniData account directory. If the specified user does not exist, a new Unix user will be created.</div>
    <div id="dbgroup_help" class="help">The primary Unix group for the user specified above. If the specified group does not exist, a new group will be created.</div>
    <div id="dbaccount_help" class="help">The name of the UniData account (directory) that will hold your dashboard software.</div>
    <div id="dbacctpath_help" class="help">The parent directory in which the dashboard account directory will be created.</div>
</div>

<div class="help_box" id="optional_help_box">
    <h3>More Info</h3>
    <div id="dbworkingdir_help" class="help">The working directory used by the app server.</div>
    <div id="maxrequest_help" class="help">The maximum number of characters to be issued in a single UniData request.</div>
    <div id="dbfails_help" class="help">The number of times to retry on a failure to connect to UniData.</div>
</div>

<div class="help_box" id="install_help_box">
    <h3>More Info</h3>
    <div id="dm_user_help" class="help">The username of your "root" or "Administrator" user, or any user will full database privileges.</div>
    <div id="dm_pass_help" class="help">The password (if any) required to log in as the user specified above.</div>
    <div id="db_package_help" class="help">The path to the installation package files.</div>
</div>
                                                                                                                                                                                                                                                                                                                                                                                                                                             ./mvappsvr/core/ud/MVDB-FULL                                                                        0000644 0000000 0000000 00005645205 13674161075 014375  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   001161RSS.BP0c00000ECSUB.TEMPLATE.SEL0c2SUBROUTINE SUB.XXX.SEL(VARS,VALS,FEED,F.FILE,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*OPEN "FILE" TO F.FILE ELSE STOP 201, "FILE"*XLINE = 'SSELECT FILE .... WITH PARAMS ...'EXECUTE XLINE CAPTURING JUNKRETURN0002EESUB.RE.SEL0c2SUBROUTINE SUB.RE.SEL(VARS,VALS,FEED,F.RUNTIME.ERRORS,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*FEED.TITLE = RSS$FEED.REC<1>LOCATE "account" IN VARS SETTING POS THEN  account = VALS<POS>  FEED.TITLE := '(Account: ':account:')'END ELSE account = ""LOCATE "user" IN VARS SETTING POS THEN  user = VALS<POS>  FEED.TITLE := '(User: ':user:')'END ELSE user = ""RSS$FEED.REC<1> = FEED.TITLE*OPEN '','RUNTIME-ERRORS' TO F.RUNTIME.ERRORS ELSE STOP 201, 'RUNTIME-ERRORS'XLINE = 'SSELECT RUNTIME-ERRORS BY-DSND DATE BY-DSND TIME'IF account # "" THEN  XLINE := ' WITH USERPIB = "[ ':account:'"'END ELSE IF user # "" THEN  XLINE := ' WITH USERPIB = "[ ':user:' ]"'ENDXLINE := " SAMPLING 100"EXECUTE XLINE CAPTURING JUNKRETURN0001F2RSS.DATA.INC0c2DIM RSS.DATA(20)*EQU RSS$TITLE       TO RSS.DATA(1)EQU RSS$LINK        TO RSS.DATA(2)EQU RSS$AUTHOR      TO RSS.DATA(3)EQU RSS$DATE        TO RSS.DATA(4)EQU RSS$TIME        TO RSS.DATA(5)EQU RSS$DESCRIPTION TO RSS.DATA(6)*EQU RSS$FEED.REC    TO RSS.DATA(14)EQU RSS$USER1       TO RSS.DATA(15)EQU RSS$USER2       TO RSS.DATA(16)EQU RSS$USER3       TO RSS.DATA(17)EQU RSS$USER4       TO RSS.DATA(18)EQU RSS$USER5       TO RSS.DATA(19)EQU RSS$USER6       TO RSS.DATA(20)0000EESUB.FEEDS.SEL0c2SUBROUTINE SUB.FEEDS.SEL(VARS,VALS,FEED,F.RSS.FEEDS,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE STOP 201, 'RSS.FEEDS'*EXECUTE 'SSELECT RSS.FEEDS # "FEEDS"' CAPTURING JUNKRETURN000196SUB.FEEDS.ITEM0c2SUBROUTINE SUB.FEEDS.ITEM(VARS,VALS,F.RSS.FEEDS,FEED.ID,FEED.REC,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*RSS$TITLE = FEED.REC<1>RSS$LINK = "RSS.MAIN?feed=":FEED.IDIF FEED.REC<2> # "" THEN  PARAMS = FEED.REC<2>  IF PARAMS[1,1] # "&" THEN PARAMS = "&":PARAMS  RSS$LINK := PARAMSENDRSS$AUTHOR = "RSS Feed"RSS$DATE = DATE()RSS$TIME = TIME()RSS$DESCRIPTION = FEED.REC<3>RETURN0007FCSUB.RE.ITEM0c2SUBROUTINE SUB.RE.ITEM(VARS,VALS,F.RUNTIME.ERRORS,ITEM.ID,RECORD,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*RSS$TITLE = ""RSS$LINK = ""RSS$AUTHOR = ""RSS$DATE = ""RSS$TIME = ""RSS$DESCRIPTION = ""*DATA RECORD<2,1>EXECUTE "PRINT-ERR DM,MESSAGES, ":RECORD<1>:" (S" CAPTURING ERR*CONVERT @AM TO " " IN ERRERR = OCONV(ERR,'MCP')ERR = TRIM(ERR)RSS$TITLE = OCONV(FIELD(ITEM.ID,'*',1),'D0/'):" @ ":OCONV(FIELD(ITEM.ID,'*',2),'MTS'):": ":RECORD<4>:" ":ERR*RSS$AUTHOR=RECORD<3>*RSS$DESCRIPTION = 'Pib /User: ':RECORD<3>:'<br />'STACK = ""FOR N = DCOUNT(RECORD<5>,@VM) TO 1 STEP -1  STACK := RECORD<5,N>  IF STACK # "" AND N # 1 THEN STACK := ' --> 'NEXT NIF RECORD<5> # '' THEN RSS$DESCRIPTION := "Stack: ":STACK:'<hr />'MD = FIELD( RECORD<3>, ' ', 3 )** Try and find the source code to include in the feed.*SREC = ""OPEN MD:",MD," TO F.MD THEN  FNAME = ""  READ CREC FROM F.MD, RECORD<4> THEN    IF CREC<1> = "VR" THEN ;* This is a catalog pointer, file name is in field 4      FNAME = FIELD(CREC<4>,' ',1)    END ELSE IF CREC<1> = "PQ" THEN      IF FIELD(CREC<2>, ' ', 1 ) = "HRUN" THEN        FNAME = FIELD( CREC<2>, ' ', 2 )      END    END  END  IF FNAME # "" THEN    OPEN MD:",":FNAME:"," TO SFILE THEN      READ SREC FROM SFILE, RECORD<4> ELSE SREC = ""    END  ENDENDIF SREC # "" THEN  CALL SWAP(SREC,'&','&amp;')  CALL SWAP(SREC,'<','&lt;')  CALL SWAP(SREC,'>','&gt;')  LINENO = RECORD<2,1>  IF LINENO MATCHES "1N0N" THEN    START.LINE = LINENO - 10    IF START.LINE < 0 THEN START.LINE = 1  END ELSE LINENO = 1 ; START.LINE = 1  END.LINE = LINENO + 10  RSS$DESCRIPTION := '<pre>'  FOR LINUM = START.LINE TO END.LINE    LINE = LINUM "R#4":" ":SREC<LINUM>    IF LINUM = LINENO THEN LINE = '</pre><b>':LINE:'</b><pre>'    RSS$DESCRIPTION := LINE:CHAR(10)  NEXT LINUM  RSS$DESCRIPTION := '</pre>'END ELSE  RSS$DESCRIPTION := 'Unable to open source code for ':RECORD<4>:' in account ':MDEND*RSS$DATE = FIELD(ITEM.ID,'*',1)RSS$TIME = FIELD(ITEM.ID,'*',2)*RETURN0000E1SUB.TEMPLATE.ITEM0c2SUBROUTINE SUB.XXX.ITEM(VARS,VALS,F.FILE,ITEM.ID,RECORD,MAT RSS.DATA)*INCLUDE RSS.BP RSS.DATA.INC*RSS$TITLE = ""RSS$LINK = ""RSS$AUTHOR = ""RSS$DATE = ""RSS$TIME = ""RSS$DESCRIPTION = ""*RETURN006E51DICT_DASHBOARD.BALANCES0c0000020*CURRENT.NET.INCOME.STATS0c199900001C*LAST.UPDATE.AR0c119113113100001F*LAST.UPDATE.SALES0c119097194000003E*CURRENT.AP.STATS0c1423319241590398927280931250503169201000002ADEBUG0c1READ314223005483206198389200001C*LAST.UPDATE.AP0c119113113100001C*LAST.UPDATE.ALL0c1UPDATING000024*LAST.UPDATE.NET.INCOME0c119113113100001E**LAST.UPDATE.ALL0c1191131131006CBD*CURRENT.AR.STATS0c114560890843071741194510422787790138344612016201720182019202036015203171161151422300548320619813973235509172233548101395385164696370847879531219774039141932813118439101515435988140169672622764976385961979776243395735633981366076359266443141739321371082983421997626385139191577600893225799874558530587911002831044901802010031636438139934238540935140144850748349747242343943941742042845745147745945648141552450947752038749845516142125826659488757142751552545881502172726122803193629216560167136903585464649433786660648167835910164720249247515103226424798771241101583062896Du monde entier2927113415302442Real Computers30182549HUNGRY HOWIES PIZZA280124812761Bobs Used CyclesIntercom ProductsBetter Computing2622Drachenblut Delikatessen12922374Comp ConsultingQue DeliciaElectronic Company2891Berglunds snabbkop258914022965Cyber ProductsFrankenversandPiccolo und mehr1423290227042632212816191795288628711140102111223023Queen CozinhaFolies gourmandesOnes & Zeros Inc.17032713Computer TechVictuailles en stockMemory Capturers1416Disk Products28872953Ajax Computer Electronics166028632908Comp Products11232996TRGGaleria del gastronomoJoe's Computers2935USA ComputersGodos Cocina Tipica2449Bottom-Dollar MarketsBakers Goods255216771117Computer TipsEastern ConnectionAround the HornData Comp3002233527242758160823983028ABC Electronics CorpHanari CarnesFranchi S.p.A.29972809The Big Cheese2915Wartian HerkkuChop-suey Chinese28432969White Clover MarketsVins et alcools Chevalier2970299112062727For Computers Inc.Bills Shoes & Gopeds27592308HILARION-AbastosWellington Importadora226312513015Classic ComputersWolski Zajazd271025742827293730191920Better BytesBlauer See DelikatessenData Net15171012283029072959Software Inc130815991103168415442778288513811010110514341032GROSELLA-RestauranteBon app'300922931252Pericles Comidas clasicas2854170528032947Longo ToyotaBest Computer Company19582967Specialites du monde20472814Alfreds FutterkistePrinter Products2497Computers N More2394272210721076Logical Computers2974Save-a-lot Markets2513Net Connect2882Bits and Bytes IncComputer Sitters135113502560Die Wandernde Kuh21152554Richter Supermarkt205625312784134426241653179918292940290127331569Supremes delices2958296627083012Ottilies KaseladenWhite HouseTortuga Restaurante2607297916051219Great Lakes Food Market25682465298610782648292028671152290615861106France restauration1058151129422516254524432982Gourmet Lanchonetes294328313029Computers Inc.Systems30322456North/South2628Princesa Isabel Vinhos1214Old World DelicatessenErnst Handel2651295013723033301428942931303129621290259628952459300429441556211327573034203527032929303512651469Ricardo Adocicados102410541358121815642690303625212933290025323037B's Beverages3024280630413038141113071119212612382538136627442406304027931452118417802434Antonio Moreno Taqueria3039Consolidated Holdings148030072313304630473048141930503053305430553056141330573058304210302670Familia Arquibaldo1382255811573061306330643065306730693070Hungry Coyote Import Stor2837171730713075Data Bits300028551155129930431592292523593044Modem Products3076194330783080Wilman Kala12113051308230593083308610972782308727833088308917753077306812891171309230932095307230731057138830953096309730982571296030743099Let's Stop N Shop31001034176224051965ABC Computers3101310331043105310631073081140131083109311031112880311210993114308430851257306628562859104715413011LINO-Delicateses3091306231213122312331243125126931273126312831292941313131323102309420893137313631133006313931401287314131421415246226001540314431452694299510833146311631493150315131173118Comercio Mineiro31533154315631153157Cactus Comidas para lleva31583159139131601050311931623163316431302387Computer Fancy3166129318593167312011833138316831713170317431433176318031812994Computer Town3148317831823183318431851453102810151651LILA-Supermercado31883191319331953196300513343179319932003201320232083209313532113212321332143215285710403161316528773169137431722740293626563219322032213177322232231261Computers R Us280032253227322832303231323231893190119931923194319732333235323832391046Paris specialites32403241320432053206320732423246321032473248319831733254325732583262321632633265286532173175FISSA Fabrica Inter. Salc325332673268327232731486101332743277Vaffeljernet29733280322428223281328232833285328632293287299332343284Computer TrainersBolido Comidas preparadas3237324332443245324932902664325032511087Romero y tomillo32923293325532563259329132941060326117453264329732983260181832693270327128733302The Cracker Box3186327532763303326632263278327911823305330731333312331326893315Lehmanns Marktstand331633173296Better ConnectionNumber One in Computing331833013322329523693321332328783324332532993300330624483304332633273309332933103330333133322938331133363337334033423344334533492031Comp Data Inc.33513350335233533354332033193357335833603328335933633364336533333366336733351118336833383371334333723373249133743022337533763377337911253381338216793384338633553387Oceano Atlantico Ltda.33832729The Only Computers3391339033623392339333953396337033973398339933693400340233783403340433803385340634072105338834083389Rancho grande34123415128634173419340133942879342434251764340534271368342834293432160134353434343610743409341027743438343934403441341834431198344434453446344734143448Island Trading34133416342023373452100634263431345334333454Future In Computing33473455Sante Gourmet264410953442346234633468346934712592267734493473345028293476Disks N More3477347934803481Split Rail Beer & Ale34843485346534873489345734903467264734613459349234942817346434963499Simons bistro346635003501350434743475Future Computers21553505350634823470341135083509347227012325349135101490Lazy K Kountry Store349335143502Tradicao Hipermercados35153516351735182819351135193521349513933503352235243526352835293530Reggiani Caseifici350734223532Toms Spezialitaten352035343536353735403512115935433545348635133548Computers Etc.355635513553355435583559166735603561Maison Dewey35632502356435273525356635673568301635383539127035733574Blondel pere et fils354235233547QUICK-StopSeven Seas Imports3544357935803550355212433583358435883586358735903589297535923593258335553549359535963598359936003569357135723602360314763575237035653605360636073610357835823611358535763013361536163591359435973617361836221598360436013624362636273581Rattlesnake Canyon Grocer3629363036093608361236133634363536313636363936403641364236433644364536463647364836493650362136523619363736253655Computer Portables Inc.36583628Koniglich Essen36613662366522543666366736323675367636683677Mere Paillarde36793680368136823683368436853686368736883689369036913692369336943695369636973698365336993700370137023704363837053706370737083709371137123713371436543716371737183719372037221407365637233726372737283729365936633664373127953734373337363738373937413742374437463743366936702000367136723673367437511082367837533754375537563757375836573710371537603761376237633764376537213725376737683769372437702912Morgenstern Gesundkost377137723773Lonesome Pine RestaurantLa corne d'abondance3774373737783745374837473752378037833750378437853786378837913790111425203766379437963798Computer Warehouse3793377537491291Memory Plus Inc.37762252380138023777380437813806380737823810378738123789381338153792382136143822375938243823379537993827382838293830Computers Galore38323833383438033835380538373836383838402099380838113841288138433844381738143740La maison d'Asie38193816382038473848380938313826385430083825384938563857383938533860Laughing Bacchus Wine Cel38623864380038423846384538683869385038703852Ana Trujillo Emparedados3871387238743858Secure Computers387638753859388038833884386338863887388838893891386538923873389538963877387938973881385538823898Furia Bacalhau e Frutos dMagazzini Alimentari Riun126339003901389939043905390639073909391038943890173339133912391438673866Hungry Owl All-Night Groc3893388539163918391939033920Centro comercial Moctezum3908117327063878134839172500005847741433950510000250000500000750000436147808920015840016055016080344854231045482908400234862711531510000007488798710033505010699601006005504369963465284121400296015836400465005726351734075433519715625485577374000390050712600635027887500259745885282305506111000032540156656801788761251480008656020000006300021000206250175683225004437002521922037608900855100157993238400228490268300970025250030163594755040700577500178503200100000016060054745039354356850124225010135501030532989753200712500250000301582350000850000510001020000691933795185000279347323002300408000386003980015251019900635452182000595001500139009146382507400036817552220001283175484035118000299004818891703750120440719607400139003000001500005833299116104310414086102241465411715224824297117252317933209918242925255111472576241164055422179541311661130851522925427232511255529258654835330252424248322424541478614621722252225202723913423188992424117532255242224222423942201834552083634178147131111928954542514135165136751532093215800180191551216584204394102775228881421083386266104113473235430207012161533318622993105111235348791196732385310611094275934622814671447655351566174116714137139736301964581404714809126917194304192822193165586155124674115672090236607662383928142847252636173797135964911383564787536887636616247739550588912185269118660108197129514113553031080949191126225960171221371669457210124213903009566111905113231676249116715541122133487727775722284458159200714494057587016934017544932208525375198106034636424092452137112173296190212585275145753665037151520290563425505175242938442254159218104148429119215799342198226413231194601472962093723816710738201264317296472139285816627998871342721888228232907579102127443922457436337326136540109121122117010651184752121551318816241283881013811741515936927764639439144461348162911284511711105376202222163354007893661842861451051642087106206718149492541264444158438692172753766244129461218333215811111114517915812151921217373273151122122931146178177426413775219152912116010269127935611091639871140512407204122112121734114752034165421019281919778151371414141418232394014914994880469112272911881313131347911201037106819930109101809361012399794716901019244852248921212123225703151211502132010993514999920191264103059139556101599247391491010386543192381997291074815217243928149278740918999947718992598751416336273529341111192487942245101810104026036131351625599983314199228284010559187068935910927311416154109199493101893313198139937910027251184914718227214212060152964886103619101322513918794413229189607376569371973749803319611699239467945925012997130515010101855922153851043729310183918104118191914099910252275959101898851099375406109178772010289277959303799963999122660193199994143253203651301179799134116891088610925828538970224148184202972413994003311440181002813227109966229125613610199997599928101301251412831872718995857449688379100103353099997352181322310202117991870932139233089156241311855155149371246391895933618899318309916520443111101701657899108418912962493713517829999996631152953936912291866929101891798223925993296710106428387915374991021111107399573415174106152296992310281099917274301215611629934952436610612880360281421933232591310436412031339181820515091012154816113513969989191399109144210121117179916307596439305913251218911861595441181394213918199282013919332010109999915229915991024927201312101010109999231095679101691096702119135419999271910963883988197591097856291919109101025119191222911394791322081818999544995187936339109454210959311847999101499109279895435249813369471049999152935913691699992318910233681311311099839155101132791888749111181872693020991085219999119914491813424218919109991028151069781266010109991099117791391112259999141351435103542216711519311366951762104152431133011728149524744201427662542551184264653738455310414078948654232233014864654458588253365237374817136717784913139913235412871319423119514352831561877277682542313840741710384268917404511313865106642321415233813108951299251293726812042206546356381125017263201116288118282937141245362773182011371531060151318144236102619121754117711125162123613661155138284932562123711418614422101112131443474112310126231551722317113131851272104439678611621321411291116131117332023391251115381752151741158215512845116236481189225461818912115017126751211771311112211131262823911121111131214113126111614131133341212371411111811154211119111122412731115111171111120198101121224111131133112111139211113255412221121513101211361611101113291161413125131411131213112159213232114111311271311121212231111311123211121231121211433111111918326469112102121118111242322221111252131211411114411741131211141113111122221111216143411111141216114321124134192111381212232311132111111211131113911619122221202114312213111113211153112212112815211231122212134211201113291114311162111111113171111113142121411212431121181111211112151821131111122113521211113111188111413111134416211211112111113321112216311142112361121111114111111111011111711010211611442111112213211112111111119111111111111111111111122111111024112111132111131112111145122111121221213141412211511111111111227313111211111131116122151171111214111211111111951411612171123311221152111141112111121212121111141111232111111111111111111111111582210675557814361401043104161403542422447109163244104384824226202110190344316368592922762955125971531521649021825576973236203051753151283050207543961822248819254416341632115301573764837019951173170115574894918416223165479134631512182046216305533818746391813081633445612226251231458732151784213521699113377552917936214011019617863738213835229312432862949241813921140674755414112210831072417297147698851821365652171131401731022741504898152011332091010505836513555890896124523109412173399326364434304427601033653225599213422940403144322125222833484942942029421066211131341919818586720826361968271698013616762977155961119972692011852191199424291010999102815106978126601010999109911779139111225999914135114112492111110266311111424241332431776173742221416209234223211322636262242153521158311042116221211472231111551222121213125141341234211151212211312211114111311142304121111111142213516345211132111511111271115311423212315111153331113121112231331311311611122121233231311265252113821111212212114122616322241111131142121111111141111232111111111111111111111111Cyber ProductsSoftware IncComputer WarehouseBits and Bytes IncComputers Etc.Future In ComputingComp ProductsLogical ComputersABC ComputersComputers Inc.SystemsBetter BytesSecure ComputersOnes & Zeros Inc.Modem ProductsIntercom ProductsMemory Plus Inc.Better ConnectionNet ConnectComputer TipsMemory CapturersComp Data Inc.Future ComputersNumber One in ComputingComputers R UsJoe's ComputersComputer FancyDisk ProductsPrinter ProductsData BitsDisks N MoreFor Computers Inc.Electronic CompanyUSA ComputersData NetBest Computer CompanyThe Only ComputersData CompComputer SittersComputer Portables Inc.Alfreds FutterkisteComputers N MoreReal ComputersComputer TownClassic ComputersComputer TrainersBetter ComputingComp ConsultingComputer TechComputers GaloreAna Trujillo EmparedadosAntonio Moreno TaqueriaBerglunds snabbkopBlauer See DelikatessenBlondel pere et filsBolido Comidas preparadasBon app'Bottom-Dollar MarketsB's BeveragesCactus Comidas para llevaChop-suey ChineseComercio MineiroConsolidated HoldingsDrachenblut DelikatessenDu monde entierErnst HandelFamilia ArquibaldoFISSA Fabrica Inter. SalcFolies gourmandesFrankenversandFrance restaurationFranchi S.p.A.Galeria del gastronomoEastern ConnectionGodos Cocina TipicaGourmet LanchonetesGreat Lakes Food MarketGROSELLA-RestauranteHanari CarnesNorth/SouthAround the HornHILARION-Abastos2497Ottilies Kaseladen80892004855773368175532540152793473235000023486272305506228490220000001734075170375016080341579932143395012831751242250111000010699601045482103053210200001013550100000010000009475509084008875008551008500008364007500007488797156257126007125006996346656806354526350275885285847745775005726355474505100005000004854234840354818894437004361474335194080003935433900503350503225003016352960152525002521922500002500002062502037601606001605501584001480001214001153151006008710086560761257400065284630005504346500259741788Drachenblut DelikatessenComp ConsultingFuture In ComputingComercio MineiroIntercom ProductsIsland TradingKoniglich EssenNumber One in ComputingLa corne d'abondanceFuture ComputersLogical ComputersEastern ConnectionMemory Plus Inc.Computers Inc.SystemsMemory CapturersComputers GaloreBolido Comidas preparadasData NetBetter ConnectionFolies gourmandesLa maison d'AsieFrance restaurationComputers Etc.Godos Cocina TipicaComputer TechComputer SittersBest Computer CompanyBetter ComputingLaughing Bacchus Wine CelCyber ProductsLazy K Kountry StoreHanari CarnesAna Trujillo EmparedadosSecure ComputersLehmanns MarktstandLet's Stop N ShopBerglunds snabbkopGourmet LanchonetesLILA-SupermercadoLINO-DelicatesesGROSELLA-RestauranteDu monde entierLonesome Pine RestaurantBlondel pere et filsHungry Coyote Import StorPrinter ProductsMagazzini Alimentari RiunFuria Bacalhau e Frutos dComputer TrainersABC ComputersNet ConnectOnes & Zeros Inc.Maison DeweyMere PaillardeErnst HandelAlfreds FutterkisteElectronic CompanyComputer WarehouseMorgenstern GesundkostDisks N MoreAround the HornReal ComputersData BitsNorth/SouthFor Computers Inc.Joe's ComputersThe Only ComputersOceano Atlantico Ltda.Cactus Comidas para llevaModem ProductsFamilia ArquibaldoAntonio Moreno TaqueriaOld World DelicatessenSoftware IncClassic ComputersHILARION-AbastosBottom-Dollar MarketsFISSA Fabrica Inter. SalcComputer Town1859Computer FancyBon app'Chop-suey ChineseGaleria del gastronomoDisk ProductsFrankenversandB's BeveragesComputer TipsComputers N MoreData CompFranchi S.p.A.Bits and Bytes IncConsolidated HoldingsBlauer See DelikatessenComp Products2521USA ComputersOttilies KaseladenBetter Bytes2497Great Lakes Food Market10431041391330299272239217208188179179178152152147147147146146131130117117117116116116111102999992898686868583837658555555555454545454545342424040363434333329292929252525252525252525252524242424242424242423232220181311118776541Comercio MineiroParis specialitesDrachenblut DelikatessenThe Cracker Box257.9233.392.670.731.536.1104.351.88.810.854.230.4000257DICT_PORTAL.SALES0c0000033CLOSE.DATE.YMO0c1A0A;1(DY):1(D2-)(G-1)R1000002BCLOSE.DATE.MM0c1A1CLOSE MONTHDMR800002CCLOSE.DATE.YM0c1A0A;1(DY):1(DM)R10000028CLOSE.DATE0c1S1CLOSE DATED2-R8000022REP.NAME0c1A5Rep.NameL2500002CCLOSE.DATE.YYYY0c1A1CLOSE DATEDYR800001APIPE0c1A0 F;C|L1000045GROSS.PROFIT0c1A0gross profitMD2A;N(EXT.AMT)-N(EXT.COST)R10000019BRANCH0c1A13L15000019REGION0c1A14L15000026EXT.AMT0c1A8Ext.AmountMD2R10000025EXT.COST0c1A9Ext.CostMD2R10000018CNT0c1A0F;C1R50000E2DICT_PORTAL.AP0c0000026DATE.PAID0c1A8Date PaidD2-R8000029INV.AMOUNT0c1A6Inv.AmountMD2R13000025DUE.DATE0c1A20Due.DateD2-R8000024BALANCE0c1A50BalanceMD2R1300001APIPE0c1A0 F;C|L100015EDICT_MVDB.WIDGET.TYPES0c000001ATYPE0c1A1TYPEL15000018SWF0c1A2SWFL15000020HANDLER0c1A3HANDLERL1500001AICON0c1A4ICONL2500001ADESC0c1A6DESCL3000001710c1A1TYPEL1500001720c1A6DESCL3000001730c1A4ICONL2500001CGROUP0c1A5GROUPL15000021INACTIVE0c1A7INACTIVEL1000C72MVDB.WIDGET.TYPES0c0000043FC2DPIE0c2FC2DPIEPie2DFCPIEpie_widget_icon.jpgPIE2D Pie Chart00005CSPARKCOLUMN0c2SPARKCOLUMNSparkColumnFWSPARKspark_widget_icon.gifFWSpark Column Chart1000055VBULLET0c2VBULLETVBulletFWBULLETbullet_widget_icon.gifFWVertical Bullet Chart1000054SPARKLINE0c2SPARKLINESparkLineFWSPARKspark_widget_icon.gifFWSpark Line Chart1000057HBULLET0c2HBULLETHBulletFWBULLETbullet_widget_icon.gifFWHorizontal Bullet Chart100004AFCCOLUMN3D0c2FCCOLUMN3DColumn3DScol_widget_icon.jpgLC3D Column Chart00005DFCMSCOLUMN3D0c2FCMSCOLUMN3DMSColumn3DMcol_widget_icon.jpgLC3D Multi-Series Column Chart000039TABLE0c2TABLETABLEtable_widget_icon.jpgTable Widget000060HLINEARGAUGE0c2HLINEARGAUGEHLinearGaugeFWGAUGElinear_widget_icon.jpgFWLinear Gauge Chart1000045FUNNEL0c2FUNNELFunnelFWFPfunnel_widget_icon.gifFWFunnel Chart1000061SPARKWINLOSS0c2SPARKWINLOSSSparkWinLossFWSPARKspark_widget_icon.gifFWSpark Win/Loss Chart100005BTHERMOMETER0c2THERMOMETERThermometerFWGAUGEtherm_widget_icon.jpgFWThermometer Chart100004APYRAMID0c2PYRAMIDPyramidFWFPpyramid_widget_icon.jpgFWPyramid Chart1000060ANGULARGAUGE0c2ANGULARGAUGEAngularGaugeFWGAUGEangle_widget_icon.jpgFWAngular Gauge Chart100003AUSAMAP0c2MAPMAPmap_widget_icon.jpgMAPUSA Map Chart1000043FCAREA2D0c2FCAREA2DArea2DSarea_widget_icon.gifLC2D Area Chart000051FCMSBAR2D0c2FCMSBAR2DMSBar2DMbar_widget_icon.gifLC2D Multi-Series Bar Chart000067FCSTACKEDCOLUMN2D0c2FCSTACKEDCOLUMN2DStackedColumn2DMcol_widget_icon.jpgLC2D Stacked Column Chart000059FCDOUGHNUT2D0c2FCDOUGHNUT2DDoughnut2DFCPIEdonut_widget_icon.jpgPIE2D Doughnut Chart00003ATEXT0c2TEXTTEXTtext_widget_icon.pngPreformatted Text000052CYLINDER0c2CYLINDERCylinderFWGAUGEcylinder_widget_icon.jpgFWCylinder Chart1000054FCMSAREA2D0c2FCMSAREA2DMSAreaMarea_widget_icon.gifLC2D Multi-Series Area Chart000034HTML0c2HTMLHTMLhtml_widget_icon.pngHTML Widget00003AFCLINE0c2FCLINELineSline_widget_icon.gifLCLine Chart00004DFCMSLINE0c2FCMSLINEMSLineMline_widget_icon.gifLCMulti-Series Line Chart000043FC3DPIE0c2FC3DPIEPie3DFCPIEpie_widget_icon.jpgPIE3D Pie Chart000045VLED0c2VLEDVLEDFWGAUGEled_widget_icon.jpgFWVertical LED Gauge1000047HLED0c2HLEDHLEDFWGAUGEled_widget_icon.jpgFWHorizontal LED Gauge100004AFCCOLUMN2D0c2FCCOLUMN2DColumn2DScol_widget_icon.jpgLC2D Column Chart00003EFCBAR2D0c2FCBAR2DBar2DSbar_widget_icon.gifLC2D Bar Chart00005DFCMSCOLUMN2D0c2FCMSCOLUMN2DMSColumn2DMcol_widget_icon.jpgLC2D Multi-Series Column Chart000067FCSTACKEDCOLUMN3D0c2FCSTACKEDCOLUMN3DStackedColumn3DMcol_widget_icon.jpgLC3D Stacked Column Chart00005BFCSTACKEDBAR2D0c2FCSTACKEDBAR2DStackedBar2DMbar_widget_icon.gifLC2D Stacked Bar Chart00003CGANTT0c2GANTTGanttgantt_widget_icon.gifFWGantt Chart1000042FAILED0c2FAILEDFAILEDtext_widget_icon.pngPreformatted Text1000033MAP0c2MAPMAPmap_widget_icon.jpgMAPMap Chart100003EBULB0c2BULBBulbFWGAUGEbulb_widget_icon.jpgFWBulb Gauge1000061FCSTACKEDAREA2D0c2FCSTACKEDAREA2DStackedArea2DMarea_widget_icon.gifLC2D Staacked Area Chart015517WOBJ.BP0c0000B9CWOBJ.PARSEOBJECT0c2SUBROUTINE WOBJ.PARSEOBJECT(JSTR,INDEXPOS,PARSEOBJECT)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json object************************************************************************INCLUDE WOBJ.INCLUDE*IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT - STARTING"*PARSEOBJECT=""CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*IF JSTR[INDEXPOS,1] <> "{" THEN    PSERRORS<-1> = "Invalid Object at position ":INDEXPOS:" : ":JSTR[INDEXPOS,1]    RETURNEND*LEN.JSTR = LEN(JSTR)INDEXPOS+=1**JSONOBJECT(JSONOBJECT$NODECNTR)+=1NODEID=JSONOBJECT(JSONOBJECT$NODECNTR); * WE NEED TO STAY AT THIS NODEID POSITIONJSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEID>="O"; *SET AS OBJECTIF WOBJ.DEBUG THEN    PRINT "PARSEOBJECT: SETTING NODETYPE NODEID:":NODEID:" = O"END*LOOP    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    C=JSTR[INDEXPOS,1]    BEGIN CASE        CASE C="}"            INDEXPOS+=1            IF WOBJ.DEBUG > 1 THEN PRINT "PARSEOBJECT: EXIT CHAR }"            EXIT        CASE C=","            INDEXPOS+=1            CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)        CASE INDEXPOS > LEN.JSTR            PSERRORS<-1>="Missing '}': ":JSTR[LEN.JSTR-20,20]            EXIT    END CASE    *    * ADD KEY/VALUE PAIR    *    JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>+=1    PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" PARSEOBJECT CALLING PARSEKEY"    CALL WOBJ.PARSEKEY(JSTR,INDEXPOS,SKEY)    JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEID,PARTPOS>=SKEY    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" BACK FROM PARSEKEY: ":SKEY[1,10]    *    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" CALLING PARSEVALUE"    CALL WOBJ.PARSEVALUE(JSTR,INDEXPOS,PARSEVALUE)    IF WOBJ.DEBUG THEN PRINT "PARSEOBJECT: ":NODEID:" BACK FROM PARSEVALUE N=":NODEID:" P=":PARTPOS:" T=":PARSEVALUE<1>:" F=":PARSEVALUE<2>    BEGIN CASE        CASE PARSEVALUE=""            PSERRORS<-1>="Invalid value syntax for node ":SKEY            RETURN        CASE PARSEVALUE<1>="A" OR PARSEVALUE<1>="O"            * ARRAY            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEID,PARTPOS>=PARSEVALUE<2>        CASE 1            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            V=PARSEVALUE<2>            IF INDEX(V,LF,1) OR INDEX(V,CR,1) THEN                V=OCONV(V,"MX0C")                E="H"            END ELSE                E="A"            END            JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEID,PARTPOS>=V            JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEID,PARTPOS>=E    END CASEREPEATPARSEOBJECT="O"PARSEOBJECT<2>=NODEIDIF WOBJ.DEBUG THEN PRINT "PARSEOBJECT - END OF ROUTINE"RETURNEND0003E3WOBJ.INCLUDE0c2************************************************************************* Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: WOBJ includes for json library************************************************************************COMMON /MVIWOBJ/ PSERRORS,JSONOBJECT(20),WOBJ.DEBUG,PRETTIFY,PRETTIFYCR,INDENT.DEPTH*EQU CR TO CHAR(13), LF TO CHAR(10), TB TO CHAR(9), BS TO CHAR(8), FF TO CHAR(12)NL = CR:LF*EQU INVALID_JSON TO 1EQU INVALID_OBJECT TO 2EQU INVALID_ARRAY TO 3EQU INVALID_BOOLEAN TO 4EQU INVALID_NULL TO 5EQU INVALID_KEY TO 6*EQU JSONOBJECT$NODECNTR TO 2* ARRAY OF NODESEQU JSONOBJECT$NODETYPE TO 3EQU JSONOBJECT$NODELENGTH TO 4EQU JSONOBJECT$NODEPARTS.KEY TO 5EQU JSONOBJECT$NODEPARTS.TYPE TO 6EQU JSONOBJECT$NODEPARTS.FLINK TO 7EQU JSONOBJECT$NODEPARTS.BLINK TO 8EQU JSONOBJECT$NODEPARTS.ENCODING TO 9EQU JSONOBJECT$NODEPARTS.VALUE TO 10* END OF ARRAY OF NODES000248WOBJ.NUMBER.TOSTRING0c2SUBROUTINE WOBJ.NUMBER.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert json number to string************************************************************************INCLUDE WOBJ.INCLUDE*CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)*CALL WOBJ.ENCODE(VALUE,OUT.VALUE)JSON:=OUT.VALUE*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=":VALUERETURNEND000797WOBJ.PARSEKEY0c2SUBROUTINE WOBJ.PARSEKEY(JSTR,INDEXPOS,PARSEKEY)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json property key************************************************************************INCLUDE WOBJ.INCLUDE*PARSEKEY=""IF WOBJ.DEBUG THEN PRINT "PARSEKEY: ENTERING ":INDEXPOS*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*LEN.JSTR = LEN(JSTR)*IFDQUOTE = 0IFSQUOTE = 0LOOPWHILE INDEXPOS > 0 AND INDEXPOS <= LEN.JSTR DO    C = JSTR[INDEXPOS,1]    IF WOBJ.DEBUG > 0 THEN PRINT "PARSEKEY: ":INDEXPOS,C,SEQ(C),PARSEKEY    BEGIN CASE        CASE C = '"'            IF NOT(IFDQUOTE) THEN IFDQUOTE=1 ELSE IFDQUOTE=0            INDEXPOS+=1            IF NOT(IFDQUOTE) THEN                CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)                IF JSTR[INDEXPOS,1] <> ":" THEN                    PSERRORS<-1>="Invalid Key at position ":INDEXPOS:" : ":PARSEKEY                    EXIT                END            END        CASE C = "'"            IF NOT(IFSQUOTE) THEN IFSQUOTE=1 ELSE IFSQUOTE=0            INDEXPOS+=1            IF NOT(IFSQUOTE) THEN                CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)                IF JSTR[INDEXPOS,1] <> ":" THEN                    PSERRORS<-1>="Invalid Key at position ":INDEXPOS:" : ":PARSEKEY                    EXIT                END            END        CASE C = ":"            INDEXPOS+=1            IF NOT(IFDQUOTE) AND NOT(IFSQUOTE) THEN                IF WOBJ.DEBUG THEN PRINT "EXITING"                EXIT            END            PARSEKEY:=C        CASE 1            IF C=LF OR C=CR OR C=TB OR C=" " THEN                NULL            END ELSE                PARSEKEY:=C            END            INDEXPOS+=1    END CASEREPEAT*IF WOBJ.DEBUG THEN PRINT "PARSEKEY: ":PARSEKEYRETURNEND00021FWOBJ.SKIPCHAR0c2SUBROUTINE WOBJ.SKIPCHAR(JSTR,INDEXPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: skip all whitespace************************************************************************INCLUDE WOBJ.INCLUDE*WS = " ()":TB:CR:LF:@AMLEN.JSTR=LEN(JSTR)LOOP WHILE INDEXPOS <= LEN.JSTR DO    IF INDEX(WS,JSTR[INDEXPOS,1],1) = 0 THEN EXIT    INDEXPOS += 1REPEATRETURNEND000836UDO.H0c2********************************************************************************   Header file for UDO BASIC programs***    Rocket Software Confidential*    OCO Source Materials*    Copyright Rocket Software, Inc.  2011****************************************************************************** UDO Status codes:EQU	UDO_SUCCESS			TO 			0EQU	UDO_ERROR			TO			-1EQU	UDO_INVALIDHANDLE 		TO			-2* UDO value types: EQU	UDO_FALSE			TO			0EQU	UDO_TRUE			TO			1EQU	UDO_NULL 			TO			2EQU	UDO_NUMBER			TO			3EQU	UDO_STRING			TO			4EQU	UDO_ARRAY			TO			5EQU	UDO_OBJECT			TO			6* UDO Error codes:EQU	UDOERROR_OUTOFMEMORY			TO		1EQU	UDOERROR_INVALIDJSON			TO		2EQU	UDOERROR_NOTSTANDALONE			TO		3EQU	UDOERROR_NOTFOUND			TO		4EQU	UDOERROR_INVALIDNAME			TO		5EQU	UDOERROR_NOTANOBJECT			TO		6EQU	UDOERROR_NOTANARRAY			TO		7EQU	UDOERROR_INVALIDINDEX			TO		8EQU	UDOERROR_OUTOFBOUND			TO		9EQU	UDOERROR_INVALIDOPTION			TO		10EQU	UDOERROR_INVALIDOPTIONVALUE		TO		11EQU	UDOERROR_OPTIONNOTSET			TO		12EQU	UDOERROR_INVALIDFORMAT			TO		13EQU	UDOERROR_INVALIDVALUE			TO		14EQU	UDOERROR_INVALIDTYPE			TO		15EQU	UDOERROR_REFERENCECYCLE			TO		16EQU 	UDOERROR_INVALIDXML			TO		17EQU 	UDOERROR_DOMAPIFAILURE			TO		18	* UDO flags:EQU	UDOFORMAT_JSON				TO		0EQU	UDOFORMAT_XML				TO		1* UDO options:EQU	UDOOPTION_UDO2XML_XMLSTYLE		TO	0EQU	UDOOPTION_UDO2XML_NAMESPACE		TO	1EQU	UDOOPTION_OUTPUTMODE			TO	2EQU	UDOOPTION_XML2UDO_INFERNUMBER		TO	3	EQU	UDOOPTION_XML2UDO_INFERBOOLEAN		TO	4	EQU	UDOOPTION_XML2UDO_INFERNULL	 	TO	5	EQU	UDOOPTION_XML2UDO_EMPTY2NULL	 	TO	6	EQU	UDOOPTION_XML2UDO_TRIMWHITESPACE	TO	7	EQU	UDOOPTION_XML2UDO_CASEINSENSITIVE	TO	8	EQU	UDOOPTION_XML2UDO_KEEPROOT		TO	9	EQU 	UDOOPTION_UDO2XML_ROOTNAME		TO	10	EQU 	UDOOPTION_UDO2XML_NULL2EMPTY		TO	11EQU 	UDOOPTION_UDO2XML_NAMESPACEPREFIX	TO	12	* UDO option values:	EQU	UDO_XMLSTYLE_ATTR			TO		"ATTRIBUTE"EQU	UDO_XMLSTYLE_ELEM			TO		"ELEMENT"EQU	UDO_OUTPUT_COMPACT      		TO		"COMPACT"EQU 	UDO_OUTPUT_FORMATTED    		TO		"FORMATTED"EQU	UDO_OPTION_ON				TO		"ON"EQU	UDO_OPTION_OFF				TO		"OFF"00030EWOBJ.PARSENULL0c2SUBROUTINE WOBJ.PARSENULL(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json null keyword************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""SAVE.INDEXPOS=INDEXPOS*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)IF OCONV(JSTR[INDEXPOS,4],"MCL") = "null" THEN    INDEXPOS+=4    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    C=JSTR[INDEXPOS,1]    IF INDEX(",]}",C,1)=0 THEN        * invalid terminator - not null    END ELSE        PARSESTRING="null"        RETURN    ENDENDPARSESTRING=""INDEXPOS=SAVE.INDEXPOSRETURNEND000741WOBJ.ARRAY.TOSTRING0c2SUBROUTINE WOBJ.ARRAY.TOSTRING(JSON,POS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert json array to string************************************************************************INCLUDE WOBJ.INCLUDE*JSON:="["; * START OUR STRINGINDENT.DEPTH+=1*IF PRETTIFY THEN JSON:=NLNUMBER.PARTS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,POS>IF WOBJ.DEBUG THEN PRINT "ARRAY.TOSTRING: POS=":POS:" NUMBER.PARTS=":NUMBER.PARTSFOR P=1 TO NUMBER.PARTS    PART.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,POS,P>    IF WOBJ.DEBUG THEN PRINT "ARRAY.TOSTRING: POS=":POS:" P=":P:" T=":PART.TYPE    IF PRETTIFY AND P=1 THEN JSON:=NL    CALL WOBJ.PRETTIFY.INDENT(JSON,POS)    BEGIN CASE        CASE PART.TYPE="S"            CALL WOBJ.STRING.TOSTRING(JSON,POS,P)        CASE PART.TYPE="B"            CALL WOBJ.BOOLEAN.TOSTRING(JSON,POS,P)        CASE PART.TYPE="D"            CALL WOBJ.NUMBER.TOSTRING(JSON,POS,P)        CASE PART.TYPE="N"            CALL WOBJ.NULL.TOSTRING(JSON,POS,P)        CASE PART.TYPE="O"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "OBJ FLINK=":PART.FLINK            CALL WOBJ.OBJECT.TOSTRING(JSON,PART.FLINK)        CASE PART.TYPE="A"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "FL=":PART.FLINK            CALL WOBJ.ARRAY.TOSTRING(JSON,PART.FLINK)    END CASE    IF P <> NUMBER.PARTS THEN        JSON:=", "        IF PRETTIFY THEN JSON:=NL    ENDNEXT P*IF PRETTIFY AND NUMBER.PARTS THEN    JSON:=NL    CALL WOBJ.PRETTIFY.INDENT(JSON,POS)ENDJSON:="]"*IF PRETTIFY THEN JSON:=NLINDENT.DEPTH-=1RETURNEND00066CWOBJ.ENCODE0c2SUBROUTINE WOBJ.ENCODE(IN.STR,OUT.STR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: encode json string*************************************************************************** THIS PROGRAM WILL CONVERT ALL BAD CHARACTERS TO AN ESCAPED CHARACTER***INCLUDE WOBJ.INCLUDE**OPEN 'RESULT.FILE' TO RFILE ELSE STOP* WE NEED TO ENCODE* " = \"   (34)* \ = \\    (92)* / = \/* CHAR(7) = \b* CHAR(13) = \r* char(10) = \n* char(12) = \f* char(9)  = \tOUT.STR=''L=LEN(IN.STR)CONVERT @AM TO LF IN IN.STR; * LETS SWITCH 254 TO LF BE DEFAULTFOR X=1 TO L    C=IN.STR[X,1]    SEQ.C=SEQ(C)    ENCODE=0    *IF SEQ.C < 32 THEN ENCODE=1; * BELOW SPACE    *IF SEQ.C > 32 AND SEQ.C < 48 THEN ENCODE=1; * LETS ENCODE ALL OF THIS !@$%^&*()    IF SEQ.C=34 THEN ENCODE=1    IF SEQ.C=92 THEN ENCODE=1    * IF SEQ.C=47 THEN ENCODE=1    *IF SEQ.C > 126 THEN ENCODE = 1; * LETS ENCODE ALL THE HIGH ENTRIES    *IF SEQ.C >= 91 AND SEQ.C <= 96 THEN ENCODE=1    IF ENCODE THEN        BEGIN CASE            CASE SEQ.C=7; OUT.STR='\b'            CASE C='\'; OUT.STR:='\\'                *CASE C='/'; OUT.STR:='\/'            CASE C='"'; OUT.STR:='\"'            CASE SEQ.C=10                OUT.STR:='\n'                IF PRETTIFYCR THEN OUT.STR:=NL            CASE SEQ.C=13; OUT.STR:='\r'            CASE SEQ.C=12; OUT.STR:='\f'            CASE 1; OUT.STR:='\u00':OCONV(C,'MX0C')        END CASE    END ELSE        OUT.STR=OUT.STR:C    ENDNEXT XRETURNEND0003B5WOBJ.PARSEBOOLEAN0c2SUBROUTINE WOBJ.PARSEBOOLEAN(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json boolean value************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)SAVE.INDEXPOS=INDEXPOSBEGIN CASE    CASE OCONV(JSTR[INDEXPOS,4],"MCL") = "true"        PARSESTRING="true"        INDEXPOS+=4    CASE OCONV(JSTR[INDEXPOS,5],"MCL") = "false"        PARSESTRING="false"        INDEXPOS+=5    CASE 1        * not boolean        INDEXPOS=SAVE.INDEXPOS        RETURNEND CASECALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)C=JSTR[INDEXPOS,1]IF INDEX(",]}",C,1)=0 THEN    * invalid terminator - not boolean    PARSESTRING=""    INDEXPOS=SAVE.INDEXPOSENDRETURNEND000873WOBJ.GET.UDO0c2SUBROUTINE WOBJ.GET.UDO(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: get json element value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: if specified node is an Object or Array, return*   a JSON string representation of the node.**************************************************************************   INCLUDE UDO.H         INCLUDE WOBJ.INCLUDECOMMON /WUDO.C/ UDO.OBJECTS(100),UDO.OBJECT.METADATA*VALUE=""IF 0 THEN; * TODO IF NODE="" THEN    CALL WOBJ.OBJECT.TOSTRING(VALUE,1) ; * Root object    RETURNENDEND* THIS WILL ACTUALLY RETURN BACK A UDOOBJECT INSTEAD OF A LINK POSITION,  NEED TO DETERMINE HOW TO DO THIS!!!CALL WOBJ.FINDNODE.UDO(NODE,NODEPOS,NODETYPE,PARTPOS,JUSTNODE,PARTTYPE,RERR)IF WOBJ.DEBUG THEN DEBUGIF NODEPOS > 0 AND PARTTYPE # "" THEN    OBJ.TYPE=PARTTYPE    *OBJ.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE NODETYPE="A"            UDOSTATUS=UDOARRAYGETITEM(UDO.OBJECTS(NODEPOS),PARTPOS+1,VALUE,UDOTYPE)            * DEBUG        CASE 1            UDOSTATUS=UDOGETPROPERTY(UDO.OBJECTS(NODEPOS),JUSTNODE,VALUE,UDOTYPE)            * THIS IS A DUPLICATE CALL, COULD WE STORE THE STRING INFORMATION INSIDE UDO.OBJECTS???            * CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)            IF WOBJ.DEBUG THEN DEBUG    END CASE    GOSUB convert.udoEND ELSE    VALUE="" ; * NODE NOT FOUND!ENDIF WOBJ.DEBUG THEN PRINT "WOBJ.GET: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" VALUE=":OBJ.TYPERETURNconvert.udo: *BEGIN CASE        CASE OBJ.TYPE="T"            VALUE="true"        CASE OBJ.TYPE="F"            VALUE="false"        CASE OBJ.TYPE="NULL"            VALUE="null"            RERR<3>='null'      CASE OBJ.TYPE='O' OR OBJ.TYPE='A'            STATUS=UDOWRITE(VALUE,UDOFORMAT_JSON,TMP.VALUE)            UDOSTATUS=UDOFREE(VALUE); * DESTROY THAT VARIABLE            VALUE=TMP.VALUEEND CASERETURNEND001224WOBJ.FINDNODE0c2SUBROUTINE WOBJ.FINDNODE(INNODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: find a json node in parsed object structure************************************************************************INCLUDE WOBJ.INCLUDE** NEED TO BREAK OUR NODE REQUEST UP INTO IT'S SEPERATE PARTS*RERR=""LASTNODE=""*OBJECT.SEPERATOR = "."NODES=INNODECONVERT OBJECT.SEPERATOR TO @AM IN NODES*NODEPOS=1; * WE ALWAYS START WITH THE FIRST ONE.PARTPOS=0; * START AS ZERO 6/19/2017 - PAPCHILDPOS=0;* SET WHEN OUR NODE IS AN OBJECT OR ARRAYPARTTYPE=""*NUMBER.NODES=DCOUNT(NODES,@AM)IF INDEX(NODES,"[",1) THEN* We need to trick this into seeing an array as another node level    ORIG.NODES=NODES    NODES=""    FOR A=1 TO NUMBER.NODES        NODE=ORIG.NODES<A>        IF INDEX(NODE,"[",1) THEN            NUMBER.ARRAYS = COUNT(NODE,"[")            ACTUAL.NODE=FIELD(NODE,"[",1)            NODES<-1>=ACTUAL.NODE            FOR B=1 TO NUMBER.ARRAYS                K=INDEX(NODE,"]",B)                NODES<-1>=NODE[1,K]            NEXT B        END ELSE            NODES<-1>=NODE        END    NEXT AENDNUMBER.NODES=DCOUNT(NODES,@AM)IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: number of parts in ":INNODE:": ":NUMBER.NODESFOR A=1 TO NUMBER.NODES    NODE=NODES<A>    LASTNODE=NODE    NODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEPOS>    IF WOBJ.DEBUG THEN PRINT "  part ":A:" key=":NODE:" pos=":NODEPOS:" type=":NODETYPE    BEGIN CASE        CASE NODETYPE="O"            JUSTNODE=FIELD(NODE,"[",1)            IF WOBJ.DEBUG THEN                PRINT "    locating ":JUSTNODE                PRINT "          in ":JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>                NUM.SUBS=DCOUNT(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>,CHAR(252))                PRINT 'NUM.SUBS=':NUM.SUBS            END            LOCATE JUSTNODE IN JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS> SETTING PARTPOS ELSE PARTPOS=0            IF NOT(PARTPOS) THEN                TEMP.NODE=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>                LOCATE JUSTNODE IN TEMP.NODE<1,1> SETTING PARTPOS ELSE PARTPOS=0                IF WOBJ.DEBUG THEN                    PRINT 'TEMP.NODE=':TEMP.NODE                    PRINT 'JUSTNODE=':JUSTNODE                    PRINT 'PARTPOS=':PARTPOS                END            END        CASE NODETYPE="A"            NUMBER.ARRAYS=COUNT(NODE,"[")            ST=INDEX(NODE,"[",NUMBER.ARRAYS)            EN=INDEX(NODE,"]",NUMBER.ARRAYS)            IF ST>1 AND EN>ST THEN                PARTPOS=NODE[ST+1,EN-ST-1]            END ELSE                PARTPOS=''            END            IF NOT((PARTPOS MATCHES '1N0N') OR (PARTPOS = '-1')) THEN                RERR=2                RERR<2>="Numeric subscript required for array element"                IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: ":RERR<2>                RETURN            END            IF PARTPOS<0 THEN PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> ;* ALLOW -1, SINCE WOBJ.SET USES THAT TO CREATE NEXT ELEMENT            PARTPOS += 1            IF PARTPOS > JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> THEN                IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: PARTPOS=":PARTPOS:" LEN=":JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>:" NODEPOS=":NODEPOS                PARTPOS=0            END    END CASE    IF NOT(PARTPOS) THEN        RERR=1        RERR<2>="Node ":NODE:" not found at level ":NODEPOS        IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: ":RERR<2>        RETURN    END    PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    IF (PARTTYPE="A" OR PARTTYPE="O") THEN        IF A=NUMBER.NODES THEN* RETURN CHILD OBJECT NODE POSITION            CHILDPOS=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>        END ELSE* FOLLOW FORWARD LINK TO CHILD NODE            NODEPOS=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>        END    END ELSE        IF A<>NUMBER.NODES THEN            RERR=1            RERR<2>="Node ":NODE:" not found at level ":NODEPOS            IF WOBJ.DEBUG THEN                PRINT "WOBJ.FINDNODE: ":RERR<2>                PRINT "    Node type ":PARTTYPE:" cannot have properties or array elements"            END            RETURN        END    ENDNEXT AIF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: nodepos=":NODEPOS:" partpos=":PARTPOS:" type=":PARTTYPE:" childpos=":CHILDPOSRETURNEND001968WOBJ.SET0c2SUBROUTINE WOBJ.SET(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: set json node to value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: allow Object and Array properties to be set, passing*   a JSON string representation of the node.************************************************************************INCLUDE WOBJ.INCLUDE*IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: NODE=":NODE:" ACTION=":ACTION*SACTION=FIELD(ACTION,".",2)IF NODE="" THEN    IF SACTION <> "OBJECT" THEN            RERR=1        RERR<2>="Node cannot be null"    END ELSE        CALL WOBJ.PARSE(VALUE,NEWOBJ)        IF PSERRORS#"" THEN            RERR=2            RERR<2> = PSERRORS            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET.OBJECT: parse failure: ":RERR<2>        END    END            RETURNEND*CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" LASTNODE=":LASTNODE:" RERROR=":RERR<2>*IF NOT(NODEPOS) THEN    RERR=1    RERR<2>="Node not found"    RETURNEND** CHECK THE NODE WE ARE SETTING PROPERTY TONODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEPOS>IF NODETYPE#"O" AND NODETYPE#"A" THEN    RERR=1    RERR<2>="Parent node must be an object or array"    RETURNEND*IGNORE.RERR=""IF NODETYPE="O" THEN PARTKEY=LASTNODE ELSE PARTKEY=""*IF NOT(PARTPOS) THEN* ENSURE PARENT NODE EXISTS    NUM.PARTS=DCOUNT(NODE,".")    FINAL.NODE=FIELD(NODE,".",NUM.PARTS)    IF INDEX(FINAL.NODE,"[",1) THEN        NUMBER.ARRAYS=COUNT(FINAL.NODE,"[")        PARENT.NODE=NODE[1,LEN(NODE)-LEN(FINAL.NODE)+INDEX(FINAL.NODE,"[",NUMBER.ARRAYS)-1]    END ELSE        NUMBER.ARRAYS=0        PARENT.NODE=NODE[1,LEN(NODE)-LEN(FINAL.NODE)-1]    END    IF NUM.PARTS > 1 OR NUMBER.ARRAYS > 0 THEN        CALL WOBJ.FINDNODE(PARENT.NODE,PARENT.NODEPOS,PARENT.PARTPOS,PARENT.CHILDPOS,PARENT.LASTNODE,"")        IF NOT(PARENT.PARTPOS) THEN            RERR=1            RERR<2>="Parent node not found"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END    END** WE NEED TO ADD A NEW ELEMENT    IF NODETYPE="O" THEN        PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>        PARTPOS += 1        JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>=PARTPOS        CALL WOBJ.SET.PART(NODEPOS,PARTPOS,"N",PARTKEY,"",IGNORE.RERR) ; * DUMMY NULL ELEMENT WILL BE REPLACED IN FINAL WOBJ.SET.PART CALL    END ELSE        NUMBER.ARRAYS=COUNT(LASTNODE,"[")        ST=INDEX(LASTNODE,"[",NUMBER.ARRAYS)        EN=INDEX(LASTNODE,"]",NUMBER.ARRAYS)        IF ST>1 AND EN>ST THEN            PARTPOS=LASTNODE[ST+1,EN-ST-1]        END ELSE            PARTPOS=''        END        IF NOT((PARTPOS MATCHES '1N0N') OR (PARTPOS = '-1')) THEN            RERR=2            RERR<2>="Numeric subscript required for setting array element"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END        IF PARTPOS<0 THEN            PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>+1        END ELSE            PARTPOS += 1 ; * ZERO-BASED ARRAY INDEX -> 1 BASED PARTPOS        END        LASTPARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>+1        FOR P=LASTPARTPOS TO PARTPOS            CALL WOBJ.SET.PART(NODEPOS,P,"N",PARTKEY,"",IGNORE.RERR)        NEXT P        IF PARTPOS>JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> THEN            JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>=PARTPOS        END    ENDEND*PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: PARTTYPE=":PARTTYPE*IF PARTTYPE="O" OR PARTTYPE="A" THEN** DELETE NESTED NODE BEFORE SETTING NEW VALUE    IF NODETYPE="A" THEN** ARRAYS ARE SPECIAL, BECAUSE WE DO NOT WANT TO DELETE THE ARRAY POSITION* THAT WE ARE SETTING, WHICH WILL SLIDE THE ARRAY DOWN BY ONE. INSTEAD,* INSERT A NULL ELEMENT AFTER THE ONE WE NEED TO DELETE, THEN AFTER* DELETING, WE CAN SIMPLY REPLACE THE NULL NODE.*        JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,NODEPOS,PARTPOS+1,"N")        JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=INSERT(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,NODEPOS,PARTPOS+1,"")        JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> += 1    END*    CALL WOBJ.DELETE("DELETE",NODE,"",IGNORE.RERR)* BECAUSE DELETING MAY ALTER JSONOBJECT STRUCTURE, REFRESH NODEPOS & PARTPOS    CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,IGNORE.RERR)    IF NODETYPE="O" THEN        IF PARTPOS=0 THEN            PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>            PARTPOS += 1            JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>=PARTPOS            CALL WOBJ.SET.PART(NODEPOS,PARTPOS,"N",PARTKEY,"",IGNORE.RERR)        END ELSE            RERR=2            RERR<2>="While setting node ":NODE:", existing object was deleted, yet it is still here!"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END    END ELSE        IF PARTPOS=0 THEN            RERR=2            RERR<2>="While setting node ":NODE:", existing array element was deleted, but dummy element is missing!"            IF WOBJ.DEBUG THEN PRINT "WOBJ.SET: ":RERR<2>            RETURN        END    ENDEND** NOW WE ARE SAFE TO SET NEW VALUEBEGIN CASE    CASE SACTION="ARRAY" OR SACTION="OBJECT"        PARTTYPE=SACTION[1,1]    CASE SACTION="NULL"        PARTTYPE="N"    CASE SACTION="NUMBER"        PARTTYPE="D"    CASE SACTION="BOOLEAN"        PARTTYPE="B"    CASE SACTION="STRING" OR SACTION=""        PARTTYPE="S"    CASE 1        RERR=1        RERR<2>="Unknown value type ":SACTION:", assume STRING"        PARTTYPE="S"END CASECALL WOBJ.SET.PART(NODEPOS,PARTPOS,PARTTYPE,PARTKEY,VALUE,RERR)RETURNEND001A97WOBJ.FINDNODE.UDO0c2      SUBROUTINE WOBJ.FINDNODE.UDO(INNODE,NODEPOS,NODETYPE,PARTPOS,JUSTNODE,PARTTYPE,RERR)      **********************************************************************      *      * Copyright (C) 2017 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: December 2017      * Description: find a json node in parsed object structure      *      **********************************************************************      ***      INCLUDE WOBJ.INCLUDE            * FIRST LETS INIT OUR TEMPORARY STORAGE AREA FOR UDO OBJECTS            COMMON /WUDO.C/ UDO.OBJECTS(100),UDO.OBJECT.METADATA            *MAT UDO.OBJECTS=""      *UDO.OBJECT.METADATA=""            *      * NEED TO BREAK OUR NODE REQUEST UP INTO IT'S SEPERATE PARTS      *      RERR=""      LASTNODE=""      *      OBJECT.SEPERATOR = "."      NODES=INNODE      CONVERT OBJECT.SEPERATOR TO @AM IN NODES      *      NODEPOS=1; * WE ALWAYS START WITH THE FIRST ONE.      PARTPOS=0; * START AS ZERO 6/19/2017 - PAP      CHILDPOS=0;* SET WHEN OUR NODE IS AN OBJECT OR ARRAY      PARTTYPE=""      *      NUMBER.NODES=DCOUNT(NODES,@AM)      IF INDEX(NODES,"[",1) AND 1 THEN         * We need to trick this into seeing an array as another node level         ORIG.NODES=NODES         NODES=""         FOR A=1 TO NUMBER.NODES            NODE=ORIG.NODES<A>            IF INDEX(NODE,"[",1) THEN               NUMBER.ARRAYS = COUNT(NODE,"[")               ACTUAL.NODE=FIELD(NODE,"[",1)               NODES<-1>=ACTUAL.NODE               FOR B=1 TO NUMBER.ARRAYS                  K=INDEX(NODE,"]",B)                  NODES<-1>=NODE[1,K]               NEXT B            END ELSE               NODES<-1>=NODE            END         NEXT A      END      NUMBER.NODES=DCOUNT(NODES,@AM)      IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE.UDO: number of parts in ":INNODE:": ":NUMBER.NODES      FOR A=1 TO NUMBER.NODES         NODE=NODES<A>         LASTNODE=NODE         JUSTNODE=FIELD(NODE,"[",1)         *NODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEPOS>         UDOSTATUS=UDOGETTYPE(UDO.OBJECTS(A), UDOTYPE)         GOSUB convert.udotype         NODETYPE=UDOTYPE         UDO.OBJECT.METADATA<A,2>=NODETYPE         UDO.OBJECT.METADATA<A,3>=JUSTNODE         IF WOBJ.DEBUG THEN PRINT "  part ":A:" key=":NODE:" pos=":NODEPOS:" type=":NODETYPE                  BEGIN CASE            CASE NODETYPE="O"               JUSTNODE=FIELD(NODE,"[",1)               IF WOBJ.DEBUG THEN                  PRINT "    locating ":JUSTNODE                  PRINT "          in ":JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS>               END               UDOSTATUS=UDOGETPROPERTY(UDO.OBJECTS(A),JUSTNODE,TMPOBJECT,UDOTYPE)               *UDOSTATUS=UDOGETTYPE(UDO.OBJECTS(A), UDOTYPE)               GOSUB convert.udotype               * NEED TO SET PARTPOS AND PARTTYPE               PARTTYPE = UDOTYPE               IF UDOSTATUS < 0 THEN                   PARTPOS=0                  TMPOBJECT=""               END ELSE                  PARTPOS=1               END               UDO.OBJECTS(A+1)=TMPOBJECT        IF WOBJ.DEBUG THEN PRINT "udostatus=":UDOSTATUS:" A=":A:" TMPOBJECT=":A; INPUT WAIT               NODEPOS=A               IF WOBJ.DEBUG THEN DEBUG            CASE NODETYPE="A"               NUMBER.ARRAYS=COUNT(NODE,"[")               ST=INDEX(NODE,"[",NUMBER.ARRAYS)               EN=INDEX(NODE,"]",NUMBER.ARRAYS)               IF ST>1 AND EN>ST THEN                  PARTPOS=NODE[ST+1,EN-ST-1]               END ELSE                  PARTPOS=''               END                        IF NOT((PARTPOS MATCHES '1N0N') OR (PARTPOS = '-1')) THEN                  RERR=2                  RERR<2>="Numeric subscript required for array element"                  IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: ":RERR<2>                  RETURN               END               *IF WOBJ.DEBUG THEN DEBUG               *IF PARTPOS<0 THEN PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> ;* ALLOW -1, SINCE WOBJ.SET USES THAT TO CREATE NEXT ELEMENT               *PARTPOS += 1               *IF PARTPOS > JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> THEN               *   IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE.UDO: PARTPOS=":PARTPOS:" LEN=":JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS>:" NODEPOS=":NODEPOS               *   PARTPOS=0               *END               NODEPOS=A               IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE.UDO NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS               PARTTYPE=""               IF PARTPOS # "" THEN                  UDOSTATUS=UDOARRAYGETITEM(UDO.OBJECTS(A),PARTPOS+1,TMPOBJECT,UDOTYPE)                  GOSUB convert.udotype                  PARTTYPE=UDOTYPE                  UDO.OBJECTS(A+1)=TMPOBJECT                  UDO.OBJECT.METADATA<A+1,2>=PARTTYPE                  UDO.OBJECT.METADATA<A+1,3>=JUSTNODE                  UDO.OBJECT.METADATA<A+1,4>=PARTPOS               END               *IF WOBJ.DEBUG THEN DEBUG         END CASE         IF 1 THEN            IF UDOSTATUS < 0 THEN               RERR=1               RERR<2>="Node ":NODE:" not found at level ":NODEPOS               IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: ":RERR<2>               RETURN            END            *PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>            IF 1 THEN            IF (PARTTYPE="A" OR PARTTYPE="O") THEN               IF A=NUMBER.NODES THEN                  * RETURN CHILD OBJECT NODE POSITION                  *CHILDPOS=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>               END ELSE                  * FOLLOW FORWARD LINK TO CHILD NODE                  *NODEPOS=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>                  *NODEPOS+=1;**** NEED TO FIGURE OUT               END            END ELSE               IF A<>NUMBER.NODES THEN                  RERR=1                  RERR<2>="Node ":NODE:" not found at level ":NODEPOS                  IF WOBJ.DEBUG THEN                     PRINT "WOBJ.FINDNODE: ":RERR<2>                     PRINT "    Node type ":PARTTYPE:" cannot have properties or array elements"                  END                  RETURN               END            END            END         END      NEXT A      IF WOBJ.DEBUG THEN PRINT "WOBJ.FINDNODE: nodepos=":NODEPOS:" partpos=":PARTPOS:" type=":PARTTYPE:" childpos=":CHILDPOS      RETURNconvert.udotype: *BEGIN CASE   CASE UDOTYPE="0"; UDOTYPE="F"   CASE UDOTYPE="1"; UDOTYPE="T"   CASE UDOTYPE="2"; UDOTYPE="NULL"   CASE UDOTYPE="3"; UDOTYPE="N"   CASE UDOTYPE="4"; UDOTYPE="S"   CASE UDOTYPE="5"; UDOTYPE="A"   CASE UDOTYPE="6"; UDOTYPE="O"   CASE 1; UDOTYPE=""END CASERETURN000E1FWOBJ.SET.PART0c2SUBROUTINE WOBJ.SET.PART(NODEPOS,PARTPOS,PARTTYPE,PARTKEY,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: set json part value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: allow Object and Array properties to be set, passing*   a JSON string representation of the node.************************************************************************INCLUDE WOBJ.INCLUDE*ENCODING=""FLINK=""* VALIDATE THE VALUE DATABEGIN CASE    CASE PARTTYPE="O" OR PARTTYPE="A"        OUT.VALUE=""    CASE PARTTYPE="N"        OUT.VALUE=""        IF VALUE#"" THEN            RERR=1            RERR<2>="Value ignored for NULL property"        END    CASE PARTTYPE="D"        OUT.VALUE=VALUE        IF VALUE="" THEN            OUT.VALUE=0        END ELSE            IF NOT(NUM(VALUE)) THEN                RERR=1                RERR<2>="Non-numeric value for NUMBER property; zero used"                OUT.VALUE=0            END        END    CASE PARTTYPE="B"        OUT.VALUE=OCONV(VALUE,"MCL")        IF OUT.VALUE#"true" AND OUT.VALUE#"false" THEN            RERR=1            RERR<2>="Invalid boolean value: must be true or false; false used"            OUT.VALUE="false"        END            CASE 1        ENCODING="H"        BEGIN CASE            CASE INDEX(VALUE,@AM,1)            CASE INDEX(VALUE,@VM,1)            CASE INDEX(VALUE,@SVM,1)            CASE INDEX(VALUE,LF,1)            CASE INDEX(VALUE,CR,1)            CASE 1                ENCODING="A"                OUT.VALUE=VALUE        END CASE        IF ENCODING="H" THEN OUT.VALUE=OCONV(VALUE,"MX0C")END CASE*IF PARTTYPE="O" OR PARTTYPE="A" THEN* SET UP THE NEW OBJECT    FLINK=JSONOBJECT(JSONOBJECT$NODECNTR)+1    IF VALUE="" THEN        JSONOBJECT(JSONOBJECT$NODECNTR)=FLINK ; * UPDATE NODE COUNT FOR NULL OBJECT    END ELSE* PARSE OBJECT OR ARRAY                MATBUILD SAVEJSONOBJECT FROM JSONOBJECT ; * SAVE CURRENT OBJECT IN CASE OF PARSE FAILURE        INDEXPOS=1        IF PARTTYPE="O" THEN            CALL WOBJ.PARSEOBJECT(VALUE,INDEXPOS,PARSERESULT)        END ELSE            CALL WOBJ.PARSEARRAY(VALUE,INDEXPOS,PARSERESULT)        END        IF PARSERESULT="" THEN            RERR=2            IF PARTTYPE="O" THEN                RERR<2>="Object parse failure"            END ELSE                RERR<2>="Array parse failure"            END        END ELSE* MAKE SURE WE CONSUMED ENTIRE JSTR            CALL WOBJ.SKIPCHAR(VALUE,INDEXPOS)            IF INDEXPOS <= LEN(VALUE) THEN                RERR=2                RERR<2>="Extra data (":(LEN(VALUE)-INDEXPOS+1):" characters) after final close brace ignored"            END                    END        IF RERR<1> >= 2 THEN* OBJECT OR ARRAY PARSE ERROR            MATPARSE JSONOBJECT FROM SAVEJSONOBJECT            PARTTYPE="N"            FLINK=""        END    ENDEND* SET THE PART PROPERTIESJSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>        =    PARTTYPEJSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,NODEPOS,PARTPOS>         =    PARTKEYJSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEPOS,PARTPOS>       =    OUT.VALUEJSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEPOS,PARTPOS>    =    ENCODINGJSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEPOS,PARTPOS>       =    FLINKIF WOBJ.DEBUG THEN PRINT "WOBJ.SET.PART: T=":PARTTYPE:" K=":PARTKEY:" E=":ENCODING:" OUT.VALUE=":OUT.VALUE*RETURNEND001BCCWOBJ.UDO0c2      SUBROUTINE WOBJ.UV(PASSEDOBJ,ACTION,NODE,VALUE,OPTIONS,RERR)      **********************************************************************      *      * Copyright (C) 2017 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: December 2017      * Description: WOBJ json library main routine      *      * Updated: 3/3/2019 by Peter Schellenbach, Zumasys      *      **********************************************************************      *      INCLUDE UDO.H            INCLUDE WOBJ.INCLUDE            COMMON /WOBJD/ COMMON.WOBJ.DEBUG            IF UNASSIGNED(COMMON.WOBJ.DEBUG) THEN COMMON.WOBJ.DEBUG=0            * This common is a storage area to store udo objects as we      * traverse into a multi-level object            COMMON /WUDO.C/ UDO.OBJECTS(100),UDO.OBJECTS.METADATA            MAT UDO.OBJECTS=""      UDO.OBJECTS.METADATA=""      *      IF INDEX(OPTIONS,"PRETTIFY",1) THEN PRETTIFY=1 ELSE PRETTIFY=0      IF INDEX(OPTIONS,"PRETTIFYCR",1) THEN PRETTIFYCR=1 ELSE PRETTIFYCR=0      IF INDEX(OPTIONS,"DEBUG",1) THEN WOBJ.DEBUG=1 ELSE WOBJ.DEBUG=0      *      IF COMMON.WOBJ.DEBUG THEN WOBJ.DEBUG=1    IF WOBJ.DEBUG THEN       OPEN "RESULT.FILE" TO RFILE ELSE STOP       DREC=ACTION       DREC<2>=NODE       WRITE DREC ON RFILE, 'OBJ.DEBUG'    END*PRINT 'WOBJ.DEBUG=':WOBJ.DEBUG:'  ':COMMON.WOBJ.DEBUG            PLATFORM='UV'      WOBJ.VERSION='2.0.UDO'         *      MAT JSONOBJECT = ""      RERR=""      INDENT.DEPTH=0      *      BEGIN CASE         CASE ACTION="FROMSTRING"            * THIS EXISTS EARLIER DUE TO MATPARSE BELOW            * UDO WILL FLOW UP IF YOU SEND ANY @AM IN THE DATA            CONVERT CHAR(254) TO '' IN VALUE            UDOSTATUS=UDOREAD(VALUE, 0, PASSEDOBJ)            IF UDOSTATUS # UDO_SUCCESS  "" THEN               RERR=2               RERR<2> = UDOSTATUS            END            IF WOBJ.DEBUG THEN PRINT "WOBJ: FROMSTRING ACTION: VALUE=":VALUE:" RERR=":RERR<2>            RETURN         CASE ACTION="VERSION"            VALUE=WOBJ.VERSION            RETURN      END CASE      *      *MATPARSE JSONOBJECT FROM PASSEDOBJ      *      UDO.OBJECTS(1)=PASSEDOBJ      UDO.OBJECTS.METADATA<1>="MAIN"      IF WOBJ.DEBUG THEN PRINT "ACTION=":ACTION,NODE      BEGIN CASE         CASE ACTION="TOSTRING"            VALUE=""            IF NODE # "" THEN               RERR=1               RERR<2>="Node ignored - returning the root node"               IF WOBJ.DEBUG THEN PRINT "WOBJ: TOSTRING ACTION: NODE ":NODE:" IGNORED"            END            STATUS=UDOWRITE(PASSEDOBJ,UDOFORMAT_JSON,VALUE)         CASE ACTION="GET"            GOSUB action.get         CASE FIELD(ACTION,".",1)="SET"            GOSUB action.set         CASE ACTION="DELETE"            GOSUB action.delete         CASE ACTION="KEYS"            GOSUB action.keys         CASE ACTION="LENGTH" OR ACTION="SIZE"            GOSUB action.length         CASE ACTION="TYPE"            GOSUB action.type         CASE ACTION="DESTROY"            GOSUB action.destroy         CASE 1            VALUE=""            RERR=1            RERR<2>="Invalid action '":ACTION:"'"            IF WOBJ.DEBUG THEN PRINT "WOBJ: INVALID ACTION: ":ACTION      END CASE      *      *NUM.ENTRIES=DCOUNT(UDO.OBJECTS.METADATA,@VM)      *FOR V=1 TO NUM.ENTRIES      *   UDOSTATUS=UDOFREE(UDO.OBJECTS(V))      *   IF WOBJ.DEBUG THEN PRINT V,UDOSTATUS      *NEXT V            MAT UDO.OBJECTS=""      UDO.OBJECTS.METADATA=""                        *MATBUILD PASSEDOBJ FROM JSONOBJECT      *      RETURN      *action.get: *      CALL WOBJ.GET.UDO(ACTION,NODE,VALUE,RERR)      RETURN      *action.set: *      CALL WOBJ.SET.UDO(ACTION,NODE,VALUE,RERR)      RETURN      *action.delete: *      CALL WOBJ.FINDNODE.UDO(NODE,NODEPOS,NODETYPE,PARTPOS,JUSTNODE,PARTTYPE,RERR)      UDOSTATUS=""      VALUE=""      BEGIN CASE         CASE NODETYPE='A'         CASE NODETYPE='O'            UDOSTATUS=UDODELETEPROPERTY(UDO.OBJECTS(NODEPOS), JUSTNODE)      END CASE      IF WOBJ.DEBUG THEN PRINT "WOBJ: DELETE ACTION: ":NODE:" NODEPOS=":NODEPOS:" ":NODETYPE:" PARTTYPE=":PARTTYPE:" PARTPOS=":PARTPOS:" UDOSTATUS=":UDOSTATUS:" RERR=":RERR<2>       *     CALL WOBJ.DELETE(ACTION,NODE,VALUE,RERR)      RETURN      *action.keys: *      CALL WOBJ.FINDNODE.UDO(NODE,NODEPOS,NODETYPE,PARTPOS,JUSTNODE,PARTTYPE,RERR)      UDOSTATUS=""      VALUE=""      BEGIN CASE         CASE PARTTYPE='O'            UDOSTATUS=UDOGETPROPERTYNAMES(UDO.OBJECTS(NODEPOS+1),PROPNAMES)            IF UDOSTATUS >=0 THEN               UDOSTATUS2=UDOARRAYGETSIZE(PROPNAMES,NUM.PROPERTIES)               FOR S=1 TO NUM.PROPERTIES                  UDOSTATUS3=UDOARRAYGETITEM(PROPNAMES,S,PROP.NAME,TEMP.UDO.TYPE)                  VALUE<1,1,-1>=PROP.NAME               NEXT S               UDOSTATUS=UDOFREE(PROPNAMES)            END         CASE 1            VALUE=1      END CASE        IF WOBJ.DEBUG THEN PRINT "WOBJ: LENGTH ACTION: ":NODE:" NODEPOS=":NODEPOS:" ":NODETYPE:" PARTTYPE=":PARTTYPE:" PARTPOS=":PARTPOS:" UDOSTATUS=":UDOSTATUS:" LENGTH=":VALUE:" RERR=":RERR<2>      RETURN      *action.length: *      CALL WOBJ.FINDNODE.UDO(NODE,NODEPOS,NODETYPE,PARTPOS,JUSTNODE,PARTTYPE,RERR)      UDOSTATUS=""      VALUE=1      BEGIN CASE         CASE PARTTYPE="A"            UDOSTATUS=UDOARRAYGETSIZE(UDO.OBJECTS(NODEPOS+1),VALUE); * WE ADD ONE TO GET TO THE ACTUAL ARRAY         CASE PARTTYPE='O'            UDOSTATUS=UDOGETPROPERTYNAMES(UDO.OBJECTS(NODEPOS+1),PROPNAMES)            IF UDOSTATUS >=0 THEN               UDOSTATUS2=UDOARRAYGETSIZE(PROPNAMES,VALUE)               UDOSTATUS=UDOFREE(PROPNAMES)            END         CASE 1            VALUE=1      END CASE        IF WOBJ.DEBUG THEN PRINT "WOBJ: LENGTH ACTION: ":NODE:" NODEPOS=":NODEPOS:" ":NODETYPE:" PARTTYPE=":PARTTYPE:" PARTPOS=":PARTPOS:" UDOSTATUS=":UDOSTATUS:" LENGTH=":VALUE:" RERR=":RERR<2>      RETURN      *action.type: *      CALL WOBJ.FINDNODE.UDO(NODE,NODEPOS,NODETYPE,PARTPOS,JUSTNODE,PARTTYPE,RERR)      IF PARTPOS THEN         BEGIN CASE            CASE PARTTYPE='O'               VALUE='OBJECT'            CASE PARTTYPE='A'               VALUE='ARRAY'            CASE PARTTYPE='D'               VALUE='NUMBER'            CASE PARTTYPE='S'               VALUE='STRING'            CASE PARTTYPE='N'               VALUE='NULL'            CASE PARTTYPE='B'               VALUE='BOOLEAN'            CASE 1               VALUE='UNKNOWN'         END CASE      END ELSE         IF NODE="" THEN            VALUE="OBJECT"         END ELSE            VALUE="UNDEFINED" ;* NODE NOT FOUND!         END      END      IF WOBJ.DEBUG THEN PRINT "WOBJ: TYPE ACTION: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" TYPE=":VALUE:" RERR=":RERR<2>      RETURN      *      action.destroy: *   UDOSTATUS=UDOFREE(PASSEDOBJ)   IF UDOSTATUS = 0 THEN NULL ELSE      RERR<1>=1      RERR<2>='Error destroying object (':UDOSTATUS:')'   END      RETURNEND001A13WOBJ.DELETE0c2SUBROUTINE WOBJ.DELETE(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: delete a json node in parsed object structure************************************************************************INCLUDE WOBJ.INCLUDE*VALUE=""DONE=0LOOP    CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)    IF WOBJ.DEBUG THEN PRINT "WOBJ.DELETE: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" RERROR=":RERR<2>    IF NOT(NODEPOS) OR NOT(PARTPOS) THEN        RERR=1        RERR<2>="Node not found"        RETURN    END        NODETYPE = JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE NODETYPE = 'O' AND CHILDPOS > 0* DELETE NESTED OBJECTS BEFORE DELETING PARENT NODE            NEST.COUNT = 0            NUM.PARTS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,CHILDPOS>            FOR I=1 TO NUM.PARTS                PARTTYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,CHILDPOS,I>                IF PARTTYPE = 'O' OR PARTTYPE = 'A' THEN                    PARTKEY=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,CHILDPOS,I>                    CALL WOBJ.DELETE(ACTION,NODE:".":PARTKEY,VALUE,RERR)                    NEST.COUNT += 1                    EXIT ;* AFTER MODIFYING THE JSONOBJECT STRUCTURE, NEED TO CALL FINDNODE AGAIN                END            NEXT I            IF NEST.COUNT = 0 THEN* DELETE OBJECT NODE                JSONOBJECT(JSONOBJECT$NODETYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODETYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODELENGTH)=DELETE(JSONOBJECT(JSONOBJECT$NODELENGTH),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODECNTR) -= 1* ADJUST LINKS TO ACCOUNT FOR DELETED NODE                NUM.NODES = JSONOBJECT(JSONOBJECT$NODECNTR)                FOR I = 1 TO NUM.NODES                    NUM.PARTS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,I>                    FOR J = 1 TO NUM.PARTS                        FLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J>                        IF FLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J> = FLINK - 1                        END                        BLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J>                        IF BLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J> = BLINK - 1                        END                    NEXT J                NEXT I                DONE = 1            END        CASE NODETYPE = 'A' AND CHILDPOS > 0* DELETE NESTED OBJECTS BEFORE DELETING PARENT NODE            NEST.COUNT = 0            NUM.ELEMS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,CHILDPOS>            FOR I = 1 TO NUM.ELEMS                PARTTYPE = JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,CHILDPOS,I>                IF PARTTYPE = 'O' OR PARTTYPE = 'A' THEN* DELETE NESTED OBJECTS BEFORE DELETING PARENT NODE                    CALL WOBJ.DELETE(ACTION,NODE:"[":(I-1):"]",VALUE,RERR)                    NEST.COUNT += 1                    EXIT ;* AFTER MODIFYING THE JSONOBJECT STRUCTURE, NEED TO CALL FINDNODE AGAIN                END            NEXT I* AFTER MODIFYING THE JSONOBJECT STRUCTURE, NEED TO CALL FINDNODE AGAIN            IF NEST.COUNT = 0 THEN* DELETE ARRAY NODE                JSONOBJECT(JSONOBJECT$NODETYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODETYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODELENGTH)=DELETE(JSONOBJECT(JSONOBJECT$NODELENGTH),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,CHILDPOS)                JSONOBJECT(JSONOBJECT$NODECNTR) -= 1* ADJUST LINKS TO ACCOUNT FOR DELETED NODE                NUM.NODES = JSONOBJECT(JSONOBJECT$NODECNTR)                FOR I = 1 TO NUM.NODES                    NUM.PARTS = JSONOBJECT(JSONOBJECT$NODELENGTH)<1,I>                    FOR J = 1 TO NUM.PARTS                        FLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J>                        IF FLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,I,J> = FLINK - 1                        END                        BLINK = JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J>                        IF BLINK >= CHILDPOS THEN                            JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)<1,I,J> = BLINK - 1                        END                    NEXT J                NEXT I                DONE = 1            END        CASE 1            DONE = 1    END CASEUNTIL DONE DO REPEAT* DELETE SIMPLE NODEJSONOBJECT(JSONOBJECT$NODEPARTS.KEY)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.KEY),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.BLINK),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)=DELETE(JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE),1,NODEPOS,PARTPOS)JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEPOS> -= 1*RETURNEND000EB5WOBJ.SET.UDO0c2      SUBROUTINE WOBJ.SET.UDO(ACTION,NODE,VALUE,RERR)      **********************************************************************      *      * Copyright (C) 2017 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: December 2017      * Description: set json node to value      *      * Modified by: Peter Schellenbach, Zumasys      * Date: January 2018      * Description: allow Object and Array properties to be set, passing      *   a JSON string representation of the node.      *      **********************************************************************      *      INCLUDE WOBJ.INCLUDE      *INCLUDE UNIVERSE.INCLUDE UDO.H            *$INCLUDE INCLUDE UDO.H      INCLUDE UDO.H            COMMON /WUDO.C/ UDO.OBJECTS(100),UDO.OBJECT.METADATA      *      IF WOBJ.DEBUG THEN PRINT "WOBJ.SET.UDO: NODE=":NODE:" ACTION=":ACTION      *      SACTION=FIELD(ACTION,".",2)      IF 0 THEN         IF NODE="" THEN            IF SACTION <> "OBJECT" THEN               RERR=1               RERR<2>="Node cannot be null"            END ELSE               CALL WOBJ.PARSE(VALUE,NEWOBJ)               IF PSERRORS#"" THEN                  RERR=2                  RERR<2> = PSERRORS                  IF WOBJ.DEBUG THEN PRINT "WOBJ.SET.OBJECT: parse failure: ":RERR<2>               END            END            RETURN         END      END      *      CALL WOBJ.FINDNODE.UDO(NODE,NODEPOS,NODETYPE,PARTPOS,JUSTNODE,PARTTYPE,RERR)      IF WOBJ.DEBUG THEN PRINT "WOBJ.SET.UDO: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" NODETYPE=":NODETYPE:" PARTTYPE=":PARTTYPE:" RERROR=":RERR<2>      *      LASTNODE=""; * WE MAY NEED THIS!!      IF NOT(NODEPOS) THEN         RERR=1         RERR<2>="Node not found"         RETURN      END      *      * CHECK THE NODE WE ARE SETTING PROPERTY TO      * NODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEPOS>      IF NODETYPE#"O" AND NODETYPE#"A" THEN         RERR=1         RERR<2>="Parent node must be an object or array"         RETURN      END      *      IGNORE.RERR=""      *** THIS MAY BE NEEDED TO IDENTIFY OUR LAST NODE!!!      *      * NOW WE ARE SAFE TO SET NEW VALUE      UDOVALUE=""      BEGIN CASE         CASE SACTION="OBJECT"            IF VALUE="" THEN VALUE="{}"            UDOSTATUS=UDOREAD(VALUE,UDOFORMAT_JSON,UDOVALUE)         CASE SACTION="ARRAY"            IF VALUE="" THEN VALUE="[]"            UDOSTATUS=UDOREAD(VALUE,UDOFORMAT_JSON,UDOVALUE)         CASE SACTION="NULL"            UDOSTATUS=UDOCREATE(UDO_NULL,UDOVALUE)         CASE SACTION="BOOLEAN"            IF OCONV(VALUE[1,1],"MCU") = "T" OR VALUE=0 THEN               UDOSTATUS=UDOCREATE(UDO_TRUE,UDOVALUE)            END ELSE               UDOSTATUS=UDOCREATE(UDO_FALSE,UDOVALUE)            END         CASE SACTION="STRING" OR SACTION=""            UDOVALUE=VALUE:""         CASE SACTION="NUMBER"            UDOVALUE=VALUE+0         CASE 1            UDOVALUE=VALUE:""      END CASE      UDOSTATUS=UDOGETTYPE(UDOVALUE,THIS.UDOTYPE)         IF WOBJ.DEBUG THEN PRINT "WOBJ.SET.UDO: SET PARTTYPE=":PARTTYPE:" JUSTNODE=":JUSTNODE:" SACTION: ":SACTION:" THIS.UDOTYPE=":THIS.UDOTYPE; DEBUG      BEGIN CASE         CASE NODETYPE="O"            UDOSTATUS=UDOSETPROPERTY(UDO.OBJECTS(NODEPOS),JUSTNODE,UDOVALUE)         CASE NODETYPE='A' AND PARTPOS=-1            UDOSTATUS=UDOARRAYAPPENDITEM(UDO.OBJECTS(NODEPOS),UDOVALUE)         CASE NODETYPE='A'            UDOSTATUS=UDOARRAYSETITEM(UDO.OBJECTS(NODEPOS),PARTPOS+1, UDOVALUE)      END CASE      IF WOBJ.DEBUG THEN PRINT "WOBJ.SET.UDO: UDOSTATUS=":UDOSTATUS      *CALL WOBJ.SET.PART(NODEPOS,PARTPOS,PARTTYPE,PARTKEY,VALUE,RERR)      RETURN      END001C67WOBJ.TEST0c2************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: WOBJ.TEST - QC Testing tool for WOBJ************************************************************************* Build test json to parse*INCLUDE WOBJ.CHOOSE.WOBJJSON =  \{\JSON := \ "stringtest":"stringtestvalue",\JSON := \ "numbertest": 100.12,\JSON := \ "booleantesttrue": True, \JSON := \ "booleantestfalse": False, \JSON := \ "nulltest": null \JSON := \}\** Lets build the objCALL @WOBJ.RTNE(TESTOBJ,"VERSION","",VERSION,"",RERR)PRINT "VERSION: ":VERSIONCALL @WOBJ.RTNE(TESTOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.ARRAY","arraytest","[]","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","arraytest[-1]","1","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","arraytest[-1]","2","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.OBJECT","objecttest",'{ "objecttestv1":"ok" }',"",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","stringtest","stringtestvalue","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.NUMBER","numbertest",100.12,"",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.BOOLEAN","booleantesttrue","True","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.BOOLEAN","booleantestfalse","False","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET.NULL","nulltest","NULL","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"TOSTRING","",JSON,"",RERR)TESTOBJ=""** TEST 1 - PARSE*TEST="parse"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"FROMSTRING","",JSON,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Parse ok"   TEST.STATUS=1ENDGOSUB end.test** TEST 2 - GetString*TEST="GetString"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","stringtest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="String Found: (":VALUE:")"   IF VALUE="stringtestvalue" THEN      TEST.STATUS=1   END ELSE       TEST.STATUS=0   ENDENDGOSUB end.test** TEST 3 - GetNumber*TEST="GetNumber"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","numbertest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Number Found: (":VALUE:")"   BEGIN CASE      CASE NOT(NUM(VALUE))      CASE VALUE=100.12         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 4 - GETBoolean*TEST="GetBooleanTrue"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","booleantesttrue",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Boolean Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="true"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 5 - GETBoolean*TEST="GetBooleanFalse"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","booleantestfalse",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Boolean Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="false"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 6 - get null*TEST="GetNull"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","nulltest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="testnull Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="null"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 7 - get length*TEST="LENGTH"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"LENGTH","arraytest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="LENGTH(arraytest) Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="2"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 8 get array sub part*TEST="get array part"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","arraytest[1]",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="arraytest[2] Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="2"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 9 - get object keys*TEST="KEYS"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"KEYS","objecttest",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="KEYS Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="objecttestv1"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 10- add item and retrieve*TEST="addstring2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.STRING","string2","string2","",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Added string2"ENDGOSUB end.test** TEST 11 - get string2*TEST="getstring2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","string2",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="string2 Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="string2"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 12- add item and retrieve*TEST="addnull2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.NULL","null2","null","",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="Add Null2"ENDGOSUB end.test** TEST 11 - get NULL2*TEST="getnull2"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"GET","null2",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) THEN   TEST.MSG="null2 Found: (":VALUE:")"   BEGIN CASE      CASE VALUE="null"         TEST.STATUS=1      CASE 1   END CASEENDGOSUB end.test** TEST 12 - Add blank Object*TEST="Add blank object"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.OBJECT","nullobject","","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET","nullobject.nullfield","nullvalue","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"GET","nullobject.nullfield",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) AND VALUE="nullvalue" THEN   TEST.MSG="nullfield found "   TEST.STATUS=1END ELSE   TEST.MSG="nullfield not found "ENDTEST.MSG:=' (':VALUE:')'GOSUB end.test** TEST 13 - Add blank array*TEST="Add blank array"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"SET.ARRAY","nullarray","","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"SET","nullarray[-1]","nullvalue","",RERR)CALL @WOBJ.RTNE(TESTOBJ,"GET","nullarray[0]",VALUE,"",RERR)GOSUB process.errorIF NOT(RERR<1>) AND VALUE="nullvalue" THEN   TEST.MSG="nullfield found "   TEST.STATUS=1END ELSE   TEST.MSG="nullfield not found "ENDTEST.MSG:=' (':VALUE:')'GOSUB end.test** TEST 14 - Test TOJSONTEST="Test TOJSON"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ,"TOJSON","",TJSON,"PRETTIFY",RERR)GOSUB process.errorTEST.STATUS=0TEST.MSG="Testing JSON"IF NOT(RERR<1>) THEN   IF INDEX(TJSON,"arraytest",1) THEN   TEST.MSG="nullfield found "   TEST.STATUS=1   ENDEND ELSE   TEST.MSG=""ENDGOSUB end.test** TEST 15 - Test FROMJSONTEST="Test FROMJSON"GOSUB start.testCALL @WOBJ.RTNE(TESTOBJ2,"FROMJSON","",TJSON,"",RERR)CALL @WOBJ.RTNE(TESTOBJ2,"GET","stringtest",VALUE,"",RERR)GOSUB process.errorTEST.MSG="stringtestvalue=(":VALUE:")"TEST.STATUS=0IF NOT(RERR<1>) THEN   IF VALUE="stringtestvalue" THEN   TEST.STATUS=1   ENDENDGOSUB end.testCALL @WOBJ.RTNE(TESTOBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR)PRINT OUT.JSONSTOP*GOSUB start.testRETURN*process.error: *IF RERR<1> THEN   TEST.STATUS=-1   TEST.MSG=RERR<1>ENDRETURN**start.test: *TEST.STATUS=0TEST.MSG="Success"PRINT "Test: ":TEST[1,20]"L(#20)":RETURN*end.test: *PRINT "  ":TEST.MSG[1,60]"L(#60)":PRINT " ":IF TEST.STATUS THEN PRINT "[Ok    ]" ELSE PRINT @(-13):"[Failed]":@(-14)RETURN0009CEWOBJ.OBJECT.TOSTRING0c2SUBROUTINE WOBJ.OBJECT.TOSTRING(JSON,POS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert parsed json object node to string************************************************************************INCLUDE WOBJ.INCLUDE*JSON:="{"; * START OUR STRINGINDENT.DEPTH+=1*IF PRETTIFY THEN JSON:=NLNUMBER.PARTS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,POS>IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: POS=":POS:" NUMBER.PARTS=":NUMBER.PARTS** OPTION TO SORT THIS**SORTTYPE="NSBASIC"SORTTYPE=""BEGIN CASE     CASE 1        KEYS=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,POS>        CONVERT @SVM TO @AM IN KEYS        SORTED.KEYS=KEYSEND CASEACTUAL.KEYS=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,POS>FOR PP=1 TO NUMBER.PARTS    PART.KEY=SORTED.KEYS<PP>    LOCATE PART.KEY IN ACTUAL.KEYS<1,1> SETTING P ELSE        IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: COULD NOT LOCATE ":PART.KEY:" IN ":ACTUAL.KEYS    END    PART.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,POS,P>    PART.KEY=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,POS,P>    IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: POS=":POS:" P=":P:" T=":PART.TYPE:" K=":PART.KEY    IF PP=1 AND PRETTIFY THEN JSON:=NL    CALL WOBJ.ENCODE(PART.KEY,OUT.PART.KEY)    CALL WOBJ.PRETTIFY.INDENT(JSON,POS)    JSON:='"':OUT.PART.KEY:'": '    BEGIN CASE        CASE PART.TYPE="S"            CALL WOBJ.STRING.TOSTRING(JSON,POS,P)        CASE PART.TYPE="B"            CALL WOBJ.BOOLEAN.TOSTRING(JSON,POS,P)        CASE PART.TYPE="D"            CALL WOBJ.NUMBER.TOSTRING(JSON,POS,P)        CASE PART.TYPE="N"            CALL WOBJ.NULL.TOSTRING(JSON,POS,P)        CASE PART.TYPE="O"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: FL=":PART.FLINK            CALL WOBJ.OBJECT.TOSTRING(JSON,PART.FLINK)        CASE PART.TYPE="A"            PART.FLINK=JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,POS,P>            IF WOBJ.DEBUG THEN PRINT "WOBJ.TOSTRING: FL=":PART.FLINK            CALL WOBJ.ARRAY.TOSTRING(JSON,PART.FLINK)    END CASE    IF PP <> NUMBER.PARTS THEN        JSON:=", "        IF PRETTIFY THEN JSON:=NL    ENDNEXT PP*IF PRETTIFY THEN    JSON:=NL    PASS.POS=POS-1    CALL WOBJ.PRETTIFY.INDENT(JSON,PASS.POS)ENDJSON:="}"*IF PRETTIFY THEN JSON:=NLINDENT.DEPTH -= 1RETURNEND000459WOBJ.KEYS0c2SUBROUTINE WOBJ.KEYS(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: return list of elements in a json node in parsed object structure************************************************************************INCLUDE WOBJ.INCLUDE*VALUE=""CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)**IF WOBJ.DEBUG THEN PRINT "WOBJ.KEYS: NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" LASTNODE=":LASTNODE:" RERR=":RERR<2>*IF NOT(NODEPOS) THEN    RERR=1    RERR<2>="Node not found"     RETURNENDIF NODE#"" AND NOT(PARTPOS) THEN    RERR=1    RERR<2>="Node not found"     RETURNENDIF NODE="" THEN    NODEPOS=1    CHILDPOS=1ENDIF NOT(CHILDPOS) THEN   RERR=1   RERR<2>="Node is not an object"   RETURNENDNODETYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,CHILDPOS>IF NODETYPE#"O" THEN   RERR=1   RERR<2>="Node is not an object"   RETURNENDVALUE=JSONOBJECT(JSONOBJECT$NODEPARTS.KEY)<1,CHILDPOS>RETURNEND0001C5COMPILE.TXT0c2WOBJWOBJ.ARRAY.TOSTRINGWOBJ.BOOLEAN.TOSTRINGWOBJ.DECODE.PARTWOBJ.DELETEWOBJ.ENCODEWOBJ.FINDNODEWOBJ.GETWOBJ.INCLUDEWOBJ.KEYSWOBJ.NULL.TOSTRINGWOBJ.NUMBER.TOSTRINGWOBJ.OBJECT.TOSTRINGWOBJ.PARSEWOBJ.PARSEARRAYWOBJ.PARSEBOOLEANWOBJ.PARSEKEYWOBJ.PARSENULLWOBJ.PARSENUMBERWOBJ.PARSEOBJECTWOBJ.PARSESTRINGWOBJ.PARSEVALUEWOBJ.PRETTIFY.INDENTWOBJ.SETWOBJ.SET.PARTWOBJ.SKIPCHARWOBJ.STRING.TOSTRINGWOBJ.TESTWOBJ.TOSTRING0002C7WOBJ.TOSTRING0c2SUBROUTINE WOBJ.TOSTRING(JSON)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: internal convert json object to string************************************************************************INCLUDE WOBJ.INCLUDE*POS=1OBJ.TYPE=JSONOBJECT(JSONOBJECT$NODETYPE)<1,POS>IF OBJ.TYPE="" OR POS > JSONOBJECT$NODECNTR THEN RETURNIF WOBJ.DEBUG THEN PRINT "FIRST OBJECT=":OBJ.TYPEBEGIN CASE    CASE OBJ.TYPE="A"        CALL WOBJ.ARRAY.TOSTRING(JSON,POS)    CASE OBJ.TYPE="O"        CALL WOBJ.OBJECT.TOSTRING(JSON,POS)END CASERETURNEND0002AFWOBJ.DECODE.PART0c2SUBROUTINE WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: decode json part value************************************************************************INCLUDE WOBJ.INCLUDE*PARTENCODING =  JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEPOS,PARTPOS>PARTVALUE    =  JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEPOS,PARTPOS>*BEGIN CASE    CASE PARTENCODING="H"        VALUE=ICONV(PARTVALUE,"MX0C"); * UV    CASE 1        VALUE=PARTVALUEEND CASE*RETURNEND000529WOBJ.GET0c2SUBROUTINE WOBJ.GET(ACTION,NODE,VALUE,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: get json element value** Modified by: Peter Schellenbach, Zumasys* Date: January 2018* Description: if specified node is an Object or Array, return*   a JSON string representation of the node.************************************************************************INCLUDE WOBJ.INCLUDE*VALUE=""IF NODE="" THEN    CALL WOBJ.OBJECT.TOSTRING(VALUE,1) ; * Root object    RETURNEND*CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF NODEPOS > 0 AND PARTPOS > 0 THEN    OBJ.TYPE=JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE OBJ.TYPE="O"            CALL WOBJ.OBJECT.TOSTRING(VALUE,CHILDPOS)        CASE OBJ.TYPE="A"            CALL WOBJ.ARRAY.TOSTRING(VALUE,CHILDPOS)        CASE OBJ.TYPE="N"            VALUE="null"; * 4/23/202 - Return null value        CASE 1            CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)    END CASEEND ELSE    VALUE="" ; * NODE NOT FOUND!ENDIF WOBJ.DEBUG THEN PRINT "WOBJ.GET: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" VALUE=":VALUERETURNEND0008BCWOBJ.PARSESTRING0c2SUBROUTINE WOBJ.PARSESTRING(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json string value************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""*SAVE.INDEXPOS=INDEXPOSCALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)IFQUOTE = JSTR[INDEXPOS,1]INDEXPOS+=1LEN.JSTR=LEN(JSTR)*LOOPWHILE INDEXPOS > 0 AND INDEXPOS < LEN.JSTR DO    C = JSTR[INDEXPOS,1]    IF WOBJ.DEBUG > 1 THEN PRINT "PARSESTRING: LOOKING AT (":C:")"    BEGIN CASE        CASE C = "\"            INDEXPOS+=1            C=JSTR[INDEXPOS,1]            BEGIN CASE                CASE C = \"\ OR C = "\" OR C= "/" OR C = "'"                    PARSESTRING:=C                    INDEXPOS+=1                CASE C = "b"                    PARSESTRING:=BS                    INDEXPOS+=1                CASE C = "f"                    PARSESTRING:=FF                    INDEXPOS+=1                CASE C = "n"                    PARSESTRING:=LF                    INDEXPOS+=1                CASE C = "r"                    PARSESTRING:=CR                    INDEXPOS+=1                CASE C = "t"                    PARSESTRING:=TB                    INDEXPOS+=1                CASE C = "u"                    INDEXPOS+=1                    CODE=JSTR[INDEXPOS,4]                    IF CODE[1,2]="00" THEN                        PARSESTRING:=ICONV(CODE[3,2],"MX0C")                    END ELSE                        PARSESTRING:="_" ;* Poor substitute for invalid Unicode character!                        PSERRORS<-1> = "Invalid Unicode character at position ":INDEXPOS-1:" : u":CODE                    END                    INDEXPOS+=4            END CASE        CASE C = IFQUOTE            INDEXPOS+=1            EXIT        CASE 1            PARSESTRING:=C            INDEXPOS+=1    END CASEREPEATIF C # IFQUOTE THEN    * string not terminated!    PARSESTRING=""    INDEXPOS=SAVE.INDEXPOSENDIF WOBJ.DEBUG THEN PRINT "PARSESTRING: EXITING: ":PARSESTRINGRETURNEND000111WOBJ.UNASSIGNED.INCLUDE0c2IF UNASSIGNED(PASSEDOBJ) THEN RERR='PARAM1 BLANK'IF UNASSIGNED(ACTION) THEN RERR='PARAM2 (ACTION) NOT ASSIGNED'IF UNASSIGNED(NODE) THEN RERR='PARAM3 (NODE) NOT ASSIGNED'IF UNASSIGNED(VALUE) THEN VALUE=""IF UNASSIGNED(OPTIONS) THEN OPTIONS=""000258WOBJ.BOOLEAN.TOSTRING0c2SUBROUTINE WOBJ.BOOLEAN.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: convert json boolean to string************************************************************************INCLUDE WOBJ.INCLUDE*CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)*CALL WOBJ.ENCODE(VALUE,OUT.VALUE)JSON:=OCONV(OUT.VALUE,"MCL")*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=":VALUERETURNEND0001E4WOBJ.NULL.TOSTRING0c2SUBROUTINE WOBJ.NULL.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: json null to string************************************************************************INCLUDE WOBJ.INCLUDE*JSON:="null"*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=null"RETURNEND0001E1WOBJ.PRETTIFY.INDENT0c2SUBROUTINE WOBJ.PRETTIFY.INDENT(JSON,POS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: indent json string************************************************************************INCLUDE WOBJ.INCLUDE*INDENTSTEP=2*IF PRETTIFY THEN    JSON:=STR(" ",(INDENT.DEPTH*INDENTSTEP))END*RETURNEND00024DWOBJ.STRING.TOSTRING0c2SUBROUTINE WOBJ.STRING.TOSTRING(JSON,NODEPOS,PARTPOS)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: return json node as string************************************************************************INCLUDE WOBJ.INCLUDE*CALL WOBJ.DECODE.PART(NODEPOS,PARTPOS,VALUE)*CALL WOBJ.ENCODE(VALUE,OUT.VALUE)JSON:='"':OUT.VALUE:'"'*IF WOBJ.DEBUG THEN PRINT "N=":NODEPOS:" P=":PARTPOS:" V=":VALUERETURNEND000971WOBJ.PARSEVALUE0c2SUBROUTINE WOBJ.PARSEVALUE(JSTR,INDEXPOS,PARSEVALUE)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json value************************************************************************INCLUDE WOBJ.INCLUDE*PARSEVALUE=""*IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - STARTING"CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*C=JSTR[INDEXPOS,1]LEN.JSTR=LEN(JSTR)*IF WOBJ.DEBUG THEN PRINT "PARSEVALUE LOOKING AT ":C** WE WILL BE ADDING A NEW ITEM TO OUR OBJECT ARRAY*BEGIN CASE    CASE C="{"        CALL WOBJ.PARSEOBJECT(JSTR,INDEXPOS,PARSEVALUE)    CASE C="["        IF WOBJ.DEBUG THEN PRINT "PARSEVALUE CALLING PARSEARRAY"        CALL WOBJ.PARSEARRAY(JSTR,INDEXPOS,PARSEVALUE)    CASE C='"' OR C="'"        IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSESTRING"        CALL WOBJ.PARSESTRING(JSTR,INDEXPOS,PARSEVALUE)        PARSEVALUE=INSERT(PARSEVALUE,1;"S")    CASE 1        IF C="t" OR C="T" OR C="f" OR C="F" THEN            IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSEBOOLEAN"            CALL WOBJ.PARSEBOOLEAN(JSTR,INDEXPOS,PARSEVALUE)            IF PARSEVALUE#"" THEN                PARSEVALUE=INSERT(PARSEVALUE,1;"B")            END        END        IF PARSEVALUE="" AND (C="n" OR C="N") THEN            IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSENULL"            CALL WOBJ.PARSENULL(JSTR,INDEXPOS,PARSEVALUE)            IF PARSEVALUE#"" THEN                 PARSEVALUE=INSERT(PARSEVALUE,1;"N")            END        END        IF PARSEVALUE="" THEN            IF WOBJ.DEBUG THEN PRINT "PARSEVALUE - CALLING PARSENUMBER"            CALL WOBJ.PARSENUMBER(JSTR,INDEXPOS,PARSEVALUE)            IF PARSEVALUE#"" THEN                PARSEVALUE=INSERT(PARSEVALUE,1;"D")            END        END        IF PARSEVALUE="" THEN            * Treat unidentified value as string            LOOP            WHILE INDEXPOS > 0 AND INDEXPOS < LEN.JSTR DO                C = JSTR[INDEXPOS,1]                IF INDEX(",]}",C,1) THEN                    EXIT                END                PARSEVALUE:=C                INDEXPOS+=1            REPEAT            PARSEVALUE=INSERT(PARSEVALUE,1;"S")        ENDEND CASEIF WOBJ.DEBUG THEN PRINT "PARSEVALUE - END OF ROUTINE"*RETURNEND000180WOBJ.CHOOSE.WOBJ0c2* Code to determine default wobj library to use* This needs to change for MVDBTOOLKIT build, defaults to WOBJWOBJ.RTNE="WOBJ"NO.MD.FILE=0OPEN "MD" TO FILE.MD ELSE    OPEN "VOC" TO FILE.MD ELSE NO.MD.FILE=1ENDIF NOT(NO.MD.FILE) THEN    READ WOBJ.CONF FROM FILE.MD, "WOBJ.CONF" ELSE WOBJ.CONF=""    IF WOBJ.CONF<3> # "" THEN WOBJ.RTNE=WOBJ.CONF<3>END0014F3WOBJ0c2SUBROUTINE WOBJ(PASSEDOBJ,ACTION,NODE,VALUE,OPTIONS,RERR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: WOBJ json library main routine************************************************************************WOBJ.VERSION = "2.0"*INCLUDE WOBJ.INCLUDE** 4/21/2020 Merged in udo object supportPLATFORM=""* HOW TO DEFINE CONFIGURATION FOR WOBJ??NO.MD.FILE=0OPEN "MD" TO MD.FILE ELSE   OPEN "VOC" TO MD.FILE ELSE NO.MD.FILE=1ENDWOBJ.CONF=""IF NOT(NO.MD.FILE) THEN   READ WOBJ.CONF FROM MD.FILE, "WOBJ.CONF" ELSE WOBJ.CONF=""ENDIF WOBJ.CONF="" THEN   NO.DICT.WOBJ.BP=0   OPEN "DICT","WOBJ.BP" TO DICT.WOBJ.BP ELSE NO.DICT.WOBJ.BP=1   IF NOT(NO.DICT.WOBJ.BP) THEN      READ WOBJ.CONF FROM DICT.WOBJ.BP, "WOBJ.CONF" ELSE WOBJ.CONF=""   ENDENDPLATFORM=WOBJ.CONF<2>* 5/11/2020 - Moved unassigned check to here** Doing inline include due to Assign/Unassigned (unidata)* WOBJ.UNASSIGNED.INCLUDE*$INCLUDE WOBJ.UNASSIGNED.INCLUDEINCLUDE WOBJ.UNASSIGNED.INCLUDEIF INDEX(OPTIONS,"PRETTIFY",1) THEN PRETTIFY=1 ELSE PRETTIFY=0IF INDEX(OPTIONS,"PRETTIFYCR",1) THEN PRETTIFYCR=1 ELSE PRETTIFYCR=0IF INDEX(OPTIONS,"DEBUG",1) THEN WOBJ.DEBUG=1 ELSE WOBJ.DEBUG=0IF INDEX(OPTIONS,"UDO=1",1) THEN PLATFORM="UDO"IF INDEX(OPTIONS,"UDO=0",1) AND PLATFORM="UDO" THEN PLATFORM=""IF INDEX(OPTIONS,"NATIVE",1) THEN PLATFORM=""* 5/11/2020 - pap Patch to allow default setting for a *             set.object or set.array*IF ACTION="SET.OBJECT" AND VALUE="" THEN VALUE="{}"IF ACTION="SET.ARRAY" AND VALUE="" THEN VALUE="[]"IF ACTION="FROMJSON" THEN ACTION="FROMSTRING"IF ACTION="TOJSON" THEN ACTION="TOSTRING"BEGIN CASE   CASE PLATFORM='UDO'      CALL WOBJ.UDO(PASSEDOBJ,ACTION,NODE,VALUE,OPTIONS,RERR)      RETURN   CASE 1END CASE*MAT JSONOBJECT = ""RERR=""INDENT.DEPTH=0*BEGIN CASE    CASE ACTION="FROMSTRING"* THIS EXISTS EARLIER DUE TO MATPARSE BELOW        CALL WOBJ.PARSE(VALUE,NEWOBJ)        PASSEDOBJ=NEWOBJ        IF PSERRORS # "" THEN            RERR=2            RERR<2> = PSERRORS        END        IF WOBJ.DEBUG THEN PRINT "WOBJ: FROMSTRING ACTION: VALUE=":VALUE:" RERR=":RERR<2>        RETURN    CASE ACTION="VERSION"        VALUE=WOBJ.VERSION        RETURNEND CASERERR=''*IF NOT(ASSIGNED(PASSEDOBJ)) THEN RERR='PARAM1 BLANK'*IF NOT(ASSIGNED(ACTION)) THEN RERR='PARAM2 (ACTION) NOT ASSIGNED'*IF NOT(ASSIGNED(NODE)) THEN RERR='PARAM3 (NODE) NOT ASSIGNED'*IF NOT(ASSIGNED(VALUE)) THEN VALUE=""*IF NOT(ASSIGNED(OPTIONS)) THEN OPTIONS=""IF RERR <> "" THEN   RERR<2>=RERR   RERR<1>=1   PRINT RERR<1>   RETURNEND** MATPARSE JSONOBJECT FROM PASSEDOBJ; * all except unidataMATPARSE JSONOBJECT FROM PASSEDOBJ, @AM; * Unidata*IF WOBJ.DEBUG THEN PRINT "ACTION=":ACTIONBEGIN CASE    CASE ACTION="TOSTRING"        VALUE=""        IF NODE # "" THEN            RERR=1            RERR<2>="Node ignored - returning the root node"            IF WOBJ.DEBUG THEN PRINT "WOBJ: TOSTRING ACTION: NODE ":NODE:" IGNORED"        END        CALL WOBJ.TOSTRING(VALUE)    CASE ACTION="GET"        GOSUB action.get    CASE FIELD(ACTION,".",1)="SET"        GOSUB action.set    CASE ACTION="DELETE"        GOSUB action.delete    CASE ACTION="KEYS"        GOSUB action.keys    CASE ACTION="LENGTH"        GOSUB action.length    CASE ACTION="TYPE"        GOSUB action.type    CASE 1        VALUE=""        RERR=1        RERR<2>="Invalid action '":ACTION:"'"        IF WOBJ.DEBUG THEN PRINT "WOBJ: INVALID ACTION: ":ACTIONEND CASE*MATBUILD PASSEDOBJ FROM JSONOBJECT*RETURN*action.get: *CALL WOBJ.GET(ACTION,NODE,VALUE,RERR)RETURN*action.set: *CALL WOBJ.SET(ACTION,NODE,VALUE,RERR)RETURN*action.delete: *CALL WOBJ.DELETE(ACTION,NODE,VALUE,RERR)RETURN*action.keys: *CALL WOBJ.KEYS(ACTION,NODE,VALUE,RERR)RETURN*action.length: *CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF PARTPOS THEN    IF CHILDPOS THEN        VALUE=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,CHILDPOS>+0    END ELSE        VALUE=1 ;* SIMPLE NODE HAS LENGTH OF 1    ENDEND ELSE    IF NODE="" THEN        VALUE=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,1>+0    END ELSE        VALUE=0 ;* NODE NOT FOUND!    ENDENDIF WOBJ.DEBUG THEN PRINT "WOBJ: LENGTH ACTION: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" LENGTH=":VALUE:" RERR=":RERR<2>RETURN*action.type: *CALL WOBJ.FINDNODE(NODE,NODEPOS,PARTPOS,CHILDPOS,LASTNODE,RERR)IF PARTPOS THEN    PARTTYPE = JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEPOS,PARTPOS>    BEGIN CASE        CASE PARTTYPE='O'            VALUE='OBJECT'        CASE PARTTYPE='A'            VALUE='ARRAY'        CASE PARTTYPE='D'            VALUE='NUMBER'        CASE PARTTYPE='S'            VALUE='STRING'        CASE PARTTYPE='N'            VALUE='NULL'        CASE PARTTYPE='B'            VALUE='BOOLEAN'        CASE 1            VALUE='UNKNOWN'    END CASEEND ELSE    IF NODE="" THEN        VALUE="OBJECT"    END ELSE        VALUE="UNDEFINED" ;* NODE NOT FOUND!    ENDENDIF WOBJ.DEBUG THEN PRINT "WOBJ: TYPE ACTION: ":NODE:" NODEPOS=":NODEPOS:" PARTPOS=":PARTPOS:" CHILDPOS=":CHILDPOS:" TYPE=":VALUE:" RERR=":RERR<2>RETURN*END00038DWOBJ.PARSENUMBER0c2SUBROUTINE WOBJ.PARSENUMBER(JSTR,INDEXPOS,PARSESTRING)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json numeric value************************************************************************INCLUDE WOBJ.INCLUDE*PARSESTRING=""*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)SAVE.INDEXPOS=INDEXPOS*JSTR.LENGTH=LEN(JSTR)*LOOP WHILE INDEXPOS > 0 AND INDEXPOS <= JSTR.LENGTH DO    C=JSTR[INDEXPOS,1]    IF NUM(C) OR C="+" OR C="-" OR C="." OR C="E" OR C="e" THEN        PARSESTRING:=C        INDEXPOS+=1    END ELSE        EXIT    ENDREPEATCALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)C=JSTR[INDEXPOS,1]IF INDEX(",]}",C,1)=0 THEN    * invalid terminator - not a number    PARSESTRING=""    INDEXPOS=SAVE.INDEXPOSENDRETURNEND000419WOBJ.PARSE0c2SUBROUTINE WOBJ.PARSE(JSTR,JSONOBJECTRETURN)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json string into object************************************************************************INCLUDE WOBJ.INCLUDE*PSERRORS=""MAT JSONOBJECT=""JSONOBJECTRETURN=""*INDEXPOS=1CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)C=JSTR[INDEXPOS,1]IF C # "{" THEN    IF C # "" THEN        PSERRORS<-1>="Leading brace for JSON object missing"    END    RETURNEND*CALL WOBJ.PARSEOBJECT(JSTR,INDEXPOS,PARSERESULT)IF PARSERESULT="" THEN    IF PSERRORS="" THEN PSERRORS<-1>="Parse failure"END ELSE    * MAKE SURE WE CONSUMED ENTIRE JSTR    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    IF INDEXPOS <= LEN(JSTR) THEN        PSERRORS<-1>="Extra data (":(LEN(JSTR)-INDEXPOS+1):" characters) after final close brace ignored"    ENDEND*MATBUILD JSONOBJECTRETURN FROM JSONOBJECT*RETURNEND000A0FWOBJ.PARSEARRAY0c2SUBROUTINE WOBJ.PARSEARRAY(JSTR,INDEXPOS,PARSEARRAY)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: parse json array************************************************************************INCLUDE WOBJ.INCLUDE*PARSEVARRAY=""IF WOBJ.DEBUG THEN PRINT "PARSEARRAY - STARTING"*CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)*IF JSTR[INDEXPOS,1] <> "[" THEN    PSERRORS<-1>="Invalid Array at position ":INDEXPOS:" : ":JSTR[INDEXPOS,20]    RETURNEND*LEN.JSTR = LEN(JSTR)INDEXPOS+=1*JSONOBJECT(JSONOBJECT$NODECNTR)+=1NODEID=JSONOBJECT(JSONOBJECT$NODECNTR)JSONOBJECT(JSONOBJECT$NODETYPE)<1,NODEID>="A"; *SET AS OBJECT*LOOP    CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)    C=JSTR[INDEXPOS,1]    IF WOBJ.DEBUG THEN PRINT "PARSEARRAY: ":NODEID:" - LOOKING AT ":C    BEGIN CASE        CASE C = "]"            IF WOBJ.DEBUG THEN PRINT "PARSEARRAY: ":NODEID:" EXIT ON ]"            INDEXPOS+=1            EXIT        CASE C = ","            INDEXPOS+=1            CALL WOBJ.SKIPCHAR(JSTR,INDEXPOS)        CASE INDEXPOS > LEN.JSTR            PSERRORS<-1>="Missing ']': ":JSTR[LEN(JSTR)-20,20]            RETURN    END CASE    *    CALL WOBJ.PARSEVALUE(JSTR,INDEXPOS,PARSEVALUE)    *    JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>+=1    PARTPOS=JSONOBJECT(JSONOBJECT$NODELENGTH)<1,NODEID>    BEGIN CASE        CASE PARSEVALUE=""            PSERRORS<-1>="Invalid value syntax for array element ":(PARTPOS-1)            IF WOBJ.DEBUG THEN PRINT "PARSEARRAY ":NODEID:" invalid value syntax"            RETURN        CASE PARSEVALUE<1>="A" OR PARSEVALUE<1>="O"            * ARRAY OR OBJECT            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            JSONOBJECT(JSONOBJECT$NODEPARTS.FLINK)<1,NODEID,PARTPOS>=PARSEVALUE<2>        CASE 1            JSONOBJECT(JSONOBJECT$NODEPARTS.TYPE)<1,NODEID,PARTPOS>=PARSEVALUE<1>            V=PARSEVALUE<2>            IF INDEX(V,LF,1) OR INDEX(V,CR,1) THEN                V=OCONV(V,"MX0C")                E="H"            END ELSE                E="A"            END            JSONOBJECT(JSONOBJECT$NODEPARTS.VALUE)<1,NODEID,PARTPOS>=V            JSONOBJECT(JSONOBJECT$NODEPARTS.ENCODING)<1,NODEID,PARTPOS>=E    END CASE    IF WOBJ.DEBUG THEN PRINT "PARSEARRAY ":NODEID:" ":PARSEVALUE<1>:" ":PARSEVALUE<2>REPEATPARSEARRAY="A"PARSEARRAY<2>=NODEIDIF WOBJ.DEBUG THEN PRINT "PARSEARRAY - EXITING"RETURNEND000165DICT_PORTAL.AR0c000002BINVOICE.AMT0c1A6Invoice.AmtMD2R13000025DUE.DATE0c1A20Due.DateD2-R8000024BALANCE0c1A50BalanceMD2R13000029DATES.PAID0c1A8CheckDatesD2-R800001APIPE0c1A0 F;C|L100001ACUST0c1A1CustL2500001EBIG.CUST0c1A1CustL40000034CUST.NAME0c1A1Cust.NameTPORTAL.AR;X;1;1L25000A7FMVDB.WIDGETS0c0000025AdminConfig0c2SUB.ADMIN.CONFIGADMIN000025Code Templates0c2SUB.CODE.TEMPLATES000014D3 Free0c2SUB.FREE00001CD3 LISTPEQS0c2SUB.LISTPEQS000016D3 LISTU0c2SUB.LISTU000028D3 Runtime Errors0c2SUB.RUNTIME.ERRORS000024D3 Sys Err Chart0c2SUB.SYS.ERR.BAR000021D3 System Errors0c2SUB.SYS.ERRS00002DDashboard License Usage0c2SUB.TABLE.LIC.USED000038DEMO ANNUAL SALES BY REP0c2SUB.DEMO.ANNUAL.SALES.BY.REP000035DEMO AVERAGE DAYS CHART0c2SUB.DEMO.DAYS.TO.PAY.CHART000030DEMO DAYS TO PAY PIE0c2SUB.DEMO.DAYS.TO.PAY.PIE00004BDEMO FINANCIAL PICTURE0c2DEMO.FINANCIALS.DASHBOARDDemo Financial Picture00003ADEMO MONTHLY SALES BY REP0c2SUB.DEMO.MONTHLY.SALES.BY.REP000032DEMO NET INCOME CHART0c2SUB.DEMO.NET.INCOME.CHART000036DEMO REV.GP SALES CHART0c2SUB.DEMO.REV.GP.SALES.CHART00002EDEMO SALE TYPES PIE0c2SUB.DEMO.SALE.TYPES.PIE000028DEMO SALES CHART0c2SUB.DEMO.SALES.CHART00002EDEMO SALES PERCENTS0c2SUB.DEMO.SALES.PERCENTS000044DEMO SINGLE MONTH SALES BY REP0c2SUB.DEMO.SINGLE.MONTH.SALES.BY.REP000020Demo- MS Col0c2SUB.DEMO.MS.COL00001FDemo-Doughnut0c2SUB.DEMO.DNUT000019Demo-Pie0c2SUB.DEMO.PIE00001EDemo-SS Col0c2SUB.DEMO.SS.COL000021Demo-SS Line0c2SUB.DEMO.SS.LINE000025Drilldown Demo0c2SUB.DEMO.DRILLDOWN000024Emailed Report0c2SUB.EMAILED.REPORT00001EGRID TEST0c2SUB.GRID.TESTSAI000021Icon Gallery0c2SUB.ICON.GALLERY000022Mobile Manager0c2SUB.MOBILE.APPS000026MW CodeFactory0c2SUB.MW.CODE.FACTORY000021PDFConfig0c2SUB.PDF.CONFIGADMIN000028QM Runtime Errors0c2SUB.RUNTIME.ERRORS00001BRSS Feeds0c2SUB.RSS.FEEDS000028SC-Lines By Lib (Pie)0c2SUB.SC.LIB.PIE000023SC-Lines By Prog0c2SUB.SC.LIB.COL000028SC-Progs by Lib (Pie)0c2SUB.SC.LIB.PIE00001BShow Vars0c2SUB.SHOW.VARS000021Source Viewer0c2SUB.SOURCE.VIEW000025System - Session0c2SUB.SHOW.SESSION000028PORTAL DASHBOARD0c2SUB.PORTAL.DASHBOARD000030PORTAL SALES REPORTS0c2SUB.PORTAL.SALES.REPORTS000034PORTAL AR REPORT SETUP0c2SUB.PORTAL.AR.REPORT.SETUP00002APORTAL AR REPORTS0c2SUB.PORTAL.AR.REPORTS00002APORTAL AP REPORTS0c2SUB.PORTAL.AP.REPORTS000034PORTAL AP REPORT SETUP0c2SUB.PORTAL.AP.REPORT.SETUP000024PORTAL MARGINS0c2SUB.PORTAL.MARGINS00003APORTAL SALES REPORT SETUP0c2SUB.PORTAL.SALES.REPORT.SETUP000040DISPLAY PORTAL AP BALANCE PIE CHART0c2SUB.PORTAL.AP.BALANCE.PIE000040DISPLAY PORTAL AR BALANCE PIE CHART0c2SUB.PORTAL.AR.BALANCE.PIE000034PORTAL DAYS TO PAY PIE0c2SUB.PORTAL.DAYS.TO.PAY.PIE00003CPORTAL SETUP DOCUMENTATION0c2SUB.PORTAL.SETUP.DOCUMENTATION000030PORTAL.DOCUMENTATION0c2SUB.PORTAL.DOCUMENTATION000040PORTAL.REPORTS.DOCUMENTATION0c2SUB.PORTAL.REPORTS.DOCUMENTATION000038PORTAL.RUN.DOCUMENTATION0c2SUB.PORTAL.RUN.DOCUMENTATION0122BAMVDBTOOLKIT.BP0c00010ABMVDBTOOLKIT.WFILEIO.D30c2      SUBROUTINE MVDBTOOLKIT.WFILEIO.D3(FOBJ)      **********************************************************************      *      * Copyright (C) 2017 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: June 7th 2018      * Description: WFILEIO MULTI PLATFORM WORKING WITH O/S FILES      *      **********************************************************************      *      * INOBJ      *      * { "ACTION":"READ,WRTE,DELETE",      *   "PATH":"PATH TO THE FILE",      *   "DATA":"DATA FOR A WRITE",      *   "dosletter":"OPTIONAL DOS LETTER TO ADD TO PATH",      *   "NEWLINE":"CR,LF,CRLF,DOS,UNIX",      *   "PERMISSIONS":"TBD"      *   "response": {      *       "data":"responsedata",      *       "status":1-ok, else no,      *       "statusmsg":"statusmsg"      *   }      * }      *      * need to know the existing platform      *PLATFORM.DELIM="\"      *PLATFORM.TYPE="WINDOWS"      *PLATFORM.MV="D3"      INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ            CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MV,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.DELIM,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)      FSTATUS=1      FSTATUSMSG="OK"      CALL @WOBJ.RTNE(FOBJ,"GET","action",FILEIO.ACTION,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","path",FILEIO.PATH,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","data",FILEIO.DATA,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","dosletter",FILEIO.DOSLETTER,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","newline",FILEIO.NEWLINE,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","permissions",FILEIO.PERMISSIONS,"",RERR)      *CALL @WOBJ.RTNE(OUTOBJ,"FROMSTRING","","{}","",RERR)      FILEIO.ACTION=OCONV(FILEIO.ACTION,"MCU")      FILEIO.NEWLINE=OCONV(FILEIO.NEWLINE,"MCU")      CALL @WOBJ.RTNE(FOBJ,"GET","work.parsed_fileio_file_name",PARSED.FILEIO.FILE.NAME,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.fileio_just_path",FILEIO.JUST.PATH,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MVTYPE,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.FILEDELIM,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","path",ORIG.PATH,"",RERR)      * FOR RIGHT NOW ON JBASE WE WILL JUST OPEN THE FILE USING FULL PATHING      * THIS DOES NOT DO ANYTHING!!!      BEGIN CASE         CASE PLATFORM.TYPE="WINDOWS"            REAL.PATH="dos:":PLATFORM.TYPE         CASE 1            REAL.PATH="unix:":PLATFORM.TYPE      END CASE      **      OPEN FILEIO.JUST.PATH TO FI ELSE         IF INDEX(FILEIO.JUST.PATH,"AppData\Local\Temp",1) OR INDEX(FILEIO.JUST.PATH,'\tmp',1) THEN            * SPECIAL PATCH FOR D3/WINDOWS.  D3 is running as a system user and it appears            * the Temp directory does not always exist            EXECUTE '!mkdir ':FILEIO.JUST.PATH         END         OPEN FILEIO.JUST.PATH TO FI ELSE            FSTATUS=0            FSTATUSMSG="Could not open file ":FILEIO.JUST.PATH            GOTO end.of.run         END      END      BEGIN CASE         CASE FILEIO.ACTION="READ"            GOSUB fileio.read         CASE FILEIO.ACTION="WRITE"            GOSUB fileio.write         CASE FILEIO.ACTION="DELETE"            GOSUB fileio.delete         CASE 1            FSTATUS=0            FSTATUSMSG="Invalid action"            GOTO end.of.run      END CASEend.of.run: *      CALL @WOBJ.RTNE(FOBJ,"SET.NUMBER", "response.status", FSTATUS,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"SET.STRING", "response.statusmsg", FSTATUSMSG, "", RERR)      RETURNfileio.read: *      REC=""      READ REC FROM FI, PARSED.FILEIO.FILE.NAME ELSE         FSTATUS=0         FSTATUSMSG="Could not find ":PARSED.FILEIO.FILE.NAME      END      CALL @WOBJ.RTNE(FOBJ,"SET.STRING","response.data",REC,"",RERR)      IF 0 THEN         PRINT "PATH   :":FILEIO.JUST.PATH         PRINT "ID     :":PARSED.FILEIO.FILE.NAME         PRINT "REC    :":REC      END      RETURNfileio.write: *      WRITE FILEIO.DATA ON FI, PARSED.FILEIO.FILE.NAME      RETURNfileio.delete: *      DELETE FI, PARSED.FILEIO.FILE.NAME      RETURN002F4DMVDBTOOLKIT.TEST0c2PRINT @(-1):"MVDBTOOLKIT.TEST"PRINTINCLUDE MVDBTOOLKIT.TEST.INCLUDEINCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJTEST.PLATFORM=FIELD(CMND,' ',2)TEST.MVTYPE=FIELD(CMND,' ',3)CALL MVDBTOOLKIT.WPLATFORM(PLATFORM.OBJ)IF TEST.PLATFORM = "" THEN   CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",TEST.PLATFORM,"",RERR)ENDIF TEST.MVTYPE = "" THEN   CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",TEST.MVTYPE,"",RERR)ENDIF TEST.PLATFORM = "" THEN   PRINT "Enter Platform: ":; INPUT TEST.PLATFORMENDIF TEST.MVTYPE = "" THEN   PRINT "Enter MVType: ":; INPUT TEST.MVTYPEENDIF TEST.PLATFORM='' OR TEST.MVTYPE='' THEN    PRINT "Usage: MVDBTOOLKIT PLATFORM MVTYPE"    PRINT    PRINT "PLATFORM=WINDOWS or LINUX"    PRINT "MVTYPE=JBASE,D3,UNIVERSE,UNIDATA"    STOPEND* GET ENVIRONMENTCALL MVDBTOOLKIT.WPLATFORM(PLATFORM.OBJ)CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","curllocation",CURLLOCATION,"",RERR)CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",PLATFORM,"",RERR)TEST='platform'; GOSUB start.testTEST.MSG=PLATFORM:"=":TEST.PLATFORMIF PLATFORM # TEST.PLATFORM THEN TEST.STATUS=0 ELSE TEST.STATUS=1GOSUB end.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",RESULT,"",RERR)TEST='mvtype'; GOSUB start.testTEST.MSG=RESULT:"=":TEST.MVTYPEIF RESULT # TEST.MVTYPE THEN TEST.STATUS=0 ELSE TEST.STATUS=1GOSUB end.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.DIR,"",RERR)CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","filedelim",FILEDELIM,"",RERR)TEST='filedelim'; GOSUB start.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","filedelim",FILEDELIM,"",RERR)TEST.MSG=FILEDELIMTEST.STATUS=1BEGIN CASE   CASE OCONV(PLATFORM,"MCU") = "LINUX" AND FILEDELIM="/"   CASE OCONV(PLATFORM,"MCU") = "WINDOWS" AND FILEDELIM="\"   CASE 1; TEST.STATUS=0END CASEGOSUB end.testTEST='tmpdir'; GOSUB start.testCALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.DIR,"",RERR)TEST.MSG=TMP.DIRTEST.STATUS=1IF TMP.DIR="" THEN TEST.STATUS=0GOSUB end.testTEST='MVDBTOOLKIT.SWAP'GOSUB start.testS='TEST LINE TEST LINE'ORIG.STRING=SCALL MVDBTOOLKIT.SWAP(S,"ES","XX")IF S = "TXXT LINE TXXT LINE" THEN TEST.STATUS=1 ELSE TEST.STATUS=0TEST.MSG=SGOSUB end.test* Test 1 GetenvTEST="getenv"GOSUB start.testCALL MVDBTOOLKIT.WGETENV("PATH",PATH)IF PATH # "" THEN    TEST.MSG=PATH[1,60]    TEST.STATUS=1END ELSE    TEST.MSG=""    TEST.STATUS=0ENDGOSUB end.test* Test WEXECUTETEST="wexecute"; GOSUB start.testCMND='echo MVDBTOOLKIT.TEST'CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)CALL MVDBTOOLKIT.WEXECUTE(COBJ)CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)IF INDEX(CMND.RESULT,"MVDBTOOLKIT.TEST",1) THEN    TEST.MSG=CMND.RESULT    TEST.STATUS=1END ELSE    TEST.MSG=CMND.RESULT    TEST.STATUS=0ENDCONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSGGOSUB end.test* Test WFILEIOTEST="WFILEIO-WRITE"USER.NO=FIELD(OCONV('','U50BB'),' ',1)GOSUB start.testCALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)TMP.FILE.NAME=TMP.DIR:FILEDELIM:'TMP-':USER.NO:'.txt'TEST.MSG=TMP.FILE.NAMECALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.FILE.NAME,"",RERR)SAVE.FOBJ=FOBJTMP.DATA=TIMEDATE()CALL @WOBJ.RTNE(FOBJ,"SET","data",TMP.DATA,"",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUS.MSG,"",RERR)TEST.STATUS=RESPONSE.STATUSIF NOT(RESPONSE.STATUS) THEN TEST.MSG:=RESPONSE.STATUS.MSGGOSUB end.testIF NOT(TEST.STATUS) THEN STOP "Test Failed, no reason to continue"TEST='WFILEIO-READ'GOSUB start.test* NOW READ IT BACK INCALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)TEST.MSG="(":TMP.DATA:')=(':RESPONSE.DATA:")"TEST.STATUS=1IF TMP.DATA # RESPONSE.DATA THEN TEST.STATUS=0GOSUB end.testTEST="WFILEIO-DELETE"; GOSUB start.testFOBJ=SAVE.FOBJCALL @WOBJ.RTNE(FOBJ,"SET","action","DELETE","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)FOBJ=SAVE.FOBJCALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)RESPONSE.DATA=""CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUSMSG,"",RERR)TEST.STATUS=1TEST.MSG=TMP.FILE.NAME:' ':RESPONSE.STATUSIF RESPONSE.STATUS=0 AND RESPONSE.DATA="" THEN NULL ELSE TEST.STATUS=0GOSUB end.test* Let get our current directoryTEST="pwd"; GOSUB start.testIF OCONV(PLATFORM,"MCU") = "WINDOWS" THEN   CMND='echo %CD%'END ELSE   CMND='pwd'ENDCALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)CALL MVDBTOOLKIT.WEXECUTE(COBJ)CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)IF 1 THEN    TEST.MSG=CMND.RESULT    TEST.STATUS=1END ELSE    TEST.MSG=CMND.RESULT    TEST.STATUS=0ENDCONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSGGOSUB end.testMVDBTOOLKIT.LOCATION = CMND.RESULTIF 0 THEN* Lets verify we have curl!!!IF CURLLOCATION="" THEN CURLLOCATION="curl"TEST="default curl"; GOSUB start.testCMND=CURLLOCATION:' -V'CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)CALL MVDBTOOLKIT.WEXECUTE(COBJ)CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)BEGIN CASE   CASE INDEX(CMND.RESULT,"libcurl",1) AND 0    TEST.MSG=CMND.RESULT    TEST.STATUS=1   CASE OCONV(PLATFORM,"MCU")="WINDOWS"    TEST.MSG=CMND.RESULT    TEST.STATUS=2   CASE 1    TEST.MSG=0END CASECONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSGGOSUB end.test* Start looking for curlIF TEST.STATUS=2 THEN   CURLLOCATION="c:\progra~1\git\mingw64\bin\curl.exe"   TEST="git curl"; GOSUB start.test   CMND=CURLLOCATION:' -V'   CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)   CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)   CALL MVDBTOOLKIT.WEXECUTE(COBJ)   CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)   BEGIN CASE      CASE INDEX(CMND.RESULT,"libcurl",1) AND 0         TEST.MSG=CMND.RESULT         TEST.STATUS=1      CASE OCONV(PLATFORM,"MCU")="WINDOWS"         TEST.MSG=CMND.RESULT         TEST.STATUS=2      CASE 1         TEST.MSG=CMND.RESULT         TEST.STATUS=0   END CASE   CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG   GOSUB end.testENDIF TEST.STATUS=2 THEN   CURLLOCATION=MVDBTOOLKIT.LOCATION:"\mvdbtoolkit\curl\windows64\curl.exe"   TEST="mvdbtoolkit curl"; GOSUB start.test   CMND=CURLLOCATION:' -V'   CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)   CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)   CALL MVDBTOOLKIT.WEXECUTE(COBJ)   CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)   BEGIN CASE      CASE INDEX(CMND.RESULT,"libcurl",1) AND 0         TEST.MSG=CMND.RESULT         TEST.STATUS=1       CASE 1         TEST.STATUS=0         TEST.MSG=CMND   END CASE   CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG   GOSUB end.testENDENDTEST="WCALL"GOSUB start.testCALL @WOBJ.RTNE(OBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","method","POST","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","debug","N","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","url","https://httpbin.org/anything?field1=value1","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","insecure","Y","",RERR)  CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","headers","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","headers.X-TEST-HEADER","headertest","",RERR)  CALL @WOBJ.RTNE(OBJ,"SET.ARRAY","formfields","[]","",RERR) CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","formfields[-1]","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","formfields[0].name","field2","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","formfields[0].value","VALUE2$","",RERR) CALL @WOBJ.RTNE(SOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(SOBJ,"SET","name","field3","",RERR) CALL @WOBJ.RTNE(SOBJ,"SET","value","<EXAMPLE HTML>","",RERR) CALL @WOBJ.RTNE(SOBJ,"TOSTRING","",SJSON,"",RERR) CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","formfields[-1]",SJSON,"",RERR) CALL MVDBTOOLKIT.WCALL(OBJ) CALL @WOBJ.RTNE(OBJ,"GET","response.data",RESPONSE,"",RERR) OPEN "MVDBTOOLKIT.BP" TO FILE ELSE STOP *PRINT "RESPONSE=":RESPONSE WRITE RESPONSE ON FILE, "MVDBTOOLKIT.TEST.JSON" CALL @WOBJ.RTNE(OBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR) WRITE OUT.JSON ON FILE, "MVDBTOOLKIT.WCALL.JSON"  CALL @WOBJ.RTNE(OBJ,"GET","response.status",RESPONSE.STATUS,"",RERR) *PRINT 'RESPONSE.STATUS=':RESPONSE.STATUS:'  ': *IF RESPONSE.STATUS="200" THEN PRINT "OK" ELSE PRINT "FAIL" TEST.MSG=RESPONSE.STATUS IF RESPONSE.STATUS="200" THEN    TEST.STATUS=1 END ELSE    TEST.STATUS=0 END GOSUB end.test TEST='WCALL.HTTPTYPE' GOSUB start.test CALL @WOBJ.RTNE(OBJ,"GET","response.http_type",RESPONSE.HTTP.TYPE,"",RERR) *PRINT 'RESPONSE.HTTP_TYPE=':RESPONSE.HTTP.TYPE TEST.MSG=RESPONSE.HTTP.TYPE IF INDEX(TEST.MSG,'HTTP/',1) THEN    TEST.STATUS=1 END ELSE    TEST.STATUS=0 END GOSUB end.test CALL @WOBJ.RTNE(ROBJ,"FROMSTRING","",RESPONSE,"",RERR) TEST="WCALL.FIELD1" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","args.field1",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="value1" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.testTEST="WCALL.field2" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","form.field2",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="VALUE2$" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.testTEST="WCALL.field3" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","form.field3",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="<EXAMPLE HTML>" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.test TEST="WCALL.HEADER" GOSUB start.test CALL @WOBJ.RTNE(ROBJ,"GET","headers.X-Test-Header",VALUE,"",RERR) TEST.MSG=VALUE IF TEST.MSG="headertest" THEN TEST.STATUS=1 ELSE TEST.STATUS=0 GOSUB end.testTEST="WCALL.BODY"GOSUB start.test CALL @WOBJ.RTNE(OBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","method","POST","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","debug","N","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","url","https://httpbin.org/anything?field1=value1","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","insecure","N","",RERR) CALL @WOBJ.RTNE(OBJ,"SET.OBJECT","headers","{}","",RERR) CALL @WOBJ.RTNE(OBJ,"SET","Content-Type","application/json","",RERR)  CALL @WOBJ.RTNE(TESTOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(TESTOBJ,"SET","test","value","",RERR) CALL @WOBJ.RTNE(TESTOBJ,"TOSTRING","",TESTJSON,"PRETTIFY",RERR) CALL @WOBJ.RTNE(OBJ,"SET.STRING","body",TESTJSON,"",RERR)  CALL MVDBTOOLKIT.WCALL(OBJ) CALL @WOBJ.RTNE(OBJ,"GET","response.data",RESPONSE,"",RERR)  WRITE RESPONSE ON FILE, "MVDBTOOLKIT.TESTBODY.JSON" CALL @WOBJ.RTNE(OBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR) WRITE OUT.JSON ON FILE, "MVDBTOOLKIT.WCALLBODY.JSON" CALL @WOBJ.RTNE(OBJ,"GET","response.status",RESPONSE.STATUS,"",RERR) *PRINT 'RESPONSE.STATUS=':RESPONSE.STATUS:'  ': *IF RESPONSE.STATUS="200" THEN PRINT "OK" ELSE PRINT "FAIL" TEST.MSG=RESPONSE.STATUS IF RESPONSE.STATUS="200" THEN    TEST.STATUS=1 END ELSE    TEST.STATUS=0 END GOSUB end.test TEST="WCALL.BODY.RESULT" GOSUB start.test * The testing web site does not send raw body back very well * we will just look for what we expect CONVERT CHAR(254):CHAR(253):CHAR(252):CHAR(10):CHAR(13) TO '' IN RESPONSE POS=INDEX(RESPONSE,'"form"',1) IF POS THEN RESPONSE=RESPONSE[POS,9999] TEST.MSG=RESPONSE IF INDEX(RESPONSE,'"test',1) AND INDEX(RESPONSE,'"value',1) THEN     TEST.STATUS=1 END ELSE     TEST.STATUS=0 END GOSUB end.test STOP*GOSUB start.testRETURN*process.error: *IF RERR<1> THEN   TEST.STATUS=-1   TEST.MSG=RERR<1>ENDRETURN**start.test: *TEST.STATUS=0TEST.MSG="Success"PRINT "":TEST[1,15]"L(#15)":RETURN*end.test: *PRINT "  ":TEST.MSG[1,50]"L(#50)":PRINT " ":PRE=''; AFT=''BEGIN CASE   CASE TEST.STATUS=2; ERROR="Warning"; PRE=''; AFT=''   CASE TEST.STATUS; ERROR="Passed"   CASE 1; ERROR="Passed"; PRE=@(-13); AFT=@(-14)END CASEPRINT PRE:"[":PRINT ERROR"L(#7)":PRINT "]":AFTRETURN 000CDEMVDBTOOLKIT.WCALLBODY.JSON0c2{  "method": "POST",   "debug": "N",   "url": "https://httpbin.org/anything?field1=value1",   "insecure": "N",   "headers": {    },   "Content-Type": "application/json",   "body": "{  \"test\": \"value\"  }",   "response": {    "headers": {      "Date": "Thu, 30 Apr 2020 05:09:09 GMT",       "Content-Type": "application/json",       "Content-Length": "608",       "Connection": "keep-alive",       "Server": "gunicorn/19.9.0",       "Access-Control-Allow-Origin": "*",       "Access-Control-Allow-Credentials": "true"      },     "status": 200,     "http_type": "HTTP/1.1",     "statusmsg": "OK",     "log": [      "* About to connect() to httpbin.org port 443 (#0)",       "*   Trying 34.230.193.231... connected",       "* Connected to httpbin.org (34.230.193.231) port 443 (#0)",       "* Initializing NSS with certpath: sql:/etc/pki/nssdb",       "*   CAfile: /etc/pki/tls/certs/ca-bundle.crt",       "  CApath: none",       "* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",       "* Server certificate:",       "* 	subject: CN=httpbin.org",       "* 	start date: Jan 18 00:00:00 2020 GMT",       "* 	expire date: Feb 18 12:00:00 2021 GMT",       "* 	common name: httpbin.org",       "* 	issuer: CN=Amazon,OU=Server CA 1B,O=Amazon,C=US",       "> POST /anything?field1=value1 HTTP/1.1",       "",       "> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",       "",       "> Host: httpbin.org",       "",       "> Accept: */*",       "",       "> Content-Length: 26",       "",       "> Content-Type: application/x-www-form-urlencoded",       "",       "> ",       "",       "} [data not shown]",       "< HTTP/1.1 200 OK",       "",       "< Date: Thu, 30 Apr 2020 05:09:09 GMT",       "",       "< Content-Type: application/json",       "",       "< Content-Length: 608",       "",       "< Connection: keep-alive",       "",       "< Server: gunicorn/19.9.0",       "",       "< Access-Control-Allow-Origin: *",       "",       "< Access-Control-Allow-Credentials: true",       "",       "< ",       "",       "{ [data not shown]",       "* Connection #0 to host httpbin.org left intact",       "* Closing connection #0"      ],     "data": "{  \"args\": {    \"field1\": \"value1\"  },   \"data\": \"\",   \"files\": {},   \"form\": {    \"{\\r\\n  \\\"test\\\": \\\"value\\\"\\r\\n  }\\n\": \"\"  },   \"headers\": {    \"Accept\": \"*/*\",     \"Content-Length\": \"26\",     \"Content-Type\": \"application/x-www-form-urlencoded\",     \"Host\": \"httpbin.org\",     \"User-Agent\": \"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2\",     \"X-Amzn-Trace-Id\": \"Root=1-5eaa5d75-49623fd72c6a4d01cec7a532\"  },   \"json\": null,   \"method\": \"POST\",   \"origin\": \"98.173.13.82\",   \"url\": \"https://httpbin.org/anything?field1=value1\"}",     "curl_cmnd": "curl -s -m 45 -X POST -D \"/tmp/WCALL-1.headers\" -v --stderr \"/tmp/WCALL-1.stderr\" --data-binary \"@/tmp/WCALL-1.body\" \"https://httpbin.org/anything?field1=value1\""    }  }000EA0MVDBTOOLKIT.WCALL.JSON0c2{  "method": "POST",   "debug": "N",   "url": "https://httpbin.org/anything?field1=value1",   "insecure": "Y",   "headers": {    "X-TEST-HEADER": "headertest"    },   "formfields": [    {      "name": "field2",       "value": "VALUE2$"      },     {      "name": "field3",       "value": "<EXAMPLE HTML>"      }    ],   "response": {    "headers": {      "Date": "Thu, 30 Apr 2020 05:09:09 GMT",       "Content-Type": "application/json",       "Content-Length": "693",       "Connection": "keep-alive",       "Server": "gunicorn/19.9.0",       "Access-Control-Allow-Origin": "*",       "Access-Control-Allow-Credentials": "true"      },     "status": 200,     "http_type": "HTTP/1.1",     "statusmsg": "OK",     "log": [      "* About to connect() to httpbin.org port 443 (#0)",       "*   Trying 34.230.193.231... connected",       "* Connected to httpbin.org (34.230.193.231) port 443 (#0)",       "* Initializing NSS with certpath: sql:/etc/pki/nssdb",       "*   CAfile: /etc/pki/tls/certs/ca-bundle.crt",       "  CApath: none",       "* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",       "* Server certificate:",       "* 	subject: CN=httpbin.org",       "* 	start date: Jan 18 00:00:00 2020 GMT",       "* 	expire date: Feb 18 12:00:00 2021 GMT",       "* 	common name: httpbin.org",       "* 	issuer: CN=Amazon,OU=Server CA 1B,O=Amazon,C=US",       "> POST /anything?field1=value1 HTTP/1.1",       "",       "> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",       "",       "> Host: httpbin.org",       "",       "> Accept: */*",       "",       "> X-TEST-HEADER: headertest",       "",       "> Content-Length: 257",       "",       "> Expect: 100-continue",       "",       "> Content-Type: multipart/form-data; boundary=----------------------------9f61f37bacb1",       "",       "> ",       "",       "< HTTP/1.1 100 Continue",       "",       "} [data not shown]",       "< HTTP/1.1 200 OK",       "",       "< Date: Thu, 30 Apr 2020 05:09:09 GMT",       "",       "< Content-Type: application/json",       "",       "< Content-Length: 693",       "",       "< Connection: keep-alive",       "",       "< Server: gunicorn/19.9.0",       "",       "< Access-Control-Allow-Origin: *",       "",       "< Access-Control-Allow-Credentials: true",       "",       "< ",       "",       "{ [data not shown]",       "* Connection #0 to host httpbin.org left intact",       "* Closing connection #0"      ],     "data": "{  \"args\": {    \"field1\": \"value1\"  },   \"data\": \"\",   \"files\": {},   \"form\": {    \"field2\": \"VALUE2$\",     \"field3\": \"<EXAMPLE HTML>\"  },   \"headers\": {    \"Accept\": \"*/*\",     \"Content-Length\": \"257\",     \"Content-Type\": \"multipart/form-data; boundary=----------------------------9f61f37bacb1\",     \"Host\": \"httpbin.org\",     \"User-Agent\": \"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2\",     \"X-Amzn-Trace-Id\": \"Root=1-5eaa5d75-64172de2a2432626bf6a5f61\",     \"X-Test-Header\": \"headertest\"  },   \"json\": null,   \"method\": \"POST\",   \"origin\": \"98.173.13.82\",   \"url\": \"https://httpbin.org/anything?field1=value1\"}",     "curl_cmnd": "curl -s -m 45 -X POST -H \"X-TEST-HEADER: headertest\" -D \"/tmp/WCALL-1.headers\" -v --stderr \"/tmp/WCALL-1.stderr\" --form-string field2=\"VALUE2$\" --form-string field3=\"<EXAMPLE HTML>\" \"https://httpbin.org/anything?field1=value1\""    }  }00131FMVDBTOOLKIT.WFILEIO0c2SUBROUTINE MVDBTOOLKIT.WFILEIO(INOBJ)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 7th 2018* Description: WFILEIO MULTI PLATFORM WORKING WITH O/S FILES************************************************************************* INOBJ** { "ACTION":"READ,WRITE,DELETE",*   "PATH":"PATH TO THE FILE",*   "DATA":"DATA FOR A WRITE",*   "dosletter":"OPTIONAL DOS LETTER TO ADD TO PATH",*   "NEWLINE":"CR,LF,CRLF,DOS,UNIX",*   "PERMISSIONS":"TBD"*   "response": {*       "data":"responsedata",*       "status":1-ok, else no,*       "statusmsg":"statusmsg" *   }* }** need to know the existing platform*PLATFORM.DELIM="\"*PLATFORM.TYPE="WINDOWS"*PLATFORM.MV="D3"CALL MVDBTOOLKIT.WPLATFORM(POBJ)INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL @WOBJ.RTNE(POBJ,"GET","mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM.TYPE,"",RERR)FSTATUS=1FSTATUSMSG="OK"CALL @WOBJ.RTNE(INOBJ,"GET","action",FILEIO.ACTION,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","path",FILEIO.PATH,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","data",FILEIO.DATA,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","dosletter",FILEIO.DOSLETTER,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","newline",FILEIO.NEWLINE,"",RERR)CALL @WOBJ.RTNE(INOBJ,"GET","permissions",FILEIO.PERMISSIONS,"",RERR)*CALL @WOBJ.RTNE(OUTOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(INOBJ,"SET.OBJECT","response","{}","",RERR)FILEIO.ACTION=OCONV(FILEIO.ACTION,"MCU")FILEIO.NEWLINE=OCONV(FILEIO.NEWLINE,"MCU")IF FILEIO.ACTION = "" THEN    FSTATUS=0    FSTATUSMSG="No action defined"    GOTO end.of.runENDIF FILEIO.PATH = "" THEN    FSTATUS=0    FSTATUSMSG="No path defined"    GOTO end.of.runENDPARSED.FILEIO.PATH=""L=LEN(FILEIO.PATH)FOR X=1 TO L   C=FILEIO.PATH[X,1]   IF C=PLATFORM.DELIM THEN      PARSED.FILEIO.PATH:=@AM   END ELSE      PARSED.FILEIO.PATH:=C   ENDNEXT X*PARSED.FILEIO.PATH=EXCHANGE(FILEIO.PATH,PLATFORM.DELIM,@AM)PARSED.FILEIO.PATH=FILEIO.PATHCONVERT PLATFORM.DELIM TO @AM IN PARSED.FILEIO.PATHPARSED.FILEIO.PARTS=DCOUNT(PARSED.FILEIO.PATH,@AM)* JBASE DOES NOT APPEAR TO HONOR WINDOWS ENVIROMENT VARIABLES IN THE OPEN* THIS IS MAKING %USERPROFILE% NOT WORK** WE ARE GOING TO LOOP THRU THE THE PARTS AN EXPAND THEM OURSELVES** THIS HAS BEEN TESTED ON JBASE WINDOWS SO FAR.*FOR P=1 TO PARSED.FILEIO.PARTS    THIS.PART=PARSED.FILEIO.PATH<P>    IF THIS.PART[1,1]='%' OR THIS.PART[1,1]="$" THEN        CONVERT '%$' TO '' IN THIS.PART * 9/4/2019 PAP Modified this to use mvdbtoolkit.wgetenv  *       IF GETENV(THIS.PART,NEW.THIS.PART) THEN *           PARSED.FILEIO.PATH<P>=NEW.THIS.PART *       END         CALL MVDBTOOLKIT.WGETENV(THIS.PART,NEW.THIS.PART)         IF NEW.THIS.PART # "" THEN PARSED.FILEIO.PATH<P>=NEW.THIS.PART    ENDNEXT PPARSED.FILEIO.FILE.NAME=PARSED.FILEIO.PATH<PARSED.FILEIO.PARTS>FILEIO.JUST.PATH=DELETE(PARSED.FILEIO.PATH,PARSED.FILEIO.PARTS)*FILEIO.JUST.PATH=EXCHANGE(FILEIO.JUST.PATH,@AM,PLATFORM.DELIM)CONVERT @AM TO PLATFORM.DELIM IN FILEIO.JUST.PATHCALL @WOBJ.RTNE(INOBJ,"SET.OBJECT","work","{}","",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.parsed_fileio_file_name",PARSED.FILEIO.FILE.NAME,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.fileio_just_path",FILEIO.JUST.PATH,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.platform",PLATFORM.TYPE,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET","work.filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(INOBJ,"SET.OBJECT","response","{}","",RERR)* lets have a seperate routine for each platformBEGIN CASE    CASE FILEIO.ACTION="READ"    CASE FILEIO.ACTION="WRITE"    CASE FILEIO.ACTION="DELETE"    CASE 1        FSTATUS=0        FSTATUSMSG="Invalid action"        CALL @WOBJ.RTNE(INOBJ,"SET.NUMBER", "response.status", FSTATUS,"",RERR)        CALL @WOBJ.RTNE(INOBJ,"SET.STRING", "response.statusmsg", FSTATUSMSG, "", RERR)        GOTO end.of.runEND CASEBEGIN CASE    CASE PLATFORM.MV="D3"        FILEIO.RTNE="MVDBTOOLKIT.WFILEIO.D3"        CALL MVDBTOOLKIT.WFILEIO.D3(INOBJ)    CASE PLATFORM.MV="JBASE"        FILEIO.RTNE="MVDBTOOLKIT.W.FILEIO.JBASE"        CALL MVDBTOOLKIT.WFILEIO.JBASE(INOBJ)    CASE PLATFORM.MV="UNIVERSE"        FILEIO.RTNE="MVDBTOOLKIT.WFILEIO.UNIVERSE"        CALL MVDBTOOLKIT.WFILEIO.UNIVERSE(INOBJ)    CASE PLATFORM.MV="UNIDATA"        FILEIO.RTNE="MVDBTOOLKIT.WFILEIO.UNIDATA"        CALL MVDBTOOLKIT.WFILEIO.UNIDATA(INOBJ)    CASE PLATFORM.MV="QM"        * QM SUPPORTS OPENPATH        CALL MVDBTOOLKIT.WFILEIO.QM(INOBJ)   CASE 1        DEBUG        FSTATUS=0        FSTATUSMSG="Invalid Platform ":PLATFORM.MV        GOTO end.of.runEND CASEend.of.run: *RETURN0002CDMVDBTOOLKIT.TEST.JSON0c2{  "args": {    "field1": "value1"  },   "data": "",   "files": {},   "form": {    "field2": "VALUE2$",     "field3": "<EXAMPLE HTML>"  },   "headers": {    "Accept": "*/*",     "Content-Length": "257",     "Content-Type": "multipart/form-data; boundary=----------------------------9f61f37bacb1",     "Host": "httpbin.org",     "User-Agent": "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",     "X-Amzn-Trace-Id": "Root=1-5eaa5d75-64172de2a2432626bf6a5f61",     "X-Test-Header": "headertest"  },   "json": null,   "method": "POST",   "origin": "98.173.13.82",   "url": "https://httpbin.org/anything?field1=value1"}00027CMVDBTOOLKIT.TESTBODY.JSON0c2{  "args": {    "field1": "value1"  },   "data": "",   "files": {},   "form": {    "{\r\n  \"test\": \"value\"\r\n  }\n": ""  },   "headers": {    "Accept": "*/*",     "Content-Length": "26",     "Content-Type": "application/x-www-form-urlencoded",     "Host": "httpbin.org",     "User-Agent": "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",     "X-Amzn-Trace-Id": "Root=1-5eaa5d75-49623fd72c6a4d01cec7a532"  },   "json": null,   "method": "POST",   "origin": "98.173.13.82",   "url": "https://httpbin.org/anything?field1=value1"}00005EMVDBTOOLKIT.SWAP.DEFAULT0c2SUBROUTINE MVDBTOOLKIT.SWAP.DEFAULT(V,F,T)V=SWAP(V,F,T)RETURN00033CMVDBTOOLKIT.WGETENV0c2SUBROUTINE MVDBTOOLKIT.WGETENV(VAR.NAME,RETURN.VALUE)INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL MVDBTOOLKIT.WPLATFORM(POBJ)CALL @WOBJ.RTNE(POBJ,"GET","mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM.TYPE,"",RERR)* THIS FUNCTION IS A CROSS PLATFORM WGET VAR FUNCTIONBEGIN CASE    CASE PLATFORM.MV="D3" AND PLATFORM.TYPE="LINUX"        FILEIO.RTNE="MVDBTOOLKIT.WGETENV.D3"        CALL MVDBTOOLKIT.WGETENV.D3(VAR.NAME,RETURN.VALUE)    CASE PLATFORM.MV="JBASE"        FILEIO.RTNE="MVDBTOOLKIT.WGETENV.JBASE"        CALL MVDBTOOLKIT.WGETENV.JBASE(VAR.NAME,RETURN.VALUE)    CASE 1        CALL MVDBTOOLKIT.WGETENV.GENERIC(VAR.NAME,RETURN.VALUE,PLATFORM.MV,PLATFORM.TYPE)END CASEend.of.run: *RETURN000156MVDBTOOLKIT.WEXECUTE.INCLUDE0c2* COMMON FOR EXECUTE *COMMON /MVDBWEX/ EXECUTE.COMMANDCOMMON /MVDBWEX/ EXECUTE.DIRECTORYCOMMON /MVDBWEX/ EXECUTE.DOCAPTURECOMMON /MVDBWEX/ EXECUTE.RETURNINGCOMMON /MVDBWEX/ EXECUTE.RTNDATACOMMON /MVDBWEX/ EXECUTE.PASSLISTCOMMON /MVDBWEX/ MV.TYPECOMMON /MVDBWEX/ PLATFORMCOMMON /MVDBWEX/ EXECUTE.DEBUG000498MVDBTOOLKIT.WEXECUTE.D30c2SUBROUTINE MVDBTOOLKIT.WEXECUTE.D3(EOBJ)INCLUDE MVDBTOOLKIT.WEXECUTE.INCLUDE************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 12, 2018* Description: Execute library JBASE VERSION***********************************************************************INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJE.RESULTS=""E.RETURNING=""E.RTNDATA=""BEGIN CASE    CASE EXECUTE.DOCAPTURE="N"        EXECUTE '!':EXECUTE.COMMAND     CASE 1        EXECUTE '!':EXECUTE.COMMAND CAPTURING E.RESULTEND CASEIF EXECUTE.DEBUG="1"OR OCONV(EXECUTE.DEBUG[1,1],'MCU')='Y' THEN   WRITE.DEBUG=1   OPEN 'RESULT.FILE' TO RFILE ELSE WRITE.DEBUG=0   IF WRITE.DEBUG THEN       WRITE EXECUTE.COMMAND ON RFILE, 'WEXECUTE'   ENDENDCONVERT CHAR(0) TO '' IN E.RESULTCONVERT CHAR(255) TO '' IN E.RESULTCALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)IF MV.TYPE='UNIDATA' THEN E.RESULT=E.RESULT[1,LEN(E.RESULT)-1]CALL @WOBJ.RTNE(EOBJ,"SET.STRING","result.result",E.RESULT,"",RERR)RETURN0004E5MVDBTOOLKIT.WGETENV.GENERIC0c2SUBROUTINE MVDBTOOLKIT.WGETENV.GENERIC(VAR.NAME, RETURN.VALUE, MVTYPE, PLATFORM)RETURN.VALUE=""* WE ARE GOING TO JUST SHELL OUT AND GET THE ENVIRONMENT VARIABLE BASED* ON THE PLATFORMBEGIN CASE    CASE MVTYPE="UNIVERSE" AND PLATFORM="LINUX"        CMND='sh -c "echo $':VAR.NAME:'"'    CASE MVTYPE="UNIVERSE" AND PLATFORM="WINDOWS"        CMND='dos /c "echo %':VAR.NAME:'%"'    CASE (MVTYPE="JBASE" OR MVTYPE="D3") AND PLATFORM="LINUX"        CMND='!echo $':VAR.NAME    CASE MVTYPE="JBASE" AND PLATFORM="WINDOWS"         CMND='echo %':VAR.NAME:'%'    CASE MVTYPE="D3" AND PLATFORM="WINDOWS"        CMND='!echo %':VAR.NAME:'%'    CASE MVTYPE='UNIDATA' AND PLATFORM="WINDOWS"        CMND='!echo %':VAR.NAME:'%'    CASE MVTYPE='UNIDATA' AND PLATFORM="LINUX"        CMND='!echo $':VAR.NAME    CASE MVTYPE='QM' AND PLATFORM="WINDOWS"        * QM DOES HAVE SYSTEM(1025) TO GET ENVIRONMENT STUFF        * STICKING WITH THIS FOR NOW        CMND='!echo %':VAR.NAME:'%'    CASE MVTYPE='QM' AND PLATFORM="LINUX"        CMND='!echo $':VAR.NAME    CASE 1        CMND=''END CASEEXECUTE CMND CAPTURING RETURN.VALUEIF MVTYPE='UNIDATA' THEN    RETURN.VALUE=RETURN.VALUE[1,LEN(RETURN.VALUE)-1]ENDRETURN000322MVDBTOOLKIT.EXPAND.PATH0c2SUBROUTINE MVDBTOOLKIT.EXPAND.PATH(PASSED.PATH)INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL MVDBTOOLKIT.WPLATFORM(POBJ)CALL @WOBJ.RTNE(POBJ,"GET","mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM.TYPE,"",RERR)PARSED.PATH=PASSED.PATHCONVERT PLATFORM.DELIM TO @AM IN PARSED.PATHPARSED.PARTS=DCOUNT(PARSED.PATH,@AM)FOR P=1 TO PARSED.PARTS    THIS.PART=PARSED.PATH<P>    IF THIS.PART[1,1]='%' OR THIS.PART[1,1]="$" THEN        CONVERT '%$' TO '' IN THIS.PART         CALL MVDBTOOLKIT.WGETENV(THIS.PART,NEW.THIS.PART)         IF NEW.THIS.PART # "" THEN PARSED.PATH<P>=NEW.THIS.PART    ENDNEXT PCONVERT @AM TO PLATFORM.DELIM IN PARSED.PATHPASSED.PATH=PARSED.PATHRETURN00002CMVDBTOOLKIT.TEST.INCLUDE0c2CMND = @SENTENCE0001E1MVDBTOOLKIT.SWAP0c2SUBROUTINE MVDBTOOLKIT.SWAP(V,F,T)* MVDBTOOLKIT.SWAPINCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ* PLATFORM INDEPENDENT SWAP COMMANDCALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)BEGIN CASE    CASE MV.TYPE='UNIVERSE'        CALL MVDBTOOLKIT.SWAP.UNIVERSE(V,F,T)    CASE MV.TYPE='UNIDATA'        CALL MVDBTOOLKIT.SWAP.UNIDATA(V,F,T)    CASE 1        CALL MVDBTOOLKIT.SWAP.DEFAULT(V,F,T)END CASERETURN000DC9MVDBTOOLKIT.WFILEIO.UNIDATA0c2SUBROUTINE MVDBTOOLKIT.WFILEIO.UNIDATA(FOBJ)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 7th 2018* Description: WFILEIO MULTI PLATFORM WORKING WITH O/S FILES************************************************************************* INOBJ** { "ACTION":"READ,WRTE,DELETE",*   "PATH":"PATH TO THE FILE",*   "DATA":"DATA FOR A WRITE",*   "dosletter":"OPTIONAL DOS LETTER TO ADD TO PATH",*   "NEWLINE":"CR,LF,CRLF,DOS,UNIX",*   "PERMISSIONS":"TBD",*   "debug":"Y or N",*   "response": {*       "data":"responsedata",*       "status":1-ok, else no,*       "statusmsg":"statusmsg" *   }* }** need to know the existing platform*PLATFORM.DELIM="\"*PLATFORM.TYPE="WINDOWS"*PLATFORM.MV="D3"INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL @WOBJ.RTNE(FOBJ,"GET","debug",DO.DEBUG,"",RERR)IF OCONV(DO.DEBUG[1,1],"MCU") = "Y" OR DO.DEBUG="1" THEN DO.DEBUG=1 ELSE DO.DEBUG=""CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MV,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.DELIM,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)FSTATUS=1FSTATUSMSG="OK"CALL @WOBJ.RTNE(FOBJ,"GET","action",FILEIO.ACTION,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","path",FILEIO.PATH,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","data",FILEIO.DATA,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","dosletter",FILEIO.DOSLETTER,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","newline",FILEIO.NEWLINE,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","permissions",FILEIO.PERMISSIONS,"",RERR)*CALL @WOBJ.RTNE(OUTOBJ,"FROMSTRING","","{}","",RERR)FILEIO.ACTION=OCONV(FILEIO.ACTION,"MCU")FILEIO.NEWLINE=OCONV(FILEIO.NEWLINE,"MCU")CALL @WOBJ.RTNE(FOBJ,"GET","work.parsed_fileio_file_name",PARSED.FILEIO.FILE.NAME,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.fileio_just_path",FILEIO.JUST.PATH,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.platform",PLATFORM.TYPE,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.mvtype",PLATFORM.MVTYPE,"",RERR)CALL @WOBJ.RTNE(FOBJ,"GET","work.filedelim",PLATFORM.FILEDELIM,"",RERR)* Lets create a q-pointerUSER.NO=FIELD(OCONV('','U50BB'),' ',1)OPEN "VOC" TO FILE.VOC ELSE    STOP "COULD NOT OPEN VOC"ENDMD.ID='MVDBTOOLKIT-QPOINTER-':USER.NOMD.ENTRY='DIR'MD.ENTRY<2>=FILEIO.JUST.PATHWRITE MD.ENTRY ON FILE.VOC, MD.IDOPEN MD.ID TO FI ELSE   DELETE FILE.VOC, MD.ID    FSTATUS=0    FSTATUSMSG="Could not open file ":FILEIO.JUST.PATH    GOTO end.of.runENDBEGIN CASE    CASE FILEIO.ACTION="READ"        GOSUB fileio.read    CASE FILEIO.ACTION="WRITE"        GOSUB fileio.write    CASE FILEIO.ACTION="DELETE"        GOSUB fileio.delete    CASE 1        FSTATUS=0        FSTATUSMSG="Invalid action"        GOTO end.of.runEND CASECLOSE FIDELETE FILE.VOC, MD.IDend.of.run: *CALL @WOBJ.RTNE(FOBJ,"SET.NUMBER", "response.status", FSTATUS,"",RERR)CALL @WOBJ.RTNE(FOBJ,"SET.STRING", "response.statusmsg", FSTATUSMSG, "", RERR)RETURNfileio.read: *REC=""READ REC FROM FI, PARSED.FILEIO.FILE.NAME ELSE    FSTATUS=0    FSTATUSMSG="Could not find ":PARSED.FILEIO.FILE.NAMEENDCALL @WOBJ.RTNE(FOBJ,"SET.STRING","response.data",REC,"",RERR)IF 0 THEN    PRINT "PATH   :":FILEIO.JUST.PATH    PRINT "ID     :":PARSED.FILEIO.FILE.NAME    PRINT "REC    :":RECENDRETURNfileio.write: *WRITE FILEIO.DATA ON FI, PARSED.FILEIO.FILE.NAMEFSTATUS=1RETURNfileio.delete: *DELETE FI, PARSED.FILEIO.FILE.NAMEFSTATUS=1RETURN000778MVDBTOOLKIT.WPLATFORM0c2      SUBROUTINE MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)      **********************************************************************      *      * Copyright (C) 2017 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: June 12, 2018      * Description: WPLATFORM OBJ      *      **********************************************************************      *      *      * PLATFORMOBJ      *      * {      *   "platform":" WINDOWS OR LINUX",      *   "mvtype"  :" JBASE, D3, UNIDATA, UNIVERSE, OPENQM",      *   "tmpdir"  :"tmp dir"      * }      * nEW lINE      INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ            USE.DICT=1      OPEN "DICT","MVDBTOOLKIT.BP" TO DICT.MVDBTOOLKIT.BP ELSE USE.DICT=0      IF USE.DICT THEN         READ PLATFORMOBJ.JSON FROM DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON" ELSE PLATFORMOBJ.JSON=""      END      OPEN "MD" TO FI.MD ELSE         OPEN "VOC" TO FI.MD ELSE RETURN      END      * 02/06/2020 - Changed md item name to MV.PLATFORM.JSON to make it not tied to this package            IF PLATFORMOBJ.JSON="" THEN         CRT "No MV.PLATFORM.JSON IN MD!!!"         STOP      END      CONVERT CHAR(254) TO '' IN PLATFORMOBJ.JSON      CALL @WOBJ.RTNE(PLATFORMOBJ,"FROMSTRING","",PLATFORMOBJ.JSON,"",RERR)      * 9/2/2019 PAP - We now figure out filedelim vs passing it in original config filedelim      CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)      IF PLATFORM="WINDOWS" THEN DELIM = "\" ELSE DELIM = "/"      CALL @WOBJ.RTNE(PLATFORMOBJ,"SET","filedelim",DELIM,"",RERR)      CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","tmpdir",TMP.DIR,"",RERR)      CALL @WOBJ.RTNE(PLATFORMOBJ,"TOSTRING","",OUT.JSON,"PRETTIFY",RERR)      WRITE OUT.JSON ON DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON"      RETURN0006D0MVDBTOOLKIT.ENCODE0c2SUBROUTINE MVDBTOOLKIT.ENCODE(IN.STR,OUT.STR)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2017* Description: encode json string*************************************************************************** THIS PROGRAM WILL CONVERT ALL BAD CHARACTERS TO AN ESCAPED CHARACTER***EQU CR TO CHAR(13), LF TO CHAR(10), TB TO CHAR(9), BS TO CHAR(8), FF TO CHAR(12)NL = CR:LFPRETTIFYCR=""**OPEN 'RESULT.FILE' TO RFILE ELSE STOP* WE NEED TO ENCODE* " = \"   (34)* \ = \\    (92)* / = \/* CHAR(7) = \b* CHAR(13) = \r* char(10) = \n* char(12) = \f* char(9)  = \tOUT.STR=''L=LEN(IN.STR)CONVERT @AM TO LF IN IN.STR; * LETS SWITCH 254 TO LF BE DEFAULTFOR X=1 TO L    C=IN.STR[X,1]    SEQ.C=SEQ(C)    ENCODE=0    *IF SEQ.C < 32 THEN ENCODE=1; * BELOW SPACE    *IF SEQ.C > 32 AND SEQ.C < 48 THEN ENCODE=1; * LETS ENCODE ALL OF THIS !@$%^&*()    IF SEQ.C=34 THEN ENCODE=1    IF SEQ.C=92 THEN ENCODE=1    * IF SEQ.C=47 THEN ENCODE=1    *IF SEQ.C > 126 THEN ENCODE = 1; * LETS ENCODE ALL THE HIGH ENTRIES    *IF SEQ.C >= 91 AND SEQ.C <= 96 THEN ENCODE=1    IF ENCODE THEN        BEGIN CASE            CASE SEQ.C=7; OUT.STR='\b'            CASE C='\'; OUT.STR:='\\'                *CASE C='/'; OUT.STR:='\/'            CASE C='"'; OUT.STR:='\"'            CASE SEQ.C=10                OUT.STR:='\n'                IF PRETTIFYCR THEN OUT.STR:=NL            CASE SEQ.C=13; OUT.STR:='\r'            CASE SEQ.C=12; OUT.STR:='\f'            CASE 1; OUT.STR:='\u00':OCONV(C,'MX0C')        END CASE    END ELSE        OUT.STR=OUT.STR:C    ENDNEXT XRETURNEND002A1DMVDBTOOLKIT.WCALL0c2SUBROUTINE MVDBTOOLKIT.WCALL(PASSED.WOBJ)************************************************************************ Copyright (C) 2018 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 15, 2018* Description: WCALL Library************************************************************************ @WOBJ.RTNE* { "method":"GET,PUT,POST,ETC",*    "url":"URL TO CALL",*    "headers": { "HEADERNAME":"VALUE", "HEADERNAME":"VALUE" },*    "body":"BODY",*    "formfields": [*         {*            "name":"field name",*            "value":"field value",*            "fieldtype":"blank or file" for now*         }*     ],*    "datafields": [*         {*            "name":"field name",*            "value":"field value",*            "fieldtype":"blank or file" for now*         }*     ],*    "insecure":"Yes,Y,YES - Sets the -k on curl",*    "timeout": ## (default is 45),*    "options":"options to add to curl command",*    "debug":"Y or N",*    "response": {*        "result":"RESULT",*        "status":"STATUS",*        "statusmsg":"STATUS MSG",*        "http_type": "http type",*        "curl_cmnd":"Actual curl command created",*         "error": "error",*         "log": [ "log output line1", "log output line 2" ],*        "headers": { "headername":"header value","headername2":"headervalue" }*    }*  }INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJCALL MVDBTOOLKIT.WPLATFORM(POBJ)CALL @WOBJ.RTNE(POBJ,"GET","mvtype",MV.TYPE,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","platform",PLATFORM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","filedelim",FILE.DELIM,"",RERR)CALL @WOBJ.RTNE(POBJ,"GET","curllocation",CURLLOCATION,"",RERR); * change #19IF MV.TYPE="" THEN   CALL @WOBJ.RTNE(POBJ,"GET","error",THIS.ERROR,"",RERR)   PRINT "NO MV TYPE: ":THIS.ERROR   RETURNENDITEMS.TO.DELETE=""; * PATH TO EACH FILE TO DELETECALL @WOBJ.RTNE(POBJ,"GET","tmpdir",TMP.DIR,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","debug",DO.DEBUG,"",RERR)IF OCONV(DO.DEBUG[1,1],"MCU")="Y" OR DO.DEBUG="1" THEN DO.DEBUG=1 ELSE DO.DEBUG=""CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","method",WEB.METHOD,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","url",WEB.URL,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","body",WEB.BODY,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","timeout",WEB.TIMEOUT,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"KEYS","headers",WEB.HEADERS,"",RERR)IF NOT(WEB.TIMEOUT) THEN WEB.TIMEOUT=45CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","insecure",WEB.INSECURE,"",RERR)IF OCONV(WEB.INSECURE[1,1],'MCU') = "Y" THEN WEB.INSECURE=1 ELSE WEB.INSECURE=0CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.OBJECT","response","{}","",RERR)IF TMP.DIR="" THEN BEGIN CASE    CASE PLATFORM="LINUX"       TMP.DIR="/tmp"    CASE INDEX(PLATFORM,"WINDOWS",1) AND MV.TYPE="JBASE"       TMP.DIR="%HOME%"    CASE INDEX(PLATFORM,"WINDOWS",1)       TMP.DIR="%USERPROFILE%\AppData\Local\Temp"    CASE 1       TMP.DIR="/tmp" END CASEENDCALL MVDBTOOLKIT.EXPAND.PATH(TMP.DIR)* 4/6/2020 - Change #19.  IF CURLLOCATION # "" THEN   CMND=CURLLOCATIONEND ELSE   CMND="curl"ENDCMND:=" -s"CMND:=' -m ':WEB.TIMEOUTCMND:=' -X ':WEB.METHODCALL @WOBJ.RTNE(PASSED.WOBJ,"GET","options",WEB.OPTIONS,"",RERR)IF WEB.OPTIONS # "" THEN   CMND:=' ':WEB.OPTIONSENDWEB.NUM.HEADERS=DCOUNT(WEB.HEADERS,@SVM)FOR H=1 TO WEB.NUM.HEADERS   HEADER.NAME=WEB.HEADERS<1,1,H>   CALL @WOBJ.RTNE(PASSED.WOBJ,"GET","headers.":HEADER.NAME,HEADER.VALUE,"",RERR)   CALL MVDBTOOLKIT.ENCODE(HEADER.VALUE,ENCODED.HEADER.VALUE)   CMND:=' -H "':HEADER.NAME:': ':ENCODED.HEADER.VALUE:'"'NEXT HUSER.NO=FIELD(OCONV('','U50BB'),' ',1)SESSION.ID="WCALL-":USER.NOTMP.DIR:=FILE.DELIM* add in dumping of headersCMND:=\ -D "\:TMP.DIR:SESSION.ID:\.headers"\ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:'.headers'* write out stderrCMND:=\ -v --stderr "\:TMP.DIR:SESSION.ID:\.stderr"\ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:\.stderr\CALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)SAVE.FOBJ=FOBJIF WEB.BODY # "" THEN   *CALL @WOBJ.RTNE(EOBJ,"SET.ARRAY","data","[]","",RERR)   *CALL @WOBJ.RTNE(EOBJ,"SET.STRING","data[0]",WEB.BODY,"",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","data",WEB.BODY,"",RERR)   CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:'.body',"",RERR)   ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:'.body'   CALL MVDBTOOLKIT.WFILEIO(FOBJ)   CMND:=' --data-binary "@':TMP.DIR:SESSION.ID:'.body"'   *CMND:='  --data-binary @-'END* form fields *CALL @WOBJ.RTNE(PASSED.WOBJ,"LENGTH","formfields",NUM.FORMFIELDS,"",RERR)FOR X=1 TO NUM.FORMFIELDS P="formfields[":X-1:"]" CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.name',FIELD.NAME,"",RERR) CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.value',FIELD.VALUE,"",RERR) CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.fieldtype',FIELD.TYPE,"",RERR) IF TRIM(FIELD.NAME) # "" THEN    * < > @ ALL MEAN SPECIAL THINGS WITH A -F.  If that exists in the file you need    * to use --form-string    BEGIN CASE       CASE INDEX(FIELD.VALUE,CHAR(13),1) OR INDEX(FIELD.VALUE,CHAR(10),1)         * WE NEED TO WRITE THIS OUT!         TMP.CMND="-F "            CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)            CALL @WOBJ.RTNE(FOBJ,"SET","data",FIELD.VALUE,"",RERR)            CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:'.field':X-1,"",RERR)            ITEMS.TO.DELETE<-1>=TMP.DIR:SESSION.ID:'.field':X-1            FIELD.VALUE="@":TMP.DIR:SESSION.ID:'.field':X-1            CALL MVDBTOOLKIT.WFILEIO(FOBJ)         * NEED TO WRITE THE CONTENT OUT TO A TMP FILE *       CASE INDEX(FIELD.VALUE,'!',1) OR INDEX(FIELD.VALUE,'<',1) OR INDEX(FIELD.VALUE,'>',1) OR INDEX(FIELD.VALUE,'@',1) OR INDEX(FIELD.VALUE,'$',1) AND FIELD.TYPE # "file"         TMP.CMND="--form-string "       CASE 1         TMP.CMND="-F "    END CASE    TMP.CMND:=FIELD.NAME:'="'    TMP.CMND:=FIELD.VALUE:'"'    CMND:=' ':TMP.CMND ENDNEXT X* form fields *CALL @WOBJ.RTNE(PASSED.WOBJ,"LENGTH","datafields",NUM.FORMFIELDS,"",RERR)FOR X=1 TO NUM.FORMFIELDS      P="datafields[":X-1:"]"      CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.name',FIELD.NAME,"",RERR)      CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.value',FIELD.VALUE,"",RERR)      CALL @WOBJ.RTNE(PASSED.WOBJ,"GET",P:'.fieldtype',FIELD.TYPE,"",RERR)      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,'@','%40')      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,'$','%24')      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,'/','%2F')      CALL MVDBTOOLKIT.SWAP(FIELD.VALUE,':','%3A')      IF TRIM(FIELD.NAME) # "" THEN         TMP.CMND="-d "         TMP.CMND:=FIELD.NAME:'="'         TMP.CMND:=FIELD.VALUE:'"'         CMND:=' ':TMP.CMND      ENDNEXT X* NOW ADD THE URLCALL MVDBTOOLKIT.SWAP(WEB.URL,' ','%20')CALL MVDBTOOLKIT.SWAP(WEB.URL,'@','%40')CALL MVDBTOOLKIT.SWAP(WEB.URL,'$','%24')*WEB.URL=SWAP(WEB.URL,'/','%2F')CMND:=' "':WEB.URL:'"'* CALL WEXECUTECALL @WOBJ.RTNE(EOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ.RTNE(EOBJ,"SET","command",CMND,"",RERR)CALL @WOBJ.RTNE(EOBJ,"SET","debug",DO.DEBUG,"",RERR); * LAY IN DEBUGGING PARAMIF WEB.BODY # "" THEN   * CALL @WOBJ.RTNE(EOBJ,"SET","data[0]",WEB.BODY,"",RERR)ENDCALL MVDBTOOLKIT.WEXECUTE(EOBJ); * DO THE CALL* READ IN THE HEADERSCALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:".headers","",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.HEADERS,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.headers",RESPONSE.HEADERS,"",RERR)* Lets break the headers down into an arrayCALL @WOBJ.RTNE(PASSED.WOBJ,"SET.OBJECT","response.headers","{}","",RERR)NUM.HEADERS=DCOUNT(RESPONSE.HEADERS,@AM)HTTP.TYPE=''; HTTP.STATUS.CODE=''; HTTP.MSG=''FOR H=1 TO NUM.HEADERS   HEADER.LINE=RESPONSE.HEADERS<H>   IF HEADER.LINE[1,4]="HTTP" AND NOT(INDEX(HEADER.LINE,":",1)) THEN      HTTP.TYPE=FIELD(HEADER.LINE,' ',1)      HTTP.STATUS.CODE=FIELD(HEADER.LINE,' ',2)      HTTP.STATUS.MSG=FIELD(HEADER.LINE,' ',3,99)   END ELSE      HEADER.NAME=TRIM(FIELD(HEADER.LINE,':',1))      CONVERT CHAR(13):CHAR(10) TO '' IN HEADER.NAME; * CATCHES BLANK LINES      HEADER.VALUE=FIELD(HEADER.LINE,':',2,999999)      IF  HEADER.VALUE[1,1]=' ' THEN HEADER.VALUE=HEADER.VALUE[2,LEN(HEADER.VALUE)]; * messy left trim      CONVERT CHAR(13):CHAR(10) TO '' IN HEADER.VALUE; * STRIP AN NEW LINES      IF HEADER.NAME # "" THEN         * NOW PUT THE HEADER INTO OUR ARRAY         CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.headers.":HEADER.NAME,HEADER.VALUE,"",RERR)      END   ENDNEXT HCALL @WOBJ.RTNE(PASSED.WOBJ,"SET.NUMBER","response.status",HTTP.STATUS.CODE,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.http_type",HTTP.TYPE,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.statusmsg",HTTP.STATUS.MSG,"",RERR)* READ IN STDERR (LOG) AND POST AS A ARRAYFOBJ=SAVE.FOBJCALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.DIR:SESSION.ID:'.stderr',"",RERR)CALL MVDBTOOLKIT.WFILEIO(FOBJ)CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.STDERR,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.ARRAY","response.log","[]","",RERR)CONVERT CHAR(13) TO @AM IN RESPONSE.STDERRCONVERT CHAR(10) TO "" IN RESPONSE.STDERRNUM.LINES=DCOUNT(RESPONSE.STDERR,@AM)* 4/2/2020 pap  - Look for bad curl statement!!GOOD.CURL=1CURL.BAD.MSG=""FOR L=1 TO NUM.LINES    LINE=RESPONSE.STDERR<L>    BEGIN CASE      CASE INDEX(LINE,'curl:',1)         * LETS CAPTURE THE FIRST ONE         IF CURL.BAD.MSG = "" THEN CURL.BAD.MSG=TRIM(FIELD(LINE,':',2,999))         GOOD.CURL=0      CASE INDEX(LINE,'warning:',1)    END CASE    CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.log[-1]",LINE,"",RERR)NEXT LIF NOT(GOOD.CURL) THEN   CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.NUMBER","response.status","400","",RERR)   CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.statusmsg",CURL.BAD.MSG,"",RERR)END*CALL @WOBJ.RTNE(EOBJ,"TOSTRING","",TEST.JSON,"PRETTIFY",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","result.result",EXECUTE.RESULT,"",RERR)CALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.data",EXECUTE.RESULT,"",RERR)end.of.call: ** XDELETE REQUIRED FILESNUM.ITEMS.TO.DELETE=DCOUNT(ITEMS.TO.DELETE,@AM)FOR I=1 TO NUM.ITEMS.TO.DELETE      ITEM.TO.DELETE=ITEMS.TO.DELETE<I>      FOBJ=SAVE.FOBJ      CALL @WOBJ.RTNE(FOBJ,"SET","action","DELETE","",RERR)      CALL @WOBJ.RTNE(FOBJ,"SET","path",ITEM.TO.DELETE,"",RERR)      IF DO.DEBUG THEN         CRT "Normally trying to delete: ":ITEM.TO.DELETE      END ELSE         CALL MVDBTOOLKIT.WFILEIO(FOBJ)      ENDNEXT ICALL @WOBJ.RTNE(PASSED.WOBJ,"SET.STRING","response.curl_cmnd",CMND,"",RERR)RETURN0004BFMVDBTOOLKIT.WEXECUTE.UNIDATA0c2SUBROUTINE MVDBTOOLKIT.WEXECUTE.UNIDATA(EOBJ)INCLUDE MVDBTOOLKIT.WEXECUTE.INCLUDE************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 12, 2018* Description: Execute library UNIDATA VERSION - CLONED FROM D3 VERSION***********************************************************************INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJE.RESULTS=""E.RETURNING=""E.RTNDATA=""BEGIN CASE    CASE EXECUTE.DOCAPTURE="N"        EXECUTE '!':EXECUTE.COMMAND     CASE 1        EXECUTE '!':EXECUTE.COMMAND CAPTURING E.RESULTEND CASEIF EXECUTE.DEBUG="1" OR OCONV(EXECUTE.DEBUG[1,1],'MCU')='Y' THEN   WRITE.DEBUG=1   OPEN 'RESULT.FILE' TO RFILE ELSE WRITE.DEBUG=0   IF WRITE.DEBUG THEN       WRITE EXECUTE.COMMAND ON RFILE, 'WEXECUTE'   ENDENDCONVERT CHAR(0) TO '' IN E.RESULTCONVERT CHAR(255) TO '' IN E.RESULTCALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)IF MV.TYPE='UNIDATA' THEN E.RESULT=E.RESULT[1,LEN(E.RESULT)-1]CALL @WOBJ.RTNE(EOBJ,"SET.STRING","result.result",E.RESULT,"",RERR)RETURN00018CMVDBTOOLKIT.WOBJ.CHOOSE.WOBJ0c2* Code to determine default wobj library to use* This needs to change for MVDBTOOLKIT build, defaults to WOBJWOBJ.RTNE="WOBJ"NO.MD.FILE=0OPEN "MD" TO FILE.MD ELSE    OPEN "VOC" TO FILE.MD ELSE NO.MD.FILE=1ENDIF NOT(NO.MD.FILE) THEN    READ WOBJ.CONF FROM FILE.MD, "WOBJ.CONF" ELSE WOBJ.CONF=""    IF WOBJ.CONF<3> # "" THEN WOBJ.RTNE=WOBJ.CONF<3>END0001BCMVDBTOOLKIT.WGETENV.D30c2SUBROUTINE MVDBTOOLKIT.WGETENV.D3(VAR.NAME, RETURN.VALUE)RETURN.VALUE=""* Gets and displays the PATH environment variablecfunction unix.builtinpointer=(char*)%getenv(VAR.NAME)if pointer = 0 then   RETURN.VALUE=""end else* We got a C pointer the path variable. Copy it* into pick variable   char path[1024]   %strcpy(path, (char*)pointer)   path = field(path,char(0),1)   RETURN.VALUE=pathendRETURN000167MVDBTOOLKIT.SWAP.UNIDATA0c2SUBROUTINE MVDBTOOLKIT.SWAP.UNIDATA(V,F,T)IF F=T THEN RETURNIF F='' THEN RETURN* Let's do this manually since Universe Exchange does NOT workCNTR=0LOOP   CNTR+=1   POS=INDEX(V,F,1)UNTIL NOT(POS) OR CNTR > 100000 DO   PRE.STRING=V[1,POS-1]   AFT.STRING=V[POS+LEN(F),LEN(V)]   V=PRE.STRING:T:AFT.STRINGREPEATRETURN003E55MVDBTOOLKIT.CONFIG0c2      PRINT @(-1):"MVDBTOOLKIT.CONFIG"      PRINT      COMMON /MVMKCOM/ MVMAKE.SUB.COMMON.INFO      MVMAKE.SUB.COMMON.INFO=""; * DO NOT USE FOR THIS VERSION      IF MVMAKE.SUB.COMMON.INFO="" OR MVMAKE.SUB.COMMON.INFO = "0" THEN         *    CRT "MVDBTOOLKIT.CONFIG MUST BE CALLED FROM MVMAKE"         *    STOP      END      INCLUDE MVDBTOOLKIT.TEST.INCLUDE      INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ      OPEN "DICT","MVDBTOOLKIT.BP" TO DICT.MVDBTOOLKIT.BP ELSE STOP      * 4/29/2020 - pap - This entire excercise it to get MV.PLATFORM.JSON populated the      *                   first time.  MVMAKE already asked the questions, if the file did      *                   not exist those answers will be passed to use via the common.      *                   The reason mvmake cannot fix this is the file to the dictionary      *                   is created later.  If MVmake tries to write it out it has to      *                   read it in properly due to items this process populates, such as      *                   TMPDIR.  If the package does not properly install then      *                   WOBJ may not be available.  Better to do it all here.      *      *                   Therefore we manually read the file, update PLATFORM and MVTYPE      *                   and write it back.  We then call WPLATFORM and move on as normal      READ PLATFORM.JSON FROM DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON" ELSE PLATFORM.JSON="{}"      IF TRIM(PLATFORM.JSON) = "" THEN PLATFORM.JSON="{}"      CALL @WOBJ.RTNE(PLATFORM.OBJ,"FROMSTRING","",PLATFORM.JSON,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",MVTYPE,"",RERR)      IF MVMAKE.SUB.COMMON.INFO<2> # "" THEN PLATFORM=MVMAKE.SUB.COMMON.INFO<2>      IF MVMAKE.SUB.COMMON.INFO<3> # "" THEN MVTYPE=MVMAKE.SUB.COMMON.INFO<3>      IF PLATFORM="" OR MVTYPE="" THEN         ** LETS FIGURE OUT THE PLATFORM **         EXECUTE 'jdiag' CAPTURING RESULT         RESULT=OCONV(RESULT,"MCU")         IF INDEX(RESULT,'JBASE',1) THEN            MVTYPE="JBASE"            OS.POS=INDEX(RESULT,"OS RELEASE",1)            OS.TYPE=RESULT[OS.POS,9999]            OS.TYPE=OS.TYPE<1,1,1>            OS.TYPE=OCONV(OS.TYPE,"MCU")            IF INDEX(OS.TYPE,"WINDOWS",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE 'WHICH' CAPTURING RESULT         RESULT=OCONV(RESULT,"MCU")         IF INDEX(RESULT,"D3",1) THEN            MVTYPE="D3"            IF INDEX(RESULT,"WINDOWS",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE 'CT ERRMSG 335 (N' CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"MVBASE",1) THEN            MVTYPE="MVBASE"; * NOT SUPPORTED            GOTO end.of.mvtype         END         EXECUTE "VERSION" CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"UNIDATA",1) THEN            MVTYPE="UNIDATA"            EXECUTE '!SET' CAPTURING OS.TYPE            OS.TYPE=OCONV(OS.TYPE,'MCU')            IF INDEX(OS.TYPE,"WINDIR",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE "CT VOC QM.ACCOUNTS" CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"QMSYS",1) THEN            MVTYPE="QM"            EXECUTE '!SET' CAPTURING OS.TYPE            OS.TYPE=OCONV(OS.TYPE,'MCU')            IF INDEX(OS.TYPE,"WINDIR",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         END         EXECUTE 'CT VOC UVPROMPT' CAPTURING RESULT         IF INDEX(OCONV(RESULT,"MCU"),"1 V",1) THEN            MVTYPE="UNIVERSE"            EXECUTE 'sh -c "pwd"' CAPTURING RESULT            IF INDEX(OCONV(RESULT,"MCU"),"NOT AVAILABLE",1) THEN               PLATFORM="WINDOWS"            END ELSE               PLATFORM="LINUX"            END            GOTO end.of.mvtype         ENDend.of.mvtype: *         IF PLATFORM="" THEN            PRINT "NO PLATFORM FOUND"; STOP            PRINT "ENTER PLATFORM (LINUX OR WINDOWS)[":PLATFORM:"]: ":; INPUT TMP.ANS            IF TMP.ANS # "" THEN PLATFORM=TMP.ANS            PLATFORM=OCONV(PLATFORM,"MCU")            BEGIN CASE               CASE PLATFORM="WINDOWS"                  D3.PREFIX="dos"                  PLATFORM.DELIM="\"               CASE PLATFORM="LINUX"                  D3.PREFIX="unix"                  PLATFORM.DELIM="/"               CASE 1                  CRT "Invalid Platform ":PLATFORM; STOP            END CASE         END         IF MVTYPE="" THEN            PRINT "NO MVTYPE FOUND"; STOP            PRINT "ENTER MVTYPE (JBASE, QM, D3, UNIVERSE, UNIDATA)[":MVTYPE:"] ":; INPUT TMP.ANS            IF TMP.ANS # "" THEN MVTYPE = TMP.ANS            MVTYPE=OCONV(MVTYPE,"MCU")            BEGIN CASE               CASE MVTYPE="JBASE"               CASE MVTYPE="QM"               CASE MVTYPE="D3"               CASE MVTYPE="UNIVERSE"               CASE MVTYPE="UNIDATA"               CASE 1                  CRT "Invalid MVTYPE"; STOP            END CASE         END      END      MVMAKE.SUB.COMMON.INFO<1>='REBUILD'      MVMAKE.SUB.COMMON.INFO<2>=PLATFORM      MVMAKE.SUB.COMMON.INFO<3>=MVTYPE      PRINT "Platform:      ":PLATFORM      PRINT "MV type :      ":MVTYPE      PRINT      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","mvtype",MVTYPE,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","platform",MVMAKE.SUB.COMMON.INFO<2>,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","mvtype",MVMAKE.SUB.COMMON.INFO<3>,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"TOSTRING","",PLATFORM.JSON,"PRETTIFY",RERR)      CONVERT CHAR(13) TO @AM IN PLATFORM.JSON      CONVERT CHAR(10) TO '' IN PLATFORM.JSON      WRITE PLATFORM.JSON ON DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON"      CALL MVDBTOOLKIT.WPLATFORM(PLATFORM.OBJ)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","platform",PLATFORM,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","mvtype",MVTYPE,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","filedelim",FILEDELIM,"",RERR)      IF PLATFORM = "" THEN         CRT "No platform configured!!!"; STOP      END      IF MVTYPE = "" THEN         CRT "No MVType configured!!!"; STOP      END      * GET ENVIRONMENT      * Let get our current directory      TEST="pwd"; GOSUB start.test      IF OCONV(PLATFORM,"MCU") = "WINDOWS" THEN         CMND='echo %CD%'      END ELSE         CMND='pwd'      END      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      CONVERT CHAR(13):CHAR(10) TO '' IN CMND.RESULT      TEST.STATUS=1      TEST.MSG=CMND.RESULT      GOSUB end.test      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.PATH,"",RERR)      IF TMP.PATH="" THEN         IF MVMAKE.SUB.COMMON.INFO<5>="" THEN MVMAKE.SUB.COMMON.INFO<5>="mvdbtoolkit"         BEGIN CASE            CASE MVTYPE="D3" AND PLATFORM="LINUX"               * DANG D3 HAS IT'S OWN DANG FILE SYSTEM, LETS JUST CREATE A TMP DIR AND MOVE               TMP.PATH="/tmp"            CASE MVTYPE="D3" AND PLATFORM="LINUX"               TMP.DATH="c:\tmp"               EXECUTE '!mkdir c:\tmp'            CASE OCONV(MVMAKE.SUB.COMMON.INFO<5>,"MCU") = "MVDBTOOLKIT"               * WE HAVE RELATIVE POSITIONING               TMP.PATH=CMND.RESULT:FILEDELIM:"TMP"               MVDBTOOLKIT.LOCATION=CMND.RESULT            CASE 1               TMP.PATH=MVMAKE.SUB.COMMON.INFO<5>:FILEDELIM:"TMP"               MVDBTOOLKIT.LOCATION=MVMAKE.SUB.COMMON.INFO<5>         END CASE      END      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","tmpdir",TMP.PATH,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","mvdbtoolkitlocation",MVDBTOOLKIT.LOCATION,"",RERR)      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","curllocation",CURLLOCATION,"",RERR)      TEST='tmpdir'; GOSUB start.test      CALL @WOBJ.RTNE(PLATFORM.OBJ,"GET","tmpdir",TMP.DIR,"",RERR)      TEST.MSG=TMP.DIR      TEST.STATUS=1      IF TMP.DIR="" THEN TEST.STATUS=0      GOSUB end.test      TEST='MVDBTOOLKIT.SWAP'      GOSUB start.test      S='TEST LINE TEST LINE'      ORIG.STRING=S      CALL MVDBTOOLKIT.SWAP(S,"ES","XX")      IF S = "TXXT LINE TXXT LINE" THEN TEST.STATUS=1 ELSE TEST.STATUS=0      TEST.MSG=S      GOSUB end.test      * Test 1 Getenv      TEST="getenv"      GOSUB start.test      CALL MVDBTOOLKIT.WGETENV("PATH",PATH)      IF PATH # "" THEN         TEST.MSG=PATH[1,60]         TEST.STATUS=1      END ELSE         TEST.MSG=""         TEST.STATUS=0      END      GOSUB end.test      * Test WEXECUTE      TEST="wexecute"; GOSUB start.test      CMND='echo MVDBTOOLKIT.TEST'      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      IF INDEX(CMND.RESULT,"MVDBTOOLKIT.TEST",1) THEN         TEST.MSG=CMND.RESULT         TEST.STATUS=1      END ELSE         TEST.MSG=CMND.RESULT         TEST.STATUS=0      END      CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG      GOSUB end.test      * Test WFILEIO      TEST="WFILEIO-WRITE"      USER.NO=FIELD(OCONV('','U50BB'),' ',1)      GOSUB start.test      CALL @WOBJ.RTNE(FOBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(FOBJ,"SET","action","WRITE","",RERR)      TMP.FILE.NAME=TMP.DIR:FILEDELIM:'TMP-':USER.NO:'.txt'      TEST.MSG=TMP.FILE.NAME      CALL @WOBJ.RTNE(FOBJ,"SET","path",TMP.FILE.NAME,"",RERR)      SAVE.FOBJ=FOBJ      TMP.DATA=TIMEDATE()      CALL @WOBJ.RTNE(FOBJ,"SET","data",TMP.DATA,"",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUS.MSG,"",RERR)      TEST.STATUS=RESPONSE.STATUS      IF NOT(RESPONSE.STATUS) THEN TEST.MSG:=RESPONSE.STATUS.MSG      GOSUB end.test      IF NOT(TEST.STATUS) THEN STOP "Test Failed, no reason to continue"      TEST='WFILEIO-READ'      GOSUB start.test      * NOW READ IT BACK IN      CALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)      TEST.MSG="(":TMP.DATA:')=(':RESPONSE.DATA:")"      TEST.STATUS=1      IF TMP.DATA # RESPONSE.DATA THEN TEST.STATUS=0      GOSUB end.test      TEST="WFILEIO-DELETE"; GOSUB start.test      FOBJ=SAVE.FOBJ      CALL @WOBJ.RTNE(FOBJ,"SET","action","DELETE","",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      FOBJ=SAVE.FOBJ      CALL @WOBJ.RTNE(FOBJ,"SET","action","READ","",RERR)      CALL MVDBTOOLKIT.WFILEIO(FOBJ)      RESPONSE.DATA=""      CALL @WOBJ.RTNE(FOBJ,"GET","response.data",RESPONSE.DATA,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","response.status",RESPONSE.STATUS,"",RERR)      CALL @WOBJ.RTNE(FOBJ,"GET","response.statusmsg",RESPONSE.STATUSMSG,"",RERR)      TEST.STATUS=1      TEST.MSG=TMP.FILE.NAME:' ':RESPONSE.STATUS      IF RESPONSE.STATUS=0 AND RESPONSE.DATA="" THEN NULL ELSE TEST.STATUS=0      GOSUB end.test      * Let get our current directory      TEST="pwd"; GOSUB start.test      IF OCONV(PLATFORM,"MCU") = "WINDOWS" THEN         CMND='echo %CD%'      END ELSE         CMND='pwd'      END      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      IF 1 THEN         TEST.MSG=CMND.RESULT         TEST.STATUS=1      END ELSE         TEST.MSG=CMND.RESULT         TEST.STATUS=0      END      CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG      GOSUB end.test      MVDBTOOLKIT.LOCATION = CMND.RESULT      * Lets verify we have curl!!!      IF CURLLOCATION="" THEN CURLLOCATION="curl"      TEST="default curl"; GOSUB start.test      CMND=CURLLOCATION:' -V'      CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)      CALL MVDBTOOLKIT.WEXECUTE(COBJ)      CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)      BEGIN CASE         CASE INDEX(CMND.RESULT,"libcurl",1) AND 1            TEST.MSG=CMND.RESULT            TEST.STATUS=1         CASE OCONV(PLATFORM,"MCU")="WINDOWS"            TEST.MSG=CMND.RESULT            CURLLOCATION=""            TEST.STATUS=2         CASE 1            TEST.MSG=0      END CASE      CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG      GOSUB end.test      * THIS IS SLOPPY CODE      IF CURLLOCATION="" AND PLATFORM="WINDOWS" THEN         * Start looking for curl         IF TEST.STATUS=2 THEN            CURLLOCATION="C:\PROGRA~2\Zumasys\MVDASH~1\bin\curl.exe"            TEST="curl via mvconnect"; GOSUB start.test            CMND=CURLLOCATION:' -V'            CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)            CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)            CALL MVDBTOOLKIT.WEXECUTE(COBJ)            CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)            BEGIN CASE               CASE INDEX(CMND.RESULT,"libcurl",1) AND 1                  TEST.MSG=CMND.RESULT                  TEST.STATUS=1               CASE OCONV(PLATFORM,"MCU")="WINDOWS"                  TEST.MSG=CMND.RESULT                  TEST.STATUS=2               CASE 1                  TEST.MSG=CMND.RESULT                  TEST.STATUS=0            END CASE            CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG            GOSUB end.test         END         IF TEST.STATUS=2 THEN            CURLLOCATION="c:\progra~1\git\mingw64\bin\curl.exe"            TEST="curl via git"; GOSUB start.test            CMND=CURLLOCATION:' -V'            CALL @WOBJ.RTNE(COBJ,"FROMSTRING","","{}","",RERR)            CALL @WOBJ.RTNE(COBJ,"SET","command",CMND,"",RERR)            CALL MVDBTOOLKIT.WEXECUTE(COBJ)            CALL @WOBJ.RTNE(COBJ,"GET","result.result",CMND.RESULT,"",RERR)            BEGIN CASE               CASE INDEX(CMND.RESULT,"libcurl",1) AND 0                  TEST.MSG=CMND.RESULT                  TEST.STATUS=1               CASE 1                  TEST.STATUS=0                  TEST.MSG=CMND            END CASE            CONVERT CHAR(13):CHAR(10) TO '' IN TEST.MSG            GOSUB end.test         END         IF CURLLOCATION # "" THEN            CALL @WOBJ.RTNE(PLATFORM.OBJ,"SET","curllocation",CURLLOCATION,"",RERR)         END      END      CALL @WOBJ.RTNE(PLATFORM.OBJ,"TOSTRING","",PLATFORM.JSON,"PRETTIFY",RERR)      CONVERT CHAR(13) TO @AM IN PLATFORM.JSON      CONVERT CHAR(10) TO '' IN PLATFORM.JSON      WRITE PLATFORM.JSON ON DICT.MVDBTOOLKIT.BP, "MV.PLATFORM.JSON"      STOP      *      RETURN      *process.error: *      IF RERR<1> THEN         TEST.STATUS=-1         TEST.MSG=RERR<1>      END      RETURN      *      *start.test: *      TEST.STATUS=0      TEST.MSG="Success"      PRINT "":TEST[1,15]"L(#15)":      RETURN      *end.test: *      PRINT "  ":TEST.MSG[1,50]"L(#50)":      PRINT " ":      PRE=''; AFT=''      BEGIN CASE         CASE TEST.STATUS=2; ERROR="Warning"; PRE=''; AFT=''         CASE TEST.STATUS; ERROR="Passed"         CASE 1; ERROR="Failed"; PRE=@(-13); AFT=@(-14)      END CASE      PRINT PRE:"[":      PRINT ERROR"L(#7)":      PRINT "]":AFT      RETURN000CA7MVDBTOOLKIT.WEXECUTE0c2SUBROUTINE MVDBTOOLKIT.WEXECUTE(EOBJ)INCLUDE MVDBTOOLKIT.WEXECUTE.INCLUDE************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: June 12, 2018* Description: Execute library************************************************************************* EOBJ* { "command":"COMMAND TO USE",*    "directory":"OPTIONAL DIRECTORY TO RUN IN",*    "debug":"YES OR NO",*    "docapture":"YES OR NO, DEFAULT YES",*    "returning":"YES OR NO, DEFAULT YES",*    "rtndata":"YES OR NO, DEFAULT NO",*    "passlist":"ACTUAL PASSLIST"*    "data": ["ARRAY OF DATA STATEMENTS"],*    "result: {w*                "result":"RESULT IF CAPTURED",*                "rtndata":"RESULT OF RTNDATA",*                "returning":"RESULT OF RETURNING",*                "debug":"DEBUG INFORMATION IF TURNED ON"*    }*    }INCLUDE MVDBTOOLKIT.WOBJ.CHOOSE.WOBJ* With native objects we cannot do this.  We will need* a platform specific way of recognizing this.* Perhaps changes itself to WOBJ?IF ''="NEW" THEN    * CREATE A NEW OBJECT AND RETURN IT    EJSON=\{ "command":"",\    EJSON:=\ "directory":"",\    EJSON:=\ "debug":"NO",\    EJSON:=\ "returning":"YES",\    EJSON:=\ "rtndata":"YES",\    EJSON:=\ "passlist":"",\    EJSON:=\ "data: []"\    EJSON:=\}\    CALL @WOBJ.RTNE(EOBJ,"FROMSTRING","",EJSON,"",RERR)    RETURNENDCALL @WOBJ.RTNE(EOBJ,"GET","command"      ,EXECUTE.COMMAND        ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","directory"    ,EXECUTE.DIRECTORY      ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","docapture"    ,EXECUTE.DOCAPTURE      ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","returning"    ,EXECUTE.RETURNING      ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","rtndata"      ,EXECUTE.RTNDATA        ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","passlist"     ,EXECUTE.PASSLIST       ,"",RERR)CALL @WOBJ.RTNE(EOBJ,"GET","debug"        ,EXECUTE.DEBUG          ,"",RERR)IF EXECUTE.DEBUG = "" THEN    CALL @WOBJ.RTNE(EOBJ,"GET","DEBUG",EXECUTE.DEBUG,"",RERR)ENDIF OCONV(EXECUTE.DEBUG[1,1],"MCU") = "Y" OR EXECUTE.DEBUG="1" THEN EXECUTE.DEBUG=1 ELSE EXECUTE.DEBUG=0IF EXECUTE.DEBUG THEN    *CRT "EXECUTE.COMMAND: ":EXECUTE.COMMAND    *CRT "DIRECTORY      : ":EXECUTE.DIRECTORY    *CRT "OCAPTURE       : ":EXECUTE.OCAPTURE    *CRT "RETURNING      : ":EXECUTE.RETURNINGENDCALL @WOBJ.RTNE(EOBJ,"TOSTRING","",TEST.JSON,"",RERR)* ERROR HANDLING TODOCALL @WOBJ.RTNE(EOBJ,"SET.OBJECT","result","{}","",RERR)CALL MVDBTOOLKIT.WPLATFORM(PLATFORMOBJ)CALL @WOBJ.RTNE(PLATFORMOBJ,"GET","mvtype",MV.TYPE,"",RERR)BEGIN CASE   CASE MV.TYPE='D3'       CALL MVDBTOOLKIT.WEXECUTE.D3(EOBJ)   CASE MV.TYPE='UNIDATA'       CALL MVDBTOOLKIT.WEXECUTE.UNIDATA(EOBJ)   CASE MV.TYPE="QM"       CALL MVDBTOOLKIT.WEXECUTE.QM(EOBJ)   CASE MV.TYPE="JBASE"       CALL MVDBTOOLKIT.WEXECUTE.JBASE(EOBJ)   CASE MV.TYPE="UNIVERSE"       CALL MVDBTOOLKIT.WEXECUTE.UNIVERSE(EOBJ)   CASE 1        CALL @WOBJ.RTNE(EOBJ,"SET","result.error","Invalid mvplatform=":MV.TYPE,"",RERR)END CASE**EXECUTE CHAR(255):'k':CMND CAPTURING RESULT*CONVERT CHAR(0) TO '' IN RESULT*CONVERT CHAR(255) TO '' IN RESULTRETURN003F7CMVSENDGRID.BP0c0000BAEMVSENDGRID.TEST0c2* PROGRAM MVSENDGRID.TEST*PRINT "Enter email to send test to: ":; INPUT TEST.EMAIL.TOPRINT "Enter full path to file to send (leave blank to not send a file): ":; INPUT FILE.TO.SENDIF FILE.TO.SEND # "" THEN   PRINT "Type of file: 1-pdf, 2=text: ":; INPUT ANS   BEGIN CASE     CASE ANS="1"; FILE.TYPE="application/pdf"     CASE ANS="2"; FILE.TYPE="text/plain"     CASE 1       PRINT "Invalid choice"       STOP   END CASE   PRINT "Actual file name (no path): ":; INPUT FILE.NAME   IF FILE.NAME="" THEN STOPENDWOBJ="WOBJ"OBJ="MAILSEND_V2"CALL MVSENDGRID.API(OBJ)*CALL @WOBJ(OBJ,"TOSTRING","",JSON,"PRETTIFY",1)CALL @WOBJ(OBJ,"SET","params.to[0].email",TEST.EMAIL.TO,"",RERR)CALL @WOBJ(OBJ,"SET","params.to[0].name","Test Email","",RERR)* SINCE CC IS A OPTION, THERE IS NOT A PRE-POPULATED OBJECT, WE MUST ADD ONECALL @WOBJ(OBJ,"SET.OBJECT","params.bcc[0]","{}","",RERR)CALL @WOBJ(OBJ,"SET","params.bcc[0].email",TEST.EMAIL.TO,"",RERR)CALL @WOBJ(OBJ,"SET","params.bcc[0].name","Test Email","",RERR)CALL @WOBJ(OBJ,"SET","params.from","noreply@zumasys.com","",RERR)CALL @WOBJ(OBJ,"SET","params.subject","Sample email ":TIMEDATE(),"",RERR)NL=CHAR(13):CHAR(10)TEXT="Line 1"TEXT:=NL:"Line 2"TEXT:=NL:"Line 3"CALL @WOBJ(OBJ,"SET","params.text",TEXT,"",RERR)IF FILE.TO.SEND # "" THENCALL @WOBJ(OBJ,"SET.ARRAY","params.files","[]","",RERR)  CALL @WOBJ(SOBJ,"FROMSTRING","","{}","",RERR) CALL @WOBJ(SOBJ,"SET","sourcefile",FILE.TO.SEND,"",RERR) CALL @WOBJ(SOBJ,"SET","filename",FILE.NAME,"",RERR) CALL @WOBJ(SOBJ,"SET","type",FILE.TYPE,"",RERR) CALL @WOBJ(SOBJ,"TOSTRING","",SJSON,"",RERR) CALL @WOBJ(OBJ,"SET.OBJECT","params.files[-1]",SJSON,"",RERR)  END  CALL @WOBJ(OBJ,"TOSTRING","",JSON,"PRETTIFY",RERR)PRINT "Press return to see the jSON option payload before calling MVSENDGRID.API ":; INPUT WAIT PRINT JSONPRINTPRINT "Press return to call MVSENDGRID.  If you request a file that does not exist the routine does not catch that and your call will fail. ":; INPUT ANSCALL MVSENDGRID.API(OBJ)CALL @WOBJ(OBJ,"GET","result.status",STATUSCODE,"",RERR)PRINT "Result status=":STATUSCODECALL @WOBJ(OBJ,"GET","result.statusmsg",STATUSMSG,"",RERR)PRINT "Result msg   =":STATUSMSGIF STATUSCODE = "ok" OR STATUSCODE[1,1] = "2" THEN NULL ELSE    PRINT "Failed: ":STATUSMSGENDPRINT "Press return to see result OBJECT from call: ":; INPUT WAITCALL @WOBJ(OBJ,"TOSTRING","",JSON,"PRETTIFY",RERR)PRINT JSONPRINT "Press return to see curl log: ":; INPUT ANS* 04/2/2020 - Better to send curl object as json vs getting into issues with @am,@vm,@svm!!CALL @WOBJ(OBJ,"GET","result.wcalldebug",COBJ.JSON,"",RERR)CALL @WOBJ(COBJ,"FROMSTRING","",COBJ.JSON,"",RERR)CALL @WOBJ(COBJ,"LENGTH","response.log",CURL.LOG.LENGTH,"",RERR)FOR X=1 TO CURL.LOG.LENGTH    TAG="response.log[":X-1:"]"    CALL @WOBJ(COBJ,"GET",TAG,CLINE,"",RERR)    PRINT CLINENEXT XPRINT "PRESS RETURN TO CONTINUE: ":; INPUT OK.TO.CONTINUE0033B1MVSENDGRID.API0c2      SUBROUTINE MVSENDGRID.API(OBJ)      **********************************************************************      *      * Copyright (C) 2018 Zumasys, Inc., All Rights Reserved      *      * Written by: Patrick Payne, Zumasys      * Date: 4/2/2019      * Description: SENDGRID wrapper      **********************************************************************      *      * Purpose of this program is to front end the sendgrid library of functions      *      * It will utilize the object model concept and try to wrap all sendgrid      * functions into this one library      *      * Items to do      *      * Add File option. (COMPLETED)      * qc tests to validate fields sent (OUTSTANDING)      * Config to get user name/password/etc (COMPLETED)      * Return Message/Status (COMPLETED)      * REMOVE ALL DEBUG STATEMENTS (COMPLETED)      *      * OBJ      * { "api":"mailsend_v2",      *    "params": {      *       "to": [      *         {      *           "email":"email address",      *           "name":"Nice name"      *         }      *       ],      *       "cc": [      *         {      *           "email":"email address",      *           "name":"Nice name"      *         }      *       ],      *       "bcc": [      *         {      *           "email":"email address",      *           "name":"Nice name"      *         }      *       ],      *       "debug":"Y or N",      *       "replyto":"address",      *       "from":"From email address",      *       "fromname":"From name",      *       "subject":"Subject",      *       "text":"Plain text of your email",      *       "html":"Html version of your email",      *       "files": [      *           {      *              "sourcefile":"path to file",      *              "filename":"file name to present file as",      *              "type":"type of file, application/pdf for example"      *           }      *       ]      *    },      *   "result": {      *      "status":"error or ok",      *      "statusmsg:"status msg"      *    }      *      *  }      *      * Starting with mailsend_v2 - We are using this version because it allows      * attachments without having to base64 and include them into the json payload      * v2 uses curl and a normal form-data post to get attachments.      *      * curl https://api.sendgrid.com/api/mail.send.json \      *-F to=recipient@domain.com -F toname=test -F subject="Example Subject" \      *-F text="testing text body" --form-string html="<strong>testing html body</strong>" \      *-F from=test@yourdomain.com -F api_user=your_sendgrid_username -F api_key=your_sendgrid_password \      *-F files\[attachment.gz\]=@f.php.gz      *      *      * This intial part will initialize a object for a user.      *      WOBJ="WOBJ"      FIELD.TYPE=""      INIT.FUNCTION=OCONV(OBJ<1,1,1>,"MCU")      BEGIN CASE         CASE INIT.FUNCTION="MAILSEND_V2"            GOSUB mailsendv2.init            RETURN      END CASE      CALL @WOBJ(OBJ,"GET","api",API,"",RERR)      CALL @WOBJ(OBJ,"GET","debug",DO.DEBUG,"",RERR)      IF OCONV(DO.DEBUG[1,1],"MCU") = "Y" OR DO.DEBUG="1" THEN DO.DEBUG=1 ELSE DO.DEBUG=0      CALL @WOBJ(OBJ,"SET.OBJECT","result","{}","",RERR)      API=OCONV(API,'MCU')      APISTATUS="ok"      APISTATUSMSG=""      OPEN "DICT","MVSENDGRID.BP" TO DICT.MVSENDGRID.BP ELSE         APISTATUS="error"         APISTATUSMSG="Could not open DICT MVSENDGRID.BP"         GOTO end.of.routine      END      READ CONFIG FROM DICT.MVSENDGRID.BP, "CONFIG.JSON" ELSE         APISTATUS="error"         APISTATUSMSG="NO CONFIG.JSON IN DICT MVSENDGRID.BP"         GOTO end.of.routine      END      CALL @WOBJ(CONFIGOBJ,"FROMSTRING","",CONFIG,"",RERR)      BEGIN CASE         CASE API="MAILSEND_V2"            GOSUB mailsendv2         CASE 1            APISTATUS="error"            APISTATUSMSG="Invalid api request (":API:")"      END CASE      * lets do a larger check for a failed call         CALL @WOBJ(COBJ,"GET","response.status",STATUSCODE,"",RERR)         CALL @WOBJ(COBJ,"GET","response.statusmsg",STATUSMSG,"",RERR)         IF STATUSCODE[1,1] # "2" THEN            APISTATUS=STATUSCODE            APISTATUSMSG=STATUSMSG         END         * LETS PACKAGE THE ENTIRE CURL RESPONSE FOR DEBUGGING PURPOSES.         CALL @WOBJ(COBJ,"TOSTRING","",COBJ.JSON,"",RERR); * SAFER TO PULL JSON         CALL @WOBJ(OBJ,"SET","result.wcalldebug",COBJ.JSON,"",RERR)end.of.routine: *      CALL @WOBJ(OBJ,"SET","result.status",APISTATUS,"",RERR)      CALL @WOBJ(OBJ,"SET","result.statusmsg",APISTATUSMSG,"",RERR)      RETURN      STOPmailsendv2.init: * Initialize a email v2 object      OBJ=""      CALL @WOBJ(OBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(OBJ,"SET","api","mailsend_v2","",RERR)      CALL @WOBJ(OBJ,"SET.OBJECT","params","{}","",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.to",'[{"email":"","name"}]',"",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.cc",'[]',"",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.bcc",'[]',"",RERR)      CALL @WOBJ(OBJ,"SET.ARRAY","params.files",'[]',"",RERR)      RETURNmailsendv2: * Send an email      * V2 USES USER NAME AND PASSWORD      CALL @WOBJ(CONFIGOBJ,"GET","username",SENDGRID.USERNAME,"",RERR)      CALL @WOBJ(CONFIGOBJ,"GET","password",SENDGRID.PASSWORD,"",RERR)      IF SENDGRID.USERNAME="" THEN         APISTATUS="error"         APISTATUSMSG="No username defined in CONFIG.JSON"         RETURN      END      IF SENDGRID.PASSWORD="" THEN         APISTATUS="error"         AISTATUSMSG="No password defined in CONFIG.JSON"         RETURN      END      CALL @WOBJ(OBJ,"LENGTH","params.to",NUMBER.TOO,"",RERR)      IF NOT(NUMBER.TOO) THEN         APISTATUS="error"         APISTATUS="Must supply array of to"         RETURN      END      TOO.LABEL="to"; TOO.NAMES.LABEL="toname"      IF NUMBER.TOO > 1 THEN TOO.LABEL:='[]'; TOO.NAMES.LABEL:='[]'      TOO=''; TOO.NAMES=''      CALL @WOBJ(COBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(COBJ,"SET","method","POST","",RERR)      CALL @WOBJ(COBJ,"SET","url","https://api.sendgrid.com/api/mail.send.json","",RERR)      CALL @WOBJ(COBJ,"SET","insecure","Y","",RERR)      CALL @WOBJ(COBJ,"SET.OBJECT","headers","{}","",RERR)      CALL @WOBJ(COBJ,"SET.ARRAY","formfields","[]","",RERR)      FIELD.NAME="api_user"; FIELD.VALUE=SENDGRID.USERNAME; GOSUB set.field      FIELD.NAME="api_key"; FIELD.VALUE=SENDGRID.PASSWORD; GOSUB set.field      FOR X=1 TO NUMBER.TOO         P="params.to[":X-1:"]"         CALL @WOBJ(OBJ,"GET",P:".email",THIS.TO,"",RERR)         CALL @WOBJ(OBJ,"GET",P:".name",THIS.NAME,"",RERR)         IF INDEX(THIS.TO,'@',1) THEN            TOO<-1>=THIS.TO            TOO.NAMES<-1>=THIS.NAME         END      NEXT X      CONVERT CHAR(254) TO '&' IN TOO      CONVERT CHAR(254) TO '&' IN TOO.NAMES      CALL @WOBJ(SOBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(SOBJ,"SET","name",TOO.LABEL,"",RERR)      CALL @WOBJ(SOBJ,"SET","value",TOO,"",RERR)      CALL @WOBJ(SOBJ,"TOSTRING","",SJSON,"",RERR)      CALL @WOBJ(COBJ,"SET.OBJECT","formfields[-1]",SJSON,"",RERR)      FIELD.NAME=TOO.NAMES.LABEL; FIELD.VALUE=TOO.NAMES; GOSUB set.field      * DO CC            CALL @WOBJ(OBJ,"LENGTH","params.cc",NUMBER.CC,"",RERR)      IF NUMBER.CC THEN               CC=''; CC.NAMES=''         FOR X=1 TO NUMBER.CC            P="params.cc[":X-1:"]"            CALL @WOBJ(OBJ,"GET",P:".email",THIS.CC,"",RERR)            CALL @WOBJ(OBJ,"GET",P:".name",THIS.NAME,"",RERR)            IF INDEX(THIS.CC,'@',1) THEN               CC<-1>=THIS.CC               CC.NAMES<-1>=THIS.NAME            END                     NEXT X            CONVERT CHAR(254) TO '&' IN CC         CONVERT CHAR(254) TO '&' IN CC.NAMES          CC.LABEL="cc"; CC.NAMES.LABEL="ccname"         IF NUMBER.CC > 1 THEN CC.LABEL:='[]'; CC.NAMES.LABEL:='[]'         FIELD.NAME=CC.LABEL; FIELD.VALUE=CC; GOSUB set.field         FIELD.NAME=CC.NAMES.LABEL; VALUE=CC.NAMES; GOSUB set.field       END      * DO BCC            CALL @WOBJ(OBJ,"LENGTH","params.bcc",NUMBER.BCC,"",RERR)      IF NUMBER.BCC THEN               BCC=''; BCC.NAMES=''         FOR X=1 TO NUMBER.BCC            P="params.bcc[":X-1:"]"            CALL @WOBJ(OBJ,"GET",P:".email",THIS.BCC,"",RERR)            CALL @WOBJ(OBJ,"GET",P:".name",THIS.NAME,"",RERR)            IF INDEX(THIS.BCC,'@',1) THEN               BCC<-1>=THIS.BCC               BCC.NAMES<-1>=THIS.NAME            END                     NEXT X            CONVERT CHAR(254) TO '&' IN BCC         CONVERT CHAR(254) TO '&' IN BCC.NAMES          BCC.LABEL="bcc"; BCC.NAMES.LABEL="bccname"         IF NUMBER.BCC > 1 THEN BCC.LABEL:='[]'; BCC.NAMES.LABEL:='[]'         FIELD.NAME=BCC.LABEL; FIELD.VALUE=BCC; GOSUB set.field         FIELD.NAME=BCC.NAMES.LABEL; VALUE=BCC.NAMES; GOSUB set.field       END          CALL @WOBJ(OBJ,"GET","params.from",FROMEMAIL,"",RERR)      IF FROMEMAIL="" THEN         APISTATUS="error"         APISTATUSMSG="Must supply from"         RETURN      END      FIELD.NAME="from"; FIELD.VALUE=FROMEMAIL; GOSUB set.field      ** GET BODY **      CALL @WOBJ(OBJ,"GET","params.text",TEXT.BODY,"",RERR)      CALL @WOBJ(OBJ,"GET","params.html",HTML.BODY,"",RERR)      IF HTML.BODY="" AND TEXT.BODY="" THEN         APISTATUS="error"         APISTATUSMSG="Must supply either a text or html message"         RETURN      END      * If our text.body has new lines in it we MUST write it out      * to a file and then pass it as a file handle!!!      *       *IF INDEX(TEXT.BODY,CHAR(13),1) OR INDEX(TEXT.BODY,CHAR(10),1) THEN      * 4/2/2020 - This fix is moving to wcall      IF 0 THEN         CALL @WOBJ(FOBJ,"FROMSTRING","","{}","",RERR)         CALL @WOBJ(FOBJ,"SET","action","WRITE","",RERR)         TMP.DIR="/tmp"; * This needs to be fixed to be dynamic         TEXT.FILE.NAME=TMP.DIR:'/':@USER.NO:"_body.txt"         CALL @WOBJ(FOBJ,"SET","path",TEXT.FILE.NAME,"",RERR)         CALL @WOBJ(FOBJ,"SET","data",TEXT.BODY,"",RERR)         CALL MVDBTOOLKIT.WFILEIO(FOBJ)         FIELD.NAME="text"; FIELD.VALUE="@":TEXT.FILE.NAME; FIELD.TYPE="file"; GOSUB set.field      END ELSE         FIELD.NAME="text"; FIELD.VALUE=TEXT.BODY; GOSUB set.field      END            * NEED TO ADD THE HTML            IF HTML.BODY = "" AND TEXT.BODY # "" THEN         * WE NEED TO BUILD OUT A SIMPLE HTML VERSION, BASICALLY DOING NEW LINES         HAS.CR=DCOUNT(TEXT.BODY,CHAR(13))         HAS.LF=DCOUNT(TEXT.BODY,CHAR(10))         HTML.BODY=TEXT.BODY         BEGIN CASE            CASE HAS.CR AND HAS.LF               CONVERT CHAR(10) TO '' IN HTML.BODY               CONVERT CHAR(13) TO @AM IN HTML.BODY            CASE HAS.LF               CONVERT CHAR(10) TO @AM IN HTML.BODY            CASE HAS.CR               CONVERT CHAR(13) TO @AM IN HTML.BODY         END CASE         NUM.LINES=DCOUNT(HTML.BODY,@AM)         NEW.HTML.BODY=""         FOR A=1 TO NUM.LINES            LINE=HTML.BODY<A>            IF A > 1 THEN NEW.HTML.BODY:='<BR>'            NEW.HTML.BODY:=LINE        NEXT A        HTML.BODY=NEW.HTML.BODY      END            IF HTML.BODY # "" THEN         *HTML.BODY="HTML VERSION<BR>":HTML.BODY         FIELD.NAME="html"; FIELD.VALUE=HTML.BODY; GOSUB set.field      END            ** SUBJECT **      CALL @WOBJ(OBJ,"GET","params.subject",SUBJECT,"",RERR)      IF SUBJECT="" THEN         APISTATUS="error"         APISTATUSMSG="Must supply subject"         RETURN      END      FIELD.NAME="subject"; FIELD.VALUE=SUBJECT; GOSUB set.field      ** file uploads **      CALL @WOBJ(OBJ,"LENGTH","params.files",NUM.FILES,"",RERR)      IF NUM.FILES THEN         FOR X=1 TO NUM.FILES            P="params.files[":X-1:"]"            CALL @WOBJ(OBJ,"GET",P:'.sourcefile',SOURCEFILE,"",RERR)            CALL @WOBJ(OBJ,"GET",P:'.filename',FILENAME,"",RERR)            CALL @WOBJ(OBJ,"GET",P:'.type',FILETYPE,"",RERR)            FIELD.NAME='files[':FILENAME:']'            FIELD.VALUE='@':SOURCEFILE            IF FILETYPE # "" THEN FIELD.VALUE:=";type=":FILETYPE            FIELD.TYPE='file'            GOSUB set.field         NEXT X      END      CALL @WOBJ(COBJ,"TOSTRING","",CJSON,"PRETTIFY",RERR)      IF DO.DEBUG THEN         CALL @WOBJ(COBJ,"SET","debug","Y","",RERR); * SET TO DO DEBUGGING      END      CALL MVDBTOOLKIT.WCALL(COBJ)      CALL @WOBJ(COBJ,"TOSTRING","",TJSON,"PRETTIFY",RERR)      CALL @WOBJ(COBJ,"GET","response.data",RESPONSE,"",RERR)      CALL @WOBJ(ROBJ,"FROMSTRING","",RESPONSE,"",RERR)      CALL @WOBJ(ROBJ,"GET","message",APISTATUSMSG,"",RERR)      RETURNset.field: *      CALL @WOBJ(SOBJ,"FROMSTRING","","{}","",RERR)      CALL @WOBJ(SOBJ,"SET","name",FIELD.NAME,"",RERR)      CALL @WOBJ(SOBJ,"SET","value",FIELD.VALUE,"",RERR)      IF FIELD.TYPE # "" THEN         CALL @WOBJ(SOBJ,"SET","fieldtype",FIELD.TYPE,"",RERR)      END      FIELD.TYPE=""      CALL @WOBJ(SOBJ,"TOSTRING","",SJSON,"",RERR)      CALL @WOBJ(COBJ,"SET.OBJECT","formfields[-1]",SJSON,"",RERR)      RETURN00012BMVDB.THEMES0c0000045Theme 20c2theme2.css#004489#e1e1d6#d3d9df#989898#565656#dbdbce000045Theme 30c2theme3.css#557260#6A8B92#8A9875#34626B#eaeeea#3291b100003DTheme 10c2theme1.css#2d3956#455372#616a7f#e7e7e7#e0e9e900003DTheme 40c2theme4.css#77bed2#d5e1dd#999999#747e80#333333000218WDB.RESOURCE0c0000036RSS.MAINT0c2PRSS MaintenanceMVDB.INITRSS.MAINT11000033MVPKG.MAIN0c2PMV PackageMVDB.INITMVPKG.MAIN1000003FMVDB.WEB.ED0c2PMV Dashboard EditorMVDB.INITMVDB.WEB.ED11000043MVDB.ADMIN0c2PMV Dashboard AdministratorMVDB.INITMVDB.ADMIN1100002DRSS.MAIN0c2PRSS FeedMVDB.INITRSS.MAIN11000047CONFIG0c2CDEFAULT_HANDLERDBCDEFAULT_RESOURCEMVDB.MAINAPIKEY1234500003BAPI*WRESTTEST0c2PSample REST testWRESTTESTWRESTTEST1100003EMVDB.MAIN0c2PMV Dashboard ControllerMVDB.INITMVDB.MAIN110000AFDICT_MVSENDGRID.BP0c0000093CONFIG.JSON0c1{   "username":"patrickpayne@yahoo.com",   "password":"SendGridPassword1",   "apikey":"Api Key for v3 apis (none built yet)" }f000120DICT_MVDB.DEFS0c0000022TEMPLATE0c1A1TEMPLATEL15000022DISPLAYS0c1A2DISPLAYSL30000024DISP.AREA0c1A3DISP AREAL10000027DISP.ORDER0c1A4DISP ORDERL1000001CUSERS0c1A5USERSL2000001ADESC0c1A6DESCL4000001FDB.SORT0c1A8DB.SORTR70046DBWBPD0c0000151FI.MVDB.DEFS0c2DIM DB.ITEM(30)*EQU DB.TEMPLATE         TO DB.ITEM(1)EQU DB.WIDGETS          TO DB.ITEM(2)EQU DB.WIDGET.AREA      TO DB.ITEM(3)EQU DB.WIDGET.ORDER     TO DB.ITEM(4)EQU DB.USERS.ALLOWED    TO DB.ITEM(5)EQU DB.DESC             TO DB.ITEM(6)EQU DB.THEME            TO DB.ITEM(7)EQU DB.SORT             TO DB.ITEM(8)00012EFI.MVDB.USERS0c2DIM USER.ITEM(20)*EQU USER.PASSWORD     TO USER.ITEM(1)EQU USER.DEFAULT.DB   TO USER.ITEM(2)EQU USER.NAME         TO USER.ITEM(3)EQU USER.LAST.LOGIN   TO USER.ITEM(4)EQU USER.EMAIL        TO USER.ITEM(5)EQU USER.ROLE         TO USER.ITEM(6)EQU USER.ALT.LOGO     TO USER.ITEM(7)000100FI.MVDB.WIDGET.TYPES0c2DIM WIDGET.TYPES(10)*EQU WT$TYPE     TO WIDGET.TYPES(1)EQU WT$SWF      TO WIDGET.TYPES(2)EQU WT$HANDLER  TO WIDGET.TYPES(3)EQU WT$ICON     TO WIDGET.TYPES(4)EQU WT$GROUP    TO WIDGET.TYPES(5)EQU WT$DESC     TO WIDGET.TYPES(6)000070FI.MVDB.WIDGETS0c2DIM WIDGET.ITEM(20)*EQU WIDGET.SUB    TO WIDGET.ITEM(1)EQU WIDGET.USERS  TO WIDGET.ITEM(2)000166FI.WDB.RESOURCE0c2DIM RSRC.ITEM(20)*EQU RSRC.TYPE           TO RSRC.ITEM(1)EQU RSRC.DESCRIPTION    TO RSRC.ITEM(2)EQU RSRC.CONTROLLER     TO RSRC.ITEM(3)EQU RSRC.PROGRAM        TO RSRC.ITEM(4)EQU RSRC.PARSE.CGI      TO RSRC.ITEM(5)EQU RSRC.ENABLED        TO RSRC.ITEM(6)EQU RSRC.DEBUG.MODE     TO RSRC.ITEM(7)EQU RSRC.ACCOUNT        TO RSRC.ITEM(8)000484FI.WDB.DEBUG0c2** WDB.DEBUG record layout*EQU WDBG_DATE                TO 1EQU WDBG_TIME                TO 2EQU WDBG_DURATION            TO 3EQU WDBG_PORT                TO 4EQU WDBG_HANDLER             TO 5EQU WDBG_RESOURCE            TO 6EQU WDBG_CONTROLLER          TO 7EQU WDBG_PROGRAM             TO 8EQU WDBG_REQUEST_ID          TO 9EQU WDBG_REQUEST             TO 10EQU WDBG_METHOD              TO 11EQU WDBG_PATH                TO 12EQU WDBG_REMOTE_ADDR         TO 13EQU WDBG_STATUS              TO 14EQU WDBG_HEADER_VARS         TO 15EQU WDBG_HEADER_VALS         TO 16EQU WDBG_CGI_VARS            TO 17EQU WDBG_CGI_VALS            TO 18EQU WDBG_BODY                TO 19EQU WDBG_RESPONSE_VARS       TO 20EQU WDBG_RESPONSE_VALS       TO 21EQU WDBG_RESPONSE_CONTENT    TO 22EQU WDBG_RESERVED1           TO 23EQU WDBG_RESERVED2           TO 24EQU WDBG_SESSION_ID          TO 25EQU WDBG_SESSION_VARS        TO 26EQU WDBG_SESSION_VALS        TO 27EQU WDBG_SESSION_DATE        TO 28EQU WDBG_SESSION_TIME        TO 29EQU WDBG_WARNING             TO 30EQU WDBG_ERROR               TO 31EQU WDBG_LINT                TO 3200323EMVDB.INCLUDE0c2*COMMON /MVDB/ GLOBAL.INFO(100), GLOBAL.USER.DATA(20), GLOBAL.TEMP.DATA(20), WIDGET.INFO(200), WIDGET.USER.DATA(100)** GLOBAL.INFO equates. GLOBAL.INFO is a place for variables that are * globally accessible to all view subroutines. This information is not* written to disk - it is valid only for the duration of the execution.*EQU G$USERID            TO GLOBAL.INFO(1) ;* UserID currently logged inEQU G$CURRENT.DB        TO GLOBAL.INFO(2) ;* Current dashboard nameEQU G$LOGIN.DATE        TO GLOBAL.INFO(3) ;* Date user logged in (from session)EQU G$LOGIN.TIME        TO GLOBAL.INFO(4) ;* Time user logged in (from session)EQU G$WIDGET.NAME       TO GLOBAL.INFO(5) ;* Current view being executedEQU G$WIDGET.SUB        TO GLOBAL.INFO(6) ;* Current subruotine being calledEQU G$WIDGET.NAME.LIST  TO GLOBAL.INFO(7) ;* List of views called/to be calledEQU G$WIDGET.SUB.LIST   TO GLOBAL.INFO(8) ;* w/ G$WIDGET.NAME.LISTEQU G$WIDGET.CALL.TIME  TO GLOBAL.INFO(9) ;* w/ G$WIDGET.NAME.LIST (timedate stamp)EQU G$WIDGET.CALL.DUR   TO GLOBAL.INFO(10) ;* w/ G$WIDGET.NAME.LIST (duration in MS)EQU G$QUERYMODE         TO GLOBAL.INFO(11) ;* Used to query subroutines without running themEQU G$SUBMITTED         TO GLOBAL.INFO(12) ;* 1=User clicked submit on input area of this widgetEQU G$ADMIN.USER        TO GLOBAL.INFO(14) ;* 1=User as an admin; 0=User is not an adminEQU G$LICENSE.COUNT     TO GLOBAL.INFO(15) ;* Count of licenses (concurrent users)EQU G$EDITION           TO GLOBAL.INFO(16) ;* Edition NameEQU G$SYSTEM.ID         TO GLOBAL.INFO(17) ;* System ID** GLOBAL.INFO(90...100) reserved for internal use.*EQU G$DRILLDOWN.MODE    TO GLOBAL.INFO(24)EQU G$DD.REFERRER       TO GLOBAL.INFO(25)EQU G$DD.FROM.DB        TO GLOBAL.INFO(26)** GLOBAL.USER.DATA stores persistent variable data throughout the course* of a dashboard user's login session. This allows for persistent sharing* of information between dashboard subroutines.** GLOBAL.TEMP.DATA stores temporary variable data for the course of a single* execution. Data is not stored with the session and is destoryed after each* page load.** WIDGET.INFO holds the information for a specific dashboard WIDGET.*EQU W$TYPE           TO WIDGET.INFO(1)EQU W$TITLE          TO WIDGET.INFO(2)EQU W$LINK.LABEL     TO WIDGET.INFO(3)EQU W$LINK.LOCATION  TO WIDGET.INFO(4)  ;* Quandrant(s) to show (1-4)EQU W$LINK.UD.POS    TO WIDGET.INFO(5)  ;* WIDGET.USER.DATA(x)EQU W$LINK.UD.VAL    TO WIDGET.INFO(6)  ;* ^^ = this_valueEQU W$LINK.DD.WIDGET TO WIDGET.INFO(7)  ;* Drill-down widget nameEQU W$LINK.DD.PARAMS TO WIDGET.INFO(8)  ;* Drill down params (UNUSED)EQU W$LINK.URL       TO WIDGET.INFO(26) ;* Specific URL - UD/DD params ignoredEQU W$LINK.URL.OPTS  TO WIDGET.INFO(27) ;* Specific URL - UD/DD params ignoredEQU W$LINK.ICON      TO WIDGET.INFO(28) ;* Icon GIF name ("C" location only)EQU W$LINK.ICON.TXT  TO WIDGET.INFO(29) ;* Hover text for imageEQU W$WIDTH          TO WIDGET.INFO(9)  ;* 1, 2 or 3EQU W$PRINTABLE      TO WIDGET.INFO(24) ;* 1=Add print function/icon to control barEQU W$EXCELABLE        TO WIDGET.INFO(88) ;* 1=Add EXCEL function/icon to control barEQU W$PDFABLE        TO WIDGET.INFO(87) ;* 1=Add PDF function/icon to control barEQU W$HIDDEN         TO WIDGET.INFO(25) ;* 1=Do not display this widget** Pie chart equates*EQU W$PIE.LABELS     TO WIDGET.INFO(10)EQU W$PIE.VALUES     TO WIDGET.INFO(11)EQU W$PIE.COLORS     TO WIDGET.INFO(12) ;* #000000 - #FFFFFF* Below settings are Fusion Charts onlyEQU W$PIE.CAPTION    TO WIDGET.INFO(14)EQU W$PIE.VALUE.OPTS TO WIDGET.INFO(15)** Bar chart equates*EQU W$BAR.LABELS      TO WIDGET.INFO(10) ;* Labels for each Series (AM)EQU W$BAR.VALUES      TO WIDGET.INFO(11) ;* Values matrix (AM/VM)EQU W$BAR.COLORS      TO WIDGET.INFO(12) ;* #000000 - #FFFFFFEQU W$BAR.XLABELS     TO WIDGET.INFO(13) ;* Labels for each set (X Axis)EQU W$BAR.XMEMO       TO WIDGET.INFO(14) ;* X-Axis TextEQU W$BAR.YMEMO       TO WIDGET.INFO(15) ;* Y-Axis TextEQU W$BAR.TYPE        TO WIDGET.INFO(16) ;* 'clustered', 'stacked', '100% stacked'* Below settings are Fusion Charts onlyEQU W$BAR.TREND.BEG   TO WIDGET.INFO(17) ;* Trendline beginning valueEQU W$BAR.TREND.END   TO WIDGET.INFO(18) ;* Trendline ending valueEQU W$BAR.TREND.OPTS  TO WIDGET.INFO(19) ;* Options for the trendlineEQU W$BAR.VALUE.OPTS  TO WIDGET.INFO(20)EQU W$BAR.LABEL.OPTS  TO WIDGET.INFO(21)EQU W$BAR.XLABEL.OPTS TO WIDGET.INFO(22)EQU W$BAR.CAPTION     TO WIDGET.INFO(23)** Table chart equtes*EQU W$TABLE.COL.LABELS     TO WIDGET.INFO(10)EQU W$TABLE.COL.JUST       TO WIDGET.INFO(11)EQU W$TABLE.DATA           TO WIDGET.INFO(12)EQU W$TABLE.TOTALS         TO WIDGET.INFO(13)** Text display equates*EQU W$TEXT.DATA         TO WIDGET.INFO(10)*EQU W$HTML.DATA         TO WIDGET.INFO(10) ;* HTML Blob** Global display equates*EQU W$CHART.OPTIONS  TO WIDGET.INFO(30) ;* Fusion Charts OnlyEQU W$CHART.HEIGHT   TO WIDGET.INFO(31) ;* Override (in pixels)** WIDGET.USER.DATA holds widget-specific user information which* is persistent through the user's session. Values can be set in* this by using the LINK.XXXX feature. This feature will create links* on the widget display that, when clicked, will set values in* WIDGET.USER.DATA as perscribed*EQU W$INPUT.PROMPT   TO WIDGET.INFO(32) ;* Prompt Text (AM)EQU W$INPUT.TYPE     TO WIDGET.INFO(33) ;* TEXT or SELECT (AM)EQU W$INPUT.SELOPTS  TO WIDGET.INFO(34) ;* Text Options for SELECT (AM)(VM)EQU W$INPUT.SELVALS  TO WIDGET.INFO(35) ;* Select Values for SELECT (AM)(VM)EQU W$INPUT.DEFAULT  TO WIDGET.INFO(36) ;* Default Value (AM)EQU W$INPUT.UDPOS    TO WIDGET.INFO(37) ;* User Data Pisition to store answer (AM)EQU W$INPUT.PARAMS   TO WIDGET.INFO(38) ;* Additonal HTML in <input> or <select> tag (AM)EQU W$INPUT.BUTTON   TO WIDGET.INFO(39) ;* Button Label for Submit (AM)*EQU W$MAP.IDS         TO WIDGET.INFO(40) ;* ID for associated value. Ex. USA Map, this is a state Abbr.EQU W$MAP.VALUES      TO WIDGET.INFO(41) ;* Value associtated with the ID (map segment)EQU W$MAP.VALUE.OPTS  TO WIDGET.INFO(42) ;* Optional parameters to be inserted into the <entity> tag.EQU W$MAP.RANGE.NAME  TO WIDGET.INFO(43) ;* Display Name of the range/group (VM)EQU W$MAP.RANGE.LOW   TO WIDGET.INFO(44) ;* Range low limit (VM)EQU W$MAP.RANGE.HIGH  TO WIDGET.INFO(45) ;* Range high limit (VM)EQU W$MAP.RANGE.COLOR TO WIDGET.INFO(46) ;* Range color (optional override)EQU W$MAP.RANGE.OPTS  TO WIDGET.INFO(47) ;* optional parameters to be inserted into the <color> tag** The following value is only relevant for map type USA - when the W$MAP.IDS are state abbreviations.* For each W$MAP.IDS entry, this value can be set to allow drill-down for this state. When used,* it will reload the same widget, providing it with the drill-down state info in WIDGET.USER.INFO(1).* The use of this feature precludes the use of the W$MAP.VALUE.LINK feature below.** See also the FusionWidgets drill-down feature described later. This can be used to drill-down to a* specific widget from a map position when the map drilldown features described here are NOT used.*EQU W$MAP.VALUE.DD    TO WIDGET.INFO(48) ;* "1"=Enable Drill-Down for this State (from USA Map). If used, *                                           WIDGET.USER.INFO will contain the state map info:*                                           (1) = State Code (2-character)*                                           (2) = State Map Name (for use with MVDB.MAP.DATA)*EQU W$MAP.VALUE.LINK  TO WIDGET.INFO(49) ;* Link URL (Ignored if Drill-Down state is used)EQU W$MAP.LINK.MODE   TO WIDGET.INFO(50) ;* "N" = New Window, Blank = This Window** Fusion Widgets*EQU W$FW.CAPTION          TO WIDGET.INFO(51) ;* Widget captionEQU W$FW.SUBCAPTION       TO WIDGET.INFO(52) ;* SubcaptionEQU W$FW.LABELS           TO WIDGET.INFO(53) ;* (VM) Labels for each sectionEQU W$FW.VALUES           TO WIDGET.INFO(54) ;* (VM) Values for each sectionEQU W$FW.VALUE.OPTS       TO WIDGET.INFO(55) ;* (VM) XML attributes to be included in the <set> tagEQU W$FW.COLORS           TO WIDGET.INFO(56) ;* (VM) Alternate array of colors to useEQU W$FW.CHART.PALETTE    TO WIDGET.INFO(57) ;* 1-5 - Selects color theme for Spark Charts, Bullet Charts ** Fusion Widgets - Spark Charts*EQU W$FW.SPARK.TREND.BEG  TO WIDGET.INFO(58) ;* Trendline begin valueEQU W$FW.SPARK.TREND.END  TO WIDGET.INFO(59) ;* Trendline end valueEQU W$FW.SPARK.TREND.OPTS TO WIDGET.INFO(60) ;* Trendline options** Linear charts (Bullet Charts, Guages)*EQU W$FW.LOWER.LIMIT      TO WIDGET.INFO(61)EQU W$FW.UPPER.LIMIT      TO WIDGET.INFO(62)EQU W$FW.COLOR.RANGE      TO WIDGET.INFO(63) ;* <1> Range lower limit*                                               <2> Range upper limit*                                               <3> Range Color (This seems to be ignored on bullet charts)*                                               <4> Range options (attributes to appear in <color> tagEQU W$FW.METER.VALUE       TO WIDGET.INFO(64) ;* The numeric value of the meter guageEQU W$FW.METER.VALUE.OPTS  TO WIDGET.INFO(65) ;* Optional attributes to appear in the <value> tagEQU W$FW.METER.TARGET      TO WIDGET.INFO(66) ;* Target value for the meter (where appropriate) (Bullet)EQU W$FW.METER.TARGET.OPTS TO WIDGET.INFO(67) ;* Option attributes to appear in the <target> tag*EQU W$FW.NUMBER.PREFIX    TO WIDGET.INFO(68) ;* Such as "$"EQU W$FW.NUMBER.SUFFIX    TO WIDGET.INFO(69) ;* Such as "K" or "MM"EQU W$FW.TICKMARKS        TO WIDGET.INFO(70) ;* Tickmark Properties for Bullets, Gauges*                                               <1> 1 or 0 ; Show Tick Marks (1 = default)*                                               <2> 1 or 0 ; Show Tick Values next to the marks (1 = default)*                                               <3> A or B ; Show Above or Below graph (B = default)*                                               <4> Number of major tickmarks (default is calculated)*                                               <5> Number of minor tickmarks between major ones (default is none)*EQU W$FW.LOWER.LIMIT.LABEL  TO WIDGET.INFO(71) ;* For gauges, these are the labels asssociated with theEQU W$FW.UPPER.LIMIT.LABEL  TO WIDGET.INFO(72) ;* lower and upper limitsEQU W$FW.DIAL.VALUES        TO WIDGET.INFO(73) ;* (VM) value associated with each dial on the gaugeEQU W$FW.DIAL.OPTS          TO WIDGET.INFO(74) ;* Optional atributes to appear in the <dial> tagEQU W$FW.TRENDPOINT.VALUES  TO WIDGET.INFO(75) ;* (VM) Trendpoints on gauges*                                               * Optionally, <2> may be used to specify an ending value*                                               * to plot an arc on a gauge between <1,X> and <2,X>EQU W$FW.TRENDPOINT.LABELS  TO WIDGET.INFO(76) ;* (VM) Associated trendpoint label textEQU W$FW.TRENDPOINT.OPTS    TO WIDGET.INFO(77) ;* Optional attributes to appear in the <point> tag*EQU W$FW.THERMOMETER.COLOR  TO WIDGET.INFO(78) ;* Fill color for Thermometer and Cylinder charts** The values below allow you to set up drill-down parameters for most FusionWidgets and FusionCharts* values. These values correspond with W$FW.VALUES, W$FW.METER.VALUE, W$FW.DIAL.VALUES, W$PIE.VALUES,* W$BAR.VALUES and also with W$FW.MAP.IDS when NOT using the built-in drill-down facilities in the* USAMAP type. It may be used when a state map is being created.* EQU W$FW.DD.UD.POS          TO WIDGET.INFO(79) ;* WIDGET.USER.DATA(x) location to store the user-defined valueEQU W$FW.DD.UD.VAL          TO WIDGET.INFO(80) ;* ^^ = this_value - gets stored in WIDGET.USER.DATA(x) positionEQU W$FW.DD.WIDGET          TO WIDGET.INFO(81) ;* Drill-down widget name to be invokedEQU W$FW.DD.PARAMS          TO WIDGET.INFO(82) ;* Drill down params (UNUSED)*EQU W$FW.BC.PLOT.COLOR      TO WIDGET.INFO(83) ;* Plot color of bullet-chart plot lineEQU W$FW.BC.TARGET.COLOR    TO WIDGET.INFO(84) ;* Color of bullet-chart target lineEQU W$MAP.VALUE.TOOLTEXT    TO WIDGET.INFO(85) ;* toolText value for mapEQU W$INPUT.PROMPT.PARAMS   TO WIDGET.INFO(86) ;* Prompt text styling options. Goes into label tag.** Color Names*EQU COLOR$RED      TO "#FF0000"EQU COLOR$MAROON   TO "#800000"EQU COLOR$FUCHSIA  TO "#FF00FF"EQU COLOR$MAGENTA  TO "#FF00FF"EQU COLOR$ORANGE   TO "#FFA500"EQU COLOR$YELLOW   TO "#FFFF00"EQU COLOR$LIME     TO "#00FF00"EQU COLOR$GREEN    TO "#008000"EQU COLOR$OLIVE    TO "#808000"EQU COLOR$CYAN     TO "#00FFFF"EQU COLOR$AQUA     TO "#00FFFF"EQU COLOR$TEAL     TO "#008080"EQU COLOR$BLUE     TO "#0000FF"EQU COLOR$NAVY     TO "#000080"EQU COLOR$PURPLE   TO "#800080"EQU COLOR$BLACK    TO "#000000"EQU COLOR$SILVER   TO "#C0C0C0"EQU COLOR$GRAY     TO "#808080"EQU COLOR$GREY     TO "#808080"EQU COLOR$WHITE    TO "#FFFFFF"000014SOURCE.VIEW.ICON0c20005EBWWW.INCLUDE0c2** Standard web include*COMMON /WWW/ WWW.INFO(50), F.WEB.SESSIONEQU SESSION$ID               TO WWW.INFO(1)EQU SESSION$CONTENT.TYPE     TO WWW.INFO(2)EQU SESSION$CONTENT.SENT     TO WWW.INFO(3)EQU SESSION$OUTBUF           TO WWW.INFO(4)EQU SESSION$HEADERS          TO WWW.INFO(5)EQU SESSION$COOKIES          TO WWW.INFO(6)EQU SESSION$OUTBUF.SIZE      TO WWW.INFO(7)EQU SESSION$OUTBUF.FLAG      TO WWW.INFO(8)EQU SESSION$TIME.OUT         TO WWW.INFO(9)EQU SESSION$GLOBAL.DEBUG     TO WWW.INFO(10)EQU SESSION$STATUS.CODE      TO WWW.INFO(11)EQU SESSION$WDEBUG.MODE      TO WWW.INFO(12)EQU CONFIG$WDB.RESOURCE      TO WWW.INFO(15)EQU CGI$VARS                 TO WWW.INFO(25)EQU CGI$VALS                 TO WWW.INFO(26)EQU CGI$CVARS                TO WWW.INFO(27)EQU CGI$CVALS                TO WWW.INFO(28)EQU CGI$SERVER.NAME          TO WWW.INFO(29)EQU CGI$PATH                 TO WWW.INFO(30)EQU CGI$SERVER.PORT          TO WWW.INFO(31)EQU CGI$BODY                 TO WWW.INFO(32)EQU CGI$HEADERVALS           TO WWW.INFO(33)EQU CGI$HEADERVARS           TO WWW.INFO(34)EQU CGI$RESTPARAMS           TO WWW.INFO(35)EQU CGI$CONFIG               TO WWW.INFO(36)EQU F.WEB.FORMS              TO WWW.INFO(40)EQU CGI$APPSVR.ID            TO WWW.INFO(45)EQU CGI$RESERVED1            TO WWW.INFO(46)EQU CGI$RESERVED2            TO WWW.INFO(47)EQU CGI$RESERVED3            TO WWW.INFO(48)EQU CGI$UNIQUE.ID            TO WWW.INFO(49)EQU CGI$RESOURCE.NAME        TO WWW.INFO(50)000481WWW.INFO0c2** Element index for standard web common /WWW/ WWW.INFO array*EQU SESSION_ID               TO 1EQU SESSION_CONTENT.TYPE     TO 2EQU SESSION_CONTENT.SENT     TO 3EQU SESSION_OUTBUF           TO 4EQU SESSION_HEADERS          TO 5EQU SESSION_COOKIES          TO 6EQU SESSION_OUTBUF.SIZE      TO 7EQU SESSION_OUTBUF.FLAG      TO 8EQU SESSION_TIME.OUT         TO 9EQU SESSION_GLOBAL.DEBUG     TO 10EQU SESSION_STATUS.CODE      TO 11EQU SESSION_WDEBUG_MODE      TO 12EQU CONFIG_WDB.RESOURCE      TO 15EQU CGI_VARS                 TO 25EQU CGI_VALS                 TO 26EQU CGI_CVARS                TO 27EQU CGI_CVALS                TO 28 EQU CGI_SERVER.NAME          TO 29EQU CGI_PATH                 TO 30EQU CGI_SERVER.PORT          TO 31EQU CGI_BODY                 TO 32EQU CGI_HEADERVALS           TO 33EQU CGI_HEADERVARS           TO 34EQU CGI_RESTPARAMS           TO 35EQU CGI_CONFIG               TO 36EQU CGI_APPSVR.ID            TO 45EQU CGI_RESERVED1            TO 46EQU CGI_RESERVED2            TO 47EQU CGI_RESERVED3            TO 48EQU CGI_UNIQUE.ID            TO 49EQU CGI_RESOURCE.NAME        TO 500002CFUD.DICT.SALES0c0000033CLOSE.DATE.YMO0c0A0A;1(DY):1(D2-)(G-1)R10000028CLOSE.DATE.MM0c0D1DMCLOSE MONTH8RS00002CCLOSE.DATE.YM0c0A0A;1(DY):1(DM)R10000016BRANCH0c0D1315LS000016REGION0c0D1415LS000018CNT0c0A0F;C1R5000018ATT100c0D10MD210RS00001BCLOSE.DATE0c0D1D2-8RS00003CCLOSE.DATE.YYYY0c0IOCONV(ATT1,'D4-')[7,4]CLOSE YEAR8LS000018@ID0c0D0SALES10LS000016ATT80c0D8MD210RS000017REP.NAME0c0D525LS000015PIPE0c0I"|"|1LS000016ATT90c0D9MD210RS000018ATT120c0D12MD210RS000012ATT10c0D16RS00001AEXT.COST0c0D9MD210RS00003BGROSS.PROFIT0c0IEXT.AMT - EXT.COSTMD2GROSS PROFIT10RS000023EXT.AMT0c0D8MD2EXT.AMOUNT10RS0000CDUD.DICT.AP0c0000023DATE.PAID0c0D8D2-Date Paid8RS000026INV.AMOUNT0c0D6MD2Inv.Amount13RS000022DUE.DATE0c0D20D2-Due.Date8RS000021BALANCE0c0D50MD2Balance13RS000015PIPE0c0I"|" 1LS00023DUD.DICT.DASHBOARD.CLOSING.STATS0c0000026SALESMAN0c0IFIELD(@ID,'*',1)20LS000024BRANCH0c0IFIELD(@ID,'*',3)10LS000023YYYYMM0c0IFIELD(@ID,'*',2)6LS000013ID0c0I@ID10LS000032GROSS.PROFIT0c0IAMOUNT - COST.OF.SALEMD212RS000026YYYY0c0IFIELD(@ID,'*',2)[1,4]4RS000015PIPE0c0I"|" 1LS000022YYYYMM*BRANCH0c0I@IDG1*210LS000024REGION0c0IFIELD(@ID,'*',4)10LS000018AMOUNT0c0D1MD212RS00001ECOST.OF.SALE0c0D2MD212RS000040REGION*YYYYMM0c0IFIELD(@ID,"*",4):"*":FIELD(@ID,"*",2)10LS000023SALESMAN*YYYYMM0c0I@IDG*220LS0000CEDICT_WDB.LOG0c000001CDATE0c1A2DATED2/R800001CDURATION0c1A5MSR10000020PROGRAM0c1A1PROGRAML30000020AGE0c1A2AGEA;(D)-(2)R8000028TIME0c1A3TIMEMTSA;(3)/"1000"R8000136UD.DICT.AR0c0000028INVOICE.AMT0c0D6MD2Invoice.Amt13RS000022DUE.DATE0c0D20D2-Due.Date8RS000021BALANCE0c0D50MD2Balance13RS000026DATES.PAID0c0D8D2-CheckDates8RS000017CUST0c0D1Cust25LS00001BBIG.CUST0c0D1Cust40LS000014PIPE0c0I"|"1LS000021CUST.NAME0c0D1Cust.Name25LS000AC9MV.INSTALL.CF0c000052BMVAPPS-PRE-SCRIPT0c0BASICTYPE "P"CREATE-FILE DICT WDB.LOG 1CREATE-FILE DICT WDB.DEBUG 1CREATE-FILE DIR RSS.BPCREATE-FILE RSS.FEEDS 1,1 11,1CREATE-FILE MV.WEB.ED.ARCHIVE 3,1 301,1CREATE-FILE MVDB.CONTROL 1,1 11,1CREATE-FILE MVDB.DEFS 3,1 17,1CREATE-FILE MVDB.SUB.TEMPLATES 1,1 17,1CREATE-FILE DIR MVDB.SUBSCREATE-FILE MVDB.WIDGET.TYPES 1,1 3,1CREATE-FILE MVDB.WIDGETS 3,1 31,1CREATE-FILE MVDB.MAP.DATA 3,1 181,1CREATE-FILE MVDB.UDATA 3,1 101,1CREATE-FILE MVDB.USERS 3,1 31,1CREATE-FILE MVPC.CONTROL 1,1 3,1CREATE-FILE DIR WBPDCREATE-FILE DIR WDB.BPCREATE-FILE WEB.FORMS 1,1 101,1CREATE-FILE WDB.Q 3,1 31,1CREATE-FILE WEB.SESSION 3,1 71,1CREATE-FILE MVAPPS.INSTALLED 3,1 11,1CREATE-FILE MVBP.FORMS 1,1 11,1CREATE-FILE MVDB.THEMES 1,1 3,1CREATE-FILE DIR MVBP.BPCREATE-FILE MVDB.EMAILED.HTML 1,1 79,1CREATE-FILE WDB.RESOURCE 1,1 3,1CREATE-FILE DIR WREST.BPCREATE-FILE DIR WOBJ.BPCREATE-FILE DIR MVDBTOOLKIT.BPCREATE-FILE DIR MVMAKE.BPCREATE-FILE DASHBOARD.CLOSING.STATS 3,1 97,1CREATE-FILE DASHBOARD.BALANCES 3,1 97,1CREATE-FILE PORTAL.SALES 3,1 997,1CREATE-FILE PORTAL.AR 3,1 997,1CREATE-FILE PORTAL.AP 3,1 997,1CREATE-FILE UD.DICT.DASHBOARD.CLOSING.STATS 1,1 7,1CREATE-FILE UD.DICT.SALES 1,1 1,1CREATE-FILE UD.DICT.AR 1,1 1,1CREATE-FILE UD.DICT.AP 1,1 1,1CREATE-FILE DIR MVSENDGRID.BP00052AMVAPPS-POST-SCRIPT0c0DELETE VOC DOWNLOAD.XLS INIT.WWW MV.COMPILE MVAPPS.STATUS MVDB.ADMIN MVDB.MAIN MVDB.WEB.ED MVPKG.MAIN PACK-FILE RSS.MAIN RSS.MAINT WDB.INIT WDB.TEST WDB.VIEW XML.DATASELECT MVDB.SUBS NE "_]"BASIC MVDB.SUBSSELECT MVDB.SUBS NE "_]"CATALOG MVDB.SUBS FORCE DIRECTSELECT RSS.BP NE "_]"BASIC RSS.BPSELECT RSS.BP NE "_]"CATALOG RSS.BP FORCE DIRECTSELECT WDB.BP NE "_]"BASIC WDB.BPSELECT WDB.BP NE "_]"CATALOG WDB.BP FORCE DIRECTBASIC WDB.BP MVDB.DEBUG -DCATALOG WDB.BP MVDB.DEBUG FORCE DIRECT* COMPILE WDB.BP APP.INSTALLER (OWSELECT MVBP.BP NE "_]"BASIC MVBP.BPSELECT MVBP.BP NE "_]"CATALOG MVBP.BP FORCE DIRECTSELECT WOBJ.BP NE "_]"BASIC WOBJ.BP -I -Z2SELECT WOBJ.BP NE "_]"CATALOG WOBJ.BP FORCE DIRECTSELECT WREST.BP NE "_]"BASIC WREST.BP -I -Z2SELECT WREST.BP NE "_]"CATALOG WREST.BP FORCE DIRECTRUN WDB.BP USER.UPDATERUN MVDB.SUBS PURGE.NON.PLATFORM.WIDGETSMV.WEB.ED.ARCHIVE|MVDB.DEFS|MVDB.MAP.DATA|MVDB.WIDGET.TYPES|MVDB.WIDGETS|RSS.FEEDS|WDB.DEBUG|WDB.LOGRUN WDB.BP CONVERT.DICTSSELECT MVDBTOOLKIT.BP NE "_]"BASIC MVDBTOOLKIT.BP -I -Z2SELECT MVDBTOOLKIT.BP NE "_]"CATALOG MVDBTOOLKIT.BP FORCE DIRECTRUN MVDBTOOLKIT.BP MVDBTOOLKIT.CONFIG!mkdir TMPMVDBTOOLKIT.CONFIGSELECT WSENDGRID.BP NE "_]"BASIC MVSENDGRID.BPSELECT MVSENDGRID.BP NE "_]"CATALOG MVSENDGRID.BP000051PACKAGE.INFO0c0MultiValue Dashboard/Portal Reports/MVConnect1.7.4dbMVDB18000052EDICT_WDB.DEBUG0c000001CDATE0c1A1DATED2/R8000019PORT0c1A4PORTR4000026REQUEST.ID0c1A9REQUEST IDL2500001BPATH0c1A12PATHL25000029REMOTE.ADDR0c1A13REMOTE ADDRL1400001DTYPE0c1A0TYPEG0/1L4000026CONTROLLER0c1A7CONTROLLERL12000033RESPONSE.CONTENT0c1A22RESPONSE CONTENTT6000002DSESSION.DATE0c1A28SESSION DATED2/R800002BSESSION.VARS0c1A26SESSION VARSL1200002BSESSION.VALS0c1A27SESSION VALSL20000017DUR0c1A3DURR7000019REQ0c1A10REQL40000020AGE0c1A1AGEA;(D)-(1)R8000020PROGRAM0c1A8PROGRAML2500001ESTATUS0c1A14STATUSR600001BBODY0c1A19BODYT60000027SESSION.ID0c1A25SESSION IDL2500001BLINT0c1A32LINTT6000001CTIME0c1A2TIMEMTSR8000020HANDLER0c1A5HANDLERL10000022RESOURCE0c1A6RESOURCEL1200001EMETHOD0c1A11METHODL6000029HEADER.VARS0c1A15HEADER VARSL12000029HEADER.VALS0c1A16HEADER VALSL20000023CGI.VARS0c1A17CGI VARSL12000023CGI.VALS0c1A18CGI VALSL2000002DRESPONSE.VARS0c1A20RESPONSE VARSL1200002DRESPONSE.VALS0c1A21RESPONSE VALSL2000002DSESSION.TIME0c1A29SESSION TIMEMTSR8000021WARNING0c1A30WARNINGT6000001DERROR0c1A31ERRORT60018DDBWEB.FORMS0c0000C4DPORTAL.DASHBOARD.SALES.AR.AP0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center">AP Balance</td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000200outerTrackWrapper0c2    <div id="outerTrackWrapper">		<div id="trackWrapper">			<div id="trackMsg" style="width: 165px; height: 34px; float: left;"><div id="dispRate">&nbsp;</div></div>			<div id="track1" style="width:200px; height:34px; float: right; margin: 0 10px 0 0; background: url(/db/images/trackSlider.png) 0px center no-repeat;">				<div id="handle1" style="width:12px; height:34px; margin: 6px 0 0 0; float: left;"><img src="/db/images/sliderHandle.png" alt="" /></div>			</div>		</div>	</div>0002E9ed_output.html0c2<div class="ed_error"><!-- HEADER --><!-- FOOTER --></div><div id="compile_output" class="compile_output"><!-- COMPILE_OUTPUT --></div><div id="compile_errline"><!-- COMPILE_ERRLINE --></div><div id="last_compile"><!-- LAST_COMPILE --></div><div id="ed_content"><!-- ED_CONTENT --></div><div id="num_calls"><!-- NUM_OF_CALLS --></div><div id="num_includes"><!-- NUM_OF_INCLUDES --></div><div id="num_files"><!-- NUM_OF_FILES --></div><div id="num_archives"><!-- NUM_OF_FILES --></div><div id="calls_content"><!-- EA_CALLS_CONTENT --></div><div id="includes_content"><!-- EA_INCLUDES_CONTENT --></div><div id="files_content"><!-- EA_FILES_CONTENT --></div><div id="archive_content"><!-- EA_ARCHIVE_CONTENT --></div>000253FCF_template.html0c2<!-- start FC script -->        <div id="<!-- chart_div_id -->">        </div>        <script type="text/javascript">        FusionCharts.ready(function () {            var myChart = new FusionCharts({              "type": "[FCF_MODULE]",              "renderAt": "<!-- chart_div_id -->",              "width": "<!-- chart_width -->",              "height": "<!-- chart_height -->",              "dataFormat": "xml",              "dataSource": "<!-- CHARTXML -->"            });          myChart.render();        });        </script><!-- end of FC script -->000E8DPORTAL.DASHBOARD0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL MARGINS&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center">AP Balance</td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>0010E6admin_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>	<script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>	    <script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>            	    <script src="/db/javascripts/jquery.form.js" type="text/javascript" charset="utf-8"></script>    	        	<script src="/db/javascripts/jquery.url.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/initAdminTemplate.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/sortable.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/tablesort.js" type="text/javascript" charset="utf-8"></script>			<link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/ingrid.css" type="text/css" charset="utf-8" />    <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />    <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]-->    <!-- SITE_THEME -->		<title>MultiValue Dashboard Admin</title>		<script type="text/javascript">	<!-- ADMIN_SCRIPTS -->	</script></head><body><div id="header"><!-- HEADER --></div>	<div id="logo">    	<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">	</div><div id="mainWrapper"><div id="main"><!-- Add new user form --><div id="new-user" title="New user" style="display:none;" ><form id="new-user-form" method="get" action="/dbc/MVDB.ADMIN"><div id="new-user-messages"></div><table><tbody><tr> <td align="right">User ID:</td> <td><input id="new-userid" type="text" value="" name="new_userid"/></td></tr><tr> <td align="right">Name:</td> <td><input id="username" type="text" value="" name="username"/></td></tr><tr id='default-dashboard'> <td align="right">Default Dashboard:</td> <td id="default-dashboard-container"><!-- default_dashboard --></td> <td/></tr><tr> <td align="right">Role:</td> <td>   <select id="user-role" name="user_role">      <option value="User">User</option>      <option value="Administrator">Administrator</option>   </select> </td></tr><tr> <td align="right">Optional Logo Path:</td> <td><input id="opt_logo_path" type="text" value="" name="opt_logo_path"/></td></tr><tr> <td align="right">Password:</td> <td><input id="user-password" type="password" value="" name="user_password"/></td></tr><tr> <td align="right">Confirm Password:</td> <td><input id="confirm-password" type="password" value="" name="confirm_password"/></td></tr></tbody></table><input type="hidden" value="save_user" name="action"/></form></div><!-- Add new widget form --><div id="new-widget" title="New widget" style="display:none;" ><form id="new-widget-form" method="get" action="/dbc/MVDB.ADMIN"><div id="widget-messages"></div><table><tbody><tr> <td align="right">Widget Name: *</td> <td><input id="widget_id" type="text" value="" name="new_widgetid" /></td></tr><tr> <td align="right">Subroutine: *</td> <td><input id="widget_sub" type="text" value="" name="widget_sub" /><!-- edit_source_link --></td></tr><tr> <td align="right">Users:</td> <td><input id="widget_users" type="text" value="" name="widget_users" /><br/><font size="1">comma-separated</font></td></tr></tbody></table><!--input type="submit" value="Delete Widget" name="delete_widget"/ --><p><input id="save_widgetid" type="hidden" value="" name="save_widgetid" /><input id="widget_action" type="hidden" value="save_widget" name="action" /><input id="save_widget" type="hidden" value="Save" name="save_widget" /></p></form></div><a href="edit-sub" id="edit-sub-link" target="_blank" style="display: none;">Edit subroutine</a><!-- ADMIN_MAIN --></div></div><div id="footer">    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a>    </div><!-- FOOTER --></div></body></html>002E52PORTAL.REPORT.DOCUMENTATION0c2<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 15 (filtered)"><style><!-- /* Font Definitions */ @font-face	{font-family:Wingdings;	panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face	{font-family:"Cambria Math";	panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face	{font-family:Calibri;	panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{margin:0in;	margin-bottom:.0001pt;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}.MsoChpDefault	{font-family:"Calibri",sans-serif;}.MsoPapDefault	{margin-bottom:8.0pt;	line-height:107%;}@page WordSection1	{size:8.5in 11.0in;	margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1	{page:WordSection1;} /* List Definitions */ ol	{margin-bottom:0in;}ul	{margin-bottom:0in;}--></style></head><body lang=EN-US><div class=WordSection1><p class=MsoNormal><b><span style='font-size:14.0pt'>Portal Dashboard Reports</span></b></p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal><b><span style='font-size:12.0pt'>High level dashboardsummarizing Sales, Gross Profit, Margin, AR, and AP</span></b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Month to Date and Year to Date numbers</p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>AR Balance amounts and percentages for the aging periods of current,1-30, 31-60, 61-90, and 90+</p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>AP Balance amounts for the aging periods of current, 1-30, 31-60,61-90, and 90+</p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Drilldown functionality to see detail for Sales, Gross Profit,Margin, and aging for AR and AP</p><p class=MsoNormal><b>&nbsp;</b></p><p class=MsoNormal><b><span style='font-size:12.0pt'>Sales, Gross Profit, andMargin Reports:</span></b></p><p class=MsoNormal><b><span style='font-size:12.0pt'>&nbsp;</span></b></p><p class=MsoNormal><b>MTD Sales</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing daily activity broken out by Sales and GP</p><p class=MsoNormal><b>YTD Sales</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing each month of the current year broken out by Salesand GP</p><p class=MsoNormal><b>Year to Year Sales and GP</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Sales and GP for each of the past few years</p><p class=MsoNormal><b>Year to Year Sales by Month</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Sales by month, comparing each of the past fewyears.</p><p class=MsoNormal><b>Year to Year GP by Month</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing GP by month, comparing each of the past fewyears.</p><p class=MsoNormal><b>MTD Sales by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Month to Date Sales and GP broken out by Salesperson.</p><p class=MsoNormal><b>YTD Sales by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Date Sales and GP broken out by Salesperson.</p><p class=MsoNormal><b>Year to Year Sales by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year Sales broken out by Salesperson</p><p class=MsoNormal><b>Year to Year GP by Salesman</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year GP broken out by Salesperson</p><p class=MsoNormal><b>MTD Sales by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Month to Date Sales and GP broken out by Branch.</p><p class=MsoNormal><b>YTD Sales by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Date Sales and GP broken out by Branch.</p><p class=MsoNormal><b>Year to Year Sales by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year Sales broken out by Branch.</p><p class=MsoNormal><b>Year to Year GP by Branch</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year GP broken out by Branch.</p><p class=MsoNormal><b>MTD Sales by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Month to Date Sales and GP broken out by Region.</p><p class=MsoNormal><b>YTD Sales by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Date Sales and GP broken out by Region.</p><p class=MsoNormal><b>Year to Year Sales by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year Sales broken out by Region.</p><p class=MsoNormal><b>Year to Year GP by Region</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart showing Year to Year GP broken out by Region.</p><p class=MsoListParagraph style='margin-left:0in'>&nbsp;</p><p class=MsoListParagraph style='margin-left:0in'><b><span style='font-size:12.0pt'>AR Reports</span></b></p><p class=MsoListParagraph style='margin-left:0in'><b><span style='font-size:12.0pt'>&nbsp;</span></b></p><p class=MsoNormal><b>Current AR Aging</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Pie chart breaking out all receivables broken out by current, 0-30,31-60, 61-90, and 90+</p><p class=MsoNormal><b>Average AR Aging Days by Year</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart comparing the average days to pay for the past fewyears.</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on a year to see a pie chart showing the AR aging forthe year broken out by 0-30, 31-60, 61-90, and 90+.</p><p class=MsoNormal><b>Average Days to Pay Last 12 Months</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart comparing the average days to pay, by month, for thepast 12 months.</p><p class=MsoNormal><b>Average Days by Month YYYY</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Bar chart comparing the average days to pay for each month inyear YYYY. This option will appear for the past few years with YYYY showing theyear.</p><p class=MsoNormal><b>Customers Needing Aging Attention</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Table report showing the categories of:</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>50 Customers with the most amount owed</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>50 Customers with the most days aged.</p><p class=MsoListParagraph style='margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>50 Customers aged over 30 days where their average aging over thepast 60 days is longer than it has been over the past 1000 days.</p><p class=MsoNormal><b><span style='font-size:12.0pt'>&nbsp;</span></b></p><p class=MsoNormal><b><span style='font-size:12.0pt'>AP Reports</span></b></p><p class=MsoNormal><b>&nbsp;</b></p><p class=MsoNormal><b>Current AP Aging</b></p><p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Pie chart breaking out all payables broken out by current, 0-30,31-60, 61-90, and 90+</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p></div></body></html>002160web_ed_settings.html0c2<html xmlns="http://www.w3.org/1999/xhtml">  <head>    <title>D3 Web Editor Settings</title>    <meta http-equiv="content-type" content="text/html; charset=<!--CHARACTER_SET-->" />    <link rel="stylesheet" type="text/css" href="/db/css/reset.css" media="screen" />    <link rel="stylesheet" type="text/css" href="/db/css/screen.css" media="screen" />    <!--[if IE]>    <link rel="stylesheet" type="text/css" href="/db/css/screen_ie.css" media="screen" />    <![endif]-->    <script src="/db/javascripts/jquery.tools.min.js" type="text/javascript"></script>    <script src="/db/javascripts/global.js" type="text/javascript"></script>  </head>  <body>    <div id="header" class="group">      <div id="logo">D3 Web Editor Settings</div>    </div>        <div id="main" class="group">      <div id="content" class="group">        <div id="section" class="group">          <ul class="tabs group">             <li><a href="#">General Settings</a></li>             <li><a href="#">Accounts</a></li>             <li><a href="#">Program Files</a></li>           </ul>          <div class="panes">             <div class="pane">              <form action="/dbc/WEB.ED.SETTINGS" method="POST">                <fieldset>                  <legend>Compiling Defaults</legend>                  <ul class="form">                    <li class="enable">                      <input type="checkbox" class="checkbox" id="enable_compiling" name="enable_compiling" [ENABLE_COMPILING] />                      <label for="enable_compiling">Enable Compiling</label>                    </li>                    <li>                      <label>Compile Verb:</label>                      <input type="text" class="text" name="compile_verb" value="[COMPILE_VERB]" />                    </li>                    <li>                      <label>Compile Options:</label>                      <input type="text" class="text" name="compile_opts" value="[COMPILE_OPTS]" />                    </li>                    <li>                      <label for="flash">Flash Compile (0 option)</label>                      <input type="checkbox" class="checkbox" id="flash" name="flash_compile" [FLASH_COMPILE] />                    </li>                    <li>                      <label for="catalog">Catalog after compile</label>                      <input type="checkbox" class="checkbox" id="catalog" name="catalog" [CATALOG] />                    </li>                  </ul>                </fieldset>                <fieldset>                  <legend>Options</legend>                  <ul class="form">                    <li>                      <label>Text Size:</label>                      <select name="text_size">                        [TEXT_SIZE_OPTS]                      </select>                    </li>                    <li>                      <label>Default Account:</label>                      <input type="text" class="text" name="default_account" value="[DEFAULT_ACCOUNT]" />                    </li>                    <li>                      <label>Default File:</label>                      <input type="text" class="text" name="default_file" value="[DEFAULT_FILE]"  />                    </li>                  </ul>                </fieldset>                <fieldset>                  <ul>                    <li>                      <input type="checkbox" class="checkbox" id="default" name="global_default" [GLOBAL_DEFAULT] />                      <label for="default">Set as default settings for all users</label>                    </li>                  </ul>                </fieldset>              </form>            </div>             <div class="pane">              <div class="table">                <table cellspacing="0">                  <thead>                    <tr>                      <th>Account</th>                      <th>Password</th>                      <th>Settings</th>                      <th>Options</th>                    </tr>                  </thead>                  <tbody>                  [ACCOUNT_LIST]                  </tbody>                </table>              </div>              <div>                <form action="/dbc/WEB.ED.SETTINGS" method="POST">                  <fieldset>                    <label for="account">Account</label>                    <input type="text" class="text" name="add_account" value="" />                    <input type="submit" value="Add" class="submit"/>                  </fieldset>                </form>              </div>            </div>            <div class="pane">              <div class="table">                <table cellspacing="0">                  <thead>                    <tr>                      <th>Account</th>                      <th>File</th>                      <th>Settings</th>                      <th>Options</th>                    </tr>                  </thead>                  <tbody>                  [FILE_LIST]                  </tbody>                </table>              </div>              <div class="footer_form">                <form action="#">                  <fieldset>                    <label for="account">Account</label>                    <input type="text" class="text" style="margin-right: 10px;"/>                    <label for="account">File</label>                    <input type="text" class="text"/>                    <input type="submit" value="Add" class="submit"/>                  </fieldset>                </form>              </div>            </div>           </div>        </div>      </div>    </div>    <!-- modals -->     <div class="modal" id="edit_account_settings">       <form action="#">        <fieldset>          <legend>Settings for Account: 00000</legend>          <ul class="form">            <li>              <label>Password for LOGTO this account:</label>              <input type="password" class="text"/>            </li>            <li class="enable">              <input type="checkbox" class="checkbox" id="enable_compiling_edit_account_settings"/>              <label for="enable_compiling_edit_account_settings">Enable Compiling</label>            </li>            <li>              <label>Compile Verb:</label>              <input type="text" class="text"/>            </li>            <li>              <label>Compile Options:</label>              <input type="text" class="text"/>            </li>            <li>              <label for="flash_edit_account_settings">Flash Compile (0 option)</label>              <input type="checkbox" class="checkbox" id="flash_edit_account_settings"/>            </li>            <li>              <label for="catalog_edit_account_settings">Catalog after compile</label>              <input type="checkbox" class="checkbox" id="catalog_edit_account_settings"/>            </li>          </ul>        </fieldset>        <div class="buttons">          <input type="submit" value="Save"/>          <input type="submit" value="Cancel" class="close"/>        </div>      </form>    </div>    <div class="modal" id="edit_compile_settings">       <form action="#">        <fieldset>          <legend>Compile Settings for 00000, 00000</legend>          <ul class="form">            <li class="enable">              <input type="checkbox" class="checkbox" id="enable_compiling_edit_compile_settings"/>              <label for="enable_compiling_edit_compile_settings">Enable Compiling</label>            </li>            <li>              <label>Compile Verb:</label>              <input type="text" class="text"/>            </li>            <li>              <label>Compile Options:</label>              <input type="text" class="text"/>            </li>            <li>              <label for="flash_edit_compile_settings">Flash Compile (0 option)</label>              <input type="checkbox" class="checkbox" id="flash_edit_compile_settings"/>            </li>            <li>              <label for="catalog_edit_compile_settings">Catalog after compile</label>              <input type="checkbox" class="checkbox" id="catalog_edit_compile_settings"/>            </li>          </ul>        </fieldset>        <div class="buttons">          <input type="submit" value="Save"/>          <input type="submit" value="Cancel" class="close"/>        </div>      </form>    </div>  </body></html>00110Eadmin_dashboards.html0c2<!-- Add new dashboard form --><script type="text/javascript">dashboard_ids = [<!-- list_of_dashboard_ids -->];</script><div id="dashboard-controls" class="ui-dialog">	<div class="button-pane-dialog">		<button id="save-dashboard" type="button" class="ui-state-default ui-corner-all">Save</button>		<button id="delete-dashboard" type="button" class="ui-state-default ui-corner-all">Delete</button>	</div></div><div id="dashboard-accordion" class="ui-accordion ui-widget ui-helper-reset">	<h3 id='dashboard-properties-header' class="ui-accordion-header ui-helper-reset ui-state-active ui-corner-top"><span class="ui-icon ui-icon-triangle-1-s"></span>Properties</h3>	<div id='dashboard-properties' title='New Dashboard' class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active" style="height: 350px;">			<div id="dashboard-messages"></div>		<form id="new-dashboard-form" method="post" action="/dbc/MVDB.ADMIN">		<div>				<input id="old_dbid" type="hidden" value="<!-- save_dbid -->" name="save_dbid" />			<input type="hidden" value="save_db" name="action" />				<input type="hidden" value="Save" name="save_db" />		</div>				<table>		<tbody><tr>		 <td  align="right">Dashboard ID:</td>		 <td id="dbid-container">		 <!-- edit_dbid -->		 </td>		</tr>		<tr>		 <td align="right">Description:</td>		 <td><input id="db_desc" type="text" value="<!-- db_desc -->" name="db_desc" size="63" /></td>		</tr>		<tr>		 <td align="right">Layout:</td>		 <td><input type="hidden" id="db_layout" name="db_layout" value="<!-- " />		 	<ul class='db-layout'>		 	<!-- db_layout_opts -->			</ul> 	     	    		 </td>		</tr>		<tr>		 <td align="right">Allowed Users:</td>		 <td><input id="db_users" type="text" value="<!-- db_users -->" name="db_users" size="63" /></td>		</tr>		<tr>		<td> </td><td>Leave blank to allow all users. Separate user IDs with commas to restrict acces to specific users.</td>		</tr>		<tr>		 <td align="right">Theme:</td>		 <td><!-- db_theme --></td>		</tr>		<tr>		 <td align="right">Sort Value:</td>		 <td><input id="db_sort" type="text" value="<!-- db_sort -->" name="db_sort" size="8" /></td>		</tr>		</tbody></table>		</form>	</div>	    <h3 class="ui-accordion-header ui-helper-reset ui-state-active ui-corner-top"><span class="ui-icon ui-icon-triangle-1-s"></span> Dashboard</h3>    <div id="dashboard-content" class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active">    		<div id="layout-header" class="one-column area">    		  <h4>HEADER</h4>              <!-- AREA_1_WIDGETS -->    		</div>	    	<div id="layout-body">		    <div class="one-column active">		    	<div class="area">		    	  <h4>AREA 1</h4>                  <!-- AREA_2_WIDGETS -->		    	</div>		    </div>		    <div class="two-column">		    	<div class="area first">		    	  <h4>AREA 1</h4>                  <!-- AREA_2_WIDGETS -->		    	</div>		   	    <div class="area last">		   	      <h4>AREA 2</h4>                  <!-- AREA_3_WIDGETS -->		   	    </div>        		    </div>		    <div class="three-column">		       	<div class="area first">		       	  <h4>AREA 1</h4>                  <!-- AREA_2_WIDGETS -->		       	</div>		    	<div class="area middle">		    	  <h4>AREA 2</h4>                  <!-- AREA_3_WIDGETS -->		    	</div>        		       	<div class="area last">		       	  <h4>AREA 3</h4>                  <!-- AREA_4_WIDGETS -->		        </div>    			    </div>            	    	</div>    		<div id="layout-footer" class="one-column area">    		  <h4>FOOTER</h4>              <!-- AREA_5_WIDGETS -->    		</div>    </div></div>    <div id="widget-toolbox" class="ui-accordion">	<h3 class="widget-header ui-accordion-header ui-state-active ui-state-focus"><span class="ui-icon ui-icon-triangle-1-s"></span>Widgets (draggable)</h3>		<div id="widget-icons"  class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active">		<!-- widget_list -->		</div></div><div id='change-layout-message' title="Change layout?" style="display: none; text-align: left;">	<p>Your layout areas currently have one or more widgets. Clicking 'Change' will move these widgets to the first column area.</p></div>000621login.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>	<link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />	<title>MultiValue Dashboard :: Login</title></head><body onLoad="document.loginform.loginid.focus();">	<div id="header">		<div id="logo">		  <BR /><img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">	   </div>	<!-- HEADER -->	</div>	<div id="dashboard">		<b><!-- ERROR --></b>		<div style="text-align:center;">			<h1><img src="/db/images/graphic_lock.gif" style="vertical-align:bottom;"/> Please Login</h1>			<div style="width:180px;text-align:left;margin:10px auto" id="loginbox">				<form name="loginform" action="<!-- CGI$PATH -->/MVDB.MAIN?dblogin=1" method="post">					<div class="ctrl">						<label for="login">Login</label>						<input id="getlogin" type="text" name="loginid" value="" class="text">					</div>					<div class="ctrl">						<label for="password">Password</label>						<input type="password" name="password" value="" class="password">					</div>						<div class="ctrl">						<input type="submit" value="Login" style="float:right">					</div>					</form>			</div>		</div>		</div>	<div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a></div>	</body></html>000273FCMAP_template.html0c2<!-- Fusion Chart Script -->	<div id="<!-- chart_div_id -->">	</div>	<input type="hidden" class="chartSource" value="/db/Maps/FCMap_[FCMAP_MODULE].swf" />	<input type="hidden" class="chartXML" value="<!-- CHARTXML -->" />	<input type="hidden" class="chartClass" value="fcmap" />	<script type="text/javascript">		// <![CDATA[		   var map = new FusionMaps("/db/Maps/FCMap_[FCMAP_MODULE].swf", "ChartId", "<!-- chart_width -->", "<!-- chart_height -->", "0", "1");		   map.setDataXML("<!-- CHARTXML -->");		   		   map.render("<!-- chart_div_id -->");		// ]]>	</script><!-- end of FC script -->0010C9SAVE.PORTAL.DASHBOARD0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Sales Reports">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Sales Reports">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Margins&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="38%" bgcolor="white">&nbsp;</td><td width="31%" align="center">MDT ~9~</td><td width="31%" align="center">YTD ~10~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="38%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY NET INCOME CHART">Net Income</a></td><td width="31%" align="right">~11~</td><td width="31%" align="right">~12~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="38%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY AVERAGE DAYS CHART">Average Days To Pay</a></td><td width="31%" align="center">~13~</td><td width="31%" align="center">~14~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=Portal Margins&udview=Portal Margins">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center">AP Balance</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000251FW_template.html0c2<!-- start FW script -->        <div id="<!-- chart_div_id -->">        </div>        <script type="text/javascript">        FusionCharts.ready(function () {            var myChart = new FusionCharts({              "type": "[FW_MODULE]",              "renderAt": "<!-- chart_div_id -->",              "width": "<!-- chart_width -->",              "height": "<!-- chart_height -->",              "dataFormat": "xml",              "dataSource": "<!-- CHARTXML -->"            });          myChart.render();        });        </script><!-- end of FW script -->000603PORTAL.DASHBOARD.SALES.GP0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL MARGINS&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000163db_inner_template0c2<div id="area1" class="area"> <!-- AREA1 --></div><div class="content <!-- column_style -->">  <div id="area2" class="area">   <!-- AREA2 -->  </div>  <div id="area3" class="area">   <!-- AREA3 -->  </div>  <div id="area4" class="area">   <!-- AREA4 -->  </div></div><div id="area5" class="area">  <!-- AREA5 --></div>000C40PORTAL.DASHBOARD.SALES.AR0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center"></td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>0013E6DEMO.FINANCIALS.DASHBOARD0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><th width=24% align="left" bgcolor="red">Sales</th><th width=19% bgcolor="white">&nbsp;</th><th width=19% bgcolor="white">&nbsp;</th><th width=19% bgcolor="white">&nbsp;</th><th width=19% bgcolor="white">&nbsp;</th></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% bgcolor="white">&nbsp;</td><td width=19% align="center">YTD~1~</td><td width=19% align="center">YTD~2~</td><td width=19% align="center">%(+/-)</td><td width=19% align="center">FY~3~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO REV.GP SALES CHART&udview=DEMO REV.GP SALES CHART&dd=dd&udpos1=1&udval1=REVENUES">Sales</a></td><td width=19% align="right">~4~</td><td width=19% align="right">~5~</td><td width=19% align="right">~6~</td><td width=19% align="right">~7~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO REV.GP SALES CHART&udview=DEMO REV.GP SALES CHART&dd=dd&udpos1=1&udval1=GROSSPROFIT">Gross Profit (GP$)</a></td><td width=19% align="right">~8~</td><td width=19% align="right">~9~</td><td width=19% align="right">~10~</td><td width=19% align="right">~11~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES CHART&udview=DEMO SALES CHART&dd=dd&udpos1=1&udval1=MARGIN">Margin (GP%)</a></td><td width=19% align="right">~12~</td><td width=19% align="right">~13~</td><td width=19% align="right"></td><td width=19% align="right">~14~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES CHART&udview=DEMO SALES CHART&dd=dd&udpos1=1&udval1=PARTS$">Parts Revenue ($)</a></td><td width=19% align="right">~15~</td><td width=19% align="right">~16~</td><td width=19% align="right">~17~</td><td width=19% align="right">~18~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES PERCENTS&udview=DEMO SALES PERCENTS&dd=dd&udpos1=1&udval1=PARTSPERCENT">Parts Revenue (%)</a></td><td width=19% align="right">~19~</td><td width=19% align="right">~20~</td><td width=19% align="right"></td><td width=19% align="right">~21~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES CHART&udview=DEMO SALES CHART&dd=dd&udpos1=1&udval1=SERVICES$">Services Revenue ($)</a></td><td width=19% align="right">~22~</td><td width=19% align="right">~23~</td><td width=19% align="right">~24~</td><td width=19% align="right">~25~</td></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><td width=24% align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO SALES PERCENTS&udview=DEMO SALES PERCENTS&dd=dd&udpos1=1&udval1=SERVICESPERCENT">Services Revenue (%)</a></td><td width=19% align="right">~26~</td><td width=19% align="right">~27~</td><td width=19% align="right"></td><td width=19% align="right">~28~</td></tr></thead></table><table width="100%" cols="4" border="0"><table width="100%" cols="4" border="0"><table width="100%" cols="4" border="0"><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><thead><tr><th width=24% align="left" bgcolor="red">Financials</th><th width=25% bgcolor="white">&nbsp;</th><th width=25% bgcolor="white">&nbsp;</th><th width=25% bgcolor="white">&nbsp;</th></tr></thead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" bgcolor="white">&nbsp;</td><td width="25%" align="center">~29~ thru ~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="center">~32~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO NET INCOME CHART&udview=DEMO NET INCOME CHART&dd=dd">Net Income</a></td><td width="25%" align="right">~33~</td><td width="25%" align="right">~34~</td><td width="25%" align="right">~35~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DEMO AVERAGE DAYS CHART&udview=DEMO AVERAGE DAYS CHART&dd=dd">Average Days To Pay</a></td><td width="25%" align="center">~44~</td><td width="25%" align="center">~45~</td><td width="25%" align="center">~46~</td></table>0005A9admin_login.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>	<link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />	<link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <!-- SITE_THEME -->	<title>MultiValue Dashboard :: Administrative Login</title></head><body onLoad="document.loginform.adminpass.focus();">	<div id="header">		<div id="logo">			<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">	   </div>	<!-- HEADER -->	</div>	<div id="dashboard">		<b><!-- ERROR --></b>		<div style="text-align:center;">			<h1><img src="/db/images/graphic_lock.gif" style="vertical-align:bottom;"/> Please Login</h1>			<div style="width:180px;text-align:left;margin:10px auto" id="loginbox">				<form name="loginform" action="<!-- CGI$PATH -->/MVDB.ADMIN" method="post">					<div class="ctrl">						<label for="password">Password</label>						<input type="password" name="adminpass" value="" class="password">					</div>						<div class="ctrl">						<input type="submit" value="Login" style="float:right">					</div>					</form>			</div>		</div>		</div>	<div id="signature">MultiValue Dashboard - copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a></div>	</body></html>000E90PORTAL.DASHBOARD.SALES.GP.AR0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Gross Profit (GP$)</a></td><td width=31% align="right">~5~</td><td width=31% align="right">~6~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL MARGINS&udview=Portal Margins">Margin (GP%)</a></td><td width=31% align="right">~7~</td><td width=31% align="right">~8~</td></tr></tdead></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red"><font color="#FF0000">Financials</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="left"><a href="/dbc/MVDB.MAIN?dbname=DISPLAY PORTAL BALANCE PIE CHART&udview=DISPLAY PORTAL BALANCE PIE CHART">Balances as of ~15~</a></td><td width="25%" align="center">AR Balance</td><td width="25%" align="center">AR Balance %</td><td width="25%" align="center"> </td><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Current</td><td width="25%" align="right">~30~</td><td width="25%" align="center">~31~</td><td width="25%" align="right">~32~</td></table></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">1 - 30</td><td width="25%" align="right">~16~</td><td width="25%" align="center">~17~</td><td width="25%" align="right">~18~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">31 - 60</td><td width="25%" align="right">~19~</td><td width="25%" align="center">~20~</td><td width="25%" align="right">~21~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">61 - 90</td><td width="25%" align="right">~22~</td><td width="25%" align="center">~23~</td><td width="25%" align="right">~24~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">90+</td><td width="25%" align="right">~25~</td><td width="25%" align="center">~26~</td><td width="25%" align="right">~27~</td></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><td width="25%" align="center">Total</td><td width="25%" align="right">~28~</td><td width="25%" align="center"></td><td width="25%" align="right">~29~</td></table><table width="100%" border="0" cellspacing=".01%" cellpadding=".01%"><td width="100%">&nbsp;</td></table></div>000E1Eed_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" ><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->" />    <title>Editing <!-- ITEM --></title>    <script language="Javascript" type="text/javascript" src="/db/edit_area/edit_area_full.js"></script>    <script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>	    <!--script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script--><script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>    	        <script src="/db/javascripts/jquery.form.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>    	        <!--script src="/db/javascripts/shortcut.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script-->    <script language="Javascript" type="text/javascript">	    	        	CALLS = <!-- NUM_OF_CALLS -->;        INCLUDES = <!-- NUM_OF_INCLUDES -->;        FILES = <!-- NUM_OF_FILES -->;                        ARCHIVES = <!-- NUM_OF_ARCHIVES -->;        CALLS_CONTENT = '<!-- EA_CALLS_CONTENT -->';        INCLUDES_CONTENT = '<!-- EA_INCLUDES_CONTENT -->';        FILES_CONTENT = '<!-- EA_FILES_CONTENT -->';        ARCHIVE_CONTENT = '<!-- EA_ARCHIVE_CONTENT -->';        LAST_COMPILE = '<!-- LAST_COMPILE -->';               	<!-- ED_SCRIPTS -->        // initialisation        	editAreaLoader.init({            id: "file_1" // id of the textarea to transform            ,start_highlight: true  // if start with highlight            ,allow_resize: "both"            ,allow_toggle: false            ,word_wrap: true            ,language: "en"            ,begin_toolbar: "load, save"            ,toolbar: "search, go_to_line, |, undo, redo, |, select_font,|, change_smooth_selection, highlight, reset_highlight, word_wrap, |, help"             ,save_callback: 'saveCompileItem'            ,EA_load_callback: "editAreaLoadComplete"             ,load_callback: 'openItem'            ,fullscreen: true            ,closebottomtab_callback: 'closeActiveTab'            ,syntax: "<!-- SYNTAX -->"        });	    <!-- WINDOW_HEIGHT - Put this where it needs to go -->    </script>        <script src="/db/javascripts/edit_area_init.js" type="text/javascript" charset="<!--CHARACTER_SET-->"></script>     <script language="javascript" type="text/javascript">       	<!-- ED_INIT_SCRIPT -->    </script>       <link rel="StyleSheet" href="/db/css/web_editor.css" media="screen" type="text/css" />       <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />       <!--[if lte IE 8]>       <link rel="Stylesheet" href="/db/css/ie.css" media="screen" type="text/css" />       <![endif]--></head><body><div id="open-item-container" title="Open Item" style="display:none;"><span id="messages"> </span><form id="open-item-form" name="open-item-form" action="" method="post"><label>Account:</label><input id="ed_acct" type="text" value="" name="ed_acct" /><label>File: </label><input id="ed_file" type="text" value="" name="ed_file"/><label>Item: </label><input id="ed_item" type="text" value="" name="ed_item"/><input id="open-action" type="hidden" name="action" value="open" /></form></div><div id="compile-output-container" title="Compile output"><div id="compile-content"></div></div><!-- HEADER --><hr /><!-- BODY --><hr /><!-- FOOTER --><!-- COMPILE_OUTPUT --><hr /></body></html>000082pdf_inner_template0c2<div id="areas" class="area"> <!-- AREA1 --><!-- AREA2 --><!-- AREA3 --><!-- AREA4 --><!-- AREA5 --></div>000202WIDGET.DIV0c2<div class="widget">  <div class="widget_header">   <div class="widget_controls"><!-- CONTROLS --></div>   <h3 class="title"><!-- TITLE --></h3>   <!-- INPUT -->   <div class="widget_content_header"><!-- QUAD2 --><!-- QUAD1 -->        <div class="clear"></div>     </div>  </div>  <div class="widget_content"><div class="widget_content_padding"><!-- WIDGETDATA --></div></div>  <div class="widget_content_footer">   <!-- QUAD3 --><!-- QUAD4 -->  <div class="clear" ></div> </div></div>000348PORTAL.DASHBOARD.SALES0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><th width=38% align="left" bgcolor="red">Sales</th><th width=31% bgcolor="white">&nbsp;</th><th width=31% bgcolor="white">&nbsp;</th></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% bgcolor="white">&nbsp;</td><td width=31% align="center">MTD ~1~</td><td width=31% align="center">YTD ~2~</td></tr></tdead></table><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=38% align="left"><a href="/dbc/MVDB.MAIN?dbname=PORTAL SALES REPORTS">Sales</a></td><td width=31% align="right">~3~</td><td width=31% align="right">~4~</td></tr></tdead></table></div>001A1BPORTAL.REPORT.RUN.DOCUMENTATION0c2<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 15 (filtered)"><style><!-- /* Font Definitions */ @font-face	{font-family:Wingdings;	panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face	{font-family:"Cambria Math";	panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face	{font-family:Calibri;	panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:0in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}.MsoChpDefault	{font-family:"Calibri",sans-serif;}.MsoPapDefault	{margin-bottom:8.0pt;	line-height:107%;}@page WordSection1	{size:8.5in 11.0in;	margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1	{page:WordSection1;} /* List Definitions */ ol	{margin-bottom:0in;}ul	{margin-bottom:0in;}--></style></head><body lang=EN-US><div class=WordSection1><p class=MsoNormal style='margin-bottom:12.0pt'><b><span style='font-size:14.0pt;line-height:107%'>Running the Portal Dashboard Reports</span></b></p><p class=MsoListParagraphCxSpFirst style='margin-bottom:12.0pt;text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Run the Portal Reports Setup to configure the elements necessaryto run the reports. See the Portal Reports Setup Documentation </p><p class=MsoListParagraphCxSpMiddle style='margin-bottom:12.0pt;text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Run the Portal Dashboard to view the summary of sales andfinancials.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>The dashboard wants to have calculations refreshed within thepast 15 minutes. If, when starting the dashboard, it has been over 15 minutessince the last calculations, a temporary display will show that figures areupdating. After a satisfactory delay of a minute or so, click the Go buttonand the summary of sales and financials page should display. If not, repeatuntil it displays.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Leaving the dashboard running with Auto-Refresh slider activated forabout every 5 minutes will automatically refresh the dashboard display andtrigger a background recalculation of numbers when necessary.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>The title section of each dashboard page shows the date and timethe last calculations were run.</p><p class=MsoListParagraphCxSpMiddle style='margin-bottom:12.0pt;text-indent:-.25in'><span style='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>On the summary of sales and financials, those labels underlinedand displayed in a color can drilled down on to display additional dashboards.</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on <u><span style='color:#C45911'>Sales</span></u> toinitiate the Portal Sales Reports dashboard</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on <u><span style='color:#C45911'>Gross Profit (GP$)</span></u><spanstyle='color:#C45911'> </span>to initiate the same Portal Sales Reportsdashboard</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on <u><span style='color:#C45911'>Margin (GP%)</span></u><spanstyle='color:#C45911'> </span>to initiate the Portal Year to Year Marginsdashboard</p><p class=MsoListParagraphCxSpMiddle style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;margin-left:1.0in;text-indent:-.25in'><spanstyle='font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;</span></span>Drill down on the <u><span style='color:#C45911'>Balances as ofMM-DD-YY</span></u><span style='color:#C45911'> </span>to initiate the AR andAP dashboard</p><p class=MsoListParagraphCxSpLast style='margin-bottom:12.0pt;text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>After doing a drill downs, the browser back button can be used tonavigate back to the previous dashboard, or simply clicking on the PortalDashboard tab will re-initialize back to the summary of sales and financials.</p></div></body></html>00015Cadmin_menu.html0c2<ol class="admin_nav_links">  <li><a href="<!-- CGI$PATH -->/MVDB.ADMIN?action=users" class="bullet_link">Users</a>  <li><a href="<!-- CGI$PATH -->/MVDB.ADMIN?action=widgets" class="bullet_link">Widgets</a>  <li><a href="<!-- CGI$PATH -->/MVDB.ADMIN?action=dashboards" class="bullet_link">Dashboards</a>    <!-- RSS --></ol>000281message.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>    <link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <title>MultiValue Dashboard :: Login</title></head><body><div id="header"><div id="logo">  <br /><img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard"></div></div><div id="dashboard"><h1><!-- MSG_TITLE --></h1><!-- MSG_CONTENT --></div></body></html>000C78dbtemplate0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>    <meta http-equiv="X-UA-Compatible" content="IE=edge,IE=11,IE=10,IE=9,IE=8,IE=7" />    <link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/print.css" type="text/css" charset="utf-8" media="print" />    <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]-->            <!-- SITE_THEME -->        <!-- end styles -->                <script type="text/javascript" src="/db/javascripts/prototype-1.6.1.js"></script>    <script type="text/javascript" src="/db/javascripts/jquery-1.3.2.min.js"></script>    <script type="text/javascript" src="/db/javascripts/jquery-ui-1.8.custom.min.js"></script>    <script type="text/javascript">jQuery.noConflict();</script>    <script type="text/javascript" src="/db/fw/fusioncharts.js"></script>    <script type="text/javascript" src="/db/javascripts/sortable.js"></script>    <script type="text/javascript" src="/db/javascripts/tablesort.js"></script>    <script type="text/javascript" src="/db/javascripts/grid-widget.js"></script>    <script type="text/javascript" src="/db/javascripts/printing.js"></script>    <script type="text/javascript" src="/db/javascripts/slider.js"></script>        <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />    <style type="text/css" media="screen" >            /* put the left rounded edge on the track */            #track1-left {                position: absolute;                width: 5px;                height: 9px;                background: transparent url(/db/images/bg_slider_track.png) no-repeat top left;            }                        /* put the track and the right rounded edge on the track */            #track1 {                background: transparent url(/db/images/bg_slider_track.png) no-repeat top right;            }    </style>    <script>            jQuery(function() {                    jQuery(".datepicker").datepicker();            });    </script>    <title>MultiValue Dashboard</title>    <!-- REFRESH -->    </head><body><div id="printFrame" class="printme"></div><div id="header"><!-- HEADER --></div>    <div style="clear:both"></div>    <div id="logo">        <img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">    </div>    <!-- RefreshSlider --><div id="dashboardWrapper">    <div id="dashboard">        <!-- DASHBOARD -->        <div class="clear"></div>    </div>    <div class="clear"></div>    <br/></div><div id="footer">    <!-- FOOTER -->    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a></div></div><script type="text/javascript">/*jQuery(document).ready(function(){       jQuery('.widgetized').tablesort();     });*/</script>    </body></html>000548rss_edit.html0c2<form action="<!-- CGI$PATH -->/RSS.MAINT" method="post"><input type="hidden" name="id" value="<!-- feed_id -->"><input type="hidden" name="action" value="save"><table><tr> <td align="right">Feed ID:</td> <td><!-- edit_feed_id --></td></tr><tr> <td align="right">Name:</td> <td><input type="text" name="feed_name" value="<!-- feed_name -->"></td></tr><tr> <td align="right">Description:</td> <td><textarea name="feed_desc" rows="5" cols="50"><!-- feed_desc --></textarea></td></tr><tr> <td align="right">Select Subroutine:</td> <td><input type="text" name="sel_sub" value="<!-- sel_sub -->"> <!-- sel_sub_msg --> <a target="RSS.BP_<!-- sel_sub -->" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=<!-- sel_sub -->">Edit Source</a></td></tr><tr> <td align="right">Item Subroutine:</td> <td><input type="text" name="item_sub" value="<!-- item_sub -->"> <!-- item_sub_msg --> <a target="RSS.BP_<!-- item_sub -->" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=<!-- item_sub -->">Edit Source</a></td></tr><tr>  <td align="right">Modes:</td>  <td><textarea name="feed_modes" rows="10" cols="50"><!-- feed_modes --></textarea></td></tr><!-- EXTRA --><tr><td colspan="2"><input type="submit" name="save_feed" value="Save">&nbsp;<input type="submit" name="cancel_edit" value="Cancel"></td> </tr></table></form>000B5Frss_admin_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>	<meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/><link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" /> <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" /> <link rel="StyleSheet" href="/db/css/jquery-ui.css" media="screen" type="text/css" />  <script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>	<script src="/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>            	<script src="/db/javascripts/jquery.form.js" type="text/javascript" charset="utf-8"></script>    	        <script src="/db/javascripts/jquery.url.js" type="text/javascript" charset="utf-8"></script> 		<script src="/db/javascripts/rss_admin.js" type="text/javascript"></script><!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]--><!-- SITE_THEME --><title>RSS Feed Admin</title></head><body><div id="header"><!-- HEADER -->  <div id="logo">  	<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">  </div></div><div id="mainWrapper">		<div id="rss-dialog" title="New RSS Feed">		<div id="rss-messages"></div>		<form id="rss-form" method="post" action="/dbc/RSS.MAINT">			<input id="feed_id" type="hidden" value="NEW" name="id"/>			<input type="hidden" value="save" name="action"/>			<input type="hidden" value="Save" name="save_feed"/>						<table>			<tbody><tr>			 <td align="right">Feed ID:</td>			 <td><input id="new_id" type="text" value="" name="new_id"/></td>			</tr>			<tr>			 <td align="right">Name:</td>			 <td><input id="feed_name" type="text" value="" name="feed_name"/></td>			</tr>			<tr>			 <td align="right">Description:</td>			 <td><textarea id="feed_desc" cols="50" rows="5" name="feed_desc"></textarea></td>			</tr>			<tr>			 <td align="right">Select Subroutine:</td>			 <td><input id="select_sub" type="text" value="" name="sel_sub"/>  <a id="edit-sub-link" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&amp;ed_item=" target="RSS.BP_">Edit Source</a></td>			</tr>			<tr>			 <td align="right">Item Subroutine:</td>			 <td><input id="item_sub" type="text" value="" name="item_sub"/>  <a id="edit-item-link" href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&amp;ed_item=" target="RSS.BP_">Edit Source</a></td>			</tr>			<tr>			  <td align="right">Modes:</td>			  <td><textarea id="feed_modes" cols="50" rows="10" name="feed_modes"></textarea></td>			</tr>			</tbody></table>		</form>	</div><!-- ADMIN_MAIN --></div><div id="footer">    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard/?tldb">Zumasys</a>    </div></div></body></html>0008E5RefreshSlider0c2<!-- outerTrackWrapper -->    <script type="text/javascript" language="javascript">  // <![CDATA[  // horizontal slider control  var slider1 = new Control.Slider('handle1', 'track1', {    range: $R(0, 9),    values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],    sliderValue: 1, // won't work if set to 0 due to a bug in script.aculo.us    onSlide: function(v) { showRefresh(v); },    onChange: function(v) { if ($('horizontal-slider')) {                    $('horizontal-slider').value = v; $('slider-form').submit();                     }    }  });  function setSliderValue(slider, value) {    // due to onChange code above we need this or     // a 0 will be put in the text box when you delete the value    //if (value == '') return;    if (isNaN(value)) {      slider.setValue(0.1);    } else {      slider.setValue(value);    }  }  function showRefresh(value) {    var dispRate = '';    switch (value) {      case 0:        dispRate = 'Auto-Refresh: Off';        break ;      case 1:        dispRate = 'Auto-Refresh: 15 seconds';        break ;      case 2:        dispRate = 'Auto-Refresh: 30 seconds';        break ;            case 3:        dispRate = 'Auto-Refresh: 1 minute';        break ;      case 4:        dispRate = 'Auto-Refresh: 2 minutes';        break ;            case 5:        dispRate = 'Auto-Refresh: 5 minutes';        break ;            case 6:        dispRate = 'Auto-Refresh: 10 minutes';        break ;            case 7:        dispRate = 'Auto-Refresh: 15 minutes';        break ;            case 8:        dispRate = 'Auto-Refresh: 30 minutes';        break ;            case 9:        dispRate = 'Auto-Refresh: 1 hour';        break ;            default:        dispRate = 'Auto-Refresh: Off';        break ;    }    document.getElementById('dispRate').innerHTML = dispRate;  }  var refreshRate = '<!-- REFRESH_RATE -->';  showRefresh(parseInt(refreshRate));    if (refreshRate != '') {    setSliderValue(slider1, refreshRate);  } else {    setSliderValue(slider1, 0.1);    }  // ]]></script><form name="reForm" method="post" action="" id="slider-form">  <input type="hidden" id="horizontal-slider" name="refresh" value="<!-- REFRESH_RATE -->" /></form>         00026APORTAL.DOCUMENTATION0c2  <br class="brClear" />  <div class="widget_content"><table width="100%" border="1" cellspacing=".01%" cellpadding=".01%"><tdead><tr><td width=100% align="center"><a href="/dbc/MVDB.MAIN?dbname=PORTAL RUN DOCUMENTATION">Running the Portal Dashboard Reports</a></td></tr><tr><td width=100% align="center"><a href="/dbc/MVDB.MAIN?dbname=PORTAL.SETUP.DOCUMENTATION">Portal Reports Setup Documentation</a></td></tr><tr><td width=100% align="center"><a href="/dbc/MVDB.MAIN?dbname=PORTAL.REPORTS.DOCUMENTATION">Glossary of Portal Dashboard Reports</a></td></tr></tdead></table></div>002FA4PORTAL.SETUP.DOCUMENTATION0c2<html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><meta name=Generator content="Microsoft Word 15 (filtered)"><style><!-- /* Font Definitions */ @font-face	{font-family:Wingdings;	panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face	{font-family:"Cambria Math";	panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face	{font-family:Calibri;	panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:0in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle	{margin-top:0in;	margin-right:0in;	margin-bottom:0in;	margin-left:.5in;	margin-bottom:.0001pt;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast	{margin-top:0in;	margin-right:0in;	margin-bottom:8.0pt;	margin-left:.5in;	line-height:107%;	font-size:11.0pt;	font-family:"Calibri",sans-serif;}.MsoChpDefault	{font-family:"Calibri",sans-serif;}.MsoPapDefault	{margin-bottom:8.0pt;	line-height:107%;}@page WordSection1	{size:8.5in 11.0in;	margin:1.0in 1.0in 1.0in 1.0in;}div.WordSection1	{page:WordSection1;} /* List Definitions */ ol	{margin-bottom:0in;}ul	{margin-bottom:0in;}--></style></head><body lang=EN-US><div class=WordSection1><p class=MsoNormal><b><span style='font-size:14.0pt;line-height:107%'>PortalSales Report Setup:</span></b></p><p class=MsoNormal>This setup process identifies the fields necessary forderiving sales, gross profit, and margin numbers. It allows for sales numbersto be broken out by sales person and, if applicable, by branch and/or region.</p><p class=MsoNormal><b>Sales File Account</b>  Multi-value systems normallyhave multiple accounts where data may reside. The sales reports will be drivenby a file of sales. This field needs the name of the account where that fileresides.</p><p class=MsoNormal><b>Name of Sales File</b>  The name of the file containingthe sales information.</p><p class=MsoNormal><b>Date of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that contains the date the sale was complete.</p><p class=MsoNormal><b>Month of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that displays the numeric value of the month the salewas completed. If the system doesnt have this dictionary item, there shouldbe one created using the Date of Sale Dict Name as a guide.</p><p class=MsoNormal><b>Year of Sale Dict Name </b> The name of the dictionaryitem in the sales file that displays the 4 digit year the sale was completed. Ifthe system doesnt have this dictionary item, there should be one created usingthe Date of Sale Dict Name as a guide.</p><p class=MsoNormal><b>Amount of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that contains the total amount of the sales transaction.This dictionary </p><p class=MsoNormal><b>Cost of Sale Dict Name</b>  The name of the dictionaryitem in the sales file that contains the cost of the sales transaction. Thisis used for determining gross profit and margin. If this information is notavailable in the system, the field should be left blank, disabling reportsassociated with gross profit and margin.</p><p class=MsoNormal><b>Salesman Dict Name</b>  The name of the dictionary itemin the sales file that contains the primary salesman on the transaction. Mostsystems will have a salesman code in the sales file and another file thatcontains the actual names of the salesmen. This dictionary item should be onethat displays the actual name. </p><p class=MsoNormal><b>Branch Dict Name</b>  The name of the dictionary itemin the sales file that contains the branch being credited with thetransaction. Most systems will have a branch code in the sales file andanother file that contains the actual names of the branches. This dictionaryitem should be one that displays the actual name. This field only applies ifsales can be broken out by a branch. </p><p class=MsoNormal><b>Region Dict Name</b>  The name of the dictionary itemin the sales file that contains the region being credited with thetransaction. Most systems will have a region code in the sales file andanother file that contains the actual names of the regions. This dictionaryitem should be one that displays the actual name. This field only applies ifsales can be broken out by a region. </p><p class=MsoNormal><b>Go</b>  No validation is made on Portal Sales ReportSetup fields until this button is clicked. When validating, checks are madefor:</p><p class=MsoListParagraphCxSpFirst style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid file name in the account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Existence of each of the dictionary names entered</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Salesman Dict Name looking to another file for the actual name ofthe salesman. An ignorable warning is issued if that is not the case.</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Branch Dict Name looking to another file for the actual name ofthe branch. An ignorable warning is issued if that is not the case.</p><p class=MsoListParagraphCxSpLast style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Region Dict Name looking to another file for the actual name ofthe region. An ignorable warning is issued if that is not the case.</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal><b><span style='font-size:14.0pt;line-height:107%'>Portal ARReport Setup:</span></b></p><p class=MsoNormal>This setup process identifies the fields necessary for evaluatingaccount receivables. It breaks out statistics by amounts, aging categories, percentages,and periods for comparison purposes. It also identifies by customer whenviewing most amounts owed, most days aged, and accounts with significant changesin payment patterns.</p><p class=MsoNormal><b>AR File Account</b>  The AR reports will be driven by afile of receivables or invoices. This field needs the name of the accountwhere that file resides.</p><p class=MsoNormal><b>Name of AR File</b>  The name of the file containing thereceivables with amounts and payment information.</p><p class=MsoNormal><b>Due Date Dict Name</b>  The name of the dictionary itemin the AR file showing the due date of the receivable.</p><p class=MsoNormal><b>Date Paid Dict Name</b>  The name of the dictionary itemin the AR file showing the date the receivable was paid.</p><p class=MsoNormal><b>Invoice Amount Dict Name</b>  The name of the dictionaryitem in the AR file that contains the original amount owed. </p><p class=MsoNormal><b>Remaining Balance Dict Name</b>  The name of thedictionary item in the AR file that contains the remaining balance. </p><p class=MsoNormal><b>Customer Dict Name</b>  The name of the dictionary itemin the AR file that contains the customer. Most systems will have a customercode in the AR file and another file that contains the actual names of the customers.This dictionary item should be one that displays the actual name. </p><p class=MsoNormal><b>Go</b>  No validation is made on Portal AR Report Setupfields until this button is clicked. When validating, checks are made for:</p><p class=MsoListParagraphCxSpFirst style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid file name in the account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Existence of each of the dictionary names entered</p><p class=MsoListParagraphCxSpLast style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Customer Dict Name looking to another file for the actual name ofthe salesman. An ignorable warning is issued if that is not the case.</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal><b><span style='font-size:14.0pt;line-height:107%'>Portal APReport Setup:</span></b></p><p class=MsoNormal>This setup process identifies the fields necessary for evaluatingaccount payables. It breaks out statistics by amounts, aging categories, and percentages.</p><p class=MsoNormal><b>AP File Account</b>  The AP reports will be driven by afile of payables. This field needs the name of the account where that fileresides.</p><p class=MsoNormal><b>Name of AP File</b>  The name of the file containing thepayables with amounts and payment information.</p><p class=MsoNormal><b>Due Date Dict Name</b>  The name of the dictionary itemin the AP file showing the due date of the payable.</p><p class=MsoNormal><b>Date Paid Dict Name</b>  The name of the dictionary itemin the AP file showing the date the payable was paid.</p><p class=MsoNormal><b>Invoice Amount Dict Name</b>  The name of the dictionaryitem in the AP file that contains the original amount owed. </p><p class=MsoNormal><b>Remaining Balance Dict Name</b>  The name of thedictionary item in the AP file that contains the remaining balance. </p><p class=MsoNormal><b>Go</b>  No validation is made on Portal AP Report Setupfields until this button is clicked. When validating, checks are made for:</p><p class=MsoListParagraphCxSpFirst style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid account</p><p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Valid file name in the account</p><p class=MsoListParagraphCxSpLast style='text-indent:-.25in'><spanstyle='font-family:Symbol'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Existence of each of the dictionary names entered</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p><p class=MsoNormal>&nbsp;</p></div></body></html>000666pdftemplate0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=<!--CHARACTER_SET-->"/>    <link rel="stylesheet" href="/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" />    <link rel="stylesheet" href="/db/css/application.css" type="text/css" charset="utf-8" />    <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]-->            <!-- SITE_THEME -->        <!-- end styles -->                <script type="text/javascript" src="/db/javascripts/prototype-1.6.1.js"></script>    <script type="text/javascript" src="/db/javascripts/jquery-1.3.2.min.js"></script>    <script type="text/javascript">jQuery.noConflict();</script>    <script type="text/javascript" src="/db/fw/fusioncharts.js"></script>    <script type="text/javascript" src="/db/javascripts/sortable.js"></script>    <script type="text/javascript" src="/db/javascripts/tablesort.js"></script>    <script type="text/javascript" src="/db/javascripts/grid-widget.js"></script>    <script type="text/javascript" src="/db/javascripts/printing.js"></script>    <script type="text/javascript" src="/db/javascripts/slider.js"></script>        <title>MultiValue Dashboard</title>    </head><body><div style="clear:both"></div><div id="logo">    <img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard"></div><div id="dashboardWrapper">    <div id="dashboard">        <!-- DASHBOARD -->        <div class="clear"></div>    </div>    <div class="clear"></div>    <br/></div></body></html>00022Bwidget_debug.html0c2<table width="100%"><tr><td>Widget Name:</td><td><!-- WIDGET_NAME --></td></tr><tr><td>Widget Subroutine:</td><td><!-- WIDGET_SUB_NAME --> <!-- WIDGET_EDIT_LINK --></td></tr></table><!-- DEBUG_REASON --><br /><!-- REMEDY -->Runtime errors for <!-- WIDGET_SUB_NAME --><br /><table width="100%"><tr><th>Date / Time</th><th>User</th><th>Error</th></tr><!-- RUNTIME_ERRORS --><table width="100%"><tr><td colspan="2">WIDGET.USER.DATA values:</td></tr><tr><th>Position</th><th>Value</th></tr><!-- WIDGET_USER_DATA --></table>000F48pkg_list_template.html0c2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><script src="/db/javascripts/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>	    <script src="http://alpha.bravo:83/db/javascripts/jquery-ui-1.7.2.custom.min.js" type="text/javascript" charset="utf-8"></script>            	    <script src="http://alpha.bravo:83/db/javascripts/jquery.form.js" type="text/javascript" charset="utf-8"></script>    	        	<script src="http://alpha.bravo:83/db/javascripts/jquery.url.js" type="text/javascript" charset="utf-8"></script> 	<script src="http://alpha.bravo:83/db/javascripts/initAdminTemplate.js" type="text/javascript" charset="utf-8"></script> 	<script src="http://alpha.bravo:83/db/javascripts/sortable.js" type="text/javascript" charset="utf-8"></script> 	<script src="http://alpha.bravo:83/db/javascripts/tablesort.js" type="text/javascript" charset="utf-8"></script> 		<script type="text/javascript"> 		$(function() {			$("#tabs").tabs();			$("#accordion").accordion({ autoHeight: false });			$('#edit_dialog').dialog({ autoOpen: false, modal: true });			$('#edit_form').click(function() {				$('#edit_dialog').dialog('open');			});			$('#delete_dialog').dialog({ autoOpen: false, modal: true });			$('#delete_form').click(function() {				$('#delete_dialog').dialog('open');			});		});			</script> 		<link rel="stylesheet" href="http://alpha.bravo:83/db/css/reset-fonts-grids.css" type="text/css" charset="utf-8" /> 	<link rel="stylesheet" href="http://alpha.bravo:83/db/css/application.css" type="text/css" charset="utf-8" /> 	<link rel="stylesheet" href="http://alpha.bravo:83/db/css/ingrid.css" type="text/css" charset="utf-8" />     <link rel="StyleSheet" href="http://alpha.bravo:83/db/css/jquery-ui.css" media="screen" type="text/css" />     <!--[if lte IE 7]><link href="/db/css/ie7.css" rel="stylesheet" type="text/css" media="screen" /><![endif]--> 	 <!-- SITE_THEME --><title>Package Management</title></head><body><div id="edit_dialog"><p>      <form id="new-file-form" method="get" action="/dbc/MVPKG.MAIN">       <div id="new-file-messages"></div>       <table><tbody>      <tr>         <td colspan="2">File:<input id="file-name" type="text" value="" name="file_name"/></td>       </tr>      <tr>        <td><input type="radio" name="file_dict" value="DICT" id="file-dict"></td><td>DICT</td>      </tr>      <tr>        <td><input type="radio" name="file_dict" value="DATA" id="file-dict"></td><td>DATA</td>      </tr>      <tr>         <td><input type="radio" name="items_type" vaue="savedlist" id="items-type"></td><td>Saved List<br/>        file:<input type="text" name="savedlist_file" id="savedlist-file"><br/>        list:<input type="text" name="savedlist_id" id="savedlist-id"></td>      </tr>       <tr>         <td><input type="radio" name="items_type" value="all" id="items-type"></td><td>All Items</td>      </tr>       <tr>         <td><input type="radio" name="items_type" value="items" id="items-type"></td>         <td>Item: <input type="text" name="items_items" id="items-items"></td>       </tr>       </tbody></table>       <input type="hidden" value="save_user" name="action"/>       </form>       <div class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix">        <button type="button" class="ui-state-default ui-corner-all">Cancel</button>        <button type="button" class="ui-state-default ui-corner-all">Save</button>      </div></p></div><div id="header"><!-- HEADER -->  <div id="logo">  	<img src="<!-- SITE_LOGO -->" alt="MultiValue Dashboard">  </div></div><div id="mainWrapper"><!-- ADMIN_MAIN --></div></div><div id="footer">    <div id="signature">MultiValue Dashboard - Copyright &copy; 2020 <a href="http://www.zumasys.com/products/multivalue-dashboard">Zumasys</a>    </div></div></body></html>0007E2MVDB.DEFS0c00000B1Administrator0c21AdminConfigPDFConfigDashboard License UsageCode TemplatesD3 Runtime ErrorsSystem - SessionShow Vars11122551121212ADMINadminAdmin30000091Chart Demo0c22Demo-PieDemo-SS LineDemo-DoughnutDemo-SS ColDemo- MS Col2223312312ADMINguestadminDemonstration ChartsTheme 11000062Demo Financial Company0c21DEMO FINANCIAL PICTURE21ADMINguestadminDemo Financial Company00005CDEMO AVERAGE DAYS CHART0c21DEMO AVERAGE DAYS CHART21dummydisplay average days chart00003DDEMO NET INCOME CHART0c21DEMO NET INCOME CHART21dummy00005BDEMO REV.GP SALES CHART0c21DEMO REV.GP SALES CHART21dummyDisplay Rev.Gp Sales Chart000047DEMO SALES CHART0c21DEMO SALES CHART21dummyDisplay Sales Chart000050DEMO SALES PERCENTS0c21DEMO SALES PERCENTS21dummyDisplay Sales Percents000055Emailed Report0c21Emailed Report21Display contents of an emailed report link000041Icons0c21Icon Gallery11ADMINguestadminIcon Gallery50000085PORTAL REPORTS SETUP0c21PORTAL SALES REPORT SETUPPORTAL AR REPORT SETUPPORTAL AP REPORT SETUP222123Portal Reports Setup00003DPORTAL MARGINS0c21PORTAL MARGINS21dummyPortal Margins000046PORTAL AR REPORTS0c22PORTAL AR REPORTS31dummyPortal AR Reports00004FPORTAL SALES REPORTS0c21PORTAL SALES REPORTS21dummyPortal Sales Reports00003EPORTAL DASHBOARD0c21PORTAL DASHBOARD21Portal Dashboard000061PORTAL.SETUP.DOCUMENTATION0c21PORTAL SETUP DOCUMENTATION21dummyPortal Setup Documentation000068PORTAL.REPORTS.DOCUMENTATION0c21PORTAL.REPORTS.DOCUMENTATION21dummyPortal Reports Documentation00005FPORTAL DASHBOARD DOCUMENTATION0c23PORTAL.DOCUMENTATION31Portal Dashboard Documentation00005CPORTAL RUN DOCUMENTATION0c21PORTAL.RUN.DOCUMENTATION21dummyPortal Run Documentation00007FDISPLAY PORTAL BALANCE PIE CHART0c21PORTAL AR REPORTSPORTAL AP REPORTS2212dummyPie chart to display AR & AP balances0000B3DICT_MVDB.MAP.DATA0c0000022NAME0c1A0Map NameG0*1L4000001FLONG0c1A2Long NameL25000023INTERNAL.ID0c1A0IDG1*1L10000021SHORT0c1A1Short NameL10046BE6MVDB.MAP.DATA0c0000023FrenchGuiana#GF.CY.CY0c2CYCayenne000018Fiji#FJ.CE.RW0c2RWRewa00001CMacau#MO.IL.CO0c2COColoane00001CChina2#CN.GD0c2GDGuangdong000024FranceDepartment#FR.ES0c2ESEssonne000026FranceDepartment#FR.FI0c2FIFinistere000019Congo#CG.CU0c2CUCuvette000019Algeria#DZ.AR0c2ARAdrar00001AMacedonia#MK.ST0c2STStip00001AIndiana#0570c2HAHamilton000016NewYork#0290c2ERErie00001FNorthCarolina#0970c2IRIredell000018Georgia#2490c2SCSchley00001BIreland#0170c2MEM&iacute;00002CNorthAmerica#0190c2KNSt. Kitts &amp; Nevis000016Kansas#0510c2ELEllis00001FSouthCarolina#0230c2CSChester00001AIllinois#0870c2JHJohnson00001AMissouri#0070c2AUAudrain000024WorldwithCountries#1460c2IRIreland00001CNorthDakota#0210c2DIDickey000018Texas#0790c2COCCochran000017Ohio#0410c2DLDelaware000023NewMexico#0130c2DADo&ntilde;a Ana000018Nebraska#0110c2BOBoone00001AWyoming#0330c2SHSheridan000024Europewithcountries#0150c2GRGreece000018Malaysia#0010c2JOJohor000019Tennessee#1010c2LELewis00001EScotland#0180c2LALanarkshire000017NewWorld#1910c2IZIraq000018Oklahoma#0530c2GNGrant000014Iowa#1050c2JNJones00001DAlaska#2700c2WHWade Hampton000017Texas#4410c2TAYTaylor000025NewCaledonia#NC.NO.PT0c2PTPouembout000019Ontario#480c2WAWaterloo000019Montenegro#190c2TITivat000019MiddleEast#140c2SYSyria000019Switzerland#260c2JUJura000023SouthEuropeanRegion#120c2CSSerbia000019NewWorld#390c2DZAlgeria00003AQuebec#110c2GAGasp&eacute;sie-&Icirc;les-de-la-Madeleine000014Kenya#020c2COCoast00001BPuertoRico#570c2GMGuayama00001ABahamas#150c2HTHope Town000017Japan#450c2YAYamagata000024NorwayRegion#130c2OT&Oslash;stfold000026PolandCounties#PL.DS.LM0c2DLMLegnica000027MarshallIsland#MH.MH.KW0c2KWKwajalein000021Macedonia#MK.SU0c2SUStudenicani00001FHongKong#HK.KI0c2KIKwai Tsing000019Palau#PW.PE0c2PEPeleliu000018Uganda#UG.BW0c2BWBukwa00001CVietnam#VN.HY0c2HYHung Yen00001EGambia#GM.UR0c2URUpper River000034Nigeria#NG.FC0c2FCAbuja(Federal Capital Territory)00001BSenegal#SN.KL0c2KLKaolack000025Morocco#MA.CO0c2COChaouia Ouardigha00001DBurma#MM.KN0c2KNKayin State00001CMissouri#1890c2SOSt. Louis000024Ireland#0180c2MOMuineach&aacute;in000020NorthAmerica#0200c2LCSt. Lucia00001DCalifornia#0930c2SYSiskiyou000025Alaska#0900c2FAFairbanks North Star000017Texas#2610c2KEDKenedy00001DLouisiana#0050c2ASAscension000018Georgia#0690c2CFCoffee000022WorldwithCountries#1470c2ITItaly000018Minnesota#1210c2POPope00001AKentucky#1050c2HKHickman000019Michigan#1150c2MRMonroe00001AFlorida#0330c2ESEscambia00001DMississippi#0150c2CRCarroll000025Europewithcountries#0160c2HUHungary000018Malaysia#0020c2KEKedah000019Arkansas#0050c2BABaxter00001EEngland#0010c2BEBedfordshire00001FWestVirginia#0330c2HIHarrison00001DScotland#0190c2MIMidlothian000019NewWorld#1920c2IEIsrael00001BAsia3#0340c2PHPhilippines000018Virginia#1810c2SRSurry00001AColorado#0130c2BOBoulder00001BSouthDakota#0510c2GRGrant00001AAlabama#0290c2CBCleburne00001ENorwayRegion#140c2RORogaland00001BAustralia#VI0c2VIVictoria00001BOntario#490c2WEWellington00001AMontenegro#200c2ULUlcinj00001EMiddleEast#150c2TITajikistan000022SouthEuropeanRegion#130c2ESSpain000018NewWorld#400c2AOAngola00002BQuebec#120c2CAChaudi&egrave;re-Appalaches000016Kenya#030c2EAEastern000017Bahamas#160c2INInagua000018Japan#460c2YMYamaguchi00001DFiji#FJ.EA.LM0c2LMLomaiviti000027PolandCounties#PL.PK.PM0c2PPMPrzemysl00001CMacedonia#MK.TL0c2TLBitola00001ARwanda#RW.ES0c2ESEastern00001AUganda#UG.TY0c2TYMityana00001BMacedonia#MK.CA0c2CACaska000026EquatorialGuinea#GQ.BS0c2BSBioko Sur000015Iran#IR.IL0c2ILIlam000021FranceDepartment#FR.EU0c2EUEure000021FranceDepartment#FR.GA0c2GAGard000023Mauritius#MU.PA0c2PAPamplemousses000019Nigeria#NG.EN0c2ENEnugu000022Algeria#DZ.AT0c2ATAin Temouchent00001AAlgeria#DZ.BJ0c2BJBejaia000018Texas#4430c2TERTerrell000019Indiana#0590c2HNHancock000017NewYork#0310c2ESEssex00001FNorthCarolina#0990c2JAJackson00001BVirginia#0010c2ACAccomack000019Georgia#2510c2SRScreven000023Ireland#0190c2OFUa F&aacute;ilghe000037NorthAmerica#0210c2VCSt. Vincent &amp; the Grenadines00001AKansas#0530c2EWEllsworth000024SouthCarolina#0250c2CTChesterfield000017Illinois#0890c2KAKane000018Missouri#0090c2BYBarry000023WorldwithCountries#1480c2LVLatvia00001CNorthDakota#0230c2DVDivide000015Texas#0810c2COKCoke000013Ohio#0430c2ERErie000019Spain#0010c2ANAndalucia000018NewMexico#0150c2EDEddy00001CNebraska#0130c2BXBox Butte00001AWyoming#0350c2SUSublette000025Europewithcountries#0170c2ISIceland00001BMalaysia#0030c2KLKelantan00001BEngland#0020c2BRBerkshire00001BTennessee#1030c2LILincoln000018Scotland#0200c2MOMoray000019NewWorld#1930c2JOJordan000018Oklahoma#0550c2GEGreer000015Iowa#1070c2KEKeokuk00001DColorado#0140c2BRBroomfield000026NorwayRegion#150c2SOSogn og Fjordane000015Ontario#500c2YOYork000020Montenegro#210c2ZA&#381;abljak00001AMiddleEast#160c2TUTurkey000023SouthEuropeanRegion#140c2TKTurkey000026USACentralRegion#460c2SDSouth Dakota000017NewWorld#410c2BJBenin000015Quebec#130c2LVLaval00001EPuertoRico#590c2GLGuayanilla00001CBahamas#170c2LILong Island000018Japan#470c2YNYamanashi000023MarshallIsland#MH.MH.ME0c2MEMejit000026Philippines#PH.SK0c2SKSultan Kudarat00001FCoteDivoire#CI.SV0c2SVSavanes000020Macedonia#MK.AV0c2AVKavadartsi00001ARussia#RU.IV0c2IVIvanovo000025Russia#RU.KB0c2KBKabardino-Balkaria00001AEurope2#EU.PL0c2PLPoland00001BQatar#QA.DA0c2DAAd Dawhah00001BAlgeria#DZ.TL0c2TLTlemcen000019Panama#PA.PN0c2PNPanama000022Uzbekistan#UZ.QA0c2QAKashkadarya000018Alabama#0310c2CFCoffee000019Vermont#0010c2ADAddison000022Ireland#0200c2RORos Com&aacute;n00002CNorthAmerica#0220c2TTTrinidad &amp; Tobago00001BCalifornia#0950c2SOSolano000015Texas#2630c2KETKent00001ELouisiana#0070c2AUAssumption00001AGeorgia#0710c2CQColquitt00002AWorldwithCountries#1490c2LNLiechtenstein00001AMinnesota#1230c2RMRamsey00001AKentucky#1070c2HOHopkins00001BMichigan#1170c2MNMontcalm000019Florida#0350c2FLFlagler000016Spain#0020c2ARAragon00001FMississippi#0170c2CHChickasaw000025Europewithcountries#0180c2IEIreland000019Malaysia#0040c2MEMelaka000019Arkansas#0070c2BEBenton000021England#0030c2BUBuckinghamshire00001EWestVirginia#0350c2JAJackson00001DScotland#0210c2NANairnshire000019NewWorld#1940c2KUKuwait000022Asia3#0360c2RURussian Federation000019Virginia#1830c2SSSussex00001AColorado#0150c2CHChaffee00001DSouthDakota#0530c2GEGregory00001CWorld#NA0c2NANorth America000031NorwayRegion#160c2STS&oslash;r-Tr&oslash;ndelag000024Australia#WA0c2WAWestern Australia000020MiddleEast#170c2TXTurkmenistan000023SouthEuropeanRegion#150c2CYCyprus00001ANewWorld#420c2BWBotswana000021Quebec#140c2LALanaudi&egrave;re000016Kenya#050c2NANairobi00001DBahamas#180c2MCMangrove Cay000019Jordan#JO.JA0c2JAJarash000029CentralAfricanRepublic#CF.MB0c2MBMbomou000026Philippines#PH.SL0c2SLSouthern Leyte00001DMongolia#MN.OG0c2OGOmnogovi00001DPhilippines#PH.AK0c2AKAklan00001EPhilippines#PH.BA0c2BABataan000026Russia#RU.KC0c2KCKarachay-Cherkessia000024Libya#LY.HZ0c2HZAl Hizam al Akhdar000020Algeria#DZ.TM0c2TMTamanghasset000019Algeria#DZ.BL0c2BLBlida000016Texas#4450c2TEYTerry00001AIndiana#0610c2HRHarrison00001ANewYork#0330c2FRFranklin000020NorthCarolina#1010c2JOJohnston00001CVirginia#0030c2ALAlbemarle00001AGeorgia#2530c2SMSeminole00001AIreland#0210c2SLSligeach000024NorthAmerica#0230c2USUnited States000017Kansas#0550c2FIFinney000021SouthCarolina#0270c2CDClarendon00001BIllinois#0910c2KNKankakee000019Missouri#0110c2BRBarton000026WorldwithCountries#1500c2LTLithuania00001ANorthDakota#0250c2DNDunn000018Texas#0830c2COLColeman000018Ohio#0450c2FAFairfield000018Spain#0030c2ASAsturias000019NewMexico#0170c2GRGrant000017Nebraska#0150c2BYBoyd00001CWyoming#0370c2SWSweetwater000023Europewithcountries#0190c2ITItaly000022Malaysia#0050c2NSNegeri Sembilan000020England#0040c2CACambridgeshire00001ATennessee#1050c2LOLoudon000019Scotland#0220c2OROrkney00001ANewWorld#1950c2LBLebanon000019Oklahoma#0570c2HAHarmon000016Iowa#1090c2KOKossuth00001ENorwayRegion#170c2TETelemark000020Moldova#460c2BAB&#259;l&#355;i000026MiddleEast#180c2AEUnitedArabEmirates000029SouthEuropeanRegion#160c2VAVatican City00001FUSACentralRegion#480c2TXTexas00001ENewWorld#430c2BFBurkina Faso00001BQuebec#150c2LULaurentides00001CKenya#060c2NENorth Eastern00001CPuertoRico#610c2GBGuaynabo00001ABahamas#190c2MGMayaguana000022Macau#MO.MA.SA0c2SASanto Antonio000019Fiji#FJ.CE.SR0c2SRSerua00001AMacau#MO.IL.CT0c2CTCotai000019Ghana#GH.AH0c2AHAshanti00001DPhilippines#PH.SM0c2SMSamar000020Mongolia#MN.OH0c2OHOvorkhangai00001EMacedonia#MK.BN0c2BNBrvenica00001DPhilippines#PH.AL0c2ALAlbay00001CRussia#RU.KD0c2KDKrasnodar00001CMicronesia#FM.CH0c2CHChuuk000019Guinea#GN.KA0c2KAKankan000017Benin#BJ.DO0c2DODonga00001BAlgeria#DZ.TN0c2TNTindouf00001DAlgeria#DZ.BM0c2BMBoumerdes00001CSouthDakota#0550c2HAHaakon000019Alabama#0330c2CRColbert00001CVermont#0030c2BEBennington000021Ireland#0220c2TITiobraid Arainn000020NorthAmerica#0240c2GLGreenland00001BCalifornia#0970c2SMSonoma000015Texas#2650c2KERKerr00001DLouisiana#0090c2AVAvoyelles00001AGeorgia#0730c2CUColumbia000027WorldwithCountries#1510c2LULuxembourg00001CMinnesota#1250c2RLRed Lake00001AKentucky#1090c2JAJackson00001EMichigan#1190c2MOMontmorency00001AFlorida#0370c2FRFranklin00002BSpain#0040c2BABaleares (Balearic Islands)00001DMississippi#0190c2COChoctaw000024Europewithcountries#0200c2LVLatvia000019Malaysia#0060c2PAPahang000018Arkansas#0090c2BOBoone00001AEngland#0050c2CHCheshire000020WestVirginia#0370c2JEJefferson00001FScotland#0230c2PBPeeblesshire000017NewWorld#1960c2MUOman000019Asia3#0380c2SGSingapore00001BVirginia#1850c2TATazewell00001BColorado#0170c2CECheyenne000020NewCaledonia#NC.NO.PY0c2PYPoya00001BNorwayRegion#180c2TRTroms000016Moldova#470c2CACahul00001EMiddleEast#190c2UZUzbekistan000022USASouthWestRegion#150c2HIHawaii000019NewWorld#440c2BIBurundi000028Quebec#160c2MOMont&eacute;r&eacute;gie000015Kenya#070c2NYNyanza00001FBahamas#200c2MIMoore's Island00001FLiberia#LR.GB0c2GBGrand Bassa00001CMacedonia#MK.CE0c2CECentar00001BRussia#RU.KE0c2KEKemerovo000019Guinea#GN.KB0c2KBKoubia00001FCameroon#CM.NW0c2NWNord-Ouest000021Lebanon#LE.JL0c2JLMount Lebanon000021FranceDepartment#FR.GE0c2GEGers000024Cambodia#KH.OC0c2OCOddar Meancheay00001EAlgeria#DZ.TO0c2TOTizi Ouzou000016Tonga#TO.EU0c2EU'Eua000026Kazakhstan#KZ.WK0c2WKWest Kazakhstan000019Senegal#SN.LG0c2LGLouga00001DTexas#4470c2THRThrockmorton00001BIndiana#0630c2HDHendricks000018NewYork#0350c2FUFulton00001DNorthCarolina#1030c2JNJones00001CVirginia#0050c2AEAlleghany00001AGeorgia#2550c2SPSpalding00001DIreland#0230c2WAPort Lairge000022NorthAmerica#0250c2PRPuerto Rico000015Kansas#0570c2FOFord000020SouthCarolina#0290c2CLColleton00001AIllinois#0930c2KDKendall000018Missouri#0130c2BABates000026WorldwithCountries#1520c2MKMacedonia00001ANorthDakota#0270c2EDEddy000017Texas#0850c2CONCollin000016Ohio#0470c2FYFayette000015Spain#0050c2CECeuta00001DNewMexico#0190c2GUGuadalupe000018Nebraska#0170c2BRBrown000017Wyoming#0390c2TETeton00002BEuropewithcountries#0210c2LILiechtenstein000018Malaysia#0070c2PEPerak00001AEngland#0060c2COCornwall00001ATennessee#1070c2MCMcMinn00001DScotland#0240c2PEPerthshire000018NewWorld#1970c2OMQatar000019Oklahoma#0590c2HRHarper000012Iowa#1110c2LELee000019Asia3#0390c2LKSri Lanka000019Wisconsin#0010c2ADAdams000020NorwayRegion#190c2VAVest-Agder000023Moldova#480c2CUChi&#351;in&#259;u000019MiddleEast#200c2YMYemen00001ANewWorld#450c2CMCameroon000027Quebec#170c2CQCentre-du-Qu&eacute;bec00001AKenya#080c2RVRift Valley00001APuertoRico#630c2GRGurabo00001FBahamas#210c2NWNew Providence000021Macau#MO.MA.SC0c2SCSao Lourenco000022MarshallIsland#MH.MH.MI0c2MIMili00001CMacedonia#MK.UG0c2UGStruga00001CSudan#SD.UN0c2UNUpper Nile000026Kazakhstan#KZ.EK0c2EKEast Kazakhstan000028Philippines#PH.AN0c2ANAgusan del Norte000026Libya#LY.JI0c2JIAl Jifarah(Al Jfara)00001CBotswana#BW.KW0c2KWKweneng000019China2#CN.HA0c2HAHainan000016Nauru#NR.IJ0c2IJIjuw00001AAlgeria#DZ.TP0c2TPTipaza00001CSouthDakota#0570c2HMHamlin000019Alabama#0350c2CNConecuh000020Australia2#QLD0c2QLDQueensland00001BVermont#0050c2CACaledonia000019Missouri#1950c2SASaline00001FIreland#0240c2WEIarmh&iacute;000025NorthAmerica#0260c2KYCayman Islands00001FCalifornia#0990c2SLStanislaus000017Texas#2670c2KIMKimble00001ELouisiana#0110c2BEBeauregard000024Virginia#7300c2PBPetersburg (City)000016Georgia#0750c2COCook000022WorldwithCountries#1530c2MTMalta00001BMinnesota#1270c2RWRedwood00001CKentucky#1110c2JEJefferson00001BMichigan#1210c2MUMuskegon000019Florida#0390c2GAGadsden000029Spain#0060c2CACanarias (Canary Islands)00001FMississippi#0210c2CLClaiborne000027Europewithcountries#0220c2LTLithuania000019Malaysia#0080c2PRPerlis00001AArkansas#0110c2BRBradley000019England#0070c2CUCumbria00001EWestVirginia#0390c2KAKanawha00001FScotland#0250c2RERenfrewshire00001FNewWorld#1980c2SASaudi Arabia000019Virginia#1870c2WAWarren00001EColorado#0190c2CLClear Creek00001ENorwayRegion#200c2VEVestfold000027Moldova#490c2SNSt&acirc;nga Nistrului00001CNewWorld#460c2CVCape Verde000016Kenya#090c2WEWestern00001CBahamas#220c2NBNorth Abaco000025PolandCounties#PL.LU.LM0c2LLMLublin000024MarshallIsland#MH.MH.MJ0c2MJMajuro00001FLiberia#LR.GD0c2GDGrand Gedeh00001DGhana#GH.BA0c2BABrong-Ahafo000027Mauritania#MR.HC0c2HCHodh Ech Chargui00001CMacedonia#MK.TR0c2TRTearce00001AUganda#UG.UU0c2UUKanungu000019Uganda#UG.WA0c2WAWakiso000019Malawi#MW.SA0c2SASalima000019Russia#RU.KG0c2KGKaluga000019Guinea#GN.KD0c2KDKindia000018China2#CN.HB0c2HBHebei00001AGambia#GM.WE0c2WEWestern000022Bhutan#BT.WP0c2WPWangdi Phodrang00001BWisconsin#0030c2ASAshland000016Texas#4490c2TITTitus000017Indiana#0650c2HYHenry000019NewYork#0370c2GEGenesee00001BNorthCarolina#1050c2LELee000021Maryland#5100c2BABaltimore City000019Virginia#0070c2AMAmelia00001AGeorgia#2570c2SEStephens00001DIreland#0250c2WXLoch Garman000019Kansas#0590c2FRFranklin000022SouthCarolina#0310c2DADarlington000017Illinois#0950c2KOKnox000019Missouri#0150c2BTBenton000024WorldwithCountries#1540c2MVMoldova00001CNorthDakota#0290c2EMEmmons00001ETexas#0870c2CSWCollingsworth000024Virginia#5500c2CPChesapeake (City)000017Ohio#0490c2FRFranklin000019Spain#0070c2CNCantabria00001BNewMexico#0210c2HAHarding00001ANebraska#0190c2BFBuffalo000017Wyoming#0410c2UIUinta000028Europewithcountries#0230c2LULuxembourg00001FMalaysia#0090c2PPPulau Pinang00001CEngland#0080c2DEDerbyshire00001BTennessee#1090c2MYMcNairy000026Scotland#0260c2RCRoss &amp; Cromarty000018NewWorld#1990c2SYSyria00001AOklahoma#0610c2HSHaskell000013Iowa#1130c2LILinn00001ENorwayRegion#210c2SVSvalbard00001CMoldova#500c2EDEdine&#355;00002ANewWorld#470c2CPCentral African Republic00001BPuertoRico#650c2HAHatillo00001DBahamas#230c2NNNorth Andros000017Macau#MO.MA.SE0c2SESe00001BFiji#FJ.CE.TL0c2TLTailevu000020Philippines#PH.SQ0c2SQSiquijor00001CMacedonia#MK.BR0c2BRBerovo000027Macedonia#MK.CH0c2CHCesinovo Oblesevo00001EPhilippines#PH.AP0c2APApayao00001DRussia#RU.KH0c2KHKhabarovsk000019China2#CN.YN0c2YNYunnan000029Guinea#GN.KE0c2KEK&eacute;rouan&eacute;00001ETurkmenistan#TM.LE0c2LELebap00001AAlgeria#DZ.TR0c2TRTiaret00001ANamibia#NA.ER0c2ERErongo00001AColorado#0210c2COConejos00001ASouthDakota#0590c2HNHand000017Alabama#0370c2CSCoosa00001CVermont#0070c2CHChittenden00001BMissouri#1970c2SYSchuyler000026Ireland#0260c2WICill Mhant&aacute;in00001BCalifornia#1010c2SUSutter000015Texas#2690c2KINKing00001DLouisiana#0130c2BIBienville000018Georgia#0770c2CWCoweta000023WorldwithCountries#1550c2MCMonaco00001CMinnesota#1290c2RERenville00001CKentucky#1130c2JSJessamine00001AMichigan#1230c2NENewaygo00001BFlorida#0410c2GIGilchrist000022Spain#0080c2CLCastilla-La Mancha00001CMississippi#0230c2CKClarke000027Europewithcountries#0240c2MKMacedonia000018Malaysia#0100c2SASabah00001AArkansas#0130c2CACalhoun000017England#0090c2DVDevon000020SouthAmerica#0010c2ARArgentina00001CWestVirginia#0410c2LELewis000020Scotland#0270c2RORoxburghshire000025NewWorld#2000c2AEUnitedArabEmirates000018Asia3#0420c2THThailand000013USA#HI0c2HIHawaii00001FNorwayRegion#220c2JMJan Mayen000023Moldova#510c2GAG&#259;g&#259;uzia000016NewWorld#480c2TDChad000020Bahamas#240c2NENorth Eleuthera000017Fiji#FJ.EA.LU0c2LULau000026MarshallIsland#MH.MH.ML0c2MLMaloelap000019Algeria#DZ.CH0c2CHChlef00001DMauritania#MR.GO0c2GOGorgol000020Philippines#PH.SR0c2SRSorsogon00001EMacedonia#MK.BS0c2BSBosilovo00001AMacedonia#MK.CI0c2CICair00001FPhilippines#PH.AQ0c2AQAntique00001FPhilippines#PH.BG0c2BGBenguet00001ARussia#RU.KI0c2KIKarelia00001BQatar#QA.US0c2USUmm Salal000024FranceDepartment#FR.GI0c2GIGironde00001EAlgeria#DZ.TS0c2TSTissemsilt00002ASaoTomeandPrincipe#ST.AG0c2AGAgua Grande00001AWisconsin#0050c2BABarron000024Alaska#2800c2WPWrangell-Petersburg00001ATexas#4510c2TOGTom Green000018Indiana#0670c2HOHoward000018NewYork#0390c2GRGreene00001ENorthCarolina#1070c2LNLenoir00001AVirginia#0090c2AHAmherst000019Georgia#2590c2STStewart000022Ireland#0270c2NLNorthern Ireland000016Kansas#0610c2GEGeary00001ESouthCarolina#0330c2DIDillon000017Illinois#0970c2LALake00001CMissouri#0170c2BNBollinger000027WorldwithCountries#1560c2MGMontenegro00001CNorthDakota#0310c2FOFoster000019Texas#0890c2CORColorado000015Ohio#0510c2FUFulton00001FSpain#0090c2CYCastilla y Leon00001BNewMexico#0230c2HIHidalgo000017Nebraska#0210c2BUBurt00001AWyoming#0430c2WAWashakie000023Europewithcountries#0250c2MTMalta00001AMalaysia#0110c2SRSarawak000018England#0100c2DODorset000019Tennessee#1110c2MAMacon00001ESouthAmerica#0020c2BOBolivia00001FScotland#0280c2SESelkirkshire000018NewWorld#2010c2YMYemen000019Oklahoma#0630c2HUHughes000015Iowa#1150c2LOLouisa000030MadagascarRegions#MG.FI.HM0c2HMHaute Matsiatra00001EBahamas#250c2RIRagged Island00001FGuatemala#010c2AVAlta Verapaz000022Moldova#520c2LAL&#259;pu&#351;na00001AVenezuela#010c2ZAmazonas000019NewWorld#490c2KMComoros00001FPuertoRico#670c2HOHormigueros00001AAlgeria#DZ.BS0c2BSBiskra000023Burma#MM.MD0c2MDMandalay Division000018Jordan#JO.IR0c2IRIrbid00001FMacedonia#MK.VA0c2VAValandovo000027Philippines#PH.SS0c2SSSurigao del Sur000017Niger#NE.DF0c2DFDiffa000019China2#CN.XZ0c2XZXizang000025CoteDivoire#CI.BS0c2BSBas-Sassandra000018China2#CN.HE0c2HEHenan000022Madagascar#MG.AS0c2ASAntsiranana00001CEurope2#EU.PT0c2PTPortugal00001DVirginia#1910c2WSWashington00001BColorado#0230c2CSCostilla00001CSouthDakota#0610c2HSHanson00001BAlabama#0390c2CVCovington000017Vermont#0090c2ESEssex00001BMissouri#1990c2SLScotland00001BCalifornia#1030c2TETehama000017Alaska#1000c2HAHaines000017Texas#2710c2KIEKinney00001BLouisiana#0150c2BOBossier00001AGeorgia#0790c2CDCrawford000028WorldwithCountries#1570c2NLNetherlands000018Minnesota#1310c2RIRice00001AKentucky#1150c2JOJohnson00001AMichigan#1250c2OKOakland000018Florida#0430c2GLGlades000019Spain#0100c2CTCatalonia00001AMississippi#0250c2CYClay000025Europewithcountries#0260c2MDMoldova00001BMalaysia#0120c2SLSelangor00001AArkansas#0150c2CRCarroll000018England#0110c2DUDurham00001DSouthAmerica#0030c2BRBrazil00001EWestVirginia#0430c2LILincoln00001BScotland#0290c2SHShetland00001ENewWorld#2020c2PRPuerto Rico000018Bahamas#260c2RCRum Cay000011USA#IA0c2IAIowa00001FGuatemala#020c2BVBaja Verapaz000016Moldova#530c2OROrhei000020Mozambique#010c2CDCabo Delgado000023Venezuela#020c2BAnzo&aacute;tegui000023USACentralRegion#550c2WIWisconsin000018Portugal#020c2AVAveiro00001FNewWorld#500c2CICote d Ivoire000019Algeria#DZ.BT0c2BTBatna000025Mauritania#MR.HG0c2HGHodh El Gharbi000029Philippines#PH.ST0c2STSurigao del Norte00001EEastTimor#TL.MT0c2MTManatuto00001BMacedonia#MK.BU0c2BUButel00001EMacedonia#MK.DA0c2DADebartsa000026Philippines#PH.AS0c2ASAgusan del Sur00001FPhilippines#PH.BI0c2BIBiliran00001CRussia#RU.KK0c2KKKhakassia000027EquatorialGuinea#GQ.CS0c2CSCentro Sur00001BQatar#QA.WA0c2WAAl Wakrah00002BIran#IR.KB0c2KBKohgiluyeh and Buyer Ahmed000029FranceDepartment#FR.HA0c2HAHautes Alpes00002AFalklandIsland#NA.FK0c2FKFalkland Island00001ACapeVerde#CV.PA0c2PAPaul00002ABrazilRegion#BR.NE0c2NENorth East Region000014Iowa#1170c2LULucas00001CWisconsin#0070c2BYBayfield000018Alaska#2820c2YAYakutat000017Texas#4530c2TRATravis00001CIndiana#0690c2HUHuntington00001ANewYork#0410c2HAHamilton00001FNorthCarolina#1090c2LILincoln00001DVirginia#0110c2APAppomattox000018Georgia#2610c2SUSumter000015Kansas#0630c2GOGove000022SouthCarolina#0350c2DODorchester000022Virginia#7350c2PQPoquoson (City)00001BIllinois#0990c2LSLa Salle000018Missouri#0190c2BOBoone000023WorldwithCountries#1580c2NONorway000023NorthDakota#0330c2GVGolden Valley000016Texas#0910c2COMComal000015Ohio#0530c2GAGallia000024Spain#0110c2CVCommunidad Valencian000017NewMexico#0250c2LELea000019Nebraska#0230c2BLButler000018Wyoming#0450c2WEWeston000024Europewithcountries#0270c2MCMonaco00001DMalaysia#0130c2TETerengganu000017England#0120c2ESEssex00001BTennessee#1130c2MDMadison00001CSouthAmerica#0040c2CLChile000020Scotland#0300c2STStirlingshire000021NewWorld#2030c2KYCayman Islands00001AOklahoma#0650c2JAJackson000029MadagascarRegions#MG.FI.HO0c2HOIhorombe000014World8#010c2ASAsia00001DBahamas#270c2SSSan Salvador000020Guatemala#030c2CMChimaltenango000017Moldova#540c2SOSoroca000018Mozambique#020c2GAGaza000017Venezuela#030c2CApure000020Chile#010c2VSValpara&iacute;so000016Portugal#030c2BEBeja000032NewWorld#510c2CDDemocratic Republic of the Congo00001BPuertoRico#690c2HUHumacao00001AAlgeria#DZ.BU0c2BUBouira00001EMacedonia#MK.UM0c2UMKumanovo000020Macedonia#MK.VC0c2VCVranestica00001CPhilippines#PH.SU0c2SUSulu000020Tanzania#TZ.PN0c2PNPemba North00001EHongKong#HK.KU0c2KUKwun Tong000029CoteDivoire#CI.VB0c2VBVallee du Bandama00001ALaos#LA.PH0c2PHPhongsali00001BMacedonia#MK.DB0c2DBDebar00001BRussia#RU.KL0c2KLKalmykia000019Uganda#UG.DO0c2DODokolo00001EMadagascar#MG.TL0c2TLToliara00001EVietnam#VN.KG0c2KGKien Giang000020Mauritius#MU.PL0c2PLPort Louis00001FVirginia#1930c2WEWestmoreland00001AColorado#0250c2CRCrowley00001DSouthDakota#0630c2HDHarding00001AAlabama#0410c2CWCrenshaw00001AVermont#0110c2FRFranklin000018Missouri#2010c2SCScott00001CCalifornia#1050c2TRTrinity000018Texas#2730c2KLEKleberg000019Louisiana#0170c2CACaddo000017Georgia#0810c2CPCrisp000023WorldwithCountries#1590c2PLPoland000018Minnesota#1330c2RCRock000019Kentucky#1170c2KEKenton000019Michigan#1270c2OAOceana000016Florida#0450c2GUGulf00001BSpain#0120c2EXExtremadura00001DMississippi#0270c2CMCoahoma000028Europewithcountries#0280c2MOMontenegro000019Arkansas#0170c2CHChicot000021England#0130c2GLGloucestershire00001FSouthAmerica#0050c2COColombia00001CWestVirginia#0450c2LOLogan00001DScotland#0310c2SUSutherland000016World8#020c2EUEurope00001CBahamas#280c2SBSouth Abaco00001DGuatemala#040c2CQChiquimula000018Moldova#550c2TITighina00001DMozambique#030c2INInhambane000018Venezuela#040c2DAragua000045Chile#020c2AIAis&eacute;n del General Carlos Iba&ntilde;ezdel Campo000017Portugal#040c2BRBraga00001ANewWorld#520c2DJDjibouti000021Burma#MM.MG0c2MGMagway Division000018Jordan#JO.KA0c2KAKarak000021Macedonia#MK.VD0c2VDKisela Voda000017Bhutan#BT.GA0c2GAGasa000025CentralAmerica2#CE.GT0c2GTGuatemala00001EPhilippines#PH.AU0c2AUAurora000020Philippines#PH.BK0c2BKBukidnon000021Russia#RU.KM0c2KMKhantia-Mansia000020Madagascar#MG.TM0c2TMToamasina00001BLibya#LY.KF0c2KFAl Kufrah00001ACameroon#CM.OU0c2OUOuest00001AIran#IR.KD0c2KDKordestan000028FranceDepartment#FR.HC0c2HCHaute Corse00001DVietnam#VN.KH0c2KHKhanh Hoa00001CSyria#SY.HA0c2HAAl Hasakah000023Madagascar#MG.AV0c2AVAntananarivo000039DemocraticRepublicoftheCongo#CD.KC0c2KCKasai Occidental00001DKyrgyzstan#KG.BA0c2BABatken00001COklahoma#0670c2JEJefferson000013Iowa#1190c2LYLyon000017Asia3#0470c2VNVietnam000019Wisconsin#0090c2BRBrown000018Texas#4550c2TRITrinity000019Indiana#0710c2JAJackson00001ANewYork#0430c2HEHerkimer000020NorthCarolina#1110c2MDMcDowell00001CVirginia#0130c2ARArlington000018Georgia#2630c2TBTalbot000017Kansas#0650c2GHGraham000021SouthCarolina#0370c2EDEdgefield00001BIllinois#1010c2LWLawrence00001BMissouri#0210c2BCBuchanan000025WorldwithCountries#1600c2PTPortugal000021NorthDakota#0350c2GFGrand Forks000019Texas#0930c2COAComanche000015Ohio#0550c2GEGeauga000017Spain#0130c2GAGalicia00001BNewMexico#0270c2LILincoln000017Nebraska#0250c2CACass000029Europewithcountries#0290c2NLNetherlands00001FMalaysia#0150c2KLKuala Lumpur00001BEngland#0140c2HAHampshire00001ATennessee#1150c2MRMarion00001ESouthAmerica#0060c2ECEcuador00001FScotland#0320c2WEWest Lothian000016World8#030c2AFAfrica00001DBahamas#290c2SNSouth Andros00002FWorldwithCountries#010c2AGAntigua and Barbuda000012USA#ID0c2IDIdaho00001EGuatemala#050c2PREl Progreso000018Moldova#560c2UNUngheni00001AMozambique#040c2MPMaputo000019Venezuela#050c2EBarinas00001AChile#030c2ANAntofagasta000021Portugal#050c2BABragan&ccedil;a000017NewWorld#530c2EGEgypt000023Australia2#SA0c2SASouth Australia00001FBarbados#010c2CCChrist Church00001BPuertoRico#710c2ISIsabela000028PolandCounties#PL.MZ.OM0c2MOMOstroleka00001DLiberia#LR.GK0c2GKGrand Kru00001BMacedonia#MK.VE0c2VEVeles000025Sudan#SD.WB0c2WBWest Bahr Al Ghazal00001BYemen#YE.MR0c2MRAl Mahrah00001CPhilippines#PH.CB0c2CBCebu00001EGabon#GA.MO0c2MOMoyen-Ogooue00001ERussia#RU.KN0c2KNKaliningrad00001BChina2#CN.ZJ0c2ZJZhejiang000022FranceDepartment#FR.YO0c2YOYonne00001EGuinea#GN.LA0c2LALab&eacute;000018China2#CN.GS0c2GSGansu000017Iran#IR.KE0c2KEKerman00002BFranceDepartment#FR.HD0c2HDHauts-de-Seine00001EPakistan#PK.IS0c2ISIslamabad00001DTurkmenistan#TM.MA0c2MAMary00001FEurope2#EU.RD0c2RDRhodes (Gr)000017Virginia#1950c2WIWise000019Colorado#0270c2CUCuster00001CSouthDakota#0650c2HGHughes000019Alabama#0430c2CUCullman00001CVermont#0130c2GIGrand Isle00001AMissouri#2030c2SNShannon00001BCalifornia#1070c2TUTulare000015Texas#2750c2KNOKnox00001DLouisiana#0190c2CLCalcasieu000016Georgia#0830c2DADade000024WorldwithCountries#1610c2RORomania00001AMinnesota#1350c2RORoseau000018Kentucky#1190c2KNKnott000019Michigan#1290c2OGOgemaw00001AFlorida#0470c2HTHamilton000018Spain#0140c2LALa Rioja00001ENewMexico#0280c2LALos Alamos00001CMississippi#0290c2CPCopiah000024Europewithcountries#0300c2NONorway000019Malaysia#0160c2LALabuan000018Arkansas#0190c2CLClark00001FEngland#0150c2HEHerefordshire000027SouthAmerica#0070c2FKFalkland Islands00001FWestVirginia#0470c2MDMcDowell00001EScotland#0330c2WIWigtonshire00001DWorld8#040c2NANorth America000020Bahamas#300c2SESouth Eleuthera000023WorldwithCountries#020c2BSBahamas00001CGuatemala#060c2ESEscuintla00001AMozambique#050c2SOSofala000020Venezuela#060c2FBol&iacute;var00001FChile#040c2ARAraucan&iacute;a000020Portugal#060c2CBCastelo Branco000023NewWorld#540c2GQEquatorial Guinea00001EBarbados#020c2ANSaint Andrew000017Fiji#FJ.NO.BU0c2BUBua00001EFiji#FJ.NO.CK0c2CKCakaudrova000019Laos#LA.OU0c2OUOudomxai00001DMacedonia#MK.DE0c2DEDolneni000017Sudan#SD.EB0c2EBLakes000019Serbia#RS.MR0c2MRMorava000017Russia#RU.KO0c2KOKomi000024FranceDepartment#FR.HE0c2HEHerault000025Cambodia#KH.OM0c2OMBanteay Meanchey000019Tonga#TO.HA0c2HAHa'apai00001BOklahoma#0690c2JOJohnston000016Iowa#1210c2MAMadison000016Asia3#0490c2TWTaiwan00001BWisconsin#0110c2BUBuffalo000016Texas#4570c2TYLTyler000018Indiana#0730c2JSJasper00001BNewYork#0450c2JEJefferson00001DNorthCarolina#1130c2MAMacon00001AVirginia#0150c2AUAugusta00001CGeorgia#2650c2TATaliaferro000016Kansas#0670c2GTGrant000021SouthCarolina#0390c2FAFairfield000016Illinois#1030c2LELee000019Missouri#0230c2BUButler000027WorldwithCountries#1620c2SMSan Marino00001BNorthDakota#0370c2GRGrant000017Texas#0950c2CCHConcho000015Ohio#0570c2GRGreene000016Spain#0150c2MAMadrid000018NewMexico#0290c2LULuna000018Nebraska#0270c2CECedar000017Hawaii#0010c2HAHawaii000024Europewithcountries#0310c2PLPoland00001CMalaysia#0170c2PUPutrajaya00001FEngland#0160c2HRHertfordshire00001CTennessee#1170c2MSMarshall000024SouthAmerica#0080c2GFFrench Guiana00001DWorld8#050c2SASouth America00001EBahamas#310c2SWSpanish Wells000024WorldwithCountries#030c2BBBarbados00001CGuatemala#070c2GUGuatemala00001BMozambique#060c2NANampula00001AVenezuela#070c2GCarabobo000016Chile#050c2ATAtacama000019Portugal#070c2COCoimbra000019NewWorld#550c2EREritrea00001EBarbados#030c2GESaint George00001APuertoRico#730c2JYJayuya000029NewBrunswick#CA.NB.FC0c2FCFundy Coastal00001FAlgeria#DZ.CO0c2COConstantine00001DSudan#SD.WD0c2WDWest Darfur000019Gabon#GA.NG0c2NGNgounie000020CoteDivoire#CI.DE0c2DEDenguele00001BChina2#CN.HK0c2HKHongKong00001BVietnam#VN.LA0c2LALong An000021Pakistan#PK.JK0c2JKAzad Kashmir000024TrinidadandTobago#TT.MA0c2MAMayaro000020SaudiArabia#SA.QS0c2QSAl Qasim000020SaudiArabia#SA.RI0c2RIAr Riyad000019Asia3#0500c2HKHong Kong000018Virginia#1970c2WYWythe000018Colorado#0290c2DEDelta000020SouthDakota#0670c2HTHutchinson000016Alabama#0450c2DADale00001AVermont#0150c2LALamoille000019Missouri#2050c2SHShelby00001DCalifornia#1090c2TOTuolumne000016Texas#2770c2LAMLamar00001CLouisiana#0210c2CDCaldwell000024Virginia#7400c2PMPortsmouth (City)000018Georgia#0850c2DWDawson000023WorldwithCountries#1630c2CSSerbia00001DMinnesota#1370c2SLSt. Louis000017Kentucky#1210c2KOKnox00001CMichigan#1310c2ONOntonagon000018Florida#0490c2HAHardee000017Spain#0160c2MEMelilla00001FMississippi#0310c2CGCovington000026Europewithcountries#0320c2PTPortugal000017Arkansas#0210c2CYClay00001DSouthAmerica#0090c2GYGuyana00001DWestVirginia#0490c2MAMarion000022NewCaledonia#NC.SU.LF0c2LFLa Foa000028Saskatchewan#CA.SK.NR0c2NRNorth Region00001FWorld8#060c2CACentral America000022Bahamas#320c2WBWest Grand Bahama000022WorldwithCountries#040c2BZBelize000020Guatemala#080c2HUHuehuetenango00001AMozambique#070c2NINiassa000019Venezuela#080c2HCojedes000024Chile#060c2BIB&iacute;o-B&iacute;o00001EPortugal#080c2EV&Eacute;vora00001ANewWorld#560c2ETEthiopia00001DBarbados#040c2JMSaint James000025PolandCounties#PL.WP.KM0c2WKMKalisz000021Morocco#MA.FB0c2FBFes-Boulemane00001FMacedonia#MK.VH0c2VHVrapciste000020Sudan#SD.WE0c2WEWest Equatoria00001DBhutan#BT.GE0c2GEGeylegphug000031CentralAfricanRepublic#CF.MP0c2MPOmbella-M'Poko000024CentralAmerica2#CE.HN0c2HNHonduras000020Tanzania#TZ.PS0c2PSPemba South00001DPhilippines#PH.BO0c2BOBohol000019Malawi#MW.RU0c2RURumphi00001CRussia#RU.KQ0c2KQKamchatka00001BGuinea#GN.KN0c2KNKoundara000023Kuwait#KW.MU0c2MUMubarak Al Kabir00001FChina2#CN.HL0c2HLHeilongjiang00002AFranceDepartment#FR.HG0c2HGHaute Garonne00001BNigeria#NG.ZA0c2ZAZamfara000019Togo#TG.MA0c2MAMaritime000016Oklahoma#0710c2KAKay000016Iowa#1230c2MHMahaska000015Asia3#0510c2MOMacau00001BWisconsin#0130c2BNBurnett000017Texas#4590c2UPSUpshur000015Indiana#0750c2JYJay000017NewYork#0470c2KIKings00001FNorthCarolina#1150c2MSMadison000017Virginia#0170c2BABath00001AGeorgia#2670c2TTTattnall000015Kansas#0690c2GYGray000020SouthCarolina#0410c2FLFlorence00001DIllinois#1050c2LILivingston00001BMissouri#0250c2CACaldwell000025WorldwithCountries#1640c2SKSlovakia00001CNorthDakota#0390c2GNGriggs000016Texas#0970c2CKECooke000027Virginia#5600c2CFClifton Forge (City)000017Ohio#0590c2GUGuernsey000016Spain#0170c2MUMurcia00001CNewMexico#0310c2MKMcKinley000018Nebraska#0290c2CHChase000019Hawaii#0030c2HOHonolulu000025Europewithcountries#0330c2RORomania000016England#0180c2KEKent000019Tennessee#1190c2MUMaury00001FSouthAmerica#0100c2PYParaguay000017World8#070c2OCOceania000022WorldwithCountries#050c2CACanada000019Guatemala#090c2IZIzabal000018Mozambique#080c2TETete00001FVenezuela#090c2YDelta Amacuro000017Chile#070c2COCoquimbo000016Portugal#090c2FAFaro000017NewWorld#570c2GAGabon00001DTurkey#020c2ADAd&#305;yaman00001CBarbados#050c2JNSaint John000025PuertoRico#750c2JDJuana D&iacute;az000025MarshallIsland#MH.MH.NK0c2NKNamorik000020Sudan#SD.EE0c2EEEast Equatoria00001CGuinea#GN.KO0c2KOKouroussa000021Guinea#GN.LE0c2LEL&eacute;louma00001BLibya#LY.JU0c2JUAl Jufrah000019Malawi#MW.BA0c2BABalaka00001FBotswana#BW.NE0c2NENorth East000027Singapore#SG.CS0c2CSCentral Singapore00001DBurkinaFaso#BF.YG0c2YGYagha000017Virginia#1990c2YOYork000019Colorado#0310c2DNDenver00001CMontana#0010c2BEBeaverhead00001ASouthDakota#0690c2HYHyde000018Alabama#0470c2DLDallas000018Vermont#0170c2OROrange00001BMissouri#2070c2SDStoddard00001CCalifornia#1110c2VEVentura000015Texas#2790c2LABLamb00001BLouisiana#0230c2CMCameron000019Georgia#0870c2DEDecatur000025WorldwithCountries#1650c2SISlovenia000019Minnesota#1390c2SCScott000018Kentucky#1230c2LALarue00001AMichigan#1330c2OEOsceola000018Florida#0510c2HEHendry000017Spain#0180c2NANavarra00001CMississippi#0330c2DEDeSoto000028Europewithcountries#0340c2SMSan Marino00001BArkansas#0230c2CBCleburne00001CEngland#0190c2LALancashire00001BSouthAmerica#0110c2PEPeru00001FWestVirginia#0510c2MRMarshall00001BWorld8#080c2MEMiddle East000026WorldwithCountries#060c2CRCosta Rica000019Guatemala#100c2JAJalapa000020Azerbaijan#010c2ARAb&#351;eron00001CMozambique#090c2ZMZambezia000018Chile#080c2LIO'Higgins000017NewWorld#580c2GHGhana00001ETurkey#030c2AFAfyonkarahisar00001EBarbados#060c2JSSaint Joseph000018Bahrain#010c2CACapital000024PolandCounties#PL.WP.KO0c2WKOKonin000025PolandCounties#PL.WP.LE0c2WLELeszno000025Uzbekistan#UZ.QR0c2QRKarakalpakstan00001EBurkinaFaso#BF.GG0c2GGGnagna00001CLiberia#LR.GP0c2GPGbarpolu00001FMacedonia#MK.VJ0c2VJBogovinje00001AZambia#ZM.LP0c2LPLuapula00001EPhilippines#PH.TR0c2TRTarlac00001BYemen#YE.MW0c2MWMl Mahwit000023Macedonia#MK.CS0c2CSCucer Sandevo00001FPhilippines#PH.CG0c2CGCagayan000018Russia#RU.KS0c2KSKursk00002ACoteDivoire#CI.DH0c2DHDix-Huit Montagnes000021China2#CN.GX0c2GXGuangxi Zhuang000018China2#CN.HN0c2HNHunan00001FIran#IR.KJ0c2KJSouth Khorasan00001CVietnam#VN.LD0c2LDLam Dong00001BCapeVerde#CV.PI0c2PIPraia00001DOklahoma#0730c2KIKingfisher000015Iowa#1250c2MRMarion00001BWisconsin#0150c2CACalumet00001EAlaska#2900c2YKYukon-Koyukuk000016Texas#4610c2UPTUpton00001BIndiana#0770c2JEJefferson000017NewYork#0490c2LELewis00001ENorthCarolina#1170c2MTMartin00001AVirginia#0190c2BEBedford000018Georgia#2690c2TYTaylor000018Kansas#0710c2GLGreeley000022SouthCarolina#0430c2GEGeorgetown000018Illinois#1070c2LOLogan00001BMissouri#0270c2CWCallaway000022WorldwithCountries#1660c2ESSpain00001FNorthDakota#0410c2HEHettinger000018Texas#0990c2CRYCoryell000017Ohio#0610c2HAHamilton00002BSpain#0190c2PAPais Vasco (Basque Country)000018NewMexico#0330c2MOMora000019Nebraska#0310c2CRCherry000018Hawaii#0050c2KAKalawao000024Europewithcountries#0350c2CSSerbia000020England#0200c2LELeicestershire000019Tennessee#1210c2MIMeigs00001FSouthAmerica#0120c2SRSuriname000020WorldwithCountries#070c2CUCuba00001AGuatemala#110c2JUJutiapa000026Azerbaijan#020c2ACA&#287;cab&#601;di00001AMozambique#100c2MNManica00001FVenezuela#110c2IFalc&oacute;n000018Chile#090c2LLLos Lagos000018Portugal#110c2GUGuarda000018NewWorld#590c2GNGuinea00001ETurkey#040c2AGA&#287;r&#305;00001CBarbados#070c2LUSaint Lucy00001APuertoRico#770c2JCJuncos000018Bahrain#020c2CECentral000024PolandCounties#PL.PD.LM0c2PLMLomza00001CPanama#PA.SB0c2SBKuna Yala000017Sudan#SD.WH0c2WHUnity00001BRussia#RU.KT0c2KTKostroma000018Tunisia#TN.SF0c2SFSfax00001EOman#OM.SH0c2SHAsh Sharqiyah000024Singapore#SG.EA0c2EAEast Singapore000021Cambodia#KH.PH0c2PHPreah Vihear00001CGhana#GH.UE0c2UEUpper East00001AColorado#0330c2DODolores00001AMontana#0030c2BHBig Horn00001DSouthDakota#0710c2JAJackson000018Alabama#0490c2DEDekalb00001AAsia#0010c2AFAfghanistan000019Vermont#0190c2OLOrleans000018Missouri#2090c2STStone000019California#1130c2YOYolo000017Alaska#1100c2JUJuneau000019Texas#2810c2LAPLampasas00001DLouisiana#0250c2CTCatahoula000018Georgia#0890c2DKDeKalb000023WorldwithCountries#1670c2SESweden00001DMinnesota#1410c2SHSherburne000019Kentucky#1250c2LULaurel000019Michigan#1350c2OCOscoda00001AFlorida#0530c2HNHernando00001DMississippi#0350c2FOForrest00001CPennsylvania#0010c2ADAdams000026Europewithcountries#0360c2SKSlovakia00001CArkansas#0250c2CVCleveland00001EEngland#0210c2LILincolnshire00001ESouthAmerica#0130c2UYUruguay00001CWestVirginia#0530c2MSMason000027Manitoba#CA.MB.NR0c2NRNorthern Region000019Bahrain#030c2MUMuharraq000024WorldwithCountries#080c2DMDominica00001FGuatemala#120c2PEPet&eacute;n00001EAzerbaijan#030c2AMA&#287;dam000020Mozambique#110c2MTMaputo(City)000019Venezuela#120c2JGuarico000037Chile#100c2MAMagallanes y la Ant&aacute;rtica Chilena00001FNewWorld#600c2GWGuinea-Bissau000016Turkey#050c2AMAmasya00001FBarbados#080c2MISaint Michael000026PolandCounties#PL.PK.RM0c2PRMRzeszow00001ANamibia#NA.HA0c2HAHardap00001AAlgeria#DZ.DJ0c2DJDjelfa00001BBurma#MM.MO0c2MOMon State00001EMacedonia#MK.VL0c2VLVasilevo000021Philippines#PH.TT0c2TTTawi-Tawi00001ATanzania#TZ.PW0c2PWPwani000022Macedonia#MK.DK0c2DKDemir Kapija00001FPhilippines#PH.BS0c2BSBasilan000019Russia#RU.KU0c2KUKurgan000025FranceDepartment#FR.YV0c2YVYvelines00001AChina2#CN.GZ0c2GZGuizhou000018Nigeria#NG.YO0c2YOYobe000016Syria#SY.HI0c2HIHoms000025BrazilRegion#BR.NO0c2NONorth Region000018Oklahoma#0750c2KOKiowa000017Iowa#1270c2MSMarshall00001CWisconsin#0170c2CHChippewa000017Texas#4630c2UVAUvalde000016Asia#0020c2AMArmenia00001AIndiana#0790c2JNJennings00001CNewYork#0510c2LILivingston000023NorthCarolina#1190c2MKMecklenburg000018Virginia#0210c2BLBland000019Georgia#2710c2TFTelfair00001AKansas#0730c2GWGreenwood000022SouthCarolina#0450c2GRGreenville00001CIllinois#1090c2MUMcDonough000019Missouri#0290c2CMCamden000028WorldwithCountries#1680c2CHSwitzerland00001CNorthDakota#0430c2KIKidder000017Texas#1010c2COTCottle000016Ohio#0630c2HNHancock000019NewMexico#0350c2OTOtero00001BNebraska#0330c2CYCheyenne000016Hawaii#0070c2KUKauai000026Europewithcountries#0370c2SLSlovenia000018England#0220c2LOLondon00001ATennessee#1230c2MOMonroe000020SouthAmerica#0140c2VEVenezuela000019Bahrain#040c2NONorthern00002AWorldwithCountries#090c2DODominican Rep.000015USA#IL0c2ILIllinois000021Guatemala#130c2QZQuetzaltenango000023Azerbaijan#040c2ASA&#287;da&#351;000016Venezuela#130c2KLara000014Chile#110c2MLMaule000022USASouthWestRegion#320c2NVNevada000018Portugal#130c2LELeiria000017NewWorld#610c2KEKenya00001DBarbados#090c2PESaint Peter000019PuertoRico#790c2LJLajas000019Nigeria#NG.GO0c2GOGombe000020Uzbekistan#UZ.SA0c2SASamarkand000019Zambia#ZM.LS0c2LSLusaka00001DMacedonia#MK.DL0c2DLDelcevo000020Philippines#PH.BT0c2BTBatangas000018Russia#RU.KV0c2KVKirov00001EGuinea#GN.KS0c2KSKissidougou000028FranceDepartment#FR.HL0c2HLHaute Loire00001AColorado#0350c2DUDouglas000018Montana#0050c2BLBlaine00001DSouthDakota#0730c2JEJerauld000018Alabama#0510c2ELElmore000019Asia#0030c2AZAzerbaijan000019Vermont#0210c2RURutland00001BMissouri#2110c2SUSullivan000019California#1150c2YUYuba000019Texas#2830c2LASLa Salle00001DLouisiana#0270c2CBClaiborne000017Georgia#0910c2DODodge000024WorldwithCountries#1690c2UAUkraine00001AMinnesota#1430c2SBSibley00001BKentucky#1270c2LWLawrence000019Michigan#1370c2OSOtsego00001BFlorida#0550c2HLHighlands00001EMississippi#0370c2FRFranklin000020Pennsylvania#0030c2ALAllegheny000023Europewithcountries#0380c2ESSpain00001BArkansas#0270c2CMColumbia00001DWestVirginia#0550c2MEMercer000019Bahrain#050c2SOSouthern000027WorldwithCountries#100c2SVEl Salvador000020Guatemala#140c2QCQuich&eacute;000020Azerbaijan#050c2AFA&#287;stafa000018Venezuela#140c2LMerida00002BChile#120c2RMSantiago Metropolitan Region000018Portugal#140c2LILisboa000019NewWorld#620c2LSLesotho000017Turkey#070c2ALAntalya00001EBarbados#100c2PHSaint Philip000023WorldwithCountries#110c2GDGrenada000014USA#IN0c2INIndiana00001DGuatemala#150c2RERetalhuleu00001DNewZealand#E70c2AUKAuckland00001DAzerbaijan#060c2AUA&#287;su000019Venezuela#150c2MMiranda00001EChile#130c2TATarapac&aacute;000019NewWorld#630c2LILiberia000016Turkey#080c2AVArtvin00001EBarbados#110c2THSaint Thomas000019PuertoRico#810c2LRLares000023PolandCounties#PL.LD.LO0c2LLOLodz00001DAlgeria#DZ.EB0c2EBEl Bayadh00001FSudan#SD.WK0c2WKWest Kurdufan000015Bhutan#BT.HA0c2HAHa000021CentralAmerica2#CE.HT0c2HTHaiti000021Macedonia#MK.DM0c2DMDemir Hisar00001FPhilippines#PH.BU0c2BUBulacan000017Niger#NE.DS0c2DSDosso00001ERussia#RU.MC0c2MCMoscow City000024Singapore#SG.WE0c2WEWest Singapore000028FranceDepartment#FR.HM0c2HMHaute Marne00001CKyrgyzstan#KG.TL0c2TLTalas000025Mauritius#MU.PW0c2PWPlaines Wilhems00001AOklahoma#0770c2LALatimer000014Iowa#1290c2MIMills000019Wisconsin#0190c2CLClark00001ATexas#4650c2VAVVal Verde000019Indiana#0810c2JOJohnson000019NewYork#0530c2MAMadison000020NorthCarolina#1210c2MIMitchell00001CVirginia#0230c2BOBotetourt000019Georgia#2730c2TLTerrell000019Kansas#0750c2HMHamilton000021SouthCarolina#0470c2GWGreenwood00001AIllinois#1110c2MHMcHenry000021Missouri#0310c2CGCape Girardeau00002BWorldwithCountries#1700c2UKUnited Kingdom00001DNorthDakota#0450c2LMLaMoure000016Texas#1030c2CRACrane000015Ohio#0650c2HRHardin000018NewMexico#0370c2QUQuay000017Nebraska#0350c2CLClay000015Hawaii#0090c2MAMaui000024Europewithcountries#0390c2SESweden000019England#0240c2NONorfolk00001ETennessee#1250c2MGMontgomery000025WorldwithCountries#120c2GTGuatemala000026Guatemala#160c2SASacatep&eacute;quez000022NewZealand#E80c2BOPBay of Plenty000025Azerbaijan#070c2ABAli Bayraml&#305;000019Venezuela#160c2NMonagas000025USASouthWestRegion#350c2NMNewMexico00001CPortugal#160c2PAPortalegre000017NewWorld#640c2LRLibya00001ATurkey#090c2AYAyd&#305;n000024PolandCounties#PL.MZ.PM0c2MPMPlock000036DemocraticRepublicoftheCongo#CD.KN0c2KNKinshasa City00002FCentralAfricanRepublic#CF.NM0c2NMNana-Mambere000029Philippines#PH.CL0c2CLCompostela Valley000019Malawi#MW.TH0c2THThyolo00001ERussia#RU.KX0c2KXKrasnoyarsk00001CRussia#RU.LN0c2LNLeningrad000028FranceDepartment#FR.HN0c2HNHaute Saone00001CVietnam#VN.LI0c2LILai Chau00001BOman#OM.BA0c2BAAl Batinah000018Syria#SY.HL0c2HLAleppo00001BCambodia#KH.PL0c2PLPailin000020CapeVerde#CV.PN0c2PNPorto Novo000018Colorado#0370c2EAEagle00001CMontana#0070c2BRBroadwater00001BSouthDakota#0750c2JOJones00001AAlabama#0530c2ESEscambia000019Asia#0050c2BDBangladesh00001CVermont#0230c2WAWashington000018Missouri#2130c2TATaney000017Texas#2850c2LAVLavaca00001DLouisiana#0290c2COConcordia000017Georgia#0930c2DLDooly000029WorldwithCountries#1710c2VAVatican City00001BMinnesota#1450c2SAStearns000016Kentucky#1290c2LELee000019Michigan#1390c2OTOttawa00001EFlorida#0570c2HBHillsborough00001CMississippi#0390c2GOGeorge000020Pennsylvania#0050c2ARArmstrong000029Europewithcountries#0400c2CHSwitzerland000019Arkansas#0290c2CWConway000022England#0250c2NRNorthamptonshire00001EWestVirginia#0570c2MIMineral000025NewCaledonia#NC.SU.MD0c2MDMont-Dore000028NewCaledonia#NC.IL.OV0c2OVOuv&eacute;a000025PuertoRico#830c2LMLas Mar&iacute;as000021WorldwithCountries#130c2HTHaiti00001DGuatemala#170c2SMSan Marcos00001FNewZealand#E90c2CANCanterbury00001AAzerbaijan#080c2AAAstara00001FVenezuela#170c2ONueva Esparta000017Portugal#170c2POPorto00001CNewWorld#650c2MSMadagascar00001ETurkey#100c2BKBal&#305;kesir000027NovaScotia#CA.NS.ST0c2STSunrise Trail000025SaudiArabia#SA.SH0c2SHAsh Sharqiyah00001BEurope2#EU.AD0c2ADAndorra00001EBurkinaFaso#BF.GM0c2GMGourma000024PapuaNewGuinea#PG.MB0c2MBMilne Bay00001DGuineaBissau#GW.GA0c2GAGabu000026EquatorialGuinea#GQ.WN0c2WNWele Nzas000020Philippines#PH.CM0c2CMCamiguin000029Tibet#TI.XP0c2XPXigaz&ecirc; Prefecture00001BRussia#RU.ME0c2MEMariy-El00001DTunisia#TN.TA0c2TATataouine00001BVietnam#VN.KT0c2KTKon Tum000016Syria#SY.HM0c2HMHama00001BEurope2#EU.RO0c2RORomania00001AEurope2#EU.SE0c2SESweden00001BOklahoma#0790c2LFLe Flore000017Iowa#1310c2MTMitchell00001CWisconsin#0210c2COColumbia00001ATexas#4670c2VAZVan Zandt000015Asia#0060c2BTBhutan000016Indiana#0830c2KNKnox000018NewYork#0550c2MNMonroe000022NorthCarolina#1230c2MGMontgomery00001CVirginia#0250c2BRBrunswick000018Georgia#2750c2THThomas000017Kansas#0770c2HPHarper00001FSouthCarolina#0490c2HAHampton000019Illinois#1130c2MLMcLean00001AMissouri#0330c2CRCarroll000023WorldwithCountries#1720c2CYCyprus00001BNorthDakota#0470c2LOLogan000019Texas#1050c2CKTCrockett000017Ohio#0670c2HIHarrison00001ENewMexico#0390c2RARio Arriba000019Nebraska#0370c2COColfax000025Europewithcountries#0410c2UAUkraine000020England#0260c2NTNorthumberland000019Tennessee#1270c2MEMoore000028NewCaledonia#NC.NO.BE0c2BEB&eacute;lep000024WorldwithCountries#140c2HNHonduras00001DGuatemala#180c2SRSanta Rosa000018Azerbaijan#090c2BABaki00001CVenezuela#180c2PPortuguesa000021Portugal#180c2SASantar&eacute;m000018NewWorld#660c2MWMalawi000017Turkey#110c2BCBilecik00001CSudan#SD.WN0c2WNWhite Nile000021Macedonia#MK.CZ0c2CZCentar Zupa000027Philippines#PH.CN0c2CNCamarines Norte000019Serbia#RS.NS0c2NSNisava00001ARussia#RU.LP0c2LPLipetsk00001BTunisia#TN.SL0c2SLSiliana00001AGuinea#GN.MC0c2MCMacenta000020SolomonIsland#SB.IS0c2ISIsabel000018China2#CN.HU0c2HUHubei00001DTunisia#TN.BA0c2BABen Arous00002CFranceDepartment#FR.HP0c2HPHautes Pyrenees000017Syria#SY.ID0c2IDIdlib000024TrinidadandTobago#TT.NA0c2NANariva000019Colorado#0390c2ELElbert000018Montana#0090c2CACarbon00001FSouthDakota#0770c2KIKingsbury000018Alabama#0550c2ETEtowah000015Asia#0070c2BNBrunei000019Vermont#0250c2WIWindham000018Missouri#2150c2TETexas000014Texas#2870c2LEELee00001BLouisiana#0310c2DSDe Soto000021Virginia#7500c2RARadford (City)00001BGeorgia#0950c2DUDougherty000023WorldwithCountries#1730c2TKTurkey00001AMinnesota#1470c2SESteele000019Kentucky#1310c2LSLeslie00001FMichigan#1410c2PRPresque Isle000018Florida#0590c2HMHolmes00001CMississippi#0410c2GRGreene00001DPennsylvania#0070c2BEBeaver00002CEuropewithcountries#0420c2UKUnited Kingdom00001CArkansas#0310c2CICraighead000021England#0270c2NGNottinghamshire00001CWestVirginia#0590c2MNMingo00001FPuertoRico#850c2LPLas Piedras000023WorldwithCountries#150c2JMJamaica000020Guatemala#190c2SOSolol&aacute;00001DNewZealand#F10c2GISGisborne00001BAzerbaijan#100c2BLBalakan000017Venezuela#190c2RSucre000020Portugal#190c2SESet&uacute;bal000016NewWorld#670c2MLMali00001BTurkey#120c2BGBing&ouml;l000017Ghana#GH.TV0c2TVVolta000023Europe2#EU.AF0c2AFAland (Finland)00002CMorocco#MA.GB0c2GBGharb-Chrarda Beni Hssen00001DChad#TD.HD0c2HDHadjer-Lamis000021PapuaNewGuinea#PG.MD0c2MDMadang00001ARussia#RU.MG0c2MGMagadan00001BGuinea#GN.MD0c2MDMandiana00001BCambodia#KH.PO0c2POPursat00001AOklahoma#0810c2LILincoln000015Iowa#1330c2MOMonona00001CWisconsin#0230c2CRCrawford000019Texas#4690c2VICVictoria000016Asia#0080c2MMBurma (00001BIndiana#0850c2KOKosciusko00001CNewYork#0570c2MOMontgomery00001DNorthCarolina#1250c2MOMoore00001BVirginia#0270c2BUBuchanan000016Georgia#2770c2TITift000017Kansas#0790c2HVHarvey00001DSouthCarolina#0510c2HOHorry000018Illinois#1150c2MAMacon000019Missouri#0350c2CTCarter00001DNorthDakota#0490c2MHMcHenry000017Texas#1070c2CSBCrosby00002AVirginia#5700c2COColonial Heights (City)000014Ohio#0690c2HYHenry00001DNewMexico#0410c2RSRoosevelt000019Nebraska#0390c2CUCuming00002AEuropewithcountries#0430c2VAVatican City00001DEngland#0280c2OXOxfordshire00001ATennessee#1290c2MNMorgan000022WorldwithCountries#160c2MXMexico000020Guatemala#200c2SUSuchitepequez000020NewZealand#F20c2HKBHawke's Bay000020Egypt_346255#010c2ALAlexandria000019Azerbaijan#110c2BRBarda000019Venezuela#200c2STachira000022Portugal#200c2VCViana do Castelo00001CNewWorld#680c2MRMauritania000016Turkey#130c2BTBitlis000022MarshallIsland#MH.MH.NU0c2NUNamu000025NovaScotia#CA.NS.CB0c2CBCape Breton000037DemocraticRepublicoftheCongo#CD.KR0c2KRKasai Oriental000019Senegal#SN.MT0c2MTMatam000024Morocco#MA.GC0c2GCGrand Casablanca00001EMauritania#MR.IN0c2INInchiri00001DMacedonia#MK.DR0c2DRDrugovo00001DPhilippines#PH.CP0c2CPCapiz00001FGabon#GA.OI0c2OIOgooue-Ivindo000017Guinea#GN.LO0c2LOLola000020Swaziland#SZ.SH0c2SHShiselweni00001FIran#IR.KS0c2KSNorth Khorasan000026FranceDepartment#FR.HR0c2HRHaut Rhin00001FCambodia#KH.PP0c2PPPhnom Penh00001AColorado#0410c2EPEl Paso000018Montana#0110c2CRCarter00001ASouthDakota#0790c2LALake000019Alabama#0570c2FAFayette000017Asia#0090c2KHCambodia000019Vermont#0270c2WNWindsor000019Missouri#2170c2VEVernon000015Texas#2890c2LEOLeon000024Louisiana#0330c2EBEast Baton Rouge000019Georgia#0970c2DGDouglas000026WorldwithCountries#1750c2AUAustralia00001BMinnesota#1490c2STStevens00001AKentucky#1330c2LTLetcher00001CMichigan#1430c2RORoscommon00001EFlorida#0610c2IRIndian river00001DMississippi#0430c2GEGrenada00001EPennsylvania#0090c2BDBedford000024Europewithcountries#0440c2CYCyprus00001BArkansas#0330c2CFCrawford000021WestVirginia#0610c2MLMonongalia000020PuertoRico#870c2LZLo&iacute;za000025WorldwithCountries#170c2NINicaragua000025Guatemala#210c2TOTotonicap&aacute;n000026NewZealand#F30c2MWTManawatu-Wanganui00001BEgypt_346255#020c2ANAswan000021Azerbaijan#120c2BQBeyl&#601;qan00001CSanMarino#010c2ACAcquaviva00001AVenezuela#210c2TTrujillo00001BPortugal#210c2VRVila Real000019NewWorld#690c2MAMorocco000014Turkey#140c2BLBolu000033NorthWestTerritories#CA.NT.NC0c2NCNahanni Country00001FMacau#MO.MA.SZ0c2SZSao Lazaro000028SaoTomeandPrincipe#ST.CG0c2CGCantagalo00001DSaudiArabia#SA.TB0c2TBTabuk00001ASriLanka#LK.GL0c2GLGalle00001FSriLanka#LK.HB0c2HBHambantota000020SaudiArabia#SA.BA0c2BAAl Bahah00001ATanzania#TZ.RK0c2RKRukwa00001BLibya#LY.MB0c2MBAl Margab00001BMalawi#MW.BL0c2BLBlantyre00001ATunisia#TN.AN0c2ANAriana000029FranceDepartment#FR.HS0c2HSHaute Savoie000018Oklahoma#0830c2LOLogan000015Iowa#1350c2MNMonroe000018Wisconsin#0250c2DADane000017Texas#4710c2WAKWalker000014Asia#0100c2CNChina00001AIndiana#0870c2LALagrange000018NewYork#0590c2NANassau00001CNorthCarolina#1270c2NANash00001DVirginia#0290c2BCBuckingham000018Georgia#2790c2TMToombs000018Kansas#0810c2HSHaskell00001ESouthCarolina#0530c2JAJasper00001BIllinois#1170c2MPMacoupin000017Missouri#0370c2CSCass000021WorldwithCountries#1760c2FJFiji00001ENorthDakota#0510c2MIMcIntosh00001ATexas#1090c2CUBCulberson000017Ohio#0710c2HGHighland00001CNewMexico#0430c2SASandoval000019Nebraska#0410c2CSCuster000024Europewithcountries#0450c2TKTurkey00001CEngland#0300c2SHShropshire000019Tennessee#1310c2OBObion000026MadagascarRegions#MG.MA.SF0c2SFSofia000022WorldwithCountries#180c2PAPanama000019Guatemala#220c2ZAZacapa000020NewZealand#F40c2MBHMarlborough00001BEgypt_346255#030c2ATAsyut000022Azerbaijan#130c2BSBil&#601;suvar00001ESanMarino#020c2CHChiesanuova000019Venezuela#220c2UYaracuy000017Portugal#220c2VIViseu00001CNewWorld#700c2MZMozambique000016Turkey#150c2BDBurdur000030DemocraticRepublicoftheCongo#CD.KT0c2KTKatanga00001FUzbekistan#UZ.SI0c2SISirdaryo000025Morocco#MA.GE0c2GEGuelmim Es Semara000017Sudan#SD.WR0c2WRWarab00001ASamoa #WS.PA0c2PAPalauli000019Serbia#RS.PC0c2PCPcinja00001BVietnam#VN.LO0c2LOLao Cai00001EThailand#TH.KK0c2KKKhon Kaen00001DWestVirginia#0630c2MOMonroe00001EAustralia2#TAS0c2TASTasmania00001AColorado#0430c2FRFremont000019Montana#0130c2CSCascade00001ESouthDakota#0810c2LWLawrence00001AAlabama#0590c2FRFranklin000019Missouri#2190c2WAWarren000018Texas#2910c2LIBLiberty000020Louisiana#0350c2ECEast Carroll000017Georgia#0990c2EAEarly000025WorldwithCountries#1770c2KIKiribati000019Minnesota#1510c2SWSwift000018Kentucky#1350c2LILewis00001AMichigan#1450c2SASaginaw000019Florida#0630c2JSJackson00001DMississippi#0450c2HAHancock00001CPennsylvania#0110c2BRBerks000024Europewithcountries#0460c2RURussia00001DArkansas#0350c2CTCrittenden00001AEngland#0310c2SOSomerset000015Turkey#160c2BUBursa00001CPuertoRico#890c2LQLuquillo000031WorldwithCountries#190c2KNSt. Kitts &amp; Nevis00001BNewZealand#F50c2NSNNelson00001DEgypt_346255#040c2BHBeheira000026Azerbaijan#140c2CBC&#601;bray&#305;l00001CSanMarino#030c2DODomagnano000017Venezuela#230c2VZulia000019NewWorld#710c2NANamibia00001FBurkinaFaso#BF.YT0c2YTYatenga00001DMacedonia#MK.VV0c2VVVevcani000016Chad#TD.GR0c2GRGuera000025Philippines#PH.CS0c2CSCamarines Sur00001DGabon#GA.OL0c2OLOgooue-Lolo000019Serbia#RS.PD0c2PDDanube000020Iran#IR.KV0c2KVRazavi Khorasan00001CThailand#TH.KL0c2KLKalasin00001DThailand#TH.LB0c2LBLop Buri00001CEurope2#EU.SK0c2SKSlovakia00001AEurope2#EU.RU0c2RURussia00001DMauritius#MU.SA0c2SASavanne00001BTennessee#1330c2OVOverton000017Oklahoma#0850c2LVLove000019Iowa#1370c2MGMontgomery000019Wisconsin#0270c2DODodge000017Texas#4730c2WALWaller000019Asia#0120c2TPEast Timor000016Indiana#0890c2LKLake00001ANewYork#0610c2NYNew York000023NorthCarolina#1290c2NHNew Hanover00001BVirginia#0310c2CACampbell000017Georgia#2810c2TOTowns000019Kansas#0830c2HGHodgeman00001FSouthCarolina#0550c2KEKershaw00001AIllinois#1190c2MIMadison000018Missouri#0390c2CECedar00002DWorldwithCountries#1780c2MHMarshall Islands00001ENorthDakota#0530c2MKMcKenzie000017Texas#1110c2DALDallam000016Ohio#0730c2HOHocking00001CNewMexico#0450c2SJSan Juan000019Nebraska#0430c2DADakota000026Europewithcountries#0470c2SCScotland00001FEngland#0320c2STStaffordshire000022NewCaledonia#NC.NO.CA0c2CACanala000020Turkey#170c2CK&Ccedil;anakkale000025WorldwithCountries#200c2LCSt. Lucia00001ENewZealand#F60c2NTLNorthland00001FEgypt_346255#050c2BNBeni Suef000022Azerbaijan#150c2CLC&#601;lilabad00001ASanMarino#040c2FAFaetano000026Venezuela#240c2WDependencies Federal000017NewWorld#720c2NENiger00002AEurope2#EU.BA0c2BABosnia and Herzegovina00001FUzbekistan#UZ.TA0c2TATashkent000019Ghana#GH.CP0c2CPCentral00001ALesotho#LS.LE0c2LELeribe000021Panama#PA.BC0c2BCBocas del Toro00001CTanzania#TZ.SD0c2SDSingida000023Philippines#PH.CT0c2CTCatanduanes000021Gabon#GA.OM0c2OMOgooue-Maritime000018Serbia#RS.PE0c2PEPecki000029FranceDepartment#FR.HV0c2HVHaute Vienne00002BFranceDepartment#FR.IL0c2ILIndre et Loire00001CEurope2#EU.SL0c2SLSlovenia00001DWestVirginia#0650c2MGMorgan00001BColorado#0450c2GAGarfield00001AMontana#0150c2CHChouteau00001DSouthDakota#0830c2LILincoln000018Alabama#0610c2GEGeneva000016Asia#0130c2GEGeorgia00001DMissouri#2210c2WSWashington000020Alaska#1220c2KEKenai Peninsula00001ATexas#2930c2LIMLimestone000022Louisiana#0370c2EFEast Feliciana000018Georgia#1010c2ECEchols000027WorldwithCountries#1790c2FMMicronesia000018Minnesota#1530c2TOTodd00001AKentucky#1370c2LNLincoln00001CMichigan#1470c2SCSt. Clair00001BFlorida#0650c2JEJefferson00001EMississippi#0470c2HRHarrison00001CPennsylvania#0130c2BLBlair000025Europewithcountries#0480c2ENEngland000018Arkansas#0370c2CSCross000019England#0330c2SUSuffolk000019NewWorld#730c2NGNigeria000027USANorthEastRegion#090c2CTConnecticut000021PuertoRico#910c2MTManat&iacute;00003CWorldwithCountries#210c2VCSt. Vincent &amp; the Grenadines00001ANewZealand#F70c2OTAOtago00001BEgypt_346255#060c2CACairo00002BAzerbaijan#160c2DSDa&#351;k&#601;s&#601;n00001DSanMarino#050c2FIFiorentino000022Venezuela#250c2ADistrito Capital00001EEurope2#EU.SM0c2SMSan Marino000021Kyrgyzstan#KG.DA0c2DAJalal Abad00001BEurope2#EU.AL0c2ALAlbania000019Jordan#JO.MA0c2MAMafraq00001BRussia#RU.MM0c2MMMurmansk00001ATunisia#TN.SS0c2SSSousse000021Thailand#TH.KN0c2KNKanchanaburi000018England#0340c2SRSurrey000019Tennessee#1350c2PEPerry00001AOklahoma#0870c2MCMcClain000018Iowa#1390c2MUMuscatine000018Wisconsin#0290c2DRDoor000015Texas#4750c2WARWard000014Asia#0140c2INIndia00001AIndiana#0910c2LPLa Porte000019NewYork#0630c2NINiagara000023NorthCarolina#1310c2NTNorthampton00001BVirginia#0330c2CRCaroline00001AGeorgia#2830c2TETreutlen000018Kansas#0850c2JAJackson000021SouthCarolina#0570c2LALancaster000019Illinois#1210c2MSMarion00001BMissouri#0410c2CNChariton000022WorldwithCountries#1800c2NRNauru00001CNorthDakota#0550c2MLMcLean000017Texas#1130c2DASDallas000015Ohio#0750c2HLHolmes00001ENewMexico#0470c2SMSan Miguel000018Nebraska#0450c2DWDawes000023Europewithcountries#0490c2WAWales000034NewfoundlandandLabrador#CA.NF.AV0c2AVAvalon Region000018NewWorld#740c2RWRwanda00001CTurkey#190c2CM&Ccedil;orum000024USANorthEastRegion#100c2DEDelaware000031WorldwithCountries#220c2TTTrinidad &amp; Tobago00001ENewZealand#F80c2STLSouthland00001EEgypt_346255#070c2DADakahlia00002BAzerbaijan#170c2DVD&#601;v&#601;&ccedil;i000021SanMarino#060c2BMBorgo Maggiore000018Venezuela#260c2XVargas00001FBurkinaFaso#BF.ZM0c2ZMZondoma00001CSriLanka#LK.GQ0c2GQGampaha000019Somalia#SO.MU0c2MUMudug000017Nepal#NP.RA0c2RARapti000024Kiribati#KI.PI0c2PIPhoenix Islands00001EPhilippines#PH.CV0c2CVCavite000018Gabon#GA.NY0c2NYNyanga000020Lebanon#LE.NA0c2NAAn Nabatiyah000019Iran#IR.LO0c2LOLorestan000022FranceDepartment#FR.IN0c2INIndre00001CVietnam#VN.LS0c2LSLang Son000019Thailand#TH.LE0c2LELoei00002BEuropewithcountries#0500c2NINorth Ireland000019Arkansas#0390c2DADallas00001AEngland#0350c2ESE.Sussex00001FWestVirginia#0670c2NINicholas000019Colorado#0470c2GIGilpin000018Montana#0170c2CUCuster00001BSouthDakota#0850c2LYLyman000018Alabama#0630c2GRGreene000018Asia#0150c2IDIndonesia000018Missouri#2230c2WYWayne000019Texas#2950c2LIPLipscomb00001ELouisiana#0390c2EVEvangeline00001BGeorgia#1030c2EFEffingham000028WorldwithCountries#1810c2NZNew Zealand00001CMinnesota#1550c2TRTraverse00001DKentucky#1390c2LGLivingston00001DMichigan#1490c2SJSt. Joseph00001BFlorida#0670c2LYLafayette00001BMississippi#0490c2HIHinds00001FPennsylvania#0150c2BFBradford000021NewCaledonia#NC.NO.TO0c2TOTouho000027NewWorld#750c2STSao Tome and Principe000017Turkey#200c2DNDenizli000030USANorthEastRegion#110c2DCDistrict of Columbia00001BPuertoRico#930c2MRMaricao000029WorldwithCountries#230c2USUnited States00001DNewZealand#F90c2TKITaranaki00001EEgypt_346255#080c2DMDamietta00001FAzerbaijan#180c2FUF&uuml;zuli00001DSanMarino#070c2SMSan Marino00001DAsiaGeorgia#010c2ABAbkhazia00001ABelgium#010c2ANAntwerpen000016Mali#ML.KD0c2KDKidal000017Guinea#GN.ML0c2MLMali000018Tunisia#TN.BJ0c2BJBeja00001AIran#IR.KZ0c2KZKhuzestan000023Thailand#TH.KP0c2KPKamphaeng Phet000028Eritrea#ER.SK0c2SKSemenawi Keyih Bahri00001EEngland#0360c2WAWarwickshire00001BTennessee#1370c2PIPickett00001COklahoma#0890c2MTMcCurtain000016Iowa#1410c2OBO'Brien00001BWisconsin#0310c2DUDouglas00001BTexas#4770c2WASWashington000013Asia#0160c2IRIran00001AIndiana#0930c2LWLawrence000018NewYork#0650c2ONOneida00001ENorthCarolina#1330c2ONOnslow00001AVirginia#0350c2CLCarroll000017Georgia#2850c2TRTroup00001AKansas#0870c2JFJefferson00001FSouthCarolina#0590c2LULaurens00001BIllinois#1230c2MNMarshall00001CMissouri#0430c2CHChristian000022WorldwithCountries#1820c2PWPalau00001CNorthDakota#0570c2MEMercer000017Texas#1150c2DAWDawson000014Ohio#0770c2HUHuron00001CNewMexico#0490c2SFSanta Fe000019Nebraska#0470c2DSDawson000023NewCaledonia#NC.SU.MO0c2MOMoindou000026Manitoba#CA.MB.PM0c2PMPembina Region000019NewWorld#760c2SNSenegal00001FTurkey#210c2DYDiyarbak&#305;r000025WorldwithCountries#240c2GLGreenland00001CEgypt_346255#090c2FYFaiyum00002AAzerbaijan#190c2GDG&#601;d&#601;b&#601;y000019Ukraine#010c2CKCherkasy000020SanMarino#080c2MGMontegiardino00001BAsiaGeorgia#020c2AJAdjara000018Belgium#020c2HAHainaut00001BEurope2#EU.BE0c2BEBelgium00001BAlgeria#DZ.EO0c2EOEl Oued000019Jordan#JO.MD0c2MDMadaba000023CentralAmerica2#CE.JM0c2JMJamaica00001ETanzania#TZ.SH0c2SHShinyanga000034PapuaNewGuinea#PG.NC0c2NCNational Capital District00001EUzbekistan#UZ.AN0c2ANAndijon00001AHongKong#HK.NO0c2NONorth00001AMicronesia#FM.YA0c2YAYap000018Serbia#RS.PI0c2PIPirot000018Guinea#GN.MM0c2MMMamou00001ALibya#LY.MI0c2MIMisratah00001FBotswana#BW.NW0c2NWNorth West00001BVietnam#VN.NA0c2NANghe An00001CThailand#TH.LG0c2LGLampang000018Arkansas#0410c2DEDesha00001BWestVirginia#0690c2OHOhio000018Colorado#0490c2GRGrand000019Montana#0190c2DADaniels00001CSouthDakota#0870c2MCMcCook000016Alabama#0650c2HAHale00001FVirginia#0360c2CCCharles City00001AMissouri#2250c2WBWebster000015Utah#0010c2BVBeaver000019Texas#2970c2LIVLive Oak00001CLouisiana#0410c2FRFranklin000022Virginia#7600c2RIRichmond (City)000018Georgia#1050c2ELElbert00002DWorldwithCountries#1830c2PGPapua New Guinea00001BMinnesota#1570c2WBWabasha000018Kentucky#1410c2LOLogan00001AMichigan#1510c2SNSanilac000016Florida#0690c2LALake00001CMississippi#0510c2HOHolmes00001CPennsylvania#0170c2BUBucks000035NewfoundlandandLabrador#CA.NF.CE0c2CECentral Region00001BNewWorld#770c2SCSeycelles000016Turkey#220c2EDEdirne00001BPuertoRico#950c2MBMaunabo000020SaintLucia#010c2ARAnse-la-Raye000025WorldwithCountries#250c2ARArgentina00001CNewZealand#G10c2WKOWaikato00001DEgypt_346255#100c2GHGharbia000023Azerbaijan#200c2GAG&#601;nc&#601;00001AUkraine#020c2CHChernihiv00001DSanMarino#090c2SESerravalle00001AAsiaGeorgia#030c2GUGuria000016Belgium#030c2LILiege000022SouthAfrica#020c2NLKwaZulu-Natal000023Hungary#010c2BKB&aacute;cs-Kiskun00001ECambodia#KH.PY0c2PYPrey Veng000024CapeVerde#CV.RG0c2RGRibeira Grande00001DCameroon#CM.AD0c2ADAdamaoua00001EKazakhstan#KZ.ZM0c2ZMZhambyl00001DBurkinaFaso#BF.HO0c2HOHouet00001CSaudiArabia#SA.AS0c2ASAsir00002ECentralAfricanRepublic#CF.OP0c2OPOuham-Pende000020PapuaNewGuinea#PG.MN0c2MNManus00001ABurundi#BI.RT0c2RTRutana000026Sudan#SD.GD0c2GDAl Qadarif (Gedarif)000026Philippines#PH.DO0c2DODavao Oriental00001BRussia#RU.NG0c2NGNovgorod000019Libya#LY.MJ0c2MJAl Marj000018China2#CN.JL0c2JLJilin00001DVietnam#VN.NB0c2NBNinh Binh00001AThailand#TH.KR0c2KRKrabi00001BEngland#0380c2WIWiltshire000018Tennessee#1390c2POPolk000017France#0020c2ALAlsace00001BOklahoma#0910c2MLMcIntosh000016Iowa#1430c2OSOsceola000018Wisconsin#0330c2DNDunn000015Texas#4790c2WEBWebb000019Indiana#0950c2MAMadison00001ANewYork#0670c2OOOnondaga00001ENorthCarolina#1350c2OROrange00001CVirginia#0370c2CHCharlotte000018Georgia#2870c2TUTurner000017Kansas#0890c2JWJewell00001BSouthCarolina#0610c2LELee000018Illinois#1250c2MOMason000018Missouri#0450c2CKClark000022WorldwithCountries#1840c2WSSamoa00001CNorthDakota#0590c2MOMorton00001BTexas#1170c2DESDeaf Smith000023Virginia#5800c2CICovington (City)000016Ohio#0790c2JAJackson00001ANewMexico#0510c2SISierra000018Nebraska#0490c2DEDeuel000020USASouthWestRegion#490c2UTUtah00001ENewWorld#780c2SLSierra Leone000020Turkey#230c2EGElaz&#305;&#287;00001BSaintLucia#020c2DADauphin000023WorldwithCountries#260c2BOBolivia00001FNewZealand#G20c2WGNWellington00001AEgypt_346255#110c2GZGiza00001CAzerbaijan#210c2GRGoranboy00001BUkraine#030c2CVChernivtsi00001AGreenland#010c2NGAvannaa00001CAsiaGeorgia#040c2IMImereti000018Belgium#040c2LMLimburg00001FSouthAfrica#030c2FSFree State000018Hungary#020c2BABaranya000034NorthWestTerritories#CA.NT.MV0c2MVMackenzie Valley00002AFrenchGuiana#GL.SL.AY0c2AYAwala Yalimapo000028Mauritius#MU.RR0c2RRRiviere Du Rempart00001CGhana#GH.UW0c2UWUpper West00001CEurope2#EU.BG0c2BGBulgaria000022BurkinaFaso#BF.GZ0c2GZGanzourgou00001BZambia#ZM.NO0c2NONorthern00001FMongolia#MN.SB0c2SBSukhbaatar000022CoteDivoire#CI.WR0c2WRWorodougou00001BRussia#RU.MR0c2MRMordovia00001BMalawi#MW.CK0c2CKChikwawa000017Arkansas#0430c2DRDrew000020England#0390c2WOWorcestershire000020WestVirginia#0710c2PEPendleton00001AFrance#0030c2AQAquitaine00001BColorado#0510c2GUGunnison000018Montana#0210c2DWDawson00001FSouthDakota#0890c2MPMcPherson000017Alabama#0670c2HEHenry000014Asia#0190c2JPJapan000018Missouri#2270c2WOWorth000018Utah#0030c2BEBox Elder000016Texas#2990c2LANLlano000019Louisiana#0430c2GRGrant000019Georgia#1070c2EMEmanuel00002CWorldwithCountries#1850c2SBSolomon Islands00001AMinnesota#1590c2WDWadena000017Kentucky#1430c2LYLyon00001EMichigan#1530c2SHSchoolcraft000015Florida#0710c2LELee00001FMississippi#0530c2HUHumphreys00001DPennsylvania#0190c2BTButler00002BMadagascarRegions#MG.AV.AG0c2AGAnalamanga000019NewWorld#790c2SOSomalia000018Turkey#240c2ENErzincan000021PuertoRico#970c2MGMayag&uuml;ez00001CSaintLucia#030c2CACastries000022WorldwithCountries#270c2BRBrazil00001FNewZealand#G30c2WTCWest Coast00001EEgypt_346255#120c2ISIsmailia000026Azerbaijan#220c2GYG&ouml;y&ccedil;ay00001FUkraine#040c2DPDnipropetrovsk000017Greenland#020c2EGTunu00001CAsiaGeorgia#050c2KAKakheti00001BBelgium#050c2LULuxembourg000016Greece#010c2ATAttica000024Hungary#030c2BEB&eacute;k&eacute;s000025PolandCounties#PL.PM.SL0c2PSLSlupsk00001CBurkinaFaso#BF.ZR0c2ZRZiro00001FQatar#QA.GH0c2GHAl Ghuwariyah00001AEritrea#ER.AN0c2ANAnseba00001DUK7#UK.NI0c2NINorth Ireland000019Russia#RU.MS0c2MSMoscow00001ATunisia#TN.TO0c2TOTozeur000017Uganda#UG.GL0c2GLGulu000022FranceDepartment#FR.IS0c2ISIsere00001CVietnam#VN.ND0c2NDNam Dinh00001APalau#PW.AM0c2AMAimeliik00001EEngland#0400c2NYN. Yorkshire00001ATennessee#1410c2PUPutnam000019France#0040c2AUAuvergne000018Oklahoma#0930c2MAMajor000013Iowa#1450c2PAPage00001EWisconsin#0350c2ECEau Claire000018Texas#4810c2WHAWharton000018Indiana#0970c2MRMarion000019NewYork#0690c2OTOntario00001FNorthCarolina#1370c2PAPamlico000018Georgia#2890c2TWTwiggs000018Kansas#0910c2JOJohnson000021SouthCarolina#0630c2LXLexington000019Illinois#1270c2MCMassac000017Missouri#0470c2CYClay000022WorldwithCountries#1860c2TOTonga00001FNorthDakota#0610c2MUMountrail000016Texas#1190c2DELDelta000018Ohio#0810c2JEJefferson00001BNewMexico#0530c2SOSocorro000018Nebraska#0510c2DIDixon00002AMadagascarRegions#MG.MA.BE0c2BEBetsiboka00003APrinceEdwardIsland#CA.PE.NC0c2NCNorth Cape Coastal Drive000027Manitoba#CA.MB.PR0c2PRParkland Region00002BMadagascarRegions#MG.TM.AI0c2AIAtsinanana00001ENewWorld#800c2ZASouth Africa000017Turkey#250c2EMErzurum00001CSaintLucia#040c2CHChoiseul000021WorldwithCountries#280c2CLChile000016USA#LA0c2LALouisiana000024Egypt_346255#130c2KSKafr el-Sheikh000022Azerbaijan#230c2HAHac&#305;qabul000018Ukraine#050c2DTDonetsk00001ALatvia#010c2AIAizkraukle000018Greenland#030c2VGKitaa000021AsiaGeorgia#060c2KKKvemo Kartli000019Haiti#030c2NONord-Ouest000016Belgium#060c2NANamur00001EGreece#020c2CGCentral Greece000021SouthAfrica#050c2ECEastern Cape000033Hungary#040c2BOBorsod-Aba&uacute;j-Zempl&eacute;n000017Nigeria#NG.IM0c2IMImo00001BTanzania#TZ.RV0c2RVRuvuma00001BTanzania#TZ.TB0c2TBTabora00001CMacedonia#MK.ET0c2ETTetovo00001DSerbia#RS.PM0c2PMPomoravlje00001BBurundi#BI.BB0c2BBBubanza000020Tunisia#TN.SZ0c2SZSidi Bou Zid00001APalau#PW.SO0c2SOSonsorol000018Iran#IR.MK0c2MKMarkazi000018Palau#PW.AN0c2ANAngaur00001EPennsylvania#0210c2CACambria00001BArkansas#0450c2FAFaulkner00001FEngland#0410c2TWTyne And Wear000020WestVirginia#0730c2PLPleasants000019France#0050c2BRBretagne00001BColorado#0530c2HIHinsdale00001CMontana#0230c2DLDeer Lodge00001ESouthDakota#0910c2MAMarshall000019Alabama#0690c2HOHouston000019Asia#0210c2KZKazakhstan000019Missouri#2290c2WRWright000022Alaska#1300c2KGKetchikan Gateway000014Utah#0050c2CACache000017Texas#3010c2LOVLoving00001ALouisiana#0450c2IBIberia000017Georgia#1090c2EVEvans000023WorldwithCountries#1870c2TVTuvalu00001AMinnesota#1610c2WSWaseca00001CKentucky#1450c2MKMcCracken00001DMichigan#1550c2SWShiawassee000016Florida#0730c2LOLeon00001FMississippi#0550c2ISIssaquena000017NewWorld#810c2SDSudan00001ETurkey#260c2ESEski&#351;ehir000018PuertoRico#990c2MCMoca00001BSaintLucia#050c2DEDennery000024WorldwithCountries#290c2COColombia00001CEgypt_346255#140c2MTMatruh000024Azerbaijan#240c2IM&#304;mi&#351;li000020Ukraine#060c2IFIvano-Frankivsk00001CLatvia#020c2ALAl&#363;ksne000026AsiaGeorgia#070c2MMMtskheta-Mtianeti000020Belgium#070c2OVOost-Vlaanderen000021Greece#030c2CMCentral Macedonia00001CSouthAfrica#060c2GTGauteng000019Hungary#050c2BUBudapest000029PolandCounties#PL.PK.TM0c2PTMTarnobrzeg000018Nauru#NR.ME0c2MEMeneng00001BEurope2#EU.UA0c2UAUkraine00001AEurope2#EU.TK0c2TKTurkey00001BEurope2#EU.AT0c2ATAustria00001BAlgeria#DZ.ET0c2ETEl Tarf000021PapuaNewGuinea#PG.MR0c2MRMorobe000025Philippines#PH.DS0c2DSDavao del Sur00002FHungaryRegions#HU.SG0c2SGSouthern Great Plain000018England#0420c2MSMersey000018Tennessee#1430c2RHRhea00001BMaryland#0010c2ALAllegany00001AFrance#0060c2BUBourgogne00001BOklahoma#0950c2MRMarshall000018Iowa#1470c2PLPalo Alto00001CWisconsin#0370c2FLFlorence000018Texas#4830c2WHEWheeler00001CAsia#0220c2KPKorea (north)00001AIndiana#0990c2MSMarshall000018NewYork#0710c2OROrange000022NorthCarolina#1390c2PSPasquotank00001FVirginia#0410c2CSChesterfield000017Georgia#2910c2UNUnion000017Kansas#0930c2KEKearny000021SouthCarolina#0650c2MCMcCormick000019Illinois#1290c2MDMenard00001AMissouri#0490c2CIClinton000024WorldwithCountries#1880c2VUVanuatu00001CNorthDakota#0630c2NENelson000017Texas#1210c2DENDenton000013Ohio#0830c2KNKnox000018NewMexico#0550c2TATaos000018Nebraska#0530c2DODodge00001BNewWorld#820c2SZSwaziland000023USANorthEastRegion#180c2INIndiana00001ESaintLucia#060c2GIGros Islet000023WorldwithCountries#300c2ECEcuador00001BEgypt_346255#150c2MNMinya00002CAzerbaijan#250c2IS&#304;smay&#305;ll&#305;000018Ukraine#070c2KKKharkiv000015Latvia#030c2BLBalvi000036AsiaGeorgia#080c2RLRacha-Lechkhumi and Kvemo Svaneti000020Belgium#080c2WVWest-Vlaanderen000015Greece#040c2CRCrete00001FSouthAfrica#070c2MPMpumalanga000020Hungary#060c2CSCsongr&aacute;d000025PolandCounties#PL.MA.TM0c2MTMTarnow00001AMali#ML.KK0c2KKKoulikoro000022Uzbekistan#UZ.SU0c2SUSurxondaryo000024Uzbekistan#UZ.TK0c2TKTashkent City000018Panama#PA.CC0c2CCCocle000026PapuaNewGuinea#PG.NI0c2NINew Ireland00001ABurundi#BI.RY0c2RYRuyigi00001FMacedonia#MK.GB0c2GBGazi Baba00001BRussia#RU.OB0c2OBOrenburg000018Malawi#MW.DE0c2DEDedza00002CFranceDepartment#FR.IV0c2IVIlle et Vilaine00001EPennsylvania#0230c2CMCameron00001BArkansas#0470c2FRFranklin00001EEngland#0430c2GMG.Manchester000021WestVirginia#0750c2POPocahontas000017France#0070c2CECentre00001BColorado#0550c2HUHuerfano000018Montana#0250c2FAFallon00001BSouthDakota#0930c2MEMeade000019Alabama#0710c2JAJackson00001CAsia#0230c2KRKorea (south)000015Utah#0070c2CRCarbon000018Texas#3030c2LUBLubbock00001DLouisiana#0470c2IEIberville000018Georgia#1110c2FAFannin00002AWorldwithCountries#1890c2NCNew Caledonia00001EMinnesota#1630c2WAWashington00001BKentucky#1470c2MRMcCreary00001AMichigan#1570c2TUTuscola000016Florida#0750c2LVLevy00001EMississippi#0570c2ITItawamba00001ANewWorld#830c2TZTanzania000017Turkey#280c2GIGiresun00001BSaintLucia#070c2LBLaborie00002CWorldwithCountries#310c2FKFalkland Islands00001DEgypt_346255#160c2MFMonufia00002BAzerbaijan#260c2KAK&#601;lb&#601;c&#601;r000018Ukraine#080c2KSKherson000016Latvia#040c2BUBauska000024NorthEuropeanRegion#010c2DKDenmark000027AsiaGeorgia#090c2SJSamtskhe-Javakheti000019Haiti#060c2ARArtibonite00001FBelgium#090c2BWBrabant Wallon000029Greece#050c2EMEast Macedonia and Thrace000022SouthAfrica#080c2NCNorthern Cape00001CThailand#TH.LN0c2LNLamphun00001DThailand#TH.MD0c2MDMukdahan000024CapeVerde#CV.SC0c2SCSanta Catarina000023SaoTomeandPrincipe#ST.CU0c2CUCaue00001BKyrgyzstan#KG.CU0c2CUChuy00001CLesotho#LS.MF0c2MFMefeteng00001FZimbabwe#ZW.MA0c2MAManicaland000015Benin#BJ.ZO0c2ZOZou00001BIran#IR.MN0c2MNMazandaran00001CEngland#0440c2WMW.Midlands000019Tennessee#1450c2RORoane00001FMaryland#0030c2ANAnne Arundel000022France#0080c2CHChampagne-Ardenne000018Oklahoma#0970c2MYMayes000017Iowa#1490c2PYPlymouth00001FWisconsin#0390c2FDFond du Lac000018Texas#4850c2WICWichita000018Indiana#1010c2MTMartin000019NewYork#0730c2OLOrleans00001ENorthCarolina#1410c2PEPender000019Virginia#0430c2CKClarke000017Georgia#2930c2UPUpson000018Kansas#0950c2KMKingman00001ESouthCarolina#0670c2MAMarion000019Illinois#1310c2MRMercer000017Missouri#0510c2CLCole000024WorldwithCountries#1900c2BABahrain00001CNorthDakota#0650c2OLOliver000017Texas#1230c2DEWDewitt000013Ohio#0850c2LALake00001CNewMexico#0570c2TRTorrance00001ANebraska#0550c2DUDouglas00001DHungary#080c2FEFej&eacute;r000016NewWorld#840c2TGTogo00001ASaintLucia#080c2MIMicoud000029WorldwithCountries#320c2GFFrench Guiana000020Egypt_346255#170c2NVNew Valley000026Azerbaijan#270c2KUK&uuml;rd&#601;mir00001DUkraine#090c2KMKhmelnytskyi00001ALatvia#050c2CEC&#275;sis000024NorthEuropeanRegion#020c2EEEstonia000021AsiaGeorgia#100c2SKShida Kartli000015Haiti#070c2CECentre000016Greece#060c2EPEpirus00001CSouthAfrica#090c2LPLimpopo000024PolandCounties#PL.MZ.RM0c2MRMRadom000024SierraLeone#SL.NO.PL0c2PLPort Loko000017Palau#PW.AR0c2ARAirai00001EOman#OM.DA0c2DAAd Dakhiliyah000022CapeVerde#CV.SD0c2SDSao Domingos000029BurkinaFaso#BF.ZW0c2ZWZoundw&eacute;ogo000030DemocraticRepublicoftheCongo#CD.MN0c2MNManiema00001ASomalia#SO.NU0c2NUNugaal00001CNepal#NP.SA0c2SASagarmatha000027Philippines#PH.DV0c2DVDavao del Norte00001BRussia#RU.NN0c2NNNenetsia000018Libya#LY.MQ0c2MQMurzuq00001AChina2#CN.JS0c2JSJiangsu00001DPennsylvania#0250c2CRCarbon000019Arkansas#0490c2FUFulton000019England#0450c2RNRutland00001EWestVirginia#0770c2PRPreston000016France#0090c2COCorse00001AColorado#0570c2JAJackson000018Montana#0270c2FEFergus00001ESouthDakota#0950c2MLMellette00001BAlabama#0730c2JEJefferson00002BIndia#0010c2ANAndaman and Nicobar Islands000019Asia#0250c2KGKyrgyzstan000016Utah#0090c2DADaggett000015Texas#3050c2LYNLynn00001BLouisiana#0490c2JAJackson000019Georgia#1130c2FYFayette000021WorldwithCountries#1910c2IZIraq00001CMinnesota#1650c2WTWatonwan000019Kentucky#1490c2MLMcLean00001CMichigan#1590c2VBVan Buren000019Florida#0770c2LILiberty00001DMississippi#0590c2JAJackson000029NewCaledonia#NC.SU.NO0c2NONoum&eacute;a00002DMadagascarRegions#MG.TM.AN0c2ANAnalanjirofo000027Hungary#090c2GMGy&#337;r-Moson-Sopron000019NewWorld#850c2TNTunisia000024USANorthEastRegion#210c2KYKentucky000026DominicanRepublic#010c2AZ&Aacute;zua000024SaintLucia#090c2SOSoufri&egrave;re000022WorldwithCountries#330c2GYGuyana000021Egypt_346255#180c2NSNorth Sinai000025Azerbaijan#280c2LCLa&ccedil;&#305;n00001BUkraine#100c2KHKirovohrad00001ALatvia#060c2DADaugavpils000024NorthEuropeanRegion#030c2FIFinland00002BAsiaGeorgia#110c2SZSamegrelo-Zemo Svaneti00001EGreece#070c2IOIonian Islands00001FSouthAfrica#100c2NWNorth West000013Japan#10c2AIAichi000021Lesotho#LS.MH0c2MHMohale's Hoek000028Zimbabwe#ZW.MC0c2MCMashonaland Central000020Russia#RU.NO0c2NONorth Ossetia000019Tunisia#TN.TU0c2TUTunis00001DMalawi#MW.CR0c2CRChiradzulu00001FEngland#0460c2IWIsle of Wight00001DTennessee#1470c2RBRobertson00001CMaryland#0050c2BLBaltimore000025France#0100c2FRFranche-Comt&eacute;000019Oklahoma#0990c2MUMurray000019Iowa#1510c2PCPocahontas00001AWisconsin#0410c2FOForest00001ATexas#4870c2WIBWilbarger00001EIndia#0020c2APAndhra Pradesh00001AWashington#0010c2ADAdams000013Asia#0260c2LALaos000017Indiana#1030c2MIMiami000018NewYork#0750c2OSOswego000022NorthCarolina#1430c2PRPerquimans000018Virginia#0450c2CGCraig000018Georgia#2950c2WKWalker000016Kansas#0970c2KWKiowa000020SouthCarolina#0690c2MRMarlboro000019Illinois#1330c2MEMonroe000019Missouri#0530c2COCooper000023WorldwithCountries#1920c2IEIsrael00001DNorthDakota#0670c2PEPembina000018Texas#1250c2DICDickens000017Ohio#0870c2LWLawrence000019NewMexico#0590c2UNUnion000018Nebraska#0570c2DNDundy00002AYukonTerritory#CA.YT.ST0c2STSilver Trail000030MadagascarRegions#MG.TM.AO0c2AOAlaotra-Mangoro000023Hungary#100c2HBHajd&uacute;-Bihar000018NewWorld#860c2UGUganda000015Turkey#310c2HTHatay000023DominicanRepublic#020c2BRBahoruco00001ESaintLucia#100c2VFVieux Fort000024WorldwithCountries#340c2PYParaguay000020Afghanistan#010c2BDSBadakhshan00001FEgypt_346255#190c2PSPort Said000026Azerbaijan#290c2LNL&#601;nk&#601;ran000017Ukraine#110c2KRCrimea000022Latvia#070c2DGVDaugavpils (city)000024NorthEuropeanRegion#040c2ISIceland00001CAsiaGeorgia#120c2TBTbilisi000013Haiti#090c2NDNord00001CGreece#080c2NANorth Aegean000021SouthAfrica#110c2WCWestern Cape000013Japan#20c2AKAkita000023Pakistan#PK.NA0c2NANorthern Areas000020CapeVerde#CV.SF0c2SFSao Filipe00001ANigeria#NG.JI0c2JIJigawa000017Jordan#JO.MN0c2MNMaan000020Zambia#ZM.NW0c2NWNorth-Western000025CentralAmerica2#CE.LC0c2LCSt. Lucia000018Laos#LA.SL0c2SLSalavan00001DPennsylvania#0270c2CECentre00001AArkansas#0510c2GAGarland00001AEngland#0470c2WSW.Sussex00001DWestVirginia#0790c2PUPutnam00001EFrance#0110c2LLIle-de-France00001CColorado#0590c2JEJefferson00001AMontana#0290c2FLFlathead00001BSouthDakota#0970c2MIMiner000017Alabama#0750c2LALamar000021India#0030c2ARArunachal Pradesh000014Utah#0110c2DVDavis00001ATexas#3070c2MCUMcCulloch00001DLouisiana#0510c2JEJefferson000021Virginia#7700c2RORoanoke (City)000017Georgia#1150c2FLFloyd000023WorldwithCountries#1930c2JOJordan00001AMinnesota#1670c2WLWilkin00001CNevada#5100c2CACarson City00001AKentucky#1510c2MIMadison00001CMichigan#1610c2WAWashtenaw000019Florida#0790c2MSMadison00001CMississippi#0610c2JSJasper000016Hungary#110c2HEHeves000020NewWorld#870c2WAWestern Sahara000016Turkey#320c2ICMersin000021USANorthEastRegion#230c2MEMaine000023DominicanRepublic#030c2BHBarahona00001BSaintLucia#110c2PRPraslin000020WorldwithCountries#350c2PEPeru00001DAfghanistan#020c2BDGBadghis00001EEgypt_346255#200c2QAQalyubia00002DAzerbaijan#300c2LAL&#601;nk&#601;ran (City)000016Latvia#080c2DODobele000024NorthEuropeanRegion#050c2IEIreland000017Haiti#100c2NENord-Est00001BArmenia#010c2AGAragatsotn00001BGreece#090c2PEPeloponnese000014Japan#30c2AOAomori000021Thailand#TH.MH0c2MHMae Hong Son00001FCambodia#KH.RO0c2RORatanakiri00001CBurkinaFaso#BF.IO0c2IOIoba00001BPanama#PA.CH0c2CHChiriqui000031CentralAmerica2#CE.KN0c2KNSt. Kitts &amp; Nevis00001BAngola#AO.BG0c2BGBenguela000018Uganda#UG.YU0c2YUYumbe000025Zimbabwe#ZW.ME0c2MEMashonaland East00001AMalawi#MW.CT0c2CTChitipa00001DEngland#0480c2EYE.Yorkshire00001ETennessee#1490c2RURutherford000025France#0120c2LALanguedoc-Roussillon00001BOklahoma#1010c2MKMuskogee000013Iowa#1530c2POPolk000019Wisconsin#0430c2GRGrant000018Texas#4890c2WIAWillacy000015India#0040c2ASAssam00001BWashington#0030c2ASAsotin000017Asia#0280c2MYMalaysia000018Indiana#1050c2MOMonroe000018NewYork#0770c2OGOtsego00001ENorthCarolina#1450c2POPerson00001BVirginia#0470c2CUCulpeper000018Georgia#2970c2WNWalton000018Kansas#0990c2LBLabette000020SouthCarolina#0710c2NBNewberry00001DIllinois#1350c2MYMontgomery00001BMissouri#0550c2CFCrawford000023WorldwithCountries#1940c2KUKuwait00001CNorthDakota#0690c2PIPierce000017Texas#1270c2DIMDimmit00001DDenmark#0010c2AR&Aring;rhus000022Virginia#5900c2DADanville (City)000016Ohio#0890c2LILicking00001CNewMexico#0610c2VAValencia00001BNebraska#0590c2FIFillmore000026YukonTerritory#CA.YT.CA0c2CACampbell000029Hungary#120c2KEKom&aacute;rom-Esztergom000018NewWorld#880c2ZMZambia000017Turkey#330c2IPIsparta000024USANorthEastRegion#240c2MDMaryland000029DominicanRepublic#040c2DADajab&oacute;n000016UAE#010c2AZAbu Dhabi000024WorldwithCountries#360c2SRSuriname000013USA#KS0c2KSKansas00001DAfghanistan#030c2BGLBaghlan00001AEgypt_346255#210c2QEQena000019Azerbaijan#310c2LELerik00001CUkraine#130c2KVKiev Oblast000017Latvia#090c2GUGulbene000023NorthEuropeanRegion#060c2LVLatvia000014Haiti#110c2OUOuest000017Armenia#020c2ARArarat00001CGreece#100c2SASouth Aegean000026PolandCounties#PL.WN.OM0c2WOMOlsztyn000013Japan#40c2CHChiba00001BSriLanka#LK.JA0c2JAJaffna00001ELesotho#LS.MK0c2MKMokhotlong000016Nepal#NP.SE0c2SESeti000023PapuaNewGuinea#PG.NO0c2NONorthern00001CMongolia#MN.SL0c2SLSelenge00001BTanzania#TZ.AS0c2ASArusha00001EPennsylvania#0290c2CHChester000018Arkansas#0530c2GRGrant00001DEngland#0490c2SYS.Yorkshire00001EWestVirginia#0810c2RARaleigh000019France#0130c2LILimousin000018Colorado#0610c2KIKiowa00001AMontana#0310c2GAGallatin00001FSouthDakota#0990c2MNMinnehaha00001CAlabama#0770c2LULauderdale000015India#0050c2BIBihar000017Utah#0130c2DUDuchesne000019Texas#3090c2MCLMcLennan000023Louisiana#0530c2JDJefferson Davis000019Georgia#1170c2FOForsyth000024WorldwithCountries#1950c2LBLebanon00001AMinnesota#1690c2WIWinona00001ADenmark#0020c2BOBornholm00001BKentucky#1530c2MGMagoffin000018Michigan#1630c2WYWayne000019Florida#0810c2MNManatee00001FMississippi#0630c2JEJefferson000026MadagascarRegions#MG.MA.BO0c2BOBoeny00001ANewWorld#890c2ZWZimbabwe00001DTurkey#340c2IB&#304;stanbul000029USANorthEastRegion#250c2MAMassachusetts000012UAE#020c2AJAjman000023WorldwithCountries#370c2UYUruguay00001ECentralAmerica#010c2BHBelize00001DEgypt_346255#220c2RSRed Sea000020Azerbaijan#320c2MAMasall&#305;000018Ukraine#140c2LHLuhansk00001ELatvia#100c2JKJ&#275;kabpils000026NorthEuropeanRegion#070c2LTLithuania000012Haiti#120c2SDSud000018Armenia#030c2AVArmavir000018Greece#110c2THThessaly000013Japan#50c2EHEhime00001AChina2#CN.JX0c2JXJiangxi00001FEurope2#EU.CH0c2CHSwitzerland000016Angola#AO.BI0c2BIBie00001BBurundi#BI.CA0c2CACankuzo00001ERussia#RU.NS0c2NSNovosibirsk000020CoteDivoire#CI.FR0c2FRFromager000019Uganda#UG.IB0c2IBIbanda000017Libya#LY.NL0c2NLNalut00001DEngland#0500c2WYW.Yorkshire000019Tennessee#1510c2SCScott00001AMaryland#0090c2CACalvert000019France#0140c2LOLorraine000018Oklahoma#1030c2NONoble00001CIowa#1550c2PTPottawattamie000019Wisconsin#0450c2GEGreen00001BTexas#4910c2WIMWilliamson00001BWashington#0050c2BEBenton000017Asia#0300c2MNMongolia00001CIndiana#1070c2MNMontgomery000018NewYork#0790c2PUPutnam00001CNorthCarolina#1470c2PIPitt00001DVirginia#0490c2CMCumberland000016Georgia#2990c2WAWare000015Kansas#1010c2LELane00001ESouthCarolina#0730c2OCOconee000019Illinois#1370c2MGMorgan000017Missouri#0570c2DDDade000021WorldwithCountries#1960c2OMOman00001CNorthDakota#0710c2RARamsey000017Texas#1290c2DONDonley00001FDenmark#0030c2FRFrederiksberg000014Ohio#0910c2LOLogan00001BNebraska#0610c2FRFranklin000025Hungary#140c2NON&oacute;gr&aacute;d000018NewWorld#900c2GMGambia00001ATurkey#350c2IZ&#304;zmir000024USANorthEastRegion#260c2MIMichigan000021DominicanRepublic#060c2DUDuarte000012UAE#030c2DUDubai000025WorldwithCountries#380c2VEVenezuela00001AUSA#MA0c2MAMassachusetts000022CentralAmerica#020c2CSCosta Rica00001CAfghanistan#050c2BAMBamyan00001DEgypt_346255#230c2SQSharqia00002AAzerbaijan#330c2MIMing&#601;&ccedil;evir000015Ukraine#150c2LVLviv000017Latvia#110c2JLJelgava000023NorthEuropeanRegion#080c2NONorway000016Haiti#130c2SESud-Est00001CCzechRepublic#520c2PRPraha00001CArmenia#040c2GRGegharkunik00001BGreece#120c2WGWest Greece000013Japan#60c2FUFukui000018Thailand#TH.NA0c2NANan000023Madagascar#MG.FI0c2FIFianarantsoa00001BMacedonia#MK.ZA0c2ZAZajas000025Mississippi#0650c2JDJefferson Davis00001EPennsylvania#0310c2CIClarion000019Arkansas#0550c2GEGreene00001FWestVirginia#0830c2RNRandolph00002CFrance#0150c2MIMidi-Pyr&eacute;n&eacute;es00001DColorado#0630c2KCKit Carson00001AMontana#0330c2GRGarfield00001BSouthDakota#1010c2MOMoody00001AAlabama#0790c2LWLawrence00001CIndia#0070c2CAChhattisgarh000014Asia#0310c2NPNepal000014Utah#0150c2EMEmery000019Texas#3110c2MCMMcMullen00001DLouisiana#0550c2LALafayette00001AGeorgia#1190c2FRFranklin000022WorldwithCountries#1970c2QAQatar00001AMinnesota#1710c2WRWright00001FDenmark#0040c2FEFrederiksborg000019Kentucky#1550c2MHMarion00001AMichigan#1650c2WEWexford000018Florida#0830c2MRMarion000026NewCaledonia#NC.SU.PA0c2PAPa&iuml;ta000017NewWorld#910c2CGCongo000015UAE#040c2FUFujairah000023WorldwithCountries#390c2DZAlgeria000023CentralAmerica#030c2ESEl Salvador00001BAfghanistan#060c2FRAFarah00001BEgypt_346255#240c2SHSohag000021Azerbaijan#340c2NANaftalan city000019Ukraine#160c2MYMykolaiv00001FLatvia#120c2JELJelgava (city)00002BNorthEuropeanRegion#090c2UKUnited Kingdom000019Haiti#140c2GAGrand'Anse000017Armenia#050c2KTKotayk00001EGreece#130c2WMWest Macedonia000027PolandCounties#PL.ZP.SM0c2ZSMSzczecin000015Japan#70c2FKFukuoka00001BTunisia#TN.BZ0c2BZBizerte000021FranceDepartment#FR.JU0c2JUJura00002DFranceDepartment#FR.LA0c2LALoire Atlantique000025Thailand#TH.NB0c2NBNong Bua Lam Phu000022Europe2#EU.UK0c2UKUnited Kingdom000020Europe2#EU.VA0c2VAVatican City00001ECambodia#KH.SI0c2SISiem Reap000019Ghana#GH.WP0c2WPWestern000032DemocraticRepublicoftheCongo#CD.NK0c2NKNord-Kivu000019Namibia#NA.KA0c2KAKaras00001ANigeria#NG.KD0c2KDKaduna00001BComoros #KM.MO0c2MOMoheli000018Panama#PA.CL0c2CLColon00001ECoteDivoire#CI.ZA0c2ZAZanzan00001DZimbabwe#ZW.MI0c2MIMidlands000025Philippines#PH.ES0c2ESEastern Samar000024Burundi#BI.BM0c2BMBujumbura Mairie00001BNebraska#0630c2FOFrontier00001ETennessee#1530c2SQSequatchie00001BMaryland#0110c2CRCaroline000023France#0160c2NONord-Pas-de-Calais000019Oklahoma#1050c2NWNowata000018Iowa#1570c2PWPoweshiek00001EWisconsin#0470c2GLGreen Lake000017Texas#4930c2WILWilson00001BWashington#0070c2CHChelan000018Indiana#1090c2MGMorgan000018NewYork#0810c2QUQueens00001CNorthCarolina#1490c2PLPolk00001CVirginia#0510c2DIDickenson000018Georgia#3010c2WRWarren00001CKansas#1030c2LVLeavenworth000022SouthCarolina#0750c2OROrangeburg00001FVirginia#7750c2SASalem (City)00001BIllinois#1390c2MTMoultrie000019Missouri#0590c2DLDallas000029WorldwithCountries#1980c2SASaudi Arabia00001CNorthDakota#0730c2RNRansom000016Texas#1310c2DUVDuval000015Denmark#0050c2FYFyn000015Ohio#0930c2LRLorain000015Hungary#160c2PEPest00001BNewWorld#920c2MIMauritius000019Turkey#370c2KSKastamonu000024DominicanRepublic#080c2ESEspaillat00001BUAE#050c2RKRas Al Khaimah000022WorldwithCountries#400c2AOAngola000021CentralAmerica#040c2GTGuatemala00001CWorld#SA0c2SASouth America000018Andorra#020c2CACanillo00001CAfghanistan#070c2FYBFaryab000021Egypt_346255#250c2SSSouth Sinai00003DAzerbaijan#350c2NXNax&ccedil;&#305;van &#350;&#601;h&#601;r000017Ukraine#170c2ODOdessa000024Latvia#130c2JURJ&#363;rmala (city)000023NorthEuropeanRegion#100c2SESweden000015Haiti#150c2NINippes000015Armenia#060c2LOLori000024FrenchGuiana#GF.CY.IR0c2IRIracoubo000017Japan#80c2FSFukushima000019CapeVerde#CV.SL0c2SLSal000019Nigeria#NG.KE0c2KEKebbi000019Ghana#GH.EP0c2EPEastern000018Niger#NE.ZI0c2ZIZinder00001ATanzania#TZ.TN0c2TNTanga000029PapuaNewGuinea#PG.NS0c2NSNorth Solomons00001AAngola#AO.CB0c2CBCabinda000018Russia#RU.OL0c2OLOryal000018Uganda#UG.HO0c2HOHoima000017Malawi#MW.DO0c2DODowa000021Virginia#5950c2EMEmporia (City)000018Florida#0850c2MAMartin00001BMississippi#0670c2JOJones000021Pennsylvania#0330c2CLClearfield00001CArkansas#0570c2HEHempstead00001EWestVirginia#0850c2RIRitchie000020France#0170c2NRBasse-Normandie000017Colorado#0650c2LALake000019Montana#0350c2GCGlacier000020SouthDakota#1030c2PEPennington000015Alabama#0810c2LELee000017Asia#0330c2PKPakistan000017Utah#0170c2GAGarfield000018Texas#3130c2MADMadison00001BOceania#0010c2AUAustralia00001DLouisiana#0570c2LFLafourche000018Georgia#1210c2FUFulton000022WorldwithCountries#1990c2SYSyria000023Minnesota#1730c2YMYellow Medicine000027Denmark#0060c2KOK&oslash;benhavns Amt00001BKentucky#1570c2MSMarshall00002DSaskatchewan#CA.SK.SE0c2SESouth East Region000017Hungary#170c2SOSomogy00001DNewWorld#930c2AFAfghanistan000017Turkey#380c2KYKayseri000025Australia2#WA0c2WAWestern Australia000028DominicanRepublic#090c2INIndependencia000014UAE#060c2SHSharjah000021WorldwithCountries#410c2BJBenin000015USA#MD0c2MDMaryland000020CentralAmerica#050c2HOHonduras000017Andorra#030c2ENEncamp00001CAfghanistan#080c2GHAGhazni00001AEgypt_346255#260c2SZSuez000023Azerbaijan#360c2NENeft&ccedil;ala000018Ukraine#180c2PLPoltava00001DLatvia#140c2KRKr&#257;slava00001ABolivia#010c2HChuquisaca000017Armenia#070c2SHShirak00002CDistrictofColumbia#US.DC.NE0c2NENorth East000012Japan#90c2GIGifu000018Cameroon#CM.SU0c2SUSud000029FranceDepartment#FR.LC0c2LCLoir et Cher000019Syria#SY.LA0c2LALatakia00001ACambodia#KH.TA0c2TATakeo000020CapeVerde#CV.SM0c2SMSao Miguel000021Mauritius#MU.BL0c2BLBlack River00001FBurkinaFaso#BF.KA0c2KAKadiogo00001AAlgeria#DZ.GL0c2GLGuelma000021Angola#AO.CC0c2CCCuando Cubango00001DUzbekistan#UZ.BU0c2BUBuxoro00001DSerbia#RS.PZ0c2PZPrizrenski000017Russia#RU.OM0c2OMOmsk000018Libya#LY.MZ0c2MZMizdah000014Ohio#0950c2LULucas00001CFlorida#0860c2DAMiami-Dade000019Nebraska#0650c2FUFurnas00001ATennessee#1550c2SBSevier000014UK#0010c2ENEngland00001AMaryland#0130c2COCarroll000021France#0180c2PDPays de la Loire00001BOklahoma#1070c2OKOkfuskee000017Iowa#1590c2RGRinggold000018Wisconsin#0490c2IOIowa000018Texas#4950c2WINWinkler000015India#0100c2DEDelhi00001CWashington#0090c2CMClallam00001AAsia#0340c2PHPhilippines000018Indiana#1110c2NENewton00001CNewYork#0830c2RERensselaer000020NorthCarolina#1510c2RARandolph00001CVirginia#0530c2DNDinwiddie00001CGeorgia#3030c2WGWashington000018Kansas#1050c2LCLincoln00001FSouthCarolina#0770c2PIPickens000016Oceania#0020c2FJFiji000017Illinois#1410c2OGOgle00001AMissouri#0610c2DADaviess00002FWorldwithCountries#2000c2AEUnitedArabEmirates00001ENorthDakota#0750c2RVRenville000019Texas#1330c2EASEastland000022Denmark#0070c2KBK&oslash;benhavn00001FNewCaledonia#NC.NO.VO0c2VOVoh00002EHungary#180c2SZSzabolcs-Szatm&aacute;r-Bereg000019NewWorld#940c2AMArmenia00001FTurkey#390c2KLK&#305;rklareli000028DominicanRepublic#100c2ALLa Altagracia00001AUAE#070c2UQUmm Al Quwain000024WorldwithCountries#420c2BWBotswana000015USA#KY0c2KYKentucky000012USA#ME0c2MEMaine000021CentralAmerica#060c2NUNicaragua00001BAndorra#040c2LMLa Massana00001BAfghanistan#090c2GHOGhowr00001BEgypt_346255#270c2LXLuxor00001DAzerbaijan#370c2OGO&#287;uz000016Ukraine#190c2RVRivne00001CLatvia#150c2KUKuld&#299;ga00001ABolivia#020c2CCochabamba000017Armenia#080c2SUSyunik000026PolandCounties#PL.MZ.SM0c2MSMSiedlce000023FranceDepartment#FR.LD0c2LDLandes000021CapeVerde#CV.SN0c2SNSao Nicolau00001FCambodia#KH.BA0c2BABattambang00001CMacedonia#MK.ZE0c2ZEZelino000016Chad#TD.KA0c2KAKanem000022Guyana#GY.MA0c2MAMahaica-Berbice000030HungaryRegions#HU.ST0c2STSouthern Transdanubia000023Libya#LY.NQ0c2NQAn Nuqat al Khams000018Florida#0870c2MOMonroe00001CMississippi#0690c2KEKemper00001EPennsylvania#0350c2CNClinton00001DArkansas#0590c2HSHot Spring00001CWestVirginia#0870c2RORoane000015UK#0020c2SCScotland000019France#0190c2PIPicardie00001BColorado#0670c2LPLa Plata00001FMontana#0370c2GVGolden Valley00001DSouthDakota#1050c2PRPerkins00001BAlabama#0830c2LILimestone000013India#0110c2GOGoa000014Utah#0190c2GRGrand000017Texas#3150c2MARMarion00001AOceania#0030c2KIKiribati00001CLouisiana#0590c2LSLa Salle000018Georgia#1230c2GIGilmer000022WorldwithCountries#2010c2YMYemen00001DDenmark#0080c2NONordjylland000019Kentucky#1590c2MTMartin00002AMadagascarRegions#MG.AV.BN0c2BNBongolava000017Armenia#090c2TVTavush00001CNewWorld#950c2AZAzerbaijan000022Turkey#400c2KHK&#305;r&#351;ehir000033DominicanRepublic#110c2EPEl&iacute;as Pi&ntilde;a000028WorldwithCountries#430c2BFBurkina Faso000017Sweden#020c2KBlekinge00001ECentralAmerica#070c2PMPanama000017Andorra#050c2OROrdina00001DAfghanistan#100c2HELHelmand00001CEgypt_346255#280c2HWHelwan000029Azerbaijan#380c2QAQ&#601;b&#601;l&#601;00001CLatvia#160c2LELiep&#257;ja000017Bolivia#030c2BEl Beni00001ECameroon#CM.SW0c2SWSud-Ouest00001EVietnam#VN.NT0c2NTNinh Thuan000017Nauru#NR.NI0c2NINibok000022Thailand#TH.NF0c2NFNakhon Phanom000018Angola#AO.BO0c2BOBengo000019Nepal#NP.BA0c2BABagmati000017Russia#RU.PE0c2PEPerm00001EMongolia#MN.AR0c2ARArkhangai000021Mongolia#MN.BH0c2BHBayankhongor000017Laos#LA.AT0c2ATAttapu000016Denmark#0090c2RIRibe000016Ohio#0970c2MAMadison000017Nebraska#0670c2GAGage00001ATennessee#1570c2SHShelby00001AUK#0030c2NINorth Ireland000018Maryland#0150c2CECecil000021France#0200c2PCPoitou-Charentes00001BOklahoma#1090c2OLOklahoma000012Iowa#1610c2SASac000018Wisconsin#0510c2IRIron000015Texas#4970c2WISWise000017India#0120c2GUGujarat00001AWashington#0110c2CAClark000021Asia#0360c2RURussian Federation000017Indiana#1130c2NONoble00001ANewYork#0850c2RIRichmond000020NorthCarolina#1530c2RIRichmond000017Georgia#3050c2WYWayne000015Kansas#1070c2LNLinn000020SouthCarolina#0790c2RIRichland000022Oceania#0040c2MHMarshall Islands000019Illinois#1430c2PEPeoria000019Missouri#0630c2DKDeKalb000028WorldwithCountries#2020c2PRPuerto Rico00001ENorthDakota#0770c2RIRichland000016Texas#1350c2ECTEctor00001CArmenia#100c2VDVayots Dzor00002CCentralAmericawithCaribbeans#010c2BHBelize00002CHungary#200c2JNJ&aacute;sz-Nagykun-Szolnok00001CNewWorld#960c2BDBangladesh000017Turkey#410c2KCKocaeli000024DominicanRepublic#120c2ROLa Romana000023WorldwithCountries#440c2BIBurundi00001DSweden#030c2XG&auml;vleborg000032Andorra#060c2SJSant Juli&agrave; de L&ograve;ria00001BAfghanistan#110c2HERHerat000024Egypt_346255#290c2SO6th of October000017Azerbaijan#390c2QXQax000015Ukraine#210c2SMSumy000024Latvia#170c2LPXLiep&#257;ja (city)000016Bolivia#040c2LLa Paz000018China2#CN.MA0c2MAMacao00001ECapeVerde#CV.TF0c2TFTarrafal000016Mali#ML.KY0c2KYKayes00001BEurope2#EU.BY0c2BYBelarus00001BEurope2#EU.DE0c2DEGermany00001ALesotho#LS.MS0c2MSMaseru00001CLaos#LA.SV0c2SVSavannakhet000023Macedonia#MK.GP0c2GPGjorce Petrov000027Zimbabwe#ZW.MN0c2MNMatabeleland North00001ABurundi#BI.BR0c2BRBururi00001DRussia#RU.NZ0c2NZNizhegorod000016Laos#LA.BK0c2BKBokeo000024Denmark#0100c2RNRingkj&oslash;bing000018Kentucky#1610c2MOMason000018Florida#0890c2NANassau00001FMississippi#0710c2LALafayette00001FPennsylvania#0370c2COColumbia000019Arkansas#0610c2HWHoward00001EWestVirginia#0890c2SUSummers000012UK#0040c2WAWales000031France#0210c2PRProvence-Alpes-C&ocirc;te D'Azur00001AColorado#0690c2LRLarimer000019Montana#0390c2GNGranite00001CSouthDakota#1070c2POPotter000019Alabama#0850c2LOLowndes000017India#0130c2HAHaryana000013Utah#0210c2IRIron000017Texas#3170c2MATMartin00001COceania#0050c2FMMicronesia00001BLouisiana#0610c2LILincoln00001AGeorgia#1250c2GLGlascock00002BWorldwithCountries#2030c2KYCayman Islands000018Armenia#110c2ERYerevan000030CentralAmericawithCaribbeans#020c2CSCosta Rica000016Hungary#210c2TOTolna000018NewWorld#970c2BTBhutan000029USANorthEastRegion#330c2NHNew Hampshire000024WorldwithCountries#450c2CMCameroon000021Andorra#070c2ALAndorra la Vella000019Azerbaijan#400c2QZQazax000019Ukraine#220c2TPTernopil00001CLatvia#180c2LMLimba&#382;i000015Bolivia#050c2OOruro00002BFranceDepartment#FR.LG0c2LGLot et Garonne000025DenmarkRegion#DK.HS0c2HSHovenstaden00001FBurma#MM.RA0c2RARakhine State00001CBurundi#BI.CI0c2CICibitoke00001CLaos#LA.BL0c2BLBolikhamxai00001ADenmark#0110c2RORoskilde000021Virginia#6000c2FAFairfax (City)000017Ohio#0990c2MHMahoning000019Nebraska#0690c2GRGarden000019Tennessee#1590c2SMSmith00001AMaryland#0170c2CHCharles000022France#0220c2RHRh&ocirc;ne-Alpes000021SpainProvinces#0010c2ABAlbacete00001BOklahoma#1110c2OMOkmulgee000014Iowa#1630c2SCScott00001BWisconsin#0530c2JAJackson000015Texas#4990c2WODWood000020India#0140c2HPHimachal Pradesh00001DWashington#0130c2CLColumbia000018Asia#0380c2SGSingapore000016Indiana#1150c2OHOhio00001ANewYork#0870c2RORockland00001FNorthCarolina#1550c2RORobeson000018Virginia#0570c2ESEssex000019Georgia#3070c2WSWebster000016Kansas#1090c2LGLogan00001ESouthCarolina#0810c2SASaluda000017Oceania#0060c2NRNauru000018Illinois#1450c2PRPerry000017Missouri#0650c2DEDent00001DNorthDakota#0790c2RORolette000018Texas#1370c2EDWEdwards000026Denmark#0120c2SOS&oslash;nderjylland000018Kentucky#1630c2MDMeade00001AFlorida#0910c2OLOkaloosa00001BMississippi#0730c2LMLamar00001FPennsylvania#0390c2CWCrawford00001FArkansas#0630c2INIndependence00001DWestVirginia#0910c2TATaylor000020France#0230c2HNHaute-Normandie000025SpainProvinces#0020c2AL&Aacute;lava00001DColorado#0710c2LSLas Animas000016Montana#0410c2HIHill00001DSouthDakota#1090c2RORoberts000017Alabama#0870c2MAMacon000021India#0150c2JKJammu and Kashmir000018Asia#0390c2LKSri Lanka000013Utah#0230c2JUJuab000016Texas#3190c2MASMason00001DOceania#0070c2NZNew Zealand00001ELouisiana#0630c2LVLivingston000017Georgia#1270c2GYGlynn000024Germany#0010c2BABaden-Wuerttemberg000031CentralAmericawithCaribbeans#030c2ESEl Salvador000014Hungary#220c2VAVas000025EuropeRegion#010c2NRNorthern Region000018NewWorld#980c2BNBrunei00001CTurkey#430c2KUK&uuml;tahya000026USANorthEastRegion#340c2NJNew Jersey00003FDominicanRepublic#140c2MTMar&iacute;a Trinidad S&aacute;nchez000026WorldwithCountries#460c2CVCape Verde000015USA#MI0c2MIMichigan000016Sweden#050c2IGotland000023Andorra#080c2EEEscaldes-Engordany00001BAfghanistan#130c2KABKabul00001CAzerbaijan#410c2QOQobustan00001AUkraine#230c2VIVinnytsia000015Latvia#190c2LULudza000015World#AF0c2AFAfrica000015Bolivia#060c2NPando000020SolomonIsland#SB.MK0c2MKMakira000022Thailand#TH.MS0c2MSMaha Sarakham000019Togo#TG.PL0c2PLPlateaux00001BCameroon#CM.CE0c2CECentre00001ANamibia#NA.KH0c2KHKhomas000019Nigeria#NG.LA0c2LALagos000017Angola#AO.UI0c2UIUige00002ACentralAmerica2#CE.KY0c2KYCayman Islands00001FMongolia#MN.UB0c2UBUlan Bator00001DMacedonia#MK.GR0c2GRGradsko000022Denmark#0130c2STStorstr&oslash;m000015Ohio#1010c2MRMarion00001BNebraska#0710c2GFGarfield00001BTennessee#1610c2STStewart00001DMaryland#0190c2DODorchester000021SpainProvinces#0030c2AIAlicante000018Oklahoma#1130c2OSOsage000015Iowa#1650c2SHShelby00001DWisconsin#0550c2JEJefferson000017Texas#5010c2YOAYoakum000019India#0160c2JHJharkhand00001CWashington#0150c2COCowlitz000018Indiana#1170c2OROrange00001ENewYork#0890c2SLSt. Lawrence000022NorthCarolina#1570c2RCRockingham00001AVirginia#0590c2FIFairfax000019Georgia#3090c2WEWheeler000015Kansas#1110c2LYLyon000023SouthCarolina#0830c2SPSpartanburg000017Oceania#0080c2PWPalau000018Illinois#1470c2PIPiatt00001AMissouri#0670c2DODouglas000018Germany#0020c2BYBayern00001DNorthDakota#0810c2SASargent000016Texas#1390c2ELIEllis00003BPrinceEdwardIsland#CA.PE.PC0c2PCPoints East Coastal Drive00002FCentralAmericawithCaribbeans#040c2GTGuatemala000020Hungary#230c2VEVeszpr&eacute;m000025EuropeRegion#020c2SRSouthern Region000021NewWorld#990c2MMBurma (Myanmar)000017Turkey#440c2MLMalatya000027DominicanRepublic#150c2MCMonte Cristi000034WorldwithCountries#470c2CPCentral African Republic000016Sweden#060c2NHalland00001CAfghanistan#140c2KAPKapisa000018Azerbaijan#420c2QBQuba000016Ukraine#240c2VOVolyn000016Latvia#200c2MAMadona00001DBolivia#070c2PPotos&iacute;000024PolandCounties#PL.OP.OM0c2OOMOpole000026MarshallIsland#MH.MH.RL0c2RLRongelap000021SolomonIsland#SB.ML0c2MLMalaita00001BChina2#CN.LN0c2LNLiaoning00001CAlgeria#DZ.GR0c2GRGhardaia000018Liberia#LR.LF0c2LFLofa000025Sudan#SD.GZ0c2GZAl Jazirah (Gezira)000017Yemen#YE.AB0c2ABAbyan000023Burundi#BI.BU0c2BUBujumbura Rural000031Guinea#GN.NZ0c2NZNz&eacute;r&eacute;kor&eacute;000017Denmark#0140c2VEVejle00001AKentucky#1650c2MEMenifee00001CFlorida#0930c2OKOkeechobee000020Mississippi#0750c2LULauderdale000021Pennsylvania#0410c2CUCumberland000018Arkansas#0650c2IZIzard00001DWestVirginia#0930c2TUTucker000027SpainProvinces#0040c2AMAlmer&iacute;a00001AColorado#0730c2LILincoln00001BMontana#0430c2JEJefferson00001DSouthDakota#1110c2SASanborn000019Alabama#0890c2MDMadison000019India#0170c2KAKarnataka000019Asia#0410c2TJTajikistan00001EAlaska#1500c2KOKodiak Island000013Utah#0250c2KAKane00001ATexas#3210c2MAGMatagorda000022Oceania#0090c2PGPapua New Guinea00001BLouisiana#0650c2MAMadison000018Georgia#1290c2GOGordon000018Germany#0030c2BEBerlin00002ECentralAmericawithCaribbeans#050c2HOHonduras000015Hungary#240c2ZAZala000024EuropeRegion#030c2WRWestern Region000016Turkey#450c2MNManisa000024USANorthEastRegion#360c2NYNew York000025DominicanRepublic#160c2PNPedernales000020WorldwithCountries#480c2TDChad00001CSweden#070c2ZJ&auml;mtland000020Azerbaijan#430c2QDQubadl&#305;00001CUkraine#250c2ZKZakarpattia000014Latvia#210c2OGOgre00001ABolivia#080c2SSanta Cruz00001EThailand#TH.NK0c2NKNong Khai00001FCambodia#KH.SR0c2SRSvay Rieng00001AEurope2#EU.CS0c2CSSerbia000020Macedonia#MK.ZK0c2ZKZelenikovo000017Yemen#YE.SD0c2SDSadah00001DSamoa #WS.SA0c2SASatupaitea00001EMacedonia#MK.GT0c2GTGostivar00001ESerbia#RS.SC0c2SCNorth Backa00001ENorthDakota#0830c2SHSheridan000018Texas#1410c2ELPEl Paso000024Denmark#0150c2VSVestsj&aelig;lland000015Ohio#1030c2MEMedina000019Nebraska#0730c2GOGosper00001AMinnesota#0010c2AIAitkin00001FConnecticut#0010c2FAFairfield00001CTennessee#1630c2SLSullivan00001CMaryland#0210c2FRFrederick000021SpainProvinces#0050c2ASAsturias000019Oklahoma#1150c2OTOttawa000014Iowa#1670c2SISioux00001AWisconsin#0570c2JUJuneau000016Texas#5030c2YOUYoung000016India#0180c2KEKerala00001CWashington#0170c2DODouglas000017Asia#0420c2THThailand000016Indiana#1190c2OWOwen00001ANewYork#0910c2SASaratoga00001DNorthCarolina#1590c2RWRowan00001BVirginia#0610c2FUFauquier000017Georgia#3110c2WTWhite00001AKansas#1130c2MPMcpherson00001ESouthCarolina#0850c2SUSumter000017Oceania#0100c2WSSamoa000017Illinois#1490c2PKPike00001AMissouri#0690c2DUDunklin00001DGermany#0040c2BRBrandenburg000027MadagascarRegions#MG.TL.ME0c2MEMenabe00002FMadagascarRegions#MG.AV.VA0c2VAVakinankaratra00002FCentralAmericawithCaribbeans#060c2NUNicaragua000024EuropeRegion#040c2EREastern Region000022Turkey#460c2KMKahramanmara&#351;000023WorldwithCountries#490c2KMComoros000022Sweden#080c2FJ&ouml;nk&ouml;ping000019Azerbaijan#440c2QRQusar00001BUkraine#260c2ZPZaporizhia00001BLatvia#220c2PRPrei&#316;i000016Bolivia#090c2TTarija000022SierraLeone#SL.SO.MO0c2MOMoyamba000027FrenchGuiana#GF.SL.GS0c2GSGrand Santi000033PolandCounties#PL.LD.PM0c2LPMPiotrkow Trybunalski000017Samoa #WS.AA0c2AAAana00002ABrazilRegion#BR.SE0c2SESouth East Region00001ATuvalu#TV.NA0c2NANanumea000018Nigeria#NG.KN0c2KNKano000018Mongolia#MN.TO0c2TOTov000027Zimbabwe#ZW.MS0c2MSMatabeleland South000020Serbia#RS.SD0c2SDCentral Banat000019Serbia#RS.RN0c2RNRasina000016Yemen#YE.AD0c2ADAdan000019Uganda#UG.IN0c2INIganga000018Germany#0050c2BMBremen000018Denmark#0160c2VIViborg000019Kentucky#1670c2MCMercer000018Florida#0950c2OROrange00001EMississippi#0770c2LWLawrence00001EPennsylvania#0430c2DADauphin00001AArkansas#0670c2JAJackson00001CWestVirginia#0950c2TYTyler00001ESpainProvinces#0060c2AVAvila000018Colorado#0750c2LOLogan00001EMontana#0450c2JBJudith Basin00001DSouthDakota#1130c2SHShannon000019Alabama#0910c2MRMarengo00001BIndia#0190c2LALakshadweep000016Utah#0270c2MIMillard000019Texas#3230c2MAVMaverick000021Oceania#0110c2SBSolomon Islands00001DLouisiana#0670c2MOMorehouse000017Georgia#1310c2GRGrady00002CCentralAmericawithCaribbeans#070c2PMPanama000024EuropeRegion#050c2CRCentral Region000027DominicanRepublic#180c2PPPuerto Plata000029WorldwithCountries#500c2CICote d Ivoire00001BUSA#NC0c2NCNorth Carolina000015Sweden#090c2HKalmar00001CAfghanistan#170c2LOWLowgar00001FAzerbaijan#450c2STSaatl&#305;000019Ukraine#270c2ZTZhytomyr00001CLatvia#230c2RER&#275;zekne000021SierraLeone#SL.EA.KE0c2KEKenema000025FranceDepartment#FR.MB0c2MBMorbihan000020Cambodia#KH.ST0c2STStung Treng000021CapeVerde#CV.SV0c2SVSao Vicente00001CSriLanka#LK.KE0c2KEKegalle000018Nigeria#NG.KO0c2KOKogi00001BEurope2#EU.DK0c2DKDenmark000022BurkinaFaso#BF.KJ0c2KJKomondjari00001FMacedonia#MK.GV0c2GVGevgelija000017Nepal#NP.BH0c2BHBheri000020Mongolia#MN.BO0c2BOBayan Olgii000017Guinea#GN.PI0c2PIPita000019Germany#0060c2HAHamburg00001BNorthDakota#0850c2SISioux000016Texas#1430c2ERAErath000014Ohio#1050c2MIMeigs000018Nebraska#0750c2GTGrant000019Minnesota#0030c2ANAnoka00001EConnecticut#0030c2HAHartford00001ATennessee#1650c2SUSumner00001AMaryland#0230c2GAGarrett000020SpainProvinces#0070c2BABadajoz000019Oklahoma#1170c2PAPawnee000014Iowa#1690c2STStory00001BWisconsin#0590c2KEKenosha000017Texas#5050c2ZAPZapata00001EIndia#0200c2MPMadhya Pradesh00001AWashington#0190c2FEFerry00001BAsia#0440c2TMTurkmenistan000017Indiana#1210c2PAParke00001DNewYork#0930c2SCSchenectady000022NorthCarolina#1610c2RURutherford000018Virginia#0630c2FLFloyd00001BGeorgia#3130c2WHWhitfield000017Kansas#1150c2MNMarion00001DSouthCarolina#0870c2UNUnion000017Oceania#0120c2TOTonga000017Illinois#1510c2POPope00001BMissouri#0710c2FRFranklin00002ACentralAmericawithCaribbeans#080c2CUCuba00001ATurkey#480c2MGMu&#287;la000020USANorthEastRegion#390c2OHOhio000022DominicanRepublic#190c2SCSalcedo00003CWorldwithCountries#510c2CDDemocratic Republic of the Congo000016USA#MN0c2MNMinnesota000019USA#ND0c2NDNorth Dakota000017Sweden#100c2WDalarnas00001FAfghanistan#180c2NANNangarhar00001DAzerbaijan#460c2SBSabirabad000024Latvia#240c2REZR&#275;zekne (city)000024Paraguay#010c2AAAlto Paran&aacute;000023PolandCounties#PL.WP.PI0c2WPIPila00001ALaos#LA.CH0c2CHChampasak000021Thailand#TH.NN0c2NNNakhon Nayok00002AHungaryRegions#HU.CH0c2CHCentral Hungary000023Qatar#QA.JB0c2JBJariyan Al Batnah000018Germany#0070c2HEHessen00001BKentucky#1690c2MFMetcalfe000019Florida#0970c2OSOsceola00001BMississippi#0790c2LKLeake00001FPennsylvania#0450c2DLDelaware00001CArkansas#0690c2JEJefferson00001DWestVirginia#0970c2UPUpshur000021SpainProvinces#0080c2BLBaleares000017Colorado#0770c2MEMesa000016Montana#0470c2LALake00001BSouthDakota#1150c2SPSpink000018Alabama#0930c2MIMarion00001BIndia#0210c2MAMaharashtra000015Utah#0290c2MOMorgan000017Texas#3250c2MEDMedina000018Oceania#0130c2TVTuvalu000020Louisiana#0690c2NANatchitoches000018Georgia#1330c2GEGreene00002DCentralAmericawithCaribbeans#090c2BSBahamas000018Turkey#490c2MSMu&#351;000028DominicanRepublic#200c2SMSaman&aacute;000024WorldwithCountries#520c2DJDjibouti000015USA#MO0c2MOMissouri000015USA#NE0c2NENebraska00001CAfghanistan#190c2NIMNimruz000022Azerbaijan#470c2SK&#350;&#601;ki000019Latvia#250c2RIR&#299;ga000019Paraguay#020c2AMAmambay00001BEastTimor#TL.AL0c2ALAileu00001EEastTimor#TL.BB0c2BBBobonaro00001FThailand#TH.NO0c2NONonthaburi00001FSriLanka#LK.KG0c2KGKurunegala00001EKyrgyzstan#KG.GB0c2GBBishkek000029BurkinaFaso#BF.KL0c2KLKoulp&eacute;logo00001ERwanda#RW.KV0c2KVKigali City000019Yemen#YE.SH0c2SHShabwah00001FAngola#AO.CN0c2CNCuanza Norte00001DZimbabwe#ZW.MV0c2MVMasvingo000028Germany#0080c2MEMecklenburg-Vorpommern00001BNorthDakota#0870c2SLSlope000016Texas#1450c2FALFalls000015Ohio#1070c2MCMercer00001ANebraska#0770c2GEGreeley00001AMinnesota#0050c2BEBecker000020Connecticut#0050c2LILitchfield00001ATennessee#1670c2TITipton00001AMaryland#0250c2HAHarford000022SpainProvinces#0090c2BRBarcelona000018Oklahoma#1190c2PYPayne000013Iowa#1710c2TATama00001CWisconsin#0610c2KWKewaunee000017Texas#5070c2ZAVZavala000017India#0220c2MNManipur00001DWashington#0210c2FRFranklin000019Asia#0460c2UZUzbekistan000017Indiana#1230c2PEPerry00001BNewYork#0950c2SHSchoharie00001FNorthCarolina#1630c2SASampson00001BVirginia#0650c2FVFluvanna000018Georgia#3150c2WCWilcox000019Kansas#1170c2MSMarshall000024SouthCarolina#0890c2WIWilliamsburg000019Oceania#0140c2VUVanuatu00001AIllinois#1530c2PUPulaski00001CMissouri#0730c2GAGasconade000034CentralAmericawithCaribbeans#100c2KYCayman Islands00001DTurkey#500c2NVNev&#351;ehir000038DominicanRepublic#210c2SZS&aacute;nchez Ram&iacute;rez000021WorldwithCountries#530c2EGEgypt000018Sweden#120c2GKronoberg000029Azerbaijan#480c2SA&#350;&#601;ki (City)000021Latvia#260c2RIXR&#299;ga (city)000025MarshallIsland#MH.MH.RR0c2RRRongrik00001CEastTimor#TL.AM0c2AMAmbeno00001CEastTimor#TL.BC0c2BCBaucau000020FranceDepartment#FR.LO0c2LOLot000022Thailand#TH.NP0c2NPNakhon Pathom00001CKuwait#KW.AH0c2AHAl Ahmadi000024BurkinaFaso#BF.KM0c2KMKomo&eacute;000025Zimbabwe#ZW.MW0c2MWMashonaland West000028CentralAfricanRepublic#CF.AC0c2ACOuham00001FGermany#0090c2NINiedersachsen000019Kentucky#1710c2MNMonroe00001CFlorida#0990c2PBPalm beach000019Mississippi#0810c2LELee00001APennsylvania#0470c2ELElk00001AArkansas#0710c2JOJohnson00001CWestVirginia#0990c2WAWayne000020SpainProvinces#0100c2BIBizkaia00001AColorado#0790c2MIMineral000021Montana#0490c2LCLewis and Clark00001DSouthDakota#1170c2STStanley00001AAlabama#0950c2MSMarshall000019India#0230c2MEMeghalaya000016Asia#0470c2VNVietnam000014Utah#0310c2PIPiute000017Texas#3270c2MENMenard00001FOceania#0150c2NCNew Caledonia00001BLouisiana#0710c2OROrleans000022Virginia#7900c2SNStaunton (City)00001AGeorgia#1350c2GWGwinnett00002DCentralAmericawithCaribbeans#110c2JMJamaica000028USANorthEastRegion#420c2PAPennsylvania00002DWorldwithCountries#540c2GQEquatorial Guinea00001AAzerbaijan#490c2SLSalyan000016Latvia#270c2SASaldus000021Paraguay#040c2CGCaaguaz&uacute;00002ANovaScotia#CA.NS.ET0c2ETEvangeline Trail00001CEastTimor#TL.AN0c2ANAinaro00001BUganda#UG.IS0c2ISIsingiro000018Uganda#UG.JI0c2JIJinja000024CaymanIslands#KY.NS0c2NSNorth Side00001BEthiopia#ET.OR0c2OROromia000020CapeVerde#CV.SZ0c2SZSanta Cruz00001CTuvalu#TV.NF0c2NFNukufetau000028Eritrea#ER.DK0c2DKDebubawi Keyih Bahri000016Mali#ML.MO0c2MOMopti00001BPanama#PA.VR0c2VRVeraguas00001BEurope2#EU.EE0c2EEEstonia00001AEurope2#EU.CY0c2CYCyprus000030BurkinaFaso#BF.KN0c2KNK&eacute;n&eacute;dougou000030CentralAfricanRepublic#CF.SE0c2SESangha-Mbaere000014Chad#TD.LC0c2LCLac000018Serbia#RS.RS0c2RSRaska000025Germany#0100c2NONordrhein-Westfalen00001BNorthDakota#0890c2STStark000017Texas#1470c2FANFannin000026Virginia#6100c2FCFalls Church (City)000014Ohio#1090c2MMMiami000017Nebraska#0790c2HAHall00001CMinnesota#0070c2BLBeltrami00001FConnecticut#0070c2MIMiddlesex000019Michigan#0010c2ALAlcona00001DTennessee#1690c2TRTrousdale000019Maryland#0270c2HOHoward00001FSpainProvinces#0110c2BUBurgos00001COklahoma#1210c2PIPittsburg000015Iowa#1730c2TYTaylor00001DWisconsin#0630c2LCLa Crosse000017India#0240c2MIMizoram00001DWashington#0230c2GFGarfield000016Indiana#1250c2PIPike00001ANewYork#0970c2SUSchuyler000020NorthCarolina#1650c2SCScotland00001BVirginia#0670c2FKFranklin000018Georgia#3170c2WLWilkes000016Kansas#1190c2MEMeade00001CSouthCarolina#0910c2YOYork000019Illinois#1550c2PTPutnam000019Missouri#0750c2GNGentry00002BCentralAmericawithCaribbeans#120c2HTHaiti000019Estonia#010c2HAHarjumaa000014Turkey#520c2OROrdu000023DominicanRepublic#230c2JUSan Juan000023WorldwithCountries#550c2EREritrea00001AUSA#NH0c2NHNew Hampshire00001ASweden#140c2BDNorrbotten000024Azerbaijan#500c2SI&#350;amax&#305;000015Latvia#280c2TATalsi000020Paraguay#050c2CZCaazap&aacute;000025PolandCounties#PL.WP.PM0c2WPMPoznan00002BMarshallIsland#MH.MH.AI0c2AIAilinglapalap00001EVietnam#VN.QB0c2QBQuang Binh000026Thailand#TH.NR0c2NRNakhon Ratchasima00001BPakistan#PK.PB0c2PBPunjab00001CTuvalu#TV.NG0c2NGNanumanga00001BNigeria#NG.KT0c2KTKatsina000022Europe2#EU.CZ0c2CZCzech Republic000025BurkinaFaso#BF.LE0c2LEL&eacute;raba000022Burma#MM.SA0c2SASagaing Division00001DMacedonia#MK.ZR0c2ZRZrnovci000019Panama#PA.DR0c2DRDarien000017Yemen#YE.TA0c2TATaizz000021Germany#0110c2RHRheinland-Pfalz00001DKentucky#1730c2MYMontgomery000017Florida#1010c2PAPasco00001DMississippi#0830c2LFLeflore00001BPennsylvania#0490c2ERErie00001CArkansas#0730c2LALafayette00001EWestVirginia#1010c2WEWebster000027SpainProvinces#0120c2CAC&aacute;ceres000019Colorado#0810c2MOMoffat000019Montana#0510c2LBLiberty00001BSouthDakota#1190c2SUSully000018Alabama#0970c2MOMobile000018India#0250c2NANagaland000015Asia#0490c2TWTaiwan000013Utah#0330c2RIRich000018Texas#3290c2MIDMidland00001CLouisiana#0730c2OUOuachita00001BGeorgia#1370c2HAHabersham000038CentralAmericawithCaribbeans#130c2DODominican Republic000018Estonia#020c2HIHiiumaa000014Turkey#530c2RIRize000028USANorthEastRegion#440c2RIRhode Island000036DominicanRepublic#240c2PMSan Pedro de Macor&iacute;s000024WorldwithCountries#560c2ETEthiopia000018USA#MS0c2MSMississippi00001ASweden#150c2T&Ouml;rebro00001EAfghanistan#230c2KANKandahar000024Azerbaijan#510c2SM&#350;&#601;mkir000016Latvia#290c2TUTukums000019Paraguay#060c2CECentral000024MarshallIsland#MH.MH.TA0c2TATaongi00001CRussia#RU.PR0c2PRPrimorsky00001BMongolia#MN.BU0c2BUBulgan000020Mongolia#MN.DA0c2DADarkhan Uul000019Uganda#UG.KA0c2KAKabale00001FBotswana#BW.SE0c2SESouth East000022FranceDepartment#FR.LR0c2LRLoire000023FranceDepartment#FR.MH0c2MHManche000021Thailand#TH.NS0c2NSNakhon Sawan000028Pakistan#PK.NW0c2NWNorth West Frontier000021BurkinaFaso#BF.KP0c2KPKompienga00003ATajikistan#TJ.RR0c2RRRegions of Republican Subordination00001AYemen#YE.BA0c2BAAl Bayda000019Missouri#0770c2GEGreene00001AGermany#0120c2SASaarland00001CNorthDakota#0910c2SESteele000018Texas#1490c2FAYFayette000015Ohio#1110c2MOMonroe00001BNebraska#0810c2HMHamilton00001AMinnesota#0090c2BNBenton00001FConnecticut#0090c2NHNew Haven000018Michigan#0030c2AGAlger00001ATennessee#1710c2UIUnicoi000017Maryland#0290c2KEKent000025SpainProvinces#0130c2CDC&aacute;diz00001BOklahoma#1230c2POPontotoc000014Iowa#1750c2UNUnion00001DWisconsin#0650c2LALafayette000016India#0260c2OROrissa00001AWashington#0250c2GAGrant000018Asia#0500c2HKHong Kong000018Indiana#1270c2POPorter000018NewYork#0990c2SESeneca00001ENorthCarolina#1670c2STStanly00001CVirginia#0690c2FDFrederick00001BGeorgia#3190c2WIWilkinson000016Kansas#1210c2MIMiami00001BIllinois#1570c2RARandolph000035NewfoundlandandLabrador#CA.NF.WS0c2WSWestern Region000031CentralAmericawithCaribbeans#140c2PRPuerto Rico00001CEstonia#030c2IVIda-Virumaa000017Turkey#540c2SKSakarya000023DominicanRepublic#250c2STSantiago000021WorldwithCountries#570c2GAGabon000014USA#MT0c2MTMontana000017USA#NJ0c2NJNew Jersey000025Sweden#160c2E&Ouml;sterg&ouml;tland00001CAfghanistan#240c2KDZKondoz000019Azerbaijan#520c2SXSamux000015Latvia#300c2VKValka000023Paraguay#070c2CNConcepci&oacute;n000023SierraLeone#SL.EA.KL0c2KLKailahun000018Russia#RU.PS0c2PSPskov00001BLibya#LY.QB0c2QBAl Qubbah000028Thailand#TH.NT0c2NTNakhon Si Thammarat00001CTuvalu#TV.NI0c2NINiulakita000020SriLanka#LK.KL0c2KLKilinochchi00001BCapeVerde#CV.BR0c2BRBrava00001DAngola#AO.CS0c2CSCuanza Sul000016Georgia#1390c2HLHall000019Germany#0130c2SCSachsen000019Kentucky#1750c2MAMorgan00001AFlorida#1030c2PLPinellas00001DMississippi#0850c2LNLincoln00001EPennsylvania#0510c2FAFayette00001BArkansas#0750c2LWLawrence00001DWestVirginia#1030c2WTWetzel000022SpainProvinces#0140c2CNCantabria00001CColorado#0830c2MNMontezuma000019Montana#0530c2LILincoln00001ASouthDakota#1210c2TOTodd000018Alabama#0990c2MNMonroe000014Asia#0510c2MOMacau000018Utah#0350c2SLSalt Lake000016Texas#3310c2MILMilam00001FLouisiana#0750c2PLPlaquemines000035NewfoundlandandLabrador#CA.NF.ES0c2ESEastern Region000038CentralAmericawithCaribbeans#150c2KNSt.Kitts and Nevis00001EEstonia#040c2JRJ&auml;rvamaa000016Turkey#550c2SSSamsun000034DominicanRepublic#260c2SRSantiago Rodr&iacute;guez000021WorldwithCountries#580c2GHGhana000025Azerbaijan#530c2SYSiy&#601;z&#601;n000018Latvia#310c2VMValmiera00001CParaguay#080c2CRCordillera000017Serbia#RS.SM0c2SMSrem000017Yemen#YE.AM0c2AMAmran000023FranceDepartment#FR.LT0c2LTLoiret000019Nigeria#NG.KW0c2KWKwara000022BurkinaFaso#BF.KR0c2KRKouritenga00001BLiberia#LR.MG0c2MGMargibi00001BBhutan#BT.LH0c2LHLhuntshi000016Yemen#YE.SN0c2SNSana000019Sudan#SD.JG0c2JGJungoli00001BIllinois#1590c2RIRichland000019Missouri#0790c2GRGrundy000020Germany#0140c2SHSachsen-Anhalt00001ENorthDakota#0930c2SUStutsman000017Texas#1510c2FISFisher000019Ohio#1130c2MGMontgomery000019Nebraska#0830c2HRHarlan00001DMinnesota#0110c2BSBig Stone000020Connecticut#0110c2NLNew London00001AMichigan#0050c2AEAllegan000019Tennessee#1730c2UNUnion00001DMaryland#0310c2MOMontgomery000029SpainProvinces#0150c2CSCastell&oacute;n00001FOklahoma#1250c2PWPottawatomie000018Iowa#1770c2VBVan Buren00001CWisconsin#0670c2LNLanglade000016India#0280c2PUPunjab000021Washington#0270c2GRGrays Harbor000017Indiana#1290c2PSPosey000019NewYork#1010c2STSteuben00001ENorthCarolina#1690c2SOStokes000018Virginia#0710c2GIGiles000017Georgia#3210c2WOWorth000018Africa#0010c2DZAlgeria000019Kansas#1230c2MCMitchell00002DSaskatchewan#CA.SK.SW0c2SWSouth West Region00002DCentralAmericawithCaribbeans#160c2AGAntigua000021Estonia#050c2JNJ&otilde;gevamaa000015Romania#010c2ABAlba000023DominicanRepublic#270c2VAValverde000022WorldwithCountries#590c2GNGuinea000020Sweden#180c2DS&ouml;dermanland00001CAfghanistan#260c2TAKTakhar000021Azerbaijan#540c2SQSumqay&#305;t000019Latvia#320c2VEVentspils000013World#AS0c2ASAsia00001FSierraLeone#SL.EA.KN0c2KNKono00002CDistrictofColumbia#US.DC.NW0c2NWNorth West000028PolandCounties#PL.MZ.CI0c2MCICieckanow00001ESerbia#RS.SN0c2SNNorth Banat00001BMongolia#MN.DD0c2DDDornod000026CoteDivoire#CI.HT0c2HTHaut-Sassandra00001EUganda#UG.KD0c2KDKaberamaido000025BrazilRegion#BR.SO0c2SOSouth Region00001ANamibia#NA.KU0c2KUKunene00001DBurkinaFaso#BF.KS0c2KSKossi000019Angola#AO.CU0c2CUCunene000019Georgia#1410c2HNHancock000024Germany#0150c2SSSchleswig-Holstein00001DKentucky#1770c2MBMuhlenberg000016Florida#1050c2POPolk00001DMississippi#0870c2LDLowndes00001DPennsylvania#0530c2FOForest000016Arkansas#0770c2LELee00001BWestVirginia#1050c2WIWirt00001ESpainProvinces#0160c2CECeuta00001BColorado#0850c2MTMontrose000018Montana#0550c2MCMcCone00001BSouthDakota#1230c2TRTripp00001CAlabama#1010c2MTMontgomery000019India#0290c2RARajasthan000017Africa#0020c2AOAngola000017Utah#0370c2SJSan Juan000016Texas#3330c2MISMills000021Louisiana#0770c2PCPointe Coupee000018Arizona#0010c2APApache00002ECentralAmericawithCaribbeans#170c2DMDominica000015Romania#020c2ARArad000015Turkey#570c2SPSinop000023DominicanRepublic#280c2SEEl Seibo000029WorldwithCountries#600c2GWGuinea-Bissau000017USA#NM0c2NMNew Mexico00001CAfghanistan#270c2WARWardak000022Azerbaijan#550c2SU&#350;u&#351;a000021Latvia#330c2VENVentspils (city)00001FParaguay#100c2GUGuair&aacute;000022FrenchGuiana#GF.CY.KR0c2KRKourou00001BUganda#UG.KE0c2KEKamwenge000020Samoa #WS.AL0c2ALAiga-i-le-Tai00002BFranceDepartment#FR.ML0c2MLMaine et Loire00001EVietnam#VN.QG0c2QGQuang Ngai00001FKyrgyzstan#KG.YK0c2YKYsyk Kol00001FThailand#TH.NW0c2NWNarathiwat00001CThailand#TH.PC0c2PCPhichit00001DTuvalu#TV.NL0c2NLNukulaelae000019Panama#PA.EM0c2EMEmbera000025CentralAmerica2#CE.NI0c2NINicaragua00001DMacedonia#MK.IL0c2ILIlinden00001EIllinois#1610c2RORock Island00001BMissouri#0810c2HAHarrison00001CGermany#0160c2THThueringen00001CNorthDakota#0950c2TOTowner000016Texas#1530c2FLOFloyd000015Ohio#1150c2MNMorgan000018Nebraska#0850c2HYHayes00001EMinnesota#0130c2BUBlue Earth00001DConnecticut#0130c2TOTolland000019Michigan#0070c2APAlpena00001DTennessee#1750c2VBVan Buren000022Maryland#0330c2PGPrince George's000024SpainProvinces#0170c2CRCiudad Real00001DOklahoma#1270c2PUPushmataha000016Iowa#1790c2WAWapello00001BWisconsin#0690c2LILincoln000016India#0300c2SISikkim00001BWashington#0290c2ISIsland000019Indiana#1310c2PUPulaski000019NewYork#1030c2SFSuffolk00001DNorthCarolina#1710c2SUSurry00001DVirginia#0730c2GLGloucester000016Africa#0030c2BJBenin00001BKansas#1250c2MGMontgomery00002ECentralAmericawithCaribbeans#180c2LCSt.Lucia000023Estonia#070c2LNL&auml;&auml;nemaa00001BRomania#030c2AGArge&#351;000015Turkey#580c2SVSivas000025DominicanRepublic#290c2HMHato Mayor000021WorldwithCountries#610c2KEKenya00001BAfghanistan#280c2ZABZabol000029Azerbaijan#560c2SS&#350;u&#351;a (City)000018World#AU0c2AUAustralia00001FParaguay#110c2ITItap&uacute;a000019Uganda#UG.KF0c2KFKotido000019Oman#OM.WU0c2WUAl Wusta00002FFranceDepartment#FR.MM0c2MMMeurthe et Moselle000019Congo#CG.KO0c2KOKouilou00001ACongo#CG.LE0c2LELekoumou00001FCapeVerde#CV.BV0c2BVBoa Vista00001AAlgeria#DZ.IL0c2ILIllizi00001EUzbekistan#UZ.FA0c2FAFargona000023Laos#LA.VI0c2VIVientiane Province000020Philippines#PH.GU0c2GUGuimaras00001AGeorgia#1430c2HRHaralson000019Kentucky#1790c2NENelson000018Florida#1070c2PNPutnam00001DMississippi#0890c2MAMadison00001FPennsylvania#0550c2FRFranklin00001AArkansas#0790c2LILincoln00001BWestVirginia#1070c2WOWood000027SpainProvinces#0180c2COC&oacute;rdoba000019Colorado#0870c2MGMorgan000019Montana#0570c2MAMadison00001CSouthDakota#1250c2TUTurner000018Alabama#1030c2MGMorgan00001AIndia#0310c2TNTamil Nadu000019Africa#0040c2BWBotswana000023Alaska#1640c2PLPeninsula and Lake000016Utah#0390c2SASanpete000019Texas#3350c2MITMitchell00001BLouisiana#0790c2RARapides000019Arizona#0030c2COCochise000028YukonTerritory#CA.YT.WH0c2WHWhitehorse000018Nicaragua#010c2BOBoaco000044CentralAmericawithCaribbeans#190c2VCSt.Vincent and the Grenadlines000028Estonia#080c2LVL&auml;&auml;ne-Virumaa00001BRomania#040c2BCBac&#259;u00001DTurkey#590c2TGTekirda&#287;000023USANorthEastRegion#500c2VTVermont00001BAustria#010c2BUBurgenland000022DominicanRepublic#300c2VELa Vega000023WorldwithCountries#620c2LSLesotho000016Sweden#210c2CUppsala00001DAfghanistan#290c2PKAPaktika000024Azerbaijan#570c2TAT&#601;rt&#601;r00001AParaguay#120c2MIMisiones00001BTanzania#TZ.DO0c2DODodoma00001EMongolia#MN.DG0c2DGDornogovi000019Uganda#UG.KG0c2KGKiboga000020Thailand#TH.PE0c2PEPhetchaburi00001ASomalia#SO.SA0c2SASanaag00001CBurma#MM.SH0c2SHShan State000020Philippines#PH.ZM0c2ZMZambales000018Chad#TD.MA0c2MAMandoul000019Sudan#SD.KA0c2KAKassala000034CentralAfricanRepublic#CF.BB0c2BBBamingui-Bangoran00001FPhilippines#PH.IB0c2IBIsabela00001CIllinois#1630c2SCSt. Clair000018Missouri#0830c2HEHenry00001CNorthDakota#0970c2TRTraill000016Texas#1550c2FOAFoard000015Ohio#1170c2MWMorrow00001CNebraska#0870c2HTHitchcock000019Minnesota#0150c2BWBrown00001DConnecticut#0150c2WIWindham000019Michigan#0090c2ANAntrim00001ATennessee#1770c2WRWarren00001FMaryland#0350c2QAQueen Anne's00001FSpainProvinces#0190c2CUCuenca00001EOklahoma#1290c2RMRoger Mills000015Iowa#1810c2WRWarren00001DWisconsin#0710c2MAManitowoc000017India#0320c2TRTripura00001EWashington#0310c2JEJefferson000018Indiana#1330c2PTPutnam00001ANewYork#1050c2SVSullivan00001DNorthCarolina#1730c2SWSwain00001CVirginia#0750c2GOGoochland00001DAfrica#0050c2BFBurkina Faso000017Kansas#1270c2MRMorris000019Nicaragua#020c2CACarazo00002ECentralAmericawithCaribbeans#200c2BBBarbados000016Romania#050c2BHBihor000015Turkey#600c2TTTokat000024USANorthEastRegion#510c2VAVirginia00001DAustria#020c2KAK&auml;rnten000030DominicanRepublic#310c2MNMonse&ntilde;or Nouel000023WorldwithCountries#630c2LILiberia00001CSweden#220c2SV&auml;rmland00001BAfghanistan#300c2BALBalkh000019Azerbaijan#580c2TOTovuz000028Paraguay#130c2NE&Ntilde;eembuc&uacute;00001BUganda#UG.KH0c2KHKiruhura00001BSerbia#RS.BG0c2BGBelgrade000024FranceDepartment#FR.MO0c2MOMoselle00001BVietnam#VN.PT0c2PTPhu Tho00002FHungaryRegions#HU.CT0c2CTCentral Transdanubia000027Europe2#EU.FD0c2FDFaroe Islands (Den)000028BurkinaFaso#BF.KW0c2KWKourw&eacute;ogo00002BPhilippines#PH.ZN0c2ZNZamboanga del Norte00001DLouisiana#0810c2RERed River00001AArizona#0050c2CCCoconino000021Virginia#8000c2SFSuffolk (City)000018Georgia#1450c2HIHarris00001BKentucky#1810c2NINicholas00001BFlorida#1090c2SJSt. Johns00001CMississippi#0910c2MRMarion00001CPuertoRico#1010c2MVMorovis00001DPennsylvania#0570c2FUFulton00001FArkansas#0810c2LRLittle River00001EWestVirginia#1090c2WYWyoming000029SpainProvinces#0200c2GUGuip&uacute;zcoa000018Colorado#0890c2OTOtero000019Montana#0590c2MEMeagher00001BSouthDakota#1270c2UNUnion000017Alabama#1050c2PEPerry00001DIndia#0330c2UPUttar Pradesh000014Iowa#0010c2ADAdair000018Africa#0060c2BIBurundi000015Utah#0410c2SESevier000019Texas#3370c2MONMontague000019Cyprus#010c2FAFamagusta00001DNicaragua#030c2CIChinandega00002ACzechRepublic#780c2JMJihomoravsk&yacute;00002DCentralAmericawithCaribbeans#210c2GDGrenada00002FRomania#060c2BNBistri&#355;a-N&#259;s&#259;ud000017Turkey#610c2TBTrabzon00001EDominica#020c2ANSaint Andrew000026Austria#030c2NINieder&ouml;sterreich000026DominicanRepublic#320c2MPMonte Plata000021WorldwithCountries#640c2LRLibya000021Sweden#230c2ACV&auml;sterbotten00001DAfghanistan#310c2JOWJowzjan000018Azerbaijan#590c2UCUcar00001EAntigua#030c2SGESaint George000022MarshallIsland#MH.MH.AR0c2ARArno000018Russia#RU.PZ0c2PZPenza000019Uganda#UG.KI0c2KIKibale000023FranceDepartment#FR.LZ0c2LZLozere00001DThailand#TH.PG0c2PGPhangnga00002ATrinidadandTobago#TT.SA0c2SASaint Andrew000019Eritrea#ER.DU0c2DUDebub000019Illinois#1650c2SASaline00001AMissouri#0850c2HKHickory00001BNorthDakota#0990c2WAWalsh00001ATexas#1570c2FBEFort Bend000022Virginia#6200c2FRFranklin (City)000018Ohio#1190c2MKMuskingum000017Nebraska#0890c2HOHolt00001BMinnesota#0170c2CACarlton000018Kentucky#0010c2ADAdair000019Michigan#0110c2ARArenac00001ETennessee#1790c2WSWashington00001DMaryland#0370c2SMSt. Mary's00001FSpainProvinces#0210c2GIGirona000019Oklahoma#1310c2RORogers000019Iowa#1830c2WSWashington00001CWisconsin#0730c2MRMarathon00001BIndia#0340c2UTUttaranchal000019Washington#0330c2KGKing00001AIndiana#1350c2RARandolph000017NewYork#1070c2TITioga000024NorthCarolina#1750c2TRTransylvania00001AVirginia#0770c2GRGrayson000019Africa#0070c2CMCameroon000017Kansas#1290c2MTMorton000017Cyprus#020c2KYKyrenia00001CNicaragua#040c2COChontales00002CCzechRepublic#790c2JCJiho&#269;esk&yacute;00003BCentralAmericawithCaribbeans#220c2TTTrinidad &amp; Tobago00001EEstonia#110c2PRP&auml;rnumaa00001ERomania#070c2BTBoto&#351;ani000017Turkey#620c2TCTunceli00001DDominica#030c2DASaint David000024Austria#040c2OBOber&ouml;sterreich00002FDominicanRepublic#330c2CRSan Crist&oacute;bal000026WorldwithCountries#650c2MSMadagascar000011USA#OH0c2OHOhio000022Sweden#240c2YV&auml;sternorrland00001EAfghanistan#320c2SAMSamangan000021Azerbaijan#600c2XZXa&ccedil;maz00001CAntigua#040c2SJOSaint John000022Paraguay#150c2PGParaguar&iacute;000024FrenchGuiana#GF.CY.MC0c2MCMacouria00001BUganda#UG.KJ0c2KJKyenjojo000019Tunisia#TN.GB0c2GBGabes00001FThailand#TH.PH0c2PHPhetchabun000018Togo#TG.SA0c2SASavanes00001DSriLanka#LK.KT0c2KTKalutara000025Somalia#SO.SD0c2SDShabeellaha Dhexe00001ACongo#CG.LI0c2LILikouala00001EBurkinaFaso#BF.LO0c2LOLoroum000034Morocco#MA.LB0c2LBLaayoune Boujdour Sakia El Hamra000020Macedonia#MK.JG0c2JGJegunovtse00001CLouisiana#0830c2RIRichland000016Arizona#0070c2GIGila000016Georgia#1470c2HTHart000017Kentucky#1830c2OHOhio00001BFlorida#1110c2SLSt. Lucie00001EMississippi#0930c2MSMarshall000021PuertoRico#1030c2NGNag&uuml;abo00001DPennsylvania#0590c2GRGreene000018Arkansas#0830c2LOLogan000020SpainProvinces#0220c2GRGranada000018Colorado#0910c2OUOuray000019Montana#0610c2MIMineral00001ESouthDakota#1290c2WAWalworth000019Alabama#1070c2PIPickens00001BIndia#0350c2WBWest Bengal000014Iowa#0030c2AAAdams00001BAfrica#0080c2CVCape Verde000015Utah#0430c2SUSummit00001BTexas#3390c2MOTMontgomery00003EYukonTerritory#CA.YT.WL0c2WLWatson Lake &amp; Southern Lakes000017Cyprus#030c2LALarnaca000020Nicaragua#050c2ESEstel&iacute;000024CzechRepublic#800c2VYVyso&#269;ina000020Estonia#120c2PLP&otilde;lvamaa00001CRomania#080c2BRBr&#259;ila000023Turkey#630c2SU&#350;anl&#305;urfa00001EDominica#040c2GOSaint George000029USANorthEastRegion#540c2WVWest Virginia000019Austria#050c2SASalzburg00002CDominicanRepublic#340c2NCDistrito Nacional000022WorldwithCountries#660c2MWMalawi00001FSweden#250c2UV&auml;stmanland00001FAfghanistan#330c2SARSar-e Pol000021Azerbaijan#610c2XAXank&#601;ndi00001CAntigua#050c2SMASaint Mary000022Paraguay#160c2PHPresidente Hayes00001EPhilippines#PH.IF0c2IFIfugao000022Tanzania#TZ.DS0c2DSDar es Salaam00001BSerbia#RS.SU0c2SUSumadija00001AUganda#UG.KK0c2KKKatakwi00001ABenin#BJ.LI0c2LILittoral00001DBotswana#BW.SO0c2SOSouthern00001DChina2#CN.NM0c2NMNei Mongol000022FranceDepartment#FR.MR0c2MRMarne00001DVietnam#VN.QM0c2QMQuang Nam00001CThailand#TH.PI0c2PIPattani00001DNigeria#NG.NA0c2NANassarawa00001FLiberia#LR.MO0c2MOMontserrado000022Chad#TD.LO0c2LOLogone Occidental00001FChad#TD.ME0c2MEMayo-Kebbi Est000018Mongolia#MN.UV0c2UVUvs00001FBurma#MM.BA0c2BABago Division00001BIllinois#1670c2SNSangamon000017Missouri#0870c2HLHolt00001ANorthDakota#1010c2WRWard000019Texas#1590c2FRAFranklin000014Ohio#1210c2NONoble000019Nebraska#0910c2HKHooker00001AMinnesota#0190c2CRCarver000018Kentucky#0030c2ALAllen000019Michigan#0130c2BABaraga000019Tennessee#1810c2WAWayne00001BMaryland#0390c2SOSomerset000024SpainProvinces#0230c2GAGuadalajara00001BOklahoma#1330c2SESeminole000014Iowa#1850c2WYWayne00001DWisconsin#0750c2MIMarinette00001BWashington#0350c2KTKitsap000018Indiana#1370c2RIRipley00001ANewYork#1090c2TOTompkins00001FNorthCarolina#1770c2TYTyrrell000019Virginia#0790c2GEGreene000029Africa#0090c2CRCentral African Republic000017Kansas#1310c2NMNemaha000023USASouthEastRegion#010c2ALAlabama000017Cyprus#040c2NINicosia00001ANicaragua#060c2GRGranada000029CzechRepublic#810c2KAKarlovarsk&yacute;000019Estonia#130c2RARaplamaa00001CRomania#090c2BVBra&#351;ov000019Turkey#640c2USU&#351;ak00001CDominica#050c2JNSaint John00001BAustria#060c2STSteiermark000022DominicanRepublic#350c2PVPeravia000020WorldwithCountries#670c2MLMali000019Sweden#260c2ABStockholm000029Iceland#030c2AR&Aacute;rness&yacute;sla00001BAfghanistan#340c2KNRKonar00001AAzerbaijan#620c2XRXanlar00001CAntigua#060c2SPASaint Paul00001BParaguay#170c2SPSan Pedro000029CentralAfricanRepublic#CF.BG0c2BGBangui000022FranceDepartment#FR.MS0c2MSMeuse000023FranceDepartment#FR.NI0c2NINievre00001EVietnam#VN.QN0c2QNQuang Ninh000029TrinidadandTobago#TT.SD0c2SDSaint David00001AQatar#QA.KH0c2KHAl Khawr00001BSriLanka#LK.MB0c2MBMannar000021Mauritania#MR.NO0c2NONouakchott00001ALouisiana#0850c2SASabine000018Arizona#0090c2GRGraham000017Georgia#1490c2HEHeard000019Kentucky#1850c2OLOldham00001CFlorida#1130c2SRSanta rosa00001CMississippi#0950c2MOMonroe00001EPuertoRico#1050c2NRNaranjito000021Pennsylvania#0610c2HUHuntingdon000019Arkansas#0850c2LKLonoke00001FSpainProvinces#0240c2HUHuelva00001CTennessee#0010c2ANAnderson000017Colorado#0930c2PAPark00001AMontana#0630c2MSMissoula000016Alabama#1090c2PKPike00001ANevada#0010c2CHChurchill000018Iowa#0050c2ALAllamakee000015Africa#0100c2TDChad000022Alaska#1700c2MAMatanuska-Susitna000015Utah#0450c2TOTooele000016Texas#3410c2MORMoore000018Cyprus#050c2LILimassol00001BNicaragua#070c2JIJinotega00003BCzechRepublic#820c2KRKr&aacute;lov&eacute;hradeck&yacute;000019Estonia#140c2SASaaremaa00001ARomania#100c2BIBucharest000013Turkey#650c2VAVan00001EDominica#060c2JHSaint Joseph000016Austria#070c2TITirol000032DominicanRepublic#360c2JOSan Jos&eacute; de Ocoa000026WorldwithCountries#680c2MRMauritania000015USA#OK0c2OKOklahoma000019USA#PA0c2PAPennsylvania00001ASweden#270c2MSk&aring;ne000035Iceland#040c2ABAustur-Bar&eth;astrandars&yacute;sla00001DAfghanistan#350c2LAGLaghman000022Azerbaijan#630c2XIX&#305;z&#305;00001DAntigua#070c2SPESaint Peter00001BEurope2#SOME ISLANDS0c2000030NorthWestTerritories#CA.NT.AC0c2ACArctic Coast00002BNovaScotia#CA.NS.HD0c2HDHalifax Dartmouth00001AUganda#UG.KM0c2KMKampala000017Samoa #WS.AT0c2ATAtua00001BVietnam#VN.PY0c2PYPhu Yen000028Thailand#TH.PK0c2PKPrachuap Khiri Khan000019Tuvalu#TV.NT0c2NTNiutao00001BEurope2#EU.FI0c2FIFinland000019Europe2#EU.ES0c2ESSpain000029Philippines#PH.ZS0c2ZSZamboanga del Sur000017Kansas#1330c2NONeosho00001BIllinois#1690c2SHSchuyler000019Missouri#0890c2HWHoward00001BNorthDakota#1030c2WEWells00001ATexas#1610c2FRSFreestone000015Ohio#1230c2OTOttawa000019Nebraska#0930c2HWHoward000018Minnesota#0210c2CSCass00001BKentucky#0050c2ANAnderson000018Michigan#0150c2BRBarry00001BTennessee#1830c2WEWeakley000019Maryland#0410c2TATalbot00001FSpainProvinces#0250c2HEHuesca00001BOklahoma#1350c2SQSequoyah000016Iowa#1870c2WEWebster00001DWisconsin#0770c2MQMarquette00001DWashington#0370c2KIKittitas000016Indiana#1390c2RURush000018NewYork#1110c2ULUlster00001DNorthCarolina#1790c2UNUnion00001EVirginia#0810c2GVGreensville000018Africa#0110c2KMComoros00002BNewCaledonia#NC.SU.SA0c2SASarram&eacute;a000022Paraguay#190c2CYCanindey&uacute;000016Cyprus#060c2PAPaphos00001ENicaragua#080c2LELe&oacute;n000027CzechRepublic#830c2LILibereck&yacute;00001BRomania#110c2BZBuz&#259;u000016Turkey#660c2YZYozgat00001CDominica#070c2LUSaint Luke00001BAustria#080c2VOVorarlberg000028DominicanRepublic#370c2SDSanto Domingo000023WorldwithCountries#690c2MAMorocco000013USA#NV0c2NVNevada000028Sweden#280c2OV&auml;stra G&ouml;taland000034Iceland#050c2AHAustur-H&uacute;navatnss&yacute;sla00001CAfghanistan#360c2PIAPaktia00001FAzerbaijan#640c2XCXocal&#305;00001EAntigua#080c2SPHSaint Philip000020Nunavut#CA.NU.KT0c2KTKitikmeot00001ASudan#SD.KH0c2KHKhartoum00001EPhilippines#PH.II0c2IIIloilo000019Russia#RU.SA0c2SASamara00001CUganda#UG.KN0c2KNKalangala000019Tunisia#TN.GF0c2GFGafsa000020Thailand#TH.PL0c2PLPhatthalung000016Tuvalu#TV.NU0c2NUNui000025Somalia#SO.SH0c2SHShabeellaha Hoose00001FSenegal#SN.TC0c2TCTambacounda000019Algeria#DZ.JJ0c2JJJijel000020Chad#TD.LR0c2LRLogone Oriental000017Texas#3430c2MOIMorris00001FLouisiana#0870c2SBSt. Bernard00001AArizona#0110c2GEGreenlee000017Georgia#1510c2HYHenry000017Kentucky#1870c2OWOwen00001AFlorida#1150c2SSSarasota000020Mississippi#0970c2MTMontgomery00001DPuertoRico#1070c2OROrocovis00001EPennsylvania#0630c2INIndiana00001AArkansas#0870c2MAMadison000024SpainProvinces#0260c2JAJa&eacute;n000016Oregon#0010c2BABaker00001BTennessee#0030c2BDBedford00001DWisconsin#0780c2MNMenominee00001BColorado#0950c2PHPhillips00001DMontana#0650c2MUMusselshell00001AAlabama#1110c2RARandolph000016Nevada#0030c2CLClark000018Iowa#0070c2APAppanoose00001EAfrica#0120c2CICote d Ivoire000015Utah#0470c2UIUintah000019Nicaragua#090c2MDMadriz000027CzechRepublic#840c2OLOlomouck&yacute;000023Romania#120c2CSCara&#351;-Severin00001CDominica#080c2MASaint Mark000015Austria#090c2WIWien000026WorldwithCountries#700c2MZMozambique00002FIceland#060c2ASAustur-Skaftafellss&yacute;sla00001BAfghanistan#370c2KHOKhost000021Azerbaijan#650c2XDXocav&#601;nd000022MarshallIsland#MH.MH.TO0c2TOToke000027PolandCounties#PL.MZ.WA0c2MWAWarszawa000024MarshallIsland#MH.MH.BN0c2BNBikini00001EMacedonia#MK.KB0c2KBKarbinci00001DNepal#NP.DH0c2DHDhawalagiri00001ASerbia#RS.TO0c2TOToplica000027Tajikistan#TJ.BK0c2BKBadakhshoni Kuni00001CEastTimor#TL.BT0c2BTLautem000014Iran#IR.QM0c2QMQom00002ATrinidadandTobago#TT.SG0c2SGSaint George00001EQatar#QA.JU0c2JUAl Jumaliyah00001ASriLanka#LK.KY0c2KYKandy000019Liberia#LR.NI0c2NINimba000022Kazakhstan#KZ.MG0c2MGMangghystau00001DHongKong#HK.SK0c2SKSai Kung000015Kansas#1350c2NSNess000018Arizona#0120c2LPLa Paz000018Illinois#1710c2STScott000019Missouri#0910c2HOHowell00001ENorthDakota#1050c2WIWilliams000015Texas#1630c2FRIFrio000017Ohio#1250c2PAPaulding00001CNebraska#0950c2JEJefferson00001CMinnesota#0230c2CHChippewa00001AKentucky#0070c2BABallard000016Michigan#0170c2BYBay000019Tennessee#1850c2WHWhite00001DMaryland#0430c2WAWashington000029SpainProvinces#0270c2LCLa Coru&ntilde;a00001BOklahoma#1370c2STStephens000018Iowa#1890c2WIWinnebago00001DWisconsin#0790c2MEMilwaukee00001EWashington#0390c2KLKlickitat00001CIndiana#1410c2SJSt. Joseph000018NewYork#1130c2WAWarren00001DNorthCarolina#1810c2VAVance00001AVirginia#0830c2HLHalifax000031Africa#0130c2CDDemocratic Republic of the Congo000024USASouthEastRegion#050c2ARArkansas00001ANicaragua#100c2MNManagua00002DCzechRepublic#850c2MOMoravskoslezsk&yacute;000015Romania#130c2CJCluj000016Turkey#680c2ANAnkara00001FDominica#090c2PKSaint Patrick000023WorldwithCountries#710c2NANamibia00002EIceland#070c2BOBorgarfjar&eth;ars&yacute;sla000014China#010c2AHAnhui00001EAfghanistan#380c2NURNurestan000026Azerbaijan#660c2YRYard&#305;ml&#305;00001FNunavut#CA.NU.KV0c2KVKeewatin00002ECentralAfricanRepublic#CF.BK0c2BKBasse-Kotto00001CUganda#UG.KP0c2KPKapchorwa00001DOman#OM.ZA0c2ZAAdh Dhahirah000016Serbia#RS.BO0c2BOBor000018UK7#UK.SC0c2SCScotland000017Texas#3450c2MOEMotley00001FLouisiana#0890c2SCSt. Charles00001AArizona#0130c2MAMaricopa000020NorthCarolina#0010c2ALAlamance000019Georgia#1530c2HOHouston000019Kentucky#1890c2OSOwsley00001AFlorida#1170c2SOSeminole00001DMississippi#0990c2NENeshoba00001DPuertoRico#1090c2PTPatillas000020Pennsylvania#0650c2JEJefferson000013Idaho#0010c2ADAda000019Arkansas#0890c2MRMarion000021SpainProvinces#0280c2LRLa Rioja000017Oregon#0030c2BEBenton00001ATennessee#0050c2BEBenton000019Colorado#0970c2PIPitkin000016Montana#0670c2PAPark00001DSouthDakota#1350c2YAYankton000019Alabama#1130c2RURussell000018Nevada#0050c2DODouglas000016Iowa#0090c2AUAudubon000019Africa#0140c2DJDjibouti000013Utah#0490c2UTUtah000032Paraguay#220c2ASAsunci&oacute;n Capitol District000019Nicaragua#110c2MSMasaya000028CzechRepublic#860c2PAPardubick&yacute;000019Estonia#180c2TATartumaa00001FRomania#140c2CTConstan&#355;a000028Turkey#690c2GUG&uuml;m&uuml;&#351;hane00001CDominica#100c2PLSaint Paul000021WorldwithCountries#720c2NENiger000015USA#NY0c2NYNew York000021Iceland#080c2DADalas&yacute;sla000017China#020c2ZJZhejiang00001DAfghanistan#390c2ORUOruzgan00001AAzerbaijan#670c2YVYevlax000025Laos#LA.VT0c2VTVientiane Prefecture00001FEastTimor#TL.CL0c2CLCova-Lima000018Uganda#UG.KQ0c2KQAmuru000020BurkinaFaso#BF.NB0c2NBNoumbiel000022CentralAmerica2#CE.PA0c2PAPanama000022PapuaNewGuinea#PG.SA0c2SASanduan000017Kansas#1370c2NTNorton000019Illinois#1730c2SEShelby000017Missouri#0930c2IRIron000017Texas#1650c2GAIGaines000014Ohio#1270c2PEPerry00001ANebraska#0970c2JOJohnson00001BMinnesota#0250c2CGChisago000019Kentucky#0090c2BRBarren000019Michigan#0190c2BEBenzie00001ETennessee#1870c2WLWilliamson00001BMaryland#0450c2WIWicomico000023SpainProvinces#0290c2LPLas Palmas000018Oklahoma#1390c2TETexas000019Iowa#1910c2WNWinneshiek00001AWisconsin#0810c2MOMonroe00001AWashington#0410c2LELewis000017Indiana#1430c2SCScott00001CNewYork#1150c2WSWashington00001CNorthCarolina#1830c2WAWake00001AVirginia#0850c2HNHanover000016Africa#0150c2EGEgypt00001FParaguay#230c2AGAlto Paraguay00001CNicaragua#120c2MTMatagalpa00002BCzechRepublic#870c2PLPlze&#328;sk&yacute;000019Estonia#190c2VGValgamaa00001CWales#010c2BGBlaenau Gwent000018Romania#150c2CVCovasna000020Ecuador#010c2WGal&aacute;pagos000017Turkey#700c2HKHakkari00001DDominica#110c2PRSaint Peter000023WorldwithCountries#730c2NGNigeria00002CIceland#090c2EYEyjafjar&eth;ars&yacute;sla000016China#030c2JXJiangxi00001CAfghanistan#400c2PARParvan000021Azerbaijan#680c2YEYevlax (City)00001CLaos#LA.XA0c2XAXaignabouli000019Russia#RU.RO0c2RORostov00001CTunisia#TN.ZA0c2ZAZaghouan000019Uganda#UG.KR0c2KRKisoro00001ARussia#RU.AD0c2ADAdygaya000024FranceDepartment#FR.MY0c2MYMayenne000021FranceDepartment#FR.NO0c2NONord00001DVietnam#VN.QT0c2QTQuang Tri00001BSriLanka#LK.MH0c2MHMatara00001FTurkmenistan#TM.BA0c2BABalkan000016Utah#0510c2WAWasatch00001CTexas#3470c2NACNacogdoches00001ELouisiana#0910c2SHSt. Helena000018Arizona#0150c2MOMohave000028Virginia#8100c2VBVirginia Beach (City)000021NorthCarolina#0030c2AEAlexander000017Georgia#1550c2IRIrwin00001CKentucky#1910c2PEPendleton000018Florida#1190c2STSumter00001CMississippi#1010c2NWNewton000024PuertoRico#1110c2PNPe&ntilde;uelas00001EPennsylvania#0670c2JUJuniata000015Idaho#0030c2AAAdams000019Arkansas#0910c2MIMiller000024SpainProvinces#0300c2LELe&oacute;n00001AOregon#0050c2CLClackamas00001BTennessee#0070c2BLBledsoe00001AColorado#0990c2PRProwers00001BMontana#0690c2PEPetroleum00001DSouthDakota#1370c2ZIZiebach00001BAlabama#1150c2SCSt. Clair000015Nevada#0070c2ELElko000015Iowa#0110c2BEBenton000022Africa#0160c2GQEquatorial Guinea00001CNorthIreland#010c2ANAntrim000021Paraguay#240c2BQBoquer&oacute;n000020Nicaragua#130c2NSNueva Segovia000033CzechRepublic#880c2STSt&#345;edo&#269;esk&yacute;00001CEstonia#200c2VDViljandimaa000017Wales#020c2BBBridgend000025Romania#160c2DBD&acirc;mbovi&#355;a000015Ecuador#020c2AAzuay000015Turkey#710c2KOKonya000022WorldwithCountries#740c2RWRwanda000027Iceland#100c2GUGullbringus&yacute;sla000016China#040c2JSJiangsu00001EAfghanistan#410c2DAYDaykundi000021Azerbaijan#690c2ZGZ&#601;ngilan000028NovaScotia#CA.NS.GT0c2GTGlooscap Trail000025PolandCounties#PL.SK.KM0c2SKMKielce000023MarshallIsland#MH.MH.BR0c2BRBikar000022SierraLeone#SL.NO.BM0c2BMBombali000024Philippines#PH.IN0c2INIlocos Norte000019Uganda#UG.KS0c2KSKasese000017Uganda#UG.LI0c2LILira000025EquatorialGuinea#GQ.KN0c2KNKie Ntem000022Tibet#TI.LP0c2LPLhasa Prefecture00001CSerbia#RS.BR0c2BRBranicevo00001DTurkmenistan#TM.AL0c2ALAhal000019Nigeria#NG.NI0c2NINiger000019Senegal#SN.TH0c2THThies000020Gambia#GM.MC0c2MCCentral River000029Philippines#PH.ZY0c2ZYZamboanga Sibugay00001DHongKong#HK.SO0c2SOSouthern000016Kansas#1390c2OSOsage000018Illinois#1750c2SRStark00001AMissouri#0950c2JKJackson00001ATexas#1670c2GALGalveston000028Virginia#6300c2FEFredericksburg (City)000017Ohio#1290c2PIPickaway00001ANebraska#0990c2KEKearney000018Minnesota#0270c2CLClay000017Kentucky#0110c2BTBath00001AMichigan#0210c2BIBerrien00001ATennessee#1890c2WIWilson00001DMaryland#0470c2WOWorchester00001FSpainProvinces#0310c2LILleida00001AOklahoma#1410c2TITillman000017Iowa#1930c2WOWoodbury00001AWisconsin#0830c2OCOconto00001CWashington#0430c2LILincoln000018Indiana#1450c2SHShelby000017NewYork#1170c2WYWayne00001ENorthCarolina#1850c2WRWarren00001AVirginia#0870c2HCHenrico000018Africa#0170c2EREritrea00001CAzerbaijan#700c2ZQZaqatala00001ANorthIreland#020c2ADArds000026Nicaragua#140c2SJR&iacute;o San Juan00002CCzechRepublic#890c2US&Uacute;steck&yacute;00001FEstonia#210c2VRV&otilde;rumaa000019Wales#030c2CPCaerphilly000015Romania#170c2DJDolj00001EEcuador#030c2BBol&iacute;var000016Turkey#720c2MRMardin000031WorldwithCountries#750c2STSao Tome and Principe000013USA#OR0c2OROregon000014China#050c2JLJilin00001EAfghanistan#420c2PANPanjshir000026Alberta#CA.AB.AC0c2ACAlberta Central000026PolandCounties#PL.LD.SI0c2LSISieradz000022MarshallIsland#MH.MH.UJ0c2UJUjae000024SierraLeone#SL.NO.TO0c2TOTonkolili000022Macedonia#MK.KG0c2KGKrivogastani00001BVanuatu#VU.ML0c2MLMalampa00001AThailand#TH.PR0c2PRPhrae000021Cameroon#CM.EN0c2ENExtreme-Nord00001FSriLanka#Lk.MJ0c2MJMoneragala00001EEritrea#ER.GB0c2GBGash-Barka00001FBurkinaFaso#BF.MO0c2MOMouhoun000019Bhutan#BT.MO0c2MOMongar00001BRwanda#RW.NO0c2NONorthern000019Utah#0530c2WSWashington000018Texas#3490c2NAVNavarro00001DLouisiana#0930c2SJSt. James000018Arizona#0170c2NANavajo000021NorthCarolina#0050c2AGAlleghany000019Georgia#1570c2JAJackson000018Kentucky#1930c2PRPerry00001AFlorida#1210c2SNSuwannee00001DMississippi#1030c2NONoxubee00001APuertoRico#1130c2POPonce000021Pennsylvania#0690c2LALackawanna000017Idaho#0050c2BABannock00001EArkansas#0930c2MSMississippi00001DSpainProvinces#0320c2LULugo000018Oregon#0070c2CAClatsop00001ATennessee#0090c2BUBlount000019Colorado#1010c2PUPueblo00001AMontana#0710c2PHPhillips000018Alabama#1170c2SHShelby00001ANevada#0090c2ESEsmeralda000019Iowa#0130c2BHBlack Hawk000019Africa#0180c2ETEthiopia00001FAzerbaijan#710c2ZRZ&#601;rdab00001CNorthIreland#030c2AMArmagh000018Nicaragua#150c2RIRivas00002CCzechRepublic#900c2ZLZl&iacute;nsk&yacute;000016Wales#040c2CACardiff00001CRomania#180c2GLGala&#355;i00001CEcuador#040c2FCa&ntilde;ar00001ATurkey#730c2NGNi&#287;de000023WorldwithCountries#760c2SNSenegal000016China#060c2QHQinghai00002DPolandCounties#PL.LU.BM0c2LBMBiala-Podlaska00001CMacedonia#MK.KH0c2KHKicevo00001DMongolia#MN.DU0c2DUDundgovi000017Uganda#UG.KU0c2KUKumi000019Uganda#UG.MA0c2MAMasaka000020Thailand#TH.PS0c2PSPhitsanulok000018Somalia#SO.SO0c2SOSool00001FSenegal#SN.ST0c2STSaint-Louis00001CLiberia#LR.MY0c2MYMaryland00001BZambia#ZM.SO0c2SOSouthern00001CChad#TD.MO0c2MOMoyen Chari000016Africa#0190c2GAGabon000018Kansas#1410c2OBOsborne00001DIllinois#1770c2SPStephenson000019Missouri#0970c2JAJasper00001CCalifornia#0010c2ALAlameda000016Texas#1690c2GARGarza000013Ohio#1310c2PKPike000018Nebraska#1010c2KIKeith00001EMinnesota#0290c2CWClearwater000017Kentucky#0130c2BEBell000019Michigan#0230c2BNBranch00001FSpainProvinces#0330c2MAMadrid000018Oklahoma#1430c2TUTulsa000014Iowa#1950c2WHWorth00001AWisconsin#0850c2ONOneida00001BNewWorld#1000c2KHCambodia00001AWashington#0450c2MAMason000019Indiana#1470c2SPSpencer00001DNewYork#1190c2WEWestchester000022NorthCarolina#1870c2WSWashington000018Virginia#0890c2HYHenry00002CNewCaledonia#NC.NO.HI0c2HIHiengh&egrave;ne00001EAzerbaijan#720c2BBBab&#601;k00001FNorthIreland#040c2BLBallymena00001EWales#050c2CICarmarthenshire000015Romania#190c2GJGorj000016Ecuador#050c2CCarchi000015Turkey#740c2SISiirt000025WorldwithCountries#770c2SCSeycelles000015China#070c2FJFujian000025MarshallIsland#MH.MH.UL0c2ULUjelang000017Laos#LA.XE0c2XEXekong000017Libya#LY.SB0c2SBSabha00001EChina2#CN.NX0c2NXNingxia Hui000021FranceDepartment#FR.OI0c2OIOise000021Thailand#TH.PT0c2PTPathum Thani00001CBotswana#BW.CE0c2CECentral00001AEurope2#EU.FR0c2FRFrance00001DAlgeria#DZ.KH0c2KHKhenchela00001CSaudiArabia#SA.HA0c2HAHail000016Africa#0200c2GHGhana000015Alaska#1800c2NONome000014Utah#0550c2WYWayne000017Texas#3510c2NEWNewton000028Louisiana#0950c2STSt. John the Baptist000016Arizona#0190c2PIPima00001DNorthCarolina#0070c2ANAnson000018Georgia#1590c2JSJasper000017Kentucky#1950c2PIPike000018Florida#1230c2TATaylor00001FMississippi#1050c2OKOktibbeha000021PuertoRico#1150c2QBQuebradillas000020Pennsylvania#0710c2LNLancaster000019Idaho#0070c2BEBear Lake000019Arkansas#0950c2MNMonroe000026SpainProvinces#0340c2MLM&aacute;laga000019Oregon#0090c2COColumbia00001BTennessee#0110c2BRBradley00001DColorado#1030c2RBRio Blanco000019Montana#0730c2POPondera000018Alabama#1190c2SUSumter000018NewWorld#1010c2CNChina000017Nevada#0110c2EUEureka000014Iowa#0150c2BOBoone000019Azerbaijan#730c2CFCulfa000020NorthIreland#050c2BYBallymoney000023USASouthEastRegion#120c2FLFlorida00004BNicaragua#170c2ANRegi&oacute;n Aut&oacute;noma del Atl&aacute;ntico Norte000019Wales#060c2CGCeredigion000019Romania#200c2HRHarghita00001AEcuador#060c2HChimborazo000017Turkey#750c2AKAksaray000028WorldwithCountries#780c2SLSierra Leone00001BChina#080c2HLHeilongjiang000026PolandCounties#PL.PD.SM0c2PSMSuwalki000021HongKong#HK.SS0c2SSSham Shui Po00001CSamoa #WS.TU0c2TUTuamasaga00001AUganda#UG.MC0c2MCMasindi00001BThailand#TH.PU0c2PUPhuket000020Ethiopia#ET.AA0c2AAAddis Ababa000022Europe2#EU.GI0c2GIGibraltar (UK)000026Burma#MM.TN0c2TNTanintharyi Division00001BVirginia#0910c2HIHighland000017Africa#0210c2GNGuinea000017Kansas#1430c2OTOttawa00001BIllinois#1790c2TATazewell00001CMissouri#0990c2JEJefferson00001BCalifornia#0030c2APAlpine00001ATexas#1710c2GIEGillespie000016Ohio#1330c2POPortage00001CNebraska#1030c2KPKeya Paha000018Minnesota#0310c2COCook000018Kentucky#0150c2BNBoone00001AMichigan#0250c2CACalhoun000020SpainProvinces#0350c2MEMelilla00001AOklahoma#1450c2WAWagoner000015Iowa#1970c2WGWright00001DWisconsin#0870c2OUOutagamie00001DNewWorld#1020c2TPEast Timor00001DWashington#0470c2OKOkanogan000018Indiana#1490c2STStarke000019NewYork#1210c2WOWyoming00001FNorthCarolina#1890c2WTWatauga00002FSaskatchewan#CA.SK.WC0c2WCWest Central Region000026Manitoba#CA.MB.CR0c2CRCentral Region000026Azerbaijan#740c2KNK&#601;ng&#601;rli00001FNorthIreland#060c2BBBanbridge000023USASouthEastRegion#130c2GAGeorgia000049Nicaragua#180c2ASRegi&oacute;n Aut&oacute;noma del Atl&aacute;ntico Sur000014Wales#070c2CWConwy00001ARomania#210c2HDHunedoara000018Ecuador#070c2XCotopaxi000016Turkey#760c2BMBatman000023WorldwithCountries#790c2SOSomalia00002AIceland#150c2KJKj&oacute;sars&yacute;sla000014China#090c2HEHenan00002CPolandCounties#PL.SL.BM0c2SBMBielsko-Biala00002BPolandCounties#PL.LD.SM0c2LSMSkierniewice00002DPapuaNewGuinea#PG.SH0c2SHSouthern Highlands00001CHongKong#HK.ST0c2STSha Tin000022Philippines#PH.IS0c2ISIlocos Sur000018Malawi#MW.ZO0c2ZOZomba000018Russia#RU.SK0c2SKSakha00001DMicronesia#FM.KO0c2KOKosrae000019Uganda#UG.KX0c2KXKamuli00001AUganda#UG.MD0c2MDMubende000024EquatorialGuinea#GQ.LI0c2LILitoral000022Tibet#TI.NA0c2NANgari Prefecture000027Iran#IR.SB0c2SBSistan and Baluchestan000031FranceDepartment#FR.PA0c2PAPyrenees Atlantiques00002BTrinidadandTobago#TT.SP0c2SPSaint Patrick00001EGambia#GM.LR0c2LRLower River00001FLesotho#LS.QN0c2QNQacha's Nek000015Iowa#0170c2BRBremer00001EAfrica#0220c2GWGuinea-Bissau000014Utah#0570c2WEWeber000016Texas#3530c2NOLNolan00001ELouisiana#0970c2SLSt. Landry000017Arizona#0210c2PNPinal00001CNorthCarolina#0090c2ASAshe00001CGeorgia#1610c2JDJeff Davis000019Kentucky#1970c2POPowell000017Florida#1250c2UNUnion00001CMississippi#1070c2PAPanola000022PuertoRico#1170c2RCRinc&oacute;n00001FPennsylvania#0730c2LWLawrence000017Idaho#0090c2BNBenewah00001DArkansas#0970c2MTMontgomery00001FSpainProvinces#0360c2MUMurcia000015Oregon#0110c2CSCoos000018Israel#0010c2CECentral00001CTennessee#0130c2CACampbell00001DColorado#1050c2RGRio Grande00001EMontana#0750c2PRPowder River00001BAlabama#1210c2TATalladega00001ANewWorld#1030c2GEGeorgia000019Nevada#0130c2HUHumboldt00002FSaskatchewan#CA.SK.EC0c2ECEast Central Region00001BAzerbaijan#750c2OROrdubad00001DNorthIreland#070c2BFBelfast00001BWales#080c2DBDenbighshire00001ERomania#220c2ILIalomi&#355;a000016Ecuador#080c2OEl Oro000017Turkey#770c2BBBayburt000028WorldwithCountries#800c2ZASouth Africa000014China#100c2HBHebei000025Burma#MM.AY0c2AYAyeyarwady Division00001BRussia#RU.SL0c2SLSakhalin000019Russia#RU.TB0c2TBTambov00001AGuinea#GN.SI0c2SISiguiri00001AUganda#UG.KY0c2KYKayunga000018Uganda#UG.ME0c2MEMbale000018Cameroon#CM.ES0c2ESEst000028CentralAfricanRepublic#CF.UK0c2UKOuaka00001DNorthCarolina#1910c2WYWayne000020Virginia#0930c2IWIsle of Wight000016Africa#0230c2KEKenya000017Kansas#1450c2PNPawnee000018Illinois#1810c2UNUnion00001AMissouri#1010c2JOJohnson00001BCalifornia#0050c2AMAmador00001ATexas#1730c2GLAGlasscock000015Ohio#1350c2PRPreble00001ANebraska#1050c2KMKimball00001EMinnesota#0330c2CTCottonwood00001AKentucky#0170c2BOBourbon000017Michigan#0270c2CSCass000020SpainProvinces#0370c2NANavarra000016Israel#0020c2HAHaifa00001DOklahoma#1470c2WSWashington00001BWisconsin#0890c2OZOzaukee000018NewWorld#1040c2INIndia00001CWashington#0490c2PAPacific000019Indiana#1510c2SUSteuben000017NewYork#1230c2YAYates00002AAzerbaijan#760c2SDS&#601;d&#601;r&#601;k000023NorthIreland#080c2CFCarrickfergus000019Wales#090c2FLFlintshire00001ARomania#230c2ISIa&#351;i00001AEcuador#090c2EEsmeraldas000017Turkey#780c2KRKaraman000021WorldwithCountries#810c2SDSudan000028Iceland#170c2MYM&yacute;ras&yacute;sla000014China#110c2HNHunan00001CLaos#LA.XI0c2XIXiangkhoang00001FPhilippines#PH.KA0c2KAKalinga00001BRussia#RU.SM0c2SMSmolensk00001CMongolia#MN.DZ0c2DZZavkhan00001AUganda#UG.MF0c2MFManafwa000018Russia#RU.AL0c2ALAltai00002AFranceDepartment#FR.PC0c2PCPas de Calais00001CVietnam#VN.AG0c2AGAn Giang00001FSriLanka#LK.MP0c2MPMullailivu00001BMauritius#MU.FL0c2FLFlacq000022Chad#TD.NJ0c2NJVille De Ndjamena000017Nevada#0150c2LALander000017Iowa#0190c2BUBuchanan000018Africa#0240c2LSLesotho000017Texas#3550c2NUENueces00001ELouisiana#0990c2SMSt. Martin00001CArizona#0230c2SCSanta Cruz00001DNorthCarolina#0110c2AVAvery00001BGeorgia#1630c2JEJefferson00001AKentucky#1990c2PUPulaski000019Florida#1270c2VOVolusia000018Illinois#0010c2ADAdams000021Mississippi#1090c2PRPearl River000026PuertoRico#1190c2RGR&iacute;o Grande00001EPennsylvania#0750c2LELebanon000017Idaho#0110c2BIBingham000019Arkansas#0990c2NENevada000020SpainProvinces#0380c2OUOurense000016Oregon#0130c2CRCrook00001AIsrael#0030c2JEJerusalem00001ATennessee#0150c2CNCannon000018Colorado#1070c2RORoutt000018Montana#0770c2PWPowell00001CAlabama#1230c2TLTallapoosa00001CNewWorld#1050c2IDIndonesia00001FAzerbaijan#770c2SH&#350;ahbuz000021NorthIreland#090c2CSCastlereagh000016Wales#100c2GDGwynedd000016Ecuador#100c2GGuayas000023Turkey#790c2KKK&#305;r&#305;kkale000025WorldwithCountries#820c2SZSwaziland000014China#120c2HUHubei000032FrenchGuiana#GF.CY.MT0c2MTMontsinery Tonnegrande00001APanama#PA.HE0c2HEHerrera00001DHongKong#HK.TM0c2TMTuen Mun00001BMacedonia#MK.KN0c2KNKonce00001CCoteDivoire#CI.LC0c2LCLacs00001AEastTimor#TL.DL0c2DLDili000019Uganda#UG.MG0c2MGMayuge000016Benin#BJ.MO0c2MOMono00002FHungaryRegions#HU.WT0c2WTWestern Transdanubia000017Russia#RU.AM0c2AMAmur000028FranceDepartment#FR.PD0c2PDPuy de Dome00001BThailand#TH.PY0c2PYPhayao00001BThailand#TH.RE0c2RERoi Et000020Namibia#NA.OD0c2ODOtjozondjupa000018Nigeria#NG.OG0c2OGOgun000022BurkinaFaso#BF.OB0c2OBOubritenga00001ENorthCarolina#1930c2WIWilkes00001DVirginia#0950c2JCJames City000018Africa#0250c2LILiberia00001CAlaska#1850c2NSNorth Slope000019Kansas#1470c2PLPhillips00001CIllinois#1830c2VEVermilion000017Missouri#1030c2KNKnox00001ACalifornia#0070c2BUButte000017Texas#1750c2GOLGoliad000015Ohio#1370c2PUPutnam000017Nebraska#1070c2KNKnox00001DMinnesota#0350c2CICrow Wing000017Kentucky#0190c2BYBoyd00001DMichigan#0290c2CHCharlevoix000021SpainProvinces#0390c2PAPalencia000019Israel#0040c2NRNorthern00001AOklahoma#1490c2WHWashita000019Wisconsin#0910c2PEPepin000017NewWorld#1060c2IAIran000021Washington#0510c2PEPend Oreille00001AIndiana#1530c2SLSullivan000029NewCaledonia#NC.NO.HO0c2HOHoua&iuml;lou000023Azerbaijan#780c2SR&#350;&#601;rur00001FNorthIreland#100c2CLColeraine00001FWales#110c2AYIsle of Anglesey00001FRomania#250c2MMMaramure&#351;000018Ecuador#110c2IImbabura00001FNorthKorea#010c2CHAChagang-do000020Turkey#800c2SR&#350;&#305;rnak000024WorldwithCountries#830c2TZTanzania00003DIceland#190c2NINor&eth;ur-&Iacute;safjar&eth;ars&yacute;sla000017China#130c2XJXinjiang00001ASomalia#SO.BK0c2BKBakool00001CBurma#MM.CH0c2CHChin State00001ESamoa #WS.VF0c2VFVaao Fonoti000018Niger#NE.MA0c2MAMaradi000018Yemen#YE.DH0c2DHDhamar00001BMongolia#MN.ER0c2EROrkhon00001AUganda#UG.MH0c2MHMaracha00001BLibya#LY.SH0c2SHAsh Shati000017Iran#IR.QZ0c2QZQazvin00001ALebanon#LE.BA0c2BABeirut000019Ethiopia#ET.AF0c2AFAfar000022BurkinaFaso#BF.NM0c2NMNamentenga00001DGambia#GM.NB0c2NBNorth Bank000018Nevada#0170c2LILincoln00001AIowa#0210c2BVBuena Vista000016Africa#0260c2LRLibya00001ATexas#3570c2OCHOchiltree00001CLouisiana#1010c2SRSt. Mary000019Arizona#0250c2YAYavapai000024Virginia#8200c2WBWaynesboro (City)000020NorthCarolina#0130c2BEBeaufort000019Georgia#1650c2JKJenkins00001CKentucky#2010c2RORobertson000019Florida#1290c2WKWakulla00001CIllinois#0030c2ALAlexander00001BMississippi#1110c2PEPerry000022PuertoRico#1210c2SBSabana Grande00001DPennsylvania#0770c2LHLehigh000016Idaho#0130c2BLBlaine000019Arkansas#1010c2NWNewton000023SpainProvinces#0400c2POPontevedra000016Oregon#0150c2CUCurry000019Israel#0050c2SOSouthern00001BTennessee#0170c2CRCarroll00001BColorado#1090c2SASaguache000019Montana#0790c2PIPrairie00001CAlabama#1250c2TUTuscaloosa000018NewWorld#1070c2JPJapan00001FNorthIreland#110c2CKCookstown00001CWales#120c2MMMonmouthshire00001FRomania#260c2MHMehedin&#355;i000014Ecuador#120c2LLoja000015Turkey#810c2AAAdana000020WorldwithCountries#840c2TGTogo000033Iceland#200c2NMNor&eth;ur-M&uacute;las&yacute;sla00001FFiji#FJ.TH.NO0c2NOTholo North000027Kazakhstan#KZ.NK0c2NKNorth Kazakhstan00001ADjibouti#DJ.OB0c2OBObock000024Guyana#GY.PM0c2PMPomeroon-Supenaam000019Russia#RU.RZ0c2RZRyazan000026Russia#RU.SP0c2SPSt. Petersburg City000018Uganda#UG.MI0c2MIMpigi00001AQatar#QA.ME0c2MEMesaieed00001FBurkinaFaso#BF.OD0c2ODOudalan00002EMorocco#MA.MK0c2MKMarrakech Tensift Al Haouz000021Chad#TD.MW0c2MWMayo-Kebbi Ouest00001DIndiana#1550c2SWSwitzerland00001ENorthCarolina#1950c2WLWilson000021Virginia#0970c2KQKing and Queen00001BAfrica#0270c2MGMadagascar00001DKansas#1490c2PTPottawatomie000019Illinois#1850c2WAWabash00001AMissouri#1050c2LDLaclede00001ECalifornia#0090c2CACalaveras000019Texas#1770c2GONGonzales00001FVirginia#6400c2GAGalax (City)000017Ohio#1390c2RIRichland00001CNebraska#1090c2LALancaster00001AMinnesota#0370c2DADakota000018Kentucky#0210c2BLBoyle00001CMichigan#0310c2CECheboygan000022SpainProvinces#0410c2SASalamanca000019Israel#0060c2TATel Aviv000018Oklahoma#1510c2WOWoods00001AWisconsin#0930c2PIPierce00001DNewWorld#1080c2KZKazakhstan00001BWashington#0530c2PIPierce000014China#150c2GSGansu00001FNorthIreland#120c2CRCraigavon00001DWales#130c2MTMerthyr Tydfil00001BRomania#270c2MSMure&#351;00001FEcuador#130c2RLos R&iacute;os000028NorthKorea#030c2HANHamgy&#335;ng-namdo000028Turkey#820c2CI&Ccedil;ank&#305;r&#305;000023WorldwithCountries#850c2TNTunisia000037Iceland#210c2NONor&eth;ur-&THORN;ingeyjars&yacute;sla000022SierraLeone#SL.SO.PU0c2PUPujehun000024MarshallIsland#MH.MH.UT0c2UTUtirik000018Chad#TD.OD0c2ODOuaddai000019Somalia#SO.AW0c2AWAwdal00001BHongKong#HK.TP0c2TPTai Po00001ABurundi#BI.GI0c2GIGitega000022Tibet#TI.NG0c2NGNagqu Prefecture00001AVietnam#VN.SL0c2SLSon La00001DVietnam#VN.TB0c2TBThai Binh00001BPalau#PW.HA0c2HAHatohobei00001BSriLanka#LK.MT0c2MTMatale000017Congo#CG.NI0c2NINiari000024TrinidadandTobago#TT.CA0c2CACaroni00001BLesotho#LS.QT0c2QTQuthing000015Nevada#0190c2LYLyon000015Iowa#0230c2BTButler000017Africa#0280c2MWMalawi000021Alaska#1880c2NANorthwest Arctic000017Texas#3590c2OLDOldham00001FLouisiana#1030c2SYSt. Tammany000016Arizona#0270c2YUYuma00001ENorthCarolina#0150c2BRBertie000019Georgia#1670c2JOJohnson00001DKentucky#2030c2RCRockcastle000018Florida#1310c2WTWalton000017Illinois#0050c2BOBond00001AMississippi#1130c2PIPike00001CPuertoRico#1230c2SASalinas00001EPennsylvania#0790c2LZLuzerne000015Idaho#0150c2BOBoise00001BArkansas#1030c2OUOuachita00002FSpainProvinces#0420c2SCSanta Cruz de Tenerife00001AOregon#0170c2DEDeschutes00001ATennessee#0190c2CTCarter00001BColorado#1110c2SJSan Juan000019Montana#0810c2RARavalli000018Alabama#1270c2WAWalker000020NewWorld#1090c2KPKorea (north)000020NewCaledonia#NC.SU.TH0c2THThio000016China#160c2GXGuangxi00001BNorthIreland#130c2LDDerry00001CLuxembourg#020c2CACapellen000020Wales#140c2NPNeath Port Talbot00001BRomania#280c2NTNeam&#355;00001DEcuador#140c2MManab&iacute;000019Turkey#830c2GAGaziantep000022WorldwithCountries#860c2UGUganda000024PolandCounties#PL.LU.CM0c2LCMChelm000024Alberta#CA.AB.AN0c2ANAlberta North00001CSomalia#SO.BN0c2BNBanaadir00001EEastTimor#TL.VQ0c2VQViqueque00001ARussia#RU.SR0c2SRSaratov00001FMongolia#MN.GA0c2GAGovi Altai00001FCoteDivoire#CI.LG0c2LGLagunes000030Guinea#GN.TE0c2TET&eacute;lim&eacute;l&eacute;00001EUganda#UG.NA0c2NANakasongola000021FranceDepartment#FR.OR0c2OROrne00001ALibya#LY.AJ0c2AJAjdabiya000019Monaco#EU.MN0c2MNMonaco000025DenmarkRegion#DK.MJ0c2MJMidtjylland00001BNamibia#NA.OH0c2OHOmaheke00001CSomalia#SO.TO0c2TOTogdheer00001CAlgeria#DZ.LG0c2LGLaghouat00001CIndiana#1570c2TITippecanoe00001ENorthCarolina#1970c2YAYadkin00001EVirginia#0990c2KGKing George000015Africa#0290c2MLMali000016Kansas#1510c2PRPratt000019Illinois#1870c2WRWarren00001CMissouri#1070c2LFLafayette00001BCalifornia#0110c2COColusa000015Texas#1790c2GRAGray000013Ohio#1410c2RORoss00001ANebraska#1110c2LILincoln000019Minnesota#0390c2DDDodge00001AKentucky#0230c2BKBracken00001BMichigan#0330c2CIChippewa000020SpainProvinces#0430c2SESegovia00001BOklahoma#1530c2WDWoodward000018Wisconsin#0950c2POPolk000020NewWorld#1100c2KRKorea (south)00001DWashington#0550c2SJSan Juan00002DPrinceEdwardIsland#CA.PE.AL0c2ALAnne's Land000016Belarus#010c2BRBrest00001ANorthIreland#140c2DWDown000024Luxembourg#030c2ESEsch-sur-Alzette000016Wales#150c2NONewport000014Romania#290c2OTOlt00001BColombia#010c2AMAAmazonas00001FEcuador#150c2SMorona-Santiago000014Turkey#840c2KAKars00002AWorldwithCountries#870c2WAWestern Sahara00002FIceland#230c2RARang&aacute;rvallas&yacute;sla000023FrenchGuiana#GF.CY.MY0c2MYMatoury000033NorthWestTerritories#CA.NT.BL0c2BLBigLake Country00001DMacedonia#MK.KS0c2KSKrusevo00001DMacedonia#MK.LI0c2LILipkovo00001AZambia#ZM.CE0c2CECentral000019Yemen#YE.DL0c2DLAl Dali00001BLibya#LY.TB0c2TBTarabulus00002DSolomonIsland#SB.RB0c2RBRennell and Bellona00001ERussia#RU.AR0c2ARArkhangelsk000018Guinea#GN.BE0c2BEBeyla00001APakistan#PK.SD0c2SDSindh00001CSwaziland#SZ.HH0c2HHHhohho00001ALibya#LY.BA0c2BABenghazi000018Nauru#NR.AB0c2ABAnabar00001AEurope2#EU.GR0c2GRGreece00001DNewWorld#1110c2KGKyrgyzstan000018Nevada#0210c2MIMineral000016Iowa#0250c2CACalhoun00001BAfrica#0300c2MRMauritania000017Texas#3610c2ORAOrange00001ELouisiana#1050c2TATangipahoa00001ENorthCarolina#0170c2BLBladen000017Georgia#1690c2JNJones000018Kentucky#2050c2RWRowan00001CFlorida#1330c2WGWashington000018Illinois#0070c2BNBoone00001EMississippi#1150c2POPontotoc000026PuertoRico#1250c2SGSan Germ&aacute;n00001FPennsylvania#0810c2LYLycoming000016Idaho#0170c2BRBonner000018Arkansas#1050c2PEPerry000020SpainProvinces#0440c2SVSevilla000018Oregon#0190c2DODouglas00001CTennessee#0210c2CHCheatham00001DColorado#1130c2SMSan Miguel00001AMontana#0830c2RIRichland00001CAlabama#1290c2WSWashington000016China#180c2GZGuizhou000017Belarus#020c2HOHomyel000030NorthIreland#150c2DNDungannon and South Tyrone000025USASouthEastRegion#220c2LALouisiana00001ELuxembourg#040c2LULuxembourg00001CWales#160c2PEPembrokeshire000018Romania#300c2PHPrahova00001AJamacia#010c2CLClarendon00001CColombia#020c2ANTAntioquia000023NorthKorea#060c2HWNHwanghae-namdo000019Turkey#850c2ZOZonguldak000022WorldwithCountries#880c2ZMZambia00001ELiechtenstein#010c2BABalzers000022MarshallIsland#MH.MH.EB0c2EBEbon00001CRussia#RU.ST0c2STStavropol000019Uganda#UG.LW0c2LWLuwero00001CRussia#RU.AS0c2ASAstrakhan000018Guinea#GN.BF0c2BFBoffa00001AThailand#TH.SA0c2SASatun000024TrinidadandTobago#TT.TO0c2TOTobago00001DVietnam#VN.BD0c2BDBinh Dinh000018Angola#AO.ZA0c2ZAZaire00002CBrazilRegion#BR.CW0c2CWCentral West Region00001FBurkinaFaso#BF.NR0c2NRNahouri000017NewWorld#1120c2LALaos00001BWashington#0570c2SASkagit000018Indiana#1590c2TPTipton00001ENorthCarolina#1990c2YNYancey00001FVirginia#1010c2KWKing William00001DRhodeIsland#0010c2BRBristol000018Kansas#1530c2RARawlins00001DIllinois#1890c2WSWashington00001BMissouri#1090c2LALawrence000021California#0130c2CNContra costa000018Texas#1810c2GRYGrayson000017Ohio#1430c2SASandusky000018Nebraska#1130c2LOLogan00001BMinnesota#0410c2DUDouglas00001CKentucky#0250c2BHBreathitt000018Michigan#0350c2CLClare00001ESpainProvinces#0450c2SOSoria00001BWisconsin#0970c2PRPortage000027Manitoba#CA.MB.WI0c2WIWinnipeq Region000017China#190c2LNLiaoning000017Belarus#030c2HRHrodna00001FNorthIreland#160c2FEFermanagh00001ALuxembourg#050c2MEMersch000014Wales#170c2POPowys00001BRomania#310c2SJS&#259;laj000018Jamacia#020c2HAHanover000019Colombia#030c2ARAArauca000017Ecuador#170c2YPastaza000023NorthKorea#070c2HWBHwanghae-bukto000017Turkey#860c2ARArdahan000018SouthKorea#010c2CJJeju000024WorldwithCountries#890c2ZWZimbabwe00001DLiechtenstein#020c2ESEschen00002BNewBrunswick#CA.NB.MR0c2MRMiramichi River00002APolandCounties#PL.SL.CM0c2SCMCzestochowa000025PolandCounties#PL.PM.GM0c2PGMGdansk000028PolandCounties#PL.PD.BM0c2PBMBialystok000027CentralAmerica2#CE.PR0c2PRPuerto Rico00001CSenegal#SN.DB0c2DBDiourbel000019Uganda#UG.MN0c2MNMukono00001EThailand#TH.SB0c2SBSing Buri000031DemocraticRepublicoftheCongo#CD.SK0c2SKSud-Kivu00001CNamibia#NA.OK0c2OKOkavango000018Nigeria#NG.ON0c2ONOndo000018Alabama#1310c2WIWilcox00001BNewWorld#1130c2MYMalaysia000014Nevada#0230c2NYNye000016Iowa#0270c2CRCarroll000018Africa#0320c2MAMorocco00001BTexas#3630c2PALPalo Pinto00001ALouisiana#1070c2TETensas000021NorthCarolina#0190c2BSBrunswick000017Georgia#1710c2LALamar00001AKentucky#2070c2RSRussell000018Illinois#0090c2BRBrown00001EMississippi#1170c2PSPrentiss000027PuertoRico#1270c2SJSan Juan (capital)00001DPennsylvania#0830c2MKMcKean000019Texas#0010c2ANDAnderson00001AIdaho#0190c2BVBonneville00001BArkansas#1070c2PHPhillips000022SpainProvinces#0460c2TATarragona000018Oregon#0210c2GIGilliam00001BTennessee#0230c2CSChester00001BColorado#1150c2SESedgwick00001BMontana#0850c2RORoosevelt00001ELiechtenstein#030c2GAGamprin000019China#200c2NMNei Mongol000019Belarus#040c2MAMahilyow00001BNorthIreland#170c2LRLarne00001BMalta#010c2GHG&#295;awdex00001CLuxembourg#060c2CLClervaux000018Taiwan#010c2CGChanghua000021Wales#180c2RTRhondda Cynon Taff00001ARomania#320c2SMSatu Mare000023Colombia#040c2ATLAtl&aacute;ntico000019Ecuador#180c2PPichincha000021NorthKorea#080c2KAEKaes&#335;ng00001BTurkey#870c2BRBart&#305;n000022WorldwithCountries#900c2GMGambia000029CentralAfricanRepublic#CF.VK0c2VKVakaga000018Somalia#SO.BR0c2BRBari00001DRussia#RU.SV0c2SVSverdlovsk000017Russia#RU.TL0c2TLTula000018Uganda#UG.NE0c2NENebbi000020Russia#RU.BK0c2BKBashkortostan000017Iran#IR.SM0c2SMSemnan00001EVietnam#VN.TG0c2TGTien Giang000049Ethiopia#ET.SN0c2SNSouthern (Nations,Nationalities and People's Region)000025DenmarkRegion#DK.ND0c2NDNordjylland000028WesternSahara#AF.WS0c2WSWestern Sahara00001BEthiopia#ET.AM0c2AMAmhara000017Togo#TG.CE0c2CECentre00001BEurope2#EU.GU0c2GUGuersey00001BNewWorld#1140c2MNMongolia00001DWashington#0590c2SKSkamania000017Indiana#1610c2UNUnion00001CVirginia#1030c2LALancaster00001BAfrica#0330c2MZMozambique00001ARhodeIsland#0030c2KEKent000015Kansas#1550c2RNReno000018Illinois#1910c2WYWayne000018Missouri#1110c2LELewis00001ECalifornia#0150c2DEDel Norte000016Texas#1830c2GREGregg000015Ohio#1450c2SCScioto000017Nebraska#1150c2LULoup00001DMinnesota#0430c2FAFaribault00001FKentucky#0270c2BGBreckinridge00001AMichigan#0370c2CNClinton00001FSpainProvinces#0470c2TETeruel000019Wisconsin#0990c2PCPrice00001DLiechtenstein#040c2MAMauren00001AChina#210c2NXNingxia Hui00001ENorthIreland#180c2LMLimavady00001CFinland#010c2AL&Aring;land000016Malta#020c2KEKemmuna00001CLuxembourg#070c2DIDiekirch000016Taiwan#020c2CHChiayi000019Lithuania#560c2ALAlytus000016Wales#190c2SWSwansea000016Romania#330c2SBSibiu00001BJamacia#040c2MAManchester00001AEcuador#190c2TTungurahua000024NorthKorea#090c2KANKangw&#335;n-do00001FTurkey#880c2IGI&#287;d&#305;r000020SouthKorea#030c2CBJeollabuk-do000021WorldwithCountries#910c2CGCongo000023MarshallIsland#MH.MH.EE0c2EEEbeya000024Alberta#CA.AB.AS0c2ASAlberta South00002CDistrictofColumbia#US.DC.SE0c2SESouth East00001ARwanda#RW.OU0c2OUWestern00001BLaos#LA.XS0c2XSXaisomboun000022Guyana#GY.PT0c2PTPotaro-Siparuni000018Jordan#JO.AJ0c2AJAjlun00001BRussia#RU.BL0c2BLBelgorod00001AChina2#CN.QH0c2QHQinghai00001DVietnam#VN.TH0c2THThanh Hoa00001BThailand#TH.RN0c2RNRanong00001BEthiopia#ET.SO0c2SOSomali000019Lebanon#LE.BI0c2BIBeqaa000021Lebanon#LE.AS0c2ASNorth Lebanon00001DVietnam#VN.BG0c2BGBac Giang000022Thailand#TH.AC0c2ACAmnat Charoen000026BurkinaFaso#BF.PA0c2PAPassor&eacute;000019Montana#0870c2RSRosebud000019Alabama#1330c2WNWinston000018NewWorld#1150c2NPNepal000013Iowa#0290c2CSCass000018Africa#0340c2NANamibia000017Texas#3650c2PANPanola00001ELouisiana#1090c2TRTerrebonne000020NorthCarolina#0210c2BUBuncombe000018Georgia#1730c2LNLanier00001FAlaska#0130c2AEAleutians East000018Kentucky#2090c2SCScott000019Illinois#0110c2BUBureau00001DMississippi#1190c2QUQuitman000020PuertoRico#1290c2SLSan Lorenzo00001DPennsylvania#0850c2MEMercer000018Texas#0030c2ANRAndrews000018Idaho#0210c2BUBoundary000017Arkansas#1090c2PIPike00001FSpainProvinces#0480c2TOToledo000016Oregon#0230c2GRGrant00001DTennessee#0250c2CBClaiborne000019Colorado#1170c2SUSummit00002DIceland#280c2SKSkagafjar&eth;ars&yacute;sla00001ELiechtenstein#050c2PLPlanken000016Belarus#060c2MIMinsk00002FSaintVincentandtheGrenadines#010c2CHCharlotte00001DNorthIreland#190c2LBLisburn000014Malta#030c2MAMalta00001BLuxembourg#080c2RERedange00001DTaiwan#030c2CSChiayi (City)000019Lithuania#570c2KUKaunas000016Wales#200c2TFTorfaen000018Romania#340c2SVSuceava000020Ecuador#200c2ZZamora-Chinchipe00001CTurkey#890c2KBKarab&uuml;k000025WorldwithCountries#920c2MIMauritius000032DemocraticRepublicoftheCongo#CD.BC0c2BCBas-Congo00001EHongKong#HK.TW0c2TWTsuen Wan000018Jordan#JO.BA0c2BABalqa00001CMacedonia#MK.KX0c2KXKarpos000025Macedonia#MK.MD0c2MDMakedonski Brod00001BRussia#RU.UD0c2UDUdmurtia000023CoteDivoire#CI.MC0c2MCMoyen-Comoe000017Oman#OM.JA0c2JADhofar00001ANamibia#NA.ON0c2ONOshana000026Ethiopia#ET.BE0c2BEBenshangul- Gumaz00001BAlgeria#DZ.MC0c2MCMascara00001BNewWorld#1160c2PKPakistan00001EWashington#0610c2SNSnohomish00001DIndiana#1630c2VAVanderburgh000016Virginia#1050c2LELee000016Africa#0350c2NENiger00001DRhodeIsland#0050c2NPNewport000019Kansas#1570c2RPRepublic000018Illinois#1930c2WHWhite00001AMissouri#1130c2LCLincoln00001ECalifornia#0170c2ELEl Dorado000017Texas#1850c2GRIGrimes000015Ohio#1470c2SESeneca00001CNebraska#1170c2MPMcPherson00001CMinnesota#0450c2FIFillmore00001AKentucky#0290c2BIBullitt00001BMichigan#0390c2CRCrawford000021SpainProvinces#0490c2VAValencia00001AWisconsin#1010c2RARacine000027WorldwithCountries#930c2AFAfghanistan00003CIceland#290c2SHSn&aelig;fellsnes-og Hnappadalss&yacute;sla00001ELiechtenstein#060c2RURuggell000019Belarus#070c2VIVitsebsk000032SaintVincentandtheGrenadines#020c2ANSaint Andrew000021NorthIreland#200c2MFMagherafelt000019Luxembourg#090c2WIWiltz000017Taiwan#040c2HHHsinchu000020Lithuania#580c2KLKlaip&#279;da000020Wales#210c2VGVale of Glamorgan00001ARomania#350c2TRTeleorman000028NorthKorea#110c2PYBP'y&#335;ngan-bukto000015Turkey#900c2KIKilis000025SouthKorea#050c2GBChungcheongbuk-do000027Alberta#CA.AB.CA0c2CACalgary and Area000023MarshallIsland#MH.MH.WH0c2WHWotho00001DMacedonia#MK.KY0c2KYKratovo00001CMacedonia#MK.LO0c2LOLozovo000026Sudan#SD.NB0c2NBNorth Bahr Al Ghazal000019Nepal#NP.GA0c2GAGandaki000018Russia#RU.TO0c2TOTomsk000016Libya#LY.SR0c2SRSurt000030FranceDepartment#FR.PO0c2POPyrenees Orientales00001DVietnam#VN.ST0c2STSoc Trang00001EGuinea#GN.BK0c2BKBok&eacute;00001EVietnam#VN.BI0c2BIBinh Duong000021Turkmenistan#TM.DA0c2DADashoguz000024Morocco#MA.MT0c2MTMeknes-Tafilalet000019Algeria#DZ.MD0c2MDMedea000019Montana#0890c2SASanders00001ENewWorld#1170c2PHPhilippines000019Nevada#0270c2PEPershing000014Iowa#0310c2CECedar000018Africa#0360c2NGNigeria000017Texas#3670c2PARParker000019Louisiana#1110c2UNUnion000026Virginia#8300c2WLWilliamsburg (City)00001DNorthCarolina#0230c2BKBurke000019Georgia#1750c2LULaurens000019Kentucky#2110c2SHShelby00001AIllinois#0130c2CACalhoun00001CMississippi#1210c2RARankin000018Europe#0010c2ALAlbania000029PuertoRico#1310c2SSSan Sebasti&aacute;n00001EPennsylvania#0870c2MIMifflin000019Texas#0050c2ANGAngelina000015Idaho#0230c2BTButte00001BArkansas#1110c2POPoinsett000023SpainProvinces#0500c2VLValladolid000017Oregon#0250c2HAHarney000018Tennessee#0270c2CYClay000019Colorado#1190c2TETeller000023WorldwithCountries#940c2AMArmenia000024Iceland#300c2STStrandas&yacute;sla00001DLiechtenstein#070c2SNSchaan000015China#240c2SXShanxi000031SaintVincentandtheGrenadines#030c2DASaint David00001BNorthIreland#210c2MYMoyle000027USASouthEastRegion#280c2MSMississippi00001BLuxembourg#100c2VIVianden00001ETaiwan#050c2HSHsinchu (City)000023Lithuania#590c2MRMarijampol&#279;000016Wales#220c2WXWrexham00001BRomania#360c2TMTimi&#351;000019Jamacia#070c2POPortland000021Colombia#080c2CAQCaquet&aacute;000020Ecuador#220c2USucumb&iacute;os000024NorthKorea#120c2PYOP'y&#335;ngyang000018Turkey#910c2OSOsmaniye00001ESouthKorea#060c2KWGangwon-do00001FKazakhstan#KZ.PA0c2PAPavlodar000018Jordan#JO.AM0c2AMAmman000023Macedonia#MK.KZ0c2KZKriva Palanka000021Libya#LY.SS0c2SSSabratah Surman000024Tibet#TI.NP0c2NPNyinchi Prefecture00001DThailand#TH.SG0c2SGSongkhla000038Pakistan#PK.TA0c2TAFederally Administered Tribal Areas000016Nauru#NR.AI0c2AIAiwo000018Nigeria#NG.OS0c2OSOsun00001BEurope2#EU.IE0c2IEIreland00002FSaudiArabia#SA.HS0c2HSAl Hudud Ash Shamaliyah00001CMacedonia#MK.MG0c2MGMogila00001ESudan#SD.ND0c2NDNorth Darfur00001DPhilippines#PH.LE0c2LELeyte000019Uganda#UG.MT0c2MTMoroto000017Iran#IR.TH0c2THTehran000020Thailand#TH.SH0c2SHSuphan Buri00001BEthiopia#ET.TI0c2TITigray00001BVietnam#VN.BK0c2BKBac Can000020Pakistan#PK.BA0c2BABalochistan000020Mauritius#MU.GP0c2GPGrand Port00001EBurkinaFaso#BF.NY0c2NYNayala000025NewWorld#1180c2RURussian Federation00001CWashington#0630c2SPSpokane00001CIndiana#1650c2VEVermillion00001AVirginia#1070c2LOLoudoun000020RhodeIsland#0070c2PRProvidence000015Kansas#1590c2RCRice00001CIllinois#1950c2WTWhiteside000017Missouri#1150c2LNLinn00001BCalifornia#0190c2FRFresno00001FAlaska#0160c2AWAleutians West00001ATexas#1870c2GUAGuadalupe000021Virginia#6500c2HAHampton (City)000015Ohio#1490c2SHShelby00001ANebraska#1190c2MAMadison000018Europe#0020c2ADAndorra00001CMinnesota#0470c2FRFreeborn000019Kentucky#0310c2BUButler000018Michigan#0410c2DEDelta00001FSpainProvinces#0510c2ZAZamora00001CWisconsin#1030c2RIRichland000027NewCaledonia#NC.SU.BP0c2BPBoulouparis000026WorldwithCountries#950c2AZAzerbaijan000032Iceland#310c2SMSu&eth;ur-M&uacute;las&yacute;sla000023Liechtenstein#080c2SBSchellenberg000017China#250c2SDShandong000032SaintVincentandtheGrenadines#040c2GESaint George000026NorthIreland#220c2NMNewry and Mourne00001ELuxembourg#110c2ECEchternach000017Taiwan#060c2HLHualien000026Lithuania#600c2PNPanev&#279;&#382;ys000017Romania#370c2TLTulcea00001DJamacia#080c2SDSaint Andrew000018Colombia#090c2CAUCauca000014Ecuador#230c2NNapo000020NorthKorea#130c2YANYanggang-do000016Turkey#920c2YLYalova00001BFiji#FJ.NO.MC0c2MCMacuata000023MarshallIsland#MH.MH.WJ0c2WJWotje00001EAlgeria#DZ.MG0c2MGMostaganem00001CSamoa #WS.VS0c2VSVaisigano000020Guinea#GN.TO0c2TOTougu&eacute;00001BUganda#UG.NK0c2NKNakaseke00001EThailand#TH.SI0c2SISi Sa Ket000020Kuwait#KW.FA0c2FAAl Farwaniyah000018Iran#IR.AR0c2ARArdebil00001CVietnam#VN.BL0c2BLBac Lieu00001CVietnam#VN.CB0c2CBCao Bang000017Nauru#NR.BA0c2BABaiti00001DColorado#1210c2WAWashington00001AMontana#0910c2SHSheridan00001CNewWorld#1190c2SGSingapore000017Nevada#0290c2STStorey00001AIowa#0330c2CGCerro Gordo000017Africa#0380c2RWRwanda000017Texas#3690c2PAMParmer00001DLouisiana#1130c2VEVermilion000020NorthCarolina#0250c2CACabarrus000015Georgia#1770c2LELee00001AKentucky#2130c2SISimpson00001AIllinois#0150c2CRCarroll00001BMississippi#1230c2SCScott000018Europe#0030c2ATAustria000021PuertoRico#1330c2SISanta Isabel00001DPennsylvania#0890c2MOMonroe000018Texas#0070c2ARAAransas000015Idaho#0250c2CACamas000017Arkansas#1130c2PLPolk000021SpainProvinces#0520c2ZRZaragoza00001BOregon#0270c2HRHood River000019Tennessee#0290c2CKCocke000032MadagascarRegions#MG.FI.AA0c2AAAtsimo-Atsinanana000026WorldwithCountries#960c2BDBangladesh000019USA#RI0c2RIRhode Island000036Iceland#320c2SUSu&eth;ur-&THORN;ingeyjars&yacute;sla00001ELiechtenstein#090c2TNTriesen000016China#260c2SAShaanxi000033SaintVincentandtheGrenadines#050c2PASaint Patrick000022NorthIreland#230c2NWNewtownabbey000018Finland#060c2LALapland000020Luxembourg#120c2GRGrevenmacher00001FTaiwan#070c2KHKaohsiung(City)000022Lithuania#610c2SA&Scaron;iauliai000017Indonesia#010c2ACAceh000017Romania#380c2VSVaslui00001AJamacia#090c2SNSaint Ann000018Colombia#100c2CESCesar000018Ecuador#240c2DOrellana00001ANorthKorea#140c2NAMNampo00001ATurkey#930c2DUD&uuml;zce000017Somalia#SO.BY0c2BYBay00001DZambia#ZM.CO0c2COCopperbelt00001EPhilippines#PH.LG0c2LGLaguna000022PapuaNewGuinea#PG.CE0c2CECentral00001ARussia#RU.BR0c2BRBryansk00001CVietnam#VN.TN0c2TNTay Ninh00001FThailand#TH.RT0c2RTRatchaburi00001BNamibia#NA.OS0c2OSOmusati00001BNigeria#NG.PL0c2PLPlateau000018Wisconsin#1050c2RORock00001CNewWorld#1200c2LKSri Lanka00001CWashington#0650c2STStevens000016Indiana#1670c2VIVigo000019Virginia#1090c2LULouisa000020RhodeIsland#0090c2WAWashington000016Kansas#1610c2RLRiley000017Illinois#1970c2WIWill00001DMissouri#1170c2LILivingston00001ACalifornia#0210c2GLGlenn000015Texas#1890c2HAEHale000014Ohio#1510c2STStark00001ANebraska#1210c2MEMerrick000018Europe#0040c2BYBelarus00001BMinnesota#0490c2GOGoodhue00001BKentucky#0330c2CACaldwell00001CMichigan#0430c2DIDickinson000023NewCaledonia#NC.SU.BR0c2BRBourail000022WorldwithCountries#970c2BTBhutan000022Liechtenstein#100c2TBTriesenberg000030SaintVincentandtheGrenadines#060c2GTGrenadines000020NorthIreland#240c2NDNorth Down00001ALuxembourg#130c2RMRemich000019Taiwan#080c2KCKaohsiung00001FLithuania#620c2TATaurag&#279;000017Indonesia#020c2BABali00001DRomania#390c2VLV&acirc;lcea000020Jamacia#100c2SCSaint Catherine00001FColombia#110c2CHOChoc&oacute;000028NorthKorea#150c2PYNP'y&#335;ngan-namdo000016Iraq#010c2ANAl-Anbar000019Senegal#SN.DK0c2DKDakar00001FLesotho#LS.BB0c2BBButha-Buthe000018Jordan#JO.AQ0c2AQAqaba00001CRussia#RU.TT0c2TTTatarstan00001FUK7#UK.CI0c2CIChannel Islands00001CEastTimor#TL.ER0c2ERErmera00001CUganda#UG.NM0c2NMNamutumba000025Libya#LY.TM0c2TMTarhunah Masallatah00001CTunisia#TN.JE0c2JEJendouba00001CThailand#TH.SK0c2SKSa Kaeo000024Qatar#QA.MS0c2MSMadinat Ach Shamal00001CVietnam#VN.BN0c2BNBac Ninh000021SriLanka#LK.NW0c2NWNuwara Eliya00001CNamibia#NA.OT0c2OTOshikoto000017Colorado#1230c2WLWeld00001CMontana#0930c2SBSilver Bow00001DNewWorld#1210c2TJTajikistan000017Nevada#0310c2WAWashoe000017Iowa#0350c2CHCherokee000026Africa#0400c2STSao Tome and Principe000016Texas#3710c2PECPecos00001ALouisiana#1150c2VNVernon000020NorthCarolina#0270c2CLCaldwell000019Georgia#1790c2LILiberty00001AKentucky#2150c2SPSpencer000017Illinois#0170c2CSCass00001DMississippi#1250c2SHSharkey000018Europe#0050c2BEBelgium00001DPuertoRico#1350c2TAToa Alta000021Pennsylvania#0910c2MTMontgomery000017Texas#0090c2ARCArcher000016Idaho#0270c2CNCanyon000017Arkansas#1150c2PPPope000018Oregon#0290c2JAJackson00001ATennessee#0310c2CFCoffee000026Manitoba#CA.MB.WR0c2WRWestern Region000022WorldwithCountries#980c2BNBrunei000035Iceland#340c2VBVestur-Bar&eth;astrandars&yacute;sla00001CLiechtenstein#110c2VAVaduz00001BNorthIreland#250c2OMOmagh000015Finland#080c2OUOulu00001ETaiwan#090c2CLKeelung (City)000021Lithuania#630c2TETel&scaron;iai00001BIndonesia#030c2BEBengkulu00002ABritishColumbia#010c2ACAlberni-Clayoquot000018Romania#400c2VNVrancea000020Jamacia#110c2SESaint Elizabeth000021Colombia#120c2CORC&oacute;rdoba000017Iraq#020c2BAAl-Basrah000019SouthKorea#100c2PUBusan000033NorthWestTerritories#CA.NT.DC0c2DCDiamond Capital000028PolandCounties#PL.DS.WM0c2DWMWalbrzych000029Macedonia#MK.MK0c2MKMakedonska Kamenica000026Macedonia#MK.NA0c2NAStaro Nagoricane00001CComoros #KM.AN0c2ANAnjouan000017Russia#RU.TU0c2TUTuva00001AMongolia#MN.HD0c2HDKhovd00001FSamoa #WS.FA0c2FAFaasaleleaga00002DLibya#LY.TN0c2TNTajura wa an Nawahi Al Arba00001BIran#IR.BK0c2BKKermanshah000018Wisconsin#1070c2RURusk00001BNewWorld#1220c2THThailand00001DWashington#0670c2THThurston000018Indiana#1690c2WAWabash00001CVirginia#1110c2LNLunenburg000018Africa#0410c2SNSenegal00002FAlaska#2010c2PWPrince of Wales-Outer Ketchika000016Kansas#1630c2RORooks00001DIllinois#1990c2WLWilliamson00001BMissouri#1190c2MNMcDonald00001DCalifornia#0230c2HUHumboldt00001AAlaska#0200c2ANAnchorage000015Texas#1910c2HALHall000015Ohio#1530c2SUSummit00001ANebraska#1230c2MOMorrill000027Europe#0060c2BABosnia and Herzegovina000019Minnesota#0510c2GRGrant00001BKentucky#0350c2CLCalloway000018Michigan#0450c2EAEaton000026Manitoba#CA.MB.ER0c2EREastern Region000023NewCaledonia#NC.NO.KA0c2KAKouaoua00002BWorldwithCountries#990c2MMBurma (Myanmar)000034Iceland#350c2VHVestur-H&uacute;navatnss&yacute;sla000015China#290c2YNYunnan00001ENorthIreland#260c2SBStrabane000019Bangladesh#810c2DADhaka00001CSuriname#100c2BRBrokopondo000016Taiwan#100c2KMKinmen000018Lithuania#640c2UTUtena00001AIndonesia#040c2JKJakarta000028BritishColumbia#020c2BNBulkley-Nechako000028Romania#410c2CLC&#259;l&#259;ra&#351;i00001CJamacia#120c2SJSaint James000028NorthKorea#170c2HABHamgy&#335;ng-bukto00001EIraq#030c2MUAl-Muthann&#257;000019SouthKorea#110c2SOSeoul000028PolandCounties#PL.KP.BM0c2KBMBydgoszcz000019Algeria#DZ.NA0c2NANaama000023Tanzania#TZ.ZN0c2ZNZanzibar North000018Angola#AO.HL0c2HLHuila000021PapuaNewGuinea#PG.CH0c2CHChimbu000017Russia#RU.TV0c2TVTver00001CRussia#RU.UL0c2ULUlyanovsk000017Uganda#UG.MY0c2MYMoyo00001BRussia#RU.BU0c2BUBuryatia00001BRussia#RU.CK0c2CKChukotka00001BRussia#RU.DA0c2DADagestan00001FVietnam#VN.TQ0c2TQTuyen Quang000027CaymanIslands#KY.SO0c2SOLittle Cayman000024Thailand#TH.SM0c2SMSamut Songkhram000020Madagascar#MG.MA0c2MAMahajanga00001EVietnam#VN.BP0c2BPBinh Phuoc000017Nigeria#NG.OY0c2OYOyo00001BEurope2#EU.HU0c2HUHungary00001CTennessee#0330c2COCrockett000017Colorado#1250c2YUYuma00001CMontana#0950c2SWStillwater00001FNewWorld#1230c2TMTurkmenistan00001BNevada#0330c2WPWhite Pine000018Iowa#0370c2CKChickasaw00001AAfrica#0420c2SYSeycelles000015Texas#3730c2POLPolk00001ELouisiana#1170c2WAWashington00001ENorthCarolina#0290c2CMCamden000019Georgia#1810c2LCLincoln000019Kentucky#2170c2TATaylor00001CIllinois#0190c2CHChampaign00001DMississippi#1270c2SISimpson000019Europe#0070c2BGBulgaria00001DPuertoRico#1370c2TBToa Baja00001EPennsylvania#0930c2MUMontour00001ATexas#0110c2ARSArmstrong000017Idaho#0290c2CRCaribou00001AArkansas#1170c2PRPrairie00001AOregon#0310c2JEJefferson00001BUSA#SC0c2SCSouth Carolina000039Iceland#360c2VIVestur-&Iacute;safjar&eth;ars&yacute;sla000018China#300c2GDGuangdong00001ABangladesh#820c2KHKhulna000025Australia#NT0c2NTNorthern Territory00001CSuriname#110c2CMCommewijne00001ATaiwan#110c2LKLienchiang00001ALithuania#650c2VLVilnius000018Indonesia#050c2JAJambi000020BritishColumbia#030c2CACapital000018Romania#420c2GRGiurgiu00001BJamacia#130c2SMSaint Mary00001BColombia#140c2GUVGuaviare00001FNorthKorea#180c2NAJRas&#335;n000020Iraq#040c2QAAl-Q&#257;disiyyah00001BSouthKorea#120c2INIncheon000026MarshallIsland#MH.MH.EN0c2ENEnewetak000024PolandCounties#PL.KP.TO0c2KTOTorun00001BFiji#FJ.WE.LT0c2LTLautoka000018Algeria#DZ.ML0c2MLMila000019Angola#AO.HM0c2HMHuambo00001CGuineaBissau#GW.OI0c2OIOio000019Lesotho#LS.BE0c2BEBerea00001AJordan#JO.AT0c2ATTafilah000023Philippines#PH.MA0c2MAMaguindanao00001CGabon#GA.WN0c2WNWoleu-Ntem000018Niger#NE.NI0c2NINiamey00001CHongKong#HK.EA0c2EAEastern000020Uganda#UG.NP0c2NPNakapiripirit00001ERussia#RU.CL0c2CLChelyabinsk000021Thailand#TH.SN0c2SNSakon Nakhon00001BSyria#SY.RA0c2RAAr Raqqah00001DNamibia#NA.OW0c2OWOhangwena00001DWisconsin#1090c2SCSt. Croix00001DNewWorld#1240c2UZUzbekistan00001EWashington#0690c2WKWahkiakum000018Indiana#1710c2WRWarren00001AVirginia#1130c2MAMadison00001DAfrica#0430c2SLSierra Leone000015Kansas#1650c2RHRush00001CIllinois#2010c2WBWinnebago000018Missouri#1210c2MOMacon00001DCalifornia#0250c2IMImperial000019Texas#1930c2HAMHamilton000017Ohio#1550c2TRTrumbull000018Nebraska#1250c2NANance000019Georgia#0010c2APAppling000018Europe#0080c2HYCroatia00001CMinnesota#0530c2HEHennepin00001EAustralia2#VIC0c2VICVictoria00001BKentucky#0370c2CBCampbell000018Michigan#0470c2EMEmmet000019USA#SD0c2SDSouth Dakota00002FIceland#370c2VSVestur-Skaftafellss&yacute;sla000023USARegion#010c2NENorthEast Region000015China#310c2HAHainan000015World#EU0c2EUEurope00001CBangladesh#830c2RJRajshahi000019Suriname#120c2CRCoronie000016Taiwan#120c2MLMiaoli000020BritishColumbia#040c2CRCariboo000016Romania#430c2IFIlfov00001DJamacia#140c2STSaint Thomas000021Colombia#150c2GUAGuain&iacute;a000023Iraq#050c2SUAs-Sulaym&#257;niyyah00001FArgentina#010c2BABuenos Aires00001FSouthKorea#130c2KGGyeonggi-do000020Europe2#EU.IM0c2IMIsles of Man00001FSaudiArabia#SA.JF0c2JFAl Jawf00001DHongKong#HK.WC0c2WCWan Chai000020Sudan#SD.NK0c2NKNorth Kurdufan00001FPhilippines#PH.MB0c2MBMasbate00001DMongolia#MN.HG0c2HGKhovsgol000022CoteDivoire#CI.NC0c2NCN'zi-Comoe000022Cyprus2#CY.TC0c2TCTurkish Cyprus00001BThailand#TH.RY0c2RYRayong00001EThailand#TH.SO0c2SOSukhothai000026TrinidadandTobago#TT.VI0c2VIVictoria00001BVietnam#VN.BR0c2BRBen Tre00001ETennessee#0350c2CMCumberland00001DMontana#0970c2SGSweet Grass00001ANewWorld#1250c2VNVietnam000015Iowa#0390c2CLClarke000018Africa#0440c2SOSomalia000017Texas#3750c2POTPotter00001BLouisiana#1190c2WEWebster000020NorthCarolina#0310c2CRCarteret000016Georgia#1830c2LOLong000017Kentucky#2190c2TOTodd00001CIllinois#0210c2CIChristian00001BMississippi#1290c2SMSmith00001FEurope#0090c2CZCzech Republic000022PuertoRico#1390c2TJTrujillo Alto000022Pennsylvania#0950c2NONorthampton000019Texas#0130c2ATAAtascosa000016Idaho#0310c2CSCassia00001AArkansas#1190c2PUPulaski00001AOregon#0330c2JOJosephine000027NorthAmerica_WOCentral#0050c2CACanada000023USARegion#020c2NWNorthWest Region000016China#320c2SCSichuan00001EBangladesh#840c2CGChittagong00001BSuriname#130c2MAMarowijne000016Taiwan#130c2NTNantou00001FIndonesia#070c2JTCentral Java000026BritishColumbia#050c2CNCentral Coast000019Jamacia#150c2TRTrelawny000018Colombia#160c2HUIHuila000018Norway#010c2AKAkershus000018Iraq#060c2BBB&#257;bil00001CArgentina#020c2CTCatamarca000024SouthKorea#140c2KBGyeongsangbuk-do00001DBhutan#BT.PM0c2PMPemagatsel000031DemocraticRepublicoftheCongo#CD.BN0c2BNBandundu00001AZambia#ZM.EA0c2EAEastern00002APhilippines#PH.MC0c2MCOccidental Mindoro000019Russia#RU.TY0c2TYTyumen000028HongKong#HK.CW0c2CWCentral and Western00001BRussia#RU.CN0c2CNChechnya000022Vietnam#VN.TT0c2TTThua Thien Hue00001AGuinea#GN.CK0c2CKConakry000021Thailand#TH.SP0c2SPSamut Prakan000019Nauru#NR.AR0c2ARAnibare000018Wisconsin#1110c2SASauk000019NewWorld#1260c2TWTaiwan000020Washington#0710c2WLWalla walla000019Indiana#1730c2WIWarrick00001AVirginia#1150c2MTMathews00001DAfrica#0450c2ZASouth Africa000018Kansas#1670c2RSRussell00001BIllinois#2030c2WFWoodford00001AMissouri#1230c2MDMadison000019California#0270c2INInyo000019Texas#1950c2HANHansford000019Ohio#1570c2TUTuscarawas000019Nebraska#1270c2NENemaha00001AGeorgia#0030c2ATAtkinson000018Europe#0100c2DKDenmark00001BMinnesota#0550c2HUHouston00001BKentucky#0390c2CRCarlisle00001AMichigan#0490c2GEGenesee000019SouthKorea#150c2TGDaegu000023USARegion#030c2SESouthEast Region00002AUSASouthEastRegion#370c2NCNorth Carolina00001BBangladesh#850c2BABarisal000021Finland#130c2SFSouthern Finland00001ASuriname#140c2NINickerie000016Taiwan#140c2PHPenghu00001CIndonesia#080c2JIEast Java000029BritishColumbia#060c2CKCentral Kootenay000016Albania#400c2BRBerat00001DJamacia#160c2WEWestmoreland00001DColombia#170c2LAGLa Guajira00001ANorway#020c2AAAust-Agder00001AIraq#070c2BGBaghd&#257;d000018Argentina#030c2CCChaco000026PolandCounties#PL.DS.WR0c2DWRWroclaw000023FrenchGuiana#GF.CY.OU0c2OUOuanary00001BEurope2#EU.HY0c2HYCroatia00001AEurope2#EU.JE0c2JEJersey00001CBrunei#BN.TE0c2TETemburong00001ABhutan#BT.PN0c2PNPunakha000027Philippines#PH.LN0c2LNLanao del Norte00002APhilippines#PH.MD0c2MDMisamis Occidental00001FMongolia#MN.GS0c2GSGovisumber00001AChina2#CN.SA0c2SAShaanxi000019Guinea#GN.DB0c2DBDabola00001AThailand#TH.TG0c2TGTrang00001DSyria#SY.RD0c2RDRif Dimashq00001CTennessee#0370c2DADavidson000017Montana#0990c2TETeton00001CNewWorld#1270c2HKHong Kong000013Iowa#0410c2CYClay000016Africa#0460c2SDSudan000019Texas#3770c2PREPresidio000024Louisiana#1210c2WBWest Baton Rouge000024Virginia#8400c2WTWinchester (City)00001FNorthCarolina#0330c2CSCaswell000019Georgia#1850c2LWLowndes000018Kentucky#2210c2TRTrigg000018Illinois#0230c2CLClark00001BMississippi#1310c2STStone000018Europe#0110c2EEEstonia00001BPuertoRico#1410c2UTUtuado000025Pennsylvania#0970c2NTNorthumberland000017Texas#0150c2AUSAustin000015Idaho#0330c2CLClark00001BArkansas#1210c2RARandolph000018Oregon#0350c2KLKlamath000020SouthKorea#160c2CNJeollanam-do000023USARegion#040c2SWSouthWest Region000017Peru#010c2AMAAmazonas000018Uruguay#010c2ARArtigas00001ABangladesh#860c2SYSylhet000020Finland#140c2EFEastern Finland000016Suriname#150c2PRPara000018Taiwan#150c2PTPingtung000029BritishColumbia#070c2COCentral Okanagan00001BAlbania#410c2DIDib&euml;r000019Jamacia#170c2KIKingston000018Iraq#080c2DADah&#363;k000019Argentina#040c2CHChubut000019Fiji#FJ.WE.ND0c2NDNandi000024MarshallIsland#MH.MH.ER0c2ERErikub000020FrenchGuiana#GF.SL.MN0c2MNMana00001CBurkinaFaso#BF.PO0c2POPoni00002AMorocco#MA.OL0c2OLOued Ed Dahab-Lagouira00002FTanzania#TZ.ZS0c2ZSZanzibar Central and South000019Brunei#BN.BE0c2BEBelait00001EMacedonia#MK.NG0c2NGNegotino00001CRussia#RU.VG0c2VGVolgograd00001BUganda#UG.NT0c2NTNtungamo00001ATunisia#TN.KB0c2KBKebili00001CVietnam#VN.TV0c2TVTra Vinh000017Nauru#NR.UA0c2UAUaboe00001DThailand#TH.SR0c2SRSaraburi00001EVietnam#VN.BU0c2BUBinh Thuan00001BVietnam#VN.DA0c2DADa Nang000024SaoTomeandPrincipe#ST.LE0c2LELemba000018Nauru#NR.AT0c2ATAnetan00001AWisconsin#1130c2SWSawyer000018NewWorld#1280c2MOMacau00001CWashington#0730c2WAWhatcom00001CIndiana#1750c2WSWashington00001EVirginia#1170c2MEMecklenburg00001AAfrica#0470c2SZSwaziland000017Kansas#1690c2SASaline000019Missouri#1250c2MEMaries000019California#0290c2KEKern000019Texas#1970c2HARHardeman000026Virginia#6600c2HRHarrisonburg (City)000014Ohio#1590c2UNUnion00001BNebraska#1290c2NUNuckolls000017Georgia#0050c2BABacon000018Europe#0120c2FIFinland00001BMinnesota#0570c2HBHubbard00001AKentucky#0410c2COCarroll00001AMichigan#0510c2GLGladwin000027NewCaledonia#NC.NO.KG0c2KGKaala-Gomen000036SaintKittsandNevis#010c2CCChrist Church Nichola Town000021Argentina#050c2CBC&oacute;rdoba000025SouthKorea#170c2GNChungcheongnam-do000021USARegion#050c2CRCentral Region000015Peru#020c2ANCAncash00001AUruguay#020c2CACanelones000020Finland#150c2WFWestern Finland00001CSuriname#160c2PMParamaribo000018Taiwan#160c2THTaichung00001DIndonesia#100c2YOYogyakarta000029BritishColumbia#080c2CSColumbia-Shuswap00001CAlbania#420c2DRDurr&euml;s000017Colombia#190c2METMeta000018Norway#040c2BUBuskerud00001FIraq#090c2DQDh&#299; Q&#257;r000016Mali#ML.SG0c2SGSegou00001AZambia#ZM.WE0c2WEWestern000029Macedonia#MK.MR0c2MRMavrovo and Rostusa00001ASudan#SD.NO0c2NONorthern000019Uganda#UG.OK0c2OKKoboko00001AVanuatu#VU.PM0c2PMPenama00001AChina2#CN.SC0c2SCSichuan000022FranceDepartment#FR.RH0c2RHRhone00001DVietnam#VN.VC0c2VCVinh Phuc000021Thailand#TH.SS0c2SSSamut Sakhon000021Vietnam#VN.BV0c2BVBaRia-VungTau00001DVietnam#VN.DB0c2DBDien Bien00001BTennessee#0390c2DEDecatur000017Montana#1010c2TOToole00001ANewWorld#1290c2ALAlbania000016Iowa#0430c2CTClayton000019Africa#0480c2TZTanzania000016Texas#3790c2RAIRains000020Louisiana#1230c2WCWest Carroll00001FNorthCarolina#0350c2CTCatawba000019Georgia#1870c2LPLumpkin00001AKentucky#2230c2TITrimble000017Illinois#0250c2CYClay00001FMississippi#1330c2SUSunflower000017Europe#0130c2FRFrance00001EPuertoRico#1430c2VAVega Alta00001CPennsylvania#0990c2PEPerry000017Texas#0170c2BAIBailey00001AIdaho#0350c2CWClearwater00001EArkansas#1230c2SFSt. Francis000015Oregon#0370c2LALake000032SaintKittsandNevis#020c2ASSaint Anne Sandy Point00001DArgentina#060c2CNCorrientes00001BSouthKorea#180c2KJGwangju000014China#360c2TBTibet000017Peru#030c2APUApurimac00001CUruguay#030c2CLCerro Largo00001BSuriname#170c2SASaramacca000022USANorthWestRegion#020c2AKAlaska00001FTaiwan#170c2TGTaichung (City)000022Indonesia#110c2KBWest Kalimantan000029BritishColumbia#090c2CMComox-Strathcona000018Albania#430c2ELElbasan000020Colombia#200c2NARNari&ntilde;o000018Norway#050c2FIFinnmark00001EIraq#100c2DIDiy&#257;l&#257;00002DSierraLeone#SL.WE.WR0c2WRWestern Area Rural000027FrenchGuiana#GF.SL.MP0c2MPMaripasoula000038NorthWestTerritories#CA.NT.WB0c2WBWood Buffalo Country00001CMauritania#MR.AD0c2ADAdrar000018Jordan#JO.AZ0c2AZZarqa00001DMacedonia#MK.NI0c2NIVinitsa000020CoteDivoire#CI.MR0c2MRMarahoue00001AGabon#GA.ES0c2ESEstuaire00001BChina2#CN.SD0c2SDShandong000018Guinea#GN.CO0c2COCoyah000020Thailand#TH.ST0c2STSurat Thani00001BLibya#LY.BU0c2BUAl Butnan000018Iran#IR.BS0c2BSBushehr00001AVietnam#VN.CM0c2CMCa Mau00001BVietnam#VN.DC0c2DCDac Lac00001BWisconsin#1150c2SHShawano00001ANewWorld#1300c2ADAndorra00001CWashington#0750c2WHWhitman000017Indiana#1770c2WYWayne00001CVirginia#1190c2MIMiddlesex000015Africa#0490c2TGTogo000016Kansas#1710c2SCScott000019Missouri#1270c2MAMarion00001ACalifornia#0310c2KIKings000017Texas#1990c2HADHardin000017Ohio#1610c2VWVan Wert00001CNetherland#0010c2DRDrenthe000017Nebraska#1310c2OTOtoe000017Georgia#0070c2BKBaker000018Europe#0140c2DEGermany00001AMinnesota#0590c2ISIsanti000019Kentucky#0430c2CTCarter00001AMichigan#0530c2GOGogebic000033SaintKittsandNevis#030c2GBSaint George Basseterre000023Argentina#070c2DFDistrito Federal00001BSouthKorea#190c2TJDaejeon000017Peru#040c2AREArequipa000018Uruguay#040c2COColonia00001CSuriname#180c2SISipaliwini000016Taiwan#180c2TATainan000023Indonesia#120c2KSSouth Kalimantan000028BritishColumbia#100c2CVCowichan Valley000015Albania#440c2FRFier000025Colombia#210c2NSANorte de Santander000017Norway#060c2HEHedmark000018Iraq#110c2ARArb&#299;l000025CaymanIslands#KY.CB0c2CBCayman Brac00001EThailand#TH.AT0c2ATAng Thong00001ACongo#CG.PL0c2PLPlateaux00001BEurope2#EU.IS0c2ISIceland000019Algeria#DZ.MS0c2MSMsila00001DLiberia#LR.RG0c2RGRiver Gee000017Bhutan#BT.PR0c2PRParo000019Laos#LA.HO0c2HOHouaphan000017Benin#BJ.OU0c2OUOueme00001FVietnam#VN.TY0c2TYThai Nguyen00001AThailand#TH.SU0c2SUSurin000018Thailand#TH.TK0c2TKTak00001BVietnam#VN.CN0c2CNCan Tho00001ATennessee#0410c2DKDeKalb00001AMontana#1030c2TRTreasure00001ANewWorld#1310c2ATAustria000016Iowa#0450c2CNClinton000018Texas#3810c2RANRandall000022Louisiana#1250c2WFWest Feliciana00001FNorthCarolina#0370c2CHChatham00001AGeorgia#1890c2MCMcduffie000018Kentucky#2250c2UNUnion00001ENetherland#0020c2FLFlevoland00001AIllinois#0270c2CNClinton000022Mississippi#1350c2TATallahatchie000017Europe#0150c2GRGreece00001EPuertoRico#1450c2VBVega Baja000023Pennsylvania#1010c2PHPhiladelphia000018Texas#0190c2BANBandera000016Idaho#0370c2CUCuster000019Arkansas#1250c2SASaline000015Oregon#0390c2LELane00002FMadagascarRegions#MG.FI.AM0c2AMAmoron'i Mania000033SaintKittsandNevis#040c2GGSaint George Gingerland000024Argentina#080c2EREntre R&iacute;os000024SouthKorea#200c2KNGyeongsangnam-do000017Peru#050c2AYAAyacucho000018Uruguay#050c2DUDurazno000018Suriname#190c2WAWanica00001DTaiwan#190c2TNTainan (City)000025Indonesia#130c2KTCentral Kalimantan000026BritishColumbia#110c2EKEast Kootenay000021Albania#450c2GJGjirokast&euml;r00001BColombia#220c2PUTPutumayo000019Norway#070c2HOHordaland000015Iraq#120c2KAKarbala000019Europe2#EU.IT0c2ITItaly000022Tanzania#TZ.ZW0c2ZWZanzibar West00001DUzbekistan#UZ.JI0c2JIJizzax000015UK7#UK.WA0c2WAWales000025Philippines#PH.LS0c2LSLanao del Sur00002FCentralAmerica2#CE.AG0c2AGAntigua and Barbuda00001CMongolia#MN.HN0c2HNKhentii000018Uganda#UG.PD0c2PDPader000019Benin#BJ.PL0c2PLPlateau000017Tunisia#TN.KF0c2KFKef00001CLibya#LY.BW0c2BWBani Walid00001DWisconsin#1170c2SESheboygan00001ANewWorld#1320c2BYBelarus00001BWashington#0770c2YAYakima000017Indiana#1790c2WEWells00001DVirginia#1210c2MOMontgomery000018Africa#0510c2TNTunisia000019Kansas#1730c2SGSedgwick000019Missouri#1290c2MCMercer000019California#0330c2LALake000017Texas#2010c2HASHarris000015Ohio#1630c2VIVinton00001ENetherland#0030c2FRFriesland000019Nebraska#1330c2PAPawnee000019Georgia#0090c2BDBaldwin000018Europe#0160c2HUHungary00001AMinnesota#0610c2ITItasca000018Kentucky#0450c2CSCasey000021Michigan#0550c2GTGrand Traverse000027MadagascarRegions#MG.TL.AD0c2ADAndroy000030SaintKittsandNevis#050c2JWSaint James Windward00001AArgentina#090c2FMFormosa000019SouthKorea#210c2ULUlsan000018Peru#060c2CAJCajamarca000017Uruguay#060c2FSFlores000013USA#AK0c2AKAlaska000016Taiwan#200c2TPTaipei000022Indonesia#140c2KIEast Kalimantan000026BritishColumbia#120c2FVFraser Valley000022Albania#460c2KOKor&ccedil;&euml;000021Colombia#230c2QUIQuind&iacute;o000026Norway#080c2MRM&oslash;re og Romsdal000017Iraq#130c2TSAt-Ta'mim00002DSierraLeone#SL.WE.WU0c2WUWestern Area Urban00002CDistrictofColumbia#US.DC.SW0c2SWSouth West000015Nauru#NR.BO0c2BOBoe00001EThailand#TH.CB0c2CBChon Buri000018Mali#ML.SK0c2SKSikasso00001DLiberia#LR.RI0c2RIRivercess000021Kazakhstan#KZ.QG0c2QGQaraghandy00001BRussia#RU.VL0c2VLVladimir000020SolomonIsland#SB.TE0c2TETemotu00001BTennessee#0430c2DIDickson000018Montana#1050c2VAValley00001ANewWorld#1330c2BEBelgium000017Iowa#0470c2CFCrawford000017Africa#0520c2UGUganda000017Texas#3830c2REAReagan000018Louisiana#1270c2WIWinn000020NorthCarolina#0390c2CECherokee00001AGeorgia#1910c2MIMcintosh000019Kentucky#2270c2WAWarren00001FNetherland#0040c2GEGelderland000018Illinois#0290c2COColes00001AMississippi#1370c2TETate000018Europe#0170c2ISIceland00001CPuertoRico#1470c2VQVieques00001BPennsylvania#1030c2PIPike000018Texas#0210c2BASBastrop000016Idaho#0390c2ELElmore000018Arkansas#1270c2SCScott000018Oregon#0410c2LILincoln000036NewfoundlandandLabrador#CA.NF.LA0c2LALabrador Region000031SaintKittsandNevis#060c2JCSaint John Capesterre000018Argentina#100c2JYJujuy000015Peru#070c2CALCallao000018Uruguay#070c2FDFlorida000014USA#AL0c2ALAlabama00001DTaiwan#210c2TCTaipei (City)00001AIndonesia#150c2LALampung00002BBritishColumbia#130c2FGFraser-Fort George00001BAlbania#470c2KUKuk&euml;s00001CColombia#240c2RISRisaralda000021EnglandRegion#010c2NENorth East000018Norway#090c2NONordland000019Iraq#140c2MAMays&#257;n000027Alberta#CA.AB.CR0c2CRCanadian Rockies000021Thailand#TH.CC0c2CCChachoengsao00001BMali#ML.TB0c2TBTombouctou00001EEthiopia#ET.DD0c2DDDire Dawa000016Congo#CG.PO0c2POPool00001CMorocco#MA.OR0c2OROriental000022Algeria#DZ.OB0c2OBOum el-Bouaghi000017Mali#ML.BA0c2BABamako00001CMacedonia#MK.OC0c2OCKocani000020Philippines#PH.LU0c2LULa Union000025CoteDivoire#CI.MV0c2MVMoyen-Cavally00001CRussia#RU.CV0c2CVChuvashia00001BChina2#CN.SH0c2SHShanghai00001DGuinea#GN.DI0c2DIDinguiraye00001EThailand#TH.UD0c2UDUttaradit00001ASyria#SY.QU0c2QUQuneitra00002CIran#IR.CM0c2CMChahar Mahall and Bakhtiari000021FranceDepartment#FR.AB0c2ABAube00001AWisconsin#1190c2TATaylor000029NewWorld#1340c2BHBosnia and Herzegovina000017Indiana#1810c2WHWhite00001FAfrica#0530c2WSWestern Sahara000017Kansas#1750c2SWSeward000019Missouri#1310c2MLMiller00001BCalifornia#0350c2LSLassen000019Texas#2030c2HRSHarrison000015Ohio#1650c2WAWarren00001ENetherland#0050c2GRGroningen00001ANebraska#1350c2PEPerkins000017Georgia#0110c2BNBanks000018Europe#0180c2IEIreland00001BMinnesota#0630c2JAJackson00001CKentucky#0470c2CHChristian00001AMichigan#0570c2GAGratiot000022NewCaledonia#NC.NO.KM0c2KMKoumac000031MadagascarRegions#MG.TL.AF0c2AFAtsimo-Andrefana00002ESaintKittsandNevis#070c2JFSaint John Figtree00001BArgentina#110c2LPLa Pampa000014Peru#080c2CUSCusco00001AUruguay#080c2LALavalleja00002AUSASouthEastRegion#450c2SCSouth Carolina000017Taiwan#220c2TTTaitung00002ABritishColumbia#140c2GVGreater Vancouver00001BAlbania#480c2LELezh&euml;000034Colombia#250c2SAPSan Andr&eacute;s and Providencia000021EnglandRegion#020c2NWNorth West00001ENorway#100c2NTNord-Trondelag00001EIraq#150c2NIN&#299;naw&#257;00001BMacedonia#MK.OD0c2ODOhrid000025Singapore#SG.NO0c2NONorth Singapore000018China2#CN.AH0c2AHAnhui000015Oregon#0430c2LNLinn000018Tennessee#0450c2DYDyer00001BMontana#1070c2WHWheatland00001BNewWorld#1350c2BGBulgaria00001CMaine#0010c2ANAndroscoggin000015Iowa#0490c2DADallas000017Africa#0540c2ZMZambia000015Texas#3850c2RELReal000017Indiana#0010c2ADAdams00001ENorthCarolina#0410c2COChowan000017Georgia#1930c2MAMacon00001DKentucky#2290c2WSWashington00001CNetherland#0060c2LILimburg000017Illinois#0310c2CKCook00001CMississippi#1390c2TPTippah000016Europe#0190c2ITItaly00001DPuertoRico#1490c2VLVillalba00001DPennsylvania#1050c2POPotter000017Texas#0230c2BAYBaylor000018Idaho#0410c2FRFranklin000019Arkansas#1290c2SESearcy000027NewCaledonia#NC.NO.KN0c2KNKon&eacute;00002CSaintKittsandNevis#080c2MCSaint Mary Cayon00001BArgentina#120c2LRLa Rioja00001CPuertoRico#010c2AJAdjuntas00001BPeru#090c2HUVHuancavelica00001AUruguay#090c2MAMaldonado000017Taiwan#230c2TYTaoyuan000025Indonesia#170c2NBWest Nusa Tenggara000028BritishColumbia#150c2KSKitimat-Stikine00001DAlbania#490c2SHShkod&euml;r00001CColombia#260c2SANSantander00001FScotlandRegion#780c2BOBorders00002FEnglandRegion#030c2YHYorkshire and the Humber000017Norway#110c2OPOppland000025ElSalvador#010c2AHAhuachap&aacute;n000018Iraq#160c2WAW&#257;sit000028Alberta#CA.AB.EA0c2EAEdmonton and Area000021FranceDepartment#FR.AD0c2ADAude000020SriLanka#LK.PR0c2PRPolonnaruwa000023Brunei#BN.BM0c2BMBrunei and Muara000020Philippines#PH.NC0c2NCCotabato00001ARussia#RU.VO0c2VOVologda00001DSamoa #WS.GE0c2GEGagaemauga000024Kiribati#KI.GI0c2GIGilbert Islands00001FGuyana#GY.BA0c2BABarima-Waini00001AMalawi#MW.KR0c2KRKaronga00002BFranceDepartment#FR.SE0c2SESeine et Marne000027NorthAmerica_WOCentral#0160c2MXMexico00001FWisconsin#1210c2TRTrempealeau00001ANewWorld#1360c2HYCroatia000019Indiana#1830c2WLWhitley000019Virginia#1250c2NENelson000019Africa#0550c2ZWZimbabwe000018Kansas#1770c2SNShawnee00001FMexico#0010c2AGAguascalientes00001EMissouri#1330c2MSMississippi000020California#0370c2LOLos Angeles000018Texas#2050c2HRTHartley000019Ohio#1670c2WSWashington000022Netherland#0070c2NONoord-Brabant000019Nebraska#1370c2PHPhelps000018Georgia#0130c2BWBarrow000017Europe#0200c2LVLatvia00001BMinnesota#0650c2KAKanabec000018Kentucky#0490c2CKClark00001CMichigan#0590c2HIHillsdale000016Iraq#170c2NAAn-Najaf000031SaintKittsandNevis#090c2PPSaint Paul Capesterre00001AArgentina#130c2MZMendoza00001DGrenada#010c2ANSaint Andrew000016Peru#100c2HUCHuanuco00001BUruguay#100c2MOMontevideo000025USASouthEastRegion#470c2TNTennessee000015Taiwan#240c2ILYilan000025Indonesia#180c2NTEast Nusa Tenggara00002ABritishColumbia#160c2KBKootenay Boundary00001CAlbania#500c2TRTiran&euml;000018Colombia#270c2SUCSucre00001FScotlandRegion#790c2CECentral000024EnglandRegion#040c2EMEast Midlands000014Norway#120c2OSOslo000022ElSalvador#020c2CACaba&ntilde;as000022Fiji#FJ.WE.NN0c2NNNadroga-Navosa00001ANigeria#NG.RI0c2RIRivers000028Philippines#PH.MN0c2MNMisamis Oriental000029Philippines#PH.ND0c2NDNegros Occidental000024CentralAmerica2#CE.BB0c2BBBarbados00001AMalawi#MW.KS0c2KSKasungu00001BMalawi#MW.LI0c2LILilongwe000019China2#CN.TA0c2TATaiwan000019Guinea#GN.DL0c2DLDalaba000018Oregon#0450c2MAMalheur00001BTennessee#0470c2FAFayette000018Montana#1090c2WIWibaux000021NewWorld#1370c2CZCzech Republic000019Maine#0030c2ARAroostook000014Iowa#0510c2DVDavis000017Africa#0560c2GMGambia00001ATexas#3870c2REDRed River000017Indiana#0030c2ALAllen000020Mexico#0020c2BABaja California00001CNorthCarolina#0430c2CYClay000019Georgia#1950c2MDMadison000018Kentucky#2310c2WYWayne000022Netherland#0080c2NHNoord-Holland00001BIllinois#0330c2CFCrawford000020Mississippi#1410c2TITishomingo00001EEurope#0210c2LILiechtenstein00001CPuertoRico#1510c2YBYabucoa000021Pennsylvania#1070c2SCSchuylkill000014Texas#0250c2BEEBee000017Idaho#0430c2FEFremont00001CArkansas#1310c2SBSebastian000033PrinceEdwardIsland#CA.PE.CS0c2CSCharlotte's Shore000020ElSalvador#030c2CHChalatenango000024Iraq#180c2SDSal&#257;h ad-D&#299;n000032SaintKittsandNevis#100c2PLSaint Paul Charlestown00001BArgentina#140c2MNMisiones00001APuertoRico#030c2ADAguada00001CGrenada#020c2DASaint David000012Peru#110c2ICAIca000020Uruguay#110c2PAPaysand&uacute;000016Taiwan#250c2YLYunlin000029BritishColumbia#170c2MWMount Waddington00001BAlbania#510c2VLVlor&euml;000019Colombia#280c2TOLTolima00002DScotlandRegion#800c2DGDumfries and Galloway000024EnglandRegion#050c2WMWest Midlands00001ENorway#130c2OT&Oslash;stfold000025SaoTomeandPrincipe#ST.LO0c2LOLobata000021Burma#MM.YA0c2YAYangon Division00001FLesotho#LS.TT0c2TTThaba-Tseka000023Philippines#PH.NE0c2NENueva Ecija00001BTanzania#TZ.IR0c2IRIringa00001DVietnam#VN.VL0c2VLVinh Long00001APalau#PW.KA0c2KAKayangel00001AWisconsin#1230c2VEVernon00001ANewWorld#1380c2DKDenmark00001BVirginia#1270c2NKNew Kent000016Africa#0570c2CGCongo000019Kansas#1790c2SDSheridan000024Mexico#0030c2BCBaja California Sur00001BMissouri#1350c2MIMoniteau00001BCalifornia#0390c2MAMadera000018Texas#2070c2HSKHaskell000022Virginia#6700c2HOHopewell (City)000014Ohio#1690c2WYWayne00001FNetherland#0090c2OVOverijssel000019Nebraska#1390c2PIPierce000018Georgia#0150c2BTBartow00001AEurope#0220c2LTLithuania00001DMinnesota#0670c2KNKandiyohi000017Kentucky#0510c2CYClay00001BMichigan#0610c2HOHoughton000018Norway#140c2RORogaland000024ElSalvador#040c2CUCuscatl&aacute;n000032SaintKittsandNevis#110c2PBSaint Peter Basseterre000021Argentina#150c2NQNeuqu&eacute;n00001DGrenada#030c2GESaint George000014Peru#120c2JUNJunin00001AUruguay#120c2RNRio Negro000020BritishColumbia#180c2NANanaimo000022Colombia#290c2VACValle del Cauca00001CScotlandRegion#810c2FIFife00001BEnglandRegion#060c2EAEast000023FranceDepartment#FR.AG0c2AGAriege000017Nauru#NR.BU0c2BUBuada000025CaymanIslands#KY.BT0c2BTBodden Town00001DThailand#TH.BR0c2BRBuri Ram000023Somalia#SO.WO0c2WOWoqooyi Galbeed00001BAlgeria#DZ.OG0c2OGOuargla000022PapuaNewGuinea#PG.WE0c2WEWestern00001BRussia#RU.VR0c2VRVoronezh00001ALibya#LY.WA0c2WAAl Wahah000019Malawi#MW.LK0c2LKLikoma00001BMalawi#MW.MA0c2MAMachinga000022Massachusetts#0010c2BABarnstable000017Oregon#0470c2MRMarion00001CTennessee#0490c2FEFentress00001DMontana#1110c2YSYellowstone00001ANewWorld#1390c2EEEstonia00001AMaine#0050c2CUCumberland000018Oklahoma#0010c2ADAdair000016Iowa#0530c2DEDecatur00001AAfrica#0580c2MUMauritius000017Texas#3890c2REVReeves00001DIndiana#0050c2BABartholomew000019Mexico#0040c2CACampeche000021NorthCarolina#0450c2CVCleveland000018Georgia#1970c2MRMarion00001AKentucky#2330c2WBWebster00001CNetherland#0100c2UTUtrecht00001DIllinois#0350c2CMCumberland00001CMississippi#1430c2TUTunica00001BEurope#0230c2LULuxembourg00001APuertoRico#1530c2YUYauco00001DPennsylvania#1090c2SNSnyder000015Texas#0270c2BELBell00001ENewHampshire#0010c2BEBelknap000013Idaho#0450c2GEGem000019Arkansas#1330c2SVSevier00001DEnglandRegion#070c2LOLondon000020Norway#150c2SOSogn og Fjordane00001FElSalvador#050c2LILa Libertad000030SaintKittsandNevis#120c2TLSaint Thomas Lowland00001CArgentina#160c2RNRio Negro00001DPuertoRico#050c2ALAguadilla00001BGrenada#040c2JOSaint John00001APeru#130c2LALLa Libertad000017Uruguay#130c2RVRivera000015USA#AR0c2ARArkansas000023Indonesia#210c2STCentral Sulawesi000027BritishColumbia#190c2NONorth Okanagan000020Colombia#300c2VAUVaup&eacute;s000020ScotlandRegion#820c2GPGrampian000025PolandCounties#PL.WN.EM0c2WEMElblag000024FranceDepartment#FR.AH0c2AHArdeche00001FMacedonia#MK.NS0c2NSNovo Selo000022Philippines#PH.MQ0c2MQMarinduque00001AUganda#UG.PL0c2PLPallisa00001FSamoa #WS.GI0c2GIGagaifomauga000019Thailand#TH.TT0c2TTTrat000019Wisconsin#1250c2VIVilas00001ANewWorld#1400c2FIFinland000018Kansas#1810c2SHSherman000018Mexico#0050c2CHChiapas000019Missouri#1370c2MRMonroe00001ACalifornia#0410c2MRMarin000015Texas#2090c2HYSHays000017Ohio#1710c2WIWilliams00001CNetherland#0110c2ZEZeeland000019Nebraska#1410c2PLPlatte00001AGeorgia#0170c2BHBen hill00001AEurope#0240c2MKMacedonia00001BMinnesota#0690c2KIKittson00001AKentucky#0530c2CNClinton000018Michigan#0630c2HUHuron000025MadagascarRegions#MG.AS.SV0c2SVSava000021EnglandRegion#080c2SESouth East00002BNorway#160c2STS&oslash;r-Tr&oslash;ndelag00001AElSalvador#060c2PALa Paz000036SaintKittsandNevis#130c2TMSaint Thomas Middle Island000018Argentina#170c2SASalta00001BGrenada#050c2MASaint Mark000019Peru#140c2LAMLambayeque000016Uruguay#140c2RORocha000026Indonesia#220c2SGSouth East Sulawesi000029BritishColumbia#200c2NRNorthern Rockies00001AColombia#310c2CIDVichada000020ScotlandRegion#830c2HIHighland000026NovaScotia#CA.NS.MD0c2MDMarine Drive00001AFiji#FJ.CE.NM0c2NMNamosi000020FranceDepartment#FR.AI0c2AIAin00001CVietnam#VN.DN0c2DNDong Nai000020Kazakhstan#KZ.QO0c2QOQyzylorda000018Nigeria#NG.AB0c2ABAbia00001ASenegal#SN.FK0c2FKFatick00001DUzbekistan#UZ.KH0c2KHXorazm000028Philippines#PH.MR0c2MROriental Mindoro00001DSerbia#RS.ZC0c2ZCWest Backa00001AMalawi#MW.MC0c2MCMchinji000020Iran#IR.WA0c2WAWest Azarbaijan000021Massachusetts#0030c2BEBerkshire000017Oregon#0490c2MOMorrow00001CTennessee#0510c2FRFranklin000019NewWorld#1410c2FRFrance000018Maine#0070c2FRFranklin00001AOklahoma#0030c2ALAlfalfa000017Iowa#0550c2DLDelaware000016Alaska#2200c2SISitka000017Delaware#0010c2KEKent000018Texas#3910c2REFRefugio000018Indiana#0070c2BEBenton00001AMexico#0060c2CIChihuahua000020NorthCarolina#0470c2CUColumbus00001CGeorgia#1990c2MEMeriwether000016Kansas#0010c2ALAllen00001AKentucky#2350c2WHWhitley000021Netherland#0120c2ZUZuid-Holland000019Illinois#0370c2DEDeKalb00001BMississippi#1450c2UNUnion000016Europe#0250c2MTMalta00001FPennsylvania#1110c2SOSomerset000016Texas#0290c2BEXBexar00001ENewHampshire#0030c2CACarroll000017Idaho#0470c2GOGooding000018Arkansas#1350c2SHSharp000021EnglandRegion#090c2SWSouth West000018Norway#170c2TETelemark000023ElSalvador#070c2UNLa Uni&oacute;n00001BArgentina#180c2SJSan Juan000020PuertoRico#070c2ABAguas Buenas00001EGrenada#060c2PASaint Patrick000013Peru#150c2LIMLima000016Uruguay#150c2SASalto000022Honduras#010c2ATAtl&aacute;ntida00002DBritishColumbia#210c2OSOkanagan-Similkameen00001BColombia#320c2CASCasanare00001FScotlandRegion#840c2LOLothian000021SierraLeone#SL.SO.BN0c2BNBonthe000020Iran#IR.EA0c2EAEast Azarbaijan00001CVietnam#VN.DO0c2DODac Nong00001DSriLanka#LK.PX0c2PXPuttalam00001DMauritania#MR.TG0c2TGTagant00002CPapuaNewGuinea#PG.WH0c2WHWestern Highlands000021HongKong#HK.WT0c2WTWong Tai Sin00001FPapuaNewGuinea#PG.EG0c2EGEnga00001BYemen#YE.HD0c2HDHadramawt00001FLibya#LY.WD0c2WDWadi al Hayat000021FranceDepartment#FR.TA0c2TATarn00001CWisconsin#1270c2WAWalworth00001ANewWorld#1420c2DEGermany00001EVirginia#1310c2NTNorthampton000016Kansas#1830c2SMSmith000025Mexico#0070c2COCoahuila de Zaragoza00001DMissouri#1390c2MYMontgomery00001DCalifornia#0430c2MIMariposa000019Texas#2110c2HEPHemphill000013Ohio#1730c2WOWood000017Nebraska#1430c2POPolk000019Georgia#0190c2BIBerrien000018Europe#0260c2MDMoldova00001FMinnesota#0710c2KOKoochiching00001DKentucky#0550c2CDCrittenden000019Michigan#0650c2INIngham000026MadagascarRegions#MG.AV.IT0c2ITItasy000015Norway#180c2TRTroms000022ElSalvador#080c2MOMoraz&aacute;n000032SaintKittsandNevis#150c2TPTrinity Palmetto Point00001BArgentina#190c2SLSan Luis000015Peru#160c2LORLoreto000019Uruguay#160c2SJSan Jose000017USA#CA0c2CACalifornia000027Croatia#010c2BBBjelovarsko-Bilogorska00001BHonduras#020c2CHCholuteca00001FIndonesia#240c2SBWest Sumatra000024BritishColumbia#220c2PRPeace River00001FColombia#330c2CUNCundinamarca00001DSierraLeone#SL.SO.BO0c2BOBo000025PolandCounties#PL.PK.KM0c2PKMKrosno00001DNunavut#CA.NU.QK0c2QKBaffin00001BBotswana#BW.GH0c2GHGhanzi00001CNauru#NR.DE0c2DEDenigomodu000019Brunei#BN.TU0c2TUTutong000019Liberia#LR.SI0c2SISinoe00001BNigeria#NG.AD0c2ADAdamawa000025Panama#PA.KM0c2KMKuna de Madungandi00001DMacedonia#MK.NV0c2NVNovatsi000029Philippines#PH.MT0c2MTMountain Province00002CPapuaNewGuinea#PG.EH0c2EHEastern Highlands000017Uganda#UG.OY0c2OYOyam00002BFranceDepartment#FR.SL0c2SLSaone et Loire000032FranceDepartment#FR.TB0c2TBTerritoire de Belfort00001FMassachusetts#0050c2BRBristol00001AOregon#0510c2MUMultnomah00002ENorthAmerica_WOCentral#0230c2USUnited States00001ATennessee#0530c2GIGibson000019NewWorld#1430c2GRGreece000017Maine#0090c2HAHancock000018Oklahoma#0050c2ATAtoka000019Iowa#0570c2DMDes Moines00001DDelaware#0030c2NENew castle000018Texas#3930c2ROBRoberts00001BIndiana#0090c2BLBlackford000017Mexico#0080c2CLColima00001ENorthCarolina#0490c2CNCraven000018Georgia#2010c2MLMiller000019Kansas#0030c2ANAnderson000018Kentucky#2370c2WOWolfe00001AIllinois#0390c2DWDe Witt00001EMississippi#1470c2WAWalthall000017Europe#0270c2MCMonaco00001FPennsylvania#1130c2SUSullivan000017Texas#0310c2BLABlanco00001FNewHampshire#0050c2CHCheshire000015Idaho#0490c2IDIdaho000018Arkansas#1370c2STStone000029NewCaledonia#NC.SU.DU0c2DUDumb&eacute;a000022NewCaledonia#NC.SU.FA0c2FAFarino00001ANorway#190c2VAVest-Agder00001EElSalvador#090c2SMSan Miguel00001DArgentina#200c2SCSanta Cruz00001CPuertoRico#090c2AIAibonito00001CPeru#170c2MDDMadre de Dios000018Uruguay#170c2SOSoriano000021Croatia#020c2SPBrodsko-Posavska00001EHonduras#030c2CLCol&oacute;n000021USANorthWestRegion#160c2IDIdaho000025BritishColumbia#230c2POPowell River000032Colombia#340c2DCBogot&aacute; (Distrito Capital)000025PolandCounties#PL.MA.KM0c2MKMKrakow000026FrenchGuiana#GF.SL.PA0c2PAPapaichton000023FranceDepartment#FR.AL0c2ALAllier00001CKyrgyzstan#KG.NA0c2NANaryn00001FThailand#TH.CM0c2CMChiang Mai00001CTunisia#TN.KR0c2KRKairouan00002BFranceDepartment#FR.SM0c2SMSeine Maritime00001FThailand#TH.UN0c2UNUdon Thani000018Syria#SY.TA0c2TATartus000018Michigan#0670c2IOIonia00002ANorthAmerica_WOCentral#0240c2GLGreenland00001CWisconsin#1290c2WSWashburn00001ANewWorld#1440c2HUHungary000021Virginia#1330c2NHNorthumberland00001CSouthDakota#0030c2AUAurora000019Kansas#1850c2SFStafford000018Mexico#0090c2DUDurango000019Missouri#1410c2MGMorgan00001ECalifornia#0450c2MEMendocino00001ATexas#2130c2HNDHenderson000016Ohio#1750c2WDWyandot00001DNebraska#1450c2RWRed Willow000016Georgia#0210c2BBBibb00001BEurope#0280c2MOMontenegro000021Minnesota#0730c2LQLac Qui Parle00001DKentucky#0570c2CMCumberland000018Norway#200c2VEVestfold000020ElSalvador#100c2SSSan Salvador00001BArgentina#210c2SFSanta Fe000016USA#TN0c2TNTennessee000017Peru#180c2MOQMoquegua000022Uruguay#180c2TATacuaremb&oacute;00002CCroatia#030c2DNDubrova&#269;ko-Neretvanska00001BHonduras#040c2CMComayagua000017Ontario#010c2ALAlgoma000020Indonesia#260c2SUNorth Sumatra00002FBritishColumbia#240c2SQSkeena-Queen Charlotte000021Colombia#350c2BOLBol&iacute;var000023ScotlandRegion#870c2SCStrathclyde00003DNorthWestTerritories#CA.NT.WR0c2WRWaterfalls Valley (Route)00002ANovaScotia#CA.NS.LR0c2LRLighthouse Route00002CFranceDepartment#FR.AM0c2AMAlpes Maritimes00001DThailand#TH.CN0c2CNChai Nat00001DSaudiArabia#SA.JZ0c2JZJizan000018Chad#TD.SA0c2SASalamat00001FKazakhstan#KZ.QS0c2QSQostanay00001DMauritania#MR.AS0c2ASAssaba00001DZimbabwe#ZW.BU0c2BUBulawayo00001BMalawi#MW.MG0c2MGMangochi00001DTunisia#TN.KS0c2KSKasserine000017Oman#OM.MA0c2MAMuscat000018Arkansas#1390c2UNUnion00001DMassachusetts#0070c2DUDukes000015Oregon#0530c2POPolk000019Tennessee#0550c2GLGiles00001ANewWorld#1450c2ISIceland000018Maine#0110c2KEKennebec000019Oklahoma#0070c2BEBeaver000018Iowa#0590c2DIDickinson000019Delaware#0050c2SUSussex00001ATexas#3950c2ROERobertson00001CNewJersey#0010c2ATAtlantic000017Indiana#0110c2BOBoone00001BMexico#0100c2GUGuanajuato000022NorthCarolina#0510c2CBCumberland000019Kansas#0050c2ATAtchison00001BKentucky#2390c2WDWoodford00001AIllinois#0410c2DODouglas00001CMississippi#1490c2WRWarren000025WorldwithCountries#1000c2KHCambodia00001CEurope#0290c2NLNetherlands000022Pennsylvania#1150c2SQSusquehanna000017Texas#0330c2BORBorden00001BNewHampshire#0070c2COCoos000019Idaho#0510c2JEJefferson00001DElSalvador#110c2SASanta Ana000026Argentina#220c2SESantiago del Estero000021PuertoRico#110c2ANA&ntilde;asco000014Peru#190c2PASPasco00001FUruguay#190c2TTTreinta y Tres000019Croatia#040c2ISIstarska00001EHonduras#050c2CPCop&aacute;n000016Ontario#020c2BRBrant000026Poland#720c2DSDolno&#347;l&#261;skie000022Cuba#010c2PRPinar del R&iacute;o00002ABritishColumbia#250c2SLSquamish-Lillooet000020Colombia#360c2BOYBoyac&aacute;00001FScotlandRegion#880c2TATayside000022FrenchGuiana#GF.CY.RK0c2RKRegina000025FranceDepartment#FR.AN0c2ANArdennes00002DFranceDepartment#FR.BD0c2BDBouches du Rhone00001DSomalia#SO.GA0c2GAGalguduud000027CentralAmerica2#CE.SV0c2SVEl Salvador00001EMacedonia#MK.PE0c2PEPetrovec00001ANepal#NP.JA0c2JAJanakpur000017UK7#UK.EN0c2ENEngland00001AChina2#CN.TJ0c2TJTianjin000022FranceDepartment#FR.SO0c2SOSomme000021Guinea#GN.DU0c2DUDubr&eacute;ka00001AGuinea#GN.FA0c2FAFaranah00001AKentucky#0590c2DADaviess000018Michigan#0690c2ISIosco00001EWisconsin#1310c2WHWashington00001ANewWorld#1460c2IRIreland00001BVirginia#1350c2NWNottoway00001CSouthDakota#0050c2BEBeadle000018Kansas#1870c2STStanton000019Mexico#0110c2GEGuerrero00001DMissouri#1430c2NMNew Madrid00001BCalifornia#0470c2MCMerced000018Texas#2150c2HIDHidalgo000023Virginia#6780c2LXLexington (City)00001DNebraska#1470c2RIRichardson00001AGeorgia#0230c2BLBleckley000022WorldwithCountries#1010c2CNChina000017Europe#0300c2NONorway000018Minnesota#0750c2LALake00001FElSalvador#120c2SVSan Vicente000023Argentina#230c2TFTierra del Fuego000014Peru#200c2PIUPiura000020Croatia#050c2KAKarlova&#269;ka00001FHonduras#060c2CRCort&eacute;s000016Ontario#030c2BUBruce000022Poland#730c2KPKujawsko-Pomorskie000021Cuba#020c2CHCiudad de La Habana000019Indonesia#280c2MAMaluku000020BritishColumbia#260c2STStikine000019Colombia#370c2CALCaldas000025ScotlandRegion#890c2WIWestern Isles000018Libya#LY.DR0c2DRDarnah000022SolomonIsland#SB.CH0c2CHChoiseul00001AChina2#CN.BJ0c2BJBeijing00001DVietnam#VN.DT0c2DTDong Thap00001DThailand#TH.CP0c2CPChumphon00001AEurope2#EU.KO0c2KOKosovo000022Tibet#TI.QP0c2QPQamdo Prefecture00001ENewHampshire#0090c2GRGrafton000016Idaho#0530c2JRJerome00001CArkansas#1410c2VBVan Buren00001DMassachusetts#0090c2ESEssex000018Oregon#0550c2SHSherman00001CTennessee#0570c2GRGrainger000018NewWorld#1470c2ITItaly000014Maine#0130c2KNKnox00001AOklahoma#0090c2BCBeckham000016Iowa#0610c2DUDubuque000019Texas#3970c2ROCRockwall00001ANewJersey#0030c2BEBergen000017Indiana#0130c2BRBrown000018Mexico#0120c2HIHidalgo000021NorthCarolina#0530c2CKCurrituck00001AGeorgia#2050c2MTMitchell000017Kansas#0070c2BABarber000019Illinois#0430c2DPDuPage000020Mississippi#1510c2WSWashington000027WorldwithCountries#1020c2TPEast Timor000017Europe#0310c2PLPoland00001CPennsylvania#1170c2TITioga000017Texas#0350c2BOSBosque00001DElSalvador#130c2SOSonsonate000021Argentina#240c2TMTucum&aacute;n00001BPuertoRico#130c2ACArecibo000013Peru#210c2PUNPuno000014USA#AZ0c2AZArizona000036Croatia#060c2KKKoprivni&#269;ko-Kri&#382;eva&#269;ka000023Honduras#070c2EPEl Para&iacute;so00001DOntario#040c2CKChatham-Kent000023Poland#740c2LD&#321;&oacute;dzkie000016Cuba#030c2MAMatanzas00001FIndonesia#290c2MUNorth Maluku000027BritishColumbia#270c2SCSunshine Coast00001CColombia#380c2MAGMagdalena00002BFrenchGuiana#GF.CY.RM0c2RMRemire Montjoly00001DFiji#FJ.CE.NT0c2NTNaitasiri000034FranceDepartment#FR.AP0c2APAlpes de Haute Provence000023BurkinaFaso#BF.SE0c2SES&eacute;no00002BPapuaNewGuinea#PG.WN0c2WNWest New Britain000029Guyana#GY.UD0c2UDUpper Demerara-Berbice00001DKazakhstan#KZ.AA0c2AAAlmaty00001ASerbia#RS.ZJ0c2ZJZajecar000018Yemen#YE.HJ0c2HJHajjah00001BBurundi#BI.KI0c2KIKirundo00001AMalawi#MW.MJ0c2MJMulanje00002CFranceDepartment#FR.TG0c2TGTarn et Garonne000025Thailand#TH.UR0c2URUbon Ratchathani00001BKentucky#0610c2EDEdmonson000017Michigan#0710c2IRIron00001CWisconsin#1330c2WUWaukesha000019NewWorld#1480c2LVLatvia000019Virginia#1370c2OROrange00001DSouthDakota#0070c2BNBennett000018Kansas#1890c2SVStevens000018Mexico#0130c2JAJalisco000019Missouri#1450c2NENewton00001ACalifornia#0490c2MOModoc000015Texas#2170c2HILHill000023Virginia#6800c2LYLynchburg (City)000017Nebraska#1490c2RORock00001AGeorgia#0250c2BEBrantley000024WorldwithCountries#1030c2GEGeorgia000019Europe#0320c2PTPortugal000025Minnesota#0770c2LWLake of the Woods000023ElSalvador#140c2USUsulut&aacute;n000019Peru#220c2SAMSan Martin000023Croatia#070c2KZKrapinsko-Zagorska00002AHonduras#080c2FMFrancisco Moraz&aacute;n000019Ontario#050c2COCochrane000019Poland#750c2LULubelskie000021Cuba#040c2IJIsla de la Juventud00001CIndonesia#300c2JRWest Java000028BritishColumbia#280c2TNThompson-Nicola00001FThailand#TH.CR0c2CRChiang Rai00001ANigeria#NG.TA0c2TATaraba00001DMacedonia#MK.PH0c2PHPehcevo00002BPapuaNewGuinea#PG.EN0c2ENEast New Britain000018Uganda#UG.RA0c2RARakai00001DMalawi#MW.NA0c2NANkhata Bay000023NewHampshire#0110c2HBHillsborough000018Idaho#0550c2KOKootenai00001DArkansas#1430c2WAWashington000020Massachusetts#0110c2FRFranklin00001AOregon#0570c2TITillamook00001ATennessee#0590c2GEGreene000020NewWorld#1490c2LNLiechtenstein000017Maine#0150c2LILincoln000019Oklahoma#0110c2BLBlaine000014Iowa#0630c2EMEmmet000018Texas#3990c2RUNRunnels00001ENewJersey#0050c2BUBurlington000019Indiana#0150c2CACarroll000017Mexico#0140c2MEMexico00001CNorthCarolina#0550c2DADare000018Georgia#2070c2MOMonroe000017Kansas#0090c2BTBarton000018Illinois#0450c2EDEdgar00001BMississippi#1530c2WYWayne000022WorldwithCountries#1040c2INIndia000018Europe#0330c2RORomania00001CPennsylvania#1190c2UNUnion000016Texas#0370c2BOIBowie00001APuertoRico#150c2ARArroyo000014Peru#230c2TACTacna000023Croatia#080c2LSLi&#269;ko-Senjska000020Honduras#090c2GDGracias a Dios000019Ontario#060c2DUDufferin000018Poland#760c2LBLubuskie00001BCuba#050c2CMCamag&uuml;ey000021Indonesia#310c2SANorth Sulawesi000028PolandCounties#PL.KP.WL0c2KWLWloclawek000021FrenchGuiana#GF.CY.RO0c2RORoura000026FrenchGuiana#GF.CY.SE0c2SESaint Elie000022CaymanIslands#KY.WB0c2WBWest Bay000020Thailand#TH.UT0c2UTUthai Thani000018Congo#CG.SA0c2SASangha000026BurkinaFaso#BF.SG0c2SGSangui&eacute;000018Algeria#DZ.OR0c2OROran00001BBhutan#BT.SG0c2SGShemgang00001DNigeria#NG.AK0c2AKAkwa Ibom00001ANigeria#NG.BA0c2BABauchi000018Somalia#SO.GE0c2GEGedo00001DMacedonia#MK.OS0c2OSOslomej000022Kazakhstan#KZ.AC0c2ACAlmaty City00001BSerbia#RS.ZL0c2ZLZlatibor000015Yemen#YE.IB0c2IBIbb000019China2#CN.SX0c2SXShanxi00002EFranceDepartment#FR.SS0c2SSSeine-Saint-Denis00001AKentucky#0630c2ELElliott00001BMichigan#0730c2IAIsabella00001BWisconsin#1350c2WPWaupaca00001CNewWorld#1500c2LTLithuania000017Virginia#1390c2PAPage00001FSouthDakota#0090c2BHBon Homme000017Kansas#1910c2SUSumner000024Mexico#0150c2MIMichoacan de Ocampo00001AMissouri#1470c2NONodaway000019California#0510c2MNMono000018Texas#2190c2HOCHockley000019Nebraska#1510c2SASaline000018Georgia#0270c2BOBrooks000015Brazil#0010c2ACAcre000026WorldwithCountries#1050c2IDIndonesia00001BEurope#0340c2SMSan Marino00001CMinnesota#0790c2LSLe Sueur000026YukonTerritory#CA.YT.KL0c2KLKlondike000015Peru#240c2TUMTumbes000020Croatia#090c2MEMe&#273;imurska000021Honduras#100c2INIntibuc&aacute;000017Ontario#070c2DRDurham000020Poland#770c2MAMa&#322;opolskie000020Indonesia#320c2SLSouth Sumatra00002CMacau#MO.MA.NF0c2NFNossa Senhora de Fatima000022FranceDepartment#FR.AS0c2ASAisne000020Thailand#TH.CT0c2CTChanthaburi000021Europe2#EU.LI0c2LILiechtenstein000027Philippines#PH.NR0c2NRNegros Oriental000019Vanuatu#VU.SE0c2SEShefa00001CTunisia#TN.ME0c2MEMedenine000023FranceDepartment#FR.ST0c2STSarthe00001EPennsylvania#1210c2VEVenango000019Texas#0390c2BRZBrazoria000020NewHampshire#0130c2MEMerrimack000015Idaho#0570c2LALatah000018Arkansas#1450c2WHWhite000014Ohio#0010c2ADAdams00001FMassachusetts#0130c2HAHampden000019Oregon#0590c2UMUmatilla00001ATennessee#0610c2GUGrundy00001DNewWorld#1510c2LULuxembourg000016Maine#0170c2OXOxford000018Oklahoma#0130c2BRBryan000016Iowa#0650c2FAFayette000015Texas#4010c2RUSRusk00001ANewJersey#0070c2CACamden000016Indiana#0170c2CSCass000018Mexico#0160c2MOMorelos000020NorthCarolina#0570c2DVDavidson00001CGeorgia#2090c2MGMontgomery000018Kansas#0110c2BBBourbon000022Virginia#6830c2MNManassas (City)00001AIllinois#0470c2EWEdwards00001DMississippi#1550c2WBWebster000018Brazil#0020c2ALAlagoas000021WorldwithCountries#1060c2IAIran000017Europe#0350c2CSSerbia00001ASlovenia#010c2PMPomurska000015USA#VA0c2VAVirginia00001FPuertoRico#170c2BCBarceloneta000016Peru#250c2UCAUcayali000027Croatia#100c2OBOsje&#269;ko-Baranjska00002AHonduras#110c2IBIslas de la Bah&iacute;a000016Ontario#080c2ELElgin00001BPoland#780c2MZMazowieckie000023Cuba#070c2CACiego de &Aacute;vila000019Indonesia#330c2BTBanten000029FrenchGuiana#GF.CY.SG0c2SGSaint Georges000015Iran#IR.FA0c2FAFars00001ESriLanka#LK.RN0c2RNRatnapura000018Liberia#LR.BG0c2BGBong000026Philippines#PH.NS0c2NSNorthern Samar000020Tanzania#TZ.KL0c2KLKilimanjaro00001EMicronesia#FM.PO0c2POPohnpei000017Palau#PW.KO0c2KOKoror000019Kentucky#0650c2ESEstill00001AMichigan#0750c2JAJackson00001CWisconsin#1370c2WRWaushara00001CNewWorld#1520c2MKMacedonia00001AVirginia#1410c2PTPatrick00001FSouthDakota#0110c2BRBrookings000017Kansas#1930c2THThomas000018Mexico#0170c2NANayarit000019Missouri#1490c2OROregon00001DCalifornia#0530c2MTMonterey000017Alaska#0500c2BEBethel000015Texas#2210c2HODHood000018Nebraska#1530c2SRSarpy000017Georgia#0290c2BRBryan000016Brazil#0030c2APAmapa000022WorldwithCountries#1070c2JPJapan000019Europe#0360c2SKSlovakia00001BMinnesota#0810c2LILincoln000027NewCaledonia#NC.SU.YA0c2YAYat&eacute;00001BSlovenia#020c2PDPodravska00001FPeru#260c2LPLima Metropolitan00002ECroatia#110c2PSPo&#382;e&scaron;ko-Slavonska000018Honduras#120c2LPLa Paz000016Ontario#090c2ESEssex000018Poland#790c2OPOpolskie000018Cuba#080c2CFCienfuegos00001CIndonesia#340c2GOGorontalo00001DSwaziland#SZ.MA0c2MAManzini000021SolomonIsland#SB.CN0c2CNCentral00001BQatar#QA.RA0c2RAAr Rayyan00002AFranceDepartment#FR.CA0c2CACotes d'Armor00001ANigeria#NG.SO0c2SOSokoto00001AGhana#GH.NP0c2NPNorthern00001DMauritania#MR.TR0c2TRTrarza000022SaudiArabia#SA.MD0c2MDAl Madinah000023Bhutan#BT.SJ0c2SJSamdrup Jongkhar000021SriLanka#LK.AD0c2ADAnuradhapura00001BNigeria#NG.AN0c2ANAnambra000023Panama#PA.KW0c2KWKuna de Wargandi00001BTanzania#TZ.KM0c2KMKigoma000023FranceDepartment#FR.SV0c2SVSavoie00001DPennsylvania#1230c2WAWarren000017Texas#0410c2BAZBrazos000021NewHampshire#0150c2RGRockingham000015Idaho#0590c2LELemhi00001BArkansas#1470c2WOWoodruff000014Ohio#0030c2ALAllen000021Massachusetts#0150c2HPHampshire000016Oregon#0610c2UNUnion00001BTennessee#0630c2HAHamblen000018NewWorld#1530c2MTMalta000019Maine#0190c2PEPenobscot000018Oklahoma#0150c2CACaddo000032Australia2#ACT0c2ACTAustralian Capital Territory000014Iowa#0670c2FLFloyd000026Alaska#2320c2SHSkagway-Hoonah-Angoon000017Texas#4030c2SABSabine00001CNewJersey#0090c2CMCape May000017Indiana#0190c2CLClark00001BMexico#0180c2NUNuevo Leon00001DNorthCarolina#0590c2DIDavie000018Georgia#2110c2MNMorgan000016Kansas#0130c2BRBrown000027Virginia#6850c2MPManassas Park (City)00001CIllinois#0490c2EFEffingham00001FMississippi#1570c2WLWilkinson000019Brazil#0040c2AMAmazonas000027WorldwithCountries#1080c2KZKazakhstan000019Europe#0370c2SLSlovenia000026MadagascarRegions#MG.TL.AY0c2AYAnosy000034MadagascarRegions#MG.FI.VF0c2VFVatovavy Fitovinany000020Slovenia#030c2KOKoro&scaron;ka000025NewWorld#010c2AGAntigua and Barbuda000020PuertoRico#190c2BQBarranquitas000023Croatia#120c2PGPrimorsko-Goranska000019Honduras#130c2LELempira00001AOntario#100c2FRFrontenac00001CPoland#800c2PKPodkarpackie000014Cuba#090c2GRGranma000022Indonesia#350c2BBBangka-Belitung000032PolandCounties#PL.LB.GM0c2LGMGorzow Wielkopolski000025FrenchGuiana#GF.CY.SI0c2SISinnamary00001CSyria#SY.SU0c2SUAs Suwayda000024FranceDepartment#FR.AV0c2AVAveyron000022CaymanIslands#KY.EE0c2EEEast End00001DBurkinaFaso#BF.TA0c2TATapoa00001CBhutan#BT.TA0c2TATashigang00001BRwanda#RW.SU0c2SUSouthern000019Nigeria#NG.BE0c2BEBenue000031CentralAmerica2#CE.TT0c2TTTrinidad &amp; Tobago00001EHongKong#HK.YL0c2YLYuen Long00001DMauritania#MR.BR0c2BRBrakna00002FCentralAfricanRepublic#CF.HK0c2HKHaute -Kotto000023CentralAmerica2#CE.BS0c2BSBahamas000025PapuaNewGuinea#PG.ES0c2ESEast Sepik00001ALaos#LA.KH0c2KHKhammouan00001ATunisia#TN.MH0c2MHMahdia000018Minnesota#0830c2LYLyon00001AKentucky#0670c2FAFayette00001CMichigan#0770c2KMKalamazoo00001DWisconsin#1390c2WNWinnebago00001ANewWorld#1540c2MVMoldova00001FVirginia#1430c2PIPittsylvania00001BSouthDakota#0130c2BWBrown000016Kansas#1950c2TRTrego000017Mexico#0190c2OAOaxaca000018Missouri#1510c2OSOsage000019California#0550c2NANapa000018Texas#2230c2HOPHopkins00001BNebraska#1550c2SUSaunders000019Georgia#0310c2BCBulloch000016Brazil#0050c2BABahia00002AWorldwithCountries#1090c2KPKorea (north)000016Europe#0380c2ESSpain00001BSlovenia#040c2SASavinjska000019NewWorld#020c2BSBahamas000012USA#TX0c2TXTexas000021USA#DC0c2DCDistrict of Columbia000028Croatia#130c2SB&Scaron;ibensko-Kninska00001CHonduras#140c2OCOcotepeque00001DAustralia#QU0c2QUQueensland000022Australia#SA0c2SASouth Australia000020Ontario#110c2GSGreater Sudbury000019Poland#810c2PDPodlaskie00001FCuba#100c2GUGuant&aacute;namo000018Indonesia#360c2PAPapua00001AEurope2#EU.MC0c2MCMonaco000022Cambodia#KH.KA0c2KASihanoukville000019Chad#TD.TA0c2TATandjile000023BurkinaFaso#BF.BA0c2BABal&eacute;00001EMacedonia#MK.PN0c2PNPlasnica000025Philippines#PH.NV0c2NVNueva Vizcaya00002AWorldwithCountries#1100c2KRKorea (south)000017Europe#0390c2SESweden000021Pennsylvania#1250c2WSWashington000019Texas#0430c2BREBrewster000020NewHampshire#0170c2STStrafford000015Idaho#0610c2LWLewis000017Arkansas#1490c2YEYell000016Ohio#0050c2ASAshland000021Massachusetts#0170c2MIMiddlesex000018Oregon#0630c2WAWallowa00001CTennessee#0650c2HMHamilton000017Italy#0010c2ABAbruzzo000019NewWorld#1550c2MCMonaco00001BMaine#0210c2PIPiscataquis00001BOklahoma#0170c2CNCanadian000017Iowa#0690c2FRFranklin00001ETexas#4050c2SAUSan Augustine00001ENewJersey#0110c2CUCumberland000016Indiana#0210c2CYClay000017Mexico#0200c2PUPuebla00001ENorthCarolina#0610c2DUDuplin000018Georgia#2130c2MUMurray000017Kansas#0150c2BUButler00001AIllinois#0510c2FAFayette00001DMississippi#1590c2WNWinston000016Brazil#0060c2CECeara00001ASlovenia#050c2ZSZasavska00001ANewWorld#030c2BBBarbados000022PuertoRico#210c2BYBayam&oacute;n00002DCroatia#140c2SMSisa&#269;ko-Moslava&#269;ka000019Honduras#150c2OLOlancho00001BCostaRica#010c2ALAlajuela000015Ontario#120c2GRGrey000019Poland#820c2PMPomorskie000017Cuba#110c2LHLa Habana000017Indonesia#370c2RIRiau000019Guinea#GN.GA0c2GAGaoual00001FThailand#TH.CY0c2CYChaiyaphum00001BEurope2#EU.MD0c2MDMoldova00001ESenegal#SN.ZG0c2ZGZiguinchor000018Cambodia#KH.KB0c2KBKep00001CBurkinaFaso#BF.SM0c2SMSoum000019Bhutan#BT.SM0c2SMSamchi000020GuineaBissau#GW.QU0c2QUQuinara000022BurkinaFaso#BF.BB0c2BBBougouriba00001EDjibouti#DJ.TA0c2TATadjourah00002ECentralAfricanRepublic#CF.HM0c2HMHaut-Mbomou000016Chad#TD.BA0c2BABatha000019Nepal#NP.KA0c2KAKarnali00001DGabon#GA.HO0c2HOHaut-Ogooue000027WorldwithCountries#1110c2KGKyrgyzstan00001CEurope#0400c2CHSwitzerland00001AMinnesota#0850c2MLMcLeod00001AKentucky#0690c2FLFleming00001BMichigan#0790c2KAKalkaska000018Wisconsin#1410c2WOWood00001AItaly#0020c2BABasilicata00001DNewWorld#1560c2MGMontenegro00001BVirginia#1450c2POPowhatan00001BSouthDakota#0150c2BUBrule00001AKansas#1970c2WBWabaunsee000025Mexico#0210c2QUQueretaro de Arteaga000018Missouri#1530c2OZOzark00001BCalifornia#0570c2NENevada000018Texas#2250c2HOUHouston00001FNebraska#1570c2SBScotts Bluff000017Georgia#0330c2BUBurke000021Brazil#0070c2DFDistrito Federal000021Slovenia#060c2PSSpodnjeposavska000018NewWorld#040c2BZBelize000015USA#CO0c2COColorado000015USA#DE0c2DEDelaware000014Japan#100c2GUGumma000025Croatia#150c2SDSplitsko-Dalmatinska000026Honduras#160c2SBSanta B&aacute;rbara00001ACostaRica#020c2CACartago00001AOntario#130c2HAHaldimand000021Poland#830c2SL&#346;l&#261;skie00001CCuba#120c2HOHolgu&iacute;n000021Indonesia#380c2SNSouth Sulawesi00001AEritrea#ER.MA0c2MAMaekel000027Kazakhstan#KZ.SK0c2SKSouth Kazakhstan00003CCentralAmerica2#CE.VC0c2VCSt. Vincent &amp; the Grenadines00001CMacedonia#MK.PP0c2PPPrilep00001ABurundi#BI.KR0c2KRKaruzi00001AMalawi#MW.NI0c2NINtchisi000021WorldwithCountries#1120c2LALaos000018Europe#0410c2UAUkraine00001CPennsylvania#1270c2WYWayne000018Texas#0450c2BRIBriscoe00001FNewHampshire#0190c2SUSullivan000017Idaho#0630c2LILincoln000018Ohio#0070c2AHAshtabula000021Massachusetts#0190c2NTNantucket000016Oregon#0650c2WSWasco00001BTennessee#0670c2HNHancock000018Italy#0030c2CACalabria00001ENewWorld#1570c2NLNetherlands000019Maine#0230c2SASagadahoc000019Oklahoma#0190c2CRCarter000016Iowa#0710c2FEFremont00001CTexas#4070c2SAJSan Jacinto000019NewJersey#0130c2ESEssex000019Indiana#0230c2CIClinton00001DMexico#0220c2QRQuintana Roo00001ENorthCarolina#0630c2DRDurham00001AGeorgia#2150c2MSMuscogee00001CNewZealand#F100c2TASTasman000016Kansas#0170c2CSChase000017Illinois#0530c2FOFord00001FMississippi#1610c2YAYalobusha00001FBrazil#0080c2ESEspirito Santo000027Slovenia#070c2DOJugovzhodna Slovenija000018NewWorld#050c2CACanada00001DPuertoRico#230c2CRCabo Rojo000018Japan#110c2HIHiroshima000021Croatia#160c2VAVara&#382;dinska000017Honduras#170c2VAValle00001CBulgaria#380c2EBlagoevgrad00001DCostaRica#030c2GUGuanacaste00001BOntario#140c2HLHaliburton000023USANorthWestRegion#300c2MTMontana000028Poland#840c2SK&#346;wi&#281;tokrzyskie000017Cuba#130c2LTLas Tunas000022Indonesia#390c2IBWest Irian Jaya000025PolandCounties#PL.LU.ZM0c2LZMZamosc00002BNewBrunswick#CA.NB.AC0c2ACAcadian Coastal00001ATunisia#TN.NB0c2NBNabeul00001BVietnam#VN.YB0c2YBYen Bai000018Liberia#LR.BM0c2BMBomi00001BTanzania#TZ.KR0c2KRKagera000016Brazil#0090c2GOGoias000025WorldwithCountries#1130c2MYMalaysia00001FEurope#0420c2UKUnited Kingdom00001CMinnesota#0870c2MAMahnomen000018Kentucky#0710c2FOFloyd000017Michigan#0810c2KNKent000018Italy#0040c2CMCampania000019NewWorld#1580c2NONorway000020Virginia#1470c2PEPrince Edward00001DSouthDakota#0170c2BFBuffalo000018Kansas#1990c2WAWallace000020Mexico#0230c2SASan Luis Potosi00001BMissouri#1550c2PMPemiscot00001BCalifornia#0590c2OROrange000017Texas#2270c2HOWHoward000026Virginia#6900c2MVMartinsville (City)000019Nebraska#1590c2SESeward000017Georgia#0350c2BSButts000026MadagascarRegions#MG.AS.DI0c2DIDiana000023WestEuropeanRegion#010c2BEBelgium000023Slovenia#080c2LJOsrednjeslovenska00001CNewWorld#060c2CRCosta Rica000017Japan#120c2HOHokkaido00002BCroatia#170c2VPViroviti&#269;ko-Podravska000016Honduras#180c2YOYoro000017Bulgaria#390c2ABurgas00001ACostaRica#040c2HEHeredia000017Ontario#150c2HTHalton000028Poland#850c2WNWarmi&#324;sko-Mazurskie000024Cuba#140c2SSSancti Sp&iacute;ritus00001FIndonesia#400c2KRRiau Islands00001CKuwait#KW.JA0c2JAAl Jahrah000026SaoTomeandPrincipe#ST.MZ0c2MZMe Zoxi000031DemocraticRepublicoftheCongo#CD.EQ0c2EQEquateur00001DPanama#PA.LS0c2LSLos Santos00001ATanzania#TZ.LI0c2LILindi00001DYemen#YE.HU0c2HUAl Hudaydah000019Yemen#YE.JA0c2JAAl Jawf00001CUganda#UG.RK0c2RKRukungiri00001DMalawi#MW.NK0c2NKNkhotakota000019Brazil#0100c2MAMaranhao000025WorldwithCountries#1140c2MNMongolia00001DEurope#0430c2VAVatican City000023Pennsylvania#1290c2WEWestmoreland000017Texas#0470c2BROBrooks000017Idaho#0650c2MAMadison000024Virginia#5100c2AXAlexandria (City)000015Ohio#0090c2ATAthens00001FMassachusetts#0210c2NONorfolk000018Wyoming#0010c2ALAlbany00001BOregon#0670c2WHWashington00001CTennessee#0690c2HRHardeman00001EItaly#0050c2EMEmilia-Romagna000019NewWorld#1590c2PLPoland000018Maine#0250c2SOSomerset00001BOklahoma#0210c2CHCherokee000015Iowa#0730c2GRGreene00001DTexas#4090c2SAPSan Patricio00001ENewJersey#0150c2GLGloucester00001AIndiana#0250c2CRCrawford000018Mexico#0240c2SISinaloa000021NorthCarolina#0650c2EDEdgecombe000018Georgia#2170c2NENewton00001BKansas#0190c2CQChautauqua00001BIllinois#0550c2FRFranklin00001BMississippi#1630c2YZYazoo000024YukonTerritory#CA.YT.KU0c2KUKluane000020Indonesia#410c2SRWest Sulawesi000022WestEuropeanRegion#020c2FRFrance00001BSlovenia#090c2GOGorenjska000016NewWorld#070c2CUCuba00001APuertoRico#250c2CGCaguas000014Japan#130c2HYHyogo000025Croatia#180c2VSVukovarsko-Srijemska000019Bulgaria#400c2TXDobrich000019Ontario#160c2HMHamilton00001DPoland#860c2WPWielkopolskie00001ECuba#150c2SCSantiago de Cuba00001CSerbia#RS.JA0c2JAJablanica000019Vanuatu#VU.SN0c2SNSanma00001BTunisia#TN.MN0c2MNManouba000024Guinea#GN.FO0c2FOFor&eacute;cariah00001ATuvalu#TV.VI0c2VIVaitupu000018Iran#IR.ES0c2ESEsfahan000025FranceDepartment#FR.BR0c2BRBas Rhin000021FranceDepartment#FR.CH0c2CHCher00001ESaudiArabia#SA.MK0c2MKMakkah00001DKazakhstan#KZ.AM0c2AMAqmola00001BBurundi#BI.MA0c2MAMakamba000023Guyana#GY.DE0c2DEDemerara-Mahaica000019Georgia#0370c2CLCalhoun00001CBrazil#0110c2MTMato Grosso000022WorldwithCountries#1150c2NPNepal000017Europe#0440c2CYCyprus00001CMinnesota#0890c2MRMarshall00001BKentucky#0730c2FRFranklin00001BMichigan#0830c2KEKeweenaw000019Florida#0010c2ALAlachua00001EWestVirginia#0010c2BABarbour000025Italy#0060c2FIFriuli-Venezia Giulia00001BNewWorld#1600c2PTPortugal000017Asia3#0020c2AMArmenia000020Virginia#1490c2PGPrince George00001BSouthDakota#0190c2BTButte00001BKansas#2010c2WSWashington000017Mexico#0250c2SOSonora000018Missouri#1570c2PRPerry00001BCalifornia#0610c2PLPlacer000019Texas#2290c2HUDHudspeth00001BNebraska#1610c2SHSheridan000026WestEuropeanRegion#030c2LULuxembourg00002ASlovenia#100c2NONotranjsko-kra&scaron;ka00001ANewWorld#080c2DMDominica000011USA#UT0c2UTUtah000016Japan#140c2IBIbaraki000019Croatia#190c2ZDZadarska000019Bulgaria#410c2EBGabrovo00001FCostaRica#060c2LILim&oacute;n000019Ontario#170c2HSHastings000022Poland#870c2ZPZachodniopomorskie000019Cuba#160c2VCVilla Clara000015Iran#IR.YA0c2YAYazd00001AUganda#UG.AB0c2ABKaabong00001AKuwait#KW.HW0c2HWHawalli000020SriLanka#LK.TC0c2TCTrincomalee000024Ethiopia#ET.GA0c2GAGambela peoples000024Cambodia#KH.KG0c2KGKampong Chhnang00001EBurkinaFaso#BF.SR0c2SRSourou000024Mauritania#MR.TZ0c2TZTiris Zemmour000033CentralAmerica2#CE.VG0c2VGVirgin Islands, British00001FMacedonia#MK.PT0c2PTProbistip000022CentralAmerica2#CE.BZ0c2BZBelize000019Tanzania#TZ.MA0c2MAMara000019Malawi#MW.MW0c2MWMwanza000023Brazil#0120c2MSMato Grosso do Sul000025WorldwithCountries#1160c2PKPakistan000017Europe#0450c2TKTurkey00001EPennsylvania#1310c2WOWyoming000016Texas#0490c2BOWBrown000018Idaho#0670c2MIMinidoka000017Ohio#0110c2AUAuglaize000020Massachusetts#0230c2PLPlymouth00001AWyoming#0030c2BHBig Horn000018Oregon#0690c2WEWheeler00001ATennessee#0710c2HDHardin000015Italy#0070c2LALazio00001ANewWorld#1610c2RORomania000015Maine#0270c2WAWaldo00001AOklahoma#0230c2COChoctaw000015Iowa#0750c2GUGrundy00001AAsia3#0030c2AZAzerbaijan000024Alaska#2400c2SFSoutheast Fairbanks000019Texas#4110c2SASSan Saba00001ANewJersey#0170c2HUHudson000019Indiana#0270c2DADaviess000018Mexico#0260c2TATabasco00001FNorthCarolina#0670c2FOForsyth000018Georgia#2190c2OCOconee000019Kansas#0210c2CKCherokee000019Illinois#0570c2FUFulton000022WestEuropeanRegion#040c2MCMonaco000020Slovenia#110c2SPGori&scaron;ka000020NewWorld#090c2DODominican Rep.000017USA#WA0c2WAWashington000019PuertoRico#270c2CACamuy000018USA#CT0c2CTConnecticut000017Japan#150c2ISIshikawa000020Croatia#200c2ZGZagreba&#269;ka00001DBulgaria#420c2COGrad Sofiya00001DCostaRica#070c2PUPuntarenas000016Ontario#180c2HUHuron00001ESerbia#RS.JC0c2JCSouth Backa000019Vanuatu#VU.TF0c2TFTafea00001APalau#PW.ME0c2MEMelekeok000017Uganda#UG.AC0c2ACApac000019Benin#BJ.AK0c2AKAtacora000021Seychelles#SC.SY0c2SYSeychelles00001DEurope2#EU.LT0c2LTLithuania00001BCambodia#KH.KH0c2KHKratie00001FBurkinaFaso#BF.SS0c2SSSissili00001FSriLanka#LK.BC0c2BCBatticaloa00001EPanama#PA.NB0c2NBNgobe Bugle000022HongKong#HK.YT0c2YTYan Tsim Mong000030CentralAfricanRepublic#CF.HS0c2HSMambere-Kadei00001ATanzania#TZ.MB0c2MBMbeya00001ANebraska#1630c2SMSherman000018Georgia#0390c2CMCamden00001DBrazil#0130c2MGMinas Gerais000028WorldwithCountries#1170c2PHPhilippines000017Europe#0460c2RURussia00001AMinnesota#0910c2MTMartin000019Kentucky#0750c2FUFulton000017Michigan#0850c2LKLake000017Florida#0030c2BABaker00001FWestVirginia#0030c2BEBerkeley000017Italy#0080c2LILiguria00001DNewWorld#1620c2SMSan Marino00001ESouthDakota#0210c2CACampbell000018Kansas#2030c2WHWichita00001BMexico#0270c2TMTamaulipas000019Missouri#1590c2PTPettis00001BCalifornia#0630c2PUPlumas00001CAlaska#0600c2BRBristol Bay000015Texas#2310c2HUNHunt000028Manitoba#CA.MB.IR0c2IRInterlake Region000027WestEuropeanRegion#050c2NLNetherlands000026Slovenia#120c2JPObalno-kra&scaron;ka00001DNewWorld#100c2SVEl Salvador000014Japan#160c2IWIwate00001CCroatia#210c2GZGrad Zagreb000018Bulgaria#430c2XHaskovo000022CostaRica#080c2SJSan Jos&eacute;00001FOntario#190c2KLKawartha Lakes00002BPolandCounties#PL.LB.ZM0c2BZMZielona Gora000027PolandCounties#PL.ZP.KM0c2ZKMKoszalin000017Guinea#GN.FR0c2FRFria00001BUganda#UG.AD0c2ADAdjumani000019Benin#BJ.AL0c2ALAlibori00001DSwaziland#SZ.LU0c2LULubombo00001ALibya#LY.GD0c2GDGhadamis000024DenmarkRegion#DK.SD0c2SDSyddanmark00001EEurope2#EU.LU0c2LULuxembourg00001DEurope2#EU.MK0c2MKMacedonia000022BurkinaFaso#BF.ST0c2STSanmatenga00001CSriLanka#LK.BD0c2BDBadulla00001BNamibia#NA.CA0c2CACaprivi000030CentralAmerica2#CE.VI0c2VIVirgin Islands, U.S.000026CentralAmerica2#CE.CR0c2CRCosta Rica00001DRussia#RU.ZB0c2ZBZabaykalsk000019Uganda#UG.RO0c2ROKaliro00001CUganda#UG.SE0c2SESembabule000021SolomonIsland#SB.WE0c2WEWestern00001BIllinois#0590c2GAGallatin000015Brazil#0140c2PAPara000023WorldwithCountries#1180c2RURussia00001BPennsylvania#1330c2YOYork000019Texas#0510c2BUSBurleson000019Idaho#0690c2NPNez perce000016Ohio#0130c2BEBelmont00001FMassachusetts#0250c2SUSuffolk00001AWyoming#0050c2CMCampbell000018Oregon#0710c2YAYamhill00001BTennessee#0730c2HWHawkins000019Italy#0090c2LOLombardia000019NewWorld#1630c2CSSerbia00001AMaine#0290c2WSWashington00001BOklahoma#0250c2CICimarron000016Iowa#0770c2GTGuthrie00001AAsia3#0050c2BDBangladesh00001BTexas#4130c2SCHSchleicher00001DNewJersey#0190c2HTHunterdon00001AIndiana#0290c2DEDearborn000018NewYork#0010c2ALAlbany000019Mexico#0280c2TLTlaxcala000020NorthCarolina#0690c2FRFranklin00001CGeorgia#2210c2OGOglethorpe000019Kansas#0230c2CNCheyenne000019NewWorld#110c2GDGrenada000024PuertoRico#290c2CVCan&oacute;vanas00002DBosniaHerzegovina#010c2BOBosanskopodrinjski000015Japan#170c2KAKagawa00001ABulgaria#440c2KKurdzhali000017Ontario#200c2KEKenora000016Fiji#FJ.WE.RA0c2RARa000025FranceDepartment#FR.VC0c2VCVaucluse00001CChina2#CN.CQ0c2CQChongqing000023FranceDepartment#FR.CL0c2CLCantal000022FranceDepartment#FR.DB0c2DBDoubs000024SaoTomeandPrincipe#ST.PA0c2PAPague00001AEurope2#EU.LV0c2LVLatvia000019Nigeria#NG.BO0c2BOBorno00001BSomalia#SO.HI0c2HIHiiraan00002FGuyana#GY.UT0c2UTUpper Takutu-Upper Essequibo00001AChad#TD.BI0c2BIWadi Fira00001BBurundi#BI.KY0c2KYKayanza000019Djibouti#DJ.AR0c2ARArta000019Malawi#MW.MZ0c2MZMzimba000018Nebraska#1650c2SISioux000018Brazil#0150c2PBParaiba000026WorldwithCountries#1190c2SGSingapore00001AMinnesota#0930c2MKMeeker00001BKentucky#0770c2GAGallatin000019Michigan#0870c2LPLapeer000021Virginia#5150c2BFBedford (City)000015Florida#0050c2BYBay00001CWestVirginia#0050c2BOBoone000016Italy#0100c2MAMarche00001BNewWorld#1640c2SKSlovakia000016Asia3#0060c2BTBhutan000021Virginia#1530c2PWPrince William000021SouthDakota#0230c2CMCharles Mix000019Alabama#0010c2AUAutauga000017Kansas#2050c2WLWilson00001FMexico#0290c2VEVeracruz-Llave000019Missouri#1610c2PHPhelps00001ECalifornia#0650c2RIRiverside00001BTexas#2330c2HUTHutchinson000022USACentralRegion#170c2ILIllinois00001BNewWorld#120c2GTGuatemala000038BosniaHerzegovina#020c2HNHercegova&#269;ko-neretvanski000018Japan#180c2KGKagoshima00001BAustralia#TA0c2TATasmania00001CBulgaria#450c2KHKyustendil000018Ontario#210c2LALambton00001CTunisia#TN.MS0c2MSMonastir000023FranceDepartment#FR.VD0c2VDVendee000019Oman#OM.MU0c2MUMusandam00002EFranceDepartment#FR.CM0c2CMCharente Maritime00001BTonga#TO.TT0c2TTTongatapu00001DCambodia#KH.KK0c2KKKoh Kong00001BSriLanka#LK.AP0c2APAmpara00001EAngola#AO.LN0c2LNLunda Norte000029BurkinaFaso#BF.BK0c2BKBoulkiemd&eacute;00001FPhilippines#PH.PL0c2PLPalawan00001DKazakhstan#KZ.AR0c2ARAtyrau00001ARussia#RU.YN0c2YNYamalia00001FDjibouti#DJ.AS0c2ASAli Sabieh000019Illinois#0610c2GRGreene000017Brazil#0160c2PRParana000026WorldwithCountries#1200c2LKSri Lanka000017Texas#0530c2BUNBurnet000016Idaho#0710c2ONOneida000014Ohio#0150c2BRBrown000021Massachusetts#0270c2WOWorcester000018Wyoming#0070c2CACarbon00001BTennessee#0750c2HYHaywood000016Italy#0110c2MOMolise00001BNewWorld#1650c2SISlovenia000014Maine#0310c2YOYork00001COklahoma#0270c2CECleveland000017Iowa#0790c2HAHamilton000016Asia3#0070c2BNBrunei000017Texas#4150c2SCUScurry00001ANewJersey#0210c2MEMercer000019Indiana#0310c2DCDecatur00001ANewYork#0030c2AEAllegany000018Mexico#0300c2YUYucatan00001ENorthCarolina#0710c2GAGaston00001AGeorgia#2230c2PDPaulding000016Kansas#0250c2CAClark000017NewWorld#130c2HTHaiti00001CPuertoRico#310c2CNCarolina00002ABosniaHerzegovina#030c2KSKanton Sarajevo000017Japan#190c2KNKanagawa000018Bulgaria#460c2OBLovech000017Ontario#220c2LNLanark000026CentralEuropeanRegion#010c2ATAustria00001AMacau#MO.IL.TA0c2TATaipa000028NewBrunswick#CA.NB.RV0c2RVRiver Valley000025FranceDepartment#FR.DD0c2DDDordogne000018Tonga#TO.VA0c2VAVava'u00001ABhutan#BT.TM0c2TMThimphu00001FBurkinaFaso#BF.BL0c2BLBoulgou00001BMacedonia#MK.RE0c2REResen000020Philippines#PH.PM0c2PMPampanga00001DKazakhstan#KZ.AS0c2ASAstana000020CentralAmerica2#CE.CU0c2CUCuba00001AUganda#UG.RR0c2RRMbarara000022Guyana#GY.CU0c2CUCuyuni-Mazaruni00001ANebraska#1670c2STStanton000019Georgia#0430c2CNCandler00001BBrazil#0170c2PEPernambuco000027WorldwithCountries#1210c2TJTajikistan00001EMinnesota#0950c2MIMille Lacs00001AKentucky#0790c2GRGarrard00001BMichigan#0890c2LLLeelanau00001AFlorida#0070c2BFBradford00001EWestVirginia#0070c2BRBraxton000018Italy#0120c2PIPiemonte000018NewWorld#1660c2ESSpain000017Asia3#0080c2MMBurma (00001AVirginia#1550c2PUPulaski00001BSouthDakota#0250c2CLClark000019Alabama#0030c2BABaldwin000018Kansas#2070c2WOWoodson00001AMexico#0310c2ZAZacatecas000017Missouri#1630c2PIPike00001FCalifornia#0670c2SASacramento000016Texas#2350c2IRIIrion00001EUSACentralRegion#190c2IAIowa00001ANewWorld#140c2HNHonduras00002ABosniaHerzegovina#040c2SRSrednjebosanski000014Japan#200c2KOKochi000018Bulgaria#470c2MMontana000024Ontario#230c2LGLeeds and Grenville00002CCentralEuropeanRegion#020c2CZCzechRepublic00001BSwitzerland#010c2AAAargau000037NorthWestTerritories#CA.NT.GS0c2GSGreat Slave Gateway000019Malawi#MW.NS0c2NSNsanje000024Tibet#TI.SP0c2SPShannan Prefecture000026FranceDepartment#FR.CO0c2COCote d'Or00001EEurope2#EU.MO0c2MOMontenegro000021Cambodia#KH.KM0c2KMKampong Cham00001CAlgeria#DZ.RE0c2RERelizane00001BBurkinaFaso#BF.BM0c2BMBam000022Philippines#PH.PN0c2PNPangasinan00001DKazakhstan#KZ.AT0c2ATAqtobe00001FGuineaBissau#GW.BA0c2BABafata00001AUganda#UG.SI0c2SISironko000029Guyana#GY.EB0c2EBEast Berbice-Corentyne000019Illinois#0630c2GUGrundy000016Brazil#0180c2PIPiaui000025WorldwithCountries#1220c2THThailand000019Texas#0550c2CALCaldwell000016Idaho#0730c2OWOwyhee000015Ohio#0170c2BTButler00001AWyoming#0090c2COConverse00001DTennessee#0770c2HSHenderson000016Italy#0130c2PUPuglia000019NewWorld#1670c2SESweden000017Oklahoma#0290c2CLCoal000016Iowa#0810c2HNHancock000018Asia3#0090c2KHCambodia00001CTexas#4170c2SHAShackelford00001DNewJersey#0230c2MIMiddlesex000019Indiana#0330c2DKDe Kalb000017NewYork#0050c2BRBronx000021Mexico#0320c2DIDistrito Federal00001DNorthCarolina#0730c2GTGates000017Georgia#2250c2PAPeach000015Kansas#0270c2CYClay000027MadagascarRegions#MG.MA.ML0c2MLMelaky000022Switzerland#020c2ARAusser-Rhoden000020USACentralRegion#200c2KSKansas000019NewWorld#150c2JMJamaica000021PuertoRico#330c2CTCata&ntilde;o000024BosniaHerzegovina#050c2TUTuzlanski000017Japan#210c2KUKumamoto00001CBulgaria#480c2PAPazardzhik000025Ontario#240c2LELennox and Addington000026CentralEuropeanRegion#030c2DEGermany00001DLibya#LY.YJ0c2YJYafran-Jadu000023FranceDepartment#FR.VG0c2VGVosges000017Uganda#UG.AI0c2AIAbim000017Nauru#NR.YA0c2YAYaren00001CBenin#BJ.AQ0c2AQAtlantique00001AVietnam#VN.HA0c2HAHa Tay00001BCambodia#KH.KN0c2KNKandal000019Bhutan#BT.TO0c2TOTongsa000024Liberia#LR.CM0c2CMGrand Cape Mount00001CSudan#SD.RN0c2RNRiver Nile00001ESudan#SD.SD0c2SDSouth Darfur000024CentralAmerica2#CE.DM0c2DMDominica000026Virginia#7000c2NNNewport News (City)000019Nebraska#1690c2THThayer000019Georgia#0450c2CRCarroll00001FBrazil#0190c2RJRio de Janeiro000029WorldwithCountries#1230c2TMTurkmenistan00001CMinnesota#0970c2MSMorrison000018Kentucky#0810c2GNGrant00001AMichigan#0910c2LELenawee000019Florida#0090c2BVBrevard00001DWestVirginia#0090c2BKBrooke000018Italy#0140c2SASardegna00001ENewWorld#1680c2CHSwitzerland000015Asia3#0100c2CNChina00001FVirginia#1570c2RPRappahannock00001ASouthDakota#0270c2CYClay000019Alabama#0050c2BRBarbour00001AKansas#2090c2WYWyandotte000019Missouri#1650c2PAPlatte00001FCalifornia#0690c2SNSan Benito000015Texas#2370c2JACJack000025Australia2#NSW0c2NSWNew South Wales000029NewCaledonia#NC.NO.OG0c2OGOu&eacute;goa000025Switzerland#030c2BLBasel-Landschaft000018NewWorld#160c2MXMexico000027BosniaHerzegovina#060c2USUnsko-sanski000014Japan#220c2KYKyoto000018Bulgaria#490c2PKPernik00001BOntario#250c2MAManitoulin000022USANorthWestRegion#410c2OROregon000028Slovakia#010c2BCBansk&aacute; Bystrica000026CentralEuropeanRegion#040c2HUHungary00001CLibya#LY.ZA0c2ZAAz Zawiyah000019Malawi#MW.NU0c2NUNtcheu00001BVietnam#VN.GL0c2GLGia Lai000024Morocco#MA.SM0c2SMSouss Massa Draa00001ESaudiArabia#SA.NJ0c2NJNajran000018Guinea#GN.YO0c2YOYomou00001ELaos#LA.LM0c2LMLouang Namtha00001BIllinois#0650c2HAHamilton000024Brazil#0200c2RNRio Grande do Norte000027WorldwithCountries#1240c2UZUzbekistan000018Texas#0570c2CAHCalhoun000017Idaho#0750c2PAPayette000021Virginia#5200c2BSBristol (City)000016Ohio#0190c2CACarroll000017Wyoming#0110c2CRCrook000019Tennessee#0790c2HEHenry000017Italy#0150c2SISicilia00001ANewWorld#1690c2UAUkraine00001BOklahoma#0310c2CMComanche000015Iowa#0830c2HRHardin000017Texas#4190c2SHEShelby00001CNewJersey#0250c2MOMonmouth00001AIndiana#0350c2DLDelaware000018NewYork#0070c2BOBroome00001ENorthCarolina#0750c2GRGraham000019Georgia#2270c2PCPickens000016Kansas#0290c2CDCloud000021SouthCarolina#0010c2ABAbbeville000020Switzerland#040c2BSBasel-Stadt00001BNewWorld#170c2NINicaragua000016USA#WI0c2WIWisconsin000019PuertoRico#350c2CYCayey000038BosniaHerzegovina#070c2ZAZapadnobosanska &#381;upanija000012Japan#230c2MIMie000018Bulgaria#500c2EHPleven00001AOntario#260c2MIMiddlesex00001CSlovakia#020c2BLBratislava00002CCentralEuropeanRegion#050c2LILiechtenstein00001DPalau#PW.NC0c2NCNgarchelong000016Iran#IR.GI0c2GIGilan000023FranceDepartment#FR.CR0c2CRCreuse00001FVietnam#VN.HC0c2HCHo Chi Minh00001BCambodia#KH.KP0c2KPKampot000020Morocco#MA.TD0c2TDTadla Azilal00001CAngola#AO.LS0c2LSLunda Sul00001FUzbekistan#UZ.NG0c2NGNamangan000029Mauritania#MR.DN0c2DNDakhlet Nouadhibou00002ECentralAmerica2#CE.DO0c2DODominican Republic000016Nepal#NP.KO0c2KOKosi00001CRussia#RU.YS0c2YSYaroslavl000019Nebraska#1710c2TOThomas000019Georgia#0470c2CSCatoosa000022Brazil#0210c2RSRio Grande do Sul000024WorldwithCountries#1250c2VNVietnam000019Minnesota#0990c2MWMower000019Kentucky#0830c2GVGraves00001DMichigan#0930c2LILivingston000019Florida#0110c2BWBroward00001DWestVirginia#0110c2CACabell000017Italy#0160c2TOToscana000021NewWorld#1700c2UKUnited Kingdom00001AAsia3#0120c2TPEast Timor00001BVirginia#1590c2RCRichmond00001FSouthDakota#0290c2COCodington000016Alabama#0070c2BIBibb000017Missouri#1670c2POPolk000023California#0710c2SBSan Bernardino00001FAlaska#0680c2DEDenali Borough000018Texas#2390c2JAKJackson000019Switzerland#050c2BEBern000018NewWorld#180c2PAPanama000014USA#VT0c2VTVermont000030BosniaHerzegovina#080c2ZDZeni&#269;ko-Dobojski000015Japan#240c2MYMiyagi000019Bulgaria#510c2PBPlovdiv000018Ontario#270c2MUMuskoka00001FSlovakia#030c2KIKo&scaron;ice000025CentralEuropeanRegion#060c2PLPoland000024MarshallIsland#MH.MH.JL0c2JLJaluit00001BSerbia#RS.KB0c2KBKolubara000017Iran#IR.ZA0c2ZAZanjan00001APalau#PW.ND0c2NDNgaraard000029FranceDepartment#FR.CS0c2CSCorse du Sud00001DVietnam#VN.HD0c2HDHai Duong000015Nauru#NR.EW0c2EWEwa000028DenmarkRegion#DK.SL0c2SLSj&aelig;lland000022Ethiopia#ET.HA0c2HAHarari people000022Comoros #KM.GC0c2GCGrande Comore00001AIllinois#0670c2HCHancock000019Brazil#0220c2RORondonia000023WorldwithCountries#1260c2TWTaiwan00001BNorthDakota#0010c2ADAdams000019Texas#0590c2CANCallahan000015Idaho#0770c2POPower000018Ohio#0210c2CHChampaign000019Wyoming#0130c2FRFremont00001BTennessee#0810c2HIHickman000023Italy#0170c2TRTrentino-Alto Adige00001FNewWorld#1710c2VAVatican City000019Oklahoma#0330c2CTCotton000017Iowa#0850c2HIHarrison000017Asia3#0130c2GEGeorgia000018Texas#4210c2SHRSherman00001ANewJersey#0270c2MRMorris000018Indiana#0370c2DUDubois00001DNewYork#0090c2CACattaraugus000021NorthCarolina#0770c2GNGranville000018Georgia#2290c2PEPierce000017Kansas#0310c2CFCoffey00001DSouthCarolina#0030c2AIAiken00001DSwitzerland#060c2FRFribourg000027NewWorld#190c2KNSt. Kitts &amp; Nevis000019PuertoRico#370c2CBCeiba000031BosniaHerzegovina#090c2ZP&#381;upanija Posavska000017Japan#250c2MAMiyazaki000019Bulgaria#520c2PPRazgrad000018Ontario#280c2NINiagara000017Slovakia#040c2NINitra000027CentralEuropeanRegion#070c2SKSlovakia00002BPolandCounties#PL.DS.JM0c2DJMJelenia Gora000019Uganda#UG.AM0c2AMAmuria000025FranceDepartment#FR.CT0c2CTCharente00001AKyrgyzstan#KG.OS0c2OSOsh000019Europe2#EU.MT0c2MTMalta00002BMorocco#MA.RZ0c2RZRabat Sale Zemmour Zaer000019Angola#AO.LU0c2LULuanda000019Angola#AO.NA0c2NANamibe00001FChad#TD.CG0c2CGChari-Baguirmi00001ELaos#LA.LP0c2LPLouangphabang000017Texas#2410c2JASJasper00001BNebraska#1730c2TUThurston00001AGeorgia#0490c2CHCharlton000018Brazil#0230c2RRRoraima000026WorldwithCountries#1270c2HKHong Kong00001AMinnesota#1010c2MUMurray00001AKentucky#0850c2GYGrayson000017Michigan#0950c2LULuce000019Florida#0130c2CACalhoun00001EWestVirginia#0130c2CHCalhoun000016Italy#0180c2UMUmbria000019NewWorld#1720c2CYCyprus000015Asia3#0140c2INIndia00001AVirginia#1610c2RNRoanoke00001CSouthDakota#0310c2CSCorson000018Alabama#0090c2BLBlount00001AMissouri#1690c2PLPulaski00001ECalifornia#0730c2SDSan Diego00001BAlaska#0700c2DIDillingham00001BSwitzerland#070c2GEGeneve00001BNewWorld#200c2LCSt. Lucia000041BosniaHerzegovina#100c2ZZ&#381;upanija Zapadnohercegova&#269;ka000015Japan#260c2NANagano000015Bulgaria#530c2PRuse00001AOntario#290c2NPNipissing00001FSlovakia#050c2PVPre&scaron;ov000027CentralEuropeanRegion#080c2SLSlovenia00002DNewBrunswick#CA.NB.AR0c2ARAppalachian Range000018Niger#NE.AG0c2AGAgadez00001ESerbia#RS.JN0c2JNSouth Banat000019Uganda#UG.BD0c2BDBudaka00001ASyria#SY.DI0c2DIDamascus000020Cambodia#KH.KS0c2KSKampong Spe00001ACapeVerde#CV.MA0c2MAMaio00001EAlgeria#DZ.SA0c2SASouk Ahras00001AAngola#AO.ML0c2MLMalanje000019Sudan#SD.RS0c2RSRed Sea000018Sudan#SD.SI0c2SISennar000019Kansas#0330c2CMComanche000021SouthCarolina#0050c2ALAllendale000019Illinois#0690c2HRHardin00001FBrazil#0240c2SCSanta Catarina000022WorldwithCountries#1280c2MOMacau00001CNorthDakota#0030c2BABarnes000018Texas#0610c2CAMCameron000018Idaho#0790c2SHShoshone000014Ohio#0230c2CLClark000018Wyoming#0150c2GOGoshen00001BTennessee#0830c2HOHouston00001DItaly#0190c2VAValle d'Aosta000019NewWorld#1730c2TKTurkey000018Oklahoma#0350c2CGCraig000014Iowa#0870c2HEHenry000019Asia3#0150c2IDIndonesia000016Texas#4230c2SMISmith000019NewJersey#0290c2OCOcean000019Indiana#0390c2ELElkhart000018NewYork#0110c2CYCayuga00001ENorthCarolina#0790c2GEGreene000016Georgia#2310c2PIPike00002ANorthAmerica#0010c2AGAntigua and Barbuda000021NewCaledonia#NC.IL.LI0c2LILifou000029NewCaledonia#NC.NO.PB0c2PBPou&eacute;bo00001BSwitzerland#080c2GLGlarus000022USACentralRegion#260c2MIMichigan000032NewWorld#210c2VCSt. Vincent &amp; the Grenadines00001APuertoRico#390c2CLCiales00002BBosniaHerzegovina#110c2RSRepublika Srpska000017Japan#270c2NGNagasaki000017Bulgaria#540c2HShumen000018Ontario#300c2NONorfolk00001FMontenegro#010c2ANAndrijevica000025Slovakia#060c2TCTren&#269;&iacute;n00002ACentralEuropeanRegion#090c2CHSwitzerland000020FrenchGuiana#GF.SL.SA0c2SASaul000028PolandCounties#PL.MA.NM0c2MNMNowy Sacz00001AFiji#FJ.EA.KD0c2KDKadavu000019Vanuatu#VU.TR0c2TRTorba000029FranceDepartment#FR.VM0c2VMVal-de-Marne00001DCameroon#CM.LT0c2LTLittoral000025FranceDepartment#FR.CV0c2CVCalvados00001CVietnam#VN.HG0c2HGHa Giang00001FEurope2#EU.NL0c2NLNetherlands000021Cambodia#KH.KT0c2KTKampong Thom00001BBurkinaFaso#BF.TU0c2TUTuy00002CMorocco#MA.TH0c2THTaza Al Hoceima Taounate000022Algeria#DZ.SB0c2SBSidi Bel Abbes00001BNigeria#NG.BY0c2BYBayelsa000019Nigeria#NG.DE0c2DEDelta00001DMacedonia#MK.RM0c2RMRosoman000023CoteDivoire#CI.SB0c2SBSud-Bandama00001BTexas#2430c2JEDJeff Davis000019Nebraska#1750c2VAValley000019Georgia#0510c2CAChatham00001ABrazil#0250c2SPSao Paulo000024WorldwithCountries#1290c2ALAlbania00001CMinnesota#1030c2NINicollet000018Kentucky#0870c2GEGreen00001BMichigan#0970c2MKMackinac00001BFlorida#0150c2CHCharlotte00001BWestVirginia#0150c2CLClay000020Scotland#0010c2ABAberdeenshire000016Italy#0200c2VEVeneto000019NewWorld#1740c2RURussia00001DVirginia#1630c2RKRockbridge00001CSouthDakota#0330c2CUCuster000019Alabama#0110c2BUBullock000019Missouri#1710c2PUPutnam00001ENorthAmerica#0020c2BSBahamas000022California#0750c2SFSan Francisco000024Switzerland#090c2GRGraub&uuml;nden000023USACentralRegion#270c2MNMinnesota000027NewWorld#220c2TTTrinidad &amp; Tobago000026Australia2#NT0c2NTNorthern Territory000013Japan#280c2NRNara00001ABulgaria#550c2CCSilistra00001FOntario#310c2NRNorthumberland000017Montenegro#020c2BABar000018Slovakia#070c2TATrnava000019Uganda#UG.TG0c2TGKitgum000023FranceDepartment#FR.VN0c2VNVienne000018Iran#IR.HD0c2HDHamadan000022FranceDepartment#FR.DM0c2DMDrome000032DemocraticRepublicoftheCongo#CD.HC0c2HCOrientale000019Congo#CG.BO0c2BOBouenza000019Gambia#GM.BJ0c2BJBanjul00001CMacedonia#MK.SD0c2SDDojran00001EMacedonia#MK.RN0c2RNRankovce000020Sudan#SD.SK0c2SKSouth Kurdufan00001BBhutan#BT.BU0c2BUBumthang00001ABhutan#BT.CK0c2CKChhukha000017Bhutan#BT.DA0c2DADaga00002FCentralAfricanRepublic#CF.KB0c2KBNana-Grebizi000026Chad#TD.BT0c2BTBorkou-Ennedi-Tibesti00001DTanzania#TZ.MO0c2MOMorogoro000021CoteDivoire#CI.SC0c2SCSud-Comoe000017Kansas#0350c2CLCowley000020SouthCarolina#0070c2ANAnderson00001CIllinois#0710c2HEHenderson000018Brazil#0260c2SESergipe000024WorldwithCountries#1300c2ADAndorra00001CNorthDakota#0050c2BEBenson000015Texas#0630c2CAPCamp000015Idaho#0810c2TETeton000017Ohio#0250c2CEClermont00001DWyoming#0170c2HSHot Springs00001DTennessee#0850c2HPHumphreys000018Scotland#0020c2ANAngus000019Italy#0210c2SMSanmarino00001CNewWorld#1750c2AUAustralia000018Oklahoma#0370c2CKCreek000015Iowa#0890c2HOHoward00001ATexas#4250c2SOMSomervell00001BNewJersey#0310c2PAPassaic000019Indiana#0410c2FAFayette00001CNewYork#0130c2CHChautauqua000020NorthCarolina#0810c2GUGuilford000016Georgia#2330c2POPolk00001DIreland#0010c2CACeatharlach00001FNorthAmerica#0030c2BBBarbados000027NewCaledonia#NC.IL.MA0c2MAMar&eacute;00002CNewCaledonia#NC.NO.PD0c2PDPoindimi&eacute;000021Switzerland#100c2IRInner-Rhoden000017Canada#010c2ABAlberta00001FNewWorld#230c2USUnited States000019PuertoRico#410c2CDCidra000016Japan#290c2NINiigata000018Bulgaria#560c2CHSliven000017Ontario#320c2OTOttawa00001AMontenegro#030c2BEBerane00001DSlovakia#080c2ZI&#381;ilina000019Uganda#UG.SR0c2SRSoroti00001EMacedonia#MK.AD0c2ADAerodrom00001BMalawi#MW.PH0c2PHPhalombe000027FranceDepartment#FR.VO0c2VOVal d'Oise00002AGuinea#GN.GU0c2GUGu&eacute;ck&eacute;dou000019Uganda#UG.BG0c2BGBugiri000018Benin#BJ.BO0c2BOBorgou000020Cyprus2#CY.GC0c2GCGreek Cyprus000019Iran#IR.GO0c2GOGolestan000019Algeria#DZ.SD0c2SDSaida00001ANepal#NP.MA0c2MAMahakali00001FPapuaNewGuinea#PG.GU0c2GUGulf000019Burundi#BI.NG0c2NGNgozi00001ATexas#2450c2JEFJefferson00001DNebraska#1770c2WAWashington00001FGeorgia#0530c2CCChattahoochee00001ABrazil#0270c2TOTocantins000024WorldwithCountries#1310c2ATAustria00001AMinnesota#1050c2NONobles00001AKentucky#0890c2GUGreenup000019Michigan#0990c2MBMacomb000018Florida#0170c2CICitrus000020WestVirginia#0170c2DODoddridge000019Scotland#0030c2ARArgyll000017NewWorld#1760c2FJFiji00001DVirginia#1650c2RGRockingham00001DSouthDakota#0350c2DADavison000018Alabama#0130c2BTButler000018Missouri#1730c2RSRalls00001FIreland#0020c2CVCabh&aacute;n00001DNorthAmerica#0040c2BZBelize000020California#0770c2SJSan Joaquin00001BSwitzerland#110c2LULuzern000020Canada#020c2BCBritish Columbia000022USACentralRegion#290c2MOMissouri00001BNewWorld#240c2GLGreenland000013Japan#300c2OIOita000022Australia#SW0c2SWNew South Wales000019Bulgaria#570c2CMSmolyan000017Ontario#330c2OXOxford000020Montenegro#040c2BPBijelo Polje00002BFranceDepartment#FR.VP0c2VPVille de Paris000018Benin#BJ.CF0c2CFCouffo000019Libya#LY.GR0c2GRGharyan00001AEurope2#EU.NO0c2NONorway00001AMauritius#MU.MO0c2MOMoka00001FNigeria#NG.CR0c2CRCross River00001DBurkinaFaso#BF.BW0c2BWBanwa00001DAlgeria#DZ.AD0c2ADAin Defla00001FGuineaBissau#GW.CA0c2CACacheu000019Kansas#0370c2CRCrawford00001FSouthCarolina#0090c2BABamberg000018Illinois#0730c2HNHenry00001ABelgium#0100c2BRBrussels000024WorldwithCountries#1320c2BYBelarus00001ENorthDakota#0070c2BIBillings000017Texas#0650c2CARCarson00001AIdaho#0830c2TFTwin falls000016Ohio#0270c2CIClinton000019Wyoming#0190c2JOJohnson000025Europewithcountries#0010c2ALAlbania00001BTennessee#0870c2JAJackson00001BScotland#0040c2AYAyrshire00001BNewWorld#1770c2KIKiribati000019Oklahoma#0390c2CSCuster000017Iowa#0910c2HUHumboldt000015Asia3#0190c2JPJapan000016Texas#4270c2STAStarr000019NewJersey#0330c2SASalem000017Indiana#0430c2FLFloyd000019NewYork#0150c2CEChemung00001FNorthCarolina#0830c2HAHalifax000019Georgia#2350c2PLPulaski00001DIreland#0030c2CLCl&aacute;r00001DNorthAmerica#0050c2CACanada000019Montenegro#050c2BUBudva000024Switzerland#120c2NENeuch&acirc;tel000018Canada#030c2MBManitoba00001BNewWorld#250c2ARArgentina000019PuertoRico#430c2COCoamo000018Bahamas#010c2AKAcklins000016Japan#310c2OKOkayama000017Bulgaria#580c2CSofiya00001COntario#340c2PSParry Sound000024SierraLeone#SL.NO.KD0c2KDKoinadugu00001DDjibouti#DJ.DB0c2DBDjibouti000024EquatorialGuinea#GQ.AN0c2ANAnnobon00001AIran#IR.HG0c2HGHormozgan000024FranceDepartment#FR.CZ0c2CZCorreze000019Algeria#DZ.SF0c2SFSetif000020Bhutan#BT.TY0c2TYTashi Yangtse00001DCongo#CG.BR0c2BRBrazzaville00001FGuineaBissau#GW.BL0c2BLBolama000019Texas#2470c2JIHJim Hogg000021Virginia#7100c2NONorfolk (City)000018Nebraska#1790c2WYWayne00001BGeorgia#0550c2CGChattooga000020Belgium#0110c2VBVlaams-Brabant000024WorldwithCountries#1330c2BEBelgium00001AMinnesota#1070c2NRNorman00001AKentucky#0910c2HAHancock00001BMichigan#1010c2MSManistee000016Florida#0190c2CLClay00001BMississippi#0010c2ADAdams000025Europewithcountries#0020c2ADAndorra00001EWestVirginia#0190c2FAFayette00001DScotland#0050c2BABanffshire000023NewWorld#1780c2MHMarshall Islands00001AVirginia#1670c2RURussell000019SouthDakota#0370c2DYDay000019Alabama#0150c2CACalhoun00001BMissouri#1750c2RORandolph00001AIreland#0040c2COCorcaigh000021NorthAmerica#0060c2CRCosta Rica000024California#0790c2SPSan Luis Obispo00001BMontenegro#060c2CECetinje00001FMiddleEast#010c2AFAfghanistan00001ESwitzerland#130c2NINidwalden00001DCanada#040c2NBNew Brunswick000022USACentralRegion#310c2NENebraska000019NewWorld#260c2BOBolivia00001EBahamas#020c2BRBerry Islands000016Japan#320c2ONOkinawa00001EBulgaria#590c2CTStara Zagora000015Ontario#350c2PEPeel000022FrenchGuiana#GF.CY.CM0c2CMCamopi000020FranceDepartment#FR.VR0c2VRVar00001EPalau#PW.NL0c2NLNgeremlengui00001BUganda#UG.AT0c2ATAmolatar00001BUganda#UG.BJ0c2BJButaleja000016Libya#LY.GT0c2GTGhat00001DSriLanka#LK.VA0c2VAVavuniya000021Somalia#SO.JD0c2JDJubbada Dhexe000017Yemen#YE.LA0c2LALahij00001FGuineaBissau#GW.BM0c2BMBiombo000018Kansas#0390c2DCDecatur000020SouthCarolina#0110c2BRBarnwell00001BIllinois#0750c2IRIroquois000033WorldwithCountries#1340c2BHBosnia and Herzegovina00001FNorthDakota#0090c2BOBottineau000015Texas#0670c2CASCass000016Idaho#0850c2VAValley000025Virginia#5300c2BVBuena Vista (City)000019Ohio#0290c2COColumbiana00001ENewMexico#0010c2BEBernalillo000019Wyoming#0210c2LALaramie000025Europewithcountries#0030c2ATAustria00001DTennessee#0890c2JEJefferson00001FScotland#0060c2BEBerwickshire00001DNewWorld#1790c2FMMicronesia00001BOklahoma#0410c2DEDelaware000012Iowa#0930c2IDIda00001AAsia3#0210c2KZKazakhstan000019Texas#4290c2STEStephens00001CNewJersey#0350c2SOSomerset00001AIndiana#0450c2FOFountain00001ANewYork#0170c2CNChenango00001FNorthCarolina#0850c2HRHarnett000018Georgia#2370c2PUPutnam000025Ireland#0050c2DOD&uacute;n na nGall00001BNorthAmerica#0070c2CUCuba00002ENewCaledonia#NC.NO.PH0c2PHPon&eacute;rihouen00001FMontenegro#070c2DADanilovgrad00001BMiddleEast#020c2BABahrain00001DSwitzerland#140c2OBObwalden000023EastEuropeanRegion#010c2BYBelarus000029Canada#050c2NLNewfoundland and Labrador000018NewWorld#270c2BRBrazil000022PuertoRico#450c2CMComer&iacute;o000016Belize#010c2BZBelize000017Bahamas#030c2BIBimini000014Japan#330c2OSOsaka00001ENorwayRegion#010c2AKAkershus00001CBulgaria#600c2TTurgovishte000016Ontario#360c2PRPerth000027PolandCounties#PL.SL.KA0c2SKAKatowice00001ECoteDivoire#CI.AG0c2AGAgneby00001APalau#PW.NM0c2NMNgardmau00001AVietnam#VN.HM0c2HMHa Nam000020GuineaBissau#GW.TO0c2TOTombali000025BurkinaFaso#BF.BZ0c2BZBaz&egrave;ga000027CentralAfricanRepublic#CF.KG0c2KGKemo00001BTanzania#TZ.MT0c2MTMtwara000017Nepal#NP.ME0c2MEMechi00001FNorthAmerica#0080c2DMDominica00001ECalifornia#0810c2SESan Mateo00001ATexas#2490c2JIWJim Wells00001ANebraska#1810c2WBWebster00001AGeorgia#0570c2CECherokee000025WorldwithCountries#1350c2BGBulgaria00001BMinnesota#1090c2OLOlmsted000019Kentucky#0930c2HRHardin00001CMichigan#1030c2MQMarquette000019Florida#0210c2COCollier00001CMississippi#0030c2ALAlcorn000025Europewithcountries#0040c2BYBelarus00001DWestVirginia#0210c2GIGilmer000017Scotland#0070c2BUBute000018NewWorld#1800c2NRNauru00001DAsia3#0220c2KPKorea (north)000018Virginia#1690c2SCScott000018Colorado#0010c2ADAdams00001BSouthDakota#0390c2DUDeuel00001AAlabama#0170c2CHChambers000016Missouri#1770c2RARay00002AIreland#0060c2DUBaile &Aacute;tha Cliath000026USANorthWestRegion#530c2WAWashington00001FMontenegro#080c2HNHerceg Novi000018MiddleEast#030c2INIran000021Switzerland#150c2SGSankt Gallen000024SouthEuropeanRegion#010c2ALAlbania000024EastEuropeanRegion#020c2BGBulgaria000017NewWorld#280c2CLChile000014Belize#020c2CYCayo00001CBahamas#040c2BPBlack Point000013Japan#340c2SASaga000020NorwayRegion#020c2AAAust-Agder000016Bulgaria#610c2BVarna00001DOntario#370c2PTPeterborough00001CBurundi#BI.MV0c2MVMuramvya000019Uganda#UG.BL0c2BLBulisa000028FranceDepartment#FR.DS0c2DSDeux Sevres000019Vietnam#VN.HN0c2HNHanoi000022Morocco#MA.TO0c2TOTanger Tetouan00001ANigeria#NG.EB0c2EBEbonyi00001EBurma#MM.KC0c2KCKachin State00001FPhilippines#PH.QR0c2QRQuirino000019Georgia#2390c2QUQuitman00001AIreland#0070c2GAGaillimh000025NorthAmerica#0090c2DODominican Rep.00001AKansas#0410c2DKDickinson000020SouthCarolina#0130c2BEBeaufort00001AIllinois#0770c2JAJackson000024WorldwithCountries#1360c2HYCroatia00001CNorthDakota#0110c2BWBowman000017Texas#0690c2CATCastro00001AIdaho#0870c2WAWashington000018Ohio#0310c2CSCoshocton00001ANewMexico#0030c2CACatron000018Nebraska#0010c2ADAdams000019Wyoming#0230c2LILincoln000025Europewithcountries#0050c2BEBelgium00001BTennessee#0910c2JOJohnson00001CScotland#0080c2CACaithness00001ENewWorld#1810c2NZNew Zealand000018Oklahoma#0430c2DWDewey000013Iowa#0950c2IWIowa00001DAsia3#0230c2KRKorea (south)000019Texas#4310c2STRSterling00001ANewJersey#0370c2SUSussex00001AIndiana#0470c2FRFranklin000019NewYork#0190c2CLClinton00001FNorthCarolina#0870c2HWHaywood000022Montenegro#090c2KLKola&scaron;in000018MiddleEast#040c2IZIraq000021Switzerland#160c2SCSchaffhausen000024SouthEuropeanRegion#020c2ADAndorra000023EastEuropeanRegion#030c2MDMoldova00001BCanada#070c2NSNova Scotia00001ANewWorld#290c2COColombia000021Quebec#010c2BSBas-Saint-Laurent00001BPuertoRico#470c2CZCorozal000017Belize#030c2CZCorozal00001BBahamas#050c2CICat Island000016Japan#350c2SISaitama000020Bulgaria#620c2BTVeliko Turnovo000025Ontario#380c2PCPrescott and Russell000019Burundi#BI.MW0c2MWMwaro00001CHongKong#HK.IS0c2ISIslands00001BMacedonia#MK.AJ0c2AJSaraj000023Sudan#SD.BG0c2BGCentral Equatoria000026Serbia#RS.KM0c2KMKosovsko Mitrovacki000017Uganda#UG.AW0c2AWArua000019Thailand#TH.YL0c2YLYala000025SolomonIsland#SB.GC0c2GCGuadalcanal00001EBotswana#BW.KG0c2KGKgalagadi00001CVietnam#VN.HO0c2HOHoa Binh000016Syria#SY.DR0c2DRDara00001FMacedonia#MK.RU0c2RUStrumitsa00001ABhutan#BT.CR0c2CRChirang00001DPhilippines#PH.RI0c2RIRizal00001FKazakhstan#KZ.BY0c2BYBayqonyr00001BMissouri#1790c2REReynolds000020Ireland#0080c2KECiarra&iacute;000022NorthAmerica#0100c2SVEl Salvador000022California#0830c2SRSanta Barbara000018Texas#2510c2JOHJohnson00001ANebraska#1830c2WHWheeler000018Georgia#0590c2CKClarke00002BWorldwithCountries#1370c2CZCzech Republic00001EMinnesota#1110c2OTOtter Tail000019Kentucky#0950c2HLHarlan000018Michigan#1050c2MAMason00001AFlorida#0230c2CUColumbia00001BMississippi#0050c2AMAmite000034Europewithcountries#0060c2BABosnia and Herzegovina00001CWestVirginia#0230c2GRGrant000023Scotland#0090c2CLClackmannanshire000018NewWorld#1820c2PWPalau00001DVirginia#1710c2SHShenandoah00001AColorado#0030c2ALAlamosa00001FAlaska#2610c2VCValdez-Cordova00001BSouthDakota#0410c2DEDewey00001AAlabama#0190c2CECherokee000019Montenegro#100c2KTKotor00001AMiddleEast#050c2ISIsrael00001BSwitzerland#170c2SHSchwyz000035SouthEuropeanRegion#030c2BABosnia &amp; Herzegovina000023EastEuropeanRegion#040c2RORomania000017Canada#080c2ONOntario000019NewWorld#300c2ECEcuador000027Quebec#020c2SLSaguenay-Lac-Saint-Jean00001AUSA#WV0c2WVWest Virginia00001BBelize#040c2OWOrange Walk00001EBahamas#060c2CBCentral Abaco000014USA#GA0c2GAGeorgia000014Japan#360c2SHShiga00001ENorwayRegion#040c2BUBuskerud000017Bulgaria#630c2BHVidin00001EOntario#390c2PNPrince Edward000022MarshallIsland#MH.MH.KN0c2KNKnox00001BTanzania#TZ.MW0c2MWMwanza00001ARussia#RU.IK0c2IKIrkutsk00001APalau#PW.NP0c2NPNgatpang00001DUganda#UG.BN0c2BNBundibugyo00001ABenin#BJ.CL0c2CLCollines00002FHungaryRegions#HU.NG0c2NGNorthern Great Plain00001CVietnam#VN.HP0c2HPHaiPhong00001AAlgeria#DZ.SK0c2SKSkikda000017Nigeria#NG.ED0c2EDEdo000021Somalia#SO.JH0c2JHJubbada Hoose00001DMacedonia#MK.RV0c2RVRadovis000022Macedonia#MK.SL0c2SLSveti Nikole000018Niger#NE.TH0c2THTahoua000021NorthCarolina#0890c2HDHenderson000017Georgia#2410c2RBRabun00001BIreland#0090c2KICill Dara00001ENorthAmerica#0110c2GDGrenada000019Kansas#0430c2DPDoniphan000020SouthCarolina#0150c2BKBerkeley000019Illinois#0790c2JSJasper000024WorldwithCountries#1380c2DKDenmark00001BNorthDakota#0130c2BUBurke000019Texas#0710c2CHAChambers000017Ohio#0330c2CWCrawford00001ANewMexico#0050c2CHChaves00001BNebraska#0030c2ANAntelope000019Wyoming#0250c2NANatrona000026Europewithcountries#0070c2BGBulgaria000018Tennessee#0930c2KNKnox000021Scotland#0100c2DMDumbartonshire000023NewWorld#1830c2PGPapua New Guinea000018Oklahoma#0450c2ELEllis000016Iowa#0970c2JAJackson00001ATexas#4330c2STOStonewall000019NewJersey#0390c2UNUnion000018Indiana#0490c2FUFulton00001ANewYork#0210c2COColumbia000029YukonTerritory#CA.YT.NO0c2NONorth Yukon000023USANorthWestRegion#560c2WYWyoming00001CMontenegro#110c2MKMojkovac00001AMiddleEast#060c2JOJordan00001ESwitzerland#180c2SOSolothurn000024SouthEuropeanRegion#040c2HYCroatia000023EastEuropeanRegion#050c2UAUkraine000024Canada#090c2PEPrince Edward Island000022NewWorld#310c2FKFalkland Islands000022Quebec#030c2CNCapitale-Nationale00001BPuertoRico#490c2CUCulebra00001BBelize#050c2SCStann Creek00001FBahamas#070c2CNCentral Andros000014USA#FL0c2FLFlorida000016Japan#370c2SMShimane00001ENorwayRegion#050c2FIFinnmark000018Bulgaria#640c2BPVratsa00001COntario#400c2RARainy River000024MarshallIsland#MH.MH.KO0c2KOKosrae00001EFiji#FJ.TH.EA0c2EATholo East00001ETajikistan#TJ.KL0c2KLKhatlon00001BBurundi#BI.MY0c2MYMuyinga000032Guyana#GY.ES0c2ESEssequibo Islands-West Demerara00001BSerbia#RS.KO0c2KOKosovski00002BHungaryRegions#HU.NH0c2NHNorthern Hungary000029FranceDepartment#FR.EL0c2ELEure et Loir00001BAlgeria#DZ.TB0c2TBTebessa00001CSriLanka#LK.CO0c2COColombo000014Mali#ML.GA0c2GAGao000019Senegal#SN.KD0c2KDKolda000019Missouri#1810c2RIRipley000020Ireland#0100c2KLCill Chainnigh000020NorthAmerica#0120c2GTGuatemala000020California#0850c2STSanta Clara000016Texas#2530c2JONJones000017Nebraska#1850c2YOYork000016Georgia#0610c2CYClay000024WorldwithCountries#1390c2EEEstonia00001EMinnesota#1130c2PEPennington00001BKentucky#0970c2HIHarrison00001AMichigan#1070c2MCMecosta00001ANewMexico#0060c2CICibola00001CMississippi#0070c2ATAttala000025Europewithcountries#0080c2HYCroatia000021WestVirginia#0250c2GEGreenbrier000020Scotland#0110c2DUDumfriesshire000018NewWorld#1840c2WSSamoa000014Asia3#0260c2LALaos000018Virginia#1730c2SMSmyth00001BColorado#0050c2ARArapahoe00001DSouthDakota#0430c2DODouglas000019Alabama#0210c2CIChilton000020NewCaledonia#NC.NO.PM0c2PMPoum000017Bulgaria#650c2YYambol000018Ontario#410c2RERenfrew000026Montenegro#120c2NKNik&scaron;i&#263;00001AMiddleEast#070c2KUKuwait00001CSwitzerland#190c2THThurgau000023SouthEuropeanRegion#050c2GRGreece000022EastEuropeanRegion#060c2RURussia000016Canada#100c2QCQuebec00001FNewWorld#320c2GFFrench Guiana000018Quebec#040c2MAMauricie000016Belize#060c2TOToledo000022Bahamas#080c2CECentral Eleuthera000017Japan#380c2SZShizouka00001DNorwayRegion#060c2HEHedmark000029FrenchGuiana#GF.SL.SL0c2SLSaint Laurent000016Fiji#FJ.WE.BA0c2BABa00001CTanzania#TZ.MY0c2MYManyara00001FGuineaBissau#GW.BS0c2BSBissau00001BUK7#UK.IM0c2IMIsle of Man00001BZimbabwe#ZW.HA0c2HAHarare000026Serbia#RS.KP0c2KPKosovsko Pomoravski000025Singapore#SG.SO0c2SOSouth Singapore00001FCambodia#KH.MK0c2MKMondulkiri00001FCongo#CG.CO0c2COCuvette Ouest000019Angola#AO.MX0c2MXMoxico000019Algeria#DZ.AL0c2ALAlger000026Algeria#DZ.BB0c2BBBordj Bou Arreridj000029CentralAfricanRepublic#CF.LB0c2LBLobaye000020NorthCarolina#0910c2HTHertford00001AGeorgia#2430c2RARandolph000017Ireland#0110c2LALaois00001CNorthAmerica#0130c2HTHaiti000018Kansas#0450c2DGDouglas00001FSouthCarolina#0170c2CACalhoun00001CIllinois#0810c2JEJefferson000018Missouri#0010c2ADAdair000024WorldwithCountries#1400c2FIFinland00001ENorthDakota#0150c2BRBurleigh000019Texas#0730c2CHECherokee000017Ohio#0350c2CUCuyahoga00001ANewMexico#0070c2COColfax000019Nebraska#0050c2ARArthur00001AWyoming#0270c2NINiobrara00002CEuropewithcountries#0090c2CZCzech Republic000018Tennessee#0950c2LALake00001FScotland#0120c2EAEast Lothian000022NewWorld#1850c2SBSolomon Islands00001BOklahoma#0470c2GAGarfield000015Iowa#0990c2JSJasper000017Texas#4350c2SUTSutton00001ANewJersey#0410c2WAWarren000018Indiana#0510c2GIGibson00001ANewYork#0230c2CTCortland000017Ontario#420c2SISimcoe000018Montenegro#130c2PVPlav00001EMiddleEast#080c2KGKyrgyzstan00001BSwitzerland#200c2TITicino000022SouthEuropeanRegion#060c2ITItaly00001CCanada#110c2SKSaskatchewan000026USACentralRegion#380c2NDNorth Dakota000023USASouthWestRegion#040c2AZArizona000018NewWorld#330c2GYGuyana000016Quebec#050c2ESEstrie000014USA#WY0c2WYWyoming00001APuertoRico#510c2DODorado000021Bahamas#090c2FPCity of Freeport000016Japan#390c2TOTochigi00001FNorwayRegion#070c2HOHordaland000019Nepal#NP.LU0c2LULumbini00001ANepal#NP.NA0c2NANarayani000021HongKong#HK.KC0c2KCKowloon City000019Uganda#UG.TR0c2TRTororo000021Kiribati#KI.LI0c2LILine Islands00001CPhilippines#PH.AB0c2ABAbra00001DRussia#RU.IN0c2INIngushetia000021China2#CN.XJ0c2XJXinjiang Uygur00001APalau#PW.NS0c2NSNgchesar000021Lebanon#LE.JA0c2JASouth Lebanon00001BTuvalu#TV.FN0c2FNFunafuti00001CUzbekistan#UZ.NW0c2NWNavoi00001AAlgeria#DZ.BC0c2BCBechar00001DBurma#MM.KH0c2KHKayah State000022Macedonia#MK.SO0c2SOSuto Orizari000026Philippines#PH.SC0c2SCSouth Cotabato00001EMissouri#1830c2SRSt. Charles00001AIreland#0120c2LELiatroim00001FNorthAmerica#0140c2HNHonduras00001FCalifornia#0870c2SCSanta Cruz000017Texas#2550c2KARKarnes000019Georgia#0630c2CTClayton000023WorldwithCountries#1410c2FRFrance000018Minnesota#1150c2PIPine000017Kentucky#0990c2HTHart00001CMichigan#1090c2MMMenominee000018Florida#0270c2DEDesoto00001CMississippi#0090c2BEBenton000025Europewithcountries#0100c2DKDenmark000020WestVirginia#0270c2HAHampshire000017Scotland#0130c2FIFife000018NewWorld#1860c2TOTonga000018Asia3#0280c2MYMalaysia00001EVirginia#1750c2SUSouthampton00001CColorado#0070c2ACArchuleta00001DSouthDakota#0450c2EDEdmunds000019Alabama#0230c2COChoctaw00002EOntario#430c2STStormont, Dundas and Glengary000020Montenegro#140c2PLPlu&#382;ine00001BMiddleEast#090c2LELebanon000018Switzerland#210c2URUri000026SouthEuropeanRegion#070c2MKMacedonia00001FCanada#120c2YTYukon Territory00001ANewWorld#340c2PYParaguay00001FQuebec#060c2MNMontr&eacute;al00001FBahamas#100c2CKCrooked Island000018Japan#400c2TKTokushima00002CNorwayRegion#080c2MRM&oslash;re og Romsdal00001EFiji#FJ.TH.WE0c2WETholo West000021SierraLeone#SL.NO.KM0c2KMKambia00001BNiger#NE.TL0c2TLTillabery00001BTajikistan#TJ.LE0c2LESogd00001BDjibouti#DJ.DK0c2DKDikhil00002BRussia#RU.JE0c2JEJewish Autonomous Region00001BUganda#UG.BR0c2BRKabarole00001DBotswana#BW.KL0c2KLKgatleng000019China2#CN.FJ0c2FJFujian00001BVietnam#VN.HT0c2HTHa Tinh00001FCapeVerde#CV.MO0c2MOMosteiros00001AAlgeria#DZ.AN0c2ANAnnaba00001ANewYork#0250c2DEDelaware00001CNorthCarolina#0930c2HOHoke00001AGeorgia#2450c2RIRichmond00001BIreland#0130c2LILuimneach00001ENorthAmerica#0150c2JMJamaica000018Kansas#0470c2EDEdwards000022SouthCarolina#0190c2CHCharleston000019Illinois#0830c2JRJersey000019Missouri#0030c2ANAndrew000024WorldwithCountries#1420c2DEGermany00001ANorthDakota#0170c2CACass00001ATexas#0750c2CHIChildress000014Ohio#0370c2DADarke000019NewMexico#0090c2CUCurry000019Nebraska#0070c2BABanner000016Wyoming#0290c2PAPark000025Europewithcountries#0110c2EEEstonia00001ETennessee#0970c2LULauderdale000022Scotland#0140c2ISInverness-shire000019NewWorld#1870c2TVTuvalu000019Oklahoma#0490c2GRGarvin000018Iowa#1010c2JEJefferson000018Texas#4370c2SWISwisher000017Indiana#0530c2GRGrant000018Ontario#440c2SUSudbury00001CMontenegro#150c2PUPljevlja000018MiddleEast#100c2MUOman00001BSwitzerland#220c2VAValais000022SouthEuropeanRegion#080c2MTMalta000025Canada#130c2NTNorthwest Territories000022USACentralRegion#400c2OKOklahoma000026USASouthWestRegion#060c2CACalifornia000016NewWorld#350c2PEPeru000019Quebec#070c2OUOutaouais00001BPuertoRico#530c2FJFajardo000022Bahamas#110c2EBEast Grand Bahama000014Japan#410c2TYTokyo00001ENorwayRegion#090c2NONordland00001FPhilippines#PH.RO0c2RORomblon00001BUganda#UG.BS0c2BSBushenyi000028EquatorialGuinea#GQ.BN0c2BNBioko Norte00001DVietnam#VN.HU0c2HUHau Giang000021Morocco#MA.DA0c2DADoukkala Abda00001CMissouri#1850c2SISt. Clair00001AIreland#0140c2LOLongfort00001DNorthAmerica#0160c2MXMexico00001BCalifornia#0890c2SHShasta000018Texas#2570c2KAUKaufman00001ALouisiana#0010c2ACAcadia000020Virginia#7200c2NRNorton (City)000018Georgia#0650c2CIClinch000023WorldwithCountries#1430c2GRGreece00001DMinnesota#1170c2PSPipestone00001CKentucky#1010c2HEHenderson00001AMichigan#1110c2MDMidland000017Florida#0290c2DIDixie00001DMississippi#0110c2BOBolivar000025Europewithcountries#0120c2FIFinland00001BArkansas#0010c2ARArkansas00001EWestVirginia#0290c2HNHancock000022Scotland#0150c2KCKincardineshire00001ANewWorld#1880c2VUVanuatu000018Asia3#0300c2MNMongolia00001FVirginia#1770c2SPSpotsylvania000017Colorado#0090c2BABaca000020SouthDakota#0470c2FRFall River000018Alabama#0250c2CLClarke000030NewCaledonia#NC.SU.IP0c2IPL'&Icirc;le-des-Pins00001COntario#450c2TBThunder Bay00001DMontenegro#160c2PGPodgorica00001CMiddleEast#110c2PKPakistan000019Switzerland#230c2VUVaud000027SouthEuropeanRegion#090c2MOMontenegro000017Canada#140c2NUNunavut00001ANewWorld#360c2SRSuriname00002CQuebec#080c2ATAbitibi-T&eacute;miscamingue00001BPuertoRico#540c2FLFlorida000016Bahamas#120c2EMExuma000016Japan#420c2TTTottori00002BNorwayRegion#100c2NTNord-Tr&oslash;ndelag00001EPhilippines#PH.QZ0c2QZQuezon000029Philippines#PH.SF0c2SFShariff Kabunsuan000023CentralAmerica2#CE.GD0c2GDGrenada000017Yemen#YE.MA0c2MAMarib00001EEastTimor#TL.MF0c2MFManufahi00001EMacedonia#MK.BG0c2BGBogdanci00001BSudan#SD.BN0c2BNBlue Nile00001ECoteDivoire#CI.BF0c2BFBafing00001DThailand#TH.YS0c2YSYasothon00001CKuwait#KW.KU0c2KUAl Kuwayt000019Cameroon#CM.NO0c2NONord000025CaymanIslands#KY.GT0c2GTGeorge Town00001ESyria#SY.DY0c2DYDayr az Zawr000015Togo#TG.KA0c2KAKara00001FGhana#GH.AA0c2AAGreater Accra000018Indiana#0550c2GEGreene00001ANewYork#0270c2DUDutchess00001CNorthCarolina#0950c2HYHyde00001AGeorgia#2470c2RORockdale000021Missouri#1860c2SGSte. Genevieve00001BIreland#0150c2LUL&uacute;000020NorthAmerica#0170c2NINicaragua000014Kansas#0490c2EKElk000020SouthCarolina#0210c2CECherokee00001DIllinois#0850c2JDJo Daviess00001BMissouri#0050c2ATAtchison000024WorldwithCountries#1440c2HUHungary00001ENorthDakota#0190c2CVCavalier000015Texas#0770c2CLAClay000029Virginia#5400c2CVCharlottesville (City)000017Ohio#0390c2DEDefiance00001BNewMexico#0110c2DBDe Baca000019Nebraska#0090c2BLBlaine000018Wyoming#0310c2PLPlatte000024Europewithcountries#0130c2FRFrance00001CTennessee#0990c2LWLawrence000020Scotland#0160c2KNKinross-shire000020NewWorld#1890c2NCNew Caledonia000018Oklahoma#0510c2GDGrady000016Iowa#1030c2JOJohnson000015Asia3#0310c2NPNepal000018Texas#4390c2TARTarrant00001COntario#460c2TITimiskaming00001FMontenegro#170c2RORo&#382;aje000019MiddleEast#120c2QAQatar000018Switzerland#240c2ZUZug000025SouthEuropeanRegion#100c2PTPortugal000024USASouthWestRegion#080c2COColorado000019NewWorld#370c2UYUruguay00001FQuebec#090c2COC&ocirc;te-Nord000022PuertoRico#550c2GCGu&aacute;nica00001ABahamas#130c2GCGrand Cay000015Japan#430c2TAToyama00001DNorwayRegion#110c2OPOppland000022FrenchGuiana#GF.SL.AP0c2APApatou000024MarshallIsland#MH.MH.LK0c2LKLikiep000021Philippines#PH.SG0c2SGSarangani00001DEastTimor#TL.LQ0c2LQLiquica00001FMacedonia#MK.AR0c2ARAracinovo000018Serbia#RS.MA0c2MAMacva000018Palau#PW.NW0c2NWNgiwal000018Uganda#UG.BU0c2BUBusia000024Libya#LY.JA0c2JAAl Jabal al Akhdar000019Nigeria#NG.EK0c2EKEkiti000020Mauritania#MR.GD0c2GDGuidimaka00001DMacedonia#MK.SS0c2SSSopiste00001FMissouri#1870c2SFSt. Francois00001AIreland#0160c2MAMaigh Eo00001DNorthAmerica#0180c2PAPanama00001BCalifornia#0910c2SISierra000018Texas#2590c2KENKendall000019Louisiana#0030c2ALAllen000016Georgia#0670c2CBCobb000024WorldwithCountries#1450c2ISIceland000018Minnesota#1190c2PLPolk000018Kentucky#1030c2HYHenry00001CMichigan#1130c2MIMissaukee000017Florida#0310c2DUDuval00001DMississippi#0130c2CACalhoun000025Europewithcountries#0140c2DEGermany000019Arkansas#0030c2ASAshley00001CWestVirginia#0310c2HRHardy000025Scotland#0170c2KIKirkcudbrightshire00001ANewWorld#1900c2BABahrain00001BVirginia#1790c2STStafford000017Colorado#0110c2BEBent00001BSouthDakota#0490c2FAFaulk000016Alabama#0270c2CYClay000018Ontario#470c2TOToronto000021Montenegro#180c2SA&Scaron;avnik00001FMiddleEast#130c2SASaudiArabia00001BSwitzerland#250c2ZRZurich000027SouthEuropeanRegion#110c2SMSan Marino00001BNewWorld#380c2VEVenezuela000025Quebec#100c2NONord-du-Qu&eacute;bec000016Kenya#010c2CECentral00001FBahamas#140c2HBHarbour Island000017Japan#440c2WAWakayama00001ANorwayRegion#120c2OSOslo000032DICT_RSS.FEEDS0c000001ANAME0c1A1NameL4000371BMVBP.BP0c00006B3SBBP.SB.GETJOB0c0SUBROUTINE SBBP.SB.GETJOB(entry,startpos,bytes)** Copyright (C) 2006 Sierra Bravo Corporation, All Rights Reserved** Programm: SBBP.SB.LISTPEQS* Written by: Luke Bucklin, Sierra Bravo* Date: 04/24/06* Description: Send an XML document of the print queue (LISTPEQS)*COMMON /SBPRINT/ LINK.LIST, LINK.LIST.JOB*EQU P.JOB      TO 1EQU P.PORT     TO 2EQU P.STATUS   TO 3EQU P.QUEUE    TO 4EQU P.BYTES    TO 5EQU P.DATE     TO 6EQU P.TIME     TO 7EQU P.OWNER    TO 8EQU P.PREVIEW  TO 9*LINK.LIST = "" ; LINK.LIST.JOB = ""*CHUNKSIZE = 50000*FRAMESIZE = SYSTEM(32) ;* D3-only*IF NOT(startpos MATCHES "1N0N") THEN startpos = 1IF NOT( bytes MATCHES "1N0N") THEN bytes=99999999*EXECUTE "LISTPEQS ":entry CAPTURING PEQS.OUTLINES = DCOUNT( PEQS.OUT, @AM )GOOD.LINE = 0PINFO = ""FOR PL = 1 TO LINES-1 UNTIL GOOD.LINE  LINE = PEQS.OUT<PL>  GOOD.LINE = 1  previewsize = 0; GET.PREVIEW = 0  CALL SUB.SB.PARSEPEQS(LINE,PINFO,previewsize,GET.PREVIEW,GOOD.LINE)NEXT PL**CRT '<job id="':entry:'">'*CRT ' <date>':OCONV(PINFO<P.DATE>,'D2/'):'</date>'*CRT ' <time>':OCONV(PINFO<P.TIME>,'MTS'):'</time>'*CRT "<data><![CDATA[":CHUNKS = 0NO.PAGES = 1LOOP  IF bytes > CHUNKSIZE THEN    sendbytes = CHUNKSIZE    bytes -= CHUNKSIZE  END ELSE    sendbytes = bytes    bytes = 0  END  OUTPUT = ""  CALL SUB.SB.GET.ENTRY(entry,startpos,sendbytes,OUTPUT,ERR)  CHUNKS += 1  IF NOT(ERR) THEN    CONVERT CHAR(0) TO "" IN OUTPUT    CALL SWAP(OUTPUT,CHAR(12),'[0x12]')    NO.PAGES = NO.PAGES + COUNT( OUTPUT, CHAR(12) )    CRT OUTPUT:  END ELSE EXIT  startpos += sendbytesWHILE bytes AND OUTPUT # "" DO REPEAT*CRT ']]></data><pages>':NO.PAGES:'</pages>'*CRT '</job>'STOP000A12SUB.SB.GET.ENTRY0c0SUBROUTINE SUB.SB.GET.ENTRY(JOB,START.POS,BYTES,OUTPUT,ERR)** Copyright (C) 2006 Sierra Bravo Corporation, All Rights Reserved** Programm: SUB.SB.GET.ENTRY* Written by: Luke Bucklin, Sierra Bravo* Date: 04/24/06* Description: Extract a segment of print queue content*COMMON /SBPRINT/ LINK.LIST, LINK.LIST.JOB*FRAMESIZE = SYSTEM(32) ;* D3-onlyOUTPUT = ""ERR = ""BYTES.TO.GET = BYTES*EXECUTE "LISTPEQS ":JOB:" E" CAPTURING JOB.LINEJOB.LINE = JOB.LINE<5>	FID = JOB.LINE[34,8]IF FID # "" THEN  * Get full sequential list of frame IDs  FSIZE = FRAMESIZE-1  IF START.POS > 1 OR BYTES > FSIZE THEN    IF LINK.LIST.JOB # JOB THEN      * We didn't just build this recently, so go ahead and build it now      * associate the LINK.LIST (in common) with the job so if we are asked      * to build this linked list again for this job, we can skip this part      * and just pull it from common      LINK.LIST = FID      LINK.LIST.JOB = JOB      EXECUTE "DUMP .":FID:" L" CAPTURING LINKAGE      START.ROW = INDEX(LINKAGE,'+',1)      START.ROW = DCOUNT(LINKAGE[1,START.ROW],@AM)      MAX.ROWS = DCOUNT( LINKAGE, @AM )      FOR LX = START.ROW TO MAX.ROWS        ROW = LINKAGE<LX>        IF TRIM(ROW) # "" THEN          XFRAME = TRIM(FIELD( ROW,'(',2))          XFRAME = FIELD(XFRAME,' ',1)          LINK.LIST<-1> = XFRAME        END      NEXT LX    END    *    * First frame is FRAMESIZE-1 bytes because the first    * byte is a throwaway.    *    START.TEMP = START.POS    SKIP.FRAMES = 0    LOOP UNTIL START.TEMP <= FSIZE DO      SKIP.FRAMES += 1      START.TEMP -= FSIZE      FSIZE = FRAMESIZE    REPEAT    IF SKIP.FRAMES THEN OFFSET = START.TEMP-1 ELSE OFFSET = START.TEMP    IF SKIP.FRAMES = 0 AND OFFSET = 0 THEN OFFSET = 1  END ELSE    LINK.LIST = FID    OFFSET = 1    SKIP.FRAMES = 0  END  MAX.FRAMES = DCOUNT( LINK.LIST, @AM )  FX.START = 1 + SKIP.FRAMES  FOR FX = FX.START TO MAX.FRAMES WHILE BYTES.TO.GET     FID = LINK.LIST<FX>    EXECUTE "DUMP .":FID:" SX" CAPTURING PREVX.OUT    IF LEN(PREVX.OUT) # FRAMESIZE*2 THEN      ERR = 1      EXIT    END    IF OFFSET THEN      PREVX.OUT = PREVX.OUT[(OFFSET*2)+1,FRAMESIZE*2]    END    DATLEN = LEN(PREVX.OUT) / 2    PREVX.OUT = OCONV( PREVX.OUT, 'MY' )    IF DATLEN > BYTES.TO.GET THEN      PREVX.OUT = PREVX.OUT[1,BYTES.TO.GET]      BYTES.TO.GET = 0    END ELSE      BYTES.TO.GET -= DATLEN    END    OUTPUT := PREVX.OUT    CONVERT CHAR(0) TO "" IN OUTPUT    CONVERT @AM TO "^" IN OUTPUT    OFFSET = 0  NEXT FXEND ELSE ERR = 1RETURN000703SUB.SB.PARSEPEQS0c0SUBROUTINE SUB.SB.PARSEPEQS(LINE,PINFO,previewsize,GET.PREVIEW,GOOD.LINE)*EQU P.JOB      TO 1EQU P.PORT     TO 2EQU P.STATUS   TO 3EQU P.QUEUE    TO 4EQU P.BYTES    TO 5EQU P.DATE     TO 6EQU P.TIME     TO 7EQU P.OWNER    TO 8EQU P.PREVIEW  TO 9*FRAMESIZE = SYSTEM(32) ;* D3-onlyIF NOT(FRAMESIZE MATCHES "1N0N") THEN FRAMESIZE = 4000*PINFO = ""*JOB = TRIM(LINE[1,4])IF JOB MATCHES "1N0N" THEN  PINFO<P.JOB> = JOB  *  L.PORT = TRIM(LINE[15,5])  PINFO<P.PORT> = L.PORT  *  L.STATUS = TRIM(LINE[23,15])  STATUS.MSG = ""  IF INDEX(L.STATUS,'h',1) THEN    STATUS.MSG := 'Hold,'  END  IF INDEX(L.STATUS,'l',1) THEN    STATUS.MSG := 'Locked,'  END  IF INDEX(L.STATUS,'o',1) THEN    STATUS.MSG := 'Generating,'  END  IF INDEX(L.STATUS,'s',1) THEN    STATUS.MSG := 'Spooled,'  END ELSE IF INDEX(L.STATUS,'p',1) THEN    STATUS.MSG := 'To print,'  END ELSE IF INDEX(L.STATUS,'x',1) THEN    STATUS.MSG := 'Canceled,'  END  IF STATUS.MSG # "" THEN STATUS.MSG = STATUS.MSG[1,LEN(STATUS.MSG)-1] ;* Get rid of the trailing comma  PINFO<P.STATUS> = STATUS.MSG  *  L.QUEUE = TRIM(LINE[42,5])  PINFO<P.QUEUE> = L.QUEUE  *  L.BYTES = TRIM(LINE[47,7])  L.BYTES = L.BYTES * FRAMESIZE  PINFO<P.BYTES> = L.BYTES  *  L.DATE = TRIM(LINE[55,8])  L.DATE = ICONV( L.DATE,'D' )  PINFO<P.DATE> = L.DATE  *  L.TIME = TRIM(LINE[64,8])  L.TIME = ICONV( L.TIME, 'MTS' )  PINFO<P.TIME> = L.TIME  *  L.OWNER = TRIM(LINE[73,20])  PINFO<P.OWNER> = L.OWNER  *  IF GET.PREVIEW THEN    *    * Get preview unless we are searching -that's a whole different process.    *    L.PREVIEW = ""    CALL SUB.SB.GET.ENTRY(JOB,1,previewsize,L.PREVIEW,ERR)    IF ERR # "" THEN GOOD.LINE = 0    PINFO<P.PREVIEW> = L.PREVIEW  ENDEND ELSE GOOD.LINE = 0RETURN001F30SBBP.SB.LISTPEQS0c0** Copyright (C) 2008 Sierra Bravo Corporation, All Rights Reserved** Programm: SBBP.SB.LISTPEQS* Written by: Luke Bucklin, Sierra Bravo* Adapted by: David Bucklin, Sierra Bravo*             CGI Version of the Bravo Print XML API* Date: 04/24/06* Description: Send an XML document of the print queue (LISTPEQS)*COMMON /SBPRINT/ LINK.LIST, LINK.LIST.JOBINCLUDE WBPD WWW.INCLUDE*LINK.LIST = "" ; LINK.LIST.JOB = ""*EQU P.JOB      TO 1EQU P.PORT     TO 2EQU P.STATUS   TO 3EQU P.QUEUE    TO 4EQU P.BYTES    TO 5EQU P.DATE     TO 6EQU P.TIME     TO 7EQU P.OWNER    TO 8EQU P.PREVIEW  TO 9*OPEN '','SBBP.FORMS' TO F.SBBP.FORMS ELSE STOP 201, 'SBBP.FORMS'*CALL WDB.VARS(VARS,VALS)*FRAMESIZE = SYSTEM(32) ;* D3-only*LOCATE "entrystart" IN VARS SETTING POS THEN  entrystart = VALS<POS>END ELSE entrystart = ""LOCATE "entries" IN VARS SETTING POS THEN  entries = VALS<POS>END ELSE entries = ""LOCATE "begindate" IN VARS SETTING POS THEN  begindate = VALS<POS>  begindate = ICONV(begindate,'D')END ELSE begindate = ""LOCATE "enddate" IN VARS SETTING POS THEN  enddate = VALS<POS>  enddate = ICONV(enddate,'D')END ELSE enddate = ""LOCATE "owner" IN VARS SETTING POS THEN  owner = VALS<POS>END ELSE owner = ""LOCATE "queue" IN VARS SETTING POS THEN  queue = VALS<POS>END ELSE queue = ""LOCATE "previewsize" IN VARS SETTING POS THEN  previewsize = VALS<POS>END ELSE previewsize = ""LOCATE "port" IN VARS SETTING POS THEN  port = VALS<POS>END ELSE port = ""LOCATE "searchstring" IN VARS SETTING POS THEN  searchstring = VALS<POS>END ELSE searchstring = ""IF searchstring # "" THEN GET.PREVIEW = 0 ELSE GET.PREVIEW = 1IF NOT(previewsize MATCHES "1N0N") THEN  previewsize = 500ENDLOCATE "entry" IN VARS SETTING POS THEN  entry = VALS<POS>END ELSE entry = ""LOCATE "action" IN VARS SETTING POS THEN  action = VALS<POS>END ELSE action = ""**ERROR = ""ALL.ENTRIES.FOUND = 0ENTRY.LIST = ''LOOP  LOCATE "entries[]" IN VARS SETTING POS THEN    ENTRY.LIST<-1> = VALS<POS>    VARS<POS> = "XXX"  END ELSE ALL.ENTRIES.FOUND = 1UNTIL ALL.ENTRIES.FOUND DO REPEATIF entry # "" THEN ENTRY.LIST<-1> = entryECNT = DCOUNT( ENTRY.LIST, @AM )FOR EX = 1 TO ECNT  entry = ENTRY.LIST<EX>  BEGIN CASE    CASE entry = ""      CMD = ''    CASE action = "delete"      CMD = "SP-KILL ":entry:"F"      EXECUTE CMD CAPTURING JUNK      CMD = "SP-EDIT ":entry:" MUD"    CASE action = "print"      EXECUTE "SP-KILL ":entry:"F" CAPTURING JUNK      IF queue # "" THEN        EXECUTE "SP-ASSIGN F":queue CAPTURING JUNK      END      CMD = "SP-EDIT ":entry:" MSRU"    CASE action = "release"      CMD = "SP-KILL ":entry:"F"    CASE action = "downloadtxt"      CRT "Content-Type: text/plain"      CRT "Content-Disposition: attachment;filename=":entry:".txt"      CRT      SESSION$CONTENT.SENT = 1      CALL SBBP.SB.GETJOB(entry,1,"")      STOP      CASE 1      CMD = ''  END CASE  IF CMD # "" THEN    EXECUTE CMD CAPTURING JUNK  ENDNEXT EX*CMD.SUFF = ""IF entrystart # "" THEN  CMD.SUFF = entrystart:"-9999 "ENDIF owner # "" THEN  CMD.SUFF := "'":owner:"' "END*EXECUTE "LISTPEQS ":CMD.SUFF CAPTURING PEQS.OUT*CRT "Content-Type: text/html"CRTSESSION$CONTENT.SENT = 1*READ FORM.DATA FROM F.SBBP.FORMS, 'listpeqs.html' ELSE FORM.DATA = ''FORM.HDR.POS = INDEX( FORM.DATA, '[QUEUE]', 1 )-1PART1 = FORM.DATA[1,FORM.HDR.POS]CONVERT @AM TO CHAR(13) IN PART1CRT PART1PART2 = FORM.DATA[FORM.HDR.POS+7,99999]XML = ""*LINES.SENT = 0LINES = DCOUNT( PEQS.OUT, @AM )FOR PL = 1 TO LINES-1  LINE = PEQS.OUT<PL>  GOOD.LINE = 1  CALL SUB.SB.PARSEPEQS(LINE,PINFO,previewsize,GET.PREVIEW,GOOD.LINE)  * Filtering  BEGIN CASE    CASE NOT(GOOD.LINE) ; NULL    CASE PINFO<P.JOB> = "" ; GOOD.LINE = 0    CASE begindate # "" AND enddate # ""      IF PINFO<P.DATE> < begindate OR PINFO<P.DATE> > enddate THEN GOOD.LINE = 0    CASE port # "" AND PINFO<P.PORT> # port ; GOOD.LINE = 0    CASE queue # "" AND	 PINFO<P.QUEUE> # queue ; GOOD.LINE = 0    CASE 1      NULL  END CASE  IF GOOD.LINE THEN    *     IF searchstring # "" THEN      JOB = PINFO<P.JOB>      GOSUB SEARCH.JOB    END  END  IF GOOD.LINE THEN    LINES.SENT += 1    *    PDATE = OCONV(PINFO<P.DATE>,'D2/')    PTIME = OCONV(PINFO<P.TIME>,'MTS')    *    IF LINES.SENT / 2 = INT(LINES.SENT/2) THEN      XML<-1> = '<tr class="even">'    END ELSE      XML<-1> = '<tr class="odd">'    END    XML<-1> = '<td><input type="checkbox" name="entries[]" value="':PINFO<P.JOB>:'" /></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?entry=':PINFO<P.JOB>:'&action=downloadtxt">':PINFO<P.JOB>:'</a></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?queue=':PINFO<P.QUEUE>:'">':PINFO<P.QUEUE>:'</a></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?owner=':PINFO<P.OWNER>:'">':PINFO<P.OWNER>:'</a></td>'    XML<-1> = '<td><a href="/dbc/SBBP.SB.LISTPEQS?port=':PINFO<P.PORT>:'">':PINFO<P.PORT>:'</a></td>'    XML<-1> = '<td align="right">':OCONV(PINFO<P.BYTES>/1000,'MD,'):'</td>'    XML<-1> = '<td>':OCONV(PINFO<P.DATE>,'D2/'):' ':OCONV(PINFO<P.TIME>,'MTS'):'</td>'    XML<-1> = '<td>':PINFO<P.STATUS>:'</td>'    XML<-1> = \<td><a href="#" title="Print Job" onclick="Effect.SlideDown('printDialog\:PINFO<P.JOB>:\',{duration:0.25}); return false;"><img src="/db/images/button_print.gif"/></a>\*    XML<-1> = \<a href="/viewjob.php?entry=\:PINFO<P.JOB>:\&date=\:PDATE:\&time=\:PTIME:\" title="View Job"><img src="/db/images/button_preview.gif"/></a>\    XML<-1> = \<a href="/dbc/SBBP.SB.LISTPEQS?action=downloadtxt&entry=\:PINFO<P.JOB>:\&date=\:PDATE:\&time=\:PTIME:\" title="Download Job as TXT File"><img src="/db/images/button_downloadtxt.gif"/></a>\    XML<-1> = \<a href="/dbc/SBBP.SB.LISTPEQS?action=delete&entry=\:PINFO<P.JOB>:\&queue=&port=&owner=&searchstring=&begindate=&enddate=&search_type=" title="Delete Job" class="deletejob" onclick="return confirm('Are you sure you want to delete this job?')"><img src="/db/images/button_delete.gif"/></a>\    XML<-1> = '<div style="position:relative;">'    XML<-1> = '<div class="printDialog" id="printDialog':PINFO<P.JOB>:'" style="display:none;">'    XML<-1> = \<div> Queue <input type="text" value="0" style="width:40px;" maxlength="4" id="overrideQueue\:PINFO<P.JOB>:\"/>\    XML<-1> = \<span class="button"><button type="button" onclick="document.location='/dbc/SBBP.SB.LISTPEQS?action=print&entry=\:PINFO<P.JOB>:\&overridequeue='+$F('overrideQueue\:PINFO<P.JOB>:\')+'&queue=&port=&owner=&searchstring=&begindate=&enddate=&search_type='">Print</button></span>\    XML<-1> = \<span class="button"><button type="button" onclick="Effect.SlideUp('printDialog\:PINFO<P.JOB>:\',{duration:0.25});return false;">Cancel</button></span>\    XML<-1> = '</div> </div>'    XML<-1> = '<pre class="preview">'    XML<-1> = PINFO<P.PREVIEW>    XML<-1> = '</pre> </div> </td> </tr>'    CALL WEB.SEND(XML)    XML = ''    *    *IF LINES.SENT >= entries AND entries # "" THEN EXIT  ENDNEXT PLCALL WEB.SEND(PART2)STOP*SEARCH.JOB: * Search the job for the string*START.POS = 1GOOD.LINE = 0SEARCHBUFFSIZE = 15000LOOP  BUFFER = ""*  PRINT "Searching job # ":JOB:" ":START.POS:",":SEARCHBUFFSIZE  CALL SUB.SB.GET.ENTRY(JOB,START.POS,SEARCHBUFFSIZE,BUFFER,ERR)  IF NOT(ERR) THEN    FOUND.POS = INDEX( BUFFER, searchstring, 1 )    IF FOUND.POS THEN      BACK.UP = FOUND.POS - INT(previewsize/2) - 140      START.POS = START.POS + BACK.UP      CALL SUB.SB.GET.ENTRY(JOB,START.POS,previewsize,L.PREVIEW,ERR)      FOUND.NL = 0      FOR NL = 1 TO 250 UNTIL FOUND.NL      	CH = L.PREVIEW[NL,1]      	IF CH = CHAR(10) OR CH = CHAR(13) THEN      	  L.PREVIEW = L.PREVIEW[NL,previewsize]      	  FOUND.NL = 1      	END      NEXT NL      PINFO<P.PREVIEW> = L.PREVIEW      GOOD.LINE = 1    END ELSE      START.POS = START.POS + SEARCHBUFFSIZE - LEN(searchstring)    END  END ELSE EXITUNTIL ERR OR GOOD.LINE OR BUFFER = "" DO REPEATRETURN04E3A6MVDB.SUBS0c0000BE6SUB.TABLE.LIC.USED0c2SUBROUTINE SUB.TABLE.LIC.USED** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here** Modified by Peter Schellenbach of Zumasys 06-08-15:*  Changed test of ENUM after EXECUTE to test SYSTEM(11) instead.*W$TITLE = "Dashboard Users Logged On"     ;* Title for widget title barW$TYPE = "TABLE"                ;* Filled in by editorW$WIDTH = 2                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*OPEN 'WEB.SESSION' TO F.WEB.SESSION ELSE RETURN*IF WIDGET.USER.DATA(1) # "" THEN DELETE F.WEB.SESSION, WIDGET.USER.DATA(1)WIDGET.USER.DATA(1) = ""*TBL=""EXECUTE 'SELECT WEB.SESSION' RETURNING ENUM CAPTURING ETXT*PJS 06-08-15*IF ENUM[1,3]="404" ELSE RETURNIF SYSTEM(11) = 0 THEN RETURN ; *PJS 06-08-15*LOOP READNEXT ID ELSE ID="\\EOF"UNTIL ID="\\EOF" DO READ REC FROM F.WEB.SESSION,ID THEN   LOCATE "userid" IN REC<1> SETTING IX THEN     UID=REC<2,IX>     LOCATE "LastSessionAccess" IN REC<1> SETTING IX THEN       LSA=REC<2,IX>     END ELSE       LSA=00000*00000     END     LSA.DT=FIELD(LSA,"*",1)     LSA.TM=FIELD(LSA,"*",2)     LGN.DT=REC<3>     LGN.TM=REC<4>     LOCARG=LGN.DT:"*":LGN.TM:"*":LSA     LOCATE LOCARG IN TBL<1> BY "AR" SETTING IX ELSE NULL     TBL=INSERT(TBL,1,IX;LOCARG)     TBL=INSERT(TBL,2,IX;UID)     TBL=INSERT(TBL,3,IX;ID)   END ENDREPEAT** Set up column labelsW$TABLE.COL.LABELS<1,1> = "User Login ID"W$TABLE.COL.LABELS<1,2> = "Session#"W$TABLE.COL.LABELS<1,3> = "Login Date"W$TABLE.COL.LABELS<1,4> = "Login Time"W$TABLE.COL.LABELS<1,5> = "Last Act Date"W$TABLE.COL.LABELS<1,6> = "Last Act Time"** Column justification = left, right, centerW$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "right"W$TABLE.COL.JUST<1,3> = "right"W$TABLE.COL.JUST<1,4> = "right"W$TABLE.COL.JUST<1,5> = "right"W$TABLE.COL.JUST<1,6> = "right"** Table RowsTBL.MAX = DCOUNT(TBL<1>,CHAR(253))FOR ROW = 1 TO TBL.MAX W$TABLE.DATA<ROW,1> = TBL<2,ROW> IF TBL<3,ROW> = SESSION$ID THEN W$TABLE.DATA<ROW,2> = "*":ROW ELSE W$TABLE.DATA<ROW,2> = ROW W$TABLE.DATA<ROW,3> = OCONV(FIELD(TBL<1,ROW>,"*",1),"D2/") W$TABLE.DATA<ROW,4> = OCONV(FIELD(TBL<1,ROW>,"*",2),"MTS") W$TABLE.DATA<ROW,5> = OCONV(FIELD(TBL<1,ROW>,"*",3),"D2/") W$TABLE.DATA<ROW,6> = OCONV(FIELD(TBL<1,ROW>,"*",4),"MTS")NEXT ROW** TotalsW$TABLE.TOTALS<1,3> = TBL.MAXW$TABLE.TOTALS<1,4> = "Consumed"LIC.AVAIL = "Unlimited"IF ASSIGNED(G$LICENSE.COUNT) THEN IF NUM(G$LICENSE.COUNT) THEN   LIC.AVAIL = G$LICENSE.COUNT - TBL.MAX ENDENDW$TABLE.TOTALS<1,5> = LIC.AVAILW$TABLE.TOTALS<1,6> = "Available"*W$INPUT.PROMPT<1> = "Sessions"W$INPUT.TYPE<1> = "SELECT"W$INPUT.DEFAULT<1> = 0W$INPUT.UDPOS<1> = 1W$INPUT.BUTTON<1> = "Log Off"W$INPUT.SELOPTS<1> = "Nobody"W$INPUT.SELVALS<1> = 0FOR ROW = 1 TO TBL.MAX IF SESSION$ID = TBL<3,ROW> ELSE   W$INPUT.SELOPTS<1,-1> = ROW:" ":TBL<2,ROW>   W$INPUT.SELVALS<1,-1> = TBL<3,ROW> ENDNEXT ROW*RETURN002FD3MV.DEMO.MAP0c2    SUBROUTINE MV.DEMO.MAP* @(#) MV.DEMO.MAP Ported to jBASE 17:55:31  08 JUL 2015*  The following variable names were converted*   TABLE* ** Copyright (c) 2010 SB, Inc. All rights reserved.** 6-1-15 ZUMASYS CHANGED MAP ID DELIMITER TO # INSTEAD OF *    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Data Evolution - Demographics"    W$TYPE = "MAP:USASouthWestRegion"    W$WIDTH = 3*    IF G$QUERYMODE THEN RETURN*    TYPE.ID=WIDGET.USER.DATA(1)    BEGIN CASE    CASE TYPE.ID="04"        W$TYPE="MAP:Arizona"        WIDGET.USER.DATA(6)="Arizona"        ACT.FACT=.08    CASE TYPE.ID="06"        W$TYPE="MAP:California"        WIDGET.USER.DATA(6)="California"        ACT.FACT=.08    CASE TYPE.ID="32"        W$TYPE="MAP:Nevada"        WIDGET.USER.DATA(6)="Nevada"        ACT.FACT=.08    CASE TYPE.ID="49"        W$TYPE="MAP:Utah"        WIDGET.USER.DATA(6)="Utah"        ACT.FACT=.08    CASE 1        ACT.FACT=1    END CASE***_____Set Widget Variables_____    IF WIDGET.USER.DATA(4)="" THEN WIDGET.USER.DATA(4)="ALL"    IF WIDGET.USER.DATA(5)="" THEN WIDGET.USER.DATA(5)="Inquiry"**_____Open Files_____    OPEN 'Territories' TO F.TERR ELSE ABORT 201,'Territories'    OPEN 'SalesSum' TO F.SSUM ELSE ABORT 201,'SalesSum'    OPEN 'SalesReps' TO F.SREP ELSE ABORT 201,'SalesReps'**_____Set Period_____    WYR=OCONV(DATE(),"DY")    WMO=OCONV(DATE(),"DM") - 1    IF WMO<1 THEN WYR-=1;WMO=12    CAL.PERIOD=WYR'R%4':WMO'R%2'    IF WIDGET.USER.DATA(3) MATCHES "6N" THEN        END.PERIOD=WIDGET.USER.DATA(3)        WYR=END.PERIOD[1,4]        WMO=END.PERIOD[5,2]    END ELSE        END.PERIOD=CAL.PERIOD        WIDGET.USER.DATA(3)=END.PERIOD    END    WMO-=5    IF WMO<1 THEN WYR-=1; WMO+=12    BEG.PERIOD=WYR'R%4':WMO'R%2'**_____Set Up Input Prompts_____    W$INPUT.PROMPT<1>="Region"    W$INPUT.TYPE<1>="SELECT"    W$INPUT.SELOPTS<1,1>="SouthWest"    W$INPUT.SELVALS<1,1>=""    W$INPUT.SELOPTS<1,2>="California"    W$INPUT.SELVALS<1,2>="06"    W$INPUT.SELOPTS<1,3>="Nevada"    W$INPUT.SELVALS<1,3>="32"    W$INPUT.SELOPTS<1,4>="Utah"    W$INPUT.SELVALS<1,4>="49"    W$INPUT.SELOPTS<1,5>="Arizona"    W$INPUT.SELVALS<1,5>="04"    W$INPUT.UDPOS<1>=1    W$INPUT.DEFAULT<1>=WIDGET.USER.DATA(1)    W$INPUT.PROMPT<3>="Ending Period"    W$INPUT.TYPE<3>="SELECT"    WYR=CAL.PERIOD[1,4]-2    WMO=CAL.PERIOD[5,2]+1    IF WMO>12 THEN WYR+=1; WMO=1    SEL.PERIOD=WYR'R%4':WMO'R%2'    FOR PERIOD=CAL.PERIOD TO SEL.PERIOD STEP -1        WYR=PERIOD[1,4]        WMO=PERIOD[5,2]        IF WMO<1 THEN            WYR-=1            WMO=12            PERIOD=WYR'R%4':WMO'R%2'        END        WMO=OCONV(WMO*30-15,"DMA")[1,3]        WPERIOD=WMO:" ":WYR        W$INPUT.SELOPTS<3,-1>=WPERIOD        W$INPUT.SELVALS<3,-1>=PERIOD    NEXT PERIOD    W$INPUT.UDPOS<3>=3    W$INPUT.DEFAULT<3>=WIDGET.USER.DATA(3)    W$INPUT.PROMPT<4>="Sales Rep"    W$INPUT.TYPE<4>="SELECT"    W$INPUT.SELOPTS<4>="Everyone"    W$INPUT.SELVALS<4>="ALL"    SELECT F.SREP    SALESREPS=""    LOOP        READNEXT SREPINIT ELSE SREPINIT="\\EOF"    UNTIL SREPINIT="\\EOF" DO        READ SREPITEM FROM F.SREP,SREPINIT THEN            LOCATE SREPINIT IN SALESREPS<1> BY "AL" SETTING IX ELSE                SALESREPS=INSERT(SALESREPS,1,IX;SREPINIT)                SALESREPS=INSERT(SALESREPS,2,IX;SREPITEM<1>)            END        END    REPEAT    SREP.MAX=DCOUNT(SALESREPS<1>,CHAR(253))    FOR RVX=1 TO SREP.MAX        W$INPUT.SELOPTS<4,-1>=SALESREPS<2,RVX>        W$INPUT.SELVALS<4,-1>=SALESREPS<1,RVX>    NEXT RVX    W$INPUT.UDPOS<4>=4    W$INPUT.DEFAULT<4>=WIDGET.USER.DATA(4)    W$INPUT.PROMPT<5>="Demographic"    W$INPUT.TYPE<5>="SELECT"    W$INPUT.SELOPTS<5,1>="Inquiries"    W$INPUT.SELVALS<5,1>="Inquiry"    W$INPUT.SELOPTS<5,2>="Demos"    W$INPUT.SELVALS<5,2>="Demo"    W$INPUT.SELOPTS<5,3>="Quotes"    W$INPUT.SELVALS<5,3>="Quote"    W$INPUT.SELOPTS<5,4>="Orders"    W$INPUT.SELVALS<5,4>="Order"    W$INPUT.UDPOS<5>=5    W$INPUT.DEFAULT<5>=WIDGET.USER.DATA(5)    W$INPUT.BUTTON="Apply"**    STATES<1,1>="USASouthWestRegion*04"    STATES<1,2>="USASouthWestRegion*06"    STATES<1,3>="USASouthWestRegion*32"    STATES<1,4>="USASouthWestRegion*49"    COUNTIES=""*    W$TITLE = "Data Evolution - ":WIDGET.USER.DATA(5):" Demographics"    BEGIN CASE    CASE WIDGET.USER.DATA(5)="Inquiry"; AX=6 ;ACTIVE=1000*ACT.FACT    CASE WIDGET.USER.DATA(5)="Demo"   ; AX=7 ;ACTIVE=500*ACT.FACT    CASE WIDGET.USER.DATA(5)="Quote"  ; AX=8 ;ACTIVE=300*ACT.FACT    CASE WIDGET.USER.DATA(5)="Order"  ; AX=9 ;ACTIVE=100*ACT.FACT    END CASE*    TERRITORIES = ""    SELECT F.TERR    LOOP        READNEXT TERR ELSE TERR="\\EOF"    UNTIL TERR="\\EOF" DO        READ TERRITEM FROM F.TERR,TERR THEN            IF WIDGET.USER.DATA(4)="ALL" OR WIDGET.USER.DATA(4)=TERRITEM<2> THEN                LOCATE TERR IN TERRITORIES<1> BY "AR" SETTING IX ELSE                    TERRITORIES=INSERT(TERRITORIES,1,IX;TERR)                    TERRITORIES=INSERT(TERRITORIES,2,IX;TERRITEM<1>)                    TERRITORIES=INSERT(TERRITORIES,3,IX;TERRITEM<2>)                    TERRITORIES=INSERT(TERRITORIES,4,IX;TERRITEM<3>)                    IF TYPE.ID="" THEN                        MAP.IDS=FIELD(TERRITEM<4,1>,"*",1)[1,2]                        BEGIN CASE                        CASE MAP.IDS="Ar"; MAP.IDS="USASouthWestRegion*04"                        CASE MAP.IDS="Ca"; MAP.IDS="USASouthWestRegion*06"                        CASE MAP.IDS="Ne"; MAP.IDS="USASouthWestRegion*32"                        CASE MAP.IDS="Ut"; MAP.IDS="USASouthWestRegion*49"                        END CASE                        TERRITORIES=INSERT(TERRITORIES,5,IX;MAP.IDS)                    END ELSE                        CMAX=DCOUNT(TERRITEM<4>,CHAR(253))                        FOR CX=1 TO CMAX                            IF WIDGET.USER.DATA(6)=FIELD(TERRITEM<4,CX>,"*",1) THEN                                COUNTIES<1,-1>=TERRITEM<4,CX>                            END                        NEXT CX                    END                END            END        END    REPEAT*    TERR.MAX=DCOUNT(TERRITORIES<1>,CHAR(253))    IF WIDGET.USER.DATA(4)="ALL" THEN        SNAME="Everyone"    END ELSE        READV SNAME FROM F.SREP,WIDGET.USER.DATA(4),1 ELSE            SNAME="Unknown"        END    END*    QTYS=""    FOR PERIOD=BEG.PERIOD TO END.PERIOD        WYR=PERIOD[1,4]        WMO=PERIOD[5,2]        IF WMO>12 THEN PERIOD=(WYR+1)'R%4':"01"        FOR TERRX=1 TO TERR.MAX            TERR=TERRITORIES<1,TERRX>            READ SALES FROM F.SSUM,TERR:"*":PERIOD THEN                IF TYPE.ID="" THEN                    Table=TERRITORIES<5,TERRX>                    Table<2>=SUM(SALES<AX>)                    TBL.MAX=DCOUNT(Table<1>,CHAR(253))                    FOR TBLX=1 TO TBL.MAX                        LOCATE Table<1,TBLX> IN STATES<1> SETTING TX THEN                            QTYS<TX>+=Table<2,TBLX>                        END                    NEXT TBLX                END ELSE                    Table=SALES<10>                    Table<2>=SALES<AX>                    TBL.MAX=DCOUNT(Table<1>,CHAR(253))                    FOR TBLX=1 TO TBL.MAX                        LOCATE Table<1,TBLX> IN COUNTIES<1> SETTING TX THEN                            QTYS<TX>+=Table<2,TBLX>                        END                    NEXT TBLX                END            END        NEXT TERRX    NEXT PERIOD*    OPEN 'MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'*    IF TYPE.ID="" THEN        MAX=DCOUNT(STATES,CHAR(253))        FOR X=1 TO MAX            ID=STATES<1,X>            CONVERT '*' TO '#' IN ID    ;*6-1-15*            READ I FROM F.MVDB.MAP.DATA,ID THEN*6-1-15*      W$MAP.IDS<1,-1> = FIELD(ID,'*',2)                W$MAP.IDS<1,-1> = FIELD(ID,'#',2) ;*6-1-15*                W$MAP.VALUES<1,-1> = QTYS<X>+0                W$MAP.VALUE.TOOLTEXT<1,-1> := I<2>:' (':(QTYS<X>+0):')'                W$MAP.VALUE.DD<1,-1> = 1            END        NEXT X    END ELSE        MAX=DCOUNT(COUNTIES,CHAR(253))        FOR X=1 TO MAX            ID=COUNTIES<1,X>            CONVERT '*' TO '#' IN ID    ;*6-1-15*            READ I FROM F.MVDB.MAP.DATA,ID THEN*6-1-15*      W$MAP.IDS<1,-1> = FIELD(ID,'*',2)                W$MAP.IDS<1,-1> = FIELD(ID,'#',2) ;*6-1-15*                W$MAP.VALUES<1,-1> = QTYS<X>+0                W$MAP.VALUE.TOOLTEXT<1,-1> := I<2>:' (':(QTYS<X>+0):')'            END        NEXT X    END*    W$MAP.RANGE.NAME<1,1> = "No Activity"    W$MAP.RANGE.COLOR<1,1> = "#404040"    W$MAP.RANGE.NAME<1,2> = "Light Activity"    W$MAP.RANGE.COLOR<1,2> = "#4682B4"    W$MAP.RANGE.NAME<1,3> = "Moderate Activity"    W$MAP.RANGE.COLOR<1,3> = "#FF8C00"    W$MAP.RANGE.NAME<1,4> = "Heavy Activity"    W$MAP.RANGE.COLOR<1,4> = "#FF0000"*    W$MAP.RANGE.LOW<1,1> = 0    W$MAP.RANGE.HIGH<1,1> = 1    W$MAP.RANGE.LOW<1,2> = 1    W$MAP.RANGE.HIGH<1,2> = ACTIVE    W$MAP.RANGE.LOW<1,3> = ACTIVE    W$MAP.RANGE.HIGH<1,3> = ACTIVE*3    W$MAP.RANGE.LOW<1,4> = ACTIVE*3    W$MAP.RANGE.HIGH<1,4> = "999999"*    W$CHART.OPTIONS<-1> = 'animation="0"'    W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'    W$CHART.OPTIONS<-1> = 'legendShadow="1"'    W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'*    W$LINK.LABEL<1,1> = "California"    W$LINK.UD.VAL<1,1,1> = "06"    W$LINK.UD.POS<1,1,1> = "1"    W$LINK.UD.VAL<1,1,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,1,2> = "2"    W$LINK.UD.VAL<1,1,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,1,3> = "3"    W$LINK.UD.VAL<1,1,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,1,4> = "4"    W$LINK.UD.VAL<1,1,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,1,5> = "5"    W$LINK.UD.VAL<1,1,6> = "California"    W$LINK.UD.POS<1,1,6> = "6"    W$LINK.LOCATION<1,1> = "2"    W$LINK.DD.WIDGET<1,1> = "MV Demo Map"*    W$LINK.LABEL<1,2> = "Nevada"    W$LINK.UD.VAL<1,2,1> = "32"    W$LINK.UD.POS<1,2,1> = "1"    W$LINK.UD.VAL<1,2,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,2,2> = "2"    W$LINK.UD.VAL<1,2,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,2,3> = "3"    W$LINK.UD.VAL<1,2,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,2,4> = "4"    W$LINK.UD.VAL<1,2,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,2,5> = "5"    W$LINK.UD.VAL<1,2,6> = "Nevada"    W$LINK.UD.POS<1,2,6> = "6"    W$LINK.LOCATION<1,2> = "2"    W$LINK.DD.WIDGET<1,2> = "MV Demo Map"*    W$LINK.LABEL<1,3> = "Utah"    W$LINK.UD.VAL<1,3,1> = "49"    W$LINK.UD.POS<1,3,1> = "1"    W$LINK.UD.VAL<1,3,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,3,2> = "2"    W$LINK.UD.VAL<1,3,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,3,3> = "3"    W$LINK.UD.VAL<1,3,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,3,4> = "4"    W$LINK.UD.VAL<1,3,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,3,5> = "5"    W$LINK.UD.VAL<1,3,6> = "Utah"    W$LINK.UD.POS<1,3,6> = "6"    W$LINK.LOCATION<1,3> = "2"    W$LINK.DD.WIDGET<1,3> = "MV Demo Map"*    W$LINK.LABEL<1,4> = "Arizona"    W$LINK.UD.VAL<1,4,1> = "04"    W$LINK.UD.POS<1,4,1> = "1"    W$LINK.UD.VAL<1,4,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,4,2> = "2"    W$LINK.UD.VAL<1,4,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,4,3> = "3"    W$LINK.UD.VAL<1,4,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,4,4> = "4"    W$LINK.UD.VAL<1,4,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,4,5> = "5"    W$LINK.UD.VAL<1,4,6> = "Arizona"    W$LINK.UD.POS<1,4,6> = "6"    W$LINK.LOCATION<1,4> = "2"    W$LINK.DD.WIDGET<1,4> = "MV Demo Map"*    W$LINK.LABEL<1,5> = "SouthWest Region"    W$LINK.UD.VAL<1,5,1> = ""    W$LINK.UD.POS<1,5,1> = "1"    W$LINK.UD.VAL<1,5,2> = WIDGET.USER.DATA(2)    W$LINK.UD.POS<1,5,2> = "2"    W$LINK.UD.VAL<1,5,3> = WIDGET.USER.DATA(3)    W$LINK.UD.POS<1,5,3> = "3"    W$LINK.UD.VAL<1,5,4> = WIDGET.USER.DATA(4)    W$LINK.UD.POS<1,5,4> = "4"    W$LINK.UD.VAL<1,5,5> = WIDGET.USER.DATA(5)    W$LINK.UD.POS<1,5,5> = "5"    W$LINK.UD.VAL<1,5,6> = ""    W$LINK.UD.POS<1,5,6> = "6"    W$LINK.LOCATION<1,5> = "2"    W$LINK.DD.WIDGET<1,5> = "MV Demo Map"*    INCLUDE WBPD SOURCE.VIEW.ICON*    RETURN000365SUB.SOURCE.VIEW0c2SUBROUTINE SUB.SOURCE.VIEW** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: View BASIC Source Code**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TEXT"W$TITLE = "Source: ":WIDGET.USER.DATA(1):", ":WIDGET.USER.DATA(2)W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN WIDGET.USER.DATA(1) TO F.FILEVAR THEN  READ REC FROM F.FILEVAR, WIDGET.USER.DATA(2) ELSE REC = '"':WIDGET.USER.DATA(2):'" not on file.'END ELSE REC = '"':WIDGET.USER.DATA(1):'" is not a valid file name.'*W$TEXT.DATA = REC*W$LINK.ICON<1> = "script_edit.png"W$LINK.ICON.TXT<1> = "Edit BASIC Source"W$LINK.URL<1> = "/dbc/MVDB.WEB.ED?ed_file=":WIDGET.USER.DATA(1):"&ed_item=":WIDGET.USER.DATA(2)W$LINK.URL.OPTS<1> = 'target="ED_':WIDGET.USER.DATA(1):"_":WIDGET.USER.DATA(2):'"'W$LINK.LOCATION<1> = "C"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000405SUB.DEMO.DAYS.TO.PAY.PIE0c2SUBROUTINE SUB.DEMO.DAYS.TO.PAY.PIE**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FC2DPIE"W$WIDTH = 3W$TITLE = 'Chart - Days To Pay '*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEYEAR=WIDGET.USER.DATA(1)OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''LOCATE YEAR IN REC<67> SETTING YEAR.POS ELSE YEAR.POS=1YEAR.POS=4-YEAR.POS;   * NEED TO INVERT TO YYYY, YYYY-1, YYYY-2DAYS.POS=YEAR.POS+53W$TITLE:=YEARDAYS.TYPES='0 - 30 Days,31 - 60 Days,61 - 90 Days,Over 90 Days'CONVERT ',' TO CHAR(253) IN DAYS.TYPESPERIOD.PCTS=REC<DAYS.POS>MAX.DAYS.TYPES=DCOUNT(DAYS.TYPES,CHAR(253))FOR DAYS.CNTR = 1 TO MAX.DAYS.TYPES   PCT=PERIOD.PCTS<1,DAYS.CNTR>   W$PIE.LABELS<1,DAYS.CNTR>=DAYS.TYPES<1,DAYS.CNTR>   W$PIE.VALUES<1,DAYS.CNTR>=PCT NEXT DAYS.CNTRW$PIE.CAPTION='Days To Pay By Period For ':YEAR***RETURN00106BSUB.DEMO.AGAUGE0c2SUBROUTINE SUB.DEMO.AGAUGE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Angular Gauge widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Angular Gauge Chart Demo - Sales Volume"W$TYPE = "HLINEARGAUGE"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN  W$TYPE = WIDGET.USER.DATA(1)END ELSE WIDGET.USER.DATA(1) = "HLINEARGAUGE"IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1PALETTE = WIDGET.USER.DATA(2)IF WIDGET.USER.DATA(3) = "" THEN WIDGET.USER.DATA(3) = 725000CHART.VALUE = WIDGET.USER.DATA(3)IF WIDGET.USER.DATA(4) = "" THEN WIDGET.USER.DATA(4) = W$WIDTHW$WIDTH = WIDGET.USER.DATA(4)IF WIDGET.USER.DATA(5) = "" THEN WIDGET.USER.DATA(5) = 1NUM.CHARTS = WIDGET.USER.DATA(5);* Number of single-value meter style charts to produce*BEGIN CASE  CASE W$TYPE = "HLINEARGAUGE"    W$TITLE = "Linear"  CASE W$TYPE = "ANGULARGAUGE"    W$TITLE = "Angular"  CASE W$TYPE = "HLED"    W$TITLE = "Horizontal LED"  CASE W$TYPE = "VLED"    W$TITLE = "Vertical LED"  CASE W$TYPE = "THERMOMETER"    W$TITLE = "Thermometer"  CASE W$TYPE = "CYLINDER"    W$TITLE = "Cylinder"  CASE W$TYPE = "BULB"    W$TITLE = "Bulb"END CASEW$TITLE := " Gauge Chart Demo - Sales Volume"W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = 800000*W$FW.COLOR.RANGE<1,1> = 0W$FW.COLOR.RANGE<2,1> = 300000W$FW.COLOR.RANGE<3,1> = COLOR$RED*W$FW.COLOR.RANGE<1,2> = 300000W$FW.COLOR.RANGE<2,2> = 550000W$FW.COLOR.RANGE<3,2> = COLOR$YELLOW*W$FW.COLOR.RANGE<1,3> = 550000W$FW.COLOR.RANGE<2,3> = 600000W$FW.COLOR.RANGE<3,3> = COLOR$GREEN*W$FW.COLOR.RANGE<1,4> = 600000W$FW.COLOR.RANGE<2,4> = 800000W$FW.COLOR.RANGE<3,4> = COLOR$SILVER*IF WIDGET.USER.DATA(1) # "HLINEARGAUGE" AND WIDGET.USER.DATA(1) # "ANGULARGAUGE" THEN  * Create multiple values to make an array of charts  FOR N = 1 TO NUM.CHARTS    W$FW.METER.VALUE<1,N> = INT(CHART.VALUE*(N/NUM.CHARTS))  NEXT N  W$FW.THERMOMETER.COLOR = COLOR$REDEND ELSE  W$FW.DIAL.VALUES<1> = CHART.VALUE  W$FW.TRENDPOINT.VALUES<1,1> = 675000 ;* Low-limit of trendpoint  W$FW.TRENDPOINT.VALUES<2,1> = 685000 ;* High-limit of trendpoint  W$FW.TRENDPOINT.LABELS<1,1> = "Last Year"  W$FW.TRENDPOINT.OPTS<1,1> = 'color="':COLOR$GREEN:'" useMarker="1"'  *  W$FW.TRENDPOINT.VALUES<1,2> = 475000  W$FW.TRENDPOINT.LABELS<1,2> = "2 yrs ago"  W$FW.TRENDPOINT.OPTS<1,2> = 'color="':COLOR$BLACK:'" useMarker="1"'  *END** Set up a drill-down widget call*W$FW.DD.WIDGET<1,1> = "Drilldown Demo"W$FW.DD.UD.POS<1,1,1> = 1W$FW.DD.UD.VAL<1,1,1> = W$FW.METER.VALUE:W$FW.DIAL.VALUES<1>W$FW.DD.UD.POS<1,1,2> = 2W$FW.DD.UD.VAL<1,1,2> = WIDGET.USER.DATA(1)*W$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""*W$FW.CHART.PALETTE = PALETTE*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* Let it calculate thisW$FW.TICKMARKS<5> = 4 ;* 4 minor tickmarks between the major ones*W$INPUT.PROMPT = "Gauge Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "Linear":@VM:"Angular":@VM:"Horizontal LED":@VM:"Vertical LED":@VM:"Thermometer":@VM:"Cylinder":@VM:"Bulb"W$INPUT.SELVALS = "HLINEARGAUGE":@VM:"ANGULARGAUGE":@VM:"HLED":@VM:"VLED":@VM:"THERMOMETER":@VM:"CYLINDER":@VM:"BULB"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*W$INPUT.PROMPT<2> = "Palette"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*W$INPUT.PROMPT<3> = "Chart Value"W$INPUT.TYPE<3> = "TEXT"W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = CHART.VALUE*W$INPUT.PROMPT<4> = "Widget Width"W$INPUT.TYPE<4> = "SELECT"W$INPUT.SELOPTS<4> = "1 - Narrow":@VM:"2 - Medium":@VM:"3 - Full Width"W$INPUT.SELVALS<4> = "1":@VM:"2":@VM:"3"W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = W$WIDTH**W$INPUT.PROMPT<5> = "# of Charts"*W$INPUT.TYPE<5> = "TEXT"*W$INPUT.UDPOS<5> = 5*W$INPUT.DEFAULT<5> = NUM.CHARTS*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0003E1SUB.DEMO.PYRAMID0c2SUBROUTINE SUB.DEMO.PYRAMID** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Pyramid widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Pyramid Demo - Errors by Reason"W$TYPE = "PYRAMID"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*CATEG = ""CATEG<1> = 19CATEG<2> = 20CATEG<3> = 36CATEG<4> = 44*CATEG.NAMES = ''CATEG.NAMES<1> = "Shipping"CATEG.NAMES<2> = "Bad Choices"CATEG.NAMES<3> = "Errors"CATEG.NAMES<4> = "Bad Material"*W$FW.CAPTION = "Errors by Reason"W$FW.SUBCAPTION = "2008 Shipments"W$CHART.OPTIONS<-1> = "isSliced='1'"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$FW.LABELS<1,N> = CATEG.NAMES<N>  W$FW.VALUES<1,N> = CATEG<N>  *  * Set up a drill-down widget call for each category  *  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = CATEG.NAMES<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = CATEG<N>NEXT N*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0007E7SUB.SHOW.VARS0c2SUBROUTINE SUB.SHOW.VARS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Display global values**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TABLE"W$TITLE = "Variables"*IF G$QUERYMODE = 1 THEN RETURN*W$LINK.LOCATION<1,1> = 2W$LINK.LOCATION<1,2> = 1*W$LINK.LABEL<1,2> = "Do Nothing"W$LINK.UD.POS<1,2> = "5"W$LINK.UD.VAL<1,2> = "XXX"*IF WIDGET.USER.DATA(1) = "1" THEN  W$LINK.LABEL<1,1> = "Show"  W$LINK.UD.POS<1,1> = "1"  W$LINK.UD.VAL<1,1> = "0"  RETURNENDW$LINK.LABEL<1,1> = "Hide"W$LINK.UD.POS<1,1> = "1"W$LINK.UD.VAL<1,1> = "1"*W$TABLE.COL.LABELS<1,1> = "Variable"W$TABLE.COL.LABELS<1,2> = "Type"W$TABLE.COL.LABELS<1,3> = "Value"*W$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "left"W$TABLE.COL.JUST<1,3> = "left"*TYPE = "GLOBAL"ROW = 0NAME = "G$USERID" ; VAL = G$USERID ; GOSUB ADDVARNAME = "G$CURRENT.DB" ; VAL = G$CURRENT.DB ; GOSUB ADDVARNAME = "G$LOGIN.DATE" ; VAL = G$LOGIN.DATE ; GOSUB ADDVARNAME = "G$LOGIN.TIME" ; VAL = G$LOGIN.TIME ; GOSUB ADDVARNAME = "G$WIDGET.NAME" ; VAL = G$WIDGET.NAME ; GOSUB ADDVARNAME = "G$WIDGET.SUB" ; VAL = G$WIDGET.SUB ; GOSUB ADDVARNAME = "G$WIDGET.NAME.LIST" ; VAL = G$WIDGET.NAME.LISTCONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$WIDGET.SUB.LIST" ; VAL = G$WIDGET.SUB.LISTCONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$WIDGET.CALL.TIME" ; VAL = G$WIDGET.CALL.TIMECONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$WIDGET.CALL.DUR" ; VAL = G$WIDGET.CALL.DURCONVERT @VM TO "," IN VALGOSUB ADDVARNAME = "G$LICENSE.COUNT" ; VAL = G$LICENSE.COUNT; GOSUB ADDVARNAME = "G$EDITION" ; VAL = G$EDITION; GOSUB ADDVARNAME = "G$SYSTEM.ID" ; VAL = G$SYSTEM.ID; GOSUB ADDVAR*TYPE = "CGI"FOR X = 1 TO DCOUNT( CGI$VARS, @AM )  NAME = CGI$VARS<X>  VAL = CGI$VALS<X>  GOSUB ADDVARNEXT X*W$PRINTABLE = 1*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN*ADDVAR: **ROW += 1W$TABLE.DATA<ROW,1> = NAMEW$TABLE.DATA<ROW,2> = TYPEW$TABLE.DATA<ROW,3> = VALRETURN000EFFSUB.ICON.GALLERY0c2SUBROUTINE SUB.ICON.GALLERY** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Icon Gallery*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Icon Gallery"W$TYPE = "HTML"W$WIDTH = 3W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN ;* Dont process, just provide title, type & width*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "UNABLE TO OPEN MVDB.CONTROL"  RETURNENDREAD ICON.LIST FROM F.MVDB.CONTROL, 'ICON.LIST' ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "UNABLE TO READ ICON.LIST FROM MVDB.CONTROL"  RETURNENDCONVERT @AM TO @VM IN ICON.LIST** WIDGET.USER.DATA(1) = User specified search string* WIDGET.USER.DATA(2) = Search string used to make filtered list (previous string)* WIDGET.USER.DATA(3) = Filtered list* WIDGET.USER.DATA(4) = Current page #*ICNT = DCOUNT( ICON.LIST, @VM )IF WIDGET.USER.DATA(2) # WIDGET.USER.DATA(1) THEN  NEW.FILTER = 1END ELSE NEW.FILTER = 0PAGENO = WIDGET.USER.DATA(4)IF NOT(PAGENO MATCHES "1N0N") THEN PAGENO = ""IF PAGENO = "" THEN PAGENO = 1IF NEW.FILTER THEN  WIDGET.USER.DATA(2) = WIDGET.USER.DATA(1)  SEARCH.STR = WIDGET.USER.DATA(1)  SEARCH.STR = OCONV( SEARCH.STR, 'MCU')  FILTERED.LIST = ""  FOR IX = 1 TO ICNT    IF INDEX(OCONV(ICON.LIST<1,IX>,'MCU'),SEARCH.STR,1) THEN      FILTERED.LIST<1,-1> = ICON.LIST<1,IX>    END  NEXT IX  WIDGET.USER.DATA(3) = FILTERED.LIST  WIDGET.USER.DATA(4) = 1 ;* Page 1  ICON.LIST = FILTERED.LIST  ICNT = DCOUNT( ICON.LIST, @VM )  WIDGET.USER.DATA(5) = "" ;* Next/Prev action not processed here.  WIDGET.USER.DATA(4) = 1 ;* Start on page 1 with a new filter  PAGENO = 1END ELSE  IF WIDGET.USER.DATA(2) # "" THEN    ICON.LIST = WIDGET.USER.DATA(3)    ICNT = DCOUNT( ICON.LIST, @VM)   ENDENDIF WIDGET.USER.DATA(5) = "NEXT" THEN  PAGENO += 1END ELSE IF WIDGET.USER.DATA(5) = "PREV" THEN  PAGENO -= 1  IF PAGENO < 1 THEN PAGENO = 1ENDWIDGET.USER.DATA(5) = ""WIDGET.USER.DATA(4) = PAGENOPER.ROW = 7ROWS.PER.PAGE = 10CALL GET.CGI('generatepdf',IS.PDF)IF IS.PDF THEN  * If generating a PDF, place all items on a single  * page, letting the PDF renderer handle pagination.  ROWS.PER.PAGE = (INT((ICNT-1)/PER.PAGE)+1)*PER.PAGEENDPER.PAGE = ROWS.PER.PAGE * PER.ROWMAX.NAME.CHARS = 22MAX.PAGE = INT( (ICNT-1) / PER.PAGE )+ 1IF PAGENO > MAX.PAGE THEN  PAGENO = 1  WIDGET.USER.DATA(4) = PAGENOENDSTART.POS = ((PAGENO-1) * PER.PAGE) ;* This is an offset, not an actual starting positionIF ICON.LIST = "" THEN  W$HTML.DATA = '<table><tr><td>No Results</td></tr></table>'END ELSE  W$HTML.DATA = '<table><tr><td colspan="':PER.ROW:'">Page ':PAGENO:' of ':MAX.PAGE:'</td></tr><tr>'  W$HTML.DATA := ''  IX = 1  LOOP    SHOW.NAME = ICON.LIST<1,IX+START.POS>    IF LEN(SHOW.NAME) > MAX.NAME.CHARS THEN      SHOW.NAME = SHOW.NAME[1,MAX.NAME.CHARS-3]:"..."    END    W$HTML.DATA := '<td align="center" width="115px" style="font-size:10px;"><img title="':ICON.LIST<1,IX+START.POS>:'" class="icon" src="/db/icons/':ICON.LIST<1,IX+START.POS>:'" /><br />':SHOW.NAME:'<br />':IX+START.POS:'</td>'  UNTIL IX = (PER.PAGE) OR (IX+START.POS) >= ICNT DO    IF NOT(MOD(IX,PER.ROW)) THEN      W$HTML.DATA := '</tr><tr>'    END    IX += 1  REPEAT  W$HTML.DATA := '</tr></table>'END*W$HTML.DATA := '<br />'*FOR N = 1 TO 5*  W$HTML.DATA := 'WIDGET.USER.DATA(':N:') = ':WIDGET.USER.DATA(N):'<br />'*NEXT N*W$INPUT.PROMPT<1> = "Search"W$INPUT.TYPE<1> = "TEXT"W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(1)W$INPUT.UDPOS<1> = 1W$INPUT.BUTTON = "Search"*IF PAGENO > 1 THEN  W$LINK.LABEL<1,-1> = "Prev Page"  W$LINK.LOCATION<1,-1> = 23  W$LINK.UD.POS<1,-1> = 5  W$LINK.UD.VAL<1,-1> = "PREV"END*IF PAGENO < MAX.PAGE THEN  W$LINK.LABEL<1,-1> = "Next Page"  W$LINK.LOCATION<1,-1> = 14  W$LINK.UD.POS<1,-1> = 5  W$LINK.UD.VAL<1,-1> = "NEXT"END*RETURN000436PURGE.NON.PLATFORM.WIDGETS0c2*** 6-22-15 TPARKER ** Purge all platform specific widgets not for this platform*** run by the post install command process*OPEN '','MVDB.CONTROL' TO FILE ELSE STOPREAD PLATFORM FROM FILE, 'PLATFORM' ELSE PLATFORM=''IF PLATFORM = '' THEN STOP*PJS 07-13-15 - comment out this line: IF LEN(PLATFORM) = 2 THEN PLATFORM=PLATFORM:' '*OPEN '','MVDB.WIDGETS' TO FI.MVDB.WIDGETS ELSE STOP*SELECT FI.MVDB.WIDGETS*LOOP   READNEXT ID ELSE ID='DONE'UNTIL ID = 'DONE' DO   WIDGET.PLATFORM=FIELD(ID,' ',1)   DELETE.IT=0   BEGIN CASE      CASE PLATFORM = WIDGET.PLATFORM; NULL      CASE WIDGET.PLATFORM = 'D3'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'UV'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'UD'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'QM'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'OI'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'RL'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'JB'; DELETE.IT=1      CASE WIDGET.PLATFORM = 'D3'; DELETE.IT=1      CASE 1; NULL   END CASE   IF DELETE.IT THEN DELETE FI.MVDB.WIDGETS, IDREPEATEND000C95SUB.DEMO.SPARK0c2SUBROUTINE SUB.DEMO.SPARK** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Spark widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Spark Chart Demo - My Stock Price"W$TYPE = "SPARKLINE"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN  W$TYPE = WIDGET.USER.DATA(1)END ELSE WIDGET.USER.DATA(1) = "SPARKLINE"IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1PALETTE = WIDGET.USER.DATA(2)*VALUES = ""W$FW.VALUES<1,-1> = "2726"W$FW.VALUES<1,-1> = "3788"W$FW.VALUES<1,-1> = "3888"W$FW.VALUES<1,-1> = "2290"W$FW.VALUES<1,-1> = "3902"W$FW.VALUES<1,-1> = "2331"W$FW.VALUES<1,-1> = "3085"W$FW.VALUES<1,-1> = "2701"W$FW.VALUES<1,-1> = "3320"W$FW.VALUES<1,-1> = "2193"W$FW.VALUES<1,-1> = "3451"W$FW.VALUES<1,-1> = "2484"W$FW.VALUES<1,-1> = "3932"W$FW.VALUES<1,-1> = "3704"W$FW.VALUES<1,-1> = "2781"W$FW.VALUES<1,-1> = "2295"W$FW.VALUES<1,-1> = "2473"W$FW.VALUES<1,-1> = "3763"W$FW.VALUES<1,-1> = "2975"W$FW.VALUES<1,-1> = "2235"W$FW.VALUES<1,-1> = "3435"W$FW.VALUES<1,-1> = "2760"W$FW.VALUES<1,-1> = "2797"W$FW.VALUES<1,-1> = "3236"W$FW.VALUES<1,-1> = "2256"W$FW.VALUES<1,-1> = "2415"W$FW.VALUES<1,-1> = "2493"W$FW.VALUES<1,-1> = "3582"W$FW.VALUES<1,-1> = "2345"W$FW.VALUES<1,-1> = "3764"W$FW.VALUES<1,-1> = "2699"W$FW.VALUES<1,-1> = "2948"W$FW.VALUES<1,-1> = "3663"W$FW.VALUES<1,-1> = "3558"W$FW.VALUES<1,-1> = "3219"W$FW.VALUES<1,-1> = "2759"W$FW.VALUES<1,-1> = "2694"W$FW.VALUES<1,-1> = "3235"W$FW.VALUES<1,-1> = "2263"W$FW.VALUES<1,-1> = "2597"W$FW.VALUES<1,-1> = "2528"W$FW.VALUES<1,-1> = "2673"W$FW.VALUES<1,-1> = "2347"W$FW.VALUES<1,-1> = "2055"W$FW.VALUES<1,-1> = "3458"W$FW.VALUES<1,-1> = "2916"W$FW.VALUES<1,-1> = "3497"W$FW.VALUES<1,-1> = "2457"W$FW.VALUES<1,-1> = "2070"W$FW.VALUES<1,-1> = "3261"*IF WIDGET.USER.DATA(1) = "SPARKWINLOSS" THEN  VAL.LIST = W$FW.VALUES  FOR N = 2 TO DCOUNT( W$FW.VALUES<1>, @VM )    VAL = INT(W$FW.VALUES<1,N>)    IF VAL > INT(VAL.LIST<1,N-1>) THEN      VAL = "W" ;* Win    END ELSE IF VAL = INT(VAL.LIST<1,N-1>) THEN      VAL = "D" ;* Draw    END ELSE VAL = "L"    W$FW.VALUES<1,N> = VAL  NEXT N  W$FW.VALUES<1,1> = "W" ;* First month was a win.END ELSE  FOR N = 1 TO DCOUNT( W$FW.VALUES<1>, @VM )    W$FW.VALUES<1,N> = OCONV(W$FW.VALUES<1,N>,"MD2")  NEXT NEND*** Set up a drill-down widget call*W$FW.DD.WIDGET<1,1> = "Drilldown Demo"W$FW.DD.UD.POS<1,1> = 1W$FW.DD.UD.VAL<1,1> = W$FW.VALUES<1,1>*W$FW.SPARK.TREND.BEG<1,1> = W$FW.VALUES<1,1>W$FW.SPARK.TREND.END<1,1> = W$FW.VALUES<1,DCOUNT(W$FW.VALUES<1>,@VM)>*W$FW.CAPTION = "Cisco"W$FW.SUBCAPTION = "12 Months"W$FW.CHART.PALETTE = PALETTE*W$INPUT.PROMPT = "Spark Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "Column":@VM:"Line":@VM:"Win/Loss"W$INPUT.SELVALS = "SPARKCOLUMN":@VM:"SPARKLINE":@VM:"SPARKWINLOSS"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*W$INPUT.PROMPT<2> = "Palette"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0006D0SUB.DEMO.PIE0c2SUBROUTINE SUB.DEMO.PIE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: PIE Chart Demonstration widget**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Chart - Fuel Sales by Type"W$TYPE = "FC2DPIE"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "3D" THEN  W$TYPE = "FC3DPIE"END*SALES = ""SALES<1> = "28452536"SALES<2> = "31208425"SALES<3> = "30245519"SALES<4> = "40425111"SALES<5> = "36515188"SALES<6> = "39144100"SALES<7> = "41655215"SALES<8> = "36615152"SALES<9> = "43944161"SALES<10> = "42251594"SALES<11> = "48833151"SALES<12> = "50122415"*TOT.SALES = SUM(SALES)CATEG = ""CATEG<1> = INT(TOT.SALES*.4)CATEG<2> = INT(TOT.SALES*.2)CATEG<3> = INT(TOT.SALES*.3)CATEG<4> = INT(TOT.SALES*.1)*CATEG.NAMES = ''CATEG.NAMES<1> = "Regular"CATEG.NAMES<2> = "Mid-Grade"CATEG.NAMES<3> = "Premium"CATEG.NAMES<4> = "Ethanol"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$PIE.LABELS<1,N> = CATEG.NAMES<N>  W$PIE.VALUES<1,N> = CATEG<N>  *  * Set up a drill-down widget call for each category  *  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = CATEG.NAMES<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = CATEG<N>NEXT NIF WIDGET.USER.DATA(1) # "3D" THEN  W$PIE.VALUE.OPTS<1,3> = 'isSliced="1"'END*IF WIDGET.USER.DATA(1) = "3D" THEN*  W$LINK.LABEL<1> = "2D"  W$LINK.ICON.TXT<1> = "2D Chart"  W$LINK.UD.VAL<1> = "2D"  W$PIE.CAPTION = "3D Chart"END ELSE*  W$LINK.LABEL<1> = "3D"  W$LINK.ICON.TXT<1> = "3D Chart"  W$LINK.UD.VAL<1> = "3D"  W$PIE.CAPTION = "2D Chart"ENDW$LINK.ICON<1> = "chart_pie.png"W$LINK.UD.POS<1> = "1"W$LINK.LOCATION<1> = "C"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN00045DSUB.DEMO.FUNNEL0c2SUBROUTINE SUB.DEMO.FUNNEL** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Funnel widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Funnel Demo - Website Conversion Ratio"W$TYPE = "FUNNEL"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*CATEG = ""CATEG<1> = 385634CATEG<2> = 175631CATEG<3> = 84564CATEG<4> = 35654CATEG<5> = 12342*CATEG.NAMES = ''CATEG.NAMES<1> = "Website Visits"CATEG.NAMES<2> = "Downloads"CATEG.NAMES<3> = "Interested to buy"CATEG.NAMES<4> = "Contract finalized"CATEG.NAMES<5> = "Purchased"*W$FW.CAPTION = "Conversion Ratio"W$FW.SUBCAPTION = "May 2007"W$CHART.OPTIONS<-1> = "isSliced='1'"W$CHART.OPTIONS<-1> = "showPercentValues='1'"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$FW.LABELS<1,N> = CATEG.NAMES<N>  W$FW.VALUES<1,N> = CATEG<N>  *  * Set up a drill-down widget call for each category  *  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = CATEG.NAMES<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = CATEG<N>NEXT N*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0005B8SUB.PORTAL.AP.REPORTS0c2SUBROUTINE SUB.PORTAL.AP.REPORTS**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = 'AP Reporting'W$TYPE = "FC2DPIE"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.DASHBOARD.BALANCES ELSE   W$TYPE='TEXT'   W$TEXT='UNABLE TO OPEN DICT DASHBOARD.BALANCES'   RETURN ENDREAD AP.AMOUNTS FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AP.STATS' ELSE AP.AMOUNTS=''BEGIN CASE   CASE 1      W$TITLE = "Chart - AP Balances by Days Due"; CALL PORTAL.SHOW.LAST.UPDATED('AP')      AMTS=AP.AMOUNTS      W$PIE.CAPTION='Total AP Balance of '**   CASE WIDGET.USER.DATA(1) = 'AR'**      W$TITLE = "Chart - AR Balances by Days Due"**      AMTS=AR.AMOUNTS**      W$PIE.CARTION='Total AR Balance of 'END CASE*TOT.AMT=SUM(AMTS)W$PIE.CAPTION:=OCONV(TOT.AMT,'MD02,$')*CATEGORIES='Current'CATEGORIES<2>='1 - 30 Days'CATEGORIES<3>='31 - 60 Days'CATEGORIES<4>='61 - 90 Days'CATEGORIES<5>='Over 90 Days'*CATEGORY.AMTS=AMTS**W$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='showPercentageValues="0"'W$CHART.OPTIONS<-1>='showPercentageInLabel="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="0"'W$CHART.OPTIONS<-1>='thousandSeparator=","'W$CHART.OPTIONS<-1>='pieradius="150"'FOR N = 1 TO 5  W$PIE.LABELS<1,N> = CATEGORIES<N>  W$PIE.VALUES<1,N> = INT(CATEGORY.AMTS<N>/100 + .5)NEXT N**RETURNEND000101WEB.FORMS0c2SUBROUTINE WEB.FORMS** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Untitled HTML"W$TYPE = "HTML"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$HTML.DATA = '<h2>HTML Widget Content</h2>'RETURN0000DDCHECK.PASSWORD0c2OPEN 'MVDB.USERS' TO FILE ELSE STOPSELECT FILELOOP   READNEXT ID ELSE ID ='DONE'UNTIL ID = 'DONE' DO   READ REC FROM FILE, ID ELSE REC=''   CRT ID,OCONV(REC<1>,'U3060'),OCONV(ID,'U3060')REPEATEND0010F6SUB.DEMO.REV.GP.SALES.CHART0c2SUBROUTINE SUB.DEMO.REV.GP.SALES.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEEQU ANNUAL.OR.MONTHLY TO WIDGET.USER.DATA(2)IF ANNUAL.OR.MONTHLY = '' THEN ANNUAL.OR.MONTHLY='By Year'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''YEARS=REC<67>MAX.YEARS=DCOUNT(YEARS,CHAR(253))REVENUE.OR.GP=WIDGET.USER.DATA(1)IF INDEX(ANNUAL.OR.MONTHLY,'By Month',1) THEN GOTO DO.MONTHLY*BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE='YTD Sales'      W$BAR.YMEMO = "YTD Sales"      SALES.AMTS=REC<68>   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE='YTD Gross Profit'      W$BAR.YMEMO = "YTD Gross Profit"      SALES.AMTS=REC<69>   CASE 1      REC = ''      SALES.AMTS = ''END CASE***MAX.SALES.AMT=0N=0FIRST.YEAR=''CURRENT.YEAR=''MO.NO=DCOUNT(REC<68,3>,CHAR(252))FOR NN = 1 TO MAX.YEARS   SALES.AMT=0   FOR NNN = 1 TO MO.NO      SALES.AMT+=SALES.AMTS<1,NN,NNN>    NEXT NNN   SALES.AMT=OCONV(SALES.AMT,'MD02')  IF SALES.AMT THEN     N+=1     IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT     W$BAR.VALUES<1,N> = SALES.AMT     YEAR=YEARS<1,NN>     IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR     CURRENT.YEAR=YEAR     W$BAR.XLABELS<1,N> = YEAR     W$FW.DD.WIDGET<1,N> = "DEMO ANNUAL SALES BY REP"     W$FW.DD.UD.POS<1,N,1> = 1     W$FW.DD.UD.VAL<1,N,1> = REVENUE.OR.GP; * REVENUE OR GP     W$FW.DD.UD.POS<1,N,2> = 2     W$FW.DD.UD.VAL<1,N,2> = YEAR   ENDNEXT NNW$BAR.XMEMO = "Year (drilldown for ":W$BAR.YMEMO:" by Rep)"W$BAR.CAPTION=W$BAR.YMEMO:' From ':FIRST.YEAR:' to ':CURRENT.YEAR* ROUND MAX AMOUNT UP TO THE NEXT 250000MAX.SALES.AMT+=250000MAX.SALES.AMT=INT(MAX.SALES.AMT/250000) * 250000W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'*W$CHART.OPTIONS<-1>='yAxisMaxValue="1500000"'*DO.PROMPT:*W$INPUT.PROMPT<1> = "Display By"W$INPUT.TYPE<1> = "SELECT"W$INPUT.UDPOS<1> = 2OPTIONS='By Year':CHAR(253):'By Month Using Column Chart':CHAR(253):'By Month Using Line Chart'W$INPUT.SELOPTS<1>=OPTIONSW$INPUT.SELVALS<1>=OPTIONSLOCATE ANNUAL.OR.MONTHLY IN OPTIONS<1> SETTING DEFAULT.POS ELSE DEFAULT.POS=1W$INPUT.DEFAULT<1>=ANNUAL.OR.MONTHLYW$INPUT.BUTTON<1> = "GO"*RETURN*DO.MONTHLY:*IF INDEX(ANNUAL.OR.MONTHLY,'Column',1) THEN   W$TYPE='FCMSCOLUMN2D' END ELSE   W$TYPE='FCMSLINE' ENDW$WIDTH = 3W$CHART.OPTIONS<-1>='showValues="0"'BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE='Monthly Sales'      W$BAR.YMEMO = "Monthly Sales"      W$BAR.CAPTION='Monthly Sales by Year'      SALES.ATT=68   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE='Monthly Gross Profit'      W$BAR.YMEMO = "Monthly Gross Profit"      W$BAR.CAPTION='Monthly Gross Profit by Year'      SALES.ATT=69   CASE 1      SALES.ATT=68      REC=''END CASETODAY=OCONV(DATE(),'D4-')MM=TODAY[1,2]+0YYYY=TODAY[7,4]IF MM = 1 THEN YYYY=YYYY-1YYYY.SELECT=''YEARS=''W$BAR.VALUES=''FOR N = 1 TO 12  W$BAR.XLABELS<1,N> = OCONV(N*30-15,'DMA')[1,3]NEXT NIF MAX.YEARS > 5 THEN MAX.DISPLAY.YEARS=5 ELSE MAX.DISPLAY.YEARS=MAX.YEARSMS.VAL.CNTR=0FOR I = 1 TO MAX.DISPLAY.YEARS   YEAR=YYYY-MAX.DISPLAY.YEARS+I   YEARS<-1>=YEAR   W$BAR.LABELS<I>=YEAR   YYYY.SELECT:=' "':YEAR:'"'   SALES.AMTS=REC<SALES.ATT>   FOR MO.NO = 1 TO 12      MS.VAL.CNTR+=1      SALE.AMT=SALES.AMTS<1,I,MO.NO>      W$BAR.VALUES<I,MO.NO>=OCONV(SALE.AMT,'MD02')      W$FW.DD.WIDGET<1,MS.VAL.CNTR> = "DEMO SINGLE MONTH SALES BY REP"      W$FW.DD.UD.POS<1,MS.VAL.CNTR,1>=1      W$FW.DD.UD.VAL<1,MS.VAL.CNTR,1>=REVENUE.OR.GP      W$FW.DD.UD.POS<1,MS.VAL.CNTR,2>=2      W$FW.DD.UD.VAL<1,MS.VAL.CNTR,2> = 'MS.SERIES'      W$FW.DD.UD.POS<1,MS.VAL.CNTR,3> = 3      W$FW.DD.UD.VAL<1,MS.VAL.CNTR,3>='MS.LABEL'    NEXT MO.NO NEXT I**WRITE W$BAR.VALUES ON FILE.CONTROL, 'BAR.VALUES'W$BAR.XMEMO='Month (drilldown for month by Rep)'GOSUB DO.PROMPTRETURNEND000509SUB.RSS.FEEDS0c2SUBROUTINE SUB.RSS.FEEDS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Display a list of available RSS feeds**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD WWW.INCLUDE*W$TITLE = "RSS Feeds"W$TYPE = "TABLE"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "Cannot open RSS.FEEDS"  RETURNENDOPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "Cannot open MVDB.CONTROL"  RETURNEND*W$TABLE.COL.LABELS<1,1> = "ID"W$TABLE.COL.LABELS<1,2> = "Name / Description"W$TABLE.COL.LABELS<1,3> = "Subscribe"*EXECUTE "SSELECT RSS.FEEDS BY NAME" CAPTURING JUNKROW = 1LOOP  READNEXT FID ELSE EXIT  READ FEED.REC FROM F.RSS.FEEDS, FID ELSE CONTINUE  FEED.NAME = FEED.REC<1>  CALL RSS.XML.ENCODE(FEED.NAME,"")  FEED.DESC = FEED.REC<3>  FEED.URL = "http://":CGI$SERVER.NAME:CGI$PATH:'/RSS.MAIN?feed=':FID  W$TABLE.DATA<ROW,1> = FID  W$TABLE.DATA<ROW,2> = '<b>':FEED.NAME:'</b><br />':FEED.DESC  W$TABLE.DATA<ROW,3> = \<a href="\:FEED.URL:\">Standard Feed</a>\  FOR N = 1 TO DCOUNT( FEED.REC<6>, @VM )    W$TABLE.DATA<ROW,3> := '<br /><a href="':FEED.URL:'&':FEED.REC<7,N>:'">':FEED.REC<6,N>:'</a>'  NEXT N  ROW += 1REPEATRETURN00008BCALL.CREATE.WEBSERVICE.PASSWORD0c2CALL CREATE.WEBSERVICE.PASSWORD(PASSWORD,PASSTIME)CRT 'PASSTIME=':PASSTIMECRT 'PASSWORD=':PASSWORDEND000988SUB.CODE.TEMPLATES0c2SUBROUTINE SUB.CODE.TEMPLATES** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: * Description: List code templates*INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGET.TYPES*W$TITLE = "Widget code templates"W$TYPE = "HTML"W$WIDTH = 3W$PRINTABLE = 1*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN ;* Hidden mode  W$LINK.LABEL<1,1> = "Show Widget"  W$LINK.LOCATION<1,1> = "C"  W$LINK.UD.POS<1,1> = 1  W$LINK.UD.VAL<1,1> = ""  W$LINK.ICON<1,1> = "application_view_detail.png"  W$LINK.ICON.TXT<1,1> = "Show Widget"  W$TITLE := ' (Hidden)'  W$PRINTABLE = 0  RETURNENDOPEN '','MVDB.SUB.TEMPLATES' TO F.MVDB.SUB.TEMPLATES ELSE  W$HTML.DATA = '<h2>MVDB.SUB.TEMPLATES file cannot be opened.</h2>'  RETURNENDOPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE  W$HTML.DATA = '<h2>MVDB.WIDGET.TYPES file cannot be opened.</h2>'  RETURNEND*EXECUTE 'SSELECT MVDB.WIDGET.TYPES BY GROUP BY HANDLER WITH INACTIVE # "1"' CAPTURING JUNKW$HTML.DATA = '<table width="100%"><thead><tr><th>Widget Type/Template</th><th>Description</th><th>Lines</th><th>Use Template</th><th>Edit</th></tr><tbody>'LOOP  READNEXT ID ELSE EXIT  READ TREC FROM F.MVDB.SUB.TEMPLATES, ID ELSE TREC = ""  MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, ID ELSE MAT WIDGET.TYPES = ""  CLASS.NAME = FIELD(WT$ICON,'.',1)  CONVERT "_" TO "-" IN CLASS.NAME  W$HTML.DATA := '<tr><td>':ID:'</td>'  W$HTML.DATA := '<td><img height="20" width="20" src="/db/icons/':WT$ICON:'" />':WT$DESC:'</td>'  LINES = DCOUNT(TREC,@AM)  IF LINES = 0 THEN LINES = '&nbsp;'  W$HTML.DATA := '<td align="right">':LINES:'</td>'  IF FIELD(TREC,' ',1) = "USE" THEN    USE.TEMPLATE = FIELD( TREC, ' ', 2 )    USE.TEMPLATE = '<a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUB.TEMPLATES&ed_item=':USE.TEMPLATE:'" target="MVDB.SUB.TEMPLATES_':USE.TEMPLATE:'">':USE.TEMPLATE:'</a>'  END ELSE USE.TEMPLATE = '&nbsp;'  W$HTML.DATA := '<td>':USE.TEMPLATE:'</td>'  IF TREC = "" THEN ACTION = "Add" ELSE ACTION = "Edit"  W$HTML.DATA := '<td><a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUB.TEMPLATES&ed_item=':ID:'" target="MVDB.SUB.TEMPLATES_':ID:'">':ACTION:'</a></td>'  W$HTML.DATA := '</tr>'REPEATW$HTML.DATA := '</tbody></table>'*W$LINK.LABEL<1,1> = "Hide Widget"W$LINK.LOCATION<1,1> = "C"W$LINK.UD.POS<1,1> = 1W$LINK.UD.VAL<1,1> = "1"W$LINK.ICON<1,1> = "application.png"W$LINK.ICON.TXT<1,1> = "Hide Widget"*RETURN000D3BSUB.PORTAL.MARGINS0c2SUBROUTINE SUB.PORTAL.MARGINS** DEFINE PARAMETERS FOR PORTAL SALES REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOPDIM SETUP.PARAMS(25)*W$TITLE = "Portal Year to Year Margins"; CALL PORTAL.SHOW.LAST.UPDATED('SALES')W$TYPE = "HTML"W$WIDTH = 2D3=1*IF G$QUERYMODE THEN RETURN**OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE    ERROR.MSG='UNABLE TO OPEN MVDB.CONTROL'   GOTO DISPLAY.ERROR ENDOPEN '','DASHBOARD.CLOSING.STATS' TO FI.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR END*READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'END CASE**W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'*OTODAY=OCONV(DATE(),'D4-')*YEAR.TO.YEAR.MARGIN.PERCENTS:*W$TYPE='FCCOLUMN3D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYY BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'YEAR.TO.YEAR.REPORT'YEAR.TOTALS=''YEAR.GROSS.PROFITS=''YEARS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))YEAR.CNTR=0FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YEAR=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         IF AMOUNT OR GROSS.PROFIT THEN            YEAR.CNTR+=1            YEARS<YEAR.CNTR>=YEAR            AMOUNT=ICONV(AMOUNT,'MD2')            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            YEAR.TOTALS<YEAR.CNTR>=AMOUNT            YEAR.GROSS.PROFITS<YEAR.CNTR>=GROSS.PROFIT          END       END    ENDNEXT ROW.NOYEAR.TOTALS<YEAR.CNTR+1>=SUM(YEAR.TOTALS)YEAR.GROSS.PROFITS<YEAR.CNTR+1>=SUM(YEAR.GROSS.PROFITS)YEARS<YEAR.CNTR+1>='Average'*W$BAR.CAPTION = 'Year by Year Margin Percents'W$BAR.XMEMO = "Year"W$BAR.YMEMO = 'Margin Percents'*MAX.YEARS=DCOUNT(YEARS,CHAR(254))FOR YEAR.NO = 1 TO MAX.YEARS   YEAR.TOTAL=YEAR.TOTALS<YEAR.NO>   YEAR.GROSS.PROFIT=YEAR.GROSS.PROFITS<YEAR.NO>   MARGIN=INT(YEAR.GROSS.PROFIT * 1000 / YEAR.TOTAL + .5)   W$BAR.VALUES<1,YEAR.NO>=OCONV(MARGIN+0,'MD1')   W$BAR.XLABELS<1,YEAR.NO>=YEARS<YEAR.NO> NEXT YEAR.NORETURN*DISPLAY.ERROR:*W$HTML.DATA='<h3>':ERROR.MSG:'</h3>'RETURN**RETURNEND000597REFRESH.PORTAL.DATES0c2OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO DICT.FI ELSE STOP 201,'DICT DASHBOARD.CLOSING.STATS'READ LAST.AR.DATE FROM DICT.FI, 'LAST.AR.REFRESH' ELSE STOP 201,'LAST.AR.REFRESH'READ LAST.AP.DATE FROM DICT.FI, 'LAST.AP.REFRESH' ELSE STOP 201,'LAST.AP.REFRESH'READ LAST.SALES.DATE FROM DICT.FI, 'LAST.SALES.REFRESH' ELSE STOP 201,'LAST.SALES.REFRESH'*FI='AR'; LAST.DATE=LAST.AR.DATE<1>; ATTS=20:@AM:8; GOSUB UPDATE.DATESWRITE DATE():@AM:OCONV(DATE(),'D2-') ON DICT.FI, 'LAST.AR.REFRESH'FI='AP'; LAST.DATE=LAST.AP.DATE<1>; ATTS=20:@AM:8; GOSUB UPDATE.DATESWRITE DATE():@AM:OCONV(DATE(),'D2-') ON DICT.FI, 'LAST.AP.REFRESH'FI='SALES'; LAST.DATE=LAST.SALES.DATE<1>; ATTS=1; GOSUB UPDATE.DATESWRITE DATE():@AM:OCONV(DATE(),'D2-') ON DICT.FI, 'LAST.SALES.REFRESH'STOP*UPDATE.DATES:*MAX.ATTS=DCOUNT(ATTS,@AM)DIFF.DAYS=DATE()-LAST.DATEOPEN '',FI TO FI.FI ELSE STOP 201,FIEXECUTE "SELECT ":FILOOP   READNEXT ID ELSE ID = 'DONE'UNTIL ID = 'DONE' DO   READ REC FROM FI.FI, ID ELSE REC=''   FOR I = 1 TO MAX.ATTS      ATT.NO=ATTS<I>      IF ATT.NO <> '' THEN         DATES=REC<ATT.NO>         MAX.DATES=DCOUNT(DATES,@VM)         FOR II = 1 TO MAX.DATES            THIS.DATE=DATES<1,II>            IF THIS.DATE <> '' THEN               THIS.DATE+=DIFF.DAYS               REC<ATT.NO,II>=THIS.DATE             END          NEXT II       END    NEXT I   WRITE REC ON FI.FI, IDREPEATRETURN00013DSUB.LISTPEQS0c2SUBROUTINE SUB.LISTPEQS** Copyright (c) 2010 SB, Inc. All rights reserved.*INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "HTML"W$TITLE = "Print Queue"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$TEXT.DATA = '<iframe src="/dbc/SBBP.SB.LISTPEQS" width="100%" scrolling="auto" height="500"></iframe>'RETURN000812SUB.DEMO.BULLET0c2SUBROUTINE SUB.DEMO.BULLET** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Bullet widget demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Bullet Chart Demo - Sales Volume"W$TYPE = "VBULLET"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) # "" THEN  W$TYPE = WIDGET.USER.DATA(1)END ELSE WIDGET.USER.DATA(1) = "VBULLET"IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1PALETTE = WIDGET.USER.DATA(2)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = 800000*W$FW.COLOR.RANGE<1,1> = 0W$FW.COLOR.RANGE<2,1> = 400000W$FW.COLOR.RANGE<3,1> = COLOR$RED*W$FW.COLOR.RANGE<1,2> = 400000W$FW.COLOR.RANGE<2,2> = 650000W$FW.COLOR.RANGE<3,2> = "YELLOW"*W$FW.COLOR.RANGE<1,3> = 650000W$FW.COLOR.RANGE<2,3> = 800000W$FW.COLOR.RANGE<3,3> = "GREEN"*W$FW.METER.VALUE = 725000W$FW.METER.TARGET = 775000*W$FW.CAPTION = "July Sales"W$FW.SUBCAPTION = "Billings"*W$FW.CHART.PALETTE = PALETTE*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* Let it calculate thisW$FW.TICKMARKS<5> = 4 ;* 4 minor tickmarks between the major ones**W$CHART.OPTIONS = "paletteThemeColor='#a2287a'"*W$FW.BC.PLOT.COLOR = COLOR$BLUEW$FW.BC.TARGET.COLOR = COLOR$WHITE*W$FW.DD.WIDGET<1,1> = "Drilldown Demo"W$FW.DD.UD.POS<1,1,1> = 1W$FW.DD.UD.VAL<1,1,1> = W$FW.METER.VALUEW$FW.DD.UD.POS<1,1,2> = 2W$FW.DD.UD.VAL<1,1,2> = WIDGET.USER.DATA(1)*W$INPUT.PROMPT = "Bullet Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "Horizontal":@VM:"Vertical"W$INPUT.SELVALS = "HBULLET":@VM:"VBULLET"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*W$INPUT.PROMPT<2> = "Palette"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN002FEFSUB.PORTAL.AP.REPORT.SETUP0c2SUBROUTINE SUB.PORTAL.AP.REPORT.SETUP** DEFINE PARAMETERS FOR PORTAL AP REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOP*W$TITLE = "Portal AP Report Setup"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*EQUATE ACCOUNT TO WIDGET.USER.DATA(1)EQUATE REPORT.FILE TO WIDGET.USER.DATA(2)EQUATE DUE.DATE.DICT TO WIDGET.USER.DATA(3)EQUATE DATE.PAID.DICT TO WIDGET.USER.DATA(4)EQUATE INVOICE.AMT.DICT TO WIDGET.USER.DATA(5)EQUATE BALANCE.DICT TO WIDGET.USER.DATA(6)EQUATE DUE.DATE.AMC TO WIDGET.USER.DATA(8)EQUATE DATE.PAID.AMC TO WIDGET.USER.DATA(9)EQUATE INVOICE.AMT.AMC TO WIDGET.USER.DATA(10)EQUATE INVOICE.AMT.CONV TO WIDGET.USER.DATA(11)EQUATE INVOICE.AMT.COOR TO WIDGET.USER.DATA(12)EQUATE BALANCE.AMC TO WIDGET.USER.DATA(13)EQUATE BALANCE.CONV TO WIDGET.USER.DATA(14)EQUATE BALANCE.COOR TO WIDGET.USER.DATA(15)OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE   MESSAGE='No Platform Type Defined'   GOTO MESSAGE.DISPLAY ENDFIRST.TIME=0IF G$SUBMITTED <> '1' THEN   MATREAD WIDGET.USER.DATA FROM FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ELSE      MAT WIDGET.USER.DATA = ''      FIRST.TIME=1    END   IF NOT(FIRST.TIME) THEN      GOSUB VALIDATE.PREVIOUS.INPUTS    END END ELSE   GOSUB VALIDATE.PREVIOUS.INPUTS   MATWRITE WIDGET.USER.DATA ON FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ENDGOSUB SET.PROMPTSRETURN*SET.PROMPTS:*W$INPUT.PROMPT<1> = "AP File Account"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = ACCOUNT*W$INPUT.PROMPT<2> = "Name Of AP File"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = REPORT.FILE*W$INPUT.PROMPT<3> = "Due Date Dict Name"W$INPUT.TYPE<3> = 'TEXT'W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = DUE.DATE.DICT*W$INPUT.PROMPT<4> = "Date Paid Dict Name"W$INPUT.TYPE<4> = 'TEXT'W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = DATE.PAID.DICT*W$INPUT.PROMPT<5> = "Invoice Amount Dict Name"W$INPUT.TYPE<5> = 'TEXT'W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = INVOICE.AMT.DICT*W$INPUT.PROMPT<6> = "Remaining Balance Dict Name"W$INPUT.TYPE<6> = 'TEXT'W$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = BALANCE.DICT*RETURN*VALIDATE.PREVIOUS.INPUTS:*MESSAGE=''BEGIN CASE   CASE PLATFORM = 'D3'      MD.TYPE='MD'   CASE PLATFORM = 'JB'      MD.TYPE='MD'   CASE 1      MD.TYPE='VOC'END CASEOPEN '',MD.TYPE TO FI.MD ELSE   MESSAGE='Unable to open ':MD.TYPE:' for validation purposes'   GOTO MESSAGE.DISPLAY ENDVALID.ACCOUNT=1IF ACCOUNT <> '' THEN   QFILE.NAME='QFILE'   CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)   IF QFILE.NAME = '' THEN      MESSAGE<-1>=ACCOUNT:' is not a valid account!'      VALID.ACCOUNT=0    END**   IF PLATFORM = 'UD' THEN**      QFILE.NAME='QFILE'**      CALL CREATE.UD.QPOINTER(ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)**      IF QFILE.NAME = '' THEN**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END ELSE**      WRITE 'Q':@AM:ACCOUNT:@AM:MD.TYPE ON FI.MD, 'QFILE'**      OPEN '','QFILE' TO FI.ACCOUNT.MD ELSE**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END END ELSE   VALID.ACCOUNT=0   MESSAGE<-1>='No Account defined!' ENDIF REPORT.FILE <> '' THEN   IF NOT(VALID.ACCOUNT) THEN      MESSAGE<-1>='Unable to verify ':REPORT.FILE:' file because account not properly defined!'      VALID.REPORT.FILE=0    END ELSE      VALID.REPORT.FILE=1      CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)      IF QFILE.NAME = '' THEN         MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'         VALID.REPORT.FILE=0       END**      IF PLATFORM = 'UD' THEN**         QFILE.NAME='QFILE'**         CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)**         IF QFILE.NAME = '' THEN**            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**            VALID.REPORT.FILE=0**          END**       END ELSE**         WRITE 'Q':@AM:ACCOUNT:@AM:REPORT.FILE ON FI.MD, 'QFILE'**         OPEN '','QFILE' TO FI.REPORT.FILE ELSE**            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**            VALID.REPORT.FILE=0**          END**       END      IF VALID.REPORT.FILE THEN         HAVE.QFILE.REC=1         READ QFILE.REC FROM FI.MD, 'QFILE' ELSE            HAVE.QFILE.REC=0            MESSAGE<-1>='Unable to create QFILE pointer to ':ACCOUNT:' ':REPORT.FILE          END         IF HAVE.QFILE.REC THEN            WRITE QFILE.REC ON FI.MD, 'DASHBOARD.AP.FILE'            OPEN 'DICT','DASHBOARD.AP.FILE' TO FI.DICT.REPORT.FILE ELSE                MESSAGE<-1>='Unable to open DICT ':REPORT.FILE             END          END       END    END END ELSE   MESSAGE<-1>='No AP Report file defined!' ENDIF DUE.DATE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Due Date Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DUE.DATE.DICT:' Because No AP File!'    END ELSE      READ DUE.DATE.DICT.REC FROM FI.DICT.REPORT.FILE, DUE.DATE.DICT ELSE         DUE.DATE.DICT.REC=''         MESSAGE<-1>=DUE.DATE.DICT:' Does Not Exist!'       END      IF DUE.DATE.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DUE.DATE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DUE.DATE.DICT.REC<7>[1,1] <> 'D' AND DUE.DATE.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DUE.DATE.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DUE.DATE.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF DATE.PAID.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Date Paid Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DATE.PAID.DICT:' Because No AP File!'    END ELSE      READ DATE.PAID.DICT.REC FROM FI.DICT.REPORT.FILE, DATE.PAID.DICT ELSE         DATE.PAID.DICT.REC=''         MESSAGE<-1>=DATE.PAID.DICT:' Does Not Exist!'       END      IF DATE.PAID.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DATE.PAID.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DATE.PAID.DICT.REC<7>[1,1] <> 'D' AND DATE.PAID.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DATE.PAID.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DATE.PAID.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF INVOICE.AMT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Invoice Amount Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":INVOICE.AMT.DICT:' Because No AP File!'    END ELSE      READ INVOICE.AMT.DICT.REC FROM FI.DICT.REPORT.FILE, INVOICE.AMT.DICT ELSE         INVOICE.AMT.DICT.REC=''         MESSAGE<-1>=INVOICE.AMT.DICT:' Does Not Exist!'       END      IF INVOICE.AMT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=INVOICE.AMT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=INVOICE.AMT.DICT.REC<7>[1,2]               DICT.8.1.2=INVOICE.AMT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=INVOICE.AMT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':INVOICE.AMT.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF BALANCE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Balance Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":BALANCE.DICT:' Because No AP File!'    END ELSE      READ BALANCE.DICT.REC FROM FI.DICT.REPORT.FILE, BALANCE.DICT ELSE         BALANCE.DICT.REC=''         MESSAGE<-1>=BALANCE.DICT:' Does Not Exist!'       END      IF BALANCE.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=BALANCE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=BALANCE.DICT.REC<7>[1,2]               DICT.8.1.2=BALANCE.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=BALANCE.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               BALANCE.AMC=BALANCE.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':BALANCE.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDCREATE.INDEXES=1IF MESSAGE = '' THEN   MESSAGE='AP Report parameters properly defined!' END ELSE   IF INDEX(MESSAGE,'!',1) THEN      MESSAGE=INSERT(MESSAGE,1,0,0,'!!! ERRORS !!!')      CREATE.INDEXES=0    END ENDIF CREATE.INDEXES THEN   * CREATE PIPE DICTIONARY ITEM   IF PLATFORM = 'D3' OR PLATFORM = 'QM' OR PLATFORM = 'JB' THEN      PIPE='A'      PIPE<2>=0      PIPE<3>=' '      PIPE<8>='F;C|'      PIPE<9>='L'      PIPE<10>=1    END ELSE      PIPE='I'      PIPE<2>='"|"'      PIPE<4>='|'      PIPE<5>='1L'      PIPE<6>='S'    END   WRITE PIPE ON FI.DICT.REPORT.FILE, 'PIPE'   *   ** INDEX LOGIC   *   BEGIN CASE      CASE PLATFORM = 'D3'         INDEX.TEST='A':DUE.DATE.AMC:'(DY):':DUE.DATE.AMC:'(DM)'         READ FILE.DEF.REC FROM FI.DICT.REPORT.FILE, REPORT.FILE ELSE FILE.DEF.REC=''         IF FILE.DEF.REC <> '' AND NOT(INDEX(FILE.DEF.REC<8>,INDEX.TEST,1)) THEN            MESSAGE<-1>='Creating Indexes'            CMND1="CREATE-INDEX DASHBOARD.AP.FILE A":DUE.DATE.AMC            EXECUTE CMND1 CAPTURING RESULT1            CMND2="CREATE-INDEX DASHBOARD.AP.FILE ":INDEX.TEST            EXECUTE CMND2 CAPTURING RESULT2          END      CASE 1         EXECUTE "CREATE-INDEX DASHBOARD.AP.FILE ":DUE.DATE.DICT CAPTURING RESULT1   END CASE ENDGOSUB MESSAGE.DISPLAYRETURN*MESSAGE.DISPLAY:*MAX.MSG=DCOUNT(MESSAGE,CHAR(254))W$HTML.DATA='<h3>':MESSAGE<1>IF MAX.MSG > 1 THEN   FOR MSG.NO = 2 TO MAX.MSG      W$HTML.DATA:='<br>':MESSAGE<MSG.NO>    NEXT MSG.NO ENDW$HTML.DATA:='</h3>'RETURNEND0006AECREATE.QPOINTER0c2SUBROUTINE CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,FILENAME,CALL.IT,FI.QPOINTER)**OPEN '',CALL.IT TO FI.QPOINTER THEN**   IF CALL.IT <> 'QFILE' THEN RETURN** ENDCALL.IT.PARAM=CALL.ITCALL.IT=''PATH=@PATHBEGIN CASE   CASE PLATFORM = 'UD'      OPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE         UD.ACCOUNTS='F'         UD.ACCOUNTS<-1>='@UDTHOME/sys/UD.ACCOUNT'         UD.ACCOUNTS<-1>='@UDTHOME/sys/D_UD.ACCOUNT'         WRITE UD.ACCOUNTS ON FI.MD, 'UD.ACCOUNTS'         OPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE RETURN       END      READV PATH FROM FI.UD.ACCOUNTS, ACCOUNT, 1 ELSE RETURN      F.POINTER='F'      F.POINTER<2>=PATH:'/':FILENAME      F.POINTER<3>=PATH:'/D_':FILENAME      WRITE F.POINTER ON FI.MD, CALL.IT.PARAM   CASE PLATFORM = 'JB' AND ACCOUNT = 'MVDB'      IF INDEX(PATH,':\',1) THEN DELIM.TYPE='\' ELSE DELIM.TYPE='/'      F.POINTER='F'      F.POINTER<2>=PATH:DELIM.TYPE:FILENAME      F.POINTER<3>=PATH:DELIM.TYPE:FILENAME:']D'      WRITE F.POINTER ON FI.MD, CALL.IT.PARAM   CASE 1      QFILE.REC='Q':@AM:ACCOUNT:@AM:FILENAME      WRITE QFILE.REC ON FI.MD, CALL.IT.PARAMEND CASE* CHANGE CALL.IT TO SUCCESSFUL NAME* OTHERWISE IT WILL RETURN WITH NULL SAYING FAILURECALL.IT=CALL.IT.PARAMOPEN '',CALL.IT.PARAM TO FI.QPOINTER ELSE   CALL.IT=''   IF PLATFORM = 'JB' AND FILENAME = 'MD' THEN      * OTHER ACCOUNT MAY NOT HAVE AN MD AND THE ONLY REASON TO SET A      * QPOINTER TO IT IS TO TEST VALIDITY OF THE ACCOUNT SO JUST      * CHECK FOR THE EXISTENCE OF A SYSTEM RECORD      OPEN '','SYSTEM' TO FI.SYSTEM ELSE RETURN      READ ACCOUNT.EXIST FROM FI.SYSTEM, ACCOUNT ELSE RETURN      CALL.IT=CALL.IT.PARAM    END ENDRETURNEND000B60SUB.DEMO.SALES.CHART0c2SUBROUTINE SUB.DEMO.SALES.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''VAL.TYPE='$'DRILLDOWN.WIDGET=''DRILLDOWN.TYPE=''BEGIN CASE   CASE WIDGET.USER.DATA(1) = 'REVENUES'      W$TITLE='YTD Revenues'      W$BAR.YMEMO = "YTD Revenues"      SALES.AMTS=REC<68>   CASE WIDGET.USER.DATA(1) = 'GROSSPROFIT'      W$TITLE='YTD Gross Profit'      W$BAR.YMEMO = "YTD Gross Profit"      SALES.AMTS=REC<69>   CASE WIDGET.USER.DATA(1) = 'MARGIN'      VAL.TYPE='%'      W$TITLE='YTD Margin %'      W$BAR.YMEMO = "Margin %"      SALES.AMTS=REC<39>   CASE WIDGET.USER.DATA(1) = 'PARTS$'      W$TITLE='YTD Parts Revenue ($)'      W$BAR.YMEMO = "Parts Revenue ($)"      SALES.AMTS=REC<40>      DRILLDOWN.WIDGET='DEMO SALE TYPES PIE'      DRILLDOWN.TYPE='PARTS'   CASE WIDGET.USER.DATA(1) = 'SERVICES$'      W$TITLE='YTD Services Revenue ($)'      W$BAR.YMEMO = "Services Revenue ($)"      SALES.AMTS=REC<42>      DRILLDOWN.WIDGET='DEMO SALE TYPES PIE'      DRILLDOWN.TYPE='SERVICES'END CASE*YEARS=REC<38>MAX.YEARS=DCOUNT(YEARS,CHAR(253))**MAX.SALES.AMT=0N=0FIRST.YEAR=''FOR NN = 1 TO MAX.YEARS   SALES.AMT=SUM(SALES.AMTS<1,NN>)   BEGIN CASE      CASE VAL.TYPE = '$'         SALES.AMT=OCONV(SALES.AMT,'MD02')      CASE VAL.TYPE = '%'         SALES.AMT=OCONV(SALES.AMT,'MD01')      CASE 1         NULL   END CASE  IF SALES.AMT THEN     N+=1     IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT     W$BAR.VALUES<1,N> = SALES.AMT     YEAR=YEARS<1,NN>     IF DRILLDOWN.TYPE <> '' THEN        W$FW.DD.WIDGET<1,N>=DRILLDOWN.WIDGET        W$FW.DD.UD.POS<1,N,1>=1        W$FW.DD.UD.VAL<1,N,1>=YEAR        W$FW.DD.UD.POS<1,N,2>=2        W$FW.DD.UD.VAL<1,N,2>=DRILLDOWN.TYPE      END     IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR     CURRENT.YEAR=YEAR     W$BAR.XLABELS<1,N> = YEAR   ENDNEXT NNW$BAR.XMEMO = "Year"IF DRILLDOWN.TYPE <> '' THEN   W$BAR.XMEMO := " (drilldown for detail)" ENDW$BAR.CAPTION=W$BAR.YMEMO:' From ':FIRST.YEAR:' to ':CURRENT.YEARIF VAL.TYPE = '$' THEN   * ROUND MAX AMOUNT UP TO THE NEXT 250000   MAX.SALES.AMT+=250000   MAX.SALES.AMT=INT(MAX.SALES.AMT/250000) * 250000   W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'   W$CHART.OPTIONS<-1>='decimals="2"'   W$CHART.OPTIONS<-1>='DecimalPrecision="2"'   W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'   W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'   W$CHART.OPTIONS<-1>='formatNumberScale="1"' ENDIF VAL.TYPE = '%' THEN   W$CHART.OPTIONS<-1>='decimals="1"'   W$CHART.OPTIONS<-1>='forceDecimals="1"' ENDRETURN00B526SUB.PORTAL.SALES.REPORTS0c2SUBROUTINE SUB.PORTAL.SALES.REPORTS** DEFINE PARAMETERS FOR PORTAL SALES REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOPDIM SETUP.PARAMS(25)*W$TITLE = "Portal Sales Reports"; CALL PORTAL.SHOW.LAST.UPDATED('SALES')W$TYPE = "HTML"W$WIDTH = 3D3=1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEW$BAR.COLORS<1,5>=COLOR$YELLOWALF.MONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'EQUATE REPORT.TYPE TO WIDGET.USER.DATA(1)*IF REPORT.TYPE = '' THEN REPORT.TYPE='MTD Sales'*OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE    ERROR.MSG='UNABLE TO OPEN MVDB.CONTROL'   GOTO DISPLAY.ERROR ENDOPEN '','DASHBOARD.CLOSING.STATS' TO FI.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' ENDEQUATE ACCOUNT TO SETUP.PARAMS(1)EQUATE REPORT.FILE TO SETUP.PARAMS(2)EQUATE SALE.DATE.DICT TO SETUP.PARAMS(3)EQUATE SALE.MONTH.DICT TO SETUP.PARAMS(4)EQUATE SALE.YEAR.DICT TO SETUP.PARAMS(5)EQUATE SALE.AMOUNT.DICT TO SETUP.PARAMS(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO SETUP.PARAMS(7)EQUATE SALESMAN.DICT TO SETUP.PARAMS(8)EQUATE BRANCH.DICT TO SETUP.PARAMS(9)EQUATE REGION.DICT TO SETUP.PARAMS(10)EQUATE SALE.DATE.AMC TO SETUP.PARAMS(11)EQUATE SALE.AMOUNT.AMC TO SETUP.PARAMS(12)EQUATE SALE.AMOUNT.CONV TO SETUP.PARAMS(13)EQUATE SALE.AMOUNT.COOR TO SETUP.PARAMS(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO SETUP.PARAMS(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO SETUP.PARAMS(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO SETUP.PARAMS(17)EQUATE SALESMAN.AMC TO SETUP.PARAMS(18)EQUATE SALESMAN.TFILE TO SETUP.PARAMS(19)EQUATE BRANCH.AMC TO SETUP.PARAMS(20)EQUATE BRANCH.TFILE TO SETUP.PARAMS(21)EQUATE REGION.AMC TO SETUP.PARAMS(22)EQUATE REGION.TFILE TO SETUP.PARAMS(23)*READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='MD'END CASEOPEN '',MD.FILE.NAME TO FI.MD ELSE   ERROR.MSG='UNABLE TO OPEN ':MD.FILE.NAME   GOTO DISPLAY.ERROR END*IF ACCOUNT = '' OR REPORT.FILE = '' OR SALE.DATE.DICT = '' OR SALE.AMOUNT.DICT = '' THEN   ERROR.MSG='SALES FILE ACCOUNT, SALES FILE NAME, DATE OF SALE, AND AMOUNT OF SALE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'   GOTO DISPLAY.ERROR END*SALES.FILE.PATH='SALES.FILE.PATH'OPEN '',SALES.FILE.PATH TO FI.SALES.FILE.PATH ELSE**   EXECUTE "SET-FILE ":ACCOUNT:" ":REPORT.FILE CAPTURING DUMMY   QFILE.NAME=SALES.FILE.PATH   CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.SALES.FILE.PATH)   IF QFILE.NAME = '' THEN      MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'      GOTO DISPLAY.ERROR    END**    IF PLATFORM = 'UD' THEN**       QFILE.NAME='SALES.FILE.PATH'**       CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.SALES.FILE.PATH)**       IF QFILE.NAME = '' THEN**          ERROR.MSG='UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT'**          GOTO DISPLAY.ERROR**        END**     END ELSE**    **   READ MD.QFILE FROM FI.MD, 'QFILE' ELSE**    **      ERROR.MSG='UNABLE TO CREATE QFILE TO SALES FILE'**    **      GOTO DISPLAY.ERROR**    **    END**       MD.QFILE='Q'**       MD.QFILE<2>=ACCOUNT**       MD.QFILE<3>=REPORT.FILE**       WRITE MD.QFILE ON FI.MD, 'SALES.FILE.PATH'**       OPEN '','SALES.FILE.PATH' TO FI.SALES.FILE.PATH ELSE**          ERROR.MSG='UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT'**          GOTO DISPLAY.ERROR**        END**     END   EXECUTE "CREATE-INDEX SALES.FILE.PATH ":SALE.DATE.DICT CAPTURING DUMMY END*W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'*OTODAY=OCONV(DATE(),'D4-')*BEGIN CASE   CASE REPORT.TYPE = 'MTD Sales'; GOSUB MTD.SALES   CASE REPORT.TYPE = 'YTD Sales'; GOSUB YTD.SALES   CASE REPORT.TYPE = 'Year to Year Sales and GP'; GOSUB YEAR.TO.YEAR.SALES   CASE REPORT.TYPE = 'Year to Year Sales by Month'; GOSUB YEAR.TO.YEAR.SALES.BY.MONTH   CASE REPORT.TYPE = 'Year to Year GP by Month'; GOSUB YEAR.TO.YEAR.GP.BY.MONTH   CASE REPORT.TYPE = 'MTD Sales by Salesman'; GOSUB MTD.SALES.BY.SALESMAN   CASE REPORT.TYPE = 'YTD Sales by Salesman'; GOSUB YTD.SALES.BY.SALESMAN   CASE REPORT.TYPE = 'Year to Year Sales by Salesman'; GOSUB YEAR.TO.YEAR.BY.SALESMAN   CASE REPORT.TYPE = 'Year to Year GP by Salesman'; GOSUB YEAR.TO.YEAR.GP.BY.SALESMAN   CASE REPORT.TYPE = 'MTD Sales by Branch'; GOSUB MTD.SALES.BY.BRANCH   CASE REPORT.TYPE = 'YTD Sales by Branch'; GOSUB YTD.SALES.BY.BRANCH   CASE REPORT.TYPE = 'Year to Year Sales by Branch'; GOSUB YEAR.TO.YEAR.BY.BRANCH   CASE REPORT.TYPE = 'Year to Year GP by Branch'; GOSUB YEAR.TO.YEAR.GP.BY.BRANCH   CASE REPORT.TYPE = 'MTD Sales by Region'; GOSUB MTD.SALES.BY.REGION   CASE REPORT.TYPE = 'YTD Sales by Region'; GOSUB YTD.SALES.BY.REGION   CASE REPORT.TYPE = 'Year to Year Sales by Region'; GOSUB YEAR.TO.YEAR.BY.REGION   CASE REPORT.TYPE = 'Year to Year GP by Region'; GOSUB YEAR.TO.YEAR.GP.BY.REGIONEND CASE*W$INPUT.PROMPT<1> = "Report Type"W$INPUT.TYPE<1> = "SELECT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = REPORT.TYPESELOPTS='MTD Sales'SELOPTS<1,-1>='YTD Sales'SELOPTS<1,-1>='Year to Year Sales and GP'SELOPTS<1,-1>='Year to Year Sales by Month'SELOPTS<1,-1>='Year to Year GP by Month'SELOPTS<1,-1>='MTD Sales by Salesman'SELOPTS<1,-1>='YTD Sales by Salesman'SELOPTS<1,-1>='Year to Year Sales by Salesman'SELOPTS<1,-1>='Year to Year GP by Salesman'IF BRANCH.DICT <> '' THEN   SELOPTS<1,-1>='MTD Sales by Branch'   SELOPTS<1,-1>='YTD Sales by Branch'   SELOPTS<1,-1>='Year to Year Sales by Branch'   SELOPTS<1,-1>='Year to Year GP by Branch' ENDIF REGION.DICT <> '' THEN   SELOPTS<1,-1>='MTD Sales by Region'   SELOPTS<1,-1>='YTD Sales by Region'   SELOPTS<1,-1>='Year to Year Sales by Region'   SELOPTS<1,-1>='Year to Year GP by Region' ENDW$INPUT.SELOPTS=SELOPTSW$INPUT.SELVALS=SELOPTSRETURN*DISPLAY.ERROR:*W$HTML.DATA='<h3>':ERROR.MSG:'</h3>'RETURN*MTD.SALES:*GET.REPORT.TYPE='SALES'; GOSUB GET.CURRENT.REPORTIF REPORT.STATS.REC[1,5] = 'ERROR' OR REPORT.STATS.REC<1> = '' THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Date"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'DATES=REPORT.STATS.REC<1>NUM.DATES=DCOUNT(DATES,CHAR(253))AMOUNTS=REPORT.STATS.REC<2>SUM.AMOUNTS=SUM(AMOUNTS)COST.OF.SALES=REPORT.STATS.REC<3>SUM.COST.OF.SALES=SUM(COST.OF.SALES)SUM.GROSS.PROFIT=SUM.AMOUNTS-SUM.COST.OF.SALESW$BAR.YMEMO='Total Sales and Gross Profits'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM.AMOUNTS,'MD2,$'):" and Gross Profit of ":OCONV(SUM.GROSS.PROFIT,'MD2,$'):" by Date"IF NUM.DATES > 20 THEN   W$TYPE='FCMSBAR2D'   START.CNTR=NUM.DATES   END.CNTR=1   STEP.CNTR=(-1) END ELSE   W$TYPE='FCMSCOLUMN2D'   START.CNTR=1   END.CNTR=NUM.DATES   STEP.CNTR=1 ENDVALUE.CNTR=0FOR AMT.CNTR = START.CNTR TO END.CNTR STEP STEP.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT THEN      COST.OF.SALE=COST.OF.SALES<1,AMT.CNTR>      GROSS.PROFIT=AMOUNT-COST.OF.SALE      IF GROSS.PROFIT < 0 THEN GROSS.PROFIT=0      VALUE.CNTR+=1      ROW.DATE=ICONV(DATES<1,AMT.CNTR>,'D')      ROW.DATE=OCONV(ROW.DATE,'D0')      W$BAR.XLABELS<1,VALUE.CNTR>=ROW.DATE      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE DATES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYYMM BREAK-ON YYYYMM PIPE DET-SUPP TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Month"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'MONTHS=''MONTH.CNTR=0LAST.MONTH=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      MONTH=TRIM(FIELD(ROW,'|',1))[5,2]+0      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      GROSS.PROFIT=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         IF MONTH <> LAST.MONTH THEN            LAST.MONTH=MONTH            MONTH.CNTR+=1            MONTHS<1,MONTH.CNTR>=MONTH            AMOUNTS<1,MONTH.CNTR>=0            GROSS.PROFITS<1,MONTH.CNTR>=0          END         AMOUNTS<1,MONTH.CNTR>+=AMOUNT         GROSS.PROFITS<1,MONTH.CNTR>+=GROSS.PROFIT       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):"  And Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" By Month"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))W$TYPE='FCMSCOLUMN2D'VALUE.CNTR=0FOR AMT.CNTR = 1 TO YTD.MO   AMOUNT=AMOUNTS<1,AMT.CNTR>   GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>   IF AMOUNT > 0 AND GROSS.PROFIT >= 0 THEN      VALUE.CNTR+=1      MONTH=FIELD(ALF.MONTHS,',',AMT.CNTR)      W$BAR.XLABELS<1,VALUE.CNTR>=MONTH      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTRRETURN*YEAR.TO.YEAR.SALES:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSCOLUMN2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYY BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'YEAR.TO.YEAR.REPORT'YEAR.TOTALS=''YEAR.GROSS.PROFITS=''YEARS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))YEAR.CNTR=0FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YEAR=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         IF AMOUNT OR GROSS.PROFIT THEN            YEAR.CNTR+=1            YEARS<YEAR.CNTR>=YEAR            AMOUNT=ICONV(AMOUNT,'MD2')            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            YEAR.TOTALS<YEAR.CNTR>=AMOUNT            YEAR.GROSS.PROFITS<YEAR.CNTR>=GROSS.PROFIT          END       END    ENDNEXT ROW.NO*W$BAR.CAPTION = "Sales and Gross Profit by Year"W$BAR.XMEMO = "Year"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'W$BAR.YMEMO = "Total Sales and Gross Profit"*MAX.YEARS=DCOUNT(YEARS,CHAR(254))FOR YEAR.NO = 1 TO MAX.YEARS   YEAR.TOTAL=YEAR.TOTALS<YEAR.NO>   YEAR.GROSS.PROFIT=YEAR.GROSS.PROFITS<YEAR.NO>   W$BAR.VALUES<1,YEAR.NO>=OCONV(YEAR.TOTAL+0,'MD2')   W$BAR.VALUES<2,YEAR.NO>=OCONV(YEAR.GROSS.PROFIT+0,'MD2')   W$BAR.XLABELS<1,YEAR.NO>=YEARS<YEAR.NO> NEXT YEAR.NORETURN*YEAR.TO.YEAR.SALES.BY.MONTH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSCOLUMN2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYYMM BREAK-ON YYYYMM PIPE TOTAL AMOUNT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.MO.TOTALS=''YEAR.NO=1MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YYYYMM=TRIM(FIELD(ROW,'|',1))      YEAR=YYYYMM[1,4]      MO.NO=YYYYMM[5,2]+0      AMOUNT=TRIM(FIELD(ROW,'|',2))      IF YEAR <> '' AND MO.NO AND NUM(AMOUNT) THEN         YEAR.NO=YEAR-FIRST.YEAR+1         IF AMOUNT THEN            AMOUNT=ICONV(AMOUNT,'MD2')            YEAR.MO.TOTALS<YEAR.NO,MO.NO>+=AMOUNT          END       END    END NEXT ROW.NO*FOR I = 0 TO 4   W$BAR.LABELS<I+1> = FIRST.YEAR+I   W$BAR.LABEL.OPTS<I+1> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Monthly Sales by Year"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Sales"*FOR MO.NO = 1 TO 12   FOR YEAR.NO = 1 TO 5      W$BAR.VALUES<YEAR.NO,MO.NO>=OCONV(YEAR.MO.TOTALS<YEAR.NO,MO.NO>+0,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,MO.NO>=FIELD(ALF.MONTHS,',',MO.NO) NEXT MO.NORETURN*YEAR.TO.YEAR.GP.BY.MONTH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSCOLUMN2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY YYYYMM BREAK-ON YYYYMM PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.MO.TOTALS=''YEAR.NO=1MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      YYYYMM=TRIM(FIELD(ROW,'|',1))      YEAR=YYYYMM[1,4]      MO.NO=YYYYMM[5,2]+0      GROSS.PROFIT=TRIM(FIELD(ROW,'|',2))      IF YEAR <> '' AND MO.NO AND NUM(GROSS.PROFIT) THEN         YEAR.NO=YEAR-FIRST.YEAR+1         IF GROSS.PROFIT THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            YEAR.MO.TOTALS<YEAR.NO,MO.NO>+=GROSS.PROFIT          END       END    END NEXT ROW.NO*FOR I = 0 TO 4   W$BAR.LABELS<I+1> = FIRST.YEAR+I   W$BAR.LABEL.OPTS<I+1> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Monthly Gross Profit by Year"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Gross Profit"*FOR MO.NO = 1 TO 12   FOR YEAR.NO = 1 TO 5      W$BAR.VALUES<YEAR.NO,MO.NO>=OCONV(YEAR.MO.TOTALS<YEAR.NO,MO.NO>+0,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,MO.NO>=FIELD(ALF.MONTHS,',',MO.NO) NEXT MO.NORETURN*MTD.SALES.BY.SALESMAN:**OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':SALESMAN.DICT:' BREAK-ON ':SALESMAN.DICT:' PIPE TOTAL ':SALE.AMOUNT.DICT:' PIPE TOTAL ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Salesman"SALESMEN=''SALESMAN.CNTR=0LAST.SALESMAN=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      SALESMAN=TRIM(FIELD(ROW,'|',1))      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      COST.OF.SALE=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(COST.OF.SALE) THEN         IF AMOUNT > 0 THEN            IF SALESMAN <> LAST.SALESMAN THEN               LAST.SALESMAN=SALESMAN               SALESMAN.CNTR+=1               SALESMEN<1,SALESMAN.CNTR>=SALESMAN               AMOUNTS<1,SALESMAN.CNTR>=0               GROSS.PROFITS<1,SALESMAN.CNTR>=0             END            GROSS.PROFIT=AMOUNT-COST.OF.SALE            AMOUNTS<1,SALESMAN.CNTR>+=AMOUNT            GROSS.PROFITS<1,SALESMAN.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profits of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Salesman"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))IF SALESMAN.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * SALESMAN.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDW$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'VALUE.CNTR=0FOR AMT.CNTR = 1 TO NUM.AMOUNTS   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT > 0 THEN      GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>      VALUE.CNTR+=1      SALESMAN=SALESMEN<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=SALESMAN      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE SALESMEN:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES.BY.SALESMAN:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY SALESMAN BREAK-ON SALESMAN PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Salesman"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'SALESMEN=''SALESMAN.CNTR=0LAST.SALESMAN=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      SALESMAN=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         AMOUNT=ICONV(AMOUNT,'MD2')         IF AMOUNT > 0 THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            IF SALESMAN <> LAST.SALESMAN THEN               LAST.SALESMAN=SALESMAN               SALESMAN.CNTR+=1               SALESMEN<1,SALESMAN.CNTR>=SALESMAN               AMOUNTS<1,SALESMAN.CNTR>=0               GROSS.PROFITS<1,SALESMAN.CNTR>=0             END            AMOUNTS<1,SALESMAN.CNTR>+=AMOUNT            GROSS.PROFITS<1,SALESMAN.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Salesman"IF SALESMAN.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * SALESMAN.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDVALUE.CNTR=0FOR AMT.CNTR = 1 TO SALESMAN.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>   IF AMOUNT THEN      VALUE.CNTR+=1      SALESMAN=SALESMEN<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=SALESMAN      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTRRETURN*YEAR.TO.YEAR.BY.SALESMAN:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY SALESMAN BY YYYY BREAK-ON SALESMAN PIPE BREAK-ON YYYY PIPE TOTAL AMOUNT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.SALESMAN.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))SALESMEN=''SALESMEN.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   NUM.PIPES=COUNT(ROW,'|')   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      SALESMAN=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND SALESMAN <> '' THEN; *      IF SALESMAN <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE SALESMAN IN SALESMEN SETTING SALESMAN.POS ELSE               SALESMEN.CNTR+=1               SALESMEN<SALESMEN.CNTR>=SALESMAN               SALESMAN.POS=SALESMEN.CNTR             END            YEAR.SALESMAN.TOTALS<SALESMAN.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            AMOUNT=TRIM(FIELD(ROW,'|',3))            IF NUM(AMOUNT) THEN               AMOUNT=ICONV(AMOUNT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=AMOUNT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Sales by Salesman"W$BAR.XMEMO = "Salesman"W$BAR.YMEMO = "Sales"W$CHART.HEIGHT = 200 + (70 * SALESMEN.CNTR)*FOR SALESMAN.NO = 1 TO SALESMEN.CNTR   FOR YEAR.NO = 1 TO 5      SALESMAN.YEAR.AMT=YEAR.SALESMAN.TOTALS<SALESMAN.NO,YEAR.NO>+0      IF SALESMAN.YEAR.AMT < 0 THEN SALESMAN.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,SALESMAN.NO>=OCONV(SALESMAN.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,SALESMAN.NO>=SALESMEN<SALESMAN.NO> NEXT SALESMAN.NORETURN*YEAR.TO.YEAR.GP.BY.SALESMAN:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY SALESMAN BY YYYY BREAK-ON SALESMAN PIPE BREAK-ON YYYY PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDWRITE STACKED.1:@AM:STACKED.2 ON FI.MVDB.SUBS, 'YEAR.TO.YEAR.CMND'WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.SALESMAN.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))SALESMEN=''SALESMEN.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      SALESMAN=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND SALESMAN <> '' THEN; *      IF SALESMAN <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE SALESMAN IN SALESMEN SETTING SALESMAN.POS ELSE               SALESMEN.CNTR+=1               SALESMEN<SALESMEN.CNTR>=SALESMAN               SALESMAN.POS=SALESMEN.CNTR             END            YEAR.SALESMAN.TOTALS<SALESMAN.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))            IF NUM(GROSS.PROFIT) THEN               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=GROSS.PROFIT             END          END       END    ENDWRITE SALESMEN ON FI.MVDB.SUBS, 'SALESMEN'WRITE YEAR.SALESMAN.TOTALS ON FI.MVDB.SUBS, 'YEAR.SALESMAN.TOTALS'WRITE YEAR.TOTALS ON FI.MVDB.SUBS, 'YEAR.TOTALS' NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Gross Profit by Salesman"W$BAR.XMEMO = "Salesman"W$BAR.YMEMO = "Gross Profit"W$CHART.HEIGHT = 200 + (70 * SALESMEN.CNTR)*FOR SALESMAN.NO = 1 TO SALESMEN.CNTR   FOR YEAR.NO = 1 TO 5      SALESMAN.YEAR.AMT=YEAR.SALESMAN.TOTALS<SALESMAN.NO,YEAR.NO>+0      IF SALESMAN.YEAR.AMT < 0 THEN SALESMAN.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,SALESMAN.NO>=OCONV(SALESMAN.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,SALESMAN.NO>=SALESMEN<SALESMAN.NO> NEXT SALESMAN.NORETURN**MTD.SALES.BY.BRANCH:**OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':BRANCH.DICT:' BREAK-ON ':BRANCH.DICT:' PIPE TOTAL ':SALE.AMOUNT.DICT:' PIPE TOTAL ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Branch"BRANCHES=''BRANCH.CNTR=0LAST.BRANCH=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      BRANCH=TRIM(FIELD(ROW,'|',1))      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      COST.OF.SALE=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(COST.OF.SALE) THEN         IF AMOUNT > 0 THEN            IF BRANCH <> LAST.BRANCH THEN               LAST.BRANCH=BRANCH               BRANCH.CNTR+=1               BRANCHES<1,BRANCH.CNTR>=BRANCH               AMOUNTS<1,BRANCH.CNTR>=0               GROSS.PROFITS<1,BRANCH.CNTR>=0             END            GROSS.PROFIT=AMOUNT-COST.OF.SALE            AMOUNTS<1,BRANCH.CNTR>+=AMOUNT            GROSS.PROFITS<1,BRANCH.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Branch"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))IF BRANCH.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * BRANCH.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDW$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'VALUE.CNTR=0FOR AMT.CNTR = 1 TO NUM.AMOUNTS   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT > 0 THEN      GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>      VALUE.CNTR+=1      BRANCH=BRANCHES<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=BRANCH      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE BRANCHES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES.BY.BRANCH:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY BRANCH BREAK-ON BRANCH PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Branch"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'BRANCHES=''BRANCH.CNTR=0LAST.BRANCH=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      BRANCH=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         AMOUNT=ICONV(AMOUNT,'MD2')         IF AMOUNT > 0 THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            IF BRANCH <> LAST.BRANCH THEN               LAST.BRANCH=BRANCH               BRANCH.CNTR+=1               BRANCHES<1,BRANCH.CNTR>=BRANCH               AMOUNTS<1,BRANCH.CNTR>=0               GROSS.PROFITS<1,BRANCH.CNTR>=0             END            AMOUNTS<1,BRANCH.CNTR>+=AMOUNT            GROSS.PROFITS<1,BRANCH.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Branch"IF BRANCH.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * BRANCH.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDVALUE.CNTR=0FOR AMT.CNTR = 1 TO BRANCH.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT THEN      VALUE.CNTR+=1      BRANCH=BRANCHES<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=BRANCH      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFITS<1,AMT.CNTR>,'MD2')    END NEXT AMT.CNTR**WRITE DATES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'YTD.SALES.TEST'RETURN*YEAR.TO.YEAR.BY.BRANCH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY BRANCH BY YYYY BREAK-ON BRANCH PIPE BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.BRANCH.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))BRANCHES=''BRANCHES.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      BRANCH=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND BRANCH <> '' THEN; *      IF BRANCH <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE BRANCH IN BRANCHES SETTING BRANCH.POS ELSE               BRANCHES.CNTR+=1               BRANCHES<BRANCHES.CNTR>=BRANCH               BRANCH.POS=BRANCHES.CNTR             END            YEAR.BRANCH.TOTALS<BRANCH.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            AMOUNT=TRIM(FIELD(ROW,'|',3))            GROSS.PROFIT=TRIM(FIELD(ROW,'|',4))            IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN               AMOUNT=ICONV(AMOUNT,'MD2')               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=AMOUNT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Sales by Branch"W$BAR.XMEMO = "Branch"W$BAR.YMEMO = "Total Sales and Gross Profit"W$CHART.HEIGHT = 200 + (50 * BRANCHES.CNTR)*FOR BRANCH.NO = 1 TO BRANCHES.CNTR   FOR YEAR.NO = 1 TO 5      BRANCH.YEAR.AMT=YEAR.BRANCH.TOTALS<BRANCH.NO,YEAR.NO>+0      IF BRANCH.YEAR.AMT < 0 THEN BRANCH.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,BRANCH.NO>=OCONV(BRANCH.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,BRANCH.NO>=BRANCHES<BRANCH.NO> NEXT BRANCH.NORETURN*YEAR.TO.YEAR.GP.BY.BRANCH:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY BRANCH BY YYYY BREAK-ON BRANCH PIPE BREAK-ON YYYY PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.BRANCH.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))BRANCHES=''BRANCHES.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      BRANCH=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND BRANCH <> '' THEN; *      IF BRANCH <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE BRANCH IN BRANCHES SETTING BRANCH.POS ELSE               BRANCHES.CNTR+=1               BRANCHES<BRANCHES.CNTR>=BRANCH               BRANCH.POS=BRANCHES.CNTR             END            YEAR.BRANCH.TOTALS<BRANCH.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))            IF NUM(GROSS.PROFIT) THEN               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=GROSS.PROFIT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Gross Profit by Branch"W$BAR.XMEMO = "Branch"W$BAR.YMEMO = "Gross Profit"W$CHART.HEIGHT = 200 + (70 * BRANCHES.CNTR)*FOR BRANCH.NO = 1 TO BRANCHES.CNTR   FOR YEAR.NO = 1 TO 5      BRANCH.YEAR.AMT=YEAR.BRANCH.TOTALS<BRANCH.NO,YEAR.NO>+0      IF BRANCH.YEAR.AMT < 0 THEN BRANCH.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,BRANCH.NO>=OCONV(BRANCH.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,BRANCH.NO>=BRANCHES<BRANCH.NO> NEXT BRANCH.NORETURN*MTD.SALES.BY.REGION:**OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':REGION.DICT:' BREAK-ON ':REGION.DICT:' PIPE TOTAL ':SALE.AMOUNT.DICT:' PIPE TOTAL ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF MONTH'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "REGION"REGIONS=''REGION.CNTR=0LAST.REGION=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      REGION=TRIM(FIELD(ROW,'|',1))      AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')      COST.OF.SALE=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')      IF NUM(AMOUNT) AND NUM(COST.OF.SALE) THEN         IF AMOUNT > 0 THEN            IF REGION <> LAST.REGION THEN               LAST.REGION=REGION               REGION.CNTR+=1               REGIONS<1,REGION.CNTR>=REGION               AMOUNTS<1,REGION.CNTR>=0               GROSS.PROFITS<1,REGION.CNTR>=0             END            GROSS.PROFIT=AMOUNT-COST.OF.SALE            AMOUNTS<1,REGION.CNTR>+=AMOUNT            GROSS.PROFITS<1,REGION.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Month to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Region"NUM.AMOUNTS=DCOUNT(AMOUNTS,CHAR(253))IF REGION.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * REGION.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDW$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'VALUE.CNTR=0FOR AMT.CNTR = 1 TO NUM.AMOUNTS   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT > 0 THEN      GROSS.PROFIT=GROSS.PROFITS<1,AMT.CNTR>      VALUE.CNTR+=1      REGION=REGIONS<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=REGION      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFIT,'MD2')    END NEXT AMT.CNTR**WRITE REGIONS:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'MTD.SALES.TEST'RETURN*YTD.SALES.BY.REGION:*GOSUB VERIFY.CURRENT.DATA*OTODAY=OCONV(DATE(),'D4-')YTD.MO=OTODAY[1,2]+0OYEAR=OTODAY[7,4]STACKED.1= 'SELECT DASHBOARD.CLOSING.STATS WITH YYYY = "':OYEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY REGION BREAK-ON REGION PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE BEGINNING OF YEAR'   GOSUB DISPLAY.ERROR   RETURN ENDW$BAR.XMEMO = "Region"W$BAR.LABELS<1>='Total Sales'W$BAR.LABELS<2>='Gross Profit'**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'REGIONS=''REGION.CNTR=0LAST.REGION=''AMOUNTS=''GROSS.PROFITS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      REGION=TRIM(FIELD(ROW,'|',1))      AMOUNT=TRIM(FIELD(ROW,'|',2))      GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))      IF NUM(AMOUNT) AND NUM(GROSS.PROFIT) THEN         AMOUNT=ICONV(AMOUNT,'MD2')         IF AMOUNT > 0 THEN            GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')            IF REGION <> LAST.REGION THEN               LAST.REGION=REGION               REGION.CNTR+=1               REGIONS<1,REGION.CNTR>=REGION               AMOUNTS<1,REGION.CNTR>=0               GROSS.PROFITS<1,REGION.CNTR>=0             END            AMOUNTS<1,REGION.CNTR>+=AMOUNT            GROSS.PROFITS<1,REGION.CNTR>+=GROSS.PROFIT          END       END    END NEXT ROW.NOW$BAR.YMEMO='Total Sales and Gross Profit'W$BAR.CAPTION = "Total Year to Date Sales of ":OCONV(SUM(AMOUNTS),'MD2,$'):" and Gross Profit of ":OCONV(SUM(GROSS.PROFITS),'MD2,$'):" by Region"IF REGION.CNTR > 10 THEN   W$TYPE='FCMSBAR2D'   W$CHART.HEIGHT = 200 + (25 * REGION.CNTR) END ELSE   W$TYPE='FCMSCOLUMN2D' ENDVALUE.CNTR=0FOR AMT.CNTR = 1 TO REGION.CNTR   AMOUNT=AMOUNTS<1,AMT.CNTR>   IF AMOUNT THEN      VALUE.CNTR+=1      REGION=REGIONS<1,AMT.CNTR>      W$BAR.XLABELS<1,VALUE.CNTR>=REGION      W$BAR.VALUES<1,VALUE.CNTR>=OCONV(AMOUNT,'MD2')      W$BAR.VALUES<2,VALUE.CNTR>=OCONV(GROSS.PROFITS<1,AMT.CNTR>,'MD2')    END NEXT AMT.CNTR**WRITE DATES:CHAR(254):AMOUNTS ON FI.MVDB.SUBS, 'YTD.SALES.TEST'RETURN**YEAR.TO.YEAR.BY.REGION:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY REGION BY YYYY BREAK-ON REGION PIPE BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN ENDYEAR.REGION.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))REGIONS=''REGIONS.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      REGION=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND REGION <> '' THEN; *      IF REGION <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE REGION IN REGIONS SETTING REGION.POS ELSE               REGIONS.CNTR+=1               REGIONS<REGIONS.CNTR>=REGION               REGION.POS=REGIONS.CNTR             END            YEAR.REGION.TOTALS<REGION.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            AMOUNT=TRIM(FIELD(ROW,'|',3))            IF NUM(AMOUNT) THEN               AMOUNT=ICONV(AMOUNT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=AMOUNT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Sales by Region"W$BAR.XMEMO = "Region"W$BAR.YMEMO = "Sales"W$CHART.HEIGHT = 200 + (50 * REGIONS.CNTR)*FOR REGION.NO = 1 TO REGIONS.CNTR   FOR YEAR.NO = 1 TO 5      REGION.YEAR.AMT=YEAR.REGION.TOTALS<REGION.NO,YEAR.NO>+0      IF REGION.YEAR.AMT < 0 THEN REGION.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,REGION.NO>=OCONV(REGION.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,REGION.NO>=REGIONS<REGION.NO> NEXT REGION.NORETURN*YEAR.TO.YEAR.GP.BY.REGION:*GOSUB VERIFY.CURRENT.DATAW$TYPE='FCMSBAR2D'THIS.YEAR=OCONV(DATE(),'D4-')[7,4]FIRST.YEAR=THIS.YEAR-4YEARS=''FOR YEAR.NO = FIRST.YEAR TO THIS.YEAR   YEARS<-1>=YEAR.NO NEXT YEAR.NO*STACKED.1='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YEAR:'"'STACKED.2='SORT DASHBOARD.CLOSING.STATS BY REGION BY YYYY BREAK-ON REGION PIPE BREAK-ON YYYY PIPE TOTAL GROSS.PROFIT ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)IF NOT(SYSTEM.11) THEN   ERROR.MSG='NO SALES CLOSED SINCE ':FIRST.YEAR   GOSUB DISPLAY.ERROR   RETURN END**WRITE REPORT ON FI.MVDB.SUBS, 'REPORT.RETURNED'YEAR.REGION.TOTALS=''MAX.ROWS=DCOUNT(REPORT,CHAR(254))REGIONS=''REGIONS.CNTR=0YEAR.TOTALS=''FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      IF COUNT(ROW,'|') < 2 THEN YEAR='' ELSE YEAR=TRIM(FIELD(ROW,'|',2))      REGION=TRIM(FIELD(ROW,'|',1))IF YEAR = '' AND REGION <> '' THEN; *      IF REGION <> '' THEN         IF SUM(YEAR.TOTALS) THEN            LOCATE REGION IN REGIONS SETTING REGION.POS ELSE               REGIONS.CNTR+=1               REGIONS<REGIONS.CNTR>=REGION               REGION.POS=REGIONS.CNTR             END            YEAR.REGION.TOTALS<REGION.POS>=YEAR.TOTALS          END         YEAR.TOTALS=''       END      IF YEAR <> '' THEN         LOCATE YEAR IN YEARS SETTING YEAR.POS ELSE YEAR.POS=0         IF YEAR.POS THEN            GROSS.PROFIT=TRIM(FIELD(ROW,'|',3))            IF NUM(GROSS.PROFIT) THEN               GROSS.PROFIT=ICONV(GROSS.PROFIT,'MD2')               YEAR.TOTALS<1,YEAR.POS>+=GROSS.PROFIT             END          END       END    END NEXT ROW.NO*FOR I = 1 TO 5   W$BAR.LABELS<I> = YEARS<I>*   W$BAR.LABEL.OPTS<I> = "showValues='0'" NEXT I*W$BAR.CAPTION = "Year to Year Gross Profit by Region"W$BAR.XMEMO = "Region"W$BAR.YMEMO = "Gross Profit"W$CHART.HEIGHT = 200 + (70 * REGIONS.CNTR)*FOR REGION.NO = 1 TO REGIONS.CNTR   FOR YEAR.NO = 1 TO 5      REGION.YEAR.AMT=YEAR.REGION.TOTALS<REGION.NO,YEAR.NO>+0      IF REGION.YEAR.AMT < 0 THEN REGION.YEAR.AMT=0      W$BAR.VALUES<YEAR.NO,REGION.NO>=OCONV(REGION.YEAR.AMT,'MD2')    NEXT YEAR.NO   W$BAR.XLABELS<1,REGION.NO>=REGIONS<REGION.NO> NEXT REGION.NORETURN*VERIFY.CURRENT.DATA:*READ LAST.UPDATE FROM FI.DICT.DASHBOARD.CLOSING.STATS, '*LAST.UPDATE' ELSE LAST.UPDATE=0READ LAST.UPDATED FROM FI.DICT.DASHBOARD.CLOSING.STATS, '*LAST.UPDATED' ELSE LAST.UPDATED=0CUR.DATE=DATE(); CUR.TIME=TIME()CUR.TIME=FIELD(CUR.TIME,'.',1)LEN.CUR.TIME=LEN(CUR.TIME)CUR.TIME=STR('0',5-LEN.CUR.TIME):CUR.TIMECUR.DATE.TIME=CUR.DATE:CUR.TIMEDELTA.DATE.TIME=CUR.DATE.TIME-LAST.UPDATEDIF DELTA.DATE.TIME > 900 THEN   * REFRESH EVERY 15 MINUTES   LAST.UPDATED='UPDATING'   BEGIN CASE      CASE PLATFORM = 'D3' OR PLATFORM = 'JB'         EXECUTE "Z REFRESH.DASHBOARD.CLOSING.STATS" CAPTURING DUMMY      CASE 1         EXECUTE "PHANTOM REFRESH.DASHBOARD.CLOSING.STATS" CAPTURING DUMMY   END CASE ENDIF NOT(NUM(LAST.UPDATE)) THEN   IF INDEX(LAST.UPDATE,'UPDATING',1) THEN      LAST.UPDATE='Figures are currently updating.'      LAST.UPDATE<-1>='Try again in a couple of minutes.'    END   MAX.LINES=DCOUNT(LAST.UPDATE,CHAR(254))   ERROR.MSG=''   FOR I = 1 TO MAX.LINES      THIS.MSG=LAST.UPDATE<I>      IF ERROR.MSG <> '' THEN ERROR.MSG:='<br>'      ERROR.MSG:=THIS.MSG    NEXT I   RETURN TO DISPLAY.ERROR ENDRETURN*GET.CURRENT.REPORT:*BEGIN CASE   CASE GET.REPORT.TYPE = 'SALES'       FI.DICT=FI.DICT.DASHBOARD.CLOSING.STATS       LAST.DATE.INDICATOR='*LAST.UPDATE.SALES'       REPORT.STATS.ID='*CURRENT.SALES.STATS'END CASE*** IF MORE THAN 10 MINUTES SINCE LAST UPDATE THEN REFRESH DATA*RECALC.REQUESTED=0DATA.CURRENT=0LOOP   READ LAST.UPDATE FROM FI.DICT, LAST.DATE.INDICATOR ELSE LAST.UPDATE=''   IF NUM(LAST.UPDATE) THEN      CUR.TIME=OCONV(TIME(),'MT')      CONVERT ':' TO '' IN CUR.TIME      CUR.DATE.TIME=DATE():CUR.TIME      LAST.UPDATE.DELTA=CUR.DATE.TIME - LAST.UPDATE      IF LAST.UPDATE.DELTA < 10 THEN DATA.CURRENT=1    ENDUNTIL DATA.CURRENT DO   IF NUM(LAST.UPDATE) THEN      IF NOT(RECALC.REQUESTED) THEN         BEGIN CASE            CASE PLATFORM = 'D3' OR PLATFORM = 'JB'               EXECUTE "Z REFRESH.DASHBOARD.MTD.STATS ":REPORT.TYPE CAPTURING DUMMY            CASE 1               EXECUTE "PHANTOM REFRESH.DASHBOARD.MTD.STATS ":REPORT.TYPE CAPTURING DUMMY         END CASE         RECALC.REQUESTED=1       END    END   SLEEP 2REPEATREAD REPORT.STATS.REC FROM FI.DICT, REPORT.STATS.ID ELSE REPORT.STATS.REC=''WRITE REPORT.STATS.REC ON FI.MVDB.SUBS, 'REPORT.STATS.REC'RETURNEND005165REFRESH.DASHBOARD.MTD.STATS0c2** PHANTOM PROGRAM TO CALCULATE MTD SALES, AR, AP, AND NET INCOME NUMBERS*OPEN.ERRORS=''OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE OPEN.ERRORS:=' MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'DIM SETUP.PARAMS(25)CMND=@SENTENCECMND=TRIM(CMND)OPTION.PARAM=FIELD(CMND,' ',DCOUNT(CMND,' '))IF OPTION.PARAM = 'SALES' OR OPTION.PARAM = 'ALL' THEN   OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.CLOSING.STATS ELSE OPEN.ERRORS:=' DICT DASHBOARD.CLOSING.STATS' ENDIF OPTION.PARAM <> 'SALES' THEN   OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.BALANCES ELSE OPEN.ERRORS:=' DICT DASHBOARD.BALANCES' ENDEXECUTE "TERM 132,20000"*BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='VOC'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'      MD.FILE.NAME='MD'END CASEOPEN '',MD.FILE.NAME TO FI.MD ELSE   OPEN.ERRORS:=' ':MD.FILE.NAME ENDIF OPEN.ERRORS <> '' THEN STOP*DAYS.AGO.60=DATE()-60DAYS.AGO.1000=DATE()-1000ALL.GOOD=1BEGIN CASE   CASE OPTION.PARAM = 'SALES'; GOSUB CALC.SALES   CASE OPTION.PARAM = 'AR'; GOSUB CALC.AR   CASE OPTION.PARAM = 'AP'; GOSUB CALC.AP   CASE OPTION.PARAM = 'NET.INCOME'; GOSUB CALC.NET.INCOME   CASE OPTION.PARAM = 'ALL'      GOSUB CALC.SALES      GOSUB CALC.AR      GOSUB CALC.AP      GOSUB CALC.NET.INCOME      IF ALL.GOOD THEN         DICT.FILE=FI.DICT.BALANCES         TIME.STAMP.TYPE='ALL'         GOSUB UPDATE.TIME.STAMP       END   CASE 1; NULLEND CASESTOP*CALC.SALES:*DICT.FILE=FI.DICT.CLOSING.STATSMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' ENDEQUATE ACCOUNT TO SETUP.PARAMS(1)EQUATE REPORT.FILE TO SETUP.PARAMS(2)EQUATE SALE.DATE.DICT TO SETUP.PARAMS(3)EQUATE SALE.MONTH.DICT TO SETUP.PARAMS(4)EQUATE SALE.YEAR.DICT TO SETUP.PARAMS(5)EQUATE SALE.AMOUNT.DICT TO SETUP.PARAMS(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO SETUP.PARAMS(7)EQUATE SALESMAN.DICT TO SETUP.PARAMS(8)EQUATE BRANCH.DICT TO SETUP.PARAMS(9)EQUATE REGION.DICT TO SETUP.PARAMS(10)EQUATE SALE.DATE.AMC TO SETUP.PARAMS(11)EQUATE SALE.AMOUNT.AMC TO SETUP.PARAMS(12)EQUATE SALE.AMOUNT.CONV TO SETUP.PARAMS(13)EQUATE SALE.AMOUNT.COOR TO SETUP.PARAMS(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO SETUP.PARAMS(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO SETUP.PARAMS(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO SETUP.PARAMS(17)EQUATE SALESMAN.AMC TO SETUP.PARAMS(18)EQUATE SALESMAN.TFILE TO SETUP.PARAMS(19)EQUATE BRANCH.AMC TO SETUP.PARAMS(20)EQUATE BRANCH.TFILE TO SETUP.PARAMS(21)EQUATE REGION.AMC TO SETUP.PARAMS(22)EQUATE REGION.TFILE TO SETUP.PARAMS(23)OTODAY=OCONV(DATE(),'D4-')OMO=OTODAY[1,2]ODAY=OTODAY[4,2]+0OYEAR=OTODAY[7,4]IF ODAY = 1 THEN   OMO=OMO-1   IF NOT(OMO) THEN      OMO=12      OYEAR=OYEAR-1    END ENDDATE.SELECT.STRING=''ISTART=ICONV(OMO:'-1-':OYEAR,'D')IEND=DATE()NUM.COLS=IEND-ISTART+1FOR IDATE = ISTART TO IEND   DATE.SELECT.STRING:=' "':OCONV(IDATE,'D2-'):'"' NEXT IDATE**WRITE DATE.SELECT.STRING ON FI.MVDB.SUBS, 'DATE.SELECT.STRING'SALES.FILE.PATH='SALES.FILE.PATH'**IF PLATFORM = 'UD' THEN**   QFILE.NAME=SALES.FILE.PATH**   CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.QFILE)** END ELSE**   MD.QFILE='Q'**   MD.QFILE<2>=ACCOUNT**   MD.QFILE<3>=REPORT.FILE**   WRITE MD.QFILE ON FI.MD, 'SALES.FILE.PATH'** ENDQFILE.NAME=SALES.FILE.PATHCALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.QFILE)TIME.STAMP.TYPE='SALES'STACKED.1='SELECT ':SALES.FILE.PATH:' WITH ':SALE.DATE.DICT:' = ':DATE.SELECT.STRINGSTACKED.2='SORT ':SALES.FILE.PATH:' BY ':SALE.DATE.DICT:' ':SALE.DATE.DICT:' PIPE ':SALE.AMOUNT.DICT:' PIPE ':COST.OF.SALE.AMOUNT.DICT:' ID-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)WRITE STACKED.2 ON FI.MVDB.CONTROL, 'SALES.REPORT.CMND'WRITE REPORT ON FI.MVDB.CONTROL, 'SALES.REPORT.RESULT'IF NOT(SYSTEM.11) THEN   WRITE 'ERROR: NO SALES CLOSED SINCE BEGINNING OF MONTH' ON FI.DICT.CLOSING.STATS, '*CURRENT.SALES.STATS'   GOSUB UPDATE.TIME.STAMP   SALES.STATS=''**   RETURN** END END ELSE   DATES=''   DATE.CNTR=0   LAST.DATE=''   AMOUNTS=''   COSTS=''   MAX.ROWS=DCOUNT(REPORT,CHAR(254))   FOR ROW.NO = 1 TO MAX.ROWS      ROW=REPORT<ROW.NO>      IF INDEX(ROW,'|',1) THEN         ROW.DATE=TRIM(FIELD(ROW,'|',1))         AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')         COST=ICONV(TRIM(FIELD(ROW,'|',3)),'MD2')         IF NUM(AMOUNT) THEN            IF ROW.DATE <> LAST.DATE THEN               LAST.DATE=ROW.DATE               DATE.CNTR+=1               DATES<1,DATE.CNTR>=ROW.DATE               AMOUNTS<1,DATE.CNTR>=0               COSTS<1,DATE.CNTR>=0             END            AMOUNTS<1,DATE.CNTR>+=AMOUNT            COSTS<1,DATE.CNTR>+=COST          END       END    NEXT ROW.NO   VALUE.CNTR=0   SALES.STATS=''   FOR AMT.CNTR = 1 TO DATE.CNTR      COST=COSTS<1,AMT.CNTR>      AMOUNT=AMOUNTS<1,AMT.CNTR>      IF AMOUNT OR COST THEN         VALUE.CNTR+=1         ROW.DATE=ICONV(DATES<1,AMT.CNTR>,'D')         ROW.DATE=OCONV(ROW.DATE,'D0')         SALES.STATS<1,VALUE.CNTR>=ROW.DATE         SALES.STATS<2,VALUE.CNTR>=AMOUNT         SALES.STATS<3,VALUE.CNTR>=COST       END    NEXT AMT.CNTR ENDWRITE SALES.STATS ON DICT.FILE, '*CURRENT.SALES.STATS'*EXECUTE "REFRESH.DASHBOARD.CLOSING.STATS" CAPTURING DUMMY*GOSUB UPDATE.TIME.STAMPRETURN*CALC.AR:** PERIOD.AMOUNTS DATA LAYOUT* 1 PERIOD 1 AMOUNT* 2 PERIOS 2 AMOUNT* 3 PERIOD 3 AMOUNT* 4 PERIOD 4 AMOUNT* 5* 6 YEAR ] YEAR ] YEAR* 7 PERIOD 1 NUMBER \ PERIOD 2 NUMBER \ PERIOD 3 NUMBER \ PERIOD 4 NUMBER * 8 PERIOD 1 AMOUNT \ PERIOD 2 AMOUNT \ PERIOD 3 AMOUNT \ PERIOD 4 AMOUNT * 9 PERIOD 1 TOTAL DAYS ? PERIOD 2 TOTAL DAYS ? ETC* 10 YEAR 1 JAN # PAID\ FEB # PAID ... ] YEAR 2 JAN # PAID \* 11 YEAR 1 JAN # TOTAL DAYS \ FEB TOTAL DAYS ....* 12 CUSTOMER ] CUSTOMER ]* 13 CUSTOMER AMT DUE ] ] ]* 14 LARGEST DAYS DUE ] ] ]* 15 TOTAL DAYS LAST 1000 DAYS ] ] ]* 16 NUMBER OF ARS LAST 1000 DAYS ] ] ]* 17 TOTAL DAYS LAST 60 DAYS ] ] ]* 18 NUMBER OF ARS LAST 60 DAYS ] ] ]* 19 customers  ] ] ] for 50 highest amounts due* 20 amounts ] ] ] for 50 highest amounts due* 21 customers ] ] ] for 50 highest days due* 22 days due ] ] ] for 50 highest days due* 23 customer ] ] ] ] ] for 50 highest percent increase* 24 percentage increase from 1000 day average to 60 day average for highest 50**DICT.FILE=FI.DICT.BALANCESMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' END*EQUATE AR.ACCOUNT TO SETUP.PARAMS(1)EQUATE AR.REPORT.FILE TO SETUP.PARAMS(2)EQUATE AR.DUE.DATE.DICT TO SETUP.PARAMS(3)EQUATE AR.DATE.PAID.DICT TO SETUP.PARAMS(4)EQUATE AR.INVOICE.AMT.DICT TO SETUP.PARAMS(5)EQUATE AR.BALANCE.DICT TO SETUP.PARAMS(6)EQUATE AR.DUE.DATE.AMC TO SETUP.PARAMS(8)EQUATE AR.DATE.PAID.AMC TO SETUP.PARAMS(9)EQUATE AR.INVOICE.AMT.AMC TO SETUP.PARAMS(10)EQUATE AR.INVOICE.AMT.CONV TO SETUP.PARAMS(11)EQUATE AR.INVOICE.AMT.COOR TO SETUP.PARAMS(12)EQUATE AR.BALANCE.AMC TO SETUP.PARAMS(13)EQUATE AR.BALANCE.CONV TO SETUP.PARAMS(14)EQUATE AR.BALANCE.COOR TO SETUP.PARAMS(15)EQUATE AR.CUSTOMER.DICT TO SETUP.PARAMS(16)EQUATE AR.CUSTOMER.AMC TO SETUP.PARAMS(17)EQUATE AR.CUSTOMER.TFILE TO SETUP.PARAMS(18)*AR.FILE.PATH='AR.FILE.PATH'QFILE.NAME=AR.FILE.PATH**OPEN '',AR.FILE.PATH TO FI.AR.FILE.PATH ELSE**IF PLATFORM = 'UD' THEN**   QFILE.NAME=AR.FILE.PATH**   CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.AR.FILE.PATH)**   IF QFILE.NAME = '' THEN**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** END ELSE**   MD.QFILE='Q'**   MD.QFILE<2>=ACCOUNT**   MD.QFILE<3>=REPORT.FILE**   WRITE MD.QFILE ON FI.MD, 'AR.FILE.PATH'**   OPEN '','AR.FILE.PATH' TO FI.AR.FILE.PATH ELSE**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** ENDCALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)IF QFILE.NAME = '' THEN   WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'   GOSUB UPDATE.TIME.STAMP   ALL.GOOD=0   RETURN ENDEXECUTE "CREATE-INDEX AR.FILE.PATH ":AR.DUE.DATE.DICT CAPTURING DUMMY** END***EXECUTE 'SELECT ':AR.FILE.PATH:' WITH ':AR.BALANCE.DICT:' > "0"' CAPTURING DUMMY**IF NOT(SYSTEM(11)) THEN**   WRITE 'ERROR: NO OUTSTANDING RECEIVABLES' ON FI.DICT.BALANCES, '*CURRENT.AR.STATS'**   GOSUB UPDATE.TIME.STAMP**   ALL.GOOD=0**   RETURN** END**CMND='SORT ':AR.FILE.PATH:' BY ':AR.DUE.DATE.DICT:' BREAK-ON ':AR.DUE.DATE.DICT:' PIPE TOTAL ':AR.BALANCE.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CMND='SORT ':AR.FILE.PATH:' WITH ':AR.INVOICE.AMT.DICT:' > "0" BY ':AR.DUE.DATE.DICTCMND:=' PIPE ':AR.DUE.DATE.DICT:' PIPE ':AR.DATE.PAID.DICT:' PIPE ':AR.INVOICE.AMT.DICTCMND:=' PIPE ':AR.BALANCE.DICT:' PIPE ':AR.CUSTOMER.DICT:' HDR-SUPP COL-HDR-SUPP NOPAGE'WRITE CMND ON FI.MVDB.CONTROL, 'AR.REPORT.CMND'EXECUTE CMND CAPTURING REPORTWRITE REPORT ON FI.MVDB.CONTROL, 'AR.REPORT'* SETUP AGING PERIODS OF 0, 1-30, 31-60, 61-90, AND 90+PERIODS=0:@AM:1:@AM:31:@AM:61:@AM:91PERIOD.AMOUNTS=''CUSTOMERS=''NUM.CUSTS=0CUST.AMT.DUES=''CUST.MOST.DAYS.DUE=''CUST.TOTAL.1000.DAYS=''CUST.NUM.1000.DAYS=''CUST.TOTAL.60.DAYS=''CUST.NUM.60.DAYS=''DATES=''DATE.CNTR=0LAST.DATE=''AMOUNTS=''ROW.NO=0* BUILD LAST 5 YEARSFIVE.YEARS=''FIRST.YEAR=(OCONV(DATE(),'D4-')[7,4])-4FOR YEAR.CNTR = 0 TO 4   FIVE.YEARS<1,-1>=FIRST.YEAR+YEAR.CNTR NEXT YEAR.CNTRPERIOD.AMOUNTS<6>=FIVE.YEARSMAX.ROWS=DCOUNT(REPORT,@AM)LOOP   ROW.NO+=1   ROW=REPORT<ROW.NO>UNTIL ROW.NO > MAX.ROWS DO   IF INDEX(ROW,'|',1) THEN      ROW.DATE=TRIM(FIELD(ROW,'|',2))      DUE.DATE=ICONV(ROW.DATE,'D')      IF DUE.DATE = ROW.DATE OR NOT(NUM(DUE.DATE)) THEN DUE.DATE=''      IF DUE.DATE THEN         DUE.YEAR=OCONV(DUE.DATE,'D4-')[7,4]         LOCATE DUE.YEAR IN FIVE.YEARS<1> SETTING YEAR.POS ELSE YEAR.POS=0         PAID.DATE=TRIM(FIELD(ROW,'|',3))         NEXT.ROW.NO=ROW.NO+1         LOOP            NEXT.ROW=TRIM(REPORT<NEXT.ROW.NO>)         UNTIL INDEX(NEXT.ROW,'|',1) OR NEXT.ROW = '' DO            NEXT.PAID.DATE=NEXT.ROW            IF NEXT.PAID.DATE <> '' THEN PAID.DATE=NEXT.PAID.DATE            NEXT.ROW.NO+=1         REPEAT         ROW.NO=NEXT.ROW.NO-1         IF PAID.DATE <> '' THEN            PAID.DATE=ICONV(PAID.DATE,'D')            PAID.MO=OCONV(PAID.DATE,'D2-')[1,2]            PAID.MO+=0            PAID.YEAR=OCONV(PAID.DATE,'D4-')[7,4]            LOCATE PAID.YEAR IN FIVE.YEARS<1> SETTING PAID.YEAR.POS ELSE PAID.YEAR.POS=0            PAID.DAYS=PAID.DATE-DUE.DATE          END ELSE            PAID.MO=''            PAID.YEAR=''            PAID.DAYS=''            PAID.YEAR.POS=''          END         INV.AMOUNT=ICONV(TRIM(FIELD(ROW,'|',4)),'MD2')         REM.BALANCE=ICONV(TRIM(FIELD(ROW,'|',5)),'MD2')         CUSTOMER=TRIM(FIELD(ROW,'|',6))         CUSTOMER.POS=0         IF NUM(INV.AMOUNT) AND NUM(REM.BALANCE) THEN            IF CUSTOMER <> '' THEN               IF REM.BALANCE OR PAID.DATE >= DAYS.AGO.1000 THEN                  LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUSTOMER.POS ELSE                     NUM.CUSTS+=1                     CUSTOMER.POS=NUM.CUSTS                     CUSTOMERS<1,CUSTOMER.POS>=CUSTOMER                   END                END             END            IF REM.BALANCE OR NOT(PAID.DATE) THEN               DAYS.DUE=DATE()-DUE.DATE             END ELSE               DAYS.DUE=PAID.DATE-DUE.DATE             END            IF DAYS.DUE < 0 THEN DAYS.DUE=0            LOCATE DAYS.DUE IN PERIODS BY "AR" SETTING PERIOD ELSE PERIOD=PERIOD-1            IF REM.BALANCE THEN               PERIOD.AMOUNTS<PERIOD>+=REM.BALANCE               IF CUSTOMER.POS AND DAYS.DUE THEN                  CUST.AMT.DUES<1,CUSTOMER.POS>=CUST.AMT.DUES<1,CUSTOMER.POS>+REM.BALANCE                  IF DAYS.DUE > CUST.MOST.DAYS.DUE<1,CUSTOMER.POS> THEN                     CUST.MOST.DAYS.DUE<1,CUSTOMER.POS>=DAYS.DUE                   END                END             END            IF DAYS.DUE AND CUSTOMER.POS THEN               IF PAID.DATE THEN                  PAID.OR.TODAY=PAID.DATE                END ELSE                  PAID.OR.TODAY=DATE()                END               IF PAID.OR.TODAY >= DAYS.AGO.1000 THEN; * PAID IN LAST 1000 DAYS                  CUST.TOTAL.1000.DAYS<1,CUSTOMER.POS>=CUST.TOTAL.1000.DAYS<1,CUSTOMER.POS>+DAYS.DUE                  CUST.NUM.1000.DAYS<1,CUSTOMER.POS>=CUST.NUM.1000.DAYS<1,CUSTOMER.POS>+1                  IF PAID.OR.TODAY >= DAYS.AGO.60 THEN; * PAID IN LAST 60 DAYS                     CUST.TOTAL.60.DAYS<1,CUSTOMER.POS>=CUST.TOTAL.60.DAYS<1,CUSTOMER.POS>+DAYS.DUE                     CUST.NUM.60.DAYS<1,CUSTOMER.POS>=CUST.NUM.60.DAYS<1,CUSTOMER.POS>+1                   END                END             END            IF PAID.YEAR.POS THEN               IF YEAR.POS AND PERIOD THEN                  PERIOD.AMOUNTS<7,YEAR.POS,PERIOD>=PERIOD.AMOUNTS<7,YEAR.POS,PERIOD>+1                  PERIOD.AMOUNTS<8,YEAR.POS,PERIOD>=PERIOD.AMOUNTS<8,YEAR.POS,PERIOD>+INV.AMOUNT                  PERIOD.AMOUNTS<9,YEAR.POS>=PERIOD.AMOUNTS<9,YEAR.POS>+DAYS.DUE                END               PERIOD.AMOUNTS<10,PAID.YEAR.POS,PAID.MO>=PERIOD.AMOUNTS<10,PAID.YEAR.POS,PAID.MO>+1               PERIOD.AMOUNTS<11,PAID.YEAR.POS,PAID.MO>=PERIOD.AMOUNTS<11,PAID.YEAR.POS,PAID.MO>+PAID.DAYS             END          END       END    ENDREPEATPERIOD.AMOUNTS<12>=CUSTOMERSPERIOD.AMOUNTS<13>=CUST.AMT.DUESPERIOD.AMOUNTS<14>=CUST.MOST.DAYS.DUEPERIOD.AMOUNTS<15>=CUST.TOTAL.1000.DAYSPERIOD.AMOUNTS<16>=CUST.NUM.1000.DAYSPERIOD.AMOUNTS<17>=CUST.TOTAL.60.DAYSPERIOD.AMOUNTS<18>=CUST.NUM.60.DAYS*** GET THE 50 HIGHEST AMOUNTS DUE*HIGHEST.AMTS=''HIGHEST.AMTS.CUSTS=''MAX.CUSTS=DCOUNT(CUSTOMERS,@VM)FOR I = 1 TO MAX.CUSTS   MAX.AMT=CUST.AMT.DUES<1,I>   IF MAX.AMT THEN      LOCATE MAX.AMT IN HIGHEST.AMTS<1> BY "DR" SETTING POS ELSE NULL      IF POS <= 50 THEN         HIGHEST.AMTS=INSERT(HIGHEST.AMTS,1,POS,0,MAX.AMT)         HIGHEST.AMTS.CUSTS=INSERT(HIGHEST.AMTS.CUSTS,1,POS,0,CUSTOMERS<1,I>)       END    END NEXT IPERIOD.AMOUNTS<19>=HIGHEST.AMTS.CUSTSPERIOD.AMOUNTS<20>=HIGHEST.AMTS*** GET THE 50 HIGHEST DUE DAYS*HIGHEST.DAYS=''HIGHEST.DAYS.CUSTS=''FOR I = 1 TO MAX.CUSTS   CUST.DAYS.DUE=CUST.MOST.DAYS.DUE<1,I>   IF CUST.DAYS.DUE THEN      LOCATE CUST.DAYS.DUE IN HIGHEST.DAYS<1> BY "DR" SETTING POS ELSE NULL      IF POS <= 50 THEN         HIGHEST.DAYS=INSERT(HIGHEST.DAYS,1,POS,0,CUST.DAYS.DUE)         HIGHEST.DAYS.CUSTS=INSERT(HIGHEST.DAYS.CUSTS,1,POS,0,CUSTOMERS<1,I>)       END    END NEXT IPERIOD.AMOUNTS<21>=HIGHEST.DAYS.CUSTSPERIOD.AMOUNTS<22>=HIGHEST.DAYS*** GET THE 50 CUSTOMERS WITH HIGHEST PERCENTAGE INCREASES*HIGHEST.INCREASE.PCTS=''HIGHEST.INCREASE.CUSTS=''HIGHEST.INCREASE.60.DAYS=''HIGHEST.INCREASE.1000.DAYS=''FOR I = 1 TO MAX.CUSTS   DAYS.1000=CUST.TOTAL.1000.DAYS<1,I>   NUM.1000=CUST.NUM.1000.DAYS<1,I>   DAYS.60=CUST.TOTAL.60.DAYS<1,I>   NUM.60=CUST.NUM.60.DAYS<1,I>   IF NUM.1000 THEN      AVG.1000=DAYS.1000 / NUM.1000    END ELSE AVG.1000=0   IF NUM.60 THEN      AVG.60=DAYS.60 / NUM.60    END ELSE AVG.60=0   AVG.INCREASE=AVG.60 - AVG.1000   IF AVG.INCREASE > 0 AND AVG.60 > 300 THEN;  * MUST BE DUE OVER 30 DAYS      IF AVG.1000 THEN         PCT.INCREASE=INT(AVG.INCREASE * 1000 / AVG.1000 + .5)         PCT.INCREASE=OCONV(PCT.INCREASE,'MD1')       END ELSE PCT.INCREASE=0      LOCATE PCT.INCREASE IN HIGHEST.INCREASE.PCTS<1> BY "DR" SETTING POS ELSE NULL      IF POS <= 50 THEN         HIGHEST.INCREASE.PCTS=INSERT(HIGHEST.INCREASE.PCTS,1,POS,0,PCT.INCREASE)         HIGHEST.INCREASE.CUSTS=INSERT(HIGHEST.INCREASE.CUSTS,1,POS,0,CUSTOMERS<1,I>)         HIGHEST.INCREASE.1000.DAYS=INSERT(HIGHEST.INCREASE.1000.DAYS,1,POS,0,OCONV(AVG.1000,'MD1'))         HIGHEST.INCREASE.60.DAYS=INSERT(HIGHEST.INCREASE.60.DAYS,1,POS,0,OCONV(AVG.60,'MD1'))       END    END NEXT IPERIOD.AMOUNTS<23>=HIGHEST.INCREASE.CUSTSPERIOD.AMOUNTS<24>=HIGHEST.INCREASE.PCTSPERIOD.AMOUNTS<25>=HIGHEST.INCREASE.60.DAYSPERIOD.AMOUNTS<26>=HIGHEST.INCREASE.1000.DAYS*TIME.STAMP.TYPE='AR'DICT.FILE=FI.DICT.BALANCESGOSUB UPDATE.TIME.STAMPWRITE PERIOD.AMOUNTS ON DICT.FILE, '*CURRENT.AR.STATS'RETURN*CALC.AP:*DICT.FILE=FI.DICT.BALANCESMATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' END*EQUATE AP.ACCOUNT TO SETUP.PARAMS(1)EQUATE AP.REPORT.FILE TO SETUP.PARAMS(2)EQUATE AP.DUE.DATE.DICT TO SETUP.PARAMS(3)EQUATE AP.DATE.PAID.DICT TO SETUP.PARAMS(4)EQUATE AP.INVOICE.AMT.DICT TO SETUP.PARAMS(5)EQUATE AP.BALANCE.DICT TO SETUP.PARAMS(6)EQUATE AP.DUE.DATE.AMC TO SETUP.PARAMS(8)EQUATE AP.DATE.PAID.AMC TO SETUP.PARAMS(9)EQUATE AP.INVOICE.AMT.AMC TO SETUP.PARAMS(10)EQUATE AP.INVOICE.AMT.CONV TO SETUP.PARAMS(11)EQUATE AP.INVOICE.AMT.COOR TO SETUP.PARAMS(12)EQUATE AP.BALANCE.AMC TO SETUP.PARAMS(13)EQUATE AP.BALANCE.CONV TO SETUP.PARAMS(14)EQUATE AP.BALANCE.COOR TO SETUP.PARAMS(15)*AP.FILE.PATH='AP.FILE.PATH'QFILE.NAME=AP.FILE.PATH**OPEN '',AP.FILE.PATH TO FI.AP.FILE.PATH ELSE**IF PLATFORM = 'UD' THEN**   QFILE.NAME=AP.FILE.PATH**   CALL CREATE.UD.QPOINTER(ACCOUNT,AP.REPORT.FILE,QFILE.NAME,FI.AP.FILE.PATH)**   IF QFILE.NAME = '' THEN**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** END ELSE**   MD.QFILE='Q'**   MD.QFILE<2>=AP.ACCOUNT**   MD.QFILE<3>=AP.REPORT.FILE**   WRITE MD.QFILE ON FI.MD, 'AP.FILE.PATH'**   OPEN '','AP.FILE.PATH' TO FI.AP.FILE.PATH ELSE**      WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'**      GOSUB UPDATE.TIME.STAMP**      ALL.GOOD=0**      RETURN**    END** ENDCALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)IF QFILE.NAME = '' THEN   WRITE 'ERROR: UNABLE TO OPEN ':REPORT.FILE:' IN ':ACCOUNT:' ACCOUNT' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'   GOSUB UPDATE.TIME.STAMP   ALL.GOOD=0   RETURN ENDEXECUTE "CREATE-INDEX AP.FILE.PATH ":AP.DUE.DATE.DICT CAPTURING DUMMY** END*STACKED.1='SELECT ':AP.FILE.PATH:' WITH ':AP.BALANCE.DICT:' > "0"'STACKED.2='SORT ':AP.FILE.PATH:' BY ':AP.DUE.DATE.DICT:' BREAK-ON ':AP.DUE.DATE.DICT:' PIPE TOTAL ':AP.BALANCE.DICT:' ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)WRITE STACKED.2 ON FI.MVDB.CONTROL, 'AP.CMND'WRITE REPORT ON FI.MVDB.CONTROL, 'AP.REPORT'IF NOT(SYSTEM.11) THEN   WRITE 'ERROR: NO OUTSTANDING PAYABLES' ON FI.DICT.BALANCES, '*CURRENT.AP.STATS'   GOSUB UPDATE.TIME.STAMP**   ALL.GOOD=0**   RETURN** END   PERIOD.AMOUNTS='' END ELSE   * SETUP AGING PERIODS OF 0, 1-30, 31-60, 61-90, AND 90+   PERIODS=0:@AM:1:@AM:31:@AM:61:@AM:91   PERIOD.AMOUNTS=''   DATES=''   DATE.CNTR=0   LAST.DATE=''   AMOUNTS=''   MAX.ROWS=DCOUNT(REPORT,CHAR(254))   FOR ROW.NO = 1 TO MAX.ROWS      ROW=REPORT<ROW.NO>      IF INDEX(ROW,'|',1) THEN         ROW.DATE=TRIM(FIELD(ROW,'|',1))         DUE.DATE=ICONV(ROW.DATE,'D')         IF DUE.DATE = ROW.DATE OR NOT(NUM(DUE.DATE)) THEN DUE.DATE=''         IF DUE.DATE THEN            AMOUNT=ICONV(TRIM(FIELD(ROW,'|',2)),'MD2')            IF NUM(AMOUNT) THEN               DAYS.DUE=DATE()-DUE.DATE               IF DAYS.DUE < 0 THEN DAYS.DUE=0               LOCATE DAYS.DUE IN PERIODS BY "AR" SETTING PERIOD ELSE PERIOD=PERIOD-1               PERIOD.AMOUNTS<PERIOD>+=AMOUNT             END          END       END    NEXT ROW.NO END*TIME.STAMP.TYPE='AP'DICT.FILE=FI.DICT.BALANCESGOSUB UPDATE.TIME.STAMPWRITE PERIOD.AMOUNTS ON DICT.FILE, '*CURRENT.AP.STATS'*CALC.NET.INCOME:*TIME.STAMP.TYPE='NET.INCOME'DICT.FILE=FI.DICT.BALANCESGOSUB UPDATE.TIME.STAMPWRITE 999 ON DICT.FILE, '*CURRENT.NET.INCOME.STATS'RETURN*UPDATE.TIME.STAMP:*TIME.STAMP=TIME()TIME.STAMP=STR('0',5-LEN(TIME.STAMP)):TIME.STAMPWRITE DATE():TIME.STAMP ON DICT.FILE, '*LAST.UPDATE.':TIME.STAMP.TYPEWRITE DATE():TIME.STAMP ON DICT.FILE, '*LAST.UPDATED.':TIME.STAMP.TYPERETURNEND0007DFSUB.DEMO.SINGLE.MONTH.SALES.BY.REP0c2SUBROUTINE SUB.DEMO.SINGLE.MONTH.SALES.BY.REP***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEMONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'CONVERT ',' TO CHAR(254) IN MONTHSOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPMATWRITE WIDGET.USER.DATA ON FILE.CONTROL, 'DEBUG'READV YEARS FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE', 67 ELSE   YEARS='2013,2014,2015'   CONVERT ',' TO CHAR(253) IN YEARS ENDREVENUE.OR.GP=WIDGET.USER.DATA(1)YEAR=WIDGET.USER.DATA(2)MONTH=WIDGET.USER.DATA(3)LOCATE MONTH IN MONTHS SETTING MONTH.SVM ELSE MONTH.SVM=1YEAR.DETAIL.ID=''BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE=MONTH:' ':YEAR:' Sales By Sales Rep'      W$BAR.YMEMO = "Sales"      YEAR.DETAIL.ID='SALES.':YEAR      MAX.ROUNDER=150000   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE=MONTH:' ':YEAR:' Gross Profit By Sales Rep'      W$BAR.YMEMO = "Gross Profit"      YEAR.DETAIL.ID='GPS.':YEAR      MAX.ROUNDER=50000END CASEREAD REC FROM FILE.CONTROL, YEAR.DETAIL.ID ELSE REC=''*REPS=REC<1>**MAX.SALES.AMT=0N=0FIRST.YEAR=''MAX.REPS=DCOUNT(REPS,CHAR(253))FOR NN = 1 TO MAX.REPS   REP=REPS<1,NN>   SALES.AMT=REC<2,NN,MONTH.SVM>   SALES.AMT=OCONV(SALES.AMT,'MD02')   IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT   W$BAR.VALUES<1,NN> = SALES.AMT   W$BAR.XLABELS<1,NN> = REPNEXT NNW$BAR.XMEMO = "Sales Rep"* ROUND MAX AMOUNT UP TO THE NEXT MAX.ROUNDERMAX.SALES.AMT+=MAX.ROUNDERMAX.SALES.AMT=INT(MAX.SALES.AMT/MAX.ROUNDER) * MAX.ROUNDERW$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'RETURN0002FASUB.TEST.WIDGET0c2SUBROUTINE SUB.TEST.WIDGET** Copyright (c) 2010 SB, Inc. All rights reserved.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Neat Pie Chart"W$TYPE = "FC2DPIE"W$WIDTH = 1 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$PIE.CAPTION = "MV Dashboard Survey"*W$PIE.LABELS<1,1> = "Love it"W$PIE.LABELS<1,2> = "Like it"W$PIE.LABELS<1,3> = "Very nice"W$PIE.LABELS<1,4> = "Awesome!"*W$PIE.VALUES<1,1> = "1560"W$PIE.VALUES<1,2> = "400"W$PIE.VALUES<1,3> = "1012"W$PIE.VALUES<1,4> = "4065"** For a 2D pie, a specific slice can be separated from the pie* by setting this value:* W$PIE.VALUE.OPTS<1,3> = 'isSliced="1"'** To show percentages instead of values, use this:W$CHART.OPTIONS<-1> = "showPercentValues='1'"RETURN003DCBSUB.PORTAL.DASHBOARD0c2SUBROUTINE SUB.PORTAL.DASHBOARD** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) Zumasys, Inc*WEB$TITLE='MVDashboard Portal Financial Picture'WEB.FORM.NAME='PORTAL.DASHBOARD'W$TYPE='HTML'W$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*EQUATE AR.AMOUNTS TO GLOBAL.USER.DATA(1)EQUATE AP.AMOUNTS TO GLOBAL.USER.DATA(2)OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE    ERROR.MSG<-1>='UNABLE TO OPEN MVDB.CONTROL'   GOTO DISPLAY.ERROR ENDREAD PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'END CASEOPEN '','DASHBOARD.CLOSING.STATS' TO FI.DASHBOARD.CLOSING.STATS ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.CLOSING.STATS ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'   GOTO DISPLAY.ERROR ENDOPEN '','DASHBOARD.BALANCES' TO FI.DASHBOARD.BALANCES ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DASHBOARD.BALANCES'   GOTO DISPLAY.ERROR ENDREAD PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'ERROR.MSG=''DIM SALES.SETUP.PARAMS(20), AR.SETUP.PARAMS(20), AP.SETUP.PARAMS(20), NET.INCOME.SETUP.PARAMS(20)*MATREAD SALES.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SALES.SETUP.PARAMS='' ENDEQUATE SALES.ACCOUNT TO SALES.SETUP.PARAMS(1)EQUATE SALES.REPORT.FILE TO SALES.SETUP.PARAMS(2)EQUATE SALES.DATE.DICT TO SALES.SETUP.PARAMS(3)EQUATE SALES.AMOUNT.DICT TO SALES.SETUP.PARAMS(6)EQUATE GP.DICT.NAME TO SALES.SETUP.PARAMS(7)*IF SALES.ACCOUNT = '' OR SALES.REPORT.FILE = '' OR SALES.DATE.DICT = '' OR SALES.AMOUNT.DICT = '' THEN   ERROR.MSG<-1>='SALES FILE ACCOUNT, SALES FILE NAME, DATE OF SALE, AND AMOUNT OF SALE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED' END*** BUILD SAMPLE DATA IF USING MVDB FOR SALES ACCOUNT*IF SALES.ACCOUNT = 'MVDB' THEN   EXECUTE "BUILD.SAMPLE.PORTAL.FILES" CAPTURING DUMMY END**OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.DASHBOARD.BALANCES ELSE    ERROR.MSG<-1>='UNABLE TO OPEN DICT DASHBOARD.BALANCES'   GOTO DISPLAY.ERROR ENDMATREAD AR.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ELSE   MAT AR.SETUP.PARAMS='' END*EQUATE AR.ACCOUNT TO AR.SETUP.PARAMS(1)EQUATE AR.REPORT.FILE TO AR.SETUP.PARAMS(2)EQUATE AR.DUE.DATE.DICT TO AR.SETUP.PARAMS(3)EQUATE AR.BALANCE.DICT TO AR.SETUP.PARAMS(6)****IF AR.ACCOUNT = '' OR AR.REPORT.FILE = '' OR AR.DUE.DATE.DICT = '' OR AR.BALANCE.DICT = '' THEN**   ERROR.MSG<-1>='AR FILE ACCOUNT, AR FILE NAME, DUE DATE, AND BALANCE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'***   GOTO DISPLAY.ERROR** END*MATREAD AP.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.AP.REPORT.SETUP' ELSE   MAT AP.SETUP.PARAMS='' END*EQUATE AP.ACCOUNT TO AP.SETUP.PARAMS(1)EQUATE AP.REPORT.FILE TO AP.SETUP.PARAMS(2)EQUATE AP.DUE.DATE.DICT TO AP.SETUP.PARAMS(3)EQUATE AP.BALANCE.DICT TO AP.SETUP.PARAMS(6)****IF AP.ACCOUNT = '' OR AP.REPORT.FILE = '' OR AP.DUE.DATE.DICT = '' OR AP.BALANCE.DICT = '' THEN**   ERROR.MSG<-1>='AP FILE ACCOUNT, AP FILE NAME, DUE DATE, AND BALANCE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'***   GOTO DISPLAY.ERROR** END***MATREAD NET.INCOME.SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.NET.INCOME.REPORT.SETUP' ELSE**   MAT NET.INCOME.SETUP.PARAMS=''** END*EQUATE NET.INCOME.ACCOUNT TO NET.INCOME.SETUP.PARAMS(1)EQUATE NET.INCOME.REPORT.FILE TO NET.INCOME.SETUP.PARAMS(2)EQUATE NET.INCOME.DUE.DATE.DICT TO NET.INCOME.SETUP.PARAMS(3)EQUATE NET.INCOME.BALANCE.DICT TO NET.INCOME.SETUP.PARAMS(6)****IF NET.INCOME.ACCOUNT = '' OR NET.INCOME.REPORT.FILE = '' OR NET.INCOME.DUE.DATE.DICT = '' OR NET.INCOME.BALANCE.DICT = '' THEN**   ERROR.MSG<-1>='NET INCOME FILE ACCOUNT, NET INCOME FILE NAME, DUE DATE, AND BALANCE MUST ALL BE DEFINED BEFORE REPORTS CAN BE ATTEMPTED'***   GOTO DISPLAY.ERROR** END*IF ERROR.MSG <> '' THEN***   GOTO DISPLAY.ERROR END** START ANY REQUIRED BACKGROUND CALCULATIONS*CUR.TIME=TIME()CUR.TIME=FIELD(CUR.TIME,'.',1)CUR.TIME=STR('0',5-LEN(CUR.TIME)):CUR.TIMECUR.DATE.TIME=DATE():CUR.TIME*** SALES*READU SALES FROM FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES' ELSE SALES=''BEGIN CASE   CASE SALES = 'UPDATING'; SALES.STATUS='UPDATING'   CASE NOT(NUM(SALES)); SALES.STATUS='NEED CALC'   CASE (CUR.DATE.TIME - SALES) < 900;   * LESS THAN 15 MINUTES      SALES.STATUS='GOOD'      READ SALES.REC FROM FI.DICT.CLOSING.STATS, '*CURRENT.SALES.STATS' ELSE         SALES.STATUS='NEED CALC'       END   CASE 1; SALES.STATUS='NEED CALC'END CASEIF SALES.STATUS <> 'NEED CALC' THEN   RELEASE FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES' END*** AR*READU AR FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR' ELSE AR=''BEGIN CASE   CASE AR = 'UPDATING'; AR.STATUS='UPDATING'   CASE NOT(NUM(AR)); AR.STATUS='NEED CALC'   CASE (CUR.DATE.TIME - AR) < 900;   * LESS THAN 15 MINUTES      AR.STATUS='GOOD'      READ AR.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AR.STATS' ELSE         AR.STATUS='NEED CALC'       END   CASE 1; AR.STATUS='NEED CALC'END CASEIF AR.STATUS <> 'NEED CALC' THEN   RELEASE FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR' END*** AP*READU AP FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP' ELSE AP=''BEGIN CASE   CASE AP = 'UPDATING'; AP.STATUS='UPDATING'   CASE NOT(NUM(AP)); AP.STATUS='NEED CALC'   CASE (CUR.DATE.TIME - AP) < 900;   * LESS THAN 15 MINUTES      AP.STATUS='GOOD'      READ AP.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AP.STATS' ELSE         AP.STATUS='NEED CALC'       END   CASE 1; AP.STATUS='NEED CALC'END CASEIF AP.STATUS <> 'NEED CALC' THEN   RELEASE FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP' END******* NET.INCOME*****READU NET.INCOME FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME' ELSE NET.INCOME=''**BEGIN CASE**   CASE NET.INCOME = 'UPDATING'; NET.INCOME.STATUS='UPDATING'**   CASE NOT(NUM(NET.INCOME)); NET.INCOME.STATUS='NEED CALC'**   CASE (CUR.DATE.TIME - NET.INCOME) < 900;   * LESS THAN 15 MINUTES**      NET.INCOME.STATUS='GOOD'**      READ NET.INCOME.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.NET.INCOME.STATS' ELSE**         NET.INCOME.STATUS='NEED CALC'**       END**   CASE 1; NET.INCOME.STATUS='NEED CALC'**END CASE**IF NET.INCOME.STATUS <> 'NEED CALC' THEN**   RELEASE FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME'** END*IF SALES.STATUS <> 'GOOD' OR AR.STATUS <> 'GOOD' OR AP.STATUS <> 'GOOD' THEN ; *OR NET.INCOME.STATUS <> 'GOOD' THEN   IF SALES.STATUS = 'NEED CALC' AND AR.STATUS = 'NEED CALC' AND AP.STATUS = 'NEED CALC' THEN; *AND NET.INCOME.STATUS = 'NEED CALC' THEN      TYPE.CALC='ALL'      GOSUB INITIATE.CALC.PHANTOM      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.ALL'      WRITE 'UPDATING' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES'      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR'      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP'**      WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME'    END ELSE      IF SALES.STATUS = 'NEED CALC' THEN         TYPE.CALC='SALES'         GOSUB INITIATE.CALC.PHANTOM         WRITE 'UPDATING' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES'       END      IF AR.STATUS = 'NEED CALC' THEN         TYPE.CALC='AR'         GOSUB INITIATE.CALC.PHANTOM         WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR'       END      IF AP.STATUS = 'NEED CALC' THEN         TYPE.CALC='AP'         GOSUB INITIATE.CALC.PHANTOM         WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP'       END**      IF NET.INCOME.STATUS = 'NEED CALC' THEN**         TYPE.CALC='NET.INCOME'**         GOSUB INITIATE.CALC.PHANTOM**         WRITE 'UPDATING' ON FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME'**       END    END   *   NOW.GOOD=1   *   ** GIVE IT 10 SECONDS TO COMPLETE ANY CALCS AND TRY AGAIN   *   SLEEP 10   *   IF SALES.STATUS <> 'GOOD' THEN      READ SALES.STATUS FROM FI.DICT.CLOSING.STATS, '*LAST.UPDATE.SALES' ELSE SALES.STATUS='UPDATING'      IF NUM(SALES.STATUS) THEN         READ SALES.REC FROM FI.DICT.CLOSING.STATS, '*CURRENT.SALES.STATS' ELSE            SALES.STATUS='UPDATING'            NOW.GOOD=0          END       END ELSE         NOW.GOOD=0       END    END   *   IF AR.STATUS <> 'GOOD' THEN      READ AR.STATUS FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AR' ELSE AR.STATUS='UPDATING'      IF NUM(AR.STATUS) THEN         READ AR.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AR.STATS' ELSE            AR.STATUS='UPDATING'            NOW.GOOD=0          END       END ELSE         NOW.GOOD=0       END    END   *   IF AP.STATUS <> 'GOOD' THEN      READ AP.STATUS FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.AP' ELSE AP.STATUS='UPDATING'      IF NUM(AP.STATUS) THEN         READ AP.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AP.STATS' ELSE            AP.STATUS='UPDATING'            NOW.GOOD=0          END       END ELSE         NOW.GOOD=0       END    END**   IF NET.INCOME.STATUS <> 'GOOD' THEN**      READ NET.INCOME.STATUS FROM FI.DICT.DASHBOARD.BALANCES, '*LAST.UPDATE.NET.INCOME' ELSE NET.INCOME.STATUS='UPDATING'**      IF NUM(NET.INCOME.STATUS) THEN**         READ NET.INCOME.REC FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.NET.INCOME.STATS' ELSE**            NET.INCOME.STATUS='UPDATING'**            NOW.GOOD=0**          END**       END ELSE**         NOW.GOOD=0**       END**    END   *   IF NOT(NOW.GOOD) THEN      *      ** USE PROMPTS AS A WAY OF SHOWING WHICH ARE CALCULATION.  NOTHING WILL BE DONE WITH THAT CONTENT OF THE      ** PROMPT WHEN THE GO BUTTON IS CLICKED.      *      W$INPUT.PROMPT<1> = "MTD Sales Calcs"      W$INPUT.TYPE<1> = "TEXT"      W$INPUT.UDPOS<1> = 1      W$INPUT.DEFAULT<1> = SALES.STATUS      *      IF AR.REPORT.FILE <> '' THEN         W$INPUT.PROMPT<2> = "AR Calcs"         W$INPUT.TYPE<2> = "TEXT"         W$INPUT.UDPOS<2> = 2         W$INPUT.DEFAULT<2> = AR.STATUS         *         IF AP.REPORT.FILE <> '' THEN            W$INPUT.PROMPT<3> = "AP Calcs"            W$INPUT.TYPE<3> = 'TEXT'            W$INPUT.UDPOS<3> = 3            W$INPUT.DEFAULT<3> = AP.STATUS          END       END      ***      W$INPUT.PROMPT<4> = "Net Income Calcs"**      W$INPUT.TYPE<4> = 'TEXT'**      W$INPUT.UDPOS<4> = 4**      W$INPUT.DEFAULT<4> = NET.INCOME.STATUS      *      ERROR.MSG<-1>='Figures are currently updating.'      ERROR.MSG<-1>='Try again in a minute or two.'      GOTO DISPLAY.ERROR   END END*DASH.REC=''MMM.YYYY=OCONV(DATE(),'D4')[4,8]DASH.REC<1>=MMM.YYYYYYYY=FIELD(MMM.YYYY,' ',2)DASH.REC<2>=YYYYDASH.REC<9>=DASH.REC<1>DASH.REC<10>=YYYYDASH.REC<15>=OCONV(DATE(),'D2-')MTD.SALES=SUM(SALES.REC<2>); DASH.REC<3>=MTD.SALESMTD.COST.OF.SALES=SUM(SALES.REC<3>)GROSS.PROFIT=MTD.SALES-MTD.COST.OF.SALESDASH.REC<5>=GROSS.PROFITPERCENT=INT((GROSS.PROFIT*1000)/MTD.SALES + .5)DASH.REC<7>=PERCENT*** USE DASHBOARD.CLOSING.STATS TO GET YEAR TO DATE TOTALS*STACKED.1=''STACKED.2='SORT DASHBOARD.CLOSING.STATS WITH YYYY = "':YYYY:'" BY YYYY BREAK-ON YYYY PIPE TOTAL AMOUNT PIPE TOTAL COST.OF.SALE ID-SUPP DET-SUPP HDR-SUPP COL-HDR-SUPP NOPAGE'CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)MAX.ROWS=DCOUNT(REPORT,CHAR(254))YTD.SALES=0YTD.COST.OF.SALES=0FOR ROW.NO = 1 TO MAX.ROWS   ROW=REPORT<ROW.NO>   IF INDEX(ROW,'|',1) THEN      TEST.YYYY=TRIM(FIELD(ROW,'|',1))      IF TEST.YYYY = YYYY THEN         YTD.SALES=TRIM(FIELD(ROW,'|',2))         YTD.SALES=ICONV(YTD.SALES,'MD2')         YTD.COST.OF.SALES=TRIM(FIELD(ROW,'|',3))         YTD.COST.OF.SALES=ICONV(YTD.COST.OF.SALES,'MD2')       END    END NEXT ROW.NODASH.REC<4>=YTD.SALESGROSS.PROFIT=YTD.SALES-YTD.COST.OF.SALESIF NOT(YTD.SALES) THEN   MARGIN=0 END ELSE   MARGIN=INT(GROSS.PROFIT*1000 / YTD.SALES + .5) ENDDASH.REC<6>=GROSS.PROFITDASH.REC<8>=MARGIN*TEMP.AR.REC=AR.REC<1>:@AM:AR.REC<2>:@AM:AR.REC<3>:@AM:AR.REC<4>:@AM:AR.REC<5>SUM.AR.BALANCES=SUM(TEMP.AR.REC)DASH.REC<28>=SUM.AR.BALANCESIF SUM.AR.BALANCES THEN   DAYS.CURRENT=AR.REC<1>; DASH.REC<30>=DAYS.CURRENT; DASH.REC<31>=INT(DAYS.CURRENT*1000/SUM.AR.BALANCES + .5)   DAYS.1.30=AR.REC<2>; DASH.REC<16>=DAYS.1.30; DASH.REC<17>=INT(DAYS.1.30*1000/SUM.AR.BALANCES + .5)   DAYS.31.60=AR.REC<3>; DASH.REC<19>=DAYS.31.60; DASH.REC<20>=INT(DAYS.31.60*1000/SUM.AR.BALANCES + .5)   DAYS.61.90=AR.REC<4>; DASH.REC<22>=DAYS.61.90; DASH.REC<23>=INT(DAYS.61.90*1000/SUM.AR.BALANCES + .5)   DAYS.91=AR.REC<5>; DASH.REC<25>=DAYS.91; DASH.REC<26>=INT(DAYS.91*1000/SUM.AR.BALANCES + .5) ENDCONVERT CHAR(254) TO CHAR(253) IN TEMP.AR.RECAR.AMOUNTS=TEMP.AR.REC*SUM.AP.BALANCES=SUM(AP.REC)DASH.REC<29>=SUM.AP.BALANCESDAYS.CURRENT=AP.REC<1>; DASH.REC<32>=DAYS.CURRENTDAYS.1.30=AP.REC<2>; DASH.REC<18>=DAYS.1.30DAYS.31.60=AP.REC<3>; DASH.REC<21>=DAYS.31.60DAYS.61.90=AP.REC<4>; DASH.REC<24>=DAYS.61.90DAYS.91=AP.REC<5>; DASH.REC<27>=DAYS.91TEMP.AP.REC=AP.RECCONVERT CHAR(254) TO CHAR(253) IN TEMP.AP.RECAP.AMOUNTS=TEMP.AP.REC** DEFAULT CONVERSIONS TO $CONVS=''FOR I = 3 TO 32      CONVS<I>='$' NEXT I* CHANGE THOSE THAT AREN'TCONVS<7>='%'; CONVS<8>='%'CONVS<17>='%'; CONVS<20>='%'; CONVS<23>='%'; CONVS<26>='%'; CONVS<31>='%'CONVS<1>=''; CONVS<2>=''CONVS<9>=''; CONVS<10>=''CONVS<13>=''; CONVS<14>=''; CONVS<15>=''**W$PRINTABLE=1W$PDFABLE=1OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE RETURNBEGIN CASE   CASE AR.REPORT.FILE <> '' AND AP.REPORT.FILE <> '' AND GP.DICT.NAME <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD'   CASE GP.DICT.NAME <> '' AND AR.REPORT.FILE <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.GP.AR'   CASE GP.DICT.NAME <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.GP'   CASE AR.REPORT.FILE <> '' AND AP.REPORT.FILE <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.AR.AP'   CASE AR.REPORT.FILE <> ''      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES.AR'   CASE 1      WEB.FORM.NAME='PORTAL.DASHBOARD.SALES'END CASEREAD HTML FROM FILE.WEB.FORMS, WEB.FORM.NAME ELSE HTML=''***USER.ID=G$USERID*W$TITLE='  Portal Dashboard'; CALL PORTAL.SHOW.LAST.UPDATED('ALL')**WRITE HTML ON FILE.WEB.FORMS, 'TEST.HTML'*** DYNAMIC VARIABLES*FOR I = 1 TO 32   INSERT.FIELD=DASH.REC<I>   IF INSERT.FIELD = '' THEN INSERT.FIELD=I   CONV=CONVS<I>   BEGIN CASE      CASE CONV = ''; NULL      CASE CONV = '$'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD2,$')      CASE CONV = '%'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD1'):'%'      CASE 1; INSERT.FIELD=OCONV(INSERT.FIELD,CONV)   END CASE   IF INSERT.FIELD = '' THEN INSERT.FIELD='&nbsp;'   CALL SWAP(HTML,'~':I:'~',INSERT.FIELD) NEXT I   *W$TEXT.DATA=HTMLWRITE HTML ON FILE.WEB.FORMS, 'LAST.':WEB.FORM.NAMERETURN**DISPLAY.ERROR:*W$TYPE='HTML'MAX.LINES=DCOUNT(ERROR.MSG,CHAR(254))IF MAX.LINES > 1 THEN   TEMP.ERROR.MSG=ERROR.MSG   ERROR.MSG=''   FOR ERROR.LINE = 1 TO MAX.LINES      THIS.MSG=TEMP.ERROR.MSG<ERROR.LINE>      IF ERROR.MSG <> '' THEN ERROR.MSG:='<br>'      ERROR.MSG:=THIS.MSG    NEXT ERROR.LINE ENDW$HTML.DATA='<h3>':ERROR.MSG:'</h3>'RETURN*INITIATE.CALC.PHANTOM:*BEGIN CASE   CASE PLATFORM = 'D3' OR PLATFORM = 'JB'      EXECUTE "Z REFRESH.DASHBOARD.MTD.STATS ":TYPE.CALC CAPTURING DUMMY   CASE 1      EXECUTE "PHANTOM REFRESH.DASHBOARD.MTD.STATS ":TYPE.CALC CAPTURING DUMMYEND CASERETURN0011A3SUB.RUNTIME.ERRORS0c2SUBROUTINE SUB.RUNTIME.ERRORS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Report Runtime Errors*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "MVDB Runtime Errors"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN ;* Dont process, just provide title, type & width*IF WIDGET.USER.DATA(2) # "" THEN  ACCTFILTER = WIDGET.USER.DATA(2)  W$TITLE = "Runtime Errors (User/Account filter = ":ACCTFILTER:")"END ELSE  IF G$SUBMITTED THEN    ACCTFILTER = "ALL"  END ELSE ;* It's empty, but only becuase nobody has specified a value    ACCTFILTER = OCONV('a','U50BB')  END  WIDGET.USER.DATA(2) = ACCTFILTERENDIF WIDGET.USER.DATA(3) # "" THEN  PROGFILTER = WIDGET.USER.DATA(3)END ELSE PROGFILTER = ""OPEN '','DM,RUNTIME-ERRORS,' TO F.RUNTIME.ERRORS ELSE STOP 201, 'RUNTIME-ERRORS'XLINE = 'SSELECT DM,RUNTIME-ERRORS, BY-DSND DATE BY-DSND TIME'IF ACCTFILTER # "ALL" THEN  XLINE := ' WITH USERPIB = "[':ACCTFILTER:']"'  WITH.USED = 1END ELSE WITH.USED = 0IF PROGFILTER # "ALL" AND PROGFILTER # "" THEN  IF WITH.USED THEN XLINE := ' AND'  XLINE := ' WITH PROGNAME = "':PROGFILTER:'"'ENDEXECUTE XLINE CAPTURING JUNKIF WIDGET.USER.DATA(1) = 'CLEAR' THEN  LOOP    READNEXT ID ELSE EXIT    DELETE F.RUNTIME.ERRORS, ID  REPEAT  WIDGET.USER.DATA(1) = ""ENDIF SYSTEM(11) THEN  IF SYSTEM(11) > 100 THEN MAX.DISPLAY = 100 ELSE MAX.DISPLAY = SYSTEM(11)  W$HTML.DATA = '<h3>1 - ':MAX.DISPLAY:' of ':SYSTEM(11):'</h3>'  W$HTML.DATA := '<table><tr>'  W$HTML.DATA := '<th>Date / Time</th><th>User</th><th>Error</th>'  W$HTML.DATA := '</tr>'END ELSE  W$HTML.DATA = '<h3>No Errors</h3>'ENDERR.CNT = 0LOOP  READNEXT ID ELSE EXIT  READ RECORD FROM F.RUNTIME.ERRORS, ID ELSE CONTINUE  DATA RECORD<2,1>  EXECUTE "PRINT-ERR DM,MESSAGES, ":RECORD<1>:" (S" CAPTURING ERR  *  CONVERT @AM TO " " IN ERR  ERR = OCONV(ERR,'MCP')  ERR = TRIM(ERR)  PROG = RECORD<4>  DESC = PROG:" ":ERR  USERPIB = RECORD<3>  STACK = ""  FOR N = DCOUNT(RECORD<5>,@VM) TO 1 STEP -1    STACK := RECORD<5,N>    IF STACK # "" AND N # 1 THEN STACK := ' --> '  NEXT N  IF RECORD<5> # '' THEN DESC := "Stack: ":STACK  MD = FIELD( RECORD<3>, ' ', 3 )  *  * Try and find the source code to include in the feed.  *  SREC = "" ; FNAME = ""  OPEN MD:",MD," TO F.MD THEN    FNAME = ""    READ CREC FROM F.MD, RECORD<4> THEN      IF CREC<1> = "VR" THEN ;* This is a catalog pointer, file name is in field 4        FNAME = FIELD(CREC<4>,' ',1)      END ELSE IF CREC<1> = "PQ" THEN        IF FIELD(CREC<2>, ' ', 1 ) = "HRUN" THEN          FNAME = FIELD( CREC<2>, ' ', 2 )        END      END    END    IF FNAME # "" THEN      OPEN MD:",":FNAME:"," TO SFILE THEN        READ SREC FROM SFILE, RECORD<4> ELSE SREC = ""      END    END  END  SOURCE.SNIP = ""  IF SREC # "" THEN    CALL SWAP(SREC,'&','&amp;')    CALL SWAP(SREC,'<','&lt;')    CALL SWAP(SREC,'>','&gt;')    LINENO = RECORD<2,1>    IF LINENO MATCHES "1N0N" THEN      START.LINE = LINENO - 3      IF START.LINE < 0 THEN START.LINE = 1    END ELSE LINENO = 1 ; START.LINE = 1    END.LINE = LINENO + 3    SOURCE.SNIP = \<code style="font-size:12px" >\    FOR LN = START.LINE TO END.LINE      LINE = LN "R#4":" ":SREC<LN>      SOURCE.SNIP := LINE:'<br />'    NEXT LN    SOURCE.SNIP := '</code>'    EDIT.LINK = '<a href="/dbc/MVDB.WEB.ED?ed_acct=':MD:'&ed_file=':FNAME:'&ed_item=':PROG:'" target="':MD:'_':FNAME:'_':PROG:'">Edit Source</a>'    SOURCE.SNIP := EDIT.LINK  END ELSE    SOURCE.SNIP = 'Unable to open source code for ':RECORD<4>:' in account ':MD  END  DATE = FIELD(ID,'*',1)  TIME = FIELD(ID,'*',2)  *  W$HTML.DATA<-1> = '<tr valign="top"><td>':OCONV(DATE,'D2/'):" ":OCONV(TIME,'MTS'):'</td>'  W$HTML.DATA<-1> = '<td>':USERPIB:'</td>'  W$HTML.DATA<-1> = '<td>':DESC:'</td>'  W$HTML.DATA<-1> = '</tr>'  W$HTML.DATA<-1> = '<tr valign="top"><td>&nbsp;</td><td colspan="2">':SOURCE.SNIP:'</td></tr>'  ERR.CNT += 1UNTIL ERR.CNT > 100 DO REPEATW$HTML.DATA<-1> = '</table>'*W$LINK.LABEL<1> = "Clear Errors"W$LINK.LOCATION<1> = '1'W$LINK.UD.POS<1> = 1W$LINK.UD.VAL<1> = 'CLEAR'*W$LINK.LABEL<2> = "Print"W$LINK.LOCATION<2> = "C"W$LINK.ICON<2> = "print.png"W$LINK.URL<2> = "javascript:printThis(this);"*W$INPUT.PROMPT<1> = "User/Acct Filter"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 2W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(2)*W$INPUT.PROMPT<2> = "Program Filter"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 3W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(3)*RETURN0006B0SUB.SYS.ERRS0c2SUBROUTINE SUB.SYS.ERRS** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Show system errors**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TABLE"W$TITLE = "Recent System Errors"W$WIDTH = 3*IF G$QUERYMODE = "1" THEN RETURN*OPEN '','SYSTEM-ERRORS' TO F.SYSTEM.ERRORS ELSE RETURN*XLINE = 'SSELECT SYSTEM-ERRORS BY-DSND DATE BY-DSND TIME'EXECUTE XLINE CAPTURING JUNK*W$TABLE.COL.LABELS = "Date":@VM:"Time":@VM:"Message":@VM:"Last TCL":@VM:"Pib / User":@VM:"Data"W$TABLE.COL.JUST = "right":@VM:"right"** User data 2 is the number of items to skip forward or backward. Calculate* the offset by adding this number to the current offset position in field 1.* Then clear out the skip fowrad/backward value.*WIDGET.USER.DATA(1) = WIDGET.USER.DATA(1) + WIDGET.USER.DATA(2)WIDGET.USER.DATA(2) = 0IF WIDGET.USER.DATA(1) < 0 THEN WIDGET.USER.DATA(1) = 0*IF WIDGET.USER.DATA(1) > 0 THEN  W$TITLE := " (":WIDGET.USER.DATA(1)+1:" - ":WIDGET.USER.DATA(1)+11:")"END*OFFSET = WIDGET.USER.DATA(1)FOR SKIPITEM = 1 TO OFFSET  READNEXT THROWAWAY ELSE EXITNEXT SKIPITEMFOR X = 1 TO 10  READNEXT ID ELSE EXIT  READ EREC FROM F.SYSTEM.ERRORS, ID THEN    W$TABLE.DATA<X,1> = OCONV( FIELD( ID,'*',1),'D2/')    W$TABLE.DATA<X,2> = OCONV( FIELD( ID,'*',2),'MTS')    W$TABLE.DATA<X,3> = EREC<4,1>    W$TABLE.DATA<X,4> = EREC<22,DCOUNT(EREC<22>,@VM)>    W$TABLE.DATA<X,5> = EREC<12,1>    W$TABLE.DATA<X,6> = EREC<5,1>  ENDNEXT X*W$LINK.LABEL<1,1> = "Prev 10"W$LINK.LABEL<1,2> = "Next 10"W$LINK.LOCATION<1,1> = "23"W$LINK.LOCATION<1,2> = "14"W$LINK.UD.POS<1,1> = 2W$LINK.UD.POS<1,2> = 2W$LINK.UD.VAL<1,1> = "-10"W$LINK.UD.VAL<1,2> = "10"*RETURN00022DUD.EXECUTE.STACKED.CMNDS0c2SUBROUTINE UD.EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,NUM.RETURNED,REPORT)*REPORT=''NUM.RETURNED=1LIST_VAR = 1IF STACKED.1 <> '' THEN   MDPERFORM STACKED.1 RTNLIST LIST_VAR RETURNING RETNO CAPTURING CAPT   IF INDEX(RETNO,'No data',1) OR INDEX(CAPT,'No data',1) THEN      NUM.RETURNED=0      RETURN    END   MDPERFORM STACKED.2 PASSLIST LIST_VAR CAPTURING REPORT END ELSE   MDPERFORM STACKED.2 CAPTURING REPORT ENDIF INDEX(REPORT,'No records',1) THEN   NUM.RETURNED=0 ENDCONVERT '$,' TO '' IN REPORTRETURNEND002557BUILD.SAMPLE.PORTAL.FILES0c2OPEN '','PORTAL.SALES' TO FI.SALES ELSE STOP 201,'PORTAL.SALES'OPEN '','PORTAL.AR' TO FI.AR ELSE STOP 201,'PORTAL.AR'OPEN '','PORTAL.AP' TO FI.AP ELSE STOP 201,'PORTAL.AP'READ SALES.1 FROM FI.SALES, 1 ELSE SALES.1=''READ AR.1 FROM FI.AR, 1 ELSE AR.1=''READ AP.1 FROM FI.AP, 1 ELSE AP.1=''IF SALES.1 <> '' AND AR.1 <> '' AND AP.1 <> '' THEN STOPOTODAY=OCONV(DATE(),'D4-')OYYYY=OTODAY[7,4]OMM=OTODAY[1,2]+0REPS=''REPS<-1>='GREG GRIFFIN'REPS<-1>='KELLEY JOHNSON'REPS<-1>='KEVIN PEPE'REPS<-1>='KIM GONZALEZ'REPS<-1>='MICHAEL HOUSE'REPS<-1>='MICHELLE BLACK'REPS<-1>='MITCH STREET'REPS<-1>='NATALIE MCFARLAND'REPS<-1>='PETE COX'REPS<-1>='PHIL CRAMER'REPS<-1>='ROBERT HUNT'REPS<-1>='STEVE SMITH'REPS<-1>='TAMMY HENDER'REPS<-1>='TIFFANEY MILLER'BRANCHES=''BRANCHES<-1>='CHICAGO'BRANCHES<-1>='DALLAS'BRANCHES<-1>='DENVER'BRANCHES<-1>='FLORIDA'BRANCHES<-1>='NEW YORK'BRANCHES<-1>='NORCAL'BRANCHES<-1>='SOCAL'BRANCHES<-1>='VEGAS'REGIONS=''REGIONS<-1>='CENTRAL'REGIONS<-1>='EAST'REGIONS<-1>='MOUNTAIN'REGIONS<-1>='WEST'EXECUTE "CLEAR-FILE DATA PORTAL.SALES" CAPTURING DUMMYJAN12016=ICONV('1-1-16','D')DATE.RANGE=DATE()-JAN12016FOR I = 1 TO 10000   SALES.REC=''   CLOSE.DATE=JAN12016 + RND(DATE.RANGE) + 1   SALES.REC<1>=CLOSE.DATE   RND.REP=RND(14)+1   IF RND.REP < 12 THEN      RND.PCT=((RND(10)+1)/10)      RND.REP=INT(RND.REP * RND.PCT + .5)      IF NOT(RND.REP) THEN RND.REP=1    END   REP=REPS<RND.REP>   SALES.REC<5>=REP   AMOUNT=RND(975000)+25000; * 250 TO 10000   SALES.REC<8>=AMOUNT   COST.PCT=RND(40) + 50; * 50 TO 90 PERCENT   COST.PCT=COST.PCT / 100   COST=INT(AMOUNT * COST.PCT + .5)   SALES.REC<9>=COST   RND.BRANCH=RND(8)+1   IF RND.BRANCH < 6 THEN      RND.PCT=((RND(10)+1)/10)      RND.BRANCH=INT(RND.BRANCH * RND.PCT + .5)      IF NOT(RND.BRANCH) THEN RND.BRANCH=1    END   BRANCH=BRANCHES<RND.BRANCH>   SALES.REC<13>=BRANCH   RND.REGION=RND(4)+1   IF RND.REGION < 4 THEN      RND.PCT=((RND(10)+1)/10)      RND.REGION=INT(RND.REGION * RND.PCT + .5)      IF NOT(RND.REGION) THEN RND.REGION=1    END   REGION=REGIONS<RND.REGION>   SALES.REC<14>=REGION   WRITE SALES.REC ON FI.SALES, I NEXT ICUSTS=''CUSTS<-1>="ABC Computers"CUSTS<-1>="ABC Electronics Corp"CUSTS<-1>="Ajax Computer Electronics"CUSTS<-1>="Alfreds Futterkiste"CUSTS<-1>="Ana Trujillo Emparedados y helados"CUSTS<-1>="Antonio Moreno Taqueria"CUSTS<-1>="Around the Horn"CUSTS<-1>="B'S Beverages"CUSTS<-1>="Bakers Goods"CUSTS<-1>="Berglunds snabbkop"CUSTS<-1>="Best Computer Company"CUSTS<-1>="Better Bytes"CUSTS<-1>="Better Computing"CUSTS<-1>="Better Connection"CUSTS<-1>="Bills Shoes & Gopeds"CUSTS<-1>="Bits and Bytes Inc"CUSTS<-1>="Blauer See Delikatessen"CUSTS<-1>="Blondel pere et fils"CUSTS<-1>="Bobs Used Cycles"CUSTS<-1>="Bon app"CUSTS<-1>="Bottom-Dollar Markets"CUSTS<-1>="Cactus Comidas para llevar"CUSTS<-1>="Centro comercial Moctezuma"CUSTS<-1>="Chop-suey Chinese"CUSTS<-1>="Classic Computers"CUSTS<-1>="Comp Data Inc."CUSTS<-1>="Comp Products"CUSTS<-1>="Computer Fancy"CUSTS<-1>="Computer Portables Inc."CUSTS<-1>="Computer Sitters"CUSTS<-1>="Computer Tech"CUSTS<-1>="Computer Tips"CUSTS<-1>="Computer Town"CUSTS<-1>="Computer Trainers"CUSTS<-1>="Computer Warehouse"CUSTS<-1>="Computers Etc."CUSTS<-1>="Computers Galore"CUSTS<-1>="Computers Inc.Systems"CUSTS<-1>="Computers N More"CUSTS<-1>="Computers R Us"CUSTS<-1>="Consolidated Holdings"CUSTS<-1>="Cyber Products"CUSTS<-1>="Data Bits"CUSTS<-1>="Data Comp"CUSTS<-1>="Data Net"CUSTS<-1>="Die Wandernde Kuh"CUSTS<-1>="Disk Products"CUSTS<-1>="Disks N More"CUSTS<-1>="Drachenblut Delikatessen"CUSTS<-1>="Du monde entier"CUSTS<-1>="Eastern Connection"CUSTS<-1>="Electronic Company"CUSTS<-1>="Ernst Handel"CUSTS<-1>="Familia Arquibaldo"CUSTS<-1>="FISSA Fabrica Inter. Salchichas S.A."CUSTS<-1>="Folies gourmandes"CUSTS<-1>="For Computers Inc."CUSTS<-1>="France restauration"CUSTS<-1>="Franchi S.p.A."CUSTS<-1>="Frankenversand"CUSTS<-1>="Furia Bacalhau e Frutos do Mar"CUSTS<-1>="Future Computers"CUSTS<-1>="Future In Computing"CUSTS<-1>="Galeria del gastronomo"CUSTS<-1>="Godos Cocina Tipica"CUSTS<-1>="Gourmet Lanchonetes"CUSTS<-1>="Great Lakes Food Market"CUSTS<-1>="GROSELLA-Restaurante"CUSTS<-1>="Hanari Carnes"CUSTS<-1>="HILARION-Abastos"CUSTS<-1>="Hungry Coyote Import Store"CUSTS<-1>="HUNGRY HOWIES PIZZA"CUSTS<-1>="Hungry Owl All-Night Grocers"CUSTS<-1>="Intercom Products"CUSTS<-1>="Island Trading"CUSTS<-1>="Joe'S Computers"CUSTS<-1>="Koniglich Essen"CUSTS<-1>="La corne d'abondance"CUSTS<-1>="Lazy K Kountry Store"CUSTS<-1>="Lehmanns Marktstand"CUSTS<-1>="Let'S Stop N Shop"CUSTS<-1>="LILA-Supermercado"CUSTS<-1>="LINO-Delicateses"CUSTS<-1>="Logical Computers"CUSTS<-1>="Lonesome Pine Restaurant"CUSTS<-1>="Longo Toyota"CUSTS<-1>="Magazzini Alimentari Riuniti"CUSTS<-1>="Memory Capturers"CUSTS<-1>="Memory Plus Inc."CUSTS<-1>="Modem Products"CUSTS<-1>="Morgenstern Gesundkost"CUSTS<-1>="Net Connect"CUSTS<-1>="North/South"CUSTS<-1>="Number One in Computing"CUSTS<-1>="Oceano Atlantico Ltda."CUSTS<-1>="Old World Delicatessen"CUSTS<-1>="Ones & Zeros Inc."CUSTS<-1>="Ottilies Kaseladen"CUSTS<-1>="Paris specialites"CUSTS<-1>="Pericles Comidas clasicas"CUSTS<-1>="Piccolo und mehr"CUSTS<-1>="Printer Products"CUSTS<-1>="Que Delicia"CUSTS<-1>="Queen Cozinha"CUSTS<-1>="QUICK-Stop"CUSTS<-1>="Rancho grande"CUSTS<-1>="Rattlesnake Canyon Grocery"CUSTS<-1>="Real Computers"CUSTS<-1>="Reggiani Caseifici"CUSTS<-1>="Ricardo Adocicados"CUSTS<-1>="Richter Supermarkt"CUSTS<-1>="Sante Gourmet"CUSTS<-1>="Save-a-lot Markets"CUSTS<-1>="Secure Computers"CUSTS<-1>="Seven Seas Imports"CUSTS<-1>="Software Inc"CUSTS<-1>="Specialites du monde"CUSTS<-1>="Split Rail Beer & Ale"CUSTS<-1>="Supremes delices"CUSTS<-1>="The Big Cheese"CUSTS<-1>="The Cracker Box"CUSTS<-1>="The Only Computers"CUSTS<-1>="Tortuga Restaurante"CUSTS<-1>="Tradicao Hipermercados"CUSTS<-1>="Trail'S Head Gourmet Provisioners"CUSTS<-1>="TRG"CUSTS<-1>="USA Computers"CUSTS<-1>="Victuailles en stock"CUSTS<-1>="Vins et alcools Chevalier"CUSTS<-1>="Wartian Herkku"CUSTS<-1>="Wellington Importadora"CUSTS<-1>="White Clover Markets"CUSTS<-1>="White House"CUSTS<-1>="Wilman Kala"CUSTS<-1>="Wolski  Zajazd"EXECUTE "CLEAR-FILE DATA PORTAL.AR" CAPTURING DUMMYFOR I = 1 TO 5000   AR.REC=""   CUST=CUSTS<RND(135)+1>   AR.REC<1>=CUST   PCT=RND(100)+1   IF PCT > 4 THEN      * PAID      QTR=RND(18)+1; * BASED ON DATE BEFORE 7-1-20      BEGIN CASE         CASE OYYYY > 2020; QTR+=2         CASE OMM >= 10; QTR+=2         CASE OMM >= 7;  QTR+=1      END CASE      BEGIN CASE         CASE QTR <= 4;   * 2016            BREAKS=71:@AM:87:@AM:93            BOY=ICONV("01-01-16","D")            QTR.IN.YEAR=QTR         CASE QTR <= 8;   * 2017            BREAKS=73:@AM:89:@AM:94            BOY=ICONV("01-01-17","D")            QTR.IN.YEAR=QTR-4         CASE QTR <= 12;   * 2018            BREAKS=77:@AM:89:@AM:94            BOY=ICONV("01-01-18","D")            QTR.IN.YEAR=QTR-8         CASE QTR <= 16;   * 2019            BREAKS=77:@AM:90:@AM:94            BOY=ICONV("01-01-19","D")            QTR.IN.YEAR=QTR-12         CASE 1;          * 2020            BREAKS=71:@AM:87:@AM:93            BOY=ICONV("01-01-20","D")            QTR.IN.YEAR=QTR-16      END CASE      BOQ=BOY + (QTR.IN.YEAR-1)*90      DATE.PAID=BOQ + RND(90) + 1      DAYS.IN.PERIOD=RND(30)+1      PCT=RND(100)      LOCATE PCT IN BREAKS BY "AR" SETTING CATEGORY ELSE NULL      MOS.BEFORE=CATEGORY-1      DUE.DATE=DATE.PAID - (MOS.BEFORE*30) - DAYS.IN.PERIOD      AR.REC<20>=DUE.DATE      AR.REC<8>=DATE.PAID      AR.REC<50>=0; * BALANCE      AMOUNT=RND(975000)+25000; * 250 TO 10000      AR.REC<6>=AMOUNT      WRITE AR.REC ON FI.AR, I    END ELSE      BREAKS=60:@AM:81:@AM:91:@AM:96      PCT=RND(100)+1      LOCATE PCT IN BREAKS BY "AR" SETTING CATEGORY ELSE NULL      DAY.IN.MONTH=RND(30)      BEGIN CASE         CASE CATEGORY = 1            * NOT YET DUE            DUE.DATE=DATE()+DAY.IN.MONTH         CASE CATEGORY = 2            * 1-30            DUE.DATE=DATE()-DAY.IN.MONTH         CASE CATEGORY = 3            * 31-60            DUE.DATE=DATE() - (30 + DAY.IN.MONTH)         CASE CATEGORY = 4            * 60-90            DUE.DATE=DATE() - (60 + DAY.IN.MONTH)         CASE 1            * 90+            DUE.DATE=DATE() - (90 + RND(120))      END CASE      AR.REC<20>=DUE.DATE      AR.REC<8>=''; * DATE PAID      AMOUNT=RND(975000)+25000; * 250 TO 10000      AR.REC<6>=AMOUNT      AR.REC<50>=AMOUNT; * BALANCE      WRITE AR.REC ON FI.AR, I    END NEXT IEXECUTE "CLEAR-FILE DATA PORTAL.AP" CAPTURING DUMMYFOR I = 1 TO 100   AP.REC=""   BREAKS=56:@AM:90:@AM:95:@AM:97   PCT=RND(100)+1   LOCATE PCT IN BREAKS BY "AR" SETTING CATEGORY ELSE NULL   DAY.IN.MONTH=RND(30)   BEGIN CASE      CASE CATEGORY = 1         * NOT YET DUE         DUE.DATE=DATE()+DAY.IN.MONTH      CASE CATEGORY = 2         * 1-30         DUE.DATE=DATE()-DAY.IN.MONTH      CASE CATEGORY = 3         * 31-60         DUE.DATE=DATE() - (30 + DAY.IN.MONTH)      CASE CATEGORY = 4         * 60-90         DUE.DATE=DATE() - (60 + DAY.IN.MONTH)      CASE 1         * 90+         DUE.DATE=DATE() - (90 + DAY.IN.MONTH)   END CASE   AP.REC<20>=DUE.DATE   AP.REC<8>=''; * DATE PAID   AMOUNT=RND(975000)+25000; * 250 TO 10000   AP.REC<6>=AMOUNT   AP.REC<50>=AMOUNT; * BALANCE   WRITE AP.REC ON FI.AP, I NEXT I000715SUB.DEMO.MAP.CANADA0c2SUBROUTINE SUB.DEMO.MAP.CANADA** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: US Map demonstration* 6-1-15 ZUMASYS CONVERT MAP.DATA ID DELIMETER FROM * TO #** Modified by Peter Schellenbach of Zumasys 06-08-15:*  Changed test of ENUM after EXECUTE to test SYSTEM(11) instead.**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Canadian Provinces by Alphabet"W$TYPE = "MAP:Canada"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'*W$CHART.OPTIONS<-1> = 'animation="0"'W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'W$CHART.OPTIONS<-1> = 'legendShadow="1"'W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'**6-1-15*EXECUTE \SSELECT MVDB.MAP.DATA = "CANADA*]" BY A1\ RETURNING ENUM CAPTURING ETXTEXECUTE \SSELECT MVDB.MAP.DATA = "CANADA#]" BY A1\ RETURNING ENUM CAPTURING ETXT; *6-1-15*PJS 06-08-15*IF ENUM[1,3]="404" THENIF SYSTEM(11) THEN ; *PJS 06-08-15* LOOP   READNEXT ID ELSE ID="\\EOF" UNTIL ID="\\EOF" DO   READ I FROM F.MVDB.MAP.DATA,ID THEN*6-1-15*     W$MAP.IDS<1,-1> = FIELD(ID,'*',2)     W$MAP.IDS<1,-1> = FIELD(ID,'#',2); *6-1-15*     W$MAP.VALUES<1,-1> = (SEQ(I<1>[1,1]) - (SEQ('A')-1))     W$MAP.VALUE.TOOLTEXT<1,-1> := I<2>:' (':I<1>:')'   END REPEATEND*W$MAP.RANGE.NAME<1,1> = "Early in Alphabet"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "10"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Middle of Alphabet"W$MAP.RANGE.LOW<1,2> = "10"W$MAP.RANGE.HIGH<1,2> = "18"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Late in Alphabet"W$MAP.RANGE.LOW<1,3> = "18"W$MAP.RANGE.HIGH<1,3> = "27"W$MAP.RANGE.COLOR<1,3> = "RED"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN00029ESUB.DEMO.DNUT0c2SUBROUTINE SUB.DEMO.DNUT** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Doughnut Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Defects by Reason"W$TYPE = "FCDOUGHNUT2D"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*CATEG = ""CATEG<1> = 20CATEG<2> = 30CATEG<3> = 20CATEG<4> = 9*CATEG.NAMES = ''CATEG.NAMES<1> = "Choices"CATEG.NAMES<2> = "Material"CATEG.NAMES<3> = "Errors"CATEG.NAMES<4> = "Shipping"*FOR N = 1 TO DCOUNT(CATEG.NAMES,@AM)  W$PIE.LABELS<1,N> = CATEG.NAMES<N>  W$PIE.VALUES<1,N> = CATEG<N>NEXT NW$PIE.CAPTION = "Defects"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN00250AREFRESH.DASHBOARD.CLOSING.STATS0c2HAVE.AR=1OPEN '','AR' TO FI.AR ELSE HAVE.AR=0IF HAVE.AR THEN   AR.CNTR=0   LOOP      AR.CNTR+=1      READ BULK.AR FROM FI.AR, 'AR.':AR.CNTR ELSE BULK.AR=''      MAX.ROWS=DCOUNT(BULK.AR,CHAR(254))   UNTIL NOT(MAX.ROWS) DOCRT 'AR.':AR.CNTR      DELETE FI.AR, 'AR.':AR.CNTR      AR.REC=''      AR.ID=''      REC.ROW=0      BULK.AR=OCONV(BULK.AR,'MCU')      FOR ROW.NO = 1 TO MAX.ROWS         ROW=BULK.AR<ROW.NO>         IF ROW[1,2] = '%%' THEN            IF AR.REC <> '' THEN               WRITE AR.REC ON FI.AR, AR.ID             END            AR.REC=''            AR.ID=FIELD(ROW,'%',3)            REC.ROW=0          END ELSE            REC.ROW+=1            AR.REC<REC.ROW>=ROW          END       NEXT ROW.NO      IF AR.REC <> '' THEN         WRITE AR.REC ON FI.AR, AR.ID       END   REPEAT ENDHAVE.AP=1OPEN '','AP' TO FI.AP ELSE HAVE.AP=0IF HAVE.AP THEN   AP.CNTR=0   LOOP      AP.CNTR+=1      READ BULK.AP FROM FI.AP, 'AP.':AP.CNTR ELSE BULK.AP=''      MAX.ROWS=DCOUNT(BULK.AP,CHAR(254))   UNTIL NOT(MAX.ROWS) DOCRT 'AP.':AP.CNTR      DELETE FI.AP, 'AP.':AP.CNTR      AP.REC=''      AP.ID=''      REC.ROW=0      BULK.AP=OCONV(BULK.AP,'MCU')      FOR ROW.NO = 1 TO MAX.ROWS         ROW=BULK.AP<ROW.NO>         IF ROW[1,2] = '%%' THEN            IF AP.REC <> '' THEN               WRITE AP.REC ON FI.AP, AP.ID             END            AP.REC=''            AP.ID=FIELD(ROW,'%',3)            REC.ROW=0          END ELSE            REC.ROW+=1            AP.REC<REC.ROW>=ROW          END       NEXT ROW.NO      IF AP.REC <> '' THEN         WRITE AP.REC ON FI.AP, AP.ID       END   REPEAT ENDHAVE.SALES=1OPEN '','SALES' TO FI.SALES ELSE HAVE.SALES=0IF HAVE.SALES THEN   SALES.CNTR=0   LOOP      SALES.CNTR+=1      READ BULK.SALES FROM FI.SALES, 'SALES.':SALES.CNTR ELSE BULK.SALES=''      MAX.ROWS=DCOUNT(BULK.SALES,CHAR(254))   UNTIL NOT(MAX.ROWS) DO      DELETE FI.SALES, 'SALES.':SALES.CNTR      SALES.REC=''      SALES.ID=''      REC.ROW=0      BULK.SALES=OCONV(BULK.SALES,'MCU')      FOR ROW.NO = 1 TO MAX.ROWS         ROW=BULK.SALES<ROW.NO>         IF ROW[1,2] = '%%' THEN            IF SALES.REC <> '' THEN               WRITE SALES.REC ON FI.SALES, SALES.ID             END            SALES.REC=''            SALES.ID=FIELD(ROW,'%',3)            REC.ROW=0          END ELSE            REC.ROW+=1            SALES.REC<REC.ROW>=ROW          END       NEXT ROW.NO      IF SALES.REC <> '' THEN         WRITE SALES.REC ON FI.SALES, SALES.ID       END   REPEAT ENDEXECUTE "TERM 132" CAPTURING DUMMYOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE NULLERRORS=''OPEN '','DASHBOARD.CLOSING.STATS' TO FI.CLOSING.STATS ELSE ERRORS<-1>='UNABLE TO OPEN DASHBOARD.CLOSING.STATS'HAVE.DICT.STATS=1OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO FI.DICT.CLOSING.STATS ELSE HAVE.DICT.STATS=0; ERRORS<-1>='UNABLE TO OPEN DICT DASHBOARD.CLOSING.STATS'OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE NULLIF ERRORS <> '' THEN   WRITE ERRORS ON FI.MVDB.CONTROL, 'CLOSING.STATS.ERRORS'   IF HAVE.DICT.STATS THEN      WRITE 'CLOSING.STATS.ERRORS' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'    END   STOP ENDREAD PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE PLATFORM='D3'BEGIN CASE   CASE PLATFORM = 'UD'      EXECUTE.STACKED.CMNDS='UD.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'UV'      EXECUTE.STACKED.CMNDS='UV.EXECUTE.STACKED.CMNDS'   CASE PLATFORM = 'QM'      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'   CASE 1      * D3 AND JBASE ARE THE SAME      EXECUTE.STACKED.CMNDS='EXECUTE.STACKED.CMNDS'END CASE*DIM SETUP.PARAMS(30)MATREAD SETUP.PARAMS FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE   MAT SETUP.PARAMS='' ENDEQUATE ACCOUNT TO SETUP.PARAMS(1)EQUATE REPORT.FILE TO SETUP.PARAMS(2)EQUATE SALE.DATE.DICT TO SETUP.PARAMS(3)EQUATE SALE.MONTH.DICT TO SETUP.PARAMS(4)EQUATE SALE.YEAR.DICT TO SETUP.PARAMS(5)EQUATE SALE.AMOUNT.DICT TO SETUP.PARAMS(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO SETUP.PARAMS(7)EQUATE SALESMAN.DICT TO SETUP.PARAMS(8)EQUATE BRANCH.DICT TO SETUP.PARAMS(9)EQUATE REGION.DICT TO SETUP.PARAMS(10)EQUATE SALE.DATE.AMC TO SETUP.PARAMS(11)EQUATE SALE.AMOUNT.AMC TO SETUP.PARAMS(12)EQUATE SALE.AMOUNT.CONV TO SETUP.PARAMS(13)EQUATE SALE.AMOUNT.COOR TO SETUP.PARAMS(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO SETUP.PARAMS(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO SETUP.PARAMS(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO SETUP.PARAMS(17)EQUATE SALESMAN.AMC TO SETUP.PARAMS(18)EQUATE SALESMAN.TFILE TO SETUP.PARAMS(19)EQUATE BRANCH.AMC TO SETUP.PARAMS(20)EQUATE BRANCH.TFILE TO SETUP.PARAMS(21)EQUATE REGION.AMC TO SETUP.PARAMS(22)EQUATE REGION.TFILE TO SETUP.PARAMS(23)***FILE.PATH=ACCOUNT:',':REPORT.FILE:','FILE.PATH='DASHBOARD.SALES.FILE'*WRITE 'UPDATING' ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'ODATE=OCONV(DATE(),'D4-')YYYY=ODATE[7,4]FIRST.YYYY=YYYY-4CMND='SELECT DASHBOARD.CLOSING.STATS WITH YYYY GE "':FIRST.YYYY:'"'EXECUTE CMND CAPTURING DUMMYSYSTEM.11=0LOOP   READNEXT DCS.ID ELSE DCS.ID='DONE'UNTIL DCS.ID = 'DONE' DO   SYSTEM.11=1   DELETE FI.CLOSING.STATS, DCS.IDREPEATIF SYSTEM.11 THEN   IF PLATFORM = 'D3' THEN      READV INDEX.DEFS FROM FI.DICT.CLOSING.STATS, 'DASHBOARD.CLOSING.STATS', 8 ELSE INDEX.DEFS=''      IF NOT(INDEX(INDEX.DEFS,'(G*1)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G*1)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G2*1)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G2*1)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G*2)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G*2)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G1*2)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G1*2)" CAPTURING DUMMY       END      IF NOT(INDEX(INDEX.DEFS,'(G1*1)',1)) THEN         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G1*1)" CAPTURING DUMMY         EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G3*1)" CAPTURING DUMMY         EXECUTE 'CREATE-INDEX DASHBOARD.CLOSING.STATS A0(G3*1):"*":0(G1*1)' CAPTURING DUMMY       END    END ELSE      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS SALESMAN" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS BRANCH" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS SALESMAN*YYYYMM" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS YYYYMM*BRANCH" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS YYYYMM" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS REGION" CAPTURING DUMMY      EXECUTE "CREATE-INDEX DASHBOARD.CLOSING.STATS REGION*YYYYMM" CAPTURING DUMMY    END END*FOR YEAR = FIRST.YYYY TO YYYY    WRITE 'UPDATING ':YEAR ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'   *  ** DO FOR EACH YEAR SEPARATELY TO LIMIT SIZE OF LIST RETURNING   *   STACKED.1='SELECT ':FILE.PATH:' WITH ':SALE.YEAR.DICT:' = "':YEAR:'"'**WRITE DUMMY ON FI.DICT.CLOSING.STATS, '*124.SELECT'   STACKED.2='SORT ':FILE.PATH:' WITH ':SALESMAN.DICT:' # "" BY ':SALE.MONTH.DICT:' BY ':SALESMAN.DICT:' ID-SUPP ':SALE.MONTH.DICT:' PIPE ':SALESMAN.DICT:' PIPE ':SALE.AMOUNT.DICT:' PIPE ':COST.OF.SALE.AMOUNT.DICT   STACKED.2:=' PIPE ':BRANCH.DICT:' PIPE ':REGION.DICT   STACKED.2:=' HDR-SUPP COL-HDR-SUPP NOPAGE'   CALL @EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,SYSTEM.11,REPORT)   IF SYSTEM.11 THEN      MAX.ROWS=DCOUNT(REPORT,CHAR(254))      STATS.IDS=''      STATS.AMTS=''      STATS.COS.AMTS=''      STATS.IDS.CNTR=0      FOR ROW.NO = 1 TO MAX.ROWS         ROW=REPORT<ROW.NO>         IF INDEX(ROW,'|',1) THEN            MONTH=TRIM(FIELD(ROW,'|',1))+0            IF MONTH < 10 THEN               YYYYMM=YEAR:'0':MONTH             END ELSE YYYYMM=YEAR:MONTH            REP=TRIM(FIELD(ROW,'|',2))            AMOUNT=TRIM(FIELD(ROW,'|',3))            CONVERT '$,' TO '' IN AMOUNT            AMOUNT=ICONV(AMOUNT,'MD2')            IF NOT(NUM(AMOUNT)) THEN AMOUNT=0            COST.OF.SALE.AMOUNT=TRIM(FIELD(ROW,'|',4))            CONVERT '$,' TO '' IN COST.OF.SALE.AMOUNT            COST.OF.SALE.AMOUNT=ICONV(COST.OF.SALE.AMOUNT,'MD2')            IF NOT(NUM(COST.OF.SALE.AMOUNT)) THEN COST.OF.SALE.AMOUNT=0            IF AMOUNT OR COST.OF.SALE.AMOUNT THEN               BRANCH=TRIM(FIELD(ROW,'|',5))               REGION=TRIM(FIELD(ROW,'|',6))               STATS.ID=REP:'*':YYYYMM:'*':BRANCH:'*':REGION               LOCATE STATS.ID IN STATS.IDS SETTING STATS.PNTR ELSE                  STATS.IDS.CNTR+=1                  STATS.PNTR=STATS.IDS.CNTR                  STATS.IDS<STATS.PNTR>=STATS.ID                END               STATS.AMTS<STATS.PNTR>+=AMOUNT               STATS.COS.AMTS<STATS.PNTR>+=COST.OF.SALE.AMOUNT             END          END       NEXT ROW.NO      MAX.STATS.IDS=DCOUNT(STATS.IDS,CHAR(254))      FOR ID.CNTR = 1 TO MAX.STATS.IDS         AMOUNT=STATS.AMTS<ID.CNTR>         COST.OF.SALE.AMOUNT=STATS.COS.AMTS<ID.CNTR>         IF AMOUNT > 0 OR COST.OF.SALE.AMOUNT THEN            WRITE AMOUNT:CHAR(254):COST.OF.SALE.AMOUNT ON FI.CLOSING.STATS, STATS.IDS<ID.CNTR>          END       NEXT ID.CNTR    END NEXT YEARTIME.STAMP=TIME()TIME.STAMP=FIELD(TIME.STAMP,'.',1)TIME.STAMP=STR('0',5-LEN(TIME.STAMP)):TIME.STAMPWRITE DATE():TIME.STAMP ON FI.DICT.CLOSING.STATS, '*LAST.UPDATE'WRITE DATE():TIME.STAMP ON FI.DICT.CLOSING.STATS, '*LAST.UPDATED'END0002FASUB.PORTAL.REPORTS.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.REPORTS.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Portal Reports Documentation"W$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here*OPEN '','WEB.FORMS' TO FI.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FI.WEB.FORMS, 'PORTAL.REPORT.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000667SUB.FREE0c2SUBROUTINE SUB.FREE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Display disk usage*INCLUDE WBPD MVDB.INCLUDE*IF WIDGET.USER.DATA(1) = "TEXT" THEN  W$TYPE = "TEXT"  W$PRINTABLE = 1END ELSE  W$TYPE = "FC3DPIE"ENDW$TITLE = "D3 Free Space"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "TEXT" THEN  W$TITLE := ' (Text Display)'  EXECUTE "FREE" CAPTURING OUTPUT  W$TEXT.DATA = OUTPUTEND ELSE  W$TITLE := ' (Chart Display)'  EXECUTE "WHAT (LSW" CAPTURING WHAT  ATTR = DCOUNT(WHAT,@AM)  LOOP WHILE WHAT<ATTR> = "" DO ATTR -= 1 REPEAT  *  WHAT = TRIM(WHAT<ATTR>)  FRAMESIZE = FIELD(WHAT, ' ', 8)  MAXFID = FIELD( WHAT, ' ', 6 )  SYSBASE = FIELD( WHAT, ' ', 4 )  SYS.BYTE = SYSBASE * FRAMESIZE  SYS.FRAME = SYS.BYTE/FRAMESIZE  AVAIL.FRAME = FIELD( WHAT, ' ', 7 )  USED.FRAME = (MAXFID-SYSBASE)-AVAIL.FRAME  *  MAXBYTE = MAXFID * FRAMESIZE  MAXMB = ICONV(MAXBYTE/1000000,"MD0")  SYS.MB = SYS.BYTE/1000000  USED.BYTE = USED.FRAME * FRAMESIZE  USED.MB = USED.BYTE/1000000  AVAIL.BYTE = AVAIL.FRAME * FRAMESIZE  AVAIL.MB = AVAIL.BYTE/1000000  *  W$PIE.LABELS<1,1> = "Used (":OCONV(SYS.MB+USED.MB,'MD0,'):")"  W$PIE.LABELS<1,2> = "Available (":OCONV(AVAIL.MB,'MD0,'):")"  *  W$PIE.VALUES<1,1> = SYS.MB+USED.MB  W$PIE.VALUES<1,2> = AVAIL.MB  *  W$PIE.CAPTION = "D3 Free Space"END** Set up links*W$LINK.LABEL<1,1> = "Pie"W$LINK.LABEL<1,2> = "Text"W$LINK.LOCATION<1,1> = "2"W$LINK.LOCATION<1,2> = "2"W$LINK.UD.POS<1,1> = 1W$LINK.UD.POS<1,2> = 1W$LINK.UD.VAL<1,1> = "FC3DPIE"W$LINK.UD.VAL<1,2> = "TEXT"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN	0002FESUB.PORTAL.RUN.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.RUN.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Running the Portal Dashboard Reports"W$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here*OPEN '','WEB.FORMS' TO FI.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FI.WEB.FORMS, 'PORTAL.REPORT.RUN.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000925SUB.DEMO.BULLETXX0c2    SUBROUTINE SUB.DEMO.BULLETXX* Changed by PORTBAS -> SUBROUTINE SUB.DEMO.BULLET* @(#) SUB.DEMO.BULLETXX Ported to jBASE 17:55:31  08 JUL 2015** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Bullet widget demo**#MAKE# RL $OPTIONS D3    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Bullet Chart Demo - Sales Volume"    W$TYPE = "VBULLET"    W$WIDTH = 2*    IF G$QUERYMODE THEN RETURN*    IF WIDGET.USER.DATA(1) # "" THEN        W$TYPE = WIDGET.USER.DATA(1)    END ELSE WIDGET.USER.DATA(1) = "VBULLET"    IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = 1    PALETTE = WIDGET.USER.DATA(2)*    W$FW.LOWER.LIMIT = 0    W$FW.UPPER.LIMIT = 800000*    W$FW.COLOR.RANGE<1,1> = 0    W$FW.COLOR.RANGE<2,1> = 400000    W$FW.COLOR.RANGE<3,1> = "RED"*    W$FW.COLOR.RANGE<1,2> = 400000    W$FW.COLOR.RANGE<2,2> = 650000    W$FW.COLOR.RANGE<3,2> = "YELLOW"*    W$FW.COLOR.RANGE<1,3> = 650000    W$FW.COLOR.RANGE<2,3> = 800000    W$FW.COLOR.RANGE<3,3> = "GREEN"*    W$FW.METER.VALUE = 725000    W$FW.METER.TARGET = 775000*    W$FW.CAPTION = "July Sales"    W$FW.SUBCAPTION = "Billings"    W$FW.CHART.PALETTE = PALETTE*    W$FW.NUMBER.PREFIX = "$"    W$FW.NUMBER.SUFFIX = ""*    W$FW.TICKMARKS<1> = 1     ;* Display tickmarks    W$FW.TICKMARKS<2> = 1     ;* Display values by tickmarks    W$FW.TICKMARKS<3> = "B"   ;* Show tickmarks below the graph    W$FW.TICKMARKS<4> = ""    ;* Let it calculate this    W$FW.TICKMARKS<5> = 4     ;* 4 minor tickmarks between the major ones**W$CHART.OPTIONS = "paletteThemeColor='#a2287a'"*    W$FW.DD.WIDGET<1,1> = "Drilldown Demo"    W$FW.DD.UD.POS<1,1,1> = 1    W$FW.DD.UD.VAL<1,1,1> = W$FW.METER.VALUE    W$FW.DD.UD.POS<1,1,2> = 2    W$FW.DD.UD.VAL<1,1,2> = WIDGET.USER.DATA(1)*    W$INPUT.PROMPT = "Bullet Chart Style"    W$INPUT.TYPE = "SELECT"    W$INPUT.SELOPTS = "Horizontal":@VM:"Vertical"    W$INPUT.SELVALS = "HBULLET":@VM:"VBULLET"    W$INPUT.UDPOS = 1    W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*    W$INPUT.PROMPT<2> = "Palette"    W$INPUT.TYPE<2> = "SELECT"    W$INPUT.SELOPTS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"    W$INPUT.SELVALS<2> = "1":@VM:"2":@VM:"3":@VM:"4":@VM:"5"    W$INPUT.UDPOS<2> = 2    W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)*    INCLUDE WBPD SOURCE.VIEW.ICON*    RETURN000478SUB.DEMO.SS.LINE0c2SUBROUTINE SUB.DEMO.SS.LINE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Single Series Line Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Monthly Sales Summary"W$TYPE = "FCLINE"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*W$BAR.LABELS = "Sales (USD)"W$BAR.CAPTION = "Monthly Sales (USD)"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Sales (USD)"*SALES = ""SALES<1> = "28452536"SALES<2> = "31208425"SALES<3> = "30245519"SALES<4> = "40425111"SALES<5> = "36515188"SALES<6> = "39144100"SALES<7> = "41655215"SALES<8> = "36615152"SALES<9> = "43944161"SALES<10> = "42251594"SALES<11> = "48833151"SALES<12> = "50122415"*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = OCONV(SALES<N>,'MD02')*  W$BAR.XLABELS<1,N> = OCONV(ICONV(N:"/1",'D'),'DMA')[1,1]  W$BAR.XLABELS<1,N> = OCONV(N*30-15,'DMA')[1,3]NEXT N*W$BAR.TREND.BEG = OCONV(SALES<1>,'MD02')W$BAR.TREND.END = OCONV(SALES<12>,'MD02')W$BAR.TREND.OPTS = "thickness='2' displayValue='Trend'"W$CHART.OPTIONS<-1> = "showValues='0'"W$CHART.OPTIONS<-1> = "animation='1'"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0020BFBUILD.DEMO.FINANCIAL.PICTURE0c2SUBROUTINE BUILD.DEMO.FINANCIAL.PICTURE(YYYY,TODAY,LAST.EOM)OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''REC<1>=YYYYREC<2>=YYYY-1REC<3>=YYYY-1LAST.THREE=YYYY-2:CHAR(253):YYYY-1:CHAR(253):YYYY*OPEN '','MVDB.CONTROL' TO FILE.SALES ELSE STOP 201,'SALES'READ THIS.YEAR.SALES FROM FILE.SALES, 'MONTHLY.':YYYY ELSE THIS.YEAR.SALES=''READ LAST.YEAR.SALES FROM FILE.SALES, 'MONTHLY.':(YYYY-1) ELSE LAST.YEAR.SALES=''READ PREV.YEAR.SALES FROM FILE.SALES, 'MONTHLY.':(YYYY-2) ELSE PREV.YEAR.SALES=''READ PREV.YEAR.GPS FROM FILE.SALES, 'MONTHLY.GPS.':(YYYY-2) ELSE SALES.2.YEARS.AGO=''READ THIS.YEAR.GPS FROM FILE.SALES, 'MONTHLY.GPS.':YYYY ELSE THIS.YEAR.GPS=''READ LAST.YEAR.GPS FROM FILE.SALES, 'MONTHLY.GPS.':(YYYY-1) ELSE LAST.YEAR.GPS=''READ THIS.YEAR.PARTS FROM FILE.SALES, 'MONTHLY.PARTS.':YYYY ELSE THIS.YEAR.PARTS=''READ LAST.YEAR.PARTS FROM FILE.SALES, 'MONTHLY.PARTS.':(YYYY-1) ELSE LAST.YEAR.PARTS=''READ THIS.YEAR.SERVICES FROM FILE.SALES, 'MONTHLY.SERVICES.':YYYY ELSE THIS.YEAR.SERVICES=''READ LAST.YEAR.SERVICES FROM FILE.SALES, 'MONTHLY.SERVICES.':(YYYY-1) ELSE LAST.YEAR.SERVICES=''FY.LAST=SUM(LAST.YEAR.SALES)REC<7>=FY.LASTFY.PARTS=SUM(LAST.YEAR.PARTS)REC<18>=FY.PARTSFY.SERVICES=SUM(LAST.YEAR.SERVICES)REC<25>=FY.SERVICESLAST.MONTH.NO=OCONV(LAST.EOM,'D2-')[1,2]+0YTD.THIS=0YTD.LAST=0YTD.PREV=0GPS.THIS=0GPS.LAST=0GPS.PREV=0PARTS.THIS=0PARTS.LAST=0SERVICES.THIS=0SERVICES.LAST=0THIS.YEAR.MONTHLY.SALES=''THIS.YEAR.MONTHLY.GPS=''FOR MO.NO = 1 TO LAST.MONTH.NO   YTD.THIS+=THIS.YEAR.SALES<MO.NO>   THIS.YEAR.MONTHLY.SALES<1,1,MO.NO>=THIS.YEAR.SALES<MO.NO>   YTD.LAST+=LAST.YEAR.SALES<MO.NO>   YTD.PREV+=PREV.YEAR.SALES<MO.NO>   GPS.THIS+=THIS.YEAR.GPS<MO.NO>   THIS.YEAR.MONTHLY.GPS<1,1,MO.NO>=THIS.YEAR.GPS<MO.NO>   GPS.LAST+=LAST.YEAR.GPS<MO.NO>   GPS.PREV+=PREV.YEAR.GPS<MO.NO>   PARTS.THIS+=THIS.YEAR.PARTS<MO.NO>   PARTS.LAST+=LAST.YEAR.PARTS<MO.NO>   SERVICES.THIS+=THIS.YEAR.SERVICES<MO.NO>   SERVICES.LAST+=LAST.YEAR.SERVICES<MO.NO> NEXT MO.NOREC<67>=LAST.THREEREC<68,3>=THIS.YEAR.MONTHLY.SALESREC<69,3>=THIS.YEAR.MONTHLY.GPSREC<36>=YTD.PREVREC<37>=GPS.PREVCONVERT CHAR(254) TO CHAR(252) IN PREV.YEAR.SALESREC<68,1>=PREV.YEAR.SALESCONVERT CHAR(254) TO CHAR(252) IN PREV.YEAR.GPSREC<69,1>=PREV.YEAR.GPSCONVERT CHAR(254) TO CHAR(252) IN LAST.YEAR.SALESREC<68,2>=LAST.YEAR.SALESCONVERT CHAR(254) TO CHAR(252) IN LAST.YEAR.GPSREC<69,2>=LAST.YEAR.GPSLAST.FY.GPS=SUM(LAST.YEAR.GPS)REC<4>=YTD.THISREC<5>=YTD.LASTDELTA.SALES=YTD.THIS-YTD.LASTDELTA.PCT=(DELTA.SALES*100)/YTD.LASTREC<6>=DELTA.PCTREC<8>=GPS.THISREC<9>=GPS.LASTDELTA.GPS=GPS.THIS-GPS.LASTDELTA.PCT=(DELTA.GPS*100)/GPS.LASTREC<10>=DELTA.PCTREC<11>=LAST.FY.GPSTHIS.GPS.PCT=INT(GPS.THIS * 1000 / YTD.THIS + .5)REC<12>=THIS.GPS.PCTLAST.GPS.PCT=INT(GPS.LAST * 1000 / YTD.LAST + .5)PREV.GPS.PCT=INT(GPS.PREV * 1000 / YTD.PREV + .5)REC<13>=LAST.GPS.PCTFY.LAST.GPS.PCT=INT(LAST.FY.GPS * 1000 / FY.LAST + .5)REC<14>=FY.LAST.GPS.PCTREC<15>=PARTS.THISREC<22>=SERVICES.THISREC<16>=PARTS.LASTREC<23>=SERVICES.LASTDELTA.PARTS=PARTS.THIS-PARTS.LASTDELTA.PARTS.PCT=(DELTA.PARTS*100)/PARTS.LASTREC<17>=DELTA.PARTS.PCTDELTA.SERVICES=SERVICES.THIS-SERVICES.LASTDELTA.SERVICES.PCT=(DELTA.SERVICES*100)/SERVICES.LASTREC<24>=DELTA.SERVICES.PCTTHIS.PARTS.PCT=INT(PARTS.THIS * 1000 / YTD.THIS + .5)REC<19>=THIS.PARTS.PCTLAST.PARTS.PCT=INT(PARTS.LAST * 1000 / YTD.LAST + .5)REC<20>=LAST.PARTS.PCTFY.PARTS.PCT=INT(FY.PARTS * 1000 / FY.LAST + .5)REC<21>=FY.PARTS.PCTTHIS.SERVICES.PCT=INT(SERVICES.THIS * 1000 / YTD.THIS + .5)REC<26>=THIS.SERVICES.PCTLAST.SERVICES.PCT=INT(SERVICES.LAST * 1000 / YTD.LAST + .5)REC<27>=LAST.SERVICES.PCTFY.SERVICES.PCT=INT(FY.SERVICES * 1000 / FY.LAST + .5)REC<28>=FY.SERVICES.PCTREC<29>=YYYYREC<30>=OCONV(LAST.EOM,'D2/')REC<31>=YYYY-1REC<32>=YYYY-2*** DETERMINE PCT OF PARTS FOR PREVIOUS YEAR BETWEEN 40.0% AND 60.0%*DELTA=RND(200);  * -10.0 TO 10.0PREV.PART.PCT=500+(DELTA-100)PREV.PART.AMT=INT(YTD.PREV * PREV.PART.PCT/1000 + .5)PREV.SERVICE.AMT=YTD.PREV-PREV.PART.AMTPREV.SERVICE.PCT=1000-PREV.PART.PCT*** MARGINS, PARTS, AND SERVICES FOR DRILLDOWNS*REC<38>=LAST.THREEYEARS=LAST.THREEMAX.YEARS=DCOUNT(YEARS,CHAR(253))REC<39>=PREV.GPS.PCT:CHAR(253):LAST.GPS.PCT:CHAR(253):THIS.GPS.PCTREC<40>=PREV.PART.AMT:CHAR(253):PARTS.LAST:CHAR(253):PARTS.THISREC<41>=PREV.PART.PCT:CHAR(253):LAST.PARTS.PCT:CHAR(253):THIS.PARTS.PCTREC<42>=PREV.SERVICE.AMT:CHAR(253):SERVICES.LAST:CHAR(253):SERVICES.THISREC<43>=PREV.SERVICE.PCT:CHAR(253):LAST.SERVICES.PCT:CHAR(253):THIS.SERVICES.PCT*** NET INCOME 10% OF SALES*REC<33>=INT(GPS.THIS * .1 + .5)REC<34>=INT(LAST.FY.GPS * .1 + .5)REC<35>=INT(SUM(PREV.YEAR.GPS) * .1 + .5)*** HARD CODE DAYS TO PAY*REC<44>=35REC<45>=39REC<46>=41REC<54>=65:CHAR(253):20:CHAR(253):10:CHAR(253):5REC<55>=63:CHAR(253):21:CHAR(253):10:CHAR(253):6REC<56>=64:CHAR(253):19:CHAR(253):8:CHAR(253):9*** BUILD REP TOTALS*REPS='John,Katherine,Chris,Carrie,Sally,Jan,Bart,Linus,Max'CONVERT ',' TO CHAR(253) IN REPSMAX.REPS=DCOUNT(REPS,CHAR(253))REC<47>=REPSDEVIATION=35;  * 35% DEVIATIONMOS.IN.YEAR=''FOR YEAR.CNTR = 1 TO MAX.YEARS   YEAR.AMTS=REC<68,YEAR.CNTR>   MOS.IN.YEAR<1,YEAR.CNTR>=DCOUNT(YEAR.AMTS,CHAR(252))   ANN.SALES.AMT=SUM(YEAR.AMTS)   ANN.GP.AMT=SUM(REC<69,YEAR.CNTR>)   GP.FACTOR=ANN.GP.AMT/ANN.SALES.AMT   NUM.ITEMS=MAX.REPS   TOT.SCAT.AMT=ANN.SALES.AMT   GOSUB SCATTER.VALUES   FOR REP.CNTR = 1 TO MAX.REPS      REP.SALES.AMT=RETURN.AMOUNTS<1,1,REP.CNTR>      REC<48,REP.CNTR,YEAR.CNTR>=REP.SALES.AMT      REP.GP.AMT=INT(REP.SALES.AMT * GP.FACTOR + .5)      REC<49,REP.CNTR,YEAR.CNTR>=REP.GP.AMT    NEXT REP.CNTR NEXT YEAR.CNTR*** CREATE MONTHLIES FOR EACH REP AND SAVE IN SALES.YYYY*DEVIATION=20FOR YEAR.CNTR = 1 TO MAX.YEARS   YEAR=YEARS<1,YEAR.CNTR>   NUM.ITEMS=MOS.IN.YEAR<1,YEAR.CNTR>   SALES.REC=''   GPS.REC=''   FOR REP.CNTR = 1 TO MAX.REPS      REP=REPS<1,REP.CNTR>      SALES.REC<1,REP.CNTR>=REP      GPS.REC<1,REP.CNTR>=REP      TOT.SCAT.AMT=REC<48,REP.CNTR,YEAR.CNTR>      GOSUB SCATTER.VALUES      SALES.REC<2,REP.CNTR>=RETURN.AMOUNTS      TOT.SCAT.AMT=REC<49,REP.CNTR,YEAR.CNTR>      GOSUB SCATTER.VALUES      GPS.REC<2,REP.CNTR>=RETURN.AMOUNTS    NEXT REP.CNTR   WRITE SALES.REC ON FILE.CONTROL, 'SALES.':YEAR   WRITE GPS.REC ON FILE.CONTROL, 'GPS.':YEAR NEXT YEAR.CNTR*** BUILD SERVICES AND PARTS*PARTS='Doohickey A,Doohickey B,Doohickey C,Doohickey D'CONVERT ',' TO CHAR(253) IN PARTSMAX.PARTS=DCOUNT(PARTS,CHAR(253))REC<52>=PARTSDEVIATION=35FOR YEAR.CNTR = 1 TO MAX.YEARS   ANN.PART.AMT=REC<40,YEAR.CNTR>   NUM.ITEMS=MAX.PARTS   TOT.SCAT.AMT=ANN.PART.AMT   GOSUB SCATTER.VALUES   FOR PART.CNTR = 1 TO MAX.PARTS      REC<53,PART.CNTR,YEAR.CNTR>=RETURN.AMOUNTS<1,1,PART.CNTR>    NEXT PART.CNTR NEXT YEAR.CNTR*SERVICES='Diagnostics,Repair,Custom Machining,Preventative Maintenance'CONVERT ',' TO CHAR(253) IN SERVICESMAX.SERVICES=DCOUNT(SERVICES,CHAR(253))REC<50>=SERVICESDEVIATION=35FOR YEAR.CNTR = 1 TO MAX.YEARS   ANN.SERVICE.AMT=REC<42,YEAR.CNTR>   NUM.ITEMS=MAX.SERVICES   TOT.SCAT.AMT=ANN.SERVICE.AMT   GOSUB SCATTER.VALUES**CRT 'YEAR.CNTR=':YEAR.CNTR**CRT 'ANN.SERVICE.AMT=':ANN.SERVICE.AMT**CRT 'RETURN.AMOUNTS=':RETURN.AMOUNTS:; DEBUG   FOR SERVICE.CNTR = 1 TO MAX.SERVICES      REC<51,SERVICE.CNTR,YEAR.CNTR>=RETURN.AMOUNTS<1,1,SERVICE.CNTR>    NEXT SERVICE.CNTR NEXT YEAR.CNTRWRITE REC ON FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE'RETURN*SCATTER.VALUES:*RETURN.AMOUNTS=''RUNNING.AMT=0LINEAR.PCT=100/NUM.ITEMSMAX.DEVIATION=INT((LINEAR.PCT * DEVIATION/100) * 200)HALF.DEVIATION=INT(MAX.DEVIATION/2 + .5)RUNNING.PCT=0LESS.1=NUM.ITEMS-1MID.WAY=INT(NUM.ITEMS/2 + .5)FOR SCAT.CNTR = 1 TO LESS.1   RANDOM.SCAT=RND(MAX.DEVIATION)   PCT=LINEAR.PCT + ((HALF.DEVIATION-RANDOM.SCAT) / 100)   RUNNING.PCT+=PCT   AMT=INT(TOT.SCAT.AMT * PCT/100 + .5)   RUNNING.AMT+=AMT   IF MID.WAY THEN      IF RUNNING.AMT > (TOT.SCAT.AMT / 2 + .5) THEN         * RUNNING TOO HIGH SO REDUCT         MAX.DEVIATION=INT((LINEAR.PCT * DEVIATION/100) * 125)         HALF.DEVIATION=INT(MAX.DEVIATION/2 + .5)       END    END   RETURN.AMOUNTS<1,1,-1>=AMT NEXT SCAT.CNTRRETURN.AMOUNTS<1,1,-1>=TOT.SCAT.AMT - RUNNING.AMTRETURNEND0001CDSUB.PORTAL.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) Zumasys, Inc*W$TITLE='Portal Documentation'W$TYPE='HTML'W$WIDTH = 1                    ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FILE.WEB.FORMS, 'PORTAL.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORMRETURN00062BSUB.SYS.ERR.BAR0c2    SUBROUTINE SUB.SYS.ERR.BAR* Changed by PORTBAS -> SUBROUTINE SUB.SYS.ERRS* @(#) SUB.SYS.ERR.BAR Ported to jBASE 17:55:32  08 JUL 2015*  The following variable names were converted*   DATE* ** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Show system errors*    INCLUDE WBPD MVDB.INCLUDE*    W$TYPE = "FCCOLUMN2D"    W$TITLE = "System Errors by Day For Each Day"    W$WIDTH = 3*    IF G$QUERYMODE = "1" THEN RETURN*    OPEN '','SYSTEM-ERRORS' TO F.SYSTEM.ERRORS ELSE RETURN*    BASE.DATE = DATE() - 29    XLINE = 'SSELECT SYSTEM-ERRORS BY-DSND DATE BY-DSND TIME WITH DATE GT "':OCONV(BASE.DATE,'D2/'):'"'    EXECUTE XLINE CAPTURING JUNK**    W$BAR.LABELS<1> = "Errors from ":OCONV(BASE.DATE,'D2/'):" Thru ":OCONV(DATE(),'D2/')    W$BAR.TYPE = "clustered"*    LOOP        READNEXT ID ELSE EXIT        Date = FIELD(ID,'*',1)        IF Date < BASE.DATE THEN EXIT*        W$BAR.VALUES<1,(Date-BASE.DATE)+1> += 1    REPEAT*    FOR X = BASE.DATE TO DATE()        OFFSET = (BASE.DATE-X)+1        W$BAR.XLABELS<1,OFFSET> = OCONV(X,'DD')    NEXT X*    W$BAR.YMEMO = "Error Records"    W$BAR.XMEMO = "Day of Month"*    W$BAR.TREND.BEG<1> = "3"    W$BAR.TREND.END<1> = "13"    W$BAR.TREND.OPTS<1> = "thickness='4' color='ff0000' displayValue='Bad Trend'"    W$BAR.TREND.BEG<2> = "11"    W$BAR.TREND.END<2> = "8"    W$BAR.TREND.OPTS<2> = "thickness='10' color='00ff00' displayValue='Good Trend'"*    W$LINK.LABEL = "Detail"    W$LINK.LOCATION = "2"    W$LINK.DD.WIDGET = "System Errors"*    RETURN0002BASUB.SHOW.SESSION0c2SUBROUTINE SUB.SHOW.SESSION** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Show session contents*INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD WWW.INCLUDE*W$TYPE = "TABLE"W$TITLE = "Web Session Contents"W$WIDTH = 3* IF G$QUERYMODE THEN RETURN*READ REC FROM F.WEB.SESSION, SESSION$ID ELSE REC = ""W$TABLE.COL.LABELS<1,1> = "Variable"W$TABLE.COL.LABELS<1,2> = "Value"W$TABLE.DATA<1,1> = "Session ID"W$TABLE.DATA<1,2> = SESSION$IDFOR N = 1 TO DCOUNT(REC<1>, @VM)  W$TABLE.DATA<N+1,1> = REC<1,N>  VAL = REC<2,N>  CONVERT CHAR(2) TO "^" IN VAL  CONVERT CHAR(3) TO "]" IN VAL  CONVERT CHAR(4) TO "\" IN VAL  W$TABLE.DATA<N+1,2> = VALNEXT N*RETURN001133SUB.ADMIN.CONFIG0c2SUBROUTINE SUB.ADMIN.CONFIG** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Administrative configuration widget.*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Administrative Configuration Widget"W$TYPE = "HTML" ;* or HTML, FCPIE, FCBAR, etc.W$WIDTH = 2 ;* 1 = narrow, 2 = medium, 3 = full-width*IF G$QUERYMODE THEN RETURN ;* Dont process, just provide title, type & width*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TEXT.INFO = "Unable to open MVDB.CONTROL"  RETURNENDOPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE   W$TEXT.INFO = "Unable to open MVDB.THEMES"  RETURNENDW$TEXT.INFO = "" ;* No widget content at this point.*READ SETTINGS.REC FROM F.MVDB.CONTROL, 'MVDB.SETTINGS' ELSE SETTINGS.REC = ""IF G$SUBMITTED = 1 THEN  FOR N = 1 TO 15    SETTINGS.REC<N> = WIDGET.USER.DATA(N)  NEXT N  WRITE SETTINGS.REC ON F.MVDB.CONTROL, 'MVDB.SETTINGS'  W$HTML.DATA = "Settings saved."ENDIF SETTINGS.REC<1> # "" THEN  W$HTML.DATA := '<br /><a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=':SETTINGS.REC<1>:'" target="MVDB.SUBS_':SETTINGS.REC<1>:'">Edit Subroutine: ':SETTINGS.REC<1>:'</a>'ENDIF SETTINGS.REC<5> = "" THEN SETTINGS.REC<5> = 24IF SETTINGS.REC<3> = "" THEN SETTINGS.REC<3> = 20IF SETTINGS.REC<4> = "" THEN  LOCATE "SERVER_PORT" IN CGI$VARS SETTING POS THEN    SETTINGS.REC<4> = CGI$VALS<POS>  ENDENDIF SETTINGS.REC<9> = '' THEN SETTINGS.REC<9> = 'UTF-8'*W$INPUT.PROMPT<1> = "User Auth Sub"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = SETTINGS.REC<1>W$INPUT.PARAMS<1> = 'size="40"'*W$INPUT.PROMPT<2> = "Password Req?"W$INPUT.TYPE<2> = "SELECT"W$INPUT.SELOPTS<2> = "Yes":@VM:"No"W$INPUT.SELVALS<2> = "0":@VM:"1"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = SETTINGS.REC<2>*W$INPUT.PROMPT<3> = "Failure Tolerance Period"W$INPUT.TYPE<3> = "TEXT"W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = SETTINGS.REC<3>W$INPUT.PARAMS<3> = 'size="5"'*W$INPUT.PROMPT<4> = "TCP Port"W$INPUT.TYPE<4> = "TEXT"W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = SETTINGS.REC<4>W$INPUT.PARAMS<4> = 'size="5"'*W$INPUT.PROMPT<5> = "Session Timeout (hours)"W$INPUT.TYPE<5> = "TEXT"W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = SETTINGS.REC<5>W$INPUT.PARAMS<5> = 'size="5"'*IF SETTINGS.REC<6> = '' THEN SETTINGS.REC<6> = 0W$INPUT.PROMPT<6> = "GMT Offset"W$INPUT.TYPE<6> = "SELECT"GMT.VAL.LIST = ''; GMT.OPT.LIST = ''FOR X = 12 TO 1 STEP -1  GMT.OPT.LIST<1,-1> = 'GMT -':X  GMT.VAL.LIST<1,-1> = X * (-1)NEXT XGMT.OPT.LIST<1,-1> = 'GMT'GMT.VAL.LIST<1,-1> = 0FOR X = 1 TO 12  GMT.OPT.LIST<1,-1> = 'GMT +':X  GMT.VAL.LIST<1,-1> = XNEXT XW$INPUT.SELOPTS<6> = GMT.OPT.LISTW$INPUT.SELVALS<6> = GMT.VAL.LISTW$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = SETTINGS.REC<6>*W$INPUT.PROMPT<7> = "Alternate Logo Image"W$INPUT.TYPE<7> = "TEXT"W$INPUT.UDPOS<7> = 7W$INPUT.DEFAULT<7> = SETTINGS.REC<7>*EXECUTE 'SSELECT MVDB.THEMES' CAPTURING JUNKTHEME.LIST = ''LOOP  READNEXT THEME.ID ELSE EXIT  READV CSS.NAME FROM F.MVDB.THEMES, THEME.ID, 1 ELSE CSS.NAME = ''  IF CSS.NAME # '' THEN    THEME.LIST<1,-1> = CSS.NAME    THEME.LIST<2,-1> = THEME.ID  ENDREPEATW$INPUT.PROMPT<8> = "Dashboard Theme"W$INPUT.TYPE<8> = "SELECT"W$INPUT.SELOPTS<8> = 'Default Theme':@VM:THEME.LIST<2>W$INPUT.SELVALS<8> = '':@VM:THEME.LIST<2>W$INPUT.UDPOS<8> = 8W$INPUT.DEFAULT<8> = SETTINGS.REC<8>*W$INPUT.PROMPT<9> = 'Character Set'W$INPUT.TYPE<9> = "TEXT"W$INPUT.UDPOS<9> = 9W$INPUT.DEFAULT<9> = SETTINGS.REC<9>*W$INPUT.PROMPT<10> = "Auto-Trim Sessions"W$INPUT.TYPE<10> = "SELECT"W$INPUT.SELOPTS<10> = 'No':@VM:'Yes'W$INPUT.SELVALS<10> = 'N':@VM:'Y'W$INPUT.UDPOS<10> = 10W$INPUT.DEFAULT<10> = SETTINGS.REC<10>*W$INPUT.PROMPT<11> = "Auto-Refresh"W$INPUT.TYPE<11> = "SELECT"W$INPUT.SELOPTS<11> = 'No':@VM:'Yes'W$INPUT.SELVALS<11> = 'N':@VM:'Y'W$INPUT.UDPOS<11> = 11W$INPUT.DEFAULT<11> = SETTINGS.REC<11>**WEBSERVICE*W$INPUT.PROMPT<12> = "Allow 'webservice' logins"W$INPUT.TYPE<12> = "SELECT"W$INPUT.SELOPTS<12> = 'No':@VM:'Yes'W$INPUT.SELVALS<12> = 'N':@VM:'Y'W$INPUT.UDPOS<12> = 12W$INPUT.DEFAULT<12> = SETTINGS.REC<12>**EMAILED REPORTS*W$INPUT.PROMPT<13> = "Allow 'emailed' logins"W$INPUT.TYPE<13> = "SELECT"W$INPUT.SELOPTS<13> = 'No':@VM:'Yes'W$INPUT.SELVALS<13> = 'N':@VM:'Y'W$INPUT.UDPOS<13> = 13W$INPUT.DEFAULT<13> = SETTINGS.REC<13>*W$INPUT.BUTTON = "Save"*RETURN003063SUB.PORTAL.AR.REPORTS0c2SUBROUTINE SUB.PORTAL.AR.REPORTS**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE='Portal AR'; CALL PORTAL.SHOW.LAST.UPDATED('AR')W$TYPE = "FC2DPIE"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*EQUATE REPORT.TYPE TO WIDGET.USER.DATA(1)W$PDFABLE=1OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT.DASHBOARD.BALANCES ELSE   W$TYPE='TEXT'   W$TEXT.DATA='UNABLE TO OPEN DICT DASHBOARD.BALANCES'   RETURN END** LAYOUT OF THE *CURRENT.AR.STATS RECORD** PERIOD.AMOUNTS DATA LAYOUT* 1 PERIOD 1 AMOUNT* 2 PERIOS 2 AMOUNT* 3 PERIOD 3 AMOUNT* 4 PERIOD 4 AMOUNT* 5* 6 YEAR ] YEAR ] YEAR* 7 PERIOD 1 NUMBER \ PERIOD 2 NUMBER \ PERIOD 3 NUMBER \ PERIOD 4 NUMBER* 8 PERIOD 1 AMOUNT \ PERIOD 2 AMOUNT \ PERIOD 3 AMOUNT \ PERIOD 4 AMOUNT* 9 YEAR 1 TOTAL DAYS ] YEAR TOTAL DAYS ] YEAR 3 TOTAL DAYS ] YEAR 4 TOTAL DAYS* 10 YEAR 1 JAN # PAID\ FEB # PAID ... ] YEAR 2 JAN # PAID \* 11 YEAR 1 JAN # TOTAL DAYS \ FEB TOTAL DAYS ....*DIM AR.AMOUNTS(30)MATREAD AR.AMOUNTS FROM FI.DICT.DASHBOARD.BALANCES, '*CURRENT.AR.STATS' ELSE MAT AR.AMOUNTS=''EQUATE YEARS TO AR.AMOUNTS(6)NUM.YEARS=DCOUNT(YEARS,@VM)EQUATE ANNUAL.NUMBERS TO AR.AMOUNTS(7)EQUATE ANNUAL.AMOUNTS TO AR.AMOUNTS(8)EQUATE ANNUAL.TOTAL.DAYS TO AR.AMOUNTS(9)EQUATE MONTHLY.NUMBER.PAID TO AR.AMOUNTS(10)EQUATE MONTHLY.TOTAL.DAYS TO AR.AMOUNTS(11)EQUATE CUSTOMERS TO AR.AMOUNTS(12)EQUATE CUST.AMT.DUES TO AR.AMOUNTS(13)EQUATE CUST.MOST.DAYS.DUE TO AR.AMOUNTS(14)EQUATE CUST.TOTAL.1000.DAYS TO AR.AMOUNTS(15)EQUATE CUST.NUM.1000.DAYS TO AR.AMOUNTS(16)EQUATE CUST.TOTAL.60.DAYS TO AR.AMOUNTS(17)EQUATE CUST.NUM.60.DAYS TO AR.AMOUNTS(18)EQUATE HIGHEST.AMTS.CUSTS TO AR.AMOUNTS(19)EQUATE HIGHEST.AMTS TO AR.AMOUNTS(20)EQUATE HIGHEST.DAYS.CUSTS TO AR.AMOUNTS(21)EQUATE HIGHEST.DAYS TO AR.AMOUNTS(22)EQUATE HIGHEST.INCREASE.CUSTS TO AR.AMOUNTS(23)EQUATE HIGHEST.INCREASE.PCTS TO AR.AMOUNTS(24)EQUATE HIGHEST.INCREASE.60.DAY.AVG TO AR.AMOUNTS(25)EQUATE HIGHEST.INCREASE.1000.DAY.AVG TO AR.AMOUNTS(26)*W$INPUT.PROMPT<1>='Type of Report 'W$INPUT.TYPE<1>='SELECT'W$INPUT.SELOPTS<1>='Current Receivables':@VM:'Average Days by Year':@VM:'Average Days Last 12 Months'*** Add Average Days by Month for past 3 years with activity in every month*YEAR.POS=NUM.YEARSYEARS.ALREADY=0LOOP   YEAR.POS=YEAR.POS-1   IF NOT(YEAR.POS) THEN      JAN.NUMBER=0    END ELSE      JAN.NUMBER=MONTHLY.NUMBER.PAID<1,YEAR.POS,1>    ENDUNTIL NOT(JAN.NUMBER) OR YEARS.ALREADY >= 3 DO   YEAR=YEARS<1,YEAR.POS>   YEARS.ALREADY+=1   W$INPUT.SELOPTS<1,-1>='Average Days by Month ':YEARREPEAT**W$INPUT.SELOPTS<1,-1>='Customers By Largest Receivables'**W$INPUT.SELOPTS<1,-1>='Customers By Most Aged Receivables'**W$INPUT.SELOPTS<1,-1>='Customers By Largest Aging Increases'W$INPUT.SELOPTS<1,-1>='Customers Needing Aging Attention'W$INPUT.SELVALS=W$INPUT.SELOPTSIF REPORT.TYPE = '' THEN   REPORT.TYPE='Current Receivables' ENDW$INPUT.UDPOS = 1W$INPUT.DEFAULT<1>=REPORT.TYPE*BEGIN CASE   CASE REPORT.TYPE = 'Current Receivables'      GOSUB DO.CURRENT   CASE REPORT.TYPE = 'Average Days by Year'      GOSUB AVERAGE.DAYS.BY.YEAR   CASE REPORT.TYPE = 'Average Days Last 12 Months'      GOSUB AVERAGE.DAYS.LAST.12.MONTHS   CASE REPORT.TYPE[1,21] = 'Average Days by Month'      AVERAGE.YEAR=FIELD(REPORT.TYPE,' ',5)      GOSUB AVERAGE.DAYS.BY.MONTH.PER.YEAR   CASE REPORT.TYPE = 'CUSTOMERS BY LARGEST RECEIVABLES'      GOSUB CUSTOMERS.BY.LARGEST.RECEIVABLES   CASE REPORT.TYPE = 'CUSTOMERS BY MOST AGED RECEIVABLES'      GOSUB CUSTOMERS.BY.MOST.AGED.RECEIVABLES   CASE REPORT.TYPE = 'CUSTOMERS BY LARGEST AGING INCREASES'      GOSUB CUSTOMERS.BY.LARGEST.AGING.INCREASES   CASE REPORT.TYPE = 'Customers Needing Aging Attention'      GOSUB CUSTOMERS.BY.LARGEST.RECEIVABLES   CASE 1      W$TYPE='TEXT'      W$TEXT.DATA='INVALID REPORT TYPE=':REPORT.TYPEEND CASERETURN*DO.CURRENT:*W$TITLE = "Current - AR Balances by Days Due"; CALL PORTAL.SHOW.LAST.UPDATED('AR')AMTS=AR.AMOUNTS(1):@AM:AR.AMOUNTS(2):@AM:AR.AMOUNTS(3):@AM:AR.AMOUNTS(4):@AM:AR.AMOUNTS(5)W$PIE.CAPTION='Total AR Balance of '*TOT.AMT=SUM(AMTS)W$PIE.CAPTION:=OCONV(TOT.AMT,'MD02,$')*CATEGORIES='Current'CATEGORIES<2>='1 - 30 Days'CATEGORIES<3>='31 - 60 Days'CATEGORIES<4>='61 - 90 Days'CATEGORIES<5>='Over 90 Days'*CATEGORY.AMTS=AMTS**W$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='showPercentageValues="0"'W$CHART.OPTIONS<-1>='showPercentageInLabel="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="0"'W$CHART.OPTIONS<-1>='thousandSeparator=","'W$CHART.OPTIONS<-1>='pieradius="150"'FOR N = 1 TO 5  W$PIE.LABELS<1,N> = CATEGORIES<N>  W$PIE.VALUES<1,N> = INT(CATEGORY.AMTS<N>/100 + .5)NEXT N*RETURN*AVERAGE.DAYS.BY.YEAR:*W$TITLE = "Average Days To Pay"; CALL PORTAL.SHOW.LAST.UPDATED('AR')W$TYPE = "FCCOLUMN3D"*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEFIRST.YEAR=''; CURRENT.YEAR=''*W$BAR.XMEMO = "Year (drill down for detail)"W$BAR.YMEMO = "Average Days to Pay"*YEAR.NO=0*FOR NN = 1 TO NUM.YEARS  ANNUAL.BY.TYPE.NUMBER=ANNUAL.NUMBERS<1,NN>  BY.TYPE.NUMBER=SUM(ANNUAL.BY.TYPE.NUMBER)  TOTAL.DAYS=ANNUAL.TOTAL.DAYS<1,NN>  IF BY.TYPE.NUMBER AND TOTAL.DAYS THEN     AVERAGE.DAYS=INT(TOTAL.DAYS * 10 / BY.TYPE.NUMBER + .5)     AVERAGE.DAYS=OCONV(AVERAGE.DAYS,'MD1')     YEAR.NO+=1     YEAR=YEARS<1,NN>     IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR     CURRENT.YEAR=YEAR     W$BAR.VALUES<1,YEAR.NO> = AVERAGE.DAYS     W$BAR.XLABELS<1,YEAR.NO> = YEAR     W$FW.DD.WIDGET<1,YEAR.NO>='PORTAL DAYS TO PAY PIE'     W$FW.DD.UD.POS<1,YEAR.NO,1>=1     W$FW.DD.UD.VAL<1,YEAR.NO,1>=YEAR   ENDNEXT NN*W$BAR.CAPTION = "Average Days to Pay From ":FIRST.YEAR:' to ':CURRENT.YEARW$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="1"'W$CHART.OPTIONS<-1>='thousandSeparator=","'W$CHART.OPTIONS<-1>='pieradius="150"'*RETURN*AVERAGE.DAYS.LAST.12.MONTHS:*LAST.YEAR=YEARS<1,NUM.YEARS>**DEBUG=''MOS.IN.LAST.YEAR=DCOUNT(MONTHLY.NUMBER.PAID<1,NUM.YEARS>,CHAR(252))**DEBUG<-1>=MOS.IN.LAST.YEARMOS.IN.PREV.YEAR=12-MOS.IN.LAST.YEAR**DEBUG<-1>=MOS.IN.PREV.YEARIF MOS.IN.PREV.YEAR = 12 THEN   LAST.YEAR=LAST.YEAR-1   THIS.MONTHLY.NUMBERS=MONTHLY.NUMBER.PAID<1,NUM.YEARS-1>   THIS.MONTHLY.TOTAL.DAYS=MONTHLY.TOTAL.DAYS<1,NUM.YEARS-1>   MONTHLY.LABELS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'   CONVERT ',' TO CHAR(252) IN MONTHLY.LABELS   START.MONTH="January ":LAST.YEAR   END.MONTH="December ":LAST.YEAR END ELSE   FULL.MONTHS='January,February,March,April,May,June,July,August,September,October,November,December'   PREV.YEAR.MO.NO=12-MOS.IN.PREV.YEAR+1**DEBUG<-1>=PREV.YEAR.MO.NO   START.MONTH=FIELD(FULL.MONTHS,',',PREV.YEAR.MO.NO):' ':(LAST.YEAR-1)   END.MONTH=FIELD(FULL.MONTHS,',',MOS.IN.LAST.YEAR):' ':LAST.YEAR   ABREV.MONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'   COMMA.POS=INDEX(ABREV.MONTHS,',',PREV.YEAR.MO.NO-1)   MONTHLY.LABELS=ABREV.MONTHS[COMMA.POS+1,9999]:',':(ABREV.MONTHS[1,COMMA.POS-1])   CONVERT ',' TO CHAR(252) IN MONTHLY.LABELS   *   ** ISOLATE THE NUMBERS FOR THE PREVIOUS YEAR   *   THIS.MONTHLY.NUMBERS=MONTHLY.NUMBER.PAID<1,NUM.YEARS-1>   POS.BEFORE.FIRST=INDEX(THIS.MONTHLY.NUMBERS,CHAR(252),PREV.YEAR.MO.NO-1)   THIS.MONTHLY.NUMBERS=THIS.MONTHLY.NUMBERS[POS.BEFORE.FIRST+1,99999]   THIS.MONTHLY.NUMBERS:=CHAR(252):MONTHLY.NUMBER.PAID<1,NUM.YEARS>   THIS.MONTHLY.TOTAL.DAYS=MONTHLY.TOTAL.DAYS<1,NUM.YEARS-1>   POS.BEFORE.FIRST=INDEX(THIS.MONTHLY.TOTAL.DAYS,CHAR(252),PREV.YEAR.MO.NO-1)   THIS.MONTHLY.TOTAL.DAYS=THIS.MONTHLY.TOTAL.DAYS[POS.BEFORE.FIRST+1,99999]   THIS.MONTHLY.TOTAL.DAYS:=CHAR(252):MONTHLY.TOTAL.DAYS<1,NUM.YEARS>ENDGOSUB AVERAGE.DAYS.BY.MONTHRETURN*AVERAGE.DAYS.BY.MONTH.PER.YEAR:*LOCATE AVERAGE.YEAR IN YEARS<1> SETTING YEAR.POS ELSE RETURNTHIS.MONTHLY.NUMBERS=MONTHLY.NUMBER.PAID<1,YEAR.POS>THIS.MONTHLY.TOTAL.DAYS=MONTHLY.TOTAL.DAYS<1,YEAR.POS>START.MONTH="January ":AVERAGE.YEAREND.MONTH="December ":AVERAGE.YEARMONTHLY.LABELS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'CONVERT ',' TO CHAR(252) IN MONTHLY.LABELSGOSUB AVERAGE.DAYS.BY.MONTHRETURN*AVERAGE.DAYS.BY.MONTH:*W$TITLE = "Average Days To Pay"; CALL PORTAL.SHOW.LAST.UPDATED('AR')W$TYPE = "FCCOLUMN3D"*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUE*W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Average Days to Pay"*MONTH.NO=0*FOR NN = 1 TO 12  MONTHLY.NUMBER=THIS.MONTHLY.NUMBERS<1,1,NN>  MONTHLY.DAYS=THIS.MONTHLY.TOTAL.DAYS<1,1,NN>  MONTHLY.LABEL=MONTHLY.LABELS<1,1,NN>  IF MONTHLY.NUMBER AND MONTHLY.DAYS THEN     AVERAGE.DAYS=INT(MONTHLY.DAYS * 10 / MONTHLY.NUMBER + .5)     AVERAGE.DAYS=OCONV(AVERAGE.DAYS,'MD1')   END ELSE AVERAGE.DAYS=0  W$BAR.VALUES<1,NN> = AVERAGE.DAYS  W$BAR.XLABELS<1,NN> = MONTHLY.LABELNEXT NN*W$BAR.CAPTION = "Average Days to Pay From ":START.MONTH:' to ':END.MONTHW$CHART.OPTIONS<-1>='showValues="1"'W$CHART.OPTIONS<-1>='formatNumber="1"'W$CHART.OPTIONS<-1>='formatNumberScale="0"'W$CHART.OPTIONS<-1>='decimalPrecision="1"'RETURN*CUSTOMERS.BY.LARGEST.RECEIVABLES:*W$TYPE='TABLE'W$WIDTH = 3MAX.HIGHEST.AMTS=DCOUNT(HIGHEST.AMTS.CUSTS,@VM)IF MAX.HIGHEST.AMTS > 50 THEN MAX.HIGHEST.AMTS=50W$TABLE.COL.LABELS<1,1> = "| --- Customers ---<br>| ":MAX.HIGHEST.AMTS:" With Most Amount Owed"W$TABLE.COL.LABELS<1,2> = "Amount<br>Owed"W$TABLE.COL.LABELS<1,3> = "Most Days|<br>&nbsp;&nbsp;&nbsp;&nbsp;Aged&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|"W$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "center"W$TABLE.COL.JUST<1,3> = "center"IF MAX.HIGHEST.AMTS > 50 THEN MAX.HIGHEST.AMTS=50W$TITLE = MAX.HIGHEST.AMTS:' Customers With Largest Receivables'; CALL PORTAL.SHOW.LAST.UPDATED('AR')FOR I = 1 TO MAX.HIGHEST.AMTS   CUSTOMER=HIGHEST.AMTS.CUSTS<1,I>   HIGHEST.AMT=HIGHEST.AMTS<1,I>   HIGHEST.AMT=OCONV(HIGHEST.AMT,'MD2,')   LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUST.POS ELSE CUST.POS=9999   CUST.HIGHEST.DAYS=CUST.MOST.DAYS.DUE<1,CUST.POS>   W$TABLE.DATA<I,1>=CUSTOMER   W$TABLE.DATA<I,2>=HIGHEST.AMT   W$TABLE.DATA<I,3>=CUST.HIGHEST.DAYS NEXT I*RETURN*CUSTOMERS.BY.MOST.AGED.RECEIVABLES:***W$TYPE='TABLE'**W$WIDTH = 2MAX.HIGHEST.DAYS=DCOUNT(HIGHEST.DAYS.CUSTS,@VM)IF MAX.HIGHEST.DAYS > 50 THEN MAX.HIGHEST.DAYS=50W$TABLE.COL.LABELS<1,4> = "| --- Customers ---<br>| ":MAX.HIGHEST.DAYS:" With Most Days Aged"W$TABLE.COL.LABELS<1,5> = "Most Days<br>Aged"W$TABLE.COL.LABELS<1,6> = "&nbsp;Amount&nbsp;|<br>&nbsp;&nbsp;&nbsp;Owed&nbsp;&nbsp;&nbsp;|"W$TABLE.COL.JUST<1,4> = "left"W$TABLE.COL.JUST<1,5> = "center"W$TABLE.COL.JUST<1,6> = "right"W$TITLE = MAX.HIGHEST.DAYS:' Customers With Most Aged Receivables'; CALL PORTAL.SHOW.LAST.UPDATED('AR')FOR I = 1 TO MAX.HIGHEST.DAYS   CUSTOMER=HIGHEST.DAYS.CUSTS<1,I>   HIGHEST.DAY=HIGHEST.DAYS<1,I>   LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUST.POS ELSE CUST.POS=9999   AMT.DUE=CUST.AMT.DUES<1,CUST.POS>   W$TABLE.DATA<I,4>=CUSTOMER   W$TABLE.DATA<I,5>=HIGHEST.DAY   W$TABLE.DATA<I,6>=OCONV(AMT.DUE,'MD2,') NEXT I*RETURN*CUSTOMERS.BY.LARGEST.AGING.INCREASES:**W$TYPE='TABLE'*W$WIDTH = 2MAX.HIGHEST.INCREASE=DCOUNT(HIGHEST.INCREASE.CUSTS,@VM)IF MAX.HIGHEST.INCREASE > 50 THEN MAX.HIGHEST.INCREASE=50W$TABLE.COL.LABELS<1,7> = "| --- Customers ---<br>| ":MAX.HIGHEST.INCREASE:" With Significant Aging Increase"W$TABLE.COL.LABELS<1,8> = "PCT<br>Increase"W$TABLE.COL.LABELS<1,9> = "60<br>Day Avg"W$TABLE.COL.LABELS<1,10> = "&nbsp;&nbsp;&nbsp;1000&nbsp;&nbsp;&nbsp;|<br>Day Avg|"W$TABLE.COL.JUST<1,7> = "left"W$TABLE.COL.JUST<1,8> = "center"W$TABLE.COL.JUST<1,9> = "center"W$TABLE.COL.JUST<1,10> = "center"W$TITLE = MAX.HIGHEST.INCREASE:' Customers With Largest Aging Increase'; CALL PORTAL.SHOW.LAST.UPDATED('AR')FOR I = 1 TO MAX.HIGHEST.INCREASE   CUSTOMER=HIGHEST.INCREASE.CUSTS<1,I>   HIGHEST.INCREASE.PCT=HIGHEST.INCREASE.PCTS<1,I>   LOCATE CUSTOMER IN CUSTOMERS<1> SETTING CUST.POS ELSE CUST.POS=9999   W$TABLE.DATA<I,7>=CUSTOMER   W$TABLE.DATA<I,8>=HIGHEST.INCREASE.PCT   W$TABLE.DATA<I,9>=HIGHEST.INCREASE.60.DAY.AVG<1,I>   W$TABLE.DATA<I,10>=HIGHEST.INCREASE.1000.DAY.AVG<1,I> NEXT IRETURN0014E0SUB.MOBILE.APPS0c2    SUBROUTINE SUB.MOBILE.APPS* @(#) SUB.MOBILE.APPS Ported to jBASE 17:55:32  08 JUL 2015*  The following variable names were converted*   STATUS* ** Dashboard Widget*    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Mobile Web App Registration"    W$TYPE = "TABLE"    W$WIDTH = 3     ;* Full width (1=1/3, 2=2/3, 3=3/3)*    IF G$QUERYMODE THEN RETURN** Set up column labels    W$TABLE.COL.LABELS<1,1> = "Subroutine Name"    W$TABLE.COL.LABELS<1,2> = "Application Name"    W$TABLE.COL.LABELS<1,3> = "Status"    W$TABLE.COL.LABELS<1,4> = "Action"** Column justification = left, right, center    W$TABLE.COL.JUST<1,1> = "left"    W$TABLE.COL.JUST<1,2> = "left"    W$TABLE.COL.JUST<1,3> = "left"    W$TABLE.COL.JUST<1,4> = "left"** Table Rows*    OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE        W$TYPE = "TEXT"        W$TEXT.DATA = "Unable to open MVDB.CONTROL"        RETURN    END    READ MOBI.APPS FROM F.MVDB.CONTROL, "MOBI.APPS" ELSE MOBI.APPS = ""*    IF WIDGET.USER.DATA(1) # "" THEN        BEGIN CASE        CASE G$SUBMITTED            SUBNAME = WIDGET.USER.DATA(1)            IF SUBNAME # "" THEN                LOCATE SUBNAME IN MOBI.APPS<1> BY "AL" SETTING POS THEN                    MOBI.APPS<2,POS> = WIDGET.USER.DATA(3)                    MOBI.APPS<3,POS> = WIDGET.USER.DATA(2)                END ELSE                    MOBI.APPS = INSERT( MOBI.APPS, 1, POS, 0, SUBNAME )                    MOBI.APPS = INSERT( MOBI.APPS, 2, POS, 0, WIDGET.USER.DATA(3) )                    MOBI.APPS = INSERT( MOBI.APPS, 3, POS, 0, WIDGET.USER.DATA(2) )                END            END        CASE WIDGET.USER.DATA(2) = "delete"            MOBI.APPS = DELETE( MOBI.APPS, 1, WIDGET.USER.DATA(1), 0 )            MOBI.APPS = DELETE( MOBI.APPS, 2, WIDGET.USER.DATA(1), 0 )            MOBI.APPS = DELETE( MOBI.APPS, 3, WIDGET.USER.DATA(1), 0 )        CASE WIDGET.USER.DATA(2) = "play"            MOBI.APPS<2,WIDGET.USER.DATA(1)> = "A"        CASE WIDGET.USER.DATA(2) = "pause"            MOBI.APPS<2,WIDGET.USER.DATA(1)> = "I"        CASE WIDGET.USER.DATA(2) = "default"            LOCATE "D" IN MOBI.APPS<2> SETTING CURR.D THEN                MOBI.APPS<2,CURR.D> = "A"            END            MOBI.APPS<2,WIDGET.USER.DATA(1)> = "D"        CASE 1        END CASE        WRITE MOBI.APPS ON F.MVDB.CONTROL, 'MOBI.APPS'        WIDGET.USER.DATA(1) = ""        WIDGET.USER.DATA(2) = ""        WIDGET.USER.DATA(3) = ""    END*    TOPROW = ""    FOR ROW = 1 TO DCOUNT(MOBI.APPS<1>, @VM )        SUB.NAME = MOBI.APPS<1,ROW>        ENC.SUB.NAME = SUB.NAME        CALL SUB.URL.ENCODE(ENC.SUB.NAME)        SUB.LINK = '<a href="/dbc/MVDB.WEB.ED?ed_file=MOBI.SUBS&ed_item=':ENC.SUB.NAME:'" target="MOBI.SUBS_':ENC.SUB.NAME:'">':SUB.NAME:'</a>'        W$TABLE.DATA<ROW,1> = SUB.LINK        W$TABLE.DATA<ROW,2> = MOBI.APPS<3,ROW>        Status = MOBI.APPS<2,ROW>        BEGIN CASE        CASE Status = "A"            Status = '<img src="/db/icons/bullet_green.png" />Active'        CASE Status = "I"            Status = '<img src="/db/icons/bullet_red.png" />Inactive'        CASE Status = "D"            Status = '<img src="/db/icons/bullet_green.png" /><b>Active/Default</b>'            Status := '&nbsp;<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=play"><img src="/db/icons/control_stop.png" title="Un-set Default" /></a>'            TOPROW = ROW        END CASE        W$TABLE.DATA<ROW,3> = Status        ACTIONS = '<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=delete" '        ACTIONS := \onClick='confirm("Delete this entry?");'><img src="/db/icons/delete.png" title="Delete" /></a>\        ACTIONS := '&nbsp;'        IF MOBI.APPS<2,ROW> = "A" OR MOBI.APPS<2,ROW> = "D" THEN            ICON = "control_pause.png"            ACTION = "pause"            ALT = "Set as inactive"        END ELSE            ICON = "control_play.png"            ACTION = "play"            ALT = "Set as active"        END        ACTIONS := '<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=':ACTION:'" ><img src="/db/icons/':ICON:'" title="':ALT:'" /></a>'        IF MOBI.APPS<2,ROW> # "D" THEN            ICON = "star.png"            ACTION = "default"            ALT = "Set as default"            ACTIONS := '&nbsp;<a href="/dbc/MVDB.MAIN?udview=':G$WIDGET.NAME:'&udpos1=1&udval1=':ROW:'&udpos2=2&udval2=':ACTION:'" ><img src="/db/icons/':ICON:'" title="':ALT:'" /></a>'        END        W$TABLE.DATA<ROW,4> = ACTIONS    NEXT ROW*    IF TOPROW # "" THEN* Float this row to the top of the list (the default application)        ROW = W$TABLE.DATA<TOPROW>        W$TABLE.DATA = DELETE( W$TABLE.DATA, TOPROW, 0, 0 )        W$TABLE.DATA = INSERT( W$TABLE.DATA, 1, 0, 0, ROW )    END*    W$INPUT.PROMPT<1> = "Add Subroutine"    W$INPUT.TYPE<1> = "TEXT"    W$INPUT.UDPOS<1> = 1*    W$INPUT.PROMPT<2> = "Description"    W$INPUT.TYPE<2> = "TEXT"    W$INPUT.UDPOS<2> = 2*    W$INPUT.PROMPT<3> = "Status"    W$INPUT.TYPE<3> = "SELECT"    W$INPUT.UDPOS<3> = 3    W$INPUT.DEFAULT<3> = "A"    W$INPUT.SELOPTS<3> = "Active":@VM:"Default":@VM:"Inactive"    W$INPUT.SELVALS<3> = "A":@VM:"D":@VM:"I"*    RETURN0003F5EXECUTE.STACKED.CMNDS0c2SUBROUTINE EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,NUM.RETURNED,REPORT)*REPORT=''NUM.RETURNED=1IF STACKED.1 <> '' THEN   EXECUTE STACKED.1 CAPTURING DUMMY   NUM.RETURNED=SYSTEM(11)   IF NOT(NUM.RETURNED) THEN RETURN ENDBREAK.ON.POS2=INDEX(STACKED.2,'BREAK-ON ',2)IF BREAK.ON.POS2 THEN   BREAK.ON.POS=INDEX(STACKED.2,'BREAK-ON ',1)   PLATFORM=OCONV('PLATFORM','TMVDB.CONTROL;X;1;1')   IF PLATFORM = '' THEN PLATFORM='D3'   IF PLATFORM = 'JB' THEN      STR1=STACKED.2[1,BREAK.ON.POS-1]      STR2=STACKED.2[BREAK.ON.POS,9999999]      PIPE.POS=INDEX(STR2,' PIPE ',1)      IF PIPE.POS THEN         BREAK.VAR=STR2[1,PIPE.POS-1]         BREAK.VAR=TRIM(BREAK.VAR)         BREAK.VAR=FIELD(BREAK.VAR,' ',2)         BREAK.VAR=' BREAK-ON ':BREAK.VAR:' "':"'V'|":'" '         STR2=STR2[PIPE.POS,9999999]       END ELSE         BREAK.VAR=''       END      STACKED.2=STR1:BREAK.VAR:STR2    END ENDEXECUTE STACKED.2 CAPTURING REPORTCONVERT '$,' TO '' IN REPORTRETURNEND0000D7TEST.TOM0c2PROMPT ''INPUT A,1CRT AINPUT A,0CRT A****DATA "LIST SALES.FILE.PATH"****EXECUTE 'SELECT SALES.FILE.PATH WITH CLOSE.DATE = "5-1-20"'**IF 0 THEN XXX=@SENTENCE ELSE XXX=SENTENCE()**CRT XXX**CRT XXX0003E3CREATE.UD.QPOINTER0c2SUBROUTINE CREATE.UD.QPOINTER(ACCOUNT,FILENAME,CALL.IT,FI.QPOINTER)OPEN '',CALL.IT TO FI.QPOINTER THEN   IF CALL.IT <> 'QFILE' THEN RETURN ENDCALL.IT.PARAM=CALL.ITCALL.IT=''OPEN '','VOC' TO FI.VOC ELSE RETURNOPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE   UD.ACCOUNTS='F'   UD.ACCOUNTS<-1>='@UDTHOME/sys/UD.ACCOUNT'   UD.ACCOUNTS<-1>='@UDTHOME/sys/D_UD.ACCOUNT'   WRITE UD.ACCOUNTS ON FI.VOC, 'UD.ACCOUNTS'   OPEN '','UD.ACCOUNTS' TO FI.UD.ACCOUNTS ELSE RETURN ENDREADV PATH FROM FI.UD.ACCOUNTS, ACCOUNT, 1 ELSE RETURNF.POINTER='F'F.POINTER<2>=PATH:'/':FILENAMEF.POINTER<3>=PATH:'/D_':FILENAMEWRITE F.POINTER ON FI.VOC, CALL.IT.PARAMOPEN '',CALL.IT.PARAM TO FI.QPOINTER THEN   CALL.IT=CALL.IT.PARAM   RETURN ENDF.POINTER<3>=PATH:'/D_VOC'WRITE F.POINTER ON FI.VOC, CALL.IT.PARAMOPEN '',CALL.IT.PARAM TO FI.QPOINTER THEN   * CHANGE CALL.IT TO SUCCESSFUL NAME   * OTHERWISE IT WILL RETURN WITH NULL SAYING FAILURE   CALL.IT=CALL.IT.PARAM ENDRETURN00266FSUB.HERVE0c2SUBROUTINE SUB.HERVE** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Herve html to pdf test"     ;* Title for widget title barW$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                   ;* Full width (1=1/3, 2=2/3, 3=3/3)W$PDFABLE = 1                 ;* Can be converted to PDFW$PRINTABLE = 1               ;* Can be printed*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here*OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE NULLREAD HTML FROM FILE.WEB.FORMS, 'VALENCOURS2368' ELSE HTML=''**** Create a HTML string*** In this example, we are including our own styles & scripts in <head>.* This causes MV Dashboard to display this content in an <iframe>.* Because this content does not render properly using the built-in* DOCTYPE:**   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"*   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">** we supply our own DOCTYPE to override the standard DOCTYPE.*HTML = ''HTML<-1> = \<!DOCTYPE HTML PUBLIC>\HTML<-1> = \<html>\HTML<-1> = \<head>\HTML<-1> = \<title>Etat de la Valorisation des Encours</title>\HTML<-1> = \<style type="text/css"> \HTML<-1> = \body {background:#CCC; height:100%;}\HTML<-1> = \h1 { color:#000000; font-weight:bold; font-size:40px; }\HTML<-1> = \h2 { color:#000000; font-weight:bold; font-size:30px; }\HTML<-1> = \h3 { color:#000000; font-size:20px; }\HTML<-1> = \table { width: 97%; border: 1px solid #777; border-collapse:collapse; font-family:sans_serif, Verdana, Arial, Helvetica; }\HTML<-1> = \thead { background-color:#fa3; }\HTML<-1> = \tfoot { background-color:#fea; }\HTML<-1> = \td { border-style:solid; border-width:1px; border-color:silver; font-size:10px; }\HTML<-1> = \th { border-style:solid; border-width:1px; border-color:#6f5b85; font-size:11px; }\HTML<-1> = \.titre { color:blue; font-weight:bold; font-size:40px; }\HTML<-1> = \.stitre { color:BLACK; font-weight:bold; font-size:20px; }\HTML<-1> = \.over { background-color: #ef2e25; color: white; }\HTML<-1> = \.normal { background-color: white; }\HTML<-1> = \.lig0 { background-color: #dcdcdc; } /* lignes paires */\HTML<-1> = \.lig1 { background-color: #white; }  /* lignes impaires */\HTML<-1> = \.alink { font-weight: bold; text-decoration: none; color: blue; }\HTML<-1> = \#date { position: absolute; top: 10px; right: 15px; font-size: 14px; }\HTML<-1> = \#titre { position: absolute;top: 30px; left: 300px; font-weight: bold; font-size: 30px; }\HTML<-1> = \#stitre { position: absolute; top: 60px; left: 300px; font-weight: bold; font-size: 14px; }\HTML<-1> = \#dateheure { position: absolute; top: 0px; width: 95%; text-align: right; font-size: 12px; }\HTML<-1> = \#container { width: 100%; padding:15px;}\HTML<-1> = \#banniere { margin:auto; background:url(logo.png) no-repeat; width:1000px; height:100px; padding-top:10px;position: relative;}\HTML<-1> = \#content { width:1050px; background:#FFF; border-radius:15px; margin: auto; -moz-border-radius: 15px; display: block;}\HTML<-1> = \.titre_tab { font-size:14px; font-weight:bold; text-align:left; padding-left:5px;}\HTML<-1> = \.entete_tab_sem { background:#CCC;font-size:12px; font-weight:bold; text-align:center;}\HTML<-1> = \.entete_tab_we { background:#fa3;font-size:12px; font-weight:bold; text-align:center;}\HTML<-1> = \.cell_sem { text-align:center;background:#CFC;margin:0;padding:0;font-size:12px;}\HTML<-1> = \.cell_we { background:#Fea};\HTML<-1> = \</style>\HTML<-1> = \<script>\HTML<-1> = \  var affiche = "-";\HTML<-1> = \function changetout(max) {\HTML<-1> = \   var i    = 0;\HTML<-1> = \   var val  = "";\HTML<-1> = \   for (i=1; i <= max; i++) {\HTML<-1> = \        if (affiche == "-") { val = "G" } else { val = "D" }\HTML<-1> = \        val = val + i;\HTML<-1> = \        change(val);\HTML<-1> = \   }\HTML<-1> = \   document.getElementById("idth1").innerText = affiche;\HTML<-1> = \   if (affiche == "-") {\HTML<-1> = \       affiche = "+"\HTML<-1> = \   } else {\HTML<-1> = \       affiche = "-"\HTML<-1> = \   }\HTML<-1> = \}\HTML<-1> = \function change(lig) {\HTML<-1> = \   car1 = lig.slice(0,1);\HTML<-1> = \   car2 = lig.slice(1,lig.length);\HTML<-1> = \   obj = document.getElementById(lig);\HTML<-1> = \   val = obj.style.display;\HTML<-1> = \   obj.style.display = "none";\HTML<-1> = \   if (car1 == "G") {\HTML<-1> = \      val = "D" + car2;\HTML<-1> = \   } else {\HTML<-1> = \      val = "G" + car2;\HTML<-1> = \   }\HTML<-1> = \   document.getElementById(val).style.display = "";\HTML<-1> = \}\HTML<-1> = \</script>\HTML<-1> = \</head>\HTML<-1> = \<body>\HTML<-1> = \<div id="BANNIERE">\HTML<-1> = \<div id="titre">Etat de la Valorisation des Encours<br/></div>\HTML<-1> = \<div id="dateheure">le 14/12/2015 &agrave; 18:05:24</div></div>\HTML<-1> = \<div id="container">\HTML<-1> = \<table>\HTML<-1> = \<thead>\HTML<-1> = \<tr>\HTML<-1> = \<th colspan="4">Composant</th>\HTML<-1> = \<th colspan="2">OF</th>\HTML<-1> = \<th colspan="2">OF Lanc&eacute;</th>\HTML<-1> = \<th colspan="4">Pr&eacute;vu</th>\HTML<-1> = \<th colspan="4">R&eacute;el</th>\HTML<-1> = \</tr>\HTML<-1> = \<tr>\HTML<-1> = \<th>Type</th>\HTML<-1> = \<th>ABC</th>\HTML<-1> = \<th>Code</th>\HTML<-1> = \<th>D&eacute;signation</th>\HTML<-1> = \<th>No</th>\HTML<-1> = \<th>Etat</th>\HTML<-1> = \<th>No</th>\HTML<-1> = \<th>Qt&eacute;</th>\HTML<-1> = \<th>PU</th>\HTML<-1> = \<th>Co&ucirc;t</th>\HTML<-1> = \<th>Co&ucirc;t Prod</th>\HTML<-1> = \<th>No<br/>OF</th>\HTML<-1> = \<th>PU</th>\HTML<-1> = \<th>Co&ucirc;t</th>\HTML<-1> = \<th>Co&ucirc;t Prod</th>\HTML<-1> = \<th>No<br/>OF</th>\HTML<-1> = \</tr>\HTML<-1> = \</thead><tbody>\HTML<-1> = \<tr class="lig1"><td></td><td></td>\HTML<-1> = \<td>T370366-0204-A0</td><td></td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>76300</td><td align=right></td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right></td><td align=right></td><td align=right>0.00</td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="lig0"><td>MS</td><td></td>\HTML<-1> = \<td>1041</td><td>Bouchon AMORIM</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>76300</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>76300</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="ligtot"><td colspan="8">Total MS</td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \<tr class="lig1"><td>N</td><td></td>\HTML<-1> = \<td>0000750-R1052-0</td><td>Capsule R1052-0</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>76300</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>76300</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="lig0"><td>N</td><td></td>\HTML<-1> = \<td>6X75CL.DBT.SS.CR</td><td>CARTON DE 6 BTL DE 0.75</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>12743</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>12743</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="lig1"><td>N</td><td></td>\HTML<-1> = \<td>B01.001</td><td>Bouteille 0.75 all&eacute;g&eacute;e</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>76300</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>76300</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="lig0"><td>N</td><td></td>\HTML<-1> = \<td>P2E.EURO</td><td>Palette EURO<br/>80x120<br/>24kg &agrave; vide</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>130</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>130</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="ligtot"><td colspan="8">Total N</td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \<tr class="lig1"><td>P</td><td>2013</td>\HTML<-1> = \<td>U370018-0000B-1</td><td>PINOT GRIS<br/>QUALITE SYSTEM U<br/>MILLESIME 2013</td><td>3362</td><td>37</td><td>1</td><td>2</td><td align=right>573</td><td align=right></td><td align=right>0.00</td><td align=right></td><td align=right>574</td><td align=right>0</td><td align=right>0.00</td><td align=right></td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="ligtot"><td></td><td colspan="7">Total 2013</td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \</tr>\HTML<-1> = \<tr class="ligtot"><td colspan="8">Total P</td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \</tr>\HTML<-1> = \</tbody>\HTML<-1> = \<tfoot><tr><td colspan="8">Total G&eacute;n&eacute;ral </td><td></td><td></td><td align=right>0</td><td align=right>0</td><td></td><td></td><td align=right>0</td><td align=right>0</td>\HTML<-1> = \</tr><tr><td colspan="8"></td><td></td><td></td><td colspan="2" align=center>0</td><td></td><td></td><td colspan="2" align=center>0</td>\HTML<-1> = \</tr>\HTML<-1> = \</tfoot>\HTML<-1> = \</table>\HTML<-1> = \</div>\HTML<-1> = \</body>\HTML<-1> = \</html>\W$HTML.DATA = HTML**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000DFADEMO.FINANCIALS.DASHBOARD0c2SUBROUTINE DEMO.FINANCIALS.DASHBOARD** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*WEB$TITLE='Demo Company, Financial Picture'WEB.FORM.NAME='DEMO.FINANCIALS.DASHBOARD'W$TYPE='HTML'W$TITLE='Demo Financial Company'W$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.CONTROL' TO FILE ELSE STOPNOV15=ICONV('11-15-15','D')TODAY=DATE()IF TODAY > NOV15 THEN   TODAY=NOV15   TIME.DATE=OCONV(TIME(),'MTHS'):' ':OCONV(TODAY,'D4') END ELSE   TIME.DATE=TIMEDATE() ENDOTODAY=OCONV(TODAY,'D4-')TODAY.MO=OTODAY[1,2]+0TODAY.YYYY=OTODAY[7,4]IF INDEX(TIME.DATE,'CALCULATIONS THROUGH',1) THEN   * LAST CALCULATION WAS FOR END OF LAST YEAR   DASHBOARD.YYYY=TODAY.YYYY-1 END ELSE DASHBOARD.YYYY=TODAY.YYYYIF LEN(WIDGET.USER.DATA(1)) = 4 THEN   WRITE WIDGET.USER.DATA(1) ON FILE, 'DASHBOARD.YYYY' END ELSE   WIDGET.USER.DATA(1)=DASHBOARD.YYYY ENDCONVS=''LAST.YYYY=TODAY.YYYY-1LAST.EOM=ICONV(TODAY.MO:'-01-':TODAY.YYYY,'D')-1*** BUILD FRESH STATIC DATA IF A NEW RUN DATE*READ LAST.BUILT FROM FILE, 'LAST.STATIC.BUILD' ELSE LAST.BUILT=''IF LAST.BUILT <> DATE() THEN   CALL BUILD.DEMO.FINANCIAL.PICTURE(TODAY.YYYY,TODAY,LAST.EOM)   WRITE LAST.BUILT ON FILE, 'LAST.STATIC.BUILD' ENDREAD REC FROM FILE, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''** DEFAULT CONVERSIONS TO $FOR I = 4 TO 35   IF I < 29 OR I > 32 THEN      CONVS<I>='$'    END NEXT I* CHANGE THOSE THAT AREN'TCONVS<6>='%'; CONVS<10>='%'; CONVS<17>='%'; CONVS<24>='%'CONVS<12>='%'; CONVS<13>='%'; CONVS<14>='%'CONVS<19>='%'; CONVS<20>='%'; CONVS<21>='%'CONVS<26>='%'; CONVS<27>='%'; CONVS<28>='%'*MATWRITE WIDGET.USER.DATA ON FILE, 'TEST.LINK'*W$PRINTABLE=1W$PDFABLE=1OPEN '','WEB.FORMS' TO FILE.WEB.FORMS ELSE RETURNREAD HTML FROM FILE.WEB.FORMS, WEB.FORM.NAME ELSE HTML=''***USER.ID=G$USERID*W$TITLE:='  Demo Financials  -- last updated --  ':TIME.DATE**WRITE HTML ON FILE.WEB.FORMS, 'TEST.HTML'*** DYNAMIC VARIABLES**INSERT.FIELD=DB.REC<4>;  * CUSTOMER*IF INSERT.FIELD = '' THEN INSERT.FIELD='&nbsp;'*CALL SWAP(HTML,'~1~',INSERT.FIELD)FOR I = 1 TO 46   INSERT.FIELD=REC<I>IF INSERT.FIELD = '' THEN INSERT.FIELD=I   CONV=CONVS<I>   BEGIN CASE      CASE CONV = ''; NULL      CASE CONV = '$'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD2,$')      CASE CONV = '%'; INSERT.FIELD=OCONV(INSERT.FIELD+0,'MD1'):'%'      CASE 1; INSERT.FIELD=OCONV(INSERT.FIELD,CONV)   END CASE   IF INSERT.FIELD = '' THEN INSERT.FIELD='&nbsp;'   CALL SWAP(HTML,'~':I:'~',INSERT.FIELD) NEXT I   *W$TEXT.DATA=HTMLIF 0 THEN; *IF TODAY.MO = 1 THEN   W$INPUT.PROMPT<1>='As of Date'   W$INPUT.TYPE<1> = "SELECT"   W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(1)   W$INPUT.UDPOS<1> = 1   W$INPUT.BUTTON<1> = "Apply"   W$INPUT.SELVALS<1>=TODAY.YYYY-1:CHAR(253):TODAY.YYYY   W$INPUT.SELOPTS<1>='12-31-':TODAY.YYYY-1:CHAR(253):OCONV(DATE(),'D4-')   ITIME=ICONV(FIELD(TIME.DATE,' ',1),'MT')   NEXT.TIME=ITIME+1800;  * 30 MINUTES   IF ABS(TIME()-NEXT.TIME) < 300 THEN;  * WITHIN 5 MINUTES TELL LONGER      NEXT.TIME+=1800    END   REFRESH.TIME=' - Wont refresh until app. ':OCONV(NEXT.TIME,'MTH')   IF DASHBOARD.YYYY = TODAY.YYYY THEN      * DECEMBER WILL REQUIRE A RECALC      W$INPUT.SELOPTS<1,1>:=REFRESH.TIME    END ELSE      * TODAY WILL REQUIRE A RECALC      W$INPUT.SELOPTS<1,2>:=REFRESH.TIME    END   * ENDWRITE HTML ON FILE.WEB.FORMS, 'LAST.':WEB.FORM.NAMERETURNEND000551SUB.SC.LIB.PIE0c2SUBROUTINE SUB.SC.LIB.PIE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Pie Demo**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*IF INDEX(G$WIDGET.NAME,'Progs',1) THEN  PIE.CNT = "PROG"  W$TITLE = "Source Code: Programs by Library"END ELSE  PIE.CNT = "LINES"  W$TITLE = "Source Code: Lines by Library"ENDW$TYPE = "FC3DPIE"W$WIDTH = 1*IF G$QUERYMODE THEN RETURN*DIM LIB.FILES(3), PROGS(3), LINES(3), LIBS(3)*LIBS(1) = "MVDB.SUBS"LIBS(2) = "RSS.BP"LIBS(3) = "WBPD"*MAT PROGS = 0; MAT LINES = 0*TOT.LINES = 0 ; TOT.PROGS = 0FOR N = 1 TO 3  OPEN LIBS(N) TO LIB.FILES(N) ELSE STOP 201, LIBS(N)  W$PIE.LABELS<1,N> = LIBS(N)  SELECT LIB.FILES(N)  LOOP    READNEXT ID ELSE EXIT    PROGS(N) += 1    IF PIE.CNT # "PROG" THEN      READ REC FROM LIB.FILES(N), ID THEN        LINES(N) += DCOUNT(REC, @AM)      END    END  REPEAT  TOT.LINES += LINES(N)  TOT.PROGS += PROGS(N)  IF PIE.CNT = "PROG" THEN    W$PIE.VALUES<1,N> = PROGS(N)  END ELSE    W$PIE.VALUES<1,N> = LINES(N)  END NEXT N*W$PIE.CAPTION = "By Program File"IF PIE.CNT = "PROG" THEN  W$CHART.OPTIONS<-1> = "subCaption='":TOT.PROGS:" Total Programs'"  W$CHART.OPTIONS<-1> = "showValues='1'"END ELSE  W$CHART.OPTIONS<-1> = "subCaption='":OCONV(TOT.LINES,'MD,'):" Total Lines'"END*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000512SUB.DEMO.NET.INCOME.CHART0c2SUBROUTINE SUB.DEMO.NET.INCOME.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Net Income"W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''YEARS=REC<67>NET.INCOMES=REC<75>MAX.YEARS=DCOUNT(YEARS,CHAR(253))FIRST.YEAR=YEARS<1,1>CURRENT.YEAR=YEARS<1,MAX.YEARS>*W$BAR.CAPTION = "Net Income From ":FIRST.YEAR:' to ':CURRENT.YEARW$BAR.XMEMO = "Year"W$BAR.YMEMO = "Net Income"**MAX.INCOME=0FOR N = 1 TO MAX.YEARS  NET.INCOME=OCONV(REC<36-N>,'MD02')  IF NET.INCOME > MAX.INCOME THEN MAX.INCOME=NET.INCOME  YEAR=YEARS<1,N>  W$BAR.VALUES<1,N> = NET.INCOME  W$BAR.XLABELS<1,N> = YEARNEXT N* ROUND MAX INCOME UP TO THE NEXT 250000MAX.INCOME+=250000MAX.INCOME=INT(MAX.INCOME/250000) * 250000W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.INCOME:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'W$CHART.OPTIONS<-1>='forceDecimals="1"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'**RETURN000068REBUILD.FILES0c2FILE='SALES'; EVERY.NUM=6; GOSUB MOVE.ITFILE='AR'; EVERY.NUM=3; GOSUB MOVE.ITFILE='AP000277SUB.GRID.TEST0c2SUBROUTINE SUB.GRID.TEST** Copyright (c) 2010 SB, Inc. All rights reserved.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Untitled TABLE"W$TYPE = "TABLE"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN** Set up column labelsW$TABLE.COL.LABELS<1,1> = "Column 1"W$TABLE.COL.LABELS<1,2> = "Column 2"** Column justification = left, right, centerW$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "right"** Table RowsFOR ROW = 1 TO 5  W$TABLE.DATA<ROW,1> = ROW:",1"  W$TABLE.DATA<ROW,2> = ROW:",2"NEXT ROW** TotalsW$TABLE.TOTALS<1,1> = "2"W$TABLE.TOTALS<1,2> = "4"RETURN000255SUB.DEMO.DRILLDOWN0c2SUBROUTINE SUB.DEMO.DRILLDOWN** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Demo drill-down widget*INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "TEXT"W$TITLE = "Drilldown Widget"W$WIDTH = 3W$PRINTABLE = 1*IF G$QUERYMODE = 1 THEN RETURN*W$TEXT.DATA = "Source Widget: ":G$DD.REFERRERW$TEXT.DATA<-1> = " "W$TEXT.DATA<-1> = "Contents of WIDGET.USER.DATA:"W$TEXT.DATA<-1> = " "FOR X = 1 TO 100  IF WIDGET.USER.DATA(X) # "" THEN    W$TEXT.DATA<-1> = "WIDGET.USER.DATA(":X:") = ":WIDGET.USER.DATA(X)  ENDNEXT X*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000314SUB.PORTAL.SETUP.DOCUMENTATION0c2SUBROUTINE SUB.PORTAL.SETUP.DOCUMENTATION** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE** Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "Portal Setup Instructions"     ;* Title for widget title barW$TYPE = "HTML"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here*OPEN '','WEB.FORMS' TO FI.WEB.FORMS ELSE RETURNREAD WEB.FORM FROM FI.WEB.FORMS, 'PORTAL.SETUP.DOCUMENTATION' ELSE RETURNW$HTML.DATA=WEB.FORM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00552DSUB.PORTAL.SALES.REPORT.SETUP0c2SUBROUTINE SUB.PORTAL.SALES.REPORT.SETUP** DEFINE PARAMETERS FOR PORTAL SALES REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOP*W$TITLE = "Portal Sales Report Setup"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*EQUATE ACCOUNT TO WIDGET.USER.DATA(1)EQUATE REPORT.FILE TO WIDGET.USER.DATA(2)EQUATE SALE.DATE.DICT TO WIDGET.USER.DATA(3)EQUATE SALE.MONTH.DICT TO WIDGET.USER.DATA(4)EQUATE SALE.YEAR.DICT TO WIDGET.USER.DATA(5)EQUATE SALE.AMOUNT.DICT TO WIDGET.USER.DATA(6)EQUATE COST.OF.SALE.AMOUNT.DICT TO WIDGET.USER.DATA(7)EQUATE SALESMAN.DICT TO WIDGET.USER.DATA(8)EQUATE BRANCH.DICT TO WIDGET.USER.DATA(9)EQUATE REGION.DICT TO WIDGET.USER.DATA(10)EQUATE SALE.DATE.AMC TO WIDGET.USER.DATA(11)EQUATE SALE.AMOUNT.AMC TO WIDGET.USER.DATA(12)EQUATE SALE.AMOUNT.CONV TO WIDGET.USER.DATA(13)EQUATE SALE.AMOUNT.COOR TO WIDGET.USER.DATA(14)EQUATE COST.OF.SALE.AMOUNT.AMC TO WIDGET.USER.DATA(15)EQUATE COST.OF.SALE.AMOUNT.CONV TO WIDGET.USER.DATA(16)EQUATE COST.OF.SALE.AMOUNT.COOR TO WIDGET.USER.DATA(17)EQUATE SALESMAN.AMC TO WIDGET.USER.DATA(18)EQUATE SALESMAN.TFILE TO WIDGET.USER.DATA(19)EQUATE BRANCH.AMC TO WIDGET.USER.DATA(20)EQUATE BRANCH.TFILE TO WIDGET.USER.DATA(21)EQUATE REGION.AMC TO WIDGET.USER.DATA(22)EQUATE REGION.TFILE TO WIDGET.USER.DATA(23)OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE   MESSAGE='No Platform Type Defined'   GOTO MESSAGE.DISPLAY ENDFIRST.TIME=0IF G$SUBMITTED <> '1' THEN   IF PLATFORM = 'UV' OR PLATFORM = 'UD' THEN      OPEN '','UD.DICT.DASHBOARD.CLOSING.STATS' TO FI THEN         OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END      OPEN '','UD.DICT.SALES' TO FI THEN         OPEN 'DICT','PORTAL.SALES' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END      OPEN '','UD.DICT.AR' TO FI THEN         OPEN 'DICT','PORTAL.AR' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END      OPEN '','UD.DICT.AP' TO FI THEN         OPEN 'DICT','PORTAL.AP' TO DFI THEN            SELECT FI            LOOP               READNEXT ID ELSE ID='DONE'            UNTIL ID = 'DONE' DO               READ REC FROM FI, ID ELSE REC=''               IF REC <> '' THEN                  WRITE REC ON DFI, ID                END            REPEAT          END       END    END   MATREAD WIDGET.USER.DATA FROM FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ELSE      MAT WIDGET.USER.DATA = ''      FIRST.TIME=1    END   IF NOT(FIRST.TIME) THEN      GOSUB VALIDATE.PREVIOUS.INPUTS    END END ELSE   GOSUB VALIDATE.PREVIOUS.INPUTS   MATWRITE WIDGET.USER.DATA ON FI.MVDB.CONTROL, 'PORTAL.SALES.REPORT.SETUP' ENDGOSUB SET.PROMPTSRETURN*SET.PROMPTS:*W$INPUT.PROMPT<1> = "Sales File Account"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = ACCOUNT*W$INPUT.PROMPT<2> = "Name Of Sales File"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = REPORT.FILE*W$INPUT.PROMPT<3> = "Date Of Sale Dict Name"W$INPUT.TYPE<3> = 'TEXT'W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = SALE.DATE.DICT*W$INPUT.PROMPT<4> = "Month Of Sale Dict Name"W$INPUT.TYPE<4> = 'TEXT'W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = SALE.MONTH.DICT*W$INPUT.PROMPT<5> = "Year Of Sale Dict Name"W$INPUT.TYPE<5> = 'TEXT'W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = SALE.YEAR.DICT*W$INPUT.PROMPT<6> = "Amount Of Sale Dict Name"W$INPUT.TYPE<6> = 'TEXT'W$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = SALE.AMOUNT.DICT*W$INPUT.PROMPT<7> = "Cost Of Sale Dict Name"W$INPUT.TYPE<7> = 'TEXT'W$INPUT.UDPOS<7> = 7W$INPUT.DEFAULT<7> = COST.OF.SALE.AMOUNT.DICT*W$INPUT.PROMPT<8> = "Salesman Dict Name"W$INPUT.TYPE<8> = 'TEXT'W$INPUT.UDPOS<8> = 8W$INPUT.DEFAULT<8> = SALESMAN.DICT*W$INPUT.PROMPT<9> = "Branch Dict Name"W$INPUT.TYPE<9> = 'TEXT'W$INPUT.UDPOS<9> = 9W$INPUT.DEFAULT<9> = BRANCH.DICT*W$INPUT.PROMPT<10> = "Region Dict Name"W$INPUT.TYPE<10> = 'TEXT'W$INPUT.UDPOS<10> = 10W$INPUT.DEFAULT<10> = REGION.DICT*RETURN*VALIDATE.PREVIOUS.INPUTS:*MESSAGE=''BEGIN CASE   CASE PLATFORM = 'D3'      MD.TYPE='MD'   CASE PLATFORM = 'JB'      MD.TYPE='MD'   CASE 1      MD.TYPE='VOC'END CASEOPEN '',MD.TYPE TO FI.MD ELSE   MESSAGE='Unable to open ':MD.TYPE:' for validation purposes'   GOTO MESSAGE.DISPLAY ENDVALID.ACCOUNT=1IF ACCOUNT <> '' THEN**   EXECUTE "SET-FILE ":ACCOUNT:" ":MD.TYPE:' QFILE' CAPTURING DUMMY     QFILE.NAME='QFILE'   CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)   IF QFILE.NAME = '' THEN      MESSAGE<-1>=ACCOUNT:' is not a valid account!'      VALID.ACCOUNT=0    END**   IF PLATFORM = 'UD' THEN**      QFILE.NAME='QFILE'**      CALL CREATE.UD.QPOINTER(ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)**      IF QFILE.NAME = '' THEN**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END ELSE**      WRITE 'Q':@AM:ACCOUNT:@AM:MD.TYPE ON FI.MD, 'QFILE'**      VALID.ACCOUNT=1**      OPEN '','QFILE' TO FI.ACCOUNT.MD ELSE**         MESSAGE<-1>=ACCOUNT:' is not a valid account!'**         VALID.ACCOUNT=0**       END**    END END ELSE   VALID.ACCOUNT=0   MESSAGE<-1>='No Account defined!' ENDIF REPORT.FILE <> '' THEN   IF NOT(VALID.ACCOUNT) THEN      MESSAGE<-1>='Unable to verify ':REPORT.FILE:' file because account not properly defined!'      VALID.REPORT.FILE=0    END ELSE      VALID.REPORT.FILE=1      QFILE.NAME='QFILE'      CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)      IF QFILE.NAME = '' THEN         MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'         VALID.REPORT.FILE=0       END**      EXECUTE "SET-FILE ":ACCOUNT:" ":REPORT.FILE:' QFILE' CAPTURING DUMMY**       IF PLATFORM = 'UD' THEN**          QFILE.NAME='QFILE'**          CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)**          IF QFILE.NAME = '' THEN**             MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**             VALID.REPORT.FILE=0**           END**        END ELSE**         WRITE 'Q':@AM:ACCOUNT:@AM:REPORT.FILE ON FI.MD, 'QFILE'**         OPEN '','QFILE' TO FI.REPORT.FILE ELSE**            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'**            VALID.REPORT.FILE=0**          END**       END      IF VALID.REPORT.FILE THEN         HAVE.QFILE.REC=1         READ QFILE.REC FROM FI.MD, 'QFILE' ELSE            HAVE.QFILE.REC=0            MESSAGE<-1>='Unable to create QFILE pointer to ':ACCOUNT:' ':REPORT.FILE          END         IF HAVE.QFILE.REC THEN            WRITE QFILE.REC ON FI.MD, 'DASHBOARD.SALES.FILE'            OPEN 'DICT','DASHBOARD.SALES.FILE' TO FI.DICT.REPORT.FILE ELSE                MESSAGE<-1>='Unable to open DICT ':REPORT.FILE             END          END       END    END END ELSE   MESSAGE<-1>='No Sales Report file defined!' ENDIF SALE.DATE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Date Of Sale Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.DATE.DICT:' Because No Sales File!'    END ELSE      READ SALE.DATE.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.DATE.DICT ELSE         SALE.DATE.DICT.REC=''         MESSAGE<-1>=SALE.DATE.DICT:' Does Not Exist!'       END      IF SALE.DATE.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=SALE.DATE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF SALE.DATE.DICT.REC<7>[1,1] <> 'D' AND SALE.DATE.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               SALE.DATE.AMC=SALE.DATE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF SALE.DATE.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               SALE.DATE.AMC=SALE.DATE.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               SALE.DATE.AMC=SALE.DATE.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.DATE.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF SALE.AMOUNT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Sale Amount Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.AMOUNT.DICT:' Because No Sales File!'    END ELSE      READ SALE.AMOUNT.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.AMOUNT.DICT ELSE         SALE.AMOUNT.DICT.REC=''         MESSAGE<-1>=SALE.AMOUNT.DICT:' Does Not Exist!'       END      IF SALE.AMOUNT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=SALE.AMOUNT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=SALE.AMOUNT.DICT.REC<7>[1,2]               DICT.8.1.2=SALE.AMOUNT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               SALE.AMOUNT.AMC=SALE.AMOUNT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=SALE.AMOUNT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               SALE.AMOUNT.AMC=SALE.AMOUNT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               SALE.AMOUNT.AMC=SALE.AMOUNT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.AMOUNT.DICT:' Does Not Appear To Be An Amount!'          END       END    ENDIF COST.OF.SALE.AMOUNT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Cost of Sale Amount Dictionary Defined - Gross Profit and Margin reporting will not be possible'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":COST.OF.SALE.AMOUNT.DICT:' Because No Sales File!'    END ELSE      READ COST.OF.SALE.AMOUNT.DICT.REC FROM FI.DICT.REPORT.FILE, COST.OF.SALE.AMOUNT.DICT ELSE         COST.OF.SALE.AMOUNT.DICT.REC=''         MESSAGE<-1>=COST.OF.SALE.AMOUNT.DICT:' Does Not Exist!'       END      IF COST.OF.SALE.AMOUNT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=COST.OF.SALE.AMOUNT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=COST.OF.SALE.AMOUNT.DICT.REC<7>[1,2]               DICT.8.1.2=COST.OF.SALE.AMOUNT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               COST.OF.SALE.AMOUNT.AMC=COST.OF.SALE.AMOUNT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=COST.OF.SALE.AMOUNT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               COST.OF.SALE.AMOUNT.AMC=COST.OF.SALE.AMOUNT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               COST.OF.SALE.AMOUNT.AMC=COST.OF.SALE.AMOUNT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':COST.OF.SALE.AMOUNT.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF SALE.MONTH.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Month Of Sale Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.MONTH.DICT:' Because No Sales File!'    END ELSE      READ SALE.MONTH.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.MONTH.DICT ELSE         SALE.MONTH.DICT.REC=''         MESSAGE<-1>=SALE.MONTH.DICT:' Does Not Exist!'       END      IF SALE.MONTH.DICT.REC <> '' THEN         VALID.MONTH.DICT=1         DICT.TYPE=SALE.MONTH.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF SALE.MONTH.DICT.REC<7>[1,1] <> 'D' AND SALE.MONTH.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.MONTH.DICT=0                END               SALE.MONTH.AMC=SALE.MONTH.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF SALE.MONTH.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.MONTH.DICT=0                END               SALE.MONTH.AMC=SALE.MONTH.DICT.REC<2>            CASE 1               VALID.MONTH.DICT=0               SALE.MONTH.AMC=SALE.MONTH.DICT.REC<2>         END CASE         IF NOT(VALID.MONTH.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.MONTH.DICT:' Does Not Appear To Be A Date Month!'          END       END    END ENDIF SALE.YEAR.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Year Of Sale Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALE.YEAR.DICT:' Because No Sales File!'    END ELSE      READ SALE.YEAR.DICT.REC FROM FI.DICT.REPORT.FILE, SALE.YEAR.DICT ELSE         SALE.YEAR.DICT.REC=''         MESSAGE<-1>=SALE.YEAR.DICT:' Does Not Exist!'       END      IF SALE.YEAR.DICT.REC <> '' THEN         VALID.YEAR.DICT=1         DICT.TYPE=SALE.YEAR.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF SALE.YEAR.DICT.REC<7>[1,1] <> 'D' AND NOT(INDEX(SALE.YEAR.DICT.REC<8>,'D',1)) THEN                  VALID.YEAR.DICT=0                END               SALE.YEAR.AMC=SALE.YEAR.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               ATT2=SALE.YEAR.DICT.REC<2>               IF INDEX(ATT2,"'D",1) OR INDEX(ATT2,'"D',1) OR ATT2[1,1] = 'D' THEN                  VALID.YEAR.DICT=1                END ELSE                  VALID.YEAR.DICT=0                END            CASE 1               VALID.YEAR.DICT=0               SALE.YEAR.AMC=SALE.YEAR.DICT.REC<2>         END CASE         IF NOT(VALID.YEAR.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALE.YEAR.DICT:' Does Not Appear To Be A Date Year!'          END       END    END ENDIF SALESMAN.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Salesman Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":SALESMAN.DICT:' Because No Sales File!'    END ELSE      READ SALESMAN.DICT.REC FROM FI.DICT.REPORT.FILE, SALESMAN.DICT ELSE         SALESMAN.DICT.REC=''         MESSAGE<-1>=SALESMAN.DICT:' Does Not Exist!'       END      IF SALESMAN.DICT.REC <> '' THEN         VALID.SALESMAN.DICT=1         DICT.TYPE=SALESMAN.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF SALESMAN.DICT.REC<7>[1,1] <> 'T' AND SALESMAN.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.SALESMAN.DICT=0                END ELSE                  IF SALESMAN.DICT.REC<7>[1,1] = 'T' THEN                     SALESMAN.TFILE=SALESMAN.DICT.REC<7>                   END ELSE                     SALESMAN.TFILE=SALESMAN.DICT.REC<8>                   END                END               SALESMAN.AMC=SALESMAN.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(SALESMAN.DICT.REC<3>,'TRANS',1) THEN                  VALID.SALESMAN.DICT=0                END ELSE                  SALESMAN.TFILE=SALESMAN.DICT.REC<3>                END               SALE.SALESMAN.AMC=SALESMAN.DICT.REC<2>            CASE 1               VALID.SALESMAN.DICT=0               SALE.SALESMAN.AMC=SALESMAN.DICT.REC<2>         END CASE         IF NOT(VALID.SALESMAN.DICT) THEN            MESSAGE<-1>='Dictionary Item ':SALESMAN.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDIF BRANCH.DICT <> '' THEN   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":BRANCH.DICT:' Because No Sales File!'    END ELSE      READ BRANCH.DICT.REC FROM FI.DICT.REPORT.FILE, BRANCH.DICT ELSE         BRANCH.DICT.REC=''         MESSAGE<-1>=BRANCH.DICT:' Does Not Exist!'       END      IF BRANCH.DICT.REC <> '' THEN         VALID.BRANCH.DICT=1         DICT.TYPE=BRANCH.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF BRANCH.DICT.REC<7>[1,1] <> 'T' AND BRANCH.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.BRANCH.DICT=0                END ELSE                  IF BRANCH.DICT.REC<7>[1,1] = 'T' THEN                     BRANCH.TFILE=BRANCH.DICT.REC<7>                   END ELSE                     BRANCH.TFILE=BRANCH.DICT.REC<8>                   END                END               BRANCH.AMC=BRANCH.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(BRANCH.DICT.REC<3>,'TRANS',1) THEN                  VALID.BRANCH.DICT=0                END ELSE                  BRANCH.TFILE=BRANCH.DICT.REC<3>                END               SALE.BRANCH.AMC=BRANCH.DICT.REC<2>            CASE 1               VALID.BRANCH.DICT=0               SALE.BRANCH.AMC=BRANCH.DICT.REC<2>         END CASE         IF NOT(VALID.BRANCH.DICT) THEN            MESSAGE<-1>='Dictionary Item ':BRANCH.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDIF REGION.DICT <> '' THEN   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":REGION.DICT:' Because No Sales File!'    END ELSE      READ REGION.DICT.REC FROM FI.DICT.REPORT.FILE, REGION.DICT ELSE         REGION.DICT.REC=''         MESSAGE<-1>=REGION.DICT:' Does Not Exist!'       END      IF REGION.DICT.REC <> '' THEN         VALID.REGION.DICT=1         DICT.TYPE=REGION.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF REGION.DICT.REC<7>[1,1] <> 'T' AND REGION.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.REGION.DICT=0                END ELSE                  IF REGION.DICT.REC<7>[1,1] = 'T' THEN                     REGION.TFILE=REGION.DICT.REC<7>                   END ELSE                     REGION.TFILE=REGION.DICT.REC<8>                   END                END               REGION.AMC=REGION.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(REGION.DICT.REC<3>,'TRANS',1) THEN                  VALID.REGION.DICT=0                END ELSE                  REGION.TFILE=REGION.DICT.REC<3>                END               SALE.REGION.AMC=REGION.DICT.REC<2>            CASE 1               VALID.REGION.DICT=0               SALE.REGION.AMC=REGION.DICT.REC<2>         END CASE         IF NOT(VALID.REGION.DICT) THEN            MESSAGE<-1>='Dictionary Item ':REGION.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDCREATE.INDEXES=1IF MESSAGE = '' THEN   MESSAGE='Sales Report parameters properly defined!' END ELSE   IF INDEX(MESSAGE,'!',1) THEN      MESSAGE=INSERT(MESSAGE,1,0,0,'!!! ERRORS !!!')      CREATE.INDEXES=0    END ENDIF CREATE.INDEXES THEN   * CREATE PIPE DICTIONARY ITEM   IF PLATFORM = 'D3' OR PLATFORM = 'QM' OR PLATFORM = 'JB' THEN      PIPE='A'      PIPE<2>=0      PIPE<3>=' '      PIPE<8>='F;C|'      PIPE<9>='L'      PIPE<10>=1    END ELSE      PIPE='I'      PIPE<2>='"|"'      PIPE<4>='|'      PIPE<5>='1L'      PIPE<6>='S'    END   WRITE PIPE ON FI.DICT.REPORT.FILE, 'PIPE'   *   ** INDEX LOGIC   *   BEGIN CASE      CASE PLATFORM = 'D3'         INDEX.TEST='A':SALE.DATE.AMC:'(DY):':SALE.DATE.AMC:'(DM)'         READ FILE.DEF.REC FROM FI.DICT.REPORT.FILE, REPORT.FILE ELSE FILE.DEF.REC=''         IF FILE.DEF.REC <> '' AND NOT(INDEX(FILE.DEF.REC<8>,INDEX.TEST,1)) THEN            MESSAGE<-1>='Creating Indexes'            CMND1="CREATE-INDEX DASHBOARD.SALES.FILE A":SALE.DATE.AMC            EXECUTE CMND1 CAPTURING RESULT1            CMND2="CREATE-INDEX DASHBOARD.SALES.FILE ":INDEX.TEST            EXECUTE CMND2 CAPTURING RESULT2          END      CASE 1         EXECUTE "CREATE-INDEX DASHBOARD.SALES.FILE ":SALE.DATE.DICT CAPTURING RESULT1   END CASE ENDGOSUB MESSAGE.DISPLAYRETURN*MESSAGE.DISPLAY:*MAX.MSG=DCOUNT(MESSAGE,CHAR(254))W$HTML.DATA='<h3>':MESSAGE<1>IF MAX.MSG > 1 THEN   FOR MSG.NO = 2 TO MAX.MSG      W$HTML.DATA:='<br>':MESSAGE<MSG.NO>    NEXT MSG.NO ENDW$HTML.DATA:='</h3>'RETURNEND00099ASUB.SC.LIB.COL0c2    SUBROUTINE SUB.SC.LIB.COL* Changed by PORTBAS -> SUBROUTINE SUB.SC.LIB.PIE* @(#) SUB.SC.LIB.COL Ported to jBASE 17:55:32  08 JUL 2015** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Pie Demo**#MAKE# RL $OPTIONS D3    INCLUDE WBPD MVDB.INCLUDE*    W$TITLE = "Source Code: Lines by Program"    W$TYPE = "FCBAR2D"    W$WIDTH = 2*    IF G$QUERYMODE THEN RETURN*    IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "1"    IF WIDGET.USER.DATA(2) = "" THEN WIDGET.USER.DATA(2) = "1"    N = WIDGET.USER.DATA(1)*    IF WIDGET.USER.DATA(2) = "1" THEN        CNT.TYPE = "LINES"    END ELSE        CNT.TYPE = "BYTES"    END*    W$BAR.LABELS<1> = "Lines by Program"*    DIM LIB.FILES(3), LIBS(3)*    LIBS(1) = "RSS.BP"    LIBS(2) = "WBPD"    LIBS(3) = "MVDB.SUBS"*    W$TITLE := " (":LIBS(N):")"*    TOT.LINES = 0 ; TOT.PROGS = 0    OPEN LIBS(N) TO LIB.FILES(N) ELSE STOP 201, LIBS(N)    SELECT LIB.FILES(N)    LOOP        READNEXT ID ELSE EXIT        READ REC FROM LIB.FILES(N), ID ELSE REC = ""        IF CNT.TYPE = "LINES" THEN            LINES = DCOUNT(REC, @AM)        END ELSE            LINES = LEN(REC)        END        W$BAR.XLABELS<1,-1> = ID        W$BAR.VALUES<1,-1> = LINES        TOT.PROGS += 1        TOT.LINES += LINES    REPEAT*    IF TOT.PROGS > 0 THEN        AVG = INT( TOT.LINES / TOT.PROGS )    END ELSE AVG = 0*    W$BAR.XMEMO = "Programs"    IF CNT.TYPE = "LINES" THEN        W$BAR.YMEMO = "Lines of Code"    END ELSE        W$BAR.YMEMO = "Bytes of Code"    END    W$BAR.TREND.BEG = AVG    W$BAR.TREND.OPTS = "color='20FF20' thickness='3' showOnTop='1'"*    W$CHART.HEIGHT = 200 + 8 * TOT.PROGS    W$CHART.OPTIONS<-1> = 'numDivLines="3"'*    W$BAR.CAPTION = "In Program File ":LIBS(N)*    W$INPUT.PROMPT<1> = "Program File"    W$INPUT.TYPE<1> = "SELECT"    W$INPUT.SELOPTS<1> = "RSS Feeds (RSS.BP)":@VM:"Includes (WBPD)":@VM:"Widget Subs (MVDB.SUBS)"    W$INPUT.SELVALS<1> = "1":@VM:"2":@VM:"3"    W$INPUT.DEFAULT<1> = WIDGET.USER.DATA(1)    W$INPUT.UDPOS<1> = 1      ;* WIDGET.USER.DATA(1)*    W$INPUT.PROMPT<2> = "Count"    W$INPUT.TYPE<2> = "SELECT"    W$INPUT.SELOPTS<2> = "Lines of code":@VM:"Bytes of code"    W$INPUT.SELVALS<2> = "1":@VM:"2"    W$INPUT.DEFAULT<2> = WIDGET.USER.DATA(2)    W$INPUT.UDPOS<2> = 2      ;* WIDGET.USER.DATA(2)    W$INPUT.BUTTON = "Go"*    INCLUDE WBPD SOURCE.VIEW.ICON*    RETURN000708SUB.DEMO.SS.COL0c2SUBROUTINE SUB.DEMO.SS.COL** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Single Series Column Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Monthly Unit Sales"W$TYPE = "FCCOLUMN2D"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "2D"BEGIN CASE  CASE WIDGET.USER.DATA(1) = "2D"    W$TYPE = "FCCOLUMN2D"  CASE WIDGET.USER.DATA(1) = "3D"    W$TYPE = "FCCOLUMN3D"  CASE WIDGET.USER.DATA(1) = "BAR"    W$TYPE = "FCBAR2D"  CASE WIDGET.USER.DATA(1) = "AREA2D"    W$TYPE = "FCAREA2D"  CASE 1    W$TYPE = WIDGET.USER.DATA(1)END CASE*W$BAR.CAPTION = "Revenue by Branch for Period 2008-08"W$BAR.XMEMO = "Branch"W$BAR.YMEMO = "Sales Revenue"*UNITS = ""UNITS<1> = "15177"UNITS<2> = "11700"UNITS<3> = "12833"UNITS<4> = "13529"UNITS<5> = "21953"UNITS<6> = "35792"UNITS<7> = "35202"UNITS<8> = "28206"UNITS<9> = "23168"UNITS<10> = "42657"UNITS<11> = "35595"UNITS<12> = "28328"UNITS<13> = "297674"UNITS<14> = "26111"UNITS<15> = "243295"UNITS<16> = "323846"UNITS<17> = "42615"UNITS<18> = "-29"UNITS<19> = "38787"UNITS<20> = "71023"UNITS<21> = "130106"*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = UNITS<N>*  W$BAR.XLABELS<1,N> = OCONV(ICONV(N:"/1",'D'),'DMA')[1,3]  W$BAR.XLABELS<1,N> = N  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"  W$FW.DD.UD.POS<1,N,1> = 1  W$FW.DD.UD.VAL<1,N,1> = UNITS<N>  W$FW.DD.UD.POS<1,N,2> = 2  W$FW.DD.UD.VAL<1,N,2> = NNEXT N*W$INPUT.PROMPT = "Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "2D Column":@VM:"3D Column":@VM:"Bar Chart":@VM:"2D Area Chart"W$INPUT.SELVALS = "2D":@VM:"3D":@VM:"BAR":@VM:"AREA2D"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000B92SUB.DEMO.MAP.USA0c2SUBROUTINE SUB.DEMO.MAP.USA** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: US Map demonstration* 6-1-15 ZUMASYS CHANGE MAP ID DELIMITER FROM * TO #**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - States by Alphabet"W$TYPE = "USAMAP"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'READ STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ''CONVERT "," TO @VM IN STATE.NAMES*W$CHART.OPTIONS<-1> = 'animation="0"'W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'W$CHART.OPTIONS<-1> = 'legendShadow="1"'W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'*IF WIDGET.USER.DATA(1) # "" THEN  * This is a drill-down run on this widget - we are now to display info for a specific state  OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'  EXECUTE 'SELECT MVDB.MAP.DATA WITH NAME = "':WIDGET.USER.DATA(2):'"' CAPTURING JUNK  N = 0  LOOP    READNEXT ID ELSE EXIT    READ REC FROM F.MVDB.MAP.DATA, ID THEN      N += 1      NAME = REC<2>*6-1-15*      W$MAP.IDS<1,N> = FIELD( ID, '*', 2 )      W$MAP.IDS<1,N> = FIELD( ID, '#', 2 ); *6-1-15      W$MAP.VALUES<1,N> = (SEQ(REC<2>[1,1]) - SEQ('A')) + 1      W$MAP.VALUE.TOOLTEXT<1,N> = NAME      W$FW.DD.WIDGET<1,N> = "Drilldown Demo"      W$FW.DD.UD.POS<1,N,1> = 1*6-1-15*      W$FW.DD.UD.VAL<1,N,1> = FIELD(ID,'*',1)      W$FW.DD.UD.VAL<1,N,1> = FIELD(ID,'#',1); *6-1-15*      W$FW.DD.UD.POS<1,N,2> = 2      W$FW.DD.UD.VAL<1,N,2> = ID      W$FW.DD.UD.POS<1,N,3> = 3      W$FW.DD.UD.VAL<1,N,3> = WIDGET.USER.DATA(2)      W$FW.DD.UD.POS<1,N,4> = 4      W$FW.DD.UD.VAL<1,N,4> = REC<2>    END  REPEAT  W$LINK.LABEL<1,1> = "Return to USA Map"  W$LINK.LOCATION<1,1> = "C"  W$LINK.UD.POS<1,1> = 1  W$LINK.UD.VAL<1,1> = ""  W$LINK.ICON<1,1> = "arrow_left.png"  W$LINK.ICON.TXT<1,1> = "Back to US Map"  *  W$LINK.LABEL<1,2> = "Return to USA Map"  W$LINK.LOCATION<1,2> = "1"  W$LINK.UD.POS<1,2> = 1  W$LINK.UD.VAL<1,2> = ""  *  W$TITLE = "Demo - ":WIDGET.USER.DATA(1):" Counties by Alphabet"END ELSE ;* National map display  STATE.CNT = DCOUNT( STATE.NAMES<1>, @VM )  FOR N = 1 TO STATE.CNT    W$MAP.IDS<1,N> = STATE.NAMES<1,N>    W$MAP.VALUES<1,N> = (SEQ(STATE.NAMES<1,N>[1,1]) - SEQ('A')) + 1    W$MAP.VALUE.TOOLTEXT<1,N> := STATE.NAMES<2,N>:' (':STATE.NAMES<1,N>:')'    W$MAP.VALUE.DD<1,N> = 1 ;* Allow drill-down  NEXT NEND*W$MAP.RANGE.NAME<1,1> = "Early in Alphabet"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "10"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Middle of Alphabet"W$MAP.RANGE.LOW<1,2> = "10"W$MAP.RANGE.HIGH<1,2> = "18"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Late in Alphabet"W$MAP.RANGE.LOW<1,3> = "18"W$MAP.RANGE.HIGH<1,3> = "27"W$MAP.RANGE.COLOR<1,3> = "RED"*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000355SUB.EMAILED.REPORT0c2SUBROUTINE SUB.EMAILED.REPORT** Dashboard Widget*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEEQU REPORT.ID TO WIDGET.USER.DATA(1)EMAILED.REPORT=''IF REPORT.ID = '' THEN   EMAILED.REPORT='No report id found' END ELSE   OPEN '','MVDB.EMAILED.HTML' TO F.MVDB.EMAILED.HTML ELSE      EMAILED.REPORT='No MVDB.EMAILED.HTML file on system'    END   IF EMAILED.REPORT = '' THEN      READ EMAILED.REPORT FROM F.MVDB.EMAILED.HTML, REPORT.ID ELSE         EMAILED.REPORT='No report data found for ':REPORT.ID       END    END ENDW$TYPE='TEXT'W$TITLE='View TEXT report'IF INDEX(EMAILED.REPORT,'HTML',1) THEN   W$TYPE='HTML'   W$TITLE='View HTML report' ENDW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)IF G$QUERYMODE THEN RETURNW$PRINTABLE=1W$PDFABLE=1W$TEXT.DATA=EMAILED.REPORTRETURNEND000C87SUB.MAP.VARIABLE0c2SUBROUTINE SUB.MAP.VARIABLE** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Variable Map* 6-1-15 ZUMASYS CHANGE MAP.DATA DELIMITER TO #** Modified by Peter Schellenbach of Zumasys 06-08-15:*  Changed test of ENUM after EXECUTE to test SYSTEM(11) instead.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Variable Map"W$TYPE = "MAP:World"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "World"*OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'*W$CHART.OPTIONS<-1> = 'animation="0"'W$CHART.OPTIONS<-1> = 'showShadow="1"'* 10-17-16 deprecated * W$CHART.OPTIONS<-1> = 'showBevel="1"'W$CHART.OPTIONS<-1> = 'legendShadow="1"'W$CHART.OPTIONS<-1> = 'legendAllowDrag="1"'*LAST.WTYPE = ""SELOPT.MAX = 0SELOPTX = 1EXECUTE \SSELECT MVDB.MAP.DATA BY NAME BY A1\ RETURNING ENUM CAPTURING ETXT*PJS 06-08-15*IF ENUM[1,3]="404" THENIF SYSTEM(11) THEN ; *PJS 06-08-15* LOOP  READNEXT ID ELSE ID="\\EOF" UNTIL ID="\\EOF" DO*6-1-15*  WTYPE = FIELD(ID,"*",1)  WTYPE = FIELD(ID,"#",1); *6-1-15  IF WTYPE # LAST.WTYPE THEN    SELOPT.MAX += 1    W$INPUT.SELOPTS<1,SELOPT.MAX> = WTYPE    IF WTYPE = WIDGET.USER.DATA(1) THEN SELOPTX = SELOPT.MAX    LAST.WTYPE = WTYPE  END REPEATEND*IF WIDGET.USER.DATA(2) = "NEXT" AND SELOPTX < SELOPT.MAX THEN SELOPTX += 1 WIDGET.USER.DATA(1) = W$INPUT.SELOPTS<1,SELOPTX>ENDIF WIDGET.USER.DATA(2) = "PREV" AND SELOPTX > 1 THEN SELOPTX -= 1 WIDGET.USER.DATA(1) = W$INPUT.SELOPTS<1,SELOPTX>ENDWIDGET.USER.DATA(2) = ""*EXECUTE \SSELECT MVDB.MAP.DATA BY NAME BY A1\ RETURNING ENUM CAPTURING ETXTMAPX = 0*PJS 06-08-15*IF ENUM[1,3]="404" THENIF SYSTEM(11) THEN ; *PJS 06-08-15* LOOP  READNEXT ID ELSE ID="\\EOF" UNTIL ID="\\EOF" DO*6-1-15*  WTYPE = FIELD(ID,"*",1)  WTYPE = FIELD(ID,"#",1); *6-1-15*  IF WTYPE # LAST.WTYPE THEN    W$INPUT.SELOPTS<1,-1> = WTYPE    LAST.WTYPE = WTYPE  END  IF WTYPE = WIDGET.USER.DATA(1) THEN    READ I FROM F.MVDB.MAP.DATA,ID THEN      MAPX += 1*6-1-15*      W$MAP.IDS<1,MAPX> = FIELD(ID,'*',2)      W$MAP.IDS<1,MAPX> = FIELD(ID,'#',2); *6-1-15      W$MAP.VALUES<1,MAPX> = (SEQ(I<1>[1,1]) - (SEQ('A')-1))      W$MAP.VALUE.TOOLTEXT<1,MAPX> := I<2>:' (':I<1>:')'    END  END REPEATEND*W$TYPE = "MAP:":WIDGET.USER.DATA(1)W$MAP.RANGE.NAME<1,1> = "Early in Alphabet"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "10"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Middle of Alphabet"W$MAP.RANGE.LOW<1,2> = "10"W$MAP.RANGE.HIGH<1,2> = "18"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Late in Alphabet"W$MAP.RANGE.LOW<1,3> = "18"W$MAP.RANGE.HIGH<1,3> = "27"W$MAP.RANGE.COLOR<1,3> = "RED"*W$INPUT.PROMPT = "Map Of"W$INPUT.TYPE = "SELECT"W$INPUT.SELVALS = W$INPUT.SELOPTSW$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*IF SELOPTX > 1 THEN W$LINK.LABEL<1,-1> = "Prev Map" W$LINK.LOCATION<1,-1> = 23 W$LINK.UD.POS<1,-1> = 2 W$LINK.UD.VAL<1,-1> = "PREV"END*IF SELOPTX < SELOPT.MAX THEN W$LINK.LABEL<1,-1> = "Next Map" W$LINK.LOCATION<1,-1> = 14 W$LINK.UD.POS<1,-1> = 2 W$LINK.UD.VAL<1,-1> = "NEXT"END*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN000261UV.EXECUTE.STACKED.CMNDS0c2SUBROUTINE UV.EXECUTE.STACKED.CMNDS(STACKED.1,STACKED.2,NUM.RETURNED,REPORT)*REPORT=''NUM.RETURNED=1IF STACKED.1 <> '' THEN   EXECUTE STACKED.1 RTNLIST STACKED.LIST CAPTURING NUM.RETURNED   NUM.RETURNED=TRIM(NUM.RETURNED<2>)   NUM.RETURNED=FIELD(NUM.RETURNED,' ',1)   IF NOT(NUM.RETURNED) THEN RETURN   EXECUTE STACKED.2 PASSLIST STACKED.LIST CAPTURING REPORT END ELSE   EXECUTE STACKED.2 CAPTURING REPORT ENDIF INDEX(REPORT,'0 records',1) THEN   IF DCOUNT(REPORT,@AM) < 5 THEN      NUM.RETURNED=0      REPORT=''    END ENDCONVERT '$,' TO '' IN REPORTRETURNEND000FCCSUB.DEMO.MS.COL0c2SUBROUTINE SUB.DEMO.MS.COL** Copyright (c) 2010 SB, Inc. All rights reserved.* Description: Multi Series Column Chart Demonstration**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Demo - Monthly Unit Sales"W$TYPE = "FCMSCOLUMN2D"W$WIDTH = 2*IF G$QUERYMODE THEN RETURN*IF WIDGET.USER.DATA(1) = "" THEN WIDGET.USER.DATA(1) = "2D"BEGIN CASE  CASE WIDGET.USER.DATA(1) = "2D"    W$TYPE = "FCMSCOLUMN2D"  CASE WIDGET.USER.DATA(1) = "3D"    W$TYPE = "FCMSCOLUMN3D"  CASE WIDGET.USER.DATA(1) = "BAR"    W$TYPE = "FCMSBAR2D"  CASE WIDGET.USER.DATA(1) = "AREA2D"    W$TYPE = "FCMSAREA2D"  CASE WIDGET.USER.DATA(1) = "LINE"    W$TYPE = "FCMSLINE"  CASE WIDGET.USER.DATA(1) = "STACKEDAREA"    W$TYPE = "FCSTACKEDAREA2D"  CASE WIDGET.USER.DATA(1) = "STACKEDCOLUMN2D"    W$TYPE = "FCSTACKEDCOLUMN2D"  CASE WIDGET.USER.DATA(1) = "STACKEDCOLUMN3D"    W$TYPE = "FCSTACKEDCOLUMN3D"  CASE WIDGET.USER.DATA(1) = "STACKEDBAR"    W$TYPE = "FCSTACKEDBAR2D"  CASE 1    W$TYPE = WIDGET.USER.DATA(1):"?"END CASE*W$BAR.LABELS<1> = "Regular"W$BAR.LABELS<2> = "Mid-Grade"W$BAR.LABELS<3> = "Premium"W$BAR.LABELS<4> = "Ethanol"*W$BAR.CAPTION = "Monthly Sales by Type"W$BAR.XMEMO = "Month"W$BAR.YMEMO = "Sales (USD)"*SALES = ""SALES<1> = "28452536"SALES<2> = "31208425"SALES<3> = "30245519"SALES<4> = "40425111"SALES<5> = "36515188"SALES<6> = "39144100"SALES<7> = "41655215"SALES<8> = "36615152"SALES<9> = "43944161"SALES<10> = "42251594"SALES<11> = "48833151"SALES<12> = "50122415"*TOT.SALES = SUM(SALES)*LARGEST = 0LARGEST.N = 0FOR N = 1 TO 12  W$BAR.VALUES<1,N> = OCONV(SALES<N>*.4,'MD02')  W$BAR.VALUES<2,N> = OCONV(SALES<N>*.3,'MD02')  W$BAR.VALUES<3,N> = OCONV(SALES<N>*.1,'MD02')  W$BAR.VALUES<4,N> = OCONV(SALES<N>*.2,'MD02')  W$BAR.XLABELS<1,N> = OCONV(N*30-15,'DMA')[1,3]  IF SALES<N> > LARGEST THEN LARGEST = SALES<N> ; LARGEST.N = N NEXT NDD.SALES = OCONV(TOT.SALES*.4,'MD02')DD.SALES<2> = OCONV(TOT.SALES*.3,'MD02') DD.SALES<3> = OCONV(TOT.SALES*.1,'MD02') DD.SALES<4> = OCONV(TOT.SALES*.2,'MD02') **FOR N = 1 TO 4**  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"**  W$FW.DD.UD.POS<1,N,1> = 1**  W$FW.DD.UD.VAL<1,N,1> = DD.SALES<N>**  W$FW.DD.UD.POS<1,N,2> = 2**  W$FW.DD.UD.VAL<1,N,2> = W$BAR.LABELS<N> **NEXT N VAL.CNTR = 0FOR N = 1 TO 12**  W$FW.DD.WIDGET<1,N> = "Drilldown Demo"**  W$FW.DD.UD.POS<1,N,1> = 1**  W$FW.DD.UD.VAL<1,N,1>=W$BAR.XLABELS<1,N>  FOR NN = 1 TO 4     VAL.CNTR+=1     W$FW.DD.WIDGET<1,VAL.CNTR> = "Drilldown Demo"     W$FW.DD.UD.POS<1,VAL.CNTR,1>=1     W$FW.DD.UD.VAL<1,VAL.CNTR,1>=VAL.CNTR     W$FW.DD.UD.POS<1,VAL.CNTR,2>=2**     W$FW.DD.UD.VAL<1,VAL.CNTR,2> = W$BAR.VALUES<NN,N>     W$FW.DD.UD.VAL<1,VAL.CNTR,2> = 'MS.VALUE'     W$FW.DD.UD.POS<1,VAL.CNTR,3> = 3**     W$FW.DD.UD.VAL<1,VAL.CNTR,3>=W$BAR.XLABELS<1,N>     W$FW.DD.UD.VAL<1,VAL.CNTR,3>='MS.LABEL'     W$FW.DD.UD.POS<1,VAL.CNTR,4> = 4     W$FW.DD.UD.VAL<1,VAL.CNTR,4>=W$BAR.LABELS<NN>   NEXT NN**  W$FW.DD.UD.POS<1,N,2> = 2**  W$FW.DD.UD.VAL<1,N,2> = W$BAR.LABELS<N>NEXT NMAX.VALUE = OCONV((LARGEST * .4)*1.1,'MD02') W$CHART.OPTIONS<-1> = "yAxisMaxValue='":MAX.VALUE:"'"*W$BAR.LABEL.OPTS<1> = "showValues='0'"W$BAR.LABEL.OPTS<2> = "showValues='0'"W$BAR.LABEL.OPTS<3> = "showValues='0'"W$BAR.LABEL.OPTS<4> = "showValues='0'"*IF W$TYPE = "FCMSAREA2D" THEN  W$BAR.LABEL.OPTS<1> := " areaAlpha='50'"  W$BAR.LABEL.OPTS<2> := " areaAlpha='70'"  W$BAR.LABEL.OPTS<3> := " areaAlpha='90'"  W$BAR.LABEL.OPTS<4> := " areaAlpha='40'"END*W$INPUT.PROMPT = "Chart Style"W$INPUT.TYPE = "SELECT"W$INPUT.SELOPTS = "2D Column":@VM:"3D Column":@VM:"Bar Chart":@VM:"2D Area Chart":@VM:"Line Chart":@VM:"Stacked Area Chart":@VM:"2D Stacked Column Chart":@VM:"3D Stacked Column Chart":@VM:"Stacked Bar Chart"W$INPUT.SELVALS = "2D":@VM:"3D":@VM:"BAR":@VM:"AREA2D":@VM:"LINE":@VM:"STACKEDAREA":@VM:"STACKEDCOLUMN2D":@VM:"STACKEDCOLUMN3D":@VM:"STACKEDBAR"W$INPUT.UDPOS = 1W$INPUT.DEFAULT = WIDGET.USER.DATA(1)*INCLUDE WBPD SOURCE.VIEW.ICON*RETURN0012C2SUB.PDF.CONFIG0c2SUBROUTINE SUB.PDF.CONFIG** Copyright (c) 2016 Zumasys, Inc. All rights reserved.* Description: PDF configuration widget.*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "PDF Configuration"   ;* Title for widget title barW$TYPE = "HTML"                 ;* Filled in by editorW$WIDTH = 2                     ;* Full width (1=1/3, 2=2/3, 3=3/3)W$PDFABLE = 1                   ;* Enable conversion to PDF*IF G$QUERYMODE THEN RETURN*OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TEXT.INFO = "Unable to open MVDB.CONTROL"  RETURNENDW$TEXT.INFO = "" ;* No widget content at this point.*IF SYSTEM(38)<1> = 4 THEN isWindows = 1 ELSE isWindows = 0IF isWindows THEN DIRSEP = '\' ELSE DIRSEP = '/'*READ SETTINGS.REC FROM F.MVDB.CONTROL, 'PDF.SETTINGS' ELSE SETTINGS.REC = ""IF G$SUBMITTED = 1 THEN  * Save PDF settings  FOR N = 1 TO 4    SETTINGS.REC<N> = WIDGET.USER.DATA(N)  NEXT N  OK = 0  IF SETTINGS.REC<1> THEN    * Validate NATIVE.CONTENT file        *D3*     OPEN 'DICT NATIVE.CONTENT' TO D.NATIVE.CONTENT ELSE      EXECUTE 'CREATE-FILE DICT NATIVE.CONTENT 1' CAPTURING OUTPUT    END    OPEN 'DICT NATIVE.CONTENT' TO D.NATIVE.CONTENT THEN      READ QPTR FROM D.NATIVE.CONTENT,'NATIVE.CONTENT' ELSE QPTR = 'Q'      IF QPTR = 'Q' OR QPTR = 'q' THEN        IF isWindows THEN MKDIR = 'cmd.exe /c mkdir' ELSE MKDIR = 'mkdir -p -m 775'                EXECUTE '!':MKDIR:' "':SETTINGS.REC<3>:'"' CAPTURING OUTPUT        QPTR='Q'        IF isWindows THEN QPTR<3> = 'dos:':SETTINGS.REC<3> ELSE QPTR<3>='unix:':SETTINGS.REC<3>        WRITE QPTR ON D.NATIVE.CONTENT,'NATIVE.CONTENT'      END      READ QPTR FROM D.NATIVE.CONTENT,'NATIVE.CONTENT' THEN        IF QPTR<1> = 'Q' OR QPTR<1> = 'q' THEN          IF isWindows THEN            OK = OCONV(QPTR<3>,'MCU') = OCONV('dos:':SETTINGS.REC<3>,'MCU')          END ELSE            OK = (QPTR<3> = 'unix:':SETTINGS.REC<3>)          END          IF NOT(OK) THEN            W$HTML.DATA = "MV file 'NATIVE.CONTENT' does not refer to PDF directory ":SETTINGS.REC<3>:"!"          END        END      END    END    IF OK THEN      OPEN 'NATIVE.CONTENT' TO F.NATIVE.CONTENT ELSE OK = 0    END  END ELSE    OK = 1  END  IF OK THEN    WRITE SETTINGS.REC ON F.MVDB.CONTROL, 'PDF.SETTINGS'    W$HTML.DATA = "Settings saved."  END ELSE    IF W$HTML.DATA = "" THEN W$HTML.DATA = "Unable to open PDF directory!"  ENDEND ELSE  * Initialize default settings  IF SETTINGS.REC<1> = "" THEN    SETTINGS.REC<1> = 0 ;* PDF generation is disabled  END  IF SETTINGS.REC<2> = "" THEN    IF isWindows THEN      * Windows      EXEPATH = 'C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe'      CMDLINE = 'cmd.exe /c ""':EXEPATH:'" "[INPUT_FILE]" "[OUTPUT_FILE]""'      SETTINGS.REC<2> = CMDLINE    END ELSE      * Linux      EXEPATH = '/usr/local/bin/wkhtmltopdf'      SETTINGS.REC<2> = EXEPATH:' [INPUT_FILE] [OUTPUT_FILE]'    END  END  IF SETTINGS.REC<3> = "" THEN    IF isWindows THEN      * Windows      NATIVE.DIR = "C:\ProgramData\MVDashboard\NativeContent"      SETTINGS.REC<3> = NATIVE.DIR    END ELSE      * Linux      NATIVE.DIR = "/tmp/mvdashboard/nativecontent"      SETTINGS.REC<3> = NATIVE.DIR    END  END  IF SETTINGS.REC<4> = "" THEN    SETTINGS.REC<4> = 0 ;* delete generated files immediately  ENDEND*W$INPUT.PROMPT<1> = "Enable PDF generation"W$INPUT.TYPE<1> = "SELECT"W$INPUT.SELOPTS<1> = "No":@VM:"Yes"W$INPUT.SELVALS<1> = "0":@VM:"1"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = SETTINGS.REC<1>*W$INPUT.PROMPT<2> = "PDF converter command"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2TMP = SETTINGS.REC<2>CALL SWAP(TMP, '"', '&quot;')W$INPUT.DEFAULT<2> = TMPW$INPUT.PARAMS<2> = 'size="100"'**D3 requires directory to store PDF files; other platforms use DIR type fileW$INPUT.PROMPT<3> = "Directory for PDF files"W$INPUT.TYPE<3> = "TEXT"W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = SETTINGS.REC<3>W$INPUT.PARAMS<3> = 'size="100"'*W$INPUT.PROMPT<4> = "Delete PDF files after"W$INPUT.TYPE<4> = "SELECT"W$INPUT.UDPOS<4> = 4W$INPUT.SELOPTS<4,1> = "immediately"; W$INPUT.SELVALS<4,1> = 0W$INPUT.SELOPTS<4,2> = "1 day"; W$INPUT.SELVALS<4,2> = 1W$INPUT.SELOPTS<4,3> = "2 days"; W$INPUT.SELVALS<4,3> = 2W$INPUT.SELOPTS<4,4> = "3 days"; W$INPUT.SELVALS<4,4> = 3W$INPUT.SELOPTS<4,5> = "4 days"; W$INPUT.SELVALS<4,5> = 4W$INPUT.SELOPTS<4,6> = "5 days"; W$INPUT.SELVALS<4,6> = 5W$INPUT.SELOPTS<4,7> = "6 days"; W$INPUT.SELVALS<4,7> = 6W$INPUT.SELOPTS<4,8> = "7 days"; W$INPUT.SELVALS<4,8> = 7W$INPUT.SELOPTS<4,9> = "14 days"; W$INPUT.SELVALS<4,9> = 14W$INPUT.SELOPTS<4,10> = "30 days"; W$INPUT.SELVALS<4,10> = 30W$INPUT.SELOPTS<4,11> = "never"; W$INPUT.SELVALS<4,11> = 999999W$INPUT.DEFAULT<4> = SETTINGS.REC<4>*W$INPUT.BUTTON = "Save"*RETURN0037E6SUB.PORTAL.AR.REPORT.SETUP0c2SUBROUTINE SUB.PORTAL.AR.REPORT.SETUP** DEFINE PARAMETERS FOR PORTAL AR REPORT**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEOPEN '','MVDB.SUBS' TO FI.MVDB.SUBS ELSE STOP*W$TITLE = "Portal AR Report Setup"W$TYPE = "HTML"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*EQUATE ACCOUNT TO WIDGET.USER.DATA(1)EQUATE REPORT.FILE TO WIDGET.USER.DATA(2)EQUATE DUE.DATE.DICT TO WIDGET.USER.DATA(3)EQUATE DATE.PAID.DICT TO WIDGET.USER.DATA(4)EQUATE INVOICE.AMT.DICT TO WIDGET.USER.DATA(5)EQUATE BALANCE.DICT TO WIDGET.USER.DATA(6)EQUATE DUE.DATE.AMC TO WIDGET.USER.DATA(8)EQUATE DATE.PAID.AMC TO WIDGET.USER.DATA(9)EQUATE INVOICE.AMT.AMC TO WIDGET.USER.DATA(10)EQUATE INVOICE.AMT.CONV TO WIDGET.USER.DATA(11)EQUATE INVOICE.AMT.COOR TO WIDGET.USER.DATA(12)EQUATE BALANCE.AMC TO WIDGET.USER.DATA(13)EQUATE BALANCE.CONV TO WIDGET.USER.DATA(14)EQUATE BALANCE.COOR TO WIDGET.USER.DATA(15)EQUATE CUSTOMER.DICT TO WIDGET.USER.DATA(16)EQUATE CUSTOMER.AMC TO WIDGET.USER.DATA(17)EQUATE CUSTOMER.TFILE TO WIDGET.USER.DATA(18)*OPEN '','MVDB.CONTROL' TO FI.MVDB.CONTROL ELSE STOP 201,'MVDB.CONTROL'READ PLATFORM FROM FI.MVDB.CONTROL, 'PLATFORM' ELSE   MESSAGE='No Platform Type Defined'   GOTO MESSAGE.DISPLAY ENDFIRST.TIME=0IF G$SUBMITTED <> '1' THEN   MATREAD WIDGET.USER.DATA FROM FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ELSE      MAT WIDGET.USER.DATA = ''      FIRST.TIME=1    END   IF NOT(FIRST.TIME) THEN      GOSUB VALIDATE.PREVIOUS.INPUTS    END END ELSE   GOSUB VALIDATE.PREVIOUS.INPUTS   MATWRITE WIDGET.USER.DATA ON FI.MVDB.CONTROL, 'PORTAL.AR.REPORT.SETUP' ENDGOSUB SET.PROMPTSRETURN*SET.PROMPTS:*W$INPUT.PROMPT<1> = "AR File Account"W$INPUT.TYPE<1> = "TEXT"W$INPUT.UDPOS<1> = 1W$INPUT.DEFAULT<1> = ACCOUNT*W$INPUT.PROMPT<2> = "Name Of AR File"W$INPUT.TYPE<2> = "TEXT"W$INPUT.UDPOS<2> = 2W$INPUT.DEFAULT<2> = REPORT.FILE*W$INPUT.PROMPT<3> = "Due Date Dict Name"W$INPUT.TYPE<3> = 'TEXT'W$INPUT.UDPOS<3> = 3W$INPUT.DEFAULT<3> = DUE.DATE.DICT*W$INPUT.PROMPT<4> = "Date Paid Dict Name"W$INPUT.TYPE<4> = 'TEXT'W$INPUT.UDPOS<4> = 4W$INPUT.DEFAULT<4> = DATE.PAID.DICT*W$INPUT.PROMPT<5> = "Invoice Amount Dict Name"W$INPUT.TYPE<5> = 'TEXT'W$INPUT.UDPOS<5> = 5W$INPUT.DEFAULT<5> = INVOICE.AMT.DICT*W$INPUT.PROMPT<6> = "Remaining Balance Dict Name"W$INPUT.TYPE<6> = 'TEXT'W$INPUT.UDPOS<6> = 6W$INPUT.DEFAULT<6> = BALANCE.DICT*W$INPUT.PROMPT<7> = "Customer Dict Name"W$INPUT.TYPE<7> = 'TEXT'W$INPUT.UDPOS<7> = 16W$INPUT.DEFAULT<7> = CUSTOMER.DICT*RETURN*VALIDATE.PREVIOUS.INPUTS:*MESSAGE=''BEGIN CASE   CASE PLATFORM = 'D3'      MD.TYPE='MD'   CASE PLATFORM = 'JB'      MD.TYPE='MD'   CASE 1      MD.TYPE='VOC'END CASEOPEN '',MD.TYPE TO FI.MD ELSE   MESSAGE='Unable to open ':MD.TYPE:' for validation purposes'   GOTO MESSAGE.DISPLAY ENDVALID.ACCOUNT=1IF ACCOUNT <> '' THEN**   EXECUTE "SET-FILE ":ACCOUNT:" ":MD.TYPE:' QFILE' CAPTURING DUMMY    VALID.ACCOUNT=1    QFILE.NAME='QFILE'    CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)    IF QFILE.NAME = '' THEN       MESSAGE<-1>=ACCOUNT:' is not a valid account!'       VALID.ACCOUNT=0     END**    IF PLATFORM = 'UD' THEN**       QFILE.NAME='QFILE'**       CALL CREATE.UD.QPOINTER(ACCOUNT,MD.TYPE,QFILE.NAME,FI.ACCOUNT.MD)**       IF QFILE.NAME = '' THEN**          MESSAGE<-1>=ACCOUNT:' is not a valid account!'**          VALID.ACCOUNT=0**        END**     END ELSE**       WRITE 'Q':@AM:ACCOUNT:@AM:MD.TYPE ON FI.MD, 'QFILE'**       OPEN '','QFILE' TO FI.ACCOUNT.MD ELSE**          MESSAGE<-1>=ACCOUNT:' is not a valid account!'**          VALID.ACCOUNT=0**        END**    END END ELSE   VALID.ACCOUNT=0   MESSAGE<-1>='No Account defined!' ENDIF REPORT.FILE <> '' THEN   IF NOT(VALID.ACCOUNT) THEN      MESSAGE<-1>='Unable to verify ':REPORT.FILE:' file because account not properly defined!'      VALID.REPORT.FILE=0    END ELSE      VALID.REPORT.FILE=1      QFILE.NAME='QFILE'      CALL CREATE.QPOINTER(PLATFORM,FI.MD,ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)      IF QFILE.NAME = '' THEN         MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'         VALID.REPORT.FILE=0       END**      EXECUTE "SET-FILE ":ACCOUNT:" ":REPORT.FILE:' QFILE' CAPTURING DUMMY***       IF PLATFORM = 'UD' THEN***          QFILE.NAME='QFILE'***          CALL CREATE.UD.QPOINTER(ACCOUNT,REPORT.FILE,QFILE.NAME,FI.REPORT.FILE)***          IF QFILE.NAME = '' THEN***            MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'***            VALID.REPORT.FILE=0***          END***        END ELSE***          WRITE 'Q':@AM:ACCOUNT:@AM:REPORT.FILE ON FI.MD, 'QFILE'***          OPEN '','QFILE' TO FI.REPORT.FILE ELSE***             MESSAGE<-1>=REPORT.FILE:' is not a valid file in the ':ACCOUNT:' account!'***             VALID.REPORT.FILE=0***           END***        END      IF VALID.REPORT.FILE THEN         HAVE.QFILE.REC=1         READ QFILE.REC FROM FI.MD, 'QFILE' ELSE            HAVE.QFILE.REC=0            MESSAGE<-1>='Unable to create QFILE pointer to ':ACCOUNT:' ':REPORT.FILE          END         IF HAVE.QFILE.REC THEN            WRITE QFILE.REC ON FI.MD, 'DASHBOARD.AR.FILE'            OPEN 'DICT','DASHBOARD.AR.FILE' TO FI.DICT.REPORT.FILE ELSE                MESSAGE<-1>='Unable to open DICT ':REPORT.FILE             END          END       END    END END ELSE   MESSAGE<-1>='No AR Report file defined!' ENDIF DUE.DATE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Due Date Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DUE.DATE.DICT:' Because No AR File!'    END ELSE      READ DUE.DATE.DICT.REC FROM FI.DICT.REPORT.FILE, DUE.DATE.DICT ELSE         DUE.DATE.DICT.REC=''         MESSAGE<-1>=DUE.DATE.DICT:' Does Not Exist!'       END      IF DUE.DATE.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DUE.DATE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DUE.DATE.DICT.REC<7>[1,1] <> 'D' AND DUE.DATE.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DUE.DATE.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DUE.DATE.AMC=DUE.DATE.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DUE.DATE.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF DATE.PAID.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Date Paid Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":DATE.PAID.DICT:' Because No AR File!'    END ELSE      READ DATE.PAID.DICT.REC FROM FI.DICT.REPORT.FILE, DATE.PAID.DICT ELSE         DATE.PAID.DICT.REC=''         MESSAGE<-1>=DATE.PAID.DICT:' Does Not Exist!'       END      IF DATE.PAID.DICT.REC <> '' THEN         VALID.DATE.DICT=1         DICT.TYPE=DATE.PAID.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                IF DATE.PAID.DICT.REC<7>[1,1] <> 'D' AND DATE.PAID.DICT.REC<8>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF DATE.PAID.DICT.REC<3>[1,1] <> 'D' THEN                  VALID.DATE.DICT=0                END               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>            CASE 1               VALID.DATE.DICT=0               DATE.PAID.AMC=DATE.PAID.DICT.REC<2>         END CASE         IF NOT(VALID.DATE.DICT) THEN            MESSAGE<-1>='Dictionary Item ':DATE.PAID.DICT:' Does Not Appear To Be A Date!'          END       END    END ENDIF INVOICE.AMT.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Invoice Amount Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":INVOICE.AMT.DICT:' Because No AR File!'    END ELSE      READ INVOICE.AMT.DICT.REC FROM FI.DICT.REPORT.FILE, INVOICE.AMT.DICT ELSE         INVOICE.AMT.DICT.REC=''         MESSAGE<-1>=INVOICE.AMT.DICT:' Does Not Exist!'       END      IF INVOICE.AMT.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=INVOICE.AMT.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=INVOICE.AMT.DICT.REC<7>[1,2]               DICT.8.1.2=INVOICE.AMT.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=INVOICE.AMT.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               INVOICE.AMT.AMC=INVOICE.AMT.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':INVOICE.AMT.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF BALANCE.DICT = '' THEN   IF VALID.REPORT.FILE THEN      MESSAGE<-1>='No Balance Dictionary Defined!'    END END ELSE   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":BALANCE.DICT:' Because No AR File!'    END ELSE      READ BALANCE.DICT.REC FROM FI.DICT.REPORT.FILE, BALANCE.DICT ELSE         BALANCE.DICT.REC=''         MESSAGE<-1>=BALANCE.DICT:' Does Not Exist!'       END      IF BALANCE.DICT.REC <> '' THEN         VALID.AMOUNT.DICT=1         DICT.TYPE=BALANCE.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'                DICT.7.1.2=BALANCE.DICT.REC<7>[1,2]               DICT.8.1.2=BALANCE.DICT.REC<8>[1,2]               IF DICT.7.1.2 <> 'MD' AND DICT.7.1.2 <> 'MR' AND DICT.8.1.2 <> 'MD' AND DICT.8.1.2 <> 'MR' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               DICT.3.1.2=BALANCE.DICT.REC<3>[1,2]               IF DICT.3.1.2 <> 'MR' AND DICT.3.1.2 <> 'MD' THEN                  VALID.AMOUNT.DICT=0                END               BALANCE.AMC=BALANCE.DICT.REC<2>            CASE 1               VALID.AMOUNT.DICT=0               BALANCE.AMC=BALANCE.DICT.REC<2>         END CASE         IF NOT(VALID.AMOUNT.DICT) THEN            MESSAGE<-1>='Dictionary Item ':BALANCE.DICT:' Does Not Appear To Be An Amount!'          END       END    END ENDIF CUSTOMER.DICT <> '' THEN   IF NOT(VALID.REPORT.FILE) THEN      MESSAGE<-1>="Cant Verify Dict ":CUSTOMER.DICT:' Because No AR File!'    END ELSE      READ CUSTOMER.DICT.REC FROM FI.DICT.REPORT.FILE, CUSTOMER.DICT ELSE         CUSTOMER.DICT.REC=''         MESSAGE<-1>=CUSTOMER.DICT:' Does Not Exist!'       END      IF CUSTOMER.DICT.REC <> '' THEN         VALID.CUSTOMER.DICT=1         DICT.TYPE=CUSTOMER.DICT.REC<1>         BEGIN CASE            CASE DICT.TYPE = 'A' OR DICT.TYPE = 'S'               IF CUSTOMER.DICT.REC<7>[1,1] <> 'T' AND CUSTOMER.DICT.REC<8>[1,1] <> 'T' THEN                  VALID.CUSTOMER.DICT=0                END ELSE                  IF CUSTOMER.DICT.REC<7>[1,1] = 'T' THEN                     CUSTOMER.TFILE=CUSTOMER.DICT.REC<7>                   END ELSE                     CUSTOMER.TFILE=CUSTOMER.DICT.REC<8>                   END                END               CUSTOMER.AMC=CUSTOMER.DICT.REC<2>            CASE DICT.TYPE = 'D' OR DICT.TYPE = 'I' OR DICT.TYPE = 'C'               IF INDEX(CUSTOMER.DICT.REC<3>,'TRANS',1) THEN                  VALID.CUSTOMER.DICT=0                END ELSE                  CUSTOMER.TFILE=CUSTOMER.DICT.REC<3>                END            CASE 1               VALID.CUSTOMER.DICT=0         END CASE         IF NOT(VALID.CUSTOMER.DICT) THEN            MESSAGE<-1>='Dictionary Item ':CUSTOMER.DICT:' May Not Be Correct'            MESSAGE:=" Because It Doesn't Translate To Another File For The Full Name"          END       END    END ENDCREATE.INDEXES=1IF MESSAGE = '' THEN   MESSAGE='AR Report parameters properly defined!' END ELSE   IF INDEX(MESSAGE,'!',1) THEN      MESSAGE=INSERT(MESSAGE,1,0,0,'!!! ERRORS !!!')      CREATE.INDEXES=0    END ENDIF CREATE.INDEXES THEN   * CREATE PIPE DICTIONARY ITEM   IF PLATFORM = 'D3' OR PLATFORM = 'QM' OR PLATFORM = 'JB' THEN      PIPE='A'      PIPE<2>=0      PIPE<3>=' '      PIPE<8>='F;C|'      PIPE<9>='L'      PIPE<10>=1    END ELSE      PIPE='I'      PIPE<2>='"|"'      PIPE<4>='|'      PIPE<5>='1L'      PIPE<6>='S'    END   WRITE PIPE ON FI.DICT.REPORT.FILE, 'PIPE'   *   ** INDEX LOGIC   *   BEGIN CASE      CASE PLATFORM = 'D3'         INDEX.TEST='A':DUE.DATE.AMC:'(DY):':DUE.DATE.AMC:'(DM)'         READ FILE.DEF.REC FROM FI.DICT.REPORT.FILE, REPORT.FILE ELSE FILE.DEF.REC=''         IF FILE.DEF.REC <> '' AND NOT(INDEX(FILE.DEF.REC<8>,INDEX.TEST,1)) THEN            MESSAGE<-1>='Creating Indexes'            CMND1="CREATE-INDEX DASHBOARD.AR.FILE A":DUE.DATE.AMC            EXECUTE CMND1 CAPTURING RESULT1            CMND2="CREATE-INDEX DASHBOARD.AR.FILE ":INDEX.TEST            EXECUTE CMND2 CAPTURING RESULT2          END      CASE 1         EXECUTE "CREATE-INDEX DASHBOARD.AR.FILE ":DUE.DATE.DICT CAPTURING RESULT1   END CASE ENDGOSUB MESSAGE.DISPLAYRETURN*MESSAGE.DISPLAY:*MAX.MSG=DCOUNT(MESSAGE,CHAR(254))W$HTML.DATA='<h3>':MESSAGE<1>IF MAX.MSG > 1 THEN   FOR MSG.NO = 2 TO MAX.MSG      W$HTML.DATA:='<br>':MESSAGE<MSG.NO>    NEXT MSG.NO ENDW$HTML.DATA:='</h3>'RETURNEND0003F4SUB.DEMO.DAYS.TO.PAY.CHART0c2SUBROUTINE SUB.DEMO.DAYS.TO.PAY.CHART***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Average Days To Pay"W$TYPE = "FCCOLUMN3D"W$WIDTH = 2W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''YEARS=REC<67>MAX.YEARS=DCOUNT(YEARS,CHAR(253))FIRST.YEAR=0*W$BAR.XMEMO = "Year (drill down for detail)"W$BAR.YMEMO = "Average Days to Pay"*N=0*FOR NN = 1 TO MAX.YEARS  AVERAGE.DAYS=REC<47-NN>  YEAR=YEARS<1,NN>  IF NOT(FIRST.YEAR) THEN FIRST.YEAR=YEAR  CURRENT.YEAR=YEAR  W$BAR.VALUES<1,NN> = AVERAGE.DAYS  W$BAR.XLABELS<1,NN> = YEAR  W$FW.DD.WIDGET<1,NN>='DEMO DAYS TO PAY PIE'  W$FW.DD.UD.POS<1,NN,1>=1  W$FW.DD.UD.VAL<1,NN,1>=YEARNEXT NN*W$BAR.CAPTION = "Average Days to Pay From ":FIRST.YEAR:' to ':CURRENT.YEAR*RETURN000341PORTAL.SHOW.LAST.UPDATED0c2SUBROUTINE PORTAL.SHOW.LAST.UPDATED(CALC.TYPE)INCLUDE WBPD MVDB.INCLUDEIF CALC.TYPE = 'SALES' THEN   OPEN 'DICT','DASHBOARD.CLOSING.STATS' TO DICT.FI ELSE RETURN END ELSE   OPEN 'DICT','DASHBOARD.BALANCES' TO DICT.FI ELSE RETURN ENDREAD LAST.UPDATED FROM DICT.FI, '*LAST.UPDATED.':CALC.TYPE ELSE RETURNCUR.DATE=DATE()CUR.TIME=TIME()CUR.TIME=FIELD(CUR.TIME,'.',1)CUR.TIME=STR('0',5-LEN(CUR.TIME)):CUR.TIMECUR.DATE.TIME=CUR.DATE:CUR.TIMEDELTA.DATE.TIME=CUR.DATE.TIME-LAST.UPDATED** IF LAST 5 MINUTES THEN NO MESSAGE NEEDED*IF DELTA.DATE.TIME < 300 THEN   W$TITLE=W$TITLE:' - Updated in Last 5 Minutes'   RETURN END*LAST.DATE=LAST.UPDATED[1,5]LAST.TIME=LAST.UPDATED[6,9]APPEND.IT=' - Last Updated ':OCONV(LAST.DATE,'D4-'):' at ':OCONV(LAST.TIME,'MTH')W$TITLE=W$TITLE:APPEND.ITRETURN0007C4SUB.DEMO.ANNUAL.SALES.BY.REP0c2SUBROUTINE SUB.DEMO.ANNUAL.SALES.BY.REP***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN3D"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''REVENUE.OR.GP=WIDGET.USER.DATA(1)YEAR=WIDGET.USER.DATA(2)MONTH=WIDGET.USER.DATA(3)VAL.TYPE='$'DRILLDOWN.WIDGET=''DRILLDOWN.TYPE=''BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE=YEAR:' Sales By Sales Rep'      W$BAR.YMEMO = "Sales"      SALES.AMTS=REC<48>   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE=YEAR:' Gross Profit By Sales Rep'      W$BAR.YMEMO = "Gross Profit"      SALES.AMTS=REC<49>END CASE*REPS=REC<47>LOCATE YEAR IN REC<67> SETTING YEAR.SVM ELSE YEAR.SVM=1**MAX.SALES.AMT=0N=0FIRST.YEAR=''MAX.REPS=DCOUNT(REPS,CHAR(253))FOR NN = 1 TO MAX.REPS   REP=REPS<1,NN>   SALES.AMT=SUM(SALES.AMTS<1,NN,YEAR.SVM>)   SALES.AMT=OCONV(SALES.AMT,'MD02')   IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT   W$BAR.VALUES<1,NN> = SALES.AMT   W$BAR.XLABELS<1,NN> = REP   W$FW.DD.WIDGET<1,NN> = "DEMO MONTHLY SALES BY REP"   W$FW.DD.UD.POS<1,NN,1> = 1   W$FW.DD.UD.VAL<1,NN,1> = WIDGET.USER.DATA(1); * REVENUE OR GP   W$FW.DD.UD.POS<1,NN,2> = 2   W$FW.DD.UD.VAL<1,NN,2> = YEAR   W$FW.DD.UD.POS<1,NN,3> = 3   W$FW.DD.UD.VAL<1,NN,3> = REPNEXT NNW$BAR.XMEMO = "Sales Rep (drilldown for ":W$BAR.YMEMO:" by month)"* ROUND MAX AMOUNT UP TO THE NEXT 250000MAX.SALES.AMT+=250000MAX.SALES.AMT=INT(MAX.SALES.AMT/250000) * 250000W$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'RETURN0004C7SUB.PORTAL.DAYS.TO.PAY.PIE0c2SUBROUTINE SUB.PORTAL.DAYS.TO.PAY.PIE**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FC2DPIE"W$WIDTH = 3W$TITLE = 'Chart - Days To Pay '*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEYEAR=WIDGET.USER.DATA(1)OPEN 'DICT','DASHBOARD.BALANCES' TO FI.DICT ELSE RETURNREAD STATS.REC FROM FI.DICT, '*CURRENT.AR.STATS' ELSE RETURNWRITE 'READ' ON FI.DICT, 'DEBUG'LOCATE YEAR IN STATS.REC<6> SETTING YEAR.POS ELSE RETURNWRITEV YEAR.POS ON FI.DICT, 'DEBUG', 2NUMBERS=STATS.REC<7,YEAR.POS>WRITEV NUMBERS ON FI.DICT, 'DEBUG', 3TOT.NUMBERS=SUM(NUMBERS)TOT.NUMBERS=TOT.NUMBERS-NUMBERS<1,1,1>WRITEV TOT.NUMBERS ON FI.DICT, 'DEBUG', 4W$TITLE:=YEARDAYS.TYPES='0 - 30 Days,31 - 60 Days,61 - 90 Days,Over 90 Days'CONVERT ',' TO CHAR(253) IN DAYS.TYPESMAX.DAYS.TYPES=DCOUNT(DAYS.TYPES,CHAR(253))FOR DAYS.CNTR = 1 TO MAX.DAYS.TYPES   NUMBER=NUMBERS<1,1,DAYS.CNTR+1>   PCT=INT(NUMBER * 1000/TOT.NUMBERS + .5)   W$PIE.LABELS<1,DAYS.CNTR>=DAYS.TYPES<1,DAYS.CNTR>   W$PIE.VALUES<1,DAYS.CNTR>=(PCT/10) NEXT DAYS.CNTRW$PIE.CAPTION='Days To Pay By Period For ':YEAR***RETURN00060ASUB.USER.AUTH0c2SUBROUTINE SUB.USER.AUTH(USERID,PASSWORD,MODE,VALID,MESSAGE,MAT USER.ITEM)** Custom user authentication subroutine. Authenticate user from the USERS file.** Input Values:*  USERID - User ID entered by the user on the login form*  PASSWORD - Password entered by the user on the login form*  MODE - "AUTH" - User is logging in, authorize.*       - "READ" - User is already authorized, just provide the USER.ITEM*                  Ignore PASSWORD.*                  VALID and MESSAGE will be ignored by caller.* * Output values*  VALID - 1=User authenticated, 0=User NOT authenticated*  MESSAGE - Alternative Message to display when user is NOT authenticated.*  MAT USER.ITEM - Dashboard user information*INCLUDE WBPD FI.MVDB.USERS** USER.ITEM values that may be populated by this program:** EQU USER.DEFAULT.DB   TO USER.ITEM(2)* EQU USER.NAME         TO USER.ITEM(3)* EQU USER.ROLE         TO USER.ITEM(6)*MAT USER.ITEM = ""*OPEN '','DM,USERS,' TO F.USERS ELSE  MESSAGE = "Unable to open DM,USERS, file."  VALID = 0  RETURNENDREAD UREC FROM F.USERS, USERID ELSE  VALID = 0  RETURNENDIF MODE = "AUTH" THEN  IF PASSWORD # "" THEN EPWD = ICONV( PASSWORD, 'UC' ) ELSE EPWD = ""END ELSE  EPWD = "" ; UREC<7> = "" ;* Make them match since we're not really authenticatingENDIF EPWD = UREC<7> THEN  VALID = 1  USER.DEFAULT.DB = "Chart Demo"  USER.NAME = UREC<1>  IF UREC<2> = "DBADMIN" THEN    USER.ROLE = "Administrator"  END ELSE USER.ROLE = "User"  RETURNEND ELSE  VALID = 0ENDRETURN000403SUB.DEMO.SALES.PERCENTS0c2SUBROUTINE SUB.DEMO.SALES.PERCENTS***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCMSCOLUMN3D"W$WIDTH = 3W$PDFABLE = 1*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEOPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''W$BAR.LABELS<1>='Parts'W$BAR.LABELS<2>='Services'W$BAR.CAPTION='YTD Percentage of Sales by Type'W$BAR.XMEMO='Year'W$BAR.YMEMO='Percent of Sales'*YEARS=REC<38>PART.AMTS=REC<40>PART.PCTS=REC<41>SERVICE.AMTS=REC<42>SERVICE.PCTS=REC<43>MAX.YEARS=DCOUNT(YEARS,CHAR(253))**FOR YEAR.CNTR = 1 TO MAX.YEARS   W$BAR.XLABELS<1,YEAR.CNTR>=YEARS<1,YEAR.CNTR>   W$BAR.VALUES<1,YEAR.CNTR>=OCONV(PART.PCTS<1,YEAR.CNTR>,'MD1')   W$BAR.VALUES<2,YEAR.CNTR>=OCONV(SERVICE.PCTS<1,YEAR.CNTR>,'MD1') NEXT YEAR.CNTRW$CHART.OPTIONS<-1>='decimals="1"'W$CHART.OPTIONS<-1>='forceDecimals="1"'RETURNEND00078BSUB.DEMO.MONTHLY.SALES.BY.REP0c2SUBROUTINE SUB.DEMO.MONTHLY.SALES.BY.REP***#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FCCOLUMN2D"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEMONTHS='Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREVENUE.OR.GP=WIDGET.USER.DATA(1)YEAR=WIDGET.USER.DATA(2)REP=WIDGET.USER.DATA(3)BEGIN CASE   CASE REVENUE.OR.GP = 'REVENUES'      W$TITLE=YEAR:' Monthly Sales For Rep: ':REP      W$BAR.YMEMO = "Sales"      READ ANNUAL.REC FROM FILE.CONTROL, 'SALES.':YEAR ELSE ANNUAL.REC=''      LOCATE REP IN ANNUAL.REC<1> SETTING REP.POS ELSE REP.POS=1      SALES.AMTS=ANNUAL.REC<2,REP.POS>      MAX.ROUNDER=250000   CASE REVENUE.OR.GP = 'GROSSPROFIT'      W$TITLE=YEAR:' Monthly Gross Profits For Rep: ':REP      W$BAR.YMEMO = "Gross Profits"      READ ANNUAL.REC FROM FILE.CONTROL, 'GPS.':YEAR ELSE ANNUAL.REC=''      LOCATE REP IN ANNUAL.REC<1> SETTING REP.POS ELSE REP.POS=1      SALES.AMTS=ANNUAL.REC<2,REP.POS>      MAX.ROUNDER=50000END CASE*MAX.MOS=DCOUNT(SALES.AMTS,CHAR(252))MAX.SALES.AMT=0FIRST.MOS=''FOR NN = 1 TO MAX.MOS   MONTH=FIELD(MONTHS,',',NN)   SALES.AMT=SALES.AMTS<1,1,NN>   SALES.AMT=OCONV(SALES.AMT,'MD02')   IF SALES.AMT > MAX.SALES.AMT THEN MAX.SALES.AMT=SALES.AMT   W$BAR.VALUES<1,NN> = SALES.AMT   W$BAR.XLABELS<1,NN> = MONTHNEXT NNW$BAR.XMEMO = "Month"* ROUND MAX AMOUNT UP TO THE NEXT MAX.ROUNDERMAX.SALES.AMT+=MAX.ROUNDERMAX.SALES.AMT=INT(MAX.SALES.AMT/MAX.ROUNDER) * MAX.ROUNDERW$CHART.OPTIONS<-1>='yAxisMaxValue="':MAX.SALES.AMT:'"'W$CHART.OPTIONS<-1>='decimals="2"'W$CHART.OPTIONS<-1>='DecimalPrecision="2"'W$CHART.OPTIONS<-1>='divLineDecimalPrecision="2"'W$CHART.OPTIONS<-1>='limitsDecimalPrecision="2"'W$CHART.OPTIONS<-1>='formatNumberScale="1"'RETURN001DF6SUB.MW.CODE.FACTORY0c2SUBROUTINE SUB.MW.CODE.FACTORY** Copyright (c) 2010 SB, Inc. All rights reserved.** Dashboard Widget*INCLUDE WBPD MVDB.INCLUDE*W$TITLE = "Mobile Web Code Factory"W$TYPE = "HTML"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$HTML.DATA = '<form action="/dbc/MVDB.MAIN" method="GET">'W$HTML.DATA<-1> = '<input type="hidden" name="udview" value="':G$WIDGET.NAME:'" />'*NSELECTED = "" ; TSELECTED = "" ; FSELECTED = ""CODE.TEXT = ""IF WIDGET.USER.DATA(1) # WIDGET.USER.DATA(100) THEN  TMP1 = WIDGET.USER.DATA(1)  TMP100 = WIDGET.USER.DATA(100)  MAT WIDGET.USER.DATA = ""  WIDGET.USER.DATA(1) = TMP1  WIDGET.USER.DATA(100) = TMP100ENDW$HTML.DATA<-1> = '<table width="100%">'BEGIN CASE  CASE WIDGET.USER.DATA(1) = "N"    NSELECTED = "selected"    GOSUB TYPE.SELECTOR    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos2" value="2" />'    W$HTML.DATA<-1> = 'Nav Labels (comma-separated):</td><td><input type="text" name="udval2" value="':WIDGET.USER.DATA(2):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos3" value="3" />'    W$HTML.DATA<-1> = 'Nav Links (comma-separated):</td><td><input type="text" name="udval3" value="':WIDGET.USER.DATA(3):'" /></td></tr>'    W$HTML.DATA<-1> = '</table>'    *    IF WIDGET.USER.DATA(2) # "" THEN      CODE.TEXT = 'P$NAV.OPTS = ""'      VARNAME = "P$NAV.LABEL" ; LIST = WIDGET.USER.DATA(2)      GOSUB MAKE.CODE      VARNAME = "P$NAV.LINK" ; LIST = WIDGET.USER.DATA(3)      GOSUB MAKE.CODE    END    W$HTML.DATA<-1> = '<br /><input type="submit" value="Make Code" />'  CASE WIDGET.USER.DATA(1) = "T"    TSELECTED = "selected"    GOSUB TYPE.SELECTOR    *    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos2" value="2" />'    W$HTML.DATA<-1> = 'Column Headings (comma-separated):</td><td><input type="text" name="udval2" value="':WIDGET.USER.DATA(2):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos3" value="3" />'    W$HTML.DATA<-1> = 'Column Just (L/R) (comma-separated):</td><td><input type="text" name="udval3" value="':WIDGET.USER.DATA(3):'" /></td></tr>'    W$HTML.DATA<-1> = '</table>'    IF WIDGET.USER.DATA(2) # "" THEN      CODE.TEXT<-1> = 'MAT TABLE.DEFS = ""'      VARNAME = "TABLE$LABELS" ; LIST = WIDGET.USER.DATA(2)      GOSUB MAKE.CODE      VARNAME = "TABLE$ALIGN" ; LIST = WIDGET.USER.DATA(3)      GOSUB MAKE.CODE      *      CODE.TEXT<-1> = 'TABLE$DATA = "" ;* Fill in your data here'      CODE.TEXT<-1> = 'CALL SUB.MOBI.TABLE(MAT TABLE.DEFS)'    END    W$HTML.DATA<-1> = '<br /><input type="submit" value="Make Code" />'  CASE WIDGET.USER.DATA(1) = "F"    FSELECTED = "selected"    GOSUB TYPE.SELECTOR    *    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos2" value="2" />'    W$HTML.DATA<-1> = 'Field Labels (comma-separated):</td><td><input type="text" name="udval2" value="':WIDGET.USER.DATA(2):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos3" value="3" />'    W$HTML.DATA<-1> = 'Field Types (comma-separated):</td><td><input type="text" name="udval3" value="':WIDGET.USER.DATA(3):'" /></td></tr>'    W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos4" value="4" />'    W$HTML.DATA<-1> = 'Values (comma-separated):</td><td><input type="text" name="udval4" value="':WIDGET.USER.DATA(4):'" /></td></tr>'    *    IF WIDGET.USER.DATA(2) # "" THEN      *      DIM SEL.REF(20)      DIM SEL.LISTS(20)      DIM SEL.VALS(20)      TMP.TYPES = WIDGET.USER.DATA(3)      CALL SWAP(TMP.TYPES,'\,',CHAR(9))      CONVERT "," TO @AM IN TMP.TYPES      CONVERT " " TO "" IN TMP.TYPES      CONVERT CHAR(9) TO "," IN TMP.TYPES      TMP.NAMES = WIDGET.USER.DATA(2)      CALL SWAP(TMP.NAMES,'\,',CHAR(9))      CONVERT "," TO @AM IN TMP.NAMES      CONVERT CHAR(9) TO "," IN TMP.NAMES      SEL.POS = 0      POS.LIST = ""      UDPOS = 6 ;* Next user data position (hold 5 open)      LOOP        LOCATE "SELECT" IN TMP.TYPES SETTING POS THEN          TMP.TYPES<POS> = "XXX"          SEL.POS += 1          POS.LIST<-1> = POS          W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos':UDPOS:'" value="':UDPOS:'" />'          W$HTML.DATA<-1> = 'Options for "':TMP.NAMES<POS>:'":</td><td><input type="text" name="udval':UDPOS:'" value="':WIDGET.USER.DATA(UDPOS):'" /></td></tr>'          UDPOS += 1          W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos':UDPOS:'" value="':UDPOS:'" />'          W$HTML.DATA<-1> = 'Values for "':TMP.NAMES<POS>:'":</td><td><input type="text" name="udval':UDPOS:'" value="':WIDGET.USER.DATA(UDPOS):'" /></td></tr>'          UDPOS += 1        END ELSE EXIT      REPEAT      W$HTML.DATA<-1> = '</table>'      UDPOS = 5      CONVERT @AM TO "," IN POS.LIST      W$HTML.DATA<-1> = '<input type="hidden" name="udpos':UDPOS:'" value="5" />'      W$HTML.DATA<-1> = '<input type="hidden" name="udval':UDPOS:'" value="':POS.LIST:'" />'    END ELSE      W$HTML.DATA<-1> = '</table>'    END    W$HTML.DATA<-1> = '<input type="submit" value="Make Code" />'    *    IF WIDGET.USER.DATA(2) # "" THEN      CODE.TEXT<-1> = "FORM.ID = 1"      CODE.TEXT<-1> = 'INPUT.OPTS = "" ; SEL.LISTS = "" ; SEL.VALS = ""'      CODE.TEXT<-1> = 'FIELDSET.LABEL = "Fieldset Label"'      VARNAME = "LABELS" ; LIST = WIDGET.USER.DATA(2)      GOSUB MAKE.CODE      VARNAME = "INPUT.TYPES" ; LIST = WIDGET.USER.DATA(3)      GOSUB MAKE.CODE      VARNAME = "VALUES" ; LIST = WIDGET.USER.DATA(4)      GOSUB MAKE.CODE      *      POS.LIST = WIDGET.USER.DATA(5)      CONVERT "," TO @AM IN POS.LIST      POS.CNT = DCOUNT( POS.LIST, @AM )      SXPOS = 6      FOR SX = 1 TO POS.CNT        LIST = WIDGET.USER.DATA(SXPOS)        SXPOS += 1        VALS = WIDGET.USER.DATA(SXPOS)        SXPOS += 1        CONVERT "," TO @AM IN LIST        CONVERT "," TO @AM IN VALS        FOR SVX = 1 TO DCOUNT( LIST, @AM )          CODE.TEXT<-1> = "SEL.LISTS<":POS.LIST<SX>:",":SVX:"> = \":TRIM(LIST<SVX>):"\"          CODE.TEXT<-1> = "SEL.VALS<":POS.LIST<SX>:",":SVX:"> = \":TRIM(VALS<SVX>):"\"        NEXT SVX      NEXT SX      CODE.TEXT<-1> = 'FIELDSET.OPTIONS = ""'      CODE.TEXT<-1> = "CALL SUB.MOBI.FIELDSET(LABELS,VALUES,INPUT.TYPES,INPUT.OPTS,SEL.LISTS,SEL.VALS,FIELDSET.LABEL,FORM.ID,FIELDSET.OPTIONS)"    END  CASE 1    GOSUB TYPE.SELECTOR    MAT WIDGET.USER.DATA = ""    W$HTML.DATA<-1> = '</table>'END CASE*WIDGET.USER.DATA(100) = WIDGET.USER.DATA(1) ;* Current typeW$HTML.DATA<-1> = '</form>'IF CODE.TEXT # "" THEN  CALL SWAP(CODE.TEXT,'&','&amp;')  CALL SWAP(CODE.TEXT,'<','&lt;')  CALL SWAP(CODE.TEXT,'>','&gt;')  CALL SWAP(CODE.TEXT,@AM,'<br />')  W$HTML.DATA<-1> = '<hr />'  W$HTML.DATA<-1> = '<pre>'  W$HTML.DATA<-1> = CODE.TEXT  W$HTML.DATA<-1> = '</pre>'ENDRETURN*MAKE.CODE: **CALL SWAP(LIST,'\,',CHAR(9))CONVERT "," TO @AM IN LISTCONVERT CHAR(9) TO ',' IN LISTCNT = DCOUNT( LIST, @AM )CODE.TEXT<-1> = VARNAME:' = ""'FOR N = 1 TO CNT  WORD = TRIM(LIST<N>)  IF WORD # "" THEN    CODE.TEXT<-1> = VARNAME:'<':N:'> = \':WORD:'\'  ENDNEXT NRETURN*TYPE.SELECTOR: **W$HTML.DATA<-1> = '<tr><td><input type="hidden" name="udpos1" value="1" />'W$HTML.DATA<-1> = 'Create code for:</td><td><select name="udval1" onChange="this.form.submit();">'W$HTML.DATA<-1> = '<option value="">Select Code Type</option>'W$HTML.DATA<-1> = '<option value="N" ':NSELECTED:'>P$NAV Navigation</option>'W$HTML.DATA<-1> = '<option value="T" ':TSELECTED:'>Table</option>'W$HTML.DATA<-1> = '<option value="F" ':FSELECTED:'>Fieldset / Form</option>'W$HTML.DATA<-1> = '</select></td></tr>'RETURN0004B6SUB.DEMO.SALE.TYPES.PIE0c2SUBROUTINE SUB.DEMO.SALE.TYPES.PIE**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDE*W$TYPE = "FC2DPIE"W$WIDTH = 3*IF G$QUERYMODE THEN RETURN*W$BAR.COLORS<1,1>=COLOR$MAROONW$BAR.COLORS<1,2>=COLOR$TEALW$BAR.COLORS<1,3>=COLOR$SILVERW$BAR.COLORS<1,4>=COLOR$BLUEYEAR=WIDGET.USER.DATA(1)BEGIN CASE   CASE WIDGET.USER.DATA(2) = 'PARTS'      W$TITLE = 'Chart - ':YEAR:' Parts Revenue by Type'      TYPE.ATT=52      AMTS.ATT=53      W$PIE.CAPTION='Total Parts Revenue of '   CASE WIDGET.USER.DATA(2) = 'SERVICES'      W$TITLE = 'Chart - ':YEAR:' Services Revenue by Type'      TYPE.ATT=50      AMTS.ATT=51      W$PIE.CAPTION='Total Services Revenue of 'END CASE*OPEN '','MVDB.CONTROL' TO FILE.CONTROL ELSE STOPREAD REC FROM FILE.CONTROL, 'DEMO.FINANCIAL.PICTURE' ELSE REC=''LOCATE YEAR IN REC<67> SETTING YEAR.POS ELSE YEAR.POS=1**W$PIE.VALUE.OPTS<1,3>='isSliced="1"'*TYPES=REC<TYPE.ATT>AMOUNTS=REC<AMTS.ATT>MAX.TYPES=DCOUNT(TYPES,CHAR(253))FOR TYPE.CNTR = 1 TO MAX.TYPES   W$PIE.LABELS<1,TYPE.CNTR>=TYPES<1,TYPE.CNTR>   W$PIE.VALUES<1,TYPE.CNTR>=AMOUNTS<1,TYPE.CNTR,YEAR.POS> NEXT TYPE.CNTRW$PIE.CAPTION:=OCONV(SUM(W$PIE.VALUES),'MD2,$')**RETURN000221SUB.LISTU0c2SUBROUTINE SUB.LISTU * * Copyright (c) 2010 SB, Inc. All rights reserved. * Description: List Users * *#MAKE# RL $OPTIONS D3 INCLUDE WBPD MVDB.INCLUDE * W$TYPE = "HTML" W$TITLE = "List Users" W$WIDTH = 1 W$PRINTABLE = 1 * IF G$QUERYMODE THEN RETURN * EXECUTE "LISTU" CAPTURING JUNK W$HTML.DATA = '<div  align="left">' W$HTML.DATA<-1> = '<pre>' FOR X = 1 TO DCOUNT( JUNK, @AM )  W$HTML.DATA<-1> = JUNK<X> NEXT X W$HTML.DATA<-1> = '</pre>' W$HTML.DATA<-1> = '</div>' * INCLUDE WBPD SOURCE.VIEW.ICON * RETURN 000070VOC0c000003AMVAPPS.INSTALLER0c2PQHRUN WDB.BP APP.INSTALLERSTONA2P000023LOGIN0c2PAECLTYPE PBASICTYPE "P"0000F9MVDB.USERS0c0000027guest0c2guestChartsGuest UserUser00003Fadmin0c2adminAdministratorAdmin Userno emailAdministrator000037emailed0c2788CF490Administratoremailed reportUser000036webservice0c2788CF490AdministratorwebserviceUser000281DICT_DASHBOARD.CLOSING.STATS0c000001BAMOUNT0c1A1MD2R1200001CBRANCH0c1A0G2*1L10000021COST.OF.SALE0c1A2MD2R12000028GROSS.PROFIT0c1A0MD2F;1;2;-R12000014ID0c1A0L10000021LAST.AP.REFRESH0c11910904-25-20000021LAST.AR.REFRESH0c11910904-25-20000024LAST.SALES.REFRESH0c11910904-25-2000001APIPE0c1A0 F;C|L100001CREGION0c1A0G3*1L10000034REGION*YYYYMM0c1A0A;0(G3*1):"*":0(G1*1)L1000001DSALESMAN0c1A0G*1L20000024SALESMAN*YYYYMM0c1A0G*2L2000001EYYYY0c1A0G1*1T1,4L400001BYYYYMM0c1A0G1*1L6000023YYYYMM*BRANCH0c1A0G1*2L1000818EMVDB.SUB.TEMPLATES0c0000017FCBAR2D0c2USE FCAREA2D0009C3FCMSAREA2D0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create three arrays here. Two of them are single-dimention attribute*   or value separated lists, one that stores descriptions of each*   point along the X axis (major), another that stores descriptions*   of the components that make up each point along the X axis (minor).*   Example: Monthly sales by territory where each month is a point*   (major) and each territory is a component of that point (minor).*   The third array is a full dynamic array where each attribute is a*   territory (minor) and each value is a month (major).*   Array Examples:    TERRS="" ;* Each attribute is a short description of the territory    MNTHS="" ;* Each value is a short description of the month (Mon/YY)    SALES="" ;* Each attribute contains values (one per month) of the             ;* sales within a territory. SALES<3,2> corresponds to             ;* TERRS<1,3> and MNTHS<1,3>*   then you can load the widget's values and labels like:*     W$BAR.VALUES  = SALES*     W$BAR.XLABELS = MNTHS*     W$BAR.LABELS  = TERRS*   rather than loading them a value at a time as shown*   in the "FOR N = 1 TO 12" loop below.*W$BAR.CAPTION = "YOUR CHART CAPTION HERE"W$BAR.XMEMO = "X-Axis Text" ;* Text that appears below the X-Axis labels                            ;* Ex: Territory Sales by MonthW$BAR.YMEMO = "Y-Axis Text" ;* Text that appears beside the Y-Axis labels                            ;* Ex: Sales (USD)*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = N ;* Value  W$BAR.XLABELS<1,N> = "Label ":N ;* X-Axis labelNEXT NW$BAR.LABELS<1>="Label 1"W$BAR.LABELS<2>="Label 2"W$BAR.LABELS<3>="Label 3"** To suppress the actual values for any of the series:W$BAR.LABEL.OPTS<1> = "showValues='0'"W$BAR.LABEL.OPTS<2> = "showValues='0'"W$BAR.LABEL.OPTS<3> = "showValues='0'"** Specify the alpha (transparency level) for each of the seriesW$BAR.LABEL.OPTS<1> := " areaAlpha='50'"W$BAR.LABEL.OPTS<2> := " areaAlpha='70'"W$BAR.LABEL.OPTS<3> := " areaAlpha='90'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000561SPARKWINLOSS0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the actual data, the other contains benchmark data*   to which the actual data are compared.*   Example:      SALES: Each value is a single sales total for the month      GOALS: Each value is a single goal for the corresponding month*     you build the chart values by comparing each value within the*     two lists, setting each chart value to "W" (win), "L" (lose)*     or "D" (draw) based on the comparison*W$FW.CAPTION = "YOUR CHART CAPTION HERE"W$FW.SUBCAPTION = "YOUR CHART SUBCAPTION HERE"*MAX = DCOUNT(SALES,@VM)FOR N = 1 TO MAX  BEGIN CASE    CASE SALES<1,N> > GOALS<1,N>; W$FW.VALUES<1,N> = "W" ;* Win    CASE SALES<1,N> < GOALS<1,N>; W$FW.VALUES<1,N> = "L" ;* Loss    CASE 1                                               ;* Draw  END CASENEXT N**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001BFCDOUGHNUT2D0c2USE FC2DPIE00057BFC2DPIE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the data, the other contains a short description*   of that data.*   Example:*     TERRSALES: Each value is a single territory's sales for the month*     TERRNAMES: Each value is a short name for the territory*     then you can load the widget's values like:*       W$PIE.LABELS = TERRNAMES*       W$PIE.VALUES = TERRSALES*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 7" loop below.*FOR N = 1 TO 7  W$PIE.LABELS<1,N> = "Slice ":N  W$PIE.VALUES<1,N> = NNEXT N** For a 2D pie, a specific slice can be separated from the pie* by setting this value:* W$PIE.VALUE.OPTS<1,X> = 'isSliced="1"'*   where "X" is the number of the value you want separated** To show values instead of percentages, use this:* W$CHART.OPTIONS<-1> = "showPercentageValues='0'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001BCYLINDER0c2USE THERMOMETER000303TEXT0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create dynamic array, on text line per attribute*   Examples:*     READ TXTITM FROM FILE,ID ELSE TXTITM = "TXTITM NOT FOUND"*   or:*     EXECUTE "YOUR SORT STATEMENT" CAPTURING TXTITEM*W$TEXT.DATA = "YOUR DYNAMIC ARRAY HERE";* example: TXTITM**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000016FCLINE0c2USE FCAREA2D000022FCSTACKEDCOLUMN3D0c2USE FCMSBAR2D000A7CHLED0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine a contant to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever.*   Example:*     SALES: Total sales for a period within the current year*     GOAL:  Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the higher of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given GOAL & SALES, calculate the ranges:             GOAL      = 100000             SALES     = 110000             RANGE.BAD = INT(GOAL*.7)             RANGE.OK  = INT(GOAL*.9)             RANGE.GOOD= INT(SALES*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* To* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Value & TargetW$FW.METER.VALUE  = SALES      ;* Your actual value** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001DFCMSCOLUMN3D0c2USE FCMSBAR2D00026AHTML0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create a HTML string from data previously read*W$HTML.DATA = "<h2>YOUR HTML STRING HERE</h2>"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001AFCCOLUMN2D0c2USE FCAREA2D00001CSPARKLINE0c2USE SPARKCOLUMN000ADBHBULLET0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine a contant to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever.*   Example:*     SALES: Total sales for a period within the current year*     GOAL:  Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the higher of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given GOAL & SALES, calculate the ranges:             GOAL      = 100000             SALES     = 110000             RANGE.BAD = INT(GOAL*.7)             RANGE.OK  = INT(GOAL*.9)             RANGE.GOOD= INT(SALES*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.CAPTION     = "YOUR MAIN CAPTION HERE"W$FW.SUBCAPTION  = "YOUR SUB-CAPTION HERE"  ;* Optional*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* To* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Value & TargetW$FW.METER.VALUE  = SALES      ;* Your actual valueW$FW.METER.TARGET = GOAL       ;* Your calculated target** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000010VLED0c2USE HLED000016FC3DPIE0c2USE FC2DPIE000905FCMSBAR2D0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create three arrays here. Two of them are single-dimention attribute*   or value separated lists, one that stores descriptions of each*   point along the X axis (major), another that stores descriptions*   of the components that make up each point along the X axis (minor).*   Example: Monthly sales by territory where each month is a point*   (major) and each territory is a component of that point (minor).*   The third array is a full dynamic array where each attribute is a*   territory (minor) and each value is a month (major).*   Array Examples:    TERRS="" ;* Each attribute is a short description of the territory    MNTHS="" ;* Each value is a short description of the month (Mon/YY)    SALES="" ;* Each attribute contains values (one per month) of the             ;* sales within a territory. SALES<3,2> corresponds to             ;* TERRS<1,3> and MNTHS<1,3>*   then you can load the widget's values and labels like:*     W$BAR.VALUES  = SALES*     W$BAR.XLABELS = MNTHS*     W$BAR.LABELS  = TERRS*   rather than loading them a value at a time as shown*   in the "FOR N = 1 TO 12" loop below.*W$BAR.CAPTION = "YOUR CHART CAPTION HERE"W$BAR.XMEMO = "X-Axis Text" ;* Text that appears below the X-Axis labels                            ;* Ex: Territory Sales by MonthW$BAR.YMEMO = "Y-Axis Text" ;* Text that appears beside the Y-Axis labels                            ;* Ex: Sales (USD)*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = N ;* Value  W$BAR.XLABELS<1,N> = "Label ":N ;* X-Axis labelNEXT NW$BAR.LABELS<1>="Label 1"W$BAR.LABELS<2>="Label 2"W$BAR.LABELS<3>="Label 3"** To suppress the actual values for any of the series:W$BAR.LABEL.OPTS<1> = "showValues='0'"W$BAR.LABEL.OPTS<2> = "showValues='0'"W$BAR.LABEL.OPTS<3> = "showValues='0'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00022EMAP0c2W$TITLE = "Untitled Map"** The W$TYPE variable needs to represent a valid map name*W$TYPE = "MAP:Canada"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN*W$MAP.IDS<1,1> = "01"W$MAP.VALUES<1,1> = 5W$MAP.VALUE.OPTS<1,1> = 'toolText="This is Alberta!"'*W$MAP.RANGE.NAME<1,1> = "Not On The Map"W$MAP.RANGE.LOW<1,1> = "0"W$MAP.RANGE.HIGH<1,1> = "5"W$MAP.RANGE.COLOR<1,1> = "WHITE"W$MAP.RANGE.NAME<1,2> = "On The Map"W$MAP.RANGE.LOW<1,2> = "5"W$MAP.RANGE.HIGH<1,2> = "10"W$MAP.RANGE.COLOR<1,2> = "GREEN"*RETURN0004FFTABLE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create a work table from your data that you'll use to populate the*   widget's table data array where attributes represent rows and*   values represent columns. NOTE: If you are using the widget's*   Total row, you have to calculate the totals yourself and stick*   them in the appropriate W$TABLE.TOTALS value.** Set up column labelsW$TABLE.COL.LABELS<1,1> = "Column Heading 1"W$TABLE.COL.LABELS<1,2> = "Column Heading 2"W$TABLE.COL.LABELS<1,3> = "Column Heading 3"** Column justification = left, right, centerW$TABLE.COL.JUST<1,1> = "left"W$TABLE.COL.JUST<1,2> = "right"** Table RowsFOR ROW = 1 TO 5  W$TABLE.DATA<ROW,1> = ROW:",1"  W$TABLE.DATA<ROW,2> = ROW:",2"NEXT ROW** TotalsW$TABLE.TOTALS<1,1> = "2"W$TABLE.TOTALS<1,2> = "4"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000DE2ANGULARGAUGE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine some contants to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever. Also, gather*   information that will allow you to create ranges against which to*   compare the number and those constants, if any.*   Example:*     SALES.CY: Total sales for a period within the current year*     SALES.LY: Total sales within that same period last year*     SLS.GOAL: Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the highest of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given SLS.GOAL & SALES.CY, calculate the ranges:             SLS.GOAL  = 100000             SALES.CY  = 110000             SALES.LY  = 95000             RANGE.BAD = INT(SLS.GOAL*.7)             RANGE.OK  = INT(SLS.GOAL*.9)             RANGE.GOOD= INT(SALES.CY*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* ToW$FW.COLOR.RANGE<3,2> = COLOR$YELLOW;* Override color* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Main Dial ValueW$FW.DIAL.VALUES<1> = SALES.CY      ;* Your actual value** Trendpoints (optional)* By default, there are no trendpoints on the gauge.** First TrendpointW$FW.TRENDPOINT.VALUES<1,1> = SALES.LYW$FW.TRENDPOINT.LABELS<1,1> = "Last Year"W$FW.TRENDPOINT.OPTS<1,1> = 'color="':COLOR$BLACK:'" useMarker="1"'* Second TrendpointW$FW.TRENDPOINT.VALUES<1,2> = SLS.GOALW$FW.TRENDPOINT.LABELS<1,2> = "Goal"W$FW.TRENDPOINT.OPTS<1,2> = 'color="':COLOR$SILVER:'" useMarker="1"'** Plot an arc (optional) W$FW.TRENDPOINT.VALUES<2,1> = SALES.LY ;* Arc beginW$FW.TRENDPOINT.VALUES<2,2> = SALES.CY ;* Arc end** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001AFCCOLUMN3D0c2USE FCAREA2D000020FCSTACKEDAREA2D0c2USE FCMSBAR2D0005C4FCAREA2D0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the data, the other contains a short description*   of that data, like the month and year.*   Example:*     TERRSALES: Each value is a single territory's sales for the month*     TERRPERDS: Each value is a short description of the period (MM/YY)*     then you can load the widget's values like:*       W$BAR.XLABELS = TERRPERDS*       W$BAR.VALUES = TERRSALES*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 12" loop below.*W$BAR.CAPTION = "YOUR CHART CAPTION HERE"W$BAR.XMEMO = "X-Axis Text" ;* Text that appears below the X-Axis labels                            ;* Ex: Territory ABC Sales by MonthW$BAR.YMEMO = "Y-Axis Text" ;* Text that appears beside the Y-Axis labels                            ;* Ex: Sales (USD)*FOR N = 1 TO 12  W$BAR.VALUES<1,N> = N ;* Value  W$BAR.XLABELS<1,N> = "Label ":N ;* X-Axis labelNEXT N**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN0006F3FUNNEL0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create two one-attribute, value-separated arrays here.*   One contains the data, the other contains a short description*   of that data. NOTE: The values should be ordered from largest to*   smallest (value<1,1> should be larger than value<1,2> and so on)*   or the funnel will look weird. For a pyramid, that order should*   be reversed (value<1,1> should be smaller than value<1,2>, etc).*   Example:*     KILLSTATS: Each value is a single territory's sales for the month*     STATDESCS: Each value is a short name for the territory*     then you can load the widget's values like:*       W$FC.LABELS = STATDESCS*       W$FC.VALUES = KILLSTATS*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 5" loop below.*   For a funnel chart, the last value in the list must represent the*   total of all the other values. This is not true for a pyramid chart.*FOR N = 1 TO 5  W$FW.LABELS<1,N> = "Section ":N  W$FW.VALUES<1,N> = NNEXT N*W$FW.CAPTION = "YOUR CAPTION HERE"W$FW.SUBCAPTION = "YOUR SUB-CAPTION HERE"** To show percentages instead of values, use this:* W$CHART.OPTIONS<-1> = "showPercentValues='1'"* To separate the sections from one another, use this:* W$CHART.OPTIONS<-1> = "isSliced='1'"**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN0006FCTHERMOMETER0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine a contant to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever.*   Example:*     SALES: Total sales for a period within the current year*     GOAL:  Sales goal for said current year period*   Example: Given GOAL & SALES, calculate the ranges:             GOAL      = 100000             SALES     = 110000*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = GOAL ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"W$FW.THERMOMETER.COLOR = COLOR$RED*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** ValueW$FW.METER.VALUE  = SALES      ;* Your actual value** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000019FCMSLINE0c2USE FCMSBAR2D000BB5USAMAP0c2W$TITLE = "Untitled Map"W$TYPE = "%TYPE%"W$WIDTH = 3 ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN** The IDs of each section of a USA map are the state abbreviations, including DC* A list of the state names can be obtained as follows:OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE  W$TYPE = "TEXT"  W$TEXT.DATA = "Unable to open MVDB.CONTROL"  RETURNENDREAD STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ''CONVERT "," TO @VM IN STATE.NAMES*IF WIDGET.USER.DATA(1) # "" THEN  * User has clicked on a specific state. That state map will be displayed.  * This entire section of code can be removed if you dont want to allow  * drill-down to a state map.  *  * The map "name" for the sepcifc state is stored in WIDGET.USER.DATA(2).  * The IDs for the state map are the FIPS county codes.  * A list of county codes can be gathered for a specific state as follows:  OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE    W$TYPE = "TEXT"    W$TEXT.DATA = "Unable to open MVDB.MAP.DATA"    RETURN  END  EXECUTE 'SELECT MVDB.MAP.DATA WITH NAME = "':WIDGET.USER.DATA(2):'"' CAPTURING JUNK  N = 0  LOOP    READNEXT ID ELSE EXIT    READ REC FROM F.MVDB.MAP.DATA, ID THEN      N += 1      * The ID of the map data file is STATE * FIPS_Code      * Extract the FIPS code from the ID and use it as the ID for this      * value.      W$MAP.IDS<1,N> = FIELD( ID, '*', 2 )      W$MAP.VALUES<1,N> = N      * The county name can be found in REC<2>      W$MAP.VALUE.OPTS<1,N> = 'toolText="':REC<2>:'"'    END  REPEAT  * Since we are in drill-down mode, we need to give the user a way to get back  * to the national map. To get out of drill-down mode, WIDGET.USER.DATA(1) needs  * to be cleared. Using a link is an easy way to do that.  W$LINK.LABEL<1,2> = "Return to USA Map"  W$LINK.LOCATION<1,2> = "1"  W$LINK.UD.POS<1,2> = 1  W$LINK.UD.VAL<1,2> = ""  * Override the title to show the state name.  W$TITLE = "Demo - ":WIDGET.USER.DATA(1):" Counties by Alphabet"END ELSE ;* No state specified, full US Map  * Assign a value to each desired map segments (States) as follows  W$MAP.IDS<1,-1> = "TX"  W$MAP.VALUES<1,-1> = 100  W$MAP.VALUE.OPTS<1,-1> = 'toolText="Texas" ' ;* Multiple option settings are space-delimited  *  * With drill-down enabled, the widget will automatically be re-executed with the state ID in WIDGET.USER.DATA(1)  * Allow drill-down to the state level by setting this value:  W$MAP.VALUE.DD<1,-1> = 1END** Set up ranges of values. Note that the low range is inclusive, high range is exclusive.W$MAP.RANGE.NAME<1,1> = "Range 1-99"W$MAP.RANGE.LOW<1,1> = "1"W$MAP.RANGE.HIGH<1,1> = "100"W$MAP.RANGE.COLOR<1,1> = "GREEN"W$MAP.RANGE.NAME<1,2> = "Range 100-199"W$MAP.RANGE.LOW<1,2> = "100"W$MAP.RANGE.HIGH<1,2> = "200"W$MAP.RANGE.COLOR<1,2> = "YELLOW"W$MAP.RANGE.NAME<1,3> = "Range 200-300"W$MAP.RANGE.LOW<1,3> = "200"W$MAP.RANGE.HIGH<1,3> = "301"W$MAP.RANGE.COLOR<1,3> = "RED"*RETURN000DE2HLINEARGAUGE0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Read your data, summarize it into one number, like total sales*   for the period. While you're at it, determine some contants to*   which that number can be compared, like sales at the same point*   last year, or a sales goal for the period, whatever. Also, gather*   information that will allow you to create ranges against which to*   compare the number and those constants, if any.*   Example:*     SALES.CY: Total sales for a period within the current year*     SALES.LY: Total sales within that same period last year*     SLS.GOAL: Sales goal for said current year period*   Once you have your goal (or other benchmark), use it to calculate*   your color range values. Also, you must determine the upper range*   of your gauge. Make it slightly higher than the highest of your*   calculations (ie. if your sales exceed your goal, use the sales; if*   your goal exceeds your sales, use the goal).*   Example: Given SLS.GOAL & SALES.CY, calculate the ranges:             SLS.GOAL  = 100000             SALES.CY  = 110000             SALES.LY  = 95000             RANGE.BAD = INT(SLS.GOAL*.7)             RANGE.OK  = INT(SLS.GOAL*.9)             RANGE.GOOD= INT(SALES.CY*1.1)*W$FW.LOWER.LIMIT = 0W$FW.UPPER.LIMIT = RANGE.GOOD ;* Upper limit of the gaugeW$FW.LOWER.LIMIT.LABEL = "Poor"W$FW.UPPER.LIMIT.LABEL = "Great"*W$FW.NUMBER.PREFIX = "$"W$FW.NUMBER.SUFFIX = ""** First Color Range (Normally Green)W$FW.COLOR.RANGE<1,1> = 0           ;* FromW$FW.COLOR.RANGE<2,1> = RANGE.BAD   ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$RED   ;* Override color* Second Color Range (Normally Yellow)W$FW.COLOR.RANGE<1,2> = RANGE.BAD   ;* FromW$FW.COLOR.RANGE<2,2> = RANGE.OK    ;* ToW$FW.COLOR.RANGE<3,1> = COLOR$YELLOW;* Override color* Third Color Range (Normally Red)W$FW.COLOR.RANGE<1,3> = RANGE.OK    ;* FromW$FW.COLOR.RANGE<2,3> = RANGE.GOOD  ;* ToW$FW.COLOR.RANGE<3,3> = COLOR$GREEN ;* Override color** Main Dial ValueW$FW.DIAL.VALUES<1> = SALES.CY      ;* Your actual value** Trendpoints (optional)* By default, there are no trendpoints on the gauge.** First TrendpointW$FW.TRENDPOINT.VALUES<1,1> = SALES.LYW$FW.TRENDPOINT.LABELS<1,1> = "Last Year"W$FW.TRENDPOINT.OPTS<1,1> = 'color="':COLOR$BLACK:'" useMarker="1"'* Second TrendpointW$FW.TRENDPOINT.VALUES<1,2> = SLS.GOALW$FW.TRENDPOINT.LABELS<1,2> = "Goal"W$FW.TRENDPOINT.OPTS<1,2> = 'color="':COLOR$SILVER:'" useMarker="1"'** Plot an arc (optional) W$FW.TRENDPOINT.VALUES<2,1> = SALES.LY ;* Arc beginW$FW.TRENDPOINT.VALUES<2,2> = SALES.CY ;* Arc end** Configure tickmarks (optional)* Below are default values. Leaving this code out would make no difference* but this is here in case you want to modify the defaults*W$FW.TICKMARKS<1> = 1 ;* Display tickmarksW$FW.TICKMARKS<2> = 1 ;* Display values by tickmarksW$FW.TICKMARKS<3> = "B" ;* Show tickmarks below the graphW$FW.TICKMARKS<4> = "" ;* # of Major Tickmarks (blank = Let it calculate this)W$FW.TICKMARKS<5> = "" ;* # of Minor Tickmarks between Majors (none)**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN00001DFCMSCOLUMN2D0c2USE FCMSBAR2D000016VBULLET0c2USE HBULLET000022FCSTACKEDCOLUMN2D0c2USE FCMSBAR2D000009GANTT0c20003E6SPARKCOLUMN0c2* Copyright (C) information here if relevant* Any other descriptive comments here* and here*W$TITLE = "YOUR TITLE HERE"     ;* Title for widget title barW$TYPE = "%TYPE%"               ;* Filled in by editorW$WIDTH = 3                     ;* Full width (1=1/3, 2=2/3, 3=3/3)*IF G$QUERYMODE THEN RETURN**** Extract data from GLOBAL, WIDGET variables here**** Open files here**** Create one one-attribute, value-separated array here.*   Example:*     TERRSALES: Each value is a single territory's sales for the month*     then you can load the widget's values like:*       W$FW.VALUES = TERRSALES*     rather than loading them a value at a time as shown*     in the "FOR N = 1 TO 12" loop below.*W$FW.CAPTION = "YOUR CHART CAPTION HERE"W$FW.SUBCAPTION = "YOUR CHART SUBCAPTION HERE"*FOR N = 1 TO 12  W$FW.VALUES<1,N> = N ;* ValueNEXT N**** Load any relevant data into GLOBAL, WIDGET variables here*   as needed for subsequent use by other widgets*RETURN000015PYRAMID0c2USE FUNNEL000010BULB0c2USE HLED00001FFCSTACKEDBAR2D0c2USE FCMSBAR2D00005CDICT_MVDB.WIDGETS0c000001FSUB0c1A1SUBROUTINEL2500001CUSERS0c1A2USERSL2000DB65WREST.BP0c000023CWSWAP0c2SUBROUTINE WSWAP(string,SUB1,SUB2)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine swaps one string for another*              **********************************************************************IDX.POS = 1LOOP  POS = INDEX(string, SUB1, IDX.POS)WHILE POS DO  string = string[1,POS-1]:SUB2:string[POS+LEN(SUB1),LEN(string)]  IDX.POS = IDX.POS + COUNT(SUB2,SUB1)REPEATRETURNEND000212WGETINFO0c2SUBROUTINE WGETINFO(InfoVal, InfoItem)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: March 2017* Description: return an element from WWW.INFO***********************************************************************INCLUDE WBPD WWW.INCLUDEIF NUM(InfoItem) AND InfoItem > 0 AND InfoItem <= 50 THEN IF INT(InfoItem) = InfoItem THEN  InfoVal = WWW.INFO(InfoItem) ENDENDRETURNEND0005BFWENCODEJSON0c2SUBROUTINE WENCODEJSON(ORIG.OPTION,IN.STR,OUT.STR)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 8/13/2016* Description: this program will convert all bad characters to an escaped character************************************************************************OPEN 'RESULT.FILE' TO RFILE ELSE STOP* WE NEED TO ENCODE* " = \"   (34)* \ = \\    (92)* / = \/* CHAR(7) = \b* CHAR(13) = \r* char(10) = \n* char(12) = \f* char(9)  = \t*WRITE IN.STR ON RFILE, 'IN.STR'OPTION=ORIG.OPTIONOUT.STR=''L=LEN(IN.STR)CONVERT @AM TO CHAR(10) IN IN.STR; * LETS SWITCH 254 TO CR BE DEFAULTFOR X=1 TO L  C=IN.STR[X,1]  SEQ.C=SEQ(C)  ENCODE=0  IF SEQ.C < 32 THEN ENCODE=1; * BELOW SPACE*IF SEQ.C > 32 AND SEQ.C < 48 THEN ENCODE=1; * LETS ENCODE ALL OF THIS !@$%^&*()  IF SEQ.C=34 THEN ENCODE=1  IF SEQ.C=92 THEN ENCODE=1  IF SEQ.C=47 THEN ENCODE=1  IF SEQ.C > 122 THEN ENCODE = 1; * LETS ENCODE ALL THE HIGH ENTRIES*IF SEQ.C >= 91 AND SEQ.C <= 96 THEN ENCODE=1  IF ENCODE THEN    BEGIN CASE      CASE SEQ.C=7; OUT.STR='\b'      CASE C='\'; OUT.STR:='\\'      CASE C='/'; OUT.STR:='\/'      CASE SEQ.C=10; OUT.STR:='\n'      CASE SEQ.C=13; OUT.STR:='\r'      CASE SEQ.C=12; OUT.STR:='\f'      CASE 1;  OUT.STR:='\u00':OCONV(C,'MX0C');*UD*    END CASE  END ELSE    OUT.STR=OUT.STR:C  ENDNEXT XRETURNEND000235WGETCOOKIE0c2SUBROUTINE WGETCOOKIE(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine gets the value of a cookie.*              **********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''TEMPVARS = OCONV(CGI$CVARS,'MCU')LOCATE OCONV(VarName,'MCU') IN TEMPVARS SETTING POS THEN  VarValue = CGI$CVALS<POS>ENDRETURNEND005BA9WDEBUG0c2* WDEBUG** Debug REST Services* Copyright (c) 2017 Zumasys Inc.* Rewritten by Peter Schellenbach, 10/18/2017** Based on original version:*  Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved*  Written by: Luke Bucklin, Sierra Bravo*  Date: Sometime, 2006-ish*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD FI.WDB.DEBUG*CLR.SCR = @(-1)CLR.EOS = @(-3)MAX.LINES = SYSTEM(3) - 4MAX.COLS = SYSTEM(2) - 1IF MAX.LINES <= 0 OR CLR.SCR = '' OR CLR.EOS = '' THEN  MAX.LINES = 20  CLR.SCR = ''  CLR.EOS = ''  PRMPT.LINE = CHAR(13):CHAR(10)END ELSE  PRMPT.LINE = @(0, MAX.LINES + 2):CLR.EOSENDPROMPT ''*PRINT CLR.SCR:PRINTPRINT 'WDEBUG Web Request Degug Tool'PRINTPRINT 'The WDEBUG tool allows you to inspect, modify and re-run web requests.'PRINT 'Whenever a request for a debuggable resource is processed by WDB.INIT,'PRINT 'a debug record for the request is added to the WDB.DEBUG file. WDEBUG'PRINT 'allows you to select a debug record, view the request details, edit the'PRINT 'request variables, re-run the request and view the response.'PRINTPRINT 'To debug web requests for a resource, set attribute 7 of the WDB.RESOURCE'PRINT 'record for the resource to 1, then issue the web request from the client'PRINT 'browser or other agent. WDEBUG will show a list of recent web requests to'PRINT 'select from.'PRINTPRINT 'Start WDEBUG with an active select list if you need to use special criteria'PRINT 'to select the record(s) you need to debug.'PRINTPRINT 'Press <enter> to continue':INPUT ANS*OPEN 'WDB.DEBUG' TO F.WDB.DEBUG ELSE  PRINT 'The WDB.DEBUG data file is required to use WDEBUG. Default installations'  PRINT 'only create the dictionary for this file. Please create the data section'  PRINT 'to use WDEBUG: CREATE-FILE DATA WDB.DEBUG 101.'  STOPEND*SESSION.FLAG = 0OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SESSION.FLAG = 1 ;* can restore session when running debug reqest*EDITOR = ''IDS = ''NUM.IDS = 0IF SYSTEM(11) THEN  LOOP    READNEXT ID ELSE EXIT    READV X FROM F.WDB.DEBUG, ID, 1 THEN      IDS<-1> = ID      NUM.IDS += 1    END ELSE      PRINT ID:' not found in WDB.DEBUG!'    END  REPEATENDUSE.SUPPLIED.LIST = (NUM.IDS > 0)*LOOP  IF NOT(USE.SUPPLIED.LIST) THEN* Select available WDB.DEBUG items    CMND = 'SSELECT WDB.DEBUG WITH TYPE = "C" "R" BY-DSND DATE BY-DSND TIME'    EXECUTE CMND CAPTURING RESULT    IF SYSTEM(11) = 0 THEN      PRINT "No items found."      STOP    END    IDS = ''    NUM.IDS = 0    LOOP      READNEXT ID ELSE EXIT      IDS<-1> = ID      NUM.IDS += 1    REPEAT  END*  TOP = 0  LOOP* Display page of items    PRINT CLR.SCR:    PRINT "Ln Date. Time.... Path................ Remote Address...... Request ID........."    FOR CNTR = 1 TO MAX.LINES UNTIL CNTR + TOP > NUM.IDS      DBG.ID = IDS<CNTR>      READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE CONTINUE      PATH.INFO = DBGREC<WDBG_PATH>      IF PATH.INFO = '' THEN PATH.INFO = DBGREC<WDBG_HANDLER>:'/':DBGREC<WDBG_RESOURCE>      PRINT CNTR "R#2 ":      PRINT OCONV(DBGREC<WDBG_DATE>, 'D0-') "L#5 ":      PRINT OCONV(DBGREC<WDBG_TIME>, 'MTS') "L#8 ":      PRINT PATH.INFO "L#20 ":      PRINT DBGREC<WDBG_REMOTE_ADDR> "L#20 ":      PRINT DBGREC<WDBG_REQUEST_ID>[1,20]    NEXT CNTR    IF TOP + MAX.LINES > NUM.IDS THEN BOT = NUM.IDS ELSE BOT = TOP + MAX.LINES    PRINT "Showing items ":(TOP + 1):"-":BOT:" of ":NUM.IDS*    LOOP      PRINT PRMPT.LINE:"Command: (Q)uit (R)efresh (C)lear (N)ext (P)rev (##) Line to debug: ":      INPUT COMMAND      IF COMMAND MATCHES '1N0N' THEN        IF COMMAND >= 1 AND COMMAND <= MAX.LINES AND COMMAND + TOP <= NUM.IDS THEN          DBG.ID = IDS<COMMAND + TOP>          GOSUB debug.request        END        COMMAND = ''      END ELSE        COMMAND = OCONV(COMMAND[1,1], 'MCU')        IF COMMAND = '' THEN COMMAND = 'N'        IF INDEX('ERCNPQ', COMMAND, 1) = 0 THEN COMMAND = ''      END    WHILE COMMAND = '' DO REPEAT*    BEGIN CASE      CASE COMMAND = 'N'        IF TOP + MAX.LINES < NUM.IDS THEN TOP += MAX.LINES      CASE COMMAND = 'P'        IF TOP - MAX.LINES >= 0 THEN TOP -= MAX.LINES    END CASE  WHILE COMMAND = 'N' OR COMMAND = 'P' DO REPEAT*UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'R' ; NULL    CASE COMMAND = 'C'      EXECUTE 'SELECT WDB.DEBUG WITH TYPE = "C" "R"'      PRINT 'Are you sure you want to clear these items from the WDB.DEBUG file? ':      INPUT ANS      ANS = OCONV(ANS[1,1],'MCU')      IF ANS = 'Y' THEN        IF SYSTEM(11) THEN          LOOP            READNEXT ID ELSE EXIT            DELETE F.WDB.DEBUG, ID          REPEAT        END      END ELSE        CLEARSELECT      END  END CASEREPEATSTOP**----------debug.request:*----------*READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE  PRINT "The selected item '":DBG.ID:"' is not available!"  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDEDIT.ID = 'D':DBG.ID[2, LEN(DBG.ID)]LOOP  PRINT PRMPT.LINE:"Debugging ":DBG.ID[1,28]:" - command: (Q)uit (V)iew (E)dit (R)un: ":  INPUT COMMAND  COMMAND = OCONV(COMMAND[1,1], 'MCU')UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'V'      GOSUB view.request    CASE COMMAND = 'E'      GOSUB edit.request    CASE COMMAND = 'R'      GOSUB run.request  END CASEREPEATRETURN**----------view.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDGOSUB to.editNUM.LNS = DCOUNT(EDIT.REC, @AM)I = 1LOOP WHILE I <= NUM.LNS DO  X = EDIT.REC<I>  IF LEN(X) > MAX.COLS THEN    *UD* X = FOLD(X, MAX.COLS)    FOLD.STRING = X; GOSUB fold.string; X = FOLD.STRING ; *UD*    EDIT.REC<I> = X    N = COUNT(X, @AM)    NUM.LNS += N    I += N  END  I += 1REPEATIF NUM.LNS = 0 THEN NUM.LNS = 1NUM.PGS = INT((NUM.LNS - 1) / MAX.LINES) + 1CUR.PG = 1LOOP  PG.TOP = (CUR.PG - 1) * MAX.LINES  IF PG.TOP + MAX.LINES > NUM.LNS THEN LPP = NUM.LNS - PG.TOP ELSE LPP = MAX.LINES  PRINT CLR.SCR:  PRINT 'Page ':CUR.PG:' of ':NUM.PGS:SPACE(10):DBG.ID  PRINT  FOR I = 1 TO LPP    PRINT EDIT.REC<I + PG.TOP>  NEXT I  PRINT PRMPT.LINE:'Command: (Q)uit (N)ext (P)rev (##) Goto page ':  INPUT COMMAND  IF COMMAND MATCHES '1N0N' THEN    IF COMMAND >= 1 AND COMMAND <= NUM.PGS THEN CUR.PG = COMMAND  END ELSE    COMMAND = OCONV(COMMAND[1,1], 'MCU')  ENDUNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'N' OR COMMAND = ''      IF CUR.PG < NUM.PGS THEN CUR.PG = CUR.PG + 1    CASE COMMAND = 'P'      IF CUR.PG > 1 THEN CUR.PG = CUR.PG - 1  END CASEREPEATRETURN**----------edit.request:*----------*IF EDITOR = '' THEN GOSUB choose.editorIF EDITOR <> '' THEN  EDIT.ID = 'D':DBG.ID  GOSUB to.edit  WRITE EDIT.REC ON F.WDB.DEBUG, EDIT.ID  CMND = EDITOR:' WDB.DEBUG ':EDIT.ID  EXECUTE CMND  READ EDIT.REC FROM F.WDB.DEBUG, EDIT.ID ELSE NULL  DELETE F.WDB.DEBUG, EDIT.ID  GOSUB from.editENDRETURN**----------run.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNEND*HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* Reconstruct query stringQSTR = ''QSEP = ''* headers and server variablesN = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_HEADER_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* form variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_CGI_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_CGI_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  URLENCODE.STRING = CHANGE(THE.BODY, @VM, CHAR(10))  GOSUB url.encode  QSTR := QSEP:'__body__=':NEW.STRINGEND* restore session stateIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    SESSION.REC = ''    SESSION.REC<1> = DBGREC<WDBG_SESSION_VARS>    SESSION.REC<2> = DBGREC<WDBG_SESSION_VALS>    SESSION.REC<3> = DBGREC<WDBG_SESSION_DATE>    SESSION.REC<4> = DBGREC<WDBG_SESSION_TIME>    WRITE SESSION.REC ON F.WEB.SESSION, SESSION.ID  ENDEND* break the query string into 1000 byte chunksN = INT((LEN(QSTR) - 1) / 1000) + 1* build the command lineRUN.ID = DBGREC<WDBG_REQUEST_ID>CMND = 'WDB.INIT ':HANDLER.NAME:'/':RESOURCE.NAME:' ':RUN.ID:'-1-':N:' %% _WDEBUG_MODE_'** run the commandPRINTPRINT 'Executing the request: ':CMNDPRINTMAT WWW.INFO = ""EXECSTART = SYSTEM(12)* send query string as stacked inputFOR I = 1 TO N  DATA QSTR[((I - 1) * 1000) + 1, 1000]NEXT IEXECUTE CMND CAPTURING RESPONSEEXECDUR = SYSTEM(12) - EXECSTARTPRINT 'Request complete. Press <enter> to parse results':INPUT ANS** update the request runtimeDBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_DURATION> = EXECDUR* process the responseLINT.BEFORE = ''LINT.AFTER = ''WARN = ''ERR = ''* Gather lint from before the start tag and after the complete tagDBGREC<WDBG_WARNING> = '' ;* WarningsDBGREC<WDBG_ERROR> = '' ;* ErrorsDBGREC<WDBG_LINT> = '' ;* LintIF RESPONSE<1> = "700 WDB-START" THEN  RESPONSE = DELETE(RESPONSE, 1)END ELSE  TAG = @AM:"700 WDB-START":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '700 WDB-START tag is missing from response'    LINT.BEFORE = RESPONSE    RESPONSE = ''  END ELSE    IF TAG.POS >= 1 THEN      LINT.BEFORE = RESPONSE[1, TAG.POS - 1]      RESPONSE = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    END  ENDENDN = DCOUNT(RESPONSE, @AM)IF RESPONSE<N> = "800 WDB-COMPLETE" THEN  RESPONSE = DELETE(RESPONSE, N)END ELSE  TAG = @AM:"800 WDB-COMPLETE":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '800 WDB-COMPLETE tag missing from response!'  END ELSE    LINT.AFTER = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    RESPONSE = RESPONSE[1, TAG.POS - 1]  ENDEND* Clean up lintIF TRIM(CHANGE(LINT.BEFORE, @AM, '')) = '' THEN LINT.BEFORE = ''IF TRIM(CHANGE(LINT.AFTER, @AM, '')) = '' THEN LINT.AFTER = ''IF LINT.BEFORE <> '' OR LINT.AFTER <> '' THEN  LINT = LINT.BEFORE  IF LINT.BEFORE <> '' AND LINT.AFTER <> '' THEN LINT := @AM:'...':@AM  LINT := LINT.AFTER  DBGREC<WDBG_LINT> = LOWER(LINT)END* Parse the response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''DBGREC<WDBG_RESPONSE_CONTENT> = ''NUM.VARS = 0STATUS.CODE = ''EOH = INDEX(RESPONSE, @AM:@AM, 1) ;* headers end at first blank line in responseIF EOH = 0 THEN EOH = LEN(RESPONSE) + 1N = DCOUNT(RESPONSE[1, EOH - 1], @AM)FOR I = 1 TO N  HDR.LINE = RESPONSE<I>  IF HDR.LINE[1,10] = '500 ERROR ' THEN    ERR = HDR.LINE[11, LEN(HDR.LINE)]    IF STATUS.CODE = '' THEN STATUS.CODE = 500  END ELSE    HDR.VAR = FIELD(HDR.LINE, ':', 1)    HDR.VAL = TRIMF(HDR.LINE[COL2() + 1, LEN(HDR.LINE)])    M = LEN(HDR.VAR)    FOR J = 1 TO M      IF NOT(HDR.VAR[J,1] MATCHES '1A') AND HDR.VAR[J,1] <> '-' THEN        HDR.VAR = ''        EXIT      END    NEXT J    IF HDR.LINE[LEN(HDR.VAR) + 1, 1] <> ':' THEN HDR.VAR = ''    IF HDR.VAR = '' THEN      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = '_BAD_'      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.LINE ;* invalid header line!    END ELSE      IF HDR.VAR = 'X-MVDB-STATUS' THEN        STATUS.CODE = HDR.VAL      END ELSE        NUM.VARS += 1        DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = HDR.VAR        DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.VAL      END    END  ENDNEXT IIF STATUS.CODE = '' THEN STATUS.CODE = 200DBGREC<WDBG_STATUS> = STATUS.CODE* save response contentIF EOH + 2 <= LEN(RESPONSE) THEN  DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(RESPONSE[EOH + 2, LEN(RESPONSE)])ENDDBGREC<WDBG_WARNING> = WARNDBGREC<WDBG_ERROR> = ERRRETURN**----------to.edit:*----------*EDIT.REC = ''EDIT.REC<-1> = '[INFO] (do not edit this section)'EDIT.REC<-1> = 'Date            = ':OCONV(DBGREC<WDBG_DATE>,'D4')EDIT.REC<-1> = 'Time            = ':OCONV(DBGREC<WDBG_TIME>,'MTS')EDIT.REC<-1> = 'Duration        = ':DBGREC<WDBG_DURATION>EDIT.REC<-1> = 'Port            = ':DBGREC<WDBG_PORT>EDIT.REC<-1> = 'Handler         = ':DBGREC<WDBG_HANDLER>EDIT.REC<-1> = 'Resource        = ':DBGREC<WDBG_RESOURCE>EDIT.REC<-1> = 'Controller      = ':DBGREC<WDBG_CONTROLLER>EDIT.REC<-1> = 'Program         = ':DBGREC<WDBG_PROGRAM>EDIT.REC<-1> = 'RequestID       = ':DBGREC<WDBG_REQUEST_ID>EDIT.REC<-1> = 'Method          = ':DBGREC<WDBG_METHOD>EDIT.REC<-1> = 'Path            = ':DBGREC<WDBG_PATH>EDIT.REC<-1> = 'RemoteAddr      = ':DBGREC<WDBG_REMOTE_ADDR>EDIT.REC<-1> = 'Status          = ':DBGREC<WDBG_STATUS>IF DBGREC<WDBG_WARNING> <> '' THEN  EDIT.REC<-1> = 'WARNING: ':DBGREC<WDBG_WARNING>ENDIF DBGREC<WDBG_ERROR> <> '' THEN  EDIT.REC<-1> = 'ERROR: ':DBGREC<WDBG_ERROR>ENDIF DBGREC<WDBG_LINT> <> '' THEN  EDIT.REC<-1> = 'LINT:':@AM:RAISE(DBGREC<WDBG_LINT>)END* Request headers and server variablesEDIT.REC<-1> = @AM:'[HEADERS]'N = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  HDR.VAL = DBGREC<WDBG_HEADER_VALS, I>  EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VALNEXT I* Query string variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[VARS]'  FOR I = 1 TO N    CGI.VAR = DBGREC<WDBG_CGI_VARS, I>    CGI.VAL = DBGREC<WDBG_CGI_VALS, I>    EDIT.REC<-1> = CGI.VAR:SPACE(16-LEN(CGI.VAR)):'= ':CGI.VAL  NEXT IEND* CookiesLOCATE 'HTTP_COOKIE' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  CSTRING = DBGREC<WDBG_HEADER_VALS, POS>END ELSE CSTRING = ''CONVERT ';' TO @AM IN CSTRINGN = DCOUNT(CSTRING, @AM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[COOKIES]'  FOR I = 1 TO N    COOKIE.VAR = TRIM(FIELD(CSTRING<I>, '=', 1))    COOKIE.VAL = CSTRING<I>[COL2() + 1, 99999]    EDIT.REC<-1> = COOKIE.VAR:SPACE(16-LEN(COOKIE.VAR)):'= ':COOKIE.VAL  NEXT IEND* REST parametersLOCATE 'PATH_INFO' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  PATH = DBGREC<WDBG_HEADER_VALS, POS>END ELSE PATH = ''IF PATH[1,1] = '/' THEN PATH = PATH[2,9999]N = DCOUNT(PATH, '/')IF N > 0 THEN  EDIT.REC<-1> = @AM:'[PARAMS]'  FOR I = 3 TO N    PARAM.VAR = 'Param[':(I-2):']'    EDIT.REC<-1> = PARAM.VAR:SPACE(16-LEN(PARAM.VAR)):'= ':FIELD(PATH, '/', I)  NEXT IEND* Session variablesIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    N = DCOUNT(DBGREC<WDBG_SESSION_VARS>, @VM)    IF N > 0 THEN      EDIT.REC<-1> = @AM:'[SESSION]'      EDIT.REC<-1> = '_SessionID      = ':SESSION.ID      IF DBGREC<WDBG_SESSION_DATE> <> '' THEN EDIT.REC<-1> = '_Date           = ':OCONV(DBGREC<20>, 'D4')      IF DBGREC<WDBG_SESSION_TIME> <> '' THEN EDIT.REC<-1> = '_Time           = ':OCONV(DBGREC<21>, 'MTS')      FOR I = 1 TO N        SESSION.VAR = DBGREC<WDBG_SESSION_VARS, I>        EDIT.REC<-1> = SESSION.VAR:SPACE(16-LEN(SESSION.VAR)):'= ':DBGREC<WDBG_SESSION_VALS, I>      NEXT I    END  ENDEND* Request bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  EDIT.REC<-1> = @AM:'[BODY]':@AM:RAISE(THE.BODY)END* Response headersN = DCOUNT(DBGREC<WDBG_RESPONSE_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[RESPONSE_HEADERS]'  FOR I = 1 TO N    HDR.VAR = DBGREC<WDBG_RESPONSE_VARS, I>    HDR.VAL = DBGREC<WDBG_RESPONSE_VALS, I>    EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VAL  NEXT IEND* Response contentTHE.CONTENT = DBGREC<WDBG_RESPONSE_CONTENT>IF THE.CONTENT <> '' THEN  EDIT.REC<-1> = @AM:'[RESPONSE_CONTENT]':@AM:RAISE(THE.CONTENT)END*RETURN**----------from.edit:*----------*SESSION.ID = ''HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* If COOKIES section exists, rebuild HTTP_COOKIE headerCOOKIES = ''SECT = 'COOKIES'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    COOKIE = EDIT.REC<I>    IF COOKIE <> '' THEN      COOKIE.NAME = TRIM(FIELD(COOKIE, '=', 1))      COOKIE.VAL = TRIMF(COOKIE[COL2() + 1, LEN(COOKIE)])      COOKIES := COOKIE.NAME:'=':COOKIE.VAL:';'      IF OCONV(COOKIE.NAME, 'MCU') = 'SESSIONID' THEN SESSION.ID = COOKIE.VAL    END  NEXT I  IF COOKIES[LEN(COOKIES), 1] = ';' THEN COOKIES = COOKIES[1, LEN(COOKIES) - 1]END* If PARAMS section exists, rebuild PATH_INFO headerPARAMS = ''SECT = 'PARAMS'GOSUB find.sectionIF SECT.START > 0 THEN  PNUM = 1  FOR I = SECT.START + 1 TO SECT.END    PARAM = EDIT.REC<I>    IF PARAM <> '' THEN      PARAM.NAME = TRIM(OCONV(FIELD(PARAM, '=', 1), 'MCU'))      PARAM.VAL = TRIMF(PARAM[COL2() + 1, LEN(PARAM)])      IF PARAM.NAME <> 'PARAM[':PNUM:']' THEN EXIT      PARAMS := '/':PARAM.VAL      PNUM += 1    END  NEXT I  IF PARAMS <> '' THEN PARAMS = '/':HANDLER.NAME:'/':RESOURCE.NAME:PARAMS ;* handler & resource come before paramsEND* Get headers and server variablesDBGREC<WDBG_HEADER_VARS> = ''DBGREC<WDBG_HEADER_VALS> = ''NUM.VARS = 0SECT = 'HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])* check for special headers      BEGIN CASE        CASE OCONV(VAR.NAME, 'MCU') = 'HTTP_COOKIE'          IF COOKIES <> '' THEN            VAR.VAL = COOKIES          END        CASE OCONV(VAR.NAME, 'MCU') = 'PATH_INFO'          IF PARAMS <> '' THEN            VAR.VAL = PARAMS          END          IF VAR.VAL[1,1] <> '/' THEN VAR.VAL = '/' : VAR.VAL          IF COUNT(VAR.VAL, '/') >= 2 THEN            HANDLER.NAME = FIELD(VAR.VAL, '/', 2)            RESOURCE.NAME = FIELD(VAR.VAL, '/', 3)          END          DBGREC<WDBG_PATH> = VAR.VAL        CASE OCONV(VAR.NAME, 'MCU') = 'REQUEST_METHOD'          DBGREC<WDBG_METHOD> = VAR.VAL              CASE OCONV(VAR.NAME, 'MCU') = 'REMOTE_ADDR'          DBGREC<WDBG_REMOTE_ADDR> = VAR.VAL      END CASE      NUM.VARS += 1      DBGREC<WDBG_HEADER_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_HEADER_VALS, NUM.VARS> = VAR.VAL    END  NEXT I  DBGREC<WDBG_HANDLER> = HANDLER.NAME  DBGREC<WDBG_RESOURCE> = RESOURCE.NAMEEND* Get form variablesDBGREC<WDBG_CGI_VARS> = ''DBGREC<WDBG_CGI_VALS> = ''NUM.VARS = 0SECT = 'VARS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_CGI_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_CGI_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get bodyDBGREC<WDBG_BODY> = ''SECT = 'BODY'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.BODY = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_BODY> = LOWER(THE.BODY)  ENDEND* Get session stateIF SESSION.FLAG AND SESSION.ID <> '' THEN  DBGREC<WDBG_SESSION_ID> = ''  DBGREC<WDBG_SESSION_VARS> = ''  DBGREC<WDBG_SESSION_VALS> = ''  DBGREC<WDBG_SESSION_DATE> = ''  DBGREC<WDBG_SESSION_TIME> = ''  NUM.VARS = 0  SECT = 'SESSION'  GOSUB find.section  IF SECT.START > 0 THEN    FOR I = SECT.START + 1 TO SECT.END      SESSION.LINE = EDIT.REC<I>      SESSION.VAR = TRIM(FIELD(SESSION.LINE, '=', 1))      SESSION.VAL = TRIMF(SESSION.LINE[COL2() + 1, LEN(SESSION.LINE)])      BEGIN CASE        CASE SESSION.VAR = '_SessionID'          DBGREC<WDBG_SESSION_ID> = SESSION.VAL        CASE SESSION.VAR = '_Date'          DBGREC<WDBG_SESSION_DATE> = ICONV(SESSION.VAL, 'D')        CASE SESSION.VAR = '_Time'          DBGREC<WDBG_SESSION_TIME> = ICONV(SESSION.VAL, 'MTS')        CASE 1          NUM.VARS += 1          DBGREC<WDBG_SESSION_VARS, NUM.VARS> = SESSION.VAR          DBGREC<WDBG_SESSION_VALS, NUM.VARS> = SESSION.VAL      END CASE    NEXT I  ENDEND* Get response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''NUM.VARS = 0SECT = 'RESPONSE_HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get response contentDBGREC<WDBG_RESPONSE_CONTENT> = ''SECT = 'RESPONSE_CONTENT'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.CONTENT = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(THE.CONTENT)  ENDENDRETURN**----------choose.editor:*----------*PRINTLOOP  PRINT 'Select the editor you want to use: 1 = AE, 2 = ED, 3 = other: ':  INPUT ANSUNTIL ANS EQ '' DO  BEGIN CASE    CASE ANS = 1      EDITOR = 'AE'      EXIT    CASE ANS = 2      EDITOR = 'ED'      EXIT    CASE ANS = 3      PRINT 'Enter the verb to invoke your editor: ':      INPUT TMP      PRINT TMP:' OK?':      INPUT ANS      ANS = OCONV(ANS[1,1], 'MCU')      IF ANS = 'Y' THEN        EDITOR = TMP        EXIT      END  END CASEREPEATRETURN**----------find.section:*----------*SECT.START = -1SECT.END = -1TAG = @AM:'[':SECT:']':@AMTAG.POS = INDEX(EDIT.REC, TAG, 1)IF TAG.POS = 0 THEN RETURN ;* Section not foundSECT.START = DCOUNT(EDIT.REC[1, TAG.POS], @AM)SECT.END = DCOUNT(EDIT.REC, @AM)FOR I = SECT.START + 1 TO SECT.END  SECT.LN = EDIT.REC<I>  IF SECT.LN MATCHES '"["1A0A"]"' OR SECT.LN MATCHES '"["1A0A"_"1A0A"]"' THEN* beginning of next section is end of current section    SECT.END = I - 1    EXIT  ENDNEXT IRETURN**----------url.encode:*----------*NEW.STRING = ""UE.LEN = LEN(URLENCODE.STRING)FOR UEX = 1 TO UE.LEN  UE.CHR = URLENCODE.STRING[UEX,1]  UE.CVAL = SEQ(UE.CHR)  BEGIN CASE    CASE UE.CVAL < 32; ENC.FLAG = 1   ;* control character    CASE UE.CVAL = 37 OR UE.CVAL = 38 OR UE.CVAL = 43 OR UE.CVAL = 61; ENC.FLAG = 1 ;* % & + =    CASE UE.CVAL = 127; ENC.FLAG = 1  ;* DEL control character    CASE UE.CVAL >= 252; ENC.FLAG = 1 ;* delimiter character    CASE 1 ; ENC.FLAG = 0  END CASE  IF ENC.FLAG THEN    UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')  END  NEW.STRING := UE.CHRNEXT UEXRETURN**----------fold.string:*----------*NEW.STRING = ''NUM.FOLD = DCOUNT(FOLD.STRING, @AM)MIN.FOLD = MAX.COLS - INT(MAX.COLS / 3)FOR FOLD.IDX = 1 TO NUM.FOLDFOLD.LINE = FOLD.STRING<FOLD.IDX>LOOP WHILE LEN(FOLD.LINE) > MAX.COLS DOFOLD.BRK = 0FOR FOLD.BRK.IDX = MAX.COLS TO MIN.FOLD STEP -1IF FOLD.LINE[FOLD.BRK.IDX, 1] = ' ' THEN    FOLD.BRK = FOLD.BRK.IDX    EXITENDNEXT FOLD.BRK.IDXIF FOLD.BRK = 0 THEN FOLD.BRK = MAX.COLS + 1NEW.STRING<-1> = FOLD.LINE[1, FOLD.BRK - 1]IF FOLD.LINE[FOLD.BRK, 1] = ' ' THEN FOLD.BRK = FOLD.BRK + 1FOLD.LINE = FOLD.LINE[FOLD.BRK, LEN(FOLD.LINE)]REPEATNEW.STRING<-1> = FOLD.LINENEXT FOLD.IDXFOLD.STRING = NEW.STRINGRETURN*END000210WSETINFO0c2SUBROUTINE WSETINFO(InfoVal, InfoItem)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: November 2017* Description: set an element in WWW.INFO***********************************************************************INCLUDE WBPD WWW.INCLUDEIF NUM(InfoItem) AND InfoItem > 0 AND InfoItem <= 50 THEN IF INT(InfoItem) = InfoItem THEN  WWW.INFO(InfoItem) = InfoVal ENDENDRETURNEND00041DWSETCOOKIE0c2SUBROUTINE WSETCOOKIE(COOKIENAME,COOKIEVAR,D,T,PATH,DOMAIN,SECURE)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine sets the value of a cookie.*              **********************************************************************INCLUDE WBPD WWW.INCLUDECOOKIE = COOKIENAME:'=':COOKIEVAR* FIGURE OUT EXPIRATIONIF D # '' THEN  EXPIRES='expires='  DAY=OCONV(D,'DWA')[1,3]  DAY=OCONV(DAY,'MCT')  EXPIRES:=DAY  EXPIRES:=', '  EXPIRES:=OCONV(D,'DD')  EXPIRES:=' '  MONTH=OCONV(D,'DMA')[1,3]  MONTH=OCONV(MONTH,'MCT')  EXPIRES:=MONTH  EXPIRES:=' '  EXPIRES:=OCONV(D,'DY')  EXPIRES:=' '  EXPIRES:=OCONV(T,'MTS')  COOKIE:=';':EXPIRESENDIF PATH # '' THEN  COOKIE:=';path="':PATH:'"'ENDIF DOMAIN # '' THEN  COOKIE:=';domain=':DOMAINENDIF SECURE # '' THEN  COOKIE:=';secure'ENDIF TRIM(COOKIE) # '' THEN  SESSION$COOKIES<-1>=COOKIEENDRETURNEND00022DWGETHEADER0c2SUBROUTINE WGETHEADER(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: extract value of an HTTP request header***********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''TEMPVARS = OCONV(CGI$HEADERVARS, 'MCU')LOCATE OCONV(VarName, 'MCU') IN TEMPVARS SETTING POS THEN  VarValue = CGI$HEADERVALS<POS>ENDRETURNEND00019EWGETBODY0c2SUBROUTINE WGETBODY(RequestBody)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: March 2017* Description: return the BODY of the request***********************************************************************INCLUDE WBPD WWW.INCLUDERequestBody = CGI$BODYRETURNEND0001F3WFLUSH0c2SUBROUTINE WFLUSH************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This program calls WSETBUFFER(FALSE) then *                calls WSEND("")*              **********************************************************************INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*CALL WSETBUFFER(FALSE)CALL WSEND("")RETURNEND001E65WRESTTEST0c2PROGRAM WRESTTEST************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 01/31/2017* Description: this is a simple REST test***********************************************************************INCLUDE WBPD WWW.INFORESTVERSION = "1.1"JSTATUS = 'ok'JSTATUSMSG = ''** Supplied function for setting content type.*CALL WSETCONTENTTYPE("application/json")*** Set a custom header with supplied function.*CALL WSETHEADER("restversion",RESTVERSION)** Start building our json object, ugly way until objects.*JSON = '{'** Need to know all the variables*CALL WGETINFO(VARS,CGI_VARS)CALL WGETINFO(VALS,CGI_VALS)** Need to know all the headers*CALL WGETINFO(HEADERVARS,CGI_HEADERVARS)CALL WGETINFO(HEADERVALS,CGI_HEADERVALS)** Set our rest version, this will be replaced in the future with objects*CALL WBUILDJSON(JSON,"RestVersion",RESTVERSION,RERR)** WHO*EXECUTE 'WHO' CAPTURING WRESULTCALL WBUILDJSON(JSON,'Who',WRESULT<1,1,1>,RERR)** HOSTNAME**EXECUTE 'hostname' CAPTURING HOSTNAME*CALL WBUILDJSON(JSON,'hostname',HOSTNAME<1,1,1>,RERR)** IFCONFIG**EXECUTE 'ifconfig' CAPTURING RESULT*GOSUB exportresult*JSON:=', "ifconfig": ':R** PWD*EXECUTE '!pwd' CAPTURING PWDCALL WBUILDJSON(JSON,'pwd',PWD,RERR)** PS**EXECUTE 'ps' CAPTURING RESULT*GOSUB exportresult*JSON:=', "ps": ':R*CALL WBUILDJSON(JSON,'ps',PSRESULT,RERR)** JSHOW**EXECUTE 'jshow -v WRESTTEST' CAPTURING RESULT*GOSUB exportresult*JSON := ', "wresttest": ':R** Build out vars, we have to build a subobject and manually* put it into our main json object.* Right now the primary function of WBUILDJSON is to properly* encode the variable section.*JSONVARS = '{'FOR X = 1 TO DCOUNT(VARS, @AM)    * Lets test our WGETVAR routine    VARNAME = VARS<X>    *    * WGETVAR is our customer supplied function to get variables    * usually sent by browser as form variables, either in the body    * or in the URL query string.    *    CALL WGETVAR(THISVAR,VARNAME)    CALL WBUILDJSON(JSONVARS,VARNAME,THISVAR,RERR)NEXT XJSONVARS := '}'** Here is our messy add, todo is to adjust WBUILDJSON to be able* to do this.*JSON := ', "vars": ':JSONVARS** Get all our cookies*CALL WGETINFO(CVARS,CGI_CVARS)CALL WGETINFO(CVALS,CGI_CVALS)COOKIES = '{'NUM_COOKIES = DCOUNT(CVARS,@AM)FOR A = 1 TO NUM_COOKIES    COOKIENAME = CVARS<A>    *    * This is our customer supplied function to get cookies.    *    CALL WGETCOOKIE(COOKIEVALUE,COOKIENAME)    CALL WBUILDJSON(COOKIES,COOKIENAME,COOKIEVALUE,RERR)NEXT ACOOKIES := '}'JSON := ', "cookies": ':COOKIES** Build out headers*JSONHEADERS = '{'numheaders = DCOUNT(HEADERVARS, @AM)FOR X = 1 TO numheaders    HEADERNAME = HEADERVARS<X>    *    * This is our customer supplied function to get headers.    *    CALL WGETHEADER(THISVAR,HEADERNAME)    CALL WBUILDJSON(JSONHEADERS,HEADERNAME,THISVAR,RERR)NEXT XJSONHEADERS := '}'JSON := ', "headers": ':JSONHEADERS** This is where the raw body is put, this is used primarily for* AJAX functions where the body should be a json string.*CALL WGETBODY(BODY)CALL WBUILDJSON(JSON,'body',BODY,RERR)** Set our test cookie*COOKIE.NAME = 'wresttestcookie'COOKIE.VALUE = TIMEDATE()CONVERT ' :' TO '' IN COOKIE.VALUE** Our function for setting a cookie.  Hides all the formatting requirements* and correctly sets expiration date/time using PICK dates and times.** CALL WSETCOOKIE(NAME,VALUE,EXPDATE,EXPTIME,DOMAIN,PATH,SECURE)*CALL WSETCOOKIE(COOKIE.NAME,COOKIE.VALUE,DATE()+1,TIME()+300,'','','')** Now lets process our command requests** This section allows this REST request to perform some functions** Format is* ...api/wresttest/<key>/<command>/<opt1>/<opt2>/<opt3>/etc** key = basically a password and stored in the config file* command = a command to execute, leaving blank does the same as help* opt# = options that the commands would use** Remember that for us, key is the first REAL param, command is 2, opt# is 3 on*CALL WGETPARAM(REQKEY,1)IF REQKEY = '' THEN GOTO end.of.program; * no key then ignore** Function to get our options already broken out.*CALL WGETCONFIG(APIKEY,'APIKEY')IF APIKEY = '' THEN    *    * The way I like to handle errors, see end of program right before stop    *    JSTATUS = 'error'    JSTATUSMSG = 'No api key setup in WDB.RESOURCE'    GOTO end.of.programENDIF OCONV(APIKEY,'MX0C') # OCONV(REQKEY,'MX0C') THEN ;*UD*    JSTATUS = 'error'    JSTATUSMSG = 'Invalid api key'    GOTO end.of.programENDGOSUB processrest*end.of.program: *** Build our default status/result*CALL WBUILDJSON(JSON,'status',JSTATUS,RERR)CALL WBUILDJSON(JSON,'statusmsg',JSTATUSMSG,ERR)** Close out our object*JSON := '}'** Send string json to the client. This can be done anytime and multiple times.*CALL WSEND(JSON)*STOP*processrest: *** Build new object to store rest responses*RJSON = '{'** Get our command*CALL WGETPARAM(COMMAND,2)COMMAND = OCONV(COMMAND,'MCU')** Respond in REST response our requested command, nice for debugging*CALL WBUILDJSON(RJSON,'requestedcommand',COMMAND,RERR)** Now process our commands*BEGIN CASE    CASE COMMAND = 'DEBUGON'        CALL WGETPARAM(DEBUGLINE,3)        IF DEBUGLINE = '' OR NOT(NUM(DEBUGLINE)) THEN            JSTATUS = 'error'            JSTATUSMSG = 'You must put in a debug option as next paramater'        END ELSE            JSTATUSMSG = 'Setting debug to on for ':DEBUGLINE            CALL WSETCOOKIE('wrestapidebug',DEBUGLINE,DATE()+1,TIME()+300,'','',' ')        END    CASE COMMAND = 'DEBUGOFF'        CALL WSETCOOKIE('wrestapidebug','',DATE()-1,TIME(),'','','')    CASE COMMAND = 'ENV'        * Get environment variables        EXECUTE '!env' CAPTURING ENVIRONMENT        *        * New object to store response        *        J = '{'        NUMENV = DCOUNT(ENVIRONMENT,@AM)        FOR A = 1 TO NUMENV            ENV = ENVIRONMENT<A>            ENV.NAME = FIELD(ENV,'=',1)            ENV.VALUE = FIELD(ENV,'=',2,9999)            IF TRIM(ENV.NAME) # '' THEN                CALL WBUILDJSON(J,ENV.NAME,ENV.VALUE,RERR)            END        NEXT A        J := '}'        RJSON := ', "environment": ':J    CASE COMMAND = 'USERS'        EXECUTE 'LISTU' CAPTURING RESULT        GOSUB exportresult        RJSON := ', "users": ':R    *CASE COMMAND = 'JSHOW'        *CALL WGETPARAM(OPTN,3)        *CMND = 'jshow -v ':OPTN        *EXECUTE CMND CAPTURING RESULT        *GOSUB exportresult        *RJSON := ', "jshow": ':R    *CASE COMMAND = 'JLICENSINGINFO'        *EXECUTE 'JLICENSINGINFO' CAPTURING RESULT        *GOSUB exportresult        *RJSON := ', "jlicensinginfo": ':R    CASE 1; * DO HELP        C = '{'        CALL WBUILDJSON(C,'help','List all commands',RERR)        CALL WBUILDJSON(C,'debugon','Turn debug on, next param is line no',RERR)        CALL WBUILDJSON(C,'debugoff','Turn off debugging',RERR)        *CALL WBUILDJSON(C,'listweberrors','Lists web errors',RERR)        CALL WBUILDJSON(C,'env','List Environment Variables',RERR)        CALL WBUILDJSON(C,'users','List users',RERR)        *CALL WBUILDJSON(C,'jshow','Issue jshow, next param is program/file',RERR )        *CALL WBUILDJSON(C,'jlicensinginfo','Licensing information',RERR)        C := '}'        RJSON := ', "commands": ':CEND CASERJSON := '}'JSON := ', "rest": ':RJSONRETURN*exportresult: *NUM.LINES = DCOUNT(RESULT,@AM)R= '[ 'FOR XX = 1 TO NUM.LINES    LINE = RESULT<XX>    CALL WSWAP(LINE,CHAR(9),'     ')    CALL WENCODEJSON('',LINE,OUTLINE)    IF XX > 1 THEN R := ','    R := '"':OUTLINE:'"'NEXT XXR := ']'RETURN*END0002E8WBUILDJSON0c2SUBROUTINE WBUILDJSON(JSONSTRING,NAME,VALUE,RETURNERROR)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 8/13/2016* Description: build json string***********************************************************************RETURNERROR=''*CALL FIX.ESCAPE.DATA.JSON('\',NAME,OUT_NAME)*CALL FIX.ESCAPE.DATA.JSON('\',VALUE,OUT_VALUE)CALL WENCODEJSON('',NAME,OUT_NAME)CALL WENCODEJSON('',VALUE,OUT_VALUE)TEMP_STRING='"':OUT_NAME:'":"':OUT_VALUE:'"'L=LEN(JSONSTRING)LAST_C=JSONSTRING[L,1]IF LAST_C = "}" OR LAST_C='"' OR LAST_C = "]" THEN TEMP_STRING=', ':TEMP_STRINGJSONSTRING:=TEMP_STRINGRETURNEND00198FWSEND0c2SUBROUTINE WSEND(FORM)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Original Author: Luke J. Bucklin, Sierra Bravo* Date: 2/29/00* Modified By  : Mike Schmidt, Sierra Bravo* Modified By  : Peter Schellenbach & Patrick Payne, Zumasys* Purpose: Send the web page.* Forked off new version as WSEND for REST services based on original WEB.SEND** Modified by Peter Schellenbach 09-21-2017*  Removed extra @AM appended to the content to prevent extra CR from being sent in response** Modified by Peter Schellenbach 10-18-2017*  Removed duplicate debug info being sent in html or xml output. Removed logging*  code as this is handled by WDB.INIT / JAGENTWDBINIT when saving debug info.** Modified by Patrick Payne 04-29-2020*  Issue #5.  HTTP wants new lines to be CHAR(13):CHAR(10).  We cannot depend on*  pick PRINT statements to output the new line since one linux it will only do*  char(10).  All output statements are updated to*  PRINT <DATA>:NEW.LINE:    where new.line=CHAR(13):CHAR(1)*************************************************************************                1) Header Management: This program will check to see*                   if the content type has been written to the browser*                   before ever printing anything to standard out.  If*                   the headers have not been sent, the program will print*                   the headers using the SESSION$CONTENT.TYPE,*                   SESSION$HEADERS, and SESSION$COOKIES session variables.*                   The program will then set the SESSION$CONTENT.SENT*                   variable.*                   WARNING: This program assumes that the global SESSION*                   variables were setup prior to using this subroutine.*                   WARNING: The SESSION$OUTBUF.SIZE should not be relied*                   upon to prevent the buffer from exceeding the set limit.*                   This program simply flushes the buffer if it exceeds*                   the set size limit.**                2) Buffer Management: Instead of always printing every*                   thing to standard out, by default the program will*                   write everything passed into into the SESSION$OUTBUF*                   variable.  This program will then flush the buffer*                   under certain situations.  The first is if the buffer*                   size reaches the limit set in SESSION$OUTBUF.SIZE. If*                   this happens the prgram will flush the buffer then*                   reinitialize it.  The second is if the SESSION$OUTBUF.FLAG*                   is set to FALSE, then this program will always flush*                   the buffer.**                3) The program will display debug information if the global*                   variable SESSION$GLOBAL.DEBUG flag is >= 3.************************************************************************* Add the incoming string to the buffer.INCLUDE WBPD WWW.INCLUDE*NEW.LINE = CHAR(13):CHAR(10); * We need to force this as a new lineSHOW.SESSION.VARS = 0IF SESSION$GLOBAL.DEBUG >= 3 THEN  OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SHOW.SESSION.VARS = 1END*IF FORM <> '' THEN  CALL WSWAP(FORM,'<!-- CGI$PATH -->',CGI$PATH)*PJS 09-21-2017*SESSION$OUTBUF := FORM:@AM  SESSION$OUTBUF := FORM ; *PJS 09-21-2017*END** If the buffer is greater then the max size or the buffer flag is false then flush.IF LEN(SESSION$OUTBUF) >= SESSION$OUTBUF.SIZE OR NOT(SESSION$OUTBUF.FLAG) THEN* Before flushing, check to see if the headers have been send.  IF NOT(SESSION$CONTENT.SENT) THEN    IF SESSION$STATUS.CODE > 0 THEN* 04-21-17 send the status code before headers      PRINT "X-MVDB-STATUS: ":SESSION$STATUS.CODE:NEW.LINE:    END* The headers have not been sent so send them now.    IF SESSION$CONTENT.TYPE = "" THEN      CALL WSETCONTENTTYPE("application/json")    END* If there are any cookies that need to be set, do it now.    PRINT "Content-type: ":SESSION$CONTENT.TYPE:NEW.LINE:* If there are any cookies that need to be set, do it now.    FOR I = 1 TO DCOUNT(SESSION$COOKIES, @AM)      COOKIE = SESSION$COOKIES<I>      IF INDEX(COOKIE, "; path=", 1) + INDEX(COOKIE, ";path=", 1) = 0 THEN COOKIE := "; path=/"      PRINT "Set-Cookie: ":COOKIE:NEW.LINE:    NEXT I* If there are any additional headers that need to be set, do it now.    PRINT 'Cache-Control: no-cache'    FOR I = 1 TO DCOUNT(SESSION$HEADERS, @AM)      PRINT SESSION$HEADERS<I>:NEW.LINE:    NEXT I* Now print the blank line that ends the headers.    PRINT    IF INDEX(SESSION$CONTENT.TYPE,'html',1) THEN      IF INDEX(SESSION$OUTBUF<1>,'<!DOCTYPE',1) = 0 THEN        PRINT '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"':NEW.LINE:        PRINT '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">':NEW.LINE:      END    END* Set the SESSION$CONTENT.SENT variable so next time we know not to send the headers.    SESSION$CONTENT.SENT = 1* From this point on, do not buffer.    IF SESSION$OUTBUF.FLAG THEN      CALL WSETBUFFER(0)    END  END  LINE.CNT = DCOUNT(SESSION$OUTBUF, @AM)  FOR LINE.J = 1 TO LINE.CNT    PRINT SESSION$OUTBUF<LINE.J>:NEW.LINE:  NEXT LINE.J  IF SESSION$GLOBAL.DEBUG >= 3 THEN    IF INDEX(SESSION$CONTENT.TYPE,'xml',1) OR INDEX(SESSION$CONTENT.TYPE,'html',1) THEN* If the debug flag is set then dump all the session information to the browser.      PRINT '<!-- Debug Information generated by WEB.SEND.  This feature can be turned off by':NEW.LINE:      PRINT '     setting the SESSION$GLOBAL.DEBUG = "1" in the initalization program     -->':NEW.LINE:      PRINT '<!-- START DEBUG OUPUT ':NEW.LINE:      PRINT '     GET AND POST VARS:':NEW.LINE:      FOR I = 1 TO DCOUNT(CGI$VARS, @AM)        PRINT '     ':CGI$VARS<I>:' = ':CGI$VALS<I>:NEW.LINE:      NEXT I      PRINT      IF SHOW.SESSION.VARS THEN        PRINT '    SESSION VARIABLES:':NEW.LINE:        PRINT '    SESSION$ID = ':SESSION$ID:NEW.LINE:        READ REC FROM F.WEB.SESSION, SESSION$ID THEN          PRINT '    SESSION DATE = ':OCONV(REC<3>,'D4/'):NEW.LINE:          PRINT '    SESSION TIME = ':OCONV(REC<4>,'MTS,'):NEW.LINE:          FOR I = 1 TO DCOUNT(REC<1>, @VM)            PRINT '    ':REC<1,I>:' = ':REC<2,I>:NEW.LINE:          NEXT I        END      END      PRINT '    END DEBUG OUTPUT -->':NEW.LINE:      PRINT NEW.LINE:    END  END  SESSION$OUTBUF = ''ENDRETURNEND0014E9WPARSEJSON0c2SUBROUTINE WPARSEJSON(JSON_STRING,JSON_REQUEST,JSON_RESULT,JSON_ERRORS)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: 8/13/2016* Description: this is to be a simple json parser, it will not be high performance!!************************************************************************* COMMAND WILL BE QM STYLE** object or #/object or #/object or #** lets do this VERY ugly, we know what we are looking for should be in the format* "key":  or "key" :*JSON_ERRORS=''JSON_RESULT=''MAX_LENGTH=LEN(JSON_STRING)FIRST_KEY=FIELD(JSON_REQUEST,'/',1); * WE CAN ONLY DO SINGLE DEPTH ON THIS VERSIONIF FIRST_KEY[1,1]='[' THEN  GOSUB getobject  RETURNENDSEARCH_STRING1='"':FIRST_KEY:'":'SEARCH_STRING2='"':FIRST_KEY:'" :'POS=INDEX(JSON_STRING,SEARCH_STRING1,1)IF NOT(POS) THEN  POS=INDEX(JSON_STRING,SEARCH_STRING2,1)ENDIF NOT(POS) THEN  JSON_ERRORS=-1  JSON_ERRORS<2>='COULD NOT FIND KEY ':FIRST_KEY  PRINT 'ERROR'  RETURNENDTEMP_DATA=JSON_STRING[POS,MAX_LENGTH]*PRINT 'TEMP_DATA=':TEMP_DATA* NOW LETS CHOP TO OUR FIRST :POS2=INDEX(TEMP_DATA,':',1)TEMP_DATA=TEMP_DATA[POS2+1,MAX_LENGTH]* NOT SURE IF WE HAVE TO DEAL WITH DATA BEING NOT IN QUOTES, TO MAKE SURE WE ARE GOING TO INSPECT THE NEXT TWO POSITIONS* AND MAKE SURE*PRINT 'TEMP_DATA=':TEMP_DATATEMP_DATA=TRIM(TEMP_DATA,' ','L')BEGIN CASE  CASE TEMP_DATA[1,1] = '"' OR TEMP_DATA[2,1] = '"'* QUOTES    TEMP_DATA=FIELD(TEMP_DATA,'"',2,9999)*PRINT 'TEMP_DATA=':TEMP_DATA* WE CANNOT RELY ON IT JUST BEING THE NEXT QUOTE DUE TO ESCAPING !!@#$#$    LEN_STRING=LEN(TEMP_DATA)    FOUND_QUOTE=0    LAST_C=''    FOR X=1 TO LEN_STRING UNTIL FOUND_QUOTE      C=TEMP_DATA[X,1]      NEXTC=TEMP_DATA[X+1,1]*PRINT 'C=':C:' NEXT_C=':NEXT_C      IF C='\' AND NEXTC='"' THEN        JSON_RESULT:='"'        X+=1        CONTINUE      END      IF C='"' THEN        FOUND_QUOTE=1        EXIT      END ELSE        JSON_RESULT:=C*PRINT 'JSON_RESULT=':JSON_RESULT      END      IF X > LEN_STRING THEN FOUND_QUOTE=1    NEXT X  CASE TEMP_DATA[1,1]='[' OR TEMP_DATA[2,1]='['; * WE ARE PULLING AN ARRAY.  THIS IS VERY MESSY.  IT CAN ONLY HANDLE A SINGLE ARRAY. ANY MORE NESTING AND WE ARE BROKE* WE NEED TO LOOP UNTIL WE SEE THE NEXT ] THAT IS NOT IS A INSIDE QUOTES    LEN$STRING=LEN(TEMP_DATA)    FOUND$BRACKET=0    LAST$C=''    INSIDE$QUOTES=0    FOR X=1 TO LEN$STRING UNTIL FOUND$BRACKET      C=TEMP_DATA[X,1]      BEGIN CASE        CASE C=']' AND NOT(INSIDE$QUOTES); FOUND$BRACKET=1        CASE C='"' AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C="'" AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C='"'; INSIDE$QUOTES=1        CASE C="'"; INSIDE$QUOTES=1      END CASE      JSON_RESULT:=C    NEXT X  CASE TEMP_DATA[1,1]='{' OR TEMP_DATA[2,1]='['; * WE ARE PULLING AN ARRAY.  THIS IS VERY MESSY.  IT CAN ONLY HANDLE A SINGLE ARRAY. ANY MORE NESTING AND WE ARE BROKE* WE NEED TO LOOP UNTIL WE SEE THE NEXT ] THAT IS NOT IS A INSIDE QUOTES    LEN$STRING=LEN(TEMP_DATA)    FOUND$BRACKET=0    LAST$C=''    INSIDE$QUOTES=0    FOR X=1 TO LEN$STRING UNTIL FOUND$BRACKET      C=TEMP_DATA[X,1]      BEGIN CASE        CASE C='}' AND NOT(INSIDE$QUOTES); FOUND$BRACKET=1        CASE C='"' AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C="'" AND INSIDE$QUOTES; INSIDE$QUOTES=0        CASE C='"'; INSIDE$QUOTES=1        CASE C="'"; INSIDE$QUOTES=1      END CASE      JSON_RESULT:=C    NEXT X  CASE 1* IT SHOULD BE A NUMBER ONLY    IF TEMP_DATA[1,1]=' ' THEN TEMP_DATA=TEMP_DATA[2,MAX_LENGTH]* NEXT CHARACTER WILL EITHER BE A },OR SPACXE    NEXT1=INDEX(TEMP_DATA,' ',1)    NEXT2=INDEX(TEMP_DATA,'}',1)    NEXT3=INDEX(TEMP_DATA,',',1)    N=NEXT1    IF NEXT2 < N THEN N=NEXT2    IF NEXT3 < N THEN N=NEXT3    JSON_RESULT=TEMP_DATA[1,N-1]END CASERETURN*getobject: *OBJECTNUMBER=FIELD(FIRST_KEY,']',1)OBJECTNUMBER=FIELD(OBJECTNUMBER,'[',2)INSIDE$QUOTES=0OBJECTCOUNT=0CHARCNTR=0NESTCOUNT=0JSON_RESULT=''DOINGCOUNT=0LEN_JSON_STRING=LEN(JSON_STRING)IF OBJECTNUMBER='#' THEN  OBJECTNUMBER=99999999  DOINGCOUNT=1ENDLOOP  CHARCNTR+=1  IF CHARCNTR > LEN_JSON_STRING THEN EXIT  C=JSON_STRING[CHARCNTR,1]  BEGIN CASE    CASE NOT(INSIDE$QUOTES) AND C='"'      JSON_RESULT:=C      INSIDE$QUOTES=1    CASE INSIDE$QUOTES AND C='"'      JSON_RESULT:=C      INSIDE$QUOTES=0    CASE INSIDE$QUOTES      JSON_RESULT:=C    CASE C='{' AND NOT(NESTCOUNT)* WE HAVE THE START OF OUR OBJECT      JSON_RESULT=C      NESTCOUNT=1      OBJECTCOUNT+=1    CASE C='{' AND NOT(INSIDE$QUOTES)* GOING A NEXT DEEPER      JSON_RESULT:=C      NESTCOUNT+=1    CASE C='}'      JSON_RESULT:=C      NESTCOUNT=NESTCOUNT-1      IF NESTCOUNT = 0 THEN        IF OBJECTNUMBER=OBJECTCOUNT-1 THEN          EXIT; * WE HAVE OUR OBJECT        END ELSE          NESTCOUNT=0          JSON_RESULT=''; * RESET OUR OBJECT        END      END    CASE NESTCOUNT=0; * DO NOTHING    CASE 1      JSON_RESULT:=C  END CASE  IF 0 THEN    PRINT C,'NESTCOUNT=':NESTCOUNT:' OBJECTCOUNT=':OBJECTCOUNT:' INQUOTE=':INSIDE$QUOTES:' CHARCNTR=':CHARCNTR  END  IF DOINGCOUNT THEN JSON_RESULT=OBJECTCOUNTREPEATIF 0 THEN  PRINT JSON_RESULT  PRINT  PRINT JSON_STRING[1,CHARCNTR+50]  INPUT WAITENDRETURNEND0002BEWGETPARAM0c2SUBROUTINE WGETPARAM(ParamVal, ParamNum)************************************************************************ Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Peter Schellenbach, Zumasys* Date: March 2017* Description: return a parameter from the URL. Assume the* URL is in the format:**   http://api.hostname.com/api/resource/key/command/opt1/opt2/opt3** ParamNum = 1 ParamVal = key*            2            command*            3            opt1*            4            opt2*            5            opt3***********************************************************************INCLUDE WBPD WWW.INCLUDEParamVal = CGI$RESTPARAMS<ParamNum>RETURNEND0006A0WSETBUFFER0c2SUBROUTINE WSETBUFFER(B.VAL)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Updated by: Peter Schellenbach, Zumasys* Date: November 2017* Description  : This program sets the SESSION$OUTBUF.FLAG and optionally*                SESSION$OUTBUF.SIZE variables to enable or disable*                buffering of output generated by WSEND. If buffering*                is enabled, be sure to call WFLUSH to flush the final*                buffer content.**                B.VAL = 0 : disable buffering*                B.VAL = 1 : enable buffering using current buffer size*                B.VAL > 1 : enable buffering and set buffer size to*                            this value.**                By default buffering is disabled. If buffering will be*                used, call WSETBUFFER before the first call to WSEND.*                If the size of buffer content ever exceeds the buffer*                size, the buffer is flushed to the client along with*                any headers, and buffering is disabled.*              **********************************************************************INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*IF NUM(B.VAL) AND B.VAL > 0 AND B.VAL <= 1000000 THEN  * Set buffer size and enable buffering  SESSION$OUTBUF.SIZE = B.VAL  SESSION$OUTBUF.FLAG = TRUEEND ELSE  * Enable or disable buffering  IF B.VAL # TRUE AND B.VAL # FALSE THEN    IF B.VAL = "" THEN      B.VAL = FALSE    END ELSE      B.VAL = TRUE    END  END  SESSION$OUTBUF.FLAG = B.VALENDRETURNEND0002A5WSETHEADER0c2SUBROUTINE WSETHEADER(VarName, VarValue)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: set a value of HTTP response header** Updated by Peter Schellenbach, 09-21-2017 to call WSETCONTENTTYPE when setting the Content-Type header***********************************************************************INCLUDE WBPD WWW.INCLUDEIF OCONV(VarName,'MCU') = 'CONTENT-TYPE' THEN  CALL WSETCONTENTTYPE(VarValue)END ELSE  HEADER_LINE = VarName:': ':VarValue  SESSION$HEADERS<-1> = HEADER_LINEENDRETURNEND0001F5WGETCONFIG0c2SUBROUTINE WGETCONFIG(VarValue, VarName) ************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: extract a configuration value***********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''LOCATE VarName IN CGI$CONFIG<1,1> SETTING POS THEN  VarValue = CGI$CONFIG<1,2,POS>ENDRETURNEND000244WSETVAR0c2SUBROUTINE WSETVAR(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: update value of a request variable***********************************************************************INCLUDE WBPD WWW.INCLUDETEMPVARS = OCONV(CGI$VARS, 'MCU')LOCATE OCONV(VarName, 'MCU') IN TEMPVARS SETTING POS THEN  CGI$VALS<POS> = VarValueEND ELSE  CGI$VARS<-1> = VarName  CGI$VALS<-1> = VarValueENDRETURNEND000291WSETSTATUS0c2SUBROUTINE WSETSTATUS( STATUS.CODE )*********************************************************************** Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written By   : Peter Schellenbach* Date Written : 04/21/2017* Description  : This program sets the response status code sent*                back to client. Successful requests should return*                status code 200 (this is the default). Status code*                500 indicates a generic server failure.*              **********************************************************************INCLUDE WBPD WWW.INCLUDESESSION$STATUS.CODE = STATUS.CODERETURNEND000217WGETVAR0c2SUBROUTINE WGETVAR(VarValue, VarName)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description: extract value of a request variable***********************************************************************INCLUDE WBPD WWW.INCLUDEVarValue = ''TEMPVARS = OCONV(CGI$VARS, 'MCU')LOCATE OCONV(VarName, 'MCU') IN TEMPVARS SETTING POS THEN  VarValue = CGI$VALS<POS>ENDRETURNEND000256WSETCONTENTTYPE0c2SUBROUTINE WSETCONTENTTYPE(CONTENTTYPE)************************************************************************ Copyright (C) 2016 Zumasys, Inc., All Rights Reserved** Written by: Patrick Payne, Zumasys* Date: December 2016* Description  : This subroutine sets the SESSION$CONTENT.TYPE variable.*                This value is used in the Content-Type HTTP header*                in the response sent to the client.*              **********************************************************************INCLUDE WBPD WWW.INCLUDESESSION$CONTENT.TYPE=CONTENTTYPERETURNEND0000EERSS.FEEDS0c000005DFEEDS0c2Available RSS FeedsRSS Feeds available on this serverSUB.FEEDS.SELSUB.FEEDS.ITEM000078RUNTIME-ERRORS0c2Basic Runtime ErrorsData basic runtime errors.SUB.RE.SELSUB.RE.ITEMDashboard Accountaccount=TLDB006E09MVDB.CONTROL0c000024ECOMPILE.SETUP0c2BASIC %FILENAME% %ITEMNAME%* To configure the compile command when using the web editor* edit line # 1 of this record to contain the appropriate syntax.** Example # 1 - Standard compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME%** Example # 2 - FLASH compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME% (O** Example # 3 - Standard compile using COMPILE* 001 COMPILE %FILENAME% %ITEMNAME%** Only line # 1 of this record is used, all other lines of this record are ignored.* If this record is deleted, the default behavior is:* COMPILE %FILENAME% %ITEMNAME%0000A1FC2DPIE.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' pieRadius='[RADIUS]' animation='0' > [CHART.DATA]</graph>0000DEFC3DPIE.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' showPercentageInLabel='0' pieYScale='45' pieRadius='[RADIUS]' animation='0' pieFillAlpha='100' > [CHART.DATA]</graph>0000A9FCAREA2D.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]'> [CHART.DATA]</graph>0000A9FCBAR2D.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]' > [CHART.DATA]</graph>00009BFCCOLUMN2D.SETTINGS0c2<graph caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]' > [CHART.DATA]</graph>0000ADFCCOLUMN3D.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]'  decimalPrecision='0' animation='0' yaxisname='[YMEMO]' xaxisname='[XMEMO]' > [CHART.DATA]</graph>0000A6FCDOUGHNUT2D.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' pieRadius='[RADIUS]' animation='0' > [CHART.DATA]</graph>0000A7FCLINE.SETTINGS0c2<graph bgcolor='ffffff' caption='[CHART.TITLE]' animation='0' decimalPrecision='0'  yaxisname='[YMEMO]' xaxisname='[XMEMO]'> [CHART.DATA]</graph>000C53FCMAP.NAMES0c2AfghanistanAfricaAlabamaAlaskaAlbaniaAlbertaAlgeriaAndorraAngolaAntiguaArgentinaArizonaArkansasArmeniaAsia3AsiaGeorgiaAsiaAustralia2AustraliaAustriaAzerbaijanBahamasBahrainBangladeshBarbadosBelarusBelgiumBelizeBeninBhutanBoliviaBosniaHerzegovinaBotswanaBrazilRegionBrazilBritishColumbiaBruneiBulgariaBurkinaFasoBurmaBurundiCaliforniaCambodiaCameroonCanadaCapeVerdeCaymanIslandsCentralAfricanRepublicCentralAmerica2CentralAmericaCentralAmericawithCaribbeanCentralEuropeanRegionChadChileChina2ChinaColombiaColoradoComorosCongoConnecticutCostaRicaCoteDivoireCroatiaCubaCyprus2CyprusCzechRepublicDelawareDemocraticRepublicofCongoDenmarkRegionDenmarkDistrictofColumbiaDjiboutiDominicanRepublicDominicaEastEuropeanRegionEastTimorEcuadorEgyptElSalvadorEnglandRegionEnglandEquatorialGuineaEritreaEstoniaEthiopiaEurope2EuropeRegionEuropeEuropewithcountriesFalklandIslandFijiFinlandFloridaFranceDepartmentFranceFrenchGuianaGabonGambiaGeorgiaGermanyGhanaGreeceGreenlandGrenadaGuatemalaGuineaBissauGuineaGuyanaHaitiHawaiiHondurasHongKongHungaryRegionsHungaryIcelandIdahoIllinoisIndianaIndiaIndonesiaIowaIranIraqIrelandIsraelItalyJamaicaJapanJordanKansasKazakhstanKentuckyKenyaKiribatiKuwaitKyrgyzstanLaosLatviaLebanonLesothoLiberiaLibyaLiechtensteinLithuaniaLouisianaLuxembourgMacauMacedoniaMadagascarRegionsMadagascarMaineMalawiMalaysiaMaliMaltaManitobaMarshallIslandMarylandMassachusettsMauritaniaMauritiusMexicoMichiganMicronesiaMiddleEastMinnesotaMississippiMissouriMoldovaMonacoMongoliaMontanaMontenegroMoroccoMozambiqueNamibiaNauruNebraskaNepalNetherlandNevadaNewBrunswickNewCaledoniaNewfoundlandandLabradorNewHampshireNewJerseyNewMexicoNewWorldNewYorkNewZealandNicaraguaNigeriaNigerNorthAmericaNorthAmerica_WOCentralNorthCarolinaNorthDakotaNorthEuropeanRegionNorthIrelandNorthKoreaNorthWestTerritoriesNorwayRegionNorwayNovaScotiaNunavutOceaniaOhioOklahomaOmanOntarioOregonPakistanPalauPanamaPapuaNewGuineaParaguayPennsylvaniaPeruPhilippinesPolandCountiesPolandPortugalPrinceEdwardIslandPuertoRicoQatarQuebecRhodeIslandRomaniaRussiaRwandaSaintKittsandNevisSaintLuciaSaintVincentandtheGrenadinesSamoaSanMarinoSaoTomeandPrincipeSaskatchewanSaudiArabiaScotlandRegionScotlandSenegalSerbiaSeychellesSierraLeoneSingaporeSlovakiaSloveniaSolomonIslandSomaliaSouthAfricaSouthAmericaSouthCarolinaSouthDakotaSouthEuropeanRegionSouthKoreaSpainProvincesSpainSriLankaSudanSurinameSwazilandSwedenSwitzerlandSyriaTaiwanTajikistanTanzaniaTennesseeTexasThailandTibetTogoTongaTrinidadandTobagoTunisiaTurkeyTurkmenistanTuvaluUAEUgandaUK7UkraineUKUruguayUSACentralRegionUSANorthEastRegionUSANorthWestRegionUSARegionUSASouthEastRegionUSASouthWestRegionUSAUtahUzbekistanVanuatuVaticanCityVenezuelaVermontVietnamVirginiaWalesWashingtonWesternSaharaWestEuropeanRegionWestVirginiaWisconsinWorld8WorldWorldwithCountriesWyomingYemenYukonTerritoryZambiaZimbabwe0000B1FCMAP.SETTINGS0c2<map showCanvasBorder='1' canvasBorderColor='F1F1F1' canvasBorderThickness='2' borderColor='FFFFFF' connectorColor='000000' fillAlpha='70'>[CHART.DATA]</map>00009AFCMSAREA2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>000099FCMSBAR2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009CFCMSCOLUMN2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009CFCMSCOLUMN3D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>000098FCMSLINE.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009FFCSTACKEDAREA2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>00009EFCSTACKEDBAR2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>0000A1FCSTACKEDCOLUMN2D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>0000A1FCSTACKEDCOLUMN3D.SETTINGS0c2<graph xaxisname='[XMEMO]' yaxisname='[YMEMO]' decimalPrecision='0' animation='0' caption='[CHART.TITLE]' > [CHART.DATA]</graph>0000FDFWBULLET.SETTINGS0c2<chart palette='[CHART.PALETTE]' lowerLimit='[LOWER.LIMIT]' upperLimit='[UPPER.LIMIT]' caption='[CAPTION]' subcaption='[SUBCAPTION]' numberPrefix='[NUMBER.PREFIX]' numberSuffix='[NUMBER.SUFFIX]' showValue='1' >[CHART.DATA]</chart>0000BAFWFP.SETTINGS0c2<chart numberPrefix='[NUMBER.PREFIX]' numberSuffix='[NUMBER.SUFFIX]' caption='[CAPTION]' subcaption='[SUBCAPTION]' decimals='1' baseFontSize='11' >[CHART.DATA]</chart>000122FWGAUGE.SETTINGS0c2<chart palette='[CHART.PALETTE]' lowerLimitDisplay='[LOWER.LIMIT.DISPLAY]' upperLimitDisplay='[UPPER.LIMIT.DISPLAY]' lowerLimit='[LOWER.LIMIT]' upperLimit='[UPPER.LIMIT]' numberPrefix='[NUMBER.PREFIX]' numberSuffix='[NUMBER.SUFFIX]' showValue='1' >[CHART.DATA]</chart>0000CAFWSPARK.SETTINGS0c2<chart yAxisMinValue='[LOWER.LIMIT]' yAxisMaxValue='[UPPER.LIMIT]' palette='[CHART.PALETTE]' caption='[CAPTION]' subcaption='[SUBCAPTION]' setAdaptiveYMin='1' >[CHART.DATA]</chart>004113ICON.LIST0c2accept.pngadd.pnganchor.pngapplication_add.pngapplication_cascade.pngapplication_delete.pngapplication_double.pngapplication_edit.pngapplication_error.pngapplication_form_add.pngapplication_form_delete.pngapplication_form_edit.pngapplication_form_magnify.pngapplication_form.pngapplication_get.pngapplication_go.pngapplication_home.pngapplication_key.pngapplication_lightning.pngapplication_link.pngapplication_osx.pngapplication_osx_terminal.pngapplication.pngapplication_put.pngapplication_side_boxes.pngapplication_side_contract.pngapplication_side_expand.pngapplication_side_list.pngapplication_side_tree.pngapplication_split.pngapplication_tile_horizontal.pngapplication_tile_vertical.pngapplication_view_columns.pngapplication_view_detail.pngapplication_view_gallery.pngapplication_view_icons.pngapplication_view_list.pngapplication_view_tile.pngapplication_xp.pngapplication_xp_terminal.pngarrow_branch.pngarrow_divide.pngarrow_down.pngarrow_inout.pngarrow_in.pngarrow_join.pngarrow_left.pngarrow_merge.pngarrow_out.pngarrow_redo.pngarrow_refresh.pngarrow_refresh_small.pngarrow_right.pngarrow_rotate_anticlockwise.pngarrow_rotate_clockwise.pngarrow_switch.pngarrow_turn_left.pngarrow_turn_right.pngarrow_undo.pngarrow_up.pngasterisk_orange.pngasterisk_yellow.pngattach.pngaward_star_add.pngaward_star_bronze_1.pngaward_star_bronze_2.pngaward_star_bronze_3.pngaward_star_delete.pngaward_star_gold_1.pngaward_star_gold_2.pngaward_star_gold_3.pngaward_star_silver_1.pngaward_star_silver_2.pngaward_star_silver_3.pngbasket_add.pngbasket_delete.pngbasket_edit.pngbasket_error.pngbasket_go.pngbasket.pngbasket_put.pngbasket_remove.pngbell_add.pngbell_delete.pngbell_error.pngbell_go.pngbell_link.pngbell.pngbin_closed.pngbin_empty.pngbin.pngbomb.pngbook_add.pngbook_addresses.pngbook_delete.pngbook_edit.pngbook_error.pngbook_go.pngbook_key.pngbook_link.pngbook_next.pngbook_open.pngbook.pngbook_previous.pngbox.pngbrick_add.pngbrick_delete.pngbrick_edit.pngbrick_error.pngbrick_go.pngbrick_link.pngbrick.pngbricks.pngbriefcase.pngbug_add.pngbug_delete.pngbug_edit.pngbug_error.pngbug_go.pngbug_link.pngbug.pngbuilding_add.pngbuilding_delete.pngbuilding_edit.pngbuilding_error.pngbuilding_go.pngbuilding_key.pngbuilding_link.pngbuilding.pngbullet_add.pngbullet_arrow_bottom.pngbullet_arrow_down.pngbullet_arrow_top.pngbullet_arrow_up.pngbullet_black.pngbullet_blue.pngbullet_delete.pngbullet_disk.pngbullet_error.pngbullet_feed.pngbullet_go.pngbullet_green.pngbullet_key.pngbullet_orange.pngbullet_picture.pngbullet_pink.pngbullet_purple.pngbullet_red.pngbullet_star.pngbullet_toggle_minus.pngbullet_toggle_plus.pngbullet_white.pngbullet_wrench.pngbullet_yellow.pngcake.pngcalculator_add.pngcalculator_delete.pngcalculator_edit.pngcalculator_error.pngcalculator_link.pngcalculator.pngcalendar_add.pngcalendar_delete.pngcalendar_edit.pngcalendar_link.pngcalendar.pngcalendar_view_day.pngcalendar_view_month.pngcalendar_view_week.pngcamera_add.pngcamera_delete.pngcamera_edit.pngcamera_error.pngcamera_go.pngcamera_link.pngcamera.pngcamera_small.pngcancel.pngcar_add.pngcar_delete.pngcar.pngcart_add.pngcart_delete.pngcart_edit.pngcart_error.pngcart_go.pngcart.pngcart_put.pngcart_remove.pngcd_add.pngcd_burn.pngcd_delete.pngcd_edit.pngcd_eject.pngcd_go.pngcd.pngchart_bar_add.pngchart_bar_delete.pngchart_bar_edit.pngchart_bar_error.pngchart_bar_link.pngchart_bar.pngchart_curve_add.pngchart_curve_delete.pngchart_curve_edit.pngchart_curve_error.pngchart_curve_go.pngchart_curve_link.pngchart_curve.pngchart_line_add.pngchart_line_delete.pngchart_line_edit.pngchart_line_error.pngchart_line_link.pngchart_line.pngchart_organisation_add.pngchart_organisation_delete.pngchart_organisation.pngchart_pie_add.pngchart_pie_delete.pngchart_pie_edit.pngchart_pie_error.pngchart_pie_link.pngchart_pie.pngclock_add.pngclock_delete.pngclock_edit.pngclock_error.pngclock_go.pngclock_link.pngclock_pause.pngclock_play.pngclock.pngclock_red.pngclock_stop.pngcog_add.pngcog_delete.pngcog_edit.pngcog_error.pngcog_go.pngcog.pngcoins_add.pngcoins_delete.pngcoins.pngcolor_swatch.pngcolor_wheel.pngcomment_add.pngcomment_delete.pngcomment_edit.pngcomment.pngcomments_add.pngcomments_delete.pngcomments.pngcompress.pngcomputer_add.pngcomputer_delete.pngcomputer_edit.pngcomputer_error.pngcomputer_go.pngcomputer_key.pngcomputer_link.pngcomputer.pngconnect.pngcontrast_decrease.pngcontrast_high.pngcontrast_increase.pngcontrast_low.pngcontrast.pngcontrol_eject_blue.pngcontrol_eject.pngcontrol_end_blue.pngcontrol_end.pngcontrol_equalizer_blue.pngcontrol_equalizer.pngcontrol_fastforward_blue.pngcontrol_fastforward.pngcontroller_add.pngcontroller_delete.pngcontroller_error.pngcontroller.pngcontrol_pause_blue.pngcontrol_pause.pngcontrol_play_blue.pngcontrol_play.pngcontrol_repeat_blue.pngcontrol_repeat.pngcontrol_rewind_blue.pngcontrol_rewind.pngcontrol_start_blue.pngcontrol_start.pngcontrol_stop_blue.pngcontrol_stop.pngcreditcards.pngcross.pngcss_add.pngcss_delete.pngcss_go.pngcss.pngcss_valid.pngcup_add.pngcup_delete.pngcup_edit.pngcup_error.pngcup_go.pngcup_key.pngcup_link.pngcup.pngcursor.pngcut.pngcut_red.pngdatabase_add.pngdatabase_connect.pngdatabase_delete.pngdatabase_edit.pngdatabase_error.pngdatabase_gear.pngdatabase_go.pngdatabase_key.pngdatabase_lightning.pngdatabase_link.pngdatabase.pngdatabase_refresh.pngdatabase_save.pngdatabase_table.pngdate_add.pngdate_delete.pngdate_edit.pngdate_error.pngdate_go.pngdate_link.pngdate_magnify.pngdate_next.pngdate.pngdate_previous.pngdelete.pngdisconnect.pngdisk_multiple.pngdisk.pngdoor_in.pngdoor_open.pngdoor_out.pngdoor.pngdrink_empty.pngdrink.pngdrive_add.pngdrive_burn.pngdrive_cd_empty.pngdrive_cd.pngdrive_delete.pngdrive_disk.pngdrive_edit.pngdrive_error.pngdrive_go.pngdrive_key.pngdrive_link.pngdrive_magnify.pngdrive_network.pngdrive.pngdrive_rename.pngdrive_user.pngdrive_web.pngdvd_add.pngdvd_delete.pngdvd_edit.pngdvd_error.pngdvd_go.pngdvd_key.pngdvd_link.pngdvd.pngemail_add.pngemail_attach.pngemail_delete.pngemail_edit.pngemail_error.pngemail_go.pngemail_link.pngemail_open_image.pngemail_open.pngemail.pngemoticon_evilgrin.pngemoticon_grin.pngemoticon_happy.pngemoticon_smile.pngemoticon_surprised.pngemoticon_tongue.pngemoticon_unhappy.pngemoticon_waii.pngemoticon_wink.pngerror_add.pngerror_delete.pngerror_go.pngerror.pngexclamation.pngeye.pngfeed_add.pngfeed_delete.pngfeed_disk.pngfeed_edit.pngfeed_error.pngfeed_go.pngfeed_key.pngfeed_link.pngfeed_magnify.pngfeed.pngfemale.pngfilm_add.pngfilm_delete.pngfilm_edit.pngfilm_error.pngfilm_go.pngfilm_key.pngfilm_link.pngfilm.pngfilm_save.pngfind.pngflag_blue.pngflag_green.pngflag_orange.pngflag_pink.pngflag_purple.pngflag_red.pngflag_yellow.pngfolder_add.pngfolder_bell.pngfolder_brick.pngfolder_bug.pngfolder_camera.pngfolder_database.pngfolder_delete.pngfolder_edit.pngfolder_error.pngfolder_explore.pngfolder_feed.pngfolder_find.pngfolder_go.pngfolder_heart.pngfolder_image.pngfolder_key.pngfolder_lightbulb.pngfolder_link.pngfolder_magnify.pngfolder_page.pngfolder_page_white.pngfolder_palette.pngfolder_picture.pngfolder.pngfolder_star.pngfolder_table.pngfolder_user.pngfolder_wrench.pngfont_add.pngfont_delete.pngfont_go.pngfont.pnggroup_add.pnggroup_delete.pnggroup_edit.pnggroup_error.pnggroup_gear.pnggroup_go.pnggroup_key.pnggroup_link.pnggroup.pngheart_add.pngheart_delete.pngheart.pnghelp.pnghourglass_add.pnghourglass_delete.pnghourglass_go.pnghourglass_link.pnghourglass.pnghouse_go.pnghouse_link.pnghouse.pnghtml_add.pnghtml_delete.pnghtml_go.pnghtml.pnghtml_valid.pngimage_add.pngimage_delete.pngimage_edit.pngimage_link.pngimage.pngimages.pnginformation.pngipod_cast_add.pngipod_cast_delete.pngipod_cast.pngipod.pngipod_sound.pngjoystick_add.pngjoystick_delete.pngjoystick_error.pngjoystick.pngkey_add.pngkeyboard_add.pngkeyboard_delete.pngkeyboard_magnify.pngkeyboard.pngkey_delete.pngkey_go.pngkey.pnglayers.pnglayout_add.pnglayout_content.pnglayout_delete.pnglayout_edit.pnglayout_error.pnglayout_header.pnglayout_link.pnglayout.pnglayout_sidebar.pnglightbulb_add.pnglightbulb_delete.pnglightbulb_off.pnglightbulb.pnglightning_add.pnglightning_delete.pnglightning_go.pnglightning.pnglink_add.pnglink_break.pnglink_delete.pnglink_edit.pnglink_error.pnglink_go.pnglink.pnglock_add.pnglock_break.pnglock_delete.pnglock_edit.pnglock_go.pnglock_open.pnglock.pnglorry_add.pnglorry_delete.pnglorry_error.pnglorry_flatbed.pnglorry_go.pnglorry_link.pnglorry.pngmagifier_zoom_out.pngmagnifier.pngmagnifier_zoom_in.pngmale.pngmap_add.pngmap_delete.pngmap_edit.pngmap_go.pngmap_magnify.pngmap.pngmedal_bronze_1.pngmedal_bronze_2.pngmedal_bronze_3.pngmedal_bronze_add.pngmedal_bronze_delete.pngmedal_gold_1.pngmedal_gold_2.pngmedal_gold_3.pngmedal_gold_add.pngmedal_gold_delete.pngmedal_silver_1.pngmedal_silver_2.pngmedal_silver_3.pngmedal_silver_add.pngmedal_silver_delete.pngmoney_add.pngmoney_delete.pngmoney_dollar.pngmoney_euro.pngmoney.pngmoney_pound.pngmoney_yen.pngmonitor_add.pngmonitor_delete.pngmonitor_edit.pngmonitor_error.pngmonitor_go.pngmonitor_lightning.pngmonitor_link.pngmonitor.pngmouse_add.pngmouse_delete.pngmouse_error.pngmouse.pngmusic.pngnew.pngnewspaper_add.pngnewspaper_delete.pngnewspaper_go.pngnewspaper_link.pngnewspaper.pngnote_add.pngnote_delete.pngnote_edit.pngnote_error.pngnote_go.pngnote.pngoverlays.pngpackage_add.pngpackage_delete.pngpackage_go.pngpackage_green.pngpackage_link.pngpackage.pngpage_add.pngpage_attach.pngpage_code.pngpage_copy.pngpage_delete.pngpage_edit.pngpage_error.pngpage_excel.pngpage_find.pngpage_gear.pngpage_go.pngpage_green.pngpage_key.pngpage_lightning.pngpage_link.pngpage_paintbrush.pngpage_paste.pngpage.pngpage_red.pngpage_refresh.pngpage_save.pngpage_white_acrobat.pngpage_white_actionscript.pngpage_white_add.pngpage_white_camera.pngpage_white_cd.pngpage_white_code.pngpage_white_code_red.pngpage_white_coldfusion.pngpage_white_compressed.pngpage_white_copy.pngpage_white_cplusplus.pngpage_white_c.pngpage_white_csharp.pngpage_white_cup.pngpage_white_database.pngpage_white_delete.pngpage_white_dvd.pngpage_white_edit.pngpage_white_error.pngpage_white_excel.pngpage_white_find.pngpage_white_flash.pngpage_white_freehand.pngpage_white_gear.pngpage_white_get.pngpage_white_go.pngpage_white_horizontal.pngpage_white_h.pngpage_white_key.pngpage_white_lightning.pngpage_white_link.pngpage_white_magnify.pngpage_white_medal.pngpage_white_office.pngpage_white_paintbrush.pngpage_white_paint.pngpage_white_paste.pngpage_white_php.pngpage_white_picture.pngpage_white.pngpage_white_powerpoint.pngpage_white_put.pngpage_white_ruby.pngpage_white_stack.pngpage_white_star.pngpage_white_swoosh.pngpage_white_text.pngpage_white_text_width.pngpage_white_tux.pngpage_white_vector.pngpage_white_visualstudio.pngpage_white_width.pngpage_white_word.pngpage_white_world.pngpage_white_wrench.pngpage_white_zip.pngpage_word.pngpage_world.pngpaintbrush.pngpaintcan.pngpalette.pngpaste_plain.pngpaste_word.pngpencil_add.pngpencil_delete.pngpencil_go.pngpencil.pngphone_add.pngphone_delete.pngphone.pngphone_sound.pngphoto_add.pngphoto_delete.pngphoto_link.pngphoto.pngphotos.pngpicture_add.pngpicture_delete.pngpicture_edit.pngpicture_empty.pngpicture_error.pngpicture_go.pngpicture_key.pngpicture_link.pngpicture.pngpicture_save.pngpictures.pngpilcrow.pngpill_add.pngpill_delete.pngpill_go.pngpill.pngplugin_add.pngplugin_delete.pngplugin_disabled.pngplugin_edit.pngplugin_error.pngplugin_go.pngplugin_link.pngplugin.pngprinter_add.pngprinter_delete.pngprinter_empty.pngprinter_error.pngprinter.pngrainbow.pngreport_add.pngreport_delete.pngreport_disk.pngreport_edit.pngreport_go.pngreport_key.pngreport_link.pngreport_magnify.pngreport_picture.pngreport.pngreport_user.pngreport_word.pngresultset_first.pngresultset_last.pngresultset_next.pngresultset_previous.pngrosette.pngrss_add.pngrss_delete.pngrss_go.pngrss.pngrss_valid.pngruby_add.pngruby_delete.pngruby_gear.pngruby_get.pngruby_go.pngruby_key.pngruby_link.pngruby.pngruby_put.pngscript_add.pngscript_code.pngscript_code_red.pngscript_delete.pngscript_edit.pngscript_error.pngscript_gear.pngscript_go.pngscript_key.pngscript_lightning.pngscript_link.pngscript_palette.pngscript.pngscript_save.pngserver_add.pngserver_chart.pngserver_compressed.pngserver_connect.pngserver_database.pngserver_delete.pngserver_edit.pngserver_error.pngserver_go.pngserver_key.pngserver_lightning.pngserver_link.pngserver.pngserver_uncompressed.pngshading.pngshape_align_bottom.pngshape_align_center.pngshape_align_left.pngshape_align_middle.pngshape_align_right.pngshape_align_top.pngshape_flip_horizontal.pngshape_flip_vertical.pngshape_group.pngshape_handles.pngshape_move_back.pngshape_move_backwards.pngshape_move_forwards.pngshape_move_front.pngshape_rotate_anticlockwise.pngshape_rotate_clockwise.pngshape_square_add.pngshape_square_delete.pngshape_square_edit.pngshape_square_error.pngshape_square_go.pngshape_square_key.pngshape_square_link.pngshape_square.pngshape_ungroup.pngshield_add.pngshield_delete.pngshield_go.pngshield.pngsitemap_color.pngsitemap.pngsound_add.pngsound_delete.pngsound_low.pngsound_mute.pngsound_none.pngsound.pngspellcheck.pngsport_8ball.pngsport_basketball.pngsport_football.pngsport_golf.pngsport_raquet.pngsport_shuttlecock.pngsport_soccer.pngsport_tennis.pngstar.pngstatus_away.pngstatus_busy.pngstatus_offline.pngstatus_online.pngstop.pngstyle_add.pngstyle_delete.pngstyle_edit.pngstyle_go.pngstyle.pngsum.pngtab_add.pngtab_delete.pngtab_edit.pngtab_go.pngtable_add.pngtable_delete.pngtable_edit.pngtable_error.pngtable_gear.pngtable_go.pngtable_key.pngtable_lightning.pngtable_link.pngtable_multiple.pngtable.pngtable_refresh.pngtable_relationship.pngtable_row_delete.pngtable_row_insert.pngtable_save.pngtable_sort.pngtab.pngtag_blue_add.pngtag_blue_delete.pngtag_blue_edit.pngtag_blue.pngtag_green.pngtag_orange.pngtag_pink.pngtag.pngtag_purple.pngtag_red.pngtag_yellow.pngtelephone_add.pngtelephone_delete.pngtelephone_edit.pngtelephone_error.pngtelephone_go.pngtelephone_key.pngtelephone_link.pngtelephone.pngtelevision_add.pngtelevision_delete.pngtelevision.pngtext_align_center.pngtext_align_justify.pngtext_align_left.pngtext_align_right.pngtext_allcaps.pngtext_bold.pngtext_columns.pngtext_dropcaps.pngtextfield_add.pngtextfield_delete.pngtextfield_key.pngtextfield.pngtextfield_rename.pngtext_heading_1.pngtext_heading_2.pngtext_heading_3.pngtext_heading_4.pngtext_heading_5.pngtext_heading_6.pngtext_horizontalrule.pngtext_indent.pngtext_indent_remove.pngtext_italic.pngtext_kerning.pngtext_letter_omega.pngtext_letterspacing.pngtext_linespacing.pngtext_list_bullets.pngtext_list_numbers.pngtext_lowercase.pngtext_padding_bottom.pngtext_padding_left.pngtext_padding_right.pngtext_padding_top.pngtext_replace.pngtext_signature.pngtext_smallcaps.pngtext_strikethrough.pngtext_subscript.pngtext_superscript.pngtext_underline.pngtext_uppercase.pngthumb_down.pngthumb_up.pngtick.pngtime_add.pngtime_delete.pngtime_go.pngtimeline_marker.pngtime.pngtransmit_add.pngtransmit_blue.pngtransmit_delete.pngtransmit_edit.pngtransmit_error.pngtransmit_go.pngtransmit.pngtux.pnguser_add.pnguser_comment.pnguser_delete.pnguser_edit.pnguser_female.pnguser_go.pnguser_gray.pnguser_green.pnguser_orange.pnguser.pnguser_red.pnguser_suit.pngvcard_add.pngvcard_delete.pngvcard_edit.pngvcard.pngvector_add.pngvector_delete.pngvector.pngwand.pngweather_clouds.pngweather_cloudy.pngweather_lightning.pngweather_rain.pngweather_snow.pngweather_sun.pngwebcam_add.pngwebcam_delete.pngwebcam_error.pngwebcam.pngworld_add.pngworld_delete.pngworld_edit.pngworld_go.pngworld_link.pngworld.pngwrench_orange.pngwrench.pngxhtml_add.pngxhtml_delete.pngxhtml_go.pngxhtml.pngxhtml_valid.pngzoom_in.pngzoom_out.pngzoom.png000092MOBI.APPS0c2SUB.D3ADMINSUB.MOBI.APP.MENUSUB.MOBI.WOSUB.TESTAIAAD3 AdministrationApplication ChooserDemo WO ApplicationDemo Application00007BMONTHLY.20130c277869980896869808900091077900940589703406719886071869680806870707428708058871070682570808878968000007BMONTHLY.20140c2865222009965220098889900865566006552260074665400798552008965230082541200654123007584120098655200000073MONTHLY.20150c29654320080145600888540009650110095012300965121008456320010523680098521000644144005888660000007FMONTHLY.GPS.20130c226517550288064103178601729914744209154142201961923275705280068082799822722781623247042583250054900007FMONTHLY.GPS.20140c2294639443200712235317797332386042323934924466243258618943111867631109141253129142744917536111721000076MONTHLY.GPS.20150c23679677832936845339654253798472034865781365450823197622741016726359493432331534221977139000073MONTHLY.NET.20140c229463943200712353177933238602323934244662425861893111867311091425312912744917361117200006CMONTHLY.NET.20150c2965432080145608885400965011095012309651210845632010523680985210064414405888660000081MONTHLY.PARTS.20140c2414378445224284147585401438425423609067336395560416464855854718841895322328312664074985847292673000078MONTHLY.PARTS.20150c24960869651350055533449464524318362544291449568374293538557601358540842633146503929950454000084MONTHLY.SERVICES.20140c245084356474093595130449942714058294319273826984038208715311051124064587832581034350913425136252700007BMONTHLY.SERVICES.20150c2469345042879554535509054512579173246800951555263416278154763544244436737329493612893614600000EPLATFORM0c2UD000288STATE.NAMES0c2AL,AK,AZ,AR,CA,CO,CT,DE,FL,GA,HI,ID,IL,IN,IA,KS,KY,LA,ME,MD,MA,MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,OH,OK,OR,PA,RI,SC,SD,TN,TX,UT,VT,VA,WA,WV,WI,WY,DCAlabama,Alaska,Arizona,Arkansas,California,Colorado,Connecticut,Delaware,Florida,Georgia,Hawaii,Idaho,Illinois,Indiana,Iowa,Kansas,Kentucky,Louisiana,Maine,Maryland,Massachusetts,Michigan,Minnesota,Mississippi,Missouri,Montana,Nebraska,Nevada,NewHampshire,NewJersey,NewMexico,NewYork,NorthCarolina,NorthDakota,Ohio,Oklahoma,Oregon,Pennsylvania,RhodeIsland,SouthCarolina,SouthDakota,Tennessee,Texas,Utah,Vermont,Virginia,Washington,WestVirginia,Wisconsin,Wyoming,DistrictofColumbia000040TLDB.SETTINGS0c2SUB.USER.AUTH110831-5iso-8859-1NN00005FTLDB.THEMES0c2cream_gray.css,ice.css,patriotic.css,tuscani.cssTheme 1,Theme 2,Theme 3,Theme 400024ECOMPILE.SETUP0c2BASIC %FILENAME% %ITEMNAME%* To configure the compile command when using the web editor* edit line # 1 of this record to contain the appropriate syntax.** Example # 1 - Standard compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME%** Example # 2 - FLASH compile using BASIC* 001 BASIC %FILENAME% %ITEMNAME% (O** Example # 3 - Standard compile using COMPILE* 001 COMPILE %FILENAME% %ITEMNAME%** Only line # 1 of this record is used, all other lines of this record are ignored.* If this record is deleted, the default behavior is:* COMPILE %FILENAME% %ITEMNAME%0000A1FC2DPIE.SETTINGS0c2<graph caption='[CHART.TITLE]' decimalPrecision='0' showNames='1' showValues='0' pieRadius='[RADIUS]' animation='0' > [CHART.DATA]</graph>0000B3PORTAL.SALES.REPORT.SETUP0c2MVDBPORTAL.SALESCLOSE.DATECLOSE.DATE.MMCLOSE.DATE.YYYYEXT.AMTEXT.COSTREP.NAMEBRANCHREGION199MD24F8;9;10;-;(MR2);*05TREP;X;1;11314000070PORTAL.AR.REPORT.SETUP0c2MVDBPORTAL.ARDUE.DATEDATES.PAIDINVOICE.AMTBALANCECUST2086MD250MD2CUST1000062PORTAL.AP.REPORT.SETUP0c2MVDBPORTAL.APDUE.DATEDATE.PAIDINV.AMOUNTBALANCE2086MD250MD2053532WDB.BP0c000021DSET.COOKIE0c2SUBROUTINE SET.COOKIE( C.VAL )*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 10/25/03* Description  : This program sets the SESSION$COOKIES variable.*              ***********************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*IF TRIM(C.VAL) # "" THEN  SESSION$COOKIES<-1> = C.VALEND*RETURN*000872CREATE.SESSION0c2SUBROUTINE CREATE.SESSION( SESSION.ID )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program creates a unique session record and*              returns the session id to the calling program.**          WARNING: This program relys on MvInternet to generate*                       its unique ID.  If you are testing your program*                       from TCL, this will FAIL and you will not get*                       any session ID returned.** Modified by  : Mike Schmidt, Sierra Bravo Corporation* Date Revised : 11/6/2003* Modification : Modified to add the date and time to attributes 3 and 4.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause** Modified By: Peter Schellenbach, Zumasys* Date: 10/25/2016* Description: Added INCLUDE WWW.INCLUDE so we have access to F.WEB.SESSION*              in /WWW/ COMMON, instead of opening file here. Use F.WEB.SESSION*              instead of WEB.SESSION for file variable. Removed PROCREAD /*              SENTENCE since CGI$UNIQUE.ID is also in /WWW/ COMMON.** Init*#MAKE# RL $OPTIONS D3EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*INCLUDE WBPD WWW.INCLUDE ; *PJS 10-25-16**SESSION.ID = ''**PJS 10-25-16*OPEN '','WEB.SESSION' TO WEB.SESSION ELSE SESSION.ID = 'ERROR'*PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ""; SESSION.ID = 'ERROR'*PJS 10-25-16*PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE(); *PJS 06-12-15**PJS 10-25-16*SESSION.ID = FIELD( TCL.LINE, ' ', 2 )*SESSION.ID = CGI$UNIQUE.ID ;* PJS 10-25-16*IF SESSION.ID = "" THEN SESSION.ID = "ERROR" ; *PJS 06-12-15*CONVERT '{' TO '' IN SESSION.IDCONVERT '}' TO '' IN SESSION.ID*IF (SESSION.ID # 'ERROR') THEN  SESSION.ID = SESSION.ID:'-':DATE():'-':TIME()  SESSION.REC = ""  SESSION.REC<3> = DATE()  SESSION.REC<4> = TIME()  WRITE SESSION.REC ON F.WEB.SESSION, SESSION.IDENDSESSION$ID = SESSION.IDCALL PUT.SESSION.VAR('LastSessionAccess', DATE():'*':TIME())*RETURN*END017385MVDB.MAIN0c2** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Dashboard Display Program** 1-5-15 TOM PARKER OF ZUMASYS - CHANGES TO SUPPORT MULTI-SERIES DRILLDOWNS* 1-26-15 TOM PARKER OF ZUMASYS - ALLOW PRINTABLE ON ALL CHART TYPE SINCE*         NEW FUSION CHARTS SUPPORT THEM* 3-4-15 TOM PARKER OF ZUMASYS - DONT STRIP OUT DECIMALS IN W$BAR.VALUES* 3-15-15 TOM PARKER OF ZUMASYS - ADDITIONAL CHANGE TO SUPPORT MULTI-SERIES* 6-4-15 PETER SCHELLENBACH OF ZUMASYS - MODIFIED FOR QM*          CHANGE OCONV(X,'U3060') TO MD5(X)** Modified by Mike Street of Zumasys 07-22-15 for UniData compatiblity:*   When testing for cataloged program, check if line 1 is 'C', not 'VR'.*   Change U3060 user exist to use DIGEST('MD5',...) instead.** 11-30-15 TOM PARKER - PROVIDE WEBSERVICE ACCESS WITH EMBEDDED USER AND PASSWORD** 12-15-15 & 01-14-16 Tom Parker & Peter Schellenbach (*PDF*)*  Added support for PDF generation of any widget.*  Widget subroutine must set W$PDFABLE to 1 to enable PDF generation.*  PDF generation must be enabled in the PDF Configuration widget, on*  the Administrator dashboard.* 01-25-16 Tom Parker - Do not allow Go Back if doing webservice* 04-25-16 Tom Parker - Make Go Back button fully functional for backing*                       up from drilldowns* 6-1-16 TOM PARKER - FIX ISSUES WITH BACKING UP FROM DRILLDOWN* 06-27-16 Tom Parker & Peter Schellenback (*EXCEL*)*  Added support for EXCEL spreadsheet generation of many widgets.*  Widget type must be EXCEL'able to set W$EXCELABLE to 1 to generate icon** 09-23-16 Tom Parker - Eliminate GO_BACK button support and replace with*          logic to handle standard browser back button*  * 09-23-16 Peter Schellenbach*  Add support for alternate logo defined for each user (MVDB.USERS attr 7).*  Enable 'datepicker' style input fields.*  Fix single user login problem.*  * 10-07-16 Peter Schellenbach*  If form contains many widget input controls, use POST instead of GET*  for form submission to avoid URL length limitations.**  Because POST method for login and widget inputs causes browser to prompt*  for resubmit when using back or refresh button, the POST-REDIRECT-GET*  pattern is now used. When responding to POST, we return small javascript*  which REDIRECTS by setting window.location. This causes a GET from browser.*  * 10-25-16 Peter Schellenbach*  Refactored INIT.WWW so all dashboard specific initialization is now in*  MVDB.INIT which is called from here. Only use POST-REDIRECT-GET pattern*  for login page. Use POST without P-R-G for forms with more than 20 inputs*  so that we don't end up with a bogus URL in the browser location (the*  URL used for redirect is bogus, and cannot be used to create emailed or*  webservice URLs).**  Removed the saving of GLOBAL.USER.DATA and WIDGET.USER.DATA from this*  program and move it to MVDB.INIT, saving before letting MVDB.MAIN handle*  the request.** 11-02-16 Peter Schellenbach*  Fine-tuned widget sizes now that we have switched to application_larger.css*  instead of application_normal.css to maximuze the are used by the charts.*  Calculate the 1/3 widget size differently for the 2-column layout, which*  is 45 pixels wider than the same widget in 3-column layout. Old size values*  are commented out for reference (in case we need to support normal size again.)**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.USERSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*EQU TRUE TO 1, FALSE TO 0, AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MVDB.SUBS' TO F.MVDB.SUBS ELSE STOP 201, 'MVDB.SUBS'OPEN '','MVDB.USERS' TO F.MVDB.USERS ELSE STOP 201, 'MVDB.USERS'OPEN '','MVDB.DEFS' TO F.MVDB.DEFS ELSE STOP 201, 'MVDB.DEFS'OPEN '','MVDB.UDATA' TO F.MVDB.UDATA ELSE STOP 201, 'MVDB.UDATA'OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'*** 11-30-15 NEED AN INSTALL DATE TO CONTROL SINGLE USER WEBSERVICE ACCESS*READ INSTALL.DATE FROM F.MVDB.CONTROL, 'INSTALL.DATE' ELSE   INSTALL.DATE=DATE()   WRITE INSTALL.DATE ON F.MVDB.CONTROL, 'INSTALL.DATE' END*OPEN '','MVDB.MAP.DATA' TO F.MVDB.MAP.DATA ELSE STOP 201, 'MVDB.MAP.DATA'OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE STOP 201, 'MVDB.WIDGET.TYPES'OPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE STOP 201, 'MVDB.THEMES'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD/VOC'END*READ WIDGET.DIV FROM F.WEB.FORMS, "WIDGET.DIV" ELSE WIDGET.DIV = "Missing WIDGET.DIV"*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)EQU SITE$AUTO.TRIM    TO SITE$SETTINGS(10)EQU SITE$REFRESH TO SITE$SETTINGS(11)EQU SITE$ALLOW.WEBSVC TO SITE$SETTINGS(12)EQU SITE$ALLOW.EMAILD TO SITE$SETTINGS(13)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READ THEME.LIST FROM F.MVDB.CONTROL, "MVDB.THEMES" ELSE THEME.LIST = "cream_gray.css,ice.css,patriotic.css,tuscani.css" THEME.LIST<2> = "Theme 1,Theme 2,Theme 3,Theme 4" WRITE THEME.LIST ON F.MVDB.CONTROL, "MVDB.THEMES"ENDIF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDEND*MAT GLOBAL.INFO = ''G$QUERYMODE = FALSE ;* Not query mode**PDF** Read PDF configuration settingsDIM PDF$SETTINGS(10)EQU PDF$ENABLED   TO PDF$SETTINGS(1)EQU PDF$COMMAND   TO PDF$SETTINGS(2)EQU PDF$DIRECTORY TO PDF$SETTINGS(3)EQU PDF$LIFETIME  TO PDF$SETTINGS(4)MATREAD PDF$SETTINGS FROM F.MVDB.CONTROL,'PDF.SETTINGS' ELSE MAT PDF$SETTINGS=''IF PDF$ENABLED THEN CALL SUB.PDF.FUNC('cleanup','')** GET LICENSE INFORMATION*CALL SUB.MVDB.FEATURES(USER.LIMIT,MAPS.ENABLED,FUSION.WIDGETS.ENABLED,WATERMARK)*NAME.COLOR = "AQUA":VM:"BLACK":VM:"BLUE":VM:"FUCHSIA":VM:"GRAY":VM:"GREEN":VM:"LIME":VM:"MAROON":VM:"NAVY"NAME.COLOR = NAME.COLOR:VM:"OLIVE":VM:"PURPLE":VM:"RED":VM:"SILVER":VM:"TEAL":VM:"WHITE":VM:"YELLOW":VM:"GREY"NAME.COLOR<2> = "#00FFFF":VM:"#000000":VM:"#0000FF":VM:"#FF00FF":VM:"#808080":VM:"#008000":VM:"#00FF00":VM:"#800000":VM:"#000080"NAME.COLOR<2> = NAME.COLOR<2>:VM:"#808000":VM:"#800080":VM:"#FF0000":VM:"#C0C0C0":VM:"#008080":VM:"#FFFFFF":VM:"#FFFF00":VM:"#808080"*LOCATE "logout" IN CGI$VARS SETTING POS THEN  CALL DESTROY.SESSIONENDCALL GET.SESSION.VAR("userid",userid)CALL GET.SESSION.VAR("adminauth",adminauth)LOCATE "psid" IN CGI$VARS SETTING POS THEN  PURGE.SESSIONID = CGI$VALS<POS>  EXECUTE "MVDB.PURGE.SESSIONS ":PURGE.SESSIONID CAPTURING JUNKENDMAT USER.ITEM = "" ;* PJS 09-23-16: make sure this gets initialized, in case of webservice or emailed reports* 11-30-15 ESTABLISH WEBSERVICE VARIABLESDIM W$WEBSERVICE.DATA(5)MATREAD W$WEBSERVICE.DATA FROM F.MVDB.UDATA,SESSION$ID:"$WEBSERVICE" ELSE MAT W$WEBSERVICE.DATA=''EQU W$WEBSERVICE TO W$WEBSERVICE.DATA(1)EQU W$EMAILED.REPORT TO W$WEBSERVICE.DATA(2)HTML.ID=''IF userid = "" THEN  LOGIN.OK = FALSE  LOGIN.MSG = ""    loginid = "" ; password = ""  LOCATE "loginid" IN CGI$VARS SETTING POS THEN    loginid = CGI$VALS<POS>    LOCATE "password" IN CGI$VARS SETTING POS THEN      password = CGI$VALS<POS>    END  END*WEBSERVICE*  IF loginid # "" AND (password # "" OR SITE$NULL.PW.OK=1) THEN*WEBSERVICE*    IF SITE$AUTH.SUB # "" THEN*WEBSERVICE*      READ CATPTR FROM F.MD, SITE$AUTH.SUB ELSE CATPTR = ""      *WEBSERVICE*      *MS 07-22-15 UD* IF CATPTR<1> = "VR" THEN*WEBSERVICE*      IF CATPTR<1> = "C" THEN ; *MS 07-22-15 UD**WEBSERVICE*        CALL @SITE$AUTH.SUB(loginid,password,"AUTH",LOGIN.OK,LOGIN.MSG,MAT USER.ITEM)*WEBSERVICE*        IF LOGIN.OK = "Y" THEN LOGIN.OK = TRUE*WEBSERVICE*        IF NOT(LOGIN.OK MATCHES "1N0N") THEN LOGIN.OK = FALSE*WEBSERVICE*      END ELSE*WEBSERVICE*        LOGIN.OK = FALSE*WEBSERVICE*        LOGIN.MSG = SITE$AUTH.SUB:" authentication subroutine not cataloged."*WEBSERVICE*      END*WEBSERVICE*    END ELSE*WEBSERVICE*      MATREAD USER.ITEM FROM F.MVDB.USERS, loginid THEN*WEBSERVICE*        *MS 07-22-15 UD* IF OCONV(password,"U3060") = USER.PASSWORD THEN*WEBSERVICE*        IF DIGEST('MD5',password,1,ENCR.PASSWORD) = 0 THEN ; *MS 07-22-15 UD**WEBSERVICE*          ENCR.PASSWORD = OCONV(ENCR.PASSWORD,'MX0C') ; *MS 07-22-15 UD**WEBSERVICE*          IF ENCR.PASSWORD = USER.PASSWORD THEN ; *MS 07-22-15 UD**WEBSERVICE*            LOGIN.OK = TRUE*WEBSERVICE*          END*WEBSERVICE*        END*WEBSERVICE*      END*WEBSERVICE*    END  *  ** 11-30-15 WEBSERVICE AND EMAILED REPORT CAPABILITY LOGIC  *  IF loginid = 'emailed' THEN W$EMAILED.REPORT=1  IF loginid = 'webservice' THEN W$WEBSERVICE=1  LOCATE "htmlid" IN CGI$VARS SETTING POS THEN    HTML.ID = CGI$VALS<POS>  END ELSE    HTML.ID='null'  END  IF loginid # "" AND (W$EMAILED.REPORT OR password # "" OR SITE$NULL.PW.OK=1) THEN     LOCATE 'passtime' IN CGI$VARS SETTING PASSTIME.POS ELSE PASSTIME.POS=0     IF PASSTIME.POS THEN        PASSTIME=CGI$VALS<PASSTIME.POS>        CONVERT ':' TO '' IN PASSTIME      END ELSE PASSTIME=''     BEGIN CASE        CASE PASSTIME AND loginid = 'webservice'           EXECUTE "MVDB.PURGE.SESSIONS webservice" CAPTURING JUNK; * PURGE ANY OLD webservices           IF PASSTIME MATCHES '6N' THEN              IPASSTIME = ICONV(PASSTIME[1,2]:':':PASSTIME[3,2]:':':PASSTIME[5,2],'MT')           END ELSE              IPASSTIME = -601 ;* Ensure the time is expired if not 6 digits!           END           BEGIN CASE              CASE SITE$ALLOW.WEBSVC # 'Y'                 * webservice login is not enabled                 LOGIN.OK = FALSE                 LOGIN.MSG = 'Webservice login is not enabled'              CASE USER.LIMIT < 2 AND DATE() > (INSTALL.DATE+30)                 * MUST HAVE A MULTI USER LICENSE TO USE WEBSERVICE AFTER                 * 30 DAY TRIAL PERIOD                 LOGIN.OK = FALSE                 LOGIN.MSG = 'Must have a multi-user license to use webservices'              CASE ABS(TIME()-IPASSTIME) > 600                 * TIME MUST BE WITHIN 10 MINUTES OF MACHINE TIME                 LOGIN.OK = FALSE                 *LOGIN.MSG = 'Request not synced with system time.'                 LOGIN.MSG = 'The request URL has expired. This may be due to differences in the system '                 LOGIN.MSG := 'clock on the MV Dashboard server and the clock used to generate the URL.'              CASE 1                 * VALID PASSWORD IS THE SUM OF MMDDYY + SSMMHH (FROM PASSTIME)                 * INVERT THE TIME TO SSMMHH                 EMITSSAP=''                 FOR TIME.I = 6 TO 1 STEP -1                    EMITSSAP:=PASSTIME[TIME.I,1]                  NEXT TIME.I                 *OTODAY=OCONV(DATE(),'D2-')                 *CONVERT '-' TO '' IN OTODAY                 TODAY.MM=OCONV(DATE(),'DM')'R%%'                 TODAY.DD=OCONV(DATE(),'DD')'R%%'                 TODAY.YY=OCONV(DATE(),'DY')'R%%'                 OTODAY = TODAY.MM:TODAY.DD:TODAY.YY ;* handle non-USA date formats properly                 CALCED.PASSWORD=OTODAY+EMITSSAP                 IF password MATCHES '6N' THEN CHECKED.PASSWORD = password + 0 ELSE CHECKED.PASSWORD = -1                 IF CALCED.PASSWORD = CHECKED.PASSWORD THEN                    LOGIN.OK = TRUE                    USER.ROLE=''*                    CALL PUT.SESSION.VAR("userid",loginid)                 END ELSE                    LOGIN.OK = FALSE                    LOGIN.MSG = 'Invalid password'                 END           END CASE        CASE loginid = 'emailed'           EXECUTE "MVDB.PURGE.SESSIONS emailed" CAPTURING JUNK; * PURGE ANY OLD emailed           OPEN '','MVDB.EMAILED.HTML' TO F.EMAILED.HTML ELSE STOP 201, 'MVDB.EMAILED.HTML'           *           ** PURGED ANY EMAIL REPORTS OVER 10 DAYS OLD           *           EXECUTE 'SELECT MVDB.EMAILED.HTML' CAPTURING JUNK           LOOP              READNEXT EMAILED.ID ELSE EMAILED.ID='DONE'           UNTIL EMAILED.ID='DONE' DO              IF (EMAILED.ID[1,5]+10) < DATE() THEN                 DELETE F.EMAILED.HTML, EMAILED.ID              END           REPEAT           IF SITE$ALLOW.EMAILD # 'Y' THEN              * emaild login is not enabled              LOGIN.OK = FALSE              LOGIN.MSG = 'Emailed login is not enabled'           END ELSE              READV TEST.HTML.REPORT FROM F.EMAILED.HTML, HTML.ID, 1 ELSE TEST.HTML.REPORT='NOTFOUND'              IF TEST.HTML.REPORT = 'NOTFOUND' THEN                 LOGIN.OK = FALSE                 LOGIN.MSG = 'Emailed report not found with ID of ':HTML.ID              END ELSE                 USER.ROLE=''                 LOGIN.OK = TRUE                 INSERT.VARS='dbname':AM:'udview':AM:'udpos1':AM:'udval1'                 INSERT.VALS='Emailed Report':AM:'Emailed Report':AM:1:AM:HTML.ID                 CGI$VARS=INSERT(CGI$VARS,1,0,0,INSERT.VARS)                 CGI$VALS=INSERT(CGI$VALS,1,0,0,INSERT.VALS)              END           END        CASE SITE$AUTH.SUB # ""           READ CATPTR FROM F.MD, SITE$AUTH.SUB ELSE CATPTR = ""           *MS 07-22-15 UD* IF CATPTR<1> = "VR" THEN           IF CATPTR<1> = "C" THEN ; *MS 07-22-15 UD*             CALL @SITE$AUTH.SUB(loginid,password,"AUTH",LOGIN.OK,LOGIN.MSG,MAT USER.ITEM)             IF LOGIN.OK = "Y" THEN LOGIN.OK = TRUE             IF NOT(LOGIN.OK MATCHES "1N0N") THEN LOGIN.OK = FALSE           END ELSE             LOGIN.OK = FALSE             LOGIN.MSG = SITE$AUTH.SUB:" authentication subroutine not cataloged."           END        CASE 1           MATREAD USER.ITEM FROM F.MVDB.USERS, loginid THEN             *MS 07-22-15 UD* IF OCONV(password,"U3060") = USER.PASSWORD THEN             IF DIGEST('MD5',password,1,ENCR.PASSWORD) = 0 THEN ; *MS 07-22-15 UD*               ENCR.PASSWORD = OCONV(ENCR.PASSWORD,'MX0C') ; *MS 07-22-15 UD*               IF ENCR.PASSWORD = USER.PASSWORD THEN ; *MS 07-22-15 UD*                 LOGIN.OK = TRUE*                 CALL PUT.SESSION.VAR("userid",loginid)               END             END           END     END CASE  END  IF LOGIN.OK THEN    EXECUTE "MVDB.PURGE.SESSIONS" CAPTURING JUNK ;* Purge out old session data    *    SELECT F.WEB.SESSION    ACTIVE.SESSIONS = ""    USER.ACTIVE.SESSIONS = ""    LOOP      READNEXT WSID ELSE EXIT      READ SREC FROM F.WEB.SESSION, WSID ELSE CONTINUE      LOCATE "userid" IN SREC<1> SETTING UPOS THEN        ASUSER = SREC<2,UPOS>        LOCATE "LastSessionAccess" IN SREC<1> SETTING UPOS THEN          ASDATE = FIELD(SREC<2,UPOS>,'*',1) ;* date          ASTIME = FIELD(SREC<2,UPOS>,'*',2) ;* time          ASAGE = (DATE()-ASDATE) * 86400          ASAGE += (TIME()-ASTIME)        END ELSE ASAGE = 0        IF OCONV(ASUSER,'MCU') = OCONV(loginid,'MCU') THEN          LOCATE ASAGE IN USER.ACTIVE.SESSIONS<3> BY "DR" SETTING ASPOS ELSE NULL          USER.ACTIVE.SESSIONS = INSERT( USER.ACTIVE.SESSIONS, 1, ASPOS, 0, WSID )          USER.ACTIVE.SESSIONS = INSERT( USER.ACTIVE.SESSIONS, 2, ASPOS, 0, ASUSER ) ;* User ID          USER.ACTIVE.SESSIONS = INSERT( USER.ACTIVE.SESSIONS, 3, ASPOS, 0, ASAGE )        END ELSE          LOCATE ASAGE IN ACTIVE.SESSIONS<3> BY "DR" SETTING ASPOS ELSE NULL          ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 1, ASPOS, 0, WSID )          ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 2, ASPOS, 0, ASUSER ) ;* User ID          ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 3, ASPOS, 0, ASAGE )        END      END    REPEAT    *Merge active sessions for this user in front of     *the other sessions to prefer those sessions for cleanup.    IF USER.ACTIVE.SESSIONS # '' THEN      ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 1, 1, 0, USER.ACTIVE.SESSIONS<1> )      ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 2, 1, 0, USER.ACTIVE.SESSIONS<2> )      ACTIVE.SESSIONS = INSERT( ACTIVE.SESSIONS, 3, 1, 0, USER.ACTIVE.SESSIONS<3> )    END    ASCNT = DCOUNT( ACTIVE.SESSIONS<1>, @VM )    IF ASCNT > USER.LIMIT THEN      PURGE.LIST = ""      LOOP WHILE ASCNT > USER.LIMIT DO        PURGE.LIST := ACTIVE.SESSIONS<1,1>:" "        ACTIVE.SESSIONS = DELETE( ACTIVE.SESSIONS, 1, 1, 0 )        ACTIVE.SESSIONS = DELETE( ACTIVE.SESSIONS, 2, 1, 0 )        ACTIVE.SESSIONS = DELETE( ACTIVE.SESSIONS, 3, 1, 0 )        ASCNT -= 1      REPEAT      EXECUTE "MVDB.PURGE.SESSIONS ":PURGE.LIST CAPTURING JUNK    END    IF ASCNT = USER.LIMIT THEN      * Logging in will force a user to log off      IF SITE$AUTO.TRIM = 'Y' THEN        EXECUTE "MVDB.PURGE.SESSIONS ":ACTIVE.SESSIONS<1,1> CAPTURING JUNK      END ELSE        READ MSG.TEMPLATE FROM F.WEB.FORMS, "message.html" ELSE MSG.TEMPLATE = "message.html not found."        CALL SWAP(MSG.TEMPLATE,'<!-- MSG_TITLE -->',"User limit exceeded.")        CALL SWAP(MSG.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)        CALL SWAP(MSG.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)        MSG.CONTENT = \<p>Your maximum user limit has been reached. If you choose to log in, user "\:ACTIVE.SESSIONS<2,1>        MSG.CONTENT := \" will be logged out and the user's session data will be lost.</p>\        MSG.CONTENT := '<a href="/dbc/MVDB.MAIN?psid=':ACTIVE.SESSIONS<1,1>:'">Click here</a> to log ':ACTIVE.SESSIONS<2,1>:' out and try again.</a>'        CALL SWAP(MSG.TEMPLATE,'<!-- MSG_CONTENT -->',MSG.CONTENT)        CALL WEB.SEND(MSG.TEMPLATE)        GLOBAL.INFO(100) = 1        STOP      END    END    CALL PUT.SESSION.VAR("userid",loginid)    userid = loginid    CALL PUT.SESSION.VAR("login_date",DATE())    CALL PUT.SESSION.VAR("login_time",TIME())  END ELSE    READ LOGIN.PAGE FROM F.WEB.FORMS, "login.html" ELSE LOGIN.PAGE = "login.html not found."    IF loginid # "" THEN      IF LOGIN.MSG = "" THEN LOGIN.MSG = "Invalid user ID or Password"      CALL SWAP(LOGIN.PAGE,'<!-- ERROR -->',LOGIN.MSG)    END    CALL SWAP(LOGIN.PAGE,'<!-- SITE_LOGO -->',SITE.LOGO)    CALL SWAP(LOGIN.PAGE,'<!--CHARACTER_SET-->',SITE$CHARSET)        CALL SWAP(LOGIN.PAGE,'<!-- SITE_THEME -->',THEME.CSS)    CALL WEB.SEND(LOGIN.PAGE)    GLOBAL.INFO(100) = 1 ;* Intentional Stop    STOP  ENDEND ELSE  * Get the user item.  * If a custom authentication subroutine is in use, we have to call that  * subroutine again in order to get the user record populated  IF SITE$AUTH.SUB # "" THEN    READ CATPTR FROM F.MD, SITE$AUTH.SUB ELSE CATPTR = ""    *MS 07-22-15 UD* IF CATPTR<1> = "VR" THEN    IF CATPTR<1> = "C" THEN ; *MS 07-22-15 UD*      CALL @SITE$AUTH.SUB(userid,"","READ",LOGIN.OK,LOGIN.MSG,MAT USER.ITEM)    END ELSE MAT USER.ITEM = ""  END ELSE    MATREAD USER.ITEM FROM F.MVDB.USERS, userid ELSE MAT USER.ITEM = ''  ENDENDIF USER.ROLE = "Administrator" AND NOT(adminauth) THEN  * The user is an admin based on the USER.ROLE setting in their user record  adminauth = 1  CALL PUT.SESSION.VAR("adminauth",adminauth)ENDG$ADMIN.USER = adminauth*G$USERID = userid* 10-07-16 Implement the POST-REDIRECT-GET pattern to prevent the browser* from prompting before resubmit when using back or refresh buttons after* a POST (used for login form only at this time).LOCATE "REQUEST_METHOD" IN CGI$VARS SETTING POS THEN  IF CGI$VALS<POS> = "POST" THEN    LOCATE "dblogin" IN CGI$VARS SETTING POS THEN      IF CGI$VALS<POS> THEN        * Redirect to MVDB.MAIN default dashboard after valid login        HTML = ''        HTML<-1> = '<html>'        HTML<-1> = '<body>'        HTML<-1> = '<script type="text/javascript">'        HTML<-1> = 'window.location="':CGI$PATH:'/MVDB.MAIN?dbname=";' ;* start with default dashboard after login        HTML<-1> = '</script>'        HTML<-1> = '</body>'        HTML<-1> = '</html>'        CALL WEB.SEND(HTML)        GLOBAL.INFO(100) = 1 ;* Intentional Stop        STOP      END    END    * handle P-R-G for widget input form submit*    WRITE CGI$VARS ON F.MVDB.UDATA,SESSION$ID:'$POSTVARS'*    WRITE CGI$VALS ON F.MVDB.UDATA,SESSION$ID:'$POSTVALS'*    HTML = ''*    HTML<-1> = '<html>'*    HTML<-1> = '<body>'*    HTML<-1> = '<script type="text/javascript">'*    HTML<-1> = 'window.location="':CGI$PATH:'/MVDB.MAIN?dbprg=1";'*    HTML<-1> = '</script>'*    HTML<-1> = '</body>'*    HTML<-1> = '</html>'*    CALL WEB.SEND(HTML)*    GLOBAL.INFO(100) = 1 ;* Intentional Stop*    STOP*  ENDEND*LOCATE "dbprg" IN CGI$VARS SETTING POS THEN*  IF CGI$VALS<POS> THEN*    READ CGI$VARS FROM F.MVDB.UDATA,SESSION$ID:'$POSTVARS' THEN*      READ CGI$VALS FROM F.MVDB.UDATA,SESSION$ID:'$POSTVALS' ELSE CGI$VALS = ''*    END*    DELETE F.MVDB.UDATA,SESSION$ID:'$POSTVARS'*    DELETE F.MVDB.UDATA,SESSION$ID:'$POSTVALS'*  END*END* END OF 10-07-16*LOCATE 'generatepdf' IN CGI$VARS SETTING GENERATE.PDF ELSE GENERATE.PDF=0; * 4-25-16LOCATE 'generateexcel' IN CGI$VARS SETTING GENERATE.EXCEL ELSE GENERATE.EXCEL=0; *EXCEL* 6-27-16W$EXCELABLE=0;   *EXCEL* 6-27-16GO.BACK=0;   * 4-25-16*GOBACK.REENTRY:; * 4-25-16** udview, if present, is the view name to which  the associated* udpos and udval parameters apply.LOCATE "udview" IN CGI$VARS SETTING POS THEN  udview = CGI$VALS<POS>END ELSE udview = ""*LOCATE "dbname" IN CGI$VARS SETTING POS THEN  CALL PUT.SESSION.VAR("current_db",CGI$VALS<POS>)END*LOCATE 'refresh' IN CGI$VARS SETTING POS THEN  *really, this should be stored in the user record per db key  IF CGI$VALS<POS> = '0' THEN CGI$VALS<POS> = ''  CALL GET.SESSION.VAR("current_db",r.current.db)  IF r.current.db = '' THEN r.current.db = USER.DEFAULT.DB  CALL PUT.SESSION.VAR(r.current.db:"!refresh",CGI$VALS<POS>)END*9-23-16***9-23-16*** 4-25-16 SUPPORT AUTOMATIC BACKOUT FROM A DRILLDOWN*9-23-16***9-23-16**EXCEL*IF NOT(GO.BACK) AND NOT(GENERATE.PDF) THEN*9-23-16*IF NOT(GO.BACK) AND NOT(GENERATE.PDF) AND NOT(GENERATE.EXCEL) THEN; *EXCEL* 6-27-16*9-23-16*   CALL DRILLDOWN.STACK.RTNE(F.MVDB.UDATA,DRILLDOWN.STACK,GO.BACK)*9-23-16*   IF GO.BACK THEN GOTO GOBACK.REENTRY*9-23-16*END ELSE*9-23-16*   DRILLDOWN.STACK = ""*9-23-16*ENDDRILLDOWN.STACK=''; *9-23-16G$DRILLDOWN.MODE = FALSELOCATE "dd" IN CGI$VARS SETTING POS THEN   IF CGI$VALS<POS> <> '' THEN      G$DRILLDOWN.MODE = TRUE   ENDEND*9-23-16** END OF 4-25-16*LOCATE "sw" IN CGI$VARS SETTING POS THEN  FORM.SUBMIT.WIDGET = CGI$VALS<POS>END ELSE FORM.SUBMIT.WIDGET = ""*IF G$DRILLDOWN.MODE THEN  * This is a drill-down call. Load up the "drilldown" dashboard  * and populate it only with this single widget.  LOCATE "dd_from" IN CGI$VARS SETTING POS THEN    G$DD.REFERRER = CGI$VALS<POS>  END  LOCATE "dd_from_db" IN CGI$VARS SETTING POS THEN    G$DD.FROM.DB = CGI$VALS<POS>  END  G$CURRENT.DB = "drilldown"  MAT DB.ITEM = ''  READV DD.FROM.DB.THEME FROM F.MVDB.DEFS, G$DD.FROM.DB, 7 ELSE DD.FROM.DB.THEME = ''  DB.THEME = DD.FROM.DB.THEME  DB.WIDGETS = udviewEND ELSE  CALL GET.SESSION.VAR("current_db",current.db)  IF current.db # "" THEN    G$CURRENT.DB = current.db  END ELSE    * No current dashboard is available in the session.    * Must be the first time through. Go get the default.    G$CURRENT.DB = USER.DEFAULT.DB    IF G$CURRENT.DB = '' THEN G$CURRENT.DB = "EMPTY" ;* Empty dashboard  END  *  MATREAD DB.ITEM FROM F.MVDB.DEFS, G$CURRENT.DB ELSE MAT DB.ITEM = ''ENDIF DB.THEME # '' THEN  READV THEME.CSS FROM F.MVDB.THEMES, DB.THEME, 1 ELSE THEME.CSS = ''END ELSE  READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''END** PJS 09-23-16: user altertnate logo overrides site logoIF USER.ALT.LOGO <> '' THEN  SITE.LOGO = USER.ALT.LOGOEND ELSEIF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  ENDENDIF NOT(INDEX(SITE.LOGO,'/',1)) THEN  SITE.LOGO = '/db/images/':SITE.LOGOEND*CALL GET.SESSION.VAR("login_date",login.date)CALL GET.SESSION.VAR("login_time",login.time)G$LOGIN.DATE = login.dateG$LOGIN.TIME = login.time**PDF** When generating a PDF, get name of widget to render into PDF.* When generating iframe content, get the HTML widget name to* show in the iframe.WIDGET.OWN.STYLE = FALSESINGLE.WIDGET = ""PDF.WIDGET.NAME = ""* 4-25-16 *IF PDF$ENABLED THEN* 4-25-16 *  LOCATE 'generatepdf' IN CGI$VARS SETTING POS ELSE POS=0* 4-25-16 *  IF POS THEN* 4-25-16 *    PDF.WIDGET.NAME = CGI$VALS<POS>* 4-25-16 *    SINGLE.WIDGET = PDF.WIDGET.NAME* 4-25-16 *  END* 4-25-16 *END*** 4-25-16 CHANGED LOGIC*IF PDF$ENABLED AND GENERATE.PDF THEN  PDF.WIDGET.NAME = CGI$VALS<GENERATE.PDF>  SINGLE.WIDGET = PDF.WIDGET.NAME  W$PDFABLE=1  DB.WIDGETS=PDF.WIDGET.NAMEEND* END OF 4-25-16***EXCEL* 6-27-16 ADDED LOGIC*IF GENERATE.EXCEL THEN  EXCEL.WIDGET.NAME = CGI$VALS<GENERATE.EXCEL>  SINGLE.WIDGET = EXCEL.WIDGET.NAME  W$EXCELABLE=1  DB.WIDGETS=EXCEL.WIDGET.NAMEEND ELSE EXCEL.WIDGET.NAME=''* END OF 6-27-16IFRAME.WIDGET.NAME = ""LOCATE 'iframewidget' IN CGI$VARS SETTING POS ELSE POS=0IF POS THEN  IFRAME.WIDGET.NAME = CGI$VALS<POS>  SINGLE.WIDGET = IFRAME.WIDGET.NAMEEND** Build a list of subroutines to call to create this dashboard*DISP.CNT = DCOUNT( DB.WIDGETS, VM )WIDGET.NAME.POS = FALSEFOR DX = 1 TO DISP.CNT  MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, DB.WIDGETS<1,DX> THEN    ADD.OK = TRUE    IF WIDGET.USERS = "ADMIN" THEN      IF NOT(adminauth) THEN ADD.OK = FALSE ;* Only usable by authenticated admins    END ELSE IF WIDGET.USERS # "" THEN ;* Some user restrictions have been assigned      LOCATE userid IN WIDGET.USERS<1> SETTING POS ELSE ADD.OK = FALSE    END    IF ADD.OK THEN      *PDF* if generating PDF or iframe content, exclude other widgets      *EXCEL* also applies to generating EXCEL      IF SINGLE.WIDGET = "" OR SINGLE.WIDGET = DB.WIDGETS<1,DX> THEN        WIDGET.NAME.POS += 1        G$WIDGET.NAME.LIST<1,WIDGET.NAME.POS> = DB.WIDGETS<1,DX>        G$WIDGET.SUB.LIST<1,WIDGET.NAME.POS> = WIDGET.SUB      END    END  ENDNEXT DX*DIM TEMPLATE.AREA(5)MAT TEMPLATE.AREA = ''*MAT GLOBAL.TEMP.DATA = '' ;* InitializeMATREAD GLOBAL.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$UG" ELSE MAT GLOBAL.USER.DATA = ''*CALL GET.SESSION.VAR("debug_widgets",DEBUG.WIDGETS) ;* Retrieve a list of widgets user is debuggingIF adminauth THEN ;* Only administrators can put widgets into debug mdoe.  LOCATE "debug_widget" IN CGI$VARS SETTING POS THEN    DEBUG.WIDGET = CGI$VALS<POS>    LOCATE DEBUG.WIDGET IN DEBUG.WIDGETS SETTING POS ELSE      DEBUG.WIDGETS<-1> = DEBUG.WIDGET      CALL PUT.SESSION.VAR("debug_widgets",DEBUG.WIDGETS)    END  END  LOCATE "undebug_widget" IN CGI$VARS SETTING POS THEN    UNDEBUG.WIDGET = CGI$VALS<POS>    LOCATE UNDEBUG.WIDGET IN DEBUG.WIDGETS SETTING DPOS THEN      DEBUG.WIDGETS = DELETE( DEBUG.WIDGETS, DPOS, 0, 0 )      CALL PUT.SESSION.VAR("debug_widgets",DEBUG.WIDGETS)    END  ENDEND*CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS) ;* Retrieve a list of failed widgets this sessionLOCATE "unfail_widget" IN CGI$VARS SETTING POS THEN  * The user has asked to take this widget out of failed mode and try running the widget again.  UNFAIL.WIDGET = CGI$VALS<POS>  LOCATE UNFAIL.WIDGET IN FAILED.WIDGETS SETTING DPOS THEN    FAILED.WIDGETS = DELETE( FAILED.WIDGETS, DPOS, 0, 0 )    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  ENDEND** Was there a running widget that didn't complete? If so, it's a failed widget that didn't return* control to MVDB.MAIN. Let's add it to the list of failed widgets this session so we can avoid* producing blank pages for the user.*CALL GET.SESSION.VAR("running_widget",FAILED.WIDGET)CALL GET.SESSION.VAR("running_widget_dt",FAILED.WIDGET.DT)IF FAILED.WIDGET # "" THEN  FW.DATE = FIELD( FAILED.WIDGET.DT, '*', 1 )  FW.TIME = FIELD( FAILED.WIDGET.DT, '*', 2 )  FW.LAPSE = TIME() - FW.TIME  FW.LAPSE += ((DATE() - FW.DATE) * 86400)  IF SITE$W.MAX.DUR = "" THEN SITE$W.MAX.DUR = 10 ;* Default  IF FW.LAPSE < SITE$W.MAX.DUR THEN FAILED.WIDGET = ""ENDIF FAILED.WIDGET # "" THEN  CALL PUT.SESSION.VAR("running_widget","")  CALL PUT.SESSION.VAR("running_widget_dt","")  LOCATE FAILED.WIDGET IN FAILED.WIDGETS SETTING FWPOS ELSE    FAILED.WIDGETS<-1> = FAILED.WIDGET    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  ENDEND** Widgets appearing in FAILED.WIDGETS and DEBUG.WIDGETS are both hijacked at runtime, and our* SUB.DEBUG.WIDGET subroutine is executed in place of the subroutine in the widget definition.* The difference is that FAILED.WIDGETS are widgets that this program has determined to have* failed. DEBUG.WIDGETS are functional widgets that the user has put into debug mode.* In both cases, the widget remains in this list until the user removes it using controls * within the SUB.DEBUG.WIDGET widget.*WIDGET.CNT = DCOUNT( G$WIDGET.NAME.LIST, VM )FOR VX = 1 TO WIDGET.CNT  WIDGET.NAME = G$WIDGET.NAME.LIST<1,VX>  MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, WIDGET.NAME ELSE MAT WIDGET.ITEM = ''*9-23-16** FIX 6-1-16 *  MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME ELSE MAT WIDGET.USER.DATA = ''*9-23-16** FIX 6-1-16 **9-23-16*  IF GO.BACK THEN *9-23-16*     MAT WIDGET.USER.DATA=''*9-23-16*   END ELSE*9-23-16*     MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME ELSE MAT WIDGET.USER.DATA = ''*9-23-16*   END*9-23-16** END OF 6-1-16  MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME ELSE MAT WIDGET.USER.DATA = ''; *9-23-16*  *  MAP.TYPE.SUFFIX = ""  IF WIDGET.NAME = udview THEN    * We need to set values in WIDGET.USER.DATA before calling this routine    * Process links.    UDN = 1    SEARCH.DONE = FALSE    LOOP      SEARCH.NAME = "udpos":UDN      LOCATE SEARCH.NAME IN CGI$VARS SETTING POS THEN        udpos = CGI$VALS<POS>        IF udpos MATCHES "1N0N" THEN          IF udpos < 1 OR udpos > 100 THEN UDN +=1 ; CONTINUE        END ELSE UDN += 1 ; CONTINUE        SEARCH.NAME = "udval":UDN        LOCATE SEARCH.NAME IN CGI$VARS SETTING POS THEN          WIDGET.USER.DATA(udpos) = CGI$VALS<POS>        END      END ELSE SEARCH.DONE = TRUE    UNTIL SEARCH.DONE DO      UDN += 1    REPEAT    * Process Inputs.    VARCNT = DCOUNT( CGI$VARS, AM )    FOR CGIVX = 1 TO VARCNT      IF CGI$VARS<CGIVX>[1,4] = "inp_" THEN        udpos = FIELD(CGI$VARS<CGIVX>,'_',2)        IF udpos MATCHES "1N0N" THEN          IF udpos >= 1 AND udpos <= 100 THEN            WIDGET.USER.DATA(udpos) = CGI$VALS<CGIVX>          END        END      END      *Look for checkboxes that didn't come back      *and stuff a zero in there.      IF CGI$VARS<CGIVX>[1,9] = 'mvdbcxbx_' THEN        udpos = FIELD(CGI$VARS<CGIVX>,'_',2)        LOCATE 'inp_':udpos IN CGI$VARS SETTING CXBX.POS ELSE          IF udpos >= 1 AND udpos <= 100 THEN            WIDGET.USER.DATA(udpos) = 0          END        END      END    NEXT CGIVX    *    LOCATE 'mapdd' IN CGI$VARS SETTING POS THEN      * This is a map drilldown. Get the map name from the state code      STATE.CODE = WIDGET.USER.DATA(1)      READ STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ""      CONVERT "," TO @VM IN STATE.NAMES      LOCATE STATE.CODE IN STATE.NAMES<1> SETTING STATE.POS THEN        WIDGET.USER.DATA(2) = STATE.NAMES<2,STATE.POS>        MAP.TYPE.SUFFIX = STATE.CODE ;* Add this to the widget type      END    END  END  *  * If this is a USA map widget set in drill-down mode for a specific state  * that state name will be in WIDGET.USER.DATA(1). This code below is necessary  * to ensure that the widget stays in the state map mode until the user  * changes it.  *  IF MAP.TYPE.SUFFIX = "" THEN MAP.TYPE.SUFFIX = WIDGET.USER.DATA(1)<1>  *  IF FORM.SUBMIT.WIDGET = WIDGET.NAME THEN    * The user clicked the "go" button on the form section of this widget.    G$SUBMITTED = 1  END ELSE    G$SUBMITTED = 0  END  *  * The widget debugger uses GLOBAL.INFO(90) to determine if the widget is in debug  * mode due to user request, or if it is being forced into debug mode by MVDB.MAIN  *  GLOBAL.INFO(90) = ""  GLOBAL.INFO(91) = G$WIDGET.SUB.LIST<1,VX> ;* Original subroutine name  WDEBUG.MODE = 0 ; WFAIL.MODE = 0  *  LOCATE WIDGET.NAME IN FAILED.WIDGETS SETTING DUM THEN    * This widget failed last time we tried to run it. Let's run the "Failed Widget" subroutine instead.    * This subroutine will have access to all of the information that would have been passed to the    * failed widget, so diagnostic information can be presented through this widget.    GLOBAL.INFO(90) = "FAIL"    SUBNAME = "SUB.DEBUG.WIDGET"    WFAIL.MODE = 1  END ELSE    LOCATE WIDGET.NAME IN DEBUG.WIDGETS SETTING DUM THEN      GLOBAL.INFO(90) = "DEBUG"      SUBNAME = "SUB.DEBUG.WIDGET"      WDEBUG.MODE = 1    END ELSE      SUBNAME = G$WIDGET.SUB.LIST<1,VX>    END  END  MAT WIDGET.INFO = "" ;* clear this one out for the new call  G$WIDGET.NAME = WIDGET.NAME  G$WIDGET.SUB = SUBNAME  G$WIDGET.CALL.TIME<1,VX> = DATE():"*":TIME()*#MAKE# RL IF 0 THEN  START.TIMER = SYSTEM(12)*#MAKE# RL END  READ TST FROM F.MD, SUBNAME THEN    CALL PUT.SESSION.VAR("running_widget",WIDGET.NAME)    DT.STAMP = DATE():"*":TIME()    CALL PUT.SESSION.VAR("running_widget_dt",DT.STAMP)    CALL @SUBNAME    CALL PUT.SESSION.VAR("running_widget","")    CALL PUT.SESSION.VAR("running_widget_dt","")  END ELSE    W$TITLE = WIDGET.NAME:" (ERROR)"    W$TYPE = "TEXT"    W$TEXT.DATA = SUBNAME:" not cataloged."  END  * Special handling for drill-down to a state level on a USA Map  IF W$TYPE = "USAMAP" AND MAP.TYPE.SUFFIX # "" THEN    W$TYPE := ":":MAP.TYPE.SUFFIX  END*#MAKE# RL IF 0 THEN  G$WIDGET.CALL.DUR<1,VX> = SYSTEM(12) - START.TIMER*#MAKE# RL END  MATWRITE WIDGET.USER.DATA ON F.MVDB.UDATA, SESSION$ID:"$":WIDGET.NAME  *  IF NOT(W$HIDDEN) THEN    *EXCEL* 6-27-16 DETERMINE IF W$TYPE CAN GENERATE EXCEL    BEGIN CASE       CASE W$EXCELABLE; NULL       CASE W$TYPE = 'TABLE'; W$EXCELABLE=1       CASE INDEX(W$TYPE,'COLUMN',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'LINE',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'BAR',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'AREA',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'PIE',1); W$EXCELABLE=1       CASE INDEX(W$TYPE,'DOUGHNUT',1); W$EXCELABLE=1       CASE 1; W$EXCELABLE=0    END CASE    *EXCEL* END OF 6-27-16    GOSUB MAKE.HTML    LOCATE WIDGET.NAME IN DB.WIDGETS<1> SETTING DB.DEFS.POS THEN      AREA = DB.WIDGET.AREA<1,DB.DEFS.POS>      IF NOT(AREA MATCHES "1N0N") THEN AREA = 1      IF AREA < 1 OR AREA > 5 THEN AREA = 1    END ELSE AREA = 1            TEMPLATE.AREA(AREA)<-1> = HTML.DIV  ENDNEXT VX*MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA,SESSION$ID:"$UG"MATWRITE W$WEBSERVICE.DATA ON F.MVDB.UDATA,SESSION$ID:"$WEBSERVICE"; *11-30-15** Send template**PDF* Use special inner template for PDF & iframesIF IFRAME.WIDGET.NAME # "" THEN  * iframe content just contains widget-generated HTML, no extra styles, script, etc.  TEMPLATE = "<!-- AREA1 --><!-- AREA2 --><!-- AREA3 --><!-- AREA4 --><!-- AREA5 -->"END ELSE  IF PDF.WIDGET.NAME # "" THEN    IF WIDGET.OWN.STYLE THEN      * Widget HTML has <head> tag - supplies its own styles      TEMPLATE = "<!-- AREA1 --><!-- AREA2 --><!-- AREA3 --><!-- AREA4 --><!-- AREA5 -->"    END ELSE      * PDF template has single <div> for all "areas"      READ TEMPLATE FROM F.WEB.FORMS, "pdf_inner_template" ELSE TEMPLATE = "pdf_inner_template not found."    END  END ELSE    * normal widget template with area for header, 3 columns & footer    READ TEMPLATE FROM F.WEB.FORMS, "db_inner_template" ELSE TEMPLATE = "db_inner_template not found."  ENDENDCALL SWAP(TEMPLATE,'<!-- column_style -->',"layout":DB.TEMPLATE)*FOR AX = 1 TO 5  CALL SWAP(TEMPLATE,"<!-- AREA":AX:" -->",TEMPLATE.AREA(AX))NEXT AX**PDF* Use special PDF html template for PDF outputIF IFRAME.WIDGET.NAME # "" THEN  * iframe content just contains widget-generated HTML, no extra styles, script, etc.  MAIN.TEMPLATE = "<!-- DASHBOARD -->"END ELSE  IF PDF.WIDGET.NAME # "" THEN    IF WIDGET.OWN.STYLE THEN      * Widget HTML has <head> tag - supplies its own styles      MAIN.TEMPLATE = "<!-- DASHBOARD -->"    END ELSE      * PDF template does not include print, refresh, header or footer      READ MAIN.TEMPLATE FROM F.WEB.FORMS, "pdftemplate" ELSE MAIN.TEMPLATE = "pdftemplate missing."    END  END ELSE    * normal dashboard template    READ MAIN.TEMPLATE FROM F.WEB.FORMS, "dbtemplate" ELSE MAIN.TEMPLATE = "dbtemplate missing."  ENDEND** Insert header stuffADMIN.HEADER = ""IF adminauth = 1 THEN  ADMIN.HEADER := '<li class="admin_tab"><a href="':CGI$PATH:'/MVDB.ADMIN">Admin Area</a></li>'ENDADMIN.HEADER := '<li class="admin_tab"><a href="':CGI$PATH:'/MVDB.MAIN?logout">Log Out</a></li>'HEADER = '<div id="dashboard_nav"><ol class="dashboard_list">'CALL SWAP(MAIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)*11-30-15*EXECUTE "SSELECT MVDB.DEFS BY DB.SORT" CAPTURING JUNKIF NOT(W$EMAILED.REPORT) AND NOT(W$WEBSERVICE) THEN EXECUTE "SSELECT MVDB.DEFS BY DB.SORT" CAPTURING JUNK; *11-30-15DB.LIST = ''LOOP  READNEXT ID ELSE EXIT  DB.LIST<-1> = IDREPEATDB.CNT = DCOUNT( DB.LIST, AM )FOR DBX = 1 TO DB.CNT  ID = DB.LIST<DBX>  MATREAD DB.ITEM FROM F.MVDB.DEFS, ID ELSE MAT DB.ITEM = ""  ADD.OK = TRUE  IF DB.USERS.ALLOWED = "ADMIN" THEN    IF NOT(adminauth) THEN ADD.OK = FALSE ;* This is only for authenticated admins  END ELSE IF DB.USERS.ALLOWED # "" THEN ;* Some user restrictions have been assigned     LOCATE userid IN DB.USERS.ALLOWED<1> SETTING POS ELSE ADD.OK = FALSE   END   IF ADD.OK = TRUE THEN    IF ID = G$CURRENT.DB THEN      HEADER := '<li class="db_active"><a href="':CGI$PATH:'/MVDB.MAIN?dbname=':ID:'">':ID:'</a></li>'    END ELSE      HEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN?dbname=':ID:'">':ID:'</a></li>'    END    HEADER := CHAR(10)  ENDNEXT DBXHEADER := ADMIN.HEADERHEADER := '</ol></div>'IF THEME.CSS # '' THEN THEME.CSS = '<link rel="Stylesheet" href="/db/themes/':THEME.CSS:'" media="screen" type="text/css" />'CALL SWAP(MAIN.TEMPLATE,'<!-- HEADER -->',HEADER)CALL SWAP(MAIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)CALL SWAP(MAIN.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)* Insert footer stuffFOOTER = ''*01-25-16*IF G$DRILLDOWN.MODE THEN*4-25-16*IF G$DRILLDOWN.MODE AND NOT(W$WEBSERVICE) THEN; *01-25-16*4-25-16*  IF G$DD.FROM.DB # "" THEN*4-25-16*    URLENCODE.STRING = G$DD.FROM.DB*4-25-16*    GOSUB URL.ENCODE*4-25-16*    DB.URL = NEW.STRING*4-25-16*    FOOTER = '<a href="/dbc/MVDB.MAIN?dbname=':DB.URL:'">Go Back</a><br />'*4-25-16*  END*4-25-16*END*9-23-16***9-23-16*** 4-25-16 NEW SUPPORT FOR ALLOWING BACKUP*9-23-16***9-23-16*IF DRILLDOWN.STACK<2> <> '' THEN*9-23-16*   FOOTER='<a href="/dbc/MVDB.MAIN?dbname=go_back">Go Back</a><br />'*9-23-16* END*9-23-16** END OF 4-25-16IF WATERMARK # '' THEN  FOOTER := WATERMARK:'<br/>'ENDCALL SWAP(MAIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)*CALL GET.SESSION.VAR(G$CURRENT.DB:"!refresh",REFRESH.RATE)REFRESH = ""IF REFRESH.RATE # '' THEN  RATES = "1":VM:"2":VM:"3":VM:"4":VM:"5":VM:"6":VM:"7":VM:"8":VM:"9"  RATES<2> = "15":VM:"30":VM:"60":VM:"120":VM:"300":VM:"600":VM:"900":VM:"1800":VM:"3600"  LOCATE REFRESH.RATE IN RATES<1> SETTING RPOS THEN    REFRESH = "<meta http-equiv='refresh' content='":RATES<2,RPOS>:"'>"  ENDEND*IF SITE$REFRESH = 'Y' THEN  READ REFRESH.SLIDER FROM F.WEB.FORMS, 'RefreshSlider' ELSE REFRESH.SLIDER=''  CALL SWAP(MAIN.TEMPLATE,'<!-- RefreshSlider -->',REFRESH.SLIDER)  CALL SWAP(MAIN.TEMPLATE,'<!-- REFRESH_RATE -->',REFRESH.RATE)  CALL SWAP(MAIN.TEMPLATE,'<!-- REFRESH -->',REFRESH)  READ TRACK FROM F.WEB.FORMS, 'outerTrackWrapper' ELSE TRACK = ''  CALL SWAP(MAIN.TEMPLATE,'<!-- outerTrackWrapper -->',TRACK)  ENDCALL SWAP(MAIN.TEMPLATE,'<!-- DASHBOARD -->',TEMPLATE)**PDF* Generate the PDF from HTML in MAIN.TEMPLATEIF PDF$ENABLED AND W$PDFABLE AND PDF.WIDGET.NAME # "" THEN  CALL SUB.PDF.FUNC('generate', MAIN.TEMPLATE)  MAIN.TEMPLATE = ''END*EXCEL* Generate the EXCEL from HTML in MAIN.TEMPLATE* 6-27-16  *EXCEL*IF W$EXCELABLE AND EXCEL.WIDGET.NAME # "" THEN  CALL SUB.EXCEL.FUNC('generate', MAIN.TEMPLATE,EXCEL.WIDGET.NAME)END* END OF 6-27-16 *EXCEL***** 9-23-16 NEW DRILLDOWN AND BACKUP LOGIC REQUIRES SAVING GLOBAL.USER.DATA**         AT COMPLETION OF PROCESS**READ DD.STACK FROM F.MVDB.UDATA, SESSION$ID:'$DD.STACK' ELSE DD.STACK=''*DD.LEVEL=DCOUNT(DD.STACK,AM)*IF NOT(DD.LEVEL) THEN DD.LEVEL=1*MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA, SESSION$ID:'$DD.':DD.LEVEL:'.GUD'*MATWRITE WIDGET.USER.DATA ON F.MVDB.UDATA, SESSION$ID:'$':WIDGET.NAME:'$DD.':DD.LEVEL:'.WUD'; * 9-23-16*CALL WEB.SEND(MAIN.TEMPLATE)GLOBAL.INFO(100) = 1 ;* Process completed successfullySTOP*MAKE.HTML: **HTML = ''MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, W$TYPE ELSE MAT WIDGET.TYPES = ""WIDGET.OWN.STYLE = FALSE ;*PDF* set to TRUE if widget-generated HTML includes <head> tag*BEGIN CASE  CASE WT$GROUP = "LC" OR WT$GROUP = "BAR"    IF WT$GROUP = "BAR" THEN CHART.TYPE = "BAR" ELSE      CHART.TYPE = "FCLINECOL"      MULTI.SERIES = (WT$HANDLER = "M")    END    CALL XML.ENCODE(W$BAR.VALUES,"")    CALL XML.ENCODE(W$BAR.LABELS,"")    CALL XML.ENCODE(W$BAR.XLABELS,"")    CALL XML.ENCODE(W$BAR.XMEMO,"")    CALL XML.ENCODE(W$BAR.YMEMO,"")    CALL XML.ENCODE(W$BAR.CAPTION,"")    *1-26-15* W$PRINTABLE = 0  CASE WT$GROUP = "PIE"    CHART.TYPE = WT$HANDLER    CALL XML.ENCODE(W$PIE.LABELS,"")    CALL XML.ENCODE(W$PIE.VALUES,"")    CALL XML.ENCODE(W$PIE.CAPTION,"")    *1-26-15* W$PRINTABLE = 0  CASE WT$GROUP = "FW"    CHART.TYPE = WT$HANDLER    FW.NAME = WT$SWF    CALL XML.ENCODE(W$FW.LOWER.LIMIT.LABEL,"")    CALL XML.ENCODE(W$FW.UPPER.LIMIT.LABEL,"")    CALL XML.ENCODE(W$FW.CAPTION,"")    CALL XML.ENCODE(W$FW.SUBCAPTION,"")    CALL XML.ENCODE(W$FW.TRENDPOINT.LABELS,"")    *1-26-15* W$PRINTABLE = 0  CASE FIELD(W$TYPE,':',1) = "MAP"    CHART.TYPE = "MAP"    CHART.TYPE<2> = FIELD( W$TYPE,':',2)    *1-26-15* W$PRINTABLE = 0  CASE W$TYPE = "USAMAP"    CHART.TYPE = "MAP"    CHART.TYPE<2> = "USA"    *1-26-15* W$PRINTABLE = 0  CASE 1    CHART.TYPE = W$TYPEEND CASE*CHK.VAL = OCONV("123456","MD2$,")CURRENCY = CHK.VAL[1,1]THOUSAND = CHK.VAL[3,1]DECIMAL = CHK.VAL[7,1]**Make sure values are in the correct format for fusion charts*All the positions in WIDGET.INFO we're going to modifyCONV.POS.LIST = 41:AM:44:AM:45:AM:63:AM:73:AM:75:AM:61:AM:62:AMCONV.POS.LIST := 64:AM:54:AM:58:AM:59:AM:11:AM:17:AM:18:AM:66CONV.POS.LIST.LEN = DCOUNT(CONV.POS.LIST,AM)FOR CONV.POS = 1 TO CONV.POS.LIST.LEN  THIS.VAL = WIDGET.INFO(CONV.POS.LIST<CONV.POS>)  IF THIS.VAL # '' THEN    AM.CNT = DCOUNT(THIS.VAL,AM)    FOR ON.AM = 1 TO AM.CNT      VM.CNT = DCOUNT(THIS.VAL<ON.AM>,VM)      FOR ON.VM = 1 TO VM.CNT        SVM.CNT = DCOUNT(THIS.VAL<ON.AM,ON.VM>,SVM)        FOR ON.SVM = 1 TO SVM.CNT          CONV.VAL = THIS.VAL<ON.AM,ON.VM,ON.SVM>          IF OCONV(CONV.VAL,"MCN") # CONV.VAL THEN ;*output formatted            *Convert decimal to . and strip thousand separator            CONVERT DECIMAL:THOUSAND TO '.' IN CONV.VAL            THIS.VAL<ON.AM,ON.VM,ON.SVM> = CONV.VAL          END        NEXT ON.SVM      NEXT ON.VM    NEXT ON.AM    WIDGET.INFO(CONV.POS.LIST<CONV.POS>) = THIS.VAL  ENDNEXT CONV.POS*UPDATE.OPTS = W$CHART.OPTIONSOPTS.DELIM = AMGOSUB OPTS.UPDATEW$CHART.OPTIONS = UPDATE.OPTS*CONVERT '"' TO "'" IN W$FW.METER.VALUE.OPTSCONVERT '"' TO "'" IN W$FW.METER.TARGET.OPTSCONVERT '"' TO "'" IN W$FW.VALUE.OPTSCONVERT '"' TO "'" IN W$PIE.VALUE.OPTSCONVERT '"' TO "'" IN W$BAR.VALUE.OPTSCONVERT '"' TO "'" IN W$BAR.LABEL.OPTSCONVERT '"' TO "'" IN W$BAR.TREND.OPTSCONVERT '"' TO "'" IN W$BAR.XLABEL.OPTSCONVERT '"' TO "'" IN W$MAP.VALUE.OPTSCONVERT '"' TO "'" IN W$MAP.RANGE.OPTSCONVERT '"' TO "'" IN W$FW.SPARK.TREND.OPTSCONVERT '"' TO "'" IN W$FW.DIAL.OPTSCONVERT '"' TO "'" IN W$FW.TRENDPOINT.OPTS*CONVERT @VM TO " " IN W$FW.METER.TARGET.OPTSCONVERT @VM TO " " IN W$BAR.LABEL.OPTS*CONVERT @AM TO " " IN W$FW.METER.TARGET.OPTS** Set up default widget dimensions*  BEGIN CASE    CASE W$WIDTH = 1 AND DB.TEMPLATE = 3      *CHART.WIDTH = 220      *CHART.HEIGHT = 180      CHART.WIDTH = 260      CHART.HEIGHT = 240    CASE W$WIDTH = 1      *CHART.WIDTH = 220      *CHART.HEIGHT = 180      CHART.WIDTH = 300      CHART.HEIGHT = 270    CASE W$WIDTH = 2      *CHART.WIDTH = 400      *CHART.HEIGHT = 280      CHART.WIDTH = 520      CHART.HEIGHT = 350    CASE W$WIDTH = 3 OR 1      *CHART.WIDTH = 600      *CHART.HEIGHT = 400      CHART.WIDTH = 800      CHART.HEIGHT = 530  END CASE**DEBUG='CHART.TYPE=':CHART.TYPE*DEBUG<-1>='FUSION.WIDGETS.ENABLED=':FUSION.WIDGETS.ENABLED*TEMP.VARS=CGI$VARS; CONVERT CHAR(254) TO CHAR(253) IN TEMP.VARS*DEBUG<-1>='VARS=':TEMP.VARS*TEMP.VALS=CGI$VALS; CONVERT CHAR(254) TO CHAR(253) IN TEMP.VALS*DEBUG<-1>='VALS=':TEMP.VALS*WRITE DEBUG ON F.WEB.SESSION, 'DEBUG.TEST'*  BEGIN CASE    CASE CHART.TYPE[1,2] = "FW" AND FUSION.WIDGETS.ENABLED = 0 OR (CHART.TYPE<1> = "MAP" OR FIELD(W$TYPE,':',1) = "USAMAP" AND MAPS.ENABLED = 0)      W$TEXT.DATA = "Widget type ":W$TYPE<1>:" is not enabled."      W$TYPE = "TEXT"      W$INPUT.PROMPT = ""      W$LINK.LABEL = ""      W$LINK.ICON = ""      W$LINK.ICON.TXT = ""      W$LINK.LOCATION = ""      W$LINK.URL = ""      W$LINK.UD.POS = ""      W$LINK.UD.VAL = ""      W$LINK.DD.WIDGET = ""      W$LINK.URL.OPTS = ""      W$PRINTABLE = 0      W$HIDDEN = 0      HTML = '<pre>'      HTML<-1> = W$TEXT.DATA      HTML<-1> = '</pre>'    CASE CHART.TYPE = "FWGAUGE"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 260          *CHART.HEIGHT = 130          CHART.WIDTH = 260          CHART.HEIGHT = 240        CASE W$WIDTH = 1          *CHART.WIDTH = 260          *CHART.HEIGHT = 130          CHART.WIDTH = 300          CHART.HEIGHT = 270        CASE W$WIDTH = 2          *CHART.WIDTH = 400          *CHART.HEIGHT = 200          CHART.WIDTH = 520          CHART.HEIGHT = 270        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 750          *CHART.HEIGHT = 280          CHART.WIDTH = 1015          CHART.HEIGHT = 410      END CASE      *IF W$TYPE = "HLINEARGAUGE" OR W$TYPE = "HLED" THEN CHART.HEIGHT = 80      *IF W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" THEN CHART.WIDTH = 110 ; CHART.HEIGHT = 280      *IF W$TYPE = "CYLINDER" THEN CHART.WIDTH = 140      *IF W$TYPE = "BULB" THEN CHART.WIDTH = 110 ; CHART.HEIGHT = 130      IF W$TYPE = "HLINEARGAUGE" OR W$TYPE = "HLED" THEN CHART.HEIGHT = 80      IF W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" THEN CHART.WIDTH = 110      IF W$TYPE = "CYLINDER" THEN CHART.WIDTH = 140      IF W$TYPE = "BULB" THEN CHART.WIDTH = 110 ; CHART.HEIGHT = 130      IF W$TYPE = "ANGULARGAUGE" THEN        BEGIN CASE          CASE W$WIDTH = 1            CHART.HEIGHT = 130          CASE W$WIDTH = 2            CHART.HEIGHT = 200        END CASE      END      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML*      GOSUB TICKMARK.OPTIONS ;* Add chart options to support tickmarks*      IF W$TYPE = "THERMOMETER" AND W$FW.THERMOMETER.COLOR # "" THEN        LOCATE W$FW.THERMOMETER.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          W$FW.THERMOMETER.COLOR = NAME.COLOR<2,CPOS>        END        W$CHART.OPTIONS<-1> = "gaugeFillColor='":W$FW.THERMOMETER.COLOR:"'"      END* LJB 7-10-10 Removed DD restriction for angular and linear gauge charts. Not sure why it* was here in the first place*    IF W$TYPE = "HLED" OR W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" OR W$TYPE = "CYLINDER" OR W$TYPE = "BULB" THEN      IF W$FW.DD.WIDGET # "" THEN        FW.WIDGET.POS = 1        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          W$CHART.OPTIONS<-1> = " clickURL='":NEW.STRING:"'"        END      END*    END      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END*      PDATA = '<colorRange>'      COLOR.RANGE.OPTS = W$FW.COLOR.RANGE<4>      CONVERT '"' TO "'" IN COLOR.RANGE.OPTS      FOR PX = 1 TO DCOUNT( W$FW.COLOR.RANGE<1>, VM )        USE.COLOR = W$FW.COLOR.RANGE<3,PX>        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = "#FFFFFF" ;* White        END        CONVERT "#" TO "" IN USE.COLOR        UPDATE.OPTS = COLOR.RANGE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        COLOR.RANGE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<color minValue='":W$FW.COLOR.RANGE<1,PX>:"' maxValue='":W$FW.COLOR.RANGE<2,PX>:"' code='":USE.COLOR:"' ":COLOR.RANGE.OPTS<1,PX>:" />"      NEXT PX      PDATA := '</colorRange>'      METER.STYLE = 0      IF W$TYPE = "HLED" OR W$TYPE = "VLED" OR W$TYPE = "THERMOMETER" OR W$TYPE = "CYLINDER" OR W$TYPE = "BULB" THEN        PDATA := '[METER_VALUE]'        METER.STYLE = 1      END ELSE        IF W$TYPE = "ANGULARGAUGE" THEN          PDATA := '<dials>'          DNODE = "dial"        END ELSE          PDATA := '<pointers>'          DNODE = 'pointer'        END        FOR PX = 1 TO DCOUNT( W$FW.DIAL.VALUES<1>, VM )          UPDATE.OPTS = W$FW.DIAL.OPTS<1,PX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.DIAL.OPTS<1,PX> = UPDATE.OPTS          PDATA := "<":DNODE:" value='":W$FW.DIAL.VALUES<1,PX>:"' ":W$FW.DIAL.OPTS<1,PX>          FW.WIDGET.POS = PX          GOSUB MAKE.FW.DD.URL          IF URL # "" THEN            URLENCODE.STRING = URL            GOSUB URL.ENCODE ;* Encode the entire URL            PDATA := " link='":NEW.STRING:"'"          END          PDATA := " />"        NEXT PX        PDATA := '</':DNODE:'s>'        PDATA := '<trendpoints>'        FOR PX = 1 TO DCOUNT( W$FW.TRENDPOINT.VALUES<1>, VM )          UPDATE.OPTS = W$FW.TRENDPOINT.OPTS<1,PX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.TRENDPOINT.OPTS<1,PX> = UPDATE.OPTS          PDATA := "<point startValue='":W$FW.TRENDPOINT.VALUES<1,PX>:"' "          IF W$FW.TRENDPOINT.VALUES<2,PX> # "" THEN PDATA := "endValue='":W$FW.TRENDPOINT.VALUES<2,PX>:"' "          PDATA := "displayValue='":W$FW.TRENDPOINT.LABELS<1,PX>:"' ":W$FW.TRENDPOINT.OPTS<1,PX>:" />"        NEXT PX        PDATA := '</trendpoints>'      END      CALL SWAP(SXML,'[CHART.PALETTE]',W$FW.CHART.PALETTE)      CALL SWAP(SXML,'[UPPER.LIMIT]',W$FW.UPPER.LIMIT)      CALL SWAP(SXML,'[LOWER.LIMIT]',W$FW.LOWER.LIMIT)      CALL SWAP(SXML,'[UPPER.LIMIT.DISPLAY]',W$FW.UPPER.LIMIT.LABEL)      CALL SWAP(SXML,'[LOWER.LIMIT.DISPLAY]',W$FW.LOWER.LIMIT.LABEL)      CALL SWAP(SXML,'[NUMBER.PREFIX]',W$FW.NUMBER.PREFIX)      CALL SWAP(SXML,'[NUMBER.SUFFIX]',W$FW.NUMBER.SUFFIX)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)*      IF METER.STYLE THEN        HTML = ''        MASTER.SXML = SXML        MASTER.PDATA = PDATA        MASTER.FW.TEMPLATE = FW.TEMPLATE        VAL.CNT = DCOUNT( W$FW.METER.VALUE<1>, @VM )        FOR MVX = 1 TO VAL.CNT          UPDATE.OPTS = W$FW.METER.VALUE.OPTS<1,MVX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.METER.VALUE.OPTS<1,MVX> = UPDATE.OPTS          VALDATA = '<value ':W$FW.METER.VALUE.OPTS<1,MVX>' >':W$FW.METER.VALUE<1,MVX>:'</value>'          CALL SWAP(PDATA,'[METER_VALUE]',VALDATA)          CALL SWAP(SXML,'[CHART.DATA]',PDATA)          CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX:'_':MVX)          CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)          HTML := FW.TEMPLATE          SXML = MASTER.SXML          PDATA = MASTER.PDATA          FW.TEMPLATE = MASTER.FW.TEMPLATE        NEXT MVX*        IF VAL.CNT > 1 THEN          IF W$TYPE = "FWBULB" THEN            SHRINK.MLT = 1            FOR NN = 2 TO VAL.CNT              SHRINK.MLT -= .2            NEXT NN            IF SHRINK.MLT < .25 THEN SHRINK.MLT = .25            CHART.WIDTH = INT( CHART.WIDTH * SHRINK.MLT )            CHART.HEIGHT = INT( CHART.WIDTH * SHRINK.MLT )          END        END      END ELSE        CALL SWAP(SXML,'[CHART.DATA]',PDATA)        CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)        CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)        HTML = FW.TEMPLATE      END    CASE CHART.TYPE = "FWBULLET"      IF W$TYPE = "HBULLET" THEN        BEGIN CASE          CASE W$WIDTH = 1 AND DB.TEMPLATE = 3            *HART.WIDTH = 220            *HART.HEIGHT = 60            CHART.WIDTH = 260            CHART.HEIGHT = 60          CASE W$WIDTH = 1            *CHART.WIDTH = 220            *CHART.HEIGHT = 60            CHART.WIDTH = 300            CHART.HEIGHT = 60          CASE W$WIDTH = 2            *CHART.WIDTH = 400            *CHART.HEIGHT = 60            CHART.WIDTH = 520            CHART.HEIGHT = 60          CASE W$WIDTH = 3 OR 1            *CHART.WIDTH = 750            *CHART.HEIGHT = 60            CHART.WIDTH = 1015            CHART.HEIGHT = 60        END CASE      END ELSE        BEGIN CASE          CASE W$WIDTH = 1 AND DB.TEMPLATE = 3            *CHART.WIDTH = 110            *CHART.HEIGHT = 180            CHART.WIDTH = 110            CHART.HEIGHT = 240          CASE W$WIDTH = 1            *CHART.WIDTH = 110            *CHART.HEIGHT = 180            CHART.WIDTH = 110            CHART.HEIGHT = 270          CASE W$WIDTH = 2            *CHART.WIDTH = 110            *CHART.HEIGHT = 280            CHART.WIDTH = 110            CHART.HEIGHT = 300          CASE W$WIDTH = 3 OR 1            *CHART.WIDTH = 110            *CHART.HEIGHT = 400            CHART.WIDTH = 110            CHART.HEIGHT = 410        END CASE      END      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML*      GOSUB TICKMARK.OPTIONS ;* Add chart options to support tickmarks*      IF W$FW.BC.PLOT.COLOR # "" THEN        USE.COLOR = W$FW.BC.PLOT.COLOR        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = ""        END        IF USE.COLOR # "" THEN W$CHART.OPTIONS<-1> = "plotFillColor='":USE.COLOR:'"'      END      IF W$FW.BC.TARGET.COLOR # "" THEN        USE.COLOR = W$FW.BC.TARGET.COLOR        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = ""        END        IF USE.COLOR # "" THEN W$CHART.OPTIONS<-1> = "targetColor='":USE.COLOR:'"'      END*      IF W$FW.DD.WIDGET # "" THEN        FW.WIDGET.POS = 1        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          W$CHART.OPTIONS<-1> = " clickURL='":NEW.STRING:"'"        END      END*      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END*      PDATA = '<colorRange>'      COLOR.RANGE.OPTS = W$FW.COLOR.RANGE<4>      UPDATE.OPTS = COLOR.RANGE.OPTS      OPTS.DELIM = ' '      GOSUB OPTS.UPDATE      COLOR.RANGE.OPTS = UPDATE.OPTS      FOR PX = 1 TO DCOUNT( W$FW.COLOR.RANGE<1>, VM )        USE.COLOR = W$FW.COLOR.RANGE<3,PX>        LOCATE USE.COLOR IN NAME.COLOR<1> SETTING CPOS THEN          USE.COLOR = NAME.COLOR<2,CPOS>        END ELSE          IF USE.COLOR[1,1] # "#" THEN USE.COLOR = "#FFFFFF" ;* White        END        PDATA := "<color minValue='":W$FW.COLOR.RANGE<1,PX>:"' maxValue='":W$FW.COLOR.RANGE<2,PX>:"' code='":USE.COLOR:"' ":COLOR.RANGE.OPTS<1,PX>:" />"      NEXT PX      PDATA := '</colorRange>'      PDATA := '<value ':W$FW.METER.VALUE.OPTS:' >':W$FW.METER.VALUE:'</value>'      PDATA := '<target ':W$FW.METER.TARGET.OPTS:' >':W$FW.METER.TARGET:'</target>'      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CAPTION]',W$FW.CAPTION)      CALL SWAP(SXML,'[SUBCAPTION]',W$FW.SUBCAPTION)      CALL SWAP(SXML,'[CHART.PALETTE]',W$FW.CHART.PALETTE)      CALL SWAP(SXML,'[UPPER.LIMIT]',W$FW.UPPER.LIMIT)      CALL SWAP(SXML,'[LOWER.LIMIT]',W$FW.LOWER.LIMIT)      CALL SWAP(SXML,'[NUMBER.PREFIX]',W$FW.NUMBER.PREFIX)      CALL SWAP(SXML,'[NUMBER.SUFFIX]',W$FW.NUMBER.SUFFIX)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = FW.TEMPLATE    CASE CHART.TYPE = "FWSPARK"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 220          *CHART.HEIGHT = 40          CHART.WIDTH = 260          CHART.HEIGHT = 40        CASE W$WIDTH = 1          *CHART.WIDTH = 220          *CHART.HEIGHT = 40          CHART.WIDTH = 300          CHART.HEIGHT = 40        CASE W$WIDTH = 2          *CHART.WIDTH = 400          *CHART.HEIGHT = 40          CHART.WIDTH = 520          CHART.HEIGHT = 40        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 750          *CHART.HEIGHT = 40          CHART.WIDTH = 1015          CHART.HEIGHT = 40      END CASE      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML*      IF W$FW.DD.WIDGET # "" THEN        FW.WIDGET.POS = 1        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          W$CHART.OPTIONS<-1> = " clickURL='":NEW.STRING:"'"        END      END      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END*      PDATA = '<dataset>'      FOR PX = 1 TO DCOUNT( W$FW.VALUES<1>, VM )        UPDATE.OPTS = W$FW.VALUE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        W$FW.VALUE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<set value='":W$FW.VALUES<1,PX>:"' ":W$FW.VALUE.OPTS<1,PX>:" />"      NEXT PX      PDATA := '</dataset>'      IF W$FW.SPARK.TREND.BEG # "" THEN        PDATA := '<trendlines>'        FOR TLX = 1 TO DCOUNT( W$FW.SPARK.TREND.BEG, VM )          UPDATE.OPTS = W$FW.SPARK.TREND.OPTS<1,TLX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$FW.SPARK.TREND.OPTS<1,TLX> = UPDATE.OPTS          PDATA := "<line startValue='":W$FW.SPARK.TREND.BEG<1,TLX>:"' endValue='":W$FW.SPARK.TREND.END<1,TLX>:"' ":W$FW.SPARK.TREND.OPTS<1,TLX>:" />"        NEXT TLX        PDATA := '</trendlines>'      END      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CAPTION]',W$FW.CAPTION)      CALL SWAP(SXML,'[SUBCAPTION]',W$FW.SUBCAPTION)      CALL SWAP(SXML,'[CHART.PALETTE]',W$FW.CHART.PALETTE)      CALL SWAP(SXML,'[UPPER.LIMIT]',W$FW.UPPER.LIMIT)      CALL SWAP(SXML,'[LOWER.LIMIT]',W$FW.LOWER.LIMIT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = FW.TEMPLATE    CASE CHART.TYPE = "FWFP"      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ FW.TEMPLATE FROM F.WEB.FORMS, "FW_template.html" ELSE FW.TEMPLATE = "FW_template.html not found"      CALL SWAP(FW.TEMPLATE,'[FW_MODULE]',FW.NAME)*      READ SXML FROM F.MVDB.CONTROL, CHART.TYPE:".SETTINGS" ELSE SXML = ''      CONVERT AM TO "" IN SXML      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'chart'        GOSUB APPLY.XML.OPTS      END      COLOR.LIST = W$FW.COLORS      GOSUB APPLY.COLOR.OPTS*      PDATA = ''      FOR PX = 1 TO DCOUNT( W$FW.LABELS<1>, VM )        UPDATE.OPTS = W$FW.VALUE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        W$FW.VALUE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<set label='":W$FW.LABELS<1,PX>:"' value='":W$FW.VALUES<1,PX>:"' color='":COLOR.ARRAY<1,PX>:"' ":W$FW.VALUE.OPTS<1,PX>        FW.WIDGET.POS = PX        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          PDATA := " link='":NEW.STRING:"'"        END        PDATA := " />"      NEXT PX      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CAPTION]',W$FW.CAPTION)      CALL SWAP(SXML,'[SUBCAPTION]',W$FW.SUBCAPTION)      CALL SWAP(SXML,'[NUMBER.PREFIX]',W$FW.NUMBER.PREFIX)      CALL SWAP(SXML,'[NUMBER.SUFFIX]',W$FW.NUMBER.SUFFIX)      CALL SWAP(FW.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(FW.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(FW.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(FW.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = FW.TEMPLATE    CASE CHART.TYPE = "FCPIE"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 260          CHART.HEIGHT = 240        CASE W$WIDTH = 1          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 300          CHART.HEIGHT = 270        CASE W$WIDTH = 2          *CHART.WIDTH = 420          *CHART.HEIGHT = 240          CHART.WIDTH = 520          CHART.HEIGHT = 365        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 730          *CHART.HEIGHT = 320          CHART.WIDTH = 800          CHART.HEIGHT = 550      END CASE      PT.NAME = WT$SWF      PS.NAME = W$TYPE:".SETTINGS"      IF W$CHART.HEIGHT # "" THEN CHART.HEIGHT = W$CHART.HEIGHT      IF W$TYPE = "FC3DPIE" THEN        CHART.HEIGHT = INT(CHART.HEIGHT*.75)      END      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      READ PIE.TEMPLATE FROM F.WEB.FORMS, "FCF_template.html" ELSE PIE.TEMPLATE = "FCF_template.html not found"      PT.NAME = OCONV(PT.NAME,'MCL')      CALL SWAP(PIE.TEMPLATE,'[FCF_MODULE]',PT.NAME)*      READ SXML FROM F.MVDB.CONTROL, PS.NAME ELSE SXML = ''      CONVERT AM TO "" IN SXML      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'graph'        GOSUB APPLY.XML.OPTS      END      COLOR.LIST = W$PIE.COLORS      GOSUB APPLY.COLOR.OPTS      PDATA = ''      FOR PX = 1 TO DCOUNT( W$PIE.LABELS<1>, VM )        UPDATE.OPTS = W$PIE.VALUE.OPTS<1,PX>        OPTS.DELIM = ' '        GOSUB OPTS.UPDATE        W$PIE.VALUE.OPTS<1,PX> = UPDATE.OPTS        PDATA := "<set label='":W$PIE.LABELS<1,PX>:"' color='":COLOR.ARRAY<1,PX>:"' ":W$PIE.VALUE.OPTS<1,PX>:" value='":W$PIE.VALUES<1,PX>:"'"        FW.WIDGET.POS = PX        GOSUB MAKE.FW.DD.URL        IF URL # "" THEN          URLENCODE.STRING = URL          GOSUB URL.ENCODE ;* Encode the entire URL          PDATA := " link='":NEW.STRING:"'"        END        PDATA := ' />'      NEXT PX      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CHART.TITLE]',W$PIE.CAPTION)      RADIUS = INT(CHART.WIDTH/2)-INT(CHART.WIDTH*.15)      CALL SWAP(SXML,'[RADIUS]',RADIUS)      CALL SWAP(PIE.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(PIE.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(PIE.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(PIE.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = PIE.TEMPLATE    CASE CHART.TYPE = "FCLINECOL"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 260          CHART.HEIGHT = 240        CASE W$WIDTH = 1          *CHART.WIDTH = 220          *CHART.HEIGHT = 180          CHART.WIDTH = 300          CHART.HEIGHT = 270        CASE W$WIDTH = 2          *CHART.WIDTH = 420          *CHART.HEIGHT = 240          CHART.WIDTH = 520          CHART.HEIGHT = 300        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 730          *CHART.HEIGHT = 320          CHART.WIDTH = 1015          CHART.HEIGHT = 425      END CASE      IF W$CHART.HEIGHT # "" THEN CHART.HEIGHT = W$CHART.HEIGHT      BT.NAME = WT$SWF      BS.NAME = W$TYPE:".SETTINGS"      MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)      MOVIE.WIDTH = CHART.WIDTH + 75*      COLOR.LIST = W$BAR.COLORS      GOSUB APPLY.COLOR.OPTS*      READ BAR.TEMPLATE FROM F.WEB.FORMS, "FCF_template.html" ELSE BAR.TEMPLATE = "FCF_template.html not found"      BT.NAME = OCONV(BT.NAME,'MCL')      CALL SWAP(BAR.TEMPLATE,'[FCF_MODULE]',BT.NAME)*      READ SXML FROM F.MVDB.CONTROL, BS.NAME ELSE SXML = ''      CONVERT AM TO "" IN SXML      IF W$CHART.OPTIONS # "" THEN        XML.OPTS = W$CHART.OPTIONS        NODE.NAME = 'graph'        GOSUB APPLY.XML.OPTS      END      PDATA = ''      IF MULTI.SERIES THEN        PDATA := '<categories>'        FOR PX = 1 TO DCOUNT( W$BAR.XLABELS<1>, VM )          PDATA := "<category label='":W$BAR.XLABELS<1,PX>:"' ":W$BAR.XLABEL.OPTS<1,PX>:" />"        NEXT PX        PDATA := '</categories>'        FOR PX = 1 TO DCOUNT( W$BAR.LABELS,AM)          PDATA := "<dataset seriesname='":W$BAR.LABELS<PX>:"' color='":COLOR.ARRAY<1,PX>:"' ":W$BAR.LABEL.OPTS<PX>:" >"          FOR PXV = 1 TO DCOUNT( W$BAR.VALUES<PX>,VM)            UPDATE.OPTS = W$BAR.VALUE.OPTS<PX,PXV>            OPTS.DELIM = ' '            GOSUB OPTS.UPDATE            W$BAR.VALUE.OPTS<PX,PXV> = UPDATE.OPTS            MS.VALUE=W$BAR.VALUES<PX,PXV>;  *ZUMASYS 1-5-15            MS.LABEL=W$BAR.XLABELS<1,PXV>; *ZUMASYS 1-5-15* 7-29-15 CHANGE ANY &lt;br&gt;'s to spaces            LOOP              BR.POS=INDEX(MS.LABEL,'&lt;br&gt;',1)            UNTIL NOT(BR.POS) DO              MS.LABEL=MS.LABEL[1,BR.POS-1]:' ':(MS.LABEL[BR.POS+10,9999])            REPEAT* END OF 7-29-15            MS.SERIES=W$BAR.LABELS<PX>;    *ZUMASYS 3-15-15*ZUMASYS 1-5-15*          PDATA := "<set value='":W$BAR.VALUES<PX,PXV>:"' ":W$BAR.VALUE.OPTS<PX,PXV>            PDATA := "<set value='":MS.VALUE:"' ":W$BAR.VALUE.OPTS<PX,PXV>; *ZUMASYS 1-5-15            FW.WIDGET.POS = PX            GOSUB MAKE.FW.DD.URL            IF URL # "" THEN              URLENCODE.STRING = URL              GOSUB URL.ENCODE ;* Encode the entire URL              PDATA := " link='":NEW.STRING:"'"            END            PDATA := ' />'          NEXT PXV          PDATA := '</dataset>'        NEXT PX      END ELSE        FOR PX = 1 TO DCOUNT( W$BAR.XLABELS<1>, VM )          IF INDEX(W$BAR.VALUES<1,PX>,'-',1) THEN            SIGN.MINUS = 1          END ELSE SIGN.MINUS = 0* 3-4-15 ZUMASYS - SUPPORT DECIMALS IN BAR.VALUES          THIS.BAR.VALUES=W$BAR.VALUES<1,PX>          IF INDEX(THIS.BAR.VALUES,'.',1) THEN            THIS.BAR.VALUES.1=OCONV(FIELD(THIS.BAR.VALUES,'.',1),'MCN')            THIS.BAR.VALUES.2=OCONV(FIELD(THIS.BAR.VALUES,'.',2),'MCN')            W$BAR.VALUES<1,PX>=THIS.BAR.VALUES.1:'.':THIS.BAR.VALUES.2          END ELSE            W$BAR.VALUES<1,PX> = OCONV(THIS.BAR.VALUES, 'MCN' )          END* END OF 3-4-15 ZUMASYS          IF SIGN.MINUS THEN W$BAR.VALUES<1,PX> = '-':W$BAR.VALUES<1,PX>          PDATA := "<set label='":W$BAR.XLABELS<1,PX>:"' value='":W$BAR.VALUES<1,PX>+0:"' "          IF NOT(INDEX(W$BAR.VALUE.OPTS<1,PX>,'color=',1)) THEN* Color setting is not being overridden by the W$BAR.VALUE.OPTS info            PDATA := "color='":COLOR.ARRAY<1,1>:"' "          END          UPDATE.OPTS = W$BAR.VALUE.OPTS<1,PX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$BAR.VALUE.OPTS<1,PX> = UPDATE.OPTS          PDATA := ' ':W$BAR.VALUE.OPTS<1,PX>          FW.WIDGET.POS = PX          GOSUB MAKE.FW.DD.URL          IF URL # "" THEN            URLENCODE.STRING = URL            GOSUB URL.ENCODE ;* Encode the entire URL            PDATA := " link='":NEW.STRING:"'"          END          PDATA := ' />'        NEXT PX      END      IF W$BAR.TREND.BEG # "" THEN        PDATA := '<trendLines>'        FOR TLX = 1 TO DCOUNT( W$BAR.TREND.BEG<1>, VM )          PDATA := "<line startValue='":W$BAR.TREND.BEG<1,TLX>:"' "          IF W$BAR.TREND.END<1,TLX> # "" THEN PDATA := "endValue='":W$BAR.TREND.END<1,TLX>:"' "          UPDATE.OPTS = W$BAR.TREND.OPTS<1,TLX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$BAR.TREND.OPTS<1,TLX> = UPDATE.OPTS          PDATA := W$BAR.TREND.OPTS<1,TLX>          PDATA := " />"        NEXT TLX        PDATA := '</trendLines>'      END      CONVERT '"' TO "'" IN PDATA      CALL SWAP(SXML,'[CHART.DATA]',PDATA)      CALL SWAP(SXML,'[CHART.TITLE]',W$BAR.CAPTION)      CALL SWAP(SXML,'[YMEMO]',W$BAR.YMEMO<1>)      CALL SWAP(SXML,'[XMEMO]',W$BAR.XMEMO<1>)      CALL SWAP(BAR.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)      CALL SWAP(BAR.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)      CALL SWAP(BAR.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)      CALL SWAP(BAR.TEMPLATE,'<!-- CHARTXML -->',SXML)      HTML = BAR.TEMPLATE    CASE CHART.TYPE<1> = "MAP" OR FIELD(W$TYPE,':',1) = "USAMAP"      BEGIN CASE        CASE W$WIDTH = 1 AND DB.TEMPLATE = 3          NULL        CASE W$WIDTH = 1          NULL        CASE W$WIDTH = 2          *CHART.WIDTH = 420          *CHART.HEIGHT = 240          CHART.WIDTH = 520          CHART.HEIGHT = 300        CASE W$WIDTH = 3 OR 1          *CHART.WIDTH = 730          *CHART.HEIGHT = 320          CHART.WIDTH = 1015          CHART.HEIGHT = 425      END CASE      IF W$CHART.HEIGHT # "" THEN CHART.HEIGHT = W$CHART.HEIGHT      CALL XML.ENCODE(W$MAP.RANGE.NAME,"")      IF FIELD(W$TYPE,':',1) = "USAMAP" THEN        STATE.MAP = FIELD( W$TYPE,':',2)        IF STATE.MAP # "" THEN* This is a drill-down to a specific state detail. We need to match the* map name with the selected state.* selected state.          READ STATE.NAMES FROM F.MVDB.CONTROL, 'STATE.NAMES' ELSE STATE.NAMES = ""          CONVERT "," TO @VM IN STATE.NAMES          LOCATE STATE.MAP IN STATE.NAMES<1> SETTING STATE.POS THEN            MAP.NAME = STATE.NAMES<2,STATE.POS>          END ELSE            MAP.NAME = "USA"            W$TITLE := " - Error: Invalid State: ":STATE.MAP          END        END ELSE          MAP.NAME = "USA"        END      END ELSE        MAP.NAME = CHART.TYPE<2>      END      READ MAP.LIST FROM F.MVDB.CONTROL, 'FCMAP.NAMES' ELSE MAP.LIST = ""      LOCATE MAP.NAME IN MAP.LIST SETTING DUM THEN* This is a valid map name        MS.NAME = MAP.NAME:".SETTINGS"        READ SXML FROM F.MVDB.CONTROL, MS.NAME ELSE SXML = ''        IF SXML = "" THEN          MS.NAME = "FCMAP.SETTINGS"          READ SXML FROM F.MVDB.CONTROL, MS.NAME ELSE SXML = ''        END        MOVIE.HEIGHT = INT(CHART.HEIGHT *1.3)        MOVIE.WIDTH = CHART.WIDTH + 75*        READ MAP.TEMPLATE FROM F.WEB.FORMS, "FCMAP_template.html" ELSE MAP.TEMPLATE = "FMAP_template.html not found"        CALL SWAP(MAP.TEMPLATE,'[FCMAP_MODULE]',MAP.NAME)*        CONVERT AM TO "" IN SXML        IF W$CHART.OPTIONS # "" THEN          XML.OPTS = W$CHART.OPTIONS          NODE.NAME = 'map'          GOSUB APPLY.XML.OPTS        END*        MAPDATA = '<colorRange>'        FOR CX = 1 TO DCOUNT( W$MAP.RANGE.NAME<1>, @VM )          THIS.COLOR = W$MAP.RANGE.COLOR<1,CX>          LOCATE THIS.COLOR IN NAME.COLOR<1> SETTING CPOS THEN            USE.COLOR = NAME.COLOR<2,CPOS>          END ELSE USE.COLOR = THIS.COLOR          UPDATE.OPTS = W$MAP.RANGE.OPTS<1,CX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$MAP.RANGE.OPTS<1,CX> = UPDATE.OPTS          MAPDATA := "<color minValue='":W$MAP.RANGE.LOW<1,CX>:"' maxValue='":W$MAP.RANGE.HIGH<1,CX>:"' displayValue='":W$MAP.RANGE.NAME<1,CX>:"' color='":USE.COLOR          MAPDATA := "' ":W$MAP.RANGE.OPTS<1,CX>:" />"        NEXT CX        MAPDATA := '</colorRange>'        MAPDATA := '<data>'        FOR MX = 1 TO DCOUNT( W$MAP.IDS<1>, @VM )          IF W$MAP.VALUE.DD<1,MX> = 1 THEN            MAP.LINK = CGI$PATH:"/MVDB.MAIN?udview=":WIDGET.NAME:"&udpos1=1&udval1=":W$MAP.IDS<1,MX>:"&mapdd"          END ELSE IF W$MAP.VALUE.LINK<1,MX> # "" THEN            MAP.LINK = W$MAP.VALUE.LINK<1,MX>            IF W$MAP.LINK.MODE<1,MX> = "N" THEN MAP.LINK = "n-":MAP.LINK          END ELSE            IF W$FW.DD.WIDGET<1,MX> # "" THEN              FW.WIDGET.POS = MX              GOSUB MAKE.FW.DD.URL              MAP.LINK = URL            END ELSE              MAP.LINK = ""            END          END          IF MAP.LINK # "" THEN            URLENCODE.STRING = MAP.LINK            GOSUB URL.ENCODE            MAP.LINK = NEW.STRING            MAP.LINK = "link='":MAP.LINK:"' "          END          TOOLTEXT = W$MAP.VALUE.TOOLTEXT<1,MX>          CALL XML.ENCODE(TOOLTEXT,'')          UPDATE.OPTS = W$MAP.VALUE.OPTS<1,MX>          OPTS.DELIM = ' '          GOSUB OPTS.UPDATE          W$MAP.VALUE.OPTS<1,MX> = UPDATE.OPTS          MAPDATA := "<entity id='":W$MAP.IDS<1,MX>:"' value='":W$MAP.VALUES<1,MX>:"' ":W$MAP.VALUE.OPTS<1,MX>:" toolText='":TOOLTEXT:"' ":MAP.LINK:"/>"        NEXT MX        MAPDATA := '</data>'        CONVERT '"' TO "'" IN MAPDATA        CALL SWAP(SXML,'[CHART.DATA]',MAPDATA)        CALL SWAP(MAP.TEMPLATE,'<!-- chart_width -->',MOVIE.WIDTH)        CALL SWAP(MAP.TEMPLATE,'<!-- chart_height -->',MOVIE.HEIGHT)        CALL SWAP(MAP.TEMPLATE,'<!-- chart_div_id -->','flashcontent_':VX)        CALL SWAP(MAP.TEMPLATE,'<!-- CHARTXML -->',SXML)        HTML = MAP.TEMPLATE      END ELSE        HTML = "Map name '":MAP.NAME:"' not found in MVDB.CONTROL, FCMAP.NAMES"      END    CASE W$TYPE = "TABLE"      HTML<-1> = '<table class="gridWidget" width="100%" >'      HTML<-1> = '<thead>'      HTML<-1> = '<tr>'      TABLE.COLS = DCOUNT( W$TABLE.COL.LABELS<1>, VM )      FOR CHX = 1 TO TABLE.COLS        IF W$TABLE.COL.JUST<1,CHX> # "" THEN          ALIGN = ' align="':W$TABLE.COL.JUST<1,CHX>:'"'        END ELSE ALIGN = ""        LABEL = W$TABLE.COL.LABELS<1,CHX>        IF LABEL = '' THEN LABEL = '&nbsp;'        HTML<-1> = '<th':ALIGN:' >':LABEL:'</th>'      NEXT CHX      HTML<-1> = '</tr>'      HTML<-1> = '</thead>'      HTML<-1> = '<tbody>'      TABLE.ROWS = DCOUNT( W$TABLE.DATA, AM )      FOR TRX = 1 TO TABLE.ROWS        HTML<-1> = '<tr>'        THIS.ROW = W$TABLE.DATA<TRX>        FOR TRC = 1 TO TABLE.COLS          IF W$TABLE.COL.JUST<1,TRC> # "" THEN            ALIGN = ' align="':W$TABLE.COL.JUST<1,TRC>:'"'          END ELSE ALIGN = ""          VALUE = THIS.ROW<1,TRC>          IF VALUE = '' THEN VALUE = '&nbsp;'          THIS.COL = '<td':ALIGN:'>':VALUE:'</td>'          HTML<-1> = THIS.COL        NEXT TRC        HTML<-1> = '</tr>'      NEXT TRX      HTML<-1> = '</tbody>'      HTML<-1> = '<tfoot>'      HTML<-1> = '<tr>'      FOR CHX = 1 TO TABLE.COLS        IF W$TABLE.COL.JUST<1,CHX> # "" THEN          ALIGN = ' align="':W$TABLE.COL.JUST<1,CHX>:'"'        END ELSE ALIGN = ""        VALUE = W$TABLE.TOTALS<1,CHX>        IF VALUE = '' THEN VALUE = '&nbsp;'        HTML<-1> = '<td':ALIGN:'>':VALUE:'</td>'      NEXT CHX      HTML<-1> = '</tr>'      HTML<-1> = '</tfoot>'      HTML<-1> = '</table>'    CASE W$TYPE = "TEXT"      HTML = '<pre>'      HTML<-1> = W$TEXT.DATA      HTML<-1> = '</pre>'    CASE W$TYPE = "HTML"      HTML = W$HTML.DATA*PDF* Check if widget-generated HTML includes a <head> tag, which we interpret as having its own styling      IF INDEX(HTML,'<head>',1)+INDEX(HTML,'<HEAD>',1) THEN WIDGET.OWN.STYLE = TRUE      IF WIDGET.OWN.STYLE AND IFRAME.WIDGET.NAME = "" AND PDF.WIDGET.NAME = "" THEN* Not rendering PDF or returning iframe content - change* widget content to iframe so styles render properly.        CALL REBUILD.URL.STRING(IFRAME.URL.STRING)        URLENCODE.STRING = WIDGET.NAME        GOSUB URL.ENCODE        IFRAME.URL.STRING = '/dbc/MVDB.MAIN?iframewidget=':NEW.STRING:'&':IFRAME.URL.STRING ;* stash widget name in URL string so we know which widget to use for iframe content        HTML = '<iframe src="':IFRAME.URL.STRING:'" width="100%" style="height: 100vh;">':WIDGET.NAME:'</iframe>'      END    CASE 1      HTML = "INVALID TYPE ":W$TYPE  END CASE*  IF IFRAME.WIDGET.NAME # "" THEN* Returning iframe content - no widget styling needed    HTML.DIV = '<!-- WIDGETDATA -->'  END ELSE    IF WIDGET.OWN.STYLE AND PDF.WIDGET.NAME # "" THEN* Render PDF from widget HTML that has a <head> tag - no widget styling needed      HTML.DIV = '<!-- WIDGETDATA -->'    END ELSE* normal widget styles      HTML.DIV = WIDGET.DIV    END  END*  Q1.LINKS = ''  Q2.LINKS = ''  Q3.LINKS = ''  Q4.LINKS = ''  Q5.LINKS = ''** Add source code edit link for administrative user*** FIX 6-1-16 ADD A GO BACK IN ICON LIST*  NEXT.LINK.POS = DCOUNT(W$LINK.LABEL<1>,@VM)  NEXT.LINK.POS2 = DCOUNT(W$LINK.ICON<1>,@VM)  IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS=NEXT.LINK.POS2  READ DD.STACK FROM F.MVDB.UDATA, SESSION$ID:'$DD.STACK' ELSE DD.STACK=''  MAX.DD.STACK=DCOUNT(DD.STACK,AM)  IF MAX.DD.STACK > 2 THEN    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = 'arrow_left.png'    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Go Back"    W$LINK.URL<1,NEXT.LINK.POS> = "javascript:history.back()"; * 9-23-16 *    W$LINK.LOCATION<1,NEXT.LINK.POS> = "C"  END* END FIX 6-1-16  IF adminauth = 1 THEN* 6-1-16 *  NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )* 6-1-16 *  NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )* 6-1-16 *  IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "script_edit.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Edit BASIC Source"    IF WDEBUG.MODE OR WFAIL.MODE THEN      USE.SUBNAME = GLOBAL.INFO(91) ;* Original subroutine name    END ELSE USE.SUBNAME = SUBNAME    URLENCODE.STRING = USE.SUBNAME    GOSUB URL.ENCODE    URL.SUBNAME = NEW.STRING    W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=":URL.SUBNAME    W$LINK.URL.OPTS<1,NEXT.LINK.POS> = 'target="ED_MVDB.SUBS_':URL.SUBNAME:'"'    W$LINK.LOCATION<1,NEXT.LINK.POS> = "C"** Add debug widget link for administrative user*    IF NOT(WFAIL.MODE) THEN      NEXT.LINK.POS += 1      W$LINK.ICON<1,NEXT.LINK.POS> = "information.png" ;* Change this to a real debug icon      IF WDEBUG.MODE THEN        W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Normal Mode"      END ELSE        W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Debug Mode"      END      URLENCODE.STRING = WIDGET.NAME      GOSUB URL.ENCODE      IF WDEBUG.MODE THEN        W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?undebug_widget=":NEW.STRING      END ELSE        W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?debug_widget=":NEW.STRING      END      W$LINK.LOCATION<1,NEXT.LINK.POS> = "C"    END  END  IF W$PRINTABLE = 1 THEN    NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )    NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )    IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "printer.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Print"    W$LINK.LABEL<1,NEXT.LINK.POS> = "Print"    W$LINK.URL<1,NEXT.LINK.POS> = "#"*W$LINK.URL.OPTS<1,NEXT.LINK.POS> = 'onClick="printThis(this);"'    W$LINK.URL.OPTS<1,NEXT.LINK.POS> = 'class="DansClass"'    W$LINK.LOCATION<1,NEXT.LINK.POS> = 'C'  END**PDF* If PDF generation is enabled, and supported for this widget, add a PDF icon to the control menu  IF PDF$ENABLED AND W$PDFABLE AND PDF.WIDGET.NAME = "" THEN    NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )    NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )    IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "page_white_acrobat.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Generate PDF"    W$LINK.LABEL<1,NEXT.LINK.POS> = "Generate PDF"    CALL REBUILD.URL.STRING(CURRENT.URL.STRING)    PDF.URL.STRING=CURRENT.URL.STRING    URLENCODE.STRING = WIDGET.NAME    GOSUB URL.ENCODE    PDF.URL.STRING := '&generatepdf=':NEW.STRING ;* stash widget name in URL string so we know which widget to render as PDF    W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?":PDF.URL.STRING    W$LINK.LOCATION<1,NEXT.LINK.POS> = 'C'  END** 6-27-16 *EXCEL* If EXCEL generation is supported for this widget, add a EXCEL icon to the control menu  IF W$EXCELABLE AND EXCEL.WIDGET.NAME = '' THEN    NEXT.LINK.POS = DCOUNT( W$LINK.LABEL<1>, @VM )    NEXT.LINK.POS2 = DCOUNT( W$LINK.ICON<1>, @VM )    IF NEXT.LINK.POS2 > NEXT.LINK.POS THEN NEXT.LINK.POS = NEXT.LINK.POS2    NEXT.LINK.POS += 1    W$LINK.ICON<1,NEXT.LINK.POS> = "page_white_excel.png"    W$LINK.ICON.TXT<1,NEXT.LINK.POS> = "Generate Spreadsheet"    W$LINK.LABEL<1,NEXT.LINK.POS> = "Generate Spreadsheet"    CALL REBUILD.URL.STRING(CURRENT.URL.STRING)    URLENCODE.STRING=CURRENT.URL.STRING    GOSUB URL.ENCODE    EXCEL.URL.STRING=NEW.STRING    URLENCODE.STRING = WIDGET.NAME    GOSUB URL.ENCODE    EXCEL.URL.STRING := '&generateexcel=':NEW.STRING ;* stash widget name in URL string so we know which widget to render as Excel spreadsheet    W$LINK.URL<1,NEXT.LINK.POS> = "/dbc/MVDB.MAIN?":EXCEL.URL.STRING    W$LINK.LOCATION<1,NEXT.LINK.POS> = 'C'  END* END OF 6-27-16 *EXCEL**  LINK.CNT = DCOUNT( W$LINK.LABEL<1>, VM )  LINK.CNT2 = DCOUNT( W$LINK.ICON<1>, VM )  IF LINK.CNT2 > LINK.CNT THEN LINK.CNT = LINK.CNT2  FOR LX = 1 TO LINK.CNT    THIS.LABEL = W$LINK.LABEL<1,LX>    THIS.LOC = W$LINK.LOCATION<1,LX>    THIS.UD.POS = W$LINK.UD.POS<1,LX>    THIS.UD.VAL = W$LINK.UD.VAL<1,LX>    THIS.DD.WIDGET = W$LINK.DD.WIDGET<1,LX>    THIS.URL = W$LINK.URL<1,LX>    THIS.URL.OPTS = W$LINK.URL.OPTS<1,LX>*    IF THIS.LOC = '' THEN THIS.LOC = '1' ;* Set to quadrant 1 if not specified*    IF THIS.URL # "" THEN* Specific URL = ignore UD information and Drill down (DD) info.      URL = THIS.URL    END ELSE      IF THIS.DD.WIDGET # "" THEN TARGET.WIDGET = THIS.DD.WIDGET ELSE TARGET.WIDGET = WIDGET.NAME      URLENCODE.STRING = TARGET.WIDGET      GOSUB URL.ENCODE      TARGET.WIDGET = NEW.STRING      URL = CGI$PATH:"/MVDB.MAIN?udview=":TARGET.WIDGET      FOR UDX = 1 TO DCOUNT( THIS.UD.POS<1,1>,SVM )        URLENCODE.STRING = THIS.UD.VAL<1,1,UDX>        GOSUB URL.ENCODE        URL := "&udpos":UDX:"=":THIS.UD.POS<1,1,UDX>:"&udval":UDX:"=":NEW.STRING      NEXT UDX      IF THIS.DD.WIDGET # "" THEN        URL := "&dd"* Include the name of this widget in the drilldown link so the target widget knows the referrer        URLENCODE.STRING = WIDGET.NAME        GOSUB URL.ENCODE        URL := '&dd_from=':NEW.STRING      END    END    IF W$LINK.ICON<1,LX> # "" THEN      IMG.REF = '<img title="':W$LINK.ICON.TXT<1,LX>:'" class="icon" src="/db/icons/':W$LINK.ICON<1,LX>:'" />'    END ELSE IMG.REF = ''    IF INDEX(THIS.LOC,'C',1) AND IMG.REF # '' THEN ;* This is a Control Icon      LINK.DATA = '<a href="':URL:'" ':THIS.URL.OPTS:'>':IMG.REF:'</a>'    END ELSE      LINK.DATA = '<a href="':URL:'" ':THIS.URL.OPTS:'>':IMG.REF:THIS.LABEL:'</a>'    END*    IF INDEX(THIS.LOC,'1',1) THEN      Q1.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'2',1) THEN      Q2.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'3',1) THEN      Q3.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'4',1) THEN      Q4.LINKS := LINK.DATA:'&nbsp;'    END    IF INDEX(THIS.LOC,'C',1) THEN      Q5.LINKS := LINK.DATA:'&nbsp;'    END  NEXT LX  IF Q1.LINKS # "" THEN    Q1.LINKS = '<div class="widget_trcorner widget_corner">':Q1.LINKS:'</div>'  END  IF Q2.LINKS # "" THEN    Q2.LINKS = '<div class="widget_tlcorner widget_corner">':Q2.LINKS:'</div>'  END  IF Q3.LINKS # "" THEN    Q3.LINKS = '<div class="widget_blcorner widget_corner">':Q3.LINKS:'</div>'  END  IF Q4.LINKS # "" THEN    Q4.LINKS = '<div class="widget_brcorner widget_corner">':Q4.LINKS:'</div>'  END** Create the input section*  INP.CNT = DCOUNT( W$INPUT.PROMPT, AM )  INP.HTML = ''  IF INP.CNT THEN* PJS 10-07-16: Change method from GET to POST to eliminate URL length limitation* when form contains many input controls.    IF INP.CNT > 20 THEN      INP.HTML = '<form method="POST" class="widget_form" action="':CGI$PATH:'/MVDB.MAIN">'    END ELSE      INP.HTML = '<form method="GET" class="widget_form">'    END    FOR IX = 1 TO INP.CNT      INP.HTML<-1> = '<div class="widget_control">'      INP.HTML<-1> = '<label ':W$INPUT.PROMPT.PARAMS<IX>:'>':W$INPUT.PROMPT<IX>:':</label>'      BEGIN CASE        CASE W$INPUT.TYPE<IX> = "TEXT"          INP.HTML<-1> = '<input type="text" name="inp_':W$INPUT.UDPOS<IX>:'" value="':W$INPUT.DEFAULT<IX>:'" ':W$INPUT.PARAMS<IX>:'>'        CASE W$INPUT.TYPE<IX> = "PASSWORD"          INP.HTML<-1> = '<input type="password" name="inp_':W$INPUT.UDPOS<IX>:'" value="':W$INPUT.DEFAULT<IX>:'" ':W$INPUT.PARAMS<IX>:'>'        CASE W$INPUT.TYPE<IX> = "DATE"          INP.HTML<-1> = '<input class="datepicker" type="text" name="inp_':W$INPUT.UDPOS<IX>:'" value="':W$INPUT.DEFAULT<IX>:'" ':W$INPUT.PARAMS<IX>:'>'        CASE W$INPUT.TYPE<IX> = "SELECT"          INP.HTML<-1> = '<select name="inp_':W$INPUT.UDPOS<IX>:'" ':W$INPUT.PARAMS<IX>:'>'          SCNT = DCOUNT( W$INPUT.SELOPTS<IX>, VM )          IF W$INPUT.SELVALS<IX> = "" THEN W$INPUT.SELVALS<IX> = W$INPUT.SELOPTS<IX>          FOR SELX = 1 TO SCNT            IF W$INPUT.SELVALS<IX,SELX> = W$INPUT.DEFAULT<IX> THEN DFLT = "selected" ELSE DFLT = ""            INP.HTML<-1> = '<option value="':W$INPUT.SELVALS<IX,SELX>:'" ':DFLT:'>':W$INPUT.SELOPTS<IX,SELX>:'</option>'          NEXT SELX          INP.HTML<-1> = '</select>'        CASE W$INPUT.TYPE<IX> = "CHECKBOX"          INP.HTML<-1> = '<input type="checkbox" name="inp_':W$INPUT.UDPOS<IX>:'" value="1" ':W$INPUT.PARAMS<IX>          IF W$INPUT.DEFAULT<IX> = 1 THEN            INP.HTML := ' checked'          END          INP.HTML := '>'*add a hidden field to let up know that there was a checkbox on the form.*unchecked checkboxes don't get submitted with the rest of the form data.          INP.HTML<-1> = '<input type="hidden" name="mvdbcxbx_':W$INPUT.UDPOS<IX>:'" value="1">'        CASE 1 ; NULL      END CASE      INP.HTML<-1> = '</div>'    NEXT IX    IF W$INPUT.BUTTON = "" THEN W$INPUT.BUTTON = "Go"    INP.HTML<-1> = '<div class="widget_control"><input type="submit" value="':W$INPUT.BUTTON:'" ></div>'    INP.HTML<-1> = '<input type="hidden" name="udview" value="':WIDGET.NAME:'">'    INP.HTML<-1> = '<input type="hidden" name="sw" value="':WIDGET.NAME:'">'    IF G$DRILLDOWN.MODE THEN      INP.HTML<-1> = '<input type="hidden" name="dd" value="">'      INP.HTML<-1> = '<input type="hidden" name="dd_from" value="':G$DD.REFERRER:'">'      INP.HTML<-1> = '<input type="hidden" name="dd_from_db" value="':G$DD.FROM.DB:'">'    END    INP.HTML<-1> = '</form>'    INP.HTML = '<div class="widget_input">':INP.HTML:'</div>'  END**PDF* Omit the control icons in the PDF document  IF PDF.WIDGET.NAME # "" THEN    Q5.LINKS = ""  END*  ENC.TITLE = W$TITLE  CALL XML.ENCODE(ENC.TITLE,"")  CALL SWAP(HTML.DIV,'<!-- TITLE -->',ENC.TITLE)  CALL SWAP(HTML.DIV,'<!-- QUAD1 -->',Q1.LINKS)  CALL SWAP(HTML.DIV,'<!-- QUAD2 -->',Q2.LINKS)  CALL SWAP(HTML.DIV,'<!-- QUAD3 -->',Q3.LINKS)  CALL SWAP(HTML.DIV,'<!-- QUAD4 -->',Q4.LINKS)  CALL SWAP(HTML.DIV,'<!-- CONTROLS -->',Q5.LINKS)  CALL SWAP(HTML.DIV,'<!-- INPUT -->',INP.HTML)  CALL SWAP(HTML.DIV,'<!-- WIDGETDATA -->',HTML)  RETURN*APPLY.XML.OPTS: * Apply XML option overrides*  SXML.ATTRS = ""  ATTR.VAR.LIST = ''* Parse the attrbiutes from the XML tag.  CPOS = 3 + LEN(NODE.NAME) ;* Start after "<graph " or "<map " depending on the node name.  SXML.ATTR.POS = 0  SXML.LEN = LEN(SXML)  THIS.ATTR = ''  SXML.SUFFIX = '>[CHART.DATA]</':NODE.NAME:'>'  LOOP UNTIL CPOS > SXML.LEN DO    THIS.CH = SXML[CPOS,1]    BEGIN CASE      CASE THIS.CH = '<' ;* Nothing to do - beginning        THIS.ATTR = ''      CASE THIS.CH = ' '        GOSUB ADD.SXML.ATTR      CASE THIS.CH = '>' ;* Ending tag        GOSUB ADD.SXML.ATTR        SXML.SUFFIX = SXML[CPOS,999]        EXIT      CASE 1        THIS.ATTR := THIS.CH    END CASE    CPOS += 1  REPEAT  GOSUB ADD.SXML.ATTR*  CONVERT '"' TO "'" IN XML.OPTS  CONVERT @VM TO @AM IN XML.OPTS  XML.OPT.CNT = DCOUNT( XML.OPTS, AM )  FOR XOX = 1 TO XML.OPT.CNT    THIS.OPT = XML.OPTS<XOX>    OPT.VAR = FIELD( THIS.OPT, '=', 1 )    LOCATE OPT.VAR IN ATTR.VAR.LIST SETTING XOPOS THEN      SXML.ATTRS<XOPOS> = THIS.OPT    END ELSE      THIS.ATTR = THIS.OPT      GOSUB ADD.SXML.ATTR    END  NEXT XOX** Rebuild SXML*  SXML = '<':NODE.NAME:' '  FOR XOX = 1 TO SXML.ATTR.POS    SXML := SXML.ATTRS<XOX>:' '  NEXT XOX  SXML := SXML.SUFFIX  RETURN*ADD.SXML.ATTR: * Add an attrbiute to the list*  IF THIS.ATTR # '' THEN    SXML.ATTR.POS += 1    SXML.ATTRS<SXML.ATTR.POS> = THIS.ATTR    ATTR.VAR.LIST<SXML.ATTR.POS> = FIELD(THIS.ATTR,'=',1)    THIS.ATTR = ''  END  RETURN*APPLY.COLOR.OPTS: * Build COLOR.ARRAY from defaults and user settings*  COLOR.ARRAY = ''  DFLT.COLOR.ARRAY = ''  IF DB.THEME # '' THEN    READ THEME.REC FROM F.MVDB.THEMES, DB.THEME ELSE THEME.REC = ''    DFLT.COLOR.ARRAY = DELETE(THEME.REC,1,0,0)    CONVERT AM TO VM IN DFLT.COLOR.ARRAY  END ELSE IF SITE$THEME # '' THEN    READ THEME.REC FROM F.MVDB.THEMES, SITE$THEME ELSE THEME.REC = ''    DFLT.COLOR.ARRAY = DELETE(THEME.REC,1,0,0)    CONVERT AM TO VM IN DFLT.COLOR.ARRAY  END  IF DFLT.COLOR.ARRAY = '' THEN    DFLT.COLOR.ARRAY<1,-1> = '#ff8125'    DFLT.COLOR.ARRAY<1,-1> = '#584d43'    DFLT.COLOR.ARRAY<1,-1> = '#2e2a27'    DFLT.COLOR.ARRAY<1,-1> = '#7b746d'    DFLT.COLOR.ARRAY<1,-1> = '#e78859'    DFLT.COLOR.ARRAY<1,-1> = '#f04408'    DFLT.COLOR.ARRAY<1,-1> = '#bd5204'    DFLT.COLOR.ARRAY<1,-1> = '#733e30'  END  DFLT.MAX = DCOUNT( DFLT.COLOR.ARRAY<1>, VM )*  MAX.COLOR.AM = DCOUNT( COLOR.LIST, AM )  IF MAX.COLOR.AM = 0 THEN MAX.COLOR.AM = 1  FOR CLX = 1 TO MAX.COLOR.AM    MAX.COLOR.VAL = DCOUNT( COLOR.LIST<CLX>, VM )    IF MAX.COLOR.VAL < DFLT.MAX THEN MAX.COLOR.VAL = DFLT.MAX    FOR CLXV = 1 TO MAX.COLOR.VAL      IF COLOR.LIST<CLX,CLXV> # "" THEN        LOCATE OCONV(COLOR.LIST<CLX,CLXV>,"MCU") IN NAME.COLOR<1> SETTING COLOR.POS THEN          COLOR.LIST<CLX,CLXV> = NAME.COLOR<2,COLOR.POS>        END        COLOR.ARRAY<CLX,CLXV> = COLOR.LIST<CLX,CLXV>      END ELSE        COLOR.ARRAY<CLX,CLXV> = DFLT.COLOR.ARRAY<1,CLXV>      END    NEXT CLXV  NEXT CLX  RETURN*URL.ENCODE: **  NEW.STRING = ""  UE.LEN = LEN(URLENCODE.STRING)  FOR UEX = 1 TO UE.LEN    UE.CHR = URLENCODE.STRING[UEX,1]    UE.CVAL = SEQ(UE.CHR)    BEGIN CASE      CASE UE.CVAL <= 47 ; ENC.FLAG = 1      CASE UE.CVAL >= 58 AND UE.CVAL <= 64 ; ENC.FLAG = 1      CASE UE.CVAL >= 91 AND UE.CVAL <= 96 ; ENC.FLAG = 1      CASE UE.CVAL > 122 ; ENC.FLAG = 1      CASE 1 ; ENC.FLAG = 0    END CASE    IF ENC.FLAG THEN      UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')    END    NEW.STRING := UE.CHR  NEXT UEX  RETURN*TICKMARK.OPTIONS: * For charts that support tickmark options** Convert the settings in W$FW.TICKMARKS into the appropriate XML attributes to be* added to the <chart> tag via W$CHART.OPTIONS*  IF W$FW.TICKMARKS<1> = "0" THEN    W$CHART.OPTIONS<-1> = "showTickMarks='0'"    W$CHART.OPTIONS<-1> = "showTickValues='0'"  END ELSE    IF W$FW.TICKMARKS<2> = 0 THEN      W$CHART.OPTIONS<-1> = "showTickValues='0'"    END    IF W$FW.TICKMARKS<3> = "A" THEN      W$CHART.OPTIONS<-1> = "ticksBelowGraph='0'"    END    IF W$FW.TICKMARKS<4> # "" THEN      W$CHART.OPTIONS<-1> = "majorTMNumber='":W$FW.TICKMARKS<4>:"'"    END    IF W$FW.TICKMARKS<5> # "" THEN      W$CHART.OPTIONS<-1> = "minorTMNumber='":W$FW.TICKMARKS<5>:"'"    END  END  RETURN*MAKE.FW.DD.URL: **  TARGET.WIDGET = W$FW.DD.WIDGET<1,FW.WIDGET.POS>  IF TARGET.WIDGET = "" THEN    URL = ""    RETURN  END  URLENCODE.STRING = TARGET.WIDGET  GOSUB URL.ENCODE  TARGET.WIDGET = NEW.STRING  URL = CGI$PATH:"/MVDB.MAIN?udview=":TARGET.WIDGET  FOR UDX = 1 TO DCOUNT( W$FW.DD.UD.POS<1,FW.WIDGET.POS>,SVM )    URLENCODE.STRING = W$FW.DD.UD.VAL<1,FW.WIDGET.POS,UDX>* BEGIN ZUMASYS 1-5-15    BEGIN CASE      CASE URLENCODE.STRING = 'MS.LABEL'        URLENCODE.STRING=MS.LABEL      CASE URLENCODE.STRING = 'MS.VALUE'        URLENCODE.STRING=MS.VALUE      CASE URLENCODE.STRING = 'MS.SERIES'; *3-15-15        URLENCODE.STRING=MS.SERIES; *3-15-15      CASE 1; NULL    END CASE* END ZUMASYS 1-5-15    GOSUB URL.ENCODE    URL := "&udpos":UDX:"=":W$FW.DD.UD.POS<1,FW.WIDGET.POS,UDX>:"&udval":UDX:"=":NEW.STRING  NEXT UDX  URL := "&dd"* Include the name of this widget in the drilldown link so the target widget knows the referrer  URLENCODE.STRING = WIDGET.NAME  GOSUB URL.ENCODE  URL := '&dd_from=':NEW.STRING* Specify the dashboard to return to from this drilldown view.  IF G$DRILLDOWN.MODE THEN    SOURCE.DB = G$DD.FROM.DB  END ELSE SOURCE.DB = G$CURRENT.DB  URLENCODE.STRING = SOURCE.DB  GOSUB URL.ENCODE  URL := '&dd_from_db=':NEW.STRING  RETURN*OPTS.UPDATE:  IF NOT(INDEX(UPDATE.OPTS,'decimalSeparator',1)) THEN    UPDATE.OPTS := OPTS.DELIM:"decimalSeparator='":DECIMAL:"'"  END  IF NOT(INDEX(UPDATE.OPTS,'thousandSeparator',1)) THEN    UPDATE.OPTS := OPTS.DELIM:"thousandSeparator='":THOUSAND:"'"  END  RETURNEND0002F4SUB.URL.ENCODE0c2SUBROUTINE SUB.URL.ENCODE(URLENCODE.STRING)** (C) Copyright 2009, Sierra Bravo Corporation, All Rights Reserved* * Author: Luke Bucklin, Sierra Bravo Corporation* Date: August 7, 2009* Purpose: URL encode a text string*NEW.STRING = ""UE.LEN = LEN(URLENCODE.STRING)FOR UEX = 1 TO UE.LEN  UE.CHR = URLENCODE.STRING[UEX,1]  UE.CVAL = SEQ(UE.CHR)  BEGIN CASE    CASE UE.CVAL <= 47 ; ENC.FLAG = 1    CASE UE.CVAL >= 58 AND UE.CVAL <= 64 ; ENC.FLAG = 1    CASE UE.CVAL >= 91 AND UE.CVAL <= 96 ; ENC.FLAG = 1    CASE UE.CVAL > 122 ; ENC.FLAG = 1    CASE 1 ; ENC.FLAG = 0  END CASE  IF ENC.FLAG THEN    UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')  END  NEW.STRING := UE.CHRNEXT UEXURLENCODE.STRING = NEW.STRINGRETURNEND 0024C1MV.COMPILE0c2* MV.COMPILE - Sierra Bravo Precompiler** Copyright (C) 2006 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin* Date: 12/26/2006* Description: Precompiler** Modified By: Mike Street, Zumasys for UniData compatibility* Date: 07/22/2015* Description: Changed PROCREAD to use @SENTENCE in the ELSE clause**MS 07-22-15*PROCREAD TCL.LINE ELSE TCL.LINE = ''PROCREAD TCL.LINE ELSE TCL.LINE = @SENTENCE ; *MS 07-22-15*TCL.LINE = TRIM( TCL.LINE )VERB = FIELD(TCL.LINE,' ', 1)FILE = FIELD( TCL.LINE, ' ', 2 )ITEM.LIST = ''IF SYSTEM(11) THEN  LOOP    READNEXT ITEM ELSE EXIT    ITEM.LIST<-1> = ITEM  REPEATEND ELSE  POS = 3  LOOP    ITEM = FIELD( TCL.LINE, ' ', POS )  UNTIL ITEM = '' OR ITEM[1,1] = '(' DO    ITEM.LIST<-1> = ITEM    POS += 1  REPEATENDOPTS.POS = INDEX( TCL.LINE, '(', 1 )IF OPTS.POS THEN  OPTS = TCL.LINE[OPTS.POS,999]END ELSE OPTS = ''*OPEN FILE TO FILEVAR ELSE STOP 201, FILE*INC.FILE = FILE:".INC"OPEN INC.FILE TO INC.FILEVAR ELSE  EXECUTE "CREATE-FILE ":INC.FILE:" 1 51"  OPEN INC.FILE TO INC.FILEVAR ELSE STOP 201, INC.FILEENDOPEN '','MVPC.CONTROL' TO F.MVPC.CONTROL ELSE  EXECUTE "CREATE-FILE MVPC.CONTROL 3 11" CAPTURING JUNK  OPEN '','MVPC.CONTROL' TO F.MVPC.CONTROL ELSE STOP 201, 'MVPC.CONTROL'END*DELIMS = \"'\ONE.WORD.TOKENS = ""ONE.WORD.TOKENS<-1> = "notrim"ONE.WORD.TOKENS<-1> = "exists"*ITEM.CNT = DCOUNT( ITEM.LIST, @AM )FOR ITEM.X = 1 TO ITEM.CNT  PRINT "MV Precompiler Version 1.0 ":  INC.SOURCE = '** Auto-generated source code. Do not modify this file.'  INC.SOURCE<-1> = "VAR$ERR = ''"  INC.SOURCE<-1> = "CALL WDB.VARS(VARS,VALS)"  INC.SOURCE<-1> = "*"  INC.SOURCE<-1> = 'LOCATE "xmlQuery" IN VARS SETTING POS THEN'  INC.SOURCE<-1> = '  XML$QUERY = 1'  INC.SOURCE<-1> = 'END ELSE XML$QUERY = 0'  XML.INFO = '<vars>'  VAR.INFO = ''  VAR.INFO.POS = 1  ITEM = ITEM.LIST<ITEM.X>  READ SOURCE FROM FILEVAR, ITEM ELSE    PRINT "Item '":ITEM:"' not on file."    CONTINUE  END  DELETE INC.FILEVAR, ITEM  SOURCE.LINES = DCOUNT( SOURCE, @AM )  SLINE = 1  END.OF.PC = 0  PARSED.ANY = 0  PC.ERRORS = 0  LOOP    LINE = SOURCE<SLINE>    IF TRIM(LINE)[1,1] = "!" THEN      GOSUB PARSE.LINE      IF SYNTAX.ERROR # "" THEN        PRINT        PRINT "Syntax Error: ":SYNTAX.ERROR        PRINT SLINE:": ":LINE        PARSED = 0        PC.ERRORS += 1      END      IF PARSED THEN        PRINT ".":        PARSED.ANY = 1        THIS.INC = ""        IF REQUIRE.ERROR = "" THEN          REQUIRE.ERROR = FROMVAR:' required.'        END        IF ITERATIVE THEN          FROMVAR = FROMVAR[1,LEN(FROMVAR)-2]          VARNAME = VARNAME[1,LEN(VARNAME)-2]          THIS.INC<-1> = "VAR$CNT = DCOUNT( VARS, @AM )"          THIS.INC<-1> = "VAR$STRLEN = ":LEN(FROMVAR)          THIS.INC<-1> = VARNAME:" = ''"          IF VARTYPE = "date" THEN            THIS.INC<-1> = VARNAME:".I = ''"          END          THIS.INC<-1> = "FOR VAR$X = 1 TO VAR$CNT"          THIS.INC<-1> = \  IF VARS<VAR$X> MATCHES "'\:FROMVAR:\'1N0N" THEN\          THIS.INC<-1> = '    VAR$NUM = VARS<VAR$X>[VAR$STRLEN+1,99]'          THIS.INC<-1> = '    ':VARNAME:'<VAR$NUM> = VALS<VAR$X>'          IF VARTYPE = "date" THEN            THIS.INC<-1> = '    ':VARNAME:'.I<VAR$NUM> = ICONV(':VARNAME:'<VAR$NUM>,"D")'            THIS.INC<-1> = '    ':VARNAME:'<VAR$NUM> = OCONV(':VARNAME:'.I<VAR$NUM>,"D4/")'          END          THIS.INC<-1> = '  END'          THIS.INC<-1> = 'NEXT VAR$X'         END ELSE          THIS.INC<-1> = 'LOCATE "':FROMVAR:'" IN VARS SETTING POS THEN'          THIS.INC<-1> = '  ':VARNAME:' = VALS<POS>'          THIS.INC<-1> = '  ':VARNAME:'.EXISTS = 1'          IF VARTYPE = "date" THEN            THIS.INC<-1> = '  ':VARNAME:'.I = ICONV(':VARNAME:',"D")'            THIS.INC<-1> = '  ':VARNAME:' = OCONV(':VARNAME:'.I,"D4/")'          END          IF DEFAULT # "" THEN            THIS.INC<-1> = '  IF ':VARNAME:' = "" THEN ':VARNAME:' = "':DEFAULT:'"'          END          THIS.INC<-1> = 'END ELSE'          THIS.INC<-1> = '  ':VARNAME:'.EXISTS = 0'          IF VARTYPE = "date" THEN            THIS.INC<-1> = '  ':VARNAME:'.I = ""'          END          IF METHOD = "REQUIRE" AND EXISTS THEN            * Existence of variable is required            THIS.INC<-1> = '  ':VARNAME:' = ""'            THIS.INC<-1> = '  VAR$ERR<-1> = "':REQUIRE.ERROR:'"'          END ELSE            THIS.INC<-1> = '  ':VARNAME:' = "':DEFAULT:'"'          END          THIS.INC<-1> = 'END'          IF METHOD = "REQUIRE" AND NOT(EXISTS) THEN            THIS.INC<-1> = 'IF ':VARNAME:' = "" THEN'            THIS.INC<-1> = '  VAR$ERR<-1> = "':REQUIRE.ERROR:'"'            THIS.INC<-1> = 'END'          END          IF TRIM.VAL THEN            THIS.INC<-1> = VARNAME:" = TRIM(":VARNAME:")"          END        END        *        IF METHOD = "REQUIRE" THEN REQUIRED = 1 ELSE REQUIRED = 0        *        VAR.INFO<1,VAR.INFO.POS> = FROMVAR        VAR.INFO<2,VAR.INFO.POS> = REQUIRED        VAR.INFO<3,VAR.INFO.POS> = VARTYPE        VAR.INFO<4,VAR.INFO.POS> = ITERATIVE        VAR.INFO<5,VAR.INFO.POS> = DEFAULT        VAR.INFO<6,VAR.INFO.POS> = COMMENT        VAR.INFO<7,VAR.INFO.POS> = EXISTS        VAR.INFO.POS += 1        *        XML.INFO<-1> = '<var name="':FROMVAR:'" required="':REQUIRED:'" type="':VARTYPE:'" iterative="':ITERATIVE:'">'        CALL XML.ENCODE(DEFAULT,'')        CALL XML.ENCODE(COMMENT,'')        XML.INFO<-1> = ' <default>':DEFAULT:'</default>'        XML.INFO<-1> = ' <comment>':COMMENT:'</comment>'        XML.INFO<-1> = '</var>'        *        INC.SOURCE<-1> = THIS.INC      END    END ELSE      LINE = TRIM(LINE)      IF LINE = "INCLUDE ":FILE:".INC ":ITEM THEN END.OF.PC = 1    END  UNTIL SLINE > SOURCE.LINES OR END.OF.PC DO SLINE += 1 REPEAT  PRINT  IF PARSED.ANY THEN    XML.INFO<-1> = '</vars>'    INC.SOURCE<-1> = "* XML Info"    INC.SOURCE<-1> = \XML$INFO = '<?xml version="1.0" ?>'\    XICNT = DCOUNT( XML.INFO, @AM )    FOR XML.X = 1 TO XICNT      INC.SOURCE<-1> = 'XML$INFO<-1> = \':XML.INFO<XML.X>:'\'    NEXT XML.X    INC.SOURCE<-1> = 'IF XML$QUERY THEN'    INC.SOURCE<-1> = '  CALL XML.SEND(XML$INFO)'    INC.SOURCE<-1> = '  STOP'    INC.SOURCE<-1> = 'END'    WRITE INC.SOURCE ON INC.FILEVAR, ITEM    WRITE VAR.INFO ON INC.FILEVAR, "$":ITEM    *    READU FILE.LIST FROM F.MVPC.CONTROL, 'LIBRARIES' ELSE FILE.LIST = ''    LOCATE FILE IN FILE.LIST BY 'AL' SETTING POS THEN      RELEASE F.MVPC.CONTROL, 'LIBRARIES'    END ELSE      FILE.LIST = INSERT( FILE.LIST, 1, POS, 0, FILE )      WRITE FILE.LIST ON F.MVPC.CONTROL, 'LIBRARIES'    END  END  IF PC.ERRORS THEN    PRINT "Compile aborted"  END ELSE    XLINE = "D3.":VERB:" ":FILE:" ":ITEM:" ":OPTS    PRINT "D3 Compile: ":XLINE    EXECUTE XLINE  ENDNEXT ITEM.XSTOP*PARSE.LINE: * Parse a line into tokens*SYNTAX.ERROR = ""LINE = TRIM(LINE)LINE = LINE[2,9999] ;* Remove "!"*LINELEN = LEN(LINE)TOKEN.LIST = '' ; TOKEN.POS = 1TOKEN = ""VALUE = ""GETMODE = "TOKEN" ;* Start looking for tokensDELIM = ""IN.DELIM.STRING = 0PARSED = 0FOR LX = 1 TO LINELEN  CH = LINE[LX,1]  IF GETMODE = "TOKEN" THEN    BEGIN CASE      CASE CH MATCHES "1A" OR CH MATCHES "1N"        TOKEN := CH      CASE CH = " "        * End of word - Token complete        IF TOKEN # "" THEN          TOKEN.LIST<1,TOKEN.POS> = TOKEN          LOCATE TOKEN IN ONE.WORD.TOKENS SETTING POS ELSE            GETMODE = "VALUE"            VALUE.POS = TOKEN.POS            IN.DELIM.STRING = 0          END          TOKEN.POS += 1          TOKEN = ""        END    END CASE  END ELSE IF GETMODE = "VALUE" THEN    BEGIN CASE      CASE IN.DELIM.STRING AND CH = DELIM        TOKEN.LIST<2,VALUE.POS> = VALUE        VALUE = ""        DELIM = ""        GETMODE = "TOKEN"      CASE NOT(IN.DELIM.STRING) AND INDEX(DELIMS,CH,1) ;* This is a delimiter        IN.DELIM.STRING = 1        DELIM = CH      CASE CH = " " AND NOT(IN.DELIM.STRING)        TOKEN.LIST<2,VALUE.POS> = VALUE        VALUE = ""        GETMODE = "TOKEN"      CASE 1        VALUE := CH    END CASE  ENDNEXT LXIF TOKEN # "" THEN  TOKEN.LIST<1,-1> = TOKENEND ELSE IF VALUE # "" THEN  TOKEN.LIST<2,VALUE.POS> = VALUEEND*VARNAME = ""FROMVAR = ""COMMENT = ""DEFAULT = ""VARTYPE = "string"TRIM.VAL = 1EXISTS = 0REQUIRE.ERROR = ""*FOR TX = 1 TO DCOUNT( TOKEN.LIST<1>, @VM )  TOKEN = TOKEN.LIST<1,TX>  VALUE = TOKEN.LIST<2,TX>  BEGIN CASE    CASE TOKEN = "get" OR TOKEN = "require"      METHOD = TOKEN      VARNAME = VALUE      PARSED = 1    CASE TOKEN = "from"      FROMVAR = VALUE    CASE TOKEN = "type"      VARTYPE = OCONV(VALUE,'MCL')    CASE TOKEN = "default"      DEFAULT = VALUE    CASE TOKEN = "comment"      COMMENT = VALUE    CASE TOKEN = "notrim"      TRIM.VAL = 0    CASE TOKEN = "exists"      EXISTS = 1    CASE TOKEN = "error"      REQUIRE.ERROR = VALUE    CASE 1      SYNTAX.ERROR = "Invalid Token: '":TOKEN:'"'  END CASENEXT TX*IF NOT(PARSED) THEN RETURN*IF VARNAME = "" THEN  SYNTAX.ERROR = "No variable specified"  RETURNEND*IF FROMVAR = "" THEN FROMVAR = VARNAME*ITERATIVE = 0IF VARNAME[LEN(VARNAME)-1,2] = "[]" THEN  IF FROMVAR[LEN(FROMVAR)-1,2] = "[]" THEN    ITERATIVE = 1  END ELSE    SYNTAX.ERROR = "Iterative array mismatch: ":VARNAME:", ":FROMVAR  ENDEND*RETURN006231MVDB.WEB.ED0c2** Copyright (C) 2009 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: August 6, 2009* Description: Web Editor for Bravo Dashboard** 3-9-15 TFP CHANGE FILENAME TO FILENAME.VAR TO PREVENT CONFLICT WITH filename** Modified by Peter Schellenbach of Zumasys 07-22-15 for UniData compatiblity:*   Change U50BB to @WHO*   Change MDS to UD.ACCOUNT*   Get source file from catalog pointer att 3** 8-8-16 PJS Add "FORCE DIRECT" CATALOG options to save catalog pointer in VOC** Modified by Peter Schellenbach of Zumasys 11-02-16*  Added GLOBAL.INFO(100) = 1 before each of the STOP statements (except STOP due to errors)*  to indicate successful execution of this routine. Otherwise the controller program*  (MVDB.INIT) thinks an error has occurred and appends some debug info to the HTML output.**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGET.TYPES***OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS' ;* this is in /WWW/ COMMON and is opened by MVDB.INITOPEN '','MV.WEB.ED.ARCHIVE' TO F.ED.ARCHIVE THEN  ARCHIVE = 1END ELSE ARCHIVE = 0OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'READ ACCTS FROM F.MVDB.CONTROL, "ED.ACCOUNTS" ELSE ACCTS = ""*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$CHARSET      TO SITE$SETTINGS(9)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDENDIF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*CALL GET.SESSION.VAR("adminauth",adminauth)IF adminauth # 1 THEN  FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'  FORM := '</head><body><p>Administrative priviledges are required. '  FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'  CALL WEB.SEND(FORM)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOP*  READ LOGIN.PAGE FROM F.WEB.FORMS, "admin_login.html" ELSE LOGIN.PAGE = "admin_login.html not found."*  CALL SWAP(LOGIN.PAGE,'<!-- SITE_LOGO -->',SITE.LOGO)  *  GLOBAL.INFO(100) = 1 ;* Intentional stop*  CALL WEB.SEND(LOGIN.PAGE)*  STOPEND*EDIT.SCRIPTS = "NEW_PROGRAM_DIALOG = 0;":CHAR(10) ;* This will get overwritten later, if appropriateESC.APOS = "\'"HMESSAGE = ""FMESSAGE = ""record = ""LOCATE "ed_file" IN CGI$VARS SETTING POS THEN  filename = CGI$VALS<POS>END ELSE  filename = ""  HMESSAGE<-1> = "No filename specified."ENDLOCATE "ed_item" IN CGI$VARS SETTING POS THEN  item = CGI$VALS<POS>END ELSE  item = ""  HMESSAGE<-1> = "No item name specified."ENDLOCATE "ed_acct" IN CGI$VARS SETTING POS THEN  acct = CGI$VALS<POS>END ELSE acct = ""*LOCATE "action" IN CGI$VARS SETTING POS THEN  action = CGI$VALS<POS>END ELSE action = "open"IF action = "code_template" THEN  LOCATE "template" IN CGI$VARS SETTING POS THEN    template = CGI$VALS<POS>  END ELSE template = ""  OPEN '','MVDB.SUB.TEMPLATES' TO F.MVDB.SUB.TEMPLATES THEN    orig.template = template    LOOP      READ TEMPLATE.TEXT FROM F.MVDB.SUB.TEMPLATES, template ELSE TEMPLATE.TEXT = ""      IF TEMPLATE.TEXT = "" THEN TEMPLATE.TEXT = "No template for ":template    WHILE FIELD( TEMPLATE.TEXT, ' ', 1 ) = "USE" DO      template = FIELD( TEMPLATE.TEXT, ' ', 2 )    REPEAT    CALL SWAP(TEMPLATE.TEXT,'W$TYPE = "%TYPE%"','W$TYPE = "':orig.template:'"')  END ELSE    TEMPLATE.TEXT = "Unable to open MVDB.SUB.TEMPLATES"  END  SESSION$CONTENT.SENT = 1  CRT "Content-Type: text/html"  CRT  CALL WEB.SEND(TEMPLATE.TEXT)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPENDLOCATE "record" IN CGI$VARS SETTING POS THEN  record = CGI$VALS<POS>  CONVERT CHAR(10) TO @AM IN record  CONVERT CHAR(13) TO "" IN recordENDIF action = "compile" OR action = "save" THEN  READ HTML FROM F.WEB.FORMS, "ed_output.html" ELSE HTML = "Unable to read ed_output.html"  QUIET.MODE = 1END ELSE  READ HTML FROM F.WEB.FORMS, "ed_template.html" ELSE HTML = "Unable to read ed_template.html"  QUIET.MODE = 0ENDCALL SWAP(HTML,'<!--CHARACTER_SET-->',SITE$CHARSET)LOCATE "height" IN CGI$VARS SETTING POS THEN  height = CGI$VALS<POS>  CALL PUT.SESSION.VAR("ed_height",height)END ELSE  CALL GET.SESSION.VAR("ed_height",height)ENDOUT.OF.ACCOUNT = 0myacct = @WHO ; * OCONV( 'a', 'U50BB') *PJS 07-22-15*IF acct = myacct THEN acct = ""IF acct # "" AND HMESSAGE = "" THEN  password = ""  OPEN '','UD.ACCOUNT' TO F.ACCOUNTS THEN    READ APTR FROM F.ACCOUNTS, acct ELSE APTR = ""    IF APTR<1> <> "" THEN*      IF APTR<7> # "" THEN ;* This account has a password*        LOCATE acct IN ACCTS<1> SETTING APOS THEN*          password = ACCTS<2,APOS>*        END ELSE*          HMESSAGE<-1> = "Account ":acct:" requies a password. Not found in MVDB.CONTROL, ED.ACCOUNTS"*        END*      END    END ELSE      HMESSAGE<-1> = "Account ":acct:" is not valid."    END  END ELSE    HMESSAGE<-1> = "Unable to open UD.ACCOUNT file."  END  IF HMESSAGE = "" THEN*    DATA password    EXECUTE "LOGTO ":acct CAPTURING LOGTO.OUT ;* Switch over to specified account    IF LOGTO.OUT = "" THEN      OUT.OF.ACCOUNT = 1    END ELSE      HMESSAGE<-1> = "Error: ":LOGTO.OUT    END  ENDENDIF HMESSAGE # "" THEN  IF filename = "" AND item = "" THEN    HMESSAGE = ""    CALL SWAP(HTML,'<!-- SYNTAX -->',"")    CALL SWAP(HTML,'<!-- WINDOW_HEIGHT -->',"")    CALL SWAP(HTML,'<!-- FILE -->',"")    CALL SWAP(HTML,'<!-- ITEM -->',"")    CALL SWAP(HTML,'<!-- BODY -->',"")    CALL SWAP(HTML,'<!-- LAST_COMPILE -->',"")    CALL SWAP(HTML,'<!-- COMPILE_OUTPUT -->',"")    CALL SWAP(HTML,'<!-- COMPILE_ERRLINE -->',"")    CALL SWAP(HTML,'<!-- ED_CONTENT -->',"''")    CALL SWAP(HTML,'<!-- EA_CALLS_CONTENT -->',"")    CALL SWAP(HTML,'<!-- EA_INCLUDES_CONTENT -->',"")    CALL SWAP(HTML,'<!-- EA_FILES_CONTENT -->',"")    CALL SWAP(HTML,'<!-- EA_ARCHIVE_CONTENT -->',"")    CALL SWAP(HTML,'<!-- NUM_OF_CALLS -->',0)    CALL SWAP(HTML,'<!-- NUM_OF_INCLUDES -->',0)    CALL SWAP(HTML,'<!-- NUM_OF_FILES -->',0)    CALL SWAP(HTML,'<!-- NUM_OF_ARCHIVES -->',0)    CALL SWAP(HTML,'<!-- ED_SCRIPTS -->',"")    CALL SWAP(HTML,'<!-- ED_INIT_SCRIPT -->',"openEditDialog();")    CALL WEB.SEND(HTML)  END ELSE    GOSUB ADD.MESSAGE    CALL WEB.SEND(HTML)  END  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPEND* This will be the master dictionary in the appropriate account.OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'ENDBASIC.SUB = 0OPEN filename TO F.FILE THEN  IF record # "" AND action # "open" THEN    ELINE = DCOUNT( record, @AM )    LOOP WHILE ELINE > 1 AND record<ELINE> = "" DO      record = DELETE( record, ELINE, 0, 0 )      ELINE -= 1    REPEAT    IF ARCHIVE AND filename # "MV.WEB.ED.ARCHIVE" THEN      READ oldrec FROM F.FILE, item THEN        IF oldrec # record THEN          NOW = TIME()          TD.STAMP = NOW:"*":DATE()          NOW2 = NOW "R%2"          NOW2 = MOD(NOW2,16) ;* Get it down to a hex digit          IF acct = "" THEN USE.ACCT = myacct ELSE USE.ACCT = acct          ARCHIVE.ID = USE.ACCT:"*":filename:"*":item:"*":OCONV(NOW2,'MCDX')          oldrec = INSERT( oldrec, 1, 0, 0, TD.STAMP )          WRITE oldrec ON F.ED.ARCHIVE, ARCHIVE.ID        END      END    END    WRITE record ON F.FILE, item    IF record[1,3] = "SUB" THEN BASIC.SUB = 1    IF QUIET.MODE THEN      record = ""    END ELSE      HMESSAGE<-1> = item:" saved, ":LEN(record):" bytes."    END  END ELSE    READ record FROM F.FILE, item THEN      HMESSAGE<-1> = item:" opened, ":LEN(record):" bytes."    END ELSE      record = ""      HMESSAGE<-1> = "New Item: ":item    END    IF record = "" THEN      NEW.ITEM.FLAG = 1      BEGIN CASE        CASE filename = "RSS.BP"          record = 'SUBROUTINE ':item          record<-1> = '*'          record<-1> = '* RSS Feed'          record<-1> = '*'          record<-1> = 'INCLUDE RSS.BP RSS.DATA.INC'          record<-1> = '*'          IF INDEX(item,'.SEL',1) THEN            record<-1> = '* EXECUTE SELECT - Create active select list'            record<-1> = 'RETURN'          END ELSE IF INDEX(item,'.ITEM',1) THEN            record<-1> = 'RSS$TITLE = "" ;* Title text'            record<-1> = 'RSS$LINK = "" ;* Link to URL for full-view (if applicable)'            record<-1> = 'RSS$AUTHOR = "" ;* Author'            record<-1> = 'RSS$DATE = "" ;* Date of feed item (internal)'            record<-1> = 'RSS$TIME = "" ;* Time of feed item (internal)'            record<-1> = 'RSS$DESCRIPTION = "" ;* Feed description text (HTML)'            record<-1> = '*'            record<-1> = '* Programming to fill in the above values goes here.'            record<-1> = '*'            record<-1> = 'RETURN'          END        CASE filename = 'MVDB.SUBS'          EDIT.SCRIPTS = "NEW_PROGRAM_DIALOG = 1;":CHAR(10)          EDIT.SCRIPTS := 'widgetTypes = new Array();':CHAR(10)          OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES THEN            EXECUTE 'SSELECT MVDB.WIDGET.TYPES BY GROUP BY HANDLER WITH INACTIVE # "1"' CAPTURING JUNK            LOOP              READNEXT TYPE.ID ELSE EXIT              MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, TYPE.ID THEN                CALL SWAP(WT$DESC,'"','\"')                CLASS.NAME = FIELD(WT$ICON,'.',1)                CONVERT "_" TO "-" IN CLASS.NAME                EDIT.SCRIPTS := 'widgetTypes["':TYPE.ID:'"] = new Array("':WT$DESC:'","':CLASS.NAME:'");':CHAR(10)              END            REPEAT          END          record = 'SUBROUTINE ':item          record<-1> = '*'          record<-1> = '* Dashboard Widget'          record<-1> = '*'          record<-1> = 'INCLUDE WBPD MVDB.INCLUDE'          record<-1> = '*'        CASE 1 ; NULL      END CASE    END  ENDEND ELSE  HMESSAGE<-1> = "Unable to open file '":filename:"'"  GOSUB ADD.MESSAGE  CALL WEB.SEND(HTML)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPEND*OUTPUT = "" ;* Compiler outputCOMP.ERRLINE = ""BEGIN CASE  CASE HMESSAGE # "" ; NULL  CASE action = "compile"    READV BASIC.TEMPLATE FROM F.MVDB.CONTROL, "COMPILE.SETUP", 1 ELSE BASIC.TEMPLATE = ""    IF BASIC.TEMPLATE # "" THEN      CMD = BASIC.TEMPLATE      CALL SWAP(CMD,"%FILENAME%",filename)      CALL SWAP(CMD,"%ITEMNAME%",item)    END ELSE      CMD = "BASIC ":filename:" ":item    END    EXECUTE CMD CAPTURING CMPOUTPUT    OUTPUT<-1> = CMD    OUTPUT<-1> = CMPOUTPUT    * If the compile failed, find the first error line #    CO = 1    LOOP UNTIL CO > DCOUNT( CMPOUTPUT, @AM ) DO      LN = FIELD(TRIM(CMPOUTPUT<CO>),' ',1)      IF LN MATCHES "4N" THEN        COMP.ERRLINE = (LN+0)        EXIT      END ELSE CO += 1    REPEAT    IF BASIC.SUB = 1 THEN      CMD = "CATALOG ":filename:" ":item:" FORCE DIRECT" ;* PJS 08-08-16 Unidata options to save catalog pointer in VOC      EXECUTE CMD CAPTURING CATOUTPUT      OUTPUT<-1> = CMD      OUTPUT<-1> = CATOUTPUT    END  CASE action = "save"  CASE 1    NULLEND CASE*SUBLIST = ''INCLIST = ''FILELIST = ''IF record # "" THEN  GOSUB BUILD.SUBLIST  GOSUB BUILD.INCLIST  GOSUB BUILD.FILELISTENDIF filename = "WEB.FORMS" THEN SYNTAX = "html" ELSE SYNTAX = "basic"** Last compile date/time?*CSTRING = ""IF SYNTAX = "basic" THEN  EXECUTE "SELECT DICT ":filename:" '":item:"' C/DATE C/TIME" CAPTURING JUNK  READNEXT CDATE ELSE CDATE = ""  READNEXT CTIME ELSE CTIME = ""  CLEARSELECT  IF CDATE MATCHES "1N0N" AND CTIME MATCHES "1N0N" THEN    CDATE = OCONV(CDATE, 'D2/')    CTIME = OCONV(CTIME, 'MTS')    CSTRING = "Last compiled on ":CDATE:" at ":CTIME:'<br />'  ENDENDIF OUT.OF.ACCOUNT THEN  LOCATE myacct IN ACCTS<1> SETTING APOS THEN    password = ACCTS<2,APOS>  END ELSE password = ""*  DATA password  EXECUTE "LOGTO ":myacct CAPTURING LOGTO.OUT  IF LOGTO.OUT # "" THEN    * Fatal error - cannot get back to our account. Send crapy CGI error.    PRINT "Content-type: text/html"    PRINT    PRINT "<html><body>Error returning to ":myacct:", ":LOGTO.OUT    PRINT "Check MVDB.CONTROL, ED.ACCOUNTS settings.</body></html>"    GLOBAL.INFO(100) = 1 ;* Intentional stop    STOP  END  * Re-open the master dictionary in the local account.  OPEN '','MD' TO F.MD ELSE    OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'  ENDENDIF OUTPUT # "" THEN  CALL SWAP(OUTPUT,'&','&amp;')  CALL SWAP(OUTPUT,'<','&lt;')  CALL SWAP(OUTPUT,'>','&gt;')ENDGOSUB ADD.MESSAGEIF record # "" THEN  CALL SWAP(record,'&','&amp;')  CALL SWAP(record,'<','&lt;')  CALL SWAP(record,'>','&gt;')ENDIF action = "compile" THEN  CALL SWAP(OUTPUT,@AM,"<br>")ENDIF QUIET.MODE THEN  FORM = ""END ELSE  FORM = '<form id="ed_form" method="post" action="':CGI$PATH:'/MVDB.WEB.ED" >'  FORM<-1> = '<textarea id="file_1" style="height: 100%; width: 100%;" name="record">'  FORM<-1> = record  FORM<-1> = '</textarea>'  IF acct = "" THEN USE.ACCT = myacct ELSE USE.ACCT = acct  FORM<-1> = '<input type="hidden" name="ed_acct" value = "':USE.ACCT:'" />'  FORM<-1> = '<input type="hidden" name="ed_file" value="':filename:'" />'  FORM<-1> = '<input type="hidden" name="ed_item" value="':item:'" />'  FORM<-1> = '<input type="hidden" name="action" value="" />'  FORM<-1> = '</form>'ENDCALL SWAP(HTML,'<!-- SYNTAX -->',SYNTAX)CALL SWAP(HTML,'<!-- WINDOW_HEIGHT -->',height)CALL SWAP(HTML,'<!-- FILE -->',filename)CALL SWAP(HTML,'<!-- ITEM -->',item)CALL SWAP(HTML,'<!-- BODY -->',FORM)CALL SWAP(HTML,'<!-- LAST_COMPILE -->',CSTRING)CALL SWAP(HTML,'<!-- COMPILE_OUTPUT -->',OUTPUT)CALL SWAP(HTML,'<!-- COMPILE_ERRLINE -->',COMP.ERRLINE)CALL SWAP(HTML,'<!-- ED_CONTENT -->',record)*SUB.CNT = DCOUNT( SUBLIST<1>, @VM )INC.CNT = DCOUNT( INCLIST<1>, @VM )FILE.CNT = DCOUNT( FILELIST<1>, @VM )IF SUB.CNT > INC.CNT THEN MAX.CNT = SUB.CNT ELSE MAX.CNT = INC.CNTIF FILE.CNT > MAX.CNT THEN MAX.CNT = FILE.CNT*IF acct # "" THEN  URL.ACCT = acct  CALL SUB.URL.ENCODE(URL.ACCT)  ACCT.LINK = "ed_acct=":URL.ACCT:"&"END ELSE ACCT.LINK = ""*IF SUB.CNT THEN  EA.CALLS ='<table width="100%"><tbody><tr><th>File</th><th>Program</th><th>Line(s)</th></tr>'END ELSE EA.CALLS = ""IF INC.CNT THEN  EA.INCS ='<table width="100%"><tbody><tr><th>File</th><th>Program</th><th>Line(s)</th></tr>'END ELSE EA.INCS = ""IF FILE.CNT THEN  EA.FILES = '<table width="100%"><tbody><tr><th>File</th><th>Operation</th><th>Line(s)</th></tr>'END ELSE EA.FILES = ""FOR LX = 1 TO MAX.CNT  IF LX <= SUB.CNT THEN    URL.SUBFILE = SUBLIST<1,LX>    CALL SUB.URL.ENCODE(URL.SUBFILE)    URL.SUBITEM = SUBLIST<2,LX>    CALL SUB.URL.ENCODE(URL.SUBITEM)    PROGFNAME = SUBLIST<1,LX>    PROGNAME = SUBLIST<2,LX>    CALL SWAP(PROGNAME,"'","\'")    CALL SWAP(PROGFNAME,"'","\'")    IF SUBLIST<2,LX>[1,1] = "@" THEN ;* This is a CALL @ function, so no link to open the subroutine      EA.CALLS := '<tr><td>':PROGFNAME:'</td><td>':PROGNAME:'</a></td>'    END ELSE      EA.CALLS := '<tr><td>':PROGFNAME:'</td><td><a target="':URL.SUBFILE:'_':URL.SUBITEM:'" href="/dbc/MVDB.WEB.ED?':ACCT.LINK:'ed_file=':URL.SUBFILE:'&ed_item=':URL.SUBITEM:'">':PROGNAME:'</a></td>'    END    EA.CALLS := '</td><td>'    CL.CNT = DCOUNT( SUBLIST<4,LX>, @SVM )    FOR LXL = 1 TO CL.CNT      EA.CALLS := '<a href="#" onclick="javascript:editArea.go_to_line(':ESC.APOS:SUBLIST<4,LX,LXL>:ESC.APOS:'); return false;">':SUBLIST<4,LX,LXL>:'</a>'      IF LXL < CL.CNT THEN EA.CALLS := ", "    NEXT LXL  END  IF LX <= INC.CNT THEN    URL.INCFILE = INCLIST<1,LX>    CALL SUB.URL.ENCODE(URL.INCFILE)    URL.INCITEM = INCLIST<2,LX>    CALL SUB.URL.ENCODE(URL.INCITEM)    INCFNAME = INCLIST<1,LX>    INCNAME = INCLIST<2,LX>    CALL SWAP(INCNAME,"'","\'")    CALL SWAP(INCFNAME,"'","\'")    EA.INCS := '<tr><td>':INCFNAME:'</td><td><a target="':URL.INCFILE:'_':URL.INCITEM:'" href="/dbc/MVDB.WEB.ED?':ACCT.LINK:'ed_file=':URL.INCFILE:'&ed_item=':URL.INCITEM:'">':INCNAME:'</a>'    EA.INCS := '</td><td>'    IN.CNT = DCOUNT( INCLIST<4,LX>, @SVM )    FOR LXL = 1 TO IN.CNT      EA.INCS := '<a href="#" onclick="javascript:editArea.go_to_line(':ESC.APOS:INCLIST<4,LX,LXL>:ESC.APOS:'); return false;">':INCLIST<4,LX,LXL>:'</a> '      IF LXL < IN.CNT THEN EA.INCS := ", "    NEXT LXL  END  IF LX <= FILE.CNT THEN    FOR FOPX = 1 TO DCOUNT( FILELIST<3,LX>, @SVM )      IF FOPX = 1 THEN SHOW.FILENAME = FILELIST<1,LX> ELSE SHOW.FILENAME = '&nbsp;'      EA.FILES := '<tr><td>':SHOW.FILENAME:'</td><td>':FILELIST<3,LX,FOPX>      EA.FILES := '</td><td>'      IN.CNT = DCOUNT( FILELIST<5,LX,FOPX>, "," )      FOR LXL = 1 TO IN.CNT        LNO = FIELD( FILELIST<5,LX,FOPX>,',',LXL)        EA.FILES := '<a href="#" onclick="javascript:editArea.go_to_line(':ESC.APOS:LNO:ESC.APOS:'); return false;">':LNO:'</a>'        IF LXL < IN.CNT THEN EA.FILES := ", "      NEXT LXL      EA.FILES := '</td></tr>'    NEXT FOPX  ENDNEXT LXIF SUB.CNT THEN  EA.CALLS := '</td></tr></tbody></table>'ENDIF INC.CNT THEN  EA.INCS := '</td></tr></tbody></table>'ENDIF FILE.CNT THEN  EA.FILES := '</tbody></table>'END*ARC.LIST = ""ARC.CNT = 0IF ARCHIVE THEN  * Archiving is enabled. Find a list of archived copies of this file  IF acct = "" THEN USE.ACCT = myacct ELSE USE.ACCT = acct  CMD = 'SSELECT MV.WEB.ED.ARCHIVE WITH ACCT = "':USE.ACCT:'" AND WITH FILE.NAME = "':filename:'" AND WITH ITEM = "':item:'" BY-DSND DATE BY-DSND TIME'  EXECUTE CMD CAPTURING JUNK  IF SYSTEM(11) THEN    ARC.LIST = '<table width="100%"><tbody><tr><th>Date</th><th>Time</th><th>Open</th></tr>'    ARC.CNT = SYSTEM(11)    LOOP      READNEXT AID ELSE EXIT      READV DT.STAMP FROM F.ED.ARCHIVE, AID, 1 ELSE DT.STAMP = ""      ARC.LIST := '<tr><td>':OCONV(FIELD(DT.STAMP,'*',2),'D2/'):'</td><td>':OCONV(FIELD(DT.STAMP,'*',1),'MTS'):'</td><td>'      URL.AID = AID      CALL SUB.URL.ENCODE(URL.AID)      ARC.LIST := '<a href="/dbc/MVDB.WEB.ED?ed_acct=MVDB&ed_file=MV.WEB.ED.ARCHIVE&ed_item=':URL.AID:'" target="MVDB_MV.WEB.ED.ARCHIVE_':URL.AID:'">Open</a>'      ARC.LIST := '</td></tr>'    REPEAT    ARC.LIST := '</tbody></table>'  ENDEND*CALL SWAP(HTML,'<!-- EA_CALLS_CONTENT -->',EA.CALLS)CALL SWAP(HTML,'<!-- EA_INCLUDES_CONTENT -->',EA.INCS)CALL SWAP(HTML,'<!-- EA_FILES_CONTENT -->',EA.FILES)CALL SWAP(HTML,'<!-- EA_ARCHIVE_CONTENT -->',ARC.LIST)CALL SWAP(HTML,'<!-- NUM_OF_CALLS -->',SUB.CNT)CALL SWAP(HTML,'<!-- NUM_OF_INCLUDES -->',INC.CNT)CALL SWAP(HTML,'<!-- NUM_OF_FILES -->',FILE.CNT)CALL SWAP(HTML,'<!-- NUM_OF_ARCHIVES -->',ARC.CNT)CALL SWAP(HTML,'<!-- ED_SCRIPTS -->',EDIT.SCRIPTS)CALL WEB.SEND(HTML)GLOBAL.INFO(100) = 1 ;* Intentional stopSTOP*ADD.MESSAGE: **CALL SWAP(HTML,'<!-- HEADER -->',HMESSAGE)CALL SWAP(HTML,'<!-- FOOTER -->',FMESSAGE)RETURN*BUILD.SUBLIST: * Build a list of subroutines called by this program*IDX.POS = 1LPOS = 1LOOP  POS = INDEX( record, "CALL ", IDX.POS )WHILE POS DO  LINE.NUM = DCOUNT(record[1,POS+1],@AM)  LINE = TRIM(record<LINE.NUM>)  IF LINE[1,1] # "*" AND LINE[1,1] # "!" THEN    CALL.POS = INDEX( LINE, 'CALL ', 1 )    QCPOS = CALL.POS    GOSUB QUOTE.CHECK ;* Make sure the "CALL " is not in a quote    SKIP.LINE = 0    IF IN.QUOTE THEN SKIP.LINE = 1 ELSE      MID.CMNT.POS = INDEX(LINE,';*',1)      IF MID.CMNT.POS AND MID.CMNT.POS < CALL.POS THEN        * Is the mid-line comment within a quote?        QCPOS = MID.CMNT.POS        GOSUB QUOTE.CHECK        IF NOT(IN.QUOTE) THEN SKIP.LINE = 1      END    END    IF SKIP.LINE THEN ;* This is happening inside a literal string, ignore it.      IDX.POS += 1      CONTINUE    END    TEMP.STR = LINE[1,CALL.POS]    SUBNAME = LINE[CALL.POS+5,999]    IF INDEX( SUBNAME,'(',1) THEN      SUBNAME = FIELD( SUBNAME, '(', 1 )    END ELSE SUBNAME = FIELD(SUBNAME,' ',1)    SUBNAME = TRIM(SUBNAME)    *    READ CATPTR FROM F.MD, SUBNAME ELSE CATPTR = ""    IF CATPTR # "" THEN      SUBFILE = FIELD( CATPTR<3>, ' ', 1 ) ; *PJS 07-22-15* UD      IF SUBFILE = '' THEN SUBFILE=filename    END ELSE SUBFILE = filename        UKEY = SUBFILE:"*":SUBNAME    LOCATE UKEY IN SUBLIST<3> SETTING FOUND.POS THEN      SUBLIST<4,FOUND.POS,-1> = LINE.NUM    END ELSE      SUBLIST<1,LPOS> = SUBFILE      SUBLIST<2,LPOS> = SUBNAME      SUBLIST<3,LPOS> = UKEY      SUBLIST<4,LPOS> = LINE.NUM      LPOS += 1    END  END  IDX.POS += 1REPEATRETURN*BUILD.INCLIST: * Build a list of include items used by this program*IDX.POS = 1LPOS = 1LOOP  POS = INDEX( record, "INCLUDE ", IDX.POS )WHILE POS DO  LINE.NUM = DCOUNT(record[1,POS+1],@AM)  LINE = TRIM(record<LINE.NUM>)  SEMI.POS = INDEX( LINE, ';', 1 )  IF SEMI.POS THEN LINE = LINE[1,SEMI.POS-1]  IF TRIM(LINE[1,8]) = "INCLUDE" THEN    INC.POS = INDEX( LINE, 'INCLUDE ', 1 )    QCPOS = INC.POS    GOSUB QUOTE.CHECK    IF IN.QUOTE THEN ;* This is happening inside a literal string, ignore it.      IDX.POS += 1      CONTINUE    END    INCPARAM = LINE[INC.POS+8,999]    INCFILE = FIELD( INCPARAM, ' ', 1 )    INCITEM = FIELD( INCPARAM, ' ', 2 )    IF INCITEM = '' THEN      INCITEM = INCFILE      INCFILE = filename    END    UKEY = INCFILE:"*":INCITEM    LOCATE UKEY IN INCLIST<3> SETTING FOUND.POS THEN      INCLIST<4,FOUND.POS,-1> = LINE.NUM    END ELSE      INCLIST<1,LPOS> = INCFILE      INCLIST<2,LPOS> = INCITEM      INCLIST<3,LPOS> = UKEY      INCLIST<4,LPOS> = LINE.NUM      LPOS += 1    END  END  IDX.POS += 1REPEATRETURN*BUILD.FILELIST: * Build a list of files used by this program*IDX.POS = 1LPOS = 1LOOP  POS = INDEX( record, "OPEN ",IDX.POS )WHILE POS DO  LINE.NUM = DCOUNT(record[1,POS+1],@AM)  LINE = TRIM(record<LINE.NUM>)  IF LINE[1,1] # "*" AND LINE[1,1] # "!" THEN    OPOS = INDEX( LINE, 'OPEN ', 1 )    QCPOS = OPOS    GOSUB QUOTE.CHECK ;* Make sure this doesn't appear inside a literal string    IF IN.QUOTE THEN      IDX.POS += 1      CONTINUE    END    CONVERT "'" TO '"' IN LINE ;* Standaraize the quote character    CONVERT "\" TO '"' IN LINE    * An open statement may look like this: OPEN "","FILENAME"  - Get rid of the "", if it exists    DPOS = INDEX( LINE, '"",', 1 )    IF DPOS THEN      LINE = LINE[1,DPOS-1]:LINE[DPOS+3,999]    END    OPARAM = LINE[OPOS+5,999]    TPOS = INDEX( OPARAM, ' TO ', 1 )    IF NOT(TPOS) THEN      IDX.POS += 1      CONTINUE ;* Must not be an open statement.    END    FILEVAR = OPARAM[TPOS+4,999]    FILEVAR = FIELD( TRIM( FILEVAR ), ' ', 1 )    OPARAM = OPARAM[1,TPOS]*3-9-15*    FILENAME = TRIM(OPARAM)*3-9-15*    IF FILENAME[1,1] = '"' THEN FILENAME = FIELD(FILENAME,'"',2)*3-9-15*    UKEY = FILENAME:"*":FILEVAR    FILENAME.VAR = TRIM(OPARAM); *3-9-15*    IF FILENAME.VAR[1,1] = '"' THEN FILENAME.VAR = FIELD(FILENAME.VAR,'"',2); *3-9-15*    UKEY = FILENAME.VAR:"*":FILEVAR; *3-9-15*    LOCATE UKEY IN FILELIST<4> SETTING FOUND.POS THEN      FILELIST<5,FOUND.POS,-1> = LINE.NUM    END ELSE*3-9-15*      FILELIST<1,LPOS> = FILENAME      FILELIST<1,LPOS> = FILENAME.VAR; *3-9-15*      FILELIST<2,LPOS> = FILEVAR      FILELIST<3,LPOS,1> = "Open"      FILELIST<4,LPOS> = UKEY      FILELIST<5,LPOS,1> = LINE.NUM      F.R.IDX = 1; F.R.LINES = ""      LOOP        F.R.POS = INDEX( record, "FROM ":FILEVAR, F.R.IDX )      WHILE F.R.POS DO        F.R.IDX += 1        IF F.R.LINES # "" THEN F.R.LINES := ","        F.R.LINES := DCOUNT(record[1,F.R.POS+1],@AM)      REPEAT      IF F.R.IDX > 1 THEN        * Read operation        FILELIST<3,LPOS,-1> = "Read"        FILELIST<5,LPOS,-1> = F.R.LINES      END      *      F.W.IDX = 1 ; F.W.LINES = ""      LOOP        F.W.POS =  INDEX( record, "ON ":FILEVAR, F.W.IDX )      WHILE F.W.POS DO        F.W.IDX += 1        IF F.W.LINES # "" THEN F.W.LINES := ","        F.W.LINES := DCOUNT(record[1,F.W.POS+1],@AM)      REPEAT      IF F.W.IDX > 1 THEN        * Write operation        FILELIST<3,LPOS,-1> = "Write"        FILELIST<5,LPOS,-1> = F.W.LINES      END      *      F.D.IDX = 1 ; F.D.LINES = ""      LOOP        F.D.POS =  INDEX( record, "DELETE ":FILEVAR, F.D.IDX )      WHILE F.D.POS DO        F.D.IDX += 1        IF F.D.LINES # "" THEN F.D.LINES := ","        F.D.LINES := DCOUNT(record[1,F.D.POS+1],@AM)      REPEAT      IF F.D.IDX > 1 THEN        * Delete operation        FILELIST<3,LPOS,-1> = "Delete"        FILELIST<5,LPOS,-1> = F.D.LINES      END      LPOS += 1    END  END  IDX.POS += 1REPEATRETURN*QUOTE.CHECK: * Is the data in LINE at QCPOS inside quotes?*CURR.Q = ""FOR SEEK.POS = 1 TO QCPOS  QCH = LINE[SEEK.POS,1]  BEGIN CASE    CASE CURR.Q # ""      IF QCH = CURR.Q THEN        CURR.Q = ""      END    CASE QCH = "'" ; CURR.Q = QCH    CASE QCH = '"' ; CURR.Q = QCH    CASE QCH = '\' ; CURR.Q = QCH  END CASENEXT SEEK.POSIF CURR.Q # "" THEN IN.QUOTE = 1 ELSE IN.QUOTE = 0RETURN006540MVDB.ADMIN0c2* Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Administration area of Bravo Dashboard** 08-18-16 Tom Parker of Zumasys - Convert password input to hex before saving* 07-22-15 Mike Street OF ZUMASYS - MODIFIED FOR UniData*          CHANGE OCONV(X,'U3060') TO DIGEST('MD5'...)** 09-23-16 Peter Schellenbach*  Add support for alternate logo defined for each user (MVDB.USERS attr 7).*  Requires corresponding changes in WEB.FORMS admin_template.html and*  javascripts initAdminTemplate.js to edit the alternate logo field.** TPARKER 8-18-16 Fix bug where encrypted passwords were being stored in MVDB.USERS without*  converting to hex (MVDB.MAIN compares hex-converted encrypted password).**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.USERSINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*DIM DB.AREAS(5)*OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MVDB.SUBS' TO F.MVDB.SUBS ELSE STOP 201, 'MVDB.SUBS'OPEN '','MVDB.USERS' TO F.MVDB.USERS ELSE STOP 201, 'MVDB.USERS'OPEN '','MVDB.DEFS' TO F.MVDB.DEFS ELSE STOP 201, 'MVDB.DEFS'OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE STOP 201, 'MVDB.WIDGET.TYPES'OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'OPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE STOP 201, 'MVDB.THEMES'*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDENDIF THEME.CSS # '' THEN THEME.CSS = '<link rel="Stylesheet" href="/db/themes/':THEME.CSS:'" media="screen" type="text/css" />'IF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'**SESSION$GLOBAL.DEBUG = 1*GLOBAL.INFO(100) = 0CALL GET.SESSION.VAR("adminauth",adminauth)CALL PUT.SESSION.VAR("dd_mode",0)adminpass = ""IF adminauth # 1 THEN  FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'  FORM := '</head><body><p>Administrative priviledges are required. '  FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'  CALL WEB.SEND(FORM)  GLOBAL.INFO(100) = 1 ;* Intentional stop  STOPEND*LOCATE "action" IN CGI$VARS SETTING POS THEN  action = CGI$VALS<POS>END ELSE action = ""LOCATE "filter" IN CGI$VARS SETTING POS THEN  filter = CGI$VALS<POS>END ELSE  CALL GET.SESSION.VAR("widget_filter",filter)ENDLOCATE "clearfilter" IN CGI$VARS SETTING POS THEN  filter = ""ENDCALL PUT.SESSION.VAR("widget_filter",filter)*LOCATE "unfail_widget" IN CGI$VARS SETTING POS THEN  UNFAIL.WIDGET = CGI$VALS<POS>  CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  LOCATE UNFAIL.WIDGET IN FAILED.WIDGETS SETTING DPOS THEN    FAILED.WIDGETS = DELETE( FAILED.WIDGETS, DPOS, 0, 0 )    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  END  action = "widgets"END*ACTIVE.MENU = ''HTML = ''SCRIPTS = ""BEGIN CASE  CASE action = "users" OR action = ""    GOSUB LOAD.USERS  CASE action = "widgets"    GOSUB LOAD.WIDGETS  CASE action = "save_widget"    LOCATE "save_widget" IN CGI$VARS SETTING POS THEN      LOCATE "save_widgetid" IN CGI$VARS SETTING POS THEN        save.widgetid = CGI$VALS<POS>        LOCATE "newwidget" IN CGI$VARS SETTING POS THEN          newwidget = (CGI$VALS<POS> = 1)        END ELSE newwidget = ""        IF newwidget = 1 THEN          LOCATE "new_widgetid" IN CGI$VARS SETTING POS THEN            save.widgetid = CGI$VALS<POS>          END        END ELSE newwidget = 0        IF newwidget THEN          MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, save.widgetid THEN            SQN = 1            LOOP              new.saveid = save.widgetid:"-":SQN              MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, new.saveid THEN                SQN += 1              END ELSE                save.widgetid = new.saveid                EXIT              END            REPEAT          END        END        IF save.widgetid # "" THEN          MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, save.widgetid ELSE MAT WIDGET.ITEM = ''          LOCATE "widget_sub" IN CGI$VARS SETTING POS THEN            WIDGET.SUB = CGI$VALS<POS>          END          LOCATE "widget_users" IN CGI$VARS SETTING POS THEN            USER.LIST = CGI$VALS<POS>            CONVERT "," TO @VM IN USER.LIST            WIDGET.USERS = USER.LIST          END ELSE WIDGET.USERS = ""          LOCATE "new_widget_name" IN CGI$VARS SETTING POS THEN            NEW.NAME = CGI$VALS<POS>            IF NEW.NAME = save.widgetid THEN NEW.NAME = ""          END ELSE NEW.NAME = ""          IF NEW.NAME # "" THEN            * A rename of the widget has occurred.            MATWRITE WIDGET.ITEM ON F.MVDB.WIDGETS, NEW.NAME            DELETE F.MVDB.WIDGETS, save.widgetid            * Rename instances of this widget name within dashboard definitions            SELECT F.MVDB.DEFS            LOOP              READNEXT DBID ELSE EXIT              MATREADU DB.ITEM FROM F.MVDB.DEFS, DBID ELSE CONTINUE              LOOP                LOCATE save.widgetid IN DB.WIDGETS<1> SETTING RPOS THEN                  FOUND = 1                  DB.WIDGETS<1,RPOS> = NEW.NAME                END ELSE FOUND = 0              WHILE FOUND DO REPEAT              MATWRITE DB.ITEM ON F.MVDB.DEFS, DBID            REPEAT          END ELSE            MATWRITE WIDGET.ITEM ON F.MVDB.WIDGETS, save.widgetid          END        END      END    END ELSE      LOCATE "delete_widget" IN CGI$VARS SETTING POS THEN        LOCATE "save_widgetid" IN CGI$VARS SETTING POS THEN          save.widgetid = CGI$VALS<POS>          DELETE F.MVDB.WIDGETS, save.widgetid        END      END    END    GOSUB LOAD.WIDGETS  CASE action = "dashboards"    GOSUB LOAD.DASHBOARDS  CASE action = "editdb" OR action = "adddb"    ACTIVE.MENU = "DASHBOARDS"    READ INNER.TEMPLATE FROM F.WEB.FORMS, "admin_dashboards.html" ELSE INNER.TEMPLATE = "admin_dashboards.html not found"    DASHBOARD.LIST = ''    EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNK    LOOP      READNEXT ID ELSE EXIT      DASHBOARD.LIST<-1> = ID    REPEAT    CALL SWAP(DASHBOARD.LIST, CHAR(254), '","')    DASHBOARD.LIST = '"':DASHBOARD.LIST:'"'    CALL SWAP(INNER.TEMPLATE,'<!-- list_of_dashboard_ids -->',DASHBOARD.LIST)    *    IF action = "adddb" THEN      edit.id = "new_db"      EDIT.PROMPT = '<input id="edit_dbid" type="text" value="Untitled Dashboard" name="edit_dbid"/>'      CALL SWAP(INNER.TEMPLATE,'<!-- save_dbid -->',edit.id)      CALL SWAP(INNER.TEMPLATE,'<!-- edit_dbid -->',EDIT.PROMPT)      MAT DB.ITEM = ''    END ELSE      LOCATE "edit_dbid" IN CGI$VARS SETTING POS THEN        edit.id = CGI$VALS<POS>      END ELSE edit.id = ""      *      MATREAD DB.ITEM FROM F.MVDB.DEFS, edit.id ELSE MAT DB.ITEM = ''      *      EDIT.PROMPT = '<input id="db_id" type="text" value="':edit.id:'" name="db_new_id" size="63" />'       CALL SWAP(INNER.TEMPLATE,'<!-- save_dbid -->',edit.id)      CALL SWAP(INNER.TEMPLATE,'<!-- edit_dbid -->',EDIT.PROMPT)    END    CALL MVDB.SUB.WIDGET.LIST(WIDGET.LIST)    *    SCRIPT1 = 'var widgetList = new Array("");':CHAR(10)    CALL SWAP(INNER.TEMPLATE,'<!-- db_desc -->',DB.DESC)    CALL SWAP(INNER.TEMPLATE,'<!-- db_sort -->',DB.SORT)    *    *DB.THEME db_theme select list    *    theme.select = '<select name="db_theme">'    theme.select := CHAR(10):'<option value="">Default Theme</option>'    EXECUTE 'SSELECT MVDB.THEMES' CAPTURING JUNK    THEME.LIST = ''    LOOP      READNEXT THEME.ID ELSE EXIT      READV CSS.NAME FROM F.MVDB.THEMES, THEME.ID, 1 ELSE CSS.NAME = ''      IF CSS.NAME # '' THEN        SELECTED = ''        IF THEME.ID = DB.THEME THEN SELECTED = ' selected'        theme.select := CHAR(10):'<option value="':THEME.ID:'"':SELECTED:'>':THEME.ID:'</option>'      END    REPEAT    theme.select := CHAR(10):'</select>':CHAR(10)    CALL SWAP(INNER.TEMPLATE,'<!-- db_theme -->',theme.select)        CALL SWAP(INNER.TEMPLATE,'<!-- db_sort -->',DB.SORT)    *    SHOW.USERS = DB.USERS.ALLOWED    CONVERT @VM TO "," IN SHOW.USERS    CALL SWAP(INNER.TEMPLATE,'<!-- db_users -->',SHOW.USERS)    *    ACTIVE1 = "" ; ACTIVE2 = "" ; ACTIVE3 = ""    IF DB.TEMPLATE = "" THEN DB.TEMPLATE = 1    SCRIPT1 := 'var defaultLayout=':DB.TEMPLATE:';':CHAR(10)    BEGIN CASE      CASE DB.TEMPLATE = 3 ; ACTIVE3 = 'class="active"'      CASE DB.TEMPLATE = 2 ; ACTIVE2 = 'class="active"'      CASE DB.TEMPLATE = 1 OR 1 ; ACTIVE1 = 'class="active"'    END CASE    LAYOUT.OPTS  = '<li ':ACTIVE1:'><label>1 column</label><img alt="1" src="/db/images/1-column-layout.png" /></li>'    LAYOUT.OPTS := '<li ':ACTIVE2:'><label>2 column</label><img alt="2" src="/db/images/2-column-layout.png" /></li>'    LAYOUT.OPTS := '<li ':ACTIVE3:'><label>3 column</label><img alt="3" src="/db/images/3-column-layout.png" /></li>'    *    CALL SWAP(INNER.TEMPLATE,'<!-- db_layout_opts -->',LAYOUT.OPTS)    *    * Create a list of widgets by area    *    MAT DB.AREAS = ""    FOR X = 1 TO DCOUNT( DB.WIDGETS, @VM )      WID = DB.WIDGETS<1,X>      CALL SWAP(WID,'"','\"')      LOCATE WID IN WIDGET.LIST<1> SETTING WPOS THEN        WWIDTH = WIDGET.LIST<6,WPOS>        WTYPE = WIDGET.LIST<4,WPOS>        FAIL.TEXT = WIDGET.LIST<8,WPOS>      END ELSE        WTYPE = "UNKNOWN"        WWIDTH = 1        FAIL.TEXT = ""      END      THIS.AREA = DB.WIDGET.AREA<1,X>      IF NOT(THIS.AREA MATCHES "1N") THEN THIS.AREA = 1      IF THIS.AREA < 1 OR THIS.AREA > 5 THEN THIS.AREA = 1      MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, WTYPE THEN        CLASS.NAME = FIELD(WT$ICON,'.',1)        CONVERT "_" TO "-" IN CLASS.NAME        WIDTH.CLASS = ""        BEGIN CASE          CASE WWIDTH = 1 ; WIDTH.CLASS = 'widget-small'          CASE WWIDTH = 2 ; WIDTH.CLASS = 'widget-medium'          CASE WWIDTH = 3 OR 1; WIDTH.CLASS = 'widget-large'        END CASE        SHOW.WID = WID        IF FAIL.TEXT # "" THEN SHOW.WID := " (":FAIL.TEXT:")"        DB.AREAS(THIS.AREA) := '<div name="':WID:'" class="':CLASS.NAME:'"><span type="':WTYPE:'" class="':WIDTH.CLASS:'" >':SHOW.WID:'</span></div>'      END    NEXT X    FOR X = 1 TO 5      CALL SWAP(INNER.TEMPLATE,'<!-- AREA_':X:'_WIDGETS -->',DB.AREAS(X))    NEXT X    *    * Build widget option list    *    WOPTS = ''    ALL.WIDGET.CNT = DCOUNT( WIDGET.LIST<1>, @VM )    FOR X = 1 TO ALL.WIDGET.CNT      USE.DESC = WIDGET.LIST<2,X>      WID = WIDGET.LIST<1,X>      WDESC = WIDGET.LIST<2,X>      WTYPE = WIDGET.LIST<4,X>      WWIDTH = WIDGET.LIST<6,X>      FAIL.TEXT = WIDGET.LIST<8,X>      CALL SWAP(WDESC,'"','\"')      CALL SWAP(WID,'"','\"')      MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, WTYPE THEN        CLASS.NAME = FIELD(WT$ICON,'.',1)        CONVERT "_" TO "-" IN CLASS.NAME        WIDTH.CLASS = ""        BEGIN CASE          CASE WWIDTH = 1 ; WIDTH.CLASS = 'widget-small'          CASE WWIDTH = 2 ; WIDTH.CLASS = 'widget-medium'          CASE WWIDTH = 3 OR 1; WIDTH.CLASS = 'widget-large'        END CASE        SHOW.WID = WID        IF FAIL.TEXT # "" THEN SHOW.WID := " (":FAIL.TEXT:")"        WOPTS := '<div class="':CLASS.NAME:'"><span name="':WID:'" class="widget-id ':WIDTH.CLASS:'" type="':WTYPE:'">':SHOW.WID:'</span></div>':CHAR(10)      END      SCRIPT1 := \widgetList["\:WID:\"] = new Array("\:WDESC:\","\:WTYPE:\","\:WIDGET.LIST<6,X>:\");\    NEXT X    *    GOSUB MAKE.DB.SCRIPT    SCRIPTS<-1> = SCRIPT1    *    CALL SWAP(INNER.TEMPLATE,'<!-- widget_list -->',WOPTS)    HTML = INNER.TEMPLATE  CASE action = "save_db"    LOCATE "save_db" IN CGI$VARS SETTING POS THEN      SAVE.OK = 1      rename.id = ""      LOCATE "save_dbid" IN CGI$VARS SETTING POS THEN        save.id = CGI$VALS<POS>        IF save.id = "new_db" THEN          LOCATE "edit_dbid" IN CGI$VARS SETTING POS THEN            save.id = CGI$VALS<POS>          END ELSE save.id = ""          IF save.id = "" THEN SAVE.OK = 0 ELSE            MATREAD DB.ITEM FROM F.MVDB.DEFS, save.id THEN SAVE.OK = 0          END        END ELSE          LOCATE "db_new_id" IN CGI$VARS SETTING POS THEN            rename.id = CGI$VALS<POS>          END        END        CONVERT '"\' TO '' IN rename.id        CONVERT '"\' TO '' IN save.id        IF SAVE.OK THEN          MATREAD DB.ITEM FROM F.MVDB.DEFS, save.id ELSE MAT DB.ITEM = ''          LOCATE "db_desc" IN CGI$VARS SETTING POS THEN            DB.DESC = CGI$VALS<POS>          END          LOCATE "db_theme" IN CGI$VARS SETTING POS THEN            DB.THEME = CGI$VALS<POS>          END          LOCATE "db_sort" IN CGI$VARS SETTING POS THEN            DB.SORT = CGI$VALS<POS>          END          LOCATE "db_layout" IN CGI$VARS SETTING POS THEN            DB.TEMPLATE = CGI$VALS<POS>          END          LOCATE "db_users" IN CGI$VARS SETTING POS THEN            DB.USERS.ALLOWED = CGI$VALS<POS>          END          CONVERT "," TO @VM IN DB.USERS.ALLOWED          *          LOCATE "widgets" IN CGI$VARS SETTING POS THEN            WIDGET.LIST = CGI$VALS<POS>          END ELSE WIDGET.LIST = ""          CONVERT CHAR(13) TO @AM IN WIDGET.LIST          CONVERT CHAR(10) TO "" IN WIDGET.LIST          WCNT = DCOUNT( WIDGET.LIST, @AM )          DB.WIDGETS = ''          DB.WIDGET.AREA = ''          DB.WIDGET.ORDER = ''          FOR WX = 1 TO WCNT            THIS.W = WIDGET.LIST<WX>            DB.WIDGET.AREA<1,WX> = FIELD( THIS.W, ',', 1 )            DB.WIDGET.ORDER<1,WX> = FIELD( THIS.W,',', 2 )            DB.WIDGETS<1,WX> = OCONV(THIS.W,'G2,99' )          NEXT WX          IF rename.id # "" AND rename.id # save.id THEN            DELETE F.MVDB.DEFS, save.id            MATWRITE DB.ITEM ON F.MVDB.DEFS, rename.id          END ELSE            MATWRITE DB.ITEM ON F.MVDB.DEFS, save.id          END        END      END    END ELSE      LOCATE "delete_db" IN CGI$VARS SETTING POS THEN        LOCATE "save_dbid" IN CGI$VARS SETTING POS THEN          del.id = CGI$VALS<POS>          DELETE F.MVDB.DEFS, del.id        END      END    END    GOSUB LOAD.DASHBOARDS  CASE action = "save_user"    LOCATE "save_userid" IN CGI$VARS SETTING POS THEN      save.userid = CGI$VALS<POS>      LOCATE "delete_user" IN CGI$VARS SETTING POS THEN        DELETE F.MVDB.USERS, save.userid      END ELSE        LOCATE "newuser" IN CGI$VARS SETTING POS THEN          newuser = 1          LOCATE "new_userid" IN CGI$VARS SETTING POS THEN            save.userid = CGI$VALS<POS>          END        END ELSE newuser = 0        SAVE.OK = 1        IF newuser THEN          MATREAD USER.ITEM FROM F.MVDB.USERS, save.userid THEN            SAVE.OK = 0          END        END        IF SAVE.OK AND save.userid # "" THEN          MATREAD USER.ITEM FROM F.MVDB.USERS, save.userid ELSE MAT USER.ITEM = ''          LOCATE "username" IN CGI$VARS SETTING POS THEN            USER.NAME = CGI$VALS<POS>          END          LOCATE "default_dashboard" IN CGI$VARS SETTING POS THEN            USER.DEFAULT.DB = CGI$VALS<POS>          END          LOCATE "user_password" IN CGI$VARS SETTING POS THEN            IF CGI$VALS<POS> # "" THEN*07-22-15 UD*             USER.PASSWORD = OCONV(CGI$VALS<POS>,"U3060")              IF DIGEST('MD5', CGI$VALS<POS>, 1, USER.PASSWORD) <> 0 THEN ; *07-22-15 UD*                SAVE.OK = 0 ; *07-22-15 UD*              END ELSE                USER.PASSWORD = OCONV(USER.PASSWORD, 'MX0C'); *TPARKER 8-18-16 UD*              END            END          END          LOCATE "user_role" IN CGI$VARS SETTING POS THEN            USER.ROLE = CGI$VALS<POS>          END          IF USER.ROLE = "" THEN USER.ROLE = "User"          * PJS 09-23-16 save optional user logo          LOCATE "opt_logo_path" IN CGI$VARS SETTING POS THEN            USER.ALT.LOGO = CGI$VALS<POS>          END ELSE            USER.ALT.LOGO = ""          END          IF SAVE.OK THEN ; *07-22-15 UD* if DIGEST() function failed, don't save user (no password!)            MATWRITE USER.ITEM ON F.MVDB.USERS, save.userid          END        END      END    END    GOSUB LOAD.USERS  CASE 1    READ HTML FROM F.WEB.FORMS, "admin_menu.html" ELSE ADMIN.MENU = "admin_menu.html not found."END CASEREAD ADMIN.TEMPLATE FROM F.WEB.FORMS, "admin_template.html" ELSE ADMIN.TEMPLATE = "admin_template.html not found."CALL SWAP(ADMIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)HEADER = '<div id="dashboard_nav">'HEADER := '<ol class="dashboard_list">'IF ACTIVE.MENU = "USERS" THEN ACTIVE = 'class="db_active"' ELSE ACTIVE = ""HEADER := '<li ':ACTIVE:'><a href="':CGI$PATH:'/MVDB.ADMIN?action=users">Users</a></li>'IF ACTIVE.MENU = "WIDGETS" THEN ACTIVE = 'class="db_active"' ELSE ACTIVE = ""HEADER := '<li ':ACTIVE:'><a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets">Widgets</a></li>'IF ACTIVE.MENU = "DASHBOARDS" THEN ACTIVE = 'class="db_active"' ELSE ACTIVE = ""HEADER := '<li ':ACTIVE:'><a href="':CGI$PATH:'/MVDB.ADMIN?action=dashboards">Dashboards</a></li>'OPEN 'RSS.BP' TO F.RSS.BP THEN  HEADER := '<li><a href="':CGI$PATH:'/RSS.MAINT">RSS Feed Maintenance</a></li>'ENDOPEN 'MVPKG.DATA' TO F.MVPKG.DATA THEN  HEADER := '<li><a href="':CGI$PATH:'/MVPKG.MAIN">Package Manager</a></li>'ENDHEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN">Return to Dashboard</a></li>'HEADER := '</ol>'HEADER := '</div>'CALL SWAP(ADMIN.TEMPLATE,'<!-- HEADER -->',HEADER)FOOTER = ''CALL SWAP(ADMIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)*CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_MAIN -->',HTML)CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_SCRIPTS -->',SCRIPTS)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)CALL WEB.SEND(ADMIN.TEMPLATE)GLOBAL.INFO(100) = 1 ;* Process completed successfullySTOP*LOAD.USERS: **    ACTIVE.MENU = "USERS"    EXECUTE 'SSELECT MVDB.USERS' CAPTURING JUNK    HTML = '<table width="100%">'    HTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adduser" class="add-user">Add User</a></td></tr>'    HTML<-1> = '<tr><th>User ID</th>'    HTML<-1> = '<th>Name</th>'     HTML<-1> = '<th>Default Dashboard</th>'    HTML<-1> = '<th>Role</th>'    HTML<-1> = '<th>Action</th>'     HTML<-1> = '</tr>'    *    LOOP      READNEXT ID ELSE EXIT      MATREAD USER.ITEM FROM F.MVDB.USERS, ID ELSE MAT USER.ITEM = ""      IF USER.ROLE = "" THEN USER.ROLE = "User"      HTML<-1> = '<tr><td>':ID:'</td>'      HTML<-1> = '<td>':USER.NAME:'</td>'      HTML<-1> = '<td>':USER.DEFAULT.DB:'</td>'      CALL SWAP(ID,'"','\"')      CALL SWAP(USER.NAME,'"','\"')      CALL SWAP(USER.DEFAULT.DB,'"','\"')      CALL SWAP(USER.DEFAULT.DB,"'","&apos;")      * PJS 09-23-16: added USER.ALT.LOGO parameter to editUser()      ACTIONS = \&nbsp;<a href='javascript:editUser("\:ID:\","\:USER.NAME:\","\:USER.DEFAULT.DB:\","\:USER.ROLE:\","\:USER.ALT.LOGO:\");'><img title="Edit User" class="icon" src="/db/icons/user_edit.png" /></a>\      ACTIONS := \&nbsp;<a href='javascript:deleteUser("\:ID:\");'><img title="Delete User" class="icon" src="/db/icons/user_delete.png" /></a>\      HTML<-1> = '<td>':USER.ROLE:'</td>'      HTML<-1> = '<td>':ACTIONS:'</td>'      HTML<-1> = '</tr>'    REPEAT    HTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adduser" class="add-user">Add User</a></td></tr>'    HTML<-1> = '</table>'    *    GOSUB MAKE.DB.SCRIPTRETURN*LOAD.WIDGETS: **ACTIVE.MENU = "WIDGETS"CALL MVDB.SUB.WIDGET.LIST(WIDGET.LIST)FFORM = '<form action="':CGI$PATH:'/MVDB.ADMIN" method="get">'FFORM := '<input type="hidden" name="action" value="widgets">'FFORM := 'Filter: <input type="text" name="filter" value="':filter:'"> <input type=submit name=fbtn value="Go">'IF filter # "" THEN FFORM := ' <a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets&clearfilter">Clear Filter</a>'FFORM := '</form>'HTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="3"><a href="':CGI$PATH:'/MVDB.ADMIN?action=addwidget" class="add-widget">Add a Widget</a></td>'HTML<-1> = '<td colspan="4" align="right">':FFORM:'</td></tr>'HTML<-1> = '<tr><th colspan="2">Widget ID</th>'HTML<-1> = '<th>Type</th>' HTML<-1> = '<th>Description</th>' HTML<-1> = '<th>Subroutine</th>' HTML<-1> = '<th>Users Allowed</th>' HTML<-1> = '<th>Actions</th>' HTML<-1> = '</tr>'*WIDGET.CNT = DCOUNT( WIDGET.LIST<1>, @VM )FOR WDX = 1 TO WIDGET.CNT  ID = WIDGET.LIST<1,WDX>  WDESC = WIDGET.LIST<2,WDX>  WSUB = WIDGET.LIST<3,WDX>  WTYPE = WIDGET.LIST<4,WDX>  WTITLE = WIDGET.LIST<5,WDX>  WWIDTH = WIDGET.LIST<6,WDX>  FAIL.STATUS = WIDGET.LIST<7,WDX>  FAIL.TEXT = WIDGET.LIST<8,WDX>  MATREAD WIDGET.TYPES FROM F.MVDB.WIDGET.TYPES, WTYPE ELSE MAT WIDGET.TYPES = ""  IF filter # "" THEN    FILTER.MATCH = 0    IF INDEX(WDESC,filter,1) THEN FILTER.MATCH = 1    IF INDEX(WTITLE,filter,1) THEN FILTER.MATCH = 1    IF INDEX(WSUB,filter,1) THEN FILTER.MATCH = 1  END ELSE FILTER.MATCH =1  IF FILTER.MATCH THEN    IF WT$ICON # "" THEN      ICON.IMG = '<img height="20" width="20" src="/db/icons/':WT$ICON:'" />'    END ELSE ICON.IMG = "&nbsp;"    ID.LINK = ID    CALL SUB.URL.ENCODE(ID.LINK)    ID.LINK = '<a href="':CGI$PATH:'/MVDB.MAIN?udview=':ID.LINK:'&dd" target="_blank" title="Open in new window">':ID:'</a>'    HTML<-1> = '<tr><td class="widget-name">':ID.LINK:'</td><td class="widget-icon">':ICON.IMG:'</td>'    HTML<-1> = '<td>':WTYPE:'</td>'    IF WTITLE = "" THEN WTITLE = WDESC    HTML<-1> = '<td>':WTITLE:'</td>'    ENC.WIDGET.SUB = WSUB    CALL SUB.URL.ENCODE(ENC.WIDGET.SUB)    HTML<-1> = '<td><a target="MVDB.SUBS_':ENC.WIDGET.SUB:'" href="':CGI$PATH:'/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=':ENC.WIDGET.SUB:'" title="Edit Source">':WSUB:'</a></td>'    MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, ID ELSE MAT WIDGET.ITEM = ""    IF WIDGET.USERS # "" THEN      SHOW.USERS = WIDGET.USERS      CONVERT @VM TO "," IN SHOW.USERS      PASS.USER.LIST = SHOW.USERS    END ELSE      SHOW.USERS = "Anybody"      PASS.USER.LIST = ""    END    HTML<-1> = '<td>':SHOW.USERS:'</td>'    CALL SWAP(WDESC,"'","\'")    CALL SWAP(WSUB,"'","\'")    CALL SWAP(PASS.USER.LIST,"'","\'")    URL.ID = ID    CALL SUB.URL.ENCODE(URL.ID)    CALL SWAP(ID,"'","\'")    ACTIONS = \<a href="javascript:editWidget('\:ID:\','\:WDESC:\','\:WSUB:\','\:PASS.USER.LIST:\');"><img title="Edit Widget" class="icon" src="/db/icons/cog_edit.png" /></a>\    ACTIONS := '&nbsp;'    ACTIONS := \<a href="javascript:copyWidget('Copy of \:ID:\','\:WDESC:\','\:WSUB:\','\:PASS.USER.LIST:\');"><img title="Copy Widget" class="icon" src="/db/icons/page_copy.png" /></a>\    ACTIONS := '&nbsp;'    ACTIONS := \<a href="javascript:deleteWidget('\:ID:\','\:WDESC:\','\:WSUB:\','\:PASS.USER.LIST:\');"><img title="Delete Widget" class="icon" src="/db/icons/cog_delete.png" /></a>\    IF FAIL.STATUS = 1 THEN      * This widget has a fatal error and has been added to the "failed_widgets" session variable. Allow the admin to reset this status.      ACTIONS := \&nbsp;<a href="/dbc/MVDB.ADMIN?unfail_widget=\:URL.ID:\&action=widgets"><img title="Reset Fail Status" class="icon" src="/db/icons/arrow_redo.png" /></a>\    END    HTML<-1> = '<td>':ACTIONS:'</td>'    HTML<-1> = '</tr>'  ENDNEXT WDXHTML<-1> = '<tr><td colspan="7"><a href="" class="add-widget">Add a Widget</a></td></tr>'HTML<-1> = '</table>'*SCRIPTS = 'var widgetList = new Array('EXECUTE "SSELECT MVDB.WIDGETS" CAPTURING JUNKFIRST = 1LOOP  READNEXT ID ELSE EXIT  CALL SWAP(ID,'"','\"')  IF NOT(FIRST) THEN SCRIPTS := ','  FIRST = 0  SCRIPTS := '"':ID:'"'REPEATSCRIPTS := ');'RETURN*LOAD.DASHBOARDS: **ACTIVE.MENU = "DASHBOARDS"EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNKHTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adddb" class="add-dashboard">Add A Dashboard</a></td></tr>'HTML<-1> = '<tr><th>Dashboard ID</th>'HTML<-1> = '<th>Description</th>' HTML<-1> = '<th>Users Allowed</th>' HTML<-1> = '<th>Actions</th>' HTML<-1> = '</tr>'*LOOP  READNEXT ID ELSE EXIT  MATREAD DB.ITEM FROM F.MVDB.DEFS, ID ELSE MAT DB.ITEM = ''  HTML<-1> = '<tr><td>':ID:'</td>'  HTML<-1> = '<td>':DB.DESC:'</td>'  IF DB.USERS.ALLOWED # "" THEN    SHOW.USERS = DB.USERS.ALLOWED    CONVERT @VM TO "," IN SHOW.USERS  END ELSE SHOW.USERS = "Anybody"  HTML<-1> = '<td>':SHOW.USERS:'</td>'  ACTIONS = '<a href="':CGI$PATH:'/MVDB.ADMIN?action=editdb&edit_dbid=':ID:'"><img title="Edit Dashboard" class="icon" src="/db/icons/layout_edit.png" /></a>&nbsp;'  ACTIONS := \<a onClick="return confirm('DELETE: Are you sure?');" href="\:CGI$PATH:\/MVDB.ADMIN?action=save_db&delete_db=1&save_dbid=\:ID:\"><img title="Delete Dashboard" class="icon" src="/db/icons/layout_delete.png" /></a>\  HTML<-1> = '<td>':ACTIONS:'</td>'  HTML<-1> = '</tr>'REPEATHTML<-1> = '<tr><td colspan="5"><a href="':CGI$PATH:'/MVDB.ADMIN?action=adddb" class="add-dashboard">Add A Dashboard</a></td></tr>'HTML<-1> = '</table>'RETURN*MAKE.DB.SCRIPT: **SCRIPTS = 'var dashboardList = new Array('EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNKFIRST = 1LOOP  READNEXT ID ELSE EXIT  CALL SWAP(ID,'"','\"')  IF NOT(FIRST) THEN SCRIPTS := ','  FIRST = 0  SCRIPTS := '"':ID:'"'REPEATSCRIPTS := ');'RETURN0002DCGET.SESSION.VAR0c2SUBROUTINE GET.SESSION.VAR( var, VAL )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program reads a value from the current web*              session record.*#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)VAL = ''*READ REC FROM F.WEB.SESSION, SESSION$ID THEN  LOCATE var IN REC<1> SETTING POS THEN    VAL = REC<2,POS>  END ELSE    VAL = ''  ENDEND*CONVERT CHAR(2) TO @AM IN VALCONVERT CHAR(3) TO @VM IN VALCONVERT CHAR(4) TO @SVM IN VAL*CALL PUT.SESSION.VAR('LastSessionAccess', DATE():'*':TIME())*RETURN*000E53SUB.EXCEL.FUNC0c2SUBROUTINE SUB.EXCEL.FUNC(ACTION,SPREADSHEET,CSV.WIDGET.NAME)** Copyright (c) 2020 Zumasys, Inc. All rights reserved.* Description: EXCEL utility functions*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE***SPREADSHEET=''** ISOLATE THE TITLE*BEGIN CASE  CASE ACTION = 'generate'         * Use widget name to create a filename for the CSV file         OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'         CALL SUB.GET.NEXT.ID(UNIQUE.ID,F.MVDB.CONTROL)             CSV.FILE.NAME = CSV.WIDGET.NAME:'_' :UNIQUE.ID         CALL SET.CONTENT.TYPE('text/csv')         SESSION$HEADERS<-1> = 'Content-Disposition: attachment; filename="':CSV.FILE.NAME:'.csv"'         * Build the CSV content         GOSUB BUILD.SPREADSHEET.CONTENT         SPREADSHEET=CHANGE(SPREADSHEET,CHAR(254),CHAR(13):CHAR(10))         CSV.SIZE=LEN(SPREADSHEET)         SESSION$HEADERS<-1>='Content-Length:':CSV.SIZEEND CASERETURN*BUILD.SPREADSHEET.CONTENT:*BEGIN CASE   CASE W$TYPE = 'TABLE'      GOSUB TYPE.IS.TABLE      DASHBOARD.TYPE='Report'   CASE INDEX(W$TYPE,'COLUMN',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'BAR',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'LINE',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'AREA',1)      GOSUB TYPE.IS.BAR.OR.COLUMN      DASHBOARD.TYPE='Chart'   CASE INDEX(W$TYPE,'PIE',1)      GOSUB TYPE.IS.PIE      DASHBOARD.TYPE='Pie'   CASE INDEX(W$TYPE,'DOUGHNUT',1)      GOSUB TYPE.IS.PIE      DASHBOARD.TYPE='Pie'END CASE** STRIP OUT HTML STUFF AND CONVERT TO CSV*MAX.ROWS=DCOUNT(SPREADSHEET,CHAR(254))FOR ROW.NO = 1 TO MAX.ROWS   ROW=SPREADSHEET<ROW.NO>   *   * <br> to space   *   LOOP      POS=INDEX(ROW,'<br>',1)   UNTIL NOT(POS) DO      ROW=ROW[1,POS-1]:' ':(ROW[POS+4,9999])   REPEAT   *   * ISOLATE XXX IN ]<a hrev.....">XXX</a>]   *   LOOP      POS=INDEX(ROW,'</a>',1)   UNTIL NOT(POS) DO      VAL.NO=DCOUNT(ROW[1,POS],CHAR(253))      VAL=ROW<1,VAL.NO>      POS=INDEX(VAL,'</a>',1)      VAL=VAL[1,POS-1]      POS=INDEX(VAL,'">',1)      VAL=VAL[POS+2,999]      ROW<1,VAL.NO>=VAL   REPEAT   MAX.VALS=DCOUNT(ROW,CHAR(253))   FOR VAL.NO = 1 TO MAX.VALS      IF DASHBOARD.TYPE = 'Chart' AND VAL.NO > 1 THEN         VAL=ROW<1,VAL.NO>         IF NUM(VAL) AND NOT(INDEX(VAL,',',1)) THEN VAL=OCONV(VAL,'MD0,')         ROW<1,VAL.NO>=VAL       END      ROW<1,VAL.NO>='"':ROW<1,VAL.NO>:'"'    NEXT VAL.NO   SPREADSHEET<ROW.NO>=ROW NEXT ROW.NOCONVERT CHAR(253) TO ',' IN SPREADSHEETRETURN*TYPE.IS.TABLE:*SPREADSHEET<-1>=W$TABLE.COL.LABELSSPREADSHEET<-1>=W$TABLE.DATASPREADSHEET<-1>=W$TABLE.TOTALSRETURN*TYPE.IS.BAR.OR.COLUMN:*SPREADSHEET<-1>='Displayed as: ':W$BAR.YMEMOCOL.HEADINGS=W$BAR.LABELSCONVERT CHAR(254) TO CHAR(253) IN COL.HEADINGS;  * MULTI-SERIES MAY HAVE SEVERALIF COL.HEADINGS<1,2> = '' THEN;  * ONLY ONE THEN USE W$BAR.YMEMO   COL.HEADINGS=W$BAR.YMEMO ENDCOL.HEADINGS=INSERT(COL.HEADINGS,1,1,0,W$BAR.XMEMO)SPREADSHEET<-1>=COL.HEADINGSNUM.ROWS=DCOUNT(W$BAR.XLABELS,CHAR(253))NUM.COL.VALUES=DCOUNT(W$BAR.VALUES,CHAR(254))FOR ROW.NO = 1 TO NUM.ROWS   THIS.ROW=W$BAR.XLABELS<1,ROW.NO>   FOR COL.NO = 1 TO NUM.COL.VALUES      THIS.COL=W$BAR.VALUES<COL.NO,ROW.NO>      IF NUM(THIS.COL) THEN         IF THIS.COL > 999 THEN            THIS.COL=OCONV(THIS.COL,'MD0,')          END       END      THIS.ROW<1,COL.NO+1>=THIS.COL    NEXT COL.NO   SPREADSHEET<-1>=THIS.ROW NEXT ROW.NORETURN*TYPE.IS.PIE:*SPREADSHEET<-1>=W$PIE.LABELSSPREADSHEET<-1>=W$PIE.VALUESRETURNEND0009A5XML.DATA0c2CALL WDB.VARS(VARS, VALS)DISPLAY.TERM = 1WEB.DATA = ''LINE.CNT = 1NUM.BYTES = 0****************************************** q = number of bytes to quit early on* default is full dump****************************************LOCATE 'q' IN VARS SETTING POS THEN  q = VALS<POS>END ELSE  q = ''END****************************************** l = number of lines of text to print* default is 10000****************************************LOCATE 'l' IN VARS SETTING POS THEN  l = VALS<POS>END ELSE  l = 10000END****************************************** b = number of characters per line* default is 10****************************************LOCATE 'b' IN VARS SETTING POS THEN  b = VALS<POS>END ELSE  b = 10END****************************************** w = use web.load or print* if w is 0, then use WEB.LOAD* default is 0****************************************LOCATE 'w' IN VARS SETTING POS THEN  w = VALS<POS>END ELSE  w = 0END****************************************** p = number of seconds to pause before*     starting to send output* default is 0****************************************LOCATE 'p' IN VARS SETTING POS THEN  p = VALS<POS>END ELSE  p = 0END****************************************** s = which quit string to use* default = 800 WDB-COMPLETE****************************************LOCATE 's' IN VARS SETTING POS THEN  s = VALS<POS>END ELSE  s = '800 WDB-COMPLETE'END****************************************** MAIN PROGRAM****************************************IF w # 0 THEN  SLEEP pENDFOR X = 1 TO l  NUM.CHARS = LEN(LINE.CNT) + 1  LINE = ''  NUM.ZEROS = b - NUM.CHARS  FOR Y = 1 TO NUM.ZEROS    LINE := '0'    NUM.BYTES += 1  NEXT Y  LINE := LINE.CNT  NUM.BYTES += LEN(LINE.CNT) + 1 ; * this is for the line counter and the line break  GOSUB CHECK.EARLY.TERMINATE  IF w = 0 THEN    WEB.DATA<-1> = LINE    IF TERM.DATA # '' THEN      WEB.DATA<-1> = TERM.DATA    END  END ELSE    PRINT LINE    IF TERM.DATA # '' THEN      PRINT TERM.DATA    END  END  LINE.CNT += 1NEXT XIF w = 0 THEN  SLEEP p  CALL WEB.SEND(WEB.DATA)ENDSTOP*********************************************************************************CHECK.EARLY.TERMINATE:********************************************************************************TERM.DATA = ''IF q # '' AND NUM.BYTES >= q AND DISPLAY.TERM = 1 THEN  TERM.DATA = s:CHAR(10):CHAR(10)  DISPLAY.TERM = 0ENDRETURN*0001C9DESTROY.SESSION0c2SUBROUTINE DESTROY.SESSION** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program removes the session records**#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE* Init*EQU FALSE TO 0, TRUE TO 1*EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*CALL SET.COOKIE("sessionid=; path=/")*DELETE F.WEB.SESSION, SESSION$IDRETURN*0021C5RSS.MAINT0c2** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: March 10, 2009* Description: RSS Feed Maintenance*INCLUDE WBPD WWW.INCLUDEINCLUDE RSS.BP RSS.DATA.INC*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE STOP 201, 'RSS.FEEDS'OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD'ENDOPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'OPEN '','MVDB.THEMES' TO F.MVDB.THEMES ELSE STOP 201, 'MVDB.THEMES'*DIM SITE$SETTINGS(100)EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)EQU SITE$THEME        TO SITE$SETTINGS(8)EQU SITE$CHARSET      TO SITE$SETTINGS(9)*MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""READV THEME.CSS FROM F.MVDB.THEMES, SITE$THEME, 1 ELSE THEME.CSS = ''IF SITE$ALT.LOGO = '' THEN  SITE.LOGO = '/db/images/mv-logo.png'END ELSE  SITE.LOGO = SITE$ALT.LOGO  IF NOT(INDEX(SITE.LOGO,'/',1)) THEN    SITE.LOGO = '/db/images/':SITE.LOGO  ENDENDIF THEME.CSS # '' THEN THEME.CSS = '<link rel="Stylesheet" href="/db/themes/':THEME.CSS:'" media="screen" type="text/css" />'IF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*CALL GET.SESSION.VAR("adminauth",adminauth)CALL PUT.SESSION.VAR("dd_mode",0)adminpass = ""IF adminauth # 1 THEN  FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'  FORM := '</head><body><p>Administrative priviledges are required. '  FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'  CALL WEB.SEND(FORM)  STOPEND*LOCATE "action" IN CGI$VARS SETTING POS THEN  action = CGI$VALS<POS>END ELSE action = ""LOCATE "id" IN CGI$VARS SETTING POS THEN  id = CGI$VALS<POS>END ELSE id = ""LOCATE "cancel_edit" IN CGI$VARS SETTING POS THEN  action = "list"END*HTML = ''BEGIN CASE  CASE action = "edit" OR action = "add" AND 0 ;* This code is depricated    IF action = "edit" THEN      READ FEED.REC FROM F.RSS.FEEDS, id ELSE FEED.REC = ""    END ELSE FEED.REC = ""    FEED.NAME = FEED.REC<1>    FEED.DESC = FEED.REC<3>    CRLF = CHAR(13):CHAR(10)    CALL SWAP(FEED.DESC,'<br />',CRLF)    SEL.SUB = FEED.REC<4>    ITEM.SUB = FEED.REC<5>    READ INNER.TEMPLATE FROM F.WEB.FORMS, "rss_edit.html" ELSE INNER.TEMPLATE = "rss_edit.html missing"    IF action = "add" THEN      edit_id = '<input type="text" name="new_id" value="">'      id = "NEW"    END ELSE      edit_id = id    END    CALL SWAP(INNER.TEMPLATE,'<!-- feed_id -->',id)    CALL SWAP(INNER.TEMPLATE,'<!-- edit_feed_id -->',edit_id)    CALL SWAP(INNER.TEMPLATE,'<!-- feed_name -->',FEED.NAME)    CALL SWAP(INNER.TEMPLATE,'<!-- feed_desc -->',FEED.DESC)    CALL SWAP(INNER.TEMPLATE,'<!-- sel_sub -->',SEL.SUB)    CALL SWAP(INNER.TEMPLATE,'<!-- item_sub -->',ITEM.SUB)    *    SEL.SUB.MSG = '' ; ITEM.SUB.MSG = ''    IF SEL.SUB # "" THEN      READ TST FROM F.MD, SEL.SUB ELSE        SEL.SUB.MSG = 'Not Cataloged'      END    END    IF ITEM.SUB # "" THEN      READ TST FROM F.MD, ITEM.SUB ELSE        ITEM.SUB.MSG = 'Not Cataloged'      END    END    CALL SWAP(INNER.TEMPLATE,'<!-- sel_sub_msg -->',SEL.SUB.MSG)    CALL SWAP(INNER.TEMPLATE,'<!-- item_sub_msg -->',ITEM.SUB.MSG)    *    FEED.MODE.NAMES = FEED.REC<6>    FEED.MODE.PARAMS = FEED.REC<7>    FEED.MODES = ""    FOR N = 1 TO DCOUNT( FEED.MODE.NAMES<1>, @VM )      FEED.MODES<-1> = FEED.MODE.NAMES<1,N>:',':FEED.MODE.PARAMS<1,N>    NEXT N    CALL SWAP(FEED.MODES,@AM,CRLF)    CALL SWAP(INNER.TEMPLATE,'<!-- feed_modes -->',FEED.MODES)    HTML = INNER.TEMPLATE  CASE action = "delete" AND id # ""    DELETE F.RSS.FEEDS, id    GOSUB LOAD.FEEDS  CASE action = "save" AND id # ""    FEED.REC = ""    LOCATE "feed_name" IN CGI$VARS SETTING POS THEN      name = CGI$VALS<POS>    END ELSE name = ""    LOCATE "feed_desc" IN CGI$VARS SETTING POS THEN      desc = CGI$VALS<POS>    END ELSE desc = ""    CONVERT CHAR(13) TO "" IN desc    CALL SWAP(desc,CHAR(10),'<br />')    LOCATE "sel_sub" IN CGI$VARS SETTING POS THEN      sel_sub = CGI$VALS<POS>    END ELSE sel_sub = ""    LOCATE "item_sub" IN CGI$VARS SETTING POS THEN      item_sub = CGI$VALS<POS>    END ELSE item_sub = ""    FEED.REC<1> = name    FEED.REC<3> = desc    FEED.REC<4> = sel_sub    FEED.REC<5> = item_sub    LOCATE "feed_modes" IN CGI$VARS SETTING POS THEN      feed_modes = CGI$VALS<POS>    END ELSE feed.modes = ""    CONVERT CHAR(13) TO "" IN feed_modes    CONVERT CHAR(10) TO @AM IN feed_modes    FOR N = 1 TO DCOUNT( feed_modes, @AM )      IF TRIM( feed_modes<N> ) # "" THEN        FEED.REC<6,N> = TRIM( FIELD( feed_modes<N>, ',',  1 ) )        FEED.REC<7,N> = TRIM( FIELD( feed_modes<N>, ',',  2 ) )      END    NEXT N    IF id = "NEW" THEN      LOCATE "new_id" IN CGI$VARS SETTING POS THEN        id = CGI$VALS<POS>      END      IF id = "NEW" THEN id="NEW1"    END    IF id # "" THEN      WRITE FEED.REC ON F.RSS.FEEDS, id    END    GOSUB LOAD.FEEDS  CASE 1 ; * Action = list (default)    GOSUB LOAD.FEEDSEND CASE*READ ADMIN.TEMPLATE FROM F.WEB.FORMS, "rss_admin_template.html" ELSE ADMIN.TEMPLATE = "rss_admin_template.html not found."CALL SWAP(ADMIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)HEADER = '<div id="dashboard_nav">'HEADER := '<ol class="dashboard_list">'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=users">Users</a></li>'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets">Widgets</a></li>'HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=dashboards">Dashboards</a></li>'HEADER := '<li class="db_active"><a href="':CGI$PATH:'/RSS.MAINT">RSS Feed Maintenance</a></li>'OPEN 'MVPKG.DATA' TO F.MVPKG.DATA THEN  HEADER := '<li><a href="':CGI$PATH:'/MVPKG.MAIN">Package Manager</a></li>'ENDHEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN">Return to Dashboard</a></li>'HEADER := '</ol>'HEADER := '</div>'CALL SWAP(ADMIN.TEMPLATE,'<!-- HEADER -->',HEADER)FOOTER = ''CALL SWAP(ADMIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_MAIN -->',HTML)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_THEME -->',THEME.CSS)CALL WEB.SEND(ADMIN.TEMPLATE)STOP*LOAD.FEEDS: **HTML = '<table width="100%">'HTML<-1> = '<tr><td colspan="6"><a href="" class="add-feed">Add a Feed</a></td></tr>'HTML<-1> = '<tr><th>ID</th><th>Name</th><th>Feed URL</th><th>Sel SUB</th><th>Item SUB</th><th>Action</th></tr>'EXECUTE "SSELECT RSS.FEEDS BY NAME" CAPTURING JUNKLOOP  READNEXT FID ELSE EXIT  READ FEED.REC FROM F.RSS.FEEDS, FID ELSE CONTINUE  FEED.NAME = FEED.REC<1>  CALL RSS.XML.ENCODE(FEED.NAME,"")  FEED.URL = "http://":CGI$SERVER.NAME:CGI$PATH:'/RSS.MAIN?feed=':FID  FEED.URL = '<a target="_blank" href="':FEED.URL:'">':FEED.URL:'</a>'  FEED.DESC = FEED.REC<3>  SEL.SUB = FEED.REC<4>  ITEM.SUB = FEED.REC<5>  URL.SEL.SUB = SEL.SUB  URL.ITEM.SUB = ITEM.SUB  CALL SUB.URL.ENCODE(URL.SEL.SUB)  CALL SUB.URL.ENCODE(URL.ITEM.SUB)  ROW = '<tr><td>':FID:'</td><td>':FEED.NAME:'</td><td>':FEED.URL:'</td><td><a href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=':SEL.SUB:'" target="RSS.BP_':URL.SEL.SUB:'">':SEL.SUB:'</a></td><td><a href="/dbc/MVDB.WEB.ED?ed_file=RSS.BP&ed_item=':ITEM.SUB:'" target="RSS.BP_':URL.ITEM.SUB:'">':ITEM.SUB:'</a></td>'  ROW := \<td>\  IF FID = "FEEDS" THEN    ROW := '&nbsp;'  END ELSE    FEED.MODE.NAMES = FEED.REC<6>    FEED.MODE.PARAMS = FEED.REC<7>    FEED.MODES = ""    FOR N = 1 TO DCOUNT( FEED.MODE.NAMES<1>, @VM )      FEED.MODES<-1> = FEED.MODE.NAMES<1,N>:',':FEED.MODE.PARAMS<1,N>    NEXT N    CALL SWAP(FEED.MODES,@AM,'\n')    CALL SWAP(FEED.MODES,'"','\"')    CALL SWAP(FEED.NAME,'"','\"')    CALL SWAP(FEED.DESC,'"','\"')    CALL SWAP(SEL.SUB,'"','\"')    CALL SWAP(ITEM.SUB,'"','\"')    ROW := \<a href="javascript:editFeed('\:FID:\','\:FEED.NAME:\','\:FEED.DESC:\','\:SEL.SUB:\','RSS.BP_\:URL.SEL.SUB:\','\:ITEM.SUB:\','RSS.BP_\:URL.ITEM.SUB:\','\:FEED.MODES:\');"><img title="Edit Feed" class="icon" src="/db/icons/feed_edit.png" /></a> &nbsp;\    ROW := \<a onClick="return confirm('DELETE: Are you sure?');" href="/dbc/RSS.MAINT?action=delete&id=\:FID:\"><img title="Delete Feed" class="icon" src="/db/icons/feed_delete.png" /></a>\  END  ROW := '</td></tr>'  HTML<-1> = ROWREPEATHTML<-1> = '<tr><td colspan="6"><a href="" class="add-feed">Add a Feed</a></td></tr>'HTML<-1> = '</table>'RETURN0003F5VALIDATE.SESSION0c2SUBROUTINE VALIDATE.SESSION( FLAG )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo* Date Written : 11/7/2003* Description  : This program will validate the session.*             ****************************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)FLAG = FALSEIF SESSION$ID # "" THEN  READ REC FROM F.WEB.SESSION, SESSION$ID THEN    SESSION.DATE = REC<3>        SESSION.TIME = REC<4>    CURRENT.DATE = DATE()    CURRENT.TIME = TIME()    MAX.SECONDS = 86400; * Total number of seconds in a day    MAX.DIFF.AMOUNT = SESSION$TIME.OUT * 60 ; * Get the time in seconds    CURRENT.TIME = ((CURRENT.DATE - SESSION.DATE) * MAX.SECONDS) + CURRENT.TIME    DIFF.TIME = CURRENT.TIME - SESSION.TIME    IF DIFF.TIME <= MAX.DIFF.AMOUNT THEN      FLAG = TRUE    END  ENDEND*RETURN*0002B5WEB.FLUSH0c2SUBROUTINE WEB.FLUSH*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 11/06/03* Description  : This program sets the calls SET.BUFFER(FALSE) then *                calls WEB.SEND("") if the SESSION$OUTPUT variables*                length is greater then 0.*              ***********************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*CALL SET.BUFFER(FALSE)*IF LEN(SESSION$OUTBUF) > 0 THEN  CALL WEB.SEND("")*END*RETURN*0006C9SET.BUFFER0c2SUBROUTINE SET.BUFFER( B.VAL )*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 11/06/03* Updated by: Peter Schellenbach, Zumasys* Date Updated : 11/30/17* Description  : This program sets the SESSION$OUTBUF.FLAG and optionally*                SESSION$OUTBUF.SIZE variables to enable or disable*                buffering of output generated by WSEND. If buffering*                is enabled, be sure to call WFLUSH to flush the final*                buffer content.**                B.VAL = 0 : disable buffering*                B.VAL = 1 : enable buffering using current buffer size*                B.VAL > 1 : enable buffering and set buffer size to*                            this value.**                By default buffering is disabled. If buffering will be*                used, call WSETBUFFER before the first call to WSEND.*                If the size of buffer content ever exceeds the buffer*                size, the buffer is flushed to the client along with*                any headers, and buffering is disabled.*              **********************************************************************INCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1*IF NUM(B.VAL) AND B.VAL > 0 AND B.VAL <= 1000000 THEN  * Set buffer size and enable buffering  SESSION$OUTBUF.SIZE = B.VAL  SESSION$OUTBUF.FLAG = TRUEEND ELSE  * Enable or disable buffering  IF B.VAL # TRUE AND B.VAL # FALSE THEN    IF B.VAL = "" THEN      B.VAL = FALSE    END ELSE      B.VAL = TRUE    END  END  SESSION$OUTBUF.FLAG = B.VALENDRETURNEND000296SET.CONTENT.TYPE0c2SUBROUTINE SET.CONTENT.TYPE( C.TYPE )*********************************************************************** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written By   : Michael Schmidt, Sierra Bravo Corporation* Date Written : 10/25/03* Description  : This program sets the SESSION$CONTENT.TYPE variable.*              ***********************************************************************#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*IF C.TYPE = "" THEN  C.TYPE = "text/html"END*SESSION$CONTENT.TYPE = C.TYPE*RETURN*000DFEINIT.WWW0c2*********************************************************************** Copyright (C) 2004 Sierra Bravo Corporation, All Rights Reserved** This software is the property of Sierra Bravo Corporation and may* not be duplicated or modified without the express written permission* of Sierra Bravo Corporation.** Written By   : Michael Derheim, Sierra Bravo Corporation* Description  : Initialize the standard WWW includes. Parse cookies, etc.** Modified By: Mike Street, Zumasys for UniData compatibility* Date: 07/22/2015* Description: Changed PROCREAD to use @SENTENCE in the ELSE clause**********************************************************************************************************************************************                                                                    *  * 10-25-16 Peter Schellenbach                                        **                                                                    *  ***       THIS PROGRAM IS OBSOLETE AND IS NO LONGER USED! ***        **                                                                    *  **********************************************************************************************************************************************#MAKE# RL $OPTIONS D3*INCLUDE WBPD WWW.INCLUDE*OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, 'WEB.SESSION'*MAT WWW.INFO = ""**MS 07-22-15*PROCREAD TCL.LINE ELSE TCL.LINE = ''PROCREAD TCL.LINE ELSE TCL.LINE = @SENTENCE ; *MS 07-22-15**CGI$UNIQUE.ID = FIELD( TCL.LINE, ' ', 2)** Populate the vars and vals*CALL WDB.VARS(VARS,VALS)CGI$VARS = VARSCGI$VALS = VALS*LOCATE "APPSVR_ID" IN CGI$VARS SETTING POS THEN  CGI$APPSVR.ID = CGI$VALS<POS>  CGI$VARS = DELETE( CGI$VARS, POS, 0, 0 )  CGI$VALS = DELETE( CGI$VALS, POS, 0, 0 )END ELSE  CGI$APPSVR.ID = ""END** How many active users are online?*SELECT F.WEB.SESSIONUSER.COUNT = 0LOOP  READNEXT WSID ELSE EXIT  READ SREC FROM F.WEB.SESSION, WSID ELSE CONTINUE  LOCATE "userid" IN SREC<1> SETTING UPOS THEN USER.COUNT += 1REPEATPRINT "Client-Count: ":USER.COUNT** Load the Cookie variables and valuiesLOCATE 'HTTP_COOKIE' IN VARS SETTING POS THEN  CSTRING = VALS<POS>END ELSE CSTRING = ''*CONVERT ';' TO @AM IN CSTRINGNUM.COOKIES = DCOUNT(CSTRING, @AM)FOR Y = 1 TO NUM.COOKIES  CGI$CVARS<Y> = TRIM(FIELD(CSTRING<Y>,'=',1))  CGI$CVALS<Y> = CSTRING<Y>[(1+INDEX(CSTRING<Y>,'=',1)),99999]NEXT Y* Load the session ID if there is oneCALL GET.SESSION.ID( SESSION$ID, VARS, VALS )IF (SESSION$ID = '') THEN  CALL CREATE.SESSION(SESSION$ID)  CALL SET.COOKIE("sessionid=":SESSION$ID)ENDSESSION$GLOBAL.DEBUG = 0SESSION$DEBUG.TEXT = ''* Clear the out buffer and set some generic varsSESSION$CONTENT.SENT = 0OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, "WEB.SESSION"OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS'*LOCATE "HTTP_HOST" IN CGI$VARS SETTING POS THEN  CGI$SERVER.NAME = CGI$VALS<POS>END ELSE CGI$SERVER.NAME = ""LOCATE "SERVER_PORT" IN CGI$VARS SETTING POS THEN  CGI$SERVER.PORT = CGI$VALS<POS>END ELSE CGI$SERVER.PORT = ""IF CGI$SERVER.PORT = "" OR CGI$SERVER.PORT = "0" THEN  OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL THEN    READV TCP.PORT FROM F.MVDB.CONTROL, 'MVDB.SETTINGS', 4 ELSE TCP.PORT = ""  END  CGI$SERVER.PORT = TCP.PORTENDIF CGI$SERVER.PORT # "" THEN CGI$SERVER.NAME := ":":CGI$SERVER.PORTLOCATE "SIMPLEWEB_HANDLER" IN CGI$VARS SETTING POS THEN  CGI$PATH = CGI$VALS<POS>  IF CGI$PATH[1,1] # "/" THEN CGI$PATH = "/":CGI$PATHEND ELSE CGI$PATH = "/dbc"STOP*END005BABMV.DEBUG0c2* WDEBUG** Debug REST Services* Copyright (c) 2017 Zumasys Inc.* Rewritten by Peter Schellenbach, 10/18/2017** Based on original version:*  Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved*  Written by: Luke Bucklin, Sierra Bravo*  Date: Sometime, 2006-ish*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD FI.WDB.DEBUG*CLR.SCR = @(-1)CLR.EOS = @(-3)MAX.LINES = SYSTEM(3) - 4MAX.COLS = SYSTEM(2) - 1IF MAX.LINES <= 0 OR CLR.SCR = '' OR CLR.EOS = '' THEN  MAX.LINES = 20  CLR.SCR = ''  CLR.EOS = ''  PRMPT.LINE = CHAR(13):CHAR(10)END ELSE  PRMPT.LINE = @(0, MAX.LINES + 2):CLR.EOSENDPROMPT ''*PRINT CLR.SCR:PRINTPRINT 'WDEBUG Web Request Degug Tool'PRINTPRINT 'The WDEBUG tool allows you to inspect, modify and re-run web requests.'PRINT 'Whenever a request for a debuggable resource is processed by WDB.INIT,'PRINT 'a debug record for the request is added to the WDB.DEBUG file. WDEBUG'PRINT 'allows you to select a debug record, view the request details, edit the'PRINT 'request variables, re-run the request and view the response.'PRINTPRINT 'To debug web requests for a resource, set attribute 7 of the WDB.RESOURCE'PRINT 'record for the resource to 1, then issue the web request from the client'PRINT 'browser or other agent. WDEBUG will show a list of recent web requests to'PRINT 'select from.'PRINTPRINT 'Start WDEBUG with an active select list if you need to use special criteria'PRINT 'to select the record(s) you need to debug.'PRINTPRINT 'Press <enter> to continue':INPUT ANS*OPEN 'WDB.DEBUG' TO F.WDB.DEBUG ELSE  PRINT 'The WDB.DEBUG data file is required to use WDEBUG. Default installations'  PRINT 'only create the dictionary for this file. Please create the data section'  PRINT 'to use WDEBUG: CREATE-FILE DATA WDB.DEBUG 101.'  STOPEND*SESSION.FLAG = 0OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SESSION.FLAG = 1 ;* can restore session when running debug reqest*EDITOR = ''IDS = ''NUM.IDS = 0IF SYSTEM(11) THEN  LOOP    READNEXT ID ELSE EXIT    READV X FROM F.WDB.DEBUG, ID, 1 THEN      IDS<-1> = ID      NUM.IDS += 1    END ELSE      PRINT ID:' not found in WDB.DEBUG!'    END  REPEATENDUSE.SUPPLIED.LIST = (NUM.IDS > 0)*LOOP  IF NOT(USE.SUPPLIED.LIST) THEN* Select available WDB.DEBUG items    CMND = 'SSELECT WDB.DEBUG WITH TYPE = "C" "R" BY-DSND DATE BY-DSND TIME'    EXECUTE CMND CAPTURING RESULT    IF SYSTEM(11) = 0 THEN      PRINT "No items found."      STOP    END    IDS = ''    NUM.IDS = 0    LOOP      READNEXT ID ELSE EXIT      IDS<-1> = ID      NUM.IDS += 1    REPEAT  END*  TOP = 0  LOOP* Display page of items    PRINT CLR.SCR:    PRINT "Ln Date. Time.... Path................ Remote Address...... Request ID........."    FOR CNTR = 1 TO MAX.LINES UNTIL CNTR + TOP > NUM.IDS      DBG.ID = IDS<CNTR>      READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE CONTINUE      PATH.INFO = DBGREC<WDBG_PATH>      IF PATH.INFO = '' THEN PATH.INFO = DBGREC<WDBG_HANDLER>:'/':DBGREC<WDBG_RESOURCE>      PRINT CNTR "R#2 ":      PRINT OCONV(DBGREC<WDBG_DATE>, 'D0-') "L#5 ":      PRINT OCONV(DBGREC<WDBG_TIME>, 'MTS') "L#8 ":      PRINT PATH.INFO "L#20 ":      PRINT DBGREC<WDBG_REMOTE_ADDR> "L#20 ":      PRINT DBGREC<WDBG_REQUEST_ID>[1,20]    NEXT CNTR    IF TOP + MAX.LINES > NUM.IDS THEN BOT = NUM.IDS ELSE BOT = TOP + MAX.LINES    PRINT "Showing items ":(TOP + 1):"-":BOT:" of ":NUM.IDS*    LOOP      PRINT PRMPT.LINE:"Command: (Q)uit (R)efresh (C)lear (N)ext (P)rev (##) Line to debug: ":      INPUT COMMAND      IF COMMAND MATCHES '1N0N' THEN        IF COMMAND >= 1 AND COMMAND <= MAX.LINES AND COMMAND + TOP <= NUM.IDS THEN          DBG.ID = IDS<COMMAND + TOP>          GOSUB debug.request        END        COMMAND = ''      END ELSE        COMMAND = OCONV(COMMAND[1,1], 'MCU')        IF COMMAND = '' THEN COMMAND = 'N'        IF INDEX('ERCNPQ', COMMAND, 1) = 0 THEN COMMAND = ''      END    WHILE COMMAND = '' DO REPEAT*    BEGIN CASE      CASE COMMAND = 'N'        IF TOP + MAX.LINES < NUM.IDS THEN TOP += MAX.LINES      CASE COMMAND = 'P'        IF TOP - MAX.LINES >= 0 THEN TOP -= MAX.LINES    END CASE  WHILE COMMAND = 'N' OR COMMAND = 'P' DO REPEAT*UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'R' ; NULL    CASE COMMAND = 'C'      EXECUTE 'SELECT WDB.DEBUG WITH TYPE = "C" "R"'      PRINT 'Are you sure you want to clear these items from the WDB.DEBUG file? ':      INPUT ANS      ANS = OCONV(ANS[1,1],'MCU')      IF ANS = 'Y' THEN        IF SYSTEM(11) THEN          LOOP            READNEXT ID ELSE EXIT            DELETE F.WDB.DEBUG, ID          REPEAT        END      END ELSE        CLEARSELECT      END  END CASEREPEATSTOP**----------debug.request:*----------*READ DBGREC FROM F.WDB.DEBUG, DBG.ID ELSE  PRINT "The selected item '":DBG.ID:"' is not available!"  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDEDIT.ID = 'D':DBG.ID[2, LEN(DBG.ID)]LOOP  PRINT PRMPT.LINE:"Debugging ":DBG.ID[1,28]:" - command: (Q)uit (V)iew (E)dit (R)un: ":  INPUT COMMAND  COMMAND = OCONV(COMMAND[1,1], 'MCU')UNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'V'      GOSUB view.request    CASE COMMAND = 'E'      GOSUB edit.request    CASE COMMAND = 'R'      GOSUB run.request  END CASEREPEATRETURN**----------view.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNENDGOSUB to.editNUM.LNS = DCOUNT(EDIT.REC, @AM)I = 1LOOP WHILE I <= NUM.LNS DO  X = EDIT.REC<I>  IF LEN(X) > MAX.COLS THEN    *UD* X = FOLD(X, MAX.COLS)    FOLD.STRING = X; GOSUB fold.string; X = FOLD.STRING ; *UD*    EDIT.REC<I> = X    N = COUNT(X, @AM)    NUM.LNS += N    I += N  END  I += 1REPEATIF NUM.LNS = 0 THEN NUM.LNS = 1NUM.PGS = INT((NUM.LNS - 1) / MAX.LINES) + 1CUR.PG = 1LOOP  PG.TOP = (CUR.PG - 1) * MAX.LINES  IF PG.TOP + MAX.LINES > NUM.LNS THEN LPP = NUM.LNS - PG.TOP ELSE LPP = MAX.LINES  PRINT CLR.SCR:  PRINT 'Page ':CUR.PG:' of ':NUM.PGS:SPACE(10):DBG.ID  PRINT  FOR I = 1 TO LPP    PRINT EDIT.REC<I + PG.TOP>  NEXT I  PRINT PRMPT.LINE:'Command: (Q)uit (N)ext (P)rev (##) Goto page ':  INPUT COMMAND  IF COMMAND MATCHES '1N0N' THEN    IF COMMAND >= 1 AND COMMAND <= NUM.PGS THEN CUR.PG = COMMAND  END ELSE    COMMAND = OCONV(COMMAND[1,1], 'MCU')  ENDUNTIL COMMAND = 'Q' DO  BEGIN CASE    CASE COMMAND = 'N' OR COMMAND = ''      IF CUR.PG < NUM.PGS THEN CUR.PG = CUR.PG + 1    CASE COMMAND = 'P'      IF CUR.PG > 1 THEN CUR.PG = CUR.PG - 1  END CASEREPEATRETURN**----------edit.request:*----------*IF EDITOR = '' THEN GOSUB choose.editorIF EDITOR <> '' THEN  EDIT.ID = 'D':DBG.ID  GOSUB to.edit  WRITE EDIT.REC ON F.WDB.DEBUG, EDIT.ID  CMND = EDITOR:' WDB.DEBUG ':EDIT.ID  EXECUTE CMND  READ EDIT.REC FROM F.WDB.DEBUG, EDIT.ID ELSE NULL  DELETE F.WDB.DEBUG, EDIT.ID  GOSUB from.editENDRETURN**----------run.request:*----------*IF DBGREC = '' THEN  PRINT 'No debug info is available for this request!'  PRINT  PRINT 'Press <enter> to continue':  INPUT ANS  RETURNEND*HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* Reconstruct query stringQSTR = ''QSEP = ''* headers and server variablesN = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_HEADER_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* form variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_CGI_VARS, I>  URLENCODE.STRING = DBGREC<WDBG_CGI_VALS, I>  GOSUB url.encode  QSTR := QSEP:HDR.VAR:'=':NEW.STRING  QSEP = '&'NEXT I* bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  URLENCODE.STRING = CHANGE(THE.BODY, @VM, CHAR(10))  GOSUB url.encode  QSTR := QSEP:'__body__=':NEW.STRINGEND* restore session stateIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    SESSION.REC = ''    SESSION.REC<1> = DBGREC<WDBG_SESSION_VARS>    SESSION.REC<2> = DBGREC<WDBG_SESSION_VALS>    SESSION.REC<3> = DBGREC<WDBG_SESSION_DATE>    SESSION.REC<4> = DBGREC<WDBG_SESSION_TIME>    WRITE SESSION.REC ON F.WEB.SESSION, SESSION.ID  ENDEND* break the query string into 1000 byte chunksN = INT((LEN(QSTR) - 1) / 1000) + 1* build the command lineRUN.ID = DBGREC<WDBG_REQUEST_ID>CMND = 'WDB.INIT ':HANDLER.NAME:'/':RESOURCE.NAME:' ':RUN.ID:'-1-':N:' %% _WDEBUG_MODE_'** run the commandPRINTPRINT 'Executing the request: ':CMNDPRINTMAT WWW.INFO = ""EXECSTART = SYSTEM(12)* send query string as stacked inputFOR I = 1 TO N  DATA QSTR[((I - 1) * 1000) + 1, 1000]NEXT IEXECUTE CMND CAPTURING RESPONSEEXECDUR = SYSTEM(12) - EXECSTARTPRINT 'Request complete. Press <enter> to parse results':INPUT ANS** update the request runtimeDBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_DURATION> = EXECDUR* process the responseLINT.BEFORE = ''LINT.AFTER = ''WARN = ''ERR = ''* Gather lint from before the start tag and after the complete tagDBGREC<WDBG_WARNING> = '' ;* WarningsDBGREC<WDBG_ERROR> = '' ;* ErrorsDBGREC<WDBG_LINT> = '' ;* LintIF RESPONSE<1> = "700 WDB-START" THEN  RESPONSE = DELETE(RESPONSE, 1)END ELSE  TAG = @AM:"700 WDB-START":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '700 WDB-START tag is missing from response'    LINT.BEFORE = RESPONSE    RESPONSE = ''  END ELSE    IF TAG.POS >= 1 THEN      LINT.BEFORE = RESPONSE[1, TAG.POS - 1]      RESPONSE = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    END  ENDENDN = DCOUNT(RESPONSE, @AM)IF RESPONSE<N> = "800 WDB-COMPLETE" THEN  RESPONSE = DELETE(RESPONSE, N)END ELSE  TAG = @AM:"800 WDB-COMPLETE":@AM  TAG.POS = INDEX(RESPONSE, TAG, 1)  IF TAG.POS = 0 THEN    WARN = '800 WDB-COMPLETE tag missing from response!'  END ELSE    LINT.AFTER = RESPONSE[TAG.POS + LEN(TAG), LEN(RESPONSE)]    RESPONSE = RESPONSE[1, TAG.POS - 1]  ENDEND* Clean up lintIF TRIM(CHANGE(LINT.BEFORE, @AM, '')) = '' THEN LINT.BEFORE = ''IF TRIM(CHANGE(LINT.AFTER, @AM, '')) = '' THEN LINT.AFTER = ''IF LINT.BEFORE <> '' OR LINT.AFTER <> '' THEN  LINT = LINT.BEFORE  IF LINT.BEFORE <> '' AND LINT.AFTER <> '' THEN LINT := @AM:'...':@AM  LINT := LINT.AFTER  DBGREC<WDBG_LINT> = LOWER(LINT)END* Parse the response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''DBGREC<WDBG_RESPONSE_CONTENT> = ''NUM.VARS = 0STATUS.CODE = ''EOH = INDEX(RESPONSE, @AM:@AM, 1) ;* headers end at first blank line in responseIF EOH = 0 THEN EOH = LEN(RESPONSE) + 1N = DCOUNT(RESPONSE[1, EOH - 1], @AM)FOR I = 1 TO N  HDR.LINE = RESPONSE<I>  IF HDR.LINE[1,10] = '500 ERROR ' THEN    ERR = HDR.LINE[11, LEN(HDR.LINE)]    IF STATUS.CODE = '' THEN STATUS.CODE = 500  END ELSE    HDR.VAR = FIELD(HDR.LINE, ':', 1)    HDR.VAL = TRIMF(HDR.LINE[COL2() + 1, LEN(HDR.LINE)])    M = LEN(HDR.VAR)    FOR J = 1 TO M      IF NOT(HDR.VAR[J,1] MATCHES '1A') AND HDR.VAR[J,1] <> '-' THEN        HDR.VAR = ''        EXIT      END    NEXT J    IF HDR.LINE[LEN(HDR.VAR) + 1, 1] <> ':' THEN HDR.VAR = ''    IF HDR.VAR = '' THEN      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = '_BAD_'      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.LINE ;* invalid header line!    END ELSE      IF HDR.VAR = 'X-MVDB-STATUS' THEN        STATUS.CODE = HDR.VAL      END ELSE        NUM.VARS += 1        DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = HDR.VAR        DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.VAL      END    END  ENDNEXT IIF STATUS.CODE = '' THEN STATUS.CODE = 200DBGREC<WDBG_STATUS> = STATUS.CODE* save response contentIF EOH + 2 <= LEN(RESPONSE) THEN  DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(RESPONSE[EOH + 2, LEN(RESPONSE)])ENDDBGREC<WDBG_WARNING> = WARNDBGREC<WDBG_ERROR> = ERRRETURN**----------to.edit:*----------*EDIT.REC = ''EDIT.REC<-1> = '[INFO] (do not edit this section)'EDIT.REC<-1> = 'Date            = ':OCONV(DBGREC<WDBG_DATE>,'D4')EDIT.REC<-1> = 'Time            = ':OCONV(DBGREC<WDBG_TIME>,'MTS')EDIT.REC<-1> = 'Duration        = ':DBGREC<WDBG_DURATION>EDIT.REC<-1> = 'Port            = ':DBGREC<WDBG_PORT>EDIT.REC<-1> = 'Handler         = ':DBGREC<WDBG_HANDLER>EDIT.REC<-1> = 'Resource        = ':DBGREC<WDBG_RESOURCE>EDIT.REC<-1> = 'Controller      = ':DBGREC<WDBG_CONTROLLER>EDIT.REC<-1> = 'Program         = ':DBGREC<WDBG_PROGRAM>EDIT.REC<-1> = 'RequestID       = ':DBGREC<WDBG_REQUEST_ID>EDIT.REC<-1> = 'Method          = ':DBGREC<WDBG_METHOD>EDIT.REC<-1> = 'Path            = ':DBGREC<WDBG_PATH>EDIT.REC<-1> = 'RemoteAddr      = ':DBGREC<WDBG_REMOTE_ADDR>EDIT.REC<-1> = 'Status          = ':DBGREC<WDBG_STATUS>IF DBGREC<WDBG_WARNING> <> '' THEN  EDIT.REC<-1> = 'WARNING: ':DBGREC<WDBG_WARNING>ENDIF DBGREC<WDBG_ERROR> <> '' THEN  EDIT.REC<-1> = 'ERROR: ':DBGREC<WDBG_ERROR>ENDIF DBGREC<WDBG_LINT> <> '' THEN  EDIT.REC<-1> = 'LINT:':@AM:RAISE(DBGREC<WDBG_LINT>)END* Request headers and server variablesEDIT.REC<-1> = @AM:'[HEADERS]'N = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM)FOR I = 1 TO N  HDR.VAR = DBGREC<WDBG_HEADER_VARS, I>  HDR.VAL = DBGREC<WDBG_HEADER_VALS, I>  EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VALNEXT I* Query string variablesN = DCOUNT(DBGREC<WDBG_CGI_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[VARS]'  FOR I = 1 TO N    CGI.VAR = DBGREC<WDBG_CGI_VARS, I>    CGI.VAL = DBGREC<WDBG_CGI_VALS, I>    EDIT.REC<-1> = CGI.VAR:SPACE(16-LEN(CGI.VAR)):'= ':CGI.VAL  NEXT IEND* CookiesLOCATE 'HTTP_COOKIE' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  CSTRING = DBGREC<WDBG_HEADER_VALS, POS>END ELSE CSTRING = ''CONVERT ';' TO @AM IN CSTRINGN = DCOUNT(CSTRING, @AM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[COOKIES]'  FOR I = 1 TO N    COOKIE.VAR = TRIM(FIELD(CSTRING<I>, '=', 1))    COOKIE.VAL = CSTRING<I>[COL2() + 1, 99999]    EDIT.REC<-1> = COOKIE.VAR:SPACE(16-LEN(COOKIE.VAR)):'= ':COOKIE.VAL  NEXT IEND* REST parametersLOCATE 'PATH_INFO' IN DBGREC<WDBG_HEADER_VARS> SETTING POS THEN  PATH = DBGREC<WDBG_HEADER_VALS, POS>END ELSE PATH = ''IF PATH[1,1] = '/' THEN PATH = PATH[2,9999]N = DCOUNT(PATH, '/')IF N > 0 THEN  EDIT.REC<-1> = @AM:'[PARAMS]'  FOR I = 3 TO N    PARAM.VAR = 'Param[':(I-2):']'    EDIT.REC<-1> = PARAM.VAR:SPACE(16-LEN(PARAM.VAR)):'= ':FIELD(PATH, '/', I)  NEXT IEND* Session variablesIF SESSION.FLAG THEN  SESSION.ID = DBGREC<WDBG_SESSION_ID>  IF SESSION.ID <> '' THEN    N = DCOUNT(DBGREC<WDBG_SESSION_VARS>, @VM)    IF N > 0 THEN      EDIT.REC<-1> = @AM:'[SESSION]'      EDIT.REC<-1> = '_SessionID      = ':SESSION.ID      IF DBGREC<WDBG_SESSION_DATE> <> '' THEN EDIT.REC<-1> = '_Date           = ':OCONV(DBGREC<20>, 'D4')      IF DBGREC<WDBG_SESSION_TIME> <> '' THEN EDIT.REC<-1> = '_Time           = ':OCONV(DBGREC<21>, 'MTS')      FOR I = 1 TO N        SESSION.VAR = DBGREC<WDBG_SESSION_VARS, I>        EDIT.REC<-1> = SESSION.VAR:SPACE(16-LEN(SESSION.VAR)):'= ':DBGREC<WDBG_SESSION_VALS, I>      NEXT I    END  ENDEND* Request bodyTHE.BODY = DBGREC<WDBG_BODY>IF THE.BODY <> '' THEN  EDIT.REC<-1> = @AM:'[BODY]':@AM:RAISE(THE.BODY)END* Response headersN = DCOUNT(DBGREC<WDBG_RESPONSE_VARS>, @VM)IF N > 0 THEN  EDIT.REC<-1> = @AM:'[RESPONSE_HEADERS]'  FOR I = 1 TO N    HDR.VAR = DBGREC<WDBG_RESPONSE_VARS, I>    HDR.VAL = DBGREC<WDBG_RESPONSE_VALS, I>    EDIT.REC<-1> = HDR.VAR:SPACE(16-LEN(HDR.VAR)):'= ':HDR.VAL  NEXT IEND* Response contentTHE.CONTENT = DBGREC<WDBG_RESPONSE_CONTENT>IF THE.CONTENT <> '' THEN  EDIT.REC<-1> = @AM:'[RESPONSE_CONTENT]':@AM:RAISE(THE.CONTENT)END*RETURN**----------from.edit:*----------*SESSION.ID = ''HANDLER.NAME = DBGREC<WDBG_HANDLER>RESOURCE.NAME = DBGREC<WDBG_RESOURCE>* If COOKIES section exists, rebuild HTTP_COOKIE headerCOOKIES = ''SECT = 'COOKIES'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    COOKIE = EDIT.REC<I>    IF COOKIE <> '' THEN      COOKIE.NAME = TRIM(FIELD(COOKIE, '=', 1))      COOKIE.VAL = TRIMF(COOKIE[COL2() + 1, LEN(COOKIE)])      COOKIES := COOKIE.NAME:'=':COOKIE.VAL:';'      IF OCONV(COOKIE.NAME, 'MCU') = 'SESSIONID' THEN SESSION.ID = COOKIE.VAL    END  NEXT I  IF COOKIES[LEN(COOKIES), 1] = ';' THEN COOKIES = COOKIES[1, LEN(COOKIES) - 1]END* If PARAMS section exists, rebuild PATH_INFO headerPARAMS = ''SECT = 'PARAMS'GOSUB find.sectionIF SECT.START > 0 THEN  PNUM = 1  FOR I = SECT.START + 1 TO SECT.END    PARAM = EDIT.REC<I>    IF PARAM <> '' THEN      PARAM.NAME = TRIM(OCONV(FIELD(PARAM, '=', 1), 'MCU'))      PARAM.VAL = TRIMF(PARAM[COL2() + 1, LEN(PARAM)])      IF PARAM.NAME <> 'PARAM[':PNUM:']' THEN EXIT      PARAMS := '/':PARAM.VAL      PNUM += 1    END  NEXT I  IF PARAMS <> '' THEN PARAMS = '/':HANDLER.NAME:'/':RESOURCE.NAME:PARAMS ;* handler & resource come before paramsEND* Get headers and server variablesDBGREC<WDBG_HEADER_VARS> = ''DBGREC<WDBG_HEADER_VALS> = ''NUM.VARS = 0SECT = 'HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])* check for special headers      BEGIN CASE        CASE OCONV(VAR.NAME, 'MCU') = 'HTTP_COOKIE'          IF COOKIES <> '' THEN            VAR.VAL = COOKIES          END        CASE OCONV(VAR.NAME, 'MCU') = 'PATH_INFO'          IF PARAMS <> '' THEN            VAR.VAL = PARAMS          END          IF VAR.VAL[1,1] <> '/' THEN VAR.VAL = '/' : VAR.VAL          IF COUNT(VAR.VAL, '/') >= 2 THEN            HANDLER.NAME = FIELD(VAR.VAL, '/', 2)            RESOURCE.NAME = FIELD(VAR.VAL, '/', 3)          END          DBGREC<WDBG_PATH> = VAR.VAL        CASE OCONV(VAR.NAME, 'MCU') = 'REQUEST_METHOD'          DBGREC<WDBG_METHOD> = VAR.VAL              CASE OCONV(VAR.NAME, 'MCU') = 'REMOTE_ADDR'          DBGREC<WDBG_REMOTE_ADDR> = VAR.VAL      END CASE      NUM.VARS += 1      DBGREC<WDBG_HEADER_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_HEADER_VALS, NUM.VARS> = VAR.VAL    END  NEXT I  DBGREC<WDBG_HANDLER> = HANDLER.NAME  DBGREC<WDBG_RESOURCE> = RESOURCE.NAMEEND* Get form variablesDBGREC<WDBG_CGI_VARS> = ''DBGREC<WDBG_CGI_VALS> = ''NUM.VARS = 0SECT = 'VARS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_CGI_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_CGI_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get bodyDBGREC<WDBG_BODY> = ''SECT = 'BODY'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.BODY = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_BODY> = LOWER(THE.BODY)  ENDEND* Get session stateIF SESSION.FLAG AND SESSION.ID <> '' THEN  DBGREC<WDBG_SESSION_ID> = ''  DBGREC<WDBG_SESSION_VARS> = ''  DBGREC<WDBG_SESSION_VALS> = ''  DBGREC<WDBG_SESSION_DATE> = ''  DBGREC<WDBG_SESSION_TIME> = ''  NUM.VARS = 0  SECT = 'SESSION'  GOSUB find.section  IF SECT.START > 0 THEN    FOR I = SECT.START + 1 TO SECT.END      SESSION.LINE = EDIT.REC<I>      SESSION.VAR = TRIM(FIELD(SESSION.LINE, '=', 1))      SESSION.VAL = TRIMF(SESSION.LINE[COL2() + 1, LEN(SESSION.LINE)])      BEGIN CASE        CASE SESSION.VAR = '_SessionID'          DBGREC<WDBG_SESSION_ID> = SESSION.VAL        CASE SESSION.VAR = '_Date'          DBGREC<WDBG_SESSION_DATE> = ICONV(SESSION.VAL, 'D')        CASE SESSION.VAR = '_Time'          DBGREC<WDBG_SESSION_TIME> = ICONV(SESSION.VAL, 'MTS')        CASE 1          NUM.VARS += 1          DBGREC<WDBG_SESSION_VARS, NUM.VARS> = SESSION.VAR          DBGREC<WDBG_SESSION_VALS, NUM.VARS> = SESSION.VAL      END CASE    NEXT I  ENDEND* Get response headersDBGREC<WDBG_RESPONSE_VARS> = ''DBGREC<WDBG_RESPONSE_VALS> = ''NUM.VARS = 0SECT = 'RESPONSE_HEADERS'GOSUB find.sectionIF SECT.START > 0 THEN  FOR I = SECT.START + 1 TO SECT.END    VAR.LINE = EDIT.REC<I>    IF VAR.LINE <> '' THEN      VAR.NAME = TRIM(FIELD(VAR.LINE, '=', 1))      VAR.VAL = TRIMF(VAR.LINE[COL2() + 1, LEN(VAR.LINE)])      NUM.VARS += 1      DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = VAR.NAME      DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = VAR.VAL    END  NEXT IEND* Get response contentDBGREC<WDBG_RESPONSE_CONTENT> = ''SECT = 'RESPONSE_CONTENT'GOSUB find.sectionIF SECT.START > 0 THEN  I = INDEX(EDIT.REC, @AM, SECT.START)  IF I > 0 THEN    I += 1    J = INDEX(EDIT.REC, @AM, SECT.END)    IF J = 0 THEN J = LEN(EDIT.REC) + 1 ELSE J -= 1    IF EDIT.REC[J - 1, 1] = @AM AND J > 1 THEN J -= 1    THE.CONTENT = EDIT.REC[I, J - I + 1]    DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(THE.CONTENT)  ENDENDRETURN**----------choose.editor:*----------*PRINTLOOP  PRINT 'Select the editor you want to use: 1 = AE, 2 = ED, 3 = other: ':  INPUT ANSUNTIL ANS EQ '' DO  BEGIN CASE    CASE ANS = 1      EDITOR = 'AE'      EXIT    CASE ANS = 2      EDITOR = 'ED'      EXIT    CASE ANS = 3      PRINT 'Enter the verb to invoke your editor: ':      INPUT TMP      PRINT TMP:' OK?':      INPUT ANS      ANS = OCONV(ANS[1,1], 'MCU')      IF ANS = 'Y' THEN        EDITOR = TMP        EXIT      END  END CASEREPEATRETURN**----------find.section:*----------*SECT.START = -1SECT.END = -1TAG = @AM:'[':SECT:']':@AMTAG.POS = INDEX(EDIT.REC, TAG, 1)IF TAG.POS = 0 THEN RETURN ;* Section not foundSECT.START = DCOUNT(EDIT.REC[1, TAG.POS], @AM)SECT.END = DCOUNT(EDIT.REC, @AM)FOR I = SECT.START + 1 TO SECT.END  SECT.LN = EDIT.REC<I>  IF SECT.LN MATCHES '"["1A0A"]"' OR SECT.LN MATCHES '"["1A0A"_"1A0A"]"' THEN* beginning of next section is end of current section    SECT.END = I - 1    EXIT  ENDNEXT IRETURN**----------url.encode:*----------*NEW.STRING = ""UE.LEN = LEN(URLENCODE.STRING)FOR UEX = 1 TO UE.LEN  UE.CHR = URLENCODE.STRING[UEX,1]  UE.CVAL = SEQ(UE.CHR)  BEGIN CASE    CASE UE.CVAL < 32; ENC.FLAG = 1   ;* control character    CASE UE.CVAL = 37 OR UE.CVAL = 38 OR UE.CVAL = 43 OR UE.CVAL = 61; ENC.FLAG = 1 ;* % & + =    CASE UE.CVAL = 127; ENC.FLAG = 1  ;* DEL control character    CASE UE.CVAL >= 252; ENC.FLAG = 1 ;* delimiter character    CASE 1 ; ENC.FLAG = 0  END CASE  IF ENC.FLAG THEN    UE.CHR = "%":(OCONV(UE.CVAL,'MCDX') 'R%2')  END  NEW.STRING := UE.CHRNEXT UEXRETURN**----------fold.string:*----------*NEW.STRING = ''NUM.FOLD = DCOUNT(FOLD.STRING, @AM)MIN.FOLD = MAX.COLS - INT(MAX.COLS / 3)FOR FOLD.IDX = 1 TO NUM.FOLDFOLD.LINE = FOLD.STRING<FOLD.IDX>LOOP WHILE LEN(FOLD.LINE) > MAX.COLS DOFOLD.BRK = 0FOR FOLD.BRK.IDX = MAX.COLS TO MIN.FOLD STEP -1IF FOLD.LINE[FOLD.BRK.IDX, 1] = ' ' THEN    FOLD.BRK = FOLD.BRK.IDX    EXITENDNEXT FOLD.BRK.IDXIF FOLD.BRK = 0 THEN FOLD.BRK = MAX.COLS + 1NEW.STRING<-1> = FOLD.LINE[1, FOLD.BRK - 1]IF FOLD.LINE[FOLD.BRK, 1] = ' ' THEN FOLD.BRK = FOLD.BRK + 1FOLD.LINE = FOLD.LINE[FOLD.BRK, LEN(FOLD.LINE)]REPEATNEW.STRING<-1> = FOLD.LINENEXT FOLD.IDXFOLD.STRING = NEW.STRINGRETURN*END000FBCSUB.DEBUG.WIDGET0c2    SUBROUTINE SUB.DEBUG.WIDGET* @(#) SUB.DEBUG.WIDGET Ported to jBASE 17:00:17  08 JUL 2015*  The following variable names were converted*   PROG,LN,DATE,TIME* * 07-17-15 Peter Schellenbach - removed D3 runtime error code - if there is a way to*   get UniData runtime errors, create new SUB.GET.RUNTIME.ERRORS subroutine and call*   it to get the errors.** 01-20-16 Peter Schellenbach - added code to insert extra widget info after runtime errors.*   Call new SUB.LOG.DEBUG.INFO in widget code to save extra widget info for display here.*    INCLUDE WBPD MVDB.INCLUDE*    W$TYPE = "HTML"    W$TITLE = "Widget Debug: ":G$WIDGET.NAME    IF GLOBAL.INFO(90) = "FAIL" THEN        W$TITLE := " (Widget Failed)"    END ELSE        W$TITLE := ' (Debug Mode)'    END    W$WIDTH = 3     ;* Maybe we can track the last known width of this widget*    IF G$QUERYMODE THEN RETURN*    OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE        W$HTML.DATA = '<h2>Unable to open WEB.FORMS</h2>'        RETURN    END    READ W$HTML.DATA FROM F.WEB.FORMS, "widget_debug.html" ELSE W$HTML.DATA = "<h2>Error: widget_debug.html is missing.</h2>"*    WIDGET.SUB.NAME = GLOBAL.INFO(91)   ;* Set by MVDB.MAIN before re-assigning the subroutine name to this program.*    EDIT.LINK = ''    IF G$ADMIN.USER THEN* Add a link to edit the subroutine        URL.SUBNAME = WIDGET.SUB.NAME        CALL SUB.URL.ENCODE(URL.SUBNAME)        EDIT.LINK = '<a href="/dbc/MVDB.WEB.ED?ed_file=MVDB.SUBS&ed_item=':URL.SUBNAME:'" target="MVDB.SUBS_':URL.SUBNAME:'">Edit Subroutine</a>'    END*    UDINFO = ""    FOR UDPOS = 1 TO 100        IF WIDGET.USER.DATA(UDPOS) # "" THEN            UDINFO := '<tr><td>':UDPOS:'</td><td>':WIDGET.USER.DATA(UDPOS):'</td></tr>':CHAR(10)        END    NEXT UDPOS*    URL.WIDGET.NAME = G$WIDGET.NAME    CALL SUB.URL.ENCODE(URL.WIDGET.NAME)    IF GLOBAL.INFO(90) = "FAIL" THEN        DB.REASON = "<hr />This widget has been disabled for one of the following reasons:"        DB.REASON := '<ul><li>The widget subroutine has an error causing it to terminate unexpectedly.</li>'        DB.REASON := '<li>The page was refreshed or a new dashboard page was loaded before the widget subroutine finished running.</li>'        DB.REASON := '<li>The widget is running, but it is taking too long for it to finish.</li>'        DB.REASON := '<li>The widget subroutine encountered a system error and could not finish running.</li></ul>'        REMOVE.LINK = '<a href="/dbc/MVDB.MAIN?unfail_widget=':URL.WIDGET.NAME:'">click here</a>'        REMEDY =  "When the problem has been corrected, ":REMOVE.LINK:" to take this widget out of debug mode.<hr />"    END ELSE        DB.REASON = ""        REMEDY = ""    END** Runtime errors?*    RE.INFO = ""    *PJS 07-17-15 Universe TODO: get runtime errors*    MAX.ERRS = 50    *TODO: CALL SUB.GET.RUNTIME.ERRORS(RE.INFO, '', WIDGET.SUB.NAME, MAX.ERRS, G$ADMIN.USER)    RE.INFO := CHAR(10): '</table>'    *    *PJS 01-20-16 Check for widget debug info and add to runtime errors section.    * To use this feature, widget code can call SUB.LOG.DEBUG.INFO with widget    * name and a message. The last 100 lines of message text are saved in WDB.DEBUG    * for the widget and displayed here after runtime errors by the debug widget.    OPEN 'WDB.DEBUG' TO F.WDB.DEBUG THEN        READ EXTRA.INFO FROM F.WDB.DEBUG,G$WIDGET.NAME THEN            CALL SWAP(EXTRA.INFO,@AM,CHAR(10))            RE.INFO := '<pre>':CHAR(10):EXTRA.INFO:CHAR(10):'</pre>':CHAR(10)        END    END     *    CALL SWAP(W$HTML.DATA,'<!-- WIDGET_NAME -->',G$WIDGET.NAME)    CALL SWAP(W$HTML.DATA,'<!-- WIDGET_SUB_NAME -->',WIDGET.SUB.NAME)    CALL SWAP(W$HTML.DATA,'<!-- WIDGET_EDIT_LINK -->',EDIT.LINK)    CALL SWAP(W$HTML.DATA,'<!-- DEBUG_REASON -->',DB.REASON)    CALL SWAP(W$HTML.DATA,'<!-- REMEDY -->',REMEDY)    CALL SWAP(W$HTML.DATA,'<!-- WIDGET_USER_DATA -->',UDINFO)    CALL SWAP(W$HTML.DATA,'<!-- RUNTIME_ERRORS -->',RE.INFO)    RETURN000474MVAPPS.STATUS0c2** Program: MVAPPS.STATUS* Author: Luke Bucklin, Sierra Bravo Corporation* Date: January 4, 2010* Purpose: Provide app status information to the mvappsvr config app*APP.LIST = ""APP.CNT = 0PRINT "MVAPPS START"OPEN '','MVAPPS.INSTALLED' TO F.MVAPPS.INSTALLED THEN  EXECUTE 'SSELECT MVAPPS.INSTALLED' CAPTURING JUNK  LOOP    READNEXT ID ELSE EXIT    READ REC FROM F.MVAPPS.INSTALLED, ID THEN      APP.CNT += 1      APP.LIST<1,APP.CNT> = ID      APP.LIST<2,APP.CNT> = REC<1>      APP.LIST<3,APP.CNT> = REC<2>      APP.LIST<4,APP.CNT> = REC<3>      APP.LIST<5,APP.CNT> = OCONV(REC<4>,'D2/')    END  REPEATENDAPP.NAMES = APP.LIST<2>CONVERT "|" TO "\" IN APP.NAMESAPP.LIST<2> = APP.NAMESPRINT "MVAPPS-VERSION: 1.0"DATA "VERSION"EXECUTE "APP.INSTALLER" CAPTURING AIVLOCATE "Installer Version" IN AIV SETTING POS THEN  VNO = AIV<POS+1>END ELSE VNO = "?"IF NOT(VNO MATCHES "1N0N'.'0X") THEN VNO = "?"PRINT "INSTALLER-VERSION: ":VNOPRINT 'APP-COUNT: ':APP.CNTFOR N = 1 TO APP.CNT  PRINT 'APP: ':APP.LIST<2,N>:",":APP.LIST<3,N>:",":APP.LIST<4,N>:",":APP.LIST<5,N>NEXT NPRINT "MVAPPS END"STOPEND000789SUB.MVDB.FEATURES0c2SUBROUTINE SUB.MVDB.FEATURES(USER.LIMIT,MAPS.ENABLED,FUSION.WIDGETS.ENABLED,WATERMARK)INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*** Decipher the license data*CDIGIT = CGI$APPSVR.ID[1,1]LSEG1 = CGI$APPSVR.ID[2,5]LSEG2 = CGI$APPSVR.ID[7,7]LSEG3 = CGI$APPSVR.ID[14,8]UID4 = CGI$UNIQUE.ID "R%4"UID3 = UID4 "R%3"UID2 = UID4 "R%2"UIDL1 = UID4 "R%1"UIDL2 = UID4[3,1]*CHKVAL = 0FOR N = 2 TO 21  CHKVAL += SEQ(CGI$APPSVR.ID[N,1])NEXT NCHKVAL = MOD(CHKVAL,16)** SEGMENT 1: Extract license edition*SEG1 = OCONV(LSEG1,'MCXD')SEG1 = SEG1 / (4*(UID4+1))LICENSE.EDITION = SEG1-1** SEGMENT 2: Extract user limit*SEG2 = OCONV(LSEG2,'MCXD')SEG2 = SEG2 / (3*(UID3+1))LICENSE.CNT = SEG2** SEGMENT 3: Extract system id*SEG3 = OCONV(LSEG3,'MCXD')SEG3 = SEG3 / (UIDL1 + UIDL2 + 2)LICENSE.SYSID = SEG3*WWW.INFO(46) = OCONV(CHKVAL,'MCDX'):'/':OCONV(LSEG3,'MCXD'):" / ":(UIDL1 + UIDL2 + 2):" = ":LICENSE.SYSIDWWW.INFO(47) = LICENSE.CNT:'/':LICENSE.EDITIONWWW.INFO(48) = LICENSE.SYSID*USER.LIMIT = LICENSE.CNTMAPS.ENABLED = 0FUSION.WIDGETS.ENABLED = 0WATERMARK = ''EDITION = ''BEGIN CASE  CASE LICENSE.EDITION = 1    FUSION.WIDGETS.ENABLED = 1    MAPS.ENABLED = 1    WATERMARK = 'Development Version'    EDITION = 'Development Edition'  CASE LICENSE.EDITION = 2     EDITION = 'Standard Edition'  CASE LICENSE.EDITION = 3    FUSION.WIDGETS.ENABLED = 1    EDITION = 'Professional Edition'  CASE LICENSE.EDITION = 4    FUSION.WIDGETS.ENABLED = 1    MAPS.ENABLED = 1    EDITION = 'Enterprise Edition'  CASE LICENSE.EDITION = 5    FUSION.WIDGETS.ENABLED = 1    MAPS.ENABLED = 1    WATERMARK = 'Evaluation Version'    EDITION = 'Evaluation'  CASE 1    EDITION = 'Edition unavailable'END CASE**Populate globals for user reference*G$LICENSE.COUNT = LICENSE.CNTG$EDITION = EDITION ;*:' | ':CGI$APPSVR.ID:' | ':CGI$UNIQUE.IDG$SYSTEM.ID = LICENSE.SYSID*RETURN007424MVPKG.MAIN0c2* @(#) MVPKG.MAIN Ported to jBASE 17:00:17  08 JUL 2015* Copyright (C) 2010 Sierra Bravo Corporation, All Rights Reserved** Written by: Dave Bucklin, Sierra Bravo* Date: May, 2010* Description: Administration area of Bravo Dashboard**#MAKE# RL $OPTIONS D3    INCLUDE WBPD WWW.INCLUDE    INCLUDE WBPD MVDB.INCLUDE*UD INCLUDE WBPD MVPKG.INCLUDE    INCLUDE WBPD FI.MVDB.WIDGETS    INCLUDE WBPD FI.MVDB.DEFS    INCLUDE WBPD FI.MVDB.WIDGET.TYPES*    EQU TRUE TO 1, FALSE TO 0, AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*    OPEN '','MVPKG.DATA' TO F.MVPKG.DATA ELSE STOP 201, 'MVPKG.DATA'    OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'    OPEN '','MVDB.SUBS' TO F.MVDB.SUBS ELSE STOP 201, 'MVDB.SUBS'    OPEN '','MVDB.DEFS' TO F.MVDB.DEFS ELSE STOP 201, 'MVDB.DEFS'    OPEN '','MVDB.WIDGET.TYPES' TO F.MVDB.WIDGET.TYPES ELSE STOP 201, 'MVDB.WIDGET.TYPES'    OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'    OPEN '','WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS'    OPEN '','MD' TO F.MD ELSE        OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD'    END*    DIM PKG.REC(40)    DIM SITE$SETTINGS(100)    EQU SITE$AUTH.SUB     TO SITE$SETTINGS(1)    EQU SITE$NULL.PW.OK   TO SITE$SETTINGS(2)    EQU SITE$W.MAX.DUR    TO SITE$SETTINGS(3)    EQU SITE$TCP.PORT     TO SITE$SETTINGS(4)    EQU SITE$ALT.LOGO     TO SITE$SETTINGS(7)    EQU SITE$THEME        TO SITE$SETTINGS(8)    EQU SITE$CHARSET      TO SITE$SETTINGS(9)*    EQU STEP$WIDGETS TO 1    EQU STEP$DASHBOARDS TO 2    EQU STEP$ITEMS TO 3    EQU STEP$WEB.FILES TO 4    EQU STEP$SETTINGS TO 5    EQU STEP$SUMMARY TO 6*    MATREAD SITE$SETTINGS FROM F.MVDB.CONTROL, "MVDB.SETTINGS" ELSE MAT SITE$SETTINGS = ""    IF SITE$ALT.LOGO = '' THEN        SITE.LOGO = '/db/images/mv-logo.png'    END ELSE        SITE.LOGO = SITE$ALT.LOGO        IF NOT(INDEX(SITE.LOGO,'/',1)) THEN            SITE.LOGO = '/db/images/':SITE.LOGO        END    END    IF SITE$THEME # '' THEN SITE$THEME = '<link rel="Stylesheet" href="/db/themes/':SITE$THEME:'" media="screen" type="text/css" />'    IF SITE$CHARSET = '' THEN SITE$CHARSET = 'UTF-8'*    CALL GET.SESSION.VAR("adminauth",adminauth)    CALL PUT.SESSION.VAR("dd_mode",0)    adminpass = ""    IF adminauth # 1 THEN        FORM = '<html><head><meta http-equiv="Refresh" content="0; url=/dbc/MVDB.MAIN" />'        FORM := '</head><body><p>Administrative priviledges are required. '        FORM:= 'Please <a href="/dbc/MVDB.MAIN">log in</a>.</p></body></html>'        CALL WEB.SEND(FORM)        STOP    END*    HTML = ''    LOCATE "action" IN CGI$VARS SETTING POS THEN        action = CGI$VALS<POS>    END ELSE action = ""    LOCATE 'pkg_id' IN CGI$VARS SETTING POS THEN        PKG.ID = CGI$VALS<POS>    END ELSE PKG.ID = ''*    BEGIN CASE    CASE action = 'rebuild'        MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID THEN*translate this package definition into something usable by the package builder            OPEN 'MAKE.FILE,':PKG.ID TO F.MAKE.FILE ELSE                EXECUTE "CREATE-FILE DATA MAKE.FILE,":PKG.ID:" 11"                OPEN 'MAKE.FILE,':PKG.ID TO F.MAKE.FILE ELSE STOP 201, 'MAKE.FILE,':PKG.ID            END            CLEARFILE F.MAKE.FILE**Dashboards*            WIDGET.LIST = ''  ;*composite of dashboard and individual widgets            DB.LIST = ''            FILE.LIST = ''            DB.CNT = DCOUNT(PKG$DASHBOARDS<1>,VM)            FOR ON.DB = 1 TO DB.CNT                IF PKG$DASHBOARDS.OVR<1,ON.DB> = 1 THEN LIST.POS = 2 ELSE LIST.POS = 1                IF PKG$DASHBOARDS.ADD<1,ON.DB> = 1 THEN*add the widgets from this db                    READV WIDGETS FROM F.MVDB.DEFS, PKG$DASHBOARDS<1,ON.DB>, 2 ELSE WIDGETS = ''                    WCNT = DCOUNT(WIDGETS<1>,VM)                    FOR ON.W = 1 TO WCNT                        LOCATE WIDGETS<1,ON.W> IN WIDGET.LIST<LIST.POS> SETTING DUM ELSE                            WIDGET.LIST = INSERT(WIDGET.LIST,LIST.POS,0,0,WIDGETS<1,ON.W>)                        END                    NEXT ON.W                END                DB.LIST<LIST.POS,-1> = PKG$DASHBOARDS<1,ON.DB>            NEXT ON.DB*DB.LIST = PKG$DASHBOARDS*CONVERT VM TO AM IN DB.LIST*WRITE DB.LIST ON F.MAKE.FILE, 'DATA_MVDB.DEFS'            PKG.LIST = DB.LIST<1>            CONVERT VM TO AM IN PKG.LIST            IF DCOUNT(PKG.LIST,AM) THEN                WRITE PKG.LIST ON F.MAKE.FILE, 'DATA_MVDB.DEFS'                FILE.LIST<-1> = 'MVDB.DEFS'            END            O.PKG.LIST = DB.LIST<2>            CONVERT VM TO AM IN O.PKG.LIST            IF DCOUNT(O.PKG.LIST,AM) THEN                WRITE O.PKG.LIST ON F.MAKE.FILE, 'DATA_O:MVDB.DEFS'                FILE.LIST<-1> = 'O:MVDD.DEFS'            END**Widget defs and subs*            WCNT = DCOUNT(PKG$WIDGETS<1>,VM)            FOR ON.W = 1 TO WCNT                IF PKG$WIDGETS.OVR<1,ON.DB> = 1 THEN LIST.POS = 2 ELSE LIST.POS = 1                LOCATE PKG$WIDGETS<1,ON.W> IN WIDGET.LIST<LIST.POS> SETTING DUM ELSE                    WIDGET.LIST = INSERT(WIDGET.LIST,LIST.POS,0,0,WIDGETS<1,ON.W>)                END            NEXT ON.W*WRITE WIDGET.LIST ON F.MAKE.FILE, 'DATA_MVDB.WIDGETS'            WGT.LIST = WIDGET.LIST<1>            CONVERT VM TO AM IN WGT.LIST            IF DCOUNT(WGT.LIST,AM) THEN                WRITE WGT.LIST ON F.MAKE.FILE, 'DATA_MVDB.WIDGETS'                FILE.LIST<-1> = 'MVDB.WIDGETS'            END            O.WGT.LIST = WIDGET.LIST<2>            CONVERT VM TO AM IN O.WGT.LIST            IF DCOUNT(WGT.LIST,AM) THEN                WRITE O.WGT.LIST ON F.MAKE.FILE, 'DATA_O:MVDB.WIDGETS'                FILE.LIST<-1> = 'O:MVDB.WIDGETS'            END*            COMPILE.COMMANDS = ''            SUB.LIST = ''            WCNT = DCOUNT(WIDGET.LIST,AM)            FOR ON.W = 1 TO WCNT                READV SUB.NAME FROM F.MVDB.WIDGETS, WIDGET.LIST<ON.W>, 1 THEN                    LOCATE SUB.NAME IN SUB.LIST SETTING DUM ELSE                        SUB.LIST = INSERT(SUB.LIST,1,0,0,SUB.NAME)                        IF PKG$COMPILE.OPT = 1 THEN                            COMPILE.COMMANDS<-1> = 'COMPILE MVDB.SUBS ':SUB.NAME                            IF PKG$FLASH.OPT = 1 THEN COMPILE.COMMANDS := " (O"                        END                    END                END            NEXT ON.W            WRITE SUB.LIST ON F.MAKE.FILE, 'DATA_MVDB.SUBS'**Additional files and items*            FILE.CNT = DCOUNT(PKG$FILES<1>,VM)            FOR ON.FILE = 1 TO FILE.CNT                FNAME = PKG$FILES<1,ON.FILE>                ITEM.LIST = ''                IF PKG$LIST<1,ON.FILE> # '' THEN                    EXECUTE 'GET-LIST ':PKG$LIST.FILE<1,ON.FILE>:' ':PKG$LIST<1,ON.FILE> CAPTURING JUNK                    LOOP                        READNEXT ID ELSE EXIT                        ITEM.LIST<-1> = ID                    REPEAT                END ELSE                    IF PKG$ITEMS<1,ON.FILE> = '*' THEN                        EXECUTE 'SELECT ':PKG$FILES.DICT<1,ON.FILE>:' ':PKG$FILES<1,ON.FILE> CAPTURING JUNK                        LOOP                            READNEXT ID ELSE EXIT                            ITEM.LIST<-1> = ID                        REPEAT                    END ELSE                        ITEM.LIST = PKG$ITEMS<1,ON.FILE>                        CONVERT SVM TO AM IN ITEM.LIST                    END                END                IF PKG$FILES.OVR<1,ON.FILE> = 1 THEN FNAME = 'O:':FNAME                IF PKG$FILES.DICT<1,ON.FILE> = 'DICT' THEN                    WRITE ITEM.LIST ON F.MAKE.FILE, "DICT_":FNAME                END ELSE                    WRITE ITEM.LIST ON F.MAKE.FILE, "DATA_":FNAME                END                LOCATE FNAME IN FILE.LIST SETTING DUM ELSE                    FILE.LIST<-1> = FNAME                END            NEXT ON.FILE*            WRITE FILE.LIST ON F.MAKE.FILE, 'FILE.LIST'*            PRE.COMMANDS = PKG$PRE.CMD            CONVERT VM TO AM IN PRE.COMMANDS            WRITE PRE.COMMANDS ON F.MAKE.FILE, 'PRE.COMMANDS'            POST.COMMANDS = PKG$POST.CMD            CONVERT VM TO AM IN POST.COMMANDS            POST.COMMANDS<-1> = COMPILE.COMMANDS            WRITE POST.COMMANDS ON F.MAKE.FILE, 'POST.COMMANDS'*            CALL MVDB.BUILD.PACKAGE(PKG.ID,PATH,SIZE)            PKG$BUILD.TS = DATE() : TIME() "R%5"            PKG$BUILD.SEQ += 1            PKG$SIZE = SIZE            PKG$PATH = PATH            MATWRITE PKG.REC ON F.MVPKG.DATA, PKG.ID        END        GOSUB LOAD.PKGS    CASE action = 'addfile'        LOCATE 'file_name' IN CGI$VARS SETTING POS THEN            FILE.NAME = CGI$VALS<POS>        END ELSE FILE.NAME = ''        LOCATE 'file_dict' IN CGI$VARS SETTING POS THEN            FILE.DICT = CGI$VALS<POS>        END ELSE FILE.DICT = ''        LOCATE 'file_ovr' IN CGI$VARS SETTING POS THEN            FILE.OVR = CGI$VALS<POS>        END ELSE FILE.OVR = ''        LOCATE 'list_file' IN CGI$VARS SETTING POS THEN            LIST.FILE = CGI$VALS<POS>        END ELSE LIST.FILE = ''        LOCATE 'list_name' IN CGI$VARS SETTING POS THEN            LIST.NAME = CGI$VALS<POS>        END ELSE LIST.NAME = ''        LOCATE 'items' IN CGI$VARS SETTING POS THEN            ITEMS = CGI$VALS<POS>            CONVERT ',' TO SVM IN ITEMS        END ELSE ITEMS = ''        IF PKG.ID # '' AND FILE.NAME # '' AND ((LIST.NAME # '' AND LIST.FILE # '') OR ITEMS # '') THEN            MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID THEN                ADD.POS = DCOUNT(PKG$FILES<1>,VM) + 1                PKG$FILES<1,ADD.POS> = FILE.NAME                PKG$FILES.DICT<1,ADD.POS> = FILE.DICT                PKG$ITEMS<1,ADD.POS> = ITEMS                PKG$LIST<1,ADD.POS> = LIST.NAME                PKG$LIST.FILE<1,ADD.POS> = LIST.FILE*PKG$FILES.OVR<1,ADD.POS> = FILE.OVR                DATA 'LIST ':FILE.DICT:' ':FILE.NAME:' TOTAL SIZE DET-SUPP'                IF LIST.NAME # '' THEN                    EXECUTE 'SELECT ':LIST.FILE:' ':LIST.NAME CAPTURING OUTPUT                    END ELSE IF ITEMS = "*" THEN                        EXECUTE 'SELECT ':FILE.DICT:' ':FILE.NAME CAPTURING OUTPUT                    END ELSE                        ITEM.LIST = ITEMS                        CALL SWAP(ITEM.LIST,SVM,'""')                        EXECUTE 'SELECT ':FILE.DICT:' ':FILE.NAME:' "':ITEM.LIST:'"' CAPTURING OUTPUT                    END                    PKG$FILES.SIZE<1,ADD.POS> = TRIM(OUTPUT<7>) + 0                    MATWRITE PKG.REC ON F.MVPKG.DATA, PKG.ID                END                GOSUB EDIT.PACKAGE            END ELSE                PRINT "Error 1"            END        CASE action = 'edit'            MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID THEN                GOSUB EDIT.PACKAGE            END        CASE action = 'save'            VAR.CNT = DCOUNT(CGI$VARS,AM)            MATREAD PKG.REC FROM F.MVPKG.DATA, PKG.ID ELSE MAT PKG.REC = ''*Clear these so we can rebuild them. We have the technology.            PKG$WIDGETS = ''            PKG$WIDGETS.OVR = ''            PKG$DASHBOARDS = ''            PKG$DASHBOARDS.OVR = ''            PKG$DASHBOARDS.ADD = ''            PKG$FILES.OVR = ''            PKG$WEB.IMAGE = ''            PKG$WEB.CSS = ''            PKG$WEB.JS = ''            PKG$WEB.ICON = ''            PKG$WEB.IMAGE.OVR = ''            PKG$WEB.CSS.OVR = ''            PKG$WEB.JS.OVR = ''            PKG$WEB.ICON.OVR = ''            WIDGET.ADD.POS = 1            DB.ADD.POS = 1            IMAGE.ADD.POS = 1            CSS.ADD.POS = 1            JS.ADD.POS = 1            ICON.ADD.POS = 1            FOR ON.VAR = 1 TO VAR.CNT                THIS.VAR = CGI$VARS<ON.VAR>                THIS.VAL = CGI$VALS<ON.VAR>                BEGIN CASE                CASE THIS.VAL = ''*Get widgets                CASE THIS.VAR[1,11] = 'widget_ovr_'                CASE THIS.VAR[1,7] = 'widget_'                    WIDGET.ID = THIS.VAR[8,99]                    OVR = 'widget_ovr_':WIDGET.ID                    OVR.FLAG = 0                    LOCATE OVR IN CGI$VARS SETTING POS THEN                        OVR.FLAG = 1                    END                    PKG$WIDGETS<1,WIDGET.ADD.POS> = WIDGET.ID                    PKG$WIDGETS.OVR<1,WIDGET.ADD.POS> = OVR.FLAG                    WIDGET.ADD.POS += 1*Get Dashboards                CASE THIS.VAR[1,10] = 'dashboard_'                    DB.ID = THIS.VAR[11,99]                    OVR = 'db_ovr_':DB.ID                    ADD = 'db_add_':DB.ID                    OVR.FLAG = 0; ADD.FLAG = 0                    LOCATE OVR IN CGI$VARS SETTING POS THEN                        OVR.FLAG = 1                    END                    LOCATE ADD IN CGI$VARS SETTING POS THEN                        ADD.FLAG = 1                    END                    PKG$DASHBOARDS<1,DB.ADD.POS> = DB.ID                    PKG$DASHBOARDS.OVR<1,DB.ADD.POS> = OVR.FLAG                    PKG$DASHBOARDS.ADD<1,DB.ADD.POS> = ADD.FLAG                    DB.ADD.POS += 1*Get file overwite flags                CASE THIS.VAR[1,10] = 'files_ovr_'                    OVR.POS = FIELD(THIS.VAR,'_',3)                    PKG$FILES.OVR<1,OVR.POS> = 1*Get web files                CASE THIS.VAR = 'web_images'                    CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)                    PKG$WEB.IMAGE = TRIM(THIS.VAL,VM)                CASE THIS.VAR = 'web_icons'                    CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)                    PKG$WEB.ICON = TRIM(THIS.VAL,VM)                CASE THIS.VAR = 'web_css'                    CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)                    PKG$WEB.CSS = TRIM(THIS.VAL,VM)                CASE THIS.VAR = 'web_js'                    CALL SWAP(THIS.VAL,CHAR(13):CHAR(10),VM)                    PKG$WEB.JS = TRIM(THIS.VAL,VM)                END CASE            NEXT ON.VAR*Get settings            LOCATE 'pkg_pre_cmd' IN CGI$VARS SETTING POS THEN                PKG$PRE.CMD = CGI$VALS<POS>                CALL SWAP(PKG$PRE.CMD,CHAR(13):CHAR(10),VM)            END ELSE PKG$PRE.CMD = ''            LOCATE 'pkg_post_cmd' IN CGI$VARS SETTING POS THEN                PKG$POST.CMD = CGI$VALS<POS>                CALL SWAP(PKG$POST.CMD,CHAR(13):CHAR(10),VM)            END ELSE PKG$POST.CMD = ''            LOCATE 'compile_opt' IN CGI$VARS SETTING POS THEN                PKG$COMPILE.OPT = 1            END ELSE PKG$COMPILE.OPT = 0            LOCATE 'flash_opt' IN CGI$VARS SETTING POS THEN                PKG$FLASH.OPT = 1            END ELSE PKG$FLASH.OPT = 1            LOCATE 'access_opt' IN CGI$VARS SETTING POS THEN                PKG$ACCESS.OPT = 1            END ELSE PKG$ACCESS.OPT = 0            LOCATE 'pkg_name' IN CGI$VARS SETTING POS THEN                PKG$NAME = CGI$VALS<POS>            END            LOCATE 'pkg_desc' IN CGI$VARS SETTING POS THEN                PKG$DESC = CGI$VALS<POS>            END            MATWRITE PKG.REC ON F.MVPKG.DATA, PKG.ID            GOSUB LOAD.PKGS        CASE action = 'delete'            DELETE F.MVPKG.DATA, PKG.ID            EXECUTE 'DELETE-FILE MAKE.FILE,':PKG.ID CAPTURING JUNK            GOSUB LOAD.PKGS        CASE 1            GOSUB LOAD.PKGS        END CASE*        READ ADMIN.TEMPLATE FROM F.WEB.FORMS, "pkg_list_template.html" ELSE ADMIN.TEMPLATE = "pkg_list_template.html not found."        CALL SWAP(ADMIN.TEMPLATE,'<!--CHARACTER_SET-->',SITE$CHARSET)        HEADER = '<div id="dashboard_nav">'        HEADER := '<ol class="dashboard_list">'        HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=users">Users</a></li>'        HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=widgets">Widgets</a></li>'        HEADER := '<li><a href="':CGI$PATH:'/MVDB.ADMIN?action=dashboards">Dashboards</a></li>'        OPEN 'RSS.BP' TO F.RSS.BP THEN            HEADER := '<li><a href="':CGI$PATH:'/RSS.MAINT">RSS Feed Maintenance</a></li>'        END        HEADER := '<li class="db_active"><a href="':CGI$PATH:'/RSS.MAINT">Package Manager</a></li>'        HEADER := '<li><a href="':CGI$PATH:'/MVDB.MAIN">Return to Dashboard</a></li>'        HEADER := '</ol>'        HEADER := '</div>'        CALL SWAP(ADMIN.TEMPLATE,'<!-- HEADER -->',HEADER)        FOOTER = ''        CALL SWAP(ADMIN.TEMPLATE,'<!-- FOOTER -->',FOOTER)        CALL SWAP(ADMIN.TEMPLATE,'<!-- ADMIN_MAIN -->',HTML)        CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_LOGO -->',SITE.LOGO)        CALL SWAP(ADMIN.TEMPLATE,'<!-- SITE_THEME -->',SITE$THEME)        CALL WEB.SEND(ADMIN.TEMPLATE)        STOP*LOAD.PKGS:*        HTML = '<table width="100%">'        HTML<-1> = '<tr><td colspan="6"><a href="':CGI$PATH:'/MVPKG.MAIN?action=editpkg" class="add-pkg">Add a Package</a></td></tr>'        HTML<-1> = '<tr><th>Package</th><th>Last Build</th><th>Size</th><th>Build#</th><th>Description</th><th>Action</th></tr>'        EXECUTE "SSELECT MVPKG.DATA BY NAME" CAPTURING JUNK        LOOP            READNEXT FID ELSE EXIT            MATREAD PKG.REC FROM F.MVPKG.DATA, FID ELSE CONTINUE            IF PKG$SIZE # '' THEN                BEGIN CASE                CASE PKG$SIZE >= PWR(10,9)                    PKG$SIZE = OCONV(PKG$SIZE,"MD29"):' GB'                CASE PKG$SIZE >= PWR(10,6)                    PKG$SIZE = OCONV(PKG$SIZE,"MD26"):' MB'                CASE PKG$SIZE >= PWR(10,3)                    PKG$SIZE = OCONV(PKG$SIZE,"MD23"):' kB'                CASE 1                    PKG$SIZE := ' bytes'                END CASE            END            BUILD.DATE = OCONV(PKG$BUILD.TS[1,5],"D2/")            BUILD.TIME = OCONV(PKG$BUILD.TS[6,5],"MTS")            ROW = '<tr><td>':PKG$NAME:'</td><td>':BUILD.DATE:' ':BUILD.TIME:'</td>'            ROW := '<td>':PKG$SIZE:'</td><td>':PKG$BUILD.SEQ:'</td><td>':PKG$DESC:'</td>'            ROW := '<td><a href="/dbc/MVPKG.MAIN?action=edit&pkg_id=':FID:'"><img src="/db/icons/brick_edit.png" title="Edit"></a> '            ROW := \<a onClick="return confirm('DELETE: Are you sure?');" href="/dbc/MVPKG.MAIN?action=delete&pkg_id=\:FID:\"><img src="/db/icons/brick_delete.png" title="Delete"></a> \            ROW := '<a href="/dbc/MVPKG.MAIN?action=rebuild&pkg_id=':FID:'"><img src="/db/icons/brick_go.png" title="Rebuild"></a>'            ROW := '<a href="/dbc/MVPKG.MAIN?action=download&pkg_id=':FID:'"><img src="/db/icons/arrow_down.png" title="Download"></a></td></tr>'            HTML<-1> = ROW        REPEAT        HTML<-1> = '<tr><td colspan="6"><a href="':CGI$PATH:'/MVPKG.MAIN?action=editpkg" class="add-pkg">Add a Package</a></td></tr>'        HTML<-1> = '</table>'        RETURN*EDIT.PACKAGE:        CALL MVDB.SUB.WIDGET.LIST(WIDGET.LIST)        HTML<-1> = '<form action="':CGI$PATH:'/MVPKG.MAIN" method="POST">'        HTML<-1> = 'Package Name: <input type="text" name="pkg_name" value="':PKG$NAME:'"><br/>'        HTML<-1> = 'Description: <input type="text" name="pkg_desc" value="':PKG$DESC:'"><br/>'        HTML<-1> = '<input type="hidden" name="action" value="save">'        HTML<-1> = '<input type="hidden" name="pkg_id" value="':PKG.ID:'">'        HTML<-1> = '<div id="submit"><input class="ui-state-default ui-corner-all" type="submit" value="Save" /></div> '        HTML<-1> = '<div id="tabs"> '        HTML<-1> = '<ul><li><a href="#tabs-1">Widgets</a></li>'        HTML<-1> = '<li><a href="#tabs-2">Dashboards</a></li>'        HTML<-1> = '<li><a href="#tabs-3">File Items</a></li>'        HTML<-1> = '<li><a href="#tabs-4">Web Files</a></li>'        HTML<-1> = '<li><a href="#tabs-5">Settings</a></li></ul>'        HTML<-1> = '<div id="tabs-1" class="tab_content">'*        HTML<-1> = '<table width="100%">'        HTML<-1> = '<tr><th>Selected</th><th>Widget</th><th>Type</th><th>Subroutine</th><th>Overwrite</th></tr>'        WIDGET.CNT = DCOUNT(WIDGET.LIST<1>,VM)        FOR W.POS = 1 TO WIDGET.CNT            IF WIDGET.LIST<7,W.POS> = 1 THEN CLASS = 'error' ELSE CLASS = 'p'            LOCATE WIDGET.LIST<1,W.POS> IN PKG$WIDGETS<1> SETTING POS THEN                CHECKED = 'checked'            END ELSE CHECKED = ''            HTML<-1> = '<tr class="':CLASS:'"><td><input type="checkbox" name="widget_':WIDGET.LIST<1,W.POS>:'" value="checked" ':CHECKED:'></td>'            HTML := '<td>':WIDGET.LIST<1,W.POS>:'</td><td>':WIDGET.LIST<4,W.POS>:'</td><td>':WIDGET.LIST<3,W.POS>:'</td>'            IF PKG$WIDGETS.OVR<1,POS> = 1 THEN                CHECKED = 'checked'            END ELSE CHECKED = ''            HTML := '<td><input type="checkbox" name="widget_ovr_':WIDGET.LIST<1,W.POS>:'" value="checked" ':CHECKED:'></td></tr>'        NEXT W.POS        HTML<-1> = '</table>'*        EXECUTE 'SSELECT MVDB.DEFS' CAPTURING JUNK        HTML<-1> = '</div><!--#tabs-1-->'        HTML<-1> = '<div id="tabs-2" class="tab_content"> '        HTML<-1> = '<table width="100%">'        HTML<-1> = '<tr><th>Selected</th><th>Dashboard ID</th><th>Description</th><th>Include Widgets</th><th>Overwrite</th></tr>'*        DB.POS = 1        LOOP            READNEXT ID ELSE EXIT            MATREAD DB.ITEM FROM F.MVDB.DEFS, ID ELSE MAT DB.ITEM = ''            HTML<-1> = '<tr>'            LOCATE ID IN PKG$DASHBOARDS<1> SETTING POS THEN                CHECKED = 'checked'            END ELSE CHECKED = ''            HTML<-1> = '<td><input type="checkbox" name="dashboard_':ID:'" value="checked" ':CHECKED:'></td>'            HTML<-1> = '<td>':ID:'</td>'            HTML<-1> = '<td>':DB.DESC:'</td>'            ADD.CHECKED = ''; OVR.CHECKED = ''            IF CHECKED # '' THEN                IF PKG$DASHBOARDS.ADD<1,POS> = 1 THEN                    ADD.CHECKED = 'checked'                END                IF PKG$DASHBOARDS.OVR<1,POS> = 1 THEN                    OVR.CHECKED = 'checked'                END            END*HTML<-1> = '<td><input type="checkbox" name="db_add_':ID:'" value="checked" ':ADD.CHECKED:'></td>'            HTML<-1> = '<td><input type="button" value="Add Widgets to Package"></td>'            HTML<-1> = '<td><input type="checkbox" name="db_ovr_':ID:'" value="checked" ':OVR.CHECKED:'></td>'            HTML<-1> = '</tr>'            DB.POS += 1        REPEAT        HTML<-1> = '</table>'*        HTML<-1> = '</div><!--#tabs-2-->'        HTML<-1> = '<div id="tabs-3" class="tab_content">'        HTML<-1> = '<table width="100%">'        HTML<-1> = '<tr><td colspan="5"><a href="/dbc/MVPKG.MAIN?action=addfile" class="add-file">Add a File</a></td></tr>'        HTML<-1> = '<tr><th>File Name</th><th>Items/List</th><th>Size</th><th>Overwrite</th><th>Action</th></tr>'        FILE.CNT = DCOUNT(PKG$FILES<1>,VM)        FOR ON.FILE = 1 TO FILE.CNT            FILE.ERR = 0; ITEM.ERR = 0            OPEN PKG$FILES.DICT<1,ON.FILE>,PKG$FILES<1,ON.FILE> TO PKG.FILEVAR ELSE FILE.ERR = 1            HTML<-1> = '<tr><td '            IF FILE.ERR THEN HTML := 'class="error"'            HTML := '>':PKG$FILES.DICT<1,ON.FILE>:' ':PKG$FILES<1,ON.FILE>:'</td>'            IF PKG$LIST<1,ON.FILE> # '' THEN                OPEN PKG$LIST.FILE<1,ON.FILE> TO LISTFILE THEN                    READV TST FROM LISTFILE, PKG$LIST<1,ON.FILE>, 1 ELSE                        ITEM.ERR = 1                    END                END ELSE ITEM.ERR = 1                HTML<-1> = '<td '                IF ITEM.ERR THEN HTML := 'class="error"'                HTML := '>List: '                IF PKG$LIST.FILE<1,ON.FILE> # '' THEN                    HTML := PKG$LIST.FILE:', '                END                HTML := PKG$LIST<1,ON.FILE>:'</td>'            END ELSE                IF NOT(FILE.ERR = 1) THEN                    IF PKG$ITEMS<1,ON.FILE> # '*' THEN                        ITEM.CNT = DCOUNT(PKG$ITEMS<1,ON.FILE>,SVM)                        FOR ON.ITEM = 1 TO ITEM.CNT                            READV TST FROM PKG.FILEVAR, PKG$ITEMS<1,ON.FILE,ON.ITEM>, 1 ELSE                                ITEM.ERR = 1                            END                        NEXT ON.ITEM                    END                END ELSE ITEM.ERR = 1                SHOW.ITEMS = PKG$ITEMS<1,ON.FILE>                CONVERT SVM TO ',' IN SHOW.ITEMS                IF LEN(SHOW.ITEMS) > 20 THEN                    SHOW.ITEMS = SHOW.ITEMS[1,20]:'...'                END                HTML<-1> = '<td '                IF ITEM.ERR THEN HTML := 'class="error"'                HTML := '>':SHOW.ITEMS:'</td>'            END            SHOW.SIZE = PKG$FILES.SIZE<1,ON.FILE>            IF SHOW.SIZE # '' THEN                BEGIN CASE                CASE SHOW.SIZE >= PWR(10,9)                    SHOW.SIZE = OCONV(SHOW.SIZE,"MD29"):' GB'                CASE SHOW.SIZE >= PWR(10,6)                    SHOW.SIZE = OCONV(SHOW.SIZE,"MD26"):' MB'                CASE SHOW.SIZE >= PWR(10,3)                    SHOW.SIZE = OCONV(SHOW.SIZE,"MD23"):' kB'                CASE 1                    SHOW.SIZE := ' bytes'                END CASE            END            HTML<-1> = '<td>':SHOW.SIZE:'</td>'            IF PKG$FILES.OVR<1,ON.FILE> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''            HTML<-1> = '<td><input type="checkbox" name="files_ovr_':ON.FILE:'" ':CHECKED:'></td>'            HTML<-1> = \<td><a href="javascript:editFile('\:PKG$FILES.DICT<1,ON.FILE>:',':PKG$FILES<1,ON.FILE>:',':PKG$LIST.FILE<1,ON.FILE>:',':PKG$LIST<1,ON.FILE>:',':PKG$ITEMS<1,ON.FILE>:\');"><img title="Edit" class="icon" src="/db/icons/pencil.png"></a>\            HTML<-1> = \<a href="javascript:deleteFile('\:ON.FILE:\')"><img title="Delete" class="icon" src="/db/icons/delete.png"></a>\            HTML<-1> = '</td></tr>'        NEXT ON.FILE        HTML<-1> = '<tr><td colspan="5"><a href="/dbc/MVPKG.MAIN?action=addfile" class="add-file">Add a File</a></td></tr></table>'*        HTML<-1> = '</div><!--#tabs-3-->'        HTML<-1> = '<div id="tabs-4" class="tab_content">'        HTML<-1> = '<div id="accordion">'        HTML<-1> = '<h3><a href="#">Images</a></h3><div>'        IMAGE.CNT = DCOUNT(PKG$WEB.IMAGE<1>,VM)        HTML<-1> = '<textarea rows="8" cols="40" name="web_images">'        FOR ON.IMAGE = 1 TO IMAGE.CNT            IF PKG$WEB.IMAGE.OVR<1,ON.IMAGE> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''*HTML<-1> = '<li><input type="checkbox" name="image_ovr_':ON.IMAGE:'" value="1" ':CHECKED:'><input type="text" name="image_':ON.IMAGE:'" value="':PKG$WEB.IMAGE<1,ON.IMAGE>:'"></li>'            HTML<-1> = PKG$WEB.IMAGE<1,ON.IMAGE>        NEXT ON.IMAGE        HTML<-1> = '</textarea></div>'        HTML<-1> = '<h3><a href="#">CSS</a></h3><div>'        CSS.CNT = DCOUNT(PKG$WEB.CSS<1>,VM)        HTML<-1> = '<textarea rows="8" cols="40" name="web_css">'        FOR ON.CSS = 1 TO CSS.CNT            IF PKG$WEB.CSS.OVR<1,ON.CSS> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''*HTML<-1> = '<li><input type="checkbox" name="css_ovr_':ON.CSS:'" value="checked" ':CHECKED:'><input type="text" name="css_':ON.CSS:'" value="':PKG$WEB.CSS<1,ON.CSS>:'"></li>'            HTML<-1> = PKG$WEB.CSS<1,ON.CSS>        NEXT ON.CSS        HTML<-1> = '</textarea></div>'        HTML<-1> = '<h3><a href="#">Javascript</a></h3><div>'        JS.CNT = DCOUNT(PKG$WEB.JS<1>,VM)        HTML<-1> = '<textarea rows="8" cols="40" name="web_js">'        FOR ON.JS = 1 TO JS.CNT            IF PKG$WEB.JS.OVR<1,ON.JS> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''*HTML<-1> = '<li><input type="checkbox" name="js_ovr_':ON.JS:'" value="checked" ':CHECKED:'><input type="text" name="js_':ON.JS:'" value="':PKG$WEB.JS<1,ON.JS>:'"></li>'            HTML<-1> = PKG$WEB.JS<1,ON.JS>        NEXT ON.JS        HTML<-1> = '</textarea></div>'        HTML<-1> = '<h3><a href="#">Icons</a></h3><div>'        ICON.CNT = DCOUNT(PKG$WEB.ICON<1>,VM)        HTML<-1> = '<textarea rows="8" cols="40" name="web_icons">'        FOR ON.ICON = 1 TO ICON.CNT            IF PKG$WEB.ICON.OVR<1,ON.ICON> = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''*HTML<-1> = '<li><input type="checkbox" name="icon_ovr_':ON.ICON:'" value="checked" ':CHECKED:'><input type="text" name="icon_':ON.ICON:'" value="':PKG$WEB.ICON<1,ON.ICON>:'"></li>'            HTML<-1> = PKG$WEB.ICON<1,ON.ICON>        NEXT ON.ICON        HTML<-1> = '</textarea></div>'        HTML<-1> = '</div>'*        HTML<-1> = '</div><!--#tabs-4-->'        HTML<-1> = '<div id="tabs-5" class="tab_content">'*HTML<-1> = '<b>Settings</b>'        HTML<-1> = '<ul><li>Pre-Install Commands</li>'        CALL SWAP(PKG$PRE.CMD,VM,CHAR(13):CHAR(10))        HTML<-1> = '<li><textarea rows="5" cols="50" name="pkg_pre_cmd">':PKG$PRE.CMD:'</textarea></li>'        HTML<-1> = '<li>Post-Install Commands</li>'        CALL SWAP(PKG$POST.CMD,VM,CHAR(13):CHAR(10))        HTML<-1> = '<li><textarea rows="5" cols="50" name="pkg_post_cmd">':PKG$POST.CMD:'</textarea></li>'        IF PKG$COMPILE.OPT = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''        HTML<-1> = '<li><input type="checkbox" name="compile_opt" value="checked" ':CHECKED:'> Compile widget subroutines</li>'        IF PKG$FLASH.OPT = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''        HTML<-1> = '<li><input type="checkbox" name="flash_opt" value="checked" ':CHECKED:'> Flash compile widget subroutines</li>'        IF PKG$ACCESS.OPT = 1 THEN CHECKED = 'checked' ELSE CHECKED = ''        HTML<-1> = '<li><input type="checkbox" name="access_opt" value="checked" ':CHECKED:'> Include dashboard and widget user access settings</li>'        HTML<-1> = '</ul></div></div></form>'        RETURN0010B1CONVERT.DICTS0c2     PROGRAM CONVERT.DICTS** For UniData, convert dictionaries to UD format    PROMPT ":"    CRT "Enter list of dictionaries to be converted separated by '|' : "    INPUT ARGS    IF ARGS # "" THEN        LV = 0        FOR I = 1 TO DCOUNT(ARGS,'|')            FILE.NAME = FIELD(ARGS,'|',I)            OPEN "DICT",FILE.NAME TO FV THEN                SELECT FV TO LV                DONE = 0                LOOP                    READNEXT ID FROM LV ELSE DONE = 1                UNTIL DONE DO                    READ Z FROM FV,ID THEN                        IF Z<1> = 'A' OR Z<1> = 'S' THEN* Convert A-type and S-type dictionary items to D-type or I-type                            Z<4> = Z<3>                            Z<3> = Z<7>                            Z<5> = Z<10>:Z<9>                            IF Z<8>[1,1] = 'A' THEN* Convert A-correlative to I-type expression**   A-correaltive must have precise syntax for automated conversion:*    - attribute numbers must be enclosed in parentheses, like (2) for attribute 2*        these are converted to EXTRACT(@RECORD(n,0,0)*    - attribute names using N(name) syntax are converted by removing the leading N*         reserved words like 'DATE' or 'TIME' are not allowed for attribute names*    - sum function S() is converted to SUM()*    - system date D operand is must be enclosed in parenthese, like (D), converted to (@DATE)*                                 Z<1> = 'I'                                EXPR = Z<8>[3,999]                                * Change (nn) references to EXTRACT(@RECORD,nn,0,0)                                FOR J = 1 TO COUNT(EXPR,'(')                                    K = INDEX(EXPR,'(',J)                                    IF K > 0 THEN                                        IF EXPR[K,999] MATCHES '(1N0N)0X' THEN                                            M = INDEX(EXPR[K,999],')',1)                                            IF M > 0 THEN                                                EXPR = EXPR[1,K-1]:'EXTRACT(@RECORD,':EXPR[K+1,M-2]:',0,0)':EXPR[K+M,999]                                            END                                        END                                    END                                NEXT J                                * Change N(attr) to (attr)                                LOOP K = INDEX(EXPR,'N(',1) WHILE K DO EXPR = EXPR[1,K-1]:EXPR[K+1,999] REPEAT                                * Change S(expr) to SUM(expr)                                LOOP K = INDEX(EXPR,'S(',1) WHILE K DO EXPR = EXPR[1,K-1]:'SUM':EXPR[K+1,999] REPEAT                                * Change (D) to (@DATE)                                LOOP K = INDEX(EXPR,'(D)',1) WHILE K DO EXPR = EXPR[1,K]:'@DATE':EXPR[K+2,999] REPEAT                                Z<2> = EXPR                            END ELSE                                IF Z<8>[1,1] = 'T' THEN* Convert T-correlative to I-type TRANS() function                                    Z<1> = 'I'                                    TFILE = FIELD(Z<8>,';',1)[2,999]                                    TKEY = Z<2>                                    Z<2> = 'TRANS(':TFILE:',':TKEY:',':FIELD(Z<8>,';',4):',"':FIELD(Z<8>,';',2):'")'                                END ELSE                                    IF Z<8>[1,1] = 'G' THEN                                        IF Z<2> = 0 THEN OPND = '@ID' ELSE OPND = 'EXTRACT(@RECORD,':Z<2>:',0,0)'                                        Z<1> = 'I'                                        Z<2> = 'OCONV(':OPND:",'":Z<8>:"')"                                    END ELSE                                        Z<1> = 'D'                                    END                                END                            END                            IF Z<16> = 'V' THEN Z<6> = 'MV' ELSE Z<6> = 'S'                            Z<7> = ''                            Z<8> = ''                            Z<9> = ''                            Z<10> = ''                            WRITE Z ON FV,ID                        END                    END                REPEAT                EXECUTE 'COMPILE.DICT ':FILE.NAME CAPTURING JUNK            END        NEXT I    ENDEND000EA9RSS.MAIN0c2* RSS.MAIN** Program: RSS.MAIN* Author: Luke Bucklin* Date: 2/23/2009** Purpose: Create an RSS feed using user-defined subroutine calls** Modified by Mike Street of Zumasys 07-22-15 for UniData compatiblity:*   When testing for cataloged program, check if line 1 is 'C', not 'VR'.*INCLUDE WBPD WWW.INCLUDEINCLUDE RSS.BP RSS.DATA.INC*CALL SET.CONTENT.TYPE("application/xml")*OPEN '','RSS.FEEDS' TO F.RSS.FEEDS ELSE STOP 201, 'RSS.FEEDS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'ENDOPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'*FEED.REC = ""LOCATE "feed" IN CGI$VARS SETTING POS THEN  feed = CGI$VALS<POS>  READ FEED.REC FROM F.RSS.FEEDS, feed ELSE FEED.REC = ""ENDIF FEED.REC = "" THEN  feed = "FEEDS"  READ FEED.REC FROM F.RSS.FEEDS, feed ELSE    CALL SET.CONTENT.TYPE("application/xml")    CALL WEB.SEND('<H1>No feeds configured</H1>')    STOP  ENDENDSEL.SUB = FEED.REC<4>ITEM.SUB = FEED.REC<5>MAT RSS.DATA = ""RSS$FEED.REC = FEED.RECREAD CATPTR FROM F.MD, SEL.SUB ELSE CATPTR = ""*MS 07-22-15*IF CATPTR<1> = "VR" THENIF CATPTR<1> = "C" THEN ; *MS 07-22-15*  CALL @SEL.SUB(CGI$VARS,CGI$VALS,feed,F.FEED.FILE,MAT RSS.DATA)END ELSE  RSS$FEED.REC<1> = "Feed error: ":SEL.SUB:" not cataloged."ENDFEED.REC = RSS$FEED.RECCALL RSS.XML.ENCODE(FEED.REC,1)FEED.TITLE = FEED.REC<1>FEED.LINK = "http://":CGI$SERVER.NAME:CGI$PATH:'/RSS.MAIN?feed=':feedIF FEED.REC<2> # "" THEN FEED.LINK := "&":FEED.REC<2>FEED.DESC = FEED.REC<3>XML = ""XML<-1> = '<?xml version="1.0" ?>'XML<-1> = '<rss version="2.0">'XML<-1> = '<channel>'XML<-1> = ' <title>':FEED.TITLE:'</title>'XML<-1> = ' <link>':FEED.LINK:'</link>'SHOW.DESC = FEED.DESCIF SHOW.DESC = "" THEN SHOW.DESC = FEED.TITLEXML<-1> = ' <description>':SHOW.DESC:'</description>'XML<-1> = ' <generator>Sierra Bravo Pick RSS</generator>'XDATE = DATE()XTIME = TIME()GOSUB MAKE.DATE.TIMEXML<-1> = ' <lastBuildDate>':DATE.TIME:'</lastBuildDate>'*IF SYSTEM(11) THEN  SELECT TO ID.LISTEND ELSE ID.LIST = ""SUB.ERR = 0LOOP  READNEXT RID FROM ID.LIST ELSE EXIT  READ FEED.REC FROM F.FEED.FILE, RID ELSE EXIT  READ CATPTR FROM F.MD, ITEM.SUB ELSE CATPTR = ""*MS 07-22-15*  IF CATPTR<1> = "VR" THEN  IF CATPTR<1> = "C" THEN ; *MS 07-22-15*    CALL @ITEM.SUB(CGI$VARS,CGI$VALS,F.FEED.FILE,RID,FEED.REC,MAT RSS.DATA)  END ELSE    SUB.ERR = 1    MAT RSS.DATA = ""    RSS$TITLE = "Subroutine ":ITEM.SUB:" not cataloged."    RSS$DESCRIPTION = "Feed Error"    RSS$DATE = ICONV("1/1/2000",'D')    RSS$TIME = ICONV("12:00:00",'MT')  END  FOR XX = 1 TO 5    CALL RSS.XML.ENCODE(RSS.DATA(XX),1)  NEXT XX  XML<-1> = '<item>'  XML<-1> = ' <title>':RSS$TITLE:'</title>'  IF INDEX(RSS$LINK,'//',1) THEN    LINK = RSS$LINK  END ELSE IF RSS$LINK # "" THEN    LINK = "http://":CGI$SERVER.NAME:CGI$PATH:'/':RSS$LINK  END ELSE    LINK = ""  END  XML<-1> = ' <link>':LINK:'</link>'  XML<-1> = ' <author>':RSS$AUTHOR:'</author>'  XML<-1> = ' <description><![CDATA['  XML<-1> = RSS$DESCRIPTION  XML<-1> =']]></description>'  XDATE = RSS$DATE  XTIME = RSS$TIME  GOSUB MAKE.DATE.TIME  XML<-1> = '<pubDate>':DATE.TIME:'</pubDate>'  XML<-1> = '</item>'  CALL WEB.SEND(XML)  XML = ''REPEATXML<-1> = '</channel>'XML<-1> = '</rss>'CALL WEB.SEND(XML)STOP*MAKE.DATE.TIME: **READV GMT.OFFSET FROM F.MVDB.CONTROL, 'MVDB.SETTINGS', 6 ELSE GMT.OFFSET = 0IF XTIME = "" THEN XTIME = TIME()IF XDATE = "" THEN XDATE = DATE()*XTIME += ICONV("5:00",'MT')XTIME += 3600 * (GMT.OFFSET * (-1))IF XTIME > 86400 THEN  XTIME -= 86400  XDATE += 1ENDDATE.TIME = OCONV(XDATE,'DWA')[1,3]:', ':OCONV(XDATE,'DD'):' ':OCONV(XDATE,'DMA')[1,3]:' ':OCONV(XDATE,'DY'):' ':OCONV(XTIME,'MTS')RETURN000DD8MVDB.PURGE.SESSIONS0c2* @(#) MVDB.PURGE.SESSIONS Ported to jBASE 17:00:17  08 JUL 2015*  The following variable names were converted*   DATE,TIME* ** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Purge old session data** Modified By: Mike Street, Zumasys for UniData compatibility* Date: 07/22/2015* Description: Changed TCLREAD to use @SENTENCE* 11-30-15 TOM PARKER - PURGE BASED ON PASSED USERID* 01-25-16 TOM PARKER - DONT AUTO PURGE EMAILED AND WEBSERVICE LOGINS FOR 10 MINUTES**#MAKE# RL $OPTIONS D3    OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, 'WEB.SESSION'    OPEN '','MVDB.UDATA' TO F.MVDB.UDATA ELSE STOP 201, 'MVDB.UDATA'    OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'*    READ SETTINGS.REC FROM F.MVDB.CONTROL, 'MVDB.SETTINGS' ELSE SETTINGS.REC = ""    PURGE.AGE = SETTINGS.REC<5> * 3600  ;* Specified in hours    IF PURGE.AGE = 0 THEN PURGE.AGE = 8 * 3600**MS 07-22-15*TCLREAD TCL.LINE    TCL.LINE = @SENTENCE     ;*MS 07-22-15*    PS.LIST = OCONV( TCL.LINE, 'G1 999' )    PS.LIST = TRIM( PS.LIST )    CONVERT " " TO @AM IN PS.LIST*11-30-15*    IF PS.LIST # "" THEN*11-30-15*        XLINE = "SELECT WEB.SESSION "*11-30-15*        FOR N = 1 TO DCOUNT(PS.LIST,@AM)*11-30-15*            XLINE := "'":PS.LIST<N>:"' "*11-30-15*        NEXT N*11-30-15*        EXECUTE XLINE CAPTURING JUNK*11-30-15*        FORCE.PURGE = 1*11-30-15*    END ELSE*11-30-15*        EXECUTE 'SSELECT WEB.SESSION' CAPTURING JUNK*11-30-15*        FORCE.PURGE = 0*11-30-15*    END    EXECUTE 'SSELECT WEB.SESSION' CAPTURING JUNK; *11-30-15*    PURGE.LIST = ''    LOOP        READNEXT SESS.ID ELSE EXIT        READ SESS.REC FROM F.WEB.SESSION,SESS.ID ELSE SESS.REC = ''        PURGE.THIS = 0        PURGE.WEBSERVICE=0;  *01-25-16**11-30-15*        IF FORCE.PURGE THEN*11-30-15*            PURGE.THIS = 1*11-30-15*        END ELSE        LOCATE SESS.ID IN PS.LIST SETTING PURGE.THIS ELSE           PURGE.THIS=0           LOCATE 'userid' IN SESS.REC<1> SETTING USERID.POS ELSE USERID.POS=0           IF USERID.POS THEN              USERID=SESS.REC<2,USERID.POS>*01-25-16*              LOCATE USERID IN PS.LIST SETTING PURGE.THIS ELSE PURGE.THIS=0              LOCATE USERID IN PS.LIST SETTING PURGE.WEBSERVICE ELSE PURGE.WEBSERVICE=0; *01-25-16            END         END        IF NOT(PURGE.THIS) THEN            LOCATE "LastSessionAccess" IN SESS.REC<1> SETTING VPOS THEN                Date = FIELD(SESS.REC<2,VPOS>,'*',1)                Time = FIELD(SESS.REC<2,VPOS>,'*',2)*                AGE = (DATE()-Date) * 86400                AGE += (TIME()-Time)**01-25-16*                IF AGE > PURGE.AGE THEN                IF PURGE.WEBSERVICE THEN THIS.PURGE.AGE=600 ELSE THIS.PURGE.AGE=PURGE.AGE; * 01-25-16                IF AGE > THIS.PURGE.AGE THEN; * 01-25-16                    PURGE.THIS = 1                END            END ELSE PURGE.THIS = 1        END        IF PURGE.THIS THEN            DELETE F.WEB.SESSION, SESS.ID            PURGE.LIST<-1> = SESS.ID        END    REPEAT*    EXECUTE 'SELECT MVDB.UDATA' CAPTURING JUNK    LOOP        READNEXT ID ELSE EXIT        SID = FIELD( ID, '$', 1 )        LOCATE SID IN PURGE.LIST SETTING POS THEN            DELETE F.MVDB.UDATA, ID        END ELSE            READ TST FROM F.WEB.SESSION, SID ELSE                DELETE F.MVDB.UDATA, ID            END        END    REPEAT    STOP002FD0APP.INSTALLER0c2** Copyright (C) 2009 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo Corporation* Date: 07/15/2009* Description: Application installer** Modified By: Dave Bucklin, Nerdery Interactive Labs* Date: 02/04/2011* Description: Add overwrite flag, clashes handling specific to MVDashboard** Modified By: Mike Street, Zumasys* Date: 07/22/2015* Description: Adapt for UniData** Modified By: Peter Schellenbach, Zumasys* Date: 07/28/2015* Description: added DATA stacking for EXECUTE commands (UniData CONVERT.DICTS program)**    BUFFER = ""*    INSTALL.LOG.ON = 0    INSTALL.LOG.ID = "INSTALL*":DATE():"*":TIME()    INSTALL.LOG = ""    PROCESS.STATUS = 0    OVR.FLAG = 0    PROMPT ""    PRINT "File path: ":        INPUT PACKAGE.FILE    IF PACKAGE.FILE = "VERSION" THEN        PRINT        PRINT "Installer Version"        PRINT "1.0"        STOP    END*    returnCode = ""*    OPENSEQ PACKAGE.FILE TO HANDLE ELSE        PRINT "Unable to open sequential file"        STOP    END*UD   HANDLE = %OPEN(PACKAGE.FILE,O$RDONLY+O$BINARY)*UD   IF NOT(HANDLE) THEN*UD       PRINT "Unable to open file." ; STOP*UD   END*    L = 0    PACKET = ""    LOOP    *UD     L = %READ(HANDLE,BUFFER,10000)*UD        OSBREAD BUFFER FROM HANDLE LENGTH 10000 *UD   IF PACKET = '' THEN*UD      CRT 'CANT READ BUFFER'*UD      STOP*UD    END*UD   BUFFER=''*UD END        L=LEN(BUFFER)*END UD*    WHILE L > 0 DO        PACKET := BUFFER    REPEAT    IF PACKET = "" THEN        PRINT "No package."        STOP    END    INSTALL.ID = TIMEDATE()    KEEP.SOURCE = "1"*    PRINT    PRINT "Installing..."*    OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE        CMD = "CREATE-FILE MV.PACKED.FILE 1 31"        GOSUB EXEC.CMD        OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE            ERRFILE = "MV.PACKED.FILE"            GOSUB OPEN.ERR            STOP        END    END    WRITE PACKET ON F.PACKED.FILE, "PACKAGE"    OPEN '','VOC' TO F.MD ELSE        ERRFILE = "VOC"        GOSUB OPEN.ERR        STOP    END    OPEN "MV.INSTALL" TO F.INSTALL ELSE        CMD = "CREATE-FILE MV.INSTALL 1 11"        GOSUB EXEC.CMD        OPEN "MV.INSTALL" TO F.INSTALL ELSE            ERRFILE = "MV.INSTALL"            GOSUB OPEN.ERR            STOP        END    END    OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE        CMD = "CREATE-FILE MV.INSTALL.CF 1 11"        GOSUB EXEC.CMD        OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE            ERRFILE = "MV.INSTALL.CF"            GOSUB OPEN.ERR            STOP        END    END    OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE        CMD = "CREATE-FILE MVAPPS.INSTALLED 3 31"        GOSUB EXEC.CMD        OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE            ERRFILE = "MVAPPS.INSTALLED"            GOSUB OPEN.ERR            STOP        END    END    OPEN "DICT","MVDB.CLASHES" TO FD.MVDB.CLASHES ELSE        CMD = "CREATE-FILE DICT MVDB.CLASHES 3"        GOSUB EXEC.CMD    END    INSTALL.LOG.ON = 1*    CLEARFILE F.INSTALL    DELETE F.INSTALL.CF, "MVAPPS-PRE-SCRIPT"      ;* Get rid of this just in case one is left over    DELETE F.INSTALL.CF, "MVAPPS-POST-SCRIPT"    DELETE F.INSTALL.CF, "PACKAGE.INFO"    TARGET = F.INSTALL    TARGET.NAME = "MV.INSTALL"    GOSUB UNPACK* All individual file packages are now in INSTALL* Unpack the MD scripts    READ PACKET FROM F.INSTALL, "MV.INSTALL.CF" THEN        TARGET = F.INSTALL.CF        TARGET.NAME = "MV.INSTALL.CF"        GOSUB UNPACK        DELETE F.INSTALL, "MV.INSTALL.CF"    END** Execute scripts that are required prior to compilation*    READ CMD FROM F.INSTALL.CF, "MVAPPS-PRE-SCRIPT" THEN        LOG.LINE = TIMEDATE():": Processing PRE-INSTALL commands..."        INSTALL.LOG<-1> = LOG.LINE* Execute commands that need to be run before the install process begins        GOSUB EXEC.CMD        LOG.LINE = TIMEDATE():": Completed PRE-INSTALL commands."        INSTALL.LOG<-1> = LOG.LINE    END    READ PACKAGE.INFO FROM F.INSTALL.CF, "PACKAGE.INFO" ELSE PACKAGE.INFO = ""    PACKAGE.ID = PACKAGE.INFO<6>    PACKAGE.INFO<4> = DATE()    PACKAGE.INFO<5> = TIME()*    SELECT F.INSTALL    LOOP        READNEXT PKG.ID ELSE EXIT        IF PKG.ID # "" THEN            READ PACKET FROM F.INSTALL, PKG.ID THEN                TARGET.FILE = FIELD(PKG.ID," ",1)                IF TARGET.FILE[1,7] = "BINARY:" THEN TARGET.FILE=TARGET.FILE[8,999]        ;*UD                DICT.MOD = FIELD( PKG.ID," ",2)                DATA.MOD = FIELD( PKG.ID," ",3)                DICT = ""                IF FIELD( PKG.ID,'_',1 ) = "DICT" THEN                    TARGET.FILE = FIELD( PKG.ID, '_', 2 )                    IF TARGET.FILE[1,7] = "BINARY:" THEN TARGET.FILE=TARGET.FILE[8,999]    ;*UD                    DICT = "DICT"                END                OPEN DICT,TARGET.FILE TO F.TARGET ELSE                    IF NOT(INDEX(TARGET.FILE,':',1)) THEN                        IF DICT.MOD = "" THEN DICT.MOD = 3                        IF DATA.MOD = "" THEN DATA.MOD = 31                        CMD = "CREATE-FILE ":TARGET.FILE:" ":DICT.MOD:" ":DATA.MOD                        GOSUB EXEC.CMD                    END                    OPEN DICT,TARGET.FILE TO F.TARGET ELSE                        PRINT "Unable to create file ":TARGET.FILE                        GOSUB CLEANUP                        STOP                    END                END                TARGET = F.TARGET                TARGET.NAME = TRIM(DICT:" ":TARGET.FILE)                GOSUB UNPACK            END        END    REPEAT** Execute script required post compilation*    READ CMD FROM F.INSTALL.CF, "MVAPPS-POST-SCRIPT" THEN        LOG.LINE = TIMEDATE():": Processing POST-INSTALL commands..."        INSTALL.LOG<-1> = LOG.LINE* Use compile options if they are present.        OPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL THEN            READ COMPILE.SETUP FROM F.MVDB.CONTROL, 'COMPILE.SETUP' THEN                COMPILE.VERB = FIELD(COMPILE.SETUP<1>,' ',1)                IF COMPILE.VERB # '' THEN                    OPTS = FIELD(COMPILE.SETUP<1>,'(',2)                    IF OPTS # '' THEN OPTS = "(":OPTS                    CMD.CNT = DCOUNT( CMD, @AM )                    FOR CMD.XX = 1 TO CMD.CNT                        IF FIELD(CMD<CMD.XX>,' ',1) = 'BASIC' OR FIELD(CMD<CMD.XX>,' ',1) = 'COMPILE' THEN*make sure we use the right verb and options from the compile.setup                            CMD<CMD.XX> = COMPILE.VERB:' ':CMD<CMD.XX>[INDEX(CMD<CMD.XX>,' ',1)+1,999]:' ':OPTS                        END                    NEXT CMD.XX                END            END        END* Execute commands that need to be run at the end of the install process        GOSUB EXEC.CMD        LOG.LINE = TIMEDATE():": Completed POST-INSTALL commands."        INSTALL.LOG<-1> = LOG.LINE    END**UD*    IF NOT(KEEP.SOURCE) THEN*UD*        FOR X = 1 TO DCOUNT( SOURCE.FILES, @AM )*UD*            CMD = "CLEAR-FILE DATA ":SOURCE.FILES<X>*UD*            GOSUB EXEC.CMD*UD*        NEXT X*UD*    END    READ INSTALL.LIST FROM F.INSTALL.CF, "LAST.INSTALL" ELSE INSTALL.LIST = ""    INSTALL.LIST = INSERT( INSTALL.LIST, 1, 0, 0, INSTALL.ID )    WRITE INSTALL.LIST ON F.INSTALL.CF, "LAST.INSTALL"    GOSUB CLEANUP    INSTALL.LOG<-1> = TIMEDATE():": Install complete."    WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID    WRITE PACKAGE.INFO ON F.MVAPPS.INSTALLED, PACKAGE.ID    PROCESS.STATUS = 1    GOSUB SEND.DATA    STOP*********UNPACK:   **********    PRINT "Unpacking ":TARGET.NAME:"... ":*    BYTES = 0    CNT = 0    LOOP        PLENGTH = OCONV( PACKET[1,6], 'MCXD' )        REC = PACKET[7,PLENGTH]        PACKET = PACKET[PLENGTH+7,9999999]        ID = REC<1>        REC = DELETE( REC, 1, 0, 0 )        TYP = REC[1,2]        OVR.FLAG = REC[3,1]        REC = REC[4,9999999]        IF TYP = "0x" THEN            REC = OCONV( REC, 'MY' )            END ELSE IF TYP # "0c" THEN                REC = TYP:REC            END*            CNT += 1            BYTES += LEN(REC)            IF OVR.FLAG THEN                IF DICT = "" THEN*If we're not installing DICT items, compare for CLASHES                    READ CLASH FROM TARGET, ID THEN                        BEGIN CASE*Preserve dashboard user passwords                        CASE TARGET.FILE = "MVDB.USERS"                            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>*Preserve dashboard access profile                        CASE TARGET.FILE = "MVDB.DEFS"                            IF CLASH<5> # REC<5> THEN REC<5> = CLASH<5>*Preserve widget access profile                        CASE TARGET.FILE = "MVDB.WIDGETS"                            IF CLASH<2> # REC<2> THEN REC<2> = CLASH<2>*Preserve widget compile option                        CASE TARGET.FILE = "MVDB.CONTROL" AND ID = "COMPILE.SETUP"                            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>                        END CASE                        IF CLASH # '' AND REC # CLASH THEN                            CLASH.NAME = TARGET.NAME                            CONVERT " " TO "_" IN CLASH.NAME                            OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE                                *UD* CMD = "CREATE-FILE DATA MVDB.CLASHES,":CLASH.NAME:" 7"                                CMD = "CREATE-FILE MULTIFILE MVDB.CLASHES,":CLASH.NAME:" 7" ; *UD*                                GOSUB EXEC.CMD                                OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE                                    PRINT "Unable to create file MVDB.CLASHES,":CLASH.NAME                                    GOSUB CLEANUP                                    STOP                                END                            END                            WRITE CLASH ON F.CLASHES, ID                            CLOSE F.CLASHES                        END                    END                END                WRITE REC ON TARGET, ID            END ELSE                READ TST FROM TARGET, ID ELSE                    WRITE REC ON TARGET, ID                END            END            IF NOT(MOD(CNT,500)) THEN PRINT "*":        UNTIL PACKET = "" DO REPEAT        IF CNT # 1 THEN PLURAL = "s" ELSE PLURAL = ""        PRINT CNT:" record":PLURAL:"."        LOG.LINE = TIMEDATE():": UNPACKED ":CNT:" RECORDS TO ":TARGET.NAME        INSTALL.LOG<-1> = LOG.LINE        RETURN**********CLEANUP:  ***********        CLEARFILE F.INSTALL        CLEARFILE F.PACKED.FILE        RETURN*EXEC.CMD: **        CMD.CNT = DCOUNT( CMD, @AM )        FOR CMD.XX = 1 TO CMD.CNT            THIS.CMD = CMD<CMD.XX>            *UD* Stacked data?            IF INDEX(THIS.CMD,@VM,1) THEN                THIS.DATA = THIS.CMD<1,1>                THIS.CMD = THIS.CMD<1,2>            END ELSE                THIS.DATA = ''            END            LOG.LINE = TIMEDATE():": EXEC: ":THIS.CMD            INSTALL.LOG<-1> = LOG.LINE            IF FIELD(THIS.DATA,' ',1) NE "SELECT" THEN            DATA.CNT = DCOUNT(THIS.DATA,@VM)            *UD* Use DATA statements for stacked data            FOR DATA.XX = 1 TO DATA.CNT                DATA THIS.DATA<1,DATA.XX>            NEXT DATA.XX            END            * Run the command            IF FIELD(THIS.DATA,' ',1) = "SELECT" THEN                IF FIELD(THIS.CMD,' ',1) = "CATALOG" THEN DATA "Y"                EXECUTE THIS.DATA : @AM : THIS.CMD CAPTURING JUNK            END ELSE            EXECUTE THIS.CMD CAPTURING JUNK            END            IF INSTALL.LOG.ON THEN                WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID            END        NEXT CMD.XX        RETURN*OPEN.ERR: **        LOG.LINE = TIMEDATE():": FILE OPEN ERROR: ":ERRFILE        INSTALL.LOG<-1> = LOG.LINE        PRINT LOG.LINE        GOSUB SEND.DATA        RETURN*SEND.DATA:**        PRINT        IF PROCESS.STATUS = 1 THEN INSTALL.STATUS = "Success" ELSE INSTALL.STATUS = "Failed"        PRINT "Install process finished. Status: ":INSTALL.STATUS        RETURN    END001A64WEB.SEND0c2SUBROUTINE WEB.SEND(FORM)********************** (C) Copyright 2003 Sierra Bravo Corporation, All rights reserved.** Program: WEB.SEND* Library: WBP*  Author: Luke J. Bucklin*    Date: 2/29/00** Purpose: Send the web page.** Modified By  : Mike Schmidt, Sierra Bravo* Date Revised : 11/06/2003* Modification : The program was modified to account for the following:*                1) Header Management: This program will check to see*                   if the content type has been written to the browser*                   before ever printing anything to standard out.  If*                   the headers have not been sent, the program will print*                   the headers using the SESSION$CONTENT.TYPE,*                   SESSION$HEADERS, and SESSION$COOKIES session variables.*                   The program will then set the SESSION$CONTENT.SENT*                   variable.*                   WARNING: This program assumes that the global SESSION*                   variables were setup prior to using this subroutine.*                   WARNING: The SESSION$OUTBUF.SIZE should not be relied*                   upon to prevent the buffer from exceeding the set limit.*                   This program simply flushes the buffer if it exceeds*                   the set size limit.**                2) Buffer Management: Instead of always printing every*                   thing to standard out, by default the program will*                   write everything passed into into the SESSION$OUTBUF*                   variable.  This program will then flush the buffer*                   under certain situations.  The first is if the buffer*                   size reaches the limit set in SESSION$OUTBUF.SIZE. If*                   this happens the prgram will flush the buffer then*                   reinitialize it.  The second is if the SESSION$OUTBUF.FLAG*                   is set to FALSE, then this program will always flush*                   the buffer.**                3) The program will display debug information if the global*                   variable SESSION$GLOBAL.DEBUG flag is >= 3.** Modified by Mike Street, Zumasys 07-22-15 for UniData compatiblity:*   Changed NOT(ASSIGNED()) to UNASSIGNED()** Modified by Peter Schellenbach of Zumasys 12-15-15 for new PDF generation feature*   do not append form & @AM to output buffer if form is null*   do not add DOCTYPE to output unless content type is html*   do not include debug output if content type is not html or xml** 09-23-16 Tom Parker - Eliminate GO_BACK button support and replace with*          logic to handle standard browser back button (need to prevent browser*          from caching MVDB pages).** 04-21-17 Peter Schellenbach - send response status code before Content-type,*          if set (X-MVDB-STATUS private header).** 10-18-17 Peter Schellenbach - removed duplicate debug info section. Changed condition*          for sending debug info to SESSION$GLOBAL.DEBUG >= 3 instead of = 1.*          Eliminate extra AM appended to the form data.*********************** Add the incoming string to the buffer.INCLUDE WBPD WWW.INCLUDE**UD* IF NOT(ASSIGNED(SESSION$CONTENT.SENT)) THENIF UNASSIGNED(SESSION$CONTENT.SENT) THEN ; *UD*  MAT WWW.INFO = ""  SESSION$CONTENT.SENT = 1END*SHOW.SESSION.VARS = 0IF SESSION$GLOBAL.DEBUG >= 3 THEN  OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN SHOW.SESSION.VARS = 1END*IF FORM <> '' THEN  CALL SWAP(FORM,'<!-- CGI$PATH -->',CGI$PATH)  *PJS 09-21-2017*SESSION$OUTBUF := FORM:@AM  SESSION$OUTBUF := FORM ; *PJS 09-21-2017*END** If the buffer is greater then the max size or the buffer flag is false then flush.IF LEN(SESSION$OUTBUF) >= SESSION$OUTBUF.SIZE OR NOT(SESSION$OUTBUF.FLAG) THEN* Before flushing, check to see if the headers have been send.  IF NOT(SESSION$CONTENT.SENT) THEN    IF SESSION$STATUS.CODE > 0 THEN* 04-21-17 send the status code before headers      PRINT "X-MVDB-STATUS: ":SESSION$STATUS.CODE    END* The headers have not been sent so send them now.    IF SESSION$CONTENT.TYPE = "" THEN      CALL SET.CONTENT.TYPE("")    END* If there are any cookies that need to be set, do it now.    PRINT "Content-type: ":SESSION$CONTENT.TYPE* If there are any cookies that need to be set, do it now.    FOR I = 1 TO DCOUNT(SESSION$COOKIES,@AM)      COOKIE = SESSION$COOKIES<I>      IF INDEX(COOKIE, "; path=", 1) + INDEX(COOKIE, ";path=", 1) = 0 THEN COOKIE := "; path=/"      PRINT "Set-Cookie: ":COOKIE    NEXT I* If there are any additional headers that need to be set, do it now.* 9-23-16 *    PRINT 'Cache-Control: no-cache'    PRINT 'Expires: Mon, 26 Jul 1997 05:00:00 GMT'; * 9-26-13 *    PRINT 'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'; * 9-26-13 *    PRINT 'Pragma: no-cache'; * 9-26-13 *    FOR I = 1 TO DCOUNT(SESSION$HEADERS,@AM)      PRINT SESSION$HEADERS<I>    NEXT I* Now print the blank line that ends the headers.    PRINT    IF INDEX(SESSION$CONTENT.TYPE,'html',1) THEN      IF INDEX(SESSION$OUTBUF<1>,'<!DOCTYPE',1) = 0 THEN        PRINT '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'        PRINT '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'      END    END* Set the SESSION$CONTENT.SENT variable so next time we know not to send the headers.    SESSION$CONTENT.SENT = 1* From this point on, do not buffer.    IF SESSION$OUTBUF.FLAG THEN      CALL SET.BUFFER(0)    END  END  LINE.CNT = DCOUNT( SESSION$OUTBUF, @AM )  FOR LINE.J = 1 TO LINE.CNT    PRINT SESSION$OUTBUF<LINE.J>  NEXT LINE.J  IF SESSION$GLOBAL.DEBUG >= 3 THEN    IF INDEX(SESSION$CONTENT.TYPE,'xml',1) OR INDEX(SESSION$CONTENT.TYPE,'html',1) THEN* If the debug flag is set then dump all the session information to the browser.      PRINT '<!-- Debug Information generated by WEB.SEND.  This feature can be turned off by'      PRINT '     setting the SESSION$GLOBAL.DEBUG = "1" in the initalization program     -->'      PRINT '<!-- START DEBUG OUPUT '      PRINT '     GET AND POST VARS:'      FOR I = 1 TO DCOUNT(CGI$VARS,@AM)        PRINT '     ':CGI$VARS<I>:' = ':CGI$VALS<I>      NEXT I      PRINT      IF SHOW.SESSION.VARS THEN        PRINT '    SESSION VARIABLES:'        PRINT '    SESSION$ID = ':SESSION$ID        READ REC FROM F.WEB.SESSION, SESSION$ID THEN          PRINT '    SESSION DATE = ':OCONV(REC<3>,'D4/')          PRINT '    SESSION TIME = ':OCONV(REC<4>,'MTS,')          FOR I = 1 TO DCOUNT(REC<1>,@VM)            PRINT '    ':REC<1,I>:' = ':REC<2,I>          NEXT I        END      END        PRINT '    END DEBUG OUTPUT -->'        PRINT      END    END  SESSION$OUTBUF = ''  END  RETURNEND00009CWDB.VIEW0c2*CALL WDB.VARS(VARS,VALS)HEADING "Variable" "L#20":" ":"Value"FOR N = 1 TO DCOUNT( VARS, @AM )  PRINT VARS<N> "L#20":" ":VALS<N>NEXT NSTOP0016A0SUB.PDF.FUNC0c2SUBROUTINE SUB.PDF.FUNC(ACTION, MAIN.TEMPLATE)** Copyright (c) 2016 Zumasys, Inc. All rights reserved.* Description: PDF utility functions*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*DIM PDF$SETTINGS(10)EQU PDF$ENABLED   TO PDF$SETTINGS(1)EQU PDF$COMMAND   TO PDF$SETTINGS(2)EQU PDF$DIRECTORY TO PDF$SETTINGS(3)EQU PDF$LIFETIME  TO PDF$SETTINGS(4)*IF INDEX(SYSTEM(33),'Win',1) THEN isWindows = 1 ELSE isWindows = 0 ;*UD**OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'MATREAD PDF$SETTINGS FROM F.MVDB.CONTROL,'PDF.SETTINGS' ELSE MAT PDF$SETTINGS=''*OPEN '','WDB.DEBUG' TO F.WDB.DEBUG THEN LOGGING = 1 ELSE LOGGING = 0*BEGIN CASE  CASE ACTION = 'generate'    * HTML templates may have references to css, javascript, images, etc. so swap these to be file references    IF LOGGING THEN      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'SUB.PDF.FUNC generate')    END    IF isWindows THEN DIRSEP = '\' ELSE DIRSEP = '/'    LOCATE 'INSTALL_PATH' IN CGI$VARS SETTING POS THEN      DBROOT = CGI$VALS<POS>    END ELSE      IF isWindows THEN        DBROOT = 'C:\Program Files (x86)\Zumasys\MV Dashboard\bin\mvappsvr'      END ELSE        DBROOT = '/usr/local/mvappsvr/bin/mvappsvr'      END    END    IF isWindows THEN CONVERT '\' TO '/' IN DBROOT ;* HTML path uses forward slash    NDS = DCOUNT(DBROOT,'/')    POS = INDEX(DBROOT,'/',NDS-2)    IF POS = 0 THEN POS = LEN(DBROOT)    DBROOT = DBROOT[1,POS]:'docroot/db/'    *IF LOGGING THEN    *  SAVE.MAIN.TEMPLATE = MAIN.TEMPLATE    *END    *    * TODO: the SWAP() below handles any references to images, css & scripts    * that are found in the HTML to be rendered, but if there are references    * to images within css these are not handled. Need to figure out how to    * handle these.    *    CALL SWAP(MAIN.TEMPLATE,'/db/',DBROOT)    *    ** CLONED FROM WEB.SEND    CALL SWAP(MAIN.TEMPLATE,'<!-- CGI$PATH -->',CGI$PATH)    IF INDEX(MAIN.TEMPLATE<1>,'<!DOCTYPE',1) = 0 THEN          MAIN.TEMPLATE = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"':@AM:'"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">':MAIN.TEMPLATE    END    ** END CLONE FROM WEB.SEND    *    * Open the native content directory & get path to same    OPEN 'NATIVE.CONTENT' TO F.NATIVE.DIR ELSE      PRINT '500 ERROR: CANNOT OPEN NATIVE.CONTENT'      STOP ;* intentional stop    END    NATIVE.DIR = PDF$DIRECTORY    IF isWindows THEN CONVERT '/' TO '\' IN NATIVE.DIR ;*UV may have wrong separator!    IF NATIVE.DIR[LEN(NATIVE.DIR),1] NE DIRSEP THEN NATIVE.DIR = NATIVE.DIR : DIRSEP    *    * Generate unique ID for HTML & PDF files in NATIVE.CONTENT    CALL SUB.GET.NEXT.ID(UNIQUE.ID,F.MVDB.CONTROL)    HTM.ID=UNIQUE.ID:'.htm'    PDF.ID=UNIQUE.ID:'.pdf'    *    * Save HTML in native content directory    WRITE MAIN.TEMPLATE ON F.NATIVE.DIR,HTM.ID    *    * Build command line for PDF converter    INPFILE = NATIVE.DIR:HTM.ID    OUTFILE = NATIVE.DIR:PDF.ID    CMDLINE = PDF$COMMAND    IF CMDLINE = '' THEN      PRINT '500 ERROR: PDF CONVERT COMMAND MISSING'      STOP ;* intentional stop    END    CALL SWAP(CMDLINE,'[INPUT_FILE]',INPFILE)    CALL SWAP(CMDLINE,'[OUTPUT_FILE]',OUTFILE)    CMDLINE = '!':CMDLINE ;*UD* quotes around INPFILE & OUTFILE on UD?    *    * Execute the PDF convert command    EXECUTE CMDLINE CAPTURING OUTPUT    *TODO: check for errors creating PDF file    IF LOGGING THEN      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'Command line: ':CMDLINE)      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'docroot/db: ':DBROOT)      CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'Command output:':@AM:OUTPUT)      *CALL SWAP(SAVE.MAIN.TEMPLATE,'&','&amp;')      *CALL SWAP(SAVE.MAIN.TEMPLATE,'<','&lt;')      *CALL SWAP(SAVE.MAIN.TEMPLATE,'>','&gt;')      *CALL SUB.LOG.DEBUG.INFO(G$WIDGET.NAME,'MAIN.TEMPLATE':@AM:SAVE.MAIN.TEMPLATE)    END    *    * Send content file name to mvappsvr using special header    PRINT 'X-MVDB-CONTENT-FILE: ':OUTFILE    CALL SET.CONTENT.TYPE('application/pdf')    SESSION$HEADERS<-1> = 'Content-Disposition: attachment; filename=':PDF.ID    *    * Remove HTML file from native content directory    IF NOT(LOGGING) THEN      DELETE F.NATIVE.DIR,HTM.ID    END    *    * All done!    *  CASE ACTION = 'cleanup'    IF PDF$LIFETIME >= 999999 THEN RETURN ;* Keep PDF files forever    IF PDF$LIFETIME = 0 THEN Freq = 3600 ELSE Freq = 86400    Today = DATE()    Now = (Today * 86400) + TIME()    READU PDF.CLEANUP.REC FROM F.MVDB.CONTROL,'PDF.CLEANUP.TASK' THEN      Prev = PDF.CLEANUP.REC<1>    END ELSE      Prev = Now - Freq    END    IF Now < Prev + Freq THEN      RELEASE F.MVDB.CONTROL,'PDF.CLEANUP.TASK'      RETURN    END    IF OCONV('0','D2/')[1,2] # '31' THEN USA.DATE=1 ELSE USA.DATE=0    * Preform cleanup once per day (or once per hour for immediate removal)    PDF.CLEANUP.REC = Now    WRITE PDF.CLEANUP.REC ON F.MVDB.CONTROL,'PDF.CLEANUP.TASK' ON ERROR      NULL    END    OPEN 'NATIVE.CONTENT' TO F.NATIVE.DIR ELSE RETURN    SELECT F.NATIVE.DIR    DONE = 0    LOOP      READNEXT PDF.ID ELSE DONE = 1    UNTIL DONE DO      IF PDF.ID MATCHES '18N.pdf' OR PDF.ID MATCHES '18N.PDF' THEN        IF USA.DATE THEN          PDFTime = (ICONV(PDF.ID[5,2]:'/':PDF.ID[7,2]:'/':PDF.ID[1,4],'D') * 86400) + (PDF.ID[9,2] * 3600) + (PDF.ID[11,2] * 60) + PDF.ID[13,2]        END ELSE          PDFTime = (ICONV(PDF.ID[7,2]:'/':PDF.ID[5,2]:'/':PDF.ID[1,4],'D') * 86400) + (PDF.ID[9,2] * 3600) + (PDF.ID[11,2] * 60) + PDF.ID[13,2]        END        Expires = PDFTime + (PDF$LIFETIME * 86400) + 1800        IF Expires < Now THEN          DELETE F.NATIVE.DIR,PDF.ID ON ERROR            NULL          END        END      END    REPEAT    *END CASERETURNEND00031FDELETE.SESSION.VAR0c2    SUBROUTINE DELETE.SESSION.VAR( Var )* @(#) DELETE.SESSION.VAR Ported to jBASE 17:00:16  08 JUL 2015*  The following variable names were converted*   VAR* ** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program reads a value from the current web*              session record.* Init*#MAKE# RL $OPTIONS D3    INCLUDE WBPD WWW.INCLUDE    EQU FALSE TO 0, TRUE TO 1    EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*    READ REC FROM F.WEB.SESSION, SESSION$ID THEN        LOCATE Var IN REC<1> SETTING POS THEN            DELETE REC<1,POS>            DELETE REC<2,POS>            WRITE REC ON F.WEB.SESSION, SESSION$ID        END    END*    RETURN000338XML.ENCODE0c2SUBROUTINE XML.ENCODE(STRING.TO.PARSE, FLAG)** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: David Kam (Probably), Sierra Bravo* Date: Unknown* Description: Encode text prior to inserting into XML documents**#MAKE# RL $OPTIONS D3IF STRING.TO.PARSE # '' THEN  IF INDEX(STRING.TO.PARSE,'<!CDATA[',1) > 0 THEN    FLAG = 'X'  END  IF INDEX(STRING.TO.PARSE,']]>',1) > 0 THEN    FLAG = 'X'  END  IF FLAG = 'C' THEN    STRING.TO.PARSE = '<[!CDATA[':STRING.TO.PARSE:']]>'  END ELSE    CALL SWAP(STRING.TO.PARSE,'&','&amp;')    CALL SWAP(STRING.TO.PARSE,'<','&lt;')    CALL SWAP(STRING.TO.PARSE,'>','&gt;')    CALL SWAP(STRING.TO.PARSE,'"','&quot;')    CALL SWAP(STRING.TO.PARSE,"'",'&#39;') ;*dmb 12/7/10 &apos; wasn't rendering correctly in IE8  ENDENDRETURN0004A5TIMEOUT.SESSION0c2** Copyright (C) 2004 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 06/03/04* Description: This program is used to timeout session records.  This program*              should be run at regular intervals to remove unused session records.*            *#MAKE# RL $OPTIONS D3INCLUDE WBPD WWW.INCLUDE*EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)VAL = ''*TODAY = DATE()NOW   = TIME()*OPEN '','WEB.SESSION' TO F.WEB.SESSION ELSE STOP*CMD = 'SELECT WEB.SESSION'EXECUTE CMD CAPTURING JUNK*LOOP  READNEXT ID ELSE EXIT  READU REC FROM F.WEB.SESSION, ID THEN    LOCATE 'LastSessionAccess' IN REC<1> SETTING POS THEN      LAST.ACCESS = REC<2,POS>      LA.DAY = FIELD(LAST.ACCESS,'*',1)      LA.TIME = FIELD(LAST.ACCESS,'*',2)      IF (LA.DAY < (TODAY-1)) THEN        * If it is two days old, then get rid of it.        DELETE F.WEB.SESSION, ID      END    END ELSE      TOTAL.VARS = DCOUNT(REC<1>, @VM)      REC<1,TOTAL.VARS+1> = 'LastSessionAccess'      REC<2,TOTAL.VARS+1> = DATE():'*':TIME()      WRITE REC ON F.WEB.SESSION, ID    END  ENDREPEAT*END0000A8GET.CGI0c2SUBROUTINE GET.CGI(VARNAME,VALUE)*INCLUDE WBPD WWW.INCLUDE*LOCATE VARNAME IN CGI$VARS SETTING POS THEN  VALUE = CGI$VALS<POS>END ELSE VALUE = ""RETURN0014B5DRILLDOWN.STACK.RTNE0c2SUBROUTINE DRILLDOWN.STACK.RTNE(F.MVDB.UDATA,DD.STACK,GO.BACK)** 4-25-16 Tom Parker - Created to support drilldown cookie concept to *                      allow for automatic go back functionality* 09-23-16 Tom Parker - Made obsolete with changes in philosophy on how*                       to handle going back from drilldownsINCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.USERSINCLUDE WBPD FI.MVDB.DEFSINCLUDE WBPD FI.MVDB.WIDGETSINCLUDE WBPD FI.MVDB.WIDGET.TYPES*EQU TRUE TO 1, FALSE TO 0, AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*MATREAD GLOBAL.USER.DATA FROM F.MVDB.UDATA, SESSION$ID:'$UG' ELSE MAT GLOBAL.USER.DATA=''STACK.ID=SESSION$ID:'$DD.STACK'READ DD.STACK FROM F.MVDB.UDATA, STACK.ID ELSE DD.STACK=''IF DD.STACK <> '' THEN   LAST.STACK.CNTR=DCOUNT(DD.STACK,AM)   LAST.STACK.ENTRY.ID=SESSION$ID:'$DD.':LAST.STACK.CNTR   READ LAST.CGI.REC FROM F.MVDB.UDATA, LAST.STACK.ENTRY.ID:'.VARS' ELSE LAST.CGI.REC='' END ELSE   LAST.STACK.CNTR=0   LAST.CGI.REC='' ENDVAL.VARS=CGI$VARS; CONVERT AM TO VM IN VAL.VARSCGI.REC=VAL.VARSVAL.VALS=CGI$VALS; CONVERT AM TO VM IN VAL.VALSCGI.REC<2>=VAL.VALSLOCATE 'dd' IN CGI$VARS SETTING POS ELSE POS=999DD.VAR=CGI$VALS<POS>* DBNAME WILL BE GO_BACK IF PULLING BACK FROM DRILLDOWNLOCATE 'dbname' IN CGI$VARS SETTING POS ELSE POS=999DBNAME=CGI$VALS<POS>*** IF DOING A BACKUP PULL IN INFORMATION FROM PREVIOUS*IF (DBNAME = "GO_BACK" OR DBNAME = "go_back") AND LAST.STACK.CNTR > 1 THEN   DELETE.STACK.ENTRY.ID=SESSION$ID:'$DD.':LAST.STACK.CNTR   DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.GUD'   DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.WUD'   DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.VARS'   DD.STACK=DELETE(DD.STACK,LAST.STACK.CNTR,0,0)   WRITE DD.STACK ON F.MVDB.UDATA, STACK.ID   NEW.STACK.ENTRY.ID=SESSION$ID:'$DD.':LAST.STACK.CNTR-1   READ CGI.REC FROM F.MVDB.UDATA, NEW.STACK.ENTRY.ID:'.VARS' ELSE CGI.REC=''   CGI$VARS=CGI.REC<1>   CONVERT VM TO AM IN CGI$VARS   CGI$VALS=CGI.REC<2>   CONVERT VM TO AM IN CGI$VALS   MATREAD GLOBAL.USER.DATA FROM F.MVDB.UDATA, NEW.STACK.ENTRY.ID:'.GUD' ELSE MAT GLOBAL.USER.DATA=''   MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA, SESSION$ID:'$UG'**   MATREAD WIDGET.USER.DATA FROM F.MVDB.UDATA, NEW.STACK.ENTRY.ID:'.WUD' ELSE MAT WIDGET.USER.DATA=''   GO.BACK=1   RETURN END*** IF FROM A SUBMIT BUTTON THEN SIMPLY REFRESH LAST STACK ENTRY** BUT MAKE SURE IT HAS DRILLDOWN IF PREVIOUS DID** SAME APPLIES TO DEBUG AND UNDEBUG BUTTON*LOCATE 'debug_widget' IN CGI$VARS SETTING DEBUG.POS ELSE DEBUG.POS=0LOCATE 'undebug_widget' IN CGI$VARS SETTING UNDEBUG.POS ELSE UNDEBUG.POS=0LOCATE 'sw' IN CGI$VARS SETTING POS ELSE POS=999SW.VAR=CGI$VALS<POS>INP.POS=INDEX(VM:VAL.VARS,VM:'inp_',1)IF (SW.VAR <> '' AND INP.POS) OR DEBUG.POS OR UNDEBUG.POS THEN   LOCATE 'dd' IN LAST.CGI.REC<1> SETTING DD.POS ELSE DD.POS=999   DD.VAL=LAST.CGI.REC<2,DD.POS>   IF DD.VAL <> '' THEN      LOCATE 'dd' IN CGI$VARS SETTING DD.POS ELSE DD.POS=DCOUNT(CGI$VARS,AM)+1      IF CGI$VALS<DD.POS> = '' THEN         CGI.REC<1,DD.POS>='dd'         CGI.REC<2,DD.POS>=DD.VAL         CGI$VARS<DD.POS>='dd'         CGI$VALS<DD.POS>=DD.VAL       END    END   * DEBUG POSITION MAY HAVE CHANGED SO FIND AGAIN   IF DEBUG.POS THEN      LOCATE 'debug_widget' IN CGI.REC<1> SETTING DEBUG.POS ELSE DEBUG.POS=0      IF DEBUG.POS THEN         CGI.REC=DELETE(CGI.REC,1,DEBUG.POS,0)         CGI.REC=DELETE(CGI.REC,2,DEBUG.POS,0)       END    END   IF UNDEBUG.POS THEN      LOCATE 'undebug_widget' IN CGI.REC<1> SETTING UNDEBUG.POS ELSE UNDEBUG.POS=0      IF UNDEBUG.POS THEN         CGI.REC=DELETE(CGI.REC,1,UNDEBUG.POS,0)         CGI.REC=DELETE(CGI.REC,2,UNDEBUG.POS,0)       END    END   STACK.ENTRY.ID=LAST.STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END**** SIMPLY WRITE OUT THIS SESSION INFORMATION IF:**    1.  NOTHING YET ON THE STACK**    2.  ONLY ONE ENTRY ON THE STACK AND THIS ISN'T A DRILL DOWN*IF NOT(LAST.STACK.CNTR) OR (LAST.STACK.CNTR = 1 AND DD.VAR = '') THEN   *   STACK.ENTRY.ID=SESSION$ID:'$DD.1'   DD.STACK=STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END*** ID DOING A DRILLDOWN THEN PUSH ONTO STACK*IF DD.VAR <> '' THEN   NEXT.STACK.CNTR=LAST.STACK.CNTR+1   STACK.ENTRY.ID=SESSION$ID:'$DD.':NEXT.STACK.CNTR   DD.STACK<NEXT.STACK.CNTR>=STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END*** IF NO CHANGE IN CGI VARS THEN REFRESH LAST STACK ENTRY*IF CGI.REC = LAST.CGI.REC THEN   STACK.ENTRY.ID=LAST.STACK.ENTRY.ID   GOSUB WRITE.STACK   RETURN END*** ALL ELSE SHOULD BE A NEW DASHBOARD SO START OVER WITH STACK** AFTER PURGING ALL PREVIOUSLY STACKED ITEMS*IF LAST.STACK.CNTR > 1 THEN   FOR DELETE.CNTR = LAST.STACK.CNTR TO 2 STEP -1      DELETE.STACK.ENTRY.ID=SESSION$ID:'$DD.':DELETE.CNTR      DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.GUD'      DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.WUD'      DELETE F.MVDB.UDATA, DELETE.STACK.ENTRY.ID:'.VARS'    NEXT DELETE.CNTR ENDSTACK.ENTRY.ID=SESSION$ID:'$DD.1'DD.STACK=STACK.ENTRY.IDGOSUB WRITE.STACK*RETURN*WRITE.STACK:*WRITE DD.STACK ON F.MVDB.UDATA, STACK.IDWRITE CGI.REC ON F.MVDB.UDATA, STACK.ENTRY.ID:'.VARS'MATWRITE GLOBAL.USER.DATA ON F.MVDB.UDATA, STACK.ENTRY.ID:'.GUD'RETURN*END000D0CMVDB.DEBUG0c2** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: December, 2007* Description: Dashboard & Widget Debugger**#MAKE# RL $OPTIONS D3INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGETSPROMPT ''*OPEN '','MVDB.DEBUG.INFO' TO F.MVDB.DEBUG.INFO ELSE  EXECUTE 'CREATE-FILE MVDB.DEBUG.INFO 1 3' CAPTURING JUNK  OPEN '','MVDB.DEBUG.INFO' TO F.MVDB.DEBUG.INFO ELSE STOP 201, 'MVDB.DEBUG.INFO'ENDOPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'*MY.PORT = FIELD( OCONV( '', 'U50BB' ), ' ', 1 )DEBUG.ID = MY.PORT*READ DB.REC FROM F.MVDB.DEBUG.INFO, DEBUG.ID ELSE DB.REC = ''*WIDGET.ID = DB.REC<1>*PRINT "Bravo Dashboard Debugger"PRINTOK = 0LOOP  PRINT "Widget (?=list)":  IF WIDGET.ID # "" THEN PRINT " (":WIDGET.ID:")":  PRINT ": ":  INPUT USE.WIDGET.ID  IF USE.WIDGET.ID # '' THEN WIDGET.ID = USE.WIDGET.ID  BEGIN CASE    CASE WIDGET.ID = ''      STOP    CASE WIDGET.ID = "?"      EXECUTE "SORT MVDB.WIDGETS"      PRINT      WIDGET.ID = ''    CASE 1      MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, WIDGET.ID THEN        OK = 1      END ELSE        PRINT "Invalid widget ID: ":WIDGET.ID      END  END CASEUNTIL OK DO REPEATDB.REC<1> = WIDGET.ID*USERID = DB.REC<2>PRINTOK = 0LOOP  PRINT "User ID (?=list)":  IF USERID # "" THEN PRINT " (":USERID:")":  PRINT ": ":  INPUT USE.USERID  IF USE.USERID # '' THEN USERID = USE.USERID  BEGIN CASE    CASE USERID = "?"      EXECUTE 'SORT MVDB.USERS'      PRINT      USERID = ''    CASE 1      OK = 1  END CASEUNTIL OK DO REPEAT*DB.REC<2> = USERID*G$CURRENT.DB = DB.REC<3>PRINTOK = 0LOOP  PRINT "Dashboard ID (?=list)":  IF G$CURRENT.DB # "" THEN PRINT " (":G$CURRENT.DB:")":  PRINT ": ":  INPUT USE.DB  IF USE.DB # '' THEN G$CURRENT.DB = USE.DB  BEGIN CASE    CASE USE.DB = "?"      EXECUTE 'SORT MVDB.DEFS'      PRINT      G$CURRENT.DB = ''    CASE 1      OK = 1  END CASEUNTIL OK DO REPEAT*DB.REC<3> = G$CURRENT.DB** Pull in user data*MATREAD WIDGET.USER.DATA FROM F.MVDB.DEBUG.INFO,DEBUG.ID:"$":WIDGET.ID ELSE MAT WIDGET.USER.DATA = ''*LOOP  PRINT "Widget User Data"  PRINT "----------------"  FOR X = 1 TO 100    IF WIDGET.USER.DATA(X) # '' THEN      PRINT X "R#3":". '":WIDGET.USER.DATA(X):"'"    END  NEXT X  PRINT  PRINT "User Data field # to change or ENTER to continue: ":  INPUT UPOSWHILE UPOS MATCHES "1N0N" DO  PRINT "Position ":UPOS  PRINT "Current Value: ":WIDGET.USER.DATA(UPOS)  PRINT "New Value: ":  INPUT NEW.VAL  WIDGET.USER.DATA(UPOS) = NEW.VALREPEAT*MATWRITE WIDGET.USER.DATA ON F.MVDB.DEBUG.INFO, DEBUG.ID:"$":WIDGET.ID*WRITE DB.REC ON F.MVDB.DEBUG.INFO, DEBUG.ID*MAT WIDGET.INFO = ''G$WIDGET.NAME = WIDGET.IDG$WIDGET.SUB = WIDGET.SUBG$USERID = USERIDG$QUERYMODE = ''G$DRILLDOWNMODE = 0*PRINTPRINT "Use Debugger (y/N): ":INPUT USE.DEBUGIF USE.DEBUG = "Y" THEN DEBUG ELSE  PRINT "Calling ":WIDGET.SUBEND*#MAKE# RL IF 0 THENSTART.TIMER = SYSTEM(12)*#MAKE# RL ENDUSE.SUB.NAME = WIDGET.SUBCALL @USE.SUB.NAME*#MAKE# RL IF 0 THENDURATION = SYSTEM(12) - START.TIMER*#MAKE# RL END ELSE*#MAKE# RL   DURATION = "Unavailable"*#MAKE# RL ENDMATWRITE WIDGET.USER.DATA ON F.MVDB.DEBUG.INFO, DEBUG.ID:"$":WIDGET.IDPRINT "Call completed. Duration: ":DURATIONSTOP000A3BMVDB.SUB.WIDGET.LIST0c2SUBROUTINE MVDB.SUB.WIDGET.LIST(WIDGET.LIST)** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: Luke Bucklin, Sierra Bravo* Date: November, 2007* Description: Produce a list of defined widgets.**#MAKE# RL $OPTIONS D3OPEN '','MVDB.WIDGETS' TO F.MVDB.WIDGETS ELSE STOP 201, 'MVDB.WIDGETS'OPEN '','MD' TO F.MD ELSE  OPEN '','VOC' TO F.MD ELSE STOP 201, 'MD OR VOC'END*INCLUDE WBPD MVDB.INCLUDEINCLUDE WBPD FI.MVDB.WIDGETS*CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS) ;* Retrieve a list of failed widgets this sessionCALL GET.SESSION.VAR("running_widget",FAILED.WIDGET)CALL GET.SESSION.VAR("running_widget_dt",FAILED.WIDGET.DT)IF FAILED.WIDGET # "" THEN  FW.DATE = FIELD( FAILED.WIDGET.DT, '*', 1 )  FW.TIME = FIELD( FAILED.WIDGET.DT, '*', 2 )  FW.LAPSE = TIME() - FW.TIME  FW.LAPSE += ((DATE() - FW.DATE) * 86400)  IF FW.LAPSE < 2 THEN FAILED.WIDGET = "" ;* No more than 2 seconds to run a widget in query modeENDIF FAILED.WIDGET # "" THEN  CALL PUT.SESSION.VAR("running_widget","")  CALL PUT.SESSION.VAR("running_widget_dt","")  LOCATE FAILED.WIDGET IN FAILED.WIDGETS SETTING FWPOS ELSE    FAILED.WIDGETS<-1> = FAILED.WIDGET    CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)  ENDEND*WIDGET.LIST = ''*EXECUTE 'SSELECT MVDB.WIDGETS' CAPTURING JUNK*DP = 0LOOP  READNEXT ID ELSE EXIT  MATREAD WIDGET.ITEM FROM F.MVDB.WIDGETS, ID ELSE MAT WIDGET.ITEM = ''  DP += 1  WIDGET.LIST<1,DP> = ID  SUBNAME = WIDGET.SUB  G$QUERYMODE = 1  G$WIDGET.NAME = ID  MAT WIDGET.INFO = ''  MAT WIDGET.USER.DATA = ''  MAT GLOBAL.TEMP.DATA = ''  MAT GLOBAL.USER.DATA = ''  FAIL.STATUS = 0 ;* Okay  FAIL.TEXT = ""  LOCATE ID IN FAILED.WIDGETS SETTING POS THEN    W$TYPE = "FAILED"    W$TITLE = "Failed Widget - ":SUBNAME    W$WIDTH = 3    FAIL.STATUS = 1 ;* Failed    FAIL.TEXT = "Subroutine Failed"  END ELSE    READ CATPTR FROM F.MD, SUBNAME THEN      CALL PUT.SESSION.VAR("running_widget",ID)      DT.STAMP = DATE():"*":TIME()      CALL PUT.SESSION.VAR("running_widget_dt",DT.STAMP)      CALL @SUBNAME      CALL PUT.SESSION.VAR("running_widget","")      CALL PUT.SESSION.VAR("running_widget_dt","")    END ELSE      W$TYPE = "FAILED"      W$TITLE = "Not Cataloged - ":SUBNAME      W$WIDTH = 3      FAIL.TEXT = "Subroutine Not Cataloged"    END  END  IF FIELD(W$TYPE,':',1) = "MAP" THEN W$TYPE = "MAP"  WIDGET.LIST<3,DP> = SUBNAME  WIDGET.LIST<4,DP> = W$TYPE  WIDGET.LIST<5,DP> = W$TITLE  WIDGET.LIST<6,DP> = W$WIDTH  WIDGET.LIST<7,DP> = FAIL.STATUS  WIDGET.LIST<8,DP> = FAIL.TEXTREPEATRETURN00042EGET.SESSION.ID0c2SUBROUTINE GET.SESSION.ID( SESSION.ID, VARS, VALS )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program extracts the session id from the VARS and VALS*              The programmer could just as easily parse out the HTTP_COOKIE*              header and get the value, but this just standardizes the *              process.*             * Init*#MAKE# RL $OPTIONS D3EQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)SESSION.ID = ''*NUM.VARS = DCOUNT(VARS, AM)FOR X = 1 TO NUM.VARS  IF (VARS<X> = 'HTTP_COOKIE') THEN    CSTRING = VALS<X>        CALL SWAP( CSTRING, '%3B ', ';')    CONVERT ';' TO AM IN CSTRING    NUM.COOKIES = DCOUNT(CSTRING, AM)    FOR Y = 1 TO NUM.COOKIES      CVAR = TRIM(FIELD(CSTRING<Y>,'=',1))      CVAL = CSTRING<Y>[(1+INDEX(CSTRING<Y>,'=',1)),99999]      IF (CVAR = 'sessionid') THEN        SESSION.ID = TRIM(CVAL)        EXIT      END    NEXT Y  ENDNEXT X*RETURN*0001C5RSS.XML.ENCODE0c2SUBROUTINE RSS.XML.ENCODE(STRING.TO.PARSE, FLAG)** Copyright (C) 2007 Sierra Bravo Corporation, All Rights Reserved** Written by: David Kam (Probably), Sierra Bravo* Date: Unknown* Description: Encode text prior to inserting into XML documents*SWAP.CHARS = \&<>\FOR SW = 1 TO LEN(SWAP.CHARS)  CH = SWAP.CHARS[SW,1]  HX = OCONV(SEQ(CH),'MCDX')  SWTO = "&#x":HX "R%2":";"  CALL SWAP(STRING.TO.PARSE,CH,SWTO)NEXT SWRETURN000536PUT.SESSION.VAR0c2SUBROUTINE PUT.SESSION.VAR( var, VAL )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 10/25/03* Description: This program inserts a variable in the the current*              session record.  If the variable already exists, it*              is replaced.  If it does not exist, then it is created.*#MAKE# RL $OPTIONS D3* InitINCLUDE WBPD WWW.INCLUDEEQU FALSE TO 0, TRUE TO 1EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)IF SESSION$ID = "" THEN RETURN** Need to get rid of the VM,SVM, and AM chars so that we can* store multi-valued data in the record. I am changing them to* very small ASCII codes that are usually not used.  This should* be pretty safe.*CONVERT AM TO CHAR(2) IN VALCONVERT VM TO CHAR(3) IN VALCONVERT SVM TO CHAR(4) IN VAL*READ REC FROM F.WEB.SESSION, SESSION$ID ELSE REC = ''TOTAL.VARS = DCOUNT(REC<1>, VM)LOCATE var IN REC<1> SETTING POS THEN  REC<2,POS> = VALEND ELSE  NEXT.REC = TOTAL.VARS + 1  REC<1,NEXT.REC> = var  REC<2,NEXT.REC> = VALENDWRITE REC ON F.WEB.SESSION, SESSION$IDCONVERT CHAR(2) TO AM IN VALCONVERT CHAR(3) TO VM IN VALCONVERT CHAR(4) TO SVM IN VAL*IF (var # 'LastSessionAccess') THEN  CALL PUT.SESSION.VAR('LastSessionAccess', DATE():'*':TIME())END*RETURN000B3EWDB.VARS0c2SUBROUTINE WDB.VARS( VARS, VALS )** Copyright (C) 2003 Sierra Bravo Corporation, All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 12/24/03* Description: This program is used to gather the vars and vals from a*              web request.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause** Modified By: Peter Schellenbach, Zumasys* Date: 10/25/2016* Description: Added INCLUDE WWW.INCLUDE so we have access to CGI$UNIQUE.ID*              in /WWW/ COMMON, instead of using PROCREAD / SENTENCE.**#MAKE# RL $OPTIONS D3*INCLUDE WBPD WWW.INCLUDE ; *PJS 10-25-16**VARS = ''VALS = ''VAR.POS = 1DIM TEMP(50)**PJS 06-12-15*PROCREAD TCL.LINE ELSE TCL.LINE = ''*PJS 10-25-16*PROCREAD TCL.LINE ELSE TCL.LINE = SENTENCE() ; *PJS 06-12-15**PJS 10-25-16*UNIQUE.ID = FIELD( TCL.LINE, ' ', 2)UNIQUE.ID = CGI$UNIQUE.ID ;*PJS 10-25-16**OPEN '','WDB.Q' TO WDB.Q ELSE RETURN*IF (UNIQUE.ID # '') THEN  READ QSTRING FROM WDB.Q, UNIQUE.ID ELSE QSTRING = ''  CONVERT @AM TO '' IN QSTRING  QLENGTH=LEN(QSTRING)  IF QSTRING[1,1] = '"' AND QSTRING[LEN(QSTRING),1] = '"' THEN    QSTRING = QSTRING[2,LEN(QSTRING)-2] ;* UNIDATA hack  END  CONVERT '&' TO @AM IN QSTRING  FOR X = 1 TO DCOUNT( QSTRING, @AM )    IF (TRIM(FIELD(QSTRING<X>,'=',1)) # '') THEN      HEX.STRING = FIELD(QSTRING<X>, '=', 1) ; GOSUB CONVERT.HEX      VARS<VAR.POS> = HEX.STRING      EQ.POS = INDEX(QSTRING<X>,'=',1)      HEX.STRING = QSTRING<X>[EQ.POS+1,QLENGTH] ; GOSUB CONVERT.HEX      VALS<VAR.POS> = HEX.STRING      VAR.POS += 1    END  NEXT XENDRETURN*------------CONVERT.HEX:*------------HSLEN = LEN(HEX.STRING)IF HSLEN > 5000 THEN*IF 0 THEN  CHUNKLEN = INT( HSLEN / 50 )  START.POS = 1  FOR CHX = 1 TO 49    CUT.POINT = (START.POS-1) + CHUNKLEN    NCC = 0    LOOP UNTIL HEX.STRING[CUT.POINT+1,1] = "%" OR NCC > 1 DO      CUT.POINT += 1      NCC += 1    REPEAT    TEMP(CHX) = HEX.STRING[START.POS,CHUNKLEN+NCC]    START.POS += CHUNKLEN + NCC  NEXT CHX  TEMP(50) = HEX.STRING[START.POS,QLENGTH]  MAX.TEMP.LOC = 50END ELSE  TEMP(1) = HEX.STRING  MAX.TEMP.LOC = 1ENDHEX.STRING = ""FOR TEMP.LOC = 1 TO MAX.TEMP.LOC   IDX = 1  CONVERT '+' TO ' ' IN TEMP(TEMP.LOC)  LOOP    LOC = INDEX( TEMP(TEMP.LOC), '%', IDX )  WHILE LOC DO    IF TEMP(TEMP.LOC)[LOC+1,1] = "%" THEN      IDX += 2    END ELSE      SWAP.VAL = TEMP(TEMP.LOC)[LOC+1,2]      SWAP.VAL = OCONV( SWAP.VAL, 'MCU' )      SWAP.VAL = OCONV(SWAP.VAL,'MCXD')      IF SWAP.VAL MATCHES "1N0N" THEN SWAP.VAL = CHAR(SWAP.VAL)  *    SWAP.VAL = CHAR(OCONV(SWAP.VAL,'MCXD'))      TEMP(TEMP.LOC)=TEMP(TEMP.LOC)[1,LOC-1]:SWAP.VAL:TEMP(TEMP.LOC)[LOC+3,QLENGTH]      IF SWAP.VAL = '%' THEN        IDX += 1      END    END  REPEAT  HEX.STRING := TEMP(TEMP.LOC)NEXT TEMP.LOC*RETURN00095FUSER.UPDATE0c2*On a new install, this should encrypt the default, plaintext passwords.*On an upgrade, it will encrypt all user passwords if they have not been encrypted by this program.* 1-2-15 TFP don't if the password is the same as the encryption of the user*        name then don't encrypt again* Modified by Mike Street of Zumasys 07-22-15 for UniData compatiblity:*   Change U3060 user exist to use DIGEST('MD5',...) instead.** 06-19-17 PJS After initial installation, scan for any MVDB.USERS records where* the password in USER.REC<1> is the same as the user ID. These are default users* 'admin' and 'guest', and the default plaintext password on attr 1 is encrypted* and the user record updated. The USER.UPDATE flag in MVDB.CONTROL is updated to* 2 so this process will not be repeated during upgrades. There is a special case* where the USER.UPDATE flag is 1, which indicates that the previous version of* MVDB.ADMIN had a bug where passwords were stored in the users record before but* conversion to hex was not done. In this case, the MD5 hash in attr 1 is converted* to hex and the user record is updated.*OPEN 'MVDB.USERS' TO F.MVDB.USERS ELSE STOP 201, 'MVDB.USERS'OPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL ELSE STOP 201, 'MVDB.CONTROL'READV USER.UPDATE.FLAG FROM F.MVDB.CONTROL, "USER.UPDATE",1 ELSE USER.UPDATE.FLAG = ''IF USER.UPDATE.FLAG + 0 < 2 THEN  SELECT F.MVDB.USERS  LOOP    READNEXT USER.ID ELSE EXIT    READ USER.REC FROM F.MVDB.USERS, USER.ID THEN      MUST.UPDATE = 0      * Check for plaintext passwords in original installation      IF USER.ID = USER.REC<1> THEN                IF DIGEST('MD5', USER.REC<1>, 1, ENCRYPTED.PSWD) = 0 THEN ; *07-22-15 UD*          ENCRYPTED.PSWD = OCONV(ENCRYPTED.PSWD, 'MX0C') ; *07-22-15 UD*          MUST.UPDATE = 1        END      END ELSE        * Check for non-hex encrypted password in MVDB.USERS caused by bug in prior versions of MVDB.ADMIN        IF USER.UPDATE.FLAG = 1 THEN          ENCRYPTED.LEN = LEN(USER.REC<1>)          IF ENCRYPTED.LEN = 16 THEN            ENCRYPTED.PSWD = OCONV(USER.REC<1>, 'MX0C') ; *07-22-15 UD*            MUST.UPDATE = 1          END                END      END      IF MUST.UPDATE THEN        USER.REC<1> = ENCRYPTED.PSWD        WRITE USER.REC ON F.MVDB.USERS, USER.ID      END    END  REPEAT  WRITEV 2 ON F.MVDB.CONTROL, "USER.UPDATE", 1ENDSTOPEND0020FEMVDB.BUILD.PACKAGE0c2    SUBROUTINE MVDB.BUILD.PACKAGE(MAKE.FILE,LOCATION,SIZE)*** Modified by Mike Street, Zumasys 07-22-15 for UniData compatiblity:*   Changed reserved variable name 'LENGTH' to 'Length'**   INCLUDE DM,BP,UNIX.H FCNTL.H*   INCLUDE DM,BP,UNIX.H MODE.H*   INCLUDE WBPD MVPKG.INCLUDE*    EQU FALSE TO 0, TRUE TO 1    EQU AM TO CHAR(254), VM TO CHAR(253)*UD CHAR BUFFER[10000]    BUFFER = ""    DIM PKG.REC(40)    LOCATION = ''    SIZE = 0*    OPEN "MAKE.FILE,":MAKE.FILE TO F.MAKE.FILE ELSE        OPEN MAKE.FILE TO F.MAKE.FILE ELSE STOP 201, MAKE.FILE    END    OPEN '','MVAPPS.INSTALLED' TO F.MVAPPS.INSTALLED ELSE        EXECUTE "CREATE-FILE MVAPPS.INSTALLED 3 11" CAPTURING JUNK        OPEN '','MVAPPS.INSTALLED' TO F.MVAPPS.INSTALLED ELSE STOP 201, 'MVAPPS.INSTALLED'    END    OPEN '','MVPKG.DATA' TO F.MVPKG.DATA ELSE        EXECUTE "CREATE-FILE MVPKG.DATA 3 11" CAPTURING JUNK        OPEN '','MVPKG.DATA' TO F.MVPKG.DATA ELSE STOP 201, 'MVPKG.DATA'    END    OPEN '','PACKED.FILE' TO TARGET.FILE ELSE        EXECUTE "CREATE-FILE PACKED.FILE 3 31" CAPTURING JUNK        OPEN '','PACKED.FILE' TO TARGET.FILE ELSE STOP 201, 'PACKED.FILE'    END    MATREAD PKG.REC FROM F.MVPKG.DATA, MAKE.FILE ELSE RETURN    PACKAGE.NAME = PKG$NAME    PACKAGE.NAME = OCONV(PACKAGE.NAME,"MCAN")    PACKAGE.DESCRIPTION = PKG$DESC    PACKAGE.VERSION = PKG$BUILD.SEQ + 1    IF MAKE.FILE = '' OR PACKAGE.NAME = '' THEN RETURN*    PACKAGE.INFO = ""    PACKAGE.MODE = 1* Set up the temporary storage area for the scripts    OPEN "MAKE.TEMP" TO F.MAKE.TEMP ELSE        EXECUTE "CREATE-FILE MAKE.TEMP 1 31" CAPTURING JUNK        OPEN "MAKE.TEMP" TO F.MAKE.TEMP ELSE STOP 201, "MAKE.TEMP"    END    CLEARFILE F.MAKE.TEMP    OPEN "PACKED.FILE" TO F.PACKED.FILE ELSE        EXECUTE "CREATE-FILE PACKED.FILE 1 31" CAPTURING JUNK        OPEN "PACKED.FILE" TO F.PACKED.FILE ELSE STOP 201, "PACKED.FILE"    END    CLEARFILE F.PACKED.FILE    BINARY.OPT = " (B"    PACKAGE.INFO<1> = PACKAGE.DESCRIPTION    PACKAGE.INFO<2> = PACKAGE.VERSION    PACKAGE.INFO<3> = "db"    PACKAGE.INFO<6> = PACKAGE.NAME*    TARGET = "D3"    SCRIPT = ""    SCRIPT.SEG = 0*    READ COMMANDS FROM F.MAKE.FILE, TARGET:"*PRE.COMMANDS" ELSE        READ COMMANDS FROM F.MAKE.FILE, "PRE.COMMANDS" ELSE COMMANDS = ""    END    GOSUB ADD.COMMANDS*    WRITE SCRIPT ON F.MAKE.TEMP, "MVAPPS-PRE-SCRIPT"    WRITE PACKAGE.INFO ON F.MAKE.TEMP, "PACKAGE.INFO"    SCRIPT = ""*    READ FILE.LIST FROM F.MAKE.FILE, TARGET:"*FILE.LIST" ELSE        READ FILE.LIST FROM F.MAKE.FILE, "FILE.LIST" ELSE FILE.LIST = ""    END    FOR FX = 1 TO DCOUNT( FILE.LIST, @AM )        FNAME = FILE.LIST<FX>        FX.OVR = FALSE        IF FNAME[1,2] = 'O:' THEN            FNAME=FNAME[3,999]            FX.OVR = TRUE        END        OPEN FNAME TO FVAR THEN            READ ITEM.LIST FROM F.MAKE.FILE, TARGET:"*DATA_":FNAME ELSE                READ ITEM.LIST FROM F.MAKE.FILE, "DATA_":FNAME ELSE ITEM.LIST = ""            END            IF ITEM.LIST<1> = "*" THEN                SELECT FVAR                ITEM.LIST = ''                LOOP                    READNEXT ITEM.LIST.ID ELSE EXIT                    ITEM.LIST<-1> = ITEM.LIST.ID                REPEAT            END            WRITE ITEM.LIST ON F.MAKE.TEMP, FNAME            EXECUTE "QSELECT MAKE.TEMP '":FNAME:"'" CAPTURING JUNK            IF SYSTEM(11) THEN                GOSUB PACK.FILE            END            DELETE F.MAKE.TEMP, FNAME            OPEN "DICT",FNAME TO D.FVAR THEN                READ ITEM.LIST FROM F.MAKE.FILE, TARGET:"*DICT_":FNAME ELSE                    READ ITEM.LIST FROM F.MAKE.FILE, "DICT_":FNAME ELSE ITEM.LIST = ""                END                FNAME = "DICT ":FNAME                IF ITEM.LIST<1> = "*" THEN                    SELECT D.FVAR                    ITEM.LIST = ''                    LOOP                        READNEXT ITEM.LIST.ID ELSE EXIT                        ITEM.LIST<-1> = ITEM.LIST.ID                    REPEAT                END                WRITE ITEM.LIST ON F.MAKE.TEMP, FNAME                EXECUTE "QSELECT MAKE.TEMP '":FNAME:"'" CAPTURING JUNK                IF SYSTEM(11) THEN                    GOSUB PACK.FILE                END                DELETE F.MAKE.TEMP, FNAME            END        END    NEXT FX*    READ COMMANDS FROM F.MAKE.FILE, TARGET:"*POST.COMMANDS" ELSE        READ COMMANDS FROM F.MAKE.FILE, "POST.COMMANDS" ELSE COMMANDS = ""    END    SCRIPT = ""    GOSUB ADD.COMMANDS    WRITE SCRIPT ON F.MAKE.TEMP, "MVAPPS-POST-SCRIPT"    EXECUTE 'SELECT MAKE.TEMP "MVAPPS-PRE-SCRIPT" "MVAPPS-POST-SCRIPT" "PACKAGE.INFO"' CAPTURING JUNK    FNAME = "MAKE.TEMP"    GOSUB PACK.FILE** Change the name of the file containing the scripts from MAKE.TEMP to MD* so they can be executed upon arrival.*    READ REC FROM F.PACKED.FILE, "MAKE.TEMP" ELSE REC = ""    WRITE REC ON F.PACKED.FILE, "MV.INSTALL.CF"    DELETE F.PACKED.FILE, "MAKE.TEMP"*    FNAME = "PACKED.FILE"    GOSUB PACK.FILE    READ PACKAGE FROM F.PACKED.FILE, "PACKED.FILE" ELSE RETURN    CLEARFILE F.PACKED.FILE    WRITE PACKAGE ON F.PACKED.FILE, PACKAGE.NAME:'-':PACKAGE.VERSION    OUT.DIR = "/tmp/"*   HANDLE = %OPEN(OUT.DIR:PACKAGE.NAME,O$CREAT+O$TRUNC+O$RDWR+O$BINARY)    OPENSEQ OUT.DIR:PACKAGE.NAME TO HANDLE THEN        ORIG.LEN =LEN(PACKAGE)        WTOT = 0        LOOP            IF LEN(PACKAGE) >= 10000 THEN                BUFFER = PACKAGE[1,10000]                BLEN = 10000                PACKAGE = PACKAGE[10001,9999999]            END ELSE                BUFFER = PACKAGE                BLEN = LEN(PACKAGE)                PACKAGE = ""            END*UD         W = %WRITE(HANDLE,BUFFER,BLEN)            WRITESEQ BUFFER APPEND TO HANDLE ELSE RETURN            WTOT += BLEN        WHILE PACKAGE # "" DO REPEAT        LOCATION = OUT.DIR:PACKAGE.NAME        SIZE = WTOT    END    RETURN*ADD.COMMANDS:       **    FOR CMDX = 1 TO DCOUNT( COMMANDS, @AM )        SCRIPT<-1> = COMMANDS<CMDX>    NEXT CMDX    RETURN*CHECK.DPOINTER:     * Check to see if the record contains a dpointer*    D.POINTER = FALSE    IF OCONV(REC<1>[1,1],'MCU') = "D" THEN        IF FILE.TYPE = "DICT" THEN            IF REC<2> MATCHES "3N0N" AND REC<3> MATCHES "1N0N" THEN                D.POINTER = TRUE            END        END    END    RETURN*PACK.FILE:    ARG.LIST = TRIM( FNAME )    BINARY = 1*    FILE.TYPE = 'DATA'    FILE.NAME = FIELD( ARG.LIST, ' ', 1 )    POS = 2    IF FILE.NAME = "DATA" OR FILE.NAME = "DICT" THEN        FILE.TYPE = FILE.NAME        FILE.NAME = FIELD( ARG.LIST, ' ', 2 )        POS = 3    END    IF FILE.TYPE = "DATA" THEN FILE.TYPE = ""*    OPEN FILE.TYPE,FILE.NAME TO PACK.FILE ELSE RETURN    PACK.FILE.ID = ''    IF FILE.TYPE # "" THEN PACK.FILE.ID = FILE.TYPE:"_"    IF FX.OVR THEN PACK.FILE.ID := 'O:'    PACK.FILE.ID := FILE.NAME**Packing PACK.FILE.ID*    IF INDEX(FILE.NAME,'BINARY:',1) THEN        HEX.MODE = 1    END ELSE HEX.MODE = 0    CHK.FILE.NAME = FILE.NAME    Count = 0    SELECT PACK.FILE    EOF = FALSE    PACK.REC = ""    DLIST = ""    SEPARATOR = @AM    LOOP        READNEXT CHK.REC.ID ELSE EOF = TRUE    UNTIL EOF DO        READ REC FROM PACK.FILE, CHK.REC.ID ELSE REC = ""*Remove db/widget user access data?        IF PKG$ACCESS.OPT # 1 THEN            IF FILE.NAME = 'MVDB.DEFS' THEN                REC<5> = ''                END ELSE IF FILE.NAME = 'MVDB.WIDGETS' THEN                    REC<2> = ''                END            END            GOSUB CHECK.DPOINTER            IF NOT( D.POINTER ) THEN                Count = Count + 1                IF HEX.MODE THEN                    REC = CHK.REC.ID:SEPARATOR:"0x":OCONV(REC,'MX0C')                END ELSE                    REC = CHK.REC.ID:SEPARATOR:"0c":REC                END                Length = OCONV( LEN(REC), 'MCDX' ) "R%6"                PACK.REC = PACK.REC:Length:REC            END ELSE                DLIST<-1> = CHK.REC.ID            END        REPEAT*        FOR D = 1 TO DCOUNT( DLIST, AM )*PRINT*PRINT "Item '":DLIST<D>:"' is a D-Pointer.  Not packed."        NEXT D        IF PACK.REC # "" THEN            WRITE PACK.REC ON TARGET.FILE, PACK.FILE.ID        END*PRINT PACK.FILE.ID:" packed.  ":Count:" records packed into ":PACK.FILE.ID        RETURN00029BSET.STATUS.CODE0c2SUBROUTINE SET.STATUS.CODE( STATUS.CODE )*********************************************************************** Copyright (C) 2020 Zumasys, Inc., All Rights Reserved** Written By   : Peter Schellenbach* Date Written : 04/21/2017* Description  : This program sets the response status code sent*                back to client. Successful requests should return*                status code 200 (this is the default). Status code*                500 indicates a generic server failure.*              **********************************************************************INCLUDE WBPD WWW.INCLUDESESSION$STATUS.CODE = STATUS.CODE*RETURN*0001E6WDB.TEST0c2INCLUDE WBPD WWW.INCLUDEPRINT "junk before content"PRINT CHAR(10)PRINT "Content-type: text/html"PRINT ""CALL WDB.VARS( VARS, VALS )PRINT "<pre>"PRINT "Vars: "FOR X = 1 TO DCOUNT(VARS, @AM)  PRINT VARS<X>:" = ":VALS<X>NEXT XPRINTFOR N = 45 TO 49  PRINT "WWW.INFO(":N:"): ":WWW.INFO(N)NEXT NPRINT "</pre>"PRINT '<form method="POST" action="/dbc/WDB.TEST">'PRINT '<input type="text" name="thing">'PRINT '<input type="submit" value="submit">'PRINT '</form>'*00019ACREATE.WEBSERVICE.PASSWORD0c2SUBROUTINE CREATE.WEBSERVICE.PASSWORD(PASSWORD,PASSTIME)* VALID PASSWORD IS THE SUM OF MMDDYY + SSMMHH (FROM PASSTIME)* INVERT THE TIME TO SSMMHHPASSTIME=OCONV(TIME(),'MTS')CONVERT ':' TO '' IN PASSTIMEEMITSSAP=''FOR TIME.I = 6 TO 1 STEP -1  EMITSSAP:=PASSTIME[TIME.I,1]NEXT TIME.IOTODAY=OCONV(DATE(),'D2-')CONVERT '-' TO '' IN OTODAYPASSWORD=OTODAY+EMITSSAPRETURNEND0040CBWDB.INIT0c2** Copyright (C) 2017 Zumasys, Inc., All Rights Reserved** Written by: Michael Derheim, Sierra Bravo* Date: 12/24/03* Description: This program is the man entry point for web transactions.** Modified By: Peter Schellenbach, Zumasys* Date: 06/12/2015* Description: Changed PROCREAD to use SENTENCE() in the ELSE clause.*              When reading MD PROC item, if its missing, read again*              with '.PROC' suffix on ID. This way we can keep the PROC*              in the MD as a flag that the function is allowed, but not*              require it in the MD, since jBASE does not place catalog*              items in the MD.** Modified by Mike Street of Zumasys 07-22-15 for UniData compatiblity:*   Change PROCREAD to use @SENTENCE in the ELSE clause** Modified By: Peter Schellenbach, Zumasys* Date: 07/28/2015* Description: UniData SYSTEM(19) replacement using DATE(), SYSTEM(12) & RND() to create unique ID** Modified By: Peter Schellenbach, Zumasys* Date: 10/25/2016* Description: This program was made more generic, so that it can serve*              as the main entry point for both MVDB and REST services.*              The MVDB specific code has been refactored into MVDB.INIT.*              A new WDB.RESOURCE file is used to determine supported*              resources and the name of the program to handle the resource.*              For example, the MVDB.MAIN record in the WDB.RESOURCE file*              defines MVDB.INIT as the handler for the MVDB.RESOURCE.**              Removed PROCREAD (and calling PROC from MD). Only use*              SENTENCE now.** Modified By: Peter Schellenbach, Zumasys* Date: 04/21/2017* Description: Updated to use CONFIG record in WDB.RESOURCE to** Modified By: Peter Schellenbach, Zumasys* Date: 06/16/2017* Description: For REST, separate header & request vars from rest of cgi vars.*              Fix VARS variable conflict in APPEND.REC to use QSTR and save*              QSTR in WDB.DEBUG record instead of VARS. Change program name*              in WDB.DEBUG record ID to RSRC.ID so MV.DEBUG can recreate the*              WDB.INIT command line.** Modified By: Peter Schellenbach, Zumasys* Date: 10/18/2017* Description: Save detailed debug info in WDB.DEBUG record to enable reproducing*              original environment when debugging requests.*              WDB.DEBUG: initialized from WDB.RESOURCE record attr 7, set when*              WDB.INIT should create debug records in WDB.DEBUG file for use by WDEBUG.*              WDEBUG.MODE: set if WDB.INIT is being called by WDEBUG instead of mvappsvr.** Modified By: Peter Schellenbach, Zumasys* Date: 11/29/2017* Description: Provide for execution of dashboard or REST service in a different*              account. New RSRC.ACCOUNT field added to WDB.RESOURCE records.*              Use LOGTO to switch accounts prior to executing the resource*              handler program.*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD FI.WDB.RESOURCEINCLUDE WBPD FI.WDB.DEBUG*MAT WWW.INFO = ''STATUS.CODE = 0LOGGING = 0LOG.REC = ''WDB.DEBUG = 0WDEBUG.MODE = 0*OPEN 'WDB.Q' TO Q ELSE  ERR = 'Cannot open Queue file'  GOSUB SEND.ERRORENDOPEN 'WDB.RESOURCE' TO F.RESOURCE ELSE  ERR = 'Cannot open resource file'  GOSUB SEND.ERROREND** Read and parse config settings**  Important config settings:*   LOGLEVEL - see below*   DEFAULT_HANDLER - if a "handler" is not included in RESOURCE.NAME, use this default handler*   DEFAULT_RESOURCE - if a "resource" is not included in RESOURCE.NAME, use this default resource**   Note: PATH_INFO is the part of the URL beginning with a forward slash (/) after the*   server/port and before the query string. It is interpreted as:*     /<handler>/<resource>/<REST parameter>/<another REST parameter> ...**   MVAppSvr will pass <handler>/<resource> as 2nd command line argument, unless the default*   handler is being used, then only <resource> is passed.*READ TEMPCONFIG FROM F.RESOURCE, 'CONFIG' ELSE TEMPCONFIG = ''NUMCONFIG = DCOUNT(TEMPCONFIG, @AM)CGI$CONFIG = ''CONFIGCNTR = 0FOR A = 2 TO NUMCONFIG  CONFIGNAME = TEMPCONFIG<A,1>  CONFIGVALUE = TEMPCONFIG<A,2>  IF CONFIGNAME <> '' THEN    LOCATE CONFIGNAME IN CGI$CONFIG<1,1> SETTING POS ELSE      CONFIGCNTR += 1      CGI$CONFIG<1,1,CONFIGCNTR> = CONFIGNAME    END    CGI$CONFIG<1,2,CONFIGCNTR> = CONFIGVALUE  ENDNEXT A** Get the logging level from config**  Log levels:*   0 - no logging*   1 - log errors*   2 - log all requests*   3 - log everything (debug mode)**  Log info is written to the WDB.LOG file. Requests and errors are logged*  using a unique ID.*SESSION$GLOBAL.DEBUG = 0LOCATE 'LOGLEVEL' IN CGI$CONFIG<1,1> SETTING POS THEN  TEMPVALUE = CGI$CONFIG<1,2,POS>  IF TEMPVALUE MATCHES '1N' THEN SESSION$GLOBAL.DEBUG = TEMPVALUE + 0ENDLOGGING = SESSION$GLOBAL.DEBUGIF LOGGING THEN  OPEN 'WDB.LOG' TO F.LOG ELSE LOGGING = 0END** Get default handler*DEFAULT.HANDLER = 'DBC' ;* ensure this is defined!LOCATE 'DEFAULT_HANDLER' IN CGI$CONFIG<1,1> SETTING POS THEN  DEFAULT.HANDLER = OCONV(CGI$CONFIG<1,2,POS>, 'MCU')END** Parse the command line*TCL.LINE = @SENTENCE ; *UD*RESOURCE.NAME = OCONV(FIELD(TCL.LINE, ' ', 2), 'MCU')INIT.VARS = FIELD(TCL.LINE, ' ', 3)VAR.STRING = FIELD(TCL.LINE, ' ', 4)XTRA.OPTS = FIELD(TCL.LINE, ' ', 5)*UNIQUE.ID = FIELD(INIT.VARS, '-', 1)ONCOM     = FIELD(INIT.VARS, '-', 2)COMCOUNT  = FIELD(INIT.VARS, '-', 3)** Get handler from RESOURCE.NAME argument*IF DCOUNT(RESOURCE.NAME, '/') = 2 THEN  HANDLER.NAME = OCONV(FIELD(RESOURCE.NAME, '/', 1), 'MCU')  RESOURCE.NAME = OCONV(FIELD(RESOURCE.NAME, '/', 2), 'MCU')END ELSE  HANDLER.NAME = DEFAULT.HANDLER  RESOURCE.NAME = OCONV(RESOURCE.NAME, 'MCU')END** Get the resource record from WDB.RESOURCE file*RSRC.ID = HANDLER.NAME:'*':RESOURCE.NAMEMAT RSRC.ITEM = ''MATREAD RSRC.ITEM FROM F.RESOURCE, RSRC.ID ELSE  IF HANDLER.NAME = DEFAULT.HANDLER THEN    MATREAD RSRC.ITEM FROM F.RESOURCE,RESOURCE.NAME ELSE NULL  ENDEND** Sort out the debug modes**  WDEBUG.MODE is set when the request was initiated by WDEBUG rather than web.*  WDB.DEBUG is set when the resource indicates to log debug info for web requests.*  WDEBUG.MODE and WDB.DEBUG are exclusive!*  SESSION$WDEBUG.MODE can be tested by resource handlers to break into debugger, or ???IF INDEX(XTRA.OPTS, '_WDEBUG_MODE_', 1) THEN WDEBUG.MODE = 1SESSION$WDEBUG.MODE = WDEBUG.MODEIF NOT(WDEBUG.MODE) THEN  WDB.DEBUG = RSRC.DEBUG.MODE  IF WDB.DEBUG THEN    OPEN 'WDB.DEBUG' TO F.WDB.DEBUG ELSE WDB.DEBUG = 0  ENDEND** Validate the resource - return error if invalid or disabled*IF (RSRC.TYPE = 'P') AND RSRC.ENABLED THEN  CGI.MODE = RSRC.PARSE.CGI  IF ONCOM = 1 AND VAR.STRING = '%%' THEN* READ VARS FROM STDIN INSTEAD OF COMMAND LINE    PROMPT ''    ECHO OFF    FOR ONCOM = 1 TO COMCOUNT      INPUT VAR.STRING      IF ONCOM < COMCOUNT THEN        GOSUB APPEND.REC      END    NEXT ONCOM    ECHO ON    ONCOM = COMCOUNT  END  IF (ONCOM = COMCOUNT) THEN    GOSUB APPEND.REC    IF LOGGING > 1 THEN      LOG.REC<1> = RESOURCE.NAME      LOG.REC<2> = DATE()      LOG.REC<3> = SYSTEM(12) ;* START TIME      LOG.REC<6> = COMCOUNT    END** Populate the vars and vals*    CGI$UNIQUE.ID = UNIQUE.ID    IF RSRC.PROGRAM <> '' THEN      CGI$RESOURCE.NAME = RSRC.PROGRAM    END ELSE      CGI$RESOURCE.NAME = RESOURCE.NAME    END    IF CGI.MODE THEN** Parse CGI, request & header variables*      CALL WDB.VARS(VARS, VALS)      LOCATE "APPSVR_ID" IN VARS SETTING POS THEN        CGI$APPSVR.ID = VALS<POS>        VARS = DELETE(VARS, POS, 0, 0)        VALS = DELETE(VALS, POS, 0, 0)      END ELSE        CGI$APPSVR.ID = ""      END      LOCATE "__body__" IN VARS SETTING POS THEN        CGI$BODY = VALS<POS>        VARS = DELETE(VARS, POS, 0, 0)        VALS = DELETE(VALS, POS, 0, 0)      END** Copy CGI variables to CGI$VARS/CGI$VALS and request & header variables to CGI$HEADERVARS/CGI$HEADERVALS*      REQUEST.VAR.NAMES = 'SIMPLEWEB_MODULE':@AM:'SIMPLEWEB_HANDLER':@AM:'REMOTE_ADDR':@AM:'REMOTE_HOST':@AM:'REMOTE_USER':@AM      REQUEST.VAR.NAMES := 'REQUEST_METHOD':@AM:'PROTOCOL_VERSION':@AM:'PATH_INFO':@AM:'CONTENT_TYPE':@AM:'SERVER_PORT':@AM:'INSTALL_PATH'      NUM.VARS = DCOUNT(VARS, @AM)      HDR.VAR.NUM = 1      CGI.VAR.NUM = 1      FOR Y = 1 TO NUM.VARS        IS.HDR.VAR = 0        VAR.NAME = VARS<Y>        IF VAR.NAME[1,5] = 'HTTP_' THEN          IS.HDR.VAR = 1        END ELSE          LOCATE VAR.NAME IN REQUEST.VAR.NAMES SETTING POS THEN IS.HDR.VAR = 1        END        IF IS.HDR.VAR THEN          CGI$HEADERVARS<HDR.VAR.NUM> = VAR.NAME          CGI$HEADERVALS<HDR.VAR.NUM> = VALS<Y>          HDR.VAR.NUM += 1        END ELSE          CGI$VARS<CGI.VAR.NUM> = VAR.NAME          CGI$VALS<CGI.VAR.NUM> = VALS<Y>          CGI.VAR.NUM += 1        END      NEXT Y** Load the Cookie variables and values*      LOCATE 'HTTP_COOKIE' IN VARS SETTING POS THEN        CSTRING = VALS<POS>      END ELSE CSTRING = ''      CONVERT ';' TO @AM IN CSTRING      NUM.COOKIES = DCOUNT(CSTRING, @AM)      FOR Y = 1 TO NUM.COOKIES        CGI$CVARS<Y> = TRIM(FIELD(CSTRING<Y>,'=',1))        CGI$CVALS<Y> = CSTRING<Y>[1 + COL2(),99999]      NEXT Y** Get server info*      LOCATE "HTTP_HOST" IN VARS SETTING POS THEN        CGI$SERVER.NAME = VALS<POS>      END ELSE CGI$SERVER.NAME = ""      LOCATE "SERVER_PORT" IN VARS SETTING POS THEN        CGI$SERVER.PORT = VALS<POS>      END ELSE CGI$SERVER.PORT = ""      IF CGI$SERVER.PORT = "" OR CGI$SERVER.PORT = "0" THEN        OPEN '','MVDB.CONTROL' TO F.MVDB.CONTROL THEN          READV TCP.PORT FROM F.MVDB.CONTROL, 'MVDB.SETTINGS', 4 ELSE TCP.PORT = ""        END        CGI$SERVER.PORT = TCP.PORT      END      IF CGI$SERVER.PORT # "" AND INDEX(CGI$SERVER.NAME, ':', 1) = 0 THEN CGI$SERVER.NAME := ":":CGI$SERVER.PORT ;*PJS 10-25-16* Only append port if its not already in the HTTP_HOST header      LOCATE "SIMPLEWEB_HANDLER" IN VARS SETTING POS THEN        CGI$PATH = VALS<POS>        IF CGI$PATH[1,1] # "/" THEN CGI$PATH = "/":CGI$PATH      END ELSE CGI$PATH = "/dbc"** Extract REST parameters*      LOCATE "PATH_INFO" IN VARS SETTING POS THEN        PATH = VALS<POS>        IF PATH[1,1] = '/' THEN PATH = PATH[2,9999]        Y = INDEX(PATH, '/', 2)        IF Y > 0 THEN          CGI$RESTPARAMS = PATH[Y + 1, 99999]          CONVERT '/' TO @AM IN CGI$RESTPARAMS        END      END    END** Clear the out buffer and set some generic vars*    SESSION$CONTENT.SENT = 0** LOGTO the account containing the resource, if not the current account*    IF RSRC.ACCOUNT <> '' THEN      IF OCONV(RSRC.ACCOUNT, 'MCU') = OCONV(@WHO, 'MCU') THEN        RSRC.ACCOUNT = ''      END ELSE        IF OCONV(RSRC.ACCOUNT, 'MCU') = OCONV(@PATH, 'MCU') THEN          RSRC.ACCOUNT = ''        END      END    END    IF RSRC.ACCOUNT <> '' THEN      ACCT.FROM = @PATH      EXECUTE 'LOGTO ':RSRC.ACCOUNT CAPTURING DUMMY      ACCT.TO = @PATH      IF ACCT.FROM = ACCT.TO THEN* LOGTO failed!               STATUS.CODE = 404        ERR = 'Resource account unavailable'        GOTO SEND.ERROR      END    END** Run the controller program for the resource*    PRINT    PRINT "700 WDB-START"    IF WDB.DEBUG THEN      EXECDUR = ''      IF RSRC.PROGRAM <> '' THEN        DBG.ID = 'R/':RSRC.PROGRAM:'/':UNIQUE.ID      END ELSE        DBG.ID = 'R/':RSRC.CONTROLLER:'/':UNIQUE.ID      END      GOSUB CREATE.DEBUG.REC      EXECSTART = SYSTEM(12)      EXECUTE RSRC.CONTROLLER:' ':UNIQUE.ID CAPTURING RESPONSE      EXECDUR = SYSTEM(12) - EXECSTART      DELETE F.WDB.DEBUG, DBG.ID      DBG.ID = 'C':DBG.ID[2, LEN(DBG.ID)]      GOSUB UPDATE.DEBUG.REC      N = DCOUNT(RESPONSE, @AM)      FOR I = 1 TO N        PRINT RESPONSE<I>      NEXT I    END ELSE      EXECUTE RSRC.CONTROLLER:' ':UNIQUE.ID    END** Wrap up*    * this call has been moved to MVDB.INIT: CALL WEB.FLUSH    PRINT "800 WDB-COMPLETE"    DELETE Q, UNIQUE.ID    IF LOGGING > 1 THEN      LOG.REC<4> = SYSTEM(12) ;* END TIME      LOG.REC<5> = LOG.REC<4> - LOG.REC<3>      LOG.REC<7> = 1 ;* this is a request      GOSUB UPDATE.LOG    END  END ELSE    GOSUB APPEND.REC    PRINT    PRINT "700 WDB-START"    PRINT "800 WDB-COMPLETE"  ENDEND ELSE  IF (ONCOM = COMCOUNT) OR (ONCOM = 1 AND VAR.STRING = '%%') THEN* Final (or only) command part has been received - log the error now    IF LOGGING THEN      LOG.REC<1> = RESOURCE.NAME      LOG.REC<2> = DATE()      LOG.REC<3> = SYSTEM(12)      LOG.REC<6> = COMCOUNT      LOG.REC<7> = 2 ;* this is an error      BEGIN CASE        CASE RSRC.TYPE = ''          LOG.REC<8> = 'Undefined resource'        CASE RSRC.TYPE <> 'P'          LOG.REC<8> = 'Invalid resource'        CASE NOT(RSRC.ENABLED)          LOG.REC<8> = 'Disabled resource'        CASE 1          LOG.REC<8> = 'Unknown error'      END CASE      GOSUB UPDATE.LOG    END    STATUS.CODE = 404    ERR = 'Invalid Resource'    GOSUB SEND.ERROR  END ELSE    PRINT    PRINT "700 WDB-START"    PRINT "800 WDB-COMPLETE"  ENDENDSTOP*SEND.ERROR:*PRINT "700 WDB-START"IF STATUS.CODE > 0 THEN  PRINT 'X-MVDB-STATUS: ':STATUS.CODEENDPRINT '500 ERROR ':ERRPRINT "800 WDB-COMPLETE"STOP*----------APPEND.REC:*----------READU QSTR FROM Q, UNIQUE.ID ELSE QSTR = ''QSTR<ONCOM> = VAR.STRINGWRITE QSTR ON Q, UNIQUE.IDRETURN*----------UPDATE.LOG:*----------*UD*LOG.ID = SYSTEM(19)LOG.ID = (DATE() 'R%5'):(SYSTEM(12) 'R%8'):(RND(1000) 'R%4') ;*UD* we need a unique ID (this is not guaranteed unique, but should suffice)WRITE LOG.REC ON F.LOG, LOG.IDRETURN*----------CREATE.DEBUG.REC:*----------DBGREC = ''DBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_PORT> = FIELD(OCONV('','U50BB'),' ',1) ;*PortDBGREC<WDBG_HANDLER> = HANDLER.NAMEDBGREC<WDBG_RESOURCE> = RESOURCE.NAMEDBGREC<WDBG_CONTROLLER> = RSRC.CONTROLLERDBGREC<WDBG_PROGRAM> = RSRC.PROGRAMDBGREC<WDBG_REQUEST_ID> = UNIQUE.IDLOCATE "REQUEST_METHOD" IN VARS SETTING POS THEN  DBGREC<WDBG_METHOD> = VALS<POS>ENDLOCATE "PATH_INFO" IN VARS SETTING POS THEN  DBGREC<WDBG_PATH> = VALS<POS>ENDLOCATE "REMOTE_ADDR" IN VARS SETTING POS THEN  DBGREC<WDBG_REMOTE_ADDR> = VALS<POS>END* save headers variablesDBGREC<WDBG_HEADER_VARS> = LOWER(CGI$HEADERVARS)DBGREC<WDBG_HEADER_VALS> = LOWER(CGI$HEADERVALS)IF CGI$APPSVR.ID <> '' THEN  N = DCOUNT(DBGREC<WDBG_HEADER_VARS>, @VM) + 1  DBGREC<WDBG_HEADER_VARS, N> = 'APPSVR_ID'  DBGREC<WDBG_HEADER_VALS, N> = CGI$APPSVR.IDEND* save form variablesDBGREC<WDBG_CGI_VARS> = LOWER(CGI$VARS)DBGREC<WDBG_CGI_VALS> = LOWER(CGI$VALS)* Request bodyDBGREC<WDBG_BODY> = CHANGE(CHANGE(CGI$BODY, CHAR(13), ''), CHAR(10), @VM)* Session variablesTEMPVARS = OCONV(CGI$CVARS, 'MCU')LOCATE 'SESSIONID' IN TEMPVARS SETTING POS THEN  SID = CGI$CVALS<POS>  SREC = ''  OPEN 'WEB.SESSION' TO F.WEB.SESSION THEN    READ SREC FROM F.WEB.SESSION, SID ELSE NULL  END  DBGREC<WDBG_SESSION_ID> = SID  DBGREC<WDBG_SESSION_VARS> = SREC<1>  DBGREC<WDBG_SESSION_VALS> = SREC<2>  DBGREC<WDBG_SESSION_DATE> = SREC<3>  DBGREC<WDBG_SESSION_TIME> = SREC<4>END* save debug info before processing requestWRITE DBGREC ON F.WDB.DEBUG, DBG.IDRETURN*----------UPDATE.DEBUG.REC:*----------DBGREC<WDBG_DATE> = DATE()DBGREC<WDBG_TIME> = TIME()DBGREC<WDBG_DURATION> = EXECDURIF STATUS.CODE > 0 THEN DBGREC<WDBG_STATUS> = STATUS.CODE ELSE DBGREC<WDBG_STATUS> = 200* save response headersNUM.VARS = 0EOH = INDEX(RESPONSE, @AM:@AM, 1) ;* headers end at first blank line in responseIF EOH = 0 THEN EOH = LEN(RESPONSE) + 1N = DCOUNT(RESPONSE[1, EOH - 1], @AM)FOR I = 1 TO N  HDR.LINE = RESPONSE<I>  HDR.VAR = FIELD(HDR.LINE, ':', 1)  HDR.VAL = TRIMF(HDR.LINE[COL2() + 1, LEN(HDR.LINE)])  M = LEN(HDR.VAR)  FOR J = 1 TO M    IF NOT(HDR.VAR[J,1] MATCHES '1A') AND HDR.VAR[J,1] <> '-' THEN      HDR.VAR = ''      EXIT    END  NEXT J  IF HDR.LINE[LEN(HDR.VAR) + 1, 1] <> ':' THEN HDR.VAR = ''  IF HDR.VAR = '' THEN    NUM.VARS += 1    DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = '_BAD_'    DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.LINE ;* invalid header line!  END ELSE    NUM.VARS += 1    DBGREC<WDBG_RESPONSE_VARS, NUM.VARS> = HDR.VAR    DBGREC<WDBG_RESPONSE_VALS, NUM.VARS> = HDR.VAL  ENDNEXT I* save response contentIF EOH + 2 <= LEN(RESPONSE) THEN  DBGREC<WDBG_RESPONSE_CONTENT> = LOWER(RESPONSE[EOH + 2, LEN(RESPONSE)])ENDWRITE DBGREC ON F.WDB.DEBUG, DBG.IDRETURN*END0002D0SUB.GET.NEXT.ID0c2SUBROUTINE SUB.GET.NEXT.ID(NewID,F.CONTROL)** Copyright (c) 2020 Zumasys, Inc. All rights reserved.* Description: generate a (probably) unique ID based on current time, date and counter** Pass MVDB.CONTROL file variable, returns new ID* Up to 10,000 IDs can be generated per second without collision* Returned ID format: YYYYMMDDHHMMSSNNNN*D = DATE()T = TIME()HHMMSS = OCONV(OCONV(T,'MTS'),'MCN')YYYY = OCONV(D,'DY')IF LEN(YYYY) < 4 THEN YYYY=YYYY+2000MM = OCONV(D,'DM') 'R%%'DD = OCONV(D,'DD') 'R%%'CTR = 1READVU CTR FROM F.CONTROL,'NEXT.ID.COUNTER',1 ELSE CTR = 1ENDWRITE CTR+1 ON F.CONTROL,'NEXT.ID.COUNTER' ON ERROR NULLENDNewID = YYYY:MM:DD:HHMMSS:(CTR 'R%%%%')RETURNEND0002A6SUB.LOG.DEBUG.INFO0c2SUBROUTINE SUB.LOG.DEBUG.INFO(WIDGET.NAME,MESSAGE)** Copyright (c) 2020 Zumasys, Inc. All rights reserved.** Pass widget name and message to log. When widget is placed in debug mode,* up to 100 lines of log content are displayed.*EQU MAX.LINES TO 100*OPEN 'WDB.DEBUG' TO F.WDB.DEBUG THEN  READ EXTRA.INFO FROM F.WDB.DEBUG,WIDGET.NAME ELSE EXTRA.INFO = ''  EXTRA.INFO<-1> = TIMEDATE():' ':MESSAGE  N = DCOUNT(EXTRA.INFO,@AM)  IF N > MAX.LINES THEN    * DISCARD ALL EXCEPT LAST 100 LINES    M = N - MAX.LINES    K = INDEX(EXTRA.INFO,@AM,M)    EXTRA.INFO = EXTRA.INFO[K+1,999999]  END  WRITE EXTRA.INFO ON F.WDB.DEBUG,WIDGET.NAMERETURNEND000677REBUILD.URL.STRING0c2SUBROUTINE REBUILD.URL.STRING(URL.STRING)* 12-15-15* 9-23-16 TPARKER - LOGIC TOTALLY REWRITTENINCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDEURL.STRING=''*** NEED CGI$VARS ALPHABETIZED TO INSURE URL ALWAYS IN SAME ORDER** BUT EXCLUDE THOSE ADDED BY MVAPPSVR*MAX.VARS=DCOUNT(CGI$VARS,@AM)ALPHA.VARS=''ALPHA.VALS=''FOR VAR.CNTR = 1 TO MAX.VARS   var=CGI$VARS<VAR.CNTR>   BEGIN CASE      CASE var = 'SIMPLEWEB_MODULE'; var=''      CASE var = 'REMOTE_ADDR'; var=''      CASE var = 'REMOTE_HOST'; var=''      CASE var = 'REMOTE_USER'; var=''      CASE var = 'REQUEST_METHOD'; var=''      CASE var = 'PROTOCOL_VERSION'; var=''      CASE var = 'HTTP_REFERER'; var=''      CASE var = 'HTTP_USER_AGENT'; var=''      CASE var = 'HTTP_HOST'; var=''      CASE var = 'HTTP_ACCEPT'; var=''      CASE var = 'HTTP_COOKIE'; var=''      CASE var = 'HTTP_CONNECTION'; var=''      CASE var = 'SIMPLEWEB_HANDLER'; var=''      CASE var = 'PATH_INFO'; var=''      CASE var = 'CONTENT_TYPE'; var=''      CASE var = 'SERVER_PORT'; var=''      CASE var = 'INSTALL_PATH'; var=''      CASE var = 'APPSVR_ID'; var=''      CASE var = '__body__'; var=''      CASE 1; NULL   END CASE   IF var <> '' THEN      val=CGI$VALS<VAR.CNTR>      LOCATE var IN ALPHA.VARS BY "AL" SETTING POS ELSE NULL      ALPHA.VARS=INSERT(ALPHA.VARS,POS,0,0,var)      ALPHA.VALS=INSERT(ALPHA.VALS,POS,0,0,val)    END NEXT VAR.CNTRMAX.VAR.CNTR=DCOUNT(ALPHA.VARS,@AM)FOR VAR.CNTR = 1 TO MAX.VAR.CNTR   var=ALPHA.VARS<VAR.CNTR>   val=ALPHA.VALS<VAR.CNTR>   URL.STRING:='&':var:'=':val NEXT VAR.CNTRURL.STRING=URL.STRING[2,999999]RETURNEND0023EFMVDB.INIT0c2*** Copyright (C) 2020 Zumasys, Inc., All Rights Reserved* Description: perform common dashboard startup functions** 9-23-16 TPARKER MODIFICATIONS TO ELIMINATE GO_BACK AND REPLACE WITH*         STANDARD BROWSER BACK BUTTION** 10-25-16 Peter Schellenbach - moved this out of INIT.WWW and into*          this new MVDB.INIT program to handle all MVDB-specific*          initialization, then launch individual MVDB resource*          programs (MVDB.MAIN, MVDB.ADMIN, MVDB.WEB.ED).**          Additional browser back button fixes:*            - do not save and restore SESSION as this reflects the login status*              and after a logout, using browser back and forward, then logging*              back in may cause unexpected logout by using browser back or forward.*              Only current_db is restored when backing up.*            - push current state before letting MVDB.MAIN process the request.*              Since any Go button click or link click only affects a single widget,*              only WIDGET.USER.DATA for that specific needs to be pushed. The widget*              can be identified by examining CGI variables 'sw' and 'udview' at the*              next level. We do not know which widget state to save at level 'n'*              until we receive a request for level 'n+1' which specifies user input*              or drilldown for a specific widget. At this time the widget state*              is saved for the previous stack level.*            - no need to save and restore CGI variables, as these are all supplied*              in the query string in the URL, and when going back up the stack,*              the URL and query string matches the stack, so the CGI variables*              are identical.*            - include the PATH_INFO in the URL when pushing on stack, since we*              need to handle other resources (MVDB.ADMIN, MVDB.WEB.ED) besides*              MVDB.MAIN.*EQU AM TO CHAR(254), VM TO CHAR(253), SVM TO CHAR(252)*INCLUDE WBPD WWW.INCLUDEINCLUDE WBPD MVDB.INCLUDE*OPEN 'WEB.SESSION' TO F.WEB.SESSION ELSE STOP 201, 'WEB.SESSION'OPEN 'WEB.FORMS' TO F.WEB.FORMS ELSE STOP 201, 'WEB.FORMS' ;** this is in /WWW/ common **OPEN 'MVDB.UDATA' TO F.MVDB.UDATA ELSE STOP 201, 'MVDB.UDATA'*IF CGI$RESOURCE.NAME = '' THEN CGI$RESOURCE.NAME = 'MVDB.MAIN' ;* safe default*MAT GLOBAL.INFO = ''** Combine headers & cgi vars (MVDB programs don't use CGI$HEADERVARS/CGI$HEADERVALS*IF CGI$HEADERVARS <> "" THEN  IF CGI$VARS = "" THEN    CGI$VARS = CGI$HEADERVARS    CGI$VALS = CGI$HEADERVALS  END ELSE    NUM.HDR.VARS = COUNT(CGI$HEADERVARS, @AM)    NUM.HDR.VALS = COUNT(CGI$HEADERVALS, @AM)    IF NUM.HDR.VARS >= NUM.HDR.VALS THEN      * Since there may be missing (null) vals at end of CGI$HEADERVALS,      * add appropriate number of @AM to keep vars & vals in sync!      CGI$VARS = CGI$HEADERVARS : @AM : CGI$VARS      CGI$VALS = CGI$HEADERVALS : STR(@AM, NUM.HDR.VARS - NUM.HDR.VALS + 1) : CGI$VALS    END  ENDEND** Validate the HTTP method*METHOD = 'UNKNOWN'LOCATE "REQUEST_METHOD" IN CGI$VARS SETTING POS THEN METHOD = OCONV(CGI$VALS<POS>, 'MCU')IF METHOD <> 'GET' AND METHOD <> 'POST' THEN  PRINT '500 ERROR Unsupported HTTP Method ':METHOD  STOPEND** Load the session ID if there is one*CALL GET.SESSION.ID(SESSION$ID, CGI$VARS, CGI$VALS)IF (SESSION$ID = '') THEN  CALL CREATE.SESSION(SESSION$ID)  CALL SET.COOKIE("sessionid=":SESSION$ID)END** How many active users are online?*SELECT F.WEB.SESSIONUSER.COUNT = 0LOOP  READNEXT WSID ELSE EXIT  READ SREC FROM F.WEB.SESSION, WSID ELSE CONTINUE  LOCATE "userid" IN SREC<1> SETTING UPOS THEN USER.COUNT += 1REPEATPRINT "Client-Count: ":USER.COUNT** Browser "back" button handler*READ DD.STACK FROM F.MVDB.UDATA, SESSION$ID:'$DD.STACK' ELSE DD.STACK=''NEW.STACK.ITEM = 1MAX.DDS = 0CALL REBUILD.URL.STRING(URL.STRING)LOCATE "PATH_INFO" IN CGI$VARS SETTING POS THEN  URL.PATH =  CGI$VALS<POS>  IF URL.PATH = "" OR URL.PATH = "/" THEN URL.PATH = CGI$PATH:"/MVDB.MAIN"  IF URL.PATH[1,1] # "/" THEN URL.PATH = "/":URL.PATHEND ELSE URL.PATH = "/dbc/MVDB.MAIN"URL = URL.PATH:'?':URL.STRING**W$GOBACK=0***CALL SUB.LOG.DEBUG.INFO('MVDB.INIT','BEGIN REQUEST, SESSION=':SESSION$ID:' URL=':URL:' CUR STACK LEVEL=':DCOUNT(DD.STACK,AM):' METHOD=':METHOD)*IF DD.STACK <> '' THEN  MAX.DDS = DCOUNT(DD.STACK,AM)  IF INDEX(DD.STACK,URL,1) THEN    DD.POS = MAX.DDS    LOOP      IF DD.POS THEN        IF URL = DD.STACK<DD.POS> THEN          NEW.STACK.ITEM = 0        END      END    UNTIL NOT(DD.POS) OR NOT(NEW.STACK.ITEM) DO      DD.POS = DD.POS - 1    REPEAT    IF DD.POS THEN*** BACK BUTTON USED SO POP OFF PREVIOUS DRILLDOWNS*      GOSUB PURGE.URLS.AFTER.BACK      READ GUD FROM F.MVDB.UDATA, SESSION$ID:'$DD.':DD.POS:'.GUD' ELSE GUD=''      WRITE GUD ON F.MVDB.UDATA, SESSION$ID:'$UG'      READ WUD FROM F.MVDB.UDATA, SESSION$ID:'$DD.':DD.POS:'.WUD' ELSE WUD = ''      URL.WIDGET = WUD<1>      IF URL.WIDGET <> 'NULL' THEN        WRITE DELETE(WUD,1,0,0) ON F.MVDB.UDATA, SESSION$ID:'$':URL.WIDGET      END      READ SESSION FROM F.MVDB.UDATA, SESSION$ID:'$DD.':DD.POS:'.SESSION' ELSE SESSION=''      LOCATE "userid" IN SESSION<1> SETTING POS THEN userid = SESSION<2,POS> ELSE userid = ''      IF userid <> '' THEN* Restore current dashboard from drilldown stack, but leave other session variables alone        LOCATE "current_db" IN SESSION<1> SETTING POS THEN current_db = SESSION<2,POS> ELSE current_db = ''        CALL PUT.SESSION.VAR("current_db", current_db)      END**        W$GOBACK=1    END  ENDEND*IF NEW.STACK.ITEM THEN* POST-REDIRECT-GET pattern causes extra GET after POST, but only* the GET is on browser history, so skip duplicate URLs based on* special CGI variables 'dblogin' and 'dbprg' (note: dbprg is not* being used at this time).  LOCATE "dblogin" IN CGI$VARS SETTING POS THEN dblogin = CGI$VALS<POS> ELSE dblogin = 0  LOCATE "dbprg" IN CGI$VARS SETTING POS THEN dbprg = CGI$VALS<POS> ELSE dbprg = 0  IF NOT(dblogin) AND NOT(dbprg) THEN* Push the new URL and session state onto the stack    MAX.DDS += 1    DD.STACK<MAX.DDS> = URL* Save global user before running request    READ GUD FROM F.MVDB.UDATA, SESSION$ID:"$UG" ELSE GUD = ''    WRITE GUD ON F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS:'.GUD'* Get widget name from request CGI variables & save widget user data before running request    GOSUB GET.URL.WIDGET    IF URL.WIDGET = '' THEN      DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS-1:'.WUD'    END ELSE      READ WUD FROM F.MVDB.UDATA, SESSION$ID:'$':URL.WIDGET ELSE WUD = ''      WRITE INSERT(WUD,1,0,0,URL.WIDGET) ON F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS-1:'.WUD'    END    READ SESSION FROM F.WEB.SESSION, SESSION$ID ELSE SESSION = ''    IF SESSION = '' THEN      DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS:'.SESSION'    END ELSE      WRITE SESSION ON F.MVDB.UDATA, SESSION$ID:'$DD.':MAX.DDS:'.SESSION'    END  ENDENDIF DD.STACK = '' THEN  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.STACK'END ELSE  WRITE DD.STACK ON F.MVDB.UDATA, SESSION$ID:'$DD.STACK'END** Run the MVDB program for this resource and check for failure*LOOP  TRY.AGAIN = 0  APP.FAILURE = 0  EXECUTE CGI$RESOURCE.NAME  IF GLOBAL.INFO(100) # 1 THEN* The dashboard controller quit unexpectedly. If there is a running* widget, it is likely causing the failure. Fail it, and try again.    APP.FAILURE = 1    CALL GET.SESSION.VAR("running_widget",FAILED.WIDGET)    IF FAILED.WIDGET # "" THEN      CALL PUT.SESSION.VAR("running_widget","")      CALL GET.SESSION.VAR("failed_widgets",FAILED.WIDGETS)      LOCATE FAILED.WIDGET IN FAILED.WIDGETS SETTING FWPOS ELSE        FAILED.WIDGETS<-1> = FAILED.WIDGET        CALL PUT.SESSION.VAR("failed_widgets",FAILED.WIDGETS)        TRY.AGAIN = 1      END    END    LOCATE "unfail_widget" IN CGI$VARS SETTING DPOS THEN      CGI$VARS = DELETE( CGI$VARS, DPOS, 0, 0 )      CGI$VALS = DELETE( CGI$VALS, DPOS, 0, 0 )    END  ENDWHILE TRY.AGAIN DO REPEATIF APP.FAILURE THEN  CALL WEB.SEND("An application error occured in program ":CGI$RESOURCE.NAME:".<hr>")  HTML = '<table><tr><th>Variable</th><th>Value</th></tr>'  FOR X = 1 TO DCOUNT( CGI$VARS, @AM )    HTML<-1> = '<tr><td>':CGI$VARS<X>:'</td><td>':CGI$VALS<X>:'</td></tr>'  NEXT X  HTML<-1> = '</table>'  CALL WEB.SEND(HTML)END* Final WEB.FLUSH call moved from WDB.INIT to here (makes deploying MVConnect to other accounts simpler)CALL WEB.FLUSH** Done*STOP** SUPPORT ROUTINES FOR BACK BUTTON HANDLER*PURGE.URLS.AFTER.BACK:*FIRST.PURGE = DD.POS + 1IF FIRST.PURGE > MAX.DDS THEN RETURNFOR PURGE.CNTR = MAX.DDS TO FIRST.PURGE STEP -1  DD.STACK = DELETE(DD.STACK,PURGE.CNTR,0,0)  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':PURGE.CNTR:'.GUD'  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':PURGE.CNTR:'.WUD'  DELETE F.MVDB.UDATA, SESSION$ID:'$DD.':PURGE.CNTR:'.SESSION'NEXT PURGE.CNTRRETURN*GET.URL.WIDGET:*URL.WIDGET='NULL'LOCATE "sw" IN CGI$VARS SETTING POS THEN  URL.WIDGET = CGI$VALS<POS>END ELSE  LOCATE "udview" IN CGI$VARS SETTING POS THEN    URL.WIDGET = CGI$VALS<POS>  ENDENDRETURN*END000103SWAP0c2SUBROUTINE SWAP(string,SUB1,SUB2)**#MAKE# RL $OPTIONS D3IDX.POS = 1LOOP  POS = INDEX( string, SUB1, IDX.POS )WHILE POS DO  string = string[1,POS-1]:SUB2:string[POS+LEN(SUB1),LEN(string)]  IDX.POS = IDX.POS + COUNT(SUB2,SUB1)REPEATRETURNEND016F3DMVBP.FORMS0c0016F29listpeqs.html0c2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Print Queue</title><style type="text/css">html {margin:0;padding:0;}body{margin:0;padding:0;font-family:Arial, Helvetica, sans-serif;font-size:12px;background: url(/db/images/background_body.gif) 0 0 repeat-x;}/* *html body {height:100%;}*/body.popup{margin:5px 5px 5px 5px;}p, td, th{font-size:1em;}pre {font-size:1em;}#container {position:relative;margin:0 auto;padding:15px 20px 0 20px;}#header {}#maincontent{background: url(/db/images/background_maincontent.gif) 0 0 no-repeat;padding:0 0 0 20px;margin:0 0 0 0;position:relative;}#content {background: url(/db/images/background_maincontent.gif) 100% 0 no-repeat;padding:5px 20px 50px 0;position:relative;min-height:320px;_height:320px;}/* =HEADER STYLES=================================================================*/#header #navbar {position:absolute;top:0;right:-1px;height:30px;list-style:none;margin:0;padding:0 5px 0 0;background: url(/db/images/background_navbar.gif) 0 0 repeat-x;}#header #navbar li {height:10px;float:left;position:relative;}#header #navbar li.myreports {background: url(/db/images/background_navbarleft.gif) 0 0 no-repeat;padding-left:15px;}#header #navbar li.completed {background: url(/db/images/background_navbarright.gif) 100% 0 no-repeat;padding-right:15px;}#header #navbar li.admin {background: url(/db/images/background_tabfirst.gif) 0 12px no-repeat;padding-left:15px;}#header #navbar li.admin a{background: url(/db/images/background_tabfirst.gif) 100% 12px no-repeat;margin:0;padding:7px 12px 0 3px;line-height:24px;height:24px;color: #333333;}#header #navbar li.profile {background: url(/db/images/background_tabfirst.gif) 0 12px no-repeat;padding-left:15px;}body.admin #header #navbar li.profile {background: url(/db/images/background_tab.gif) 0 12px no-repeat;}#header #navbar li.profile a{background: url(/db/images/background_tabright.gif) 100% 12px no-repeat;padding:7px 15px 0 0;margin:0;line-height:24px;height:24px;color: #333333;}#header #navbar li a {float:left;height:32px;line-height:32px;margin:0;padding: 0 8px;text-decoration:none;}#header #navbar li a:hover {text-decoration:underline}#header #navbar li.active a {background: url(/db/images/background_navbaractive.gif) 50% 0 no-repeat;height:30px;font-weight:normal;}#header #navbar a {color: #FFFFFF;}#header #logo {position:absolute;left:10px;top:20px;}#header #welcome {position:absolute;right:15px;top:40px;font-size:.9em;color:#333333;}#errors, #messages {padding:20px 20px 20px 40px;border:1px solid #CCCCCC;background: #EEEEEE;clear:both;margin-bottom:40px;position:relative;}/* =FOOTER STYLES=================================================================*/#footer {text-align:center;font-size:.8em;color: #999999;clear:both;}#footer a {color: #999999;text-decoration:none;}/* =HEADER STYLES=================================================================*/h1 {font-weight:normal;font-size:26px;letter-spacing:-1px;margin:0 0 10px 0;}h2 {font-size:22px;margin:10px 0 0 0;font-weight:normal;}h3 {margin:15px 0 5px 0;font-weight:normal;font-size:16px;border-bottom: 1px solid #999999;position:relative;}h4 {margin:0;font-weight:normal;font-size:12px;}/* =BASIC STYLES=================================================================*/p{margin: 0 0 10px 0;line-height:1.3em;}label{font-weight:bold;}/* =TABLE STYLES=================================================================*/.listing{border:1px solid #cccccc;border-collapse:collapse;clear: both;width:100%;margin: 0 0 5px 0;}.listing th, .form .listing th {background-color:#cccccc;padding:5px;text-align:left;vertical-align:top;border-bottom: 1px solid #cccccc;color: #333333;}table.sortable th a{color: #333333;text-decoration:none;}.listing td, .form .listing td{padding:5px;border-bottom:1px solid #cccccc;vertical-align:top;}.even td, .even th{background: #EEEEEE;}.odd td, .odd th{background: #FFFFFF;}.even .odd th, .even .odd td {background: #FFFFFF;}fieldset {padding:0 10px 10px 10px;margin: 0 0 10px 0;position:relative;}legend {margin-top:5px;font-size:22px;margin-bottom:10px;font-weight:normal;color: #000000;letter-spacing:-1px;}.form {border-collapse:collapse;margin: 0;padding: 0;}.form th{text-align:right;padding:5px 0 5px 5px;background:none;vertical-align:top;}.form td{text-align:left;padding:3px;vertical-align:top;}span.button button {background: url(/db/images/background_button.gif) 100% 0 no-repeat;border:none;padding:0 5px 0 0;height:23px;color:#333333;}span.button {background: url(/db/images/background_button.gif) 0 0 no-repeat;padding: 0 0 0 5px;}html>body span.button {padding: 5px 0 5px 5px;}input.text {border: 1px solid #999999;}input.date {width:55px;background: url(/db/images/icon_calendar.gif) 2px 50% no-repeat;padding-left:20px;border: 1px solid #999999;}/* =PAGING STYLES=================================================================*/.paging{text-align:right;}.wizardtab {position:relative;}.tabnav {text-align:right;padding-top:10px;}.note {font-size:smaller;color: #666666;margin:0;}a:link, a:visited {text-decoration: underline;color: #ff8125;}a:hover {text-decoration: underline;color: #333;}a img {border:none;}#printqueue tr:hover td, #printqueue tr.hover td {background:#CCCCCC;}#printqueue tr:hover .preview, #printqueue tr.hover .preview {display:block;z-index:200;}.preview {position:absolute;right:25px;top:25px;margin-top:-5px;border-top:1px solid #666666;border-right:1px solid #666666;border-left:1px solid #666666;font-size:.8em;padding:20px 20px 10px 20px;background: url(/db/images/background_preview.gif) 0 100% repeat-x;display:none;_width: 60em;min-width:60em;}a.thumbnail pre {float:left;margin:5px;border-top:1px solid #666666;border-right:1px solid #666666;border-left:1px solid #666666;font-size:4px;padding:5em 5em 4em 5em;background: url(/db/images/background_preview.gif) 0 100% repeat-x;position:relative;}a.thumbnail {text-decoration:none;color:#666666;}a.thumbnail:hover {color:#000000}.queued td{background:#FFCC33;}div.page {background: #FFFFFF;border-top:1px solid #BBBBBB;border-right:1px solid #999999;border-left:1px solid #333333;border-bottom:1px solid #000000;margin:10px 0;padding:20px;float:left;clear:both;_width:60em;min-width:60em;font-size:.9em;}.printDialog {position:absolute; top:5px; right:0; width:220px; background:#FFFFFF; border: 1px solid #CCCCCC; border-top:none;}.printDialog div {padding:0 5px 5px 5px;}.even .printDialog {background: #EEEEEE;}tr.hover .printDialog, tr:hover .printDialog {background:#CCCCCC;z-index:201;}#alerts {margin: 50px 0 -30px 0;}form {margin: 0;padding: 0;}#search_box {margin: 0;position: absolute;top: 20px;right: 20px;text-align: right;}</style><script><!--var BaseURL = "/";--></script><script type="text/javascript" language="javascript">/*Behaviour v1.1 by Ben Nolan, June 2005. Based largely on the workof Simon Willison (see comments by Simon below).Description:Uses css selectors to apply javascript behaviours to enableunobtrusive javascript in html documents.Usage:   var myrules = {'b.someclass' : function(element){element.onclick = function(){alert(this.innerHTML);}},'#someid u' : function(element){element.onmouseover = function(){this.innerHTML = "BLAH!";}}};Behaviour.register(myrules);License:My stuff is BSD licensed. Not sure about Simon's.More information:http://ripcord.co.nz/behaviour/*/   var Behaviour = {list : new Array,register : function(sheet){Behaviour.list.push(sheet);},start : function(){Behaviour.addLoadEvent(function(){Behaviour.apply();});},apply : function(){for (h=0;sheet=Behaviour.list[h];h++){for (selector in sheet){list = document.getElementsBySelector(selector);if (!list){continue;}for (i=0;element=list[i];i++){sheet[selector](element);}}}},addLoadEvent : function(func){var oldonload = window.onload;if (typeof window.onload != 'function') {window.onload = func;} else {window.onload = function() {oldonload();func();}}}}Behaviour.start();/*The following code is Copyright (C) Simon Willison 2004.document.getElementsBySelector(selector)- returns an array of element objects from the current documentmatching the CSS selector. Selectors can contain element names, class names and ids and can be nested. For example:elements = document.getElementsBySelect('div#main p a.external')Will return an array of all 'a' elements with 'external' in their class attribute that are contained inside 'p' elements that are contained inside the 'div' element which has id="main"New in version 0.4: Support for CSS2 and CSS3 attribute selectors:See http://www.w3.org/TR/css3-selectors/#attribute-selectorsVersion 0.4 - Simon Willison, March 25th 2003-- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows-- Opera 7 fails */function getAllChildren(e) {return e.all ? e.all : e.getElementsByTagName('*');}document.getElementsBySelector = function(selector) {if (!document.getElementsByTagName) {return new Array();}var tokens = selector.split(' ');var currentContext = new Array(document);for (var i = 0; i < tokens.length; i++) {token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;if (token.indexOf('#') > -1) {var bits = token.split('#');var tagName = bits[0];var id = bits[1];var element = document.getElementById(id);if (tagName && element.nodeName.toLowerCase() != tagName) {return new Array();}currentContext = new Array(element);continue; // Skip to next token}if (token.indexOf('.') > -1) {var bits = token.split('.');var tagName = bits[0];var className = bits[1];if (!tagName) {tagName = '*';}var found = new Array;var foundCount = 0;for (var h = 0; h < currentContext.length; h++) {var elements;if (tagName == '*') {elements = getAllChildren(currentContext[h]);} else {elements = currentContext[h].getElementsByTagName(tagName);}for (var j = 0; j < elements.length; j++) {found[foundCount++] = elements[j];}}currentContext = new Array;var currentContextIndex = 0;for (var k = 0; k < found.length; k++) {if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) {currentContext[currentContextIndex++] = found[k];}}continue; // Skip to next token}if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {var tagName = RegExp.$1;var attrName = RegExp.$2;var attrOperator = RegExp.$3;var attrValue = RegExp.$4;if (!tagName) {tagName = '*';}var found = new Array;var foundCount = 0;for (var h = 0; h < currentContext.length; h++) {var elements;if (tagName == '*') {elements = getAllChildren(currentContext[h]);} else {elements = currentContext[h].getElementsByTagName(tagName);}for (var j = 0; j < elements.length; j++) {found[foundCount++] = elements[j];}}currentContext = new Array;var currentContextIndex = 0;var checkFunction; // This function will be used to filter the elementsswitch (attrOperator) {case '=': // EqualitycheckFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };break;case '~': // Match one of space seperated words checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };break;case '|': // Match start with value followed by optional hyphencheckFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };break;case '^': // Match starts with valuecheckFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };break;case '$': // Match ends with value - fails with "Warning" in Opera 7checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };break;case '*': // Match ends with valuecheckFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };break;default :checkFunction = function(e) { return e.getAttribute(attrName); };}currentContext = new Array;var currentContextIndex = 0;for (var k = 0; k < found.length; k++) {if (checkFunction(found[k])) {currentContext[currentContextIndex++] = found[k];}}continue; // Skip to next token}if (!currentContext[0]){return;}tagName = token;var found = new Array;var foundCount = 0;for (var h = 0; h < currentContext.length; h++) {var elements = currentContext[h].getElementsByTagName(tagName);for (var j = 0; j < elements.length; j++) {found[foundCount++] = elements[j];}}currentContext = found;}return currentContext;}/* That revolting regular expression explained /^(\w+)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/\---/  \---/\-------------/    \-------/|      |         |               ||      |         |           The value|      |    ~,|,^,$,* or =|   Attribute Tag*/</script><script type="text/javascript" language="javascript">/*  Prototype JavaScript framework, version 1.4.0*  (c) 2005 Sam Stephenson <sam@conio.net>**  THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff*  against the source tree, available from the Prototype darcs repository.**  Prototype is freely distributable under the terms of an MIT-style license.**  For details, see the Prototype web site: http://prototype.conio.net/*/*--------------------------------------------------------------------------*/var Prototype = {Version: '1.4.0',ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',emptyFunction: function() {},K: function(x) {return x}}var Class = {create: function() {return function() {this.initialize.apply(this, arguments);}}}var Abstract = new Object();Object.extend = function(destination, source) {for (property in source) {destination[property] = source[property];}return destination;}Object.inspect = function(object) {try {if (object == undefined) return 'undefined';if (object == null) return 'null';return object.inspect ? object.inspect() : object.toString();} catch (e) {if (e instanceof RangeError) return '...';throw e;}}Function.prototype.bind = function() {var __method = this, args = $A(arguments), object = args.shift();return function() {return __method.apply(object, args.concat($A(arguments)));}}Function.prototype.bindAsEventListener = function(object) {var __method = this;return function(event) {return __method.call(object, event || window.event);}}Object.extend(Number.prototype, {toColorPart: function() {var digits = this.toString(16);if (this < 16) return '0' + digits;return digits;},succ: function() {return this + 1;},times: function(iterator) {$R(0, this, true).each(iterator);return this;}});var Try = {these: function() {var returnValue;for (var i = 0; i < arguments.length; i++) {var lambda = arguments[i];try {returnValue = lambda();break;} catch (e) {}}return returnValue;}}/*--------------------------------------------------------------------------*/var PeriodicalExecuter = Class.create();PeriodicalExecuter.prototype = {initialize: function(callback, frequency) {this.callback = callback;this.frequency = frequency;this.currentlyExecuting = false;this.registerCallback();},registerCallback: function() {setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);},onTimerEvent: function() {if (!this.currentlyExecuting) {try {this.currentlyExecuting = true;this.callback();} finally {this.currentlyExecuting = false;}}}}/*--------------------------------------------------------------------------*/function $() {var elements = new Array();for (var i = 0; i < arguments.length; i++) {var element = arguments[i];if (typeof element == 'string')element = document.getElementById(element);if (arguments.length == 1)return element;elements.push(element);}return elements;}Object.extend(String.prototype, {stripTags: function() {return this.replace(/<\/?[^>]+>/gi, '');},stripScripts: function() {return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');},extractScripts: function() {var matchAll = new RegExp(Prototype.ScriptFragment, 'img');var matchOne = new RegExp(Prototype.ScriptFragment, 'im');return (this.match(matchAll) || []).map(function(scriptTag) {return (scriptTag.match(matchOne) || ['', ''])[1];});},evalScripts: function() {return this.extractScripts().map(eval);},escapeHTML: function() {var div = document.createElement('div');var text = document.createTextNode(this);div.appendChild(text);return div.innerHTML;},unescapeHTML: function() {var div = document.createElement('div');div.innerHTML = this.stripTags();return div.childNodes[0] ? div.childNodes[0].nodeValue : '';},toQueryParams: function() {var pairs = this.match(/^\??(.*)$/)[1].split('&');return pairs.inject({}, function(params, pairString) {var pair = pairString.split('=');params[pair[0]] = pair[1];return params;});},toArray: function() {return this.split('');},camelize: function() {var oStringList = this.split('-');if (oStringList.length == 1) return oStringList[0];var camelizedString = this.indexOf('-') == 0? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1): oStringList[0];for (var i = 1, len = oStringList.length; i < len; i++) {var s = oStringList[i];camelizedString += s.charAt(0).toUpperCase() + s.substring(1);}return camelizedString;},inspect: function() {return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'";}});String.prototype.parseQuery = String.prototype.toQueryParams;var $break    = new Object();var $continue = new Object();var Enumerable = {each: function(iterator) {var index = 0;try {this._each(function(value) {try {iterator(value, index++);} catch (e) {if (e != $continue) throw e;}});} catch (e) {if (e != $break) throw e;}},all: function(iterator) {var result = true;this.each(function(value, index) {result = result && !!(iterator || Prototype.K)(value, index);if (!result) throw $break;});return result;},any: function(iterator) {var result = true;this.each(function(value, index) {if (result = !!(iterator || Prototype.K)(value, index))throw $break;});return result;},collect: function(iterator) {var results = [];this.each(function(value, index) {results.push(iterator(value, index));});return results;},detect: function (iterator) {var result;this.each(function(value, index) {if (iterator(value, index)) {result = value;throw $break;}});return result;},findAll: function(iterator) {var results = [];this.each(function(value, index) {if (iterator(value, index))results.push(value);});return results;},grep: function(pattern, iterator) {var results = [];this.each(function(value, index) {var stringValue = value.toString();if (stringValue.match(pattern))results.push((iterator || Prototype.K)(value, index));})return results;},include: function(object) {var found = false;this.each(function(value) {if (value == object) {found = true;throw $break;}});return found;},inject: function(memo, iterator) {this.each(function(value, index) {memo = iterator(memo, value, index);});return memo;},invoke: function(method) {var args = $A(arguments).slice(1);return this.collect(function(value) {return value[method].apply(value, args);});},max: function(iterator) {var result;this.each(function(value, index) {value = (iterator || Prototype.K)(value, index);if (value >= (result || value))result = value;});return result;},min: function(iterator) {var result;this.each(function(value, index) {value = (iterator || Prototype.K)(value, index);if (value <= (result || value))result = value;});return result;},partition: function(iterator) {var trues = [], falses = [];this.each(function(value, index) {((iterator || Prototype.K)(value, index) ?trues : falses).push(value);});return [trues, falses];},pluck: function(property) {var results = [];this.each(function(value, index) {results.push(value[property]);});return results;},reject: function(iterator) {var results = [];this.each(function(value, index) {if (!iterator(value, index))results.push(value);});return results;},sortBy: function(iterator) {return this.collect(function(value, index) {return {value: value, criteria: iterator(value, index)};}).sort(function(left, right) {var a = left.criteria, b = right.criteria;return a < b ? -1 : a > b ? 1 : 0;}).pluck('value');},toArray: function() {return this.collect(Prototype.K);},zip: function() {var iterator = Prototype.K, args = $A(arguments);if (typeof args.last() == 'function')iterator = args.pop();var collections = [this].concat(args).map($A);return this.map(function(value, index) {iterator(value = collections.pluck(index));return value;});},inspect: function() {return '#<Enumerable:' + this.toArray().inspect() + '>';}}Object.extend(Enumerable, {map:     Enumerable.collect,find:    Enumerable.detect,select:  Enumerable.findAll,member:  Enumerable.include,entries: Enumerable.toArray});var $A = Array.from = function(iterable) {if (!iterable) return [];if (iterable.toArray) {return iterable.toArray();} else {var results = [];for (var i = 0; i < iterable.length; i++)results.push(iterable[i]);return results;}}Object.extend(Array.prototype, Enumerable);Array.prototype._reverse = Array.prototype.reverse;Object.extend(Array.prototype, {_each: function(iterator) {for (var i = 0; i < this.length; i++)iterator(this[i]);},clear: function() {this.length = 0;return this;},first: function() {return this[0];},last: function() {return this[this.length - 1];},compact: function() {return this.select(function(value) {return value != undefined || value != null;});},flatten: function() {return this.inject([], function(array, value) {return array.concat(value.constructor == Array ?value.flatten() : [value]);});},without: function() {var values = $A(arguments);return this.select(function(value) {return !values.include(value);});},indexOf: function(object) {for (var i = 0; i < this.length; i++)if (this[i] == object) return i;return -1;},reverse: function(inline) {return (inline !== false ? this : this.toArray())._reverse();},shift: function() {var result = this[0];for (var i = 0; i < this.length - 1; i++)this[i] = this[i + 1];this.length--;return result;},inspect: function() {return '[' + this.map(Object.inspect).join(', ') + ']';}});var Hash = {_each: function(iterator) {for (key in this) {var value = this[key];if (typeof value == 'function') continue;var pair = [key, value];pair.key = key;pair.value = value;iterator(pair);}},keys: function() {return this.pluck('key');},values: function() {return this.pluck('value');},merge: function(hash) {return $H(hash).inject($H(this), function(mergedHash, pair) {mergedHash[pair.key] = pair.value;return mergedHash;});},toQueryString: function() {return this.map(function(pair) {return pair.map(encodeURIComponent).join('=');}).join('&');},inspect: function() {return '#<Hash:{' + this.map(function(pair) {return pair.map(Object.inspect).join(': ');}).join(', ') + '}>';}}function $H(object) {var hash = Object.extend({}, object || {});Object.extend(hash, Enumerable);Object.extend(hash, Hash);return hash;}ObjectRange = Class.create();Object.extend(ObjectRange.prototype, Enumerable);Object.extend(ObjectRange.prototype, {initialize: function(start, end, exclusive) {this.start = start;this.end = end;this.exclusive = exclusive;},_each: function(iterator) {var value = this.start;do {iterator(value);value = value.succ();} while (this.include(value));},include: function(value) {if (value < this.start)return false;if (this.exclusive)return value < this.end;return value <= this.end;}});var $R = function(start, end, exclusive) {return new ObjectRange(start, end, exclusive);}var Ajax = {getTransport: function() {return Try.these(function() {return new ActiveXObject('Msxml2.XMLHTTP')},function() {return new ActiveXObject('Microsoft.XMLHTTP')},function() {return new XMLHttpRequest()}) || false;},activeRequestCount: 0}Ajax.Responders = {responders: [],_each: function(iterator) {this.responders._each(iterator);},register: function(responderToAdd) {if (!this.include(responderToAdd))this.responders.push(responderToAdd);},unregister: function(responderToRemove) {this.responders = this.responders.without(responderToRemove);},dispatch: function(callback, request, transport, json) {this.each(function(responder) {if (responder[callback] && typeof responder[callback] == 'function') {try {responder[callback].apply(responder, [request, transport, json]);} catch (e) {}}});}};Object.extend(Ajax.Responders, Enumerable);Ajax.Responders.register({onCreate: function() {Ajax.activeRequestCount++;},onComplete: function() {Ajax.activeRequestCount--;}});Ajax.Base = function() {};Ajax.Base.prototype = {setOptions: function(options) {this.options = {method:       'post',asynchronous: true,parameters:   ''}Object.extend(this.options, options || {});},responseIsSuccess: function() {return this.transport.status == undefined|| this.transport.status == 0|| (this.transport.status >= 200 && this.transport.status < 300);},responseIsFailure: function() {return !this.responseIsSuccess();}}Ajax.Request = Class.create();Ajax.Request.Events =['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];Ajax.Request.prototype = Object.extend(new Ajax.Base(), {initialize: function(url, options) {this.transport = Ajax.getTransport();this.setOptions(options);this.request(url);},request: function(url) {var parameters = this.options.parameters || '';if (parameters.length > 0) parameters += '&_=';try {this.url = url;if (this.options.method == 'get' && parameters.length > 0)this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;Ajax.Responders.dispatch('onCreate', this, this.transport);this.transport.open(this.options.method, this.url,this.options.asynchronous);if (this.options.asynchronous) {this.transport.onreadystatechange = this.onStateChange.bind(this);setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);}this.setRequestHeaders();var body = this.options.postBody ? this.options.postBody : parameters;this.transport.send(this.options.method == 'post' ? body : null);} catch (e) {this.dispatchException(e);}},setRequestHeaders: function() {var requestHeaders =['X-Requested-With', 'XMLHttpRequest','X-Prototype-Version', Prototype.Version];if (this.options.method == 'post') {requestHeaders.push('Content-type','application/x-www-form-urlencoded');/* Force "Connection: close" for Mozilla browsers to work around* a bug where XMLHttpReqeuest sends an incorrect Content-length* header. See Mozilla Bugzilla #246651.*/if (this.transport.overrideMimeType)requestHeaders.push('Connection', 'close');}if (this.options.requestHeaders)requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);for (var i = 0; i < requestHeaders.length; i += 2)this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);},onStateChange: function() {var readyState = this.transport.readyState;if (readyState != 1)this.respondToReadyState(this.transport.readyState);},header: function(name) {try {return this.transport.getResponseHeader(name);} catch (e) {}},evalJSON: function() {try {return eval(this.header('X-JSON'));} catch (e) {}},evalResponse: function() {try {return eval(this.transport.responseText);} catch (e) {this.dispatchException(e);}},respondToReadyState: function(readyState) {var event = Ajax.Request.Events[readyState];var transport = this.transport, json = this.evalJSON();if (event == 'Complete') {try {(this.options['on' + this.transport.status]|| this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]|| Prototype.emptyFunction)(transport, json);} catch (e) {this.dispatchException(e);}if ((this.header('Content-type') || '').match(/^text\/javascript/i))this.evalResponse();}try {(this.options['on' + event] || Prototype.emptyFunction)(transport, json);Ajax.Responders.dispatch('on' + event, this, transport, json);} catch (e) {this.dispatchException(e);}/* Avoid memory leak in MSIE: clean up the oncomplete event handler */if (event == 'Complete')this.transport.onreadystatechange = Prototype.emptyFunction;},dispatchException: function(exception) {(this.options.onException || Prototype.emptyFunction)(this, exception);Ajax.Responders.dispatch('onException', this, exception);}});Ajax.Updater = Class.create();Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {initialize: function(container, url, options) {this.containers = {success: container.success ? $(container.success) : $(container),failure: container.failure ? $(container.failure) :(container.success ? null : $(container))}this.transport = Ajax.getTransport();this.setOptions(options);var onComplete = this.options.onComplete || Prototype.emptyFunction;this.options.onComplete = (function(transport, object) {this.updateContent();onComplete(transport, object);}).bind(this);this.request(url);},updateContent: function() {var receiver = this.responseIsSuccess() ?this.containers.success : this.containers.failure;var response = this.transport.responseText;if (!this.options.evalScripts)response = response.stripScripts();if (receiver) {if (this.options.insertion) {new this.options.insertion(receiver, response);} else {Element.update(receiver, response);}}if (this.responseIsSuccess()) {if (this.onComplete)setTimeout(this.onComplete.bind(this), 10);}}});Ajax.PeriodicalUpdater = Class.create();Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {initialize: function(container, url, options) {this.setOptions(options);this.onComplete = this.options.onComplete;this.frequency = (this.options.frequency || 2);this.decay = (this.options.decay || 1);this.updater = {};this.container = container;this.url = url;this.start();},start: function() {this.options.onComplete = this.updateComplete.bind(this);this.onTimerEvent();},stop: function() {this.updater.onComplete = undefined;clearTimeout(this.timer);(this.onComplete || Prototype.emptyFunction).apply(this, arguments);},updateComplete: function(request) {if (this.options.decay) {this.decay = (request.responseText == this.lastText ?this.decay * this.options.decay : 1);this.lastText = request.responseText;}this.timer = setTimeout(this.onTimerEvent.bind(this),this.decay * this.frequency * 1000);},onTimerEvent: function() {this.updater = new Ajax.Updater(this.container, this.url, this.options);}});document.getElementsByClassName = function(className, parentElement) {var children = ($(parentElement) || document.body).getElementsByTagName('*');return $A(children).inject([], function(elements, child) {if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))elements.push(child);return elements;});}/*--------------------------------------------------------------------------*/if (!window.Element) {var Element = new Object();}Object.extend(Element, {visible: function(element) {return $(element).style.display != 'none';},toggle: function() {for (var i = 0; i < arguments.length; i++) {var element = $(arguments[i]);Element[Element.visible(element) ? 'hide' : 'show'](element);}},hide: function() {for (var i = 0; i < arguments.length; i++) {var element = $(arguments[i]);element.style.display = 'none';}},show: function() {for (var i = 0; i < arguments.length; i++) {var element = $(arguments[i]);element.style.display = '';}},remove: function(element) {element = $(element);element.parentNode.removeChild(element);},update: function(element, html) {$(element).innerHTML = html.stripScripts();setTimeout(function() {html.evalScripts()}, 10);},getHeight: function(element) {element = $(element);return element.offsetHeight;},classNames: function(element) {return new Element.ClassNames(element);},hasClassName: function(element, className) {if (!(element = $(element))) return;return Element.classNames(element).include(className);},addClassName: function(element, className) {if (!(element = $(element))) return;return Element.classNames(element).add(className);},removeClassName: function(element, className) {if (!(element = $(element))) return;return Element.classNames(element).remove(className);},cleanWhitespace: function(element) {element = $(element);for (var i = 0; i < element.childNodes.length; i++) {var node = element.childNodes[i];if (node.nodeType == 3 && !/\S/.test(node.nodeValue))Element.remove(node);}},empty: function(element) {return $(element).innerHTML.match(/^\s*$/);},scrollTo: function(element) {element = $(element);var x = element.x ? element.x : element.offsetLeft,y = element.y ? element.y : element.offsetTop;window.scrollTo(x, y);},getStyle: function(element, style) {element = $(element);var value = element.style[style.camelize()];if (!value) {if (document.defaultView && document.defaultView.getComputedStyle) {var css = document.defaultView.getComputedStyle(element, null);value = css ? css.getPropertyValue(style) : null;} else if (element.currentStyle) {value = element.currentStyle[style.camelize()];}}if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))if (Element.getStyle(element, 'position') == 'static') value = 'auto';return value == 'auto' ? null : value;},setStyle: function(element, style) {element = $(element);for (name in style)element.style[name.camelize()] = style[name];},getDimensions: function(element) {element = $(element);if (Element.getStyle(element, 'display') != 'none')return {width: element.offsetWidth, height: element.offsetHeight};var els = element.style;var originalVisibility = els.visibility;var originalPosition = els.position;els.visibility = 'hidden';els.position = 'absolute';els.display = '';var originalWidth = element.clientWidth;var originalHeight = element.clientHeight;els.display = 'none';els.position = originalPosition;els.visibility = originalVisibility;return {width: originalWidth, height: originalHeight};},makePositioned: function(element) {element = $(element);var pos = Element.getStyle(element, 'position');if (pos == 'static' || !pos) {element._madePositioned = true;element.style.position = 'relative';if (window.opera) {element.style.top = 0;element.style.left = 0;}}},undoPositioned: function(element) {element = $(element);if (element._madePositioned) {element._madePositioned = undefined;element.style.position =element.style.top =element.style.left =element.style.bottom =element.style.right = '';}},makeClipping: function(element) {element = $(element);if (element._overflow) return;element._overflow = element.style.overflow;if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')element.style.overflow = 'hidden';},undoClipping: function(element) {element = $(element);if (element._overflow) return;element.style.overflow = element._overflow;element._overflow = undefined;}});var Toggle = new Object();Toggle.display = Element.toggle;/*--------------------------------------------------------------------------*/Abstract.Insertion = function(adjacency) {this.adjacency = adjacency;}Abstract.Insertion.prototype = {initialize: function(element, content) {this.element = $(element);this.content = content.stripScripts();if (this.adjacency && this.element.insertAdjacentHTML) {try {this.element.insertAdjacentHTML(this.adjacency, this.content);} catch (e) {if (this.element.tagName.toLowerCase() == 'tbody') {this.insertContent(this.contentFromAnonymousTable());} else {throw e;}}} else {this.range = this.element.ownerDocument.createRange();if (this.initializeRange) this.initializeRange();this.insertContent([this.range.createContextualFragment(this.content)]);}setTimeout(function() {content.evalScripts()}, 10);},contentFromAnonymousTable: function() {var div = document.createElement('div');div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';return $A(div.childNodes[0].childNodes[0].childNodes);}}var Insertion = new Object();Insertion.Before = Class.create();Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {initializeRange: function() {this.range.setStartBefore(this.element);},insertContent: function(fragments) {fragments.each((function(fragment) {this.element.parentNode.insertBefore(fragment, this.element);}).bind(this));}});Insertion.Top = Class.create();Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {initializeRange: function() {this.range.selectNodeContents(this.element);this.range.collapse(true);},insertContent: function(fragments) {fragments.reverse(false).each((function(fragment) {this.element.insertBefore(fragment, this.element.firstChild);}).bind(this));}});Insertion.Bottom = Class.create();Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {initializeRange: function() {this.range.selectNodeContents(this.element);this.range.collapse(this.element);},insertContent: function(fragments) {fragments.each((function(fragment) {this.element.appendChild(fragment);}).bind(this));}});Insertion.After = Class.create();Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {initializeRange: function() {this.range.setStartAfter(this.element);},insertContent: function(fragments) {fragments.each((function(fragment) {this.element.parentNode.insertBefore(fragment,this.element.nextSibling);}).bind(this));}});/*--------------------------------------------------------------------------*/Element.ClassNames = Class.create();Element.ClassNames.prototype = {initialize: function(element) {this.element = $(element);},_each: function(iterator) {this.element.className.split(/\s+/).select(function(name) {return name.length > 0;})._each(iterator);},set: function(className) {this.element.className = className;},add: function(classNameToAdd) {if (this.include(classNameToAdd)) return;this.set(this.toArray().concat(classNameToAdd).join(' '));},remove: function(classNameToRemove) {if (!this.include(classNameToRemove)) return;this.set(this.select(function(className) {return className != classNameToRemove;}).join(' '));},toString: function() {return this.toArray().join(' ');}}Object.extend(Element.ClassNames.prototype, Enumerable);var Field = {clear: function() {for (var i = 0; i < arguments.length; i++)$(arguments[i]).value = '';},focus: function(element) {$(element).focus();},present: function() {for (var i = 0; i < arguments.length; i++)if ($(arguments[i]).value == '') return false;return true;},select: function(element) {$(element).select();},activate: function(element) {element = $(element);element.focus();if (element.select)element.select();}}/*--------------------------------------------------------------------------*/var Form = {serialize: function(form) {var elements = Form.getElements($(form));var queryComponents = new Array();for (var i = 0; i < elements.length; i++) {var queryComponent = Form.Element.serialize(elements[i]);if (queryComponent)queryComponents.push(queryComponent);}return queryComponents.join('&');},getElements: function(form) {form = $(form);var elements = new Array();for (tagName in Form.Element.Serializers) {var tagElements = form.getElementsByTagName(tagName);for (var j = 0; j < tagElements.length; j++)elements.push(tagElements[j]);}return elements;},getInputs: function(form, typeName, name) {form = $(form);var inputs = form.getElementsByTagName('input');if (!typeName && !name)return inputs;var matchingInputs = new Array();for (var i = 0; i < inputs.length; i++) {var input = inputs[i];if ((typeName && input.type != typeName) ||(name && input.name != name))continue;matchingInputs.push(input);}return matchingInputs;},disable: function(form) {var elements = Form.getElements(form);for (var i = 0; i < elements.length; i++) {var element = elements[i];element.blur();element.disabled = 'true';}},enable: function(form) {var elements = Form.getElements(form);for (var i = 0; i < elements.length; i++) {var element = elements[i];element.disabled = '';}},findFirstElement: function(form) {return Form.getElements(form).find(function(element) {return element.type != 'hidden' && !element.disabled &&['input', 'select', 'textarea'].include(element.tagName.toLowerCase());});},focusFirstElement: function(form) {Field.activate(Form.findFirstElement(form));},reset: function(form) {$(form).reset();}}Form.Element = {serialize: function(element) {element = $(element);var method = element.tagName.toLowerCase();var parameter = Form.Element.Serializers[method](element);if (parameter) {var key = encodeURIComponent(parameter[0]);if (key.length == 0) return;if (parameter[1].constructor != Array)parameter[1] = [parameter[1]];return parameter[1].map(function(value) {return key + '=' + encodeURIComponent(value);}).join('&');}},getValue: function(element) {element = $(element);var method = element.tagName.toLowerCase();var parameter = Form.Element.Serializers[method](element);if (parameter)return parameter[1];}}Form.Element.Serializers = {input: function(element) {switch (element.type.toLowerCase()) {case 'submit':case 'hidden':case 'password':case 'text':return Form.Element.Serializers.textarea(element);case 'checkbox':case 'radio':return Form.Element.Serializers.inputSelector(element);}return false;},inputSelector: function(element) {if (element.checked)return [element.name, element.value];},textarea: function(element) {return [element.name, element.value];},select: function(element) {return Form.Element.Serializers[element.type == 'select-one' ?'selectOne' : 'selectMany'](element);},selectOne: function(element) {var value = '', opt, index = element.selectedIndex;if (index >= 0) {opt = element.options[index];value = opt.value;if (!value && !('value' in opt))value = opt.text;}return [element.name, value];},selectMany: function(element) {var value = new Array();for (var i = 0; i < element.length; i++) {var opt = element.options[i];if (opt.selected) {var optValue = opt.value;if (!optValue && !('value' in opt))optValue = opt.text;value.push(optValue);}}return [element.name, value];}}/*--------------------------------------------------------------------------*/var $F = Form.Element.getValue;/*--------------------------------------------------------------------------*/Abstract.TimedObserver = function() {}Abstract.TimedObserver.prototype = {initialize: function(element, frequency, callback) {this.frequency = frequency;this.element   = $(element);this.callback  = callback;this.lastValue = this.getValue();this.registerCallback();},registerCallback: function() {setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);},onTimerEvent: function() {var value = this.getValue();if (this.lastValue != value) {this.callback(this.element, value);this.lastValue = value;}}}Form.Element.Observer = Class.create();Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {getValue: function() {return Form.Element.getValue(this.element);}});Form.Observer = Class.create();Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {getValue: function() {return Form.serialize(this.element);}});/*--------------------------------------------------------------------------*/Abstract.EventObserver = function() {}Abstract.EventObserver.prototype = {initialize: function(element, callback) {this.element  = $(element);this.callback = callback;this.lastValue = this.getValue();if (this.element.tagName.toLowerCase() == 'form')this.registerFormCallbacks();elsethis.registerCallback(this.element);},onElementEvent: function() {var value = this.getValue();if (this.lastValue != value) {this.callback(this.element, value);this.lastValue = value;}},registerFormCallbacks: function() {var elements = Form.getElements(this.element);for (var i = 0; i < elements.length; i++)this.registerCallback(elements[i]);},registerCallback: function(element) {if (element.type) {switch (element.type.toLowerCase()) {case 'checkbox':case 'radio':Event.observe(element, 'click', this.onElementEvent.bind(this));break;case 'password':case 'text':case 'textarea':case 'select-one':case 'select-multiple':Event.observe(element, 'change', this.onElementEvent.bind(this));break;}}}}Form.Element.EventObserver = Class.create();Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {getValue: function() {return Form.Element.getValue(this.element);}});Form.EventObserver = Class.create();Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {getValue: function() {return Form.serialize(this.element);}});if (!window.Event) {var Event = new Object();}Object.extend(Event, {KEY_BACKSPACE: 8,KEY_TAB:       9,KEY_RETURN:   13,KEY_ESC:      27,KEY_LEFT:     37,KEY_UP:       38,KEY_RIGHT:    39,KEY_DOWN:     40,KEY_DELETE:   46,element: function(event) {return event.target || event.srcElement;},isLeftClick: function(event) {return (((event.which) && (event.which == 1)) ||((event.button) && (event.button == 1)));},pointerX: function(event) {return event.pageX || (event.clientX +(document.documentElement.scrollLeft || document.body.scrollLeft));},pointerY: function(event) {return event.pageY || (event.clientY +(document.documentElement.scrollTop || document.body.scrollTop));},stop: function(event) {if (event.preventDefault) {event.preventDefault();event.stopPropagation();} else {event.returnValue = false;event.cancelBubble = true;}},findElement: function(event, tagName) {var element = Event.element(event);while (element.parentNode && (!element.tagName ||(element.tagName.toUpperCase() != tagName.toUpperCase())))element = element.parentNode;return element;},observers: false,_observeAndCache: function(element, name, observer, useCapture) {if (!this.observers) this.observers = [];if (element.addEventListener) {this.observers.push([element, name, observer, useCapture]);element.addEventListener(name, observer, useCapture);} else if (element.attachEvent) {this.observers.push([element, name, observer, useCapture]);element.attachEvent('on' + name, observer);}},unloadCache: function() {if (!Event.observers) return;for (var i = 0; i < Event.observers.length; i++) {Event.stopObserving.apply(this, Event.observers[i]);Event.observers[i][0] = null;}Event.observers = false;},observe: function(element, name, observer, useCapture) {var element = $(element);useCapture = useCapture || false;if (name == 'keypress' &&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)|| element.attachEvent))name = 'keydown';this._observeAndCache(element, name, observer, useCapture);},stopObserving: function(element, name, observer, useCapture) {var element = $(element);useCapture = useCapture || false;if (name == 'keypress' &&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)|| element.detachEvent))name = 'keydown';if (element.removeEventListener) {element.removeEventListener(name, observer, useCapture);} else if (element.detachEvent) {element.detachEvent('on' + name, observer);}}});/* prevent memory leaks in IE */Event.observe(window, 'unload', Event.unloadCache, false);var Position = {includeScrollOffsets: false,prepare: function() {this.deltaX =  window.pageXOffset|| document.documentElement.scrollLeft|| document.body.scrollLeft|| 0;this.deltaY =  window.pageYOffset|| document.documentElement.scrollTop|| document.body.scrollTop|| 0;},realOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.scrollTop  || 0;valueL += element.scrollLeft || 0;element = element.parentNode;} while (element);return [valueL, valueT];},cumulativeOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;element = element.offsetParent;} while (element);return [valueL, valueT];},positionedOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;element = element.offsetParent;if (element) {p = Element.getStyle(element, 'position');if (p == 'relative' || p == 'absolute') break;}} while (element);return [valueL, valueT];},offsetParent: function(element) {if (element.offsetParent) return element.offsetParent;if (element == document.body) return element;while ((element = element.parentNode) && element != document.body)if (Element.getStyle(element, 'position') != 'static')return element;return document.body;},within: function(element, x, y) {if (this.includeScrollOffsets)return this.withinIncludingScrolloffsets(element, x, y);this.xcomp = x;this.ycomp = y;this.offset = this.cumulativeOffset(element);return (y >= this.offset[1] &&y <  this.offset[1] + element.offsetHeight &&x >= this.offset[0] &&x <  this.offset[0] + element.offsetWidth);},withinIncludingScrolloffsets: function(element, x, y) {var offsetcache = this.realOffset(element);this.xcomp = x + offsetcache[0] - this.deltaX;this.ycomp = y + offsetcache[1] - this.deltaY;this.offset = this.cumulativeOffset(element);return (this.ycomp >= this.offset[1] &&this.ycomp <  this.offset[1] + element.offsetHeight &&this.xcomp >= this.offset[0] &&this.xcomp <  this.offset[0] + element.offsetWidth);},overlap: function(mode, element) {if (!mode) return 0;if (mode == 'vertical')return ((this.offset[1] + element.offsetHeight) - this.ycomp) /element.offsetHeight;if (mode == 'horizontal')return ((this.offset[0] + element.offsetWidth) - this.xcomp) /element.offsetWidth;},clone: function(source, target) {source = $(source);target = $(target);target.style.position = 'absolute';var offsets = this.cumulativeOffset(source);target.style.top    = offsets[1] + 'px';target.style.left   = offsets[0] + 'px';target.style.width  = source.offsetWidth + 'px';target.style.height = source.offsetHeight + 'px';},page: function(forElement) {var valueT = 0, valueL = 0;var element = forElement;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;if (element.offsetParent==document.body)if (Element.getStyle(element,'position')=='absolute') break;} while (element = element.offsetParent);element = forElement;do {valueT -= element.scrollTop  || 0;valueL -= element.scrollLeft || 0;} while (element = element.parentNode);return [valueL, valueT];},clone: function(source, target) {var options = Object.extend({setLeft:    true,setTop:     true,setWidth:   true,setHeight:  true,offsetTop:  0,offsetLeft: 0}, arguments[2] || {})source = $(source);var p = Position.page(source);target = $(target);var delta = [0, 0];var parent = null;if (Element.getStyle(target,'position') == 'absolute') {parent = Position.offsetParent(target);delta = Position.page(parent);}if (parent == document.body) {delta[0] -= document.body.offsetLeft;delta[1] -= document.body.offsetTop;}if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';if(options.setWidth)  target.style.width = source.offsetWidth + 'px';if(options.setHeight) target.style.height = source.offsetHeight + 'px';},absolutize: function(element) {element = $(element);if (element.style.position == 'absolute') return;Position.prepare();var offsets = Position.positionedOffset(element);var top     = offsets[1];var left    = offsets[0];var width   = element.clientWidth;var height  = element.clientHeight;element._originalLeft   = left - parseFloat(element.style.left  || 0);element._originalTop    = top  - parseFloat(element.style.top || 0);element._originalWidth  = element.style.width;element._originalHeight = element.style.height;element.style.position = 'absolute';element.style.top    = top + 'px';;element.style.left   = left + 'px';;element.style.width  = width + 'px';;element.style.height = height + 'px';;},relativize: function(element) {element = $(element);if (element.style.position == 'relative') return;Position.prepare();element.style.position = 'relative';var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);element.style.top    = top + 'px';element.style.left   = left + 'px';element.style.height = element._originalHeight;element.style.width  = element._originalWidth;}}if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {Position.cumulativeOffset = function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop  || 0;valueL += element.offsetLeft || 0;if (element.offsetParent == document.body)if (Element.getStyle(element, 'position') == 'absolute') break;element = element.offsetParent;} while (element);return [valueL, valueT];}}</script><!-- <script type="text/javascript" language="javascript" src="/scripts/scriptaculous.js"></script> --><script type="text/javascript" language="javascript">/* ------------- element ext -------------- */  String.prototype.parseColor = function() {  var color = '#';  if(this.slice(0,4) == 'rgb(') {  var cols = this.slice(4,this.length-1).split(',');  var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  } else {  if(this.slice(0,1) == '#') {  if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  if(this.length==7) color = this.toLowerCase();  }  }  return(color.length==7 ? color : (arguments[0] || this));  }Element.collectTextNodes = function(element) {  return $A($(element).childNodes).collect( function(node) {return (node.nodeType==3 ? node.nodeValue : (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));}).flatten().join('');}Element.collectTextNodesIgnoreClass = function(element, className) {  return $A($(element).childNodes).collect( function(node) {return (node.nodeType==3 ? node.nodeValue : ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? Element.collectTextNodes(node) : ''));}).flatten().join('');}Element.setStyle = function(element, style) {element = $(element);for(k in style) element.style[k.camelize()] = style[k];}Element.setContentZoom = function(element, percent) {  Element.setStyle(element, {fontSize: (percent/100) + 'em'});   if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);  }Element.getOpacity = function(element){  var opacity;if (opacity = Element.getStyle(element, 'opacity'))  return parseFloat(opacity);  if (opacity = (Element.getStyle(element, 'filter') || '').match(/alpha\(opacity=(.*)\)/))  if(opacity[1]) return parseFloat(opacity[1]) / 100;  return 1.0;  }Element.setOpacity = function(element, value){  element= $(element);  if (value == 1){Element.setStyle(element, { opacity: (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : null });if(/MSIE/.test(navigator.userAgent))  Element.setStyle(element, {filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')});  } else {  if(value < 0.00001) value = 0;  Element.setStyle(element, {opacity: value});if(/MSIE/.test(navigator.userAgent))  Element.setStyle(element, { filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') +'alpha(opacity='+value*100+')' });  }   }  Element.getInlineOpacity = function(element){  return $(element).style.opacity || '';}  Element.childrenWithClassName = function(element, className) {  return $A($(element).getElementsByTagName('*')).select(function(c) { return Element.hasClassName(c, className) });}Array.prototype.call = function() {var args = arguments;this.each(function(f){ f.apply(this, args) });}/*--------------------------------------------------------------------------*/var Effect = {tagifyText: function(element) {var tagifyStyle = 'position:relative';if(/MSIE/.test(navigator.userAgent)) tagifyStyle += ';zoom:1';element = $(element);$A(element.childNodes).each( function(child) {if(child.nodeType==3) {child.nodeValue.toArray().each( function(character) {element.insertBefore(Builder.node('span',{style: tagifyStyle},character == ' ' ? String.fromCharCode(160) : character), child);});Element.remove(child);}});},multiple: function(element, effect) {var elements;if(((typeof element == 'object') || (typeof element == 'function')) && (element.length))elements = element;elseelements = $(element).childNodes;var options = Object.extend({speed: 0.1,delay: 0.0}, arguments[2] || {});var masterDelay = options.delay;$A(elements).each( function(element, index) {new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));});},PAIRS: {'slide':  ['SlideDown','SlideUp'],'blind':  ['BlindDown','BlindUp'],'appear': ['Appear','Fade']},toggle: function(element, effect) {element = $(element);effect = (effect || 'appear').toLowerCase();var options = Object.extend({queue: { position:'end', scope:(element.id || 'global') }}, arguments[2] || {});Effect[Element.visible(element) ? Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);}};var Effect2 = Effect; // deprecated/* ------------- transitions ------------- */Effect.Transitions = {}Effect.Transitions.linear = function(pos) {return pos;}Effect.Transitions.sinoidal = function(pos) {return (-Math.cos(pos*Math.PI)/2) + 0.5;}Effect.Transitions.reverse  = function(pos) {return 1-pos;}Effect.Transitions.flicker = function(pos) {return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;}Effect.Transitions.wobble = function(pos) {return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;}Effect.Transitions.pulse = function(pos) {return (Math.floor(pos*10) % 2 == 0 ? (pos*10-Math.floor(pos*10)) : 1-(pos*10-Math.floor(pos*10)));}Effect.Transitions.none = function(pos) {return 0;}Effect.Transitions.full = function(pos) {return 1;}/* ------------- core effects ------------- */Effect.ScopedQueue = Class.create();Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {initialize: function() {this.effects  = [];this.interval = null;},_each: function(iterator) {this.effects._each(iterator);},add: function(effect) {var timestamp = new Date().getTime();var position = (typeof effect.options.queue == 'string') ? effect.options.queue : effect.options.queue.position;switch(position) {case 'front':this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {e.startOn  += effect.finishOn;e.finishOn += effect.finishOn;});break;case 'end':timestamp = this.effects.pluck('finishOn').max() || timestamp;break;}effect.startOn  += timestamp;effect.finishOn += timestamp;this.effects.push(effect);if(!this.interval) this.interval = setInterval(this.loop.bind(this), 40);},remove: function(effect) {this.effects = this.effects.reject(function(e) { return e==effect });if(this.effects.length == 0) {clearInterval(this.interval);this.interval = null;}},loop: function() {var timePos = new Date().getTime();this.effects.invoke('loop', timePos);}});Effect.Queues = {instances: $H(),get: function(queueName) {if(typeof queueName != 'string') return queueName;if(!this.instances[queueName])this.instances[queueName] = new Effect.ScopedQueue();return this.instances[queueName];}}Effect.Queue = Effect.Queues.get('global');Effect.DefaultOptions = {transition: Effect.Transitions.sinoidal,duration:   1.0,   // secondsfps:        25.0,  // max. 25fps due to Effect.Queue implementationsync:       false, // true for combiningfrom:       0.0,to:         1.0,delay:      0.0,queue:      'parallel'}Effect.Base = function() {};Effect.Base.prototype = {position: null,start: function(options) {this.options      = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});this.currentFrame = 0;this.state        = 'idle';this.startOn      = this.options.delay*1000;this.finishOn     = this.startOn + (this.options.duration*1000);this.event('beforeStart');if(!this.options.sync)Effect.Queues.get(typeof this.options.queue == 'string' ? 'global' : this.options.queue.scope).add(this);},loop: function(timePos) {if(timePos >= this.startOn) {if(timePos >= this.finishOn) {this.render(1.0);this.cancel();this.event('beforeFinish');if(this.finish) this.finish(); this.event('afterFinish');return;  }var pos   = (timePos - this.startOn) / (this.finishOn - this.startOn);var frame = Math.round(pos * this.options.fps * this.options.duration);if(frame > this.currentFrame) {this.render(pos);this.currentFrame = frame;}}},render: function(pos) {if(this.state == 'idle') {this.state = 'running';this.event('beforeSetup');if(this.setup) this.setup();this.event('afterSetup');}if(this.state == 'running') {if(this.options.transition) pos = this.options.transition(pos);pos *= (this.options.to-this.options.from);pos += this.options.from;this.position = pos;this.event('beforeUpdate');if(this.update) this.update(pos);this.event('afterUpdate');}},cancel: function() {if(!this.options.sync)Effect.Queues.get(typeof this.options.queue == 'string' ? 'global' : this.options.queue.scope).remove(this);this.state = 'finished';},event: function(eventName) {if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);if(this.options[eventName]) this.options[eventName](this);},inspect: function() {return '#<Effect:' + $H(this).inspect() + ',options:' + $H(this.options).inspect() + '>';}}Effect.Parallel = Class.create();Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {initialize: function(effects) {this.effects = effects || [];this.start(arguments[1]);},update: function(position) {this.effects.invoke('render', position);},finish: function(position) {this.effects.each( function(effect) {effect.render(1.0);effect.cancel();effect.event('beforeFinish');if(effect.finish) effect.finish(position);effect.event('afterFinish');});}});Effect.Opacity = Class.create();Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);if(/MSIE/.test(navigator.userAgent) && (!this.element.hasLayout))Element.setStyle(this.element, {zoom: 1});var options = Object.extend({from: Element.getOpacity(this.element) || 0.0,to:   1.0}, arguments[1] || {});this.start(options);},update: function(position) {Element.setOpacity(this.element, position);}});Effect.Move = Class.create();Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);var options = Object.extend({x:    0,y:    0,mode: 'relative'}, arguments[1] || {});this.start(options);},setup: function() {Element.makePositioned(this.element);this.originalLeft = parseFloat(Element.getStyle(this.element,'left') || '0');this.originalTop  = parseFloat(Element.getStyle(this.element,'top')  || '0');if(this.options.mode == 'absolute') {this.options.x = this.options.x - this.originalLeft;this.options.y = this.options.y - this.originalTop;}},update: function(position) {Element.setStyle(this.element, {left: this.options.x  * position + this.originalLeft + 'px',top:  this.options.y  * position + this.originalTop  + 'px'});}});Effect.MoveBy = function(element, toTop, toLeft) {return new Effect.Move(element, Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));};Effect.Scale = Class.create();Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {initialize: function(element, percent) {this.element = $(element)var options = Object.extend({scaleX: true,scaleY: true,scaleContent: true,scaleFromCenter: false,scaleMode: 'box',        // 'box' or 'contents' or {} with provided valuesscaleFrom: 100.0,scaleTo:   percent}, arguments[2] || {});this.start(options);},setup: function() {this.restoreAfterFinish = this.options.restoreAfterFinish || false;this.elementPositioning = Element.getStyle(this.element,'position');this.originalStyle = {};['top','left','width','height','fontSize'].each( function(k) {this.originalStyle[k] = this.element.style[k];}.bind(this));this.originalTop  = this.element.offsetTop;this.originalLeft = this.element.offsetLeft;var fontSize = Element.getStyle(this.element,'font-size') || '100%';['em','px','%'].each( function(fontSizeType) {if(fontSize.indexOf(fontSizeType)>0) {this.fontSize     = parseFloat(fontSize);this.fontSizeType = fontSizeType;}}.bind(this));this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;this.dims = null;if(this.options.scaleMode=='box')this.dims = [this.element.offsetHeight, this.element.offsetWidth];if(/^content/.test(this.options.scaleMode))this.dims = [this.element.scrollHeight, this.element.scrollWidth];if(!this.dims)this.dims = [this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth];},update: function(position) {var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);if(this.options.scaleContent && this.fontSize)Element.setStyle(this.element, {fontSize: this.fontSize * currentScale + this.fontSizeType });this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);},finish: function(position) {if (this.restoreAfterFinish) Element.setStyle(this.element, this.originalStyle);},setDimensions: function(height, width) {var d = {};if(this.options.scaleX) d.width = width + 'px';if(this.options.scaleY) d.height = height + 'px';if(this.options.scaleFromCenter) {var topd  = (height - this.dims[0])/2;var leftd = (width  - this.dims[1])/2;if(this.elementPositioning == 'absolute') {if(this.options.scaleY) d.top = this.originalTop-topd + 'px';if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';} else {if(this.options.scaleY) d.top = -topd + 'px';if(this.options.scaleX) d.left = -leftd + 'px';}}Element.setStyle(this.element, d);}});Effect.Highlight = Class.create();Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});this.start(options);},setup: function() {if(Element.getStyle(this.element, 'display')=='none') { this.cancel(); return; }this.oldStyle = {backgroundImage: Element.getStyle(this.element, 'background-image') };Element.setStyle(this.element, {backgroundImage: 'none'});if(!this.options.endcolor)this.options.endcolor = Element.getStyle(this.element, 'background-color').parseColor('#ffffff');if(!this.options.restorecolor)this.options.restorecolor = Element.getStyle(this.element, 'background-color');this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));},update: function(position) {Element.setStyle(this.element,{backgroundColor: $R(0,2).inject('#',function(m,v,i){return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });},finish: function() {Element.setStyle(this.element, Object.extend(this.oldStyle, {backgroundColor: this.options.restorecolor}));}});Effect.ScrollTo = Class.create();Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {initialize: function(element) {this.element = $(element);this.start(arguments[1] || {});},setup: function() {Position.prepare();var offsets = Position.cumulativeOffset(this.element);if(this.options.offset) offsets[1] += this.options.offset;var max = window.innerHeight ? window.height - window.innerHeight :document.body.scrollHeight - (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight);this.scrollStart = Position.deltaY;this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;},update: function(position) {Position.prepare();window.scrollTo(Position.deltaX, this.scrollStart + (position*this.delta));}});/* ------------- combination effects ------------- */Effect.Fade = function(element) {var oldOpacity = Element.getInlineOpacity(element);var options = Object.extend({from: Element.getOpacity(element) || 1.0,to:   0.0,afterFinishInternal: function(effect) { with(Element) { if(effect.options.to!=0) return;hide(effect.element);setStyle(effect.element, {opacity: oldOpacity}); }}}, arguments[1] || {});return new Effect.Opacity(element,options);}Effect.Appear = function(element) {var options = Object.extend({from: (Element.getStyle(element, 'display') == 'none' ? 0.0 : Element.getOpacity(element) || 0.0),to:   1.0,beforeSetup: function(effect) { with(Element) {setOpacity(effect.element, effect.options.from);show(effect.element); }}}, arguments[1] || {});return new Effect.Opacity(element,options);}Effect.Puff = function(element) {element = $(element);var oldStyle = { opacity: Element.getInlineOpacity(element), position: Element.getStyle(element, 'position') };return new Effect.Parallel([ new Effect.Scale(element, 200, { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], Object.extend({ duration: 1.0, beforeSetupInternal: function(effect) { with(Element) {setStyle(effect.effects[0].element, {position: 'absolute'}); }},afterFinishInternal: function(effect) { with(Element) {hide(effect.effects[0].element);setStyle(effect.effects[0].element, oldStyle); }}}, arguments[1] || {}));}Effect.BlindUp = function(element) {element = $(element);Element.makeClipping(element);return new Effect.Scale(element, 0, Object.extend({ scaleContent: false, scaleX: false, restoreAfterFinish: true,afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping].call(effect.element); }} }, arguments[1] || {}));}Effect.BlindDown = function(element) {element = $(element);var oldHeight = Element.getStyle(element, 'height');var elementDimensions = Element.getDimensions(element);return new Effect.Scale(element, 100, Object.extend({ scaleContent: false, scaleX: false,scaleFrom: 0,scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},restoreAfterFinish: true,afterSetup: function(effect) { with(Element) {makeClipping(effect.element);setStyle(effect.element, {height: '0px'});show(effect.element); }},  afterFinishInternal: function(effect) { with(Element) {undoClipping(effect.element);setStyle(effect.element, {height: oldHeight});}}}, arguments[1] || {}));}Effect.SwitchOff = function(element) {element = $(element);var oldOpacity = Element.getInlineOpacity(element);return new Effect.Appear(element, { duration: 0.4,from: 0,transition: Effect.Transitions.flicker,afterFinishInternal: function(effect) {new Effect.Scale(effect.element, 1, { duration: 0.3, scaleFromCenter: true,scaleX: false, scaleContent: false, restoreAfterFinish: true,beforeSetup: function(effect) { with(Element) {[makePositioned,makeClipping].call(effect.element);}},afterFinishInternal: function(effect) { with(Element) {[hide,undoClipping,undoPositioned].call(effect.element);setStyle(effect.element, {opacity: oldOpacity});}}})}});}Effect.DropOut = function(element) {element = $(element);var oldStyle = {top: Element.getStyle(element, 'top'),left: Element.getStyle(element, 'left'),opacity: Element.getInlineOpacity(element) };return new Effect.Parallel([ new Effect.Move(element, {x: 0, y: 100, sync: true }), new Effect.Opacity(element, { sync: true, to: 0.0 }) ],Object.extend({ duration: 0.5,beforeSetup: function(effect) { with(Element) {makePositioned(effect.effects[0].element); }},afterFinishInternal: function(effect) { with(Element) {[hide, undoPositioned].call(effect.effects[0].element);setStyle(effect.effects[0].element, oldStyle); }} }, arguments[1] || {}));}Effect.Shake = function(element) {element = $(element);var oldStyle = {top: Element.getStyle(element, 'top'),left: Element.getStyle(element, 'left') };return new Effect.Move(element, { x:  20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { with(Element) {undoPositioned(effect.element);setStyle(effect.element, oldStyle);}}}) }}) }}) }}) }}) }});}Effect.SlideDown = function(element) {element = $(element);Element.cleanWhitespace(element);var oldInnerBottom = Element.getStyle(element.firstChild, 'bottom');var elementDimensions = Element.getDimensions(element);return new Effect.Scale(element, 100, Object.extend({ scaleContent: false, scaleX: false, scaleFrom: 0,scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},restoreAfterFinish: true,afterSetup: function(effect) { with(Element) {makePositioned(effect.element);makePositioned(effect.element.firstChild);if(window.opera) setStyle(effect.element, {top: ''});makeClipping(effect.element);setStyle(effect.element, {height: '0px'});show(element); }},afterUpdateInternal: function(effect) { with(Element) {setStyle(effect.element.firstChild, {bottom:(effect.dims[0] - effect.element.clientHeight) + 'px' }); }},afterFinishInternal: function(effect) { with(Element) {undoClipping(effect.element); undoPositioned(effect.element.firstChild);undoPositioned(effect.element);setStyle(effect.element.firstChild, {bottom: oldInnerBottom}); }}}, arguments[1] || {}));}Effect.SlideUp = function(element) {element = $(element);Element.cleanWhitespace(element);var oldInnerBottom = Element.getStyle(element.firstChild, 'bottom');return new Effect.Scale(element, 0, Object.extend({ scaleContent: false, scaleX: false, scaleMode: 'box',scaleFrom: 100,restoreAfterFinish: true,beforeStartInternal: function(effect) { with(Element) {makePositioned(effect.element);makePositioned(effect.element.firstChild);if(window.opera) setStyle(effect.element, {top: ''});makeClipping(effect.element);show(element); }},  afterUpdateInternal: function(effect) { with(Element) {setStyle(effect.element.firstChild, {bottom:(effect.dims[0] - effect.element.clientHeight) + 'px' }); }},afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping].call(effect.element); undoPositioned(effect.element.firstChild);undoPositioned(effect.element);setStyle(effect.element.firstChild, {bottom: oldInnerBottom}); }}}, arguments[1] || {}));}Effect.Squish = function(element) {return new Effect.Scale(element, window.opera ? 1 : 0, { restoreAfterFinish: true,beforeSetup: function(effect) { with(Element) {makeClipping(effect.element); }},  afterFinishInternal: function(effect) { with(Element) {hide(effect.element); undoClipping(effect.element); }}});}Effect.Grow = function(element) {element = $(element);var options = Object.extend({direction: 'center',moveTransistion: Effect.Transitions.sinoidal,scaleTransition: Effect.Transitions.sinoidal,opacityTransition: Effect.Transitions.full}, arguments[1] || {});var oldStyle = {top: element.style.top,left: element.style.left,height: element.style.height,width: element.style.width,opacity: Element.getInlineOpacity(element) };var dims = Element.getDimensions(element);    var initialMoveX, initialMoveY;var moveX, moveY;switch (options.direction) {case 'top-left':initialMoveX = initialMoveY = moveX = moveY = 0; break;case 'top-right':initialMoveX = dims.width;initialMoveY = moveY = 0;moveX = -dims.width;break;case 'bottom-left':initialMoveX = moveX = 0;initialMoveY = dims.height;moveY = -dims.height;break;case 'bottom-right':initialMoveX = dims.width;initialMoveY = dims.height;moveX = -dims.width;moveY = -dims.height;break;case 'center':initialMoveX = dims.width / 2;initialMoveY = dims.height / 2;moveX = -dims.width / 2;moveY = -dims.height / 2;break;}return new Effect.Move(element, {x: initialMoveX,y: initialMoveY,duration: 0.01, beforeSetup: function(effect) { with(Element) {hide(effect.element);makeClipping(effect.element);makePositioned(effect.element);}},afterFinishInternal: function(effect) {new Effect.Parallel([ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),new Effect.Scale(effect.element, 100, {scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})], Object.extend({beforeSetup: function(effect) { with(Element) {setStyle(effect.effects[0].element, {height: '0px'});show(effect.effects[0].element); }},afterFinishInternal: function(effect) { with(Element) {[undoClipping, undoPositioned].call(effect.effects[0].element); setStyle(effect.effects[0].element, oldStyle); }}}, options))}});}Effect.Shrink = function(element) {element = $(element);var options = Object.extend({direction: 'center',moveTransistion: Effect.Transitions.sinoidal,scaleTransition: Effect.Transitions.sinoidal,opacityTransition: Effect.Transitions.none}, arguments[1] || {});var oldStyle = {top: element.style.top,left: element.style.left,height: element.style.height,width: element.style.width,opacity: Element.getInlineOpacity(element) };var dims = Element.getDimensions(element);var moveX, moveY;switch (options.direction) {case 'top-left':moveX = moveY = 0;break;case 'top-right':moveX = dims.width;moveY = 0;break;case 'bottom-left':moveX = 0;moveY = dims.height;break;case 'bottom-right':moveX = dims.width;moveY = dims.height;break;case 'center':  moveX = dims.width / 2;moveY = dims.height / 2;break;}return new Effect.Parallel([ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })], Object.extend({            beforeStartInternal: function(effect) { with(Element) {[makePositioned, makeClipping].call(effect.effects[0].element) }},afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping, undoPositioned].call(effect.effects[0].element);setStyle(effect.effects[0].element, oldStyle); }}}, options));}Effect.Pulsate = function(element) {element = $(element);var options    = arguments[1] || {};var oldOpacity = Element.getInlineOpacity(element);var transition = options.transition || Effect.Transitions.sinoidal;var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos)) };reverser.bind(transition);return new Effect.Opacity(element, Object.extend(Object.extend({  duration: 3.0, from: 0,afterFinishInternal: function(effect) { Element.setStyle(effect.element, {opacity: oldOpacity}); }}, options), {transition: reverser}));}Effect.Fold = function(element) {element = $(element);var oldStyle = {top: element.style.top,left: element.style.left,width: element.style.width,height: element.style.height };Element.makeClipping(element);return new Effect.Scale(element, 5, Object.extend({   scaleContent: false,scaleX: false,afterFinishInternal: function(effect) {new Effect.Scale(element, 1, { scaleContent: false, scaleY: false,afterFinishInternal: function(effect) { with(Element) {[hide, undoClipping].call(effect.element); setStyle(effect.element, oldStyle);}} });}}, arguments[1] || {}));}</script><script type="text/javascript" language="javascript">addEvent(window, "load", sortables_init);var SORT_COLUMN_INDEX;function sortables_init() {if (!document.getElementsByTagName) return;tbls = document.getElementsByTagName("table");for (ti=0;ti<tbls.length;ti++) {thisTbl = tbls[ti];if (Element.hasClassName(thisTbl,'sortable') && (thisTbl.id)) {ts_makeSortable(thisTbl);}}}function ts_makeSortable(table) {if (table.rows && table.rows.length > 0) {var firstRow = table.rows[0];}if (!firstRow) return;for (var i=0;i<firstRow.cells.length;i++) {var cell = firstRow.cells[i];var txt = ts_getInnerText(cell);if(txt!="" && txt!=" " && !Element.hasClassName(cell,"nosort")){cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this);return false;">'+txt+'<span class="sortarrow"></span></a>';}}}function ts_getInnerText(el) {if (typeof el == "string") return el;if (typeof el == "undefined") { return el };if (el.innerText) return el.innerText;//Not needed but it is fastervar str = "";var cs = el.childNodes;var l = cs.length;for (var i = 0; i < l; i++) {switch (cs[i].nodeType) {case 1: //ELEMENT_NODEstr += ts_getInnerText(cs[i]);break;case 3://TEXT_NODEstr += cs[i].nodeValue;break;}}return str;}function ts_resortTable(lnk) {var span;for (var ci=0;ci<lnk.childNodes.length;ci++) {if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];}var spantext = ts_getInnerText(span);var td = lnk.parentNode;var column = td.cellIndex;var table = getParent(td,'TABLE');if (table.rows.length <= 1) return;var itm = ts_getInnerText(table.rows[1].cells[column]);sortfn = ts_sort_caseinsensitive;if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;if (itm.match(/^[$]/)) sortfn = ts_sort_currency;if (itm.match(/^[\d\.]+$/)) sortfn = ts_sort_numeric;SORT_COLUMN_INDEX = column;var firstRow = new Array();var newRows = new Array();for (i=0;i<table.rows[0].length;i++) { firstRow[i] = table.rows[0][i]; }for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows[j]; }newRows.sort(sortfn);if (span.getAttribute("sortdir") == 'down') {ARROW = '<img src="/db/images/icon_down.gif"/>';newRows.reverse();span.setAttribute('sortdir','up');} else {ARROW = '<img src="/db/images/icon_up.gif"/>';span.setAttribute('sortdir','down');}for (i=0;i<newRows.length;i++) { if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) table.tBodies[0].appendChild(newRows[i]);}for (i=0;i<newRows.length;i++) { if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows[i]);}var allspans = document.getElementsByTagName("span");for (var ci=0;ci<allspans.length;ci++) {if (allspans[ci].className == 'sortarrow') {if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?allspans[ci].innerHTML = '&nbsp;&nbsp;&nbsp;';}}}span.innerHTML = ARROW;ts_stripeTable(table);}function getParent(el, pTagName) {if (el == null) return null;else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())// Gecko bug, supposed to be uppercasereturn el;elsereturn getParent(el.parentNode, pTagName);}function ts_sort_date(a,b) {aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);if (aa.length == 10) {dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);} else {yr = aa.substr(6,2);if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }dt1 = yr+aa.substr(3,2)+aa.substr(0,2);}if (bb.length == 10) {dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);} else {yr = bb.substr(6,2);if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }dt2 = yr+bb.substr(3,2)+bb.substr(0,2);}if (dt1==dt2) return 0;if (dt1<dt2) return -1;return 1;}function ts_sort_currency(a,b) { aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');return parseFloat(aa) - parseFloat(bb);}function ts_sort_numeric(a,b) { aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));if (isNaN(aa)) aa = 0;bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX])); if (isNaN(bb)) bb = 0;return aa-bb;}function ts_sort_caseinsensitive(a,b) {aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();if (aa==bb) return 0;if (aa<bb) return -1;return 1;}function ts_sort_default(a,b) {aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);if (aa==bb) return 0;if (aa<bb) return -1;return 1;}function ts_stripeTable(tbl) {var table = $(tbl);var tbody;if(tbody = table.getElementsByTagName("tbody")[0]) {table = tbody;}for(i=0;i<table.rows.length;i++) {if(i%2) {newClass = "even";oldClass = "odd";} else {newClass = "odd";oldClass = "even";}Element.removeClassName(table.rows[i],oldClass);Element.addClassName(table.rows[i],newClass);}}function addEvent(elm, evType, fn, useCapture){if (elm.addEventListener){elm.addEventListener(evType, fn, useCapture);return true;} else if (elm.attachEvent){var r = elm.attachEvent("on"+evType, fn);return r;} else {alert("Handler could not be removed");}} </script><script type="text/javascript" language="javascript">function createStyleRule(selector, declaration) {if (!document.getElementsByTagName ||!(document.createElement || document.createElementNS)) return;var agt = navigator.userAgent.toLowerCase();var is_ie = ((agt.indexOf("msie") != -1) &&  (agt.indexOf("opera") == -1));var is_iewin = (is_ie &&  (agt.indexOf("win") != -1));var is_iemac = (is_ie &&  (agt.indexOf("mac") != -1));if (is_iemac) return; // script doesn't work properly in IE/Macvar head = document.getElementsByTagName("head")[0]; var style = (typeof document.createElementNS != "undefined") ?document.createElementNS("http://www.w3.org/1999/xhtml", "style") :document.createElement("style");if (!is_iewin) {var styleRule = document.createTextNode(selector + " {" + declaration + "}");style.appendChild(styleRule); // bugs in IE/Win}style.setAttribute("type", "text/css");style.setAttribute("media", "screen"); head.appendChild(style);if (is_iewin &&  document.styleSheets &&  document.styleSheets.length > 0) {var lastStyle = document.styleSheets[document.styleSheets.length - 1];if (typeof lastStyle.addRule == "object") {lastStyle.addRule(selector, declaration);}}}function zoomThumbnails(value) {if(!document.all) {var newValue = Math.round(value);var cssRule = "font-size: "+newValue+"px";createStyleRule("a.thumbnail pre",cssRule);}}function zoomThumbnailsUpdate(value) {var newValue = Math.round(value);var cssRule = "font-size: "+newValue+"px";createStyleRule("a.thumbnail pre",cssRule);}var myrules = {'#printqueue tr' : function(element){element.onmouseover = function(){Element.addClassName(element,"hover");},element.onmouseout = function(){Element.removeClassName(element,"hover");}},'a.deletejob' : function(element){if(document.all) {element.onclick = function(e) {return confirm("Are you sure you want to delete this job?");}}},'input.date' : function(dateField){if(!$(dateField.id+"trigger")) {if(dateField.id=="") {dateField.id = dateField.name;}Calendar.setup({inputField : dateField.id, ifFormat : "%m/%d/%y",showsTime : true,button : dateField.id, //*step : 1,weekNumbers: false,/* range: [2004,2005,2006], */showsTime: false,onUpdate: function(e) {var row = $(dateField.id).parentNode;while(row.tagName!="TR") {row = row.parentNode;}Element.removeClassName(row,"error");}});}}};function selectAll() {form = document.forms['printqueueform'];if (form.elements['entries[]'].length) {  for(var i = 0; i < form.elements['entries[]'].length; i++) {    form.elements['entries[]'][i].checked = 1;  }} else {  form.elements['entries[]'].checked = 1;}}function deselectAll() {form = document.forms['printqueueform'];if (form.elements['entries[]'].length) {  for(var i = 0; i < form.elements['entries[]'].length; i++) {    form.elements['entries[]'][i].checked = 0;  }} else {  form.elements['entries[]'].checked = 0;}}function showAdvSearch() {Effect.Fade('filter', {duration: 1.0});setTimeout("Effect.Appear('advanced_search', {duration: 1.0})", 940);$('search_link').innerHTML = 'Hide Advanced Search';$('search_link').onclick = hideAdvSearch;}function hideAdvSearch() {Effect.Fade('advanced_search', {duration: 1.0});setTimeout("Effect.Appear('filter', {duration: 1.0})", 940);$('search_link').innerHTML = 'Advanced Search';$('search_link').onclick = showAdvSearch;}Behaviour.register(myrules);</script></head><body class=""><div id="container"><!-- <div id="header"><a href="/" id="logo"><img src="/db/images/logo_bravoprint.gif" /></a><ul id="navbar"><li class="active"><a href="/dbc/SBBP.SB.LISTPEQS">Print Queue</a></li></ul></div>--><div id="maincontent"><div id="content"><!-- <h1>Print Queue</h1><div id="alerts"></div>--><div style="margin-left:12px; margin-bottom:30px;"> <div class="printDialog" id="printDialogSelected" style="display:none;left:92px;top:27px;"><div>Queue <input type="text" value="" style="width:40px;" maxlength="4" name="overridequeue"/><span class="button"><button type="submit" onclick="this.form.submit(); return false;">Print</button></span> <span class="button"><button type="button" onclick="Effect.SlideUp('printDialogSelected',{duration:0.25}); return false;">Cancel</button></span></div></div></div><form action="/dbc/SBBP.SB.LISTPEQS" method="post" id="printqueueform"><input type="hidden" value="" name="action" id="action"/><input type="hidden" value="" name="overridequeue" id="overridequeue"/><input type="hidden" value="" name="queue" id="queue"/><input type="hidden" value="" name="port" id="port"/><input type="hidden" value="" name="owner" id="owner"/><input type="hidden" value="" name="searchstring" id="searchstring"/><input type="hidden" value="" name="begindate" id="begindate"/><input type="hidden" value="" name="enddate" id="enddate"/><input type="hidden" value="" name="search_type" id="search_type"/><div style="float: left;margin: 0 0 10px 12px;"><img src="/db/images/graphic_withselected_up.gif"/> <a href="#" title="Select All" onclick="selectAll();return false;">Select All</a> |<a href="#" title="Deselect All" onclick="deselectAll();return false;">Deselect All</a> | With Selected: <span id="queueOverride">Print to Queue <input type="text" value="" name="queuet" id="queuet" style="width:40px;vertical-align:bottom;"/></span><a href="#" title="Print Selected" onclick="$('overridequeue').value=$('queuet').value;$('action').value='print';$('printqueueform').submit(); return false;"><img src="/db/images/button_print.gif"/></a><a href="#" title="Delete Selected" onclick="if(confirm('Are you sure you want to delete the selected jobs?')) { $('action').value='delete';$('printqueueform').submit(); return false;} else { return false; }"><img src="/db/images/button_delete.gif"/></a></div><table class="listing sortable" id="printqueue"><thead><tr><th style="width:20px;"></th><th>Job</th><th>Queue</th><th>User</th><th>Port</th><th>Size (k)</th><th>Datetime</th><th>Status</th><th style="width:120px;"></th></tr></thead><tbody>[QUEUE]</tbody></table><div style="margin: 0 0 0 12px;"><img src="/db/images/graphic_withselected.gif"/> <a href="#" title="Select All" onclick="selectAll();return false;">Select All</a> |<a href="#" title="Deselect All" onclick="deselectAll();return false;">Deselect All</a> | With Selected: <span id="queueOverride">Print to Queue <input type="text" value="" name="queueb" id="queueb" style="width:40px;vertical-align:bottom;"/></span><a href="#" title="Print Selected" onclick="$('overridequeue').value=$('queueb').value;$('action').value='print';$('printqueueform').submit(); return false;"><img src="/db/images/button_print.gif"/></a><a href="#" title="Delete Selected" onclick="if(confirm('Are you sure you want to delete the selected jobs?')) { $('action').value='delete';$('printqueueform').submit(); return false;} else { return false; }"><img src="/db/images/button_delete.gif"/></a><br/> </div></form></div></div></div><div id="footer"></div></body></html>                                                                                                                                                                                                                                                                                                                                                                                           ./mvappsvr/core/ud/APP.INSTALLER                                                                    0000644 0000000 0000000 00000027700 13674161075 015046  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   *
* Copyright (C) 2009 Sierra Bravo Corporation, All Rights Reserved
*
* Written by: Luke Bucklin, Sierra Bravo Corporation
* Date: 07/15/2009
* Description: Application installer
*
* Modified By: Dave Bucklin, Nerdery Interactive Labs
* Date: 02/04/2011
* Description: Add overwrite flag, clashes handling specific to MVDashboard
*
* Modified By: Mike Street, Zumasys
* Date: 07/22/2015
* Description: Adapt for UniData
*
* Modified By: Peter Schellenbach, Zumasys
* Date: 07/28/2015
* Description: added DATA stacking for EXECUTE commands (UniData CONVERT.DICTS program)
*
*
    BUFFER = ""
*
    INSTALL.LOG.ON = 0
    INSTALL.LOG.ID = "INSTALL*":DATE():"*":TIME()
    INSTALL.LOG = ""
    PROCESS.STATUS = 0
    OVR.FLAG = 0
    PROMPT ""
    PRINT "File path: ":    
    INPUT PACKAGE.FILE
    IF PACKAGE.FILE = "VERSION" THEN
        PRINT
        PRINT "Installer Version"
        PRINT "1.0"
        STOP
    END
*
    returnCode = ""
*
    OPENSEQ PACKAGE.FILE TO HANDLE ELSE
        PRINT "Unable to open sequential file"
        STOP
    END
*UD   HANDLE = %OPEN(PACKAGE.FILE,O$RDONLY+O$BINARY)
*UD   IF NOT(HANDLE) THEN
*UD       PRINT "Unable to open file." ; STOP
*UD   END
*
    L = 0
    PACKET = ""
    LOOP    
*UD     L = %READ(HANDLE,BUFFER,10000)
*UD
        OSBREAD BUFFER FROM HANDLE LENGTH 10000 
*UD   IF PACKET = '' THEN
*UD      CRT 'CANT READ BUFFER'
*UD      STOP
*UD    END
*UD   BUFFER=''
*UD END
        L=LEN(BUFFER)
*END UD*
    WHILE L > 0 DO
        PACKET := BUFFER
    REPEAT
    IF PACKET = "" THEN
        PRINT "No package."
        STOP
    END
    INSTALL.ID = TIMEDATE()
    KEEP.SOURCE = "1"
*
    PRINT
    PRINT "Installing..."
*
    OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE
        CMD = "CREATE-FILE MV.PACKED.FILE 1 31"
        GOSUB EXEC.CMD
        OPEN '','MV.PACKED.FILE' TO F.PACKED.FILE ELSE
            ERRFILE = "MV.PACKED.FILE"
            GOSUB OPEN.ERR
            STOP
        END
    END
    WRITE PACKET ON F.PACKED.FILE, "PACKAGE"

    OPEN '','VOC' TO F.MD ELSE
        ERRFILE = "VOC"
        GOSUB OPEN.ERR
        STOP
    END
    OPEN "MV.INSTALL" TO F.INSTALL ELSE
        CMD = "CREATE-FILE MV.INSTALL 1 11"
        GOSUB EXEC.CMD
        OPEN "MV.INSTALL" TO F.INSTALL ELSE
            ERRFILE = "MV.INSTALL"
            GOSUB OPEN.ERR
            STOP
        END
    END
    OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE
        CMD = "CREATE-FILE MV.INSTALL.CF 1 11"
        GOSUB EXEC.CMD
        OPEN "MV.INSTALL.CF" TO F.INSTALL.CF ELSE
            ERRFILE = "MV.INSTALL.CF"
            GOSUB OPEN.ERR
            STOP
        END
    END
    OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE
        CMD = "CREATE-FILE MVAPPS.INSTALLED 3 31"
        GOSUB EXEC.CMD
        OPEN "MVAPPS.INSTALLED" TO F.MVAPPS.INSTALLED ELSE
            ERRFILE = "MVAPPS.INSTALLED"
            GOSUB OPEN.ERR
            STOP
        END
    END
    OPEN "DICT","MVDB.CLASHES" TO FD.MVDB.CLASHES ELSE
        CMD = "CREATE-FILE DICT MVDB.CLASHES 3"
        GOSUB EXEC.CMD
    END
    INSTALL.LOG.ON = 1
*
    CLEARFILE F.INSTALL
    DELETE F.INSTALL.CF, "MVAPPS-PRE-SCRIPT"      ;* Get rid of this just in case one is left over
    DELETE F.INSTALL.CF, "MVAPPS-POST-SCRIPT"
    DELETE F.INSTALL.CF, "PACKAGE.INFO"
    TARGET = F.INSTALL
    TARGET.NAME = "MV.INSTALL"
    GOSUB UNPACK
* All individual file packages are now in INSTALL
* Unpack the MD scripts
    READ PACKET FROM F.INSTALL, "MV.INSTALL.CF" THEN
        TARGET = F.INSTALL.CF
        TARGET.NAME = "MV.INSTALL.CF"
        GOSUB UNPACK
        DELETE F.INSTALL, "MV.INSTALL.CF"
    END
*
* Execute scripts that are required prior to compilation
*
    READ CMD FROM F.INSTALL.CF, "MVAPPS-PRE-SCRIPT" THEN
        LOG.LINE = TIMEDATE():": Processing PRE-INSTALL commands..."
        INSTALL.LOG<-1> = LOG.LINE
* Execute commands that need to be run before the install process begins
        GOSUB EXEC.CMD
        LOG.LINE = TIMEDATE():": Completed PRE-INSTALL commands."
        INSTALL.LOG<-1> = LOG.LINE
    END
    READ PACKAGE.INFO FROM F.INSTALL.CF, "PACKAGE.INFO" ELSE PACKAGE.INFO = ""
    PACKAGE.ID = PACKAGE.INFO<6>
    PACKAGE.INFO<4> = DATE()
    PACKAGE.INFO<5> = TIME()
*
    SELECT F.INSTALL
    LOOP
        READNEXT PKG.ID ELSE EXIT
        IF PKG.ID # "" THEN
            READ PACKET FROM F.INSTALL, PKG.ID THEN
                TARGET.FILE = FIELD(PKG.ID," ",1)
                IF TARGET.FILE[1,7] = "BINARY:" THEN TARGET.FILE=TARGET.FILE[8,999]        ;*UD
                DICT.MOD = FIELD( PKG.ID," ",2)
                DATA.MOD = FIELD( PKG.ID," ",3)
                DICT = ""
                IF FIELD( PKG.ID,'_',1 ) = "DICT" THEN
                    TARGET.FILE = FIELD( PKG.ID, '_', 2 )
                    IF TARGET.FILE[1,7] = "BINARY:" THEN TARGET.FILE=TARGET.FILE[8,999]    ;*UD
                    DICT = "DICT"
                END
                OPEN DICT,TARGET.FILE TO F.TARGET ELSE
                    IF NOT(INDEX(TARGET.FILE,':',1)) THEN
                        IF DICT.MOD = "" THEN DICT.MOD = 3
                        IF DATA.MOD = "" THEN DATA.MOD = 31
                        CMD = "CREATE-FILE ":TARGET.FILE:" ":DICT.MOD:" ":DATA.MOD
                        GOSUB EXEC.CMD
                    END
                    OPEN DICT,TARGET.FILE TO F.TARGET ELSE
                        PRINT "Unable to create file ":TARGET.FILE
                        GOSUB CLEANUP
                        STOP
                    END
                END
                TARGET = F.TARGET
                TARGET.NAME = TRIM(DICT:" ":TARGET.FILE)
                GOSUB UNPACK
            END
        END
    REPEAT
*
* Execute script required post compilation
*
    READ CMD FROM F.INSTALL.CF, "MVAPPS-POST-SCRIPT" THEN
        LOG.LINE = TIMEDATE():": Processing POST-INSTALL commands..."
        INSTALL.LOG<-1> = LOG.LINE
* Use compile options if they are present.
        OPEN 'MVDB.CONTROL' TO F.MVDB.CONTROL THEN
            READ COMPILE.SETUP FROM F.MVDB.CONTROL, 'COMPILE.SETUP' THEN
                COMPILE.VERB = FIELD(COMPILE.SETUP<1>,' ',1)
                IF COMPILE.VERB # '' THEN
                    OPTS = FIELD(COMPILE.SETUP<1>,'(',2)
                    IF OPTS # '' THEN OPTS = "(":OPTS
                    CMD.CNT = DCOUNT( CMD, @AM )
                    FOR CMD.XX = 1 TO CMD.CNT
                        IF FIELD(CMD<CMD.XX>,' ',1) = 'BASIC' OR FIELD(CMD<CMD.XX>,' ',1) = 'COMPILE' THEN
*make sure we use the right verb and options from the compile.setup
                            CMD<CMD.XX> = COMPILE.VERB:' ':CMD<CMD.XX>[INDEX(CMD<CMD.XX>,' ',1)+1,999]:' ':OPTS
                        END
                    NEXT CMD.XX
                END
            END
        END
* Execute commands that need to be run at the end of the install process
        GOSUB EXEC.CMD
        LOG.LINE = TIMEDATE():": Completed POST-INSTALL commands."
        INSTALL.LOG<-1> = LOG.LINE
    END
*
*UD*    IF NOT(KEEP.SOURCE) THEN
*UD*        FOR X = 1 TO DCOUNT( SOURCE.FILES, @AM )
*UD*            CMD = "CLEAR-FILE DATA ":SOURCE.FILES<X>
*UD*            GOSUB EXEC.CMD
*UD*        NEXT X
*UD*    END
    READ INSTALL.LIST FROM F.INSTALL.CF, "LAST.INSTALL" ELSE INSTALL.LIST = ""
    INSTALL.LIST = INSERT( INSTALL.LIST, 1, 0, 0, INSTALL.ID )
    WRITE INSTALL.LIST ON F.INSTALL.CF, "LAST.INSTALL"
    GOSUB CLEANUP
    INSTALL.LOG<-1> = TIMEDATE():": Install complete."
    WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID
    WRITE PACKAGE.INFO ON F.MVAPPS.INSTALLED, PACKAGE.ID
    PROCESS.STATUS = 1
    GOSUB SEND.DATA
    STOP
*********
UNPACK:   *
*********
    PRINT "Unpacking ":TARGET.NAME:"... ":
*
    BYTES = 0
    CNT = 0
    LOOP
        PLENGTH = OCONV( PACKET[1,6], 'MCXD' )
        REC = PACKET[7,PLENGTH]
        PACKET = PACKET[PLENGTH+7,9999999]
        ID = REC<1>
        REC = DELETE( REC, 1, 0, 0 )
        TYP = REC[1,2]
        OVR.FLAG = REC[3,1]
        REC = REC[4,9999999]
        IF TYP = "0x" THEN
            REC = OCONV( REC, 'MY' )
            END ELSE IF TYP # "0c" THEN
                REC = TYP:REC
            END
*
            CNT += 1
            BYTES += LEN(REC)
            IF OVR.FLAG THEN
                IF DICT = "" THEN
*If we're not installing DICT items, compare for CLASHES
                    READ CLASH FROM TARGET, ID THEN
                        BEGIN CASE
*Preserve dashboard user passwords
                        CASE TARGET.FILE = "MVDB.USERS"
                            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>
*Preserve dashboard access profile
                        CASE TARGET.FILE = "MVDB.DEFS"
                            IF CLASH<5> # REC<5> THEN REC<5> = CLASH<5>
*Preserve widget access profile
                        CASE TARGET.FILE = "MVDB.WIDGETS"
                            IF CLASH<2> # REC<2> THEN REC<2> = CLASH<2>
*Preserve widget compile option
                        CASE TARGET.FILE = "MVDB.CONTROL" AND ID = "COMPILE.SETUP"
                            IF CLASH<1> # REC<1> THEN REC<1> = CLASH<1>
                        END CASE
                        IF CLASH # '' AND REC # CLASH THEN
                            CLASH.NAME = TARGET.NAME
                            CONVERT " " TO "_" IN CLASH.NAME
                            OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE
                                *UD* CMD = "CREATE-FILE DATA MVDB.CLASHES,":CLASH.NAME:" 7"
                                CMD = "CREATE-FILE MULTIFILE MVDB.CLASHES,":CLASH.NAME:" 7" ; *UD*
                                GOSUB EXEC.CMD
                                OPEN 'MVDB.CLASHES,':CLASH.NAME TO F.CLASHES ELSE
                                    PRINT "Unable to create file MVDB.CLASHES,":CLASH.NAME
                                    GOSUB CLEANUP
                                    STOP
                                END
                            END
                            WRITE CLASH ON F.CLASHES, ID
                            CLOSE F.CLASHES
                        END
                    END
                END
                WRITE REC ON TARGET, ID
            END ELSE
                READ TST FROM TARGET, ID ELSE
                    WRITE REC ON TARGET, ID
                END
            END
            IF NOT(MOD(CNT,500)) THEN PRINT "*":
        UNTIL PACKET = "" DO REPEAT
        IF CNT # 1 THEN PLURAL = "s" ELSE PLURAL = ""
        PRINT CNT:" record":PLURAL:"."
        LOG.LINE = TIMEDATE():": UNPACKED ":CNT:" RECORDS TO ":TARGET.NAME
        INSTALL.LOG<-1> = LOG.LINE
        RETURN
**********
CLEANUP:  *
**********
        CLEARFILE F.INSTALL
        CLEARFILE F.PACKED.FILE
        RETURN
*
EXEC.CMD: *
*
        CMD.CNT = DCOUNT( CMD, @AM )
        FOR CMD.XX = 1 TO CMD.CNT
            THIS.CMD = CMD<CMD.XX>
            *UD* Stacked data?
            IF INDEX(THIS.CMD,@VM,1) THEN
                THIS.DATA = THIS.CMD<1,1>
                THIS.CMD = THIS.CMD<1,2>
            END ELSE
                THIS.DATA = ''
            END
            LOG.LINE = TIMEDATE():": EXEC: ":THIS.CMD
            INSTALL.LOG<-1> = LOG.LINE
            IF FIELD(THIS.DATA,' ',1) NE "SELECT" THEN
            DATA.CNT = DCOUNT(THIS.DATA,@VM)
            *UD* Use DATA statements for stacked data
            FOR DATA.XX = 1 TO DATA.CNT
                DATA THIS.DATA<1,DATA.XX>
            NEXT DATA.XX
            END
            * Run the command
            IF FIELD(THIS.DATA,' ',1) = "SELECT" THEN
                IF FIELD(THIS.CMD,' ',1) = "CATALOG" THEN DATA "Y"
                EXECUTE THIS.DATA : @AM : THIS.CMD CAPTURING JUNK
            END ELSE
            EXECUTE THIS.CMD CAPTURING JUNK
            END
            IF INSTALL.LOG.ON THEN
                WRITE INSTALL.LOG ON F.INSTALL.CF, INSTALL.LOG.ID
            END
        NEXT CMD.XX
        RETURN
*
OPEN.ERR: *
*
        LOG.LINE = TIMEDATE():": FILE OPEN ERROR: ":ERRFILE
        INSTALL.LOG<-1> = LOG.LINE
        PRINT LOG.LINE
        GOSUB SEND.DATA
        RETURN
*
SEND.DATA:*
*
        PRINT
        IF PROCESS.STATUS = 1 THEN INSTALL.STATUS = "Success" ELSE INSTALL.STATUS = "Failed"
        PRINT "Install process finished. Status: ":INSTALL.STATUS
        RETURN
    END
                                                                ./mvappsvr/core/ud/MVDB.SETUP                                                                       0000644 0000000 0000000 00000000342 13674161075 014512  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   PQ
HECLTYPE P
P
HBASICTYPE "P"
P
HCREATE.FILE DIR WDB.BP
P
HCOPY WDB.BP.CORE APP.INSTALLER (O
STON
H(WDB.BP
P
HBASIC WDB.BP APP.INSTALLER
P
HCATALOG WDB.BP APP.INSTALLER FORCE DIRECT
P
HRUN WDB.BP APP.INSTALLER
STON
A2
H<
P
X
                                                                                                                                                                                                                                                                                              ./mvappsvr/core/ud/dbdoc.html                                                                       0000644 0000000 0000000 00000010470 12571716373 015106  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <ol>
    <li id="database_required">
        <h3 class="docs_sub_item">Required Parameters</h3>
        <p>The "Required Parameters" section includes all of the parameters that must be set for the software to 
           operate correctly.
           <br><br>
           <u>UniData Command Path</u>
              This field must contain the full operating system path to your UniData command executable (udt on
              Linux or udt.exe on Windows).

           <br><br>
           <u>Unix User ID</u>
              The Unix user that will own the UniData account directory. If the the user does not exist, a new user will be created.

           <br><br>
           <u>Unix Group ID</u>
              This primary Unix group for the specified Unix user. If the group does not exist, a new group will be created.

           <br><br>
           <u>UniData Account</u>
              This field contains the UniData directory name that is used to house your application server software.  When
              initially configuring the software, use this field to set the account name. This account directory will be
              created in the Account Parent Directory. Do not enter a full path in this field.

           <br><br>
           <u>Account Parent Directory</u>
              This field should be filled out to the full operating system path of the parent directory which will contain the dashboard account directory.
              The dashboard software installation will create the dashboard account in this directory.

        </p>
    </li>
    <li id="database_optional">
        <h3 class="docs_sub_item">Optional Parameters</h3>
        <p>The "Optional Parameters" section includes options that may enhance the operation of your software but are not
           required for its operation.
<!--
           <br><br>
           <u>Working Directory</u>
              This field contains the initial working directory that is used for the software.  Typically, this can be set to
              any temporary storage directory or the installation directory of the application server software.
-->
           <br><br>
           <u>Segment Size</u>
              This field contains the maximum length of the data string that is sent to the MultiValue database during any
              request.  The default value for this field is 3000, but it can be adjusted up or down as needed.  Typically, this
              field would be adjusted down if you are experiencing any data loss with data inside the request URI.

           <br><br>
           <u>DB Retries</u>
              This field contains the number of times that the software will attempt to connect to your MultiValue database
              before giving up and displaying an error message.  A common reason that the system would not be able to connect
              to the database would be that the system has exceeded its licensed number of user sessions.  Configuring this
              parameter to a higher number would cause the system to attempt to get a user license multiple times per connection.

              Typically, this should be set to "3" or some other integer.
        </p>
    </li>
    <li id="database_install">
        <h3 class="docs_sub_item">Install Dashboard Software</h3>
        <p>
          The "Install Dashboard Software" section of this tab is used to install or re-install the core software package to your
          MultiValue database.  This section is typically only necessary during the initial installation process, however it could
          also be used as part of an upgrade process or re-initialization of the software.

<!--       <br><br>
           <u>root or Administrator Username</u>
              This field should be filled out to include the username of your "root" or "Administrator" user, or any user with full database privileges.

           <br><br>
           <u>root or Administrator Password</u>
              This field should be filled out to include the password for your "root" or "Administrator" user as configured above. 
-->
           <br><br>
           <u>Package Directory</u>
              This field should be filled out to include the system directory which contains the core software packages.  These
              packages were installed with your software and the correct directory will typically be already filled in.

        </p>
    </li>

</ol>
                                                                                                                                                                                                        ./mvappsvr/core/ud/dbconfig.html                                                                    0000644 0000000 0000000 00000013352 12571716373 015610  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   <div class="database_setup">
    <form name="database_setup" id="database_setup" method="get">
    
        <div class="pipe">
            <input type="hidden" name="feature" value="database_setup">
            <input type="hidden" name="tab" value="database">
            <input type="hidden" name="submit_form" value="true">
            <table cellpadding="0">
                <tr>
                    <th>UniData Command Path:</th>
                    <td><input type="text" name="dbbinary" id="dbbinary" value="[DBBINARY]"/><a href="javascript:showHelp('dbbinary_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>Unix User ID:</th>
                    <td><input type="text" name="dbusername" id="dbusername" value="[DBUSERNAME]"/><a href="javascript:showHelp('dbusername_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>Unix Group ID:</th>
                    <td><input type="text" name="dbappname" id="dbappname" value="[DBAPPNAME]"/><a href="javascript:showHelp('dbgroup_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>UniData Account:</th>
                    <td><input type="text" name="dbaccount" id="dbaccount" value="[DBACCOUNT]"/><a href="javascript:showHelp('dbaccount_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>Account Parent Directory:</th>
                    <td><input type="text" name="dbacctpath" id="dbacctpath" value="[DBACCTPATH]"/><a href="javascript:showHelp('dbacctpath_help', 'required_help_box');" class="info">More info</a></td>
                </tr>
            </table>
        </div>

        <div class="pipe">
            <h2 class="">Optional Parameters</h2>
            <table cellpadding="0">
<!--            <tr>
                    <th>Working Directory:</th>
                    <td><input type="text" name="dbworkingdir" id="dbworkingdir" value="[DBWORKINGDIR]"/><a href="javascript:showHelp('dbworkingdir_help', 'optional_help_box');" class="info">More info</a></td>
                </tr> -->
                <tr>
                    <th>Segment Size:</th>
                    <td><input type="text" name="maxrequest" id="maxrequest" value="[MAXREQUEST]"/><a href="javascript:showHelp('maxrequest_help', 'optional_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>DB Retrys:</th>
                    <td><input type="text" name="dbfails" id="dbfails" value="[DBFAILS]"/><a href="javascript:showHelp('dbfails_help', 'optional_help_box');" class="info">More info</a></td>
                </tr>
            </table>
        </div>
        <a href="javascript:saveDB();" class="save">Save Changes</a>                
        <br>
    </form>
</div>
            
[DBINSTALL]

<div class="database_install">
    <br><br>
            
    <form name="install_dashboard" id="install_dashboard" method="get">
        <input type="hidden" name="tab" value="database">
        <input type="hidden" name="feature" value="install_dashboard">
        <input type="hidden" name="submit_form" value="true">
        <div class="pipe">
            <h2>Install Dashboard Software</h2>
            <table cellpadding="0">
<!--            <tr>
                    <th>root or Administrator Username:</th>
                    <td><input type="hidden" name="dm_username" id="dm_username" value="[DM_USERNAME]"/><a href="javascript:showHelp('dm_user_help', 'install_help_box');" class="info">More info</a></td>
                </tr>
                <tr>
                    <th>root or Administrator Password:</th>
                    <td><input type="hidden" name="dm_password" id="dm_password" value="[DM_PASSWORD]"/><a href="javascript:showHelp('dm_pass_help', 'install_help_box');" class="info">More info</a></td>
                </tr> -->
                <tr>
                    <th>Package Directory:</th>
                    <td><input type="text" name="db_package" id="db_package" value="[DB_PACKAGE]"/><a href="javascript:showHelp('db_package_help', 'install_help_box');" class="info">More info</a></td>
                </tr>
            </table>
        </div>
        <a href="javascript:installDB();" class="save">Install</a>
        <div class="clear"></div>
    </form>
</div>

<script>
function validateDB(form){
    if (form.dbbinary.value == "") {
        alert("Missing required field!");
        form.dbbinary.focus();
        return (false);
    }
    if (form.dbaccount.value == "") {
        alert("Missing required field!");
        form.dbaccount.focus();
        return (false);
    }
    if (form.dbusername.value == "") {
        alert("Missing required field!");
        form.dbusername.focus();
        return (false);
    }
    if (form.dbappname.value == "") {
        alert("Missing required field!");
        form.dbappname.focus();
        return (false);
    }
    if (form.dbacctpath.value == "") {
        alert("Missing required field!");
        form.dbacctpath.focus();
        return (false);
    }
    return (true);
}
function saveDB(){
    document.database_setup.action = ""; //server side script location
    if(validateDB(document.database_setup)){
        document.database_setup.submit();
    }
}
function validateInstall(form) {
    if (form.db_package.value == "") {
        alert("Missing required field!");
        form.db_package.focus();
        return (false);
    }
    return (true);
}
function installDB(){
    document.install_dashboard.action = ""; //server side script location
    if(validateInstall(document.install_dashboard)){
        document.install_dashboard.submit();
    }
}
</script>
                                                                                                                                                                                                                                                                                      ./mvappsvr/core/ud/platform.conf                                                                    0000644 0000000 0000000 00000010615 13364666755 015652  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ;#############################################################################;
; UniVerse Platform Definitions
;#############################################################################;  

[db_platform]

; Database platform type (should be same as core subdirectory name where platform files are located)
dbType = ud

; The following tokens are replaced by configuration settings and installation options when processing
; installation commands, installation data files, required file list, and the mvconnector command line.
; Most of these correspond to a "db..." setting or option, as defined below.
; [DBBINARY], [DBACCOUNT], [DBUSERNAME], [DBPASSWORD], [DBVME], [DBWORKINGDIR], [DBAPPNAME], [DBHOSTNAME]
; [DM_USERNAME], [DM_PASSWORD], [DM_ACCT_PASS], [DBACCTPATH]
; [DB_PACKAGE] - this is the full path to the directory containing the platform core files, including this 'platform.conf' file.
; [PACKAGE_FOLDER] - exactly the same as [DB_PACKAGE] except uses forward slashes for directory separator under Windows (d3).
; [DBCMDLINE] - the command line passed to the database server. This is formed internally and varies depending on the function.
;
; Installation commands can have optional parts, enclosed in { }. Within the curly brackets, there must be one
; token enclosed in [ ]. If the token is null, the entire part enclosed in { } is removed from the command. Otherwise
; only the curly brackets are removed. This allows using a command that has an optional password (or other parameter)
; to be written like {,[DM_ACCT_PASS]} where, the leading comma will be removed if DM_ACCT_PASS is null.


; Database installation commands (up to 9, executed in sequence). To feed data to the database command STDIN,
; use an 'echo' command and pipe it to the database command. On Linux, use 'printf', on Windows, use 'echo'.
; The install command line must be less than 2048 characters!

; For UniData, [DBUSERNAME] and [DBAPPNAME] are used for the O/S user & group ID

; create the account directory, user & group
install_command1 = "( umask 002 ; mkdir -p [DBACCTPATH]/[DBACCOUNT] ; groupadd -f [DBAPPNAME] ; useradd -g [DBAPPNAME] [DBUSERNAME] ) 2>&1"

; initialize using newacct
install_command2 = "( umask 002 ; cd [DBACCTPATH]/[DBACCOUNT] ; $(dirname "[DBBINARY]")/newacct [DBUSERNAME] [DBAPPNAME] ) 2>&1"

; run MVDB.SETUP PROC to install the package
install_command3 = "( cd [DBACCTPATH]/[DBACCOUNT] ; printf "ECLTYPE P\nBASICTYPE \"P\"\nAE VOC WDB.BP.CORE\nDE9999\nI\nDIR\n[DB_PACKAGE]\nD_VOC\n\nFI\nCOPY WDB.BP.CORE MVDB.SETUP (O\n(VOC\nMVDB.SETUP [DB_PACKAGE]/MVDB-FULL\n" | [DBBINARY] ) 2>&1"

; List of files/directories that must exist before installation can begin
install_files = [DBBINARY],[DB_PACKAGE]/APP.INSTALLER,[DB_PACKAGE]/MVDB.SETUP,[DB_PACKAGE]/MVDB-FULL,[DBACCTPATH]

; mvconnector command line
dbCommand = "[DBBINARY]{ "[DBCMDLINE]"} 2>&1"

; mvconnector required parameters
dbRequired = dbBinary,dbAcctPath,dbAccount

; mvconnector environment variables (separate variables using commas; tokens may be used in the value for a variable)
dbEnvVars = "LANG=C,TERM=dumb"

; Full path to database command executable
dbBinary = "/usr/ud81/bin/udt"

; Account name where dashboard is installed
dbAccount = MVDB

; User name for new dashboard account
dbUsername = mvdb

; Group name for new dashboard account
dbAppname = mvdb

; Password for dashboard account user
dbPassword =

; Working directory for database command (current directory)
; UniData note: this variable is not referenced in dbconfig.html, so it will get
; copied as-is to dbc_database.conf, and when the database command line is
; constructed, the token substitution will take place. This is very important!
dbWorkingDir = "[DBACCTPATH]/[DBACCOUNT]"

; Path to parent directory which will contain the dashboard account directory (QM, JB, U2)
dbAcctPath = /home

; Maximum length of command line sent to database
maxRequest = 1000

; Number of times to retry database requests
dbFails = 3

; Mode for passing query string and database command: 0 = use command line, otherwise pipe to stdin:
;  1 = query string only, newline is LF
;  2 = query string only, newline is CR/LF
;  3 = query string only, newline is CR
;  5 = database command and query string, newline is LF
;  6 = database command and query string, newline is CR/LF
;  7 = database command and query string, newline is CR
dbVarMode = 5

; Root or administrator user name
dm_username = 

; Root or administrator password
dm_password = 
                                                                                                                   ./mvappsvr/NOTICE.txt                                                                               0000644 0000000 0000000 00000014171 13114330126 013307  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   Copyright (c) 2017. Zumasys Inc..  All rights reserved.  

This product includes software developed by third parties, as set forth below.

Software from third parties is subject to license restrictions, which you must accept as a condition to using such software.  For additional details, please see the Zumasys End User License Agreement and the third party license agreements set forth below or that accompany the product.  Zumasys may modify some third party programs.  Please see accompanying documentation for details. 

------------------------------------------------------------------------

A)  This product includes the following software developed by Christphe Dolivet:

EditArea

Copyright 2008 Christophe Dolivet

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

	http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

------------------------------------------------------------------------

B)  This product includes software developed by John Resig:

jQuery JavaScript library

Copyright (c) 2010 John Resig, http://jquery.com/

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

------------------------------------------------------------------------

C)  This product includes software developed by Sam Stephenson:

Prototype JavaScript Framework

Copyright (c) 2005-2008 Sam Stephenson

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

------------------------------------------------------------------------

D)  This product includes software developed by Thomas Fuchs:

script.aculo.us JavaScript libraries

Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

------------------------------------------------------------------------

E)  This product includes software developed by Stuart Langridge and Joost de Valk:

sortable JavaScript

Copyright (c) 1997-2007 Stuart Langridge, Joost de Valk

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
                                                                                                                                                                                                                                                                                                                                                                                                       ./mvappsvr/config/                                                                                  0000777 0000000 0000000 00000000000 13114330126 013032  5                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/config/admin_password.conf                                                               0000666 0000000 0000000 00000000127 12534142432 016721  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ; configured by mod_config
[config]
  AuthUsername = "admin"
  AuthPassword = "admin"

                                                                                                                                                                                                                                                                                                                                                                                                                                         ./mvappsvr/config/dbc_options.conf                                                                  0000644 0000000 0000000 00000000724 13114330126 016203  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ; Optional configuration settings for 'dbc' and 'api' handlers

[dbc]

; Set maxContentLength to the maximum size of HTTP request body content.
; The default max length is 131072 (128K).
; maxContentLength = 65536

; Additional HTTP headers to send to DBC handler.
; This is a comma-separated list of headers that will be passed to the DBC
; handler. These will be prefixed with "HTTP_" and converted to upper-case.
; extraHeaders = "X-Requested-With,X-Forwarded-For"
                                            ./mvappsvr/config/mvdb.conf                                                                         0000666 0000000 0000000 00000000000 12534142432 014625  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/config/dbc_database.conf                                                                 0000666 0000000 0000000 00000000000 12534142432 016251  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   ./mvappsvr/config/mv_app_db.conf                                                                    0000666 0000000 0000000 00000000400 12534142432 015630  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   [handlers]
  "db"           = "mod_static"
  "favicon.ico"  = "mod_static"

[db]
  Directory = "db"
  DefaultMime = "text/html"
  404Redirect = /dbc/MVDB.MAIN

[favicon.ico]
  Directory = "db"
  DefaultResource = "favicon.ico"
  DefaultMime = "text/html"

                                                                                                                                                                                                                                                                ./mvappsvr/License.txt                                                                              0000644 0000000 0000000 00000026037 13364666755 013747  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   SOFTWARE LICENSE AGREEMENT


      Thank you for selecting the Software offered by Zumasys.  Please read this Agreement carefully.  

      By (1) clicking or otherwise indicating your electronic acceptance, (2) signing this Agreement, or (3) installing, accessing or using the Software, you (either personally or on behalf of an organization) accept all the terms and conditions of this Agreement.  
      
      If you do not agree with any of the provisions of this Agreement, do not indicate your acceptance of this Agreement, do not install or use the Software, and if you paid a license fee for the Software, immediately contact Zumasys in order to return the Software for a refund in accordance with the Return and Refund Policy described in the Zumasys Terms of Use found at http://www.zumasys.com/terms-of-use


1.	Definitions.

"Computer" means a virtual or physical device that accepts information in digital or similar form and manipulates it for a specific result based on a sequence of instructions, including without limitation desktop computers, laptops, tablets, mobile devices, telecommunication devices, thin client terminals, internet-connected devices, and hardware products capable of operating a wide variety of productivity, entertainment, or other software applications.  If a server license is acquired, "Computer" will also refer to a server.

"User Guides" means Zumasys' then current, generally available user guides for the Software, whether in electronic, paper or other form, which can be found on the Zumasys website.

"End User" means the user or users who is/are permitted under a license to use the Software.

"Licensee" means you or the organization on whose behalf you entered into this Agreement.

"Permitted Number" means the permitted number of Computers in which the Software may be installed.  If a Server License is acquired, the Permitted Number means one server and the permitted number of End Users.  The Permitted Number may be found on the invoice, receipt, or by clicking on "About" in the Software.    

"Software" means the Zumasys Software, including content, updates and new releases, for which the Licensee acquired use in accordance with this Agreement.

 "Zumasys" means Zumasys, Inc., a California corporation.

2.	Grant of License.  

      2.1	Subject to continuous compliance with this Agreement, Zumasys grants to Licensee a non-exclusive, revocable, limited right to install the Software in the manner and for the purposes described in the applicable User Guide, and only as applicable to the type of license acquired (e.g., single user, multiple user, or server license).  
      
      2.2	The foregoing license does not convey any rights of ownership in the Software.  Zumasys reserves all rights not expressly granted in Section 2.1.

3.	Restrictions.  

	3.1	Licensee will not exceed the Permitted Number when installing or using the Software.  

      3.2	The Software and this Agreement are transferable by Licensee only in accordance with the applicable User Guide, or with prior written consent signed by an authorized representative of Zumasys.  Any transfer in violation of this restriction will be void and the license to use the Software may be terminated by Zumasys in its sole discretion.

	3.3	The Software is owned by Zumasys and is protected by copyright, trade secret, and other intellectual property laws.  Except as may be expressly permitted in Section 2 above, Licensee will not: (a) modify, adapt, alter, translate or create derivative works of the Software; (b) decompile, dissemble, reverse engineer, or otherwise attempt to derive source code or other non-public features, elements or data, of the Software; (c) probe, test, tamper with, defeat, disable or circumvent, any encryption, security measure, protocol or other protective mechanism related to the Software; (d) sell, sublicense, lease, rent or distribute any portion of the Software, whether for profit or without charge; (e) make the Software accessible to the public or third parties, whether over networks, electronic bulletin boards, websites, service bureaus or otherwise; or (f) enable, encourage or allow anyone to do any of the foregoing.

	3.4	Except as expressly permitted under this Agreement, the copying or reproduction of the Software to any other server, location, or hardware is expressly prohibited.  However, Licensee may make copies of the Software for backup or archival purposes.

	3.5	Licensee will not export the Software, directly or indirectly, in violation of applicable laws or regulations including, without limitation, U.S. export regulations or the laws of any other country from which the Software is shipped.  

	3.6	Licensee will not remove or modify any proprietary markings in or on the Software.

4.	Limited Warranty.  

      4.1	Zumasys warrants to Licensee that the Software will perform substantially in accordance with the applicable User Guide for a period of 90 days after the date of purchase.  All warranty claims must be made within the 90-day warranty period by contacting Zumasys via email at support@zumasys.com or by telephone at 866-986-2797.  
      
      4.2	Despite Section 4.1, if the Software was provided to Licensee free of charge (e.g. the Personal License or a 30-day Trial License), the Software is delivered "AS IS" and with all faults, and without warranty of any kind. 
      
      4.3	OTHER THAN AS EXPRESSLY PROVIDED IN SECTION 4.1, ZUMASYS EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES, WHETHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE, TITLE, MERCHANTABILITY, NON-INFRINGEMENT, ACCURACY, RELIABILITY, SECURITY OR COMPATIBILITY.  ADDITIONALLY, ZUMASYS DOES NOT WARRANT THAT THE SOFTWARE IS FREE FROM BUGS, VIRUSES, INTERRUPTION, ERRORS, THEFT OR DESTRUCTION.  
      
      4.4	The entire liability of Zumasys related to any warranty claim under Section 4, and Licensee's sole and exclusive remedy under any warranty, will be limited to, at Zumasys' option: (a) repair of the Software based on the warranty claim; (b) replacement of the Software; or (c) a refund of the license fee paid by Licensee for the Software.  Replacement of the Software and refunds of the license fee will be subject to Licensee's return of the Software to Zumasys.  The warranty for replacement Software will be 30 days after the date of replacement or for the remainder of the original warranty term, whichever is longer.  

5.	Support and Maintenance.  Any support and maintenance not covered under the warranty described in Section 4 will be performed subject to Licensee's payment at Zumasys' standard rates.  Upgrades, including improvements and updates to the Software, may also be subject to the payment of an additional fee.

6.	Limitation of Liability.  TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE ENTIRE LIABILITY OF ZUMASYS AND ITS AGENTS FOR ALL MATTERS AND CLAIMS RELATING TO THIS AGREEMENT WILL BE LIMITED TO THE AMOUNT THE LICENSEE PAID FOR THE SOFTWARE DURING THE 12 MONTHS PRIOR TO THE DATE THE CLAIM AROSE.  ADDITIONALLY, SUBJECT TO APPLICABLE LAW, ZUMASYS AND ITS AGENTS WILL NOT BE LIABLE, WHETHER IN CONTRACT, TORT, OR OTHERWISE, FOR (A) INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES; OR (B) DAMAGES RELATING TO FAILURES OF TELECOMMUNICATIONS, THE INTERNET, ELECTRONIC COMMUNICATIONS, CORRUPTION, SECURITY, LOSS OR THEFT OF DATA, VIRUSES, SPYWARE, LOSS OF BUSINESS, REVENUE, PROFITS OR INVESTMENT, OR USE OF SOFTWARE OR HARDWARE THAT DOES NOT MEET ZUMASYS SYSTEM REQUIREMENTS.  THE ABOVE LIMITATIONS APPLY REGARDLESS OF WHETHER ZUMASYS OR ITS AGENTS HAD KNOWLEDGE OF THE POSSIBILITY OF THE LOSS OR DAMAGE.  

7.	U.S. Government Users.  If any agency or other division of the U.S. Government is the Licensee, the Software is provided with the license rights and restrictions described in this Agreement and any other legally required provisions of the United States government.

8.	Termination.  Zumasys may immediately terminate this Agreement, including the license to the Software, if Licensee fails to comply with any of the provisions of this Agreement or applicable laws.  Upon any termination, Licensee must immediately stop using, uninstall and destroy all copies of the Software of all End Users and otherwise, except one archival copy may be retained for legal purposes only.  Sections 3, 6, 8, 9 and 10 of this Agreement will survive and remain in effect even if this Agreement is terminated.

9.	Interpretation.  If an ambiguity or question of intent arises, this Agreement will be construed as if drafted jointly by the parties, and no presumption or burden of proof will favor or disfavor either party by virtue of authorship. All references to "including," "such as", or "for example" are intended to be interpreted in the broadest sense and without limitation.

10.	Other Important Provisions.  This Agreement (a) does not create any agency, partnership or joint venture; (b) embodies the entire understanding between the parties pertaining to the subject matter, and any additions or modifications to this Agreement must be made in writing and signed by both parties; (c) will inure to the benefit of and be binding upon the parties, their successors, and permitted assigns; (d) cannot be waived by failure to enforce any provision, except in writing; (e) will be construed according to the laws of the State of California, without giving effect to its conflict of laws provisions, and any action brought regarding this Agreement must be filed exclusively in the state or federal courts located in Orange County, California, U.S.A.; (f) will be construed as severable, so the invalidity or unenforceability of any provision will not affect the validity or enforceability of any other provision of this Agreement; and (g) has been entered into with the authority of Licensee and is legally binding on Licensee.  

11.	European Union Provisions.  Nothing included in this Agreement (including Section 10) will limit any non-waivable right to decompile the Software that may be required under mandatory law.  For example, if Licensee is located in the European Union (EU), Licensee may have the right upon certain conditions under applicable law to decompile the Software if it is necessary to do so in order to achieve interoperability of the Software with another software program, and Licensee has first asked Zumasys in writing to provide the information necessary to achieve such interoperability, and Zumasys has not made the information available.  The decompilation may only be performed by Licensee.  Zumasys has the right to impose reasonable conditions before providing the information.  Any information supplied by Zumasys or obtained by Licensee, as permitted under this Section 11, may only be used by Licensee for the purpose described and may not be disclosed to any third party or used to create any software which is substantially similar to the expression of the Software, or used for any other act which infringes Zumasys or its licensors' copyright.

12.	Contact Information.  If there are questions about this Agreement, please contact Zumasys at:

      Zumasys, Inc.
      1050 Calle Amanecer  Suite A
      San Clemente, CA 92673
      (949) 346-4228

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ./setup.sh                                                                                          0000755 0000000 0000000 00000044321 13350313463 011415  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   #!/bin/sh
#
# MV Application Server Installer
#
# Copywrite (C) 2010 Sierra Bravo Corporation, All Rights Reserved.
# This file embodies confidential information propriatary to Sierra
# Bravo Corporation, Inc.  The contents of this file may not be viewed,
# used, copied or disclosed without written permission from Sierra Bravo
# Corporation.
#
# Utility to perform the initial installation of the MultiValue
# Application Server.  
#
# Zumasys home page: http://www.zumasys.com
#
# Version history :
# - 1.2 : Integration of the MV License Server installation tasks
#         from Install.sh into this combined installer. 3/10/10/MDD
# - 1.1 : Added logfile location to installation options. 3/5/10/MDD 
# - 1.0 : Initial release.
#

## PARAMETERS SECTION ##

# Enable the welcome screen.
WELCOME_SCREEN=Y

# Enable the user agreement echo and prompt to accept.
USER_AGREEMENT=Y

# Search for previously installed versions.
PREV_INSTALL=N

# Default installation directory.
INSTALL_DIR=/usr/local/mvappsvr

# Default TCP port
TCP_PORT=8180

# Default user for installation
INSTALL_USER=root

# Location of the d3 configuration file.
PICKZERO_FILE=/usr/lib/pick/pick0

# Location of the log files
LOGFILE_DIR=/var/log

# libcurl.so.3
LIBCURLFILE=/usr/lib/libcurl.so.3



## END OF PARAMTERS SECTION ##

CAT=`which cat`
MORE=`which more`
LESS=`which less`
TAR=`which tar`
CP=`which cp`
MV=`which mv`
ECHO=`which echo`
CLEAR=`which clear`
UNAME=`which uname`
GREP=`which grep`
WC=`which wc`
MKDIR=`which mkdir`
AWK=`which awk`
ID=`which id`
TR=`which tr`
CUT=`which cut`
CHOWN=`which chown`
LN=`which ln`
LS=`which ls`
CHMOD=`which chmod`

REFRESH=`which refresh 2>/dev/null`
SYSTEMCTL=`which systemctl 2>/dev/null`

PLATFORM=`$UNAME`
if [ "$PLATFORM" = "Linux" ]; then
  ARCH=`$UNAME -m`
  case $ARCH in
    x86_64)
      ;;
    i686)
      ;;
    i586|i486|i386)
      ARCH='i686'
      ;;
    *)
      $ECHO "Unsupported platform architecture: $PLATFORM $ARCH"
      exit
      ;;
  esac
else
  ARCH=''
fi

if [ -f "$MORE" ]
then
  PAGER=$MORE
else
  if [ -f "$LESS" ]
  then
    PAGER=$LESS
  else
    PAGER=$CAT
  fi
fi


## CHECK FOR ERRORS ##
if [ ! -f "$PAGER" ]; then
  $ECHO "Can't find a reasonable pager program. Installation must exit."
  exit;
fi

if [ ! -f "$LN" ]; then
  $ECHO "Can't find \"ln\" to create symbolic links. Installation must exit."
  exit;
fi

if [ ! -f "$CHMOD" ]; then
  $ECHO "Can't find \"chmod\". Installation must exit."
  exit;
fi

if [ ! -f "$CHOWN" ]; then
  $ECHO "Can't find \"chown\" Installation must exit."
  exit;
fi

if [ ! -f "$UNAME" ]; then
  $ECHO "Can't find \"uname\", Installation must exit."
  exit
fi

if [ ! -f "$CUT" ]; then
  $ECHO "Can't find \"cut\", Installation must exit."
  exit
fi

if [ ! -f "$TR" ]; then
  $ECHO "Can't find \"tr\", Installation must exit."
  exit
fi

if [ ! -f "$MKDIR" ]; then
  $ECHO "Can't find your \"mkdir\" command, Installation must exit."
  exit
fi

if [ ! -f "$AWK" ]; then
  $ECHO "Can't find your \"awk\" command, Installation must exit."
  exit
fi

if [ ! -f "$ID" ]; then
  $ECHO "Can't find your \"id\" command, Installation must exit."
  exit
fi

USER_ID=`$ID -u`
if [ "$USER_ID" != "0" ]; then
  $ECHO "You must install this program as the user \"root\""
  exit
fi

if [ "$PLATFORM" = "Linux" ]; then
  ECHO="$ECHO -e"
  $ECHO "Installation platform is $PLATFORM"
else
  if [ "$PLATFORM" = "AIX" ] ;then
    $ECHO "Installation platform is $PLATFORM"
  else
    $ECHO "Unsupported platform $PLATFORM"
    exit
  fi
fi

INETD_OK=0
if [ "$PLATFORM" = "Linux" ]; then
  if  [ -d "/etc/xinetd.d" ]; then
    XINETD=`which xinetd`
    if [ -f "$XINETD" ]; then
      INETD_OK=1
    fi
  fi
  if [ "$INETD_OK" = "0" ]; then
    $ECHO "The xinetd package is not installed."
    $ECHO "Please install xinetd, then re-run this installer."
    YUM=`which yum`
    APTGET=`which apt-get`
    if [ -f "$YUM" ]; then
      $ECHO "Use 'yum install xinetd' to install the package."
    elif [ -f "$APTGET" ]; then
      $ECHO "Use 'apt-get install xinetd' to install the package."
    fi
    exit
  fi
else
  if [ -f "/etc/inetd.conf" ]; then
    INETD=`which inetd`
    if [ -f "$INETD" ]; then
      INETD_OK=1
    fi
  fi
  if [ "$INETD_OK" = "0" ]; then
    $ECHO "The inetd package is not installed."
    $ECHO "Please install inetd, then re-run this installer."
    exit
  fi
fi

if [ ! -f "/etc/services" ]; then
  $ECHO "Cannot find your /etc/services file."
  exit
fi

display_banner() {
  $CLEAR
  $ECHO "-------------------------------------------------------------------------------"
  $ECHO $1
  $ECHO "-------------------------------------------------------------------------------"
}


## WELCOME SCREEN ##
if [ "$WELCOME_SCREEN" = "Y" ]; then
  display_banner "MultiValue Application Server Installation"
  $ECHO
  $CAT welcome.txt
  $ECHO
  $ECHO "Press enter to start the installation process \c"
  read junk
  $CLEAR
fi



## USER AGREEMENT ##
if [ "$USER_AGREEMENT" = "Y" ]; then
  display_banner "License Agreement"
  $PAGER useragreement.txt 

  USER_AGREEMENT_DONE=0
  while [ "$USER_AGREEMENT_DONE" = "0" ]; do
    $ECHO
    $ECHO "To continue, type \"YES\" to accept the agreement, or \"NO\" to exit: \c"
    read ans
 
    if [ "$ans" = "YES" ]
    then
      $ECHO "User agreement is complete."
      USER_AGREEMENT_DONE=1
    else
      if [ "$ans" = "yes" ]
      then
        $ECHO "User agreement is complete."
        USER_AGREEMENT_DONE=1
      else
        if [ "$ans" = "no" ]; then
          $ECHO "Installation cancelled by user action."
          exit;
        else
          if [ "$ans" = "NO" ]; then
            $ECHO "Installation cancelled by user action."
            exit;
          fi
        fi
      fi
    fi
  done


fi


## PREVIOUS INSTALLATIONS ##
if [ "$PREV_INSTALL" = "Y" ]; then
  display_banner "Previous Installations"
  $ECHO
  $ECHO "Checking for previous versions of this software..."
  $ECHO
  LINES=`$GREP -c mvappsvr /etc/services`;
  if [ "$LINES" != "0" ]; then
    $ECHO "An existing or previous version of this software is already installed."
    $ECHO "Please remove all older versions before continuing with this installation."
    $ECHO
    exit
  fi

  if [ "$PLATFORM" = "Linux" ]; then
    if [ -f "/etc/xinetd.d/mvappsvr" ]; then
      $ECHO "An existing or previous version of this software is already installed."
      $ECHO "Please remove all older versions before continuing with this installation."
      $ECHO
      exit
    fi
  else
    LINES=`$GREP -c mvappsvr /etc/inetd.conf`;
    if [ "$LINES" != "0" ]; then
      $ECHO "An existing or previous version of this software is already installed."
      $ECHO "Please remove all older versions before continuing with this installation."
      $ECHO
      exit
    fi
  fi
fi


## Installation Directory ##
display_banner "Installation Directory"
$ECHO
$ECHO "Please specify the installation directory, or press ENTER "
$ECHO "to accept the default path."
INSTALL_DIR_OK=0
CREATE_INSTALL_DIR=0
while [ "$INSTALL_DIR_OK" = "0" ]
do
  $ECHO
  $ECHO "Installation Directory [$INSTALL_DIR]: \c"
  read DIR_ANS

  if [ "Z$DIR_ANS" != "Z" ]; then
    INSTALL_DIR=$DIR_ANS
  fi

  if [ -d "$INSTALL_DIR" ]; then
    $ECHO "$INSTALL_DIR already exists, use this directory? [n]: \c"
    read YN_ANS
    if [ "$YN_ANS" = "Y" ]; then
      INSTALL_DIR_OK=1
    else
      if [ "$YN_ANS" = "y" ]; then
        INSTALL_DIR_OK=1
      fi
    fi
  else
    $ECHO "$INSTALL_DIR does not exist, Create? [n]: \c"
    read YN_ANS
    if [ "$YN_ANS" = "Y" ]; then
      INSTALL_DIR_OK=1
      CREATE_INSTALL_DIR=1
    else
      if [ "$YN_ANS" = "y" ]; then
        INSTALL_DIR_OK=1
        CREATE_INSTALL_DIR=1
      fi
    fi
  fi
done

## Logfile Directory ##
display_banner "Logfile location"
$ECHO
$ECHO "Please specify the location where any log files should be"
$ECHO "stored.  Generally, the log files will not take up very "
$ECHO "much space unless you have enabled any of the debugging"
$ECHO "options."
$ECHO
LOG_DIR_OK=0
CREATE_LOG_DIR=0
LOG_DIR=$INSTALL_DIR/logs
while [ "$LOG_DIR_OK" = "0" ]
do
  $ECHO "Logfile Directory [$LOG_DIR]: \c"
  read LOGDIR_ANS

  if [ "Z$LOGDIR_ANS" != "Z" ]; then
    LOG_DIR=$LOGDIR_ANS
  fi

  if [ "$LOG_DIR" = "$INSTALL_DIR/logs" ]; then
    # if the just took the default, we're fine
    CREATE_LOG_DIR=0
    LOG_DIR_OK=1
  else
    if [ -d "$LOG_DIR" ]; then
      $ECHO "$LOG_DIR already exists, use this directory? [n]: \c"
      read YN_ANS
      if [ "$YN_ANS" = "Y" ]; then
        LOG_DIR_OK=1
      else
        if [ "$YN_ANS" = "y" ]; then
          LOG_DIR_OK=1
        fi
      fi
    else
      $ECHO "$LOG_DIR does not exist, Create? [n]: \c"
      read YN_ANS
      if [ "$YN_ANS" = "Y" ]; then
        LOG_DIR_OK=1
        CREATE_LOG_DIR=1
      else
        if [ "$YN_ANS" = "y" ]; then
          LOG_DIR_OK=1
          CREATE_LOG_DIR=1
        fi
      fi
    fi
  fi
done


## TCP Port Selection ##
display_banner "TCP Port Number"
$ECHO
$ECHO "Specify the TCP port to use for the application server."
$ECHO "The standard port for an internet web server is \"80\","
$ECHO "however there may already be a web server running on that port."
$ECHO "By default, this software will use TCP port \"$TCP_PORT\"."
$ECHO
TCP_PORT_OK=0
while [ "$TCP_PORT_OK" = "0" ]
do
  $ECHO
  $ECHO "TCP Port Number [$TCP_PORT]: \c"
  read PORT_ANS
  
  if [ "Z$PORT_ANS" != "Z" ]; then
    TCP_PORT=$PORT_ANS
  fi

  NCHECK=`$ECHO "$TCP_PORT"|$AWK '$0 ~/[^0-9]/ { print "FALSE" }'`
  if [ "$NCHECK" = "FALSE" ]; then
    $ECHO
    $ECHO "ERROR, Invalid port.  Please provide a numeric TCP port number."
  else
    $ECHO "Server will be installed on TCP port \"$TCP_PORT\", ok? [n]: \c"
    read YN_ANS
    if [ "$YN_ANS" = "Y" ]; then
      TCP_PORT_OK=1
    else
      if [ "$YN_ANS" = "y" ]; then
        TCP_PORT_OK=1
      fi
    fi
  fi
done

## Installation User ##
INSTALL_USER_OK=0
display_banner "Select a user for installation"
$ECHO
$ECHO "When using this software with a D3 database, the software needs"
$ECHO "to be installed using the same system user ID as the one associated"
$ECHO "with the D3 virtual machine. Typically, this is the user \"pick\","
$ECHO "or some variant."
$ECHO
$ECHO "For other MultiValue databases, enter a system user ID that has"
$ECHO "sufficient privileges to invoke a database command. If you"
$ECHO "are unsure of the user ID you should use, enter \"root\"."
$ECHO

if [ -f "$PICKZERO_FILE" ]; then

  ## Special instructions for D3, since we found a 'pick0' file ##
  
  PICK_CONF_FOUND=0
  PICKZERO_USER=`$GREP ^user $PICKZERO_FILE| $TR -s " "| $CUT -d" " -f2`

  if [ "X$PICKZERO_USER" != "X" ]; then
    $ECHO "The installer has located your D3 configuration file and has"
    $ECHO "determined that your D3 system is running as the user \"$PICKZERO_USER\"."
    $ECHO
    $ECHO "Confirm that this is correct, or enter the user that the"
    $ECHO "installer should use.  The user ID specified must match the"
    $ECHO "user ID that the D3 virtual machine uses."
    INSTALL_USER=$PICKZERO_USER
    PICK_CONF_FOUND=1
  fi
  if [ "$PICK_CONF_FOUND" = "0" ]; then
    $ECHO "Your D3 configuration file was located, but it does not contain"
    $ECHO "a line for 'user'  Please specify the user ID that the D3 virtual"
    $ECHO "machine uses."
    INSTALL_USER='root'
  fi
  
fi

while [ "$INSTALL_USER_OK" = "0" ]
do
  $ECHO
  $ECHO "Select a user id: [$INSTALL_USER]: \c"
  read USER_ANS

  if [ "X$USER_ANS" != "X" ]; then
    INSTALL_USER=$USER_ANS
  fi

  IDRES=`$ID -u $INSTALL_USER`

  if [ "X$IDRES" = "X" ]; then
    $ECHO "Invalid user id \"$INSTALL_USER\".  Please re-enter" 
  else
    $ECHO "Server will be installed as user \"$INSTALL_USER\", ok? [n]: \c"
    read YN_ANS
    if [ "$YN_ANS" = "Y" ]; then
      INSTALL_USER_OK=1
    else
      if [ "$YN_ANS" = "y" ]; then
        INSTALL_USER_OK=1
      fi
    fi
  fi
done


## Summary Screen ##
VALID_ANSWER=0
BEGIN_INSTALL=0
while [ "$VALID_ANSWER" = "0" ]
do
  display_banner "Installation Summary"
  $ECHO
  $ECHO "Please review the installation summary below. If the"
  $ECHO "parameters are correct, enter \"y\" to complete the"
  $ECHO "installation process with your selected parameters."
  $ECHO
  $ECHO "Installation directory: $INSTALL_DIR"
  $ECHO
  $ECHO "Log file directory:     $LOG_DIR"
  $ECHO
  $ECHO "TCP Port:               $TCP_PORT"
  $ECHO
  $ECHO "Install User:           $INSTALL_USER"
  $ECHO
  $ECHO "Begin Installation? [n] :\c"
  read YN_ANS
  if [ "$YN_ANS" = "Y" ]; then
    BEGIN_INSTALL=1
    VALID_ANSWER=1
  fi
  if [ "$YN_ANS" = "y" ]; then
    BEGIN_INSTALL=1
    VALID_ANSWER=1
  fi
  if [ "$YN_ANS" = "" ]; then
    BEGIN_INSTALL=0
    VALID_ANSWER=1
  fi
  if [ "$YN_ANS" = "N" ]; then
    BEGIN_INSTALL=0
    VALID_ANSWER=1
  fi
  if [ "$YN_ANS" = "n" ]; then
    BEGIN_INSTALL=0
    VALID_ANSWER=1
  fi
done



## Installation Procedure ##
$CLEAR
if [ "$BEGIN_INSTALL" = "1" ]; then
  display_banner "Installing your software"
  $ECHO

  # Create installation folder.
  if [ "$CREATE_INSTALL_DIR" = "1" ]; then
    $ECHO "Creating Installation Folder                              \c" 
    $MKDIR -p $INSTALL_DIR
    $ECHO "done."
  fi

  if [ "$CREATE_LOG_DIR" = "1" ]; then
    $ECHO "Creating logfiles Folder                                  \c"
    $MKDIR -p $LOG_DIR
    $ECHO "done."
  fi

  # Copy the distribution files into the installation folder.
  if [ -d "$INSTALL_DIR" ]; then
    $ECHO "Installing Components                                     \c"
    $CP -rp mvappsvr/* $INSTALL_DIR  
    if [ -f "$PLATFORM/$ARCH/mvappsvr" ]; then
      $CP $PLATFORM/$ARCH/mvappsvr $INSTALL_DIR/bin
    elif [ -f "$PLATFORM/mvappsvr" ]; then
      $CP $PLATFORM/mvappsvr $INSTALL_DIR/bin
    else
      $ECHO
      $ECHO "Installation failed - mvappsvr binary not found at"
      $ECHO "`pwd`/$PLATFORM/$ARCH"
      $ECHO "Please contact Zumasys for assistance."
      $ECHO
      exit;
    fi    
    $ECHO "done."
  else
    $ECHO
    $ECHO "Installation failed - installation directory does not exist."
    $ECHO "Please contact Zumasys for assitance."
    $ECHO
    exit;
  fi

  # chown this
  $CHOWN -R $INSTALL_USER $INSTALL_DIR

  # Check to see if libcurl.so.3 exists, if not, link to libcurl.so.4.1.1
  # ---------------------------------------------------------------------
  #if [ ! -f ${LIBCURLFILE} ]; then
  #  LibFile=$( $LS -l /usr/lib/libcurl.so.4* | $GREP "^-" | $CUT -c 44- )
  #  $LN -s ${LibFile} ${LIBCURLFILE}
  #fi

  # Update /etc/services with the service entry.
  $ECHO "Setting up /etc/services                                  \c"
  SERVICE_LINE="mvappsvr       $TCP_PORT/tcp                          # MultiValue Application Server"
  $ECHO >> /etc/services
  $ECHO "$SERVICE_LINE" >> /etc/services
  $ECHO "done."

  # Update inetd
  if [ "$PLATFORM" = "Linux" ]; then
    # Create my entry in /etc/xinetd.d
    $ECHO "Updating xinetd                                           \c"
 
    $ECHO "service mvappsvr"                                     >> /etc/xinetd.d/mvappsvr
    $ECHO "{"                                                    >> /etc/xinetd.d/mvappsvr
    $ECHO "   disable = no"                                      >> /etc/xinetd.d/mvappsvr
    $ECHO "   flags = REUSE"                                     >> /etc/xinetd.d/mvappsvr
    $ECHO "   socket_type = stream"                              >> /etc/xinetd.d/mvappsvr
    $ECHO "   wait = no"                                         >> /etc/xinetd.d/mvappsvr
    $ECHO "   user = $INSTALL_USER"                              >> /etc/xinetd.d/mvappsvr
    $ECHO "   server = $INSTALL_DIR/bin/mvappsvr"                >> /etc/xinetd.d/mvappsvr
    $ECHO "   server_args = -b $INSTALL_DIR -l $LOG_DIR/mvdblog" >> /etc/xinetd.d/mvappsvr
    $ECHO "   per_source = UNLIMITED"                            >> /etc/xinetd.d/mvappsvr
    $ECHO "   cps = 999 1"                                       >> /etc/xinetd.d/mvappsvr
    $ECHO "}"                                                    >> /etc/xinetd.d/mvappsvr
    $ECHO "done."
  else
    # Update /etc/inetd.conf with the new line
    $ECHO "Updating inetd                                            \c"
    $ECHO "mvappsvr  stream  tcp6    nowait  root    $INSTALL_DIR/bin/mvappsvr  mvappsvr -b $INSTALL_DIR -l $LOG_DIR/mvdblog" >> /etc/inetd.conf
    $ECHO "done."
  fi

  # Restart inetd.
  RESTART_CMD=""
  INETD="inetd"
  if [ "$PLATFORM" = "Linux" ]; then
    if [ "$SYSTEMCTL" != "" ]; then
      RESTART_CMD="$SYSTEMCTL restart xinetd.service"
      INETD="xinetd"
    elif [ -f "/etc/init.d/xinetd" ]; then
      RESTART_CMD="/etc/init.d/xinetd restart"
      INETD="xinetd"
    fi
  elif [ "$REFRESH" != "" ]; then
    RESTART_CMD="$REFRESH -s inetd"
  fi

  RESTART_OK=0
  $ECHO
  $ECHO "To complete the installation, your $INETD subsystem needs to be"
  $ECHO "re-started. This will not interrupt any active user processes"
  $ECHO "and can be done safely while the system is in use."
  if [ "$RESTART_CMD" != "" ]; then
    $ECHO
    $ECHO "If you would like, the installer will automatically execute the"
    $ECHO "command below to restart the service.  To accept this option, enter"
    $ECHO "\"y\" at the prompt.  To restart the service at a later time, enter"
    $ECHO "\"n\" or just press enter."
    $ECHO
    $ECHO "Command: $RESTART_CMD"
    $ECHO  
    $ECHO "Automatically restart $INETD? [n]: \c"
    read YN_ANS
    if [ "$YN_ANS" = "Y" ]; then
      RESTART_OK=1
    else
      if [ "$YN_ANS" = "y" ]; then
        RESTART_OK=1
      fi
    fi
    $ECHO
  fi

  if [ "$RESTART_OK" = "1" ]; then
    $ECHO "Restarting $INETD..."
    $RESTART_CMD
    $ECHO
  fi

  display_banner "Installation Complete!"
  $ECHO
  $ECHO "The MultiValue Application Server is now installed and"
  $ECHO "is ready to be configured.  To complete the configuration,"
  $ECHO "connect to this server using a web browser, on TCP port $TCP_PORT"
  $ECHO
  $ECHO "NOTE ABOUT FIREWALLS: "
  $ECHO "If you have a local firewall installed on this server, it may"
  $ECHO "prevent network users from connecting to the application. Your"
  $ECHO "system administrator may need to allow access to TCP port $TCP_PORT"
  $ECHO "before you can complete the configuration."
  $ECHO
  $ECHO "The URL to begin configuring your software is:"
  $ECHO "http://your_server_name_or_IP_address:$TCP_PORT/config"
  $ECHO
  $ECHO "You will be prompted for a username and password. Use the default"
  $ECHO "username and password described below."
  $ECHO
  $ECHO "Username: admin"
  $ECHO "Password: admin"
fi
                                                                                                                                                                                                                                                                                                               ./welcome.txt                                                                                       0000666 0000000 0000000 00000001425 12534142432 012113  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   You are about to install the MultiValue Application Server. During this process
you will be asked to provide:

* The target installation directory
* The TCP Port Number that the Application Server will use
* The Unix user associated with your MV database

The installation process will make the following updates to the system:
* The application server and package data will be placed in the installation
  directory.
* The /etc/services file will be updated to include the new mvappsvr service
  on the specified TCP port.
* An entry will be added to the xinetd configuration to enable the mvappsvr
  service.

The remainder of the MultiValue Application Server, and MultiValue Dashboard
application will be performed via a web browser referencing this service on
the specified TCP port.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           